Repository: godcheese/nimrod Branch: master Commit: 88f8a5fd75c1 Files: 1166 Total size: 9.1 MB Directory structure: gitextract_ccqzqvp9/ ├── .github/ │ └── ISSUE_TEMPLATE/ │ ├── bug_report.md │ └── feature_request.md ├── .gitignore ├── .gitlab-ci.yml ├── .sonarcloud.properties ├── .travis.yml ├── CHANGELOG.md ├── LICENSE ├── README.md ├── TODO.md ├── db/ │ ├── mysql/ │ │ ├── example/ │ │ │ └── example.sql │ │ ├── nimrod/ │ │ │ ├── nimrod.sql │ │ │ ├── table/ │ │ │ │ ├── api_category_table.sql │ │ │ │ ├── api_table.sql │ │ │ │ ├── attachment_table.sql │ │ │ │ ├── department_table.sql │ │ │ │ ├── dictionary_category_table.sql │ │ │ │ ├── dictionary_table.sql │ │ │ │ ├── job_runtime_log_table.sql │ │ │ │ ├── mail_attachment_table.sql │ │ │ │ ├── mail_table.sql │ │ │ │ ├── operation_log_table.sql │ │ │ │ ├── role_authority_table.sql │ │ │ │ ├── role_table.sql │ │ │ │ ├── user_password_reset_table.sql │ │ │ │ ├── user_role_table.sql │ │ │ │ ├── user_table.sql │ │ │ │ ├── view_menu_category_table.sql │ │ │ │ ├── view_menu_table.sql │ │ │ │ ├── view_page_api_table.sql │ │ │ │ ├── view_page_category_table.sql │ │ │ │ ├── view_page_component_api_table.sql │ │ │ │ ├── view_page_component_table.sql │ │ │ │ └── view_page_table.sql │ │ │ └── util.sql │ │ └── quartz/ │ │ └── tables_mysql_innodb.sql │ └── oracle/ │ ├── install_oracle_11g_r2.sh │ └── quartz/ │ └── tables_oracle.sql ├── docs/ │ ├── cron.md │ ├── getting_started.md │ └── java.md ├── lib/ │ └── tile-1.0.0.jar ├── pom.xml ├── scripts/ │ ├── git_clear_history_commit.sh.do_not_run │ ├── git_config.sh.do_not_run │ ├── gitlabci.build.sh │ ├── package.bat │ ├── package.sh │ ├── run_dev.bat │ ├── run_dev.sh │ ├── run_prod.bat │ ├── run_prod.sh │ └── travisci.build.sh └── src/ ├── main/ │ ├── java/ │ │ └── com/ │ │ └── godcheese/ │ │ ├── NimrodApplication.java │ │ ├── example/ │ │ │ ├── Example.java │ │ │ ├── api/ │ │ │ │ └── ExampleRestController.java │ │ │ ├── controller/ │ │ │ │ └── ExampleController.java │ │ │ ├── entity/ │ │ │ │ └── ExampleEntity.java │ │ │ ├── mapper/ │ │ │ │ ├── ExampleMapper.java │ │ │ │ └── ExampleMapper.xml │ │ │ └── service/ │ │ │ ├── ExampleService.java │ │ │ └── impl/ │ │ │ └── ExampleServiceImpl.java │ │ └── nimrod/ │ │ ├── common/ │ │ │ ├── Url.java │ │ │ ├── activemq/ │ │ │ │ └── ActiveMqConfiguration.java │ │ │ ├── controller/ │ │ │ │ ├── CustomBasicErrorController.java │ │ │ │ └── RestControllerAdviceHandler.java │ │ │ ├── druid/ │ │ │ │ └── DruidConfiguration.java │ │ │ ├── easyui/ │ │ │ │ ├── ComboTree.java │ │ │ │ ├── EasyUi.java │ │ │ │ ├── Pagination.java │ │ │ │ ├── Tree.java │ │ │ │ ├── TreeGrid.java │ │ │ │ └── TreeGridAdapter.java │ │ │ ├── exportbyexcel/ │ │ │ │ ├── ExportByExcel.java │ │ │ │ ├── ExportByExcelHandler.java │ │ │ │ ├── ExportByExcelUtil.java │ │ │ │ ├── IsOrNotExportByExcelHandler.java │ │ │ │ └── SimpleDateFormatExportByExcelHandler.java │ │ │ ├── interceptor/ │ │ │ │ ├── WebInterceptor.java │ │ │ │ └── WebMvcConfiguration.java │ │ │ ├── operationlog/ │ │ │ │ ├── OperationLog.java │ │ │ │ ├── OperationLogAspect.java │ │ │ │ ├── OperationLogEvent.java │ │ │ │ ├── OperationLogListener.java │ │ │ │ └── OperationLogType.java │ │ │ ├── others/ │ │ │ │ ├── BaseEntityAdapter.java │ │ │ │ ├── Common.java │ │ │ │ ├── FailureEntity.java │ │ │ │ └── SpringContextUtil.java │ │ │ ├── properties/ │ │ │ │ ├── AppProperties.java │ │ │ │ ├── LogProperties.java │ │ │ │ ├── MultipartProperties.java │ │ │ │ └── UpdatableMultipartConfigElement.java │ │ │ ├── security/ │ │ │ │ ├── AuthenticationFailureHandler.java │ │ │ │ ├── AuthenticationSuccessHandler.java │ │ │ │ ├── LogoutSuccessHandler.java │ │ │ │ ├── SimpleUser.java │ │ │ │ ├── SimpleUserDetails.java │ │ │ │ ├── SimpleUserDetailsServiceImpl.java │ │ │ │ ├── VerifyCodeFilter.java │ │ │ │ └── WebSecurityConfiguration.java │ │ │ └── thymeleaf/ │ │ │ ├── NimrodDialect.java │ │ │ └── SecurityAuthorityElementProcessor.java │ │ ├── mail/ │ │ │ ├── Mail.java │ │ │ ├── api/ │ │ │ │ └── MailRestController.java │ │ │ ├── controller/ │ │ │ │ └── MailController.java │ │ │ ├── entity/ │ │ │ │ ├── MailEntity.java │ │ │ │ └── MailFileEntity.java │ │ │ ├── mapper/ │ │ │ │ ├── MailMapper.java │ │ │ │ └── MailMapper.xml │ │ │ └── service/ │ │ │ ├── MailService.java │ │ │ └── impl/ │ │ │ └── MailServiceImpl.java │ │ ├── quartz/ │ │ │ ├── Quartz.java │ │ │ ├── api/ │ │ │ │ ├── JobRestController.java │ │ │ │ └── JobRuntimeLogRestController.java │ │ │ ├── controller/ │ │ │ │ ├── JobController.java │ │ │ │ └── JobRuntimeLogController.java │ │ │ ├── entity/ │ │ │ │ ├── JobEntity.java │ │ │ │ └── JobRuntimeLogEntity.java │ │ │ ├── job/ │ │ │ │ ├── BaseJob.java │ │ │ │ ├── SimpleJob.java │ │ │ │ └── SimpleJob2.java │ │ │ ├── listener/ │ │ │ │ └── GlobalJobListener.java │ │ │ ├── mapper/ │ │ │ │ ├── JobMapper.java │ │ │ │ ├── JobMapper.xml │ │ │ │ ├── JobRuntimeLogMapper.java │ │ │ │ └── JobRuntimeLogMapper.xml │ │ │ └── service/ │ │ │ ├── JobRuntimeLogService.java │ │ │ ├── JobService.java │ │ │ └── impl/ │ │ │ ├── JobRuntimeLogServiceImpl.java │ │ │ └── JobServiceImpl.java │ │ ├── system/ │ │ │ ├── System.java │ │ │ ├── api/ │ │ │ │ ├── DictionaryCategoryRestController.java │ │ │ │ ├── DictionaryRestController.java │ │ │ │ ├── FileRestController.java │ │ │ │ ├── OperationLogRestController.java │ │ │ │ └── SystemRestController.java │ │ │ ├── controller/ │ │ │ │ ├── DictionaryCategoryController.java │ │ │ │ ├── DictionaryController.java │ │ │ │ ├── FileController.java │ │ │ │ ├── OperationLogController.java │ │ │ │ └── SystemController.java │ │ │ ├── entity/ │ │ │ │ ├── DictionaryCategoryEntity.java │ │ │ │ ├── DictionaryEntity.java │ │ │ │ ├── FileEntity.java │ │ │ │ └── OperationLogEntity.java │ │ │ ├── mapper/ │ │ │ │ ├── DictionaryCategoryMapper.java │ │ │ │ ├── DictionaryCategoryMapper.xml │ │ │ │ ├── DictionaryMapper.java │ │ │ │ ├── DictionaryMapper.xml │ │ │ │ ├── FileMapper.java │ │ │ │ ├── FileMapper.xml │ │ │ │ ├── OperationLogMapper.java │ │ │ │ └── OperationLogMapper.xml │ │ │ └── service/ │ │ │ ├── DictionaryCategoryService.java │ │ │ ├── DictionaryService.java │ │ │ ├── FileService.java │ │ │ ├── OperationLogService.java │ │ │ └── impl/ │ │ │ ├── DictionaryCategoryServiceImpl.java │ │ │ ├── DictionaryServiceImpl.java │ │ │ ├── FileServiceImpl.java │ │ │ └── OperationLogServiceImpl.java │ │ └── user/ │ │ ├── User.java │ │ ├── api/ │ │ │ ├── ApiCategoryRestController.java │ │ │ ├── ApiRestController.java │ │ │ ├── DepartmentRestController.java │ │ │ ├── RoleAuthorityRestController.java │ │ │ ├── RoleRestController.java │ │ │ ├── RoleViewMenuCategoryRestController.java │ │ │ ├── RoleViewMenuRestController.java │ │ │ ├── UserRestController.java │ │ │ ├── UserRoleRestController.java │ │ │ ├── ViewMenuCategoryRestController.java │ │ │ ├── ViewMenuRestController.java │ │ │ ├── ViewPageApiRestController.java │ │ │ ├── ViewPageCategoryRestController.java │ │ │ ├── ViewPageComponentApiRestController.java │ │ │ ├── ViewPageComponentRestController.java │ │ │ └── ViewPageRestController.java │ │ ├── controller/ │ │ │ ├── ApiCategoryController.java │ │ │ ├── ApiController.java │ │ │ ├── DepartmentController.java │ │ │ ├── RoleAuthorityController.java │ │ │ ├── RoleController.java │ │ │ ├── RoleViewMenuController.java │ │ │ ├── UserController.java │ │ │ ├── UserRoleController.java │ │ │ ├── ViewMenuCategoryController.java │ │ │ ├── ViewMenuController.java │ │ │ ├── ViewPageApiController.java │ │ │ ├── ViewPageCategoryController.java │ │ │ ├── ViewPageComponentApiController.java │ │ │ ├── ViewPageComponentController.java │ │ │ └── ViewPageController.java │ │ ├── entity/ │ │ │ ├── ApiCategoryEntity.java │ │ │ ├── ApiEntity.java │ │ │ ├── DepartmentEntity.java │ │ │ ├── RoleAuthorityEntity.java │ │ │ ├── RoleEntity.java │ │ │ ├── RoleViewMenuCategoryEntity.java │ │ │ ├── RoleViewMenuEntity.java │ │ │ ├── UserEntity.java │ │ │ ├── UserRoleEntity.java │ │ │ ├── UserVerifyCodeEntity.java │ │ │ ├── ViewMenuCategoryEntity.java │ │ │ ├── ViewMenuEntity.java │ │ │ ├── ViewPageApiEntity.java │ │ │ ├── ViewPageCategoryEntity.java │ │ │ ├── ViewPageComponentApiEntity.java │ │ │ ├── ViewPageComponentEntity.java │ │ │ └── ViewPageEntity.java │ │ ├── mapper/ │ │ │ ├── ApiCategoryMapper.java │ │ │ ├── ApiCategoryMapper.xml │ │ │ ├── ApiMapper.java │ │ │ ├── ApiMapper.xml │ │ │ ├── DepartmentMapper.java │ │ │ ├── DepartmentMapper.xml │ │ │ ├── RoleAuthorityMapper.java │ │ │ ├── RoleAuthorityMapper.xml │ │ │ ├── RoleMapper.java │ │ │ ├── RoleMapper.xml │ │ │ ├── RoleViewMenuCategoryMapper.java │ │ │ ├── RoleViewMenuCategoryMapper.xml │ │ │ ├── RoleViewMenuMapper.java │ │ │ ├── RoleViewMenuMapper.xml │ │ │ ├── UserMapper.java │ │ │ ├── UserMapper.xml │ │ │ ├── UserRoleMapper.java │ │ │ ├── UserRoleMapper.xml │ │ │ ├── UserVerifyCodeMapper.java │ │ │ ├── UserVerifyCodeMapper.xml │ │ │ ├── ViewMenuCategoryMapper.java │ │ │ ├── ViewMenuCategoryMapper.xml │ │ │ ├── ViewMenuMapper.java │ │ │ ├── ViewMenuMapper.xml │ │ │ ├── ViewPageApiMapper.java │ │ │ ├── ViewPageApiMapper.xml │ │ │ ├── ViewPageCategoryMapper.java │ │ │ ├── ViewPageCategoryMapper.xml │ │ │ ├── ViewPageComponentApiMapper.java │ │ │ ├── ViewPageComponentApiMapper.xml │ │ │ ├── ViewPageComponentMapper.java │ │ │ ├── ViewPageComponentMapper.xml │ │ │ ├── ViewPageMapper.java │ │ │ └── ViewPageMapper.xml │ │ └── service/ │ │ ├── ApiCategoryService.java │ │ ├── ApiService.java │ │ ├── DepartmentService.java │ │ ├── RoleAuthorityService.java │ │ ├── RoleService.java │ │ ├── RoleViewMenuCategoryService.java │ │ ├── RoleViewMenuService.java │ │ ├── UserRoleService.java │ │ ├── UserService.java │ │ ├── UserVerifyCodeService.java │ │ ├── ViewMenuCategoryService.java │ │ ├── ViewMenuService.java │ │ ├── ViewPageApiService.java │ │ ├── ViewPageCategoryService.java │ │ ├── ViewPageComponentApiService.java │ │ ├── ViewPageComponentService.java │ │ ├── ViewPageService.java │ │ └── impl/ │ │ ├── ApiCategoryServiceImpl.java │ │ ├── ApiServiceImpl.java │ │ ├── DepartmentServiceImpl.java │ │ ├── RoleAuthorityServiceImpl.java │ │ ├── RoleServiceImpl.java │ │ ├── RoleViewMenuCategoryServiceImpl.java │ │ ├── RoleViewMenuServiceImpl.java │ │ ├── UserRoleServiceImpl.java │ │ ├── UserServiceImpl.java │ │ ├── UserVerifyCodeServiceImpl.java │ │ ├── ViewMenuCategoryServiceImpl.java │ │ ├── ViewMenuServiceImpl.java │ │ ├── ViewPageApiServiceImpl.java │ │ ├── ViewPageCategoryServiceImpl.java │ │ ├── ViewPageComponentApiServiceImpl.java │ │ ├── ViewPageComponentServiceImpl.java │ │ └── ViewPageServiceImpl.java │ └── resources/ │ ├── application-dev.properties │ ├── application-prod.properties │ ├── application.properties │ ├── i18n/ │ │ └── zh_cn.properties │ ├── logback-spring.xml │ ├── static/ │ │ ├── assets/ │ │ │ ├── css/ │ │ │ │ ├── base.css │ │ │ │ ├── global.css │ │ │ │ ├── index.css │ │ │ │ ├── login.css │ │ │ │ └── workbench.css │ │ │ ├── img/ │ │ │ │ └── login/ │ │ │ │ └── login_body_left.jpg2 │ │ │ ├── js/ │ │ │ │ ├── global.js │ │ │ │ ├── index.js │ │ │ │ ├── login.js │ │ │ │ ├── url.js │ │ │ │ ├── util.js │ │ │ │ └── workbench.js │ │ │ └── vendor/ │ │ │ ├── easyui-plus-1.0.0/ │ │ │ │ ├── CHANGELOG.md │ │ │ │ ├── README.md │ │ │ │ ├── css/ │ │ │ │ │ └── easyui.plus.css │ │ │ │ ├── js/ │ │ │ │ │ └── easyui.plus.js │ │ │ │ └── themes/ │ │ │ │ ├── angular.css │ │ │ │ ├── blue/ │ │ │ │ │ └── easyui.css │ │ │ │ ├── color.css │ │ │ │ ├── icon.css │ │ │ │ ├── mobile.css │ │ │ │ └── vue.css │ │ │ ├── echarts.min.js │ │ │ ├── html5shiv-3.7.3.min.js │ │ │ ├── iconfont/ │ │ │ │ ├── demo.css │ │ │ │ ├── demo_index.html │ │ │ │ ├── iconfont.css │ │ │ │ ├── iconfont.js │ │ │ │ └── iconfont.json │ │ │ ├── jquery/ │ │ │ │ ├── jquery-1.12.4.js │ │ │ │ └── jquery-1.12.4.min.js │ │ │ ├── jquery-easyui-1.9.7/ │ │ │ │ ├── changelog.txt │ │ │ │ ├── demo/ │ │ │ │ │ ├── accordion/ │ │ │ │ │ │ ├── _content.html │ │ │ │ │ │ ├── actions.html │ │ │ │ │ │ ├── ajax.html │ │ │ │ │ │ ├── basic.html │ │ │ │ │ │ ├── datagrid_data1.json │ │ │ │ │ │ ├── expandable.html │ │ │ │ │ │ ├── fluid.html │ │ │ │ │ │ ├── horizontal.html │ │ │ │ │ │ ├── multiple.html │ │ │ │ │ │ └── tools.html │ │ │ │ │ ├── calendar/ │ │ │ │ │ │ ├── basic.html │ │ │ │ │ │ ├── custom.html │ │ │ │ │ │ ├── disabledate.html │ │ │ │ │ │ ├── firstday.html │ │ │ │ │ │ ├── fluid.html │ │ │ │ │ │ └── weeknumber.html │ │ │ │ │ ├── checkbox/ │ │ │ │ │ │ └── basic.html │ │ │ │ │ ├── combo/ │ │ │ │ │ │ ├── animation.html │ │ │ │ │ │ └── basic.html │ │ │ │ │ ├── combobox/ │ │ │ │ │ │ ├── actions.html │ │ │ │ │ │ ├── basic.html │ │ │ │ │ │ ├── combobox_data1.json │ │ │ │ │ │ ├── combobox_data2.json │ │ │ │ │ │ ├── customformat.html │ │ │ │ │ │ ├── dynamicdata.html │ │ │ │ │ │ ├── fluid.html │ │ │ │ │ │ ├── group.html │ │ │ │ │ │ ├── icons.html │ │ │ │ │ │ ├── itemicon.html │ │ │ │ │ │ ├── multiline.html │ │ │ │ │ │ ├── multiple.html │ │ │ │ │ │ ├── navigation.html │ │ │ │ │ │ ├── remotedata.html │ │ │ │ │ │ └── remotejsonp.html │ │ │ │ │ ├── combogrid/ │ │ │ │ │ │ ├── actions.html │ │ │ │ │ │ ├── basic.html │ │ │ │ │ │ ├── datagrid_data1.json │ │ │ │ │ │ ├── fluid.html │ │ │ │ │ │ ├── initvalue.html │ │ │ │ │ │ ├── multiple.html │ │ │ │ │ │ ├── navigation.html │ │ │ │ │ │ └── setvalue.html │ │ │ │ │ ├── combotree/ │ │ │ │ │ │ ├── actions.html │ │ │ │ │ │ ├── basic.html │ │ │ │ │ │ ├── fluid.html │ │ │ │ │ │ ├── initvalue.html │ │ │ │ │ │ ├── multiple.html │ │ │ │ │ │ ├── test.html │ │ │ │ │ │ └── tree_data1.json │ │ │ │ │ ├── combotreegrid/ │ │ │ │ │ │ ├── basic.html │ │ │ │ │ │ ├── multiple.html │ │ │ │ │ │ └── treegrid_data1.json │ │ │ │ │ ├── datagrid/ │ │ │ │ │ │ ├── aligncolumns.html │ │ │ │ │ │ ├── basic.html │ │ │ │ │ │ ├── cacheeditor.html │ │ │ │ │ │ ├── cellediting.html │ │ │ │ │ │ ├── cellstyle.html │ │ │ │ │ │ ├── checkbox.html │ │ │ │ │ │ ├── clientpagination.html │ │ │ │ │ │ ├── columngroup.html │ │ │ │ │ │ ├── complextoolbar.html │ │ │ │ │ │ ├── contextmenu.html │ │ │ │ │ │ ├── custompager.html │ │ │ │ │ │ ├── datagrid_data1.json │ │ │ │ │ │ ├── datagrid_data2.json │ │ │ │ │ │ ├── fluid.html │ │ │ │ │ │ ├── footer.html │ │ │ │ │ │ ├── formatcolumns.html │ │ │ │ │ │ ├── frozencolumns.html │ │ │ │ │ │ ├── frozenrows.html │ │ │ │ │ │ ├── mergecells.html │ │ │ │ │ │ ├── multisorting.html │ │ │ │ │ │ ├── products.json │ │ │ │ │ │ ├── rowborder.html │ │ │ │ │ │ ├── rowediting.html │ │ │ │ │ │ ├── rowstyle.html │ │ │ │ │ │ ├── selection.html │ │ │ │ │ │ ├── simpletoolbar.html │ │ │ │ │ │ └── transform.html │ │ │ │ │ ├── datalist/ │ │ │ │ │ │ ├── basic.html │ │ │ │ │ │ ├── checkbox.html │ │ │ │ │ │ ├── datalist_data1.json │ │ │ │ │ │ ├── group.html │ │ │ │ │ │ ├── multiselect.html │ │ │ │ │ │ └── remotedata.html │ │ │ │ │ ├── datebox/ │ │ │ │ │ │ ├── basic.html │ │ │ │ │ │ ├── buttons.html │ │ │ │ │ │ ├── clone.html │ │ │ │ │ │ ├── dateformat.html │ │ │ │ │ │ ├── events.html │ │ │ │ │ │ ├── fluid.html │ │ │ │ │ │ ├── restrict.html │ │ │ │ │ │ ├── sharedcalendar.html │ │ │ │ │ │ └── validate.html │ │ │ │ │ ├── datetimebox/ │ │ │ │ │ │ ├── basic.html │ │ │ │ │ │ ├── fluid.html │ │ │ │ │ │ ├── initvalue.html │ │ │ │ │ │ └── showseconds.html │ │ │ │ │ ├── datetimespinner/ │ │ │ │ │ │ ├── basic.html │ │ │ │ │ │ ├── clearicon.html │ │ │ │ │ │ ├── fluid.html │ │ │ │ │ │ └── format.html │ │ │ │ │ ├── demo.css │ │ │ │ │ ├── dialog/ │ │ │ │ │ │ ├── basic.html │ │ │ │ │ │ ├── complextoolbar.html │ │ │ │ │ │ ├── fluid.html │ │ │ │ │ │ └── toolbarbuttons.html │ │ │ │ │ ├── draggable/ │ │ │ │ │ │ ├── basic.html │ │ │ │ │ │ ├── constrain.html │ │ │ │ │ │ └── snap.html │ │ │ │ │ ├── droppable/ │ │ │ │ │ │ ├── accept.html │ │ │ │ │ │ ├── basic.html │ │ │ │ │ │ └── sort.html │ │ │ │ │ ├── easyloader/ │ │ │ │ │ │ └── basic.html │ │ │ │ │ ├── filebox/ │ │ │ │ │ │ ├── basic.html │ │ │ │ │ │ ├── buttonalign.html │ │ │ │ │ │ └── fluid.html │ │ │ │ │ ├── form/ │ │ │ │ │ │ ├── basic.html │ │ │ │ │ │ ├── floatinglabel.html │ │ │ │ │ │ ├── form_data1.json │ │ │ │ │ │ ├── load.html │ │ │ │ │ │ └── validateonsubmit.html │ │ │ │ │ ├── layout/ │ │ │ │ │ │ ├── _content.html │ │ │ │ │ │ ├── addremove.html │ │ │ │ │ │ ├── autoheight.html │ │ │ │ │ │ ├── basic.html │ │ │ │ │ │ ├── collapsetitle.html │ │ │ │ │ │ ├── complex.html │ │ │ │ │ │ ├── customcollapsetitle.html │ │ │ │ │ │ ├── datagrid_data1.json │ │ │ │ │ │ ├── fluid.html │ │ │ │ │ │ ├── full.html │ │ │ │ │ │ ├── nestedlayout.html │ │ │ │ │ │ ├── nocollapsible.html │ │ │ │ │ │ ├── propertygrid_data1.json │ │ │ │ │ │ └── tree_data1.json │ │ │ │ │ ├── linkbutton/ │ │ │ │ │ │ ├── basic.html │ │ │ │ │ │ ├── fluid.html │ │ │ │ │ │ ├── group.html │ │ │ │ │ │ ├── iconalign.html │ │ │ │ │ │ ├── plain.html │ │ │ │ │ │ ├── size.html │ │ │ │ │ │ ├── style.html │ │ │ │ │ │ └── toggle.html │ │ │ │ │ ├── maskedbox/ │ │ │ │ │ │ └── basic.html │ │ │ │ │ ├── menu/ │ │ │ │ │ │ ├── basic.html │ │ │ │ │ │ ├── customitem.html │ │ │ │ │ │ ├── events.html │ │ │ │ │ │ ├── inline.html │ │ │ │ │ │ └── nav.html │ │ │ │ │ ├── menubutton/ │ │ │ │ │ │ ├── actions.html │ │ │ │ │ │ ├── alignment.html │ │ │ │ │ │ ├── basic.html │ │ │ │ │ │ └── nav.html │ │ │ │ │ ├── messager/ │ │ │ │ │ │ ├── alert.html │ │ │ │ │ │ ├── basic.html │ │ │ │ │ │ ├── interactive.html │ │ │ │ │ │ └── position.html │ │ │ │ │ ├── numberbox/ │ │ │ │ │ │ ├── basic.html │ │ │ │ │ │ ├── fluid.html │ │ │ │ │ │ ├── format.html │ │ │ │ │ │ └── range.html │ │ │ │ │ ├── numberspinner/ │ │ │ │ │ │ ├── align.html │ │ │ │ │ │ ├── basic.html │ │ │ │ │ │ ├── fluid.html │ │ │ │ │ │ ├── increment.html │ │ │ │ │ │ └── range.html │ │ │ │ │ ├── pagination/ │ │ │ │ │ │ ├── attaching.html │ │ │ │ │ │ ├── basic.html │ │ │ │ │ │ ├── custombuttons.html │ │ │ │ │ │ ├── layout.html │ │ │ │ │ │ ├── links.html │ │ │ │ │ │ └── simple.html │ │ │ │ │ ├── panel/ │ │ │ │ │ │ ├── _content.html │ │ │ │ │ │ ├── basic.html │ │ │ │ │ │ ├── customtools.html │ │ │ │ │ │ ├── fluid.html │ │ │ │ │ │ ├── footer.html │ │ │ │ │ │ ├── halign.html │ │ │ │ │ │ ├── loadcontent.html │ │ │ │ │ │ ├── nestedpanel.html │ │ │ │ │ │ └── paneltools.html │ │ │ │ │ ├── passwordbox/ │ │ │ │ │ │ ├── basic.html │ │ │ │ │ │ ├── flash.html │ │ │ │ │ │ └── validatepassword.html │ │ │ │ │ ├── progressbar/ │ │ │ │ │ │ ├── basic.html │ │ │ │ │ │ └── fluid.html │ │ │ │ │ ├── propertygrid/ │ │ │ │ │ │ ├── basic.html │ │ │ │ │ │ ├── customcolumns.html │ │ │ │ │ │ ├── groupformat.html │ │ │ │ │ │ └── propertygrid_data1.json │ │ │ │ │ ├── radiobutton/ │ │ │ │ │ │ └── basic.html │ │ │ │ │ ├── resizable/ │ │ │ │ │ │ └── basic.html │ │ │ │ │ ├── searchbox/ │ │ │ │ │ │ ├── basic.html │ │ │ │ │ │ ├── category.html │ │ │ │ │ │ └── fluid.html │ │ │ │ │ ├── sidemenu/ │ │ │ │ │ │ ├── basic.html │ │ │ │ │ │ ├── sidemenu_style.css │ │ │ │ │ │ └── style.html │ │ │ │ │ ├── slider/ │ │ │ │ │ │ ├── basic.html │ │ │ │ │ │ ├── fluid.html │ │ │ │ │ │ ├── formattip.html │ │ │ │ │ │ ├── nonlinear.html │ │ │ │ │ │ ├── range.html │ │ │ │ │ │ ├── rule.html │ │ │ │ │ │ └── vertical.html │ │ │ │ │ ├── splitbutton/ │ │ │ │ │ │ ├── actions.html │ │ │ │ │ │ └── basic.html │ │ │ │ │ ├── switchbutton/ │ │ │ │ │ │ ├── action.html │ │ │ │ │ │ └── basic.html │ │ │ │ │ ├── tabs/ │ │ │ │ │ │ ├── _content.html │ │ │ │ │ │ ├── autoheight.html │ │ │ │ │ │ ├── basic.html │ │ │ │ │ │ ├── dropdown.html │ │ │ │ │ │ ├── fixedwidth.html │ │ │ │ │ │ ├── fluid.html │ │ │ │ │ │ ├── hover.html │ │ │ │ │ │ ├── nestedtabs.html │ │ │ │ │ │ ├── striptools.html │ │ │ │ │ │ ├── style.html │ │ │ │ │ │ ├── tabimage.html │ │ │ │ │ │ ├── tabposition.html │ │ │ │ │ │ ├── tabstools.html │ │ │ │ │ │ └── tree_data1.json │ │ │ │ │ ├── tagbox/ │ │ │ │ │ │ ├── autocomplete.html │ │ │ │ │ │ ├── basic.html │ │ │ │ │ │ ├── button.html │ │ │ │ │ │ ├── format.html │ │ │ │ │ │ ├── style.html │ │ │ │ │ │ ├── tagbox_data1.json │ │ │ │ │ │ └── validate.html │ │ │ │ │ ├── textbox/ │ │ │ │ │ │ ├── basic.html │ │ │ │ │ │ ├── button.html │ │ │ │ │ │ ├── clearicon.html │ │ │ │ │ │ ├── custom.html │ │ │ │ │ │ ├── fluid.html │ │ │ │ │ │ ├── icons.html │ │ │ │ │ │ ├── multiline.html │ │ │ │ │ │ └── size.html │ │ │ │ │ ├── timepicker/ │ │ │ │ │ │ └── basic.html │ │ │ │ │ ├── timespinner/ │ │ │ │ │ │ ├── actions.html │ │ │ │ │ │ ├── basic.html │ │ │ │ │ │ ├── fluid.html │ │ │ │ │ │ ├── hour12.html │ │ │ │ │ │ └── range.html │ │ │ │ │ ├── tooltip/ │ │ │ │ │ │ ├── _content.html │ │ │ │ │ │ ├── _dialog.html │ │ │ │ │ │ ├── ajax.html │ │ │ │ │ │ ├── basic.html │ │ │ │ │ │ ├── customcontent.html │ │ │ │ │ │ ├── customstyle.html │ │ │ │ │ │ ├── position.html │ │ │ │ │ │ ├── toolbar.html │ │ │ │ │ │ └── tooltipdialog.html │ │ │ │ │ ├── tree/ │ │ │ │ │ │ ├── actions.html │ │ │ │ │ │ ├── animation.html │ │ │ │ │ │ ├── basic.html │ │ │ │ │ │ ├── checkbox.html │ │ │ │ │ │ ├── contextmenu.html │ │ │ │ │ │ ├── customcheckbox.html │ │ │ │ │ │ ├── dnd.html │ │ │ │ │ │ ├── editable.html │ │ │ │ │ │ ├── formatting.html │ │ │ │ │ │ ├── icons.html │ │ │ │ │ │ ├── lazyload.html │ │ │ │ │ │ ├── lines.html │ │ │ │ │ │ ├── tree_data1.json │ │ │ │ │ │ └── tree_data2.json │ │ │ │ │ ├── treegrid/ │ │ │ │ │ │ ├── actions.html │ │ │ │ │ │ ├── basic.html │ │ │ │ │ │ ├── checkbox.html │ │ │ │ │ │ ├── clientpagination.html │ │ │ │ │ │ ├── contextmenu.html │ │ │ │ │ │ ├── customcheckbox.html │ │ │ │ │ │ ├── editable.html │ │ │ │ │ │ ├── fluid.html │ │ │ │ │ │ ├── footer.html │ │ │ │ │ │ ├── lines.html │ │ │ │ │ │ ├── reports.html │ │ │ │ │ │ ├── treegrid_data1.json │ │ │ │ │ │ ├── treegrid_data2.json │ │ │ │ │ │ └── treegrid_data3.json │ │ │ │ │ ├── validatebox/ │ │ │ │ │ │ ├── basic.html │ │ │ │ │ │ ├── customtooltip.html │ │ │ │ │ │ ├── errorplacement.html │ │ │ │ │ │ └── validateonblur.html │ │ │ │ │ └── window/ │ │ │ │ │ ├── basic.html │ │ │ │ │ ├── borderstyle.html │ │ │ │ │ ├── customtools.html │ │ │ │ │ ├── fluid.html │ │ │ │ │ ├── footer.html │ │ │ │ │ ├── inlinewindow.html │ │ │ │ │ ├── modalwindow.html │ │ │ │ │ └── windowlayout.html │ │ │ │ ├── demo-mobile/ │ │ │ │ │ ├── accordion/ │ │ │ │ │ │ ├── _content.html │ │ │ │ │ │ ├── basic.html │ │ │ │ │ │ └── header.html │ │ │ │ │ ├── animation/ │ │ │ │ │ │ ├── basic.html │ │ │ │ │ │ ├── fade.html │ │ │ │ │ │ ├── pop.html │ │ │ │ │ │ └── slide.html │ │ │ │ │ ├── badge/ │ │ │ │ │ │ ├── basic.html │ │ │ │ │ │ ├── button.html │ │ │ │ │ │ ├── list.html │ │ │ │ │ │ └── tabs.html │ │ │ │ │ ├── button/ │ │ │ │ │ │ ├── basic.html │ │ │ │ │ │ ├── group.html │ │ │ │ │ │ ├── style.html │ │ │ │ │ │ └── switch.html │ │ │ │ │ ├── datagrid/ │ │ │ │ │ │ ├── basic.html │ │ │ │ │ │ └── rowediting.html │ │ │ │ │ ├── datalist/ │ │ │ │ │ │ ├── basic.html │ │ │ │ │ │ ├── group.html │ │ │ │ │ │ └── selection.html │ │ │ │ │ ├── dialog/ │ │ │ │ │ │ ├── basic.html │ │ │ │ │ │ └── message.html │ │ │ │ │ ├── form/ │ │ │ │ │ │ └── basic.html │ │ │ │ │ ├── input/ │ │ │ │ │ │ ├── numberspinner.html │ │ │ │ │ │ └── textbox.html │ │ │ │ │ ├── layout/ │ │ │ │ │ │ └── basic.html │ │ │ │ │ ├── menu/ │ │ │ │ │ │ ├── basic.html │ │ │ │ │ │ └── menubar.html │ │ │ │ │ ├── panel/ │ │ │ │ │ │ ├── _content.html │ │ │ │ │ │ ├── ajax.html │ │ │ │ │ │ ├── basic.html │ │ │ │ │ │ └── nav.html │ │ │ │ │ ├── simplelist/ │ │ │ │ │ │ ├── basic.html │ │ │ │ │ │ ├── button.html │ │ │ │ │ │ ├── group.html │ │ │ │ │ │ ├── image.html │ │ │ │ │ │ └── link.html │ │ │ │ │ ├── tabs/ │ │ │ │ │ │ ├── basic.html │ │ │ │ │ │ ├── nav.html │ │ │ │ │ │ └── pill.html │ │ │ │ │ ├── toolbar/ │ │ │ │ │ │ ├── basic.html │ │ │ │ │ │ ├── button.html │ │ │ │ │ │ └── menu.html │ │ │ │ │ └── tree/ │ │ │ │ │ ├── basic.html │ │ │ │ │ └── dnd.html │ │ │ │ ├── easyloader.js │ │ │ │ ├── jquery.easyui.min.js │ │ │ │ ├── jquery.easyui.mobile.js │ │ │ │ ├── jquery.min.js │ │ │ │ ├── license_freeware.txt │ │ │ │ ├── locale/ │ │ │ │ │ ├── easyui-lang-af.js │ │ │ │ │ ├── easyui-lang-am.js │ │ │ │ │ ├── easyui-lang-ar.js │ │ │ │ │ ├── easyui-lang-bg.js │ │ │ │ │ ├── easyui-lang-ca.js │ │ │ │ │ ├── easyui-lang-cs.js │ │ │ │ │ ├── easyui-lang-cz.js │ │ │ │ │ ├── easyui-lang-da.js │ │ │ │ │ ├── easyui-lang-de.js │ │ │ │ │ ├── easyui-lang-el.js │ │ │ │ │ ├── easyui-lang-en.js │ │ │ │ │ ├── easyui-lang-es.js │ │ │ │ │ ├── easyui-lang-fa.js │ │ │ │ │ ├── easyui-lang-fr.js │ │ │ │ │ ├── easyui-lang-it.js │ │ │ │ │ ├── easyui-lang-jp.js │ │ │ │ │ ├── easyui-lang-ko.js │ │ │ │ │ ├── easyui-lang-nl.js │ │ │ │ │ ├── easyui-lang-pl.js │ │ │ │ │ ├── easyui-lang-pt_BR.js │ │ │ │ │ ├── easyui-lang-ru.js │ │ │ │ │ ├── easyui-lang-sv_SE.js │ │ │ │ │ ├── easyui-lang-tr.js │ │ │ │ │ ├── easyui-lang-ua.js │ │ │ │ │ ├── easyui-lang-zh_CN.js │ │ │ │ │ └── easyui-lang-zh_TW.js │ │ │ │ ├── plugins/ │ │ │ │ │ ├── jquery.accordion.js │ │ │ │ │ ├── jquery.calendar │ │ │ │ │ ├── jquery.calendar.js │ │ │ │ │ ├── jquery.checkbox.js │ │ │ │ │ ├── jquery.combo.js │ │ │ │ │ ├── jquery.combobox.js │ │ │ │ │ ├── jquery.combogrid.js │ │ │ │ │ ├── jquery.combotree.js │ │ │ │ │ ├── jquery.combotreegrid.js │ │ │ │ │ ├── jquery.datagrid.js │ │ │ │ │ ├── jquery.datalist.js │ │ │ │ │ ├── jquery.datebox.js │ │ │ │ │ ├── jquery.datetimebox.js │ │ │ │ │ ├── jquery.datetimespinner.js │ │ │ │ │ ├── jquery.dialog.js │ │ │ │ │ ├── jquery.draggable.js │ │ │ │ │ ├── jquery.droppable.js │ │ │ │ │ ├── jquery.filebox.js │ │ │ │ │ ├── jquery.form.js │ │ │ │ │ ├── jquery.layout.js │ │ │ │ │ ├── jquery.linkbutton.js │ │ │ │ │ ├── jquery.maskedbox.js │ │ │ │ │ ├── jquery.menu.js │ │ │ │ │ ├── jquery.menubutton.js │ │ │ │ │ ├── jquery.messager.js │ │ │ │ │ ├── jquery.mobile.js │ │ │ │ │ ├── jquery.numberbox.js │ │ │ │ │ ├── jquery.numberspinner.js │ │ │ │ │ ├── jquery.pagination.js │ │ │ │ │ ├── jquery.panel.js │ │ │ │ │ ├── jquery.parser.js │ │ │ │ │ ├── jquery.passwordbox.js │ │ │ │ │ ├── jquery.progressbar.js │ │ │ │ │ ├── jquery.propertygrid.js │ │ │ │ │ ├── jquery.radiobutton.js │ │ │ │ │ ├── jquery.resizable.js │ │ │ │ │ ├── jquery.searchbox.js │ │ │ │ │ ├── jquery.sidemenu.js │ │ │ │ │ ├── jquery.slider.js │ │ │ │ │ ├── jquery.spinner.js │ │ │ │ │ ├── jquery.splitbutton.js │ │ │ │ │ ├── jquery.switchbutton.js │ │ │ │ │ ├── jquery.tabs.js │ │ │ │ │ ├── jquery.tagbox.js │ │ │ │ │ ├── jquery.textbox.js │ │ │ │ │ ├── jquery.timepicker.js │ │ │ │ │ ├── jquery.timespinner.js │ │ │ │ │ ├── jquery.tooltip.js │ │ │ │ │ ├── jquery.tree.js │ │ │ │ │ ├── jquery.treegrid.js │ │ │ │ │ ├── jquery.validatebox.js │ │ │ │ │ └── jquery.window.js │ │ │ │ ├── readme.txt │ │ │ │ ├── src/ │ │ │ │ │ ├── easyloader.js │ │ │ │ │ ├── jquery.accordion.js │ │ │ │ │ ├── jquery.calendar.js │ │ │ │ │ ├── jquery.combobox.js │ │ │ │ │ ├── jquery.datebox.js │ │ │ │ │ ├── jquery.draggable.js │ │ │ │ │ ├── jquery.droppable.js │ │ │ │ │ ├── jquery.form.js │ │ │ │ │ ├── jquery.linkbutton.js │ │ │ │ │ ├── jquery.menu.js │ │ │ │ │ ├── jquery.parser.js │ │ │ │ │ ├── jquery.progressbar.js │ │ │ │ │ ├── jquery.propertygrid.js │ │ │ │ │ ├── jquery.resizable.js │ │ │ │ │ ├── jquery.slider.js │ │ │ │ │ ├── jquery.tabs.js │ │ │ │ │ └── jquery.window.js │ │ │ │ └── themes/ │ │ │ │ ├── angular.css │ │ │ │ ├── black/ │ │ │ │ │ ├── accordion.css │ │ │ │ │ ├── calendar.css │ │ │ │ │ ├── checkbox.css │ │ │ │ │ ├── combo.css │ │ │ │ │ ├── combobox.css │ │ │ │ │ ├── datagrid.css │ │ │ │ │ ├── datalist.css │ │ │ │ │ ├── datebox.css │ │ │ │ │ ├── dialog.css │ │ │ │ │ ├── easyui.css │ │ │ │ │ ├── filebox.css │ │ │ │ │ ├── flex.css │ │ │ │ │ ├── layout.css │ │ │ │ │ ├── linkbutton.css │ │ │ │ │ ├── menu.css │ │ │ │ │ ├── menubutton.css │ │ │ │ │ ├── messager.css │ │ │ │ │ ├── numberbox.css │ │ │ │ │ ├── pagination.css │ │ │ │ │ ├── panel.css │ │ │ │ │ ├── passwordbox.css │ │ │ │ │ ├── progressbar.css │ │ │ │ │ ├── propertygrid.css │ │ │ │ │ ├── radiobutton.css │ │ │ │ │ ├── searchbox.css │ │ │ │ │ ├── sidemenu.css │ │ │ │ │ ├── slider.css │ │ │ │ │ ├── spinner.css │ │ │ │ │ ├── splitbutton.css │ │ │ │ │ ├── switchbutton.css │ │ │ │ │ ├── tabs.css │ │ │ │ │ ├── tagbox.css │ │ │ │ │ ├── textbox.css │ │ │ │ │ ├── timepicker.css │ │ │ │ │ ├── tooltip.css │ │ │ │ │ ├── tree.css │ │ │ │ │ ├── validatebox.css │ │ │ │ │ └── window.css │ │ │ │ ├── bootstrap/ │ │ │ │ │ ├── accordion.css │ │ │ │ │ ├── calendar.css │ │ │ │ │ ├── checkbox.css │ │ │ │ │ ├── combo.css │ │ │ │ │ ├── combobox.css │ │ │ │ │ ├── datagrid.css │ │ │ │ │ ├── datalist.css │ │ │ │ │ ├── datebox.css │ │ │ │ │ ├── dialog.css │ │ │ │ │ ├── easyui.css │ │ │ │ │ ├── filebox.css │ │ │ │ │ ├── flex.css │ │ │ │ │ ├── layout.css │ │ │ │ │ ├── linkbutton.css │ │ │ │ │ ├── menu.css │ │ │ │ │ ├── menubutton.css │ │ │ │ │ ├── messager.css │ │ │ │ │ ├── numberbox.css │ │ │ │ │ ├── pagination.css │ │ │ │ │ ├── panel.css │ │ │ │ │ ├── passwordbox.css │ │ │ │ │ ├── progressbar.css │ │ │ │ │ ├── propertygrid.css │ │ │ │ │ ├── radiobutton.css │ │ │ │ │ ├── searchbox.css │ │ │ │ │ ├── sidemenu.css │ │ │ │ │ ├── slider.css │ │ │ │ │ ├── spinner.css │ │ │ │ │ ├── splitbutton.css │ │ │ │ │ ├── switchbutton.css │ │ │ │ │ ├── tabs.css │ │ │ │ │ ├── tagbox.css │ │ │ │ │ ├── textbox.css │ │ │ │ │ ├── timepicker.css │ │ │ │ │ ├── tooltip.css │ │ │ │ │ ├── tree.css │ │ │ │ │ ├── validatebox.css │ │ │ │ │ └── window.css │ │ │ │ ├── color.css │ │ │ │ ├── default/ │ │ │ │ │ ├── accordion.css │ │ │ │ │ ├── calendar.css │ │ │ │ │ ├── checkbox.css │ │ │ │ │ ├── combo.css │ │ │ │ │ ├── combobox.css │ │ │ │ │ ├── datagrid.css │ │ │ │ │ ├── datalist.css │ │ │ │ │ ├── datebox.css │ │ │ │ │ ├── dialog.css │ │ │ │ │ ├── easyui.css │ │ │ │ │ ├── filebox.css │ │ │ │ │ ├── flex.css │ │ │ │ │ ├── layout.css │ │ │ │ │ ├── linkbutton.css │ │ │ │ │ ├── menu.css │ │ │ │ │ ├── menubutton.css │ │ │ │ │ ├── messager.css │ │ │ │ │ ├── numberbox.css │ │ │ │ │ ├── pagination.css │ │ │ │ │ ├── panel.css │ │ │ │ │ ├── passwordbox.css │ │ │ │ │ ├── progressbar.css │ │ │ │ │ ├── propertygrid.css │ │ │ │ │ ├── radiobutton.css │ │ │ │ │ ├── searchbox.css │ │ │ │ │ ├── sidemenu.css │ │ │ │ │ ├── slider.css │ │ │ │ │ ├── spinner.css │ │ │ │ │ ├── splitbutton.css │ │ │ │ │ ├── switchbutton.css │ │ │ │ │ ├── tabs.css │ │ │ │ │ ├── tagbox.css │ │ │ │ │ ├── textbox.css │ │ │ │ │ ├── timepicker.css │ │ │ │ │ ├── tooltip.css │ │ │ │ │ ├── tree.css │ │ │ │ │ ├── validatebox.css │ │ │ │ │ └── window.css │ │ │ │ ├── gray/ │ │ │ │ │ ├── accordion.css │ │ │ │ │ ├── calendar.css │ │ │ │ │ ├── checkbox.css │ │ │ │ │ ├── combo.css │ │ │ │ │ ├── combobox.css │ │ │ │ │ ├── datagrid.css │ │ │ │ │ ├── datalist.css │ │ │ │ │ ├── datebox.css │ │ │ │ │ ├── dialog.css │ │ │ │ │ ├── easyui.css │ │ │ │ │ ├── filebox.css │ │ │ │ │ ├── flex.css │ │ │ │ │ ├── layout.css │ │ │ │ │ ├── linkbutton.css │ │ │ │ │ ├── menu.css │ │ │ │ │ ├── menubutton.css │ │ │ │ │ ├── messager.css │ │ │ │ │ ├── numberbox.css │ │ │ │ │ ├── pagination.css │ │ │ │ │ ├── panel.css │ │ │ │ │ ├── passwordbox.css │ │ │ │ │ ├── progressbar.css │ │ │ │ │ ├── propertygrid.css │ │ │ │ │ ├── radiobutton.css │ │ │ │ │ ├── searchbox.css │ │ │ │ │ ├── sidemenu.css │ │ │ │ │ ├── slider.css │ │ │ │ │ ├── spinner.css │ │ │ │ │ ├── splitbutton.css │ │ │ │ │ ├── switchbutton.css │ │ │ │ │ ├── tabs.css │ │ │ │ │ ├── tagbox.css │ │ │ │ │ ├── textbox.css │ │ │ │ │ ├── timepicker.css │ │ │ │ │ ├── tooltip.css │ │ │ │ │ ├── tree.css │ │ │ │ │ ├── validatebox.css │ │ │ │ │ └── window.css │ │ │ │ ├── icon.css │ │ │ │ ├── material/ │ │ │ │ │ ├── accordion.css │ │ │ │ │ ├── calendar.css │ │ │ │ │ ├── checkbox.css │ │ │ │ │ ├── combo.css │ │ │ │ │ ├── combobox.css │ │ │ │ │ ├── datagrid.css │ │ │ │ │ ├── datalist.css │ │ │ │ │ ├── datebox.css │ │ │ │ │ ├── dialog.css │ │ │ │ │ ├── easyui.css │ │ │ │ │ ├── filebox.css │ │ │ │ │ ├── flex.css │ │ │ │ │ ├── layout.css │ │ │ │ │ ├── linkbutton.css │ │ │ │ │ ├── menu.css │ │ │ │ │ ├── menubutton.css │ │ │ │ │ ├── messager.css │ │ │ │ │ ├── numberbox.css │ │ │ │ │ ├── pagination.css │ │ │ │ │ ├── panel.css │ │ │ │ │ ├── passwordbox.css │ │ │ │ │ ├── progressbar.css │ │ │ │ │ ├── propertygrid.css │ │ │ │ │ ├── radiobutton.css │ │ │ │ │ ├── searchbox.css │ │ │ │ │ ├── sidemenu.css │ │ │ │ │ ├── slider.css │ │ │ │ │ ├── spinner.css │ │ │ │ │ ├── splitbutton.css │ │ │ │ │ ├── switchbutton.css │ │ │ │ │ ├── tabs.css │ │ │ │ │ ├── tagbox.css │ │ │ │ │ ├── textbox.css │ │ │ │ │ ├── timepicker.css │ │ │ │ │ ├── tooltip.css │ │ │ │ │ ├── tree.css │ │ │ │ │ ├── validatebox.css │ │ │ │ │ └── window.css │ │ │ │ ├── material-blue/ │ │ │ │ │ ├── accordion.css │ │ │ │ │ ├── calendar.css │ │ │ │ │ ├── checkbox.css │ │ │ │ │ ├── combo.css │ │ │ │ │ ├── combobox.css │ │ │ │ │ ├── datagrid.css │ │ │ │ │ ├── datalist.css │ │ │ │ │ ├── datebox.css │ │ │ │ │ ├── dialog.css │ │ │ │ │ ├── easyui.css │ │ │ │ │ ├── filebox.css │ │ │ │ │ ├── flex.css │ │ │ │ │ ├── layout.css │ │ │ │ │ ├── linkbutton.css │ │ │ │ │ ├── menu.css │ │ │ │ │ ├── menubutton.css │ │ │ │ │ ├── messager.css │ │ │ │ │ ├── numberbox.css │ │ │ │ │ ├── pagination.css │ │ │ │ │ ├── panel.css │ │ │ │ │ ├── passwordbox.css │ │ │ │ │ ├── progressbar.css │ │ │ │ │ ├── propertygrid.css │ │ │ │ │ ├── radiobutton.css │ │ │ │ │ ├── searchbox.css │ │ │ │ │ ├── sidemenu.css │ │ │ │ │ ├── slider.css │ │ │ │ │ ├── spinner.css │ │ │ │ │ ├── splitbutton.css │ │ │ │ │ ├── switchbutton.css │ │ │ │ │ ├── tabs.css │ │ │ │ │ ├── tagbox.css │ │ │ │ │ ├── textbox.css │ │ │ │ │ ├── timepicker.css │ │ │ │ │ ├── tooltip.css │ │ │ │ │ ├── tree.css │ │ │ │ │ ├── validatebox.css │ │ │ │ │ └── window.css │ │ │ │ ├── material-teal/ │ │ │ │ │ ├── accordion.css │ │ │ │ │ ├── calendar.css │ │ │ │ │ ├── checkbox.css │ │ │ │ │ ├── combo.css │ │ │ │ │ ├── combobox.css │ │ │ │ │ ├── datagrid.css │ │ │ │ │ ├── datalist.css │ │ │ │ │ ├── datebox.css │ │ │ │ │ ├── dialog.css │ │ │ │ │ ├── easyui.css │ │ │ │ │ ├── filebox.css │ │ │ │ │ ├── flex.css │ │ │ │ │ ├── layout.css │ │ │ │ │ ├── linkbutton.css │ │ │ │ │ ├── menu.css │ │ │ │ │ ├── menubutton.css │ │ │ │ │ ├── messager.css │ │ │ │ │ ├── numberbox.css │ │ │ │ │ ├── pagination.css │ │ │ │ │ ├── panel.css │ │ │ │ │ ├── passwordbox.css │ │ │ │ │ ├── progressbar.css │ │ │ │ │ ├── propertygrid.css │ │ │ │ │ ├── radiobutton.css │ │ │ │ │ ├── searchbox.css │ │ │ │ │ ├── sidemenu.css │ │ │ │ │ ├── slider.css │ │ │ │ │ ├── spinner.css │ │ │ │ │ ├── splitbutton.css │ │ │ │ │ ├── switchbutton.css │ │ │ │ │ ├── tabs.css │ │ │ │ │ ├── tagbox.css │ │ │ │ │ ├── textbox.css │ │ │ │ │ ├── timepicker.css │ │ │ │ │ ├── tooltip.css │ │ │ │ │ ├── tree.css │ │ │ │ │ ├── validatebox.css │ │ │ │ │ └── window.css │ │ │ │ ├── metro/ │ │ │ │ │ ├── accordion.css │ │ │ │ │ ├── calendar.css │ │ │ │ │ ├── checkbox.css │ │ │ │ │ ├── combo.css │ │ │ │ │ ├── combobox.css │ │ │ │ │ ├── datagrid.css │ │ │ │ │ ├── datalist.css │ │ │ │ │ ├── datebox.css │ │ │ │ │ ├── dialog.css │ │ │ │ │ ├── easyui.css │ │ │ │ │ ├── filebox.css │ │ │ │ │ ├── flex.css │ │ │ │ │ ├── layout.css │ │ │ │ │ ├── linkbutton.css │ │ │ │ │ ├── menu.css │ │ │ │ │ ├── menubutton.css │ │ │ │ │ ├── messager.css │ │ │ │ │ ├── numberbox.css │ │ │ │ │ ├── pagination.css │ │ │ │ │ ├── panel.css │ │ │ │ │ ├── passwordbox.css │ │ │ │ │ ├── progressbar.css │ │ │ │ │ ├── propertygrid.css │ │ │ │ │ ├── radiobutton.css │ │ │ │ │ ├── searchbox.css │ │ │ │ │ ├── sidemenu.css │ │ │ │ │ ├── slider.css │ │ │ │ │ ├── spinner.css │ │ │ │ │ ├── splitbutton.css │ │ │ │ │ ├── switchbutton.css │ │ │ │ │ ├── tabs.css │ │ │ │ │ ├── tagbox.css │ │ │ │ │ ├── textbox.css │ │ │ │ │ ├── timepicker.css │ │ │ │ │ ├── tooltip.css │ │ │ │ │ ├── tree.css │ │ │ │ │ ├── validatebox.css │ │ │ │ │ └── window.css │ │ │ │ ├── mobile.css │ │ │ │ ├── react.css │ │ │ │ └── vue.css │ │ │ ├── jquery.form.min.js │ │ │ ├── jquery.placeholder-2.3.1.js │ │ │ └── webuploader-0.1.5/ │ │ │ ├── README.md │ │ │ ├── Uploader.swf │ │ │ ├── webuploader.css │ │ │ ├── webuploader.custom.js │ │ │ ├── webuploader.custom.min.js │ │ │ ├── webuploader.fis.js │ │ │ ├── webuploader.flashonly.js │ │ │ ├── webuploader.flashonly.min.js │ │ │ ├── webuploader.html5only.js │ │ │ ├── webuploader.html5only.min.js │ │ │ ├── webuploader.js │ │ │ ├── webuploader.min.js │ │ │ ├── webuploader.noimage.js │ │ │ ├── webuploader.noimage.min.js │ │ │ ├── webuploader.nolog.js │ │ │ ├── webuploader.nolog.min.js │ │ │ ├── webuploader.withoutimage.js │ │ │ └── webuploader.withoutimage.min.js │ │ └── robots.txt │ └── templates/ │ ├── 403.html │ ├── 404.html │ ├── 500.html │ ├── example/ │ │ └── test.html │ ├── mail/ │ │ ├── list.html │ │ ├── send.html │ │ ├── send_dialog.html │ │ ├── template/ │ │ │ ├── change_email_verify_code.html.bak │ │ │ ├── change_password_verify_code.html │ │ │ └── email_verify_code.html │ │ └── view_dialog.html │ ├── quartz/ │ │ ├── job/ │ │ │ ├── add_dialog.html │ │ │ ├── edit_dialog.html │ │ │ └── list.html │ │ └── job_runtime_log/ │ │ ├── add_dialog.html │ │ ├── edit_dialog.html │ │ └── list.html │ ├── system/ │ │ ├── close.html │ │ ├── dictionary/ │ │ │ ├── add_dialog.html │ │ │ ├── edit_dialog.html │ │ │ └── list.html │ │ ├── dictionary_category/ │ │ │ ├── add_dialog.html │ │ │ └── edit_dialog.html │ │ ├── file/ │ │ │ ├── edit_dialog.html │ │ │ ├── list.html │ │ │ ├── upload_all_dialog.html │ │ │ ├── upload_one_dialog.html │ │ │ └── upload_one_dialog.html.bak │ │ ├── index.html │ │ ├── loading.html │ │ ├── operation_log/ │ │ │ ├── list.html │ │ │ └── view_dialog.html │ │ └── workbench.html │ ├── user/ │ │ ├── add_dialog.html │ │ ├── api/ │ │ │ ├── add_dialog.html │ │ │ ├── edit_dialog.html │ │ │ └── list.html │ │ ├── api_category/ │ │ │ ├── add_dialog.html │ │ │ └── edit_dialog.html │ │ ├── change_avatar_dialog.html │ │ ├── change_email_dialog.html │ │ ├── change_password_dialog.html │ │ ├── department/ │ │ │ ├── add_dialog.html │ │ │ ├── edit_dialog.html │ │ │ └── list.html │ │ ├── edit_dialog.html │ │ ├── list.html │ │ ├── login.html │ │ ├── logout.html │ │ ├── profile.html │ │ ├── role/ │ │ │ ├── add_dialog.html │ │ │ ├── edit_dialog.html │ │ │ └── list.html │ │ ├── role_authority/ │ │ │ ├── api.html │ │ │ └── view_page.html │ │ ├── role_view_menu/ │ │ │ └── list.html │ │ ├── user_role/ │ │ │ ├── add_dialog.html │ │ │ └── list.html │ │ ├── view_menu/ │ │ │ ├── add_dialog.html │ │ │ ├── edit_dialog.html │ │ │ └── list.html │ │ ├── view_menu_category/ │ │ │ ├── add_dialog.html │ │ │ └── edit_dialog.html │ │ ├── view_page/ │ │ │ ├── add_dialog.html │ │ │ ├── edit_dialog.html │ │ │ └── list.html │ │ ├── view_page_api/ │ │ │ ├── add_dialog.html │ │ │ ├── edit_dialog.html │ │ │ └── list.html │ │ ├── view_page_category/ │ │ │ ├── add_dialog.html │ │ │ └── edit_dialog.html │ │ ├── view_page_component/ │ │ │ ├── add_dialog.html │ │ │ └── edit_dialog.html │ │ └── view_page_component_api/ │ │ ├── add_dialog.html │ │ ├── edit_dialog.html │ │ └── list.html │ └── widget/ │ ├── base.html │ └── basejs.html └── test/ └── java/ └── com/ └── godcheese/ └── nimrod/ └── NimrodApplicationTests.java ================================================ FILE CONTENTS ================================================ ================================================ FILE: .github/ISSUE_TEMPLATE/bug_report.md ================================================ --- name: Bug report about: Create a report to help us improve --- **Describe the bug** A clear and concise description of what the bug is. **To Reproduce** Steps to reproduce the behavior: 1. Go to '...' 2. Click on '....' 3. Scroll down to '....' 4. See error **Expected behavior** A clear and concise description of what you expected to happen. **Screenshots** If applicable, add screenshots to help explain your problem. **Desktop (please complete the following information):** - OS: [e.g. iOS] - Browser [e.g. chrome, safari] - Version [e.g. 22] **Smartphone (please complete the following information):** - Device: [e.g. iPhone6] - OS: [e.g. iOS8.1] - Browser [e.g. stock browser, safari] - Version [e.g. 22] **Additional context** Add any other context about the problem here. ================================================ FILE: .github/ISSUE_TEMPLATE/feature_request.md ================================================ --- name: Feature request about: Suggest an idea for this project --- **Is your feature request related to a problem? Please describe.** A clear and concise description of what the problem is. Ex. I'm always frustrated when [...] **Describe the solution you'd like** A clear and concise description of what you want to happen. **Describe alternatives you've considered** A clear and concise description of any alternative solutions or features you've considered. **Additional context** Add any other context or screenshots about the feature request here. ================================================ FILE: .gitignore ================================================ HELP.md target/ !.mvn/wrapper/maven-wrapper.jar !**/src/main/** !**/src/test/** ### STS ### .apt_generated .classpath .factorypath .project .settings .springBeans .sts4-cache ### IntelliJ IDEA ### .idea *.iws *.iml *.ipr ### VS Code ### .vscode/ ### NetBeans ### /nbproject/private/ /build/ /nbbuild/ /dist/ /nbdist/ /.nb-gradle/ ### macOS ### .DS_Store ### JRebel ### rebel.xml ### Project ### /upload /logs ================================================ FILE: .gitlab-ci.yml ================================================ stages: - install job: stage: install script: - chmod +x ./scripts/gitlabci.build.sh - ./scripts/gitlabci.build.sh ================================================ FILE: .sonarcloud.properties ================================================ # Path to sources #sonar.sources=. sonar.exclusions=src/main/resources/** sonar.inclusions=src/main/java/** # Path to tests #sonar.tests= #sonar.test.exclusions= #sonar.test.inclusions= # Source encoding sonar.sourceEncoding=UTF-8 # Exclusions for copy-paste detection #sonar.cpd.exclusions= ================================================ FILE: .travis.yml ================================================ os: linux dist: trusty sudo: true group: stable script: - chmod +x ./scripts/travisci.build.sh - ./scripts/travisci.build.sh cache: directories: - $HOME/.m2 ================================================ FILE: CHANGELOG.md ================================================ ## Changelog - v0.8.0 2020.07.24 - refactor:更改包名(20200721) - refactor:优化代码(20200712) - v0.7.3 2020.05.31 - feat:升级 Spring Boot 至 2.3.0(20200530) - feat:升级 Easy UI 至 1.9.5(20200530) - v0.7.2 2020.03.17 - fix:修复运行 jar 报 org.springframework.beans.factory.UnsatisfiedDependencyException 异常的问题(20200316) - v0.7.1 2020.03.15 - fix:修复 jar 包运行登录界面验证码图片生成失败问题(20200315) - v0.7.0 2020.03.08 - feat:新的界面(20200307) - v0.6.5 2019.11.26 - fix:修复大量 bug(20191126) - v0.5.5 2019.05.12 - fix:修复无法新建用户问题(20190506) - feat:升级 EasyUI 至 1.8.1(20190507) - fix:优化部门显示(20190507) - feat:新增用户禁用字段(20190508) - v0.5.4 2019.04.18 - fix:修复 Duird 数据库连接池 Monitor 页部署上线后无权限访问的问题(20190418) - refactor:优化 Druid 数据库连接池配置(20190418) - v0.5.3 2019.04.17 - fix:修复部署到 Linux 系统中验证码生成乱码的问题(20190417) - v0.5.2 2019.04.15 - feat:升级 Spring Boot Starter Parent 至 2.1.4.RELEASE 版本(20190415) - feat:升级 MyBatis Spring Boot Starter 至 2.0.1(20190415) - feat:升级 Druid Spring Boot Starter 至 1.1.16 - feat:升级 EasyUI 至 1.7.6(20190415) - refactor:移除工作流 Flowable(20190415) - refactor:优化代码(20190309)(20190415) - v0.5.1 2019.03.09 - refactor:优化代码(20190309) - v0.5.0 2019.02.01 - feat:集成 Quartz 定时任务(201902114) - refactor:程序运行时自动载入之前等待发送的电子邮件到发送队列并发送(20190201) - refactor:不再兼容 IE8 浏览器(20190202) - v0.4.0 2019.01.25 - feat:新增工作台界面(20190125) - feat:集成工作流(Flowable)(20190121) - refactor:优化 URL(20190121) - refactor:优化登录界面(20190125) - v0.3.0 2019.01.11 - fix:修复 IE8 浏览器下登录页登录框变形的问题(20190104) - fix:修复帐号注销登录后还能访问系统的问题(20190105) - refactor:优化系统登录页布局和表单布局(20190109) - refactor:优化 Excel 导出/导入实体数据(20190110) - feat:升级 EasyUI 到 v1.7.1 版(20190110) - feat:新增 jar 打包支持,并设置为默认打包方式(20190108) - feat:新增一个帐号只允许同时在线一个 session 的功能(20190104) - docs:新增 MIT 开源协议(20190110) - v0.2.0 2018.12.21 - feat:整合 ActiveMQ(20181221) - feat:新增部门管理(20181221) - v0.1.0 2018.11.05 - feat:最新版发布(20181105) - v0.0.1 2018.02.22 - feat:第一版发布(20180222) ================================================ FILE: LICENSE ================================================ MIT License Copyright (c) 2019 Rakesh Zhang (godcheese@outlook.com) 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. ================================================ FILE: README.md ================================================

GitHub Last Commit GitHub release Build Status Quality Gate Status Codacy Badge license

## 简介 Introduction 作者QQ:1176394803(可有尝提供技术支持或改代码) > nimrod 英[ˈnimrɔd] 美[ˈnɪmˌrɑd] n. 好猎手,猎人; Nimrod - 基于 Spring Boot 构建 的 Java Web 平台企业级单体应用快速开发框架,适合中小型项目的应用和开发。所采用的技术栈包括 Spring Boot、Spring、Spring Web MVC、MyBatis、Thymeleaf 等,遵守[阿里巴巴 Java 开发规约](https://github.com/alibaba/p3c),帮助养成良好的编码习惯。整体采用 RBAC ( Role-Based Access Control ,基于角色的访问控制),具有严格的权限控制模块,支持系统与模块分离开发。最后希望这个项目能够对你有所帮助。 - Nimrod 开发交流群(微信群): - Nimrod 开发交流群(QQ 群):[547252502](https://jq.qq.com/?_wv=1027&k=5yxyg73) - [码云 Gitee](https://gitee.com/godcheese/nimrod) | 环境 | 版本 | | :--- | :--- | | [Java](https://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html) | 1.8 | | [MySQL](https://dev.mysql.com/downloads/mysql/5.7.html#downloads) | 5.7 | | [Maven](http://maven.apache.org/download.cgi) | 3.5 | | [Tomcat](https://tomcat.apache.org/download-90.cgi) | 9.0 | | 依赖 | 版本 | | :--- | :--- | | [Spring Boot](http://mvnrepository.com/artifact/org.springframework.boot/spring-boot) | 2.1.9.RELEASE | | [Spring Web MVC](http://mvnrepository.com/artifact/org.springframework/spring-webmvc) | 5.1.6.RELEASE | | [Spring Security Web](http://mvnrepository.com/artifact/org.springframework.security/spring-security-web) | 5.1.5.RELEASE | | [MyBatis](http://mvnrepository.com/artifact/org.mybatis/mybatis) | 3.5.1 | | [Thymeleaf](http://mvnrepository.com/artifact/org.thymeleaf/thymeleaf) | 3.0.11.RELEASE | | [Druid](http://mvnrepository.com/artifact/com.alibaba/druid-spring-boot-starter) | 1.1.16 | | 测试账号 | 测试账号 | | | :------ | :------ | :------ | | Username | Password | Role & Authority | | system_admin | 123456 | ROLE_USER,ROLE_ADMIN,ROLE_SYSTEM_ADMIN | | admin |123456 | ROLE_USER,ROLE_ADMIN,/API/SYSTEM/INDEX | | user |123456 | ROLE_USER | ## 特性 Features - 数据字典 ✓ - 角色管理 ✓ - 用户管理 ✓ - 在线用户 ✗ - 权限管理 ✓ - 视图菜单 ✓ - 视图页面 ✓ - 视图页面组件 ✓ - API ✓ - 消息中间件(ActiveMQ) ✓ - 电子邮件管理 ✓ - 操作日志 ✓ - 附件管理 ✓ - 定时任务 ✓ - 部门管理 ✓ - ~~工作流(Flowable)~~ ✓ ## 起步 Getting started ```bash # clone the project git clone https://github.com/godcheese/nimrod.git && cd nimrod # package mvn clean package # develop mvn spring-boot:run ``` ## [开发文档 Documentation](https://github.com/godcheese/nimrod/blob/master/docs/getting_started.md) ## [更新日志 Changelog](https://github.com/godcheese/nimrod/releases) > 参照 [Commit message 和 Change log 编写指南](http://www.ruanyifeng.com/blog/2016/01/commit_message_change_log.html) ## [在线演示 Online Demo](http://demo.godcheese.com:8083/nimrod) 登录用户名密码加QQ群547252502获取。 #### 截图 Screenshots ![1.png](https://github.com/godcheese/nimrod/blob/master/screenshots/1.png) ![2.png](https://github.com/godcheese/nimrod/blob/master/screenshots/2.png) ![3.png](https://github.com/godcheese/nimrod/blob/master/screenshots/3.png) ## 反馈 Feedback [Issues](https://github.com/godcheese/nimrod/issues) ## 捐赠 Donation 如果此项目对你有所帮助,不妨请我喝咖啡。 If you find Nimrod useful, you can buy us a cup of coffee. [Paypal Me](https://www.paypal.me/godcheese) ## 浏览器支持 Browsers support Modern browsers and Internet Explorer 9+. | [IE / Edge](http://godban.github.io/browsers-support-badges/)
IE / Edge | [Firefox](http://godban.github.io/browsers-support-badges/)
Firefox | [Chrome](http://godban.github.io/browsers-support-badges/)
Chrome | [Safari](http://godban.github.io/browsers-support-badges/)
Safari | | --------- | --------- | --------- | --------- | | IE9, IE10, IE11, Edge| last 15 versions| last 15 versions| last 10 versions ================================================ FILE: TODO.md ================================================ ## Todo list - (20191018)修复 IE 上传文件异常 ✗ - (20190920)验证码字体路径乱码 ✔ - (20190920)项目启动时 Quartz 任务重复运行多次 ✔ - (20190920)新的登录界面 ✔ ================================================ FILE: db/mysql/example/example.sql ================================================ -- example 表 CREATE TABLE `example` ( `id` bigint(20) UNSIGNED NOT NULL AUTO_INCREMENT, `name` varchar(255) DEFAULT '', `sort` bigint(20) DEFAULT 0, `remark` varchar(255) DEFAULT '', `gmt_modified` datetime DEFAULT NULL, `gmt_created` datetime DEFAULT NULL, PRIMARY KEY (`id`) USING BTREE ) ENGINE = INNODB DEFAULT CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci AUTO_INCREMENT = 1 ROW_FORMAT = DYNAMIC COMMENT = 'example 表'; ================================================ FILE: db/mysql/nimrod/nimrod.sql ================================================ /* Navicat Premium Data Transfer Source Server : localhost Source Server Type : MySQL Source Server Version : 50724 Source Host : localhost:3306 Source Schema : nimrod Target Server Type : MySQL Target Server Version : 50724 File Encoding : 65001 Date: 17/07/2020 12:37:59 */ SET NAMES utf8mb4; SET FOREIGN_KEY_CHECKS = 0; -- ---------------------------- -- Table structure for QRTZ_BLOB_TRIGGERS -- ---------------------------- DROP TABLE IF EXISTS `QRTZ_BLOB_TRIGGERS`; CREATE TABLE `QRTZ_BLOB_TRIGGERS` ( `SCHED_NAME` varchar(120) CHARACTER SET latin1 COLLATE latin1_swedish_ci NOT NULL, `TRIGGER_NAME` varchar(190) CHARACTER SET latin1 COLLATE latin1_swedish_ci NOT NULL, `TRIGGER_GROUP` varchar(190) CHARACTER SET latin1 COLLATE latin1_swedish_ci NOT NULL, `BLOB_DATA` blob NULL, PRIMARY KEY (`SCHED_NAME`, `TRIGGER_NAME`, `TRIGGER_GROUP`) USING BTREE, INDEX `SCHED_NAME`(`SCHED_NAME`, `TRIGGER_NAME`, `TRIGGER_GROUP`) USING BTREE ) ENGINE = InnoDB CHARACTER SET = latin1 COLLATE = latin1_swedish_ci ROW_FORMAT = Dynamic; -- ---------------------------- -- Table structure for QRTZ_CALENDARS -- ---------------------------- DROP TABLE IF EXISTS `QRTZ_CALENDARS`; CREATE TABLE `QRTZ_CALENDARS` ( `SCHED_NAME` varchar(120) CHARACTER SET latin1 COLLATE latin1_swedish_ci NOT NULL, `CALENDAR_NAME` varchar(190) CHARACTER SET latin1 COLLATE latin1_swedish_ci NOT NULL, `CALENDAR` blob NOT NULL, PRIMARY KEY (`SCHED_NAME`, `CALENDAR_NAME`) USING BTREE ) ENGINE = InnoDB CHARACTER SET = latin1 COLLATE = latin1_swedish_ci ROW_FORMAT = Dynamic; -- ---------------------------- -- Table structure for QRTZ_CRON_TRIGGERS -- ---------------------------- DROP TABLE IF EXISTS `QRTZ_CRON_TRIGGERS`; CREATE TABLE `QRTZ_CRON_TRIGGERS` ( `SCHED_NAME` varchar(120) CHARACTER SET latin1 COLLATE latin1_swedish_ci NOT NULL, `TRIGGER_NAME` varchar(190) CHARACTER SET latin1 COLLATE latin1_swedish_ci NOT NULL, `TRIGGER_GROUP` varchar(190) CHARACTER SET latin1 COLLATE latin1_swedish_ci NOT NULL, `CRON_EXPRESSION` varchar(120) CHARACTER SET latin1 COLLATE latin1_swedish_ci NOT NULL, `TIME_ZONE_ID` varchar(80) CHARACTER SET latin1 COLLATE latin1_swedish_ci NULL DEFAULT NULL, PRIMARY KEY (`SCHED_NAME`, `TRIGGER_NAME`, `TRIGGER_GROUP`) USING BTREE ) ENGINE = InnoDB CHARACTER SET = latin1 COLLATE = latin1_swedish_ci ROW_FORMAT = Dynamic; -- ---------------------------- -- Records of QRTZ_CRON_TRIGGERS -- ---------------------------- INSERT INTO `QRTZ_CRON_TRIGGERS` VALUES ('quartzScheduler', 'com.gioov.nimrod.quartz.job.SimpleJob', '1', '0/50 * * * * ? *', 'Asia/Shanghai'); -- ---------------------------- -- Table structure for QRTZ_FIRED_TRIGGERS -- ---------------------------- DROP TABLE IF EXISTS `QRTZ_FIRED_TRIGGERS`; CREATE TABLE `QRTZ_FIRED_TRIGGERS` ( `SCHED_NAME` varchar(120) CHARACTER SET latin1 COLLATE latin1_swedish_ci NOT NULL, `ENTRY_ID` varchar(95) CHARACTER SET latin1 COLLATE latin1_swedish_ci NOT NULL, `TRIGGER_NAME` varchar(190) CHARACTER SET latin1 COLLATE latin1_swedish_ci NOT NULL, `TRIGGER_GROUP` varchar(190) CHARACTER SET latin1 COLLATE latin1_swedish_ci NOT NULL, `INSTANCE_NAME` varchar(190) CHARACTER SET latin1 COLLATE latin1_swedish_ci NOT NULL, `FIRED_TIME` bigint(13) NOT NULL, `SCHED_TIME` bigint(13) NOT NULL, `PRIORITY` int(11) NOT NULL, `STATE` varchar(16) CHARACTER SET latin1 COLLATE latin1_swedish_ci NOT NULL, `JOB_NAME` varchar(190) CHARACTER SET latin1 COLLATE latin1_swedish_ci NULL DEFAULT NULL, `JOB_GROUP` varchar(190) CHARACTER SET latin1 COLLATE latin1_swedish_ci NULL DEFAULT NULL, `IS_NONCONCURRENT` varchar(1) CHARACTER SET latin1 COLLATE latin1_swedish_ci NULL DEFAULT NULL, `REQUESTS_RECOVERY` varchar(1) CHARACTER SET latin1 COLLATE latin1_swedish_ci NULL DEFAULT NULL, PRIMARY KEY (`SCHED_NAME`, `ENTRY_ID`) USING BTREE, INDEX `IDX_QRTZ_FT_TRIG_INST_NAME`(`SCHED_NAME`, `INSTANCE_NAME`) USING BTREE, INDEX `IDX_QRTZ_FT_INST_JOB_REQ_RCVRY`(`SCHED_NAME`, `INSTANCE_NAME`, `REQUESTS_RECOVERY`) USING BTREE, INDEX `IDX_QRTZ_FT_J_G`(`SCHED_NAME`, `JOB_NAME`, `JOB_GROUP`) USING BTREE, INDEX `IDX_QRTZ_FT_JG`(`SCHED_NAME`, `JOB_GROUP`) USING BTREE, INDEX `IDX_QRTZ_FT_T_G`(`SCHED_NAME`, `TRIGGER_NAME`, `TRIGGER_GROUP`) USING BTREE, INDEX `IDX_QRTZ_FT_TG`(`SCHED_NAME`, `TRIGGER_GROUP`) USING BTREE ) ENGINE = InnoDB CHARACTER SET = latin1 COLLATE = latin1_swedish_ci ROW_FORMAT = Dynamic; -- ---------------------------- -- Table structure for QRTZ_JOB_DETAILS -- ---------------------------- DROP TABLE IF EXISTS `QRTZ_JOB_DETAILS`; CREATE TABLE `QRTZ_JOB_DETAILS` ( `SCHED_NAME` varchar(120) CHARACTER SET latin1 COLLATE latin1_swedish_ci NOT NULL, `JOB_NAME` varchar(190) CHARACTER SET latin1 COLLATE latin1_swedish_ci NOT NULL, `JOB_GROUP` varchar(190) CHARACTER SET latin1 COLLATE latin1_swedish_ci NOT NULL, `DESCRIPTION` varchar(250) CHARACTER SET latin1 COLLATE latin1_swedish_ci NULL DEFAULT NULL, `JOB_CLASS_NAME` varchar(250) CHARACTER SET latin1 COLLATE latin1_swedish_ci NOT NULL, `IS_DURABLE` varchar(1) CHARACTER SET latin1 COLLATE latin1_swedish_ci NOT NULL, `IS_NONCONCURRENT` varchar(1) CHARACTER SET latin1 COLLATE latin1_swedish_ci NOT NULL, `IS_UPDATE_DATA` varchar(1) CHARACTER SET latin1 COLLATE latin1_swedish_ci NOT NULL, `REQUESTS_RECOVERY` varchar(1) CHARACTER SET latin1 COLLATE latin1_swedish_ci NOT NULL, `JOB_DATA` blob NULL, PRIMARY KEY (`SCHED_NAME`, `JOB_NAME`, `JOB_GROUP`) USING BTREE, INDEX `IDX_QRTZ_J_REQ_RECOVERY`(`SCHED_NAME`, `REQUESTS_RECOVERY`) USING BTREE, INDEX `IDX_QRTZ_J_GRP`(`SCHED_NAME`, `JOB_GROUP`) USING BTREE ) ENGINE = InnoDB CHARACTER SET = latin1 COLLATE = latin1_swedish_ci ROW_FORMAT = Dynamic; -- ---------------------------- -- Records of QRTZ_JOB_DETAILS -- ---------------------------- INSERT INTO `QRTZ_JOB_DETAILS` VALUES ('quartzScheduler', 'com.gioov.nimrod.quartz.job.SimpleJob', '1', '', 'com.gioov.nimrod.quartz.job.SimpleJob', '0', '1', '1', '0', 0xACED0005737200156F72672E71756172747A2E4A6F62446174614D61709FB083E8BFA9B0CB020000787200266F72672E71756172747A2E7574696C732E537472696E674B65794469727479466C61674D61708208E8C3FBC55D280200015A0013616C6C6F77735472616E7369656E74446174617872001D6F72672E71756172747A2E7574696C732E4469727479466C61674D617013E62EAD28760ACE0200025A000564697274794C00036D617074000F4C6A6176612F7574696C2F4D61703B787000737200116A6176612E7574696C2E486173684D61700507DAC1C31660D103000246000A6C6F6164466163746F724900097468726573686F6C6478703F40000000000010770800000010000000007800); -- ---------------------------- -- Table structure for QRTZ_LOCKS -- ---------------------------- DROP TABLE IF EXISTS `QRTZ_LOCKS`; CREATE TABLE `QRTZ_LOCKS` ( `SCHED_NAME` varchar(120) CHARACTER SET latin1 COLLATE latin1_swedish_ci NOT NULL, `LOCK_NAME` varchar(40) CHARACTER SET latin1 COLLATE latin1_swedish_ci NOT NULL, PRIMARY KEY (`SCHED_NAME`, `LOCK_NAME`) USING BTREE ) ENGINE = InnoDB CHARACTER SET = latin1 COLLATE = latin1_swedish_ci ROW_FORMAT = Dynamic; -- ---------------------------- -- 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) CHARACTER SET latin1 COLLATE latin1_swedish_ci NOT NULL, `TRIGGER_GROUP` varchar(190) CHARACTER SET latin1 COLLATE latin1_swedish_ci NOT NULL, PRIMARY KEY (`SCHED_NAME`, `TRIGGER_GROUP`) USING BTREE ) ENGINE = InnoDB CHARACTER SET = latin1 COLLATE = latin1_swedish_ci ROW_FORMAT = Dynamic; -- ---------------------------- -- Table structure for QRTZ_SCHEDULER_STATE -- ---------------------------- DROP TABLE IF EXISTS `QRTZ_SCHEDULER_STATE`; CREATE TABLE `QRTZ_SCHEDULER_STATE` ( `SCHED_NAME` varchar(120) CHARACTER SET latin1 COLLATE latin1_swedish_ci NOT NULL, `INSTANCE_NAME` varchar(190) CHARACTER SET latin1 COLLATE latin1_swedish_ci NOT NULL, `LAST_CHECKIN_TIME` bigint(13) NOT NULL, `CHECKIN_INTERVAL` bigint(13) NOT NULL, PRIMARY KEY (`SCHED_NAME`, `INSTANCE_NAME`) USING BTREE ) ENGINE = InnoDB CHARACTER SET = latin1 COLLATE = latin1_swedish_ci ROW_FORMAT = Dynamic; -- ---------------------------- -- Table structure for QRTZ_SIMPLE_TRIGGERS -- ---------------------------- DROP TABLE IF EXISTS `QRTZ_SIMPLE_TRIGGERS`; CREATE TABLE `QRTZ_SIMPLE_TRIGGERS` ( `SCHED_NAME` varchar(120) CHARACTER SET latin1 COLLATE latin1_swedish_ci NOT NULL, `TRIGGER_NAME` varchar(190) CHARACTER SET latin1 COLLATE latin1_swedish_ci NOT NULL, `TRIGGER_GROUP` varchar(190) CHARACTER SET latin1 COLLATE latin1_swedish_ci 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`) USING BTREE ) ENGINE = InnoDB CHARACTER SET = latin1 COLLATE = latin1_swedish_ci ROW_FORMAT = Dynamic; -- ---------------------------- -- Table structure for QRTZ_SIMPROP_TRIGGERS -- ---------------------------- DROP TABLE IF EXISTS `QRTZ_SIMPROP_TRIGGERS`; CREATE TABLE `QRTZ_SIMPROP_TRIGGERS` ( `SCHED_NAME` varchar(120) CHARACTER SET latin1 COLLATE latin1_swedish_ci NOT NULL, `TRIGGER_NAME` varchar(190) CHARACTER SET latin1 COLLATE latin1_swedish_ci NOT NULL, `TRIGGER_GROUP` varchar(190) CHARACTER SET latin1 COLLATE latin1_swedish_ci NOT NULL, `STR_PROP_1` varchar(512) CHARACTER SET latin1 COLLATE latin1_swedish_ci NULL DEFAULT NULL, `STR_PROP_2` varchar(512) CHARACTER SET latin1 COLLATE latin1_swedish_ci NULL DEFAULT NULL, `STR_PROP_3` varchar(512) CHARACTER SET latin1 COLLATE latin1_swedish_ci NULL DEFAULT NULL, `INT_PROP_1` int(11) NULL DEFAULT NULL, `INT_PROP_2` int(11) NULL DEFAULT NULL, `LONG_PROP_1` bigint(20) NULL DEFAULT NULL, `LONG_PROP_2` bigint(20) NULL DEFAULT NULL, `DEC_PROP_1` decimal(13, 4) NULL DEFAULT NULL, `DEC_PROP_2` decimal(13, 4) NULL DEFAULT NULL, `BOOL_PROP_1` varchar(1) CHARACTER SET latin1 COLLATE latin1_swedish_ci NULL DEFAULT NULL, `BOOL_PROP_2` varchar(1) CHARACTER SET latin1 COLLATE latin1_swedish_ci NULL DEFAULT NULL, PRIMARY KEY (`SCHED_NAME`, `TRIGGER_NAME`, `TRIGGER_GROUP`) USING BTREE ) ENGINE = InnoDB CHARACTER SET = latin1 COLLATE = latin1_swedish_ci ROW_FORMAT = Dynamic; -- ---------------------------- -- Table structure for QRTZ_TRIGGERS -- ---------------------------- DROP TABLE IF EXISTS `QRTZ_TRIGGERS`; CREATE TABLE `QRTZ_TRIGGERS` ( `SCHED_NAME` varchar(120) CHARACTER SET latin1 COLLATE latin1_swedish_ci NOT NULL, `TRIGGER_NAME` varchar(190) CHARACTER SET latin1 COLLATE latin1_swedish_ci NOT NULL, `TRIGGER_GROUP` varchar(190) CHARACTER SET latin1 COLLATE latin1_swedish_ci NOT NULL, `JOB_NAME` varchar(190) CHARACTER SET latin1 COLLATE latin1_swedish_ci NOT NULL, `JOB_GROUP` varchar(190) CHARACTER SET latin1 COLLATE latin1_swedish_ci NOT NULL, `DESCRIPTION` varchar(250) CHARACTER SET latin1 COLLATE latin1_swedish_ci NULL DEFAULT NULL, `NEXT_FIRE_TIME` bigint(13) NULL DEFAULT NULL, `PREV_FIRE_TIME` bigint(13) NULL DEFAULT NULL, `PRIORITY` int(11) NULL DEFAULT NULL, `TRIGGER_STATE` varchar(16) CHARACTER SET latin1 COLLATE latin1_swedish_ci NOT NULL, `TRIGGER_TYPE` varchar(8) CHARACTER SET latin1 COLLATE latin1_swedish_ci NOT NULL, `START_TIME` bigint(13) NOT NULL, `END_TIME` bigint(13) NULL DEFAULT NULL, `CALENDAR_NAME` varchar(190) CHARACTER SET latin1 COLLATE latin1_swedish_ci NULL DEFAULT NULL, `MISFIRE_INSTR` smallint(2) NULL DEFAULT NULL, `JOB_DATA` blob NULL, PRIMARY KEY (`SCHED_NAME`, `TRIGGER_NAME`, `TRIGGER_GROUP`) USING BTREE, INDEX `IDX_QRTZ_T_J`(`SCHED_NAME`, `JOB_NAME`, `JOB_GROUP`) USING BTREE, INDEX `IDX_QRTZ_T_JG`(`SCHED_NAME`, `JOB_GROUP`) USING BTREE, INDEX `IDX_QRTZ_T_C`(`SCHED_NAME`, `CALENDAR_NAME`) USING BTREE, INDEX `IDX_QRTZ_T_G`(`SCHED_NAME`, `TRIGGER_GROUP`) USING BTREE, INDEX `IDX_QRTZ_T_STATE`(`SCHED_NAME`, `TRIGGER_STATE`) USING BTREE, INDEX `IDX_QRTZ_T_N_STATE`(`SCHED_NAME`, `TRIGGER_NAME`, `TRIGGER_GROUP`, `TRIGGER_STATE`) USING BTREE, INDEX `IDX_QRTZ_T_N_G_STATE`(`SCHED_NAME`, `TRIGGER_GROUP`, `TRIGGER_STATE`) USING BTREE, INDEX `IDX_QRTZ_T_NEXT_FIRE_TIME`(`SCHED_NAME`, `NEXT_FIRE_TIME`) USING BTREE, INDEX `IDX_QRTZ_T_NFT_ST`(`SCHED_NAME`, `TRIGGER_STATE`, `NEXT_FIRE_TIME`) USING BTREE, INDEX `IDX_QRTZ_T_NFT_MISFIRE`(`SCHED_NAME`, `MISFIRE_INSTR`, `NEXT_FIRE_TIME`) USING BTREE, INDEX `IDX_QRTZ_T_NFT_ST_MISFIRE`(`SCHED_NAME`, `MISFIRE_INSTR`, `NEXT_FIRE_TIME`, `TRIGGER_STATE`) USING BTREE, INDEX `IDX_QRTZ_T_NFT_ST_MISFIRE_GRP`(`SCHED_NAME`, `MISFIRE_INSTR`, `NEXT_FIRE_TIME`, `TRIGGER_GROUP`, `TRIGGER_STATE`) USING BTREE ) ENGINE = InnoDB CHARACTER SET = latin1 COLLATE = latin1_swedish_ci ROW_FORMAT = Dynamic; -- ---------------------------- -- Records of QRTZ_TRIGGERS -- ---------------------------- INSERT INTO `QRTZ_TRIGGERS` VALUES ('quartzScheduler', 'com.gioov.nimrod.quartz.job.SimpleJob', '1', 'com.gioov.nimrod.quartz.job.SimpleJob', '1', '', 1568951270000, 1568951220000, 5, 'PAUSED', 'CRON', 1568728277000, 0, NULL, 2, ''); -- ---------------------------- -- Table structure for api -- ---------------------------- DROP TABLE IF EXISTS `api`; CREATE TABLE `api` ( `id` bigint(20) UNSIGNED NOT NULL AUTO_INCREMENT COMMENT 'id', `name` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT 'API 名称', `url` text CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL COMMENT '请求地址(url)', `authority` varchar(191) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '权限(authority)', `api_category_id` bigint(20) UNSIGNED NOT NULL COMMENT 'API 分类 id', `sort` bigint(20) UNSIGNED NULL DEFAULT 0 COMMENT '排序', `remark` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '' COMMENT '备注', `gmt_modified` datetime(0) NULL DEFAULT NULL COMMENT '更新时间', `gmt_created` datetime(0) NULL DEFAULT NULL COMMENT '创建时间', PRIMARY KEY (`id`) USING BTREE, UNIQUE INDEX `uk_authority`(`authority`) USING BTREE ) ENGINE = InnoDB AUTO_INCREMENT = 143 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = 'API 表' ROW_FORMAT = Dynamic; -- ---------------------------- -- Records of api -- ---------------------------- INSERT INTO `api` VALUES (1, '分页获取所有电子邮件队列', '/api/mail/page_all', '/API/MAIL/PAGE_ALL', 21, 0, '', NULL, NULL); INSERT INTO `api` VALUES (2, '新增电子邮件', '/api/mail/add_one', '/API/MAIL/ADD_ONE', 21, 0, '', NULL, NULL); INSERT INTO `api` VALUES (3, '指定电子邮件 id,获取电子邮件', '/api/mail/one', '/API/MAIL/ONE', 21, 0, '', NULL, NULL); INSERT INTO `api` VALUES (4, '指定队列电子邮件 id,批量删除队列电子邮件', '/api/mail/delete_all', '/API/MAIL/DELETE_ALL', 21, 0, '', NULL, NULL); INSERT INTO `api` VALUES (5, '新增任务', '/api/quartz/job/add_one', '/API/QUARTZ/JOB/ADD_ONE', 24, 0, '', NULL, NULL); INSERT INTO `api` VALUES (6, '指定 JobClassName、JobGroup,获取任务', '/api/quartz/job/one', '/API/QUARTZ/JOB/ONE', 24, 0, '', NULL, NULL); INSERT INTO `api` VALUES (7, '分页获取所有任务', '/api/quartz/job/page_all', '/API/QUARTZ/JOB/PAGE_ALL', 24, 0, '', NULL, NULL); INSERT INTO `api` VALUES (8, '指定 JobClassName list、JobGroup list,暂停所有任务', '/api/quartz/job/pause_all', '/API/QUARTZ/JOB/PAUSE_ALL', 24, 0, '', NULL, NULL); INSERT INTO `api` VALUES (9, '指定 JobClassName list、JobGroup list,恢复所有任务', '/api/quartz/job/resume_all', '/API/QUARTZ/JOB/RESUME_ALL', 24, 0, '', NULL, NULL); INSERT INTO `api` VALUES (10, '指定 JobClassName list、JobGroup list,删除所有任务', '/api/quartz/job/delete_all', '/API/QUARTZ/JOB/DELETE_ALL', 24, 0, '', NULL, NULL); INSERT INTO `api` VALUES (11, '保存任务', '/api/quartz/job/save_one', '/API/QUARTZ/JOB/SAVE_ONE', 24, 0, '', NULL, NULL); INSERT INTO `api` VALUES (12, '指定任务运行日志 id,获取任务运行日志', '/api/quartz/job_runtime_log/one', '/API/QUARTZ/JOB_RUNTIME_LOG/ONE', 25, 0, '', NULL, NULL); INSERT INTO `api` VALUES (13, '分页获取所有任务运行日志', '/api/quartz/job_runtime_log/page_all', '/API/QUARTZ/JOB_RUNTIME_LOG/PAGE_ALL', 25, 0, '', NULL, NULL); INSERT INTO `api` VALUES (14, '清空所有任务运行日志', '/api/quartz/job_runtime_log/clear_all', '/API/QUARTZ/JOB_RUNTIME_LOG/CLEAR_ALL', 25, 0, '', NULL, NULL); INSERT INTO `api` VALUES (15, '新增数据字典分类', '/api/system/dictionary_category/add_one', '/API/SYSTEM/DICTIONARY_CATEGORY/ADD_ONE', 6, 0, '', '2019-09-27 01:02:29', NULL); INSERT INTO `api` VALUES (16, '保存数据字典分类', '/api/system/dictionary_category/save_one', '/API/SYSTEM/DICTIONARY_CATEGORY/SAVE_ONE', 6, 0, '', NULL, NULL); INSERT INTO `api` VALUES (17, '指定数据字典分类 id list,批量删除数据字典分类', '/api/system/dictionary_category/delete_all', '/API/SYSTEM/DICTIONARY_CATEGORY/DELETE_ALL', 6, 0, '', NULL, NULL); INSERT INTO `api` VALUES (18, '指定数据字典分类 id,获取数据字典分类', '/api/system/dictionary_category/one', '/API/SYSTEM/DICTIONARY_CATEGORY/ONE', 6, 0, '', NULL, NULL); INSERT INTO `api` VALUES (19, '获取所有数据字典分类,以 Antd Table 形式展示', '/api/system/dictionary_category/list_all_as_antd_table', '/API/SYSTEM/DICTIONARY_CATEGORY/LIST_ALL_AS_ANTD_TABLE', 6, 0, '', NULL, NULL); INSERT INTO `api` VALUES (20, '获取所有数据字典分类,以 Antd TreeNode 形式展示', '/api/system/dictionary_category/list_all_as_antd_tree_node', '/API/SYSTEM/DICTIONARY_CATEGORY/LIST_ALL_AS_ANTD_TREE_NODE', 6, 0, '', NULL, NULL); INSERT INTO `api` VALUES (21, '新增数据字典', '/api/system/dictionary/add_one', '/API/SYSTEM/DICTIONARY/ADD_ONE', 7, 0, '', NULL, NULL); INSERT INTO `api` VALUES (22, '保存数据字典', '/api/system/dictionary/save_one', '/API/SYSTEM/DICTIONARY/SAVE_ONE', 7, 0, '', NULL, NULL); INSERT INTO `api` VALUES (23, '指定数据字典 id,批量删除数据字典', '/api/system/dictionary/delete_all', '/API/SYSTEM/DICTIONARY/DELETE_ALL', 7, 0, '', NULL, NULL); INSERT INTO `api` VALUES (24, '指定数据字典 id,获取数据字典', '/api/system/dictionary/one', '/API/SYSTEM/DICTIONARY/ONE', 7, 0, '', NULL, NULL); INSERT INTO `api` VALUES (25, '指定数据字典键,从内存中获取所有数据字典', '/api/system/dictionary/list_all_by_key', '/API/SYSTEM/DICTIONARY/LIST_ALL_BY_KEY', 7, 0, '', NULL, NULL); INSERT INTO `api` VALUES (26, '同步数据字典到内存', '/api/system/dictionary/sync_to_memory', '/API/SYSTEM/DICTIONARY/SYNC_TO_MEMORY', 7, 0, '', NULL, NULL); INSERT INTO `api` VALUES (27, '指定数据字典分类 id list,导出数据字典', '/api/system/dictionary/export_all_by_dictionary_category_id_list', '/API/SYSTEM/DICTIONARY/EXPORT_ALL_BY_DICTIONARY_CATEGORY_ID_LIST', 7, 0, '', NULL, NULL); INSERT INTO `api` VALUES (28, '指定数据字典分类 id,导入数据字典', '/api/system/dictionary/import_all_by_dictionary_category_id', '/API/SYSTEM/DICTIONARY/IMPORT_ALL_BY_DICTIONARY_CATEGORY_ID', 7, 0, '', NULL, NULL); INSERT INTO `api` VALUES (29, '指定数据字典分类 id,分页获取数据字典', '/api/system/dictionary/page_all_by_dictionary_category_id_list', '/API/SYSTEM/DICTIONARY/PAGE_ALL_BY_DICTIONARY_CATEGORY_ID_LIST', 7, 0, '', NULL, NULL); INSERT INTO `api` VALUES (30, '分页获取所有文件', '/api/system/file/page_all', '/API/SYSTEM/FILE/PAGE_ALL', 19, 0, '', NULL, NULL); INSERT INTO `api` VALUES (31, '单个文件上传', '/api/system/file/upload_one', '/API/SYSTEM/FILE/UPLOAD_ONE', 19, 0, '', NULL, NULL); INSERT INTO `api` VALUES (32, '保存文件', '/api/system/file/save_one', '/API/SYSTEM/FILE/SAVE_ONE', 19, 0, '', NULL, NULL); INSERT INTO `api` VALUES (33, '指定文件 id list,批量删除文件', '/api/system/file/delete_all', '/API/SYSTEM/FILE/DELETE_ALL', 19, 0, '', NULL, NULL); INSERT INTO `api` VALUES (34, '指定文件 id,获取文件', '/api/system/file/one', '/API/SYSTEM/FILE/ONE', 19, 0, '', NULL, NULL); INSERT INTO `api` VALUES (35, '指定文件 guid,下载文件', '/api/system/file/download', '/API/SYSTEM/FILE/DOWNLOAD', 19, 0, '', NULL, NULL); INSERT INTO `api` VALUES (36, '分页获取所有图片文件', '/api/system/file/page_all_image', '/API/SYSTEM/FILE/PAGE_ALL_IMAGE', 19, 0, '', NULL, NULL); INSERT INTO `api` VALUES (37, '分页获取所有操作日志', '/api/system/operation_log/page_all', '/API/SYSTEM/OPERATION_LOG/PAGE_ALL', 22, 0, '', NULL, NULL); INSERT INTO `api` VALUES (38, '指定操作日志 id,获取操作日志', '/api/system/operation_log/one', '/API/SYSTEM/OPERATION_LOG/ONE', 22, 0, '', NULL, NULL); INSERT INTO `api` VALUES (39, '清空所有操作日志', '/api/system/operation_log/clear_all', '/API/SYSTEM/OPERATION_LOG/CLEAR_ALL', 22, 0, '', NULL, NULL); INSERT INTO `api` VALUES (40, '获取验证码', '/api/system/verify_code', '/API/SYSTEM/VERIFY_CODE', 2, 0, '', '2019-10-24 13:50:31', NULL); INSERT INTO `api` VALUES (41, '获取系统信息', '/api/system/system_info', '/API/SYSTEM/SYSTEM_INFO', 2, 0, '', NULL, NULL); INSERT INTO `api` VALUES (42, '新增 API 分类', '/api/user/api_category/add_one', '/API/USER/API_CATEGORY/ADD_ONE', 4, 0, '', NULL, NULL); INSERT INTO `api` VALUES (43, '保存 API 分类', '/api/user/api_category/save_one', '/API/USER/API_CATEGORY/SAVE_ONE', 4, 0, '', NULL, NULL); INSERT INTO `api` VALUES (44, '指定 API 分类 id list,批量删除 API 分类', '/api/user/api_category/delete_all', '/API/USER/API_CATEGORY/DELETE_ALL', 4, 0, '', NULL, NULL); INSERT INTO `api` VALUES (45, '指定 API 分类 id,获取所有 API 分类', '/api/user/api_category/one', '/API/USER/API_CATEGORY/ONE', 4, 0, '', NULL, NULL); INSERT INTO `api` VALUES (46, '获取所有 API 分类,以 Antd Table 形式展示', '/api/user/api_category/list_all_as_antd_table', '/API/USER/API_CATEGORY/LIST_ALL_AS_ANTD_TABLE', 4, 0, '', NULL, NULL); INSERT INTO `api` VALUES (47, '指定 API 分类 id,分页获取所有 API', '/api/user/api/page_all_by_api_category_id', '/API/USER/API/PAGE_ALL_BY_API_CATEGORY_ID', 5, 0, '', NULL, NULL); INSERT INTO `api` VALUES (48, '新增 API', '/api/user/api/add_one', '/API/USER/API/ADD_ONE', 5, 0, '', NULL, NULL); INSERT INTO `api` VALUES (49, '指定 API id list,批量删除 API', '/api/user/api/delete_all', '/API/USER/API/DELETE_ALL', 5, 0, '', NULL, NULL); INSERT INTO `api` VALUES (50, '指定 API id,获取所有 API', '/api/user/api/one', '/API/USER/API/ONE', 5, 0, '', NULL, NULL); INSERT INTO `api` VALUES (51, '指定角色 id、API 分类 id list,分页获取所有 API,以 Antd Table 形式展示', '/api/user/api/page_all_as_antd_table_by_role_id_and_api_category_id_list', '/API/USER/API/PAGE_ALL_AS_ANTD_TABLE_BY_ROLE_ID_AND_API_CATEGORY_ID_LIST', 5, 0, '', NULL, NULL); INSERT INTO `api` VALUES (52, '指定 API 分类 id list,分页获取所有 API,以 Antd Table 形式展示', '/api/user/api/page_all_as_antd_table_by_api_category_id_list', '/API/USER/API/PAGE_ALL_AS_ANTD_TABLE_BY_API_CATEGORY_ID_LIST', 5, 0, '', NULL, NULL); INSERT INTO `api` VALUES (53, '指定角色 id、API id list,批量授权', '/api/user/api/grant_all_by_role_id_and_api_id_list', '/API/USER/API/GRANT_ALL_BY_ROLE_ID_AND_API_ID_LIST', 5, 0, '', NULL, NULL); INSERT INTO `api` VALUES (54, '指定角色 id、API id list,批量撤销授权', '/api/user/api/revoke_all_by_role_id_and_api_id_list', '/API/USER/API/REVOKE_ALL_BY_ROLE_ID_AND_API_ID_LIST', 5, 0, '', NULL, NULL); INSERT INTO `api` VALUES (55, '指定视图页面 id、API 分类 id list,分页获取所有 API,以 Antd Table 形式展示', '/api/user/api/page_all_as_antd_table_by_view_page_id_and_api_category_id_list', '/API/USER/API/PAGE_ALL_AS_ANTD_TABLE_BY_VIEW_PAGE_ID_AND_API_CATEGORY_ID_LIST', 5, 0, '', NULL, NULL); INSERT INTO `api` VALUES (56, '指定视图页面组件 id、API 分类 id list,分页获取 API,以 Antd Table 形式展示', '/api/user/api/page_all_as_antd_table_by_view_page_component_id_and_api_category_id_list', '/API/USER/API/PAGE_ALL_AS_ANTD_TABLE_BY_VIEW_PAGE_COMPONENT_ID_AND_API_CATEGORY_ID_LIST', 5, 0, '', NULL, NULL); INSERT INTO `api` VALUES (57, '新增部门', '/api/user/department/add_one', '/API/USER/DEPARTMENT/ADD_ONE', 20, 0, '', NULL, NULL); INSERT INTO `api` VALUES (58, '保存部门', '/api/user/department/save_one', '/API/USER/DEPARTMENT/SAVE_ONE', 20, 0, '', NULL, NULL); INSERT INTO `api` VALUES (59, '指定部门 id list,批量删除部门', '/api/user/department/delete_all', '/API/USER/DEPARTMENT/DELETE_ALL', 20, 0, '', NULL, NULL); INSERT INTO `api` VALUES (60, '指定部门 id,获取部门', '/api/user/department/one', '/API/USER/DEPARTMENT/ONE', 20, 0, '', NULL, NULL); INSERT INTO `api` VALUES (61, '获取所有部门,以 Antd TreeNode 形式展示', '/api/user/department/list_all_as_antd_tree_node', '/API/USER/DEPARTMENT/LIST_ALL_AS_ANTD_TREE_NODE', 20, 0, '', NULL, NULL); INSERT INTO `api` VALUES (62, '获取所有部门,以 Antd Tree 形式展示', '/api/user/department/list_all_as_antd_tree', '/API/USER/DEPARTMENT/LIST_ALL_AS_ANTD_TREE', 20, 0, '', NULL, NULL); INSERT INTO `api` VALUES (63, '获取所有部门,以 Antd Table 形式展示', '/api/user/department/list_all_as_antd_table', '/API/USER/DEPARTMENT/LIST_ALL_AS_ANTD_TABLE', 20, 0, '', NULL, NULL); INSERT INTO `api` VALUES (64, '分页获取所有角色', '/api/user/role/page_all', '/API/USER/ROLE/PAGE_ALL', 14, 0, '', NULL, NULL); INSERT INTO `api` VALUES (65, '新增角色', '/api/user/role/add_one', '/API/USER/ROLE/ADD_ONE', 14, 0, '', NULL, NULL); INSERT INTO `api` VALUES (66, '指定角色 id list,批量删除角色', '/api/user/role/delete_all', '/API/USER/ROLE/DELETE_ALL', 14, 0, '', NULL, NULL); INSERT INTO `api` VALUES (67, '指定角色 id,获取角色', '/api/user/role/one', '/API/USER/ROLE/ONE', 14, 0, '', NULL, NULL); INSERT INTO `api` VALUES (68, '指定用户 id,分页获取所有角色,以 Antd Table 形式展示', '/api/user/role/page_all_as_antd_table_by_user_id', '/API/USER/ROLE/PAGE_ALL_AS_ANTD_TABLE_BY_USER_ID', 14, 0, '', NULL, NULL); INSERT INTO `api` VALUES (69, '指定用户 id、角色 id list,批量授权', '/api/user/role/grant_all_by_user_id_and_role_id_list', '/API/USER/ROLE/GRANT_ALL_BY_USER_ID_AND_ROLE_ID_LIST', 14, 0, '', NULL, NULL); INSERT INTO `api` VALUES (70, '指定用户 id、角色 id list,批量撤销授权', '/api/user/role/revoke_all_by_user_id_and_role_id_list', '/API/USER/ROLE/REVOKE_ALL_BY_USER_ID_AND_ROLE_ID_LIST', 14, 0, '', NULL, NULL); INSERT INTO `api` VALUES (71, '分页获取所有用户', '/api/user/page_all', '/API/USER/PAGE_ALL', 15, 0, '', NULL, NULL); INSERT INTO `api` VALUES (72, '指定部门 id,分页获取所有用户', '/api/user/page_all_by_department_id', '/API/USER/PAGE_ALL_BY_DEPARTMENT_ID', 15, 0, '', NULL, NULL); INSERT INTO `api` VALUES (73, '新增用户', '/api/user/add_one', '/API/USER/ADD_ONE', 15, 0, '', NULL, NULL); INSERT INTO `api` VALUES (74, '保存用户', '/api/user/save_one', '/API/USER/SAVE_ONE', 15, 0, '', NULL, NULL); INSERT INTO `api` VALUES (75, '指定用户 id list,删除用户', '/api/user/fake_delete_all', '/API/USER/FAKE_DELETE_ALL', 15, 0, '', NULL, NULL); INSERT INTO `api` VALUES (76, '指定用户 id list,撤销删除用户', '/api/user/revoke_fake_delete_all', '/API/USER/REVOKE_FAKE_DELETE_ALL', 15, 0, '', NULL, NULL); INSERT INTO `api` VALUES (77, '指定用户 id list,批量永久删除用户', '/api/user/delete_all', '/API/USER/DELETE_ALL', 15, 0, '', NULL, NULL); INSERT INTO `api` VALUES (78, '指定用户 id,获取用户(除密码和角色)', '/api/user/one', '/API/USER/ONE', 15, 0, '', NULL, NULL); INSERT INTO `api` VALUES (79, '获取当前用户(用户 id、用户名、头像、电子邮箱、权限、部门)', '/api/user/get_current_user', '/API/USER/GET_CURRENT_USER', 15, 0, '', NULL, NULL); INSERT INTO `api` VALUES (80, '分页获取所有用户角色', '/api/user/user_role/page_all', '/API/USER/USER_ROLE/PAGE_ALL', 16, 0, '', NULL, NULL); INSERT INTO `api` VALUES (81, '新增用户角色', '/api/user/user_role/add_one', '/API/USER/USER_ROLE/ADD_ONE', 16, 0, '', NULL, NULL); INSERT INTO `api` VALUES (82, '指定用户 id、角色 id list,批量删除用户角色', '/api/user/user_role/delete_all_by_user_id_and_role_id_list', '/API/USER/USER_ROLE/DELETE_ALL_BY_USER_ID_AND_ROLE_ID_LIST', 16, 0, '', NULL, NULL); INSERT INTO `api` VALUES (83, '指定角色 id,分页获取所有父级视图菜单分类', '/api/user/view_menu_category/page_all_parent_by_role_id', '/API/USER/VIEW_MENU_CATEGORY/PAGE_ALL_PARENT_BY_ROLE_ID', 17, 0, '', NULL, NULL); INSERT INTO `api` VALUES (84, '指定父级视图菜单分类 id、角色 id,获取所有视图菜单分类', '/api/user/view_menu_category/list_all_by_parent_id_and_role_id', '/API/USER/VIEW_MENU_CATEGORY/LIST_ALL_BY_PARENT_ID_AND_ROLE_ID', 17, 0, '', NULL, NULL); INSERT INTO `api` VALUES (85, '新增视图菜单分类', '/api/user/view_menu_category/add_one', '/API/USER/VIEW_MENU_CATEGORY/ADD_ONE', 17, 0, '', NULL, NULL); INSERT INTO `api` VALUES (86, '保存视图菜单分类', '/api/user/view_menu_category/save_one', '/API/USER/VIEW_MENU_CATEGORY/SAVE_ONE', 17, 0, '', NULL, NULL); INSERT INTO `api` VALUES (87, '指定视图菜单分类 id,批量删除视图菜单分类', '/api/user/view_menu_category/delete_all', '/API/USER/VIEW_MENU_CATEGORY/DELETE_ALL', 17, 0, '', NULL, NULL); INSERT INTO `api` VALUES (88, '指定视图菜单分类 id,获取视图菜单分类', '/api/user/view_menu_category/one', '/API/USER/VIEW_MENU_CATEGORY/ONE', 17, 0, '', NULL, NULL); INSERT INTO `api` VALUES (89, '指定角色 id,获取所有父级视图菜单分类', '/api/user/view_menu_category/list_all_parent_by_role_id', '/API/USER/VIEW_MENU_CATEGORY/LIST_ALL_PARENT_BY_ROLE_ID', 17, 0, '', NULL, NULL); INSERT INTO `api` VALUES (90, '指定用户 id,获取所有父级视图菜单分类', '/api/user/view_menu_category/list_all_parent_by_user_id', '/API/USER/VIEW_MENU_CATEGORY/LIST_ALL_PARENT_BY_USER_ID', 17, 0, '', NULL, NULL); INSERT INTO `api` VALUES (91, '指定用户 id、父级视图菜单分类 id,获取所有子级视图菜单分类', '/api/user/view_menu_category/list_all_child_by_parent_id_and_user_id', '/API/USER/VIEW_MENU_CATEGORY/LIST_ALL_CHILD_BY_PARENT_ID_AND_USER_ID', 17, 0, '', NULL, NULL); INSERT INTO `api` VALUES (92, '获取所有视图菜单分类', '/api/user/view_menu_category/list_all', '/API/USER/VIEW_MENU_CATEGORY/LIST_ALL', 17, 0, '', NULL, NULL); INSERT INTO `api` VALUES (93, '指定视图菜单分类名称,模糊搜索获取所有视图菜单分类', '/api/user/view_menu_category/search_all_by_name', '/API/USER/VIEW_MENU_CATEGORY/SEARCH_ALL_BY_NAME', 17, 0, '', NULL, NULL); INSERT INTO `api` VALUES (94, '指定角色 id,获取视图菜单分类,以 Antd Table 形式展示', '/api/user/view_menu_category/list_all_as_antd_table_by_role_id', '/API/USER/VIEW_MENU_CATEGORY/LIST_ALL_AS_ANTD_TABLE_BY_ROLE_ID', 17, 0, '', NULL, NULL); INSERT INTO `api` VALUES (95, '获取视图菜单分类,以 Antd Table 形式展示', '/api/user/view_menu_category/list_all_as_antd_table', '/API/USER/VIEW_MENU_CATEGORY/LIST_ALL_AS_ANTD_TABLE', 17, 0, '', NULL, NULL); INSERT INTO `api` VALUES (96, '获取所有视图菜单分类,以 Antd TreeNode 形式展示', '/api/user/view_menu_category/list_all_as_antd_tree_node', '/API/USER/VIEW_MENU_CATEGORY/LIST_ALL_AS_ANTD_TREE_NODE', 17, 0, '', NULL, NULL); INSERT INTO `api` VALUES (97, '指定角色 id、视图菜单分类 id list,批量授权', '/api/user/view_menu_category/grant_all_by_role_id_and_view_menu_category_id_list', '/API/USER/VIEW_MENU_CATEGORY/GRANT_ALL_BY_ROLE_ID_AND_VIEW_MENU_CATEGORY_ID_LIST', 17, 0, '', NULL, NULL); INSERT INTO `api` VALUES (98, '指定角色 id、视图菜单分类 id list,批量撤销授权', '/api/user/view_menu_category/revoke_all_by_role_id_and_view_menu_category_id_list', '/API/USER/VIEW_MENU_CATEGORY/REVOKE_ALL_BY_ROLE_ID_AND_VIEW_MENU_CATEGORY_ID_LIST', 17, 0, '', NULL, NULL); INSERT INTO `api` VALUES (99, '指定视图菜单分类 id、角色 id,分页获取所有视图菜单', '/api/user/view_menu/page_all_by_view_menu_category_id_and_role_id', '/API/USER/VIEW_MENU/PAGE_ALL_BY_VIEW_MENU_CATEGORY_ID_AND_ROLE_ID', 18, 0, '', NULL, NULL); INSERT INTO `api` VALUES (100, '新增视图菜单', '/api/user/view_menu/add_one', '/API/USER/VIEW_MENU/ADD_ONE', 18, 0, '', NULL, NULL); INSERT INTO `api` VALUES (101, '保存视图菜单', '/api/user/view_menu/save_one', '/API/USER/VIEW_MENU/SAVE_ONE', 18, 0, '', NULL, NULL); INSERT INTO `api` VALUES (102, '指定视图菜单 id list,批量删除视图菜单', '/api/user/view_menu/delete_all', '/API/USER/VIEW_MENU/DELETE_ALL', 18, 0, '', NULL, NULL); INSERT INTO `api` VALUES (103, '指定视图菜单 id,获取视图菜单', '/api/user/view_menu/one', '/API/USER/VIEW_MENU/ONE', 18, 0, '', NULL, NULL); INSERT INTO `api` VALUES (104, '指定视图菜单名称,模糊搜索获取所有视图菜单', '/api/user/view_menu/search_all_by_name', '/API/USER/VIEW_MENU/SEARCH_ALL_BY_NAME', 18, 0, '', NULL, NULL); INSERT INTO `api` VALUES (105, '获取当前用户视图菜单,以 Antd VueMenu 形式展示', '/api/user/view_menu/list_all_as_vue_menu_by_current_user', '/API/USER/VIEW_MENU/LIST_ALL_AS_VUE_MENU_BY_CURRENT_USER', 18, 0, '', NULL, NULL); INSERT INTO `api` VALUES (106, '指定角色 id、视图菜单分类 id list,分页获取视图菜单,以 Antd Table 形式展示', '/api/user/view_menu/page_all_as_antd_table_by_role_id_and_menu_category_id_list', '/API/USER/VIEW_MENU/PAGE_ALL_AS_ANTD_TABLE_BY_ROLE_ID_AND_MENU_CATEGORY_ID_LIST', 18, 0, '', NULL, NULL); INSERT INTO `api` VALUES (107, '指定视图菜单分类 id list,分页获取视图菜单,以 Antd Table 形式展示', '/api/user/view_menu/page_all_as_antd_table_by_view_menu_category_id_list', '/API/USER/VIEW_MENU/PAGE_ALL_AS_ANTD_TABLE_BY_VIEW_MENU_CATEGORY_ID_LIST', 18, 0, '', NULL, NULL); INSERT INTO `api` VALUES (108, '指定角色 id、视图菜单 id list,批量授权', '/api/user/view_menu/grant_all_by_role_id_and_view_menu_id_list', '/API/USER/VIEW_MENU/GRANT_ALL_BY_ROLE_ID_AND_VIEW_MENU_ID_LIST', 18, 0, '', NULL, NULL); INSERT INTO `api` VALUES (109, '指定角色 id、视图菜单 id list,批量撤销授权', '/api/user/view_menu/revoke_all_by_role_id_and_view_menu_id_list', '/API/USER/VIEW_MENU/REVOKE_ALL_BY_ROLE_ID_AND_VIEW_MENU_ID_LIST', 18, 0, '', NULL, NULL); INSERT INTO `api` VALUES (110, '指定视图页面 id,API id list,批量关联', '/api/user/view_page_api/associate_all_by_view_page_id_and_api_id_list', '/API/USER/VIEW_PAGE_API/ASSOCIATE_ALL_BY_VIEW_PAGE_ID_AND_API_ID_LIST', 8, 0, '', NULL, NULL); INSERT INTO `api` VALUES (111, '指定视图页面 id,API id list,批量撤销关联', '/api/user/view_page_api/revoke_associate_all_by_view_page_id_and_api_id_list', '/API/USER/VIEW_PAGE_API/REVOKE_ASSOCIATE_ALL_BY_VIEW_PAGE_ID_AND_API_ID_LIST', 8, 0, '', NULL, NULL); INSERT INTO `api` VALUES (112, '分页获取所有父级视图页面分类', '/api/user/view_page_category/page_all_parent', '/API/USER/VIEW_PAGE_CATEGORY/PAGE_ALL_PARENT', 9, 0, '', NULL, NULL); INSERT INTO `api` VALUES (113, '指定父级视图页面分类 id,获取所有视图页面分类', '/api/user/view_page_category/list_all_by_parent_id', '/API/USER/VIEW_PAGE_CATEGORY/LIST_ALL_BY_PARENT_ID', 9, 0, '', NULL, NULL); INSERT INTO `api` VALUES (114, '新增视图页面分类', '/api/user/view_page_category/add_one', '/API/USER/VIEW_PAGE_CATEGORY/ADD_ONE', 9, 0, '', NULL, NULL); INSERT INTO `api` VALUES (115, '保存视图页面分类', '/api/user/view_page_category/save_one', '/API/USER/VIEW_PAGE_CATEGORY/SAVE_ONE', 9, 0, '', NULL, NULL); INSERT INTO `api` VALUES (116, '指定视图页面分类 id ,批量删除视图页面分类', '/api/user/view_page_category/delete_all', '/API/USER/VIEW_PAGE_CATEGORY/DELETE_ALL', 9, 0, '', NULL, NULL); INSERT INTO `api` VALUES (117, '指定视图页面分类 id,获取视图页面分类', '/api/user/view_page_category/one', '/API/USER/VIEW_PAGE_CATEGORY/ONE', 9, 0, '', NULL, NULL); INSERT INTO `api` VALUES (118, '指定角色 id,获取所有视图页面分类,以 Antd Table 形式展示', '/api/user/view_page_category/list_all_as_antd_table_by_role_id', '/API/USER/VIEW_PAGE_CATEGORY/LIST_ALL_AS_ANTD_TABLE_BY_ROLE_ID', 9, 0, '', NULL, NULL); INSERT INTO `api` VALUES (119, '获取视图页面分类,以 Antd Table 形式展示', '/api/user/view_page_category/list_all_as_antd_table', '/API/USER/VIEW_PAGE_CATEGORY/LIST_ALL_AS_ANTD_TABLE', 9, 0, '', NULL, NULL); INSERT INTO `api` VALUES (120, '获取所有视图页面分类,以 Antd TreeNode 形式展示', '/api/user/view_page_category/list_all_as_antd_tree_node', '/API/USER/VIEW_PAGE_CATEGORY/LIST_ALL_AS_ANTD_TREE_NODE', 9, 0, '', NULL, NULL); INSERT INTO `api` VALUES (121, '指定视图页面 id,获取视图页面分类', '/api/user/view_page_category/get_one_by_view_page_id', '/API/USER/VIEW_PAGE_CATEGORY/GET_ONE_BY_VIEW_PAGE_ID', 9, 0, '', NULL, NULL); INSERT INTO `api` VALUES (122, '指定视图页面组件 id、API id list,批量关联', '/api/user/view_page_component_api/associate_all_by_view_page_component_id_and_api_id_list', '/API/USER/VIEW_PAGE_COMPONENT_API/ASSOCIATE_ALL_BY_VIEW_PAGE_COMPONENT_ID_AND_API_ID_LIST', 12, 0, '', NULL, NULL); INSERT INTO `api` VALUES (123, '指定视图页面组件 id、API id,批量撤销关联', '/api/user/view_page_component_api/revoke_associate_all_by_role_id_and_authority', '/API/USER/VIEW_PAGE_COMPONENT_API/REVOKE_ASSOCIATE_ALL_BY_ROLE_ID_AND_AUTHORITY', 12, 0, '', NULL, NULL); INSERT INTO `api` VALUES (124, '指定视图页面 id,分页获取所有视图页面组件', '/api/user/view_page_component/page_all_by_view_page_id', '/API/USER/VIEW_PAGE_COMPONENT/PAGE_ALL_BY_VIEW_PAGE_ID', 11, 0, '', NULL, NULL); INSERT INTO `api` VALUES (125, '新增视图页面组件', '/api/user/view_page_component/add_one', '/API/USER/VIEW_PAGE_COMPONENT/ADD_ONE', 11, 0, '', NULL, NULL); INSERT INTO `api` VALUES (126, '保存视图页面组件', '/api/user/view_page_component/save_one', '/API/USER/VIEW_PAGE_COMPONENT/SAVE_ONE', 11, 0, '', NULL, NULL); INSERT INTO `api` VALUES (127, '指定视图页面组件 id,批量删除视图页面组件', '/api/user/view_page_component/delete_all', '/API/USER/VIEW_PAGE_COMPONENT/DELETE_ALL', 11, 0, '', NULL, NULL); INSERT INTO `api` VALUES (128, '指定视图组件 id,获取视图组件', '/api/user/view_page_component/one', '/API/USER/VIEW_PAGE_COMPONENT/ONE', 11, 0, '', NULL, NULL); INSERT INTO `api` VALUES (129, '指定角色 id、视图页面 id list,分页获取所有视图页面组件,以 Antd Table 形式展示', '/api/user/view_page_component/page_all_as_antd_table_by_role_id_and_view_page_id_list', '/API/USER/VIEW_PAGE_COMPONENT/PAGE_ALL_AS_ANTD_TABLE_BY_ROLE_ID_AND_VIEW_PAGE_ID_LIST', 11, 0, '', NULL, NULL); INSERT INTO `api` VALUES (130, '指定视图页面 id list,分页获取视图页面组件,以 Antd Table 形式展示', '/api/user/view_page_component/page_all_as_antd_table_by_view_page_id_list', '/API/USER/VIEW_PAGE_COMPONENT/PAGE_ALL_AS_ANTD_TABLE_BY_VIEW_PAGE_ID_LIST', 11, 0, '', NULL, NULL); INSERT INTO `api` VALUES (131, '指定角色 id、视图页面组件 id list,批量授权', '/api/user/view_page_component/grant_all_by_role_id_and_view_page_component_id_list', '/API/USER/VIEW_PAGE_COMPONENT/GRANT_ALL_BY_ROLE_ID_AND_VIEW_PAGE_COMPONENT_ID_LIST', 11, 0, '', NULL, NULL); INSERT INTO `api` VALUES (132, '指定角色 id、视图页面组件 id list,批量撤销授权', '/api/user/view_page_component/revoke_all_by_role_id_and_view_page_component_id_list', '/API/USER/VIEW_PAGE_COMPONENT/REVOKE_ALL_BY_ROLE_ID_AND_VIEW_PAGE_COMPONENT_ID_LIST', 11, 0, '', NULL, NULL); INSERT INTO `api` VALUES (133, '指定视图页面分类 id ,分页获取所有视图页面', '/api/user/view_page/page_all_by_view_page_category_id', '/API/USER/VIEW_PAGE/PAGE_ALL_BY_VIEW_PAGE_CATEGORY_ID', 10, 0, '', NULL, NULL); INSERT INTO `api` VALUES (134, '新增视图页面', '/api/user/view_page/add_one', '/API/USER/VIEW_PAGE/ADD_ONE', 10, 0, '', NULL, NULL); INSERT INTO `api` VALUES (135, '保存视图页面', '/api/user/view_page/save_one', '/API/USER/VIEW_PAGE/SAVE_ONE', 10, 0, '', NULL, NULL); INSERT INTO `api` VALUES (136, '指定视图页面 id ,批量删除视图页面', '/api/user/view_page/delete_all', '/API/USER/VIEW_PAGE/DELETE_ALL', 10, 0, '', NULL, NULL); INSERT INTO `api` VALUES (137, '指定视图页面 id,获取视图页面', '/api/user/view_page/one', '/API/USER/VIEW_PAGE/ONE', 10, 0, '', NULL, NULL); INSERT INTO `api` VALUES (138, '指定角色 id,视图页面分类 id list,分页获取视图页面,以 Antd Table 形式展示', '/api/user/view_page/page_all_as_antd_table_by_role_id_and_view_page_category_id_list', '/API/USER/VIEW_PAGE/PAGE_ALL_AS_ANTD_TABLE_BY_ROLE_ID_AND_VIEW_PAGE_CATEGORY_ID_LIST', 10, 0, '', NULL, NULL); INSERT INTO `api` VALUES (139, '指定视图页面分类 id list,分页获取所有视图页面,以 Antd Table 形式展示', '/api/user/view_page/page_all_as_antd_table_by_view_page_category_id_list', '/API/USER/VIEW_PAGE/PAGE_ALL_AS_ANTD_TABLE_BY_VIEW_PAGE_CATEGORY_ID_LIST', 10, 0, '', NULL, NULL); INSERT INTO `api` VALUES (140, '指定角色 id、视图页面 id list,批量授权', '/api/user/view_page/grant_all_by_role_id_and_view_page_id_list', '/API/USER/VIEW_PAGE/GRANT_ALL_BY_ROLE_ID_AND_VIEW_PAGE_ID_LIST', 10, 0, '', NULL, NULL); INSERT INTO `api` VALUES (141, '指定角色 id、视图页面 id list,批量撤销授权', '/api/user/view_page/revoke_all_by_role_id_and_view_page_id_list', '/API/USER/VIEW_PAGE/REVOKE_ALL_BY_ROLE_ID_AND_VIEW_PAGE_ID_LIST', 10, 0, '', NULL, NULL); INSERT INTO `api` VALUES (142, '指定视图页面分类 id,获取所有视图页面', '/api/user/view_page/list_all_by_view_page_category_id', '/API/USER/VIEW_PAGE/LIST_ALL_BY_VIEW_PAGE_CATEGORY_ID', 10, 0, '', NULL, NULL); -- ---------------------------- -- Table structure for api_category -- ---------------------------- DROP TABLE IF EXISTS `api_category`; CREATE TABLE `api_category` ( `id` bigint(20) UNSIGNED NOT NULL AUTO_INCREMENT COMMENT 'id', `name` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '分类名称', `parent_id` bigint(20) NULL DEFAULT NULL COMMENT '父级分类 id', `sort` bigint(20) NULL DEFAULT 0 COMMENT '排序', `remark` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '' COMMENT '备注', `gmt_modified` datetime(0) NULL DEFAULT NULL COMMENT '更新时间', `gmt_created` datetime(0) NULL DEFAULT NULL COMMENT '创建时间', PRIMARY KEY (`id`) USING BTREE ) ENGINE = InnoDB AUTO_INCREMENT = 26 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = 'API 分类表' ROW_FORMAT = Dynamic; -- ---------------------------- -- Records of api_category -- ---------------------------- INSERT INTO `api_category` VALUES (1, '系统管理', NULL, 0, '', '2018-06-20 14:36:43', '2018-06-20 14:36:43'); INSERT INTO `api_category` VALUES (2, '系统配置', 1, 0, '', '2018-06-20 14:36:43', '2018-06-20 14:36:43'); INSERT INTO `api_category` VALUES (3, '用户配置', 1, 0, '', '2018-06-20 14:36:43', '2018-06-20 14:36:43'); INSERT INTO `api_category` VALUES (4, 'API 分类', 3, 0, '', '2019-06-27 11:39:12', '2018-06-20 14:36:43'); INSERT INTO `api_category` VALUES (5, 'API', 3, 0, '', '2019-06-27 11:39:23', '2018-06-20 14:36:43'); INSERT INTO `api_category` VALUES (6, '数据字典分类', 2, 0, '', '2019-09-27 01:01:22', '2018-06-20 14:36:43'); INSERT INTO `api_category` VALUES (7, '数据字典', 2, 0, '', '2019-09-26 08:32:16', '2018-06-20 14:36:43'); INSERT INTO `api_category` VALUES (8, '视图页面关联 API', 3, 0, '', '2019-06-27 11:39:31', '2018-06-20 14:36:43'); INSERT INTO `api_category` VALUES (9, '视图页面分类', 3, 0, '', '2019-06-27 11:39:59', '2018-06-20 14:36:43'); INSERT INTO `api_category` VALUES (10, '视图页面', 3, 0, '', '2019-06-27 11:39:39', '2018-06-20 14:36:43'); INSERT INTO `api_category` VALUES (11, '视图页面组件', 3, 0, '', '2019-06-27 11:39:46', '2018-06-20 14:36:43'); INSERT INTO `api_category` VALUES (12, '视图页面组件关联 API', 3, 0, '', '2019-06-27 11:39:52', '2018-06-20 14:36:43'); INSERT INTO `api_category` VALUES (13, '角色关联权限', 3, 0, '', '2018-06-20 14:36:43', '2018-06-20 14:36:43'); INSERT INTO `api_category` VALUES (14, '角色管理', 3, 0, '', '2018-06-20 14:36:43', '2018-06-20 14:36:43'); INSERT INTO `api_category` VALUES (15, '用户管理', 3, 0, '', '2018-06-20 14:36:43', '2018-06-20 14:36:43'); INSERT INTO `api_category` VALUES (16, '用户关联角色', 3, 0, '', '2018-06-20 14:36:43', '2018-06-20 14:36:43'); INSERT INTO `api_category` VALUES (17, '视图菜单分类', 3, 0, '', '2018-06-20 14:36:43', '2018-06-20 14:36:43'); INSERT INTO `api_category` VALUES (18, '视图菜单', 3, 0, '', '2018-06-20 14:36:43', '2018-06-20 14:36:43'); INSERT INTO `api_category` VALUES (19, '文件管理', 2, 0, '', '2019-06-27 11:38:43', '2019-06-27 11:38:43'); INSERT INTO `api_category` VALUES (20, '部门管理', 2, 0, '', '2019-07-16 12:50:58', '2019-07-16 12:50:03'); INSERT INTO `api_category` VALUES (21, '电子邮件管理', 2, 0, '', '2019-07-16 12:50:37', '2019-07-16 12:50:37'); INSERT INTO `api_category` VALUES (22, '操作日志', 2, 0, '', '2019-08-07 12:45:40', '2019-08-07 12:45:40'); INSERT INTO `api_category` VALUES (23, 'Quartz 任务', 2, 0, '', '2019-08-07 12:46:17', '2019-08-07 12:46:01'); INSERT INTO `api_category` VALUES (24, 'Quartz 任务管理', 21, 0, '', NULL, NULL); INSERT INTO `api_category` VALUES (25, 'Quartz 任务日志', 21, 0, '', NULL, NULL); -- ---------------------------- -- Table structure for department -- ---------------------------- DROP TABLE IF EXISTS `department`; CREATE TABLE `department` ( `id` bigint(20) UNSIGNED NOT NULL AUTO_INCREMENT COMMENT 'id', `name` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '部门名称', `parent_id` bigint(20) NULL DEFAULT NULL COMMENT '父级部门 id', `remark` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '' COMMENT '备注', `gmt_modified` datetime(0) NULL DEFAULT NULL COMMENT '更新时间', `gmt_created` datetime(0) NULL DEFAULT NULL COMMENT '创建时间', PRIMARY KEY (`id`) USING BTREE ) ENGINE = InnoDB AUTO_INCREMENT = 2 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = '部门表' ROW_FORMAT = Dynamic; -- ---------------------------- -- Records of department -- ---------------------------- INSERT INTO `department` VALUES (1, '测试部门', NULL, '', '2018-12-20 06:08:12', '2018-12-20 03:43:04'); -- ---------------------------- -- Table structure for dictionary -- ---------------------------- DROP TABLE IF EXISTS `dictionary`; CREATE TABLE `dictionary` ( `id` bigint(20) UNSIGNED NOT NULL AUTO_INCREMENT COMMENT 'id', `key` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '字典键', `key_name` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '字典键名', `value_name` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '字典值名', `value_slug` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '字典值别名', `value` text CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL COMMENT '字典值', `dictionary_category_id` bigint(20) UNSIGNED NOT NULL COMMENT '字典分类 id', `enabled` tinyint(1) UNSIGNED NULL DEFAULT NULL COMMENT '是否有效(0=否,1=是,默认=0)', `sort` bigint(20) UNSIGNED NULL DEFAULT 0 COMMENT '排序', `remark` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '' COMMENT '备注', `gmt_modified` datetime(0) NULL DEFAULT NULL COMMENT '更新时间', `gmt_created` datetime(0) NULL DEFAULT NULL COMMENT '创建时间', PRIMARY KEY (`id`) USING BTREE, UNIQUE INDEX `uk_key_value_slug`(`key`, `value_slug`) USING BTREE ) ENGINE = InnoDB AUTO_INCREMENT = 47 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = '数据字典表' ROW_FORMAT = Dynamic; -- ---------------------------- -- Records of dictionary -- ---------------------------- INSERT INTO `dictionary` VALUES (1, 'WEB', '网站配置', '网站名', 'NAME', 'Nimrod', 3, 1, 0, '', '2019-09-24 03:24:39', '2018-07-08 15:29:33'); INSERT INTO `dictionary` VALUES (2, 'WEB', '网站配置', '页脚版权', 'FOOTER', 'Copyright © 2020 Nimrod.All rights reserved.', 3, 1, 0, '', '2020-03-07 03:41:46', '2018-07-08 15:29:33'); INSERT INTO `dictionary` VALUES (3, 'MAIL', '电子邮箱发信配置', '主机', 'HOST', 'smtp.mail.example.com', 4, 1, 0, '企业邮箱:https://mail.example.com/', '2018-07-08 15:29:33', '2018-07-08 15:29:33'); INSERT INTO `dictionary` VALUES (4, 'MAIL', '电子邮箱发信配置', '协议', 'PROTOCOL', 'smtp', 4, 1, 0, '', '2018-07-08 15:29:33', '2018-07-08 15:29:33'); INSERT INTO `dictionary` VALUES (5, 'MAIL', '电子邮箱发信配置', '端口号', 'PORT', '25', 4, 1, 0, '', '2018-07-08 15:29:33', '2018-07-08 15:29:33'); INSERT INTO `dictionary` VALUES (6, 'MAIL', '电子邮箱发信配置', '用户名', 'USERNAME', 'no-reply@example.com', 4, 1, 0, '', '2019-02-28 08:34:20', '2018-07-08 15:29:33'); INSERT INTO `dictionary` VALUES (7, 'MAIL', '电子邮箱发信配置', '密码', 'PASSWORD', '123456', 4, 1, 0, '', '2019-11-07 02:16:18', '2018-07-08 15:29:33'); INSERT INTO `dictionary` VALUES (8, 'MAIL', '电子邮箱发信配置', '显示邮箱', 'FROM', 'no-reply@example.com', 4, 1, 0, '', '2019-02-28 08:34:27', '2018-07-08 15:29:33'); INSERT INTO `dictionary` VALUES (9, 'MAIL', '电子邮箱发信配置', '默认编码', 'DEFAULT_ENCODING', 'UTF-8', 4, 1, 0, '', '2018-07-08 15:29:33', '2018-07-08 15:29:33'); INSERT INTO `dictionary` VALUES (10, 'MAIL', '电子邮箱发信配置', '测试连接', 'TEST_CONNECTION', 'false', 4, 1, 0, '', '2018-07-08 15:29:33', '2018-07-08 15:29:33'); INSERT INTO `dictionary` VALUES (11, 'VIEW_PAGE_COMPONENT_TYPE', '视图页面组件类型', '按钮', 'BUTTON', '1', 5, 1, 0, '', '2018-07-08 15:29:33', '2018-07-08 15:29:33'); INSERT INTO `dictionary` VALUES (12, 'VIEW_PAGE_COMPONENT_TYPE', '视图页面组件类型', '搜索框', 'SEARCH', '2', 5, 1, 0, '', '2018-07-08 15:29:33', '2018-07-08 15:29:33'); INSERT INTO `dictionary` VALUES (16, 'SMS_STATUS', '信息状态', '等待', 'WAIT', '0', 7, 1, 0, '', '2018-07-08 15:29:33', '2018-07-08 15:29:33'); INSERT INTO `dictionary` VALUES (17, 'SMS_STATUS', '信息状态', '失败', 'FAIL', '1', 7, 1, 0, '', '2018-07-08 15:29:33', '2018-07-08 15:29:33'); INSERT INTO `dictionary` VALUES (18, 'SMS_STATUS', '信息状态', '成功', 'SUCCESS', '2', 7, 1, 0, '', '2018-07-08 15:29:33', '2018-07-08 15:29:33'); INSERT INTO `dictionary` VALUES (19, 'IS_OR_NOT', '是或否', '否', 'NOT', '0', 8, 1, 0, '', '2018-07-08 15:29:33', '2018-07-08 15:29:33'); INSERT INTO `dictionary` VALUES (20, 'IS_OR_NOT', '是或否', '是', 'IS', '1', 8, 1, 0, '', '2018-07-08 15:29:33', '2018-07-08 15:29:33'); INSERT INTO `dictionary` VALUES (21, 'GENDER', '性别', '未知', 'UNKNOWN', '0', 9, 1, 0, '', '2018-07-08 15:29:33', '2018-07-08 15:29:33'); INSERT INTO `dictionary` VALUES (22, 'GENDER', '性别', '男', 'MALE', '1', 9, 1, 0, '', '2018-07-08 15:29:33', '2018-07-08 15:29:33'); INSERT INTO `dictionary` VALUES (23, 'GENDER', '性别', '女', 'FEMALE', '2', 9, 1, 0, '', '2018-07-08 15:29:33', '2018-07-08 15:29:33'); INSERT INTO `dictionary` VALUES (24, 'FILE', '文件上传配置', '上传路径', 'UPLOAD_PATH', '/upload', 11, 1, 0, '', '2019-10-25 07:46:40', '2018-11-19 07:41:07'); INSERT INTO `dictionary` VALUES (25, 'OPERATION_TYPE', '操作类型', '访问页面', 'PAGE', '0', 12, 1, 0, '', '2018-12-27 03:18:00', '2018-12-17 12:13:32'); INSERT INTO `dictionary` VALUES (26, 'OPERATION_TYPE', '操作类型', '调用 API', 'API', '1', 12, 1, 0, '', '2018-12-27 03:18:08', '2018-12-17 12:14:42'); INSERT INTO `dictionary` VALUES (27, 'FILE', '文件上传配置', '附件类型', 'TYPE', '.jpg,.png,.zip', 11, 1, 0, '允许上传的文件类型', '2019-01-09 06:53:11', '2018-12-17 13:08:13'); INSERT INTO `dictionary` VALUES (28, 'FILE', '文件上传配置', '最大单文件上传大小', 'MAX_FILE_SIZE', '200MB', 11, 1, 0, '允许上传的最大文件大小', '2019-10-25 07:01:08', '2018-12-17 13:10:23'); INSERT INTO `dictionary` VALUES (29, 'SYSTEM', '系统配置', '语言', 'LANGUAGE', 'zh', 13, 0, 0, '', '2019-01-09 06:32:49', '2018-12-19 08:25:09'); INSERT INTO `dictionary` VALUES (30, 'SYSTEM', '系统配置', '国家/区域', 'COUNTY', 'CN', 13, 0, 0, '', '2019-01-09 06:32:55', '2018-12-19 08:27:08'); INSERT INTO `dictionary` VALUES (31, 'SYSTEM', '系统配置', '时区标识符', 'TIME_ZONE_ID', 'GMT+8', 13, 1, 0, '', '2019-01-09 06:32:59', '2018-12-19 08:30:44'); INSERT INTO `dictionary` VALUES (32, 'SYSTEM', '系统配置', '日期格式', 'DATE_FORMAT_PATTERN', 'yyyy-MM-dd HH:mm:ss', 13, 0, 0, '', '2019-01-09 06:33:04', '2018-12-19 08:32:46'); INSERT INTO `dictionary` VALUES (33, 'FILE', '文件上传配置', '最大请求上传大小', 'MAX_REQUEST_SIZE', '1000MB', 11, 1, 0, '', '2019-10-25 07:01:17', '2018-12-21 01:05:54'); INSERT INTO `dictionary` VALUES (34, 'VERIFY_CODE', '验证码', '过期时间(秒)', 'EXPIRATION', '60', 14, 1, 0, '', '2019-01-09 06:56:53', '2019-01-09 06:56:53'); INSERT INTO `dictionary` VALUES (35, 'VERIFY_CODE', '验证码', '噪点', 'YAWP', 'false', 14, 1, 0, '', '2019-01-09 06:57:56', '2019-01-09 06:57:43'); INSERT INTO `dictionary` VALUES (36, 'VERIFY_CODE', '验证码', '字符长度', 'STRING_LENGTH', '4', 14, 1, 0, '建议字典值设置为4', '2019-01-10 01:02:27', '2019-01-09 06:58:19'); INSERT INTO `dictionary` VALUES (37, 'VERIFY_CODE', '验证码', '干扰线条数', 'INTER_LINE', '0', 14, 1, 0, '建议字典值设置为4', '2019-01-10 01:02:56', '2019-01-09 06:59:09'); INSERT INTO `dictionary` VALUES (38, 'QUARTZ_TRIGGER_STATE', 'Quartz 任务状态', '等待中', 'WAITING', 'WAITING', 15, 1, 0, '', NULL, NULL); INSERT INTO `dictionary` VALUES (39, 'QUARTZ_TRIGGER_STATE', 'Quartz 任务状态', '运行中', 'ACQUIRED', 'ACQUIRED', 15, 1, 0, '', NULL, NULL); INSERT INTO `dictionary` VALUES (40, 'QUARTZ_TRIGGER_STATE', 'Quartz 任务状态', '已暂停', 'PAUSED', 'PAUSED', 15, 1, 0, '', '2019-09-24 03:25:28', NULL); INSERT INTO `dictionary` VALUES (41, 'QUARTZ_TRIGGER_STATE', 'Quartz 任务状态', '已阻塞', 'BLOCKED', 'BLOCKED', 15, 1, 0, '', NULL, NULL); INSERT INTO `dictionary` VALUES (42, 'QUARTZ_TRIGGER_STATE', 'Quartz 任务状态', '错误', 'ERROR', 'ERROR', 15, 1, 0, '', NULL, NULL); INSERT INTO `dictionary` VALUES (43, 'VERIFY_CODE', '验证码', '背景色', 'HEX_BACKGROUND_COLOR', '#0064c8', 14, 1, 0, '', NULL, NULL); INSERT INTO `dictionary` VALUES (44, 'VERIFY_CODE', '验证码', '字体色', 'FONT_COLOR', '#ffffff', 14, 1, 0, '', NULL, NULL); INSERT INTO `dictionary` VALUES (45, 'WEB', '网站配置', '网站地址', 'URL', 'http://localhost:8080', 3, 1, 0, '', NULL, NULL); INSERT INTO `dictionary` VALUES (46, 'VERIFY_CODE', '验证码', '字体路径', 'FONT_PATH', 'classpath:/fonts/Arial.ttf', 14, 1, 0, '', '2019-11-09 02:54:48', '2019-11-09 02:54:48'); -- ---------------------------- -- Table structure for dictionary_category -- ---------------------------- DROP TABLE IF EXISTS `dictionary_category`; CREATE TABLE `dictionary_category` ( `id` bigint(20) UNSIGNED NOT NULL AUTO_INCREMENT COMMENT 'id', `name` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '分类名称', `parent_id` bigint(20) UNSIGNED NULL DEFAULT NULL COMMENT '父级分类 id', `sort` bigint(20) NULL DEFAULT 0 COMMENT '排序', `remark` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '' COMMENT '备注', `gmt_modified` datetime(0) NULL DEFAULT NULL COMMENT '更新时间', `gmt_created` datetime(0) NULL DEFAULT NULL COMMENT '创建时间', PRIMARY KEY (`id`) USING BTREE ) ENGINE = InnoDB AUTO_INCREMENT = 16 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = '数据字典分类表' ROW_FORMAT = Dynamic; -- ---------------------------- -- Records of dictionary_category -- ---------------------------- INSERT INTO `dictionary_category` VALUES (1, '系统缺省字段', NULL, 0, '', '2018-07-08 15:29:33', '2018-07-08 15:29:33'); INSERT INTO `dictionary_category` VALUES (2, '通用缺省字段', NULL, 0, '', '2018-07-08 15:29:33', '2018-07-08 15:29:33'); INSERT INTO `dictionary_category` VALUES (3, '网站配置', 1, 0, '', '2019-09-26 12:47:14', '2018-07-08 15:29:33'); INSERT INTO `dictionary_category` VALUES (4, '电子邮箱配置', 1, 0, '', '2019-09-24 03:15:58', '2018-07-08 15:29:33'); INSERT INTO `dictionary_category` VALUES (5, '视图页面组件类型', 1, 0, '', '2018-07-08 15:29:33', '2018-07-08 15:29:33'); INSERT INTO `dictionary_category` VALUES (7, '信息状态', 1, 0, '', '2018-07-08 15:29:33', '2018-07-08 15:29:33'); INSERT INTO `dictionary_category` VALUES (8, '是否', 2, 0, '', '2019-02-26 00:41:33', '2018-07-08 15:29:33'); INSERT INTO `dictionary_category` VALUES (9, '性别', 2, 0, '', '2019-02-26 00:41:33', '2018-07-08 15:29:33'); INSERT INTO `dictionary_category` VALUES (11, '文件上传配置', 1, 0, '', '2018-11-19 07:39:44', '2018-11-19 07:39:44'); INSERT INTO `dictionary_category` VALUES (12, '操作类型', 1, 0, '', '2018-12-17 12:02:51', '2018-12-17 12:02:51'); INSERT INTO `dictionary_category` VALUES (13, '系统配置', 1, 0, '', '2018-12-19 08:23:57', '2018-12-19 08:23:57'); INSERT INTO `dictionary_category` VALUES (14, '验证码', 1, 0, '', '2019-01-04 08:23:15', '2019-01-04 08:23:15'); INSERT INTO `dictionary_category` VALUES (15, 'Quartz 任务状态', 1, 0, '', NULL, NULL); -- ---------------------------- -- Table structure for file -- ---------------------------- DROP TABLE IF EXISTS `file`; CREATE TABLE `file` ( `id` bigint(20) UNSIGNED NOT NULL AUTO_INCREMENT COMMENT 'id', `user_id` bigint(20) UNSIGNED NULL DEFAULT NULL COMMENT '用户 id', `name` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '文件名', `guid` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '唯一标识符', `size` bigint(20) NOT NULL COMMENT '文件大小', `pretty_size` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '文件美化大小', `mime_type` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '' COMMENT 'MIME 类型', `path` text CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL COMMENT '文件路径', `remark` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '' COMMENT '备注', `gmt_modified` datetime(0) NULL DEFAULT NULL COMMENT '更新时间', `gmt_created` datetime(0) NULL DEFAULT NULL COMMENT '创建时间', PRIMARY KEY (`id`) USING BTREE ) ENGINE = InnoDB AUTO_INCREMENT = 4 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = '文件表' ROW_FORMAT = Dynamic; -- ---------------------------- -- Table structure for job_runtime_log -- ---------------------------- DROP TABLE IF EXISTS `job_runtime_log`; CREATE TABLE `job_runtime_log` ( `id` bigint(20) UNSIGNED NOT NULL AUTO_INCREMENT COMMENT 'id', `job_class_name` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '' COMMENT '任务类名', `job_group` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '任务分组', `description` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '' COMMENT '描述', `fire_time` datetime(0) NULL DEFAULT NULL COMMENT 'fireTime', `next_fire_time` datetime(0) NULL DEFAULT NULL COMMENT 'nextFireTime', `consuming_time` bigint(20) NULL DEFAULT NULL COMMENT '任务运行耗时(毫秒)', `log` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '' COMMENT '日志', `job_exception` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '' COMMENT '任务异常信息', `gmt_created` datetime(0) NULL DEFAULT CURRENT_TIMESTAMP(0) COMMENT '创建时间', PRIMARY KEY (`id`) USING BTREE ) ENGINE = InnoDB AUTO_INCREMENT = 1 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = 'Quartz 任务运行日志' ROW_FORMAT = Dynamic; -- ---------------------------- -- Table structure for mail -- ---------------------------- DROP TABLE IF EXISTS `mail`; CREATE TABLE `mail` ( `id` bigint(20) UNSIGNED NOT NULL AUTO_INCREMENT COMMENT 'id', `status` tinyint(1) NOT NULL COMMENT '发信状态', `from` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '' COMMENT '发件人', `to` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '收件人', `subject` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '' COMMENT '主题', `text` text CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL COMMENT '内容', `html` tinyint(1) NULL DEFAULT 0 COMMENT '是否为 html,0=否,1=是', `error` text CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL COMMENT '发信报错信息', `remark` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '' COMMENT '备注', `gmt_modified` datetime(0) NULL DEFAULT NULL COMMENT '更新时间', `gmt_created` datetime(0) NULL DEFAULT NULL COMMENT '创建时间', PRIMARY KEY (`id`) USING BTREE ) ENGINE = InnoDB AUTO_INCREMENT = 1 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = '电子邮件表' ROW_FORMAT = Dynamic; -- ---------------------------- -- Table structure for operation_log -- ---------------------------- DROP TABLE IF EXISTS `operation_log`; CREATE TABLE `operation_log` ( `id` bigint(20) UNSIGNED NOT NULL AUTO_INCREMENT COMMENT 'id', `user_id` bigint(20) NULL DEFAULT NULL COMMENT '访问用户 id', `ip_address` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '' COMMENT '用户 IP', `operation_type` tinyint(1) NULL DEFAULT NULL COMMENT '操作类型', `operation` text CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL COMMENT '操作说明', `consuming_time` bigint(255) NULL DEFAULT 0 COMMENT '操作耗时(毫秒)', `request_url` text CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL COMMENT '请求地址', `request_method` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '' COMMENT '请求方法', `request_parameter` text CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL COMMENT '请求参数', `accept_language` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '' COMMENT '请求语言', `referer` text CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL COMMENT '请求来源', `user_agent` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '' COMMENT '用户代理', `handler` text CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL COMMENT 'Handler', `stack_trace` text CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NULL COMMENT '异常堆栈', `session_id` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '' COMMENT 'Session ID', `cookie` text CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL COMMENT 'Cookie', `status` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '' COMMENT '响应状态码', `gmt_created` datetime(0) NULL DEFAULT NULL COMMENT '创建时间', PRIMARY KEY (`id`) USING BTREE ) ENGINE = InnoDB AUTO_INCREMENT = 1 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = '操作日志表' ROW_FORMAT = Dynamic; -- ---------------------------- -- Table structure for role -- ---------------------------- DROP TABLE IF EXISTS `role`; CREATE TABLE `role` ( `id` bigint(20) UNSIGNED NOT NULL AUTO_INCREMENT COMMENT 'id', `name` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '角色名称', `value` varchar(191) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '角色值', `remark` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '' COMMENT '备注', `gmt_modified` datetime(0) NULL DEFAULT NULL COMMENT '更新时间', `gmt_created` datetime(0) NULL DEFAULT NULL COMMENT '创建时间', PRIMARY KEY (`id`) USING BTREE, UNIQUE INDEX `uk_value`(`value`) USING BTREE ) ENGINE = InnoDB AUTO_INCREMENT = 1000 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = '角色表' ROW_FORMAT = Dynamic; -- ---------------------------- -- Records of role -- ---------------------------- INSERT INTO `role` VALUES (1, '普通用户', 'NORMAL_USER', '', '2018-06-27 21:22:40', '2018-06-27 21:22:40'); INSERT INTO `role` VALUES (2, '管理员', 'ADMIN', '', '2018-06-27 21:22:40', '2018-06-27 21:22:40'); INSERT INTO `role` VALUES (999, '系统管理员', 'SYSTEM_ADMIN', '', '2018-06-27 21:22:40', '2018-06-27 21:22:40'); -- ---------------------------- -- Table structure for role_authority -- ---------------------------- DROP TABLE IF EXISTS `role_authority`; CREATE TABLE `role_authority` ( `id` bigint(20) UNSIGNED NOT NULL AUTO_INCREMENT COMMENT 'id', `role_id` bigint(20) UNSIGNED NOT NULL COMMENT '角色 id', `authority` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '权限(authority)', PRIMARY KEY (`id`) USING BTREE ) ENGINE = InnoDB AUTO_INCREMENT = 1 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = '角色关联权限表' ROW_FORMAT = Dynamic; -- ---------------------------- -- Table structure for role_view_menu -- ---------------------------- DROP TABLE IF EXISTS `role_view_menu`; CREATE TABLE `role_view_menu` ( `id` bigint(20) UNSIGNED NOT NULL AUTO_INCREMENT COMMENT 'id', `role_id` bigint(20) UNSIGNED NOT NULL COMMENT '角色 id', `view_menu_id` bigint(20) UNSIGNED NOT NULL COMMENT '视图菜单 id', PRIMARY KEY (`id`) USING BTREE ) ENGINE = InnoDB AUTO_INCREMENT = 19 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = '角色关联视图菜单表' ROW_FORMAT = Dynamic; -- ---------------------------- -- Records of role_view_menu -- ---------------------------- INSERT INTO `role_view_menu` VALUES (2, 999, 2); INSERT INTO `role_view_menu` VALUES (3, 999, 3); INSERT INTO `role_view_menu` VALUES (4, 999, 4); INSERT INTO `role_view_menu` VALUES (5, 999, 5); INSERT INTO `role_view_menu` VALUES (6, 999, 6); INSERT INTO `role_view_menu` VALUES (7, 999, 7); INSERT INTO `role_view_menu` VALUES (8, 999, 8); INSERT INTO `role_view_menu` VALUES (9, 999, 9); INSERT INTO `role_view_menu` VALUES (10, 999, 10); INSERT INTO `role_view_menu` VALUES (11, 999, 11); INSERT INTO `role_view_menu` VALUES (12, 999, 12); INSERT INTO `role_view_menu` VALUES (13, 999, 13); INSERT INTO `role_view_menu` VALUES (14, 999, 14); INSERT INTO `role_view_menu` VALUES (15, 999, 15); INSERT INTO `role_view_menu` VALUES (16, 999, 16); INSERT INTO `role_view_menu` VALUES (18, 999, 1); -- ---------------------------- -- Table structure for role_view_menu_category -- ---------------------------- DROP TABLE IF EXISTS `role_view_menu_category`; CREATE TABLE `role_view_menu_category` ( `id` bigint(20) UNSIGNED NOT NULL AUTO_INCREMENT COMMENT 'id', `role_id` bigint(20) UNSIGNED NOT NULL COMMENT '角色 id', `view_menu_category_id` bigint(20) UNSIGNED NOT NULL COMMENT '视图菜单分类名称', PRIMARY KEY (`id`) USING BTREE ) ENGINE = InnoDB AUTO_INCREMENT = 6 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = '角色关联视图菜单分类表' ROW_FORMAT = Dynamic; -- ---------------------------- -- Records of role_view_menu_category -- ---------------------------- INSERT INTO `role_view_menu_category` VALUES (1, 999, 1); INSERT INTO `role_view_menu_category` VALUES (2, 999, 2); INSERT INTO `role_view_menu_category` VALUES (3, 999, 3); INSERT INTO `role_view_menu_category` VALUES (4, 999, 4); INSERT INTO `role_view_menu_category` VALUES (5, 999, 5); -- ---------------------------- -- Table structure for user -- ---------------------------- DROP TABLE IF EXISTS `user`; CREATE TABLE `user` ( `id` bigint(20) UNSIGNED NOT NULL AUTO_INCREMENT COMMENT 'id', `username` varchar(191) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '用户名', `password` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '密码', `avatar` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '' COMMENT '头像', `email` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '电子邮箱', `email_is_verified` tinyint(1) UNSIGNED NULL DEFAULT NULL COMMENT '电子邮箱是否验证(0=未验证,1=已验证,默认=0)', `department_id` bigint(20) UNSIGNED NOT NULL COMMENT '部门 id', `enabled` tinyint(1) UNSIGNED NULL DEFAULT NULL COMMENT '是否启用(0=否,1=是,默认=0)', `remark` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '' COMMENT '备注', `gmt_password_last_modified` datetime(0) NULL DEFAULT NULL COMMENT '最后更改密码时间', `gmt_last_login` datetime(0) NULL DEFAULT NULL COMMENT '最后登录时间', `gmt_deleted` datetime(0) NULL DEFAULT NULL COMMENT '删除时间', `gmt_modified` datetime(0) NULL DEFAULT NULL COMMENT '更新时间', `gmt_created` datetime(0) NULL DEFAULT NULL COMMENT '创建时间', PRIMARY KEY (`id`) USING BTREE, UNIQUE INDEX `uk_username`(`username`) USING BTREE ) ENGINE = InnoDB AUTO_INCREMENT = 1000 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = '用户表' ROW_FORMAT = Dynamic; -- ---------------------------- -- Records of user -- ---------------------------- INSERT INTO `user` VALUES (1, 'normal_user', '$2a$10$IEK236NdbYiZzYVAHTl4qeIgPInJQwMqRh/c986PKwEN4/T1DbsSm', '', 'normal_user@outlook.com', 1, 1, 0, '测试备注', NULL, NULL, NULL, '2019-10-31 13:54:41', '2018-06-27 21:22:40'); INSERT INTO `user` VALUES (2, 'admin', '$2a$10$IEK236NdbYiZzYVAHTl4qeIgPInJQwMqRh/c986PKwEN4/T1DbsSm', '', 'admin@outlook.com', 1, 1, 1, '测试备注', NULL, NULL, NULL, '2019-11-05 02:29:23', '2018-06-27 21:22:40'); INSERT INTO `user` VALUES (999, 'system_admin', '$2a$10$IEK236NdbYiZzYVAHTl4qeIgPInJQwMqRh/c986PKwEN4/T1DbsSm', '', 'system_admin@outlook.com', 1, 1, 1, '测试备注', NULL, NULL, NULL, '2020-03-06 10:52:51', '2018-06-27 21:22:40'); -- ---------------------------- -- Table structure for user_role -- ---------------------------- DROP TABLE IF EXISTS `user_role`; CREATE TABLE `user_role` ( `id` bigint(20) UNSIGNED NOT NULL AUTO_INCREMENT COMMENT 'id', `user_id` bigint(20) UNSIGNED NOT NULL COMMENT '用户 id', `role_id` bigint(20) UNSIGNED NOT NULL COMMENT '角色 id', PRIMARY KEY (`id`) USING BTREE ) ENGINE = InnoDB AUTO_INCREMENT = 5 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = '用户关联角色表' ROW_FORMAT = Dynamic; -- ---------------------------- -- Records of user_role -- ---------------------------- INSERT INTO `user_role` VALUES (1, 999, 999); INSERT INTO `user_role` VALUES (2, 1, 1); INSERT INTO `user_role` VALUES (3, 2, 2); INSERT INTO `user_role` VALUES (4, 2, 999); -- ---------------------------- -- Table structure for user_verify_code -- ---------------------------- DROP TABLE IF EXISTS `user_verify_code`; CREATE TABLE `user_verify_code` ( `id` bigint(20) UNSIGNED NOT NULL AUTO_INCREMENT COMMENT 'id', `user_id` bigint(20) UNSIGNED NOT NULL COMMENT '用户 id', `verify_from` varchar(191) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '用户绑定的电子邮箱或手机号码', `verify_code` varchar(191) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '电子邮箱或手机号码验证码', `gmt_expires` datetime(0) NOT NULL COMMENT '过期时间', `gmt_created` datetime(0) NULL DEFAULT NULL COMMENT '创建时间', PRIMARY KEY (`id`) USING BTREE, UNIQUE INDEX `uk_verify_code`(`verify_code`) USING BTREE, INDEX `uk_user_id`(`user_id`) USING BTREE, INDEX `uk_verify_from`(`verify_from`) USING BTREE ) ENGINE = InnoDB AUTO_INCREMENT = 1 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = '用户验证码表' ROW_FORMAT = Dynamic; -- ---------------------------- -- Table structure for view_menu -- ---------------------------- DROP TABLE IF EXISTS `view_menu`; CREATE TABLE `view_menu` ( `id` bigint(20) UNSIGNED NOT NULL AUTO_INCREMENT COMMENT 'id', `name` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '视图菜单名称', `icon` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '' COMMENT '图标(icon)', `url` text CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL COMMENT '请求地址(url)', `view_menu_category_id` bigint(20) UNSIGNED NOT NULL COMMENT '视图菜单分类 id', `sort` bigint(20) NULL DEFAULT 0 COMMENT '排序', `remark` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '' COMMENT '备注', `gmt_modified` datetime(0) NULL DEFAULT NULL COMMENT '更新时间', `gmt_created` datetime(0) NULL DEFAULT NULL COMMENT '创建时间', PRIMARY KEY (`id`) USING BTREE ) ENGINE = InnoDB AUTO_INCREMENT = 15 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = '视图菜单表' ROW_FORMAT = Dynamic; -- ---------------------------- -- Records of view_menu -- ---------------------------- INSERT INTO `view_menu` VALUES (1, 'API 管理', 'api', '/user/api/list', 3, 0, '', '2019-06-06 02:52:53', '2018-07-01 21:28:04'); INSERT INTO `view_menu` VALUES (2, '数据字典', 'book', '/system/dictionary/list', 2, 0, '', '2019-06-06 02:51:54', '2018-07-01 21:28:04'); INSERT INTO `view_menu` VALUES (3, '视图页面管理', 'desktop', '/user/view_page/list', 3, 0, '', '2019-06-06 02:50:52', '2018-07-01 21:28:04'); INSERT INTO `view_menu` VALUES (4, 'Druid Monitor', 'alibaba', '/druid/list', 2, 0, '', '2019-06-13 04:16:42', '2018-07-01 21:28:04'); INSERT INTO `view_menu` VALUES (5, '用户管理', 'user', '/user/list', 3, 0, '', '2018-07-01 21:28:04', '2018-07-01 21:28:04'); INSERT INTO `view_menu` VALUES (6, '角色管理', 'team', '/user/role/list', 3, 0, '', '2019-06-06 03:16:52', '2018-07-01 21:28:04'); INSERT INTO `view_menu` VALUES (7, '电子邮件管理', 'mail', '/mail/list', 2, 0, '', '2019-01-21 02:59:02', '2018-07-08 13:22:30'); INSERT INTO `view_menu` VALUES (8, '操作日志', 'exception', '/system/operation_log/list', 2, 0, '', '2019-08-07 12:30:57', '2018-08-06 16:47:15'); INSERT INTO `view_menu` VALUES (9, '文件管理', 'file', '/system/file/list', 2, 0, '', '2018-10-20 19:07:33', '2018-10-20 19:01:23'); INSERT INTO `view_menu` VALUES (10, '部门管理', 'cluster', '/user/department/list', 3, 0, '', '2018-12-20 02:43:28', '2018-12-20 02:43:28'); INSERT INTO `view_menu` VALUES (11, '视图菜单管理', 'bars', '/user/view_menu/list', 3, 0, '', '2019-06-13 04:21:31', '2019-06-13 11:37:14'); INSERT INTO `view_menu` VALUES (12, 'Quartz 任务管理', 'bars', '/quartz/job/list', 4, 0, '', '2019-06-17 06:31:23', '2019-06-17 06:28:37'); INSERT INTO `view_menu` VALUES (13, 'Quartz 任务日志', 'exception', '/quartz/job_runtime_log/list', 4, 0, '', NULL, NULL); INSERT INTO `view_menu` VALUES (14, '工作台', 'dashboard', '/workbench', 1, 0, '', '2019-07-27 16:11:47', '2019-02-11 01:17:37'); -- ---------------------------- -- Table structure for view_menu_category -- ---------------------------- DROP TABLE IF EXISTS `view_menu_category`; CREATE TABLE `view_menu_category` ( `id` bigint(20) UNSIGNED NOT NULL AUTO_INCREMENT COMMENT 'id', `name` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '视图菜单分类名称', `icon` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '' COMMENT '图标(icon)', `parent_id` bigint(20) NULL DEFAULT NULL COMMENT '父级视图菜单分类 id', `sort` bigint(20) NULL DEFAULT 0 COMMENT '排序', `remark` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '' COMMENT '备注', `gmt_modified` datetime(0) NULL DEFAULT NULL COMMENT '更新时间', `gmt_created` datetime(0) NULL DEFAULT NULL COMMENT '创建时间', PRIMARY KEY (`id`) USING BTREE ) ENGINE = InnoDB AUTO_INCREMENT = 12 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = '视图菜单分类表' ROW_FORMAT = Dynamic; -- ---------------------------- -- Records of view_menu_category -- ---------------------------- INSERT INTO `view_menu_category` VALUES (1, '系统管理', 'iconfont icon-cog', NULL, 0, '', '2019-12-30 06:11:27', '2018-07-01 21:28:04'); INSERT INTO `view_menu_category` VALUES (2, '系统配置', 'fa fa-cog', 1, 0, '', '2019-06-13 04:16:55', '2018-07-01 21:28:04'); INSERT INTO `view_menu_category` VALUES (3, '用户配置', 'fa fa-user', 1, 0, '', '2019-06-13 07:22:32', '2018-07-01 21:28:04'); INSERT INTO `view_menu_category` VALUES (4, 'Quartz 任务', 'fa fa-bars', 2, 0, '', NULL, NULL); INSERT INTO `view_menu_category` VALUES (5, '测试菜单', 'iconfont icon-cog', NULL, 0, '', '2019-12-30 06:11:41', '2019-12-17 10:38:53'); INSERT INTO `view_menu_category` VALUES (6, '系统管理系统管', 'iconfont icon-cog', NULL, 0, '', '2019-12-30 06:11:46', '2019-12-17 10:51:36'); INSERT INTO `view_menu_category` VALUES (7, '系统管理系统管2', 'iconfont icon-cog', NULL, 0, '', '2019-12-30 06:11:52', '2019-12-17 10:55:09'); INSERT INTO `view_menu_category` VALUES (8, '系统管理系统管3', 'iconfont icon-cog', NULL, 0, '', '2019-12-30 06:11:56', '2019-12-17 10:55:19'); INSERT INTO `view_menu_category` VALUES (9, '系统管理系统管4', 'iconfont icon-cog', NULL, 0, '', '2019-12-30 06:12:00', '2019-12-17 10:56:24'); INSERT INTO `view_menu_category` VALUES (10, '系统管理系统管5', 'iconfont icon-cog', NULL, 0, '', '2019-12-30 06:12:03', '2019-12-17 10:56:30'); INSERT INTO `view_menu_category` VALUES (11, '系统管理系统管6', 'iconfont icon-cog', NULL, 0, '', '2019-12-30 06:12:07', '2019-12-17 10:56:36'); -- ---------------------------- -- Table structure for view_page -- ---------------------------- DROP TABLE IF EXISTS `view_page`; CREATE TABLE `view_page` ( `id` bigint(20) UNSIGNED NOT NULL AUTO_INCREMENT COMMENT 'id', `name` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '视图页面名称', `url` text CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL COMMENT '请求地址(url)', `authority` varchar(191) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '权限(authority)', `view_page_category_id` bigint(20) UNSIGNED NOT NULL COMMENT '视图页面分类 id', `sort` bigint(20) NULL DEFAULT 0 COMMENT '排序', `remark` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '' COMMENT '备注', `gmt_modified` datetime(0) NULL DEFAULT NULL COMMENT '更新时间', `gmt_created` datetime(0) NULL DEFAULT NULL COMMENT '创建时间', PRIMARY KEY (`id`) USING BTREE, UNIQUE INDEX `uk_authority`(`authority`) USING BTREE ) ENGINE = InnoDB AUTO_INCREMENT = 15 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = '视图页面表' ROW_FORMAT = Dynamic; -- ---------------------------- -- Records of view_page -- ---------------------------- INSERT INTO `view_page` VALUES (1, 'API 管理', '/user/api/page_all', '/USER/API/PAGE_ALL', 3, 0, '', NULL, NULL); INSERT INTO `view_page` VALUES (2, '数据字典', '/system/dictionary/page_all', '/SYSTEM/DICTIONARY/PAGE_ALL', 2, 0, '', NULL, NULL); INSERT INTO `view_page` VALUES (3, '视图页面管理', '/user/view_page/page_all', '/USER/VIEW_PAGE/PAGE_ALL', 3, 0, '', NULL, NULL); INSERT INTO `view_page` VALUES (4, 'Druid Monitor', '/druid', '/DRUID', 2, 0, '', NULL, NULL); INSERT INTO `view_page` VALUES (5, '用户管理', '/user/page_all', '/USER/PAGE_ALL', 3, 0, '', NULL, NULL); INSERT INTO `view_page` VALUES (6, '角色管理', '/user/role/page_all', '/USER/ROLE/PAGE_ALL', 3, 0, '', NULL, NULL); INSERT INTO `view_page` VALUES (7, '电子邮件管理', '/mail/page_all', '/MAIL/PAGE_ALL', 2, 0, '', NULL, NULL); INSERT INTO `view_page` VALUES (8, '操作日志', '/system/operation_log/page_all', '/SYSTEM/OPERATION_LOG/PAGE_ALL', 2, 0, '', NULL, NULL); INSERT INTO `view_page` VALUES (9, '文件管理', '/system/file/page_all', '/SYSTEM/FILE/PAGE_ALL', 2, 0, '', NULL, NULL); INSERT INTO `view_page` VALUES (10, '部门管理', '/user/department/list_all', '/USER/DEPARTMENT/LIST_ALL', 3, 0, '', NULL, NULL); INSERT INTO `view_page` VALUES (11, '视图菜单管理', '/user/view_menu/page_all', '/USER/VIEW_MENU/PAGE_ALL', 3, 0, '', NULL, NULL); INSERT INTO `view_page` VALUES (12, 'Quartz 任务管理', '/quartz/job/page_all', '/QUARTZ/JOB/PAGE_ALL', 4, 0, '', NULL, NULL); INSERT INTO `view_page` VALUES (13, 'Quartz 任务日志', '/quartz/job_runtime_log/page_all', '/QUARTZ/JOB_RUNTIME_LOG/PAGE_ALL', 4, 0, '', NULL, NULL); INSERT INTO `view_page` VALUES (14, '工作台', '/workbench', '/WORKBENCH', 1, 0, '', NULL, NULL); -- ---------------------------- -- Table structure for view_page_api -- ---------------------------- DROP TABLE IF EXISTS `view_page_api`; CREATE TABLE `view_page_api` ( `id` bigint(20) UNSIGNED NOT NULL AUTO_INCREMENT COMMENT 'id', `view_page_id` bigint(20) UNSIGNED NOT NULL COMMENT '视图页面 id', `api_id` bigint(20) UNSIGNED NOT NULL COMMENT 'API id', PRIMARY KEY (`id`) USING BTREE ) ENGINE = InnoDB AUTO_INCREMENT = 1 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = '视图页面关联 API 表' ROW_FORMAT = Dynamic; -- ---------------------------- -- Table structure for view_page_category -- ---------------------------- DROP TABLE IF EXISTS `view_page_category`; CREATE TABLE `view_page_category` ( `id` bigint(20) UNSIGNED NOT NULL AUTO_INCREMENT COMMENT 'id', `name` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '视图页面分类名称', `parent_id` bigint(20) NULL DEFAULT NULL COMMENT '父级视图页面分类 id', `sort` bigint(20) NULL DEFAULT 0 COMMENT '排序', `remark` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '' COMMENT '备注', `gmt_modified` datetime(0) NULL DEFAULT NULL COMMENT '更新时间', `gmt_created` datetime(0) NULL DEFAULT NULL COMMENT '创建时间', PRIMARY KEY (`id`) USING BTREE ) ENGINE = InnoDB AUTO_INCREMENT = 5 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = '视图页面分类表' ROW_FORMAT = Dynamic; -- ---------------------------- -- Records of view_page_category -- ---------------------------- INSERT INTO `view_page_category` VALUES (1, '系统管理', NULL, 0, '', '2019-08-07 12:55:27', '2019-08-07 12:55:27'); INSERT INTO `view_page_category` VALUES (2, '系统配置', 1, 0, '', '2019-08-07 13:54:02', '2019-08-07 13:54:02'); INSERT INTO `view_page_category` VALUES (3, '用户配置', 1, 0, '', '2019-08-07 14:03:00', '2019-08-07 14:03:00'); INSERT INTO `view_page_category` VALUES (4, 'Quartz 任务', 2, 0, '', '2019-08-07 14:17:54', '2019-08-07 14:17:43'); -- ---------------------------- -- Table structure for view_page_component -- ---------------------------- DROP TABLE IF EXISTS `view_page_component`; CREATE TABLE `view_page_component` ( `id` bigint(20) UNSIGNED NOT NULL AUTO_INCREMENT COMMENT 'id', `view_page_component_type` tinyint(2) NOT NULL COMMENT '视图页面组件类型 id', `name` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '视图页面组件名称', `authority` varchar(191) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '权限(authority)', `view_page_id` bigint(20) UNSIGNED NOT NULL COMMENT '视图页面 id', `sort` bigint(20) NULL DEFAULT 0 COMMENT '排序', `remark` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '' COMMENT '备注', `gmt_modified` datetime(0) NULL DEFAULT NULL COMMENT '更新时间', `gmt_created` datetime(0) NULL DEFAULT NULL COMMENT '创建时间', PRIMARY KEY (`id`) USING BTREE, UNIQUE INDEX `uk_authority`(`authority`) USING BTREE ) ENGINE = InnoDB AUTO_INCREMENT = 76 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = '视图页面组件表' ROW_FORMAT = Dynamic; -- ---------------------------- -- Records of view_page_component -- ---------------------------- INSERT INTO `view_page_component` VALUES (1, 1, '新增发送邮件', '/COMPONENT/MAIL/SEND_ONE', 7, 0, '', NULL, NULL); INSERT INTO `view_page_component` VALUES (2, 1, '删除', '/COMPONENT/MAIL/DELETE_ALL', 7, 0, '', NULL, NULL); INSERT INTO `view_page_component` VALUES (3, 1, '删除', '/COMPONENT/MAIL/REFRESH', 7, 0, '', NULL, NULL); INSERT INTO `view_page_component` VALUES (4, 1, '新增', '/COMPONENT/QUARTZ/JOB/ADD_ONE', 12, 0, '', NULL, NULL); INSERT INTO `view_page_component` VALUES (5, 1, '编辑', '/COMPONENT/QUARTZ/JOB/EDIT_ONE', 12, 0, '', NULL, NULL); INSERT INTO `view_page_component` VALUES (6, 1, '删除', '/COMPONENT/QUARTZ/JOB/DELETE_ALL', 12, 0, '', NULL, NULL); INSERT INTO `view_page_component` VALUES (7, 1, '暂停', '/COMPONENT/QUARTZ/JOB/PAUSE_ALL', 12, 0, '', NULL, NULL); INSERT INTO `view_page_component` VALUES (8, 1, '恢复', '/COMPONENT/QUARTZ/JOB/RESUME_ALL', 12, 0, '', NULL, NULL); INSERT INTO `view_page_component` VALUES (9, 1, '刷新', '/COMPONENT/QUARTZ/JOB/REFRESH', 12, 0, '', NULL, NULL); INSERT INTO `view_page_component` VALUES (10, 1, '清空', '/COMPONENT/QUARTZ/JOB_RUNTIME_LOG/CLEAR_ALL', 13, 0, '', NULL, NULL); INSERT INTO `view_page_component` VALUES (11, 1, '新增', '/COMPONENT/SYSTEM/DICTIONARY/DICTIONARY_CATEGORY_ADD_ONE', 2, 0, '', NULL, NULL); INSERT INTO `view_page_component` VALUES (12, 1, '编辑', '/COMPONENT/SYSTEM/DICTIONARY/DICTIONARY_CATEGORY_EDIT_ONE', 2, 0, '', NULL, NULL); INSERT INTO `view_page_component` VALUES (13, 1, '删除', '/COMPONENT/SYSTEM/DICTIONARY/DICTIONARY_CATEGORY_DELETE_ALL', 2, 0, '', NULL, NULL); INSERT INTO `view_page_component` VALUES (14, 1, '新增', '/COMPONENT/SYSTEM/DICTIONARY/DICTIONARY_ADD_ONE', 2, 0, '', NULL, NULL); INSERT INTO `view_page_component` VALUES (15, 1, '编辑', '/COMPONENT/SYSTEM/DICTIONARY/DICTIONARY_EDIT_ONE', 2, 0, '', NULL, NULL); INSERT INTO `view_page_component` VALUES (16, 1, '删除', '/COMPONENT/SYSTEM/DICTIONARY/DICTIONARY_DELETE_ALL', 2, 0, '', NULL, NULL); INSERT INTO `view_page_component` VALUES (17, 1, '同步到内存', '/COMPONENT/SYSTEM/DICTIONARY/DICTIONARY_SYNC_TO_MEMORY', 2, 0, '', NULL, NULL); INSERT INTO `view_page_component` VALUES (18, 1, '单文件上传', '/COMPONENT/SYSTEM/FILE/UPLOAD_ONE', 9, 0, '', NULL, NULL); INSERT INTO `view_page_component` VALUES (19, 1, '编辑', '/COMPONENT/SYSTEM/FILE/EDIT_ONE', 9, 0, '', NULL, NULL); INSERT INTO `view_page_component` VALUES (20, 1, '删除', '/COMPONENT/SYSTEM/FILE/DELETE_ALL', 9, 0, '', NULL, NULL); INSERT INTO `view_page_component` VALUES (21, 1, '清空', '/COMPONENT/SYSTEM/OPERATION_LOG/CLEAR_ALL', 8, 0, '', NULL, NULL); INSERT INTO `view_page_component` VALUES (22, 1, '新增', '/COMPONENT/USER/ADD_ONE', 5, 0, '', NULL, NULL); INSERT INTO `view_page_component` VALUES (23, 1, '编辑', '/COMPONENT/USER/EDIT_ONE', 5, 0, '', NULL, NULL); INSERT INTO `view_page_component` VALUES (24, 1, '删除', '/COMPONENT/USER/FAKE_DELETE_ALL', 5, 0, '', NULL, NULL); INSERT INTO `view_page_component` VALUES (25, 1, '撤销删除', '/COMPONENT/USER/REVOKE_FAKE_DELETE_ALL', 5, 0, '', NULL, NULL); INSERT INTO `view_page_component` VALUES (26, 1, '永久删除', '/COMPONENT/USER/DELETE_ALL', 5, 0, '', NULL, NULL); INSERT INTO `view_page_component` VALUES (27, 1, '角色分配', '/COMPONENT/USER/USER_ROLE_PAGE_ALL', 5, 0, '', NULL, NULL); INSERT INTO `view_page_component` VALUES (28, 1, '新增', '/COMPONENT/USER/API/API_CATEGORY_ADD_ONE', 1, 0, '', NULL, NULL); INSERT INTO `view_page_component` VALUES (29, 1, '编辑', '/COMPONENT/USER/API/API_CATEGORY_EDIT_ONE', 1, 0, '', NULL, NULL); INSERT INTO `view_page_component` VALUES (30, 1, '删除', '/COMPONENT/USER/API/API_CATEGORY_DELETE_ALL', 1, 0, '', NULL, NULL); INSERT INTO `view_page_component` VALUES (31, 1, '新增', '/COMPONENT/USER/API/API_ADD_ONE', 1, 0, '', NULL, NULL); INSERT INTO `view_page_component` VALUES (32, 1, '编辑', '/COMPONENT/USER/API/API_EDIT_ONE', 1, 0, '', NULL, NULL); INSERT INTO `view_page_component` VALUES (33, 1, '删除', '/COMPONENT/USER/API/API_DELETE_ALL', 1, 0, '', NULL, NULL); INSERT INTO `view_page_component` VALUES (34, 1, '新增', '/COMPONENT/USER/DEPARTMENT/ADD_ONE', 10, 0, '', NULL, NULL); INSERT INTO `view_page_component` VALUES (35, 1, '编辑', '/COMPONENT/USER/DEPARTMENT/EDIT_ONE', 10, 0, '', NULL, NULL); INSERT INTO `view_page_component` VALUES (36, 1, '删除', '/COMPONENT/USER/DEPARTMENT/DELETE_ALL', 10, 0, '', NULL, NULL); INSERT INTO `view_page_component` VALUES (37, 1, '新增', '/COMPONENT/USER/ROLE/ADD_ONE', 6, 0, '', NULL, NULL); INSERT INTO `view_page_component` VALUES (38, 1, '编辑', '/COMPONENT/USER/ROLE/EDIT_ONE', 6, 0, '', NULL, NULL); INSERT INTO `view_page_component` VALUES (39, 1, '删除', '/COMPONENT/USER/ROLE/DELETE_ALL', 6, 0, '', NULL, NULL); INSERT INTO `view_page_component` VALUES (40, 1, '视图菜单管理', '/COMPONENT/USER/ROLE/VIEW_MENU_PAGE_ALL', 6, 0, '', NULL, NULL); INSERT INTO `view_page_component` VALUES (41, 1, '视图页面管理', '/COMPONENT/USER/ROLE/VIEW_PAGE_PAGE_ALL', 6, 0, '', NULL, NULL); INSERT INTO `view_page_component` VALUES (42, 1, 'API 管理', '/COMPONENT/USER/ROLE/API_PAGE_ALL', 6, 0, '', NULL, NULL); INSERT INTO `view_page_component` VALUES (43, 1, '授权', '/COMPONENT/USER/ROLE/API/API_GRANT_ALL', 6, 0, '', NULL, NULL); INSERT INTO `view_page_component` VALUES (44, 1, '撤销授权', '/COMPONENT/USER/ROLE/API/API_REVOKE_ALL', 6, 0, '', NULL, NULL); INSERT INTO `view_page_component` VALUES (45, 1, '授权', '/COMPONENT/USER/ROLE/VIEW_MENU/VIEW_MENU_CATEGORY_GRANT_ALL', 6, 0, '', NULL, NULL); INSERT INTO `view_page_component` VALUES (46, 1, '撤销授权', '/COMPONENT/USER/ROLE/VIEW_MENU/VIEW_MENU_CATEGORY_REVOKE_ALL', 6, 0, '', NULL, NULL); INSERT INTO `view_page_component` VALUES (47, 1, '授权', '/COMPONENT/USER/ROLE/VIEW_MENU/VIEW_MENU_GRANT_ALL', 6, 0, '', NULL, NULL); INSERT INTO `view_page_component` VALUES (48, 1, '撤销授权', '/COMPONENT/USER/ROLE/VIEW_MENU/VIEW_MENU_REVOKE_ALL', 6, 0, '', NULL, NULL); INSERT INTO `view_page_component` VALUES (49, 1, '授权', '/COMPONENT/USER/ROLE/VIEW_PAGE/VIEW_PAGE_GRANT_ALL', 6, 0, '', NULL, NULL); INSERT INTO `view_page_component` VALUES (50, 1, '撤销授权', '/COMPONENT/USER/ROLE/VIEW_PAGE/VIEW_PAGE_REVOKE_ALL', 6, 0, '', NULL, NULL); INSERT INTO `view_page_component` VALUES (51, 1, '授权', '/COMPONENT/USER/ROLE/VIEW_PAGE/VIEW_PAGE_COMPONENT_GRANT_ALL', 6, 0, '', NULL, NULL); INSERT INTO `view_page_component` VALUES (52, 1, '撤销授权', '/COMPONENT/USER/ROLE/VIEW_PAGE/VIEW_PAGE_COMPONENT_REVOKE_ALL', 6, 0, '', NULL, NULL); INSERT INTO `view_page_component` VALUES (53, 1, '授权', '/COMPONENT/USER/USER_ROLE/GRANT_ALL', 5, 0, '', NULL, NULL); INSERT INTO `view_page_component` VALUES (54, 1, '撤销授权', '/COMPONENT/USER/USER_ROLE/REVOKE_ALL', 5, 0, '', NULL, NULL); INSERT INTO `view_page_component` VALUES (55, 1, '新增', '/COMPONENT/USER/VIEW_MENU/VIEW_MENU_CATEGORY_ADD_ONE', 11, 0, '', NULL, NULL); INSERT INTO `view_page_component` VALUES (56, 1, '编辑', '/COMPONENT/USER/VIEW_MENU/VIEW_MENU_CATEGORY_EDIT_ONE', 11, 0, '', NULL, NULL); INSERT INTO `view_page_component` VALUES (57, 1, '删除', '/COMPONENT/USER/VIEW_MENU/VIEW_MENU_CATEGORY_DELETE_ALL', 11, 0, '', NULL, NULL); INSERT INTO `view_page_component` VALUES (58, 1, '新增', '/COMPONENT/USER/VIEW_MENU/VIEW_MENU_ADD_ONE', 11, 0, '', NULL, NULL); INSERT INTO `view_page_component` VALUES (59, 1, '编辑', '/COMPONENT/USER/VIEW_MENU/VIEW_MENU_EDIT_ONE', 11, 0, '', NULL, NULL); INSERT INTO `view_page_component` VALUES (60, 1, '删除', '/COMPONENT/USER/VIEW_MENU/VIEW_MENU_DELETE_ALL', 11, 0, '', NULL, NULL); INSERT INTO `view_page_component` VALUES (61, 1, '新增', '/COMPONENT/USER/VIEW_PAGE/VIEW_PAGE_CATEGORY_ADD_ONE', 3, 0, '', NULL, NULL); INSERT INTO `view_page_component` VALUES (62, 1, '编辑', '/COMPONENT/USER/VIEW_PAGE/VIEW_PAGE_CATEGORY_EDIT_ONE', 3, 0, '', NULL, NULL); INSERT INTO `view_page_component` VALUES (63, 1, '删除', '/COMPONENT/USER/VIEW_PAGE/VIEW_PAGE_CATEGORY_DELETE_ALL', 3, 0, '', NULL, NULL); INSERT INTO `view_page_component` VALUES (64, 1, '新增', '/COMPONENT/USER/VIEW_PAGE/VIEW_PAGE_ADD_ONE', 3, 0, '', NULL, NULL); INSERT INTO `view_page_component` VALUES (65, 1, '编辑', '/COMPONENT/USER/VIEW_PAGE/VIEW_PAGE_EDIT_ONE', 3, 0, '', NULL, NULL); INSERT INTO `view_page_component` VALUES (66, 1, '删除', '/COMPONENT/USER/VIEW_PAGE/VIEW_PAGE_DELETE_ALL', 3, 0, '', NULL, NULL); INSERT INTO `view_page_component` VALUES (67, 1, '关联 API', '/COMPONENT/USER/VIEW_PAGE/VIEW_PAGE_API_PAGE_ALL', 3, 0, '', NULL, NULL); INSERT INTO `view_page_component` VALUES (68, 1, '新增', '/COMPONENT/USER/VIEW_PAGE/VIEW_PAGE_COMPONENT_ADD_ONE', 3, 0, '', NULL, NULL); INSERT INTO `view_page_component` VALUES (69, 1, '编辑', '/COMPONENT/USER/VIEW_PAGE/VIEW_PAGE_COMPONENT_EDIT_ONE', 3, 0, '', NULL, NULL); INSERT INTO `view_page_component` VALUES (70, 1, '删除', '/COMPONENT/USER/VIEW_PAGE/VIEW_PAGE_COMPONENT_DELETE_ALL', 3, 0, '', NULL, NULL); INSERT INTO `view_page_component` VALUES (71, 1, '关联 API', '/COMPONENT/USER/VIEW_PAGE/VIEW_PAGE_COMPONENT_API_PAGE_ALL', 3, 0, '', NULL, NULL); INSERT INTO `view_page_component` VALUES (72, 1, '关联', '/COMPONENT/USER/VIEW_PAGE/VIEW_PAGE_API/ASSOCIATE_ALL', 3, 0, '', NULL, NULL); INSERT INTO `view_page_component` VALUES (73, 1, '撤销关联', '/COMPONENT/USER/VIEW_PAGE/VIEW_PAGE_API/REVOKE_ASSOCIATE_ALL', 3, 0, '', NULL, NULL); INSERT INTO `view_page_component` VALUES (74, 1, '关联', '/COMPONENT/USER/VIEW_PAGE/VIEW_PAGE_COMPONENT_API/ASSOCIATE_ALL', 3, 0, '', NULL, NULL); INSERT INTO `view_page_component` VALUES (75, 1, '撤销关联', '/COMPONENT/USER/VIEW_PAGE/VIEW_PAGE_COMPONENT_API/REVOKE_ASSOCIATE_ALL', 3, 0, '', NULL, NULL); -- ---------------------------- -- Table structure for view_page_component_api -- ---------------------------- DROP TABLE IF EXISTS `view_page_component_api`; CREATE TABLE `view_page_component_api` ( `id` bigint(20) UNSIGNED NOT NULL AUTO_INCREMENT COMMENT 'id', `view_page_component_id` bigint(20) UNSIGNED NOT NULL COMMENT '视图页面组件 id', `api_id` bigint(20) UNSIGNED NOT NULL COMMENT 'API id', PRIMARY KEY (`id`) USING BTREE ) ENGINE = InnoDB AUTO_INCREMENT = 1 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = '视图页面组件关联 API 表' ROW_FORMAT = Dynamic; SET FOREIGN_KEY_CHECKS = 1; ================================================ FILE: db/mysql/nimrod/table/api_category_table.sql ================================================ -- API 分类表 DROP TABLE IF EXISTS `api_category`; CREATE TABLE `api_category` ( `id` bigint(20) unsigned AUTO_INCREMENT COMMENT 'id', `name` varchar(255) NOT NULL COMMENT '分类名称', `parent_id` bigint(20) DEFAULT NULL COMMENT '父级分类 id', `sort` bigint(20) unsigned DEFAULT 0 COMMENT '排序', `remark` varchar(255) DEFAULT '' COMMENT '备注', `gmt_modified` datetime ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间', `gmt_created` datetime ON UPDATE CURRENT_TIMESTAMP COMMENT '创建时间', PRIMARY KEY `pk_id`(`id`) ) ENGINE = INNODB DEFAULT CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci AUTO_INCREMENT = 1 ROW_FORMAT = DYNAMIC COMMENT = 'API 分类表'; ================================================ FILE: db/mysql/nimrod/table/api_table.sql ================================================ -- API 表 -- ---------------------------- -- Table structure for api -- ---------------------------- DROP TABLE IF EXISTS `api`; CREATE TABLE `api` ( `id` bigint(20) unsigned NOT NULL AUTO_INCREMENT COMMENT 'id', `name` varchar(255) NOT NULL COMMENT 'API 名称', `url` text COMMENT '请求地址(url)', `authority` varchar(255) NOT NULL COMMENT '权限(authority)', `api_category_id` bigint(20) unsigned NOT NULL COMMENT 'API 分类 id', `sort` bigint(20) unsigned DEFAULT 0 COMMENT '排序', `remark` varchar(255) DEFAULT '' COMMENT '备注', `gmt_modified` datetime DEFAULT CURRENT_TIMESTAMP COMMENT '更新时间', `gmt_created` datetime DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', PRIMARY KEY (`id`) USING BTREE, UNIQUE INDEX `uk_authority`(`authority`) USING BTREE ) ENGINE = INNODB DEFAULT CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci AUTO_INCREMENT = 1 ROW_FORMAT = DYNAMIC COMMENT = 'API 表'; ================================================ FILE: db/mysql/nimrod/table/attachment_table.sql ================================================ -- 附件表 DROP TABLE IF EXISTS `attachment`; CREATE TABLE `attachment` ( `id` bigint(20) unsigned AUTO_INCREMENT COMMENT 'id', `name` varchar(255) NOT NULL COMMENT '文件名', `guid` varchar(255) DEFAULT '' COMMENT '唯一标识符', `size` bigint(20) unsigned DEFAULT 0 COMMENT '文件大小', `pretty_size` varchar(255) NOT NULL COMMENT '文件美化大小', `mime_type` varchar(255) DEFAULT '' COMMENT 'MIME 类型', `path` text COMMENT '文件路径', `remark` varchar(255) DEFAULT '' COMMENT '备注', `gmt_modified` datetime DEFAULT CURRENT_TIMESTAMP COMMENT '更新时间', `gmt_created` datetime DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', PRIMARY KEY `pk_id`(`id`) ) ENGINE = INNODB DEFAULT CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci AUTO_INCREMENT = 1 ROW_FORMAT = DYNAMIC COMMENT = '附件表'; ================================================ FILE: db/mysql/nimrod/table/department_table.sql ================================================ -- 部门表 DROP TABLE IF EXISTS `department`; CREATE TABLE `department` ( `id` bigint(20) unsigned AUTO_INCREMENT COMMENT 'id', `name` varchar(255) NOT NULL COMMENT '部门名称', `parent_id` bigint(20) DEFAULT NULL COMMENT '父级部门 id', `remark` varchar(255) DEFAULT '' COMMENT '备注', `gmt_modified` datetime DEFAULT CURRENT_TIMESTAMP COMMENT '更新时间', `gmt_created` datetime DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', PRIMARY KEY `pk_id` (`id`) ) ENGINE = INNODB DEFAULT CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci AUTO_INCREMENT = 1 ROW_FORMAT = DYNAMIC COMMENT = '部门表'; ================================================ FILE: db/mysql/nimrod/table/dictionary_category_table.sql ================================================ -- 数据字典分类表 DROP TABLE IF EXISTS `dictionary_category`; CREATE TABLE `dictionary_category` ( `id` bigint(20) unsigned AUTO_INCREMENT COMMENT 'id', `name` varchar(255) NOT NULL COMMENT '分类名称', `parent_id` bigint(20) unsigned DEFAULT NULL COMMENT '父级分类 id', `sort` bigint(20) DEFAULT 0 COMMENT '排序', `remark` varchar(255) DEFAULT '' COMMENT '备注', `gmt_modified` datetime DEFAULT CURRENT_TIMESTAMP COMMENT '更新时间', `gmt_created` datetime DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', PRIMARY KEY (`id`) ) ENGINE = INNODB DEFAULT CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci AUTO_INCREMENT = 1 ROW_FORMAT = DYNAMIC COMMENT = '数据字典分类表'; ================================================ FILE: db/mysql/nimrod/table/dictionary_table.sql ================================================ -- 数据字典表 DROP TABLE IF EXISTS `dictionary`; CREATE TABLE `dictionary` ( `id` bigint(20) unsigned AUTO_INCREMENT COMMENT 'id', `key_name` varchar(255) NOT NULL COMMENT '字典键名', `key` varchar(255) NOT NULL COMMENT '字典键', `value_name` varchar(255) NOT NULL COMMENT '字典值名', `value_slug` varchar(255) NOT NULL COMMENT '字典值别名', `value` text COMMENT '字典值', `enabled` tinyint(1) unsigned NOT NULL COMMENT '是否启用(0=否,1=是,默认=0)', `dictionary_category_id` bigint(20) unsigned NOT NULL COMMENT '字典分类 id', `sort` bigint(20) unsigned DEFAULT 0 COMMENT '排序', `remark` varchar(255) DEFAULT '' COMMENT '备注', `gmt_modified` datetime DEFAULT NULL COMMENT '更新时间', `gmt_created` datetime DEFAULT NULL COMMENT '创建时间', PRIMARY KEY (`id`) ) ENGINE = INNODB DEFAULT CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci AUTO_INCREMENT = 1 ROW_FORMAT = DYNAMIC COMMENT = '数据字典表'; ================================================ FILE: db/mysql/nimrod/table/job_runtime_log_table.sql ================================================ -- Quartz 定时任务运行日志 DROP TABLE IF EXISTS `job_runtime_log`; CREATE TABLE `job_runtime_log` ( `id` bigint(20) unsigned AUTO_INCREMENT COMMENT 'id', `job_class_name` varchar(255) DEFAULT '' COMMENT '任务类名', `job_group` varchar(255) NOT NULL COMMENT '任务分组', `description` varchar(255) DEFAULT '' COMMENT '描述', `fire_time` datetime COMMENT 'fireTime', `next_fire_time` datetime COMMENT 'nextFireTime', `job_run_time` bigint(20) COMMENT '任务运行耗时', `log` varchar(255) DEFAULT '' COMMENT '日志', `job_exception` varchar(255) DEFAULT '' COMMENT '任务异常信息', `gmt_created` datetime DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', PRIMARY KEY `pk_id`(`id`) ) ENGINE = INNODB DEFAULT CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci AUTO_INCREMENT = 1 ROW_FORMAT = DYNAMIC COMMENT = 'Quartz 定时任务运行日志'; ================================================ FILE: db/mysql/nimrod/table/mail_attachment_table.sql ================================================ -- 电子邮件文件表 DROP TABLE IF EXISTS `mail_attachment`; CREATE TABLE `mail_attachment` ( `id` bigint(20) unsigned AUTO_INCREMENT COMMENT 'id', `mail_id` bigint(20) NOT NULL COMMENT '电子邮件 id', `attachment_id` bigint(20) NOT NULL COMMENT '文件 id', ) ENGINE = INNODB DEFAULT CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci AUTO_INCREMENT = 1 ROW_FORMAT = DYNAMIC COMMENT = '电子邮件附件表'; ================================================ FILE: db/mysql/nimrod/table/mail_table.sql ================================================ -- 电子邮件表 DROP TABLE IF EXISTS `mail`; CREATE TABLE `mail` ( `id` bigint(20) unsigned AUTO_INCREMENT COMMENT 'id', `status` tinyint(1) NOT NULL COMMENT '发信状态', `from` varchar(255) DEFAULT '' COMMENT '发件人', `to` varchar(255) NOT NULL COMMENT '收件人', `subject` varchar(255) DEFAULT '' COMMENT '主题', `text` text COMMENT '内容', `html` tinyint(1) DEFAULT 0 COMMENT '是否为 html,0=否,1=是', `error` text COMMENT '发信报错信息', `remark` varchar(255) DEFAULT '' COMMENT '备注', `gmt_modified` datetime DEFAULT CURRENT_TIMESTAMP COMMENT '更新时间', `gmt_created` datetime DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', PRIMARY KEY `pk_id`(`id`) ) ENGINE = INNODB DEFAULT CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci AUTO_INCREMENT = 1 ROW_FORMAT = DYNAMIC COMMENT = '电子邮件表'; ================================================ FILE: db/mysql/nimrod/table/operation_log_table.sql ================================================ -- 系统请求日志表 DROP TABLE IF EXISTS `operation_log`; CREATE TABLE `operation_log` ( `id` bigint(20) unsigned AUTO_INCREMENT COMMENT 'id', `user_id` bigint(20) DEFAULT NULL COMMENT '访问用户 id', `ip_address` varchar(255) DEFAULT '' COMMENT '用户 IP', `operation_type` tinyint(1) DEFAULT NULL COMMENT '操作类型', `operation` text COMMENT '操作说明', `request_time` bigint(255) DEFAULT 0 COMMENT '请求耗时(毫秒)', `request_url` text COMMENT '请求地址', `request_method` varchar(50) DEFAULT '' COMMENT '请求方法', `request_parameter` text COMMENT '请求参数', `accept_language` varchar(255) DEFAULT '' COMMENT '请求语言', `referer` text COMMENT '请求来源', `user_agent` varchar(255) DEFAULT '' COMMENT '用户代理', `handler` text COMMENT 'Handler', `session_id` varchar(255) DEFAULT '' COMMENT 'Session ID', `cookie` text COMMENT 'Cookie', `content_type` varchar(255) DEFAULT '' COMMENT '响应文本类型', `status` varchar(255) DEFAULT '' COMMENT '响应状态码', `gmt_created` datetime DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', PRIMARY KEY `pk_id`(`id`) ) ENGINE = INNODB DEFAULT CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci AUTO_INCREMENT = 1 ROW_FORMAT = DYNAMIC COMMENT = '系统操作日志表'; ================================================ FILE: db/mysql/nimrod/table/role_authority_table.sql ================================================ -- 角色关联权限表 DROP TABLE IF EXISTS `role_authority`; CREATE TABLE `role_authority` ( `id` bigint(20) unsigned AUTO_INCREMENT COMMENT 'id', `role_id` bigint(20) unsigned NOT NULL COMMENT '角色 id', `authority` varchar(255) NOT NULL COMMENT '权限(authority)', PRIMARY KEY `pk_id` (`id`) ) ENGINE = INNODB DEFAULT CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci AUTO_INCREMENT = 1 ROW_FORMAT = DYNAMIC COMMENT = '角色关联权限表'; ================================================ FILE: db/mysql/nimrod/table/role_table.sql ================================================ -- 角色表 DROP TABLE IF EXISTS `role`; CREATE TABLE `role` ( `id` bigint(20) unsigned AUTO_INCREMENT COMMENT 'id', `name` varchar(255) NOT NULL COMMENT '角色名称', `value` varchar(255) NOT NULL COMMENT '角色值', `remark` varchar(255) DEFAULT '' COMMENT '备注', `gmt_modified` datetime DEFAULT CURRENT_TIMESTAMP COMMENT '更新时间', `gmt_created` datetime DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', PRIMARY KEY `pk_id`(`id`), UNIQUE KEY `uk_value` (`value`) ) ENGINE = INNODB DEFAULT CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci AUTO_INCREMENT = 1 ROW_FORMAT = DYNAMIC COMMENT = '角色表'; ================================================ FILE: db/mysql/nimrod/table/user_password_reset_table.sql ================================================ -- 用户密码重置表 DROP TABLE IF EXISTS `user_password_reset`; CREATE TABLE `user_password_reset` ( `id` bigint(20) unsigned AUTO_INCREMENT COMMENT 'id', `user_id` bigint(20) unsigned NOT NULL COMMENT '用户 id', `verify_from` varchar(255) NOT NULL COMMENT '用户绑定的电子邮箱或手机号码', `verify_code` varchar(255) NOT NULL COMMENT '电子邮箱或手机号码验证码', `gmt_expires` datetime NOT NULL COMMENT '过期时间', `gmt_created` datetime DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', PRIMARY KEY (`id`), UNIQUE KEY `uk_user_id` (`user_id`), UNIQUE KEY `uk_verify_from` (`verify_from`), UNIQUE KEY `uk_verify_code` (`verify_code`) ) ENGINE = INNODB DEFAULT CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci AUTO_INCREMENT = 1 ROW_FORMAT = DYNAMIC COMMENT = '用户密码重置表'; ================================================ FILE: db/mysql/nimrod/table/user_role_table.sql ================================================ -- 用户关联角色表 DROP TABLE IF EXISTS `user_role`; CREATE TABLE `user_role` ( `id` bigint(20) unsigned AUTO_INCREMENT COMMENT 'id', `user_id` bigint(20) unsigned NOT NULL COMMENT '用户 id', `role_id` bigint(20) unsigned NOT NULL COMMENT '角色 id', PRIMARY KEY `pk_id` (`id`) ) ENGINE = INNODB DEFAULT CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci AUTO_INCREMENT = 1 ROW_FORMAT = DYNAMIC COMMENT = '用户关联角色表'; ================================================ FILE: db/mysql/nimrod/table/user_table.sql ================================================ -- 用户表 DROP TABLE IF EXISTS `user`; -- 123456 -- $2a$10$tYdoCZPLiG2bMX9Cn09JCOV.g0BZeblQ39Rq0HL.jJy5OtCnUMOmC CREATE TABLE `user` ( `id` bigint(20) unsigned AUTO_INCREMENT COMMENT 'id', `password` varchar(255) NOT NULL COMMENT '用户密码', `username` varchar(255) NOT NULL COMMENT '用户名', `email` varchar(255) DEFAULT '' COMMENT '电子邮箱', `email_is_verified` tinyint(1) unsigned COMMENT '电子邮箱是否验证通过(0=未验证,1=已验证)', `department_id` bigint(20) unsigned NOT NULL COMMENT '部门 id', `enabled` tinyint(20) unsigned NULL COMMENT '是否启用(0=否,1=是,默认=0)', `remark` varchar(255) DEFAULT '' COMMENT '备注', `gmt_deleted` datetime DEFAULT NULL COMMENT '删除时间', `gmt_modified` datetime DEFAULT CURRENT_TIMESTAMP COMMENT '更新时间', `gmt_created` datetime DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', PRIMARY KEY `pk_id` (`id`), UNIQUE KEY `uk_username` (`username`) ) ENGINE = INNODB DEFAULT CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci AUTO_INCREMENT = 1 ROW_FORMAT = DYNAMIC COMMENT = '用户表'; ================================================ FILE: db/mysql/nimrod/table/view_menu_category_table.sql ================================================ -- 视图菜单分类表 DROP TABLE IF EXISTS `view_menu_category`; CREATE TABLE `view_menu_category` ( `id` bigint(20) unsigned AUTO_INCREMENT COMMENT 'id', `name` varchar(255) NOT NULL COMMENT '分类名称', `icon` varchar(255) DEFAULT '' COMMENT '图标(icon)', `parent_id` bigint(20) DEFAULT NULL COMMENT '父级分类 id', `role_id` bigint(20) unsigned NOT NULL COMMENT '角色 id', `sort` bigint(20) DEFAULT 0 COMMENT '排序', `remark` varchar(255) DEFAULT '' COMMENT '备注', `gmt_modified` datetime DEFAULT CURRENT_TIMESTAMP COMMENT '更新时间', `gmt_created` datetime DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', PRIMARY KEY `pk_id`(`id`) ) ENGINE = INNODB DEFAULT CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci AUTO_INCREMENT = 1 ROW_FORMAT = DYNAMIC COMMENT = '视图菜单分类表'; ================================================ FILE: db/mysql/nimrod/table/view_menu_table.sql ================================================ -- 视图菜单表 DROP TABLE IF EXISTS `view_menu`; CREATE TABLE `view_menu` ( `id` bigint(20) unsigned AUTO_INCREMENT COMMENT 'id', `name` varchar(255) NOT NULL COMMENT '菜单名称', `icon` varchar(255) DEFAULT '' COMMENT '图标(icon)', `url` text COMMENT '请求地址(url)', `menu_category_id` bigint(20) unsigned NOT NULL COMMENT '菜单分类 id', `role_id` bigint(20) unsigned NOT NULL COMMENT '角色 id', `sort` bigint(20) DEFAULT 0 COMMENT '排序', `remark` varchar(255) DEFAULT '' COMMENT '备注', `gmt_modified` datetime DEFAULT CURRENT_TIMESTAMP COMMENT '更新时间', `gmt_created` datetime DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', PRIMARY KEY `pk_id`(`id`) ) ENGINE = INNODB DEFAULT CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci AUTO_INCREMENT = 1 ROW_FORMAT = DYNAMIC COMMENT = '视图菜单表'; ================================================ FILE: db/mysql/nimrod/table/view_page_api_table.sql ================================================ -- 视图页面关联 API 表 DROP TABLE IF EXISTS `view_page_api`; CREATE TABLE `view_page_api` ( `id` bigint(20) unsigned AUTO_INCREMENT COMMENT 'id', `page_id` bigint(20) unsigned NOT NULL COMMENT '视图页面 id', `api_id` bigint(20) unsigned NOT NULL COMMENT 'API id', PRIMARY KEY `pk_id`(`id`) ) ENGINE = INNODB DEFAULT CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci AUTO_INCREMENT = 1 ROW_FORMAT = DYNAMIC COMMENT = '视图页面关联 API 表'; ================================================ FILE: db/mysql/nimrod/table/view_page_category_table.sql ================================================ -- 视图页面分类表 DROP TABLE IF EXISTS `view_page_category`; CREATE TABLE `view_page_category` ( `id` bigint(20) unsigned AUTO_INCREMENT COMMENT 'id', `name` varchar(255) NOT NULL COMMENT '分类名称', `parent_id` bigint(20) DEFAULT NULL COMMENT '父级分类 id', `sort` bigint(20) DEFAULT 0 COMMENT '排序', `remark` varchar(255) DEFAULT '' COMMENT '备注', `gmt_modified` datetime DEFAULT CURRENT_TIMESTAMP COMMENT '更新时间', `gmt_created` datetime DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', PRIMARY KEY `pk_id`(`id`) ) ENGINE = INNODB DEFAULT CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci AUTO_INCREMENT = 1 ROW_FORMAT = DYNAMIC COMMENT = '视图页面分类表'; ================================================ FILE: db/mysql/nimrod/table/view_page_component_api_table.sql ================================================ -- 视图页面组件关联 API 表 DROP TABLE IF EXISTS `view_page_component_api`; CREATE TABLE `view_page_component_api` ( `id` bigint(20) unsigned AUTO_INCREMENT COMMENT 'id', `page_component_id` bigint(20) unsigned NOT NULL COMMENT '视图页面组件 id', `api_id` bigint(20) unsigned NOT NULL COMMENT 'API id', PRIMARY KEY `pk_id`(`id`) ) ENGINE = INNODB DEFAULT CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci AUTO_INCREMENT = 1 ROW_FORMAT = DYNAMIC COMMENT = '视图页面组件关联 API 表'; ================================================ FILE: db/mysql/nimrod/table/view_page_component_table.sql ================================================ -- 视图页面组件表 DROP TABLE IF EXISTS `view_page_component`; CREATE TABLE `view_page_component` ( `id` bigint(20) unsigned AUTO_INCREMENT COMMENT 'id', `page_component_type` tinyint(2) NOT NULL COMMENT '组件类型 id', `name` varchar(255) NOT NULL COMMENT '组件名称', `authority` varchar(255) NOT NULL COMMENT '权限(authority)', `page_id` bigint(20) unsigned NOT NULL COMMENT '视图页面 id', `sort` bigint(20) DEFAULT 0 COMMENT '排序', `remark` varchar(255) DEFAULT '' COMMENT '备注', `gmt_modified` datetime DEFAULT CURRENT_TIMESTAMP COMMENT '更新时间', `gmt_created` datetime DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', PRIMARY KEY `pk_id`(`id`), UNIQUE KEY `uk_authority` (`authority`) ) ENGINE = INNODB DEFAULT CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci AUTO_INCREMENT = 1 ROW_FORMAT = DYNAMIC COMMENT = '视图页面组件表'; ================================================ FILE: db/mysql/nimrod/table/view_page_table.sql ================================================ -- 视图页面表 DROP TABLE IF EXISTS `view_page`; CREATE TABLE `view_page` ( `id` bigint(20) unsigned AUTO_INCREMENT COMMENT 'id', `name` varchar(255) NOT NULL COMMENT '页面名称', `url` text COMMENT '请求地址(url)', `authority` varchar(255) NOT NULL COMMENT '权限(authority)', `page_category_id` bigint(20) unsigned NOT NULL COMMENT '页面分类 id', `sort` bigint(20) DEFAULT 0 COMMENT '排序', `remark` varchar(255) DEFAULT '' COMMENT '备注', `gmt_modified` datetime DEFAULT CURRENT_TIMESTAMP COMMENT '更新时间', `gmt_created` datetime DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', PRIMARY KEY `pk_id`(`id`), UNIQUE KEY `uk_authority` (`authority`) ) ENGINE = INNODB DEFAULT CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci AUTO_INCREMENT = 1 ROW_FORMAT = DYNAMIC COMMENT = '视图页面表'; ================================================ FILE: db/mysql/nimrod/util.sql ================================================ -- 修改MySQL时区 set global time_zone = '+08:00'; -- 修改mysql全局时区为北京时间,即我们所在的东8区 set time_zone = '+08:00'; -- 修改当前会话时区 flush privileges; -- 立即生效 ================================================ FILE: db/mysql/quartz/tables_mysql_innodb.sql ================================================ # # In your Quartz properties file, you'll need to set # org.quartz.jobStore.driverDelegateClass = org.quartz.impl.jdbcjobstore.StdJDBCDelegate # # # By: Ron Cordell - roncordell # I didn't see this anywhere, so I thought I'd post it here. This is the script from Quartz to create the tables in a MySQL database, modified to use INNODB instead of MYISAM. DROP TABLE IF EXISTS QRTZ_FIRED_TRIGGERS; DROP TABLE IF EXISTS QRTZ_PAUSED_TRIGGER_GRPS; DROP TABLE IF EXISTS QRTZ_SCHEDULER_STATE; DROP TABLE IF EXISTS QRTZ_LOCKS; DROP TABLE IF EXISTS QRTZ_SIMPLE_TRIGGERS; DROP TABLE IF EXISTS QRTZ_SIMPROP_TRIGGERS; DROP TABLE IF EXISTS QRTZ_CRON_TRIGGERS; DROP TABLE IF EXISTS QRTZ_BLOB_TRIGGERS; DROP TABLE IF EXISTS QRTZ_TRIGGERS; DROP TABLE IF EXISTS QRTZ_JOB_DETAILS; DROP TABLE IF EXISTS QRTZ_CALENDARS; CREATE TABLE QRTZ_JOB_DETAILS( SCHED_NAME VARCHAR(120) NOT NULL, JOB_NAME VARCHAR(190) NOT NULL, JOB_GROUP VARCHAR(190) NOT NULL, DESCRIPTION VARCHAR(250) 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 NULL, PRIMARY KEY (SCHED_NAME,JOB_NAME,JOB_GROUP)) ENGINE=InnoDB; CREATE TABLE QRTZ_TRIGGERS ( SCHED_NAME VARCHAR(120) NOT NULL, TRIGGER_NAME VARCHAR(190) NOT NULL, TRIGGER_GROUP VARCHAR(190) NOT NULL, JOB_NAME VARCHAR(190) NOT NULL, JOB_GROUP VARCHAR(190) NOT NULL, DESCRIPTION VARCHAR(250) NULL, NEXT_FIRE_TIME BIGINT(13) NULL, PREV_FIRE_TIME BIGINT(13) NULL, PRIORITY INTEGER NULL, TRIGGER_STATE VARCHAR(16) NOT NULL, TRIGGER_TYPE VARCHAR(8) NOT NULL, START_TIME BIGINT(13) NOT NULL, END_TIME BIGINT(13) NULL, CALENDAR_NAME VARCHAR(190) NULL, MISFIRE_INSTR SMALLINT(2) NULL, JOB_DATA BLOB NULL, PRIMARY KEY (SCHED_NAME,TRIGGER_NAME,TRIGGER_GROUP), FOREIGN KEY (SCHED_NAME,JOB_NAME,JOB_GROUP) REFERENCES QRTZ_JOB_DETAILS(SCHED_NAME,JOB_NAME,JOB_GROUP)) ENGINE=InnoDB; CREATE TABLE QRTZ_SIMPLE_TRIGGERS ( SCHED_NAME VARCHAR(120) NOT NULL, TRIGGER_NAME VARCHAR(190) NOT NULL, TRIGGER_GROUP VARCHAR(190) 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), FOREIGN KEY (SCHED_NAME,TRIGGER_NAME,TRIGGER_GROUP) REFERENCES QRTZ_TRIGGERS(SCHED_NAME,TRIGGER_NAME,TRIGGER_GROUP)) ENGINE=InnoDB; CREATE TABLE QRTZ_CRON_TRIGGERS ( SCHED_NAME VARCHAR(120) NOT NULL, TRIGGER_NAME VARCHAR(190) NOT NULL, TRIGGER_GROUP VARCHAR(190) NOT NULL, CRON_EXPRESSION VARCHAR(120) NOT NULL, TIME_ZONE_ID VARCHAR(80), PRIMARY KEY (SCHED_NAME,TRIGGER_NAME,TRIGGER_GROUP), FOREIGN KEY (SCHED_NAME,TRIGGER_NAME,TRIGGER_GROUP) REFERENCES QRTZ_TRIGGERS(SCHED_NAME,TRIGGER_NAME,TRIGGER_GROUP)) ENGINE=InnoDB; CREATE TABLE QRTZ_SIMPROP_TRIGGERS ( SCHED_NAME VARCHAR(120) NOT NULL, TRIGGER_NAME VARCHAR(190) NOT NULL, TRIGGER_GROUP VARCHAR(190) NOT NULL, STR_PROP_1 VARCHAR(512) NULL, STR_PROP_2 VARCHAR(512) NULL, STR_PROP_3 VARCHAR(512) NULL, INT_PROP_1 INT NULL, INT_PROP_2 INT NULL, LONG_PROP_1 BIGINT NULL, LONG_PROP_2 BIGINT NULL, DEC_PROP_1 NUMERIC(13,4) NULL, DEC_PROP_2 NUMERIC(13,4) NULL, BOOL_PROP_1 VARCHAR(1) NULL, BOOL_PROP_2 VARCHAR(1) NULL, PRIMARY KEY (SCHED_NAME,TRIGGER_NAME,TRIGGER_GROUP), FOREIGN KEY (SCHED_NAME,TRIGGER_NAME,TRIGGER_GROUP) REFERENCES QRTZ_TRIGGERS(SCHED_NAME,TRIGGER_NAME,TRIGGER_GROUP)) ENGINE=InnoDB; CREATE TABLE QRTZ_BLOB_TRIGGERS ( SCHED_NAME VARCHAR(120) NOT NULL, TRIGGER_NAME VARCHAR(190) NOT NULL, TRIGGER_GROUP VARCHAR(190) NOT NULL, BLOB_DATA BLOB NULL, PRIMARY KEY (SCHED_NAME,TRIGGER_NAME,TRIGGER_GROUP), INDEX (SCHED_NAME,TRIGGER_NAME, TRIGGER_GROUP), FOREIGN KEY (SCHED_NAME,TRIGGER_NAME,TRIGGER_GROUP) REFERENCES QRTZ_TRIGGERS(SCHED_NAME,TRIGGER_NAME,TRIGGER_GROUP)) ENGINE=InnoDB; CREATE TABLE QRTZ_CALENDARS ( SCHED_NAME VARCHAR(120) NOT NULL, CALENDAR_NAME VARCHAR(190) NOT NULL, CALENDAR BLOB NOT NULL, PRIMARY KEY (SCHED_NAME,CALENDAR_NAME)) ENGINE=InnoDB; CREATE TABLE QRTZ_PAUSED_TRIGGER_GRPS ( SCHED_NAME VARCHAR(120) NOT NULL, TRIGGER_GROUP VARCHAR(190) NOT NULL, PRIMARY KEY (SCHED_NAME,TRIGGER_GROUP)) ENGINE=InnoDB; CREATE TABLE QRTZ_FIRED_TRIGGERS ( SCHED_NAME VARCHAR(120) NOT NULL, ENTRY_ID VARCHAR(95) NOT NULL, TRIGGER_NAME VARCHAR(190) NOT NULL, TRIGGER_GROUP VARCHAR(190) NOT NULL, INSTANCE_NAME VARCHAR(190) NOT NULL, FIRED_TIME BIGINT(13) NOT NULL, SCHED_TIME BIGINT(13) NOT NULL, PRIORITY INTEGER NOT NULL, STATE VARCHAR(16) NOT NULL, JOB_NAME VARCHAR(190) NULL, JOB_GROUP VARCHAR(190) NULL, IS_NONCONCURRENT VARCHAR(1) NULL, REQUESTS_RECOVERY VARCHAR(1) NULL, PRIMARY KEY (SCHED_NAME,ENTRY_ID)) ENGINE=InnoDB; CREATE TABLE QRTZ_SCHEDULER_STATE ( SCHED_NAME VARCHAR(120) NOT NULL, INSTANCE_NAME VARCHAR(190) NOT NULL, LAST_CHECKIN_TIME BIGINT(13) NOT NULL, CHECKIN_INTERVAL BIGINT(13) NOT NULL, PRIMARY KEY (SCHED_NAME,INSTANCE_NAME)) ENGINE=InnoDB; CREATE TABLE QRTZ_LOCKS ( SCHED_NAME VARCHAR(120) NOT NULL, LOCK_NAME VARCHAR(40) NOT NULL, PRIMARY KEY (SCHED_NAME,LOCK_NAME)) ENGINE=InnoDB; CREATE INDEX IDX_QRTZ_J_REQ_RECOVERY ON QRTZ_JOB_DETAILS(SCHED_NAME,REQUESTS_RECOVERY); CREATE INDEX IDX_QRTZ_J_GRP ON QRTZ_JOB_DETAILS(SCHED_NAME,JOB_GROUP); CREATE INDEX IDX_QRTZ_T_J ON QRTZ_TRIGGERS(SCHED_NAME,JOB_NAME,JOB_GROUP); CREATE INDEX IDX_QRTZ_T_JG ON QRTZ_TRIGGERS(SCHED_NAME,JOB_GROUP); CREATE INDEX IDX_QRTZ_T_C ON QRTZ_TRIGGERS(SCHED_NAME,CALENDAR_NAME); CREATE INDEX IDX_QRTZ_T_G ON QRTZ_TRIGGERS(SCHED_NAME,TRIGGER_GROUP); CREATE INDEX IDX_QRTZ_T_STATE ON QRTZ_TRIGGERS(SCHED_NAME,TRIGGER_STATE); CREATE INDEX IDX_QRTZ_T_N_STATE ON QRTZ_TRIGGERS(SCHED_NAME,TRIGGER_NAME,TRIGGER_GROUP,TRIGGER_STATE); CREATE INDEX IDX_QRTZ_T_N_G_STATE ON QRTZ_TRIGGERS(SCHED_NAME,TRIGGER_GROUP,TRIGGER_STATE); CREATE INDEX IDX_QRTZ_T_NEXT_FIRE_TIME ON QRTZ_TRIGGERS(SCHED_NAME,NEXT_FIRE_TIME); CREATE INDEX IDX_QRTZ_T_NFT_ST ON QRTZ_TRIGGERS(SCHED_NAME,TRIGGER_STATE,NEXT_FIRE_TIME); CREATE INDEX IDX_QRTZ_T_NFT_MISFIRE ON QRTZ_TRIGGERS(SCHED_NAME,MISFIRE_INSTR,NEXT_FIRE_TIME); CREATE INDEX IDX_QRTZ_T_NFT_ST_MISFIRE ON QRTZ_TRIGGERS(SCHED_NAME,MISFIRE_INSTR,NEXT_FIRE_TIME,TRIGGER_STATE); CREATE INDEX IDX_QRTZ_T_NFT_ST_MISFIRE_GRP ON QRTZ_TRIGGERS(SCHED_NAME,MISFIRE_INSTR,NEXT_FIRE_TIME,TRIGGER_GROUP,TRIGGER_STATE); CREATE INDEX IDX_QRTZ_FT_TRIG_INST_NAME ON QRTZ_FIRED_TRIGGERS(SCHED_NAME,INSTANCE_NAME); CREATE INDEX IDX_QRTZ_FT_INST_JOB_REQ_RCVRY ON QRTZ_FIRED_TRIGGERS(SCHED_NAME,INSTANCE_NAME,REQUESTS_RECOVERY); CREATE INDEX IDX_QRTZ_FT_J_G ON QRTZ_FIRED_TRIGGERS(SCHED_NAME,JOB_NAME,JOB_GROUP); CREATE INDEX IDX_QRTZ_FT_JG ON QRTZ_FIRED_TRIGGERS(SCHED_NAME,JOB_GROUP); CREATE INDEX IDX_QRTZ_FT_T_G ON QRTZ_FIRED_TRIGGERS(SCHED_NAME,TRIGGER_NAME,TRIGGER_GROUP); CREATE INDEX IDX_QRTZ_FT_TG ON QRTZ_FIRED_TRIGGERS(SCHED_NAME,TRIGGER_GROUP); commit; ================================================ FILE: db/oracle/install_oracle_11g_r2.sh ================================================ #!/usr/bin/env bash # CentOS 7 自动化安装 oracle 11g r2 # 安装一些必要的软件 # wget 下载用的 # unzip 解压oracle安装文件 # net-tools 查看本机网络情况 比如netstat yum install wget unzip net-tools -y # 使用oracle提供的环境配置工具 # 这个工具会调整内核参数,建立一些必要的linux用户&组 # 可能网络不好会安装不成功,多install一下 wget http://public-yum.oracle.com/public-yum-ol7.repo -O /etc/yum.repos.d/public-yum-ol7.repo wget http://public-yum.oracle.com/RPM-GPG-KEY-oracle-ol7 -O /etc/pki/rpm-gpg/RPM-GPG-KEY-oracle yum install oracle-rdbms-server-11gR2-preinstall -y # 完成后备份一下这个目录的文件到其他目录 # 这个文件夹是修改系统后日志和原本的内核配置备份 # /var/log/oracle-rdbms-server-11gR2-preinstall # 加载内核参数 和sysctl -p一样 sysctl -f # 创建一些目录和配置 # 配置oracle系统配置文件&授权 cat >> /etc/oraInst.loc <> /home/oracle/.bash_profile <y 所以启动服务也会同时启动实例 # N的情况不会同时启动实例 sqlplus登录会提示 an idle instance # 用sqlplus 然后---> startup启动实例 # 重启系统后用这个命令启动 dbstart $ORACLE_HOME # 关闭 dbshut $ORACLE_HOME # 远程连接oracle sqlplus sys/oracle@192.168.100.131:1521/ORCL.LAN as sysdba conn sys/oracle@192.168.100.131:1521/ORCL.LAN as sysdba ORCL.LAN是服务名 不是sid ================================================ FILE: db/oracle/quartz/tables_oracle.sql ================================================ -- -- A hint submitted by a user: Oracle DB MUST be created as "shared" and the -- job_queue_processes parameter must be greater than 2 -- However, these settings are pretty much standard after any -- Oracle install, so most users need not worry about this. -- -- Many other users (including the primary author of Quartz) have had success -- runing in dedicated mode, so only consider the above as a hint ;-) -- delete from qrtz_fired_triggers; delete from qrtz_simple_triggers; delete from qrtz_simprop_triggers; delete from qrtz_cron_triggers; delete from qrtz_blob_triggers; delete from qrtz_triggers; delete from qrtz_job_details; delete from qrtz_calendars; delete from qrtz_paused_trigger_grps; delete from qrtz_locks; delete from qrtz_scheduler_state; drop table qrtz_calendars; drop table qrtz_fired_triggers; drop table qrtz_blob_triggers; drop table qrtz_cron_triggers; drop table qrtz_simple_triggers; drop table qrtz_simprop_triggers; drop table qrtz_triggers; drop table qrtz_job_details; drop table qrtz_paused_trigger_grps; drop table qrtz_locks; drop table qrtz_scheduler_state; CREATE TABLE qrtz_job_details ( SCHED_NAME VARCHAR2(120) NOT NULL, JOB_NAME VARCHAR2(200) NOT NULL, JOB_GROUP VARCHAR2(200) NOT NULL, DESCRIPTION VARCHAR2(250) NULL, JOB_CLASS_NAME VARCHAR2(250) NOT NULL, IS_DURABLE VARCHAR2(1) NOT NULL, IS_NONCONCURRENT VARCHAR2(1) NOT NULL, IS_UPDATE_DATA VARCHAR2(1) NOT NULL, REQUESTS_RECOVERY VARCHAR2(1) NOT NULL, JOB_DATA BLOB NULL, CONSTRAINT QRTZ_JOB_DETAILS_PK PRIMARY KEY (SCHED_NAME,JOB_NAME,JOB_GROUP) ); CREATE TABLE qrtz_triggers ( SCHED_NAME VARCHAR2(120) NOT NULL, TRIGGER_NAME VARCHAR2(200) NOT NULL, TRIGGER_GROUP VARCHAR2(200) NOT NULL, JOB_NAME VARCHAR2(200) NOT NULL, JOB_GROUP VARCHAR2(200) NOT NULL, DESCRIPTION VARCHAR2(250) NULL, NEXT_FIRE_TIME NUMBER(13) NULL, PREV_FIRE_TIME NUMBER(13) NULL, PRIORITY NUMBER(13) NULL, TRIGGER_STATE VARCHAR2(16) NOT NULL, TRIGGER_TYPE VARCHAR2(8) NOT NULL, START_TIME NUMBER(13) NOT NULL, END_TIME NUMBER(13) NULL, CALENDAR_NAME VARCHAR2(200) NULL, MISFIRE_INSTR NUMBER(2) NULL, JOB_DATA BLOB NULL, CONSTRAINT QRTZ_TRIGGERS_PK PRIMARY KEY (SCHED_NAME,TRIGGER_NAME,TRIGGER_GROUP), CONSTRAINT QRTZ_TRIGGER_TO_JOBS_FK FOREIGN KEY (SCHED_NAME,JOB_NAME,JOB_GROUP) REFERENCES QRTZ_JOB_DETAILS(SCHED_NAME,JOB_NAME,JOB_GROUP) ); CREATE TABLE qrtz_simple_triggers ( SCHED_NAME VARCHAR2(120) NOT NULL, TRIGGER_NAME VARCHAR2(200) NOT NULL, TRIGGER_GROUP VARCHAR2(200) NOT NULL, REPEAT_COUNT NUMBER(7) NOT NULL, REPEAT_INTERVAL NUMBER(12) NOT NULL, TIMES_TRIGGERED NUMBER(10) NOT NULL, CONSTRAINT QRTZ_SIMPLE_TRIG_PK PRIMARY KEY (SCHED_NAME,TRIGGER_NAME,TRIGGER_GROUP), CONSTRAINT QRTZ_SIMPLE_TRIG_TO_TRIG_FK FOREIGN KEY (SCHED_NAME,TRIGGER_NAME,TRIGGER_GROUP) REFERENCES QRTZ_TRIGGERS(SCHED_NAME,TRIGGER_NAME,TRIGGER_GROUP) ); CREATE TABLE qrtz_cron_triggers ( SCHED_NAME VARCHAR2(120) NOT NULL, TRIGGER_NAME VARCHAR2(200) NOT NULL, TRIGGER_GROUP VARCHAR2(200) NOT NULL, CRON_EXPRESSION VARCHAR2(120) NOT NULL, TIME_ZONE_ID VARCHAR2(80), CONSTRAINT QRTZ_CRON_TRIG_PK PRIMARY KEY (SCHED_NAME,TRIGGER_NAME,TRIGGER_GROUP), CONSTRAINT QRTZ_CRON_TRIG_TO_TRIG_FK FOREIGN KEY (SCHED_NAME,TRIGGER_NAME,TRIGGER_GROUP) REFERENCES QRTZ_TRIGGERS(SCHED_NAME,TRIGGER_NAME,TRIGGER_GROUP) ); CREATE TABLE qrtz_simprop_triggers ( SCHED_NAME VARCHAR2(120) NOT NULL, TRIGGER_NAME VARCHAR2(200) NOT NULL, TRIGGER_GROUP VARCHAR2(200) NOT NULL, STR_PROP_1 VARCHAR2(512) NULL, STR_PROP_2 VARCHAR2(512) NULL, STR_PROP_3 VARCHAR2(512) NULL, INT_PROP_1 NUMBER(10) NULL, INT_PROP_2 NUMBER(10) NULL, LONG_PROP_1 NUMBER(13) NULL, LONG_PROP_2 NUMBER(13) NULL, DEC_PROP_1 NUMERIC(13,4) NULL, DEC_PROP_2 NUMERIC(13,4) NULL, BOOL_PROP_1 VARCHAR2(1) NULL, BOOL_PROP_2 VARCHAR2(1) NULL, CONSTRAINT QRTZ_SIMPROP_TRIG_PK PRIMARY KEY (SCHED_NAME,TRIGGER_NAME,TRIGGER_GROUP), CONSTRAINT QRTZ_SIMPROP_TRIG_TO_TRIG_FK FOREIGN KEY (SCHED_NAME,TRIGGER_NAME,TRIGGER_GROUP) REFERENCES QRTZ_TRIGGERS(SCHED_NAME,TRIGGER_NAME,TRIGGER_GROUP) ); CREATE TABLE qrtz_blob_triggers ( SCHED_NAME VARCHAR2(120) NOT NULL, TRIGGER_NAME VARCHAR2(200) NOT NULL, TRIGGER_GROUP VARCHAR2(200) NOT NULL, BLOB_DATA BLOB NULL, CONSTRAINT QRTZ_BLOB_TRIG_PK PRIMARY KEY (SCHED_NAME,TRIGGER_NAME,TRIGGER_GROUP), CONSTRAINT QRTZ_BLOB_TRIG_TO_TRIG_FK FOREIGN KEY (SCHED_NAME,TRIGGER_NAME,TRIGGER_GROUP) REFERENCES QRTZ_TRIGGERS(SCHED_NAME,TRIGGER_NAME,TRIGGER_GROUP) ); CREATE TABLE qrtz_calendars ( SCHED_NAME VARCHAR2(120) NOT NULL, CALENDAR_NAME VARCHAR2(200) NOT NULL, CALENDAR BLOB NOT NULL, CONSTRAINT QRTZ_CALENDARS_PK PRIMARY KEY (SCHED_NAME,CALENDAR_NAME) ); CREATE TABLE qrtz_paused_trigger_grps ( SCHED_NAME VARCHAR2(120) NOT NULL, TRIGGER_GROUP VARCHAR2(200) NOT NULL, CONSTRAINT QRTZ_PAUSED_TRIG_GRPS_PK PRIMARY KEY (SCHED_NAME,TRIGGER_GROUP) ); CREATE TABLE qrtz_fired_triggers ( SCHED_NAME VARCHAR2(120) NOT NULL, ENTRY_ID VARCHAR2(95) NOT NULL, TRIGGER_NAME VARCHAR2(200) NOT NULL, TRIGGER_GROUP VARCHAR2(200) NOT NULL, INSTANCE_NAME VARCHAR2(200) NOT NULL, FIRED_TIME NUMBER(13) NOT NULL, SCHED_TIME NUMBER(13) NOT NULL, PRIORITY NUMBER(13) NOT NULL, STATE VARCHAR2(16) NOT NULL, JOB_NAME VARCHAR2(200) NULL, JOB_GROUP VARCHAR2(200) NULL, IS_NONCONCURRENT VARCHAR2(1) NULL, REQUESTS_RECOVERY VARCHAR2(1) NULL, CONSTRAINT QRTZ_FIRED_TRIGGER_PK PRIMARY KEY (SCHED_NAME,ENTRY_ID) ); CREATE TABLE qrtz_scheduler_state ( SCHED_NAME VARCHAR2(120) NOT NULL, INSTANCE_NAME VARCHAR2(200) NOT NULL, LAST_CHECKIN_TIME NUMBER(13) NOT NULL, CHECKIN_INTERVAL NUMBER(13) NOT NULL, CONSTRAINT QRTZ_SCHEDULER_STATE_PK PRIMARY KEY (SCHED_NAME,INSTANCE_NAME) ); CREATE TABLE qrtz_locks ( SCHED_NAME VARCHAR2(120) NOT NULL, LOCK_NAME VARCHAR2(40) NOT NULL, CONSTRAINT QRTZ_LOCKS_PK PRIMARY KEY (SCHED_NAME,LOCK_NAME) ); create index idx_qrtz_j_req_recovery on qrtz_job_details(SCHED_NAME,REQUESTS_RECOVERY); create index idx_qrtz_j_grp on qrtz_job_details(SCHED_NAME,JOB_GROUP); create index idx_qrtz_t_j on qrtz_triggers(SCHED_NAME,JOB_NAME,JOB_GROUP); create index idx_qrtz_t_jg on qrtz_triggers(SCHED_NAME,JOB_GROUP); create index idx_qrtz_t_c on qrtz_triggers(SCHED_NAME,CALENDAR_NAME); create index idx_qrtz_t_g on qrtz_triggers(SCHED_NAME,TRIGGER_GROUP); create index idx_qrtz_t_state on qrtz_triggers(SCHED_NAME,TRIGGER_STATE); create index idx_qrtz_t_n_state on qrtz_triggers(SCHED_NAME,TRIGGER_NAME,TRIGGER_GROUP,TRIGGER_STATE); create index idx_qrtz_t_n_g_state on qrtz_triggers(SCHED_NAME,TRIGGER_GROUP,TRIGGER_STATE); create index idx_qrtz_t_next_fire_time on qrtz_triggers(SCHED_NAME,NEXT_FIRE_TIME); create index idx_qrtz_t_nft_st on qrtz_triggers(SCHED_NAME,TRIGGER_STATE,NEXT_FIRE_TIME); create index idx_qrtz_t_nft_misfire on qrtz_triggers(SCHED_NAME,MISFIRE_INSTR,NEXT_FIRE_TIME); create index idx_qrtz_t_nft_st_misfire on qrtz_triggers(SCHED_NAME,MISFIRE_INSTR,NEXT_FIRE_TIME,TRIGGER_STATE); create index idx_qrtz_t_nft_st_misfire_grp on qrtz_triggers(SCHED_NAME,MISFIRE_INSTR,NEXT_FIRE_TIME,TRIGGER_GROUP,TRIGGER_STATE); create index idx_qrtz_ft_trig_inst_name on qrtz_fired_triggers(SCHED_NAME,INSTANCE_NAME); create index idx_qrtz_ft_inst_job_req_rcvry on qrtz_fired_triggers(SCHED_NAME,INSTANCE_NAME,REQUESTS_RECOVERY); create index idx_qrtz_ft_j_g on qrtz_fired_triggers(SCHED_NAME,JOB_NAME,JOB_GROUP); create index idx_qrtz_ft_jg on qrtz_fired_triggers(SCHED_NAME,JOB_GROUP); create index idx_qrtz_ft_t_g on qrtz_fired_triggers(SCHED_NAME,TRIGGER_NAME,TRIGGER_GROUP); create index idx_qrtz_ft_tg on qrtz_fired_triggers(SCHED_NAME,TRIGGER_GROUP); ================================================ FILE: docs/cron.md ================================================ ## Cron 表达式详解 Cron表达式是一个字符串,字符串以5或6个空格隔开,分为6或7个域,每一个域代表一个含义,Cron有如下两种语法格式: Seconds Minutes Hours DayofMonth Month DayofWeek Year或 Seconds Minutes Hours DayofMonth Month DayofWeek 每一个域可出现的字符如下: Seconds:可出现", - * /"四个字符,有效范围为0-59的整数 Minutes:可出现", - * /"四个字符,有效范围为0-59的整数 Hours:可出现", - * /"四个字符,有效范围为0-23的整数 DayofMonth:可出现", - * / ? L W C"八个字符,有效范围为0-31的整数 Month:可出现", - * /"四个字符,有效范围为1-12的整数或JAN-DEC DayofWeek:可出现", - * / ? L C #"四个字符,有效范围为1-7的整数或SUN-SAT两个范围。1表示星期天,2表示星期一, 依次类推 Year:可出现", - * /"四个字符,有效范围为1970-2099年 每一个域都使用数字,但还可以出现如下特殊字符,它们的含义是: (1)*:表示匹配该域的任意值,假如在Minutes域使用*, 即表示每分钟都会触发事件。 (2)?:只能用在DayofMonth和DayofWeek两个域。它也匹配域的任意值,但实际不会。因为DayofMonth和DayofWeek会相互影响。例如想在每月的20日触发调度,不管20日到底是星期几,则只能使用如下写法: 13 13 15 20 * ?, 其中最后一位只能用?,而不能使用*,如果使用*表示不管星期几都会触发,实际上并不是这样。 (3)-:表示范围,例如在Minutes域使用5-20,表示从5分到20分钟每分钟触发一次 (4)/:表示起始时间开始触发,然后每隔固定时间触发一次,例如在Minutes域使用5/20,则意味着5分钟触发一次,而25,45等分别触发一次. (5),:表示列出枚举值值。例如:在Minutes域使用5,20,则意味着在5和20分每分钟触发一次。 (6)L:表示最后,只能出现在DayofWeek和DayofMonth域,如果在DayofWeek域使用5L,意味着在最后的一个星期四触发。 (7)W:表示有效工作日(周一到周五),只能出现在DayofMonth域,系统将在离指定日期的最近的有效工作日触发事件。例如:在 DayofMonth使用5W,如果5日是星期六,则将在最近的工作日:星期五,即4日触发。如果5日是星期天,则在6日(周一)触发;如果5日在星期一到星期五中的一天,则就在5日触发。另外一点,W的最近寻找不会跨过月份 (8)LW:这两个字符可以连用,表示在某个月最后一个工作日,即最后一个星期五。 (9)#:用于确定每个月第几个星期几,只能出现在DayofMonth域。例如在4#2,表示某月的第二个星期三。 举几个例子: 0 0 2 1 * ? * 表示在每月的1日的凌晨2点调度任务 0 15 10 ? * MON-FRI 表示周一到周五每天上午10:15执行作业 0 15 10 ? 6L 2002-2006 表示2002-2006年的每个月的最后一个星期五上午10:15执行作 一个cron表达式有至少6个(也可能7个)有空格分隔的时间元素。 按顺序依次为 秒(0~59) 分钟(0~59) 小时(0~23) 天(月)(0~31,但是你需要考虑你月的天数) 月(0~11) 天(星期)(1~7 1=SUN 或 SUN,MON,TUE,WED,THU,FRI,SAT) 年份(1970-2099) 其中每个元素可以是一个值(如6),一个连续区间(9-12),一个间隔时间(8-18/4)(/表示每隔4小时),一个列表(1,3,5),通配符。由于"月份中的日期"和"星期中的日期"这两个元素互斥的,必须要对其中一个设置? 0 0 10,14,16 * * ? 每天上午10点,下午2点,4点 0 0/30 9-17 * * ? 朝九晚五工作时间内每半小时 0 0 12 ? * WED 表示每个星期三中午12点 "0 0 12 * * ?" 每天中午12点触发 "0 15 10 ? * *" 每天上午10:15触发 "0 15 10 * * ?" 每天上午10:15触发 "0 15 10 * * ? *" 每天上午10:15触发 "0 15 10 * * ? 2005" 2005年的每天上午10:15触发 "0 * 14 * * ?" 在每天下午2点到下午2:59期间的每1分钟触发 "0 0/5 14 * * ?" 在每天下午2点到下午2:55期间的每5分钟触发 "0 0/5 14,18 * * ?" 在每天下午2点到2:55期间和下午6点到6:55期间的每5分钟触发 "0 0-5 14 * * ?" 在每天下午2点到下午2:05期间的每1分钟触发 "0 10,44 14 ? 3 WED" 每年三月的星期三的下午2:10和2:44触发 "0 15 10 ? * MON-FRI" 周一至周五的上午10:15触发 "0 15 10 15 * ?" 每月15日上午10:15触发 "0 15 10 L * ?" 每月最后一日的上午10:15触发 "0 15 10 ? * 6L" 每月的最后一个星期五上午10:15触发 "0 15 10 ? * 6L 2002-2005" 2002年至2005年的每月的最后一个星期五上午10:15触发 "0 15 10 ? * 6#3" 每月的第三个星期五上午10:15触发 有些子表达式能包含一些范围或列表 例如:子表达式(天(星期))可以为 “MON-FRI”,“MON,WED,FRI”,“MON-WED,SAT” “*”字符代表所有可能的值 因此,“*”在子表达式(月)里表示每个月的含义,“*”在子表达式(天(星期))表示星期的每一天 “/”字符用来指定数值的增量 例如:在子表达式(分钟)里的“0/15”表示从第0分钟开始,每15分钟 在子表达式(分钟)里的“3/20”表示从第3分钟开始,每20分钟(它和“3,23,43”)的含义一样 “?”字符仅被用于天(月)和天(星期)两个子表达式,表示不指定值 当2个子表达式其中之一被指定了值以后,为了避免冲突,需要将另一个子表达式的值设为“?” “L” 字符仅被用于天(月)和天(星期)两个子表达式,它是单词“last”的缩写 但是它在两个子表达式里的含义是不同的。 在天(月)子表达式中,“L”表示一个月的最后一天 在天(星期)自表达式中,“L”表示一个星期的最后一天,也就是SAT 如果在“L”前有具体的内容,它就具有其他的含义了 例如:“6L”表示这个月的倒数第6天,“FRIL”表示这个月的最一个星期五 注意:在使用“L”参数时,不要指定列表或范围,因为这会导致问题 字段 允许值 允许的特殊字符 秒 0-59 , - * / 分 0-59 , - * / 小时 0-23 , - * / 日期 1-31 , - * ? / L W C 月份 1-12 或者 JAN-DEC , - * / 星期 1-7 或者 SUN-SAT , - * ? / L C # 年(可选) 留空, 1970-2099 , - * / ================================================ FILE: docs/getting_started.md ================================================ ### 项目目录结构 ``` │ ├── main │ │ │ ├── java │ │ │ │ │ └── com.godcheese ----------------- 项目主类包 │ │ │ │ │ ├── nimrod ---------------- Nimrod 核心模块存放目录 │ │ │ │ │ │ │ ├─ common ------------- 项目公用部分 │ │ │ │ │ │ │ ├─ mail --------------- 电子邮箱模块 │ │ │ │ │ │ │ ├─ quartz ------------- Quartz 定时任务模块 │ │ │ │ │ │ │ ├─ system ------------- 系统模块 │ │ │ │ │ │ │ ├─ user --------------- 用户模块 │ │ │ │ │ │ │ ├── resources ------------------------------- 项目资源目录 │ │ │ │ │ ├─ fonts ------------------------------- 字体存放目录 │ │ │ │ │ ├─ static ------------------------------ js/css/png 等静态文件存放目录 │ │ │ │ │ ├─ templates --------------------------- Web 模板 │ │ │ │ │ ├─ application.properties -------------- 项目环境配置文件 │ │ │ │ │ ├─ application-dev.properties ---------- 项目 dev 环境配置文件 │ │ │ │ │ ├─ application-prod.properties --------- 项目 prod 环境配置文件 │ │ │ │ │ ├─ banner.txt -------------------------- 项目启动 Banner │ │ │ │ │ ├─ logback.sql ------------------------- Logback 数据库文件 │ │ │ │ │ ├─ logback-spring.xml ------------------ Logback 配置文件 │ │ │ │ │ ├─ mybatis-config.xml ------------------ MyBatis 配置文件 │ │ │ ``` ### 运行实例 - 一、安装 JDK 8+、MySQL 5.7+ - 二、导入数据库 `/db/mysql/nimrod/nimrod.sql` - 三、运行 `java -jar nimrod-*.jar`,浏览器打开 `http://localhost:8083/nimrod` ### 开发调试 - 一、安装 JDK 8+、MySQL 5.7+、Maven 3.5+ - 二、在 Intelli IDEA 中打开项目 - 三、在 Terminal 中运行 `mvn spring-boot:run`,浏览器打开 `http://localhost:8083/nimrod` ### [环境搭建](https://github.com/godcheese/nimrod/blob/master/docs/java.md) ================================================ FILE: docs/java.md ================================================ ### Java 8 Install 1. 安装。Windows/Linux/macOS 系统下载安装对应的安装包。 - [Download](https://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html) 2. 环境变量配置。 - Windows 配置环境变量 - 计算机=>属性=>高级系统设置=>高级=>环境变量=>系统变量=>新建变量 - 变量名:`JAVA_HOME`,变量值:JDK 路径(如:`C:\Program Files\Java\jdk1.8.0_181`) - 变量名:`CLASSPATH`,变量值:`.;%JAVA_HOME%\lib;%JAVA_HOME%\lib\tools.jar` - 在已有 `Path` 变量的变量值最前增加:`%JAVA_HOME%\bin;%JAVA_HOME%\jre\bin;` - macOS 配置环境变量 - `cd ~ && vim .bash_profile` - 输入以下内容,再保存,然后输入 `source .bash_profile` 生效: - `# JDK 路径` - `JAVA_HOME=/Library/Java/JavaVirtualMachines/jdk1.8.0_181.jdk/Contents/Home` - `PATH=$JAVA_HOME/bin:$PATH:.` - `CLASSPATH=$JAVA_HOME/lib/tools.jar:$JAVA_HOME/lib/dt.jar:.` - `export JAVA_HOME` - `export PATH` - `export CLASSPATH` 3. 检验安装是否成功。 ### MySQL 5.7 Install 1. 安装。Windows/Linux/macOS 系统下载安装对应的安装包。 - [Download](https://dev.mysql.com/downloads/mysql/5.7.html#downloads) ### Maven 3.5 Install 1. 安装。Windows/Linux/macOS 系统下载安装对应的安装包。 - [Download](http://maven.apache.org/download.cgi) 2. 环境变量配置。 - Windows 配置环境变量 - 计算机=>属性=>高级系统设置=>高级=>环境变量=>系统变量=>新建变量 - 变量名:`MAVEN`,变量值:Maven 路径(如:`C:\apache-maven-3.5.4 2`) - 在已有 `Path` 变量的变量值最前增加:`%MAVEN_HOME%\bin;` - macOS 配置环境变量 - `cd ~ && vim .bash_profile` - 输入以下内容,再保存,然后输入 `source .bash_profile` 生效: - `# Maven 路径` - `export M2_HOME=/Volumes/office/dev/apache-maven-3.5.0` - `export PATH=$PATH:$M2_HOME/bin` ================================================ FILE: pom.xml ================================================ 4.0.0 org.springframework.boot spring-boot-starter-parent 2.3.1.RELEASE com.godcheese nimrod 0.8.0 jar ${project.artifactId} http://www.godcheese.com/ Nimrod - 基于 Spring Boot 构建 的 Java Web 平台企业级单体应用快速开发框架,适合中小型项目的应用和开发。 UTF-8 ${project.build.sourceEncoding} 1.8 ${java.version} ${java.version} ${project.name}-${project.version} ${} true ${project.basedir}/lib godcheese Rakesh Zhang godcheese@outlook.com https://github.com/godcheese/nimrod scm:git:git://github.com/godcheese/nimrod.git scm:git@github.com:godcheese/nimrod.git GitHub https://github.com/godcheese/nimrod/issues org.springframework.boot spring-boot-starter-aop org.springframework.boot spring-boot-starter-security org.springframework.boot spring-boot-starter-thymeleaf org.thymeleaf.extras thymeleaf-extras-springsecurity5 3.0.4.RELEASE org.springframework.boot spring-boot-starter-web org.mybatis.spring.boot mybatis-spring-boot-starter 2.1.3 com.github.pagehelper pagehelper-spring-boot-starter 1.2.13 mysql mysql-connector-java runtime com.alibaba druid-spring-boot-starter 1.1.23 org.springframework.boot spring-boot-configuration-processor true org.springframework.boot spring-boot-starter-mail org.springframework.boot spring-boot-starter-activemq org.springframework.boot spring-boot-starter-quartz org.apache.poi poi 4.1.2 org.apache.poi poi-ooxml 4.1.2 com.godcheese tile 1.0.0 system ${libPath}/tile-1.0.0.jar jar org.springframework.boot spring-boot-starter-test test org.junit.vintage junit-vintage-engine org.springframework.security spring-security-test test ${finalName} org.springframework.boot spring-boot-maven-plugin ${project.basedir}/src/main/resources false **/*.* **/*.properties **/*.yaml ${project.basedir}/src/main/resources true **/*.properties **/*.yaml ${project.basedir}/src/main/java **/*.xml ${project.basedir} ${project.build.directory} *.md LICENSE ${project.basedir}/db ${project.build.directory}/db db/*.* ${libPath} BOOT-INF/lib **/*.jar ================================================ FILE: scripts/git_clear_history_commit.sh.do_not_run ================================================ #!/usr/bin/env bash echo "author godcheese [godcheese@outlook.com]" CURRENT_DIR=$(pwd) SCRIPTS_DIR=$(cd "$(dirname $0)" || exit; pwd) cd "${SCRIPTS_DIR}" || exit cd .. echo "Chceckout new branch..." git checkout --orphan new_branch echo "Add file..." git add -A echo -n "Submit remark...Please input anything(Initial commit):" read REMARK if [ ! -n "$REMARK" ];then REMARK="Initial commit" fi git commit -m "$REMARK" echo "Delete master branch..." git branch -D master echo "Rename new branch to master..." git branch -m master echo "Force submit code..." git push -f origin master echo "Submit complete,close..." cd "${CURRENT_DIR}" || exit ================================================ FILE: scripts/git_config.sh.do_not_run ================================================ #!/usr/bin/env bash echo "author godcheese [godcheese@outlook.com]" git config --global user.name "godcheese" git config --global user.email "godcheese@outlook.com" ssh-keygen -o -t rsa -b 4096 -C "godcheese@outlook.com" cat ~/.ssh/id_rsa.pub ================================================ FILE: scripts/gitlabci.build.sh ================================================ #!/usr/bin/env bash # encoding: utf-8.0 # http://github.com/godcheese/shell_bag # author: godcheese [godcheese@outlook.com] # description: gitlabci.build.sh echo "author godcheese [godcheese@outlook.com]" curl -o install.sh https://raw.githubusercontent.com/godcheese/shell_bag/master/linux/install_jdk.sh && bash install.sh install /webwork/software/jdk https://repo.huaweicloud.com/java/jdk/8u202-b08/jdk-8u202-linux-x64.tar.gz jdk1.8.0_202 curl -o install.sh https://raw.githubusercontent.com/godcheese/shell_bag/master/linux/install_maven.sh && bash install.sh install /webwork/software/maven https://downloads.apache.org/maven/maven-3/3.6.3/binaries/apache-maven-3.6.3-bin.tar.gz apache-maven-3.6.3 curl -o install.sh https://raw.githubusercontent.com/godcheese/shell_bag/master/linux/install_mysql.sh && bash install.sh install /webwork/software/mysql https://dev.mysql.com/get/Downloads/MySQL-5.7/mysql-5.7.31-linux-glibc2.12-x86_64.tar.gz mysql-5.7.31-linux-glibc2.12-x86_64 mysql -uroot -p123456 -e "use mysql;create user 'nimrod'@'%';update user set authentication_string=PASSWORD('123456') where User='nimrod';update user set plugin='mysql_native_password';grant usage on *.* to 'nimrod' require none with max_queries_per_hour 0 max_connections_per_hour 0 max_updates_per_hour 0 max_user_connections 0;create database if not exists nimrod;grant all privileges on nimrod.* to 'nimrod'@'%';flush privileges;" mysql -unimrod -p123456 nimrod < db/mysql/nimrod/nimrod.sql mvn -e clean install -DskipTests=true -Dmaven.javadoc.skip=true -Dspring-boot.run.profiles=dev mvn -e clean install -DskipTests=true -Dmaven.javadoc.skip=true -Dspring-boot:run.prifiles=prod ================================================ FILE: scripts/package.bat ================================================ CHCP 65001 @echo off echo.author godcheese [godcheese@outlook.com] set "CURRENT_DIR=%~dp0" cd %CURRENT_DIR% cd .. call mvnw clean package -DskipTests=true -Dmaven.javadoc.skip=true -Dspring-boot.run.profiles=prod cd %CURRENT_DIR% ================================================ FILE: scripts/package.sh ================================================ #!/usr/bin/env bash echo "author godcheese [godcheese@outlook.com]" CURRENT_DIR=$(pwd) SCRIPTS_DIR=$(cd "$(dirname $0)" || exit; pwd) cd "${SCRIPTS_DIR}" || exit cd .. ./mvnw clean package -DskipTests=true -Dmaven.javadoc.skip=true -Dspring-boot.run.profiles=prod cd "${CURRENT_DIR}" || exit ================================================ FILE: scripts/run_dev.bat ================================================ CHCP 65001 @echo off echo.author godcheese [godcheese@outlook.com] set "CURRENT_DIR=%~dp0" cd %CURRENT_DIR% cd .. call mvnw spring-boot:run -DskipTests=true -Dmaven.javadoc.skip=true -Dspring-boot.run.profiles=dev cd %CURRENT_DIR% ================================================ FILE: scripts/run_dev.sh ================================================ #!/usr/bin/env bash echo "author godcheese [godcheese@outlook.com]" CURRENT_DIR=$(pwd) SCRIPTS_DIR=$(cd "$(dirname $0)" || exit; pwd) cd "${SCRIPTS_DIR}" || exit cd .. ./mvnw spring-boot:run -DskipTests=true -Dmaven.javadoc.skip=true -Dspring-boot.run.profiles=dev cd "${CURRENT_DIR}" || exit ================================================ FILE: scripts/run_prod.bat ================================================ CHCP 65001 @echo off echo.author godcheese [godcheese@outlook.com] set "CURRENT_DIR=%~dp0" cd %CURRENT_DIR% cd .. call mvnw spring-boot:run -DskipTests=true -Dmaven.javadoc.skip=true -Dspring-boot.run.profiles=prod cd %CURRENT_DIR% ================================================ FILE: scripts/run_prod.sh ================================================ #!/usr/bin/env bash echo "author godcheese [godcheese@outlook.com]" CURRENT_DIR=$(pwd) SCRIPTS_DIR=$(cd "$(dirname $0)" || exit; pwd) cd "${SCRIPTS_DIR}" || exit cd .. ./mvnw spring-boot:run -DskipTests=true -Dmaven.javadoc.skip=true -Dspring-boot.run.profiles=prod cd "${CURRENT_DIR}" || exit ================================================ FILE: scripts/travisci.build.sh ================================================ #!/usr/bin/env bash # encoding: utf-8.0 # http://github.com/godcheese/shell_bag # author: godcheese [godcheese@outlook.com] # description: travisci.build.sh echo "author godcheese [godcheese@outlook.com]" sudo curl -o install.sh https://raw.githubusercontent.com/godcheese/shell_bag/master/linux/install_jdk.sh && sudo bash install.sh install /webwork/software/jdk https://repo.huaweicloud.com/java/jdk/8u202-b08/jdk-8u202-linux-x64.tar.gz jdk1.8.0_202 sudo curl -o install.sh https://raw.githubusercontent.com/godcheese/shell_bag/master/linux/install_maven.sh && sudo bash install.sh install /webwork/software/maven https://downloads.apache.org/maven/maven-3/3.6.3/binaries/apache-maven-3.6.3-bin.tar.gz apache-maven-3.6.3 sudo curl -o install.sh https://raw.githubusercontent.com/godcheese/shell_bag/master/linux/install_mysql.sh && sudo bash install.sh install /webwork/software/mysql https://dev.mysql.com/get/Downloads/MySQL-5.7/mysql-5.7.31-linux-glibc2.12-x86_64.tar.gz mysql-5.7.31-linux-glibc2.12-x86_64 sudo mysql -uroot -p123456 -e "use mysql;create user 'nimrod'@'%';update user set authentication_string=PASSWORD('123456') where User='nimrod';update user set plugin='mysql_native_password';grant usage on *.* to 'nimrod' require none with max_queries_per_hour 0 max_connections_per_hour 0 max_updates_per_hour 0 max_user_connections 0;create database if not exists nimrod;grant all privileges on nimrod.* to 'nimrod'@'%';flush privileges;" sudo mysql -unimrod -p123456 nimrod < db/mysql/nimrod/nimrod.sql sudo mvn -e clean install -DskipTests=true -Dmaven.javadoc.skip=true -Dspring-boot.run.profiles=dev sudo mvn -e clean install -DskipTests=true -Dmaven.javadoc.skip=true -Dspring-boot:run.prifiles=prod ================================================ FILE: src/main/java/com/godcheese/NimrodApplication.java ================================================ package com.godcheese; import com.godcheese.nimrod.common.others.Common; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.Banner; import org.springframework.boot.CommandLineRunner; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.boot.builder.SpringApplicationBuilder; import org.springframework.boot.web.servlet.support.SpringBootServletInitializer; import org.springframework.context.ConfigurableApplicationContext; import org.springframework.core.annotation.Order; import org.springframework.scheduling.annotation.EnableAsync; import org.springframework.stereotype.Component; import org.springframework.web.context.WebApplicationContext; /** * Nimrod 启动类 * * @author godcheese [godcheese@outlook.com] * @date 2018-02-22 */ @EnableAsync @SpringBootApplication public class NimrodApplication extends SpringBootServletInitializer { private static final String NIMROD_VERSION = "0.8.0"; private static final String NIMROD_URL = "https://github.com/godcheese/nimrod"; private static final Logger LOGGER = LoggerFactory.getLogger(NimrodApplication.class); public static void main(String[] args) { SpringApplication application = new SpringApplication(NimrodApplication.class); application.setBannerMode(Banner.Mode.OFF); ConfigurableApplicationContext configurableApplicationContext = application.run(args); bootstrap((WebApplicationContext) configurableApplicationContext); } private static void bootstrap(WebApplicationContext webApplicationContext) { // @formatter:off String banner = " .__ __. __ .___ ___. .______ ______ _______ \n" + " | \\ | | | | | \\/ | | _ \\ / __ \\ | \\ \n" + " | \\| | | | | \\ / | | |_) | | | | | | .--. |\n" + " | . ` | | | | |\\/| | | / | | | | | | | |\n" + " | |\\ | | | | | | | | |\\ \\----.| `--' | | '--' |\n" + " |__| \\__| |__| |__| |__| | _| `._____| \\______/ |_______/ "; String nimrod = "\n -------------------------------------------------" + "\n | Nimrod version: " + NIMROD_VERSION + " |" + "\n | Homepage: " + NIMROD_URL + " |" + "\n -------------------------------------------------"; Common.getHost(webApplicationContext); String scheme = Common.Host.scheme; String port = Common.Host.port; String contextPath = Common.Host.contextPath; String ip = Common.Host.ip; String local = scheme + "://localhost" + ":" + port + contextPath + "/"; String network = scheme + "://" + ip + ":" + port + contextPath + "/"; if (ip == null) { network = "unavailable"; } String appRunningAt = "\n App running at:" + "\n - Server: " + Common.Host.serverInfo + "\n - Local: " + local + "\n - Network: " + network; // @formatter:on LOGGER.info("\n\n" + banner + "\n" + nimrod + "\n" + appRunningAt + "\n"); } @Override protected WebApplicationContext run(SpringApplication application) { application.setBannerMode(Banner.Mode.OFF); WebApplicationContext webApplicationContext = super.run(application); bootstrap(webApplicationContext); return webApplicationContext; } @Override protected SpringApplicationBuilder configure(SpringApplicationBuilder application) { return application.sources(NimrodApplication.class); } @Order @Component public static class ApplicationStartupRunner implements CommandLineRunner { @Autowired private Common common; @Override public void run(String... strings) { common.initialize(); } } } ================================================ FILE: src/main/java/com/godcheese/example/Example.java ================================================ package com.godcheese.example; /** * @author godcheese [godcheese@outlook.com] * @date 2019-01-18 */ public class Example { public static class Page { public static final String EXAMPLE = "/example"; } public static class Api { public static final String EXAMPLE = com.godcheese.nimrod.common.Url.API + Example.Page.EXAMPLE; } } ================================================ FILE: src/main/java/com/godcheese/example/api/ExampleRestController.java ================================================ package com.godcheese.example.api; import com.godcheese.example.Example; import com.godcheese.example.service.ExampleService; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; /** * @author godcheese [godcheese@outlook.com] * @date 2018-02-22 */ @RestController @RequestMapping(Example.Api.EXAMPLE) public class ExampleRestController { private static final Logger LOGGER = LoggerFactory.getLogger(ExampleRestController.class); private static final String EXAMPLE = "/EXAMPLE"; @Autowired private ExampleService exampleService; @RequestMapping("/test") public String test() { return "test"; } } ================================================ FILE: src/main/java/com/godcheese/example/controller/ExampleController.java ================================================ package com.godcheese.example.controller; import com.godcheese.example.Example; import com.godcheese.nimrod.common.others.Common; import org.springframework.security.access.prepost.PreAuthorize; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.RequestMapping; /** * @author godcheese [godcheese@outlook.com] * @date 2018-02-22 */ @Controller @RequestMapping(Example.Page.EXAMPLE) public class ExampleController { /** * 测试页面 * * @return String */ @PreAuthorize("isAuthenticated()") @RequestMapping("/test") public String pageAll() { return Common.trimSlash(Example.Page.EXAMPLE + "/test"); } } ================================================ FILE: src/main/java/com/godcheese/example/entity/ExampleEntity.java ================================================ package com.godcheese.example.entity; import java.io.Serializable; import java.util.Date; /** * @author godcheese [godcheese@outlook.com] * @date 2018-02-22 */ public class ExampleEntity implements Serializable { private static final long serialVersionUID = 5619353235596663560L; /** * id */ private Long id; /** * 名 */ private String name; /** * 排序 */ private Long sort; /** * 备注 */ private String remark; /** * 更新时间 */ private Date gmtModified; /** * 创建时间 */ private Date gmtCreated; public Long getId() { return id; } public void setId(Long id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } public Long getSort() { return sort; } public void setSort(Long sort) { this.sort = sort; } public String getRemark() { return remark; } public void setRemark(String remark) { this.remark = remark; } public Date getGmtModified() { return gmtModified; } public void setGmtModified(Date gmtModified) { this.gmtModified = gmtModified; } public Date getGmtCreated() { return gmtCreated; } public void setGmtCreated(Date gmtCreated) { this.gmtCreated = gmtCreated; } } ================================================ FILE: src/main/java/com/godcheese/example/mapper/ExampleMapper.java ================================================ package com.godcheese.example.mapper; import com.godcheese.example.entity.ExampleEntity; import com.godcheese.tile.mybatis.CrudMapper; import org.apache.ibatis.annotations.Mapper; import org.springframework.stereotype.Component; /** * @author godcheese [godcheese@outlook.com] * @date 2018-02-22 */ @Component("exampleMapper") @Mapper public interface ExampleMapper extends CrudMapper { } ================================================ FILE: src/main/java/com/godcheese/example/mapper/ExampleMapper.xml ================================================ `example` `id`, `name`, `sort`, `remark`, `gmt_modified`, `gmt_created` ================================================ FILE: src/main/java/com/godcheese/example/service/ExampleService.java ================================================ package com.godcheese.example.service; /** * @author godcheese [godcheese@outlook.com] * @date 2018-02-22 */ public interface ExampleService { } ================================================ FILE: src/main/java/com/godcheese/example/service/impl/ExampleServiceImpl.java ================================================ package com.godcheese.example.service.impl; import com.godcheese.example.service.ExampleService; import org.springframework.stereotype.Service; /** * @author godcheese [godcheese@outlook.com] * @date 2018-02-22 */ @Service public class ExampleServiceImpl implements ExampleService { } ================================================ FILE: src/main/java/com/godcheese/nimrod/common/Url.java ================================================ package com.godcheese.nimrod.common; import com.godcheese.nimrod.system.System; /** * @author godcheese [godcheese@outlook.com] * @date 2018-02-22 */ public class Url { public static final String PATH_SEPARATOR = "/"; public static final String ALL_PATH_PATTERN = "/**"; public static final String API = "/api"; public static final String API_ALL_PATTERN = API + "/**"; /** * 静态资源 url */ public static final String[] STATIC = {"robots.txt", "/**.ico", "/assets/**", "/css/**", "/js/**", "/img/**", "/vendor/**"}; public static class Api { public static final String API_PATH_PATTERN = API + ALL_PATH_PATTERN; } public static class Page { public static final String INDEX = "/index"; public static final String[] INDEX_ARRAY = {PATH_SEPARATOR, INDEX, System.Page.SYSTEM, System.Page.INDEX}; } } ================================================ FILE: src/main/java/com/godcheese/nimrod/common/activemq/ActiveMqConfiguration.java ================================================ package com.godcheese.nimrod.common.activemq; import org.springframework.context.annotation.Configuration; import org.springframework.jms.annotation.EnableJms; /** * @author godcheese [godcheese@outlook.com] * @date 2018-02-22 */ @EnableJms @Configuration public class ActiveMqConfiguration { } ================================================ FILE: src/main/java/com/godcheese/nimrod/common/controller/CustomBasicErrorController.java ================================================ package com.godcheese.nimrod.common.controller; import com.godcheese.nimrod.common.others.FailureEntity; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Value; import org.springframework.boot.autoconfigure.web.servlet.error.AbstractErrorController; import org.springframework.boot.web.error.ErrorAttributeOptions; import org.springframework.boot.web.servlet.error.ErrorAttributes; import org.springframework.http.HttpStatus; import org.springframework.http.MediaType; import org.springframework.http.ResponseEntity; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.ResponseBody; import org.springframework.web.servlet.ModelAndView; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import java.util.Collections; import java.util.Map; /** * @author godcheese [godcheese@outlook.com] * @date 2018-02-22 */ @Controller @RequestMapping("${server.error.path:${error.path:/error}}") public class CustomBasicErrorController extends AbstractErrorController { private static final Logger LOGGER = LoggerFactory.getLogger(CustomBasicErrorController.class); @Value("${server.error.path:${error.path:/error}}") public String errorPath = "/error"; @Override public String getErrorPath() { return errorPath; } public CustomBasicErrorController(ErrorAttributes errorAttributes) { super(errorAttributes); } /** * html * * @param request HttpServletRequest * @param response HttpServletResponse * @return ModelAndView */ @RequestMapping(produces = MediaType.TEXT_HTML_VALUE) public ModelAndView errorHtml(HttpServletRequest request, HttpServletResponse response) { HttpStatus httpStatus = getStatus(request); int code = httpStatus.value(); // Map errorAttributes = getErrorAttributes(request, true); Map errorAttributes = getErrorAttributes(request, ErrorAttributeOptions.defaults()); LOGGER.info("status={},exception={}", code, errorAttributes); code = RestControllerAdviceHandler.codeSwitch(code); httpStatus = HttpStatus.valueOf(code); // Map model = Collections.unmodifiableMap(getErrorAttributes( // request, true)); Map model = Collections.unmodifiableMap(getErrorAttributes(request, ErrorAttributeOptions.defaults())); ModelAndView modelAndView = resolveErrorView(request, response, httpStatus, model); return (modelAndView == null ? new ModelAndView(code + "", model, httpStatus) : modelAndView); } /** * json * * @param request HttpServletRequest * @param response HttpServletResponse * @return ResponseEntity */ @RequestMapping @ResponseBody public ResponseEntity error(HttpServletRequest request, HttpServletResponse response) { HttpStatus httpStatus = getStatus(request); int code = httpStatus.value(); Map errorAttributes = getErrorAttributes(request, ErrorAttributeOptions.defaults()); LOGGER.info("status={},exception={}", code, errorAttributes); code = RestControllerAdviceHandler.codeSwitch(code); httpStatus = HttpStatus.valueOf(code); return new ResponseEntity<>(new FailureEntity((String) errorAttributes.get("error"), httpStatus.value()), httpStatus); } } ================================================ FILE: src/main/java/com/godcheese/nimrod/common/controller/RestControllerAdviceHandler.java ================================================ package com.godcheese.nimrod.common.controller; import com.godcheese.nimrod.common.others.FailureEntity; import com.godcheese.nimrod.system.service.DictionaryService; import com.godcheese.tile.util.DataSizeUtil; import com.godcheese.tile.web.exception.BaseResponseException; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.http.HttpStatus; import org.springframework.http.ResponseEntity; import org.springframework.security.authentication.BadCredentialsException; import org.springframework.util.unit.DataSize; import org.springframework.web.bind.annotation.ExceptionHandler; import org.springframework.web.bind.annotation.RestControllerAdvice; import org.springframework.web.multipart.MaxUploadSizeExceededException; import org.springframework.web.multipart.MultipartException; import javax.servlet.http.HttpServletRequest; /** * @author godcheese [godcheese@outlook.com] * @date 2018-02-22 */ @RestControllerAdvice public class RestControllerAdviceHandler { private static final Logger LOGGER = LoggerFactory.getLogger(RestControllerAdviceHandler.class); @Autowired private DictionaryService dictionaryService; @Autowired private FailureEntity failureEntity; @ExceptionHandler({BaseResponseException.class}) public ResponseEntity defaultExceptionHandler(HttpServletRequest httpServletRequest, Throwable throwable) { HttpStatus httpStatus = getStatus(httpServletRequest); throwable.printStackTrace(); String message = throwable.getMessage(); int code = 0; if (throwable instanceof BaseResponseException) { code = ((BaseResponseException) throwable).getCode(); } return new ResponseEntity<>(new FailureEntity(message, code), httpStatus); } @ExceptionHandler(MultipartException.class) public ResponseEntity sizeLimitExceededExceptionHandler(HttpServletRequest httpServletRequest, Throwable throwable) { HttpStatus httpStatus = getStatus(httpServletRequest); FailureEntity fm = failureEntity.i18n("file.upload_fail"); if (throwable instanceof MaxUploadSizeExceededException) { String maxFileSize = DataSizeUtil.pretty(DataSize.parse((String) dictionaryService.get("FILE", "MAX_FILE_SIZE")).toBytes()); String maxRequestSize = DataSizeUtil.pretty(DataSize.parse((String) dictionaryService.get("FILE", "MAX_REQUEST_SIZE")).toBytes()); fm = failureEntity.i18n("file.upload_fail_max_upload_size_exceeded", maxFileSize, maxRequestSize); } throwable.printStackTrace(); return new ResponseEntity<>(fm, httpStatus); } @ExceptionHandler(BadCredentialsException.class) public ResponseEntity badCredentialsExceptionHandler(HttpServletRequest httpServletRequest, Throwable throwable) { HttpStatus httpStatus = getStatus(httpServletRequest); throwable.printStackTrace(); return new ResponseEntity<>(new FailureEntity(throwable.getMessage(), httpStatus.value()), httpStatus); } public static HttpStatus getStatus(HttpServletRequest request) { Integer statusCode = (Integer) request.getAttribute("javax.servlet.error.status_code"); if (statusCode == null) { return HttpStatus.INTERNAL_SERVER_ERROR; } else { try { return HttpStatus.valueOf(statusCode); } catch (Exception var4) { return HttpStatus.INTERNAL_SERVER_ERROR; } } } public static int codeSwitch(int code) { switch (code) { case 400: break; case 403: break; case 404: break; case 500: break; default: code = 500; break; } return code; } } ================================================ FILE: src/main/java/com/godcheese/nimrod/common/druid/DruidConfiguration.java ================================================ package com.godcheese.nimrod.common.druid; import com.alibaba.druid.spring.boot.autoconfigure.DruidDataSourceBuilder; import org.springframework.boot.context.properties.ConfigurationProperties; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.context.annotation.Primary; import javax.sql.DataSource; /** * @author godcheese [godcheese@outlook.com] * @date 2018-02-22 */ @Configuration public class DruidConfiguration { public static final String DRUID_URL = "/druid"; /** * DataSource 配置注入 * * @return DataSource * @Primary 注释在同样的 DataSource 中,首先使用被标注的 DataSource * 声明其为 Bean 实例 */ @Primary @Bean(initMethod = "init", destroyMethod = "close") @ConfigurationProperties("spring.datasource.druid") public DataSource dataSource() { return DruidDataSourceBuilder.create().build(); } } ================================================ FILE: src/main/java/com/godcheese/nimrod/common/easyui/ComboTree.java ================================================ package com.godcheese.nimrod.common.easyui; import java.io.Serializable; import java.util.List; /** * @author godcheese [godcheese@outlook.com] * @date 2019-05-04 */ public class ComboTree implements Serializable { private static final long serialVersionUID = 962965761257333089L; private Long id; private String text; private Long parentId; private List children; public Long getId() { return id; } public void setId(Long id) { this.id = id; } public String getText() { return text; } public void setText(String text) { this.text = text; } public Long getParentId() { return parentId; } public void setParentId(Long parentId) { this.parentId = parentId; } public List getChildren() { return children; } public void setChildren(List children) { this.children = children; } } ================================================ FILE: src/main/java/com/godcheese/nimrod/common/easyui/EasyUi.java ================================================ package com.godcheese.nimrod.common.easyui; /** * @author godcheese [godcheese@outlook.com] * @date 2019-09-26 */ public class EasyUi { /** * Tree TreeGrid state: The node state, 'open' or 'closed'. */ public static class State { public static final String CLOSED = "closed"; public static final String OPEN = "open"; } } ================================================ FILE: src/main/java/com/godcheese/nimrod/common/easyui/Pagination.java ================================================ package com.godcheese.nimrod.common.easyui; import java.io.Serializable; import java.util.List; /** * 返回例如:{rows:[{},{}], total:2} * * @author godcheese [godcheese@outlook.com] * @date 2018-02-22 */ public class Pagination implements Serializable { private static final long serialVersionUID = -7480580436678839700L; private List rows; private long total; private boolean inputTotal; public List getRows() { return rows; } public void setRows(List rows) { this.rows = rows; } public long getTotal() { if (!inputTotal && getRows() != null) { total = getRows().size(); } return total; } public void setTotal(long total) { this.total = total; inputTotal = true; } } ================================================ FILE: src/main/java/com/godcheese/nimrod/common/easyui/Tree.java ================================================ package com.godcheese.nimrod.common.easyui; import java.io.Serializable; import java.util.Collections; import java.util.List; import java.util.Map; /** * @author godcheese [godcheese@outlook.com] * @date 2018-02-22 */ public class Tree implements Serializable { private static final long serialVersionUID = -7372612079113611533L; /** * node id, which is important to load remote data */ private long id; /** * node text to show */ private String text; /** * The css class to display icon. */ private String iconCls; /** * node state, 'open' or 'closed', default is 'open'. When set to 'closed', the node have children nodes and will load them from remote site */ private String state = "open"; /** * Indicate whether the node is checked selected. */ private boolean checked; /** * custom attributes can be added to a node. */ private List> attributes; /** * an array nodes defines some children nodes. */ private List children = Collections.emptyList(); public long getId() { return id; } public void setId(long id) { this.id = id; } public String getText() { return text; } public void setText(String text) { this.text = text; } public String getIconCls() { return iconCls; } public void setIconCls(String iconCls) { this.iconCls = iconCls; } public String getState() { return state; } public void setState(String state) { this.state = state; } public boolean getChecked() { return checked; } public void setChecked(boolean checked) { this.checked = checked; } public List> getAttributes() { return attributes; } public void setAttributes(List> attributes) { this.attributes = attributes; } public List getChildren() { return children; } public void setChildren(List children) { this.children = children; } } ================================================ FILE: src/main/java/com/godcheese/nimrod/common/easyui/TreeGrid.java ================================================ package com.godcheese.nimrod.common.easyui; import java.io.Serializable; import java.util.List; /** * @author godcheese [godcheese@outlook.com] * @date 2019-05-04 */ public class TreeGrid implements Serializable { private static final long serialVersionUID = -1416104562832619797L; private Long id; private String name; private Long parentId; private List children; public Long getId() { return id; } public void setId(Long id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } public Long getParentId() { return parentId; } public void setParentId(Long parentId) { this.parentId = parentId; } public List getChildren() { return children; } public void setChildren(List children) { this.children = children; } } ================================================ FILE: src/main/java/com/godcheese/nimrod/common/easyui/TreeGridAdapter.java ================================================ package com.godcheese.nimrod.common.easyui; import com.godcheese.nimrod.common.others.BaseEntityAdapter; import java.util.List; /** * @author godcheese [godcheese@outlook.com] * @date 2019-09-26 */ public class TreeGridAdapter extends BaseEntityAdapter { public List children; public String state; public String getState() { return state; } public void setState(String state) { this.state = state; } public List getChildren() { return children; } public void setChildren(List children) { this.children = children; } } ================================================ FILE: src/main/java/com/godcheese/nimrod/common/exportbyexcel/ExportByExcel.java ================================================ package com.godcheese.nimrod.common.exportbyexcel; import org.springframework.core.annotation.AliasFor; import java.lang.annotation.*; /** * @author godcheese [godcheese@outlook.com] * @date 2018-02-22 */ @Documented @Retention(RetentionPolicy.RUNTIME) @Target(ElementType.FIELD) public @interface ExportByExcel { /** * 导出显示名 * * @return String */ @AliasFor("name") String value() default ""; /** * 导出显示名 * * @return String */ @AliasFor("value") String name() default ""; /** * 导入时忽略此字段 * * @return boolean */ boolean importIgnore() default false; boolean exportIgnore() default false; Class handler() default ExportByExcelHandler.class; } ================================================ FILE: src/main/java/com/godcheese/nimrod/common/exportbyexcel/ExportByExcelHandler.java ================================================ package com.godcheese.nimrod.common.exportbyexcel; /** * @author godcheese [godcheese@outlook.com] * @date 2019-01-09 */ public class ExportByExcelHandler { public Object exportHandler(Object object) { return object; } public Object importHandler(Object object) { return object; } } ================================================ FILE: src/main/java/com/godcheese/nimrod/common/exportbyexcel/ExportByExcelUtil.java ================================================ package com.godcheese.nimrod.common.exportbyexcel; import com.godcheese.tile.office.ExcelUtil; import com.godcheese.tile.util.ClassUtil; import com.godcheese.tile.web.exception.BaseResponseException; import org.apache.poi.hssf.usermodel.HSSFWorkbook; import org.apache.poi.ss.usermodel.Cell; import org.apache.poi.ss.usermodel.Row; import org.apache.poi.ss.usermodel.Sheet; import org.apache.poi.ss.usermodel.Workbook; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import java.io.IOException; import java.lang.reflect.Field; import java.lang.reflect.InvocationTargetException; import java.util.List; import java.util.Map; /** * @author godcheese [godcheese@outlook.com] * @date 2018-02-22 */ public class ExportByExcelUtil { private static final Logger LOGGER = LoggerFactory.getLogger(ExportByExcelUtil.class); private static final String DEFAULT_KEY = "default"; private static final String EXPORT_HANDLER = "exportHandler"; private static final String IMPORT_HANDLER = "importHandler"; private ExportByExcelUtil() { } /** * 实体导出数据成 Excel 表 * * @param httpServletRequest httpServletRequest * @param httpServletResponse httpServletResponse * @param objectList objectList * @param clazz clazz * @param exportFilename exportFilename * @throws BaseResponseException */ public static void exportEntity(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, List objectList, Class clazz, String exportFilename) throws BaseResponseException { try (Workbook workbook = new HSSFWorkbook()) { Sheet sheet = workbook.createSheet(); Row row = sheet.createRow(0); int fieldIndex = 0; Field[] fields = clazz.getDeclaredFields(); for (Field field : fields) { ExportByExcel annotation = field.getAnnotation(ExportByExcel.class); if (annotation != null) { if (!annotation.exportIgnore()) { String name = annotation.name(); if ("".equals(name)) { name = annotation.value(); } Cell cell1 = row.createCell(fieldIndex); cell1.setCellValue(name); fieldIndex++; } } } int rowIndex = 1; for (Object object : objectList) { row = sheet.createRow(rowIndex); ExportByExcelUtil.exportFieldValue(row, object); rowIndex++; } ExcelUtil.read2003AndDownloadExportExcel(httpServletRequest, httpServletResponse, workbook, exportFilename); } catch (IOException e) { e.printStackTrace(); throw new BaseResponseException("导出失败"); } catch (IllegalAccessException | InvocationTargetException | NoSuchMethodException | InstantiationException e) { e.printStackTrace(); } } /** * @param row Row * @param entity Object * @throws IllegalAccessException IllegalAccessException * @throws NoSuchMethodException NoSuchMethodException * @throws InvocationTargetException InvocationTargetException * @throws InstantiationException InstantiationException */ private static void exportFieldValue(Row row, Object entity) throws IllegalAccessException, NoSuchMethodException, InvocationTargetException, InstantiationException { Object value; Field[] fields = entity.getClass().getDeclaredFields(); int fieldIndex = 0; for (Field field : fields) { ExportByExcel exportByExcel = field.getAnnotation(ExportByExcel.class); if (exportByExcel != null) { if (!exportByExcel.exportIgnore()) { field.setAccessible(true); Cell cell = row.createCell(fieldIndex); // 导出所有值时自动调用 handler value = ClassUtil.invokeMethod(exportByExcel.handler(), EXPORT_HANDLER, field.get(entity), Object.class); // 获取字段值 if (value == null) { value = field.get(entity); } cell.setCellValue(String.valueOf(value)); fieldIndex++; } } } } /** * 将实例化的实体遍历赋值 * * @param entity T * @param map Map * @param * @return T T * @throws NoSuchMethodException NoSuchMethodException * @throws InstantiationException InstantiationException * @throws IllegalAccessException IllegalAccessException * @throws InvocationTargetException InvocationTargetException */ public static T importEntity(T entity, Map map) throws NoSuchMethodException, InstantiationException, IllegalAccessException, InvocationTargetException { Field[] fields = entity.getClass().getDeclaredFields(); int index = 0; for (Field field : fields) { field.setAccessible(true); ExportByExcel exportByExcel; if ((exportByExcel = field.getAnnotation(ExportByExcel.class)) != null) { if (!exportByExcel.importIgnore()) { Cell cell = map.get(index); String cellValue = cell.getStringCellValue(); // 导入所有值时自动调用 handler Object fieldValue = ClassUtil.invokeMethod(exportByExcel.handler(), IMPORT_HANDLER, cellValue, Object.class); // 给实体字段赋值 Class typeClass = field.getType(); if (fieldValue != null) { if (typeClass.equals(Long.class)) { field.set(entity, Long.valueOf((String) fieldValue)); } else if (typeClass.equals(Integer.class)) { field.set(entity, Integer.valueOf((String) fieldValue)); } else if (typeClass.equals(Double.class)) { field.set(entity, Double.valueOf((String) fieldValue)); } else if (typeClass.equals(Boolean.class)) { field.set(entity, Boolean.valueOf((String) fieldValue)); } else { field.set(entity, fieldValue); } } index++; } } } return entity; } } ================================================ FILE: src/main/java/com/godcheese/nimrod/common/exportbyexcel/IsOrNotExportByExcelHandler.java ================================================ package com.godcheese.nimrod.common.exportbyexcel; import com.godcheese.nimrod.common.others.SpringContextUtil; import com.godcheese.nimrod.system.entity.DictionaryEntity; import com.godcheese.nimrod.system.service.DictionaryService; import com.godcheese.nimrod.system.service.impl.DictionaryServiceImpl; import java.util.List; /** * @author godcheese [godcheese@outlook.com] * @date 2019-01-09 */ public class IsOrNotExportByExcelHandler extends ExportByExcelHandler { private List dictionaryEntityList; public IsOrNotExportByExcelHandler() { DictionaryService dictionaryService = (DictionaryService) SpringContextUtil.getBean(DictionaryServiceImpl.class); dictionaryEntityList = dictionaryService.get("IS_OR_NOT"); } @Override public Object exportHandler(Object object) { for (DictionaryEntity dictionaryEntity : dictionaryEntityList) { if (dictionaryEntity.getValue().equals(String.valueOf(object))) { return dictionaryEntity.getValueName(); } } return object; } @Override public Object importHandler(Object object) { for (DictionaryEntity dictionaryEntity : dictionaryEntityList) { if (dictionaryEntity.getValueName().equals(object)) { return dictionaryEntity.getValue(); } } return object; } } ================================================ FILE: src/main/java/com/godcheese/nimrod/common/exportbyexcel/SimpleDateFormatExportByExcelHandler.java ================================================ package com.godcheese.nimrod.common.exportbyexcel; import com.godcheese.tile.util.DateUtil; import java.text.ParseException; import java.text.SimpleDateFormat; /** * @author godcheese [godcheese@outlook.com] * @date 2019-01-09 */ public class SimpleDateFormatExportByExcelHandler extends ExportByExcelHandler { @Override public Object exportHandler(Object object) { SimpleDateFormat simpleDateFormat = new SimpleDateFormat(DateUtil.DEFAULT_DATE_FORMAT_PATTERN); if (object != null) { return simpleDateFormat.format(object); } else { return ""; } } @Override public Object importHandler(Object object) { SimpleDateFormat simpleDateFormat = new SimpleDateFormat(DateUtil.DEFAULT_DATE_FORMAT_PATTERN); try { return simpleDateFormat.parse((String) object); } catch (ParseException e) { e.printStackTrace(); } return null; } } ================================================ FILE: src/main/java/com/godcheese/nimrod/common/interceptor/WebInterceptor.java ================================================ package com.godcheese.nimrod.common.interceptor; import com.godcheese.nimrod.common.others.Common; import com.godcheese.nimrod.common.security.SimpleUser; import com.godcheese.nimrod.common.security.SimpleUserDetailsServiceImpl; import com.godcheese.nimrod.user.service.UserService; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.servlet.HandlerInterceptor; import org.springframework.web.servlet.ModelAndView; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import java.util.HashMap; import java.util.Map; import static com.godcheese.nimrod.common.security.SimpleUserDetailsServiceImpl.SYSTEM_ADMIN; /** * @author godcheese [godcheese@outlook.com] * @date 2018-02-22 */ public class WebInterceptor implements HandlerInterceptor { private static final Logger LOGGER = LoggerFactory.getLogger(WebInterceptor.class); private static final String HOST_KEY = "_host"; private static final String CONTEXT_PATH_KEY = "_contextPath"; private static final String USER_KEY = "_user"; @Autowired private UserService userService; @Override public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception { return true; } @Override public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception { if (modelAndView != null) { modelAndView.addObject("SYSTEM_ADMIN", SYSTEM_ADMIN); String contextPath = Common.Host.contextPath; modelAndView.addObject(CONTEXT_PATH_KEY, (contextPath != null && !"".equals(contextPath)) ? contextPath : "/"); SimpleUser simpleUser = SimpleUserDetailsServiceImpl.getCurrentSimpleUser(request); Map userMap = new HashMap<>(2); userMap.put("id", null); userMap.put("username", null); if (simpleUser != null) { userMap.put("id", simpleUser.getId()); userMap.put("username", simpleUser.getUsername()); userMap.put("avatar", userService.getOne(simpleUser.getId()).getAvatar()); } modelAndView.addObject(USER_KEY, userMap); String scheme = Common.Host.scheme; String port = Common.Host.port; String ip = Common.Host.ip; String local = scheme + "://localhost" + ":" + port + contextPath + "/"; String network = scheme + "://" + ip + ":" + port + contextPath + "/"; String host = network; if (ip == null) { host = local; } modelAndView.addObject(HOST_KEY, host); } } @Override public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception { } } ================================================ FILE: src/main/java/com/godcheese/nimrod/common/interceptor/WebMvcConfiguration.java ================================================ package com.godcheese.nimrod.common.interceptor; import com.godcheese.nimrod.common.Url; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.web.servlet.config.annotation.InterceptorRegistry; import org.springframework.web.servlet.config.annotation.WebMvcConfigurer; /** * @author godcheese [godcheese@outlook.com] * @date 2018-02-22 */ @Configuration public class WebMvcConfiguration implements WebMvcConfigurer { @Bean public WebInterceptor webInterceptor() { return new WebInterceptor(); } @Override public void addInterceptors(InterceptorRegistry registry) { // WebInterceptor registry.addInterceptor(webInterceptor()) .addPathPatterns(Url.ALL_PATH_PATTERN) .excludePathPatterns(Url.STATIC); } } ================================================ FILE: src/main/java/com/godcheese/nimrod/common/operationlog/OperationLog.java ================================================ package com.godcheese.nimrod.common.operationlog; import org.springframework.core.annotation.AliasFor; import java.lang.annotation.*; /** * @author godcheese [godcheese@outlook.com] * @date 2018-02-22 */ @Documented @Retention(RetentionPolicy.RUNTIME) @Target(ElementType.METHOD) public @interface OperationLog { /** * 操作内容 * * @return String */ @AliasFor("operation") String value() default ""; /** * 操作内容 * * @return String */ @AliasFor("value") String operation() default ""; /** * 操作类型 * * @return OperationLogType */ OperationLogType type() default OperationLogType.PAGE; } ================================================ FILE: src/main/java/com/godcheese/nimrod/common/operationlog/OperationLogAspect.java ================================================ package com.godcheese.nimrod.common.operationlog; import com.fasterxml.jackson.core.JsonProcessingException; import com.godcheese.nimrod.common.others.Common; import com.godcheese.nimrod.common.security.SimpleUserDetailsServiceImpl; import com.godcheese.nimrod.system.entity.OperationLogEntity; import com.godcheese.nimrod.user.entity.UserEntity; import com.godcheese.tile.util.ClientUtil; import org.aspectj.lang.JoinPoint; import org.aspectj.lang.annotation.*; import org.aspectj.lang.reflect.MethodSignature; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.context.ApplicationContext; import org.springframework.stereotype.Component; import org.springframework.web.context.request.RequestContextHolder; import org.springframework.web.context.request.ServletRequestAttributes; import javax.servlet.http.Cookie; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import javax.servlet.http.HttpSession; import java.io.PrintWriter; import java.io.StringWriter; import java.lang.reflect.Method; import java.time.Instant; import java.util.*; /** * @author godcheese [godcheese@outlook.com] * @date 2019-07-18 */ @Aspect @Component public class OperationLogAspect { private static final Logger LOGGER = LoggerFactory.getLogger(OperationLogAspect.class); private OperationLogEntity operationLogEntity = new OperationLogEntity(); @Autowired private ApplicationContext applicationContext; @Autowired private Common common; @Autowired private SimpleUserDetailsServiceImpl simpleUserDetailsService; @Pointcut("@annotation(com.godcheese.nimrod.common.operationlog.OperationLog)") public void operationLogAspect() { } @Before(value = "operationLogAspect()") public void before(JoinPoint joinpoint) throws JsonProcessingException { long beginTime = Instant.now().toEpochMilli(); HttpServletRequest httpServletRequest = ((ServletRequestAttributes) Objects.requireNonNull(RequestContextHolder.getRequestAttributes())).getRequest(); HttpServletResponse httpServletResponse = ((ServletRequestAttributes) Objects.requireNonNull(RequestContextHolder.getRequestAttributes())).getResponse(); UserEntity userEntity = simpleUserDetailsService.getUserEntity(); if (userEntity != null) { operationLogEntity.setUserId(userEntity.getId()); } operationLogEntity.setIpAddress(ClientUtil.getClientIp(httpServletRequest)); String operation = ""; MethodSignature methodSignature = (MethodSignature) joinpoint.getSignature(); Method method = methodSignature.getMethod(); OperationLog operationLog = method.getAnnotation(OperationLog.class); if (operationLog != null) { operationLogEntity.setOperationType(operationLog.type().value()); operation = operationLog.value(); if ("".equals(operation)) { operation = operationLog.operation(); } } operationLogEntity.setOperation(operation); operationLogEntity.setHandler(joinpoint.getSignature().toLongString()); StringBuffer requestUrl = httpServletRequest.getRequestURL(); if (requestUrl != null) { operationLogEntity.setRequestUrl(requestUrl.toString()); } operationLogEntity.setRequestMethod(httpServletRequest.getMethod()); Enumeration parameterNames = httpServletRequest.getParameterNames(); Map map = new HashMap<>(6); while (parameterNames.hasMoreElements()) { String name = parameterNames.nextElement(); Object parameter = httpServletRequest.getParameter(name); map.put(name, parameter); } operationLogEntity.setRequestParameter(common.objectToJson(map)); operationLogEntity.setAcceptLanguage(httpServletRequest.getHeader("Accept-Language")); operationLogEntity.setReferer(httpServletRequest.getHeader("Referer")); operationLogEntity.setUserAgent(httpServletRequest.getHeader("User-Agent")); HttpSession httpSession = httpServletRequest.getSession(); if (httpSession != null) { operationLogEntity.setSessionId(httpSession.getId()); } Cookie[] cookies = httpServletRequest.getCookies(); map = new HashMap<>(4); if (cookies != null) { for (Cookie cookie : cookies) { map.put(cookie.getName(), cookie.getValue()); } } operationLogEntity.setCookie(common.objectToJson(map)); operationLogEntity.setStatus(String.valueOf(httpServletResponse.getStatus())); operationLogEntity.setGmtCreated(new Date()); operationLogEntity.setConsumingTime(Instant.now().toEpochMilli() - beginTime); } @AfterReturning(pointcut = "operationLogAspect()", returning = "returning") public void afterReturning(Object returning) { LOGGER.info("returning={}", returning); applicationContext.publishEvent(new OperationLogEvent(operationLogEntity)); } @AfterThrowing(pointcut = "operationLogAspect()", throwing = "throwing") public void afterThrowing(Throwable throwing) { StringWriter stringWriter = new StringWriter(); try (PrintWriter printWriter = new PrintWriter(stringWriter)) { throwing.printStackTrace(printWriter); } operationLogEntity.setStackTrace(stringWriter.toString()); applicationContext.publishEvent(new OperationLogEvent(operationLogEntity)); } } ================================================ FILE: src/main/java/com/godcheese/nimrod/common/operationlog/OperationLogEvent.java ================================================ package com.godcheese.nimrod.common.operationlog; import com.godcheese.nimrod.system.entity.OperationLogEntity; import org.springframework.context.ApplicationEvent; import java.io.Serializable; /** * @author godcheese [godcheese@outlook.com] * @date 2019-07-17 */ public class OperationLogEvent extends ApplicationEvent implements Serializable { private static final long serialVersionUID = -5144993159534622159L; public OperationLogEvent(OperationLogEntity source) { super(source); } } ================================================ FILE: src/main/java/com/godcheese/nimrod/common/operationlog/OperationLogListener.java ================================================ package com.godcheese.nimrod.common.operationlog; import com.godcheese.nimrod.system.entity.OperationLogEntity; import com.godcheese.nimrod.system.service.OperationLogService; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.context.event.EventListener; import org.springframework.scheduling.annotation.Async; import org.springframework.stereotype.Component; /** * @author godcheese [godcheese@outlook.com] * @date 2019-07-17 */ @Component public class OperationLogListener { @Autowired private OperationLogService operationLogService; @Async @EventListener(OperationLogEvent.class) public void handleEvent(OperationLogEvent event) { OperationLogEntity operationLogEntity = (OperationLogEntity) event.getSource(); operationLogService.addOne(operationLogEntity); } } ================================================ FILE: src/main/java/com/godcheese/nimrod/common/operationlog/OperationLogType.java ================================================ package com.godcheese.nimrod.common.operationlog; /** * @author godcheese [godcheese@outlook.com] * @date 2018-02-22 */ public enum OperationLogType { /** * 页面访问 */ PAGE(0), /** * API 调用 */ API(1), ; private int value; OperationLogType(int value) { this.value = value; } public int value() { return this.value; } } ================================================ FILE: src/main/java/com/godcheese/nimrod/common/others/BaseEntityAdapter.java ================================================ package com.godcheese.nimrod.common.others; import com.godcheese.nimrod.user.entity.DepartmentEntity; import com.godcheese.nimrod.user.entity.RoleEntity; import java.util.List; /** * @author godcheese [godcheese@outlook.com] * @date 2019-09-30 */ public abstract class BaseEntityAdapter { /** * 用户名 */ private String username; /** * 角色 */ private List roles; /** * 部门 */ private List departments; /** * 是否已关联 */ private Integer isAssociated; /** * 是否已授权 */ private Integer isGranted; public String getUsername() { return username; } public void setUsername(String username) { this.username = username; } public List getRoles() { return roles; } public void setRoles(List roles) { this.roles = roles; } public List getDepartments() { return departments; } public void setDepartments(List departments) { this.departments = departments; } public Integer getIsAssociated() { return isAssociated; } public void setIsAssociated(Integer isAssociated) { this.isAssociated = isAssociated; } public Integer getIsGranted() { return isGranted; } public void setIsGranted(Integer isGranted) { this.isGranted = isGranted; } } ================================================ FILE: src/main/java/com/godcheese/nimrod/common/others/Common.java ================================================ package com.godcheese.nimrod.common.others; import com.fasterxml.jackson.core.JsonProcessingException; import com.fasterxml.jackson.databind.ObjectMapper; import com.godcheese.nimrod.common.properties.AppProperties; import com.godcheese.nimrod.common.properties.UpdatableMultipartConfigElement; import com.godcheese.nimrod.mail.service.MailService; import com.godcheese.nimrod.system.service.DictionaryService; import com.godcheese.tile.util.ClientUtil; import com.godcheese.tile.util.MBeanServerUtil; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.core.io.ClassPathResource; import org.springframework.stereotype.Component; import org.springframework.util.unit.DataSize; import org.springframework.web.context.WebApplicationContext; import javax.management.*; import java.io.IOException; import java.util.Properties; import java.util.TimeZone; /** * @author godcheese [godcheese@outlook.com] * @date 2018-02-22 */ @Component public class Common { private static final Logger LOGGER = LoggerFactory.getLogger(Common.class); @Autowired private WebApplicationContext webApplicationContext; @Autowired private MailService mailService; @Autowired private DictionaryService dictionaryService; @Autowired private AppProperties appProperties; @Autowired(required = false) private UpdatableMultipartConfigElement updatableMultipartConfigElement; public void initialize() { // 首次启动加载数据字典到 ServletContext 内存 dictionaryService.addDictionaryToServletContext(); mailService.initialize(); // 将待发送的邮件重新加入到发送队列 mailService.retry(false); String maxFileSize = (String) dictionaryService.get("FILE", "MAX_FILE_SIZE"); String maxRequestSize = (String) dictionaryService.get("FILE", "MAX_REQUEST_SIZE"); if(maxFileSize != null) { updatableMultipartConfigElement.setMaxFileSize(DataSize.parse(maxFileSize).toBytes()); } if(maxRequestSize != null) { updatableMultipartConfigElement.setMaxRequestSize(DataSize.parse(maxRequestSize).toBytes()); } String timeZoneId = (String) dictionaryService.get("SYSTEM", "TIME_ZONE_ID"); if(timeZoneId != null) { TimeZone.setDefault(TimeZone.getTimeZone(timeZoneId)); } // Calendar.getInstance(TimeZone.getTimeZone()); // DateFormat.getDateTimeInstance().setTimeZone(TimeZone.getTimeZone(timeZoneId)); } public static class Host { public static String scheme = null; public static String port = null; public static String contextPath = null; public static String ip = null; public static String serverInfo = null; } public void getHost() { getHost(webApplicationContext); } public static void getHost(WebApplicationContext webApplicationContext) { try { Host.ip = ClientUtil.getLocalHostLANAddress().getHostAddress(); } catch (Exception e) { e.printStackTrace(); } Host.serverInfo = webApplicationContext.getServletContext().getServerInfo(); try { Host.scheme = MBeanServerUtil.getScheme(); Host.port = MBeanServerUtil.getPort(); } catch (MalformedObjectNameException | AttributeNotFoundException | InstanceNotFoundException | MBeanException | ReflectionException e) { e.printStackTrace(); } Host.contextPath = webApplicationContext.getServletContext().getContextPath(); } /** * 对象转 JSON * * @param object Object * @return String * @throws JsonProcessingException JsonProcessingException */ public String objectToJson(Object object) throws JsonProcessingException { return new ObjectMapper().writeValueAsString(object); } /** * JSON 转对象 * * @param json JSON * @param clazz Class * @param T * @return T * @throws IOException IOException */ public T jsonToObject(String json, Class clazz) throws IOException { return new ObjectMapper().readValue(json, clazz); } public static String trimSlash(String string) { if (string != null) { int slashIndex = string.indexOf("/"); if (slashIndex == 0 && string.length() > 1) { while (true) { string = string.substring(1); if (string.length() >= 1) { slashIndex = string.indexOf("/"); if (slashIndex != 0) { return string; } } } } else { return string; } } return null; } public Object i18n(String key, Object... params) { ClassPathResource classPathResource = new ClassPathResource("i18n/" + appProperties.getI18n() + ".properties"); Properties properties = new Properties(); try { properties.load(classPathResource.getInputStream()); } catch (IOException e) { e.printStackTrace(); } if (params.length > 0) { return String.format((String) properties.get(key), params); } else { return properties.get(key); } } public Object i18n(String key) { return i18n(key, new Object[]{}); } /** * 默认区域/语言 */ // private static final Locale LOCALE = Locale.CHINA; /** * 默认时区 */ // private static final TimeZone DEFAULT_TIME_ZONE = TimeZone.getTimeZone("GMT+8"); /** * 默认日期格式 */ // private static final String DEFAULT_DATE_FORMAT_PATTERN = "yyyy-MM-dd HH:mm:ss"; // public TimeZone getSystemTimeZone() { // String timeZoneId = (String) dictionaryService.get("SYSTEM", "TIME_ZONE_ID"); // if (timeZoneId != null) { // TimeZone timeZone = TimeZone.getTimeZone(timeZoneId); // if (!DEFAULT_TIME_ZONE.hasSameRules(timeZone)) { // return timeZone; // } // } // return DEFAULT_TIME_ZONE; // } // // // private ObjectMapper getObjectMapper() { // String dateFormatPattern = (String) dictionaryService.get("SYSTEM", "DATE_FORMAT_PATTERN"); // String language = (String) dictionaryService.get("SYSTEM", "LANGUAGE"); // String county = (String) dictionaryService.get("SYSTEM", "COUNTY"); // LOGGER.info("dateFormatPattern1={}", dateFormatPattern); // ObjectMapper objectMapper = new ObjectMapper(); // objectMapper.setTimeZone(getSystemTimeZone()); // objectMapper.setDateFormat(new SimpleDateFormat(dateFormatPattern != null ? dateFormatPattern : DEFAULT_DATE_FORMAT_PATTERN)); // objectMapper.setLocale((language != null && county != null) ? new Locale(language, county) : LOCALE); // return objectMapper; // // // public abstract class CommonEntityAdapter { // /** // * 用户名 // */ // private String username; // /** // * 角色 // */ // private List roles; // // /** // * 部门 // */ // private List departments; // // /** // * 是否已关联 // */ // private Integer isAssociated; // // /** // * 是否已授权 // */ // private Integer isGranted; // // public String getUsername() { // return username; // } // // public void setUsername(String username) { // this.username = username; // } // // public List getRoles() { // return roles; // } // // public void setRoles(List roles) { // this.roles = roles; // } // // public List getDepartments() { // return departments; // } // // public void setDepartments(List departments) { // this.departments = departments; // } // // public Integer getIsAssociated() { // return isAssociated; // } // // public void setIsAssociated(Integer isAssociated) { // this.isAssociated = isAssociated; // } // // public Integer getIsGranted() { // return isGranted; // } // // public void setIsGranted(Integer isGranted) { // this.isGranted = isGranted; // } // } } ================================================ FILE: src/main/java/com/godcheese/nimrod/common/others/FailureEntity.java ================================================ package com.godcheese.nimrod.common.others; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; /** * @author godcheese [godcheese@outlook.com] * @date 2018-02-22 */ @Component public class FailureEntity implements com.godcheese.tile.web.http.FailureEntity { private static final String NULL = "null"; private String message; private int code; @Autowired private Common common; public FailureEntity i18n(String key, Object... params) { String message = String.valueOf(common.i18n(key + ".message", params)); String code = String.valueOf(common.i18n(key + ".code")); int code2 = 0; if (code != null && !"".equals(code) && !NULL.equals(code)) { code2 = Integer.parseInt(code); } return new FailureEntity(message, code2); } public FailureEntity i18n(String key) { return i18n(key, new Object() { }); } @Override public String getMessage() { return message; } @Override public int getCode() { return code; } @Override public long getTimestamp() { return System.currentTimeMillis(); } public FailureEntity() { } public FailureEntity(String message, int code) { this.message = message; this.code = code; } } ================================================ FILE: src/main/java/com/godcheese/nimrod/common/others/SpringContextUtil.java ================================================ package com.godcheese.nimrod.common.others; import org.springframework.beans.BeansException; import org.springframework.beans.factory.config.BeanDefinition; import org.springframework.beans.factory.support.BeanDefinitionBuilder; import org.springframework.beans.factory.support.BeanDefinitionRegistry; import org.springframework.beans.factory.support.DefaultListableBeanFactory; import org.springframework.context.ApplicationContext; import org.springframework.context.ApplicationContextAware; import org.springframework.context.ConfigurableApplicationContext; import org.springframework.stereotype.Component; /** * @author godcheese [godcheese@outlook.com] * @date 2019-01-10 */ @Component public class SpringContextUtil implements ApplicationContextAware { private static ApplicationContext applicationContext; @Override public void setApplicationContext(ApplicationContext applicationContext) throws BeansException { if (SpringContextUtil.applicationContext == null) { SpringContextUtil.applicationContext = applicationContext; } } public static ApplicationContext getApplicationContext() { return applicationContext; } public static Object getBean(String name) { return getApplicationContext().getBean(name); } public static Object getBean(String name, Class clazz) { return getApplicationContext().getBean(name, clazz); } public static Object getBean(Class clazz) { return getApplicationContext().getBean(clazz); } public static void registerBean(String beanId, String className) { ConfigurableApplicationContext configurableContext = (ConfigurableApplicationContext) getApplicationContext(); BeanDefinitionRegistry beanDefinitionRegistry = (DefaultListableBeanFactory) configurableContext.getBeanFactory(); BeanDefinitionBuilder beanDefinitionBuilder = BeanDefinitionBuilder.genericBeanDefinition(className); // get the BeanDefinition BeanDefinition beanDefinition = beanDefinitionBuilder.getBeanDefinition(); // register the bean beanDefinitionRegistry.registerBeanDefinition(beanId, beanDefinition); } } ================================================ FILE: src/main/java/com/godcheese/nimrod/common/properties/AppProperties.java ================================================ package com.godcheese.nimrod.common.properties; import org.springframework.boot.context.properties.ConfigurationProperties; import org.springframework.stereotype.Component; import java.util.ArrayList; import java.util.Collections; import java.util.List; /** * @author godcheese [godcheese@outlook.com] * @date 2018-02-22 */ @Component @ConfigurationProperties(prefix = "app", ignoreUnknownFields = true, ignoreInvalidFields = true) public class AppProperties { private String name; private String version; private List systemAdminRole = new ArrayList<>(Collections.singletonList("SYSTEM_ADMIN")); private String[] permitUrl; private String i18n = "zh_cn"; public String getName() { return name; } public void setName(String name) { this.name = name; } public String getVersion() { return version; } public void setVersion(String version) { this.version = version; } public List getSystemAdminRole() { return systemAdminRole; } public void setSystemAdminRole(List systemAdminRole) { this.systemAdminRole = systemAdminRole; } public String[] getPermitUrl() { return permitUrl; } public void setPermitUrl(String[] permitUrl) { this.permitUrl = permitUrl; } public String getI18n() { return i18n != null ? i18n : "zh_cn"; } public void setI18n(String i18n) { this.i18n = i18n; } } ================================================ FILE: src/main/java/com/godcheese/nimrod/common/properties/LogProperties.java ================================================ package com.godcheese.nimrod.common.properties; import org.springframework.boot.context.properties.ConfigurationProperties; import org.springframework.stereotype.Component; /** * @author godcheese [godcheese@outlook.com] * @date 2018-02-22 */ @Component @ConfigurationProperties(prefix = "log", ignoreUnknownFields = true, ignoreInvalidFields = true) public class LogProperties { /** * 日志存储目录 */ private String dir = "../"; /** * 日志文件保存的最大天数 */ private String maxHistory = "30"; /** * 日志文件的最大大小 */ private String maxFileSize = "10MB"; /** * 日志文件总量大小 */ private String totalSizeCap = "2GB"; public String getDir() { return dir; } public void setDir(String dir) { this.dir = dir; } public String getMaxHistory() { return maxHistory; } public void setMaxHistory(String maxHistory) { this.maxHistory = maxHistory; } public String getMaxFileSize() { return maxFileSize; } public void setMaxFileSize(String maxFileSize) { this.maxFileSize = maxFileSize; } public String getTotalSizeCap() { return totalSizeCap; } public void setTotalSizeCap(String totalSizeCap) { this.totalSizeCap = totalSizeCap; } } ================================================ FILE: src/main/java/com/godcheese/nimrod/common/properties/MultipartProperties.java ================================================ package com.godcheese.nimrod.common.properties; import org.springframework.boot.context.properties.EnableConfigurationProperties; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import javax.servlet.MultipartConfigElement; /** * @author godcheese [godcheese@outlook.com] * @date 2019-10-24 */ @Configuration @EnableConfigurationProperties(org.springframework.boot.autoconfigure.web.servlet.MultipartProperties.class) public class MultipartProperties { private final org.springframework.boot.autoconfigure.web.servlet.MultipartProperties multipartProperties; public MultipartProperties(org.springframework.boot.autoconfigure.web.servlet.MultipartProperties multipartProperties) { this.multipartProperties = multipartProperties; } @Bean public MultipartConfigElement multipartConfigElement() { MultipartConfigElement multipartConfigElement = multipartProperties.createMultipartConfig(); return new UpdatableMultipartConfigElement(multipartConfigElement.getLocation(), multipartConfigElement.getMaxFileSize(), multipartConfigElement.getMaxRequestSize(), multipartConfigElement.getFileSizeThreshold()); } } ================================================ FILE: src/main/java/com/godcheese/nimrod/common/properties/UpdatableMultipartConfigElement.java ================================================ package com.godcheese.nimrod.common.properties; import javax.servlet.MultipartConfigElement; /** * @author godcheese [godcheese@outlook.com] * @date 2019-10-24 */ public class UpdatableMultipartConfigElement extends MultipartConfigElement { private volatile long maxFileSize = -1; private volatile long maxRequestSize = -1; public UpdatableMultipartConfigElement(String location, long maxFileSize, long maxRequestSize, int fileSizeThreshold) { super(location, maxFileSize, maxRequestSize, fileSizeThreshold); } @Override public long getMaxFileSize() { return maxFileSize == -1 ? super.getMaxFileSize() : maxFileSize; } public void setMaxFileSize(long maxFileSize) { this.maxFileSize = maxFileSize; } @Override public long getMaxRequestSize() { return maxRequestSize == -1 ? super.getMaxRequestSize() : maxRequestSize; } public void setMaxRequestSize(long maxRequestSize) { this.maxRequestSize = maxRequestSize; } } ================================================ FILE: src/main/java/com/godcheese/nimrod/common/security/AuthenticationFailureHandler.java ================================================ package com.godcheese.nimrod.common.security; import com.godcheese.nimrod.common.others.Common; import com.godcheese.nimrod.common.others.FailureEntity; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.http.HttpStatus; import org.springframework.http.MediaType; import org.springframework.security.authentication.BadCredentialsException; import org.springframework.security.authentication.DisabledException; import org.springframework.security.core.AuthenticationException; import org.springframework.stereotype.Component; import javax.servlet.ServletException; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import java.io.IOException; import java.io.PrintWriter; import java.nio.charset.StandardCharsets; /** * @author godcheese [godcheese@outlook.com] * @date 2018-02-22 */ @Component public class AuthenticationFailureHandler implements org.springframework.security.web.authentication.AuthenticationFailureHandler { private static final Logger LOGGER = LoggerFactory.getLogger(AuthenticationFailureHandler.class); @Autowired private Common common; @Autowired private FailureEntity failureEntity; @Override public void onAuthenticationFailure(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, AuthenticationException e) throws IOException, ServletException { httpServletResponse.setStatus(HttpStatus.NOT_FOUND.value()); httpServletResponse.setContentType(MediaType.APPLICATION_JSON_VALUE); httpServletResponse.setCharacterEncoding(StandardCharsets.UTF_8.name()); PrintWriter printWriter = httpServletResponse.getWriter(); // 检查 e 是否为验证码错误类 if (e instanceof VerifyCodeFilter.VerifyCodeCheckException) { printWriter.write(common.objectToJson(new FailureEntity(e.getMessage(), 0))); } else if (e instanceof BadCredentialsException) { printWriter.write(common.objectToJson(failureEntity.i18n("user.login_fail_account_or_password_error"))); } else if (e instanceof DisabledException) { LOGGER.info("e.getMessage={}", e.getMessage()); printWriter.write(common.objectToJson(failureEntity.i18n("user.login_fail_account_or_password_error"))); } e.printStackTrace(); printWriter.flush(); printWriter.close(); } } ================================================ FILE: src/main/java/com/godcheese/nimrod/common/security/AuthenticationSuccessHandler.java ================================================ package com.godcheese.nimrod.common.security; import com.godcheese.nimrod.common.others.Common; import com.godcheese.tile.web.http.SuccessEntity; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.http.HttpStatus; import org.springframework.http.MediaType; import org.springframework.security.core.Authentication; import org.springframework.stereotype.Component; import javax.servlet.ServletException; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import java.io.IOException; import java.io.PrintWriter; import java.nio.charset.StandardCharsets; /** * @author godcheese [godcheese@outlook.com] * @date 2018-02-22 */ @Component public class AuthenticationSuccessHandler implements org.springframework.security.web.authentication.AuthenticationSuccessHandler { @Autowired private Common common; @Override public void onAuthenticationSuccess(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, Authentication authentication) throws IOException, ServletException { SimpleUser simpleUser = (SimpleUser) authentication.getPrincipal(); httpServletResponse.setStatus(HttpStatus.OK.value()); httpServletResponse.setContentType(MediaType.APPLICATION_JSON_VALUE); httpServletResponse.setCharacterEncoding(StandardCharsets.UTF_8.name()); PrintWriter printWriter = httpServletResponse.getWriter(); printWriter.write(common.objectToJson(new SuccessEntity(simpleUser))); printWriter.flush(); printWriter.close(); } } ================================================ FILE: src/main/java/com/godcheese/nimrod/common/security/LogoutSuccessHandler.java ================================================ package com.godcheese.nimrod.common.security; import com.godcheese.nimrod.common.others.Common; import com.godcheese.tile.web.http.SuccessEntity; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.http.HttpStatus; import org.springframework.http.MediaType; import org.springframework.security.core.Authentication; import org.springframework.stereotype.Component; import javax.servlet.ServletException; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import java.io.IOException; import java.io.PrintWriter; import java.nio.charset.StandardCharsets; /** * @author godcheese [godcheese@outlook.com] * @date 2019-01-07 */ @Component public class LogoutSuccessHandler implements org.springframework.security.web.authentication.logout.LogoutSuccessHandler { private static final Logger LOGGER = LoggerFactory.getLogger(LogoutSuccessHandler.class); @Autowired private Common common; @Override public void onLogoutSuccess(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, Authentication authentication) throws IOException, ServletException { httpServletResponse.setStatus(HttpStatus.OK.value()); httpServletResponse.setContentType(MediaType.APPLICATION_JSON_VALUE); httpServletResponse.setCharacterEncoding(StandardCharsets.UTF_8.name()); PrintWriter printWriter = httpServletResponse.getWriter(); printWriter.write(common.objectToJson(new SuccessEntity("注销成功"))); printWriter.flush(); printWriter.close(); } } ================================================ FILE: src/main/java/com/godcheese/nimrod/common/security/SimpleUser.java ================================================ package com.godcheese.nimrod.common.security; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.springframework.security.core.CredentialsContainer; import org.springframework.security.core.GrantedAuthority; import org.springframework.security.core.SpringSecurityCoreVersion; import org.springframework.security.core.authority.AuthorityUtils; import org.springframework.security.core.authority.SimpleGrantedAuthority; import org.springframework.security.crypto.factory.PasswordEncoderFactories; import org.springframework.security.crypto.password.PasswordEncoder; import org.springframework.util.Assert; import java.io.Serializable; import java.util.*; import java.util.function.Function; /** * @author godcheese [godcheese@outlook.com] * @date 2018-02-22 */ public class SimpleUser implements SimpleUserDetails, CredentialsContainer { private static final long serialVersionUID = SpringSecurityCoreVersion.SERIAL_VERSION_UID; private static final Log logger = LogFactory.getLog(SimpleUser.class); // ~ Instance fields // ================================================================================================ private Long id; private String password; private final String username; private final Set authorities; private final boolean accountNonExpired; private final boolean accountNonLocked; private final boolean credentialsNonExpired; private final boolean enabled; // ~ Constructors // =================================================================================================== /** * Calls the more complex constructor with all boolean arguments set to {@code true}. */ public SimpleUser(Long id, String username, String password, Collection authorities) { this(id, username, password, true, true, true, true, authorities); } /** * Construct the SimpleUser with the details required by * {@link org.springframework.security.authentication.dao.DaoAuthenticationProvider}. * * @param username the username presented to the * DaoAuthenticationProvider * @param password the password that should be presented to the * DaoAuthenticationProvider * @param enabled set to true if the user is enabled * @param accountNonExpired set to true if the account has not expired * @param credentialsNonExpired set to true if the credentials have not * expired * @param accountNonLocked set to true if the account is not locked * @param authorities the authorities that should be granted to the caller if they * presented the correct username and password and the user is enabled. Not null. * @throws IllegalArgumentException if a null value was passed either as * a parameter or as an element in the GrantedAuthority collection */ public SimpleUser(Long id, String username, String password, boolean enabled, boolean accountNonExpired, boolean credentialsNonExpired, boolean accountNonLocked, Collection authorities) { if (((username == null) || "".equals(username)) || (password == null)) { throw new IllegalArgumentException( "Cannot pass null or empty values to constructor"); } this.id = id; this.username = username; this.password = password; this.enabled = enabled; this.accountNonExpired = accountNonExpired; this.credentialsNonExpired = credentialsNonExpired; this.accountNonLocked = accountNonLocked; this.authorities = Collections.unmodifiableSet(sortAuthorities(authorities)); } // ~ Methods // ======================================================================================================== @Override public Long getId() { return id; } @Override public Collection getAuthorities() { return authorities; } @Override public String getPassword() { return password; } @Override public String getUsername() { return username; } @Override public boolean isEnabled() { return enabled; } @Override public boolean isAccountNonExpired() { return accountNonExpired; } @Override public boolean isAccountNonLocked() { return accountNonLocked; } @Override public boolean isCredentialsNonExpired() { return credentialsNonExpired; } @Override public void eraseCredentials() { password = null; } private static SortedSet sortAuthorities( Collection authorities) { Assert.notNull(authorities, "Cannot pass a null GrantedAuthority collection"); // Ensure array iteration order is predictable (as per // UserDetails.getAuthorities() contract and SEC-717) SortedSet sortedAuthorities = new TreeSet<>( new SimpleUser.AuthorityComparator()); for (GrantedAuthority grantedAuthority : authorities) { Assert.notNull(grantedAuthority, "GrantedAuthority list cannot contain any null elements"); sortedAuthorities.add(grantedAuthority); } return sortedAuthorities; } private static class AuthorityComparator implements Comparator, Serializable { private static final long serialVersionUID = SpringSecurityCoreVersion.SERIAL_VERSION_UID; @Override public int compare(GrantedAuthority g1, GrantedAuthority g2) { // Neither should ever be null as each entry is checked before adding it to // the set. // If the authority is null, it is a custom authority and should precede // others. if (g2.getAuthority() == null) { return -1; } if (g1.getAuthority() == null) { return 1; } return g1.getAuthority().compareTo(g2.getAuthority()); } } /** * Returns {@code true} if the supplied object is a {@code SimpleUser} instance with the * same {@code username} value. *

* In other words, the objects are equal if they have the same username, representing * the same principal. */ @Override public boolean equals(Object rhs) { if (rhs instanceof SimpleUser) { return username.equals(((SimpleUser) rhs).username); } return false; } /** * Returns the hashcode of the {@code username}. */ @Override public int hashCode() { return username.hashCode(); } @Override public String toString() { StringBuilder sb = new StringBuilder(); sb.append(super.toString()).append(": "); sb.append("Id: ").append(this.id).append("; "); sb.append("Username: ").append(this.username).append("; "); sb.append("Password: [PROTECTED]; "); sb.append("Enabled: ").append(this.enabled).append("; "); sb.append("AccountNonExpired: ").append(this.accountNonExpired).append("; "); sb.append("credentialsNonExpired: ").append(this.credentialsNonExpired) .append("; "); sb.append("AccountNonLocked: ").append(this.accountNonLocked).append("; "); if (!authorities.isEmpty()) { sb.append("Granted Authorities: "); boolean first = true; for (GrantedAuthority auth : authorities) { if (!first) { sb.append(","); } first = false; sb.append(auth); } } else { sb.append("Not granted any authorities"); } return sb.toString(); } public static SimpleUser.SimpleUserBuilder withId(Long id) { return builder().id(id); } /** * Creates a SimpleUserBuilder with a specified user name * * @param username the username to use * @return the SimpleUserBuilder */ public static SimpleUser.SimpleUserBuilder withUsername(String username) { return builder().username(username); } /** * Creates a SimpleUserBuilder * * @return the SimpleUserBuilder */ public static SimpleUser.SimpleUserBuilder builder() { return new SimpleUser.SimpleUserBuilder(); } /** *

* WARNING: This method is considered unsafe for production and is only intended * for sample applications. *

*

* Creates a user and automatically encodes the provided password using * {@code PasswordEncoderFactories.createDelegatingPasswordEncoder()}. For example: *

*
     * 
     * UserDetails user = SimpleUser.withDefaultPasswordEncoder()
     *     .username("user")
     *     .password("password")
     *     .roles("USER")
     *     .build();
     * // outputs {bcrypt}$2a$10$dXJ3SW6G7P50lGmMkkmwe.20cQQubK3.HZWzG3YB1tlRy.fqvM/BG
     * System.out.println(user.getPassword());
     * 
     * 
*

* This is not safe for production (it is intended for getting started experience) * because the password "password" is compiled into the source code and then is * included in memory at the time of creation. This means there are still ways to * recover the plain text password making it unsafe. It does provide a slight * improvement to using plain text passwords since the UserDetails password is * securely hashed. This means if the UserDetails password is accidentally exposed, * the password is securely stored. *

* In a production setting, it is recommended to hash the password ahead of time. * For example: * *

     * 
     * PasswordEncoder encoder = PasswordEncoderFactories.createDelegatingPasswordEncoder();
     * // outputs {bcrypt}$2a$10$dXJ3SW6G7P50lGmMkkmwe.20cQQubK3.HZWzG3YB1tlRy.fqvM/BG
     * // remember the password that is printed out and use in the next step
     * System.out.println(encoder.encode("password"));
     * 
     * 
* *
     * 
     * UserDetails user = SimpleUser.withUsername("user")
     *     .password("{bcrypt}$2a$10$dXJ3SW6G7P50lGmMkkmwe.20cQQubK3.HZWzG3YB1tlRy.fqvM/BG")
     *     .roles("USER")
     *     .build();
     * 
     * 
* * @return a SimpleUserBuilder that automatically encodes the password with the default * PasswordEncoder * @deprecated Using this method is not considered safe for production, but is * acceptable for demos and getting started. For production purposes, ensure the * password is encoded externally. See the method Javadoc for additional details. * There are no plans to remove this support. It is deprecated to indicate * that this is considered insecure for production purposes. */ @Deprecated public static SimpleUser.SimpleUserBuilder withDefaultPasswordEncoder() { logger.warn("SimpleUser.withDefaultPasswordEncoder() is considered unsafe for production and is only intended for sample applications."); PasswordEncoder encoder = PasswordEncoderFactories.createDelegatingPasswordEncoder(); return builder().passwordEncoder(encoder::encode); } public static SimpleUser.SimpleUserBuilder withSimpleUserDetails(SimpleUserDetails simpleUserDetails) { return withId(simpleUserDetails.getId()) .username(simpleUserDetails.getUsername()) .password(simpleUserDetails.getPassword()) .accountExpired(!simpleUserDetails.isAccountNonExpired()) .accountLocked(!simpleUserDetails.isAccountNonLocked()) .authorities(simpleUserDetails.getAuthorities()) .credentialsExpired(!simpleUserDetails.isCredentialsNonExpired()) .disabled(!simpleUserDetails.isEnabled()); } /** * Builds the user to be added. At minimum the username, password, and authorities * should provided. The remaining attributes have reasonable defaults. */ public static class SimpleUserBuilder { private Long id; private String username; private String password; private List authorities; private boolean accountExpired; private boolean accountLocked; private boolean credentialsExpired; private boolean disabled; private Function passwordEncoder = password -> password; /** * Creates a new instance */ private SimpleUserBuilder() { } public SimpleUser.SimpleUserBuilder id(Long id) { Assert.notNull(id, "id cannot be null"); this.id = id; return this; } /** * Populates the username. This attribute is required. * * @param username the username. Cannot be null. * @return the {@link SimpleUser.SimpleUserBuilder} for method chaining (i.e. to populate * additional attributes for this user) */ public SimpleUser.SimpleUserBuilder username(String username) { Assert.notNull(username, "username cannot be null"); this.username = username; return this; } /** * Populates the password. This attribute is required. * * @param password the password. Cannot be null. * @return the {@link SimpleUser.SimpleUserBuilder} for method chaining (i.e. to populate * additional attributes for this user) */ public SimpleUser.SimpleUserBuilder password(String password) { Assert.notNull(password, "password cannot be null"); this.password = password; return this; } /** * Encodes the current password (if non-null) and any future passwords supplied * to {@link #password(String)}. * * @param encoder the encoder to use * @return the {@link SimpleUser.SimpleUserBuilder} for method chaining (i.e. to populate * additional attributes for this user) */ public SimpleUser.SimpleUserBuilder passwordEncoder(Function encoder) { Assert.notNull(encoder, "encoder cannot be null"); this.passwordEncoder = encoder; return this; } /** * Populates the roles. This method is a shortcut for calling * {@link #authorities(String...)}, but automatically prefixes each entry with * "ROLE_". This means the following: * * * builder.roles("USER","ADMIN"); * *

* is equivalent to * * * builder.authorities("ROLE_USER","ROLE_ADMIN"); * * *

* This attribute is required, but can also be populated with * {@link #authorities(String...)}. *

* * @param roles the roles for this user (i.e. USER, ADMIN, etc). Cannot be null, * contain null values or start with "ROLE_" * @return the {@link SimpleUser.SimpleUserBuilder} for method chaining (i.e. to populate * additional attributes for this user) */ public SimpleUser.SimpleUserBuilder roles(String... roles) { List authorities = new ArrayList<>( roles.length); for (String role : roles) { Assert.isTrue(!role.startsWith("ROLE_"), () -> role + " cannot start with ROLE_ (it is automatically added)"); authorities.add(new SimpleGrantedAuthority("ROLE_" + role)); } return authorities(authorities); } /** * Populates the authorities. This attribute is required. * * @param authorities the authorities for this user. Cannot be null, or contain * null values * @return the {@link SimpleUser.SimpleUserBuilder} for method chaining (i.e. to populate * additional attributes for this user) * @see #roles(String...) */ public SimpleUser.SimpleUserBuilder authorities(GrantedAuthority... authorities) { return authorities(Arrays.asList(authorities)); } /** * Populates the authorities. This attribute is required. * * @param authorities the authorities for this user. Cannot be null, or contain * null values * @return the {@link SimpleUser.SimpleUserBuilder} for method chaining (i.e. to populate * additional attributes for this user) * @see #roles(String...) */ public SimpleUser.SimpleUserBuilder authorities(Collection authorities) { this.authorities = new ArrayList<>(authorities); return this; } /** * Populates the authorities. This attribute is required. * * @param authorities the authorities for this user (i.e. ROLE_USER, ROLE_ADMIN, * etc). Cannot be null, or contain null values * @return the {@link SimpleUser.SimpleUserBuilder} for method chaining (i.e. to populate * additional attributes for this user) * @see #roles(String...) */ public SimpleUser.SimpleUserBuilder authorities(String... authorities) { return authorities(AuthorityUtils.createAuthorityList(authorities)); } /** * Defines if the account is expired or not. Default is false. * * @param accountExpired true if the account is expired, false otherwise * @return the {@link SimpleUser.SimpleUserBuilder} for method chaining (i.e. to populate * additional attributes for this user) */ public SimpleUser.SimpleUserBuilder accountExpired(boolean accountExpired) { this.accountExpired = accountExpired; return this; } /** * Defines if the account is locked or not. Default is false. * * @param accountLocked true if the account is locked, false otherwise * @return the {@link SimpleUser.SimpleUserBuilder} for method chaining (i.e. to populate * additional attributes for this user) */ public SimpleUser.SimpleUserBuilder accountLocked(boolean accountLocked) { this.accountLocked = accountLocked; return this; } /** * Defines if the credentials are expired or not. Default is false. * * @param credentialsExpired true if the credentials are expired, false otherwise * @return the {@link SimpleUser.SimpleUserBuilder} for method chaining (i.e. to populate * additional attributes for this user) */ public SimpleUser.SimpleUserBuilder credentialsExpired(boolean credentialsExpired) { this.credentialsExpired = credentialsExpired; return this; } /** * Defines if the account is disabled or not. Default is false. * * @param disabled true if the account is disabled, false otherwise * @return the {@link SimpleUser.SimpleUserBuilder} for method chaining (i.e. to populate * additional attributes for this user) */ public SimpleUser.SimpleUserBuilder disabled(boolean disabled) { this.disabled = disabled; return this; } public SimpleUserDetails build() { String encodedPassword = this.passwordEncoder.apply(password); return new SimpleUser(id, username, encodedPassword, !disabled, !accountExpired, !credentialsExpired, !accountLocked, authorities); } } } ================================================ FILE: src/main/java/com/godcheese/nimrod/common/security/SimpleUserDetails.java ================================================ package com.godcheese.nimrod.common.security; import org.springframework.security.core.GrantedAuthority; import org.springframework.security.core.userdetails.UserDetails; import java.io.Serializable; import java.util.Collection; /** * @author godcheese [godcheese@outlook.com] * @date 2019-04-14 */ public interface SimpleUserDetails extends UserDetails, Serializable { /** * 权限 * * @return */ @Override Collection getAuthorities(); /** * 密码 * * @return */ @Override String getPassword(); /** * id * * @return */ Long getId(); /** * 用户名 * * @return */ @Override String getUsername(); /** * 账号是否未过期 * * @return */ @Override boolean isAccountNonExpired(); /** * 账号是否未锁定 * * @return */ @Override boolean isAccountNonLocked(); /** * 凭证是否未过期 * * @return */ @Override boolean isCredentialsNonExpired(); /** * 是否启用 * * @return */ @Override boolean isEnabled(); // ~ Methods } ================================================ FILE: src/main/java/com/godcheese/nimrod/common/security/SimpleUserDetailsServiceImpl.java ================================================ package com.godcheese.nimrod.common.security; import com.godcheese.nimrod.common.operationlog.OperationLog; import com.godcheese.nimrod.common.operationlog.OperationLogType; import com.godcheese.nimrod.common.properties.AppProperties; import com.godcheese.nimrod.system.service.DictionaryService; import com.godcheese.nimrod.user.entity.RoleAuthorityEntity; import com.godcheese.nimrod.user.entity.RoleEntity; import com.godcheese.nimrod.user.entity.UserEntity; import com.godcheese.nimrod.user.entity.UserRoleEntity; import com.godcheese.nimrod.user.mapper.RoleAuthorityMapper; import com.godcheese.nimrod.user.mapper.RoleMapper; import com.godcheese.nimrod.user.mapper.UserMapper; import com.godcheese.nimrod.user.mapper.UserRoleMapper; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.security.core.Authentication; import org.springframework.security.core.GrantedAuthority; import org.springframework.security.core.authority.SimpleGrantedAuthority; import org.springframework.security.core.context.SecurityContextHolder; import org.springframework.security.core.context.SecurityContextImpl; import org.springframework.security.core.userdetails.UserDetails; import org.springframework.security.core.userdetails.UserDetailsService; import org.springframework.security.core.userdetails.UsernameNotFoundException; import org.springframework.stereotype.Service; import javax.servlet.http.HttpServletRequest; import java.util.ArrayList; import java.util.Collection; import java.util.List; /** * @author godcheese [godcheese@outlook.com] * @date 2018-02-22 */ @Service public class SimpleUserDetailsServiceImpl implements UserDetailsService { private static final Logger LOGGER = LoggerFactory.getLogger(SimpleUserDetailsServiceImpl.class); /** * 内置 SYSTEM_ADMIN。与数据库中的 SYSTEM_ADMIN 角色不一致,用户登录时,系统会提取 properties 中 app.system-admin-role 值与用户所赋予角色相比较,如若用户赋予角色在 app.system-admin-role 中存在,则将次内置 SYSTEM_ADMIN 赋予到此用户角色中。 */ public static final String SYSTEM_ADMIN = "BUILD_IN_SYSTEM_ADMIN_FLAG"; /** * 角色前缀,Spring Security 角色会自带 ROLE_ 前缀 */ public static final String ROLE_PREFIX = "ROLE_"; @Autowired private AppProperties appProperties; @Autowired private UserMapper userMapper; @Autowired private RoleMapper roleMapper; @Autowired private UserRoleMapper userRoleMapper; @Autowired private RoleAuthorityMapper roleAuthorityMapper; @Autowired private DictionaryService dictionaryService; private static final String IS_OR_NOT = "IS_OR_NOT"; private static final String IS = "IS"; private UserEntity userEntity; @Override @OperationLog(value = "用户名登录", type = OperationLogType.API) public SimpleUserDetails loadUserByUsername(String account) { // 从数据库中获取 user 实体 UserEntity userEntity = userMapper.getOneByUsername(account); if (userEntity == null) { throw new UsernameNotFoundException("Account " + account + " not found"); } boolean enabled = true; List simpleGrantedAuthorityList = listAllSimpleGrantedAuthorityByUserId(userEntity.getId()); for (SimpleGrantedAuthority simpleGrantedAuthority : simpleGrantedAuthorityList) { LOGGER.info("simpleGrantedAuthority.getAuthority={}", simpleGrantedAuthority.getAuthority()); } if (userEntity.getEnabled() == null || !userEntity.getEnabled().equals(Integer.valueOf(String.valueOf(dictionaryService.get(IS_OR_NOT, IS))))) { boolean isExistSystemAdminRole = false; for (SimpleGrantedAuthority simpleGrantedAuthority : simpleGrantedAuthorityList) { if (simpleGrantedAuthority.getAuthority().equals(ROLE_PREFIX + SYSTEM_ADMIN)) { isExistSystemAdminRole = true; } } if (!isExistSystemAdminRole) { enabled = false; } } // if(disabled) { // throw new UsernameNotFoundException("The account is disabled."); // } // LOGGER.info("disabled={}", disabled); // return new SimpleUser(userEntity.getId(), userEntity.getUsername(), userEntity.getPassword(), simpleGrantedAuthorityList); this.userEntity = userEntity; return SimpleUser.builder().id(userEntity.getId()).username(userEntity.getUsername()).password(userEntity.getPassword()).authorities(simpleGrantedAuthorityList).disabled(!enabled).build(); } public UserEntity getUserEntity() { return userEntity; } /** * 角色是否存在 * * @param roleValue 角色值 * @return boolean */ private boolean isExistSystemAdminRole(String roleValue) { List roleList = appProperties.getSystemAdminRole(); if (roleList != null && !roleList.isEmpty()) { for (String role : roleList) { if (roleValue.equals(role)) { return true; } } } return false; } /** * 列出用户所拥有的角色和角色权限 * * @param userId 用户 id * @return List */ private List listAllSimpleGrantedAuthorityByUserId(Long userId) { List userRoleEntityList = userRoleMapper.listAllByUserId(userId); List simpleGrantedAuthorityList = new ArrayList<>(); // 装载角色 List simpleGrantedAuthorityList1 = new ArrayList<>(); // 装载角色对应的权限 List simpleGrantedAuthorityList2; if (userRoleEntityList != null) { boolean isExistSystemAdminRole = false; for (UserRoleEntity userRoleEntity : userRoleEntityList) { RoleEntity roleEntity = roleMapper.getOne(userRoleEntity.getRoleId()); if (roleEntity != null) { // 读取和装载角色 Long roleId = roleEntity.getId(); String roleValue = roleEntity.getValue().toUpperCase(); if (isExistSystemAdminRole(roleValue)) { isExistSystemAdminRole = true; } simpleGrantedAuthorityList1.add(new SimpleGrantedAuthority(ROLE_PREFIX + roleValue)); // 读取和装载角色权限 simpleGrantedAuthorityList2 = listAllSimpleGrantedAuthorityByRoleId(roleId); if (!simpleGrantedAuthorityList2.isEmpty()) { simpleGrantedAuthorityList1.addAll(simpleGrantedAuthorityList2); } } } // 检查是否有重复的 ROLE_SYSTEM_ADMIN int i = 0; for (SimpleGrantedAuthority simpleGrantedAuthority : simpleGrantedAuthorityList1) { i++; if (!simpleGrantedAuthority.getAuthority().equals(ROLE_PREFIX + SYSTEM_ADMIN) && (i == simpleGrantedAuthorityList1.size()) && isExistSystemAdminRole) { simpleGrantedAuthorityList.add(new SimpleGrantedAuthority(ROLE_PREFIX + SYSTEM_ADMIN)); } } } simpleGrantedAuthorityList.addAll(simpleGrantedAuthorityList1); return simpleGrantedAuthorityList; } /** * 列出角色所拥有的权限 * * @param roleId 角色 id * @return List */ private List listAllSimpleGrantedAuthorityByRoleId(Long roleId) { List simpleGrantedAuthorityList = new ArrayList<>(); List roleAuthorityEntityList = roleAuthorityMapper.listAllByRoleId(roleId); if (roleAuthorityEntityList != null) { for (RoleAuthorityEntity roleAuthorityEntity : roleAuthorityEntityList) { simpleGrantedAuthorityList.add(new SimpleGrantedAuthority(roleAuthorityEntity.getAuthority().toUpperCase())); } } return simpleGrantedAuthorityList; } public static SimpleUser getCurrentSimpleUser() { Authentication authentication = SecurityContextHolder.getContext().getAuthentication(); if (authentication != null) { Object principal = authentication.getPrincipal(); if (principal instanceof UserDetails) { return (SimpleUser) principal; } } return null; } public static SimpleUser getCurrentSimpleUser(HttpServletRequest request) { SecurityContextImpl securityContextImpl = (SecurityContextImpl) request.getSession().getAttribute("SPRING_SECURITY_CONTEXT"); Authentication authentication; if (securityContextImpl != null) { authentication = securityContextImpl.getAuthentication(); } else { authentication = SecurityContextHolder.getContext().getAuthentication(); } if (authentication != null) { Object principal = authentication.getPrincipal(); if (principal instanceof UserDetails) { return (SimpleUser) principal; } } return null; } /** * 检测是否存在权限或系统管理员角色 * * @param authorities * @param authority * @return */ public static boolean isExistsAuthority(Collection authorities, String authority) { for (GrantedAuthority grantedAuthority : authorities) { if (grantedAuthority.getAuthority().equals(authority) || grantedAuthority.getAuthority().equals(ROLE_PREFIX + SYSTEM_ADMIN)) { return true; } } return false; } } ================================================ FILE: src/main/java/com/godcheese/nimrod/common/security/VerifyCodeFilter.java ================================================ package com.godcheese.nimrod.common.security; import com.godcheese.nimrod.user.User; import com.godcheese.tile.util.ImageUtil; import com.godcheese.nimrod.system.api.SystemRestController; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.security.core.AuthenticationException; import org.springframework.stereotype.Component; import org.springframework.web.filter.OncePerRequestFilter; import javax.servlet.FilterChain; import javax.servlet.ServletException; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import javax.servlet.http.HttpSession; import java.io.IOException; /** * @author godcheese [godcheese@outlook.com] * @date 2018-02-22 */ @Component public class VerifyCodeFilter extends OncePerRequestFilter { private static final Logger LOGGER = LoggerFactory.getLogger(VerifyCodeFilter.class); @Autowired private AuthenticationFailureHandler authenticationFailureHandler; @Override protected void doFilterInternal(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, FilterChain filterChain) throws ServletException, IOException { try { verifyCodeCheck(httpServletRequest); } catch (VerifyCodeCheckException e) { e.printStackTrace(); authenticationFailureHandler.onAuthenticationFailure(httpServletRequest, httpServletResponse, e); } filterChain.doFilter(httpServletRequest, httpServletResponse); } private void verifyCodeCheck(HttpServletRequest httpServletRequest) throws VerifyCodeCheckException { if (httpServletRequest.getRequestURI().equalsIgnoreCase(httpServletRequest.getContextPath() + User.Api.LOGIN)) { HttpSession httpSession = httpServletRequest.getSession(); ImageUtil.VerifyCodeImage verifyCodeImage = (ImageUtil.VerifyCodeImage) httpSession.getAttribute(SystemRestController.VERIFY_CODE_NAME); String requestVerifyCode = httpServletRequest.getParameter(SystemRestController.VERIFY_CODE_NAME); if (requestVerifyCode == null || "".equals(requestVerifyCode) || verifyCodeImage == null) { throw new VerifyCodeCheckException("验码不正确"); } else if (verifyCodeImage.isExpire()) { throw new VerifyCodeCheckException("验证码已过期"); } else if (!requestVerifyCode.equalsIgnoreCase(verifyCodeImage.getVerifyCode().toLowerCase())) { httpSession.removeAttribute(SystemRestController.VERIFY_CODE_NAME); throw new VerifyCodeCheckException("验证码不正确"); } } } public class VerifyCodeCheckException extends AuthenticationException { private static final long serialVersionUID = 7399186031568040869L; public VerifyCodeCheckException(String msg) { super(msg); } } } ================================================ FILE: src/main/java/com/godcheese/nimrod/common/security/WebSecurityConfiguration.java ================================================ package com.godcheese.nimrod.common.security; import com.godcheese.nimrod.common.Url; import com.godcheese.nimrod.common.druid.DruidConfiguration; import com.godcheese.nimrod.system.System; import com.godcheese.nimrod.user.User; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Qualifier; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.security.config.annotation.authentication.builders.AuthenticationManagerBuilder; import org.springframework.security.config.annotation.method.configuration.EnableGlobalMethodSecurity; import org.springframework.security.config.annotation.web.builders.HttpSecurity; import org.springframework.security.config.annotation.web.configuration.EnableWebSecurity; import org.springframework.security.config.annotation.web.configuration.WebSecurityConfigurerAdapter; import org.springframework.security.core.userdetails.UserDetailsService; import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder; import org.springframework.security.crypto.password.PasswordEncoder; import org.springframework.security.web.authentication.AuthenticationSuccessHandler; import org.springframework.security.web.authentication.UsernamePasswordAuthenticationFilter; import static com.godcheese.nimrod.common.security.SimpleUserDetailsServiceImpl.SYSTEM_ADMIN; /** * @author godcheese [godcheese@outlook.com] * @date 2018-02-22 */ @Configuration @EnableWebSecurity @EnableGlobalMethodSecurity(prePostEnabled = true, securedEnabled = true) public class WebSecurityConfiguration extends WebSecurityConfigurerAdapter { private static final Logger LOGGER = LoggerFactory.getLogger(WebSecurityConfiguration.class); @Autowired @Qualifier("simpleUserDetailsServiceImpl") private UserDetailsService userDetailsService; @Autowired private VerifyCodeFilter verifyCodeFilter; @Autowired private AuthenticationFailureHandler authenticationFailureHandler; @Autowired private AuthenticationSuccessHandler authenticationSuccessHandler; @Autowired private LogoutSuccessHandler logoutSuccessHandler; @Override protected void configure(AuthenticationManagerBuilder auth) throws Exception { auth.userDetailsService(userDetailsService).passwordEncoder(new BCryptPasswordEncoder()); } @Override protected void configure(HttpSecurity http) throws Exception { // if(appProperties.getPermitUrl() != null){ // http.authorizeRequests().antMatchers(appProperties.getPermitUrl()).permitAll(); // } // LOGGER.info("appProperties.getPermitUrl={}", appProperties.getPermitUrl()); // http.authorizeRequests().antMatchers("/api/system/dictionary/list_all_by_key/IS_OR_NOT").permitAll(); // 禁用 csrf,建议不要禁用 csrf http.csrf().disable().anonymous(); // 解决 in a frame because it set 'X-Frame-Options' to 'deny'. 问题 http.headers().frameOptions().disable(); // 添加验证码校验过滤器 http.addFilterBefore(verifyCodeFilter, UsernamePasswordAuthenticationFilter.class).authorizeRequests().antMatchers(System.Api.VERIFY_CODE).permitAll(); // Druid 需要权限或者系统管理员角色才能访问 http.authorizeRequests().antMatchers(DruidConfiguration.DRUID_URL).hasAnyAuthority(SimpleUserDetailsServiceImpl.ROLE_PREFIX + SYSTEM_ADMIN, DruidConfiguration.DRUID_URL.toUpperCase()); http.authorizeRequests() // 静态资源 url,无需登录认证权限直接访问 .antMatchers(Url.STATIC).permitAll() // 登录页,无需登录认证权限直接访问 .antMatchers(User.Page.LOGIN).permitAll() .antMatchers("/api/system/dictionary/list_all_by_key/IS_OR_NOT").permitAll() // 其它请求均需要权限认证 .anyRequest().authenticated(); // 开启表单登录,设置登录页 url http.formLogin().loginPage(User.Page.LOGIN).usernameParameter(User.Page.LOGIN_ACCOUNT_STRING).passwordParameter(User.Page.LOGIN_PASSWORD_STRING) // 自定义登录表单提交 url .loginProcessingUrl(User.Api.LOGIN) // 登录成功处理,登录成功,返回 status 200, json 返回 SimpleUser .successHandler(authenticationSuccessHandler) // 登录失败处理,登录失败,返回 status 404, json 返回失败提示 .failureHandler(authenticationFailureHandler).and() // 开启记住我功能, cookie 保存登录数据,cookie 7 天有效 .rememberMe().tokenValiditySeconds(60 * 60 * 60 * 24 * 7).rememberMeParameter(User.Page.LOGIN_REMEMBER_ME_STRING).and() // 注销 .logout().logoutUrl(User.Api.LOGOUT).logoutSuccessHandler(logoutSuccessHandler).deleteCookies("JSESSIONID", "remember-me"); // 一个帐号只允许同时在线一个 session http.sessionManagement().sessionAuthenticationFailureHandler(authenticationFailureHandler).maximumSessions(20).expiredUrl(User.Page.LOGIN); } // @Bean // GrantedAuthorityDefaults grantedAuthorityDefaults(){ // return new GrantedAuthorityDefaults("");//remove the ROLE_ prefix // } @Bean public PasswordEncoder passwordEncoder() { return new BCryptPasswordEncoder(); } } ================================================ FILE: src/main/java/com/godcheese/nimrod/common/thymeleaf/NimrodDialect.java ================================================ package com.godcheese.nimrod.common.thymeleaf; import org.springframework.stereotype.Component; import org.thymeleaf.dialect.AbstractProcessorDialect; import org.thymeleaf.processor.IProcessor; import org.thymeleaf.standard.StandardDialect; import java.util.HashSet; import java.util.Set; /** * @author godcheese [godcheese@outlook.com] * @date 2019-09-23 */ @Component public class NimrodDialect extends AbstractProcessorDialect { private static final String NAME = "Nimrod Dialect"; private static final String PREFIX = "nimrod"; protected NimrodDialect() { super(NAME, PREFIX, StandardDialect.PROCESSOR_PRECEDENCE); } @Override public Set getProcessors(String s) { final Set processors = new HashSet<>(); processors.add(new SecurityAuthorityElementProcessor(s)); return processors; } } ================================================ FILE: src/main/java/com/godcheese/nimrod/common/thymeleaf/SecurityAuthorityElementProcessor.java ================================================ package com.godcheese.nimrod.common.thymeleaf; import com.godcheese.nimrod.common.security.SimpleUser; import com.godcheese.nimrod.common.security.SimpleUserDetailsServiceImpl; import com.godcheese.tile.util.StringUtil; import org.thymeleaf.context.ITemplateContext; import org.thymeleaf.context.WebEngineContext; import org.thymeleaf.model.IAttribute; import org.thymeleaf.model.IProcessableElementTag; import org.thymeleaf.processor.element.AbstractElementTagProcessor; import org.thymeleaf.processor.element.IElementTagStructureHandler; import org.thymeleaf.standard.StandardDialect; import org.thymeleaf.templatemode.TemplateMode; import javax.servlet.http.HttpServletRequest; import java.util.ArrayList; import java.util.List; /** * @author godcheese [godcheese@outlook.com] * @date 2019-09-23 */ public class SecurityAuthorityElementProcessor extends AbstractElementTagProcessor { private static final String ELEMENT_NAME = "security"; private static final String AUTHORITY_ATTRIBUTE_NAME = "authority"; private static final String ROLE_ATTRIBUTE_NAME = "role"; private static final String COMMA_MARK = ","; public SecurityAuthorityElementProcessor(String dialectPrefix) { super(TemplateMode.HTML, dialectPrefix, ELEMENT_NAME, true, null, false, StandardDialect.PROCESSOR_PRECEDENCE); } @Override protected void doProcess(ITemplateContext iTemplateContext, IProcessableElementTag iProcessableElementTag, IElementTagStructureHandler iElementTagStructureHandler) { WebEngineContext context2 = (WebEngineContext) iTemplateContext; HttpServletRequest request = context2.getRequest(); SimpleUser simpleUser = SimpleUserDetailsServiceImpl.getCurrentSimpleUser(request); boolean hasAuthority = false; if (simpleUser != null) { List authorityList = new ArrayList<>(1); IAttribute authority = iProcessableElementTag.getAttribute(AUTHORITY_ATTRIBUTE_NAME); if (authority != null) { String value = authority.getValue().toUpperCase(); if (value.contains(COMMA_MARK)) { authorityList = StringUtil.splitAsList(value, COMMA_MARK); } else { authorityList.add(value); } } List roleList = new ArrayList<>(1); IAttribute role = iProcessableElementTag.getAttribute(ROLE_ATTRIBUTE_NAME); if (role != null) { String value = role.getValue().toUpperCase(); if (value.contains(COMMA_MARK)) { roleList = StringUtil.splitAsList(value, COMMA_MARK); } else { roleList.add(value); } } for (String a : authorityList) { if (SimpleUserDetailsServiceImpl.isExistsAuthority(simpleUser.getAuthorities(), a)) { hasAuthority = true; } } for (String a : roleList) { a = SimpleUserDetailsServiceImpl.ROLE_PREFIX + a; if (SimpleUserDetailsServiceImpl.isExistsAuthority(simpleUser.getAuthorities(), a)) { hasAuthority = true; } } } if (hasAuthority) { iElementTagStructureHandler.removeTags(); } else { iElementTagStructureHandler.removeElement(); } } @Override public int hashCode() { return super.hashCode(); } @Override public boolean equals(Object obj) { return super.equals(obj); } } ================================================ FILE: src/main/java/com/godcheese/nimrod/mail/Mail.java ================================================ package com.godcheese.nimrod.mail; /** * @author godcheese [godcheese@outlook.com] * @date 2019-01-18 */ public class Mail { public static class Page { public static final String MAIL = "/mail"; } public static class Api { public static final String MAIL = com.godcheese.nimrod.common.Url.API + Mail.Page.MAIL; } } ================================================ FILE: src/main/java/com/godcheese/nimrod/mail/api/MailRestController.java ================================================ package com.godcheese.nimrod.mail.api; import com.godcheese.nimrod.common.easyui.Pagination; import com.godcheese.nimrod.mail.Mail; import com.godcheese.nimrod.mail.entity.MailEntity; import com.godcheese.nimrod.mail.service.MailService; import com.godcheese.tile.web.exception.BaseResponseException; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.http.HttpStatus; import org.springframework.http.ResponseEntity; import org.springframework.security.access.prepost.PreAuthorize; import org.springframework.web.bind.annotation.*; import java.util.List; import static com.godcheese.nimrod.common.security.SimpleUserDetailsServiceImpl.SYSTEM_ADMIN; /** * @author godcheese [godcheese@outlook.com] * @date 2018-02-22 */ @RestController @RequestMapping(Mail.Api.MAIL) public class MailRestController { private static final String MAIL = "/API/MAIL"; @Autowired private MailService mailService; /** * 新增电子邮件 * * @param from 发件人电子邮箱 * @param to 收件人电子邮箱 * @param subject 电子邮件主题 * @param text 电子邮件文本内容 * @param html 电子邮件是否为 html * @param remark 备注 * @return ResponseEntity */ @PreAuthorize("hasRole('" + SYSTEM_ADMIN + "') OR hasAuthority('" + MAIL + "/ADD_ONE')") @PostMapping(value = "/add_one") public ResponseEntity addOne(@RequestParam String from, @RequestParam String to, @RequestParam String subject, @RequestParam String text, @RequestParam Integer html, @RequestParam String remark) throws BaseResponseException { MailEntity mailEntity = new MailEntity(); mailEntity.setFrom(from); mailEntity.setTo(to); mailEntity.setSubject(subject); mailEntity.setText(text); mailEntity.setHtml(html); mailEntity.setRemark(remark); MailEntity mailEntity1 = mailService.addOne(mailEntity); return new ResponseEntity<>(mailEntity1, HttpStatus.OK); } /** * 指定队列电子邮件 id,批量删除队列电子邮件 * * @param idList 电子邮件 id list * @return ResponseEntity */ @PreAuthorize("hasRole('" + SYSTEM_ADMIN + "') OR hasAuthority('" + MAIL + "/DELETE_ALL')") @PostMapping(value = "/delete_all") public ResponseEntity deleteAll(@RequestParam("id[]") List idList) { return new ResponseEntity<>(mailService.deleteAll(idList), HttpStatus.OK); } /** * 指定电子邮件 id,获取电子邮件 * * @param id 电子邮件 id * @return ResponseEntity */ @PreAuthorize("hasRole('" + SYSTEM_ADMIN + "') OR hasAuthority('" + MAIL + "/ONE')") @GetMapping(value = "/one/{id}") public ResponseEntity getOne(@PathVariable Long id) { return new ResponseEntity<>(mailService.getOne(id), HttpStatus.OK); } /** * 分页获取所有电子邮件队列 * * @param page 页 * @param rows 每页显示数量 * @return ResponseEntity> */ @PreAuthorize("hasRole('" + SYSTEM_ADMIN + "') OR hasAuthority('" + MAIL + "/PAGE_ALL')") @GetMapping(value = "/page_all") public ResponseEntity> pageAll(@RequestParam Integer page, @RequestParam Integer rows) { return new ResponseEntity<>(mailService.pageAll(page, rows), HttpStatus.OK); } } ================================================ FILE: src/main/java/com/godcheese/nimrod/mail/controller/MailController.java ================================================ package com.godcheese.nimrod.mail.controller; import com.godcheese.nimrod.common.others.Common; import com.godcheese.nimrod.mail.Mail; import org.springframework.security.access.prepost.PreAuthorize; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.RequestMapping; import static com.godcheese.nimrod.common.security.SimpleUserDetailsServiceImpl.SYSTEM_ADMIN; /** * @author godcheese [godcheese@outlook.com] * @date 2018-02-22 */ @Controller @RequestMapping(Mail.Page.MAIL) public class MailController { /** * 发送邮件 页面 * * @return String */ @PreAuthorize("hasRole('" + SYSTEM_ADMIN + "') OR hasAuthority('/MAIL/SEND')") @RequestMapping("/send") public String send() { return Common.trimSlash(Mail.Page.MAIL + "/send"); } /** * 编辑重发 对话框 * * @return String */ @PreAuthorize("isAuthenticated()") @RequestMapping("/send_dialog") public String sendDialog() { return Common.trimSlash(Mail.Page.MAIL + "/send_dialog"); } /** * 编辑重发 对话框 * * @return String */ @PreAuthorize("isAuthenticated()") @RequestMapping("/view_dialog") public String viewDialog() { return Common.trimSlash(Mail.Page.MAIL + "/view_dialog"); } /** * 邮件队列 页面 * * @return String */ @PreAuthorize("hasRole('" + SYSTEM_ADMIN + "') OR hasAuthority('/MAIL/LIST')") @RequestMapping("/list") public String list() { return Common.trimSlash(Mail.Page.MAIL + "/list"); } } ================================================ FILE: src/main/java/com/godcheese/nimrod/mail/entity/MailEntity.java ================================================ package com.godcheese.nimrod.mail.entity; import java.io.Serializable; import java.util.Date; /** * @author godcheese [godcheese@outlook.com] * @date 2018-02-22 */ public class MailEntity implements Serializable { private static final long serialVersionUID = -9011780467794520270L; private Long id; /** * 发信状态 */ private Integer status; /** * 发件人 */ private String from; /** * 收件人 */ private String to; /** * 主题 */ private String subject; /** * 内容 */ private String text; /** * 是否为 HTML */ private Integer html; /** * 发信报错信息 */ private String error; /** * 备注 */ private String remark; /** * 更新时间 */ private Date gmtModified; /** * 创建时间 */ private Date gmtCreated; public Long getId() { return id; } public void setId(Long id) { this.id = id; } public Integer getStatus() { return status; } public void setStatus(Integer status) { this.status = status; } public String getFrom() { return from; } public void setFrom(String from) { this.from = from; } public String getTo() { return to; } public void setTo(String to) { this.to = to; } public String getSubject() { return subject; } public void setSubject(String subject) { this.subject = subject; } public String getText() { return text; } public void setText(String text) { this.text = text; } public Integer getHtml() { return html; } public void setHtml(Integer html) { this.html = html; } public String getError() { return error; } public void setError(String error) { this.error = error; } public String getRemark() { return remark; } public void setRemark(String remark) { this.remark = remark; } public Date getGmtModified() { return gmtModified; } public void setGmtModified(Date gmtModified) { this.gmtModified = gmtModified; } public Date getGmtCreated() { return gmtCreated; } public void setGmtCreated(Date gmtCreated) { this.gmtCreated = gmtCreated; } @Override public String toString() { return "MailEntity{" + "id=" + id + ", status=" + status + ", from='" + from + '\'' + ", to='" + to + '\'' + ", subject='" + subject + '\'' + ", text='" + text + '\'' + ", html=" + html + ", error='" + error + '\'' + ", remark='" + remark + '\'' + ", gmtModified=" + gmtModified + ", gmtCreated=" + gmtCreated + '}'; } } ================================================ FILE: src/main/java/com/godcheese/nimrod/mail/entity/MailFileEntity.java ================================================ package com.godcheese.nimrod.mail.entity; import java.io.Serializable; /** * @author godcheese [godcheese@outlook.com] * @date 2018-02-22 */ public class MailFileEntity implements Serializable { private static final long serialVersionUID = 2954101699588684202L; private Long id; private Long mailId; private Long fileId; public Long getId() { return id; } public void setId(Long id) { this.id = id; } public Long getMailId() { return mailId; } public void setMailId(Long mailId) { this.mailId = mailId; } public Long getFileId() { return fileId; } public void setFileId(Long fileId) { this.fileId = fileId; } } ================================================ FILE: src/main/java/com/godcheese/nimrod/mail/mapper/MailMapper.java ================================================ package com.godcheese.nimrod.mail.mapper; import com.godcheese.nimrod.mail.entity.MailEntity; import com.godcheese.tile.mybatis.CrudMapper; import com.github.pagehelper.Page; import org.apache.ibatis.annotations.Mapper; import org.apache.ibatis.annotations.Param; import org.springframework.stereotype.Component; import java.util.List; /** * @author godcheese [godcheese@outlook.com] * @date 2018-02-22 */ @Component("mailMapper") @Mapper public interface MailMapper extends CrudMapper { /** * 分页获取所有电子邮件 * * @return Page */ Page pageAll(); /** * 指定状态 list,获取所有电子邮件 * * @param statusList 状态 list * @return List */ List listAllByStatus(@Param("statusList") List statusList); } ================================================ FILE: src/main/java/com/godcheese/nimrod/mail/mapper/MailMapper.xml ================================================ `mail` `id`, `status`, `from`, `to`, `subject`, `text`, `html`, `error`, `remark`, `gmt_modified`, `gmt_created` insert into (`id`, `status`, `from`, `to`, `subject`, `text`, `html`, `error`, `remark`, `gmt_modified`, `gmt_created`) values (#{id}, #{status}, #{from}, #{to}, #{subject}, #{text}, #{html}, #{error}, #{remark}, #{gmtModified}, #{gmtCreated}) delete from where `id` = #{id} delete from where `id` in ( #{item} ) update set `status` = #{status}, `from` = #{from}, `to` = #{to}, `subject` = #{subject}, `text` = #{text}, `html` = #{html}, `error` = #{error}, `remark` = #{remark}, `gmt_modified` = #{gmtModified} where `id`= #{id} ================================================ FILE: src/main/java/com/godcheese/nimrod/mail/service/MailService.java ================================================ package com.godcheese.nimrod.mail.service; import com.godcheese.nimrod.common.easyui.Pagination; import com.godcheese.nimrod.mail.entity.MailEntity; import com.godcheese.tile.web.exception.BaseResponseException; import java.util.List; import java.util.Map; /** * @author godcheese [godcheese@outlook.com] * @date 2018-02-22 */ public interface MailService { /** * 新增邮件 * * @param mailEntity MailEntity * @return MailEntity * @throws BaseResponseException BaseResponseException */ MailEntity addOne(MailEntity mailEntity) throws BaseResponseException; /** * 指定队列邮件 id,批量删除队列邮件 * * @param idList 邮件 id list * @return 已删除邮件个数 */ int deleteAll(List idList); /** * 指定电子邮件 id,获取电子邮件 * * @param id 电子邮件 id * @return MailEntity */ MailEntity getOne(Long id); /** * 分页获取所有邮件队列 * * @param page 页 * @param rows 每页显示数量 * @return Pagination */ Pagination pageAll(Integer page, Integer rows); /** * 初始化电子邮箱配置信息 */ void initialize(); /** * 消费队列 * * @param message message */ void consume(String message); /** * 生产队列 * * @param message message */ void produce(String message); /** * 重试,重发电子邮件 * * @param mailEntityList 电子邮件 list */ void retry(List mailEntityList); /** * 将待发送的邮件重新加入到发送队列 * * @param fail 是否将发送失败的邮件也重新加入到队列 默认 false */ void retry(boolean fail); String loadHtmlTemplate(String templatePath, Map variables); } ================================================ FILE: src/main/java/com/godcheese/nimrod/mail/service/impl/MailServiceImpl.java ================================================ package com.godcheese.nimrod.mail.service.impl; import com.fasterxml.jackson.core.JsonProcessingException; import com.godcheese.nimrod.common.easyui.Pagination; import com.godcheese.nimrod.common.others.Common; import com.godcheese.nimrod.common.others.FailureEntity; import com.godcheese.nimrod.mail.entity.MailEntity; import com.godcheese.nimrod.mail.mapper.MailMapper; import com.godcheese.nimrod.mail.service.MailService; import com.godcheese.nimrod.system.service.DictionaryService; import com.godcheese.tile.web.exception.BaseResponseException; import com.github.pagehelper.Page; import com.github.pagehelper.PageHelper; import org.apache.activemq.command.ActiveMQQueue; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.jms.annotation.JmsListener; import org.springframework.jms.core.JmsMessagingTemplate; import org.springframework.mail.SimpleMailMessage; import org.springframework.mail.javamail.JavaMailSenderImpl; import org.springframework.mail.javamail.MimeMessageHelper; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import org.thymeleaf.TemplateEngine; import org.thymeleaf.context.Context; import javax.jms.Destination; import javax.mail.MessagingException; import javax.mail.internet.MimeMessage; import java.io.IOException; import java.util.*; /** * @author godcheese [godcheese@outlook.com] * @date 2018-02-22 */ @Service public class MailServiceImpl implements MailService { private static final Logger LOGGER = LoggerFactory.getLogger(MailServiceImpl.class); @Autowired private DictionaryService dictionaryService; @Autowired private MailMapper mailMapper; private JavaMailSenderImpl javaMailSender; @Autowired private Common common; @Autowired private JmsMessagingTemplate jmsMessagingTemplate; @Autowired private MailService mailService; @Autowired private FailureEntity failureEntity; @Autowired private TemplateEngine templateEngine; private static final String MAIL_QUEUE = "mailQueue"; public static final String MAIL_TEMPLATE_ROOT_PATH = "/mail/template"; @Override @Transactional(rollbackFor = Throwable.class) public MailEntity addOne(MailEntity mailEntity) throws BaseResponseException { Integer smsStatusWait = Integer.valueOf((String) dictionaryService.get("SMS_STATUS", "WAIT")); Date date = new Date(); try { Integer status = mailEntity.getStatus(); mailEntity.setStatus(status != null ? status : smsStatusWait); setFrom(mailEntity); mailEntity.setGmtModified(date); mailEntity.setGmtCreated(date); mailMapper.insertOne(mailEntity); produce(common.objectToJson(mailEntity)); } catch (Exception e) { e.printStackTrace(); throw new BaseResponseException(failureEntity.i18n("mail.add_fail")); } return mailEntity; } @Override @Transactional(rollbackFor = Throwable.class) public int deleteAll(List idList) { return mailMapper.deleteAll(idList); } @Override public MailEntity getOne(Long id) { return mailMapper.getOne(id); } @Override public Pagination pageAll(Integer page, Integer rows) { Pagination pagination = new Pagination<>(); PageHelper.startPage(page, rows); Page mailEntityPage = mailMapper.pageAll(); pagination.setRows(mailEntityPage.getResult()); pagination.setTotal(mailEntityPage.getTotal()); return pagination; } @Override public void initialize() { String host = (String) dictionaryService.get("MAIL", "HOST"); String protocol = (String) dictionaryService.get("MAIL", "PROTOCOL"); String port = (String) dictionaryService.get("MAIL", "PORT"); String username = (String) dictionaryService.get("MAIL", "USERNAME"); String password = (String) dictionaryService.get("MAIL", "PASSWORD"); String defaultEncoding = (String) dictionaryService.get("MAIL", "DEFAULT_ENCODING"); String smtpAuth = (String) dictionaryService.get("MAIL", "SMTP_AUTH"); String startTlsEnable = (String) dictionaryService.get("MAIL", "STARTTLS_ENABLE"); String startTlsRequired = (String) dictionaryService.get("MAIL", "STARTTLS_REQUIRED"); javaMailSender = new JavaMailSenderImpl(); if (host != null) { javaMailSender.setHost(host); } if (protocol != null) { javaMailSender.setProtocol(protocol); } if (port != null) { javaMailSender.setPort(Integer.parseInt(port)); } if (username != null) { javaMailSender.setUsername(username); } if (password != null) { javaMailSender.setPassword(password); } if (password != null) { javaMailSender.setPassword(password); } if (defaultEncoding != null) { javaMailSender.setDefaultEncoding(defaultEncoding); } Properties properties = new Properties(); if (smtpAuth != null) { properties.setProperty("mail.smtp.auth", smtpAuth); } if (startTlsEnable != null) { properties.setProperty("mail.starttls.enable", startTlsEnable); } if (startTlsRequired != null) { properties.setProperty("mail.starttls.required", startTlsRequired); } javaMailSender.setJavaMailProperties(properties); } @JmsListener(destination = MAIL_QUEUE) @Override public void consume(String message) { MailEntity mailEntity = null; try { mailEntity = common.jsonToObject(message, MailEntity.class); } catch (IOException e) { e.printStackTrace(); } if (mailEntity != null) { send(mailEntity); } } @Override public void produce(String message) { Destination destination = new ActiveMQQueue(MAIL_QUEUE); jmsMessagingTemplate.convertAndSend(destination, message); } @Transactional(rollbackFor = Throwable.class) public void send(MailEntity mailEntity) { Integer smsStatusFail = Integer.valueOf((String) dictionaryService.get("SMS_STATUS", "FAIL")); Integer smsStatusSuccess = Integer.valueOf((String) dictionaryService.get("SMS_STATUS", "SUCCESS")); Integer isOrNotIs = Integer.valueOf((String) dictionaryService.get("IS_OR_NOT", "IS")); String mailSplit = ";"; MailEntity mailEntity1 = mailMapper.getOne(mailEntity.getId()); if (mailEntity1 != null) { try { mailEntity1.setStatus(smsStatusFail); String to = mailEntity1.getTo(); if (mailEntity1.getHtml().equals(isOrNotIs)) { if (to.indexOf(mailSplit) > 0) { sendMimeMailMessage(mailEntity1.getFrom(), to.split(mailSplit), mailEntity1.getSubject(), mailEntity1.getText(), true); } else { sendMimeMailMessage(mailEntity1.getFrom(), to, mailEntity1.getSubject(), mailEntity1.getText(), true); } } else { if (to.indexOf(mailSplit) > 0) { sendSimpleMailMessage(mailEntity1.getFrom(), to.split(mailSplit), mailEntity1.getSubject(), mailEntity1.getText()); } else { sendSimpleMailMessage(mailEntity1.getFrom(), to, mailEntity1.getSubject(), mailEntity1.getText()); } } mailEntity1.setStatus((smsStatusSuccess)); LOGGER.info("send success."); } catch (Exception e) { mailEntity1.setError(e.getMessage()); mailEntity1.setStatus(smsStatusFail); } mailEntity1.setGmtModified(new Date()); mailMapper.updateOne(mailEntity1); } } private void sendSimpleMailMessage(String from, String to, String subject, String text) { sendSimpleMailMessage(from, new String[]{to}, subject, text); } private void sendSimpleMailMessage(String from, String[] toArray, String subject, String text) { SimpleMailMessage simpleMailMessage = new SimpleMailMessage(); simpleMailMessage.setFrom(from); simpleMailMessage.setTo(toArray); simpleMailMessage.setSubject(subject); simpleMailMessage.setText(text); javaMailSender.send(simpleMailMessage); } private void sendSimpleMailMessage(String from, List toList, String subject, String text) { String[] toArray = new String[toList.size()]; sendSimpleMailMessage(from, toArray, subject, text); } private void sendMimeMailMessage(String from, String[] toArray, String subject, String text, boolean html) throws MessagingException { MimeMessage mimeMessage = javaMailSender.createMimeMessage(); MimeMessageHelper mimeMessageHelper = new MimeMessageHelper(mimeMessage); mimeMessageHelper.setFrom(from); mimeMessageHelper.setTo(toArray); mimeMessage.setSubject(subject); mimeMessageHelper.setText(text, html); javaMailSender.send(mimeMessage); } private void sendMimeMailMessage(String from, String to, String subject, String text, boolean html) throws MessagingException { sendMimeMailMessage(from, new String[]{to}, subject, text, html); } private void sendMimeMailMessage(String from, List toList, String subject, String text, boolean html) throws MessagingException { String[] toArray = new String[toList.size()]; sendMimeMailMessage(from, toList.toArray(toArray), subject, text, html); } /** * 设置 from 为数据字典的值 * * @param mailEntity MailEntity */ private void setFrom(MailEntity mailEntity) { String from = mailEntity.getFrom(); if (from == null || "".equals(from)) { from = (String) dictionaryService.get("MAIL", "FROM"); if (from != null) { mailEntity.setFrom(from); } } } @Override @Transactional(rollbackFor = Throwable.class) public void retry(List mailEntityList) { for (MailEntity mailEntity : mailEntityList) { try { mailService.produce(common.objectToJson(mailEntity)); } catch (JsonProcessingException e) { e.printStackTrace(); } } } @Override @Transactional(rollbackFor = Throwable.class) public void retry(boolean fail) { Integer smsStatusWait = Integer.valueOf((String) dictionaryService.get("SMS_STATUS", "WAIT")); Integer smsStatusFail = Integer.valueOf((String) dictionaryService.get("SMS_STATUS", "FAIL")); List statusList = new ArrayList<>(); statusList.add(smsStatusWait); if (fail) { statusList.add(smsStatusFail); } List mailEntityList = mailMapper.listAllByStatus(statusList); retry(mailEntityList); } @Override public String loadHtmlTemplate(String templatePath, Map variables) { Context context = new Context(); context.setVariables(variables); return templateEngine.process(templatePath, context); } } ================================================ FILE: src/main/java/com/godcheese/nimrod/quartz/Quartz.java ================================================ package com.godcheese.nimrod.quartz; /** * @author godcheese [godcheese@outlook.com] * @date 2019-01-18 */ public class Quartz { public static class Page { public static final String QUARTZ = "/quartz"; public static final String JOB = Page.QUARTZ + "/job"; public static final String JOB_RUNTIME_LOG = Page.QUARTZ + "/job_runtime_log"; } public static class Api { public static final String QUARTZ = com.godcheese.nimrod.common.Url.API + Page.QUARTZ; public static final String JOB = Api.QUARTZ + "/job"; public static final String JOB_RUNTIME_LOG = Api.QUARTZ + "/job_runtime_log"; } } ================================================ FILE: src/main/java/com/godcheese/nimrod/quartz/api/JobRestController.java ================================================ package com.godcheese.nimrod.quartz.api; import com.godcheese.nimrod.common.easyui.Pagination; import com.godcheese.nimrod.quartz.Quartz; import com.godcheese.nimrod.quartz.entity.JobEntity; import com.godcheese.nimrod.quartz.service.JobService; import com.godcheese.tile.web.exception.BaseResponseException; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.http.HttpStatus; import org.springframework.http.ResponseEntity; import org.springframework.security.access.prepost.PreAuthorize; import org.springframework.web.bind.annotation.*; import java.util.Date; import java.util.List; import static com.godcheese.nimrod.common.security.SimpleUserDetailsServiceImpl.SYSTEM_ADMIN; /** * @author godcheese [godcheese@outlook.com] * @date 2019-02-01 */ @RestController @RequestMapping(Quartz.Api.JOB) public class JobRestController { private static final Logger LOGGER = LoggerFactory.getLogger(JobRestController.class); private static final String JOB = "/API/QUARTZ/JOB"; @Autowired private JobService jobService; /** * 新增任务 * * @param jobClassName JobClassName * @param jobGroup JobGroup * @param cronExpression Cron 表达式 * @param description 描述 * @return ResponseEntity * @throws BaseResponseException BaseResponseException */ @PreAuthorize("hasRole('" + SYSTEM_ADMIN + "') OR hasAuthority('" + JOB + "/ADD_ONE')") @PostMapping(value = "/add_one") public ResponseEntity addJob(@RequestParam String jobClassName, @RequestParam String jobGroup, @RequestParam String cronExpression, @RequestParam String description) throws BaseResponseException { return new ResponseEntity<>(jobService.addOne(jobClassName, jobGroup, cronExpression, description), HttpStatus.OK); } /** * 指定 JobClassName list、JobGroup list,删除所有任务 * * @param jobClassNameList JobClassName list * @param jobGroupList JobGroup list * @return ResponseEntity * @throws BaseResponseException BaseResponseException */ @PreAuthorize("hasRole('" + SYSTEM_ADMIN + "') OR hasAuthority('" + JOB + "/DELETE_ALL')") @PostMapping(value = "/delete_all") public ResponseEntity deleteAll(@RequestParam(name = "jobClassName[]") List jobClassNameList, @RequestParam(name = "jobGroup[]") List jobGroupList) throws BaseResponseException { return new ResponseEntity<>(jobService.deleteAll(jobClassNameList, jobGroupList), HttpStatus.OK); } /** * 保存任务 * * @param jobClassName JobClassName * @param jobGroup JobGroup * @param cronExpression Cron 表达式 * @param description 描述 * @return ResponseEntity * @throws BaseResponseException BaseResponseException */ @PreAuthorize("hasRole('" + SYSTEM_ADMIN + "') OR hasAuthority('" + JOB + "/SAVE_ONE')") @PostMapping(value = "/save_one") public ResponseEntity saveOne(@RequestParam String jobClassName, @RequestParam String jobGroup, @RequestParam String cronExpression, @RequestParam String description) throws BaseResponseException { return new ResponseEntity<>(jobService.updateCronExpressionByJobClassNameAndJobGroup(jobClassName, jobGroup, cronExpression, description), HttpStatus.OK); } /** * 指定 JobClassName、JobGroup,获取任务 * * @param jobClassName JobClassName * @param jobGroup JobGroup * @return ResponseEntity */ @PreAuthorize("hasRole('" + SYSTEM_ADMIN + "') OR hasAuthority('" + JOB + "/ONE')") @GetMapping(value = "/one") public ResponseEntity getOne(@RequestParam String jobClassName, @RequestParam String jobGroup) { return new ResponseEntity<>(jobService.getOne(jobClassName, jobGroup), HttpStatus.OK); } /** * 分页获取所有任务 * * @param page 页 * @param rows 每页显示数量 * @return ResponseEntity> */ @PreAuthorize("hasRole('" + SYSTEM_ADMIN + "') OR hasAuthority('" + JOB + "/PAGE_ALL')") @GetMapping(value = "/page_all") public ResponseEntity> pageAll(@RequestParam Integer page, @RequestParam Integer rows) { return new ResponseEntity<>(jobService.pageAll(page, rows), HttpStatus.OK); } /** * 指定 JobClassName list、JobGroup list,暂停所有任务 * * @param jobClassNameList JobClassName list * @param jobGroupList JobGroup list * @return ResponseEntity * @throws BaseResponseException BaseResponseException */ @PreAuthorize("hasRole('" + SYSTEM_ADMIN + "') OR hasAuthority('" + JOB + "/PAUSE_ALL')") @PostMapping(value = "/pause_all") public ResponseEntity pauseAll(@RequestParam(value = "jobClassName[]") List jobClassNameList, @RequestParam(value = "jobGroup[]") List jobGroupList) throws BaseResponseException { return new ResponseEntity<>(jobService.pauseAll(jobClassNameList, jobGroupList), HttpStatus.OK); } /** * 指定 JobClassName list、JobGroup list,恢复所有任务 * * @param jobClassNameList JobClassName list * @param jobGroupList JobGroup list * @return ResponseEntity * @throws BaseResponseException BaseResponseException */ @PreAuthorize("hasRole('" + SYSTEM_ADMIN + "') OR hasAuthority('" + JOB + "/RESUME_ALL')") @PostMapping(value = "/resume_all") public ResponseEntity resumeAll(@RequestParam(value = "jobClassName[]") List jobClassNameList, @RequestParam(value = "jobGroup[]") List jobGroupList) throws BaseResponseException { return new ResponseEntity<>(jobService.resumeAll(jobClassNameList, jobGroupList), HttpStatus.OK); } /** * 重置状态 * * @param jobClassNameList JobClassName list * @param jobGroupList JobGroup list * @return ResponseEntity * @throws BaseResponseException BaseResponseException */ @PreAuthorize("hasRole('" + SYSTEM_ADMIN + "') OR hasAuthority('" + JOB + "/RESET_STATE')") @PostMapping(value = "/reset_state") public ResponseEntity resetState(@RequestParam(value = "jobClassNameList[]", required = false) List jobClassNameList, @RequestParam(value = "jobGroupList[]", required = false) List jobGroupList) throws BaseResponseException { return new ResponseEntity<>(jobService.resetTriggerFromErrorState(jobClassNameList, jobGroupList), HttpStatus.OK); } } ================================================ FILE: src/main/java/com/godcheese/nimrod/quartz/api/JobRuntimeLogRestController.java ================================================ package com.godcheese.nimrod.quartz.api; import com.godcheese.nimrod.common.easyui.Pagination; import com.godcheese.nimrod.quartz.Quartz; import com.godcheese.nimrod.quartz.entity.JobRuntimeLogEntity; import com.godcheese.nimrod.quartz.service.JobRuntimeLogService; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.http.HttpStatus; import org.springframework.http.ResponseEntity; import org.springframework.security.access.prepost.PreAuthorize; import org.springframework.web.bind.annotation.*; import java.util.List; import static com.godcheese.nimrod.common.security.SimpleUserDetailsServiceImpl.SYSTEM_ADMIN; /** * @author godcheese [godcheese@outlook.com] * @date 2019-02-01 */ @RestController @RequestMapping(Quartz.Api.JOB_RUNTIME_LOG) public class JobRuntimeLogRestController { private static final Logger LOGGER = LoggerFactory.getLogger(JobRuntimeLogRestController.class); private static final String JOB_RUNTIME_LOG = "/API/QUARTZ/JOB_RUNTIME_LOG"; @Autowired private JobRuntimeLogService jobRuntimeLogService; /** * 指定任务运行日志 id,批量删除任务运行日志 * * @return ResponseEntity */ @PreAuthorize("hasRole('" + SYSTEM_ADMIN + "') OR hasAuthority('" + JOB_RUNTIME_LOG + "/DELETE_ALL')") @PostMapping(value = "/delete_all") public ResponseEntity deleteAll(@RequestParam("id[]") List idList) { return new ResponseEntity<>(jobRuntimeLogService.deleteAll(idList), HttpStatus.OK); } /** * 指定任务运行日志 id,获取任务运行日志 * * @param id 任务运行日志 id * @return ResponseEntity */ @PreAuthorize("hasRole('" + SYSTEM_ADMIN + "') OR hasAuthority('" + JOB_RUNTIME_LOG + "/ONE')") @GetMapping(value = "/one/{id}") public ResponseEntity getOne(@PathVariable Long id) { return new ResponseEntity<>(jobRuntimeLogService.getOne(id), HttpStatus.OK); } /** * 分页获取所有任务运行日志 * * @param page 页 * @param rows 每页显示数量 * @return ResponseEntity> */ @PreAuthorize("hasRole('" + SYSTEM_ADMIN + "') OR hasAuthority('" + JOB_RUNTIME_LOG + "/PAGE_ALL')") @GetMapping(value = "/page_all") public ResponseEntity> pageAll(@RequestParam Integer page, @RequestParam Integer rows) { return new ResponseEntity<>(jobRuntimeLogService.pageAll(page, rows), HttpStatus.OK); } /** * 清空所有任务运行日志 * * @return ResponseEntity */ @PreAuthorize("hasRole('" + SYSTEM_ADMIN + "') OR hasAuthority('" + JOB_RUNTIME_LOG + "/CLEAR_ALL')") @PostMapping(value = "/clear_all") public ResponseEntity clearAll() { jobRuntimeLogService.clearAll(); return new ResponseEntity<>(HttpStatus.OK, HttpStatus.OK); } } ================================================ FILE: src/main/java/com/godcheese/nimrod/quartz/controller/JobController.java ================================================ package com.godcheese.nimrod.quartz.controller; import com.godcheese.nimrod.common.others.Common; import com.godcheese.nimrod.quartz.Quartz; import org.springframework.security.access.prepost.PreAuthorize; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.RequestMapping; import static com.godcheese.nimrod.common.security.SimpleUserDetailsServiceImpl.SYSTEM_ADMIN; /** * @author godcheese [godcheese@outlook.com] * @date 2019-02-11 */ @RequestMapping(Quartz.Page.JOB) @Controller public class JobController { /** * 定时任务新增 对话框 * * @return String */ @PreAuthorize("isAuthenticated()") @RequestMapping("/add_dialog") public String addDialog() { return Common.trimSlash(Quartz.Page.JOB + "/add_dialog"); } /** * 定时任务编辑 对话框 * * @return String */ @PreAuthorize("isAuthenticated()") @RequestMapping("/edit_dialog") public String editDialog() { return Common.trimSlash(Quartz.Page.JOB + "/edit_dialog"); } /** * 定时任务 页面 * * @return String */ @PreAuthorize("hasRole('" + SYSTEM_ADMIN + "') OR hasAuthority('/QUARTZ/LIST')") @RequestMapping("/list") public String list() { return Common.trimSlash(Quartz.Page.JOB + "/list"); } } ================================================ FILE: src/main/java/com/godcheese/nimrod/quartz/controller/JobRuntimeLogController.java ================================================ package com.godcheese.nimrod.quartz.controller; import com.godcheese.nimrod.common.others.Common; import com.godcheese.nimrod.quartz.Quartz; import org.springframework.security.access.prepost.PreAuthorize; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.RequestMapping; import static com.godcheese.nimrod.common.security.SimpleUserDetailsServiceImpl.SYSTEM_ADMIN; /** * @author godcheese [godcheese@outlook.com] * @date 2019-02-11 */ @RequestMapping(Quartz.Page.JOB_RUNTIME_LOG) @Controller public class JobRuntimeLogController { /** * 任务运行日志 * * @return String */ @PreAuthorize("hasRole('" + SYSTEM_ADMIN + "') OR hasAuthority('/QUARTZ/JOB_RUNTIME_LOG/LIST')") @RequestMapping("/list") public String list() { return Common.trimSlash(Quartz.Page.JOB_RUNTIME_LOG + "/list"); } } ================================================ FILE: src/main/java/com/godcheese/nimrod/quartz/entity/JobEntity.java ================================================ package com.godcheese.nimrod.quartz.entity; import java.io.Serializable; /** * @author godcheese [godcheese@outlook.com] * @date 2019-02-02 */ public class JobEntity implements Serializable { private static final long serialVersionUID = -5740486676385193410L; private String schedName; private String jobName; private String jobGroup; private String description; private String jobClassName; private String isDurable; private String isNonconcurrent; private String isUpdateDate; private String requestsRecovery; private String triggerName; private String triggerGroup; private Long nextFireTime; private Long prevFireTime; private Integer priority; private String triggerState; private String triggerType; private Long startTime; private Long endTime; private String calendarName; private Integer misfireInstr; private String cronExpression; private String timeZoneId; public String getSchedName() { return schedName; } public void setSchedName(String schedName) { this.schedName = schedName; } public String getJobName() { return jobName; } public void setJobName(String jobName) { this.jobName = jobName; } public String getJobGroup() { return jobGroup; } public void setJobGroup(String jobGroup) { this.jobGroup = jobGroup; } public String getDescription() { return description; } public void setDescription(String description) { this.description = description; } public String getJobClassName() { return jobClassName; } public void setJobClassName(String jobClassName) { this.jobClassName = jobClassName; } public String getIsDurable() { return isDurable; } public void setIsDurable(String isDurable) { this.isDurable = isDurable; } public String getIsNonconcurrent() { return isNonconcurrent; } public void setIsNonconcurrent(String isNonconcurrent) { this.isNonconcurrent = isNonconcurrent; } public String getIsUpdateDate() { return isUpdateDate; } public void setIsUpdateDate(String isUpdateDate) { this.isUpdateDate = isUpdateDate; } public String getRequestsRecovery() { return requestsRecovery; } public void setRequestsRecovery(String requestsRecovery) { this.requestsRecovery = requestsRecovery; } public String getTriggerName() { return triggerName; } public void setTriggerName(String triggerName) { this.triggerName = triggerName; } public String getTriggerGroup() { return triggerGroup; } public void setTriggerGroup(String triggerGroup) { this.triggerGroup = triggerGroup; } public Long getNextFireTime() { return nextFireTime; } public void setNextFireTime(Long nextFireTime) { this.nextFireTime = nextFireTime; } public Long getPrevFireTime() { return prevFireTime; } public void setPrevFireTime(Long prevFireTime) { this.prevFireTime = prevFireTime; } public Integer getPriority() { return priority; } public void setPriority(Integer priority) { this.priority = priority; } public String getTriggerState() { return triggerState; } public void setTriggerState(String triggerState) { this.triggerState = triggerState; } public String getTriggerType() { return triggerType; } public void setTriggerType(String triggerType) { this.triggerType = triggerType; } public Long getStartTime() { return startTime; } public void setStartTime(Long startTime) { this.startTime = startTime; } public Long getEndTime() { return endTime; } public void setEndTime(Long endTime) { this.endTime = endTime; } public String getCalendarName() { return calendarName; } public void setCalendarName(String calendarName) { this.calendarName = calendarName; } public Integer getMisfireInstr() { return misfireInstr; } public void setMisfireInstr(Integer misfireInstr) { this.misfireInstr = misfireInstr; } public String getCronExpression() { return cronExpression; } public void setCronExpression(String cronExpression) { this.cronExpression = cronExpression; } public String getTimeZoneId() { return timeZoneId; } public void setTimeZoneId(String timeZoneId) { this.timeZoneId = timeZoneId; } } ================================================ FILE: src/main/java/com/godcheese/nimrod/quartz/entity/JobRuntimeLogEntity.java ================================================ package com.godcheese.nimrod.quartz.entity; import java.io.Serializable; import java.util.Date; /** * @author godcheese [godcheese@outlook.com] * @date 2019-02-12 */ public class JobRuntimeLogEntity implements Serializable { private static final long serialVersionUID = 7788756745999894643L; private Long id; private String jobClassName; private String jobGroup; private Long consumingTime; private String jobException; private Date gmtCreated; public Long getId() { return id; } public void setId(Long id) { this.id = id; } public String getJobClassName() { return jobClassName; } public void setJobClassName(String jobClassName) { this.jobClassName = jobClassName; } public String getJobGroup() { return jobGroup; } public void setJobGroup(String jobGroup) { this.jobGroup = jobGroup; } public Long getConsumingTime() { return consumingTime; } public void setConsumingTime(Long consumingTime) { this.consumingTime = consumingTime; } public String getJobException() { return jobException; } public void setJobException(String jobException) { this.jobException = jobException; } public Date getGmtCreated() { return gmtCreated; } public void setGmtCreated(Date gmtCreated) { this.gmtCreated = gmtCreated; } } ================================================ FILE: src/main/java/com/godcheese/nimrod/quartz/job/BaseJob.java ================================================ package com.godcheese.nimrod.quartz.job; import org.quartz.Job; import org.quartz.JobExecutionContext; import org.quartz.JobExecutionException; /** * @author godcheese [godcheese@outlook.com] * @date 2019-02-01 */ public interface BaseJob extends Job { /** * 执行方法 * * @param jobExecutionContext * @throws JobExecutionException */ @Override void execute(JobExecutionContext jobExecutionContext) throws JobExecutionException; } ================================================ FILE: src/main/java/com/godcheese/nimrod/quartz/job/SimpleJob.java ================================================ package com.godcheese.nimrod.quartz.job; import com.godcheese.tile.util.DateUtil; import org.quartz.DisallowConcurrentExecution; import org.quartz.JobExecutionContext; import org.quartz.JobExecutionException; import org.quartz.PersistJobDataAfterExecution; import org.slf4j.Logger; import org.slf4j.LoggerFactory; /** * @author godcheese [godcheese@outlook.com] * @date 2019-02-01 */ @PersistJobDataAfterExecution @DisallowConcurrentExecution public class SimpleJob implements BaseJob { private static final Logger LOGGER = LoggerFactory.getLogger(SimpleJob.class); @Override public void execute(JobExecutionContext jobExecutionContext) throws JobExecutionException { LOGGER.info("{} SimpleJob 被执行", DateUtil.getNowDateTime()); } } ================================================ FILE: src/main/java/com/godcheese/nimrod/quartz/job/SimpleJob2.java ================================================ package com.godcheese.nimrod.quartz.job; import com.godcheese.tile.util.DateUtil; import org.quartz.DisallowConcurrentExecution; import org.quartz.JobExecutionContext; import org.quartz.JobExecutionException; import org.quartz.PersistJobDataAfterExecution; import org.slf4j.Logger; import org.slf4j.LoggerFactory; /** * @author godcheese [godcheese@outlook.com] * @date 2019-02-01 */ @PersistJobDataAfterExecution @DisallowConcurrentExecution public class SimpleJob2 implements BaseJob { private static final Logger LOGGER = LoggerFactory.getLogger(SimpleJob2.class); @Override public void execute(JobExecutionContext jobExecutionContext) throws JobExecutionException { LOGGER.info("{} SimpleJob2 被执行", DateUtil.getNowDateTime()); } } ================================================ FILE: src/main/java/com/godcheese/nimrod/quartz/listener/GlobalJobListener.java ================================================ package com.godcheese.nimrod.quartz.listener; import com.godcheese.nimrod.common.others.SpringContextUtil; import com.godcheese.nimrod.quartz.entity.JobRuntimeLogEntity; import com.godcheese.nimrod.quartz.mapper.JobRuntimeLogMapper; import com.godcheese.nimrod.quartz.service.JobRuntimeLogService; import com.godcheese.nimrod.quartz.service.impl.JobRuntimeLogServiceImpl; import org.quartz.JobExecutionContext; import org.quartz.JobExecutionException; import org.quartz.JobListener; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.context.annotation.Bean; import org.springframework.stereotype.Component; import java.time.Instant; import java.util.Date; /** * @author godcheese [godcheese@outlook.com] * @date 2019-02-02 */ @Component public class GlobalJobListener implements JobListener { private static final Logger LOGGER = LoggerFactory.getLogger(GlobalJobListener.class); private JobRuntimeLogMapper jobRuntimeLogMapper; private JobRuntimeLogEntity jobRuntimeLogEntity = new JobRuntimeLogEntity(); private long beginTime = 0; public GlobalJobListener() { jobRuntimeLogMapper = (JobRuntimeLogMapper) SpringContextUtil.getBean(JobRuntimeLogMapper.class); } @Autowired @Bean private JobRuntimeLogService jobRuntimeLogService() { return new JobRuntimeLogServiceImpl(); } @Override public String getName() { return "globalJobListener"; } @Override public void jobToBeExecuted(JobExecutionContext context) { beginTime = Instant.now().toEpochMilli(); jobRuntimeLogEntity.setJobClassName(context.getJobDetail().getKey().getName()); jobRuntimeLogEntity.setJobGroup(context.getJobDetail().getKey().getGroup()); } @Override public void jobExecutionVetoed(JobExecutionContext context) { } @Override public void jobWasExecuted(JobExecutionContext context, JobExecutionException jobException) { if (jobException != null) { jobRuntimeLogEntity.setJobException(jobException.getMessage()); } jobRuntimeLogEntity.setConsumingTime(Instant.now().toEpochMilli() - beginTime); jobRuntimeLogEntity.setGmtCreated(new Date()); LOGGER.info("jobRuntimeLogEntity={}", jobRuntimeLogEntity); jobRuntimeLogMapper.insertOne(jobRuntimeLogEntity); } } ================================================ FILE: src/main/java/com/godcheese/nimrod/quartz/mapper/JobMapper.java ================================================ package com.godcheese.nimrod.quartz.mapper; import com.godcheese.nimrod.quartz.entity.JobEntity; import com.godcheese.tile.mybatis.CrudMapper; import com.github.pagehelper.Page; import org.apache.ibatis.annotations.Mapper; import org.apache.ibatis.annotations.Param; import org.springframework.stereotype.Component; /** * @author godcheese [godcheese@outlook.com] * @date 2018-02-22 */ @Component("jobMapper") @Mapper public interface JobMapper extends CrudMapper { /** * 分页获取所有任务 * * @return Page */ Page pageAll(); /** * 指定 JobClassName、JobGroup,更新任务描述 * * @param jobClassName JobClassName * @param jobGroup JobGroup * @param description 描述 * @return int */ int updateJobDetailsDescriptionByJobClassNameAndJobGroup(@Param("jobClassName") String jobClassName, @Param("jobGroup") String jobGroup, @Param("description") String description); /** * 指定 JobClassName、JobGroup、获取任务息 * * @param jobClassName JobClassName * @param jobGroup JobGroup * @return JobEntity */ JobEntity getOneByJobClassNameAndJobGroup(@Param("jobClassName") String jobClassName, @Param("jobGroup") String jobGroup); } ================================================ FILE: src/main/java/com/godcheese/nimrod/quartz/mapper/JobMapper.xml ================================================ update `QRTZ_JOB_DETAILS` set `description` = #{description} where `job_class_name` = #{jobClassName} and `job_group` = #{jobGroup} ================================================ FILE: src/main/java/com/godcheese/nimrod/quartz/mapper/JobRuntimeLogMapper.java ================================================ package com.godcheese.nimrod.quartz.mapper; import com.godcheese.nimrod.quartz.entity.JobRuntimeLogEntity; import com.godcheese.tile.mybatis.CrudMapper; import com.github.pagehelper.Page; import org.apache.ibatis.annotations.Mapper; import org.springframework.stereotype.Component; /** * @author godcheese [godcheese@outlook.com] * @date 2018-02-22 */ @Component("jobRuntimeLogMapper") @Mapper public interface JobRuntimeLogMapper extends CrudMapper { /** * 分页获取所有任务运行日志 * * @return Page */ Page pageAll(); } ================================================ FILE: src/main/java/com/godcheese/nimrod/quartz/mapper/JobRuntimeLogMapper.xml ================================================ `job_runtime_log` `id`, `job_class_name`, `job_group`, `consuming_time`, `job_exception`, `gmt_created` insert into (`job_class_name`, `job_group`, `consuming_time`, `job_exception`, `gmt_created`) VALUES (#{jobClassName}, #{jobGroup}, #{consumingTime}, #{jobException}, #{gmtCreated}) delete from where `id` in ( #{item} ) truncate table ================================================ FILE: src/main/java/com/godcheese/nimrod/quartz/service/JobRuntimeLogService.java ================================================ package com.godcheese.nimrod.quartz.service; import com.godcheese.nimrod.common.easyui.Pagination; import com.godcheese.nimrod.quartz.entity.JobRuntimeLogEntity; import java.util.List; /** * @author godcheese [godcheese@outlook.com] * @date 2019-02-13 */ public interface JobRuntimeLogService { int deleteAll(List idList); /** * 指定任务运行日志 id,获取任务运行日志 * * @param id 任务运行日志 id * @return JobRuntimeLogEntity */ JobRuntimeLogEntity getOne(Long id); /** * 分页获取所有任务运行日志 * * @param page 页 * @param rows 每页显示数量 * @return Pagination */ Pagination pageAll(Integer page, Integer rows); /** * 清空所有任务运行日志 */ void clearAll(); } ================================================ FILE: src/main/java/com/godcheese/nimrod/quartz/service/JobService.java ================================================ package com.godcheese.nimrod.quartz.service; import com.godcheese.nimrod.common.easyui.Pagination; import com.godcheese.nimrod.quartz.entity.JobEntity; import com.godcheese.tile.web.exception.BaseResponseException; import java.util.Date; import java.util.List; /** * @author godcheese [godcheese@outlook.com] * @date 2019-02-01 */ public interface JobService { /** * 新增任务 * * @param jobClassName JobClassName * @param jobGroup JobGroup * @param cronExpression Cron 表达式 * @param description 描述 * @return Date * @throws BaseResponseException BaseResponseException */ Date addOne(String jobClassName, String jobGroup, String cronExpression, String description) throws BaseResponseException; /** * 指定 JobClassName list、JobGroup list,批量删除任务 * * @param jobClassNameList JobClassName list * @param jobGroupList JobGroup list * @return int * @throws BaseResponseException BaseResponseException */ int deleteAll(List jobClassNameList, List jobGroupList) throws BaseResponseException; /** * 指定 JobClassName、JobGroup,获取任务 * * @param jobClassName JobClassName * @param jobGroup JobGroup * @return JobEntity */ JobEntity getOne(String jobClassName, String jobGroup); /** * 分页获取所有任务 * * @param page 页 * @param rows 每页显示数量 * @return Pagination */ Pagination pageAll(Integer page, Integer rows); /** * 指定 JobClassName、JobGroup,更新任务 Cron 表达式、描述 * * @param jobClassName JobClassName * @param jobGroup JobGroup * @param cronExpression Cron 表达式 * @param description 描述 * @return Date * @throws BaseResponseException BaseResponseException */ Date updateCronExpressionByJobClassNameAndJobGroup(String jobClassName, String jobGroup, String cronExpression, String description) throws BaseResponseException; /** * 指定 JobClassName list、JobGroup list,暂停所有任务 * * @param jobClassNameList JobClassName list * @param jobGroupList JobGroup list * @return int * @throws BaseResponseException BaseResponseException */ int pauseAll(List jobClassNameList, List jobGroupList) throws BaseResponseException; /** * 指定 JobClassName list、JobGroup list,恢复所有任务 * * @param jobClassNameList JobClassName list * @param jobGroupList JobGroup list * @return int * @throws BaseResponseException BaseResponseException */ int resumeAll(List jobClassNameList, List jobGroupList) throws BaseResponseException; /** * 重置 error state trigger * * @param jobClassNameList * @param jobGroupList * @return * @throws BaseResponseException */ int resetTriggerFromErrorState(List jobClassNameList, List jobGroupList) throws BaseResponseException; } ================================================ FILE: src/main/java/com/godcheese/nimrod/quartz/service/impl/JobRuntimeLogServiceImpl.java ================================================ package com.godcheese.nimrod.quartz.service.impl; import com.godcheese.nimrod.common.easyui.Pagination; import com.godcheese.nimrod.common.others.SpringContextUtil; import com.godcheese.nimrod.quartz.entity.JobRuntimeLogEntity; import com.godcheese.nimrod.quartz.mapper.JobRuntimeLogMapper; import com.godcheese.nimrod.quartz.service.JobRuntimeLogService; import com.github.pagehelper.Page; import com.github.pagehelper.PageHelper; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.stereotype.Service; import java.util.List; /** * @author godcheese [godcheese@outlook.com] * @date 2019-02-13 */ @Service public class JobRuntimeLogServiceImpl implements JobRuntimeLogService { private static final Logger LOGGER = LoggerFactory.getLogger(JobRuntimeLogServiceImpl.class); private JobRuntimeLogMapper jobRuntimeLogMapper; public JobRuntimeLogServiceImpl() { jobRuntimeLogMapper = (JobRuntimeLogMapper) SpringContextUtil.getBean(JobRuntimeLogMapper.class); } @Override public int deleteAll(List idList) { return jobRuntimeLogMapper.deleteAll(idList); } @Override public JobRuntimeLogEntity getOne(Long id) { return null; } @Override public Pagination pageAll(Integer page, Integer rows) { Pagination pagination = new Pagination<>(); PageHelper.startPage(page, rows); Page jobRuntimeLogEntityPage = jobRuntimeLogMapper.pageAll(); pagination.setRows(jobRuntimeLogEntityPage.getResult()); pagination.setTotal(jobRuntimeLogEntityPage.getTotal()); return pagination; } @Override public void clearAll() { jobRuntimeLogMapper.truncate(); } } ================================================ FILE: src/main/java/com/godcheese/nimrod/quartz/service/impl/JobServiceImpl.java ================================================ package com.godcheese.nimrod.quartz.service.impl; import com.godcheese.nimrod.common.easyui.Pagination; import com.godcheese.nimrod.common.others.FailureEntity; import com.godcheese.nimrod.quartz.entity.JobEntity; import com.godcheese.nimrod.quartz.job.BaseJob; import com.godcheese.nimrod.quartz.mapper.JobMapper; import com.godcheese.nimrod.quartz.service.JobService; import com.godcheese.tile.web.exception.BaseResponseException; import com.github.pagehelper.Page; import com.github.pagehelper.PageHelper; import org.quartz.*; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import java.util.Date; import java.util.List; /** * @author godcheese [godcheese@outlook.com] * @date 2019-02-01 */ @Service public class JobServiceImpl implements JobService { private static final Logger LOGGER = LoggerFactory.getLogger(JobServiceImpl.class); @Autowired private Scheduler scheduler; @Autowired private JobMapper jobMapper; @Autowired private FailureEntity failureEntity; @Transactional(rollbackFor = Throwable.class) @Override public Date addOne(String jobClassName, String jobGroup, String cronExpression, String description) throws BaseResponseException { try { scheduler.start(); JobDetail jobDetail = JobBuilder.newJob(getClass(jobClassName).getClass()).withIdentity(jobClassName, jobGroup).withDescription(description).build(); CronScheduleBuilder cronScheduleBuilder = CronScheduleBuilder.cronSchedule(cronExpression) // 不触发立即执行,等待下次 Cron 触发频率到达时刻开始按照 Cron 频率依次执行 .withMisfireHandlingInstructionDoNothing(); CronTrigger cronTrigger = TriggerBuilder.newTrigger().withIdentity(jobClassName, jobGroup).withSchedule(cronScheduleBuilder).withDescription(description).build(); return scheduler.scheduleJob(jobDetail, cronTrigger); } catch (IllegalAccessException | InstantiationException | SchedulerException | ClassNotFoundException e) { e.printStackTrace(); throw new BaseResponseException(failureEntity.i18n("quartz_job.add_fail")); } } @Transactional(rollbackFor = Throwable.class) @Override public int deleteAll(List jobClassNameList, List jobGroupList) throws BaseResponseException { int index = 0; try { JobKey jobKey; for (String jobClassName : jobClassNameList) { jobKey = JobKey.jobKey(jobClassName, jobGroupList.get(index)); scheduler.pauseJob(jobKey); scheduler.unscheduleJob(TriggerKey.triggerKey(jobClassName, jobGroupList.get(index))); scheduler.deleteJob(jobKey); index++; } } catch (SchedulerException e) { e.printStackTrace(); throw new BaseResponseException(failureEntity.i18n("quartz_job.delete_fail")); } return index; } @Override public JobEntity getOne(String jobClassName, String jobGroup) { return jobMapper.getOneByJobClassNameAndJobGroup(jobClassName, jobGroup); } @Override public Pagination pageAll(Integer page, Integer rows) { Pagination pagination = new Pagination<>(); PageHelper.startPage(page, rows); Page jobEntityPage = jobMapper.pageAll(); pagination.setRows(jobEntityPage.getResult()); pagination.setTotal(jobEntityPage.getTotal()); return pagination; } @Transactional(rollbackFor = Throwable.class) @Override public Date updateCronExpressionByJobClassNameAndJobGroup(String jobClassName, String jobGroup, String cronExpression, String description) throws BaseResponseException { try { TriggerKey triggerKey = TriggerKey.triggerKey(jobClassName, jobGroup); CronScheduleBuilder scheduleBuilder = CronScheduleBuilder.cronSchedule(cronExpression) // 不触发立即执行,等待下次 Cron 触发频率到达时刻开始按照 Cron 频率依次执行 .withMisfireHandlingInstructionDoNothing(); CronTrigger cronTrigger = (CronTrigger) scheduler.getTrigger(triggerKey); cronTrigger = cronTrigger.getTriggerBuilder().withIdentity(triggerKey).withSchedule(scheduleBuilder).withDescription(description).build(); jobMapper.updateJobDetailsDescriptionByJobClassNameAndJobGroup(jobClassName, jobGroup, description); scheduler.rescheduleJob(triggerKey, cronTrigger); return new Date(); } catch (SchedulerException e) { throw new BaseResponseException(failureEntity.i18n("quartz_job.update_fail")); } } @Override public int pauseAll(List jobClassNameList, List jobGroupList) throws BaseResponseException { int index = 0; try { if (jobClassNameList != null && jobGroupList != null) { for (String jobClassName : jobClassNameList) { scheduler.pauseJob(JobKey.jobKey(jobClassName, jobGroupList.get(index))); index++; } } } catch (SchedulerException e) { e.printStackTrace(); throw new BaseResponseException(failureEntity.i18n("quartz_job.pause_fail")); } return index; } @Override public int resumeAll(List jobClassNameList, List jobGroupList) throws BaseResponseException { int index = 0; try { if (jobClassNameList != null && jobGroupList != null) { for (String jobClassName : jobClassNameList) { scheduler.resumeJob(JobKey.jobKey(jobClassName, jobGroupList.get(index))); index++; } } } catch (SchedulerException e) { e.printStackTrace(); throw new BaseResponseException(failureEntity.i18n("quartz_job.resume_fail")); } return index; } @Override public int resetTriggerFromErrorState(List jobClassNameList, List jobGroupList) throws BaseResponseException { int index = 0; try { if (jobClassNameList != null && jobGroupList != null) { for (String jobClassName : jobClassNameList) { LOGGER.info("jobClassName={}={}", jobClassName, jobGroupList.get(index)); scheduler.resetTriggerFromErrorState(TriggerKey.triggerKey(jobClassName, jobGroupList.get(index))); index++; } } } catch (SchedulerException e) { e.printStackTrace(); throw new BaseResponseException(failureEntity.i18n("quartz_job.resume_fail")); } return index; } private static BaseJob getClass(String classname) throws ClassNotFoundException, IllegalAccessException, InstantiationException { Class class1 = Class.forName(classname); return (BaseJob) class1.newInstance(); } } ================================================ FILE: src/main/java/com/godcheese/nimrod/system/System.java ================================================ package com.godcheese.nimrod.system; import com.godcheese.nimrod.common.Url; /** * @author godcheese [godcheese@outlook.com] * @date 2019-02-20 */ public class System extends Url { public static class Page { public static final String SYSTEM = "/system"; public static final String INDEX = SYSTEM + Url.Page.INDEX; public static final String WORKBENCH = SYSTEM + "/workbench"; public static final String DICTIONARY = SYSTEM + "/dictionary"; public static final String DICTIONARY_CATEGORY = SYSTEM + "/dictionary_category"; public static final String MAIL = SYSTEM + "/mail"; public static final String OPERATION_LOG = SYSTEM + "/operation_log"; public static final String FILE = SYSTEM + "/file"; } public static class Api { public static final String SYSTEM = Url.API + Page.SYSTEM; public static final String DICTIONARY = SYSTEM + "/dictionary"; public static final String DICTIONARY_CATEGORY = SYSTEM + "/dictionary_category"; public static final String OPERATION_LOG = SYSTEM + "/operation_log"; public static final String FILE = SYSTEM + "/file"; public static final String VERIFY_CODE = SYSTEM + "/verify_code"; } } ================================================ FILE: src/main/java/com/godcheese/nimrod/system/api/DictionaryCategoryRestController.java ================================================ package com.godcheese.nimrod.system.api; import com.godcheese.nimrod.common.easyui.ComboTree; import com.godcheese.nimrod.common.operationlog.OperationLog; import com.godcheese.nimrod.common.operationlog.OperationLogType; import com.godcheese.nimrod.system.System; import com.godcheese.nimrod.system.entity.DictionaryCategoryEntity; import com.godcheese.nimrod.system.service.DictionaryCategoryService; import com.godcheese.tile.web.exception.BaseResponseException; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.http.HttpStatus; import org.springframework.http.ResponseEntity; import org.springframework.security.access.prepost.PreAuthorize; import org.springframework.web.bind.annotation.*; import java.util.ArrayList; import java.util.List; import static com.godcheese.nimrod.common.security.SimpleUserDetailsServiceImpl.SYSTEM_ADMIN; /** * @author godcheese [godcheese@outlook.com] * @date 2018-02-22 */ @RestController @RequestMapping(System.Api.DICTIONARY_CATEGORY) public class DictionaryCategoryRestController { private static final String DICTIONARY_CATEGORY = "/API/SYSTEM/DICTIONARY_CATEGORY"; @Autowired private DictionaryCategoryService dictionaryCategoryService; /** * 新增数据字典分类 * * @param name 数据字典分类名称 * @param parentId 数据字典分类父级 id * @param sort 排序 * @param remark 备注 * @return ResponseEntity */ @OperationLog(value = "新增数据字典分类", type = OperationLogType.API) @PreAuthorize("hasRole('" + SYSTEM_ADMIN + "') OR hasAuthority('" + DICTIONARY_CATEGORY + "/ADD_ONE')") @PostMapping(value = "/add_one") public ResponseEntity addOne(@RequestParam String name, @RequestParam(required = false) Long parentId, @RequestParam Long sort, @RequestParam String remark) { DictionaryCategoryEntity dictionaryCategoryEntity = new DictionaryCategoryEntity(); dictionaryCategoryEntity.setName(name); dictionaryCategoryEntity.setParentId(parentId); dictionaryCategoryEntity.setSort(sort); dictionaryCategoryEntity.setRemark(remark); DictionaryCategoryEntity dictionaryCategoryEntity1 = dictionaryCategoryService.insertOne(dictionaryCategoryEntity); return new ResponseEntity<>(dictionaryCategoryEntity1, HttpStatus.OK); } /** * 指定数据字典分类 id list,批量删除数据字典分类 * * @param idList 数据字典分类 id list * @return ResponseEntity * @throws BaseResponseException BaseResponseException */ @OperationLog(value = "指定数据字典分类 id list,批量删除数据字典分类", type = OperationLogType.API) @PreAuthorize("hasRole('" + SYSTEM_ADMIN + "') OR hasAuthority('" + DICTIONARY_CATEGORY + "/DELETE_ALL')") @PostMapping(value = "/delete_all") public ResponseEntity deleteAll(@RequestParam("id[]") List idList) throws BaseResponseException { return new ResponseEntity<>(dictionaryCategoryService.deleteAll(idList), HttpStatus.OK); } /** * 保存数据字典分类 * * @param id 数据字典分类 id * @param name 数据字典分类名称 * @param sort 排序 * @param remark 备注 * @return ResponseEntity */ @OperationLog(value = "保存数据字典分类", type = OperationLogType.API) @PreAuthorize("hasRole('" + SYSTEM_ADMIN + "') OR hasAuthority('" + DICTIONARY_CATEGORY + "/SAVE_ONE')") @PostMapping(value = "/save_one") public ResponseEntity saveOne(@RequestParam Long id, @RequestParam String name, @RequestParam Long parentId, @RequestParam Long sort, @RequestParam String remark) throws BaseResponseException { DictionaryCategoryEntity dictionaryCategoryEntity = new DictionaryCategoryEntity(); dictionaryCategoryEntity.setId(id); dictionaryCategoryEntity.setName(name); dictionaryCategoryEntity.setParentId(parentId); dictionaryCategoryEntity.setSort(sort); dictionaryCategoryEntity.setRemark(remark); DictionaryCategoryEntity dictionaryCategoryEntity1 = dictionaryCategoryService.updateOne(dictionaryCategoryEntity); return new ResponseEntity<>(dictionaryCategoryEntity1, HttpStatus.OK); } /** * 指定数据字典分类 id,获取数据字典分类 * * @param id 数据字典分类 id * @return ResponseEntity */ @OperationLog(value = "指定数据字典分类 id,获取数据字典分类", type = OperationLogType.API) @PreAuthorize("hasRole('" + SYSTEM_ADMIN + "') OR hasAuthority('" + DICTIONARY_CATEGORY + "/ONE')") @GetMapping(value = "/one/{id}") public ResponseEntity getOne(@PathVariable Long id) { return new ResponseEntity<>(dictionaryCategoryService.getOne(id), HttpStatus.OK); } /** * 分页获取所有父级数据字典分类 * * @return ResponseEntity> */ @PreAuthorize("hasRole('" + SYSTEM_ADMIN + "') OR hasAuthority('" + DICTIONARY_CATEGORY + "/LIST_ALL_PARENT')") @GetMapping(value = "/list_all_parent") public ResponseEntity> listAllParent() { return new ResponseEntity<>(dictionaryCategoryService.listAllParent(), HttpStatus.OK); } /** * 指定父级数据字典分类 id,获取所有数据字典分类 * * @param parentId 父级数据字典分类 id * @return ResponseEntity> */ @PreAuthorize("hasRole('" + SYSTEM_ADMIN + "') OR hasAuthority('" + DICTIONARY_CATEGORY + "/LIST_ALL_BY_PARENT_ID')") @GetMapping(value = "/list_all_by_parent_id") public ResponseEntity> listAllByParentId(@RequestParam Long parentId) { return new ResponseEntity<>(dictionaryCategoryService.listAllByParentId(parentId), HttpStatus.OK); } /** * 获取所有数据字典分类,以 ComboTree 形式展示 * * @return ResponseEntity> */ @OperationLog(value = "获取所有数据字典分类,以 ComboTree 形式展示", type = OperationLogType.API) @PreAuthorize("hasRole('" + SYSTEM_ADMIN + "') OR hasAuthority('" + DICTIONARY_CATEGORY + "/LIST_ALL_AS_COMBO_TREE')") @GetMapping(value = "/list_all_as_combo_tree") public ResponseEntity> listAllAsComboTree() { List comboTreeResultList = new ArrayList<>(); List dictionaryCategoryComboTreeList = dictionaryCategoryService.listAllDictionaryCategoryComboTree(); for (ComboTree comboTree : dictionaryCategoryComboTreeList) { if (comboTree.getParentId() == null) { comboTreeResultList.add(comboTree); } } for (ComboTree comboTree : comboTreeResultList) { comboTree.setChildren(dictionaryCategoryService.getDictionaryCategoryChildrenComboTree(comboTree.getId(), dictionaryCategoryComboTreeList)); } return new ResponseEntity<>(comboTreeResultList, HttpStatus.OK); } } ================================================ FILE: src/main/java/com/godcheese/nimrod/system/api/DictionaryRestController.java ================================================ package com.godcheese.nimrod.system.api; import com.godcheese.nimrod.common.easyui.Pagination; import com.godcheese.nimrod.common.operationlog.OperationLog; import com.godcheese.nimrod.common.operationlog.OperationLogType; import com.godcheese.nimrod.common.others.Common; import com.godcheese.nimrod.system.System; import com.godcheese.nimrod.system.entity.DictionaryEntity; import com.godcheese.nimrod.system.service.DictionaryService; import com.godcheese.tile.web.exception.BaseResponseException; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.http.HttpStatus; import org.springframework.http.MediaType; import org.springframework.http.ResponseEntity; import org.springframework.security.access.prepost.PreAuthorize; import org.springframework.web.bind.annotation.*; import org.springframework.web.multipart.MultipartFile; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import java.util.List; import java.util.Map; import static com.godcheese.nimrod.common.security.SimpleUserDetailsServiceImpl.SYSTEM_ADMIN; /** * @author godcheese [godcheese@outlook.com] * @date 2018-02-22 */ @RestController @RequestMapping(value = System.Api.DICTIONARY, produces = MediaType.APPLICATION_JSON_VALUE) public class DictionaryRestController { private static final String DICTIONARY = "/API/SYSTEM/DICTIONARY"; @Autowired private DictionaryService dictionaryService; @Autowired private Common common; /** * 新增数据字典 * * @param keyName 数据字典键名 * @param key 数据字典键 * @param valueName 数据字典值名 * @param valueSlug 数据字典值别名 * @param value 数据字典值 * @param dictionaryCategoryId 数据字典分类 id * @param enabled 是否启用 * @param sort 排序 * @param remark 备注 * @return ResponseEntity */ @OperationLog(value = "新增数据字典", type = OperationLogType.API) @PreAuthorize("hasRole('" + SYSTEM_ADMIN + "') OR hasAuthority('" + DICTIONARY + "/ADD_ONE')") @PostMapping(value = "/add_one") public ResponseEntity addOne(@RequestParam String keyName, @RequestParam String key, @RequestParam String valueName, @RequestParam String valueSlug, @RequestParam String value, @RequestParam Long dictionaryCategoryId, @RequestParam Integer enabled, @RequestParam Long sort, @RequestParam String remark) { DictionaryEntity dictionaryEntity = new DictionaryEntity(); dictionaryEntity.setKeyName(keyName); dictionaryEntity.setKey(key); dictionaryEntity.setValueName(valueName); dictionaryEntity.setValueSlug(valueSlug); dictionaryEntity.setValue(value); dictionaryEntity.setDictionaryCategoryId(dictionaryCategoryId); dictionaryEntity.setEnabled(enabled); dictionaryEntity.setSort(sort); dictionaryEntity.setRemark(remark); DictionaryEntity dictionaryEntity1 = dictionaryService.addOne(dictionaryEntity); return new ResponseEntity<>(dictionaryEntity1, HttpStatus.OK); } /** * 指定数据字典 id,批量删除数据字典 * * @param idList 数据字典 id list * @return ResponseEntity */ @OperationLog(value = "指定数据字典 id,批量删除数据字典", type = OperationLogType.API) @PreAuthorize("hasRole('" + SYSTEM_ADMIN + "') OR hasAuthority('" + DICTIONARY + "/DELETE_ALL')") @PostMapping("/delete_all") public ResponseEntity deleteAll(@RequestParam("id[]") List idList) { return new ResponseEntity<>(dictionaryService.deleteAll(idList), HttpStatus.OK); } /** * 保存数据字典 * * @param id 数据字典 id * @param keyName 数据字典键名 * @param key 数据字典键 * @param valueName 数据字典值名 * @param valueSlug 数据字典值别名 * @param value 数据字典值 * @param dictionaryCategoryId 数据字典分类 id * @param enabled 是否启用 * @param sort 排序 * @param remark 备注 * @return ResponseEntity */ @OperationLog(value = "保存数据字典", type = OperationLogType.API) @PreAuthorize("hasRole('" + SYSTEM_ADMIN + "') OR hasAuthority('" + DICTIONARY + "/SAVE_ONE')") @PostMapping(value = "/save_one") public ResponseEntity saveOne(@RequestParam Long id, @RequestParam String keyName, @RequestParam String key, @RequestParam String valueName, @RequestParam String valueSlug, @RequestParam String value, @RequestParam Long dictionaryCategoryId, @RequestParam Integer enabled, @RequestParam Long sort, @RequestParam String remark) { DictionaryEntity dictionaryEntity = dictionaryService.getOne(id); dictionaryEntity.setKeyName(keyName); dictionaryEntity.setKey(key); dictionaryEntity.setValueName(valueName); dictionaryEntity.setValueSlug(valueSlug); dictionaryEntity.setValue(value); dictionaryEntity.setDictionaryCategoryId(dictionaryCategoryId); dictionaryEntity.setEnabled(enabled); dictionaryEntity.setSort(sort); dictionaryEntity.setRemark(remark); DictionaryEntity dictionaryEntity1 = dictionaryService.saveOne(dictionaryEntity); return new ResponseEntity<>(dictionaryEntity1, HttpStatus.OK); } /** * 指定数据字典 id,获取数据字典 * * @param id 数据字典 id * @return ResponseEntity */ @OperationLog(value = "指定数据字典 id,获取数据字典", type = OperationLogType.API) @PreAuthorize("hasRole('" + SYSTEM_ADMIN + "') OR hasAuthority('" + DICTIONARY + "/ONE')") @GetMapping(value = "/one/{id}") public ResponseEntity getOne(@PathVariable Long id) { return new ResponseEntity<>(dictionaryService.getOne(id), HttpStatus.OK); } // /** // * 指定父级数据字典分类 id,分页获取所有数据字典 // * @param page 页 // * @param rows 每页显示数量 // * @param dictionaryCategoryId 数据字典分类 id // * @return ResponseEntity> // */ // @PreAuthorize("hasRole('" + SYSTEM_ADMIN + "') OR hasAuthority('" + DICTIONARY + "/PAGE_ALL_BY_DICTIONARY_CATEGORY_ID')") // @GetMapping(value = "/page_all_by_dictionary_category_id/{dictionaryCategoryId}") // public ResponseEntity> pageAllByDictionaryCategoryId(@RequestParam Integer page, @RequestParam Integer rows, @PathVariable Long dictionaryCategoryId) { // return new ResponseEntity<>(dictionaryService.pageAllByDictionaryCategoryId(dictionaryCategoryId, page, rows), HttpStatus.OK); // } /** * 获取所有数据字典 * * @return ResponseEntity>> */ @PreAuthorize("hasRole('" + SYSTEM_ADMIN + "') OR hasAuthority('" + DICTIONARY + "/LIST_ALL')") @RequestMapping("/list_all") public ResponseEntity>> listAll() { return new ResponseEntity<>(dictionaryService.keyValueMap(), HttpStatus.OK); } /** * 指定数据字典键,从内存中获取所有数据字典 * * @param key 数据字典键 * @return ResponseEntity> */ @OperationLog(value = "指定数据字典键,从内存中获取所有数据字典", type = OperationLogType.API) @PreAuthorize("hasRole('" + SYSTEM_ADMIN + "') OR hasAuthority('" + DICTIONARY + "/LIST_ALL_BY_KEY')") @RequestMapping("/list_all_by_key/{key}") public ResponseEntity> listAllByKey(@PathVariable String key) { return new ResponseEntity<>(dictionaryService.get(key), HttpStatus.OK); } /** * 同步数据字典到内存 * * @return ResponseEntity */ @OperationLog(value = "同步数据字典到内存", type = OperationLogType.API) @PreAuthorize("hasRole('" + SYSTEM_ADMIN + "') OR hasAuthority('" + DICTIONARY + "/SYNC_TO_MEMORY')") @PostMapping(value = "/sync_to_memory") public ResponseEntity syncToMemory() { common.initialize(); return new ResponseEntity<>(HttpStatus.OK); } /** * 指定数据字典分类 id list,导出数据字典 * * @param httpServletRequest HttpServletRequest * @param httpServletResponse HttpServletResponse * @param dictionaryCategoryIdList 数据字典分类 id list * @throws BaseResponseException BaseResponseException */ @OperationLog(value = "指定数据字典分类 id list,导出数据字典", type = OperationLogType.API) @PreAuthorize("hasRole('" + SYSTEM_ADMIN + "') OR hasAuthority('" + DICTIONARY + "/EXPORT_ALL_BY_DICTIONARY_CATEGORY_ID_LIST')") @GetMapping(value = "/export_all_by_dictionary_category_id_list") public void exportAllByDictionaryCategoryIdList(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, @RequestParam List dictionaryCategoryIdList) throws BaseResponseException { dictionaryService.exportAllByDictionaryCategoryIdList(httpServletRequest, httpServletResponse, dictionaryCategoryIdList); } /** * 指定数据字典分类 id,导入数据字典 * * @param file 导入文件 * @param dictionaryCategoryId 数据字典分类 id * @throws BaseResponseException BaseResponseException */ @OperationLog(value = "指定数据字典分类 id,导入数据字典", type = OperationLogType.API) @PreAuthorize("hasRole('" + SYSTEM_ADMIN + "') OR hasAuthority('" + DICTIONARY + "/IMPORT_ALL_BY_DICTIONARY_CATEGORY_ID')") @PostMapping(value = "/import_all_by_dictionary_category_id") public void importAllByDictionaryCategoryId(@RequestParam MultipartFile file, @RequestParam Long dictionaryCategoryId) throws BaseResponseException { dictionaryService.importAllByDictionaryCategoryId(file, dictionaryCategoryId); } /** * 指定数据字典分类 id,分页获取数据字典 * * @param page 页 * @param rows 每页显示数量 * @param dictionaryCategoryId 数据字典分类 id * @return ResponseEntity> */ @OperationLog(value = "指定数据字典分类 id,分页获取数据字典", type = OperationLogType.API) @PreAuthorize("hasRole('" + SYSTEM_ADMIN + "') OR hasAuthority('" + DICTIONARY + "/PAGE_ALL_BY_DICTIONARY_CATEGORY')") @GetMapping(value = "/page_all_by_dictionary_category_id") public ResponseEntity> pageAllByDictionaryCategoryId(@RequestParam Integer page, @RequestParam Integer rows, @RequestParam Long dictionaryCategoryId) { return new ResponseEntity<>(dictionaryService.pageAllByDictionaryCategoryId(dictionaryCategoryId, page, rows), HttpStatus.OK); // return new ResponseEntity<>(dictionaryService.pageAllByDictionaryCategoryIdList(dictionaryCategoryIdList, page, rows), HttpStatus.OK); } } ================================================ FILE: src/main/java/com/godcheese/nimrod/system/api/FileRestController.java ================================================ package com.godcheese.nimrod.system.api; import com.godcheese.nimrod.common.easyui.Pagination; import com.godcheese.nimrod.common.operationlog.OperationLog; import com.godcheese.nimrod.common.operationlog.OperationLogType; import com.godcheese.nimrod.system.System; import com.godcheese.nimrod.system.entity.FileEntity; import com.godcheese.nimrod.system.service.FileService; import com.godcheese.nimrod.user.service.UserService; import com.godcheese.tile.web.exception.BaseResponseException; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.http.HttpStatus; import org.springframework.http.MediaType; import org.springframework.http.ResponseEntity; import org.springframework.security.access.prepost.PreAuthorize; import org.springframework.web.bind.annotation.*; import org.springframework.web.multipart.MultipartFile; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import java.util.List; import static com.godcheese.nimrod.common.security.SimpleUserDetailsServiceImpl.SYSTEM_ADMIN; /** * @author godcheese [godcheese@outlook.com] * @date 2018-02-22 */ @RestController @RequestMapping(value = System.Api.FILE, produces = MediaType.APPLICATION_JSON_VALUE) public class FileRestController { private static final Logger LOGGER = LoggerFactory.getLogger(FileRestController.class); private static final String FILE = "/API/SYSTEM/FILE"; @Autowired private FileService fileService; @Autowired private UserService userService; /** * 指定文件 id list,批量删除文件 * * @param idList 文件 id list * @return ResponseEntity 被删除的数量 */ @OperationLog(value = "指定文件 id list,批量删除文件", type = OperationLogType.API) @PreAuthorize("hasRole('" + SYSTEM_ADMIN + "') OR hasAuthority('" + FILE + "/DELETE_ALL')") @PostMapping(value = "/delete_all") public ResponseEntity deleteAll(@RequestParam("id[]") List idList) { return new ResponseEntity<>(fileService.deleteAll(idList), HttpStatus.OK); } /** * 保存文件 * * @param id 文件 id * @param name 文件名 * @param remark 备注 * @return ResponseEntity */ @OperationLog(value = "保存文件", type = OperationLogType.API) @PreAuthorize("hasRole('" + SYSTEM_ADMIN + "') OR hasAuthority('" + FILE + "/SAVE_ONE')") @PostMapping(value = "/save_one") public ResponseEntity saveOne(@RequestParam Long id, @RequestParam String name, @RequestParam String remark) { FileEntity fileEntity = new FileEntity(); fileEntity.setId(id); fileEntity.setName(name); fileEntity.setRemark(remark); FileEntity fileEntity1 = fileService.saveOne(fileEntity); return new ResponseEntity<>(fileEntity1, HttpStatus.OK); } /** * 指定文件 id,获取文件 * * @param id 文件 id * @return ResponseEntity */ @OperationLog(value = "指定文件 id,获取文件", type = OperationLogType.API) @PreAuthorize("hasRole('" + SYSTEM_ADMIN + "') OR hasAuthority('" + FILE + "/ONE')") @GetMapping(value = "/one/{id}") public ResponseEntity getOne(@PathVariable Long id) { return new ResponseEntity<>(fileService.getOne(id), HttpStatus.OK); } /** * 分页获取所有文件 * * @param page 页 * @param rows 每页显示数量 * @return ResponseEntity> */ @OperationLog(value = "分页获取所有文件", type = OperationLogType.API) @PreAuthorize("hasRole('" + SYSTEM_ADMIN + "') OR hasAuthority('" + FILE + "/PAGE_ALL')") @GetMapping(value = "/page_all") public ResponseEntity> pageAll(@RequestParam Integer page, @RequestParam Integer rows) { return new ResponseEntity<>(fileService.pageAll(page, rows), HttpStatus.OK); } /** * 单个文件上传 * * @param file 文件 * @return ResponseEntity */ @OperationLog(value = "单个文件上传", type = OperationLogType.API) @PreAuthorize("hasRole('" + SYSTEM_ADMIN + "') OR hasAuthority('" + FILE + "/UPLOAD_ONE')") @PostMapping(value = "/upload_one") public ResponseEntity uploadOne(HttpServletRequest httpServletRequest, @RequestParam MultipartFile file) throws BaseResponseException { LOGGER.info("User-Agent={}", httpServletRequest.getHeader("User-Agent")); return new ResponseEntity<>(fileService.uploadOne(file), HttpStatus.OK); } /** * 多个文件上传 * * @param files 文件 file array * @return ResponseEntity */ @OperationLog(value = "多个文件上传", type = OperationLogType.API) @PreAuthorize("hasRole('" + SYSTEM_ADMIN + "') OR hasAuthority('" + FILE + "/UPLOAD_ALL')") @PostMapping(value = "/upload_all") public ResponseEntity> uploadAll(@RequestParam("file[]") List files) throws BaseResponseException { return new ResponseEntity<>(fileService.uploadAll(files), HttpStatus.OK); } /** * 指定文件 guid,下载文件 * * @param httpServletRequest HttpServletRequest * @param httpServletResponse HttpServletResponse * @param guid 文件 guid * @throws BaseResponseException BaseResponseException */ @OperationLog(value = "指定文件 guid,下载文件", type = OperationLogType.API) @PreAuthorize("hasRole('" + SYSTEM_ADMIN + "') OR hasAuthority('" + FILE + "/DOWNLOAD')") @GetMapping(value = "/download/{guid:.+}") public void download(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, @PathVariable String guid) throws BaseResponseException { fileService.download(httpServletRequest, httpServletResponse, guid); } /** * 分页获取所有图片文件 * * @param page 页 * @param rows 每页显示数量 * @return ResponseEntity> */ @OperationLog(value = "分页获取所有图片文件", type = OperationLogType.API) @PreAuthorize("hasRole('" + SYSTEM_ADMIN + "') OR hasAuthority('" + FILE + "/PAGE_ALL_IMAGE')") @GetMapping(value = "/page_all_image") public ResponseEntity> pageAllImage(@RequestParam Integer page, @RequestParam Integer rows) { return new ResponseEntity<>(fileService.pageAllImage(page, rows, null), HttpStatus.OK); } /** * 根据当前用户,分页获取所有图片文件 * * @param page 页 * @param rows 每页显示数量 * @return ResponseEntity> */ @OperationLog(value = "根据当前用户,分页获取所有图片文件", type = OperationLogType.API) @PreAuthorize("hasRole('" + SYSTEM_ADMIN + "') OR hasAuthority('" + FILE + "/PAGE_ALL_IMAGE')") @GetMapping(value = "/page_all_image_by_current_user") public ResponseEntity> pageAllImageByCurrentUser(@RequestParam Integer page, @RequestParam Integer rows) { return new ResponseEntity<>(fileService.pageAllImage(page, rows, userService.getCurrentUser().getId()), HttpStatus.OK); } } ================================================ FILE: src/main/java/com/godcheese/nimrod/system/api/OperationLogRestController.java ================================================ package com.godcheese.nimrod.system.api; import com.godcheese.nimrod.common.easyui.Pagination; import com.godcheese.nimrod.common.operationlog.OperationLog; import com.godcheese.nimrod.common.operationlog.OperationLogType; import com.godcheese.nimrod.system.entity.OperationLogEntity; import com.godcheese.nimrod.system.service.OperationLogService; import com.godcheese.tile.web.exception.BaseResponseException; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.http.HttpStatus; import org.springframework.http.MediaType; import org.springframework.http.ResponseEntity; import org.springframework.security.access.prepost.PreAuthorize; import org.springframework.web.bind.annotation.*; import com.godcheese.nimrod.system.System; import java.util.List; import static com.godcheese.nimrod.common.security.SimpleUserDetailsServiceImpl.SYSTEM_ADMIN; /** * @author godcheese [godcheese@outlook.com] * @date 2018-02-22 */ @RestController @RequestMapping(value = System.Api.OPERATION_LOG, produces = MediaType.APPLICATION_JSON_VALUE) public class OperationLogRestController { private static final String OPERATION_LOG = "/API/SYSTEM/OPERATION_LOG"; @Autowired private OperationLogService operationLogService; /** * 指定操作日志 id,批量删除操作日志 * * @return ResponseEntity */ @PreAuthorize("hasRole('" + SYSTEM_ADMIN + "') OR hasAuthority('" + OPERATION_LOG + "/DELETE_ALL')") @PostMapping(value = "/delete_all") public ResponseEntity deleteAll(@RequestParam("id[]") List idList) { return new ResponseEntity<>(operationLogService.deleteAll(idList), HttpStatus.OK); } /** * 指定操作日志 id,获取操作日志 * * @param id 操作日志 id * @return ResponseEntity */ @OperationLog(value = "指定操作日志 id,获取操作日志", type = OperationLogType.API) @PreAuthorize("hasRole('" + SYSTEM_ADMIN + "') OR hasAuthority('" + OPERATION_LOG + "/ONE')") @GetMapping(value = "/one/{id}") public ResponseEntity getOne(@PathVariable Long id) { return new ResponseEntity<>(operationLogService.getOne(id), HttpStatus.OK); } /** * 分页获取所有操作日志 * * @param page 页 * @param rows 每页显示数量 * @return ResponseEntity> */ @OperationLog(value = "分页获取所有操作日志", type = OperationLogType.API) @PreAuthorize("hasRole('" + SYSTEM_ADMIN + "') OR hasAuthority('" + OPERATION_LOG + "/PAGE_ALL')") @GetMapping(value = "/page_all") public ResponseEntity> pageAll(@RequestParam Integer page, @RequestParam Integer rows) throws BaseResponseException { return new ResponseEntity<>(operationLogService.pageAll(page, rows), HttpStatus.OK); } /** * 清空所有操作日志 * * @return ResponseEntity */ @OperationLog(value = "清空所有操作日志", type = OperationLogType.API) @PreAuthorize("hasRole('" + SYSTEM_ADMIN + "') OR hasAuthority('" + OPERATION_LOG + "/CLEAR_ALL')") @PostMapping(value = "/clear_all") public ResponseEntity clearAll() { operationLogService.clearAll(); return new ResponseEntity<>(HttpStatus.OK); } } ================================================ FILE: src/main/java/com/godcheese/nimrod/system/api/SystemRestController.java ================================================ package com.godcheese.nimrod.system.api; import com.godcheese.nimrod.common.operationlog.OperationLog; import com.godcheese.nimrod.common.operationlog.OperationLogType; import com.godcheese.nimrod.common.others.FailureEntity; import com.godcheese.nimrod.system.System; import com.godcheese.nimrod.system.service.DictionaryService; import com.godcheese.tile.util.ColorUtil; import com.godcheese.tile.util.ImageUtil; import com.godcheese.tile.util.RandomUtil; import com.godcheese.tile.web.exception.BaseResponseException; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.core.io.ClassPathResource; import org.springframework.core.io.ResourceLoader; import org.springframework.http.HttpStatus; import org.springframework.http.MediaType; import org.springframework.http.ResponseEntity; import org.springframework.security.access.prepost.PreAuthorize; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; import javax.imageio.ImageIO; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import java.awt.*; import java.io.IOException; import java.io.InputStream; import java.util.HashMap; import java.util.Map; import static com.godcheese.nimrod.common.security.SimpleUserDetailsServiceImpl.SYSTEM_ADMIN; /** * @author godcheese [godcheese@outlook.com] * @date 2018-02-22 */ @RestController @RequestMapping(value = System.Api.SYSTEM, produces = MediaType.APPLICATION_JSON_VALUE) public class SystemRestController { private static final Logger LOGGER = LoggerFactory.getLogger(SystemRestController.class); private static final String SYSTEM = "/API/SYSTEM"; public static final String VERIFY_CODE_NAME = "verifyCode"; @Autowired private DictionaryService dictionaryService; @Autowired private FailureEntity failureEntity; /** * 获取验证码 * * @param httpServletResponse HttpServletResponse * @param httpServletRequest HttpServletRequest * @throws BaseResponseException BaseResponseException */ @OperationLog(value = "获取验证码", type = OperationLogType.API) @GetMapping(value = "/verify_code") public void verifyCode(HttpServletResponse httpServletResponse, HttpServletRequest httpServletRequest) throws BaseResponseException { long expiration = Long.parseLong((String) dictionaryService.get("VERIFY_CODE", "EXPIRATION")); boolean yawp = Boolean.parseBoolean((String) dictionaryService.get("VERIFY_CODE", "YAWP")); int stringLength = Integer.parseInt((String) dictionaryService.get("VERIFY_CODE", "STRING_LENGTH")); int interLine = Integer.parseInt((String) dictionaryService.get("VERIFY_CODE", "INTER_LINE")); String hexBackgroundColor = String.valueOf(dictionaryService.get("VERIFY_CODE", "HEX_BACKGROUND_COLOR")); String fontColor = String.valueOf(dictionaryService.get("VERIFY_CODE", "FONT_COLOR")); String fontPath = String.valueOf(dictionaryService.get("VERIFY_CODE", "FONT_PATH")); stringLength = (stringLength >= 3 && stringLength <= 8) ? stringLength : 4; interLine = (interLine >= 1 && interLine <= 8) ? interLine : 0; expiration = (expiration >= 20) ? expiration : 60; hexBackgroundColor = hexBackgroundColor.length() == 7 ? hexBackgroundColor : "#0064c8"; fontColor = fontColor.length() == 7 ? fontColor : "#ffffff"; ImageUtil.VerifyCodeImage verifyCodeImage; try { InputStream fontInputStream = null; if (fontPath.startsWith(ResourceLoader.CLASSPATH_URL_PREFIX)) { fontPath = fontPath.substring(ResourceLoader.CLASSPATH_URL_PREFIX.length()); fontInputStream = new ClassPathResource(fontPath).getInputStream(); } else { fontInputStream = this.getClass().getClassLoader().getResourceAsStream(fontPath); } if (fontInputStream == null) { throw new BaseResponseException(failureEntity.i18n("system.verify_code_create_fail_font_not_exists", fontPath)); } verifyCodeImage = ImageUtil.createVerifyCodeImage(114, 40, ColorUtil.getRGBColorByHexString(hexBackgroundColor), RandomUtil.randomString(stringLength, RandomUtil.NUMBER_LETTER), ColorUtil.getRGBColorByHexString(fontColor), fontInputStream, yawp, interLine, expiration); httpServletResponse.addHeader("Pragma", "no-cache"); httpServletResponse.addHeader("Cache-Control", "no-cache"); httpServletResponse.addHeader("Expires", "0"); // 生成验证码,写入用户session httpServletRequest.getSession().setAttribute(VERIFY_CODE_NAME, verifyCodeImage); // 输出验证码给客户端 httpServletResponse.setContentType(MediaType.IMAGE_PNG_VALUE); ImageIO.write(verifyCodeImage.getBufferedImage(), "png", httpServletResponse.getOutputStream()); } catch (FontFormatException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); throw new BaseResponseException(failureEntity.i18n("system.verify_code_create_fail")); } } /** * 获取系统信息 * * @param httpServletResponse HttpServletResponse * @param httpServletRequest HttpServletRequest * @return ResponseEntity> */ @OperationLog(value = "获取系统信息", type = OperationLogType.API) @PreAuthorize("hasRole('" + SYSTEM_ADMIN + "') OR hasAuthority('" + SYSTEM + "/SYSTEM_INFO')") @GetMapping(value = "/system_info") public ResponseEntity> systemInfo(HttpServletResponse httpServletResponse, HttpServletRequest httpServletRequest) throws BaseResponseException { Map map = new HashMap<>(1); map.put("osName", java.lang.System.getProperty("os.name")); map.put("osVersion", java.lang.System.getProperty("os.version")); map.put("osArch", java.lang.System.getProperty("os.arch")); map.put("javaHome", java.lang.System.getProperty("java.home")); map.put("javaVersion", java.lang.System.getProperty("java.version")); /** * "user.timezone": "Asia/Shanghai", * "os.name": "Mac OS X", * "os.version": "10.14.5", * "os.arch": "x86_64", * "java.home": "/Library/Java/JavaVirtualMachines/jdk1.8.0_192.jdk/Contents/Home/jre", * "java.version": "1.8.0_192", */ return new ResponseEntity<>(map, HttpStatus.OK); } } ================================================ FILE: src/main/java/com/godcheese/nimrod/system/controller/DictionaryCategoryController.java ================================================ package com.godcheese.nimrod.system.controller; import com.godcheese.nimrod.common.others.Common; import com.godcheese.nimrod.system.System; import org.springframework.security.access.prepost.PreAuthorize; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.RequestMapping; /** * @author godcheese [godcheese@outlook.com] * @date 2018-02-22 */ @Controller @RequestMapping(System.Page.DICTIONARY_CATEGORY) public class DictionaryCategoryController { @PreAuthorize("isAuthenticated()") @RequestMapping("/add_dialog") public String addDialog() { return Common.trimSlash(System.Page.DICTIONARY_CATEGORY + "/add_dialog"); } @PreAuthorize("isAuthenticated()") @RequestMapping("/edit_dialog") public String editDialog() { return Common.trimSlash(System.Page.DICTIONARY_CATEGORY + "/edit_dialog"); } } ================================================ FILE: src/main/java/com/godcheese/nimrod/system/controller/DictionaryController.java ================================================ package com.godcheese.nimrod.system.controller; import com.godcheese.nimrod.common.others.Common; import com.godcheese.nimrod.system.System; import org.springframework.security.access.prepost.PreAuthorize; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.RequestMapping; import static com.godcheese.nimrod.common.security.SimpleUserDetailsServiceImpl.SYSTEM_ADMIN; /** * @author godcheese [godcheese@outlook.com] * @date 2018-02-22 */ @Controller @RequestMapping(System.Page.DICTIONARY) public class DictionaryController { @PreAuthorize("hasRole('" + SYSTEM_ADMIN + "') OR hasAuthority('/SYSTEM/DICTIONARY/LIST')") @RequestMapping("/list") public String list() { return Common.trimSlash(System.Page.DICTIONARY + "/list"); } @PreAuthorize("isAuthenticated()") @RequestMapping("/add_dialog") public String addDialog() { return Common.trimSlash(System.Page.DICTIONARY + "/add_dialog"); } @PreAuthorize("isAuthenticated()") @RequestMapping("/edit_dialog") public String editDialog() { return Common.trimSlash(System.Page.DICTIONARY + "/edit_dialog"); } } ================================================ FILE: src/main/java/com/godcheese/nimrod/system/controller/FileController.java ================================================ package com.godcheese.nimrod.system.controller; import com.godcheese.nimrod.common.others.Common; import com.godcheese.nimrod.system.System; import org.springframework.security.access.prepost.PreAuthorize; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.RequestMapping; import static com.godcheese.nimrod.common.security.SimpleUserDetailsServiceImpl.SYSTEM_ADMIN; /** * @author godcheese [godcheese@outlook.com] * @date 2018-02-22 */ @Controller @RequestMapping(System.Page.FILE) public class FileController { @PreAuthorize("hasRole('" + SYSTEM_ADMIN + "') OR hasAuthority('/SYSTEM/FILE/LIST')") @RequestMapping("/list") public String list() { return Common.trimSlash(System.Page.FILE + "/list"); } @PreAuthorize("isAuthenticated()") @RequestMapping("/upload_one_dialog") public String uploadOneDialog() { return Common.trimSlash(System.Page.FILE + "/upload_one_dialog"); } @PreAuthorize("isAuthenticated()") @RequestMapping("/upload_all_dialog") public String uploadAllDialog() { return Common.trimSlash(System.Page.FILE + "/upload_all_dialog"); } @PreAuthorize("isAuthenticated()") @RequestMapping("/edit_dialog") public String editDialog() { return Common.trimSlash(System.Page.FILE + "/edit_dialog"); } } ================================================ FILE: src/main/java/com/godcheese/nimrod/system/controller/OperationLogController.java ================================================ package com.godcheese.nimrod.system.controller; import com.godcheese.nimrod.common.others.Common; import com.godcheese.nimrod.system.System; import org.springframework.security.access.prepost.PreAuthorize; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.RequestMapping; import static com.godcheese.nimrod.common.security.SimpleUserDetailsServiceImpl.SYSTEM_ADMIN; /** * @author godcheese [godcheese@outlook.com] * @date 2018-02-22 */ @Controller @RequestMapping(System.Page.OPERATION_LOG) public class OperationLogController { @PreAuthorize("hasRole('" + SYSTEM_ADMIN + "') OR hasAuthority('/SYSTEM/OPERATION_LOG/LIST')") @RequestMapping("/list") public String list() { return Common.trimSlash(System.Page.OPERATION_LOG + "/list"); } @PreAuthorize("isAuthenticated()") @RequestMapping("/view_dialog") public String viewDialog() { return Common.trimSlash(System.Page.OPERATION_LOG + "/view_dialog"); } } ================================================ FILE: src/main/java/com/godcheese/nimrod/system/controller/SystemController.java ================================================ package com.godcheese.nimrod.system.controller; import com.godcheese.nimrod.common.Url; import com.godcheese.nimrod.common.operationlog.OperationLog; import com.godcheese.nimrod.common.others.Common; import com.godcheese.nimrod.system.System; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Value; import org.springframework.security.access.prepost.PreAuthorize; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.RequestMapping; import static com.godcheese.nimrod.common.security.SimpleUserDetailsServiceImpl.SYSTEM_ADMIN; /** * @author godcheese [godcheese@outlook.com] * @date 2018-02-22 */ @Controller @RequestMapping public class SystemController { private static final Logger LOGGER = LoggerFactory.getLogger(SystemController.class); @Value("${server.error.path}") private String serverErrorPath; /** * 用户登录后首页 * * @return String */ @OperationLog(value = "首页") @PreAuthorize("hasRole('" + SYSTEM_ADMIN + "') OR hasAnyAuthority('/','/INDEX','/SYSTEM','/SYSTEM/INDEX')") @RequestMapping(value = {"/", Url.Page.INDEX, System.Page.SYSTEM, System.Page.INDEX}) public String index() { return Common.trimSlash(System.Page.SYSTEM + "/index"); } /** * 工作台 * * @return String */ @OperationLog(value = "工作台") @PreAuthorize("hasRole('" + SYSTEM_ADMIN + "') OR hasAuthority('/SYSTEM/WORKBENCH')") @RequestMapping(value = System.Page.WORKBENCH) public String workbench() { return Common.trimSlash(System.Page.WORKBENCH); } } ================================================ FILE: src/main/java/com/godcheese/nimrod/system/entity/DictionaryCategoryEntity.java ================================================ package com.godcheese.nimrod.system.entity; import com.godcheese.nimrod.common.easyui.TreeGridAdapter; import java.io.Serializable; import java.util.Date; /** * @author godcheese [godcheese@outlook.com] * @date 2018-02-22 */ public class DictionaryCategoryEntity extends TreeGridAdapter implements Serializable { private static final long serialVersionUID = -7781485490574400936L; private Long id; /** * 分类名称 */ private String name; /** * 父级分类 id */ private Long parentId; /** * 排序 */ private Long sort; /** * 备注 */ private String remark; /** * 更新时间 */ private Date gmtModified; /** * 创建时间 */ private Date gmtCreated; public Long getId() { return id; } public void setId(Long id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } public Long getParentId() { return parentId; } public void setParentId(Long parentId) { this.parentId = parentId; } public Long getSort() { return sort; } public void setSort(Long sort) { this.sort = sort; } public String getRemark() { return remark; } public void setRemark(String remark) { this.remark = remark; } public Date getGmtModified() { return gmtModified; } public void setGmtModified(Date gmtModified) { this.gmtModified = gmtModified; } public Date getGmtCreated() { return gmtCreated; } public void setGmtCreated(Date gmtCreated) { this.gmtCreated = gmtCreated; } } ================================================ FILE: src/main/java/com/godcheese/nimrod/system/entity/DictionaryEntity.java ================================================ package com.godcheese.nimrod.system.entity; import com.godcheese.nimrod.common.exportbyexcel.ExportByExcel; import com.godcheese.nimrod.common.exportbyexcel.IsOrNotExportByExcelHandler; import com.godcheese.nimrod.common.exportbyexcel.SimpleDateFormatExportByExcelHandler; import java.io.Serializable; import java.util.Date; /** * @author godcheese [godcheese@outlook.com] * @date 2018-02-22 */ public class DictionaryEntity implements Serializable { private static final long serialVersionUID = 1964884843454780630L; /** * id */ @ExportByExcel(name = "ID", importIgnore = true, exportIgnore = true) private Long id; /** * 字典键名 */ @ExportByExcel("字典键名") private String keyName; /** * 字典键 */ @ExportByExcel(name = "字典键") private String key; /** * 字典值名 */ @ExportByExcel("字典值名") private String valueName; /** * 字典值别名 */ @ExportByExcel("字典值别名") private String valueSlug; /** * 字典值 */ @ExportByExcel("字典值") private String value; /** * 字典分类 id */ private Long dictionaryCategoryId; /** * 是否有效(0=否,1=是,默认=0) */ @ExportByExcel(value = "是否启用", handler = IsOrNotExportByExcelHandler.class) private Integer enabled; /** * 排序 */ @ExportByExcel("排序") private Long sort; /** * 备注 */ @ExportByExcel("备注") private String remark; /** * 更新时间 */ @ExportByExcel(value = "更新时间", handler = SimpleDateFormatExportByExcelHandler.class) private Date gmtModified; /** * 创建时间 */ @ExportByExcel(value = "创建时间", handler = SimpleDateFormatExportByExcelHandler.class) private Date gmtCreated; public Long getId() { return id; } public void setId(Long id) { this.id = id; } public String getKeyName() { return keyName; } public void setKeyName(String keyName) { this.keyName = keyName; } public String getKey() { return key; } public void setKey(String key) { this.key = key; } public String getValueName() { return valueName; } public void setValueName(String valueName) { this.valueName = valueName; } public String getValueSlug() { return valueSlug; } public void setValueSlug(String valueSlug) { this.valueSlug = valueSlug; } public String getValue() { return value; } public void setValue(String value) { this.value = value; } public Integer getEnabled() { return enabled; } public void setEnabled(Integer enabled) { this.enabled = enabled; } public Long getDictionaryCategoryId() { return dictionaryCategoryId; } public void setDictionaryCategoryId(Long dictionaryCategoryId) { this.dictionaryCategoryId = dictionaryCategoryId; } public Long getSort() { return sort; } public void setSort(Long sort) { this.sort = sort; } public String getRemark() { return remark; } public void setRemark(String remark) { this.remark = remark; } public Date getGmtModified() { return gmtModified; } public void setGmtModified(Date gmtModified) { this.gmtModified = gmtModified; } public Date getGmtCreated() { return gmtCreated; } public void setGmtCreated(Date gmtCreated) { this.gmtCreated = gmtCreated; } @Override public String toString() { return "DictionaryEntity{" + "id=" + id + ", key='" + key + '\'' + ", keyName='" + keyName + '\'' + ", valueName='" + valueName + '\'' + ", valueSlug='" + valueSlug + '\'' + ", value='" + value + '\'' + ", enabled=" + enabled + ", dictionaryCategoryId=" + dictionaryCategoryId + ", sort=" + sort + ", remark='" + remark + '\'' + ", gmtModified=" + gmtModified + ", gmtCreated=" + gmtCreated + '}'; } } ================================================ FILE: src/main/java/com/godcheese/nimrod/system/entity/FileEntity.java ================================================ package com.godcheese.nimrod.system.entity; import com.godcheese.nimrod.common.others.BaseEntityAdapter; import java.io.Serializable; import java.util.Date; /** * @author godcheese [godcheese@outlook.com] * @date 2018-02-22 */ public class FileEntity extends BaseEntityAdapter implements Serializable { private static final long serialVersionUID = -361336044807379339L; /** * id */ private Long id; /** * 用户 id */ private Long userId; /** * 文件名 */ private String name; /** * 文件大小 */ private Long size; /** * 文件美化大小 */ private String prettySize; /** * MIME 类型 */ private String mimeType; /** * 文件路径 */ private String path; /** * 唯一标识符 */ private String guid; /** * 备注 */ private String remark; /** * 更新时间 */ private Date gmtModified; /** * 创建时间 */ private Date gmtCreated; public Long getId() { return id; } public void setId(Long id) { this.id = id; } public Long getUserId() { return userId; } public void setUserId(Long userId) { this.userId = userId; } public String getName() { return name; } public void setName(String name) { this.name = name; } public Long getSize() { return size; } public void setSize(Long size) { this.size = size; } public String getPrettySize() { return prettySize; } public void setPrettySize(String prettySize) { this.prettySize = prettySize; } public String getMimeType() { return mimeType; } public void setMimeType(String mimeType) { this.mimeType = mimeType; } public String getPath() { return path; } public void setPath(String path) { this.path = path; } public String getGuid() { return guid; } public void setGuid(String guid) { this.guid = guid; } public String getRemark() { return remark; } public void setRemark(String remark) { this.remark = remark; } public Date getGmtModified() { return gmtModified; } public void setGmtModified(Date gmtModified) { this.gmtModified = gmtModified; } public Date getGmtCreated() { return gmtCreated; } public void setGmtCreated(Date gmtCreated) { this.gmtCreated = gmtCreated; } } ================================================ FILE: src/main/java/com/godcheese/nimrod/system/entity/OperationLogEntity.java ================================================ package com.godcheese.nimrod.system.entity; import com.godcheese.nimrod.common.others.BaseEntityAdapter; import java.io.Serializable; import java.util.Date; /** * @author godcheese [godcheese@outlook.com] * @date 2018-02-22 */ public class OperationLogEntity extends BaseEntityAdapter implements Serializable { private static final long serialVersionUID = 723090697169069573L; private Long id; /** * 访问用户 id */ private Long userId; /** * 用户 IP */ private String ipAddress; /** * 操作类型 */ private Integer operationType; /** * 操作说明 */ private String operation; /** * 请求耗时(毫秒)consumingTime */ private Long consumingTime; /** * 请求地址 */ private String requestUrl; /** * 请求方法 */ private String requestMethod; /** * 请求参数 */ private String requestParameter; /** * 请求语言 */ private String acceptLanguage; /** * 请求来源 */ private String referer; /** * 用户代理 */ private String userAgent; /** * Handler */ private String handler; /** * 异常堆栈 */ private String stackTrace; /** * Session ID */ private String sessionId; /** * Cookie */ private String cookie; /** * 响应状态码 */ private String status; /** * 创建时间 */ private Date gmtCreated; public Long getId() { return id; } public void setId(Long id) { this.id = id; } public Long getUserId() { return userId; } public void setUserId(Long userId) { this.userId = userId; } public String getIpAddress() { return ipAddress; } public void setIpAddress(String ipAddress) { this.ipAddress = ipAddress; } public Integer getOperationType() { return operationType; } public void setOperationType(Integer operationType) { this.operationType = operationType; } public String getOperation() { return operation; } public void setOperation(String operation) { this.operation = operation; } public Long getConsumingTime() { return consumingTime; } public void setConsumingTime(Long consumingTime) { this.consumingTime = consumingTime; } public String getRequestUrl() { return requestUrl; } public void setRequestUrl(String requestUrl) { this.requestUrl = requestUrl; } public String getRequestMethod() { return requestMethod; } public void setRequestMethod(String requestMethod) { this.requestMethod = requestMethod; } public String getRequestParameter() { return requestParameter; } public void setRequestParameter(String requestParameter) { this.requestParameter = requestParameter; } public String getAcceptLanguage() { return acceptLanguage; } public void setAcceptLanguage(String acceptLanguage) { this.acceptLanguage = acceptLanguage; } public String getReferer() { return referer; } public void setReferer(String referer) { this.referer = referer; } public String getUserAgent() { return userAgent; } public void setUserAgent(String userAgent) { this.userAgent = userAgent; } public String getHandler() { return handler; } public void setHandler(String handler) { this.handler = handler; } public String getStackTrace() { return stackTrace; } public void setStackTrace(String stackTrace) { this.stackTrace = stackTrace; } public String getSessionId() { return sessionId; } public void setSessionId(String sessionId) { this.sessionId = sessionId; } public String getCookie() { return cookie; } public void setCookie(String cookie) { this.cookie = cookie; } public String getStatus() { return status; } public void setStatus(String status) { this.status = status; } public Date getGmtCreated() { return gmtCreated; } public void setGmtCreated(Date gmtCreated) { this.gmtCreated = gmtCreated; } @Override public String toString() { return "OperationLogEntity{" + "id=" + id + ", userId=" + userId + ", ipAddress='" + ipAddress + '\'' + ", operationType=" + operationType + ", operation='" + operation + '\'' + ", consumingTime=" + consumingTime + ", requestUrl='" + requestUrl + '\'' + ", requestMethod='" + requestMethod + '\'' + ", requestParameter='" + requestParameter + '\'' + ", acceptLanguage='" + acceptLanguage + '\'' + ", referer='" + referer + '\'' + ", userAgent='" + userAgent + '\'' + ", handler='" + handler + '\'' + ", stackTrace='" + stackTrace + '\'' + ", sessionId='" + sessionId + '\'' + ", cookie='" + cookie + '\'' + ", status='" + status + '\'' + ", gmtCreated=" + gmtCreated + '}'; } } ================================================ FILE: src/main/java/com/godcheese/nimrod/system/mapper/DictionaryCategoryMapper.java ================================================ package com.godcheese.nimrod.system.mapper; import com.godcheese.nimrod.system.entity.DictionaryCategoryEntity; import com.godcheese.tile.mybatis.CrudMapper; import org.apache.ibatis.annotations.Mapper; import org.apache.ibatis.annotations.Param; import org.springframework.stereotype.Component; import java.util.List; /** * @author godcheese [godcheese@outlook.com] * @date 2018-02-22 */ @Component("dictionaryCategoryMapper") @Mapper public interface DictionaryCategoryMapper extends CrudMapper { /** * 分页获取所有父级 id 为 null 的数据字典分类 * * @return List */ List listAllByParentIdIsNull(); /** * 指定父级数据字典分类 id,获取所有数据字典分类 * * @param parentId 父级数据字典分类 id * @return List */ List listAllByParentId(@Param("parentId") Long parentId); /** * 指定父级 id 为 null 的数据字典分类,获取数据字典分类 * * @param parentId 父级数据字典分类 id * @return DictionaryCategoryEntity */ DictionaryCategoryEntity getOneByParentId(@Param("parentId") Long parentId); } ================================================ FILE: src/main/java/com/godcheese/nimrod/system/mapper/DictionaryCategoryMapper.xml ================================================ `dictionary_category` `id`, `name`, `parent_id`, `sort`, `remark`, `gmt_modified`, `gmt_created` insert into (`id`, `name`, `parent_id`, `sort`, `remark`, `gmt_modified`, `gmt_created`) values (#{id}, #{name}, #{parentId}, #{sort}, #{remark}, #{gmtModified}, #{gmtCreated}) update set `name` = #{name}, `parent_id` = #{parentId}, `gmt_modified` = #{gmtModified} where `id`= #{id} delete from where `id` in ( #{item} ) delete from where `id` = #{id} ================================================ FILE: src/main/java/com/godcheese/nimrod/system/mapper/DictionaryMapper.java ================================================ package com.godcheese.nimrod.system.mapper; import com.godcheese.nimrod.system.entity.DictionaryEntity; import com.godcheese.tile.mybatis.CrudMapper; import com.github.pagehelper.Page; import org.apache.ibatis.annotations.Mapper; import org.apache.ibatis.annotations.Param; import org.springframework.stereotype.Component; import java.util.List; /** * @author godcheese [godcheese@outlook.com] * @date 2018-02-22 */ @Component("dictionaryMapper") @Mapper public interface DictionaryMapper extends CrudMapper { /** * 指定数据字典分类 id,获取数据字典 * * @param dictionaryCategoryId 数据字典分类 id * @return DictionaryEntity */ DictionaryEntity getOneByDictionaryCategoryId(@Param("dictionaryCategoryId") Long dictionaryCategoryId); /** * 指定数据字典分类 id,分页获取所有数据字典 * * @param dictionaryCategoryId 数据字典分类 id * @return Page */ Page pageAllByDictionaryCategoryId(@Param("dictionaryCategoryId") Long dictionaryCategoryId); /** * 指定数据字典键和值别名,获取数据字典 * * @param key 数据字典键 * @param valueSlug 数据字典值别名 * @return DictionaryEntity */ DictionaryEntity getOneByKeyAndValueSlug(@Param("key") String key, @Param("valueSlug") String valueSlug); /** * 指定数据字典键,获取所有数据字典 * * @param key 数据字典键 * @return List */ List listAllByKey(@Param("key") String key); /** * 指定数据字典分类 id,分页获取所有数据字典 * * @param dictionaryCategoryId 数据字典分类 id * @return List */ List listAllByDictionaryCategoryId(@Param("dictionaryCategoryId") Long dictionaryCategoryId); } ================================================ FILE: src/main/java/com/godcheese/nimrod/system/mapper/DictionaryMapper.xml ================================================ `dictionary` `id`, `key_name`, `key`, `value_name`, `value_slug`, `value`, `enabled`, `dictionary_category_id`, `sort`, `remark`, `gmt_modified`, `gmt_created` insert into (`id`, `key_name`, `key`, `value_name`, `value_slug`, `value`,`dictionary_category_id`, `enabled`, `sort`, `remark`, `gmt_modified`, `gmt_created`) values (#{id}, #{keyName}, #{key}, #{valueName}, #{valueSlug}, #{value}, #{dictionaryCategoryId}, #{enabled}, #{sort}, #{remark}, #{gmtModified}, #{gmtCreated}) update set `key_name` = #{keyName}, `key` = #{key}, `value_name` = #{valueName}, `value_slug` = #{valueSlug}, `value` = #{value}, `dictionary_category_id` = #{dictionaryCategoryId}, `enabled` = #{enabled}, `sort` = #{sort}, `remark` = #{remark}, `gmt_modified` = #{gmtModified} where `id`= #{id} delete from where `id` = #{id} delete from where `id` in ( #{item} ) ================================================ FILE: src/main/java/com/godcheese/nimrod/system/mapper/FileMapper.java ================================================ package com.godcheese.nimrod.system.mapper; import com.godcheese.nimrod.system.entity.FileEntity; import com.godcheese.tile.mybatis.CrudMapper; import com.github.pagehelper.Page; import org.apache.ibatis.annotations.Mapper; import org.apache.ibatis.annotations.Param; import org.springframework.stereotype.Component; /** * @author godcheese [godcheese@outlook.com] * @date 2018-02-22 */ @Component("fileMapper") @Mapper public interface FileMapper extends CrudMapper { /** * 指定 guid,获取文件 * * @param guid guid * @return FileEntity */ FileEntity getOneByGuid(@Param("guid") String guid); /** * 分页获取所有文件 * * @return Page */ Page pageAll(); Page pageAllByUserId(); /** * 分页获取所有图片文件 * * @return Page */ Page pageAllImage(); Page pageAllImageByUserId(@Param("userId") Long userId); } ================================================ FILE: src/main/java/com/godcheese/nimrod/system/mapper/FileMapper.xml ================================================ `file` `id`, `user_id`, `name`, `size`, `pretty_size`, `mime_type`, `path`, `guid`, `remark`, `gmt_modified`, `gmt_created` insert into ( `user_id`,`name`, `size`, `pretty_size`, `mime_type`, `path`, `guid`, `remark`, `gmt_modified`, `gmt_created`) values (#{userId}, #{name}, #{size}, #{prettySize}, #{mimeType}, #{path}, #{guid}, #{remark}, #{gmtCreated}, #{gmtModified}) update set `name` = #{name}, `size` = #{size}, `pretty_size` = #{prettySize}, `mime_type` = #{mimeType}, `path` = #{path}, `guid` = #{guid}, `remark` = #{remark}, `gmt_created` = #{gmtCreated}, `gmt_modified` = #{gmtModified} where `id`= #{id} delete from where `id` = #{id} delete from where `id` in ( #{item} ) ================================================ FILE: src/main/java/com/godcheese/nimrod/system/mapper/OperationLogMapper.java ================================================ package com.godcheese.nimrod.system.mapper; import com.godcheese.nimrod.system.entity.OperationLogEntity; import com.godcheese.tile.mybatis.CrudMapper; import com.github.pagehelper.Page; import org.apache.ibatis.annotations.Mapper; import org.springframework.stereotype.Component; /** * @author godcheese [godcheese@outlook.com] * @date 2018-02-22 */ @Component("operationLogMapper") @Mapper public interface OperationLogMapper extends CrudMapper { /** * 分页获取所有操作日志 * * @return Page */ Page pageAll(); } ================================================ FILE: src/main/java/com/godcheese/nimrod/system/mapper/OperationLogMapper.xml ================================================ `operation_log` `id`, `user_id`, `ip_address`, `operation_type`, `operation`, `consuming_time`, `request_url`, `request_method`, `request_parameter`, `accept_language`, `referer`, `user_agent`, `handler`, `stack_trace`, `session_id`, `cookie`, `status`, `gmt_created` insert into (`user_id`, `ip_address`, `operation_type`, `operation`, `consuming_time`, `request_url`, `request_method`, `request_parameter`, `accept_language`, `referer`, `user_agent`, `handler`, `stack_trace`, `session_id`, `cookie`, `status`, `gmt_created`) values (#{userId}, #{ipAddress}, #{operationType}, #{operation}, #{consumingTime}, #{requestUrl}, #{requestMethod}, #{requestParameter}, #{acceptLanguage}, #{referer}, #{userAgent}, #{handler}, #{stackTrace}, #{sessionId}, #{cookie}, #{status}, #{gmtCreated}) delete from where `id` = #{id} delete from where `id` in ( #{item} ) truncate table ================================================ FILE: src/main/java/com/godcheese/nimrod/system/service/DictionaryCategoryService.java ================================================ package com.godcheese.nimrod.system.service; import com.godcheese.nimrod.common.easyui.ComboTree; import com.godcheese.nimrod.system.entity.DictionaryCategoryEntity; import com.godcheese.tile.web.exception.BaseResponseException; import java.util.List; /** * @author godcheese [godcheese@outlook.com] * @date 2018-02-22 */ public interface DictionaryCategoryService { /** * 分页获取所有父级数据字典分类 * * @return List */ List listAllParent(); /** * 指定父级数据字典分类 id,获取所有数据字典分类 * * @param parentId 父级数据字典分类 id * @return List */ List listAllByParentId(Long parentId); /** * 新增数据字典分类 * * @param dictionaryCategoryEntity DictionaryCategoryEntity * @return DictionaryCategoryEntity */ DictionaryCategoryEntity insertOne(DictionaryCategoryEntity dictionaryCategoryEntity); /** * 保存数据字典分类 * * @param dictionaryCategoryEntity DictionaryCategoryEntity * @return DictionaryCategoryEntity */ DictionaryCategoryEntity updateOne(DictionaryCategoryEntity dictionaryCategoryEntity) throws BaseResponseException; /** * 指定数据字典分类 id list,批量删除数据字典分类 * * @param idList 数据字典分类 id list * @return int * @throws BaseResponseException BaseResponseException */ int deleteAll(List idList) throws BaseResponseException; /** * 指定数据字典分类 id,获取数据字典分类 * * @param id 数据字典分类 id * @return DictionaryCategoryEntity */ DictionaryCategoryEntity getOne(Long id); /** * 获取所有数据字典分类,以 ComboTree 形式展示 * * @return List */ List listAllDictionaryCategoryComboTree(); /** * 指定父级数据字典分类 id,DictionaryCategoryComboTree list,获取所有子级数据字典分类 * * @param parentId 父级数据字典分类 id * @param dictionaryCategoryComboTreeList DictionaryCategoryComboTree list * @return List */ List getDictionaryCategoryChildrenComboTree(long parentId, List dictionaryCategoryComboTreeList); } ================================================ FILE: src/main/java/com/godcheese/nimrod/system/service/DictionaryService.java ================================================ package com.godcheese.nimrod.system.service; import com.godcheese.nimrod.common.easyui.Pagination; import com.godcheese.nimrod.system.entity.DictionaryEntity; import com.godcheese.tile.web.exception.BaseResponseException; import org.springframework.web.multipart.MultipartFile; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import java.util.List; import java.util.Map; /** * @author godcheese [godcheese@outlook.com] * @date 2018-02-22 */ public interface DictionaryService { /** * 添加数据字典到 ServletContext(内存),高效 */ void addDictionaryToServletContext(); /** * 从数据库获取数据字典值 * * @param key 数据字典键 * @param valueSlug 数据字典值别名 * @return Object */ Object getFromDatabase(String key, String valueSlug); /** * 从内存获取数据字典值 * * @param key 数据字典键 * @param valueSlug 数据字典值别名 * @return Object 数据字典值 */ Object get(String key, String valueSlug); /** * 从内存获取数据字典值 * * @param key 数据字典键 * @param valueSlug 数据字典值别名 * @param defaultValue 数据字典默认值 * @return 数据字典值 */ Object get(String key, String valueSlug, Object defaultValue); /** * 指定数据字典键,从内存获取所有数据字典 * * @param key 数据字典键 * @return List */ List get(String key); /** * 将数据字典包装成 map * * @return Map> */ Map> keyValueMap(); /** * 新增数据字典 * * @param dictionaryEntity DictionaryEntity * @return DictionaryEntity */ DictionaryEntity addOne(DictionaryEntity dictionaryEntity); /** * 保存数据字典 * * @param dictionaryEntity DictionaryEntity * @return DictionaryEntity */ DictionaryEntity saveOne(DictionaryEntity dictionaryEntity); /** * 指定数据字典 id,批量删除数据字典 * * @param idList 数据字典 id list * @return int 已删除数据字典个数 */ int deleteAll(List idList); /** * 指定数据字典 id,获取数据字典 * * @param id 数据字典 id * @return DictionaryEntity */ DictionaryEntity getOne(Long id); /** * 指定数据字典分类 id list,导出所有数据字典 * * @param httpServletRequest HttpServletRequest * @param httpServletResponse HttpServletResponse * @param dictionaryCategoryIdList 数据字典分类 id list * @throws BaseResponseException BaseResponseException */ void exportAllByDictionaryCategoryIdList(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, List dictionaryCategoryIdList) throws BaseResponseException; /** * 指定数据字典分类 id,导入数据字典 * * @param multipartFile 要导入的数据字典 Excel 表文件 * @param dictionaryCategoryId 数据字典分类 id * @throws BaseResponseException BaseResponseException */ void importAllByDictionaryCategoryId(MultipartFile multipartFile, Long dictionaryCategoryId) throws BaseResponseException; /** * 指定父级数据字典分类 id,分页获取所有数据字典 * * @param dictionaryCategoryId 数据字典分类 id * @param page 页 * @param rows 每页显示数量 * @return Pagination */ Pagination pageAllByDictionaryCategoryId(Long dictionaryCategoryId, Integer page, Integer rows); } ================================================ FILE: src/main/java/com/godcheese/nimrod/system/service/FileService.java ================================================ package com.godcheese.nimrod.system.service; import com.godcheese.nimrod.common.easyui.Pagination; import com.godcheese.nimrod.system.entity.FileEntity; import com.godcheese.tile.web.exception.BaseResponseException; import org.springframework.web.multipart.MultipartFile; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import java.util.List; /** * @author godcheese [godcheese@outlook.com] * @date 2018-02-22 */ public interface FileService { /** * 指定文件 id,分页获取所有文件 * * @param page 页 * @param rows 每页显示数量 * @return Pagination */ Pagination pageAll(Integer page, Integer rows); /** * 单文件上传 * * @param file MultipartFile * @return FileEntity * @throws BaseResponseException BaseResponseException */ FileEntity uploadOne(MultipartFile file) throws BaseResponseException; /** * 多文件上传 * * @param fileList MultipartFile list * @return List * @throws BaseResponseException BaseResponseException */ List uploadAll(List fileList) throws BaseResponseException; /** * 保存文件 * * @param fileEntity FileEntity * @return FileEntity */ FileEntity saveOne(FileEntity fileEntity); /** * 指定文件 id list,批量删除文件 * * @param idList API id list * @return int 已删除 API 个数 */ int deleteAll(List idList); /** * 指定文件 id,获取文件 * * @param id 文件 id * @return FileEntity */ FileEntity getOne(Long id); /** * 指定 guid,下载文件 * * @param httpServletRequest HttpServletRequest * @param httpServletResponse HttpServletResponse * @param guid guid * @throws BaseResponseException BaseResponseException */ void download(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, String guid) throws BaseResponseException; /** * 分页获取所有图片文件 * * @param page 页 * @param rows 每页显示数量 * @return Pagination */ Pagination pageAllImage(Integer page, Integer rows, Long userId); } ================================================ FILE: src/main/java/com/godcheese/nimrod/system/service/OperationLogService.java ================================================ package com.godcheese.nimrod.system.service; import com.godcheese.nimrod.common.easyui.Pagination; import com.godcheese.nimrod.system.entity.OperationLogEntity; import java.util.List; /** * @author godcheese [godcheese@outlook.com] * @date 2018-02-22 */ public interface OperationLogService { /** * 分页获取所有操作日志 * * @param page 页 * @param rows 每页显示数量 * @return Pagination */ Pagination pageAll(Integer page, Integer rows); /** * 新增操作日志 * * @param operationLogEntity OperationLogEntity * @return OperationLogEntity */ OperationLogEntity addOne(OperationLogEntity operationLogEntity); /** * 指定操作日志 id,批量删除操作日志 * * @param idList 操作日志 id list * @return 已删除操作日志个数 */ int deleteAll(List idList); /** * 指定操作日志 id,获取操作日志 * * @param id 操作日志 id * @return OperationLogEntity */ OperationLogEntity getOne(Long id); /** * 清空所有操作日志 */ void clearAll(); } ================================================ FILE: src/main/java/com/godcheese/nimrod/system/service/impl/DictionaryCategoryServiceImpl.java ================================================ package com.godcheese.nimrod.system.service.impl; import com.godcheese.nimrod.common.easyui.ComboTree; import com.godcheese.nimrod.common.easyui.EasyUi; import com.godcheese.nimrod.common.others.FailureEntity; import com.godcheese.nimrod.system.entity.DictionaryCategoryEntity; import com.godcheese.nimrod.system.entity.DictionaryEntity; import com.godcheese.nimrod.system.mapper.DictionaryCategoryMapper; import com.godcheese.nimrod.system.mapper.DictionaryMapper; import com.godcheese.nimrod.system.service.DictionaryCategoryService; import com.godcheese.tile.web.exception.BaseResponseException; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import java.util.ArrayList; import java.util.Date; import java.util.List; /** * @author godcheese [godcheese@outlook.com] * @date 2018-02-22 */ @Service public class DictionaryCategoryServiceImpl implements DictionaryCategoryService { private static final Logger LOGGER = LoggerFactory.getLogger(DictionaryCategoryServiceImpl.class); @Autowired private DictionaryCategoryMapper dictionaryCategoryMapper; @Autowired private DictionaryMapper dictionaryMapper; @Autowired private FailureEntity failureEntity; @Override public List listAllParent() { List dictionaryCategoryEntityList = dictionaryCategoryMapper.listAllByParentIdIsNull(); List dictionaryCategoryEntityListResult = new ArrayList<>(); for (DictionaryCategoryEntity dictionaryCategoryEntity : dictionaryCategoryEntityList) { if (dictionaryCategoryMapper.getOneByParentId(dictionaryCategoryEntity.getId()) != null) { dictionaryCategoryEntity.setState(EasyUi.State.CLOSED); } dictionaryCategoryEntityListResult.add(dictionaryCategoryEntity); } return dictionaryCategoryEntityListResult; } @Override public List listAllByParentId(Long parentId) { List dictionaryCategoryEntityList = dictionaryCategoryMapper.listAllByParentId(parentId); List dictionaryCategoryEntityListResult = new ArrayList<>(); for (DictionaryCategoryEntity dictionaryCategoryEntity : dictionaryCategoryEntityList) { if (dictionaryCategoryMapper.getOneByParentId(dictionaryCategoryEntity.getId()) != null) { dictionaryCategoryEntity.setState(EasyUi.State.CLOSED); } dictionaryCategoryEntityListResult.add(dictionaryCategoryEntity); } return dictionaryCategoryEntityListResult; } @Override @Transactional(rollbackFor = Throwable.class) public DictionaryCategoryEntity insertOne(DictionaryCategoryEntity dictionaryCategoryEntity) { Date date = new Date(); dictionaryCategoryEntity.setGmtCreated(date); dictionaryCategoryMapper.insertOne(dictionaryCategoryEntity); return dictionaryCategoryEntity; } @Override @Transactional(rollbackFor = Throwable.class) public DictionaryCategoryEntity updateOne(DictionaryCategoryEntity dictionaryCategoryEntity) throws BaseResponseException { if (dictionaryCategoryEntity.getId().equals(dictionaryCategoryEntity.getParentId())) { throw new BaseResponseException(failureEntity.i18n("dictionary_category.save_fail_do_not_save_self_dictionary_category")); } dictionaryCategoryEntity.setGmtModified(new Date()); dictionaryCategoryMapper.updateOne(dictionaryCategoryEntity); return dictionaryCategoryEntity; } @Override @Transactional(rollbackFor = Throwable.class) public int deleteAll(List idList) throws BaseResponseException { int result = 0; for (Long id : idList) { DictionaryCategoryEntity dictionaryCategoryEntity = dictionaryCategoryMapper.getOneByParentId(id); if (dictionaryCategoryEntity != null) { throw new BaseResponseException(failureEntity.i18n("dictionary_category.delete_fail_has_children_category")); } DictionaryEntity dictionaryEntity = dictionaryMapper.getOneByDictionaryCategoryId(id); if (dictionaryEntity != null) { throw new BaseResponseException(failureEntity.i18n("dictionary_category.delete_fail_has_dictionary")); } dictionaryCategoryMapper.deleteOne(id); result++; } return result; } @Override public DictionaryCategoryEntity getOne(Long id) { return dictionaryCategoryMapper.getOne(id); } @Override public List listAllDictionaryCategoryComboTree() { List comboTreeList = new ArrayList<>(0); List dictionaryCategoryEntityList = dictionaryCategoryMapper.listAll(); for (DictionaryCategoryEntity dictionaryCategoryEntity : dictionaryCategoryEntityList) { ComboTree comboTree = new ComboTree(); comboTree.setId(dictionaryCategoryEntity.getId()); comboTree.setText(dictionaryCategoryEntity.getName()); comboTree.setParentId(dictionaryCategoryEntity.getParentId()); comboTreeList.add(comboTree); } return comboTreeList; } @Override public List getDictionaryCategoryChildrenComboTree(long parentId, List dictionaryCategoryComboTreeList) { List children = new ArrayList<>(0); for (ComboTree comboTree : dictionaryCategoryComboTreeList) { if (comboTree.getParentId() != null && comboTree.getParentId().equals(parentId)) { children.add(comboTree); } } for (ComboTree child : children) { List childChildren = getDictionaryCategoryChildrenComboTree(child.getId(), dictionaryCategoryComboTreeList); child.setChildren(childChildren); } if (children.size() == 0) { return null; } return children; } } ================================================ FILE: src/main/java/com/godcheese/nimrod/system/service/impl/DictionaryServiceImpl.java ================================================ package com.godcheese.nimrod.system.service.impl; import com.godcheese.nimrod.common.easyui.Pagination; import com.godcheese.nimrod.common.exportbyexcel.ExportByExcelUtil; import com.godcheese.nimrod.common.others.FailureEntity; import com.godcheese.nimrod.system.entity.DictionaryEntity; import com.godcheese.nimrod.system.mapper.DictionaryMapper; import com.godcheese.nimrod.system.service.DictionaryService; import com.godcheese.tile.office.ExcelUtil; import com.godcheese.tile.util.DateUtil; import com.godcheese.tile.web.exception.BaseResponseException; import com.github.pagehelper.Page; import com.github.pagehelper.PageHelper; import org.apache.poi.ss.usermodel.Cell; import org.apache.poi.ss.usermodel.Row; import org.apache.poi.ss.usermodel.Sheet; import org.apache.poi.ss.usermodel.Workbook; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import org.springframework.web.context.WebApplicationContext; import org.springframework.web.multipart.MultipartFile; import javax.servlet.ServletContext; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import java.io.IOException; import java.lang.reflect.InvocationTargetException; import java.util.*; /** * @author godcheese [godcheese@outlook.com] * @date 2018-02-22 */ @Service public class DictionaryServiceImpl implements DictionaryService { private static final Logger LOGGER = LoggerFactory.getLogger(DictionaryServiceImpl.class); @Autowired private DictionaryMapper dictionaryMapper; @Autowired private WebApplicationContext webApplicationContext; @Autowired private FailureEntity failureEntity; @Override public void addDictionaryToServletContext() { /** * 是否有效(0=否,1=是,默认=0) */ final int isOrNotIs = 1; final int isOrNotNot = 0; ServletContext servletContext = webApplicationContext.getServletContext(); if (servletContext != null) { List dictionaryEntityList = dictionaryMapper.listAll(); if (dictionaryEntityList != null) { // 添加到内存供 servletContext.getAttribute 获取,如:servletContext.getAttribute('WEB.NAME')、${#servletContext.getAttribute('WEB.NAME')} for (DictionaryEntity dictionaryEntity : dictionaryEntityList) { if (isOrNotIs == dictionaryEntity.getEnabled()) { servletContext.setAttribute(dictionaryEntity.getKey().toUpperCase() + "." + dictionaryEntity.getValueSlug().toUpperCase(), dictionaryEntity.getValue()); } } // 添加到内存供字典键直接获取,如:WEB Map> dictionaryEntityMap = new HashMap<>(6); for (DictionaryEntity dictionaryEntity : dictionaryEntityList) { if (isOrNotIs == dictionaryEntity.getEnabled()) { String key = dictionaryEntity.getKey().toUpperCase(); if (dictionaryEntityMap.containsKey(key)) { List dictionaryEntityList1 = dictionaryEntityMap.get(key); if (!dictionaryEntityList1.contains(dictionaryEntity)) { dictionaryEntityList1.add(dictionaryEntity); dictionaryEntityMap.put(key, dictionaryEntityList1); } } else { List dictionaryEntityList2 = new ArrayList<>(1); dictionaryEntityList2.add(dictionaryEntity); dictionaryEntityMap.put(key, dictionaryEntityList2); } } } for (Map.Entry entry : dictionaryEntityMap.entrySet()) { servletContext.setAttribute((String) entry.getKey(), entry.getValue()); } } } } /** * 从数据库中获取 * * @param key 数据字典键 * @param valueSlug 数据字典值别名 * @return */ @Override public Object getFromDatabase(String key, String valueSlug) { DictionaryEntity dictionaryEntity = dictionaryMapper.getOneByKeyAndValueSlug(key.toUpperCase(), valueSlug.toUpperCase()); if (dictionaryEntity != null) { return dictionaryEntity.getValue(); } return null; } /** * 从内存中获取 * * @param key * @param valueSlug * @return */ private Object getValueByKeyAndValueSlug(String key, String valueSlug) { ServletContext servletContext = webApplicationContext.getServletContext(); if (servletContext != null) { return servletContext.getAttribute(key + "." + valueSlug); } else { return null; } } /** * 从内存中获取字典 * * @param key 数据字典键 * @param valueSlug 数据字典值别名 * @return Object */ @Override public Object get(String key, String valueSlug) { return getValueByKeyAndValueSlug(key, valueSlug); } /** * 从内存中获取 * * @param key 数据字典键 * @param valueSlug 数据字典值别名 * @param defaultValue 数据字典默认值 * @return */ @Override public Object get(String key, String valueSlug, Object defaultValue) { Object v = getValueByKeyAndValueSlug(key, valueSlug); if (v != null) { return v; } return defaultValue; } /** * 从内存获取 * * @param key * @return */ @Override @SuppressWarnings("unchecked") public List get(String key) { return (List) Objects.requireNonNull(webApplicationContext.getServletContext()).getAttribute(key.toUpperCase()); } @Override public Map> keyValueMap() { Map> mapMap = new HashMap<>(6); List dictionaryEntityList = dictionaryMapper.listAll(); if (dictionaryEntityList != null) { for (DictionaryEntity dictionaryEntity : dictionaryEntityList) { if (mapMap.containsKey(dictionaryEntity.getKey())) { Map valueMap = mapMap.get(dictionaryEntity.getKey()); if (!valueMap.containsKey(dictionaryEntity.getValueSlug())) { valueMap.put(dictionaryEntity.getValueSlug(), dictionaryEntity.getValue()); } mapMap.put(dictionaryEntity.getKey(), valueMap); } else { Map valueMap = new HashMap<>(1); valueMap.put(dictionaryEntity.getValueSlug(), dictionaryEntity.getValue()); mapMap.put(dictionaryEntity.getKey(), valueMap); } } } return mapMap; } @Override public Pagination pageAllByDictionaryCategoryId(Long dictionaryCategoryId, Integer page, Integer rows) { Pagination pagination = new Pagination<>(); PageHelper.startPage(page, rows); Page dictionaryEntityPage = dictionaryMapper.pageAllByDictionaryCategoryId(dictionaryCategoryId); pagination.setRows(dictionaryEntityPage.getResult()); pagination.setTotal(dictionaryEntityPage.getTotal()); return pagination; } @Override @Transactional(rollbackFor = Throwable.class) public DictionaryEntity addOne(DictionaryEntity dictionaryEntity) { Date date = new Date(); dictionaryEntity.setKey(dictionaryEntity.getKey().toUpperCase()); dictionaryEntity.setValueSlug(dictionaryEntity.getValueSlug().toUpperCase()); dictionaryEntity.setGmtModified(date); dictionaryEntity.setGmtCreated(date); dictionaryMapper.insertOne(dictionaryEntity); return dictionaryEntity; } @Override @Transactional(rollbackFor = Throwable.class) public DictionaryEntity saveOne(DictionaryEntity dictionaryEntity) { DictionaryEntity dictionaryEntity1 = dictionaryMapper.getOne(dictionaryEntity.getId()); dictionaryEntity1.setKeyName(dictionaryEntity.getKeyName()); dictionaryEntity1.setKey(dictionaryEntity.getKey()); dictionaryEntity1.setKey(dictionaryEntity.getKey().toUpperCase()); dictionaryEntity1.setValueName(dictionaryEntity.getValueName()); dictionaryEntity1.setValueSlug(dictionaryEntity.getValueSlug().toUpperCase()); dictionaryEntity1.setValue(dictionaryEntity.getValue()); dictionaryEntity1.setDictionaryCategoryId(dictionaryEntity.getDictionaryCategoryId()); dictionaryEntity1.setEnabled(dictionaryEntity.getEnabled()); dictionaryEntity1.setSort(dictionaryEntity.getSort()); dictionaryEntity1.setRemark(dictionaryEntity.getRemark()); dictionaryEntity1.setGmtModified(new Date()); dictionaryMapper.updateOne(dictionaryEntity1); return dictionaryEntity1; } @Override @Transactional(rollbackFor = Throwable.class) public int deleteAll(List idList) { return dictionaryMapper.deleteAll(idList); } @Override public DictionaryEntity getOne(Long id) { return dictionaryMapper.getOne(id); } @Override public void exportAllByDictionaryCategoryIdList(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, List idList) throws BaseResponseException { List dictionaryEntityList = new ArrayList<>(); for (Long id : idList) { dictionaryEntityList.addAll(dictionaryMapper.listAllByDictionaryCategoryId(id)); } String filename = "数据字典_" + DateUtil.getNow("yyyyMMddHHmmss") + ".xls"; ExportByExcelUtil.exportEntity(httpServletRequest, httpServletResponse, dictionaryEntityList, DictionaryEntity.class, filename); } @Override @Transactional(rollbackFor = Throwable.class) public void importAllByDictionaryCategoryId(MultipartFile multipartFile, Long categoryId) throws BaseResponseException { try { List> list = uploadAndReadExcel(multipartFile); if (list != null && !list.isEmpty()) { list.remove(0); for (Map map : list) { DictionaryEntity dictionaryEntity = new DictionaryEntity(); dictionaryEntity.setDictionaryCategoryId(categoryId); DictionaryEntity dictionaryEntity1 = ExportByExcelUtil.importEntity(dictionaryEntity, map); int effectRows = dictionaryMapper.insertOne(dictionaryEntity1); if (effectRows <= 0) { throw new BaseResponseException(failureEntity.i18n("dictionary.import_fail")); } } } } catch (IOException | NoSuchMethodException | InstantiationException | IllegalAccessException | InvocationTargetException e) { e.printStackTrace(); throw new BaseResponseException(failureEntity.i18n("dictionary.import_fail")); } } private List> uploadAndReadExcel(MultipartFile multipartFile) throws IOException { List> list = new ArrayList<>(); Workbook workbook = ExcelUtil.getWorkbook(Objects.requireNonNull(multipartFile.getOriginalFilename()), multipartFile.getInputStream()); if (workbook != null) { Sheet sheet = workbook.getSheetAt(0); int rowIndex; for (rowIndex = 0; rowIndex <= sheet.getLastRowNum(); rowIndex++) { Row row = sheet.getRow(rowIndex); int cellIndex; Map map = new HashMap<>(1); for (cellIndex = 0; cellIndex < row.getLastCellNum(); cellIndex++) { map.put(cellIndex, row.getCell(cellIndex)); } list.add(map); } } return list.isEmpty() ? null : list; } } ================================================ FILE: src/main/java/com/godcheese/nimrod/system/service/impl/FileServiceImpl.java ================================================ package com.godcheese.nimrod.system.service.impl; import com.godcheese.nimrod.common.easyui.Pagination; import com.godcheese.nimrod.common.others.FailureEntity; import com.godcheese.nimrod.system.entity.FileEntity; import com.godcheese.nimrod.system.mapper.FileMapper; import com.godcheese.nimrod.system.service.DictionaryService; import com.godcheese.nimrod.system.service.FileService; import com.godcheese.nimrod.user.entity.UserEntity; import com.godcheese.nimrod.user.service.UserService; import com.godcheese.tile.util.DataSizeUtil; import com.godcheese.tile.util.FileUtil; import com.godcheese.tile.web.exception.BaseResponseException; import com.github.pagehelper.Page; import com.github.pagehelper.PageHelper; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import org.springframework.web.multipart.MultipartFile; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import java.io.File; import java.io.IOException; import java.util.*; /** * @author godcheese [godcheese@outlook.com] * @date 2018-02-22 */ @Service public class FileServiceImpl implements FileService { private static final Logger LOGGER = LoggerFactory.getLogger(FileServiceImpl.class); @Autowired private FileMapper fileMapper; @Autowired private DictionaryService dictionaryService; @Autowired private FailureEntity failureEntity; @Autowired private UserService userService; @Override public Pagination pageAll(Integer page, Integer rows) { Pagination pagination = new Pagination<>(); PageHelper.startPage(page, rows); Page fileEntityPage = fileMapper.pageAll(); List fileEntityList = fileEntityPage.getResult(); List fileEntityListResult = new ArrayList<>(); for (FileEntity fileEntity : fileEntityList) { if (fileEntity.getUserId() != null) { UserEntity userEntity = userService.getOneByIdNoPassword(fileEntity.getUserId()); if (userEntity != null) { fileEntity.setUsername(userEntity.getUsername()); } } fileEntityListResult.add(fileEntity); } pagination.setRows(fileEntityListResult); pagination.setTotal(fileEntityPage.getTotal()); return pagination; } /** * 文件上传 * * @param file * @return * @throws BaseResponseException * @throws IOException */ private FileEntity upload(MultipartFile file) throws BaseResponseException, IOException { FileEntity fileEntity; Date date = new Date(); fileEntity = new FileEntity(); fileEntity.setUserId(userService.getCurrentUser().getId()); fileEntity.setName(file.getOriginalFilename()); fileEntity.setSize(file.getSize()); fileEntity.setPrettySize(DataSizeUtil.pretty(file.getSize())); fileEntity.setMimeType(file.getContentType()); fileEntity.setGmtModified(date); fileEntity.setGmtCreated(date); Calendar calendar = Calendar.getInstance(); calendar.setTime(date); String year = String.valueOf(calendar.get(Calendar.YEAR)); String month = String.valueOf(calendar.get(Calendar.MONTH) + 1); String guid = (String.valueOf(calendar.toInstant().toEpochMilli()) + UUID.randomUUID() + "." + FileUtil.getSuffix(file.getOriginalFilename())).replaceAll("-", ""); String datePath = File.separator + year + File.separator + month; String absolutePath = FileUtil.getCurrentRootPath() + dictionaryService.get("FILE", "UPLOAD_PATH") + datePath; if (!FileUtil.createDirectory(absolutePath)) { throw new BaseResponseException(failureEntity.i18n("file.upload_fail")); } fileEntity.setGuid(guid); fileEntity.setPath(datePath + File.separator + guid); String absolutePathGuid = File.separator + FileUtil.filterFileSeparator(absolutePath + File.separator + guid); file.transferTo(new File(absolutePathGuid)); fileMapper.insertOne(fileEntity); return fileEntity; } @Override @Transactional(rollbackFor = Throwable.class) public FileEntity uploadOne(MultipartFile file) throws BaseResponseException { FileEntity fileEntity; try { fileEntity = upload(file); } catch (IOException e) { e.printStackTrace(); throw new BaseResponseException(failureEntity.i18n("file.upload_fail")); } return fileEntity; } @Override @Transactional(rollbackFor = Throwable.class) public List uploadAll(List fileList) throws BaseResponseException { if (fileList == null || fileList.isEmpty()) { throw new BaseResponseException(failureEntity.i18n("file.upload_fail")); } List fileEntityList = new ArrayList<>(); try { for (MultipartFile file : fileList) { fileEntityList.add(upload(file)); } } catch (IOException e) { e.printStackTrace(); throw new BaseResponseException(failureEntity.i18n("file.upload_fail")); } return fileEntityList.isEmpty() ? null : fileEntityList; } @Override @Transactional(rollbackFor = Throwable.class) public FileEntity saveOne(FileEntity fileEntity) { FileEntity fileEntity1 = fileMapper.getOne(fileEntity.getId()); fileEntity1.setName(fileEntity.getName()); fileEntity1.setRemark(fileEntity.getRemark()); fileEntity1.setGmtModified(new Date()); fileMapper.updateOne(fileEntity1); return fileEntity1; } @Override @Transactional(rollbackFor = Throwable.class) public int deleteAll(List idList) { int result = 0; for (Long id : idList) { FileEntity fileEntity = fileMapper.getOne(id); if (fileEntity != null) { String uploadPath = (String) dictionaryService.get("ATTACHMENT", "UPLOAD_PATH"); String filename = File.separator + FileUtil.filterFileSeparator(FileUtil.getCurrentRootPath() + uploadPath + fileEntity.getPath() + fileEntity.getGuid()); FileUtil.delete(new File(filename)); fileMapper.deleteOne(id); } result++; } return result; } @Override public FileEntity getOne(Long id) { FileEntity fileEntity = fileMapper.getOne(id); if (fileEntity != null) { if (fileEntity.getUserId() != null) { UserEntity userEntity = userService.getOneByIdNoPassword(fileEntity.getUserId()); if (userEntity != null) { fileEntity.setUsername(userEntity.getUsername()); } } return fileEntity; } return null; } @Override public void download(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, String guid) throws BaseResponseException { FileEntity fileEntity = fileMapper.getOneByGuid(guid); if (fileEntity == null) { throw new BaseResponseException(failureEntity.i18n("file.download_fail_file_not_exists")); } String absolutePath = File.separator + FileUtil.filterFileSeparator(FileUtil.getCurrentRootPath() + dictionaryService.get("FILE", "UPLOAD_PATH") + fileEntity.getPath()); try { FileUtil.download(httpServletRequest, httpServletResponse, fileEntity.getMimeType(), fileEntity.getName(), new File(absolutePath)); } catch (IOException e) { e.printStackTrace(); throw new BaseResponseException(failureEntity.i18n("file.download_fail")); } } @Override public Pagination pageAllImage(Integer page, Integer rows, Long userId) { Pagination pagination = new Pagination<>(); PageHelper.startPage(page, rows); Page fileEntityPage; if (userId != null) { fileEntityPage = fileMapper.pageAllImageByUserId(userId); } else { fileEntityPage = fileMapper.pageAllImage(); } List fileEntityList = fileEntityPage.getResult(); List fileEntityListResult = new ArrayList<>(); for (FileEntity fileEntity : fileEntityList) { if (fileEntity.getUserId() != null) { UserEntity userEntity = userService.getOneByIdNoPassword(fileEntity.getUserId()); if (userEntity != null) { fileEntity.setUsername(userEntity.getUsername()); } } fileEntityListResult.add(fileEntity); } pagination.setRows(fileEntityListResult); pagination.setTotal(fileEntityPage.getTotal()); return pagination; } } ================================================ FILE: src/main/java/com/godcheese/nimrod/system/service/impl/OperationLogServiceImpl.java ================================================ package com.godcheese.nimrod.system.service.impl; import com.godcheese.nimrod.common.easyui.Pagination; import com.godcheese.nimrod.common.others.Common; import com.godcheese.nimrod.system.entity.OperationLogEntity; import com.godcheese.nimrod.system.mapper.OperationLogMapper; import com.godcheese.nimrod.system.service.OperationLogService; import com.godcheese.nimrod.user.entity.UserEntity; import com.godcheese.nimrod.user.service.UserService; import com.github.pagehelper.Page; import com.github.pagehelper.PageHelper; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import java.util.ArrayList; import java.util.Date; import java.util.List; /** * @author godcheese [godcheese@outlook.com] * @date 2018-02-22 */ @Service public class OperationLogServiceImpl implements OperationLogService { private static final Logger LOGGER = LoggerFactory.getLogger(OperationLogServiceImpl.class); @Autowired private OperationLogMapper operationLogMapper; @Autowired private UserService userService; @Autowired private Common common; @Override public Pagination pageAll(Integer page, Integer rows) { Pagination pagination = new Pagination<>(); PageHelper.startPage(page, rows); Page operationLogEntityPage = operationLogMapper.pageAll(); List operationLogEntityList = operationLogEntityPage.getResult(); List operationLogEntityListResult = new ArrayList<>(1); for (OperationLogEntity operationLogEntity : operationLogEntityPage) { UserEntity userEntity = userService.getOne(operationLogEntity.getUserId()); if (userEntity != null) { operationLogEntity.setUsername(userEntity.getUsername()); } operationLogEntityListResult.add(operationLogEntity); } pagination.setRows(operationLogEntityListResult); pagination.setTotal(operationLogEntityPage.getTotal()); return pagination; } @Override public OperationLogEntity addOne(OperationLogEntity operationLogEntity) { operationLogEntity.setGmtCreated(new Date()); operationLogMapper.insertOne(operationLogEntity); return operationLogEntity; } @Override public int deleteAll(List idList) { return operationLogMapper.deleteAll(idList); } @Override public OperationLogEntity getOne(Long id) { OperationLogEntity operationLogEntity = operationLogMapper.getOne(id); UserEntity userEntity = userService.getOne(operationLogEntity.getUserId()); if (userEntity != null) { operationLogEntity.setUsername(userEntity.getUsername()); } return operationLogEntity; } @Override public void clearAll() { operationLogMapper.truncate(); } } ================================================ FILE: src/main/java/com/godcheese/nimrod/user/User.java ================================================ package com.godcheese.nimrod.user; import com.godcheese.nimrod.common.Url; /** * @author godcheese [godcheese@outlook.com] * @date 2019-02-20 */ public class User extends Url { public static class Page { public static final String USER = "/user"; public static final String LOGIN_ACCOUNT_STRING = "account"; public static final String LOGIN_PASSWORD_STRING = "password"; public static final String LOGIN_REMEMBER_ME_STRING = "rememberMe"; public static final String LOGIN = USER + "/login"; public static final String LOGIN_PATH_PATTERN = LOGIN + ALL_PATH_PATTERN; public static final String REGISTER = USER + "/register"; public static final String REGISTER_PATH_PATTERN = REGISTER + ALL_PATH_PATTERN; public static final String LOGOUT = USER + "/logout"; public static final String LOGOUT_PATH_PATTERN = LOGIN + ALL_PATH_PATTERN; public static final String ROLE = USER + "/role"; public static final String ROLE_AUTHORITY = USER + "/role_authority"; public static final String ROLE_VIEW_MENU = USER + "/role_view_menu"; public static final String ROLE_VIEW_MENU_CATEGORY = USER + "/role_view_menu_category"; public static final String USER_ROLE = USER + "/user_role"; public static final String DEPARTMENT = USER + "/department"; public static final String API = USER + "/api"; public static final String API_CATEGORY = USER + "/api_category"; public static final String VIEW_PAGE = USER + "/view_page"; public static final String VIEW_PAGE_CATEGORY = USER + "/view_page_category"; public static final String VIEW_PAGE_API = USER + "/view_page_api"; public static final String VIEW_PAGE_COMPONENT = USER + "/view_page_component"; public static final String VIEW_PAGE_COMPONENT_API = USER + "/view_page_component_api"; public static final String VIEW_MENU = USER + "/view_menu"; public static final String VIEW_MENU_CATEGORY = USER + "/view_menu_category"; } public static class Api { public static final String USER = Url.API + Page.USER; public static final String LOGIN = USER + "/login"; public static final String REGISTER = USER + "/register"; public static final String LOGOUT = USER + "/logout"; public static final String FORGOT_PASSWORD = USER + "/forgot_password"; public static final String SEND_PASSWORD_EMAIL = USER + "/send_password_email"; public static final String SEND_PASSWORD_SMS = USER + "/send_password_sms"; public static final String ROLE = USER + "/role"; public static final String ROLE_AUTHORITY = USER + "/role_authority"; public static final String ROLE_VIEW_MENU = USER + "/role_view_menu"; public static final String ROLE_VIEW_MENU_CATEGORY = USER + "/role_view_menu_category"; public static final String USER_ROLE = USER + "/user_role"; public static final String DEPARTMENT = USER + "/department"; public static final String API = USER + "/api"; public static final String API_CATEGORY = USER + "/api_category"; public static final String VIEW_MENU = USER + "/view_menu"; public static final String VIEW_MENU_CATEGORY = USER + "/view_menu_category"; public static final String VIEW_PAGE = USER + "/view_page"; public static final String VIEW_PAGE_CATEGORY = USER + "/view_page_category"; public static final String VIEW_PAGE_API = USER + "/view_page_api"; public static final String VIEW_PAGE_COMPONENT = USER + "/view_page_component"; public static final String VIEW_PAGE_COMPONENT_API = USER + "/view_page_component_api"; } } ================================================ FILE: src/main/java/com/godcheese/nimrod/user/api/ApiCategoryRestController.java ================================================ package com.godcheese.nimrod.user.api; import com.godcheese.nimrod.common.easyui.ComboTree; import com.godcheese.nimrod.common.operationlog.OperationLog; import com.godcheese.nimrod.common.operationlog.OperationLogType; import com.godcheese.nimrod.user.User; import com.godcheese.nimrod.user.entity.ApiCategoryEntity; import com.godcheese.nimrod.user.service.ApiCategoryService; import com.godcheese.tile.web.exception.BaseResponseException; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.http.HttpStatus; import org.springframework.http.MediaType; import org.springframework.http.ResponseEntity; import org.springframework.security.access.prepost.PreAuthorize; import org.springframework.web.bind.annotation.*; import java.util.ArrayList; import java.util.List; import static com.godcheese.nimrod.common.security.SimpleUserDetailsServiceImpl.SYSTEM_ADMIN; /** * @author godcheese [godcheese@outlook.com] * @date 2018-02-22 */ @RestController @RequestMapping(value = User.Api.API_CATEGORY, produces = MediaType.APPLICATION_JSON_VALUE) public class ApiCategoryRestController { private static final String API_CATEGORY = "/API/SYSTEM/API_CATEGORY"; @Autowired private ApiCategoryService apiCategoryService; /** * 获取所有父级 API 分类 * * @return List */ @OperationLog(value = "分页获取所有父级 API 分类", type = OperationLogType.API) @PreAuthorize("hasRole('" + SYSTEM_ADMIN + "') OR hasAuthority('" + API_CATEGORY + "/LIST_ALL_PARENT')") @GetMapping(value = "/list_all_parent") public ResponseEntity> listAllParent() { return new ResponseEntity<>(apiCategoryService.listAllParent(), HttpStatus.OK); } /** * 指定父级 API 分类 id,获取所有 API 分类 * * @param parentId API 分类父级 id * @return ResponseEntity> */ @OperationLog(value = "获取所有 API 分类", type = OperationLogType.API) @PreAuthorize("hasRole('" + SYSTEM_ADMIN + "') OR hasAuthority('" + API_CATEGORY + "/LIST_ALL_BY_PARENT_ID')") @GetMapping(value = "/list_all_by_parent_id") public ResponseEntity> listAllByParentId(@RequestParam Long parentId) { return new ResponseEntity<>(apiCategoryService.listAllByParentId(parentId), HttpStatus.OK); } /** * 新增 API 分类 * * @param name API 分类名称 * @param parentId API 分类父级 id * @param sort 排序 * @param remark 备注 * @return ResponseEntity */ @OperationLog(value = "新增 API 分类", type = OperationLogType.API) @PreAuthorize("hasRole('" + SYSTEM_ADMIN + "') OR hasAuthority('" + API_CATEGORY + "/ADD_ONE')") @PostMapping(value = "/add_one") public ResponseEntity addOne(@RequestParam String name, @RequestParam Long parentId, @RequestParam Long sort, @RequestParam String remark) { ApiCategoryEntity apiCategoryEntity = new ApiCategoryEntity(); apiCategoryEntity.setName(name); apiCategoryEntity.setParentId(parentId); apiCategoryEntity.setSort(sort); apiCategoryEntity.setRemark(remark); ApiCategoryEntity apiCategoryEntity1 = apiCategoryService.addOne(apiCategoryEntity); return new ResponseEntity<>(apiCategoryEntity1, HttpStatus.OK); } /** * 保存 API 分类 * * @param id API 分类 id * @param name API 分类名称 * @param parentId API 分类父级 id * @param sort 排序 * @param remark 备注 * @return ResponseEntity */ @OperationLog(value = "保存 API 分类", type = OperationLogType.API) @PreAuthorize("hasRole('" + SYSTEM_ADMIN + "') OR hasAuthority('" + API_CATEGORY + "/SAVE_ONE')") @PostMapping(value = "/save_one") public ResponseEntity saveOne(@RequestParam Long id, @RequestParam String name, @RequestParam Long parentId, @RequestParam Long sort, @RequestParam String remark) throws BaseResponseException { ApiCategoryEntity apiCategoryEntity = new ApiCategoryEntity(); apiCategoryEntity.setId(id); apiCategoryEntity.setName(name); apiCategoryEntity.setParentId(parentId); apiCategoryEntity.setSort(sort); apiCategoryEntity.setRemark(remark); ApiCategoryEntity apiCategoryEntity1 = apiCategoryService.saveOne(apiCategoryEntity); return new ResponseEntity<>(apiCategoryEntity1, HttpStatus.OK); } /** * 指定 API 分类 id list,批量删除 API 分类 * * @param idList API 分类 id list * @return ResponseEntity * @throws BaseResponseException BaseResponseException */ @OperationLog(value = "指定 API 分类 id list,批量删除 API 分类", type = OperationLogType.API) @PreAuthorize("hasRole('" + SYSTEM_ADMIN + "') OR hasAuthority('" + API_CATEGORY + "/DELETE_ALL')") @PostMapping(value = "/delete_all") public ResponseEntity deleteAll(@RequestParam("id[]") List idList) throws BaseResponseException { return new ResponseEntity<>(apiCategoryService.deleteAll(idList), HttpStatus.OK); } /** * 指定 API 分类 id,获取所有 API 分类 * * @param id API 分类 id * @return ResponseEntity */ @OperationLog(value = "指定 API 分类 id,获取所有 API 分类", type = OperationLogType.API) @PreAuthorize("hasRole('" + SYSTEM_ADMIN + "') OR hasAuthority('" + API_CATEGORY + "/ONE')") @GetMapping(value = "/one/{id}") public ResponseEntity getOne(@PathVariable Long id) { return new ResponseEntity<>(apiCategoryService.getOne(id), HttpStatus.OK); } /** * 获取所有 API 分类,以 ComboTree 形式展示 * * @return ResponseEntity> */ @OperationLog(value = "获取所有 API 分类,以 ComboTree 形式展示", type = OperationLogType.API) @PreAuthorize("hasRole('" + SYSTEM_ADMIN + "') OR hasAuthority('" + API_CATEGORY + "/LIST_ALL_AS_COMBO_TREE')") @GetMapping(value = "/list_all_as_combo_tree") public ResponseEntity> listAllAsComboTree() { List comboTreeResultList = new ArrayList<>(); List apiCategoryComboTreeList = apiCategoryService.listAllApiCategoryComboTree(); for (ComboTree comboTree : apiCategoryComboTreeList) { if (comboTree.getParentId() == null) { comboTreeResultList.add(comboTree); } } for (ComboTree comboTree : comboTreeResultList) { comboTree.setChildren(apiCategoryService.getApiCategoryChildrenComboTree(comboTree.getId(), apiCategoryComboTreeList)); } return new ResponseEntity<>(comboTreeResultList, HttpStatus.OK); } } ================================================ FILE: src/main/java/com/godcheese/nimrod/user/api/ApiRestController.java ================================================ package com.godcheese.nimrod.user.api; import com.godcheese.nimrod.common.easyui.Pagination; import com.godcheese.nimrod.common.operationlog.OperationLog; import com.godcheese.nimrod.common.operationlog.OperationLogType; import com.godcheese.nimrod.user.User; import com.godcheese.nimrod.user.entity.ApiEntity; import com.godcheese.nimrod.user.service.ApiService; import com.godcheese.tile.web.exception.BaseResponseException; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.http.HttpStatus; import org.springframework.http.MediaType; import org.springframework.http.ResponseEntity; import org.springframework.security.access.prepost.PreAuthorize; import org.springframework.web.bind.annotation.*; import java.util.List; import static com.godcheese.nimrod.common.security.SimpleUserDetailsServiceImpl.SYSTEM_ADMIN; /** * @author godcheese [godcheese@outlook.com] * @date 2018-02-22 */ @RestController @RequestMapping(value = User.Api.API, produces = MediaType.APPLICATION_JSON_VALUE) public class ApiRestController { private static final String API = "/API/SYSTEM/API"; @Autowired private ApiService apiService; /** * 指定 API 分类 id,分页获取所有 API * * @param page 页 * @param rows 每页显示数量 * @param apiCategoryId API 分类 id * @return ResponseEntity> */ @PreAuthorize("hasRole('" + SYSTEM_ADMIN + "') OR hasAuthority('" + API + "/PAGE_ALL_BY_API_CATEGORY_ID')") @GetMapping(value = "/page_all_by_api_category_id") public ResponseEntity> pageAllByApiCategoryId(@RequestParam Integer page, @RequestParam Integer rows, @RequestParam Long apiCategoryId, @RequestParam(required = false) Long viewPageId, @RequestParam(required = false) Long viewPageComponentId, @RequestParam(required = false) Long roleId) { return new ResponseEntity<>(apiService.pageAllByApiCategoryId(page, rows, apiCategoryId, viewPageId, viewPageComponentId, roleId), HttpStatus.OK); } /** * 新增 API * * @param name API 名称 * @param url 请求地址(url) * @param authority 权限(authority) * @param apiCategoryId API 分类 id * @param sort 排序 * @param remark 备注 * @return ResponseEntity * @throws BaseResponseException BaseResponseException */ @OperationLog(value = "新增 API", type = OperationLogType.API) @PreAuthorize("hasRole('" + SYSTEM_ADMIN + "') OR hasAuthority('" + API + "/ADD_ONE')") @PostMapping(value = "/add_one") public ResponseEntity addOne(@RequestParam String name, @RequestParam String url, @RequestParam String authority, @RequestParam Long apiCategoryId, @RequestParam Long sort, @RequestParam String remark) throws BaseResponseException { ApiEntity apiEntity = new ApiEntity(); apiEntity.setName(name); apiEntity.setUrl(url); apiEntity.setAuthority(authority); apiEntity.setApiCategoryId(apiCategoryId); apiEntity.setSort(sort); apiEntity.setRemark(remark); ApiEntity apiEntity1 = apiService.addOne(apiEntity); return new ResponseEntity<>(apiEntity1, HttpStatus.OK); } /** * 保存 API * * @param id API id * @param name API 名称 * @param url 请求地址(url) * @param sort 排序 * @param remark 备注 * @return ResponseEntity */ @OperationLog(value = "保存 API", type = OperationLogType.API) @PreAuthorize("hasRole('" + SYSTEM_ADMIN + "') OR hasAuthority('" + API + "/SAVE_ONE')") @PostMapping(value = "/save_one") public ResponseEntity saveOne(@RequestParam Long id, @RequestParam String name, @RequestParam String url, @RequestParam String authority, @RequestParam Long apiCategoryId, @RequestParam Long sort, @RequestParam String remark) { ApiEntity apiEntity = new ApiEntity(); apiEntity.setId(id); apiEntity.setName(name); apiEntity.setUrl(url); apiEntity.setAuthority(authority); apiEntity.setApiCategoryId(apiCategoryId); apiEntity.setSort(sort); apiEntity.setRemark(remark); ApiEntity apiEntity1 = apiService.saveOne(apiEntity); return new ResponseEntity<>(apiEntity1, HttpStatus.OK); } /** * 指定 API id list,批量删除 API * * @param idList API id list * @return ResponseEntity */ @OperationLog(value = "指定 API id list,批量删除 API", type = OperationLogType.API) @PreAuthorize("hasRole('" + SYSTEM_ADMIN + "') OR hasAuthority('" + API + "/DELETE_ALL')") @PostMapping(value = "/delete_all") public ResponseEntity deleteAll(@RequestParam("id[]") List idList) { return new ResponseEntity<>(apiService.deleteAll(idList), HttpStatus.OK); } /** * 指定 API id,获取所有 API * * @param id API id * @return ResponseEntity */ @OperationLog(value = "指定 API id,获取所有 API", type = OperationLogType.API) @PreAuthorize("hasRole('" + SYSTEM_ADMIN + "') OR hasAuthority('" + API + "/ONE')") @GetMapping(value = "/one/{id}") public ResponseEntity getOne(@PathVariable Long id) { return new ResponseEntity<>(apiService.getOne(id), HttpStatus.OK); } } ================================================ FILE: src/main/java/com/godcheese/nimrod/user/api/DepartmentRestController.java ================================================ package com.godcheese.nimrod.user.api; import com.godcheese.nimrod.common.easyui.ComboTree; import com.godcheese.nimrod.common.easyui.TreeGrid; import com.godcheese.nimrod.common.operationlog.OperationLog; import com.godcheese.nimrod.common.operationlog.OperationLogType; import com.godcheese.nimrod.user.User; import com.godcheese.nimrod.user.entity.DepartmentEntity; import com.godcheese.nimrod.user.service.DepartmentService; import com.godcheese.tile.web.exception.BaseResponseException; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.http.HttpStatus; import org.springframework.http.MediaType; import org.springframework.http.ResponseEntity; import org.springframework.security.access.prepost.PreAuthorize; import org.springframework.web.bind.annotation.*; import java.util.ArrayList; import java.util.Collections; import java.util.List; import static com.godcheese.nimrod.common.security.SimpleUserDetailsServiceImpl.SYSTEM_ADMIN; /** * @author godcheese [godcheese@outlook.com] * @date 2018-02-22 */ @RestController @RequestMapping(value = User.Api.DEPARTMENT, produces = MediaType.APPLICATION_JSON_VALUE) public class DepartmentRestController { private static final Logger LOGGER = LoggerFactory.getLogger(DepartmentRestController.class); private static final String DEPARTMENT = "/API/USER/DEPARTMENT"; @Autowired private DepartmentService departmentService; /** * 获取所有父级部门 * * @return List */ @OperationLog(value = "获取所有父级部门", type = OperationLogType.API) @PreAuthorize("hasRole('" + SYSTEM_ADMIN + "') OR hasAuthority('" + DEPARTMENT + "/LIST_ALL_PARENT')") @GetMapping(value = "/list_all_parent") public ResponseEntity> listAllParent() { return new ResponseEntity<>(departmentService.listAllParent(), HttpStatus.OK); } /** * 指定父级部门 id,获取所有子级部门 * * @param parentId API 分类父级 id * @return ResponseEntity> */ @OperationLog(value = "获取所有子级部门", type = OperationLogType.API) @PreAuthorize("hasRole('" + SYSTEM_ADMIN + "') OR hasAuthority('" + DEPARTMENT + "/LIST_ALL_BY_PARENT_ID')") @GetMapping(value = "/list_all_by_parent_id/{parentId}") public ResponseEntity> listAllByParentId(@PathVariable Long parentId) { return new ResponseEntity<>(departmentService.listAllByParentId(parentId), HttpStatus.OK); } /** * 新增部门 * * @param name 部门名称 * @param parentId 父级部门 id * @param remark 备注 * @return ResponseEntity */ @OperationLog(value = "新增部门", type = OperationLogType.API) @PreAuthorize("hasRole('" + SYSTEM_ADMIN + "') OR hasAuthority('" + DEPARTMENT + "/ADD_ONE')") @PostMapping(value = "/add_one") public ResponseEntity addOne(@RequestParam String name, @RequestParam Long parentId, @RequestParam String remark) { DepartmentEntity departmentEntity = new DepartmentEntity(); departmentEntity.setName(name); departmentEntity.setParentId(parentId); departmentEntity.setRemark(remark); DepartmentEntity departmentEntity1 = departmentService.addOne(departmentEntity); return new ResponseEntity<>(departmentEntity1, HttpStatus.OK); } /** * 保存部门 * * @param id 部门 id * @param name 部门名称 * @param parentId 父级部门 id * @param remark 备注 * @return ResponseEntity */ @OperationLog(value = "保存部门", type = OperationLogType.API) @PreAuthorize("hasRole('" + SYSTEM_ADMIN + "') OR hasAuthority('" + DEPARTMENT + "/SAVE_ONE')") @PostMapping(value = "/save_one") public ResponseEntity saveOne(@RequestParam Long id, @RequestParam String name, @RequestParam Long parentId, @RequestParam String remark) { DepartmentEntity departmentEntity = new DepartmentEntity(); departmentEntity.setId(id); departmentEntity.setName(name); departmentEntity.setParentId(parentId); departmentEntity.setRemark(remark); DepartmentEntity departmentEntity1 = departmentService.saveOne(departmentEntity); return new ResponseEntity<>(departmentEntity1, HttpStatus.OK); } /** * 指定部门 id list,批量删除部门 * * @param idList 部门 id list * @return ResponseEntity */ @OperationLog(value = "指定部门 id list,批量删除部门", type = OperationLogType.API) @PreAuthorize("hasRole('" + SYSTEM_ADMIN + "') OR hasAuthority('" + DEPARTMENT + "/DELETE_ALL')") @PostMapping(value = "/delete_all") public ResponseEntity deleteAll(@RequestParam("id[]") List idList) throws BaseResponseException { return new ResponseEntity<>(departmentService.deleteAll(idList), HttpStatus.OK); } /** * 指定部门 id,获取部门 * * @param id 部门 id * @return ResponseEntity */ @OperationLog(value = "指定部门 id,获取部门", type = OperationLogType.API) @PreAuthorize("hasRole('" + SYSTEM_ADMIN + "') OR hasAuthority('" + DEPARTMENT + "/ONE')") @GetMapping(value = "/one/{id}") public ResponseEntity getOne(@PathVariable Long id) { return new ResponseEntity<>(departmentService.getOne(id), HttpStatus.OK); } @OperationLog(value = "根据子节点获取所有父级节点部门", type = OperationLogType.API) @PreAuthorize("hasRole('" + SYSTEM_ADMIN + "') OR hasAuthority('" + DEPARTMENT + "/LIST_ALL_BY_DEPARTMENT_ID')") @GetMapping(value = "/list_all_by_department_id/{id}") public List listAllByDepartmentId(@PathVariable Long id) { List departmentEntityResultList = new ArrayList<>(0); List departmentEntityList = departmentService.listAll(); DepartmentEntity departmentEntity = departmentService.getOne(id); departmentEntityResultList.add(departmentEntity); forEachParent(departmentEntity, departmentEntityList, departmentEntityResultList); Collections.reverse(departmentEntityResultList); return departmentEntityResultList; } public void forEachParent(DepartmentEntity departmentEntity, List departmentEntityList, List departmentEntityResultList) { for (DepartmentEntity entity : departmentEntityList) { if (departmentEntity.getParentId() != null) { if (departmentEntity.getParentId().equals(entity.getId())) { departmentEntityResultList.add(entity); forEachParent(entity, departmentEntityList, departmentEntityResultList); } } } } /** * 获取所有部门,以 EasyUI Combo Tree 形式展示 * * @return Pagination */ @OperationLog(value = "分页获取所有父级部门", type = OperationLogType.API) @PreAuthorize("hasRole('" + SYSTEM_ADMIN + "') OR hasAuthority('" + DEPARTMENT + "/LIST_ALL_AS_COMBO_TREE')") @GetMapping(value = "/list_all_as_combo_tree") public ResponseEntity> listAllAsComboTree() { List comboTreeResultList = new ArrayList<>(); List departmentComboTreeList = departmentService.listAllDepartmentComboTree(); for (ComboTree comboTree : departmentComboTreeList) { if (comboTree.getParentId() == null) { comboTreeResultList.add(comboTree); } } for (ComboTree comboTree : comboTreeResultList) { comboTree.setChildren(departmentService.getDepartmentChildrenComboTree(comboTree.getId(), departmentComboTreeList)); } return new ResponseEntity<>(comboTreeResultList, HttpStatus.OK); } /** * 获取所有部门,以 EasyUI TreeGrid 形式展示 * * @return Pagination */ @OperationLog(value = "分页获取所有父级部门", type = OperationLogType.API) @PreAuthorize("hasRole('" + SYSTEM_ADMIN + "') OR hasAuthority('" + DEPARTMENT + "/LIST_ALL_AS_COMBO_TREE')") @GetMapping(value = "/list_all_as_tree_grid") public ResponseEntity> listAllAsTreeGrid() { List treeGridResultList = new ArrayList<>(); List departmentTreeGridList = departmentService.listAllDepartmentTreeGrid(); for (TreeGrid treeGrid : departmentTreeGridList) { if (treeGrid.getParentId() == null) { treeGridResultList.add(treeGrid); } } for (TreeGrid treeGrid : treeGridResultList) { treeGrid.setChildren(departmentService.getDepartmentChildrenTreeGrid(treeGrid.getId(), departmentTreeGridList)); } return new ResponseEntity<>(treeGridResultList, HttpStatus.OK); } } ================================================ FILE: src/main/java/com/godcheese/nimrod/user/api/RoleAuthorityRestController.java ================================================ package com.godcheese.nimrod.user.api; import com.godcheese.nimrod.user.User; import com.godcheese.nimrod.user.entity.RoleAuthorityEntity; import com.godcheese.nimrod.user.service.RoleAuthorityService; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.http.HttpStatus; import org.springframework.http.MediaType; import org.springframework.http.ResponseEntity; import org.springframework.security.access.prepost.PreAuthorize; import org.springframework.web.bind.annotation.*; import java.util.List; import java.util.Map; import static com.godcheese.nimrod.common.security.SimpleUserDetailsServiceImpl.SYSTEM_ADMIN; /** * @author godcheese [godcheese@outlook.com] * @date 2018-02-22 */ @RestController @RequestMapping(value = User.Api.ROLE_AUTHORITY, produces = MediaType.APPLICATION_JSON_VALUE) public class RoleAuthorityRestController { private static final String ROLE_AUTHORITY = "/API/USER/ROLE_AUTHORITY"; @Autowired private RoleAuthorityService roleAuthorityService; /** * 指定角色 id、API 权限(authority),批量授权 * * @param roleId 角色 id * @param authorityList 权限(authority) list * @return ResponseEntity> */ @PreAuthorize("hasRole('" + SYSTEM_ADMIN + "') OR hasAuthority('" + ROLE_AUTHORITY + "/GRANT_ALL_BY_ROLE_ID_AND_API_AUTHORITY_LIST')") @PostMapping(value = "/grant_all_by_role_id_and_api_authority_list") public ResponseEntity grantAllByRoleIdAndApiAuthorityList(@RequestParam Long roleId, @RequestParam("authorityList[]") List authorityList) { return new ResponseEntity<>(roleAuthorityService.grantAllByRoleIdAndApiAuthorityList(roleId, authorityList), HttpStatus.OK); } /** * 指定角色 id、API 权限(authority),批量撤销授权 * * @param roleId 角色 id * @param authorityList 权限(authority) list * @return ResponseEntity */ @PreAuthorize("hasRole('" + SYSTEM_ADMIN + "') OR hasAuthority('" + ROLE_AUTHORITY + "/REVOKE_ALL_BY_ROLE_ID_AND_API_AUTHORITY_LIST')") @PostMapping(value = "/revoke_all_by_role_id_and_api_authority_list") public ResponseEntity revokeAllByRoleIdAndApiAuthorityList(@RequestParam Long roleId, @RequestParam("authorityList[]") List authorityList) { return new ResponseEntity<>(roleAuthorityService.revokeAllByRoleIdAndApiAuthorityList(roleId, authorityList), HttpStatus.OK); } /** * 指定角色 id、视图页面权限(authority),批量授权 * * @param roleId 角色 id * @param authorityList 权限(authority) list * @return ResponseEntity */ @PreAuthorize("hasRole('" + SYSTEM_ADMIN + "') OR hasAuthority('" + ROLE_AUTHORITY + "/GRANT_ALL_BY_ROLE_ID_AND_VIEW_PAGE_AUTHORITY_LIST')") @PostMapping(value = "/grant_all_by_role_id_and_view_page_authority_list") public ResponseEntity grantAllByRoleIdAndViewPageAuthorityList(@RequestParam Long roleId, @RequestParam("authorityList[]") List authorityList) { return new ResponseEntity<>(roleAuthorityService.grantAllByRoleIdAndViewPageAuthorityList(roleId, authorityList), HttpStatus.OK); } /** * 指定角色 id、视图页面权限(authority),批量撤销授权 * * @param roleId 角色 id * @param authorityList 权限(authority) list * @return ResponseEntity */ @PreAuthorize("hasRole('" + SYSTEM_ADMIN + "') OR hasAuthority('" + ROLE_AUTHORITY + "/REVOKE_ALL_BY_ROLE_ID_AND_VIEW_PAGE_AUTHORITY_LIST')") @PostMapping(value = "/revoke_all_by_role_id_and_view_page_authority_list") public ResponseEntity revokeAllByRoleIdAndViewPageAuthorityList(@RequestParam Long roleId, @RequestParam("authorityList[]") List authorityList) { return new ResponseEntity<>(roleAuthorityService.revokeAllByRoleIdAndViewPageAuthorityList(roleId, authorityList), HttpStatus.OK); } /** * 指定角色 id、视图页面组件权限(authority),批量授权 * * @param roleId 角色 id * @param authorityList 权限(authority) list * @return ResponseEntity */ @PreAuthorize("hasRole('" + SYSTEM_ADMIN + "') OR hasAuthority('" + ROLE_AUTHORITY + "/GRANT_ALL_BY_ROLE_ID_AND_VIEW_PAGE_COMPONENT_AUTHORITY_LIST')") @PostMapping(value = "/grant_all_by_role_id_and_view_page_component_authority_list") public ResponseEntity grantAllByRoleIdAndViewPageComponentAuthorityList(@RequestParam Long roleId, @RequestParam("authorityList[]") List authorityList) { return new ResponseEntity<>(roleAuthorityService.grantAllByRoleIdAndViewPageComponentAuthorityList(roleId, authorityList), HttpStatus.OK); } /** * 指定角色 id、视图页面组件权限(authority),批量撤销授权 * * @param roleId 角色 id * @param authorityList 权限(authority) list * @return ResponseEntity */ @PreAuthorize("hasRole('" + SYSTEM_ADMIN + "') OR hasAuthority('" + ROLE_AUTHORITY + "/REVOKE_ALL_BY_ROLE_ID_AND_VIEW_PAGE_COMPONENT_AUTHORITY_LIST')") @PostMapping(value = "/revoke_all_by_role_id_and_view_page_component_authority_list") public ResponseEntity revokeAllByRoleIdAndViewPageComponentAuthorityList(@RequestParam Long roleId, @RequestParam("authorityList[]") List authorityList) { return new ResponseEntity<>(roleAuthorityService.revokeAllByRoleIdAndViewPageComponentAuthorityList(roleId, authorityList), HttpStatus.OK); } /** * 指定角色 id、权限(authority)判断是否已授权 * * @param roleId 角色 id * @param authority 权限(authority) list * @return ResponseEntity> */ @PreAuthorize("hasRole('" + SYSTEM_ADMIN + "') OR hasAuthority('" + ROLE_AUTHORITY + "/IS_GRANTED_BY_ROLE_ID_AND_AUTHORITY')") @GetMapping(value = "/is_granted_by_role_id_and_authority") public ResponseEntity> isGrantedByRoleIdAndAuthority(@RequestParam Long roleId, @RequestParam String authority) { return new ResponseEntity<>(roleAuthorityService.isGrantedByRoleIdAndAuthority(roleId, authority), HttpStatus.OK); } /** * 指定角色权限 id,获取角色权限信息 * * @param id 角色权限 id * @return ResponseEntity */ @PreAuthorize("hasRole('" + SYSTEM_ADMIN + "') OR hasAuthority('" + ROLE_AUTHORITY + "/ONE')") @GetMapping(value = "/one/{id}") public ResponseEntity getOne(@PathVariable Long id) { return new ResponseEntity<>(roleAuthorityService.getOne(id), HttpStatus.OK); } } ================================================ FILE: src/main/java/com/godcheese/nimrod/user/api/RoleRestController.java ================================================ package com.godcheese.nimrod.user.api; import com.godcheese.nimrod.common.easyui.Pagination; import com.godcheese.nimrod.common.operationlog.OperationLog; import com.godcheese.nimrod.common.operationlog.OperationLogType; import com.godcheese.nimrod.user.User; import com.godcheese.nimrod.user.entity.RoleEntity; import com.godcheese.nimrod.user.service.RoleService; import com.godcheese.tile.web.exception.BaseResponseException; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.http.HttpStatus; import org.springframework.http.MediaType; import org.springframework.http.ResponseEntity; import org.springframework.security.access.prepost.PreAuthorize; import org.springframework.web.bind.annotation.*; import java.util.List; import static com.godcheese.nimrod.common.security.SimpleUserDetailsServiceImpl.SYSTEM_ADMIN; /** * @author godcheese [godcheese@outlook.com] * @date 2018-02-22 */ @RestController @RequestMapping(value = User.Api.ROLE, produces = MediaType.APPLICATION_JSON_VALUE) public class RoleRestController { private static final String ROLE = "/API/USER/ROLE"; @Autowired private RoleService roleService; /** * 分页获取所有角色 * * @param page 页 * @param rows 每页显示数量 * @return ResponseEntity> */ @PreAuthorize("hasRole('" + SYSTEM_ADMIN + "') OR hasAuthority('" + ROLE + "/PAGE_ALL')") @GetMapping(value = "/page_all") public ResponseEntity> pageAll(@RequestParam Integer page, @RequestParam Integer rows) { return new ResponseEntity<>(roleService.pageAll(page, rows), HttpStatus.OK); } /** * 获取所有角色 * * @return ResponseEntity> */ @PreAuthorize("hasRole('" + SYSTEM_ADMIN + "') OR hasAuthority('" + ROLE + "/LIST_ALL')") @GetMapping(value = "/list_all") public ResponseEntity> listAll() { return new ResponseEntity<>(roleService.listAll(), HttpStatus.OK); } /** * 指定用户 id,获取用户角色 * * @param userId 用户 id * @return ResponseEntity> */ @PreAuthorize("hasRole('" + SYSTEM_ADMIN + "') OR hasAuthority('" + ROLE + "/ONE')") @GetMapping(value = "/list_all_by_user_id/{userId}") public ResponseEntity> listAllByUserId(@PathVariable Long userId) { return new ResponseEntity<>(roleService.listAllByUserId(userId), HttpStatus.OK); } /** * 新增角色 * * @param name 角色名称 * @param value 角色值 * @param remark 备注 * @return ResponseEntity * @throws BaseResponseException BaseResponseException */ @OperationLog(value = "新增角色", type = OperationLogType.API) @PreAuthorize("hasRole('" + SYSTEM_ADMIN + "') OR hasAuthority('" + ROLE + "/ADD_ONE')") @PostMapping(value = "/add_one") public ResponseEntity addOne(@RequestParam String name, @RequestParam String value, @RequestParam String remark) throws BaseResponseException { RoleEntity roleEntity = new RoleEntity(); roleEntity.setName(name); roleEntity.setValue(value); roleEntity.setRemark(remark); RoleEntity roleEntity1 = roleService.addOne(roleEntity); return new ResponseEntity<>(roleEntity1, HttpStatus.OK); } /** * 保存角色 * * @param id 角色 id * @param name 角色名称 * @param value 角色值 * @param remark 备注 * @return ResponseEntity * @throws BaseResponseException BaseResponseException */ @OperationLog(value = "保存角色", type = OperationLogType.API) @PreAuthorize("hasRole('" + SYSTEM_ADMIN + "') OR hasAuthority('" + ROLE + "/SAVE_ONE')") @PostMapping(value = "/save_one") public ResponseEntity saveOne(@RequestParam Long id, @RequestParam String name, @RequestParam String value, @RequestParam String remark) throws BaseResponseException { RoleEntity roleEntity = new RoleEntity(); roleEntity.setId(id); roleEntity.setName(name); roleEntity.setValue(value); roleEntity.setRemark(remark); RoleEntity roleEntity1 = roleService.saveOne(roleEntity); return new ResponseEntity<>(roleEntity1, HttpStatus.OK); } /** * 指定角色 id list,批量删除角色 * * @param idList 角色 id list * @return ResponseEntity * @throws BaseResponseException BaseResponseException */ @OperationLog(value = "指定角色 id list,批量删除角色", type = OperationLogType.API) @PreAuthorize("hasRole('" + SYSTEM_ADMIN + "') OR hasAuthority('" + ROLE + "/DELETE_ALL')") @PostMapping(value = "/delete_all") public ResponseEntity deleteAll(@RequestParam("id[]") List idList) throws BaseResponseException { return new ResponseEntity<>(roleService.deleteAll(idList), HttpStatus.OK); } /** * 指定角色 id,获取角色 * * @param id 角色 id * @return ResponseEntity */ @OperationLog(value = "指定角色 id,获取角色", type = OperationLogType.API) @PreAuthorize("hasRole('" + SYSTEM_ADMIN + "') OR hasAuthority('" + ROLE + "/ONE')") @GetMapping(value = "/one/{id}") public ResponseEntity getOne(@PathVariable Long id) { return new ResponseEntity<>(roleService.getOne(id), HttpStatus.OK); } } ================================================ FILE: src/main/java/com/godcheese/nimrod/user/api/RoleViewMenuCategoryRestController.java ================================================ package com.godcheese.nimrod.user.api; import com.godcheese.nimrod.user.User; import com.godcheese.nimrod.user.service.RoleViewMenuCategoryService; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.http.HttpStatus; import org.springframework.http.MediaType; import org.springframework.http.ResponseEntity; import org.springframework.security.access.prepost.PreAuthorize; 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.RestController; import java.util.List; import static com.godcheese.nimrod.common.security.SimpleUserDetailsServiceImpl.SYSTEM_ADMIN; /** * @author godcheese [godcheese@outlook.com] * @date 2018-02-22 */ @RestController @RequestMapping(value = User.Api.ROLE_VIEW_MENU_CATEGORY, produces = MediaType.APPLICATION_JSON_VALUE) public class RoleViewMenuCategoryRestController { private static final String ROLE_VIEW_MENU_CATEGORY = "/API/USER/ROLE_VIEW_MENU_CATEGORY"; @Autowired private RoleViewMenuCategoryService roleViewMenuCategoryService; /** * 指定角色 id、视图菜单分类 id list,批量授权 * * @param roleId 角色 id * @param viewMenuCategoryIdList 视图菜单分类 id list * @return ResponseEntity */ @PreAuthorize("hasRole('" + SYSTEM_ADMIN + "') OR hasAuthority('" + ROLE_VIEW_MENU_CATEGORY + "/GRANT_ALL_BY_ROLE_ID_AND_VIEW_MENU_CATEGORY_ID_LIST')") @PostMapping(value = "/grant_all_by_role_id_and_view_menu_category_id_list") public ResponseEntity grantAllByRoleIdAndViewMenuCategoryIdList(@RequestParam Long roleId, @RequestParam("viewMenuCategoryIdList[]") List viewMenuCategoryIdList) { return new ResponseEntity<>(roleViewMenuCategoryService.grantAllByRoleIdAndViewMenuCategoryIdList(roleId, viewMenuCategoryIdList), HttpStatus.OK); } /** * 指定角色 id、视图菜单分类 id list,批量撤销授权 * * @param roleId 角色 id * @param viewMenuCategoryIdList 视图菜单分类 id list * @return ResponseEntity */ @PreAuthorize("hasRole('" + SYSTEM_ADMIN + "') OR hasAuthority('" + ROLE_VIEW_MENU_CATEGORY + "/REVOKE_ALL_BY_ROLE_ID_AND_VIEW_MENU_CATEGORY_ID_LIST')") @PostMapping(value = "/revoke_all_by_role_id_and_view_menu_id_list") public ResponseEntity revokeAllByRoleIdAndViewMenuCategoryIdList(@RequestParam Long roleId, @RequestParam("viewMenuCategoryIdList[]") List viewMenuCategoryIdList) { return new ResponseEntity<>(roleViewMenuCategoryService.revokeAllByRoleIdAndViewMenuCategoryIdList(roleId, viewMenuCategoryIdList), HttpStatus.OK); } } ================================================ FILE: src/main/java/com/godcheese/nimrod/user/api/RoleViewMenuRestController.java ================================================ package com.godcheese.nimrod.user.api; import com.godcheese.nimrod.user.User; import com.godcheese.nimrod.user.service.RoleViewMenuService; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.http.HttpStatus; import org.springframework.http.MediaType; import org.springframework.http.ResponseEntity; import org.springframework.security.access.prepost.PreAuthorize; 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.RestController; import java.util.List; import static com.godcheese.nimrod.common.security.SimpleUserDetailsServiceImpl.SYSTEM_ADMIN; /** * @author godcheese [godcheese@outlook.com] * @date 2018-02-22 */ @RestController @RequestMapping(value = User.Api.ROLE_VIEW_MENU, produces = MediaType.APPLICATION_JSON_VALUE) public class RoleViewMenuRestController { private static final String ROLE_VIEW_MENU = "/API/USER/ROLE_VIEW_MENU"; @Autowired private RoleViewMenuService roleViewMenuService; /** * 指定角色 id、视图菜单 id list,批量授权 * * @param roleId 角色 id * @param viewMenuIdList 视图菜单 id list * @return ResponseEntity> */ @PreAuthorize("hasRole('" + SYSTEM_ADMIN + "') OR hasAuthority('" + ROLE_VIEW_MENU + "/GRANT_ALL_BY_ROLE_ID_AND_VIEW_MENU_ID_LIST')") @PostMapping(value = "/grant_all_by_role_id_and_view_menu_id_list") public ResponseEntity grantAllByRoleIdAndViewMenuIdList(@RequestParam Long roleId, @RequestParam("viewMenuIdList[]") List viewMenuIdList) { return new ResponseEntity<>(roleViewMenuService.grantAllByRoleIdAndViewMenuIdList(roleId, viewMenuIdList), HttpStatus.OK); } /** * 指定角色 id、视图菜单 id list,批量撤销授权 * * @param roleId 角色 id * @param viewMenuIdList 视图菜单 id list * @return ResponseEntity */ @PreAuthorize("hasRole('" + SYSTEM_ADMIN + "') OR hasAuthority('" + ROLE_VIEW_MENU + "/REVOKE_ALL_BY_ROLE_ID_AND_VIEW_MENU_ID_LIST')") @PostMapping(value = "/revoke_all_by_role_id_and_view_menu_id_list") public ResponseEntity revokeAllByRoleIdAndViewMenuIdList(@RequestParam Long roleId, @RequestParam("viewMenuIdList[]") List viewMenuIdList) { return new ResponseEntity<>(roleViewMenuService.revokeAllByRoleIdAndViewMenuIdList(roleId, viewMenuIdList), HttpStatus.OK); } } ================================================ FILE: src/main/java/com/godcheese/nimrod/user/api/UserRestController.java ================================================ package com.godcheese.nimrod.user.api; import com.godcheese.nimrod.common.easyui.Pagination; import com.godcheese.nimrod.common.operationlog.OperationLog; import com.godcheese.nimrod.common.operationlog.OperationLogType; import com.godcheese.nimrod.common.security.SimpleUserDetails; import com.godcheese.nimrod.common.security.SimpleUserDetailsServiceImpl; import com.godcheese.nimrod.user.User; import com.godcheese.nimrod.user.entity.UserEntity; import com.godcheese.nimrod.user.mapper.UserMapper; import com.godcheese.nimrod.user.service.*; import com.godcheese.tile.web.exception.BaseResponseException; import com.godcheese.nimrod.user.service.DepartmentService; import com.godcheese.nimrod.user.service.RoleService; import com.godcheese.nimrod.user.service.UserRoleService; import com.godcheese.nimrod.user.service.ViewMenuService; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.http.HttpStatus; import org.springframework.http.MediaType; import org.springframework.http.ResponseEntity; import org.springframework.security.access.prepost.PreAuthorize; import org.springframework.security.core.GrantedAuthority; import org.springframework.web.bind.annotation.*; import javax.servlet.http.HttpServletRequest; import java.util.*; import static com.godcheese.nimrod.common.security.SimpleUserDetailsServiceImpl.SYSTEM_ADMIN; /** * @author godcheese [godcheese@outlook.com] * @date 2018-02-22 */ @RestController @RequestMapping(value = User.Api.USER, produces = MediaType.APPLICATION_JSON_VALUE) public class UserRestController { private static final Logger LOGGER = LoggerFactory.getLogger(UserRestController.class); private static final String USER = "/API/USER"; @Autowired private UserService userService; @Autowired private UserMapper userMapper; @Autowired private DepartmentService departmentService; @Autowired private ViewMenuService viewMenuService; @Autowired private UserRoleService userRoleService; @Autowired private RoleService roleService; /** * 分页获取所有用户 * * @param page 页 * @param rows 每页显示数量 * @param sortField 排序字段 * @param sortOrder 排序 order * @param username 用户名 * @param email 电子邮箱 * @param emailIsVerified 电子邮箱是否验证 * @param departmentId 部门 id * @param enabled 是否启用 * @param gmtCreatedStart * @param gmtCreatedEnd * @param gmtDeletedStart * @param gmtDeletedEnd * @return ResponseEntity> */ @OperationLog(value = "分页获取所有用户", type = OperationLogType.API) @PreAuthorize("hasRole('" + SYSTEM_ADMIN + "') OR hasAuthority('" + USER + "/PAGE_ALL')") @GetMapping(value = "/page_all") public ResponseEntity> pageAll(@RequestParam Integer page, @RequestParam Integer rows, @RequestParam(required = false) String sortField, @RequestParam(required = false) String sortOrder, @RequestParam(required = false) String username, @RequestParam(required = false) String email, @RequestParam(required = false) Integer emailIsVerified, @RequestParam(required = false) Long departmentId, @RequestParam(required = false) Integer enabled, @RequestParam(required = false) String gmtCreatedStart, @RequestParam(required = false) String gmtCreatedEnd, @RequestParam(required = false) String gmtDeletedStart, @RequestParam(required = false) String gmtDeletedEnd) { UserEntity userEntity = new UserEntity(); userEntity.setUsername(username); userEntity.setEmail(email); userEntity.setEmailIsVerified(emailIsVerified); userEntity.setDepartmentId(departmentId); userEntity.setEnabled(enabled); return new ResponseEntity<>(userService.pageAll(page, rows, sortField, sortOrder, userEntity, gmtCreatedStart, gmtCreatedEnd, gmtDeletedStart, gmtDeletedEnd), HttpStatus.OK); } /** * 指定部门 id,分页获取所有用户 * * @param departmentId 部门 id * @param page 页 * @param rows 每页显示数量 * @return ResponseEntity> */ @OperationLog(value = "指定部门 id,分页获取所有用户", type = OperationLogType.API) @PreAuthorize("hasRole('" + SYSTEM_ADMIN + "') OR hasAuthority('" + USER + "/PAGE_ALL_BY_DEPARTMENT_ID')") @GetMapping(value = "/page_all_by_department_id") public ResponseEntity> pageAllByDepartmentId(@RequestParam Long departmentId, @RequestParam Integer page, @RequestParam Integer rows) { return new ResponseEntity<>(userService.pageAllByDepartmentId(departmentId, page, rows), HttpStatus.OK); } /** * 新增用户 * * @param username 用户名 * @param password 密码 * @param avatar 头像 * @param email 电子邮箱 * @param emailIsVerified 电子邮箱是否验证 * @param departmentId 部门 id * @param enabled 是否启用 * @param remark 备注 * @return ResponseEntity * @throws BaseResponseException BaseResponseException */ @OperationLog(value = "新增用户", type = OperationLogType.API) @PreAuthorize("hasRole('" + SYSTEM_ADMIN + "') OR hasAuthority('" + USER + "/ADD_ONE')") @PostMapping(value = "/add_one") public ResponseEntity addOne(@RequestParam String username, @RequestParam String password, @RequestParam String avatar, @RequestParam String email, @RequestParam Integer emailIsVerified, @RequestParam Long departmentId, @RequestParam Integer enabled, @RequestParam String remark) throws BaseResponseException { UserEntity userEntity = new UserEntity(); userEntity.setUsername(username); userEntity.setPassword(password); userEntity.setAvatar(avatar); userEntity.setEmail(email); userEntity.setEmailIsVerified(emailIsVerified); userEntity.setDepartmentId(departmentId); userEntity.setEnabled(enabled); userEntity.setRemark(remark); UserEntity userEntity1 = userService.addOne(userEntity); return new ResponseEntity<>(userEntity1, HttpStatus.OK); } /** * 保存用户 * * @param id 用户 id * @param username 用户名 * @param password 密码 * @param avatar 头像 * @param email 电子邮箱 * @param emailIsVerified 电子邮箱是否验证 * @param departmentId departmentId * @param enabled 是否启用 * @param remark 备注 * @return ResponseEntity * @throws BaseResponseException BaseResponseException */ @OperationLog(value = "保存用户", type = OperationLogType.API) @PreAuthorize("hasRole('" + SYSTEM_ADMIN + "') OR hasAuthority('" + USER + "/SAVE_ONE')") @PostMapping(value = "/save_one") public ResponseEntity saveOne(@RequestParam Long id, @RequestParam String username, @RequestParam(required = false) String password, @RequestParam String avatar, @RequestParam String email, @RequestParam Integer emailIsVerified, @RequestParam Long departmentId, @RequestParam Integer enabled, @RequestParam String remark) throws BaseResponseException { UserEntity userEntity = new UserEntity(); userEntity.setId(id); userEntity.setUsername(username); userEntity.setPassword(password); userEntity.setAvatar(avatar); userEntity.setEmail(email); userEntity.setEmailIsVerified(emailIsVerified); userEntity.setDepartmentId(departmentId); userEntity.setEnabled(enabled); userEntity.setRemark(remark); UserEntity userEntity1 = userService.saveOne(userEntity); return new ResponseEntity<>(userEntity1, HttpStatus.OK); } /** * 指定用户 id list,删除用户 * * @param idList 用户 id list * @return ResponseEntity */ @OperationLog(value = "指定用户 id list,删除用户", type = OperationLogType.API) @PreAuthorize("hasRole('" + SYSTEM_ADMIN + "') OR hasAuthority('" + USER + "/FAKE_DELETE_ALL')") @PostMapping(value = "/fake_delete_all") public ResponseEntity fakeDeleteAll(@RequestParam("id[]") List idList) { return new ResponseEntity<>(userService.fakeDeleteAll(idList), HttpStatus.OK); } /** * 指定用户 id list,撤销删除用户 * * @param idList 用户 id list * @return ResponseEntity */ @OperationLog(value = "指定用户 id list,撤销删除用户", type = OperationLogType.API) @PreAuthorize("hasRole('" + SYSTEM_ADMIN + "') OR hasAuthority('" + USER + "/REVOKE_FAKE_DELETE_ALL')") @PostMapping(value = "/revoke_fake_delete_all") public ResponseEntity revokeFakeDeleteAll(@RequestParam("id[]") List idList) { return new ResponseEntity<>(userService.revokeFakeDeleteAll(idList), HttpStatus.OK); } /** * 指定用户 id list,批量永久删除用户 * * @param idList 用户 id list * @return ResponseEntity */ @OperationLog(value = "指定用户 id list,批量永久删除用户", type = OperationLogType.API) @PreAuthorize("hasRole('" + SYSTEM_ADMIN + "') OR hasAuthority('" + USER + "/DELETE_ALL')") @PostMapping(value = "/delete_all") public ResponseEntity deleteAll(@RequestParam("id[]") List idList) { return new ResponseEntity<>(userService.deleteAll(idList), HttpStatus.OK); } /** * 指定用户 id,获取用户(除密码和角色) * * @param id 用户 id * @return ResponseEntity */ @OperationLog(value = "指定用户 id,获取用户(除密码和角色)", type = OperationLogType.API) @PreAuthorize("hasRole('" + SYSTEM_ADMIN + "') OR hasAuthority('" + USER + "/ONE')") @GetMapping(value = "/one/{id}") public ResponseEntity getOne(@PathVariable Long id) { return new ResponseEntity<>(userService.getOneByIdNoPassword(id), HttpStatus.OK); } /** * 获取当前用户(用户 id、用户名、头像、电子邮箱、权限、部门) * * @param httpServletRequest HttpServletRequest * @return ResponseEntity */ @OperationLog(value = "获取当前用户(用户 id、用户名、头像、电子邮箱、权限、部门)", type = OperationLogType.API) @PreAuthorize("hasRole('" + SYSTEM_ADMIN + "') OR hasAuthority('" + USER + "/GET_CURRENT_USER')") @GetMapping(value = "/get_current_user") public ResponseEntity> getCurrentUser(HttpServletRequest httpServletRequest) { SimpleUserDetails simpleUserDetails = SimpleUserDetailsServiceImpl.getCurrentSimpleUser(httpServletRequest); Map map = new HashMap<>(0); map.put("id", null); map.put("username", null); map.put("avatar", null); map.put("email", null); map.put("authority", new ArrayList<>(0)); if (simpleUserDetails != null) { UserEntity userEntity = userMapper.getOne(simpleUserDetails.getId()); map.put("id", userEntity.getId()); map.put("username", userEntity.getUsername()); map.put("avatar", userEntity.getAvatar()); map.put("email", userEntity.getEmail()); Collection grantedAuthorityCollection = simpleUserDetails.getAuthorities(); List stringList = new ArrayList<>(0); if (grantedAuthorityCollection != null) { for (GrantedAuthority grantedAuthority : grantedAuthorityCollection) { stringList.add(grantedAuthority.getAuthority()); } } map.put("authority", stringList); map.put("department", departmentService.listAllByDepartmentId(userEntity.getDepartmentId())); } return new ResponseEntity<>(map, HttpStatus.OK); } /** * 指定用户 id,获取用户(除密码和角色) * * @param id 用户 id * @return ResponseEntity */ @OperationLog(value = "指定用户 id,获取用户(除密码和角色)", type = OperationLogType.API) @PreAuthorize("hasRole('" + SYSTEM_ADMIN + "') OR hasAuthority('" + USER + "/ONE')") @GetMapping(value = "/profile/{id}") public ResponseEntity profile(@PathVariable Long id) { return new ResponseEntity<>(userService.profile(userService.getOneByIdNoPassword(id)), HttpStatus.OK); } /** * 指定用户 id,获取用户(除密码和角色) * * @return ResponseEntity */ @OperationLog(value = "指定用户 id,获取用户(除密码和角色)", type = OperationLogType.API) @PreAuthorize("hasRole('" + SYSTEM_ADMIN + "') OR hasAuthority('" + USER + "/ONE')") @GetMapping(value = "/get_profile_by_current_user") public ResponseEntity getProfileByCurrentUser() { return new ResponseEntity<>(userService.profile(userService.getCurrentUser()), HttpStatus.OK); } /** * 保存用户 * * @param avatar 头像 * @return ResponseEntity * @throws BaseResponseException BaseResponseException */ @OperationLog(value = "保存用户", type = OperationLogType.API) @PreAuthorize("hasRole('" + SYSTEM_ADMIN + "') OR hasAuthority('" + USER + "/SAVE_ONE')") @PostMapping(value = "/save_profile") public ResponseEntity saveProfile(@RequestParam String avatar) throws BaseResponseException { UserEntity userEntity = new UserEntity(); userEntity.setAvatar(avatar); return new ResponseEntity<>(userService.saveProfile(userEntity), HttpStatus.OK); } /** * 指定用户 id,获取用户(除密码和角色) * * @return ResponseEntity */ @OperationLog(value = "指定用户 id,获取用户(除密码和角色)", type = OperationLogType.API) @PreAuthorize("hasRole('" + SYSTEM_ADMIN + "') OR hasAuthority('" + USER + "/SEND_EMAIL_VERIFY_CODE_BY_CURRENT_USER')") @PostMapping(value = "/send_email_verify_code_by_current_user") public ResponseEntity sendEmailVerifyCodeByCurrentUser(@RequestParam(required = false) String newEmail) throws BaseResponseException { UserEntity userEntity = userService.getCurrentUser(); if (newEmail != null) { return new ResponseEntity<>(userService.sendEmailVerifyCode(userEntity.getId(), newEmail), HttpStatus.OK); } else { return new ResponseEntity<>(userService.sendEmailVerifyCode(userEntity), HttpStatus.OK); } } /** * 指定用户 id,获取用户(除密码和角色) * * @return ResponseEntity */ @OperationLog(value = "指定用户 id,获取用户(除密码和角色)", type = OperationLogType.API) @PreAuthorize("hasRole('" + SYSTEM_ADMIN + "') OR hasAuthority('" + USER + "/CHECK_VERIFY_CODE_BY_CURRENT_USER')") @PostMapping(value = "/check_email_verify_code_by_current_user") public ResponseEntity checkEmailVerifyCodeByCurrentUser(@RequestParam String emailVerifyCode) throws BaseResponseException { UserEntity userEntity = userService.getCurrentUser(); return new ResponseEntity<>(userService.checkEmailVerifyCode(userEntity, userEntity.getEmail(), emailVerifyCode), HttpStatus.OK); } /** * 指定用户 id,获取用户(除密码和角色) * * @return ResponseEntity */ @OperationLog(value = "指定用户 id,获取用户(除密码和角色)", type = OperationLogType.API) @PreAuthorize("hasRole('" + SYSTEM_ADMIN + "') OR hasAuthority('" + USER + "/CHANGE_EMAIL_BY_CURRENT_USER')") @PostMapping(value = "/change_email_by_current_user") public ResponseEntity changeEmailByCurrentUser(@RequestParam String emailVerifyCode, @RequestParam String newEmail, @RequestParam String newEmailVerifyCode) throws BaseResponseException { UserEntity userEntity = userService.getCurrentUser(); return new ResponseEntity<>(userService.changeEmail(userEntity, emailVerifyCode, newEmail, newEmailVerifyCode), HttpStatus.OK); } /** * 指定用户 id,获取用户(除密码和角色) * * @return ResponseEntity */ @OperationLog(value = "指定用户 id,获取用户(除密码和角色)", type = OperationLogType.API) @PreAuthorize("hasRole('" + SYSTEM_ADMIN + "') OR hasAuthority('" + USER + "/CHANGE_PASSWORD_BY_CURRENT_USER')") @PostMapping(value = "/change_password_by_current_user") public ResponseEntity changePasswordByCurrentUser(@RequestParam String password, @RequestParam String newPassword, @RequestParam String confirmNewPassword) throws BaseResponseException { UserEntity userEntity = userService.getCurrentUser(); return new ResponseEntity<>(userService.changePassword(userEntity, password, newPassword, confirmNewPassword), HttpStatus.OK); } } ================================================ FILE: src/main/java/com/godcheese/nimrod/user/api/UserRoleRestController.java ================================================ package com.godcheese.nimrod.user.api; import com.godcheese.nimrod.common.easyui.Pagination; import com.godcheese.nimrod.common.operationlog.OperationLog; import com.godcheese.nimrod.common.operationlog.OperationLogType; import com.godcheese.nimrod.user.User; import com.godcheese.nimrod.user.entity.UserRoleEntity; import com.godcheese.nimrod.user.service.UserRoleService; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.http.HttpStatus; import org.springframework.http.MediaType; import org.springframework.http.ResponseEntity; import org.springframework.security.access.prepost.PreAuthorize; import org.springframework.web.bind.annotation.*; import java.util.List; import static com.godcheese.nimrod.common.security.SimpleUserDetailsServiceImpl.SYSTEM_ADMIN; /** * @author godcheese [godcheese@outlook.com] * @date 2018-02-22 */ @RestController @RequestMapping(value = User.Api.USER_ROLE, produces = MediaType.APPLICATION_JSON_VALUE) public class UserRoleRestController { private static final String USER_ROLE = "/API/USER/USER_ROLE"; @Autowired private UserRoleService userRoleService; /** * 分页获取所有用户角色 * * @param page 页 * @param rows 每页显示数量 * @return ResponseEntity> */ @OperationLog(value = "分页获取所有用户角色", type = OperationLogType.API) @PreAuthorize("hasRole('" + SYSTEM_ADMIN + "') OR hasAuthority('" + USER_ROLE + "/PAGE_ALL')") @GetMapping(value = "/page_all") public ResponseEntity> pageAll(@RequestParam Integer page, @RequestParam Integer rows) { return new ResponseEntity<>(userRoleService.pageAll(page, rows), HttpStatus.OK); } /** * 新增用户角色 * * @param userId 用户 id * @param roleId 角色 id * @return ResponseEntity */ @OperationLog(value = "新增用户角色", type = OperationLogType.API) @PreAuthorize("hasRole('" + SYSTEM_ADMIN + "') OR hasAuthority('" + USER_ROLE + "/ADD_ONE')") @PostMapping(value = "/add_one") public ResponseEntity addOne(@RequestParam Long userId, @RequestParam Long roleId) { UserRoleEntity userRoleEntity = new UserRoleEntity(); userRoleEntity.setUserId(userId); userRoleEntity.setRoleId(roleId); UserRoleEntity userRoleEntity1 = userRoleService.addOne(userRoleEntity); return new ResponseEntity<>(userRoleEntity1, HttpStatus.OK); } /** * 指定用户 id、角色 id list,批量删除用户角色 * * @param userId 用户 id * @param roleIdList 角色 id list * @return ResponseEntity */ @OperationLog(value = "指定用户 id、角色 id list,批量删除用户角色", type = OperationLogType.API) @PreAuthorize("hasRole('" + SYSTEM_ADMIN + "') OR hasAuthority('" + USER_ROLE + "/DELETE_ALL_BY_USER_ID_AND_ROLE_ID_LIST')") @PostMapping(value = "/delete_all_by_user_id_and_role_id_list") public ResponseEntity deleteAllByUserIdAndRoleIdList(@RequestParam Long userId, @RequestParam("roleIdList[]") List roleIdList) { return new ResponseEntity<>(userRoleService.deleteAllByUserIdAndRoleIdList(userId, roleIdList), HttpStatus.OK); } } ================================================ FILE: src/main/java/com/godcheese/nimrod/user/api/ViewMenuCategoryRestController.java ================================================ package com.godcheese.nimrod.user.api; import com.godcheese.nimrod.common.easyui.ComboTree; import com.godcheese.nimrod.common.operationlog.OperationLog; import com.godcheese.nimrod.common.operationlog.OperationLogType; import com.godcheese.nimrod.user.User; import com.godcheese.nimrod.user.entity.ViewMenuCategoryEntity; import com.godcheese.nimrod.user.service.ViewMenuCategoryService; import com.godcheese.tile.web.exception.BaseResponseException; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.http.HttpStatus; import org.springframework.http.MediaType; import org.springframework.http.ResponseEntity; import org.springframework.security.access.prepost.PreAuthorize; import org.springframework.web.bind.annotation.*; import java.util.ArrayList; import java.util.List; import java.util.Map; import static com.godcheese.nimrod.common.security.SimpleUserDetailsServiceImpl.SYSTEM_ADMIN; /** * @author godcheese [godcheese@outlook.com] * @date 2018-02-22 */ @RestController @RequestMapping(value = User.Api.VIEW_MENU_CATEGORY, produces = MediaType.APPLICATION_JSON_VALUE) public class ViewMenuCategoryRestController { private static final String VIEW_MENU_CATEGORY = "/API/USER/VIEW_MENU_CATEGORY"; @Autowired private ViewMenuCategoryService viewMenuCategoryService; /** * 获取所有父级视图菜单分类 * * @return ResponseEntity> */ @PreAuthorize("hasRole('" + SYSTEM_ADMIN + "') OR hasAuthority('" + VIEW_MENU_CATEGORY + "/LIST_ALL_PARENT')") @GetMapping(value = "/list_all_parent") public ResponseEntity> listAllParent(@RequestParam(required = false) Long roleId) { return new ResponseEntity<>(viewMenuCategoryService.listAllParent(roleId), HttpStatus.OK); } /** * 指定父级视图菜单分类 id,获取所有视图菜单分类 * * @param parentId 父级视图菜单分类 id * @return ResponseEntity> */ @PreAuthorize("hasRole('" + SYSTEM_ADMIN + "') OR hasAuthority('" + VIEW_MENU_CATEGORY + "/LIST_ALL_BY_PARENT_ID')") @GetMapping(value = "/list_all_by_parent_id") public ResponseEntity> listAllByParentId(@RequestParam Long parentId, @RequestParam(required = false) Long roleId) { return new ResponseEntity<>(viewMenuCategoryService.listAllByParentId(parentId, roleId), HttpStatus.OK); } /** * 新增视图菜单分类 * * @param name 视图菜单分类名称 * @param icon 图标(icon) * @param parentId 父级视图菜单分类 id * @param sort 排序 * @param remark 备注 * @return */ @OperationLog(value = "新增视图菜单分类", type = OperationLogType.API) @PreAuthorize("hasRole('" + SYSTEM_ADMIN + "') OR hasAuthority('" + VIEW_MENU_CATEGORY + "/ADD_ONE')") @PostMapping(value = "/add_one") public ResponseEntity addOne(@RequestParam String name, @RequestParam(required = false) String icon, @RequestParam(required = false) Long parentId, @RequestParam Long sort, @RequestParam String remark) { ViewMenuCategoryEntity viewMenuCategoryEntity = new ViewMenuCategoryEntity(); viewMenuCategoryEntity.setName(name); viewMenuCategoryEntity.setIcon(icon); viewMenuCategoryEntity.setParentId(parentId); viewMenuCategoryEntity.setSort(sort); viewMenuCategoryEntity.setRemark(remark); ViewMenuCategoryEntity viewMenuCategoryEntity1 = viewMenuCategoryService.addOne(viewMenuCategoryEntity); return new ResponseEntity<>(viewMenuCategoryEntity1, HttpStatus.OK); } /** * 保存视图菜单分类 * * @param id 视图菜单分类 id * @param name 视图菜单分类名称 * @param icon 图标(icon) * @param sort 排序 * @param remark 备注 * @return ResponseEntity */ @OperationLog(value = "保存视图菜单分类", type = OperationLogType.API) @PreAuthorize("hasRole('" + SYSTEM_ADMIN + "') OR hasAuthority('" + VIEW_MENU_CATEGORY + "/SAVE_ONE')") @PostMapping(value = "/save_one") public ResponseEntity saveOne(@RequestParam Long id, @RequestParam String name, @RequestParam(required = false) String icon, @RequestParam Long sort, @RequestParam String remark) { ViewMenuCategoryEntity viewMenuCategoryEntity = new ViewMenuCategoryEntity(); viewMenuCategoryEntity.setId(id); viewMenuCategoryEntity.setName(name); viewMenuCategoryEntity.setIcon(icon); viewMenuCategoryEntity.setSort(sort); viewMenuCategoryEntity.setRemark(remark); ViewMenuCategoryEntity viewMenuCategoryEntity1 = viewMenuCategoryService.saveOne(viewMenuCategoryEntity); return new ResponseEntity<>(viewMenuCategoryEntity1, HttpStatus.OK); } /** * 指定视图菜单分类 id,批量删除视图菜单分类 * * @param idList 视图菜单分类 id list * @return ResponseEntity * @throws BaseResponseException BaseResponseException */ @OperationLog(value = "指定视图菜单分类 id,批量删除视图菜单分类", type = OperationLogType.API) @PreAuthorize("hasRole('" + SYSTEM_ADMIN + "') OR hasAuthority('" + VIEW_MENU_CATEGORY + "/DELETE_ALL')") @PostMapping(value = "/delete_all") public ResponseEntity deleteAll(@RequestParam("id[]") List idList) throws BaseResponseException { return new ResponseEntity<>(viewMenuCategoryService.deleteAll(idList), HttpStatus.OK); } /** * 指定视图菜单分类 id,获取视图菜单分类 * * @param id 视图菜单分类 id * @return ResponseEntity */ @OperationLog(value = "指定视图菜单分类 id,获取视图菜单分类", type = OperationLogType.API) @PreAuthorize("hasRole('" + SYSTEM_ADMIN + "') OR hasAuthority('" + VIEW_MENU_CATEGORY + "/ONE')") @GetMapping(value = "/one/{id}") public ResponseEntity getOne(@PathVariable Long id) { return new ResponseEntity<>(viewMenuCategoryService.getOne(id), HttpStatus.OK); } /** * 指定角色 id,获取所有父级视图菜单分类 * * @param roleId 角色 id * @return ResponseEntity> */ @PreAuthorize("hasRole('" + SYSTEM_ADMIN + "') OR hasAuthority('" + VIEW_MENU_CATEGORY + "/LIST_ALL_PARENT_BY_ROLE_ID')") @GetMapping(value = "/list_all_parent_by_role_id/{roleId}") public ResponseEntity> listAllParentByRoleId(@PathVariable Long roleId) { return new ResponseEntity<>(viewMenuCategoryService.listAllParentByRoleId(roleId), HttpStatus.OK); } /** * 指定用户 id,获取所有父级视图菜单分类 * * @param userId 用户 id * @return ResponseEntity> */ @PreAuthorize("hasRole('" + SYSTEM_ADMIN + "') OR hasAuthority('" + VIEW_MENU_CATEGORY + "/LIST_ALL_PARENT_BY_USER_ID')") @GetMapping(value = "/list_all_parent_by_user_id/{userId}") public ResponseEntity> listAllParentByUserId(@PathVariable Long userId) { return new ResponseEntity<>(viewMenuCategoryService.listAllParentByUserId(userId), HttpStatus.OK); } /** * 指定用户 id、父级视图菜单分类 id,获取所有子级视图菜单分类 * * @param userId 用户 id * @param parentId 视图菜单分类父级 id * @return ResponseEntity */ @PreAuthorize("hasRole('" + SYSTEM_ADMIN + "') OR hasAuthority('" + VIEW_MENU_CATEGORY + "/LIST_ALL_CHILD_BY_PARENT_ID_AND_USER_ID')") @GetMapping(value = "/list_all_child_by_parent_id_and_user_id") public ResponseEntity listAllChildByParentIdAndUserId(@RequestParam Long parentId, @RequestParam Long userId) { return new ResponseEntity<>(viewMenuCategoryService.listAllChildByParentIdAndUserId(parentId, userId), HttpStatus.OK); } /** * 指定用户 id、父级视图菜单分类 id,获取所有子级视图菜单分类和视图菜单 * * @param userId 用户 id * @param parentId 视图菜单分类父级 id * @return ResponseEntity> > */ @PreAuthorize("hasRole('" + SYSTEM_ADMIN + "') OR hasAuthority('" + VIEW_MENU_CATEGORY + "/LIST_ALL_CHILD_VIEW_MENU_CATEGORY_AND_VIEW_MENU_BY_PARENT_ID_AND_USER_ID')") @GetMapping(value = "/list_all_child_view_menu_category_and_view_menu_by_parent_id_and_user_id") public ResponseEntity>> listAllChildViewMenuCategoryAndViewMenuByParentIdAndUserId(@RequestParam Long parentId, @RequestParam Long userId) { return new ResponseEntity<>(viewMenuCategoryService.listAllChildViewMenuCategoryAndViewMenuByParentIdAndUserId(parentId, userId), HttpStatus.OK); } /** * 获取所有菜单分类 * * @return ResponseEntity */ @PreAuthorize("hasRole('" + SYSTEM_ADMIN + "') OR hasAuthority('" + VIEW_MENU_CATEGORY + "/LIST_ALL')") @GetMapping(value = "/list_all") public ResponseEntity listAll() { return new ResponseEntity<>(viewMenuCategoryService.listAll(), HttpStatus.OK); } /** * 指定菜单分类名,模糊搜索获取所有菜单分类 * * @return ResponseEntity */ @PreAuthorize("hasRole('" + SYSTEM_ADMIN + "') OR hasAuthority('" + VIEW_MENU_CATEGORY + "/SEARCH_ALL_BY_NAME')") @GetMapping(value = "/search_all_by_name") public ResponseEntity searchAllByName(@RequestParam String q) { return new ResponseEntity<>(viewMenuCategoryService.searchAllByName(q), HttpStatus.OK); } /** * 获取所有视图菜单分类,以 ComboTree 形式展示 * * @return ResponseEntity> */ @OperationLog(value = "获取所有视图菜单分类,以 ComboTree 形式展示", type = OperationLogType.API) @PreAuthorize("hasRole('" + SYSTEM_ADMIN + "') OR hasAuthority('" + VIEW_MENU_CATEGORY + "/LIST_ALL_AS_COMBO_TREE')") @GetMapping(value = "/list_all_as_combo_tree") public ResponseEntity> listAllAsComboTree() { List comboTreeResultList = new ArrayList<>(); List viewMenuCategoryComboTreeList = viewMenuCategoryService.listAllViewMenuCategoryComboTree(); for (ComboTree comboTree : viewMenuCategoryComboTreeList) { if (comboTree.getParentId() == null) { comboTreeResultList.add(comboTree); } } for (ComboTree comboTree : comboTreeResultList) { comboTree.setChildren(viewMenuCategoryService.getViewMenuCategoryChildrenComboTree(comboTree.getId(), viewMenuCategoryComboTreeList)); } return new ResponseEntity<>(comboTreeResultList, HttpStatus.OK); } } ================================================ FILE: src/main/java/com/godcheese/nimrod/user/api/ViewMenuRestController.java ================================================ package com.godcheese.nimrod.user.api; import com.godcheese.nimrod.common.easyui.Pagination; import com.godcheese.nimrod.common.operationlog.OperationLog; import com.godcheese.nimrod.common.operationlog.OperationLogType; import com.godcheese.nimrod.user.User; import com.godcheese.nimrod.user.entity.ViewMenuEntity; import com.godcheese.nimrod.user.service.ViewMenuService; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.http.HttpStatus; import org.springframework.http.MediaType; import org.springframework.http.ResponseEntity; import org.springframework.security.access.prepost.PreAuthorize; import org.springframework.web.bind.annotation.*; import java.util.List; import static com.godcheese.nimrod.common.security.SimpleUserDetailsServiceImpl.SYSTEM_ADMIN; /** * @author godcheese [godcheese@outlook.com] * @date 2018-02-22 */ @RestController @RequestMapping(value = User.Api.VIEW_MENU, produces = MediaType.APPLICATION_JSON_VALUE) public class ViewMenuRestController { private static final String VIEW_MENU = "/API/USER/VIEW_MENU"; private static final Logger LOGGER = LoggerFactory.getLogger(ViewMenuRestController.class); @Autowired private ViewMenuService viewMenuService; /** * 新增视图菜单 * * @param name 视图菜单名称 * @param icon 图标(icon) * @param url 请求地址(url) * @param viewMenuCategoryId 视图菜单分类 id * @param sort 排序 * @param remark 备注 * @return ResponseEntity */ @OperationLog(value = "新增视图菜单", type = OperationLogType.API) @PreAuthorize("hasRole('" + SYSTEM_ADMIN + "') OR hasAuthority('" + VIEW_MENU + "/ADD_ONE')") @PostMapping(value = "/add_one") public ResponseEntity addOne(@RequestParam String name, @RequestParam(required = false) String icon, @RequestParam String url, @RequestParam Long viewMenuCategoryId, @RequestParam Long sort, @RequestParam String remark) { ViewMenuEntity viewMenuEntity = new ViewMenuEntity(); viewMenuEntity.setName(name); viewMenuEntity.setIcon(icon); viewMenuEntity.setUrl(url); viewMenuEntity.setViewMenuCategoryId(viewMenuCategoryId); viewMenuEntity.setSort(sort); viewMenuEntity.setRemark(remark); ViewMenuEntity viewMenuEntity1 = viewMenuService.addOne(viewMenuEntity); return new ResponseEntity<>(viewMenuEntity1, HttpStatus.OK); } /** * 保存视图菜单 * * @param id 视图菜单 id * @param name 视图菜单名称 * @param icon 图标(icon) * @param url 请求地址(url) * @param viewMenuCategoryId 视图菜单分类 id * @param sort 排序 * @param remark 备注 * @return ResponseEntity */ @OperationLog(value = "保存视图菜单", type = OperationLogType.API) @PreAuthorize("hasRole('" + SYSTEM_ADMIN + "') OR hasAuthority('" + VIEW_MENU + "/SAVE_ONE')") @PostMapping(value = "/save_one") public ResponseEntity saveOne(@RequestParam Long id, @RequestParam String name, @RequestParam(required = false) String icon, @RequestParam String url, @RequestParam Long viewMenuCategoryId, @RequestParam Long sort, @RequestParam String remark) { ViewMenuEntity viewMenuEntity = new ViewMenuEntity(); viewMenuEntity.setId(id); viewMenuEntity.setName(name); viewMenuEntity.setIcon(icon); viewMenuEntity.setUrl(url); viewMenuEntity.setViewMenuCategoryId(viewMenuCategoryId); viewMenuEntity.setSort(sort); viewMenuEntity.setRemark(remark); ViewMenuEntity viewMenuEntity1 = viewMenuService.saveOne(viewMenuEntity); return new ResponseEntity<>(viewMenuEntity1, HttpStatus.OK); } /** * 指定视图菜单 id list,批量删除视图菜单 * * @param idList 视图菜单 id list * @return ResponseEntity */ @OperationLog(value = "指定视图菜单 id list,批量删除视图菜单", type = OperationLogType.API) @PreAuthorize("hasRole('" + SYSTEM_ADMIN + "') OR hasAuthority('" + VIEW_MENU + "/DELETE_ALL')") @PostMapping(value = "/delete_all") public ResponseEntity deleteAll(@RequestParam("id[]") List idList) { return new ResponseEntity<>(viewMenuService.deleteAll(idList), HttpStatus.OK); } /** * 指定视图菜单 id,获取视图菜单 * * @param id 视图菜单 id * @return ResponseEntity */ @OperationLog(value = "指定视图菜单 id,获取视图菜单", type = OperationLogType.API) @PreAuthorize("hasRole('" + SYSTEM_ADMIN + "') OR hasAuthority('" + VIEW_MENU + "/ONE')") @GetMapping(value = "/one/{id}") public ResponseEntity getOne(@PathVariable Long id) { return new ResponseEntity<>(viewMenuService.getOne(id), HttpStatus.OK); } // /** // * 指定视图菜单分类 id、角色 id,分页获取所有视图菜单 // * @param viewMenuCategoryId 视图菜单分类 id // * @param roleId 角色 id // * @param page 页 // * @param rows 每页显示数量 // * @return ResponseEntity> // */ // @OperationLog(value = "指定视图菜单分类 id、角色 id,分页获取所有视图菜单", type = OperationLogType.API) // @PreAuthorize("hasRole('" + SYSTEM_ADMIN + "') OR hasAuthority('" + VIEW_MENU + "/PAGE_ALL_BY_VIEW_MENU_CATEGORY_ID_AND_ROLE_ID')") // @GetMapping(value = "/page_all_by_view_menu_category_id_and_role_id") // public ResponseEntity> pageAllByViewMenuCategoryIdAndRoleId(@RequestParam Integer page, @RequestParam Integer rows, @RequestParam Long viewMenuCategoryId, @RequestParam Long roleId) { // return new ResponseEntity<>(viewMenuService.pageAllByViewMenuCategoryIdAndRoleId(viewMenuCategoryId, roleId, page, rows), HttpStatus.OK); // } /** * 指定视图菜单分类 id,分页获取所有视图菜单 * * @param viewMenuCategoryId 视图菜单分类 id * @param page 页 * @param rows 每页显示数量 * @return ResponseEntity> */ @OperationLog(value = "指定视图菜单分类 id,分页获取所有视图菜单", type = OperationLogType.API) @PreAuthorize("hasRole('" + SYSTEM_ADMIN + "') OR hasAuthority('" + VIEW_MENU + "/PAGE_ALL_BY_VIEW_MENU_CATEGORY_ID')") @GetMapping(value = "/page_all_by_view_menu_category_id") public ResponseEntity> pageAllByViewMenuCategoryId(@RequestParam Integer page, @RequestParam Integer rows, @RequestParam Long viewMenuCategoryId, @RequestParam(required = false) Long roleId) { return new ResponseEntity<>(viewMenuService.pageAllByViewMenuCategoryId(page, rows, viewMenuCategoryId, roleId), HttpStatus.OK); } // /** // * 指定菜单名,模糊搜索获取所有菜单 // * @return ResponseEntity> // */ // @PreAuthorize("hasRole('" + SYSTEM_ADMIN + "') OR hasAuthority('" + VIEW_MENU + "/SEARCH_ALL_BY_NAME')") // @GetMapping(value = "/search_all_by_name") // public ResponseEntity> searchAllByName(@RequestParam String q) { // return new ResponseEntity<>(viewMenuService.searchAllByName(q), HttpStatus.OK); // } } ================================================ FILE: src/main/java/com/godcheese/nimrod/user/api/ViewPageApiRestController.java ================================================ package com.godcheese.nimrod.user.api; import com.godcheese.nimrod.common.operationlog.OperationLog; import com.godcheese.nimrod.common.operationlog.OperationLogType; import com.godcheese.nimrod.user.User; import com.godcheese.nimrod.user.service.ViewPageApiService; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.http.HttpStatus; import org.springframework.http.ResponseEntity; import org.springframework.security.access.prepost.PreAuthorize; 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.RestController; import java.util.List; import static com.godcheese.nimrod.common.security.SimpleUserDetailsServiceImpl.SYSTEM_ADMIN; /** * @author godcheese [godcheese@outlook.com] * @date 2018-02-22 */ @RestController @RequestMapping(User.Api.VIEW_PAGE_API) public class ViewPageApiRestController { private static final String VIEW_PAGE_API = "/API/SYSTEM/VIEW_PAGE_API"; @Autowired private ViewPageApiService viewPageApiService; // /** // * 是否关联 API // * @param viewPageId 视图页面 id // * @param apiId API id // * @return ResponseEntity> // */ // @PreAuthorize("hasRole('" + SYSTEM_ADMIN + "') OR hasAuthority('" + VIEW_PAGE_API + "/IS_ASSOCIATED_BY_VIEW_PAGE_ID_AND_API_ID')") // @GetMapping(value = "/is_associated_by_vie_page_id_and_api_id") // public ResponseEntity> isAssociatedByViewPageIdAndApiId(@RequestParam Long viewPageId, @RequestParam Long apiId) { // return new ResponseEntity<>(viewPageApiService.isAssociatedByViewPageIdAndApiId(viewPageId, apiId), HttpStatus.OK); // } /** * 指定视图页面 id,API id list,批量关联 * * @param viewPageId 视图页面 id * @param apiIdList API id list * @return ResponseEntity */ @OperationLog(value = "指定视图页面 id,API id list,批量关联", type = OperationLogType.API) @PreAuthorize("hasRole('" + SYSTEM_ADMIN + "') OR hasAuthority('" + VIEW_PAGE_API + "/ASSOCIATE_ALL_BY_VIEW_PAGE_ID_AND_API_ID_LIST')") @PostMapping(value = "/associate_all_by_view_page_id_and_api_id_list") public ResponseEntity associateAllByViewPageIdAndApiIdList(@RequestParam Long viewPageId, @RequestParam("apiIdList[]") List apiIdList) { return new ResponseEntity<>(viewPageApiService.associateAllByViewPageIdAndApiIdList(viewPageId, apiIdList), HttpStatus.OK); } /** * 指定视图页面 id,API id list,批量撤销关联 * * @param viewPageId 视图页面 id * @param apiIdList API id list * @return ResponseEntity */ @OperationLog(value = "指定视图页面 id,API id list,批量撤销关联", type = OperationLogType.API) @PreAuthorize("hasRole('" + SYSTEM_ADMIN + "') OR hasAuthority('" + VIEW_PAGE_API + "/REVOKE_ASSOCIATE_ALL_BY_VIEW_PAGE_ID_AND_API_ID_LIST')") @PostMapping(value = "/revoke_associate_all_by_view_page_id_and_api_id_list") public ResponseEntity revokeAssociateAllByViewPageIdAndApiIdList(@RequestParam Long viewPageId, @RequestParam("apiIdList[]") List apiIdList) { return new ResponseEntity<>(viewPageApiService.revokeAssociateAllByViewPageIdAndApiIdList(viewPageId, apiIdList), HttpStatus.OK); } } ================================================ FILE: src/main/java/com/godcheese/nimrod/user/api/ViewPageCategoryRestController.java ================================================ package com.godcheese.nimrod.user.api; import com.godcheese.nimrod.common.easyui.ComboTree; import com.godcheese.nimrod.common.operationlog.OperationLog; import com.godcheese.nimrod.common.operationlog.OperationLogType; import com.godcheese.nimrod.user.User; import com.godcheese.nimrod.user.entity.ViewPageCategoryEntity; import com.godcheese.nimrod.user.service.ViewPageCategoryService; import com.godcheese.tile.web.exception.BaseResponseException; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.http.HttpStatus; import org.springframework.http.MediaType; import org.springframework.http.ResponseEntity; import org.springframework.security.access.prepost.PreAuthorize; import org.springframework.web.bind.annotation.*; import java.util.ArrayList; import java.util.List; import static com.godcheese.nimrod.common.security.SimpleUserDetailsServiceImpl.SYSTEM_ADMIN; /** * @author godcheese [godcheese@outlook.com] * @date 2018-02-22 */ @RestController @RequestMapping(value = User.Api.VIEW_PAGE_CATEGORY, produces = MediaType.APPLICATION_JSON_VALUE) public class ViewPageCategoryRestController { private static final String VIEW_PAGE_CATEGORY = "/API/SYSTEM/VIEW_PAGE_CATEGORY"; @Autowired private ViewPageCategoryService viewPageCategoryService; /** * 新增视图页面分类 * * @param name 视图页面分类名称 * @param parentId 父级视图菜单 id * @param sort 排序 * @param remark 备注 * @return ResponseEntity */ @OperationLog(value = "新增视图页面分类", type = OperationLogType.API) @PreAuthorize("hasRole('" + SYSTEM_ADMIN + "') OR hasAuthority('" + VIEW_PAGE_CATEGORY + "/ADD_ONE')") @PostMapping(value = "/add_one") public ResponseEntity addOne(@RequestParam String name, @RequestParam(required = false) Long parentId, @RequestParam Long sort, @RequestParam String remark) { ViewPageCategoryEntity viewPageCategoryEntity = new ViewPageCategoryEntity(); viewPageCategoryEntity.setName(name); viewPageCategoryEntity.setParentId(parentId); viewPageCategoryEntity.setSort(sort); viewPageCategoryEntity.setRemark(remark); ViewPageCategoryEntity viewPageCategoryEntity1 = viewPageCategoryService.addOne(viewPageCategoryEntity); return new ResponseEntity<>(viewPageCategoryEntity1, HttpStatus.OK); } /** * 保存视图页面分类 * * @param id 视图页面分类 id * @param name 视图页面分类名称 * @param parentId 父级视图页面分类 id * @param sort 排序 * @param remark 备注 * @return ResponseEntity */ @OperationLog(value = "保存视图页面分类", type = OperationLogType.API) @PreAuthorize("hasRole('" + SYSTEM_ADMIN + "') OR hasAuthority('" + VIEW_PAGE_CATEGORY + "/SAVE_ONE')") @PostMapping(value = "/save_one") public ResponseEntity saveOne(@RequestParam Long id, @RequestParam String name, @RequestParam Long parentId, @RequestParam Long sort, @RequestParam String remark) { ViewPageCategoryEntity viewPageCategoryEntity = new ViewPageCategoryEntity(); viewPageCategoryEntity.setId(id); viewPageCategoryEntity.setName(name); viewPageCategoryEntity.setParentId(parentId); viewPageCategoryEntity.setSort(sort); viewPageCategoryEntity.setRemark(remark); ViewPageCategoryEntity viewPageCategoryEntity1 = viewPageCategoryService.saveOne(viewPageCategoryEntity); return new ResponseEntity<>(viewPageCategoryEntity1, HttpStatus.OK); } /** * 指定视图页面分类 id,批量删除视图页面分类 * * @param idList 视图页面分类 id list * @return ResponseEntity * @throws BaseResponseException BaseResponseException */ @OperationLog(value = "指定视图页面分类 id,批量删除视图页面分类", type = OperationLogType.API) @PreAuthorize("hasRole('" + SYSTEM_ADMIN + "') OR hasAuthority('" + VIEW_PAGE_CATEGORY + "/DELETE_ALL')") @PostMapping(value = "/delete_all") public ResponseEntity deleteAll(@RequestParam("id[]") List idList) throws BaseResponseException { return new ResponseEntity<>(viewPageCategoryService.deleteAll(idList), HttpStatus.OK); } /** * 指定视图页面分类 id,获取视图页面分类 * * @param id 视图页面分类 id * @return ResponseEntity */ @OperationLog(value = "指定视图页面分类 id,获取视图页面分类", type = OperationLogType.API) @PreAuthorize("hasRole('" + SYSTEM_ADMIN + "') OR hasAuthority('" + VIEW_PAGE_CATEGORY + "/ONE')") @GetMapping(value = "/one/{id}") public ResponseEntity getOne(@PathVariable Long id) { return new ResponseEntity<>(viewPageCategoryService.getOne(id), HttpStatus.OK); } /** * 获取所有父级视图页面分类 * * @return ResponseEntity> */ @OperationLog(value = "获取所有父级视图页面分类", type = OperationLogType.API) @PreAuthorize("hasRole('" + SYSTEM_ADMIN + "') OR hasAuthority('" + VIEW_PAGE_CATEGORY + "/LIST_ALL_PARENT')") @GetMapping(value = "/list_all_parent") public ResponseEntity> listAllParent() { return new ResponseEntity<>(viewPageCategoryService.listAllParent(), HttpStatus.OK); } /** * 指定父级视图页面分类 id,获取所有视图页面分类 * * @param parentId 父级视图页面分类 id * @return ResponseEntity> */ @OperationLog(value = "指定父级视图页面分类 id,获取所有视图页面分类", type = OperationLogType.API) @PreAuthorize("hasRole('" + SYSTEM_ADMIN + "') OR hasAuthority('" + VIEW_PAGE_CATEGORY + "/LIST_ALL_BY_PARENT_ID')") @GetMapping(value = "/list_all_by_parent_id") public ResponseEntity> listAllByParentId(@RequestParam Long parentId) { return new ResponseEntity<>(viewPageCategoryService.listAllByParentId(parentId), HttpStatus.OK); } /** * 获取所有视图页面分类,以 ComboTree 形式展示 * * @return ResponseEntity> */ @OperationLog(value = "获取所有视图页面分类,以 ComboTree 形式展示", type = OperationLogType.API) @PreAuthorize("hasRole('" + SYSTEM_ADMIN + "') OR hasAuthority('" + VIEW_PAGE_CATEGORY + "/LIST_ALL_AS_COMBO_TREE')") @GetMapping(value = "/list_all_as_combo_tree") public ResponseEntity> listAllAsComboTree() { List comboTreeResultList = new ArrayList<>(); List viewPageCategoryComboTreeList = viewPageCategoryService.listAllViewPageCategoryComboTree(); for (ComboTree comboTree : viewPageCategoryComboTreeList) { if (comboTree.getParentId() == null) { comboTreeResultList.add(comboTree); } } for (ComboTree comboTree : comboTreeResultList) { comboTree.setChildren(viewPageCategoryService.getViewPageCategoryChildrenComboTree(comboTree.getId(), viewPageCategoryComboTreeList)); } return new ResponseEntity<>(comboTreeResultList, HttpStatus.OK); } } ================================================ FILE: src/main/java/com/godcheese/nimrod/user/api/ViewPageComponentApiRestController.java ================================================ package com.godcheese.nimrod.user.api; import com.godcheese.nimrod.common.operationlog.OperationLog; import com.godcheese.nimrod.common.operationlog.OperationLogType; import com.godcheese.nimrod.user.User; import com.godcheese.nimrod.user.service.ViewPageComponentApiService; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.http.HttpStatus; import org.springframework.http.ResponseEntity; import org.springframework.security.access.prepost.PreAuthorize; 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.RestController; import java.util.List; import static com.godcheese.nimrod.common.security.SimpleUserDetailsServiceImpl.SYSTEM_ADMIN; /** * @author godcheese [godcheese@outlook.com] * @date 2018-02-22 */ @RestController @RequestMapping(User.Api.VIEW_PAGE_COMPONENT_API) public class ViewPageComponentApiRestController { private static final String VIEW_PAGE_COMPONENT_API = "/API/SYSTEM/VIEW_PAGE_COMPONENT_API"; @Autowired private ViewPageComponentApiService viewPageComponentApiService; // /** // * 是否关联 API // * @param viewPageComponentId 视图页面组件 id // * @param apiId API id // * @return ResponseEntity> // */ // @PreAuthorize("hasRole('" + SYSTEM_ADMIN + "') OR hasAuthority('" + VIEW_PAGE_COMPONENT_API + "/IS_ASSOCIATED_BY_VIEW_PAGE_COMPONENT_ID_AND_API_ID')") // @GetMapping(value = "/is_associated_by_view_page_component_id_and_api_id") // public ResponseEntity> isAssociatedByViewPageComponentIdAndApiId(@RequestParam Long viewPageComponentId, @RequestParam Long apiId) { // return new ResponseEntity<>(viewPageComponentApiService.isAssociatedByViewPageComponentIdAndApiId(viewPageComponentId, apiId), HttpStatus.OK); // } /** * 指定视图页面组件 id、API id list,批量关联 * * @param viewPageComponentId 视图页面组件 id * @param apiIdList API id list * @return ResponseEntity */ @OperationLog(value = "指定视图页面组件 id、API id list,批量关联", type = OperationLogType.API) @PreAuthorize("hasRole('" + SYSTEM_ADMIN + "') OR hasAuthority('" + VIEW_PAGE_COMPONENT_API + "/ASSOCIATE_ALL_BY_VIEW_PAGE_COMPONENT_ID_AND_API_ID_LIST')") @PostMapping(value = "/associate_all_by_view_page_component_id_and_api_id_list") public ResponseEntity associateAllByViewPageComponentIdAndApiIdList(@RequestParam Long viewPageComponentId, @RequestParam("apiIdList[]") List apiIdList) { return new ResponseEntity<>(viewPageComponentApiService.associateAllByViewPageComponentIdAndApiIdList(viewPageComponentId, apiIdList), HttpStatus.OK); } /** * 指定视图页面组件 id、API id,批量撤销关联 * * @param viewPageComponentId 视图页面组件 id * @param apiIdList API id list * @return ResponseEntity */ @OperationLog(value = "指定视图页面组件 id、API id,批量撤销关联", type = OperationLogType.API) @PreAuthorize("hasRole('" + SYSTEM_ADMIN + "') OR hasAuthority('" + VIEW_PAGE_COMPONENT_API + "/REVOKE_ASSOCIATE_ALL_BY_ROLE_ID_AND_AUTHORITY')") @PostMapping(value = "/revoke_associate_all_by_view_page_component_id_and_api_id_list") public ResponseEntity revokeAssociateAllByViewPageComponentIdAndApiIdList(@RequestParam Long viewPageComponentId, @RequestParam("apiIdList[]") List apiIdList) { return new ResponseEntity<>(viewPageComponentApiService.revokeAssociateAllByViewPageComponentIdAndApiIdList(viewPageComponentId, apiIdList), HttpStatus.OK); } } ================================================ FILE: src/main/java/com/godcheese/nimrod/user/api/ViewPageComponentRestController.java ================================================ package com.godcheese.nimrod.user.api; import com.godcheese.nimrod.common.easyui.Pagination; import com.godcheese.nimrod.common.operationlog.OperationLog; import com.godcheese.nimrod.common.operationlog.OperationLogType; import com.godcheese.nimrod.user.User; import com.godcheese.nimrod.user.entity.ViewPageComponentEntity; import com.godcheese.nimrod.user.service.ViewPageComponentService; import com.godcheese.tile.web.exception.BaseResponseException; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.http.HttpStatus; import org.springframework.http.MediaType; import org.springframework.http.ResponseEntity; import org.springframework.security.access.prepost.PreAuthorize; import org.springframework.web.bind.annotation.*; import java.util.List; import static com.godcheese.nimrod.common.security.SimpleUserDetailsServiceImpl.SYSTEM_ADMIN; /** * @author godcheese [godcheese@outlook.com] * @date 2018-02-22 */ @RestController @RequestMapping(value = User.Api.VIEW_PAGE_COMPONENT, produces = MediaType.APPLICATION_JSON_VALUE) public class ViewPageComponentRestController { private static final String VIEW_PAGE_COMPONENT = "/API/SYSTEM/VIEW_PAGE_COMPONENT"; @Autowired private ViewPageComponentService viewPageComponentService; /** * 新增视图页面组件 * * @param viewPageComponentType 视图页面组件类型 * @param name 视图页面组件名称 * @param authority 权限(authority) * @param viewPageId 视图页面 id * @param sort 排序 * @param remark 备注 * @return ResponseEntity * @throws BaseResponseException BaseResponseException */ @OperationLog(value = "新增视图页面组件", type = OperationLogType.API) @PreAuthorize("hasRole('" + SYSTEM_ADMIN + "') OR hasAuthority('" + VIEW_PAGE_COMPONENT + "/ADD_ONE')") @PostMapping(value = "/add_one") public ResponseEntity addOne(@RequestParam Long viewPageComponentType, @RequestParam String name, @RequestParam String authority, @RequestParam Long viewPageId, @RequestParam Long sort, @RequestParam String remark) throws BaseResponseException { ViewPageComponentEntity viewPageComponentEntity = new ViewPageComponentEntity(); viewPageComponentEntity.setViewPageComponentType(viewPageComponentType); viewPageComponentEntity.setName(name); viewPageComponentEntity.setAuthority(authority); viewPageComponentEntity.setViewPageId(viewPageId); viewPageComponentEntity.setSort(sort); viewPageComponentEntity.setRemark(remark); ViewPageComponentEntity viewPageComponentEntity1 = viewPageComponentService.addOne(viewPageComponentEntity); return new ResponseEntity<>(viewPageComponentEntity1, HttpStatus.OK); } /** * 保存视图页面组件 * * @param id 视图页面组件 id * @param viewPageComponentType 视图页面组件类型 * @param name 视图页面组件名称 * @param authority 权限(authority) * @param sort 排序 * @param remark 备注 * @return ResponseEntity * @throws BaseResponseException BaseResponseException */ @OperationLog(value = "保存视图页面组件", type = OperationLogType.API) @PreAuthorize("hasRole('" + SYSTEM_ADMIN + "') OR hasAuthority('" + VIEW_PAGE_COMPONENT + "/SAVE_ONE')") @PostMapping(value = "/save_one") public ResponseEntity saveOne(@RequestParam Long id, @RequestParam Long viewPageComponentType, @RequestParam String name, @RequestParam String authority, @RequestParam Long sort, @RequestParam String remark) throws BaseResponseException { ViewPageComponentEntity viewPageComponentEntity = new ViewPageComponentEntity(); viewPageComponentEntity.setId(id); viewPageComponentEntity.setName(name); viewPageComponentEntity.setViewPageComponentType(viewPageComponentType); viewPageComponentEntity.setAuthority(authority); viewPageComponentEntity.setSort(sort); viewPageComponentEntity.setRemark(remark); ViewPageComponentEntity viewPageComponentEntity1 = viewPageComponentService.saveOne(viewPageComponentEntity); return new ResponseEntity<>(viewPageComponentEntity1, HttpStatus.OK); } /** * 指定视图页面组件 id,批量删除视图页面组件 * * @param idList 视图页面组件 id list * @return ResponseEntity */ @OperationLog(value = "指定视图页面组件 id,批量删除视图页面组件", type = OperationLogType.API) @PreAuthorize("hasRole('" + SYSTEM_ADMIN + "') OR hasAuthority('" + VIEW_PAGE_COMPONENT + "/DELETE_ALL')") @PostMapping(value = "/delete_all") public ResponseEntity deleteAll(@RequestParam("id[]") List idList) { return new ResponseEntity<>(viewPageComponentService.deleteAll(idList), HttpStatus.OK); } /** * 指定视图组件 id,获取视图组件 * * @param id 视图页面组件 id * @return ResponseEntity */ @OperationLog(value = "指定视图组件 id,获取视图组件", type = OperationLogType.API) @PreAuthorize("hasRole('" + SYSTEM_ADMIN + "') OR hasAuthority('" + VIEW_PAGE_COMPONENT + "/ONE')") @GetMapping(value = "/one/{id}") public ResponseEntity getOne(@PathVariable Long id) { return new ResponseEntity<>(viewPageComponentService.getOne(id), HttpStatus.OK); } /** * 指定视图页面 id,分页获取所有视图页面组件 * * @param viewPageId 视图页面 id * @param page 页 * @param rows 每页显示数量 * @return ResponseEntity> */ @OperationLog(value = "指定视图页面 id,分页获取所有视图页面组件", type = OperationLogType.API) @PreAuthorize("hasRole('" + SYSTEM_ADMIN + "') OR hasAuthority('" + VIEW_PAGE_COMPONENT + "/PAGE_ALL_BY_VIEW_PAGE_ID')") @GetMapping(value = "/page_all_by_view_page_id") public ResponseEntity> pageAllByViewPageId(@RequestParam Integer page, @RequestParam Integer rows, @RequestParam Long viewPageId, @RequestParam Long roleId) { return new ResponseEntity<>(viewPageComponentService.pageAllByViewPageId(page, rows, viewPageId, roleId), HttpStatus.OK); } } ================================================ FILE: src/main/java/com/godcheese/nimrod/user/api/ViewPageRestController.java ================================================ package com.godcheese.nimrod.user.api; import com.godcheese.nimrod.common.easyui.Pagination; import com.godcheese.nimrod.common.operationlog.OperationLog; import com.godcheese.nimrod.common.operationlog.OperationLogType; import com.godcheese.nimrod.user.User; import com.godcheese.nimrod.user.entity.ViewPageEntity; import com.godcheese.nimrod.user.service.ViewPageService; import com.godcheese.tile.web.exception.BaseResponseException; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.http.HttpStatus; import org.springframework.http.MediaType; import org.springframework.http.ResponseEntity; import org.springframework.security.access.prepost.PreAuthorize; import org.springframework.web.bind.annotation.*; import java.util.List; import static com.godcheese.nimrod.common.security.SimpleUserDetailsServiceImpl.SYSTEM_ADMIN; /** * @author godcheese [godcheese@outlook.com] * @date 2018-02-22 */ @RestController @RequestMapping(value = User.Api.VIEW_PAGE, produces = MediaType.APPLICATION_JSON_VALUE) public class ViewPageRestController { private static final String VIEW_PAGE = "/API/SYSTEM/VIEW_PAGE"; @Autowired private ViewPageService viewPageService; /** * 新增视图页面 * * @param name 视图页面名称 * @param url 请求地址(url) * @param authority 权限(authority) * @param viewPageCategoryId 视图页面分类 id * @param sort 排序 * @param remark 备注 * @return ResponseEntity * @throws BaseResponseException BaseResponseException */ @OperationLog(value = "新增视图页面", type = OperationLogType.API) @PreAuthorize("hasRole('" + SYSTEM_ADMIN + "') OR hasAuthority('" + VIEW_PAGE + "/ADD_ONE')") @PostMapping(value = "/add_one") public ResponseEntity addOne(@RequestParam String name, @RequestParam String url, @RequestParam String authority, @RequestParam Long viewPageCategoryId, @RequestParam Long sort, @RequestParam String remark) throws BaseResponseException { ViewPageEntity viewPageEntity = new ViewPageEntity(); viewPageEntity.setName(name); viewPageEntity.setUrl(url); viewPageEntity.setAuthority(authority); viewPageEntity.setViewPageCategoryId(viewPageCategoryId); viewPageEntity.setSort(sort); viewPageEntity.setRemark(remark); ViewPageEntity viewPageEntity1 = viewPageService.addOne(viewPageEntity); return new ResponseEntity<>(viewPageEntity1, HttpStatus.OK); } /** * 保存视图页面 * * @param id 视图页面 id * @param name 视图页面名称 * @param url 请求地址(url) * @param authority 权限(authority) * @param viewPageCategoryId 视图页面分类 id * @param sort 排序 * @param remark 备注 * @return ResponseEntity * @throws BaseResponseException BaseResponseException */ @OperationLog(value = "保存视图页面", type = OperationLogType.API) @PreAuthorize("hasRole('" + SYSTEM_ADMIN + "') OR hasAuthority('" + VIEW_PAGE + "/SAVE_ONE')") @PostMapping(value = "/save_one") public ResponseEntity saveOne(@RequestParam Long id, @RequestParam String name, @RequestParam String url, @RequestParam String authority, @RequestParam Long viewPageCategoryId, @RequestParam Long sort, @RequestParam String remark) throws BaseResponseException { ViewPageEntity viewPageEntity = new ViewPageEntity(); viewPageEntity.setId(id); viewPageEntity.setName(name); viewPageEntity.setUrl(url); viewPageEntity.setAuthority(authority); viewPageEntity.setViewPageCategoryId(viewPageCategoryId); viewPageEntity.setSort(sort); viewPageEntity.setRemark(remark); ViewPageEntity viewPageEntity1 = viewPageService.saveOne(viewPageEntity); return new ResponseEntity<>(viewPageEntity1, HttpStatus.OK); } /** * 指定视图页面 id,批量删除视图页面 * * @param idList 视图页面 id list * @return ResponseEntity */ @OperationLog(value = "指定视图页面 id,批量删除视图页面", type = OperationLogType.API) @PreAuthorize("hasRole('" + SYSTEM_ADMIN + "') OR hasAuthority('" + VIEW_PAGE + "/DELETE_ALL')") @PostMapping(value = "/delete_all") public ResponseEntity deleteAll(@RequestParam("id[]") List idList) { return new ResponseEntity<>(viewPageService.deleteAll(idList), HttpStatus.OK); } /** * 指定视图页面 id,获取视图页面 * * @param id 视图页面 id * @return ResponseEntity */ @OperationLog(value = "指定视图页面 id,获取视图页面", type = OperationLogType.API) @PreAuthorize("hasRole('" + SYSTEM_ADMIN + "') OR hasAuthority('" + VIEW_PAGE + "/ONE')") @GetMapping(value = "/one/{id}") public ResponseEntity getOne(@PathVariable Long id) { return new ResponseEntity<>(viewPageService.getOne(id), HttpStatus.OK); } /** * 指定视图页面分类 id,分页获取所有视图页面 * * @param page 页 * @param rows 每页显示数量 * @param viewPageCategoryId 视图页面分类 * @return ResponseEntity> */ @OperationLog(value = "指定视图页面分类 id,分页获取所有视图页面", type = OperationLogType.API) @PreAuthorize("hasRole('" + SYSTEM_ADMIN + "') OR hasAuthority('" + VIEW_PAGE + "/PAGE_ALL_BY_VIEW_PAGE_CATEGORY_ID')") @GetMapping(value = "/page_all_by_view_page_category_id") public ResponseEntity> pageAllByViewPageCategoryId(@RequestParam Integer page, @RequestParam Integer rows, @RequestParam Long viewPageCategoryId, @RequestParam(required = false) Long roleId) { return new ResponseEntity<>(viewPageService.pageAllByViewPageCategoryId(page, rows, viewPageCategoryId, roleId), HttpStatus.OK); } } ================================================ FILE: src/main/java/com/godcheese/nimrod/user/controller/ApiCategoryController.java ================================================ package com.godcheese.nimrod.user.controller; import com.godcheese.nimrod.common.operationlog.OperationLog; import com.godcheese.nimrod.common.others.Common; import com.godcheese.nimrod.user.User; import org.springframework.security.access.prepost.PreAuthorize; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.RequestMapping; /** * @author godcheese [godcheese@outlook.com] * @date 2018-02-22 */ @Controller @RequestMapping(User.Page.API_CATEGORY) public class ApiCategoryController { @OperationLog(value = "新增") @PreAuthorize("isAuthenticated()") @RequestMapping("/add_dialog") public String addDialog() { return Common.trimSlash(User.Page.API_CATEGORY + "/add_dialog"); } @OperationLog(value = "编辑") @PreAuthorize("isAuthenticated()") @RequestMapping("/edit_dialog") public String editDialog() { return Common.trimSlash(User.Page.API_CATEGORY + "/edit_dialog"); } } ================================================ FILE: src/main/java/com/godcheese/nimrod/user/controller/ApiController.java ================================================ package com.godcheese.nimrod.user.controller; import com.godcheese.nimrod.common.others.Common; import com.godcheese.nimrod.user.User; import org.springframework.security.access.prepost.PreAuthorize; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.RequestMapping; import static com.godcheese.nimrod.common.security.SimpleUserDetailsServiceImpl.SYSTEM_ADMIN; /** * @author godcheese [godcheese@outlook.com] * @date 2018-02-22 */ @Controller @RequestMapping(User.Page.API) public class ApiController { @PreAuthorize("hasRole('" + SYSTEM_ADMIN + "') OR hasAuthority('/SYSTEM/API/LIST')") @RequestMapping("/list") public String list() { return Common.trimSlash(User.Page.API + "/list"); } @PreAuthorize("isAuthenticated()") @RequestMapping("/add_dialog") public String addDialog() { return Common.trimSlash(User.Page.API + "/add_dialog"); } @PreAuthorize("isAuthenticated()") @RequestMapping("/edit_dialog") public String editDialog() { return Common.trimSlash(User.Page.API + "/edit_dialog"); } } ================================================ FILE: src/main/java/com/godcheese/nimrod/user/controller/DepartmentController.java ================================================ package com.godcheese.nimrod.user.controller; import com.godcheese.nimrod.common.others.Common; import com.godcheese.nimrod.user.User; import org.springframework.security.access.prepost.PreAuthorize; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.RequestMapping; import static com.godcheese.nimrod.common.security.SimpleUserDetailsServiceImpl.SYSTEM_ADMIN; /** * @author godcheese [godcheese@outlook.com] * @date 2018-02-22 */ @Controller @RequestMapping(User.Page.DEPARTMENT) public class DepartmentController { @PreAuthorize("hasRole('" + SYSTEM_ADMIN + "') OR hasAuthority('/USER/DEPARTMENT/LIST')") @RequestMapping("/list") public String list() { return Common.trimSlash(User.Page.DEPARTMENT + "/list"); } @PreAuthorize("isAuthenticated()") @RequestMapping("/add_dialog") public String addDialog() { return Common.trimSlash(User.Page.DEPARTMENT + "/add_dialog"); } @PreAuthorize("isAuthenticated()") @RequestMapping("/edit_dialog") public String editDialog() { return Common.trimSlash(User.Page.DEPARTMENT + "/edit_dialog"); } } ================================================ FILE: src/main/java/com/godcheese/nimrod/user/controller/RoleAuthorityController.java ================================================ package com.godcheese.nimrod.user.controller; import com.godcheese.nimrod.common.others.Common; import com.godcheese.nimrod.user.User; import org.springframework.security.access.prepost.PreAuthorize; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.RequestMapping; import static com.godcheese.nimrod.common.security.SimpleUserDetailsServiceImpl.SYSTEM_ADMIN; /** * @author godcheese [godcheese@outlook.com] * @date 2018-02-22 */ @Controller @RequestMapping(User.Page.ROLE_AUTHORITY) public class RoleAuthorityController { @PreAuthorize("isAuthenticated()") @RequestMapping("/add_dialog") public String addDialog() { return Common.trimSlash(User.Page.ROLE_AUTHORITY + "/add_dialog"); } @PreAuthorize("isAuthenticated()") @RequestMapping("/edit_dialog") public String editDialog() { return Common.trimSlash(User.Page.ROLE_AUTHORITY + "/edit_dialog"); } @PreAuthorize("hasRole('" + SYSTEM_ADMIN + "') OR hasAuthority('/USER/ROLE_AUTHORITY/VIEW_PAG')") @RequestMapping("/view_page") public String viewPage() { return Common.trimSlash(User.Page.ROLE_AUTHORITY + "/view_page"); } @PreAuthorize("hasRole('" + SYSTEM_ADMIN + "') OR hasAuthority('/USER/ROLE_AUTHORITY/API')") @RequestMapping("/api") public String api() { return Common.trimSlash(User.Page.ROLE_AUTHORITY + "/api"); } } ================================================ FILE: src/main/java/com/godcheese/nimrod/user/controller/RoleController.java ================================================ package com.godcheese.nimrod.user.controller; import com.godcheese.nimrod.common.others.Common; import com.godcheese.nimrod.user.User; import org.springframework.security.access.prepost.PreAuthorize; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.RequestMapping; import static com.godcheese.nimrod.common.security.SimpleUserDetailsServiceImpl.SYSTEM_ADMIN; /** * @author godcheese [godcheese@outlook.com] * @date 2018-02-22 */ @Controller @RequestMapping(User.Page.ROLE) public class RoleController { @PreAuthorize("hasRole('" + SYSTEM_ADMIN + "') OR hasAuthority('/USER/ROLE/LIST')") @RequestMapping("/list") public String list() { return Common.trimSlash(User.Page.ROLE + "/list"); } @PreAuthorize("isAuthenticated()") @RequestMapping("/add_dialog") public String addDialog() { return Common.trimSlash(User.Page.ROLE + "/add_dialog"); } @PreAuthorize("isAuthenticated()") @RequestMapping("/edit_dialog") public String editDialog() { return Common.trimSlash(User.Page.ROLE + "/edit_dialog"); } } ================================================ FILE: src/main/java/com/godcheese/nimrod/user/controller/RoleViewMenuController.java ================================================ package com.godcheese.nimrod.user.controller; import com.godcheese.nimrod.common.others.Common; import com.godcheese.nimrod.user.User; import org.springframework.security.access.prepost.PreAuthorize; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.RequestMapping; import static com.godcheese.nimrod.common.security.SimpleUserDetailsServiceImpl.SYSTEM_ADMIN; /** * @author godcheese [godcheese@outlook.com] * @date 2018-02-22 */ @Controller @RequestMapping(User.Page.ROLE_VIEW_MENU) public class RoleViewMenuController { @PreAuthorize("hasRole('" + SYSTEM_ADMIN + "') OR hasAuthority('/USER/ROLE_VIEW_MENU/LIST')") @RequestMapping("/list") public String list() { return Common.trimSlash(User.Page.ROLE_VIEW_MENU + "/list"); } } ================================================ FILE: src/main/java/com/godcheese/nimrod/user/controller/UserController.java ================================================ package com.godcheese.nimrod.user.controller; import com.godcheese.nimrod.common.operationlog.OperationLog; import com.godcheese.nimrod.common.others.Common; import com.godcheese.nimrod.user.User; import org.springframework.security.access.prepost.PreAuthorize; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.RequestMapping; import static com.godcheese.nimrod.common.security.SimpleUserDetailsServiceImpl.SYSTEM_ADMIN; /** * @author godcheese [godcheese@outlook.com] * @date 2018-02-22 */ @Controller @RequestMapping(User.Page.USER) public class UserController { @OperationLog("登录页") @RequestMapping("/login") public String login() { return Common.trimSlash(User.Page.LOGIN); } @PreAuthorize("hasRole('" + SYSTEM_ADMIN + "') OR hasAuthority('/USER/LIST')") @RequestMapping("/list") public String user() { return Common.trimSlash(User.Page.USER + "/list"); } @PreAuthorize("isAuthenticated()") @RequestMapping("/add_dialog") public String addDialog() { return Common.trimSlash(User.Page.USER + "/add_dialog"); } @PreAuthorize("isAuthenticated()") @RequestMapping("/edit_dialog") public String editDialog() { return Common.trimSlash(User.Page.USER + "/edit_dialog"); } @PreAuthorize("isAuthenticated()") @RequestMapping("/change_avatar_dialog") public String changeAvatarDialog() { return Common.trimSlash(User.Page.USER + "/change_avatar_dialog"); } @PreAuthorize("isAuthenticated()") @RequestMapping("/change_email_dialog") public String changeEmailDialog() { return Common.trimSlash(User.Page.USER + "/change_email_dialog"); } @PreAuthorize("isAuthenticated()") @RequestMapping("/change_password_dialog") public String changePasswordDialog() { return Common.trimSlash(User.Page.USER + "/change_password_dialog"); } @PreAuthorize("isAuthenticated()") @RequestMapping("/profile") public String profile() { return Common.trimSlash(User.Page.USER + "/profile"); } } ================================================ FILE: src/main/java/com/godcheese/nimrod/user/controller/UserRoleController.java ================================================ package com.godcheese.nimrod.user.controller; import com.godcheese.nimrod.common.others.Common; import com.godcheese.nimrod.user.User; import org.springframework.security.access.prepost.PreAuthorize; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.RequestMapping; import static com.godcheese.nimrod.common.security.SimpleUserDetailsServiceImpl.SYSTEM_ADMIN; /** * @author godcheese [godcheese@outlook.com] * @date 2018-02-22 */ @Controller @RequestMapping(User.Page.USER_ROLE) public class UserRoleController { @PreAuthorize("hasRole('" + SYSTEM_ADMIN + "') OR hasAuthority('/USER/USER_ROLE/LIST')") @RequestMapping("/list") public String userRole() { return Common.trimSlash(User.Page.USER_ROLE + "/list"); } @PreAuthorize("isAuthenticated()") @RequestMapping("/add_dialog") public String addDialog() { return Common.trimSlash(User.Page.USER_ROLE + "/add_dialog"); } } ================================================ FILE: src/main/java/com/godcheese/nimrod/user/controller/ViewMenuCategoryController.java ================================================ package com.godcheese.nimrod.user.controller; import com.godcheese.nimrod.common.others.Common; import com.godcheese.nimrod.user.User; import org.springframework.security.access.prepost.PreAuthorize; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.RequestMapping; /** * @author godcheese [godcheese@outlook.com] * @date 2018-02-22 */ @Controller @RequestMapping(User.Page.VIEW_MENU_CATEGORY) public class ViewMenuCategoryController { @PreAuthorize("isAuthenticated()") @RequestMapping("/add_dialog") public String addDialog() { return Common.trimSlash(User.Page.VIEW_MENU_CATEGORY + "/add_dialog"); } @PreAuthorize("isAuthenticated()") @RequestMapping("/edit_dialog") public String editDialog() { return Common.trimSlash(User.Page.VIEW_MENU_CATEGORY + "/edit_dialog"); } } ================================================ FILE: src/main/java/com/godcheese/nimrod/user/controller/ViewMenuController.java ================================================ package com.godcheese.nimrod.user.controller; import com.godcheese.nimrod.common.others.Common; import com.godcheese.nimrod.user.User; import org.springframework.security.access.prepost.PreAuthorize; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.RequestMapping; import static com.godcheese.nimrod.common.security.SimpleUserDetailsServiceImpl.SYSTEM_ADMIN; /** * @author godcheese [godcheese@outlook.com] * @date 2018-02-22 */ @Controller @RequestMapping(User.Page.VIEW_MENU) public class ViewMenuController { @PreAuthorize("hasRole('" + SYSTEM_ADMIN + "') OR hasAuthority('/USER/VIEW_MENU/LIST')") @RequestMapping("/list") public String list() { return Common.trimSlash(User.Page.VIEW_MENU + "/list"); } @PreAuthorize("isAuthenticated()") @RequestMapping("/add_dialog") public String addDialog() { return Common.trimSlash(User.Page.VIEW_MENU + "/add_dialog"); } @PreAuthorize("isAuthenticated()") @RequestMapping("/edit_dialog") public String editDialog() { return Common.trimSlash(User.Page.VIEW_MENU + "/edit_dialog"); } } ================================================ FILE: src/main/java/com/godcheese/nimrod/user/controller/ViewPageApiController.java ================================================ package com.godcheese.nimrod.user.controller; import com.godcheese.nimrod.common.others.Common; import com.godcheese.nimrod.user.User; import org.springframework.security.access.prepost.PreAuthorize; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.RequestMapping; import static com.godcheese.nimrod.common.security.SimpleUserDetailsServiceImpl.SYSTEM_ADMIN; /** * @author godcheese [godcheese@outlook.com] * @date 2018-02-22 */ @Controller @RequestMapping(User.Page.VIEW_PAGE_API) public class ViewPageApiController { @PreAuthorize("hasRole('" + SYSTEM_ADMIN + "') OR hasAuthority('/SYSTEM/VIEW_PAGE_API/LIST')") @RequestMapping("/list") public String list() { return Common.trimSlash(User.Page.VIEW_PAGE_API + "/list"); } } ================================================ FILE: src/main/java/com/godcheese/nimrod/user/controller/ViewPageCategoryController.java ================================================ package com.godcheese.nimrod.user.controller; import com.godcheese.nimrod.common.others.Common; import com.godcheese.nimrod.user.User; import org.springframework.security.access.prepost.PreAuthorize; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.RequestMapping; /** * @author godcheese [godcheese@outlook.com] * @date 2018-02-22 */ @Controller @RequestMapping(User.Page.VIEW_PAGE_CATEGORY) public class ViewPageCategoryController { @PreAuthorize("isAuthenticated()") @RequestMapping("/add_dialog") public String addDialog() { return Common.trimSlash(User.Page.VIEW_PAGE_CATEGORY + "/add_dialog"); } @PreAuthorize("isAuthenticated()") @RequestMapping("/edit_dialog") public String editDialog() { return Common.trimSlash(User.Page.VIEW_PAGE_CATEGORY + "/edit_dialog"); } } ================================================ FILE: src/main/java/com/godcheese/nimrod/user/controller/ViewPageComponentApiController.java ================================================ package com.godcheese.nimrod.user.controller; import com.godcheese.nimrod.common.others.Common; import com.godcheese.nimrod.user.User; import org.springframework.security.access.prepost.PreAuthorize; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.RequestMapping; import static com.godcheese.nimrod.common.security.SimpleUserDetailsServiceImpl.SYSTEM_ADMIN; /** * @author godcheese [godcheese@outlook.com] * @date 2018-02-22 */ @Controller @RequestMapping(User.Page.VIEW_PAGE_COMPONENT_API) public class ViewPageComponentApiController { @PreAuthorize("hasRole('" + SYSTEM_ADMIN + "') OR hasAuthority('/SYSTEM/VIEW_PAGE_COMPONENT_API/LIST')") @RequestMapping("/list") public String list() { return Common.trimSlash(User.Page.VIEW_PAGE_COMPONENT_API + "/list"); } } ================================================ FILE: src/main/java/com/godcheese/nimrod/user/controller/ViewPageComponentController.java ================================================ package com.godcheese.nimrod.user.controller; import com.godcheese.nimrod.common.others.Common; import com.godcheese.nimrod.user.User; import org.springframework.security.access.prepost.PreAuthorize; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.RequestMapping; import static com.godcheese.nimrod.common.security.SimpleUserDetailsServiceImpl.SYSTEM_ADMIN; /** * @author godcheese [godcheese@outlook.com] * @date 2018-02-22 */ @Controller @RequestMapping(User.Page.VIEW_PAGE_COMPONENT) public class ViewPageComponentController { @PreAuthorize("hasRole('" + SYSTEM_ADMIN + "') OR hasAuthority('/SYSTEM/VIEW_PAGE_COMPONENT/LIST')") @RequestMapping("/list") public String list() { return Common.trimSlash(User.Page.VIEW_PAGE_COMPONENT + "/list"); } @RequestMapping("/add_dialog") public String addDialog() { return Common.trimSlash(User.Page.VIEW_PAGE_COMPONENT + "/add_dialog"); } @RequestMapping("/edit_dialog") public String editDialog() { return Common.trimSlash(User.Page.VIEW_PAGE_COMPONENT + "/edit_dialog"); } } ================================================ FILE: src/main/java/com/godcheese/nimrod/user/controller/ViewPageController.java ================================================ package com.godcheese.nimrod.user.controller; import com.godcheese.nimrod.common.others.Common; import com.godcheese.nimrod.user.User; import org.springframework.security.access.prepost.PreAuthorize; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.RequestMapping; import static com.godcheese.nimrod.common.security.SimpleUserDetailsServiceImpl.SYSTEM_ADMIN; /** * @author godcheese [godcheese@outlook.com] * @date 2018-02-22 */ @Controller @RequestMapping(User.Page.VIEW_PAGE) public class ViewPageController { @PreAuthorize("hasRole('" + SYSTEM_ADMIN + "') OR hasAuthority('/SYSTEM/VIEW_PAGE/LIST')") @RequestMapping("/list") public String list() { return Common.trimSlash(User.Page.VIEW_PAGE + "/list"); } @RequestMapping("/add_dialog") public String addDialog() { return Common.trimSlash(User.Page.VIEW_PAGE + "/add_dialog"); } @RequestMapping("/edit_dialog") public String editDialog() { return Common.trimSlash(User.Page.VIEW_PAGE + "/edit_dialog"); } } ================================================ FILE: src/main/java/com/godcheese/nimrod/user/entity/ApiCategoryEntity.java ================================================ package com.godcheese.nimrod.user.entity; import com.godcheese.nimrod.common.easyui.TreeGridAdapter; import java.io.Serializable; import java.util.Date; /** * @author godcheese [godcheese@outlook.com] * @date 2018-02-22 */ public class ApiCategoryEntity extends TreeGridAdapter implements Serializable { private static final long serialVersionUID = -4351689880748496938L; /** * id */ private Long id; /** * 分类名称 */ private String name; /** * 父级分类 id */ private Long parentId; /** * 排序 */ private Long sort; /** * 备注 */ private String remark; /** * 更新时间 */ private Date gmtModified; /** * 创建时间 */ private Date gmtCreated; public Long getId() { return id; } public void setId(Long id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } public Long getParentId() { return parentId; } public void setParentId(Long parentId) { this.parentId = parentId; } public Long getSort() { return sort; } public void setSort(Long sort) { this.sort = sort; } public String getRemark() { return remark; } public void setRemark(String remark) { this.remark = remark; } public Date getGmtModified() { return gmtModified; } public void setGmtModified(Date gmtModified) { this.gmtModified = gmtModified; } public Date getGmtCreated() { return gmtCreated; } public void setGmtCreated(Date gmtCreated) { this.gmtCreated = gmtCreated; } } ================================================ FILE: src/main/java/com/godcheese/nimrod/user/entity/ApiEntity.java ================================================ package com.godcheese.nimrod.user.entity; import com.godcheese.nimrod.common.others.BaseEntityAdapter; import java.io.Serializable; import java.util.Date; /** * @author godcheese [godcheese@outlook.com] * @date 2018-02-22 */ public class ApiEntity extends BaseEntityAdapter implements Serializable { private static final long serialVersionUID = 820249208575877774L; /** * id */ private Long id; /** * api 名称 */ private String name; /** * 请求地址(url) */ private String url; /** * 权限(authority) */ private String authority; /** * API 分类 id */ private Long apiCategoryId; /** * 排序 */ private Long sort; /** * 备注 */ private String remark; /** * 更新时间 */ private Date gmtModified; /** * 创建时间 */ private Date gmtCreated; public Long getId() { return id; } public void setId(Long id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } public String getUrl() { return url; } public void setUrl(String url) { this.url = url; } public String getAuthority() { return authority; } public void setAuthority(String authority) { this.authority = authority; } public Long getApiCategoryId() { return apiCategoryId; } public void setApiCategoryId(Long apiCategoryId) { this.apiCategoryId = apiCategoryId; } public Long getSort() { return sort; } public void setSort(Long sort) { this.sort = sort; } public String getRemark() { return remark; } public void setRemark(String remark) { this.remark = remark; } public Date getGmtModified() { return gmtModified; } public void setGmtModified(Date gmtModified) { this.gmtModified = gmtModified; } public Date getGmtCreated() { return gmtCreated; } public void setGmtCreated(Date gmtCreated) { this.gmtCreated = gmtCreated; } } ================================================ FILE: src/main/java/com/godcheese/nimrod/user/entity/DepartmentEntity.java ================================================ package com.godcheese.nimrod.user.entity; import java.io.Serializable; import java.util.Date; /** * @author godcheese [godcheese@outlook.com] * @date 2018-02-22 */ public class DepartmentEntity implements Serializable { private static final long serialVersionUID = 2255810820162075332L; /** * id */ private Long id; /** * 部门名称 */ private String name; /** * 父级部门 id */ private Long parentId; /** * 备注 */ private String remark; /** * 更新时间 */ private Date gmtModified; /** * 创建时间 */ private Date gmtCreated; public Long getId() { return id; } public void setId(Long id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } public Long getParentId() { return parentId; } public void setParentId(Long parentId) { this.parentId = parentId; } public String getRemark() { return remark; } public void setRemark(String remark) { this.remark = remark; } public Date getGmtModified() { return gmtModified; } public void setGmtModified(Date gmtModified) { this.gmtModified = gmtModified; } public Date getGmtCreated() { return gmtCreated; } public void setGmtCreated(Date gmtCreated) { this.gmtCreated = gmtCreated; } } ================================================ FILE: src/main/java/com/godcheese/nimrod/user/entity/RoleAuthorityEntity.java ================================================ package com.godcheese.nimrod.user.entity; import java.io.Serializable; /** * @author godcheese [godcheese@outlook.com] * @date 2018-02-22 */ public class RoleAuthorityEntity implements Serializable { private static final long serialVersionUID = -2620819100513212127L; /** * id */ private Long id; /** * 角色 id */ private Long roleId; /** * 权限(authority) */ private String authority; public Long getId() { return id; } public void setId(Long id) { this.id = id; } public Long getRoleId() { return roleId; } public void setRoleId(Long roleId) { this.roleId = roleId; } public String getAuthority() { return authority; } public void setAuthority(String authority) { this.authority = authority; } } ================================================ FILE: src/main/java/com/godcheese/nimrod/user/entity/RoleEntity.java ================================================ package com.godcheese.nimrod.user.entity; import java.io.Serializable; import java.util.Date; /** * @author godcheese [godcheese@outlook.com] * @date 2018-02-22 */ public class RoleEntity implements Serializable { private static final long serialVersionUID = -5287519220646696022L; /** * id */ private Long id; /** * 角色名称 */ private String name; /** * 角色值 */ private String value; /** * 备注 */ private String remark; /** * 更新时间 */ private Date gmtModified; /** * 创建时间 */ private Date gmtCreated; public Long getId() { return id; } public void setId(Long id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } public String getValue() { return value; } public void setValue(String value) { this.value = value; } public String getRemark() { return remark; } public void setRemark(String remark) { this.remark = remark; } public Date getGmtModified() { return gmtModified; } public void setGmtModified(Date gmtModified) { this.gmtModified = gmtModified; } public Date getGmtCreated() { return gmtCreated; } public void setGmtCreated(Date gmtCreated) { this.gmtCreated = gmtCreated; } } ================================================ FILE: src/main/java/com/godcheese/nimrod/user/entity/RoleViewMenuCategoryEntity.java ================================================ package com.godcheese.nimrod.user.entity; import java.io.Serializable; /** * @author godcheese [godcheese@outlook.com] * @date 2018-02-22 */ public class RoleViewMenuCategoryEntity implements Serializable { private static final long serialVersionUID = -6845129368544578850L; /** * id */ private Long id; /** * 角色 id */ private Long roleId; /** * 视图菜单分类 id */ private String viewMenuCategoryId; public Long getId() { return id; } public void setId(Long id) { this.id = id; } public Long getRoleId() { return roleId; } public void setRoleId(Long roleId) { this.roleId = roleId; } public String getViewMenuCategoryId() { return viewMenuCategoryId; } public void setViewMenuCategoryId(String viewMenuCategoryId) { this.viewMenuCategoryId = viewMenuCategoryId; } } ================================================ FILE: src/main/java/com/godcheese/nimrod/user/entity/RoleViewMenuEntity.java ================================================ package com.godcheese.nimrod.user.entity; import java.io.Serializable; /** * @author godcheese [godcheese@outlook.com] * @date 2018-02-22 */ public class RoleViewMenuEntity implements Serializable { private static final long serialVersionUID = 4539087168395191315L; /** * id */ private Long id; /** * 角色 id */ private Long roleId; /** * 视图菜单 id */ private String viewMenuId; public Long getId() { return id; } public void setId(Long id) { this.id = id; } public Long getRoleId() { return roleId; } public void setRoleId(Long roleId) { this.roleId = roleId; } public String getViewMenuId() { return viewMenuId; } public void setViewMenuId(String viewMenuId) { this.viewMenuId = viewMenuId; } } ================================================ FILE: src/main/java/com/godcheese/nimrod/user/entity/UserEntity.java ================================================ package com.godcheese.nimrod.user.entity; import com.godcheese.nimrod.common.others.BaseEntityAdapter; import java.io.Serializable; import java.util.Date; import java.util.List; /** * @author godcheese [godcheese@outlook.com] * @date 2018-02-22 */ public class UserEntity extends BaseEntityAdapter implements Serializable, Cloneable { private static final long serialVersionUID = -4809374154449809L; /** * id */ private Long id; /** * 用户名 */ private String username; /** * 密码 */ private String password; /** * 头像 */ private String avatar; /** * 电子邮箱 */ private String email; /** * 电子邮箱是否已验证 */ private Integer emailIsVerified; /** * 所在部门 id */ private Long departmentId; /** * 所在部门 */ private List department; /** * 是否启用(0=否,1=是,默认=0) */ private Integer enabled; /** * 备注 */ private String remark; private Date gmtPasswordLastModified; private Date gmtLastLogin; /** * 删除时间 */ private Date gmtDeleted; /** * 更新时间 */ private Date gmtModified; /** * 创建时间 */ private Date gmtCreated; public Long getId() { return id; } public void setId(Long id) { this.id = id; } public String getPassword() { return password; } public void setPassword(String password) { this.password = password; } @Override public String getUsername() { return username; } @Override public void setUsername(String username) { this.username = username; } public String getAvatar() { return avatar; } public void setAvatar(String avatar) { this.avatar = avatar; } public String getEmail() { return email; } public void setEmail(String email) { this.email = email; } public Integer getEmailIsVerified() { return emailIsVerified; } public void setEmailIsVerified(Integer emailIsVerified) { this.emailIsVerified = emailIsVerified; } public Long getDepartmentId() { return departmentId; } public void setDepartmentId(Long departmentId) { this.departmentId = departmentId; } public List getDepartment() { return department; } public void setDepartment(List department) { this.department = department; } public Integer getEnabled() { return enabled; } public void setEnabled(Integer enabled) { this.enabled = enabled; } public String getRemark() { return remark; } public void setRemark(String remark) { this.remark = remark; } public Date getGmtPasswordLastModified() { return gmtPasswordLastModified; } public void setGmtPasswordLastModified(Date gmtPasswordLastModified) { this.gmtPasswordLastModified = gmtPasswordLastModified; } public Date getGmtLastLogin() { return gmtLastLogin; } public void setGmtLastLogin(Date gmtLastLogin) { this.gmtLastLogin = gmtLastLogin; } public Date getGmtDeleted() { return gmtDeleted; } public void setGmtDeleted(Date gmtDeleted) { this.gmtDeleted = gmtDeleted; } public Date getGmtModified() { return gmtModified; } public void setGmtModified(Date gmtModified) { this.gmtModified = gmtModified; } public Date getGmtCreated() { return gmtCreated; } public void setGmtCreated(Date gmtCreated) { this.gmtCreated = gmtCreated; } @Override public String toString() { return "UserEntity{" + "id=" + id + ", username='" + username + '\'' + ", password='" + password + '\'' + ", avatar='" + avatar + '\'' + ", email='" + email + '\'' + ", emailIsVerified=" + emailIsVerified + ", departmentId=" + departmentId + ", department=" + department + ", enabled=" + enabled + ", remark='" + remark + '\'' + ", gmtPasswordLastModified=" + gmtPasswordLastModified + ", gmtLastLogin=" + gmtLastLogin + ", gmtDeleted=" + gmtDeleted + ", gmtModified=" + gmtModified + ", gmtCreated=" + gmtCreated + '}'; } } ================================================ FILE: src/main/java/com/godcheese/nimrod/user/entity/UserRoleEntity.java ================================================ package com.godcheese.nimrod.user.entity; import java.io.Serializable; /** * @author godcheese [godcheese@outlook.com] * @date 2018-02-22 */ public class UserRoleEntity implements Serializable { private static final long serialVersionUID = 6510813723513038865L; /** * id */ private Long id; /** * 用户 id */ private Long userId; /** * 角色 id */ private Long roleId; public Long getId() { return id; } public void setId(Long id) { this.id = id; } public Long getUserId() { return userId; } public void setUserId(Long userId) { this.userId = userId; } public Long getRoleId() { return roleId; } public void setRoleId(Long roleId) { this.roleId = roleId; } } ================================================ FILE: src/main/java/com/godcheese/nimrod/user/entity/UserVerifyCodeEntity.java ================================================ package com.godcheese.nimrod.user.entity; import java.io.Serializable; import java.util.Date; /** * @author godcheese [godcheese@outlook.com] * @date 2018-02-22 */ public class UserVerifyCodeEntity implements Serializable { private static final long serialVersionUID = -7053740452414479328L; /** * id */ private Long id; /** * 用户 id */ private Long userId; /** * 用户绑定的电子邮箱或手机号码 */ private String verifyFrom; /** * 电子邮箱或手机号码验证码 */ private String verifyCode; /** * 过期时间 */ private Date gmtExpires; /** * 创建时间 */ private Date gmtCreated; public Long getId() { return id; } public void setId(Long id) { this.id = id; } public Long getUserId() { return userId; } public void setUserId(Long userId) { this.userId = userId; } public String getVerifyFrom() { return verifyFrom; } public void setVerifyFrom(String verifyFrom) { this.verifyFrom = verifyFrom; } public String getVerifyCode() { return verifyCode; } public void setVerifyCode(String verifyCode) { this.verifyCode = verifyCode; } public Date getGmtExpires() { return gmtExpires; } public void setGmtExpires(Date gmtExpires) { this.gmtExpires = gmtExpires; } public Date getGmtCreated() { return gmtCreated; } public void setGmtCreated(Date gmtCreated) { this.gmtCreated = gmtCreated; } } ================================================ FILE: src/main/java/com/godcheese/nimrod/user/entity/ViewMenuCategoryEntity.java ================================================ package com.godcheese.nimrod.user.entity; import com.godcheese.nimrod.common.easyui.TreeGridAdapter; import java.io.Serializable; import java.util.Date; /** * @author godcheese [godcheese@outlook.com] * @date 2018-02-22 */ public class ViewMenuCategoryEntity extends TreeGridAdapter implements Serializable { private static final long serialVersionUID = -1331974479094679699L; /** * id */ private Long id; /** * 分类名称 */ private String name; /** * 图标(icon) */ private String icon; /** * 父级分类 id */ private Long parentId; /** * 排序 */ private Long sort; /** * 备注 */ private String remark; /** * 更新时间 */ private Date gmtModified; /** * 创建时间 */ private Date gmtCreated; public Long getId() { return id; } public void setId(Long id) { this.id = id; } 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 Long getParentId() { return parentId; } public void setParentId(Long parentId) { this.parentId = parentId; } public Long getSort() { return sort; } public void setSort(Long sort) { this.sort = sort; } public String getRemark() { return remark; } public void setRemark(String remark) { this.remark = remark; } public Date getGmtModified() { return gmtModified; } public void setGmtModified(Date gmtModified) { this.gmtModified = gmtModified; } public Date getGmtCreated() { return gmtCreated; } public void setGmtCreated(Date gmtCreated) { this.gmtCreated = gmtCreated; } } ================================================ FILE: src/main/java/com/godcheese/nimrod/user/entity/ViewMenuEntity.java ================================================ package com.godcheese.nimrod.user.entity; import com.godcheese.nimrod.common.others.BaseEntityAdapter; import java.io.Serializable; import java.util.Date; /** * @author godcheese [godcheese@outlook.com] * @date 2018-02-22 */ public class ViewMenuEntity extends BaseEntityAdapter implements Serializable { private static final long serialVersionUID = 5133319566323006861L; /** * id */ private Long id; /** * 菜单名称 */ private String name; /** * 图标(icon) */ private String icon; /** * 请求地址(url) */ private String url; /** * 菜单分类 id */ private Long viewMenuCategoryId; /** * 排序 */ private Long sort; /** * 备注 */ private String remark; /** * 更新时间 */ private Date gmtModified; /** * 创建时间 */ private Date gmtCreated; public Long getId() { return id; } public void setId(Long id) { this.id = id; } 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 getUrl() { return url; } public void setUrl(String url) { this.url = url; } public Long getViewMenuCategoryId() { return viewMenuCategoryId; } public void setViewMenuCategoryId(Long viewMenuCategoryId) { this.viewMenuCategoryId = viewMenuCategoryId; } public Long getSort() { return sort; } public void setSort(Long sort) { this.sort = sort; } public String getRemark() { return remark; } public void setRemark(String remark) { this.remark = remark; } public Date getGmtModified() { return gmtModified; } public void setGmtModified(Date gmtModified) { this.gmtModified = gmtModified; } public Date getGmtCreated() { return gmtCreated; } public void setGmtCreated(Date gmtCreated) { this.gmtCreated = gmtCreated; } @Override public String toString() { return "ViewMenuEntity{" + "id=" + id + ", name='" + name + '\'' + ", icon='" + icon + '\'' + ", url='" + url + '\'' + ", viewMenuCategoryId=" + viewMenuCategoryId + ", sort=" + sort + ", remark='" + remark + '\'' + ", gmtModified=" + gmtModified + ", gmtCreated=" + gmtCreated + '}'; } } ================================================ FILE: src/main/java/com/godcheese/nimrod/user/entity/ViewPageApiEntity.java ================================================ package com.godcheese.nimrod.user.entity; import java.io.Serializable; /** * @author godcheese [godcheese@outlook.com] * @date 2018-02-22 */ public class ViewPageApiEntity implements Serializable { private static final long serialVersionUID = 5514010345109428863L; private Long id; /** * 视图页面 id */ private Long viewPageId; /** * API id */ private Long apiId; public Long getId() { return id; } public void setId(Long id) { this.id = id; } public Long getViewPageId() { return viewPageId; } public void setViewPageId(Long viewPageId) { this.viewPageId = viewPageId; } public Long getApiId() { return apiId; } public void setApiId(Long apiId) { this.apiId = apiId; } } ================================================ FILE: src/main/java/com/godcheese/nimrod/user/entity/ViewPageCategoryEntity.java ================================================ package com.godcheese.nimrod.user.entity; import com.godcheese.nimrod.common.easyui.TreeGridAdapter; import java.io.Serializable; import java.util.Date; /** * @author godcheese [godcheese@outlook.com] * @date 2018-02-22 */ public class ViewPageCategoryEntity extends TreeGridAdapter implements Serializable { private static final long serialVersionUID = -1851793867270727714L; /** * id */ private Long id; /** * 分类名称 */ private String name; /** * 父级分类 id */ private Long parentId; /** * 排序 */ private Long sort; /** * 备注 */ private String remark; /** * 更新时间 */ private Date gmtModified; /** * 创建时间 */ private Date gmtCreated; public Long getId() { return id; } public void setId(Long id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } public Long getParentId() { return parentId; } public void setParentId(Long parentId) { this.parentId = parentId; } public Long getSort() { return sort; } public void setSort(Long sort) { this.sort = sort; } public String getRemark() { return remark; } public void setRemark(String remark) { this.remark = remark; } public Date getGmtModified() { return gmtModified; } public void setGmtModified(Date gmtModified) { this.gmtModified = gmtModified; } public Date getGmtCreated() { return gmtCreated; } public void setGmtCreated(Date gmtCreated) { this.gmtCreated = gmtCreated; } } ================================================ FILE: src/main/java/com/godcheese/nimrod/user/entity/ViewPageComponentApiEntity.java ================================================ package com.godcheese.nimrod.user.entity; import java.io.Serializable; /** * @author godcheese [godcheese@outlook.com] * @date 2018-02-22 */ public class ViewPageComponentApiEntity implements Serializable { private static final long serialVersionUID = 9177243332779548374L; private Long id; /** * 视图页面组件 id */ private Long viewPageComponentId; /** * API id */ private Long apiId; public Long getId() { return id; } public void setId(Long id) { this.id = id; } public Long getViewPageComponentId() { return viewPageComponentId; } public void setViewPageComponentId(Long viewPageComponentId) { this.viewPageComponentId = viewPageComponentId; } public Long getApiId() { return apiId; } public void setApiId(Long apiId) { this.apiId = apiId; } } ================================================ FILE: src/main/java/com/godcheese/nimrod/user/entity/ViewPageComponentEntity.java ================================================ package com.godcheese.nimrod.user.entity; import com.godcheese.nimrod.common.others.BaseEntityAdapter; import java.io.Serializable; import java.util.Date; /** * @author godcheese [godcheese@outlook.com] * @date 2018-02-22 */ public class ViewPageComponentEntity extends BaseEntityAdapter implements Serializable { private static final long serialVersionUID = -5628097399101917617L; /** * id */ private Long id; /** * 组件分类 id */ private Long viewPageComponentType; /** * 组件名称 */ private String name; /** * 权限(authority) */ private String authority; /** * 视图页面 id */ private Long viewPageId; /** * 排序 */ private Long sort; /** * 备注 */ private String remark; /** * 更新时间 */ private Date gmtModified; /** * 创建时间 */ private Date gmtCreated; public Long getId() { return id; } public void setId(Long id) { this.id = id; } public Long getViewPageComponentType() { return viewPageComponentType; } public void setViewPageComponentType(Long viewPageComponentType) { this.viewPageComponentType = viewPageComponentType; } public String getName() { return name; } public void setName(String name) { this.name = name; } public String getAuthority() { return authority; } public void setAuthority(String authority) { this.authority = authority; } public Long getViewPageId() { return viewPageId; } public void setViewPageId(Long viewPageId) { this.viewPageId = viewPageId; } public Long getSort() { return sort; } public void setSort(Long sort) { this.sort = sort; } public String getRemark() { return remark; } public void setRemark(String remark) { this.remark = remark; } public Date getGmtModified() { return gmtModified; } public void setGmtModified(Date gmtModified) { this.gmtModified = gmtModified; } public Date getGmtCreated() { return gmtCreated; } public void setGmtCreated(Date gmtCreated) { this.gmtCreated = gmtCreated; } } ================================================ FILE: src/main/java/com/godcheese/nimrod/user/entity/ViewPageEntity.java ================================================ package com.godcheese.nimrod.user.entity; import com.godcheese.nimrod.common.others.BaseEntityAdapter; import java.io.Serializable; import java.util.Date; /** * @author godcheese [godcheese@outlook.com] * @date 2018-02-22 */ public class ViewPageEntity extends BaseEntityAdapter implements Serializable { private static final long serialVersionUID = -8255954879287469862L; /** * id */ private Long id; /** * 页面名称 */ private String name; /** * 请求地址(url) */ private String url; /** * 权限(authority) */ private String authority; /** * 视图页面分类 id */ private Long viewPageCategoryId; /** * 排序 */ private Long sort; /** * 备注 */ private String remark; /** * 更新时间 */ private Date gmtModified; /** * 创建时间 */ private Date gmtCreated; public Long getId() { return id; } public void setId(Long id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } public String getUrl() { return url; } public void setUrl(String url) { this.url = url; } public String getAuthority() { return authority; } public void setAuthority(String authority) { this.authority = authority; } public Long getViewPageCategoryId() { return viewPageCategoryId; } public void setViewPageCategoryId(Long viewPageCategoryId) { this.viewPageCategoryId = viewPageCategoryId; } public Long getSort() { return sort; } public void setSort(Long sort) { this.sort = sort; } public String getRemark() { return remark; } public void setRemark(String remark) { this.remark = remark; } public Date getGmtModified() { return gmtModified; } public void setGmtModified(Date gmtModified) { this.gmtModified = gmtModified; } public Date getGmtCreated() { return gmtCreated; } public void setGmtCreated(Date gmtCreated) { this.gmtCreated = gmtCreated; } } ================================================ FILE: src/main/java/com/godcheese/nimrod/user/mapper/ApiCategoryMapper.java ================================================ package com.godcheese.nimrod.user.mapper; import com.godcheese.nimrod.user.entity.ApiCategoryEntity; import com.godcheese.tile.mybatis.CrudMapper; import org.apache.ibatis.annotations.Mapper; import org.apache.ibatis.annotations.Param; import org.springframework.stereotype.Component; import java.util.List; /** * @author godcheese [godcheese@outlook.com] * @date 2018-02-22 */ @Component("apiCategoryMapper") @Mapper public interface ApiCategoryMapper extends CrudMapper { /** * 获取所有父级 id 为 null 的 API 分类 * * @return List */ List listAllByParentIdIsNull(); /** * 指定父级 API 分类 id,获取所有 API 分类 * * @param parentId 父级 API 分类 id * @return List */ List listAllByParentId(@Param("parentId") Long parentId); /** * 指定父级 API 分类 id,获取所有 API 分类 * * @param parentId 父级 API 分类 id * @return ApiCategoryEntity */ ApiCategoryEntity getOneByParentId(@Param("parentId") Long parentId); } ================================================ FILE: src/main/java/com/godcheese/nimrod/user/mapper/ApiCategoryMapper.xml ================================================ `api_category` `id`, `name`, `parent_id`, `sort`, `remark`, `gmt_modified`, `gmt_created` insert into (`id`, `name`, `parent_id`, `sort`, `remark`, `gmt_modified`, `gmt_created`) values (#{id}, #{name}, #{parentId}, #{sort}, #{remark}, #{gmtModified}, #{gmtCreated}) update set `name` = #{name}, `parent_id` = #{parentId}, `sort` = #{sort}, `remark` = #{remark}, `gmt_modified` = #{gmtModified} where `id`= #{id} delete from where `id` = #{id} delete from where `id` in ( #{item} ) ================================================ FILE: src/main/java/com/godcheese/nimrod/user/mapper/ApiMapper.java ================================================ package com.godcheese.nimrod.user.mapper; import com.godcheese.nimrod.user.entity.ApiEntity; import com.godcheese.tile.mybatis.CrudMapper; import com.github.pagehelper.Page; import org.apache.ibatis.annotations.Mapper; import org.apache.ibatis.annotations.Param; import org.springframework.stereotype.Component; import java.util.List; /** * @author godcheese [godcheese@outlook.com] * @date 2018-02-22 */ @Component("apiMapper") @Mapper public interface ApiMapper extends CrudMapper { /** * 指定 API 分类 id,获取所有 API * * @param apiCategoryId API 分类 id * @return ApiEntity */ ApiEntity getOneByApiCategoryId(@Param("apiCategoryId") Long apiCategoryId); /** * 指定 API 分类 id,分页获取所有 API * * @param apiCategoryId API 分类 id * @return List */ Page pageAllByApiCategoryId(@Param("apiCategoryId") Long apiCategoryId); /** * 指定 authority,获取所有 API * * @param authority authority * @return ApiEntity */ ApiEntity getOneByAuthority(@Param("authority") String authority); /** * 指定 API 分类 id list,分页获取所有 API * * @param apiCategoryIdList API 分类 id list * @return Page */ Page pageAllByApiCategoryIdList(@Param("apiCategoryIdList") List apiCategoryIdList); } ================================================ FILE: src/main/java/com/godcheese/nimrod/user/mapper/ApiMapper.xml ================================================ `api` `id`, `name`, `url`, `authority`, `api_category_id`, `sort`, `remark`, `gmt_modified`, `gmt_created` insert into (`id`, `name`, `url`, `authority`, `api_category_id`, `sort`, `remark`, `gmt_modified`, `gmt_created`) values (#{id}, #{name}, #{url}, #{authority}, #{apiCategoryId}, #{sort}, #{remark}, #{gmtCreated}, #{gmtModified}) update set `name` = #{name}, `url` = #{url}, `authority` = #{authority}, `api_category_id` = #{apiCategoryId}, `sort` = #{sort}, `remark` = #{remark}, `gmt_created` = #{gmtCreated}, `gmt_modified` = #{gmtModified} where `id`= #{id} delete from where `id` = #{id} delete from where `id` in ( #{item} ) ================================================ FILE: src/main/java/com/godcheese/nimrod/user/mapper/DepartmentMapper.java ================================================ package com.godcheese.nimrod.user.mapper; import com.godcheese.nimrod.user.entity.DepartmentEntity; import com.godcheese.tile.mybatis.CrudMapper; import org.apache.ibatis.annotations.Mapper; import org.apache.ibatis.annotations.Param; import org.springframework.stereotype.Component; import java.util.List; /** * @author godcheese [godcheese@outlook.com] * @date 2018-02-22 */ @Component("departmentMapper") @Mapper public interface DepartmentMapper extends CrudMapper { /** * 获取所有父级 id 为 null 的部门 * * @return List */ List listAllParentIdIsNull(); /** * 指定父级部门 id,获取所有部门 * * @param parentId 父级部门 id * @return List */ List listAllByParentId(@Param("parentId") Long parentId); /** * 指定父级部门 id,获取部门 * * @param parentId 父级部门 id * @return DepartmentEntity */ DepartmentEntity getOneByParentId(@Param("parentId") Long parentId); } ================================================ FILE: src/main/java/com/godcheese/nimrod/user/mapper/DepartmentMapper.xml ================================================ `department` `id`, `name`, `parent_id`, `remark`, `gmt_modified`, `gmt_created` insert into () values (#{id}, #{name}, #{parentId}, #{remark}, #{gmtModified}, #{gmtCreated}) update set `name` = #{name}, `parent_id` = #{parentId}, `remark` = #{remark}, `gmt_modified` = #{gmtModified} where `id`= #{id} delete from where `id` = #{id} delete from where `id` in ( #{item} ) ================================================ FILE: src/main/java/com/godcheese/nimrod/user/mapper/RoleAuthorityMapper.java ================================================ package com.godcheese.nimrod.user.mapper; import com.godcheese.nimrod.user.entity.RoleAuthorityEntity; import com.godcheese.tile.mybatis.CrudMapper; import org.apache.ibatis.annotations.Mapper; import org.apache.ibatis.annotations.Param; import org.springframework.stereotype.Component; import java.util.List; /** * @author godcheese [godcheese@outlook.com] * @date 2018-02-22 */ @Component("roleAuthorityMapper") @Mapper public interface RoleAuthorityMapper extends CrudMapper { /** * 指定角色 id,获取所有角色权限 * * @param roleId 角色 id * @return List */ List listAllByRoleId(@Param("roleId") Long roleId); /** * 指定角色 id、authority,获取角色权限 * * @param roleId 角色 id * @param authority authority * @return RoleAuthorityEntity */ RoleAuthorityEntity getOneByRoleIdAndAuthority(@Param("roleId") Long roleId, @Param("authority") String authority); /** * 指定角色 id、authority list,批量删除 * * @param roleId 角色 id * @param authorityList authority list * @return int */ int deleteAllByRoleIdAndAuthorityList(@Param("roleId") Long roleId, @Param("authorityList") List authorityList); /** * 指定角色 id、authority list,批量插入 * * @param roleId 角色 id * @param authorityList authority list * @return int */ int insertAllByRoleIdAndAuthorityList(@Param("roleId") Long roleId, @Param("authorityList") List authorityList); /** * 指定角色 id,批量删除角色权限 * * @param roleId 角色 id * @return int */ int deleteAllByRoleId(@Param("roleId") Long roleId); } ================================================ FILE: src/main/java/com/godcheese/nimrod/user/mapper/RoleAuthorityMapper.xml ================================================ `role_authority` `id`, `role_id`, `authority` insert into (`id`, `role_id`, `authority`) values (#{id}, #{roleId}, #{authority}) insert into (`role_id`, `authority`) values (#{roleId}, #{authority}) insert into (`role_id`, `authority`) values (#{roleId}, #{item}) update set `role_id` = #{roleId}, `authority` = #{authority} where `id`= #{id} delete from where `id` = #{id} delete from where `role_id` = #{roleId} and `authority` in ( #{item} ) delete from where `role_id` = #{roleId} ================================================ FILE: src/main/java/com/godcheese/nimrod/user/mapper/RoleMapper.java ================================================ package com.godcheese.nimrod.user.mapper; import com.godcheese.nimrod.user.entity.RoleEntity; import com.godcheese.tile.mybatis.CrudMapper; import com.github.pagehelper.Page; import org.apache.ibatis.annotations.Mapper; import org.apache.ibatis.annotations.Param; import org.springframework.stereotype.Component; /** * @author godcheese [godcheese@outlook.com] * @date 2018-02-22 */ @Component("roleMapper") @Mapper public interface RoleMapper extends CrudMapper { /** * 指定角色值,获取角色 * * @param value 角色值 * @return RoleEntity */ RoleEntity getOneByValue(@Param("value") String value); /** * 分页获取所有角色 * * @return Page */ Page pageAll(); } ================================================ FILE: src/main/java/com/godcheese/nimrod/user/mapper/RoleMapper.xml ================================================ `role` `id`, `name`, `value`, `remark`, `gmt_modified`, `gmt_created` insert into () values (#{id}, #{name}, #{value}, #{remark}, #{gmtModified}, #{gmtCreated}) update set `name` = #{name}, `remark` = #{remark}, `gmt_modified` = #{gmtModified} where `id`= #{id} delete from where `id` = #{id} delete from where `id` in ( #{item} ) ================================================ FILE: src/main/java/com/godcheese/nimrod/user/mapper/RoleViewMenuCategoryMapper.java ================================================ package com.godcheese.nimrod.user.mapper; import com.godcheese.nimrod.user.entity.RoleViewMenuCategoryEntity; import com.godcheese.tile.mybatis.CrudMapper; import org.apache.ibatis.annotations.Mapper; import org.apache.ibatis.annotations.Param; import org.springframework.stereotype.Component; import java.util.List; /** * @author godcheese [godcheese@outlook.com] * @date 2018-02-22 */ @Component("roleViewMenuCategoryMapper") @Mapper public interface RoleViewMenuCategoryMapper extends CrudMapper { /** * 指定角色 id,获取所有角色权限 * * @param roleId 角色 id * @return List */ List listAllByRoleId(@Param("roleId") Long roleId); /** * 指定角色 id,批量删除角色视图菜单分类 * * @param roleId 角色 id * @return int */ int deleteAllByRoleId(@Param("roleId") Long roleId); /** * 指定角色 id、 视图菜单分类 id list,批量插入 * * @param roleId 角色 id * @param viewMenuCategoryIdList 视图菜单分类 id list * @return int */ int insertAllByRoleIdAndViewMenuCategoryIdList(@Param("roleId") Long roleId, @Param("viewMenuCategoryIdList") List viewMenuCategoryIdList); /** * 指定角色 id、authority,获取角色权限 * * @param roleId 角色 id * @param viewMenuCategoryId 视图菜单分类 id * @return RoleAuthorityEntity */ RoleViewMenuCategoryEntity getOneByRoleIdAndViewMenuCategoryId(@Param("roleId") Long roleId, @Param("viewMenuCategoryId") Long viewMenuCategoryId); /** * 指定角色 id、视图菜单分类 id list,批量删除角色视图菜单分类 * * @param roleId 角色 id * @param viewMenuCategoryIdList 视图菜单分类 id list * @return int */ int deleteAllByRoleIdAndViewMenuCategoryIdList(@Param("roleId") Long roleId, @Param("viewMenuCategoryIdList") List viewMenuCategoryIdList); /** * 指定视图菜单分类 id,批量删除角色视图菜单分类 * * @param viewMenuCategoryId 视图菜单分类 id * @return */ int deleteAllByViewMenuCategoryId(@Param("viewMenuCategoryId") Long viewMenuCategoryId); } ================================================ FILE: src/main/java/com/godcheese/nimrod/user/mapper/RoleViewMenuCategoryMapper.xml ================================================ `role_view_menu_category` `id`, `role_id`, `view_menu_category_id` insert into (`id`, `role_id`, `view_menu_category_id`) values (#{id}, #{roleId}, #{viewMenuCategoryId}) insert into (`role_id`, `view_menu_category_id`) values (#{roleId}, #{viewMenuCategoryId}) insert into (`role_id`, `view_menu_category_id`) values (#{roleId}, #{item}) update set `role_id` = #{roleId}, `view_menu_category_id` = #{viewMenuCategoryId} where `id`= #{id} delete from where `id` = #{id} delete from where `role_id` = #{roleId} and `view_menu_category_id` in ( #{item} ) delete from where `view_menu_category_id` = #{viewMenuCategoryId} delete from where `role_id` = #{roleId} ================================================ FILE: src/main/java/com/godcheese/nimrod/user/mapper/RoleViewMenuMapper.java ================================================ package com.godcheese.nimrod.user.mapper; import com.godcheese.nimrod.user.entity.RoleViewMenuEntity; import com.godcheese.tile.mybatis.CrudMapper; import org.apache.ibatis.annotations.Mapper; import org.apache.ibatis.annotations.Param; import org.springframework.stereotype.Component; import java.util.List; /** * @author godcheese [godcheese@outlook.com] * @date 2018-02-22 */ @Component("roleViewMenuEntity") @Mapper public interface RoleViewMenuMapper extends CrudMapper { /** * 指定角色 id,获取所有角色权限 * * @param roleId 角色 id * @return List */ List listAllByRoleId(@Param("roleId") Long roleId); /** * 指定角色 id,批量删除角色视图菜单 * * @param roleId 角色 id * @return int */ int deleteAllByRoleId(@Param("roleId") Long roleId); /** * 指定角色 id、视图菜单分类 id list,批量新增 * * @param roleId 角色 id * @param viewMenuIdList 视图菜单 id list * @return int */ int insertAllByRoleIdAndViewMenuIdList(@Param("roleId") Long roleId, @Param("viewMenuIdList") List viewMenuIdList); /** * 指定角色 id、authority,获取角色权限 * * @param roleId 角色 id * @param viewMenuId 视图菜单 id * @return RoleAuthorityEntity */ RoleViewMenuEntity getOneByRoleIdAndViewMenuId(@Param("roleId") Long roleId, @Param("viewMenuId") Long viewMenuId); /** * 指定角色 id,视图菜单 id list,批量删除 * * @param roleId 角色 id * @param viewMenuIdList 视图菜单 id list * @return int */ int deleteAllByRoleIdAndViewMenuIdList(@Param("roleId") Long roleId, @Param("viewMenuIdList") List viewMenuIdList); /** * 指定视图菜单 id list,批量删除 * * @param viewMenuIdList 视图菜单 id list * @return int */ int deleteAllByViewMenuIdList(@Param("viewMenuIdList") List viewMenuIdList); } ================================================ FILE: src/main/java/com/godcheese/nimrod/user/mapper/RoleViewMenuMapper.xml ================================================ `role_view_menu` `id`, `role_id`, `view_menu_id` insert into (`id`, `role_id`, `view_menu_id`) values (#{id}, #{roleId}, #{viewMenuId}) insert into (`role_id`, `view_menu_category_id`) values (#{roleId}, #{viewMenuCategoryId}) insert into (`role_id`, `view_menu_id`) values (#{roleId}, #{item}) update set `role_id` = #{roleId}, `view_menu_id` = #{viewMenuId} where `id`= #{id} delete from where `id` = #{id} delete from where `role_id` = #{roleId} and `view_menu_id` in ( #{item} ) delete from where `view_menu_id` in ( #{item} ) delete from where `role_id` = #{roleId} ================================================ FILE: src/main/java/com/godcheese/nimrod/user/mapper/UserMapper.java ================================================ package com.godcheese.nimrod.user.mapper; import com.godcheese.nimrod.user.entity.UserEntity; import com.godcheese.tile.mybatis.CrudMapper; import com.github.pagehelper.Page; import org.apache.ibatis.annotations.Mapper; import org.apache.ibatis.annotations.Param; import org.springframework.stereotype.Component; import java.util.Date; import java.util.List; /** * @author godcheese [godcheese@outlook.com] * @date 2018-02-22 */ @Component("userMapper") @Mapper public interface UserMapper extends CrudMapper { /** * 指定 username 获取用户 * * @param username 用户名 * @return UserEntity */ UserEntity getOneByUsername(@Param("username") String username); /** * 指定电子邮箱,获取用户 * * @param email 电子邮箱 * @return UserEntity */ UserEntity getOneByEmail(@Param("email") String email); /** * 指定手机号码,获取用户 * * @param cellphone 手机号码 * @return UserEntity */ UserEntity getOneByCellphone(@Param("cellphone") String cellphone); /** * 伪删除用户,标记 gmtDeleted 字段 * * @param idList id list * @param gmtDeleted 删除时间 * @return int */ int fakeDeleteAll(@Param("idList") List idList, @Param("gmtDeleted") Date gmtDeleted); /** * 撤销伪删除用户,不标记 gmtDeleted 字段 * * @param idList id list * @return int */ int revokeFakeDeleteAll(@Param("idList") List idList); /** * 指定部门 id,分页获取所有用户 * * @param departmentId 部门 id * @return */ Page pageAllByDepartmentId(@Param("departmentId") Long departmentId); /** * 指定部门 id,获取用户 * * @param departmentId 部门 id * @return UserEntity */ UserEntity getOneByDepartmentId(@Param("departmentId") Long departmentId); /** * 分页获取所有用户 * * @param userEntity UserEntity * @param gmtCreatedStart gmtCreatedStart * @param gmtCreatedEnd gmtCreatedEnd * @param gmtDeletedStart gmtDeletedStart * @param gmtDeletedEnd gmtDeletedEnd * @return Page */ Page pageAll(@Param("userEntity") UserEntity userEntity, @Param("gmtCreatedStart") String gmtCreatedStart, @Param("gmtCreatedEnd") String gmtCreatedEnd, @Param("gmtDeletedStart") String gmtDeletedStart, @Param("gmtDeletedEnd") String gmtDeletedEnd); } ================================================ FILE: src/main/java/com/godcheese/nimrod/user/mapper/UserMapper.xml ================================================ `user` `id`, `username`, `password`, `avatar`, `email`, `email_is_verified`, `department_id`, `enabled`, `remark`, `gmt_deleted`, `gmt_modified`, `gmt_created` insert into (`username`, `password`, `avatar`, `email`, `email_is_verified`, `department_id`, `enabled`, `remark`, `gmt_deleted`, `gmt_modified`, `gmt_created`) values (#{username}, #{password}, #{avatar}, #{email}, #{emailIsVerified}, #{departmentId}, #{enabled}, #{remark}, #{gmtDeleted}, #{gmtModified}, #{gmtCreated}) update set `username` = #{username}, `password` = #{password}, `avatar` = #{avatar}, `email` = #{email}, `email_is_verified` = #{emailIsVerified}, `department_id` = #{departmentId}, `enabled` = #{enabled}, `remark` = #{remark}, `gmt_modified` = #{gmtModified} where `id`= #{id} delete from where `id` = #{id} delete from where `id` in ( #{item} ); delete from `user_role` where `id` in ( #{item} ); delete from `user_password_reset` where `id` in ( #{item} ); update set `gmt_deleted` = #{gmtDeleted} where `id` in ( #{item} ) update set `gmt_deleted` = null where `id` in ( #{item} ) ================================================ FILE: src/main/java/com/godcheese/nimrod/user/mapper/UserRoleMapper.java ================================================ package com.godcheese.nimrod.user.mapper; import com.godcheese.nimrod.user.entity.UserRoleEntity; import com.godcheese.tile.mybatis.CrudMapper; import com.github.pagehelper.Page; import org.apache.ibatis.annotations.Mapper; import org.apache.ibatis.annotations.Param; import org.springframework.stereotype.Component; import java.util.List; /** * @author godcheese [godcheese@outlook.com] * @date 2018-02-22 */ @Component("userRoleMapper") @Mapper public interface UserRoleMapper extends CrudMapper { /** * 指定用户 id,获取用户角色 * * @param userId 用户 id * @return List */ List listAllByUserId(@Param("userId") Long userId); /** * 指定角色 id,获取用户角色 * * @param roleId 角色 id * @return UserRoleEntity */ UserRoleEntity getOneByRoleId(@Param("roleId") Long roleId); /** * 指定用户 id、角色 id list,删除所有 * * @param userId 用户 id * @param roleIdList 角色 id list * @return int */ int deleteAllByUserIdAndRoleIdList(@Param("userId") Long userId, @Param("roleIdList") List roleIdList); /** * 指定用户 id、角色 id,获取用户角色 * * @param userId 用户 id * @param roleId 角色 id * @return UserRoleEntity */ UserRoleEntity getOneByUserIdAndRoleId(@Param("userId") Long userId, @Param("roleId") Long roleId); /** * 指定角色 id,删除所有 * * @param roleId 角色 id * @return int */ int deleteAllByRoleId(@Param("roleId") Long roleId); /** * 分页获取所有用户角色 * * @return Page */ Page pageAll(); /** * 指定角色 id、视图菜单分类 id list,批量新增 * * @param userId 角色 id * @param roleIdList 视图菜单 id list * @return int */ int insertAllByUserIdAndRoleIdList(@Param("userId") Long userId, @Param("roleIdList") List roleIdList); } ================================================ FILE: src/main/java/com/godcheese/nimrod/user/mapper/UserRoleMapper.xml ================================================ `user_role` `id`, `user_id`, `role_id` insert into (`id`, `user_id`, `role_id`) values (#{id}, #{userId}, #{roleId}) update set `user_id` = #{userId}, `role_id` = #{roleId} where `id`= #{id} delete from where `id` = #{id} delete from where `user_id` = #{userId} and `role_id` in ( #{item} ) delete from where `role_id` = #{roleId} insert into (`user_id`, `role_id`) values (#{userId}, #{item}) ================================================ FILE: src/main/java/com/godcheese/nimrod/user/mapper/UserVerifyCodeMapper.java ================================================ package com.godcheese.nimrod.user.mapper; import com.godcheese.nimrod.user.entity.UserVerifyCodeEntity; import com.godcheese.tile.mybatis.CrudMapper; import org.apache.ibatis.annotations.Mapper; import org.apache.ibatis.annotations.Param; import org.springframework.stereotype.Component; /** * @author godcheese [godcheese@outlook.com] * @date 2018-02-22 */ @Component("userVerifyCodeMapper") @Mapper public interface UserVerifyCodeMapper extends CrudMapper { UserVerifyCodeEntity getOneByUserIdAndVerifyFrom(@Param("userId") Long userId, @Param("verifyFrom") String verifyFrom); int updateOneByUserIdAndVerifyFrom(UserVerifyCodeEntity userVerifyCodeEntity); int deleteAllByEmail(String email); } ================================================ FILE: src/main/java/com/godcheese/nimrod/user/mapper/UserVerifyCodeMapper.xml ================================================ `user_verify_code` `id`, `user_id`, `verify_from`, `verify_code`, `gmt_expires`, `gmt_created` insert into (`id`, `user_id`, `verify_from`, `verify_code`, `gmt_expires`, `gmt_created`) values (#{id}, #{userId}, #{verifyFrom}, #{verifyCode}, #{gmtExpires}, #{gmtCreated}) update set `user_id` = #{userId}, `verify_from` = #{verifyFrom}, `verify_code` = #{verifyCode}, `gmt_expires` = #{gmtExpires}, `gmt_created` = #{gmtCreated} where `id`= #{id} update set `verify_code` = #{verifyCode}, `gmt_expires` = #{gmtExpires}, `gmt_created` = #{gmtCreated} where `user_id`= #{userId} and `verify_from` = #{verifyFrom} delete from where `id` = #{id} delete from where `email` = #{email} ================================================ FILE: src/main/java/com/godcheese/nimrod/user/mapper/ViewMenuCategoryMapper.java ================================================ package com.godcheese.nimrod.user.mapper; import com.godcheese.nimrod.user.entity.ViewMenuCategoryEntity; import com.godcheese.tile.mybatis.CrudMapper; import org.apache.ibatis.annotations.Mapper; import org.apache.ibatis.annotations.Param; import org.springframework.stereotype.Component; import java.util.List; /** * @author godcheese [godcheese@outlook.com] * @date 2018-02-22 */ @Component("viewMenuCategoryMapper") @Mapper public interface ViewMenuCategoryMapper extends CrudMapper { /** * 指定角色 id,获取所有视图菜单分类 * * @param roleId 角色 id * @return List */ List listAllByParentIdIsNullAndRoleId(@Param("roleId") Long roleId); /** * 获取所有视图菜单分类 * * @return List */ List listAllByParentIdIsNull(); /** * 指定角色 id、视图菜单分类父级 id,获取所有视图菜单分类 * * @param roleId 角色 id * @param parentId 视图菜单分类父级 id * @return List */ List listAllByParentIdAndRoleId(@Param("parentId") Long parentId, @Param("roleId") Long roleId); /** * 指定视图菜单分类父级 id,获取所有视图菜单分类 * * @param parentId 视图菜单分类父级 id * @return List */ List listAllByParentId(@Param("parentId") Long parentId); /** * 指定角色 id、视图菜单分类父级 id,获取视图菜单分类 * * @param roleId 角色 id * @param parentId 视图菜单分类父级 id * @return ViewMenuCategoryEntity */ ViewMenuCategoryEntity getOneByParentId(@Param("parentId") Long parentId); /** * 指定视图菜单分类名,搜索获取所有视图菜单分类 * * @param name 视图菜单分类名 * @return List */ List searchAllByName(@Param("name") String name); /** * 指定角色 id,获取所有视图菜单分类 * * @param roleIdList 角色 id list * @return List */ List listAllByParentIdIsNullAndRoleIdList(@Param("roleIdList") List roleIdList); /** * 指定角色 id、视图菜单分类父级 id,获取所有视图菜单分类 * * @param roleIdList 角色 id list * @param parentId 视图菜单分类父级 id * @return List */ List listAllByParentIdAndRoleIdList(@Param("parentId") Long parentId, @Param("roleIdList") List roleIdList); } ================================================ FILE: src/main/java/com/godcheese/nimrod/user/mapper/ViewMenuCategoryMapper.xml ================================================ `view_menu_category` `id`, `name`, `icon`, `parent_id`, `sort`, `remark`, `gmt_modified`, `gmt_created` insert into (`id`, `name`, `icon`, `parent_id`, `sort`, `remark`, `gmt_modified`, `gmt_created`) values (#{id}, #{name}, #{icon}, #{parentId}, #{sort}, #{remark}, #{gmtModified}, #{gmtCreated}) update set `name` = #{name}, `icon` = #{icon}, `sort` = #{sort}, `remark` = #{remark}, `gmt_modified` = #{gmtModified} where `id`= #{id} delete from where `id` = #{id} delete from where `id` in ( #{item} ) ================================================ FILE: src/main/java/com/godcheese/nimrod/user/mapper/ViewMenuMapper.java ================================================ package com.godcheese.nimrod.user.mapper; import com.godcheese.nimrod.user.entity.ViewMenuEntity; import com.godcheese.tile.mybatis.CrudMapper; import com.github.pagehelper.Page; import org.apache.ibatis.annotations.Mapper; import org.apache.ibatis.annotations.Param; import org.springframework.stereotype.Component; import java.util.List; /** * @author godcheese [godcheese@outlook.com] * @date 2018-02-22 */ @Component("viewMenuMapper") @Mapper public interface ViewMenuMapper extends CrudMapper { /** * 指定视图菜单分类 id、角色 id,获取视图菜单 * * @param viewMenuCategoryId 视图菜单分类 id * @param roleId 角色 id * @return List */ List listAllByViewMenuCategoryIdAndRoleId(@Param("viewMenuCategoryId") Long viewMenuCategoryId, @Param("roleId") Long roleId); /** * 指定视图菜单分类 id、角色 id,获取视图菜单 * * @param viewMenuCategoryIdList 视图菜单分类 id list * @return List */ List listAllByViewMenuCategoryIdList(@Param("viewMenuCategoryIdList") List viewMenuCategoryIdList); /** * 指定视图菜单分类 id list,分页获取所有视图菜单 * * @param viewMenuCategoryIdList 视图菜单分类 id list * @return Page */ Page pageAllByViewMenuCategoryIdList(@Param("viewMenuCategoryIdList") List viewMenuCategoryIdList); /** * 指定视图菜单分类 id,获取视图菜单 * * @param viewMenuCategoryId 视图菜单分类 id * @return ViewMenuEntity */ ViewMenuEntity getOneByViewMenuCategoryId(@Param("viewMenuCategoryId") Long viewMenuCategoryId); /** * 指定视图菜单分类 id、角色 id,分页获取所有视图菜单 * * @param viewMenuCategoryId 视图菜单分类 id * @param roleId 角色 id * @return List */ Page pageAllByViewMenuCategoryIdAndRoleId(@Param("viewMenuCategoryId") Long viewMenuCategoryId, @Param("roleId") Long roleId); /** * 指定视图菜单分类 id、角色 id,分页获取所有视图菜单 * * @param viewMenuCategoryId 视图菜单分类 id * @return List */ Page pageAllByViewMenuCategoryId(@Param("viewMenuCategoryId") Long viewMenuCategoryId); /** * 指定视图菜单名称,模糊搜索获取所有视图菜单 * * @param name 视图菜单名称 * @return List */ List searchAllByName(@Param("name") String name); /** * 指定视图菜单分类 id、角色 id list,获取视图菜单 * * @param viewMenuCategoryId 视图菜单分类 id * @param roleIdList 角色 id list * @return List */ List listAllByViewMenuCategoryIdAndRoleIdList(@Param("viewMenuCategoryId") Long viewMenuCategoryId, @Param("roleIdList") List roleIdList); } ================================================ FILE: src/main/java/com/godcheese/nimrod/user/mapper/ViewMenuMapper.xml ================================================ `view_menu` `id`, `name`, `icon`, `url`, `view_menu_category_id`, `sort`, `remark`, `gmt_modified`, `gmt_created` insert into (`id`, `name`, `icon`, `url`, `view_menu_category_id`, `sort`, `remark`, `gmt_modified`, `gmt_created`) values (#{id}, #{name}, #{icon}, #{url}, #{viewMenuCategoryId}, #{sort}, #{remark}, #{gmtModified}, #{gmtCreated}) update set `name` = #{name}, `icon` = #{icon}, `url` = #{url}, `view_menu_category_id` = #{viewMenuCategoryId}, `sort` = #{sort}, `remark` = #{remark}, `gmt_modified` = #{gmtModified} where `id`= #{id} delete from where `id` = #{id} delete from where `id` in ( #{item} ) ================================================ FILE: src/main/java/com/godcheese/nimrod/user/mapper/ViewPageApiMapper.java ================================================ package com.godcheese.nimrod.user.mapper; import com.godcheese.nimrod.user.entity.ViewPageApiEntity; import com.godcheese.tile.mybatis.CrudMapper; import org.apache.ibatis.annotations.Mapper; import org.apache.ibatis.annotations.Param; import org.springframework.stereotype.Component; import java.util.List; /** * @author godcheese [godcheese@outlook.com] * @date 2018-02-22 */ @Component("viewPageApiMapper") @Mapper public interface ViewPageApiMapper extends CrudMapper { /** * 指定视图页面 id、 API id,获取视图页面 API * * @param viewPageId 视图页面 id * @param apiId 视图页面 API id * @return ViewPageApiEntity */ ViewPageApiEntity getOneByViewPageIdAndApiId(@Param("viewPageId") Long viewPageId, @Param("apiId") Long apiId); /** * 指定视图页面 id、 API id list,插入所有 * * @param viewPageId 视图页面 id * @param apiIdList 视图页面 API id list * @return int */ int insertAllByViewPageIdAndApiIdList(@Param("viewPageId") Long viewPageId, @Param("apiIdList") List apiIdList); /** * 指定视图页面 id、 API id list,删除所有 * * @param viewPageId 视图页面 id * @param apiIdList 视图页面 API id list * @return int */ int deleteAllByViewPageIdAndApiIdList(@Param("viewPageId") Long viewPageId, @Param("apiIdList") List apiIdList); /** * 指定视图页面 id,获取所有视图页面 API * * @param viewPageId 视图页面 id * @return List */ List listAllByViewPageId(@Param("viewPageId") Long viewPageId); } ================================================ FILE: src/main/java/com/godcheese/nimrod/user/mapper/ViewPageApiMapper.xml ================================================ `view_page_api` `id`, `view_page_id`, `api_id` insert into (`view_page_id`, `api_id`) values (#{viewPageId}, #{item}) delete from where `view_page_id` = #{viewPageId} AND `api_id` in ( #{item} ) ================================================ FILE: src/main/java/com/godcheese/nimrod/user/mapper/ViewPageCategoryMapper.java ================================================ package com.godcheese.nimrod.user.mapper; import com.godcheese.nimrod.user.entity.ViewPageCategoryEntity; import com.godcheese.tile.mybatis.CrudMapper; import org.apache.ibatis.annotations.Mapper; import org.apache.ibatis.annotations.Param; import org.springframework.stereotype.Component; import java.util.List; /** * @author godcheese [godcheese@outlook.com] * @date 2018-02-22 */ @Component("viewPageCategoryMapper") @Mapper public interface ViewPageCategoryMapper extends CrudMapper { /** * 获取所有父级 id 为 null 的视图页面分类 * * @return List */ List listAllByParentIdIsNull(); /** * 指定父级视图页面分类 id,获取所有视图页面分类 * * @param parentId 父级视图页面分类 id * @return List */ List listAllByParentId(@Param("parentId") Long parentId); /** * 指定父级视图页面分类 id,获取视图页面分类 * * @param parentId 父级视图页面分类 id * @return ViewPageCategoryEntity */ ViewPageCategoryEntity getOneByParentId(@Param("parentId") Long parentId); /** * 指定视图页面 id,获取视图页面分类 * * @param viewPageId 视图页面 id * @return ViewPageCategoryEntity */ ViewPageCategoryEntity getOneByViewPageId(@Param("viewPageId") Long viewPageId); } ================================================ FILE: src/main/java/com/godcheese/nimrod/user/mapper/ViewPageCategoryMapper.xml ================================================ `view_page_category` `id`, `name`, `parent_id`, `sort`, `remark`, `gmt_modified`, `gmt_created` insert into (`id`, `name`, `parent_id`, `sort`, `remark`, `gmt_modified`, `gmt_created`) values (#{id}, #{name}, #{parentId}, #{sort}, #{remark}, #{gmtModified}, #{gmtCreated}) update set `name` = #{name}, `parent_id` = #{parentId}, `sort` = #{sort}, `remark` = #{remark}, `gmt_modified` = #{gmtModified} where `id`= #{id} delete from where `id` in ( #{item} ) delete from where `id` = #{id} ================================================ FILE: src/main/java/com/godcheese/nimrod/user/mapper/ViewPageComponentApiMapper.java ================================================ package com.godcheese.nimrod.user.mapper; import com.godcheese.nimrod.user.entity.ViewPageComponentApiEntity; import com.godcheese.tile.mybatis.CrudMapper; import org.apache.ibatis.annotations.Mapper; import org.apache.ibatis.annotations.Param; import org.springframework.stereotype.Component; import java.util.List; /** * @author godcheese [godcheese@outlook.com] * @date 2018-02-22 */ @Component("viewPageComponentApiMapper") @Mapper public interface ViewPageComponentApiMapper extends CrudMapper { /** * 指定视图页面组件 id、 API id,获取视图页面组件 API * * @param viewPageComponentId 视图页面组件 id * @param apiId 视图页面组件 API id * @return ViewPageComponentApiEntity */ ViewPageComponentApiEntity getOneByViewPageComponentIdAndApiId(@Param("viewPageComponentId") Long viewPageComponentId, @Param("apiId") Long apiId); /** * 指定视图页面组件 id、 API id list,统计所有视图页面组件 API 个数 * * @param viewPageComponentId 视图页面组件 id * @param apiIdList 视图页面组件 API id * @return int */ int insertAllByViewPageComponentIdAndApiIdList(@Param("viewPageComponentId") Long viewPageComponentId, @Param("apiIdList") List apiIdList); /** * 指定视图页面组件 id、 API id list,删除所有 * * @param viewPageComponentId 视图页面组件 id * @param apiIdList 视图页面组件 API * @return int */ int deleteAllByViewPageComponentIdAndApiIdList(@Param("viewPageComponentId") Long viewPageComponentId, @Param("apiIdList") List apiIdList); /** * 指定视图页面组件 id,获取所有视图页面组件 API * * @param viewPageComponentId 视图页面组件 id * @return List */ List listAllByViewPageComponentId(@Param("viewPageComponentId") Long viewPageComponentId); } ================================================ FILE: src/main/java/com/godcheese/nimrod/user/mapper/ViewPageComponentApiMapper.xml ================================================ `view_page_component_api` `id`, `view_page_component_id`, `api_id` insert into (`view_page_component_id`, `api_id`) values (#{viewPageComponentId}, #{item}) delete from where `view_page_component_id` = #{viewPageComponentId} AND `api_id` in ( #{item} ) ================================================ FILE: src/main/java/com/godcheese/nimrod/user/mapper/ViewPageComponentMapper.java ================================================ package com.godcheese.nimrod.user.mapper; import com.godcheese.nimrod.user.entity.ViewPageComponentEntity; import com.godcheese.tile.mybatis.CrudMapper; import com.github.pagehelper.Page; import org.apache.ibatis.annotations.Mapper; import org.apache.ibatis.annotations.Param; import org.springframework.stereotype.Component; import java.util.List; /** * @author godcheese [godcheese@outlook.com] * @date 2018-02-22 */ @Component("viewPageComponentMapper") @Mapper public interface ViewPageComponentMapper extends CrudMapper { /** * 指定视图页面 id,获取所有视图页面组件 * * @param viewPageId 视图页面 id * @return List */ Page pageAllByViewPageId(@Param("viewPageId") Long viewPageId); /** * 指定 authority,获取视图页面组件 * * @param authority authority * @return ViewPageComponentEntity */ ViewPageComponentEntity getOneByAuthority(@Param("authority") String authority); /** * 指定视图页面 id list,分页获取视图页面 * * @param viewPageIdList 视图页面 id list * @return Page */ Page pageAllByViewPageIdList(@Param("viewPageIdList") List viewPageIdList); } ================================================ FILE: src/main/java/com/godcheese/nimrod/user/mapper/ViewPageComponentMapper.xml ================================================ `view_page_component` `id`, `view_page_component_type`, `name`, `authority`, `view_page_id`, `sort`, `remark`, `gmt_modified`, `gmt_created` insert into (`view_page_component_type`, `name`, `authority`, `view_page_id`, `sort`, `remark`,`gmt_modified`, `gmt_created`) values (#{viewPageComponentType}, #{name}, #{authority}, #{viewPageId}, #{sort}, #{remark}, #{gmtModified}, #{gmtCreated}) update set `view_page_component_type` = #{viewPageComponentType}, `name` = #{name}, `authority` = #{authority}, `sort` = #{sort}, `remark` = #{remark}, `gmt_modified` = #{gmtModified} where `id`= #{id} delete from where `id` in ( #{item} ) ================================================ FILE: src/main/java/com/godcheese/nimrod/user/mapper/ViewPageMapper.java ================================================ package com.godcheese.nimrod.user.mapper; import com.godcheese.nimrod.user.entity.ViewPageEntity; import com.godcheese.tile.mybatis.CrudMapper; import com.github.pagehelper.Page; import org.apache.ibatis.annotations.Mapper; import org.apache.ibatis.annotations.Param; import org.springframework.stereotype.Component; import java.util.List; /** * @author godcheese [godcheese@outlook.com] * @date 2018-02-22 */ @Component("viewPageMapper") @Mapper public interface ViewPageMapper extends CrudMapper { /** * 指定视图页面分类 id,获取所有视图页面 * * @param viewPageCategoryId 视图页面分类 id * @return List */ Page pageAllByViewPageCategoryId(@Param("viewPageCategoryId") Long viewPageCategoryId); /** * 指定视图页面分类 id,统计所有视图页面个数 * * @param viewPageCategoryId 视图页面分类 id * @return int */ int countAllByViewPageCategoryId(@Param("viewPageCategoryId") Long viewPageCategoryId); /** * 指定 authority,获取视图页面 * * @param authority authority * @return ViewPageEntity */ ViewPageEntity getOneByAuthority(@Param("authority") String authority); /** * 指定视图页面分类 id,获取所有视图页面 * * @param viewPageCategoryId 视图页面分类 id * @return List */ List listAllByViewPageCategoryId(@Param("viewPageCategoryId") Long viewPageCategoryId); /** * 指定视图页面分类 id,获取视图页面 * * @param viewPageCategoryId 视图页面分类 id * @return ViewPageEntity */ ViewPageEntity getOneByViewPageCategoryId(@Param("viewPageCategoryId") Long viewPageCategoryId); /** * 指定视图页面分类 id list,分页获取视图页面 * * @param viewPageCategoryIdList 视图页面分类 id list * @return Page */ Page pageAllByViewPageCategoryIdList(@Param("viewPageCategoryIdList") List viewPageCategoryIdList); } ================================================ FILE: src/main/java/com/godcheese/nimrod/user/mapper/ViewPageMapper.xml ================================================ `view_page` `id`, `name`, `url`, `view_page_category_id`, `sort`, `remark`, `authority`, `gmt_modified`, `gmt_created` insert into (`id`, `name`, `url`, `authority`, `view_page_category_id`, `sort`, `remark`, `gmt_modified`, `gmt_created`) values (#{id}, #{name}, #{url}, #{authority}, #{viewPageCategoryId}, #{sort}, #{remark}, #{gmtModified}, #{gmtCreated}) update set `name` = #{name}, `url` = #{url}, `authority` = #{authority}, `view_page_category_id` = #{viewPageCategoryId}, `sort` = #{sort}, `remark` = #{remark}, `gmt_modified` = #{gmtModified} where `id`= #{id} delete from where `id` in ( #{item} ) delete from where `id` = #{id} ================================================ FILE: src/main/java/com/godcheese/nimrod/user/service/ApiCategoryService.java ================================================ package com.godcheese.nimrod.user.service; import com.godcheese.nimrod.common.easyui.ComboTree; import com.godcheese.nimrod.user.entity.ApiCategoryEntity; import com.godcheese.tile.web.exception.BaseResponseException; import java.util.List; /** * @author godcheese [godcheese@outlook.com] * @date 2018-02-22 */ public interface ApiCategoryService { /** * 新增 API 分类 * * @param apiCategoryEntity ApiCategoryEntity * @return ApiCategoryEntity */ ApiCategoryEntity addOne(ApiCategoryEntity apiCategoryEntity); /** * 保存 API 分类 * * @param apiCategoryEntity ApiCategoryEntity * @return ApiCategoryEntity */ ApiCategoryEntity saveOne(ApiCategoryEntity apiCategoryEntity) throws BaseResponseException; /** * 指定 API 分类 id list,批量删除 API 分类 * * @param idList API 分类 id list * @return 已删除 API 分类个数 * @throws BaseResponseException BaseResponseException */ int deleteAll(List idList) throws BaseResponseException; /** * 指定 API 分类 id,获取所有 API 分类 * * @param id API 分类 id * @return ApiCategoryEntity */ ApiCategoryEntity getOne(Long id); /** * 获取所有父级 API 分类 * * @return Pagination */ List listAllParent(); /** * 指定父级 API 分类 id,获取所有 API 分类 * * @param parentId API 分类父级 id * @return List */ List listAllByParentId(Long parentId); /** * 获取所有 API 分类,以 ComboTree 形式展示 * * @return List */ List listAllApiCategoryComboTree(); /** * 指定父级 API 分类 id,ApiCategoryComboTree list,获取所有子级 API 分类 * * @param parentId 父级 API 分类 id * @param apiCategoryComboTreeList ApiCategoryComboTree list * @return List */ List getApiCategoryChildrenComboTree(long parentId, List apiCategoryComboTreeList); } ================================================ FILE: src/main/java/com/godcheese/nimrod/user/service/ApiService.java ================================================ package com.godcheese.nimrod.user.service; import com.godcheese.nimrod.common.easyui.Pagination; import com.godcheese.nimrod.user.entity.ApiEntity; import com.godcheese.tile.web.exception.BaseResponseException; import java.util.List; /** * @author godcheese [godcheese@outlook.com] * @date 2018-02-22 */ public interface ApiService { /** * 新增 API * * @param apiEntity ApiEntity * @return ApiEntity * @throws BaseResponseException BaseResponseException */ ApiEntity addOne(ApiEntity apiEntity) throws BaseResponseException; /** * 保存 API * * @param apiEntity ApiEntity * @return ApiEntity */ ApiEntity saveOne(ApiEntity apiEntity); /** * 指定 API id list,批量删除 API * * @param idList API id list * @return int 已删除 API 个数 */ int deleteAll(List idList); /** * 指定 API id,获取 API * * @param id API id * @return ApiEntity */ ApiEntity getOne(Long id); /** * 指定 API 分类 id,分页获取所有 API * * @param page 页 * @param rows 每页显示数量 * @param apiCategoryId API 分类 id * @param viewPageId viewPageId * @param viewPageComponentId viewPageComponentId * @return Pagination */ Pagination pageAllByApiCategoryId(Integer page, Integer rows, Long apiCategoryId, Long viewPageId, Long viewPageComponentId, Long roleId); } ================================================ FILE: src/main/java/com/godcheese/nimrod/user/service/DepartmentService.java ================================================ package com.godcheese.nimrod.user.service; import com.godcheese.nimrod.common.easyui.ComboTree; import com.godcheese.nimrod.common.easyui.Pagination; import com.godcheese.nimrod.common.easyui.TreeGrid; import com.godcheese.nimrod.user.entity.DepartmentEntity; import com.godcheese.tile.web.exception.BaseResponseException; import java.util.List; /** * @author godcheese [godcheese@outlook.com] * @date 2018-02-22 */ public interface DepartmentService { /** * 新增部门 * * @param departmentEntity DepartmentEntity * @return DepartmentEntity */ DepartmentEntity addOne(DepartmentEntity departmentEntity); /** * 保存部门 * * @param departmentEntity DepartmentEntity * @return DepartmentEntity */ DepartmentEntity saveOne(DepartmentEntity departmentEntity); /** * 指定部门 id list,批量删除部门 * * @param idList 角色 id list * @return int 已删除角色个数 * @throws BaseResponseException BaseResponseException */ int deleteAll(List idList) throws BaseResponseException; /** * 指定部门 id,获取部门 * * @param id 部门 id * @return DepartmentEntity */ DepartmentEntity getOne(Long id); /** * 指定父级 API 分类 id,获取所有 API 分类 * * @return List */ List listAllParent(); /** * 指定父级部门 id,获取所有部门 * * @param parentId 父级部门 id * @return List */ List listAllByParentId(Long parentId); // /** // * 指定用户角色 list,获取所有角色 // * // * @param userRoleEntityList 用户角色 list // * @return List // */ // List listAllByUserRoleList(List userRoleEntityList); /** * 指定 API 分类 id,分页获取所有 API * * @param page 页 * @param rows 每页显示数量 * @return Pagination */ Pagination pageAll(Integer page, Integer rows); /** * 获取所有部门 * * @return List */ List listAll(); // /** // * 指定用户 id,获取用户角色 // * // * @param userId 用户 id // * @return List // */ // List listAllByUserId(Long userId); /** * 指定部门 id,获取所有部门 * * @param id 部门 id * @return List */ List listAllByDepartmentId(Long id); /** * 获取所有部门,以 EasyUI ComboTree 形式展示 * * @return List */ List listAllDepartmentComboTree(); /** * 指定父级部门 id,DepartmentComboTree list,以 EasyUI ComboTree 形式展示 * * @param parentId 父级部门 id * @param departmentComboTreeList DepartmentComboTree list * @return List */ List getDepartmentChildrenComboTree(long parentId, List departmentComboTreeList); /** * 获取所有部门,以 EasyUI TreeGrid 形式展示 * * @return List */ List listAllDepartmentTreeGrid(); /** * 指定父级部门 id,DepartmentTreeGrid list,获取所有子级部门,以 EasyUI TreeGrid 形式展示 * * @param parentId 父级部门 id * @param departmentTreeGridList DepartmentTreeGrid list * @return List */ List getDepartmentChildrenTreeGrid(long parentId, List departmentTreeGridList); } ================================================ FILE: src/main/java/com/godcheese/nimrod/user/service/RoleAuthorityService.java ================================================ package com.godcheese.nimrod.user.service; import com.godcheese.nimrod.user.entity.RoleAuthorityEntity; import java.util.List; import java.util.Map; /** * @author godcheese [godcheese@outlook.com] * @date 2018-02-22 */ public interface RoleAuthorityService { /** * 指定角色权限 id,获取角色权限 * * @param id 角色权限 id * @return RoleAuthorityEntity */ RoleAuthorityEntity getOne(Long id); /** * 指定角色 id、API 权限(authority),批量授权 * * @param roleId 角色 id * @param apiAuthorityList API 权限(authority) list * @return List */ int grantAllByRoleIdAndApiAuthorityList(Long roleId, List apiAuthorityList); /** * 指定角色 id、API 权限(authority),批量撤销授权 * * @param roleId 角色 id * @param apiAuthorityList API 权限(authority) list * @return List */ int revokeAllByRoleIdAndApiAuthorityList(Long roleId, List apiAuthorityList); /** * 指定角色 id、视图页面权限(authority) list,批量授权 * * @param roleId 角色 id * @param viewPageAuthority 视图页面权限(authority) list * @return List */ int grantAllByRoleIdAndViewPageAuthorityList(Long roleId, List viewPageAuthority); /** * 指定角色 id、视图页面权限(authority) list,批量撤销授权 * * @param roleId 角色 id * @param viewPageAuthority 视图页面权限(authority) list * @return List */ int revokeAllByRoleIdAndViewPageAuthorityList(Long roleId, List viewPageAuthority); /** * 指定角色 id、视图页面组件权限(authority),批量授权 * * @param roleId 角色 id * @param viewPageComponentAuthorityList 视图页面组件权限(authority) list * @return List */ int grantAllByRoleIdAndViewPageComponentAuthorityList(Long roleId, List viewPageComponentAuthorityList); /** * 指定角色 id、视图页面组件权限(authority) list,批量撤销授权 * * @param roleId 角色 id * @param viewPageComponentAuthorityList 视图页面组件权限(authority) list * @return List */ int revokeAllByRoleIdAndViewPageComponentAuthorityList(Long roleId, List viewPageComponentAuthorityList); /** * 指定角色 id、权限(authority) list,判断是否已授权 * * @param roleId 角色 id * @param authority 权限(authority) list * @return Map */ Map isGrantedByRoleIdAndAuthority(Long roleId, String authority); } ================================================ FILE: src/main/java/com/godcheese/nimrod/user/service/RoleService.java ================================================ package com.godcheese.nimrod.user.service; import com.godcheese.nimrod.common.easyui.Pagination; import com.godcheese.nimrod.user.entity.RoleEntity; import com.godcheese.nimrod.user.entity.UserRoleEntity; import com.godcheese.tile.web.exception.BaseResponseException; import java.util.List; /** * @author godcheese [godcheese@outlook.com] * @date 2018-02-22 */ public interface RoleService { /** * 新增角色 * * @param roleEntity RoleEntity * @return RoleEntity * @throws BaseResponseException BaseResponseException */ RoleEntity addOne(RoleEntity roleEntity) throws BaseResponseException; /** * 保存角色 * * @param roleEntity RoleEntity * @return RoleEntity * @throws BaseResponseException BaseResponseException */ RoleEntity saveOne(RoleEntity roleEntity) throws BaseResponseException; /** * 指定角色 id list,批量删除角色 * * @param idList 角色 id list * @return int 已删除角色个数 * @throws BaseResponseException BaseResponseException */ int deleteAll(List idList) throws BaseResponseException; /** * 指定角色 id,获取角色 * * @param id 角色 id * @return RoleEntity */ RoleEntity getOne(Long id); /** * 指定用户角色 list,获取所有角色 * * @param userRoleEntityList 用户角色 list * @return List */ List listAllByUserRoleList(List userRoleEntityList); /** * 分页获取所有角色 * * @param page 页 * @param rows 每页显示数量 * @return Pagination */ Pagination pageAll(Integer page, Integer rows); /** * 获取所有角色 * * @return List */ List listAll(); /** * 指定用户 id,获取角色 * * @param userId 用户 id * @return List */ List listAllByUserId(Long userId); } ================================================ FILE: src/main/java/com/godcheese/nimrod/user/service/RoleViewMenuCategoryService.java ================================================ package com.godcheese.nimrod.user.service; import java.util.List; /** * @author godcheese [godcheese@outlook.com] * @date 2018-02-22 */ public interface RoleViewMenuCategoryService { /** * 指定角色 id、视图菜单分类 id list,批量授权 * * @param roleId 角色 id * @param viewMenuCategoryIdList 视图菜单分类 id list * @return List */ int grantAllByRoleIdAndViewMenuCategoryIdList(Long roleId, List viewMenuCategoryIdList); /** * 指定角色 id、视图菜单分类 id list,批量撤销授权 * * @param roleId 角色 id * @param viewMenuCategoryIdList 视图菜单分类 id list * @return List */ int revokeAllByRoleIdAndViewMenuCategoryIdList(Long roleId, List viewMenuCategoryIdList); } ================================================ FILE: src/main/java/com/godcheese/nimrod/user/service/RoleViewMenuService.java ================================================ package com.godcheese.nimrod.user.service; import java.util.List; /** * @author godcheese [godcheese@outlook.com] * @date 2018-02-22 */ public interface RoleViewMenuService { /** * 指定角色 id、视图菜单 id list,批量授权 * * @param roleId 角色 id * @param viewMenuIdList 视图菜单 id list * @return List */ int grantAllByRoleIdAndViewMenuIdList(Long roleId, List viewMenuIdList); /** * 指定角色 id、视图菜单 id list,批量撤销授权 * * @param roleId 角色 id * @param viewMenuIdList 视图菜单 id list * @return List */ int revokeAllByRoleIdAndViewMenuIdList(Long roleId, List viewMenuIdList); } ================================================ FILE: src/main/java/com/godcheese/nimrod/user/service/UserRoleService.java ================================================ package com.godcheese.nimrod.user.service; import com.godcheese.nimrod.common.easyui.Pagination; import com.godcheese.nimrod.user.entity.UserRoleEntity; import java.util.List; /** * @author godcheese [godcheese@outlook.com] * @date 2018-02-22 */ public interface UserRoleService { /** * 新增用户角色 * * @param userRoleEntity UserRoleEntity * @return UserRoleEntity */ UserRoleEntity addOne(UserRoleEntity userRoleEntity); /** * 指定用户 id、角色 id list,批量删除用户角色 * * @param userId 用户 id * @param roleIdList 角色 id list * @return 已删除角色个数 */ int deleteAllByUserIdAndRoleIdList(Long userId, List roleIdList); /** * 分页获取所有用户角色 * * @param page 页 * @param rows 每页显示数量 * @return Pagination */ Pagination pageAll(Integer page, Integer rows); List listAllByUserId(Long userId); } ================================================ FILE: src/main/java/com/godcheese/nimrod/user/service/UserService.java ================================================ package com.godcheese.nimrod.user.service; import com.godcheese.nimrod.common.easyui.Pagination; import com.godcheese.nimrod.user.entity.UserEntity; import com.godcheese.tile.web.exception.BaseResponseException; import javax.servlet.http.HttpServletRequest; import java.util.List; /** * @author godcheese [godcheese@outlook.com] * @date 2018-02-22 */ public interface UserService { /** * 新增用户 * * @param userEntity UserEntity * @return UserEntity * @throws BaseResponseException BaseResponseException */ UserEntity addOne(UserEntity userEntity) throws BaseResponseException; /** * 保存角色 * * @param userEntity UserEntity * @return UserEntity * @throws BaseResponseException BaseResponseException */ UserEntity saveOne(UserEntity userEntity) throws BaseResponseException; /** * 指定用户 id list,批量永久删除用户 * * @param idList 用户 id list * @return int 已删除角色个数 */ int deleteAll(List idList); /** * 指定用户 id,获取用户 * * @param id 用户 id * @return UserEntity */ UserEntity getOne(Long id); /** * 获取当前用户,可能会 null * * @return UserEntity */ UserEntity getCurrentUser(); /** * 获取当前用户,可能会 null * * @return UserEntity */ UserEntity getCurrentUserNoPassword(); /** * 获取当前用户,更可靠的获取,但需指定 HttpServletRequest * * @param request HttpServletRequest * @return UserEntity */ UserEntity getCurrentUser(HttpServletRequest request); /** * 获取当前 SimpleUser,可能会 null * @return UserEntity */ // SimpleUser getCurrentSimpleUser(); /** * 获取当前 SimpleUser,更可靠的获取,但需指定 HttpServletRequest * @param request HttpServletRequest * @return UserEntity */ // static SimpleUser getCurrentSimpleUser(HttpServletRequest request); /** * 指定用户 id、密码,获取用户 * * @param id 用户 id * @param password 用户密码 * @return UserEntity */ UserEntity getOneByIdAndPassword(Long id, String password); /** * 指定用户名、密码,获取用户 * * @param username 用户名 * @param password 用户密码 * @return UserEntity */ UserEntity getOneByUsernameAndPassword(String username, String password); /** * 指定电子邮箱、密码,获取用户 * * @param email 电子邮箱 * @param password 密码 * @return UserEntity */ UserEntity getOneByEmailAndPassword(String email, String password); /** * 指定手机号码、密码,获取用户 * * @param cellphone 手机号 * @param password 密码 * @return UserEntity */ UserEntity getOneByCellphoneAndPassword(String cellphone, String password); /** * 校验密码是否正确 * * @param plainPassword 明文密码 * @param cipherPassword 密文密码 * @return boolean */ boolean checkPassword(String plainPassword, String cipherPassword); /** * 加密明文密码 * * @param plainPassword 明文密码 * @return String */ String encodePassword(String plainPassword); /** * 指定用户 id,获取用户(去掉密码) * * @param id 用户 id * @return UserEntity */ UserEntity getOneByIdNoPassword(Long id); /** * 指定用户 id list,批量删除用户 * * @param idList 用户 id list * @return int */ int fakeDeleteAll(List idList); /** * 指定用户 id list,批量撤销删除用户 * * @param idList 用户 id list * @return int */ int revokeFakeDeleteAll(List idList); // /** // * 注销当前用户 // * @param httpServletRequest HttpServletRequest // * @param httpServletResponse HttpServletResponse // */ // void logout(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse) throws BaseResponseException; /** * 分页获取所有用户 * * @param page 页 * @param rows 每页显示数量 * @param sorterField sorterField * @param sorterOrder sorterOrder * @param userEntity userEntity * @param gmtCreatedStart gmtCreatedStart * @param gmtCreatedEnd gmtCreatedEnd * @param gmtDeletedStart gmtDeletedStart * @param gmtDeletedEnd gmtDeletedEnd * @return Pagination */ Pagination pageAll(Integer page, Integer rows, String sorterField, String sorterOrder, UserEntity userEntity, String gmtCreatedStart, String gmtCreatedEnd, String gmtDeletedStart, String gmtDeletedEnd); /** * 指定部门 id,分页获取所有用户 * * @param departmentId 部门 id * @param page 页 * @param rows 每页显示数量 * @return Pagination */ Pagination pageAllByDepartmentId(Long departmentId, Integer page, Integer rows); UserEntity profile(UserEntity userEntity); UserEntity saveProfile(UserEntity userEntity) throws BaseResponseException; boolean sendEmailVerifyCode(Long userId, String email) throws BaseResponseException; boolean sendEmailVerifyCode(UserEntity userEntity) throws BaseResponseException; boolean checkEmailVerifyCode(UserEntity userEntity, String email, String emailVerifyCode) throws BaseResponseException; boolean changeEmail(UserEntity userEntity, String emailVerifyCode, String newEmail, String newEmailVerifyCode) throws BaseResponseException; boolean changePassword(UserEntity userEntity, String password, String newPassword, String confirmNewPassword) throws BaseResponseException; } ================================================ FILE: src/main/java/com/godcheese/nimrod/user/service/UserVerifyCodeService.java ================================================ package com.godcheese.nimrod.user.service; import com.godcheese.nimrod.user.entity.UserVerifyCodeEntity; import com.godcheese.tile.web.exception.BaseResponseException; /** * @author godcheese [godcheese@outlook.com] * @date 2018-02-22 */ public interface UserVerifyCodeService { /** * @param userId * @param verifyFrom * @return */ UserVerifyCodeEntity addOne(UserVerifyCodeEntity userVerifyCodeEntity) throws BaseResponseException; /** * 指定用户 id、角色 id list,批量删除用户角色 * * @param userId 用户 id * @param roleIdList 角色 id list * @return 已删除角色个数 */ int deleteAllByUserIdAndVerifyFrom(Long userId, String verifyFrom); boolean isExpires(UserVerifyCodeEntity userVerifyCodeEntity); UserVerifyCodeEntity getOneByUserIdAndVerifyFrom(Long userId, String verifyFrom, boolean isExpires, String comparisonVerifyCode) throws BaseResponseException; } ================================================ FILE: src/main/java/com/godcheese/nimrod/user/service/ViewMenuCategoryService.java ================================================ package com.godcheese.nimrod.user.service; import com.godcheese.nimrod.common.easyui.ComboTree; import com.godcheese.nimrod.user.entity.ViewMenuCategoryEntity; import com.godcheese.tile.web.exception.BaseResponseException; import java.util.List; import java.util.Map; /** * @author godcheese [godcheese@outlook.com] * @date 2018-02-22 */ public interface ViewMenuCategoryService { /** * 新增视图菜单分类 * * @param viewMenuCategoryEntity ViewMenuCategoryEntity * @return ViewMenuCategoryEntity */ ViewMenuCategoryEntity addOne(ViewMenuCategoryEntity viewMenuCategoryEntity); /** * 保存视图菜单分类 * * @param viewMenuCategoryEntity ViewMenuCategoryEntity * @return ViewMenuCategoryEntity */ ViewMenuCategoryEntity saveOne(ViewMenuCategoryEntity viewMenuCategoryEntity); /** * 指定视图菜单分类 id list,批量删除视图菜单分类 * * @param idList 视图菜单分类 id list * @return int * @throws BaseResponseException BaseResponseException */ int deleteAll(List idList) throws BaseResponseException; /** * 指定角色 id,获取角色 * * @param id 角色 id * @return ViewMenuCategoryEntity */ ViewMenuCategoryEntity getOne(Long id); /** * 指定用户 id,获取视图菜单分类 * * @param userId 用户 id * @return List */ List listAllParentByUserId(Long userId); /** * 指定父级视图菜单分类 id、用户 id,获取视图菜单分类 * * @param parentId 父级视图菜单分类 id * @param userId 用户 id * @return List */ List listAllChildByParentIdAndUserId(Long parentId, Long userId); /** * 指定父级视图菜单分类 id、角色 id,获取所有视图菜单分类 * * @param parentId 父级视图菜单分类 id * @param roleId 角色 id * @return List */ List listAllByParentIdAndRoleId(Long parentId, Long roleId); List listAllByParentId(Long parentId, Long roleId); /** * 指定角色 id,获取所有父级视图菜单分类 * * @param roleId 角色 id * @return List */ List listAllParentByRoleId(Long roleId); List> listAllChildViewMenuCategoryAndViewMenuByParentIdAndUserId(Long parentId, Long userId); /** * 获取所有视图菜单分类 * * @return List */ List listAll(); /** * 指定视图菜单分类名称,模糊搜索获取所有视图菜单分类 * * @param name 视图菜单分类名称 * @return List */ List searchAllByName(String name); /** * 分页获取所有父级视图菜单分类 * * @return List */ List listAllParent(Long roleId); /** * 获取所有视图菜单分类,以 ComboTree 形式展示 * * @return List */ List listAllViewMenuCategoryComboTree(); /** * 指定父级视图菜单分类 id,ViewMenuCategoryComboTree list,获取所有子级视图菜单分类 * * @param parentId 父级视图菜单分类 id * @param viewMenuCategoryComboTreeList ViewMenuCategoryComboTree list * @return List */ List getViewMenuCategoryChildrenComboTree(long parentId, List viewMenuCategoryComboTreeList); } ================================================ FILE: src/main/java/com/godcheese/nimrod/user/service/ViewMenuService.java ================================================ package com.godcheese.nimrod.user.service; import com.godcheese.nimrod.common.easyui.Pagination; import com.godcheese.nimrod.user.entity.ViewMenuEntity; import java.util.List; /** * @author godcheese [godcheese@outlook.com] * @date 2018-02-22 */ public interface ViewMenuService { /** * 新增视图菜单 * * @param viewMenuEntity ViewMenuEntity * @return ViewMenuEntity */ ViewMenuEntity addOne(ViewMenuEntity viewMenuEntity); /** * 保存视图菜单 * * @param viewMenuEntity ViewMenuEntity * @return ViewMenuEntity */ ViewMenuEntity saveOne(ViewMenuEntity viewMenuEntity); /** * 指定视图菜单 id list,批量删除视图菜单 * * @param idList 视图菜单 id list * @return int */ int deleteAll(List idList); /** * 指定视图菜单 id,获取视图菜单 * * @param id 视图菜单 id * @return ViewMenuEntity */ ViewMenuEntity getOne(Long id); /** * 指定用户 id、视图菜单分类 id,获取所有视图菜单 * * @param userId 用户 id * @param viewMenuCategoryId 视图菜单分类 id * @return List */ List listAllByUserIdAndMenuCategoryId(Long userId, Long viewMenuCategoryId); /** * 指定视图菜单分类 id、角色 id,分页获取所有视图菜单 * * @param page 页 * @param rows 每页显示数量 * @param viewMenuCategoryId 视图菜单分类 id * @return Pagination */ Pagination pageAllByViewMenuCategoryId(Integer page, Integer rows, Long viewMenuCategoryId, Long roleId); // /** // * 指定视图菜单名称,模糊搜索获取所有视图菜单 // * @param name 视图菜单名称 // * @return List // */ // List searchAllByName(String name); // /** // * 指定用户 id,获取用户的树形视图菜单 // * @param userId // * @return // */ // List listAllAsAntdVueMenuByUserId(Long userId); } ================================================ FILE: src/main/java/com/godcheese/nimrod/user/service/ViewPageApiService.java ================================================ package com.godcheese.nimrod.user.service; import java.util.List; /** * @author godcheese [godcheese@outlook.com] * @date 2018-02-22 */ public interface ViewPageApiService { // /** // * 指定视图页面 id、API id,判断是否关联 API // * @param viewPageId 视图页面 id // * @param apiId API id // * @return Map // */ // Map isAssociatedByViewPageIdAndApiId(Long viewPageId, Long apiId); /** * 指定视图页面 id、API id list,批量关联 API * * @param viewPageId 视图页面 id * @param apiIdList API id list * @return int */ int associateAllByViewPageIdAndApiIdList(Long viewPageId, List apiIdList); /** * 指定视图页面 id、API id list,批量撤销关联 API * * @param viewPageId 视图页面 id * @param apiIdList API id list * @return int */ int revokeAssociateAllByViewPageIdAndApiIdList(Long viewPageId, List apiIdList); } ================================================ FILE: src/main/java/com/godcheese/nimrod/user/service/ViewPageCategoryService.java ================================================ package com.godcheese.nimrod.user.service; import com.godcheese.nimrod.common.easyui.ComboTree; import com.godcheese.nimrod.user.entity.ViewPageCategoryEntity; import com.godcheese.tile.web.exception.BaseResponseException; import java.util.List; /** * @author godcheese [godcheese@outlook.com] * @date 2018-02-22 */ public interface ViewPageCategoryService { /** * 新增视图页面分类 * * @param viewPageCategoryEntity ViewPageCategoryEntity * @return ViewPageCategoryEntity */ ViewPageCategoryEntity addOne(ViewPageCategoryEntity viewPageCategoryEntity); /** * 保存视图页面分类 * * @param viewPageCategoryEntity ViewPageCategoryEntity * @return ViewPageCategoryEntity */ ViewPageCategoryEntity saveOne(ViewPageCategoryEntity viewPageCategoryEntity); /** * 指定视图页面分类 id list,批量删除视图页面分类 * * @param idList 视图页面分类 id list * @return int * @throws BaseResponseException BaseResponseException */ int deleteAll(List idList) throws BaseResponseException; /** * 指定视图页面分类 id,获取所有视图页面分类 * * @param id 数据字典 id * @return ViewPageCategoryEntity */ ViewPageCategoryEntity getOne(Long id); /** * 获取所有父级视图页面分类 * * @return List */ List listAllParent(); /** * 指定父级视图页面分类 id,获取所有视图页面分类 * * @param parentId 父级视图页面分类 id * @return List */ List listAllByParentId(Long parentId); /** * 获取所有视图页面分类,以 ComboTree 形式展示 * * @return List */ List listAllViewPageCategoryComboTree(); /** * 指定父级视图页面分类 id,ViewPageCategoryComboTree list,获取所有子级视图页面分类 * * @param parentId 父级视图页面分类 id * @param viewPageCategoryComboTreeList ViewPageCategoryComboTree list * @return List */ List getViewPageCategoryChildrenComboTree(long parentId, List viewPageCategoryComboTreeList); } ================================================ FILE: src/main/java/com/godcheese/nimrod/user/service/ViewPageComponentApiService.java ================================================ package com.godcheese.nimrod.user.service; import java.util.List; /** * @author godcheese [godcheese@outlook.com] * @date 2018-02-22 */ public interface ViewPageComponentApiService { // /** // * 指定视图页面组件 id、API id,判断是否关联 API // * @param viewPageComponentId 视图页面组件 id // * @param apiId API id // * @return Map // */ // Map isAssociatedByViewPageComponentIdAndApiId(Long viewPageComponentId, Long apiId); /** * 指定视图页面组件 id、API id list,批量关联 API * * @param viewPageComponentId 视图页面组件 id * @param apiIdList API id list * @return int */ int associateAllByViewPageComponentIdAndApiIdList(Long viewPageComponentId, List apiIdList); /** * 指定视图页面组件 id、API id list,批量撤销关联 API * * @param viewPageComponentId 视图页面组件 id * @param apiIdList API id list * @return int */ int revokeAssociateAllByViewPageComponentIdAndApiIdList(Long viewPageComponentId, List apiIdList); } ================================================ FILE: src/main/java/com/godcheese/nimrod/user/service/ViewPageComponentService.java ================================================ package com.godcheese.nimrod.user.service; import com.godcheese.nimrod.common.easyui.Pagination; import com.godcheese.nimrod.user.entity.ViewPageComponentEntity; import com.godcheese.tile.web.exception.BaseResponseException; import java.util.List; /** * @author godcheese [godcheese@outlook.com] * @date 2018-02-22 */ public interface ViewPageComponentService { /** * 新增视图页面组件 * * @param viewPageComponentEntity ViewPageComponentEntity * @return ViewPageComponentEntity * @throws BaseResponseException BaseResponseException */ ViewPageComponentEntity addOne(ViewPageComponentEntity viewPageComponentEntity) throws BaseResponseException; /** * 保存视图页面组件 * * @param viewPageComponentEntity ViewPageComponentEntity * @return ViewPageComponentEntity * @throws BaseResponseException BaseResponseException */ ViewPageComponentEntity saveOne(ViewPageComponentEntity viewPageComponentEntity) throws BaseResponseException; /** * 指定视图页面组件 id,批量删除视图页面组件 * * @param idList 视图页面组件 id list * @return int */ int deleteAll(List idList); /** * 指定视图页面组件 id,获取视图页面组件 * * @param id 视图页面组件 id * @return ViewPageComponentEntity */ ViewPageComponentEntity getOne(Long id); /** * 指定视图页面 id,分页获取所有视图页面组件 * * @param page 页 * @param rows 每页显示数量 * @param viewPageId 视图页面 id * @return Pagination */ Pagination pageAllByViewPageId(Integer page, Integer rows, Long viewPageId, Long roleId); } ================================================ FILE: src/main/java/com/godcheese/nimrod/user/service/ViewPageService.java ================================================ package com.godcheese.nimrod.user.service; import com.godcheese.nimrod.common.easyui.Pagination; import com.godcheese.nimrod.user.entity.ViewPageEntity; import com.godcheese.tile.web.exception.BaseResponseException; import java.util.List; /** * @author godcheese [godcheese@outlook.com] * @date 2018-02-22 */ public interface ViewPageService { /** * 新增视图页面 * * @param viewPageEntity ViewPageEntity * @return ViewPageEntity * @throws BaseResponseException BaseResponseException */ ViewPageEntity addOne(ViewPageEntity viewPageEntity) throws BaseResponseException; /** * 保存视图页面 * * @param viewPageEntity ViewPageEntity * @return ViewPageEntity * @throws BaseResponseException BaseResponseException */ ViewPageEntity saveOne(ViewPageEntity viewPageEntity) throws BaseResponseException; /** * 指定视图页面 id,批量删除视图页面 * * @param idList 视图页面 id list * @return int */ int deleteAll(List idList); /** * 指定视图页面 id,获取视图页面 * * @param id 视图页面 id * @return ViewPageEntity */ ViewPageEntity getOne(Long id); /** * 指定视图页面分类 id、角色 id,分页获取所有视图页面 * * @param page 页 * @param rows 每页显示数量 * @param viewPageCategoryId 视图页面分类 id * @param roleId 角色 id * @return */ Pagination pageAllByViewPageCategoryId(Integer page, Integer rows, Long viewPageCategoryId, Long roleId); } ================================================ FILE: src/main/java/com/godcheese/nimrod/user/service/impl/ApiCategoryServiceImpl.java ================================================ package com.godcheese.nimrod.user.service.impl; import com.godcheese.nimrod.common.easyui.ComboTree; import com.godcheese.nimrod.common.easyui.EasyUi; import com.godcheese.nimrod.common.others.FailureEntity; import com.godcheese.nimrod.user.entity.ApiCategoryEntity; import com.godcheese.nimrod.user.entity.ApiEntity; import com.godcheese.nimrod.user.mapper.ApiCategoryMapper; import com.godcheese.nimrod.user.mapper.ApiMapper; import com.godcheese.nimrod.user.service.ApiCategoryService; import com.godcheese.tile.web.exception.BaseResponseException; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import java.util.ArrayList; import java.util.Date; import java.util.List; /** * @author godcheese [godcheese@outlook.com] * @date 2018-02-22 */ @Service public class ApiCategoryServiceImpl implements ApiCategoryService { @Autowired private ApiCategoryMapper apiCategoryMapper; @Autowired private ApiMapper apiMapper; @Autowired private FailureEntity failureEntity; @Override @Transactional(rollbackFor = Throwable.class) public ApiCategoryEntity addOne(ApiCategoryEntity apiCategoryEntity) { Date date = new Date(); apiCategoryEntity.setGmtModified(date); apiCategoryEntity.setGmtCreated(date); apiCategoryMapper.insertOne(apiCategoryEntity); return apiCategoryEntity; } @Override @Transactional(rollbackFor = Throwable.class) public ApiCategoryEntity saveOne(ApiCategoryEntity apiCategoryEntity) throws BaseResponseException { if (apiCategoryEntity.getId().equals(apiCategoryEntity.getParentId())) { throw new BaseResponseException(failureEntity.i18n("api_category.save_fail_do_not_save_self_api_category")); } apiCategoryEntity.setGmtModified(new Date()); apiCategoryMapper.updateOne(apiCategoryEntity); return apiCategoryEntity; } @Override @Transactional(rollbackFor = Throwable.class) public int deleteAll(List idList) throws BaseResponseException { int result = 0; for (Long id : idList) { ApiCategoryEntity viewPageCategoryEntity = apiCategoryMapper.getOneByParentId(id); if (viewPageCategoryEntity != null) { throw new BaseResponseException(failureEntity.i18n("api_category.delete_fail_has_category")); } ApiEntity apiEntity = apiMapper.getOneByApiCategoryId(id); if (apiEntity != null) { throw new BaseResponseException(failureEntity.i18n("api_category.delete_fail_has_api")); } apiCategoryMapper.deleteOne(id); result++; } return result; } @Override public ApiCategoryEntity getOne(Long id) { return apiCategoryMapper.getOne(id); } @Override public List listAllParent() { List apiCategoryEntityList = apiCategoryMapper.listAllByParentIdIsNull(); List apiCategoryEntityListResult = new ArrayList<>(); for (ApiCategoryEntity apiCategoryEntity : apiCategoryEntityList) { if (apiCategoryMapper.getOneByParentId(apiCategoryEntity.getId()) != null) { apiCategoryEntity.setState(EasyUi.State.CLOSED); } apiCategoryEntityListResult.add(apiCategoryEntity); } return apiCategoryEntityListResult; } @Override public List listAllByParentId(Long parentId) { List apiCategoryEntityList = apiCategoryMapper.listAllByParentId(parentId); List apiCategoryEntityListResult = new ArrayList<>(); for (ApiCategoryEntity apiCategoryEntity : apiCategoryEntityList) { if (apiCategoryMapper.getOneByParentId(apiCategoryEntity.getId()) != null) { apiCategoryEntity.setState(EasyUi.State.CLOSED); } apiCategoryEntityListResult.add(apiCategoryEntity); } return apiCategoryEntityListResult; } @Override public List listAllApiCategoryComboTree() { List comboTreeList = new ArrayList<>(0); List apiCategoryEntityList = apiCategoryMapper.listAll(); for (ApiCategoryEntity apiCategoryEntity : apiCategoryEntityList) { ComboTree comboTree = new ComboTree(); comboTree.setId(apiCategoryEntity.getId()); comboTree.setText(apiCategoryEntity.getName()); comboTree.setParentId(apiCategoryEntity.getParentId()); comboTreeList.add(comboTree); } return comboTreeList; } @Override public List getApiCategoryChildrenComboTree(long parentId, List apiCategoryComboTreeList) { List children = new ArrayList<>(0); for (ComboTree comboTree : apiCategoryComboTreeList) { if (comboTree.getParentId() != null && comboTree.getParentId().equals(parentId)) { children.add(comboTree); } } for (ComboTree child : children) { List childChildren = getApiCategoryChildrenComboTree(child.getId(), apiCategoryComboTreeList); child.setChildren(childChildren); } if (children.size() == 0) { return null; } return children; } } ================================================ FILE: src/main/java/com/godcheese/nimrod/user/service/impl/ApiServiceImpl.java ================================================ package com.godcheese.nimrod.user.service.impl; import com.godcheese.nimrod.common.easyui.Pagination; import com.godcheese.nimrod.common.others.FailureEntity; import com.godcheese.nimrod.system.service.DictionaryService; import com.godcheese.nimrod.user.entity.ApiEntity; import com.godcheese.nimrod.user.mapper.ApiMapper; import com.godcheese.nimrod.user.mapper.RoleAuthorityMapper; import com.godcheese.nimrod.user.mapper.ViewPageApiMapper; import com.godcheese.nimrod.user.mapper.ViewPageComponentApiMapper; import com.godcheese.nimrod.user.service.ApiService; import com.godcheese.tile.web.exception.BaseResponseException; import com.github.pagehelper.Page; import com.github.pagehelper.PageHelper; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import java.util.ArrayList; import java.util.Date; import java.util.List; /** * @author godcheese [godcheese@outlook.com] * @date 2018-02-22 */ @Service public class ApiServiceImpl implements ApiService { private static final Logger LOGGER = LoggerFactory.getLogger(ApiServiceImpl.class); @Autowired private ApiMapper apiMapper; @Autowired private FailureEntity failureEntity; @Autowired private ViewPageComponentApiMapper viewPageComponentApiMapper; @Autowired private ViewPageApiMapper viewPageApiMapper; @Autowired private DictionaryService dictionaryService; @Autowired private RoleAuthorityMapper roleAuthorityMapper; @Override @Transactional(rollbackFor = Throwable.class) public ApiEntity addOne(ApiEntity apiEntity) throws BaseResponseException { Date date = new Date(); String authority = apiEntity.getAuthority().toUpperCase(); if (apiMapper.getOneByAuthority(authority) != null) { throw new BaseResponseException(failureEntity.i18n("api.add_fail_authority_exists")); } apiEntity.setAuthority(authority); apiEntity.setGmtModified(date); apiEntity.setGmtCreated(date); apiMapper.insertOne(apiEntity); return apiEntity; } @Override @Transactional(rollbackFor = Throwable.class) public ApiEntity saveOne(ApiEntity apiEntity) { ApiEntity apiEntity1 = apiMapper.getOne(apiEntity.getId()); apiEntity1.setName(apiEntity.getName()); apiEntity1.setUrl(apiEntity.getUrl()); apiEntity1.setAuthority(apiEntity.getAuthority().toUpperCase()); apiEntity1.setApiCategoryId(apiEntity.getApiCategoryId()); apiEntity1.setSort(apiEntity.getSort()); apiEntity1.setRemark(apiEntity.getRemark()); apiEntity1.setGmtModified(new Date()); apiMapper.updateOne(apiEntity1); return apiEntity1; } @Override @Transactional(rollbackFor = Throwable.class) public int deleteAll(List idList) { return apiMapper.deleteAll(idList); } @Override public ApiEntity getOne(Long id) { return apiMapper.getOne(id); } @Override public Pagination pageAllByApiCategoryId(Integer page, Integer rows, Long apiCategoryId, Long viewPageId, Long viewPageComponentId, Long roleId) { Pagination pagination = new Pagination<>(); PageHelper.startPage(page, rows); Page apiEntityPage = apiMapper.pageAllByApiCategoryId(apiCategoryId); List apiEntityList = apiEntityPage.getResult(); List apiEntityListResult = new ArrayList<>(); Integer isOrNotIs = Integer.valueOf((String) dictionaryService.get("IS_OR_NOT", "IS")); Integer isOrNotNot = Integer.valueOf((String) dictionaryService.get("IS_OR_NOT", "NOT")); if (viewPageId != null) { for (ApiEntity apiEntity : apiEntityList) { if (viewPageApiMapper.getOneByViewPageIdAndApiId(viewPageId, apiEntity.getId()) != null) { // 是否已关联,IS=是,NOT=否 apiEntity.setIsAssociated(isOrNotIs); } else { apiEntity.setIsAssociated(isOrNotNot); } apiEntityListResult.add(apiEntity); } pagination.setRows(apiEntityListResult); } else if (viewPageComponentId != null) { for (ApiEntity apiEntity : apiEntityList) { if (viewPageComponentApiMapper.getOneByViewPageComponentIdAndApiId(viewPageComponentId, apiEntity.getId()) != null) { // 是否已关联,IS=是,NOT=否 apiEntity.setIsAssociated(isOrNotIs); } else { apiEntity.setIsAssociated(isOrNotNot); } apiEntityListResult.add(apiEntity); } pagination.setRows(apiEntityListResult); } else if (roleId != null) { for (ApiEntity apiEntity : apiEntityList) { if (roleAuthorityMapper.getOneByRoleIdAndAuthority(roleId, apiEntity.getAuthority()) != null) { // 是否已授权,IS=是,NOT=否 apiEntity.setIsGranted(isOrNotIs); } else { apiEntity.setIsGranted(isOrNotNot); } apiEntityListResult.add(apiEntity); } pagination.setRows(apiEntityListResult); } else { pagination.setRows(apiEntityList); } pagination.setTotal(apiEntityPage.getTotal()); return pagination; } } ================================================ FILE: src/main/java/com/godcheese/nimrod/user/service/impl/DepartmentServiceImpl.java ================================================ package com.godcheese.nimrod.user.service.impl; import com.godcheese.nimrod.common.easyui.ComboTree; import com.godcheese.nimrod.common.easyui.Pagination; import com.godcheese.nimrod.common.easyui.TreeGrid; import com.godcheese.nimrod.common.others.FailureEntity; import com.godcheese.nimrod.user.entity.DepartmentEntity; import com.godcheese.nimrod.user.entity.UserEntity; import com.godcheese.nimrod.user.mapper.DepartmentMapper; import com.godcheese.nimrod.user.mapper.UserMapper; import com.godcheese.nimrod.user.service.DepartmentService; import com.godcheese.tile.web.exception.BaseResponseException; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import java.util.ArrayList; import java.util.Collections; import java.util.Date; import java.util.List; /** * @author godcheese [godcheese@outlook.com] * @date 2018-02-22 */ @Service public class DepartmentServiceImpl implements DepartmentService { private static final Logger LOGGER = LoggerFactory.getLogger(DepartmentServiceImpl.class); @Autowired private DepartmentMapper departmentMapper; @Autowired private UserMapper userMapper; @Autowired private FailureEntity failureEntity; @Override @Transactional(rollbackFor = Throwable.class) public DepartmentEntity addOne(DepartmentEntity departmentEntity) { Date date = new Date(); departmentEntity.setGmtModified(date); departmentEntity.setGmtCreated(date); departmentMapper.insertOne(departmentEntity); return departmentEntity; } @Override @Transactional(rollbackFor = Throwable.class) public DepartmentEntity saveOne(DepartmentEntity departmentEntity) { departmentEntity.setGmtModified(new Date()); departmentMapper.updateOne(departmentEntity); return departmentEntity; } @Override @Transactional(rollbackFor = Throwable.class) public int deleteAll(List idList) throws BaseResponseException { int result = 0; for (Long id : idList) { UserEntity userEntity = userMapper.getOneByDepartmentId(id); if (userEntity != null) { throw new BaseResponseException(failureEntity.i18n("department.delete_fail_has_user")); } DepartmentEntity departmentEntity = departmentMapper.getOneByParentId(id); if (departmentEntity != null) { throw new BaseResponseException(failureEntity.i18n("department.delete_fail_has_children_department")); } departmentMapper.deleteOne(id); result++; } return result; } @Override public DepartmentEntity getOne(Long id) { return departmentMapper.getOne(id); } @Override public List listAllParent() { return departmentMapper.listAllParentIdIsNull(); } @Override public List listAllByParentId(Long parentId) { return departmentMapper.listAllByParentId(parentId); } @Override public Pagination pageAll(Integer page, Integer rows) { return null; } // /** // * 根据用户关联角色来获取所有角色 // * // * @param userRoleEntityList 用户角色 list // * @return List // */ // @Override // public List listAllByUserRoleList(List userRoleEntityList) { // List roleEntityList = null; // if (userRoleEntityList != null && !userRoleEntityList.isEmpty()) { // roleEntityList = new ArrayList<>(); // for (UserRoleEntity userRoleEntity : userRoleEntityList) { // RoleEntity roleEntity = roleMapper.getOne(userRoleEntity.getRoleId()); // roleEntityList.add(roleEntity); // } // } // return roleEntityList; // } @Override public List listAll() { return departmentMapper.listAll(); } // @Override // public List listAllByUserId(Long userId) { // List roleEntityList = new ArrayList<>(); // List userRoleEntityList = userRoleMapper.listAllByUserId(userId); // if (userRoleEntityList != null && !userRoleEntityList.isEmpty()) { // for (UserRoleEntity userRoleEntity : userRoleEntityList) { // RoleEntity roleEntity = roleMapper.getOne(userRoleEntity.getRoleId()); // roleEntityList.add(roleEntity); // } // } // return roleEntityList; // } /** * 根据子级部门 id 获取所有父级部门 * * @param id * @return */ @Override public List listAllByDepartmentId(Long id) { List departmentEntityResultList = new ArrayList<>(0); List departmentEntityList = listAll(); DepartmentEntity departmentEntity = getOne(id); departmentEntityResultList.add(departmentEntity); forEachDepartmentParent(departmentEntity, departmentEntityList, departmentEntityResultList); Collections.reverse(departmentEntityResultList); return departmentEntityResultList; } public void forEachDepartmentParent(DepartmentEntity departmentEntity, List departmentEntityList, List departmentEntityResultList) { for (DepartmentEntity entity : departmentEntityList) { if (departmentEntity.getParentId() != null) { if (departmentEntity.getParentId().equals(entity.getId())) { departmentEntityResultList.add(entity); forEachDepartmentParent(entity, departmentEntityList, departmentEntityResultList); } } } } @Override public List listAllDepartmentComboTree() { List comboTreeList = new ArrayList<>(0); List departmentEntityList = listAll(); for (DepartmentEntity departmentEntity : departmentEntityList) { ComboTree comboTree = new ComboTree(); comboTree.setId(departmentEntity.getId()); comboTree.setText(departmentEntity.getName()); comboTree.setParentId(departmentEntity.getParentId()); comboTreeList.add(comboTree); } return comboTreeList; } @Override public List getDepartmentChildrenComboTree(long parentId, List departmentComboTreeList) { List children = new ArrayList<>(0); for (ComboTree comboTree : departmentComboTreeList) { if (comboTree.getParentId() != null && comboTree.getParentId().equals(parentId)) { children.add(comboTree); } } for (ComboTree child : children) { List childChildren = getDepartmentChildrenComboTree(child.getId(), departmentComboTreeList); if (childChildren == null) { childChildren = new ArrayList<>(0); } child.setChildren(childChildren); } return children; } @Override public List listAllDepartmentTreeGrid() { List treeGridList = new ArrayList<>(0); List departmentEntityList = listAll(); for (DepartmentEntity departmentEntity : departmentEntityList) { TreeGrid treeGrid = new TreeGrid(); treeGrid.setId(departmentEntity.getId()); treeGrid.setName(departmentEntity.getName()); treeGrid.setParentId(departmentEntity.getParentId()); treeGridList.add(treeGrid); } return treeGridList; } @Override public List getDepartmentChildrenTreeGrid(long parentId, List departmentTreeGridList) { List children = new ArrayList<>(0); for (TreeGrid treeGrid : departmentTreeGridList) { if (treeGrid.getParentId() != null && treeGrid.getParentId().equals(parentId)) { children.add(treeGrid); } } for (TreeGrid child : children) { List childChildren = getDepartmentChildrenTreeGrid(child.getId(), departmentTreeGridList); if (childChildren == null) { childChildren = new ArrayList<>(0); } child.setChildren(childChildren); } return children; } } ================================================ FILE: src/main/java/com/godcheese/nimrod/user/service/impl/RoleAuthorityServiceImpl.java ================================================ package com.godcheese.nimrod.user.service.impl; import com.godcheese.nimrod.user.entity.*; import com.godcheese.nimrod.user.mapper.*; import com.godcheese.nimrod.user.entity.ApiEntity; import com.godcheese.nimrod.user.entity.ViewPageApiEntity; import com.godcheese.nimrod.user.entity.ViewPageComponentEntity; import com.godcheese.nimrod.user.entity.ViewPageEntity; import com.godcheese.nimrod.user.mapper.*; import com.godcheese.nimrod.user.service.RoleAuthorityService; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; /** * @author godcheese [godcheese@outlook.com] * @date 2018-02-22 */ @Service public class RoleAuthorityServiceImpl implements RoleAuthorityService { @Autowired private RoleAuthorityMapper roleAuthorityMapper; @Autowired private ViewPageMapper viewPageMapper; @Autowired private ViewPageApiMapper viewPageApiMapper; @Autowired private ApiMapper apiMapper; @Autowired private ViewPageComponentMapper viewPageComponentMapper; @Autowired private ViewPageComponentApiMapper viewPageComponentApiMapper; @Override public RoleAuthorityEntity getOne(Long id) { return roleAuthorityMapper.getOne(id); } @Override @Transactional(rollbackFor = Throwable.class) public int grantAllByRoleIdAndApiAuthorityList(Long roleId, List authorityList) { // API authority List apiAuthorityList = new ArrayList<>(); // 最终被添加的 authority List authorityList3 = new ArrayList<>(); for (String authority : authorityList) { if (!"".equals(authority.trim())) { apiAuthorityList.add(authority); } } RoleAuthorityEntity roleAuthorityEntity; for (String a : apiAuthorityList) { roleAuthorityEntity = roleAuthorityMapper.getOneByRoleIdAndAuthority(roleId, a); if (roleAuthorityEntity == null) { authorityList3.add(a); } } // authority 全部写入数据库 if (!authorityList3.isEmpty()) { roleAuthorityMapper.insertAllByRoleIdAndAuthorityList(roleId, authorityList3); } return authorityList3.size(); } @Override @Transactional(rollbackFor = Throwable.class) public int revokeAllByRoleIdAndApiAuthorityList(Long roleId, List authorityList) { // API authority List apiAuthorityList = new ArrayList<>(); // 最终被添加的 authority List authorityList3 = new ArrayList<>(); for (String authority : authorityList) { if (!"".equals(authority.trim())) { apiAuthorityList.add(authority); } } RoleAuthorityEntity roleAuthorityEntity; for (String a : apiAuthorityList) { roleAuthorityEntity = roleAuthorityMapper.getOneByRoleIdAndAuthority(roleId, a); if (roleAuthorityEntity != null) { authorityList3.add(a); } } // authority 全部删除 if (!authorityList3.isEmpty()) { roleAuthorityMapper.deleteAllByRoleIdAndAuthorityList(roleId, authorityList3); } return authorityList3.size(); } @Override @Transactional(rollbackFor = Throwable.class) public int grantAllByRoleIdAndViewPageAuthorityList(Long roleId, List authorityList) { // 视图页面 authority List viewPageAuthorityList = new ArrayList<>(); // 视图页面组件关联的 API authority List apiAuthorityList = new ArrayList<>(); // 最终被添加的 authority List authorityList3 = new ArrayList<>(); for (String authority : authorityList) { if (!"".equals(authority.trim())) { viewPageAuthorityList.add(authority); ViewPageEntity viewPageEntity = viewPageMapper.getOneByAuthority(authority); if (viewPageEntity != null) { List viewPageApiEntityList = viewPageApiMapper.listAllByViewPageId(viewPageEntity.getId()); if (viewPageApiEntityList != null && !viewPageApiEntityList.isEmpty()) { for (ViewPageApiEntity viewPageApiEntity : viewPageApiEntityList) { ApiEntity apiEntity = apiMapper.getOne(viewPageApiEntity.getApiId()); if (apiEntity != null) { apiAuthorityList.add(apiEntity.getAuthority()); } } } } } } // 视图页面关联的 API authority 全部放入 viewPageAuthorityList viewPageAuthorityList.addAll(apiAuthorityList); RoleAuthorityEntity roleAuthorityEntity; for (String a : viewPageAuthorityList) { roleAuthorityEntity = roleAuthorityMapper.getOneByRoleIdAndAuthority(roleId, a); if (roleAuthorityEntity == null) { authorityList3.add(a); } } // authority 全部写入数据库 if (!authorityList3.isEmpty()) { roleAuthorityMapper.insertAllByRoleIdAndAuthorityList(roleId, authorityList3); } return authorityList3.size(); } @Override @Transactional(rollbackFor = Throwable.class) public int revokeAllByRoleIdAndViewPageAuthorityList(Long roleId, List authorityList) { // 视图页面 authority List viewPageAuthorityList = new ArrayList<>(); // 视图页面组件关联的 API authority List apiAuthorityList = new ArrayList<>(); // 最终被添加的 authority List authorityList3 = new ArrayList<>(); for (String authority : authorityList) { if (!"".equals(authority.trim())) { viewPageAuthorityList.add(authority); ViewPageEntity viewPageEntity = viewPageMapper.getOneByAuthority(authority); if (viewPageEntity != null) { List viewPageApiEntityList = viewPageApiMapper.listAllByViewPageId(viewPageEntity.getId()); if (viewPageApiEntityList != null && !viewPageApiEntityList.isEmpty()) { for (ViewPageApiEntity viewPageApiEntity : viewPageApiEntityList) { ApiEntity apiEntity = apiMapper.getOne(viewPageApiEntity.getApiId()); if (apiEntity != null) { apiAuthorityList.add(apiEntity.getAuthority()); } } } } } } // 视图页面组件关联的 API authority 全部放入 viewPageAuthorityList viewPageAuthorityList.addAll(apiAuthorityList); RoleAuthorityEntity roleAuthorityEntity = null; for (String a : viewPageAuthorityList) { roleAuthorityEntity = roleAuthorityMapper.getOneByRoleIdAndAuthority(roleId, a); if (roleAuthorityEntity != null) { authorityList3.add(a); } } // authority 全部删除 if (!authorityList3.isEmpty()) { roleAuthorityMapper.deleteAllByRoleIdAndAuthorityList(roleId, authorityList3); } return authorityList3.size(); } @Override @Transactional(rollbackFor = Throwable.class) public int grantAllByRoleIdAndViewPageComponentAuthorityList(Long roleId, List authorityList) { // 视图页面组件 authority List pageComponentAuthorityList = new ArrayList<>(); // 视图页面组件关联的 API authority List apiAuthorityList = new ArrayList<>(); // 最终被添加的 authority List authorityList3 = new ArrayList<>(); for (String authority : authorityList) { if (!"".equals(authority.trim())) { pageComponentAuthorityList.add(authority); ViewPageComponentEntity viewPageComponentEntity = viewPageComponentMapper.getOneByAuthority(authority); if (viewPageComponentEntity != null) { List viewPageComponentApiEntityList = viewPageComponentApiMapper.listAllByViewPageComponentId(viewPageComponentEntity.getId()); if (viewPageComponentApiEntityList != null && !viewPageComponentApiEntityList.isEmpty()) { for (ViewPageComponentApiEntity viewPageApiEntity : viewPageComponentApiEntityList) { ApiEntity apiEntity = apiMapper.getOne(viewPageApiEntity.getApiId()); if (apiEntity != null) { apiAuthorityList.add(apiEntity.getAuthority()); } } } } } } // 视图页面组件关联的 API authority 全部放入 pageComponentAuthorityList pageComponentAuthorityList.addAll(apiAuthorityList); RoleAuthorityEntity roleAuthorityEntity = null; for (String a : pageComponentAuthorityList) { roleAuthorityEntity = roleAuthorityMapper.getOneByRoleIdAndAuthority(roleId, a); if (roleAuthorityEntity == null) { authorityList3.add(a); } } // authority 全部写入数据库 if (!authorityList3.isEmpty()) { roleAuthorityMapper.insertAllByRoleIdAndAuthorityList(roleId, authorityList3); } return authorityList3.size(); } @Override @Transactional(rollbackFor = Throwable.class) public int revokeAllByRoleIdAndViewPageComponentAuthorityList(Long roleId, List authorityList) { // 视图页面组件 authority List pageComponentAuthorityList = new ArrayList<>(); // 视图页面组件关联的 API authority List apiAuthorityList = new ArrayList<>(); // 最终被添加的 authority List authorityList3 = new ArrayList<>(); for (String authority : authorityList) { if (!"".equals(authority.trim())) { pageComponentAuthorityList.add(authority); ViewPageComponentEntity viewPageComponentEntity = viewPageComponentMapper.getOneByAuthority(authority); if (viewPageComponentEntity != null) { List viewPageComponentApiEntityList = viewPageComponentApiMapper.listAllByViewPageComponentId(viewPageComponentEntity.getId()); if (viewPageComponentApiEntityList != null && !viewPageComponentApiEntityList.isEmpty()) { for (ViewPageComponentApiEntity viewPageApiEntity : viewPageComponentApiEntityList) { ApiEntity apiEntity = apiMapper.getOne(viewPageApiEntity.getApiId()); if (apiEntity != null) { apiAuthorityList.add(apiEntity.getAuthority()); } } } } } } // 视图页面组件关联的 API authority 全部放入 pageComponentAuthorityList pageComponentAuthorityList.addAll(apiAuthorityList); RoleAuthorityEntity roleAuthorityEntity = null; for (String a : pageComponentAuthorityList) { roleAuthorityEntity = roleAuthorityMapper.getOneByRoleIdAndAuthority(roleId, a); if (roleAuthorityEntity != null) { authorityList3.add(a); } } // authority 全部删除 if (!authorityList3.isEmpty()) { roleAuthorityMapper.deleteAllByRoleIdAndAuthorityList(roleId, authorityList3); } return authorityList3.size(); } @Override public Map isGrantedByRoleIdAndAuthority(Long roleId, String authority) { Map data = new HashMap<>(1); data.put("isGranted", false); RoleAuthorityEntity roleAuthorityEntity = roleAuthorityMapper.getOneByRoleIdAndAuthority(roleId, authority); if (roleAuthorityEntity != null) { data.put("isGranted", true); } return data; } } ================================================ FILE: src/main/java/com/godcheese/nimrod/user/service/impl/RoleServiceImpl.java ================================================ package com.godcheese.nimrod.user.service.impl; import com.godcheese.nimrod.common.easyui.Pagination; import com.godcheese.nimrod.common.others.FailureEntity; import com.godcheese.nimrod.user.entity.RoleEntity; import com.godcheese.nimrod.user.entity.UserRoleEntity; import com.godcheese.nimrod.user.mapper.RoleAuthorityMapper; import com.godcheese.nimrod.user.mapper.RoleMapper; import com.godcheese.nimrod.user.mapper.UserRoleMapper; import com.godcheese.nimrod.user.service.RoleService; import com.godcheese.tile.web.exception.BaseResponseException; import com.github.pagehelper.Page; import com.github.pagehelper.PageHelper; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import java.util.ArrayList; import java.util.Date; import java.util.List; /** * @author godcheese [godcheese@outlook.com] * @date 2018-02-22 */ @Service public class RoleServiceImpl implements RoleService { @Autowired private RoleMapper roleMapper; @Autowired private UserRoleMapper userRoleMapper; @Autowired private FailureEntity failureEntity; @Autowired private RoleAuthorityMapper roleAuthorityMapper; @Override @Transactional(rollbackFor = Throwable.class) public RoleEntity addOne(RoleEntity roleEntity) throws BaseResponseException { Date date = new Date(); String value = roleEntity.getValue().toUpperCase(); RoleEntity roleEntity2 = roleMapper.getOneByValue(value); if (roleEntity2 != null) { throw new BaseResponseException(failureEntity.i18n("role.add_fail_value_exists")); } roleEntity.setGmtModified(date); roleEntity.setGmtCreated(date); roleMapper.insertOne(roleEntity); return roleEntity; } @Override @Transactional(rollbackFor = Throwable.class) public RoleEntity saveOne(RoleEntity roleEntity) throws BaseResponseException { String value = roleEntity.getValue().toUpperCase(); RoleEntity roleEntity2 = roleMapper.getOneByValue(value); if (roleEntity2 != null && !roleEntity2.getId().equals(roleEntity.getId())) { throw new BaseResponseException(failureEntity.i18n("role.save_fail_value_exists")); } roleEntity.setGmtModified(new Date()); roleMapper.updateOne(roleEntity); return roleEntity; } @Override @Transactional(rollbackFor = Throwable.class) public int deleteAll(List idList) throws BaseResponseException { int result = 0; for (Long id : idList) { UserRoleEntity userRoleEntity = userRoleMapper.getOneByRoleId(id); if (userRoleEntity != null) { throw new BaseResponseException(failureEntity.i18n("role.delete_fail_has_user")); } roleMapper.deleteOne(id); roleAuthorityMapper.deleteAllByRoleId(id); result++; } return result; } @Override public RoleEntity getOne(Long id) { return roleMapper.getOne(id); } /** * 根据用户关联角色来获取所有角色 * * @param userRoleEntityList 用户角色 list * @return List */ @Override public List listAllByUserRoleList(List userRoleEntityList) { List roleEntityList = null; if (userRoleEntityList != null && !userRoleEntityList.isEmpty()) { roleEntityList = new ArrayList<>(); for (UserRoleEntity userRoleEntity : userRoleEntityList) { RoleEntity roleEntity = roleMapper.getOne(userRoleEntity.getRoleId()); roleEntityList.add(roleEntity); } } return roleEntityList; } @Override public Pagination pageAll(Integer page, Integer rows) { Pagination pagination = new Pagination<>(); PageHelper.startPage(page, rows); Page roleEntityPage = roleMapper.pageAll(); pagination.setRows(roleEntityPage.getResult()); pagination.setTotal(roleEntityPage.getTotal()); return pagination; } @Override public List listAll() { return roleMapper.listAll(); } @Override public List listAllByUserId(Long userId) { List roleEntityList = new ArrayList<>(); List userRoleEntityList = userRoleMapper.listAllByUserId(userId); if (userRoleEntityList != null && !userRoleEntityList.isEmpty()) { for (UserRoleEntity userRoleEntity : userRoleEntityList) { RoleEntity roleEntity = roleMapper.getOne(userRoleEntity.getRoleId()); roleEntityList.add(roleEntity); } } return roleEntityList; } } ================================================ FILE: src/main/java/com/godcheese/nimrod/user/service/impl/RoleViewMenuCategoryServiceImpl.java ================================================ package com.godcheese.nimrod.user.service.impl; import com.godcheese.nimrod.user.entity.ViewMenuCategoryEntity; import com.godcheese.nimrod.user.mapper.RoleViewMenuCategoryMapper; import com.godcheese.nimrod.user.mapper.ViewMenuCategoryMapper; import com.godcheese.nimrod.user.service.RoleViewMenuCategoryService; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import java.util.ArrayList; import java.util.List; /** * @author godcheese [godcheese@outlook.com] * @date 2018-02-22 */ @Service public class RoleViewMenuCategoryServiceImpl implements RoleViewMenuCategoryService { @Autowired private RoleViewMenuCategoryMapper roleViewMenuCategoryMapper; @Autowired private ViewMenuCategoryMapper viewMenuCategoryMapper; @Override @Transactional(rollbackFor = Throwable.class) public int grantAllByRoleIdAndViewMenuCategoryIdList(Long roleId, List viewMenuCategoryIdList) { // 最终被添加的 viewMenuCategoryIdList List viewMenuCategoryIdListResult = new ArrayList<>(); ViewMenuCategoryEntity viewMenuCategoryEntity; for (Long viewMenuCategoryId : viewMenuCategoryIdList) { viewMenuCategoryEntity = viewMenuCategoryMapper.getOne(viewMenuCategoryId); if (viewMenuCategoryEntity == null) { viewMenuCategoryIdListResult.add(viewMenuCategoryId); } } // viewMenuCategoryIdList 全部写入数据库 if (!viewMenuCategoryIdListResult.isEmpty()) { roleViewMenuCategoryMapper.insertAllByRoleIdAndViewMenuCategoryIdList(roleId, viewMenuCategoryIdListResult); } return viewMenuCategoryIdListResult.size(); } @Override @Transactional(rollbackFor = Throwable.class) public int revokeAllByRoleIdAndViewMenuCategoryIdList(Long roleId, List viewMenuCategoryIdList) { // 最终被添加的 viewMenuCategoryIdList List viewMenuCategoryIdListResult = new ArrayList<>(); ViewMenuCategoryEntity viewMenuCategoryEntity; for (Long viewMenuCategoryId : viewMenuCategoryIdList) { viewMenuCategoryEntity = viewMenuCategoryMapper.getOne(viewMenuCategoryId); if (viewMenuCategoryEntity == null) { viewMenuCategoryIdListResult.add(viewMenuCategoryId); } } // viewMenuCategoryIdList 全部写入数据库 if (!viewMenuCategoryIdListResult.isEmpty()) { roleViewMenuCategoryMapper.deleteAllByRoleIdAndViewMenuCategoryIdList(roleId, viewMenuCategoryIdListResult); } return viewMenuCategoryIdListResult.size(); } } ================================================ FILE: src/main/java/com/godcheese/nimrod/user/service/impl/RoleViewMenuServiceImpl.java ================================================ package com.godcheese.nimrod.user.service.impl; import com.godcheese.nimrod.user.entity.ViewMenuEntity; import com.godcheese.nimrod.user.mapper.RoleViewMenuMapper; import com.godcheese.nimrod.user.mapper.ViewMenuMapper; import com.godcheese.nimrod.user.service.RoleViewMenuService; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import java.util.ArrayList; import java.util.List; /** * @author godcheese [godcheese@outlook.com] * @date 2018-02-22 */ @Service public class RoleViewMenuServiceImpl implements RoleViewMenuService { @Autowired private RoleViewMenuMapper roleViewMenuMapper; @Autowired private ViewMenuMapper viewMenuMapper; @Override @Transactional(rollbackFor = Throwable.class) public int grantAllByRoleIdAndViewMenuIdList(Long roleId, List viewMenuIdList) { // 最终被添加的 viewMenuIdList List viewMenuIdListResult = new ArrayList<>(); ViewMenuEntity viewMenuEntity; for (Long viewMenuId : viewMenuIdList) { viewMenuEntity = viewMenuMapper.getOne(viewMenuId); if (viewMenuEntity != null) { viewMenuIdListResult.add(viewMenuId); } } // viewMenuIdList 全部写入数据库 if (!viewMenuIdListResult.isEmpty()) { roleViewMenuMapper.insertAllByRoleIdAndViewMenuIdList(roleId, viewMenuIdListResult); } return viewMenuIdListResult.size(); } @Override @Transactional(rollbackFor = Throwable.class) public int revokeAllByRoleIdAndViewMenuIdList(Long roleId, List viewMenuIdList) { int result = 0; // viewMenuIdList 全部写入数据库 if (!viewMenuIdList.isEmpty()) { result = roleViewMenuMapper.deleteAllByRoleIdAndViewMenuIdList(roleId, viewMenuIdList); } return result; } } ================================================ FILE: src/main/java/com/godcheese/nimrod/user/service/impl/UserRoleServiceImpl.java ================================================ package com.godcheese.nimrod.user.service.impl; import com.godcheese.nimrod.common.easyui.Pagination; import com.godcheese.nimrod.user.entity.UserRoleEntity; import com.godcheese.nimrod.user.mapper.UserRoleMapper; import com.godcheese.nimrod.user.service.UserRoleService; import com.github.pagehelper.Page; import com.github.pagehelper.PageHelper; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import java.util.List; /** * @author godcheese [godcheese@outlook.com] * @date 2018-02-22 */ @Service public class UserRoleServiceImpl implements UserRoleService { @Autowired private UserRoleMapper userRoleMapper; @Override @Transactional(rollbackFor = Throwable.class) public UserRoleEntity addOne(UserRoleEntity userRoleEntity) { UserRoleEntity userRoleEntity1 = userRoleMapper.getOneByUserIdAndRoleId(userRoleEntity.getUserId(), userRoleEntity.getRoleId()); if (userRoleEntity1 == null) { userRoleMapper.insertOne(userRoleEntity); } return userRoleEntity; } @Override @Transactional(rollbackFor = Throwable.class) public int deleteAllByUserIdAndRoleIdList(Long userId, List roleIdList) { return userRoleMapper.deleteAllByUserIdAndRoleIdList(userId, roleIdList); } @Override public Pagination pageAll(Integer page, Integer rows) { Pagination pagination = new Pagination<>(); PageHelper.startPage(page, rows); Page userRoleEntityPage = userRoleMapper.pageAll(); pagination.setRows(userRoleEntityPage.getResult()); pagination.setTotal(userRoleEntityPage.getTotal()); return pagination; } @Override public List listAllByUserId(Long userId) { return userRoleMapper.listAllByUserId(userId); } } ================================================ FILE: src/main/java/com/godcheese/nimrod/user/service/impl/UserServiceImpl.java ================================================ package com.godcheese.nimrod.user.service.impl; import com.godcheese.nimrod.common.easyui.Pagination; import com.godcheese.nimrod.common.others.FailureEntity; import com.godcheese.nimrod.common.security.SimpleUser; import com.godcheese.nimrod.common.security.SimpleUserDetailsServiceImpl; import com.godcheese.nimrod.mail.entity.MailEntity; import com.godcheese.nimrod.mail.service.MailService; import com.godcheese.nimrod.mail.service.impl.MailServiceImpl; import com.godcheese.nimrod.system.service.DictionaryService; import com.godcheese.nimrod.user.entity.*; import com.godcheese.nimrod.user.mapper.UserMapper; import com.godcheese.nimrod.user.mapper.UserVerifyCodeMapper; import com.godcheese.nimrod.user.service.*; import com.godcheese.tile.util.DateUtil; import com.godcheese.tile.util.RandomUtil; import com.godcheese.tile.util.StringUtil; import com.godcheese.tile.web.exception.BaseResponseException; import com.github.pagehelper.Page; import com.github.pagehelper.PageHelper; import com.godcheese.nimrod.user.service.DepartmentService; import com.godcheese.nimrod.user.service.RoleService; import com.godcheese.nimrod.user.service.UserRoleService; import com.godcheese.nimrod.user.service.UserVerifyCodeService; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import javax.servlet.http.HttpServletRequest; import java.util.*; /** * @author godcheese [godcheese@outlook.com] * @date 2018-02-22 */ @Service public class UserServiceImpl implements UserService { private static final Logger LOGGER = LoggerFactory.getLogger(UserServiceImpl.class); private static final int PASSWORD_MIN_LENGTH = 6; private static final int PASSWORD_MAX_LENGTH = 32; @Autowired private UserMapper userMapper; @Autowired private FailureEntity failureEntity; @Autowired private DepartmentService departmentService; @Autowired private UserRoleService userRoleService; @Autowired private RoleService roleService; @Autowired private MailService mailService; @Autowired private DictionaryService dictionaryService; @Autowired private UserVerifyCodeMapper userVerifyCodeMapper; @Autowired private UserVerifyCodeService userVerifyCodeService; @Autowired private UserService userService; @Override @Transactional(rollbackFor = Throwable.class) public UserEntity addOne(UserEntity userEntity) throws BaseResponseException { Date date = new Date(); userEntity.setUsername(userEntity.getUsername().trim()); if (userMapper.getOneByUsername(userEntity.getUsername()) != null) { throw new BaseResponseException(failureEntity.i18n("user.username_exists")); } userEntity.setPassword(encodePassword(userEntity.getPassword().trim())); userEntity.setGmtModified(date); userEntity.setGmtCreated(date); userMapper.insertOne(userEntity); return userEntity; } @Override @Transactional(rollbackFor = Throwable.class) public UserEntity saveOne(UserEntity userEntity) throws BaseResponseException { userEntity.setUsername(userEntity.getUsername().trim()); UserEntity userEntity1 = userMapper.getOneByUsername(userEntity.getUsername()); if (userEntity1 != null && !userEntity1.getId().equals(userEntity.getId())) { throw new BaseResponseException(failureEntity.i18n("user.username_exists")); } if (userEntity.getPassword() != null && !"".equals(userEntity.getPassword().trim())) { userEntity.setPassword(encodePassword(userEntity.getPassword().trim())); } else { UserEntity userEntity2 = userMapper.getOne(userEntity.getId()); if (userEntity2 != null) { userEntity.setPassword(userEntity2.getPassword()); } } userEntity.setGmtModified(new Date()); userMapper.updateOne(userEntity); return userEntity; } @Override @Transactional(rollbackFor = Throwable.class) public int deleteAll(List idList) { return userMapper.deleteAll(idList); } @Override public UserEntity getOne(Long id) { return userMapper.getOne(id); } @Override public UserEntity getCurrentUser() { SimpleUser simpleUser; if ((simpleUser = SimpleUserDetailsServiceImpl.getCurrentSimpleUser()) != null) { return userMapper.getOne(simpleUser.getId()); } return null; } @Override public UserEntity getCurrentUserNoPassword() { UserEntity userEntity = getCurrentUser(); if (userEntity != null) { userEntity.setPassword(null); return userEntity; } return null; } @Override public UserEntity getCurrentUser(HttpServletRequest request) { SimpleUser simpleUser; if ((simpleUser = SimpleUserDetailsServiceImpl.getCurrentSimpleUser(request)) != null) { return userMapper.getOne(simpleUser.getId()); } return null; } // @Override // public void logout(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse) throws BaseResponseException { // try { // Authentication authentication = SecurityContextHolder.getContext().getAuthentication(); // // if (authentication != null) { // LOGGER.info("username1={}",((SimpleUser)authentication.getPrincipal()).getUsername()); // new SecurityContextLogoutHandler().logout(httpServletRequest, httpServletResponse, authentication); // HttpSession httpSession = httpServletRequest.getSession(false); // if(httpSession != null) { // httpSession.invalidate(); // } // authentication = SecurityContextHolder.getContext().getAuthentication(); // // // if(authentication != null) { // LOGGER.info("username2={}", ((SimpleUser) authentication.getPrincipal()).getUsername()); // } // } // } catch (Exception e) { // throw new BaseResponseException(FailureEntity.LOGOUT_FAIL); // } // } @Override public Pagination pageAll(Integer page, Integer rows, String sorterField, String sorterOrder, UserEntity userEntity, String gmtCreatedStart, String gmtCreatedEnd, String gmtDeletedStart, String gmtDeletedEnd) { if (sorterField != null && !"".equals(sorterField) && sorterOrder != null && !"".equals(sorterOrder)) { sorterField = StringUtil.camelToUnderline(sorterField); String orderBy = sorterField + " " + sorterOrder; PageHelper.startPage(page, rows, orderBy); } else { PageHelper.startPage(page, rows); } Page userEntityPage = userMapper.pageAll(userEntity, gmtCreatedStart, gmtCreatedEnd, gmtDeletedStart, gmtDeletedEnd); Pagination pagination = new Pagination<>(); List userEntityList = new ArrayList<>(); List tempUserEntityList = userEntityPage.getResult(); if (tempUserEntityList != null) { for (UserEntity userEntity2 : tempUserEntityList) { userEntity2.setPassword(null); userEntity2.setDepartment(departmentService.listAllByDepartmentId(userEntity2.getDepartmentId())); userEntityList.add(userEntity2); } } pagination.setRows(userEntityList); pagination.setTotal(userEntityPage.getTotal()); return pagination; } @Override public Pagination pageAllByDepartmentId(Long departmentId, Integer page, Integer rows) { Pagination pagination = new Pagination<>(); PageHelper.startPage(page, rows); Page tempUserEntityPage = userMapper.pageAllByDepartmentId(departmentId); List userEntityList = new ArrayList<>(); if (tempUserEntityPage != null) { for (UserEntity userEntity : tempUserEntityPage.getResult()) { userEntity.setPassword(null); userEntityList.add(userEntity); } pagination.setRows(userEntityList); pagination.setTotal(tempUserEntityPage.getTotal()); } return pagination; } @Override public UserEntity getOneByIdAndPassword(Long id, String password) { UserEntity userEntity = userMapper.getOne(id); if (userEntity.getId().equals(id) && checkPassword(password, userEntity.getPassword())) { return userEntity; } return null; } @Override public UserEntity getOneByUsernameAndPassword(String username, String password) { UserEntity userEntity = userMapper.getOneByUsername(username); if (checkPassword(password, userEntity.getPassword())) { return userEntity; } return null; } @Override public UserEntity getOneByEmailAndPassword(String email, String password) { UserEntity userEntity = userMapper.getOneByEmail(email); if (checkPassword(password, userEntity.getPassword())) { return userEntity; } return null; } @Override public UserEntity getOneByCellphoneAndPassword(String cellphone, String password) { UserEntity userEntity = userMapper.getOneByCellphone(cellphone); return checkPassword(password, userEntity.getPassword()) ? userEntity : null; } @Override public boolean checkPassword(String plainPassword, String cipherPassword) { return new BCryptPasswordEncoder().matches(plainPassword, cipherPassword); } @Override public String encodePassword(String plainPassword) { return new BCryptPasswordEncoder().encode(plainPassword); } @Override public UserEntity getOneByIdNoPassword(Long id) { UserEntity userEntity = userMapper.getOne(id); if (userEntity != null) { userEntity.setPassword(null); return userEntity; } return null; } @Override @Transactional(rollbackFor = Throwable.class) public int fakeDeleteAll(List idList) { return userMapper.fakeDeleteAll(idList, DateUtil.newDate()); } @Override @Transactional(rollbackFor = Throwable.class) public int revokeFakeDeleteAll(List idList) { return userMapper.revokeFakeDeleteAll(idList); } @Override public UserEntity profile(UserEntity userEntity) { List roleEntityList = new ArrayList<>(); List departmentEntityList; if (userEntity != null) { userEntity.setPassword(null); List userRoleEntityList = userRoleService.listAllByUserId(userEntity.getId()); if (!userRoleEntityList.isEmpty()) { for (UserRoleEntity userRoleEntity : userRoleEntityList) { RoleEntity roleEntity = roleService.getOne(userRoleEntity.getRoleId()); if (roleEntity != null) { roleEntityList.add(roleEntity); } } } userEntity.setRoles(roleEntityList); departmentEntityList = departmentService.listAllByDepartmentId(userEntity.getDepartmentId()); userEntity.setDepartments(departmentEntityList); } return userEntity; } @Override public UserEntity saveProfile(UserEntity userEntity) throws BaseResponseException { UserEntity userEntity1 = getCurrentUser(); userEntity1.setAvatar(userEntity.getAvatar()); userEntity1.setPassword(null); return saveOne(userEntity1); } @Override public boolean sendEmailVerifyCode(Long userId, String email) throws BaseResponseException { Integer isOrNotIs = Integer.valueOf(String.valueOf(dictionaryService.get("IS_OR_NOT", "IS"))); MailEntity mailEntity = new MailEntity(); Map variables = new HashMap<>(3); String webName = (String) dictionaryService.get("WEB", "NAME"); variables.put("webName", webName); variables.put("webUrl", dictionaryService.get("WEB", "URL")); String verifyCode = RandomUtil.randomString(6, RandomUtil.NUMBER); variables.put("verifyCode", verifyCode); mailEntity.setTo(email); mailEntity.setSubject(webName); mailEntity.setText(mailService.loadHtmlTemplate(MailServiceImpl.MAIL_TEMPLATE_ROOT_PATH + "/email_verify_code", variables)); mailEntity.setHtml(isOrNotIs); UserVerifyCodeEntity userVerifyCodeEntity = new UserVerifyCodeEntity(); userVerifyCodeEntity.setUserId(userId); userVerifyCodeEntity.setVerifyFrom(email); userVerifyCodeEntity.setVerifyCode(verifyCode); userVerifyCodeService.addOne(userVerifyCodeEntity); return mailService.addOne(mailEntity) != null; } @Override public boolean sendEmailVerifyCode(UserEntity userEntity) throws BaseResponseException { if (!sendEmailVerifyCode(userEntity.getId(), userEntity.getEmail())) { throw new BaseResponseException(failureEntity.i18n("user_verify_code.send_fail")); } return true; } @Override public boolean checkEmailVerifyCode(UserEntity userEntity, String email, String emailVerifyCode) throws BaseResponseException { UserVerifyCodeEntity userVerifyCodeEntity = userVerifyCodeService.getOneByUserIdAndVerifyFrom(userEntity.getId(), email, true, emailVerifyCode); if (userVerifyCodeEntity != null) { return true; } return false; } @Override public boolean changeEmail(UserEntity userEntity, String emailVerifyCode, String newEmail, String newEmailVerifyCode) throws BaseResponseException { String oldEmail = userEntity.getEmail(); if (!checkEmailVerifyCode(userEntity, userEntity.getEmail(), emailVerifyCode) || !checkEmailVerifyCode(userEntity, newEmail, newEmailVerifyCode)) { throw new BaseResponseException(failureEntity.i18n("user_verify_code.verification_code_error")); } userEntity.setEmail(newEmail); userEntity.setPassword(null); userVerifyCodeMapper.deleteAllByEmail(oldEmail); userVerifyCodeMapper.deleteAllByEmail(newEmail); userService.saveOne(userEntity); return true; } @Override public boolean changePassword(UserEntity userEntity, String password, String newPassword, String confirmNewPassword) throws BaseResponseException { password = password.trim(); newPassword = newPassword.trim(); confirmNewPassword = confirmNewPassword.trim(); if (!newPassword.equalsIgnoreCase(confirmNewPassword)) { throw new BaseResponseException(failureEntity.i18n("user.new_password_and_confirm_new_password_error")); } if (!checkPassword(password, userEntity.getPassword())) { throw new BaseResponseException(failureEntity.i18n("user.original_password_error")); } if (newPassword.length() < PASSWORD_MIN_LENGTH || newPassword.length() > PASSWORD_MAX_LENGTH) { throw new BaseResponseException(failureEntity.i18n("user.new_password_must_length")); } if (checkPassword(newPassword, userEntity.getPassword())) { throw new BaseResponseException(failureEntity.i18n("user.same_as_the_original_password")); } userEntity.setPassword(newPassword); userService.saveOne(userEntity); return true; } } ================================================ FILE: src/main/java/com/godcheese/nimrod/user/service/impl/UserVerifyCodeServiceImpl.java ================================================ package com.godcheese.nimrod.user.service.impl; import com.godcheese.nimrod.common.others.FailureEntity; import com.godcheese.nimrod.user.entity.UserVerifyCodeEntity; import com.godcheese.nimrod.user.mapper.UserVerifyCodeMapper; import com.godcheese.nimrod.user.service.UserVerifyCodeService; import com.godcheese.tile.util.DateUtil; import com.godcheese.tile.web.exception.BaseResponseException; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import java.util.Calendar; import java.util.Date; /** * @author godcheese [godcheese@outlook.com] * @date 2018-02-22 */ @Service public class UserVerifyCodeServiceImpl implements UserVerifyCodeService { @Autowired private UserVerifyCodeMapper userVerifyCodeMapper; @Autowired private FailureEntity failureEntity; @Override @Transactional(rollbackFor = Throwable.class) public UserVerifyCodeEntity addOne(UserVerifyCodeEntity userVerifyCodeEntity) throws BaseResponseException { // UserVerifyCodeEntity userVerifyCodeEntity1 = userVerifyCodeMapper.getOneByUserIdAndVerifyFrom(userVerifyCodeEntity.getUserId(), userVerifyCodeEntity.getVerifyFrom()); // if (userVerifyCodeEntity1 != null) { // userVerifyCodeMapper.updateOneByUserIdAndVerifyFrom(userVerifyCodeEntity); // } else { // userVerifyCodeMapper.insertOne(userVerifyCodeEntity); // } // return userVerifyCodeEntity; UserVerifyCodeEntity userVerifyCodeEntity1 = userVerifyCodeMapper.getOneByUserIdAndVerifyFrom(userVerifyCodeEntity.getUserId(), userVerifyCodeEntity.getVerifyFrom()); Date gmtCreated = new Date(); Date gmtExpires = DateUtil.calendarPlus(gmtCreated, Calendar.MINUTE, 10); if (userVerifyCodeEntity1 != null) { Date gmtCreatedPlus1Minute = DateUtil.calendarPlus(userVerifyCodeEntity1.getGmtCreated(), Calendar.MINUTE, 1); if (System.currentTimeMillis() < gmtCreatedPlus1Minute.getTime()) { throw new BaseResponseException(failureEntity.i18n("user_verify_code.too_frequent_operation")); } userVerifyCodeEntity.setGmtExpires(gmtExpires); userVerifyCodeEntity.setGmtCreated(gmtCreated); userVerifyCodeMapper.updateOneByUserIdAndVerifyFrom(userVerifyCodeEntity); } else { userVerifyCodeEntity.setGmtExpires(gmtExpires); userVerifyCodeEntity.setGmtCreated(gmtCreated); userVerifyCodeMapper.insertOne(userVerifyCodeEntity); } // Integer isOrNotIs = Integer.valueOf(String.valueOf(dictionaryService.get("IS_OR_NOT", "IS"))); // MailEntity mailEntity = new MailEntity(); // Map variables = new HashMap<>(); // String webName = (String) dictionaryService.get("WEB", "NAME"); // variables.put("webName", webName); // variables.put("webUrl", dictionaryService.get("WEB", "URL")); // String verifyCode = RandomUtil.randomString( 6, RandomUtil.NUMBER); // variables.put("verifyCode", verifyCode); // mailEntity.setTo(userEntity.getEmail()); // mailEntity.setSubject(webName); // mailEntity.setText(mailService.loadHtmlTemplate(MailServiceImpl.MAIL_TEMPLATE_ROOT_PATH + "/email_verify_code", variables)); // mailEntity.setHtml(isOrNotIs); // UserVerifyCodeEntity userVerifyCodeEntity1 = new UserVerifyCodeEntity(); // userVerifyCodeEntity1.setUserId(userEntity.getId()); // userVerifyCodeEntity1.setVerifyFrom(userEntity.getEmail()); // userVerifyCodeEntity1.setVerifyCode(verifyCode); // userVerifyCodeEntity1.setGmtExpires(gmtExpires); // userVerifyCodeEntity1.setGmtCreated(gmtCreated); // userVerifyCodeService.addOne(userVerifyCodeEntity); // mailService.addOne(mailEntity); // UserVerifyCodeEntity userVerifyCodeEntity1 = userVerifyCodeMapper.getOneByUserIdAndVerifyFrom(userVerifyCodeEntity.getUserId(), userVerifyCodeEntity.getVerifyFrom()); return userVerifyCodeEntity; } @Override @Transactional(rollbackFor = Throwable.class) public int deleteAllByUserIdAndVerifyFrom(Long userId, String verifyFrom) { // return userVerifyCodeMapper.deleteAllByUserIdAndRoleIdList(userId, roleIdList); return 0; } /** * 判断验证码是否过期,过期返回=true,未过期返回=false * * @param userVerifyCodeEntity * @return */ @Override public boolean isExpires(UserVerifyCodeEntity userVerifyCodeEntity) { if (System.currentTimeMillis() >= userVerifyCodeEntity.getGmtExpires().getTime()) { return true; } return false; } @Override public UserVerifyCodeEntity getOneByUserIdAndVerifyFrom(Long userId, String verifyFrom, boolean isExpires, String comparisonVerifyCode) throws BaseResponseException { UserVerifyCodeEntity userVerifyCodeEntity = userVerifyCodeMapper.getOneByUserIdAndVerifyFrom(userId, verifyFrom); if (userVerifyCodeEntity == null) { throw new BaseResponseException(failureEntity.i18n("user_verify_code.verification_code_error")); } if (isExpires(userVerifyCodeEntity) && isExpires) { throw new BaseResponseException(failureEntity.i18n("user_verify_code.verification_code_error_or_expires")); } if (!userVerifyCodeEntity.getVerifyCode().equalsIgnoreCase(comparisonVerifyCode)) { throw new BaseResponseException(failureEntity.i18n("user_verify_code.verification_code_error_or_expires")); } return userVerifyCodeEntity; } } ================================================ FILE: src/main/java/com/godcheese/nimrod/user/service/impl/ViewMenuCategoryServiceImpl.java ================================================ package com.godcheese.nimrod.user.service.impl; import com.godcheese.nimrod.common.easyui.ComboTree; import com.godcheese.nimrod.common.easyui.EasyUi; import com.godcheese.nimrod.common.others.FailureEntity; import com.godcheese.nimrod.system.service.DictionaryService; import com.godcheese.nimrod.user.entity.RoleEntity; import com.godcheese.nimrod.user.entity.UserRoleEntity; import com.godcheese.nimrod.user.entity.ViewMenuCategoryEntity; import com.godcheese.nimrod.user.entity.ViewMenuEntity; import com.godcheese.nimrod.user.mapper.RoleViewMenuCategoryMapper; import com.godcheese.nimrod.user.mapper.UserRoleMapper; import com.godcheese.nimrod.user.mapper.ViewMenuCategoryMapper; import com.godcheese.nimrod.user.mapper.ViewMenuMapper; import com.godcheese.nimrod.user.service.RoleService; import com.godcheese.nimrod.user.service.ViewMenuCategoryService; import com.godcheese.nimrod.user.service.ViewMenuService; import com.godcheese.tile.web.exception.BaseResponseException; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import java.util.*; /** * @author godcheese [godcheese@outlook.com] * @date 2018-02-22 */ @Service public class ViewMenuCategoryServiceImpl implements ViewMenuCategoryService { @Autowired private ViewMenuCategoryMapper viewMenuCategoryMapper; @Autowired private UserRoleMapper userRoleMapper; @Autowired private RoleService roleService; @Autowired private ViewMenuMapper viewMenuMapper; @Autowired private ViewMenuCategoryService viewMenuCategoryService; @Autowired private ViewMenuService viewMenuService; @Autowired private FailureEntity failureEntity; @Autowired private RoleViewMenuCategoryMapper roleViewMenuCategoryMapper; @Autowired private DictionaryService dictionaryService; @Override @Transactional(rollbackFor = Throwable.class) public ViewMenuCategoryEntity addOne(ViewMenuCategoryEntity viewMenuCategoryEntity) { Date date = new Date(); viewMenuCategoryEntity.setGmtModified(date); viewMenuCategoryEntity.setGmtCreated(date); viewMenuCategoryMapper.insertOne(viewMenuCategoryEntity); return viewMenuCategoryEntity; } @Override @Transactional(rollbackFor = Throwable.class) public ViewMenuCategoryEntity saveOne(ViewMenuCategoryEntity viewMenuCategoryEntity) { ViewMenuCategoryEntity viewMenuCategoryEntity1 = viewMenuCategoryMapper.getOne(viewMenuCategoryEntity.getId()); Date date = new Date(); viewMenuCategoryEntity1.setName(viewMenuCategoryEntity.getName()); viewMenuCategoryEntity1.setIcon(viewMenuCategoryEntity.getIcon()); viewMenuCategoryEntity1.setSort(viewMenuCategoryEntity.getSort()); viewMenuCategoryEntity1.setRemark(viewMenuCategoryEntity.getRemark()); viewMenuCategoryEntity1.setGmtModified(date); viewMenuCategoryMapper.updateOne(viewMenuCategoryEntity1); return viewMenuCategoryEntity1; } @Override @Transactional(rollbackFor = Throwable.class) public int deleteAll(List idList) throws BaseResponseException { int result = 0; for (Long id : idList) { // 有子视图菜单分类报错 ViewMenuCategoryEntity viewMenuCategoryEntity = viewMenuCategoryMapper.getOneByParentId(id); if (viewMenuCategoryEntity != null) { throw new BaseResponseException(failureEntity.i18n("view_menu_category.delete_fail_has_children_category")); } // 有子视图菜单报错 ViewMenuEntity viewMenuEntity = viewMenuMapper.getOneByViewMenuCategoryId(id); if (viewMenuEntity != null) { throw new BaseResponseException(failureEntity.i18n("view_menu_category.delete_fail_has_view_menu")); } roleViewMenuCategoryMapper.deleteAllByViewMenuCategoryId(id); viewMenuCategoryMapper.deleteOne(id); result++; } return result; } @Override public ViewMenuCategoryEntity getOne(Long id) { return viewMenuCategoryMapper.getOne(id); } /** * 指定 用户id,获取所有视图菜单父级分类 * * @param userId * @return */ @Override public List listAllParentByUserId(Long userId) { List viewMenuCategoryEntityList = null; List userRoleEntityList; if ((userRoleEntityList = userRoleMapper.listAllByUserId(userId)) != null) { List roleEntityList; if ((roleEntityList = roleService.listAllByUserRoleList(userRoleEntityList)) != null) { viewMenuCategoryEntityList = new ArrayList<>(); for (RoleEntity roleEntity : roleEntityList) { viewMenuCategoryEntityList.addAll(viewMenuCategoryMapper.listAllByParentIdIsNullAndRoleId(roleEntity.getId())); } } } return viewMenuCategoryEntityList; } /** * 指定用户id、视图菜单父级分类,获取所有视图菜单子级分类 * * @param userId * @param parentId * @return */ @Override public List listAllChildByParentIdAndUserId(Long parentId, Long userId) { List viewMenuCategoryEntityList = null; List userRoleEntityList; if ((userRoleEntityList = userRoleMapper.listAllByUserId(userId)) != null) { List roleEntityList; if ((roleEntityList = roleService.listAllByUserRoleList(userRoleEntityList)) != null) { viewMenuCategoryEntityList = new ArrayList<>(); for (RoleEntity roleEntity : roleEntityList) { // 根据父级视图菜单分类和角色 id,获取每个角色所拥有的视图菜单子级分类 viewMenuCategoryEntityList.addAll(viewMenuCategoryMapper.listAllByParentIdAndRoleId(parentId, roleEntity.getId())); } } } return viewMenuCategoryEntityList; } @Override public List listAllByParentIdAndRoleId(Long parentId, Long roleId) { return viewMenuCategoryMapper.listAllByParentIdAndRoleId(parentId, roleId); } @Override public List listAllByParentId(Long parentId, Long roleId) { List viewPageCategoryEntityList = viewMenuCategoryMapper.listAllByParentId(parentId); List viewMenuCategoryEntityListResult = new ArrayList<>(); Integer isOrNotIs = Integer.valueOf((String) dictionaryService.get("IS_OR_NOT", "IS")); Integer isOrNotNot = Integer.valueOf((String) dictionaryService.get("IS_OR_NOT", "NOT")); if (!viewPageCategoryEntityList.isEmpty()) { for (ViewMenuCategoryEntity viewMenuCategoryEntity : viewPageCategoryEntityList) { if (viewMenuCategoryMapper.getOneByParentId(viewMenuCategoryEntity.getId()) != null) { viewMenuCategoryEntity.setState(EasyUi.State.CLOSED); } if (roleId != null) { if (roleViewMenuCategoryMapper.getOneByRoleIdAndViewMenuCategoryId(roleId, viewMenuCategoryEntity.getId()) != null) { viewMenuCategoryEntity.setIsGranted(isOrNotIs); } else { viewMenuCategoryEntity.setIsGranted(isOrNotNot); } } viewMenuCategoryEntityListResult.add(viewMenuCategoryEntity); } } return viewMenuCategoryEntityListResult; } @Override public List listAllParentByRoleId(Long roleId) { return viewMenuCategoryMapper.listAllByParentIdIsNullAndRoleId(roleId); } @Override public List> listAllChildViewMenuCategoryAndViewMenuByParentIdAndUserId(Long parentId, Long userId) { List> mapList = new ArrayList<>(); List viewMenuCategoryEntityList = null; viewMenuCategoryEntityList = viewMenuCategoryService.listAllChildByParentIdAndUserId(parentId, userId); if (viewMenuCategoryEntityList != null) { for (ViewMenuCategoryEntity viewMenuCategoryEntity : viewMenuCategoryEntityList) { Map map = new HashMap<>(3); map.put("id", viewMenuCategoryEntity.getId()); map.put("name", viewMenuCategoryEntity.getName()); map.put("icon", viewMenuCategoryEntity.getIcon()); mapList.add(map); } List viewMenuEntityList = null; viewMenuEntityList = viewMenuService.listAllByUserIdAndMenuCategoryId(userId, parentId); if (viewMenuEntityList != null) { for (ViewMenuEntity viewMenuEntity : viewMenuEntityList) { Map map = new HashMap<>(4); map.put("id", viewMenuEntity.getId()); map.put("name", viewMenuEntity.getName()); map.put("icon", viewMenuEntity.getIcon()); map.put("url", viewMenuEntity.getUrl()); mapList.add(map); } } } return mapList; } @Override public List listAll() { return viewMenuCategoryMapper.listAll(); } @Override public List searchAllByName(String name) { return viewMenuCategoryMapper.searchAllByName(name); } @Override public List listAllParent(Long roleId) { List viewMenuCategoryEntityList = viewMenuCategoryMapper.listAllByParentIdIsNull(); List viewMenuCategoryEntityListResult = new ArrayList<>(); Integer isOrNotIs = Integer.valueOf((String) dictionaryService.get("IS_OR_NOT", "IS")); Integer isOrNotNot = Integer.valueOf((String) dictionaryService.get("IS_OR_NOT", "NOT")); for (ViewMenuCategoryEntity viewMenuCategoryEntity : viewMenuCategoryEntityList) { if (viewMenuCategoryMapper.getOneByParentId(viewMenuCategoryEntity.getId()) != null) { viewMenuCategoryEntity.setState(EasyUi.State.CLOSED); } if (roleId != null) { if (roleViewMenuCategoryMapper.getOneByRoleIdAndViewMenuCategoryId(roleId, viewMenuCategoryEntity.getId()) != null) { viewMenuCategoryEntity.setIsGranted(isOrNotIs); } else { viewMenuCategoryEntity.setIsGranted(isOrNotNot); } } viewMenuCategoryEntityListResult.add(viewMenuCategoryEntity); } return viewMenuCategoryEntityListResult; } @Override public List listAllViewMenuCategoryComboTree() { List comboTreeList = new ArrayList<>(0); List viewMenuCategoryEntityList = viewMenuCategoryMapper.listAll(); for (ViewMenuCategoryEntity viewMenuCategoryEntity : viewMenuCategoryEntityList) { ComboTree comboTree = new ComboTree(); comboTree.setId(viewMenuCategoryEntity.getId()); comboTree.setText(viewMenuCategoryEntity.getName()); comboTree.setParentId(viewMenuCategoryEntity.getParentId()); comboTreeList.add(comboTree); } return comboTreeList; } @Override public List getViewMenuCategoryChildrenComboTree(long parentId, List viewMenuCategoryComboTreeList) { List children = new ArrayList<>(0); for (ComboTree comboTree : viewMenuCategoryComboTreeList) { if (comboTree.getParentId() != null && comboTree.getParentId().equals(parentId)) { children.add(comboTree); } } for (ComboTree child : children) { List childChildren = getViewMenuCategoryChildrenComboTree(child.getId(), viewMenuCategoryComboTreeList); child.setChildren(childChildren); } if (children.size() == 0) { return null; } return children; } } ================================================ FILE: src/main/java/com/godcheese/nimrod/user/service/impl/ViewMenuServiceImpl.java ================================================ package com.godcheese.nimrod.user.service.impl; import com.godcheese.nimrod.common.easyui.Pagination; import com.godcheese.nimrod.system.service.DictionaryService; import com.godcheese.nimrod.user.entity.RoleEntity; import com.godcheese.nimrod.user.entity.UserRoleEntity; import com.godcheese.nimrod.user.entity.ViewMenuEntity; import com.godcheese.nimrod.user.mapper.RoleViewMenuMapper; import com.godcheese.nimrod.user.mapper.UserRoleMapper; import com.godcheese.nimrod.user.mapper.ViewMenuMapper; import com.godcheese.nimrod.user.service.RoleService; import com.godcheese.nimrod.user.service.ViewMenuService; import com.github.pagehelper.Page; import com.github.pagehelper.PageHelper; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import java.util.ArrayList; import java.util.Date; import java.util.List; /** * @author godcheese [godcheese@outlook.com] * @date 2018-02-22 */ @Service public class ViewMenuServiceImpl implements ViewMenuService { @Autowired private UserRoleMapper userRoleMapper; @Autowired private ViewMenuMapper viewMenuMapper; @Autowired private RoleService roleService; @Autowired private RoleViewMenuMapper roleViewMenuMapper; @Autowired private DictionaryService dictionaryService; @Override @Transactional(rollbackFor = Throwable.class) public ViewMenuEntity addOne(ViewMenuEntity viewMenuEntity) { Date date = new Date(); viewMenuEntity.setGmtModified(date); viewMenuEntity.setGmtCreated(date); viewMenuMapper.insertOne(viewMenuEntity); return viewMenuEntity; } @Override @Transactional(rollbackFor = Throwable.class) public ViewMenuEntity saveOne(ViewMenuEntity viewMenuEntity) { ViewMenuEntity viewMenuEntity1 = viewMenuMapper.getOne(viewMenuEntity.getId()); viewMenuEntity1.setName(viewMenuEntity.getName()); viewMenuEntity1.setIcon(viewMenuEntity.getIcon()); viewMenuEntity1.setUrl(viewMenuEntity.getUrl()); viewMenuEntity1.setViewMenuCategoryId(viewMenuEntity.getViewMenuCategoryId()); viewMenuEntity1.setSort(viewMenuEntity.getSort()); viewMenuEntity1.setRemark(viewMenuEntity.getRemark()); viewMenuEntity1.setGmtModified(new Date()); viewMenuMapper.updateOne(viewMenuEntity1); return viewMenuEntity1; } @Override @Transactional(rollbackFor = Throwable.class) public int deleteAll(List idList) { roleViewMenuMapper.deleteAllByViewMenuIdList(idList); return viewMenuMapper.deleteAll(idList); } @Override public ViewMenuEntity getOne(Long id) { return viewMenuMapper.getOne(id); } /** * 指定用户 id、视图菜单分类 id 获取视图菜单 * * @param userId 用户 id * @param viewMenuCategoryId 视图菜单分类 id * @return */ @Override public List listAllByUserIdAndMenuCategoryId(Long userId, Long viewMenuCategoryId) { List viewMenuCategoryEntityList = null; List userRoleEntityList; if ((userRoleEntityList = userRoleMapper.listAllByUserId(userId)) != null) { List roleEntityList; if ((roleEntityList = roleService.listAllByUserRoleList(userRoleEntityList)) != null) { viewMenuCategoryEntityList = new ArrayList<>(); for (RoleEntity roleEntity : roleEntityList) { viewMenuCategoryEntityList.addAll(viewMenuMapper.listAllByViewMenuCategoryIdAndRoleId(viewMenuCategoryId, roleEntity.getId())); } } } return viewMenuCategoryEntityList; } @Override public Pagination pageAllByViewMenuCategoryId(Integer page, Integer rows, Long viewMenuCategoryId, Long roleId) { Pagination pagination = new Pagination<>(); PageHelper.startPage(page, rows); Page viewMenuEntityPage = viewMenuMapper.pageAllByViewMenuCategoryId(viewMenuCategoryId); List viewMenuEntityListResult = new ArrayList<>(); List viewMenuEntityList = viewMenuEntityPage.getResult(); Integer isOrNotIs = Integer.valueOf((String) dictionaryService.get("IS_OR_NOT", "IS")); Integer isOrNotNot = Integer.valueOf((String) dictionaryService.get("IS_OR_NOT", "NOT")); if (!viewMenuEntityList.isEmpty()) { for (ViewMenuEntity viewMenuEntity : viewMenuEntityList) { if (roleId != null) { if (roleViewMenuMapper.getOneByRoleIdAndViewMenuId(roleId, viewMenuEntity.getId()) != null) { viewMenuEntity.setIsGranted(isOrNotIs); } else { viewMenuEntity.setIsGranted(isOrNotNot); } } viewMenuEntityListResult.add(viewMenuEntity); } } pagination.setRows(viewMenuEntityListResult); pagination.setTotal(viewMenuEntityPage.getTotal()); return pagination; } // @Override // public List listAllAsAntdVueMenuByUserId(Long userId) { // List vueMenuList = new ArrayList<>(0); // List vueMenuListResult = new ArrayList<>(0); // List viewMenuCategoryEntityList = null; // List userRoleEntityList; // List roleIdList = new ArrayList<>(1); // if ((userRoleEntityList = userRoleMapper.listAllByUserId(userId)) != null) { // List roleEntityList; // if ((roleEntityList = roleService.listAllByUserRoleList(userRoleEntityList)) != null) { // for (RoleEntity roleEntity : roleEntityList) { // roleIdList.add(roleEntity.getId()); // } // } // } // viewMenuCategoryEntityList = viewMenuCategoryMapper.listAllByParentIdIsNullAndRoleIdList(roleIdList); // if(viewMenuCategoryEntityList != null) { // for (ViewMenuCategoryEntity viewMenuCategoryEntity : viewMenuCategoryEntityList) { // forEachViewMenuAndViewMenuCategoryByViewMenuCategoryId(viewMenuCategoryEntity.getId(), roleIdList, vueMenuList); // AntdVueMenu vueMenu = new AntdVueMenu(); // vueMenu.setId(viewMenuCategoryEntity.getId()); // vueMenu.setName(viewMenuCategoryEntity.getName()); // vueMenu.setIcon(viewMenuCategoryEntity.getIcon()); // vueMenu.setParentId(viewMenuCategoryEntity.getParentId()); // vueMenu.setIsCategory(true); // vueMenuList.add(vueMenu); // } // } // for(AntdVueMenu vueMenu : vueMenuList) { // if(vueMenu.getParentId() == null) { // vueMenuListResult.add(vueMenu); // } // } // for(AntdVueMenu vueMenu : vueMenuListResult) { // vueMenu.setChildren(forEachVueMenuByVueMenuParentId(vueMenu.getId(), vueMenuList)); // } // return vueMenuListResult; // } } ================================================ FILE: src/main/java/com/godcheese/nimrod/user/service/impl/ViewPageApiServiceImpl.java ================================================ package com.godcheese.nimrod.user.service.impl; import com.godcheese.nimrod.user.entity.ViewPageApiEntity; import com.godcheese.nimrod.user.mapper.ViewPageApiMapper; import com.godcheese.nimrod.user.service.ViewPageApiService; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import java.util.ArrayList; import java.util.List; /** * @author godcheese [godcheese@outlook.com] * @date 2018-02-22 */ @Service public class ViewPageApiServiceImpl implements ViewPageApiService { @Autowired private ViewPageApiMapper viewPageApiMapper; // @Override // public Map isAssociatedByViewPageIdAndApiId(Long viewPageId, Long apiId) { // Map data = new HashMap<>(1); // data.put("isAssociated", false); // ViewPageApiEntity viewPageApiEntity = viewPageApiMapper.getOneByViewPageIdAndApiId(viewPageId, apiId); // if (viewPageApiEntity != null) { // data.put("isAssociated", true); // } // return data; // } @Override public int associateAllByViewPageIdAndApiIdList(Long viewPageId, List apiIdList) { List apiIdList2 = new ArrayList<>(); ViewPageApiEntity viewPageApiEntity; for (Long apiId : apiIdList) { viewPageApiEntity = viewPageApiMapper.getOneByViewPageIdAndApiId(viewPageId, apiId); if (viewPageApiEntity == null) { apiIdList2.add(apiId); } } if (!apiIdList2.isEmpty()) { viewPageApiMapper.insertAllByViewPageIdAndApiIdList(viewPageId, apiIdList2); } return apiIdList2.size(); } @Override public int revokeAssociateAllByViewPageIdAndApiIdList(Long viewPageId, List apiIdList) { return viewPageApiMapper.deleteAllByViewPageIdAndApiIdList(viewPageId, apiIdList); } } ================================================ FILE: src/main/java/com/godcheese/nimrod/user/service/impl/ViewPageCategoryServiceImpl.java ================================================ package com.godcheese.nimrod.user.service.impl; import com.godcheese.nimrod.common.easyui.ComboTree; import com.godcheese.nimrod.common.easyui.EasyUi; import com.godcheese.nimrod.common.others.FailureEntity; import com.godcheese.nimrod.user.entity.ViewPageCategoryEntity; import com.godcheese.nimrod.user.entity.ViewPageEntity; import com.godcheese.nimrod.user.mapper.RoleAuthorityMapper; import com.godcheese.nimrod.user.mapper.ViewPageCategoryMapper; import com.godcheese.nimrod.user.mapper.ViewPageMapper; import com.godcheese.nimrod.user.service.ViewPageCategoryService; import com.godcheese.tile.web.exception.BaseResponseException; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import java.util.ArrayList; import java.util.Date; import java.util.List; /** * @author godcheese [godcheese@outlook.com] * @date 2018-02-22 */ @Service public class ViewPageCategoryServiceImpl implements ViewPageCategoryService { @Autowired private ViewPageCategoryMapper viewPageCategoryMapper; @Autowired private ViewPageMapper viewPageMapper; @Autowired private FailureEntity failureEntity; @Autowired private RoleAuthorityMapper roleAuthorityMapper; @Override public ViewPageCategoryEntity addOne(ViewPageCategoryEntity viewPageCategoryEntity) { Date date = new Date(); viewPageCategoryEntity.setGmtModified(date); viewPageCategoryEntity.setGmtCreated(date); viewPageCategoryMapper.insertOne(viewPageCategoryEntity); return viewPageCategoryEntity; } @Override public ViewPageCategoryEntity saveOne(ViewPageCategoryEntity viewPageCategoryEntity) { ViewPageCategoryEntity viewPageCategoryEntity1 = viewPageCategoryMapper.getOne(viewPageCategoryEntity.getId()); viewPageCategoryEntity1.setName(viewPageCategoryEntity.getName()); viewPageCategoryEntity1.setParentId(viewPageCategoryEntity.getParentId()); viewPageCategoryEntity1.setSort(viewPageCategoryEntity.getSort()); viewPageCategoryEntity1.setRemark(viewPageCategoryEntity.getRemark()); viewPageCategoryEntity1.setGmtModified(new Date()); viewPageCategoryMapper.updateOne(viewPageCategoryEntity1); return viewPageCategoryEntity1; } @Override public int deleteAll(List idList) throws BaseResponseException { int result = 0; for (Long id : idList) { ViewPageCategoryEntity viewPageCategoryEntity = viewPageCategoryMapper.getOneByParentId(id); if (viewPageCategoryEntity != null) { throw new BaseResponseException(failureEntity.i18n("view_page_category.delete_fail_has_children_category")); } ViewPageEntity viewPageEntity = viewPageMapper.getOneByViewPageCategoryId(id); if (viewPageEntity != null) { throw new BaseResponseException(failureEntity.i18n("view_page_category.delete_fail_has_view_page")); } viewPageCategoryMapper.deleteOne(id); result++; } return result; } @Override public ViewPageCategoryEntity getOne(Long id) { return viewPageCategoryMapper.getOne(id); } @Override public List listAllParent() { List viewPageCategoryEntityList = viewPageCategoryMapper.listAllByParentIdIsNull(); List viewPageCategoryEntityListResult = new ArrayList<>(); for (ViewPageCategoryEntity viewPageCategoryEntity : viewPageCategoryEntityList) { if (viewPageCategoryMapper.getOneByParentId(viewPageCategoryEntity.getId()) != null) { viewPageCategoryEntity.setState(EasyUi.State.CLOSED); } viewPageCategoryEntityListResult.add(viewPageCategoryEntity); } return viewPageCategoryEntityListResult; } @Override public List listAllByParentId(Long parentId) { List viewPageCategoryEntityList = viewPageCategoryMapper.listAllByParentId(parentId); List viewPageCategoryEntityListResult = new ArrayList<>(); for (ViewPageCategoryEntity viewPageCategoryEntity : viewPageCategoryEntityList) { if (viewPageCategoryMapper.getOneByParentId(viewPageCategoryEntity.getId()) != null) { viewPageCategoryEntity.setState(EasyUi.State.CLOSED); } viewPageCategoryEntityListResult.add(viewPageCategoryEntity); } return viewPageCategoryEntityListResult; } @Override public List listAllViewPageCategoryComboTree() { List comboTreeList = new ArrayList<>(0); List viewPageCategoryEntityList = viewPageCategoryMapper.listAll(); for (ViewPageCategoryEntity viewPageCategoryEntity : viewPageCategoryEntityList) { ComboTree comboTree = new ComboTree(); comboTree.setId(viewPageCategoryEntity.getId()); comboTree.setText(viewPageCategoryEntity.getName()); comboTree.setParentId(viewPageCategoryEntity.getParentId()); comboTreeList.add(comboTree); } return comboTreeList; } @Override public List getViewPageCategoryChildrenComboTree(long parentId, List viewPageCategoryComboTreeList) { List children = new ArrayList<>(0); for (ComboTree comboTree : viewPageCategoryComboTreeList) { if (comboTree.getParentId() != null && comboTree.getParentId().equals(parentId)) { children.add(comboTree); } } for (ComboTree child : children) { List childChildren = getViewPageCategoryChildrenComboTree(child.getId(), viewPageCategoryComboTreeList); child.setChildren(childChildren); } if (children.size() == 0) { return null; } return children; } } ================================================ FILE: src/main/java/com/godcheese/nimrod/user/service/impl/ViewPageComponentApiServiceImpl.java ================================================ package com.godcheese.nimrod.user.service.impl; import com.godcheese.nimrod.user.entity.ViewPageComponentApiEntity; import com.godcheese.nimrod.user.mapper.ViewPageComponentApiMapper; import com.godcheese.nimrod.user.service.ViewPageComponentApiService; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import java.util.ArrayList; import java.util.List; /** * @author godcheese [godcheese@outlook.com] * @date 2018-02-22 */ @Service public class ViewPageComponentApiServiceImpl implements ViewPageComponentApiService { @Autowired private ViewPageComponentApiMapper viewPageComponentApiMapper; // @Override // public Map isAssociatedByViewPageComponentIdAndApiId(Long viewPageComponentId, Long apiId) { // Map data = new HashMap<>(1); // data.put("isAssociated", false); // ViewPageComponentApiEntity viewPageComponentApiEntity = viewPageComponentApiMapper.getOneByViewPageComponentIdAndApiId(viewPageComponentId, apiId); // // if (viewPageComponentApiEntity != null) { // data.put("isAssociated", true); // } // return data; // } @Override public int associateAllByViewPageComponentIdAndApiIdList(Long viewPageComponentId, List apiIdList) { List apiIdList2 = new ArrayList<>(); ViewPageComponentApiEntity viewPageComponentApiEntity; for (Long apiId : apiIdList) { viewPageComponentApiEntity = viewPageComponentApiMapper.getOneByViewPageComponentIdAndApiId(viewPageComponentId, apiId); if (viewPageComponentApiEntity == null) { apiIdList2.add(apiId); } } if (!apiIdList2.isEmpty()) { viewPageComponentApiMapper.insertAllByViewPageComponentIdAndApiIdList(viewPageComponentId, apiIdList2); } return apiIdList2.size(); } @Override public int revokeAssociateAllByViewPageComponentIdAndApiIdList(Long viewPageComponentId, List apiIdList) { return viewPageComponentApiMapper.deleteAllByViewPageComponentIdAndApiIdList(viewPageComponentId, apiIdList); } } ================================================ FILE: src/main/java/com/godcheese/nimrod/user/service/impl/ViewPageComponentServiceImpl.java ================================================ package com.godcheese.nimrod.user.service.impl; import com.godcheese.nimrod.common.easyui.Pagination; import com.godcheese.nimrod.common.others.FailureEntity; import com.godcheese.nimrod.system.service.DictionaryService; import com.godcheese.nimrod.user.entity.ViewPageComponentEntity; import com.godcheese.nimrod.user.mapper.RoleAuthorityMapper; import com.godcheese.nimrod.user.mapper.ViewPageComponentMapper; import com.godcheese.nimrod.user.service.ViewPageComponentService; import com.godcheese.tile.web.exception.BaseResponseException; import com.github.pagehelper.Page; import com.github.pagehelper.PageHelper; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import java.util.ArrayList; import java.util.Date; import java.util.List; /** * @author godcheese [godcheese@outlook.com] * @date 2018-02-22 */ @Service public class ViewPageComponentServiceImpl implements ViewPageComponentService { @Autowired private ViewPageComponentMapper viewPageComponentMapper; @Autowired private FailureEntity failureEntity; @Autowired private DictionaryService dictionaryService; @Autowired private RoleAuthorityMapper roleAuthorityMapper; @Override public ViewPageComponentEntity addOne(ViewPageComponentEntity viewPageComponentEntity) throws BaseResponseException { Date date = new Date(); String authority = viewPageComponentEntity.getAuthority().toUpperCase(); if (viewPageComponentMapper.getOneByAuthority(authority) != null) { throw new BaseResponseException(failureEntity.i18n("view_page_component.add_fail_authority_exists")); } viewPageComponentEntity.setAuthority(authority); viewPageComponentEntity.setGmtModified(date); viewPageComponentEntity.setGmtCreated(date); viewPageComponentMapper.insertOne(viewPageComponentEntity); return viewPageComponentEntity; } @Override public ViewPageComponentEntity saveOne(ViewPageComponentEntity viewPageComponentEntity) throws BaseResponseException { ViewPageComponentEntity viewPageComponentEntity1 = viewPageComponentMapper.getOne(viewPageComponentEntity.getId()); String authority = viewPageComponentEntity.getAuthority().toUpperCase(); ViewPageComponentEntity viewPageComponentEntity2 = viewPageComponentMapper.getOneByAuthority(authority); if (viewPageComponentEntity2 != null && !viewPageComponentEntity2.getId().equals(viewPageComponentEntity.getId())) { throw new BaseResponseException(failureEntity.i18n("view_page_component.save_fail_authority_exists")); } viewPageComponentEntity1.setViewPageComponentType(viewPageComponentEntity.getViewPageComponentType()); viewPageComponentEntity1.setName(viewPageComponentEntity.getName()); viewPageComponentEntity1.setAuthority(authority); viewPageComponentEntity1.setSort(viewPageComponentEntity.getSort()); viewPageComponentEntity1.setRemark(viewPageComponentEntity.getRemark()); viewPageComponentEntity1.setGmtModified(new Date()); viewPageComponentMapper.updateOne(viewPageComponentEntity1); return viewPageComponentEntity1; } @Override public int deleteAll(List idList) { return viewPageComponentMapper.deleteAll(idList); } @Override public ViewPageComponentEntity getOne(Long id) { return viewPageComponentMapper.getOne(id); } @Override public Pagination pageAllByViewPageId(Integer page, Integer rows, Long viewPageId, Long roleId) { Pagination pagination = new Pagination<>(); PageHelper.startPage(page, rows); Page viewPageComponentEntityPage = viewPageComponentMapper.pageAllByViewPageId(viewPageId); List viewPageComponentEntityList = viewPageComponentEntityPage.getResult(); List viewPageComponentEntityListResult = new ArrayList<>(); Integer isOrNotIs = Integer.valueOf((String) dictionaryService.get("IS_OR_NOT", "IS")); Integer isOrNotNot = Integer.valueOf((String) dictionaryService.get("IS_OR_NOT", "NOT")); if (!viewPageComponentEntityList.isEmpty()) { for (ViewPageComponentEntity viewPageComponentEntity : viewPageComponentEntityList) { if (roleAuthorityMapper.getOneByRoleIdAndAuthority(roleId, viewPageComponentEntity.getAuthority()) != null) { viewPageComponentEntity.setIsGranted(isOrNotIs); } else { viewPageComponentEntity.setIsGranted(isOrNotNot); } viewPageComponentEntityListResult.add(viewPageComponentEntity); } } pagination.setRows(viewPageComponentEntityListResult); pagination.setTotal(viewPageComponentEntityPage.getTotal()); return pagination; } } ================================================ FILE: src/main/java/com/godcheese/nimrod/user/service/impl/ViewPageServiceImpl.java ================================================ package com.godcheese.nimrod.user.service.impl; import com.godcheese.nimrod.common.easyui.Pagination; import com.godcheese.nimrod.common.others.FailureEntity; import com.godcheese.nimrod.system.service.DictionaryService; import com.godcheese.nimrod.user.entity.ViewPageEntity; import com.godcheese.nimrod.user.mapper.RoleAuthorityMapper; import com.godcheese.nimrod.user.mapper.ViewPageMapper; import com.godcheese.nimrod.user.service.ViewPageService; import com.godcheese.tile.web.exception.BaseResponseException; import com.github.pagehelper.Page; import com.github.pagehelper.PageHelper; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import java.util.ArrayList; import java.util.Date; import java.util.List; /** * @author godcheese [godcheese@outlook.com] * @date 2018-02-22 */ @Service public class ViewPageServiceImpl implements ViewPageService { @Autowired private ViewPageMapper viewPageMapper; @Autowired private FailureEntity failureEntity; @Autowired private RoleAuthorityMapper roleAuthorityMapper; @Autowired private DictionaryService dictionaryService; @Override public ViewPageEntity addOne(ViewPageEntity viewPageEntity) throws BaseResponseException { Date date = new Date(); String authority = viewPageEntity.getAuthority().toUpperCase(); ViewPageEntity viewPageEntity2 = viewPageMapper.getOneByAuthority(authority); if (viewPageEntity2 != null) { throw new BaseResponseException(failureEntity.i18n("view_page.add_fail_authority_exists")); } viewPageEntity.setAuthority(authority); viewPageEntity.setGmtModified(date); viewPageEntity.setGmtCreated(date); viewPageMapper.insertOne(viewPageEntity); return viewPageEntity; } @Override public ViewPageEntity saveOne(ViewPageEntity viewPageEntity) throws BaseResponseException { ViewPageEntity viewPageEntity1 = viewPageMapper.getOne(viewPageEntity.getId()); Date date = new Date(); String authority = viewPageEntity.getAuthority().toUpperCase(); ViewPageEntity viewPageEntity2 = viewPageMapper.getOneByAuthority(authority); if (viewPageEntity2 != null && !viewPageEntity2.getId().equals(viewPageEntity.getId())) { throw new BaseResponseException(failureEntity.i18n("view_page.save_fail_authority_exists")); } viewPageEntity1.setName(viewPageEntity.getName()); viewPageEntity1.setUrl(viewPageEntity.getUrl()); viewPageEntity1.setAuthority(authority); viewPageEntity1.setViewPageCategoryId(viewPageEntity.getViewPageCategoryId()); viewPageEntity1.setSort(viewPageEntity.getSort()); viewPageEntity1.setRemark(viewPageEntity.getRemark()); viewPageEntity1.setGmtModified(date); viewPageMapper.updateOne(viewPageEntity1); return viewPageEntity1; } @Override public int deleteAll(List idList) { return viewPageMapper.deleteAll(idList); } @Override public ViewPageEntity getOne(Long id) { return viewPageMapper.getOne(id); } @Override public Pagination pageAllByViewPageCategoryId(Integer page, Integer rows, Long viewPageCategoryId, Long roleId) { Pagination pagination = new Pagination<>(); // if(sorterField != null && !"".equals(sorterField) && sorterOrder != null && !"".equals(sorterOrder)) { // sorterField = StringUtil.camelToUnderline(sorterField); // String orderBy = sorterField + " " + sorterOrder; // PageHelper.startPage(page, rows, orderBy); // } else { PageHelper.startPage(page, rows); // } Page viewPageEntityPage = viewPageMapper.pageAllByViewPageCategoryId(viewPageCategoryId); List viewPageEntityList = viewPageEntityPage.getResult(); List viewPageEntityListResult = new ArrayList<>(); Integer isOrNotIs = Integer.valueOf((String) dictionaryService.get("IS_OR_NOT", "IS")); Integer isOrNotNot = Integer.valueOf((String) dictionaryService.get("IS_OR_NOT", "NOT")); if (!viewPageEntityList.isEmpty()) { for (ViewPageEntity viewPageEntity : viewPageEntityList) { if (roleAuthorityMapper.getOneByRoleIdAndAuthority(roleId, viewPageEntity.getAuthority()) != null) { viewPageEntity.setIsGranted(isOrNotIs); } else { viewPageEntity.setIsGranted(isOrNotNot); } viewPageEntityListResult.add(viewPageEntity); } } pagination.setRows(viewPageEntityListResult); pagination.setTotal(viewPageEntityPage.getTotal()); return pagination; } } ================================================ FILE: src/main/resources/application-dev.properties ================================================ # App app.name=nimrod app.version=${project.version} app.system-admin-role=SYSTEM_ADMIN #app.permit-url=/api/system/dictionary/list_all_by_key/IS_OR_NOT app.permit-url=/api/system/system_info # Server server.port=8083 server.servlet.context-path=/nimrod server.error.path=/500 server.tomcat.mbeanregistry.enabled=true # Database spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver spring.datasource.type=com.alibaba.druid.pool.DruidDataSource spring.datasource.url=jdbc:mysql://localhost:3306/nimrod?useSSL=false&useUnicode=true&characterEncoding=utf-8&allowMultiQueries=true&autoReconnect=true&useJDBCCompliantTimezoneShift=true&useLegacyDatetimeCode=false&serverTimezone=GMT%2B8 spring.datasource.username=nimrod spring.datasource.password=123456 # Druid spring.datasource.druid.stat-view-servlet.enabled=true spring.datasource.druid.stat-view-servlet.url-pattern=/druid/* spring.datasource.druid.stat-view-servlet.allow=null spring.datasource.druid.stat-view-servlet.reset-enable=true spring.datasource.druid.filter.wall.config.multi-statement-allow=true spring.datasource.druid.validation-query=SELECT 1 spring.datasource.druid.web-stat-filter.enabled=true spring.datasource.druid.filter.stat.log-slow-sql=true spring.datasource.druid.filter.stat.enabled=true spring.datasource.druid.filter.wall.enabled=true spring.datasource.druid.filters=stat,wall spring.datasource.druid.filter.wall.config.comment-allow=true # MyBatis # \u5168\u5C40\u6620\u5C04\u5668\u542F\u7528\u7F13\u5B58 mybatis.configuration.cache-enabled=true # \u67E5\u8BE2\u65F6\uFF0C\u5173\u95ED\u5173\u8054\u5BF9\u8C61\u53CA\u65F6\u52A0\u8F7D\u4EE5\u63D0\u9AD8\u6027\u80FD mybatis.configuration.lazy-loading-enabled=true # \u8BBE\u7F6E\u5173\u8054\u5BF9\u8C61\u52A0\u8F7D\u7684\u5F62\u6001\uFF0C\u6B64\u5904\u4E3A\u6309\u9700\u52A0\u8F7D\u5B57\u6BB5\uFF08\u52A0\u8F7D\u5B57\u6BB5\u7531 SQL \u6307\u5B9A\uFF09\uFF0C\u4E0D\u4F1A\u52A0\u8F7D\u5173\u8054\u8868\u7684\u6240\u6709\u5B57\u6BB5\uFF0C\u4EE5\u63D0\u9AD8\u6027\u80FD mybatis.configuration.aggressive-lazy-loading=true # \u5BF9\u4E8E\u4F4D\u7F6E\u7684 SQL \u67E5\u8BE2\uFF0C\u5141\u8BB8\u8FD4\u56DE\u4E0D\u540C\u7684\u7ED3\u679C\u96C6\u4EE5\u8FBE\u5230\u901A\u7528\u7684\u6548\u679C mybatis.configuration.multiple-result-sets-enabled=true # \u5141\u8BB8\u4F7F\u7528\u5217\u6807\u7B7E\u4EE3\u66FF\u5217\u540D\uFF0C\u5373\u5141\u8BB8\u4F7F\u7528\u522B\u540D\u6765\u4EE3\u66FF\u5217\u540D mybatis.configuration.use-column-label=true # \u5141\u8BB8\u4F7F\u7528\u81EA\u5B9A\u4E49\u7684\u4E3B\u952E\u503C\uFF08\u6BD4\u5982\u7531\u7A0B\u5E8F\u751F\u6210\u7684 UUID 32 \u4F4D\u7F16\u7801\u4F5C\u4E3A\u952E\u503C\uFF09\uFF0C\u6570\u636E\u8868\u7684 pk \u751F\u6210\u7B56\u7565\u5C06\u88AB\u8986\u76D6 mybatis.configuration.use-generated-keys=true # \u7ED9\u4E88\u88AB\u5D4C\u5957\u7684 resultMap \u4EE5\u5B57\u6BB5-\u5C5E\u6027\u7684\u6620\u5C04\u652F\u6301 mybatis.configuration.auto-mapping-behavior=partial # \u5BF9\u4E8E\u6279\u91CF\u66F4\u65B0\u64CD\u4F5C\u7F13\u5B58 SQL \u4EE5\u63D0\u9AD8\u6027\u80FD mybatis.configuration.default-executor-type=reuse # \u6570\u636E\u5E93\u8D85\u8FC7 25000 \u79D2\u4ECD\u672A\u54CD\u5E94\u5219\u8D85\u65F6 mybatis.configuration.default-statement-timeout=25000 mybatis.configuration.jdbc-type-for-null=null # \u6253\u5370\u67E5\u8BE2\u8BED\u53E5 mybatis.configuration.log-impl=org.apache.ibatis.logging.stdout.StdOutImpl # PageHelper pagehelper.helper-dialect=mysql pagehelper.reasonable=true pagehelper.support-methods-arguments=true # Quartz spring.quartz.job-store-type=jdbc spring.quartz.startup-delay=5s spring.quartz.properties.org.quartz.jobListener.NAME.class=com.godcheese.nimrod.quartz.listener.GlobalJobListener # Spring spring.application.name=${app.name} # Jackson spring.jackson.date-format=yyyy-MM-dd HH:mm:ss spring.jackson.locale=zh_CN spring.jackson.time-zone=GMT+8 # Thymeleaf spring.thymeleaf.encoding=UTF-8 spring.thymeleaf.cache=false spring.thymeleaf.prefix=classpath:/templates/ spring.thymeleaf.suffix=.html spring.thymeleaf.servlet.content-type=text/html spring.thymeleaf.mode=HTML # Logback log.dir=./logs/${app.name} log.max-history=30 log.max-file-size=10MB log.total-size-cap=2GB ================================================ FILE: src/main/resources/application-prod.properties ================================================ # App app.name=nimrod app.version=${project.version} app.system-admin-role=SYSTEM_ADMIN #app.permit-url=/api/system/dictionary/list_all_by_key/IS_OR_NOT app.permit-url=/api/system/system_info # Server server.port=8083 server.servlet.context-path=/nimrod server.error.path=/500 server.tomcat.mbeanregistry.enabled=true # Database spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver spring.datasource.type=com.alibaba.druid.pool.DruidDataSource spring.datasource.url=jdbc:mysql://localhost:3306/nimrod?useSSL=false&useUnicode=true&characterEncoding=utf-8&allowMultiQueries=true&autoReconnect=true&useJDBCCompliantTimezoneShift=true&useLegacyDatetimeCode=false&serverTimezone=GMT%2B8 spring.datasource.username=nimrod spring.datasource.password=123456 # Druid spring.datasource.druid.stat-view-servlet.enabled=true spring.datasource.druid.stat-view-servlet.url-pattern=/druid/* spring.datasource.druid.stat-view-servlet.allow=null spring.datasource.druid.stat-view-servlet.reset-enable=true spring.datasource.druid.filter.wall.config.multi-statement-allow=true spring.datasource.druid.validation-query=SELECT 1 spring.datasource.druid.web-stat-filter.enabled=true spring.datasource.druid.filter.stat.log-slow-sql=true spring.datasource.druid.filter.stat.enabled=true spring.datasource.druid.filter.wall.enabled=true spring.datasource.druid.filters=stat,wall spring.datasource.druid.filter.wall.config.comment-allow=true # MyBatis # \u5168\u5C40\u6620\u5C04\u5668\u542F\u7528\u7F13\u5B58 mybatis.configuration.cache-enabled=true # \u67E5\u8BE2\u65F6\uFF0C\u5173\u95ED\u5173\u8054\u5BF9\u8C61\u53CA\u65F6\u52A0\u8F7D\u4EE5\u63D0\u9AD8\u6027\u80FD mybatis.configuration.lazy-loading-enabled=true # \u8BBE\u7F6E\u5173\u8054\u5BF9\u8C61\u52A0\u8F7D\u7684\u5F62\u6001\uFF0C\u6B64\u5904\u4E3A\u6309\u9700\u52A0\u8F7D\u5B57\u6BB5\uFF08\u52A0\u8F7D\u5B57\u6BB5\u7531 SQL \u6307\u5B9A\uFF09\uFF0C\u4E0D\u4F1A\u52A0\u8F7D\u5173\u8054\u8868\u7684\u6240\u6709\u5B57\u6BB5\uFF0C\u4EE5\u63D0\u9AD8\u6027\u80FD mybatis.configuration.aggressive-lazy-loading=true # \u5BF9\u4E8E\u4F4D\u7F6E\u7684 SQL \u67E5\u8BE2\uFF0C\u5141\u8BB8\u8FD4\u56DE\u4E0D\u540C\u7684\u7ED3\u679C\u96C6\u4EE5\u8FBE\u5230\u901A\u7528\u7684\u6548\u679C mybatis.configuration.multiple-result-sets-enabled=true # \u5141\u8BB8\u4F7F\u7528\u5217\u6807\u7B7E\u4EE3\u66FF\u5217\u540D\uFF0C\u5373\u5141\u8BB8\u4F7F\u7528\u522B\u540D\u6765\u4EE3\u66FF\u5217\u540D mybatis.configuration.use-column-label=true # \u5141\u8BB8\u4F7F\u7528\u81EA\u5B9A\u4E49\u7684\u4E3B\u952E\u503C\uFF08\u6BD4\u5982\u7531\u7A0B\u5E8F\u751F\u6210\u7684 UUID 32 \u4F4D\u7F16\u7801\u4F5C\u4E3A\u952E\u503C\uFF09\uFF0C\u6570\u636E\u8868\u7684 pk \u751F\u6210\u7B56\u7565\u5C06\u88AB\u8986\u76D6 mybatis.configuration.use-generated-keys=true # \u7ED9\u4E88\u88AB\u5D4C\u5957\u7684 resultMap \u4EE5\u5B57\u6BB5-\u5C5E\u6027\u7684\u6620\u5C04\u652F\u6301 mybatis.configuration.auto-mapping-behavior=partial # \u5BF9\u4E8E\u6279\u91CF\u66F4\u65B0\u64CD\u4F5C\u7F13\u5B58 SQL \u4EE5\u63D0\u9AD8\u6027\u80FD mybatis.configuration.default-executor-type=reuse # \u6570\u636E\u5E93\u8D85\u8FC7 25000 \u79D2\u4ECD\u672A\u54CD\u5E94\u5219\u8D85\u65F6 mybatis.configuration.default-statement-timeout=25000 mybatis.configuration.jdbc-type-for-null=null # \u6253\u5370\u67E5\u8BE2\u8BED\u53E5 mybatis.configuration.log-impl=org.apache.ibatis.logging.stdout.StdOutImpl # PageHelper pagehelper.helper-dialect=mysql pagehelper.reasonable=true pagehelper.support-methods-arguments=true # Quartz spring.quartz.job-store-type=jdbc spring.quartz.startup-delay=5s spring.quartz.properties.org.quartz.jobListener.NAME.class=com.godcheese.nimrod.quartz.listener.GlobalJobListener # Spring spring.application.name=${app.name} # Jackson spring.jackson.date-format=yyyy-MM-dd HH:mm:ss spring.jackson.locale=zh_CN spring.jackson.time-zone=GMT+8 # Thymeleaf spring.thymeleaf.encoding=UTF-8 spring.thymeleaf.cache=false spring.thymeleaf.prefix=classpath:/templates/ spring.thymeleaf.suffix=.html spring.thymeleaf.servlet.content-type=text/html spring.thymeleaf.mode=HTML # Logback log.dir=./logs/${app.name} log.max-history=30 log.max-file-size=10MB log.total-size-cap=2GB ================================================ FILE: src/main/resources/application.properties ================================================ spring.profiles.active=dev ================================================ FILE: src/main/resources/i18n/zh_cn.properties ================================================ user.login_fail_account_or_password_error.message=\u767B\u5F55\u5931\u8D25\uFF0C\u8D26\u53F7\u6216\u5BC6\u7801\u9519\u8BEF user.login_fail_account_or_password_error.code=404 user.login_fail_account_is_not_enable.message=\u767B\u5F55\u5931\u8D25\uFF0C\u8D26\u53F7\u672A\u542F\u7528 user.login_fail_account_is_not_enable.code=0 user.login_fail_account_deleted.message=\u767B\u5F55\u5931\u8D25\uFF0C\u8D26\u53F7\u4E0D\u5B58\u5728 user.login_fail_account_deleted.code=0 user.full_authentication_is_required_to_access_this_resource.message=\u8BBF\u95EE\u6B64\u8D44\u6E90\u9700\u8981\u5B8C\u5168\u8EAB\u4EFD\u9A8C\u8BC1 user.full_authentication_is_required_to_access_this_resource.code=401 user.logout_fail.message=\u6CE8\u9500\u5931\u8D25 user.add_fail.message=\u65B0\u589E\u5931\u8D25 user.delete_fail.message=\u5220\u9664\u5931\u8D25 user.save_fail.message=\u4FDD\u5B58\u5931\u8D25 user.username_exists.message=\u8BE5\u7528\u6237\u540D\u5DF2\u5B58\u5728 user.new_password_and_confirm_new_password_error.message=\u65B0\u5BC6\u7801\u4E0E\u91CD\u8F93\u5BC6\u7801\u4E0D\u76F8\u540C user.original_password_error.message=\u539F\u5BC6\u7801\u9519\u8BEF user.new_password_must_length.message=\u65B0\u5BC6\u7801\u957F\u5EA6\u4E3A6-32\u4E2A\u5B57\u7B26 user.same_as_the_original_password.message=\u65B0\u5BC6\u7801\u4E0E\u539F\u5BC6\u7801\u76F8\u540C\uFF0C\u65E0\u9700\u66F4\u6539 #user.save_profile_fail_password_error.message=\u4FDD\u5B58\u5931\u8D25\uFF0C\u5BC6\u7801\u9519\u8BEF user_verify_code.send_fail.message=\u9A8C\u8BC1\u7801\u53D1\u9001\u5931\u8D25\uFF0C\u8BF7\u7A0D\u540E\u91CD\u8BD5 user_verify_code.verification_code_error.message=\u9A8C\u8BC1\u7801\u9519\u8BEF user_verify_code.too_frequent_operation.message=\u64CD\u4F5C\u8FC7\u4E8E\u9891\u7E41\uFF0C\u8BF7\u572860\u79D2\u540E\u91CD\u8BD5 user_verify_code.verification_code_error_or_expires.message=\u9A8C\u8BC1\u7801\u9519\u8BEF\u6216\u5DF2\u8FC7\u671F\uFF0C\u8BF7\u91CD\u65B0\u53D1\u9001 api.add_fail_authority_exists.message=\u65B0\u589E\u5931\u8D25\uFF0C\u6743\u9650\uFF08authority\uFF09\u5DF2\u5B58\u5728 api_category.delete_fail_has_children_category.message=\u5220\u9664\u5931\u8D25\uFF0C\u8BE5\u5206\u7C7B\u4E0B\u5B58\u5728\u5B50\u7EA7\u5206\u7C7B api_category.delete_fail_has_children_category.code= api_category.delete_fail_has_api.message=\u5220\u9664\u5931\u8D25\uFF0C\u8BE5\u5206\u7C7B\u4E0B\u5B58\u5728 API api_category.add_fail.message=\u65B0\u589E\u5931\u8D25\uFF0C\u6743\u9650\uFF08authority\uFF09\u5DF2\u5B58\u5728 api_category.save_fail_do_not_save_self_api_category.message=\u4FDD\u5B58\u5931\u8D25\uFF0C\u4E0D\u80FD\u5C06\u7236\u7EA7\u5206\u7C7B\u4FDD\u5B58\u4E3A\u672C\u8EAB dictionary.import_fail.message=\u6570\u636E\u5B57\u5178\u5BFC\u5165\u5931\u8D25 dictionary_category.save_fail_do_not_save_self_dictionary_category.message=\u4FDD\u5B58\u5931\u8D25\uFF0C\u4E0D\u80FD\u5C06\u7236\u7EA7\u5206\u7C7B\u4FDD\u5B58\u4E3A\u672C\u8EAB dictionary_category.delete_fail_has_children_category.message=\u5220\u9664\u5931\u8D25\uFF0C\u8BE5\u5206\u7C7B\u4E0B\u5B58\u5728\u5B50\u7EA7\u5206\u7C7B dictionary_category.delete_fail_has_dictionary.message=\u5220\u9664\u5931\u8D25\uFF0C\u8BE5\u5206\u7C7B\u4E0B\u5B58\u5728\u5B57\u5178 view_page_category.delete_fail_has_children_category.message=\u5220\u9664\u5931\u8D25\uFF0C\u8BE5\u5206\u7C7B\u4E0B\u5B58\u5728\u5B50\u7EA7\u5206\u7C7B view_page_category.delete_fail_has_view_page.message=\u5220\u9664\u5931\u8D25\uFF0C\u8BE5\u5206\u7C7B\u4E0B\u5B58\u5728\u9875\u9762 view_page_component.add_fail_authority_exists.message=\u65B0\u589E\u5931\u8D25\uFF0C\u6743\u9650\uFF08authority\uFF09\u5DF2\u5B58\u5728 view_page_component.save_fail_authority_exists.message=\u4FDD\u5B58\u5931\u8D25\uFF0C\u6743\u9650\uFF08authority\uFF09\u5DF2\u5B58\u5728 role.add_fail_value_exists.message=\u65B0\u589E\u5931\u8D25\uFF0C\u89D2\u8272\u503C\u5DF2\u5B58\u5728 role.save_fail_value_exists.message=\u4FDD\u5B58\u5931\u8D25\uFF0C\u89D2\u8272\u503C\u5DF2\u5B58\u5728 role.delete_fail_has_user.message=\u5220\u9664\u5931\u8D25\uFF0C\u8BE5\u89D2\u8272\u4E0B\u5B58\u5728\u7528\u6237 view_menu_category.delete_fail_has_children_category.message=\u5220\u9664\u5931\u8D25\uFF0C\u8BE5\u5206\u7C7B\u4E0B\u5B58\u5728\u5B50\u7EA7\u5206\u7C7B view_menu_category.delete_fail_has_view_menu.message=\u5220\u9664\u5931\u8D25\uFF0C\u8BE5\u5206\u7C7B\u4E0B\u5B58\u5728\u83DC\u5355 oauth_client.add_fail_oauth_client_exists.message=\u65B0\u589E\u5931\u8D25\uFF0C\u8BE5 OAuth \u5BA2\u6237\u7AEF\u5DF2\u5B58\u5728 oauth_client.save_fail_oauth_client_exists.message=\u4FDD\u5B58\u5931\u8D25\uFF0C\u8BE5 OAuth \u5BA2\u6237\u7AEF\u5DF2\u5B58\u5728 oauth_client.delete_fail.message=\u5220\u9664\u5931\u8D25 view_page.add_fail_authority_exists.message=\u65B0\u589E\u5931\u8D25\uFF0C\u6743\u9650\uFF08authority\uFF09\u5DF2\u5B58\u5728 view_page.save_fail_authority_exists.message=\u4FDD\u5B58\u5931\u8D25\uFF0C\u6743\u9650\uFF08authority\uFF09\u5DF2\u5B58\u5728 system.verify_code_create_fail.message=\u9A8C\u8BC1\u7801\u751F\u6210\u9519\u8BEF system.verify_code_create_fail_font_not_exists.message=\u9A8C\u8BC1\u7801\u751F\u6210\u9519\u8BEF\uFF0C\u5B57\u4F53\u6587\u4EF6\u4E0D\u5B58\u5728\uFF1A%s department.delete_fail_has_user.message=\u5220\u9664\u5931\u8D25\uFF0C\u8BE5\u90E8\u95E8\u4E0B\u5B58\u5728\u7528\u6237 department.delete_fail_has_children_department.message=\u5220\u9664\u5931\u8D25\uFF0C\u8BE5\u90E8\u95E8\u4E0B\u5B58\u5728\u5B50\u90E8\u95E8 file.upload_fail_max_upload_size_exceeded.message=\u6587\u4EF6\u4E0A\u4F20\u5931\u8D25\uFF0C\u4E0A\u4F20\u8D85\u51FA\u6700\u5927\u6587\u4EF6\u4E0A\u4F20\u5927\u5C0F%s\u6216\u6700\u5927\u8BF7\u6C42\u4E0A\u4F20\u5927\u5C0F%s file.upload_fail.message=\u6587\u4EF6\u4E0A\u4F20\u5931\u8D25 file.download_fail_file_not_exists.message=\u6587\u4EF6\u4E0B\u8F7D\u5931\u8D25\uFF0C\u6587\u4EF6\u4E0D\u5B58\u5728 file.download_fail.message=\u6587\u4EF6\u4E0B\u8F7D\u5931\u8D25 quartz_job.add_fail.message=\u4EFB\u52A1\u65B0\u589E\u5931\u8D25 quartz_job.delete_fail.message=\u4EFB\u52A1\u5220\u9664\u5931\u8D25 quartz_job.update_fail.message=\u4EFB\u52A1\u66F4\u65B0\u5931\u8D25 quartz_job.pause_fail.message=\u4EFB\u52A1\u6682\u505C\u5931\u8D25 quartz_job.resume_fail.message=\u4EFB\u52A1\u6062\u590D\u5931\u8D25 mail.add_fail.message=\u90AE\u4EF6\u53D1\u9001\u5931\u8D25 ================================================ FILE: src/main/resources/logback-spring.xml ================================================ logback DEBUG %d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{36} Line:%-3L - %msg%n UTF-8 ERROR ACCEPT DENY %d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{36} Line:%-3L - %msg%n UTF-8 true ${log.dir}/error/log_error_%d{yyyy-MM-dd}.%i.log ${log.max_file_size} ${log.max_history} ${log.total_size_cap} WARN ACCEPT DENY %d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{36} Line:%-3L - %msg%n UTF-8 true ${log.dir}/warn/log_warn_%d{yyyy-MM-dd}.%i.log ${log.max_file_size} ${log.max_history} ${log.total_size_cap} INFO ACCEPT DENY %d{yyyy-MM-dd HH:mm:ss.SSS} |-%-5level in %logger Line:%-3L - %msg%n UTF-8 true ${log.dir}/info/log_info_%d{yyyy-MM-dd}.%i.log ${log.max_file_size} ${log.max_history} ${log.total_size_cap} 0 256 0 256 0 256 0 256 ================================================ FILE: src/main/resources/static/assets/css/base.css ================================================ /*! normalize.css v8.0.1 | MIT License | github.com/necolas/normalize.css */ /* Document ========================================================================== */ /** * 1. Correct the line height in all browsers. * 2. Prevent adjustments of font size after orientation changes in iOS. */ html { line-height: 1.15; /* 1 */ -webkit-text-size-adjust: 100%; /* 2 */ } /* Sections ========================================================================== */ /** * Remove the margin in all browsers. */ body { margin: 0; } /** * Render the `main` element consistently in IE. */ main { display: block; } /** * Correct the font size and margin on `h1` elements within `section` and * `article` contexts in Chrome, Firefox, and Safari. */ h1 { font-size: 2em; margin: 0.67em 0; } /* Grouping content ========================================================================== */ /** * 1. Add the correct box sizing in Firefox. * 2. Show the overflow in Edge and IE. */ hr { box-sizing: content-box; /* 1 */ height: 0; /* 1 */ overflow: visible; /* 2 */ } /** * 1. Correct the inheritance and scaling of font size in all browsers. * 2. Correct the odd `em` font sizing in all browsers. */ pre { font-family: monospace, monospace; /* 1 */ font-size: 1em; /* 2 */ } /* Text-level semantics ========================================================================== */ /** * Remove the gray background on active links in IE 10. */ a { background-color: transparent; } /** * 1. Remove the bottom border in Chrome 57- * 2. Add the correct text decoration in Chrome, Edge, IE, Opera, and Safari. */ abbr[title] { border-bottom: none; /* 1 */ text-decoration: underline; /* 2 */ text-decoration: underline dotted; /* 2 */ } /** * Add the correct font weight in Chrome, Edge, and Safari. */ b, strong { font-weight: bolder; } /** * 1. Correct the inheritance and scaling of font size in all browsers. * 2. Correct the odd `em` font sizing in all browsers. */ code, kbd, samp { font-family: monospace, monospace; /* 1 */ font-size: 1em; /* 2 */ } /** * Add the correct font size in all browsers. */ small { font-size: 80%; } /** * Prevent `sub` and `sup` elements from affecting the line height in * all browsers. */ sub, sup { font-size: 75%; line-height: 0; position: relative; vertical-align: baseline; } sub { bottom: -0.25em; } sup { top: -0.5em; } /* Embedded content ========================================================================== */ /** * Remove the border on images inside links in IE 10. */ img { border-style: none; } /* Forms ========================================================================== */ /** * 1. Change the font styles in all browsers. * 2. Remove the margin in Firefox and Safari. */ button, input, optgroup, select, textarea { font-family: inherit; /* 1 */ font-size: 100%; /* 1 */ line-height: 1.15; /* 1 */ margin: 0; /* 2 */ } /** * Show the overflow in IE. * 1. Show the overflow in Edge. */ button, input { /* 1 */ overflow: visible; } /** * Remove the inheritance of text transform in Edge, Firefox, and IE. * 1. Remove the inheritance of text transform in Firefox. */ button, select { /* 1 */ text-transform: none; } /** * Correct the inability to style clickable types in iOS and Safari. */ button, [type="button"], [type="reset"], [type="submit"] { -webkit-appearance: button; } /** * Remove the inner border and padding in Firefox. */ button::-moz-focus-inner, [type="button"]::-moz-focus-inner, [type="reset"]::-moz-focus-inner, [type="submit"]::-moz-focus-inner { border-style: none; padding: 0; } /** * Restore the focus styles unset by the previous rule. */ button:-moz-focusring, [type="button"]:-moz-focusring, [type="reset"]:-moz-focusring, [type="submit"]:-moz-focusring { outline: 1px dotted ButtonText; } /** * Correct the padding in Firefox. */ fieldset { padding: 0.35em 0.75em 0.625em; } /** * 1. Correct the text wrapping in Edge and IE. * 2. Correct the color inheritance from `fieldset` elements in IE. * 3. Remove the padding so developers are not caught out when they zero out * `fieldset` elements in all browsers. */ legend { box-sizing: border-box; /* 1 */ color: inherit; /* 2 */ display: table; /* 1 */ max-width: 100%; /* 1 */ padding: 0; /* 3 */ white-space: normal; /* 1 */ } /** * Add the correct vertical alignment in Chrome, Firefox, and Opera. */ progress { vertical-align: baseline; } /** * Remove the default vertical scrollbar in IE 10+. */ textarea { overflow: auto; } /** * 1. Add the correct box sizing in IE 10. * 2. Remove the padding in IE 10. */ [type="checkbox"], [type="radio"] { box-sizing: border-box; /* 1 */ padding: 0; /* 2 */ } /** * Correct the cursor style of increment and decrement buttons in Chrome. */ [type="number"]::-webkit-inner-spin-button, [type="number"]::-webkit-outer-spin-button { height: auto; } /** * 1. Correct the odd appearance in Chrome and Safari. * 2. Correct the outline style in Safari. */ [type="search"] { -webkit-appearance: textfield; /* 1 */ outline-offset: -2px; /* 2 */ } /** * Remove the inner padding in Chrome and Safari on macOS. */ [type="search"]::-webkit-search-decoration { -webkit-appearance: none; } /** * 1. Correct the inability to style clickable types in iOS and Safari. * 2. Change font properties to `inherit` in Safari. */ ::-webkit-file-upload-button { -webkit-appearance: button; /* 1 */ font: inherit; /* 2 */ } /* Interactive ========================================================================== */ /* * Add the correct display in Edge, IE 10+, and Firefox. */ details { display: block; } /* * Add the correct display in all browsers. */ summary { display: list-item; } /* Misc ========================================================================== */ /** * Add the correct display in IE 10+. */ template { display: none; } /** * Add the correct display in IE 10. */ [hidden] { display: none; } /*! normalize.css end */ /**{outline: 1px solid red;}*/ html, body, div, span, applet, object, iframe, h1, h2, h3, h4, h5, h6, p, blockquote, pre, a, abbr, acronym, address, big, cite, code, del, dfn, em, img, ins, kbd, q, s, samp, small, strike, strong, sub, sup, tt, var, b, u, i, center, dl, dt, dd, ol, ul, li, fieldset, form, label, legend, table, caption, tbody, tfoot, thead, tr, th, td, article, aside, canvas, details, embed, figure, figcaption, footer, header, hgroup, menu, nav, output, ruby, section, summary, time, mark, audio, video, img, input, button { margin: 0; padding: 0; border: 0; font: inherit; font-size: 100%; vertical-align: baseline; outline-style: none; /*去掉环绕边框*/ } html { line-height: 1; background: #f0f0f0; } ol, ul { list-style: none } table { border-collapse: collapse; border-spacing: 0 } caption, th, td { text-align: left; font-weight: normal; vertical-align: middle } q, blockquote { quotes: none } q:before, q:after, blockquote:before, blockquote:after { content: ""; content: none } a img { border: none } article, aside, details, figcaption, figure, footer, header, hgroup, main, menu, nav, section, summary { display: block } html { *overflow: auto } body, button, input, select, textarea { font-family: PingFang SC, Lantinghei SC, Microsoft Yahei, Hiragino Sans GB, Microsoft Sans Serif, WenQuanYi Micro Hei, sans; font-size: 12px; } .clearfix:after { content: ""; display: block; height: 0; clear: both; visibility: hidden } .clearfix { display: inline-block } .clearfix { height: 1% } .clearfix { display: block; overflow: hidden } .ellipsis { text-overflow: ellipsis; white-space: nowrap; overflow: hidden } /*b {*/ /* a background: #036;*/ /* a: hover #114f8e;*/ /*background: #026890;*/ /*a:hover:background-color: rgba(255,255,255,.1);*/ /*.nav-bar li.a, .nav-bar li:hover {*/ /*background-color: rgba(255,255,255,.1);*/ /*}*/ /*黑、青色*/ /*background:#373d41;*/ /*a:hover:#30c5c3;*/ /*黑色、绿色*/ /*background: #333;*/ /*border-left: 1px solid #444;*/ /*border-right: 1px solid #000;*/ /*#41cd52*/ /*.bus_effect_2 {*/ /*-webkit-transform: translateY(15px);*/ /*transform: translateY(15px);*/ /*-webkit-animation: moveUp 0.65s ease forwards;*/ /*animation: moveUp 0.65s ease forwards;*/ /*}*/ /*绿色 绿色*/ /*background: #009e73;*/ /*a background: #05b88a;*/ /*color: #fff!important;*/ /*position: static;*/ /*font-size: 30px;*/ /*background: #008fd4;*/ /*padding-left: 25px;*/ /*position: relative;*/ /*display: block;*/ /*left: 0!Important;*/ /*height: 74px;*/ /*line-height: 74px;*/ /*}*/ ================================================ FILE: src/main/resources/static/assets/css/global.css ================================================ ================================================ FILE: src/main/resources/static/assets/css/index.css ================================================ .tab-iframe { border: 0; width: 100%; height: 100%; overflow: hidden; padding: 10px; } .header { padding: 0; margin: 0 auto; height: 50px; left: 0; right: 0; background: #005EA5; min-width: 1370px; position: relative; } .header .header-logo { float: left; padding: 0 60px; height: 100%; width: 220px; line-height: 50px; } .header .header-logo img { vertical-align: middle; margin-left: -10px; } .header .header-nav { position: relative; float: left; } .header .header-user { position: relative; float: right; margin-right: 20px; padding: 0 14px 0 10px; height: 50px; line-height: 50px; cursor: pointer; } .header .header-user .user-dropdown-menu li:hover { background: #e2e2e2; } .header .header-user:hover .user-dropdown-menu { display: block; } .header .header-user .user-avatar { float: left; margin: 8px 8px 0 0; width: 35px; height: 35px; } .header .header-user .user-avatar img { border-radius: 20px; -webkit-border-radius: 20px; -moz-border-radius: 20px; width: 35px; height: 35px; } .header .header-user .user-name { float: left; max-width: 150px; color: #ffffff; font-size: 14px; margin-right: 5px; } .header .header-user .user-dropdown { color: #ffffff; position: relative; top: -2px; } .header .header-user .fa { color: #7F92A9 } .header .header-nav .nav-prev, .header .header-nav .nav-next { position: absolute; right: -32px; top: 4px; width: 22px; height: 19px; background: #0071C1; color: #ffffff; text-decoration: none; text-align: center; line-height: 18px; font-size: 14px !important; } .header .nav-prev.disabled, .header .nav-next.disabled { color: #cccccc; background: #fff; cursor: default; } .ellipsis { text-overflow: ellipsis; white-space: nowrap; overflow: hidden; } .header .header-user .user-dropdown-menu { display: none; position: absolute; left: 0; right: 0; top: 50px; background: #fff; z-index: 1; border: 1px solid #bfbfbf; box-shadow: 1px 1px 2px #dddddd; } .header .header-user .user-dropdown-menu li { height: 30px; line-height: 30px; font-size: 13px; padding: 0 15px; } .header .header-user .user-dropdown-menu li a { color: #000000; text-decoration: none; } .header .header-user .user-dropdown-menu li .fa { margin-right: 10px; color: #000000; } .header .header-nav .nav-wrap { float: left; height: 50px; width: 625px; overflow: hidden; } .header .nav-wrap-ul { float: left; } .header .header-nav .nav-item.selected, .header .header-nav .nav-item:hover, .header .header-user:hover { background: #0071C1; } .header .header-nav .nav-item { float: left; height: 50px; line-height: 50px; color: #ffffff; padding: 0 15px; cursor: pointer; font-size: 16px; } .header .header-nav .nav-item.selected a { color: #ffffff; } .header .header-nav .nav-item a { display: block; color: #ffffff; text-decoration: none; height: 50px; } .header .header-nav .nav-item .fa { line-height: 50px; margin-right: 3px; font-size: 18px; height: 50px; } .header .header-nav .nav-next { top: 25px; } ol, ul { list-style: none; } .container { position: absolute; top: 50px; bottom: 0; left: 0; right: 0; padding: 0; z-index: 0; transition: all 0.3s ease; min-width: 1370px; } #left { width: 225px; } #top { height: 70px; margin: 0; padding: 0; } #left { margin: 0; padding: 0; } #bottom { background: #f3f3f3; color: #575765; height: 28px; overflow: hidden; margin: 0; padding: 0; } #bottom .footer { text-align: center; line-height: 28px; font-size: 12px; } /*#top .pageTitle {*/ /* font-size: 20px;*/ /*}*/ /*#top .rightMenu {*/ /* float: right !important;*/ /* line-height: 40px !important;*/ /*}*/ /*#top .rightMenu a {*/ /* font-size: 14px;*/ /* text-decoration: none;*/ /* color: #ffffff;*/ /* padding: 5px 8px;*/ /*}*/ /*#top .rightMenu ul li a.avatar {*/ /* background: transparent;*/ /* border: 0;*/ /*}*/ #center .tabs { list-style-type: none; margin: 0; padding: 0; width: 50000px; border-width: 0; } #center .tabs-closable { padding-right: 12px; } #center .tabs li a.tabs-inner { border-width: 0; } #center .tabs li { margin: 0; } #center .tabs-panels { border-bottom: 0; } #center .tabs li.tabs-selected a.tabs-inner { font-weight: normal; outline: none; } #center .tabs li a.tabs-inner { display: inline-block; text-decoration: none; margin: 0; padding: 0 18px; height: 25px; text-align: center; white-space: nowrap; } #center .tabs-tool { position: absolute; bottom: 0; padding: 0; overflow: hidden; border-width: 1px; border-style: solid; height: 100%; border-top: 0; border-bottom: 0; } #center .tabs-title { font-size: 12px; } #center.tabs-icon { position: absolute; width: 16px; height: 16px; left: 10px; top: 50%; margin-top: -8px; font-size: 14px; } #top, #tabs .tabs-panels > .panel > .panel-body, .messager-body { overflow: hidden; } #center .tabs-container { overflow: hidden; } #center .tabs-header { border-width: 1px; border-style: solid; border-bottom-width: 0; position: relative; padding: 0; padding-top: 2px; overflow: hidden; } #center .tabs-scroller-left, #center .tabs-scroller-right { position: absolute; top: auto; bottom: 0; width: 18px; font-size: 1px; display: none; cursor: pointer; border-width: 1px; border-style: solid; } #center .tabs-scroller-left { left: 0; } #center .tabs-scroller-right { right: 0; } #center .tabs-tool { position: absolute; bottom: 0; padding: 1px; overflow: hidden; border-width: 1px; border-style: solid; } #center .tabs-header-plain .tabs-tool { padding: 0 1px; } #center .tabs-wrap { position: relative; left: 0; overflow: hidden; width: 100%; margin: 0; padding: 0; } #center .tabs-scrolling { margin-left: 18px; margin-right: 18px; } #center .tabs-disabled { opacity: 0.3; filter: alpha(opacity=30); } #center .tabs { list-style-type: none; height: 26px; margin: 0px; padding: 0px; padding-left: 4px; width: 50000px; border-style: solid; border-width: 0 0 1px 0; } #center .tabs li { float: left; display: inline-block; margin: -1px 0 -1px 0; padding: 0; position: relative; border: 0; } #center .tabs li .tabs-inner { display: inline-block; text-decoration: none; cursor: hand; cursor: pointer; margin: 0; padding: 0 10px; height: 25px; line-height: 25px; text-align: center; white-space: nowrap; border-width: 1px; border-style: solid; /*-moz-border-radius: 5px 5px 0 0;*/ /*-webkit-border-radius: 5px 5px 0 0;*/ /*border-radius: 5px 5px 0 0;*/ -moz-border-radius: 0; -webkit-border-radius: 0; border-radius: 0; } #center .tabs li.tabs-selected .tabs-inner { font-weight: normal; outline: none; } #center .tabs li.tabs-selected .tabs-inner:hover { cursor: default; pointer: default; } #center .tabs li a.tabs-close, #center .tabs-p-tool { position: absolute; font-size: 1px; display: block; height: 16px; padding: 0; top: 50%; margin-top: -6px; overflow: hidden; } #center .tabs li a.tabs-close { width: 18px; margin-top: -9px; right: 5px; opacity: 0.6; filter: alpha(opacity=60); } #center .tabs-p-tool { right: 16px; } #center .tabs-p-tool a { display: inline-block; font-size: 1px; width: 12px; height: 12px; margin: 0; opacity: 0.6; filter: alpha(opacity=60); } #center .tabs li a:hover.tabs-close, #center .tabs-p-tool a:hover { opacity: 1; filter: alpha(opacity=100); cursor: hand; cursor: pointer; } #center .tabs-with-icon { padding-left: 11px; } #center .tabs-icon { position: absolute; width: 16px; height: 16px; left: 10px; top: 50%; margin-top: -16px; font-size: 14px; } #center .tabs-title { font-size: 12px; } #center .tabs-closable { padding-right: 8px; } #center .tabs-panels { margin: 0px; padding: 0px; border-width: 1px; border-style: solid; border-top-width: 0; overflow: hidden; } #center .tabs-header-bottom { border-width: 0 1px 1px 1px; padding: 0 0 2px 0; } #center .tabs-header-bottom .tabs { border-width: 1px 0 0 0; } #center .tabs-header-bottom .tabs li { margin: -1px 4px 0 0; } #center .tabs-header-bottom .tabs li .tabs-inner { -moz-border-radius: 0; -webkit-border-radius: 0; border-radius: 0; } #center .tabs-header-bottom .tabs-tool { top: 0; } #center .tabs-header-bottom .tabs-scroller-left, #center .tabs-header-bottom .tabs-scroller-right { top: 0; bottom: auto; } #center .tabs-panels-top { border-width: 1px 1px 0 1px; } #center .tabs-header-left { float: left; border-width: 1px 0 1px 1px; padding: 0; } #center .tabs-header-right { float: right; border-width: 1px 1px 1px 0; padding: 0; } #center .tabs-header-left .tabs-wrap, #center .tabs-header-right .tabs-wrap { height: 100%; } #center .tabs-header-left .tabs { height: 100%; padding: 4px 0 0 2px; border-width: 0 1px 0 0; } #center .tabs-header-right .tabs { height: 100%; padding: 4px 2px 0 0; border-width: 0 0 0 1px; } #center .tabs-header-left .tabs li, #center .tabs-header-right .tabs li { display: block; width: 100%; position: relative; } #center .tabs-header-left .tabs li { left: auto; right: 0; margin: 0 -1px 4px 0; float: right; } #center .tabs-header-right .tabs li { left: 0; right: auto; margin: 0 0 4px -1px; float: left; } #center .tabs-justified li .tabs-inner { padding-left: 0; padding-right: 0; } #center .tabs-header-left .tabs li .tabs-inner { display: block; text-align: left; padding-left: 10px; padding-right: 10px; -moz-border-radius: 0; -webkit-border-radius: 0; border-radius: 0; } #center .tabs-header-right .tabs li .tabs-inner { display: block; text-align: left; padding-left: 10px; padding-right: 10px; -moz-border-radius: 0; -webkit-border-radius: 0; border-radius: 0; } #center .tabs-panels-right { float: right; border-width: 1px 1px 1px 0; } #center .tabs-panels-left { float: left; border-width: 1px 0 1px 1px; } #center .tabs-header-noborder, #center .tabs-panels-noborder { border: 0px; } #center .tabs-header-plain { border: 0px; background: transparent; } #center .tabs-pill { padding-bottom: 3px; } #center .tabs-header-bottom .tabs-pill { padding-top: 3px; padding-bottom: 0; } #center .tabs-header-left .tabs-pill { padding-right: 3px; } #center .tabs-header-right .tabs-pill { padding-left: 3px; } #center .tabs-header .tabs-pill li .tabs-inner { -moz-border-radius: 0; -webkit-border-radius: 0; border-radius: 0; } #center .tabs-header-narrow, #center .tabs-header-narrow .tabs-narrow { padding: 0; } #center .tabs-narrow li, #center .tabs-header-bottom .tabs-narrow li { margin-left: 0; margin-right: -1px; } #center .tabs-narrow li.tabs-last, #center .tabs-header-bottom .tabs-narrow li.tabs-last { margin-right: 0; } #center .tabs-header-left .tabs-narrow, #center .tabs-header-right .tabs-narrow { padding-top: 0; } #center .tabs-header-left .tabs-narrow li { margin-bottom: -1px; margin-right: -1px; } #center .tabs-header-left .tabs-narrow li.tabs-last, #center .tabs-header-right .tabs-narrow li.tabs-last { margin-bottom: 0; } #center .tabs-header-right .tabs-narrow li { margin-bottom: -1px; margin-left: -1px; } /*#center .tabs-scroller-left {*/ /* background: #f3f3f3 url('images/tabs_icons.png') no-repeat 1px center;*/ /*}*/ /*#center .tabs-scroller-right {*/ /* background: #f3f3f3 url('images/tabs_icons.png') no-repeat -15px center;*/ /*}*/ #center .tabs li a.tabs-close { /*background: url('images/tabs_icons.png') no-repeat -34px center;*/ background: none; font-family: "iconfont" !important; font-size: 14px; font-style: normal; -webkit-font-smoothing: antialiased; -moz-osx-font-smoothing: grayscale; text-decoration: none; color: #262626; padding: 2px; } #center .tabs li a.tabs-close:before { content: "\e6a2"; } #center .tabs li .tabs-inner:hover { background: #e2e2e2; color: #000000; filter: none; } #center .tabs li.tabs-selected .tabs-inner { background-color: #ffffff; color: #575765; background: #ffffff; background-repeat: repeat-x; filter: none; } #center .tabs-header-bottom .tabs li.tabs-selected .tabs-inner { background: #ffffff; background-repeat: repeat-x; filter: none; } #center .tabs-header-left .tabs li.tabs-selected .tabs-inner { background: #ffffff; background-repeat: repeat-y; filter: none; } #center .tabs-header-right .tabs li.tabs-selected .tabs-inner { background: #ffffff; background-repeat: repeat-y; filter: none; } #center .tabs li .tabs-inner { color: #575765; background-color: #f3f3f3; background: #f3f3f3; background-repeat: repeat-x; filter: none; } #center .tabs-header, #center .tabs-tool { background-color: #f3f3f3; } #center .tabs-header-plain { background: transparent; } #center .tabs-header, #center .tabs-scroller-left, #center .tabs-scroller-right, #center .tabs-tool, #center .tabs, #center .tabs-panels, #center .tabs li .tabs-inner, #center .tabs li.tabs-selected .tabs-inner, #center .tabs-header-bottom .tabs li.tabs-selected .tabs-inner, #center .tabs-header-left .tabs li.tabs-selected .tabs-inner, #center .tabs-header-right .tabs li.tabs-selected .tabs-inner { border-color: #D3D3D3; } #center .tabs-p-tool a:hover, #center .tabs li a:hover.tabs-close, #center .tabs-scroller-over { background-color: #e2e2e2; } #center .tabs li.tabs-selected .tabs-inner { border-bottom: 0 solid #ffffff; } #center .tabs-header-bottom .tabs li.tabs-selected .tabs-inner { border-top: 1px solid #ffffff; } #center .tabs-header-left .tabs li.tabs-selected .tabs-inner { border-right: 1px solid #ffffff; } #center .tabs-header-right .tabs li.tabs-selected .tabs-inner { border-left: 1px solid #ffffff; } #center .tabs-header .tabs-pill li.tabs-selected .tabs-inner { background: #0092DC; color: #fff; filter: none; border-color: #D3D3D3; } #center .l-btn { text-decoration: none; display: inline-block; overflow: hidden; margin: 0; padding: 0; cursor: pointer; outline: none; text-align: center; vertical-align: middle; line-height: normal; } #center .l-btn-plain { border-width: 0; padding: 1px; } #center .l-btn-left { display: inline-block; position: relative; overflow: hidden; margin: 0; padding: 0; vertical-align: top; } #center .l-btn-text { display: inline-block; vertical-align: top; width: auto; line-height: 28px; font-size: 14px; padding: 0; margin: 0 6px; } #center .l-btn-icon { display: inline-block; width: 16px; height: 16px; line-height: 16px; position: absolute; top: 50%; margin-top: -8px; font-size: 1px; } #center .l-btn span span .l-btn-empty { display: inline-block; margin: 0; width: 16px; height: 24px; font-size: 1px; vertical-align: top; } #center .l-btn span .l-btn-icon-left { padding: 0 0 0 20px; background-position: left center; } #center .l-btn span .l-btn-icon-right { padding: 0 20px 0 0; background-position: right center; } #center .l-btn-icon-left .l-btn-text { margin: 0 6px 0 26px; } #center .l-btn-icon-left .l-btn-icon { left: 6px; } #center .l-btn-icon-right .l-btn-text { margin: 0 26px 0 6px; } #center .l-btn-icon-right .l-btn-icon { right: 6px; } #center .l-btn-icon-top .l-btn-text { margin: 20px 4px 0 4px; } #center .l-btn-icon-top .l-btn-icon { top: 4px; left: 50%; margin: 0 0 0 -8px; } #center .l-btn-icon-bottom .l-btn-text { margin: 0 4px 20px 4px; } #center .l-btn-icon-bottom .l-btn-icon { top: auto; bottom: 4px; left: 50%; margin: 0 0 0 -8px; } #center .l-btn-left .l-btn-empty { margin: 0 6px; width: 16px; } #center .l-btn-plain:hover { padding: 0; } #center .l-btn-focus { outline: #0000FF dotted thin; } #center .l-btn-large .l-btn-text { line-height: 44px; } #center .l-btn-large .l-btn-icon { width: 32px; height: 32px; line-height: 32px; margin-top: -16px; } #center .l-btn-large .l-btn-icon-left .l-btn-text { margin-left: 40px; } #center .l-btn-large .l-btn-icon-right .l-btn-text { margin-right: 40px; } #center .l-btn-large .l-btn-icon-top .l-btn-text { margin-top: 36px; line-height: 24px; min-width: 32px; } #center .l-btn-large .l-btn-icon-top .l-btn-icon { margin: 0 0 0 -16px; } #center .l-btn-large .l-btn-icon-bottom .l-btn-text { margin-bottom: 36px; line-height: 24px; min-width: 32px; } #center .l-btn-large .l-btn-icon-bottom .l-btn-icon { margin: 0 0 0 -16px; } #center .l-btn-large .l-btn-left .l-btn-empty { margin: 0 6px; width: 32px; } #center .l-btn { color: #444; background: #fafafa; border: 0px solid #bbb; filter: none; -moz-border-radius: 0; -webkit-border-radius: 0; border-radius: 0; } #center .l-btn:hover { background: #e2e2e2; color: #000000; border: 0 solid #ccc; filter: none; } #center .l-btn-plain { background: transparent; border-width: 0; filter: none; } .l-btn-outline { border-width: 1px; border-color: #ccc; padding: 0; } #center .l-btn-plain:hover { background: #e2e2e2; color: #000000; border: 1px solid #ccc; -moz-border-radius: 0; -webkit-border-radius: 0; border-radius: 0; } #center .l-btn-disabled, #center .l-btn-disabled:hover { opacity: 0.5; cursor: default; background: #fafafa; color: #444444; background-repeat: repeat-x; filter: none; } #center .l-btn-disabled .l-btn-text, #center .l-btn-disabled .l-btn-icon { filter: alpha(opacity=50); } #center .l-btn-plain-disabled, #center .l-btn-plain-disabled:hover { background: transparent; filter: alpha(opacity=50); } #center .l-btn-selected, #center .l-btn-selected:hover { background: #ddd; filter: none; } #center .l-btn-plain-selected, #center .l-btn-plain-selected:hover { background: #ddd; } /*#left .tree-node {*/ /* height: 30px;*/ /* white-space: nowrap;*/ /* cursor: pointer;*/ /* padding:3px 0 12px 10px;*/ /*}*/ /*#left .tree-title {*/ /* font-size: 12px;*/ /* display: inline-block;*/ /* text-decoration: none;*/ /* vertical-align: top;*/ /* white-space: nowrap;*/ /* padding: 0 5px;*/ /* height: 18px;*/ /* line-height: 18px;*/ /* padding-left: 6px;*/ /*}*/ .submitButton { margin: 10px; } .closeButton { margin: 10px; } .messenger-message-inner { text-align: center !important; } .browser-happy { position: absolute; z-index: 9999; width: 100%; } .messenger { margin: 0 auto; } .messenger ul, ol { padding: 0; margin: 0 0 10px 25px; } .messenger li { list-style-type: none; line-height: 30px; } .messenger-message { margin-top: 0 !important; } .alert { margin-bottom: 20px; padding: 0 10px; height: 60px; line-height: 60px; border: 1px solid #ddd; color: #888; } .alert .alert-error { background: #fc0000; color: #ffffff; border-color: #fc0000; } .messenger-message a { text-decoration: none; } .messenger-message a:hover { background: #970A07; } .alert { text-shadow: none; } .alert-error { color: #fff; background-color: #e74c3c; border-color: transparent; } .alert, .alert h4 { color: #fff; } .alert { margin-top: 10px; padding: 0 35px 8px 0; margin-bottom: 0; text-shadow: 0 1px 0 rgba(255, 255, 255, 0.5); background-color: #970A07; border: 1px solid transparent; } * { -moz-box-sizing: border-box; -webkit-box-sizing: border-box; -o-box-sizing: border-box; -ms-box-sizing: border-box; box-sizing: border-box; } #left .panel { overflow: hidden; text-align: left; margin: 0; border: 0; -moz-border-radius: 0; -webkit-border-radius: 0; border-radius: 0; } #left .panel-header, #left .panel-body { border-width: 0; border-style: solid; } #left .panel-header { padding: 5px; position: relative; } /*.panel-title {*/ /*background: url('images/blank.gif') no-repeat;*/ /*}*/ #left .panel-header-noborder { border-width: 0 0 1px 0; } #left .panel-body { overflow: auto; border-top-width: 0; padding: 0; } #left .panel-body-noheader { border-top-width: 0 !important; } #left .panel-body-noborder { border-width: 0; } #left .panel-body-nobottom { border-bottom-width: 0; } #left .panel-with-icon { padding-left: 18px; } #left .panel-icon, #left .panel-tool { position: absolute; top: 50%; margin-top: -8px; height: 16px; overflow: hidden; } #left .panel-icon { left: 5px; width: 16px; color: #ffffff } #left .panel-tool { right: 5px; width: auto; } #left .panel-tool a { display: inline-block; width: 16px; height: 16px; opacity: 0.6; filter: alpha(opacity=60); margin: 0 0 0 2px; vertical-align: top; } #left .panel-tool a:hover { opacity: 1; filter: alpha(opacity=100); background-color: #e2e2e2; /*-moz-border-radius: 3px 3px 3px 3px;*/ /*-webkit-border-radius: 3px 3px 3px 3px;*/ /*border-radius: 3px 3px 3px 3px;*/ -moz-border-radius: 0; -webkit-border-radius: 0; border-radius: 0; } #left .panel-loading { padding: 11px 0px 10px 30px; } #left .panel-noscroll { overflow: hidden; } #left .panel-fit, #left .panel-fit body { height: 100%; margin: 0; padding: 0; border: 0; overflow: hidden; } /*.panel-loading {*/ /* background: url('images/loading.gif') no-repeat 10px 10px;*/ /*}*/ /*.panel-tool-close {*/ /* background: url('images/panel_tools.png') no-repeat -16px 0px;*/ /*}*/ /*.panel-tool-min {*/ /* background: url('images/panel_tools.png') no-repeat 0px 0px;*/ /*}*/ /*.panel-tool-max {*/ /* background: url('images/panel_tools.png') no-repeat 0px -16px;*/ /*}*/ /*.panel-tool-restore {*/ /* background: url('images/panel_tools.png') no-repeat -16px -16px;*/ /*}*/ /*.panel-tool-collapse {*/ /* background: url('images/panel_tools.png') no-repeat -32px 0;*/ /*}*/ /*.panel-tool-expand {*/ /* background: url('images/panel_tools.png') no-repeat -32px -16px;*/ /*}*/ #left .panel-header, #left .panel-body { border-color: #D3D3D3; } #left .panel-header { background-color: #273142; background: #273142; background-repeat: repeat; filter: none; color: #575765; } #left .panel-body { background-color: #2c3b41;; color: #b8c7ce; font-size: 14px; } #left .panel-title { font-size: 14px; font-weight: normal; color: #7F92A9; height: 30px; line-height: 32px; } #left .panel-footer { border: 1px solid #D3D3D3; overflow: hidden; background: #fafafa; color: #000000; } #left .panel-footer-noborder { border-width: 1px 0 0 0; } #left .panel-hleft, #left .panel-hright { position: relative; } #left .panel-hleft > .panel-body, #left .panel-hright > .panel-body { position: absolute; } #left .panel-hleft > .panel-header { float: left; } #left .panel-hright > .panel-header { float: right; } #left .panel-hleft > .panel-body { border-top-width: 0; border-left-width: 0; } #left .panel-hright > .panel-body { border-top-width: 0; border-right-width: 0; } #left .panel-hleft > .panel-body-nobottom { border-bottom-width: 0; border-right-width: 0; } #left .panel-hright > .panel-body-nobottom { border-bottom-width: 0; border-left-width: 0; } #left .panel-hleft > .panel-footer { position: absolute; right: 0; } #left .panel-hright > .panel-footer { position: absolute; left: 0; } #left .panel-hleft > .panel-header-noborder { border-width: 0 1px 0 0; } #left .panel-hright > .panel-header-noborder { border-width: 0 0 0 1px; } #left .panel-hleft > .panel-body-noborder { border-width: 0; } #left .panel-hright > .panel-body-noborder { border-width: 0; } #left .panel-hleft > .panel-body-noheader { border-left-width: 1px; } #left .panel-hright > .panel-body-noheader { border-right-width: 1px; } #left .panel-hleft > .panel-footer-noborder { border-width: 0 0 0 1px; } #left .panel-hright > .panel-footer-noborder { border-width: 0 1px 0 0; } #left .panel-hleft > .panel-header .panel-icon, #left .panel-hright > .panel-header .panel-icon { margin-top: 0; top: 5px; left: 50%; margin-left: -8px; } #left .panel-hleft > .panel-header .panel-title, #left .panel-hright > .panel-header .panel-title { position: absolute; min-width: 16px; left: 25px; top: 5px; bottom: auto; white-space: nowrap; word-wrap: normal; -webkit-transform: none; -webkit-transform-origin: 0 0; -moz-transform: none; -moz-transform-origin: 0 0; -o-transform: none; -o-transform-origin: 0 0; transform: none; transform-origin: 0 0; } #left .panel-hleft > .panel-header .panel-title-up, #left .panel-hright > .panel-header .panel-title-up { position: absolute; min-width: 16px; left: 21px; top: auto; bottom: 0px; text-align: right; white-space: nowrap; word-wrap: normal; -webkit-transform: none; -webkit-transform-origin: 0 0; -moz-transform: none; -moz-transform-origin: 0 0; -o-transform: none; -o-transform-origin: 0 0; transform: none; transform-origin: 0 16px; } #left .panel-hleft > .panel-header .panel-with-icon.panel-title-up, #left .panel-hright > .panel-header .panel-with-icon.panel-title-up { padding-left: 0; padding-right: 18px; } #left .panel-hleft > .panel-header .panel-tool, #left .panel-hright > .panel-header .panel-tool { top: auto; bottom: 5px; width: 16px; height: auto; left: 50%; margin-left: -8px; margin-top: 0; } #left .panel-hleft > .panel-header .panel-tool a, #left .panel-hright > .panel-header .panel-tool a { margin: 2px 0 0 0; } #left .accordion { overflow: hidden; border-width: 1px; border-style: solid; } #left .accordion .accordion-header { border-width: 0 0 1px; cursor: pointer; } #left .accordion .accordion-body { border-width: 0 0 1px; } #left .accordion-noborder { border-width: 0; } #left .accordion-noborder .accordion-header { border-width: 0 0 0; } #left .accordion-noborder .accordion-body { border-width: 0 0 0; } #left .accordion-collapse { /*background: url('images/accordion_arrows.png') no-repeat 0 0;*/ background: none; font-family: "iconfont" !important; font-size: 16px; font-style: normal; -webkit-font-smoothing: antialiased; -moz-osx-font-smoothing: grayscale; text-decoration: none; padding: 0px; color: #7F92A9; } #left .accordion-collapse:before { content: "\e699"; } #left .accordion-expand { /*background: url('images/accordion_arrows.png') no-repeat -16px 0;*/ background: none; font-family: "iconfont" !important; font-size: 16px; font-style: normal; -webkit-font-smoothing: antialiased; -moz-osx-font-smoothing: grayscale; text-decoration: none; padding: 0px; color: #7F92A9; } #left .accordion-expand:before { content: "\e695"; } #left .accordion { background: #2c3b41; border-color: #D3D3D3; } #left .accordion .accordion-header { background: #222d32; filter: none; border-left: 3px solid #222d32; height: 40px; } #left .accordion .accordion-header-selected { background: #1e282c; border-left: 3px solid #0071C1; /*border-bottom: solid 0px #2c3b41;*/ } #left .accordion .accordion-header-selected .panel-title { color: #ffffff; } #left .accordion .panel-last > .accordion-header { border-bottom-color: #f3f3f3; } #left .accordion .panel-last > .accordion-body { border-bottom-color: #ffffff; } #left .accordion .panel-last > .accordion-header-selected, #left .accordion .panel-last > .accordion-header-border { border-bottom: 0; } #left .accordion > .panel-hleft { float: left; } #left .accordion > .panel-hleft > .panel-header { border-width: 0 1px 0 0; } #left .accordion > .panel-hleft > .panel-body { border-width: 0 1px 0 0; } #left .accordion > .panel-hleft.panel-last > .accordion-header { border-right-color: #f3f3f3; } #left .accordion > .panel-hleft.panel-last > .accordion-body { border-right-color: #ffffff; } #left .accordion > .panel-hleft.panel-last > .accordion-header-selected, #left .accordion > .panel-hleft.panel-last > .accordion-header-border { border-right-color: #D3D3D3; } #left .accordion > .panel-hright { float: right; } #left .accordion > .panel-hright > .panel-header { border-width: 0 0 0 1px; } #left .accordion > .panel-hright > .panel-body { border-width: 0 0 0 1px; } #left .accordion > .panel-hright.panel-last > .accordion-header { border-left-color: #f3f3f3; } #left .accordion > .panel-hright.panel-last > .accordion-body { border-left-color: #ffffff; } #left .accordion > .panel-hright.panel-last > .accordion-header-selected, #left .accordion > .panel-hright.panel-last > .accordion-header-border { border-left-color: #D3D3D3; } #left .tree { margin: 0; padding: 0; list-style-type: none; } #left .tree li { /*height: 33px;*/ /*line-height: 23px;*/ white-space: nowrap; } #left .tree li ul { list-style-type: none; margin: 0; padding: 0; } #left .tree-node { height: 35px; white-space: nowrap; cursor: pointer; line-height: 17px; padding-top: 5px; padding-left: 10px; } #left .tree-hit { cursor: pointer; } #left .tree-expanded, #left .tree-collapsed, #left .tree-folder, #left .tree-file, #left .tree-checkbox, #left .tree-indent { display: inline-block; width: 16px; height: 18px; margin: 5px 0; vertical-align: middle; overflow: hidden; } .tree-expanded { background: none; font-family: "iconfont" !important; font-size: 16px; font-style: normal; -webkit-font-smoothing: antialiased; -moz-osx-font-smoothing: grayscale; } .tree-expanded:before { content: "\e677"; } /*.tree-expanded-hover {*/ /* background: url('images/tree_icons.png') no-repeat -50px 0px;*/ /*}*/ .tree-collapsed { background: none; font-family: "iconfont" !important; font-size: 16px; font-style: normal; -webkit-font-smoothing: antialiased; -moz-osx-font-smoothing: grayscale; } .tree-collapsed:before { content: "\e67b"; } /*.tree-collapsed-hover {*/ /* background: url('images/tree_icons.png') no-repeat -32px 0px;*/ /*}*/ /*.tree-lines .tree-expanded,*/ /*.tree-lines .tree-root-first .tree-expanded {*/ /* background: url('images/tree_icons.png') no-repeat -144px 0;*/ /*}*/ /*.tree-lines .tree-collapsed,*/ /*.tree-lines .tree-root-first .tree-collapsed {*/ /* background: url('images/tree_icons.png') no-repeat -128px 0;*/ /*}*/ /*.tree-lines .tree-node-last .tree-expanded,*/ /*.tree-lines .tree-root-one .tree-expanded {*/ /* background: url('images/tree_icons.png') no-repeat -80px 0;*/ /*}*/ /*.tree-lines .tree-node-last .tree-collapsed,*/ /*.tree-lines .tree-root-one .tree-collapsed {*/ /* background: url('images/tree_icons.png') no-repeat -64px 0;*/ /*}*/ /*.tree-line {*/ /* background: url('images/tree_icons.png') no-repeat -176px 0;*/ /*}*/ /*.tree-join {*/ /* background: url('images/tree_icons.png') no-repeat -192px 0;*/ /*}*/ /*.tree-joinbottom {*/ /* background: url('images/tree_icons.png') no-repeat -160px 0;*/ /*}*/ .tree-folder { background: none; font-family: "iconfont" !important; font-size: 14px; font-style: normal; -webkit-font-smoothing: antialiased; -moz-osx-font-smoothing: grayscale; color: #b8c7ce; } .tree-folder:before { content: "\e722"; } .tree-folder-open { background: none; font-family: "iconfont" !important; font-size: 16px; font-style: normal; -webkit-font-smoothing: antialiased; -moz-osx-font-smoothing: grayscale; } .tree-folder-open:before { content: "\e71f"; } .tree-file { background: none; font-family: "iconfont" !important; font-size: 14px; font-style: normal; -webkit-font-smoothing: antialiased; -moz-osx-font-smoothing: grayscale; color: #b8c7ce; } .tree-file:before { content: "\e70e"; } /*.tree-loading {*/ /* background: url('images/loading.gif') no-repeat center center;*/ /*}*/ /*.tree-checkbox0 {*/ /* background: url('images/tree_icons.png') no-repeat -208px -18px;*/ /*}*/ /*.tree-checkbox1 {*/ /* background: url('images/tree_icons.png') no-repeat -224px -18px;*/ /*}*/ /*.tree-checkbox2 {*/ /* background: url('images/tree_icons.png') no-repeat -240px -18px;*/ /*}*/ #left .tree-title { font-size: 12px; display: inline-block; text-decoration: none; vertical-align: middle; white-space: nowrap; padding: 0; margin: 0; height: 18px; padding-left: 6px; } #left .tree-node-proxy { font-size: 14px; line-height: 20px; padding: 0 2px 0 20px; border-width: 1px; border-style: solid; z-index: 9900000; } #left .tree-dnd-icon { display: inline-block; position: absolute; width: 16px; height: 18px; left: 2px; top: 50%; margin-top: -9px; } /*.tree-dnd-yes {*/ /* background: url('images/tree_icons.png') no-repeat -256px 0;*/ /*}*/ /*.tree-dnd-no {*/ /* background: url('images/tree_icons.png') no-repeat -256px -18px;*/ /*}*/ #left .tree-node-top { border-top: 1px dotted red; } #left .tree-node-bottom { border-bottom: 1px dotted red; } #left .tree-node-append .tree-title { border: 1px dotted red; } #left .tree-editor { border: 1px solid #D3D3D3; font-size: 14px; height: 26px; line-height: 26px; padding: 0 4px; margin: 0; width: 80px; outline-style: none; vertical-align: middle; position: absolute; top: 0; } #left .tree-node-proxy { background-color: #ffffff; color: #000000; border-color: #D3D3D3; } #left .tree-node-hover { background: #646D7C; color: #FFFFFF; } #left .tree-node-selected { background: #646D7C; color: #FFFFFF; } #left .tree-node-disabled { opacity: 0.5; cursor: default; } #left .tree-node-hidden { display: none; } ================================================ FILE: src/main/resources/static/assets/css/login.css ================================================ /*css 初始化 */ /*html, body, ul, li, ol, dl, dd, dt, p, h1, h2, h3, h4, h5, h6, form, fieldset, legend, img {*/ /* margin: 0;*/ /* padding: 0;*/ /*}*/ /*!*将标签原有的默认内外边距去掉*!*/ /*fieldset, img, input, button {*/ /* border: none; !*去掉边框*!*/ /* padding: 0;*/ /* margin: 0;*/ /* outline-style: none; !*去掉环绕边框*!*/ /*}*/ /*ul, ol {*/ /* list-style: none; !*去掉原样式中的小黑点*!*/ /* !*ctrl+alt+l*!*/ /*}*/ input { padding-top: 0; padding-bottom: 0; } select, input { vertical-align: middle; /*输入字居中显示*/ } select, input, textarea { font-size: 14px; margin: 0; } /**/ textarea { resize: none; /*防止拖动*/ } img { border: 0; vertical-align: middle; /* 去掉图片底部默认的3像素空白缝隙*/ } table { border-collapse: collapse; /*合并外边线*/ } body { font-family: Microsoft YaHei, Arial, "\5b8b\4f53"; /*background:#0064C8;*/ } .clearfix:before, .clearfix:after { content: ""; display: table; } .clearfix:after { clear: both; } .clearfix { *zoom: 1; /*IE/7/6*/ /*兼容IE6下的写法*/ } h1, h2, h3, h4, h5, h6 { text-decoration: none; /**/ font-weight: normal; /*不加粗*/ font-size: 100%; } .login-page { content: ''; width: 100%; height: 100%; display: block; z-index: -1; position: absolute; top: 0; right: 0; background: url("../img/login/login_page_background.jpg") no-repeat; background-size: cover; } /*login 开始*/ .login-box { width: 1000px; height: 500px; position: absolute; left: 50%; top: 50%; margin-left: -510px; /* 500px */ margin-top: -250px; /* -250px */ /*background:#0064C8;*/ } .login-box > .login-header { height: 80px; text-align: center; } .login-box > .login-header > p { color: #fff; font-size: 40px; font-weight: 600; margin-top: -40px; letter-spacing: 5px } .login-box > .login-body { width: 1000px; height: 370px; /* 320px */ margin-top: 20px; /* 20px */ } .login-box > .login-body > .login-body-left { height: 370px; /* 320px */ width: 650px; float: left; -moz-border-top-left-radius: 10px; -webkit-border-top-left-radius: 10px; border-top-left-radius: 10px; background: url("../img/login/login_body_left.jpg") no-repeat; background-size: cover; } .login-box > .login-body > .login-body-right { height: 370px; /* 320px */ width: 350px; float: right; background-color: #e9eef2; -moz-border-top-right-radius: 10px; -webkit-border-top-right-radius: 10px; border-top-right-radius: 10px; -moz-border-bottom-right-radius: 10px; -webkit-border-bottom-right-radius: 10px; border-bottom-right-radius: 10px; } .login-box > .login-body > .login-body-right > .right-title { color: #251E5F; font-size: 20px; font-weight: 700; text-align: center; line-height: 60px; background: url("../img/login/horizontal_divider.png") repeat; margin-bottom: 25px; } .login-box > .login-body > .login-body-right > form > div { position: relative; } /*.login-box>.login-body>.login-body-right>form>div>img{*/ /* position: absolute;*/ /* left: 62px;*/ /* top:7px;*/ /*}*/ .login-box > .login-body > .login-body-right > form > div > i { position: absolute; /*left: 62px;*/ /*top:7px;*/ left: 61px; top: 6px; font-size: 20px; color: #C3C2C2; } .login-box > .login-body > .login-body-right > form input { height: 35px; width: 250px; border: 1px solid #d3d8dc; box-sizing: border-box; margin-bottom: 20px; margin-left: 50px; -moz-border-radius: 3px; -webkit-border-radius: 3px; border-radius: 3px; color: #333; padding-left: 40px; line-height: 40px; /* 解决 ie8 下 input 输入框文字顶格的问题 */ line-height: normal } .login-box > .login-body > .login-body-right > form > .verify-code > input { width: 150px; } .login-box > .login-body > .login-body-right > form > .verify-code > .verify-code-image { float: right; margin-right: 50px; cursor: pointer; } .login-box > .login-body > .login-body-right > form > .verify-code > .verify-code-image > img { width: 90px; height: 30px; } .login-box > .login-body > .login-body-right > form > .remember-me > input { width: 20px; margin-top: -12px; margin-bottom: 5px; } .login-box > .login-body > .login-body-right > form > .remember-me > div { float: right; margin-right: 240px; cursor: pointer; } .login-box > .login-body > .login-body-right > form input:focus { border: 1px solid #999; } .login-box > .login-body > .login-body-right > form > .login-button > a { display: block; width: 250px; height: 35px; line-height: 35px; text-align: center; background-color: #0064c8; /* */ -moz-border-radius: 3px; -webkit-border-radius: 3px; border-radius: 3px; color: #fff; text-decoration: none; margin-left: 50px; } .login-box > .login-body > .login-body-right > form > .login-button > a:hover { background-color: #0058af; } .login-box > .login-body > .login-body-right > form > .login-button > button { display: block; width: 250px; height: 35px; line-height: 35px; text-align: center; background-color: #0064c8; /* */ -moz-border-radius: 3px; -webkit-border-radius: 3px; border-radius: 3px; color: #fff; text-decoration: none; margin-left: 50px; } .login-box > .login-body > .login-body-right > form > .login-button > button:hover { background-color: #0058af; } .login-box > .login-footer { text-align: center; padding-top: 20px; } .login-box > .login-footer > p { font-size: 14px; color: #eee; line-height: 30px; } /*login 结束*/ ================================================ FILE: src/main/resources/static/assets/css/workbench.css ================================================ body { min-width: 1220px; position: relative } body .todo-panel { position: absolute; height: 515px; border: 1px solid #cbcbcb; background-color: #ffffff; box-shadow: 0 2px 0 0 #cbcbcb; border-bottom-left-radius: 3px; border-bottom-right-radius: 3px; display: none } body .todo-panel .todo-title { position: relative; height: 111px } body .todo-panel .todo-title i { position: absolute; font-size: 60px; left: 14px; top: 29px; color: #0089d0 } body .todo-panel .todo-title span.num { position: absolute; left: 80px; top: 30px; font-size: 32px; color: #f45438 } body .todo-panel .todo-title span.num span { font-size: 14px; color: #000 } body .todo-panel .todo-title label { position: absolute; top: 70px; font-size: 14px; left: 80px; color: #000 } body .todo-panel .todo-items { overflow-y: auto; height: 394px } body .todo-panel .todo-items ul li { list-style: none; font-size: 14px; color: #000; padding-left: 15px; padding-right: 20px; line-height: 31px; height: 31px } body .todo-panel .todo-items ul li > span { position: relative; display: inline-block; background-color: #0089d0; width: 3px; height: 3px; top: -14px; margin-right: 3px } body .todo-panel .todo-items ul li a { display: inline-block; color: #000; text-decoration: none; width: 80% } body .todo-panel .todo-items ul li a:hover { text-decoration: underline } body .todo-panel .todo-items ul li a > span { color: #f45438 } body .todo-panel .todo-items ul li label { float: right; color: #b8b8b8 } #body .body-content { position: relative; padding-right: 300px } #body .body-content .right-zone { position: absolute; right: 0; top: 0; bottom: 0; width: 300px } #body .item-box { width: 286px; border: 1px solid #bfbfbf; margin-bottom: 12px } #body .item-box.right-box-one { height: 231px } #body .item-box.right-box-two { height: 272px } #body .item-box.right-box-three { height: 272px; } #body .item-box.right-box-three .right-box-header { border-bottom: 0; } #body .item-box.right-box-three .right-box-tab { height: 31px; border-top: 2px solid #0089d0; margin-bottom: 5px; border-left: 1px solid #bfbfbf } #body .item-box.right-box-three .right-box-tab a { display: inline-block; width: 141px; height: 31px; float: left; border: 0; color: #000; text-align: center; line-height: 31px; text-decoration: none; background-color: #f1f1f1 } #body .item-box.right-box-three .right-box-tab a.current { background-color: #ffffff; border-bottom: 1px solid #bfbfbf; } #body .item-box.right-box-three ul.hide { display: none } /*#body .item-box.right-box-three ul li a{width:260px}*/ #body .item-box .right-box-header { padding: 0 10px; height: 35px; line-height: 35px; background-color: #e3e3e3; border-left: 1px solid #bfbfbf; } #body .item-box .right-box-header label { color: #000; font-weight: bold } #body .item-box .right-box-header a { text-decoration: none; float: right; color: #000 } #body .item-box .right-box-header a:hover { text-decoration: underline } #body .item-box ul { padding-top: 5px } #body .item-box ul li { list-style: none; font-size: 14px; color: #000; padding: 0 10px; line-height: 31px; height: 31px } #body .item-box ul li span { position: relative; display: inline-block; background-color: #0089d0; width: 3px; height: 3px; top: -14px; margin-right: 3px } #body .item-box ul li a { display: inline-block; color: #000; text-decoration: none; width: 200px } #body .item-box ul li a:hover { text-decoration: underline } #body .item-box ul li label { float: right; color: #b8b8b8 } #body .center-part .center-items { margin-bottom: 10px } #body .center-part .center-items .item-header { padding: 0 10px; height: 35px; line-height: 35px; border-bottom: 1px solid #bfbfbf; background-color: #e3e3e3; font-weight: bold } #body .center-part .center-items.todo { position: relative; height: 233px; padding-right: 215px } #body .center-part .center-items.todo .calendar-part { position: absolute; right: 0; width: 215px; top: 0; bottom: 0 } #body .center-part .center-items.todo .work-items { height: 233px } #body .center-part .center-items.todo .work-items li { float: left; width: 33.333333%; cursor: pointer } #body .center-part .center-items.todo .work-items li .work-inner { padding-right: 10px } #body .center-part .center-items.todo .work-items li .work-inner .work-item { position: relative; height: 111px; color: #ffffff } #body .center-part .center-items.todo .work-items li .work-inner .work-item i { position: absolute; font-size: 60px; left: 11px; top: 22px } #body .center-part .center-items.todo .work-items li .work-inner .work-item span.num { position: absolute; left: 80px; top: 30px; font-size: 32px } #body .center-part .center-items.todo .work-items li .work-inner .work-item span.num span { font-size: 14px } #body .center-part .center-items.todo .work-items li .work-inner .work-item label { position: absolute; top: 70px; font-size: 14px; left: 80px } #body .center-part .center-items.todo .work-items li .work-inner .work-item.green { background-color: #28a745; margin-bottom: 11px } #body .center-part .center-items.todo .work-items li .work-inner .work-item.red { background-color: #dc3545; margin-bottom: 11px } #body .center-part .center-items.todo .work-items li .work-inner .work-item.yellow { background-color: #ffc107; margin-bottom: 11px } #body .center-part .center-items.todo .work-items li .work-inner .work-item.blue { background-color: #007bff } #body .center-part .center-items.todo .work-items li .work-inner .work-item.purple { background-color: #6f42c1 } #body .center-part .center-items.todo .work-items li .work-inner .work-item.gray { background-color: #6c757d } #body .center-part .center-items.chart0 { height: 274px } #body .center-part .center-items.chart0 .chart0-item { float: left; width: 50% } #body .center-part .center-items.chart0 .chart0-item .item-inner { padding-right: 10px } #body .center-part .center-items.chart0 .chart0-item .item-inner .item-content { height: 272px; border: 1px solid #bfbfbf } #body .center-part .center-items.chart0 .chart0-item .item-inner .item-content .content-header { padding: 0 10px; height: 35px; line-height: 35px; border-bottom: 1px solid #bfbfbf; background-color: #e3e3e3; font-weight: bold } #body .center-part .center-items.chart0 .chart0-item .item-inner .item-content .chart-chart { height: 236px } #body .center-part .center-items.chart1 { padding-right: 10px; height: 274px; border: 0; margin-bottom: 0 } #body .center-part .center-items.chart1 .chart1-inner { height: 272px; border: 1px solid #bfbfbf } #body .center-part .center-items.chart1 .chart1-inner .chart1-chart { height: 236px } ================================================ FILE: src/main/resources/static/assets/js/global.js ================================================ if ($) { if ($.fn.validatebox) { $.extend($.fn.validatebox.defaults.rules, { confirmPassword: { validator: function (value, param) { return value === $(param[0]).val(); }, message: '密码输入不一致' }, password: { validator: function (value) { return value.length >= 6 && value.length <= 32 }, message: '密码长度为6-32个字符' } }); } } ================================================ FILE: src/main/resources/static/assets/js/index.js ================================================ $(window).load(function () { $("#loading").fadeOut(); }); $(function () { parentViewMenuCategory(); addTab('#tabs', '工作台', '/system/workbench', 'iconfont icon-home', false, -1); $('#logoutButton').click(function () { if (window.confirm('确定要注销登录吗?')) { expressui.ajax({ // dataType: 'json', url: Url.User.Api.LOGOUT, success: function (data) { window.location.href = Url.User.Page.LOGIN; }, error: function (xhr) { alert("注销失败"); } }); } }); }); function pageTurning() { var page = 0, navItemHeight = 50, pages = ($('.nav-wrap-ul').height() / navItemHeight) - 1; if (page < pages) { $('.nav-prev,.nav-next').show(); } $(document).on('click', '.nav-prev,.nav-next', function () { if ($(this).hasClass('disabled')) return; if ($(this).hasClass('nav-next')) { page++; $('.nav-wrap-ul').stop().animate({'margin-top': -navItemHeight * page}, 200); if (page === pages) { $(this).addClass('disabled'); $('.nav-prev').removeClass('disabled'); } else { $('.nav-prev').removeClass('disabled'); } } else { page--; $('.nav-wrap-ul').stop().animate({'margin-top': -navItemHeight * page}, 200); if (page === 0) { $(this).addClass('disabled'); $('.nav-next').removeClass('disabled'); } else { $('.nav-next').removeClass('disabled'); } } }); } function removeSelf() { var parent = document.getElementsByTagName('body')[0]; var getElementsByClassName = function (searchClass, node, tag) { if (document.getElementsByClassName) { var nodes = (node || document).getElementsByClassName(searchClass), result = []; for (var i = 0; node === nodes[i++];) { if (tag !== "*" && node.tagName === tag.toUpperCase()) { result.push(node) } } return result } else { node = node || document; tag = tag || "*"; result = []; var classes = searchClass.split(" "), elements = (tag === "*" && node.all) ? node.all : node.getElementsByTagName(tag), patterns = [], current, match; var i = classes.length; while (--i >= 0) { patterns.push(new RegExp("(^|\\s)" + classes[i] + "(\\s|$)")); } var j = elements.length; while (--j >= 0) { current = elements[j]; match = false; for (var k = 0, kl = patterns.length; k < kl; k++) { match = patterns[k].test(current.className); if (!match) break; } if (match) result.push(current); } return result; } }; var happy = getElementsByClassName('browser-happy')[0]; parent.removeChild(happy); } /** * @desc 父级菜单分类 */ function parentViewMenuCategory() { var parentViewMenuCategory = $('#parentViewMenuCategory'); expressui.ajax({ url: Url.User.Api.VIEW_MENU_CATEGORY + '/list_all_parent_by_user_id/' + _user.id, success: function (data) { if (data) { var viewMenuCategory = data; if (viewMenuCategory) { for (var i = 0; i < viewMenuCategory.length; i++) { var id = viewMenuCategory[i].id; var name = viewMenuCategory[i].name; var icon = viewMenuCategory[i].icon; if (i === 0) { // 第一个父级菜单默认选中 parentViewMenuCategory.append('') } else { parentViewMenuCategory.append('') } } } pageTurning(); $('.parent-view-menu-category').on('click', function () { var viewMenuCategoryId = $(this).data('view-menu-category'); childViewMenuCategory(this, viewMenuCategoryId); var viewMenuCategoryName = $(this).find('span').html(); // $($('#layout').layout('panel', 'west')).panel({title: viewMenuCategoryName}); }); // 默认点击第一个父级菜单分类,并显示其所有子级菜单分类 $('.parent-view-menu-category').eq('0').trigger('click'); } } }); } /** * @desc 显示二级子菜单菜单 * @param currentSelector * @param viewMenuCategoryId */ function childViewMenuCategory(currentSelector, viewMenuCategoryId) { removeAllFirstMenuSelectedClass(currentSelector); removeAccordionPanel(); var slideMenu = $('.slide-menu'); if (!viewMenuCategoryId) { return; } expressui.ajax({ url: Url.User.Api.VIEW_MENU_CATEGORY + '/list_all_child_by_parent_id_and_user_id', data: { parentId: viewMenuCategoryId, userId: _user.id }, success: function (data) { if (data) { var childViewMenuCategory = data; for (var i = 0; i < childViewMenuCategory.length; i++) { var childViewMenuCategoryId = childViewMenuCategory[i].id; childViewMenuCategory[i].selected = (i === 0); childViewMenuCategory[i].title = childViewMenuCategory[i].name; childViewMenuCategory[i].iconCls = childViewMenuCategory[i].icon; childViewMenuCategory[i].content = '
'; slideMenu.accordion('add', childViewMenuCategory[i]); childViewMenuCategoryAndViewMenu('#childViewMenuCategoryAndViewMenu_' + childViewMenuCategoryId, childViewMenuCategoryId); } } } }); } /** * @desc 显示三级子菜单和四级子菜单 * @param selector * @param parentId */ function childViewMenuCategoryAndViewMenu(selector, parentId) { expressui.ajax({ url: Url.User.Api.VIEW_MENU_CATEGORY + '/list_all_child_view_menu_category_and_view_menu_by_parent_id_and_user_id', data: { parentId: parentId, userId: _user.id }, success: function (data) { if (data) { var childViewMenuCategoryAndViewMenu = data; $(selector).tree({ loadFilter: function (data) { childViewMenuCategoryAndViewMenu = data.data ? data.data : data; for (var i = 0; i < childViewMenuCategoryAndViewMenu.length; i++) { if (!childViewMenuCategoryAndViewMenu[i].url) { childViewMenuCategoryAndViewMenu[i].state = 'closed'; } else { childViewMenuCategoryAndViewMenu[i].state = 'open'; } childViewMenuCategoryAndViewMenu[i].text = childViewMenuCategoryAndViewMenu[i].name; } return childViewMenuCategoryAndViewMenu; }, data: childViewMenuCategoryAndViewMenu, lines: false, animate: true, onBeforeExpand: function (node, param) { // 列出四级子菜单,直接可点击的菜单 $(selector).tree('options').url = Url.User.Api.VIEW_MENU_CATEGORY + '/list_all_child_view_menu_category_and_view_menu_by_parent_id_and_user_id?parentId=' + node.id + '&userId=' + _user.id; $(selector).tree('options').method = 'get'; }, onClick: function (node) { if (node.url) { addTab('#tabs', node.text, node.url, node.iconCls, true, node.id); } else { $(selector).tree('toggle', node.target); } } // onDblClick:function (node) { // $(selector).tree('toggle',node.target); // } }); } } }); } /** * @desc 移除左侧Accordion已有的菜单 */ function removeAccordionPanel() { var slideMenu = $('.slide-menu'); var panels = slideMenu.accordion('panels'); var panelsLength = panels.length; if (panelsLength > 0) { for (var i = 0; i < panelsLength; i++) { slideMenu.accordion('remove', 0); } } } /** * @desc 移除所有一级父菜单的 selected class,然后 selected 当前被点击的一级菜单 * @param currentSelector */ function removeAllFirstMenuSelectedClass(currentSelector) { $('.parent-view-menu-category').each(function (i, e) { $(e).removeClass('selected'); }); $(currentSelector).addClass('selected'); } /** * @desc 添加 tab * @param tabsSelector * @param title * @param url * @param iconCls * @param closable * @param index */ function addTab(tabsSelector, title, url, iconCls, closable, index) { var tabs = $(tabsSelector).tabs('tabs'); var tabsLength = tabs.length; index = tabsLength + 1; if ($(tabsSelector).tabs('exists', title)) { $(tabsSelector).tabs('select', title); } else { var lastMenuClickTime = util.cookie.get("menuClickTime"); var nowTime = new Date().getTime(); if ((nowTime - lastMenuClickTime) >= 600) { util.cookie.set("menuClickTime", new Date().getTime()); $(tabsSelector).tabs('add', { id: Math.random(), title: title, index: index, selected: true, closable: (closable === undefined) || (closable === null) || (closable === true), content: '', // iframe框架内加载 // href:url, // 可能会出现元素重复加载的情况,js、css等都会出现问题 // iconCls:'iconfont icon-file', iconCls: (iconCls === undefined) ? 'iconfont icon-file' : iconCls, fit: true, border: false, cache: false }); } else { $.messager.show({ title: '信息', msg: '操作过快,请稍后重试!' }); } } } /** * @desc 跳转至指定 index * @param tabsSelector * @param index */ function tabsTo(tabsSelector, index) { $(tabsSelector).tabs('select', index); } /** * @desc 关闭选中tab * @param tabsSelector */ function closeSelectedTab(tabsSelector) { var tab = $(tabsSelector).tabs('getSelected'); var index = $(tabsSelector).tabs('getTabIndex', tab); if (index !== 0) { $(tabsSelector).tabs('close', index); } } /** * @desc 刷新指定 tabs 内的 tab * @param tabsSelector */ function refreshTabIframe(tabsSelector) { var tab = $(tabsSelector).tabs('getSelected'); var iframe = tab.find('iframe')[0]; iframe.contentWindow.location.href = iframe.src; } function onContextMenu(event, title, index) { event.preventDefault(); if (index >= 0) { tabsTo('#tabs', index); $('#tabsContextMenu').menu('show', { left: event.pageX, top: event.pageY }).data('tabTitle', title); } } function tabsContextMenu(menu, tabsSelector, type) { var tabs = tabsSelector.tabs('tabs'); var tabsTitle = []; var refreshTab, refreshIframe; var i; $.each(tabs, function (i, e) { var options = $(e).panel('options'); if (options.closable) tabsTitle.push(options.title); }); var currentTabTitle = $(menu).data('tabTitle'); var currentTabIndex = tabsSelector.tabs('getTabIndex', tabsSelector.tabs('getTab', currentTabTitle)); switch (type) { case 'tabRefresh': // 重新加载 refreshTab = tabsSelector.tabs('getSelected'); refreshIframe = refreshTab.find('iframe')[0]; refreshIframe.contentWindow.location.href = refreshIframe.src; break; case 'tabCloseCurrent':// 关闭标签页 if (currentTabIndex === 0) { $.messager.show({ title: '操作提示', msg: '工作台不允许关闭' }); } if (currentTabIndex > 0) { tabsSelector.tabs('close', currentTabTitle); } break; case 'tabCloseAll':// 关闭所有标签页 for (i = 0; i < tabsTitle.length; i++) { tabsSelector.tabs('close', tabsTitle[i]); } break; case 'tabCloseOther':// 关闭其他标签页 for (i = 0; i < tabsTitle.length; i++) { if (currentTabTitle !== tabsTitle[i]) tabsSelector.tabs('close', tabsTitle[i]); } tabsSelector.tabs('select', currentTabTitle); break; case 'tabCloseRight':// 关闭右侧标签页 for (i = currentTabIndex; i < tabsTitle.length; i++) { tabsSelector.tabs('close', tabsTitle[i]); } tabsSelector.tabs('select', currentTabTitle); break; case 'tabCloseLeft': //关闭左侧标签页 for (i = 0; i < currentTabIndex - 1; i++) { tabsSelector.tabs('close', tabsTitle[i]); } tabsSelector.tabs('select', currentTabTitle); break; case 7: //在新窗口打开 refreshTab = tabsSelector.tabs('getSelected'); refreshIframe = refreshTab.find('iframe')[0]; window.open(refreshIframe.src); break; } } ================================================ FILE: src/main/resources/static/assets/js/login.js ================================================ $(function () { // $('input, textarea').placeholder(); // /** // * iframe 框架刷新父页面 // */ // if (window.top !== window.self) { // window.top.location = window.location; // } /** * 刷新验证码 * @type {*|jQuery} */ var verifyCodeImageSrc = $('#verifyCodeImage').attr('src'); $('#verifyCodeImage').click(function () { refreshVerifyCode($(this), verifyCodeImageSrc); }); function refreshVerifyCode(_this, verifyCodeImageSrc) { _this.attr('src', verifyCodeImageSrc + '?_=' + Math.random()); } $('#loginButton').click(function () { var account = $('#account'); var password = $('#password'); var rememberMe = $('#rememberMe'); var verifyCode = $('#verifyCode'); if (account.val() === '' || password.val() === '') { alert('请先输入账号和密码'); return; } if (verifyCode.val() === '') { alert('请输入验证码'); return; } _this = this; $(_this).attr('disabled', 'disabled'); account.attr('disabled', 'disabled'); password.attr('disabled', 'disabled'); verifyCode.attr('disabled', 'disabled'); rememberMe.attr('disabled', 'disabled'); try { $.ajax({ url: Url.User.Api.LOGIN, data: { account: account.val(), password: password.val(), rememberMe: rememberMe.is(':checked'), verifyCode: verifyCode.val() }, type: 'post', success: function (XMLHttpRequest, statusText) { // 刷新页面跳转到首页 window.location.href = _contextPath; }, error: function (XMLHttpRequest, statusText, errorThrown) { alert(XMLHttpRequest.responseJSON.message); $('#verifyCodeImage').click(); account.removeAttr('disabled'); password.removeAttr('disabled'); verifyCode.removeAttr('disabled'); rememberMe.removeAttr('disabled'); $(_this).removeAttr('disabled'); } }); } catch (e) { console.log(e); account.removeAttr('disabled'); password.removeAttr('disabled'); verifyCode.removeAttr('disabled'); rememberMe.removeAttr('disabled'); $(_this).removeAttr('disabled'); } }); }); util.document.keyDown(13, function () { $('#loginButton').click(); }); ================================================ FILE: src/main/resources/static/assets/js/url.js ================================================ var Url = Url || {}; Url.PAGE = _contextPath; if (Url.PAGE.lastIndexOf('/') === 0 && Url.PAGE.length === 1) { Url.PAGE = ''; } Url.API = Url.PAGE + '/api'; // System { Url.System = {}; page = {}; page.SYSTEM = Url.PAGE + '/system'; page.DICTIONARY = page.SYSTEM + '/dictionary'; page.DICTIONARY_CATEGORY = page.SYSTEM + '/dictionary_category'; page.OPERATION_LOG = page.SYSTEM + '/operation_log'; page.FILE = page.SYSTEM + '/file'; Url.System.Page = page; api = {}; api.SYSTEM = Url.API + '/system'; api.DICTIONARY = api.SYSTEM + '/dictionary'; api.DICTIONARY_CATEGORY = api.SYSTEM + '/dictionary_category'; api.OPERATION_LOG = api.SYSTEM + '/operation_log'; api.FILE = api.SYSTEM + '/file'; Url.System.Api = api; } // User { Url.User = {}; page = {}; page.USER = Url.PAGE + '/user'; page.LOGIN = page.USER + '/login'; page.LOGOUT = page.USER + '/logout'; page.ROLE = page.USER + '/role'; page.ROLE_AUTHORITY = page.USER + '/role_authority'; page.ROLE_VIEW_MENU = page.USER + '/role_view_menu'; page.VIEW_MENU = page.USER + '/view_menu'; page.VIEW_MENU_CATEGORY = page.USER + '/view_menu_category'; page.USER_ROLE = page.USER + '/user_role'; page.DEPARTMENT = page.USER + '/department'; page.VIEW_PAGE = page.USER + '/view_page'; page.VIEW_PAGE_CATEGORY = page.USER + '/view_page_category'; page.VIEW_PAGE_API = page.USER + '/view_page_api'; page.VIEW_PAGE_COMPONENT = page.USER + '/view_page_component'; page.VIEW_PAGE_COMPONENT_API = page.USER + '/view_page_component_api'; page.API = page.USER + '/api'; page.API_CATEGORY = page.USER + '/api_category'; Url.User.Page = page; api = {}; api.USER = Url.API + '/user'; api.LOGIN = api.USER + '/login'; api.LOGOUT = api.USER + '/logout'; api.ROLE = api.USER + '/role'; api.ROLE_AUTHORITY = api.USER + '/role_authority'; api.ROLE_VIEW_MENU = api.USER + '/role_view_menu'; api.ROLE_VIEW_MENU_CATEGORY = api.USER + '/role_view_menu_category'; api.VIEW_MENU = api.USER + '/view_menu'; api.VIEW_MENU_CATEGORY = api.USER + '/view_menu_category'; api.USER_ROLE = api.USER + '/user_role'; api.DEPARTMENT = api.USER + '/department'; api.VIEW_PAGE = api.USER + '/view_page'; api.VIEW_PAGE_CATEGORY = api.USER + '/view_page_category'; api.VIEW_PAGE_API = api.USER + '/view_page_api'; api.VIEW_PAGE_COMPONENT = api.USER + '/view_page_component'; api.VIEW_PAGE_COMPONENT_CATEGORY = api.USER + '/view_page_component_category'; api.VIEW_PAGE_COMPONENT_API = api.USER + '/view_page_component_api'; api.API = api.USER + '/api'; api.API_CATEGORY = api.USER + '/api_category'; Url.User.Api = api; } // Mail { Url.Mail = {}; page = {}; page.MAIL = Url.PAGE + '/mail'; Url.Mail.Page = page; api = {}; api.MAIL = Url.API + '/mail'; Url.Mail.Api = api; } // Quartz { Url.Quartz = {}; page = {}; page.QUARTZ = Url.PAGE + '/quartz'; page.JOB = page.QUARTZ + '/job'; page.JOB_RUNTIME_LOG = page.QUARTZ + '/job_runtime_log'; Url.Quartz.Page = page; api = {}; api.QUARTZ = Url.API + '/quartz'; api.JOB = api.QUARTZ + '/job'; api.JOB_RUNTIME_LOG = api.QUARTZ + '/job_runtime_log'; Url.Quartz.Api = api; } // function getDictionaryCode(field, codeSlug){ // ajax({url:api.system+'/dictionary/getCode/byFieldAndCodeSlug',data:{field:field,codeSlug:codeSlug},success:function (result) { // if(result.data){ // return result.data; // } // }}) // } ================================================ FILE: src/main/resources/static/assets/js/util.js ================================================ /** * jQuery Utils */ var util = util || {}; (function (_util) { _util = { response: {}, request: {}, string: {}, object: {}, json: {}, document: {}, cookie: {} }; { _util.json.toObject = function (json) { return eval('(' + json + ')'); }; _util.response.MESSAGE = 'message'; _util.response.CODE = 'code'; _util.response.DATA = 'data'; _util.response.EXCEPTION = 'exception'; _util.response._httpStatus = function (code, message) { var json = '{"' + _util.response.CODE + '":' + code + ',"' + _util.response.MESSAGE + '":"' + message + '"}'; return _util.json.toObject(json); }; _util.response.httpStatus = { OK: _util.response._httpStatus(200, 'OK'), NOT_FOUND: _util.response._httpStatus(404, 'NOT FOUND') }; _util.response.ok = function (responseResult, fnOkCallback, fnNotOkCallback, fnThenCallback) { if (responseResult) { var OK = _util.response.httpStatus.OK.code; var data = responseResult.hasOwnProperty(_util.response.DATA) ? responseResult[_util.response.DATA] : undefined; var message = responseResult.hasOwnProperty(_util.response.MESSAGE) ? responseResult[_util.response.MESSAGE] : undefined; var code = responseResult.hasOwnProperty(_util.response.CODE) ? responseResult[_util.response.CODE] : undefined; if (code === OK) { if (typeof fnOkCallback === 'function') { fnOkCallback(data, message, code); } } else { if (typeof fnNotOkCallback === 'function') { fnNotOkCallback(data, message, code); } } if (typeof fnThenCallback === 'function') { fnThenCallback(data, message, code); } } }; _util.request.getQueryParam = function (name) { var href = window.location.href; var arr = href.split('?'); if (arr) { if (arr.length > 1) { var arr1 = arr.splice(1); if (!arr1) { } var arr2 = arr1[0]; if (!arr2) { return; } var arr3 = arr2.split('&'); if (!arr3) { return; } if (arr3.length >= 1) { for (var i = 0; arr3.length > i; i++) { var arr4 = arr3[i]; if (arr4) { var arr5 = arr4.split('='); if (arr5) { if (arr5.length >= 2) { if (name === arr5[0]) { return arr5[1]; } } } } } } } } }; _util.ajax = function (options) { if (!window.jQuery) { alert('util.ajax 需要jQuery支持'); return; } var defaults = { async: true, type: 'get', dataType: 'json', processData: true, error: function (xhr, textStatus, errorThrown) { } }; $.extend(defaults, options); return $.ajax(defaults); }; _util.ajax = function (url, method, data, success, error) { var defaults = { dataType: 'JSON', success: function (XMLHttpRequest, statusText) { }, error: function (XMLHttpRequest, statusText, errorThrown) { } }; if (typeof url === 'object') { $.extend(defaults, url); } else { defaults.url = url; } defaults.method = typeof method === 'string' ? method : defaults.method; defaults.data = typeof data === 'object' ? data : defaults.data; defaults.success = typeof success === 'function' ? success : defaults.success; defaults.error = typeof error === 'function' ? error : defaults.error; return $.ajax(defaults); }; _util.string.replaceAllPlaceholder = function (string, searchValue, replaceValue) { return string.replace(new RegExp('{' + searchValue + '}', "gm"), replaceValue); }; // 获取字符的长度 _util.string.countSymbols = function (string) { var regexAstralSymbols = /[\uD800-\uDBFF][\uDC00-\uDFFF]/g; return string // 把代理对改为一个BMP的字符. .replace(regexAstralSymbols, '_') // …这时候取长度就妥妥的啦. .length; }; // 获取前6个字符 _util.string.sliceSymbols = function (str, limit) { var regexAstralSymbols = /[\uD800-\uDBFF][\uDC00-\uDFFF]/g; var output = []; var index = 0; var oldStr = str; str = str.replace(regexAstralSymbols, function (input, offset, match) { if (offset > index) { output = output.concat(match.slice(index, offset).split("")); } index = offset + input.length; output.push(input); return ""; }); if (index < oldStr.length) { output = output.concat(oldStr.slice(index, oldStr.length).split("")); } return output.slice(0, limit).join(""); }; _util.document.create = function (options, tag) { var _body = document.body; var _tag; if (tag) { _tag = document.createElement(tag); } else { _tag = document.createElement('div'); } if (typeof options === 'string') { var selector = options.charAt(0); if (selector) { switch (selector) { case '#': options = options.substring(1, options.length); _tag.id = options; break; case '.': options = options.substring(1, options.length); _tag.className = options; break; default: break; } } return _body.appendChild(_tag); } }; _util.formatter = function (key, defaultValue, keyValue, formatterCallback) { var result; if (typeof keyValue === 'object') { for (var k in keyValue) { switch (typeof key) { case 'number': k = parseInt(k); break; case 'string': k = k.toString(); break; } if (key === k) { result = keyValue[k]; break; } } if (typeof result === 'undefined') { if (typeof defaultValue !== 'undefined') { result = defaultValue; } } } if (typeof formatterCallback === 'function') { result = formatterCallback(result, key, defaultValue, keyValue); } return result; }; /** * 某个按键按下操作 * 回车键(enter) = 13 * @param keyCode * @param callback */ _util.document.keyDown = function (keyCode, callback) { document.onkeydown = function (e) { var ev = document.all ? window.event : e; if (ev.keyCode === keyCode) { if (typeof callback === 'function') { callback(); } } } } _util.cookie.set = function (name, value, expires, path, domain, secure) { var expDays = expires * 24 * 60 * 60 * 1000; var expDate = new Date(); expDate.setTime(expDate.getTime() + expDays); var expString = ((expires == null) ? "" : (";expires=" + expDate.toGMTString())); var pathString = ((path == null) ? "" : (";path=" + path)); var domainString = ((domain == null) ? "" : (";domain=" + domain)); var secureString = ((secure == true) ? ";secure" : ""); document.cookie = name + "=" + escape(value) + expString + pathString + domainString + secureString; }; _util.cookie.get = function (name) { var result = null; var myCookie = document.cookie + ";"; var searchName = name + "="; var startOfCookie = myCookie.indexOf(searchName); var endOfCookie; if (startOfCookie != -1) { startOfCookie += searchName.length; endOfCookie = myCookie.indexOf(";", startOfCookie); result = unescape(myCookie.substring(startOfCookie, endOfCookie)); } return result; } } util = _util; })(util); // // // // #pageloading // { // position: absolute; // left: 0 // px; // top: 0 // px; // background: white // url(loading.gif) // no - repeat // center; // width: 100 %; // height: 100 %; // z - index // : // 99999; // } ================================================ FILE: src/main/resources/static/assets/js/workbench.js ================================================ $(document).ready(function () { var option0 = { tooltip: { trigger: 'item', formatter: "{a}
{b} : {c} ({d}%)" }, legend: { orient: 'vertical', x: 'left', data: ['直接访问', '邮件营销', '联盟广告', '视频广告', '搜索引擎'], show: false }, toolbox: { show: false, feature: { mark: {show: true}, dataView: {show: true, readOnly: false}, magicType: { show: true, type: ['pie', 'funnel'], option: { funnel: { x: '25%', width: '50%', funnelAlign: 'center', max: 1548 } } }, restore: {show: true}, saveAsImage: {show: true} } }, calculable: true, series: [ { name: '访问来源', type: 'pie', radius: ['50%', '70%'], itemStyle: { normal: { label: { show: false }, labelLine: { show: false } }, emphasis: { label: { show: true, position: 'center', textStyle: { fontSize: '30', fontWeight: 'bold' } } } }, data: [ {value: 335, name: '直接访问'}, {value: 310, name: '邮件营销'}, {value: 234, name: '联盟广告'}, {value: 135, name: '视频广告'}, {value: 1548, name: '搜索引擎'} ] } ] }; var myChart0 = echarts.init(document.getElementById('chart0')); myChart0.setOption(option0); //chart1 var option1 = { tooltip: { trigger: 'axis' }, legend: { data: ['邮件营销', '联盟广告', '视频广告', '直接访问', '搜索引擎'], show: false }, toolbox: { show: false, feature: { mark: {show: true}, dataView: {show: true, readOnly: false}, magicType: {show: true, type: ['line', 'bar', 'stack', 'tiled']}, restore: {show: true}, saveAsImage: {show: true} } }, calculable: true, xAxis: [ { type: 'category', boundaryGap: false, data: ['第一周', '第二周', '第三周', '第四周', '第五周', '第六周', '第七周'] } ], yAxis: [ { type: 'value' } ], series: [ { name: '邮件营销', type: 'line', stack: '总量', data: [120, 132, 101, 134, 90, 230, 210] }, { name: '联盟广告', type: 'line', stack: '总量', data: [220, 182, 191, 234, 290, 330, 310] }, { name: '视频广告', type: 'line', stack: '总量', data: [150, 232, 201, 154, 190, 330, 410] }, { name: '直接访问', type: 'line', stack: '总量', data: [320, 332, 301, 334, 390, 330, 320] }, { name: '搜索引擎', type: 'line', stack: '总量', data: [820, 932, 901, 934, 1290, 1330, 1320] } ] }; var myChart1 = echarts.init(document.getElementById('chart1')); myChart1.setOption(option1); var option3 = { tooltip: { trigger: 'axis' }, legend: { data: ['访问次数'], show: false }, toolbox: { show: false, feature: { mark: {show: true}, dataView: {show: true, readOnly: false}, magicType: {show: true, type: ['line', 'bar']}, restore: {show: true}, saveAsImage: {show: true} } }, calculable: true, xAxis: [ { type: 'category', data: ['采购组织', '供应商', '新物料', 'OA', '信息管理', '业务系统', '采购商'] } ], yAxis: [ { type: 'value' } ], series: [ { name: '访问次数', type: 'bar', data: [60, 45, 73, 23, 37, 48, 18], markPoint: { data: [ {type: 'max', name: '最大值'}, {type: 'min', name: '最小值'} ] }, markLine: { data: [ {type: 'average', name: '平均值'} ] } } ] }; var myChart3 = echarts.init(document.getElementById('chart3')); myChart3.setOption(option3); // 我的待办点击事件 $(document).on('click', '.work-item.blue', function (event) { var width = (2 * $(this).width()) + 10; $(".todo-panel").width(width - 2).css({top: $(this).offset().top, left: $(this).offset().left}).show(); event.stopPropagation(); }); $(".todo-panel").click(function () { event.stopPropagation(); }); $(document).click(function () { $(".todo-panel").hide(); }); // 文件下载 tab 事件处理 $('.right-box-tab').find('a').click(function () { $(this).closest(".right-box-tab").find("a").removeClass("current"); $(this).addClass("current"); $($(this).attr('href')).closest(".right-box-tab-list").find("ul").addClass("hide"); $($(this).attr('href')).removeClass("hide"); }); }); ================================================ FILE: src/main/resources/static/assets/vendor/easyui-plus-1.0.0/CHANGELOG.md ================================================ ## v1.0.0 - 2018.09.25 - 基本功能完成 ================================================ FILE: src/main/resources/static/assets/vendor/easyui-plus-1.0.0/README.md ================================================ # easyui plus > 基于 EasyUI 的 Javascript 框架,可快速简单的搭建企业级应用的 UI,已兼容更新 EasyUI 至最新版(v1.6.3) ## 更新日志 [CHANGELOG.md](/CHANGELOG.md) ## 引用示例 ``` ``` ## 使用示例 ### dialog - 新增 ``` $('#dialogSelector').dialog(expressui.dialog.create, { title: 'dialog demo', grid: {type: 'treegrid', selector: '#treegridSelector'}, href: '/dialog_demo/add_dialog', save: { url: '/dialog_demo/add_one', data: something ? something : {}, // 非必传参数 method: 'post' }, buttons: [{ text: '保存', iconCls: 'iconfont icon-save', handler: expressui.dialog.add, reload: [{type: 'treegrid', selector: '#treegridSelector'}, {type: 'datagrid', selector: '#datagridSelector', data: []}], success: '新增成功' }, { text: '关闭', iconCls: 'iconfont icon-close', handler: expressui.dialog.close }] }); ``` ================================================ FILE: src/main/resources/static/assets/vendor/easyui-plus-1.0.0/css/easyui.plus.css ================================================ /** * jQuery EasyUI plus * @version v1.0.0 * @author godcheese * @uri http://www.github.com/godcheese/expressui */ .fa { display: inline-block; font: normal normal normal 12px FontAwesome; font-size: inherit; text-rendering: auto; -webkit-font-smoothing: antialiased; -moz-osx-font-smoothing: grayscale; } /*******************************************************/ .fa { display: inline-block; font: normal normal normal 12px FontAwesome; font-size: inherit; text-rendering: auto; -webkit-font-smoothing: antialiased; -moz-osx-font-smoothing: grayscale; padding-top:2px; } .datagrid-toolbar { padding: 5px; } /* 对话框窗口的 form 表单 */ .submit-form { height: 100% !important; margin: 5px; background-color: #ffffff; outline: 6px solid #ffffff; outline-offset: 0; border: 0 solid #ffffff; } .submit-form table.submit-table { width: 100%; padding: 0; height: 100% !important; table-layout: fixed; } .submit-form table.submit-table tr { vertical-align: middle; border: 1px solid #D3D3D3; border-right-width: 0; border-left-width: 0; } .submit-form table.submit-table tr td { border: 1px solid #D3D3D3; border-top-width: 0; border-bottom-width: 0; padding: 5px; width: 100%; } .submit-form table.submit-table tr td.label { width: 30%; text-align: right; font-size: 12px; color: #666; min-width: 80px; font-weight: 400; margin: 0; padding: 5px; word-break: keep-all; /* for ie */ word-wrap: break-word; background: #f5f5f5; border: 1px solid #cacaca; } .submit-form table.submit-table span.textbox { width: 80% !important; } .submit-form table.submit-table input.textbox-text,.submit-form table.submit-table textarea.textbox-text { width: 100% !important; } .submit-form .submit-button { border-color: #dadde2; } .submit-form .submit-button { background: rgb(244, 244, 244); border-width: 1px; border-style: solid; } .submit-form .submit-button { position: relative; top: -1px; text-align: right; padding: 5px; } /* --blue: #007bff; --indigo: #6610f2; --purple: #6f42c1; --pink: #e83e8c; --red: #dc3545; --orange: #fd7e14; --yellow: #ffc107; --green: #28a745; --teal: #20c997; --cyan: #17a2b8; --white: #ffffff; --gray: #6c757d; --gray-dark: #343a40; --primary: #007bff; --secondary: #6c757d; --success: #28a745; --info: #17a2b8; --warning: #ffc107; --danger: #dc3545; --light: #f8f9fa; --dark: #343a40; */ /*background: #4989ed;*/ /*color: #ffffff;*/ /*width: 82px;*/ /*border-radius: 5px;*/ /* button primary */ /*color: #ffffff;*/ /*background-color: #50a1ff;*/ /*border-color: #50a1ff;*/ /* button */ /*display: inline-block;*/ /*font-weight: 600;*/ /*text-align: center;*/ /*white-space: nowrap;*/ /*vertical-align: middle;*/ /*-webkit-user-select: none;*/ /*-moz-user-select: none;*/ /*-ms-user-select: none;*/ /*user-select: none;*/ /*border: 1px solid transparent;*/ /*padding: 0.375rem 0.75rem;*/ /*font-size: 0.9375rem;*/ /*line-height: 1.9;*/ /*border-radius: 0.25rem;*/ /*-webkit-transition: color 0.15s ease-in-out, background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, -webkit-box-shadow 0.15s ease-in-out;*/ /*transition: color 0.15s ease-in-out, background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, -webkit-box-shadow 0.15s ease-in-out;*/ /*transition: color 0.15s ease-in-out, background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out;*/ /*transition: color 0.15s ease-in-out, background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out, -webkit-box-shadow 0.15s ease-in-out;*/ ================================================ FILE: src/main/resources/static/assets/vendor/easyui-plus-1.0.0/js/easyui.plus.js ================================================ /** * Expressui * jQuery EasyUI extend plugin * @version v1.0.0 * @author godcheese * @uri http://www.github.com/godcheese/expressui */ /** * 响应状态码 100~199:信息状态码,代表请求已被接受,需要继续处理。 200~299:成功状态码,代表请求已成功被服务器接收、理解、并接受。 300~399:重定向状态码,代表需要客户端采取进一步的操作才能完成请求。 400~499:客户端错误状态码,代表了客户端看起来可能发生了错误,妨碍了服务器的处理。 500~599:服务器错误状态码,代表了服务器在处理请求的过程中有错误或者异常状态发生,也有可能是服务器意识到以当前的软硬件资源无法完成对请求的处理。 200 OK - [GET]:服务器成功返回用户请求的数据,该操作是幂等的(Idempotent)。 201 CREATED - [POST/PUT/PATCH]:用户新建或修改数据成功。 202 Accepted - [*]:表示一个请求已经进入后台排队(异步任务) 204 NO CONTENT - [DELETE]:用户删除数据成功。 400 INVALID REQUEST - [POST/PUT/PATCH]:用户发出的请求有错误,服务器没有进行新建或修改数据的操作,该操作是幂等的。 401 Unauthorized - [*]:表示用户没有权限(令牌、用户名、密码错误)。 403 Forbidden - [*] 表示用户得到授权(与401错误相对),但是访问是被禁止的。 404 NOT FOUND - [*]:用户发出的请求针对的是不存在的记录,服务器没有进行操作,该操作是幂等的。 406 Not Acceptable - [GET]:用户请求的格式不可得(比如用户请求JSON格式,但是只有XML格式)。 410 Gone -[GET]:用户请求的资源被永久删除,且不会再得到的。 422 Unprocesable entity - [POST/PUT/PATCH] 当创建一个对象时,发生一个验证错误。 500 INTERNAL SERVER ERROR - [*]:服务器发生错误,用户将无法判断发出的请求是否成功。 如果状态码是4xx,就应该向用户返回出错信息。一般来说,返回的信息中将error作为键名,出错信息作为键值即可。 错误处理(Error handling) { error: "Invalid API key" errorno: 4041, } { "message": "Requires authentication", "documentation_url": "https://developer.github.com/v3" } 针对不同操作,服务器向用户返回的结果应该符合以下规范。 GET /collection:返回资源对象的列表(数组) GET /collection/resource:返回单个资源对象 POST /collection:返回新生成的资源对象 PUT /collection/resource:返回完整的资源对象 PATCH /collection/resource:返回完整的资源对象 DELETE /collection/resource:返回一个空文档 * */ var expressui = expressui || {}; (function (_expressui) { if (!window.jQuery) { console.error('expressui 需要 jQuery 支持'); return; } $.extend(_expressui, { util: {}, datagrid: {}, dialog: {}, treegrid: {}, tree: {}, messager: {}, grid: {}, response: { CODE: 'code', MESSAGE: 'message', DATA: 'data', EXCEPTION: 'exception' }, httpStatus: {} }); _expressui.util.toObject = function (json) { return eval('(' + json + ')'); }; _expressui.util.initSelector = function (options) { var selector; if (options.selector) { selector = options.selector; // 初始 selector,仅支持 #id 和 .className 两种选择器 if (selector.charAt(0) !== '#' && selector.charAt(0) !== '.') { throw new Error('Selector ' + selector + ' is not id or class.'); } if (!options[0]) { _expressui.util.createElement(options.selector); } } return selector; }; /** * 创建 html 元素 * @param selector * @param tag * @param innerHTML * @returns {Node} */ _expressui.util.createElement = function (selector, tag, innerHTML) { /** * 生成 node,没 selector 指定 node 就生成一个 * @param selector * @param tag * @returns {*} * @private */ function _selectorNode(selector, tag) { var _selectorId, _selectorClassName, _node; if (typeof selector === 'string') { var _symbol = selector.charAt(0); if (_symbol) { switch (_symbol) { case '#': _selectorId = selector.substring(1, selector.length); _node = document.getElementById(_selectorId); break; case '.': _selectorClassName = selector.substring(1, selector.length); _node = document.getElementsByClassName(_selectorClassName); _node = _node[0]; break; default: break; } if (!_node) { if (tag) { _node = document.createElement(tag); } else { _node = document.createElement('div'); } if (_selectorId) { _node.id = _selectorId; } if (_selectorClassName) { _node.className = _selectorClassName; } // 标记这些标签为自动生成的 if (_node) { _node.setAttribute("data-create", "auto"); } } } } return _node; } var _body = document.body; var _node = _selectorNode(selector); if (innerHTML) { _node.innerHTML = innerHTML; } return _body.appendChild(_node); }; _expressui.util.replaceAllPlaceholder = function (string, searchValue, replaceValue) { if (string) { string = string + ''; } return string.replace(new RegExp('{' + searchValue + '}', "gm"), replaceValue); }; _expressui.ajax = function (url, method, data, success, error) { var defaults = { dataType: 'JSON', success: function (XMLHttpRequest, statusText) { }, error: function (XMLHttpRequest, statusText, errorThrown) { } }; if (typeof url === 'object') { $.extend(defaults, url); } else { defaults.url = url; } if (typeof method === 'string') { defaults.method = method; } if (typeof data === 'object') { defaults.data = data; } if (typeof success === 'function') { defaults.success = success; } if (typeof error === 'function') { defaults.error = error; } return $.ajax(defaults); }; _expressui.replaceUrlPlaceholder = function (url, object, prefix) { if (url && object) { for (var key in object) { if (object.hasOwnProperty(key)) { var urlPlaceholder = key; if (prefix) { urlPlaceholder = prefix + "." + key; } url = _expressui.util.replaceAllPlaceholder(url, urlPlaceholder, object[key]); } } } return url; }; _expressui.response._httpStatus = function (code, message) { var json = '{"' + _expressui.response.CODE + '":' + code + ',"' + _expressui.response.MESSAGE + '":"' + message + '"}'; return _expressui.util.toObject(json); }; _expressui.response.httpStatus = { OK: _expressui.response._httpStatus(200, 'OK'), NOT_FOUND: _expressui.response._httpStatus(404, 'NOT FOUND') }; _expressui.response._ok = function (responseResult, fnOkCallback, fnNotOkCallback, fnThenCallback) { if (responseResult) { var OK = _expressui.response.httpStatus.OK.code; var data = responseResult.hasOwnProperty(_expressui.response.DATA) ? responseResult[_expressui.response.DATA] : undefined; var message = responseResult.hasOwnProperty(_expressui.response.MESSAGE) ? responseResult[_expressui.response.MESSAGE] : undefined; var code = responseResult.hasOwnProperty(_expressui.response.CODE) ? responseResult[_expressui.response.CODE] : undefined; if (code === OK) { if (typeof fnOkCallback === 'function') { fnOkCallback(data, message, code); } } else { if (typeof fnNotOkCallback === 'function') { fnNotOkCallback(data, message, code); } } if (typeof fnThenCallback === 'function') { fnThenCallback(data, message, code); } } }; _expressui.response.ok = function (responseResult, fnOkCallback, fnNotOkCallback, fnThenCallback) { _expressui.response._ok(responseResult, function (data, message, code) { if (fnOkCallback) { fnOkCallback(data, message, code); } }, function (data, message, code) { if (fnNotOkCallback) { fnNotOkCallback(data, message, code); } }, function (data, message, code) { if (fnThenCallback) { fnThenCallback(data, message, code); } }); }; _expressui.response.okHasMessage = function (responseResult, statusText, XMLHttpRequest, fnOkCallback, fnNotOkCallback, fnThenCallback) { _expressui.response._ok(responseResult, function (responseResult, statusText, XMLHttpRequest) { if (typeof fnOkCallback === 'function') { fnOkCallback(responseResult, statusText, XMLHttpRequest); } }, function (responseResult, statusText, XMLHttpRequest) { if (typeof fnNotOkCallback === 'function') { fnNotOkCallback(responseResult, statusText, XMLHttpRequest); } // $.messager.show({title:'信息', msg:message}); // $.messager.alert('信息', message, 'error'); }, function (responseResult, statusText, XMLHttpRequest) { if (fnThenCallback) { fnThenCallback(responseResult, statusText, XMLHttpRequest); } }); }; /** * 创建并打开一个对话框实例 * @type {string} */ _expressui.dialog.create = 'create'; /** * 对话框新增数据提交表单方法 * @type {string} */ _expressui.dialog.add = 'add'; /** * 对话框保存数据提交表单方法 * @type {string} */ _expressui.dialog.save = 'save'; /** * 对话框实例关闭 * @type {string} */ _expressui.dialog.close = 'close'; /** * 创建表格实例 * @type {string} */ _expressui.grid.create = 'create'; /** * 删除多项 * @type {string} */ _expressui.grid.deleteChecked = 'deleteChecked'; // 删除一项 _expressui.grid.deleteCheckedOne = 'deleteCheckedOne'; /** * 获取必须一个勾选项,否则弹出警告信息 * @type {string} */ _expressui.grid.getCheckedOneOrShowAlert = 'getCheckedOneOrShowAlert'; /** * 勾选一项或不勾选项都不弹出警告信息,否则弹出警告信息 * @type {string} */ _expressui.grid.getCheckedOneNoCheckedOrShowAlert = 'getCheckedOneNoCheckedOrShowAlert'; /** * 获取勾选的一项 * @type {string} */ _expressui.grid.getCheckedOne = 'getCheckedOne'; /** * 获取勾选的多项 * @type {string} */ _expressui.grid.getChecked = 'getChecked'; // 获取至少勾选一项,否则弹出警告信息 _expressui.grid.getCheckedLessOneOrShowAlert = 'getCheckedLessOneOrShowAlert'; // post 勾选或不勾选都可以 _expressui.grid.post = 'post'; // post 必须勾选一项或一项以上,否则弹出警告信息 _expressui.grid.postCheckedLessOneOrShowAlert = 'postCheckedLessOneOrShowAlert'; // post 必须只勾选一项,否则弹出警告信息 _expressui.grid.postCheckedMustOneOrShowAlert = 'postCheckedMustOneOrShowAlert'; // _expressui.messager = { // show: function (msg) { // var options = { // title: '信息', // msg: '', // timeout: 1000, // showType: 'slide', // modal: false, // shadow: false, // draggable: false, // resizable: false, // closed: true, // style: { // left: "", // top: "", // right: 0, // zIndex: 999, // bottom: -document.body.scrollTop - document.documentElement.scrollTop // }, // width: 260, // height: 120, // minHeight: 0, // showSpeed: 600 // }; // // if (msg && typeof msg === 'string') { // options.msg = msg; // } // $.extend(options, msg); // $.messager.show(options); // }, // confirm: function (msg, okCallback) { // var options = { // title: '信息', // msg: '确认操作吗?', // fn: function (ok) {} // }; // if (msg && typeof msg === 'string') { // options.msg = msg; // } // if (msg && (typeof okCallback === 'function')) { // options.msg = msg; // options.fn = function (ok) { // if (ok) { // okCallback(ok); // } // } // } // if (msg && typeof msg === 'object') { // $.extend(options, msg); // } // $.messager.confirm(options); // }, // progress: function (msg) { // var options = {}; // if (typeof msg === 'string') { // options.msg = msg; // } // if (typeof msg === 'object') { // $.extend(options, msg); // } // // if (msg === 'close') { // $.messager.progress(msg); // } else { // $.messager.progress(options); // } // }, // alert: function (msg, icon) { // var options = { // title: '提示', // msg: '', // icon: 'warning' // }; // if (typeof msg === 'string') { // options.msg = msg; // } // // if (msg && icon) { // options.msg = msg; // options.icon = icon; // } // // if (typeof msg === 'object') { // $.extend(options, msg); // } // // $.messager.alert(options); // } // }; _expressui.grid._reload = function (grid) { switch (grid.type) { case 'datagrid': if (typeof grid.data === 'object') { $(grid.selector).datagrid('loadData', grid.data); } else { if (grid.url) { $(grid.selector).datagrid('reload', grid.url); } else { $(grid.selector).datagrid('reload'); } } break; case 'tree': if (typeof grid.data === 'object') { $(grid.selector).tree('loadData', grid.data); } else { if (grid.url) { $(grid.selector).tree('options').url = grid.url; } $(grid.selector).tree('reload'); } break; case 'treegrid': if (typeof grid.data === 'object') { $(grid.selector).treegrid('loadData', grid.data); } else { if (grid.url) { $(grid.selector).treegrid('options').url = grid.url; } $(grid.selector).treegrid('reload'); } break; } }; _expressui.grid.reload = function (grid) { if (grid) { if (!grid.type) { for (var i = 0; i < grid.length; i++) { _expressui.grid._reload(grid[i]); } } else { _expressui.grid._reload(grid); } } }; _expressui.grid.getChecked = function (grid) { var checked; if (grid.type) { switch (grid.type) { case 'datagrid': checked = $(grid.selector).datagrid('getChecked'); break; case 'treegrid': checked = $(grid.selector).treegrid('getChecked'); break; } } return checked; }; _expressui.grid.getCheckedOne = function (grid) { var checked = _expressui.grid.getChecked(grid); if (checked && checked.length > 0) { return checked[0]; } }; _expressui.grid.getCheckedHasMessage = function (grid) { var checked; if (grid.type) { checked = _expressui.grid.getChecked(grid); if (!checked) { $.messager.alert('信息', '请勾选要操作项', 'warning'); return; } } return checked; }; _expressui.grid.getCheckedOneHasMessage = function (grid) { var checked = _expressui.grid.getCheckedHasMessage(grid); if (checked) { if (checked.length === 1) { return checked[0]; } else { if (checked.length <= 0) { $.messager.alert('信息', '请勾选要操作项', 'warning'); } else { $.messager.alert('信息', '最多只能勾选一项操作', 'warning'); } } } }; _expressui.grid.appendToolbar = function (grid) { if (!grid.toolbar && grid.selector) { grid.toolbar = grid.selector + 'Toolbar'; } }; /** * express.grid.formatter( * value, * [{value:0,valueName:'未知'},{value:1,valueName:'男'}], * function() {} * ); * * @param value * @param values * @param callback * @returns {undefined} */ _expressui.grid.formatter = function (value, values, callback) { var valueName = undefined; function f(v, vs) { for (var i = 0; i < vs.length; i++) { if ((vs[i].value + "") === (v + "")) { return vs[i].valueName; } } } if (typeof values === 'object') { valueName = f(value, values); if (!valueName) { var defaultValue = f('default', values); valueName = f(defaultValue, values); } } if (typeof callback === 'function') { valueName = callback(valueName, value, values); } return valueName; }; _expressui.dialog._replacePlaceHolder = function (options, grid) { var checked; checked = _expressui.grid.getCheckedOne(grid); if (grid.prefix) { if (options.get) { if (typeof options.get === 'string') { options.get.url = _expressui.replaceUrlPlaceholder(options.get, checked); options.get.method = 'get'; } if (typeof options.get === 'object') { if (options.get.url) { options.get.url = _expressui.replaceUrlPlaceholder(options.get.url, checked); } options.get.method = options.get.method ? options.get.method : 'get'; } } if (options.save) { if (typeof options.save === 'string') { options.save = _expressui.replaceUrlPlaceholder(options.save, checked, grid.prefix); } if (typeof options.save === 'object') { if (options.save.url) { options.save.url = _expressui.replaceUrlPlaceholder(options.save.url, checked, grid.prefix); } if (options.save.data) { params = options.save.data; paramArray = []; for (var i = 0; i < params.length; i++) { paramArray.push(_expressui.replaceUrlPlaceholder(params[i], checked, grid.prefix)); } options.save.data = paramArray; } } options.url = options.save.url; } if (options.href) { options.href = _expressui.replaceUrlPlaceholder(options.href, checked, grid.prefix); } } else { if (options.get) { if (typeof options.get === 'string') { options.get.url = _expressui.replaceUrlPlaceholder(options.get, checked); options.get.method = 'get'; } if (typeof options.get === 'object') { options.get.url = options.get.url ? _expressui.replaceUrlPlaceholder(options.get.url, checked) : ''; options.get.method = options.get.method ? options.get.method : 'get'; } } if (options.save) { if (typeof options.save === 'string') { options.save.url = _expressui.replaceUrlPlaceholder(options.save, checked); options.save.method = 'post'; } if (typeof options.save === 'object') { options.save.url = options.save.url ? _expressui.replaceUrlPlaceholder(options.save.url, checked) : ''; options.save.method = options.save.method ? options.save.method : 'post'; if (options.save.data) { // var params = Object.keys(options.save.data); var params = Object.getOwnPropertyNames(options.save.data); var paramArray = []; for (i = 0; i < params.length; i++) { if (options.save.data.hasOwnProperty(params[i])) { var temp = {}; temp['name'] = params[i]; temp['value'] = _expressui.replaceUrlPlaceholder(options.save.data[params[i]], checked); paramArray.push(temp); } } options.save.data = paramArray; } } options.url = options.save.url; } if (options.href) { options.href = _expressui.replaceUrlPlaceholder(options.href, checked); } } }; _expressui.form = {}; _expressui.form.submit = function (selector, url, method) { var defaultOptions = {type: 'post'}; if (typeof selector === 'object') { $.extend(defaultOptions, selector); } else { defaultOptions.selector = selector || undefined; defaultOptions.url = url || undefined; defaultOptions.method = method || 'post'; } var isValid = $(defaultOptions.selector).form('validate'); if (isValid) { $.messager.progress({title: '请稍等', msg: '正在操作...'}); var serializeArray = $(defaultOptions.selector).find('form').serializeArray(); var paramArray = defaultOptions.data || []; for (var i = 0; i < paramArray.length; i++) { serializeArray.push(paramArray[i]); } try { expressui.ajax({ beforeSend: function () { if (typeof defaultOptions.beforeSend === 'function') { defaultOptions.beforeSend(); } }, complete: function () { if (typeof defaultOptions.complete === 'function') { defaultOptions.complete(); } }, url: defaultOptions.url || undefined, type: defaultOptions.method || 'post', data: serializeArray, success: function (res, statusText, XMLHttpRequest) { if (typeof defaultOptions.success === 'function') { defaultOptions.success(res, statusText, XMLHttpRequest); } else { if (typeof defaultOptions.reset === 'string') { $(defaultOptions.reset).form('clear'); } } if (typeof defaultOptions.success === 'string') { $.messager.show({title: '信息', msg: defaultOptions.success}); if (typeof defaultOptions.reset === 'string') { $(defaultOptions.reset).form('clear'); } } $.messager.progress('close'); }, error: function (XMLHttpRequest, statusText, errorThrown) { if (defaultOptions.error) { if (typeof defaultOptions.error === 'function') { defaultOptions.error(XMLHttpRequest, statusText, errorThrown); } if (typeof defaultOptions.error === 'string') { $.messager.alert('信息', defaultOptions.error, 'error'); } } else { $.messager.alert('信息', XMLHttpRequest.responseJSON.message, 'error'); } $.messager.progress('close'); } }) } catch (e) { $.messager.alert('信息', e.message, 'error'); } finally { $.messager.progress('close'); } } }; _expressui.form.reset = function (selector) { return $(selector).form('clear'); }; /** * 避免组件移除窗口外 * @param left * @param top */ _expressui.onMove = function (left, top) { if (left < 1) { left = 1; } if (top < 1) { top = 1; } var width = parseInt($(this).parent().css('width')) + 14; var height = parseInt($(this).parent().css('height')) + 14; var right = left + width; var bottom = top + height; var browserWidth = $(window).width(); var browserHeight = $(window).height(); if (right > browserWidth) { left = browserWidth - width; } if (bottom > browserHeight) { top = browserHeight - height; } // 修正面板位置 $(this).parent().css({ left: left, top: top }); }; })(expressui); $.extend($.fn.dialog.defaults, {onMove: expressui.onMove}); $.extend($.fn.window.defaults, {onMove: expressui.onMove}); $.extend($.fn.panel.defaults, {onMove: expressui.onMove}); $.extend($.fn.panel.defaults, { /** * panel关闭时回收内存 * tabs 引用 iframe,关闭 tab 时 iframe 不会被销毁从而导致内存不能释放,大量使用 tab、iframe 容易导致内存溢出 */ onBeforeDestroy: function () { var iframe = $('iframe', this); try { if (iframe.length > 0) { for (var i = 0; i < iframe.length; i++) { iframe[i].src = ''; iframe[i].contentWindow.document.write(''); iframe[i].contentWindow.close(); } iframe.remove(); // IE 特有内存回收方法 if (navigator.userAgent.indexOf('MSIE') > 0) { try { CollectGarbage(); } catch (e) { } } } } catch (e) { } } }); $.extend($.fn.calendar.defaults, { // 设置周一为一周开始日 firstDay: 1 }); $.extend($.fn.dialog.defaults, { // dialog // title: '对话框', collapsible: true, minimizable: false, maximizable: true, resizable: true, toolbar: null, width: 400, height: 311, // window closable: true, closed: false, zIndex: 9000, draggable: true, shadow: true, inline: false, modal: true, border: true, // true,false,'thin','thick' constrain: false, // panel // id null, iconCls: null, fit: false, content: null, halign: 'top', // top/left/right titleDirection: 'down', // up/down header: null, openAnimation: 'show',// 'slide','fade','show' openDuration: 0, closeAnimation: 'show', // 'slide','fade','show' closeDuration: 0, href: null, loadingMessage: '加载中…', method: 'get', queryParams: null, onLoad: function () { var _this = this; var options = $(this).dialog('options'); $(this).wrapInner('
'); if (options.data) { if (typeof options.data === 'object') { $(_this).form('load', options.data); } if (typeof options.data === 'function') { $(_this).form('load', options.data()); } } else { if (options.get) { $.ajax({ url: options.get.url, type: options.get.method, dataType: 'json', success: function (data) { $(_this).form('load', data); } }); } } }, onClose: function () { // 由系统自动生成(带有:data-create="auto")的关闭后即时销毁 if ($(this).data('create') === 'auto') { return $(this).dialog('destroy'); } } }); $.extend($.fn.dialog.methods, { /** * dialog.create * 创建并打开一个 dialog 对话框实例 * @param jq * @param options * @returns {jQuery|*} */ create: function (jq, options) { options.selector = expressui.util.initSelector(jq); if (!options.buttons) { options.buttons = [{ text: '保存', iconCls: 'iconfont icon-save', handler: expressui.dialog.save }, { text: '关闭', iconCls: 'iconfont icon-close', handler: expressui.dialog.close }]; } if (options.buttons) { var _buttons = options.buttons; for (var i = 0; i < _buttons.length; i++) { var _button = _buttons[i]; if (typeof _button.handler === 'string') { switch (_button.handler) { case 'add': var _buttonOptions = { success: _button.success || undefined, error: _button.error || undefined, reload: _button.reload || undefined }; options.buttons[i].handler = function () { $(options.selector).dialog(expressui.dialog.add, _buttonOptions); }; break; case 'save': _buttonOptions = { success: _button.success || undefined, error: _button.error || undefined, reload: _button.reload || undefined }; options.buttons[i].handler = function () { $(options.selector).dialog(expressui.dialog.save, _buttonOptions); }; break; case 'close': var _reload = _button.reload || undefined; options.buttons[i].handler = function () { $(options.selector).dialog(expressui.dialog.close, function () { // 按钮回调刷新表 if (_reload) { expressui.grid.reload(_reload); } }); }; break; } } } } if (options.grid) { expressui.dialog._replacePlaceHolder(options, options.grid); } return $(options.selector).dialog(options); }, /** * dialog.add * @param jq * @param options */ add: function (jq, options) { var selector = expressui.util.initSelector(jq); var dialogOptions = $(selector).dialog('options'); var isValid = $(selector).form('validate'); if (isValid) { $.messager.progress({title: '请稍等', msg: '正在操作...'}); var serializeArray = $(selector).find('form').serializeArray(); var paramArray = typeof dialogOptions.save === 'object' ? (dialogOptions.save.data || []) : []; for (var i = 0; i < paramArray.length; i++) { serializeArray.push(paramArray[i]); } if (typeof dialogOptions.save === 'function') { try { var sA = {}; for (i = 0; i < serializeArray.length; i++) { sA[serializeArray[i].name] = serializeArray[i].value; } if (dialogOptions.save(sA) !== true) { if (typeof options.success === 'function') { options.success(data); } if (typeof options.success === 'string') { $.messager.show({title: '信息', msg: options.success}); if (typeof options.reload === 'object') { expressui.grid.reload(options.reload); } } else { if (typeof options.reload === 'object') { expressui.grid.reload(options.reload); } } $(selector).dialog('close'); } } catch (e) { console.error(e); } finally { $.messager.progress('close'); } } else { try { expressui.ajax({ beforeSend: function () { }, url: typeof dialogOptions.save === 'string' ? dialogOptions.save : dialogOptions.save.url, type: dialogOptions.save.method || 'post', data: serializeArray, success: function (data, statusText, XMLHttpRequest) { if (typeof options.success === 'function') { options.success(data); } // 此处 bug 会出现多次 reload // } else { // if (typeof options.reload === 'object') { // expressui.grid.reload(options.reload); // } // } if (typeof options.success === 'string') { $.messager.show({title: '信息', msg: options.success}); if (typeof options.reload === 'object') { expressui.grid.reload(options.reload); } } else { if (typeof options.reload === 'object') { expressui.grid.reload(options.reload); } } $(selector).dialog('close'); $.messager.progress('close'); }, error: function (XMLHttpRequest, statusText, errorThrown) { if (options.error) { if (typeof options.error === 'function') { options.error(XMLHttpRequest, statusText, errorThrown); } if (typeof options.error === 'string') { $.messager.alert('信息', options.error, 'error'); } } else { $.messager.alert('信息', XMLHttpRequest.responseJSON.message, 'error'); } $.messager.progress('close'); } }) } catch (e) { $.messager.alert('信息', e.message, 'error'); } finally { $.messager.progress('close'); } } } }, /** * dialog.save * @param jq * @param options */ save: function (jq, options) { var selector = expressui.util.initSelector(jq); var dialogOptions = $(selector).dialog('options'); var isValid = $(selector).form('validate'); if (isValid) { $.messager.progress({title: '请稍等', msg: '正在操作...'}); var serializeArray = $(selector).find('form').serializeArray(); var paramArray = typeof dialogOptions.save === 'object' ? dialogOptions.save.data || [] : []; for (var i = 0; i < paramArray.length; i++) { serializeArray.push(paramArray[i]); } if (typeof dialogOptions.save === 'function') { try { var sA = {}; for (i = 0; i < serializeArray.length; i++) { sA[serializeArray[i].name] = serializeArray[i].value; } if (dialogOptions.save(sA) !== true) { if (typeof options.success === 'function') { options.success(data); } if (typeof options.success === 'string') { $.messager.show({title: '信息', msg: options.success}); if (typeof options.reload === 'object') { expressui.grid.reload(options.reload); } } else { if (typeof options.reload === 'object') { expressui.grid.reload(options.reload); } } $(selector).dialog('close'); } } catch (e) { console.error(e); } finally { $.messager.progress('close'); } } else { try { expressui.ajax({ beforeSend: function () { }, url: (typeof dialogOptions.save) === 'string' ? dialogOptions.save : (dialogOptions.save.url || ''), type: dialogOptions.save.method || 'post', data: serializeArray, success: function (data, statusText, XMLHttpRequest) { if (typeof options.success === 'function') { options.success(data); } if (typeof options.success === 'string') { $.messager.show({title: '信息', msg: options.success}); if (typeof options.reload === 'object') { expressui.grid.reload(options.reload); } } else { if (typeof options.reload === 'object') { expressui.grid.reload(options.reload); } } $(selector).dialog('close'); $.messager.progress('close'); }, error: function (XMLHttpRequest, statusText, errorThrown) { if (options.error) { if (typeof options.error === 'function') { options.error(XMLHttpRequest, statusText, errorThrown); } if (typeof options.error === 'string') { $.messager.alert('信息', options.error, 'error'); } } else { $.messager.alert('信息', XMLHttpRequest.responseJSON.message, 'error'); } $.messager.progress('close'); } }) } catch (e) { $.messager.alert('信息', e.message, 'error'); } finally { $.messager.progress('close'); } } } } }); $.extend($.fn.datagrid.defaults, { idField: 'id', fit: true, fitColumns: true, autoRowHeight: true, selectOnCheck: false, // 单独 select checkOnSelect: true, // 单独 select checkbox: true, method: 'get', pagination: true, pageNumber: 1, pageList: [10, 20, 50, 100], pageSize: 10, loadMsg: '正在加载,请稍等...', emptyMsg: '暂无记录', onLoadSuccess: function (data) { $(this).datagrid('clearSelections'); $(this).datagrid('clearChecked'); }, onLoadError: function () { $(this).datagrid('clearSelections'); $(this).datagrid('clearChecked'); }, loadFilter: function (data) { return data ? data : []; }, /** * 单独 select * @param row */ onBeforeSelect: function (index, row) { $(this).datagrid('clearSelections'); }, }); $.extend($.fn.datagrid.methods, { // 创建一个 datagrid 实例 create: function (jq, options) { // 初始 selector options.selector = expressui.util.initSelector(jq); // 追加工具栏 expressui.grid.appendToolbar(options); return $(options.selector).datagrid(options); }, // 获取必须一个勾选项,否则弹出警告信息 getCheckedOneOrShowAlert: function (jq, alertMessage) { var selector = expressui.util.initSelector(jq); var checked = expressui.grid.getCheckedHasMessage({type: 'datagrid', selector: selector}); var options = {alertMessage: '请勾选要操作项'}; if (typeof alertMessage === 'string') { options.alertMessage = alertMessage; } if (typeof alertMessage === 'object') { options = alertMessage; } if (checked) { if (checked.length === 1) { return checked[0]; } else { if (checked.length <= 0) { $.messager.alert('信息', options.alertMessage, 'warning'); } else { $.messager.alert('信息', '最多只能勾选一项操作', 'warning'); } } } }, // 获取至少勾选一项,否则弹出警告信息 getCheckedLessOneOrShowAlert: function (jq) { var selector = expressui.util.initSelector(jq); var selections = expressui.grid.getCheckedHasMessage({type: 'datagrid', selector: selector}); if (selections) { if (selections.length <= 0) { $.messager.alert('信息', '请勾选要操作项', 'warning'); } else { return selections; } } }, // 勾选一项或不勾选项都不弹出警告信息,否则弹出警告信息 getCheckedOneNoCheckedOrShowAlert: function (jq) { var selector = expressui.util.initSelector(jq); var selections = expressui.grid.getChecked({type: 'datagrid', selector: selector}); if (selections) { if (selections.length > 1) { $.messager.alert('信息', '最多只能勾选一项操作', 'warning'); return false; } else { if (selections.length === 1) { return selections[0]; } else { return true; } } } else { return true; } }, // 获取勾选的一项 getCheckedOne: function (jq) { var selector = expressui.util.initSelector(jq); var selections = expressui.grid.getChecked({type: 'datagrid', selector: selector}); if (selections) { return selections[0]; } }, // // 删除多项 // ajax: function (jq, url) { // $.messager.progress({title:'请稍等', msg:'正在操作...'}); // var selector = expressui.util.initSelector(jq); // var selections = expressui.grid.getChecked({type: 'datagrid', selector: selector}); // if (!selections || selections.length <= 0) { // $.messager.progress('close'); // $.messager.alert('信息', '请勾选要操作项', 'warning'); // return; // } // // var options = {url: '', method:'post', paramName: $(selector).datagrid('options').idField, paramData: [], confirmMessage: '确定要操作勾选项吗'}; // if (typeof url === 'string') { // options.url = url; // } // if (typeof url === 'object') { // $.extend(options, url); // } // // var data = {}; // for (var i = 0; i < selections.length; i++) { // var idField = $(selector).datagrid('options').idField; // options.paramData.push(selections[i][idField]); // } // data[options.paramName] = options.paramData; // // try { // $.messager.confirm('信息', options.confirmMessage, function (ok) { // if(ok) { // expressui.ajax({ // url: options.url, // type: options.method, // data: options.data || data, // success: function (data) { // // if (typeof options.success === 'function') { // options.success(data); // } else { // if(typeof options.reload === 'object') { // expressui.grid.reload(options.reload); // } // } // // if (typeof options.success === 'string') { // $.messager.show({title:'信息', msg:options.success}); // if(typeof options.reload === 'object') { // expressui.grid.reload(options.reload); // } // } // // $(selector).datagrid('clearSelections'); // $(selector).datagrid('clearChecked'); // // }, // error: function (XMLHttpRequest, textStatus, errorThrown) { // // if (typeof options.error === 'function') { // options.error(XMLHttpRequest, textStatus, errorThrown); // } // // if (typeof options.error === 'string') { // $.messager.show({title:'信息', msg:options.error}); // } // // if(!options.error) { // $.messager.show({title:'信息', msg:XMLHttpRequest.responseJSON.message}); // } // // $.messager.progress('close'); // } // }); // } // }); // // } catch (e) { // $.messager.show({title: '信息', msg: '发生错误,操作失败'}); // } finally { // $.messager.progress('close'); // } // }, // 删除多项 deleteChecked: function (jq, url) { $.messager.progress({title: '请稍等', msg: '正在操作...'}); var selector = expressui.util.initSelector(jq); var selections = expressui.grid.getChecked({type: 'datagrid', selector: selector}); if (!selections || selections.length <= 0) { $.messager.progress('close'); $.messager.alert('信息', '请勾选要操作项', 'warning'); return; } var options = { url: '', method: 'post', paramName: $(selector).datagrid('options').idField, paramData: [], confirmMessage: '确定要删除勾选项吗' }; if (typeof url === 'string') { options.url = url; } if (typeof url === 'object') { $.extend(options, url); } var data = {}; for (var i = 0; i < selections.length; i++) { var idField = $(selector).datagrid('options').idField; options.paramData.push(selections[i][idField]); } data[options.paramName] = options.paramData; try { $.messager.confirm('信息', options.confirmMessage, function (ok) { if (ok) { expressui.ajax({ url: options.url, type: options.method, data: options.data || data, success: function (data) { if (typeof options.success === 'function') { options.success(data); } if (typeof options.success === 'string') { $.messager.show({title: '信息', msg: options.success}); if (typeof options.reload === 'object') { expressui.grid.reload(options.reload); } } else { if (typeof options.reload === 'object') { expressui.grid.reload(options.reload); } } $(selector).datagrid('clearSelections'); $(selector).datagrid('clearChecked'); }, error: function (XMLHttpRequest, textStatus, errorThrown) { if (typeof options.error === 'function') { options.error(XMLHttpRequest, textStatus, errorThrown); } if (typeof options.error === 'string') { $.messager.show({title: '信息', msg: options.error}); } if (!options.error) { $.messager.show({title: '信息', msg: XMLHttpRequest.responseJSON.message}); } $.messager.progress('close'); } }); } }); } catch (e) { $.messager.show({title: '信息', msg: '发生错误,操作失败'}); } finally { $.messager.progress('close'); } }, // post 不管多少项 post: function (jq, url) { $.messager.progress({title: '请稍等', msg: '正在操作...'}); var selector = expressui.util.initSelector(jq); var selections = expressui.grid.getChecked({type: 'datagrid', selector: selector}); // if (!selections || selections.length <= 0) { // $.messager.progress('close'); // $.messager.alert('信息', '请勾选要操作项', 'warning'); // return; // } var options = { url: '', method: 'post', paramName: $(selector).datagrid('options').idField, paramData: [], confirmMessage: '确定要操作吗' }; if (typeof url === 'string') { options.url = url; } if (typeof url === 'object') { $.extend(options, url); } var data = {}; for (var i = 0; i < selections.length; i++) { var idField = $(selector).datagrid('options').idField; options.paramData.push(selections[i][idField]); } data[options.paramName] = options.paramData; try { $.messager.confirm('信息', options.confirmMessage, function (ok) { if (ok) { expressui.ajax({ url: options.url, type: options.method, data: options.data || data, success: function (data) { if (typeof options.success === 'function') { options.success(data); } if (typeof options.success === 'string') { $.messager.show({title: '信息', msg: options.success}); if (typeof options.reload === 'object') { expressui.grid.reload(options.reload); } } else { if (typeof options.reload === 'object') { expressui.grid.reload(options.reload); } } $(selector).datagrid('clearSelections'); $(selector).datagrid('clearChecked'); }, error: function (XMLHttpRequest, textStatus, errorThrown) { if (typeof options.error === 'function') { options.error(XMLHttpRequest, textStatus, errorThrown); } if (typeof options.error === 'string') { $.messager.show({title: '信息', msg: options.error}); } if (!options.error) { $.messager.show({title: '信息', msg: XMLHttpRequest.responseJSON.message}); } $.messager.progress('close'); } }); } }); } catch (e) { $.messager.show({title: '信息', msg: '发生错误,操作失败'}); } finally { $.messager.progress('close'); } }, // post 必须勾选一项或一项以上,否则弹出警告 postCheckedLessOneOrShowAlert: function (jq, url) { $.messager.progress({title: '请稍等', msg: '正在操作...'}); var selector = expressui.util.initSelector(jq); var selections = expressui.grid.getChecked({type: 'datagrid', selector: selector}); if (!selections || selections.length <= 0) { $.messager.progress('close'); $.messager.alert('信息', '请勾选要操作项', 'warning'); return; } var options = { url: '', method: 'post', paramName: $(selector).datagrid('options').idField, paramData: [], confirmMessage: '确定要操作勾选项吗' }; if (typeof url === 'string') { options.url = url; } if (typeof url === 'object') { $.extend(options, url); } var data = {}; for (var i = 0; i < selections.length; i++) { var idField = $(selector).datagrid('options').idField; options.paramData.push(selections[i][idField]); } data[options.paramName] = options.paramData; try { $.messager.confirm('信息', options.confirmMessage, function (ok) { if (ok) { expressui.ajax({ url: options.url, type: options.method, data: options.data || data, success: function (data) { if (typeof options.success === 'function') { options.success(data); } if (typeof options.success === 'string') { $.messager.show({title: '信息', msg: options.success}); if (typeof options.reload === 'object') { expressui.grid.reload(options.reload); } } else { if (typeof options.reload === 'object') { expressui.grid.reload(options.reload); } } $(selector).datagrid('clearSelections'); $(selector).datagrid('clearChecked'); }, error: function (XMLHttpRequest, textStatus, errorThrown) { if (typeof options.error === 'function') { options.error(XMLHttpRequest, textStatus, errorThrown); } if (typeof options.error === 'string') { $.messager.show({title: '信息', msg: options.error}); } if (!options.error) { $.messager.show({title: '信息', msg: XMLHttpRequest.responseJSON.message}); } $.messager.progress('close'); } }); } }); } catch (e) { $.messager.show({title: '信息', msg: '发生错误,操作失败'}); } finally { $.messager.progress('close'); } }, // post 必须只勾选一项,否则弹出警告 postCheckedMustOneOrShowAlert: function (jq, url) { $.messager.progress({title: '请稍等', msg: '正在操作...'}); var selector = expressui.util.initSelector(jq); var selections = expressui.grid.getChecked({type: 'datagrid', selector: selector}); if (!selections || selections.length <= 0) { $.messager.progress('close'); $.messager.alert('信息', '请勾选要操作项', 'warning'); return; } if (!selections || selections.length > 1) { $.messager.progress('close'); $.messager.alert('信息', '最多只允许勾选一项操作', 'warning'); return; } var options = {url: '', method: 'post', paramName: $(selector).datagrid('options').idField, paramData: []}; if (typeof url === 'string') { options.url = url; } if (typeof url === 'object') { $.extend(options, url); } var data = {}; var idField = $(selector).datagrid('options').idField; var paramName = options.paramName; data[paramName] = selections[0][idField]; try { $.messager.confirm('信息', '确定要操作勾选项吗?', function (ok) { if (ok) { expressui.ajax({ url: options.url, type: options.method, data: options.data || data, success: function (data) { if (typeof options.success === 'function') { options.success(data); } else { if (typeof options.reload === 'object') { expressui.grid.reload(options.reload); } } if (typeof options.success === 'string') { $.messager.show({title: '信息', msg: options.success}); if (typeof options.reload === 'object') { expressui.grid.reload(options.reload); } } $(selector).datagrid('clearSelections'); $(selector).datagrid('clearChecked'); }, error: function (XMLHttpRequest, textStatus, errorThrown) { if (typeof options.error === 'function') { options.error(XMLHttpRequest, textStatus, errorThrown); } if (typeof options.error === 'string') { $.messager.show({title: '信息', msg: options.error}); } if (!options.error) { $.messager.show({title: '信息', msg: XMLHttpRequest.responseJSON.message}); } $.messager.progress('close'); } }); } $.messager.progress('close'); }); } catch (e) { $.messager.show({title: '请稍等', msg: '发生错误,操作失败'}); } finally { $.messager.progress('close'); } } }); $.extend($.fn.treegrid.defaults, { idField: 'id', treeField: 'name', fit: true, fitColumns: true, autoRowHeight: true, onlyLeafCheck: true, selectOnCheck: false, // 单独 select checkOnSelect: true, // 单独 select checkbox: false, pagination: false, scrollbarSize: 0, method: 'get', pageNumber: 1, pageList: [10, 20, 50, 100], pageSize: 10, loadMsg: '正在加载,请稍等...', emptyMsg: '暂无记录', queryParams: {}, onLoadSuccess: function (data) { $(this).treegrid('options').url = $(this).treegrid('options')._url; $(this).treegrid('clearSelections'); $(this).treegrid('clearChecked'); }, onLoadError: function () { $(this).treegrid('clearSelections'); $(this).treegrid('clearChecked'); }, onBeforeExpand: function (row) { var options = $(this).treegrid('options'); if (options.expandUrl) { options.url = expressui.replaceUrlPlaceholder(options.expandUrl, row); } return true; }, // 单独 select onBeforeSelect: function (row) { $(this).treegrid('clearSelections'); } }); $.extend($.fn.treegrid.methods, { // 创建一个 treegrid 实例 create: function (jq, options) { // 初始 selector options.selector = expressui.util.initSelector(jq); // 追加工具栏 expressui.grid.appendToolbar(options); if (options.url) { options._url = options.url; } return $(options.selector).treegrid(options); }, // 获取至少勾选一项,否则弹出警告信息 getCheckedLessOneOrShowAlert: function (jq) { var selector = expressui.util.initSelector(jq); var selections = expressui.grid.getCheckedHasMessage({type: 'treegrid', selector: selector}); if (selections) { if (selections.length <= 0) { $.messager.alert('信息', '请勾选要操作项', 'warning'); } else { return selections; } } }, // // 不勾选项或勾选一项都不弹出警告信息,否则弹出警告信息 // getSelectOneOrMoreShowAlert: function (jq) { // var selector = expressui.util.initSelector(jq); // var selections = expressui.grid.getSelections({type: 'treegrid', selector: selector}); // if(selections){ // if(selections.length >1 ){ // $.messager.alert('信息', '最多只能勾选一项操作', 'warning'); // return false; // } else{ // if(selections.length === 1){ // return selections[0]; // } else { // return true; // } // } // } else{ // return true; // } // }, // // // 获取勾选的一项 // getSelectOne: function (jq) { // var selector = expressui.util.initSelector(jq); // var selections = expressui.grid.getChecked({type: 'treegrid', selector: selector}); // if(selections){ // return selections[0]; // } // }, ajax: function (jq, url) { $.messager.progress({title: '请稍等', msg: '正在操作...'}); var selector = expressui.util.initSelector(jq); var selections = expressui.grid.getChecked({type: 'treegrid', selector: selector}); if (!selections || selections.length <= 0) { $.messager.progress('close'); $.messager.alert('信息', '请勾选要操作项', 'warning'); return; } var options = { url: '', method: 'post', paramName: $(selector).treegrid('options').idField, paramData: [], confirmMessage: '确定要操作勾选项吗?' }; if (typeof url === 'string') { options.url = url; } if (typeof url === 'object') { $.extend(options, url); } var data = {}; for (var i = 0; i < selections.length; i++) { var idField = $(selector).treegrid('options').idField; options.paramData.push(selections[i][idField]); } data[options.paramName] = options.paramData; try { $.messager.confirm('信息', options.confirmMessage, function (ok) { if (ok) { expressui.ajax({ url: options.url, type: options.method, data: options.data || data, success: function (data) { if (typeof options.success === 'function') { options.success(data); } else { if (typeof options.reload === 'object') { expressui.grid.reload(options.reload); } } if (typeof options.success === 'string') { $.messager.show({title: '信息', msg: options.success}); if (typeof options.reload === 'object') { expressui.grid.reload(options.reload); } } $(selector).treegrid('clearSelections'); $(selector).treegrid('clearChecked'); }, error: function (XMLHttpRequest, textStatus, errorThrown) { if (typeof options.error === 'function') { options.error(XMLHttpRequest, textStatus, errorThrown); } if (typeof options.error === 'string') { $.messager.show({title: '信息', msg: options.error}); } if (!options.error) { $.messager.show({title: '信息', msg: XMLHttpRequest.responseJSON.message}); } $.messager.progress('close'); } }); } }); } catch (e) { $.messager.show({title: '请稍等', msg: '发生错误,操作失败'}); } finally { $.messager.progress('close'); } }, // 删除多项 deleteChecked: function (jq, url) { $.messager.progress({title: '请稍等', msg: '正在操作...'}); var selector = expressui.util.initSelector(jq); var selections = expressui.grid.getChecked({type: 'treegrid', selector: selector}); if (!selections || selections.length <= 0) { $.messager.progress('close'); $.messager.alert('信息', '请勾选要操作项', 'warning'); return; } var options = { url: '', method: 'post', paramName: $(selector).treegrid('options').idField, paramData: [], confirmMessage: '确定要删除勾选项吗?' }; if (typeof url === 'string') { options.url = url; } if (typeof url === 'object') { $.extend(options, url); } var data = {}; for (var i = 0; i < selections.length; i++) { var idField = $(selector).treegrid('options').idField; options.paramData.push(selections[i][idField]); } data[options.paramName] = options.paramData; try { $.messager.confirm('信息', options.confirmMessage, function (ok) { if (ok) { expressui.ajax({ url: options.url, type: options.method, data: options.data || data, success: function (data) { if (typeof options.success === 'function') { options.success(data); } // 此处会出现多次 reload 的代码,已经注释并移动到下方 string 判断的 reload // } else { // if(typeof options.reload === 'object') { // expressui.grid.reload(options.reload); // } // } if (typeof options.success === 'string') { $.messager.show({title: '信息', msg: options.success}); if (typeof options.reload === 'object') { expressui.grid.reload(options.reload); } } else { if (typeof options.reload === 'object') { expressui.grid.reload(options.reload); } } $(selector).treegrid('clearSelections'); $(selector).treegrid('clearChecked'); }, error: function (XMLHttpRequest, textStatus, errorThrown) { if (typeof options.error === 'function') { options.error(XMLHttpRequest, textStatus, errorThrown); } if (typeof options.error === 'string') { $.messager.show({title: '信息', msg: options.error}); } if (!options.error) { $.messager.show({title: '信息', msg: XMLHttpRequest.responseJSON.message}); } $.messager.progress('close'); } }); } }); } catch (e) { $.messager.show({title: '请稍等', msg: '发生错误,操作失败'}); } finally { $.messager.progress('close'); } }, // 删除一项 deleteCheckedOne: function (jq, url) { $.messager.progress({title: '请稍等', msg: '正在操作...'}); var selector = expressui.util.initSelector(jq); var selections = expressui.grid.getChecked({type: 'treegrid', selector: selector}); if (!selections || selections.length <= 0) { $.messager.progress('close'); $.messager.alert('信息', '请勾选要操作项', 'warning'); return; } if (!selections || selections.length > 1) { $.messager.progress('close'); $.messager.alert('信息', '最多只允许勾选一项操作', 'warning'); return; } var options = {url: '', method: 'post', paramName: $(selector).treegrid('options').idField, paramData: []}; if (typeof url === 'string') { options.url = url; } if (typeof url === 'object') { $.extend(options, url); } var data = {}; var idField = $(selector).treegrid('options').idField; var paramName = options.paramName; data[paramName] = selections[0][idField]; try { $.messager.confirm('信息', '确定要删除勾选项吗?', function (ok) { if (ok) { expressui.ajax({ url: options.url, type: options.method, data: options.data || data, success: function (data) { if (typeof options.success === 'function') { options.success(data); } else { if (typeof options.reload === 'object') { expressui.grid.reload(options.reload); } } if (typeof options.success === 'string') { $.messager.show({title: '信息', msg: options.success}); if (typeof options.reload === 'object') { expressui.grid.reload(options.reload); } } $(selector).treegrid('clearSelections'); $(selector).treegrid('clearChecked'); }, error: function (XMLHttpRequest, textStatus, errorThrown) { if (typeof options.error === 'function') { options.error(XMLHttpRequest, textStatus, errorThrown); } if (typeof options.error === 'string') { $.messager.show({title: '信息', msg: options.error}); } if (!options.error) { $.messager.show({title: '信息', msg: XMLHttpRequest.responseJSON.message}); } $.messager.progress('close'); } }); } $.messager.progress('close'); }); } catch (e) { $.messager.show({title: '信息', msg: '发生错误,操作失败'}); } finally { $.messager.progress('close'); } } }); $.extend($.fn.combobox.defaults, { valueField: 'id', textField: 'text', method: 'get', editable: false, panelHeight: '180px', // onBeforeLoad: function(param){ // if(param && param.q) { // var value = param.q.replace('/ /g',''); // if(value!=='') { // return true; // } // } // return false; // } }); $.extend($.fn.combotree.defaults, { panelHeight: '180px', method: 'get', }); $.extend($.fn.form.methods, { submit: function (jq, selector) { selector.selector = jq.selector; return expressui.form.submit(selector); } }); ================================================ FILE: src/main/resources/static/assets/vendor/easyui-plus-1.0.0/themes/angular.css ================================================ *{ box-sizing: border-box; } .f-block{ display: block; position: relative; } .f-row{ display: -webkit-box; display: -webkit-flex; display: -moz-flex; display: -ms-flexbox; display: flex; position: relative; } .f-column{ display: -webkit-box; display: -webkit-flex; display: -moz-flex; display: -ms-flexbox; display: flex; -webkit-box-direction: normal; -webkit-box-orient: vertical; -webkit-flex-direction: column; -moz-flex-direction: column; -ms-flex-direction: column; flex-direction: column; position: relative; } .f-inline-row{ white-space: nowrap; display: -webkit-inline-box; display: -ms-inline-box; display: inline-flex; vertical-align: middle; position: relative; align-items: stretch; -webkit-tap-highlight-color: transparent; } .f-content-center{ -webkit-box-pack: center; -ms-flex-pack: center; -webkit-justify-content: center; -moz-justify-content: center; justify-content: center; -webkit-box-align: center; -ms-flex-align: center; -webkit-align-items: center; -moz-align-items: center; align-items: center; } .f-full{ -webkit-box-flex: 1 1 auto; -ms-flex: 1 1 auto; flex: 1 1 auto; } .f-hide{ display: none; } .f-order0{ order: 0; } .f-order1{ order: 1; } .f-order2{ order: 2; } .f-order3{ order: 3; } .f-order4{ order: 4; } .f-order5{ order: 5; } .f-order6{ order: 6; } .f-order7{ order: 7; } .f-order8{ order: 8; } .f-noshrink{ -webkit-flex-shrink: 0; -moz-flex-shrink: 0; -ms-flex-negative: 0; flex-shrink: 0; } .f-animate{ transition: all .3s; } .scroll-body{ overflow: auto; position: relative; } .textbox .textbox-text{ width: 100%; height: auto; overflow: hidden; } .textbox-addon{ align-items: center; } .textbox-disabled>.textbox-addon .textbox-icon, .textbox-readonly>.textbox-addon .textbox-icon{ cursor: default; } .textbox-disabled>.textbox-addon .textbox-icon:hover, .textbox-readonly>.textbox-addon .textbox-icon:hover{ opacity: 0.6; cursor: default; } .textbox-addon .textbox-icon{ width: 26px; height: 18px; } .spinner .textbox-text{ height: auto; } .spinner-button-left,.spinner-button-right{ width: 26px; } .spinner-button-updown{ width: 26px; } .spinner-button-top,.spinner-button-bottom{ position: absolute; width: 100%; height: 26px; } .spinner-button-top{ top: 0; } .spinner-button-bottom{ top: auto; bottom: 0; } .spinner-button{ display: inline-block; position: absolute; width: 16px; height: 16px; left: 50%; margin-left: -8px; top: 50%; margin-top: -8px; } .spinner-arrow{ cursor: pointer; opacity: 0.6; } .textbox-disabled .spinner-arrow:hover, .textbox-readonly .spinner-arrow:hover { opacity: 0.6; cursor: default; } .textbox-readonly .spinner-arrow .spinner-arrow-up:hover, .textbox-disabled .spinner-arrow .spinner-arrow-up:hover, .textbox-readonly .spinner-arrow .spinner-arrow-down:hover, .textbox-disabled .spinner-arrow .spinner-arrow-down:hover { cursor: default; } .l-btn{ width: 100%; } .l-btn-empty{ height: 28px; } .l-btn-large .l-btn-empty{ height: 44px; } .l-btn-left{ overflow: visible; } .m-btn .l-btn-left .m-btn-line{ top: -100px; width: 36px; right: -20px; } eui-button-group eui-linkbutton.f-inline-row{ margin-left: -1px; } eui-button-group .l-btn:hover{ z-index: 99; } eui-button-group eui-linkbutton:not(:first-child):not(:last-child) .l-btn{ border-radius: 0; } eui-button-group eui-linkbutton:first-child .l-btn{ border-top-right-radius: 0; border-bottom-right-radius: 0; } eui-button-group eui-linkbutton:last-child .l-btn{ border-top-left-radius: 0; border-bottom-left-radius: 0; } .switchbutton-on,.switchbutton-off{ position: absolute; left: 0; width: calc(100% - 15px); height: 100%; } .switchbutton-on span,.switchbutton-off span,.switchbutton-handle span{ height: 100%; } .switchbutton-on span{ text-indent: -15px; } .switchbutton-off span{ text-indent: 15px; } .switchbutton-off{ left: calc(100% - 15px); } .switchbutton-handle{ width: 30px; left: auto; right: 0; z-index: 9; } .switchbutton-inner{ transition: all 200ms ease-out; overflow: visible; position: absolute; width: 100%; top: -1px; bottom: -1px; left: calc(-100% + 30px); right: auto; } .switchbutton-checked .switchbutton-inner{ left: 0; } .draggable-reverting{ transition: all 200ms ease-out; } .slider-h .slider-tip{ transform: translateX(-50%); } .slider-h .slider-rulelabel span{ transform: translateX(-50%); } .slider-v .slider-tip{ margin-top: 0; transform: translate(-100%,-50%); } .slider-v .slider-rulelabel span{ transform: translateY(-50%); } .slider-v .slider-inner{ height: auto; } .panel{ position:relative; } .panel-title{ height: 20px; line-height: 20px; } .panel-footer-fixed{ position:absolute; width:100%; bottom:0; } .window{ position: absolute; } .window-mask{ position: fixed; } .window .window-footer{ top: 0; } .dialog-toolbar{ border-width: 0 0 1px 0; } .dialog-button{ border-width: 1px 0 0 0; top: 0; } .tabs{ width: 100%; height: auto; } .tabs-scrollable{ transition: left 400ms, right 400ms; position: absolute; width: auto; height: 100%; left: 0; top: 0; } .tabs li{ display: inherit; } .tabs li a.tabs-inner{ height: auto; line-height: normal; display: inherit; overflow: hidden; } .tabs-title{ display: inherit; align-items: center; line-height: normal; } .tabs-close{ outline: none; } .tabs-scroller-left,.tabs-scroller-right{ position: relative; display: block; width: 21px; height: 100%; } .tabs-header-left .tabs li{ right: -1px; } .tabs-header-left .tabs li,.tabs-header-right .tabs li, .tabs-header-left .tabs li a.tabs-inner, .tabs-header-right .tabs li a.tabs-inner{ display: inherit; } .combo-panel{ position: absolute; height: 200px; z-index: 9999; } .combo-panel eui-virtual-scroll, .combo-panel eui-datagrid, .combo-panel eui-treegrid{ width: 100%; height: 100%; } .combobox-item{ padding: 6px 4px; line-height: 20px; } .tagbox-labels{ padding-bottom: 4px; } .tagbox-label{ height: 20px; line-height: 20px; } .tagbox .textbox-text{ width: 50px; max-width: 100%; margin-top: 4px; padding-top: 0; padding-bottom: 0; height: 20px; line-height: 20px; } .datagrid,eui-datagrid, eui-datagrid-view,eui-datagrid-body, eui-treegrid-view,eui-treegrid-body{ overflow: hidden; } .datagrid-view,.datagrid-view1,.datagrid-view2{ position: relative; } .datagrid-vbody{ overflow: hidden; } .datagrid-view3{ margin-left: -1px; } .datagrid-view3 .datagrid-body{ overflow: hidden; } .datagrid-view3 .datagrid-body-inner{ padding-bottom: 20px; } .datagrid-view3 .datagrid-header td, .datagrid-view3 .datagrid-body td, .datagrid-view3 .datagrid-footer td { border-width: 0 0 1px 1px; } .datagrid-htable,.datagrid-btable,.datagrid-ftable{ table-layout: fixed; width: 100%; } .datagrid-htable{ height: 100%; } .datagrid-header .datagrid-header, .datagrid-footer .datagrid-header{ border-width: 0 0 0 1px; } .datagrid-header-inner,.datagrid-footer-inner{ overflow: hidden; } .datagrid-header-row, .datagrid-row{ height: 32px; } .datagrid-cell{ text-align: left; height: auto; font-size: inherit; } .datagrid-cell-group{ text-align: center; } .datagrid .datagrid-pager{ padding: 2px 4px; display: inherit; } .datagrid-loading{ position: absolute; left: 0; top: 0; width: 100%; height: 100%; justify-content: center; align-items: center; } .datagrid-mask{ display: block; } .datagrid-mask-msg{ display: block; position: static; line-height: 36px; height: 40px; margin: 0; padding: 0 5px 0 30px; z-index: 9; } .datagrid-body .datagrid-td-group{ border-left-color: transparent; border-right-color: transparent; } .datagrid-group-expander{ cursor: pointer; } .datagrid-row-expander{ display: inline-block; width: 16px; height: 18px; cursor: pointer; } .datagrid-group-title{ align-self: center; padding: 0 4px; white-space: nowrap; word-break: normal; position: relative; } .datagrid-editable> .f-field, .datagrid-editable> *{ width: 100%; height: 31px; } .datagrid-editable .textbox, .datagrid-editable .textbox-text{ border-radius: 0; } .datagrid-filter-row .textbox{ border-radius: 0; } .datagrid-filter-c{ padding: 4px; height: 38px; } .datagrid-filter-c> .f-field, .datagrid-filter-c> *{ height: 30px; } .datagrid-filter-c .datagrid-editable-input{ width: 100%; } .datagrid-filter-btn{ width: 30px; } .datagrid-filter-btn .textbox-icon{ width: 28px; } .datagrid-filter-btn .textbox{ background-color: transparent; } .datagrid-filter-btn-left{ margin-right: 4px; } .datagrid-filter-btn-right{ margin-left: 4px; } eui-menu.menu-inline{ position: relative; display: inline; margin: 0; padding: 0; } eui-menu> .menu-container{ position: relative; } .menu-container{ position: absolute; left: 0; top: 0; min-width: 200px; } .menu{ overflow: visible; } .menu-shadow{ width: 100%; height: 100%; left: 0; top: 0; } .menu-item{ overflow: visible; } .menu-text{ height: 32px; line-height: 32px; float: none; } .menu-line{ z-index: 9999999; height: 100%; } .menu-active{ z-index: 99999999; } .progressbar-value{ overflow: visible; } .searchbox .textbox-button, .searchbox .textbox-button:hover{ position: inherit; } .calendar-content{ position: absolute; width: 100%; height: 100%; left: 0; top: 0; } .calendar-menu{ position: absolute; width: 100%; height: 100%; } .calendar-menu-month-inner{ position: relative; } .f-field{ width: 12em; height: 30px; } eui-tagbox{ width: 12em; height: auto; min-height: 30px; } eui-switchbutton{ width: 70px; height: 30px; } eui-radiobutton{ width: 20px; height: 20px; } eui-checkbox{ width: 20px; height: 20px; } eui-progressbar{ height: 24px; } eui-pagination{ height: 34px; padding: 2px; } eui-layout{ display: block; } .layout{ height: 100%; } .layout-animate{ transition: transform 400ms; } .layout-panel-north,.layout-panel-south{ position: absolute; width: 100%; left: 0; top: 0; } .layout-panel-south{ top: auto; bottom: 0; } .layout-panel-west,.layout-panel-east{ position: absolute; left: 0; top: 0; bottom: 0; } .layout-panel-east{ left: auto; right: 0; } .layout-panel-west.layout-collapsed{ transform: translate3d(-100%, 0, 0); } .layout-panel-east.layout-collapsed{ transform: translate3d(100%, 0, 0) } .layout-panel-north.layout-collapsed{ transform: translate3d(0, -100%, 0) } .layout-panel-south.layout-collapsed{ transform: translate3d(0, 100%, 0) } ================================================ FILE: src/main/resources/static/assets/vendor/easyui-plus-1.0.0/themes/blue/easyui.css ================================================ .f-row { display: -webkit-box; display: -webkit-flex; display: -moz-flex; display: -ms-flexbox; display: flex; position: relative; } .f-column { display: -webkit-box; display: -webkit-flex; display: -moz-flex; display: -ms-flexbox; display: flex; -webkit-box-direction: normal; -webkit-box-orient: vertical; -webkit-flex-direction: column; -moz-flex-direction: column; -ms-flex-direction: column; flex-direction: column; position: relative; } .f-full { -webkit-box-flex: 1 1 auto; -ms-flex: 1 1 auto; flex: 1 1 auto; } .f-noshrink { -webkit-flex-shrink: 0; -moz-flex-shrink: 0; -ms-flex-negative: 0; flex-shrink: 0; } .f-content-center { -webkit-box-pack: center; -ms-flex-pack: center; -webkit-justify-content: center; -moz-justify-content: center; justify-content: center; -webkit-box-align: center; -ms-flex-align: center; -webkit-align-items: center; -moz-align-items: center; align-items: center; } .f-vcenter { -webkit-box-align: center; -ms-flex-align: center; -webkit-align-items: center; -moz-align-items: center; align-items: center; } * { -moz-box-sizing: border-box; -webkit-box-sizing: border-box; -o-box-sizing: border-box; -ms-box-sizing: border-box; box-sizing: border-box; } .panel { overflow: hidden; text-align: left; margin: 0; border: 0; -moz-border-radius: 0 0 0 0; -webkit-border-radius: 0 0 0 0; border-radius: 0 0 0 0; } .panel-header, .panel-body { border-width: 1px; border-style: solid; } .panel-header { padding: 5px; position: relative; } .panel-title { background: url('images/blank.gif') no-repeat; } .panel-header-noborder { border-width: 0 0 1px 0; } .panel-body { overflow: auto; border-top-width: 0; padding: 0; } .panel-body-noheader { border-top-width: 1px; } .panel-body-noborder { border-width: 0px; } .panel-body-nobottom { border-bottom-width: 0; } .panel-with-icon { padding-left: 18px; } .panel-icon, .panel-tool { position: absolute; top: 50%; margin-top: -8px; height: 16px; overflow: hidden; } .panel-icon { left: 5px; width: 16px; } .panel-tool { right: 5px; width: auto; } .panel-tool a { display: inline-block; width: 16px; height: 16px; opacity: 0.6; filter: alpha(opacity=60); margin: 0 0 0 2px; vertical-align: top; } .panel-tool a:hover { opacity: 1; filter: alpha(opacity=100); background-color: #e2e2e2; -moz-border-radius: 3px 3px 3px 3px; -webkit-border-radius: 3px 3px 3px 3px; border-radius: 3px 3px 3px 3px; } .panel-loading { padding: 11px 0px 10px 30px; } .panel-noscroll { overflow: hidden; } .panel-fit, .panel-fit body { height: 100%; margin: 0; padding: 0; border: 0; overflow: hidden; } .panel-loading { /*background: url('images/loading.gif') no-repeat 10px 10px;*/ background: none;font-family: "iconfont" !important;font-size: 16px;font-style: normal;-webkit-font-smoothing: antialiased;-moz-osx-font-smoothing: grayscale;text-decoration: none; padding: 0; color: #444444; } .panel-loading :before { content: "\eb00"; } .panel-tool-close { /*background: url('images/panel_tools.png') no-repeat -16px 0px;*/ background: none;font-family: "iconfont" !important;font-size: 14px;font-style: normal;-webkit-font-smoothing: antialiased;-moz-osx-font-smoothing: grayscale;text-decoration: none; padding: 0; color: #444444; } .panel-tool-close:before { content: "\e6a2"; } .panel-tool-min { /*background: url('images/panel_tools.png') no-repeat 0px 0px;*/ background: none;font-family: "iconfont" !important;font-size: 16px;font-style: normal;-webkit-font-smoothing: antialiased;-moz-osx-font-smoothing: grayscale; text-decoration: none; padding: 0; color: #444444; } .panel-tool-min:before { content: "\ea5c"; } .panel-tool-max { /*background: url('images/panel_tools.png') no-repeat 0px -16px;*/ background: none;font-family: "iconfont" !important;font-size: 12px;font-style: normal;-webkit-font-smoothing: antialiased;-moz-osx-font-smoothing: grayscale;text-decoration: none; padding: 2px; color: #444444; } .panel-tool-max:before { content: "\e8fc"; } .panel-tool-restore { /*background: url('images/panel_tools.png') no-repeat -16px -16px;*/ background: none;font-family: "iconfont" !important;font-size: 12px;font-style: normal;-webkit-font-smoothing: antialiased;-moz-osx-font-smoothing: grayscale;text-decoration: none; line-height: 12px; color: #444444; } .panel-tool-restore:before { content: "\e8fe"; } .panel-tool-collapse { /*background: url('images/panel_tools.png') no-repeat -32px 0;*/ background: none;font-family: "iconfont" !important;font-size: 16px;font-style: normal;-webkit-font-smoothing: antialiased;-moz-osx-font-smoothing: grayscale; text-decoration: none; line-height: 23px; color: #444444; } .panel-tool-collapse:before { content: "\e863"; } .panel-tool-expand { /*background: url('images/panel_tools.png') no-repeat -32px -16px;*/ background: none;font-family: "iconfont" !important;font-size: 16px;font-style: normal;-webkit-font-smoothing: antialiased;-moz-osx-font-smoothing: grayscale;text-decoration: none; line-height: 10px; color: #444444; } .panel-tool-expand:before { content: "\e85e"; } .panel-header, .panel-body { border-color: #D3D3D3; } .panel-header { background-color: #f3f3f3; background: #f3f3f3; background-repeat: repeat-x; filter: none; color: #575765; } .panel-body { background-color: #ffffff; color: #000000; font-size: 12px; } .panel-title { font-size: 12px; font-weight: bold; color: #575765; height: 20px; line-height: 20px; } .panel-footer { border: 1px solid #D3D3D3; overflow: hidden; background: #fafafa; color: #000000; } .panel-footer-noborder { border-width: 1px 0 0 0; } .panel-hleft, .panel-hright { position: relative; } .panel-hleft>.panel-body, .panel-hright>.panel-body { position: absolute; } .panel-hleft>.panel-header { float: left; } .panel-hright>.panel-header { float: right; } .panel-hleft>.panel-body { border-top-width: 1px; border-left-width: 0; } .panel-hright>.panel-body { border-top-width: 1px; border-right-width: 0; } .panel-hleft>.panel-body-nobottom { border-bottom-width: 1px; border-right-width: 0; } .panel-hright>.panel-body-nobottom { border-bottom-width: 1px; border-left-width: 0; } .panel-hleft>.panel-footer { position: absolute; right: 0; } .panel-hright>.panel-footer { position: absolute; left: 0; } .panel-hleft>.panel-header-noborder { border-width: 0 1px 0 0; } .panel-hright>.panel-header-noborder { border-width: 0 0 0 1px; } .panel-hleft>.panel-body-noborder { border-width: 0; } .panel-hright>.panel-body-noborder { border-width: 0; } .panel-hleft>.panel-body-noheader { border-left-width: 1px; } .panel-hright>.panel-body-noheader { border-right-width: 1px; } .panel-hleft>.panel-footer-noborder { border-width: 0 0 0 1px; } .panel-hright>.panel-footer-noborder { border-width: 0 1px 0 0; } .panel-hleft>.panel-header .panel-icon, .panel-hright>.panel-header .panel-icon { margin-top: 0; top: 5px; left: 50%; margin-left: -8px; } .panel-hleft>.panel-header .panel-title, .panel-hright>.panel-header .panel-title { position: absolute; min-width: 16px; left: 25px; top: 5px; bottom: auto; white-space: nowrap; word-wrap: normal; -webkit-transform: rotate(90deg); -webkit-transform-origin: 0 0; -moz-transform: rotate(90deg); -moz-transform-origin: 0 0; -o-transform: rotate(90deg); -o-transform-origin: 0 0; transform: rotate(90deg); transform-origin: 0 0; } .panel-hleft>.panel-header .panel-title-up, .panel-hright>.panel-header .panel-title-up { position: absolute; min-width: 16px; left: 21px; top: auto; bottom: 0px; text-align: right; white-space: nowrap; word-wrap: normal; -webkit-transform: rotate(-90deg); -webkit-transform-origin: 0 0; -moz-transform: rotate(-90deg); -moz-transform-origin: 0 0; -o-transform: rotate(-90deg); -o-transform-origin: 0 0; transform: rotate(-90deg); transform-origin: 0 16px; } .panel-hleft>.panel-header .panel-with-icon.panel-title-up, .panel-hright>.panel-header .panel-with-icon.panel-title-up { padding-left: 0; padding-right: 18px; } .panel-hleft>.panel-header .panel-tool, .panel-hright>.panel-header .panel-tool { top: auto; bottom: 5px; width: 16px; height: auto; left: 50%; margin-left: -8px; margin-top: 0; } .panel-hleft>.panel-header .panel-tool a, .panel-hright>.panel-header .panel-tool a { margin: 2px 0 0 0; } .accordion { overflow: hidden; border-width: 1px; border-style: solid; } .accordion .accordion-header { border-width: 0 0 1px; cursor: pointer; } .accordion .accordion-body { border-width: 0 0 1px; } .accordion-noborder { border-width: 0; } .accordion-noborder .accordion-header { border-width: 0 0 1px; } .accordion-noborder .accordion-body { border-width: 0 0 1px; } .accordion-collapse { /*background: url('images/accordion_arrows.png') no-repeat 0 0;*/ background: none;font-family: "iconfont" !important;font-size: 16px;font-style: normal;-webkit-font-smoothing: antialiased;-moz-osx-font-smoothing: grayscale;text-decoration: none; padding: 0px; color: #444444; } .accordion-collapse:before { content: "\e699"; } .accordion-expand { /*background: url('images/accordion_arrows.png') no-repeat -16px 0;*/ background: none;font-family: "iconfont" !important;font-size: 16px;font-style: normal;-webkit-font-smoothing: antialiased;-moz-osx-font-smoothing: grayscale;text-decoration: none; padding: 0px; color: #444444; } .accordion-expand:before { content: "\e695"; } .accordion { background: #ffffff; border-color: #D3D3D3; } .accordion .accordion-header { background: #f3f3f3; filter: none; } .accordion .accordion-header-selected { background: #0092DC; } .accordion .accordion-header-selected .panel-title { color: #fff; } .accordion .panel-last > .accordion-header { border-bottom-color: #f3f3f3; } .accordion .panel-last > .accordion-body { border-bottom-color: #ffffff; } .accordion .panel-last > .accordion-header-selected, .accordion .panel-last > .accordion-header-border { border-bottom-color: #D3D3D3; } .accordion> .panel-hleft { float: left; } .accordion> .panel-hleft>.panel-header { border-width: 0 1px 0 0; } .accordion> .panel-hleft> .panel-body { border-width: 0 1px 0 0; } .accordion> .panel-hleft.panel-last > .accordion-header { border-right-color: #f3f3f3; } .accordion> .panel-hleft.panel-last > .accordion-body { border-right-color: #ffffff; } .accordion> .panel-hleft.panel-last > .accordion-header-selected, .accordion> .panel-hleft.panel-last > .accordion-header-border { border-right-color: #D3D3D3; } .accordion> .panel-hright { float: right; } .accordion> .panel-hright>.panel-header { border-width: 0 0 0 1px; } .accordion> .panel-hright> .panel-body { border-width: 0 0 0 1px; } .accordion> .panel-hright.panel-last > .accordion-header { border-left-color: #f3f3f3; } .accordion> .panel-hright.panel-last > .accordion-body { border-left-color: #ffffff; } .accordion> .panel-hright.panel-last > .accordion-header-selected, .accordion> .panel-hright.panel-last > .accordion-header-border { border-left-color: #D3D3D3; } .window { overflow: hidden; padding: 5px; border-width: 1px; border-style: solid; } .window .window-header { background: transparent; padding: 0px 0px 6px 0px; } .window .window-body { border-width: 1px; border-style: solid; border-top-width: 0px; } .window .window-body-noheader { border-top-width: 1px; } .window .panel-body-nobottom { border-bottom-width: 0; } .window .window-header .panel-icon, .window .window-header .panel-tool { top: 50%; margin-top: -11px; } .window .window-header .panel-icon { left: 1px; } .window .window-header .panel-tool { right: 1px; } .window .window-header .panel-with-icon { padding-left: 18px; } .window-proxy { position: absolute; overflow: hidden; } .window-proxy-mask { position: absolute; filter: alpha(opacity=5); opacity: 0.05; } .window-mask { position: absolute; left: 0; top: 0; width: 100%; height: 100%; filter: alpha(opacity=40); opacity: 0.40; font-size: 1px; overflow: hidden; } .window, .window-shadow { position: absolute; -moz-border-radius: 0; -webkit-border-radius: 0; border-radius: 0; } .window-shadow { background: #ccc; -moz-box-shadow: 2px 2px 3px #cccccc; -webkit-box-shadow: 2px 2px 3px #cccccc; box-shadow: 2px 2px 3px #cccccc; filter: none; } .window, .window .window-body { border-color: #D3D3D3; } .window { background-color: #f3f3f3; background: #f3f3f3; background-repeat: repeat-x; filter: none; } .window-proxy { border: 1px dashed #D3D3D3; } .window-proxy-mask, .window-mask { background: #ccc; } .window .panel-footer { border: 1px solid #D3D3D3; position: relative; top: -1px; } .window-thinborder { padding: 0; } .window-thinborder .window-header { padding: 5px 5px 6px 5px; } .window-thinborder .window-body { border-width: 0px; } .window-thinborder .window-footer { border-left: transparent; border-right: transparent; border-bottom: transparent; } .window-thinborder .window-header .panel-icon, .window-thinborder .window-header .panel-tool { margin-top: -9px; margin-left: 5px; margin-right: 5px; } .window-noborder { border: 0; } .window.panel-hleft .window-header { padding: 0 6px 0 0; } .window.panel-hright .window-header { padding: 0 0 0 6px; } .window.panel-hleft>.panel-header .panel-title { top: auto; left: 16px; } .window.panel-hright>.panel-header .panel-title { top: auto; right: 16px; } .window.panel-hleft>.panel-header .panel-title-up, .window.panel-hright>.panel-header .panel-title-up { bottom: 0; } .window.panel-hleft .window-body { border-width: 1px 1px 1px 0; } .window.panel-hright .window-body { border-width: 1px 0 1px 1px; } .window.panel-hleft .window-header .panel-icon { top: 1px; margin-top: 0; left: 0; } .window.panel-hright .window-header .panel-icon { top: 1px; margin-top: 0; left: auto; right: 1px; } .window.panel-hleft .window-header .panel-tool, .window.panel-hright .window-header .panel-tool { margin-top: 0; top: auto; bottom: 1px; right: auto; margin-right: 0; left: 50%; margin-left: -11px; } .window.panel-hright .window-header .panel-tool { left: auto; right: 1px; } .window-thinborder.panel-hleft .window-header { padding: 5px 6px 5px 5px; } .window-thinborder.panel-hright .window-header { padding: 5px 5px 5px 6px; } .window-thinborder.panel-hleft>.panel-header .panel-title { left: 21px; } .window-thinborder.panel-hleft>.panel-header .panel-title-up, .window-thinborder.panel-hright>.panel-header .panel-title-up { bottom: 5px; } .window-thinborder.panel-hleft .window-header .panel-icon, .window-thinborder.panel-hright .window-header .panel-icon { margin-top: 5px; } .window-thinborder.panel-hleft .window-header .panel-tool, .window-thinborder.panel-hright .window-header .panel-tool { left: 16px; bottom: 5px; } .dialog-content { overflow: auto; } .dialog-toolbar { position: relative; padding: 2px 5px; } .dialog-tool-separator { float: left; height: 24px; border-left: 1px solid #ccc; border-right: 1px solid #fff; margin: 2px 1px; } .dialog-button { position: relative; top: -1px; padding: 5px; text-align: right; } .dialog-button .l-btn { margin-left: 5px; } .dialog-toolbar, .dialog-button { background: #fafafa; border-width: 1px; border-style: solid; } .dialog-toolbar { border-color: #D3D3D3 #D3D3D3 #ddd #D3D3D3; } .dialog-button { border-color: #ddd #D3D3D3 #D3D3D3 #D3D3D3; } .window-thinborder .dialog-toolbar { border-left: transparent; border-right: transparent; border-top-color: #fafafa; } .window-thinborder .dialog-button { top: 0px; padding: 5px 8px 8px 8px; border-left: transparent; border-right: transparent; border-bottom: transparent; } .l-btn { text-decoration: none; display: inline-block; overflow: hidden; margin: 0; padding: 0; cursor: pointer; outline: none; text-align: center; vertical-align: middle; line-height: normal; } .l-btn-plain { border-width: 0; padding: 1px; } .l-btn-left { display: inline-block; position: relative; overflow: hidden; margin: 0; padding: 0; vertical-align: top; } .l-btn-text { display: inline-block; vertical-align: top; width: auto; line-height: 28px; font-size: 12px; padding: 0; margin: 0 6px; } .l-btn-icon { display: inline-block; width: 16px; height: 16px; line-height: 16px; position: absolute; top: 50%; margin-top: -8px; font-size: 1px; } .l-btn span span .l-btn-empty { display: inline-block; margin: 0; width: 16px; height: 24px; font-size: 1px; vertical-align: top; } .l-btn span .l-btn-icon-left { padding: 0 0 0 20px; background-position: left center; } .l-btn span .l-btn-icon-right { padding: 0 20px 0 0; background-position: right center; } .l-btn-icon-left .l-btn-text { margin: 0 6px 0 26px; } .l-btn-icon-left .l-btn-icon { left: 6px; } .l-btn-icon-right .l-btn-text { margin: 0 26px 0 6px; } .l-btn-icon-right .l-btn-icon { right: 6px; } .l-btn-icon-top .l-btn-text { margin: 20px 4px 0 4px; } .l-btn-icon-top .l-btn-icon { top: 4px; left: 50%; margin: 0 0 0 -8px; } .l-btn-icon-bottom .l-btn-text { margin: 0 4px 20px 4px; } .l-btn-icon-bottom .l-btn-icon { top: auto; bottom: 4px; left: 50%; margin: 0 0 0 -8px; } .l-btn-left .l-btn-empty { margin: 0 6px; width: 16px; } .l-btn-plain:hover { padding: 0; } .l-btn-focus { outline: #0000FF dotted thin; } .l-btn-large .l-btn-text { line-height: 44px; } .l-btn-large .l-btn-icon { width: 32px; height: 32px; line-height: 32px; margin-top: -16px; } .l-btn-large .l-btn-icon-left .l-btn-text { margin-left: 40px; } .l-btn-large .l-btn-icon-right .l-btn-text { margin-right: 40px; } .l-btn-large .l-btn-icon-top .l-btn-text { margin-top: 36px; line-height: 24px; min-width: 32px; } .l-btn-large .l-btn-icon-top .l-btn-icon { margin: 0 0 0 -16px; } .l-btn-large .l-btn-icon-bottom .l-btn-text { margin-bottom: 36px; line-height: 24px; min-width: 32px; } .l-btn-large .l-btn-icon-bottom .l-btn-icon { margin: 0 0 0 -16px; } .l-btn-large .l-btn-left .l-btn-empty { margin: 0 6px; width: 32px; } .l-btn { color: #444; background: #fafafa; background-repeat: repeat-x; border: 1px solid #bbb; background-repeat: repeat-x; filter: none; -moz-border-radius: 0; -webkit-border-radius: 0; border-radius: 0; } .l-btn:hover { background: #e2e2e2; color: #000000; border: 1px solid #ccc; filter: none; } .l-btn-plain { background: transparent; border-width: 0; filter: none; } .l-btn-outline { border-width: 1px; border-color: #ccc; padding: 0; } .l-btn-plain:hover { background: #e2e2e2; color: #000000; border: 1px solid #ccc; -moz-border-radius: 0; -webkit-border-radius: 0; border-radius: 0; } .l-btn-disabled, .l-btn-disabled:hover { opacity: 0.5; cursor: default; background: #fafafa; color: #444; background-repeat: repeat-x; filter: none; } .l-btn-disabled .l-btn-text, .l-btn-disabled .l-btn-icon { filter: alpha(opacity=50); } .l-btn-plain-disabled, .l-btn-plain-disabled:hover { background: transparent; filter: alpha(opacity=50); } .l-btn-selected, .l-btn-selected:hover { background: #ddd; filter: none; } .l-btn-plain-selected, .l-btn-plain-selected:hover { background: #ddd; } .textbox { position: relative; border: 1px solid #D3D3D3; background-color: #fff; vertical-align: middle; display: inline-block; overflow: hidden; white-space: nowrap; margin: 0; padding: 0; -moz-border-radius: 0; -webkit-border-radius: 0; border-radius: 0; } .textbox .textbox-text { font-size: 12px; border: 0; margin: 0; padding: 0 4px; white-space: normal; vertical-align: top; outline-style: none; resize: none; -moz-border-radius: 0; -webkit-border-radius: 0; border-radius: 0; height: 28px; line-height: 28px; } .textbox textarea.textbox-text { line-height: normal; } .textbox .textbox-text::-ms-clear, .textbox .textbox-text::-ms-reveal { display: none; } .textbox textarea.textbox-text { white-space: pre-wrap; } .textbox .textbox-prompt { font-size: 12px; color: #aaa; } .textbox .textbox-bgicon { background-position: 3px center; padding-left: 21px; } .textbox .textbox-button, .textbox .textbox-button:hover { position: absolute; top: 0; padding: 0; vertical-align: top; -moz-border-radius: 0 0 0 0; -webkit-border-radius: 0 0 0 0; border-radius: 0 0 0 0; } .textbox .textbox-button-right, .textbox .textbox-button-right:hover { right: 0; border-width: 0 0 0 1px; } .textbox .textbox-button-left, .textbox .textbox-button-left:hover { left: 0; border-width: 0 1px 0 0; } .textbox .textbox-button-top, .textbox .textbox-button-top:hover { left: 0; border-width: 0 0 1px 0; } .textbox .textbox-button-bottom, .textbox .textbox-button-bottom:hover { top: auto; bottom: 0; left: 0; border-width: 1px 0 0 0; } .textbox-addon { position: absolute; top: 0; } .textbox-label { display: inline-block; width: 80px; height: 30px; line-height: 30px; vertical-align: middle; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; margin: 0; padding-right: 5px; } .textbox-label-after { padding-left: 5px; padding-right: 0; } .textbox-label-top { display: block; width: auto; padding: 0; } .textbox-disabled, .textbox-label-disabled { opacity: 0.6; filter: alpha(opacity=60); } .textbox-icon { display: inline-block; width: 18px; height: 20px; overflow: hidden; vertical-align: top; background-position: center center; cursor: pointer; opacity: 0.6; filter: alpha(opacity=60); text-decoration: none; outline-style: none; } .textbox-icon-disabled, .textbox-icon-readonly { cursor: default; } .textbox-icon:hover { opacity: 1.0; filter: alpha(opacity=100); } .textbox-icon-disabled:hover { opacity: 0.6; filter: alpha(opacity=60); } .textbox-focused { border-color: #bababa; -moz-box-shadow: 0 0 3px 0 #D3D3D3; -webkit-box-shadow: 0 0 3px 0 #D3D3D3; box-shadow: 0 0 3px 0 #D3D3D3; } .textbox-invalid { border-color: #ffa8a8; background-color: #fff3f3; } .form-floating-label.form-field .textbox-text { padding: 0; } .form-floating-label.form-field .textbox-label { position: relative; height: 20px; line-height: 20px; transition: all .3s; font-size: 12px; z-index: 9; } .form-floating-label.form-field-empty .textbox-label { cursor: text; font-size: 14px; transform: translate(0,25px); } .form-floating-label.form-field-empty.form-field-focused .textbox-label { cursor: default; font-size: 12px; transform: translate(0,0); } .passwordbox-open { background: url('images/passwordbox_open.png') no-repeat center center; } .passwordbox-close { background: url('images/passwordbox_close.png') no-repeat center center; } .filebox .textbox-value { vertical-align: top; position: absolute; top: 0; left: -5000px; } .filebox-label { display: inline-block; position: absolute; width: 100%; height: 100%; cursor: pointer; left: 0; top: 0; z-index: 10; background: url('images/blank.gif') no-repeat; } .l-btn-disabled .filebox-label { cursor: default; } .combo-arrow { width: 18px; height: 20px; overflow: hidden; display: inline-block; vertical-align: top; cursor: pointer; opacity: 0.6; filter: alpha(opacity=60); } .combo-arrow-hover { opacity: 1.0; filter: alpha(opacity=100); } .combo-panel { overflow: auto; } .combo-arrow { /*background: url('images/combo_arrow.png') no-repeat center center;*/ background: none;font-family: "iconfont" !important;font-size: 16px;font-style: normal;-webkit-font-smoothing: antialiased;-moz-osx-font-smoothing: grayscale;text-decoration: none; padding: 5px; color: #444444; } .combo-arrow:before { content: "\e677"; } .combo-panel { background-color: #ffffff; } .combo-arrow { background-color: #f3f3f3; } .combo-arrow-hover { background-color: #e2e2e2; } .combo-arrow:hover { background-color: #e2e2e2; } .combo .textbox-icon-disabled:hover { cursor: default; } .combobox-item, .combobox-group, .combobox-stick { font-size: 14px; padding: 6px 4px; line-height: 20px; } .combobox-item-disabled { opacity: 0.5; filter: alpha(opacity=50); } .combobox-gitem { padding-left: 10px; } .combobox-group, .combobox-stick { font-weight: bold; } .combobox-stick { position: absolute; top: 1px; left: 1px; right: 1px; background: inherit; } .combobox-item-hover { background-color: #e2e2e2; color: #000000; } .combobox-item-selected { background-color: #0092DC; color: #fff; } .combobox-icon { display: inline-block; width: 16px; height: 16px; vertical-align: middle; margin-right: 2px; } .tagbox { cursor: text; } .tagbox .textbox-text { float: left; } .tagbox-label { position: relative; display: block; margin: 4px 0 0 4px; padding: 0 20px 0 4px; float: left; vertical-align: top; text-decoration: none; -moz-border-radius: 0; -webkit-border-radius: 0; border-radius: 0; background: #e2e2e2; color: #000000; } .tagbox-remove { background: url('images/tagbox_icons.png') no-repeat -16px center; position: absolute; display: block; width: 16px; height: 16px; right: 2px; top: 50%; margin-top: -8px; opacity: 0.6; filter: alpha(opacity=60); } .tagbox-remove:hover { opacity: 1; filter: alpha(opacity=100); } .textbox-disabled .tagbox-label { cursor: default; } .textbox-disabled .tagbox-remove:hover { cursor: default; opacity: 0.6; filter: alpha(opacity=60); } .layout { position: relative; overflow: hidden; margin: 0; padding: 0; z-index: 0; } .layout-panel { position: absolute; overflow: hidden; } .layout-body { min-width: 1px; min-height: 1px; } .layout-panel-east, .layout-panel-west { z-index: 2; } .layout-panel-north, .layout-panel-south { z-index: 3; } .layout-expand { position: absolute; padding: 0px; font-size: 1px; cursor: pointer; z-index: 1; } .layout-expand .panel-header, .layout-expand .panel-body { background: transparent; filter: none; overflow: hidden; } .layout-expand .panel-header { border-bottom-width: 0px; } .layout-expand .panel-body { position: relative; } .layout-expand .panel-body .panel-icon { margin-top: 0; top: 0; left: 50%; margin-left: -8px; } .layout-expand-west .panel-header .panel-icon, .layout-expand-east .panel-header .panel-icon { display: none; } .layout-expand-title { position: absolute; top: 0; left: 21px; white-space: nowrap; word-wrap: normal; -webkit-transform: rotate(90deg); -webkit-transform-origin: 0 0; -moz-transform: rotate(90deg); -moz-transform-origin: 0 0; -o-transform: rotate(90deg); -o-transform-origin: 0 0; transform: rotate(90deg); transform-origin: 0 0; } .layout-expand-title-up { position: absolute; top: 0; left: 0; text-align: right; padding-left: 5px; white-space: nowrap; word-wrap: normal; -webkit-transform: rotate(-90deg); -webkit-transform-origin: 0 0; -moz-transform: rotate(-90deg); -moz-transform-origin: 0 0; -o-transform: rotate(-90deg); -o-transform-origin: 0 0; transform: rotate(-90deg); transform-origin: 0 0; } .layout-expand-with-icon { top: 18px; } .layout-expand .panel-body-noheader .layout-expand-title, .layout-expand .panel-body-noheader .panel-icon { top: 5px; } .layout-expand .panel-body-noheader .layout-expand-with-icon { top: 23px; } .layout-split-proxy-h, .layout-split-proxy-v { position: absolute; font-size: 1px; display: none; z-index: 5; } .layout-split-proxy-h { width: 5px; cursor: e-resize; } .layout-split-proxy-v { height: 5px; cursor: n-resize; } .layout-mask { position: absolute; background: #fafafa; filter: alpha(opacity=10); opacity: 0.10; z-index: 4; } .layout-button-up { background: url('images/layout_arrows.png') no-repeat -16px -16px; } .layout-button-down { background: url('images/layout_arrows.png') no-repeat -16px 0; } .layout-button-left { background: url('images/layout_arrows.png') no-repeat 0 0; } .layout-button-right { background: url('images/layout_arrows.png') no-repeat 0 -16px; } .layout-split-proxy-h, .layout-split-proxy-v { background-color: #bfbfbf; } .layout-split-north { border-bottom: 5px solid #efefef; } .layout-split-south { border-top: 5px solid #efefef; } .layout-split-east { border-left: 5px solid #efefef; } .layout-split-west { border-right: 5px solid #efefef; } .layout-expand { background-color: #f3f3f3; } .layout-expand-over { background-color: #f3f3f3; } .tabs-container { overflow: hidden; } .tabs-header { border-width: 1px; border-style: solid; border-bottom-width: 0; position: relative; padding: 0; padding-top: 2px; overflow: hidden; } .tabs-scroller-left, .tabs-scroller-right { position: absolute; top: auto; bottom: 0; width: 18px; font-size: 1px; display: none; cursor: pointer; border-width: 1px; border-style: solid; } .tabs-scroller-left { left: 0; } .tabs-scroller-right { right: 0; } .tabs-tool { position: absolute; bottom: 0; padding: 1px; overflow: hidden; border-width: 1px; border-style: solid; } .tabs-header-plain .tabs-tool { padding: 0 1px; } .tabs-wrap { position: relative; left: 0; overflow: hidden; width: 100%; margin: 0; padding: 0; } .tabs-scrolling { margin-left: 18px; margin-right: 18px; } .tabs-disabled { opacity: 0.3; filter: alpha(opacity=30); } .tabs { list-style-type: none; height: 26px; margin: 0px; padding: 0px; padding-left: 4px; width: 50000px; border-style: solid; border-width: 0 0 1px 0; } .tabs li { float: left; display: inline-block; margin: 0 4px -1px 0; padding: 0; position: relative; border: 0; } .tabs li .tabs-inner { display: inline-block; text-decoration: none; cursor: hand; cursor: pointer; margin: 0; padding: 0 10px; height: 25px; line-height: 25px; text-align: center; white-space: nowrap; border-width: 1px; border-style: solid; -moz-border-radius: 5px 5px 0 0; -webkit-border-radius: 5px 5px 0 0; border-radius: 5px 5px 0 0; } .tabs li.tabs-selected .tabs-inner { font-weight: bold; outline: none; } .tabs li.tabs-selected .tabs-inner:hover { cursor: default; pointer: default; } .tabs li a.tabs-close, .tabs-p-tool { position: absolute; font-size: 1px; display: block; height: 12px; padding: 0; top: 50%; margin-top: -6px; overflow: hidden; } .tabs li a.tabs-close { width: 12px; right: 5px; opacity: 0.6; filter: alpha(opacity=60); } .tabs-p-tool { right: 16px; } .tabs-p-tool a { display: inline-block; font-size: 1px; width: 12px; height: 12px; margin: 0; opacity: 0.6; filter: alpha(opacity=60); } .tabs li a:hover.tabs-close, .tabs-p-tool a:hover { opacity: 1; filter: alpha(opacity=100); cursor: hand; cursor: pointer; } .tabs-with-icon { padding-left: 18px; } .tabs-icon { position: absolute; width: 16px; height: 16px; left: 10px; top: 50%; margin-top: -8px; } .tabs-title { font-size: 14px; } .tabs-closable { padding-right: 8px; } .tabs-panels { margin: 0px; padding: 0px; border-width: 1px; border-style: solid; border-top-width: 0; overflow: hidden; } .tabs-header-bottom { border-width: 0 1px 1px 1px; padding: 0 0 2px 0; } .tabs-header-bottom .tabs { border-width: 1px 0 0 0; } .tabs-header-bottom .tabs li { margin: -1px 4px 0 0; } .tabs-header-bottom .tabs li .tabs-inner { -moz-border-radius: 0 0 5px 5px; -webkit-border-radius: 0 0 5px 5px; border-radius: 0 0 5px 5px; } .tabs-header-bottom .tabs-tool { top: 0; } .tabs-header-bottom .tabs-scroller-left, .tabs-header-bottom .tabs-scroller-right { top: 0; bottom: auto; } .tabs-panels-top { border-width: 1px 1px 0 1px; } .tabs-header-left { float: left; border-width: 1px 0 1px 1px; padding: 0; } .tabs-header-right { float: right; border-width: 1px 1px 1px 0; padding: 0; } .tabs-header-left .tabs-wrap, .tabs-header-right .tabs-wrap { height: 100%; } .tabs-header-left .tabs { height: 100%; padding: 4px 0 0 2px; border-width: 0 1px 0 0; } .tabs-header-right .tabs { height: 100%; padding: 4px 2px 0 0; border-width: 0 0 0 1px; } .tabs-header-left .tabs li, .tabs-header-right .tabs li { display: block; width: 100%; position: relative; } .tabs-header-left .tabs li { left: auto; right: 0; margin: 0 -1px 4px 0; float: right; } .tabs-header-right .tabs li { left: 0; right: auto; margin: 0 0 4px -1px; float: left; } .tabs-justified li .tabs-inner { padding-left: 0; padding-right: 0; } .tabs-header-left .tabs li .tabs-inner { display: block; text-align: left; padding-left: 10px; padding-right: 10px; -moz-border-radius: 5px 0 0 5px; -webkit-border-radius: 5px 0 0 5px; border-radius: 5px 0 0 5px; } .tabs-header-right .tabs li .tabs-inner { display: block; text-align: left; padding-left: 10px; padding-right: 10px; -moz-border-radius: 0 5px 5px 0; -webkit-border-radius: 0 5px 5px 0; border-radius: 0 5px 5px 0; } .tabs-panels-right { float: right; border-width: 1px 1px 1px 0; } .tabs-panels-left { float: left; border-width: 1px 0 1px 1px; } .tabs-header-noborder, .tabs-panels-noborder { border: 0px; } .tabs-header-plain { border: 0px; background: transparent; } .tabs-pill { padding-bottom: 3px; } .tabs-header-bottom .tabs-pill { padding-top: 3px; padding-bottom: 0; } .tabs-header-left .tabs-pill { padding-right: 3px; } .tabs-header-right .tabs-pill { padding-left: 3px; } .tabs-header .tabs-pill li .tabs-inner { -moz-border-radius: 0; -webkit-border-radius: 0; border-radius: 0; } .tabs-header-narrow, .tabs-header-narrow .tabs-narrow { padding: 0; } .tabs-narrow li, .tabs-header-bottom .tabs-narrow li { margin-left: 0; margin-right: -1px; } .tabs-narrow li.tabs-last, .tabs-header-bottom .tabs-narrow li.tabs-last { margin-right: 0; } .tabs-header-left .tabs-narrow, .tabs-header-right .tabs-narrow { padding-top: 0; } .tabs-header-left .tabs-narrow li { margin-bottom: -1px; margin-right: -1px; } .tabs-header-left .tabs-narrow li.tabs-last, .tabs-header-right .tabs-narrow li.tabs-last { margin-bottom: 0; } .tabs-header-right .tabs-narrow li { margin-bottom: -1px; margin-left: -1px; } .tabs-scroller-left { background: #f3f3f3 url('images/tabs_icons.png') no-repeat 1px center; } .tabs-scroller-right { background: #f3f3f3 url('images/tabs_icons.png') no-repeat -15px center; } .tabs li a.tabs-close { background: url('images/tabs_icons.png') no-repeat -34px center; } .tabs li .tabs-inner:hover { background: #e2e2e2; color: #000000; filter: none; } .tabs li.tabs-selected .tabs-inner { background-color: #ffffff; color: #575765; background: #ffffff; background-repeat: repeat-x; filter: none; } .tabs-header-bottom .tabs li.tabs-selected .tabs-inner { background: -webkit-linear-gradient(top,#ffffff 0,#F8F8F8 100%); background: -moz-linear-gradient(top,#ffffff 0,#F8F8F8 100%); background: -o-linear-gradient(top,#ffffff 0,#F8F8F8 100%); background: linear-gradient(to bottom,#ffffff 0,#F8F8F8 100%); background-repeat: repeat-x; filter: none; } .tabs-header-left .tabs li.tabs-selected .tabs-inner { background: -webkit-linear-gradient(left,#F8F8F8 0,#ffffff 100%); background: -moz-linear-gradient(left,#F8F8F8 0,#ffffff 100%); background: -o-linear-gradient(left,#F8F8F8 0,#ffffff 100%); background: linear-gradient(to right,#F8F8F8 0,#ffffff 100%); background-repeat: repeat-y; filter: none; } .tabs-header-right .tabs li.tabs-selected .tabs-inner { background: -webkit-linear-gradient(left,#ffffff 0,#F8F8F8 100%); background: -moz-linear-gradient(left,#ffffff 0,#F8F8F8 100%); background: -o-linear-gradient(left,#ffffff 0,#F8F8F8 100%); background: linear-gradient(to right,#ffffff 0,#F8F8F8 100%); background-repeat: repeat-y; filter: none; } .tabs li .tabs-inner { color: #575765; background-color: #f3f3f3; background: #f3f3f3; background-repeat: repeat-x; filter: none; } .tabs-header, .tabs-tool { background-color: #f3f3f3; } .tabs-header-plain { background: transparent; } .tabs-header, .tabs-scroller-left, .tabs-scroller-right, .tabs-tool, .tabs, .tabs-panels, .tabs li .tabs-inner, .tabs li.tabs-selected .tabs-inner, .tabs-header-bottom .tabs li.tabs-selected .tabs-inner, .tabs-header-left .tabs li.tabs-selected .tabs-inner, .tabs-header-right .tabs li.tabs-selected .tabs-inner { border-color: #D3D3D3; } .tabs-p-tool a:hover, .tabs li a:hover.tabs-close, .tabs-scroller-over { background-color: #e2e2e2; } .tabs li.tabs-selected .tabs-inner { border-bottom: 1px solid #ffffff; } .tabs-header-bottom .tabs li.tabs-selected .tabs-inner { border-top: 1px solid #ffffff; } .tabs-header-left .tabs li.tabs-selected .tabs-inner { border-right: 1px solid #ffffff; } .tabs-header-right .tabs li.tabs-selected .tabs-inner { border-left: 1px solid #ffffff; } .tabs-header .tabs-pill li.tabs-selected .tabs-inner { background: #0092DC; color: #fff; filter: none; border-color: #D3D3D3; } .datagrid .panel-body { overflow: hidden; position: relative; } .datagrid-view { position: relative; overflow: hidden; } .datagrid-view1, .datagrid-view2 { position: absolute; overflow: hidden; top: 0; } .datagrid-view1 { left: 0; } .datagrid-view2 { right: 0; } .datagrid-mask { position: absolute; left: 0; top: 0; width: 100%; height: 100%; opacity: 0.3; filter: alpha(opacity=30); display: none; } .datagrid-mask-msg { position: absolute; top: 50%; margin-top: -20px; padding: 10px 5px 10px 30px; width: auto; height: 16px; border-width: 2px; border-style: solid; display: none; } .datagrid-empty { position: absolute; left: 0; top: 0; width: 100%; height: 25px; line-height: 25px; text-align: center; } .datagrid-sort-icon { padding: 0; display: none; } .datagrid-toolbar { height: auto; padding: 1px 2px; border-width: 0 0 1px 0; border-style: solid; } .datagrid-btn-separator { float: left; height: 24px; border-left: 1px solid #ccc; border-right: 1px solid #fff; margin: 2px 1px; } .datagrid .datagrid-pager { display: block; margin: 0; border-width: 1px 0 0 0; border-style: solid; } .datagrid .datagrid-pager-top { border-width: 0 0 1px 0; } .datagrid-header { overflow: hidden; cursor: default; border-width: 0 0 1px 0; border-style: solid; } .datagrid-header-inner { float: left; width: 10000px; } .datagrid-header-row, .datagrid-row { height: 32px; } .datagrid-header td, .datagrid-body td, .datagrid-footer td { border-width: 0 1px 1px 0; border-style: dotted; margin: 0; padding: 0; } .datagrid-cell, .datagrid-cell-group, .datagrid-header-rownumber, .datagrid-cell-rownumber { margin: 0; padding: 0 4px; white-space: nowrap; word-wrap: normal; overflow: hidden; height: 18px; line-height: 18px; font-size: 12px; } .datagrid-header .datagrid-cell { height: auto; } .datagrid-header .datagrid-cell span { font-size: 12px; } .datagrid-cell-group { text-align: center; text-overflow: ellipsis; } .datagrid-header-rownumber, .datagrid-cell-rownumber { width: 30px; text-align: center; margin: 0; padding: 0; } .datagrid-body { margin: 0; padding: 0; overflow: auto; zoom: 1; } .datagrid-view1 .datagrid-body-inner { padding-bottom: 20px; } .datagrid-view1 .datagrid-body { overflow: hidden; } .datagrid-footer { overflow: hidden; } .datagrid-footer-inner { border-width: 1px 0 0 0; border-style: solid; width: 10000px; float: left; } .datagrid-row-editing .datagrid-cell { height: auto; } .datagrid-header-check, .datagrid-cell-check { padding: 0; width: 27px; height: 18px; font-size: 1px; text-align: center; overflow: hidden; } .datagrid-header-check input, .datagrid-cell-check input { margin: 0; padding: 0; width: 15px; height: 18px; } .datagrid-resize-proxy { position: absolute; width: 1px; height: 10000px; top: 0; cursor: e-resize; display: none; } .datagrid-body .datagrid-editable { margin: 0; padding: 0; } .datagrid-body .datagrid-editable table { width: 100%; height: 100%; } .datagrid-body .datagrid-editable td { border: 0; margin: 0; padding: 0; } .datagrid-view .datagrid-editable-input { margin: 0; padding: 2px 4px; border: 1px solid #D3D3D3; font-size: 14px; outline-style: none; -moz-border-radius: 0 0 0 0; -webkit-border-radius: 0 0 0 0; border-radius: 0 0 0 0; } .datagrid-view .validatebox-invalid { border-color: #ffa8a8; } .datagrid-sort .datagrid-sort-icon { display: inline; padding: 0 13px 0 0; background: url('images/datagrid_icons.png') no-repeat -64px center; } .datagrid-sort-desc .datagrid-sort-icon { display: inline; padding: 0 13px 0 0; background: url('images/datagrid_icons.png') no-repeat -16px center; } .datagrid-sort-asc .datagrid-sort-icon { display: inline; padding: 0 13px 0 0; background: url('images/datagrid_icons.png') no-repeat 0px center; } .datagrid-row-collapse { background: url('images/datagrid_icons.png') no-repeat -48px center; } .datagrid-row-expand { background: url('images/datagrid_icons.png') no-repeat -32px center; } .datagrid-mask-msg { /*background: #ffffff url('images/loading.gif') no-repeat scroll 5px center;*/ background: none;font-family: "iconfont" !important;font-size: 12px;font-style: normal;-webkit-font-smoothing: antialiased;-moz-osx-font-smoothing: grayscale;text-decoration: none; padding: 5px; color: #444444; } .datagrid-mask-msg:before { content: "\e867"; } .datagrid-header, .datagrid-td-rownumber { background-color: #fafafa; background: #fafafa; background-repeat: repeat-x; filter: none; } .datagrid-cell-rownumber { color: #000000; } .datagrid-resize-proxy { background: #bfbfbf; } .datagrid-mask { background: #ccc; } .datagrid-mask-msg { border-color: #D3D3D3; } .datagrid-toolbar, .datagrid-pager { background: #fafafa; } .datagrid-header, .datagrid-toolbar, .datagrid-pager, .datagrid-footer-inner { border-color: #ddd; } .datagrid-header td, .datagrid-body td, .datagrid-footer td { border-color: #ccc; } .datagrid-htable, .datagrid-btable, .datagrid-ftable { color: #000000; border-collapse: separate; } .datagrid-row-alt { background: #fafafa; } .datagrid-row-over, .datagrid-header td.datagrid-header-over { background: #e2e2e2; color: #000000; cursor: default; } .datagrid-row-selected { background: #0092DC; color: #fff; } .datagrid-row-editing .textbox, .datagrid-row-editing .textbox-text { -moz-border-radius: 0 0 0 0; -webkit-border-radius: 0 0 0 0; border-radius: 0 0 0 0; } .datagrid-header .datagrid-filter-row td.datagrid-header-over { background: inherit; } .datagrid-split-proxy { position: absolute; left: 0; top: 0; width: 1px; height: 100%; border-left: 1px solid #0070a9; } .datagrid-moving-proxy { border: 1px solid #0070a9; height: 32px; line-height: 32px; padding: 0 4px; } .propertygrid .datagrid-view1 .datagrid-body td { padding-bottom: 1px; border-width: 0 1px 0 0; } .propertygrid .datagrid-group { overflow: hidden; border-width: 0 0 1px 0; border-style: solid; } .propertygrid .datagrid-group span { font-weight: bold; } .propertygrid .datagrid-view1 .datagrid-body td { border-color: #ddd; } .propertygrid .datagrid-view1 .datagrid-group { border-color: #f3f3f3; } .propertygrid .datagrid-view2 .datagrid-group { border-color: #ddd; } .propertygrid .datagrid-group, .propertygrid .datagrid-view1 .datagrid-body, .propertygrid .datagrid-view1 .datagrid-row-over, .propertygrid .datagrid-view1 .datagrid-row-selected { background: #f3f3f3; } .datalist .datagrid-header { border-width: 0; } .datalist .datagrid-group, .m-list .m-list-group { height: 25px; line-height: 25px; font-weight: bold; overflow: hidden; background-color: #fafafa; border-style: solid; border-width: 0 0 1px 0; border-color: #ccc; } .datalist .datagrid-group-expander { display: none; } .datalist .datagrid-group-title { padding: 0 4px; } .datalist .datagrid-btable { width: 100%; table-layout: fixed; } .datalist .datagrid-row td { border-style: solid; border-left-color: transparent; border-right-color: transparent; border-bottom-width: 0; } .datalist-lines .datagrid-row td { border-bottom-width: 1px; } .datalist .datagrid-cell, .m-list li { width: auto; height: auto; padding: 2px 4px; line-height: 18px; position: relative; white-space: nowrap; text-overflow: ellipsis; overflow: hidden; } .datalist-link, .m-list li>a { display: block; position: relative; cursor: pointer; color: #000000; text-decoration: none; overflow: hidden; margin: -2px -4px; padding: 2px 4px; padding-right: 16px; line-height: 18px; white-space: nowrap; text-overflow: ellipsis; overflow: hidden; } .datalist-link::after, .m-list li>a::after { position: absolute; display: block; width: 8px; height: 8px; content: ''; right: 6px; top: 50%; margin-top: -4px; border-style: solid; border-width: 1px 1px 0 0; -ms-transform: rotate(45deg); -moz-transform: rotate(45deg); -webkit-transform: rotate(45deg); -o-transform: rotate(45deg); transform: rotate(45deg); } .m-list { margin: 0; padding: 0; list-style: none; } .m-list li { border-style: solid; border-width: 0 0 1px 0; border-color: #ccc; } .m-list li>a:hover { background: #e2e2e2; color: #000000; } .m-list .m-list-group { padding: 0 4px; } .pagination { zoom: 1; padding: 2px; } .pagination table { float: left; height: 30px; } .pagination td { border: 0; } .pagination-btn-separator { float: left; height: 24px; border-left: 1px solid #ccc; border-right: 1px solid #fff; margin: 3px 1px; } .pagination .pagination-num { border-width: 1px; border-style: solid; margin: 0 2px; padding: 2px; width: 3em; height: auto; text-align: center; font-size: 14px; } .pagination-page-list { margin: 0px 6px; padding: 1px 2px; width: auto; height: auto; border-width: 1px; border-style: solid; } .pagination-info { float: right; margin: 0 6px; padding: 0; height: 30px; line-height: 30px; font-size: 12px; } .pagination span { font-size: 12px; } .pagination-link .l-btn-text { box-sizing: border-box; text-align: center; margin: 0; padding: 0 .5em; width: auto; min-width: 28px; } .pagination-first { /*background: url('images/pagination_icons.png') no-repeat 0 center;*/ background: none;font-family: "iconfont" !important;font-size: 12px !important;font-style: normal;-webkit-font-smoothing: antialiased;-moz-osx-font-smoothing: grayscale;text-decoration: none; padding: 0px; color: #444444; } .pagination-first:before { content: "\e879"; } .pagination-prev { /*background: url('images/pagination_icons.png') no-repeat -16px center;*/ background: none;font-family: "iconfont" !important;font-size: 16px !important;font-style: normal;-webkit-font-smoothing: antialiased;-moz-osx-font-smoothing: grayscale;text-decoration: none; padding: 0px; color: #444444; } .pagination-prev:before { content: "\e678"; } .pagination-next { /*background: url('images/pagination_icons.png') no-repeat -32px center;*/ background: none;font-family: "iconfont" !important;font-size: 16px !important;font-style: normal;-webkit-font-smoothing: antialiased;-moz-osx-font-smoothing: grayscale;text-decoration: none; padding: 0px; color: #444444; } .pagination-next:before { content: "\e67b"; } .pagination-last { /*background: url('images/pagination_icons.png') no-repeat -48px center;*/ background: none;font-family: "iconfont" !important;font-size: 12px !important;font-style: normal;-webkit-font-smoothing: antialiased;-moz-osx-font-smoothing: grayscale;text-decoration: none; padding: 0px; color: #444444; } .pagination-last:before { content: "\e875"; } .pagination-load { /*background: url('images/pagination_icons.png') no-repeat -64px center;*/ background: none;font-family: "iconfont" !important;font-size: 12px !important;font-style: normal;-webkit-font-smoothing: antialiased;-moz-osx-font-smoothing: grayscale;text-decoration: none; padding: 0px; color: #444444; } .pagination-load:before { content: "\e81a"; } .pagination-loading { /*background: url('images/loading.gif') no-repeat center center;*/ background: none;font-family: "iconfont" !important;font-size: 12px;font-style: normal;-webkit-font-smoothing: antialiased;-moz-osx-font-smoothing: grayscale;text-decoration: none; padding: 0px; color: #444444; } .pagination-loading:before { content: "\e867"; } .pagination-page-list, .pagination .pagination-num { border-color: #D3D3D3; } .calendar { border-width: 1px; border-style: solid; padding: 1px; overflow: hidden; } .calendar table { table-layout: fixed; border-collapse: separate; font-size: 14px; width: 100%; height: 100%; } .calendar table td, .calendar table th { font-size: 14px; } .calendar-noborder { border: 0; } .calendar-header { position: relative; height: 36px; } .calendar-title { text-align: center; height: 36px; line-height: 36px; } .calendar-title span { position: relative; display: inline-block; top: 0px; padding: 0 3px; height: 28px; line-height: 28px; font-size: 14px; cursor: pointer; -moz-border-radius: 0; -webkit-border-radius: 0; border-radius: 0; } .calendar-prevmonth, .calendar-nextmonth, .calendar-prevyear, .calendar-nextyear { position: absolute; top: 50%; margin-top: -8px; width: 16px; height: 16px; cursor: pointer; font-size: 1px; -moz-border-radius: 0; -webkit-border-radius: 0; border-radius: 0; } .calendar-prevmonth { left: 30px; /*background: url('images/calendar_arrows.png') no-repeat -16px 0;*/ background: none;font-family: "iconfont" !important;font-size: 16px;font-style: normal;-webkit-font-smoothing: antialiased;-moz-osx-font-smoothing: grayscale;text-decoration: none; padding: 0; color: #444444; } .calendar-prevmonth:before { content: "\e678"; } .calendar-nextmonth { right: 30px; /*background: url('images/calendar_arrows.png') no-repeat -32px 0;*/ background: none;font-family: "iconfont" !important;font-size: 16px;font-style: normal;-webkit-font-smoothing: antialiased;-moz-osx-font-smoothing: grayscale;text-decoration: none; padding: 0; color: #444444; } .calendar-nextmonth:before { content: "\e67b"; } .calendar-prevyear { left: 10px; /*background: url('images/calendar_arrows.png') no-repeat 0px 0;*/ background: none;font-family: "iconfont" !important;font-size: 12px;font-style: normal;-webkit-font-smoothing: antialiased;-moz-osx-font-smoothing: grayscale;text-decoration: none; padding: 2px; color: #444444; } .calendar-prevyear:before { content: "\e639"; } .calendar-nextyear { right: 10px; /*background: url('images/calendar_arrows.png') no-repeat -48px 0;*/ background: none;font-family: "iconfont" !important;font-size: 12px;font-style: normal;-webkit-font-smoothing: antialiased;-moz-osx-font-smoothing: grayscale;text-decoration: none; padding: 2px; color: #444444; } .calendar-nextyear:before { content: "\e729"; } .calendar-body { position: relative; } .calendar-body th, .calendar-body td { text-align: center; } .calendar-day { border: 0; padding: 1px; cursor: pointer; -moz-border-radius: 0; -webkit-border-radius: 0; border-radius: 0; } .calendar-other-month { opacity: 0.3; filter: alpha(opacity=30); } .calendar-disabled { opacity: 0.6; filter: alpha(opacity=60); cursor: default; } .calendar-menu { position: absolute; top: 0; left: 0; width: 180px; height: 150px; padding: 5px; font-size: 14px; display: none; overflow: hidden; } .calendar-menu-year-inner { text-align: center; padding-bottom: 5px; } .calendar-menu-year { width: 80px; line-height: 26px; text-align: center; border-width: 1px; border-style: solid; outline-style: none; resize: none; margin: 0; padding: 0; font-weight: bold; font-size: 14px; -moz-border-radius: 0; -webkit-border-radius: 0; border-radius: 0; } .calendar-menu-prev, .calendar-menu-next { display: inline-block; width: 25px; height: 28px; vertical-align: top; cursor: pointer; -moz-border-radius: 0; -webkit-border-radius: 0; border-radius: 0; } .calendar-menu-prev { margin-right: 10px; background: url('images/calendar_arrows.png') no-repeat 5px center; } .calendar-menu-next { margin-left: 10px; background: url('images/calendar_arrows.png') no-repeat -44px center; } .calendar-menu-month { text-align: center; cursor: pointer; font-weight: bold; -moz-border-radius: 0; -webkit-border-radius: 0; border-radius: 0; } .calendar-body th, .calendar-menu-month { color: #4d4d4d; } .calendar-day { color: #000000; } .calendar-sunday { color: #CC2222; } .calendar-saturday { color: #00ee00; } .calendar-today { color: #0000ff; } .calendar-menu-year { border-color: #D3D3D3; } .calendar { border-color: #D3D3D3; } .calendar-header { background: #f3f3f3; } .calendar-body, .calendar-menu { background: #ffffff; } .calendar-body th { background: #fafafa; padding: 4px 0; } .calendar-hover, .calendar-nav-hover, .calendar-menu-hover { background-color: #e2e2e2; color: #000000; } .calendar-hover { border: 1px solid #ccc; padding: 0; } .calendar-selected { background-color: #0092DC; color: #fff; border: 1px solid #0070a9; padding: 0; } .calendar-info { background-color: #f3f3f3; font-size: 28px; height: 70px; padding: 10px 20px; } .calendar-info .year { font-size: 16px; } .datebox-calendar-inner { height: 250px; } .datebox-button { padding: 4px 0; text-align: center; } .datebox-button a { line-height: 22px; font-size: 14px; font-weight: bold; text-decoration: none; opacity: 0.6; filter: alpha(opacity=60); } .datebox-button a:hover { opacity: 1.0; filter: alpha(opacity=100); } .datebox-current, .datebox-close { float: left; } .datebox-close { float: right; } .datebox .combo-arrow { background-image: url('images/datebox_arrow.png'); background-position: center center; } .datebox-button { background-color: #fafafa; } .datebox-button a { color: #444; } .spinner-arrow { display: inline-block; overflow: hidden; vertical-align: top; margin: 0; padding: 0; opacity: 1.0; filter: alpha(opacity=100); width: 18px; } .spinner-arrow.spinner-button-top, .spinner-arrow.spinner-button-bottom, .spinner-arrow.spinner-button-left, .spinner-arrow.spinner-button-right { background-color: #f3f3f3; } .spinner-arrow-up, .spinner-arrow-down { opacity: 0.6; filter: alpha(opacity=60); display: block; font-size: 1px; width: 18px; height: 10px; width: 100%; height: 50%; color: #444; outline-style: none; background-color: #f3f3f3; } .spinner-button-updown { opacity: 1.0; } .spinner-button-updown .spinner-button-top, .spinner-button-updown .spinner-button-bottom { position: relative; display: block; width: 100%; height: 50%; } .spinner-button-updown .spinner-arrow-up, .spinner-button-updown .spinner-arrow-down { opacity: 1.0; filter: alpha(opacity=100); cursor: pointer; width: 16px; height: 16px; top: 50%; left: 50%; margin-top: -8px; margin-left: -8px; position: absolute; } .spinner-button-updown .spinner-button-top, .spinner-button-updown .spinner-button-bottom { cursor: pointer; opacity: 0.6; filter: alpha(opacity=60); } .spinner-button-updown .spinner-button-top:hover, .spinner-button-updown .spinner-button-bottom:hover { opacity: 1.0; filter: alpha(opacity=100); } .spinner-button-updown .spinner-arrow-up, .spinner-button-updown .spinner-arrow-down, .spinner-button-updown .spinner-arrow-up:hover, .spinner-button-updown .spinner-arrow-down:hover { background-color: transparent; } .spinner-arrow-hover { background-color: #e2e2e2; opacity: 1.0; filter: alpha(opacity=100); } .spinner-button-top:hover, .spinner-button-bottom:hover, .spinner-button-left:hover, .spinner-button-right:hover, .spinner-arrow-up:hover, .spinner-arrow-down:hover { opacity: 1.0; filter: alpha(opacity=100); background-color: #e2e2e2; } .textbox-disabled .spinner-button-top:hover, .textbox-disabled .spinner-button-bottom:hover, .textbox-disabled .spinner-button-left:hover, .textbox-disabled .spinner-button-right:hover, .textbox-icon-disabled .spinner-arrow-up:hover, .textbox-icon-disabled .spinner-arrow-down:hover { opacity: 0.6; filter: alpha(opacity=60); background-color: #f3f3f3; cursor: default; } .spinner .textbox-icon-disabled { opacity: 0.6; filter: alpha(opacity=60); } .spinner-arrow-up { background: url('images/spinner_arrows.png') no-repeat 1px center; background-color: #f3f3f3; } .spinner-arrow-down { background: url('images/spinner_arrows.png') no-repeat -15px center; background-color: #f3f3f3; } .spinner-button-up { background: url('images/spinner_arrows.png') no-repeat -32px center; } .spinner-button-down { background: url('images/spinner_arrows.png') no-repeat -48px center; } .progressbar { border-width: 1px; border-style: solid; -moz-border-radius: 0; -webkit-border-radius: 0; border-radius: 0; overflow: hidden; position: relative; } .progressbar-text { text-align: center; position: absolute; } .progressbar-value { position: relative; overflow: hidden; width: 0; -moz-border-radius: 0; -webkit-border-radius: 0; border-radius: 0; } .progressbar { border-color: #D3D3D3; } .progressbar-text { color: #000000; font-size: 12px; } .progressbar-value, .progressbar-value .progressbar-text { background-color: #0092DC; color: #fff; } .searchbox-button { width: 18px; height: 20px; overflow: hidden; display: inline-block; vertical-align: top; cursor: pointer; opacity: 0.6; filter: alpha(opacity=60); } .searchbox-button-hover { opacity: 1.0; filter: alpha(opacity=100); } .searchbox .l-btn-plain { border: 0; padding: 0; vertical-align: top; opacity: 0.6; filter: alpha(opacity=60); -moz-border-radius: 0 0 0 0; -webkit-border-radius: 0 0 0 0; border-radius: 0 0 0 0; } .searchbox .l-btn-plain:hover { border: 0; padding: 0; opacity: 1.0; filter: alpha(opacity=100); -moz-border-radius: 0 0 0 0; -webkit-border-radius: 0 0 0 0; border-radius: 0 0 0 0; } .searchbox a.m-btn-plain-active { -moz-border-radius: 0 0 0 0; -webkit-border-radius: 0 0 0 0; border-radius: 0 0 0 0; } .searchbox .m-btn-active { border-width: 0 1px 0 0; -moz-border-radius: 0 0 0 0; -webkit-border-radius: 0 0 0 0; border-radius: 0 0 0 0; } .searchbox .textbox-button-right { border-width: 0 0 0 1px; } .searchbox .textbox-button-left { border-width: 0 1px 0 0; } .searchbox-button { background: url('images/searchbox_button.png') no-repeat center center; } .searchbox .l-btn-plain { background: #f3f3f3; } .searchbox .l-btn-plain-disabled, .searchbox .l-btn-plain-disabled:hover { opacity: 0.5; filter: alpha(opacity=50); } .slider-disabled { opacity: 0.5; filter: alpha(opacity=50); } .slider-h { height: 22px; } .slider-v { width: 22px; } .slider-inner { position: relative; height: 6px; top: 7px; border-width: 1px; border-style: solid; border-radius: 5px; } .slider-handle { position: absolute; display: block; outline: none; width: 20px; height: 20px; top: 50%; margin-top: -10px; margin-left: -10px; } .slider-tip { position: absolute; display: inline-block; line-height: 12px; font-size: 14px; white-space: nowrap; top: -22px; } .slider-rule { position: relative; top: 15px; } .slider-rule span { position: absolute; display: inline-block; font-size: 0; height: 5px; border-width: 0 0 0 1px; border-style: solid; } .slider-rulelabel { position: relative; top: 20px; } .slider-rulelabel span { position: absolute; display: inline-block; font-size: 14px; } .slider-v .slider-inner { width: 6px; left: 7px; top: 0; float: left; } .slider-v .slider-handle { left: 50%; margin-top: -10px; } .slider-v .slider-tip { left: -10px; margin-top: -6px; } .slider-v .slider-rule { float: left; top: 0; left: 16px; } .slider-v .slider-rule span { width: 5px; height: 'auto'; border-left: 0; border-width: 1px 0 0 0; border-style: solid; } .slider-v .slider-rulelabel { float: left; top: 0; left: 23px; } .slider-handle { background: url('images/slider_handle.png') no-repeat; } .slider-inner { border-color: #D3D3D3; background: #f3f3f3; } .slider-rule span { border-color: #D3D3D3; } .slider-rulelabel span { color: #000000; } .menu { position: absolute; margin: 0; padding: 2px; border-width: 1px; border-style: solid; overflow: hidden; } .menu-inline { position: relative; } .menu-item { position: relative; margin: 0; padding: 0; overflow: hidden; white-space: nowrap; cursor: pointer; border-width: 1px; border-style: solid; } .menu-text { height: 20px; line-height: 20px; float: left; padding-left: 28px; } .menu-icon { position: absolute; width: 16px; height: 16px; left: 2px; top: 50%; margin-top: -8px; } .menu-rightarrow { position: absolute; width: 16px; height: 16px; right: 0; top: 50%; margin-top: -8px; } .menu-line { position: absolute; left: 26px; top: 0; height: 2000px; font-size: 1px; } .menu-sep { margin: 3px 0px 3px 25px; font-size: 1px; } .menu-noline .menu-line { display: none; } .menu-noline .menu-sep { margin-left: 0; margin-right: 0; } .menu-active { -moz-border-radius: 0; -webkit-border-radius: 0; border-radius: 0; } .menu-item-disabled { opacity: 0.5; filter: alpha(opacity=50); cursor: default; } .menu-text, .menu-text span { font-size: 14px; } .menu-shadow { position: absolute; -moz-border-radius: 0; -webkit-border-radius: 0; border-radius: 0; background: #ccc; -moz-box-shadow: 2px 2px 3px #cccccc; -webkit-box-shadow: 2px 2px 3px #cccccc; box-shadow: 2px 2px 3px #cccccc; filter: none; } .menu-rightarrow { background: url('images/menu_arrows.png') no-repeat -32px center; } .menu-line { border-left: 1px solid #ccc; border-right: 1px solid #fff; } .menu-sep { border-top: 1px solid #ccc; border-bottom: 1px solid #fff; } .menu { background-color: #f3f3f3; border-color: #D3D3D3; color: #444; } .menu-content { background: #ffffff; } .menu-item { border-color: transparent; _border-color: #f3f3f3; } .menu-active { border-color: #ccc; color: #000000; background: #e2e2e2; } .menu-active-disabled { border-color: transparent; background: transparent; color: #444; } .m-btn-downarrow, .s-btn-downarrow { display: inline-block; position: absolute; width: 16px; height: 16px; font-size: 1px; right: 0; top: 50%; margin-top: -8px; } .m-btn-active, .s-btn-active { background: #e2e2e2; color: #000000; border: 1px solid #ccc; filter: none; } .m-btn-plain-active, .s-btn-plain-active { background: transparent; padding: 0; border-width: 1px; border-style: solid; -moz-border-radius: 0; -webkit-border-radius: 0; border-radius: 0; } .m-btn .l-btn-left .l-btn-text { margin-right: 20px; } .m-btn .l-btn-icon-right .l-btn-text { margin-right: 40px; } .m-btn .l-btn-icon-right .l-btn-icon { right: 20px; } .m-btn .l-btn-icon-top .l-btn-text { margin-right: 4px; margin-bottom: 14px; } .m-btn .l-btn-icon-bottom .l-btn-text { margin-right: 4px; margin-bottom: 34px; } .m-btn .l-btn-icon-bottom .l-btn-icon { top: auto; bottom: 20px; } .m-btn .l-btn-icon-top .m-btn-downarrow, .m-btn .l-btn-icon-bottom .m-btn-downarrow { top: auto; bottom: 0px; left: 50%; margin-left: -8px; } .m-btn-line { display: inline-block; position: absolute; font-size: 1px; display: none; } .m-btn .l-btn-left .m-btn-line { right: 0; width: 16px; height: 500px; border-style: solid; border-color: #bfbfbf; border-width: 0 0 0 1px; } .m-btn .l-btn-icon-top .m-btn-line, .m-btn .l-btn-icon-bottom .m-btn-line { left: 0; bottom: 0; width: 500px; height: 16px; border-width: 1px 0 0 0; } .m-btn-large .l-btn-icon-right .l-btn-text { margin-right: 56px; } .m-btn-large .l-btn-icon-bottom .l-btn-text { margin-bottom: 50px; } .m-btn-downarrow, .s-btn-downarrow { background: url('images/menu_arrows.png') no-repeat 0 center; } .m-btn-plain-active, .s-btn-plain-active { border-color: #ccc; background-color: #e2e2e2; color: #000000; } .s-btn:hover .m-btn-line, .s-btn-active .m-btn-line, .s-btn-plain-active .m-btn-line { display: inline-block; } .l-btn:hover .s-btn-downarrow, .s-btn-active .s-btn-downarrow, .s-btn-plain-active .s-btn-downarrow { border-style: solid; border-color: #bfbfbf; border-width: 0 0 0 1px; } .messager-body { padding: 10px 10px 30px 10px; overflow: auto; } .messager-button { text-align: center; padding: 5px; } .messager-button .l-btn { width: 70px; } .messager-icon { float: left; width: 32px; height: 32px; margin: 0 10px 10px 0; } .messager-error { /*background: url('images/messager_icons.png') no-repeat scroll -64px 0;*/ background: none;font-family: "iconfont" !important;font-size: 40px;font-style: normal;-webkit-font-smoothing: antialiased;-moz-osx-font-smoothing: grayscale;text-decoration: none; padding: 0; color: #B6271F; } .messager-info { /*background: url('images/messager_icons.png') no-repeat scroll 0 0;*/ background: none;font-family: "iconfont" !important;font-size: 40px;font-style: normal;-webkit-font-smoothing: antialiased;-moz-osx-font-smoothing: grayscale;text-decoration: none; padding: 0; color: #F3C432; } .messager-info:before { content: "\e780"; } .messager-question { /*background: url('images/messager_icons.png') no-repeat scroll -32px 0;*/ background: none;font-family: "iconfont" !important;font-size: 40px;font-style: normal;-webkit-font-smoothing: antialiased;-moz-osx-font-smoothing: grayscale;text-decoration: none; padding: 0; color: #E16F25; } .messager-question:before { content: "\e80e"; } .messager-warning { /*background: url('images/messager_icons.png') no-repeat scroll -96px 0;*/ background: none;font-family: "iconfont" !important;font-size: 40px;font-style: normal;-webkit-font-smoothing: antialiased;-moz-osx-font-smoothing: grayscale;text-decoration: none; padding: 0; color: #F4D837; } .messager-warning:before { content: "\e6ee"; } .messager-progress { padding: 10px; } .messager-p-msg { margin-bottom: 5px; } .messager-body .messager-input { width: 100%; padding: 4px 0; outline-style: none; border: 1px solid #D3D3D3; } .window-thinborder .messager-button { padding-bottom: 8px; } .tree { margin: 0; padding: 0; list-style-type: none; } .tree li { white-space: nowrap; } .tree li ul { list-style-type: none; margin: 0; padding: 0; } .tree-node { height: 26px; white-space: nowrap; cursor: pointer; } .tree-hit { cursor: pointer; } .tree-expanded, .tree-collapsed, .tree-folder, .tree-file, .tree-checkbox, .tree-indent { display: inline-block; width: 16px; height: 18px; margin: 4px 0; vertical-align: middle; overflow: hidden; } .tree-expanded { /*background: url('images/tree_icons.png') no-repeat -18px 0px;*/ background: none;font-family: "iconfont" !important;font-size: 16px;font-style: normal;-webkit-font-smoothing: antialiased;-moz-osx-font-smoothing: grayscale; } .tree-expanded:before { content: "\e677"; } .tree-expanded-hover { background: url('images/tree_icons.png') no-repeat -50px 0px; } .tree-collapsed { /*background: url('images/tree_icons.png') no-repeat 0px 0px;*/ background: none;font-family: "iconfont" !important;font-size: 16px;font-style: normal;-webkit-font-smoothing: antialiased;-moz-osx-font-smoothing: grayscale; } .tree-collapsed:before { content: "\e67b"; } .tree-collapsed-hover { background: url('images/tree_icons.png') no-repeat -32px 0px; } .tree-lines .tree-expanded, .tree-lines .tree-root-first .tree-expanded { background: url('images/tree_icons.png') no-repeat -144px 0; } .tree-lines .tree-collapsed, .tree-lines .tree-root-first .tree-collapsed { background: url('images/tree_icons.png') no-repeat -128px 0; } .tree-lines .tree-node-last .tree-expanded, .tree-lines .tree-root-one .tree-expanded { background: url('images/tree_icons.png') no-repeat -80px 0; } .tree-lines .tree-node-last .tree-collapsed, .tree-lines .tree-root-one .tree-collapsed { background: url('images/tree_icons.png') no-repeat -64px 0; } .tree-line { background: url('images/tree_icons.png') no-repeat -176px 0; } .tree-join { background: url('images/tree_icons.png') no-repeat -192px 0; } .tree-joinbottom { background: url('images/tree_icons.png') no-repeat -160px 0; } .tree-folder { /*background: url('images/tree_icons.png') no-repeat -208px 0;*/ background: none;font-family: "iconfont" !important;font-size: 16px;font-style: normal;-webkit-font-smoothing: antialiased;-moz-osx-font-smoothing: grayscale;text-decoration: none; padding: 0; color: #444444; } .tree-folder:before { content: "\e722"; } .tree-folder-open { /*background: url('images/tree_icons.png') no-repeat -224px 0;*/ background: none;font-family: "iconfont" !important;font-size: 16px;font-style: normal;-webkit-font-smoothing: antialiased;-moz-osx-font-smoothing: grayscale;text-decoration: none; padding: 0; /*color: #444444;*/ } .tree-folder-open:before { content: "\e71f"; } .tree-file { /*background: url('images/tree_icons.png') no-repeat -240px 0;*/ background: none;font-family: "iconfont" !important;font-size: 16px;font-style: normal;-webkit-font-smoothing: antialiased;-moz-osx-font-smoothing: grayscale;text-decoration: none; padding: 0; color: #444444; } .tree-file:before { content: "\e70e"; } .tree-loading { /*background: url('images/loading.gif') no-repeat center center;*/ background: none;font-family: "iconfont" !important;font-size: 16px;font-style: normal;-webkit-font-smoothing: antialiased;-moz-osx-font-smoothing: grayscale;text-decoration: none; padding: 0; color: #444444; } .tree-loading:before { content: "\e867"; } .tree-checkbox0 { background: url('images/tree_icons.png') no-repeat -208px -18px; } .tree-checkbox1 { background: url('images/tree_icons.png') no-repeat -224px -18px; } .tree-checkbox2 { background: url('images/tree_icons.png') no-repeat -240px -18px; } .tree-title { font-size: 12px; display: inline-block; text-decoration: none; vertical-align: middle; white-space: nowrap; padding: 0 2px; margin: 4px 0; height: 18px; line-height: 18px; } .tree-node-proxy { font-size: 14px; line-height: 20px; padding: 0 2px 0 20px; border-width: 1px; border-style: solid; z-index: 9900000; } .tree-dnd-icon { display: inline-block; position: absolute; width: 16px; height: 18px; left: 2px; top: 50%; margin-top: -9px; } .tree-dnd-yes { background: url('images/tree_icons.png') no-repeat -256px 0; } .tree-dnd-no { background: url('images/tree_icons.png') no-repeat -256px -18px; } .tree-node-top { border-top: 1px dotted red; } .tree-node-bottom { border-bottom: 1px dotted red; } .tree-node-append .tree-title { border: 1px dotted red; } .tree-editor { border: 1px solid #D3D3D3; font-size: 14px; height: 26px; line-height: 26px; padding: 0 4px; margin: 0; width: 80px; outline-style: none; vertical-align: middle; position: absolute; top: 0; } .tree-node-proxy { background-color: #ffffff; color: #000000; border-color: #D3D3D3; } .tree-node-hover { background: #e2e2e2; color: #000000; } .tree-node-selected { background: #0092DC; color: #fff; } .tree-node-disabled { opacity: 0.5; cursor: default; } .tree-node-hidden { display: none; } .inputbox { display: inline-block; vertical-align: middle; overflow: hidden; white-space: nowrap; margin: 0; padding: 0; } .validatebox-invalid { border-color: #ffa8a8; background-color: #fff3f3; color: #000; } .tooltip { position: absolute; display: none; z-index: 9900000; outline: none; opacity: 1; filter: alpha(opacity=100); padding: 5px; border-width: 1px; border-style: solid; -moz-border-radius: 0; -webkit-border-radius: 0; border-radius: 0; } .tooltip-content { font-size: 14px; } .tooltip-arrow-outer, .tooltip-arrow { position: absolute; width: 0; height: 0; line-height: 0; font-size: 0; border-style: solid; border-width: 6px; border-color: transparent; } .tooltip-arrow { display: none \9; } .tooltip-right .tooltip-arrow-outer { left: 0; top: 50%; margin: -6px 0 0 -13px; } .tooltip-right .tooltip-arrow { left: 0; top: 50%; margin: -6px 0 0 -12px; } .tooltip-left .tooltip-arrow-outer { right: 0; top: 50%; margin: -6px -13px 0 0; } .tooltip-left .tooltip-arrow { right: 0; top: 50%; margin: -6px -12px 0 0; } .tooltip-top .tooltip-arrow-outer { bottom: 0; left: 50%; margin: 0 0 -13px -6px; } .tooltip-top .tooltip-arrow { bottom: 0; left: 50%; margin: 0 0 -12px -6px; } .tooltip-bottom .tooltip-arrow-outer { top: 0; left: 50%; margin: -13px 0 0 -6px; } .tooltip-bottom .tooltip-arrow { top: 0; left: 50%; margin: -12px 0 0 -6px; } .tooltip { background-color: #ffffff; border-color: #D3D3D3; color: #000000; } .tooltip-right .tooltip-arrow-outer { border-right-color: #D3D3D3; } .tooltip-right .tooltip-arrow { border-right-color: #ffffff; } .tooltip-left .tooltip-arrow-outer { border-left-color: #D3D3D3; } .tooltip-left .tooltip-arrow { border-left-color: #ffffff; } .tooltip-top .tooltip-arrow-outer { border-top-color: #D3D3D3; } .tooltip-top .tooltip-arrow { border-top-color: #ffffff; } .tooltip-bottom .tooltip-arrow-outer { border-bottom-color: #D3D3D3; } .tooltip-bottom .tooltip-arrow { border-bottom-color: #ffffff; } .switchbutton { text-decoration: none; display: inline-block; overflow: hidden; vertical-align: middle; margin: 0; padding: 0; cursor: pointer; background: #bbb; border: 1px solid #bbb; -moz-border-radius: 0; -webkit-border-radius: 0; border-radius: 0; } .switchbutton-inner { display: inline-block; overflow: hidden; position: relative; top: -1px; left: -1px; } .switchbutton-on, .switchbutton-off, .switchbutton-handle { display: inline-block; text-align: center; height: 100%; float: left; font-size: 14px; -moz-border-radius: 0; -webkit-border-radius: 0; border-radius: 0; } .switchbutton-on { background: #0092DC; color: #fff; } .switchbutton-off { background-color: #ffffff; color: #000000; } .switchbutton-on, .switchbutton-reversed .switchbutton-off { -moz-border-radius: 5px 0 0 5px; -webkit-border-radius: 5px 0 0 5px; border-radius: 5px 0 0 5px; } .switchbutton-off, .switchbutton-reversed .switchbutton-on { -moz-border-radius: 0 5px 5px 0; -webkit-border-radius: 0 5px 5px 0; border-radius: 0 5px 5px 0; } .switchbutton-handle { position: absolute; top: 0; left: 50%; background-color: #ffffff; color: #000000; border: 1px solid #bbb; -moz-box-shadow: 0 0 3px 0 #bbb; -webkit-box-shadow: 0 0 3px 0 #bbb; box-shadow: 0 0 3px 0 #bbb; } .switchbutton-value { position: absolute; top: 0; left: -5000px; } .switchbutton-disabled { opacity: 0.5; filter: alpha(opacity=50); } .switchbutton-disabled, .switchbutton-readonly { cursor: default; } .switchbutton:focus { -moz-box-shadow: 0 0 3px 0 #bbb; -webkit-box-shadow: 0 0 3px 0 #bbb; box-shadow: 0 0 3px 0 #bbb; outline: none; } .radiobutton { position: relative; border: 2px solid #0070a9; border-radius: 50%; } .radiobutton-inner { position: absolute; left: 0; top: 0; width: 100%; height: 100%; background: #0070a9; border-radius: 50%; transform: scale(.6); } .radiobutton-disabled { opacity: 0.6; } .radiobutton-value { position: absolute; overflow: hidden; width: 1px; height: 1px; left: -999px; } .checkbox { position: relative; border: 2px solid #0070a9; -moz-border-radius: 0; -webkit-border-radius: 0; border-radius: 0; } .checkbox-checked { border: 0; background: #0070a9; } .checkbox-inner { position: absolute; left: 0; top: 0; width: 100%; height: 100%; } .checkbox path { stroke-width: 2px; } .checkbox-disabled { opacity: 0.6; } .checkbox-value { position: absolute; overflow: hidden; width: 1px; height: 1px; left: -999px; } .sidemenu .tree-hit { background-image: none; } .sidemenu-default-icon { background-image: none; width: 0; } .sidemenu .accordion .accordion-header, .sidemenu .accordion .accordion-body { border-bottom-color: transparent; background: transparent; } .sidemenu .accordion .accordion-header { color: #575765; } .sidemenu .accordion-header .panel-title { height: 30px; line-height: 30px; color: #575765; } .sidemenu .accordion-header:hover { background: #e2e2e2; color: #575765; } .sidemenu .tree-node-hover { background: #e2e2e2; color: #575765; } .sidemenu .tree-node-selected { border-right: 2px solid #0070a9; color: #fff; background: #0092DC; } .sidemenu .tree-node { height: 40px; } .sidemenu .tree-title { margin: 11px 0; } .sidemenu .tree-node-nonleaf { position: relative; } .sidemenu .tree-node-nonleaf::after { display: inline-block; content: ''; position: absolute; top: 50%; margin-top: -8px; background: url('images/accordion_arrows.png') no-repeat 0 0; width: 16px; height: 16px; right: 5px; } .sidemenu .tree-node-nonleaf-collapsed::after { background: url('images/accordion_arrows.png') no-repeat -16px 0; } .sidemenu-collapsed .panel-icon { left: 50%; margin-left: -8px; } .sidemenu-collapsed .collapsed-icon { position: relative; } .sidemenu-collapsed .collapsed-text { text-align: center; } .sidemenu-tooltip { padding: 0; margin: 0 -12px; border: 0; } .sidemenu-tooltip.tooltip-left { margin: 0 12px; } .sidemenu-tooltip .tooltip-arrow-outer, .sidemenu-tooltip .tooltip-arrow { display: none; } .timepicker-panel .clock-wrap { position: relative; } .timepicker-panel .clock { position: relative; background: #f3f3f3; color: #575765; border-radius: 50%; position: absolute; left: 50%; top: 50%; } .timepicker-panel .clock .item { width: 32px; height: 32px; left: 50%; top: 50%; margin-left: -16px; margin-top: -16px; position: absolute; user-select: none; border-radius: 50%; z-index: 9; cursor: pointer; } .timepicker-panel .clock .item-selected { background: #0070a9; color: #fff; } .timepicker-panel .clock .hand { width: 2px; bottom: 50%; left: 50%; margin-left: -1px; top: 20px; -webkit-transform-origin: center bottom; transform-origin: center bottom; position: absolute; will-change: transform; z-index: 1; background-color: #0070a9; } .timepicker-panel .clock .hand .drag { top: -16px; left: -15px; width: 4px; height: 4px; border: 14px solid #0070a9; position: absolute; box-sizing: content-box; border-radius: 100%; background-color: #fff; } .timepicker-panel .clock .center { top: 50%; left: 50%; width: 6px; height: 6px; position: absolute; transform: translate(-50%,-50%); border-radius: 50%; background-color: #0070a9; } .timepicker-panel .panel-header { height: 70px; border: 0; font-size: 36px; position: relative; } .timepicker-panel .body { position: relative; } .timepicker-panel .panel-header .ampm { font-size: 16px; padding-left: 10px; position: absolute; right: 20px; } .timepicker-panel .panel-header .sep { opacity: 0.6; } .timepicker-panel .panel-header .title { cursor: pointer; opacity: 0.6; } .timepicker-panel .panel-header .title:hover { opacity: 1.0; } .timepicker-panel .panel-header .title-selected, .timepicker-panel .panel-header .title-selected:hover { cursor: default; opacity: 1.0; } ================================================ FILE: src/main/resources/static/assets/vendor/easyui-plus-1.0.0/themes/color.css ================================================ .c1,.c1:hover,.c1>.panel-header{ color: #fff; border-color: #3c8b3c; background: #4cae4c; background: -webkit-linear-gradient(top,#4cae4c 0,#449d44 100%); background: -moz-linear-gradient(top,#4cae4c 0,#449d44 100%); background: -o-linear-gradient(top,#4cae4c 0,#449d44 100%); background: linear-gradient(to bottom,#4cae4c 0,#449d44 100%); filter: progid:DXImageTransform.Microsoft.gradient(startColorstr=#4cae4c,endColorstr=#449d44,GradientType=0); } a.c1:hover{ background: #449d44; filter: none; } .c1>.panel-body{ border-color: #3c8b3c; } .c1>.dialog-toolbar,.c1>.dialog-button{ border-left-color: #3c8b3c; border-right-color: #3c8b3c; } .c1>.dialog-button{ border-bottom-color: #3c8b3c; } .c2,.c2:hover,.c2>.panel-header{ color: #fff; border-color: #5f5f5f; background: #747474; background: -webkit-linear-gradient(top,#747474 0,#676767 100%); background: -moz-linear-gradient(top,#747474 0,#676767 100%); background: -o-linear-gradient(top,#747474 0,#676767 100%); background: linear-gradient(to bottom,#747474 0,#676767 100%); filter: progid:DXImageTransform.Microsoft.gradient(startColorstr=#747474,endColorstr=#676767,GradientType=0); } a.c2:hover{ background: #676767; filter: none; } .c2>.panel-body{ border-color: #5f5f5f; } .c2>.dialog-toolbar,.c2>.dialog-button{ border-left-color: #5f5f5f; border-right-color: #5f5f5f; } .c2>.dialog-button{ border-bottom-color: #5f5f5f; } .c3,.c3:hover,.c3>.panel-header{ color: #333; border-color: #ff8080; background: #ffb3b3; background: -webkit-linear-gradient(top,#ffb3b3 0,#ff9999 100%); background: -moz-linear-gradient(top,#ffb3b3 0,#ff9999 100%); background: -o-linear-gradient(top,#ffb3b3 0,#ff9999 100%); background: linear-gradient(to bottom,#ffb3b3 0,#ff9999 100%); filter: progid:DXImageTransform.Microsoft.gradient(startColorstr=#ffb3b3,endColorstr=#ff9999,GradientType=0); } a.c3:hover{ background: #ff9999; filter: none; } .c3>.panel-body{ border-color: #ff8080; } .c3>.dialog-toolbar,.c3>.dialog-button{ border-left-color: #ff8080; border-right-color: #ff8080; } .c3>.dialog-button{ border-bottom-color: #ff8080; } .c4,.c4:hover,.c4>.panel-header{ color: #333; border-color: #52d689; background: #b8eecf; background: -webkit-linear-gradient(top,#b8eecf 0,#a4e9c1 100%); background: -moz-linear-gradient(top,#b8eecf 0,#a4e9c1 100%); background: -o-linear-gradient(top,#b8eecf 0,#a4e9c1 100%); background: linear-gradient(to bottom,#b8eecf 0,#a4e9c1 100%); filter: progid:DXImageTransform.Microsoft.gradient(startColorstr=#b8eecf,endColorstr=#a4e9c1,GradientType=0); } a.c4:hover{ background: #a4e9c1; filter: none; } .c4>.panel-body{ border-color: #52d689; } .c4>.dialog-toolbar,.c4>.dialog-button{ border-left-color: #52d689; border-right-color: #52d689; } .c4>.dialog-button{ border-bottom-color: #52d689; } .c5,.c5:hover,.c5>.panel-header{ color: #fff; border-color: #b52b27; background: #d84f4b; background: -webkit-linear-gradient(top,#d84f4b 0,#c9302c 100%); background: -moz-linear-gradient(top,#d84f4b 0,#c9302c 100%); background: -o-linear-gradient(top,#d84f4b 0,#c9302c 100%); background: linear-gradient(to bottom,#d84f4b 0,#c9302c 100%); filter: progid:DXImageTransform.Microsoft.gradient(startColorstr=#d84f4b,endColorstr=#c9302c,GradientType=0); } a.c5:hover{ background: #c9302c; filter: none; } .c5>.panel-body{ border-color: #b52b27; } .c5>.dialog-toolbar,.c5>.dialog-button{ border-left-color: #b52b27; border-right-color: #b52b27; } .c5>.dialog-button{ border-bottom-color: #b52b27; } .c6,.c6:hover,.c6>.panel-header{ color: #fff; border-color: #1f637b; background: #2984a4; background: -webkit-linear-gradient(top,#2984a4 0,#24748f 100%); background: -moz-linear-gradient(top,#2984a4 0,#24748f 100%); background: -o-linear-gradient(top,#2984a4 0,#24748f 100%); background: linear-gradient(to bottom,#2984a4 0,#24748f 100%); filter: progid:DXImageTransform.Microsoft.gradient(startColorstr=#2984a4,endColorstr=#24748f,GradientType=0); } a.c6:hover{ background: #24748f; filter: none; } .c6>.panel-body{ border-color: #1f637b; } .c6>.dialog-toolbar,.c6>.dialog-button{ border-left-color: #1f637b; border-right-color: #1f637b; } .c6>.dialog-button{ border-bottom-color: #1f637b; } .c7,.c7:hover,.c7>.panel-header{ color: #333; border-color: #e68900; background: #ffab2e; background: -webkit-linear-gradient(top,#ffab2e 0,#ff9900 100%); background: -moz-linear-gradient(top,#ffab2e 0,#ff9900 100%); background: -o-linear-gradient(top,#ffab2e 0,#ff9900 100%); background: linear-gradient(to bottom,#ffab2e 0,#ff9900 100%); filter: progid:DXImageTransform.Microsoft.gradient(startColorstr=#ffab2e,endColorstr=#ff9900,GradientType=0); } a.c7:hover{ background: #ff9900; filter: none; } .c7>.panel-body{ border-color: #e68900; } .c7>.dialog-toolbar,.c7>.dialog-button{ border-left-color: #e68900; border-right-color: #e68900; } .c7>.dialog-button{ border-bottom-color: #e68900; } .c8,.c8:hover,.c8>.panel-header{ color: #fff; border-color: #4b72a4; background: #698cba; background: -webkit-linear-gradient(top,#698cba 0,#577eb2 100%); background: -moz-linear-gradient(top,#698cba 0,#577eb2 100%); background: -o-linear-gradient(top,#698cba 0,#577eb2 100%); background: linear-gradient(to bottom,#698cba 0,#577eb2 100%); filter: progid:DXImageTransform.Microsoft.gradient(startColorstr=#698cba,endColorstr=#577eb2,GradientType=0); } a.c8:hover{ background: #577eb2; filter: none; } .c8>.panel-body{ border-color: #4b72a4; } .c8>.dialog-toolbar,.c8>.dialog-button{ border-left-color: #4b72a4; border-right-color: #4b72a4; } .c8>.dialog-button{ border-bottom-color: #4b72a4; } .c1>.panel-header>.panel-title,.c2>.panel-header>.panel-title, .c5>.panel-header>.panel-title,.c6>.panel-header>.panel-title,.c8>.panel-header>.panel-title{ color: #fff; } .c-plain{ border-color: #fff; background: #fff; } .c-plain>.panel-header, .c-plain>.panel-body, .c-plain>.dialog-button, .c-plain>.dialog-toolbar{ border-color: transparent; background: transparent; } .c-raised{ box-shadow: 0 2px 5px 0 rgba(0, 0, 0, 0.16), 0 2px 10px 0 rgba(0, 0, 0, 0.12); } ================================================ FILE: src/main/resources/static/assets/vendor/easyui-plus-1.0.0/themes/icon.css ================================================ .icon-blank{ background:url('icons/blank.gif') no-repeat center center; } .icon-add{ background:url('icons/edit_add.png') no-repeat center center; } .icon-edit{ background:url('icons/pencil.png') no-repeat center center; } .icon-clear{ background:url('icons/clear.png') no-repeat center center; } .icon-remove{ background:url('icons/edit_remove.png') no-repeat center center; } .icon-save{ background:url('icons/filesave.png') no-repeat center center; } .icon-cut{ background:url('icons/cut.png') no-repeat center center; } .icon-ok{ background:url('icons/ok.png') no-repeat center center; } .icon-no{ background:url('icons/no.png') no-repeat center center; } .icon-cancel{ background:url('icons/cancel.png') no-repeat center center; } .icon-reload{ background:url('icons/reload.png') no-repeat center center; } .icon-search{ background:url('icons/search.png') no-repeat center center; } .icon-print{ background:url('icons/print.png') no-repeat center center; } .icon-help{ background:url('icons/help.png') no-repeat center center; } .icon-undo{ background:url('icons/undo.png') no-repeat center center; } .icon-redo{ background:url('icons/redo.png') no-repeat center center; } .icon-back{ background:url('icons/back.png') no-repeat center center; } .icon-sum{ background:url('icons/sum.png') no-repeat center center; } .icon-tip{ background:url('icons/tip.png') no-repeat center center; } .icon-filter{ background:url('icons/filter.png') no-repeat center center; } .icon-man{ background:url('icons/man.png') no-repeat center center; } .icon-lock{ background:url('icons/lock.png') no-repeat center center; } .icon-more{ background:url('icons/more.png') no-repeat center center; } .icon-mini-add{ background:url('icons/mini_add.png') no-repeat center center; } .icon-mini-edit{ background:url('icons/mini_edit.png') no-repeat center center; } .icon-mini-refresh{ background:url('icons/mini_refresh.png') no-repeat center center; } .icon-large-picture{ background:url('icons/large_picture.png') no-repeat center center; } .icon-large-clipart{ background:url('icons/large_clipart.png') no-repeat center center; } .icon-large-shapes{ background:url('icons/large_shapes.png') no-repeat center center; } .icon-large-smartart{ background:url('icons/large_smartart.png') no-repeat center center; } .icon-large-chart{ background:url('icons/large_chart.png') no-repeat center center; } ================================================ FILE: src/main/resources/static/assets/vendor/easyui-plus-1.0.0/themes/mobile.css ================================================ *{ box-sizing: border-box; } .m-toolbar{ position: relative; text-align: center; min-height: 34px; } .m-toolbar .m-title{ line-height: 34px; font-size: 16px; font-weight: bold; text-align: center; } .m-left{ position: absolute; height: 100%; vertical-align: middle; top:0; left:0; z-index: 1; } .m-right{ position: absolute; height: 100%; vertical-align: middle; top:0; right:0; z-index: 1; } .m-left>.l-btn,.m-right>.l-btn, .m-left>.switchbutton,.m-right>.switchbutton{ position: relative; vertical-align: top; top: 50%; margin-top: -15px; } .m-back::before,.m-next::after{ display: inline-block; box-sizing: border-box; vertical-align: top; border-style: solid; -webkit-transform:rotate(45deg); transform:rotate(45deg); width: 12px; height: 12px; content: ''; position: absolute; top: 50%; margin-top: -6px; } .m-back::before{ border-width: 0 0 1px 1px; left: 8px; } .m-next::after{ border-width: 1px 1px 0 0; right: 8px; } .m-back .l-btn-text{ padding-left: 12px; } .m-next .l-btn-text{ padding-right: 12px; } .m-buttongroup{ display: inline-block; margin: 0; padding: 0; overflow: hidden; vertical-align: middle; } .m-buttongroup .l-btn{ float: left; margin-left: -1px; } .m-buttongroup .l-btn:last-child::after{ content: ''; clear: both; } .m-buttongroup .l-btn:not(:first-child):not(:last-child){ border-radius: 0; } .m-buttongroup .l-btn:first-child{ border-top-right-radius: 0; border-bottom-right-radius: 0; margin-left: 0; } .m-buttongroup .l-btn:last-child{ border-top-left-radius: 0; border-bottom-left-radius: 0; } .m-buttongroup-justified{ display: table; table-layout: fixed; } .m-buttongroup-justified .l-btn{ float: none; display: table-cell; } .m-badge:not(.l-btn), .l-btn.m-badge::after{ display: inline-block; min-width: 10px; line-height: 1; font-size: 12px; text-align: center; white-space: nowrap; border-radius: 10px; padding: 2px 4px; border-style: solid; border-width: 0px; background-color: #d9534f; color: #fff; z-index: 99999; } .l-btn.m-badge::after, .l-btn .m-badge{ position: absolute; top: -10px; right: -10px; } .tabs-inner .m-badge{ position: absolute; top: 1px; right: -10px; } .tabs-inner>.tabs-title>.m-badge{ top: 0; right: 0; } .tabs-header-bottom .tabs-inner>.tabs-title>.m-badge{ top: auto; bottom: 0; right: 0; } .panel-footer .l-btn .l-btn-icon-top .m-badge, .panel-footer .l-btn .l-btn-icon-bottom .m-badge{ top: 0; right: -10px; } .l-btn.m-badge::after{ content: attr(data-badge); } .l-btn,.l-btn-left{ overflow: visible; position: relative; } .m-in{ -webkit-animation-timing-function: ease-out; -webkit-animation-duration: 250ms; } .m-out{ -webkit-animation-timing-function: ease-in; -webkit-animation-duration: 250ms; } .m-slide-left.m-in{ -webkit-animation-name: slideLeftIn; } .m-slide-left.m-out{ -webkit-animation-name: slideLeftOut; } .m-slide-right.m-in{ -webkit-animation-name: slideRightIn; } .m-slide-right.m-out{ -webkit-animation-name: slideRightOut; } .m-slide-up.m-in{ -webkit-animation-name: slideUpIn; } .m-slide-up.m-out{ -webkit-animation-name: slideUpOut; } .m-slide-down.m-in{ -webkit-animation-name: slideDownIn; } .m-slide-down.m-out{ -webkit-animation-name: slideDownOut; } @-webkit-keyframes slideLeftIn{ from {-webkit-transform: translateX(100%);} to {-webkit-transform: translateX(0);} } @-webkit-keyframes slideLeftOut{ from {-webkit-transform: translateX(0);} to {-webkit-transform: translateX(-100%);} } @-webkit-keyframes slideRightIn{ from {-webkit-transform: translateX(-100%);} to {-webkit-transform: translateX(0);} } @-webkit-keyframes slideRightOut{ from {-webkit-transform: translateX(0);} to {-webkit-transform: translateX(100%);} } @-webkit-keyframes slideUpIn{ from {-webkit-transform: translateY(100%);} to {-webkit-transform: translateY(0);} } @-webkit-keyframes slideUpOut{ from {-webkit-transform: translateY(0);} to {-webkit-transform: translateY(-100%);} } @-webkit-keyframes slideDownIn{ from {-webkit-transform: translateY(-100%);} to {-webkit-transform: translateY(0);} } @-webkit-keyframes slideDownOut{ from {-webkit-transform: translateY(0);} to {-webkit-transform: translateY(100%);} } .m-fade.m-in{ -webkit-animation-name: fadeIn; } .m-fade.m-out{ -webkit-animation-name: fadeOut; } @-webkit-keyframes fadeIn{ from {opacity: 0;} to {opacity: 1} } @-webkit-keyframes fadeOut{ from {opacity: 1;} to {opacity: 0;} } .m-pop.m-in{ -webkit-animation-name: popIn; } .m-pop.m-out{ -webkit-animation-name: popOut; } @-webkit-keyframes popIn{ from { opacity: 0; -webkit-transform: scale(.2); } to { opacity: 1; -webkit-transform: scale(1); } } @-webkit-keyframes popOut{ from { opacity: 1; -webkit-transform: scale(1); } to { opacity: 0; -webkit-transform: scale(0); } } .navpanel{ position: absolute; } .textbox .textbox-text{ padding: 0 4px; height: 30px; line-height: 30px; } .calendar-header,.calendar-title{ height: 30px; } .calendar-title span{ height: 30px; line-height: 30px } .datebox-button{ height: 24px; } .datebox-button a{ line-height: 24px; } .tree-node{ box-sizing: border-box; height: 32px; padding: 3px 0; } .panel-title{ height: 26px; line-height: 26px; } .window{ padding: 5px 0 0 0; } .window-shadow{ -moz-box-shadow: 0 0 30px 0 #D3D3D3; -webkit-box-shadow: 0 0 30px 0 #D3D3D3; box-shadow: 0 0 30px 0 #D3D3D3; } .window-header .panel-title{ height: 26px; line-height: 26px; text-align: center; } .window-header .panel-tool{ display: none; } .window .window-body{ border: 0; } .dialog-button{ border-color: transparent; overflow: hidden; } .dialog-button .l-btn{ margin: 0; } .tabs-justified, .tabs-justified .l-btn, .tabs-justified li a.tabs-inner, .tabs-justified li.tabs-selected a.tabs-inner, .tabs-header-bottom .tabs-justified li.tabs-selected a.tabs-inner, .tabs-header-bottom .tabs-justified li a.tabs-inner{ -moz-border-radius:0; -webkit-border-radius:0; border-radius:0; } .datagrid-row,.datagrid-header-row{ height: 32px; } .datalist .datagrid-group-title, .m-list .m-list-group{ padding: 0 10px; } .datalist .datagrid-cell, .m-list li{ padding: 10px; } .m-list li .m-right{ right: 10px; } .datalist .datalist-link, .m-list li>a{ margin: -10px; padding: 10px; padding-right: 24px; } .m-list li>a .m-right{ right: 24px; } .datalist .datalist-link::after, .m-list li>a::after{ right: 12px; } ================================================ FILE: src/main/resources/static/assets/vendor/easyui-plus-1.0.0/themes/vue.css ================================================ *{ box-sizing: border-box; } .f-block{ display: block; position: relative; } .f-row{ display: -webkit-box; display: -webkit-flex; display: -moz-flex; display: -ms-flexbox; display: flex; position: relative; } .f-column{ display: -webkit-box; display: -webkit-flex; display: -moz-flex; display: -ms-flexbox; display: flex; -webkit-box-direction: normal; -webkit-box-orient: vertical; -webkit-flex-direction: column; -moz-flex-direction: column; -ms-flex-direction: column; flex-direction: column; position: relative; } .f-inline-row{ white-space: nowrap; display: -webkit-inline-box; display: -ms-inline-box; display: inline-flex; vertical-align: middle; position: relative; align-items: stretch; -webkit-tap-highlight-color: transparent; } .f-content-center{ -webkit-box-pack: center; -ms-flex-pack: center; -webkit-justify-content: center; -moz-justify-content: center; justify-content: center; -webkit-box-align: center; -ms-flex-align: center; -webkit-align-items: center; -moz-align-items: center; align-items: center; } .f-full{ -webkit-box-flex: 1 1 auto; -ms-flex: 1 1 auto; flex: 1 1 auto; } .f-hide{ display: none; } .f-order0{ order: 0; } .f-order1{ order: 1; } .f-order2{ order: 2; } .f-order3{ order: 3; } .f-order4{ order: 4; } .f-order5{ order: 5; } .f-order6{ order: 6; } .f-order7{ order: 7; } .f-order8{ order: 8; } .f-noshrink{ -webkit-flex-shrink: 0; -moz-flex-shrink: 0; -ms-flex-negative: 0; flex-shrink: 0; } .f-animate{ transition: all .3s; } .f-field{ width: 12em; height: 30px; } .scroll-body{ overflow: auto; position: relative; } .textbox .textbox-text{ width: 100%; height: auto; overflow: hidden; } .textbox-addon{ align-items: center; } .textbox textarea.textbox-text{ height: auto; overflow: auto; } .textbox-disabled>.textbox-addon .textbox-icon, .textbox-readonly>.textbox-addon .textbox-icon{ cursor: default; } .textbox-disabled>.textbox-addon .textbox-icon:hover, .textbox-readonly>.textbox-addon .textbox-icon:hover{ opacity: 0.6; cursor: default; } .textbox-addon .textbox-icon{ width: 26px; height: 18px; } .spinner .textbox-text{ height: auto; } .spinner-button-left,.spinner-button-right{ width: 26px; } .spinner-button-updown{ width: 26px; } .spinner-button-top,.spinner-button-bottom{ position: absolute; width: 100%; height: 26px; } .spinner-button-top{ top: 0; } .spinner-button-bottom{ top: auto; bottom: 0; } .spinner-button{ display: inline-block; position: absolute; width: 16px; height: 16px; left: 50%; margin-left: -8px; top: 50%; margin-top: -8px; } .spinner-arrow{ cursor: pointer; opacity: 0.6; } .textbox-disabled .spinner-arrow:hover, .textbox-readonly .spinner-arrow:hover { opacity: 0.6; cursor: default; } .textbox-readonly .spinner-arrow .spinner-arrow-up:hover, .textbox-disabled .spinner-arrow .spinner-arrow-up:hover, .textbox-readonly .spinner-arrow .spinner-arrow-down:hover, .textbox-disabled .spinner-arrow .spinner-arrow-down:hover { cursor: default; } .l-btn{ width1: 100%; } .l-btn-empty{ height: 28px; } .l-btn-large .l-btn-empty{ height: 44px; } .l-btn-left{ overflow: visible; } .m-btn .l-btn-left .m-btn-line{ top: -100px; width: 36px; right: -20px; } .button-group .l-btn.f-inline-row{ margin-left: -1px; } .button-group .l-btn:hover{ z-index: 99; } .button-group .l-btn:not(:first-child):not(:last-child){ border-radius: 0; } .button-group .l-btn:first-child{ border-top-right-radius: 0; border-bottom-right-radius: 0; } .button-group .l-btn:last-child{ border-top-left-radius: 0; border-bottom-left-radius: 0; } .switchbutton{ width: 70px; height: 30px; } .switchbutton-on,.switchbutton-off{ position: absolute; left: 0; width: calc(100% - 15px); height: 100%; } .switchbutton-on span,.switchbutton-off span,.switchbutton-handle span{ height: 100%; } .switchbutton-on span{ text-indent: -15px; } .switchbutton-off span{ text-indent: 15px; } .switchbutton-off{ left: calc(100% - 15px); } .switchbutton-handle{ width: 30px; left: auto; right: 0; z-index: 9; } .switchbutton-inner{ transition: all 200ms ease-out; overflow: visible; position: absolute; width: 100%; top: -1px; bottom: -1px; left: calc(-100% + 30px); right: auto; } .switchbutton-checked .switchbutton-inner{ left: 0; } .draggable-reverting{ transition: all 200ms ease-out; } .slider-h .slider-tip{ transform: translateX(-50%); } .slider-h .slider-rulelabel span{ transform: translateX(-50%); } .slider-v .slider-tip{ margin-top: 0; transform: translate(-100%,-50%); } .slider-v .slider-rulelabel span{ transform: translateY(-50%); } .slider-v .slider-inner{ height: auto; } .panel{ position:relative; } .panel-title{ height: 20px; line-height: 20px; } .panel-footer-fixed{ position:absolute; width:100%; bottom:0; } .window{ position: absolute; } .window-mask{ position: fixed; } .window .window-footer{ top: 0; } .dialog-toolbar{ border-width: 0 0 1px 0; } .dialog-button{ border-width: 1px 0 0 0; top: 0; } .tabs{ width: 100%; height: auto; } .tabs-scrollable{ transition: left 400ms, right 400ms; position: absolute; width: auto; height: 100%; left: 0; top: 0; } .tabs li{ display: inherit; } .tabs li a.tabs-inner{ height: auto; line-height: normal; display: inherit; overflow: hidden; } .tabs-title{ display: inherit; align-items: center; line-height: normal; } .tabs-close{ outline: none; } .tabs-scroller-left,.tabs-scroller-right{ position: relative; display: block; width: 21px; height: 100%; } .tabs-header-left .tabs li{ right: -1px; } .tabs-header-left .tabs li,.tabs-header-right .tabs li, .tabs-header-left .tabs li a.tabs-inner, .tabs-header-right .tabs li a.tabs-inner{ display: inherit; } .combo-panel{ position: absolute; height: 200px; z-index: 9999; } .combo-panel .tree, .combo-panel eui-datagrid, .combo-panel eui-treegrid{ width: 100%; height: 100%; } .combobox-item{ padding: 6px 4px; line-height: 20px; } .tagbox-labels{ padding-bottom: 4px; } .tagbox-label{ height: 20px; line-height: 20px; } .tagbox .textbox-text{ width: 50px; max-width: 100%; margin-top: 4px; padding-top: 0; padding-bottom: 0; height: 20px; line-height: 20px; } .datagrid, .datagrid-view,.datagrid-view1,.datagrid-view2{ position: relative; } .datagrid-vbody{ overflow: hidden; } .datagrid-view3{ margin-left: -1px; } .datagrid-view3 .datagrid-body{ overflow: hidden; } .datagrid-view3 .datagrid-body-inner{ padding-bottom: 20px; } .datagrid-view3 .datagrid-header td, .datagrid-view3 .datagrid-body td, .datagrid-view3 .datagrid-footer td { border-width: 0 0 1px 1px; } .datagrid-htable,.datagrid-btable,.datagrid-ftable{ table-layout: fixed; width: 100%; } .datagrid-htable{ height: 100%; } .datagrid-header .datagrid-header, .datagrid-footer .datagrid-header{ border-width: 0 0 0 1px; } .datagrid-header-inner,.datagrid-footer-inner{ overflow: hidden; } .datagrid-header-row, .datagrid-row{ height: 32px; } .datagrid-header td.datagrid-field-td{ border-bottom: 0; } .datagrid-cell{ text-align: left; height: auto; font-size: inherit; } .datagrid-cell-group{ text-align: center; } .datagrid .datagrid-pager{ padding: 2px 4px; display: inherit; } .datagrid-loading{ position: absolute; left: 0; top: 0; width: 100%; height: 100%; justify-content: center; align-items: center; } .datagrid-mask{ display: block; } .datagrid-mask-msg{ display: block; position: static; line-height: 36px; height: 40px; margin: 0; padding: 0 5px 0 30px; z-index: 9; } .datagrid-body .datagrid-td-group{ border-left-color: transparent; border-right-color: transparent; } .datagrid-group-expander{ cursor: pointer; } .datagrid-row-expander{ display: inline-block; width: 16px; height: 18px; cursor: pointer; } .datagrid-group-title{ align-self: center; padding: 0 4px; white-space: nowrap; word-break: normal; position: relative; } .datagrid-editable> .f-field, .datagrid-editable> *{ width: 100%; height: 31px; } .datagrid-editable .textbox, .datagrid-editable .textbox-text{ border-radius: 0; } .datagrid-filter-row .textbox{ border-radius: 0; } .datagrid-filter-c{ padding: 4px; height: 38px; } .datagrid-filter-c> .f-field, .datagrid-filter-c> *{ height: 30px; } .datagrid-filter-c .datagrid-editable-input{ width: 100%; } .datagrid-filter-btn{ width: 30px; } .datagrid-filter-btn .textbox-icon{ width: 28px; } .datagrid-filter-btn .textbox{ background-color: transparent; } .datagrid-filter-btn-left{ margin-right: 4px; } .datagrid-filter-btn-right{ margin-left: 4px; } .menu-inline{ position: relative; display: inline; margin: 0; padding: 0; } .menu-inline> .menu-container{ position: relative; } .menu-container{ position: absolute; left: 0; top: 0; min-width: 200px; } .menu{ overflow: visible; } .menu-shadow{ width: 100%; height: 100%; left: 0; top: 0; } .menu-item{ overflow: visible; } .menu-text{ height: 32px; line-height: 32px; float: none; } .menu-line{ z-index: 9999999; height: 100%; } .menu-active{ z-index: 99999999; } .progressbar-value{ overflow: visible; } .searchbox .textbox-button, .searchbox .textbox-button:hover{ position: inherit; } .calendar-content{ position: absolute; width: 100%; height: 100%; left: 0; top: 0; } .calendar-menu{ position: absolute; width: 100%; height: 100%; } .calendar-menu-month-inner{ position: relative; } .radiobutton{ width: 20px; height: 20px; } .checkbox{ width: 20px; height: 20px; } .progressbar{ height: 24px; } .pagination1{ height: 34px; padding: 2px; } .layout{ height: 100%; } .layout-animate{ transition: transform 400ms; } .layout-panel-north,.layout-panel-south{ position: absolute; width: 100%; left: 0; top: 0; } .layout-panel-south{ top: auto; bottom: 0; } .layout-panel-west,.layout-panel-east{ position: absolute; left: 0; top: 0; bottom: 0; } .layout-panel-east{ left: auto; right: 0; } .layout-panel-west.layout-collapsed{ transform: translate3d(-100%, 0, 0); } .layout-panel-east.layout-collapsed{ transform: translate3d(100%, 0, 0) } .layout-panel-north.layout-collapsed{ transform: translate3d(0, -100%, 0) } .layout-panel-south.layout-collapsed{ transform: translate3d(0, 100%, 0) } ================================================ FILE: src/main/resources/static/assets/vendor/echarts.min.js ================================================ !function(t,e){"object"==typeof exports&&"undefined"!=typeof module?e(exports):"function"==typeof define&&define.amd?define(["exports"],e):e(t.echarts={})}(this,function(t){"use strict";function e(t,e){ey[t]=e}function i(t){if(null==t||"object"!=typeof t)return t;var e=t,n=qv.call(t);if("[object Array]"===n){e=[];for(var o=0,a=t.length;o_y||t<-_y}function ft(t){this._target=t.target,this._life=t.life||1e3,this._delay=t.delay||0,this._initialized=!1,this.loop=null!=t.loop&&t.loop,this.gap=t.gap||0,this.easing=t.easing||"Linear",this.onframe=t.onframe,this.ondestroy=t.ondestroy,this.onrestart=t.onrestart,this._pausedTime=0,this._paused=!1}function gt(t){return(t=Math.round(t))<0?0:t>255?255:t}function pt(t){return(t=Math.round(t))<0?0:t>360?360:t}function mt(t){return t<0?0:t>1?1:t}function vt(t){return gt(t.length&&"%"===t.charAt(t.length-1)?parseFloat(t)/100*255:parseInt(t,10))}function yt(t){return mt(t.length&&"%"===t.charAt(t.length-1)?parseFloat(t)/100:parseFloat(t))}function xt(t,e,i){return i<0?i+=1:i>1&&(i-=1),6*i<1?t+(e-t)*i*6:2*i<1?e:3*i<2?t+(e-t)*(2/3-i)*6:t}function _t(t,e,i){return t+(e-t)*i}function bt(t,e,i,n,o){return t[0]=e,t[1]=i,t[2]=n,t[3]=o,t}function wt(t,e){return t[0]=e[0],t[1]=e[1],t[2]=e[2],t[3]=e[3],t}function St(t,e){Py&&wt(Py,e),Py=ky.put(t,Py||e.slice())}function Mt(t,e){if(t){e=e||[];var i=ky.get(t);if(i)return wt(e,i);var n=(t+="").replace(/ /g,"").toLowerCase();if(n in Ly)return wt(e,Ly[n]),St(t,e),e;if("#"!==n.charAt(0)){var o=n.indexOf("("),a=n.indexOf(")");if(-1!==o&&a+1===n.length){var r=n.substr(0,o),s=n.substr(o+1,a-(o+1)).split(","),l=1;switch(r){case"rgba":if(4!==s.length)return void bt(e,0,0,0,1);l=yt(s.pop());case"rgb":return 3!==s.length?void bt(e,0,0,0,1):(bt(e,vt(s[0]),vt(s[1]),vt(s[2]),l),St(t,e),e);case"hsla":return 4!==s.length?void bt(e,0,0,0,1):(s[3]=yt(s[3]),It(s,e),St(t,e),e);case"hsl":return 3!==s.length?void bt(e,0,0,0,1):(It(s,e),St(t,e),e);default:return}}bt(e,0,0,0,1)}else{if(4===n.length)return(h=parseInt(n.substr(1),16))>=0&&h<=4095?(bt(e,(3840&h)>>4|(3840&h)>>8,240&h|(240&h)>>4,15&h|(15&h)<<4,1),St(t,e),e):void bt(e,0,0,0,1);if(7===n.length){var h=parseInt(n.substr(1),16);return h>=0&&h<=16777215?(bt(e,(16711680&h)>>16,(65280&h)>>8,255&h,1),St(t,e),e):void bt(e,0,0,0,1)}}}}function It(t,e){var i=(parseFloat(t[0])%360+360)%360/360,n=yt(t[1]),o=yt(t[2]),a=o<=.5?o*(n+1):o+n-o*n,r=2*o-a;return e=e||[],bt(e,gt(255*xt(r,a,i+1/3)),gt(255*xt(r,a,i)),gt(255*xt(r,a,i-1/3)),1),4===t.length&&(e[3]=t[3]),e}function Tt(t){if(t){var e,i,n=t[0]/255,o=t[1]/255,a=t[2]/255,r=Math.min(n,o,a),s=Math.max(n,o,a),l=s-r,h=(s+r)/2;if(0===l)e=0,i=0;else{i=h<.5?l/(s+r):l/(2-s-r);var u=((s-n)/6+l/2)/l,c=((s-o)/6+l/2)/l,d=((s-a)/6+l/2)/l;n===s?e=d-c:o===s?e=1/3+u-d:a===s&&(e=2/3+c-u),e<0&&(e+=1),e>1&&(e-=1)}var f=[360*e,i,h];return null!=t[3]&&f.push(t[3]),f}}function At(t,e){var i=Mt(t);if(i){for(var n=0;n<3;n++)i[n]=e<0?i[n]*(1-e)|0:(255-i[n])*e+i[n]|0;return Ot(i,4===i.length?"rgba":"rgb")}}function Ct(t){var e=Mt(t);if(e)return((1<<24)+(e[0]<<16)+(e[1]<<8)+ +e[2]).toString(16).slice(1)}function Dt(t,e,i){if(e&&e.length&&t>=0&&t<=1){i=i||[];var n=t*(e.length-1),o=Math.floor(n),a=Math.ceil(n),r=e[o],s=e[a],l=n-o;return i[0]=gt(_t(r[0],s[0],l)),i[1]=gt(_t(r[1],s[1],l)),i[2]=gt(_t(r[2],s[2],l)),i[3]=mt(_t(r[3],s[3],l)),i}}function Lt(t,e,i){if(e&&e.length&&t>=0&&t<=1){var n=t*(e.length-1),o=Math.floor(n),a=Math.ceil(n),r=Mt(e[o]),s=Mt(e[a]),l=n-o,h=Ot([gt(_t(r[0],s[0],l)),gt(_t(r[1],s[1],l)),gt(_t(r[2],s[2],l)),mt(_t(r[3],s[3],l))],"rgba");return i?{color:h,leftIndex:o,rightIndex:a,value:n}:h}}function kt(t,e,i,n){if(t=Mt(t))return t=Tt(t),null!=e&&(t[0]=pt(e)),null!=i&&(t[1]=yt(i)),null!=n&&(t[2]=yt(n)),Ot(It(t),"rgba")}function Pt(t,e){if((t=Mt(t))&&null!=e)return t[3]=mt(e),Ot(t,"rgba")}function Ot(t,e){if(t&&t.length){var i=t[0]+","+t[1]+","+t[2];return"rgba"!==e&&"hsva"!==e&&"hsla"!==e||(i+=","+t[3]),e+"("+i+")"}}function zt(t,e){return t[e]}function Nt(t,e,i){t[e]=i}function Et(t,e,i){return(e-t)*i+t}function Rt(t,e,i){return i>.5?e:t}function Vt(t,e,i,n,o){var a=t.length;if(1==o)for(s=0;so)t.length=o;else for(r=n;r=0&&!(m[i]<=e);i--);i=Math.min(i,h-2)}else{for(i=L;ie);i++);i=Math.min(i-1,h-2)}L=i,k=e;var n=m[i+1]-m[i];if(0!==n)if(I=(e-m[i])/n,l)if(A=v[i],T=v[0===i?i:i-1],C=v[i>h-2?h-1:i+1],D=v[i>h-3?h-1:i+2],d)Wt(T,A,C,D,I,I*I,I*I*I,r(t,o),p);else{if(f)a=Wt(T,A,C,D,I,I*I,I*I*I,P,1),a=Zt(P);else{if(g)return Rt(A,C,I);a=Ht(T,A,C,D,I,I*I,I*I*I)}s(t,o,a)}else if(d)Vt(v[i],v[i+1],I,r(t,o),p);else{var a;if(f)Vt(v[i],v[i+1],I,P,1),a=Zt(P);else{if(g)return Rt(v[i],v[i+1],I);a=Et(v[i],v[i+1],I)}s(t,o,a)}},ondestroy:i});return e&&"spline"!==e&&(O.easing=e),O}}}function jt(t,e,i,n){i<0&&(t+=i,i=-i),n<0&&(e+=n,n=-n),this.x=t,this.y=e,this.width=i,this.height=n}function qt(t){for(var e=0;t>=qy;)e|=1&t,t>>=1;return t+e}function Yt(t,e,i,n){var o=e+1;if(o===i)return 1;if(n(t[o++],t[e])<0){for(;o=0;)o++;return o-e}function $t(t,e,i){for(i--;e>>1])<0?l=a:s=a+1;var h=n-s;switch(h){case 3:t[s+3]=t[s+2];case 2:t[s+2]=t[s+1];case 1:t[s+1]=t[s];break;default:for(;h>0;)t[s+h]=t[s+h-1],h--}t[s]=r}}function Jt(t,e,i,n,o,a){var r=0,s=0,l=1;if(a(t,e[i+o])>0){for(s=n-o;l0;)r=l,(l=1+(l<<1))<=0&&(l=s);l>s&&(l=s),r+=o,l+=o}else{for(s=o+1;ls&&(l=s);var h=r;r=o-l,l=o-h}for(r++;r>>1);a(t,e[i+u])>0?r=u+1:l=u}return l}function Qt(t,e,i,n,o,a){var r=0,s=0,l=1;if(a(t,e[i+o])<0){for(s=o+1;ls&&(l=s);var h=r;r=o-l,l=o-h}else{for(s=n-o;l=0;)r=l,(l=1+(l<<1))<=0&&(l=s);l>s&&(l=s),r+=o,l+=o}for(r++;r>>1);a(t,e[i+u])<0?l=u:r=u+1}return l}function te(t,e){function i(i){var s=a[i],h=r[i],u=a[i+1],c=r[i+1];r[i]=h+c,i===l-3&&(a[i+1]=a[i+2],r[i+1]=r[i+2]),l--;var d=Qt(t[u],t,s,h,0,e);s+=d,0!==(h-=d)&&0!==(c=Jt(t[s+h-1],t,u,c,c-1,e))&&(h<=c?n(s,h,u,c):o(s,h,u,c))}function n(i,n,o,a){var r=0;for(r=0;r=Yy||f>=Yy);if(g)break;p<0&&(p=0),p+=2}if((s=p)<1&&(s=1),1===n){for(r=0;r=0;r--)t[f+r]=t[d+r];if(0===n){v=!0;break}}if(t[c--]=h[u--],1==--a){v=!0;break}if(0!=(m=a-Jt(t[l],h,0,a,a-1,e))){for(a-=m,f=(c-=m)+1,d=(u-=m)+1,r=0;r=Yy||m>=Yy);if(v)break;g<0&&(g=0),g+=2}if((s=g)<1&&(s=1),1===a){for(f=(c-=n)+1,d=(l-=n)+1,r=n-1;r>=0;r--)t[f+r]=t[d+r];t[c]=h[u]}else{if(0===a)throw new Error;for(d=c-(a-1),r=0;r=0;r--)t[f+r]=t[d+r];t[c]=h[u]}else for(d=c-(a-1),r=0;r1;){var t=l-2;if(t>=1&&r[t-1]<=r[t]+r[t+1]||t>=2&&r[t-2]<=r[t]+r[t-1])r[t-1]r[t+1])break;i(t)}},this.forceMergeRuns=function(){for(;l>1;){var t=l-2;t>0&&r[t-1]s&&(l=s),Kt(t,i,i+l,i+a,e),a=l}r.pushRun(i,a),r.mergeRuns(),o-=a,i+=a}while(0!==o);r.forceMergeRuns()}}function ie(t,e){return t.zlevel===e.zlevel?t.z===e.z?t.z2-e.z2:t.z-e.z:t.zlevel-e.zlevel}function ne(t,e,i){var n=null==e.x?0:e.x,o=null==e.x2?1:e.x2,a=null==e.y?0:e.y,r=null==e.y2?0:e.y2;return e.global||(n=n*i.width+i.x,o=o*i.width+i.x,a=a*i.height+i.y,r=r*i.height+i.y),t.createLinearGradient(n,a,o,r)}function oe(t,e,i){var n=i.width,o=i.height,a=Math.min(n,o),r=null==e.x?.5:e.x,s=null==e.y?.5:e.y,l=null==e.r?.5:e.r;return e.global||(r=r*n+i.x,s=s*o+i.y,l*=a),t.createRadialGradient(r,s,0,r,s,l)}function ae(){return!1}function re(t,e,i){var n=iy(),o=e.getWidth(),a=e.getHeight(),r=n.style;return r.position="absolute",r.left=0,r.top=0,r.width=o+"px",r.height=a+"px",n.width=o*i,n.height=a*i,n.setAttribute("data-zr-dom-id",t),n}function se(t){if("string"==typeof t){var e=ax.get(t);return e&&e.image}return t}function le(t,e,i,n,o){if(t){if("string"==typeof t){if(e&&e.__zrImageSrc===t||!i)return e;var a=ax.get(t),r={hostEl:i,cb:n,cbPayload:o};return a?!ue(e=a.image)&&a.pending.push(r):(!e&&(e=new Image),e.onload=he,ax.put(t,e.__cachedImgObj={image:e,pending:[r]}),e.src=e.__zrImageSrc=t),e}return t}return e}function he(){var t=this.__cachedImgObj;this.onload=this.__cachedImgObj=null;for(var e=0;elx&&(sx=0,rx={}),sx++,rx[i]=o,o}function de(t,e,i,n,o,a,r){return a?ge(t,e,i,n,o,a,r):fe(t,e,i,n,o,r)}function fe(t,e,i,n,o,a){var r=Me(t,e,o,a),s=ce(t,e);o&&(s+=o[1]+o[3]);var l=r.outerHeight,h=new jt(pe(0,s,i),me(0,l,n),s,l);return h.lineHeight=r.lineHeight,h}function ge(t,e,i,n,o,a,r){var s=Ie(t,{rich:a,truncate:r,font:e,textAlign:i,textPadding:o}),l=s.outerWidth,h=s.outerHeight;return new jt(pe(0,l,i),me(0,h,n),l,h)}function pe(t,e,i){return"right"===i?t-=e:"center"===i&&(t-=e/2),t}function me(t,e,i){return"middle"===i?t-=e/2:"bottom"===i&&(t-=e),t}function ve(t,e,i){var n=e.x,o=e.y,a=e.height,r=e.width,s=a/2,l="left",h="top";switch(t){case"left":n-=i,o+=s,l="right",h="middle";break;case"right":n+=i+r,o+=s,h="middle";break;case"top":n+=r/2,o-=i,l="center",h="bottom";break;case"bottom":n+=r/2,o+=a+i,l="center";break;case"inside":n+=r/2,o+=s,l="center",h="middle";break;case"insideLeft":n+=i,o+=s,h="middle";break;case"insideRight":n+=r-i,o+=s,l="right",h="middle";break;case"insideTop":n+=r/2,o+=i,l="center";break;case"insideBottom":n+=r/2,o+=a-i,l="center",h="bottom";break;case"insideTopLeft":n+=i,o+=i;break;case"insideTopRight":n+=r-i,o+=i,l="right";break;case"insideBottomLeft":n+=i,o+=a-i,h="bottom";break;case"insideBottomRight":n+=r-i,o+=a-i,l="right",h="bottom"}return{x:n,y:o,textAlign:l,textVerticalAlign:h}}function ye(t,e,i,n,o){if(!e)return"";var a=(t+"").split("\n");o=xe(e,i,n,o);for(var r=0,s=a.length;r=r;l++)s-=r;var h=ce(i);return h>s&&(i="",h=0),s=t-h,n.ellipsis=i,n.ellipsisWidth=h,n.contentWidth=s,n.containerWidth=t,n}function _e(t,e){var i=e.containerWidth,n=e.font,o=e.contentWidth;if(!i)return"";var a=ce(t,n);if(a<=i)return t;for(var r=0;;r++){if(a<=o||r>=e.maxIterations){t+=e.ellipsis;break}var s=0===r?be(t,o,e.ascCharWidth,e.cnCharWidth):a>0?Math.floor(t.length*o/a):0;a=ce(t=t.substr(0,s),n)}return""===t&&(t=e.placeholder),t}function be(t,e,i,n){for(var o=0,a=0,r=t.length;al)t="",a=[];else if(null!=h)for(var u=xe(h-(i?i[1]+i[3]:0),e,n.ellipsis,{minChar:n.minChar,placeholder:n.placeholder}),c=0,d=a.length;co&&Te(i,t.substring(o,a)),Te(i,n[2],n[1]),o=hx.lastIndex}of)return{lines:[],width:0,height:0};k.textWidth=ce(k.text,_);var w=y.textWidth,S=null==w||"auto"===w;if("string"==typeof w&&"%"===w.charAt(w.length-1))k.percentWidth=w,h.push(k),w=0;else{if(S){w=k.textWidth;var M=y.textBackgroundColor,I=M&&M.image;I&&ue(I=se(I))&&(w=Math.max(w,I.width*b/I.height))}var C=x?x[1]+x[3]:0;w+=C;var D=null!=d?d-m:null;null!=D&&Dl&&(i*=l/(c=i+n),n*=l/c),o+a>l&&(o*=l/(c=o+a),a*=l/c),n+o>h&&(n*=h/(c=n+o),o*=h/c),i+a>h&&(i*=h/(c=i+a),a*=h/c),t.moveTo(r+i,s),t.lineTo(r+l-n,s),0!==n&&t.quadraticCurveTo(r+l,s,r+l,s+n),t.lineTo(r+l,s+h-o),0!==o&&t.quadraticCurveTo(r+l,s+h,r+l-o,s+h),t.lineTo(r+a,s+h),0!==a&&t.quadraticCurveTo(r,s+h,r,s+h-a),t.lineTo(r,s+i),0!==i&&t.quadraticCurveTo(r,s,r+i,s)}function De(t){return Le(t),d(t.rich,Le),t}function Le(t){if(t){t.font=Ae(t);var e=t.textAlign;"middle"===e&&(e="center"),t.textAlign=null==e||dx[e]?e:"left";var i=t.textVerticalAlign||t.textBaseline;"center"===i&&(i="middle"),t.textVerticalAlign=null==i||fx[i]?i:"top",t.textPadding&&(t.textPadding=D(t.textPadding))}}function ke(t,e,i,n,o){n.rich?Oe(t,e,i,n,o):Pe(t,e,i,n,o)}function Pe(t,e,i,n,o){var a=We(e,"font",n.font||ux),r=n.textPadding,s=t.__textCotentBlock;s&&!t.__dirty||(s=t.__textCotentBlock=Me(i,a,r,n.truncate));var l=s.outerHeight,h=s.lines,u=s.lineHeight,c=Ge(l,n,o),d=c.baseX,f=c.baseY,g=c.textAlign,p=c.textVerticalAlign;Ne(e,n,o,d,f);var m=me(f,l,p),v=d,y=m,x=Re(n);if(x||r){var _=ce(i,a);r&&(_+=r[1]+r[3]);var b=pe(d,_,g);x&&Ve(t,e,n,b,m,_,l),r&&(v=Ue(d,g,r),y+=r[0])}We(e,"textAlign",g||"left"),We(e,"textBaseline","middle"),We(e,"shadowBlur",n.textShadowBlur||0),We(e,"shadowColor",n.textShadowColor||"transparent"),We(e,"shadowOffsetX",n.textShadowOffsetX||0),We(e,"shadowOffsetY",n.textShadowOffsetY||0),y+=u/2;var w=n.textStrokeWidth,S=He(n.textStroke,w),M=Fe(n.textFill);S&&(We(e,"lineWidth",w),We(e,"strokeStyle",S)),M&&We(e,"fillStyle",M);for(var I=0;I=0&&"right"===(_=w[D]).textAlign;)Ee(t,e,_,n,M,v,C,"right"),I-=_.width,C-=_.width,D--;for(A+=(a-(A-m)-(y-C)-I)/2;T<=D;)Ee(t,e,_=w[T],n,M,v,A+_.width/2,"center"),A+=_.width,T++;v+=M}}function Ne(t,e,i,n,o){if(i&&e.textRotation){var a=e.textOrigin;"center"===a?(n=i.width/2+i.x,o=i.height/2+i.y):a&&(n=a[0]+i.x,o=a[1]+i.y),t.translate(n,o),t.rotate(-e.textRotation),t.translate(-n,-o)}}function Ee(t,e,i,n,o,a,r,s){var l=n.rich[i.styleName]||{},h=i.textVerticalAlign,u=a+o/2;"top"===h?u=a+i.height/2:"bottom"===h&&(u=a+o-i.height/2),!i.isLineHolder&&Re(l)&&Ve(t,e,l,"right"===s?r-i.width:"center"===s?r-i.width/2:r,u-i.height/2,i.width,i.height);var c=i.textPadding;c&&(r=Ue(r,s,c),u-=i.height/2-c[2]-i.textHeight/2),We(e,"shadowBlur",A(l.textShadowBlur,n.textShadowBlur,0)),We(e,"shadowColor",l.textShadowColor||n.textShadowColor||"transparent"),We(e,"shadowOffsetX",A(l.textShadowOffsetX,n.textShadowOffsetX,0)),We(e,"shadowOffsetY",A(l.textShadowOffsetY,n.textShadowOffsetY,0)),We(e,"textAlign",s),We(e,"textBaseline","middle"),We(e,"font",i.font||ux);var d=He(l.textStroke||n.textStroke,g),f=Fe(l.textFill||n.textFill),g=T(l.textStrokeWidth,n.textStrokeWidth);d&&(We(e,"lineWidth",g),We(e,"strokeStyle",d),e.strokeText(i.text,r,u)),f&&(We(e,"fillStyle",f),e.fillText(i.text,r,u))}function Re(t){return t.textBackgroundColor||t.textBorderWidth&&t.textBorderColor}function Ve(t,e,i,n,o,a,r){var s=i.textBackgroundColor,l=i.textBorderWidth,h=i.textBorderColor,u=_(s);if(We(e,"shadowBlur",i.textBoxShadowBlur||0),We(e,"shadowColor",i.textBoxShadowColor||"transparent"),We(e,"shadowOffsetX",i.textBoxShadowOffsetX||0),We(e,"shadowOffsetY",i.textBoxShadowOffsetY||0),u||l&&h){e.beginPath();var c=i.textBorderRadius;c?Ce(e,{x:n,y:o,width:a,height:r,r:c}):e.rect(n,o,a,r),e.closePath()}if(u)We(e,"fillStyle",s),e.fill();else if(b(s)){var d=s.image;(d=le(d,null,t,Be,s))&&ue(d)&&e.drawImage(d,n,o,a,r)}l&&h&&(We(e,"lineWidth",l),We(e,"strokeStyle",h),e.stroke())}function Be(t,e){e.image=t}function Ge(t,e,i){var n=e.x||0,o=e.y||0,a=e.textAlign,r=e.textVerticalAlign;if(i){var s=e.textPosition;if(s instanceof Array)n=i.x+Ze(s[0],i.width),o=i.y+Ze(s[1],i.height);else{var l=ve(s,i,e.textDistance);n=l.x,o=l.y,a=a||l.textAlign,r=r||l.textVerticalAlign}var h=e.textOffset;h&&(n+=h[0],o+=h[1])}return{baseX:n,baseY:o,textAlign:a,textVerticalAlign:r}}function We(t,e,i){return t[e]=i,t[e]}function He(t,e){return null==t||e<=0||"transparent"===t||"none"===t?null:t.image||t.colorStops?"#000":t}function Fe(t){return null==t||"none"===t?null:t.image||t.colorStops?"#000":t}function Ze(t,e){return"string"==typeof t?t.lastIndexOf("%")>=0?parseFloat(t)/100*e:parseFloat(t):t}function Ue(t,e,i){return"right"===e?t-i[1]:"center"===e?t+i[3]/2-i[1]/2:t+i[3]}function Xe(t,e){return null!=t&&(t||e.textBackgroundColor||e.textBorderWidth&&e.textBorderColor||e.textPadding)}function je(t){t=t||{},Fy.call(this,t);for(var e in t)t.hasOwnProperty(e)&&"style"!==e&&(this[e]=t[e]);this.style=new Jy(t.style,this),this._rect=null,this.__clipPaths=[]}function qe(t){je.call(this,t)}function Ye(t){return parseInt(t,10)}function $e(t){return!!t&&(!!t.__builtin__||"function"==typeof t.resize&&"function"==typeof t.refresh)}function Ke(t){t.__unusedCount++}function Je(t){1==t.__unusedCount&&t.clear()}function Qe(t,e,i){return mx.copy(t.getBoundingRect()),t.transform&&mx.applyTransform(t.transform),vx.width=e,vx.height=i,!mx.intersect(vx)}function ti(t,e){if(t==e)return!1;if(!t||!e||t.length!==e.length)return!0;for(var i=0;i=0){var o="touchend"!=n?e.targetTouches[0]:e.changedTouches[0];o&&oi(t,o,e,i)}else oi(t,e,e,i),e.zrDelta=e.wheelDelta?e.wheelDelta/120:-(e.detail||0)/3;var a=e.button;return null==e.which&&void 0!==a&&_x.test(e.type)&&(e.which=1&a?1:2&a?3:4&a?2:0),e}function si(t,e,i){xx?t.addEventListener(e,i):t.attachEvent("on"+e,i)}function li(t,e,i){xx?t.removeEventListener(e,i):t.detachEvent("on"+e,i)}function hi(t){return t.which>1}function ui(t){var e=t[1][0]-t[0][0],i=t[1][1]-t[0][1];return Math.sqrt(e*e+i*i)}function ci(t){return[(t[0][0]+t[1][0])/2,(t[0][1]+t[1][1])/2]}function di(t){return"mousewheel"===t&&Uv.browser.firefox?"DOMMouseScroll":t}function fi(t,e,i){var n=t._gestureMgr;"start"===i&&n.clear();var o=n.recognize(e,t.handler.findHover(e.zrX,e.zrY,null).target,t.dom);if("end"===i&&n.clear(),o){var a=o.type;e.gestureEvent=a,t.handler.dispatchToElement({target:o.target},a,o.event)}}function gi(t){t._touching=!0,clearTimeout(t._touchTimer),t._touchTimer=setTimeout(function(){t._touching=!1},700)}function pi(t){var e=t.pointerType;return"pen"===e||"touch"===e}function mi(t){function e(t,e){return function(){if(!e._touching)return t.apply(e,arguments)}}d(Tx,function(e){t._handlers[e]=m(Dx[e],t)}),d(Cx,function(e){t._handlers[e]=m(Dx[e],t)}),d(Ix,function(i){t._handlers[i]=e(Dx[i],t)})}function vi(t){function e(e,i){d(e,function(e){si(t,di(e),i._handlers[e])},i)}fy.call(this),this.dom=t,this._touching=!1,this._touchTimer,this._gestureMgr=new Sx,this._handlers={},mi(this),Uv.pointerEventsSupported?e(Cx,this):(Uv.touchEventsSupported&&e(Tx,this),e(Ix,this))}function yi(t,e){var i=new zx(Fv(),t,e);return Ox[i.id]=i,i}function xi(t,e){Px[t]=e}function _i(t){delete Ox[t]}function bi(t){return t.replace(/^\s+/,"").replace(/\s+$/,"")}function wi(t,e,i,n){var o=e[1]-e[0],a=i[1]-i[0];if(0===o)return 0===a?i[0]:(i[0]+i[1])/2;if(n)if(o>0){if(t<=e[0])return i[0];if(t>=e[1])return i[1]}else{if(t>=e[0])return i[0];if(t<=e[1])return i[1]}else{if(t===e[0])return i[0];if(t===e[1])return i[1]}return(t-e[0])/o*a+i[0]}function Si(t,e){switch(t){case"center":case"middle":t="50%";break;case"left":case"top":t="0%";break;case"right":case"bottom":t="100%"}return"string"==typeof t?bi(t).match(/%$/)?parseFloat(t)/100*e:parseFloat(t):null==t?NaN:+t}function Mi(t,e,i){return null==e&&(e=10),e=Math.min(Math.max(0,e),20),t=(+t).toFixed(e),i?t:+t}function Ii(t){return t.sort(function(t,e){return t-e}),t}function Ti(t){if(t=+t,isNaN(t))return 0;for(var e=1,i=0;Math.round(t*e)/e!==t;)e*=10,i++;return i}function Ai(t){var e=t.toString(),i=e.indexOf("e");if(i>0){var n=+e.slice(i+1);return n<0?-n:0}var o=e.indexOf(".");return o<0?0:e.length-1-o}function Ci(t,e){var i=Math.log,n=Math.LN10,o=Math.floor(i(t[1]-t[0])/n),a=Math.round(i(Math.abs(e[1]-e[0]))/n),r=Math.min(Math.max(-o+a,0),20);return isFinite(r)?r:20}function Di(t,e,i){if(!t[e])return 0;var n=g(t,function(t,e){return t+(isNaN(e)?0:e)},0);if(0===n)return 0;for(var o=Math.pow(10,i),a=f(t,function(t){return(isNaN(t)?0:t)/n*o*100}),r=100*o,s=f(a,function(t){return Math.floor(t)}),l=g(s,function(t,e){return t+e},0),h=f(a,function(t,e){return t-s[e]});lu&&(u=h[d],c=d);++s[c],h[c]=0,++l}return s[e]/o}function Li(t){var e=2*Math.PI;return(t%e+e)%e}function ki(t){return t>-Ex&&t=-20?+t.toFixed(n<0?-n:0):t}function Ei(t){function e(t,i,n){return t.interval[n]=0}function Vi(t){return isNaN(t)?"-":(t=(t+"").split("."))[0].replace(/(\d{1,3})(?=(?:\d{3})+(?!\d))/g,"$1,")+(t.length>1?"."+t[1]:"")}function Bi(t,e){return t=(t||"").toLowerCase().replace(/-(.)/g,function(t,e){return e.toUpperCase()}),e&&t&&(t=t.charAt(0).toUpperCase()+t.slice(1)),t}function Gi(t){return String(t).replace(/&/g,"&").replace(//g,">").replace(/"/g,""").replace(/'/g,"'")}function Wi(t,e,i){y(e)||(e=[e]);var n=e.length;if(!n)return"";for(var o=e[0].$vars||[],a=0;a':""}function Zi(t,e,i){"week"!==t&&"month"!==t&&"quarter"!==t&&"half-year"!==t&&"year"!==t||(t="MM-dd\nyyyy");var n=Pi(e),o=i?"UTC":"",a=n["get"+o+"FullYear"](),r=n["get"+o+"Month"]()+1,s=n["get"+o+"Date"](),l=n["get"+o+"Hours"](),h=n["get"+o+"Minutes"](),u=n["get"+o+"Seconds"]();return t=t.replace("MM",Fx(r)).replace("M",r).replace("yyyy",a).replace("yy",a%100).replace("dd",Fx(s)).replace("d",s).replace("hh",Fx(l)).replace("h",l).replace("mm",Fx(h)).replace("m",h).replace("ss",Fx(u)).replace("s",u)}function Ui(t){return t?t.charAt(0).toUpperCase()+t.substr(1):t}function Xi(t,e,i){return t[Yx+e]=i}function ji(t,e){return t[Yx+e]}function qi(t,e){return t.hasOwnProperty(Yx+e)}function Yi(t){var e={main:"",sub:""};return t&&(t=t.split(jx),e.main=t[0]||"",e.sub=t[1]||""),e}function $i(t){L(/^[a-zA-Z0-9_]+([.][a-zA-Z0-9_]+)?$/.test(t),'componentType "'+t+'" illegal')}function Ki(t,e){t.$constructor=t,t.extend=function(t){var e=this,i=function(){t.$constructor?t.$constructor.apply(this,arguments):e.apply(this,arguments)};return a(i.prototype,t),i.extend=this.extend,i.superCall=Ji,i.superApply=Qi,h(i,this),i.superClass=e,i}}function Ji(t,e){var i=C(arguments,2);return this.superClass.prototype[e].apply(t,i)}function Qi(t,e,i){return this.superClass.prototype[e].apply(t,i)}function tn(t,e){function i(t){var e=n[t.main];return e&&e[qx]||((e=n[t.main]={})[qx]=!0),e}e=e||{};var n={};if(t.registerClass=function(t,e){return e&&($i(e),(e=Yi(e)).sub?e.sub!==qx&&(i(e)[e.sub]=t):n[e.main]=t),t},t.getClass=function(t,e,i){var o=n[t];if(o&&o[qx]&&(o=e?o[e]:null),i&&!o)throw new Error(e?"Component "+t+"."+(e||"")+" not exists. Load it first.":t+".type should be specified.");return o},t.getClassesByMainType=function(t){t=Yi(t);var e=[],i=n[t.main];return i&&i[qx]?d(i,function(t,i){i!==qx&&e.push(t)}):e.push(i),e},t.hasClass=function(t){return t=Yi(t),!!n[t.main]},t.getAllClassMainTypes=function(){var t=[];return d(n,function(e,i){t.push(i)}),t},t.hasSubTypes=function(t){t=Yi(t);var e=n[t.main];return e&&e[qx]},t.parseClassType=Yi,e.registerWhenExtend){var o=t.extend;o&&(t.extend=function(e){var i=o.call(this,e);return t.registerClass(i,e.type)})}return t}function en(t){return t>-n_&&tn_||t<-n_}function on(t,e,i,n,o){var a=1-o;return a*a*(a*t+3*o*e)+o*o*(o*n+3*a*i)}function an(t,e,i,n,o){var a=1-o;return 3*(((e-t)*a+2*(i-e)*o)*a+(n-i)*o*o)}function rn(t,e,i,n,o,a){var r=n+3*(e-i)-t,s=3*(i-2*e+t),l=3*(e-t),h=t-o,u=s*s-3*r*l,c=s*l-9*r*h,d=l*l-3*s*h,f=0;if(en(u)&&en(c))en(s)?a[0]=0:(M=-l/s)>=0&&M<=1&&(a[f++]=M);else{var g=c*c-4*u*d;if(en(g)){var p=c/u,m=-p/2;(M=-s/r+p)>=0&&M<=1&&(a[f++]=M),m>=0&&m<=1&&(a[f++]=m)}else if(g>0){var v=i_(g),y=u*s+1.5*r*(-c+v),x=u*s+1.5*r*(-c-v);(M=(-s-((y=y<0?-e_(-y,r_):e_(y,r_))+(x=x<0?-e_(-x,r_):e_(x,r_))))/(3*r))>=0&&M<=1&&(a[f++]=M)}else{var _=(2*u*s-3*r*c)/(2*i_(u*u*u)),b=Math.acos(_)/3,w=i_(u),S=Math.cos(b),M=(-s-2*w*S)/(3*r),m=(-s+w*(S+a_*Math.sin(b)))/(3*r),I=(-s+w*(S-a_*Math.sin(b)))/(3*r);M>=0&&M<=1&&(a[f++]=M),m>=0&&m<=1&&(a[f++]=m),I>=0&&I<=1&&(a[f++]=I)}}return f}function sn(t,e,i,n,o){var a=6*i-12*e+6*t,r=9*e+3*n-3*t-9*i,s=3*e-3*t,l=0;if(en(r))nn(a)&&(c=-s/a)>=0&&c<=1&&(o[l++]=c);else{var h=a*a-4*r*s;if(en(h))o[0]=-a/(2*r);else if(h>0){var u=i_(h),c=(-a+u)/(2*r),d=(-a-u)/(2*r);c>=0&&c<=1&&(o[l++]=c),d>=0&&d<=1&&(o[l++]=d)}}return l}function ln(t,e,i,n,o,a){var r=(e-t)*o+t,s=(i-e)*o+e,l=(n-i)*o+i,h=(s-r)*o+r,u=(l-s)*o+s,c=(u-h)*o+h;a[0]=t,a[1]=r,a[2]=h,a[3]=c,a[4]=c,a[5]=u,a[6]=l,a[7]=n}function hn(t,e,i,n,o,a,r,s,l,h,u){var c,d,f,g,p,m=.005,v=1/0;s_[0]=l,s_[1]=h;for(var y=0;y<1;y+=.05)l_[0]=on(t,i,o,r,y),l_[1]=on(e,n,a,s,y),(g=uy(s_,l_))=0&&g=0&&c<=1&&(o[l++]=c);else{var h=r*r-4*a*s;if(en(h))(c=-r/(2*a))>=0&&c<=1&&(o[l++]=c);else if(h>0){var u=i_(h),c=(-r+u)/(2*a),d=(-r-u)/(2*a);c>=0&&c<=1&&(o[l++]=c),d>=0&&d<=1&&(o[l++]=d)}}return l}function fn(t,e,i){var n=t+i-2*e;return 0===n?.5:(t-e)/n}function gn(t,e,i,n,o){var a=(e-t)*n+t,r=(i-e)*n+e,s=(r-a)*n+a;o[0]=t,o[1]=a,o[2]=s,o[3]=s,o[4]=r,o[5]=i}function pn(t,e,i,n,o,a,r,s,l){var h,u=.005,c=1/0;s_[0]=r,s_[1]=s;for(var d=0;d<1;d+=.05)l_[0]=un(t,i,o,d),l_[1]=un(e,n,a,d),(m=uy(s_,l_))=0&&m1e-4)return s[0]=t-i,s[1]=e-n,l[0]=t+i,void(l[1]=e+n);if(p_[0]=f_(o)*i+t,p_[1]=d_(o)*n+e,m_[0]=f_(a)*i+t,m_[1]=d_(a)*n+e,h(s,p_,m_),u(l,p_,m_),(o%=g_)<0&&(o+=g_),(a%=g_)<0&&(a+=g_),o>a&&!r?a+=g_:oo&&(v_[0]=f_(f)*i+t,v_[1]=d_(f)*n+e,h(s,v_,s),u(l,v_,l))}function bn(t,e,i,n,o,a,r){if(0===o)return!1;var s=o,l=0,h=t;if(r>e+s&&r>n+s||rt+s&&a>i+s||ae+c&&u>n+c&&u>a+c&&u>s+c||ut+c&&h>i+c&&h>o+c&&h>r+c||he+h&&l>n+h&&l>a+h||lt+h&&s>i+h&&s>o+h||si||u+ho&&(o+=z_);var d=Math.atan2(l,s);return d<0&&(d+=z_),d>=n&&d<=o||d+z_>=n&&d+z_<=o}function Tn(t,e,i,n,o,a){if(a>e&&a>n||ao?r:0}function An(t,e){return Math.abs(t-e)e&&h>n&&h>a&&h>s||h1&&Cn(),c=on(e,n,a,s,B_[0]),g>1&&(d=on(e,n,a,s,B_[1]))),2==g?me&&s>n&&s>a||s=0&&h<=1){for(var u=0,c=un(e,n,a,h),d=0;di||s<-i)return 0;h=Math.sqrt(i*i-s*s);V_[0]=-h,V_[1]=h;var l=Math.abs(n-o);if(l<1e-4)return 0;if(l%E_<1e-4){n=0,o=E_;g=a?1:-1;return r>=V_[0]+t&&r<=V_[1]+t?g:0}if(a){var h=n;n=Mn(o),o=Mn(h)}else n=Mn(n),o=Mn(o);n>o&&(o+=E_);for(var u=0,c=0;c<2;c++){var d=V_[c];if(d+t>r){var f=Math.atan2(s,d),g=a?1:-1;f<0&&(f=E_+f),(f>=n&&f<=o||f+E_>=n&&f+E_<=o)&&(f>Math.PI/2&&f<1.5*Math.PI&&(g=-g),u+=g)}}return u}function Pn(t,e,i,n,o){for(var a=0,r=0,s=0,l=0,h=0,u=0;u1&&(i||(a+=Tn(r,s,l,h,n,o))),1==u&&(l=r=t[u],h=s=t[u+1]),c){case N_.M:r=l=t[u++],s=h=t[u++];break;case N_.L:if(i){if(bn(r,s,t[u],t[u+1],e,n,o))return!0}else a+=Tn(r,s,t[u],t[u+1],n,o)||0;r=t[u++],s=t[u++];break;case N_.C:if(i){if(wn(r,s,t[u++],t[u++],t[u++],t[u++],t[u],t[u+1],e,n,o))return!0}else a+=Dn(r,s,t[u++],t[u++],t[u++],t[u++],t[u],t[u+1],n,o)||0;r=t[u++],s=t[u++];break;case N_.Q:if(i){if(Sn(r,s,t[u++],t[u++],t[u],t[u+1],e,n,o))return!0}else a+=Ln(r,s,t[u++],t[u++],t[u],t[u+1],n,o)||0;r=t[u++],s=t[u++];break;case N_.A:var d=t[u++],f=t[u++],g=t[u++],p=t[u++],m=t[u++],v=t[u++],y=(t[u++],1-t[u++]),x=Math.cos(m)*g+d,_=Math.sin(m)*p+f;u>1?a+=Tn(r,s,x,_,n,o):(l=x,h=_);var b=(n-d)*p/g+d;if(i){if(In(d,f,p,m,m+v,y,e,b,o))return!0}else a+=kn(d,f,p,m,m+v,y,b,o);r=Math.cos(m+v)*g+d,s=Math.sin(m+v)*p+f;break;case N_.R:l=r=t[u++],h=s=t[u++];var x=l+t[u++],_=h+t[u++];if(i){if(bn(l,h,x,h,e,n,o)||bn(x,h,x,_,e,n,o)||bn(x,_,l,_,e,n,o)||bn(l,_,l,h,e,n,o))return!0}else a+=Tn(x,h,x,_,n,o),a+=Tn(l,_,l,h,n,o);break;case N_.Z:if(i){if(bn(r,s,l,h,e,n,o))return!0}else a+=Tn(r,s,l,h,n,o);r=l,s=h}}return i||An(s,h)||(a+=Tn(r,s,l,h,n,o)||0),0!==a}function On(t,e,i){return Pn(t,0,!1,e,i)}function zn(t,e,i,n){return Pn(t,e,!0,i,n)}function Nn(t){je.call(this,t),this.path=null}function En(t,e,i,n,o,a,r,s,l,h,u){var c=l*(J_/180),d=K_(c)*(t-i)/2+$_(c)*(e-n)/2,f=-1*$_(c)*(t-i)/2+K_(c)*(e-n)/2,g=d*d/(r*r)+f*f/(s*s);g>1&&(r*=Y_(g),s*=Y_(g));var p=(o===a?-1:1)*Y_((r*r*(s*s)-r*r*(f*f)-s*s*(d*d))/(r*r*(f*f)+s*s*(d*d)))||0,m=p*r*f/s,v=p*-s*d/r,y=(t+i)/2+K_(c)*m-$_(c)*v,x=(e+n)/2+$_(c)*m+K_(c)*v,_=eb([1,0],[(d-m)/r,(f-v)/s]),b=[(d-m)/r,(f-v)/s],w=[(-1*d-m)/r,(-1*f-v)/s],S=eb(b,w);tb(b,w)<=-1&&(S=J_),tb(b,w)>=1&&(S=0),0===a&&S>0&&(S-=2*J_),1===a&&S<0&&(S+=2*J_),u.addData(h,y,x,r,s,_,S,c,a)}function Rn(t){if(!t)return[];var e,i=t.replace(/-/g," -").replace(/ /g," ").replace(/ /g,",").replace(/,,/g,",");for(e=0;e0&&""===f[0]&&f.shift();for(var g=0;g=2){if(o&&"spline"!==o){var a=hb(n,o,i,e.smoothConstraint);t.moveTo(n[0][0],n[0][1]);for(var r=n.length,s=0;s<(i?r:r-1);s++){var l=a[2*s],h=a[2*s+1],u=n[(s+1)%r];t.bezierCurveTo(l[0],l[1],h[0],h[1],u[0],u[1])}}else{"spline"===o&&(n=lb(n,i)),t.moveTo(n[0][0],n[0][1]);for(var s=1,c=n.length;s=0)&&(n={textFill:null,textStroke:t.textStroke,textStrokeWidth:t.textStrokeWidth},t.textFill="#fff",null==t.textStroke&&(t.textStroke=i.autoColor,null==t.textStrokeWidth&&(t.textStrokeWidth=2))),n}function xo(t){var e=t.insideRollback;e&&(t.textFill=e.textFill,t.textStroke=e.textStroke,t.textStrokeWidth=e.textStrokeWidth)}function _o(t,e){var i=e||e.getModel("textStyle");return[t.fontStyle||i&&i.getShallow("fontStyle")||"",t.fontWeight||i&&i.getShallow("fontWeight")||"",(t.fontSize||i&&i.getShallow("fontSize")||12)+"px",t.fontFamily||i&&i.getShallow("fontFamily")||"sans-serif"].join(" ")}function bo(t,e,i,n,o,a){if("function"==typeof o&&(a=o,o=null),n&&n.isAnimationEnabled()){var r=t?"Update":"",s=n.getShallow("animationDuration"+r),l=n.getShallow("animationEasing"+r),h=n.getShallow("animationDelay"+r);"function"==typeof h&&(h=h(o,n.getAnimationDelayParams?n.getAnimationDelayParams(e,o):null)),"function"==typeof s&&(s=s(o)),s>0?e.animateTo(i,s,h||0,l,a,!!a):(e.stopAnimation(),e.attr(i),a&&a())}else e.stopAnimation(),e.attr(i),a&&a()}function wo(t,e,i,n,o){bo(!0,t,e,i,n,o)}function So(t,e,i,n,o){bo(!1,t,e,i,n,o)}function Mo(t,e){for(var i=at([]);t&&t!==e;)st(i,t.getLocalTransform(),i),t=t.parent;return i}function Io(t,e,i){return e&&!c(e)&&(e=by.getLocalTransform(e)),i&&(e=ct([],e)),$([],t,e)}function To(t,e,i){var n=0===e[4]||0===e[5]||0===e[0]?1:Math.abs(2*e[4]/e[0]),o=0===e[4]||0===e[5]||0===e[2]?1:Math.abs(2*e[4]/e[2]),a=["left"===t?-n:"right"===t?n:0,"top"===t?-o:"bottom"===t?o:0];return a=Io(a,e,i),Math.abs(a[0])>Math.abs(a[1])?a[0]>0?"right":"left":a[1]>0?"bottom":"top"}function Ao(t,e,i,n){function o(t){var e={position:V(t.position),rotation:t.rotation};return t.shape&&(e.shape=a({},t.shape)),e}if(t&&e){var r=function(t){var e={};return t.traverse(function(t){!t.isGroup&&t.anid&&(e[t.anid]=t)}),e}(t);e.traverse(function(t){if(!t.isGroup&&t.anid){var e=r[t.anid];if(e){var n=o(t);t.attr(o(e)),wo(t,n,i,t.dataIndex)}}})}}function Co(t,e){return f(t,function(t){var i=t[0];i=wb(i,e.x),i=Sb(i,e.x+e.width);var n=t[1];return n=wb(n,e.y),n=Sb(n,e.y+e.height),[i,n]})}function Do(t,e,i){var n=(e=a({rectHover:!0},e)).style={strokeNoScale:!0};if(i=i||{x:-1,y:-1,width:2,height:2},t)return 0===t.indexOf("image://")?(n.image=t.slice(8),r(n,i),new qe(e)):Un(t.replace("path://",""),e,i,"center")}function Lo(t,e,i){this.parentModel=e,this.ecModel=i,this.option=t}function ko(t,e,i){for(var n=0;n=i.length&&i.push({option:t})}}),i}function Bo(t){var e=z();Pb(t,function(t,i){var n=t.exist;n&&e.set(n.id,t)}),Pb(t,function(t,i){var n=t.option;L(!n||null==n.id||!e.get(n.id)||e.get(n.id)===t,"id duplicates: "+(n&&n.id)),n&&null!=n.id&&e.set(n.id,t),!t.keyInfo&&(t.keyInfo={})}),Pb(t,function(t,i){var n=t.exist,o=t.option,a=t.keyInfo;if(Ob(o)){if(a.name=null!=o.name?o.name+"":n?n.name:"\0-",n)a.id=n.id;else if(null!=o.id)a.id=o.id+"";else{var r=0;do{a.id="\0"+a.name+"\0"+r++}while(e.get(a.id))}e.set(a.id,t)}})}function Go(t){return Ob(t)&&t.id&&0===(t.id+"").indexOf("\0_ec_\0")}function Wo(t,e){function i(t,e,i){for(var n=0,o=t.length;nn||l.newline?(a=0,u=m,r+=s+i,s=f.height):s=Math.max(s,f.height)}else{var v=f.height+(p?-p.y+f.y:0);(c=r+v)>o||l.newline?(a+=s+i,r=0,c=v,s=f.width):s=Math.max(s,f.width)}l.newline||(d[0]=a,d[1]=r,"horizontal"===t?a=u+i:r=c+i)})}function $o(t,e,i){var n=e.width,o=e.height,a=Si(t.x,n),r=Si(t.y,o),s=Si(t.x2,n),l=Si(t.y2,o);return(isNaN(a)||isNaN(parseFloat(t.x)))&&(a=0),(isNaN(s)||isNaN(parseFloat(t.x2)))&&(s=n),(isNaN(r)||isNaN(parseFloat(t.y)))&&(r=0),(isNaN(l)||isNaN(parseFloat(t.y2)))&&(l=o),i=Gx(i||0),{width:Math.max(s-a-i[1]-i[3],0),height:Math.max(l-r-i[0]-i[2],0)}}function Ko(t,e,i){i=Gx(i||0);var n=e.width,o=e.height,a=Si(t.left,n),r=Si(t.top,o),s=Si(t.right,n),l=Si(t.bottom,o),h=Si(t.width,n),u=Si(t.height,o),c=i[2]+i[0],d=i[1]+i[3],f=t.aspect;switch(isNaN(h)&&(h=n-s-d-a),isNaN(u)&&(u=o-l-c-r),null!=f&&(isNaN(h)&&isNaN(u)&&(f>n/o?h=.8*n:u=.8*o),isNaN(h)&&(h=f*u),isNaN(u)&&(u=h/f)),isNaN(a)&&(a=n-s-h-d),isNaN(r)&&(r=o-l-u-c),t.left||t.right){case"center":a=n/2-h/2-i[3];break;case"right":a=n-h-d}switch(t.top||t.bottom){case"middle":case"center":r=o/2-u/2-i[0];break;case"bottom":r=o-u-c}a=a||0,r=r||0,isNaN(h)&&(h=n-d-a-(s||0)),isNaN(u)&&(u=o-c-r-(l||0));var g=new jt(a+i[3],r+i[0],h,u);return g.margin=i,g}function Jo(t,e,i,n,o){var a=!o||!o.hv||o.hv[0],s=!o||!o.hv||o.hv[1],l=o&&o.boundingMode||"all";if(a||s){var h;if("raw"===l)h="group"===t.type?new jt(0,0,+e.width||0,+e.height||0):t.getBoundingRect();else if(h=t.getBoundingRect(),t.needLocalTransform()){var u=t.getLocalTransform();(h=h.clone()).applyTransform(u)}e=Ko(r({width:h.width,height:h.height},e),i,n);var c=t.position,d=a?e.x-h.x:0,f=s?e.y-h.y:0;t.attr("position","raw"===l?[d,f]:[c[0]+d,c[1]+f])}}function Qo(t,e){return null!=t[Wb[e][0]]||null!=t[Wb[e][1]]&&null!=t[Wb[e][2]]}function ta(t,e,i){function n(i,n){var r={},l=0,h={},u=0;if(Bb(i,function(e){h[e]=t[e]}),Bb(i,function(t){o(e,t)&&(r[t]=h[t]=e[t]),a(r,t)&&l++,a(h,t)&&u++}),s[n])return a(e,i[1])?h[i[2]]=null:a(e,i[2])&&(h[i[1]]=null),h;if(2!==u&&l){if(l>=2)return r;for(var c=0;c=e:"max"===i?t<=e:t===e}function pa(t,e){return t.join(",")===e.join(",")}function ma(t,e){aw(e=e||{},function(e,i){if(null!=e){var n=t[i];if(Ub.hasClass(i)){e=Oo(e);var o=Vo(n=Oo(n),e);t[i]=sw(o,function(t){return t.option&&t.exist?lw(t.exist,t.option,!0):t.exist||t.option})}else t[i]=lw(n,e,!0)}})}function va(t){var e=t&&t.itemStyle;if(e)for(var i=0,o=dw.length;i=0?n():c=setTimeout(n,-a),h=o};return d.clear=function(){c&&(clearTimeout(c),c=null)},d.debounceNextCall=function(t){l=t},d}function La(t,e,i,n){var o=t[e];if(o){var a=o[ww]||o,r=o[Mw];if(o[Sw]!==i||r!==n){if(null==i||!n)return t[e]=a;(o=t[e]=Da(a,i,"debounce"===n))[ww]=a,o[Mw]=n,o[Sw]=i}return o}}function ka(t,e){var i=t[e];i&&i[ww]&&(t[e]=i[ww])}function Pa(t){return function(e,i,n){e=e&&e.toLowerCase(),fy.prototype[t].call(this,e,i,n)}}function Oa(){fy.call(this)}function za(t,e,n){function o(t,e){return t.prio-e.prio}n=n||{},"string"==typeof e&&(e=Uw[e]),this.id,this.group,this._dom=t;var a=this._zr=yi(t,{renderer:n.renderer||"canvas",devicePixelRatio:n.devicePixelRatio,width:n.width,height:n.height});this._throttledZrFlush=Da(m(a.flush,a),17),(e=i(e))&&vw(e,!0),this._theme=e,this._chartsViews=[],this._chartsMap={},this._componentsViews=[],this._componentsMap={},this._coordSysMgr=new ua,this._api=$a(this),fy.call(this),this._messageCenter=new Oa,this._initEvents(),this.resize=m(this.resize,this),this._pendingActions=[],ee(Zw,o),ee(Ww,o),a.animation.on("frame",this._onframe,this),k(this)}function Na(t,e,i){var n,o=this._model,a=this._coordSysMgr.getCoordinateSystems();e=Fo(o,e);for(var r=0;re.get("hoverLayerThreshold")&&!Uv.node&&i.traverse(function(t){t.isGroup||(t.useHoverLayer=!0)})}function qa(t,e){var i=0;e.group.traverse(function(t){"group"===t.type||t.ignore||i++});var n=+t.get("progressive"),o=i>t.get("progressiveThreshold")&&n&&!Uv.node;o&&e.group.traverse(function(t){t.isGroup||(t.progressive=o?Math.floor(i++/n):-1,o&&t.stopAnimation(!0))});var a=t.get("blendMode")||null;e.group.traverse(function(t){t.isGroup||t.setStyle("blend",a)})}function Ya(t,e){var i=t.get("z"),n=t.get("zlevel");e.group.traverse(function(t){"group"!==t.type&&(null!=i&&(t.z=i),null!=n&&(t.zlevel=n))})}function $a(t){var e=t._coordSysMgr;return a(new ha(t),{getCoordinateSystems:m(e.getCoordinateSystems,e),getComponentByElement:function(e){for(;e;){var i=e.__ecComponentInfo;if(null!=i)return t._model.getComponent(i.mainType,i.index);e=e.parent}}})}function Ka(t){function e(t,e){for(var n=0;n=0?o[s]=new h.constructor(a[s].length):o[s]=a[s]}return n}function xr(t,e,n){function o(t,e,i){cS[e]?t.otherDims[e]=i:(t.coordDim=e,t.coordDimIndex=i,h.set(e,!0))}function a(t,e,i){if(i||null!=e.get(t)){for(var n=0;null!=e.get(t+n);)n++;t+=n}return e.set(t,!0),t}e=e||[],n=n||{},t=(t||[]).slice();var r=(n.dimsDef||[]).slice(),s=z(n.encodeDef),l=z(),h=z(),u=[],c=n.dimCount;if(null==c){var d=_r(e[0]);c=Math.max(y(d)&&d.length||1,t.length,r.length),lS(t,function(t){var e=t.dimsDef;e&&(c=Math.max(c,e.length))})}for(var f=0;f=0&&wr(t)?function(t,e,i,n){return Eo(t)&&(c.hasItemOption=!0),n===u?i:Ro(No(t),h[n])}:function(t,e,i,n){var o=No(t),a=Ro(o&&o[n],h[n]);Eo(t)&&(c.hasItemOption=!0);var r=s&&s.categoryAxesModels;return r&&r[e]&&"string"==typeof a&&(f[e]=f[e]||r[e].getCategories(),(a=l(f[e],a))<0&&!isNaN(a)&&(a=+a)),a};return c.hasItemOption=!1,c.initData(t,d,g),c}function Mr(t){return"category"!==t&&"time"!==t}function Ir(t){return"category"===t?"ordinal":"time"===t?"time":"float"}function Tr(t,e){var i,n=[],o=t&&t.dimensions[t.categoryIndex];if(o&&(i=t.categoryAxesModels[o.name]),i){var a=i.getCategories();if(a){var r=e.length;if(y(e[0])&&e[0].length>1){n=[];for(var s=0;sn&&(r=o.interval=n);var s=o.intervalPrecision=Dr(r);return kr(o.niceTickExtent=[mS(Math.ceil(t[0]/r)*r,s),mS(Math.floor(t[1]/r)*r,s)],t),o}function Dr(t){return Ai(t)+2}function Lr(t,e,i){t[e]=Math.max(Math.min(t[e],i[1]),i[0])}function kr(t,e){!isFinite(t[0])&&(t[0]=e[0]),!isFinite(t[1])&&(t[1]=e[1]),Lr(t,0,e),Lr(t,1,e),t[0]>t[1]&&(t[0]=t[1])}function Pr(t,e,i,n){var o=[];if(!t)return o;e[0]1e4)return[];return e[1]>(o.length?o[o.length-1]:i[1])&&o.push(e[1]),o}function Or(t,e){return CS(t,AS(e))}function zr(t,e){var i,n,o,a=t.type,r=e.getMin(),s=e.getMax(),l=null!=r,h=null!=s,u=t.getExtent();return"ordinal"===a?i=(e.get("data")||[]).length:(y(n=e.get("boundaryGap"))||(n=[n||0,n||0]),"boolean"==typeof n[0]&&(n=[0,0]),n[0]=Si(n[0],1),n[1]=Si(n[1],1),o=u[1]-u[0]||Math.abs(u[0])),null==r&&(r="ordinal"===a?i?0:NaN:u[0]-n[0]*o),null==s&&(s="ordinal"===a?i?i-1:NaN:u[1]+n[1]*o),"dataMin"===r?r=u[0]:"function"==typeof r&&(r=r({min:u[0],max:u[1]})),"dataMax"===s?s=u[1]:"function"==typeof s&&(s=s({min:u[0],max:u[1]})),(null==r||!isFinite(r))&&(r=NaN),(null==s||!isFinite(s))&&(s=NaN),t.setBlank(M(r)||M(s)),e.getNeedCrossZero()&&(r>0&&s>0&&!l&&(r=0),r<0&&s<0&&!h&&(s=0)),[r,s]}function Nr(t,e){var i=zr(t,e),n=null!=e.getMin(),o=null!=e.getMax(),a=e.get("splitNumber");"log"===t.type&&(t.base=e.get("logBase"));var r=t.type;t.setExtent(i[0],i[1]),t.niceExtent({splitNumber:a,fixMin:n,fixMax:o,minInterval:"interval"===r||"time"===r?e.get("minInterval"):null,maxInterval:"interval"===r||"time"===r?e.get("maxInterval"):null});var s=e.get("interval");null!=s&&t.setInterval&&t.setInterval(s)}function Er(t,e){if(e=e||t.get("type"))switch(e){case"category":return new pS(t.getCategories(),[1/0,-1/0]);case"value":return new yS;default:return(Ar.getClass(e)||yS).create(t)}}function Rr(t,e,i,n,o){var a,r=0,s=0,l=(n-o)/180*Math.PI,h=1;e.length>40&&(h=Math.floor(e.length/40));for(var u=0;u1?h:(r+1)*h-1}function Vr(t,e){var i=t.scale,n=i.getTicksLabels(),o=i.getTicks();return"string"==typeof e?(e=function(t){return function(e){return t.replace("{value}",null!=e?e:"")}}(e),f(n,e)):"function"==typeof e?f(o,function(i,n){return e(Br(t,i),n)},this):n}function Br(t,e){return"category"===t.type?t.scale.getLabel(e):e}function Gr(t){return b(t)&&null!=t.value?t.value:t+""}function Wr(t,e){if("image"!==this.type){var i=this.style,n=this.shape;n&&"line"===n.symbolType?i.stroke=t:this.__isEmptyBrush?(i.stroke=t,i.fill=e||"#fff"):(i.fill&&(i.fill=t),i.stroke&&(i.stroke=t)),this.dirty(!1)}}function Hr(t,e,i,n,o,a,r){var s=0===t.indexOf("empty");s&&(t=t.substr(5,1).toLowerCase()+t.substr(6));var l;return l=0===t.indexOf("image://")?Xn(t.slice(8),new jt(e,i,n,o),r?"center":"cover"):0===t.indexOf("path://")?Un(t.slice(7),{},new jt(e,i,n,o),r?"center":"cover"):new WS({shape:{symbolType:t,x:e,y:i,width:n,height:o}}),l.__isEmptyBrush=s,l.setColor=Wr,l.setColor(a),l}function Fr(t,e){var i=(t[1]-t[0])/e/2;t[0]+=i,t[1]-=i}function Zr(t,e){return Math.abs(t-e)>1^-(1&s),l=l>>1^-(1&l),o=s+=o,a=l+=a,n.push([s/i,l/i])}return n}function Yr(t){var e,i=Xo(t,"label");if(i.length)e=i[0];else for(var n,o=t.dimensions.slice();o.length&&(e=o.pop(),"ordinal"===(n=t.getDimensionInfo(e).type)||"time"===n););return e}function $r(t,e){var i=t.getItemVisual(e,"symbolSize");return i instanceof Array?i.slice():[+i,+i]}function Kr(t){return[t[0]/2,t[1]/2]}function Jr(t,e,i){jy.call(this),this.updateData(t,e,i)}function Qr(t,e){this.parent.drift(t,e)}function ts(t){this.group=new jy,this._symbolCtor=t||Jr}function es(t,e,i){var n=t.getItemLayout(e);return n&&!isNaN(n[0])&&!isNaN(n[1])&&!(i&&i(e))&&"none"!==t.getItemVisual(e,"symbol")}function is(t){return t>=0?1:-1}function ns(t,e,i){for(var n,o=t.getBaseAxis(),a=t.getOtherAxis(o),r=o.onZero?0:a.scale.getExtent()[0],s=a.dim,l="x"===s||"radius"===s?1:0,h=e.stackedOn,u=e.get(s,i);h&&is(h.get(s,i))===is(u);){n=h;break}var c=[];return c[l]=e.get(o.dim,i),c[1-l]=n?n.get(s,i,!0):r,t.dataToPoint(c)}function os(t,e){var i=[];return e.diff(t).add(function(t){i.push({cmd:"+",idx:t})}).update(function(t,e){i.push({cmd:"=",idx:e,idx1:t})}).remove(function(t){i.push({cmd:"-",idx:t})}).execute(),i}function as(t){return isNaN(t[0])||isNaN(t[1])}function rs(t,e,i,n,o,a,r,s,l,h,u){for(var c=0,d=i,f=0;f=o||d<0)break;if(as(g)){if(u){d+=a;continue}break}if(d===i)t[a>0?"moveTo":"lineTo"](g[0],g[1]),aM(sM,g);else if(l>0){var p=d+a,m=e[p];if(u)for(;m&&as(e[p]);)m=e[p+=a];var v=.5,y=e[c];if(!(m=e[p])||as(m))aM(lM,g);else{as(m)&&!u&&(m=g),H(rM,m,y);var x,_;if("x"===h||"y"===h){var b="x"===h?0:1;x=Math.abs(g[b]-y[b]),_=Math.abs(g[b]-m[b])}else x=hy(g,y),_=hy(g,m);oM(lM,g,rM,-l*(1-(v=_/(_+x))))}iM(sM,sM,s),nM(sM,sM,r),iM(lM,lM,s),nM(lM,lM,r),t.bezierCurveTo(sM[0],sM[1],lM[0],lM[1],g[0],g[1]),oM(sM,g,rM,l*v)}else t.lineTo(g[0],g[1]);c=d,d+=a}return f}function ss(t,e){var i=[1/0,1/0],n=[-1/0,-1/0];if(e)for(var o=0;on[0]&&(n[0]=a[0]),a[1]>n[1]&&(n[1]=a[1])}return{min:e?i:n,max:e?n:i}}function ls(t,e){if(t.length===e.length){for(var i=0;ie[0]?1:-1;e[0]+=n*i,e[1]-=n*i}return e}function cs(t){return t>=0?1:-1}function ds(t,e){var i=t.getBaseAxis(),n=t.getOtherAxis(i),o=0;if(!i.onZero){var a=n.scale.getExtent();a[0]>0?o=a[0]:a[1]<0&&(o=a[1])}var r=n.dim,s="x"===r||"radius"===r?1:0;return e.mapArray([r],function(n,a){for(var l,h=e.stackedOn;h&&cs(h.get(r,a))===cs(n);){l=h;break}var u=[];return u[s]=e.get(i.dim,a),u[1-s]=l?l.get(r,a,!0):o,t.dataToPoint(u)},!0)}function fs(t,e,i){var n=us(t.getAxis("x")),o=us(t.getAxis("y")),a=t.getBaseAxis().isHorizontal(),r=Math.min(n[0],n[1]),s=Math.min(o[0],o[1]),l=Math.max(n[0],n[1])-r,h=Math.max(o[0],o[1])-s,u=i.get("lineStyle.normal.width")||2,c=i.get("clipOverflow")?u/2:Math.max(l,h);a?(s-=c,h+=2*c):(r-=c,l+=2*c);var d=new db({shape:{x:r,y:s,width:l,height:h}});return e&&(d.shape[a?"width":"height"]=0,So(d,{shape:{width:l,height:h}},i)),d}function gs(t,e,i){var n=t.getAngleAxis(),o=t.getRadiusAxis().getExtent(),a=n.getExtent(),r=Math.PI/180,s=new rb({shape:{cx:t.cx,cy:t.cy,r0:o[0],r:o[1],startAngle:-a[0]*r,endAngle:-a[1]*r,clockwise:n.inverse}});return e&&(s.shape.endAngle=-a[0]*r,So(s,{shape:{endAngle:-a[1]*r}},i)),s}function ps(t,e,i){return"polar"===t.type?gs(t,e,i):fs(t,e,i)}function ms(t,e,i){for(var n=e.getBaseAxis(),o="x"===n.dim||"radius"===n.dim?0:1,a=[],r=0;r=0;o--)if(i[o].dimension<2){n=i[o];break}if(n&&"cartesian2d"===e.type){var a=n.dimension,r=t.dimensions[a],s=e.getAxis(r),l=f(n.stops,function(t){return{coord:s.toGlobalCoord(s.dataToCoord(t.value)),color:t.color}}),h=l.length,u=n.outerColors.slice();h&&l[0].coord>l[h-1].coord&&(l.reverse(),u.reverse());var c=l[0].coord-10,g=l[h-1].coord+10,p=g-c;if(p<.001)return"transparent";d(l,function(t){t.offset=(t.coord-c)/p}),l.push({offset:h?l[h-1].offset:.5,color:u[1]||"transparent"}),l.unshift({offset:h?l[0].offset:.5,color:u[0]||"transparent"});var m=new xb(0,0,0,0,l,!0);return m[r]=c,m[r+"2"]=g,m}}}function ys(t){return this._axes[t]}function xs(t){pM.call(this,t)}function _s(t,e){return e.type||(e.data?"category":"value")}function bs(t,e,i){return t.getCoordSysModel()===e}function ws(t,e){var i=e*Math.PI/180,n=t.plain(),o=n.width,a=n.height,r=o*Math.cos(i)+a*Math.sin(i),s=o*Math.sin(i)+a*Math.cos(i);return new jt(n.x,n.y,r,s)}function Ss(t){var e,i=t.model,n=i.getFormattedLabels(),o=i.getModel("axisLabel"),a=1,r=n.length;r>40&&(a=Math.ceil(r/40));for(var s=0;sn[1],l="start"===e&&!s||"start"!==e&&s;return ki(r-CM/2)?(a=l?"bottom":"top",o="center"):ki(r-1.5*CM)?(a=l?"top":"bottom",o="center"):(a="middle",o=r<1.5*CM&&r>CM/2?l?"left":"right":l?"right":"left"),{rotation:r,textAlign:o,textVerticalAlign:a}}function Ps(t){var e=t.get("tooltip");return t.get("silent")||!(t.get("triggerEvent")||e&&e.show)}function Os(t,e,i){var n=t.get("axisLabel.showMinLabel"),o=t.get("axisLabel.showMaxLabel");e=e||[],i=i||[];var a=e[0],r=e[1],s=e[e.length-1],l=e[e.length-2],h=i[0],u=i[1],c=i[i.length-1],d=i[i.length-2];!1===n?(zs(a),zs(h)):Ns(a,r)&&(n?(zs(r),zs(u)):(zs(a),zs(h))),!1===o?(zs(s),zs(c)):Ns(l,s)&&(o?(zs(l),zs(d)):(zs(s),zs(c)))}function zs(t){t&&(t.ignore=!0)}function Ns(t,e,i){var n=t&&t.getBoundingRect().clone(),o=e&&e.getBoundingRect().clone();if(n&&o){var a=at([]);return ht(a,a,-t.rotation),n.applyTransform(st([],a,t.getLocalTransform())),o.applyTransform(st([],a,e.getLocalTransform())),n.intersect(o)}}function Es(t){return"middle"===t||"center"===t}function Rs(t,e,i){var n=e.axis;if(e.get("axisTick.show")&&!n.scale.isBlank()){for(var o=e.getModel("axisTick"),a=o.getModel("lineStyle"),s=o.get("length"),l=OM(o,i.labelInterval),h=n.getTicksCoords(o.get("alignWithLabel")),u=n.scale.getTicks(),c=e.get("axisLabel.showMinLabel"),d=e.get("axisLabel.showMaxLabel"),f=[],g=[],p=t._transform,m=[],v=h.length,y=0;y=0||t===e}function Us(t){var e=Xs(t);if(e){var i=e.axisPointerModel,n=e.axis.scale,o=i.option,a=i.get("status"),r=i.get("value");null!=r&&(r=n.parse(r));var s=qs(i);null==a&&(o.status=s?"show":"hide");var l=n.getExtent().slice();l[0]>l[1]&&l.reverse(),(null==r||r>l[1])&&(r=l[1]),r=0?"p":"n",v=p[i],y=o[s][i][m],x=a[s][i][m];c.isHorizontal()?(n=y,r=v[1]+h,l=v[0]-x,g=u,a[s][i][m]+=l,Math.abs(l)0?"bottom":"top":o.width>0?"left":"right";l||ol(t.style,d,n,h,a,i,g),uo(t,d)}function hl(t,e){var i=t.get(jM)||0;return Math.min(i,Math.abs(e.width),Math.abs(e.height))}function ul(t,e,i,n){var o=e.getData(),a=this.dataIndex,r=o.getName(a),s=e.get("selectedOffset");n.dispatchAction({type:"pieToggleSelect",from:t,name:r,seriesId:e.id}),o.each(function(t){cl(o.getItemGraphicEl(t),o.getItemLayout(t),e.isSelected(o.getName(t)),s,i)})}function cl(t,e,i,n,o){var a=(e.startAngle+e.endAngle)/2,r=Math.cos(a),s=Math.sin(a),l=i?n:0,h=[r*l,s*l];o?t.animate().when(200,{position:h}).start("bounceOut"):t.attr("position",h)}function dl(t,e){function i(){a.ignore=a.hoverIgnore,r.ignore=r.hoverIgnore}function n(){a.ignore=a.normalIgnore,r.ignore=r.normalIgnore}jy.call(this);var o=new rb({z2:2}),a=new cb,r=new ib;this.add(o),this.add(a),this.add(r),this.updateData(t,e,!0),this.on("emphasis",i).on("normal",n).on("mouseover",i).on("mouseout",n)}function fl(t,e,i,n,o,a,r){function s(e,i){for(var n=e;n>=0&&(t[n].y-=i,!(n>0&&t[n].y>t[n-1].y+t[n-1].height));n--);}function l(t,e,i,n,o,a){for(var r=e?Number.MAX_VALUE:0,s=0,l=t.length;s=r&&(d=r-10),!e&&d<=r&&(d=r+10),t[s].x=i+d*a,r=d}}t.sort(function(t,e){return t.y-e.y});for(var h,u=0,c=t.length,d=[],f=[],g=0;ge&&a+1t[a].y+t[a].height)return void s(a,n/2);s(i-1,n/2)}(g,c,-h),u=t[g].y+t[g].height;r-u<0&&s(c-1,u-r);for(g=0;g=i?f.push(t[g]):d.push(t[g]);l(d,!1,e,i,n,o),l(f,!0,e,i,n,o)}function gl(t,e,i,n,o,a){for(var r=[],s=[],l=0;l1?(g.width=l,g.height=l/d):(g.height=l,g.width=l*d),g.y=s[1]-g.height/2,g.x=s[0]-g.width/2}else(a=t.getBoxLayoutParams()).aspect=d,g=Ko(a,{width:h,height:u});this.setViewRect(g.x,g.y,g.width,g.height),this.setCenter(t.get("center")),this.setZoom(t.get("zoom"))}function Tl(t,e){d(e.get("geoCoord"),function(e,i){t.addGeoCoord(i,e)})}function Al(t,e,i){Ll(t)[e]=i}function Cl(t,e,i){var n=Ll(t);n[e]===i&&(n[e]=null)}function Dl(t,e){return!!Ll(t)[e]}function Ll(t){return t[bI]||(t[bI]={})}function kl(t){this.pointerChecker,this._zr=t,this._opt={};var e=m,n=e(Pl,this),o=e(Ol,this),a=e(zl,this),s=e(Nl,this),l=e(El,this);fy.call(this),this.setPointerChecker=function(t){this.pointerChecker=t},this.enable=function(e,h){this.disable(),this._opt=r(i(h)||{},{zoomOnMouseWheel:!0,moveOnMouseMove:!0,preventDefaultMouseMove:!0}),null==e&&(e=!0),!0!==e&&"move"!==e&&"pan"!==e||(t.on("mousedown",n),t.on("mousemove",o),t.on("mouseup",a)),!0!==e&&"scale"!==e&&"zoom"!==e||(t.on("mousewheel",s),t.on("pinch",l))},this.disable=function(){t.off("mousedown",n),t.off("mousemove",o),t.off("mouseup",a),t.off("mousewheel",s),t.off("pinch",l)},this.dispose=this.disable,this.isDragging=function(){return this._dragging},this.isPinching=function(){return this._pinching}}function Pl(t){if(!(hi(t)||t.target&&t.target.draggable)){var e=t.offsetX,i=t.offsetY;this.pointerChecker&&this.pointerChecker(t,e,i)&&(this._x=e,this._y=i,this._dragging=!0)}}function Ol(t){if(!hi(t)&&Vl(this,"moveOnMouseMove",t)&&this._dragging&&"pinch"!==t.gestureEvent&&!Dl(this._zr,"globalPan")){var e=t.offsetX,i=t.offsetY,n=this._x,o=this._y,a=e-n,r=i-o;this._x=e,this._y=i,this._opt.preventDefaultMouseMove&&bx(t.event),this.trigger("pan",a,r,n,o,e,i)}}function zl(t){hi(t)||(this._dragging=!1)}function Nl(t){if(Vl(this,"zoomOnMouseWheel",t)&&0!==t.wheelDelta){var e=t.wheelDelta>0?1.1:1/1.1;Rl.call(this,t,e,t.offsetX,t.offsetY)}}function El(t){if(!Dl(this._zr,"globalPan")){var e=t.pinchScale>1?1.1:1/1.1;Rl.call(this,t,e,t.pinchX,t.pinchY)}}function Rl(t,e,i,n){this.pointerChecker&&this.pointerChecker(t,i,n)&&(bx(t.event),this.trigger("zoom",e,i,n))}function Vl(t,e,i){var n=t._opt[e];return n&&(!_(n)||i.event[n+"Key"])}function Bl(t,e,i){var n=t.target,o=n.position;o[0]+=e,o[1]+=i,n.dirty()}function Gl(t,e,i,n){var o=t.target,a=t.zoomLimit,r=o.position,s=o.scale,l=t.zoom=t.zoom||1;if(l*=e,a){var h=a.min||0,u=a.max||1/0;l=Math.max(Math.min(u,l),h)}var c=l/t.zoom;t.zoom=l,r[0]-=(i-r[0])*(c-1),r[1]-=(n-r[1])*(c-1),s[0]*=c,s[1]*=c,o.dirty()}function Wl(t,e,i){var n=e.getComponentByElement(t.topTarget),o=n&&n.coordinateSystem;return n&&n!==i&&!wI[n.mainType]&&o&&o.model!==i}function Hl(t,e){var i=t.getItemStyle(),n=t.get("areaColor");return null!=n&&(i.fill=n),i}function Fl(t,e,i,n,o){i.off("click"),i.off("mousedown"),e.get("selectedMode")&&(i.on("mousedown",function(){t._mouseDownFlag=!0}),i.on("click",function(a){if(t._mouseDownFlag){t._mouseDownFlag=!1;for(var r=a.target;!r.__regions;)r=r.parent;if(r){var s={type:("geo"===e.mainType?"geo":"map")+"ToggleSelect",batch:f(r.__regions,function(t){return{name:t.name,from:o.uid}})};s[e.mainType+"Id"]=e.id,n.dispatchAction(s),Zl(e,i)}}}))}function Zl(t,e){e.eachChild(function(e){d(e.__regions,function(i){e.trigger(t.isSelected(i.name)?"emphasis":"normal")})})}function Ul(t,e){var i=new jy;this._controller=new kl(t.getZr()),this._controllerHost={target:e?i:null},this.group=i,this._updateGroup=e,this._mouseDownFlag}function Xl(t,e,i){var n=t.getZoom(),o=t.getCenter(),a=e.zoom,r=t.dataToPoint(o);if(null!=e.dx&&null!=e.dy){r[0]-=e.dx,r[1]-=e.dy;o=t.pointToData(r);t.setCenter(o)}if(null!=a){if(i){var s=i.min||0,l=i.max||1/0;a=Math.max(Math.min(n*a,l),s)/n}t.scale[0]*=a,t.scale[1]*=a;var h=t.position,u=(e.originX-h[0])*(a-1),c=(e.originY-h[1])*(a-1);h[0]-=u,h[1]-=c,t.updateTransform();o=t.pointToData(r);t.setCenter(o),t.setZoom(a*n)}return{center:t.getCenter(),zoom:t.getZoom()}}function jl(t,e){var i={},n=["value"];return d(t,function(t){t.each(n,function(e,n){var o="ec-"+t.getName(n);i[o]=i[o]||[],isNaN(e)||i[o].push(e)})}),t[0].map(n,function(n,o){for(var a="ec-"+t[0].getName(o),r=0,s=1/0,l=-1/0,h=i[a].length,u=0;u=0;o--){var a=i[o];a.hierNode={defaultAncestor:null,ancestor:a,prelim:0,modifier:0,change:0,shift:0,i:o,thread:null},n.push(a)}}function ah(t,e){var i=t.isExpand?t.children:[],n=t.parentNode.children,o=t.hierNode.i?n[t.hierNode.i-1]:null;if(i.length){uh(t);var a=(i[0].hierNode.prelim+i[i.length-1].hierNode.prelim)/2;o?(t.hierNode.prelim=o.hierNode.prelim+e(t,o),t.hierNode.modifier=t.hierNode.prelim-a):t.hierNode.prelim=a}else o&&(t.hierNode.prelim=o.hierNode.prelim+e(t,o));t.parentNode.hierNode.defaultAncestor=ch(t,o,t.parentNode.hierNode.defaultAncestor||n[0],e)}function rh(t){var e=t.hierNode.prelim+t.parentNode.hierNode.modifier;t.setLayout({x:e},!0),t.hierNode.modifier+=t.parentNode.hierNode.modifier}function sh(t){return arguments.length?t:mh}function lh(t,e){var i={};return t-=Math.PI/2,i.x=e*Math.cos(t),i.y=e*Math.sin(t),i}function hh(t,e){return Ko(t.getBoxLayoutParams(),{width:e.getWidth(),height:e.getHeight()})}function uh(t){for(var e=t.children,i=e.length,n=0,o=0;--i>=0;){var a=e[i];a.hierNode.prelim+=n,a.hierNode.modifier+=n,o+=a.hierNode.change,n+=a.hierNode.shift+o}}function ch(t,e,i,n){if(e){for(var o=t,a=t,r=a.parentNode.children[0],s=e,l=o.hierNode.modifier,h=a.hierNode.modifier,u=r.hierNode.modifier,c=s.hierNode.modifier;s=dh(s),a=fh(a),s&&a;){o=dh(o),r=fh(r),o.hierNode.ancestor=t;var d=s.hierNode.prelim+c-a.hierNode.prelim-h+n(s,a);d>0&&(ph(gh(s,t,i),t,d),h+=d,l+=d),c+=s.hierNode.modifier,h+=a.hierNode.modifier,l+=o.hierNode.modifier,u+=r.hierNode.modifier}s&&!dh(o)&&(o.hierNode.thread=s,o.hierNode.modifier+=c-l),a&&!fh(r)&&(r.hierNode.thread=a,r.hierNode.modifier+=h-u,i=t)}return i}function dh(t){var e=t.children;return e.length&&t.isExpand?e[e.length-1]:t.hierNode.thread}function fh(t){var e=t.children;return e.length&&t.isExpand?e[0]:t.hierNode.thread}function gh(t,e,i){return t.hierNode.ancestor.parentNode===e.parentNode?t.hierNode.ancestor:i}function ph(t,e,i){var n=i/(e.hierNode.i-t.hierNode.i);e.hierNode.change-=n,e.hierNode.shift+=i,e.hierNode.modifier+=i,e.hierNode.prelim+=i,t.hierNode.change+=n}function mh(t,e){return t.parentNode===e.parentNode?1:2}function vh(t,e){var i=t.getItemLayout(e);return i&&!isNaN(i.x)&&!isNaN(i.y)&&"none"!==t.getItemVisual(e,"symbol")}function yh(t,e,i){return i.itemModel=e,i.itemStyle=e.getModel("itemStyle.normal").getItemStyle(),i.hoverItemStyle=e.getModel("itemStyle.emphasis").getItemStyle(),i.lineStyle=e.getModel("lineStyle.normal").getLineStyle(),i.labelModel=e.getModel("label.normal"),i.hoverLabelModel=e.getModel("label.emphasis"),!1===t.isExpand&&0!==t.children.length?i.symbolInnerColor=i.itemStyle.fill:i.symbolInnerColor="#fff",i}function xh(t,e,i,n,o,a){var s=!i,l=t.tree.getNodeByDataIndex(e),a=yh(l,l.getModel(),a),h=t.tree.root,u=l.parentNode===h?l:l.parentNode||l,c=t.getItemGraphicEl(u.dataIndex),d=u.getLayout(),f=c?{x:c.position[0],y:c.position[1],rawX:c.__radialOldRawX,rawY:c.__radialOldRawY}:d,g=l.getLayout();s?(i=new Jr(t,e,a)).attr("position",[f.x,f.y]):i.updateData(t,e,a),i.__radialOldRawX=i.__radialRawX,i.__radialOldRawY=i.__radialRawY,i.__radialRawX=g.rawX,i.__radialRawY=g.rawY,n.add(i),t.setItemGraphicEl(e,i),wo(i,{position:[g.x,g.y]},o);var p=i.getSymbolPath();if("radial"===a.layout){var m,v,y=h.children[0],x=y.getLayout(),_=y.children.length;if(g.x===x.x&&!0===l.isExpand){var b={};b.x=(y.children[0].getLayout().x+y.children[_-1].getLayout().x)/2,b.y=(y.children[0].getLayout().y+y.children[_-1].getLayout().y)/2,(m=Math.atan2(b.y-x.y,b.x-x.x))<0&&(m=2*Math.PI+m),(v=b.xx.x)||(m-=Math.PI);var w=v?"left":"right";p.setStyle({textPosition:w,textRotation:-m,textOrigin:"center",verticalAlign:"middle"})}if(l.parentNode&&l.parentNode!==h){var S=i.__edge;S||(S=i.__edge=new pb({shape:bh(a,f,f),style:r({opacity:0},a.lineStyle)})),wo(S,{shape:bh(a,d,g),style:{opacity:1}},o),n.add(S)}}function _h(t,e,i,n,o,a){for(var r,s=t.tree.getNodeByDataIndex(e),l=t.tree.root,a=yh(s,s.getModel(),a),h=s.parentNode===l?s:s.parentNode||s;null==(r=h.getLayout());)h=h.parentNode===l?h:h.parentNode||h;wo(i,{position:[r.x+1,r.y+1]},o,function(){n.remove(i),t.setItemGraphicEl(e,null)}),i.fadeOut(null,{keepLabel:!0});var u=i.__edge;u&&wo(u,{shape:bh(a,r,r),style:{opacity:0}},o,function(){n.remove(u)})}function bh(t,e,i){var n,o,a,r,s=t.orient;if("radial"===t.layout){var l=e.rawX,h=e.rawY,u=i.rawX,c=i.rawY,d=lh(l,h),f=lh(l,h+(c-h)*t.curvature),g=lh(u,c+(h-c)*t.curvature),p=lh(u,c);return{x1:d.x,y1:d.y,x2:p.x,y2:p.y,cpx1:f.x,cpy1:f.y,cpx2:g.x,cpy2:g.y}}var l=e.x,h=e.y,u=i.x,c=i.y;return"horizontal"===s&&(n=l+(u-l)*t.curvature,o=h,a=u+(l-u)*t.curvature,r=c),"vertical"===s&&(n=l,o=h+(c-h)*t.curvature,a=u,r=c+(h-c)*t.curvature),{x1:l,y1:h,x2:u,y2:c,cpx1:n,cpy1:o,cpx2:a,cpy2:r}}function wh(t,e,i){for(var n,o=[t],a=[];n=o.pop();)if(a.push(n),n.isExpand){var r=n.children;if(r.length)for(var s=0;s=0;a--)n.push(o[a])}}function Mh(t,e){if(t&&("treemapZoomToNode"===t.type||"treemapRootToNode"===t.type)){var i=e.getData().tree.root,n=t.targetNode;if(n&&i.contains(n))return{node:n};var o=t.targetNodeId;if(null!=o&&(n=i.getNodeById(o)))return{node:n}}}function Ih(t){for(var e=[];t;)(t=t.parentNode)&&e.push(t);return e.reverse()}function Th(t,e){return l(Ih(t),e)>=0}function Ah(t,e){for(var i=[];t;){var n=t.dataIndex;i.push({name:t.name,dataIndex:n,value:e.getRawValue(n)}),t=t.parentNode}return i.reverse(),i}function Ch(t){var e=0;d(t.children,function(t){Ch(t);var i=t.value;y(i)&&(i=i[0]),e+=i});var i=t.value;y(i)&&(i=i[0]),(null==i||isNaN(i))&&(i=e),i<0&&(i=0),y(t.value)?t.value[0]=i:t.value=i}function Dh(t,e){var i=e.get("color");if(i){var n;return d(t=t||[],function(t){var e=new Lo(t),i=e.get("color");(e.get("itemStyle.normal.color")||i&&"none"!==i)&&(n=!0)}),n||((t[0]||(t[0]={})).color=i.slice()),t}}function Lh(t){this.group=new jy,t.add(this.group)}function kh(t,e,i,n,o,a){var r=[[o?t:t-CI,e],[t+i,e],[t+i,e+n],[o?t:t-CI,e+n]];return!a&&r.splice(2,0,[t+i+CI,e+n/2]),!o&&r.push([t,e+n/2]),r}function Ph(t,e,i){t.eventData={componentType:"series",componentSubType:"treemap",seriesIndex:e.componentIndex,seriesName:e.name,seriesType:"treemap",selfType:"breadcrumb",nodeData:{dataIndex:i&&i.dataIndex,name:i&&i.name},treePathInfo:i&&Ah(i,e)}}function Oh(){var t,e=[],i={};return{add:function(t,n,o,a,r){return _(a)&&(r=a,a=0),!i[t.id]&&(i[t.id]=1,e.push({el:t,target:n,time:o,delay:a,easing:r}),!0)},done:function(e){return t=e,this},start:function(){for(var n=e.length,o=0,a=e.length;o=0;a--)null==i[a]&&(delete n[e[a]],e.pop())}function Vh(t,e){var i=t.visual,n=[];b(i)?ZI(i,function(t){n.push(t)}):null!=i&&n.push(i);var o={color:1,symbol:1};e||1!==n.length||o.hasOwnProperty(t.type)||(n[1]=n[0]),Xh(t,n)}function Bh(t){return{applyVisual:function(e,i,n){e=this.mapValueToVisual(e),n("color",t(i("color"),e))},_doMap:Zh([0,1])}}function Gh(t){var e=this.option.visual;return e[Math.round(wi(t,[0,1],[0,e.length-1],!0))]||{}}function Wh(t){return function(e,i,n){n(t,this.mapValueToVisual(e))}}function Hh(t){var e=this.option.visual;return e[this.option.loop&&t!==XI?t%e.length:t]}function Fh(){return this.option.visual[0]}function Zh(t){return{linear:function(e){return wi(e,t,this.option.visual,!0)},category:Hh,piecewise:function(e,i){var n=Uh.call(this,i);return null==n&&(n=wi(e,t,this.option.visual,!0)),n},fixed:Fh}}function Uh(t){var e=this.option,i=e.pieceList;if(e.hasSpecialVisual){var n=i[jI.findPieceIndex(t,i)];if(n&&n.visual)return n.visual[this.type]}}function Xh(t,e){return t.visual=e,"color"===t.type&&(t.parsedVisual=f(e,function(t){return Mt(t)})),e}function jh(t,e,i){return t?e<=i:e=o.length||t===o[t.depth])&&qh(t,eu(r,u,t,e,p,a),i,n,o,a)})}else l=$h(u),t.setVisual("color",l)}}function Yh(t,e,i,n){var o=a({},e);return d(["color","colorAlpha","colorSaturation"],function(a){var r=t.get(a,!0);null==r&&i&&(r=i[a]),null==r&&(r=e[a]),null==r&&(r=n.get(a)),null!=r&&(o[a]=r)}),o}function $h(t){var e=Jh(t,"color");if(e){var i=Jh(t,"colorAlpha"),n=Jh(t,"colorSaturation");return n&&(e=kt(e,null,null,n)),i&&(e=Pt(e,i)),e}}function Kh(t,e){return null!=e?kt(e,null,null,t):null}function Jh(t,e){var i=t[e];if(null!=i&&"none"!==i)return i}function Qh(t,e,i,n,o,a){if(a&&a.length){var r=tu(e,"color")||null!=o.color&&"none"!==o.color&&(tu(e,"colorAlpha")||tu(e,"colorSaturation"));if(r){var s=e.get("visualMin"),l=e.get("visualMax"),h=i.dataExtent.slice();null!=s&&sh[1]&&(h[1]=l);var u=e.get("colorMappingBy"),c={type:r.name,dataExtent:h,visual:r.range};"color"!==c.type||"index"!==u&&"id"!==u?c.mappingMethod="linear":(c.mappingMethod="category",c.loop=!0);var d=new jI(c);return d.__drColorMappingBy=u,d}}}function tu(t,e){var i=t.get(e);return $I(i)&&i.length?{name:e,range:i}:null}function eu(t,e,i,n,o,r){var s=a({},e);if(o){var l=o.type,h="color"===l&&o.__drColorMappingBy,u="index"===h?n:"id"===h?r.mapIdToIndex(i.getId()):i.getValue(t.get("visualDimension"));s[l]=o.mapValueToVisual(u)}return s}function iu(t,e,i,n){var o,a;if(!t.isRemoved()){var r=t.getLayout();o=r.width,a=r.height;var s=(f=t.getModel()).get(iT),l=f.get(nT)/2,h=du(f),u=Math.max(s,h),c=s-l,d=u-l,f=t.getModel();t.setLayout({borderWidth:s,upperHeight:u,upperLabelHeight:h},!0);var g=(o=JI(o-2*c,0))*(a=JI(a-c-d,0)),p=nu(t,f,g,e,i,n);if(p.length){var m={x:c,y:d,width:o,height:a},v=QI(o,a),y=1/0,x=[];x.area=0;for(var _=0,b=p.length;_=0;l--){var h=o["asc"===n?r-l-1:l].getValue();h/i*es[1]&&(s[1]=e)})}else s=[NaN,NaN];return{sum:n,dataExtent:s}}function su(t,e,i){for(var n,o=0,a=1/0,r=0,s=t.length;ro&&(o=n));var l=t.area*t.area,h=e*e*i;return l?JI(h*o/l,l/(h*a)):1/0}function lu(t,e,i,n,o){var a=e===i.width?0:1,r=1-a,s=["x","y"],l=["width","height"],h=i[s[a]],u=e?t.area/e:0;(o||u>i[l[r]])&&(u=i[l[r]]);for(var c=0,d=t.length;cRx&&(h=Rx),a=s}h=0?n+=h:n-=h:g>=0?n-=h:n+=h}return n}function Tu(t,e){return t.getVisual("opacity")||t.getModel().get(e)}function Au(t,e,i){var n=t.getGraphicEl(),o=Tu(t,e);null!=i&&(null==o&&(o=1),o*=i),n.downplay&&n.downplay(),n.traverse(function(t){"group"!==t.type&&t.setStyle("opacity",o)})}function Cu(t,e){var i=Tu(t,e),n=t.getGraphicEl();n.highlight&&n.highlight(),n.traverse(function(t){"group"!==t.type&&t.setStyle("opacity",i)})}function Du(t){return t instanceof Array||(t=[t,t]),t}function Lu(t){var e=t.coordinateSystem;if(!e||"view"===e.type){var i=t.getGraph();i.eachNode(function(t){var e=t.getModel();t.setLayout([+e.get("x"),+e.get("y")])}),ku(i)}}function ku(t){t.eachEdge(function(t){var e=t.getModel().get("lineStyle.normal.curveness")||0,i=V(t.node1.getLayout()),n=V(t.node2.getLayout()),o=[i,n];+e&&o.push([(i[0]+n[0])/2-(i[1]-n[1])*e,(i[1]+n[1])/2-(n[0]-i[0])*e]),t.setLayout(o)})}function Pu(t){var e=t.coordinateSystem;if(!e||"view"===e.type){var i=e.getBoundingRect(),n=t.getData(),o=n.graph,a=0,r=n.getSum("value"),s=2*Math.PI/(r||n.count()),l=i.width/2+i.x,h=i.height/2+i.y,u=Math.min(i.width,i.height)/2;o.eachNode(function(t){var e=t.getValue("value");a+=s*(r?e:1)/2,t.setLayout([u*Math.cos(a)+l,u*Math.sin(a)+h]),a+=s*(r?e:1)/2}),n.setLayout({cx:l,cy:h}),o.eachEdge(function(t){var e,i=t.getModel().get("lineStyle.normal.curveness")||0,n=V(t.node1.getLayout()),o=V(t.node2.getLayout()),a=(n[0]+o[0])/2,r=(n[1]+o[1])/2;+i&&(e=[l*(i*=3)+a*(1-i),h*i+r*(1-i)]),t.setLayout([n,o,e])})}}function Ou(t,e,i){for(var n=i.rect,o=n.width,a=n.height,r=[n.x+o/2,n.y+a/2],s=null==i.gravity?.1:i.gravity,l=0;l0?-1:i<0?1:e?-1:1}}function Zu(t,e){return Math.min(e[1],Math.max(e[0],t))}function Uu(t,e,i){this._axesMap=z(),this._axesLayout={},this.dimensions=t.dimensions,this._rect,this._model=t,this._init(t,e,i)}function Xu(t,e){return NT(ET(t,e[0]),e[1])}function ju(t,e){var i=e.layoutLength/(e.axisCount-1);return{position:i*t,axisNameAvailableWidth:i,axisLabelShow:!0}}function qu(t,e){var i,n,o=e.layoutLength,a=e.axisExpandWidth,r=e.axisCount,s=e.axisCollapseWidth,l=e.winInnerIndices,h=s,u=!1;return t$T}function hc(t){var e=t.length-1;return e<0&&(e=0),[t[0],t[e]]}function uc(t,e,i,n){var o=new jy;return o.add(new db({name:"main",style:gc(i),silent:!0,draggable:!0,cursor:"move",drift:FT(t,e,o,"nswe"),ondragend:FT(sc,e,{isEnd:!0})})),ZT(n,function(i){o.add(new db({name:i,style:{opacity:0},draggable:!0,silent:!0,invisible:!0,drift:FT(t,e,o,i),ondragend:FT(sc,e,{isEnd:!0})}))}),o}function cc(t,e,i,n){var o=n.brushStyle.lineWidth||0,a=jT(o,KT),r=i[0][0],s=i[1][0],l=r-o/2,h=s-o/2,u=i[0][1],c=i[1][1],d=u-a+o/2,f=c-a+o/2,g=u-r,p=c-s,m=g+o,v=p+o;fc(t,e,"main",r,s,g,p),n.transformable&&(fc(t,e,"w",l,h,a,v),fc(t,e,"e",d,h,a,v),fc(t,e,"n",l,h,m,a),fc(t,e,"s",l,f,m,a),fc(t,e,"nw",l,h,a,a),fc(t,e,"ne",d,h,a,a),fc(t,e,"sw",l,f,a,a),fc(t,e,"se",d,f,a,a))}function dc(t,e){var i=e.__brushOption,n=i.transformable,o=e.childAt(0);o.useStyle(gc(i)),o.attr({silent:!n,cursor:n?"move":"default"}),ZT(["w","e","n","s","se","sw","ne","nw"],function(i){var o=e.childOfName(i),a=vc(t,i);o&&o.attr({silent:!n,invisible:!n,cursor:n?tA[a]+"-resize":null})})}function fc(t,e,i,n,o,a,r){var s=e.childOfName(i);s&&s.setShape(wc(bc(t,e,[[n,o],[n+a,o+r]])))}function gc(t){return r({strokeNoScale:!0},t.brushStyle)}function pc(t,e,i,n){var o=[XT(t,i),XT(e,n)],a=[jT(t,i),jT(e,n)];return[[o[0],a[0]],[o[1],a[1]]]}function mc(t){return Mo(t.group)}function vc(t,e){if(e.length>1)return("e"===(n=[vc(t,(e=e.split(""))[0]),vc(t,e[1])])[0]||"w"===n[0])&&n.reverse(),n.join("");var i={left:"w",right:"e",top:"n",bottom:"s"},n=To({w:"left",e:"right",n:"top",s:"bottom"}[e],mc(t));return i[n]}function yc(t,e,i,n,o,a,r,s){var l=n.__brushOption,h=t(l.range),u=_c(i,a,r);ZT(o.split(""),function(t){var e=QT[t];h[e[0]][e[1]]+=u[e[0]]}),l.range=e(pc(h[0][0],h[1][0],h[0][1],h[1][1])),ic(i,n),sc(i,{isEnd:!1})}function xc(t,e,i,n,o){var a=e.__brushOption.range,r=_c(t,i,n);ZT(a,function(t){t[0]+=r[0],t[1]+=r[1]}),ic(t,e),sc(t,{isEnd:!1})}function _c(t,e,i){var n=t.group,o=n.transformCoordToLocal(e,i),a=n.transformCoordToLocal(0,0);return[o[0]-a[0],o[1]-a[1]]}function bc(t,e,n){var o=ac(t,e);return o&&!0!==o?o.clipPath(n,t._transform):i(n)}function wc(t){var e=XT(t[0][0],t[1][0]),i=XT(t[0][1],t[1][1]);return{x:e,y:i,width:jT(t[0][0],t[1][0])-e,height:jT(t[0][1],t[1][1])-i}}function Sc(t,e,i){if(t._brushType){var n=t._zr,o=t._covers,a=oc(t,e,i);if(!t._dragging)for(var r=0;r=0?e:NaN}})}function Bc(t){return+t.replace("dim","")}function Gc(t,e){var i=0;d(t,function(t){var e=Bc(t);e>i&&(i=e)});var n=e[0];n&&n.length-1>i&&(i=n.length-1);for(var o=[],a=0;a<=i;a++)o.push("dim"+a);return o}function Wc(t,e,i){var n=t.model,o=t.getRect(),a=new db({shape:{x:o.x,y:o.y,width:o.width,height:o.height}}),r="horizontal"===n.get("layout")?"width":"height";return a.setShape(r,0),So(a,{shape:{width:o.width,height:o.height}},e,i),a}function Hc(t,e,i,n){for(var o=[],a=0;a=i.length)return e;for(var o=-1,a=e.length,r=i[n++],s={},l={};++o=i.length)return t;var a=[],r=n[o++];return d(t,function(t,i){a.push({key:i,values:e(t,o)})}),r?a.sort(function(t,e){return r(t.key,e.key)}):a}var i=[],n=[];return{key:function(t){return i.push(t),this},sortKeys:function(t){return n[i.length-1]=t,this},entries:function(i){return e(t(i,0),0)}}}function qc(t,e){return Ko(t.getBoxLayoutParams(),{width:e.getWidth(),height:e.getHeight()})}function Yc(t,e,i,n,o,a,r){Kc(t,i,o),td(t,e,a,n,r),sd(t)}function $c(t){d(t,function(t){var e=ud(t.outEdges,gd),i=ud(t.inEdges,gd),n=Math.max(e,i);t.setLayout({value:n},!0)})}function Kc(t,e,i){for(var n=t,o=null,a=0;n.length;){o=[];for(var r=0,s=n.length;r0;o--)nd(a,r*=.99),id(a,n,i),ad(a,r),id(a,n,i)}function ed(t,e,i,n,o){var a=[];d(e,function(t){var e=t.length,i=0;d(t,function(t){i+=t.getLayout().value});var r=(n-(e-1)*o)/i;a.push(r)}),a.sort(function(t,e){return t-e});var r=a[0];d(e,function(t){d(t,function(t,e){t.setLayout({y:e},!0);var i=t.getLayout().value*r;t.setLayout({dy:i},!0)})}),d(i,function(t){var e=+t.getValue()*r;t.setLayout({dy:e},!0)})}function id(t,e,i){d(t,function(t){var n,o,a,r=0,s=t.length;for(t.sort(dd),a=0;a0){l=n.getLayout().y+o;n.setLayout({y:l},!0)}r=n.getLayout().y+n.getLayout().dy+e}if((o=r-e-i)>0){var l=n.getLayout().y-o;for(n.setLayout({y:l},!0),r=n.getLayout().y,a=s-2;a>=0;--a)(o=(n=t[a]).getLayout().y+n.getLayout().dy+e-r)>0&&(l=n.getLayout().y-o,n.setLayout({y:l},!0)),r=n.getLayout().y}})}function nd(t,e){d(t.slice().reverse(),function(t){d(t,function(t){if(t.outEdges.length){var i=ud(t.outEdges,od)/ud(t.outEdges,gd),n=t.getLayout().y+(i-cd(t))*e;t.setLayout({y:n},!0)}})})}function od(t){return cd(t.node2)*t.getValue()}function ad(t,e){d(t,function(t){d(t,function(t){if(t.inEdges.length){var i=ud(t.inEdges,rd)/ud(t.inEdges,gd),n=t.getLayout().y+(i-cd(t))*e;t.setLayout({y:n},!0)}})})}function rd(t){return cd(t.node1)*t.getValue()}function sd(t){d(t,function(t){t.outEdges.sort(ld),t.inEdges.sort(hd)}),d(t,function(t){var e=0,i=0;d(t.outEdges,function(t){t.setLayout({sy:e},!0),e+=t.getLayout().dy}),d(t.inEdges,function(t){t.setLayout({ty:i},!0),i+=t.getLayout().dy})})}function ld(t,e){return t.node2.getLayout().y-e.node2.getLayout().y}function hd(t,e){return t.node1.getLayout().y-e.node1.getLayout().y}function ud(t,e){for(var i=0,n=t.length,o=-1;++oe?1:t===e?0:NaN}function gd(t){return t.getValue()}function pd(t,e,i,n){jy.call(this),this.bodyIndex,this.whiskerIndex,this.styleUpdater=i,this._createContent(t,e,n),this.updateData(t,e,n),this._seriesModel}function md(t,e,i){return f(t,function(t){return t=t.slice(),t[e]=i.initBaseline,t})}function vd(t){var e={};return d(t,function(t,i){e["ends"+i]=t}),e}function yd(t){this.group=new jy,this.styleUpdater=t}function xd(t,e,i){var n=e.getItemModel(i),o=n.getModel(mA),a=e.getItemVisual(i,"color"),r=o.getItemStyle(["borderColor"]),s=t.childAt(t.whiskerIndex);s.style.set(r),s.style.stroke=a,s.dirty();var l=t.childAt(t.bodyIndex);l.style.set(r),l.style.stroke=a,l.dirty(),uo(t,n.getModel(vA).getItemStyle())}function _d(t){var e=[],i=[];return t.eachSeriesByType("boxplot",function(t){var n=t.getBaseAxis(),o=l(i,n);o<0&&(o=i.length,i[o]=n,e[o]={axis:n,seriesModels:[]}),e[o].seriesModels.push(t)}),e}function bd(t){var e,i,n=t.axis,o=t.seriesModels,a=o.length,r=t.boxWidthList=[],s=t.boxOffsetList=[],l=[];if("category"===n.type)i=n.getBandWidth();else{var h=0;xA(o,function(t){h=Math.max(h,t.getData().count())}),e=n.getExtent(),Math.abs(e[1]-e[0])}xA(o,function(t){var e=t.get("boxWidth");y(e)||(e=[e,e]),l.push([Si(e[0],i)||0,Si(e[1],i)||0])});var u=.8*i-2,c=u/a*.3,d=(u-c*(a-1))/a,f=d/2-u/2;xA(o,function(t,e){s.push(f),f+=c+d,r.push(Math.min(Math.max(d,l[e][0]),l[e][1]))})}function wd(t,e,i){var n,o=t.coordinateSystem,a=t.getData(),r=i/2,s=t.get("layout"),l="horizontal"===s?0:1,h=1-l,u=["x","y"],c=[];d(a.dimensions,function(t){var e=a.getDimensionInfo(t).coordDim;e===u[h]?c.push(t):e===u[l]&&(n=t)}),null==n||c.length<5||a.each([n].concat(c),function(){function t(t){var i=[];i[l]=d,i[h]=t;var n;return isNaN(d)||isNaN(t)?n=[NaN,NaN]:(n=o.dataToPoint(i))[l]+=e,n}function i(t,e){var i=t.slice(),n=t.slice();i[l]+=r,n[l]-=r,e?y.push(i,n):y.push(n,i)}function n(t){var e=[t.slice(),t.slice()];e[0][l]-=r,e[1][l]+=r,v.push(e)}var u=arguments,d=u[0],f=u[c.length+1],g=t(u[3]),p=t(u[1]),m=t(u[5]),v=[[p,t(u[2])],[m,t(u[4])]];n(p),n(m),n(g);var y=[];i(v[0][1],0),i(v[1][1],1),a.setItemLayout(f,{chartLayout:s,initBaseline:g[h],median:g,bodyEnds:y,whiskerEnds:v})})}function Sd(t,e,i){var n=e.getItemModel(i),o=n.getModel(_A),a=e.getItemVisual(i,"color"),r=e.getItemVisual(i,"borderColor")||a,s=o.getItemStyle(["color","color0","borderColor","borderColor0"]),l=t.childAt(t.whiskerIndex);l.useStyle(s),l.style.stroke=r;var h=t.childAt(t.bodyIndex);h.useStyle(s),h.style.fill=a,h.style.stroke=r,uo(t,n.getModel(bA).getItemStyle())}function Md(t,e){var i,n=t.getBaseAxis(),o="category"===n.type?n.getBandWidth():(i=n.getExtent(),Math.abs(i[1]-i[0])/e.count()),a=Si(TA(t.get("barMaxWidth"),o),o),r=Si(TA(t.get("barMinWidth"),1),o),s=t.get("barWidth");return null!=s?Si(s,o):Math.max(Math.min(o/2,a),r)}function Id(t){return y(t)||(t=[+t,+t]),t}function Td(t,e){t.eachChild(function(t){t.attr({z:e.z,zlevel:e.zlevel,style:{stroke:"stroke"===e.brushType?e.color:null,fill:"fill"===e.brushType?e.color:null}})})}function Ad(t,e){jy.call(this);var i=new Jr(t,e),n=new jy;this.add(i),this.add(n),n.beforeUpdate=function(){this.attr(i.getScale())},this.updateData(t,e)}function Cd(t){var e=t.data;e&&e[0]&&e[0][0]&&e[0][0].coord&&(t.data=f(e,function(t){var e={coords:[t[0].coord,t[1].coord]};return t[0].name&&(e.fromName=t[0].name),t[1].name&&(e.toName=t[1].name),o([e,t[0],t[1]])}))}function Dd(t,e,i){jy.call(this),this.add(this.createLine(t,e,i)),this._updateEffectSymbol(t,e)}function Ld(t,e,i){jy.call(this),this._createPolyline(t,e,i)}function kd(t,e,i){Dd.call(this,t,e,i),this._lastFrame=0,this._lastFramePercent=0}function Pd(){this.group=new jy,this._lineEl=new PA}function Od(t){return t instanceof Array||(t=[t,t]),t}function zd(){var t=iy();this.canvas=t,this.blurSize=30,this.pointSize=20,this.maxOpacity=1,this.minOpacity=0,this._gradientPixels={}}function Nd(t,e,i){var n=t[1]-t[0],o=(e=f(e,function(e){return{interval:[(e.interval[0]-t[0])/n,(e.interval[1]-t[0])/n]}})).length,a=0;return function(t){for(n=a;n=0;n--){var r=e[n].interval;if(r[0]<=t&&t<=r[1]){a=n;break}}return n>=0&&n=e[0]&&t<=e[1]}}function Rd(t){var e=t.dimensions;return"lng"===e[0]&&"lat"===e[1]}function Vd(t,e,i,n){var o=t.getItemLayout(e),a=i.get("symbolRepeat"),r=i.get("symbolClip"),s=i.get("symbolPosition")||"start",l=(i.get("symbolRotate")||0)*Math.PI/180||0,h=i.get("symbolPatternSize")||2,u=i.isAnimationEnabled(),c={dataIndex:e,layout:o,itemModel:i,symbolType:t.getItemVisual(e,"symbol")||"circle",color:t.getItemVisual(e,"color"),symbolClip:r,symbolRepeat:a,symbolRepeatDirection:i.get("symbolRepeatDirection"),symbolPatternSize:h,rotation:l,animationModel:u?i:null,hoverAnimation:u&&i.get("hoverAnimation"),z2:i.getShallow("z",!0)||0};Bd(i,a,o,n,c),Wd(t,e,o,a,r,c.boundingLength,c.pxSign,h,n,c),Hd(i,c.symbolScale,l,n,c);var d=c.symbolSize,f=i.get("symbolOffset");return y(f)&&(f=[Si(f[0],d[0]),Si(f[1],d[1])]),Fd(i,d,o,a,r,f,s,c.valueLineWidth,c.boundingLength,c.repeatCutLength,n,c),c}function Bd(t,e,i,n,o){var a,r=n.valueDim,s=t.get("symbolBoundingData"),l=n.coordSys.getOtherAxis(n.coordSys.getBaseAxis()),h=l.toGlobalCoord(l.dataToCoord(0)),u=1-+(i[r.wh]<=0);if(y(s)){var c=[Gd(l,s[0])-h,Gd(l,s[1])-h];c[1]0?1:a<0?-1:0}function Gd(t,e){return t.toGlobalCoord(t.dataToCoord(t.scale.parse(e)))}function Wd(t,e,i,n,o,a,r,s,l,h){var u=l.valueDim,c=l.categoryDim,d=Math.abs(i[c.wh]),f=t.getItemVisual(e,"symbolSize");y(f)?f=f.slice():(null==f&&(f="100%"),f=[f,f]),f[c.index]=Si(f[c.index],d),f[u.index]=Si(f[u.index],n?d:Math.abs(a)),h.symbolSize=f,(h.symbolScale=[f[0]/s,f[1]/s])[u.index]*=(l.isHorizontal?-1:1)*r}function Hd(t,e,i,n,o){var a=t.get(NA)||0;a&&(RA.attr({scale:e.slice(),rotation:i}),RA.updateTransform(),a/=RA.getLineScale(),a*=e[n.valueDim.index]),o.valueLineWidth=a}function Fd(t,e,i,n,o,r,s,l,h,u,c,d){var f=c.categoryDim,g=c.valueDim,p=d.pxSign,m=Math.max(e[g.index]+l,0),v=m;if(n){var y=Math.abs(h),x=I(t.get("symbolMargin"),"15%")+"",_=!1;x.lastIndexOf("!")===x.length-1&&(_=!0,x=x.slice(0,x.length-1)),x=Si(x,e[g.index]);var b=Math.max(m+2*x,0),w=_?0:2*x,S=Ri(n),M=S?n:sf((y+w)/b);b=m+2*(x=(y-M*m)/2/(_?M:M-1)),w=_?0:2*x,S||"fixed"===n||(M=u?sf((Math.abs(u)+w)/b):0),v=M*b-w,d.repeatTimes=M,d.symbolMargin=x}var T=p*(v/2),A=d.pathPosition=[];A[f.index]=i[f.wh]/2,A[g.index]="start"===s?T:"end"===s?h-T:h/2,r&&(A[0]+=r[0],A[1]+=r[1]);var C=d.bundlePosition=[];C[f.index]=i[f.xy],C[g.index]=i[g.xy];var D=d.barRectShape=a({},i);D[g.wh]=p*Math.max(Math.abs(i[g.wh]),Math.abs(A[g.index]+T)),D[f.wh]=i[f.wh];var L=d.clipShape={};L[f.xy]=-i[f.xy],L[f.wh]=c.ecSize[f.wh],L[g.xy]=0,L[g.wh]=i[g.wh]}function Zd(t){var e=t.symbolPatternSize,i=Hr(t.symbolType,-e/2,-e/2,e,e,t.color);return i.attr({culling:!0}),"image"!==i.type&&i.setStyle({strokeNoScale:!0}),i}function Ud(t,e,i,n){function o(t){var e=l.slice(),n=i.pxSign,o=t;return("start"===i.symbolRepeatDirection?n>0:n<0)&&(o=u-1-t),e[h.index]=d*(o-u/2+.5)+l[h.index],{position:e,scale:i.symbolScale.slice(),rotation:i.rotation}}var a=t.__pictorialBundle,r=i.symbolSize,s=i.valueLineWidth,l=i.pathPosition,h=e.valueDim,u=i.repeatTimes||0,c=0,d=r[e.valueDim.index]+s+2*i.symbolMargin;for(of(t,function(t){t.__pictorialAnimationIndex=c,t.__pictorialRepeatTimes=u,c0)],d=t.__pictorialBarRect;ol(d.style,u,a,n,e.seriesModel,o,c),uo(d,u)}function sf(t){var e=Math.round(t);return Math.abs(t-e)<1e-4?e:Math.ceil(t)}function lf(t,e,i){this.dimension="single",this.dimensions=["single"],this._axis=null,this._rect,this._init(t,e,i),this.model=t}function hf(t,e){e=e||{};var i=t.coordinateSystem,n=t.axis,o={},a=n.position,r=n.orient,s=i.getRect(),l=[s.x,s.x+s.width,s.y,s.y+s.height],h={horizontal:{top:l[2],bottom:l[3]},vertical:{left:l[0],right:l[1]}};o.position=["vertical"===r?h.vertical[a]:l[0],"horizontal"===r?h.horizontal[a]:l[3]];var u={horizontal:0,vertical:1};o.rotation=Math.PI/2*u[r];var c={top:-1,bottom:1,right:1,left:-1};o.labelDirection=o.tickDirection=o.nameDirection=c[a],t.get("axisTick.inside")&&(o.tickDirection=-o.tickDirection),I(e.labelInside,t.get("axisLabel.inside"))&&(o.labelDirection=-o.labelDirection);var d=e.rotate;return null==d&&(d=t.get("axisLabel.rotate")),o.labelRotation="top"===a?-d:d,o.labelInterval=n.getLabelInterval(),o.z2=1,o}function uf(t,e,i,n,o){var r=t.axis;if(!r.scale.isBlank()&&r.containData(e))if(t.involveSeries){var s=cf(e,t),l=s.payloadBatch,h=s.snapToValue;l[0]&&null==o.seriesIndex&&a(o,l[0]),!n&&t.snap&&r.containData(h)&&null!=h&&(e=h),i.showPointer(t,e,l,o),i.showTooltip(t,s,h)}else i.showPointer(t,e)}function cf(t,e){var i=e.axis,n=i.dim,o=t,a=[],r=Number.MAX_VALUE,s=-1;return XA(e.seriesModels,function(e,l){var h,u,c=e.coordDimToDataDim(n);if(e.getAxisTooltipData){var d=e.getAxisTooltipData(c,t,i);u=d.dataIndices,h=d.nestestValue}else{if(!(u=e.getData().indicesOfNearest(c[0],t,!1,"category"===i.type?.5:null)).length)return;h=e.getData().get(c[0],u[0])}if(null!=h&&isFinite(h)){var f=t-h,g=Math.abs(f);g<=r&&((g=0&&s<0)&&(r=g,s=f,o=h,a.length=0),XA(u,function(t){a.push({seriesIndex:e.seriesIndex,dataIndexInside:t,dataIndex:e.getData().getRawIndex(t)})}))}}),{payloadBatch:a,snapToValue:o}}function df(t,e,i,n){t[e.key]={value:i,payloadBatch:n}}function ff(t,e,i,n){var o=i.payloadBatch,a=e.axis,r=a.model,s=e.axisPointerModel;if(e.triggerTooltip&&o.length){var l=e.coordSys.model,h=Ys(l),u=t.map[h];u||(u=t.map[h]={coordSysId:l.id,coordSysIndex:l.componentIndex,coordSysType:l.type,coordSysMainType:l.mainType,dataByAxis:[]},t.list.push(u)),u.dataByAxis.push({axisDim:a.dim,axisIndex:r.componentIndex,axisType:r.type,axisId:r.id,value:n,valueLabelOpt:{precision:s.get("label.precision"),formatter:s.get("label.formatter")},seriesDataIndices:o.slice()})}}function gf(t,e,i){var n=i.axesInfo=[];XA(e,function(e,i){var o=e.axisPointerModel.option,a=t[i];a?(!e.useHandle&&(o.status="show"),o.value=a.value,o.seriesDataIndices=(a.payloadBatch||[]).slice()):!e.useHandle&&(o.status="hide"),"show"===o.status&&n.push({axisDim:e.axis.dim,axisIndex:e.axis.model.componentIndex,value:o.value})})}function pf(t,e,i,n){if(!xf(e)&&t.list.length){var o=((t.list[0].dataByAxis[0]||{}).seriesDataIndices||[])[0]||{};n({type:"showTip",escapeConnect:!0,x:e[0],y:e[1],tooltipOption:i.tooltipOption,position:i.position,dataIndexInside:o.dataIndexInside,dataIndex:o.dataIndex,seriesIndex:o.seriesIndex,dataByCoordSys:t.list})}else n({type:"hideTip"})}function mf(t,e,i){var n=i.getZr(),o=qA(n).axisPointerLastHighlights||{},a=qA(n).axisPointerLastHighlights={};XA(t,function(t,e){var i=t.axisPointerModel.option;"show"===i.status&&XA(i.seriesDataIndices,function(t){var e=t.seriesIndex+" | "+t.dataIndex;a[e]=t})});var r=[],s=[];d(o,function(t,e){!a[e]&&s.push(t)}),d(a,function(t,e){!o[e]&&r.push(t)}),s.length&&i.dispatchAction({type:"downplay",escapeConnect:!0,batch:s}),r.length&&i.dispatchAction({type:"highlight",escapeConnect:!0,batch:r})}function vf(t,e){for(var i=0;i<(t||[]).length;i++){var n=t[i];if(e.axis.dim===n.axisDim&&e.axis.model.componentIndex===n.axisIndex)return n}}function yf(t){var e=t.axis.model,i={},n=i.axisDim=t.axis.dim;return i.axisIndex=i[n+"AxisIndex"]=e.componentIndex,i.axisName=i[n+"AxisName"]=e.name,i.axisId=i[n+"AxisId"]=e.id,i}function xf(t){return!t||null==t[0]||isNaN(t[0])||null==t[1]||isNaN(t[1])}function _f(t,e,i){if(!Uv.node){var n=e.getZr();YA(n).records||(YA(n).records={}),bf(n,e),(YA(n).records[t]||(YA(n).records[t]={})).handler=i}}function bf(t,e){function i(i,n){t.on(i,function(i){var o=If(e);$A(YA(t).records,function(t){t&&n(t,i,o.dispatchAction)}),wf(o.pendings,e)})}YA(t).initialized||(YA(t).initialized=!0,i("click",v(Mf,"click")),i("mousemove",v(Mf,"mousemove")),i("globalout",Sf))}function wf(t,e){var i,n=t.showTip.length,o=t.hideTip.length;n?i=t.showTip[n-1]:o&&(i=t.hideTip[o-1]),i&&(i.dispatchAction=null,e.dispatchAction(i))}function Sf(t,e,i){t.handler("leave",null,i)}function Mf(t,e,i,n){e.handler(t,i,n)}function If(t){var e={showTip:[],hideTip:[]},i=function(n){var o=e[n.type];o?o.push(n):(n.dispatchAction=i,t.dispatchAction(n))};return{dispatchAction:i,pendings:e}}function Tf(t,e){if(!Uv.node){var i=e.getZr();(YA(i).records||{})[t]&&(YA(i).records[t]=null)}}function Af(){}function Cf(t,e,i,n){Df(JA(i).lastProp,n)||(JA(i).lastProp=n,e?wo(i,n,t):(i.stopAnimation(),i.attr(n)))}function Df(t,e){if(b(t)&&b(e)){var i=!0;return d(e,function(e,n){i=i&&Df(t[n],e)}),!!i}return t===e}function Lf(t,e){t[e.get("label.show")?"show":"hide"]()}function kf(t){return{position:t.position.slice(),rotation:t.rotation||0}}function Pf(t,e,i){var n=e.get("z"),o=e.get("zlevel");t&&t.traverse(function(t){"group"!==t.type&&(null!=n&&(t.z=n),null!=o&&(t.zlevel=o),t.silent=i)})}function Of(t){var e,i=t.get("type"),n=t.getModel(i+"Style");return"line"===i?(e=n.getLineStyle()).fill=null:"shadow"===i&&((e=n.getAreaStyle()).stroke=null),e}function zf(t,e,i,n,o){var a=Ef(i.get("value"),e.axis,e.ecModel,i.get("seriesDataIndices"),{precision:i.get("label.precision"),formatter:i.get("label.formatter")}),r=i.getModel("label"),s=Gx(r.get("padding")||0),l=r.getFont(),h=de(a,l),u=o.position,c=h.width+s[1]+s[3],d=h.height+s[0]+s[2],f=o.align;"right"===f&&(u[0]-=c),"center"===f&&(u[0]-=c/2);var g=o.verticalAlign;"bottom"===g&&(u[1]-=d),"middle"===g&&(u[1]-=d/2),Nf(u,c,d,n);var p=r.get("backgroundColor");p&&"auto"!==p||(p=e.get("axisLine.lineStyle.color")),t.label={shape:{x:0,y:0,width:c,height:d,r:r.get("borderRadius")},position:u.slice(),style:{text:a,textFont:l,textFill:r.getTextColor(),textPosition:"inside",fill:p,stroke:r.get("borderColor")||"transparent",lineWidth:r.get("borderWidth")||0,shadowBlur:r.get("shadowBlur"),shadowColor:r.get("shadowColor"),shadowOffsetX:r.get("shadowOffsetX"),shadowOffsetY:r.get("shadowOffsetY")},z2:10}}function Nf(t,e,i,n){var o=n.getWidth(),a=n.getHeight();t[0]=Math.min(t[0]+e,o)-e,t[1]=Math.min(t[1]+i,a)-i,t[0]=Math.max(t[0],0),t[1]=Math.max(t[1],0)}function Ef(t,e,i,n,o){var a=e.scale.getLabel(t,{precision:o.precision}),r=o.formatter;if(r){var s={value:Br(e,t),seriesData:[]};d(n,function(t){var e=i.getSeriesByIndex(t.seriesIndex),n=t.dataIndexInside,o=e&&e.getDataParams(n);o&&s.seriesData.push(o)}),_(r)?a=r.replace("{value}",a):x(r)&&(a=r(s))}return a}function Rf(t,e,i){var n=ot();return ht(n,n,i.rotation),lt(n,n,i.position),Io([t.dataToCoord(e),(i.labelOffset||0)+(i.labelDirection||1)*(i.labelMargin||0)],n)}function Vf(t,e,i,n,o,a){var r=DM.innerTextLayout(i.rotation,0,i.labelDirection);i.labelMargin=o.get("label.margin"),zf(e,n,o,a,{position:Rf(n.axis,t,i),align:r.textAlign,verticalAlign:r.textVerticalAlign})}function Bf(t,e,i){return i=i||0,{x1:t[i],y1:t[1-i],x2:e[i],y2:e[1-i]}}function Gf(t,e,i){return i=i||0,{x:t[i],y:t[1-i],width:e[i],height:e[1-i]}}function Wf(t,e,i,n,o,a){return{cx:t,cy:e,r0:i,r:n,startAngle:o,endAngle:a,clockwise:!0}}function Hf(t,e){var i={};return i[e.dim+"AxisIndex"]=e.index,t.getCartesian(i)}function Ff(t){return"x"===t.dim?0:1}function Zf(t){return t.isHorizontal()?0:1}function Uf(t,e){var i=t.getRect();return[i[nC[e]],i[nC[e]]+i[oC[e]]]}function Xf(t,e,i){var n=new db({shape:{x:t.x-10,y:t.y-10,width:0,height:t.height+20}});return So(n,{shape:{width:t.width+20,height:t.height+20}},e,i),n}function jf(t,e,i){if(t.count())for(var n,o=e.coordinateSystem,a=e.getLayerSeries(),r=f(a,function(e){return f(e.indices,function(e){var i=o.dataToPoint(t.get("time",e));return i[1]=t.get("value",e),i})}),s=qf(r),l=s.y0,h=i/s.max,u=a.length,c=a[0].indices.length,d=0;da&&(a=h),n.push(h)}for(var u=0;ua&&(a=d)}return r.y0=o,r.max=a,r}function Yf(t,e){return e=e||[0,0],f(["x","y"],function(i,n){var o=this.getAxis(i),a=e[n],r=t[n]/2;return"category"===o.type?o.getBandWidth():Math.abs(o.dataToCoord(a-r)-o.dataToCoord(a+r))},this)}function $f(t,e){return e=e||[0,0],f([0,1],function(i){var n=e[i],o=t[i]/2,a=[],r=[];return a[i]=n-o,r[i]=n+o,a[1-i]=r[1-i]=e[1-i],Math.abs(this.dataToPoint(a)[i]-this.dataToPoint(r)[i])},this)}function Kf(t,e){var i=this.getAxis(),n=e instanceof Array?e[0]:e,o=(t instanceof Array?t[0]:t)/2;return"category"===i.type?i.getBandWidth():Math.abs(i.dataToCoord(n-o)-i.dataToCoord(n+o))}function Jf(t,e){return f(["Radius","Angle"],function(i,n){var o=this["get"+i+"Axis"](),a=e[n],r=t[n]/2,s="dataTo"+i,l="category"===o.type?o.getBandWidth():Math.abs(o[s](a-r)-o[s](a+r));return"Angle"===i&&(l=l*Math.PI/180),l},this)}function Qf(t){var e,i=t.type;if("path"===i){var n=t.shape;(e=Un(n.pathData,null,{x:n.x||0,y:n.y||0,width:n.width||0,height:n.height||0},"center")).__customPathData=t.pathData}else"image"===i?(e=new qe({})).__customImagePath=t.style.image:"text"===i?(e=new ib({})).__customText=t.style.text:e=new(0,Tb[i.charAt(0).toUpperCase()+i.slice(1)]);return e.__customGraphicType=i,e.name=t.name,e}function tg(t,e,n,o,a,r){var s={},l=n.style||{};if(n.shape&&(s.shape=i(n.shape)),n.position&&(s.position=n.position.slice()),n.scale&&(s.scale=n.scale.slice()),n.origin&&(s.origin=n.origin.slice()),n.rotation&&(s.rotation=n.rotation),"image"===t.type&&n.style){h=s.style={};d(["x","y","width","height"],function(e){eg(e,h,l,t.style,r)})}if("text"===t.type&&n.style){var h=s.style={};d(["x","y"],function(e){eg(e,h,l,t.style,r)}),!l.hasOwnProperty("textFill")&&l.fill&&(l.textFill=l.fill),!l.hasOwnProperty("textStroke")&&l.stroke&&(l.textStroke=l.stroke)}if("group"!==t.type&&(t.useStyle(l),r)){t.style.opacity=0;var u=l.opacity;null==u&&(u=1),So(t,{style:{opacity:u}},o,e)}r?t.attr(s):wo(t,s,o,e),t.attr({z2:n.z2||0,silent:n.silent}),!1!==n.styleEmphasis&&uo(t,n.styleEmphasis)}function eg(t,e,i,n,o){null==i[t]||o||(e[t]=i[t],i[t]=n[t])}function ig(t,e,i,n){function o(t){null==t&&(t=u),y&&(c=e.getItemModel(t),d=c.getModel(uC),f=c.getModel(cC),g=Yr(e),p=e.getItemVisual(t,"color"),y=!1)}var s=t.get("renderItem"),l=t.coordinateSystem,h={};l&&(h=l.prepareCustoms?l.prepareCustoms():fC[l.type](l));var u,c,d,f,g,p,m=r({getWidth:n.getWidth,getHeight:n.getHeight,getZr:n.getZr,getDevicePixelRatio:n.getDevicePixelRatio,value:function(t,i){return null==i&&(i=u),e.get(e.getDimension(t||0),i)},style:function(i,n){null==n&&(n=u),o(n);var r=c.getModel(lC).getItemStyle();null!=p&&(r.fill=p);var s=e.getItemVisual(n,"opacity");return null!=s&&(r.opacity=s),null!=g&&(fo(r,d,null,{autoColor:p,isRectText:!0}),r.text=d.getShallow("show")?T(t.getFormattedLabel(n,"normal"),e.get(g,n)):null),i&&a(r,i),r},styleEmphasis:function(i,n){null==n&&(n=u),o(n);var r=c.getModel(hC).getItemStyle();return null!=g&&(fo(r,f,null,{isRectText:!0},!0),r.text=f.getShallow("show")?A(t.getFormattedLabel(n,"emphasis"),t.getFormattedLabel(n,"normal"),e.get(g,n)):null),i&&a(r,i),r},visual:function(t,i){return null==i&&(i=u),e.getItemVisual(i,t)},barLayout:function(t){if(l.getBaseAxis){var e=l.getBaseAxis();return nl.getLayoutOnAxis(r({axis:e},t),n)}},currentSeriesIndices:function(){return i.getCurrentSeriesIndices()},font:function(t){return _o(t,i)}},h.api||{}),v={context:{},seriesId:t.id,seriesName:t.name,seriesIndex:t.seriesIndex,coordSys:h.coordSys,dataInsideLength:e.count(),encode:ng(t.getData())},y=!0;return function(t){return u=t,y=!0,s&&s(r({dataIndexInside:t,dataIndex:e.getRawIndex(t)},v),m)||{}}}function ng(t){var e={};return d(t.dimensions,function(i,n){var o=t.getDimensionInfo(i);if(!o.isExtraCoord){var a=o.coordDim;(e[a]=e[a]||[])[o.coordDimIndex]=n}}),e}function og(t,e,i,n,o,a){(t=ag(t,e,i,n,o,a))&&a.setItemGraphicEl(e,t)}function ag(t,e,i,n,o,a){var r=i.type;if(!t||r===t.__customGraphicType||"path"===r&&i.pathData===t.__customPathData||"image"===r&&i.style.image===t.__customImagePath||"text"===r&&i.style.text===t.__customText||(o.remove(t),t=null),null!=r){var s=!t;if(!t&&(t=Qf(i)),tg(t,e,i,n,a,s),"group"===r){var l=t.children()||[],h=i.children||[];if(i.diffChildrenByName)rg({oldChildren:l,newChildren:h,dataIndex:e,animatableModel:n,group:t,data:a});else{for(var u=0;un?t-=l+a:t+=a),null!=r&&(e+h+r>o?e-=h+r:e+=r),[t,e]}function kg(t,e,i,n,o){var a=Pg(i),r=a.width,s=a.height;return t=Math.min(t+r,n)-r,e=Math.min(e+s,o)-s,t=Math.max(t,0),e=Math.max(e,0),[t,e]}function Pg(t){var e=t.clientWidth,i=t.clientHeight;if(document.defaultView&&document.defaultView.getComputedStyle){var n=document.defaultView.getComputedStyle(t);n&&(e+=parseInt(n.paddingLeft,10)+parseInt(n.paddingRight,10)+parseInt(n.borderLeftWidth,10)+parseInt(n.borderRightWidth,10),i+=parseInt(n.paddingTop,10)+parseInt(n.paddingBottom,10)+parseInt(n.borderTopWidth,10)+parseInt(n.borderBottomWidth,10))}return{width:e,height:i}}function Og(t,e,i){var n=i[0],o=i[1],a=0,r=0,s=e.width,l=e.height;switch(t){case"inside":a=e.x+s/2-n/2,r=e.y+l/2-o/2;break;case"top":a=e.x+s/2-n/2,r=e.y-o-5;break;case"bottom":a=e.x+s/2-n/2,r=e.y+l+5;break;case"left":a=e.x-n-5,r=e.y+l/2-o/2;break;case"right":a=e.x+s+5,r=e.y+l/2-o/2}return[a,r]}function zg(t){return"center"===t||"middle"===t}function Ng(t){return t.get("stack")||"__ec_stack_"+t.seriesIndex}function Eg(t){return t.dim}function Rg(t,e){var i={};d(t,function(t,e){var n=t.getData(),o=t.coordinateSystem.getBaseAxis(),a=o.getExtent(),r="category"===o.type?o.getBandWidth():Math.abs(a[1]-a[0])/n.count(),s=i[Eg(o)]||{bandWidth:r,remainedWidth:r,autoWidthCount:0,categoryGap:"20%",gap:"30%",stacks:{}},l=s.stacks;i[Eg(o)]=s;var h=Ng(t);l[h]||s.autoWidthCount++,l[h]=l[h]||{width:0,maxWidth:0};var u=Si(t.get("barWidth"),r),c=Si(t.get("barMaxWidth"),r),d=t.get("barGap"),f=t.get("barCategoryGap");u&&!l[h].width&&(u=Math.min(s.remainedWidth,u),l[h].width=u,s.remainedWidth-=u),c&&(l[h].maxWidth=c),null!=d&&(s.gap=d),null!=f&&(s.categoryGap=f)});var n={};return d(i,function(t,e){n[e]={};var i=t.stacks,o=t.bandWidth,a=Si(t.categoryGap,o),r=Si(t.gap,1),s=t.remainedWidth,l=t.autoWidthCount,h=(s-a)/(l+(l-1)*r);h=Math.max(h,0),d(i,function(t,e){var i=t.maxWidth;i&&ie[0]&&(e=e.slice().reverse());var n=t.coordToPoint([e[0],i]),o=t.coordToPoint([e[1],i]);return{x1:n[0],y1:n[1],x2:o[0],y2:o[1]}}function Ug(t){return t.getRadiusAxis().inverse?0:1}function Xg(t,e,i){return{position:[t.cx,t.cy],rotation:i/180*Math.PI,labelDirection:-1,tickDirection:-1,nameDirection:1,labelRotate:e.getModel("axisLabel").get("rotate"),z2:1}}function jg(t,e,i,n,o){var a=e.axis,r=a.dataToCoord(t),s=n.getAngleAxis().getExtent()[0];s=s/180*Math.PI;var l,h,u,c=n.getRadiusAxis().getExtent();if("radius"===a.dim){var d=ot();ht(d,d,s),lt(d,d,[n.cx,n.cy]),l=Io([r,-o],d);var f=e.getModel("axisLabel").get("rotate")||0,g=DM.innerTextLayout(s,f*Math.PI/180,-1);h=g.textAlign,u=g.textVerticalAlign}else{var p=c[1];l=n.coordToPoint([p+o,r]);var m=n.cx,v=n.cy;h=Math.abs(l[0]-m)/p<.3?"center":l[0]>m?"left":"right",u=Math.abs(l[1]-v)/p<.3?"middle":l[1]>v?"top":"bottom"}return{position:l,align:h,verticalAlign:u}}function qg(t,e){e.update="updateView",ir(e,function(e,i){var n={};return i.eachComponent({mainType:"geo",query:e},function(i){i[t](e.name),d(i.coordinateSystem.regions,function(t){n[t.name]=i.isSelected(t.name)||!1})}),{selected:n,name:e.name}})}function Yg(t){var e={};d(t,function(t){e[t]=1}),t.length=0,d(e,function(e,i){t.push(i)})}function $g(t){if(t)for(var e in t)if(t.hasOwnProperty(e))return!0}function Kg(t,e,n){function o(){var t=function(){};return t.prototype.__hidden=t.prototype,new t}var a={};return HC(e,function(e){var r=a[e]=o();HC(t[e],function(t,o){if(jI.isValidType(o)){var a={type:o,visual:t};n&&n(a,e),r[o]=new jI(a),"opacity"===o&&((a=i(a)).type="colorAlpha",r.__hidden.__alphaForOpacity=new jI(a))}})}),a}function Jg(t,e,n){var o;d(n,function(t){e.hasOwnProperty(t)&&$g(e[t])&&(o=!0)}),o&&d(n,function(n){e.hasOwnProperty(n)&&$g(e[n])?t[n]=i(e[n]):delete t[n]})}function Qg(t,e,i,n,o,a){function r(t){return i.getItemVisual(u,t)}function s(t,e){i.setItemVisual(u,t,e)}function l(t,l){u=null==a?t:l;var c=i.getRawDataItem(u);if(!c||!1!==c.visualMap)for(var d=n.call(o,t),f=e[d],g=h[d],p=0,m=g.length;p1)return!1;var u=ap(i-t,o-t,n-e,a-e)/l;return!(u<0||u>1)}function op(t){return t<=1e-6&&t>=-1e-6}function ap(t,e,i,n){return t*n-e*i}function rp(t,e,i){var n=this._targetInfoList=[],o={},a=lp(e,t);ZC($C,function(t,e){(!i||!i.include||UC(i.include,e)>=0)&&t(a,n,o)})}function sp(t){return t[0]>t[1]&&t.reverse(),t}function lp(t,e){return Fo(t,e,{includeMainTypes:qC})}function hp(t,e,i,n){var o=i.getAxis(["x","y"][t]),a=sp(f([0,1],function(t){return e?o.coordToData(o.toLocalCoord(n[t])):o.toGlobalCoord(o.dataToCoord(n[t]))})),r=[];return r[t]=a,r[1-t]=[NaN,NaN],{values:a,xyMinMax:r}}function up(t,e,i,n){return[e[0]-n[t]*i[0],e[1]-n[t]*i[1]]}function cp(t,e){var i=dp(t),n=dp(e),o=[i[0]/n[0],i[1]/n[1]];return isNaN(o[0])&&(o[0]=1),isNaN(o[1])&&(o[1]=1),o}function dp(t){return t?[t[0][1]-t[0][0],t[1][1]-t[1][0]]:[NaN,NaN]}function fp(t,e,i,n,o){if(o){var a=t.getZr();a[nD]||(a[iD]||(a[iD]=gp),La(a,iD,i,e)(t,n))}}function gp(t,e){if(!t.isDisposed()){var i=t.getZr();i[nD]=!0,t.dispatchAction({type:"brushSelect",batch:e}),i[nD]=!1}}function pp(t,e,i,n){for(var o=0,a=e.length;o=0}function Dp(t,e,i){function n(t,e){return l(e.nodes,t)>=0}function o(t,n){var o=!1;return e(function(e){d(i(t,e)||[],function(t){n.records[e.name][t]&&(o=!0)})}),o}function a(t,n){n.nodes.push(t),e(function(e){d(i(t,e)||[],function(t){n.records[e.name][t]=!0})})}return function(i){var r={nodes:[],records:{}};if(e(function(t){r.records[t.name]={}}),!i)return r;a(i,r);var s;do{s=!1,t(function(t){!n(t,r)&&o(t,r)&&(a(t,r),s=!0)})}while(s);return r}}function Lp(t,e,i){var n=[1/0,-1/0];return mD(i,function(t){var i=t.getData();i&&mD(t.coordDimToDataDim(e),function(t){var e=i.getDataExtent(t);e[0]n[1]&&(n[1]=e[1])})}),n[1]0?0:NaN);var r=i.getMax(!0);return null!=r&&"dataMax"!==r&&"function"!=typeof r?e[1]=r:o&&(e[1]=a>0?a-1:NaN),i.get("scale",!0)||(e[0]>0&&(e[0]=0),e[1]<0&&(e[1]=0)),e}function Pp(t,e){var i=t.getAxisModel(),n=t._percentWindow,o=t._valueWindow;if(n){var a=Ci(o,[0,500]);a=Math.min(a,20);var r=e||0===n[0]&&100===n[1];i.setRange(r?null:+o[0].toFixed(a),r?null:+o[1].toFixed(a))}}function Op(t){var e=t._minMaxSpan={},i=t._dataZoomModel;mD(["min","max"],function(n){e[n+"Span"]=i.get(n+"Span");var o=i.get(n+"ValueSpan");if(null!=o&&(e[n+"ValueSpan"]=o,null!=(o=t.getAxisModel().axis.scale.parse(o)))){var a=t._dataExtent;e[n+"Span"]=wi(a[0]+o,a,[0,100],!0)}})}function zp(t){var e={};return xD(["start","end","startValue","endValue","throttle"],function(i){t.hasOwnProperty(i)&&(e[i]=t[i])}),e}function Np(t,e){var i=t._rangePropMode,n=t.get("rangeMode");xD([["start","startValue"],["end","endValue"]],function(t,o){var a=null!=e[t[0]],r=null!=e[t[1]];a&&!r?i[o]="percent":!a&&r?i[o]="value":n?i[o]=n[o]:a&&(i[o]="percent")})}function Ep(t){return{x:"y",y:"x",radius:"angle",angle:"radius"}[t]}function Rp(t){return"vertical"===t?"ns-resize":"ew-resize"}function Vp(t,e){var i=Hp(t),n=e.dataZoomId,o=e.coordId;d(i,function(t,i){var a=t.dataZoomInfos;a[n]&&l(e.allCoordIds,o)<0&&(delete a[n],t.count--)}),Zp(i);var a=i[o];a||((a=i[o]={coordId:o,dataZoomInfos:{},count:0}).controller=Fp(t,a),a.dispatchAction=v(qp,t)),!a.dataZoomInfos[n]&&a.count++,a.dataZoomInfos[n]=e;var r=Yp(a.dataZoomInfos);a.controller.enable(r.controlType,r.opt),a.controller.setPointerChecker(e.containsPoint),La(a,"dispatchAction",e.throttleRate,"fixRate")}function Bp(t,e){var i=Hp(t);d(i,function(t){t.controller.dispose();var i=t.dataZoomInfos;i[e]&&(delete i[e],t.count--)}),Zp(i)}function Gp(t,e){if(t&&"dataZoom"===t.type&&t.batch)for(var i=0,n=t.batch.length;in[e]&&(e=o),a(i,t.roamControllerOpt)}),{controlType:e,opt:i}}function $p(t,e,i){i.getAxisProxy(t.name,e).reset(i)}function Kp(t,e,i){i.getAxisProxy(t.name,e).filterData(i)}function Jp(t,e){return t&&t.hasOwnProperty&&t.hasOwnProperty(e)}function Qp(t,e){t.eachTargetSeries(function(e){var i=e.getData();Qg(t.stateList,t.targetVisuals,i,t.getValueState,t,t.getDataDimension(i))})}function tm(t){t.eachSeries(function(e){var i=e.getData(),n=[];t.eachComponent("visualMap",function(t){if(t.isTargetSeries(e)){var o=t.getVisualMeta(m(em,null,e,t))||{stops:[],outerColors:[]};o.dimension=t.getDataDimension(i),n.push(o)}}),e.getData().setVisual("visualMeta",n)})}function em(t,e,i,n){for(var o=e.targetVisuals[n],a=jI.prepareVisualTypes(o),r={color:t.getData().getVisual("color")},s=0,l=a.length;s=0&&(r[a]=+r[a].toFixed(h)),r}function vm(t,e){var n=t.getData(),o=t.coordinateSystem;if(e&&!gm(e)&&!y(e.coord)&&o){var a=o.dimensions,r=ym(e,n,o,t);if((e=i(e)).type&&fL[e.type]&&r.baseAxis&&r.valueAxis){var s=cL(a,r.baseAxis.dim),l=cL(a,r.valueAxis.dim);e.coord=fL[e.type](n,r.baseDataDim,r.valueDataDim,s,l),e.value=e.coord[l]}else{for(var h=[null!=e.xAxis?e.xAxis:e.radiusAxis,null!=e.yAxis?e.yAxis:e.angleAxis],u=0;u<2;u++)if(fL[h[u]]){var c=t.coordDimToDataDim(a[u])[0];h[u]=bm(n,c,h[u])}e.coord=h}}return e}function ym(t,e,i,n){var o={};return null!=t.valueIndex||null!=t.valueDim?(o.valueDataDim=null!=t.valueIndex?e.getDimension(t.valueIndex):t.valueDim,o.valueAxis=i.getAxis(n.dataDimToCoordDim(o.valueDataDim)),o.baseAxis=i.getOtherAxis(o.valueAxis),o.baseDataDim=n.coordDimToDataDim(o.baseAxis.dim)[0]):(o.baseAxis=n.getBaseAxis(),o.valueAxis=i.getOtherAxis(o.baseAxis),o.baseDataDim=n.coordDimToDataDim(o.baseAxis.dim)[0],o.valueDataDim=n.coordDimToDataDim(o.valueAxis.dim)[0]),o}function xm(t,e){return!(t&&t.containData&&e.coord&&!fm(e))||t.containData(e.coord)}function _m(t,e,i,n){return n<2?t.coord&&t.coord[n]:t.value}function bm(t,e,i){if("average"===i){var n=0,o=0;return t.each(e,function(t,e){isNaN(t)||(n+=t,o++)},!0),n/o}return t.getDataExtent(e,!0)["max"===i?1:0]}function wm(t,e,i){var n=e.coordinateSystem;t.each(function(o){var a,r=t.getItemModel(o),s=Si(r.get("x"),i.getWidth()),l=Si(r.get("y"),i.getHeight());if(isNaN(s)||isNaN(l)){if(e.getMarkerPosition)a=e.getMarkerPosition(t.getValues(t.dimensions,o));else if(n){var h=t.get(n.dimensions[0],o),u=t.get(n.dimensions[1],o);a=n.dataToPoint([h,u])}}else a=[s,l];isNaN(s)||(a[0]=s),isNaN(l)||(a[1]=l),t.setItemLayout(o,a)})}function Sm(t,e,i){var n;n=t?f(t&&t.dimensions,function(t){var i=e.getData().getDimensionInfo(e.coordDimToDataDim(t)[0])||{};return i.name=t,i}):[{name:"value",type:"float"}];var o=new aS(n,i),a=f(i.get("data"),v(vm,e));return t&&(a=p(a,v(xm,t))),o.initData(a,null,t?_m:function(t){return t.value}),o}function Mm(t){return!isNaN(t)&&!isFinite(t)}function Im(t,e,i,n){var o=1-t,a=n.dimensions[t];return Mm(e[o])&&Mm(i[o])&&e[t]===i[t]&&n.getAxis(a).containData(e[t])}function Tm(t,e){if("cartesian2d"===t.type){var i=e[0].coord,n=e[1].coord;if(i&&n&&(Im(1,i,n,t)||Im(0,i,n,t)))return!0}return xm(t,e[0])&&xm(t,e[1])}function Am(t,e,i,n,o){var a,r=n.coordinateSystem,s=t.getItemModel(e),l=Si(s.get("x"),o.getWidth()),h=Si(s.get("y"),o.getHeight());if(isNaN(l)||isNaN(h)){if(n.getMarkerPosition)a=n.getMarkerPosition(t.getValues(t.dimensions,e));else{var u=r.dimensions,c=t.get(u[0],e),d=t.get(u[1],e);a=r.dataToPoint([c,d])}if("cartesian2d"===r.type){var f=r.getAxis("x"),g=r.getAxis("y"),u=r.dimensions;Mm(t.get(u[0],e))?a[0]=f.toGlobalCoord(f.getExtent()[i?0:1]):Mm(t.get(u[1],e))&&(a[1]=g.toGlobalCoord(g.getExtent()[i?0:1]))}isNaN(l)||(a[0]=l),isNaN(h)||(a[1]=h)}else a=[l,h];t.setItemLayout(e,a)}function Cm(t,e,i){var n;n=t?f(t&&t.dimensions,function(t){var i=e.getData().getDimensionInfo(e.coordDimToDataDim(t)[0])||{};return i.name=t,i}):[{name:"value",type:"float"}];var o=new aS(n,i),a=new aS(n,i),r=new aS([],i),s=f(i.get("data"),v(pL,e,t,i));t&&(s=p(s,v(Tm,t)));var l=t?_m:function(t){return t.value};return o.initData(f(s,function(t){return t[0]}),null,l),a.initData(f(s,function(t){return t[1]}),null,l),r.initData(f(s,function(t){return t[2]})),r.hasItemOption=!0,{from:o,to:a,line:r}}function Dm(t){return!isNaN(t)&&!isFinite(t)}function Lm(t,e,i,n){var o=1-t;return Dm(e[o])&&Dm(i[o])}function km(t,e){var i=e.coord[0],n=e.coord[1];return!("cartesian2d"!==t.type||!i||!n||!Lm(1,i,n,t)&&!Lm(0,i,n,t))||(xm(t,{coord:i,x:e.x0,y:e.y0})||xm(t,{coord:n,x:e.x1,y:e.y1}))}function Pm(t,e,i,n,o){var a,r=n.coordinateSystem,s=t.getItemModel(e),l=Si(s.get(i[0]),o.getWidth()),h=Si(s.get(i[1]),o.getHeight());if(isNaN(l)||isNaN(h)){if(n.getMarkerPosition)a=n.getMarkerPosition(t.getValues(i,e));else{var u=t.get(i[0],e),c=t.get(i[1],e);a=r.dataToPoint([u,c],!0)}if("cartesian2d"===r.type){var d=r.getAxis("x"),f=r.getAxis("y"),u=t.get(i[0],e),c=t.get(i[1],e);Dm(u)?a[0]=d.toGlobalCoord(d.getExtent()["x0"===i[0]?0:1]):Dm(c)&&(a[1]=f.toGlobalCoord(f.getExtent()["y0"===i[1]?0:1]))}isNaN(l)||(a[0]=l),isNaN(h)||(a[1]=h)}else a=[l,h];return a}function Om(t,e,i){var n,o,a=["x0","y0","x1","y1"];t?(n=f(t&&t.dimensions,function(t){var i=e.getData().getDimensionInfo(e.coordDimToDataDim(t)[0])||{};return i.name=t,i}),o=new aS(f(a,function(t,e){return{name:t,type:n[e%2].type}}),i)):o=new aS(n=[{name:"value",type:"float"}],i);var r=f(i.get("data"),v(mL,e,t,i));t&&(r=p(r,v(km,t)));var s=t?function(t,e,i,n){return t.coord[Math.floor(n/2)][n%2]}:function(t){return t.value};return o.initData(r,null,s),o.hasItemOption=!0,o}function zm(t){var e=t.type,i={number:"value",time:"time"};if(i[e]&&(t.axisType=i[e],delete t.type),Nm(t),Em(t,"controlPosition")){var n=t.controlStyle||(t.controlStyle={});Em(n,"position")||(n.position=t.controlPosition),"none"!==n.position||Em(n,"show")||(n.show=!1,delete n.position),delete t.controlPosition}d(t.data||[],function(t){b(t)&&!y(t)&&(!Em(t,"value")&&Em(t,"name")&&(t.value=t.name),Nm(t))})}function Nm(t){var e=t.itemStyle||(t.itemStyle={}),i=e.emphasis||(e.emphasis={}),n=t.label||t.label||{},o=n.normal||(n.normal={}),a={normal:1,emphasis:1};d(n,function(t,e){a[e]||Em(o,e)||(o[e]=t)}),i.label&&!Em(n,"emphasis")&&(n.emphasis=i.label,delete i.label)}function Em(t,e){return t.hasOwnProperty(e)}function Rm(t,e){return Ko(t.getBoxLayoutParams(),{width:e.getWidth(),height:e.getHeight()},t.get("padding"))}function Vm(t,e,n,o){return Un(t.get(e).replace(/^path:\/\//,""),i(o||{}),new jt(n[0],n[1],n[2],n[3]),"center")}function Bm(t,e,i,o,a,r){var s=e.get("color");a?(a.setColor(s),i.add(a),r&&r.onUpdate(a)):((a=Hr(t.get("symbol"),-1,-1,2,2,s)).setStyle("strokeNoScale",!0),i.add(a),r&&r.onCreate(a));var l=e.getItemStyle(["color","symbol","symbolSize"]);a.setStyle(l),o=n({rectHover:!0,z2:100},o,!0);var h=t.get("symbolSize");(h=h instanceof Array?h.slice():[+h,+h])[0]/=2,h[1]/=2,o.scale=h;var u=t.get("symbolOffset");if(u){var c=o.position=o.position||[0,0];c[0]+=Si(u[0],h[0]),c[1]+=Si(u[1],h[1])}var d=t.get("symbolRotate");return o.rotation=(d||0)*Math.PI/180||0,a.attr(o),a.updateTransform(),a}function Gm(t,e,i,n,o){if(!t.dragging){var a=n.getModel("checkpointStyle"),r=i.dataToCoord(n.getData().get(["value"],e));o||!a.get("animation",!0)?t.attr({position:[r,0]}):(t.stopAnimation(!0),t.animateTo({position:[r,0]},a.get("animationDuration",!0),a.get("animationEasing",!0)))}}function Wm(t){return 0===t.indexOf("my")}function Hm(t){this.model=t}function Fm(t){this.model=t}function Zm(t){var e={},i=[],n=[];return t.eachRawSeries(function(t){var o=t.coordinateSystem;if(!o||"cartesian2d"!==o.type&&"polar"!==o.type)i.push(t);else{var a=o.getBaseAxis();if("category"===a.type){var r=a.dim+"_"+a.index;e[r]||(e[r]={categoryAxis:a,valueAxis:o.getOtherAxis(a),series:[]},n.push({axisDim:a.dim,axisIndex:a.index})),e[r].series.push(t)}else i.push(t)}}),{seriesGroupByCategoryAxis:e,other:i,meta:n}}function Um(t){var e=[];return d(t,function(t,i){var n=t.categoryAxis,o=t.valueAxis.dim,a=[" "].concat(f(t.series,function(t){return t.name})),r=[n.model.getCategories()];d(t.series,function(t){r.push(t.getRawData().mapArray(o,function(t){return t}))});for(var s=[a.join(PL)],l=0;l=0)return!0}function $m(t){for(var e=t.split(/\n+/g),i=[],n=f(qm(e.shift()).split(OL),function(t){return{name:t,data:[]}}),o=0;o=0&&!i[o][n];o--);if(o<0){var a=t.queryComponents({mainType:"dataZoom",subType:"select",id:n})[0];if(a){var r=a.getPercentRange();i[0][n]={dataZoomId:n,start:r[0],end:r[1]}}}}),i.push(e)}function iv(t){var e=av(t),i=e[e.length-1];e.length>1&&e.pop();var n={};return zL(i,function(t,i){for(var o=e.length-1;o>=0;o--)if(t=e[o][i]){n[i]=t;break}}),n}function nv(t){t[NL]=null}function ov(t){return av(t).length}function av(t){var e=t[NL];return e||(e=t[NL]=[{}]),e}function rv(t,e,i){(this._brushController=new Yu(i.getZr())).on("brush",m(this._onBrush,this)).mount(),this._isZoomActive}function sv(t){var e={};return d(["xAxisIndex","yAxisIndex"],function(i){e[i]=t[i],null==e[i]&&(e[i]="all"),(!1===e[i]||"none"===e[i])&&(e[i]=[])}),e}function lv(t,e){t.setIconStatus("back",ov(e)>1?"emphasis":"normal")}function hv(t,e,i,n,o){var a=i._isZoomActive;n&&"takeGlobalCursor"===n.type&&(a="dataZoomSelect"===n.key&&n.dataZoomSelectActive),i._isZoomActive=a,t.setIconStatus("zoom",a?"emphasis":"normal");var r=new rp(sv(t.option),e,{include:["grid"]});i._brushController.setPanels(r.makePanelOpts(o,function(t){return t.xAxisDeclared&&!t.yAxisDeclared?"lineX":!t.xAxisDeclared&&t.yAxisDeclared?"lineY":"rect"})).enableBrush(!!a&&{brushType:"auto",brushStyle:{lineWidth:0,fill:"rgba(0,0,0,0.2)"}})}function uv(t){this.model=t}function cv(t){return HL(t)}function dv(){if(!UL&&XL){UL=!0;var t=XL.styleSheets;t.length<31?XL.createStyleSheet().addRule(".zrvml","behavior:url(#default#VML)"):t[0].addRule(".zrvml","behavior:url(#default#VML)")}}function fv(t){return parseInt(t,10)}function gv(t,e){dv(),this.root=t,this.storage=e;var i=document.createElement("div"),n=document.createElement("div");i.style.cssText="display:inline-block;overflow:hidden;position:relative;width:300px;height:150px;",n.style.cssText="position:absolute;left:0;top:0;",t.appendChild(i),this._vmlRoot=n,this._vmlViewport=i,this.resize();var o=e.delFromStorage,a=e.addToStorage;e.delFromStorage=function(t){o.call(e,t),t&&t.onRemove&&t.onRemove(n)},e.addToStorage=function(t){t.onAdd&&t.onAdd(n),a.call(e,t)},this._firstPaint=!0}function pv(t){return function(){Wy('In IE8.0 VML mode painter not support method "'+t+'"')}}function mv(t){return document.createElementNS(Tk,t)}function vv(t){return Lk(1e4*t)/1e4}function yv(t){return t-Ek}function xv(t,e){var i=e?t.textFill:t.fill;return null!=i&&i!==Dk}function _v(t,e){var i=e?t.textStroke:t.stroke;return null!=i&&i!==Dk}function bv(t,e){e&&wv(t,"transform","matrix("+Ck.call(e,",")+")")}function wv(t,e,i){(!i||"linear"!==i.type&&"radial"!==i.type)&&t.setAttribute(e,i)}function Sv(t,e,i){t.setAttributeNS("http://www.w3.org/1999/xlink",e,i)}function Mv(t,e,i){if(xv(e,i)){var n=i?e.textFill:e.fill;n="transparent"===n?Dk:n,"none"!==t.getAttribute("clip-path")&&n===Dk&&(n="rgba(0, 0, 0, 0.002)"),wv(t,"fill",n),wv(t,"fill-opacity",e.opacity)}else wv(t,"fill",Dk);if(_v(e,i)){var o=i?e.textStroke:e.stroke;wv(t,"stroke",o="transparent"===o?Dk:o),wv(t,"stroke-width",(i?e.textStrokeWidth:e.lineWidth)/(e.strokeNoScale?e.host.getLineScale():1)),wv(t,"paint-order","stroke"),wv(t,"stroke-opacity",e.opacity),e.lineDash?(wv(t,"stroke-dasharray",e.lineDash.join(",")),wv(t,"stroke-dashoffset",Lk(e.lineDashOffset||0))):wv(t,"stroke-dasharray",""),e.lineCap&&wv(t,"stroke-linecap",e.lineCap),e.lineJoin&&wv(t,"stroke-linejoin",e.lineJoin),e.miterLimit&&wv(t,"stroke-miterlimit",e.miterLimit)}else wv(t,"stroke",Dk)}function Iv(t){for(var e=[],i=t.data,n=t.len(),o=0;o=zk||!yv(p)&&(d>-Ok&&d<0||d>Ok)==!!g;var y=vv(s+h*Pk(c)),x=vv(l+u*kk(c));m&&(d=g?zk-1e-4:1e-4-zk,v=!0,9===o&&e.push("M",y,x));var _=vv(s+h*Pk(c+d)),b=vv(l+u*kk(c+d));e.push("A",vv(h),vv(u),Lk(f*Nk),+v,+g,_,b);break;case Ak.Z:a="Z";break;case Ak.R:var _=vv(i[o++]),b=vv(i[o++]),w=vv(i[o++]),S=vv(i[o++]);e.push("M",_,b,"L",_+w,b,"L",_+w,b+S,"L",_,b+S,"L",_,b)}a&&e.push(a);for(var M=0;M=11)}}(navigator.userAgent),Xv={"[object Function]":1,"[object RegExp]":1,"[object Date]":1,"[object Error]":1,"[object CanvasGradient]":1,"[object CanvasPattern]":1,"[object Image]":1,"[object Canvas]":1},jv={"[object Int8Array]":1,"[object Uint8Array]":1,"[object Uint8ClampedArray]":1,"[object Int16Array]":1,"[object Uint16Array]":1,"[object Int32Array]":1,"[object Uint32Array]":1,"[object Float32Array]":1,"[object Float64Array]":1},qv=Object.prototype.toString,Yv=Array.prototype,$v=Yv.forEach,Kv=Yv.filter,Jv=Yv.slice,Qv=Yv.map,ty=Yv.reduce,ey={},iy=function(){return ey.createCanvas()};ey.createCanvas=function(){return document.createElement("canvas")};var ny,oy="__ec_primitive__";O.prototype={constructor:O,get:function(t){return this["_ec_"+t]},set:function(t,e){return this["_ec_"+t]=e,e},each:function(t,e){void 0!==e&&(t=m(t,e));for(var i in this)this.hasOwnProperty(i)&&t(this[i],i.slice(4))},removeKey:function(t){delete this["_ec_"+t]}};var ay=(Object.freeze||Object)({$override:e,clone:i,merge:n,mergeAll:o,extend:a,defaults:r,createCanvas:iy,getContext:s,indexOf:l,inherits:h,mixin:u,isArrayLike:c,each:d,map:f,reduce:g,filter:p,find:function(t,e,i){if(t&&e)for(var n=0,o=t.length;n3&&(e=dy.call(e,1));for(var n=this._$handlers[t],o=n.length,a=0;a4&&(e=dy.call(e,1,e.length-1));for(var n=e[e.length-1],o=this._$handlers[t],a=o.length,r=0;r=0;a--){var r;if(n[a]!==i&&!n[a].ignore&&(r=nt(n[a],t,e))&&(!o.topTarget&&(o.topTarget=n[a]),r!==gy)){o.target=n[a];break}}return o}},d(["click","mousedown","mouseup","mousewheel","dblclick","contextmenu"],function(t){my.prototype[t]=function(e){var i=this.findHover(e.zrX,e.zrY),n=i.target;if("mousedown"===t)this._downEl=n,this._downPoint=[e.zrX,e.zrY],this._upEl=n;else if("mosueup"===t)this._upEl=n;else if("click"===t){if(this._downEl!==this._upEl||!this._downPoint||hy(this._downPoint,[e.zrX,e.zrY])>4)return;this._downPoint=null}this.dispatchToElement(i,t,e)}}),u(my,fy),u(my,Q);var vy="undefined"==typeof Float32Array?Array:Float32Array,yy=(Object.freeze||Object)({create:ot,identity:at,copy:rt,mul:st,translate:lt,rotate:ht,scale:ut,invert:ct}),xy=at,_y=5e-5,by=function(t){(t=t||{}).position||(this.position=[0,0]),null==t.rotation&&(this.rotation=0),t.scale||(this.scale=[1,1]),this.origin=this.origin||null},wy=by.prototype;wy.transform=null,wy.needLocalTransform=function(){return dt(this.rotation)||dt(this.position[0])||dt(this.position[1])||dt(this.scale[0]-1)||dt(this.scale[1]-1)},wy.updateTransform=function(){var t=this.parent,e=t&&t.transform,i=this.needLocalTransform(),n=this.transform;i||e?(n=n||ot(),i?this.getLocalTransform(n):xy(n),e&&(i?st(n,t.transform,n):rt(n,t.transform)),this.transform=n,this.invTransform=this.invTransform||ot(),ct(this.invTransform,n)):n&&xy(n)},wy.getLocalTransform=function(t){return by.getLocalTransform(this,t)},wy.setTransform=function(t){var e=this.transform,i=t.dpr||1;e?t.setTransform(i*e[0],i*e[1],i*e[2],i*e[3],i*e[4],i*e[5]):t.setTransform(i,0,0,i,0,0)},wy.restoreTransform=function(t){var e=t.dpr||1;t.setTransform(e,0,0,e,0,0)};var Sy=[];wy.decomposeTransform=function(){if(this.transform){var t=this.parent,e=this.transform;t&&t.transform&&(st(Sy,t.invTransform,e),e=Sy);var i=e[0]*e[0]+e[1]*e[1],n=e[2]*e[2]+e[3]*e[3],o=this.position,a=this.scale;dt(i-1)&&(i=Math.sqrt(i)),dt(n-1)&&(n=Math.sqrt(n)),e[0]<0&&(i=-i),e[3]<0&&(n=-n),o[0]=e[4],o[1]=e[5],a[0]=i,a[1]=n,this.rotation=Math.atan2(-e[1]/n,e[0]/i)}},wy.getGlobalScale=function(){var t=this.transform;if(!t)return[1,1];var e=Math.sqrt(t[0]*t[0]+t[1]*t[1]),i=Math.sqrt(t[2]*t[2]+t[3]*t[3]);return t[0]<0&&(e=-e),t[3]<0&&(i=-i),[e,i]},wy.transformCoordToLocal=function(t,e){var i=[t,e],n=this.invTransform;return n&&$(i,i,n),i},wy.transformCoordToGlobal=function(t,e){var i=[t,e],n=this.transform;return n&&$(i,i,n),i},by.getLocalTransform=function(t,e){xy(e=e||[]);var i=t.origin,n=t.scale||[1,1],o=t.rotation||0,a=t.position||[0,0];return i&&(e[4]-=i[0],e[5]-=i[1]),ut(e,e,n),o&&ht(e,e,o),i&&(e[4]+=i[0],e[5]+=i[1]),e[4]+=a[0],e[5]+=a[1],e};var My={linear:function(t){return t},quadraticIn:function(t){return t*t},quadraticOut:function(t){return t*(2-t)},quadraticInOut:function(t){return(t*=2)<1?.5*t*t:-.5*(--t*(t-2)-1)},cubicIn:function(t){return t*t*t},cubicOut:function(t){return--t*t*t+1},cubicInOut:function(t){return(t*=2)<1?.5*t*t*t:.5*((t-=2)*t*t+2)},quarticIn:function(t){return t*t*t*t},quarticOut:function(t){return 1- --t*t*t*t},quarticInOut:function(t){return(t*=2)<1?.5*t*t*t*t:-.5*((t-=2)*t*t*t-2)},quinticIn:function(t){return t*t*t*t*t},quinticOut:function(t){return--t*t*t*t*t+1},quinticInOut:function(t){return(t*=2)<1?.5*t*t*t*t*t:.5*((t-=2)*t*t*t*t+2)},sinusoidalIn:function(t){return 1-Math.cos(t*Math.PI/2)},sinusoidalOut:function(t){return Math.sin(t*Math.PI/2)},sinusoidalInOut:function(t){return.5*(1-Math.cos(Math.PI*t))},exponentialIn:function(t){return 0===t?0:Math.pow(1024,t-1)},exponentialOut:function(t){return 1===t?1:1-Math.pow(2,-10*t)},exponentialInOut:function(t){return 0===t?0:1===t?1:(t*=2)<1?.5*Math.pow(1024,t-1):.5*(2-Math.pow(2,-10*(t-1)))},circularIn:function(t){return 1-Math.sqrt(1-t*t)},circularOut:function(t){return Math.sqrt(1- --t*t)},circularInOut:function(t){return(t*=2)<1?-.5*(Math.sqrt(1-t*t)-1):.5*(Math.sqrt(1-(t-=2)*t)+1)},elasticIn:function(t){var e,i=.1;return 0===t?0:1===t?1:(!i||i<1?(i=1,e=.1):e=.4*Math.asin(1/i)/(2*Math.PI),-i*Math.pow(2,10*(t-=1))*Math.sin((t-e)*(2*Math.PI)/.4))},elasticOut:function(t){var e,i=.1;return 0===t?0:1===t?1:(!i||i<1?(i=1,e=.1):e=.4*Math.asin(1/i)/(2*Math.PI),i*Math.pow(2,-10*t)*Math.sin((t-e)*(2*Math.PI)/.4)+1)},elasticInOut:function(t){var e,i=.1;return 0===t?0:1===t?1:(!i||i<1?(i=1,e=.1):e=.4*Math.asin(1/i)/(2*Math.PI),(t*=2)<1?i*Math.pow(2,10*(t-=1))*Math.sin((t-e)*(2*Math.PI)/.4)*-.5:i*Math.pow(2,-10*(t-=1))*Math.sin((t-e)*(2*Math.PI)/.4)*.5+1)},backIn:function(t){var e=1.70158;return t*t*((e+1)*t-e)},backOut:function(t){var e=1.70158;return--t*t*((e+1)*t+e)+1},backInOut:function(t){var e=2.5949095;return(t*=2)<1?t*t*((e+1)*t-e)*.5:.5*((t-=2)*t*((e+1)*t+e)+2)},bounceIn:function(t){return 1-My.bounceOut(1-t)},bounceOut:function(t){return t<1/2.75?7.5625*t*t:t<2/2.75?7.5625*(t-=1.5/2.75)*t+.75:t<2.5/2.75?7.5625*(t-=2.25/2.75)*t+.9375:7.5625*(t-=2.625/2.75)*t+.984375},bounceInOut:function(t){return t<.5?.5*My.bounceIn(2*t):.5*My.bounceOut(2*t-1)+.5}};ft.prototype={constructor:ft,step:function(t,e){if(this._initialized||(this._startTime=t+this._delay,this._initialized=!0),this._paused)this._pausedTime+=e;else{var i=(t-this._startTime-this._pausedTime)/this._life;if(!(i<0)){i=Math.min(i,1);var n=this.easing,o="string"==typeof n?My[n]:n,a="function"==typeof o?o(i):i;return this.fire("frame",a),1==i?this.loop?(this.restart(t),"restart"):(this._needsRemove=!0,"destroy"):null}}},restart:function(t){var e=(t-this._startTime-this._pausedTime)%this._life;this._startTime=t-e+this.gap,this._pausedTime=0,this._needsRemove=!1},fire:function(t,e){this[t="on"+t]&&this[t](this._target,e)},pause:function(){this._paused=!0},resume:function(){this._paused=!1}};var Iy=function(){this.head=null,this.tail=null,this._len=0},Ty=Iy.prototype;Ty.insert=function(t){var e=new Ay(t);return this.insertEntry(e),e},Ty.insertEntry=function(t){this.head?(this.tail.next=t,t.prev=this.tail,t.next=null,this.tail=t):this.head=this.tail=t,this._len++},Ty.remove=function(t){var e=t.prev,i=t.next;e?e.next=i:this.head=i,i?i.prev=e:this.tail=e,t.next=t.prev=null,this._len--},Ty.len=function(){return this._len},Ty.clear=function(){this.head=this.tail=null,this._len=0};var Ay=function(t){this.value=t,this.next,this.prev},Cy=function(t){this._list=new Iy,this._map={},this._maxSize=t||10,this._lastRemovedEntry=null},Dy=Cy.prototype;Dy.put=function(t,e){var i=this._list,n=this._map,o=null;if(null==n[t]){var a=i.len(),r=this._lastRemovedEntry;if(a>=this._maxSize&&a>0){var s=i.head;i.remove(s),delete n[s.key],o=s.value,this._lastRemovedEntry=s}r?r.value=e:r=new Ay(e),r.key=t,i.insertEntry(r),n[t]=r}return o},Dy.get=function(t){var e=this._map[t],i=this._list;if(null!=e)return e!==i.tail&&(i.remove(e),i.insertEntry(e)),e.value},Dy.clear=function(){this._list.clear(),this._map={}};var Ly={transparent:[0,0,0,0],aliceblue:[240,248,255,1],antiquewhite:[250,235,215,1],aqua:[0,255,255,1],aquamarine:[127,255,212,1],azure:[240,255,255,1],beige:[245,245,220,1],bisque:[255,228,196,1],black:[0,0,0,1],blanchedalmond:[255,235,205,1],blue:[0,0,255,1],blueviolet:[138,43,226,1],brown:[165,42,42,1],burlywood:[222,184,135,1],cadetblue:[95,158,160,1],chartreuse:[127,255,0,1],chocolate:[210,105,30,1],coral:[255,127,80,1],cornflowerblue:[100,149,237,1],cornsilk:[255,248,220,1],crimson:[220,20,60,1],cyan:[0,255,255,1],darkblue:[0,0,139,1],darkcyan:[0,139,139,1],darkgoldenrod:[184,134,11,1],darkgray:[169,169,169,1],darkgreen:[0,100,0,1],darkgrey:[169,169,169,1],darkkhaki:[189,183,107,1],darkmagenta:[139,0,139,1],darkolivegreen:[85,107,47,1],darkorange:[255,140,0,1],darkorchid:[153,50,204,1],darkred:[139,0,0,1],darksalmon:[233,150,122,1],darkseagreen:[143,188,143,1],darkslateblue:[72,61,139,1],darkslategray:[47,79,79,1],darkslategrey:[47,79,79,1],darkturquoise:[0,206,209,1],darkviolet:[148,0,211,1],deeppink:[255,20,147,1],deepskyblue:[0,191,255,1],dimgray:[105,105,105,1],dimgrey:[105,105,105,1],dodgerblue:[30,144,255,1],firebrick:[178,34,34,1],floralwhite:[255,250,240,1],forestgreen:[34,139,34,1],fuchsia:[255,0,255,1],gainsboro:[220,220,220,1],ghostwhite:[248,248,255,1],gold:[255,215,0,1],goldenrod:[218,165,32,1],gray:[128,128,128,1],green:[0,128,0,1],greenyellow:[173,255,47,1],grey:[128,128,128,1],honeydew:[240,255,240,1],hotpink:[255,105,180,1],indianred:[205,92,92,1],indigo:[75,0,130,1],ivory:[255,255,240,1],khaki:[240,230,140,1],lavender:[230,230,250,1],lavenderblush:[255,240,245,1],lawngreen:[124,252,0,1],lemonchiffon:[255,250,205,1],lightblue:[173,216,230,1],lightcoral:[240,128,128,1],lightcyan:[224,255,255,1],lightgoldenrodyellow:[250,250,210,1],lightgray:[211,211,211,1],lightgreen:[144,238,144,1],lightgrey:[211,211,211,1],lightpink:[255,182,193,1],lightsalmon:[255,160,122,1],lightseagreen:[32,178,170,1],lightskyblue:[135,206,250,1],lightslategray:[119,136,153,1],lightslategrey:[119,136,153,1],lightsteelblue:[176,196,222,1],lightyellow:[255,255,224,1],lime:[0,255,0,1],limegreen:[50,205,50,1],linen:[250,240,230,1],magenta:[255,0,255,1],maroon:[128,0,0,1],mediumaquamarine:[102,205,170,1],mediumblue:[0,0,205,1],mediumorchid:[186,85,211,1],mediumpurple:[147,112,219,1],mediumseagreen:[60,179,113,1],mediumslateblue:[123,104,238,1],mediumspringgreen:[0,250,154,1],mediumturquoise:[72,209,204,1],mediumvioletred:[199,21,133,1],midnightblue:[25,25,112,1],mintcream:[245,255,250,1],mistyrose:[255,228,225,1],moccasin:[255,228,181,1],navajowhite:[255,222,173,1],navy:[0,0,128,1],oldlace:[253,245,230,1],olive:[128,128,0,1],olivedrab:[107,142,35,1],orange:[255,165,0,1],orangered:[255,69,0,1],orchid:[218,112,214,1],palegoldenrod:[238,232,170,1],palegreen:[152,251,152,1],paleturquoise:[175,238,238,1],palevioletred:[219,112,147,1],papayawhip:[255,239,213,1],peachpuff:[255,218,185,1],peru:[205,133,63,1],pink:[255,192,203,1],plum:[221,160,221,1],powderblue:[176,224,230,1],purple:[128,0,128,1],red:[255,0,0,1],rosybrown:[188,143,143,1],royalblue:[65,105,225,1],saddlebrown:[139,69,19,1],salmon:[250,128,114,1],sandybrown:[244,164,96,1],seagreen:[46,139,87,1],seashell:[255,245,238,1],sienna:[160,82,45,1],silver:[192,192,192,1],skyblue:[135,206,235,1],slateblue:[106,90,205,1],slategray:[112,128,144,1],slategrey:[112,128,144,1],snow:[255,250,250,1],springgreen:[0,255,127,1],steelblue:[70,130,180,1],tan:[210,180,140,1],teal:[0,128,128,1],thistle:[216,191,216,1],tomato:[255,99,71,1],turquoise:[64,224,208,1],violet:[238,130,238,1],wheat:[245,222,179,1],white:[255,255,255,1],whitesmoke:[245,245,245,1],yellow:[255,255,0,1],yellowgreen:[154,205,50,1]},ky=new Cy(20),Py=null,Oy=Dt,zy=Lt,Ny=(Object.freeze||Object)({parse:Mt,lift:At,toHex:Ct,fastLerp:Dt,fastMapToColor:Oy,lerp:Lt,mapToColor:zy,modifyHSL:kt,modifyAlpha:Pt,stringify:Ot}),Ey=Array.prototype.slice,Ry=function(t,e,i,n){this._tracks={},this._target=t,this._loop=e||!1,this._getter=i||zt,this._setter=n||Nt,this._clipCount=0,this._delay=0,this._doneList=[],this._onframeList=[],this._clipList=[]};Ry.prototype={when:function(t,e){var i=this._tracks;for(var n in e)if(e.hasOwnProperty(n)){if(!i[n]){i[n]=[];var o=this._getter(this._target,n);if(null==o)continue;0!==t&&i[n].push({time:0,value:Ft(o)})}i[n].push({time:t,value:e[n]})}return this},during:function(t){return this._onframeList.push(t),this},pause:function(){for(var t=0;t0&&this.animate(t,!1).when(null==n?500:n,a).delay(o||0),this}};var Fy=function(t){by.call(this,t),fy.call(this,t),Hy.call(this,t),this.id=t.id||Fv()};Fy.prototype={type:"element",name:"",__zr:null,ignore:!1,clipPath:null,drift:function(t,e){switch(this.draggable){case"horizontal":e=0;break;case"vertical":t=0}var i=this.transform;i||(i=this.transform=[1,0,0,1,0,0]),i[4]+=t,i[5]+=e,this.decomposeTransform(),this.dirty(!1)},beforeUpdate:function(){},afterUpdate:function(){},update:function(){this.updateTransform()},traverse:function(t,e){},attrKV:function(t,e){if("position"===t||"scale"===t||"origin"===t){if(e){var i=this[t];i||(i=this[t]=[]),i[0]=e[0],i[1]=e[1]}}else this[t]=e},hide:function(){this.ignore=!0,this.__zr&&this.__zr.refresh()},show:function(){this.ignore=!1,this.__zr&&this.__zr.refresh()},attr:function(t,e){if("string"==typeof t)this.attrKV(t,e);else if(b(t))for(var i in t)t.hasOwnProperty(i)&&this.attrKV(i,t[i]);return this.dirty(!1),this},setClipPath:function(t){var e=this.__zr;e&&t.addSelfToZr(e),this.clipPath&&this.clipPath!==t&&this.removeClipPath(),this.clipPath=t,t.__zr=e,t.__clipTarget=this,this.dirty(!1)},removeClipPath:function(){var t=this.clipPath;t&&(t.__zr&&t.removeSelfFromZr(t.__zr),t.__zr=null,t.__clipTarget=null,this.clipPath=null,this.dirty(!1))},addSelfToZr:function(t){this.__zr=t;var e=this.animators;if(e)for(var i=0;i=i.x&&t<=i.x+i.width&&e>=i.y&&e<=i.y+i.height},clone:function(){return new jt(this.x,this.y,this.width,this.height)},copy:function(t){this.x=t.x,this.y=t.y,this.width=t.width,this.height=t.height},plain:function(){return{x:this.x,y:this.y,width:this.width,height:this.height}}},jt.create=function(t){return new jt(t.x,t.y,t.width,t.height)};var jy=function(t){t=t||{},Fy.call(this,t);for(var e in t)t.hasOwnProperty(e)&&(this[e]=t[e]);this._children=[],this.__storage=null,this.__dirty=!0};jy.prototype={constructor:jy,isGroup:!0,type:"group",silent:!1,children:function(){return this._children.slice()},childAt:function(t){return this._children[t]},childOfName:function(t){for(var e=this._children,i=0;i=0&&(i.splice(n,0,t),this._doAdd(t))}return this},_doAdd:function(t){t.parent&&t.parent.remove(t),t.parent=this;var e=this.__storage,i=this.__zr;e&&e!==t.__storage&&(e.addToStorage(t),t instanceof jy&&t.addChildrenToStorage(e)),i&&i.refresh()},remove:function(t){var e=this.__zr,i=this.__storage,n=this._children,o=l(n,t);return o<0?this:(n.splice(o,1),t.parent=null,i&&(i.delFromStorage(t),t instanceof jy&&t.delChildrenFromStorage(i)),e&&e.refresh(),this)},removeAll:function(){var t,e,i=this._children,n=this.__storage;for(e=0;e=0&&(this.delFromStorage(t),this._roots.splice(o,1),t instanceof jy&&t.delChildrenFromStorage(this))}},addToStorage:function(t){return t.__storage=this,t.dirty(!1),this},delFromStorage:function(t){return t&&(t.__storage=null),this},dispose:function(){this._renderList=this._roots=null},displayableSortFunc:ie};var Ky=[["shadowBlur",0],["shadowOffsetX",0],["shadowOffsetY",0],["shadowColor","#000"],["lineCap","butt"],["lineJoin","miter"],["miterLimit",10]],Jy=function(t,e){this.extendFrom(t,!1),this.host=e};Jy.prototype={constructor:Jy,host:null,fill:"#000",stroke:null,opacity:1,lineDash:null,lineDashOffset:0,shadowBlur:0,shadowOffsetX:0,shadowOffsetY:0,lineWidth:1,strokeNoScale:!1,text:null,font:null,textFont:null,fontStyle:null,fontWeight:null,fontSize:null,fontFamily:null,textTag:null,textFill:"#000",textStroke:null,textWidth:null,textHeight:null,textStrokeWidth:0,textLineHeight:null,textPosition:"inside",textRect:null,textOffset:null,textAlign:null,textVerticalAlign:null,textDistance:5,textShadowColor:"transparent",textShadowBlur:0,textShadowOffsetX:0,textShadowOffsetY:0,textBoxShadowColor:"transparent",textBoxShadowBlur:0,textBoxShadowOffsetX:0,textBoxShadowOffsetY:0,transformText:!1,textRotation:0,textOrigin:null,textBackgroundColor:null,textBorderColor:null,textBorderWidth:0,textBorderRadius:0,textPadding:null,rich:null,truncate:null,blend:null,bind:function(t,e,i){for(var n=this,o=i&&i.style,a=!o,r=0;r0},extendFrom:function(t,e){if(t)for(var i in t)!t.hasOwnProperty(i)||!0!==e&&(!1===e?this.hasOwnProperty(i):null==t[i])||(this[i]=t[i])},set:function(t,e){"string"==typeof t?this[t]=e:this.extendFrom(t,!0)},clone:function(){var t=new this.constructor;return t.extendFrom(this,!0),t},getGradient:function(t,e,i){for(var n=("radial"===e.type?oe:ne)(t,e,i),o=e.colorStops,a=0;a=0&&i.splice(n,1),t.__hoverMir=null},clearHover:function(t){for(var e=this._hoverElements,i=0;i=0){if(!s){if((s=this._progressiveLayers[Math.min(h++,4)]).ctx.save(),s.renderScope={},s&&s.__progress>s.__maxProgress){g=s.__nextIdxNotProg-1;continue}l=s.__progress,s.__dirty||(f=l),s.__progress=f+1}y===f&&this._doPaintEl(m,s,!0,s.renderScope)}else this._doPaintEl(m,n,e,r);m.__dirty=!1}}s&&i(s),a&&a.restore(),this._furtherProgressive=!1,d(this._progressiveLayers,function(t){t.__maxProgress>=t.__progress&&(this._furtherProgressive=!0)},this)},_doPaintEl:function(t,e,i,n){var o=e.ctx,a=t.transform;if((e.__dirty||i)&&!t.invisible&&0!==t.style.opacity&&(!a||a[0]||a[3])&&(!t.culling||!Qe(t,this._width,this._height))){var r=t.__clipPaths;(n.prevClipLayer!==e||ti(r,n.prevElClipPaths))&&(n.prevElClipPaths&&(n.prevClipLayer.ctx.restore(),n.prevClipLayer=n.prevElClipPaths=null,n.prevEl=null),r&&(o.save(),ei(r,o),n.prevClipLayer=e,n.prevElClipPaths=r)),t.beforeBrush&&t.beforeBrush(o),t.brush(o,n.prevEl||null),n.prevEl=t,t.afterBrush&&t.afterBrush(o)}},getLayer:function(t){if(this._singleCanvas)return this._layers[0];var e=this._layers[t];return e||((e=new nx("zr_"+t,this,this.dpr)).__builtin__=!0,this._layerConfig[t]&&n(e,this._layerConfig[t],!0),this.insertLayer(t,e),e.initContext()),e},insertLayer:function(t,e){var i=this._layers,n=this._zlevelList,o=n.length,a=null,r=-1,s=this._domRoot;if(i[t])Wy("ZLevel "+t+" has been used already");else if($e(e)){if(o>0&&t>n[0]){for(r=0;rt);r++);a=i[n[r]]}if(n.splice(r+1,0,t),i[t]=e,!e.virtual)if(a){var l=a.dom;l.nextSibling?s.insertBefore(e.dom,l.nextSibling):s.appendChild(e.dom)}else s.firstChild?s.insertBefore(e.dom,s.firstChild):s.appendChild(e.dom)}else Wy("Layer of zlevel "+t+" is not valid")},eachLayer:function(t,e){var i,n,o=this._zlevelList;for(n=0;n=0){r!==g&&(r=g,l++);var p=c.__frame=l-1;if(!a){var m=Math.min(s,4);(a=i[m])||(a=i[m]=new nx("progressive",this,this.dpr)).initContext(),a.__maxProgress=0}a.__dirty=a.__dirty||c.__dirty,a.elCount++,a.__maxProgress=Math.max(a.__maxProgress,p),a.__maxProgress>=a.__progress&&(f.__dirty=!0)}else c.__frame=-1,a&&(a.__nextIdxNotProg=h,s++,a=null)}a&&(s++,a.__nextIdxNotProg=h),this.eachBuiltinLayer(function(t,e){n[e]!==t.elCount&&(t.__dirty=!0)}),i.length=Math.min(s,5),d(i,function(t,e){o[e]!==t.elCount&&(c.__dirty=!0),t.__dirty&&(t.__progress=0)})},clear:function(){return this.eachBuiltinLayer(this._clearLayer),this},_clearLayer:function(t){t.clear()},configLayer:function(t,e){if(e){var i=this._layerConfig;i[t]?n(i[t],e,!0):i[t]=e;var o=this._layers[t];o&&n(o,i[t],!0)}},delLayer:function(t){var e=this._layers,i=this._zlevelList,n=e[t];n&&(n.dom.parentNode.removeChild(n.dom),delete e[t],i.splice(l(i,t),1))},resize:function(t,e){var i=this._domRoot;i.style.display="none";var n=this._opts;if(null!=t&&(n.width=t),null!=e&&(n.height=e),t=this._getSize(0),e=this._getSize(1),i.style.display="",this._width!=t||e!=this._height){i.style.width=t+"px",i.style.height=e+"px";for(var o in this._layers)this._layers.hasOwnProperty(o)&&this._layers[o].resize(t,e);d(this._progressiveLayers,function(i){i.resize(t,e)}),this.refresh(!0)}return this._width=t,this._height=e,this},clearLayer:function(t){var e=this._layers[t];e&&e.clear()},dispose:function(){this.root.innerHTML="",this.root=this.storage=this._domRoot=this._layers=null},getRenderedCanvas:function(t){function e(t,e){var n=r._zlevelList;null==t&&(t=-1/0);for(var o,a=0;at&&s=0&&this._clips.splice(e,1)},removeAnimator:function(t){for(var e=t.getClips(),i=0;i1&&n&&n.length>1){var a=ui(n)/ui(o);!isFinite(a)&&(a=1),e.pinchScale=a;var r=ci(n);return e.pinchX=r[0],e.pinchY=r[1],{type:"pinch",target:t[0].target,event:e}}}}},Ix=["click","dblclick","mousewheel","mouseout","mouseup","mousedown","mousemove","contextmenu"],Tx=["touchstart","touchend","touchmove"],Ax={pointerdown:1,pointerup:1,pointermove:1,pointerout:1},Cx=f(Ix,function(t){var e=t.replace("mouse","pointer");return Ax[e]?e:t}),Dx={mousemove:function(t){t=ri(this.dom,t),this.trigger("mousemove",t)},mouseout:function(t){var e=(t=ri(this.dom,t)).toElement||t.relatedTarget;if(e!=this.dom)for(;e&&9!=e.nodeType;){if(e===this.dom)return;e=e.parentNode}this.trigger("mouseout",t)},touchstart:function(t){(t=ri(this.dom,t)).zrByTouch=!0,this._lastTouchMoment=new Date,fi(this,t,"start"),Dx.mousemove.call(this,t),Dx.mousedown.call(this,t),gi(this)},touchmove:function(t){(t=ri(this.dom,t)).zrByTouch=!0,fi(this,t,"change"),Dx.mousemove.call(this,t),gi(this)},touchend:function(t){(t=ri(this.dom,t)).zrByTouch=!0,fi(this,t,"end"),Dx.mouseup.call(this,t),+new Date-this._lastTouchMoment<300&&Dx.click.call(this,t),gi(this)},pointerdown:function(t){Dx.mousedown.call(this,t)},pointermove:function(t){pi(t)||Dx.mousemove.call(this,t)},pointerup:function(t){Dx.mouseup.call(this,t)},pointerout:function(t){pi(t)||Dx.mouseout.call(this,t)}};d(["click","mousedown","mouseup","mousewheel","dblclick","contextmenu"],function(t){Dx[t]=function(e){e=ri(this.dom,e),this.trigger(t,e)}});var Lx=vi.prototype;Lx.dispose=function(){for(var t=Ix.concat(Tx),e=0;e=0||n&&l(n,r)<0)){var s=e.getShallow(r);null!=s&&(o[t[a][0]]=s)}}return o}},Kx=$x([["lineWidth","width"],["stroke","color"],["opacity"],["shadowBlur"],["shadowOffsetX"],["shadowOffsetY"],["shadowColor"]]),Jx={getLineStyle:function(t){var e=Kx(this,t),i=this.getLineDash(e.lineWidth);return i&&(e.lineDash=i),e},getLineDash:function(t){null==t&&(t=1);var e=this.get("type"),i=Math.max(t,2),n=4*t;return"solid"===e||null==e?null:"dashed"===e?[n,n]:[i,i]}},Qx=$x([["fill","color"],["shadowBlur"],["shadowOffsetX"],["shadowOffsetY"],["opacity"],["shadowColor"]]),t_={getAreaStyle:function(t,e){return Qx(this,t,e)}},e_=Math.pow,i_=Math.sqrt,n_=1e-8,o_=1e-4,a_=i_(3),r_=1/3,s_=E(),l_=E(),h_=E(),u_=Math.min,c_=Math.max,d_=Math.sin,f_=Math.cos,g_=2*Math.PI,p_=E(),m_=E(),v_=E(),y_=[],x_=[],__={M:1,L:2,C:3,Q:4,A:5,Z:6,R:7},b_=[],w_=[],S_=[],M_=[],I_=Math.min,T_=Math.max,A_=Math.cos,C_=Math.sin,D_=Math.sqrt,L_=Math.abs,k_="undefined"!=typeof Float32Array,P_=function(t){this._saveData=!t,this._saveData&&(this.data=[]),this._ctx=null};P_.prototype={constructor:P_,_xi:0,_yi:0,_x0:0,_y0:0,_ux:0,_uy:0,_len:0,_lineDash:null,_dashOffset:0,_dashIdx:0,_dashSum:0,setScale:function(t,e){this._ux=L_(1/By/t)||0,this._uy=L_(1/By/e)||0},getContext:function(){return this._ctx},beginPath:function(t){return this._ctx=t,t&&t.beginPath(),t&&(this.dpr=t.dpr),this._saveData&&(this._len=0),this._lineDash&&(this._lineDash=null,this._dashOffset=0),this},moveTo:function(t,e){return this.addData(__.M,t,e),this._ctx&&this._ctx.moveTo(t,e),this._x0=t,this._y0=e,this._xi=t,this._yi=e,this},lineTo:function(t,e){var i=L_(t-this._xi)>this._ux||L_(e-this._yi)>this._uy||this._len<5;return this.addData(__.L,t,e),this._ctx&&i&&(this._needsDash()?this._dashedLineTo(t,e):this._ctx.lineTo(t,e)),i&&(this._xi=t,this._yi=e),this},bezierCurveTo:function(t,e,i,n,o,a){return this.addData(__.C,t,e,i,n,o,a),this._ctx&&(this._needsDash()?this._dashedBezierTo(t,e,i,n,o,a):this._ctx.bezierCurveTo(t,e,i,n,o,a)),this._xi=o,this._yi=a,this},quadraticCurveTo:function(t,e,i,n){return this.addData(__.Q,t,e,i,n),this._ctx&&(this._needsDash()?this._dashedQuadraticTo(t,e,i,n):this._ctx.quadraticCurveTo(t,e,i,n)),this._xi=i,this._yi=n,this},arc:function(t,e,i,n,o,a){return this.addData(__.A,t,e,i,i,n,o-n,0,a?0:1),this._ctx&&this._ctx.arc(t,e,i,n,o,a),this._xi=A_(o)*i+t,this._yi=C_(o)*i+t,this},arcTo:function(t,e,i,n,o){return this._ctx&&this._ctx.arcTo(t,e,i,n,o),this},rect:function(t,e,i,n){return this._ctx&&this._ctx.rect(t,e,i,n),this.addData(__.R,t,e,i,n),this},closePath:function(){this.addData(__.Z);var t=this._ctx,e=this._x0,i=this._y0;return t&&(this._needsDash()&&this._dashedLineTo(e,i),t.closePath()),this._xi=e,this._yi=i,this},fill:function(t){t&&t.fill(),this.toStatic()},stroke:function(t){t&&t.stroke(),this.toStatic()},setLineDash:function(t){if(t instanceof Array){this._lineDash=t,this._dashIdx=0;for(var e=0,i=0;ie.length&&(this._expandData(),e=this.data);for(var i=0;i0&&f<=t||u<0&&f>=t||0==u&&(c>0&&g<=e||c<0&&g>=e);)f+=u*(i=r[n=this._dashIdx]),g+=c*i,this._dashIdx=(n+1)%p,u>0&&fl||c>0&&gh||s[n%2?"moveTo":"lineTo"](u>=0?I_(f,t):T_(f,t),c>=0?I_(g,e):T_(g,e));u=f-t,c=g-e,this._dashOffset=-D_(u*u+c*c)},_dashedBezierTo:function(t,e,i,n,o,a){var r,s,l,h,u,c=this._dashSum,d=this._dashOffset,f=this._lineDash,g=this._ctx,p=this._xi,m=this._yi,v=on,y=0,x=this._dashIdx,_=f.length,b=0;for(d<0&&(d=c+d),d%=c,r=0;r<1;r+=.1)s=v(p,t,i,o,r+.1)-v(p,t,i,o,r),l=v(m,e,n,a,r+.1)-v(m,e,n,a,r),y+=D_(s*s+l*l);for(;x<_&&!((b+=f[x])>d);x++);for(r=(b-d)/y;r<=1;)h=v(p,t,i,o,r),u=v(m,e,n,a,r),x%2?g.moveTo(h,u):g.lineTo(h,u),r+=f[x]/y,x=(x+1)%_;x%2!=0&&g.lineTo(o,a),s=o-h,l=a-u,this._dashOffset=-D_(s*s+l*l)},_dashedQuadraticTo:function(t,e,i,n){var o=i,a=n;i=(i+2*t)/3,n=(n+2*e)/3,t=(this._xi+2*t)/3,e=(this._yi+2*e)/3,this._dashedBezierTo(t,e,i,n,o,a)},toStatic:function(){var t=this.data;t instanceof Array&&(t.length=this._len,k_&&(this.data=new Float32Array(t)))},getBoundingRect:function(){b_[0]=b_[1]=S_[0]=S_[1]=Number.MAX_VALUE,w_[0]=w_[1]=M_[0]=M_[1]=-Number.MAX_VALUE;for(var t=this.data,e=0,i=0,n=0,o=0,a=0;al||L_(r-o)>h||c===u-1)&&(t.lineTo(a,r),n=a,o=r);break;case __.C:t.bezierCurveTo(s[c++],s[c++],s[c++],s[c++],s[c++],s[c++]),n=s[c-2],o=s[c-1];break;case __.Q:t.quadraticCurveTo(s[c++],s[c++],s[c++],s[c++]),n=s[c-2],o=s[c-1];break;case __.A:var f=s[c++],g=s[c++],p=s[c++],m=s[c++],v=s[c++],y=s[c++],x=s[c++],_=s[c++],b=p>m?p:m,w=p>m?1:p/m,S=p>m?m/p:1,M=v+y;Math.abs(p-m)>.001?(t.translate(f,g),t.rotate(x),t.scale(w,S),t.arc(0,0,b,v,M,1-_),t.scale(1/w,1/S),t.rotate(-x),t.translate(-f,-g)):t.arc(f,g,b,v,M,1-_),1==c&&(e=A_(v)*p+f,i=C_(v)*m+g),n=A_(M)*p+f,o=C_(M)*m+g;break;case __.R:e=n=s[c],i=o=s[c+1],t.rect(s[c++],s[c++],s[c++],s[c++]);break;case __.Z:t.closePath(),n=e,o=i}}}},P_.CMD=__;var O_=2*Math.PI,z_=2*Math.PI,N_=P_.CMD,E_=2*Math.PI,R_=1e-4,V_=[-1,-1,-1],B_=[-1,-1],G_=ix.prototype.getCanvasPattern,W_=Math.abs,H_=new P_(!0);Nn.prototype={constructor:Nn,type:"path",__dirtyPath:!0,strokeContainThreshold:5,brush:function(t,e){var i=this.style,n=this.path||H_,o=i.hasStroke(),a=i.hasFill(),r=i.fill,s=i.stroke,l=a&&!!r.colorStops,h=o&&!!s.colorStops,u=a&&!!r.image,c=o&&!!s.image;if(i.bind(t,this,e),this.setTransform(t),this.__dirty){var d;l&&(d=d||this.getBoundingRect(),this._fillGradient=i.getGradient(t,r,d)),h&&(d=d||this.getBoundingRect(),this._strokeGradient=i.getGradient(t,s,d))}l?t.fillStyle=this._fillGradient:u&&(t.fillStyle=G_.call(r,t)),h?t.strokeStyle=this._strokeGradient:c&&(t.strokeStyle=G_.call(s,t));var f=i.lineDash,g=i.lineDashOffset,p=!!t.setLineDash,m=this.getGlobalScale();n.setScale(m[0],m[1]),this.__dirtyPath||f&&!p&&o?(n.beginPath(t),f&&!p&&(n.setLineDash(f),n.setLineDashOffset(g)),this.buildPath(n,this.shape,!1),this.path&&(this.__dirtyPath=!1)):(t.beginPath(),this.path.rebuildPath(t)),a&&n.fill(t),f&&p&&(t.setLineDash(f),t.lineDashOffset=g),o&&n.stroke(t),f&&p&&t.setLineDash([]),this.restoreTransform(t),null!=i.text&&this.drawRectText(t,this.getBoundingRect())},buildPath:function(t,e,i){},createPathProxy:function(){this.path=new P_},getBoundingRect:function(){var t=this._rect,e=this.style,i=!t;if(i){var n=this.path;n||(n=this.path=new P_),this.__dirtyPath&&(n.beginPath(),this.buildPath(n,this.shape,!1)),t=n.getBoundingRect()}if(this._rect=t,e.hasStroke()){var o=this._rectWithStroke||(this._rectWithStroke=t.clone());if(this.__dirty||i){o.copy(t);var a=e.lineWidth,r=e.strokeNoScale?this.getLineScale():1;e.hasFill()||(a=Math.max(a,this.strokeContainThreshold||4)),r>1e-10&&(o.width+=a/r,o.height+=a/r,o.x-=a/r/2,o.y-=a/r/2)}return o}return t},contain:function(t,e){var i=this.transformCoordToLocal(t,e),n=this.getBoundingRect(),o=this.style;if(t=i[0],e=i[1],n.contain(t,e)){var a=this.path.data;if(o.hasStroke()){var r=o.lineWidth,s=o.strokeNoScale?this.getLineScale():1;if(s>1e-10&&(o.hasFill()||(r=Math.max(r,this.strokeContainThreshold)),zn(a,r/s,t,e)))return!0}if(o.hasFill())return On(a,t,e)}return!1},dirty:function(t){null==t&&(t=!0),t&&(this.__dirtyPath=t,this._rect=null),this.__dirty=!0,this.__zr&&this.__zr.refresh(),this.__clipTarget&&this.__clipTarget.dirty()},animateShape:function(t){return this.animate("shape",t)},attrKV:function(t,e){"shape"===t?(this.setShape(e),this.__dirtyPath=!0,this._rect=null):je.prototype.attrKV.call(this,t,e)},setShape:function(t,e){var i=this.shape;if(i){if(b(t))for(var n in t)t.hasOwnProperty(n)&&(i[n]=t[n]);else i[t]=e;this.dirty(!0)}return this},getLineScale:function(){var t=this.transform;return t&&W_(t[0]-1)>1e-10&&W_(t[3]-1)>1e-10?Math.sqrt(W_(t[0]*t[3]-t[2]*t[1])):1}},Nn.extend=function(t){var e=function(e){Nn.call(this,e),t.style&&this.style.extendFrom(t.style,!1);var i=t.shape;if(i){this.shape=this.shape||{};var n=this.shape;for(var o in i)!n.hasOwnProperty(o)&&i.hasOwnProperty(o)&&(n[o]=i[o])}t.init&&t.init.call(this,e)};h(e,Nn);for(var i in t)"style"!==i&&"shape"!==i&&(e.prototype[i]=t[i]);return e},h(Nn,je);var F_=P_.CMD,Z_=[[],[],[]],U_=Math.sqrt,X_=Math.atan2,j_=function(t,e){var i,n,o,a,r,s,l=t.data,h=F_.M,u=F_.C,c=F_.L,d=F_.R,f=F_.A,g=F_.Q;for(o=0,a=0;o=11?function(){var e,i=this.__clipPaths,n=this.style;if(i)for(var o=0;oi-2?i-1:c+1],h=t[c>i-3?i-1:c+2]);var g=d*d,p=d*g;n.push([Wn(s[0],f[0],l[0],h[0],d,g,p),Wn(s[1],f[1],l[1],h[1],d,g,p)])}return n},hb=function(t,e,i,n){var o,a,r,s,l=[],h=[],u=[],c=[];if(n){r=[1/0,1/0],s=[-1/0,-1/0];for(var d=0,f=t.length;d=i&&a>=o)return{x:i,y:o,width:n-i,height:a-o}},createIcon:Do,Group:jy,Image:qe,Text:ib,Circle:nb,Sector:rb,Ring:sb,Polygon:ub,Polyline:cb,Rect:db,Line:fb,BezierCurve:pb,Arc:mb,CompoundPath:vb,LinearGradient:xb,RadialGradient:_b,BoundingRect:jt}),Ab=["textStyle","color"],Cb={getTextColor:function(t){var e=this.ecModel;return this.getShallow("color")||(!t&&e?e.get(Ab):null)},getFont:function(){return _o({fontStyle:this.getShallow("fontStyle"),fontWeight:this.getShallow("fontWeight"),fontSize:this.getShallow("fontSize"),fontFamily:this.getShallow("fontFamily")},this.ecModel)},getTextRect:function(t){return de(t,this.getFont(),this.getShallow("align"),this.getShallow("verticalAlign")||this.getShallow("baseline"),this.getShallow("padding"),this.getShallow("rich"),this.getShallow("truncateText"))}},Db=$x([["fill","color"],["stroke","borderColor"],["lineWidth","borderWidth"],["opacity"],["shadowBlur"],["shadowOffsetX"],["shadowOffsetY"],["shadowColor"],["textPosition"],["textAlign"]]),Lb={getItemStyle:function(t,e){var i=Db(this,t,e),n=this.getBorderLineDash();return n&&(i.lineDash=n),i},getBorderLineDash:function(){var t=this.get("borderType");return"solid"===t||null==t?null:"dashed"===t?[5,5]:[1,1]}},kb=u;Lo.prototype={constructor:Lo,init:null,mergeOption:function(t){n(this.option,t,!0)},get:function(t,e){return null==t?this.option:ko(this.option,this.parsePath(t),!e&&Po(this,t))},getShallow:function(t,e){var i=this.option,n=null==i?i:i[t],o=!e&&Po(this,t);return null==n&&o&&(n=o.getShallow(t)),n},getModel:function(t,e){var i,n=null==t?this.option:ko(this.option,t=this.parsePath(t));return e=e||(i=Po(this,t))&&i.getModel(t),new Lo(n,e,this.ecModel)},isEmpty:function(){return null==this.option},restoreData:function(){},clone:function(){return new(0,this.constructor)(i(this.option))},setReadOnly:function(t){},parsePath:function(t){return"string"==typeof t&&(t=t.split(".")),t},customizeGetParent:function(t){Xi(this,"getParent",t)},isAnimationEnabled:function(){if(!Uv.node){if(null!=this.option.animation)return!!this.option.animation;if(this.parentModel)return this.parentModel.isAnimationEnabled()}}},Ki(Lo),kb(Lo,Jx),kb(Lo,t_),kb(Lo,Cb),kb(Lo,Lb);var Pb=d,Ob=b,zb=["fontStyle","fontWeight","fontSize","fontFamily","rich","tag","color","textBorderColor","textBorderWidth","width","height","lineHeight","align","verticalAlign","baseline","shadowColor","shadowBlur","shadowOffsetX","shadowOffsetY","textShadowColor","textShadowBlur","textShadowOffsetX","textShadowOffsetY","backgroundColor","borderColor","borderWidth","borderRadius","padding"],Nb={getDataParams:function(t,e){var i=this.getData(e),n=this.getRawValue(t,e),o=i.getRawIndex(t),a=i.getName(t,!0),r=i.getRawDataItem(t),s=i.getItemVisual(t,"color");return{componentType:this.mainType,componentSubType:this.subType,seriesType:"series"===this.mainType?this.subType:null,seriesIndex:this.seriesIndex,seriesId:this.id,seriesName:this.name,name:a,dataIndex:o,data:r,dataType:e,value:n,color:s,marker:Fi(s),$vars:["seriesName","name","value"]}},getFormattedLabel:function(t,e,i,n,o){e=e||"normal";var a=this.getData(i).getItemModel(t),r=this.getDataParams(t,i);null!=n&&r.value instanceof Array&&(r.value=r.value[n]);var s=a.get([o||"label",e,"formatter"]);return"function"==typeof s?(r.status=e,s(r)):"string"==typeof s?Wi(s,r):void 0},getRawValue:function(t,e){var i=this.getData(e).getRawDataItem(t);if(null!=i)return!Ob(i)||i instanceof Array?i:i.value},formatTooltip:N},Eb=function(){var t=0;return function(){var e="\0__ec_prop_getter_"+t++;return function(t){return t[e]||(t[e]={})}}}(),Rb=0,Vb="_",Bb=d,Gb=["left","right","top","bottom","width","height"],Wb=[["width","left","right"],["height","top","bottom"]],Hb=Yo,Fb=(v(Yo,"vertical"),v(Yo,"horizontal"),{getBoxLayoutParams:function(){return{left:this.get("left"),top:this.get("top"),right:this.get("right"),bottom:this.get("bottom"),width:this.get("width"),height:this.get("height")}}}),Zb=Array.prototype.push,Ub=Lo.extend({type:"component",id:"",name:"",mainType:"",subType:"",componentIndex:0,defaultOption:null,ecModel:null,dependentModels:[],uid:null,layoutMode:null,$constructor:function(t,e,i,n){Lo.call(this,t,e,i,n),this.uid=qo("componentModel")},init:function(t,e,i,n){this.mergeDefaultAndTheme(t,i)},mergeDefaultAndTheme:function(t,e){var i=this.layoutMode,o=i?ea(t):{};n(t,e.getTheme().get(this.mainType)),n(t,this.getDefaultOption()),i&&ta(t,o,i)},mergeOption:function(t,e){n(this.option,t,!0);var i=this.layoutMode;i&&ta(this.option,t,i)},optionUpdated:function(t,e){},getDefaultOption:function(){if(!qi(this,"__defaultOption")){for(var t=[],e=this.constructor;e;){var i=e.prototype.defaultOption;i&&t.push(i),e=e.superClass}for(var o={},a=t.length-1;a>=0;a--)o=n(o,t[a],!0);Xi(this,"__defaultOption",o)}return ji(this,"__defaultOption")},getReferringComponents:function(t){return this.ecModel.queryComponents({mainType:t,index:this.get(t+"Index",!0),id:this.get(t+"Id",!0)})}});tn(Ub,{registerWhenExtend:!0}),function(t){var e={};t.registerSubTypeDefaulter=function(t,i){t=Yi(t),e[t.main]=i},t.determineSubType=function(i,n){var o=n.type;if(!o){var a=Yi(i).main;t.hasSubTypes(i)&&e[a]&&(o=e[a](n))}return o}}(Ub),function(t,e){function i(t){var i={},a=[];return d(t,function(r){var s=n(i,r),h=o(s.originalDeps=e(r),t);s.entryCount=h.length,0===s.entryCount&&a.push(r),d(h,function(t){l(s.predecessor,t)<0&&s.predecessor.push(t);var e=n(i,t);l(e.successor,t)<0&&e.successor.push(r)})}),{graph:i,noEntryList:a}}function n(t,e){return t[e]||(t[e]={predecessor:[],successor:[]}),t[e]}function o(t,e){var i=[];return d(t,function(t){l(e,t)>=0&&i.push(t)}),i}t.topologicalTravel=function(t,e,n,o){function a(t){s[t].entryCount--,0===s[t].entryCount&&l.push(t)}if(t.length){var r=i(e),s=r.graph,l=r.noEntryList,h={};for(d(t,function(t){h[t]=!0});l.length;){var u=l.pop(),c=s[u],f=!!h[u];f&&(n.call(o,u,c.originalDeps.slice()),delete h[u]),d(c.successor,f?function(t){h[t]=!0,a(t)}:a)}d(h,function(){throw new Error("Circle dependency may exists")})}}}(Ub,function(t){var e=[];return d(Ub.getClassesByMainType(t),function(t){Zb.apply(e,t.prototype.dependencies||[])}),f(e,function(t){return Yi(t).main})}),u(Ub,Fb);var Xb="";"undefined"!=typeof navigator&&(Xb=navigator.platform||"");var jb={color:["#c23531","#2f4554","#61a0a8","#d48265","#91c7ae","#749f83","#ca8622","#bda29a","#6e7074","#546570","#c4ccd3"],textStyle:{fontFamily:Xb.match(/^Win/)?"Microsoft YaHei":"sans-serif",fontSize:12,fontStyle:"normal",fontWeight:"normal"},blendMode:null,animation:"auto",animationDuration:1e3,animationDurationUpdate:300,animationEasing:"exponentialOut",animationEasingUpdate:"cubicOut",animationThreshold:2e3,progressiveThreshold:3e3,progressive:400,hoverLayerThreshold:3e3,useUTC:!1},qb={clearColorPalette:function(){Xi(this,"colorIdx",0),Xi(this,"colorNameMap",{})},getColorFromPalette:function(t,e){var i=ji(e=e||this,"colorIdx")||0,n=ji(e,"colorNameMap")||Xi(e,"colorNameMap",{});if(n.hasOwnProperty(t))return n[t];var o=this.get("color",!0)||[];if(o.length){var a=o[i];return t&&(n[t]=a),Xi(e,"colorIdx",(i+1)%o.length),a}}},Yb=d,$b=p,Kb=f,Jb=y,Qb=l,tw=b,ew="\0_ec_inner",iw=Lo.extend({constructor:iw,init:function(t,e,i,n){i=i||{},this.option=null,this._theme=new Lo(i),this._optionManager=n},setOption:function(t,e){L(!(ew in t),"please use chart.getOption()"),this._optionManager.setOption(t,e),this.resetOption(null)},resetOption:function(t){var e=!1,i=this._optionManager;if(!t||"recreate"===t){var n=i.mountOption("recreate"===t);this.option&&"recreate"!==t?(this.restoreData(),this.mergeOption(n)):oa.call(this,n),e=!0}if("timeline"!==t&&"media"!==t||this.restoreData(),!t||"recreate"===t||"timeline"===t){var o=i.getTimelineOption(this);o&&(this.mergeOption(o),e=!0)}if(!t||"recreate"===t||"media"===t){var a=i.getMediaOption(this,this._api);a.length&&Yb(a,function(t){this.mergeOption(t,e=!0)},this)}return e},mergeOption:function(t){var e=this.option,o=this._componentsMap,r=[];Yb(t,function(t,o){null!=t&&(Ub.hasClass(o)?r.push(o):e[o]=null==e[o]?i(t):n(e[o],t,!0))}),Ub.topologicalTravel(r,Ub.getAllClassMainTypes(),function(i,n){var r=Oo(t[i]),s=Vo(o.get(i),r);Bo(s),Yb(s,function(t,e){var n=t.option;tw(n)&&(t.keyInfo.mainType=i,t.keyInfo.subType=ra(i,n,t.exist))});var l=aa(o,n);e[i]=[],o.set(i,[]),Yb(s,function(t,n){var r=t.exist,s=t.option;if(L(tw(s)||r,"Empty component definition"),s){var h=Ub.getClass(i,t.keyInfo.subType,!0);if(r&&r instanceof h)r.name=t.keyInfo.name,r.mergeOption(s,this),r.optionUpdated(s,!1);else{var u=a({dependentModels:l,componentIndex:n},t.keyInfo);a(r=new h(s,this,this,u),u),r.init(s,this,this,u),r.optionUpdated(null,!0)}}else r.mergeOption({},this),r.optionUpdated({},!1);o.get(i)[n]=r,e[i][n]=r.option},this),"series"===i&&(this._seriesIndices=sa(o.get("series")))},this),this._seriesIndices=this._seriesIndices||[]},getOption:function(){var t=i(this.option);return Yb(t,function(e,i){if(Ub.hasClass(i)){for(var n=(e=Oo(e)).length-1;n>=0;n--)Go(e[n])&&e.splice(n,1);t[i]=e}}),delete t[ew],t},getTheme:function(){return this._theme},getComponent:function(t,e){var i=this._componentsMap.get(t);if(i)return i[e||0]},queryComponents:function(t){var e=t.mainType;if(!e)return[];var i=t.index,n=t.id,o=t.name,a=this._componentsMap.get(e);if(!a||!a.length)return[];var r;if(null!=i)Jb(i)||(i=[i]),r=$b(Kb(i,function(t){return a[t]}),function(t){return!!t});else if(null!=n){var s=Jb(n);r=$b(a,function(t){return s&&Qb(n,t.id)>=0||!s&&t.id===n})}else if(null!=o){var l=Jb(o);r=$b(a,function(t){return l&&Qb(o,t.name)>=0||!l&&t.name===o})}else r=a.slice();return la(r,t)},findComponents:function(t){var e=t.query,i=t.mainType,n=function(t){var e=i+"Index",n=i+"Id",o=i+"Name";return!t||null==t[e]&&null==t[n]&&null==t[o]?null:{mainType:i,index:t[e],id:t[n],name:t[o]}}(e);return function(e){return t.filter?$b(e,t.filter):e}(la(n?this.queryComponents(n):this._componentsMap.get(i),t))},eachComponent:function(t,e,i){var n=this._componentsMap;if("function"==typeof t)i=e,e=t,n.each(function(t,n){Yb(t,function(t,o){e.call(i,n,t,o)})});else if(_(t))Yb(n.get(t),e,i);else if(tw(t)){var o=this.findComponents(t);Yb(o,e,i)}},getSeriesByName:function(t){var e=this._componentsMap.get("series");return $b(e,function(e){return e.name===t})},getSeriesByIndex:function(t){return this._componentsMap.get("series")[t]},getSeriesByType:function(t){var e=this._componentsMap.get("series");return $b(e,function(e){return e.subType===t})},getSeries:function(){return this._componentsMap.get("series").slice()},eachSeries:function(t,e){Yb(this._seriesIndices,function(i){var n=this._componentsMap.get("series")[i];t.call(e,n,i)},this)},eachRawSeries:function(t,e){Yb(this._componentsMap.get("series"),t,e)},eachSeriesByType:function(t,e,i){Yb(this._seriesIndices,function(n){var o=this._componentsMap.get("series")[n];o.subType===t&&e.call(i,o,n)},this)},eachRawSeriesByType:function(t,e,i){return Yb(this.getSeriesByType(t),e,i)},isSeriesFiltered:function(t){return l(this._seriesIndices,t.componentIndex)<0},getCurrentSeriesIndices:function(){return(this._seriesIndices||[]).slice()},filterSeries:function(t,e){var i=$b(this._componentsMap.get("series"),t,e);this._seriesIndices=sa(i)},restoreData:function(){var t=this._componentsMap;this._seriesIndices=sa(t.get("series"));var e=[];t.each(function(t,i){e.push(i)}),Ub.topologicalTravel(e,Ub.getAllClassMainTypes(),function(e,i){Yb(t.get(e),function(t){t.restoreData()})})}});u(iw,qb);var nw=["getDom","getZr","getWidth","getHeight","getDevicePixelRatio","dispatchAction","isDisposed","on","off","getDataURL","getConnectedDataURL","getModel","getOption","getViewOfComponentModel","getViewOfSeriesModel"],ow={};ua.prototype={constructor:ua,create:function(t,e){var i=[];d(ow,function(n,o){var a=n.create(t,e);i=i.concat(a||[])}),this._coordinateSystems=i},update:function(t,e){d(this._coordinateSystems,function(i){i.update&&i.update(t,e)})},getCoordinateSystems:function(){return this._coordinateSystems.slice()}},ua.register=function(t,e){ow[t]=e},ua.get=function(t){return ow[t]};var aw=d,rw=i,sw=f,lw=n,hw=/^(min|max)?(.+)$/;ca.prototype={constructor:ca,setOption:function(t,e){t=rw(t,!0);var i=this._optionBackup,n=da.call(this,t,e,!i);this._newBaseOption=n.baseOption,i?(ma(i.baseOption,n.baseOption),n.timelineOptions.length&&(i.timelineOptions=n.timelineOptions),n.mediaList.length&&(i.mediaList=n.mediaList),n.mediaDefault&&(i.mediaDefault=n.mediaDefault)):this._optionBackup=n},mountOption:function(t){var e=this._optionBackup;return this._timelineOptions=sw(e.timelineOptions,rw),this._mediaList=sw(e.mediaList,rw),this._mediaDefault=rw(e.mediaDefault),this._currentMediaIndices=[],rw(t?e.baseOption:this._newBaseOption)},getTimelineOption:function(t){var e,i=this._timelineOptions;if(i.length){var n=t.getComponent("timeline");n&&(e=rw(i[n.getCurrentIndex()],!0))}return e},getMediaOption:function(t){var e=this._api.getWidth(),i=this._api.getHeight(),n=this._mediaList,o=this._mediaDefault,a=[],r=[];if(!n.length&&!o)return r;for(var s=0,l=n.length;s":"")+r.join(a?"
":", ")}(o):Gi(Vi(o)),r=n.getName(t),s=n.getItemVisual(t,"color");b(s)&&s.colorStops&&(s=(s.colorStops[0]||{}).color);var l=Fi(s=s||"transparent"),h=this.name;return"\0-"===h&&(h=""),h=h?Gi(h)+(e?": ":"
"):"",e?l+h+a:h+l+(r?Gi(r)+": "+a:a)},isAnimationEnabled:function(){if(Uv.node)return!1;var t=this.getShallow("animation");return t&&this.getData().count()>this.getShallow("animationThreshold")&&(t=!1),t},restoreData:function(){Xi(this,"data",ji(this,"dataBeforeProcessed").cloneShallow())},getColorFromPalette:function(t,e){var i=this.ecModel,n=qb.getColorFromPalette.call(this,t,e);return n||(n=i.getColorFromPalette(t,e)),n},getAxisTooltipData:null,getTooltipPosition:null});u(yw,Nb),u(yw,qb);var xw=function(){this.group=new jy,this.uid=qo("viewComponent")};xw.prototype={constructor:xw,init:function(t,e){},render:function(t,e,i,n){},dispose:function(){}};var _w=xw.prototype;_w.updateView=_w.updateLayout=_w.updateVisual=function(t,e,i,n){},Ki(xw),tn(xw,{registerWhenExtend:!0}),Ta.prototype={type:"chart",init:function(t,e){},render:function(t,e,i,n){},highlight:function(t,e,i,n){Ca(t.getData(),n,"emphasis")},downplay:function(t,e,i,n){Ca(t.getData(),n,"normal")},remove:function(t,e){this.group.removeAll()},dispose:function(){}};var bw=Ta.prototype;bw.updateView=bw.updateLayout=bw.updateVisual=function(t,e,i,n){this.render(t,e,i,n)},Ki(Ta),tn(Ta,{registerWhenExtend:!0});var ww="\0__throttleOriginMethod",Sw="\0__throttleRate",Mw="\0__throttleType",Iw=Math.PI,Tw=d,Aw=Ub.parseClassType,Cw={zrender:"3.7.3"},Dw=1e3,Lw=1e3,kw=3e3,Pw={PROCESSOR:{FILTER:Dw,STATISTIC:5e3},VISUAL:{LAYOUT:Lw,GLOBAL:2e3,CHART:kw,COMPONENT:4e3,BRUSH:5e3}},Ow="__flagInMainProcess",zw="__optionUpdated",Nw=/^[a-zA-Z0-9_]+$/;Oa.prototype.on=Pa("on"),Oa.prototype.off=Pa("off"),Oa.prototype.one=Pa("one"),u(Oa,fy);var Ew=za.prototype;Ew._onframe=function(){if(this[zw]){var t=this[zw].silent;this[Ow]=!0,Rw.prepareAndUpdate.call(this),this[Ow]=!1,this[zw]=!1,Va.call(this,t),Ba.call(this,t)}},Ew.getDom=function(){return this._dom},Ew.getZr=function(){return this._zr},Ew.setOption=function(t,e,i){var n;if(b(e)&&(i=e.lazyUpdate,n=e.silent,e=e.notMerge),this[Ow]=!0,!this._model||e){var o=new ca(this._api),a=this._theme;(this._model=new iw(null,null,a,o)).init(null,null,a,o)}this._model.setOption(t,Hw),i?(this[zw]={silent:n},this[Ow]=!1):(Rw.prepareAndUpdate.call(this),this._zr.flush(),this[zw]=!1,this[Ow]=!1,Va.call(this,n),Ba.call(this,n))},Ew.setTheme=function(){console.log("ECharts#setTheme() is DEPRECATED in ECharts 3.0")},Ew.getModel=function(){return this._model},Ew.getOption=function(){return this._model&&this._model.getOption()},Ew.getWidth=function(){return this._zr.getWidth()},Ew.getHeight=function(){return this._zr.getHeight()},Ew.getDevicePixelRatio=function(){return this._zr.painter.dpr||window.devicePixelRatio||1},Ew.getRenderedCanvas=function(t){if(Uv.canvasSupported){(t=t||{}).pixelRatio=t.pixelRatio||1,t.backgroundColor=t.backgroundColor||this._model.get("backgroundColor");var e=this._zr;return d(e.storage.getDisplayList(),function(t){t.stopAnimation(!0)}),e.painter.getRenderedCanvas(t)}},Ew.getSvgDataUrl=function(){if(Uv.svgSupported){var t=this._zr;return d(t.storage.getDisplayList(),function(t){t.stopAnimation(!0)}),t.painter.pathToSvg()}},Ew.getDataURL=function(t){var e=(t=t||{}).excludeComponents,i=this._model,n=[],o=this;Tw(e,function(t){i.eachComponent({mainType:t},function(t){var e=o._componentsMap[t.__viewId];e.group.ignore||(n.push(e),e.group.ignore=!0)})});var a="svg"===this._zr.painter.getType()?this.getSvgDataUrl():this.getRenderedCanvas(t).toDataURL("image/"+(t&&t.type||"png"));return Tw(n,function(t){t.group.ignore=!1}),a},Ew.getConnectedDataURL=function(t){if(Uv.canvasSupported){var e=this.group,n=Math.min,o=Math.max;if(qw[e]){var a=1/0,r=1/0,s=-1/0,l=-1/0,h=[],u=t&&t.pixelRatio||1;d(jw,function(u,c){if(u.group===e){var d=u.getRenderedCanvas(i(t)),f=u.getDom().getBoundingClientRect();a=n(f.left,a),r=n(f.top,r),s=o(f.right,s),l=o(f.bottom,l),h.push({dom:d,left:f.left,top:f.top})}});var c=(s*=u)-(a*=u),f=(l*=u)-(r*=u),g=iy();g.width=c,g.height=f;var p=yi(g);return Tw(h,function(t){var e=new qe({style:{x:t.left*u-a,y:t.top*u-r,image:t.dom}});p.add(e)}),p.refreshImmediately(),g.toDataURL("image/"+(t&&t.type||"png"))}return this.getDataURL(t)}},Ew.convertToPixel=v(Na,"convertToPixel"),Ew.convertFromPixel=v(Na,"convertFromPixel"),Ew.containPixel=function(t,e){var i;return t=Fo(this._model,t),d(t,function(t,n){n.indexOf("Models")>=0&&d(t,function(t){var o=t.coordinateSystem;if(o&&o.containPoint)i|=!!o.containPoint(e);else if("seriesModels"===n){var a=this._chartsMap[t.__viewId];a&&a.containPoint&&(i|=a.containPoint(e,t))}},this)},this),!!i},Ew.getVisual=function(t,e){var i=(t=Fo(this._model,t,{defaultMainType:"series"})).seriesModel.getData(),n=t.hasOwnProperty("dataIndexInside")?t.dataIndexInside:t.hasOwnProperty("dataIndex")?i.indexOfRawIndex(t.dataIndex):null;return null!=n?i.getItemVisual(n,e):i.getVisual(e)},Ew.getViewOfComponentModel=function(t){return this._componentsMap[t.__viewId]},Ew.getViewOfSeriesModel=function(t){return this._chartsMap[t.__viewId]};var Rw={update:function(t){var e=this._model,i=this._api,n=this._coordSysMgr,o=this._zr;if(e){e.restoreData(),n.create(this._model,this._api),Ha.call(this,e,i),Fa.call(this,e),n.update(e,i),Ua.call(this,e,t),Xa.call(this,e,t);var a=e.get("backgroundColor")||"transparent",r=o.painter;if(r.isSingleCanvas&&r.isSingleCanvas())o.configLayer(0,{clearColor:a});else{if(!Uv.canvasSupported){var s=Mt(a);a=Ot(s,"rgb"),0===s[3]&&(a="transparent")}a.colorStops||a.image?(o.configLayer(0,{clearColor:a}),this.__hasGradientOrPatternBg=!0,this._dom.style.background="transparent"):(this.__hasGradientOrPatternBg&&o.configLayer(0,{clearColor:null}),this.__hasGradientOrPatternBg=!1,this._dom.style.background=a)}Tw(Fw,function(t){t(e,i)})}},updateView:function(t){var e=this._model;e&&(e.eachSeries(function(t){t.getData().clearAllVisual()}),Ua.call(this,e,t),Ga.call(this,"updateView",e,t))},updateVisual:function(t){var e=this._model;e&&(e.eachSeries(function(t){t.getData().clearAllVisual()}),Ua.call(this,e,t,!0),Ga.call(this,"updateVisual",e,t))},updateLayout:function(t){var e=this._model;e&&(Za.call(this,e,t),Ga.call(this,"updateLayout",e,t))},prepareAndUpdate:function(t){var e=this._model;Wa.call(this,"component",e),Wa.call(this,"chart",e),Rw.update.call(this,t)}};Ew.resize=function(t){this[Ow]=!0,this._zr.resize(t);var e=this._model&&this._model.resetOption("media");Rw[e?"prepareAndUpdate":"update"].call(this),this._loadingFX&&this._loadingFX.resize(),this[Ow]=!1;var i=t&&t.silent;Va.call(this,i),Ba.call(this,i)},Ew.showLoading=function(t,e){if(b(t)&&(e=t,t=""),t=t||"default",this.hideLoading(),Xw[t]){var i=Xw[t](this._api,e),n=this._zr;this._loadingFX=i,n.add(i)}},Ew.hideLoading=function(){this._loadingFX&&this._zr.remove(this._loadingFX),this._loadingFX=null},Ew.makeActionFromEvent=function(t){var e=a({},t);return e.type=Gw[t.type],e},Ew.dispatchAction=function(t,e){b(e)||(e={silent:!!e}),Bw[t.type]&&this._model&&(this[Ow]?this._pendingActions.push(t):(Ra.call(this,t,e.silent),e.flush?this._zr.flush(!0):!1!==e.flush&&Uv.browser.weChat&&this._throttledZrFlush(),Va.call(this,e.silent),Ba.call(this,e.silent)))},Ew.on=Pa("on"),Ew.off=Pa("off"),Ew.one=Pa("one");var Vw=["click","dblclick","mouseover","mouseout","mousemove","mousedown","mouseup","globalout","contextmenu"];Ew._initEvents=function(){Tw(Vw,function(t){this._zr.on(t,function(e){var i,n=this.getModel(),o=e.target;if("globalout"===t)i={};else if(o&&null!=o.dataIndex){var r=o.dataModel||n.getSeriesByIndex(o.seriesIndex);i=r&&r.getDataParams(o.dataIndex,o.dataType)||{}}else o&&o.eventData&&(i=a({},o.eventData));i&&(i.event=e,i.type=t,this.trigger(t,i))},this)},this),Tw(Gw,function(t,e){this._messageCenter.on(e,function(t){this.trigger(e,t)},this)},this)},Ew.isDisposed=function(){return this._disposed},Ew.clear=function(){this.setOption({series:[]},!0)},Ew.dispose=function(){if(!this._disposed){this._disposed=!0;var t=this._api,e=this._model;Tw(this._componentsViews,function(i){i.dispose(e,t)}),Tw(this._chartsViews,function(i){i.dispose(e,t)}),this._zr.dispose(),delete jw[this.id]}},u(za,fy);var Bw={},Gw={},Ww=[],Hw=[],Fw=[],Zw=[],Uw={},Xw={},jw={},qw={},Yw=new Date-0,$w=new Date-0,Kw="_echarts_instance_",Jw={},Qw=Ja;ar(2e3,function(t){t.eachRawSeries(function(e){var i=(e.visualColorAccessPath||"itemStyle.normal.color").split("."),n=e.getData(),o=e.get(i)||e.getColorFromPalette(e.get("name"));n.setVisual("color",o),t.isSeriesFiltered(e)||("function"!=typeof o||o instanceof yb||n.each(function(t){n.setItemVisual(t,"color",o(e.getDataParams(t)))}),n.each(function(t){var e=n.getItemModel(t).get(i,!0);null!=e&&n.setItemVisual(t,"color",e)}))})}),tr(vw),rr("default",function(t,e){r(e=e||{},{text:"loading",color:"#c23531",textColor:"#000",maskColor:"rgba(255, 255, 255, 0.8)",zlevel:0});var i=new db({style:{fill:e.maskColor},zlevel:e.zlevel,z:1e4}),n=new mb({shape:{startAngle:-Iw/2,endAngle:-Iw/2+.1,r:10},style:{stroke:e.color,lineCap:"round",lineWidth:5},zlevel:e.zlevel,z:10001}),o=new db({style:{fill:"none",text:e.text,textPosition:"right",textDistance:10,textFill:e.textColor},zlevel:e.zlevel,z:10001});n.animateShape(!0).when(1e3,{endAngle:3*Iw/2}).start("circularInOut"),n.animateShape(!0).when(1e3,{startAngle:3*Iw/2}).delay(300).start("circularInOut");var a=new jy;return a.add(n),a.add(o),a.add(i),a.resize=function(){var e=t.getWidth()/2,a=t.getHeight()/2;n.setShape({cx:e,cy:a});var r=n.shape.r;o.setShape({x:e-r,y:a-r,width:2*r,height:2*r}),i.setShape({x:0,y:0,width:t.getWidth(),height:t.getHeight()})},a.resize(),a}),ir({type:"highlight",event:"highlight",update:"highlight"},N),ir({type:"downplay",event:"downplay",update:"downplay"},N);var tS={};fr.prototype={constructor:fr,add:function(t){return this._add=t,this},update:function(t){return this._update=t,this},remove:function(t){return this._remove=t,this},execute:function(){var t=this._old,e=this._new,i={},n=[],o=[];for(gr(t,{},n,"_oldKeyGetter",this),gr(e,i,o,"_newKeyGetter",this),a=0;a0&&(_+="__ec__"+u[x]),u[x]++),_&&(h[v]=_)}this._nameList=e,this._idList=h},rS.count=function(){return this.indices.length},rS.get=function(t,e,i){var n=this._storage,o=this.indices[e];if(null==o||!n[t])return NaN;var a=n[t][o];if(i){var r=this._dimensionInfos[t];if(r&&r.stackable)for(var s=this.stackedOn;s;){var l=s.get(t,e);(a>=0&&l>0||a<=0&&l<0)&&(a+=l),s=s.stackedOn}}return a},rS.getValues=function(t,e,i){var n=[];y(t)||(i=e,e=t,t=this.dimensions);for(var o=0,a=t.length;ol&&(l=a));return this._extent[t+!!e]=[s,l]}return[1/0,-1/0]},rS.getSum=function(t,e){var i=0;if(this._storage[t])for(var n=0,o=this.count();nt))return a;o=a-1}}return-1},rS.indicesOfNearest=function(t,e,i,n){var o=[];if(!this._storage[t])return o;null==n&&(n=1/0);for(var a=Number.MAX_VALUE,r=-1,s=0,l=this.count();s=0&&r<0)&&(a=u,r=h,o.length=0),o.push(s))}return o},rS.getRawIndex=function(t){var e=this.indices[t];return null==e?-1:e},rS.getRawDataItem=function(t){return this._rawData.getItem(this.getRawIndex(t))},rS.getName=function(t){return this._nameList[this.indices[t]]||""},rS.getId=function(t){return this._idList[this.indices[t]]||this.getRawIndex(t)+""},rS.each=function(t,e,i,n){"function"==typeof t&&(n=i,i=e,e=t,t=[]);var o=[],a=(t=f(vr(t),this.getDimension,this)).length,r=this.indices;n=n||this;for(var s=0;sf-g&&(c=f-g,h.length=c);for(var p=0;p=e[0]&&t<=e[1]},Ar.prototype.normalize=function(t){var e=this._extent;return e[1]===e[0]?.5:(t-e[0])/(e[1]-e[0])},Ar.prototype.scale=function(t){var e=this._extent;return t*(e[1]-e[0])+e[0]},Ar.prototype.unionExtent=function(t){var e=this._extent;t[0]e[1]&&(e[1]=t[1])},Ar.prototype.unionExtentFromData=function(t,e){this.unionExtent(t.getDataExtent(e,!0))},Ar.prototype.getExtent=function(){return this._extent.slice()},Ar.prototype.setExtent=function(t,e){var i=this._extent;isNaN(t)||(i[0]=t),isNaN(e)||(i[1]=e)},Ar.prototype.getTicksLabels=function(){for(var t=[],e=this.getTicks(),i=0;ie[1]&&(e[1]=t[1]),yS.prototype.setExtent.call(this,e[0],e[1])},getInterval:function(){return this._interval},setInterval:function(t){this._interval=t,this._niceExtent=this._extent.slice(),this._intervalPrecision=Dr(t)},getTicks:function(){return Pr(this._interval,this._extent,this._niceExtent,this._intervalPrecision)},getTicksLabels:function(){for(var t=[],e=this.getTicks(),i=0;i>>1;t[o][1]i&&(a=i);var r=MS.length,s=wS(MS,a,0,r),l=MS[Math.min(s,r-1)],h=l[1];"year"===l[0]&&(h*=Ni(o/h/t,!0));var u=this.getSetting("useUTC")?0:60*new Date(+n[0]||+n[1]).getTimezoneOffset()*1e3,c=[Math.round(_S((n[0]-u)/h)*h+u),Math.round(bS((n[1]-u)/h)*h+u)];kr(c,n),this._stepLvl=l,this._interval=h,this._niceExtent=c},parse:function(t){return+Pi(t)}});d(["contain","normalize"],function(t){SS.prototype[t]=function(e){return xS[t].call(this,this.parse(e))}});var MS=[["hh:mm:ss",1e3],["hh:mm:ss",5e3],["hh:mm:ss",1e4],["hh:mm:ss",15e3],["hh:mm:ss",3e4],["hh:mm\nMM-dd",6e4],["hh:mm\nMM-dd",3e5],["hh:mm\nMM-dd",6e5],["hh:mm\nMM-dd",9e5],["hh:mm\nMM-dd",18e5],["hh:mm\nMM-dd",36e5],["hh:mm\nMM-dd",72e5],["hh:mm\nMM-dd",216e5],["hh:mm\nMM-dd",432e5],["MM-dd\nyyyy",864e5],["MM-dd\nyyyy",1728e5],["MM-dd\nyyyy",2592e5],["MM-dd\nyyyy",3456e5],["MM-dd\nyyyy",432e6],["MM-dd\nyyyy",5184e5],["week",6048e5],["MM-dd\nyyyy",864e6],["week",12096e5],["week",18144e5],["month",26784e5],["week",36288e5],["month",53568e5],["week",36288e5],["quarter",8208e6],["month",107136e5],["month",13392e6],["half-year",16416e6],["month",214272e5],["month",26784e6],["year",32832e6]];SS.create=function(t){return new SS({useUTC:t.ecModel.get("useUTC")})};var IS=Ar.prototype,TS=yS.prototype,AS=Ai,CS=Mi,DS=Math.floor,LS=Math.ceil,kS=Math.pow,PS=Math.log,OS=Ar.extend({type:"log",base:10,$constructor:function(){Ar.apply(this,arguments),this._originalScale=new yS},getTicks:function(){var t=this._originalScale,e=this._extent,i=t.getExtent();return f(TS.getTicks.call(this),function(n){var o=Mi(kS(this.base,n));return o=n===e[0]&&t.__fixMin?Or(o,i[0]):o,o=n===e[1]&&t.__fixMax?Or(o,i[1]):o},this)},getLabel:TS.getLabel,scale:function(t){return t=IS.scale.call(this,t),kS(this.base,t)},setExtent:function(t,e){var i=this.base;t=PS(t)/PS(i),e=PS(e)/PS(i),TS.setExtent.call(this,t,e)},getExtent:function(){var t=this.base,e=IS.getExtent.call(this);e[0]=kS(t,e[0]),e[1]=kS(t,e[1]);var i=this._originalScale,n=i.getExtent();return i.__fixMin&&(e[0]=Or(e[0],n[0])),i.__fixMax&&(e[1]=Or(e[1],n[1])),e},unionExtent:function(t){this._originalScale.unionExtent(t);var e=this.base;t[0]=PS(t[0])/PS(e),t[1]=PS(t[1])/PS(e),IS.unionExtent.call(this,t)},unionExtentFromData:function(t,e){this.unionExtent(t.getDataExtent(e,!0,function(t){return t>0}))},niceTicks:function(t){t=t||10;var e=this._extent,i=e[1]-e[0];if(!(i===1/0||i<=0)){var n=Oi(i);for(t/i*n<=.5&&(n*=10);!isNaN(n)&&Math.abs(n)<1&&Math.abs(n)>0;)n*=10;var o=[Mi(LS(e[0]/n)*n),Mi(DS(e[1]/n)*n)];this._interval=n,this._niceExtent=o}},niceExtent:function(t){TS.niceExtent.call(this,t);var e=this._originalScale;e.__fixMin=t.fixMin,e.__fixMax=t.fixMax}});d(["contain","normalize"],function(t){OS.prototype[t]=function(e){return e=PS(e)/PS(this.base),IS[t].call(this,e)}}),OS.create=function(){return new OS};var zS={getFormattedLabels:function(){return Vr(this.axis,this.get("axisLabel.formatter"))},getCategories:function(){return"category"===this.get("type")&&f(this.get("data"),Gr)},getMin:function(t){var e=this.option,i=t||null==e.rangeStart?e.min:e.rangeStart;return this.axis&&null!=i&&"dataMin"!==i&&"function"!=typeof i&&!M(i)&&(i=this.axis.scale.parse(i)),i},getMax:function(t){var e=this.option,i=t||null==e.rangeEnd?e.max:e.rangeEnd;return this.axis&&null!=i&&"dataMax"!==i&&"function"!=typeof i&&!M(i)&&(i=this.axis.scale.parse(i)),i},getNeedCrossZero:function(){var t=this.option;return null==t.rangeStart&&null==t.rangeEnd&&!t.scale},getCoordSysModel:N,setRange:function(t,e){this.option.rangeStart=t,this.option.rangeEnd=e},resetRange:function(){this.option.rangeStart=this.option.rangeEnd=null}},NS=Zn({type:"triangle",shape:{cx:0,cy:0,width:0,height:0},buildPath:function(t,e){var i=e.cx,n=e.cy,o=e.width/2,a=e.height/2;t.moveTo(i,n-a),t.lineTo(i+o,n+a),t.lineTo(i-o,n+a),t.closePath()}}),ES=Zn({type:"diamond",shape:{cx:0,cy:0,width:0,height:0},buildPath:function(t,e){var i=e.cx,n=e.cy,o=e.width/2,a=e.height/2;t.moveTo(i,n-a),t.lineTo(i+o,n),t.lineTo(i,n+a),t.lineTo(i-o,n),t.closePath()}}),RS=Zn({type:"pin",shape:{x:0,y:0,width:0,height:0},buildPath:function(t,e){var i=e.x,n=e.y,o=e.width/5*3,a=Math.max(o,e.height),r=o/2,s=r*r/(a-r),l=n-a+r+s,h=Math.asin(s/r),u=Math.cos(h)*r,c=Math.sin(h),d=Math.cos(h),f=.6*r,g=.7*r;t.moveTo(i-u,l+s),t.arc(i,l,r,Math.PI-h,2*Math.PI+h),t.bezierCurveTo(i+u-c*f,l+s+d*f,i,n-g,i,n),t.bezierCurveTo(i,n-g,i-u+c*f,l+s+d*f,i-u,l+s),t.closePath()}}),VS=Zn({type:"arrow",shape:{x:0,y:0,width:0,height:0},buildPath:function(t,e){var i=e.height,n=e.width,o=e.x,a=e.y,r=n/3*2;t.moveTo(o,a),t.lineTo(o+r,a+i),t.lineTo(o,a+i/4*3),t.lineTo(o-r,a+i),t.lineTo(o,a),t.closePath()}}),BS={line:function(t,e,i,n,o){o.x1=t,o.y1=e+n/2,o.x2=t+i,o.y2=e+n/2},rect:function(t,e,i,n,o){o.x=t,o.y=e,o.width=i,o.height=n},roundRect:function(t,e,i,n,o){o.x=t,o.y=e,o.width=i,o.height=n,o.r=Math.min(i,n)/4},square:function(t,e,i,n,o){var a=Math.min(i,n);o.x=t,o.y=e,o.width=a,o.height=a},circle:function(t,e,i,n,o){o.cx=t+i/2,o.cy=e+n/2,o.r=Math.min(i,n)/2},diamond:function(t,e,i,n,o){o.cx=t+i/2,o.cy=e+n/2,o.width=i,o.height=n},pin:function(t,e,i,n,o){o.x=t+i/2,o.y=e+n/2,o.width=i,o.height=n},arrow:function(t,e,i,n,o){o.x=t+i/2,o.y=e+n/2,o.width=i,o.height=n},triangle:function(t,e,i,n,o){o.cx=t+i/2,o.cy=e+n/2,o.width=i,o.height=n}},GS={};d({line:fb,rect:db,roundRect:db,square:db,circle:nb,diamond:ES,pin:RS,arrow:VS,triangle:NS},function(t,e){GS[e]=new t});var WS=Zn({type:"symbol",shape:{symbolType:"",x:0,y:0,width:0,height:0},beforeBrush:function(){var t=this.style;"pin"===this.shape.symbolType&&"inside"===t.textPosition&&(t.textPosition=["50%","40%"],t.textAlign="center",t.textVerticalAlign="middle")},buildPath:function(t,e,i){var n=e.symbolType,o=GS[n];"none"!==e.symbolType&&(o||(o=GS[n="rect"]),BS[n](e.x,e.y,e.width,e.height,o.shape),o.buildPath(t,o.shape,i))}}),HS=(Object.freeze||Object)({createList:function(t){return Sr(t.get("data"),t,t.ecModel)},createScale:function(t,e){var i=e;e instanceof Lo||u(i=new Lo(e),zS);var n=Er(i);return n.setExtent(t[0],t[1]),Nr(n,i),n},mixinAxisModelCommonMethods:function(t){u(t,zS)},completeDimensions:xr,createSymbol:Hr}),FS=wi,ZS=[0,1],US=function(t,e,i){this.dim=t,this.scale=e,this._extent=i||[0,0],this.inverse=!1,this.onBand=!1,this._labelInterval};US.prototype={constructor:US,contain:function(t){var e=this._extent,i=Math.min(e[0],e[1]),n=Math.max(e[0],e[1]);return t>=i&&t<=n},containData:function(t){return this.contain(this.dataToCoord(t))},getExtent:function(){return this._extent.slice()},getPixelPrecision:function(t){return Ci(t||this.scale.getExtent(),this._extent)},setExtent:function(t,e){var i=this._extent;i[0]=t,i[1]=e},dataToCoord:function(t,e){var i=this._extent,n=this.scale;return t=n.normalize(t),this.onBand&&"ordinal"===n.type&&Fr(i=i.slice(),n.count()),FS(t,ZS,i,e)},coordToData:function(t,e){var i=this._extent,n=this.scale;this.onBand&&"ordinal"===n.type&&Fr(i=i.slice(),n.count());var o=FS(t,i,ZS,e);return this.scale.scale(o)},pointToData:function(t,e){},getTicksCoords:function(t){if(this.onBand&&!t){for(var e=this.getBands(),i=[],n=0;n0}),function(t){var e=t.properties,i=t.geometry,n=i.coordinates,o=[];"Polygon"===i.type&&o.push({type:"polygon",exterior:n[0],interiors:n.slice(1)}),"MultiPolygon"===i.type&&d(n,function(t){t[0]&&o.push({type:"polygon",exterior:t[0],interiors:t.slice(1)})});var a=new Xr(e.name,o,e.cp);return a.properties=e,a})},qS={};d(["map","each","filter","indexOf","inherits","reduce","filter","bind","curry","isArray","isString","isObject","isFunction","extend","defaults","clone","merge"],function(t){qS[t]=ay[t]}),yw.extend({type:"series.line",dependencies:["grid","polar"],getInitialData:function(t,e){return Sr(t.data,this,e)},defaultOption:{zlevel:0,z:2,coordinateSystem:"cartesian2d",legendHoverLink:!0,hoverAnimation:!0,clipOverflow:!0,label:{normal:{position:"top"}},lineStyle:{normal:{width:2,type:"solid"}},step:!1,smooth:!1,smoothMonotone:null,symbol:"emptyCircle",symbolSize:4,symbolRotate:null,showSymbol:!0,showAllSymbol:!1,connectNulls:!1,sampling:"none",animationEasing:"linear",progressive:0,hoverLayerThreshold:1/0}});var YS=Jr.prototype;YS._createSymbol=function(t,e,i,n){this.removeAll();var o=Hr(t,-1,-1,2,2,e.getItemVisual(i,"color"));o.attr({z2:100,culling:!0,scale:Kr(n)}),o.drift=Qr,this._symbolType=t,this.add(o)},YS.stopSymbolAnimation=function(t){this.childAt(0).stopAnimation(t)},YS.getSymbolPath=function(){return this.childAt(0)},YS.getScale=function(){return this.childAt(0).scale},YS.highlight=function(){this.childAt(0).trigger("emphasis")},YS.downplay=function(){this.childAt(0).trigger("normal")},YS.setZ=function(t,e){var i=this.childAt(0);i.zlevel=t,i.z=e},YS.setDraggable=function(t){var e=this.childAt(0);e.draggable=t,e.cursor=t?"move":"pointer"},YS.updateData=function(t,e,i){this.silent=!1;var n=t.getItemVisual(e,"symbol")||"circle",o=t.hostModel,a=$r(t,e),r=n!==this._symbolType;if(r?this._createSymbol(n,t,e,a):((s=this.childAt(0)).silent=!1,wo(s,{scale:Kr(a)},o,e)),this._updateCommon(t,e,a,i),r){var s=this.childAt(0),l=i&&i.fadeIn,h={scale:s.scale.slice()};l&&(h.style={opacity:s.style.opacity}),s.scale=[0,0],l&&(s.style.opacity=0),So(s,h,o,e)}this._seriesModel=o};var $S=["itemStyle","normal"],KS=["itemStyle","emphasis"],JS=["label","normal"],QS=["label","emphasis"];YS._updateCommon=function(t,e,i,n){var o=this.childAt(0),r=t.hostModel,s=t.getItemVisual(e,"color");"image"!==o.type&&o.useStyle({strokeNoScale:!0});var l=n&&n.itemStyle,h=n&&n.hoverItemStyle,u=n&&n.symbolRotate,c=n&&n.symbolOffset,d=n&&n.labelModel,f=n&&n.hoverLabelModel,g=n&&n.hoverAnimation,p=n&&n.cursorStyle;if(!n||t.hasItemOption){var m=n&&n.itemModel?n.itemModel:t.getItemModel(e);l=m.getModel($S).getItemStyle(["color"]),h=m.getModel(KS).getItemStyle(),u=m.getShallow("symbolRotate"),c=m.getShallow("symbolOffset"),d=m.getModel(JS),f=m.getModel(QS),g=m.getShallow("hoverAnimation"),p=m.getShallow("cursor")}else h=a({},h);var v=o.style;o.attr("rotation",(u||0)*Math.PI/180||0),c&&o.attr("position",[Si(c[0],i[0]),Si(c[1],i[1])]),p&&o.attr("cursor",p),o.setColor(s,n&&n.symbolInnerColor),o.setStyle(l);var y=t.getItemVisual(e,"opacity");null!=y&&(v.opacity=y);var x=n&&n.useNameLabel,_=!x&&Yr(t);(x||null!=_)&&co(v,h,d,f,{labelFetcher:r,labelDataIndex:e,defaultText:x?t.getName(e):t.get(_,e),isRectText:!0,autoColor:s}),o.off("mouseover").off("mouseout").off("emphasis").off("normal"),o.hoverStyle=h,uo(o);var b=Kr(i);if(g&&r.isAnimationEnabled()){var w=function(){var t=b[1]/b[0];this.animateTo({scale:[Math.max(1.1*b[0],b[0]+3),Math.max(1.1*b[1],b[1]+3*t)]},400,"elasticOut")},S=function(){this.animateTo({scale:b},400,"elasticOut")};o.on("mouseover",w).on("mouseout",S).on("emphasis",w).on("normal",S)}},YS.fadeOut=function(t,e){var i=this.childAt(0);this.silent=i.silent=!0,!(e&&e.keepLabel)&&(i.style.text=null),wo(i,{style:{opacity:0},scale:[0,0]},this._seriesModel,this.dataIndex,t)},h(Jr,jy);var tM=ts.prototype;tM.updateData=function(t,e){var i=this.group,n=t.hostModel,o=this._data,a=this._symbolCtor,r={itemStyle:n.getModel("itemStyle.normal").getItemStyle(["color"]),hoverItemStyle:n.getModel("itemStyle.emphasis").getItemStyle(),symbolRotate:n.get("symbolRotate"),symbolOffset:n.get("symbolOffset"),hoverAnimation:n.get("hoverAnimation"),labelModel:n.getModel("label.normal"),hoverLabelModel:n.getModel("label.emphasis"),cursorStyle:n.get("cursor")};t.diff(o).add(function(n){var o=t.getItemLayout(n);if(es(t,n,e)){var s=new a(t,n,r);s.attr("position",o),t.setItemGraphicEl(n,s),i.add(s)}}).update(function(s,l){var h=o.getItemGraphicEl(l),u=t.getItemLayout(s);es(t,s,e)?(h?(h.updateData(t,s,r),wo(h,{position:u},n)):(h=new a(t,s)).attr("position",u),i.add(h),t.setItemGraphicEl(s,h)):i.remove(h)}).remove(function(t){var e=o.getItemGraphicEl(t);e&&e.fadeOut(function(){i.remove(e)})}).execute(),this._data=t},tM.updateLayout=function(){var t=this._data;t&&t.eachItemGraphicEl(function(e,i){var n=t.getItemLayout(i);e.attr("position",n)})},tM.remove=function(t){var e=this.group,i=this._data;i&&(t?i.eachItemGraphicEl(function(t){t.fadeOut(function(){e.remove(t)})}):e.removeAll())};var eM=function(t,e,i,n,o,a){for(var r=os(t,e),s=[],l=[],h=[],u=[],c=[],d=[],f=[],g=a.dimensions,p=0;p0&&as(i[o-1]);o--);for(;n0&&as(i[a-1]);a--);for(;o=0){var r=o.getItemGraphicEl(a);if(!r){var s=o.getItemLayout(a);if(!s)return;(r=new Jr(o,a)).position=s,r.setZ(t.get("zlevel"),t.get("z")),r.ignore=isNaN(s[0])||isNaN(s[1]),r.__temp=!0,o.setItemGraphicEl(a,r),r.stopSymbolAnimation(!0),this.group.add(r)}r.highlight()}else Ta.prototype.highlight.call(this,t,e,i,n)},downplay:function(t,e,i,n){var o=t.getData(),a=Ho(o,n);if(null!=a&&a>=0){var r=o.getItemGraphicEl(a);r&&(r.__temp?(o.setItemGraphicEl(a,null),this.group.remove(r)):r.downplay())}else Ta.prototype.downplay.call(this,t,e,i,n)},_newPolyline:function(t){var e=this._polyline;return e&&this._lineGroup.remove(e),e=new hM({shape:{points:t},silent:!0,z2:10}),this._lineGroup.add(e),this._polyline=e,e},_newPolygon:function(t,e){var i=this._polygon;return i&&this._lineGroup.remove(i),i=new uM({shape:{points:t,stackedOnPoints:e},silent:!0}),this._lineGroup.add(i),this._polygon=i,i},_getSymbolIgnoreFunc:function(t,e){var i=e.getAxesByScale("ordinal")[0];if(i&&i.isLabelIgnored)return m(i.isLabelIgnored,i)},_updateAnimation:function(t,e,i,n,o){var a=this._polyline,r=this._polygon,s=t.hostModel,l=eM(this._data,t,this._stackedOnPoints,e,this._coordSys,i),h=l.current,u=l.stackedOnCurrent,c=l.next,d=l.stackedOnNext;o&&(h=ms(l.current,i,o),u=ms(l.stackedOnCurrent,i,o),c=ms(l.next,i,o),d=ms(l.stackedOnNext,i,o)),a.shape.__points=l.current,a.shape.points=h,wo(a,{shape:{points:c}},s),r&&(r.setShape({points:h,stackedOnPoints:u}),wo(r,{shape:{points:c,stackedOnPoints:d}},s));for(var f=[],g=l.status,p=0;pe&&(e=t[i]);return e},min:function(t){for(var e=1/0,i=0;ie[1]&&e.reverse(),e},getOtherAxis:function(){this.grid.getOtherAxis()},isLabelIgnored:function(t){if("category"===this.type){var e=this.getLabelInterval();return"function"==typeof e&&!e(t,this.scale.getLabel(t))||t%(e+1)}},pointToData:function(t,e){return this.coordToData(this.toLocalCoord(t["x"===this.dim?0:1]),e)},toLocalCoord:null,toGlobalCoord:null},h(mM,US);var vM={show:!0,zlevel:0,z:0,inverse:!1,name:"",nameLocation:"end",nameRotate:null,nameTruncate:{maxWidth:null,ellipsis:"...",placeholder:"."},nameTextStyle:{},nameGap:15,silent:!1,triggerEvent:!1,tooltip:{show:!1},axisPointer:{},axisLine:{show:!0,onZero:!0,onZeroAxisIndex:null,lineStyle:{color:"#333",width:1,type:"solid"},symbol:["none","none"],symbolSize:[10,15]},axisTick:{show:!0,inside:!1,length:5,lineStyle:{width:1}},axisLabel:{show:!0,inside:!1,rotate:0,showMinLabel:null,showMaxLabel:null,margin:8,fontSize:12},splitLine:{show:!0,lineStyle:{color:["#ccc"],width:1,type:"solid"}},splitArea:{show:!1,areaStyle:{color:["rgba(250,250,250,0.3)","rgba(200,200,200,0.3)"]}}},yM={};yM.categoryAxis=n({boundaryGap:!0,splitLine:{show:!1},axisTick:{alignWithLabel:!1,interval:"auto"},axisLabel:{interval:"auto"}},vM),yM.valueAxis=n({boundaryGap:[0,0],splitNumber:5},vM),yM.timeAxis=r({scale:!0,min:"dataMin",max:"dataMax"},yM.valueAxis),yM.logAxis=r({scale:!0,logBase:10},yM.valueAxis);var xM=["value","category","time","log"],_M=function(t,e,i,a){d(xM,function(r){e.extend({type:t+"Axis."+r,mergeDefaultAndTheme:function(e,o){var a=this.layoutMode,s=a?ea(e):{};n(e,o.getTheme().get(r+"Axis")),n(e,this.getDefaultOption()),e.type=i(t,e),a&&ta(e,s,a)},defaultOption:o([{},yM[r+"Axis"],a],!0)})}),Ub.registerSubTypeDefaulter(t+"Axis",v(i,t))},bM=Ub.extend({type:"cartesian2dAxis",axis:null,init:function(){bM.superApply(this,"init",arguments),this.resetRange()},mergeOption:function(){bM.superApply(this,"mergeOption",arguments),this.resetRange()},restoreData:function(){bM.superApply(this,"restoreData",arguments),this.resetRange()},getCoordSysModel:function(){return this.ecModel.queryComponents({mainType:"grid",index:this.option.gridIndex,id:this.option.gridId})[0]}});n(bM.prototype,zS);var wM={offset:0};_M("x",bM,_s,wM),_M("y",bM,_s,wM),Ub.extend({type:"grid",dependencies:["xAxis","yAxis"],layoutMode:"box",coordinateSystem:null,defaultOption:{show:!1,zlevel:0,z:0,left:"10%",top:60,right:"10%",bottom:60,containLabel:!1,backgroundColor:"rgba(0,0,0,0)",borderWidth:1,borderColor:"#ccc"}});var SM=d,MM=function(t){var e=t.scale.getExtent(),i=e[0],n=e[1];return!(i>0&&n>0||i<0&&n<0)},IM=Nr,TM=Ms.prototype;TM.type="grid",TM.axisPointerEnabled=!0,TM.getRect=function(){return this._rect},TM.update=function(t,e){var i=this._axesMap;this._updateScale(t,this.model),SM(i.x,function(t){IM(t.scale,t.model)}),SM(i.y,function(t){IM(t.scale,t.model)}),SM(i.x,function(t){Is(i,"y",t)}),SM(i.y,function(t){Is(i,"x",t)}),this.resize(this.model,e)},TM.resize=function(t,e,i){function n(){SM(a,function(t){var e=t.isHorizontal(),i=e?[0,o.width]:[0,o.height],n=t.inverse?1:0;t.setExtent(i[n],i[1-n]),As(t,e?o.x:o.y)})}var o=Ko(t.getBoxLayoutParams(),{width:e.getWidth(),height:e.getHeight()});this._rect=o;var a=this._axesList;n(),!i&&t.get("containLabel")&&(SM(a,function(t){if(!t.model.get("axisLabel.inside")){var e=Ss(t);if(e){var i=t.isHorizontal()?"height":"width",n=t.model.get("axisLabel.margin");o[i]-=e[i]+n,"top"===t.position?o.y+=e.height+n:"left"===t.position&&(o.x+=e.width+n)}}}),n())},TM.getAxis=function(t,e){var i=this._axesMap[t];if(null!=i){if(null==e)for(var n in i)if(i.hasOwnProperty(n))return i[n];return i[e]}},TM.getAxes=function(){return this._axesList.slice()},TM.getCartesian=function(t,e){if(null!=t&&null!=e){var i="x"+t+"y"+e;return this._coordsMap[i]}b(t)&&(e=t.yAxisIndex,t=t.xAxisIndex);for(var n=0,o=this._coordsList;nh[1]?-1:1,c=["start"===o?h[0]-u*l:"end"===o?h[1]+u*l:(h[0]+h[1])/2,Es(o)?t.labelOffset+r*l:0],d=e.get("nameRotate");null!=d&&(d=d*CM/180);var f;Es(o)?n=kM(t.rotation,null!=d?d:t.rotation,r):(n=ks(t,o,d||0,h),null!=(f=t.axisNameAvailableWidth)&&(f=Math.abs(f/Math.sin(n.rotation)),!isFinite(f)&&(f=null)));var g=s.getFont(),p=e.get("nameTruncate",!0)||{},m=p.ellipsis,v=I(t.nameTruncateMaxWidth,p.maxWidth,f),y=null!=m&&null!=v?Zx(i,v,g,m,{minChar:2,placeholder:p.placeholder}):i,x=e.get("tooltip",!0),_=e.mainType,b={componentType:_,name:i,$vars:["name"]};b[_+"Index"]=e.componentIndex;var w=new ib({anid:"name",__fullText:i,__truncatedText:y,position:c,rotation:n.rotation,silent:Ps(e),z2:1,tooltip:x&&x.show?a({content:i,formatter:function(){return i},formatterParams:b},x):null});fo(w.style,s,{text:y,textFont:g,textFill:s.getTextColor()||e.get("axisLine.lineStyle.color"),textAlign:n.textAlign,textVerticalAlign:n.textVerticalAlign}),e.get("triggerEvent")&&(w.eventData=Ls(e),w.eventData.targetType="axisName",w.eventData.name=i),this._dumbGroup.add(w),w.updateTransform(),this.group.add(w),w.decomposeTransform()}}},kM=DM.innerTextLayout=function(t,e,i){var n,o,a=Li(e-t);return ki(a)?(o=i>0?"top":"bottom",n="center"):ki(a-CM)?(o=i>0?"bottom":"top",n="center"):(o="middle",n=a>0&&a0?"right":"left":i>0?"left":"right"),{rotation:a,textAlign:n,textVerticalAlign:o}},PM=DM.ifIgnoreOnTick=function(t,e,i,n,o,a){if(0===e&&o||e===n-1&&a)return!1;var r,s=t.scale;return"ordinal"===s.type&&("function"==typeof i?(r=s.getTicks()[e],!i(r,s.getLabel(r))):e%(i+1))},OM=DM.getInterval=function(t,e){var i=t.get("interval");return null!=i&&"auto"!=i||(i=e),i},zM=d,NM=v,EM=lr({type:"axis",_axisPointer:null,axisPointerClass:null,render:function(t,e,i,n){this.axisPointerClass&&Us(t),EM.superApply(this,"render",arguments),$s(this,t,0,i,0,!0)},updateAxisPointer:function(t,e,i,n,o){$s(this,t,0,i,0,!1)},remove:function(t,e){var i=this._axisPointer;i&&i.remove(e),EM.superApply(this,"remove",arguments)},dispose:function(t,e){Ks(this,e),EM.superApply(this,"dispose",arguments)}}),RM=[];EM.registerAxisPointerClass=function(t,e){RM[t]=e},EM.getAxisPointerClass=function(t){return t&&RM[t]};var VM=DM.ifIgnoreOnTick,BM=DM.getInterval,GM=["axisLine","axisTickLabel","axisName"],WM=["splitArea","splitLine"],HM=EM.extend({type:"cartesianAxis",axisPointerClass:"CartesianAxisPointer",render:function(t,e,i,n){this.group.removeAll();var o=this._axisGroup;if(this._axisGroup=new jy,this.group.add(this._axisGroup),t.get("show")){var a=t.getCoordSysModel(),r=Js(a,t),s=new DM(t,r);d(GM,s.add,s),this._axisGroup.add(s.getGroup()),d(WM,function(e){t.get(e+".show")&&this["_"+e](t,a,r.labelInterval)},this),Ao(o,this._axisGroup,t),HM.superCall(this,"render",t,e,i,n)}},_splitLine:function(t,e,i){var n=t.axis;if(!n.scale.isBlank()){var o=t.getModel("splitLine"),a=o.getModel("lineStyle"),s=a.get("color"),l=BM(o,i);s=y(s)?s:[s];for(var h=e.coordinateSystem.getRect(),u=n.isHorizontal(),c=0,d=n.getTicksCoords(),f=n.scale.getTicks(),g=t.get("axisLabel.showMinLabel"),p=t.get("axisLabel.showMaxLabel"),m=[],v=[],x=a.getLineStyle(),_=0;_1){var h;"string"==typeof i?h=fM[i]:"function"==typeof i&&(h=i),h&&(e=e.downSample(a.dim,1/l,h,gM),t.setData(e))}}},this)},"line"));var FM="__ec_stack_";nl.getLayoutOnAxis=function(t,e){var i=[],n=t.axis;if("category"===n.type){for(var o=n.getBandWidth(),a=0;a0?1:-1,r=n.height>0?1:-1;return{x:n.x+a*o/2,y:n.y+r*o/2,width:n.width-a*o,height:n.height-r*o}},polar:function(t,e,i){var n=t.getItemLayout(e);return{cx:n.cx,cy:n.cy,r0:n.r0,r:n.r,startAngle:n.startAngle,endAngle:n.endAngle}}};or(v(nl,"bar")),ar(function(t){t.eachSeriesByType("bar",function(t){t.getData().setVisual("legendSymbol","roundRect")})});var $M={updateSelectedMap:function(t){this._targetList=t.slice(),this._selectTargetMap=g(t||[],function(t,e){return t.set(e.name,e),t},z())},select:function(t,e){var i=null!=e?this._targetList[e]:this._selectTargetMap.get(t);"single"===this.get("selectedMode")&&this._selectTargetMap.each(function(t){t.selected=!1}),i&&(i.selected=!0)},unSelect:function(t,e){var i=null!=e?this._targetList[e]:this._selectTargetMap.get(t);i&&(i.selected=!1)},toggleSelected:function(t,e){var i=null!=e?this._targetList[e]:this._selectTargetMap.get(t);if(null!=i)return this[i.selected?"unSelect":"select"](t,e),i.selected},isSelected:function(t,e){var i=null!=e?this._targetList[e]:this._selectTargetMap.get(t);return i&&i.selected}},KM=hr({type:"series.pie",init:function(t){KM.superApply(this,"init",arguments),this.legendDataProvider=function(){return this.getRawData()},this.updateSelectedMap(t.data),this._defaultLabelLine(t)},mergeOption:function(t){KM.superCall(this,"mergeOption",t),this.updateSelectedMap(this.option.data)},getInitialData:function(t,e){var i=xr(["value"],t.data),n=new aS(i,this);return n.initData(t.data),n},getDataParams:function(t){var e=this.getData(),i=KM.superCall(this,"getDataParams",t),n=[];return e.each("value",function(t){n.push(t)}),i.percent=Di(n,t,e.hostModel.get("percentPrecision")),i.$vars.push("percent"),i},_defaultLabelLine:function(t){zo(t.labelLine,["show"]);var e=t.labelLine.normal,i=t.labelLine.emphasis;e.show=e.show&&t.label.normal.show,i.show=i.show&&t.label.emphasis.show},defaultOption:{zlevel:0,z:2,legendHoverLink:!0,hoverAnimation:!0,center:["50%","50%"],radius:[0,"75%"],clockwise:!0,startAngle:90,minAngle:0,selectedOffset:10,hoverOffset:10,avoidLabelOverlap:!0,percentPrecision:2,stillShowZeroSum:!0,label:{normal:{rotate:!1,show:!0,position:"outer"},emphasis:{}},labelLine:{normal:{show:!0,length:15,length2:15,smooth:!1,lineStyle:{width:1,type:"solid"}}},itemStyle:{normal:{borderWidth:1},emphasis:{}},animationType:"expansion",animationEasing:"cubicOut",data:[]}});u(KM,$M);var JM=dl.prototype;JM.updateData=function(t,e,i){function n(){s.stopAnimation(!0),s.animateTo({shape:{r:u.r+l.get("hoverOffset")}},300,"elasticOut")}function o(){s.stopAnimation(!0),s.animateTo({shape:{r:u.r}},300,"elasticOut")}var s=this.childAt(0),l=t.hostModel,h=t.getItemModel(e),u=t.getItemLayout(e),c=a({},u);c.label=null,i?(s.setShape(c),"scale"===l.getShallow("animationType")?(s.shape.r=u.r0,So(s,{shape:{r:u.r}},l,e)):(s.shape.endAngle=u.startAngle,wo(s,{shape:{endAngle:u.endAngle}},l,e))):wo(s,{shape:c},l,e);var d=h.getModel("itemStyle"),f=t.getItemVisual(e,"color");s.useStyle(r({lineJoin:"bevel",fill:f},d.getModel("normal").getItemStyle())),s.hoverStyle=d.getModel("emphasis").getItemStyle();var g=h.getShallow("cursor");g&&s.attr("cursor",g),cl(this,t.getItemLayout(e),h.get("selected"),l.get("selectedOffset"),l.get("animation")),s.off("mouseover").off("mouseout").off("emphasis").off("normal"),h.get("hoverAnimation")&&l.isAnimationEnabled()&&s.on("mouseover",n).on("mouseout",o).on("emphasis",n).on("normal",o),this._updateLabel(t,e),uo(this)},JM._updateLabel=function(t,e){var i=this.childAt(1),n=this.childAt(2),o=t.hostModel,a=t.getItemModel(e),r=t.getItemLayout(e).label,s=t.getItemVisual(e,"color");wo(i,{shape:{points:r.linePoints||[[r.x,r.y],[r.x,r.y],[r.x,r.y]]}},o,e),wo(n,{style:{x:r.x,y:r.y}},o,e),n.attr({rotation:r.rotation,origin:[r.x,r.y],z2:10});var l=a.getModel("label.normal"),h=a.getModel("label.emphasis"),u=a.getModel("labelLine.normal"),c=a.getModel("labelLine.emphasis"),s=t.getItemVisual(e,"color");co(n.style,n.hoverStyle={},l,h,{labelFetcher:t.hostModel,labelDataIndex:e,defaultText:t.getName(e),autoColor:s,useInsideStyle:!!r.inside},{textAlign:r.textAlign,textVerticalAlign:r.verticalAlign,opacity:t.getItemVisual(e,"opacity")}),n.ignore=n.normalIgnore=!l.get("show"),n.hoverIgnore=!h.get("show"),i.ignore=i.normalIgnore=!u.get("show"),i.hoverIgnore=!c.get("show"),i.setStyle({stroke:s,opacity:t.getItemVisual(e,"opacity")}),i.setStyle(u.getModel("lineStyle").getLineStyle()),i.hoverStyle=c.getModel("lineStyle").getLineStyle();var d=u.get("smooth");d&&!0===d&&(d=.4),i.setShape({smooth:d})},h(dl,jy);Ta.extend({type:"pie",init:function(){var t=new jy;this._sectorGroup=t},render:function(t,e,i,n){if(!n||n.from!==this.uid){var o=t.getData(),a=this._data,r=this.group,s=e.get("animation"),l=!a,h=t.get("animationType"),u=v(ul,this.uid,t,s,i),c=t.get("selectedMode");if(o.diff(a).add(function(t){var e=new dl(o,t);l&&"scale"!==h&&e.eachChild(function(t){t.stopAnimation(!0)}),c&&e.on("click",u),o.setItemGraphicEl(t,e),r.add(e)}).update(function(t,e){var i=a.getItemGraphicEl(e);i.updateData(o,t),i.off("click"),c&&i.on("click",u),r.add(i),o.setItemGraphicEl(t,i)}).remove(function(t){var e=a.getItemGraphicEl(t);r.remove(e)}).execute(),s&&l&&o.count()>0&&"scale"!==h){var d=o.getItemLayout(0),f=Math.max(i.getWidth(),i.getHeight())/2,g=m(r.removeClipPath,r);r.setClipPath(this._createClipPath(d.cx,d.cy,f,d.startAngle,d.clockwise,g,t))}this._data=o}},dispose:function(){},_createClipPath:function(t,e,i,n,o,a,r){var s=new rb({shape:{cx:t,cy:e,r0:0,r:i,startAngle:n,endAngle:n,clockwise:o}});return So(s,{shape:{endAngle:n+(o?1:-1)*Math.PI*2}},r,a),s},containPoint:function(t,e){var i=e.getData().getItemLayout(0);if(i){var n=t[0]-i.cx,o=t[1]-i.cy,a=Math.sqrt(n*n+o*o);return a<=i.r&&a>=i.r0}}});var QM=function(t,e){d(e,function(e){e.update="updateView",ir(e,function(i,n){var o={};return n.eachComponent({mainType:"series",subType:t,query:i},function(t){t[e.method]&&t[e.method](i.name,i.dataIndex);var n=t.getData();n.each(function(e){var i=n.getName(e);o[i]=t.isSelected(i)||!1})}),{name:i.name,selected:o}})})},tI=function(t,e){var i={};e.eachRawSeriesByType(t,function(t){var n=t.getRawData(),o={};if(!e.isSeriesFiltered(t)){var a=t.getData();a.each(function(t){var e=a.getRawIndex(t);o[e]=t}),n.each(function(e){var r=o[e],s=null!=r&&a.getItemVisual(r,"color",!0);if(s)n.setItemVisual(e,"color",s);else{var l=n.getItemModel(e).get("itemStyle.normal.color")||t.getColorFromPalette(n.getName(e),i);n.setItemVisual(e,"color",l),null!=r&&a.setItemVisual(r,"color",l)}})}})},eI=function(t,e,i,n){var o,a,r=t.getData(),s=[],l=!1;r.each(function(i){var n,h,u,c,d=r.getItemLayout(i),f=r.getItemModel(i),g=f.getModel("label.normal"),p=g.get("position")||f.get("label.emphasis.position"),m=f.getModel("labelLine.normal"),v=m.get("length"),y=m.get("length2"),x=(d.startAngle+d.endAngle)/2,_=Math.cos(x),b=Math.sin(x);o=d.cx,a=d.cy;var w="inside"===p||"inner"===p;if("center"===p)n=d.cx,h=d.cy,c="center";else{var S=(w?(d.r+d.r0)/2*_:d.r*_)+o,M=(w?(d.r+d.r0)/2*b:d.r*b)+a;if(n=S+3*_,h=M+3*b,!w){var I=S+_*(v+e-d.r),T=M+b*(v+e-d.r),A=I+(_<0?-1:1)*y,C=T;n=A+(_<0?-5:5),h=C,u=[[S,M],[I,T],[A,C]]}c=w?"center":_>0?"left":"right"}var D=g.getFont(),L=g.get("rotate")?_<0?-x+Math.PI:-x:0,k=de(t.getFormattedLabel(i,"normal")||r.getName(i),D,c,"top");l=!!L,d.label={x:n,y:h,position:p,height:k.height,len:v,len2:y,linePoints:u,textAlign:c,verticalAlign:"middle",rotation:L,inside:w},w||s.push(d.label)}),!l&&t.get("avoidLabelOverlap")&&gl(s,o,a,e,i,n)},iI=2*Math.PI,nI=Math.PI/180,oI=function(t,e){var i=e.findComponents({mainType:"legend"});i&&i.length&&e.eachSeriesByType(t,function(t){var e=t.getData();e.filterSelf(function(t){for(var n=e.getName(t),o=0;o=0;a--){var r=n[a],s=o[a],l=r[0]-s[0]/2,h=r[1]-s[1]/2;if(t>=l&&e>=h&&t<=l+s[0]&&e<=h+s[1])return a}return-1}}),rI=pl.prototype;rI.updateData=function(t){this.group.removeAll();var e=this._symbolEl,i=t.hostModel;e.setShape({points:t.mapArray(t.getItemLayout),sizes:t.mapArray(function(e){var i=t.getItemVisual(e,"symbolSize");return i instanceof Array||(i=[i,i]),i})}),e.symbolProxy=Hr(t.getVisual("symbol"),0,0,0,0),e.setColor=e.symbolProxy.setColor,e.useStyle(i.getModel("itemStyle.normal").getItemStyle(["color"]));var n=t.getVisual("color");n&&e.setColor(n),e.seriesIndex=i.seriesIndex,e.on("mousemove",function(t){e.dataIndex=null;var i=e.findDataIndex(t.offsetX,t.offsetY);i>=0&&(e.dataIndex=i)}),this.group.add(e)},rI.updateLayout=function(t){var e=t.getData();this._symbolEl.setShape({points:e.mapArray(e.getItemLayout)})},rI.remove=function(){this.group.removeAll()},ur({type:"scatter",init:function(){this._normalSymbolDraw=new ts,this._largeSymbolDraw=new pl},render:function(t,e,i){var n=t.getData(),o=this._largeSymbolDraw,a=this._normalSymbolDraw,r=this.group,s=t.get("large")&&n.count()>t.get("largeThreshold")?o:a;this._symbolDraw=s,s.updateData(n),r.add(s.group),r.remove(s===o?a.group:o.group)},updateLayout:function(t){this._symbolDraw.updateLayout(t)},remove:function(t,e){this._symbolDraw&&this._symbolDraw.remove(e,!0)},dispose:function(){}}),ar(v(cM,"scatter","circle",null)),or(v(dM,"scatter")),h(ml,US),vl.prototype.getIndicatorAxes=function(){return this._indicatorAxes},vl.prototype.dataToPoint=function(t,e){var i=this._indicatorAxes[e];return this.coordToPoint(i.dataToCoord(t),e)},vl.prototype.coordToPoint=function(t,e){var i=this._indicatorAxes[e].angle;return[this.cx+t*Math.cos(i),this.cy-t*Math.sin(i)]},vl.prototype.pointToData=function(t){var e=t[0]-this.cx,i=t[1]-this.cy,n=Math.sqrt(e*e+i*i);e/=n,i/=n;for(var o,a=Math.atan2(-i,e),r=1/0,s=-1,l=0;ln[0]&&isFinite(c)&&isFinite(n[0]))}else{r.getTicks().length-1>a&&(h=i(h));var d=Math.round((n[0]+n[1])/2/h)*h,f=Math.round(a/2);r.setExtent(Mi(d-f*h),Mi(d+(a-f)*h)),r.setInterval(h)}})},vl.dimensions=[],vl.create=function(t,e){var i=[];return t.eachComponent("radar",function(n){var o=new vl(n,t,e);i.push(o),n.coordinateSystem=o}),t.eachSeriesByType("radar",function(t){"radar"===t.get("coordinateSystem")&&(t.coordinateSystem=i[t.get("radarIndex")||0])}),i},ua.register("radar",vl);var sI=yM.valueAxis,lI=(sr({type:"radar",optionUpdated:function(){var t=this.get("boundaryGap"),e=this.get("splitNumber"),o=this.get("scale"),s=this.get("axisLine"),l=this.get("axisTick"),h=this.get("axisLabel"),u=this.get("name"),c=this.get("name.show"),d=this.get("name.formatter"),g=this.get("nameGap"),p=this.get("triggerEvent"),m=f(this.get("indicator")||[],function(f){null!=f.max&&f.max>0&&!f.min?f.min=0:null!=f.min&&f.min<0&&!f.max&&(f.max=0);var m=u;if(null!=f.color&&(m=r({color:f.color},u)),f=n(i(f),{boundaryGap:t,splitNumber:e,scale:o,axisLine:s,axisTick:l,axisLabel:h,name:f.text,nameLocation:"end",nameGap:g,nameTextStyle:m,triggerEvent:p},!1),c||(f.name=""),"string"==typeof d){var v=f.name;f.name=d.replace("{value}",null!=v?v:"")}else"function"==typeof d&&(f.name=d(f.name,f));var y=a(new Lo(f,null,this.ecModel),zS);return y.mainType="radar",y.componentIndex=this.componentIndex,y},this);this.getIndicatorModels=function(){return m}},defaultOption:{zlevel:0,z:0,center:["50%","50%"],radius:"75%",startAngle:90,name:{show:!0},boundaryGap:[0,0],splitNumber:5,nameGap:15,scale:!1,shape:"polygon",axisLine:n({lineStyle:{color:"#bbb"}},sI.axisLine),axisLabel:yl(sI.axisLabel,!1),axisTick:yl(sI.axisTick,!1),splitLine:yl(sI.splitLine,!0),splitArea:yl(sI.splitArea,!0),indicator:[]}}),["axisLine","axisTickLabel","axisName"]);lr({type:"radar",render:function(t,e,i){this.group.removeAll(),this._buildAxes(t),this._buildSplitLineAndArea(t)},_buildAxes:function(t){var e=t.coordinateSystem;d(f(e.getIndicatorAxes(),function(t){return new DM(t.model,{position:[e.cx,e.cy],rotation:t.angle,labelDirection:-1,tickDirection:-1,nameDirection:1})}),function(t){d(lI,t.add,t),this.group.add(t.getGroup())},this)},_buildSplitLineAndArea:function(t){function e(t,e,i){var n=i%e.length;return t[n]=t[n]||[],n}var i=t.coordinateSystem,n=i.getIndicatorAxes();if(n.length){var o=t.get("shape"),a=t.getModel("splitLine"),s=t.getModel("splitArea"),l=a.getModel("lineStyle"),h=s.getModel("areaStyle"),u=a.get("show"),c=s.get("show"),g=l.get("color"),p=h.get("color");g=y(g)?g:[g],p=y(p)?p:[p];var m=[],v=[];if("circle"===o)for(var x=n[0].getTicksCoords(),_=i.cx,b=i.cy,w=0;w"+f(i,function(t,i){return Gi(t.name+" : "+e[i])}).join("
")},defaultOption:{zlevel:0,z:2,coordinateSystem:"radar",legendHoverLink:!0,radarIndex:0,lineStyle:{normal:{width:2,type:"solid"}},label:{normal:{position:"top"}},symbol:"emptyCircle",symbolSize:4}});ur({type:"radar",render:function(t,e,n){function o(t,e){var i=t.getItemVisual(e,"symbol")||"circle",n=t.getItemVisual(e,"color");if("none"!==i){var o=xl(t.getItemVisual(e,"symbolSize")),a=Hr(i,-1,-1,2,2,n);return a.attr({style:{strokeNoScale:!0},z2:100,scale:[o[0]/2,o[1]/2]}),a}}function a(e,i,n,a,r,s){n.removeAll();for(var l=0;l"+Gi(n+" : "+i)},getTooltipPosition:function(t){if(null!=t){var e=this.getData().getName(t),i=this.coordinateSystem,n=i.getRegion(e);return n&&i.dataToPoint(n.center)}},setZoom:function(t){this.option.zoom=t},setCenter:function(t){this.option.center=t},defaultOption:{zlevel:0,z:2,coordinateSystem:"geo",map:"",left:"center",top:"center",aspectScale:.75,showLegendSymbol:!0,dataRangeHoverLink:!0,boundingCoords:null,center:null,zoom:1,scaleLimit:null,label:{normal:{show:!1,color:"#000"},emphasis:{show:!0,color:"rgb(100,0,0)"}},itemStyle:{normal:{borderWidth:.5,borderColor:"#444",areaColor:"#eee"},emphasis:{areaColor:"rgba(255,215,0,0.8)"}}}});u(_I,$M);var bI="\0_ec_interaction_mutex";ir({type:"takeGlobalCursor",event:"globalCursorTaken",update:"update"},function(){}),u(kl,fy);var wI={axisPointer:1,tooltip:1,brush:1};Ul.prototype={constructor:Ul,draw:function(t,e,i,n,o){var a="geo"===t.mainType,r=t.getData&&t.getData();a&&e.eachComponent({mainType:"series",subType:"map"},function(e){r||e.getHostGeoModel()!==t||(r=e.getData())});var s=t.coordinateSystem,l=this.group,h=s.scale,u={position:s.position,scale:h};!l.childAt(0)||o?l.attr(u):wo(l,u,t),l.removeAll();var c=["itemStyle","normal"],f=["itemStyle","emphasis"],g=["label","normal"],p=["label","emphasis"],m=z();d(s.regions,function(e){var i=m.get(e.name)||m.set(e.name,new jy),n=new vb({shape:{paths:[]}});i.add(n);var o,s=(D=t.getRegionModel(e.name)||t).getModel(c),u=D.getModel(f),v=Hl(s),y=Hl(u),x=D.getModel(g),_=D.getModel(p);if(r){o=r.indexOfName(e.name);var b=r.getItemVisual(o,"color",!0);b&&(v.fill=b)}d(e.geometries,function(t){if("polygon"===t.type){n.shape.paths.push(new ub({shape:{points:t.exterior}}));for(var e=0;e<(t.interiors?t.interiors.length:0);e++)n.shape.paths.push(new ub({shape:{points:t.interiors[e]}}))}}),n.setStyle(v),n.style.strokeNoScale=!0,n.culling=!0;var w=x.get("show"),S=_.get("show"),M=r&&isNaN(r.get("value",o)),I=r&&r.getItemLayout(o);if(a||M&&(w||S)||I&&I.showLabel){var T,A=a?e.name:o;(!r||o>=0)&&(T=t);var C=new ib({position:e.center.slice(),scale:[1/h[0],1/h[1]],z2:10,silent:!0});co(C.style,C.hoverStyle={},x,_,{labelFetcher:T,labelDataIndex:A,defaultText:e.name,useInsideStyle:!1},{textAlign:"center",textVerticalAlign:"middle"}),i.add(C)}if(r)r.setItemGraphicEl(o,i);else{var D=t.getRegionModel(e.name);n.eventData={componentType:"geo",geoIndex:t.componentIndex,name:e.name,region:D&&D.option||{}}}(i.__regions||(i.__regions=[])).push(e),uo(i,y,{hoverSilentOnTouch:!!t.get("selectedMode")}),l.add(i)}),this._updateController(t,e,i),Fl(this,t,l,i,n),Zl(t,l)},remove:function(){this.group.removeAll(),this._controller.dispose(),this._controllerHost={}},_updateController:function(t,e,i){function n(){var e={type:"geoRoam",componentType:l};return e[l+"Id"]=t.id,e}var o=t.coordinateSystem,r=this._controller,s=this._controllerHost;s.zoomLimit=t.get("scaleLimit"),s.zoom=o.getZoom(),r.enable(t.get("roam")||!1);var l=t.mainType;r.off("pan").on("pan",function(t,e){this._mouseDownFlag=!1,Bl(s,t,e),i.dispatchAction(a(n(),{dx:t,dy:e}))},this),r.off("zoom").on("zoom",function(t,e,o){if(this._mouseDownFlag=!1,Gl(s,t,e,o),i.dispatchAction(a(n(),{zoom:t,originX:e,originY:o})),this._updateGroup){var r=this.group,l=r.scale;r.traverse(function(t){"text"===t.type&&t.attr("scale",[1/l[0],1/l[1]])})}},this),r.setPointerChecker(function(e,n,a){return o.getViewRectAfterRoam().contain(n,a)&&!Wl(e,i,t)})}},ur({type:"map",render:function(t,e,i,n){if(!n||"mapToggleSelect"!==n.type||n.from!==this.uid){var o=this.group;if(o.removeAll(),!t.getHostGeoModel()){if(n&&"geoRoam"===n.type&&"series"===n.componentType&&n.seriesId===t.id)(a=this._mapDraw)&&o.add(a.group);else if(t.needsDrawMap){var a=this._mapDraw||new Ul(i,!0);o.add(a.group),a.draw(t,e,i,this,n),this._mapDraw=a}else this._mapDraw&&this._mapDraw.remove(),this._mapDraw=null;t.get("showLegendSymbol")&&e.getComponent("legend")&&this._renderSymbols(t,e,i)}}},remove:function(){this._mapDraw&&this._mapDraw.remove(),this._mapDraw=null,this.group.removeAll()},dispose:function(){this._mapDraw&&this._mapDraw.remove(),this._mapDraw=null},_renderSymbols:function(t,e,i){var n=t.originalData,o=this.group;n.each("value",function(e,i){if(!isNaN(e)){var a=n.getItemLayout(i);if(a&&a.point){var r=a.point,s=a.offset,l=new nb({style:{fill:t.getData().getVisual("color")},shape:{cx:r[0]+9*s,cy:r[1],r:3},silent:!0,z2:s?8:10});if(!s){var h=t.mainSeries.getData(),u=n.getName(i),c=h.indexOfName(u),d=n.getItemModel(i),f=d.getModel("label.normal"),g=d.getModel("label.emphasis"),p=h.getItemGraphicEl(c),m=T(t.getFormattedLabel(i,"normal"),u),v=T(t.getFormattedLabel(i,"emphasis"),m),y=function(){var t=fo({},g,{text:g.get("show")?v:null},{isRectText:!0,useInsideStyle:!1},!0);l.style.extendFrom(t),l.__mapOriginalZ2=l.z2,l.z2+=1},x=function(){fo(l.style,f,{text:f.get("show")?m:null,textPosition:f.getShallow("position")||"bottom"},{isRectText:!0,useInsideStyle:!1}),null!=l.__mapOriginalZ2&&(l.z2=l.__mapOriginalZ2,l.__mapOriginalZ2=null)};p.on("mouseover",y).on("mouseout",x).on("emphasis",y).on("normal",x),x()}o.add(l)}}})}}),ir({type:"geoRoam",event:"geoRoam",update:"updateLayout"},function(t,e){var i=t.componentType||"series";e.eachComponent({mainType:i,query:t},function(e){var n=e.coordinateSystem;if("geo"===n.type){var o=Xl(n,t,e.get("scaleLimit"));e.setCenter&&e.setCenter(o.center),e.setZoom&&e.setZoom(o.zoom),"series"===i&&d(e.seriesGroup,function(t){t.setCenter(o.center),t.setZoom(o.zoom)})}})});or(function(t){var e={};t.eachSeriesByType("map",function(i){var n=i.getMapType();if(!i.getHostGeoModel()&&!e[n]){var o={};d(i.seriesGroup,function(e){var i=e.coordinateSystem,n=e.originalData;e.get("showLegendSymbol")&&t.getComponent("legend")&&n.each("value",function(t,e){var a=n.getName(e),r=i.getRegion(a);if(r&&!isNaN(t)){var s=o[a]||0,l=i.dataToPoint(r.center);o[a]=s+1,n.setItemLayout(e,{point:l,offset:s})}})});var a=i.getData();a.each(function(t){var e=a.getName(t),i=a.getItemLayout(t)||{};i.showLabel=!o[e],a.setItemLayout(t,i)}),e[n]=!0}})}),ar(function(t){t.eachSeriesByType("map",function(t){var e=t.get("color"),i=t.getModel("itemStyle.normal"),n=i.get("areaColor"),o=i.get("color")||e[t.seriesIndex%e.length];t.getData().setVisual({areaColor:n,color:o})})}),er(Pw.PROCESSOR.STATISTIC,function(t){var e={};t.eachSeriesByType("map",function(t){var i=t.getHostGeoModel(),n=i?"o"+i.id:"i"+t.getMapType();(e[n]=e[n]||[]).push(t)}),d(e,function(t,e){for(var i=jl(f(t,function(t){return t.getData()}),t[0].get("mapValueCalculation")),n=0;ne&&(e=n.height)}this.height=e+1},getNodeById:function(t){if(this.getId()===t)return this;for(var e=0,i=this.children,n=i.length;e=0&&this.hostTree.data.setItemLayout(this.dataIndex,t,e)},getLayout:function(){return this.hostTree.data.getItemLayout(this.dataIndex)},getModel:function(t){if(!(this.dataIndex<0)){var e,i=this.hostTree,n=i.data.getItemModel(this.dataIndex),o=this.getLevelModel();return o||0!==this.children.length&&(0===this.children.length||!1!==this.isExpand)||(e=this.getLeavesModel()),n.getModel(t,(o||e||i.hostModel).getModel(t))}},getLevelModel:function(){return(this.hostTree.levelModels||[])[this.depth]},getLeavesModel:function(){return this.hostTree.leavesModel},setVisual:function(t,e){this.dataIndex>=0&&this.hostTree.data.setItemVisual(this.dataIndex,t,e)},getVisual:function(t,e){return this.hostTree.data.getItemVisual(this.dataIndex,t,e)},getRawIndex:function(){return this.hostTree.data.getRawIndex(this.dataIndex)},getId:function(){return this.hostTree.data.getId(this.dataIndex)}},ih.prototype={constructor:ih,type:"tree",eachNode:function(t,e,i){this.root.eachNode(t,e,i)},getNodeByDataIndex:function(t){var e=this.data.getRawIndex(t);return this._nodes[e]},getNodeByName:function(t){return this.root.getNodeByName(t)},update:function(){for(var t=this.data,e=this._nodes,i=0,n=e.length;ia&&(a=t.depth)});var r=t.expandAndCollapse&&t.initialTreeDepth>=0?t.initialTreeDepth:a;return o.root.eachNode("preorder",function(t){var e=t.hostTree.data.getRawDataItem(t.dataIndex);t.isExpand=e&&null!=e.collapsed?!e.collapsed:t.depth<=r}),o.data},formatTooltip:function(t){for(var e=this.getData().tree,i=e.root.children[0],n=e.getNodeByDataIndex(t),o=n.getValue(),a=n.name;n&&n!==i;)a=n.parentNode.name+"."+a,n=n.parentNode;return Gi(a+(isNaN(o)||null==o?"":" : "+o))},defaultOption:{zlevel:0,z:2,left:"12%",top:"12%",right:"12%",bottom:"12%",layout:"orthogonal",orient:"horizontal",symbol:"emptyCircle",symbolSize:7,expandAndCollapse:!0,initialTreeDepth:2,lineStyle:{normal:{color:"#ccc",width:1.5,curveness:.5}},itemStyle:{normal:{color:"lightsteelblue",borderColor:"#c23531",borderWidth:1.5}},label:{normal:{show:!0,color:"#555"}},leaves:{label:{normal:{show:!0}}},animationEasing:"linear",animationDuration:700,animationDurationUpdate:1e3}}),ur({type:"tree",init:function(t,e){this._oldTree,this._mainGroup=new jy,this.group.add(this._mainGroup)},render:function(t,e,i,n){var o=t.getData(),a=t.layoutInfo,r=this._mainGroup,s=t.get("layout");"radial"===s?r.attr("position",[a.x+a.width/2,a.y+a.height/2]):r.attr("position",[a.x,a.y]);var l=this._data,h={expandAndCollapse:t.get("expandAndCollapse"),layout:s,orient:t.get("orient"),curvature:t.get("lineStyle.normal.curveness"),symbolRotate:t.get("symbolRotate"),symbolOffset:t.get("symbolOffset"),hoverAnimation:t.get("hoverAnimation"),useNameLabel:!0,fadeIn:!0};o.diff(l).add(function(e){vh(o,e)&&xh(o,e,null,r,t,h)}).update(function(e,i){var n=l.getItemGraphicEl(i);vh(o,e)?xh(o,e,n,r,t,h):n&&_h(o,e,n,r,t,h)}).remove(function(e){var i=l.getItemGraphicEl(e);_h(o,e,i,r,t,h)}).execute(),!0===h.expandAndCollapse&&o.eachItemGraphicEl(function(e,n){e.off("click").on("click",function(){i.dispatchAction({type:"treeExpandAndCollapse",seriesId:t.id,dataIndex:n})})}),this._data=o},dispose:function(){},remove:function(){this._mainGroup.removeAll(),this._data=null}}),ir({type:"treeExpandAndCollapse",event:"treeExpandAndCollapse",update:"update"},function(t,e){e.eachComponent({mainType:"series",subType:"tree",query:t},function(e){var i=t.dataIndex,n=e.getData().tree.getNodeByDataIndex(i);n.isExpand=!n.isExpand})});var AI=function(t,e){var i=hh(t,e);t.layoutInfo=i;var n=t.get("layout"),o=0,a=0,r=null;"radial"===n?(o=2*Math.PI,a=Math.min(i.height,i.width)/2,r=sh(function(t,e){return(t.parentNode===e.parentNode?1:2)/t.depth})):(o=i.width,a=i.height,r=sh());var s=t.getData().tree.root,l=s.children[0];oh(s),wh(l,ah,r),s.hierNode.modifier=-l.hierNode.prelim,Sh(l,rh);var h=l,u=l,c=l;Sh(l,function(t){var e=t.getLayout().x;eu.getLayout().x&&(u=t),t.depth>c.depth&&(c=t)});var d=h===u?1:r(h,u)/2,f=d-h.getLayout().x,g=0,p=0,m=0,v=0;"radial"===n?(g=o/(u.getLayout().x+d+f),p=a/(c.depth-1||1),Sh(l,function(t){m=(t.getLayout().x+f)*g,v=(t.depth-1)*p;var e=lh(m,v);t.setLayout({x:e.x,y:e.y,rawX:m,rawY:v},!0)})):"horizontal"===t.get("orient")?(p=a/(u.getLayout().x+d+f),g=o/(c.depth-1||1),Sh(l,function(t){v=(t.getLayout().x+f)*p,m=(t.depth-1)*g,t.setLayout({x:m,y:v},!0)})):(g=o/(u.getLayout().x+d+f),p=a/(c.depth-1||1),Sh(l,function(t){m=(t.getLayout().x+f)*g,v=(t.depth-1)*p,t.setLayout({x:m,y:v},!0)}))};ar(v(cM,"tree","circle",null)),or(function(t,e){t.eachSeriesByType("tree",function(t){AI(t,e)})}),or(function(t,e){t.eachSeriesByType("tree",function(t){AI(t,e)})}),yw.extend({type:"series.treemap",layoutMode:"box",dependencies:["grid","polar"],_viewRoot:null,defaultOption:{progressive:0,hoverLayerThreshold:1/0,left:"center",top:"middle",right:null,bottom:null,width:"80%",height:"80%",sort:!0,clipWindow:"origin",squareRatio:.5*(1+Math.sqrt(5)),leafDepth:null,drillDownIcon:"▶",zoomToNodeRatio:.1024,roam:!0,nodeClick:"zoomToNode",animation:!0,animationDurationUpdate:900,animationEasing:"quinticInOut",breadcrumb:{show:!0,height:22,left:"center",top:"bottom",emptyItemWidth:25,itemStyle:{normal:{color:"rgba(0,0,0,0.7)",borderColor:"rgba(255,255,255,0.7)",borderWidth:1,shadowColor:"rgba(150,150,150,1)",shadowBlur:3,shadowOffsetX:0,shadowOffsetY:0,textStyle:{color:"#fff"}},emphasis:{textStyle:{}}}},label:{normal:{show:!0,distance:0,padding:5,position:"inside",color:"#fff",ellipsis:!0}},upperLabel:{normal:{show:!1,position:[0,"50%"],height:20,color:"#fff",ellipsis:!0,verticalAlign:"middle"},emphasis:{show:!0,position:[0,"50%"],color:"#fff",ellipsis:!0,verticalAlign:"middle"}},itemStyle:{normal:{color:null,colorAlpha:null,colorSaturation:null,borderWidth:0,gapWidth:0,borderColor:"#fff",borderColorSaturation:null},emphasis:{}},visualDimension:0,visualMin:null,visualMax:null,color:[],colorAlpha:null,colorSaturation:null,colorMappingBy:"index",visibleMin:10,childrenVisibleMin:null,levels:[]},getInitialData:function(t,e){var i={name:t.name,children:t.data};Ch(i);var n=t.levels||[];n=t.levels=Dh(n,e);var o={};return o.levels=n,ih.createTree(i,this,o).data},optionUpdated:function(){this.resetViewRoot()},formatTooltip:function(t){var e=this.getData(),i=this.getRawValue(t),n=Vi(y(i)?i[0]:i);return Gi(e.getName(t)+": "+n)},getDataParams:function(t){var e=yw.prototype.getDataParams.apply(this,arguments),i=this.getData().tree.getNodeByDataIndex(t);return e.treePathInfo=Ah(i,this),e},setLayoutInfo:function(t){this.layoutInfo=this.layoutInfo||{},a(this.layoutInfo,t)},mapIdToIndex:function(t){var e=this._idIndexMap;e||(e=this._idIndexMap=z(),this._idIndexMapCount=0);var i=e.get(t);return null==i&&e.set(t,i=this._idIndexMapCount++),i},getViewRoot:function(){return this._viewRoot},resetViewRoot:function(t){t?this._viewRoot=t:t=this._viewRoot;var e=this.getData().tree.root;t&&(t===e||e.contains(t))||(this._viewRoot=e)}});var CI=5;Lh.prototype={constructor:Lh,render:function(t,e,i,n){var o=t.getModel("breadcrumb"),a=this.group;if(a.removeAll(),o.get("show")&&i){var r=o.getModel("itemStyle.normal"),s=r.getModel("textStyle"),l={pos:{left:o.get("left"),right:o.get("right"),top:o.get("top"),bottom:o.get("bottom")},box:{width:e.getWidth(),height:e.getHeight()},emptyItemWidth:o.get("emptyItemWidth"),totalWidth:0,renderList:[]};this._prepare(i,l,s),this._renderContent(t,l,r,s,n),Jo(a,l.pos,l.box)}},_prepare:function(t,e,i){for(var n=t;n;n=n.parentNode){var o=n.getModel().get("name"),a=i.getTextRect(o),r=Math.max(a.width+16,e.emptyItemWidth);e.totalWidth+=r+8,e.renderList.push({node:n,text:o,width:r})}},_renderContent:function(t,e,i,n,o){for(var a=0,s=e.emptyItemWidth,l=t.get("breadcrumb.height"),h=$o(e.pos,e.box),u=e.totalWidth,c=e.renderList,d=c.length-1;d>=0;d--){var f=c[d],g=f.node,p=f.width,m=f.text;u>h.width&&(u-=p-s,p=s,m=null);var y=new ub({shape:{points:kh(a,0,p,l,d===c.length-1,0===d)},style:r(i.getItemStyle(),{lineJoin:"bevel",text:m,textFill:n.getTextColor(),textFont:n.getFont()}),z:10,onclick:v(o,g)});this.group.add(y),Ph(y,t,g),a+=p+8}},remove:function(){this.group.removeAll()}};var DI=m,LI=jy,kI=db,PI=d,OI=["label","normal"],zI=["label","emphasis"],NI=["upperLabel","normal"],EI=["upperLabel","emphasis"],RI=10,VI=1,BI=2,GI=$x([["fill","color"],["stroke","strokeColor"],["lineWidth","strokeWidth"],["shadowBlur"],["shadowOffsetX"],["shadowOffsetY"],["shadowColor"]]),WI=function(t){var e=GI(t);return e.stroke=e.fill=e.lineWidth=null,e};ur({type:"treemap",init:function(t,e){this._containerGroup,this._storage={nodeGroup:[],background:[],content:[]},this._oldTree,this._breadcrumb,this._controller,this._state="ready"},render:function(t,e,i,n){if(!(l(e.findComponents({mainType:"series",subType:"treemap",query:n}),t)<0)){this.seriesModel=t,this.api=i,this.ecModel=e;var o=Mh(n,t),a=n&&n.type,r=t.layoutInfo,s=!this._oldTree,h=this._storage,u="treemapRootToNode"===a&&o&&h?{rootNodeGroup:h.nodeGroup[o.node.getRawIndex()],direction:n.direction}:null,c=this._giveContainerGroup(r),d=this._doRender(c,t,u);s||a&&"treemapZoomToNode"!==a&&"treemapRootToNode"!==a?d.renderFinally():this._doAnimation(c,d,t,u),this._resetController(i),this._renderBreadcrumb(t,i,o)}},_giveContainerGroup:function(t){var e=this._containerGroup;return e||(e=this._containerGroup=new LI,this._initEvents(e),this.group.add(e)),e.attr("position",[t.x,t.y]),e},_doRender:function(t,e,i){function n(t,e,i,o,a){function r(t){return t.getId()}function s(r,s){var l=null!=r?t[r]:null,h=null!=s?e[s]:null,c=u(l,h,i,a);c&&n(l&&l.viewChildren||[],h&&h.viewChildren||[],c,o,a+1)}o?(e=t,PI(t,function(t,e){!t.isRemoved()&&s(e,e)})):new fr(e,t,r,r).add(s).update(s).remove(v(s,null)).execute()}var o=e.getData().tree,a=this._oldTree,r={nodeGroup:[],background:[],content:[]},s={nodeGroup:[],background:[],content:[]},l=this._storage,h=[],u=v(zh,e,s,l,i,r,h);n(o.root?[o.root]:[],a&&a.root?[a.root]:[],t,o===a||!a,0);var c=function(t){var e={nodeGroup:[],background:[],content:[]};return t&&PI(t,function(t,i){var n=e[i];PI(t,function(t){t&&(n.push(t),t.__tmWillDelete=1)})}),e}(l);return this._oldTree=o,this._storage=s,{lastsForAnimation:r,willDeleteEls:c,renderFinally:function(){PI(c,function(t){PI(t,function(t){t.parent&&t.parent.remove(t)})}),PI(h,function(t){t.invisible=!0,t.dirty()})}}},_doAnimation:function(t,e,i,n){if(i.get("animation")){var o=i.get("animationDurationUpdate"),r=i.get("animationEasing"),s=Oh();PI(e.willDeleteEls,function(t,e){PI(t,function(t,i){if(!t.invisible){var a,l=t.parent;if(n&&"drillDown"===n.direction)a=l===n.rootNodeGroup?{shape:{x:0,y:0,width:l.__tmNodeWidth,height:l.__tmNodeHeight},style:{opacity:0}}:{style:{opacity:0}};else{var h=0,u=0;l.__tmWillDelete||(h=l.__tmNodeWidth/2,u=l.__tmNodeHeight/2),a="nodeGroup"===e?{position:[h,u],style:{opacity:0}}:{shape:{x:h,y:u,width:0,height:0},style:{opacity:0}}}a&&s.add(t,a,o,r)}})}),PI(this._storage,function(t,i){PI(t,function(t,n){var l=e.lastsForAnimation[i][n],h={};l&&("nodeGroup"===i?l.old&&(h.position=t.position.slice(),t.attr("position",l.old)):(l.old&&(h.shape=a({},t.shape),t.setShape(l.old)),l.fadein?(t.setStyle("opacity",0),h.style={opacity:1}):1!==t.style.opacity&&(h.style={opacity:1})),s.add(t,h,o,r))})},this),this._state="animating",s.done(DI(function(){this._state="ready",e.renderFinally()},this)).start()}},_resetController:function(t){var e=this._controller;e||((e=this._controller=new kl(t.getZr())).enable(this.seriesModel.get("roam")),e.on("pan",DI(this._onPan,this)),e.on("zoom",DI(this._onZoom,this)));var i=new jt(0,0,t.getWidth(),t.getHeight());e.setPointerChecker(function(t,e,n){return i.contain(e,n)})},_clearController:function(){var t=this._controller;t&&(t.dispose(),t=null)},_onPan:function(t,e){if("animating"!==this._state&&(Math.abs(t)>3||Math.abs(e)>3)){var i=this.seriesModel.getData().tree.root;if(!i)return;var n=i.getLayout();if(!n)return;this.api.dispatchAction({type:"treemapMove",from:this.uid,seriesId:this.seriesModel.id,rootRect:{x:n.x+t,y:n.y+e,width:n.width,height:n.height}})}},_onZoom:function(t,e,i){if("animating"!==this._state){var n=this.seriesModel.getData().tree.root;if(!n)return;var o=n.getLayout();if(!o)return;var a=new jt(o.x,o.y,o.width,o.height),r=this.seriesModel.layoutInfo;e-=r.x,i-=r.y;var s=ot();lt(s,s,[-e,-i]),ut(s,s,[t,t]),lt(s,s,[e,i]),a.applyTransform(s),this.api.dispatchAction({type:"treemapRender",from:this.uid,seriesId:this.seriesModel.id,rootRect:{x:a.x,y:a.y,width:a.width,height:a.height}})}},_initEvents:function(t){t.on("click",function(t){if("ready"===this._state){var e=this.seriesModel.get("nodeClick",!0);if(e){var i=this.findTarget(t.offsetX,t.offsetY);if(i){var n=i.node;if(n.getLayout().isLeafRoot)this._rootToNode(i);else if("zoomToNode"===e)this._zoomToNode(i);else if("link"===e){var o=n.hostTree.data.getItemModel(n.dataIndex),a=o.get("link",!0),r=o.get("target",!0)||"blank";a&&window.open(a,r)}}}}},this)},_renderBreadcrumb:function(t,e,i){i||(i=null!=t.get("leafDepth",!0)?{node:t.getViewRoot()}:this.findTarget(e.getWidth()/2,e.getHeight()/2))||(i={node:t.getData().tree.root}),(this._breadcrumb||(this._breadcrumb=new Lh(this.group))).render(t,e,i.node,DI(function(e){"animating"!==this._state&&(Th(t.getViewRoot(),e)?this._rootToNode({node:e}):this._zoomToNode({node:e}))},this))},remove:function(){this._clearController(),this._containerGroup&&this._containerGroup.removeAll(),this._storage={nodeGroup:[],background:[],content:[]},this._state="ready",this._breadcrumb&&this._breadcrumb.remove()},dispose:function(){this._clearController()},_zoomToNode:function(t){this.api.dispatchAction({type:"treemapZoomToNode",from:this.uid,seriesId:this.seriesModel.id,targetNode:t.node})},_rootToNode:function(t){this.api.dispatchAction({type:"treemapRootToNode",from:this.uid,seriesId:this.seriesModel.id,targetNode:t.node})},findTarget:function(t,e){var i;return this.seriesModel.getViewRoot().eachNode({attr:"viewChildren",order:"preorder"},function(n){var o=this._storage.background[n.getRawIndex()];if(o){var a=o.transformCoordToLocal(t,e),r=o.shape;if(!(r.x<=a[0]&&a[0]<=r.x+r.width&&r.y<=a[1]&&a[1]<=r.y+r.height))return!1;i={node:n,offsetX:a[0],offsetY:a[1]}}},this),i}});for(var HI=["treemapZoomToNode","treemapRender","treemapMove"],FI=0;FI=0&&t.call(e,i[o],o)},sT.eachEdge=function(t,e){for(var i=this.edges,n=i.length,o=0;o=0&&i[o].node1.dataIndex>=0&&i[o].node2.dataIndex>=0&&t.call(e,i[o],o)},sT.breadthFirstTraverse=function(t,e,i,n){if(e instanceof gu||(e=this._nodesMap[fu(e)]),e){for(var o="out"===i?"outEdges":"in"===i?"inEdges":"edges",a=0;a=0&&i.node2.dataIndex>=0});for(var o=0,a=n.length;o=0&&this[t][e].setItemVisual(this.dataIndex,i,n)},getVisual:function(i,n){return this[t][e].getItemVisual(this.dataIndex,i,n)},setLayout:function(i,n){this.dataIndex>=0&&this[t][e].setItemLayout(this.dataIndex,i,n)},getLayout:function(){return this[t][e].getItemLayout(this.dataIndex)},getGraphicEl:function(){return this[t][e].getItemGraphicEl(this.dataIndex)},getRawIndex:function(){return this[t][e].getRawIndex(this.dataIndex)}}};u(gu,lT("hostGraph","data")),u(pu,lT("hostGraph","edgeData")),rT.Node=gu,rT.Edge=pu;var hT=function(t,e,i,n,o){for(var a=new rT(n),r=0;r "+d)),h++)}var f,g=i.get("coordinateSystem");if("cartesian2d"===g||"polar"===g)f=Sr(t,i,i.ecModel);else{var p=ua.get(g),m=xr((p&&"view"!==p.type?p.dimensions||[]:[]).concat(["value"]),t);(f=new aS(m,i)).initData(t)}var v=new aS(["value"],i);return v.initData(l,s),o&&o(f,v),ql({mainData:f,struct:a,structAttr:"graph",datas:{node:f,edge:v},datasAttr:{node:"data",edge:"edgeData"}}),a.update(),a},uT=hr({type:"series.graph",init:function(t){uT.superApply(this,"init",arguments),this.legendDataProvider=function(){return this._categoriesData},this.fillDataTextStyle(t.edges||t.links),this._updateCategoriesData()},mergeOption:function(t){uT.superApply(this,"mergeOption",arguments),this.fillDataTextStyle(t.edges||t.links),this._updateCategoriesData()},mergeDefaultAndTheme:function(t){uT.superApply(this,"mergeDefaultAndTheme",arguments),zo(t.edgeLabel,["show"])},getInitialData:function(t,e){var i=t.edges||t.links||[],n=t.data||t.nodes||[],o=this;if(n&&i)return hT(n,i,this,!0,function(t,i){function n(t){return(t=this.parsePath(t))&&"label"===t[0]?r:this.parentModel}t.wrapMethod("getItemModel",function(t){var e=o._categoriesModels[t.getShallow("category")];return e&&(e.parentModel=t.parentModel,t.parentModel=e),t});var a=o.getModel("edgeLabel"),r=new Lo({label:a.option},a.parentModel,e);i.wrapMethod("getItemModel",function(t){return t.customizeGetParent(n),t})}).data},getGraph:function(){return this.getData().graph},getEdgeData:function(){return this.getGraph().edgeData},getCategoriesData:function(){return this._categoriesData},formatTooltip:function(t,e,i){if("edge"===i){var n=this.getData(),o=this.getDataParams(t,i),a=n.graph.getEdgeByIndex(t),r=n.getName(a.node1.dataIndex),s=n.getName(a.node2.dataIndex),l=[];return null!=r&&l.push(r),null!=s&&l.push(s),l=Gi(l.join(" > ")),o.value&&(l+=" : "+Gi(o.value)),l}return uT.superApply(this,"formatTooltip",arguments)},_updateCategoriesData:function(){var t=f(this.option.categories||[],function(t){return null!=t.value?t:a({value:0},t)}),e=new aS(["value"],this);e.initData(t),this._categoriesData=e,this._categoriesModels=e.mapArray(function(t){return e.getItemModel(t,!0)})},setZoom:function(t){this.option.zoom=t},setCenter:function(t){this.option.center=t},isAnimationEnabled:function(){return uT.superCall(this,"isAnimationEnabled")&&!("force"===this.get("layout")&&this.get("force.layoutAnimation"))},defaultOption:{zlevel:0,z:2,coordinateSystem:"view",legendHoverLink:!0,hoverAnimation:!0,layout:null,focusNodeAdjacency:!1,circular:{rotateLabel:!1},force:{initLayout:null,repulsion:[0,50],gravity:.1,edgeLength:30,layoutAnimation:!0},left:"center",top:"center",symbol:"circle",symbolSize:10,edgeSymbol:["none","none"],edgeSymbolSize:10,edgeLabel:{normal:{position:"middle"},emphasis:{}},draggable:!1,roam:!1,center:null,zoom:1,nodeScaleRatio:.6,label:{normal:{show:!1,formatter:"{b}"},emphasis:{show:!0}},itemStyle:{normal:{},emphasis:{}},lineStyle:{normal:{color:"#aaa",width:1,curveness:0,opacity:.5},emphasis:{}}}}),cT=fb.prototype,dT=pb.prototype,fT=Zn({type:"ec-line",style:{stroke:"#000",fill:null},shape:{x1:0,y1:0,x2:0,y2:0,percent:1,cpx1:null,cpy1:null},buildPath:function(t,e){(mu(e)?cT:dT).buildPath(t,e)},pointAt:function(t){return mu(this.shape)?cT.pointAt.call(this,t):dT.pointAt.call(this,t)},tangentAt:function(t){var e=this.shape,i=mu(e)?[e.x2-e.x1,e.y2-e.y1]:dT.tangentAt.call(this,t);return X(i,i)}}),gT=["fromSymbol","toSymbol"],pT=bu.prototype;pT.beforeUpdate=function(){var t=this,e=t.childOfName("fromSymbol"),i=t.childOfName("toSymbol"),n=t.childOfName("label");if(e||i||!n.ignore){for(var o=1,a=this.parent;a;)a.scale&&(o/=a.scale[0]),a=a.parent;var r=t.childOfName("line");if(this.__dirty||r.__dirty){var s=r.shape.percent,l=r.pointAt(0),h=r.pointAt(s),u=H([],h,l);if(X(u,u),e&&(e.attr("position",l),c=r.tangentAt(0),e.attr("rotation",Math.PI/2-Math.atan2(c[1],c[0])),e.attr("scale",[o*s,o*s])),i){i.attr("position",h);var c=r.tangentAt(1);i.attr("rotation",-Math.PI/2-Math.atan2(c[1],c[0])),i.attr("scale",[o*s,o*s])}if(!n.ignore){n.attr("position",h);var d,f,g,p=5*o;if("end"===n.__position)d=[u[0]*p+h[0],u[1]*p+h[1]],f=u[0]>.8?"left":u[0]<-.8?"right":"center",g=u[1]>.8?"top":u[1]<-.8?"bottom":"middle";else if("middle"===n.__position){var m=s/2,v=[(c=r.tangentAt(m))[1],-c[0]],y=r.pointAt(m);v[1]>0&&(v[0]=-v[0],v[1]=-v[1]),d=[y[0]+v[0]*p,y[1]+v[1]*p],f="center",g="bottom";var x=-Math.atan2(c[1],c[0]);h[0].8?"right":u[0]<-.8?"left":"center",g=u[1]>.8?"bottom":u[1]<-.8?"top":"middle";n.attr({style:{textVerticalAlign:n.__verticalAlign||g,textAlign:n.__textAlign||f},position:d,scale:[o,o]})}}}},pT._createLine=function(t,e,i){var n=t.hostModel,o=xu(t.getItemLayout(e));o.shape.percent=0,So(o,{shape:{percent:1}},n,e),this.add(o);var a=new ib({name:"label"});this.add(a),d(gT,function(i){var n=yu(i,t,e);this.add(n),this[vu(i)]=t.getItemVisual(e,i)},this),this._updateCommonStl(t,e,i)},pT.updateData=function(t,e,i){var n=t.hostModel,o=this.childOfName("line"),a=t.getItemLayout(e),r={shape:{}};_u(r.shape,a),wo(o,r,n,e),d(gT,function(i){var n=t.getItemVisual(e,i),o=vu(i);if(this[o]!==n){this.remove(this.childOfName(i));var a=yu(i,t,e);this.add(a)}this[o]=n},this),this._updateCommonStl(t,e,i)},pT._updateCommonStl=function(t,e,i){var n=t.hostModel,o=this.childOfName("line"),a=i&&i.lineStyle,s=i&&i.hoverLineStyle,l=i&&i.labelModel,h=i&&i.hoverLabelModel;if(!i||t.hasItemOption){var u=t.getItemModel(e);a=u.getModel("lineStyle.normal").getLineStyle(),s=u.getModel("lineStyle.emphasis").getLineStyle(),l=u.getModel("label.normal"),h=u.getModel("label.emphasis")}var c=t.getItemVisual(e,"color"),f=A(t.getItemVisual(e,"opacity"),a.opacity,1);o.useStyle(r({strokeNoScale:!0,fill:"none",stroke:c,opacity:f},a)),o.hoverStyle=s,d(gT,function(t){var e=this.childOfName(t);e&&(e.setColor(c),e.setStyle({opacity:f}))},this);var g,p,m,v,y=l.getShallow("show"),x=h.getShallow("show"),_=this.childOfName("label");if(y||x){var b=n.getRawValue(e);p=null==b?p=t.getName(e):isFinite(b)?Mi(b):b,g=c||"#000",m=T(n.getFormattedLabel(e,"normal",t.dataType),p),v=T(n.getFormattedLabel(e,"emphasis",t.dataType),m)}if(y){var w=fo(_.style,l,{text:m},{autoColor:g});_.__textAlign=w.textAlign,_.__verticalAlign=w.textVerticalAlign,_.__position=l.get("position")||"middle"}else _.setStyle("text",null);_.hoverStyle=x?{text:v,textFill:h.getTextColor(!0),fontStyle:h.getShallow("fontStyle"),fontWeight:h.getShallow("fontWeight"),fontSize:h.getShallow("fontSize"),fontFamily:h.getShallow("fontFamily")}:{text:null},_.ignore=!y&&!x,uo(this)},pT.highlight=function(){this.trigger("emphasis")},pT.downplay=function(){this.trigger("normal")},pT.updateLayout=function(t,e){this.setLinePoints(t.getItemLayout(e))},pT.setLinePoints=function(t){var e=this.childOfName("line");_u(e.shape,t),e.dirty()},h(bu,jy);var mT=Mu.prototype;mT.updateData=function(t){var e=this._lineData,i=this.group,n=this._ctor,o=t.hostModel,a={lineStyle:o.getModel("lineStyle.normal").getLineStyle(),hoverLineStyle:o.getModel("lineStyle.emphasis").getLineStyle(),labelModel:o.getModel("label.normal"),hoverLabelModel:o.getModel("label.emphasis")};t.diff(e).add(function(e){if(Su(t.getItemLayout(e))){var o=new n(t,e,a);t.setItemGraphicEl(e,o),i.add(o)}}).update(function(o,r){var s=e.getItemGraphicEl(r);Su(t.getItemLayout(o))?(s?s.updateData(t,o,a):s=new n(t,o,a),t.setItemGraphicEl(o,s),i.add(s)):i.remove(s)}).remove(function(t){i.remove(e.getItemGraphicEl(t))}).execute(),this._lineData=t},mT.updateLayout=function(){var t=this._lineData;t.eachItemGraphicEl(function(e,i){e.updateLayout(t,i)},this)},mT.remove=function(){this.group.removeAll()};var vT=[],yT=[],xT=[],_T=un,bT=uy,wT=Math.abs,ST=function(t,e){function i(t){var e=t.getVisual("symbolSize");return e instanceof Array&&(e=(e[0]+e[1])/2),e}var n=[],o=gn,a=[[],[],[]],r=[[],[]],s=[];e/=2,t.eachEdge(function(t,l){var h=t.getLayout(),u=t.getVisual("fromSymbol"),c=t.getVisual("toSymbol");h.__original||(h.__original=[V(h[0]),V(h[1])],h[2]&&h.__original.push(V(h[2])));var d=h.__original;if(null!=h[2]){if(R(a[0],d[0]),R(a[1],d[2]),R(a[2],d[1]),u&&"none"!=u){var f=i(t.node1),g=Iu(a,d[0],f*e);o(a[0][0],a[1][0],a[2][0],g,n),a[0][0]=n[3],a[1][0]=n[4],o(a[0][1],a[1][1],a[2][1],g,n),a[0][1]=n[3],a[1][1]=n[4]}if(c&&"none"!=c){var f=i(t.node2),g=Iu(a,d[1],f*e);o(a[0][0],a[1][0],a[2][0],g,n),a[1][0]=n[1],a[2][0]=n[2],o(a[0][1],a[1][1],a[2][1],g,n),a[1][1]=n[1],a[2][1]=n[2]}R(h[0],a[0]),R(h[1],a[2]),R(h[2],a[1])}else{if(R(r[0],d[0]),R(r[1],d[1]),H(s,r[1],r[0]),X(s,s),u&&"none"!=u){f=i(t.node1);W(r[0],r[0],s,f*e)}if(c&&"none"!=c){f=i(t.node2);W(r[1],r[1],s,-f*e)}R(h[0],r[0]),R(h[1],r[1])}})},MT=["itemStyle","normal","opacity"],IT=["lineStyle","normal","opacity"];ur({type:"graph",init:function(t,e){var i=new ts,n=new Mu,o=this.group;this._controller=new kl(e.getZr()),this._controllerHost={target:o},o.add(i.group),o.add(n.group),this._symbolDraw=i,this._lineDraw=n,this._firstRender=!0},render:function(t,e,i){var n=t.coordinateSystem;this._model=t,this._nodeScaleRatio=t.get("nodeScaleRatio");var o=this._symbolDraw,a=this._lineDraw,r=this.group;if("view"===n.type){var s={position:n.position,scale:n.scale};this._firstRender?r.attr(s):wo(r,s,t)}ST(t.getGraph(),this._getNodeGlobalScale(t));var l=t.getData();o.updateData(l);var h=t.getEdgeData();a.updateData(h),this._updateNodeAndLinkScale(),this._updateController(t,e,i),clearTimeout(this._layoutTimeout);var u=t.forceLayout,c=t.get("force.layoutAnimation");u&&this._startForceLayoutIteration(u,c),l.eachItemGraphicEl(function(e,n){var o=l.getItemModel(n);e.off("drag").off("dragend");var a=l.getItemModel(n).get("draggable");a&&e.on("drag",function(){u&&(u.warmUp(),!this._layouting&&this._startForceLayoutIteration(u,c),u.setFixed(n),l.setItemLayout(n,e.position))},this).on("dragend",function(){u&&u.setUnfixed(n)},this),e.setDraggable(a&&u),e.off("mouseover",e.__focusNodeAdjacency),e.off("mouseout",e.__unfocusNodeAdjacency),o.get("focusNodeAdjacency")&&(e.on("mouseover",e.__focusNodeAdjacency=function(){i.dispatchAction({type:"focusNodeAdjacency",seriesId:t.id,dataIndex:e.dataIndex})}),e.on("mouseout",e.__unfocusNodeAdjacency=function(){i.dispatchAction({type:"unfocusNodeAdjacency",seriesId:t.id})}))},this),l.graph.eachEdge(function(e){var n=e.getGraphicEl();n.off("mouseover",n.__focusNodeAdjacency),n.off("mouseout",n.__unfocusNodeAdjacency),e.getModel().get("focusNodeAdjacency")&&(n.on("mouseover",n.__focusNodeAdjacency=function(){i.dispatchAction({type:"focusNodeAdjacency",seriesId:t.id,edgeDataIndex:e.dataIndex})}),n.on("mouseout",n.__unfocusNodeAdjacency=function(){i.dispatchAction({type:"unfocusNodeAdjacency",seriesId:t.id})}))});var d="circular"===t.get("layout")&&t.get("circular.rotateLabel"),f=l.getLayout("cx"),g=l.getLayout("cy");l.eachItemGraphicEl(function(t,e){var i=t.getSymbolPath();if(d){var n=l.getItemLayout(e),o=Math.atan2(n[1]-g,n[0]-f);o<0&&(o=2*Math.PI+o);var a=n[0]=o/3?1:2),l=e.y-n(r)*a*(a>=o/3?1:2);r=e.angle-Math.PI/2,t.moveTo(s,l),t.lineTo(e.x+i(r)*a,e.y+n(r)*a),t.lineTo(e.x+i(e.angle)*o,e.y+n(e.angle)*o),t.lineTo(e.x-i(r)*a,e.y-n(r)*a),t.lineTo(s,l)}}),CT=2*Math.PI,DT=(Ta.extend({type:"gauge",render:function(t,e,i){this.group.removeAll();var n=t.get("axisLine.lineStyle.color"),o=Nu(t,i);this._renderMain(t,e,i,n,o)},dispose:function(){},_renderMain:function(t,e,i,n,o){for(var a=this.group,r=t.getModel("axisLine").getModel("lineStyle"),s=t.get("clockwise"),l=-t.get("startAngle")/180*Math.PI,h=-t.get("endAngle")/180*Math.PI,u=(h-l)%CT,c=l,d=r.get("width"),f=0;f=t&&(0===e?0:n[e-1][0]).4?"bottom":"middle",textAlign:A<-.4?"left":A>.4?"right":"center"},{autoColor:P}),silent:!0}))}if(p.get("show")&&T!==v){for(var O=0;O<=y;O++){var A=Math.cos(b),C=Math.sin(b),z=new fb({shape:{x1:A*c+h,y1:C*c+u,x2:A*(c-_)+h,y2:C*(c-_)+u},silent:!0,style:I});"auto"===I.stroke&&z.setStyle({stroke:n((T+O/y)/v)}),l.add(z),b+=S}b-=S}else b+=w}},_renderPointer:function(t,e,i,n,o,a,r,s){var l=this.group,h=this._data;if(t.get("pointer.show")){var u=[+t.get("min"),+t.get("max")],c=[a,r],d=t.getData();d.diff(h).add(function(e){var i=new AT({shape:{angle:a}});So(i,{shape:{angle:wi(d.get("value",e),u,c,!0)}},t),l.add(i),d.setItemGraphicEl(e,i)}).update(function(e,i){var n=h.getItemGraphicEl(i);wo(n,{shape:{angle:wi(d.get("value",e),u,c,!0)}},t),l.add(n),d.setItemGraphicEl(e,n)}).remove(function(t){var e=h.getItemGraphicEl(t);l.remove(e)}).execute(),d.eachItemGraphicEl(function(t,e){var i=d.getItemModel(e),a=i.getModel("pointer");t.setShape({x:o.cx,y:o.cy,width:Si(a.get("width"),o.r),r:Si(a.get("length"),o.r)}),t.useStyle(i.getModel("itemStyle.normal").getItemStyle()),"auto"===t.style.fill&&t.setStyle("fill",n(wi(d.get("value",e),u,[0,1],!0))),uo(t,i.getModel("itemStyle.emphasis").getItemStyle())}),this._data=d}else h&&h.eachItemGraphicEl(function(t){l.remove(t)})},_renderTitle:function(t,e,i,n,o){var a=t.getModel("title");if(a.get("show")){var r=a.get("offsetCenter"),s=o.cx+Si(r[0],o.r),l=o.cy+Si(r[1],o.r),h=+t.get("min"),u=+t.get("max"),c=n(wi(t.getData().get("value",0),[h,u],[0,1],!0));this.group.add(new ib({silent:!0,style:fo({},a,{x:s,y:l,text:t.getData().getName(0),textAlign:"center",textVerticalAlign:"middle"},{autoColor:c,forceRich:!0})}))}},_renderDetail:function(t,e,i,n,o){var a=t.getModel("detail"),r=+t.get("min"),s=+t.get("max");if(a.get("show")){var l=a.get("offsetCenter"),h=o.cx+Si(l[0],o.r),u=o.cy+Si(l[1],o.r),c=Si(a.get("width"),o.r),d=Si(a.get("height"),o.r),f=t.getData().get("value",0),g=n(wi(f,[r,s],[0,1],!0));this.group.add(new ib({silent:!0,style:fo({},a,{x:h,y:u,text:Eu(f,a.get("formatter")),textWidth:isNaN(c)?null:c,textHeight:isNaN(d)?null:d,textAlign:"center",textVerticalAlign:"middle"},{autoColor:g,forceRich:!0})}))}}}),hr({type:"series.funnel",init:function(t){DT.superApply(this,"init",arguments),this.legendDataProvider=function(){return this.getRawData()},this._defaultLabelLine(t)},getInitialData:function(t,e){var i=xr(["value"],t.data),n=new aS(i,this);return n.initData(t.data),n},_defaultLabelLine:function(t){zo(t.labelLine,["show"]);var e=t.labelLine.normal,i=t.labelLine.emphasis;e.show=e.show&&t.label.normal.show,i.show=i.show&&t.label.emphasis.show},getDataParams:function(t){var e=this.getData(),i=DT.superCall(this,"getDataParams",t),n=e.getSum("value");return i.percent=n?+(e.get("value",t)/n*100).toFixed(2):0,i.$vars.push("percent"),i},defaultOption:{zlevel:0,z:2,legendHoverLink:!0,left:80,top:60,right:80,bottom:60,minSize:"0%",maxSize:"100%",sort:"descending",gap:0,funnelAlign:"center",label:{normal:{show:!0,position:"outer"},emphasis:{show:!0}},labelLine:{normal:{show:!0,length:20,lineStyle:{width:1,type:"solid"}},emphasis:{}},itemStyle:{normal:{borderColor:"#fff",borderWidth:1},emphasis:{}}}})),LT=Ru.prototype,kT=["itemStyle","normal","opacity"];LT.updateData=function(t,e,i){var n=this.childAt(0),o=t.hostModel,a=t.getItemModel(e),s=t.getItemLayout(e),l=t.getItemModel(e).get(kT);l=null==l?1:l,n.useStyle({}),i?(n.setShape({points:s.points}),n.setStyle({opacity:0}),So(n,{style:{opacity:l}},o,e)):wo(n,{style:{opacity:l},shape:{points:s.points}},o,e);var h=a.getModel("itemStyle"),u=t.getItemVisual(e,"color");n.setStyle(r({lineJoin:"round",fill:u},h.getModel("normal").getItemStyle(["opacity"]))),n.hoverStyle=h.getModel("emphasis").getItemStyle(),this._updateLabel(t,e),uo(this)},LT._updateLabel=function(t,e){var i=this.childAt(1),n=this.childAt(2),o=t.hostModel,a=t.getItemModel(e),r=t.getItemLayout(e).label,s=t.getItemVisual(e,"color");wo(i,{shape:{points:r.linePoints||r.linePoints}},o,e),wo(n,{style:{x:r.x,y:r.y}},o,e),n.attr({rotation:r.rotation,origin:[r.x,r.y],z2:10});var l=a.getModel("label.normal"),h=a.getModel("label.emphasis"),u=a.getModel("labelLine.normal"),c=a.getModel("labelLine.emphasis"),s=t.getItemVisual(e,"color");co(n.style,n.hoverStyle={},l,h,{labelFetcher:t.hostModel,labelDataIndex:e,defaultText:t.getName(e),autoColor:s,useInsideStyle:!!r.inside},{textAlign:r.textAlign,textVerticalAlign:r.verticalAlign}),n.ignore=n.normalIgnore=!l.get("show"),n.hoverIgnore=!h.get("show"),i.ignore=i.normalIgnore=!u.get("show"),i.hoverIgnore=!c.get("show"),i.setStyle({stroke:s}),i.setStyle(u.getModel("lineStyle").getLineStyle()),i.hoverStyle=c.getModel("lineStyle").getLineStyle()},h(Ru,jy);Ta.extend({type:"funnel",render:function(t,e,i){var n=t.getData(),o=this._data,a=this.group;n.diff(o).add(function(t){var e=new Ru(n,t);n.setItemGraphicEl(t,e),a.add(e)}).update(function(t,e){var i=o.getItemGraphicEl(e);i.updateData(n,t),a.add(i),n.setItemGraphicEl(t,i)}).remove(function(t){var e=o.getItemGraphicEl(t);a.remove(e)}).execute(),this._data=n},remove:function(){this.group.removeAll(),this._data=null},dispose:function(){}});ar(v(tI,"funnel")),or(function(t,e,i){t.eachSeriesByType("funnel",function(t){var i=t.getData(),n=t.get("sort"),o=Vu(t,e),a=Bu(i,n),r=[Si(t.get("minSize"),o.width),Si(t.get("maxSize"),o.width)],s=i.getDataExtent("value"),l=t.get("min"),h=t.get("max");null==l&&(l=Math.min(s[0],0)),null==h&&(h=s[1]);var u=t.get("funnelAlign"),c=t.get("gap"),d=(o.height-c*(i.count()-1))/i.count(),f=o.y,g=function(t,e){var n,a=wi(i.get("value",t)||0,[l,h],r,!0);switch(u){case"left":n=o.x;break;case"center":n=o.x+(o.width-a)/2;break;case"right":n=o.x+o.width-a}return[[n,e],[n+a,e]]};"ascending"===n&&(d=-d,c=-c,f+=o.height,a=a.reverse());for(var p=0;pa&&(e[1-n]=e[n]+u.sign*a),e},zT=d,NT=Math.min,ET=Math.max,RT=Math.floor,VT=Math.ceil,BT=Mi,GT=Math.PI;Uu.prototype={type:"parallel",constructor:Uu,_init:function(t,e,i){var n=t.dimensions,o=t.parallelAxisIndex;zT(n,function(t,i){var n=o[i],a=e.getComponent("parallelAxis",n),r=this._axesMap.set(t,new PT(t,Er(a),[0,0],a.get("type"),n)),s="category"===r.type;r.onBand=s&&a.get("boundaryGap"),r.inverse=a.get("inverse"),a.axis=r,r.model=a,r.coordinateSystem=a.coordinateSystem=this},this)},update:function(t,e){this._updateAxesFromSeries(this._model,t)},containPoint:function(t){var e=this._makeLayoutInfo(),i=e.axisBase,n=e.layoutBase,o=e.pixelDimIndex,a=t[1-o],r=t[o];return a>=i&&a<=i+e.axisLength&&r>=n&&r<=n+e.layoutLength},getModel:function(){return this._model},_updateAxesFromSeries:function(t,e){e.eachSeries(function(i){if(t.contains(i,e)){var n=i.getData();zT(this.dimensions,function(t){var e=this._axesMap.get(t);e.scale.unionExtentFromData(n,t),Nr(e.scale,e.model)},this)}},this)},resize:function(t,e){this._rect=Ko(t.getBoxLayoutParams(),{width:e.getWidth(),height:e.getHeight()}),this._layoutAxes()},getRect:function(){return this._rect},_makeLayoutInfo:function(){var t,e=this._model,i=this._rect,n=["x","y"],o=["width","height"],a=e.get("layout"),r="horizontal"===a?0:1,s=i[o[r]],l=[0,s],h=this.dimensions.length,u=Xu(e.get("axisExpandWidth"),l),c=Xu(e.get("axisExpandCount")||0,[0,h]),d=e.get("axisExpandable")&&h>3&&h>c&&c>1&&u>0&&s>0,f=e.get("axisExpandWindow");f?(t=Xu(f[1]-f[0],l),f[1]=f[0]+t):(t=Xu(u*(c-1),l),(f=[u*(e.get("axisExpandCenter")||RT(h/2))-t/2])[1]=f[0]+t);var g=(s-t)/(h-c);g<3&&(g=0);var p=[RT(BT(f[0]/u,1))+1,VT(BT(f[1]/u,1))-1],m=g/u*f[0];return{layout:a,pixelDimIndex:r,layoutBase:i[n[r]],layoutLength:s,axisBase:i[n[1-r]],axisLength:i[o[1-r]],axisExpandable:d,axisExpandWidth:u,axisCollapseWidth:g,axisExpandWindow:f,axisCount:h,winInnerIndices:p,axisExpandWindow0Pos:m}},_layoutAxes:function(){var t=this._rect,e=this._axesMap,i=this.dimensions,n=this._makeLayoutInfo(),o=n.layout;e.each(function(t){var e=[0,n.axisLength],i=t.inverse?1:0;t.setExtent(e[i],e[1-i])}),zT(i,function(i,a){var r=(n.axisExpandable?qu:ju)(a,n),s={horizontal:{x:r.position,y:n.axisLength},vertical:{x:0,y:r.position}},l={horizontal:GT/2,vertical:0},h=[s[o].x+t.x,s[o].y+t.y],u=l[o],c=ot();ht(c,c,u),lt(c,c,h),this._axesLayout[i]={position:h,rotation:u,transform:c,axisNameAvailableWidth:r.axisNameAvailableWidth,axisLabelShow:r.axisLabelShow,nameTruncateMaxWidth:r.nameTruncateMaxWidth,tickDirection:1,labelDirection:1,labelInterval:e.get(i).getLabelInterval()}},this)},getAxis:function(t){return this._axesMap.get(t)},dataToPoint:function(t,e){return this.axisCoordToPoint(this._axesMap.get(e).dataToCoord(t),e)},eachActiveState:function(t,e,i){for(var n=this.dimensions,o=this._axesMap,a=this.hasAxisBrushed(),r=0,s=t.count();ro*(1-u[0])?(l="jump",r=s-o*(1-u[2])):(r=s-o*u[1])>=0&&(r=s-o*(1-u[1]))<=0&&(r=0),(r*=e.axisExpandWidth/h)?OT(r,n,a,"all"):l="none";else{o=n[1]-n[0];(n=[ET(0,a[1]*s/o-o/2)])[1]=NT(a[1],n[0]+o),n[0]=n[1]-o}return{axisExpandWindow:n,behavior:l}}},ua.register("parallel",{create:function(t,e){var i=[];return t.eachComponent("parallel",function(n,o){var a=new Uu(n,t,e);a.name="parallel_"+o,a.resize(n,e),n.coordinateSystem=a,a.model=n,i.push(a)}),t.eachSeries(function(e){if("parallel"===e.get("coordinateSystem")){var i=t.queryComponents({mainType:"parallel",index:e.get("parallelIndex"),id:e.get("parallelId")})[0];e.coordinateSystem=i.coordinateSystem}}),i}});var WT=Ub.extend({type:"baseParallelAxis",axis:null,activeIntervals:[],getAreaSelectStyle:function(){return $x([["fill","color"],["lineWidth","borderWidth"],["stroke","borderColor"],["width","width"],["opacity","opacity"]])(this.getModel("areaSelectStyle"))},setActiveIntervals:function(t){var e=this.activeIntervals=i(t);if(e)for(var n=e.length-1;n>=0;n--)Ii(e[n])},getActiveState:function(t){var e=this.activeIntervals;if(!e.length)return"normal";if(null==t)return"inactive";for(var i=0,n=e.length;i5)return;var n=this._model.coordinateSystem.getSlidedAxisExpandWindow([t.offsetX,t.offsetY]);"none"!==n.behavior&&this._dispatchExpand({axisExpandWindow:n.axisExpandWindow})}this._mouseDownPoint=null},mousemove:function(t){if(!this._mouseDownPoint&&Rc(this,"mousemove")){var e=this._model,i=e.coordinateSystem.getSlidedAxisExpandWindow([t.offsetX,t.offsetY]),n=i.behavior;"jump"===n&&this._throttledDispatchExpand.debounceNextCall(e.get("axisExpandDebounce")),this._throttledDispatchExpand("none"===n?null:{axisExpandWindow:i.axisExpandWindow,animation:"jump"===n&&null})}}};tr(function(t){Wu(t),Hu(t)}),yw.extend({type:"series.parallel",dependencies:["parallel"],visualColorAccessPath:"lineStyle.normal.color",getInitialData:function(t,e){var i=e.getComponent("parallel",this.get("parallelIndex")),n=i.parallelAxisIndex,o=t.data,a=i.dimensions,r=f(Gc(a,o),function(t,i){var r=l(a,t),s=r>=0&&e.getComponent("parallelAxis",n[r]);return s&&"category"===s.get("type")?(Vc(s,t,o),{name:t,type:"ordinal"}):r<0&&xr.guessOrdinal(o,i)?{name:t,type:"ordinal"}:t}),s=new aS(r,this);return s.initData(o),this.option.progressive&&(this.option.animation=!1),s},getRawIndicesByActiveState:function(t){var e=this.coordinateSystem,i=this.getData(),n=[];return e.eachActiveState(i,function(e,o){t===e&&n.push(i.getRawIndex(o))}),n},defaultOption:{zlevel:0,z:2,coordinateSystem:"parallel",parallelIndex:0,label:{normal:{show:!1},emphasis:{show:!1}},inactiveOpacity:.05,activeOpacity:1,lineStyle:{normal:{width:1,opacity:.45,type:"solid"}},progressive:!1,smooth:!1,animationEasing:"linear"}});Ta.extend({type:"parallel",init:function(){this._dataGroup=new jy,this.group.add(this._dataGroup),this._data},render:function(t,e,i,n){this._renderForNormal(t,n)},dispose:function(){},_renderForNormal:function(t,e){var i=this._dataGroup,n=t.getData(),o=this._data,a=t.coordinateSystem,r=a.dimensions,s=t.option.smooth?.3:null;if(n.diff(o).add(function(t){Fc(n,i,t,r,a)}).update(function(i,s){var l=o.getItemGraphicEl(s),h=Hc(n,i,r,a);n.setItemGraphicEl(i,l),wo(l,{shape:{points:h}},e&&!1===e.animation?null:t,i)}).remove(function(t){var e=o.getItemGraphicEl(t);i.remove(e)}).execute(),Zc(n,s),!this._data){var l=Wc(a,t,function(){setTimeout(function(){i.removeClipPath()})});i.setClipPath(l)}this._data=n},remove:function(){this._dataGroup&&this._dataGroup.removeAll(),this._data=null}});var lA=["lineStyle","normal","opacity"];ar(function(t){t.eachSeriesByType("parallel",function(e){var i=e.getModel("itemStyle.normal"),n=e.getModel("lineStyle.normal"),o=t.get("color"),a=n.get("color")||i.get("color")||o[e.seriesIndex%o.length],r=e.get("inactiveOpacity"),s=e.get("activeOpacity"),l=e.getModel("lineStyle.normal").getLineStyle(),h=e.coordinateSystem,u=e.getData(),c={normal:l.opacity,active:s,inactive:r};h.eachActiveState(u,function(t,e){var i=u.getItemModel(e),n=c[t];if("normal"===t){var o=i.get(lA,!0);null!=o&&(n=o)}u.setItemVisual(e,"opacity",n)}),u.setVisual("color",a)})});var hA=yw.extend({type:"series.sankey",layoutInfo:null,getInitialData:function(t){var e=t.edges||t.links,i=t.data||t.nodes;if(i&&e)return hT(i,e,this,!0).data},getGraph:function(){return this.getData().graph},getEdgeData:function(){return this.getGraph().edgeData},formatTooltip:function(t,e,i){if("edge"===i){var n=this.getDataParams(t,i),o=n.data,a=o.source+" -- "+o.target;return n.value&&(a+=" : "+n.value),Gi(a)}return hA.superCall(this,"formatTooltip",t,e)},defaultOption:{zlevel:0,z:2,coordinateSystem:"view",layout:null,left:"5%",top:"5%",right:"20%",bottom:"5%",nodeWidth:20,nodeGap:8,layoutIterations:32,label:{normal:{show:!0,position:"right",color:"#000",fontSize:12},emphasis:{show:!0}},itemStyle:{normal:{borderWidth:1,borderColor:"#333"}},lineStyle:{normal:{color:"#314656",opacity:.2,curveness:.5},emphasis:{opacity:.6}},animationEasing:"linear",animationDuration:1e3}}),uA=Zn({shape:{x1:0,y1:0,x2:0,y2:0,cpx1:0,cpy1:0,cpx2:0,cpy2:0,extent:0},buildPath:function(t,e){var i=e.extent/2;t.moveTo(e.x1,e.y1-i),t.bezierCurveTo(e.cpx1,e.cpy1-i,e.cpx2,e.cpy2-i,e.x2,e.y2-i),t.lineTo(e.x2,e.y2+i),t.bezierCurveTo(e.cpx2,e.cpy2+i,e.cpx1,e.cpy1+i,e.x1,e.y1+i),t.closePath()}});ur({type:"sankey",_model:null,render:function(t,e,i){var n=t.getGraph(),o=this.group,a=t.layoutInfo,r=t.getData(),s=t.getData("edge");this._model=t,o.removeAll(),o.attr("position",[a.x,a.y]),n.eachEdge(function(e){var i=new uA;i.dataIndex=e.dataIndex,i.seriesIndex=t.seriesIndex,i.dataType="edge";var n=e.getModel("lineStyle.normal"),a=n.get("curveness"),r=e.node1.getLayout(),l=e.node2.getLayout(),h=e.getLayout();i.shape.extent=Math.max(1,h.dy);var u=r.x+r.dx,c=r.y+h.sy+h.dy/2,d=l.x,f=l.y+h.ty+h.dy/2,g=u*(1-a)+d*a,p=c,m=u*a+d*(1-a),v=f;switch(i.setShape({x1:u,y1:c,x2:d,y2:f,cpx1:g,cpy1:p,cpx2:m,cpy2:v}),i.setStyle(n.getItemStyle()),i.style.fill){case"source":i.style.fill=e.node1.getVisual("color");break;case"target":i.style.fill=e.node2.getVisual("color")}uo(i,e.getModel("lineStyle.emphasis").getItemStyle()),o.add(i),s.setItemGraphicEl(e.dataIndex,i)}),n.eachNode(function(e){var i=e.getLayout(),n=e.getModel(),a=n.getModel("label.normal"),s=n.getModel("label.emphasis"),l=new db({shape:{x:i.x,y:i.y,width:e.getLayout().dx,height:e.getLayout().dy},style:n.getModel("itemStyle.normal").getItemStyle()}),h=e.getModel("itemStyle.emphasis").getItemStyle();co(l.style,h,a,s,{labelFetcher:t,labelDataIndex:e.dataIndex,defaultText:e.id,isRectText:!0}),l.setStyle("fill",e.getVisual("color")),uo(l,h),o.add(l),r.setItemGraphicEl(e.dataIndex,l),l.dataType="node"}),!this._data&&t.get("animation")&&o.setClipPath(Xc(o.getBoundingRect(),t,function(){o.removeClipPath()})),this._data=t.getData()},dispose:function(){}});or(function(t,e,i){t.eachSeriesByType("sankey",function(t){var i=t.get("nodeWidth"),n=t.get("nodeGap"),o=qc(t,e);t.layoutInfo=o;var a=o.width,r=o.height,s=t.getGraph(),l=s.nodes,h=s.edges;$c(l),Yc(l,h,i,n,a,r,0!==p(l,function(t){return 0===t.getLayout().value}).length?0:t.get("layoutIterations"))})}),ar(function(t,e){t.eachSeriesByType("sankey",function(t){var e=t.getGraph().nodes;e.sort(function(t,e){return t.getLayout().value-e.getLayout().value});var i=e[0].getLayout().value,n=e[e.length-1].getLayout().value;d(e,function(e){var o=new jI({type:"color",mappingMethod:"linear",dataExtent:[i,n],visual:t.get("color")}).mapValueToVisual(e.getLayout().value);e.setVisual("color",o);var a=e.getModel().get("itemStyle.normal.color");null!=a&&e.setVisual("color",a)})})});var cA=Nn.extend({type:"whiskerInBox",shape:{},buildPath:function(t,e){for(var i in e)if(e.hasOwnProperty(i)&&0===i.indexOf("ends")){var n=e[i];t.moveTo(n[0][0],n[0][1]),t.lineTo(n[1][0],n[1][1])}}}),dA=pd.prototype;dA._createContent=function(t,e,i){var n=t.getItemLayout(e),o="horizontal"===n.chartLayout?1:0,a=0;this.add(new ub({shape:{points:i?md(n.bodyEnds,o,n):n.bodyEnds},style:{strokeNoScale:!0},z2:100})),this.bodyIndex=a++;var r=f(n.whiskerEnds,function(t){return i?md(t,o,n):t});this.add(new cA({shape:vd(r),style:{strokeNoScale:!0},z2:100})),this.whiskerIndex=a++},dA.updateData=function(t,e,i){var n=this._seriesModel=t.hostModel,o=t.getItemLayout(e),a=Tb[i?"initProps":"updateProps"];a(this.childAt(this.bodyIndex),{shape:{points:o.bodyEnds}},n,e),a(this.childAt(this.whiskerIndex),{shape:vd(o.whiskerEnds)},n,e),this.styleUpdater.call(null,this,t,e)},h(pd,jy);var fA=yd.prototype;fA.updateData=function(t){var e=this.group,i=this._data,n=this.styleUpdater;t.diff(i).add(function(i){if(t.hasValue(i)){var o=new pd(t,i,n,!0);t.setItemGraphicEl(i,o),e.add(o)}}).update(function(o,a){var r=i.getItemGraphicEl(a);t.hasValue(o)?(r?r.updateData(t,o):r=new pd(t,o,n),e.add(r),t.setItemGraphicEl(o,r)):e.remove(r)}).remove(function(t){var n=i.getItemGraphicEl(t);n&&e.remove(n)}).execute(),this._data=t},fA.remove=function(){var t=this.group,e=this._data;this._data=null,e&&e.eachItemGraphicEl(function(e){e&&t.remove(e)})};var gA={_baseAxisDim:null,getInitialData:function(t,e){var i,n,o=e.getComponent("xAxis",this.get("xAxisIndex")),a=e.getComponent("yAxis",this.get("yAxisIndex")),r=o.get("type"),s=a.get("type");"category"===r?(t.layout="horizontal",i=o.getCategories(),n=!0):"category"===s?(t.layout="vertical",i=a.getCategories(),n=!0):t.layout=t.layout||"horizontal";var l=["x","y"],h="horizontal"===t.layout?0:1,u=this._baseAxisDim=l[h],c=l[1-h],f=t.data;n&&d(f,function(t,e){t.value&&y(t.value)?t.value.unshift(e):y(t)&&t.unshift(e)});var g=this.defaultValueDimensions,p=[{name:u,otherDims:{tooltip:!1},dimsDef:["base"]},{name:c,dimsDef:g.slice()}];p=xr(p,f,{encodeDef:this.get("encode"),dimsDef:this.get("dimensions"),dimCount:g.length+1});var m=new aS(p,this);return m.initData(f,i?i.slice():null),m},getBaseAxis:function(){var t=this._baseAxisDim;return this.ecModel.getComponent(t+"Axis",this.get(t+"AxisIndex")).axis}},pA={init:function(){var t=this._whiskerBoxDraw=new yd(this.getStyleUpdater());this.group.add(t.group)},render:function(t,e,i){this._whiskerBoxDraw.updateData(t.getData())},remove:function(t){this._whiskerBoxDraw.remove()}};u(yw.extend({type:"series.boxplot",dependencies:["xAxis","yAxis","grid"],defaultValueDimensions:["min","Q1","median","Q3","max"],dimensions:null,defaultOption:{zlevel:0,z:2,coordinateSystem:"cartesian2d",legendHoverLink:!0,hoverAnimation:!0,layout:null,boxWidth:[7,50],itemStyle:{normal:{color:"#fff",borderWidth:1},emphasis:{borderWidth:2,shadowBlur:5,shadowOffsetX:2,shadowOffsetY:2,shadowColor:"rgba(0,0,0,0.4)"}},animationEasing:"elasticOut",animationDuration:800}}),gA,!0),u(Ta.extend({type:"boxplot",getStyleUpdater:function(){return xd},dispose:N}),pA,!0);var mA=["itemStyle","normal"],vA=["itemStyle","emphasis"],yA=["itemStyle","normal","borderColor"],xA=d;ar(function(t,e){var i=t.get("color");t.eachRawSeriesByType("boxplot",function(e){var n=i[e.seriesIndex%i.length],o=e.getData();o.setVisual({legendSymbol:"roundRect",color:e.get(yA)||n}),t.isSeriesFiltered(e)||o.each(function(t){var e=o.getItemModel(t);o.setItemVisual(t,{color:e.get(yA,!0)})})})}),or(function(t){var e=_d(t);xA(e,function(t){var e=t.seriesModels;e.length&&(bd(t),xA(e,function(e,i){wd(e,t.boxOffsetList[i],t.boxWidthList[i])}))})}),u(yw.extend({type:"series.candlestick",dependencies:["xAxis","yAxis","grid"],defaultValueDimensions:["open","close","lowest","highest"],dimensions:null,defaultOption:{zlevel:0,z:2,coordinateSystem:"cartesian2d",legendHoverLink:!0,hoverAnimation:!0,layout:null,itemStyle:{normal:{color:"#c23531",color0:"#314656",borderWidth:1,borderColor:"#c23531",borderColor0:"#314656"},emphasis:{borderWidth:2}},barMaxWidth:null,barMinWidth:null,barWidth:null,animationUpdate:!1,animationEasing:"linear",animationDuration:300},getShadowDim:function(){return"open"},brushSelector:function(t,e,i){var n=e.getItemLayout(t);return i.rect(n.brushRect)}}),gA,!0),u(Ta.extend({type:"candlestick",getStyleUpdater:function(){return Sd},dispose:N}),pA,!0);var _A=["itemStyle","normal"],bA=["itemStyle","emphasis"],wA=["itemStyle","normal","borderColor"],SA=["itemStyle","normal","borderColor0"],MA=["itemStyle","normal","color"],IA=["itemStyle","normal","color0"],TA=T;tr(function(t){t&&y(t.series)&&d(t.series,function(t){b(t)&&"k"===t.type&&(t.type="candlestick")})}),ar(function(t,e){t.eachRawSeriesByType("candlestick",function(e){var i=e.getData();i.setVisual({legendSymbol:"roundRect"}),t.isSeriesFiltered(e)||i.each(function(t){var e=i.getItemModel(t),n=i.getItemLayout(t).sign;i.setItemVisual(t,{color:e.get(n>0?MA:IA),borderColor:e.get(n>0?wA:SA)})})})}),or(function(t){t.eachSeriesByType("candlestick",function(t){var e,i=t.coordinateSystem,n=t.getData(),o=Md(t,n),a=t.get("layout"),r="horizontal"===a?0:1,s=1-r,l=["x","y"],h=[];if(d(n.dimensions,function(t){var i=n.getDimensionInfo(t).coordDim;i===l[s]?h.push(t):i===l[r]&&(e=t)}),!(null==e||h.length<4)){var u=0;n.each([e].concat(h),function(){function t(t){var e=[];return e[r]=d,e[s]=t,isNaN(d)||isNaN(t)?[NaN,NaN]:i.dataToPoint(e)}function e(t,e){var i=t.slice(),n=t.slice();i[r]=Kn(i[r]+o/2,1,!1),n[r]=Kn(n[r]-o/2,1,!0),e?M.push(i,n):M.push(n,i)}function l(t){return t[r]=Kn(t[r],1),t}var c=arguments,d=c[0],f=c[h.length+1],g=c[1],p=c[2],m=c[3],v=c[4],y=Math.min(g,p),x=Math.max(g,p),_=t(y),b=t(x),w=t(m),S=[[l(t(v)),l(b)],[l(w),l(_)]],M=[];e(b,0),e(_,1);var I;I=g>p?-1:g0?n.getItemModel(u-1).get()[2]<=p?1:-1:1,n.setItemLayout(f,{chartLayout:a,sign:I,initBaseline:g>p?b[s]:_[s],bodyEnds:M,whiskerEnds:S,brushRect:function(){var e=t(Math.min(g,p,m,v)),i=t(Math.max(g,p,m,v));return e[r]-=o/2,i[r]-=o/2,{x:e[0],y:e[1],width:s?o:i[0]-e[0],height:s?i[1]-e[1]:o}}()}),++u},!0)}})}),yw.extend({type:"series.effectScatter",dependencies:["grid","polar"],getInitialData:function(t,e){return Sr(t.data,this,e)},brushSelector:"point",defaultOption:{coordinateSystem:"cartesian2d",zlevel:0,z:2,legendHoverLink:!0,effectType:"ripple",progressive:0,showEffectOn:"render",rippleEffect:{period:4,scale:2.5,brushType:"fill"},symbolSize:10}});var AA=Ad.prototype;AA.stopEffectAnimation=function(){this.childAt(1).removeAll()},AA.startEffectAnimation=function(t){for(var e=t.symbolType,i=t.color,n=this.childAt(1),o=0;o<3;o++){var a=Hr(e,-1,-1,2,2,i);a.attr({style:{strokeNoScale:!0},z2:99,silent:!0,scale:[.5,.5]});var r=-o/3*t.period+t.effectOffset;a.animate("",!0).when(t.period,{scale:[t.rippleScale/2,t.rippleScale/2]}).delay(r).start(),a.animateStyle(!0).when(t.period,{opacity:0}).delay(r).start(),n.add(a)}Td(n,t)},AA.updateEffectAnimation=function(t){for(var e=this._effectCfg,i=this.childAt(1),n=["symbolType","period","rippleScale"],o=0;o "))},defaultOption:{coordinateSystem:"geo",zlevel:0,z:2,legendHoverLink:!0,hoverAnimation:!0,xAxisIndex:0,yAxisIndex:0,symbol:["none","none"],symbolSize:[10,10],geoIndex:0,effect:{show:!1,period:4,constantSpeed:0,symbol:"circle",symbolSize:3,loop:!0,trailLength:.2},large:!1,largeThreshold:2e3,polyline:!1,label:{normal:{show:!1,position:"end"}},lineStyle:{normal:{opacity:.5}}}}),DA=Dd.prototype;DA.createLine=function(t,e,i){return new bu(t,e,i)},DA._updateEffectSymbol=function(t,e){var i=t.getItemModel(e).getModel("effect"),n=i.get("symbolSize"),o=i.get("symbol");y(n)||(n=[n,n]);var a=i.get("color")||t.getItemVisual(e,"color"),r=this.childAt(1);this._symbolType!==o&&(this.remove(r),(r=Hr(o,-.5,-.5,1,1,a)).z2=100,r.culling=!0,this.add(r)),r&&(r.setStyle("shadowColor",a),r.setStyle(i.getItemStyle(["color"])),r.attr("scale",n),r.setColor(a),r.attr("scale",n),this._symbolType=o,this._updateEffectAnimation(t,i,e))},DA._updateEffectAnimation=function(t,e,i){var n=this.childAt(1);if(n){var o=this,a=t.getItemLayout(i),r=1e3*e.get("period"),s=e.get("loop"),l=e.get("constantSpeed"),h=I(e.get("delay"),function(e){return e/t.count()*r/3}),u="function"==typeof h;if(n.ignore=!0,this.updateAnimationPoints(n,a),l>0&&(r=this.getLineLength(n)/l*1e3),r!==this._period||s!==this._loop){n.stopAnimation();var c=h;u&&(c=h(i)),n.__t>0&&(c=-r*n.__t),n.__t=0;var d=n.animate("",s).when(r,{__t:1}).delay(c).during(function(){o.updateSymbolPosition(n)});s||d.done(function(){o.remove(n)}),d.start()}this._period=r,this._loop=s}},DA.getLineLength=function(t){return hy(t.__p1,t.__cp1)+hy(t.__cp1,t.__p2)},DA.updateAnimationPoints=function(t,e){t.__p1=e[0],t.__p2=e[1],t.__cp1=e[2]||[(e[0][0]+e[1][0])/2,(e[0][1]+e[1][1])/2]},DA.updateData=function(t,e,i){this.childAt(0).updateData(t,e,i),this._updateEffectSymbol(t,e)},DA.updateSymbolPosition=function(t){var e=t.__p1,i=t.__p2,n=t.__cp1,o=t.__t,a=t.position,r=un,s=cn;a[0]=r(e[0],n[0],i[0],o),a[1]=r(e[1],n[1],i[1],o);var l=s(e[0],n[0],i[0],o),h=s(e[1],n[1],i[1],o);t.rotation=-Math.atan2(h,l)-Math.PI/2,t.ignore=!1},DA.updateLayout=function(t,e){this.childAt(0).updateLayout(t,e);var i=t.getItemModel(e).getModel("effect");this._updateEffectAnimation(t,i,e)},h(Dd,jy);var LA=Ld.prototype;LA._createPolyline=function(t,e,i){var n=t.getItemLayout(e),o=new cb({shape:{points:n}});this.add(o),this._updateCommonStl(t,e,i)},LA.updateData=function(t,e,i){var n=t.hostModel;wo(this.childAt(0),{shape:{points:t.getItemLayout(e)}},n,e),this._updateCommonStl(t,e,i)},LA._updateCommonStl=function(t,e,i){var n=this.childAt(0),o=t.getItemModel(e),a=t.getItemVisual(e,"color"),s=i&&i.lineStyle,l=i&&i.hoverLineStyle;i&&!t.hasItemOption||(s=o.getModel("lineStyle.normal").getLineStyle(),l=o.getModel("lineStyle.emphasis").getLineStyle()),n.useStyle(r({strokeNoScale:!0,fill:"none",stroke:a},s)),n.hoverStyle=l,uo(this)},LA.updateLayout=function(t,e){this.childAt(0).setShape("points",t.getItemLayout(e))},h(Ld,jy);var kA=kd.prototype;kA.createLine=function(t,e,i){return new Ld(t,e,i)},kA.updateAnimationPoints=function(t,e){this._points=e;for(var i=[0],n=0,o=1;o=0&&!(n[r]<=e);r--);r=Math.min(r,o-2)}else{for(var r=a;re);r++);r=Math.min(r-1,o-2)}Y(t.position,i[r],i[r+1],(e-n[r])/(n[r+1]-n[r]));var s=i[r+1][0]-i[r][0],l=i[r+1][1]-i[r][1];t.rotation=-Math.atan2(l,s)-Math.PI/2,this._lastFrame=r,this._lastFramePercent=e,t.ignore=!1}},h(kd,Dd);var PA=Zn({shape:{polyline:!1,segs:[]},buildPath:function(t,e){for(var i=e.segs,n=e.polyline,o=0;o2?t.quadraticCurveTo(a[2][0],a[2][1],a[1][0],a[1][1]):t.lineTo(a[1][0],a[1][1])}},findDataIndex:function(t,e){for(var i=this.shape,n=i.segs,o=i.polyline,a=Math.max(this.style.lineWidth,1),r=0;r2){if(Sn(s[0][0],s[0][1],s[2][0],s[2][1],s[1][0],s[1][1],a,t,e))return r}else if(bn(s[0][0],s[0][1],s[1][0],s[1][1],a,t,e))return r}return-1}}),OA=Pd.prototype;OA.updateData=function(t){this.group.removeAll();var e=this._lineEl,i=t.hostModel;e.setShape({segs:t.mapArray(t.getItemLayout),polyline:i.get("polyline")}),e.useStyle(i.getModel("lineStyle.normal").getLineStyle());var n=t.getVisual("color");n&&e.setStyle("stroke",n),e.setStyle("fill"),e.seriesIndex=i.seriesIndex,e.on("mousemove",function(t){e.dataIndex=null;var i=e.findDataIndex(t.offsetX,t.offsetY);i>0&&(e.dataIndex=i)}),this.group.add(e)},OA.updateLayout=function(t){var e=t.getData();this._lineEl.setShape({segs:e.mapArray(e.getItemLayout)})},OA.remove=function(){this.group.removeAll()},ur({type:"lines",init:function(){},render:function(t,e,i){var n=t.getData(),o=this._lineDraw,a=t.get("effect.show"),r=t.get("polyline"),s=t.get("large")&&n.count()>=t.get("largeThreshold");a===this._hasEffet&&r===this._isPolyline&&s===this._isLarge||(o&&o.remove(),o=this._lineDraw=s?new Pd:new Mu(r?a?kd:Ld:a?Dd:bu),this._hasEffet=a,this._isPolyline=r,this._isLarge=s);var l=t.get("zlevel"),h=t.get("effect.trailLength"),u=i.getZr(),c="svg"===u.painter.getType();c||u.painter.getLayer(l).clear(!0),null==this._lastZlevel||c||u.configLayer(this._lastZlevel,{motionBlur:!1}),a&&h&&(c||u.configLayer(l,{motionBlur:!0,lastFrameAlpha:Math.max(Math.min(h/10+.9,1),0)})),this.group.add(o.group),o.updateData(n),this._lastZlevel=l},updateLayout:function(t,e,i){this._lineDraw.updateLayout(t);var n=i.getZr();"svg"===n.painter.getType()||n.painter.getLayer(this._lastZlevel).clear(!0)},remove:function(t,e){this._lineDraw&&this._lineDraw.remove(e,!0);var i=e.getZr();"svg"===i.painter.getType()||i.painter.getLayer(this._lastZlevel).clear(!0)},dispose:function(){}});or(function(t){t.eachSeriesByType("lines",function(t){var e=t.coordinateSystem,i=t.getData();i.each(function(n){var o=i.getItemModel(n),a=o.option instanceof Array?o.option:o.get("coords"),r=[];if(t.get("polyline"))for(var s=0;s0){var I=a(v)?s:l;v>0&&(v=v*S+w),x[_++]=I[M],x[_++]=I[M+1],x[_++]=I[M+2],x[_++]=I[M+3]*v*256}else _+=4}return c.putImageData(y,0,0),u},_getBrush:function(){var t=this._brushCanvas||(this._brushCanvas=iy()),e=this.pointSize+this.blurSize,i=2*e;t.width=i,t.height=i;var n=t.getContext("2d");return n.clearRect(0,0,i,i),n.shadowOffsetX=i,n.shadowBlur=this.blurSize,n.shadowColor="#000",n.beginPath(),n.arc(-e,e,this.pointSize,0,2*Math.PI,!0),n.closePath(),n.fill(),t},_getGradient:function(t,e,i){for(var n=this._gradientPixels,o=n[i]||(n[i]=new Uint8ClampedArray(1024)),a=[0,0,0,0],r=0,s=0;s<256;s++)e[i](s/255,!0,a),o[r++]=a[0],o[r++]=a[1],o[r++]=a[2],o[r++]=a[3];return o}},ur({type:"heatmap",render:function(t,e,i){var n;e.eachComponent("visualMap",function(e){e.eachTargetSeries(function(i){i===t&&(n=e)})}),this.group.removeAll();var o=t.coordinateSystem;"cartesian2d"===o.type||"calendar"===o.type?this._renderOnCartesianAndCalendar(o,t,i):Rd(o)&&this._renderOnGeo(o,t,n,i)},dispose:function(){},_renderOnCartesianAndCalendar:function(t,e,i){if("cartesian2d"===t.type)var n=t.getAxis("x"),o=t.getAxis("y"),r=n.getBandWidth(),s=o.getBandWidth();var l=this.group,h=e.getData(),u=e.getModel("itemStyle.normal").getItemStyle(["color"]),c=e.getModel("itemStyle.emphasis").getItemStyle(),d=e.getModel("label.normal"),f=e.getModel("label.emphasis"),g=t.type,p="cartesian2d"===g?[e.coordDimToDataDim("x")[0],e.coordDimToDataDim("y")[0],e.coordDimToDataDim("value")[0]]:[e.coordDimToDataDim("time")[0],e.coordDimToDataDim("value")[0]];h.each(function(i){var n;if("cartesian2d"===g){if(isNaN(h.get(p[2],i)))return;var o=t.dataToPoint([h.get(p[0],i),h.get(p[1],i)]);n=new db({shape:{x:o[0]-r/2,y:o[1]-s/2,width:r,height:s},style:{fill:h.getItemVisual(i,"color"),opacity:h.getItemVisual(i,"opacity")}})}else{if(isNaN(h.get(p[1],i)))return;n=new db({z2:1,shape:t.dataToRect([h.get(p[0],i)]).contentShape,style:{fill:h.getItemVisual(i,"color"),opacity:h.getItemVisual(i,"opacity")}})}var m=h.getItemModel(i);h.hasItemOption&&(u=m.getModel("itemStyle.normal").getItemStyle(["color"]),c=m.getModel("itemStyle.emphasis").getItemStyle(),d=m.getModel("label.normal"),f=m.getModel("label.emphasis"));var v=e.getRawValue(i),y="-";v&&null!=v[2]&&(y=v[2]),co(u,c,d,f,{labelFetcher:e,labelDataIndex:i,defaultText:y,isRectText:!0}),n.setStyle(u),uo(n,h.hasItemOption?c:a({},c)),l.add(n),h.setItemGraphicEl(i,n)})},_renderOnGeo:function(t,e,i,n){var o=i.targetVisuals.inRange,a=i.targetVisuals.outOfRange,r=e.getData(),s=this._hmLayer||this._hmLayer||new zd;s.blurSize=e.get("blurSize"),s.pointSize=e.get("pointSize"),s.minOpacity=e.get("minOpacity"),s.maxOpacity=e.get("maxOpacity");var l=t.getViewRect().clone(),h=t.getRoamTransform().transform;l.applyTransform(h);var u=Math.max(l.x,0),c=Math.max(l.y,0),d=Math.min(l.width+l.x,n.getWidth()),f=Math.min(l.height+l.y,n.getHeight()),g=d-u,p=f-c,m=r.mapArray(["lng","lat","value"],function(e,i,n){var o=t.dataToPoint([e,i]);return o[0]-=u,o[1]-=c,o.push(n),o}),v=i.getExtent(),y="visualMap.continuous"===i.type?Ed(v,i.option.range):Nd(v,i.getPieceList(),i.option.selected);s.update(m,g,p,o.color.getNormalizer(),{inRange:o.color.getColorMapper(),outOfRange:a.color.getColorMapper()},y);var x=new qe({style:{width:g,height:p,x:u,y:c,image:s.canvas},silent:!0});this.group.add(x)}});var zA=ZM.extend({type:"series.pictorialBar",dependencies:["grid"],defaultOption:{symbol:"circle",symbolSize:null,symbolRotate:null,symbolPosition:null,symbolOffset:null,symbolMargin:null,symbolRepeat:!1,symbolRepeatDirection:"end",symbolClip:!1,symbolBoundingData:null,symbolPatternSize:400,barGap:"-100%",progressive:0,hoverAnimation:!1},getInitialData:function(t){return t.stack=null,zA.superApply(this,"getInitialData",arguments)}}),NA=["itemStyle","normal","borderWidth"],EA=[{xy:"x",wh:"width",index:0,posDesc:["left","right"]},{xy:"y",wh:"height",index:1,posDesc:["top","bottom"]}],RA=new nb;ur({type:"pictorialBar",render:function(t,e,i){var n=this.group,o=t.getData(),a=this._data,r=t.coordinateSystem,s=!!r.getBaseAxis().isHorizontal(),l=r.grid.getRect(),h={ecSize:{width:i.getWidth(),height:i.getHeight()},seriesModel:t,coordSys:r,coordSysExtent:[[l.x,l.x+l.width],[l.y,l.y+l.height]],isHorizontal:s,valueDim:EA[+s],categoryDim:EA[1-s]};return o.diff(a).add(function(t){if(o.hasValue(t)){var e=Yd(o,t),i=Vd(o,t,e,h),a=Qd(o,h,i);o.setItemGraphicEl(t,a),n.add(a),rf(a,h,i)}}).update(function(t,e){var i=a.getItemGraphicEl(e);if(o.hasValue(t)){var r=Yd(o,t),s=Vd(o,t,r,h),l=nf(o,s);i&&l!==i.__pictorialShapeStr&&(n.remove(i),o.setItemGraphicEl(t,null),i=null),i?tf(i,h,s):i=Qd(o,h,s,!0),o.setItemGraphicEl(t,i),i.__pictorialSymbolMeta=s,n.add(i),rf(i,h,s)}else n.remove(i)}).remove(function(t){var e=a.getItemGraphicEl(t);e&&ef(a,t,e.__pictorialSymbolMeta.animationModel,e)}).execute(),this._data=o,this.group},dispose:N,remove:function(t,e){var i=this.group,n=this._data;t.get("animation")?n&&n.eachItemGraphicEl(function(e){ef(n,e.dataIndex,t,e)}):i.removeAll()}});or(v(nl,"pictorialBar")),ar(v(cM,"pictorialBar","roundRect",null));var VA=function(t,e,i,n,o){US.call(this,t,e,i),this.type=n||"value",this.position=o||"bottom",this.orient=null,this._labelInterval=null};VA.prototype={constructor:VA,model:null,isHorizontal:function(){var t=this.position;return"top"===t||"bottom"===t},pointToData:function(t,e){return this.coordinateSystem.pointToData(t,e)[0]},toGlobalCoord:null,toLocalCoord:null},h(VA,US),lf.prototype={type:"singleAxis",axisPointerEnabled:!0,constructor:lf,_init:function(t,e,i){var n=this.dimension,o=new VA(n,Er(t),[0,0],t.get("type"),t.get("position")),a="category"===o.type;o.onBand=a&&t.get("boundaryGap"),o.inverse=t.get("inverse"),o.orient=t.get("orient"),t.axis=o,o.model=t,o.coordinateSystem=this,this._axis=o},update:function(t,e){t.eachSeries(function(t){if(t.coordinateSystem===this){var e=t.getData(),i=this.dimension;this._axis.scale.unionExtentFromData(e,t.coordDimToDataDim(i)),Nr(this._axis.scale,this._axis.model)}},this)},resize:function(t,e){this._rect=Ko({left:t.get("left"),top:t.get("top"),right:t.get("right"),bottom:t.get("bottom"),width:t.get("width"),height:t.get("height")},{width:e.getWidth(),height:e.getHeight()}),this._adjustAxis()},getRect:function(){return this._rect},_adjustAxis:function(){var t=this._rect,e=this._axis,i=e.isHorizontal(),n=i?[0,t.width]:[0,t.height],o=e.reverse?1:0;e.setExtent(n[o],n[1-o]),this._updateAxisTransform(e,i?t.x:t.y)},_updateAxisTransform:function(t,e){var i=t.getExtent(),n=i[0]+i[1],o=t.isHorizontal();t.toGlobalCoord=o?function(t){return t+e}:function(t){return n-t+e},t.toLocalCoord=o?function(t){return t-e}:function(t){return n-t+e}},getAxis:function(){return this._axis},getBaseAxis:function(){return this._axis},getAxes:function(){return[this._axis]},getTooltipAxes:function(){return{baseAxes:[this.getAxis()]}},containPoint:function(t){var e=this.getRect(),i=this.getAxis();return"horizontal"===i.orient?i.contain(i.toLocalCoord(t[0]))&&t[1]>=e.y&&t[1]<=e.y+e.height:i.contain(i.toLocalCoord(t[1]))&&t[0]>=e.y&&t[0]<=e.y+e.height},pointToData:function(t){var e=this.getAxis();return[e.coordToData(e.toLocalCoord(t["horizontal"===e.orient?0:1]))]},dataToPoint:function(t){var e=this.getAxis(),i=this.getRect(),n=[],o="horizontal"===e.orient?0:1;return t instanceof Array&&(t=t[0]),n[o]=e.toGlobalCoord(e.dataToCoord(+t)),n[1-o]=0===o?i.y+i.height/2:i.x+i.width/2,n}},ua.register("single",{create:function(t,e){var i=[];return t.eachComponent("singleAxis",function(n,o){var a=new lf(n,t,e);a.name="single_"+o,a.resize(n,e),n.coordinateSystem=a,i.push(a)}),t.eachSeries(function(e){if("singleAxis"===e.get("coordinateSystem")){var i=t.queryComponents({mainType:"singleAxis",index:e.get("singleAxisIndex"),id:e.get("singleAxisId")})[0];e.coordinateSystem=i&&i.coordinateSystem}}),i},dimensions:lf.prototype.dimensions});var BA=DM.getInterval,GA=DM.ifIgnoreOnTick,WA=["axisLine","axisTickLabel","axisName"],HA=EM.extend({type:"singleAxis",axisPointerClass:"SingleAxisPointer",render:function(t,e,i,n){var o=this.group;o.removeAll();var a=hf(t),r=new DM(t,a);d(WA,r.add,r),o.add(r.getGroup()),t.get("splitLine.show")&&this._splitLine(t,a.labelInterval),HA.superCall(this,"render",t,e,i,n)},_splitLine:function(t,e){var i=t.axis;if(!i.scale.isBlank()){var n=t.getModel("splitLine"),o=n.getModel("lineStyle"),a=o.get("width"),r=o.get("color"),s=BA(n,e);r=r instanceof Array?r:[r];for(var l=t.coordinateSystem.getRect(),h=i.isHorizontal(),u=[],c=0,d=i.getTicksCoords(),f=[],g=[],p=t.get("axisLabel.showMinLabel"),m=t.get("axisLabel.showMaxLabel"),v=0;v=0)&&i({type:"updateAxisPointer",currTrigger:t,x:e&&e.offsetX,y:e&&e.offsetY})})},remove:function(t,e){Tf(e.getZr(),"axisPointer"),KA.superApply(this._model,"remove",arguments)},dispose:function(t,e){Tf("axisPointer",e),KA.superApply(this._model,"dispose",arguments)}}),JA=Eb(),QA=i,tC=m;(Af.prototype={_group:null,_lastGraphicKey:null,_handle:null,_dragging:!1,_lastValue:null,_lastStatus:null,_payloadInfo:null,animationThreshold:15,render:function(t,e,i,n){var o=e.get("value"),a=e.get("status");if(this._axisModel=t,this._axisPointerModel=e,this._api=i,n||this._lastValue!==o||this._lastStatus!==a){this._lastValue=o,this._lastStatus=a;var r=this._group,s=this._handle;if(!a||"hide"===a)return r&&r.hide(),void(s&&s.hide());r&&r.show(),s&&s.show();var l={};this.makeElOption(l,o,t,e,i);var h=l.graphicKey;h!==this._lastGraphicKey&&this.clear(i),this._lastGraphicKey=h;var u=this._moveAnimation=this.determineAnimation(t,e);if(r){var c=v(Cf,e,u);this.updatePointerEl(r,l,c,e),this.updateLabelEl(r,l,c,e)}else r=this._group=new jy,this.createPointerEl(r,l,t,e),this.createLabelEl(r,l,t,e),i.getZr().add(r);Pf(r,e,!0),this._renderHandle(o)}},remove:function(t){this.clear(t)},dispose:function(t){this.clear(t)},determineAnimation:function(t,e){var i=e.get("animation"),n=t.axis,o="category"===n.type,a=e.get("snap");if(!a&&!o)return!1;if("auto"===i||null==i){var r=this.animationThreshold;if(o&&n.getBandWidth()>r)return!0;if(a){var s=Xs(t).seriesDataCount,l=n.getExtent();return Math.abs(l[0]-l[1])/s>r}return!1}return!0===i},makeElOption:function(t,e,i,n,o){},createPointerEl:function(t,e,i,n){var o=e.pointer;if(o){var a=JA(t).pointerEl=new Tb[o.type](QA(e.pointer));t.add(a)}},createLabelEl:function(t,e,i,n){if(e.label){var o=JA(t).labelEl=new db(QA(e.label));t.add(o),Lf(o,n)}},updatePointerEl:function(t,e,i){var n=JA(t).pointerEl;n&&(n.setStyle(e.pointer.style),i(n,{shape:e.pointer.shape}))},updateLabelEl:function(t,e,i,n){var o=JA(t).labelEl;o&&(o.setStyle(e.label.style),i(o,{shape:e.label.shape,position:e.label.position}),Lf(o,n))},_renderHandle:function(t){if(!this._dragging&&this.updateHandleTransform){var e=this._axisPointerModel,i=this._api.getZr(),n=this._handle,o=e.getModel("handle"),a=e.get("status");if(!o.get("show")||!a||"hide"===a)return n&&i.remove(n),void(this._handle=null);var r;this._handle||(r=!0,n=this._handle=Do(o.get("icon"),{cursor:"move",draggable:!0,onmousemove:function(t){bx(t.event)},onmousedown:tC(this._onHandleDragMove,this,0,0),drift:tC(this._onHandleDragMove,this),ondragend:tC(this._onHandleDragEnd,this)}),i.add(n)),Pf(n,e,!1);var s=["color","borderColor","borderWidth","opacity","shadowColor","shadowBlur","shadowOffsetX","shadowOffsetY"];n.setStyle(o.getItemStyle(null,s));var l=o.get("size");y(l)||(l=[l,l]),n.attr("scale",[l[0]/2,l[1]/2]),La(this,"_doDispatchAxisPointer",o.get("throttle")||0,"fixRate"),this._moveHandleToValue(t,r)}},_moveHandleToValue:function(t,e){Cf(this._axisPointerModel,!e&&this._moveAnimation,this._handle,kf(this.getHandleTransform(t,this._axisModel,this._axisPointerModel)))},_onHandleDragMove:function(t,e){var i=this._handle;if(i){this._dragging=!0;var n=this.updateHandleTransform(kf(i),[t,e],this._axisModel,this._axisPointerModel);this._payloadInfo=n,i.stopAnimation(),i.attr(kf(n)),JA(i).lastProp=null,this._doDispatchAxisPointer()}},_doDispatchAxisPointer:function(){if(this._handle){var t=this._payloadInfo,e=this._axisModel;this._api.dispatchAction({type:"updateAxisPointer",x:t.cursorPoint[0],y:t.cursorPoint[1],tooltipOption:t.tooltipOption,axesInfo:[{axisDim:e.axis.dim,axisIndex:e.componentIndex}]})}},_onHandleDragEnd:function(t){if(this._dragging=!1,this._handle){var e=this._axisPointerModel.get("value");this._moveHandleToValue(e),this._api.dispatchAction({type:"hideTip"})}},getHandleTransform:null,updateHandleTransform:null,clear:function(t){this._lastValue=null,this._lastStatus=null;var e=t.getZr(),i=this._group,n=this._handle;e&&i&&(this._lastGraphicKey=null,i&&e.remove(i),n&&e.remove(n),this._group=null,this._handle=null,this._payloadInfo=null)},doClear:function(){},buildLabel:function(t,e,i){return i=i||0,{x:t[i],y:t[1-i],width:e[i],height:e[1-i]}}}).constructor=Af,Ki(Af);var eC=Af.extend({makeElOption:function(t,e,i,n,o){var a=i.axis,r=a.grid,s=n.get("type"),l=Hf(r,a).getOtherAxis(a).getGlobalExtent(),h=a.toGlobalCoord(a.dataToCoord(e,!0));if(s&&"none"!==s){var u=Of(n),c=iC[s](a,h,l,u);c.style=u,t.graphicKey=c.type,t.pointer=c}Vf(e,t,Js(r.model,i),i,n,o)},getHandleTransform:function(t,e,i){var n=Js(e.axis.grid.model,e,{labelInside:!1});return n.labelMargin=i.get("handle.margin"),{position:Rf(e.axis,t,n),rotation:n.rotation+(n.labelDirection<0?Math.PI:0)}},updateHandleTransform:function(t,e,i,n){var o=i.axis,a=o.grid,r=o.getGlobalExtent(!0),s=Hf(a,o).getOtherAxis(o).getGlobalExtent(),l="x"===o.dim?0:1,h=t.position;h[l]+=e[l],h[l]=Math.min(r[1],h[l]),h[l]=Math.max(r[0],h[l]);var u=(s[1]+s[0])/2,c=[u,u];c[l]=h[l];var d=[{verticalAlign:"middle"},{align:"center"}];return{position:h,rotation:t.rotation,cursorPoint:c,tooltipOption:d[l]}}}),iC={line:function(t,e,i,n){var o=Bf([e,i[0]],[e,i[1]],Ff(t));return Yn({shape:o,style:n}),{type:"Line",shape:o}},shadow:function(t,e,i,n){var o=t.getBandWidth(),a=i[1]-i[0];return{type:"Rect",shape:Gf([e-o/2,i[0]],[o,a],Ff(t))}}};EM.registerAxisPointerClass("CartesianAxisPointer",eC),tr(function(t){if(t){(!t.axisPointer||0===t.axisPointer.length)&&(t.axisPointer={});var e=t.axisPointer.link;e&&!y(e)&&(t.axisPointer.link=[e])}}),er(Pw.PROCESSOR.STATISTIC,function(t,e){t.getComponent("axisPointer").coordSysAxesInfo=Bs(t,e)}),ir({type:"updateAxisPointer",event:"updateAxisPointer",update:":updateAxisPointer"},function(t,e,i){var n=t.currTrigger,o=[t.x,t.y],a=t,r=t.dispatchAction||m(i.dispatchAction,i),s=e.getComponent("axisPointer").coordSysAxesInfo;if(s){xf(o)&&(o=UA({seriesIndex:a.seriesIndex,dataIndex:a.dataIndex},e).point);var l=xf(o),h=a.axesInfo,u=s.axesInfo,c="leave"===n||xf(o),d={},f={},g={list:[],map:{}},p={showPointer:jA(df,f),showTooltip:jA(ff,g)};XA(s.coordSysMap,function(t,e){var i=l||t.containPoint(o);XA(s.coordSysAxesInfo[e],function(t,e){var n=t.axis,a=vf(h,t);if(!c&&i&&(!h||a)){var r=a&&a.value;null!=r||l||(r=n.pointToData(o)),null!=r&&uf(t,r,p,!1,d)}})});var v={};return XA(u,function(t,e){var i=t.linkGroup;i&&!f[e]&&XA(i.axesInfo,function(e,n){var o=f[n];if(e!==t&&o){var a=o.value;i.mapper&&(a=t.axis.scale.parse(i.mapper(a,yf(e),yf(t)))),v[t.key]=a}})}),XA(v,function(t,e){uf(u[e],t,p,!0,d)}),gf(f,u,d),pf(g,o,t,r),mf(u,0,i),d}});var nC=["x","y"],oC=["width","height"],aC=Af.extend({makeElOption:function(t,e,i,n,o){var a=i.axis,r=a.coordinateSystem,s=Uf(r,1-Zf(a)),l=r.dataToPoint(e)[0],h=n.get("type");if(h&&"none"!==h){var u=Of(n),c=rC[h](a,l,s,u);c.style=u,t.graphicKey=c.type,t.pointer=c}Vf(e,t,hf(i),i,n,o)},getHandleTransform:function(t,e,i){var n=hf(e,{labelInside:!1});return n.labelMargin=i.get("handle.margin"),{position:Rf(e.axis,t,n),rotation:n.rotation+(n.labelDirection<0?Math.PI:0)}},updateHandleTransform:function(t,e,i,n){var o=i.axis,a=o.coordinateSystem,r=Zf(o),s=Uf(a,r),l=t.position;l[r]+=e[r],l[r]=Math.min(s[1],l[r]),l[r]=Math.max(s[0],l[r]);var h=Uf(a,1-r),u=(h[1]+h[0])/2,c=[u,u];return c[r]=l[r],{position:l,rotation:t.rotation,cursorPoint:c,tooltipOption:{verticalAlign:"middle"}}}}),rC={line:function(t,e,i,n){var o=Bf([e,i[0]],[e,i[1]],Zf(t));return Yn({shape:o,style:n}),{type:"Line",shape:o}},shadow:function(t,e,i,n){var o=t.getBandWidth(),a=i[1]-i[0];return{type:"Rect",shape:Gf([e-o/2,i[0]],[o,a],Zf(t))}}};EM.registerAxisPointerClass("SingleAxisPointer",aC),lr({type:"single"});var sC=yw.extend({type:"series.themeRiver",dependencies:["singleAxis"],nameMap:null,init:function(t){sC.superApply(this,"init",arguments),this.legendDataProvider=function(){return this.getRawData()}},fixData:function(t){for(var e=t.length,i=f(jc().key(function(t){return t[2]}).entries(t),function(t){return{name:t.key,dataList:t.values}}),n=i.length,o=-1,a=-1,r=0;ro&&(o=s,a=r)}for(var l=0;ln[1]&&n.reverse(),{coordSys:{type:"polar",cx:t.cx,cy:t.cy,r:n[1],r0:n[0]},api:{coord:m(function(n){var o=e.dataToRadius(n[0]),a=i.dataToAngle(n[1]),r=t.coordToPoint([o,a]);return r.push(o,a*Math.PI/180),r}),size:m(Jf,t)}}},calendar:function(t){var e=t.getRect(),i=t.getRangeInfo();return{coordSys:{type:"calendar",x:e.x,y:e.y,width:e.width,height:e.height,cellWidth:t.getCellWidth(),cellHeight:t.getCellHeight(),rangeInfo:{start:i.start,end:i.end,weeks:i.weeks,dayCount:i.allDay}},api:{coord:m(t.dataToPoint,t)}}}};hr({type:"series.custom",dependencies:["grid","polar","geo","singleAxis","calendar"],defaultOption:{coordinateSystem:"cartesian2d",zlevel:0,z:2,legendHoverLink:!0},getInitialData:function(t,e){return Sr(t.data,this,e)}}),ur({type:"custom",_data:null,render:function(t,e,i){var n=this._data,o=t.getData(),a=this.group,r=ig(t,o,e,i);o.diff(n).add(function(e){o.hasValue(e)&&og(null,e,r(e),t,a,o)}).update(function(e,i){var s=n.getItemGraphicEl(i);o.hasValue(e)?og(s,e,r(e),t,a,o):s&&a.remove(s)}).remove(function(t){var e=n.getItemGraphicEl(t);e&&a.remove(e)}).execute(),this._data=o},dispose:N}),tr(function(t){var e=t.graphic;y(e)?e[0]&&e[0].elements?t.graphic=[t.graphic[0]]:t.graphic=[{elements:e}]:e&&!e.elements&&(t.graphic=[{elements:[e]}])});var gC=sr({type:"graphic",defaultOption:{elements:[],parentId:null},_elOptionsToUpdate:null,mergeOption:function(t){var e=this.option.elements;this.option.elements=null,gC.superApply(this,"mergeOption",arguments),this.option.elements=e},optionUpdated:function(t,e){var i=this.option,n=(e?i:t).elements,o=i.elements=e?[]:i.elements,a=[];this._flatten(n,a);var r=Vo(o,a);Bo(r);var s=this._elOptionsToUpdate=[];d(r,function(t,e){var i=t.option;i&&(s.push(i),gg(t,i),pg(o,e,i),mg(o[e],i))},this);for(var l=o.length-1;l>=0;l--)null==o[l]?o.splice(l,1):delete o[l].$action},_flatten:function(t,e,i){d(t,function(t){if(t){i&&(t.parentOption=i),e.push(t);var n=t.children;"group"===t.type&&n&&this._flatten(n,e,t),delete t.children}},this)},useElOptionsToUpdate:function(){var t=this._elOptionsToUpdate;return this._elOptionsToUpdate=null,t}});lr({type:"graphic",init:function(t,e){this._elMap=z(),this._lastGraphicModel},render:function(t,e,i){t!==this._lastGraphicModel&&this._clear(),this._lastGraphicModel=t,this._updateElements(t,i),this._relocate(t,i)},_updateElements:function(t,e){var i=t.useElOptionsToUpdate();if(i){var n=this._elMap,o=this.group;d(i,function(t){var e=t.$action,i=t.id,a=n.get(i),r=t.parentId,s=null!=r?n.get(r):o;if("text"===t.type){var l=t.style;t.hv&&t.hv[1]&&(l.textVerticalAlign=l.textBaseline=null),!l.hasOwnProperty("textFill")&&l.fill&&(l.textFill=l.fill),!l.hasOwnProperty("textStroke")&&l.stroke&&(l.textStroke=l.stroke)}var h=dg(t);e&&"merge"!==e?"replace"===e?(cg(a,n),ug(i,s,h,n)):"remove"===e&&cg(a,n):a?a.attr(h):ug(i,s,h,n);var u=n.get(i);u&&(u.__ecGraphicWidth=t.width,u.__ecGraphicHeight=t.height)})}},_relocate:function(t,e){for(var i=t.option.elements,n=this.group,o=this._elMap,a=i.length-1;a>=0;a--){var r=i[a],s=o.get(r.id);if(s){var l=s.parent;Jo(s,r,l===n?{width:e.getWidth(),height:e.getHeight()}:{width:l.__ecGraphicWidth||0,height:l.__ecGraphicHeight||0},null,{hv:r.hv,boundingMode:r.bounding})}}},_clear:function(){var t=this._elMap;t.each(function(e){cg(e,t)}),this._elMap=z()},dispose:function(){this._clear()}});var pC=sr({type:"legend.plain",dependencies:["series"],layoutMode:{type:"box",ignoreSize:!0},init:function(t,e,i){this.mergeDefaultAndTheme(t,i),t.selected=t.selected||{}},mergeOption:function(t){pC.superCall(this,"mergeOption",t)},optionUpdated:function(){this._updateData(this.ecModel);var t=this._data;if(t[0]&&"single"===this.get("selectedMode")){for(var e=!1,i=0;i=0},defaultOption:{zlevel:0,z:4,show:!0,orient:"horizontal",left:"center",top:0,align:"auto",backgroundColor:"rgba(0,0,0,0)",borderColor:"#ccc",borderRadius:0,borderWidth:0,padding:5,itemGap:10,itemWidth:25,itemHeight:14,inactiveColor:"#ccc",textStyle:{color:"#333"},selectedMode:!0,tooltip:{show:!1}}});ir("legendToggleSelect","legendselectchanged",v(vg,"toggleSelected")),ir("legendSelect","legendselected",v(vg,"select")),ir("legendUnSelect","legendunselected",v(vg,"unSelect"));var mC=v,vC=d,yC=jy,xC=lr({type:"legend.plain",newlineDisabled:!1,init:function(){this.group.add(this._contentGroup=new yC),this._backgroundEl},getContentGroup:function(){return this._contentGroup},render:function(t,e,i){if(this.resetInner(),t.get("show",!0)){var n=t.get("align");n&&"auto"!==n||(n="right"===t.get("left")&&"vertical"===t.get("orient")?"right":"left"),this.renderInner(n,t,e,i);var o=t.getBoxLayoutParams(),a={width:i.getWidth(),height:i.getHeight()},s=t.get("padding"),l=Ko(o,a,s),h=this.layoutInner(t,n,l),u=Ko(r({width:h.width,height:h.height},o),a,s);this.group.attr("position",[u.x-h.x,u.y-h.y]),this.group.add(this._backgroundEl=xg(h,t))}},resetInner:function(){this.getContentGroup().removeAll(),this._backgroundEl&&this.group.remove(this._backgroundEl)},renderInner:function(t,e,i,n){var o=this.getContentGroup(),a=z(),r=e.get("selectedMode");vC(e.getData(),function(s,l){var h=s.get("name");if(this.newlineDisabled||""!==h&&"\n"!==h){var u=i.getSeriesByName(h)[0];if(!a.get(h))if(u){var c=u.getData(),d=c.getVisual("color");"function"==typeof d&&(d=d(u.getDataParams(0)));var f=c.getVisual("legendSymbol")||"roundRect",g=c.getVisual("symbol");this._createItem(h,l,s,e,f,g,t,d,r).on("click",mC(_g,h,n)).on("mouseover",mC(bg,u,null,n)).on("mouseout",mC(wg,u,null,n)),a.set(h,!0)}else i.eachRawSeries(function(i){if(!a.get(h)&&i.legendDataProvider){var o=i.legendDataProvider(),u=o.indexOfName(h);if(u<0)return;var c=o.getItemVisual(u,"color");this._createItem(h,l,s,e,"roundRect",null,t,c,r).on("click",mC(_g,h,n)).on("mouseover",mC(bg,i,h,n)).on("mouseout",mC(wg,i,h,n)),a.set(h,!0)}},this)}else o.add(new yC({newline:!0}))},this)},_createItem:function(t,e,i,n,o,r,s,l,h){var u=n.get("itemWidth"),c=n.get("itemHeight"),d=n.get("inactiveColor"),f=n.isSelected(t),g=new yC,p=i.getModel("textStyle"),m=i.get("icon"),v=i.getModel("tooltip"),y=v.parentModel;if(o=m||o,g.add(Hr(o,0,0,u,c,f?l:d,!0)),!m&&r&&(r!==o||"none"==r)){var x=.8*c;"none"===r&&(r="circle"),g.add(Hr(r,(u-x)/2,(c-x)/2,x,x,f?l:d))}var _="left"===s?u+5:-5,b=s,w=n.get("formatter"),S=t;"string"==typeof w&&w?S=w.replace("{name}",null!=t?t:""):"function"==typeof w&&(S=w(t)),g.add(new ib({style:fo({},p,{text:S,x:_,y:c/2,textFill:f?p.getTextColor():d,textAlign:b,textVerticalAlign:"middle"})}));var M=new db({shape:g.getBoundingRect(),invisible:!0,tooltip:v.get("show")?a({content:t,formatter:y.get("formatter",!0)||function(){return t},formatterParams:{componentType:"legend",legendIndex:n.componentIndex,name:t,$vars:["name"]}},v.option):null});return g.add(M),g.eachChild(function(t){t.silent=!0}),M.silent=!h,this.getContentGroup().add(g),uo(g),g.__legendDataIndex=e,g},layoutInner:function(t,e,i){var n=this.getContentGroup();Hb(t.get("orient"),n,t.get("itemGap"),i.width,i.height);var o=n.getBoundingRect();return n.attr("position",[-o.x,-o.y]),this.group.getBoundingRect()}});er(function(t){var e=t.findComponents({mainType:"legend"});e&&e.length&&t.filterSeries(function(t){for(var i=0;ii[s],f=[-u.x,-u.y];f[r]=n.position[r];var g=[0,0],p=[-c.x,-c.y],m=T(t.get("pageButtonGap",!0),t.get("itemGap",!0));d&&("end"===t.get("pageButtonPosition",!0)?p[r]+=i[s]-c[s]:g[r]+=c[s]+m),p[1-r]+=u[l]/2-c[l]/2,n.attr("position",f),o.attr("position",g),a.attr("position",p);var v=this.group.getBoundingRect();if((v={x:0,y:0})[s]=d?i[s]:u[s],v[l]=Math.max(u[l],c[l]),v[h]=Math.min(0,c[h]+p[1-r]),o.__rectSize=i[s],d){var y={x:0,y:0};y[s]=Math.max(i[s]-c[s]-m,0),y[l]=v[l],o.setClipPath(new db({shape:y})),o.__rectSize=y[s]}else a.eachChild(function(t){t.attr({invisible:!0,silent:!0})});var x=this._getPageInfo(t);return null!=x.pageIndex&&wo(n,{position:x.contentPosition},!!d&&t),this._updatePageInfoView(t,x),v},_pageGo:function(t,e,i){var n=this._getPageInfo(e)[t];null!=n&&i.dispatchAction({type:"legendScroll",scrollDataIndex:n,legendId:e.id})},_updatePageInfoView:function(t,e){var i=this._controllerGroup;d(["pagePrev","pageNext"],function(n){var o=null!=e[n+"DataIndex"],a=i.childOfName(n);a&&(a.setStyle("fill",o?t.get("pageIconColor",!0):t.get("pageIconInactiveColor",!0)),a.cursor=o?"pointer":"default")});var n=i.childOfName("pageText"),o=t.get("pageFormatter"),a=e.pageIndex,r=null!=a?a+1:0,s=e.pageCount;n&&o&&n.setStyle("text",_(o)?o.replace("{current}",r).replace("{total}",s):o({current:r,total:s}))},_getPageInfo:function(t){function e(t){var e=t.getBoundingRect().clone();return e[f]+=t.position[u],e}var i,n,o,a,r=t.get("scrollDataIndex",!0),s=this.getContentGroup(),l=s.getBoundingRect(),h=this._containerGroup.__rectSize,u=t.getOrient().index,c=wC[u],d=wC[1-u],f=SC[u],g=s.position.slice();this._showController?s.eachChild(function(t){t.__legendDataIndex===r&&(a=t)}):a=s.childAt(0);var p=h?Math.ceil(l[c]/h):0;if(a){var m=a.getBoundingRect(),v=a.position[u]+m[f];g[u]=-v-l[f],i=Math.floor(p*(v+m[f]+h/2)/l[c]),i=l[c]&&p?Math.max(0,Math.min(p-1,i)):-1;var y={x:0,y:0};y[c]=h,y[d]=l[d],y[f]=-g[u]-l[f];var x,_=s.children();if(s.eachChild(function(t,i){var n=e(t);n.intersect(y)&&(null==x&&(x=i),o=t.__legendDataIndex),i===_.length-1&&n[f]+n[c]<=y[f]+y[c]&&(o=null)}),null!=x){var b=e(_[x]);if(y[f]=b[f]+b[c]-y[c],x<=0&&b[f]>=y[f])n=null;else{for(;x>0&&e(_[x-1]).intersect(y);)x--;n=_[x].__legendDataIndex}}}return{contentPosition:g,pageIndex:i,pageCount:p,pagePrevDataIndex:n,pageNextDataIndex:o}}});ir("legendScroll","legendscroll",function(t,e){var i=t.scrollDataIndex;null!=i&&e.eachComponent({mainType:"legend",subType:"scroll",query:t},function(t){t.setScrollDataIndex(i)})}),sr({type:"tooltip",dependencies:["axisPointer"],defaultOption:{zlevel:0,z:8,show:!0,showContent:!0,trigger:"item",triggerOn:"mousemove|click",alwaysShowContent:!1,displayMode:"single",confine:!1,showDelay:0,hideDelay:100,transitionDuration:.4,enterable:!1,backgroundColor:"rgba(50,50,50,0.7)",borderColor:"#333",borderRadius:4,borderWidth:0,padding:5,extraCssText:"",axisPointer:{type:"line",axis:"auto",animation:"auto",animationDurationUpdate:200,animationEasingUpdate:"exponentialOut",crossStyle:{color:"#999",width:1,type:"dashed",textStyle:{}}},textStyle:{color:"#fff",fontSize:14}}});var IC=d,TC=Bi,AC=["","-webkit-","-moz-","-o-"];Ag.prototype={constructor:Ag,_enterable:!0,update:function(){var t=this._container,e=t.currentStyle||document.defaultView.getComputedStyle(t),i=t.style;"absolute"!==i.position&&"absolute"!==e.position&&(i.position="relative")},show:function(t){clearTimeout(this._hideTimeout);var e=this.el;e.style.cssText="position:absolute;display:block;border-style:solid;white-space:nowrap;z-index:9999999;"+Tg(t)+";left:"+this._x+"px;top:"+this._y+"px;"+(t.get("extraCssText")||""),e.style.display=e.innerHTML?"block":"none",this._show=!0},setContent:function(t){this.el.innerHTML=null==t?"":t},setEnterable:function(t){this._enterable=t},getSize:function(){var t=this.el;return[t.clientWidth,t.clientHeight]},moveTo:function(t,e){var i,n=this._zr;n&&n.painter&&(i=n.painter.getViewportRootOffset())&&(t+=i.offsetLeft,e+=i.offsetTop);var o=this.el.style;o.left=t+"px",o.top=e+"px",this._x=t,this._y=e},hide:function(){this.el.style.display="none",this._show=!1},hideLater:function(t){!this._show||this._inContent&&this._enterable||(t?(this._hideDelay=t,this._show=!1,this._hideTimeout=setTimeout(m(this.hide,this),t)):this.hide())},isShow:function(){return this._show}};var CC=m,DC=d,LC=Si,kC=new db({shape:{x:-1,y:-1,width:2,height:2}});lr({type:"tooltip",init:function(t,e){if(!Uv.node){var i=new Ag(e.getDom(),e);this._tooltipContent=i}},render:function(t,e,i){if(!Uv.node){this.group.removeAll(),this._tooltipModel=t,this._ecModel=e,this._api=i,this._lastDataByCoordSys=null,this._alwaysShowContent=t.get("alwaysShowContent");var n=this._tooltipContent;n.update(),n.setEnterable(t.get("enterable")),this._initGlobalListener(),this._keepShow()}},_initGlobalListener:function(){var t=this._tooltipModel.get("triggerOn");_f("itemTooltip",this._api,CC(function(e,i,n){"none"!==t&&(t.indexOf(e)>=0?this._tryShow(i,n):"leave"===e&&this._hide(n))},this))},_keepShow:function(){var t=this._tooltipModel,e=this._ecModel,i=this._api;if(null!=this._lastX&&null!=this._lastY&&"none"!==t.get("triggerOn")){var n=this;clearTimeout(this._refreshUpdateTimeout),this._refreshUpdateTimeout=setTimeout(function(){n.manuallyShowTip(t,e,i,{x:n._lastX,y:n._lastY})})}},manuallyShowTip:function(t,e,i,n){if(n.from!==this.uid&&!Uv.node){var o=Dg(n,i);this._ticket="";var a=n.dataByCoordSys;if(n.tooltip&&null!=n.x&&null!=n.y){var r=kC;r.position=[n.x,n.y],r.update(),r.tooltip=n.tooltip,this._tryShow({offsetX:n.x,offsetY:n.y,target:r},o)}else if(a)this._tryShow({offsetX:n.x,offsetY:n.y,position:n.position,event:{},dataByCoordSys:n.dataByCoordSys,tooltipOption:n.tooltipOption},o);else if(null!=n.seriesIndex){if(this._manuallyAxisShowTip(t,e,i,n))return;var s=UA(n,e),l=s.point[0],h=s.point[1];null!=l&&null!=h&&this._tryShow({offsetX:l,offsetY:h,position:n.position,target:s.el,event:{}},o)}else null!=n.x&&null!=n.y&&(i.dispatchAction({type:"updateAxisPointer",x:n.x,y:n.y}),this._tryShow({offsetX:n.x,offsetY:n.y,position:n.position,target:i.getZr().findHover(n.x,n.y).target,event:{}},o))}},manuallyHideTip:function(t,e,i,n){var o=this._tooltipContent;this._alwaysShowContent||o.hideLater(this._tooltipModel.get("hideDelay")),this._lastX=this._lastY=null,n.from!==this.uid&&this._hide(Dg(n,i))},_manuallyAxisShowTip:function(t,e,i,n){var o=n.seriesIndex,a=n.dataIndex,r=e.getComponent("axisPointer").coordSysAxesInfo;if(null!=o&&null!=a&&null!=r){var s=e.getSeriesByIndex(o);if(s&&"axis"===(t=Cg([s.getData().getItemModel(a),s,(s.coordinateSystem||{}).model,t])).get("trigger"))return i.dispatchAction({type:"updateAxisPointer",seriesIndex:o,dataIndex:a,position:n.position}),!0}},_tryShow:function(t,e){var i=t.target;if(this._tooltipModel){this._lastX=t.offsetX,this._lastY=t.offsetY;var n=t.dataByCoordSys;n&&n.length?this._showAxisTooltip(n,t):i&&null!=i.dataIndex?(this._lastDataByCoordSys=null,this._showSeriesItemTooltip(t,i,e)):i&&i.tooltip?(this._lastDataByCoordSys=null,this._showComponentItemTooltip(t,i,e)):(this._lastDataByCoordSys=null,this._hide(e))}},_showOrMove:function(t,e){var i=t.get("showDelay");e=m(e,this),clearTimeout(this._showTimout),i>0?this._showTimout=setTimeout(e,i):e()},_showAxisTooltip:function(t,e){var i=this._ecModel,n=this._tooltipModel,o=[e.offsetX,e.offsetY],a=[],r=[],s=Cg([e.tooltipOption,n]);DC(t,function(t){DC(t.dataByAxis,function(t){var e=i.getComponent(t.axisDim+"Axis",t.axisIndex),n=t.value,o=[];if(e&&null!=n){var s=Ef(n,e.axis,i,t.seriesDataIndices,t.valueLabelOpt);d(t.seriesDataIndices,function(a){var l=i.getSeriesByIndex(a.seriesIndex),h=a.dataIndexInside,u=l&&l.getDataParams(h);u.axisDim=t.axisDim,u.axisIndex=t.axisIndex,u.axisType=t.axisType,u.axisId=t.axisId,u.axisValue=Br(e.axis,n),u.axisValueLabel=s,u&&(r.push(u),o.push(l.formatTooltip(h,!0)))});var l=s;a.push((l?Gi(l)+"
":"")+o.join("
"))}})},this),a.reverse(),a=a.join("

");var l=e.position;this._showOrMove(s,function(){this._updateContentNotChangedOnAxis(t)?this._updatePosition(s,l,o[0],o[1],this._tooltipContent,r):this._showTooltipContent(s,a,r,Math.random(),o[0],o[1],l)})},_showSeriesItemTooltip:function(t,e,i){var n=this._ecModel,o=e.seriesIndex,a=n.getSeriesByIndex(o),r=e.dataModel||a,s=e.dataIndex,l=e.dataType,h=r.getData(),u=Cg([h.getItemModel(s),r,a&&(a.coordinateSystem||{}).model,this._tooltipModel]),c=u.get("trigger");if(null==c||"item"===c){var d=r.getDataParams(s,l),f=r.formatTooltip(s,!1,l),g="item_"+r.name+"_"+s;this._showOrMove(u,function(){this._showTooltipContent(u,f,d,g,t.offsetX,t.offsetY,t.position,t.target)}),i({type:"showTip",dataIndexInside:s,dataIndex:h.getRawIndex(s),seriesIndex:o,from:this.uid})}},_showComponentItemTooltip:function(t,e,i){var n=e.tooltip;if("string"==typeof n){var o=n;n={content:o,formatter:o}}var a=new Lo(n,this._tooltipModel,this._ecModel),r=a.get("content"),s=Math.random();this._showOrMove(a,function(){this._showTooltipContent(a,r,a.get("formatterParams")||{},s,t.offsetX,t.offsetY,t.position,e)}),i({type:"showTip",from:this.uid})},_showTooltipContent:function(t,e,i,n,o,a,r,s){if(this._ticket="",t.get("showContent")&&t.get("show")){var l=this._tooltipContent,h=t.get("formatter");r=r||t.get("position");var u=e;if(h&&"string"==typeof h)u=Wi(h,i,!0);else if("function"==typeof h){var c=CC(function(e,n){e===this._ticket&&(l.setContent(n),this._updatePosition(t,r,o,a,l,i,s))},this);this._ticket=n,u=h(i,n,c)}l.setContent(u),l.show(t),this._updatePosition(t,r,o,a,l,i,s)}},_updatePosition:function(t,e,i,n,o,a,r){var s=this._api.getWidth(),l=this._api.getHeight();e=e||t.get("position");var h=o.getSize(),u=t.get("align"),c=t.get("verticalAlign"),d=r&&r.getBoundingRect().clone();if(r&&d.applyTransform(r.transform),"function"==typeof e&&(e=e([i,n],a,o.el,d,{viewSize:[s,l],contentSize:h.slice()})),y(e))i=LC(e[0],s),n=LC(e[1],l);else if(b(e)){e.width=h[0],e.height=h[1];var f=Ko(e,{width:s,height:l});i=f.x,n=f.y,u=null,c=null}else"string"==typeof e&&r?(i=(g=Og(e,d,h))[0],n=g[1]):(i=(g=Lg(i,n,o.el,s,l,u?null:20,c?null:20))[0],n=g[1]);if(u&&(i-=zg(u)?h[0]/2:"right"===u?h[0]:0),c&&(n-=zg(c)?h[1]/2:"bottom"===c?h[1]:0),t.get("confine")){var g=kg(i,n,o.el,s,l);i=g[0],n=g[1]}o.moveTo(i,n)},_updateContentNotChangedOnAxis:function(t){var e=this._lastDataByCoordSys,i=!!e&&e.length===t.length;return i&&DC(e,function(e,n){var o=e.dataByAxis||{},a=(t[n]||{}).dataByAxis||[];(i&=o.length===a.length)&&DC(o,function(t,e){var n=a[e]||{},o=t.seriesDataIndices||[],r=n.seriesDataIndices||[];(i&=t.value===n.value&&t.axisType===n.axisType&&t.axisId===n.axisId&&o.length===r.length)&&DC(o,function(t,e){var n=r[e];i&=t.seriesIndex===n.seriesIndex&&t.dataIndex===n.dataIndex})})}),this._lastDataByCoordSys=t,!!i},_hide:function(t){this._lastDataByCoordSys=null,t({type:"hideTip",from:this.uid})},dispose:function(t,e){Uv.node||(this._tooltipContent.hide(),Tf("itemTooltip",e))}}),ir({type:"showTip",event:"showTip",update:"tooltip:manuallyShowTip"},function(){}),ir({type:"hideTip",event:"hideTip",update:"tooltip:manuallyHideTip"},function(){}),Vg.prototype={constructor:Vg,pointToData:function(t,e){return this.polar.pointToData(t,e)["radius"===this.dim?0:1]},dataToRadius:US.prototype.dataToCoord,radiusToData:US.prototype.coordToData},h(Vg,US),Bg.prototype={constructor:Bg,pointToData:function(t,e){return this.polar.pointToData(t,e)["radius"===this.dim?0:1]},dataToAngle:US.prototype.dataToCoord,angleToData:US.prototype.coordToData},h(Bg,US);var PC=function(t){this.name=t||"",this.cx=0,this.cy=0,this._radiusAxis=new Vg,this._angleAxis=new Bg,this._radiusAxis.polar=this._angleAxis.polar=this};PC.prototype={type:"polar",axisPointerEnabled:!0,constructor:PC,dimensions:["radius","angle"],model:null,containPoint:function(t){var e=this.pointToCoord(t);return this._radiusAxis.contain(e[0])&&this._angleAxis.contain(e[1])},containData:function(t){return this._radiusAxis.containData(t[0])&&this._angleAxis.containData(t[1])},getAxis:function(t){return this["_"+t+"Axis"]},getAxes:function(){return[this._radiusAxis,this._angleAxis]},getAxesByScale:function(t){var e=[],i=this._angleAxis,n=this._radiusAxis;return i.scale.type===t&&e.push(i),n.scale.type===t&&e.push(n),e},getAngleAxis:function(){return this._angleAxis},getRadiusAxis:function(){return this._radiusAxis},getOtherAxis:function(t){var e=this._angleAxis;return t===e?this._radiusAxis:e},getBaseAxis:function(){return this.getAxesByScale("ordinal")[0]||this.getAxesByScale("time")[0]||this.getAngleAxis()},getTooltipAxes:function(t){var e=null!=t&&"auto"!==t?this.getAxis(t):this.getBaseAxis();return{baseAxes:[e],otherAxes:[this.getOtherAxis(e)]}},dataToPoint:function(t,e){return this.coordToPoint([this._radiusAxis.dataToRadius(t[0],e),this._angleAxis.dataToAngle(t[1],e)])},pointToData:function(t,e){var i=this.pointToCoord(t);return[this._radiusAxis.radiusToData(i[0],e),this._angleAxis.angleToData(i[1],e)]},pointToCoord:function(t){var e=t[0]-this.cx,i=t[1]-this.cy,n=this.getAngleAxis(),o=n.getExtent(),a=Math.min(o[0],o[1]),r=Math.max(o[0],o[1]);n.inverse?a=r-360:r=a+360;var s=Math.sqrt(e*e+i*i);e/=s,i/=s;for(var l=Math.atan2(-i,e)/Math.PI*180,h=lr;)l+=360*h;return[s,l]},coordToPoint:function(t){var e=t[0],i=t[1]/180*Math.PI;return[Math.cos(i)*e+this.cx,-Math.sin(i)*e+this.cy]}};var OC=Ub.extend({type:"polarAxis",axis:null,getCoordSysModel:function(){return this.ecModel.queryComponents({mainType:"polar",index:this.option.polarIndex,id:this.option.polarId})[0]}});n(OC.prototype,zS);var zC={angle:{startAngle:90,clockwise:!0,splitNumber:12,axisLabel:{rotate:!1}},radius:{splitNumber:5}};_M("angle",OC,Gg,zC.angle),_M("radius",OC,Gg,zC.radius),sr({type:"polar",dependencies:["polarAxis","angleAxis"],coordinateSystem:null,findAxisModel:function(t){var e;return this.ecModel.eachComponent(t,function(t){t.getCoordSysModel()===this&&(e=t)},this),e},defaultOption:{zlevel:0,z:0,center:["50%","50%"],radius:"80%"}});var NC={dimensions:PC.prototype.dimensions,create:function(t,e){var i=[];return t.eachComponent("polar",function(t,n){var o=new PC(n);o.update=Hg;var a=o.getRadiusAxis(),r=o.getAngleAxis(),s=t.findAxisModel("radiusAxis"),l=t.findAxisModel("angleAxis");Fg(a,s),Fg(r,l),Wg(o,t,e),i.push(o),t.coordinateSystem=o,o.model=t}),t.eachSeries(function(e){if("polar"===e.get("coordinateSystem")){var i=t.queryComponents({mainType:"polar",index:e.get("polarIndex"),id:e.get("polarId")})[0];e.coordinateSystem=i.coordinateSystem}}),i}};ua.register("polar",NC);var EC=["axisLine","axisLabel","axisTick","splitLine","splitArea"];EM.extend({type:"angleAxis",axisPointerClass:"PolarAxisPointer",render:function(t,e){if(this.group.removeAll(),t.get("show")){var i=t.axis,n=i.polar,o=n.getRadiusAxis().getExtent(),a=i.getTicksCoords();"category"!==i.type&&a.pop(),d(EC,function(e){!t.get(e+".show")||i.scale.isBlank()&&"axisLine"!==e||this["_"+e](t,n,a,o)},this)}},_axisLine:function(t,e,i,n){var o=t.getModel("axisLine.lineStyle"),a=new nb({shape:{cx:e.cx,cy:e.cy,r:n[Ug(e)]},style:o.getLineStyle(),z2:1,silent:!0});a.style.fill=null,this.group.add(a)},_axisTick:function(t,e,i,n){var o=t.getModel("axisTick"),a=(o.get("inside")?-1:1)*o.get("length"),s=n[Ug(e)],l=f(i,function(t){return new fb({shape:Zg(e,[s,s+a],t)})});this.group.add(Ib(l,{style:r(o.getModel("lineStyle").getLineStyle(),{stroke:t.get("axisLine.lineStyle.color")})}))},_axisLabel:function(t,e,i,n){for(var o=t.axis,a=t.get("data"),r=t.getModel("axisLabel"),s=t.getFormattedLabels(),l=r.get("margin"),h=o.getLabelsCoords(),u=0;uf?"left":"right",m=Math.abs(d[1]-g)/c<.3?"middle":d[1]>g?"top":"bottom";a&&a[u]&&a[u].textStyle&&(r=new Lo(a[u].textStyle,r,r.ecModel));var v=new ib({silent:!0});this.group.add(v),fo(v.style,r,{x:d[0],y:d[1],textFill:r.getTextColor()||t.get("axisLine.lineStyle.color"),text:s[u],textAlign:p,textVerticalAlign:m})}},_splitLine:function(t,e,i,n){var o=t.getModel("splitLine").getModel("lineStyle"),a=o.get("color"),s=0;a=a instanceof Array?a:[a];for(var l=[],h=0;h=0?"p":"n",S=i.pointToCoord(M[n]),I=r[u][n][p];if("radius"===g.dim)o=I,s=S[0],c=(h=(-S[1]+d)*Math.PI/180)+f*Math.PI/180,Math.abs(s)0?C=A[1]:C===A[1]&&t<0&&(C=A[0]),r[u][n][p]=C}e.setItemLayout(n,{cx:m,cy:v,r0:o,r:s,startAngle:h,endAngle:c})}},!0)}},this)},"bar")),lr({type:"polar"}),u(Ub.extend({type:"geo",coordinateSystem:null,layoutMode:"box",init:function(t){Ub.prototype.init.apply(this,arguments),zo(t.label,["show"])},optionUpdated:function(){var t=this.option,e=this;t.regions=xI.getFilledRegions(t.regions,t.map,t.nameMap),this._optionModelMap=g(t.regions||[],function(t,i){return i.name&&t.set(i.name,new Lo(i,e)),t},z()),this.updateSelectedMap(t.regions)},defaultOption:{zlevel:0,z:0,show:!0,left:"center",top:"center",aspectScale:.75,silent:!1,map:"",boundingCoords:null,center:null,zoom:1,scaleLimit:null,label:{normal:{show:!1,color:"#000"},emphasis:{show:!0,color:"rgb(100,0,0)"}},itemStyle:{normal:{borderWidth:.5,borderColor:"#444",color:"#eee"},emphasis:{color:"rgba(255,215,0,0.8)"}},regions:[]},getRegionModel:function(t){return this._optionModelMap.get(t)||new Lo(null,this,this.ecModel)},getFormattedLabel:function(t,e){var i=this.getRegionModel(t).get("label."+e+".formatter"),n={name:t};return"function"==typeof i?(n.status=e,i(n)):"string"==typeof i?i.replace("{a}",null!=t?t:""):void 0},setZoom:function(t){this.option.zoom=t},setCenter:function(t){this.option.center=t}}),$M),lr({type:"geo",init:function(t,e){var i=new Ul(e,!0);this._mapDraw=i,this.group.add(i.group)},render:function(t,e,i,n){if(!n||"geoToggleSelect"!==n.type||n.from!==this.uid){var o=this._mapDraw;t.get("show")?o.draw(t,e,i,this,n):this._mapDraw.group.removeAll(),this.group.silent=t.get("silent")}},dispose:function(){this._mapDraw&&this._mapDraw.remove()}}),qg("toggleSelected",{type:"geoToggleSelect",event:"geoselectchanged"}),qg("select",{type:"geoSelect",event:"geoselected"}),qg("unSelect",{type:"geoUnSelect",event:"geounselected"});var WC=["rect","polygon","keep","clear"],HC=d,FC={lineX:tp(0),lineY:tp(1),rect:{point:function(t,e,i){return t&&i.boundingRect.contain(t[0],t[1])},rect:function(t,e,i){return t&&i.boundingRect.intersect(t)}},polygon:{point:function(t,e,i){return t&&i.boundingRect.contain(t[0],t[1])&&Ur(i.range,t[0],t[1])},rect:function(t,e,i){var n=i.range;if(!t||n.length<=1)return!1;var o=t.x,a=t.y,r=t.width,s=t.height,l=n[0];return!!(Ur(n,o,a)||Ur(n,o+r,a)||Ur(n,o,a+s)||Ur(n,o+r,a+s)||jt.create(t).contain(l[0],l[1])||ip(o,a,o+r,a,n)||ip(o,a,o,a+s,n)||ip(o+r,a,o+r,a+s,n)||ip(o,a+s,o+r,a+s,n))||void 0}}},ZC=d,UC=l,XC=v,jC=["dataToPoint","pointToData"],qC=["grid","xAxis","yAxis","geo","graph","polar","radiusAxis","angleAxis","bmap"],YC=rp.prototype;YC.setOutputRanges=function(t,e){this.matchOutputRanges(t,e,function(t,e,i){if((t.coordRanges||(t.coordRanges=[])).push(e),!t.coordRange){t.coordRange=e;var n=QC[t.brushType](0,i,e);t.__rangeOffset={offset:tD[t.brushType](n.values,t.range,[1,1]),xyMinMax:n.xyMinMax}}})},YC.matchOutputRanges=function(t,e,i){ZC(t,function(t){var n=this.findTargetInfo(t,e);n&&!0!==n&&d(n.coordSyses,function(n){var o=QC[t.brushType](1,n,t.range);i(t,o.values,n,e)})},this)},YC.setInputRanges=function(t,e){ZC(t,function(t){var i=this.findTargetInfo(t,e);if(t.range=t.range||[],i&&!0!==i){t.panelId=i.panelId;var n=QC[t.brushType](0,i.coordSys,t.coordRange),o=t.__rangeOffset;t.range=o?tD[t.brushType](n.values,o.offset,cp(n.xyMinMax,o.xyMinMax)):n.values}},this)},YC.makePanelOpts=function(t,e){return f(this._targetInfoList,function(i){var n=i.getPanelRect();return{panelId:i.panelId,defaultBrushType:e&&e(i),clipPath:Lc(n),isTargetByCursor:Pc(n,t,i.coordSysModel),getLinearBrushOtherExtent:kc(n)}})},YC.controlSeries=function(t,e,i){var n=this.findTargetInfo(t,i);return!0===n||n&&UC(n.coordSyses,e.coordinateSystem)>=0},YC.findTargetInfo=function(t,e){for(var i=this._targetInfoList,n=lp(e,t),o=0;o=0||UC(n,t.getAxis("y").model)>=0)&&a.push(t)}),e.push({panelId:"grid--"+t.id,gridModel:t,coordSysModel:t,coordSys:a[0],coordSyses:a,getPanelRect:JC.grid,xAxisDeclared:r[t.id],yAxisDeclared:s[t.id]})}))},geo:function(t,e){ZC(t.geoModels,function(t){var i=t.coordinateSystem;e.push({panelId:"geo--"+t.id,geoModel:t,coordSysModel:t,coordSys:i,coordSyses:[i],getPanelRect:JC.geo})})}},KC=[function(t,e){var i=t.xAxisModel,n=t.yAxisModel,o=t.gridModel;return!o&&i&&(o=i.axis.grid.model),!o&&n&&(o=n.axis.grid.model),o&&o===e.gridModel},function(t,e){var i=t.geoModel;return i&&i===e.geoModel}],JC={grid:function(){return this.coordSys.grid.getRect().clone()},geo:function(){var t=this.coordSys,e=t.getBoundingRect().clone();return e.applyTransform(Mo(t)),e}},QC={lineX:XC(hp,0),lineY:XC(hp,1),rect:function(t,e,i){var n=e[jC[t]]([i[0][0],i[1][0]]),o=e[jC[t]]([i[0][1],i[1][1]]),a=[sp([n[0],o[0]]),sp([n[1],o[1]])];return{values:a,xyMinMax:a}},polygon:function(t,e,i){var n=[[1/0,-1/0],[1/0,-1/0]];return{values:f(i,function(i){var o=e[jC[t]](i);return n[0][0]=Math.min(n[0][0],o[0]),n[1][0]=Math.min(n[1][0],o[1]),n[0][1]=Math.max(n[0][1],o[0]),n[1][1]=Math.max(n[1][1],o[1]),o}),xyMinMax:n}}},tD={lineX:XC(up,0),lineY:XC(up,1),rect:function(t,e,i){return[[t[0][0]-i[0]*e[0][0],t[0][1]-i[0]*e[0][1]],[t[1][0]-i[1]*e[1][0],t[1][1]-i[1]*e[1][1]]]},polygon:function(t,e,i){return f(t,function(t,n){return[t[0]-i[0]*e[n][0],t[1]-i[1]*e[n][1]]})}},eD=["inBrush","outOfBrush"],iD="__ecBrushSelect",nD="__ecInBrushSelectEvent",oD=Pw.VISUAL.BRUSH;or(oD,function(t,e,i){t.eachComponent({mainType:"brush"},function(e){i&&"takeGlobalCursor"===i.type&&e.setBrushOption("brush"===i.key?i.brushOption:{brushType:!1}),(e.brushTargetManager=new rp(e.option,t)).setInputRanges(e.areas,t)})}),ar(oD,function(t,e,n){var o,a,s=[];t.eachComponent({mainType:"brush"},function(e,n){function l(t){return"all"===m||v[t]}function h(t){return!!t.length}function u(t,e){var i=t.coordinateSystem;b|=i.hasAxisBrushed(),l(e)&&i.eachActiveState(t.getData(),function(t,e){"active"===t&&(x[e]=1)})}function c(i,n,o){var a=mp(i);if(a&&!vp(e,n)&&(d(w,function(n){a[n.brushType]&&e.brushTargetManager.controlSeries(n,i,t)&&o.push(n),b|=h(o)}),l(n)&&h(o))){var r=i.getData();r.each(function(t){pp(a,o,r,t)&&(x[t]=1)})}}var g={brushId:e.id,brushIndex:n,brushName:e.name,areas:i(e.areas),selected:[]};s.push(g);var p=e.option,m=p.brushLink,v=[],x=[],_=[],b=0;n||(o=p.throttleType,a=p.throttleDelay);var w=f(e.areas,function(t){return yp(r({boundingRect:aD[t.brushType](t)},t))}),S=Kg(e.option,eD,function(t){t.mappingMethod="fixed"});y(m)&&d(m,function(t){v[t]=1}),t.eachSeries(function(t,e){var i=_[e]=[];"parallel"===t.subType?u(t,e):c(t,e,i)}),t.eachSeries(function(t,e){var i={seriesId:t.id,seriesIndex:e,seriesName:t.name,dataIndex:[]};g.selected.push(i);var n=mp(t),o=_[e],a=t.getData(),r=l(e)?function(t){return x[t]?(i.dataIndex.push(a.getRawIndex(t)),"inBrush"):"outOfBrush"}:function(t){return pp(n,o,a,t)?(i.dataIndex.push(a.getRawIndex(t)),"inBrush"):"outOfBrush"};(l(e)?b:h(o))&&Qg(eD,S,a,r)})}),fp(e,o,a,s,n)});var aD={lineX:N,lineY:N,rect:function(t){return xp(t.range)},polygon:function(t){for(var e,i=t.range,n=0,o=i.length;ne[0][1]&&(e[0][1]=a[0]),a[1]e[1][1]&&(e[1][1]=a[1])}return e&&xp(e)}},rD=["#ddd"];sr({type:"brush",dependencies:["geo","grid","xAxis","yAxis","parallel","series"],defaultOption:{toolbox:null,brushLink:null,seriesIndex:"all",geoIndex:null,xAxisIndex:null,yAxisIndex:null,brushType:"rect",brushMode:"single",transformable:!0,brushStyle:{borderWidth:1,color:"rgba(120,140,180,0.3)",borderColor:"rgba(120,140,180,0.8)"},throttleType:"fixRate",throttleDelay:0,removeOnClick:!0,z:1e4},areas:[],brushType:null,brushOption:{},coordInfoList:[],optionUpdated:function(t,e){var i=this.option;!e&&Jg(i,t,["inBrush","outOfBrush"]),i.inBrush=i.inBrush||{},i.outOfBrush=i.outOfBrush||{color:rD}},setAreas:function(t){t&&(this.areas=f(t,function(t){return _p(this.option,t)},this))},setBrushOption:function(t){this.brushOption=_p(this.option,t),this.brushType=this.brushOption.brushType}});lr({type:"brush",init:function(t,e){this.ecModel=t,this.api=e,this.model,(this._brushController=new Yu(e.getZr())).on("brush",m(this._onBrush,this)).mount()},render:function(t){return this.model=t,bp.apply(this,arguments)},updateView:bp,updateLayout:bp,updateVisual:bp,dispose:function(){this._brushController.dispose()},_onBrush:function(t,e){var n=this.model.id;this.model.brushTargetManager.setOutputRanges(t,this.ecModel),(!e.isEnd||e.removeOnClick)&&this.api.dispatchAction({type:"brush",brushId:n,areas:i(t),$from:n})}}),ir({type:"brush",event:"brush",update:"updateView"},function(t,e){e.eachComponent({mainType:"brush",query:t},function(e){e.setAreas(t.areas)})}),ir({type:"brushSelect",event:"brushSelected",update:"none"},function(){});var sD={},lD={toolbox:{brush:{title:{rect:"矩形选择",polygon:"圈选",lineX:"横向选择",lineY:"纵向选择",keep:"保持选择",clear:"清除选择"}},dataView:{title:"数据视图",lang:["数据视图","关闭","刷新"]},dataZoom:{title:{zoom:"区域缩放",back:"区域缩放还原"}},magicType:{title:{line:"切换为折线图",bar:"切换为柱状图",stack:"切换为堆叠",tiled:"切换为平铺"}},restore:{title:"还原"},saveAsImage:{title:"保存为图片",lang:["右键另存为图片"]}}},hD=lD.toolbox.brush;Mp.defaultOption={show:!0,type:["rect","polygon","lineX","lineY","keep","clear"],icon:{rect:"M7.3,34.7 M0.4,10V-0.2h9.8 M89.6,10V-0.2h-9.8 M0.4,60v10.2h9.8 M89.6,60v10.2h-9.8 M12.3,22.4V10.5h13.1 M33.6,10.5h7.8 M49.1,10.5h7.8 M77.5,22.4V10.5h-13 M12.3,31.1v8.2 M77.7,31.1v8.2 M12.3,47.6v11.9h13.1 M33.6,59.5h7.6 M49.1,59.5 h7.7 M77.5,47.6v11.9h-13",polygon:"M55.2,34.9c1.7,0,3.1,1.4,3.1,3.1s-1.4,3.1-3.1,3.1 s-3.1-1.4-3.1-3.1S53.5,34.9,55.2,34.9z M50.4,51c1.7,0,3.1,1.4,3.1,3.1c0,1.7-1.4,3.1-3.1,3.1c-1.7,0-3.1-1.4-3.1-3.1 C47.3,52.4,48.7,51,50.4,51z M55.6,37.1l1.5-7.8 M60.1,13.5l1.6-8.7l-7.8,4 M59,19l-1,5.3 M24,16.1l6.4,4.9l6.4-3.3 M48.5,11.6 l-5.9,3.1 M19.1,12.8L9.7,5.1l1.1,7.7 M13.4,29.8l1,7.3l6.6,1.6 M11.6,18.4l1,6.1 M32.8,41.9 M26.6,40.4 M27.3,40.2l6.1,1.6 M49.9,52.1l-5.6-7.6l-4.9-1.2",lineX:"M15.2,30 M19.7,15.6V1.9H29 M34.8,1.9H40.4 M55.3,15.6V1.9H45.9 M19.7,44.4V58.1H29 M34.8,58.1H40.4 M55.3,44.4 V58.1H45.9 M12.5,20.3l-9.4,9.6l9.6,9.8 M3.1,29.9h16.5 M62.5,20.3l9.4,9.6L62.3,39.7 M71.9,29.9H55.4",lineY:"M38.8,7.7 M52.7,12h13.2v9 M65.9,26.6V32 M52.7,46.3h13.2v-9 M24.9,12H11.8v9 M11.8,26.6V32 M24.9,46.3H11.8v-9 M48.2,5.1l-9.3-9l-9.4,9.2 M38.9-3.9V12 M48.2,53.3l-9.3,9l-9.4-9.2 M38.9,62.3V46.4",keep:"M4,10.5V1h10.3 M20.7,1h6.1 M33,1h6.1 M55.4,10.5V1H45.2 M4,17.3v6.6 M55.6,17.3v6.6 M4,30.5V40h10.3 M20.7,40 h6.1 M33,40h6.1 M55.4,30.5V40H45.2 M21,18.9h62.9v48.6H21V18.9z",clear:"M22,14.7l30.9,31 M52.9,14.7L22,45.7 M4.7,16.8V4.2h13.1 M26,4.2h7.8 M41.6,4.2h7.8 M70.3,16.8V4.2H57.2 M4.7,25.9v8.6 M70.3,25.9v8.6 M4.7,43.2v12.6h13.1 M26,55.8h7.8 M41.6,55.8h7.8 M70.3,43.2v12.6H57.2"},title:i(hD.title)};var uD=Mp.prototype;uD.render=uD.updateView=uD.updateLayout=function(t,e,i){var n,o,a;e.eachComponent({mainType:"brush"},function(t){n=t.brushType,o=t.brushOption.brushMode||"single",a|=t.areas.length}),this._brushType=n,this._brushMode=o,d(t.get("type",!0),function(e){t.setIconStatus(e,("keep"===e?"multiple"===o:"clear"===e?a:e===n)?"emphasis":"normal")})},uD.getIcons=function(){var t=this.model,e=t.get("icon",!0),i={};return d(t.get("type",!0),function(t){e[t]&&(i[t]=e[t])}),i},uD.onclick=function(t,e,i){var n=this._brushType,o=this._brushMode;"clear"===i?(e.dispatchAction({type:"axisAreaSelect",intervals:[]}),e.dispatchAction({type:"brush",command:"clear",areas:[]})):e.dispatchAction({type:"takeGlobalCursor",key:"brush",brushOption:{brushType:"keep"===i?n:n!==i&&i,brushMode:"keep"===i?"multiple"===o?"single":"multiple":o}})},wp("brush",Mp),tr(function(t,e){var i=t&&t.brush;if(y(i)||(i=i?[i]:[]),i.length){var n=[];d(i,function(t){var e=t.hasOwnProperty("toolbox")?t.toolbox:[];e instanceof Array&&(n=n.concat(e))});var o=t&&t.toolbox;y(o)&&(o=o[0]),o||(o={feature:{}},t.toolbox=[o]);var a=o.feature||(o.feature={}),r=a.brush||(a.brush={}),s=r.type||(r.type=[]);s.push.apply(s,n),Yg(s),e&&!s.length&&s.push.apply(s,WC)}});Ip.prototype={constructor:Ip,type:"calendar",dimensions:["time","value"],getDimensionsInfo:function(){return[{name:"time",type:"time"}]},getRangeInfo:function(){return this._rangeInfo},getModel:function(){return this._model},getRect:function(){return this._rect},getCellWidth:function(){return this._sw},getCellHeight:function(){return this._sh},getOrient:function(){return this._orient},getFirstDayOfWeek:function(){return this._firstDayOfWeek},getDateInfo:function(t){var e=(t=Pi(t)).getFullYear(),i=t.getMonth()+1;i=i<10?"0"+i:i;var n=t.getDate();n=n<10?"0"+n:n;var o=t.getDay();return o=Math.abs((o+7-this.getFirstDayOfWeek())%7),{y:e,m:i,d:n,day:o,time:t.getTime(),formatedDate:e+"-"+i+"-"+n,date:t}},getNextNDay:function(t,e){return 0===(e=e||0)?this.getDateInfo(t):((t=new Date(this.getDateInfo(t).time)).setDate(t.getDate()+e),this.getDateInfo(t))},update:function(t,e){function i(t,e){return null!=t[e]&&"auto"!==t[e]}this._firstDayOfWeek=+this._model.getModel("dayLabel").get("firstDay"),this._orient=this._model.get("orient"),this._lineWidth=this._model.getModel("itemStyle.normal").getItemStyle().lineWidth||0,this._rangeInfo=this._getRangeInfo(this._initRangeOption());var n=this._rangeInfo.weeks||1,o=["width","height"],a=this._model.get("cellSize").slice(),r=this._model.getBoxLayoutParams(),s="horizontal"===this._orient?[n,7]:[7,n];d([0,1],function(t){i(a,t)&&(r[o[t]]=a[t]*s[t])});var l={width:e.getWidth(),height:e.getHeight()},h=this._rect=Ko(r,l);d([0,1],function(t){i(a,t)||(a[t]=h[o[t]]/s[t])}),this._sw=a[0],this._sh=a[1]},dataToPoint:function(t,e){y(t)&&(t=t[0]),null==e&&(e=!0);var i=this.getDateInfo(t),n=this._rangeInfo,o=i.formatedDate;if(e&&!(i.time>=n.start.time&&i.time<=n.end.time))return[NaN,NaN];var a=i.day,r=this._getRangeInfo([n.start.time,o]).nthWeek;return"vertical"===this._orient?[this._rect.x+a*this._sw+this._sw/2,this._rect.y+r*this._sh+this._sh/2]:[this._rect.x+r*this._sw+this._sw/2,this._rect.y+a*this._sh+this._sh/2]},pointToData:function(t){var e=this.pointToDate(t);return e&&e.time},dataToRect:function(t,e){var i=this.dataToPoint(t,e);return{contentShape:{x:i[0]-(this._sw-this._lineWidth)/2,y:i[1]-(this._sh-this._lineWidth)/2,width:this._sw-this._lineWidth,height:this._sh-this._lineWidth},center:i,tl:[i[0]-this._sw/2,i[1]-this._sh/2],tr:[i[0]+this._sw/2,i[1]-this._sh/2],br:[i[0]+this._sw/2,i[1]+this._sh/2],bl:[i[0]-this._sw/2,i[1]+this._sh/2]}},pointToDate:function(t){var e=Math.floor((t[0]-this._rect.x)/this._sw)+1,i=Math.floor((t[1]-this._rect.y)/this._sh)+1,n=this._rangeInfo.range;return"vertical"===this._orient?this._getDateByWeeksAndDay(i,e-1,n):this._getDateByWeeksAndDay(e,i-1,n)},convertToPixel:v(Tp,"dataToPoint"),convertFromPixel:v(Tp,"pointToData"),_initRangeOption:function(){var t=this._model.get("range"),e=t;if(y(e)&&1===e.length&&(e=e[0]),/^\d{4}$/.test(e)&&(t=[e+"-01-01",e+"-12-31"]),/^\d{4}[\/|-]\d{1,2}$/.test(e)){var i=this.getDateInfo(e),n=i.date;n.setMonth(n.getMonth()+1);var o=this.getNextNDay(n,-1);t=[i.formatedDate,o.formatedDate]}/^\d{4}[\/|-]\d{1,2}[\/|-]\d{1,2}$/.test(e)&&(t=[e,e]);var a=this._getRangeInfo(t);return a.start.time>a.end.time&&t.reverse(),t},_getRangeInfo:function(t){var e;(t=[this.getDateInfo(t[0]),this.getDateInfo(t[1])])[0].time>t[1].time&&(e=!0,t.reverse());var i=Math.floor(t[1].time/864e5)-Math.floor(t[0].time/864e5)+1,n=new Date(t[0].time),o=n.getDate(),a=t[1].date.getDate();if(n.setDate(o+i-1),n.getDate()!==a)for(var r=n.getTime()-t[1].time>0?1:-1;n.getDate()!==a&&(n.getTime()-t[1].time)*r>0;)i-=r,n.setDate(o+i-1);var s=Math.floor((i+t[0].day+6)/7),l=e?1-s:s-1;return e&&t.reverse(),{range:[t[0].formatedDate,t[1].formatedDate],start:t[0],end:t[1],allDay:i,weeks:s,nthWeek:l,fweek:t[0].day,lweek:t[1].day}},_getDateByWeeksAndDay:function(t,e,i){var n=this._getRangeInfo(i);if(t>n.weeks||0===t&&en.lweek)return!1;var o=7*(t-1)-n.fweek+e,a=new Date(n.start.time);return a.setDate(n.start.d+o),this.getDateInfo(a)}},Ip.dimensions=Ip.prototype.dimensions,Ip.getDimensionsInfo=Ip.prototype.getDimensionsInfo,Ip.create=function(t,e){var i=[];return t.eachComponent("calendar",function(n){var o=new Ip(n,t,e);i.push(o),n.coordinateSystem=o}),t.eachSeries(function(t){"calendar"===t.get("coordinateSystem")&&(t.coordinateSystem=i[t.get("calendarIndex")||0])}),i},ua.register("calendar",Ip);var cD=Ub.extend({type:"calendar",coordinateSystem:null,defaultOption:{zlevel:0,z:2,left:80,top:60,cellSize:20,orient:"horizontal",splitLine:{show:!0,lineStyle:{color:"#000",width:1,type:"solid"}},itemStyle:{normal:{color:"#fff",borderWidth:1,borderColor:"#ccc"}},dayLabel:{show:!0,firstDay:0,position:"start",margin:"50%",nameMap:"en",color:"#000"},monthLabel:{show:!0,position:"start",margin:5,align:"center",nameMap:"en",formatter:null,color:"#000"},yearLabel:{show:!0,position:null,margin:30,formatter:null,color:"#ccc",fontFamily:"sans-serif",fontWeight:"bolder",fontSize:20}},init:function(t,e,i,n){var o=ea(t);cD.superApply(this,"init",arguments),Ap(t,o)},mergeOption:function(t,e){cD.superApply(this,"mergeOption",arguments),Ap(this.option,t)}}),dD={EN:["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"],CN:["一月","二月","三月","四月","五月","六月","七月","八月","九月","十月","十一月","十二月"]},fD={EN:["S","M","T","W","T","F","S"],CN:["日","一","二","三","四","五","六"]};lr({type:"calendar",_tlpoints:null,_blpoints:null,_firstDayOfMonth:null,_firstDayPoints:null,render:function(t,e,i){var n=this.group;n.removeAll();var o=t.coordinateSystem,a=o.getRangeInfo(),r=o.getOrient();this._renderDayRect(t,a,n),this._renderLines(t,a,r,n),this._renderYearText(t,a,r,n),this._renderMonthText(t,r,n),this._renderWeekText(t,a,r,n)},_renderDayRect:function(t,e,i){for(var n=t.coordinateSystem,o=t.getModel("itemStyle.normal").getItemStyle(),a=n.getCellWidth(),r=n.getCellHeight(),s=e.start.time;s<=e.end.time;s=n.getNextNDay(s,1).time){var l=n.dataToRect([s],!1).tl,h=new db({shape:{x:l[0],y:l[1],width:a,height:r},cursor:"default",style:o});i.add(h)}},_renderLines:function(t,e,i,n){function o(e){a._firstDayOfMonth.push(r.getDateInfo(e)),a._firstDayPoints.push(r.dataToRect([e],!1).tl);var o=a._getLinePointsOfOneWeek(t,e,i);a._tlpoints.push(o[0]),a._blpoints.push(o[o.length-1]),l&&a._drawSplitline(o,s,n)}var a=this,r=t.coordinateSystem,s=t.getModel("splitLine.lineStyle").getLineStyle(),l=t.get("splitLine.show"),h=s.lineWidth;this._tlpoints=[],this._blpoints=[],this._firstDayOfMonth=[],this._firstDayPoints=[];for(var u=e.start,c=0;u.time<=e.end.time;c++){o(u.formatedDate),0===c&&(u=r.getDateInfo(e.start.y+"-"+e.start.m));var d=u.date;d.setMonth(d.getMonth()+1),u=r.getDateInfo(d)}o(r.getNextNDay(e.end.time,1).formatedDate),l&&this._drawSplitline(a._getEdgesPoints(a._tlpoints,h,i),s,n),l&&this._drawSplitline(a._getEdgesPoints(a._blpoints,h,i),s,n)},_getEdgesPoints:function(t,e,i){var n=[t[0].slice(),t[t.length-1].slice()],o="horizontal"===i?0:1;return n[0][o]=n[0][o]-e/2,n[1][o]=n[1][o]+e/2,n},_drawSplitline:function(t,e,i){var n=new cb({z2:20,shape:{points:t},style:e});i.add(n)},_getLinePointsOfOneWeek:function(t,e,i){var n=t.coordinateSystem;e=n.getDateInfo(e);for(var o=[],a=0;a<7;a++){var r=n.getNextNDay(e.time,a),s=n.dataToRect([r.time],!1);o[2*r.day]=s.tl,o[2*r.day+1]=s["horizontal"===i?"bl":"tr"]}return o},_formatterLabel:function(t,e){return"string"==typeof t&&t?Hi(t,e):"function"==typeof t?t(e):e.nameMap},_yearTextPositionControl:function(t,e,i,n,o){e=e.slice();var a=["center","bottom"];"bottom"===n?(e[1]+=o,a=["center","top"]):"left"===n?e[0]-=o:"right"===n?(e[0]+=o,a=["center","top"]):e[1]-=o;var r=0;return"left"!==n&&"right"!==n||(r=Math.PI/2),{rotation:r,position:e,style:{textAlign:a[0],textVerticalAlign:a[1]}}},_renderYearText:function(t,e,i,n){var o=t.getModel("yearLabel");if(o.get("show")){var a=o.get("margin"),r=o.get("position");r||(r="horizontal"!==i?"top":"left");var s=[this._tlpoints[this._tlpoints.length-1],this._blpoints[0]],l=(s[0][0]+s[1][0])/2,h=(s[0][1]+s[1][1])/2,u="horizontal"===i?0:1,c={top:[l,s[u][1]],bottom:[l,s[1-u][1]],left:[s[1-u][0],h],right:[s[u][0],h]},d=e.start.y;+e.end.y>+e.start.y&&(d=d+"-"+e.end.y);var f=o.get("formatter"),g={start:e.start.y,end:e.end.y,nameMap:d},p=this._formatterLabel(f,g),m=new ib({z2:30});fo(m.style,o,{text:p}),m.attr(this._yearTextPositionControl(m,c[r],i,r,a)),n.add(m)}},_monthTextPositionControl:function(t,e,i,n,o){var a="left",r="top",s=t[0],l=t[1];return"horizontal"===i?(l+=o,e&&(a="center"),"start"===n&&(r="bottom")):(s+=o,e&&(r="middle"),"start"===n&&(a="right")),{x:s,y:l,textAlign:a,textVerticalAlign:r}},_renderMonthText:function(t,e,i){var n=t.getModel("monthLabel");if(n.get("show")){var o=n.get("nameMap"),r=n.get("margin"),s=n.get("position"),l=n.get("align"),h=[this._tlpoints,this._blpoints];_(o)&&(o=dD[o.toUpperCase()]||[]);var u="start"===s?0:1,c="horizontal"===e?0:1;r="start"===s?-r:r;for(var d="center"===l,f=0;f=a[0]&&t<=a[1]}if(t===this._dataZoomModel){var i=this._dimName,n=this.getTargetSeriesModels(),o=t.get("filterMode"),a=this._valueWindow;if("none"!==o){var r=this.getOtherAxisModel();t.get("$fromToolbox")&&r&&"category"===r.get("type")&&(o="empty"),mD(n,function(t){var n=t.getData(),r=t.coordDimToDataDim(i);"weakFilter"===o?n&&n.filterSelf(function(t){for(var e,i,o,s=0;sa[1];if(h&&!u&&!c)return!0;h&&(o=!0),u&&(e=!0),c&&(i=!0)}return o&&e&&i}):n&&mD(r,function(i){"empty"===o?t.setData(n.map(i,function(t){return e(t)?t:NaN})):n.filterSelf(i,e)})})}}}};var xD=d,_D=pD,bD=sr({type:"dataZoom",dependencies:["xAxis","yAxis","zAxis","radiusAxis","angleAxis","singleAxis","series"],defaultOption:{zlevel:0,z:4,orient:null,xAxisIndex:null,yAxisIndex:null,filterMode:"filter",throttle:null,start:0,end:100,startValue:null,endValue:null,minSpan:null,maxSpan:null,minValueSpan:null,maxValueSpan:null,rangeMode:null},init:function(t,e,i){this._dataIntervalByAxis={},this._dataInfo={},this._axisProxies={},this.textStyleModel,this._autoThrottle=!0,this._rangePropMode=["percent","percent"];var n=zp(t);this.mergeDefaultAndTheme(t,i),this.doInit(n)},mergeOption:function(t){var e=zp(t);n(this.option,t,!0),this.doInit(e)},doInit:function(t){var e=this.option;Uv.canvasSupported||(e.realtime=!1),this._setDefaultThrottle(t),Np(this,t),xD([["start","startValue"],["end","endValue"]],function(t,i){"value"===this._rangePropMode[i]&&(e[t[0]]=null)},this),this.textStyleModel=this.getModel("textStyle"),this._resetTarget(),this._giveAxisProxies()},_giveAxisProxies:function(){var t=this._axisProxies;this.eachTargetAxis(function(e,i,n,o){var a=this.dependentModels[e.axis][i],r=a.__dzAxisProxy||(a.__dzAxisProxy=new yD(e.name,i,this,o));t[e.name+"_"+i]=r},this)},_resetTarget:function(){var t=this.option,e=this._judgeAutoMode();_D(function(e){var i=e.axisIndex;t[i]=Oo(t[i])},this),"axisIndex"===e?this._autoSetAxisIndex():"orient"===e&&this._autoSetOrient()},_judgeAutoMode:function(){var t=this.option,e=!1;_D(function(i){null!=t[i.axisIndex]&&(e=!0)},this);var i=t.orient;return null==i&&e?"orient":e?void 0:(null==i&&(t.orient="horizontal"),"axisIndex")},_autoSetAxisIndex:function(){var t=!0,e=this.get("orient",!0),i=this.option,n=this.dependentModels;if(t){var o="vertical"===e?"y":"x";n[o+"Axis"].length?(i[o+"AxisIndex"]=[0],t=!1):xD(n.singleAxis,function(n){t&&n.get("orient",!0)===e&&(i.singleAxisIndex=[n.componentIndex],t=!1)})}t&&_D(function(e){if(t){var n=[],o=this.dependentModels[e.axis];if(o.length&&!n.length)for(var a=0,r=o.length;a0?100:20}},getFirstTargetAxisModel:function(){var t;return _D(function(e){if(null==t){var i=this.get(e.axisIndex);i.length&&(t=this.dependentModels[e.axis][i[0]])}},this),t},eachTargetAxis:function(t,e){var i=this.ecModel;_D(function(n){xD(this.get(n.axisIndex),function(o){t.call(e,n,o,this,i)},this)},this)},getAxisProxy:function(t,e){return this._axisProxies[t+"_"+e]},getAxisModel:function(t,e){var i=this.getAxisProxy(t,e);return i&&i.getAxisModel()},setRawRange:function(t,e){var i=this.option;xD([["start","startValue"],["end","endValue"]],function(e){null==t[e[0]]&&null==t[e[1]]||(i[e[0]]=t[e[0]],i[e[1]]=t[e[1]])},this),!e&&Np(this,t)},getPercentRange:function(){var t=this.findRepresentativeAxisProxy();if(t)return t.getDataPercentWindow()},getValueRange:function(t,e){if(null!=t||null!=e)return this.getAxisProxy(t,e).getDataValueWindow();var i=this.findRepresentativeAxisProxy();return i?i.getDataValueWindow():void 0},findRepresentativeAxisProxy:function(t){if(t)return t.__dzAxisProxy;var e=this._axisProxies;for(var i in e)if(e.hasOwnProperty(i)&&e[i].hostedBy(this))return e[i];for(var i in e)if(e.hasOwnProperty(i)&&!e[i].hostedBy(this))return e[i]},getRangePropMode:function(){return this._rangePropMode.slice()}}),wD=xw.extend({type:"dataZoom",render:function(t,e,i,n){this.dataZoomModel=t,this.ecModel=e,this.api=i},getTargetCoordInfo:function(){function t(t,e,i,n){for(var o,a=0;a0&&e%p)g+=f;else{var i=null==t||isNaN(t)||""===t,n=i?0:MD(t,a,h,!0);i&&!l&&e?(c.push([c[c.length-1][0],0]),d.push([d[d.length-1][0],0])):!i&&l&&(c.push([g,0]),d.push([g,0])),c.push([g,n]),d.push([g,n]),g+=f,l=i}});var m=this.dataZoomModel;this._displayables.barGroup.add(new ub({shape:{points:c},style:r({fill:m.get("dataBackgroundColor")},m.getModel("dataBackground.areaStyle").getAreaStyle()),silent:!0,z2:-20})),this._displayables.barGroup.add(new cb({shape:{points:d},style:m.getModel("dataBackground.lineStyle").getLineStyle(),silent:!0,z2:-19}))}}},_prepareDataShadowInfo:function(){var t=this.dataZoomModel,e=t.get("showDataShadow");if(!1!==e){var i,n=this.ecModel;return t.eachTargetAxis(function(o,a){d(t.getAxisProxy(o.name,a).getTargetSeriesModels(),function(t){if(!(i||!0!==e&&l(LD,t.get("type"))<0)){var r,s=n.getComponent(o.axis,a).axis,h=Ep(o.name),u=t.coordinateSystem;null!=h&&u.getOtherAxis&&(r=u.getOtherAxis(s).inverse),i={thisAxis:s,series:t,thisDim:o.name,otherDim:h,otherAxisInverse:r}}},this)},this),i}},_renderHandle:function(){var t=this._displayables,e=t.handles=[],i=t.handleLabels=[],n=this._displayables.barGroup,o=this._size,a=this.dataZoomModel;n.add(t.filler=new SD({draggable:!0,cursor:Rp(this._orient),drift:TD(this._onDragMove,this,"all"),onmousemove:function(t){bx(t.event)},ondragstart:TD(this._showDataInfo,this,!0),ondragend:TD(this._onDragEnd,this),onmouseover:TD(this._showDataInfo,this,!0),onmouseout:TD(this._showDataInfo,this,!1),style:{fill:a.get("fillerColor"),textPosition:"inside"}})),n.add(new SD($n({silent:!0,shape:{x:0,y:0,width:o[0],height:o[1]},style:{stroke:a.get("dataBackgroundColor")||a.get("borderColor"),lineWidth:1,fill:"rgba(0,0,0,0)"}}))),AD([0,1],function(t){var o=Do(a.get("handleIcon"),{cursor:Rp(this._orient),draggable:!0,drift:TD(this._onDragMove,this,t),onmousemove:function(t){bx(t.event)},ondragend:TD(this._onDragEnd,this),onmouseover:TD(this._showDataInfo,this,!0),onmouseout:TD(this._showDataInfo,this,!1)},{x:-1,y:0,width:2,height:2}),r=o.getBoundingRect();this._handleHeight=Si(a.get("handleSize"),this._size[1]),this._handleWidth=r.width/r.height*this._handleHeight,o.setStyle(a.getModel("handleStyle").getItemStyle());var s=a.get("handleColor");null!=s&&(o.style.fill=s),n.add(e[t]=o);var l=a.textStyleModel;this.group.add(i[t]=new ib({silent:!0,invisible:!0,style:{x:0,y:0,text:"",textVerticalAlign:"middle",textAlign:"center",textFill:l.getTextColor(),textFont:l.getFont()},z2:10}))},this)},_resetInterval:function(){var t=this._range=this.dataZoomModel.getPercentRange(),e=this._getViewExtent();this._handleEnds=[MD(t[0],[0,100],e,!0),MD(t[1],[0,100],e,!0)]},_updateInterval:function(t,e){var i=this.dataZoomModel,n=this._handleEnds,o=this._getViewExtent(),a=i.findRepresentativeAxisProxy().getMinMaxSpan(),r=[0,100];OT(e,n,o,i.get("zoomLock")?"all":t,null!=a.minSpan?MD(a.minSpan,r,o,!0):null,null!=a.maxSpan?MD(a.maxSpan,r,o,!0):null),this._range=ID([MD(n[0],o,r,!0),MD(n[1],o,r,!0)])},_updateView:function(t){var e=this._displayables,i=this._handleEnds,n=ID(i.slice()),o=this._size;AD([0,1],function(t){var n=e.handles[t],a=this._handleHeight;n.attr({scale:[a/2,a/2],position:[i[t],o[1]/2-a/2]})},this),e.filler.setShape({x:n[0],y:0,width:n[1]-n[0],height:o[1]}),this._updateDataInfo(t)},_updateDataInfo:function(t){function e(t){var e=Mo(n.handles[t].parent,this.group),i=To(0===t?"right":"left",e),s=this._handleWidth/2+DD,l=Io([c[t]+(0===t?-s:s),this._size[1]/2],e);o[t].setStyle({x:l[0],y:l[1],textVerticalAlign:a===CD?"middle":i,textAlign:a===CD?i:"center",text:r[t]})}var i=this.dataZoomModel,n=this._displayables,o=n.handleLabels,a=this._orient,r=["",""];if(i.get("showDetail")){var s=i.findRepresentativeAxisProxy();if(s){var l=s.getAxisModel().axis,h=this._range,u=t?s.calculateDataWindow({start:h[0],end:h[1]}).valueWindow:s.getDataValueWindow();r=[this._formatLabel(u[0],l),this._formatLabel(u[1],l)]}}var c=ID(this._handleEnds.slice());e.call(this,0),e.call(this,1)},_formatLabel:function(t,e){var i=this.dataZoomModel,n=i.get("labelFormatter"),o=i.get("labelPrecision");null!=o&&"auto"!==o||(o=e.getPixelPrecision());var a=null==t||isNaN(t)?"":"category"===e.type||"time"===e.type?e.scale.getLabel(Math.round(t)):t.toFixed(Math.min(o,20));return x(n)?n(t,a):_(n)?n.replace("{value}",a):a},_showDataInfo:function(t){t=this._dragging||t;var e=this._displayables.handleLabels;e[0].attr("invisible",!t),e[1].attr("invisible",!t)},_onDragMove:function(t,e,i){this._dragging=!0;var n=Io([e,i],this._displayables.barGroup.getLocalTransform(),!0);this._updateInterval(t,n[0]);var o=this.dataZoomModel.get("realtime");this._updateView(!o),o&&o&&this._dispatchZoomAction()},_onDragEnd:function(){this._dragging=!1,this._showDataInfo(!1),this._dispatchZoomAction()},_onClickPanelClick:function(t){var e=this._size,i=this._displayables.barGroup.transformCoordToLocal(t.offsetX,t.offsetY);if(!(i[0]<0||i[0]>e[0]||i[1]<0||i[1]>e[1])){var n=this._handleEnds,o=(n[0]+n[1])/2;this._updateInterval("all",i[0]-o),this._updateView(),this._dispatchZoomAction()}},_dispatchZoomAction:function(){var t=this._range;this.api.dispatchAction({type:"dataZoom",from:this.uid,dataZoomId:this.dataZoomModel.id,start:t[0],end:t[1]})},_findCoordRect:function(){var t;if(AD(this.getTargetCoordInfo(),function(e){if(!t&&e.length){var i=e[0].model.coordinateSystem;t=i.getRect&&i.getRect()}}),!t){var e=this.api.getWidth(),i=this.api.getHeight();t={x:.2*e,y:.2*i,width:.6*e,height:.6*i}}return t}});bD.extend({type:"dataZoom.inside",defaultOption:{disabled:!1,zoomLock:!1,zoomOnMouseWheel:!0,moveOnMouseMove:!0,preventDefaultMouseMove:!0}});var PD=v,OD="\0_ec_dataZoom_roams",zD=m,ND=wD.extend({type:"dataZoom.inside",init:function(t,e){this._range},render:function(t,e,i,n){ND.superApply(this,"render",arguments),Gp(n,t.id)&&(this._range=t.getPercentRange()),d(this.getTargetCoordInfo(),function(e,n){var o=f(e,function(t){return Wp(t.model)});d(e,function(e){var a=e.model,r=t.option;Vp(i,{coordId:Wp(a),allCoordIds:o,containsPoint:function(t,e,i){return a.coordinateSystem.containPoint([e,i])},dataZoomId:t.id,throttleRate:t.get("throttle",!0),panGetRange:zD(this._onPan,this,e,n),zoomGetRange:zD(this._onZoom,this,e,n),zoomLock:r.zoomLock,disabled:r.disabled,roamControllerOpt:{zoomOnMouseWheel:r.zoomOnMouseWheel,moveOnMouseMove:r.moveOnMouseMove,preventDefaultMouseMove:r.preventDefaultMouseMove}})},this)},this)},dispose:function(){Bp(this.api,this.dataZoomModel.id),ND.superApply(this,"dispose",arguments),this._range=null},_onPan:function(t,e,i,n,o,a,r,s,l){var h=this._range.slice(),u=t.axisModels[0];if(u){var c=ED[e]([a,r],[s,l],u,i,t),d=c.signal*(h[1]-h[0])*c.pixel/c.pixelLength;return OT(d,h,[0,100],"all"),this._range=h}},_onZoom:function(t,e,i,n,o,a){var r=this._range.slice(),s=t.axisModels[0];if(s){var l=ED[e](null,[o,a],s,i,t),h=(l.signal>0?l.pixelStart+l.pixelLength-l.pixel:l.pixel-l.pixelStart)/l.pixelLength*(r[1]-r[0])+r[0];n=Math.max(1/n,0),r[0]=(r[0]-h)*n+h,r[1]=(r[1]-h)*n+h;var u=this.dataZoomModel.findRepresentativeAxisProxy().getMinMaxSpan();return OT(0,r,[0,100],0,u.minSpan,u.maxSpan),this._range=r}}}),ED={grid:function(t,e,i,n,o){var a=i.axis,r={},s=o.model.coordinateSystem.getRect();return t=t||[0,0],"x"===a.dim?(r.pixel=e[0]-t[0],r.pixelLength=s.width,r.pixelStart=s.x,r.signal=a.inverse?1:-1):(r.pixel=e[1]-t[1],r.pixelLength=s.height,r.pixelStart=s.y,r.signal=a.inverse?-1:1),r},polar:function(t,e,i,n,o){var a=i.axis,r={},s=o.model.coordinateSystem,l=s.getRadiusAxis().getExtent(),h=s.getAngleAxis().getExtent();return t=t?s.pointToCoord(t):[0,0],e=s.pointToCoord(e),"radiusAxis"===i.mainType?(r.pixel=e[0]-t[0],r.pixelLength=l[1]-l[0],r.pixelStart=l[0],r.signal=a.inverse?1:-1):(r.pixel=e[1]-t[1],r.pixelLength=h[1]-h[0],r.pixelStart=h[0],r.signal=a.inverse?-1:1),r},singleAxis:function(t,e,i,n,o){var a=i.axis,r=o.model.coordinateSystem.getRect(),s={};return t=t||[0,0],"horizontal"===a.orient?(s.pixel=e[0]-t[0],s.pixelLength=r.width,s.pixelStart=r.x,s.signal=a.inverse?1:-1):(s.pixel=e[1]-t[1],s.pixelLength=r.height,s.pixelStart=r.y,s.signal=a.inverse?-1:1),s}};er(function(t,e){t.eachComponent("dataZoom",function(t){t.eachTargetAxis($p),t.eachTargetAxis(Kp)}),t.eachComponent("dataZoom",function(t){var e=t.findRepresentativeAxisProxy(),i=e.getDataPercentWindow(),n=e.getDataValueWindow();t.setRawRange({start:i[0],end:i[1],startValue:n[0],endValue:n[1]},!0)})}),ir("dataZoom",function(t,e){var i=Dp(m(e.eachComponent,e,"dataZoom"),pD,function(t,e){return t.get(e.axisIndex)}),n=[];e.eachComponent({mainType:"dataZoom",query:t},function(t,e){n.push.apply(n,i(t).nodes)}),d(n,function(e,i){e.setRawRange({start:t.start,end:t.end,startValue:t.startValue,endValue:t.endValue})})});var RD=d,VD=function(t){var e=t&&t.visualMap;y(e)||(e=e?[e]:[]),RD(e,function(t){if(t){Jp(t,"splitList")&&!Jp(t,"pieces")&&(t.pieces=t.splitList,delete t.splitList);var e=t.pieces;e&&y(e)&&RD(e,function(t){b(t)&&(Jp(t,"start")&&!Jp(t,"min")&&(t.min=t.start),Jp(t,"end")&&!Jp(t,"max")&&(t.max=t.end))})}})};Ub.registerSubTypeDefaulter("visualMap",function(t){return t.categories||(t.pieces?t.pieces.length>0:t.splitNumber>0)&&!t.calculable?"piecewise":"continuous"}),ar(Pw.VISUAL.COMPONENT,function(t){t.eachComponent("visualMap",function(t){Qp(t)}),tm(t)});var BD={get:function(t,e,n){var o=i((GD[t]||{})[e]);return n&&y(o)?o[o.length-1]:o}},GD={color:{active:["#006edd","#e0ffff"],inactive:["rgba(0,0,0,0)"]},colorHue:{active:[0,360],inactive:[0,0]},colorSaturation:{active:[.3,1],inactive:[0,0]},colorLightness:{active:[.9,.5],inactive:[0,0]},colorAlpha:{active:[.3,1],inactive:[0,0]},opacity:{active:[.3,1],inactive:[0,0]},symbol:{active:["circle","roundRect","diamond"],inactive:["none"]},symbolSize:{active:[10,50],inactive:[0,0]}},WD=jI.mapVisual,HD=jI.eachVisual,FD=y,ZD=d,UD=Ii,XD=wi,jD=N,qD=["#f6efa6","#d88273","#bf444c"],YD=sr({type:"visualMap",dependencies:["series"],stateList:["inRange","outOfRange"],replacableOptionKeys:["inRange","outOfRange","target","controller","color"],dataBound:[-1/0,1/0],layoutMode:{type:"box",ignoreSize:!0},defaultOption:{show:!0,zlevel:0,z:4,seriesIndex:"all",min:0,max:200,dimension:null,inRange:null,outOfRange:null,left:0,right:null,top:null,bottom:0,itemWidth:null,itemHeight:null,inverse:!1,orient:"vertical",backgroundColor:"rgba(0,0,0,0)",borderColor:"#ccc",contentColor:"#5793f3",inactiveColor:"#aaa",borderWidth:0,padding:5,textGap:10,precision:0,color:null,formatter:null,text:null,textStyle:{color:"#333"}},init:function(t,e,i){this._dataExtent,this.targetVisuals={},this.controllerVisuals={},this.textStyleModel,this.itemSize,this.mergeDefaultAndTheme(t,i)},optionUpdated:function(t,e){var i=this.option;Uv.canvasSupported||(i.realtime=!1),!e&&Jg(i,t,this.replacableOptionKeys),this.textStyleModel=this.getModel("textStyle"),this.resetItemSize(),this.completeVisualOption()},resetVisual:function(t){var e=this.stateList;t=m(t,this),this.controllerVisuals=Kg(this.option.controller,e,t),this.targetVisuals=Kg(this.option.target,e,t)},getTargetSeriesIndices:function(){var t=this.option.seriesIndex,e=[];return null==t||"all"===t?this.ecModel.eachSeries(function(t,i){e.push(i)}):e=Oo(t),e},eachTargetSeries:function(t,e){d(this.getTargetSeriesIndices(),function(i){t.call(e,this.ecModel.getSeriesByIndex(i))},this)},isTargetSeries:function(t){var e=!1;return this.eachTargetSeries(function(i){i===t&&(e=!0)}),e},formatValueText:function(t,e,i){function n(t){return t===l[0]?"min":t===l[1]?"max":(+t).toFixed(Math.min(s,20))}var o,a,r=this.option,s=r.precision,l=this.dataBound,h=r.formatter;return i=i||["<",">"],y(t)&&(t=t.slice(),o=!0),a=e?t:o?[n(t[0]),n(t[1])]:n(t),_(h)?h.replace("{value}",o?a[0]:a).replace("{value2}",o?a[1]:a):x(h)?o?h(t[0],t[1]):h(t):o?t[0]===l[0]?i[0]+" "+a[1]:t[1]===l[1]?i[1]+" "+a[0]:a[0]+" - "+a[1]:a},resetExtent:function(){var t=this.option,e=UD([t.min,t.max]);this._dataExtent=e},getDataDimension:function(t){var e=this.option.dimension;return null!=e?e:t.dimensions.length-1},getExtent:function(){return this._dataExtent.slice()},completeVisualOption:function(){function t(t){FD(e.color)&&!t.inRange&&(t.inRange={color:e.color.slice().reverse()}),t.inRange=t.inRange||{color:qD},ZD(this.stateList,function(e){var i=t[e];if(_(i)){var n=BD.get(i,"active",s);n?(t[e]={},t[e][i]=n):delete t[e]}},this)}var e=this.option,o={inRange:e.inRange,outOfRange:e.outOfRange},a=e.target||(e.target={}),r=e.controller||(e.controller={});n(a,o),n(r,o);var s=this.isCategory();t.call(this,a),t.call(this,r),function(t,e,i){var n=t[e],o=t[i];n&&!o&&(o=t[i]={},ZD(n,function(t,e){if(jI.isValidType(e)){var i=BD.get(e,"inactive",s);null!=i&&(o[e]=i,"color"!==e||o.hasOwnProperty("opacity")||o.hasOwnProperty("colorAlpha")||(o.opacity=[0,0]))}}))}.call(this,a,"inRange","outOfRange"),function(t){var e=(t.inRange||{}).symbol||(t.outOfRange||{}).symbol,n=(t.inRange||{}).symbolSize||(t.outOfRange||{}).symbolSize,o=this.get("inactiveColor");ZD(this.stateList,function(a){var r=this.itemSize,l=t[a];l||(l=t[a]={color:s?o:[o]}),null==l.symbol&&(l.symbol=e&&i(e)||(s?"roundRect":["roundRect"])),null==l.symbolSize&&(l.symbolSize=n&&i(n)||(s?r[0]:[r[0],r[0]])),l.symbol=WD(l.symbol,function(t){return"none"===t||"square"===t?"roundRect":t});var h=l.symbolSize;if(null!=h){var u=-1/0;HD(h,function(t){t>u&&(u=t)}),l.symbolSize=WD(h,function(t){return XD(t,[0,u],[0,r[0]],!0)})}},this)}.call(this,r)},resetItemSize:function(){this.itemSize=[parseFloat(this.get("itemWidth")),parseFloat(this.get("itemHeight"))]},isCategory:function(){return!!this.option.categories},setSelected:jD,getValueState:jD,getVisualMeta:jD}),$D=[20,140],KD=YD.extend({type:"visualMap.continuous",defaultOption:{align:"auto",calculable:!1,range:null,realtime:!0,itemHeight:null,itemWidth:null,hoverLink:!0,hoverLinkDataSize:null,hoverLinkOnHandle:null},optionUpdated:function(t,e){KD.superApply(this,"optionUpdated",arguments),this.resetExtent(),this.resetVisual(function(t){t.mappingMethod="linear",t.dataExtent=this.getExtent()}),this._resetRange()},resetItemSize:function(){KD.superApply(this,"resetItemSize",arguments);var t=this.itemSize;"horizontal"===this._orient&&t.reverse(),(null==t[0]||isNaN(t[0]))&&(t[0]=$D[0]),(null==t[1]||isNaN(t[1]))&&(t[1]=$D[1])},_resetRange:function(){var t=this.getExtent(),e=this.option.range;!e||e.auto?(t.auto=1,this.option.range=t):y(e)&&(e[0]>e[1]&&e.reverse(),e[0]=Math.max(e[0],t[0]),e[1]=Math.min(e[1],t[1]))},completeVisualOption:function(){YD.prototype.completeVisualOption.apply(this,arguments),d(this.stateList,function(t){var e=this.option.controller[t].symbolSize;e&&e[0]!==e[1]&&(e[0]=0)},this)},setSelected:function(t){this.option.range=t.slice(),this._resetRange()},getSelected:function(){var t=this.getExtent(),e=Ii((this.get("range")||[]).slice());return e[0]>t[1]&&(e[0]=t[1]),e[1]>t[1]&&(e[1]=t[1]),e[0]=i[1]||t<=e[1])?"inRange":"outOfRange"},findTargetDataIndices:function(t){var e=[];return this.eachTargetSeries(function(i){var n=[],o=i.getData();o.each(this.getDataDimension(o),function(e,i){t[0]<=e&&e<=t[1]&&n.push(i)},!0,this),e.push({seriesId:i.id,dataIndex:n})},this),e},getVisualMeta:function(t){function e(e,i){o.push({value:e,color:t(e,i)})}for(var i=im(0,0,this.getExtent()),n=im(0,0,this.option.range.slice()),o=[],a=0,r=0,s=n.length,l=i.length;rt[1])break;i.push({color:this.getControllerVisual(a,"color",e),offset:o/100})}return i.push({color:this.getControllerVisual(t[1],"color",e),offset:1}),i},_createBarPoints:function(t,e){var i=this.visualMapModel.itemSize;return[[i[0]-e[0],t[0]],[i[0],t[0]],[i[0],t[1]],[i[0]-e[1],t[1]]]},_createBarGroup:function(t){var e=this._orient,i=this.visualMapModel.get("inverse");return new jy("horizontal"!==e||i?"horizontal"===e&&i?{scale:"bottom"===t?[-1,1]:[1,1],rotation:-Math.PI/2}:"vertical"!==e||i?{scale:"left"===t?[1,1]:[-1,1]}:{scale:"left"===t?[1,-1]:[-1,-1]}:{scale:"bottom"===t?[1,1]:[-1,1],rotation:Math.PI/2})},_updateHandle:function(t,e){if(this._useHandle){var i=this._shapes,n=this.visualMapModel,o=i.handleThumbs,a=i.handleLabels;tL([0,1],function(r){var s=o[r];s.setStyle("fill",e.handlesColor[r]),s.position[1]=t[r];var l=Io(i.handleLabelPoints[r],Mo(s,this.group));a[r].setStyle({x:l[0],y:l[1],text:n.formatValueText(this._dataInterval[r]),textVerticalAlign:"middle",textAlign:this._applyTransform("horizontal"===this._orient?0===r?"bottom":"top":"left",i.barGroup)})},this)}},_showIndicator:function(t,e,i,n){var o=this.visualMapModel,a=o.getExtent(),r=o.itemSize,s=[0,r[1]],l=QD(t,a,s,!0),h=this._shapes,u=h.indicator;if(u){u.position[1]=l,u.attr("invisible",!1),u.setShape("points",sm(!!i,n,l,r[1]));var c={convertOpacityToAlpha:!0},d=this.getControllerVisual(t,"color",c);u.setStyle("fill",d);var f=Io(h.indicatorLabelPoint,Mo(u,this.group)),g=h.indicatorLabel;g.attr("invisible",!1);var p=this._applyTransform("left",h.barGroup),m=this._orient;g.setStyle({text:(i||"")+o.formatValueText(e),textVerticalAlign:"horizontal"===m?p:"middle",textAlign:"horizontal"===m?"center":p,x:f[0],y:f[1]})}},_enableHoverLinkToSeries:function(){var t=this;this._shapes.barGroup.on("mousemove",function(e){if(t._hovering=!0,!t._dragging){var i=t.visualMapModel.itemSize,n=t._applyTransform([e.offsetX,e.offsetY],t._shapes.barGroup,!0,!0);n[1]=eL(iL(0,n[1]),i[1]),t._doHoverLinkToSeries(n[1],0<=n[0]&&n[0]<=i[0])}}).on("mouseout",function(){t._hovering=!1,!t._dragging&&t._clearHoverLinkToSeries()})},_enableHoverLinkFromSeries:function(){var t=this.api.getZr();this.visualMapModel.option.hoverLink?(t.on("mouseover",this._hoverLinkFromSeriesMouseOver,this),t.on("mouseout",this._hideIndicator,this)):this._clearHoverLinkFromSeries()},_doHoverLinkToSeries:function(t,e){var i=this.visualMapModel,n=i.itemSize;if(i.option.hoverLink){var o=[0,n[1]],a=i.getExtent();t=eL(iL(o[0],t),o[1]);var r=lm(i,a,o),s=[t-r,t+r],l=QD(t,o,a,!0),h=[QD(s[0],o,a,!0),QD(s[1],o,a,!0)];s[0]o[1]&&(h[1]=1/0),e&&(h[0]===-1/0?this._showIndicator(l,h[1],"< ",r):h[1]===1/0?this._showIndicator(l,h[0],"> ",r):this._showIndicator(l,l,"≈ ",r));var u=this._hoverLinkDataIndices,c=[];(e||hm(i))&&(c=this._hoverLinkDataIndices=i.findTargetDataIndices(h));var d=Wo(u,c);this._dispatchHighDown("downplay",om(d[0])),this._dispatchHighDown("highlight",om(d[1]))}},_hoverLinkFromSeriesMouseOver:function(t){var e=t.target,i=this.visualMapModel;if(e&&null!=e.dataIndex){var n=this.ecModel.getSeriesByIndex(e.seriesIndex);if(i.isTargetSeries(n)){var o=n.getData(e.dataType),a=o.getDimension(i.getDataDimension(o)),r=o.get(a,e.dataIndex,!0);isNaN(r)||this._showIndicator(r,r)}}},_hideIndicator:function(){var t=this._shapes;t.indicator&&t.indicator.attr("invisible",!0),t.indicatorLabel&&t.indicatorLabel.attr("invisible",!0)},_clearHoverLinkToSeries:function(){this._hideIndicator();var t=this._hoverLinkDataIndices;this._dispatchHighDown("downplay",om(t)),t.length=0},_clearHoverLinkFromSeries:function(){this._hideIndicator();var t=this.api.getZr();t.off("mouseover",this._hoverLinkFromSeriesMouseOver),t.off("mouseout",this._hideIndicator)},_applyTransform:function(t,e,i,n){var o=Mo(e,n?null:this.group);return Tb[y(t)?"applyTransform":"transformDirection"](t,o,i)},_dispatchHighDown:function(t,e){e&&e.length&&this.api.dispatchAction({type:t,batch:e})},dispose:function(){this._clearHoverLinkFromSeries(),this._clearHoverLinkToSeries()},remove:function(){this._clearHoverLinkFromSeries(),this._clearHoverLinkToSeries()}});ir({type:"selectDataRange",event:"dataRangeSelected",update:"update"},function(t,e){e.eachComponent({mainType:"visualMap",query:t},function(e){e.setSelected(t.selected)})}),tr(VD);var rL=YD.extend({type:"visualMap.piecewise",defaultOption:{selected:null,minOpen:!1,maxOpen:!1,align:"auto",itemWidth:20,itemHeight:14,itemSymbol:"roundRect",pieceList:null,categories:null,splitNumber:5,selectedMode:"multiple",itemGap:10,hoverLink:!0,showLabel:null},optionUpdated:function(t,e){rL.superApply(this,"optionUpdated",arguments),this._pieceList=[],this.resetExtent();var n=this._mode=this._determineMode();sL[this._mode].call(this),this._resetSelected(t,e);var o=this.option.categories;this.resetVisual(function(t,e){"categories"===n?(t.mappingMethod="category",t.categories=i(o)):(t.dataExtent=this.getExtent(),t.mappingMethod="piecewise",t.pieceList=f(this._pieceList,function(t){var t=i(t);return"inRange"!==e&&(t.visual=null),t}))})},completeVisualOption:function(){function t(t,e,i){return t&&t[e]&&(b(t[e])?t[e].hasOwnProperty(i):t[e]===i)}var e=this.option,i={},n=jI.listVisualTypes(),o=this.isCategory();d(e.pieces,function(t){d(n,function(e){t.hasOwnProperty(e)&&(i[e]=1)})}),d(i,function(i,n){var a=0;d(this.stateList,function(i){a|=t(e,i,n)||t(e.target,i,n)},this),!a&&d(this.stateList,function(t){(e[t]||(e[t]={}))[n]=BD.get(n,"inRange"===t?"active":"inactive",o)})},this),YD.prototype.completeVisualOption.apply(this,arguments)},_resetSelected:function(t,e){var i=this.option,n=this._pieceList,o=(e?i:t).selected||{};if(i.selected=o,d(n,function(t,e){var i=this.getSelectedMapKey(t);o.hasOwnProperty(i)||(o[i]=!0)},this),"single"===i.selectedMode){var a=!1;d(n,function(t,e){var i=this.getSelectedMapKey(t);o[i]&&(a?o[i]=!1:a=!0)},this)}},getSelectedMapKey:function(t){return"categories"===this._mode?t.value+"":t.index+""},getPieceList:function(){return this._pieceList},_determineMode:function(){var t=this.option;return t.pieces&&t.pieces.length>0?"pieces":this.option.categories?"categories":"splitNumber"},setSelected:function(t){this.option.selected=i(t)},getValueState:function(t){var e=jI.findPieceIndex(t,this._pieceList);return null!=e&&this.option.selected[this.getSelectedMapKey(this._pieceList[e])]?"inRange":"outOfRange"},findTargetDataIndices:function(t){var e=[];return this.eachTargetSeries(function(i){var n=[],o=i.getData();o.each(this.getDataDimension(o),function(e,i){jI.findPieceIndex(e,this._pieceList)===t&&n.push(i)},!0,this),e.push({seriesId:i.id,dataIndex:n})},this),e},getRepresentValue:function(t){var e;if(this.isCategory())e=t.value;else if(null!=t.value)e=t.value;else{var i=t.interval||[];e=i[0]===-1/0&&i[1]===1/0?0:(i[0]+i[1])/2}return e},getVisualMeta:function(t){function e(e,a){var r=o.getRepresentValue({interval:e});a||(a=o.getValueState(r));var s=t(r,a);e[0]===-1/0?n[0]=s:e[1]===1/0?n[1]=s:i.push({value:e[0],color:s},{value:e[1],color:s})}if(!this.isCategory()){var i=[],n=[],o=this,a=this._pieceList.slice();if(a.length){var r=a[0].interval[0];r!==-1/0&&a.unshift({interval:[-1/0,r]}),(r=a[a.length-1].interval[1])!==1/0&&a.push({interval:[r,1/0]})}else a.push({interval:[-1/0,1/0]});var s=-1/0;return d(a,function(t){var i=t.interval;i&&(i[0]>s&&e([s,i[0]],"outOfRange"),e(i.slice()),s=i[1])},this),{stops:i,outerColors:n}}}}),sL={splitNumber:function(){var t=this.option,e=this._pieceList,i=Math.min(t.precision,20),n=this.getExtent(),o=t.splitNumber;o=Math.max(parseInt(o,10),1),t.splitNumber=o;for(var a=(n[1]-n[0])/o;+a.toFixed(i)!==a&&i<5;)i++;t.precision=i,a=+a.toFixed(i);var r=0;t.minOpen&&e.push({index:r++,interval:[-1/0,n[0]],close:[0,0]});for(var s=n[0],l=r+o;r","≥"][e[0]]];t.text=t.text||this.formatValueText(null!=t.value?t.value:t.interval,!1,i)},this)}};JD.extend({type:"visualMap.piecewise",doRender:function(){var t=this.group;t.removeAll();var e=this.visualMapModel,i=e.get("textGap"),n=e.textStyleModel,o=n.getFont(),a=n.getTextColor(),r=this._getItemAlign(),s=e.itemSize,l=this._getViewData(),h=l.endsText,u=I(e.get("showLabel",!0),!h);h&&this._renderEndsText(t,h[0],s,u,r),d(l.viewPieceList,function(n){var l=n.piece,h=new jy;h.onclick=m(this._onItemClick,this,l),this._enableHoverLink(h,n.indexInModelPieceList);var c=e.getRepresentValue(l);if(this._createItemSymbol(h,c,[0,0,s[0],s[1]]),u){var d=this.visualMapModel.getValueState(c);h.add(new ib({style:{x:"right"===r?-i:s[0]+i,y:s[1]/2,text:l.text,textVerticalAlign:"middle",textAlign:r,textFont:o,textFill:a,opacity:"outOfRange"===d?.5:1}}))}t.add(h)},this),h&&this._renderEndsText(t,h[1],s,u,r),Hb(e.get("orient"),t,e.get("itemGap")),this.renderBackground(t),this.positionGroup(t)},_enableHoverLink:function(t,e){function i(t){var i=this.visualMapModel;i.option.hoverLink&&this.api.dispatchAction({type:t,batch:om(i.findTargetDataIndices(e))})}t.on("mouseover",m(i,this,"highlight")).on("mouseout",m(i,this,"downplay"))},_getItemAlign:function(){var t=this.visualMapModel,e=t.option;if("vertical"===e.orient)return nm(t,this.api,t.itemSize);var i=e.align;return i&&"auto"!==i||(i="left"),i},_renderEndsText:function(t,e,i,n,o){if(e){var a=new jy,r=this.visualMapModel.textStyleModel;a.add(new ib({style:{x:n?"right"===o?i[0]:0:i[0]/2,y:i[1]/2,textVerticalAlign:"middle",textAlign:n?o:"center",text:e,textFont:r.getFont(),textFill:r.getTextColor()}})),t.add(a)}},_getViewData:function(){var t=this.visualMapModel,e=f(t.getPieceList(),function(t,e){return{piece:t,indexInModelPieceList:e}}),i=t.get("text"),n=t.get("orient"),o=t.get("inverse");return("horizontal"===n?o:!o)?e.reverse():i&&(i=i.slice().reverse()),{viewPieceList:e,endsText:i}},_createItemSymbol:function(t,e,i){t.add(Hr(this.getControllerVisual(e,"symbol"),i[0],i[1],i[2],i[3],this.getControllerVisual(e,"color")))},_onItemClick:function(t){var e=this.visualMapModel,n=e.option,o=i(n.selected),a=e.getSelectedMapKey(t);"single"===n.selectedMode?(o[a]=!0,d(o,function(t,e){o[e]=e===a})):o[a]=!o[a],this.api.dispatchAction({type:"selectDataRange",from:this.uid,visualMapId:this.visualMapModel.id,selected:o})}});tr(VD);var lL=Vi,hL=Gi,uL=sr({type:"marker",dependencies:["series","grid","polar","geo"],init:function(t,e,i,n){this.mergeDefaultAndTheme(t,i),this.mergeOption(t,i,n.createdBySelf,!0)},isAnimationEnabled:function(){if(Uv.node)return!1;var t=this.__hostSeries;return this.getShallow("animation")&&t&&t.isAnimationEnabled()},mergeOption:function(t,e,i,n){var o=this.constructor,r=this.mainType+"Model";i||e.eachSeries(function(t){var i=t.get(this.mainType),s=t[r];i&&i.data?(s?s.mergeOption(i,e,!0):(n&&dm(i),d(i.data,function(t){t instanceof Array?(dm(t[0]),dm(t[1])):dm(t)}),a(s=new o(i,this,e),{mainType:this.mainType,seriesIndex:t.seriesIndex,name:t.name,createdBySelf:!0}),s.__hostSeries=t),t[r]=s):t[r]=null},this)},formatTooltip:function(t){var e=this.getData(),i=this.getRawValue(t),n=y(i)?f(i,lL).join(", "):lL(i),o=e.getName(t),a=hL(this.name);return(null!=i||o)&&(a+="
"),o&&(a+=hL(o),null!=i&&(a+=" : ")),null!=i&&(a+=hL(n)),a},getData:function(){return this._data},setData:function(t){this._data=t}});u(uL,Nb),uL.extend({type:"markPoint",defaultOption:{zlevel:0,z:5,symbol:"pin",symbolSize:50,tooltip:{trigger:"item"},label:{normal:{show:!0,position:"inside"},emphasis:{show:!0}},itemStyle:{normal:{borderWidth:2}}}});var cL=l,dL=v,fL={min:dL(mm,"min"),max:dL(mm,"max"),average:dL(mm,"average")},gL=lr({type:"marker",init:function(){this.markerGroupMap=z()},render:function(t,e,i){var n=this.markerGroupMap;n.each(function(t){t.__keep=!1});var o=this.type+"Model";e.eachSeries(function(t){var n=t[o];n&&this.renderSeries(t,n,e,i)},this),n.each(function(t){!t.__keep&&this.group.remove(t.group)},this)},renderSeries:function(){}});gL.extend({type:"markPoint",updateLayout:function(t,e,i){e.eachSeries(function(t){var e=t.markPointModel;e&&(wm(e.getData(),t,i),this.markerGroupMap.get(t.id).updateLayout(e))},this)},renderSeries:function(t,e,i,n){var o=t.coordinateSystem,a=t.id,r=t.getData(),s=this.markerGroupMap,l=s.get(a)||s.set(a,new ts),h=Sm(o,t,e);e.setData(h),wm(e.getData(),t,n),h.each(function(t){var i=h.getItemModel(t),n=i.getShallow("symbolSize");"function"==typeof n&&(n=n(e.getRawValue(t),e.getDataParams(t))),h.setItemVisual(t,{symbolSize:n,color:i.get("itemStyle.normal.color")||r.getVisual("color"),symbol:i.getShallow("symbol")})}),l.updateData(h),this.group.add(l.group),h.eachItemGraphicEl(function(t){t.traverse(function(t){t.dataModel=e})}),l.__keep=!0,l.group.silent=e.get("silent")||t.get("silent")}}),tr(function(t){t.markPoint=t.markPoint||{}}),uL.extend({type:"markLine",defaultOption:{zlevel:0,z:5,symbol:["circle","arrow"],symbolSize:[8,16],precision:2,tooltip:{trigger:"item"},label:{normal:{show:!0,position:"end"},emphasis:{show:!0}},lineStyle:{normal:{type:"dashed"},emphasis:{width:3}},animationEasing:"linear"}});var pL=function(t,e,o,r){var s=t.getData(),l=r.type;if(!y(r)&&("min"===l||"max"===l||"average"===l||null!=r.xAxis||null!=r.yAxis)){var h,u;if(null!=r.yAxis||null!=r.xAxis)h=null!=r.yAxis?"y":"x",e.getAxis(h),u=I(r.yAxis,r.xAxis);else{var c=ym(r,s,e,t);h=c.valueDataDim,c.valueAxis,u=bm(s,h,l)}var d="x"===h?0:1,f=1-d,g=i(r),p={};g.type=null,g.coord=[],p.coord=[],g.coord[f]=-1/0,p.coord[f]=1/0;var m=o.get("precision");m>=0&&"number"==typeof u&&(u=+u.toFixed(Math.min(m,20))),g.coord[d]=p.coord[d]=u,r=[g,p,{type:l,valueIndex:r.valueIndex,value:u}]}return r=[vm(t,r[0]),vm(t,r[1]),a({},r[2])],r[2].type=r[2].type||"",n(r[2],r[0]),n(r[2],r[1]),r};gL.extend({type:"markLine",updateLayout:function(t,e,i){e.eachSeries(function(t){var e=t.markLineModel;if(e){var n=e.getData(),o=e.__from,a=e.__to;o.each(function(e){Am(o,e,!0,t,i),Am(a,e,!1,t,i)}),n.each(function(t){n.setItemLayout(t,[o.getItemLayout(t),a.getItemLayout(t)])}),this.markerGroupMap.get(t.id).updateLayout()}},this)},renderSeries:function(t,e,i,n){function o(e,i,o){var a=e.getItemModel(i);Am(e,i,o,t,n),e.setItemVisual(i,{symbolSize:a.get("symbolSize")||p[o?0:1],symbol:a.get("symbol",!0)||g[o?0:1],color:a.get("itemStyle.normal.color")||s.getVisual("color")})}var a=t.coordinateSystem,r=t.id,s=t.getData(),l=this.markerGroupMap,h=l.get(r)||l.set(r,new Mu);this.group.add(h.group);var u=Cm(a,t,e),c=u.from,d=u.to,f=u.line;e.__from=c,e.__to=d,e.setData(f);var g=e.get("symbol"),p=e.get("symbolSize");y(g)||(g=[g,g]),"number"==typeof p&&(p=[p,p]),u.from.each(function(t){o(c,t,!0),o(d,t,!1)}),f.each(function(t){var e=f.getItemModel(t).get("lineStyle.normal.color");f.setItemVisual(t,{color:e||c.getItemVisual(t,"color")}),f.setItemLayout(t,[c.getItemLayout(t),d.getItemLayout(t)]),f.setItemVisual(t,{fromSymbolSize:c.getItemVisual(t,"symbolSize"),fromSymbol:c.getItemVisual(t,"symbol"),toSymbolSize:d.getItemVisual(t,"symbolSize"),toSymbol:d.getItemVisual(t,"symbol")})}),h.updateData(f),u.line.eachItemGraphicEl(function(t,i){t.traverse(function(t){t.dataModel=e})}),h.__keep=!0,h.group.silent=e.get("silent")||t.get("silent")}}),tr(function(t){t.markLine=t.markLine||{}}),uL.extend({type:"markArea",defaultOption:{zlevel:0,z:1,tooltip:{trigger:"item"},animation:!1,label:{normal:{show:!0,position:"top"},emphasis:{show:!0,position:"top"}},itemStyle:{normal:{borderWidth:0}}}});var mL=function(t,e,i,n){var a=vm(t,n[0]),r=vm(t,n[1]),s=I,l=a.coord,h=r.coord;l[0]=s(l[0],-1/0),l[1]=s(l[1],-1/0),h[0]=s(h[0],1/0),h[1]=s(h[1],1/0);var u=o([{},a,r]);return u.coord=[a.coord,r.coord],u.x0=a.x,u.y0=a.y,u.x1=r.x,u.y1=r.y,u},vL=[["x0","y0"],["x1","y0"],["x1","y1"],["x0","y1"]];gL.extend({type:"markArea",updateLayout:function(t,e,i){e.eachSeries(function(t){var e=t.markAreaModel;if(e){var n=e.getData();n.each(function(e){var o=f(vL,function(o){return Pm(n,e,o,t,i)});n.setItemLayout(e,o),n.getItemGraphicEl(e).setShape("points",o)})}},this)},renderSeries:function(t,e,i,n){var o=t.coordinateSystem,a=t.name,s=t.getData(),l=this.markerGroupMap,h=l.get(a)||l.set(a,{group:new jy});this.group.add(h.group),h.__keep=!0;var u=Om(o,t,e);e.setData(u),u.each(function(e){u.setItemLayout(e,f(vL,function(i){return Pm(u,e,i,t,n)})),u.setItemVisual(e,{color:s.getVisual("color")})}),u.diff(h.__data).add(function(t){var e=new ub({shape:{points:u.getItemLayout(t)}});u.setItemGraphicEl(t,e),h.group.add(e)}).update(function(t,i){var n=h.__data.getItemGraphicEl(i);wo(n,{shape:{points:u.getItemLayout(t)}},e,t),h.group.add(n),u.setItemGraphicEl(t,n)}).remove(function(t){var e=h.__data.getItemGraphicEl(t);h.group.remove(e)}).execute(),u.eachItemGraphicEl(function(t,i){var n=u.getItemModel(i),o=n.getModel("label.normal"),a=n.getModel("label.emphasis"),s=u.getItemVisual(i,"color");t.useStyle(r(n.getModel("itemStyle.normal").getItemStyle(),{fill:Pt(s,.4),stroke:s})),t.hoverStyle=n.getModel("itemStyle.emphasis").getItemStyle(),co(t.style,t.hoverStyle,o,a,{labelFetcher:e,labelDataIndex:i,defaultText:u.getName(i)||"",isRectText:!0,autoColor:s}),uo(t,{}),t.dataModel=e}),h.__data=u,h.group.silent=e.get("silent")||t.get("silent")}}),tr(function(t){t.markArea=t.markArea||{}});Ub.registerSubTypeDefaulter("timeline",function(){return"slider"}),ir({type:"timelineChange",event:"timelineChanged",update:"prepareAndUpdate"},function(t,e){var i=e.getComponent("timeline");return i&&null!=t.currentIndex&&(i.setCurrentIndex(t.currentIndex),!i.get("loop",!0)&&i.isIndexMax()&&i.setPlayState(!1)),e.resetOption("timeline"),r({currentIndex:i.option.currentIndex},t)}),ir({type:"timelinePlayChange",event:"timelinePlayChanged",update:"update"},function(t,e){var i=e.getComponent("timeline");i&&null!=t.playState&&i.setPlayState(t.playState)});var yL=Ub.extend({type:"timeline",layoutMode:"box",defaultOption:{zlevel:0,z:4,show:!0,axisType:"time",realtime:!0,left:"20%",top:null,right:"20%",bottom:0,width:null,height:40,padding:5,controlPosition:"left",autoPlay:!1,rewind:!1,loop:!0,playInterval:2e3,currentIndex:0,itemStyle:{normal:{},emphasis:{}},label:{normal:{color:"#000"},emphasis:{}},data:[]},init:function(t,e,i){this._data,this._names,this.mergeDefaultAndTheme(t,i),this._initData()},mergeOption:function(t){yL.superApply(this,"mergeOption",arguments),this._initData()},setCurrentIndex:function(t){null==t&&(t=this.option.currentIndex);var e=this._data.count();this.option.loop?t=(t%e+e)%e:(t>=e&&(t=e-1),t<0&&(t=0)),this.option.currentIndex=t},getCurrentIndex:function(){return this.option.currentIndex},isIndexMax:function(){return this.getCurrentIndex()>=this._data.count()-1},setPlayState:function(t){this.option.autoPlay=!!t},getPlayState:function(){return!!this.option.autoPlay},_initData:function(){var t=this.option,e=t.data||[],n=t.axisType,o=this._names=[];if("category"===n){var a=[];d(e,function(t,e){var n,r=No(t);b(t)?(n=i(t)).value=e:n=e,a.push(n),_(r)||null!=r&&!isNaN(r)||(r=""),o.push(r+"")}),e=a}var r={category:"ordinal",time:"time"}[n]||"number";(this._data=new aS([{name:"value",type:r}],this)).initData(e,o)},getData:function(){return this._data},getCategories:function(){if("category"===this.get("axisType"))return this._names.slice()}});u(yL.extend({type:"timeline.slider",defaultOption:{backgroundColor:"rgba(0,0,0,0)",borderColor:"#ccc",borderWidth:0,orient:"horizontal",inverse:!1,tooltip:{trigger:"item"},symbol:"emptyCircle",symbolSize:10,lineStyle:{show:!0,width:2,color:"#304654"},label:{position:"auto",normal:{show:!0,interval:"auto",rotate:0,color:"#304654"},emphasis:{show:!0,color:"#c23531"}},itemStyle:{normal:{color:"#304654",borderWidth:1},emphasis:{color:"#c23531"}},checkpointStyle:{symbol:"circle",symbolSize:13,color:"#c23531",borderWidth:5,borderColor:"rgba(194,53,49, 0.5)",animation:!0,animationDuration:300,animationEasing:"quinticInOut"},controlStyle:{show:!0,showPlayBtn:!0,showPrevBtn:!0,showNextBtn:!0,itemSize:22,itemGap:12,position:"left",playIcon:"path://M31.6,53C17.5,53,6,41.5,6,27.4S17.5,1.8,31.6,1.8C45.7,1.8,57.2,13.3,57.2,27.4S45.7,53,31.6,53z M31.6,3.3 C18.4,3.3,7.5,14.1,7.5,27.4c0,13.3,10.8,24.1,24.1,24.1C44.9,51.5,55.7,40.7,55.7,27.4C55.7,14.1,44.9,3.3,31.6,3.3z M24.9,21.3 c0-2.2,1.6-3.1,3.5-2l10.5,6.1c1.899,1.1,1.899,2.9,0,4l-10.5,6.1c-1.9,1.1-3.5,0.2-3.5-2V21.3z",stopIcon:"path://M30.9,53.2C16.8,53.2,5.3,41.7,5.3,27.6S16.8,2,30.9,2C45,2,56.4,13.5,56.4,27.6S45,53.2,30.9,53.2z M30.9,3.5C17.6,3.5,6.8,14.4,6.8,27.6c0,13.3,10.8,24.1,24.101,24.1C44.2,51.7,55,40.9,55,27.6C54.9,14.4,44.1,3.5,30.9,3.5z M36.9,35.8c0,0.601-0.4,1-0.9,1h-1.3c-0.5,0-0.9-0.399-0.9-1V19.5c0-0.6,0.4-1,0.9-1H36c0.5,0,0.9,0.4,0.9,1V35.8z M27.8,35.8 c0,0.601-0.4,1-0.9,1h-1.3c-0.5,0-0.9-0.399-0.9-1V19.5c0-0.6,0.4-1,0.9-1H27c0.5,0,0.9,0.4,0.9,1L27.8,35.8L27.8,35.8z",nextIcon:"path://M18.6,50.8l22.5-22.5c0.2-0.2,0.3-0.4,0.3-0.7c0-0.3-0.1-0.5-0.3-0.7L18.7,4.4c-0.1-0.1-0.2-0.3-0.2-0.5 c0-0.4,0.3-0.8,0.8-0.8c0.2,0,0.5,0.1,0.6,0.3l23.5,23.5l0,0c0.2,0.2,0.3,0.4,0.3,0.7c0,0.3-0.1,0.5-0.3,0.7l-0.1,0.1L19.7,52 c-0.1,0.1-0.3,0.2-0.5,0.2c-0.4,0-0.8-0.3-0.8-0.8C18.4,51.2,18.5,51,18.6,50.8z",prevIcon:"path://M43,52.8L20.4,30.3c-0.2-0.2-0.3-0.4-0.3-0.7c0-0.3,0.1-0.5,0.3-0.7L42.9,6.4c0.1-0.1,0.2-0.3,0.2-0.5 c0-0.4-0.3-0.8-0.8-0.8c-0.2,0-0.5,0.1-0.6,0.3L18.3,28.8l0,0c-0.2,0.2-0.3,0.4-0.3,0.7c0,0.3,0.1,0.5,0.3,0.7l0.1,0.1L41.9,54 c0.1,0.1,0.3,0.2,0.5,0.2c0.4,0,0.8-0.3,0.8-0.8C43.2,53.2,43.1,53,43,52.8z",normal:{color:"#304654",borderColor:"#304654",borderWidth:1},emphasis:{color:"#c23531",borderColor:"#c23531",borderWidth:2}},data:[]}}),Nb);var xL=xw.extend({type:"timeline"}),_L=function(t,e,i,n){US.call(this,t,e,i),this.type=n||"value",this._autoLabelInterval,this.model=null};_L.prototype={constructor:_L,getLabelInterval:function(){var t=this.model,e=t.getModel("label.normal"),i=e.get("interval");return null!=i&&"auto"!=i?i:((i=this._autoLabelInterval)||(i=this._autoLabelInterval=Rr(f(this.scale.getTicks(),this.dataToCoord,this),Vr(this,e.get("formatter")),e.getFont(),"horizontal"===t.get("orient")?0:90,e.get("rotate"))),i)},isLabelIgnored:function(t){if("category"===this.type){var e=this.getLabelInterval();return"function"==typeof e&&!e(t,this.scale.getLabel(t))||t%(e+1)}}},h(_L,US);var bL=m,wL=d,SL=Math.PI;xL.extend({type:"timeline.slider",init:function(t,e){this.api=e,this._axis,this._viewRect,this._timer,this._currentPointer,this._mainGroup,this._labelGroup},render:function(t,e,i,n){if(this.model=t,this.api=i,this.ecModel=e,this.group.removeAll(),t.get("show",!0)){var o=this._layout(t,i),a=this._createGroup("mainGroup"),r=this._createGroup("labelGroup"),s=this._axis=this._createAxis(o,t);t.formatTooltip=function(t){return Gi(s.scale.getLabel(t))},wL(["AxisLine","AxisTick","Control","CurrentPointer"],function(e){this["_render"+e](o,a,s,t)},this),this._renderAxisLabel(o,r,s,t),this._position(o,t)}this._doPlayStop()},remove:function(){this._clearTimer(),this.group.removeAll()},dispose:function(){this._clearTimer()},_layout:function(t,e){var i=t.get("label.normal.position"),n=t.get("orient"),o=Rm(t,e);null==i||"auto"===i?i="horizontal"===n?o.y+o.height/2=0||"+"===i?"left":"right"},r={horizontal:i>=0||"+"===i?"top":"bottom",vertical:"middle"},s={horizontal:0,vertical:SL/2},l="vertical"===n?o.height:o.width,h=t.getModel("controlStyle"),u=h.get("show"),c=u?h.get("itemSize"):0,d=u?h.get("itemGap"):0,f=c+d,g=t.get("label.normal.rotate")||0;g=g*SL/180;var p,m,v,y,x=h.get("position",!0),_=(u=h.get("show",!0))&&h.get("showPlayBtn",!0),b=u&&h.get("showPrevBtn",!0),w=u&&h.get("showNextBtn",!0),S=0,M=l;return"left"===x||"bottom"===x?(_&&(p=[0,0],S+=f),b&&(m=[S,0],S+=f),w&&(v=[M-c,0],M-=f)):(_&&(p=[M-c,0],M-=f),b&&(m=[0,0],S+=f),w&&(v=[M-c,0],M-=f)),y=[S,M],t.get("inverse")&&y.reverse(),{viewRect:o,mainLength:l,orient:n,rotation:s[n],labelRotation:g,labelPosOpt:i,labelAlign:t.get("label.normal.align")||a[n],labelBaseline:t.get("label.normal.verticalAlign")||t.get("label.normal.baseline")||r[n],playPosition:p,prevBtnPosition:m,nextBtnPosition:v,axisExtent:y,controlSize:c,controlGap:d}},_position:function(t,e){function i(t){var e=t.position;t.origin=[c[0][0]-e[0],c[1][0]-e[1]]}function n(t){return[[t.x,t.x+t.width],[t.y,t.y+t.height]]}function o(t,e,i,n,o){t[n]+=i[n][o]-e[n][o]}var a=this._mainGroup,r=this._labelGroup,s=t.viewRect;if("vertical"===t.orient){var l=ot(),h=s.x,u=s.y+s.height;lt(l,l,[-h,-u]),ht(l,l,-SL/2),lt(l,l,[h,u]),(s=s.clone()).applyTransform(l)}var c=n(s),d=n(a.getBoundingRect()),f=n(r.getBoundingRect()),g=a.position,p=r.position;p[0]=g[0]=c[0][0];var m=t.labelPosOpt;if(isNaN(m))o(g,d,c,1,v="+"===m?0:1),o(p,f,c,1,1-v);else{var v=m>=0?0:1;o(g,d,c,1,v),p[1]=g[1]+m}a.attr("position",g),r.attr("position",p),a.rotation=r.rotation=t.rotation,i(a),i(r)},_createAxis:function(t,e){var i=e.getData(),n=e.get("axisType"),o=Er(e,n),a=i.getDataExtent("value");o.setExtent(a[0],a[1]),this._customizeScale(o,i),o.niceTicks();var r=new _L("value",o,t.axisExtent,n);return r.model=e,r},_customizeScale:function(t,e){t.getTicks=function(){return e.mapArray(["value"],function(t){return t})},t.getTicksLabels=function(){return f(this.getTicks(),t.getLabel,t)}},_createGroup:function(t){var e=this["_"+t]=new jy;return this.group.add(e),e},_renderAxisLine:function(t,e,i,n){var o=i.getExtent();n.get("lineStyle.show")&&e.add(new fb({shape:{x1:o[0],y1:0,x2:o[1],y2:0},style:a({lineCap:"round"},n.getModel("lineStyle").getLineStyle()),silent:!0,z2:1}))},_renderAxisTick:function(t,e,i,n){var o=n.getData(),a=i.scale.getTicks();wL(a,function(t,a){var r=i.dataToCoord(t),s=o.getItemModel(a),l=s.getModel("itemStyle.normal"),h=s.getModel("itemStyle.emphasis"),u={position:[r,0],onclick:bL(this._changeTimeline,this,a)},c=Bm(s,l,e,u);uo(c,h.getItemStyle()),s.get("tooltip")?(c.dataIndex=a,c.dataModel=n):c.dataIndex=c.dataModel=null},this)},_renderAxisLabel:function(t,e,i,n){var o=n.getModel("label.normal");if(o.get("show")){var a=n.getData(),r=i.scale.getTicks(),s=Vr(i,o.get("formatter")),l=i.getLabelInterval();wL(r,function(n,o){if(!i.isLabelIgnored(o,l)){var r=a.getItemModel(o),h=r.getModel("label.normal"),u=r.getModel("label.emphasis"),c=i.dataToCoord(n),d=new ib({position:[c,0],rotation:t.labelRotation-t.rotation,onclick:bL(this._changeTimeline,this,o),silent:!1});fo(d.style,h,{text:s[o],textAlign:t.labelAlign,textVerticalAlign:t.labelBaseline}),e.add(d),uo(d,fo({},u))}},this)}},_renderControl:function(t,e,i,n){function o(t,i,o,u){if(t){var c=Vm(n,i,h,{position:t,origin:[a/2,0],rotation:u?-r:0,rectHover:!0,style:s,onclick:o});e.add(c),uo(c,l)}}var a=t.controlSize,r=t.rotation,s=n.getModel("controlStyle.normal").getItemStyle(),l=n.getModel("controlStyle.emphasis").getItemStyle(),h=[0,-a/2,a,a],u=n.getPlayState(),c=n.get("inverse",!0);o(t.nextBtnPosition,"controlStyle.nextIcon",bL(this._changeTimeline,this,c?"-":"+")),o(t.prevBtnPosition,"controlStyle.prevIcon",bL(this._changeTimeline,this,c?"+":"-")),o(t.playPosition,"controlStyle."+(u?"stopIcon":"playIcon"),bL(this._handlePlayClick,this,!u),!0)},_renderCurrentPointer:function(t,e,i,n){var o=n.getData(),a=n.getCurrentIndex(),r=o.getItemModel(a).getModel("checkpointStyle"),s=this,l={onCreate:function(t){t.draggable=!0,t.drift=bL(s._handlePointerDrag,s),t.ondragend=bL(s._handlePointerDragend,s),Gm(t,a,i,n,!0)},onUpdate:function(t){Gm(t,a,i,n)}};this._currentPointer=Bm(r,r,this._mainGroup,{},this._currentPointer,l)},_handlePlayClick:function(t){this._clearTimer(),this.api.dispatchAction({type:"timelinePlayChange",playState:t,from:this.uid})},_handlePointerDrag:function(t,e,i){this._clearTimer(),this._pointerChangeTimeline([i.offsetX,i.offsetY])},_handlePointerDragend:function(t){this._pointerChangeTimeline([t.offsetX,t.offsetY],!0)},_pointerChangeTimeline:function(t,e){var i=this._toAxisCoord(t)[0],n=Ii(this._axis.getExtent().slice());i>n[1]&&(i=n[1]),ii.getHeight()&&(n.textPosition="top",l=!0);var h=l?-5-o.height:s+8;a+o.width/2>i.getWidth()?(n.textPosition=["100%",h],n.textAlign="right"):a-o.width/2<0&&(n.textPosition=[0,h],n.textAlign="left")}})}},updateView:function(t,e,i,n){d(this._features,function(t){t.updateView&&t.updateView(t.model,e,i,n)})},updateLayout:function(t,e,i,n){d(this._features,function(t){t.updateLayout&&t.updateLayout(t.model,e,i,n)})},remove:function(t,e){d(this._features,function(i){i.remove&&i.remove(t,e)}),this.group.removeAll()},dispose:function(t,e){d(this._features,function(i){i.dispose&&i.dispose(t,e)})}});var IL=lD.toolbox.saveAsImage;Hm.defaultOption={show:!0,icon:"M4.7,22.9L29.3,45.5L54.7,23.4M4.6,43.6L4.6,58L53.8,58L53.8,43.6M29.2,45.1L29.2,0",title:IL.title,type:"png",name:"",excludeComponents:["toolbox"],pixelRatio:1,lang:IL.lang.slice()},Hm.prototype.unusable=!Uv.canvasSupported,Hm.prototype.onclick=function(t,e){var i=this.model,n=i.get("name")||t.get("title.0.text")||"echarts",o=document.createElement("a"),a=i.get("type",!0)||"png";o.download=n+"."+a,o.target="_blank";var r=e.getConnectedDataURL({type:a,backgroundColor:i.get("backgroundColor",!0)||t.get("backgroundColor")||"#fff",excludeComponents:i.get("excludeComponents"),pixelRatio:i.get("pixelRatio")});if(o.href=r,"function"!=typeof MouseEvent||Uv.browser.ie||Uv.browser.edge)if(window.navigator.msSaveOrOpenBlob){for(var s=atob(r.split(",")[1]),l=s.length,h=new Uint8Array(l);l--;)h[l]=s.charCodeAt(l);var u=new Blob([h]);window.navigator.msSaveOrOpenBlob(u,n+"."+a)}else{var c=i.get("lang"),d='';window.open().document.write(d)}else{var f=new MouseEvent("click",{view:window,bubbles:!0,cancelable:!1});o.dispatchEvent(f)}},wp("saveAsImage",Hm);var TL=lD.toolbox.magicType;Fm.defaultOption={show:!0,type:[],icon:{line:"M4.1,28.9h7.1l9.3-22l7.4,38l9.7-19.7l3,12.8h14.9M4.1,58h51.4",bar:"M6.7,22.9h10V48h-10V22.9zM24.9,13h10v35h-10V13zM43.2,2h10v46h-10V2zM3.1,58h53.7",stack:"M8.2,38.4l-8.4,4.1l30.6,15.3L60,42.5l-8.1-4.1l-21.5,11L8.2,38.4z M51.9,30l-8.1,4.2l-13.4,6.9l-13.9-6.9L8.2,30l-8.4,4.2l8.4,4.2l22.2,11l21.5-11l8.1-4.2L51.9,30z M51.9,21.7l-8.1,4.2L35.7,30l-5.3,2.8L24.9,30l-8.4-4.1l-8.3-4.2l-8.4,4.2L8.2,30l8.3,4.2l13.9,6.9l13.4-6.9l8.1-4.2l8.1-4.1L51.9,21.7zM30.4,2.2L-0.2,17.5l8.4,4.1l8.3,4.2l8.4,4.2l5.5,2.7l5.3-2.7l8.1-4.2l8.1-4.2l8.1-4.1L30.4,2.2z",tiled:"M2.3,2.2h22.8V25H2.3V2.2z M35,2.2h22.8V25H35V2.2zM2.3,35h22.8v22.8H2.3V35z M35,35h22.8v22.8H35V35z"},title:i(TL.title),option:{},seriesIndex:{}};var AL=Fm.prototype;AL.getIcons=function(){var t=this.model,e=t.get("icon"),i={};return d(t.get("type"),function(t){e[t]&&(i[t]=e[t])}),i};var CL={line:function(t,e,i,o){if("bar"===t)return n({id:e,type:"line",data:i.get("data"),stack:i.get("stack"),markPoint:i.get("markPoint"),markLine:i.get("markLine")},o.get("option.line")||{},!0)},bar:function(t,e,i,o){if("line"===t)return n({id:e,type:"bar",data:i.get("data"),stack:i.get("stack"),markPoint:i.get("markPoint"),markLine:i.get("markLine")},o.get("option.bar")||{},!0)},stack:function(t,e,i,o){if("line"===t||"bar"===t)return n({id:e,stack:"__ec_magicType_stack__"},o.get("option.stack")||{},!0)},tiled:function(t,e,i,o){if("line"===t||"bar"===t)return n({id:e,stack:""},o.get("option.tiled")||{},!0)}},DL=[["line","bar"],["stack","tiled"]];AL.onclick=function(t,e,i){var n=this.model,o=n.get("seriesIndex."+i);if(CL[i]){var a={series:[]};d(DL,function(t){l(t,i)>=0&&d(t,function(t){n.setIconStatus(t,"normal")})}),n.setIconStatus(i,"emphasis"),t.eachComponent({mainType:"series",query:null==o?null:{seriesIndex:o}},function(e){var o=e.subType,s=e.id,l=CL[i](o,s,e,n);l&&(r(l,e.option),a.series.push(l));var h=e.coordinateSystem;if(h&&"cartesian2d"===h.type&&("line"===i||"bar"===i)){var u=h.getAxesByScale("ordinal")[0];if(u){var c=u.dim+"Axis",d=t.queryComponents({mainType:c,index:e.get(name+"Index"),id:e.get(name+"Id")})[0].componentIndex;a[c]=a[c]||[];for(var f=0;f<=d;f++)a[c][d]=a[c][d]||{};a[c][d].boundaryGap="bar"===i}}}),e.dispatchAction({type:"changeMagicType",currentType:i,newOption:a})}},ir({type:"changeMagicType",event:"magicTypeChanged",update:"prepareAndUpdate"},function(t,e){e.mergeOption(t.newOption)}),wp("magicType",Fm);var LL=lD.toolbox.dataView,kL=new Array(60).join("-"),PL="\t",OL=new RegExp("["+PL+"]+","g");Qm.defaultOption={show:!0,readOnly:!1,optionToContent:null,contentToOption:null,icon:"M17.5,17.3H33 M17.5,17.3H33 M45.4,29.5h-28 M11.5,2v56H51V14.8L38.4,2H11.5z M38.4,2.2v12.7H51 M45.4,41.7h-28",title:i(LL.title),lang:i(LL.lang),backgroundColor:"#fff",textColor:"#000",textareaColor:"#fff",textareaBorderColor:"#333",buttonColor:"#c23531",buttonTextColor:"#fff"},Qm.prototype.onclick=function(t,e){function i(){n.removeChild(a),x._dom=null}var n=e.getDom(),o=this.model;this._dom&&n.removeChild(this._dom);var a=document.createElement("div");a.style.cssText="position:absolute;left:5px;top:5px;bottom:5px;right:5px;",a.style.backgroundColor=o.get("backgroundColor")||"#fff";var r=document.createElement("h4"),s=o.get("lang")||[];r.innerHTML=s[0]||o.get("title"),r.style.cssText="margin: 10px 20px;",r.style.color=o.get("textColor");var l=document.createElement("div"),h=document.createElement("textarea");l.style.cssText="display:block;width:100%;overflow:auto;";var u=o.get("optionToContent"),c=o.get("contentToOption"),d=jm(t);if("function"==typeof u){var f=u(e.getOption());"string"==typeof f?l.innerHTML=f:S(f)&&l.appendChild(f)}else l.appendChild(h),h.readOnly=o.get("readOnly"),h.style.cssText="width:100%;height:100%;font-family:monospace;font-size:14px;line-height:1.6rem;",h.style.color=o.get("textColor"),h.style.borderColor=o.get("textareaBorderColor"),h.style.backgroundColor=o.get("textareaColor"),h.value=d.value;var g=d.meta,p=document.createElement("div");p.style.cssText="position:absolute;bottom:0;left:0;right:0;";var m="float:right;margin-right:20px;border:none;cursor:pointer;padding:2px 5px;font-size:12px;border-radius:3px",v=document.createElement("div"),y=document.createElement("div");m+=";background-color:"+o.get("buttonColor"),m+=";color:"+o.get("buttonTextColor");var x=this;si(v,"click",i),si(y,"click",function(){var t;try{t="function"==typeof c?c(l,e.getOption()):Jm(h.value,g)}catch(t){throw i(),new Error("Data view format error "+t)}t&&e.dispatchAction({type:"changeDataView",newOption:t}),i()}),v.innerHTML=s[1],y.innerHTML=s[2],y.style.cssText=m,v.style.cssText=m,!o.get("readOnly")&&p.appendChild(y),p.appendChild(v),si(h,"keydown",function(t){if(9===(t.keyCode||t.which)){var e=this.value,i=this.selectionStart,n=this.selectionEnd;this.value=e.substring(0,i)+PL+e.substring(n),this.selectionStart=this.selectionEnd=i+1,bx(t)}}),a.appendChild(r),a.appendChild(l),a.appendChild(p),l.style.height=n.clientHeight-80+"px",n.appendChild(a),this._dom=a},Qm.prototype.remove=function(t,e){this._dom&&e.getDom().removeChild(this._dom)},Qm.prototype.dispose=function(t,e){this.remove(t,e)},wp("dataView",Qm),ir({type:"changeDataView",event:"dataViewChanged",update:"prepareAndUpdate"},function(t,e){var i=[];d(t.newOption.series,function(t){var n=e.getSeriesByName(t.name)[0];if(n){var o=n.get("data");i.push({name:t.name,data:tv(t.data,o)})}else i.push(a({type:"scatter"},t))}),e.mergeOption(r({series:i},t.newOption))});var zL=d,NL="\0_ec_hist_store";bD.extend({type:"dataZoom.select"}),wD.extend({type:"dataZoom.select"});var EL=lD.toolbox.dataZoom,RL=d,VL="\0_ec_\0toolbox-dataZoom_";rv.defaultOption={show:!0,icon:{zoom:"M0,13.5h26.9 M13.5,26.9V0 M32.1,13.5H58V58H13.5 V32.1",back:"M22,1.4L9.9,13.5l12.3,12.3 M10.3,13.5H54.9v44.6 H10.3v-26"},title:i(EL.title)};var BL=rv.prototype;BL.render=function(t,e,i,n){this.model=t,this.ecModel=e,this.api=i,hv(t,e,this,n,i),lv(t,e)},BL.onclick=function(t,e,i){GL[i].call(this)},BL.remove=function(t,e){this._brushController.unmount()},BL.dispose=function(t,e){this._brushController.dispose()};var GL={zoom:function(){var t=!this._isZoomActive;this.api.dispatchAction({type:"takeGlobalCursor",key:"dataZoomSelect",dataZoomSelectActive:t})},back:function(){this._dispatchZoomAction(iv(this.ecModel))}};BL._onBrush=function(t,e){function i(t,e,i){var r=e.getAxis(t),s=r.model,l=n(t,s,a),h=l.findRepresentativeAxisProxy(s).getMinMaxSpan();null==h.minValueSpan&&null==h.maxValueSpan||(i=OT(0,i.slice(),r.scale.getExtent(),0,h.minValueSpan,h.maxValueSpan)),l&&(o[l.id]={dataZoomId:l.id,startValue:i[0],endValue:i[1]})}function n(t,e,i){var n;return i.eachComponent({mainType:"dataZoom",subType:"select"},function(i){i.getAxisModel(t,e.componentIndex)&&(n=i)}),n}if(e.isEnd&&t.length){var o={},a=this.ecModel;this._brushController.updateCovers([]),new rp(sv(this.model.option),a,{include:["grid"]}).matchOutputRanges(t,a,function(t,e,n){if("cartesian2d"===n.type){var o=t.brushType;"rect"===o?(i("x",n,e[0]),i("y",n,e[1])):i({lineX:"x",lineY:"y"}[o],n,e)}}),ev(a,o),this._dispatchZoomAction(o)}},BL._dispatchZoomAction=function(t){var e=[];RL(t,function(t,n){e.push(i(t))}),e.length&&this.api.dispatchAction({type:"dataZoom",from:this.uid,batch:e})},wp("dataZoom",rv),tr(function(t){function e(t,e){if(e){var o=t+"Index",a=e[o];null==a||"all"==a||y(a)||(a=!1===a||"none"===a?[]:[a]),i(t,function(e,i){if(null==a||"all"==a||-1!==l(a,i)){var r={type:"select",$fromToolbox:!0,id:VL+t+i};r[o]=i,n.push(r)}})}}function i(e,i){var n=t[e];y(n)||(n=n?[n]:[]),RL(n,i)}if(t){var n=t.dataZoom||(t.dataZoom=[]);y(n)||(t.dataZoom=n=[n]);var o=t.toolbox;if(o&&(y(o)&&(o=o[0]),o&&o.feature)){var a=o.feature.dataZoom;e("xAxis",a),e("yAxis",a)}}});var WL=lD.toolbox.restore;uv.defaultOption={show:!0,icon:"M3.8,33.4 M47,18.9h9.8V8.7 M56.3,20.1 C52.1,9,40.5,0.6,26.8,2.1C12.6,3.7,1.6,16.2,2.1,30.6 M13,41.1H3.1v10.2 M3.7,39.9c4.2,11.1,15.8,19.5,29.5,18 c14.2-1.6,25.2-14.1,24.7-28.5",title:WL.title},uv.prototype.onclick=function(t,e,i){nv(t),e.dispatchAction({type:"restore",from:this.uid})},wp("restore",uv),ir({type:"restore",event:"restore",update:"prepareAndUpdate"},function(t,e){e.resetOption("recreate")});var HL,FL="urn:schemas-microsoft-com:vml",ZL="undefined"==typeof window?null:window,UL=!1,XL=ZL&&ZL.document;if(XL&&!Uv.canvasSupported)try{!XL.namespaces.zrvml&&XL.namespaces.add("zrvml",FL),HL=function(t){return XL.createElement("')}}catch(t){HL=function(t){return XL.createElement("<"+t+' xmlns="'+FL+'" class="zrvml">')}}var jL=P_.CMD,qL=Math.round,YL=Math.sqrt,$L=Math.abs,KL=Math.cos,JL=Math.sin,QL=Math.max;if(!Uv.canvasSupported){var tk=21600,ek=tk/2,ik=function(t){t.style.cssText="position:absolute;left:0;top:0;width:1px;height:1px;",t.coordsize=tk+","+tk,t.coordorigin="0,0"},nk=function(t){return String(t).replace(/&/g,"&").replace(/"/g,""")},ok=function(t,e,i){return"rgb("+[t,e,i].join(",")+")"},ak=function(t,e){e&&t&&e.parentNode!==t&&t.appendChild(e)},rk=function(t,e){e&&t&&e.parentNode===t&&t.removeChild(e)},sk=function(t,e,i){return 1e5*(parseFloat(t)||0)+1e3*(parseFloat(e)||0)+i},lk=function(t,e){return"string"==typeof t?t.lastIndexOf("%")>=0?parseFloat(t)/100*e:parseFloat(t):t},hk=function(t,e,i){var n=Mt(e);i=+i,isNaN(i)&&(i=1),n&&(t.color=ok(n[0],n[1],n[2]),t.opacity=i*n[3])},uk=function(t){var e=Mt(t);return[ok(e[0],e[1],e[2]),e[3]]},ck=function(t,e,i){var n=e.fill;if(null!=n)if(n instanceof yb){var o,a=0,r=[0,0],s=0,l=1,h=i.getBoundingRect(),u=h.width,c=h.height;if("linear"===n.type){o="gradient";var d=i.transform,f=[n.x*u,n.y*c],g=[n.x2*u,n.y2*c];d&&($(f,f,d),$(g,g,d));var p=g[0]-f[0],m=g[1]-f[1];(a=180*Math.atan2(p,m)/Math.PI)<0&&(a+=360),a<1e-6&&(a=0)}else{o="gradientradial";var f=[n.x*u,n.y*c],d=i.transform,v=i.scale,y=u,x=c;r=[(f[0]-h.x)/y,(f[1]-h.y)/x],d&&$(f,f,d),y/=v[0]*tk,x/=v[1]*tk;var _=QL(y,x);s=0/_,l=2*n.r/_-s}var b=n.colorStops.slice();b.sort(function(t,e){return t.offset-e.offset});for(var w=b.length,S=[],M=[],I=0;I=2){var C=S[0][0],D=S[1][0],L=S[0][1]*e.opacity,k=S[1][1]*e.opacity;t.type=o,t.method="none",t.focus="100%",t.angle=a,t.color=C,t.color2=D,t.colors=M.join(","),t.opacity=k,t.opacity2=L}"radial"===o&&(t.focusposition=r.join(","))}else hk(t,n,e.opacity)},dk=function(t,e){null!=e.lineDash&&(t.dashstyle=e.lineDash.join(" ")),null==e.stroke||e.stroke instanceof yb||hk(t,e.stroke,e.opacity)},fk=function(t,e,i,n){var o="fill"==e,a=t.getElementsByTagName(e)[0];null!=i[e]&&"none"!==i[e]&&(o||!o&&i.lineWidth)?(t[o?"filled":"stroked"]="true",i[e]instanceof yb&&rk(t,a),a||(a=cv(e)),o?ck(a,i,n):dk(a,i),ak(t,a)):(t[o?"filled":"stroked"]="false",rk(t,a))},gk=[[],[],[]],pk=function(t,e){var i,n,o,a,r,s,l=jL.M,h=jL.C,u=jL.L,c=jL.A,d=jL.Q,f=[],g=t.data,p=t.len();for(a=0;a.01?O&&(z+=.0125):Math.abs(N-C)<1e-4?O&&zA?x-=.0125:x+=.0125:O&&NC?y+=.0125:y-=.0125),f.push(E,qL(((A-D)*M+w)*tk-ek),",",qL(((C-L)*I+S)*tk-ek),",",qL(((A+D)*M+w)*tk-ek),",",qL(((C+L)*I+S)*tk-ek),",",qL((z*M+w)*tk-ek),",",qL((N*I+S)*tk-ek),",",qL((y*M+w)*tk-ek),",",qL((x*I+S)*tk-ek)),r=y,s=x;break;case jL.R:var R=gk[0],V=gk[1];R[0]=g[a++],R[1]=g[a++],V[0]=R[0]+g[a++],V[1]=R[1]+g[a++],e&&($(R,R,e),$(V,V,e)),R[0]=qL(R[0]*tk-ek),V[0]=qL(V[0]*tk-ek),R[1]=qL(R[1]*tk-ek),V[1]=qL(V[1]*tk-ek),f.push(" m ",R[0],",",R[1]," l ",V[0],",",R[1]," l ",V[0],",",V[1]," l ",R[0],",",V[1]);break;case jL.Z:f.push(" x ")}if(i>0){f.push(n);for(var B=0;B100&&(xk=0,yk={});var i,n=_k.style;try{n.font=t,i=n.fontFamily.split(",")[0]}catch(t){}e={style:n.fontStyle||"normal",variant:n.fontVariant||"normal",weight:n.fontWeight||"normal",size:0|parseFloat(n.fontSize||12),family:i||"Microsoft YaHei"},yk[t]=e,xk++}return e};!function(t,e){cx[t]=e}("measureText",function(t,e){var i=XL;vk||((vk=i.createElement("div")).style.cssText="position:absolute;top:-20000px;left:0;padding:0;margin:0;border:none;white-space:pre;",XL.body.appendChild(vk));try{vk.style.font=e}catch(t){}return vk.innerHTML="",vk.appendChild(i.createTextNode(t)),{width:vk.offsetWidth}});for(var wk=new jt,Sk=[px,je,qe,Nn,ib],Mk=0;Mk=o&&h+1>=a){for(var u=[],c=0;c=o&&c+1>=a)return Cv(0,s.components);l[i]=s}else l[i]=void 0}r++}();if(d)return d}},pushComponent:function(t,e,i){var n=t[t.length-1];n&&n.added===e&&n.removed===i?t[t.length-1]={count:n.count+1,added:e,removed:i}:t.push({count:1,added:e,removed:i})},extractCommon:function(t,e,i,n){for(var o=e.length,a=i.length,r=t.newPos,s=r-n,l=0;r+1=0;--n)if(e[n]===t)return!0;return!1}),i):null:i[0]},Lv.prototype.update=function(t,e){if(t){var i=this.getDefs(!1);if(t._dom&&i.contains(t._dom))"function"==typeof e&&e();else{var n=this.add(t);n&&(t._dom=n)}}},Lv.prototype.addDom=function(t){this.getDefs(!0).appendChild(t)},Lv.prototype.removeDom=function(t){this.getDefs(!1).removeChild(t._dom)},Lv.prototype.getDoms=function(){var t=this.getDefs(!1);if(!t)return[];var e=[];return d(this._tagNames,function(i){var n=t.getElementsByTagName(i);e=e.concat([].slice.call(n))}),e},Lv.prototype.markAllUnused=function(){var t=this;d(this.getDoms(),function(e){e[t._markLabel]="0"})},Lv.prototype.markUsed=function(t){t&&(t[this._markLabel]="1")},Lv.prototype.removeUnused=function(){var t=this.getDefs(!1);if(t){var e=this;d(this.getDoms(),function(i){"1"!==i[e._markLabel]&&t.removeChild(i)})}},Lv.prototype.getSvgProxy=function(t){return t instanceof Nn?Rk:t instanceof qe?Vk:t instanceof ib?Bk:Rk},Lv.prototype.getTextSvgElement=function(t){return t.__textSvgEl},Lv.prototype.getSvgElement=function(t){return t.__svgEl},h(kv,Lv),kv.prototype.addWithoutUpdate=function(t,e){if(e&&e.style){var i=this;d(["fill","stroke"],function(n){if(e.style[n]&&("linear"===e.style[n].type||"radial"===e.style[n].type)){var o,a=e.style[n],r=i.getDefs(!0);a._dom?(o=a._dom,r.contains(a._dom)||i.addDom(o)):o=i.add(a),i.markUsed(e);var s=o.getAttribute("id");t.setAttribute(n,"url(#"+s+")")}})}},kv.prototype.add=function(t){var e;if("linear"===t.type)e=this.createElement("linearGradient");else{if("radial"!==t.type)return Wy("Illegal gradient type."),null;e=this.createElement("radialGradient")}return t.id=t.id||this.nextId++,e.setAttribute("id","zr-gradient-"+t.id),this.updateDom(t,e),this.addDom(e),e},kv.prototype.update=function(t){var e=this;Lv.prototype.update.call(this,t,function(){var i=t.type,n=t._dom.tagName;"linear"===i&&"linearGradient"===n||"radial"===i&&"radialGradient"===n?e.updateDom(t,t._dom):(e.removeDom(t),e.add(t))})},kv.prototype.updateDom=function(t,e){if("linear"===t.type)e.setAttribute("x1",t.x),e.setAttribute("y1",t.y),e.setAttribute("x2",t.x2),e.setAttribute("y2",t.y2);else{if("radial"!==t.type)return void Wy("Illegal gradient type.");e.setAttribute("cx",t.x),e.setAttribute("cy",t.y),e.setAttribute("r",t.r)}t.global?e.setAttribute("gradientUnits","userSpaceOnUse"):e.setAttribute("gradientUnits","objectBoundingBox"),e.innerHTML="";for(var i=t.colorStops,n=0,o=i.length;n0){var n,o,a=this.getDefs(!0),r=e[0],s=i?"_textDom":"_dom";r[s]?(o=r[s].getAttribute("id"),n=r[s],a.contains(n)||a.appendChild(n)):(o="zr-clip-"+this.nextId,++this.nextId,(n=this.createElement("clipPath")).setAttribute("id",o),a.appendChild(n),r[s]=n);var l=this.getSvgProxy(r);if(r.transform&&r.parent.invTransform&&!i){var h=Array.prototype.slice.call(r.transform);st(r.transform,r.parent.invTransform,r.transform),l.brush(r),r.transform=h}else l.brush(r);var u=this.getSvgElement(r);n.appendChild(u.cloneNode()),t.setAttribute("clip-path","url(#"+o+")"),e.length>1&&this.updateDom(n,e.slice(1),i)}else t&&t.setAttribute("clip-path","none")},Pv.prototype.markUsed=function(t){var e=this;t.__clipPaths&&t.__clipPaths.length>0&&d(t.__clipPaths,function(t){t._dom&&Lv.prototype.markUsed.call(e,t._dom),t._textDom&&Lv.prototype.markUsed.call(e,t._textDom)})};var Zk=function(t,e){this.root=t,this.storage=e;var i=mv("svg");i.setAttribute("xmlns","http://www.w3.org/2000/svg"),i.setAttribute("version","1.1"),i.setAttribute("baseProfile","full"),i.style["user-select"]="none",this.gradientManager=new kv(i),this.clipPathManager=new Pv(i);var n=document.createElement("div");n.style.cssText="overflow: hidden;",this._svgRoot=i,this._viewport=n,t.appendChild(n),n.appendChild(i),this.resize(),this._visibleList=[]};Zk.prototype={constructor:Zk,getType:function(){return"svg"},getViewportRoot:function(){return this._viewport},getViewportRootOffset:function(){var t=this.getViewportRoot();if(t)return{offsetLeft:t.offsetLeft||0,offsetTop:t.offsetTop||0}},refresh:function(){var t=this.storage.getDisplayList(!0);this._paintList(t)},_paintList:function(t){this.gradientManager.markAllUnused(),this.clipPathManager.markAllUnused();var e,i=this._svgRoot,n=this._visibleList,o=t.length,a=[];for(e=0;e=0;--n)if(e[n]===t)return!0;return!1}),i):null:i[0]},resize:function(){var t=this._getWidth(),e=this._getHeight();if(this._width!==t&&this._height!==e){this._width=t,this._height=e;var i=this._viewport.style;i.width=t+"px",i.height=e+"px";var n=this._svgRoot;n.setAttribute("width",t),n.setAttribute("height",e)}},getWidth:function(){return this._getWidth()},getHeight:function(){return this._getHeight()},_getWidth:function(){var t=this.root,e=document.defaultView.getComputedStyle(t);return(t.clientWidth||Ov(e.width))-Ov(e.paddingLeft)-Ov(e.paddingRight)|0},_getHeight:function(){var t=this.root,e=document.defaultView.getComputedStyle(t);return(t.clientHeight||Ov(e.height))-Ov(e.paddingTop)-Ov(e.paddingBottom)|0},dispose:function(){this.root.innerHTML="",this._svgRoot=this._viewport=this.storage=null},clear:function(){this._viewport&&this.root.removeChild(this._viewport)},pathToSvg:function(){this.refresh();var t=this._svgRoot.outerHTML;return"data:img/svg+xml;utf-8,"+unescape(t)}},d(["getLayer","insertLayer","eachLayer","eachBuiltinLayer","eachOtherLayer","getLayers","modLayer","delLayer","clearLayer","toDataURL","pathToImage"],function(t){Zk.prototype[t]=Wv(t)}),xi("svg",Zk),t.version="3.8.4",t.dependencies=Cw,t.PRIORITY=Pw,t.init=function(t,e,i){var n=Qa(t);if(n)return n;var o=new za(t,e,i);return o.id="ec_"+Yw++,jw[o.id]=o,t.setAttribute?t.setAttribute(Kw,o.id):t[Kw]=o.id,Ka(o),o},t.connect=function(t){if(y(t)){var e=t;t=null,d(e,function(e){null!=e.group&&(t=e.group)}),t=t||"g_"+$w++,d(e,function(e){e.group=t})}return qw[t]=!0,t},t.disConnect=Ja,t.disconnect=Qw,t.dispose=function(t){"string"==typeof t?t=jw[t]:t instanceof za||(t=Qa(t)),t instanceof za&&!t.isDisposed()&&t.dispose()},t.getInstanceByDom=Qa,t.getInstanceById=function(t){return jw[t]},t.registerTheme=function(t,e){Uw[t]=e},t.registerPreprocessor=tr,t.registerProcessor=er,t.registerPostUpdate=function(t){Fw.push(t)},t.registerAction=ir,t.registerCoordinateSystem=nr,t.getCoordinateSystemDimensions=function(t){var e=ua.get(t);if(e)return e.getDimensionsInfo?e.getDimensionsInfo():e.dimensions.slice()},t.registerLayout=or,t.registerVisual=ar,t.registerLoading=rr,t.extendComponentModel=sr,t.extendComponentView=lr,t.extendSeriesModel=hr,t.extendChartView=ur,t.setCanvasCreator=function(t){e("createCanvas",t)},t.registerMap=function(t,e,i){e.geoJson&&!e.features&&(i=e.specialAreas,e=e.geoJson),"string"==typeof e&&(e="undefined"!=typeof JSON&&JSON.parse?JSON.parse(e):new Function("return ("+e+");")()),Jw[t]={geoJson:e,specialAreas:i}},t.getMap=cr,t.dataTool=tS,t.zrender=Nx,t.graphic=Tb,t.number=Bx,t.format=Xx,t.throttle=Da,t.helper=HS,t.matrix=yy,t.vector=cy,t.color=Ny,t.util=qS,t.List=aS,t.Model=Lo,t.Axis=US,t.env=Uv,t.parseGeoJson=jS}); ================================================ FILE: src/main/resources/static/assets/vendor/html5shiv-3.7.3.min.js ================================================ /** * @preserve HTML5 Shiv 3.7.3 | @afarkas @jdalton @jon_neal @rem | MIT/GPL2 Licensed */ !function(a,b){function c(a,b){var c=a.createElement("p"),d=a.getElementsByTagName("head")[0]||a.documentElement;return c.innerHTML="x",d.insertBefore(c.lastChild,d.firstChild)}function d(){var a=t.elements;return"string"==typeof a?a.split(" "):a}function e(a,b){var c=t.elements;"string"!=typeof c&&(c=c.join(" ")),"string"!=typeof a&&(a=a.join(" ")),t.elements=c+" "+a,j(b)}function f(a){var b=s[a[q]];return b||(b={},r++,a[q]=r,s[r]=b),b}function g(a,c,d){if(c||(c=b),l)return c.createElement(a);d||(d=f(c));var e;return e=d.cache[a]?d.cache[a].cloneNode():p.test(a)?(d.cache[a]=d.createElem(a)).cloneNode():d.createElem(a),!e.canHaveChildren||o.test(a)||e.tagUrn?e:d.frag.appendChild(e)}function h(a,c){if(a||(a=b),l)return a.createDocumentFragment();c=c||f(a);for(var e=c.frag.cloneNode(),g=0,h=d(),i=h.length;i>g;g++)e.createElement(h[g]);return e}function i(a,b){b.cache||(b.cache={},b.createElem=a.createElement,b.createFrag=a.createDocumentFragment,b.frag=b.createFrag()),a.createElement=function(c){return t.shivMethods?g(c,a,b):b.createElem(c)},a.createDocumentFragment=Function("h,f","return function(){var n=f.cloneNode(),c=n.createElement;h.shivMethods&&("+d().join().replace(/[\w\-:]+/g,function(a){return b.createElem(a),b.frag.createElement(a),'c("'+a+'")'})+");return n}")(t,b.frag)}function j(a){a||(a=b);var d=f(a);return!t.shivCSS||k||d.hasCSS||(d.hasCSS=!!c(a,"article,aside,dialog,figcaption,figure,footer,header,hgroup,main,nav,section{display:block}mark{background:#FF0;color:#000}template{display:none}")),l||i(a,d),a}var k,l,m="3.7.3",n=a.html5||{},o=/^<|^(?:button|map|select|textarea|object|iframe|option|optgroup)$/i,p=/^(?:a|b|code|div|fieldset|h1|h2|h3|h4|h5|h6|i|label|li|ol|p|q|span|strong|style|table|tbody|td|th|tr|ul)$/i,q="_html5shiv",r=0,s={};!function(){try{var a=b.createElement("a");a.innerHTML="",k="hidden"in a,l=1==a.childNodes.length||function(){b.createElement("a");var a=b.createDocumentFragment();return"undefined"==typeof a.cloneNode||"undefined"==typeof a.createDocumentFragment||"undefined"==typeof a.createElement}()}catch(c){k=!0,l=!0}}();var t={elements:n.elements||"abbr article aside audio bdi canvas data datalist details dialog figcaption figure footer header hgroup main mark meter nav output picture progress section summary template time video",version:m,shivCSS:n.shivCSS!==!1,supportsUnknownElements:l,shivMethods:n.shivMethods!==!1,type:"default",shivDocument:j,createElement:g,createDocumentFragment:h,addElements:e};a.html5=t,j(b),"object"==typeof module&&module.exports&&(module.exports=t)}("undefined"!=typeof window?window:this,document); ================================================ FILE: src/main/resources/static/assets/vendor/iconfont/demo.css ================================================ /* Logo 字体 */ @font-face { font-family: "iconfont logo"; src: url('https://at.alicdn.com/t/font_985780_km7mi63cihi.eot?t=1545807318834'); src: url('https://at.alicdn.com/t/font_985780_km7mi63cihi.eot?t=1545807318834#iefix') format('embedded-opentype'), url('https://at.alicdn.com/t/font_985780_km7mi63cihi.woff?t=1545807318834') format('woff'), url('https://at.alicdn.com/t/font_985780_km7mi63cihi.ttf?t=1545807318834') format('truetype'), url('https://at.alicdn.com/t/font_985780_km7mi63cihi.svg?t=1545807318834#iconfont') format('svg'); } .logo { font-family: "iconfont logo"; font-size: 160px; font-style: normal; -webkit-font-smoothing: antialiased; -moz-osx-font-smoothing: grayscale; } /* tabs */ .nav-tabs { position: relative; } .nav-tabs .nav-more { position: absolute; right: 0; bottom: 0; height: 42px; line-height: 42px; color: #666; } #tabs { border-bottom: 1px solid #eee; } #tabs li { cursor: pointer; width: 100px; height: 40px; line-height: 40px; text-align: center; font-size: 16px; border-bottom: 2px solid transparent; position: relative; z-index: 1; margin-bottom: -1px; color: #666; } #tabs .active { border-bottom-color: #f00; color: #222; } .tab-container .content { display: none; } /* 页面布局 */ .main { padding: 30px 100px; width: 960px; margin: 0 auto; } .main .logo { color: #333; text-align: left; margin-bottom: 30px; line-height: 1; height: 110px; margin-top: -50px; overflow: hidden; *zoom: 1; } .main .logo a { font-size: 160px; color: #333; } .helps { margin-top: 40px; } .helps pre { padding: 20px; margin: 10px 0; border: solid 1px #e7e1cd; background-color: #fffdef; overflow: auto; } .icon_lists { width: 100% !important; overflow: hidden; *zoom: 1; } .icon_lists li { width: 100px; margin-bottom: 10px; margin-right: 20px; text-align: center; list-style: none !important; cursor: default; } .icon_lists li .code-name { line-height: 1.2; } .icon_lists .icon { display: block; height: 100px; line-height: 100px; font-size: 42px; margin: 10px auto; color: #333; -webkit-transition: font-size 0.25s linear, width 0.25s linear; -moz-transition: font-size 0.25s linear, width 0.25s linear; transition: font-size 0.25s linear, width 0.25s linear; } .icon_lists .icon:hover { font-size: 100px; } .icon_lists .svg-icon { /* 通过设置 font-size 来改变图标大小 */ width: 1em; /* 图标和文字相邻时,垂直对齐 */ vertical-align: -0.15em; /* 通过设置 color 来改变 SVG 的颜色/fill */ fill: currentColor; /* path 和 stroke 溢出 viewBox 部分在 IE 下会显示 normalize.css 中也包含这行 */ overflow: hidden; } .icon_lists li .name, .icon_lists li .code-name { color: #666; } /* markdown 样式 */ .markdown { color: #666; font-size: 14px; line-height: 1.8; } .highlight { line-height: 1.5; } .markdown img { vertical-align: middle; max-width: 100%; } .markdown h1 { color: #404040; font-weight: 500; line-height: 40px; margin-bottom: 24px; } .markdown h2, .markdown h3, .markdown h4, .markdown h5, .markdown h6 { color: #404040; margin: 1.6em 0 0.6em 0; font-weight: 500; clear: both; } .markdown h1 { font-size: 28px; } .markdown h2 { font-size: 22px; } .markdown h3 { font-size: 16px; } .markdown h4 { font-size: 14px; } .markdown h5 { font-size: 12px; } .markdown h6 { font-size: 12px; } .markdown hr { height: 1px; border: 0; background: #e9e9e9; margin: 16px 0; clear: both; } .markdown p { margin: 1em 0; } .markdown>p, .markdown>blockquote, .markdown>.highlight, .markdown>ol, .markdown>ul { width: 80%; } .markdown ul>li { list-style: circle; } .markdown>ul li, .markdown blockquote ul>li { margin-left: 20px; padding-left: 4px; } .markdown>ul li p, .markdown>ol li p { margin: 0.6em 0; } .markdown ol>li { list-style: decimal; } .markdown>ol li, .markdown blockquote ol>li { margin-left: 20px; padding-left: 4px; } .markdown code { margin: 0 3px; padding: 0 5px; background: #eee; border-radius: 3px; } .markdown strong, .markdown b { font-weight: 600; } .markdown>table { border-collapse: collapse; border-spacing: 0px; empty-cells: show; border: 1px solid #e9e9e9; width: 95%; margin-bottom: 24px; } .markdown>table th { white-space: nowrap; color: #333; font-weight: 600; } .markdown>table th, .markdown>table td { border: 1px solid #e9e9e9; padding: 8px 16px; text-align: left; } .markdown>table th { background: #F7F7F7; } .markdown blockquote { font-size: 90%; color: #999; border-left: 4px solid #e9e9e9; padding-left: 0.8em; margin: 1em 0; } .markdown blockquote p { margin: 0; } .markdown .anchor { opacity: 0; transition: opacity 0.3s ease; margin-left: 8px; } .markdown .waiting { color: #ccc; } .markdown h1:hover .anchor, .markdown h2:hover .anchor, .markdown h3:hover .anchor, .markdown h4:hover .anchor, .markdown h5:hover .anchor, .markdown h6:hover .anchor { opacity: 1; display: inline-block; } .markdown>br, .markdown>p>br { clear: both; } .hljs { display: block; background: white; padding: 0.5em; color: #333333; overflow-x: auto; } .hljs-comment, .hljs-meta { color: #969896; } .hljs-string, .hljs-variable, .hljs-template-variable, .hljs-strong, .hljs-emphasis, .hljs-quote { color: #df5000; } .hljs-keyword, .hljs-selector-tag, .hljs-type { color: #a71d5d; } .hljs-literal, .hljs-symbol, .hljs-bullet, .hljs-attribute { color: #0086b3; } .hljs-section, .hljs-name { color: #63a35c; } .hljs-tag { color: #333333; } .hljs-title, .hljs-attr, .hljs-selector-id, .hljs-selector-class, .hljs-selector-attr, .hljs-selector-pseudo { color: #795da3; } .hljs-addition { color: #55a532; background-color: #eaffea; } .hljs-deletion { color: #bd2c00; background-color: #ffecec; } .hljs-link { text-decoration: underline; } /* 代码高亮 */ /* PrismJS 1.15.0 https://prismjs.com/download.html#themes=prism&languages=markup+css+clike+javascript */ /** * prism.js default theme for JavaScript, CSS and HTML * Based on dabblet (http://dabblet.com) * @author Lea Verou */ code[class*="language-"], pre[class*="language-"] { color: black; background: none; text-shadow: 0 1px white; font-family: Consolas, Monaco, 'Andale Mono', 'Ubuntu Mono', monospace; text-align: left; white-space: pre; word-spacing: normal; word-break: normal; word-wrap: normal; line-height: 1.5; -moz-tab-size: 4; -o-tab-size: 4; tab-size: 4; -webkit-hyphens: none; -moz-hyphens: none; -ms-hyphens: none; hyphens: none; } pre[class*="language-"]::-moz-selection, pre[class*="language-"] ::-moz-selection, code[class*="language-"]::-moz-selection, code[class*="language-"] ::-moz-selection { text-shadow: none; background: #b3d4fc; } pre[class*="language-"]::selection, pre[class*="language-"] ::selection, code[class*="language-"]::selection, code[class*="language-"] ::selection { text-shadow: none; background: #b3d4fc; } @media print { code[class*="language-"], pre[class*="language-"] { text-shadow: none; } } /* Code blocks */ pre[class*="language-"] { padding: 1em; margin: .5em 0; overflow: auto; } :not(pre)>code[class*="language-"], pre[class*="language-"] { background: #f5f2f0; } /* Inline code */ :not(pre)>code[class*="language-"] { padding: .1em; border-radius: .3em; white-space: normal; } .token.comment, .token.prolog, .token.doctype, .token.cdata { color: slategray; } .token.punctuation { color: #999; } .namespace { opacity: .7; } .token.property, .token.tag, .token.boolean, .token.number, .token.constant, .token.symbol, .token.deleted { color: #905; } .token.selector, .token.attr-name, .token.string, .token.char, .token.builtin, .token.inserted { color: #690; } .token.operator, .token.entity, .token.url, .language-css .token.string, .style .token.string { color: #9a6e3a; background: hsla(0, 0%, 100%, .5); } .token.atrule, .token.attr-value, .token.keyword { color: #07a; } .token.function, .token.class-name { color: #DD4A68; } .token.regex, .token.important, .token.variable { color: #e90; } .token.important, .token.bold { font-weight: bold; } .token.italic { font-style: italic; } .token.entity { cursor: help; } ================================================ FILE: src/main/resources/static/assets/vendor/iconfont/demo_index.html ================================================ IconFont Demo

  • bars
    &#xe601;
  • calendar
    &#xe602;
  • camera
    &#xe603;
  • check
    &#xe604;
  • check-square-o
    &#xe605;
  • clock-o
    &#xe606;
  • 500px
    &#xe607;
  • address-book-o
    &#xe608;
  • address-book
    &#xe609;
  • address-card-o
    &#xe60a;
  • address-card
    &#xe60b;
  • adjust
    &#xe60c;
  • adn
    &#xe60d;
  • align-center
    &#xe60e;
  • align-justify
    &#xe60f;
  • align-left
    &#xe610;
  • align-right
    &#xe611;
  • amazon
    &#xe612;
  • ambulance
    &#xe613;
  • american-sign-language-interpreting
    &#xe614;
  • anchor
    &#xe615;
  • android
    &#xe616;
  • angellist
    &#xe617;
  • angle-double-down
    &#xe618;
  • angle-double-left
    &#xe619;
  • angle-double-right
    &#xe61a;
  • angle-double-up
    &#xe61b;
  • angle-down
    &#xe61c;
  • angle-left
    &#xe61d;
  • angle-right
    &#xe61e;
  • angle-up
    &#xe61f;
  • apple
    &#xe620;
  • archive
    &#xe621;
  • area-chart
    &#xe622;
  • arrow-circle-down
    &#xe623;
  • arrow-circle-left
    &#xe624;
  • arrow-circle-o-down
    &#xe625;
  • arrow-circle-o-left
    &#xe626;
  • arrow-circle-o-right
    &#xe627;
  • arrow-circle-o-up
    &#xe628;
  • arrow-circle-right
    &#xe629;
  • arrow-circle-up
    &#xe62a;
  • arrow-down
    &#xe62b;
  • arrow-left
    &#xe62c;
  • arrow-right
    &#xe62d;
  • arrow-up
    &#xe62e;
  • arrows-alt
    &#xe62f;
  • arrows-h
    &#xe630;
  • arrows-v
    &#xe631;
  • arrows
    &#xe632;
  • asl-interpreting
    &#xe633;
  • assistive-listening-systems
    &#xe634;
  • asterisk
    &#xe635;
  • at
    &#xe636;
  • audio-description
    &#xe637;
  • automobile
    &#xe638;
  • backward
    &#xe639;
  • balance-scale
    &#xe63a;
  • bandcamp
    &#xe63b;
  • bank
    &#xe63c;
  • bars
    &#xe63d;
  • bar-chart
    &#xe63e;
  • bar-chart-o
    &#xe63f;
  • bathtub
    &#xe640;
  • barcode
    &#xe641;
  • bath
    &#xe642;
  • battery-0
    &#xe643;
  • battery-1
    &#xe644;
  • battery-2
    &#xe645;
  • battery-4
    &#xe646;
  • battery-3
    &#xe647;
  • battery-half
    &#xe648;
  • battery-empty
    &#xe649;
  • battery-full
    &#xe64a;
  • battery-quarter
    &#xe64b;
  • battery-three-quarters
    &#xe64c;
  • battery
    &#xe64d;
  • beer
    &#xe64e;
  • bed
    &#xe64f;
  • behance
    &#xe650;
  • behance-square
    &#xe651;
  • bell-o
    &#xe652;
  • bell-slash-o
    &#xe653;
  • bell-slash
    &#xe654;
  • bicycle
    &#xe655;
  • bitbucket-square
    &#xe656;
  • binoculars
    &#xe657;
  • bell
    &#xe658;
  • birthday-cake
    &#xe659;
  • bitbucket
    &#xe65a;
  • black-tie
    &#xe65b;
  • bluetooth-b
    &#xe65c;
  • bitcoin
    &#xe65d;
  • blind
    &#xe65e;
  • bluetooth
    &#xe65f;
  • bold
    &#xe660;
  • bolt
    &#xe661;
  • bomb
    &#xe662;
  • book
    &#xe663;
  • bug
    &#xe664;
  • bookmark-o
    &#xe665;
  • btc
    &#xe666;
  • bookmark
    &#xe667;
  • briefcase
    &#xe668;
  • braille
    &#xe669;
  • bullhorn
    &#xe66a;
  • bullseye
    &#xe66b;
  • bus
    &#xe66c;
  • building
    &#xe66d;
  • cab
    &#xe66e;
  • buysellads
    &#xe66f;
  • building-o
    &#xe670;
  • calendar-plus-o
    &#xe671;
  • calendar-o
    &#xe672;
  • calendar-times-o
    &#xe673;
  • calendar-check-o
    &#xe674;
  • calendar-minus-o
    &#xe675;
  • calculator
    &#xe676;
  • caret-down
    &#xe677;
  • caret-left
    &#xe678;
  • car
    &#xe679;
  • camera-retro
    &#xe67a;
  • caret-right
    &#xe67b;
  • caret-square-o-left
    &#xe67c;
  • caret-square-o-right
    &#xe67d;
  • caret-up
    &#xe67e;
  • caret-square-o-up
    &#xe67f;
  • cart-plus
    &#xe680;
  • cart-arrow-down
    &#xe681;
  • caret-square-o-down
    &#xe682;
  • cc-discover
    &#xe683;
  • cc-diners-club
    &#xe684;
  • cc-paypal
    &#xe685;
  • cc-jcb
    &#xe686;
  • cc-mastercard
    &#xe687;
  • cc-amex
    &#xe688;
  • cc
    &#xe689;
  • cc-visa
    &#xe68a;
  • cc-stripe
    &#xe68b;
  • check
    &#xe68c;
  • certificate
    &#xe68d;
  • check-circle
    &#xe68e;
  • check-circle-o
    &#xe68f;
  • chain-broken
    &#xe690;
  • chain
    &#xe691;
  • chevron-circle-down
    &#xe692;
  • chevron-circle-left
    &#xe693;
  • chevron-circle-right
    &#xe694;
  • chevron-down
    &#xe695;
  • chevron-circle-up
    &#xe696;
  • chevron-left
    &#xe697;
  • chevron-right
    &#xe698;
  • chevron-up
    &#xe699;
  • child
    &#xe69a;
  • circle-thin
    &#xe69b;
  • circle-o-notch
    &#xe69c;
  • chrome
    &#xe69d;
  • circle-o
    &#xe69e;
  • clipboard
    &#xe69f;
  • circle
    &#xe6a0;
  • cloud
    &#xe6a1;
  • close
    &#xe6a2;
  • cloud-upload
    &#xe6a3;
  • clone
    &#xe6a4;
  • cloud-download
    &#xe6a5;
  • clock-o
    &#xe6a6;
  • cny
    &#xe6a7;
  • code-fork
    &#xe6a8;
  • codiepie
    &#xe6a9;
  • codepen
    &#xe6aa;
  • code
    &#xe6ab;
  • cog
    &#xe6ac;
  • coffee
    &#xe6ad;
  • columns
    &#xe6ae;
  • comment-o
    &#xe6af;
  • commenting-o
    &#xe6b0;
  • commenting
    &#xe6b1;
  • comment
    &#xe6b2;
  • cogs
    &#xe6b3;
  • compass
    &#xe6b4;
  • compress
    &#xe6b5;
  • comments
    &#xe6b6;
  • comments-o
    &#xe6b7;
  • connectdevelop
    &#xe6b8;
  • copy
    &#xe6b9;
  • contao
    &#xe6ba;
  • copyright
    &#xe6bb;
  • credit-card-alt
    &#xe6bc;
  • credit-card
    &#xe6bd;
  • crop
    &#xe6be;
  • creative-commons
    &#xe6bf;
  • crosshairs
    &#xe6c0;
  • css3
    &#xe6c1;
  • cube
    &#xe6c2;
  • cutlery
    &#xe6c3;
  • cut
    &#xe6c4;
  • dashboard
    &#xe6c5;
  • dashcube
    &#xe6c6;
  • cubes
    &#xe6c7;
  • database
    &#xe6c8;
  • deaf
    &#xe6c9;
  • delicious
    &#xe6ca;
  • deviantart
    &#xe6cb;
  • diamond
    &#xe6cc;
  • dedent
    &#xe6cd;
  • desktop
    &#xe6ce;
  • deafness
    &#xe6cf;
  • drivers-license-o
    &#xe6d0;
  • digg
    &#xe6d1;
  • dribbble
    &#xe6d2;
  • download
    &#xe6d3;
  • dollar
    &#xe6d4;
  • dot-circle-o
    &#xe6d5;
  • edit
    &#xe6d6;
  • dropbox
    &#xe6d7;
  • edge
    &#xe6d8;
  • drupal
    &#xe6d9;
  • drivers-license
    &#xe6da;
  • eject
    &#xe6db;
  • ellipsis-h
    &#xe6dc;
  • envelope-o
    &#xe6dd;
  • ellipsis-v
    &#xe6de;
  • eercast
    &#xe6df;
  • empire
    &#xe6e0;
  • envelope-open-o
    &#xe6e1;
  • envelope-open
    &#xe6e2;
  • envelope
    &#xe6e3;
  • envelope-square
    &#xe6e4;
  • envira
    &#xe6e5;
  • etsy
    &#xe6e6;
  • eraser
    &#xe6e7;
  • eur
    &#xe6e8;
  • euro
    &#xe6e9;
  • exchange
    &#xe6ea;
  • exclamation-triangle
    &#xe6eb;
  • expand
    &#xe6ec;
  • exclamation
    &#xe6ed;
  • exclamation-circle
    &#xe6ee;
  • expeditedssl
    &#xe6ef;
  • external-link-square
    &#xe6f0;
  • eyedropper
    &#xe6f1;
  • external-link
    &#xe6f2;
  • eye
    &#xe6f3;
  • eye-slash
    &#xe6f4;
  • fa
    &#xe6f5;
  • facebook-official
    &#xe6f6;
  • facebook-f
    &#xe6f7;
  • facebook-square
    &#xe6f8;
  • facebook
    &#xe6f9;
  • fast-backward
    &#xe6fa;
  • fast-forward
    &#xe6fb;
  • feed
    &#xe6fc;
  • file-archive-o
    &#xe6fd;
  • female
    &#xe6fe;
  • file-audio-o
    &#xe6ff;
  • fighter-jet
    &#xe700;
  • fax
    &#xe701;
  • file-code-o
    &#xe702;
  • file-movie-o
    &#xe703;
  • file-image-o
    &#xe704;
  • file-excel-o
    &#xe705;
  • file-o
    &#xe706;
  • file-photo-o
    &#xe707;
  • file-pdf-o
    &#xe708;
  • file-picture-o
    &#xe709;
  • file-sound-o
    &#xe70a;
  • file-powerpoint-o
    &#xe70b;
  • file-text
    &#xe70c;
  • file-text-o
    &#xe70d;
  • file
    &#xe70e;
  • file-video-o
    &#xe70f;
  • files-o
    &#xe710;
  • file-zip-o
    &#xe711;
  • file-word-o
    &#xe712;
  • film
    &#xe713;
  • filter
    &#xe714;
  • fire
    &#xe715;
  • fire-extinguisher
    &#xe716;
  • flag-checkered
    &#xe717;
  • firefox
    &#xe718;
  • first-order
    &#xe719;
  • flash
    &#xe71a;
  • flag
    &#xe71b;
  • flag-o
    &#xe71c;
  • flask
    &#xe71d;
  • flickr
    &#xe71e;
  • folder-open
    &#xe71f;
  • folder-o
    &#xe720;
  • font-awesome
    &#xe721;
  • folder
    &#xe722;
  • floppy-o
    &#xe723;
  • folder-open-o
    &#xe724;
  • fonticons
    &#xe725;
  • font
    &#xe726;
  • forumbee
    &#xe727;
  • fort-awesome
    &#xe728;
  • forward
    &#xe729;
  • foursquare
    &#xe72a;
  • free-code-camp
    &#xe72b;
  • frown-o
    &#xe72c;
  • futbol-o
    &#xe72d;
  • gamepad
    &#xe72e;
  • gavel
    &#xe72f;
  • gbp
    &#xe730;
  • ge
    &#xe731;
  • gear
    &#xe732;
  • gears
    &#xe733;
  • genderless
    &#xe734;
  • get-pocket
    &#xe735;
  • gg-circle
    &#xe736;
  • gift
    &#xe737;
  • gg
    &#xe738;
  • git-square
    &#xe739;
  • git
    &#xe73a;
  • github-alt
    &#xe73b;
  • github-square
    &#xe73c;
  • github
    &#xe73d;
  • gitlab
    &#xe73e;
  • gittip
    &#xe73f;
  • glass
    &#xe740;
  • glide-g
    &#xe741;
  • glide
    &#xe742;
  • globe
    &#xe743;
  • google-plus-circle
    &#xe744;
  • google-plus-official
    &#xe745;
  • google-plus-square
    &#xe746;
  • google-plus
    &#xe747;
  • google-wallet
    &#xe748;
  • google
    &#xe749;
  • graduation-cap
    &#xe74a;
  • gratipay
    &#xe74b;
  • grav
    &#xe74c;
  • group
    &#xe74d;
  • h-square
    &#xe74e;
  • hacker-news
    &#xe74f;
  • hand-grab-o
    &#xe750;
  • hand-o-left
    &#xe751;
  • hand-lizard-o
    &#xe752;
  • hand-o-down
    &#xe753;
  • hand-o-right
    &#xe754;
  • hand-o-up
    &#xe755;
  • hand-paper-o
    &#xe756;
  • hand-pointer-o
    &#xe757;
  • hand-peace-o
    &#xe758;
  • hand-spock-o
    &#xe759;
  • hand-rock-o
    &#xe75a;
  • hand-scissors-o
    &#xe75b;
  • hand-stop-o
    &#xe75c;
  • hard-of-hearing
    &#xe75d;
  • handshake-o
    &#xe75e;
  • hashtag
    &#xe75f;
  • headphones
    &#xe760;
  • header
    &#xe761;
  • hdd-o
    &#xe762;
  • heart-o
    &#xe763;
  • heart
    &#xe764;
  • hotel
    &#xe765;
  • heartbeat
    &#xe766;
  • hourglass-1
    &#xe767;
  • home
    &#xe768;
  • history
    &#xe769;
  • hourglass-2
    &#xe76a;
  • hospital-o
    &#xe76b;
  • hourglass-3
    &#xe76c;
  • hourglass-half
    &#xe76d;
  • hourglass-end
    &#xe76e;
  • hourglass-o
    &#xe76f;
  • hourglass-start
    &#xe770;
  • houzz
    &#xe771;
  • html5
    &#xe772;
  • hourglass
    &#xe773;
  • id-badge
    &#xe774;
  • i-cursor
    &#xe775;
  • id-card
    &#xe776;
  • ils
    &#xe777;
  • id-card-o
    &#xe778;
  • image
    &#xe779;
  • inbox
    &#xe77a;
  • indent
    &#xe77b;
  • industry
    &#xe77c;
  • imdb
    &#xe77d;
  • info
    &#xe77e;
  • institution
    &#xe77f;
  • info-circle
    &#xe780;
  • internet-explorer
    &#xe781;
  • inr
    &#xe782;
  • instagram
    &#xe783;
  • ioxhost
    &#xe784;
  • joomla
    &#xe785;
  • jpy
    &#xe786;
  • intersex
    &#xe787;
  • jsfiddle
    &#xe788;
  • italic
    &#xe789;
  • key
    &#xe78a;
  • keyboard-o
    &#xe78b;
  • krw
    &#xe78c;
  • laptop
    &#xe78d;
  • language
    &#xe78e;
  • leaf
    &#xe78f;
  • lastfm
    &#xe790;
  • lastfm-square
    &#xe791;
  • legal
    &#xe792;
  • leanpub
    &#xe793;
  • level-down
    &#xe794;
  • level-up
    &#xe795;
  • life-ring
    &#xe796;
  • life-buoy
    &#xe797;
  • life-bouy
    &#xe798;
  • lemon-o
    &#xe799;
  • lightbulb-o
    &#xe79a;
  • life-saver
    &#xe79b;
  • line-chart
    &#xe79c;
  • linkedin
    &#xe79d;
  • linkedin-square
    &#xe79e;
  • link
    &#xe79f;
  • linode
    &#xe7a0;
  • list
    &#xe7a1;
  • list-ul
    &#xe7a2;
  • linux
    &#xe7a3;
  • list-ol
    &#xe7a4;
  • list-alt
    &#xe7a5;
  • location-arrow
    &#xe7a6;
  • lock
    &#xe7a7;
  • long-arrow-up
    &#xe7a8;
  • long-arrow-right
    &#xe7a9;
  • long-arrow-left
    &#xe7aa;
  • long-arrow-down
    &#xe7ab;
  • magic
    &#xe7ac;
  • magnet
    &#xe7ad;
  • low-vision
    &#xe7ae;
  • mail-reply-all
    &#xe7af;
  • mail-reply
    &#xe7b0;
  • mail-forward
    &#xe7b1;
  • male
    &#xe7b2;
  • map-pin
    &#xe7b3;
  • map-o
    &#xe7b4;
  • map-marker
    &#xe7b5;
  • map
    &#xe7b6;
  • map-signs
    &#xe7b7;
  • mars-stroke-h
    &#xe7b8;
  • mars-stroke
    &#xe7b9;
  • mars-stroke-v
    &#xe7ba;
  • mars-double
    &#xe7bb;
  • mars
    &#xe7bc;
  • maxcdn
    &#xe7bd;
  • medium
    &#xe7be;
  • medkit
    &#xe7bf;
  • meanpath
    &#xe7c0;
  • meetup
    &#xe7c1;
  • meh-o
    &#xe7c2;
  • mercury
    &#xe7c3;
  • microphone
    &#xe7c4;
  • minus-circle
    &#xe7c5;
  • minus-square
    &#xe7c6;
  • minus-square-o
    &#xe7c7;
  • microchip
    &#xe7c8;
  • microphone-slash
    &#xe7c9;
  • minus
    &#xe7ca;
  • mixcloud
    &#xe7cb;
  • mobile
    &#xe7cc;
  • modx
    &#xe7cd;
  • money
    &#xe7ce;
  • moon-o
    &#xe7cf;
  • motorcycle
    &#xe7d0;
  • mouse-pointer
    &#xe7d1;
  • mortar-board
    &#xe7d2;
  • navicon
    &#xe7d3;
  • neuter
    &#xe7d4;
  • music
    &#xe7d5;
  • object-group
    &#xe7d6;
  • newspaper-o
    &#xe7d7;
  • object-ungroup
    &#xe7d8;
  • odnoklassniki-square
    &#xe7d9;
  • odnoklassniki
    &#xe7da;
  • opencart
    &#xe7db;
  • openid
    &#xe7dc;
  • opera
    &#xe7dd;
  • paper-plane-o
    &#xe7de;
  • pagelines
    &#xe7df;
  • outdent
    &#xe7e0;
  • paper-plane
    &#xe7e1;
  • paint-brush
    &#xe7e2;
  • paragraph
    &#xe7e3;
  • paperclip
    &#xe7e4;
  • optin-monster
    &#xe7e5;
  • pause-circle-o
    &#xe7e6;
  • paste
    &#xe7e7;
  • pause
    &#xe7e8;
  • pause-circle
    &#xe7e9;
  • paw
    &#xe7ea;
  • paypal
    &#xe7eb;
  • pencil-square-o
    &#xe7ec;
  • percent
    &#xe7ed;
  • pencil-square
    &#xe7ee;
  • pencil
    &#xe7ef;
  • phone-square
    &#xe7f0;
  • phone
    &#xe7f1;
  • photo
    &#xe7f2;
  • picture-o
    &#xe7f3;
  • pie-chart
    &#xe7f4;
  • pied-piper-pp
    &#xe7f5;
  • pied-piper-alt
    &#xe7f6;
  • pinterest-p
    &#xe7f7;
  • plane
    &#xe7f8;
  • play-circle-o
    &#xe7f9;
  • pied-piper
    &#xe7fa;
  • pinterest
    &#xe7fb;
  • pinterest-square
    &#xe7fc;
  • play
    &#xe7fd;
  • play-circle
    &#xe7fe;
  • plug
    &#xe7ff;
  • plus-square-o
    &#xe800;
  • plus-square
    &#xe801;
  • plus-circle
    &#xe802;
  • plus
    &#xe803;
  • product-hunt
    &#xe804;
  • print
    &#xe805;
  • puzzle-piece
    &#xe806;
  • podcast
    &#xe807;
  • power-off
    &#xe808;
  • qq
    &#xe809;
  • question
    &#xe80a;
  • qrcode
    &#xe80b;
  • quora
    &#xe80c;
  • question-circle-o
    &#xe80d;
  • question-circle
    &#xe80e;
  • quote-left
    &#xe80f;
  • quote-right
    &#xe810;
  • ra
    &#xe811;
  • ravelry
    &#xe812;
  • rebel
    &#xe813;
  • random
    &#xe814;
  • reddit-square
    &#xe815;
  • reddit-alien
    &#xe816;
  • recycle
    &#xe817;
  • reddit
    &#xe818;
  • registered
    &#xe819;
  • refresh
    &#xe81a;
  • renren
    &#xe81b;
  • reorder
    &#xe81c;
  • repeat
    &#xe81d;
  • reply-all
    &#xe81e;
  • remove
    &#xe81f;
  • rmb
    &#xe820;
  • resistance
    &#xe821;
  • road
    &#xe822;
  • retweet
    &#xe823;
  • reply
    &#xe824;
  • rocket
    &#xe825;
  • rotate-left
    &#xe826;
  • rouble
    &#xe827;
  • rotate-right
    &#xe828;
  • rss
    &#xe829;
  • rss-square
    &#xe82a;
  • ruble
    &#xe82b;
  • rub
    &#xe82c;
  • s15
    &#xe82d;
  • save
    &#xe82e;
  • rupee
    &#xe82f;
  • safari
    &#xe830;
  • scissors
    &#xe831;
  • scribd
    &#xe832;
  • search-plus
    &#xe833;
  • search
    &#xe834;
  • sellsy
    &#xe835;
  • send
    &#xe836;
  • send-o
    &#xe837;
  • search-minus
    &#xe838;
  • server
    &#xe839;
  • share-alt-square
    &#xe83a;
  • share-alt
    &#xe83b;
  • share-square-o
    &#xe83c;
  • share
    &#xe83d;
  • share-square
    &#xe83e;
  • shekel
    &#xe83f;
  • sheqel
    &#xe840;
  • shield
    &#xe841;
  • ship
    &#xe842;
  • shirtsinbulk
    &#xe843;
  • shower
    &#xe844;
  • sign-in
    &#xe845;
  • shopping-basket
    &#xe846;
  • shopping-cart
    &#xe847;
  • shopping-bag
    &#xe848;
  • sign-language
    &#xe849;
  • sign-out
    &#xe84a;
  • signal
    &#xe84b;
  • simplybuilt
    &#xe84c;
  • sitemap
    &#xe84d;
  • signing
    &#xe84e;
  • sliders
    &#xe84f;
  • skype
    &#xe850;
  • skyatlas
    &#xe851;
  • slack
    &#xe852;
  • slideshare
    &#xe853;
  • snapchat-square
    &#xe854;
  • snapchat-ghost
    &#xe855;
  • smile-o
    &#xe856;
  • snapchat
    &#xe857;
  • snowflake-o
    &#xe858;
  • soccer-ball-o
    &#xe859;
  • sort-alpha-asc
    &#xe85a;
  • sort-alpha-desc
    &#xe85b;
  • sort-amount-asc
    &#xe85c;
  • sort-desc
    &#xe85d;
  • sort-down
    &#xe85e;
  • sort-numeric-asc
    &#xe85f;
  • sort-asc
    &#xe860;
  • sort-amount-desc
    &#xe861;
  • sort-numeric-desc
    &#xe862;
  • sort-up
    &#xe863;
  • sort
    &#xe864;
  • soundcloud
    &#xe865;
  • space-shuttle
    &#xe866;
  • spinner
    &#xe867;
  • spoon
    &#xe868;
  • square-o
    &#xe869;
  • spotify
    &#xe86a;
  • square
    &#xe86b;
  • stack-exchange
    &#xe86c;
  • star-half-empty
    &#xe86d;
  • stack-overflow
    &#xe86e;
  • star-half
    &#xe86f;
  • star
    &#xe870;
  • star-half-o
    &#xe871;
  • star-o
    &#xe872;
  • star-half-full
    &#xe873;
  • sticky-note-o
    &#xe874;
  • step-forward
    &#xe875;
  • steam
    &#xe876;
  • steam-square
    &#xe877;
  • stethoscope
    &#xe878;
  • step-backward
    &#xe879;
  • stop
    &#xe87a;
  • stop-circle
    &#xe87b;
  • stop-circle-o
    &#xe87c;
  • sticky-note
    &#xe87d;
  • street-view
    &#xe87e;
  • strikethrough
    &#xe87f;
  • stumbleupon
    &#xe880;
  • subway
    &#xe881;
  • stumbleupon-circle
    &#xe882;
  • suitcase
    &#xe883;
  • subscript
    &#xe884;
  • sun-o
    &#xe885;
  • superpowers
    &#xe886;
  • tablet
    &#xe887;
  • table
    &#xe888;
  • support
    &#xe889;
  • superscript
    &#xe88a;
  • tasks
    &#xe88b;
  • tags
    &#xe88c;
  • tag
    &#xe88d;
  • tachometer
    &#xe88e;
  • telegram
    &#xe88f;
  • taxi
    &#xe890;
  • terminal
    &#xe891;
  • tencent-weibo
    &#xe892;
  • television
    &#xe893;
  • text-height
    &#xe894;
  • text-width
    &#xe895;
  • th-large
    &#xe896;
  • th-list
    &#xe897;
  • thermometer-0
    &#xe898;
  • th
    &#xe899;
  • themeisle
    &#xe89a;
  • thermometer-1
    &#xe89b;
  • thermometer-2
    &#xe89c;
  • thermometer-3
    &#xe89d;
  • thermometer-4
    &#xe89e;
  • thermometer-empty
    &#xe89f;
  • thermometer-full
    &#xe8a0;
  • thermometer-half
    &#xe8a1;
  • thumb-tack
    &#xe8a2;
  • thermometer-three-quarters
    &#xe8a3;
  • thermometer-quarter
    &#xe8a4;
  • thermometer
    &#xe8a5;
  • thumbs-down
    &#xe8a6;
  • times-circle
    &#xe8a7;
  • thumbs-up
    &#xe8a8;
  • ticket
    &#xe8a9;
  • thumbs-o-down
    &#xe8aa;
  • thumbs-o-up
    &#xe8ab;
  • times-circle-o
    &#xe8ac;
  • times-rectangle-o
    &#xe8ad;
  • times-rectangle
    &#xe8ae;
  • times
    &#xe8af;
  • tint
    &#xe8b0;
  • toggle-left
    &#xe8b1;
  • toggle-down
    &#xe8b2;
  • toggle-off
    &#xe8b3;
  • toggle-right
    &#xe8b4;
  • toggle-on
    &#xe8b5;
  • toggle-up
    &#xe8b6;
  • transgender-alt
    &#xe8b7;
  • trademark
    &#xe8b8;
  • train
    &#xe8b9;
  • trash-o
    &#xe8ba;
  • trash
    &#xe8bb;
  • transgender
    &#xe8bc;
  • tree
    &#xe8bd;
  • try
    &#xe8be;
  • trello
    &#xe8bf;
  • trophy
    &#xe8c0;
  • tty
    &#xe8c1;
  • truck
    &#xe8c2;
  • tripadvisor
    &#xe8c3;
  • tumblr-square
    &#xe8c4;
  • turkish-lira
    &#xe8c5;
  • tumblr
    &#xe8c6;
  • tv
    &#xe8c7;
  • twitter
    &#xe8c8;
  • twitter-square
    &#xe8c9;
  • twitch
    &#xe8ca;
  • underline
    &#xe8cb;
  • umbrella
    &#xe8cc;
  • undo
    &#xe8cd;
  • unlink
    &#xe8ce;
  • university
    &#xe8cf;
  • universal-access
    &#xe8d0;
  • unlock-alt
    &#xe8d1;
  • unlock
    &#xe8d2;
  • upload
    &#xe8d3;
  • unsorted
    &#xe8d4;
  • usd
    &#xe8d5;
  • usb
    &#xe8d6;
  • user-circle
    &#xe8d7;
  • user-o
    &#xe8d8;
  • user-circle-o
    &#xe8d9;
  • user-plus
    &#xe8da;
  • user-md
    &#xe8db;
  • user-secret
    &#xe8dc;
  • user
    &#xe8dd;
  • user-times
    &#xe8de;
  • users
    &#xe8df;
  • vcard-o
    &#xe8e0;
  • vcard
    &#xe8e1;
  • venus
    &#xe8e2;
  • venus-mars
    &#xe8e3;
  • venus-double
    &#xe8e4;
  • viadeo-square
    &#xe8e5;
  • viacoin
    &#xe8e6;
  • viadeo
    &#xe8e7;
  • video-camera
    &#xe8e8;
  • vimeo-square
    &#xe8e9;
  • vine
    &#xe8ea;
  • vimeo
    &#xe8eb;
  • vk
    &#xe8ec;
  • volume-control-phone
    &#xe8ed;
  • volume-off
    &#xe8ee;
  • volume-down
    &#xe8ef;
  • warning
    &#xe8f0;
  • volume-up
    &#xe8f1;
  • wechat
    &#xe8f2;
  • weibo
    &#xe8f3;
  • whatsapp
    &#xe8f4;
  • weixin
    &#xe8f5;
  • wheelchair-alt
    &#xe8f6;
  • wheelchair
    &#xe8f7;
  • wikipedia-w
    &#xe8f8;
  • wifi
    &#xe8f9;
  • window-close
    &#xe8fa;
  • window-close-o
    &#xe8fb;
  • window-maximize
    &#xe8fc;
  • window-minimize
    &#xe8fd;
  • window-restore
    &#xe8fe;
  • windows
    &#xe8ff;
  • won
    &#xe900;
  • wordpress
    &#xe901;
  • wpexplorer
    &#xe902;
  • wpbeginner
    &#xe903;
  • xing-square
    &#xe904;
  • wrench
    &#xe905;
  • wpforms
    &#xe906;
  • y-combinator
    &#xe907;
  • xing
    &#xe908;
  • y-combinator-square
    &#xe909;
  • yahoo
    &#xe90a;
  • yc
    &#xe90b;
  • yc-square
    &#xe90c;
  • yen
    &#xe90d;
  • yelp
    &#xe90e;
  • yoast
    &#xe90f;
  • youtube-play
    &#xe910;
  • youtube-square
    &#xe911;
  • youtube
    &#xe912;

Unicode 引用


Unicode 是字体在网页端最原始的应用方式,特点是:

  • 兼容性最好,支持 IE6+,及所有现代浏览器。
  • 支持按字体的方式去动态调整图标大小,颜色等等。
  • 但是因为是字体,所以不支持多色。只能使用平台里单色的图标,就算项目里有多色图标也会自动去色。

注意:新版 iconfont 支持多色图标,这些多色图标在 Unicode 模式下将不能使用,如果有需求建议使用symbol 的引用方式

Unicode 使用步骤如下:

第一步:拷贝项目下面生成的 @font-face

@font-face {
  font-family: 'iconfont';
  src: url('iconfont.eot');
  src: url('iconfont.eot?#iefix') format('embedded-opentype'),
      url('iconfont.woff2') format('woff2'),
      url('iconfont.woff') format('woff'),
      url('iconfont.ttf') format('truetype'),
      url('iconfont.svg#iconfont') format('svg');
}

第二步:定义使用 iconfont 的样式

.iconfont {
  font-family: "iconfont" !important;
  font-size: 16px;
  font-style: normal;
  -webkit-font-smoothing: antialiased;
  -moz-osx-font-smoothing: grayscale;
}

第三步:挑选相应图标并获取字体编码,应用于页面

<span class="iconfont">&#x33;</span>

"iconfont" 是你项目下的 font-family。可以通过编辑项目查看,默认是 "iconfont"。

  • bars
    .icon-bars
  • calendar
    .icon-calendar
  • camera
    .icon-camera
  • check
    .icon-check
  • check-square-o
    .icon-check-square-o
  • clock-o
    .icon-clock-o
  • 500px
    .icon-500px
  • address-book-o
    .icon-address-book-o
  • address-book
    .icon-address-book
  • address-card-o
    .icon-address-card-o
  • address-card
    .icon-address-card
  • adjust
    .icon-adjust
  • adn
    .icon-adn
  • align-center
    .icon-align-center
  • align-justify
    .icon-align-justify
  • align-left
    .icon-align-left
  • align-right
    .icon-align-right
  • amazon
    .icon-amazon
  • ambulance
    .icon-ambulance
  • american-sign-language-interpreting
    .icon-american-sign-language-interpreting
  • anchor
    .icon-anchor
  • android
    .icon-android
  • angellist
    .icon-angellist
  • angle-double-down
    .icon-angle-double-down
  • angle-double-left
    .icon-angle-double-left
  • angle-double-right
    .icon-angle-double-right
  • angle-double-up
    .icon-angle-double-up
  • angle-down
    .icon-angle-down
  • angle-left
    .icon-angle-left
  • angle-right
    .icon-angle-right
  • angle-up
    .icon-angle-up
  • apple
    .icon-apple
  • archive
    .icon-archive
  • area-chart
    .icon-area-chart
  • arrow-circle-down
    .icon-arrow-circle-down
  • arrow-circle-left
    .icon-arrow-circle-left
  • arrow-circle-o-down
    .icon-arrow-circle-o-down
  • arrow-circle-o-left
    .icon-arrow-circle-o-left
  • arrow-circle-o-right
    .icon-arrow-circle-o-right
  • arrow-circle-o-up
    .icon-arrow-circle-o-up
  • arrow-circle-right
    .icon-arrow-circle-right
  • arrow-circle-up
    .icon-arrow-circle-up
  • arrow-down
    .icon-arrow-down
  • arrow-left
    .icon-arrow-left
  • arrow-right
    .icon-arrow-right
  • arrow-up
    .icon-arrow-up
  • arrows-alt
    .icon-arrows-alt
  • arrows-h
    .icon-arrows-h
  • arrows-v
    .icon-arrows-v
  • arrows
    .icon-arrows
  • asl-interpreting
    .icon-asl-interpreting
  • assistive-listening-systems
    .icon-assistive-listening-systems
  • asterisk
    .icon-asterisk
  • at
    .icon-at
  • audio-description
    .icon-audio-description
  • automobile
    .icon-automobile
  • backward
    .icon-backward
  • balance-scale
    .icon-balance-scale
  • bandcamp
    .icon-bandcamp
  • bank
    .icon-bank
  • bars
    .icon-bars1
  • bar-chart
    .icon-bar-chart
  • bar-chart-o
    .icon-bar-chart-o
  • bathtub
    .icon-bathtub
  • barcode
    .icon-barcode
  • bath
    .icon-bath
  • battery-0
    .icon-battery-0
  • battery-1
    .icon-battery-1
  • battery-2
    .icon-battery-2
  • battery-4
    .icon-battery-4
  • battery-3
    .icon-battery-3
  • battery-half
    .icon-battery-half
  • battery-empty
    .icon-battery-empty
  • battery-full
    .icon-battery-full
  • battery-quarter
    .icon-battery-quarter
  • battery-three-quarters
    .icon-battery-three-quarters
  • battery
    .icon-battery
  • beer
    .icon-beer
  • bed
    .icon-bed
  • behance
    .icon-behance
  • behance-square
    .icon-behance-square
  • bell-o
    .icon-bell-o
  • bell-slash-o
    .icon-bell-slash-o
  • bell-slash
    .icon-bell-slash
  • bicycle
    .icon-bicycle
  • bitbucket-square
    .icon-bitbucket-square
  • binoculars
    .icon-binoculars
  • bell
    .icon-bell
  • birthday-cake
    .icon-birthday-cake
  • bitbucket
    .icon-bitbucket
  • black-tie
    .icon-black-tie
  • bluetooth-b
    .icon-bluetooth-b
  • bitcoin
    .icon-bitcoin
  • blind
    .icon-blind
  • bluetooth
    .icon-bluetooth
  • bold
    .icon-bold
  • bolt
    .icon-bolt
  • bomb
    .icon-bomb
  • book
    .icon-book
  • bug
    .icon-bug
  • bookmark-o
    .icon-bookmark-o
  • btc
    .icon-btc
  • bookmark
    .icon-bookmark
  • briefcase
    .icon-briefcase
  • braille
    .icon-braille
  • bullhorn
    .icon-bullhorn
  • bullseye
    .icon-bullseye
  • bus
    .icon-bus
  • building
    .icon-building
  • cab
    .icon-cab
  • buysellads
    .icon-buysellads
  • building-o
    .icon-building-o
  • calendar-plus-o
    .icon-calendar-plus-o
  • calendar-o
    .icon-calendar-o
  • calendar-times-o
    .icon-calendar-times-o
  • calendar-check-o
    .icon-calendar-check-o
  • calendar-minus-o
    .icon-calendar-minus-o
  • calculator
    .icon-calculator
  • caret-down
    .icon-caret-down
  • caret-left
    .icon-caret-left
  • car
    .icon-car
  • camera-retro
    .icon-camera-retro
  • caret-right
    .icon-caret-right
  • caret-square-o-left
    .icon-caret-square-o-left
  • caret-square-o-right
    .icon-caret-square-o-right
  • caret-up
    .icon-caret-up
  • caret-square-o-up
    .icon-caret-square-o-up
  • cart-plus
    .icon-cart-plus
  • cart-arrow-down
    .icon-cart-arrow-down
  • caret-square-o-down
    .icon-caret-square-o-down
  • cc-discover
    .icon-cc-discover
  • cc-diners-club
    .icon-cc-diners-club
  • cc-paypal
    .icon-cc-paypal
  • cc-jcb
    .icon-cc-jcb
  • cc-mastercard
    .icon-cc-mastercard
  • cc-amex
    .icon-cc-amex
  • cc
    .icon-cc
  • cc-visa
    .icon-cc-visa
  • cc-stripe
    .icon-cc-stripe
  • check
    .icon-check1
  • certificate
    .icon-certificate
  • check-circle
    .icon-check-circle
  • check-circle-o
    .icon-check-circle-o
  • chain-broken
    .icon-chain-broken
  • chain
    .icon-chain
  • chevron-circle-down
    .icon-chevron-circle-down
  • chevron-circle-left
    .icon-chevron-circle-left
  • chevron-circle-right
    .icon-chevron-circle-right
  • chevron-down
    .icon-chevron-down
  • chevron-circle-up
    .icon-chevron-circle-up
  • chevron-left
    .icon-chevron-left
  • chevron-right
    .icon-chevron-right
  • chevron-up
    .icon-chevron-up
  • child
    .icon-child
  • circle-thin
    .icon-circle-thin
  • circle-o-notch
    .icon-circle-o-notch
  • chrome
    .icon-chrome
  • circle-o
    .icon-circle-o
  • clipboard
    .icon-clipboard
  • circle
    .icon-circle
  • cloud
    .icon-cloud
  • close
    .icon-close
  • cloud-upload
    .icon-cloud-upload
  • clone
    .icon-clone
  • cloud-download
    .icon-cloud-download
  • clock-o
    .icon-clock-o1
  • cny
    .icon-cny
  • code-fork
    .icon-code-fork
  • codiepie
    .icon-codiepie
  • codepen
    .icon-codepen
  • code
    .icon-code
  • cog
    .icon-cog
  • coffee
    .icon-coffee
  • columns
    .icon-columns
  • comment-o
    .icon-comment-o
  • commenting-o
    .icon-commenting-o
  • commenting
    .icon-commenting
  • comment
    .icon-comment
  • cogs
    .icon-cogs
  • compass
    .icon-compass
  • compress
    .icon-compress
  • comments
    .icon-comments
  • comments-o
    .icon-comments-o
  • connectdevelop
    .icon-connectdevelop
  • copy
    .icon-copy
  • contao
    .icon-contao
  • copyright
    .icon-copyright
  • credit-card-alt
    .icon-credit-card-alt
  • credit-card
    .icon-credit-card
  • crop
    .icon-crop
  • creative-commons
    .icon-creative-commons
  • crosshairs
    .icon-crosshairs
  • css3
    .icon-css3
  • cube
    .icon-cube
  • cutlery
    .icon-cutlery
  • cut
    .icon-cut
  • dashboard
    .icon-dashboard
  • dashcube
    .icon-dashcube
  • cubes
    .icon-cubes
  • database
    .icon-database
  • deaf
    .icon-deaf
  • delicious
    .icon-delicious
  • deviantart
    .icon-deviantart
  • diamond
    .icon-diamond
  • dedent
    .icon-dedent
  • desktop
    .icon-desktop
  • deafness
    .icon-deafness
  • drivers-license-o
    .icon-drivers-license-o
  • digg
    .icon-digg
  • dribbble
    .icon-dribbble
  • download
    .icon-download
  • dollar
    .icon-dollar
  • dot-circle-o
    .icon-dot-circle-o
  • edit
    .icon-edit
  • dropbox
    .icon-dropbox
  • edge
    .icon-edge
  • drupal
    .icon-drupal
  • drivers-license
    .icon-drivers-license
  • eject
    .icon-eject
  • ellipsis-h
    .icon-ellipsis-h
  • envelope-o
    .icon-envelope-o
  • ellipsis-v
    .icon-ellipsis-v
  • eercast
    .icon-eercast
  • empire
    .icon-empire
  • envelope-open-o
    .icon-envelope-open-o
  • envelope-open
    .icon-envelope-open
  • envelope
    .icon-envelope
  • envelope-square
    .icon-envelope-square
  • envira
    .icon-envira
  • etsy
    .icon-etsy
  • eraser
    .icon-eraser
  • eur
    .icon-eur
  • euro
    .icon-euro
  • exchange
    .icon-exchange
  • exclamation-triangle
    .icon-exclamation-triangle
  • expand
    .icon-expand
  • exclamation
    .icon-exclamation
  • exclamation-circle
    .icon-exclamation-circle
  • expeditedssl
    .icon-expeditedssl
  • external-link-square
    .icon-external-link-square
  • eyedropper
    .icon-eyedropper
  • external-link
    .icon-external-link
  • eye
    .icon-eye
  • eye-slash
    .icon-eye-slash
  • fa
    .icon-fa
  • facebook-official
    .icon-facebook-official
  • facebook-f
    .icon-facebook-f
  • facebook-square
    .icon-facebook-square
  • facebook
    .icon-facebook
  • fast-backward
    .icon-fast-backward
  • fast-forward
    .icon-fast-forward
  • feed
    .icon-feed
  • file-archive-o
    .icon-file-archive-o
  • female
    .icon-female
  • file-audio-o
    .icon-file-audio-o
  • fighter-jet
    .icon-fighter-jet
  • fax
    .icon-fax
  • file-code-o
    .icon-file-code-o
  • file-movie-o
    .icon-file-movie-o
  • file-image-o
    .icon-file-image-o
  • file-excel-o
    .icon-file-excel-o
  • file-o
    .icon-file-o
  • file-photo-o
    .icon-file-photo-o
  • file-pdf-o
    .icon-file-pdf-o
  • file-picture-o
    .icon-file-picture-o
  • file-sound-o
    .icon-file-sound-o
  • file-powerpoint-o
    .icon-file-powerpoint-o
  • file-text
    .icon-file-text
  • file-text-o
    .icon-file-text-o
  • file
    .icon-file
  • file-video-o
    .icon-file-video-o
  • files-o
    .icon-files-o
  • file-zip-o
    .icon-file-zip-o
  • file-word-o
    .icon-file-word-o
  • film
    .icon-film
  • filter
    .icon-filter
  • fire
    .icon-fire
  • fire-extinguisher
    .icon-fire-extinguisher
  • flag-checkered
    .icon-flag-checkered
  • firefox
    .icon-firefox
  • first-order
    .icon-first-order
  • flash
    .icon-flash
  • flag
    .icon-flag
  • flag-o
    .icon-flag-o
  • flask
    .icon-flask
  • flickr
    .icon-flickr
  • folder-open
    .icon-folder-open
  • folder-o
    .icon-folder-o
  • font-awesome
    .icon-font-awesome
  • folder
    .icon-folder
  • floppy-o
    .icon-floppy-o
  • folder-open-o
    .icon-folder-open-o
  • fonticons
    .icon-fonticons
  • font
    .icon-font
  • forumbee
    .icon-forumbee
  • fort-awesome
    .icon-fort-awesome
  • forward
    .icon-forward
  • foursquare
    .icon-foursquare
  • free-code-camp
    .icon-free-code-camp
  • frown-o
    .icon-frown-o
  • futbol-o
    .icon-futbol-o
  • gamepad
    .icon-gamepad
  • gavel
    .icon-gavel
  • gbp
    .icon-gbp
  • ge
    .icon-ge
  • gear
    .icon-gear
  • gears
    .icon-gears
  • genderless
    .icon-genderless
  • get-pocket
    .icon-get-pocket
  • gg-circle
    .icon-gg-circle
  • gift
    .icon-gift
  • gg
    .icon-gg
  • git-square
    .icon-git-square
  • git
    .icon-git
  • github-alt
    .icon-github-alt
  • github-square
    .icon-github-square
  • github
    .icon-github
  • gitlab
    .icon-gitlab
  • gittip
    .icon-gittip
  • glass
    .icon-glass
  • glide-g
    .icon-glide-g
  • glide
    .icon-glide
  • globe
    .icon-globe
  • google-plus-circle
    .icon-google-plus-circle
  • google-plus-official
    .icon-google-plus-official
  • google-plus-square
    .icon-google-plus-square
  • google-plus
    .icon-google-plus
  • google-wallet
    .icon-google-wallet
  • google
    .icon-google
  • graduation-cap
    .icon-graduation-cap
  • gratipay
    .icon-gratipay
  • grav
    .icon-grav
  • group
    .icon-group
  • h-square
    .icon-h-square
  • hacker-news
    .icon-hacker-news
  • hand-grab-o
    .icon-hand-grab-o
  • hand-o-left
    .icon-hand-o-left
  • hand-lizard-o
    .icon-hand-lizard-o
  • hand-o-down
    .icon-hand-o-down
  • hand-o-right
    .icon-hand-o-right
  • hand-o-up
    .icon-hand-o-up
  • hand-paper-o
    .icon-hand-paper-o
  • hand-pointer-o
    .icon-hand-pointer-o
  • hand-peace-o
    .icon-hand-peace-o
  • hand-spock-o
    .icon-hand-spock-o
  • hand-rock-o
    .icon-hand-rock-o
  • hand-scissors-o
    .icon-hand-scissors-o
  • hand-stop-o
    .icon-hand-stop-o
  • hard-of-hearing
    .icon-hard-of-hearing
  • handshake-o
    .icon-handshake-o
  • hashtag
    .icon-hashtag
  • headphones
    .icon-headphones
  • header
    .icon-header
  • hdd-o
    .icon-hdd-o
  • heart-o
    .icon-heart-o
  • heart
    .icon-heart
  • hotel
    .icon-hotel
  • heartbeat
    .icon-heartbeat
  • hourglass-1
    .icon-hourglass-1
  • home
    .icon-home
  • history
    .icon-history
  • hourglass-2
    .icon-hourglass-2
  • hospital-o
    .icon-hospital-o
  • hourglass-3
    .icon-hourglass-3
  • hourglass-half
    .icon-hourglass-half
  • hourglass-end
    .icon-hourglass-end
  • hourglass-o
    .icon-hourglass-o
  • hourglass-start
    .icon-hourglass-start
  • houzz
    .icon-houzz
  • html5
    .icon-html5
  • hourglass
    .icon-hourglass
  • id-badge
    .icon-id-badge
  • i-cursor
    .icon-i-cursor
  • id-card
    .icon-id-card
  • ils
    .icon-ils
  • id-card-o
    .icon-id-card-o
  • image
    .icon-image
  • inbox
    .icon-inbox
  • indent
    .icon-indent
  • industry
    .icon-industry
  • imdb
    .icon-imdb
  • info
    .icon-info
  • institution
    .icon-institution
  • info-circle
    .icon-info-circle
  • internet-explorer
    .icon-internet-explorer
  • inr
    .icon-inr
  • instagram
    .icon-instagram
  • ioxhost
    .icon-ioxhost
  • joomla
    .icon-joomla
  • jpy
    .icon-jpy
  • intersex
    .icon-intersex
  • jsfiddle
    .icon-jsfiddle
  • italic
    .icon-italic
  • key
    .icon-key
  • keyboard-o
    .icon-keyboard-o
  • krw
    .icon-krw
  • laptop
    .icon-laptop
  • language
    .icon-language
  • leaf
    .icon-leaf
  • lastfm
    .icon-lastfm
  • lastfm-square
    .icon-lastfm-square
  • legal
    .icon-legal
  • leanpub
    .icon-leanpub
  • level-down
    .icon-level-down
  • level-up
    .icon-level-up
  • life-ring
    .icon-life-ring
  • life-buoy
    .icon-life-buoy
  • life-bouy
    .icon-life-bouy
  • lemon-o
    .icon-lemon-o
  • lightbulb-o
    .icon-lightbulb-o
  • life-saver
    .icon-life-saver
  • line-chart
    .icon-line-chart
  • linkedin
    .icon-linkedin
  • linkedin-square
    .icon-linkedin-square
  • link
    .icon-link
  • linode
    .icon-linode
  • list
    .icon-list
  • list-ul
    .icon-list-ul
  • linux
    .icon-linux
  • list-ol
    .icon-list-ol
  • list-alt
    .icon-list-alt
  • location-arrow
    .icon-location-arrow
  • lock
    .icon-lock
  • long-arrow-up
    .icon-long-arrow-up
  • long-arrow-right
    .icon-long-arrow-right
  • long-arrow-left
    .icon-long-arrow-left
  • long-arrow-down
    .icon-long-arrow-down
  • magic
    .icon-magic
  • magnet
    .icon-magnet
  • low-vision
    .icon-low-vision
  • mail-reply-all
    .icon-mail-reply-all
  • mail-reply
    .icon-mail-reply
  • mail-forward
    .icon-mail-forward
  • male
    .icon-male
  • map-pin
    .icon-map-pin
  • map-o
    .icon-map-o
  • map-marker
    .icon-map-marker
  • map
    .icon-map
  • map-signs
    .icon-map-signs
  • mars-stroke-h
    .icon-mars-stroke-h
  • mars-stroke
    .icon-mars-stroke
  • mars-stroke-v
    .icon-mars-stroke-v
  • mars-double
    .icon-mars-double
  • mars
    .icon-mars
  • maxcdn
    .icon-maxcdn
  • medium
    .icon-medium
  • medkit
    .icon-medkit
  • meanpath
    .icon-meanpath
  • meetup
    .icon-meetup
  • meh-o
    .icon-meh-o
  • mercury
    .icon-mercury
  • microphone
    .icon-microphone
  • minus-circle
    .icon-minus-circle
  • minus-square
    .icon-minus-square
  • minus-square-o
    .icon-minus-square-o
  • microchip
    .icon-microchip
  • microphone-slash
    .icon-microphone-slash
  • minus
    .icon-minus
  • mixcloud
    .icon-mixcloud
  • mobile
    .icon-mobile
  • modx
    .icon-modx
  • money
    .icon-money
  • moon-o
    .icon-moon-o
  • motorcycle
    .icon-motorcycle
  • mouse-pointer
    .icon-mouse-pointer
  • mortar-board
    .icon-mortar-board
  • navicon
    .icon-navicon
  • neuter
    .icon-neuter
  • music
    .icon-music
  • object-group
    .icon-object-group
  • newspaper-o
    .icon-newspaper-o
  • object-ungroup
    .icon-object-ungroup
  • odnoklassniki-square
    .icon-odnoklassniki-square
  • odnoklassniki
    .icon-odnoklassniki
  • opencart
    .icon-opencart
  • openid
    .icon-openid
  • opera
    .icon-opera
  • paper-plane-o
    .icon-paper-plane-o
  • pagelines
    .icon-pagelines
  • outdent
    .icon-outdent
  • paper-plane
    .icon-paper-plane
  • paint-brush
    .icon-paint-brush
  • paragraph
    .icon-paragraph
  • paperclip
    .icon-paperclip
  • optin-monster
    .icon-optin-monster
  • pause-circle-o
    .icon-pause-circle-o
  • paste
    .icon-paste
  • pause
    .icon-pause
  • pause-circle
    .icon-pause-circle
  • paw
    .icon-paw
  • paypal
    .icon-paypal
  • pencil-square-o
    .icon-pencil-square-o
  • percent
    .icon-percent
  • pencil-square
    .icon-pencil-square
  • pencil
    .icon-pencil
  • phone-square
    .icon-phone-square
  • phone
    .icon-phone
  • photo
    .icon-photo
  • picture-o
    .icon-picture-o
  • pie-chart
    .icon-pie-chart
  • pied-piper-pp
    .icon-pied-piper-pp
  • pied-piper-alt
    .icon-pied-piper-alt
  • pinterest-p
    .icon-pinterest-p
  • plane
    .icon-plane
  • play-circle-o
    .icon-play-circle-o
  • pied-piper
    .icon-pied-piper
  • pinterest
    .icon-pinterest
  • pinterest-square
    .icon-pinterest-square
  • play
    .icon-play
  • play-circle
    .icon-play-circle
  • plug
    .icon-plug
  • plus-square-o
    .icon-plus-square-o
  • plus-square
    .icon-plus-square
  • plus-circle
    .icon-plus-circle
  • plus
    .icon-plus
  • product-hunt
    .icon-product-hunt
  • print
    .icon-print
  • puzzle-piece
    .icon-puzzle-piece
  • podcast
    .icon-podcast
  • power-off
    .icon-power-off
  • qq
    .icon-qq
  • question
    .icon-question
  • qrcode
    .icon-qrcode
  • quora
    .icon-quora
  • question-circle-o
    .icon-question-circle-o
  • question-circle
    .icon-question-circle
  • quote-left
    .icon-quote-left
  • quote-right
    .icon-quote-right
  • ra
    .icon-ra
  • ravelry
    .icon-ravelry
  • rebel
    .icon-rebel
  • random
    .icon-random
  • reddit-square
    .icon-reddit-square
  • reddit-alien
    .icon-reddit-alien
  • recycle
    .icon-recycle
  • reddit
    .icon-reddit
  • registered
    .icon-registered
  • refresh
    .icon-refresh
  • renren
    .icon-renren
  • reorder
    .icon-reorder
  • repeat
    .icon-repeat
  • reply-all
    .icon-reply-all
  • remove
    .icon-remove
  • rmb
    .icon-rmb
  • resistance
    .icon-resistance
  • road
    .icon-road
  • retweet
    .icon-retweet
  • reply
    .icon-reply
  • rocket
    .icon-rocket
  • rotate-left
    .icon-rotate-left
  • rouble
    .icon-rouble
  • rotate-right
    .icon-rotate-right
  • rss
    .icon-rss
  • rss-square
    .icon-rss-square
  • ruble
    .icon-ruble
  • rub
    .icon-rub
  • s15
    .icon-s15
  • save
    .icon-save
  • rupee
    .icon-rupee
  • safari
    .icon-safari
  • scissors
    .icon-scissors
  • scribd
    .icon-scribd
  • search-plus
    .icon-search-plus
  • search
    .icon-search
  • sellsy
    .icon-sellsy
  • send
    .icon-send
  • send-o
    .icon-send-o
  • search-minus
    .icon-search-minus
  • server
    .icon-server
  • share-alt-square
    .icon-share-alt-square
  • share-alt
    .icon-share-alt
  • share-square-o
    .icon-share-square-o
  • share
    .icon-share
  • share-square
    .icon-share-square
  • shekel
    .icon-shekel
  • sheqel
    .icon-sheqel
  • shield
    .icon-shield
  • ship
    .icon-ship
  • shirtsinbulk
    .icon-shirtsinbulk
  • shower
    .icon-shower
  • sign-in
    .icon-sign-in
  • shopping-basket
    .icon-shopping-basket
  • shopping-cart
    .icon-shopping-cart
  • shopping-bag
    .icon-shopping-bag
  • sign-language
    .icon-sign-language
  • sign-out
    .icon-sign-out
  • signal
    .icon-signal
  • simplybuilt
    .icon-simplybuilt
  • sitemap
    .icon-sitemap
  • signing
    .icon-signing
  • sliders
    .icon-sliders
  • skype
    .icon-skype
  • skyatlas
    .icon-skyatlas
  • slack
    .icon-slack
  • slideshare
    .icon-slideshare
  • snapchat-square
    .icon-snapchat-square
  • snapchat-ghost
    .icon-snapchat-ghost
  • smile-o
    .icon-smile-o
  • snapchat
    .icon-snapchat
  • snowflake-o
    .icon-snowflake-o
  • soccer-ball-o
    .icon-soccer-ball-o
  • sort-alpha-asc
    .icon-sort-alpha-asc
  • sort-alpha-desc
    .icon-sort-alpha-desc
  • sort-amount-asc
    .icon-sort-amount-asc
  • sort-desc
    .icon-sort-desc
  • sort-down
    .icon-sort-down
  • sort-numeric-asc
    .icon-sort-numeric-asc
  • sort-asc
    .icon-sort-asc
  • sort-amount-desc
    .icon-sort-amount-desc
  • sort-numeric-desc
    .icon-sort-numeric-desc
  • sort-up
    .icon-sort-up
  • sort
    .icon-sort
  • soundcloud
    .icon-soundcloud
  • space-shuttle
    .icon-space-shuttle
  • spinner
    .icon-spinner
  • spoon
    .icon-spoon
  • square-o
    .icon-square-o
  • spotify
    .icon-spotify
  • square
    .icon-square
  • stack-exchange
    .icon-stack-exchange
  • star-half-empty
    .icon-star-half-empty
  • stack-overflow
    .icon-stack-overflow
  • star-half
    .icon-star-half
  • star
    .icon-star
  • star-half-o
    .icon-star-half-o
  • star-o
    .icon-star-o
  • star-half-full
    .icon-star-half-full
  • sticky-note-o
    .icon-sticky-note-o
  • step-forward
    .icon-step-forward
  • steam
    .icon-steam
  • steam-square
    .icon-steam-square
  • stethoscope
    .icon-stethoscope
  • step-backward
    .icon-step-backward
  • stop
    .icon-stop
  • stop-circle
    .icon-stop-circle
  • stop-circle-o
    .icon-stop-circle-o
  • sticky-note
    .icon-sticky-note
  • street-view
    .icon-street-view
  • strikethrough
    .icon-strikethrough
  • stumbleupon
    .icon-stumbleupon
  • subway
    .icon-subway
  • stumbleupon-circle
    .icon-stumbleupon-circle
  • suitcase
    .icon-suitcase
  • subscript
    .icon-subscript
  • sun-o
    .icon-sun-o
  • superpowers
    .icon-superpowers
  • tablet
    .icon-tablet
  • table
    .icon-table
  • support
    .icon-support
  • superscript
    .icon-superscript
  • tasks
    .icon-tasks
  • tags
    .icon-tags
  • tag
    .icon-tag
  • tachometer
    .icon-tachometer
  • telegram
    .icon-telegram
  • taxi
    .icon-taxi
  • terminal
    .icon-terminal
  • tencent-weibo
    .icon-tencent-weibo
  • television
    .icon-television
  • text-height
    .icon-text-height
  • text-width
    .icon-text-width
  • th-large
    .icon-th-large
  • th-list
    .icon-th-list
  • thermometer-0
    .icon-thermometer-0
  • th
    .icon-th
  • themeisle
    .icon-themeisle
  • thermometer-1
    .icon-thermometer-1
  • thermometer-2
    .icon-thermometer-2
  • thermometer-3
    .icon-thermometer-3
  • thermometer-4
    .icon-thermometer-4
  • thermometer-empty
    .icon-thermometer-empty
  • thermometer-full
    .icon-thermometer-full
  • thermometer-half
    .icon-thermometer-half
  • thumb-tack
    .icon-thumb-tack
  • thermometer-three-quarters
    .icon-thermometer-three-quarters
  • thermometer-quarter
    .icon-thermometer-quarter
  • thermometer
    .icon-thermometer
  • thumbs-down
    .icon-thumbs-down
  • times-circle
    .icon-times-circle
  • thumbs-up
    .icon-thumbs-up
  • ticket
    .icon-ticket
  • thumbs-o-down
    .icon-thumbs-o-down
  • thumbs-o-up
    .icon-thumbs-o-up
  • times-circle-o
    .icon-times-circle-o
  • times-rectangle-o
    .icon-times-rectangle-o
  • times-rectangle
    .icon-times-rectangle
  • times
    .icon-times
  • tint
    .icon-tint
  • toggle-left
    .icon-toggle-left
  • toggle-down
    .icon-toggle-down
  • toggle-off
    .icon-toggle-off
  • toggle-right
    .icon-toggle-right
  • toggle-on
    .icon-toggle-on
  • toggle-up
    .icon-toggle-up
  • transgender-alt
    .icon-transgender-alt
  • trademark
    .icon-trademark
  • train
    .icon-train
  • trash-o
    .icon-trash-o
  • trash
    .icon-trash
  • transgender
    .icon-transgender
  • tree
    .icon-tree
  • try
    .icon-try
  • trello
    .icon-trello
  • trophy
    .icon-trophy
  • tty
    .icon-tty
  • truck
    .icon-truck
  • tripadvisor
    .icon-tripadvisor
  • tumblr-square
    .icon-tumblr-square
  • turkish-lira
    .icon-turkish-lira
  • tumblr
    .icon-tumblr
  • tv
    .icon-tv
  • twitter
    .icon-twitter
  • twitter-square
    .icon-twitter-square
  • twitch
    .icon-twitch
  • underline
    .icon-underline
  • umbrella
    .icon-umbrella
  • undo
    .icon-undo
  • unlink
    .icon-unlink
  • university
    .icon-university
  • universal-access
    .icon-universal-access
  • unlock-alt
    .icon-unlock-alt
  • unlock
    .icon-unlock
  • upload
    .icon-upload
  • unsorted
    .icon-unsorted
  • usd
    .icon-usd
  • usb
    .icon-usb
  • user-circle
    .icon-user-circle
  • user-o
    .icon-user-o
  • user-circle-o
    .icon-user-circle-o
  • user-plus
    .icon-user-plus
  • user-md
    .icon-user-md
  • user-secret
    .icon-user-secret
  • user
    .icon-user
  • user-times
    .icon-user-times
  • users
    .icon-users
  • vcard-o
    .icon-vcard-o
  • vcard
    .icon-vcard
  • venus
    .icon-venus
  • venus-mars
    .icon-venus-mars
  • venus-double
    .icon-venus-double
  • viadeo-square
    .icon-viadeo-square
  • viacoin
    .icon-viacoin
  • viadeo
    .icon-viadeo
  • video-camera
    .icon-video-camera
  • vimeo-square
    .icon-vimeo-square
  • vine
    .icon-vine
  • vimeo
    .icon-vimeo
  • vk
    .icon-vk
  • volume-control-phone
    .icon-volume-control-phone
  • volume-off
    .icon-volume-off
  • volume-down
    .icon-volume-down
  • warning
    .icon-warning
  • volume-up
    .icon-volume-up
  • wechat
    .icon-wechat
  • weibo
    .icon-weibo
  • whatsapp
    .icon-whatsapp
  • weixin
    .icon-weixin
  • wheelchair-alt
    .icon-wheelchair-alt
  • wheelchair
    .icon-wheelchair
  • wikipedia-w
    .icon-wikipedia-w
  • wifi
    .icon-wifi
  • window-close
    .icon-window-close
  • window-close-o
    .icon-window-close-o
  • window-maximize
    .icon-window-maximize
  • window-minimize
    .icon-window-minimize
  • window-restore
    .icon-window-restore
  • windows
    .icon-windows
  • won
    .icon-won
  • wordpress
    .icon-wordpress
  • wpexplorer
    .icon-wpexplorer
  • wpbeginner
    .icon-wpbeginner
  • xing-square
    .icon-xing-square
  • wrench
    .icon-wrench
  • wpforms
    .icon-wpforms
  • y-combinator
    .icon-y-combinator
  • xing
    .icon-xing
  • y-combinator-square
    .icon-y-combinator-square
  • yahoo
    .icon-yahoo
  • yc
    .icon-yc
  • yc-square
    .icon-yc-square
  • yen
    .icon-yen
  • yelp
    .icon-yelp
  • yoast
    .icon-yoast
  • youtube-play
    .icon-youtube-play
  • youtube-square
    .icon-youtube-square
  • youtube
    .icon-youtube

font-class 引用


font-class 是 Unicode 使用方式的一种变种,主要是解决 Unicode 书写不直观,语意不明确的问题。

与 Unicode 使用方式相比,具有如下特点:

  • 兼容性良好,支持 IE8+,及所有现代浏览器。
  • 相比于 Unicode 语意明确,书写更直观。可以很容易分辨这个 icon 是什么。
  • 因为使用 class 来定义图标,所以当要替换图标时,只需要修改 class 里面的 Unicode 引用。
  • 不过因为本质上还是使用的字体,所以多色图标还是不支持的。

使用步骤如下:

第一步:引入项目下面生成的 fontclass 代码:

<link rel="stylesheet" href="./iconfont.css">

第二步:挑选相应图标并获取类名,应用于页面:

<span class="iconfont icon-xxx"></span>

" iconfont" 是你项目下的 font-family。可以通过编辑项目查看,默认是 "iconfont"。

  • bars
    #icon-bars
  • calendar
    #icon-calendar
  • camera
    #icon-camera
  • check
    #icon-check
  • check-square-o
    #icon-check-square-o
  • clock-o
    #icon-clock-o
  • 500px
    #icon-500px
  • address-book-o
    #icon-address-book-o
  • address-book
    #icon-address-book
  • address-card-o
    #icon-address-card-o
  • address-card
    #icon-address-card
  • adjust
    #icon-adjust
  • adn
    #icon-adn
  • align-center
    #icon-align-center
  • align-justify
    #icon-align-justify
  • align-left
    #icon-align-left
  • align-right
    #icon-align-right
  • amazon
    #icon-amazon
  • ambulance
    #icon-ambulance
  • american-sign-language-interpreting
    #icon-american-sign-language-interpreting
  • anchor
    #icon-anchor
  • android
    #icon-android
  • angellist
    #icon-angellist
  • angle-double-down
    #icon-angle-double-down
  • angle-double-left
    #icon-angle-double-left
  • angle-double-right
    #icon-angle-double-right
  • angle-double-up
    #icon-angle-double-up
  • angle-down
    #icon-angle-down
  • angle-left
    #icon-angle-left
  • angle-right
    #icon-angle-right
  • angle-up
    #icon-angle-up
  • apple
    #icon-apple
  • archive
    #icon-archive
  • area-chart
    #icon-area-chart
  • arrow-circle-down
    #icon-arrow-circle-down
  • arrow-circle-left
    #icon-arrow-circle-left
  • arrow-circle-o-down
    #icon-arrow-circle-o-down
  • arrow-circle-o-left
    #icon-arrow-circle-o-left
  • arrow-circle-o-right
    #icon-arrow-circle-o-right
  • arrow-circle-o-up
    #icon-arrow-circle-o-up
  • arrow-circle-right
    #icon-arrow-circle-right
  • arrow-circle-up
    #icon-arrow-circle-up
  • arrow-down
    #icon-arrow-down
  • arrow-left
    #icon-arrow-left
  • arrow-right
    #icon-arrow-right
  • arrow-up
    #icon-arrow-up
  • arrows-alt
    #icon-arrows-alt
  • arrows-h
    #icon-arrows-h
  • arrows-v
    #icon-arrows-v
  • arrows
    #icon-arrows
  • asl-interpreting
    #icon-asl-interpreting
  • assistive-listening-systems
    #icon-assistive-listening-systems
  • asterisk
    #icon-asterisk
  • at
    #icon-at
  • audio-description
    #icon-audio-description
  • automobile
    #icon-automobile
  • backward
    #icon-backward
  • balance-scale
    #icon-balance-scale
  • bandcamp
    #icon-bandcamp
  • bank
    #icon-bank
  • bars
    #icon-bars1
  • bar-chart
    #icon-bar-chart
  • bar-chart-o
    #icon-bar-chart-o
  • bathtub
    #icon-bathtub
  • barcode
    #icon-barcode
  • bath
    #icon-bath
  • battery-0
    #icon-battery-0
  • battery-1
    #icon-battery-1
  • battery-2
    #icon-battery-2
  • battery-4
    #icon-battery-4
  • battery-3
    #icon-battery-3
  • battery-half
    #icon-battery-half
  • battery-empty
    #icon-battery-empty
  • battery-full
    #icon-battery-full
  • battery-quarter
    #icon-battery-quarter
  • battery-three-quarters
    #icon-battery-three-quarters
  • battery
    #icon-battery
  • beer
    #icon-beer
  • bed
    #icon-bed
  • behance
    #icon-behance
  • behance-square
    #icon-behance-square
  • bell-o
    #icon-bell-o
  • bell-slash-o
    #icon-bell-slash-o
  • bell-slash
    #icon-bell-slash
  • bicycle
    #icon-bicycle
  • bitbucket-square
    #icon-bitbucket-square
  • binoculars
    #icon-binoculars
  • bell
    #icon-bell
  • birthday-cake
    #icon-birthday-cake
  • bitbucket
    #icon-bitbucket
  • black-tie
    #icon-black-tie
  • bluetooth-b
    #icon-bluetooth-b
  • bitcoin
    #icon-bitcoin
  • blind
    #icon-blind
  • bluetooth
    #icon-bluetooth
  • bold
    #icon-bold
  • bolt
    #icon-bolt
  • bomb
    #icon-bomb
  • book
    #icon-book
  • bug
    #icon-bug
  • bookmark-o
    #icon-bookmark-o
  • btc
    #icon-btc
  • bookmark
    #icon-bookmark
  • briefcase
    #icon-briefcase
  • braille
    #icon-braille
  • bullhorn
    #icon-bullhorn
  • bullseye
    #icon-bullseye
  • bus
    #icon-bus
  • building
    #icon-building
  • cab
    #icon-cab
  • buysellads
    #icon-buysellads
  • building-o
    #icon-building-o
  • calendar-plus-o
    #icon-calendar-plus-o
  • calendar-o
    #icon-calendar-o
  • calendar-times-o
    #icon-calendar-times-o
  • calendar-check-o
    #icon-calendar-check-o
  • calendar-minus-o
    #icon-calendar-minus-o
  • calculator
    #icon-calculator
  • caret-down
    #icon-caret-down
  • caret-left
    #icon-caret-left
  • car
    #icon-car
  • camera-retro
    #icon-camera-retro
  • caret-right
    #icon-caret-right
  • caret-square-o-left
    #icon-caret-square-o-left
  • caret-square-o-right
    #icon-caret-square-o-right
  • caret-up
    #icon-caret-up
  • caret-square-o-up
    #icon-caret-square-o-up
  • cart-plus
    #icon-cart-plus
  • cart-arrow-down
    #icon-cart-arrow-down
  • caret-square-o-down
    #icon-caret-square-o-down
  • cc-discover
    #icon-cc-discover
  • cc-diners-club
    #icon-cc-diners-club
  • cc-paypal
    #icon-cc-paypal
  • cc-jcb
    #icon-cc-jcb
  • cc-mastercard
    #icon-cc-mastercard
  • cc-amex
    #icon-cc-amex
  • cc
    #icon-cc
  • cc-visa
    #icon-cc-visa
  • cc-stripe
    #icon-cc-stripe
  • check
    #icon-check1
  • certificate
    #icon-certificate
  • check-circle
    #icon-check-circle
  • check-circle-o
    #icon-check-circle-o
  • chain-broken
    #icon-chain-broken
  • chain
    #icon-chain
  • chevron-circle-down
    #icon-chevron-circle-down
  • chevron-circle-left
    #icon-chevron-circle-left
  • chevron-circle-right
    #icon-chevron-circle-right
  • chevron-down
    #icon-chevron-down
  • chevron-circle-up
    #icon-chevron-circle-up
  • chevron-left
    #icon-chevron-left
  • chevron-right
    #icon-chevron-right
  • chevron-up
    #icon-chevron-up
  • child
    #icon-child
  • circle-thin
    #icon-circle-thin
  • circle-o-notch
    #icon-circle-o-notch
  • chrome
    #icon-chrome
  • circle-o
    #icon-circle-o
  • clipboard
    #icon-clipboard
  • circle
    #icon-circle
  • cloud
    #icon-cloud
  • close
    #icon-close
  • cloud-upload
    #icon-cloud-upload
  • clone
    #icon-clone
  • cloud-download
    #icon-cloud-download
  • clock-o
    #icon-clock-o1
  • cny
    #icon-cny
  • code-fork
    #icon-code-fork
  • codiepie
    #icon-codiepie
  • codepen
    #icon-codepen
  • code
    #icon-code
  • cog
    #icon-cog
  • coffee
    #icon-coffee
  • columns
    #icon-columns
  • comment-o
    #icon-comment-o
  • commenting-o
    #icon-commenting-o
  • commenting
    #icon-commenting
  • comment
    #icon-comment
  • cogs
    #icon-cogs
  • compass
    #icon-compass
  • compress
    #icon-compress
  • comments
    #icon-comments
  • comments-o
    #icon-comments-o
  • connectdevelop
    #icon-connectdevelop
  • copy
    #icon-copy
  • contao
    #icon-contao
  • copyright
    #icon-copyright
  • credit-card-alt
    #icon-credit-card-alt
  • credit-card
    #icon-credit-card
  • crop
    #icon-crop
  • creative-commons
    #icon-creative-commons
  • crosshairs
    #icon-crosshairs
  • css3
    #icon-css3
  • cube
    #icon-cube
  • cutlery
    #icon-cutlery
  • cut
    #icon-cut
  • dashboard
    #icon-dashboard
  • dashcube
    #icon-dashcube
  • cubes
    #icon-cubes
  • database
    #icon-database
  • deaf
    #icon-deaf
  • delicious
    #icon-delicious
  • deviantart
    #icon-deviantart
  • diamond
    #icon-diamond
  • dedent
    #icon-dedent
  • desktop
    #icon-desktop
  • deafness
    #icon-deafness
  • drivers-license-o
    #icon-drivers-license-o
  • digg
    #icon-digg
  • dribbble
    #icon-dribbble
  • download
    #icon-download
  • dollar
    #icon-dollar
  • dot-circle-o
    #icon-dot-circle-o
  • edit
    #icon-edit
  • dropbox
    #icon-dropbox
  • edge
    #icon-edge
  • drupal
    #icon-drupal
  • drivers-license
    #icon-drivers-license
  • eject
    #icon-eject
  • ellipsis-h
    #icon-ellipsis-h
  • envelope-o
    #icon-envelope-o
  • ellipsis-v
    #icon-ellipsis-v
  • eercast
    #icon-eercast
  • empire
    #icon-empire
  • envelope-open-o
    #icon-envelope-open-o
  • envelope-open
    #icon-envelope-open
  • envelope
    #icon-envelope
  • envelope-square
    #icon-envelope-square
  • envira
    #icon-envira
  • etsy
    #icon-etsy
  • eraser
    #icon-eraser
  • eur
    #icon-eur
  • euro
    #icon-euro
  • exchange
    #icon-exchange
  • exclamation-triangle
    #icon-exclamation-triangle
  • expand
    #icon-expand
  • exclamation
    #icon-exclamation
  • exclamation-circle
    #icon-exclamation-circle
  • expeditedssl
    #icon-expeditedssl
  • external-link-square
    #icon-external-link-square
  • eyedropper
    #icon-eyedropper
  • external-link
    #icon-external-link
  • eye
    #icon-eye
  • eye-slash
    #icon-eye-slash
  • fa
    #icon-fa
  • facebook-official
    #icon-facebook-official
  • facebook-f
    #icon-facebook-f
  • facebook-square
    #icon-facebook-square
  • facebook
    #icon-facebook
  • fast-backward
    #icon-fast-backward
  • fast-forward
    #icon-fast-forward
  • feed
    #icon-feed
  • file-archive-o
    #icon-file-archive-o
  • female
    #icon-female
  • file-audio-o
    #icon-file-audio-o
  • fighter-jet
    #icon-fighter-jet
  • fax
    #icon-fax
  • file-code-o
    #icon-file-code-o
  • file-movie-o
    #icon-file-movie-o
  • file-image-o
    #icon-file-image-o
  • file-excel-o
    #icon-file-excel-o
  • file-o
    #icon-file-o
  • file-photo-o
    #icon-file-photo-o
  • file-pdf-o
    #icon-file-pdf-o
  • file-picture-o
    #icon-file-picture-o
  • file-sound-o
    #icon-file-sound-o
  • file-powerpoint-o
    #icon-file-powerpoint-o
  • file-text
    #icon-file-text
  • file-text-o
    #icon-file-text-o
  • file
    #icon-file
  • file-video-o
    #icon-file-video-o
  • files-o
    #icon-files-o
  • file-zip-o
    #icon-file-zip-o
  • file-word-o
    #icon-file-word-o
  • film
    #icon-film
  • filter
    #icon-filter
  • fire
    #icon-fire
  • fire-extinguisher
    #icon-fire-extinguisher
  • flag-checkered
    #icon-flag-checkered
  • firefox
    #icon-firefox
  • first-order
    #icon-first-order
  • flash
    #icon-flash
  • flag
    #icon-flag
  • flag-o
    #icon-flag-o
  • flask
    #icon-flask
  • flickr
    #icon-flickr
  • folder-open
    #icon-folder-open
  • folder-o
    #icon-folder-o
  • font-awesome
    #icon-font-awesome
  • folder
    #icon-folder
  • floppy-o
    #icon-floppy-o
  • folder-open-o
    #icon-folder-open-o
  • fonticons
    #icon-fonticons
  • font
    #icon-font
  • forumbee
    #icon-forumbee
  • fort-awesome
    #icon-fort-awesome
  • forward
    #icon-forward
  • foursquare
    #icon-foursquare
  • free-code-camp
    #icon-free-code-camp
  • frown-o
    #icon-frown-o
  • futbol-o
    #icon-futbol-o
  • gamepad
    #icon-gamepad
  • gavel
    #icon-gavel
  • gbp
    #icon-gbp
  • ge
    #icon-ge
  • gear
    #icon-gear
  • gears
    #icon-gears
  • genderless
    #icon-genderless
  • get-pocket
    #icon-get-pocket
  • gg-circle
    #icon-gg-circle
  • gift
    #icon-gift
  • gg
    #icon-gg
  • git-square
    #icon-git-square
  • git
    #icon-git
  • github-alt
    #icon-github-alt
  • github-square
    #icon-github-square
  • github
    #icon-github
  • gitlab
    #icon-gitlab
  • gittip
    #icon-gittip
  • glass
    #icon-glass
  • glide-g
    #icon-glide-g
  • glide
    #icon-glide
  • globe
    #icon-globe
  • google-plus-circle
    #icon-google-plus-circle
  • google-plus-official
    #icon-google-plus-official
  • google-plus-square
    #icon-google-plus-square
  • google-plus
    #icon-google-plus
  • google-wallet
    #icon-google-wallet
  • google
    #icon-google
  • graduation-cap
    #icon-graduation-cap
  • gratipay
    #icon-gratipay
  • grav
    #icon-grav
  • group
    #icon-group
  • h-square
    #icon-h-square
  • hacker-news
    #icon-hacker-news
  • hand-grab-o
    #icon-hand-grab-o
  • hand-o-left
    #icon-hand-o-left
  • hand-lizard-o
    #icon-hand-lizard-o
  • hand-o-down
    #icon-hand-o-down
  • hand-o-right
    #icon-hand-o-right
  • hand-o-up
    #icon-hand-o-up
  • hand-paper-o
    #icon-hand-paper-o
  • hand-pointer-o
    #icon-hand-pointer-o
  • hand-peace-o
    #icon-hand-peace-o
  • hand-spock-o
    #icon-hand-spock-o
  • hand-rock-o
    #icon-hand-rock-o
  • hand-scissors-o
    #icon-hand-scissors-o
  • hand-stop-o
    #icon-hand-stop-o
  • hard-of-hearing
    #icon-hard-of-hearing
  • handshake-o
    #icon-handshake-o
  • hashtag
    #icon-hashtag
  • headphones
    #icon-headphones
  • header
    #icon-header
  • hdd-o
    #icon-hdd-o
  • heart-o
    #icon-heart-o
  • heart
    #icon-heart
  • hotel
    #icon-hotel
  • heartbeat
    #icon-heartbeat
  • hourglass-1
    #icon-hourglass-1
  • home
    #icon-home
  • history
    #icon-history
  • hourglass-2
    #icon-hourglass-2
  • hospital-o
    #icon-hospital-o
  • hourglass-3
    #icon-hourglass-3
  • hourglass-half
    #icon-hourglass-half
  • hourglass-end
    #icon-hourglass-end
  • hourglass-o
    #icon-hourglass-o
  • hourglass-start
    #icon-hourglass-start
  • houzz
    #icon-houzz
  • html5
    #icon-html5
  • hourglass
    #icon-hourglass
  • id-badge
    #icon-id-badge
  • i-cursor
    #icon-i-cursor
  • id-card
    #icon-id-card
  • ils
    #icon-ils
  • id-card-o
    #icon-id-card-o
  • image
    #icon-image
  • inbox
    #icon-inbox
  • indent
    #icon-indent
  • industry
    #icon-industry
  • imdb
    #icon-imdb
  • info
    #icon-info
  • institution
    #icon-institution
  • info-circle
    #icon-info-circle
  • internet-explorer
    #icon-internet-explorer
  • inr
    #icon-inr
  • instagram
    #icon-instagram
  • ioxhost
    #icon-ioxhost
  • joomla
    #icon-joomla
  • jpy
    #icon-jpy
  • intersex
    #icon-intersex
  • jsfiddle
    #icon-jsfiddle
  • italic
    #icon-italic
  • key
    #icon-key
  • keyboard-o
    #icon-keyboard-o
  • krw
    #icon-krw
  • laptop
    #icon-laptop
  • language
    #icon-language
  • leaf
    #icon-leaf
  • lastfm
    #icon-lastfm
  • lastfm-square
    #icon-lastfm-square
  • legal
    #icon-legal
  • leanpub
    #icon-leanpub
  • level-down
    #icon-level-down
  • level-up
    #icon-level-up
  • life-ring
    #icon-life-ring
  • life-buoy
    #icon-life-buoy
  • life-bouy
    #icon-life-bouy
  • lemon-o
    #icon-lemon-o
  • lightbulb-o
    #icon-lightbulb-o
  • life-saver
    #icon-life-saver
  • line-chart
    #icon-line-chart
  • linkedin
    #icon-linkedin
  • linkedin-square
    #icon-linkedin-square
  • link
    #icon-link
  • linode
    #icon-linode
  • list
    #icon-list
  • list-ul
    #icon-list-ul
  • linux
    #icon-linux
  • list-ol
    #icon-list-ol
  • list-alt
    #icon-list-alt
  • location-arrow
    #icon-location-arrow
  • lock
    #icon-lock
  • long-arrow-up
    #icon-long-arrow-up
  • long-arrow-right
    #icon-long-arrow-right
  • long-arrow-left
    #icon-long-arrow-left
  • long-arrow-down
    #icon-long-arrow-down
  • magic
    #icon-magic
  • magnet
    #icon-magnet
  • low-vision
    #icon-low-vision
  • mail-reply-all
    #icon-mail-reply-all
  • mail-reply
    #icon-mail-reply
  • mail-forward
    #icon-mail-forward
  • male
    #icon-male
  • map-pin
    #icon-map-pin
  • map-o
    #icon-map-o
  • map-marker
    #icon-map-marker
  • map
    #icon-map
  • map-signs
    #icon-map-signs
  • mars-stroke-h
    #icon-mars-stroke-h
  • mars-stroke
    #icon-mars-stroke
  • mars-stroke-v
    #icon-mars-stroke-v
  • mars-double
    #icon-mars-double
  • mars
    #icon-mars
  • maxcdn
    #icon-maxcdn
  • medium
    #icon-medium
  • medkit
    #icon-medkit
  • meanpath
    #icon-meanpath
  • meetup
    #icon-meetup
  • meh-o
    #icon-meh-o
  • mercury
    #icon-mercury
  • microphone
    #icon-microphone
  • minus-circle
    #icon-minus-circle
  • minus-square
    #icon-minus-square
  • minus-square-o
    #icon-minus-square-o
  • microchip
    #icon-microchip
  • microphone-slash
    #icon-microphone-slash
  • minus
    #icon-minus
  • mixcloud
    #icon-mixcloud
  • mobile
    #icon-mobile
  • modx
    #icon-modx
  • money
    #icon-money
  • moon-o
    #icon-moon-o
  • motorcycle
    #icon-motorcycle
  • mouse-pointer
    #icon-mouse-pointer
  • mortar-board
    #icon-mortar-board
  • navicon
    #icon-navicon
  • neuter
    #icon-neuter
  • music
    #icon-music
  • object-group
    #icon-object-group
  • newspaper-o
    #icon-newspaper-o
  • object-ungroup
    #icon-object-ungroup
  • odnoklassniki-square
    #icon-odnoklassniki-square
  • odnoklassniki
    #icon-odnoklassniki
  • opencart
    #icon-opencart
  • openid
    #icon-openid
  • opera
    #icon-opera
  • paper-plane-o
    #icon-paper-plane-o
  • pagelines
    #icon-pagelines
  • outdent
    #icon-outdent
  • paper-plane
    #icon-paper-plane
  • paint-brush
    #icon-paint-brush
  • paragraph
    #icon-paragraph
  • paperclip
    #icon-paperclip
  • optin-monster
    #icon-optin-monster
  • pause-circle-o
    #icon-pause-circle-o
  • paste
    #icon-paste
  • pause
    #icon-pause
  • pause-circle
    #icon-pause-circle
  • paw
    #icon-paw
  • paypal
    #icon-paypal
  • pencil-square-o
    #icon-pencil-square-o
  • percent
    #icon-percent
  • pencil-square
    #icon-pencil-square
  • pencil
    #icon-pencil
  • phone-square
    #icon-phone-square
  • phone
    #icon-phone
  • photo
    #icon-photo
  • picture-o
    #icon-picture-o
  • pie-chart
    #icon-pie-chart
  • pied-piper-pp
    #icon-pied-piper-pp
  • pied-piper-alt
    #icon-pied-piper-alt
  • pinterest-p
    #icon-pinterest-p
  • plane
    #icon-plane
  • play-circle-o
    #icon-play-circle-o
  • pied-piper
    #icon-pied-piper
  • pinterest
    #icon-pinterest
  • pinterest-square
    #icon-pinterest-square
  • play
    #icon-play
  • play-circle
    #icon-play-circle
  • plug
    #icon-plug
  • plus-square-o
    #icon-plus-square-o
  • plus-square
    #icon-plus-square
  • plus-circle
    #icon-plus-circle
  • plus
    #icon-plus
  • product-hunt
    #icon-product-hunt
  • print
    #icon-print
  • puzzle-piece
    #icon-puzzle-piece
  • podcast
    #icon-podcast
  • power-off
    #icon-power-off
  • qq
    #icon-qq
  • question
    #icon-question
  • qrcode
    #icon-qrcode
  • quora
    #icon-quora
  • question-circle-o
    #icon-question-circle-o
  • question-circle
    #icon-question-circle
  • quote-left
    #icon-quote-left
  • quote-right
    #icon-quote-right
  • ra
    #icon-ra
  • ravelry
    #icon-ravelry
  • rebel
    #icon-rebel
  • random
    #icon-random
  • reddit-square
    #icon-reddit-square
  • reddit-alien
    #icon-reddit-alien
  • recycle
    #icon-recycle
  • reddit
    #icon-reddit
  • registered
    #icon-registered
  • refresh
    #icon-refresh
  • renren
    #icon-renren
  • reorder
    #icon-reorder
  • repeat
    #icon-repeat
  • reply-all
    #icon-reply-all
  • remove
    #icon-remove
  • rmb
    #icon-rmb
  • resistance
    #icon-resistance
  • road
    #icon-road
  • retweet
    #icon-retweet
  • reply
    #icon-reply
  • rocket
    #icon-rocket
  • rotate-left
    #icon-rotate-left
  • rouble
    #icon-rouble
  • rotate-right
    #icon-rotate-right
  • rss
    #icon-rss
  • rss-square
    #icon-rss-square
  • ruble
    #icon-ruble
  • rub
    #icon-rub
  • s15
    #icon-s15
  • save
    #icon-save
  • rupee
    #icon-rupee
  • safari
    #icon-safari
  • scissors
    #icon-scissors
  • scribd
    #icon-scribd
  • search-plus
    #icon-search-plus
  • search
    #icon-search
  • sellsy
    #icon-sellsy
  • send
    #icon-send
  • send-o
    #icon-send-o
  • search-minus
    #icon-search-minus
  • server
    #icon-server
  • share-alt-square
    #icon-share-alt-square
  • share-alt
    #icon-share-alt
  • share-square-o
    #icon-share-square-o
  • share
    #icon-share
  • share-square
    #icon-share-square
  • shekel
    #icon-shekel
  • sheqel
    #icon-sheqel
  • shield
    #icon-shield
  • ship
    #icon-ship
  • shirtsinbulk
    #icon-shirtsinbulk
  • shower
    #icon-shower
  • sign-in
    #icon-sign-in
  • shopping-basket
    #icon-shopping-basket
  • shopping-cart
    #icon-shopping-cart
  • shopping-bag
    #icon-shopping-bag
  • sign-language
    #icon-sign-language
  • sign-out
    #icon-sign-out
  • signal
    #icon-signal
  • simplybuilt
    #icon-simplybuilt
  • sitemap
    #icon-sitemap
  • signing
    #icon-signing
  • sliders
    #icon-sliders
  • skype
    #icon-skype
  • skyatlas
    #icon-skyatlas
  • slack
    #icon-slack
  • slideshare
    #icon-slideshare
  • snapchat-square
    #icon-snapchat-square
  • snapchat-ghost
    #icon-snapchat-ghost
  • smile-o
    #icon-smile-o
  • snapchat
    #icon-snapchat
  • snowflake-o
    #icon-snowflake-o
  • soccer-ball-o
    #icon-soccer-ball-o
  • sort-alpha-asc
    #icon-sort-alpha-asc
  • sort-alpha-desc
    #icon-sort-alpha-desc
  • sort-amount-asc
    #icon-sort-amount-asc
  • sort-desc
    #icon-sort-desc
  • sort-down
    #icon-sort-down
  • sort-numeric-asc
    #icon-sort-numeric-asc
  • sort-asc
    #icon-sort-asc
  • sort-amount-desc
    #icon-sort-amount-desc
  • sort-numeric-desc
    #icon-sort-numeric-desc
  • sort-up
    #icon-sort-up
  • sort
    #icon-sort
  • soundcloud
    #icon-soundcloud
  • space-shuttle
    #icon-space-shuttle
  • spinner
    #icon-spinner
  • spoon
    #icon-spoon
  • square-o
    #icon-square-o
  • spotify
    #icon-spotify
  • square
    #icon-square
  • stack-exchange
    #icon-stack-exchange
  • star-half-empty
    #icon-star-half-empty
  • stack-overflow
    #icon-stack-overflow
  • star-half
    #icon-star-half
  • star
    #icon-star
  • star-half-o
    #icon-star-half-o
  • star-o
    #icon-star-o
  • star-half-full
    #icon-star-half-full
  • sticky-note-o
    #icon-sticky-note-o
  • step-forward
    #icon-step-forward
  • steam
    #icon-steam
  • steam-square
    #icon-steam-square
  • stethoscope
    #icon-stethoscope
  • step-backward
    #icon-step-backward
  • stop
    #icon-stop
  • stop-circle
    #icon-stop-circle
  • stop-circle-o
    #icon-stop-circle-o
  • sticky-note
    #icon-sticky-note
  • street-view
    #icon-street-view
  • strikethrough
    #icon-strikethrough
  • stumbleupon
    #icon-stumbleupon
  • subway
    #icon-subway
  • stumbleupon-circle
    #icon-stumbleupon-circle
  • suitcase
    #icon-suitcase
  • subscript
    #icon-subscript
  • sun-o
    #icon-sun-o
  • superpowers
    #icon-superpowers
  • tablet
    #icon-tablet
  • table
    #icon-table
  • support
    #icon-support
  • superscript
    #icon-superscript
  • tasks
    #icon-tasks
  • tags
    #icon-tags
  • tag
    #icon-tag
  • tachometer
    #icon-tachometer
  • telegram
    #icon-telegram
  • taxi
    #icon-taxi
  • terminal
    #icon-terminal
  • tencent-weibo
    #icon-tencent-weibo
  • television
    #icon-television
  • text-height
    #icon-text-height
  • text-width
    #icon-text-width
  • th-large
    #icon-th-large
  • th-list
    #icon-th-list
  • thermometer-0
    #icon-thermometer-0
  • th
    #icon-th
  • themeisle
    #icon-themeisle
  • thermometer-1
    #icon-thermometer-1
  • thermometer-2
    #icon-thermometer-2
  • thermometer-3
    #icon-thermometer-3
  • thermometer-4
    #icon-thermometer-4
  • thermometer-empty
    #icon-thermometer-empty
  • thermometer-full
    #icon-thermometer-full
  • thermometer-half
    #icon-thermometer-half
  • thumb-tack
    #icon-thumb-tack
  • thermometer-three-quarters
    #icon-thermometer-three-quarters
  • thermometer-quarter
    #icon-thermometer-quarter
  • thermometer
    #icon-thermometer
  • thumbs-down
    #icon-thumbs-down
  • times-circle
    #icon-times-circle
  • thumbs-up
    #icon-thumbs-up
  • ticket
    #icon-ticket
  • thumbs-o-down
    #icon-thumbs-o-down
  • thumbs-o-up
    #icon-thumbs-o-up
  • times-circle-o
    #icon-times-circle-o
  • times-rectangle-o
    #icon-times-rectangle-o
  • times-rectangle
    #icon-times-rectangle
  • times
    #icon-times
  • tint
    #icon-tint
  • toggle-left
    #icon-toggle-left
  • toggle-down
    #icon-toggle-down
  • toggle-off
    #icon-toggle-off
  • toggle-right
    #icon-toggle-right
  • toggle-on
    #icon-toggle-on
  • toggle-up
    #icon-toggle-up
  • transgender-alt
    #icon-transgender-alt
  • trademark
    #icon-trademark
  • train
    #icon-train
  • trash-o
    #icon-trash-o
  • trash
    #icon-trash
  • transgender
    #icon-transgender
  • tree
    #icon-tree
  • try
    #icon-try
  • trello
    #icon-trello
  • trophy
    #icon-trophy
  • tty
    #icon-tty
  • truck
    #icon-truck
  • tripadvisor
    #icon-tripadvisor
  • tumblr-square
    #icon-tumblr-square
  • turkish-lira
    #icon-turkish-lira
  • tumblr
    #icon-tumblr
  • tv
    #icon-tv
  • twitter
    #icon-twitter
  • twitter-square
    #icon-twitter-square
  • twitch
    #icon-twitch
  • underline
    #icon-underline
  • umbrella
    #icon-umbrella
  • undo
    #icon-undo
  • unlink
    #icon-unlink
  • university
    #icon-university
  • universal-access
    #icon-universal-access
  • unlock-alt
    #icon-unlock-alt
  • unlock
    #icon-unlock
  • upload
    #icon-upload
  • unsorted
    #icon-unsorted
  • usd
    #icon-usd
  • usb
    #icon-usb
  • user-circle
    #icon-user-circle
  • user-o
    #icon-user-o
  • user-circle-o
    #icon-user-circle-o
  • user-plus
    #icon-user-plus
  • user-md
    #icon-user-md
  • user-secret
    #icon-user-secret
  • user
    #icon-user
  • user-times
    #icon-user-times
  • users
    #icon-users
  • vcard-o
    #icon-vcard-o
  • vcard
    #icon-vcard
  • venus
    #icon-venus
  • venus-mars
    #icon-venus-mars
  • venus-double
    #icon-venus-double
  • viadeo-square
    #icon-viadeo-square
  • viacoin
    #icon-viacoin
  • viadeo
    #icon-viadeo
  • video-camera
    #icon-video-camera
  • vimeo-square
    #icon-vimeo-square
  • vine
    #icon-vine
  • vimeo
    #icon-vimeo
  • vk
    #icon-vk
  • volume-control-phone
    #icon-volume-control-phone
  • volume-off
    #icon-volume-off
  • volume-down
    #icon-volume-down
  • warning
    #icon-warning
  • volume-up
    #icon-volume-up
  • wechat
    #icon-wechat
  • weibo
    #icon-weibo
  • whatsapp
    #icon-whatsapp
  • weixin
    #icon-weixin
  • wheelchair-alt
    #icon-wheelchair-alt
  • wheelchair
    #icon-wheelchair
  • wikipedia-w
    #icon-wikipedia-w
  • wifi
    #icon-wifi
  • window-close
    #icon-window-close
  • window-close-o
    #icon-window-close-o
  • window-maximize
    #icon-window-maximize
  • window-minimize
    #icon-window-minimize
  • window-restore
    #icon-window-restore
  • windows
    #icon-windows
  • won
    #icon-won
  • wordpress
    #icon-wordpress
  • wpexplorer
    #icon-wpexplorer
  • wpbeginner
    #icon-wpbeginner
  • xing-square
    #icon-xing-square
  • wrench
    #icon-wrench
  • wpforms
    #icon-wpforms
  • y-combinator
    #icon-y-combinator
  • xing
    #icon-xing
  • y-combinator-square
    #icon-y-combinator-square
  • yahoo
    #icon-yahoo
  • yc
    #icon-yc
  • yc-square
    #icon-yc-square
  • yen
    #icon-yen
  • yelp
    #icon-yelp
  • yoast
    #icon-yoast
  • youtube-play
    #icon-youtube-play
  • youtube-square
    #icon-youtube-square
  • youtube
    #icon-youtube

Symbol 引用


这是一种全新的使用方式,应该说这才是未来的主流,也是平台目前推荐的用法。相关介绍可以参考这篇文章 这种用法其实是做了一个 SVG 的集合,与另外两种相比具有如下特点:

  • 支持多色图标了,不再受单色限制。
  • 通过一些技巧,支持像字体那样,通过 font-size, color 来调整样式。
  • 兼容性较差,支持 IE9+,及现代浏览器。
  • 浏览器渲染 SVG 的性能一般,还不如 png。

使用步骤如下:

第一步:引入项目下面生成的 symbol 代码:

<script src="./iconfont.js"></script>

第二步:加入通用 CSS 代码(引入一次就行):

<style>
.icon {
  width: 1em;
  height: 1em;
  vertical-align: -0.15em;
  fill: currentColor;
  overflow: hidden;
}
</style>

第三步:挑选相应图标并获取类名,应用于页面:

<svg class="icon" aria-hidden="true">
  <use xlink:href="#icon-xxx"></use>
</svg>
================================================ FILE: src/main/resources/static/assets/vendor/iconfont/iconfont.css ================================================ @font-face {font-family: "iconfont"; src: url('iconfont.eot?t=1578374019685'); /* IE9 */ src: url('iconfont.eot?t=1578374019685#iefix') format('embedded-opentype'), /* IE6-IE8 */ url('data:application/x-font-woff2;charset=utf-8;base64,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') format('woff2'), url('iconfont.woff?t=1578374019685') format('woff'), url('iconfont.ttf?t=1578374019685') format('truetype'), /* chrome, firefox, opera, Safari, Android, iOS 4.2+ */ url('iconfont.svg?t=1578374019685#iconfont') format('svg'); /* iOS 4.1- */ } .iconfont { font-family: "iconfont" !important; font-size: 16px; font-style: normal; -webkit-font-smoothing: antialiased; -moz-osx-font-smoothing: grayscale; } .icon-bars:before { content: "\e601"; } .icon-calendar:before { content: "\e602"; } .icon-camera:before { content: "\e603"; } .icon-check:before { content: "\e604"; } .icon-check-square-o:before { content: "\e605"; } .icon-clock-o:before { content: "\e606"; } .icon-500px:before { content: "\e607"; } .icon-address-book-o:before { content: "\e608"; } .icon-address-book:before { content: "\e609"; } .icon-address-card-o:before { content: "\e60a"; } .icon-address-card:before { content: "\e60b"; } .icon-adjust:before { content: "\e60c"; } .icon-adn:before { content: "\e60d"; } .icon-align-center:before { content: "\e60e"; } .icon-align-justify:before { content: "\e60f"; } .icon-align-left:before { content: "\e610"; } .icon-align-right:before { content: "\e611"; } .icon-amazon:before { content: "\e612"; } .icon-ambulance:before { content: "\e613"; } .icon-american-sign-language-interpreting:before { content: "\e614"; } .icon-anchor:before { content: "\e615"; } .icon-android:before { content: "\e616"; } .icon-angellist:before { content: "\e617"; } .icon-angle-double-down:before { content: "\e618"; } .icon-angle-double-left:before { content: "\e619"; } .icon-angle-double-right:before { content: "\e61a"; } .icon-angle-double-up:before { content: "\e61b"; } .icon-angle-down:before { content: "\e61c"; } .icon-angle-left:before { content: "\e61d"; } .icon-angle-right:before { content: "\e61e"; } .icon-angle-up:before { content: "\e61f"; } .icon-apple:before { content: "\e620"; } .icon-archive:before { content: "\e621"; } .icon-area-chart:before { content: "\e622"; } .icon-arrow-circle-down:before { content: "\e623"; } .icon-arrow-circle-left:before { content: "\e624"; } .icon-arrow-circle-o-down:before { content: "\e625"; } .icon-arrow-circle-o-left:before { content: "\e626"; } .icon-arrow-circle-o-right:before { content: "\e627"; } .icon-arrow-circle-o-up:before { content: "\e628"; } .icon-arrow-circle-right:before { content: "\e629"; } .icon-arrow-circle-up:before { content: "\e62a"; } .icon-arrow-down:before { content: "\e62b"; } .icon-arrow-left:before { content: "\e62c"; } .icon-arrow-right:before { content: "\e62d"; } .icon-arrow-up:before { content: "\e62e"; } .icon-arrows-alt:before { content: "\e62f"; } .icon-arrows-h:before { content: "\e630"; } .icon-arrows-v:before { content: "\e631"; } .icon-arrows:before { content: "\e632"; } .icon-asl-interpreting:before { content: "\e633"; } .icon-assistive-listening-systems:before { content: "\e634"; } .icon-asterisk:before { content: "\e635"; } .icon-at:before { content: "\e636"; } .icon-audio-description:before { content: "\e637"; } .icon-automobile:before { content: "\e638"; } .icon-backward:before { content: "\e639"; } .icon-balance-scale:before { content: "\e63a"; } .icon-bandcamp:before { content: "\e63b"; } .icon-bank:before { content: "\e63c"; } .icon-bars1:before { content: "\e63d"; } .icon-bar-chart:before { content: "\e63e"; } .icon-bar-chart-o:before { content: "\e63f"; } .icon-bathtub:before { content: "\e640"; } .icon-barcode:before { content: "\e641"; } .icon-bath:before { content: "\e642"; } .icon-battery-0:before { content: "\e643"; } .icon-battery-1:before { content: "\e644"; } .icon-battery-2:before { content: "\e645"; } .icon-battery-4:before { content: "\e646"; } .icon-battery-3:before { content: "\e647"; } .icon-battery-half:before { content: "\e648"; } .icon-battery-empty:before { content: "\e649"; } .icon-battery-full:before { content: "\e64a"; } .icon-battery-quarter:before { content: "\e64b"; } .icon-battery-three-quarters:before { content: "\e64c"; } .icon-battery:before { content: "\e64d"; } .icon-beer:before { content: "\e64e"; } .icon-bed:before { content: "\e64f"; } .icon-behance:before { content: "\e650"; } .icon-behance-square:before { content: "\e651"; } .icon-bell-o:before { content: "\e652"; } .icon-bell-slash-o:before { content: "\e653"; } .icon-bell-slash:before { content: "\e654"; } .icon-bicycle:before { content: "\e655"; } .icon-bitbucket-square:before { content: "\e656"; } .icon-binoculars:before { content: "\e657"; } .icon-bell:before { content: "\e658"; } .icon-birthday-cake:before { content: "\e659"; } .icon-bitbucket:before { content: "\e65a"; } .icon-black-tie:before { content: "\e65b"; } .icon-bluetooth-b:before { content: "\e65c"; } .icon-bitcoin:before { content: "\e65d"; } .icon-blind:before { content: "\e65e"; } .icon-bluetooth:before { content: "\e65f"; } .icon-bold:before { content: "\e660"; } .icon-bolt:before { content: "\e661"; } .icon-bomb:before { content: "\e662"; } .icon-book:before { content: "\e663"; } .icon-bug:before { content: "\e664"; } .icon-bookmark-o:before { content: "\e665"; } .icon-btc:before { content: "\e666"; } .icon-bookmark:before { content: "\e667"; } .icon-briefcase:before { content: "\e668"; } .icon-braille:before { content: "\e669"; } .icon-bullhorn:before { content: "\e66a"; } .icon-bullseye:before { content: "\e66b"; } .icon-bus:before { content: "\e66c"; } .icon-building:before { content: "\e66d"; } .icon-cab:before { content: "\e66e"; } .icon-buysellads:before { content: "\e66f"; } .icon-building-o:before { content: "\e670"; } .icon-calendar-plus-o:before { content: "\e671"; } .icon-calendar-o:before { content: "\e672"; } .icon-calendar-times-o:before { content: "\e673"; } .icon-calendar-check-o:before { content: "\e674"; } .icon-calendar-minus-o:before { content: "\e675"; } .icon-calculator:before { content: "\e676"; } .icon-caret-down:before { content: "\e677"; } .icon-caret-left:before { content: "\e678"; } .icon-car:before { content: "\e679"; } .icon-camera-retro:before { content: "\e67a"; } .icon-caret-right:before { content: "\e67b"; } .icon-caret-square-o-left:before { content: "\e67c"; } .icon-caret-square-o-right:before { content: "\e67d"; } .icon-caret-up:before { content: "\e67e"; } .icon-caret-square-o-up:before { content: "\e67f"; } .icon-cart-plus:before { content: "\e680"; } .icon-cart-arrow-down:before { content: "\e681"; } .icon-caret-square-o-down:before { content: "\e682"; } .icon-cc-discover:before { content: "\e683"; } .icon-cc-diners-club:before { content: "\e684"; } .icon-cc-paypal:before { content: "\e685"; } .icon-cc-jcb:before { content: "\e686"; } .icon-cc-mastercard:before { content: "\e687"; } .icon-cc-amex:before { content: "\e688"; } .icon-cc:before { content: "\e689"; } .icon-cc-visa:before { content: "\e68a"; } .icon-cc-stripe:before { content: "\e68b"; } .icon-check1:before { content: "\e68c"; } .icon-certificate:before { content: "\e68d"; } .icon-check-circle:before { content: "\e68e"; } .icon-check-circle-o:before { content: "\e68f"; } .icon-chain-broken:before { content: "\e690"; } .icon-chain:before { content: "\e691"; } .icon-chevron-circle-down:before { content: "\e692"; } .icon-chevron-circle-left:before { content: "\e693"; } .icon-chevron-circle-right:before { content: "\e694"; } .icon-chevron-down:before { content: "\e695"; } .icon-chevron-circle-up:before { content: "\e696"; } .icon-chevron-left:before { content: "\e697"; } .icon-chevron-right:before { content: "\e698"; } .icon-chevron-up:before { content: "\e699"; } .icon-child:before { content: "\e69a"; } .icon-circle-thin:before { content: "\e69b"; } .icon-circle-o-notch:before { content: "\e69c"; } .icon-chrome:before { content: "\e69d"; } .icon-circle-o:before { content: "\e69e"; } .icon-clipboard:before { content: "\e69f"; } .icon-circle:before { content: "\e6a0"; } .icon-cloud:before { content: "\e6a1"; } .icon-close:before { content: "\e6a2"; } .icon-cloud-upload:before { content: "\e6a3"; } .icon-clone:before { content: "\e6a4"; } .icon-cloud-download:before { content: "\e6a5"; } .icon-clock-o1:before { content: "\e6a6"; } .icon-cny:before { content: "\e6a7"; } .icon-code-fork:before { content: "\e6a8"; } .icon-codiepie:before { content: "\e6a9"; } .icon-codepen:before { content: "\e6aa"; } .icon-code:before { content: "\e6ab"; } .icon-cog:before { content: "\e6ac"; } .icon-coffee:before { content: "\e6ad"; } .icon-columns:before { content: "\e6ae"; } .icon-comment-o:before { content: "\e6af"; } .icon-commenting-o:before { content: "\e6b0"; } .icon-commenting:before { content: "\e6b1"; } .icon-comment:before { content: "\e6b2"; } .icon-cogs:before { content: "\e6b3"; } .icon-compass:before { content: "\e6b4"; } .icon-compress:before { content: "\e6b5"; } .icon-comments:before { content: "\e6b6"; } .icon-comments-o:before { content: "\e6b7"; } .icon-connectdevelop:before { content: "\e6b8"; } .icon-copy:before { content: "\e6b9"; } .icon-contao:before { content: "\e6ba"; } .icon-copyright:before { content: "\e6bb"; } .icon-credit-card-alt:before { content: "\e6bc"; } .icon-credit-card:before { content: "\e6bd"; } .icon-crop:before { content: "\e6be"; } .icon-creative-commons:before { content: "\e6bf"; } .icon-crosshairs:before { content: "\e6c0"; } .icon-css3:before { content: "\e6c1"; } .icon-cube:before { content: "\e6c2"; } .icon-cutlery:before { content: "\e6c3"; } .icon-cut:before { content: "\e6c4"; } .icon-dashboard:before { content: "\e6c5"; } .icon-dashcube:before { content: "\e6c6"; } .icon-cubes:before { content: "\e6c7"; } .icon-database:before { content: "\e6c8"; } .icon-deaf:before { content: "\e6c9"; } .icon-delicious:before { content: "\e6ca"; } .icon-deviantart:before { content: "\e6cb"; } .icon-diamond:before { content: "\e6cc"; } .icon-dedent:before { content: "\e6cd"; } .icon-desktop:before { content: "\e6ce"; } .icon-deafness:before { content: "\e6cf"; } .icon-drivers-license-o:before { content: "\e6d0"; } .icon-digg:before { content: "\e6d1"; } .icon-dribbble:before { content: "\e6d2"; } .icon-download:before { content: "\e6d3"; } .icon-dollar:before { content: "\e6d4"; } .icon-dot-circle-o:before { content: "\e6d5"; } .icon-edit:before { content: "\e6d6"; } .icon-dropbox:before { content: "\e6d7"; } .icon-edge:before { content: "\e6d8"; } .icon-drupal:before { content: "\e6d9"; } .icon-drivers-license:before { content: "\e6da"; } .icon-eject:before { content: "\e6db"; } .icon-ellipsis-h:before { content: "\e6dc"; } .icon-envelope-o:before { content: "\e6dd"; } .icon-ellipsis-v:before { content: "\e6de"; } .icon-eercast:before { content: "\e6df"; } .icon-empire:before { content: "\e6e0"; } .icon-envelope-open-o:before { content: "\e6e1"; } .icon-envelope-open:before { content: "\e6e2"; } .icon-envelope:before { content: "\e6e3"; } .icon-envelope-square:before { content: "\e6e4"; } .icon-envira:before { content: "\e6e5"; } .icon-etsy:before { content: "\e6e6"; } .icon-eraser:before { content: "\e6e7"; } .icon-eur:before { content: "\e6e8"; } .icon-euro:before { content: "\e6e9"; } .icon-exchange:before { content: "\e6ea"; } .icon-exclamation-triangle:before { content: "\e6eb"; } .icon-expand:before { content: "\e6ec"; } .icon-exclamation:before { content: "\e6ed"; } .icon-exclamation-circle:before { content: "\e6ee"; } .icon-expeditedssl:before { content: "\e6ef"; } .icon-external-link-square:before { content: "\e6f0"; } .icon-eyedropper:before { content: "\e6f1"; } .icon-external-link:before { content: "\e6f2"; } .icon-eye:before { content: "\e6f3"; } .icon-eye-slash:before { content: "\e6f4"; } .icon-fa:before { content: "\e6f5"; } .icon-facebook-official:before { content: "\e6f6"; } .icon-facebook-f:before { content: "\e6f7"; } .icon-facebook-square:before { content: "\e6f8"; } .icon-facebook:before { content: "\e6f9"; } .icon-fast-backward:before { content: "\e6fa"; } .icon-fast-forward:before { content: "\e6fb"; } .icon-feed:before { content: "\e6fc"; } .icon-file-archive-o:before { content: "\e6fd"; } .icon-female:before { content: "\e6fe"; } .icon-file-audio-o:before { content: "\e6ff"; } .icon-fighter-jet:before { content: "\e700"; } .icon-fax:before { content: "\e701"; } .icon-file-code-o:before { content: "\e702"; } .icon-file-movie-o:before { content: "\e703"; } .icon-file-image-o:before { content: "\e704"; } .icon-file-excel-o:before { content: "\e705"; } .icon-file-o:before { content: "\e706"; } .icon-file-photo-o:before { content: "\e707"; } .icon-file-pdf-o:before { content: "\e708"; } .icon-file-picture-o:before { content: "\e709"; } .icon-file-sound-o:before { content: "\e70a"; } .icon-file-powerpoint-o:before { content: "\e70b"; } .icon-file-text:before { content: "\e70c"; } .icon-file-text-o:before { content: "\e70d"; } .icon-file:before { content: "\e70e"; } .icon-file-video-o:before { content: "\e70f"; } .icon-files-o:before { content: "\e710"; } .icon-file-zip-o:before { content: "\e711"; } .icon-file-word-o:before { content: "\e712"; } .icon-film:before { content: "\e713"; } .icon-filter:before { content: "\e714"; } .icon-fire:before { content: "\e715"; } .icon-fire-extinguisher:before { content: "\e716"; } .icon-flag-checkered:before { content: "\e717"; } .icon-firefox:before { content: "\e718"; } .icon-first-order:before { content: "\e719"; } .icon-flash:before { content: "\e71a"; } .icon-flag:before { content: "\e71b"; } .icon-flag-o:before { content: "\e71c"; } .icon-flask:before { content: "\e71d"; } .icon-flickr:before { content: "\e71e"; } .icon-folder-open:before { content: "\e71f"; } .icon-folder-o:before { content: "\e720"; } .icon-font-awesome:before { content: "\e721"; } .icon-folder:before { content: "\e722"; } .icon-floppy-o:before { content: "\e723"; } .icon-folder-open-o:before { content: "\e724"; } .icon-fonticons:before { content: "\e725"; } .icon-font:before { content: "\e726"; } .icon-forumbee:before { content: "\e727"; } .icon-fort-awesome:before { content: "\e728"; } .icon-forward:before { content: "\e729"; } .icon-foursquare:before { content: "\e72a"; } .icon-free-code-camp:before { content: "\e72b"; } .icon-frown-o:before { content: "\e72c"; } .icon-futbol-o:before { content: "\e72d"; } .icon-gamepad:before { content: "\e72e"; } .icon-gavel:before { content: "\e72f"; } .icon-gbp:before { content: "\e730"; } .icon-ge:before { content: "\e731"; } .icon-gear:before { content: "\e732"; } .icon-gears:before { content: "\e733"; } .icon-genderless:before { content: "\e734"; } .icon-get-pocket:before { content: "\e735"; } .icon-gg-circle:before { content: "\e736"; } .icon-gift:before { content: "\e737"; } .icon-gg:before { content: "\e738"; } .icon-git-square:before { content: "\e739"; } .icon-git:before { content: "\e73a"; } .icon-github-alt:before { content: "\e73b"; } .icon-github-square:before { content: "\e73c"; } .icon-github:before { content: "\e73d"; } .icon-gitlab:before { content: "\e73e"; } .icon-gittip:before { content: "\e73f"; } .icon-glass:before { content: "\e740"; } .icon-glide-g:before { content: "\e741"; } .icon-glide:before { content: "\e742"; } .icon-globe:before { content: "\e743"; } .icon-google-plus-circle:before { content: "\e744"; } .icon-google-plus-official:before { content: "\e745"; } .icon-google-plus-square:before { content: "\e746"; } .icon-google-plus:before { content: "\e747"; } .icon-google-wallet:before { content: "\e748"; } .icon-google:before { content: "\e749"; } .icon-graduation-cap:before { content: "\e74a"; } .icon-gratipay:before { content: "\e74b"; } .icon-grav:before { content: "\e74c"; } .icon-group:before { content: "\e74d"; } .icon-h-square:before { content: "\e74e"; } .icon-hacker-news:before { content: "\e74f"; } .icon-hand-grab-o:before { content: "\e750"; } .icon-hand-o-left:before { content: "\e751"; } .icon-hand-lizard-o:before { content: "\e752"; } .icon-hand-o-down:before { content: "\e753"; } .icon-hand-o-right:before { content: "\e754"; } .icon-hand-o-up:before { content: "\e755"; } .icon-hand-paper-o:before { content: "\e756"; } .icon-hand-pointer-o:before { content: "\e757"; } .icon-hand-peace-o:before { content: "\e758"; } .icon-hand-spock-o:before { content: "\e759"; } .icon-hand-rock-o:before { content: "\e75a"; } .icon-hand-scissors-o:before { content: "\e75b"; } .icon-hand-stop-o:before { content: "\e75c"; } .icon-hard-of-hearing:before { content: "\e75d"; } .icon-handshake-o:before { content: "\e75e"; } .icon-hashtag:before { content: "\e75f"; } .icon-headphones:before { content: "\e760"; } .icon-header:before { content: "\e761"; } .icon-hdd-o:before { content: "\e762"; } .icon-heart-o:before { content: "\e763"; } .icon-heart:before { content: "\e764"; } .icon-hotel:before { content: "\e765"; } .icon-heartbeat:before { content: "\e766"; } .icon-hourglass-1:before { content: "\e767"; } .icon-home:before { content: "\e768"; } .icon-history:before { content: "\e769"; } .icon-hourglass-2:before { content: "\e76a"; } .icon-hospital-o:before { content: "\e76b"; } .icon-hourglass-3:before { content: "\e76c"; } .icon-hourglass-half:before { content: "\e76d"; } .icon-hourglass-end:before { content: "\e76e"; } .icon-hourglass-o:before { content: "\e76f"; } .icon-hourglass-start:before { content: "\e770"; } .icon-houzz:before { content: "\e771"; } .icon-html5:before { content: "\e772"; } .icon-hourglass:before { content: "\e773"; } .icon-id-badge:before { content: "\e774"; } .icon-i-cursor:before { content: "\e775"; } .icon-id-card:before { content: "\e776"; } .icon-ils:before { content: "\e777"; } .icon-id-card-o:before { content: "\e778"; } .icon-image:before { content: "\e779"; } .icon-inbox:before { content: "\e77a"; } .icon-indent:before { content: "\e77b"; } .icon-industry:before { content: "\e77c"; } .icon-imdb:before { content: "\e77d"; } .icon-info:before { content: "\e77e"; } .icon-institution:before { content: "\e77f"; } .icon-info-circle:before { content: "\e780"; } .icon-internet-explorer:before { content: "\e781"; } .icon-inr:before { content: "\e782"; } .icon-instagram:before { content: "\e783"; } .icon-ioxhost:before { content: "\e784"; } .icon-joomla:before { content: "\e785"; } .icon-jpy:before { content: "\e786"; } .icon-intersex:before { content: "\e787"; } .icon-jsfiddle:before { content: "\e788"; } .icon-italic:before { content: "\e789"; } .icon-key:before { content: "\e78a"; } .icon-keyboard-o:before { content: "\e78b"; } .icon-krw:before { content: "\e78c"; } .icon-laptop:before { content: "\e78d"; } .icon-language:before { content: "\e78e"; } .icon-leaf:before { content: "\e78f"; } .icon-lastfm:before { content: "\e790"; } .icon-lastfm-square:before { content: "\e791"; } .icon-legal:before { content: "\e792"; } .icon-leanpub:before { content: "\e793"; } .icon-level-down:before { content: "\e794"; } .icon-level-up:before { content: "\e795"; } .icon-life-ring:before { content: "\e796"; } .icon-life-buoy:before { content: "\e797"; } .icon-life-bouy:before { content: "\e798"; } .icon-lemon-o:before { content: "\e799"; } .icon-lightbulb-o:before { content: "\e79a"; } .icon-life-saver:before { content: "\e79b"; } .icon-line-chart:before { content: "\e79c"; } .icon-linkedin:before { content: "\e79d"; } .icon-linkedin-square:before { content: "\e79e"; } .icon-link:before { content: "\e79f"; } .icon-linode:before { content: "\e7a0"; } .icon-list:before { content: "\e7a1"; } .icon-list-ul:before { content: "\e7a2"; } .icon-linux:before { content: "\e7a3"; } .icon-list-ol:before { content: "\e7a4"; } .icon-list-alt:before { content: "\e7a5"; } .icon-location-arrow:before { content: "\e7a6"; } .icon-lock:before { content: "\e7a7"; } .icon-long-arrow-up:before { content: "\e7a8"; } .icon-long-arrow-right:before { content: "\e7a9"; } .icon-long-arrow-left:before { content: "\e7aa"; } .icon-long-arrow-down:before { content: "\e7ab"; } .icon-magic:before { content: "\e7ac"; } .icon-magnet:before { content: "\e7ad"; } .icon-low-vision:before { content: "\e7ae"; } .icon-mail-reply-all:before { content: "\e7af"; } .icon-mail-reply:before { content: "\e7b0"; } .icon-mail-forward:before { content: "\e7b1"; } .icon-male:before { content: "\e7b2"; } .icon-map-pin:before { content: "\e7b3"; } .icon-map-o:before { content: "\e7b4"; } .icon-map-marker:before { content: "\e7b5"; } .icon-map:before { content: "\e7b6"; } .icon-map-signs:before { content: "\e7b7"; } .icon-mars-stroke-h:before { content: "\e7b8"; } .icon-mars-stroke:before { content: "\e7b9"; } .icon-mars-stroke-v:before { content: "\e7ba"; } .icon-mars-double:before { content: "\e7bb"; } .icon-mars:before { content: "\e7bc"; } .icon-maxcdn:before { content: "\e7bd"; } .icon-medium:before { content: "\e7be"; } .icon-medkit:before { content: "\e7bf"; } .icon-meanpath:before { content: "\e7c0"; } .icon-meetup:before { content: "\e7c1"; } .icon-meh-o:before { content: "\e7c2"; } .icon-mercury:before { content: "\e7c3"; } .icon-microphone:before { content: "\e7c4"; } .icon-minus-circle:before { content: "\e7c5"; } .icon-minus-square:before { content: "\e7c6"; } .icon-minus-square-o:before { content: "\e7c7"; } .icon-microchip:before { content: "\e7c8"; } .icon-microphone-slash:before { content: "\e7c9"; } .icon-minus:before { content: "\e7ca"; } .icon-mixcloud:before { content: "\e7cb"; } .icon-mobile:before { content: "\e7cc"; } .icon-modx:before { content: "\e7cd"; } .icon-money:before { content: "\e7ce"; } .icon-moon-o:before { content: "\e7cf"; } .icon-motorcycle:before { content: "\e7d0"; } .icon-mouse-pointer:before { content: "\e7d1"; } .icon-mortar-board:before { content: "\e7d2"; } .icon-navicon:before { content: "\e7d3"; } .icon-neuter:before { content: "\e7d4"; } .icon-music:before { content: "\e7d5"; } .icon-object-group:before { content: "\e7d6"; } .icon-newspaper-o:before { content: "\e7d7"; } .icon-object-ungroup:before { content: "\e7d8"; } .icon-odnoklassniki-square:before { content: "\e7d9"; } .icon-odnoklassniki:before { content: "\e7da"; } .icon-opencart:before { content: "\e7db"; } .icon-openid:before { content: "\e7dc"; } .icon-opera:before { content: "\e7dd"; } .icon-paper-plane-o:before { content: "\e7de"; } .icon-pagelines:before { content: "\e7df"; } .icon-outdent:before { content: "\e7e0"; } .icon-paper-plane:before { content: "\e7e1"; } .icon-paint-brush:before { content: "\e7e2"; } .icon-paragraph:before { content: "\e7e3"; } .icon-paperclip:before { content: "\e7e4"; } .icon-optin-monster:before { content: "\e7e5"; } .icon-pause-circle-o:before { content: "\e7e6"; } .icon-paste:before { content: "\e7e7"; } .icon-pause:before { content: "\e7e8"; } .icon-pause-circle:before { content: "\e7e9"; } .icon-paw:before { content: "\e7ea"; } .icon-paypal:before { content: "\e7eb"; } .icon-pencil-square-o:before { content: "\e7ec"; } .icon-percent:before { content: "\e7ed"; } .icon-pencil-square:before { content: "\e7ee"; } .icon-pencil:before { content: "\e7ef"; } .icon-phone-square:before { content: "\e7f0"; } .icon-phone:before { content: "\e7f1"; } .icon-photo:before { content: "\e7f2"; } .icon-picture-o:before { content: "\e7f3"; } .icon-pie-chart:before { content: "\e7f4"; } .icon-pied-piper-pp:before { content: "\e7f5"; } .icon-pied-piper-alt:before { content: "\e7f6"; } .icon-pinterest-p:before { content: "\e7f7"; } .icon-plane:before { content: "\e7f8"; } .icon-play-circle-o:before { content: "\e7f9"; } .icon-pied-piper:before { content: "\e7fa"; } .icon-pinterest:before { content: "\e7fb"; } .icon-pinterest-square:before { content: "\e7fc"; } .icon-play:before { content: "\e7fd"; } .icon-play-circle:before { content: "\e7fe"; } .icon-plug:before { content: "\e7ff"; } .icon-plus-square-o:before { content: "\e800"; } .icon-plus-square:before { content: "\e801"; } .icon-plus-circle:before { content: "\e802"; } .icon-plus:before { content: "\e803"; } .icon-product-hunt:before { content: "\e804"; } .icon-print:before { content: "\e805"; } .icon-puzzle-piece:before { content: "\e806"; } .icon-podcast:before { content: "\e807"; } .icon-power-off:before { content: "\e808"; } .icon-qq:before { content: "\e809"; } .icon-question:before { content: "\e80a"; } .icon-qrcode:before { content: "\e80b"; } .icon-quora:before { content: "\e80c"; } .icon-question-circle-o:before { content: "\e80d"; } .icon-question-circle:before { content: "\e80e"; } .icon-quote-left:before { content: "\e80f"; } .icon-quote-right:before { content: "\e810"; } .icon-ra:before { content: "\e811"; } .icon-ravelry:before { content: "\e812"; } .icon-rebel:before { content: "\e813"; } .icon-random:before { content: "\e814"; } .icon-reddit-square:before { content: "\e815"; } .icon-reddit-alien:before { content: "\e816"; } .icon-recycle:before { content: "\e817"; } .icon-reddit:before { content: "\e818"; } .icon-registered:before { content: "\e819"; } .icon-refresh:before { content: "\e81a"; } .icon-renren:before { content: "\e81b"; } .icon-reorder:before { content: "\e81c"; } .icon-repeat:before { content: "\e81d"; } .icon-reply-all:before { content: "\e81e"; } .icon-remove:before { content: "\e81f"; } .icon-rmb:before { content: "\e820"; } .icon-resistance:before { content: "\e821"; } .icon-road:before { content: "\e822"; } .icon-retweet:before { content: "\e823"; } .icon-reply:before { content: "\e824"; } .icon-rocket:before { content: "\e825"; } .icon-rotate-left:before { content: "\e826"; } .icon-rouble:before { content: "\e827"; } .icon-rotate-right:before { content: "\e828"; } .icon-rss:before { content: "\e829"; } .icon-rss-square:before { content: "\e82a"; } .icon-ruble:before { content: "\e82b"; } .icon-rub:before { content: "\e82c"; } .icon-s15:before { content: "\e82d"; } .icon-save:before { content: "\e82e"; } .icon-rupee:before { content: "\e82f"; } .icon-safari:before { content: "\e830"; } .icon-scissors:before { content: "\e831"; } .icon-scribd:before { content: "\e832"; } .icon-search-plus:before { content: "\e833"; } .icon-search:before { content: "\e834"; } .icon-sellsy:before { content: "\e835"; } .icon-send:before { content: "\e836"; } .icon-send-o:before { content: "\e837"; } .icon-search-minus:before { content: "\e838"; } .icon-server:before { content: "\e839"; } .icon-share-alt-square:before { content: "\e83a"; } .icon-share-alt:before { content: "\e83b"; } .icon-share-square-o:before { content: "\e83c"; } .icon-share:before { content: "\e83d"; } .icon-share-square:before { content: "\e83e"; } .icon-shekel:before { content: "\e83f"; } .icon-sheqel:before { content: "\e840"; } .icon-shield:before { content: "\e841"; } .icon-ship:before { content: "\e842"; } .icon-shirtsinbulk:before { content: "\e843"; } .icon-shower:before { content: "\e844"; } .icon-sign-in:before { content: "\e845"; } .icon-shopping-basket:before { content: "\e846"; } .icon-shopping-cart:before { content: "\e847"; } .icon-shopping-bag:before { content: "\e848"; } .icon-sign-language:before { content: "\e849"; } .icon-sign-out:before { content: "\e84a"; } .icon-signal:before { content: "\e84b"; } .icon-simplybuilt:before { content: "\e84c"; } .icon-sitemap:before { content: "\e84d"; } .icon-signing:before { content: "\e84e"; } .icon-sliders:before { content: "\e84f"; } .icon-skype:before { content: "\e850"; } .icon-skyatlas:before { content: "\e851"; } .icon-slack:before { content: "\e852"; } .icon-slideshare:before { content: "\e853"; } .icon-snapchat-square:before { content: "\e854"; } .icon-snapchat-ghost:before { content: "\e855"; } .icon-smile-o:before { content: "\e856"; } .icon-snapchat:before { content: "\e857"; } .icon-snowflake-o:before { content: "\e858"; } .icon-soccer-ball-o:before { content: "\e859"; } .icon-sort-alpha-asc:before { content: "\e85a"; } .icon-sort-alpha-desc:before { content: "\e85b"; } .icon-sort-amount-asc:before { content: "\e85c"; } .icon-sort-desc:before { content: "\e85d"; } .icon-sort-down:before { content: "\e85e"; } .icon-sort-numeric-asc:before { content: "\e85f"; } .icon-sort-asc:before { content: "\e860"; } .icon-sort-amount-desc:before { content: "\e861"; } .icon-sort-numeric-desc:before { content: "\e862"; } .icon-sort-up:before { content: "\e863"; } .icon-sort:before { content: "\e864"; } .icon-soundcloud:before { content: "\e865"; } .icon-space-shuttle:before { content: "\e866"; } .icon-spinner:before { content: "\e867"; } .icon-spoon:before { content: "\e868"; } .icon-square-o:before { content: "\e869"; } .icon-spotify:before { content: "\e86a"; } .icon-square:before { content: "\e86b"; } .icon-stack-exchange:before { content: "\e86c"; } .icon-star-half-empty:before { content: "\e86d"; } .icon-stack-overflow:before { content: "\e86e"; } .icon-star-half:before { content: "\e86f"; } .icon-star:before { content: "\e870"; } .icon-star-half-o:before { content: "\e871"; } .icon-star-o:before { content: "\e872"; } .icon-star-half-full:before { content: "\e873"; } .icon-sticky-note-o:before { content: "\e874"; } .icon-step-forward:before { content: "\e875"; } .icon-steam:before { content: "\e876"; } .icon-steam-square:before { content: "\e877"; } .icon-stethoscope:before { content: "\e878"; } .icon-step-backward:before { content: "\e879"; } .icon-stop:before { content: "\e87a"; } .icon-stop-circle:before { content: "\e87b"; } .icon-stop-circle-o:before { content: "\e87c"; } .icon-sticky-note:before { content: "\e87d"; } .icon-street-view:before { content: "\e87e"; } .icon-strikethrough:before { content: "\e87f"; } .icon-stumbleupon:before { content: "\e880"; } .icon-subway:before { content: "\e881"; } .icon-stumbleupon-circle:before { content: "\e882"; } .icon-suitcase:before { content: "\e883"; } .icon-subscript:before { content: "\e884"; } .icon-sun-o:before { content: "\e885"; } .icon-superpowers:before { content: "\e886"; } .icon-tablet:before { content: "\e887"; } .icon-table:before { content: "\e888"; } .icon-support:before { content: "\e889"; } .icon-superscript:before { content: "\e88a"; } .icon-tasks:before { content: "\e88b"; } .icon-tags:before { content: "\e88c"; } .icon-tag:before { content: "\e88d"; } .icon-tachometer:before { content: "\e88e"; } .icon-telegram:before { content: "\e88f"; } .icon-taxi:before { content: "\e890"; } .icon-terminal:before { content: "\e891"; } .icon-tencent-weibo:before { content: "\e892"; } .icon-television:before { content: "\e893"; } .icon-text-height:before { content: "\e894"; } .icon-text-width:before { content: "\e895"; } .icon-th-large:before { content: "\e896"; } .icon-th-list:before { content: "\e897"; } .icon-thermometer-0:before { content: "\e898"; } .icon-th:before { content: "\e899"; } .icon-themeisle:before { content: "\e89a"; } .icon-thermometer-1:before { content: "\e89b"; } .icon-thermometer-2:before { content: "\e89c"; } .icon-thermometer-3:before { content: "\e89d"; } .icon-thermometer-4:before { content: "\e89e"; } .icon-thermometer-empty:before { content: "\e89f"; } .icon-thermometer-full:before { content: "\e8a0"; } .icon-thermometer-half:before { content: "\e8a1"; } .icon-thumb-tack:before { content: "\e8a2"; } .icon-thermometer-three-quarters:before { content: "\e8a3"; } .icon-thermometer-quarter:before { content: "\e8a4"; } .icon-thermometer:before { content: "\e8a5"; } .icon-thumbs-down:before { content: "\e8a6"; } .icon-times-circle:before { content: "\e8a7"; } .icon-thumbs-up:before { content: "\e8a8"; } .icon-ticket:before { content: "\e8a9"; } .icon-thumbs-o-down:before { content: "\e8aa"; } .icon-thumbs-o-up:before { content: "\e8ab"; } .icon-times-circle-o:before { content: "\e8ac"; } .icon-times-rectangle-o:before { content: "\e8ad"; } .icon-times-rectangle:before { content: "\e8ae"; } .icon-times:before { content: "\e8af"; } .icon-tint:before { content: "\e8b0"; } .icon-toggle-left:before { content: "\e8b1"; } .icon-toggle-down:before { content: "\e8b2"; } .icon-toggle-off:before { content: "\e8b3"; } .icon-toggle-right:before { content: "\e8b4"; } .icon-toggle-on:before { content: "\e8b5"; } .icon-toggle-up:before { content: "\e8b6"; } .icon-transgender-alt:before { content: "\e8b7"; } .icon-trademark:before { content: "\e8b8"; } .icon-train:before { content: "\e8b9"; } .icon-trash-o:before { content: "\e8ba"; } .icon-trash:before { content: "\e8bb"; } .icon-transgender:before { content: "\e8bc"; } .icon-tree:before { content: "\e8bd"; } .icon-try:before { content: "\e8be"; } .icon-trello:before { content: "\e8bf"; } .icon-trophy:before { content: "\e8c0"; } .icon-tty:before { content: "\e8c1"; } .icon-truck:before { content: "\e8c2"; } .icon-tripadvisor:before { content: "\e8c3"; } .icon-tumblr-square:before { content: "\e8c4"; } .icon-turkish-lira:before { content: "\e8c5"; } .icon-tumblr:before { content: "\e8c6"; } .icon-tv:before { content: "\e8c7"; } .icon-twitter:before { content: "\e8c8"; } .icon-twitter-square:before { content: "\e8c9"; } .icon-twitch:before { content: "\e8ca"; } .icon-underline:before { content: "\e8cb"; } .icon-umbrella:before { content: "\e8cc"; } .icon-undo:before { content: "\e8cd"; } .icon-unlink:before { content: "\e8ce"; } .icon-university:before { content: "\e8cf"; } .icon-universal-access:before { content: "\e8d0"; } .icon-unlock-alt:before { content: "\e8d1"; } .icon-unlock:before { content: "\e8d2"; } .icon-upload:before { content: "\e8d3"; } .icon-unsorted:before { content: "\e8d4"; } .icon-usd:before { content: "\e8d5"; } .icon-usb:before { content: "\e8d6"; } .icon-user-circle:before { content: "\e8d7"; } .icon-user-o:before { content: "\e8d8"; } .icon-user-circle-o:before { content: "\e8d9"; } .icon-user-plus:before { content: "\e8da"; } .icon-user-md:before { content: "\e8db"; } .icon-user-secret:before { content: "\e8dc"; } .icon-user:before { content: "\e8dd"; } .icon-user-times:before { content: "\e8de"; } .icon-users:before { content: "\e8df"; } .icon-vcard-o:before { content: "\e8e0"; } .icon-vcard:before { content: "\e8e1"; } .icon-venus:before { content: "\e8e2"; } .icon-venus-mars:before { content: "\e8e3"; } .icon-venus-double:before { content: "\e8e4"; } .icon-viadeo-square:before { content: "\e8e5"; } .icon-viacoin:before { content: "\e8e6"; } .icon-viadeo:before { content: "\e8e7"; } .icon-video-camera:before { content: "\e8e8"; } .icon-vimeo-square:before { content: "\e8e9"; } .icon-vine:before { content: "\e8ea"; } .icon-vimeo:before { content: "\e8eb"; } .icon-vk:before { content: "\e8ec"; } .icon-volume-control-phone:before { content: "\e8ed"; } .icon-volume-off:before { content: "\e8ee"; } .icon-volume-down:before { content: "\e8ef"; } .icon-warning:before { content: "\e8f0"; } .icon-volume-up:before { content: "\e8f1"; } .icon-wechat:before { content: "\e8f2"; } .icon-weibo:before { content: "\e8f3"; } .icon-whatsapp:before { content: "\e8f4"; } .icon-weixin:before { content: "\e8f5"; } .icon-wheelchair-alt:before { content: "\e8f6"; } .icon-wheelchair:before { content: "\e8f7"; } .icon-wikipedia-w:before { content: "\e8f8"; } .icon-wifi:before { content: "\e8f9"; } .icon-window-close:before { content: "\e8fa"; } .icon-window-close-o:before { content: "\e8fb"; } .icon-window-maximize:before { content: "\e8fc"; } .icon-window-minimize:before { content: "\e8fd"; } .icon-window-restore:before { content: "\e8fe"; } .icon-windows:before { content: "\e8ff"; } .icon-won:before { content: "\e900"; } .icon-wordpress:before { content: "\e901"; } .icon-wpexplorer:before { content: "\e902"; } .icon-wpbeginner:before { content: "\e903"; } .icon-xing-square:before { content: "\e904"; } .icon-wrench:before { content: "\e905"; } .icon-wpforms:before { content: "\e906"; } .icon-y-combinator:before { content: "\e907"; } .icon-xing:before { content: "\e908"; } .icon-y-combinator-square:before { content: "\e909"; } .icon-yahoo:before { content: "\e90a"; } .icon-yc:before { content: "\e90b"; } .icon-yc-square:before { content: "\e90c"; } .icon-yen:before { content: "\e90d"; } .icon-yelp:before { content: "\e90e"; } .icon-yoast:before { content: "\e90f"; } .icon-youtube-play:before { content: "\e910"; } .icon-youtube-square:before { content: "\e911"; } .icon-youtube:before { content: "\e912"; } ================================================ FILE: src/main/resources/static/assets/vendor/iconfont/iconfont.js ================================================ !function(m){var q,v='',t=(q=document.getElementsByTagName("script"))[q.length-1].getAttribute("data-injectcss");if(t&&!m.__iconfont__svg__cssinject__){m.__iconfont__svg__cssinject__=!0;try{document.write("")}catch(q){console&&console.log(q)}}!function(q){if(document.addEventListener)if(~["complete","loaded","interactive"].indexOf(document.readyState))setTimeout(q,0);else{var t=function(){document.removeEventListener("DOMContentLoaded",t,!1),q()};document.addEventListener("DOMContentLoaded",t,!1)}else document.attachEvent&&(l=q,T=m.document,o=!1,(v=function(){try{T.documentElement.doScroll("left")}catch(q){return void setTimeout(v,50)}h()})(),T.onreadystatechange=function(){"complete"==T.readyState&&(T.onreadystatechange=null,h())});function h(){o||(o=!0,l())}var l,T,o,v}(function(){var q,t,h,l,T,o;(q=document.createElement("div")).innerHTML=v,v=null,(t=q.getElementsByTagName("svg")[0])&&(t.setAttribute("aria-hidden","true"),t.style.position="absolute",t.style.width=0,t.style.height=0,t.style.overflow="hidden",h=t,(l=document.body).firstChild?(T=h,(o=l.firstChild).parentNode.insertBefore(T,o)):l.appendChild(h))})}(window); ================================================ FILE: src/main/resources/static/assets/vendor/iconfont/iconfont.json ================================================ { "id": "1601062", "name": "1", "font_family": "iconfont", "css_prefix_text": "icon-", "description": "", "glyphs": [ { "icon_id": "1260974", "name": "bars", "font_class": "bars", "unicode": "e601", "unicode_decimal": 58881 }, { "icon_id": "1260980", "name": "calendar", "font_class": "calendar", "unicode": "e602", "unicode_decimal": 58882 }, { "icon_id": "1260983", "name": "camera", "font_class": "camera", "unicode": "e603", "unicode_decimal": 58883 }, { "icon_id": "1260989", "name": "check", "font_class": "check", "unicode": "e604", "unicode_decimal": 58884 }, { "icon_id": "1260991", "name": "check-square-o", "font_class": "check-square-o", "unicode": "e605", "unicode_decimal": 58885 }, { "icon_id": "1260995", "name": "clock-o", "font_class": "clock-o", "unicode": "e606", "unicode_decimal": 58886 }, { "icon_id": "1261002", "name": "500px", "font_class": "500px", "unicode": "e607", "unicode_decimal": 58887 }, { "icon_id": "1261005", "name": "address-book-o", "font_class": "address-book-o", "unicode": "e608", "unicode_decimal": 58888 }, { "icon_id": "1261044", "name": "address-book", "font_class": "address-book", "unicode": "e609", "unicode_decimal": 58889 }, { "icon_id": "1261052", "name": "address-card-o", "font_class": "address-card-o", "unicode": "e60a", "unicode_decimal": 58890 }, { "icon_id": "1261068", "name": "address-card", "font_class": "address-card", "unicode": "e60b", "unicode_decimal": 58891 }, { "icon_id": "1261071", "name": "adjust", "font_class": "adjust", "unicode": "e60c", "unicode_decimal": 58892 }, { "icon_id": "1261072", "name": "adn", "font_class": "adn", "unicode": "e60d", "unicode_decimal": 58893 }, { "icon_id": "1261076", "name": "align-center", "font_class": "align-center", "unicode": "e60e", "unicode_decimal": 58894 }, { "icon_id": "1261078", "name": "align-justify", "font_class": "align-justify", "unicode": "e60f", "unicode_decimal": 58895 }, { "icon_id": "1261080", "name": "align-left", "font_class": "align-left", "unicode": "e610", "unicode_decimal": 58896 }, { "icon_id": "1261081", "name": "align-right", "font_class": "align-right", "unicode": "e611", "unicode_decimal": 58897 }, { "icon_id": "1261082", "name": "amazon", "font_class": "amazon", "unicode": "e612", "unicode_decimal": 58898 }, { "icon_id": "1261084", "name": "ambulance", "font_class": "ambulance", "unicode": "e613", "unicode_decimal": 58899 }, { "icon_id": "1261086", "name": "american-sign-language-interpreting", "font_class": "american-sign-language-interpreting", "unicode": "e614", "unicode_decimal": 58900 }, { "icon_id": "1261087", "name": "anchor", "font_class": "anchor", "unicode": "e615", "unicode_decimal": 58901 }, { "icon_id": "1261088", "name": "android", "font_class": "android", "unicode": "e616", "unicode_decimal": 58902 }, { "icon_id": "1261089", "name": "angellist", "font_class": "angellist", "unicode": "e617", "unicode_decimal": 58903 }, { "icon_id": "1261090", "name": "angle-double-down", "font_class": "angle-double-down", "unicode": "e618", "unicode_decimal": 58904 }, { "icon_id": "1261091", "name": "angle-double-left", "font_class": "angle-double-left", "unicode": "e619", "unicode_decimal": 58905 }, { "icon_id": "1261093", "name": "angle-double-right", "font_class": "angle-double-right", "unicode": "e61a", "unicode_decimal": 58906 }, { "icon_id": "1261094", "name": "angle-double-up", "font_class": "angle-double-up", "unicode": "e61b", "unicode_decimal": 58907 }, { "icon_id": "1261097", "name": "angle-down", "font_class": "angle-down", "unicode": "e61c", "unicode_decimal": 58908 }, { "icon_id": "1261099", "name": "angle-left", "font_class": "angle-left", "unicode": "e61d", "unicode_decimal": 58909 }, { "icon_id": "1261100", "name": "angle-right", "font_class": "angle-right", "unicode": "e61e", "unicode_decimal": 58910 }, { "icon_id": "1261102", "name": "angle-up", "font_class": "angle-up", "unicode": "e61f", "unicode_decimal": 58911 }, { "icon_id": "1261103", "name": "apple", "font_class": "apple", "unicode": "e620", "unicode_decimal": 58912 }, { "icon_id": "1261104", "name": "archive", "font_class": "archive", "unicode": "e621", "unicode_decimal": 58913 }, { "icon_id": "1261106", "name": "area-chart", "font_class": "area-chart", "unicode": "e622", "unicode_decimal": 58914 }, { "icon_id": "1261108", "name": "arrow-circle-down", "font_class": "arrow-circle-down", "unicode": "e623", "unicode_decimal": 58915 }, { "icon_id": "1261109", "name": "arrow-circle-left", "font_class": "arrow-circle-left", "unicode": "e624", "unicode_decimal": 58916 }, { "icon_id": "1261110", "name": "arrow-circle-o-down", "font_class": "arrow-circle-o-down", "unicode": "e625", "unicode_decimal": 58917 }, { "icon_id": "1261111", "name": "arrow-circle-o-left", "font_class": "arrow-circle-o-left", "unicode": "e626", "unicode_decimal": 58918 }, { "icon_id": "1261112", "name": "arrow-circle-o-right", "font_class": "arrow-circle-o-right", "unicode": "e627", "unicode_decimal": 58919 }, { "icon_id": "1261113", "name": "arrow-circle-o-up", "font_class": "arrow-circle-o-up", "unicode": "e628", "unicode_decimal": 58920 }, { "icon_id": "1261115", "name": "arrow-circle-right", "font_class": "arrow-circle-right", "unicode": "e629", "unicode_decimal": 58921 }, { "icon_id": "1261116", "name": "arrow-circle-up", "font_class": "arrow-circle-up", "unicode": "e62a", "unicode_decimal": 58922 }, { "icon_id": "1261117", "name": "arrow-down", "font_class": "arrow-down", "unicode": "e62b", "unicode_decimal": 58923 }, { "icon_id": "1261119", "name": "arrow-left", "font_class": "arrow-left", "unicode": "e62c", "unicode_decimal": 58924 }, { "icon_id": "1261120", "name": "arrow-right", "font_class": "arrow-right", "unicode": "e62d", "unicode_decimal": 58925 }, { "icon_id": "1261121", "name": "arrow-up", "font_class": "arrow-up", "unicode": "e62e", "unicode_decimal": 58926 }, { "icon_id": "1261122", "name": "arrows-alt", "font_class": "arrows-alt", "unicode": "e62f", "unicode_decimal": 58927 }, { "icon_id": "1261124", "name": "arrows-h", "font_class": "arrows-h", "unicode": "e630", "unicode_decimal": 58928 }, { "icon_id": "1261128", "name": "arrows-v", "font_class": "arrows-v", "unicode": "e631", "unicode_decimal": 58929 }, { "icon_id": "1261129", "name": "arrows", "font_class": "arrows", "unicode": "e632", "unicode_decimal": 58930 }, { "icon_id": "1261130", "name": "asl-interpreting", "font_class": "asl-interpreting", "unicode": "e633", "unicode_decimal": 58931 }, { "icon_id": "1261132", "name": "assistive-listening-systems", "font_class": "assistive-listening-systems", "unicode": "e634", "unicode_decimal": 58932 }, { "icon_id": "1261150", "name": "asterisk", "font_class": "asterisk", "unicode": "e635", "unicode_decimal": 58933 }, { "icon_id": "1261151", "name": "at", "font_class": "at", "unicode": "e636", "unicode_decimal": 58934 }, { "icon_id": "1261152", "name": "audio-description", "font_class": "audio-description", "unicode": "e637", "unicode_decimal": 58935 }, { "icon_id": "1261153", "name": "automobile", "font_class": "automobile", "unicode": "e638", "unicode_decimal": 58936 }, { "icon_id": "1261155", "name": "backward", "font_class": "backward", "unicode": "e639", "unicode_decimal": 58937 }, { "icon_id": "1261156", "name": "balance-scale", "font_class": "balance-scale", "unicode": "e63a", "unicode_decimal": 58938 }, { "icon_id": "1261157", "name": "bandcamp", "font_class": "bandcamp", "unicode": "e63b", "unicode_decimal": 58939 }, { "icon_id": "1261158", "name": "bank", "font_class": "bank", "unicode": "e63c", "unicode_decimal": 58940 }, { "icon_id": "1261160", "name": "bars", "font_class": "bars1", "unicode": "e63d", "unicode_decimal": 58941 }, { "icon_id": "1261161", "name": "bar-chart", "font_class": "bar-chart", "unicode": "e63e", "unicode_decimal": 58942 }, { "icon_id": "1261162", "name": "bar-chart-o", "font_class": "bar-chart-o", "unicode": "e63f", "unicode_decimal": 58943 }, { "icon_id": "1261163", "name": "bathtub", "font_class": "bathtub", "unicode": "e640", "unicode_decimal": 58944 }, { "icon_id": "1261164", "name": "barcode", "font_class": "barcode", "unicode": "e641", "unicode_decimal": 58945 }, { "icon_id": "1261165", "name": "bath", "font_class": "bath", "unicode": "e642", "unicode_decimal": 58946 }, { "icon_id": "1261166", "name": "battery-0", "font_class": "battery-0", "unicode": "e643", "unicode_decimal": 58947 }, { "icon_id": "1261167", "name": "battery-1", "font_class": "battery-1", "unicode": "e644", "unicode_decimal": 58948 }, { "icon_id": "1261168", "name": "battery-2", "font_class": "battery-2", "unicode": "e645", "unicode_decimal": 58949 }, { "icon_id": "1261169", "name": "battery-4", "font_class": "battery-4", "unicode": "e646", "unicode_decimal": 58950 }, { "icon_id": "1261170", "name": "battery-3", "font_class": "battery-3", "unicode": "e647", "unicode_decimal": 58951 }, { "icon_id": "1261171", "name": "battery-half", "font_class": "battery-half", "unicode": "e648", "unicode_decimal": 58952 }, { "icon_id": "1261172", "name": "battery-empty", "font_class": "battery-empty", "unicode": "e649", "unicode_decimal": 58953 }, { "icon_id": "1261173", "name": "battery-full", "font_class": "battery-full", "unicode": "e64a", "unicode_decimal": 58954 }, { "icon_id": "1261174", "name": "battery-quarter", "font_class": "battery-quarter", "unicode": "e64b", "unicode_decimal": 58955 }, { "icon_id": "1261175", "name": "battery-three-quarters", "font_class": "battery-three-quarters", "unicode": "e64c", "unicode_decimal": 58956 }, { "icon_id": "1261176", "name": "battery", "font_class": "battery", "unicode": "e64d", "unicode_decimal": 58957 }, { "icon_id": "1261183", "name": "beer", "font_class": "beer", "unicode": "e64e", "unicode_decimal": 58958 }, { "icon_id": "1261184", "name": "bed", "font_class": "bed", "unicode": "e64f", "unicode_decimal": 58959 }, { "icon_id": "1261185", "name": "behance", "font_class": "behance", "unicode": "e650", "unicode_decimal": 58960 }, { "icon_id": "1261186", "name": "behance-square", "font_class": "behance-square", "unicode": "e651", "unicode_decimal": 58961 }, { "icon_id": "1261187", "name": "bell-o", "font_class": "bell-o", "unicode": "e652", "unicode_decimal": 58962 }, { "icon_id": "1261188", "name": "bell-slash-o", "font_class": "bell-slash-o", "unicode": "e653", "unicode_decimal": 58963 }, { "icon_id": "1261189", "name": "bell-slash", "font_class": "bell-slash", "unicode": "e654", "unicode_decimal": 58964 }, { "icon_id": "1261190", "name": "bicycle", "font_class": "bicycle", "unicode": "e655", "unicode_decimal": 58965 }, { "icon_id": "1261191", "name": "bitbucket-square", "font_class": "bitbucket-square", "unicode": "e656", "unicode_decimal": 58966 }, { "icon_id": "1261192", "name": "binoculars", "font_class": "binoculars", "unicode": "e657", "unicode_decimal": 58967 }, { "icon_id": "1261193", "name": "bell", "font_class": "bell", "unicode": "e658", "unicode_decimal": 58968 }, { "icon_id": "1261194", "name": "birthday-cake", "font_class": "birthday-cake", "unicode": "e659", "unicode_decimal": 58969 }, { "icon_id": "1261195", "name": "bitbucket", "font_class": "bitbucket", "unicode": "e65a", "unicode_decimal": 58970 }, { "icon_id": "1261196", "name": "black-tie", "font_class": "black-tie", "unicode": "e65b", "unicode_decimal": 58971 }, { "icon_id": "1261197", "name": "bluetooth-b", "font_class": "bluetooth-b", "unicode": "e65c", "unicode_decimal": 58972 }, { "icon_id": "1261198", "name": "bitcoin", "font_class": "bitcoin", "unicode": "e65d", "unicode_decimal": 58973 }, { "icon_id": "1261199", "name": "blind", "font_class": "blind", "unicode": "e65e", "unicode_decimal": 58974 }, { "icon_id": "1261200", "name": "bluetooth", "font_class": "bluetooth", "unicode": "e65f", "unicode_decimal": 58975 }, { "icon_id": "1261201", "name": "bold", "font_class": "bold", "unicode": "e660", "unicode_decimal": 58976 }, { "icon_id": "1261202", "name": "bolt", "font_class": "bolt", "unicode": "e661", "unicode_decimal": 58977 }, { "icon_id": "1261203", "name": "bomb", "font_class": "bomb", "unicode": "e662", "unicode_decimal": 58978 }, { "icon_id": "1261204", "name": "book", "font_class": "book", "unicode": "e663", "unicode_decimal": 58979 }, { "icon_id": "1261208", "name": "bug", "font_class": "bug", "unicode": "e664", "unicode_decimal": 58980 }, { "icon_id": "1261209", "name": "bookmark-o", "font_class": "bookmark-o", "unicode": "e665", "unicode_decimal": 58981 }, { "icon_id": "1261210", "name": "btc", "font_class": "btc", "unicode": "e666", "unicode_decimal": 58982 }, { "icon_id": "1261211", "name": "bookmark", "font_class": "bookmark", "unicode": "e667", "unicode_decimal": 58983 }, { "icon_id": "1261212", "name": "briefcase", "font_class": "briefcase", "unicode": "e668", "unicode_decimal": 58984 }, { "icon_id": "1261213", "name": "braille", "font_class": "braille", "unicode": "e669", "unicode_decimal": 58985 }, { "icon_id": "1261214", "name": "bullhorn", "font_class": "bullhorn", "unicode": "e66a", "unicode_decimal": 58986 }, { "icon_id": "1261215", "name": "bullseye", "font_class": "bullseye", "unicode": "e66b", "unicode_decimal": 58987 }, { "icon_id": "1261216", "name": "bus", "font_class": "bus", "unicode": "e66c", "unicode_decimal": 58988 }, { "icon_id": "1261217", "name": "building", "font_class": "building", "unicode": "e66d", "unicode_decimal": 58989 }, { "icon_id": "1261218", "name": "cab", "font_class": "cab", "unicode": "e66e", "unicode_decimal": 58990 }, { "icon_id": "1261219", "name": "buysellads", "font_class": "buysellads", "unicode": "e66f", "unicode_decimal": 58991 }, { "icon_id": "1261220", "name": "building-o", "font_class": "building-o", "unicode": "e670", "unicode_decimal": 58992 }, { "icon_id": "1261230", "name": "calendar-plus-o", "font_class": "calendar-plus-o", "unicode": "e671", "unicode_decimal": 58993 }, { "icon_id": "1261231", "name": "calendar-o", "font_class": "calendar-o", "unicode": "e672", "unicode_decimal": 58994 }, { "icon_id": "1261232", "name": "calendar-times-o", "font_class": "calendar-times-o", "unicode": "e673", "unicode_decimal": 58995 }, { "icon_id": "1261233", "name": "calendar-check-o", "font_class": "calendar-check-o", "unicode": "e674", "unicode_decimal": 58996 }, { "icon_id": "1261234", "name": "calendar-minus-o", "font_class": "calendar-minus-o", "unicode": "e675", "unicode_decimal": 58997 }, { "icon_id": "1261235", "name": "calculator", "font_class": "calculator", "unicode": "e676", "unicode_decimal": 58998 }, { "icon_id": "1261236", "name": "caret-down", "font_class": "caret-down", "unicode": "e677", "unicode_decimal": 58999 }, { "icon_id": "1261237", "name": "caret-left", "font_class": "caret-left", "unicode": "e678", "unicode_decimal": 59000 }, { "icon_id": "1261238", "name": "car", "font_class": "car", "unicode": "e679", "unicode_decimal": 59001 }, { "icon_id": "1261240", "name": "camera-retro", "font_class": "camera-retro", "unicode": "e67a", "unicode_decimal": 59002 }, { "icon_id": "1261242", "name": "caret-right", "font_class": "caret-right", "unicode": "e67b", "unicode_decimal": 59003 }, { "icon_id": "1261243", "name": "caret-square-o-left", "font_class": "caret-square-o-left", "unicode": "e67c", "unicode_decimal": 59004 }, { "icon_id": "1261244", "name": "caret-square-o-right", "font_class": "caret-square-o-right", "unicode": "e67d", "unicode_decimal": 59005 }, { "icon_id": "1261245", "name": "caret-up", "font_class": "caret-up", "unicode": "e67e", "unicode_decimal": 59006 }, { "icon_id": "1261246", "name": "caret-square-o-up", "font_class": "caret-square-o-up", "unicode": "e67f", "unicode_decimal": 59007 }, { "icon_id": "1261247", "name": "cart-plus", "font_class": "cart-plus", "unicode": "e680", "unicode_decimal": 59008 }, { "icon_id": "1261248", "name": "cart-arrow-down", "font_class": "cart-arrow-down", "unicode": "e681", "unicode_decimal": 59009 }, { "icon_id": "1261249", "name": "caret-square-o-down", "font_class": "caret-square-o-down", "unicode": "e682", "unicode_decimal": 59010 }, { "icon_id": "1261251", "name": "cc-discover", "font_class": "cc-discover", "unicode": "e683", "unicode_decimal": 59011 }, { "icon_id": "1261252", "name": "cc-diners-club", "font_class": "cc-diners-club", "unicode": "e684", "unicode_decimal": 59012 }, { "icon_id": "1261253", "name": "cc-paypal", "font_class": "cc-paypal", "unicode": "e685", "unicode_decimal": 59013 }, { "icon_id": "1261254", "name": "cc-jcb", "font_class": "cc-jcb", "unicode": "e686", "unicode_decimal": 59014 }, { "icon_id": "1261255", "name": "cc-mastercard", "font_class": "cc-mastercard", "unicode": "e687", "unicode_decimal": 59015 }, { "icon_id": "1261256", "name": "cc-amex", "font_class": "cc-amex", "unicode": "e688", "unicode_decimal": 59016 }, { "icon_id": "1261257", "name": "cc", "font_class": "cc", "unicode": "e689", "unicode_decimal": 59017 }, { "icon_id": "1261258", "name": "cc-visa", "font_class": "cc-visa", "unicode": "e68a", "unicode_decimal": 59018 }, { "icon_id": "1261259", "name": "cc-stripe", "font_class": "cc-stripe", "unicode": "e68b", "unicode_decimal": 59019 }, { "icon_id": "1261260", "name": "check", "font_class": "check1", "unicode": "e68c", "unicode_decimal": 59020 }, { "icon_id": "1261261", "name": "certificate", "font_class": "certificate", "unicode": "e68d", "unicode_decimal": 59021 }, { "icon_id": "1261262", "name": "check-circle", "font_class": "check-circle", "unicode": "e68e", "unicode_decimal": 59022 }, { "icon_id": "1261263", "name": "check-circle-o", "font_class": "check-circle-o", "unicode": "e68f", "unicode_decimal": 59023 }, { "icon_id": "1261264", "name": "chain-broken", "font_class": "chain-broken", "unicode": "e690", "unicode_decimal": 59024 }, { "icon_id": "1261265", "name": "chain", "font_class": "chain", "unicode": "e691", "unicode_decimal": 59025 }, { "icon_id": "1261266", "name": "chevron-circle-down", "font_class": "chevron-circle-down", "unicode": "e692", "unicode_decimal": 59026 }, { "icon_id": "1261267", "name": "chevron-circle-left", "font_class": "chevron-circle-left", "unicode": "e693", "unicode_decimal": 59027 }, { "icon_id": "1261268", "name": "chevron-circle-right", "font_class": "chevron-circle-right", "unicode": "e694", "unicode_decimal": 59028 }, { "icon_id": "1261269", "name": "chevron-down", "font_class": "chevron-down", "unicode": "e695", "unicode_decimal": 59029 }, { "icon_id": "1261270", "name": "chevron-circle-up", "font_class": "chevron-circle-up", "unicode": "e696", "unicode_decimal": 59030 }, { "icon_id": "1261271", "name": "chevron-left", "font_class": "chevron-left", "unicode": "e697", "unicode_decimal": 59031 }, { "icon_id": "1261272", "name": "chevron-right", "font_class": "chevron-right", "unicode": "e698", "unicode_decimal": 59032 }, { "icon_id": "1261273", "name": "chevron-up", "font_class": "chevron-up", "unicode": "e699", "unicode_decimal": 59033 }, { "icon_id": "1261274", "name": "child", "font_class": "child", "unicode": "e69a", "unicode_decimal": 59034 }, { "icon_id": "1261277", "name": "circle-thin", "font_class": "circle-thin", "unicode": "e69b", "unicode_decimal": 59035 }, { "icon_id": "1261278", "name": "circle-o-notch", "font_class": "circle-o-notch", "unicode": "e69c", "unicode_decimal": 59036 }, { "icon_id": "1261279", "name": "chrome", "font_class": "chrome", "unicode": "e69d", "unicode_decimal": 59037 }, { "icon_id": "1261280", "name": "circle-o", "font_class": "circle-o", "unicode": "e69e", "unicode_decimal": 59038 }, { "icon_id": "1261281", "name": "clipboard", "font_class": "clipboard", "unicode": "e69f", "unicode_decimal": 59039 }, { "icon_id": "1261282", "name": "circle", "font_class": "circle", "unicode": "e6a0", "unicode_decimal": 59040 }, { "icon_id": "1261283", "name": "cloud", "font_class": "cloud", "unicode": "e6a1", "unicode_decimal": 59041 }, { "icon_id": "1261284", "name": "close", "font_class": "close", "unicode": "e6a2", "unicode_decimal": 59042 }, { "icon_id": "1261285", "name": "cloud-upload", "font_class": "cloud-upload", "unicode": "e6a3", "unicode_decimal": 59043 }, { "icon_id": "1261286", "name": "clone", "font_class": "clone", "unicode": "e6a4", "unicode_decimal": 59044 }, { "icon_id": "1261287", "name": "cloud-download", "font_class": "cloud-download", "unicode": "e6a5", "unicode_decimal": 59045 }, { "icon_id": "1261288", "name": "clock-o", "font_class": "clock-o1", "unicode": "e6a6", "unicode_decimal": 59046 }, { "icon_id": "1261289", "name": "cny", "font_class": "cny", "unicode": "e6a7", "unicode_decimal": 59047 }, { "icon_id": "1261480", "name": "code-fork", "font_class": "code-fork", "unicode": "e6a8", "unicode_decimal": 59048 }, { "icon_id": "1261481", "name": "codiepie", "font_class": "codiepie", "unicode": "e6a9", "unicode_decimal": 59049 }, { "icon_id": "1261482", "name": "codepen", "font_class": "codepen", "unicode": "e6aa", "unicode_decimal": 59050 }, { "icon_id": "1261483", "name": "code", "font_class": "code", "unicode": "e6ab", "unicode_decimal": 59051 }, { "icon_id": "1261484", "name": "cog", "font_class": "cog", "unicode": "e6ac", "unicode_decimal": 59052 }, { "icon_id": "1261485", "name": "coffee", "font_class": "coffee", "unicode": "e6ad", "unicode_decimal": 59053 }, { "icon_id": "1261486", "name": "columns", "font_class": "columns", "unicode": "e6ae", "unicode_decimal": 59054 }, { "icon_id": "1261487", "name": "comment-o", "font_class": "comment-o", "unicode": "e6af", "unicode_decimal": 59055 }, { "icon_id": "1261488", "name": "commenting-o", "font_class": "commenting-o", "unicode": "e6b0", "unicode_decimal": 59056 }, { "icon_id": "1261489", "name": "commenting", "font_class": "commenting", "unicode": "e6b1", "unicode_decimal": 59057 }, { "icon_id": "1261490", "name": "comment", "font_class": "comment", "unicode": "e6b2", "unicode_decimal": 59058 }, { "icon_id": "1261491", "name": "cogs", "font_class": "cogs", "unicode": "e6b3", "unicode_decimal": 59059 }, { "icon_id": "1261492", "name": "compass", "font_class": "compass", "unicode": "e6b4", "unicode_decimal": 59060 }, { "icon_id": "1261493", "name": "compress", "font_class": "compress", "unicode": "e6b5", "unicode_decimal": 59061 }, { "icon_id": "1261494", "name": "comments", "font_class": "comments", "unicode": "e6b6", "unicode_decimal": 59062 }, { "icon_id": "1261495", "name": "comments-o", "font_class": "comments-o", "unicode": "e6b7", "unicode_decimal": 59063 }, { "icon_id": "1261496", "name": "connectdevelop", "font_class": "connectdevelop", "unicode": "e6b8", "unicode_decimal": 59064 }, { "icon_id": "1261497", "name": "copy", "font_class": "copy", "unicode": "e6b9", "unicode_decimal": 59065 }, { "icon_id": "1261498", "name": "contao", "font_class": "contao", "unicode": "e6ba", "unicode_decimal": 59066 }, { "icon_id": "1261500", "name": "copyright", "font_class": "copyright", "unicode": "e6bb", "unicode_decimal": 59067 }, { "icon_id": "1261501", "name": "credit-card-alt", "font_class": "credit-card-alt", "unicode": "e6bc", "unicode_decimal": 59068 }, { "icon_id": "1261502", "name": "credit-card", "font_class": "credit-card", "unicode": "e6bd", "unicode_decimal": 59069 }, { "icon_id": "1261503", "name": "crop", "font_class": "crop", "unicode": "e6be", "unicode_decimal": 59070 }, { "icon_id": "1261504", "name": "creative-commons", "font_class": "creative-commons", "unicode": "e6bf", "unicode_decimal": 59071 }, { "icon_id": "1261505", "name": "crosshairs", "font_class": "crosshairs", "unicode": "e6c0", "unicode_decimal": 59072 }, { "icon_id": "1261506", "name": "css3", "font_class": "css3", "unicode": "e6c1", "unicode_decimal": 59073 }, { "icon_id": "1261507", "name": "cube", "font_class": "cube", "unicode": "e6c2", "unicode_decimal": 59074 }, { "icon_id": "1261508", "name": "cutlery", "font_class": "cutlery", "unicode": "e6c3", "unicode_decimal": 59075 }, { "icon_id": "1261509", "name": "cut", "font_class": "cut", "unicode": "e6c4", "unicode_decimal": 59076 }, { "icon_id": "1261510", "name": "dashboard", "font_class": "dashboard", "unicode": "e6c5", "unicode_decimal": 59077 }, { "icon_id": "1261511", "name": "dashcube", "font_class": "dashcube", "unicode": "e6c6", "unicode_decimal": 59078 }, { "icon_id": "1261512", "name": "cubes", "font_class": "cubes", "unicode": "e6c7", "unicode_decimal": 59079 }, { "icon_id": "1261513", "name": "database", "font_class": "database", "unicode": "e6c8", "unicode_decimal": 59080 }, { "icon_id": "1261514", "name": "deaf", "font_class": "deaf", "unicode": "e6c9", "unicode_decimal": 59081 }, { "icon_id": "1261544", "name": "delicious", "font_class": "delicious", "unicode": "e6ca", "unicode_decimal": 59082 }, { "icon_id": "1261545", "name": "deviantart", "font_class": "deviantart", "unicode": "e6cb", "unicode_decimal": 59083 }, { "icon_id": "1261546", "name": "diamond", "font_class": "diamond", "unicode": "e6cc", "unicode_decimal": 59084 }, { "icon_id": "1261547", "name": "dedent", "font_class": "dedent", "unicode": "e6cd", "unicode_decimal": 59085 }, { "icon_id": "1261548", "name": "desktop", "font_class": "desktop", "unicode": "e6ce", "unicode_decimal": 59086 }, { "icon_id": "1261549", "name": "deafness", "font_class": "deafness", "unicode": "e6cf", "unicode_decimal": 59087 }, { "icon_id": "1261550", "name": "drivers-license-o", "font_class": "drivers-license-o", "unicode": "e6d0", "unicode_decimal": 59088 }, { "icon_id": "1261551", "name": "digg", "font_class": "digg", "unicode": "e6d1", "unicode_decimal": 59089 }, { "icon_id": "1261552", "name": "dribbble", "font_class": "dribbble", "unicode": "e6d2", "unicode_decimal": 59090 }, { "icon_id": "1261553", "name": "download", "font_class": "download", "unicode": "e6d3", "unicode_decimal": 59091 }, { "icon_id": "1261554", "name": "dollar", "font_class": "dollar", "unicode": "e6d4", "unicode_decimal": 59092 }, { "icon_id": "1261555", "name": "dot-circle-o", "font_class": "dot-circle-o", "unicode": "e6d5", "unicode_decimal": 59093 }, { "icon_id": "1261556", "name": "edit", "font_class": "edit", "unicode": "e6d6", "unicode_decimal": 59094 }, { "icon_id": "1261557", "name": "dropbox", "font_class": "dropbox", "unicode": "e6d7", "unicode_decimal": 59095 }, { "icon_id": "1261558", "name": "edge", "font_class": "edge", "unicode": "e6d8", "unicode_decimal": 59096 }, { "icon_id": "1261559", "name": "drupal", "font_class": "drupal", "unicode": "e6d9", "unicode_decimal": 59097 }, { "icon_id": "1261560", "name": "drivers-license", "font_class": "drivers-license", "unicode": "e6da", "unicode_decimal": 59098 }, { "icon_id": "1261563", "name": "eject", "font_class": "eject", "unicode": "e6db", "unicode_decimal": 59099 }, { "icon_id": "1261564", "name": "ellipsis-h", "font_class": "ellipsis-h", "unicode": "e6dc", "unicode_decimal": 59100 }, { "icon_id": "1261565", "name": "envelope-o", "font_class": "envelope-o", "unicode": "e6dd", "unicode_decimal": 59101 }, { "icon_id": "1261566", "name": "ellipsis-v", "font_class": "ellipsis-v", "unicode": "e6de", "unicode_decimal": 59102 }, { "icon_id": "1261567", "name": "eercast", "font_class": "eercast", "unicode": "e6df", "unicode_decimal": 59103 }, { "icon_id": "1261568", "name": "empire", "font_class": "empire", "unicode": "e6e0", "unicode_decimal": 59104 }, { "icon_id": "1261569", "name": "envelope-open-o", "font_class": "envelope-open-o", "unicode": "e6e1", "unicode_decimal": 59105 }, { "icon_id": "1261570", "name": "envelope-open", "font_class": "envelope-open", "unicode": "e6e2", "unicode_decimal": 59106 }, { "icon_id": "1261571", "name": "envelope", "font_class": "envelope", "unicode": "e6e3", "unicode_decimal": 59107 }, { "icon_id": "1261572", "name": "envelope-square", "font_class": "envelope-square", "unicode": "e6e4", "unicode_decimal": 59108 }, { "icon_id": "1261573", "name": "envira", "font_class": "envira", "unicode": "e6e5", "unicode_decimal": 59109 }, { "icon_id": "1261574", "name": "etsy", "font_class": "etsy", "unicode": "e6e6", "unicode_decimal": 59110 }, { "icon_id": "1261575", "name": "eraser", "font_class": "eraser", "unicode": "e6e7", "unicode_decimal": 59111 }, { "icon_id": "1261576", "name": "eur", "font_class": "eur", "unicode": "e6e8", "unicode_decimal": 59112 }, { "icon_id": "1261580", "name": "euro", "font_class": "euro", "unicode": "e6e9", "unicode_decimal": 59113 }, { "icon_id": "1261581", "name": "exchange", "font_class": "exchange", "unicode": "e6ea", "unicode_decimal": 59114 }, { "icon_id": "1261582", "name": "exclamation-triangle", "font_class": "exclamation-triangle", "unicode": "e6eb", "unicode_decimal": 59115 }, { "icon_id": "1261583", "name": "expand", "font_class": "expand", "unicode": "e6ec", "unicode_decimal": 59116 }, { "icon_id": "1261584", "name": "exclamation", "font_class": "exclamation", "unicode": "e6ed", "unicode_decimal": 59117 }, { "icon_id": "1261585", "name": "exclamation-circle", "font_class": "exclamation-circle", "unicode": "e6ee", "unicode_decimal": 59118 }, { "icon_id": "1261586", "name": "expeditedssl", "font_class": "expeditedssl", "unicode": "e6ef", "unicode_decimal": 59119 }, { "icon_id": "1261587", "name": "external-link-square", "font_class": "external-link-square", "unicode": "e6f0", "unicode_decimal": 59120 }, { "icon_id": "1261588", "name": "eyedropper", "font_class": "eyedropper", "unicode": "e6f1", "unicode_decimal": 59121 }, { "icon_id": "1261589", "name": "external-link", "font_class": "external-link", "unicode": "e6f2", "unicode_decimal": 59122 }, { "icon_id": "1261590", "name": "eye", "font_class": "eye", "unicode": "e6f3", "unicode_decimal": 59123 }, { "icon_id": "1261591", "name": "eye-slash", "font_class": "eye-slash", "unicode": "e6f4", "unicode_decimal": 59124 }, { "icon_id": "1261592", "name": "fa", "font_class": "fa", "unicode": "e6f5", "unicode_decimal": 59125 }, { "icon_id": "1261593", "name": "facebook-official", "font_class": "facebook-official", "unicode": "e6f6", "unicode_decimal": 59126 }, { "icon_id": "1261594", "name": "facebook-f", "font_class": "facebook-f", "unicode": "e6f7", "unicode_decimal": 59127 }, { "icon_id": "1261595", "name": "facebook-square", "font_class": "facebook-square", "unicode": "e6f8", "unicode_decimal": 59128 }, { "icon_id": "1261596", "name": "facebook", "font_class": "facebook", "unicode": "e6f9", "unicode_decimal": 59129 }, { "icon_id": "1261597", "name": "fast-backward", "font_class": "fast-backward", "unicode": "e6fa", "unicode_decimal": 59130 }, { "icon_id": "1261598", "name": "fast-forward", "font_class": "fast-forward", "unicode": "e6fb", "unicode_decimal": 59131 }, { "icon_id": "1261635", "name": "feed", "font_class": "feed", "unicode": "e6fc", "unicode_decimal": 59132 }, { "icon_id": "1261636", "name": "file-archive-o", "font_class": "file-archive-o", "unicode": "e6fd", "unicode_decimal": 59133 }, { "icon_id": "1261637", "name": "female", "font_class": "female", "unicode": "e6fe", "unicode_decimal": 59134 }, { "icon_id": "1261638", "name": "file-audio-o", "font_class": "file-audio-o", "unicode": "e6ff", "unicode_decimal": 59135 }, { "icon_id": "1261639", "name": "fighter-jet", "font_class": "fighter-jet", "unicode": "e700", "unicode_decimal": 59136 }, { "icon_id": "1261641", "name": "fax", "font_class": "fax", "unicode": "e701", "unicode_decimal": 59137 }, { "icon_id": "1261644", "name": "file-code-o", "font_class": "file-code-o", "unicode": "e702", "unicode_decimal": 59138 }, { "icon_id": "1261645", "name": "file-movie-o", "font_class": "file-movie-o", "unicode": "e703", "unicode_decimal": 59139 }, { "icon_id": "1261646", "name": "file-image-o", "font_class": "file-image-o", "unicode": "e704", "unicode_decimal": 59140 }, { "icon_id": "1261647", "name": "file-excel-o", "font_class": "file-excel-o", "unicode": "e705", "unicode_decimal": 59141 }, { "icon_id": "1261648", "name": "file-o", "font_class": "file-o", "unicode": "e706", "unicode_decimal": 59142 }, { "icon_id": "1261649", "name": "file-photo-o", "font_class": "file-photo-o", "unicode": "e707", "unicode_decimal": 59143 }, { "icon_id": "1261650", "name": "file-pdf-o", "font_class": "file-pdf-o", "unicode": "e708", "unicode_decimal": 59144 }, { "icon_id": "1261652", "name": "file-picture-o", "font_class": "file-picture-o", "unicode": "e709", "unicode_decimal": 59145 }, { "icon_id": "1261653", "name": "file-sound-o", "font_class": "file-sound-o", "unicode": "e70a", "unicode_decimal": 59146 }, { "icon_id": "1261654", "name": "file-powerpoint-o", "font_class": "file-powerpoint-o", "unicode": "e70b", "unicode_decimal": 59147 }, { "icon_id": "1261656", "name": "file-text", "font_class": "file-text", "unicode": "e70c", "unicode_decimal": 59148 }, { "icon_id": "1261657", "name": "file-text-o", "font_class": "file-text-o", "unicode": "e70d", "unicode_decimal": 59149 }, { "icon_id": "1261695", "name": "file", "font_class": "file", "unicode": "e70e", "unicode_decimal": 59150 }, { "icon_id": "1261696", "name": "file-video-o", "font_class": "file-video-o", "unicode": "e70f", "unicode_decimal": 59151 }, { "icon_id": "1261697", "name": "files-o", "font_class": "files-o", "unicode": "e710", "unicode_decimal": 59152 }, { "icon_id": "1261698", "name": "file-zip-o", "font_class": "file-zip-o", "unicode": "e711", "unicode_decimal": 59153 }, { "icon_id": "1261699", "name": "file-word-o", "font_class": "file-word-o", "unicode": "e712", "unicode_decimal": 59154 }, { "icon_id": "1261700", "name": "film", "font_class": "film", "unicode": "e713", "unicode_decimal": 59155 }, { "icon_id": "1261701", "name": "filter", "font_class": "filter", "unicode": "e714", "unicode_decimal": 59156 }, { "icon_id": "1261702", "name": "fire", "font_class": "fire", "unicode": "e715", "unicode_decimal": 59157 }, { "icon_id": "1261703", "name": "fire-extinguisher", "font_class": "fire-extinguisher", "unicode": "e716", "unicode_decimal": 59158 }, { "icon_id": "1261704", "name": "flag-checkered", "font_class": "flag-checkered", "unicode": "e717", "unicode_decimal": 59159 }, { "icon_id": "1261705", "name": "firefox", "font_class": "firefox", "unicode": "e718", "unicode_decimal": 59160 }, { "icon_id": "1261706", "name": "first-order", "font_class": "first-order", "unicode": "e719", "unicode_decimal": 59161 }, { "icon_id": "1261707", "name": "flash", "font_class": "flash", "unicode": "e71a", "unicode_decimal": 59162 }, { "icon_id": "1261708", "name": "flag", "font_class": "flag", "unicode": "e71b", "unicode_decimal": 59163 }, { "icon_id": "1261709", "name": "flag-o", "font_class": "flag-o", "unicode": "e71c", "unicode_decimal": 59164 }, { "icon_id": "1261710", "name": "flask", "font_class": "flask", "unicode": "e71d", "unicode_decimal": 59165 }, { "icon_id": "1261711", "name": "flickr", "font_class": "flickr", "unicode": "e71e", "unicode_decimal": 59166 }, { "icon_id": "1261714", "name": "folder-open", "font_class": "folder-open", "unicode": "e71f", "unicode_decimal": 59167 }, { "icon_id": "1261715", "name": "folder-o", "font_class": "folder-o", "unicode": "e720", "unicode_decimal": 59168 }, { "icon_id": "1261716", "name": "font-awesome", "font_class": "font-awesome", "unicode": "e721", "unicode_decimal": 59169 }, { "icon_id": "1261717", "name": "folder", "font_class": "folder", "unicode": "e722", "unicode_decimal": 59170 }, { "icon_id": "1261718", "name": "floppy-o", "font_class": "floppy-o", "unicode": "e723", "unicode_decimal": 59171 }, { "icon_id": "1261719", "name": "folder-open-o", "font_class": "folder-open-o", "unicode": "e724", "unicode_decimal": 59172 }, { "icon_id": "1261720", "name": "fonticons", "font_class": "fonticons", "unicode": "e725", "unicode_decimal": 59173 }, { "icon_id": "1261721", "name": "font", "font_class": "font", "unicode": "e726", "unicode_decimal": 59174 }, { "icon_id": "1261722", "name": "forumbee", "font_class": "forumbee", "unicode": "e727", "unicode_decimal": 59175 }, { "icon_id": "1261723", "name": "fort-awesome", "font_class": "fort-awesome", "unicode": "e728", "unicode_decimal": 59176 }, { "icon_id": "1261724", "name": "forward", "font_class": "forward", "unicode": "e729", "unicode_decimal": 59177 }, { "icon_id": "1261725", "name": "foursquare", "font_class": "foursquare", "unicode": "e72a", "unicode_decimal": 59178 }, { "icon_id": "1261726", "name": "free-code-camp", "font_class": "free-code-camp", "unicode": "e72b", "unicode_decimal": 59179 }, { "icon_id": "1261727", "name": "frown-o", "font_class": "frown-o", "unicode": "e72c", "unicode_decimal": 59180 }, { "icon_id": "1261728", "name": "futbol-o", "font_class": "futbol-o", "unicode": "e72d", "unicode_decimal": 59181 }, { "icon_id": "1261729", "name": "gamepad", "font_class": "gamepad", "unicode": "e72e", "unicode_decimal": 59182 }, { "icon_id": "1261730", "name": "gavel", "font_class": "gavel", "unicode": "e72f", "unicode_decimal": 59183 }, { "icon_id": "1261731", "name": "gbp", "font_class": "gbp", "unicode": "e730", "unicode_decimal": 59184 }, { "icon_id": "1261732", "name": "ge", "font_class": "ge", "unicode": "e731", "unicode_decimal": 59185 }, { "icon_id": "1261733", "name": "gear", "font_class": "gear", "unicode": "e732", "unicode_decimal": 59186 }, { "icon_id": "1261734", "name": "gears", "font_class": "gears", "unicode": "e733", "unicode_decimal": 59187 }, { "icon_id": "1261735", "name": "genderless", "font_class": "genderless", "unicode": "e734", "unicode_decimal": 59188 }, { "icon_id": "1261736", "name": "get-pocket", "font_class": "get-pocket", "unicode": "e735", "unicode_decimal": 59189 }, { "icon_id": "1261737", "name": "gg-circle", "font_class": "gg-circle", "unicode": "e736", "unicode_decimal": 59190 }, { "icon_id": "1261746", "name": "gift", "font_class": "gift", "unicode": "e737", "unicode_decimal": 59191 }, { "icon_id": "1261747", "name": "gg", "font_class": "gg", "unicode": "e738", "unicode_decimal": 59192 }, { "icon_id": "1261748", "name": "git-square", "font_class": "git-square", "unicode": "e739", "unicode_decimal": 59193 }, { "icon_id": "1261749", "name": "git", "font_class": "git", "unicode": "e73a", "unicode_decimal": 59194 }, { "icon_id": "1261750", "name": "github-alt", "font_class": "github-alt", "unicode": "e73b", "unicode_decimal": 59195 }, { "icon_id": "1261751", "name": "github-square", "font_class": "github-square", "unicode": "e73c", "unicode_decimal": 59196 }, { "icon_id": "1261752", "name": "github", "font_class": "github", "unicode": "e73d", "unicode_decimal": 59197 }, { "icon_id": "1261753", "name": "gitlab", "font_class": "gitlab", "unicode": "e73e", "unicode_decimal": 59198 }, { "icon_id": "1261754", "name": "gittip", "font_class": "gittip", "unicode": "e73f", "unicode_decimal": 59199 }, { "icon_id": "1261755", "name": "glass", "font_class": "glass", "unicode": "e740", "unicode_decimal": 59200 }, { "icon_id": "1261756", "name": "glide-g", "font_class": "glide-g", "unicode": "e741", "unicode_decimal": 59201 }, { "icon_id": "1261757", "name": "glide", "font_class": "glide", "unicode": "e742", "unicode_decimal": 59202 }, { "icon_id": "1261758", "name": "globe", "font_class": "globe", "unicode": "e743", "unicode_decimal": 59203 }, { "icon_id": "1261759", "name": "google-plus-circle", "font_class": "google-plus-circle", "unicode": "e744", "unicode_decimal": 59204 }, { "icon_id": "1261760", "name": "google-plus-official", "font_class": "google-plus-official", "unicode": "e745", "unicode_decimal": 59205 }, { "icon_id": "1261761", "name": "google-plus-square", "font_class": "google-plus-square", "unicode": "e746", "unicode_decimal": 59206 }, { "icon_id": "1261762", "name": "google-plus", "font_class": "google-plus", "unicode": "e747", "unicode_decimal": 59207 }, { "icon_id": "1261763", "name": "google-wallet", "font_class": "google-wallet", "unicode": "e748", "unicode_decimal": 59208 }, { "icon_id": "1261764", "name": "google", "font_class": "google", "unicode": "e749", "unicode_decimal": 59209 }, { "icon_id": "1261765", "name": "graduation-cap", "font_class": "graduation-cap", "unicode": "e74a", "unicode_decimal": 59210 }, { "icon_id": "1261766", "name": "gratipay", "font_class": "gratipay", "unicode": "e74b", "unicode_decimal": 59211 }, { "icon_id": "1261767", "name": "grav", "font_class": "grav", "unicode": "e74c", "unicode_decimal": 59212 }, { "icon_id": "1261768", "name": "group", "font_class": "group", "unicode": "e74d", "unicode_decimal": 59213 }, { "icon_id": "1261774", "name": "h-square", "font_class": "h-square", "unicode": "e74e", "unicode_decimal": 59214 }, { "icon_id": "1261775", "name": "hacker-news", "font_class": "hacker-news", "unicode": "e74f", "unicode_decimal": 59215 }, { "icon_id": "1261776", "name": "hand-grab-o", "font_class": "hand-grab-o", "unicode": "e750", "unicode_decimal": 59216 }, { "icon_id": "1261777", "name": "hand-o-left", "font_class": "hand-o-left", "unicode": "e751", "unicode_decimal": 59217 }, { "icon_id": "1261778", "name": "hand-lizard-o", "font_class": "hand-lizard-o", "unicode": "e752", "unicode_decimal": 59218 }, { "icon_id": "1261779", "name": "hand-o-down", "font_class": "hand-o-down", "unicode": "e753", "unicode_decimal": 59219 }, { "icon_id": "1261780", "name": "hand-o-right", "font_class": "hand-o-right", "unicode": "e754", "unicode_decimal": 59220 }, { "icon_id": "1261781", "name": "hand-o-up", "font_class": "hand-o-up", "unicode": "e755", "unicode_decimal": 59221 }, { "icon_id": "1261782", "name": "hand-paper-o", "font_class": "hand-paper-o", "unicode": "e756", "unicode_decimal": 59222 }, { "icon_id": "1261783", "name": "hand-pointer-o", "font_class": "hand-pointer-o", "unicode": "e757", "unicode_decimal": 59223 }, { "icon_id": "1261784", "name": "hand-peace-o", "font_class": "hand-peace-o", "unicode": "e758", "unicode_decimal": 59224 }, { "icon_id": "1261785", "name": "hand-spock-o", "font_class": "hand-spock-o", "unicode": "e759", "unicode_decimal": 59225 }, { "icon_id": "1261787", "name": "hand-rock-o", "font_class": "hand-rock-o", "unicode": "e75a", "unicode_decimal": 59226 }, { "icon_id": "1261788", "name": "hand-scissors-o", "font_class": "hand-scissors-o", "unicode": "e75b", "unicode_decimal": 59227 }, { "icon_id": "1261789", "name": "hand-stop-o", "font_class": "hand-stop-o", "unicode": "e75c", "unicode_decimal": 59228 }, { "icon_id": "1261790", "name": "hard-of-hearing", "font_class": "hard-of-hearing", "unicode": "e75d", "unicode_decimal": 59229 }, { "icon_id": "1261791", "name": "handshake-o", "font_class": "handshake-o", "unicode": "e75e", "unicode_decimal": 59230 }, { "icon_id": "1261792", "name": "hashtag", "font_class": "hashtag", "unicode": "e75f", "unicode_decimal": 59231 }, { "icon_id": "1261793", "name": "headphones", "font_class": "headphones", "unicode": "e760", "unicode_decimal": 59232 }, { "icon_id": "1261794", "name": "header", "font_class": "header", "unicode": "e761", "unicode_decimal": 59233 }, { "icon_id": "1261795", "name": "hdd-o", "font_class": "hdd-o", "unicode": "e762", "unicode_decimal": 59234 }, { "icon_id": "1261796", "name": "heart-o", "font_class": "heart-o", "unicode": "e763", "unicode_decimal": 59235 }, { "icon_id": "1261797", "name": "heart", "font_class": "heart", "unicode": "e764", "unicode_decimal": 59236 }, { "icon_id": "1261800", "name": "hotel", "font_class": "hotel", "unicode": "e765", "unicode_decimal": 59237 }, { "icon_id": "1261801", "name": "heartbeat", "font_class": "heartbeat", "unicode": "e766", "unicode_decimal": 59238 }, { "icon_id": "1261802", "name": "hourglass-1", "font_class": "hourglass-1", "unicode": "e767", "unicode_decimal": 59239 }, { "icon_id": "1261803", "name": "home", "font_class": "home", "unicode": "e768", "unicode_decimal": 59240 }, { "icon_id": "1261804", "name": "history", "font_class": "history", "unicode": "e769", "unicode_decimal": 59241 }, { "icon_id": "1261805", "name": "hourglass-2", "font_class": "hourglass-2", "unicode": "e76a", "unicode_decimal": 59242 }, { "icon_id": "1261806", "name": "hospital-o", "font_class": "hospital-o", "unicode": "e76b", "unicode_decimal": 59243 }, { "icon_id": "1261807", "name": "hourglass-3", "font_class": "hourglass-3", "unicode": "e76c", "unicode_decimal": 59244 }, { "icon_id": "1261808", "name": "hourglass-half", "font_class": "hourglass-half", "unicode": "e76d", "unicode_decimal": 59245 }, { "icon_id": "1261809", "name": "hourglass-end", "font_class": "hourglass-end", "unicode": "e76e", "unicode_decimal": 59246 }, { "icon_id": "1261810", "name": "hourglass-o", "font_class": "hourglass-o", "unicode": "e76f", "unicode_decimal": 59247 }, { "icon_id": "1261811", "name": "hourglass-start", "font_class": "hourglass-start", "unicode": "e770", "unicode_decimal": 59248 }, { "icon_id": "1261812", "name": "houzz", "font_class": "houzz", "unicode": "e771", "unicode_decimal": 59249 }, { "icon_id": "1261813", "name": "html5", "font_class": "html5", "unicode": "e772", "unicode_decimal": 59250 }, { "icon_id": "1261814", "name": "hourglass", "font_class": "hourglass", "unicode": "e773", "unicode_decimal": 59251 }, { "icon_id": "1261815", "name": "id-badge", "font_class": "id-badge", "unicode": "e774", "unicode_decimal": 59252 }, { "icon_id": "1261816", "name": "i-cursor", "font_class": "i-cursor", "unicode": "e775", "unicode_decimal": 59253 }, { "icon_id": "1261817", "name": "id-card", "font_class": "id-card", "unicode": "e776", "unicode_decimal": 59254 }, { "icon_id": "1261818", "name": "ils", "font_class": "ils", "unicode": "e777", "unicode_decimal": 59255 }, { "icon_id": "1261819", "name": "id-card-o", "font_class": "id-card-o", "unicode": "e778", "unicode_decimal": 59256 }, { "icon_id": "1261820", "name": "image", "font_class": "image", "unicode": "e779", "unicode_decimal": 59257 }, { "icon_id": "1261821", "name": "inbox", "font_class": "inbox", "unicode": "e77a", "unicode_decimal": 59258 }, { "icon_id": "1261822", "name": "indent", "font_class": "indent", "unicode": "e77b", "unicode_decimal": 59259 }, { "icon_id": "1261823", "name": "industry", "font_class": "industry", "unicode": "e77c", "unicode_decimal": 59260 }, { "icon_id": "1261824", "name": "imdb", "font_class": "imdb", "unicode": "e77d", "unicode_decimal": 59261 }, { "icon_id": "1261846", "name": "info", "font_class": "info", "unicode": "e77e", "unicode_decimal": 59262 }, { "icon_id": "1261847", "name": "institution", "font_class": "institution", "unicode": "e77f", "unicode_decimal": 59263 }, { "icon_id": "1261848", "name": "info-circle", "font_class": "info-circle", "unicode": "e780", "unicode_decimal": 59264 }, { "icon_id": "1261849", "name": "internet-explorer", "font_class": "internet-explorer", "unicode": "e781", "unicode_decimal": 59265 }, { "icon_id": "1261850", "name": "inr", "font_class": "inr", "unicode": "e782", "unicode_decimal": 59266 }, { "icon_id": "1261851", "name": "instagram", "font_class": "instagram", "unicode": "e783", "unicode_decimal": 59267 }, { "icon_id": "1261852", "name": "ioxhost", "font_class": "ioxhost", "unicode": "e784", "unicode_decimal": 59268 }, { "icon_id": "1261853", "name": "joomla", "font_class": "joomla", "unicode": "e785", "unicode_decimal": 59269 }, { "icon_id": "1261854", "name": "jpy", "font_class": "jpy", "unicode": "e786", "unicode_decimal": 59270 }, { "icon_id": "1261855", "name": "intersex", "font_class": "intersex", "unicode": "e787", "unicode_decimal": 59271 }, { "icon_id": "1261856", "name": "jsfiddle", "font_class": "jsfiddle", "unicode": "e788", "unicode_decimal": 59272 }, { "icon_id": "1261857", "name": "italic", "font_class": "italic", "unicode": "e789", "unicode_decimal": 59273 }, { "icon_id": "1261858", "name": "key", "font_class": "key", "unicode": "e78a", "unicode_decimal": 59274 }, { "icon_id": "1261859", "name": "keyboard-o", "font_class": "keyboard-o", "unicode": "e78b", "unicode_decimal": 59275 }, { "icon_id": "1261860", "name": "krw", "font_class": "krw", "unicode": "e78c", "unicode_decimal": 59276 }, { "icon_id": "1261861", "name": "laptop", "font_class": "laptop", "unicode": "e78d", "unicode_decimal": 59277 }, { "icon_id": "1261862", "name": "language", "font_class": "language", "unicode": "e78e", "unicode_decimal": 59278 }, { "icon_id": "1261863", "name": "leaf", "font_class": "leaf", "unicode": "e78f", "unicode_decimal": 59279 }, { "icon_id": "1261864", "name": "lastfm", "font_class": "lastfm", "unicode": "e790", "unicode_decimal": 59280 }, { "icon_id": "1261865", "name": "lastfm-square", "font_class": "lastfm-square", "unicode": "e791", "unicode_decimal": 59281 }, { "icon_id": "1261866", "name": "legal", "font_class": "legal", "unicode": "e792", "unicode_decimal": 59282 }, { "icon_id": "1261867", "name": "leanpub", "font_class": "leanpub", "unicode": "e793", "unicode_decimal": 59283 }, { "icon_id": "1261883", "name": "level-down", "font_class": "level-down", "unicode": "e794", "unicode_decimal": 59284 }, { "icon_id": "1261884", "name": "level-up", "font_class": "level-up", "unicode": "e795", "unicode_decimal": 59285 }, { "icon_id": "1261885", "name": "life-ring", "font_class": "life-ring", "unicode": "e796", "unicode_decimal": 59286 }, { "icon_id": "1261886", "name": "life-buoy", "font_class": "life-buoy", "unicode": "e797", "unicode_decimal": 59287 }, { "icon_id": "1261887", "name": "life-bouy", "font_class": "life-bouy", "unicode": "e798", "unicode_decimal": 59288 }, { "icon_id": "1261888", "name": "lemon-o", "font_class": "lemon-o", "unicode": "e799", "unicode_decimal": 59289 }, { "icon_id": "1261889", "name": "lightbulb-o", "font_class": "lightbulb-o", "unicode": "e79a", "unicode_decimal": 59290 }, { "icon_id": "1261890", "name": "life-saver", "font_class": "life-saver", "unicode": "e79b", "unicode_decimal": 59291 }, { "icon_id": "1261891", "name": "line-chart", "font_class": "line-chart", "unicode": "e79c", "unicode_decimal": 59292 }, { "icon_id": "1261892", "name": "linkedin", "font_class": "linkedin", "unicode": "e79d", "unicode_decimal": 59293 }, { "icon_id": "1261893", "name": "linkedin-square", "font_class": "linkedin-square", "unicode": "e79e", "unicode_decimal": 59294 }, { "icon_id": "1261894", "name": "link", "font_class": "link", "unicode": "e79f", "unicode_decimal": 59295 }, { "icon_id": "1261895", "name": "linode", "font_class": "linode", "unicode": "e7a0", "unicode_decimal": 59296 }, { "icon_id": "1261896", "name": "list", "font_class": "list", "unicode": "e7a1", "unicode_decimal": 59297 }, { "icon_id": "1261897", "name": "list-ul", "font_class": "list-ul", "unicode": "e7a2", "unicode_decimal": 59298 }, { "icon_id": "1261898", "name": "linux", "font_class": "linux", "unicode": "e7a3", "unicode_decimal": 59299 }, { "icon_id": "1261899", "name": "list-ol", "font_class": "list-ol", "unicode": "e7a4", "unicode_decimal": 59300 }, { "icon_id": "1261900", "name": "list-alt", "font_class": "list-alt", "unicode": "e7a5", "unicode_decimal": 59301 }, { "icon_id": "1261901", "name": "location-arrow", "font_class": "location-arrow", "unicode": "e7a6", "unicode_decimal": 59302 }, { "icon_id": "1261902", "name": "lock", "font_class": "lock", "unicode": "e7a7", "unicode_decimal": 59303 }, { "icon_id": "1261903", "name": "long-arrow-up", "font_class": "long-arrow-up", "unicode": "e7a8", "unicode_decimal": 59304 }, { "icon_id": "1261904", "name": "long-arrow-right", "font_class": "long-arrow-right", "unicode": "e7a9", "unicode_decimal": 59305 }, { "icon_id": "1261905", "name": "long-arrow-left", "font_class": "long-arrow-left", "unicode": "e7aa", "unicode_decimal": 59306 }, { "icon_id": "1261906", "name": "long-arrow-down", "font_class": "long-arrow-down", "unicode": "e7ab", "unicode_decimal": 59307 }, { "icon_id": "1261911", "name": "magic", "font_class": "magic", "unicode": "e7ac", "unicode_decimal": 59308 }, { "icon_id": "1261912", "name": "magnet", "font_class": "magnet", "unicode": "e7ad", "unicode_decimal": 59309 }, { "icon_id": "1261913", "name": "low-vision", "font_class": "low-vision", "unicode": "e7ae", "unicode_decimal": 59310 }, { "icon_id": "1261914", "name": "mail-reply-all", "font_class": "mail-reply-all", "unicode": "e7af", "unicode_decimal": 59311 }, { "icon_id": "1261915", "name": "mail-reply", "font_class": "mail-reply", "unicode": "e7b0", "unicode_decimal": 59312 }, { "icon_id": "1261916", "name": "mail-forward", "font_class": "mail-forward", "unicode": "e7b1", "unicode_decimal": 59313 }, { "icon_id": "1261917", "name": "male", "font_class": "male", "unicode": "e7b2", "unicode_decimal": 59314 }, { "icon_id": "1261918", "name": "map-pin", "font_class": "map-pin", "unicode": "e7b3", "unicode_decimal": 59315 }, { "icon_id": "1261919", "name": "map-o", "font_class": "map-o", "unicode": "e7b4", "unicode_decimal": 59316 }, { "icon_id": "1261920", "name": "map-marker", "font_class": "map-marker", "unicode": "e7b5", "unicode_decimal": 59317 }, { "icon_id": "1261921", "name": "map", "font_class": "map", "unicode": "e7b6", "unicode_decimal": 59318 }, { "icon_id": "1261922", "name": "map-signs", "font_class": "map-signs", "unicode": "e7b7", "unicode_decimal": 59319 }, { "icon_id": "1261923", "name": "mars-stroke-h", "font_class": "mars-stroke-h", "unicode": "e7b8", "unicode_decimal": 59320 }, { "icon_id": "1261924", "name": "mars-stroke", "font_class": "mars-stroke", "unicode": "e7b9", "unicode_decimal": 59321 }, { "icon_id": "1261925", "name": "mars-stroke-v", "font_class": "mars-stroke-v", "unicode": "e7ba", "unicode_decimal": 59322 }, { "icon_id": "1261926", "name": "mars-double", "font_class": "mars-double", "unicode": "e7bb", "unicode_decimal": 59323 }, { "icon_id": "1261927", "name": "mars", "font_class": "mars", "unicode": "e7bc", "unicode_decimal": 59324 }, { "icon_id": "1261928", "name": "maxcdn", "font_class": "maxcdn", "unicode": "e7bd", "unicode_decimal": 59325 }, { "icon_id": "1261929", "name": "medium", "font_class": "medium", "unicode": "e7be", "unicode_decimal": 59326 }, { "icon_id": "1261930", "name": "medkit", "font_class": "medkit", "unicode": "e7bf", "unicode_decimal": 59327 }, { "icon_id": "1261931", "name": "meanpath", "font_class": "meanpath", "unicode": "e7c0", "unicode_decimal": 59328 }, { "icon_id": "1261932", "name": "meetup", "font_class": "meetup", "unicode": "e7c1", "unicode_decimal": 59329 }, { "icon_id": "1261933", "name": "meh-o", "font_class": "meh-o", "unicode": "e7c2", "unicode_decimal": 59330 }, { "icon_id": "1261934", "name": "mercury", "font_class": "mercury", "unicode": "e7c3", "unicode_decimal": 59331 }, { "icon_id": "1261937", "name": "microphone", "font_class": "microphone", "unicode": "e7c4", "unicode_decimal": 59332 }, { "icon_id": "1261938", "name": "minus-circle", "font_class": "minus-circle", "unicode": "e7c5", "unicode_decimal": 59333 }, { "icon_id": "1261939", "name": "minus-square", "font_class": "minus-square", "unicode": "e7c6", "unicode_decimal": 59334 }, { "icon_id": "1261940", "name": "minus-square-o", "font_class": "minus-square-o", "unicode": "e7c7", "unicode_decimal": 59335 }, { "icon_id": "1261941", "name": "microchip", "font_class": "microchip", "unicode": "e7c8", "unicode_decimal": 59336 }, { "icon_id": "1261942", "name": "microphone-slash", "font_class": "microphone-slash", "unicode": "e7c9", "unicode_decimal": 59337 }, { "icon_id": "1261943", "name": "minus", "font_class": "minus", "unicode": "e7ca", "unicode_decimal": 59338 }, { "icon_id": "1261944", "name": "mixcloud", "font_class": "mixcloud", "unicode": "e7cb", "unicode_decimal": 59339 }, { "icon_id": "1261945", "name": "mobile", "font_class": "mobile", "unicode": "e7cc", "unicode_decimal": 59340 }, { "icon_id": "1261946", "name": "modx", "font_class": "modx", "unicode": "e7cd", "unicode_decimal": 59341 }, { "icon_id": "1261947", "name": "money", "font_class": "money", "unicode": "e7ce", "unicode_decimal": 59342 }, { "icon_id": "1261949", "name": "moon-o", "font_class": "moon-o", "unicode": "e7cf", "unicode_decimal": 59343 }, { "icon_id": "1261950", "name": "motorcycle", "font_class": "motorcycle", "unicode": "e7d0", "unicode_decimal": 59344 }, { "icon_id": "1261951", "name": "mouse-pointer", "font_class": "mouse-pointer", "unicode": "e7d1", "unicode_decimal": 59345 }, { "icon_id": "1261952", "name": "mortar-board", "font_class": "mortar-board", "unicode": "e7d2", "unicode_decimal": 59346 }, { "icon_id": "1261953", "name": "navicon", "font_class": "navicon", "unicode": "e7d3", "unicode_decimal": 59347 }, { "icon_id": "1261954", "name": "neuter", "font_class": "neuter", "unicode": "e7d4", "unicode_decimal": 59348 }, { "icon_id": "1261955", "name": "music", "font_class": "music", "unicode": "e7d5", "unicode_decimal": 59349 }, { "icon_id": "1261956", "name": "object-group", "font_class": "object-group", "unicode": "e7d6", "unicode_decimal": 59350 }, { "icon_id": "1261957", "name": "newspaper-o", "font_class": "newspaper-o", "unicode": "e7d7", "unicode_decimal": 59351 }, { "icon_id": "1261958", "name": "object-ungroup", "font_class": "object-ungroup", "unicode": "e7d8", "unicode_decimal": 59352 }, { "icon_id": "1261959", "name": "odnoklassniki-square", "font_class": "odnoklassniki-square", "unicode": "e7d9", "unicode_decimal": 59353 }, { "icon_id": "1261960", "name": "odnoklassniki", "font_class": "odnoklassniki", "unicode": "e7da", "unicode_decimal": 59354 }, { "icon_id": "1261961", "name": "opencart", "font_class": "opencart", "unicode": "e7db", "unicode_decimal": 59355 }, { "icon_id": "1261962", "name": "openid", "font_class": "openid", "unicode": "e7dc", "unicode_decimal": 59356 }, { "icon_id": "1261963", "name": "opera", "font_class": "opera", "unicode": "e7dd", "unicode_decimal": 59357 }, { "icon_id": "1261967", "name": "paper-plane-o", "font_class": "paper-plane-o", "unicode": "e7de", "unicode_decimal": 59358 }, { "icon_id": "1261968", "name": "pagelines", "font_class": "pagelines", "unicode": "e7df", "unicode_decimal": 59359 }, { "icon_id": "1261969", "name": "outdent", "font_class": "outdent", "unicode": "e7e0", "unicode_decimal": 59360 }, { "icon_id": "1261970", "name": "paper-plane", "font_class": "paper-plane", "unicode": "e7e1", "unicode_decimal": 59361 }, { "icon_id": "1261971", "name": "paint-brush", "font_class": "paint-brush", "unicode": "e7e2", "unicode_decimal": 59362 }, { "icon_id": "1261972", "name": "paragraph", "font_class": "paragraph", "unicode": "e7e3", "unicode_decimal": 59363 }, { "icon_id": "1261973", "name": "paperclip", "font_class": "paperclip", "unicode": "e7e4", "unicode_decimal": 59364 }, { "icon_id": "1261974", "name": "optin-monster", "font_class": "optin-monster", "unicode": "e7e5", "unicode_decimal": 59365 }, { "icon_id": "1261975", "name": "pause-circle-o", "font_class": "pause-circle-o", "unicode": "e7e6", "unicode_decimal": 59366 }, { "icon_id": "1261976", "name": "paste", "font_class": "paste", "unicode": "e7e7", "unicode_decimal": 59367 }, { "icon_id": "1261977", "name": "pause", "font_class": "pause", "unicode": "e7e8", "unicode_decimal": 59368 }, { "icon_id": "1261978", "name": "pause-circle", "font_class": "pause-circle", "unicode": "e7e9", "unicode_decimal": 59369 }, { "icon_id": "1261979", "name": "paw", "font_class": "paw", "unicode": "e7ea", "unicode_decimal": 59370 }, { "icon_id": "1261980", "name": "paypal", "font_class": "paypal", "unicode": "e7eb", "unicode_decimal": 59371 }, { "icon_id": "1261981", "name": "pencil-square-o", "font_class": "pencil-square-o", "unicode": "e7ec", "unicode_decimal": 59372 }, { "icon_id": "1261982", "name": "percent", "font_class": "percent", "unicode": "e7ed", "unicode_decimal": 59373 }, { "icon_id": "1261983", "name": "pencil-square", "font_class": "pencil-square", "unicode": "e7ee", "unicode_decimal": 59374 }, { "icon_id": "1261984", "name": "pencil", "font_class": "pencil", "unicode": "e7ef", "unicode_decimal": 59375 }, { "icon_id": "1261985", "name": "phone-square", "font_class": "phone-square", "unicode": "e7f0", "unicode_decimal": 59376 }, { "icon_id": "1261986", "name": "phone", "font_class": "phone", "unicode": "e7f1", "unicode_decimal": 59377 }, { "icon_id": "1261987", "name": "photo", "font_class": "photo", "unicode": "e7f2", "unicode_decimal": 59378 }, { "icon_id": "1261988", "name": "picture-o", "font_class": "picture-o", "unicode": "e7f3", "unicode_decimal": 59379 }, { "icon_id": "1261989", "name": "pie-chart", "font_class": "pie-chart", "unicode": "e7f4", "unicode_decimal": 59380 }, { "icon_id": "1261990", "name": "pied-piper-pp", "font_class": "pied-piper-pp", "unicode": "e7f5", "unicode_decimal": 59381 }, { "icon_id": "1261991", "name": "pied-piper-alt", "font_class": "pied-piper-alt", "unicode": "e7f6", "unicode_decimal": 59382 }, { "icon_id": "1262035", "name": "pinterest-p", "font_class": "pinterest-p", "unicode": "e7f7", "unicode_decimal": 59383 }, { "icon_id": "1262036", "name": "plane", "font_class": "plane", "unicode": "e7f8", "unicode_decimal": 59384 }, { "icon_id": "1262037", "name": "play-circle-o", "font_class": "play-circle-o", "unicode": "e7f9", "unicode_decimal": 59385 }, { "icon_id": "1262038", "name": "pied-piper", "font_class": "pied-piper", "unicode": "e7fa", "unicode_decimal": 59386 }, { "icon_id": "1262039", "name": "pinterest", "font_class": "pinterest", "unicode": "e7fb", "unicode_decimal": 59387 }, { "icon_id": "1262040", "name": "pinterest-square", "font_class": "pinterest-square", "unicode": "e7fc", "unicode_decimal": 59388 }, { "icon_id": "1262041", "name": "play", "font_class": "play", "unicode": "e7fd", "unicode_decimal": 59389 }, { "icon_id": "1262042", "name": "play-circle", "font_class": "play-circle", "unicode": "e7fe", "unicode_decimal": 59390 }, { "icon_id": "1262043", "name": "plug", "font_class": "plug", "unicode": "e7ff", "unicode_decimal": 59391 }, { "icon_id": "1262044", "name": "plus-square-o", "font_class": "plus-square-o", "unicode": "e800", "unicode_decimal": 59392 }, { "icon_id": "1262045", "name": "plus-square", "font_class": "plus-square", "unicode": "e801", "unicode_decimal": 59393 }, { "icon_id": "1262046", "name": "plus-circle", "font_class": "plus-circle", "unicode": "e802", "unicode_decimal": 59394 }, { "icon_id": "1262047", "name": "plus", "font_class": "plus", "unicode": "e803", "unicode_decimal": 59395 }, { "icon_id": "1262048", "name": "product-hunt", "font_class": "product-hunt", "unicode": "e804", "unicode_decimal": 59396 }, { "icon_id": "1262049", "name": "print", "font_class": "print", "unicode": "e805", "unicode_decimal": 59397 }, { "icon_id": "1262050", "name": "puzzle-piece", "font_class": "puzzle-piece", "unicode": "e806", "unicode_decimal": 59398 }, { "icon_id": "1262051", "name": "podcast", "font_class": "podcast", "unicode": "e807", "unicode_decimal": 59399 }, { "icon_id": "1262052", "name": "power-off", "font_class": "power-off", "unicode": "e808", "unicode_decimal": 59400 }, { "icon_id": "1262053", "name": "qq", "font_class": "qq", "unicode": "e809", "unicode_decimal": 59401 }, { "icon_id": "1262054", "name": "question", "font_class": "question", "unicode": "e80a", "unicode_decimal": 59402 }, { "icon_id": "1262055", "name": "qrcode", "font_class": "qrcode", "unicode": "e80b", "unicode_decimal": 59403 }, { "icon_id": "1262056", "name": "quora", "font_class": "quora", "unicode": "e80c", "unicode_decimal": 59404 }, { "icon_id": "1262057", "name": "question-circle-o", "font_class": "question-circle-o", "unicode": "e80d", "unicode_decimal": 59405 }, { "icon_id": "1262058", "name": "question-circle", "font_class": "question-circle", "unicode": "e80e", "unicode_decimal": 59406 }, { "icon_id": "1262059", "name": "quote-left", "font_class": "quote-left", "unicode": "e80f", "unicode_decimal": 59407 }, { "icon_id": "1262060", "name": "quote-right", "font_class": "quote-right", "unicode": "e810", "unicode_decimal": 59408 }, { "icon_id": "1262061", "name": "ra", "font_class": "ra", "unicode": "e811", "unicode_decimal": 59409 }, { "icon_id": "1262062", "name": "ravelry", "font_class": "ravelry", "unicode": "e812", "unicode_decimal": 59410 }, { "icon_id": "1262063", "name": "rebel", "font_class": "rebel", "unicode": "e813", "unicode_decimal": 59411 }, { "icon_id": "1262064", "name": "random", "font_class": "random", "unicode": "e814", "unicode_decimal": 59412 }, { "icon_id": "1262071", "name": "reddit-square", "font_class": "reddit-square", "unicode": "e815", "unicode_decimal": 59413 }, { "icon_id": "1262072", "name": "reddit-alien", "font_class": "reddit-alien", "unicode": "e816", "unicode_decimal": 59414 }, { "icon_id": "1262073", "name": "recycle", "font_class": "recycle", "unicode": "e817", "unicode_decimal": 59415 }, { "icon_id": "1262074", "name": "reddit", "font_class": "reddit", "unicode": "e818", "unicode_decimal": 59416 }, { "icon_id": "1262075", "name": "registered", "font_class": "registered", "unicode": "e819", "unicode_decimal": 59417 }, { "icon_id": "1262076", "name": "refresh", "font_class": "refresh", "unicode": "e81a", "unicode_decimal": 59418 }, { "icon_id": "1262077", "name": "renren", "font_class": "renren", "unicode": "e81b", "unicode_decimal": 59419 }, { "icon_id": "1262078", "name": "reorder", "font_class": "reorder", "unicode": "e81c", "unicode_decimal": 59420 }, { "icon_id": "1262079", "name": "repeat", "font_class": "repeat", "unicode": "e81d", "unicode_decimal": 59421 }, { "icon_id": "1262080", "name": "reply-all", "font_class": "reply-all", "unicode": "e81e", "unicode_decimal": 59422 }, { "icon_id": "1262081", "name": "remove", "font_class": "remove", "unicode": "e81f", "unicode_decimal": 59423 }, { "icon_id": "1262082", "name": "rmb", "font_class": "rmb", "unicode": "e820", "unicode_decimal": 59424 }, { "icon_id": "1262083", "name": "resistance", "font_class": "resistance", "unicode": "e821", "unicode_decimal": 59425 }, { "icon_id": "1262084", "name": "road", "font_class": "road", "unicode": "e822", "unicode_decimal": 59426 }, { "icon_id": "1262085", "name": "retweet", "font_class": "retweet", "unicode": "e823", "unicode_decimal": 59427 }, { "icon_id": "1262086", "name": "reply", "font_class": "reply", "unicode": "e824", "unicode_decimal": 59428 }, { "icon_id": "1262087", "name": "rocket", "font_class": "rocket", "unicode": "e825", "unicode_decimal": 59429 }, { "icon_id": "1262088", "name": "rotate-left", "font_class": "rotate-left", "unicode": "e826", "unicode_decimal": 59430 }, { "icon_id": "1262089", "name": "rouble", "font_class": "rouble", "unicode": "e827", "unicode_decimal": 59431 }, { "icon_id": "1262090", "name": "rotate-right", "font_class": "rotate-right", "unicode": "e828", "unicode_decimal": 59432 }, { "icon_id": "1262091", "name": "rss", "font_class": "rss", "unicode": "e829", "unicode_decimal": 59433 }, { "icon_id": "1262092", "name": "rss-square", "font_class": "rss-square", "unicode": "e82a", "unicode_decimal": 59434 }, { "icon_id": "1262095", "name": "ruble", "font_class": "ruble", "unicode": "e82b", "unicode_decimal": 59435 }, { "icon_id": "1262096", "name": "rub", "font_class": "rub", "unicode": "e82c", "unicode_decimal": 59436 }, { "icon_id": "1262097", "name": "s15", "font_class": "s15", "unicode": "e82d", "unicode_decimal": 59437 }, { "icon_id": "1262098", "name": "save", "font_class": "save", "unicode": "e82e", "unicode_decimal": 59438 }, { "icon_id": "1262099", "name": "rupee", "font_class": "rupee", "unicode": "e82f", "unicode_decimal": 59439 }, { "icon_id": "1262100", "name": "safari", "font_class": "safari", "unicode": "e830", "unicode_decimal": 59440 }, { "icon_id": "1262101", "name": "scissors", "font_class": "scissors", "unicode": "e831", "unicode_decimal": 59441 }, { "icon_id": "1262102", "name": "scribd", "font_class": "scribd", "unicode": "e832", "unicode_decimal": 59442 }, { "icon_id": "1262103", "name": "search-plus", "font_class": "search-plus", "unicode": "e833", "unicode_decimal": 59443 }, { "icon_id": "1262104", "name": "search", "font_class": "search", "unicode": "e834", "unicode_decimal": 59444 }, { "icon_id": "1262105", "name": "sellsy", "font_class": "sellsy", "unicode": "e835", "unicode_decimal": 59445 }, { "icon_id": "1262106", "name": "send", "font_class": "send", "unicode": "e836", "unicode_decimal": 59446 }, { "icon_id": "1262107", "name": "send-o", "font_class": "send-o", "unicode": "e837", "unicode_decimal": 59447 }, { "icon_id": "1262108", "name": "search-minus", "font_class": "search-minus", "unicode": "e838", "unicode_decimal": 59448 }, { "icon_id": "1262109", "name": "server", "font_class": "server", "unicode": "e839", "unicode_decimal": 59449 }, { "icon_id": "1262110", "name": "share-alt-square", "font_class": "share-alt-square", "unicode": "e83a", "unicode_decimal": 59450 }, { "icon_id": "1262111", "name": "share-alt", "font_class": "share-alt", "unicode": "e83b", "unicode_decimal": 59451 }, { "icon_id": "1262112", "name": "share-square-o", "font_class": "share-square-o", "unicode": "e83c", "unicode_decimal": 59452 }, { "icon_id": "1262113", "name": "share", "font_class": "share", "unicode": "e83d", "unicode_decimal": 59453 }, { "icon_id": "1262114", "name": "share-square", "font_class": "share-square", "unicode": "e83e", "unicode_decimal": 59454 }, { "icon_id": "1262115", "name": "shekel", "font_class": "shekel", "unicode": "e83f", "unicode_decimal": 59455 }, { "icon_id": "1262116", "name": "sheqel", "font_class": "sheqel", "unicode": "e840", "unicode_decimal": 59456 }, { "icon_id": "1262117", "name": "shield", "font_class": "shield", "unicode": "e841", "unicode_decimal": 59457 }, { "icon_id": "1262118", "name": "ship", "font_class": "ship", "unicode": "e842", "unicode_decimal": 59458 }, { "icon_id": "1262123", "name": "shirtsinbulk", "font_class": "shirtsinbulk", "unicode": "e843", "unicode_decimal": 59459 }, { "icon_id": "1262124", "name": "shower", "font_class": "shower", "unicode": "e844", "unicode_decimal": 59460 }, { "icon_id": "1262125", "name": "sign-in", "font_class": "sign-in", "unicode": "e845", "unicode_decimal": 59461 }, { "icon_id": "1262126", "name": "shopping-basket", "font_class": "shopping-basket", "unicode": "e846", "unicode_decimal": 59462 }, { "icon_id": "1262127", "name": "shopping-cart", "font_class": "shopping-cart", "unicode": "e847", "unicode_decimal": 59463 }, { "icon_id": "1262128", "name": "shopping-bag", "font_class": "shopping-bag", "unicode": "e848", "unicode_decimal": 59464 }, { "icon_id": "1262129", "name": "sign-language", "font_class": "sign-language", "unicode": "e849", "unicode_decimal": 59465 }, { "icon_id": "1262130", "name": "sign-out", "font_class": "sign-out", "unicode": "e84a", "unicode_decimal": 59466 }, { "icon_id": "1262131", "name": "signal", "font_class": "signal", "unicode": "e84b", "unicode_decimal": 59467 }, { "icon_id": "1262132", "name": "simplybuilt", "font_class": "simplybuilt", "unicode": "e84c", "unicode_decimal": 59468 }, { "icon_id": "1262133", "name": "sitemap", "font_class": "sitemap", "unicode": "e84d", "unicode_decimal": 59469 }, { "icon_id": "1262134", "name": "signing", "font_class": "signing", "unicode": "e84e", "unicode_decimal": 59470 }, { "icon_id": "1262135", "name": "sliders", "font_class": "sliders", "unicode": "e84f", "unicode_decimal": 59471 }, { "icon_id": "1262136", "name": "skype", "font_class": "skype", "unicode": "e850", "unicode_decimal": 59472 }, { "icon_id": "1262137", "name": "skyatlas", "font_class": "skyatlas", "unicode": "e851", "unicode_decimal": 59473 }, { "icon_id": "1262138", "name": "slack", "font_class": "slack", "unicode": "e852", "unicode_decimal": 59474 }, { "icon_id": "1262139", "name": "slideshare", "font_class": "slideshare", "unicode": "e853", "unicode_decimal": 59475 }, { "icon_id": "1262140", "name": "snapchat-square", "font_class": "snapchat-square", "unicode": "e854", "unicode_decimal": 59476 }, { "icon_id": "1262141", "name": "snapchat-ghost", "font_class": "snapchat-ghost", "unicode": "e855", "unicode_decimal": 59477 }, { "icon_id": "1262142", "name": "smile-o", "font_class": "smile-o", "unicode": "e856", "unicode_decimal": 59478 }, { "icon_id": "1262143", "name": "snapchat", "font_class": "snapchat", "unicode": "e857", "unicode_decimal": 59479 }, { "icon_id": "1262144", "name": "snowflake-o", "font_class": "snowflake-o", "unicode": "e858", "unicode_decimal": 59480 }, { "icon_id": "1262145", "name": "soccer-ball-o", "font_class": "soccer-ball-o", "unicode": "e859", "unicode_decimal": 59481 }, { "icon_id": "1262146", "name": "sort-alpha-asc", "font_class": "sort-alpha-asc", "unicode": "e85a", "unicode_decimal": 59482 }, { "icon_id": "1262152", "name": "sort-alpha-desc", "font_class": "sort-alpha-desc", "unicode": "e85b", "unicode_decimal": 59483 }, { "icon_id": "1262153", "name": "sort-amount-asc", "font_class": "sort-amount-asc", "unicode": "e85c", "unicode_decimal": 59484 }, { "icon_id": "1262154", "name": "sort-desc", "font_class": "sort-desc", "unicode": "e85d", "unicode_decimal": 59485 }, { "icon_id": "1262155", "name": "sort-down", "font_class": "sort-down", "unicode": "e85e", "unicode_decimal": 59486 }, { "icon_id": "1262156", "name": "sort-numeric-asc", "font_class": "sort-numeric-asc", "unicode": "e85f", "unicode_decimal": 59487 }, { "icon_id": "1262157", "name": "sort-asc", "font_class": "sort-asc", "unicode": "e860", "unicode_decimal": 59488 }, { "icon_id": "1262158", "name": "sort-amount-desc", "font_class": "sort-amount-desc", "unicode": "e861", "unicode_decimal": 59489 }, { "icon_id": "1262159", "name": "sort-numeric-desc", "font_class": "sort-numeric-desc", "unicode": "e862", "unicode_decimal": 59490 }, { "icon_id": "1262160", "name": "sort-up", "font_class": "sort-up", "unicode": "e863", "unicode_decimal": 59491 }, { "icon_id": "1262161", "name": "sort", "font_class": "sort", "unicode": "e864", "unicode_decimal": 59492 }, { "icon_id": "1262162", "name": "soundcloud", "font_class": "soundcloud", "unicode": "e865", "unicode_decimal": 59493 }, { "icon_id": "1262163", "name": "space-shuttle", "font_class": "space-shuttle", "unicode": "e866", "unicode_decimal": 59494 }, { "icon_id": "1262164", "name": "spinner", "font_class": "spinner", "unicode": "e867", "unicode_decimal": 59495 }, { "icon_id": "1262165", "name": "spoon", "font_class": "spoon", "unicode": "e868", "unicode_decimal": 59496 }, { "icon_id": "1262166", "name": "square-o", "font_class": "square-o", "unicode": "e869", "unicode_decimal": 59497 }, { "icon_id": "1262167", "name": "spotify", "font_class": "spotify", "unicode": "e86a", "unicode_decimal": 59498 }, { "icon_id": "1262168", "name": "square", "font_class": "square", "unicode": "e86b", "unicode_decimal": 59499 }, { "icon_id": "1262169", "name": "stack-exchange", "font_class": "stack-exchange", "unicode": "e86c", "unicode_decimal": 59500 }, { "icon_id": "1262170", "name": "star-half-empty", "font_class": "star-half-empty", "unicode": "e86d", "unicode_decimal": 59501 }, { "icon_id": "1262171", "name": "stack-overflow", "font_class": "stack-overflow", "unicode": "e86e", "unicode_decimal": 59502 }, { "icon_id": "1262172", "name": "star-half", "font_class": "star-half", "unicode": "e86f", "unicode_decimal": 59503 }, { "icon_id": "1262173", "name": "star", "font_class": "star", "unicode": "e870", "unicode_decimal": 59504 }, { "icon_id": "1262174", "name": "star-half-o", "font_class": "star-half-o", "unicode": "e871", "unicode_decimal": 59505 }, { "icon_id": "1262175", "name": "star-o", "font_class": "star-o", "unicode": "e872", "unicode_decimal": 59506 }, { "icon_id": "1262176", "name": "star-half-full", "font_class": "star-half-full", "unicode": "e873", "unicode_decimal": 59507 }, { "icon_id": "1262192", "name": "sticky-note-o", "font_class": "sticky-note-o", "unicode": "e874", "unicode_decimal": 59508 }, { "icon_id": "1262193", "name": "step-forward", "font_class": "step-forward", "unicode": "e875", "unicode_decimal": 59509 }, { "icon_id": "1262194", "name": "steam", "font_class": "steam", "unicode": "e876", "unicode_decimal": 59510 }, { "icon_id": "1262195", "name": "steam-square", "font_class": "steam-square", "unicode": "e877", "unicode_decimal": 59511 }, { "icon_id": "1262196", "name": "stethoscope", "font_class": "stethoscope", "unicode": "e878", "unicode_decimal": 59512 }, { "icon_id": "1262197", "name": "step-backward", "font_class": "step-backward", "unicode": "e879", "unicode_decimal": 59513 }, { "icon_id": "1262198", "name": "stop", "font_class": "stop", "unicode": "e87a", "unicode_decimal": 59514 }, { "icon_id": "1262199", "name": "stop-circle", "font_class": "stop-circle", "unicode": "e87b", "unicode_decimal": 59515 }, { "icon_id": "1262200", "name": "stop-circle-o", "font_class": "stop-circle-o", "unicode": "e87c", "unicode_decimal": 59516 }, { "icon_id": "1262201", "name": "sticky-note", "font_class": "sticky-note", "unicode": "e87d", "unicode_decimal": 59517 }, { "icon_id": "1262202", "name": "street-view", "font_class": "street-view", "unicode": "e87e", "unicode_decimal": 59518 }, { "icon_id": "1262203", "name": "strikethrough", "font_class": "strikethrough", "unicode": "e87f", "unicode_decimal": 59519 }, { "icon_id": "1262204", "name": "stumbleupon", "font_class": "stumbleupon", "unicode": "e880", "unicode_decimal": 59520 }, { "icon_id": "1262205", "name": "subway", "font_class": "subway", "unicode": "e881", "unicode_decimal": 59521 }, { "icon_id": "1262206", "name": "stumbleupon-circle", "font_class": "stumbleupon-circle", "unicode": "e882", "unicode_decimal": 59522 }, { "icon_id": "1262207", "name": "suitcase", "font_class": "suitcase", "unicode": "e883", "unicode_decimal": 59523 }, { "icon_id": "1262208", "name": "subscript", "font_class": "subscript", "unicode": "e884", "unicode_decimal": 59524 }, { "icon_id": "1262209", "name": "sun-o", "font_class": "sun-o", "unicode": "e885", "unicode_decimal": 59525 }, { "icon_id": "1262210", "name": "superpowers", "font_class": "superpowers", "unicode": "e886", "unicode_decimal": 59526 }, { "icon_id": "1262211", "name": "tablet", "font_class": "tablet", "unicode": "e887", "unicode_decimal": 59527 }, { "icon_id": "1262212", "name": "table", "font_class": "table", "unicode": "e888", "unicode_decimal": 59528 }, { "icon_id": "1262213", "name": "support", "font_class": "support", "unicode": "e889", "unicode_decimal": 59529 }, { "icon_id": "1262214", "name": "superscript", "font_class": "superscript", "unicode": "e88a", "unicode_decimal": 59530 }, { "icon_id": "1262233", "name": "tasks", "font_class": "tasks", "unicode": "e88b", "unicode_decimal": 59531 }, { "icon_id": "1262234", "name": "tags", "font_class": "tags", "unicode": "e88c", "unicode_decimal": 59532 }, { "icon_id": "1262235", "name": "tag", "font_class": "tag", "unicode": "e88d", "unicode_decimal": 59533 }, { "icon_id": "1262236", "name": "tachometer", "font_class": "tachometer", "unicode": "e88e", "unicode_decimal": 59534 }, { "icon_id": "1262237", "name": "telegram", "font_class": "telegram", "unicode": "e88f", "unicode_decimal": 59535 }, { "icon_id": "1262238", "name": "taxi", "font_class": "taxi", "unicode": "e890", "unicode_decimal": 59536 }, { "icon_id": "1262239", "name": "terminal", "font_class": "terminal", "unicode": "e891", "unicode_decimal": 59537 }, { "icon_id": "1262240", "name": "tencent-weibo", "font_class": "tencent-weibo", "unicode": "e892", "unicode_decimal": 59538 }, { "icon_id": "1262241", "name": "television", "font_class": "television", "unicode": "e893", "unicode_decimal": 59539 }, { "icon_id": "1262242", "name": "text-height", "font_class": "text-height", "unicode": "e894", "unicode_decimal": 59540 }, { "icon_id": "1262243", "name": "text-width", "font_class": "text-width", "unicode": "e895", "unicode_decimal": 59541 }, { "icon_id": "1262244", "name": "th-large", "font_class": "th-large", "unicode": "e896", "unicode_decimal": 59542 }, { "icon_id": "1262245", "name": "th-list", "font_class": "th-list", "unicode": "e897", "unicode_decimal": 59543 }, { "icon_id": "1262246", "name": "thermometer-0", "font_class": "thermometer-0", "unicode": "e898", "unicode_decimal": 59544 }, { "icon_id": "1262247", "name": "th", "font_class": "th", "unicode": "e899", "unicode_decimal": 59545 }, { "icon_id": "1262248", "name": "themeisle", "font_class": "themeisle", "unicode": "e89a", "unicode_decimal": 59546 }, { "icon_id": "1262249", "name": "thermometer-1", "font_class": "thermometer-1", "unicode": "e89b", "unicode_decimal": 59547 }, { "icon_id": "1262250", "name": "thermometer-2", "font_class": "thermometer-2", "unicode": "e89c", "unicode_decimal": 59548 }, { "icon_id": "1262251", "name": "thermometer-3", "font_class": "thermometer-3", "unicode": "e89d", "unicode_decimal": 59549 }, { "icon_id": "1262252", "name": "thermometer-4", "font_class": "thermometer-4", "unicode": "e89e", "unicode_decimal": 59550 }, { "icon_id": "1262253", "name": "thermometer-empty", "font_class": "thermometer-empty", "unicode": "e89f", "unicode_decimal": 59551 }, { "icon_id": "1262254", "name": "thermometer-full", "font_class": "thermometer-full", "unicode": "e8a0", "unicode_decimal": 59552 }, { "icon_id": "1262255", "name": "thermometer-half", "font_class": "thermometer-half", "unicode": "e8a1", "unicode_decimal": 59553 }, { "icon_id": "1262256", "name": "thumb-tack", "font_class": "thumb-tack", "unicode": "e8a2", "unicode_decimal": 59554 }, { "icon_id": "1262257", "name": "thermometer-three-quarters", "font_class": "thermometer-three-quarters", "unicode": "e8a3", "unicode_decimal": 59555 }, { "icon_id": "1262258", "name": "thermometer-quarter", "font_class": "thermometer-quarter", "unicode": "e8a4", "unicode_decimal": 59556 }, { "icon_id": "1262259", "name": "thermometer", "font_class": "thermometer", "unicode": "e8a5", "unicode_decimal": 59557 }, { "icon_id": "1262260", "name": "thumbs-down", "font_class": "thumbs-down", "unicode": "e8a6", "unicode_decimal": 59558 }, { "icon_id": "1262281", "name": "times-circle", "font_class": "times-circle", "unicode": "e8a7", "unicode_decimal": 59559 }, { "icon_id": "1262282", "name": "thumbs-up", "font_class": "thumbs-up", "unicode": "e8a8", "unicode_decimal": 59560 }, { "icon_id": "1262283", "name": "ticket", "font_class": "ticket", "unicode": "e8a9", "unicode_decimal": 59561 }, { "icon_id": "1262284", "name": "thumbs-o-down", "font_class": "thumbs-o-down", "unicode": "e8aa", "unicode_decimal": 59562 }, { "icon_id": "1262285", "name": "thumbs-o-up", "font_class": "thumbs-o-up", "unicode": "e8ab", "unicode_decimal": 59563 }, { "icon_id": "1262286", "name": "times-circle-o", "font_class": "times-circle-o", "unicode": "e8ac", "unicode_decimal": 59564 }, { "icon_id": "1262287", "name": "times-rectangle-o", "font_class": "times-rectangle-o", "unicode": "e8ad", "unicode_decimal": 59565 }, { "icon_id": "1262288", "name": "times-rectangle", "font_class": "times-rectangle", "unicode": "e8ae", "unicode_decimal": 59566 }, { "icon_id": "1262289", "name": "times", "font_class": "times", "unicode": "e8af", "unicode_decimal": 59567 }, { "icon_id": "1262290", "name": "tint", "font_class": "tint", "unicode": "e8b0", "unicode_decimal": 59568 }, { "icon_id": "1262291", "name": "toggle-left", "font_class": "toggle-left", "unicode": "e8b1", "unicode_decimal": 59569 }, { "icon_id": "1262292", "name": "toggle-down", "font_class": "toggle-down", "unicode": "e8b2", "unicode_decimal": 59570 }, { "icon_id": "1262293", "name": "toggle-off", "font_class": "toggle-off", "unicode": "e8b3", "unicode_decimal": 59571 }, { "icon_id": "1262294", "name": "toggle-right", "font_class": "toggle-right", "unicode": "e8b4", "unicode_decimal": 59572 }, { "icon_id": "1262295", "name": "toggle-on", "font_class": "toggle-on", "unicode": "e8b5", "unicode_decimal": 59573 }, { "icon_id": "1262296", "name": "toggle-up", "font_class": "toggle-up", "unicode": "e8b6", "unicode_decimal": 59574 }, { "icon_id": "1262298", "name": "transgender-alt", "font_class": "transgender-alt", "unicode": "e8b7", "unicode_decimal": 59575 }, { "icon_id": "1262299", "name": "trademark", "font_class": "trademark", "unicode": "e8b8", "unicode_decimal": 59576 }, { "icon_id": "1262300", "name": "train", "font_class": "train", "unicode": "e8b9", "unicode_decimal": 59577 }, { "icon_id": "1262301", "name": "trash-o", "font_class": "trash-o", "unicode": "e8ba", "unicode_decimal": 59578 }, { "icon_id": "1262302", "name": "trash", "font_class": "trash", "unicode": "e8bb", "unicode_decimal": 59579 }, { "icon_id": "1262303", "name": "transgender", "font_class": "transgender", "unicode": "e8bc", "unicode_decimal": 59580 }, { "icon_id": "1262304", "name": "tree", "font_class": "tree", "unicode": "e8bd", "unicode_decimal": 59581 }, { "icon_id": "1262309", "name": "try", "font_class": "try", "unicode": "e8be", "unicode_decimal": 59582 }, { "icon_id": "1262310", "name": "trello", "font_class": "trello", "unicode": "e8bf", "unicode_decimal": 59583 }, { "icon_id": "1262311", "name": "trophy", "font_class": "trophy", "unicode": "e8c0", "unicode_decimal": 59584 }, { "icon_id": "1262312", "name": "tty", "font_class": "tty", "unicode": "e8c1", "unicode_decimal": 59585 }, { "icon_id": "1262313", "name": "truck", "font_class": "truck", "unicode": "e8c2", "unicode_decimal": 59586 }, { "icon_id": "1262314", "name": "tripadvisor", "font_class": "tripadvisor", "unicode": "e8c3", "unicode_decimal": 59587 }, { "icon_id": "1262315", "name": "tumblr-square", "font_class": "tumblr-square", "unicode": "e8c4", "unicode_decimal": 59588 }, { "icon_id": "1262316", "name": "turkish-lira", "font_class": "turkish-lira", "unicode": "e8c5", "unicode_decimal": 59589 }, { "icon_id": "1262317", "name": "tumblr", "font_class": "tumblr", "unicode": "e8c6", "unicode_decimal": 59590 }, { "icon_id": "1262318", "name": "tv", "font_class": "tv", "unicode": "e8c7", "unicode_decimal": 59591 }, { "icon_id": "1262319", "name": "twitter", "font_class": "twitter", "unicode": "e8c8", "unicode_decimal": 59592 }, { "icon_id": "1262320", "name": "twitter-square", "font_class": "twitter-square", "unicode": "e8c9", "unicode_decimal": 59593 }, { "icon_id": "1262321", "name": "twitch", "font_class": "twitch", "unicode": "e8ca", "unicode_decimal": 59594 }, { "icon_id": "1262322", "name": "underline", "font_class": "underline", "unicode": "e8cb", "unicode_decimal": 59595 }, { "icon_id": "1262323", "name": "umbrella", "font_class": "umbrella", "unicode": "e8cc", "unicode_decimal": 59596 }, { "icon_id": "1262324", "name": "undo", "font_class": "undo", "unicode": "e8cd", "unicode_decimal": 59597 }, { "icon_id": "1262325", "name": "unlink", "font_class": "unlink", "unicode": "e8ce", "unicode_decimal": 59598 }, { "icon_id": "1262326", "name": "university", "font_class": "university", "unicode": "e8cf", "unicode_decimal": 59599 }, { "icon_id": "1262327", "name": "universal-access", "font_class": "universal-access", "unicode": "e8d0", "unicode_decimal": 59600 }, { "icon_id": "1262328", "name": "unlock-alt", "font_class": "unlock-alt", "unicode": "e8d1", "unicode_decimal": 59601 }, { "icon_id": "1262329", "name": "unlock", "font_class": "unlock", "unicode": "e8d2", "unicode_decimal": 59602 }, { "icon_id": "1262330", "name": "upload", "font_class": "upload", "unicode": "e8d3", "unicode_decimal": 59603 }, { "icon_id": "1262331", "name": "unsorted", "font_class": "unsorted", "unicode": "e8d4", "unicode_decimal": 59604 }, { "icon_id": "1262332", "name": "usd", "font_class": "usd", "unicode": "e8d5", "unicode_decimal": 59605 }, { "icon_id": "1262333", "name": "usb", "font_class": "usb", "unicode": "e8d6", "unicode_decimal": 59606 }, { "icon_id": "1262334", "name": "user-circle", "font_class": "user-circle", "unicode": "e8d7", "unicode_decimal": 59607 }, { "icon_id": "1262335", "name": "user-o", "font_class": "user-o", "unicode": "e8d8", "unicode_decimal": 59608 }, { "icon_id": "1262336", "name": "user-circle-o", "font_class": "user-circle-o", "unicode": "e8d9", "unicode_decimal": 59609 }, { "icon_id": "1262337", "name": "user-plus", "font_class": "user-plus", "unicode": "e8da", "unicode_decimal": 59610 }, { "icon_id": "1262338", "name": "user-md", "font_class": "user-md", "unicode": "e8db", "unicode_decimal": 59611 }, { "icon_id": "1262339", "name": "user-secret", "font_class": "user-secret", "unicode": "e8dc", "unicode_decimal": 59612 }, { "icon_id": "1262340", "name": "user", "font_class": "user", "unicode": "e8dd", "unicode_decimal": 59613 }, { "icon_id": "1262341", "name": "user-times", "font_class": "user-times", "unicode": "e8de", "unicode_decimal": 59614 }, { "icon_id": "1262342", "name": "users", "font_class": "users", "unicode": "e8df", "unicode_decimal": 59615 }, { "icon_id": "1262343", "name": "vcard-o", "font_class": "vcard-o", "unicode": "e8e0", "unicode_decimal": 59616 }, { "icon_id": "1262344", "name": "vcard", "font_class": "vcard", "unicode": "e8e1", "unicode_decimal": 59617 }, { "icon_id": "1262345", "name": "venus", "font_class": "venus", "unicode": "e8e2", "unicode_decimal": 59618 }, { "icon_id": "1262346", "name": "venus-mars", "font_class": "venus-mars", "unicode": "e8e3", "unicode_decimal": 59619 }, { "icon_id": "1262347", "name": "venus-double", "font_class": "venus-double", "unicode": "e8e4", "unicode_decimal": 59620 }, { "icon_id": "1262348", "name": "viadeo-square", "font_class": "viadeo-square", "unicode": "e8e5", "unicode_decimal": 59621 }, { "icon_id": "1262349", "name": "viacoin", "font_class": "viacoin", "unicode": "e8e6", "unicode_decimal": 59622 }, { "icon_id": "1262350", "name": "viadeo", "font_class": "viadeo", "unicode": "e8e7", "unicode_decimal": 59623 }, { "icon_id": "1262351", "name": "video-camera", "font_class": "video-camera", "unicode": "e8e8", "unicode_decimal": 59624 }, { "icon_id": "1262352", "name": "vimeo-square", "font_class": "vimeo-square", "unicode": "e8e9", "unicode_decimal": 59625 }, { "icon_id": "1262353", "name": "vine", "font_class": "vine", "unicode": "e8ea", "unicode_decimal": 59626 }, { "icon_id": "1262354", "name": "vimeo", "font_class": "vimeo", "unicode": "e8eb", "unicode_decimal": 59627 }, { "icon_id": "1262355", "name": "vk", "font_class": "vk", "unicode": "e8ec", "unicode_decimal": 59628 }, { "icon_id": "1262356", "name": "volume-control-phone", "font_class": "volume-control-phone", "unicode": "e8ed", "unicode_decimal": 59629 }, { "icon_id": "1262357", "name": "volume-off", "font_class": "volume-off", "unicode": "e8ee", "unicode_decimal": 59630 }, { "icon_id": "1262358", "name": "volume-down", "font_class": "volume-down", "unicode": "e8ef", "unicode_decimal": 59631 }, { "icon_id": "1262359", "name": "warning", "font_class": "warning", "unicode": "e8f0", "unicode_decimal": 59632 }, { "icon_id": "1262360", "name": "volume-up", "font_class": "volume-up", "unicode": "e8f1", "unicode_decimal": 59633 }, { "icon_id": "1262361", "name": "wechat", "font_class": "wechat", "unicode": "e8f2", "unicode_decimal": 59634 }, { "icon_id": "1262362", "name": "weibo", "font_class": "weibo", "unicode": "e8f3", "unicode_decimal": 59635 }, { "icon_id": "1262363", "name": "whatsapp", "font_class": "whatsapp", "unicode": "e8f4", "unicode_decimal": 59636 }, { "icon_id": "1262364", "name": "weixin", "font_class": "weixin", "unicode": "e8f5", "unicode_decimal": 59637 }, { "icon_id": "1262365", "name": "wheelchair-alt", "font_class": "wheelchair-alt", "unicode": "e8f6", "unicode_decimal": 59638 }, { "icon_id": "1262366", "name": "wheelchair", "font_class": "wheelchair", "unicode": "e8f7", "unicode_decimal": 59639 }, { "icon_id": "1262367", "name": "wikipedia-w", "font_class": "wikipedia-w", "unicode": "e8f8", "unicode_decimal": 59640 }, { "icon_id": "1262368", "name": "wifi", "font_class": "wifi", "unicode": "e8f9", "unicode_decimal": 59641 }, { "icon_id": "1262369", "name": "window-close", "font_class": "window-close", "unicode": "e8fa", "unicode_decimal": 59642 }, { "icon_id": "1262370", "name": "window-close-o", "font_class": "window-close-o", "unicode": "e8fb", "unicode_decimal": 59643 }, { "icon_id": "1262371", "name": "window-maximize", "font_class": "window-maximize", "unicode": "e8fc", "unicode_decimal": 59644 }, { "icon_id": "1262372", "name": "window-minimize", "font_class": "window-minimize", "unicode": "e8fd", "unicode_decimal": 59645 }, { "icon_id": "1262373", "name": "window-restore", "font_class": "window-restore", "unicode": "e8fe", "unicode_decimal": 59646 }, { "icon_id": "1262374", "name": "windows", "font_class": "windows", "unicode": "e8ff", "unicode_decimal": 59647 }, { "icon_id": "1262375", "name": "won", "font_class": "won", "unicode": "e900", "unicode_decimal": 59648 }, { "icon_id": "1262376", "name": "wordpress", "font_class": "wordpress", "unicode": "e901", "unicode_decimal": 59649 }, { "icon_id": "1262377", "name": "wpexplorer", "font_class": "wpexplorer", "unicode": "e902", "unicode_decimal": 59650 }, { "icon_id": "1262378", "name": "wpbeginner", "font_class": "wpbeginner", "unicode": "e903", "unicode_decimal": 59651 }, { "icon_id": "1262379", "name": "xing-square", "font_class": "xing-square", "unicode": "e904", "unicode_decimal": 59652 }, { "icon_id": "1262380", "name": "wrench", "font_class": "wrench", "unicode": "e905", "unicode_decimal": 59653 }, { "icon_id": "1262381", "name": "wpforms", "font_class": "wpforms", "unicode": "e906", "unicode_decimal": 59654 }, { "icon_id": "1262382", "name": "y-combinator", "font_class": "y-combinator", "unicode": "e907", "unicode_decimal": 59655 }, { "icon_id": "1262383", "name": "xing", "font_class": "xing", "unicode": "e908", "unicode_decimal": 59656 }, { "icon_id": "1262384", "name": "y-combinator-square", "font_class": "y-combinator-square", "unicode": "e909", "unicode_decimal": 59657 }, { "icon_id": "1262385", "name": "yahoo", "font_class": "yahoo", "unicode": "e90a", "unicode_decimal": 59658 }, { "icon_id": "1262386", "name": "yc", "font_class": "yc", "unicode": "e90b", "unicode_decimal": 59659 }, { "icon_id": "1262387", "name": "yc-square", "font_class": "yc-square", "unicode": "e90c", "unicode_decimal": 59660 }, { "icon_id": "1262388", "name": "yen", "font_class": "yen", "unicode": "e90d", "unicode_decimal": 59661 }, { "icon_id": "1262389", "name": "yelp", "font_class": "yelp", "unicode": "e90e", "unicode_decimal": 59662 }, { "icon_id": "1262390", "name": "yoast", "font_class": "yoast", "unicode": "e90f", "unicode_decimal": 59663 }, { "icon_id": "1262391", "name": "youtube-play", "font_class": "youtube-play", "unicode": "e910", "unicode_decimal": 59664 }, { "icon_id": "1262392", "name": "youtube-square", "font_class": "youtube-square", "unicode": "e911", "unicode_decimal": 59665 }, { "icon_id": "1262393", "name": "youtube", "font_class": "youtube", "unicode": "e912", "unicode_decimal": 59666 } ] } ================================================ FILE: src/main/resources/static/assets/vendor/jquery/jquery-1.12.4.js ================================================ /*! * jQuery JavaScript Library v1.12.4 * http://jquery.com/ * * Includes Sizzle.js * http://sizzlejs.com/ * * Copyright jQuery Foundation and other contributors * Released under the MIT license * http://jquery.org/license * * Date: 2016-05-20T17:17Z */ (function( global, factory ) { if ( typeof module === "object" && typeof module.exports === "object" ) { // For CommonJS and CommonJS-like environments where a proper `window` // is present, execute the factory and get jQuery. // For environments that do not have a `window` with a `document` // (such as Node.js), expose a factory as module.exports. // This accentuates the need for the creation of a real `window`. // e.g. var jQuery = require("jquery")(window); // See ticket #14549 for more info. module.exports = global.document ? factory( global, true ) : function( w ) { if ( !w.document ) { throw new Error( "jQuery requires a window with a document" ); } return factory( w ); }; } else { factory( global ); } // Pass this if window is not defined yet }(typeof window !== "undefined" ? window : this, function( window, noGlobal ) { // Support: Firefox 18+ // Can't be in strict mode, several libs including ASP.NET trace // the stack via arguments.caller.callee and Firefox dies if // you try to trace through "use strict" call chains. (#13335) //"use strict"; var deletedIds = []; var document = window.document; var slice = deletedIds.slice; var concat = deletedIds.concat; var push = deletedIds.push; var indexOf = deletedIds.indexOf; var class2type = {}; var toString = class2type.toString; var hasOwn = class2type.hasOwnProperty; var support = {}; var version = "1.12.4", // Define a local copy of jQuery jQuery = function( selector, context ) { // The jQuery object is actually just the init constructor 'enhanced' // Need init if jQuery is called (just allow error to be thrown if not included) return new jQuery.fn.init( selector, context ); }, // Support: Android<4.1, IE<9 // Make sure we trim BOM and NBSP rtrim = /^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g, // Matches dashed string for camelizing rmsPrefix = /^-ms-/, rdashAlpha = /-([\da-z])/gi, // Used by jQuery.camelCase as callback to replace() fcamelCase = function( all, letter ) { return letter.toUpperCase(); }; jQuery.fn = jQuery.prototype = { // The current version of jQuery being used jquery: version, constructor: jQuery, // Start with an empty selector selector: "", // The default length of a jQuery object is 0 length: 0, toArray: function() { return slice.call( this ); }, // Get the Nth element in the matched element set OR // Get the whole matched element set as a clean array get: function( num ) { return num != null ? // Return just the one element from the set ( num < 0 ? this[ num + this.length ] : this[ num ] ) : // Return all the elements in a clean array slice.call( this ); }, // Take an array of elements and push it onto the stack // (returning the new matched element set) pushStack: function( elems ) { // Build a new jQuery matched element set var ret = jQuery.merge( this.constructor(), elems ); // Add the old object onto the stack (as a reference) ret.prevObject = this; ret.context = this.context; // Return the newly-formed element set return ret; }, // Execute a callback for every element in the matched set. each: function( callback ) { return jQuery.each( this, callback ); }, map: function( callback ) { return this.pushStack( jQuery.map( this, function( elem, i ) { return callback.call( elem, i, elem ); } ) ); }, slice: function() { return this.pushStack( slice.apply( this, arguments ) ); }, first: function() { return this.eq( 0 ); }, last: function() { return this.eq( -1 ); }, eq: function( i ) { var len = this.length, j = +i + ( i < 0 ? len : 0 ); return this.pushStack( j >= 0 && j < len ? [ this[ j ] ] : [] ); }, end: function() { return this.prevObject || this.constructor(); }, // For internal use only. // Behaves like an Array's method, not like a jQuery method. push: push, sort: deletedIds.sort, splice: deletedIds.splice }; jQuery.extend = jQuery.fn.extend = function() { var src, copyIsArray, copy, name, options, clone, target = arguments[ 0 ] || {}, i = 1, length = arguments.length, deep = false; // Handle a deep copy situation if ( typeof target === "boolean" ) { deep = target; // skip the boolean and the target target = arguments[ i ] || {}; i++; } // Handle case when target is a string or something (possible in deep copy) if ( typeof target !== "object" && !jQuery.isFunction( target ) ) { target = {}; } // extend jQuery itself if only one argument is passed if ( i === length ) { target = this; i--; } for ( ; i < length; i++ ) { // Only deal with non-null/undefined values if ( ( options = arguments[ i ] ) != null ) { // Extend the base object for ( name in options ) { src = target[ name ]; copy = options[ name ]; // Prevent never-ending loop if ( target === copy ) { continue; } // Recurse if we're merging plain objects or arrays if ( deep && copy && ( jQuery.isPlainObject( copy ) || ( copyIsArray = jQuery.isArray( copy ) ) ) ) { if ( copyIsArray ) { copyIsArray = false; clone = src && jQuery.isArray( src ) ? src : []; } else { clone = src && jQuery.isPlainObject( src ) ? src : {}; } // Never move original objects, clone them target[ name ] = jQuery.extend( deep, clone, copy ); // Don't bring in undefined values } else if ( copy !== undefined ) { target[ name ] = copy; } } } } // Return the modified object return target; }; jQuery.extend( { // Unique for each copy of jQuery on the page expando: "jQuery" + ( version + Math.random() ).replace( /\D/g, "" ), // Assume jQuery is ready without the ready module isReady: true, error: function( msg ) { throw new Error( msg ); }, noop: function() {}, // See test/unit/core.js for details concerning isFunction. // Since version 1.3, DOM methods and functions like alert // aren't supported. They return false on IE (#2968). isFunction: function( obj ) { return jQuery.type( obj ) === "function"; }, isArray: Array.isArray || function( obj ) { return jQuery.type( obj ) === "array"; }, isWindow: function( obj ) { /* jshint eqeqeq: false */ return obj != null && obj == obj.window; }, isNumeric: function( obj ) { // parseFloat NaNs numeric-cast false positives (null|true|false|"") // ...but misinterprets leading-number strings, particularly hex literals ("0x...") // subtraction forces infinities to NaN // adding 1 corrects loss of precision from parseFloat (#15100) var realStringObj = obj && obj.toString(); return !jQuery.isArray( obj ) && ( realStringObj - parseFloat( realStringObj ) + 1 ) >= 0; }, isEmptyObject: function( obj ) { var name; for ( name in obj ) { return false; } return true; }, isPlainObject: function( obj ) { var key; // Must be an Object. // Because of IE, we also have to check the presence of the constructor property. // Make sure that DOM nodes and window objects don't pass through, as well if ( !obj || jQuery.type( obj ) !== "object" || obj.nodeType || jQuery.isWindow( obj ) ) { return false; } try { // Not own constructor property must be Object if ( obj.constructor && !hasOwn.call( obj, "constructor" ) && !hasOwn.call( obj.constructor.prototype, "isPrototypeOf" ) ) { return false; } } catch ( e ) { // IE8,9 Will throw exceptions on certain host objects #9897 return false; } // Support: IE<9 // Handle iteration over inherited properties before own properties. if ( !support.ownFirst ) { for ( key in obj ) { return hasOwn.call( obj, key ); } } // Own properties are enumerated firstly, so to speed up, // if last one is own, then all properties are own. for ( key in obj ) {} return key === undefined || hasOwn.call( obj, key ); }, type: function( obj ) { if ( obj == null ) { return obj + ""; } return typeof obj === "object" || typeof obj === "function" ? class2type[ toString.call( obj ) ] || "object" : typeof obj; }, // Workarounds based on findings by Jim Driscoll // http://weblogs.java.net/blog/driscoll/archive/2009/09/08/eval-javascript-global-context globalEval: function( data ) { if ( data && jQuery.trim( data ) ) { // We use execScript on Internet Explorer // We use an anonymous function so that context is window // rather than jQuery in Firefox ( window.execScript || function( data ) { window[ "eval" ].call( window, data ); // jscs:ignore requireDotNotation } )( data ); } }, // Convert dashed to camelCase; used by the css and data modules // Microsoft forgot to hump their vendor prefix (#9572) camelCase: function( string ) { return string.replace( rmsPrefix, "ms-" ).replace( rdashAlpha, fcamelCase ); }, nodeName: function( elem, name ) { return elem.nodeName && elem.nodeName.toLowerCase() === name.toLowerCase(); }, each: function( obj, callback ) { var length, i = 0; if ( isArrayLike( obj ) ) { length = obj.length; for ( ; i < length; i++ ) { if ( callback.call( obj[ i ], i, obj[ i ] ) === false ) { break; } } } else { for ( i in obj ) { if ( callback.call( obj[ i ], i, obj[ i ] ) === false ) { break; } } } return obj; }, // Support: Android<4.1, IE<9 trim: function( text ) { return text == null ? "" : ( text + "" ).replace( rtrim, "" ); }, // results is for internal usage only makeArray: function( arr, results ) { var ret = results || []; if ( arr != null ) { if ( isArrayLike( Object( arr ) ) ) { jQuery.merge( ret, typeof arr === "string" ? [ arr ] : arr ); } else { push.call( ret, arr ); } } return ret; }, inArray: function( elem, arr, i ) { var len; if ( arr ) { if ( indexOf ) { return indexOf.call( arr, elem, i ); } len = arr.length; i = i ? i < 0 ? Math.max( 0, len + i ) : i : 0; for ( ; i < len; i++ ) { // Skip accessing in sparse arrays if ( i in arr && arr[ i ] === elem ) { return i; } } } return -1; }, merge: function( first, second ) { var len = +second.length, j = 0, i = first.length; while ( j < len ) { first[ i++ ] = second[ j++ ]; } // Support: IE<9 // Workaround casting of .length to NaN on otherwise arraylike objects (e.g., NodeLists) if ( len !== len ) { while ( second[ j ] !== undefined ) { first[ i++ ] = second[ j++ ]; } } first.length = i; return first; }, grep: function( elems, callback, invert ) { var callbackInverse, matches = [], i = 0, length = elems.length, callbackExpect = !invert; // Go through the array, only saving the items // that pass the validator function for ( ; i < length; i++ ) { callbackInverse = !callback( elems[ i ], i ); if ( callbackInverse !== callbackExpect ) { matches.push( elems[ i ] ); } } return matches; }, // arg is for internal usage only map: function( elems, callback, arg ) { var length, value, i = 0, ret = []; // Go through the array, translating each of the items to their new values if ( isArrayLike( elems ) ) { length = elems.length; for ( ; i < length; i++ ) { value = callback( elems[ i ], i, arg ); if ( value != null ) { ret.push( value ); } } // Go through every key on the object, } else { for ( i in elems ) { value = callback( elems[ i ], i, arg ); if ( value != null ) { ret.push( value ); } } } // Flatten any nested arrays return concat.apply( [], ret ); }, // A global GUID counter for objects guid: 1, // Bind a function to a context, optionally partially applying any // arguments. proxy: function( fn, context ) { var args, proxy, tmp; if ( typeof context === "string" ) { tmp = fn[ context ]; context = fn; fn = tmp; } // Quick check to determine if target is callable, in the spec // this throws a TypeError, but we will just return undefined. if ( !jQuery.isFunction( fn ) ) { return undefined; } // Simulated bind args = slice.call( arguments, 2 ); proxy = function() { return fn.apply( context || this, args.concat( slice.call( arguments ) ) ); }; // Set the guid of unique handler to the same of original handler, so it can be removed proxy.guid = fn.guid = fn.guid || jQuery.guid++; return proxy; }, now: function() { return +( new Date() ); }, // jQuery.support is not used in Core but other projects attach their // properties to it so it needs to exist. support: support } ); // JSHint would error on this code due to the Symbol not being defined in ES5. // Defining this global in .jshintrc would create a danger of using the global // unguarded in another place, it seems safer to just disable JSHint for these // three lines. /* jshint ignore: start */ if ( typeof Symbol === "function" ) { jQuery.fn[ Symbol.iterator ] = deletedIds[ Symbol.iterator ]; } /* jshint ignore: end */ // Populate the class2type map jQuery.each( "Boolean Number String Function Array Date RegExp Object Error Symbol".split( " " ), function( i, name ) { class2type[ "[object " + name + "]" ] = name.toLowerCase(); } ); function isArrayLike( obj ) { // Support: iOS 8.2 (not reproducible in simulator) // `in` check used to prevent JIT error (gh-2145) // hasOwn isn't used here due to false negatives // regarding Nodelist length in IE var length = !!obj && "length" in obj && obj.length, type = jQuery.type( obj ); if ( type === "function" || jQuery.isWindow( obj ) ) { return false; } return type === "array" || length === 0 || typeof length === "number" && length > 0 && ( length - 1 ) in obj; } var Sizzle = /*! * Sizzle CSS Selector Engine v2.2.1 * http://sizzlejs.com/ * * Copyright jQuery Foundation and other contributors * Released under the MIT license * http://jquery.org/license * * Date: 2015-10-17 */ (function( window ) { var i, support, Expr, getText, isXML, tokenize, compile, select, outermostContext, sortInput, hasDuplicate, // Local document vars setDocument, document, docElem, documentIsHTML, rbuggyQSA, rbuggyMatches, matches, contains, // Instance-specific data expando = "sizzle" + 1 * new Date(), preferredDoc = window.document, dirruns = 0, done = 0, classCache = createCache(), tokenCache = createCache(), compilerCache = createCache(), sortOrder = function( a, b ) { if ( a === b ) { hasDuplicate = true; } return 0; }, // General-purpose constants MAX_NEGATIVE = 1 << 31, // Instance methods hasOwn = ({}).hasOwnProperty, arr = [], pop = arr.pop, push_native = arr.push, push = arr.push, slice = arr.slice, // Use a stripped-down indexOf as it's faster than native // http://jsperf.com/thor-indexof-vs-for/5 indexOf = function( list, elem ) { var i = 0, len = list.length; for ( ; i < len; i++ ) { if ( list[i] === elem ) { return i; } } return -1; }, booleans = "checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|ismap|loop|multiple|open|readonly|required|scoped", // Regular expressions // http://www.w3.org/TR/css3-selectors/#whitespace whitespace = "[\\x20\\t\\r\\n\\f]", // http://www.w3.org/TR/CSS21/syndata.html#value-def-identifier identifier = "(?:\\\\.|[\\w-]|[^\\x00-\\xa0])+", // Attribute selectors: http://www.w3.org/TR/selectors/#attribute-selectors attributes = "\\[" + whitespace + "*(" + identifier + ")(?:" + whitespace + // Operator (capture 2) "*([*^$|!~]?=)" + whitespace + // "Attribute values must be CSS identifiers [capture 5] or strings [capture 3 or capture 4]" "*(?:'((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\"|(" + identifier + "))|)" + whitespace + "*\\]", pseudos = ":(" + identifier + ")(?:\\((" + // To reduce the number of selectors needing tokenize in the preFilter, prefer arguments: // 1. quoted (capture 3; capture 4 or capture 5) "('((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\")|" + // 2. simple (capture 6) "((?:\\\\.|[^\\\\()[\\]]|" + attributes + ")*)|" + // 3. anything else (capture 2) ".*" + ")\\)|)", // Leading and non-escaped trailing whitespace, capturing some non-whitespace characters preceding the latter rwhitespace = new RegExp( whitespace + "+", "g" ), rtrim = new RegExp( "^" + whitespace + "+|((?:^|[^\\\\])(?:\\\\.)*)" + whitespace + "+$", "g" ), rcomma = new RegExp( "^" + whitespace + "*," + whitespace + "*" ), rcombinators = new RegExp( "^" + whitespace + "*([>+~]|" + whitespace + ")" + whitespace + "*" ), rattributeQuotes = new RegExp( "=" + whitespace + "*([^\\]'\"]*?)" + whitespace + "*\\]", "g" ), rpseudo = new RegExp( pseudos ), ridentifier = new RegExp( "^" + identifier + "$" ), matchExpr = { "ID": new RegExp( "^#(" + identifier + ")" ), "CLASS": new RegExp( "^\\.(" + identifier + ")" ), "TAG": new RegExp( "^(" + identifier + "|[*])" ), "ATTR": new RegExp( "^" + attributes ), "PSEUDO": new RegExp( "^" + pseudos ), "CHILD": new RegExp( "^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\(" + whitespace + "*(even|odd|(([+-]|)(\\d*)n|)" + whitespace + "*(?:([+-]|)" + whitespace + "*(\\d+)|))" + whitespace + "*\\)|)", "i" ), "bool": new RegExp( "^(?:" + booleans + ")$", "i" ), // For use in libraries implementing .is() // We use this for POS matching in `select` "needsContext": new RegExp( "^" + whitespace + "*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\(" + whitespace + "*((?:-\\d)?\\d*)" + whitespace + "*\\)|)(?=[^-]|$)", "i" ) }, rinputs = /^(?:input|select|textarea|button)$/i, rheader = /^h\d$/i, rnative = /^[^{]+\{\s*\[native \w/, // Easily-parseable/retrievable ID or TAG or CLASS selectors rquickExpr = /^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/, rsibling = /[+~]/, rescape = /'|\\/g, // CSS escapes http://www.w3.org/TR/CSS21/syndata.html#escaped-characters runescape = new RegExp( "\\\\([\\da-f]{1,6}" + whitespace + "?|(" + whitespace + ")|.)", "ig" ), funescape = function( _, escaped, escapedWhitespace ) { var high = "0x" + escaped - 0x10000; // NaN means non-codepoint // Support: Firefox<24 // Workaround erroneous numeric interpretation of +"0x" return high !== high || escapedWhitespace ? escaped : high < 0 ? // BMP codepoint String.fromCharCode( high + 0x10000 ) : // Supplemental Plane codepoint (surrogate pair) String.fromCharCode( high >> 10 | 0xD800, high & 0x3FF | 0xDC00 ); }, // Used for iframes // See setDocument() // Removing the function wrapper causes a "Permission Denied" // error in IE unloadHandler = function() { setDocument(); }; // Optimize for push.apply( _, NodeList ) try { push.apply( (arr = slice.call( preferredDoc.childNodes )), preferredDoc.childNodes ); // Support: Android<4.0 // Detect silently failing push.apply arr[ preferredDoc.childNodes.length ].nodeType; } catch ( e ) { push = { apply: arr.length ? // Leverage slice if possible function( target, els ) { push_native.apply( target, slice.call(els) ); } : // Support: IE<9 // Otherwise append directly function( target, els ) { var j = target.length, i = 0; // Can't trust NodeList.length while ( (target[j++] = els[i++]) ) {} target.length = j - 1; } }; } function Sizzle( selector, context, results, seed ) { var m, i, elem, nid, nidselect, match, groups, newSelector, newContext = context && context.ownerDocument, // nodeType defaults to 9, since context defaults to document nodeType = context ? context.nodeType : 9; results = results || []; // Return early from calls with invalid selector or context if ( typeof selector !== "string" || !selector || nodeType !== 1 && nodeType !== 9 && nodeType !== 11 ) { return results; } // Try to shortcut find operations (as opposed to filters) in HTML documents if ( !seed ) { if ( ( context ? context.ownerDocument || context : preferredDoc ) !== document ) { setDocument( context ); } context = context || document; if ( documentIsHTML ) { // If the selector is sufficiently simple, try using a "get*By*" DOM method // (excepting DocumentFragment context, where the methods don't exist) if ( nodeType !== 11 && (match = rquickExpr.exec( selector )) ) { // ID selector if ( (m = match[1]) ) { // Document context if ( nodeType === 9 ) { if ( (elem = context.getElementById( m )) ) { // Support: IE, Opera, Webkit // TODO: identify versions // getElementById can match elements by name instead of ID if ( elem.id === m ) { results.push( elem ); return results; } } else { return results; } // Element context } else { // Support: IE, Opera, Webkit // TODO: identify versions // getElementById can match elements by name instead of ID if ( newContext && (elem = newContext.getElementById( m )) && contains( context, elem ) && elem.id === m ) { results.push( elem ); return results; } } // Type selector } else if ( match[2] ) { push.apply( results, context.getElementsByTagName( selector ) ); return results; // Class selector } else if ( (m = match[3]) && support.getElementsByClassName && context.getElementsByClassName ) { push.apply( results, context.getElementsByClassName( m ) ); return results; } } // Take advantage of querySelectorAll if ( support.qsa && !compilerCache[ selector + " " ] && (!rbuggyQSA || !rbuggyQSA.test( selector )) ) { if ( nodeType !== 1 ) { newContext = context; newSelector = selector; // qSA looks outside Element context, which is not what we want // Thanks to Andrew Dupont for this workaround technique // Support: IE <=8 // Exclude object elements } else if ( context.nodeName.toLowerCase() !== "object" ) { // Capture the context ID, setting it first if necessary if ( (nid = context.getAttribute( "id" )) ) { nid = nid.replace( rescape, "\\$&" ); } else { context.setAttribute( "id", (nid = expando) ); } // Prefix every selector in the list groups = tokenize( selector ); i = groups.length; nidselect = ridentifier.test( nid ) ? "#" + nid : "[id='" + nid + "']"; while ( i-- ) { groups[i] = nidselect + " " + toSelector( groups[i] ); } newSelector = groups.join( "," ); // Expand context for sibling selectors newContext = rsibling.test( selector ) && testContext( context.parentNode ) || context; } if ( newSelector ) { try { push.apply( results, newContext.querySelectorAll( newSelector ) ); return results; } catch ( qsaError ) { } finally { if ( nid === expando ) { context.removeAttribute( "id" ); } } } } } } // All others return select( selector.replace( rtrim, "$1" ), context, results, seed ); } /** * Create key-value caches of limited size * @returns {function(string, object)} Returns the Object data after storing it on itself with * property name the (space-suffixed) string and (if the cache is larger than Expr.cacheLength) * deleting the oldest entry */ function createCache() { var keys = []; function cache( key, value ) { // Use (key + " ") to avoid collision with native prototype properties (see Issue #157) if ( keys.push( key + " " ) > Expr.cacheLength ) { // Only keep the most recent entries delete cache[ keys.shift() ]; } return (cache[ key + " " ] = value); } return cache; } /** * Mark a function for special use by Sizzle * @param {Function} fn The function to mark */ function markFunction( fn ) { fn[ expando ] = true; return fn; } /** * Support testing using an element * @param {Function} fn Passed the created div and expects a boolean result */ function assert( fn ) { var div = document.createElement("div"); try { return !!fn( div ); } catch (e) { return false; } finally { // Remove from its parent by default if ( div.parentNode ) { div.parentNode.removeChild( div ); } // release memory in IE div = null; } } /** * Adds the same handler for all of the specified attrs * @param {String} attrs Pipe-separated list of attributes * @param {Function} handler The method that will be applied */ function addHandle( attrs, handler ) { var arr = attrs.split("|"), i = arr.length; while ( i-- ) { Expr.attrHandle[ arr[i] ] = handler; } } /** * Checks document order of two siblings * @param {Element} a * @param {Element} b * @returns {Number} Returns less than 0 if a precedes b, greater than 0 if a follows b */ function siblingCheck( a, b ) { var cur = b && a, diff = cur && a.nodeType === 1 && b.nodeType === 1 && ( ~b.sourceIndex || MAX_NEGATIVE ) - ( ~a.sourceIndex || MAX_NEGATIVE ); // Use IE sourceIndex if available on both nodes if ( diff ) { return diff; } // Check if b follows a if ( cur ) { while ( (cur = cur.nextSibling) ) { if ( cur === b ) { return -1; } } } return a ? 1 : -1; } /** * Returns a function to use in pseudos for input types * @param {String} type */ function createInputPseudo( type ) { return function( elem ) { var name = elem.nodeName.toLowerCase(); return name === "input" && elem.type === type; }; } /** * Returns a function to use in pseudos for buttons * @param {String} type */ function createButtonPseudo( type ) { return function( elem ) { var name = elem.nodeName.toLowerCase(); return (name === "input" || name === "button") && elem.type === type; }; } /** * Returns a function to use in pseudos for positionals * @param {Function} fn */ function createPositionalPseudo( fn ) { return markFunction(function( argument ) { argument = +argument; return markFunction(function( seed, matches ) { var j, matchIndexes = fn( [], seed.length, argument ), i = matchIndexes.length; // Match elements found at the specified indexes while ( i-- ) { if ( seed[ (j = matchIndexes[i]) ] ) { seed[j] = !(matches[j] = seed[j]); } } }); }); } /** * Checks a node for validity as a Sizzle context * @param {Element|Object=} context * @returns {Element|Object|Boolean} The input node if acceptable, otherwise a falsy value */ function testContext( context ) { return context && typeof context.getElementsByTagName !== "undefined" && context; } // Expose support vars for convenience support = Sizzle.support = {}; /** * Detects XML nodes * @param {Element|Object} elem An element or a document * @returns {Boolean} True iff elem is a non-HTML XML node */ isXML = Sizzle.isXML = function( elem ) { // documentElement is verified for cases where it doesn't yet exist // (such as loading iframes in IE - #4833) var documentElement = elem && (elem.ownerDocument || elem).documentElement; return documentElement ? documentElement.nodeName !== "HTML" : false; }; /** * Sets document-related variables once based on the current document * @param {Element|Object} [doc] An element or document object to use to set the document * @returns {Object} Returns the current document */ setDocument = Sizzle.setDocument = function( node ) { var hasCompare, parent, doc = node ? node.ownerDocument || node : preferredDoc; // Return early if doc is invalid or already selected if ( doc === document || doc.nodeType !== 9 || !doc.documentElement ) { return document; } // Update global variables document = doc; docElem = document.documentElement; documentIsHTML = !isXML( document ); // Support: IE 9-11, Edge // Accessing iframe documents after unload throws "permission denied" errors (jQuery #13936) if ( (parent = document.defaultView) && parent.top !== parent ) { // Support: IE 11 if ( parent.addEventListener ) { parent.addEventListener( "unload", unloadHandler, false ); // Support: IE 9 - 10 only } else if ( parent.attachEvent ) { parent.attachEvent( "onunload", unloadHandler ); } } /* Attributes ---------------------------------------------------------------------- */ // Support: IE<8 // Verify that getAttribute really returns attributes and not properties // (excepting IE8 booleans) support.attributes = assert(function( div ) { div.className = "i"; return !div.getAttribute("className"); }); /* getElement(s)By* ---------------------------------------------------------------------- */ // Check if getElementsByTagName("*") returns only elements support.getElementsByTagName = assert(function( div ) { div.appendChild( document.createComment("") ); return !div.getElementsByTagName("*").length; }); // Support: IE<9 support.getElementsByClassName = rnative.test( document.getElementsByClassName ); // Support: IE<10 // Check if getElementById returns elements by name // The broken getElementById methods don't pick up programatically-set names, // so use a roundabout getElementsByName test support.getById = assert(function( div ) { docElem.appendChild( div ).id = expando; return !document.getElementsByName || !document.getElementsByName( expando ).length; }); // ID find and filter if ( support.getById ) { Expr.find["ID"] = function( id, context ) { if ( typeof context.getElementById !== "undefined" && documentIsHTML ) { var m = context.getElementById( id ); return m ? [ m ] : []; } }; Expr.filter["ID"] = function( id ) { var attrId = id.replace( runescape, funescape ); return function( elem ) { return elem.getAttribute("id") === attrId; }; }; } else { // Support: IE6/7 // getElementById is not reliable as a find shortcut delete Expr.find["ID"]; Expr.filter["ID"] = function( id ) { var attrId = id.replace( runescape, funescape ); return function( elem ) { var node = typeof elem.getAttributeNode !== "undefined" && elem.getAttributeNode("id"); return node && node.value === attrId; }; }; } // Tag Expr.find["TAG"] = support.getElementsByTagName ? function( tag, context ) { if ( typeof context.getElementsByTagName !== "undefined" ) { return context.getElementsByTagName( tag ); // DocumentFragment nodes don't have gEBTN } else if ( support.qsa ) { return context.querySelectorAll( tag ); } } : function( tag, context ) { var elem, tmp = [], i = 0, // By happy coincidence, a (broken) gEBTN appears on DocumentFragment nodes too results = context.getElementsByTagName( tag ); // Filter out possible comments if ( tag === "*" ) { while ( (elem = results[i++]) ) { if ( elem.nodeType === 1 ) { tmp.push( elem ); } } return tmp; } return results; }; // Class Expr.find["CLASS"] = support.getElementsByClassName && function( className, context ) { if ( typeof context.getElementsByClassName !== "undefined" && documentIsHTML ) { return context.getElementsByClassName( className ); } }; /* QSA/matchesSelector ---------------------------------------------------------------------- */ // QSA and matchesSelector support // matchesSelector(:active) reports false when true (IE9/Opera 11.5) rbuggyMatches = []; // qSa(:focus) reports false when true (Chrome 21) // We allow this because of a bug in IE8/9 that throws an error // whenever `document.activeElement` is accessed on an iframe // So, we allow :focus to pass through QSA all the time to avoid the IE error // See http://bugs.jquery.com/ticket/13378 rbuggyQSA = []; if ( (support.qsa = rnative.test( document.querySelectorAll )) ) { // Build QSA regex // Regex strategy adopted from Diego Perini assert(function( div ) { // Select is set to empty string on purpose // This is to test IE's treatment of not explicitly // setting a boolean content attribute, // since its presence should be enough // http://bugs.jquery.com/ticket/12359 docElem.appendChild( div ).innerHTML = "" + ""; // Support: IE8, Opera 11-12.16 // Nothing should be selected when empty strings follow ^= or $= or *= // The test attribute must be unknown in Opera but "safe" for WinRT // http://msdn.microsoft.com/en-us/library/ie/hh465388.aspx#attribute_section if ( div.querySelectorAll("[msallowcapture^='']").length ) { rbuggyQSA.push( "[*^$]=" + whitespace + "*(?:''|\"\")" ); } // Support: IE8 // Boolean attributes and "value" are not treated correctly if ( !div.querySelectorAll("[selected]").length ) { rbuggyQSA.push( "\\[" + whitespace + "*(?:value|" + booleans + ")" ); } // Support: Chrome<29, Android<4.4, Safari<7.0+, iOS<7.0+, PhantomJS<1.9.8+ if ( !div.querySelectorAll( "[id~=" + expando + "-]" ).length ) { rbuggyQSA.push("~="); } // Webkit/Opera - :checked should return selected option elements // http://www.w3.org/TR/2011/REC-css3-selectors-20110929/#checked // IE8 throws error here and will not see later tests if ( !div.querySelectorAll(":checked").length ) { rbuggyQSA.push(":checked"); } // Support: Safari 8+, iOS 8+ // https://bugs.webkit.org/show_bug.cgi?id=136851 // In-page `selector#id sibing-combinator selector` fails if ( !div.querySelectorAll( "a#" + expando + "+*" ).length ) { rbuggyQSA.push(".#.+[+~]"); } }); assert(function( div ) { // Support: Windows 8 Native Apps // The type and name attributes are restricted during .innerHTML assignment var input = document.createElement("input"); input.setAttribute( "type", "hidden" ); div.appendChild( input ).setAttribute( "name", "D" ); // Support: IE8 // Enforce case-sensitivity of name attribute if ( div.querySelectorAll("[name=d]").length ) { rbuggyQSA.push( "name" + whitespace + "*[*^$|!~]?=" ); } // FF 3.5 - :enabled/:disabled and hidden elements (hidden elements are still enabled) // IE8 throws error here and will not see later tests if ( !div.querySelectorAll(":enabled").length ) { rbuggyQSA.push( ":enabled", ":disabled" ); } // Opera 10-11 does not throw on post-comma invalid pseudos div.querySelectorAll("*,:x"); rbuggyQSA.push(",.*:"); }); } if ( (support.matchesSelector = rnative.test( (matches = docElem.matches || docElem.webkitMatchesSelector || docElem.mozMatchesSelector || docElem.oMatchesSelector || docElem.msMatchesSelector) )) ) { assert(function( div ) { // Check to see if it's possible to do matchesSelector // on a disconnected node (IE 9) support.disconnectedMatch = matches.call( div, "div" ); // This should fail with an exception // Gecko does not error, returns false instead matches.call( div, "[s!='']:x" ); rbuggyMatches.push( "!=", pseudos ); }); } rbuggyQSA = rbuggyQSA.length && new RegExp( rbuggyQSA.join("|") ); rbuggyMatches = rbuggyMatches.length && new RegExp( rbuggyMatches.join("|") ); /* Contains ---------------------------------------------------------------------- */ hasCompare = rnative.test( docElem.compareDocumentPosition ); // Element contains another // Purposefully self-exclusive // As in, an element does not contain itself contains = hasCompare || rnative.test( docElem.contains ) ? function( a, b ) { var adown = a.nodeType === 9 ? a.documentElement : a, bup = b && b.parentNode; return a === bup || !!( bup && bup.nodeType === 1 && ( adown.contains ? adown.contains( bup ) : a.compareDocumentPosition && a.compareDocumentPosition( bup ) & 16 )); } : function( a, b ) { if ( b ) { while ( (b = b.parentNode) ) { if ( b === a ) { return true; } } } return false; }; /* Sorting ---------------------------------------------------------------------- */ // Document order sorting sortOrder = hasCompare ? function( a, b ) { // Flag for duplicate removal if ( a === b ) { hasDuplicate = true; return 0; } // Sort on method existence if only one input has compareDocumentPosition var compare = !a.compareDocumentPosition - !b.compareDocumentPosition; if ( compare ) { return compare; } // Calculate position if both inputs belong to the same document compare = ( a.ownerDocument || a ) === ( b.ownerDocument || b ) ? a.compareDocumentPosition( b ) : // Otherwise we know they are disconnected 1; // Disconnected nodes if ( compare & 1 || (!support.sortDetached && b.compareDocumentPosition( a ) === compare) ) { // Choose the first element that is related to our preferred document if ( a === document || a.ownerDocument === preferredDoc && contains(preferredDoc, a) ) { return -1; } if ( b === document || b.ownerDocument === preferredDoc && contains(preferredDoc, b) ) { return 1; } // Maintain original order return sortInput ? ( indexOf( sortInput, a ) - indexOf( sortInput, b ) ) : 0; } return compare & 4 ? -1 : 1; } : function( a, b ) { // Exit early if the nodes are identical if ( a === b ) { hasDuplicate = true; return 0; } var cur, i = 0, aup = a.parentNode, bup = b.parentNode, ap = [ a ], bp = [ b ]; // Parentless nodes are either documents or disconnected if ( !aup || !bup ) { return a === document ? -1 : b === document ? 1 : aup ? -1 : bup ? 1 : sortInput ? ( indexOf( sortInput, a ) - indexOf( sortInput, b ) ) : 0; // If the nodes are siblings, we can do a quick check } else if ( aup === bup ) { return siblingCheck( a, b ); } // Otherwise we need full lists of their ancestors for comparison cur = a; while ( (cur = cur.parentNode) ) { ap.unshift( cur ); } cur = b; while ( (cur = cur.parentNode) ) { bp.unshift( cur ); } // Walk down the tree looking for a discrepancy while ( ap[i] === bp[i] ) { i++; } return i ? // Do a sibling check if the nodes have a common ancestor siblingCheck( ap[i], bp[i] ) : // Otherwise nodes in our document sort first ap[i] === preferredDoc ? -1 : bp[i] === preferredDoc ? 1 : 0; }; return document; }; Sizzle.matches = function( expr, elements ) { return Sizzle( expr, null, null, elements ); }; Sizzle.matchesSelector = function( elem, expr ) { // Set document vars if needed if ( ( elem.ownerDocument || elem ) !== document ) { setDocument( elem ); } // Make sure that attribute selectors are quoted expr = expr.replace( rattributeQuotes, "='$1']" ); if ( support.matchesSelector && documentIsHTML && !compilerCache[ expr + " " ] && ( !rbuggyMatches || !rbuggyMatches.test( expr ) ) && ( !rbuggyQSA || !rbuggyQSA.test( expr ) ) ) { try { var ret = matches.call( elem, expr ); // IE 9's matchesSelector returns false on disconnected nodes if ( ret || support.disconnectedMatch || // As well, disconnected nodes are said to be in a document // fragment in IE 9 elem.document && elem.document.nodeType !== 11 ) { return ret; } } catch (e) {} } return Sizzle( expr, document, null, [ elem ] ).length > 0; }; Sizzle.contains = function( context, elem ) { // Set document vars if needed if ( ( context.ownerDocument || context ) !== document ) { setDocument( context ); } return contains( context, elem ); }; Sizzle.attr = function( elem, name ) { // Set document vars if needed if ( ( elem.ownerDocument || elem ) !== document ) { setDocument( elem ); } var fn = Expr.attrHandle[ name.toLowerCase() ], // Don't get fooled by Object.prototype properties (jQuery #13807) val = fn && hasOwn.call( Expr.attrHandle, name.toLowerCase() ) ? fn( elem, name, !documentIsHTML ) : undefined; return val !== undefined ? val : support.attributes || !documentIsHTML ? elem.getAttribute( name ) : (val = elem.getAttributeNode(name)) && val.specified ? val.value : null; }; Sizzle.error = function( msg ) { throw new Error( "Syntax error, unrecognized expression: " + msg ); }; /** * Document sorting and removing duplicates * @param {ArrayLike} results */ Sizzle.uniqueSort = function( results ) { var elem, duplicates = [], j = 0, i = 0; // Unless we *know* we can detect duplicates, assume their presence hasDuplicate = !support.detectDuplicates; sortInput = !support.sortStable && results.slice( 0 ); results.sort( sortOrder ); if ( hasDuplicate ) { while ( (elem = results[i++]) ) { if ( elem === results[ i ] ) { j = duplicates.push( i ); } } while ( j-- ) { results.splice( duplicates[ j ], 1 ); } } // Clear input after sorting to release objects // See https://github.com/jquery/sizzle/pull/225 sortInput = null; return results; }; /** * Utility function for retrieving the text value of an array of DOM nodes * @param {Array|Element} elem */ getText = Sizzle.getText = function( elem ) { var node, ret = "", i = 0, nodeType = elem.nodeType; if ( !nodeType ) { // If no nodeType, this is expected to be an array while ( (node = elem[i++]) ) { // Do not traverse comment nodes ret += getText( node ); } } else if ( nodeType === 1 || nodeType === 9 || nodeType === 11 ) { // Use textContent for elements // innerText usage removed for consistency of new lines (jQuery #11153) if ( typeof elem.textContent === "string" ) { return elem.textContent; } else { // Traverse its children for ( elem = elem.firstChild; elem; elem = elem.nextSibling ) { ret += getText( elem ); } } } else if ( nodeType === 3 || nodeType === 4 ) { return elem.nodeValue; } // Do not include comment or processing instruction nodes return ret; }; Expr = Sizzle.selectors = { // Can be adjusted by the user cacheLength: 50, createPseudo: markFunction, match: matchExpr, attrHandle: {}, find: {}, relative: { ">": { dir: "parentNode", first: true }, " ": { dir: "parentNode" }, "+": { dir: "previousSibling", first: true }, "~": { dir: "previousSibling" } }, preFilter: { "ATTR": function( match ) { match[1] = match[1].replace( runescape, funescape ); // Move the given value to match[3] whether quoted or unquoted match[3] = ( match[3] || match[4] || match[5] || "" ).replace( runescape, funescape ); if ( match[2] === "~=" ) { match[3] = " " + match[3] + " "; } return match.slice( 0, 4 ); }, "CHILD": function( match ) { /* matches from matchExpr["CHILD"] 1 type (only|nth|...) 2 what (child|of-type) 3 argument (even|odd|\d*|\d*n([+-]\d+)?|...) 4 xn-component of xn+y argument ([+-]?\d*n|) 5 sign of xn-component 6 x of xn-component 7 sign of y-component 8 y of y-component */ match[1] = match[1].toLowerCase(); if ( match[1].slice( 0, 3 ) === "nth" ) { // nth-* requires argument if ( !match[3] ) { Sizzle.error( match[0] ); } // numeric x and y parameters for Expr.filter.CHILD // remember that false/true cast respectively to 0/1 match[4] = +( match[4] ? match[5] + (match[6] || 1) : 2 * ( match[3] === "even" || match[3] === "odd" ) ); match[5] = +( ( match[7] + match[8] ) || match[3] === "odd" ); // other types prohibit arguments } else if ( match[3] ) { Sizzle.error( match[0] ); } return match; }, "PSEUDO": function( match ) { var excess, unquoted = !match[6] && match[2]; if ( matchExpr["CHILD"].test( match[0] ) ) { return null; } // Accept quoted arguments as-is if ( match[3] ) { match[2] = match[4] || match[5] || ""; // Strip excess characters from unquoted arguments } else if ( unquoted && rpseudo.test( unquoted ) && // Get excess from tokenize (recursively) (excess = tokenize( unquoted, true )) && // advance to the next closing parenthesis (excess = unquoted.indexOf( ")", unquoted.length - excess ) - unquoted.length) ) { // excess is a negative index match[0] = match[0].slice( 0, excess ); match[2] = unquoted.slice( 0, excess ); } // Return only captures needed by the pseudo filter method (type and argument) return match.slice( 0, 3 ); } }, filter: { "TAG": function( nodeNameSelector ) { var nodeName = nodeNameSelector.replace( runescape, funescape ).toLowerCase(); return nodeNameSelector === "*" ? function() { return true; } : function( elem ) { return elem.nodeName && elem.nodeName.toLowerCase() === nodeName; }; }, "CLASS": function( className ) { var pattern = classCache[ className + " " ]; return pattern || (pattern = new RegExp( "(^|" + whitespace + ")" + className + "(" + whitespace + "|$)" )) && classCache( className, function( elem ) { return pattern.test( typeof elem.className === "string" && elem.className || typeof elem.getAttribute !== "undefined" && elem.getAttribute("class") || "" ); }); }, "ATTR": function( name, operator, check ) { return function( elem ) { var result = Sizzle.attr( elem, name ); if ( result == null ) { return operator === "!="; } if ( !operator ) { return true; } result += ""; return operator === "=" ? result === check : operator === "!=" ? result !== check : operator === "^=" ? check && result.indexOf( check ) === 0 : operator === "*=" ? check && result.indexOf( check ) > -1 : operator === "$=" ? check && result.slice( -check.length ) === check : operator === "~=" ? ( " " + result.replace( rwhitespace, " " ) + " " ).indexOf( check ) > -1 : operator === "|=" ? result === check || result.slice( 0, check.length + 1 ) === check + "-" : false; }; }, "CHILD": function( type, what, argument, first, last ) { var simple = type.slice( 0, 3 ) !== "nth", forward = type.slice( -4 ) !== "last", ofType = what === "of-type"; return first === 1 && last === 0 ? // Shortcut for :nth-*(n) function( elem ) { return !!elem.parentNode; } : function( elem, context, xml ) { var cache, uniqueCache, outerCache, node, nodeIndex, start, dir = simple !== forward ? "nextSibling" : "previousSibling", parent = elem.parentNode, name = ofType && elem.nodeName.toLowerCase(), useCache = !xml && !ofType, diff = false; if ( parent ) { // :(first|last|only)-(child|of-type) if ( simple ) { while ( dir ) { node = elem; while ( (node = node[ dir ]) ) { if ( ofType ? node.nodeName.toLowerCase() === name : node.nodeType === 1 ) { return false; } } // Reverse direction for :only-* (if we haven't yet done so) start = dir = type === "only" && !start && "nextSibling"; } return true; } start = [ forward ? parent.firstChild : parent.lastChild ]; // non-xml :nth-child(...) stores cache data on `parent` if ( forward && useCache ) { // Seek `elem` from a previously-cached index // ...in a gzip-friendly way node = parent; outerCache = node[ expando ] || (node[ expando ] = {}); // Support: IE <9 only // Defend against cloned attroperties (jQuery gh-1709) uniqueCache = outerCache[ node.uniqueID ] || (outerCache[ node.uniqueID ] = {}); cache = uniqueCache[ type ] || []; nodeIndex = cache[ 0 ] === dirruns && cache[ 1 ]; diff = nodeIndex && cache[ 2 ]; node = nodeIndex && parent.childNodes[ nodeIndex ]; while ( (node = ++nodeIndex && node && node[ dir ] || // Fallback to seeking `elem` from the start (diff = nodeIndex = 0) || start.pop()) ) { // When found, cache indexes on `parent` and break if ( node.nodeType === 1 && ++diff && node === elem ) { uniqueCache[ type ] = [ dirruns, nodeIndex, diff ]; break; } } } else { // Use previously-cached element index if available if ( useCache ) { // ...in a gzip-friendly way node = elem; outerCache = node[ expando ] || (node[ expando ] = {}); // Support: IE <9 only // Defend against cloned attroperties (jQuery gh-1709) uniqueCache = outerCache[ node.uniqueID ] || (outerCache[ node.uniqueID ] = {}); cache = uniqueCache[ type ] || []; nodeIndex = cache[ 0 ] === dirruns && cache[ 1 ]; diff = nodeIndex; } // xml :nth-child(...) // or :nth-last-child(...) or :nth(-last)?-of-type(...) if ( diff === false ) { // Use the same loop as above to seek `elem` from the start while ( (node = ++nodeIndex && node && node[ dir ] || (diff = nodeIndex = 0) || start.pop()) ) { if ( ( ofType ? node.nodeName.toLowerCase() === name : node.nodeType === 1 ) && ++diff ) { // Cache the index of each encountered element if ( useCache ) { outerCache = node[ expando ] || (node[ expando ] = {}); // Support: IE <9 only // Defend against cloned attroperties (jQuery gh-1709) uniqueCache = outerCache[ node.uniqueID ] || (outerCache[ node.uniqueID ] = {}); uniqueCache[ type ] = [ dirruns, diff ]; } if ( node === elem ) { break; } } } } } // Incorporate the offset, then check against cycle size diff -= last; return diff === first || ( diff % first === 0 && diff / first >= 0 ); } }; }, "PSEUDO": function( pseudo, argument ) { // pseudo-class names are case-insensitive // http://www.w3.org/TR/selectors/#pseudo-classes // Prioritize by case sensitivity in case custom pseudos are added with uppercase letters // Remember that setFilters inherits from pseudos var args, fn = Expr.pseudos[ pseudo ] || Expr.setFilters[ pseudo.toLowerCase() ] || Sizzle.error( "unsupported pseudo: " + pseudo ); // The user may use createPseudo to indicate that // arguments are needed to create the filter function // just as Sizzle does if ( fn[ expando ] ) { return fn( argument ); } // But maintain support for old signatures if ( fn.length > 1 ) { args = [ pseudo, pseudo, "", argument ]; return Expr.setFilters.hasOwnProperty( pseudo.toLowerCase() ) ? markFunction(function( seed, matches ) { var idx, matched = fn( seed, argument ), i = matched.length; while ( i-- ) { idx = indexOf( seed, matched[i] ); seed[ idx ] = !( matches[ idx ] = matched[i] ); } }) : function( elem ) { return fn( elem, 0, args ); }; } return fn; } }, pseudos: { // Potentially complex pseudos "not": markFunction(function( selector ) { // Trim the selector passed to compile // to avoid treating leading and trailing // spaces as combinators var input = [], results = [], matcher = compile( selector.replace( rtrim, "$1" ) ); return matcher[ expando ] ? markFunction(function( seed, matches, context, xml ) { var elem, unmatched = matcher( seed, null, xml, [] ), i = seed.length; // Match elements unmatched by `matcher` while ( i-- ) { if ( (elem = unmatched[i]) ) { seed[i] = !(matches[i] = elem); } } }) : function( elem, context, xml ) { input[0] = elem; matcher( input, null, xml, results ); // Don't keep the element (issue #299) input[0] = null; return !results.pop(); }; }), "has": markFunction(function( selector ) { return function( elem ) { return Sizzle( selector, elem ).length > 0; }; }), "contains": markFunction(function( text ) { text = text.replace( runescape, funescape ); return function( elem ) { return ( elem.textContent || elem.innerText || getText( elem ) ).indexOf( text ) > -1; }; }), // "Whether an element is represented by a :lang() selector // is based solely on the element's language value // being equal to the identifier C, // or beginning with the identifier C immediately followed by "-". // The matching of C against the element's language value is performed case-insensitively. // The identifier C does not have to be a valid language name." // http://www.w3.org/TR/selectors/#lang-pseudo "lang": markFunction( function( lang ) { // lang value must be a valid identifier if ( !ridentifier.test(lang || "") ) { Sizzle.error( "unsupported lang: " + lang ); } lang = lang.replace( runescape, funescape ).toLowerCase(); return function( elem ) { var elemLang; do { if ( (elemLang = documentIsHTML ? elem.lang : elem.getAttribute("xml:lang") || elem.getAttribute("lang")) ) { elemLang = elemLang.toLowerCase(); return elemLang === lang || elemLang.indexOf( lang + "-" ) === 0; } } while ( (elem = elem.parentNode) && elem.nodeType === 1 ); return false; }; }), // Miscellaneous "target": function( elem ) { var hash = window.location && window.location.hash; return hash && hash.slice( 1 ) === elem.id; }, "root": function( elem ) { return elem === docElem; }, "focus": function( elem ) { return elem === document.activeElement && (!document.hasFocus || document.hasFocus()) && !!(elem.type || elem.href || ~elem.tabIndex); }, // Boolean properties "enabled": function( elem ) { return elem.disabled === false; }, "disabled": function( elem ) { return elem.disabled === true; }, "checked": function( elem ) { // In CSS3, :checked should return both checked and selected elements // http://www.w3.org/TR/2011/REC-css3-selectors-20110929/#checked var nodeName = elem.nodeName.toLowerCase(); return (nodeName === "input" && !!elem.checked) || (nodeName === "option" && !!elem.selected); }, "selected": function( elem ) { // Accessing this property makes selected-by-default // options in Safari work properly if ( elem.parentNode ) { elem.parentNode.selectedIndex; } return elem.selected === true; }, // Contents "empty": function( elem ) { // http://www.w3.org/TR/selectors/#empty-pseudo // :empty is negated by element (1) or content nodes (text: 3; cdata: 4; entity ref: 5), // but not by others (comment: 8; processing instruction: 7; etc.) // nodeType < 6 works because attributes (2) do not appear as children for ( elem = elem.firstChild; elem; elem = elem.nextSibling ) { if ( elem.nodeType < 6 ) { return false; } } return true; }, "parent": function( elem ) { return !Expr.pseudos["empty"]( elem ); }, // Element/input types "header": function( elem ) { return rheader.test( elem.nodeName ); }, "input": function( elem ) { return rinputs.test( elem.nodeName ); }, "button": function( elem ) { var name = elem.nodeName.toLowerCase(); return name === "input" && elem.type === "button" || name === "button"; }, "text": function( elem ) { var attr; return elem.nodeName.toLowerCase() === "input" && elem.type === "text" && // Support: IE<8 // New HTML5 attribute values (e.g., "search") appear with elem.type === "text" ( (attr = elem.getAttribute("type")) == null || attr.toLowerCase() === "text" ); }, // Position-in-collection "first": createPositionalPseudo(function() { return [ 0 ]; }), "last": createPositionalPseudo(function( matchIndexes, length ) { return [ length - 1 ]; }), "eq": createPositionalPseudo(function( matchIndexes, length, argument ) { return [ argument < 0 ? argument + length : argument ]; }), "even": createPositionalPseudo(function( matchIndexes, length ) { var i = 0; for ( ; i < length; i += 2 ) { matchIndexes.push( i ); } return matchIndexes; }), "odd": createPositionalPseudo(function( matchIndexes, length ) { var i = 1; for ( ; i < length; i += 2 ) { matchIndexes.push( i ); } return matchIndexes; }), "lt": createPositionalPseudo(function( matchIndexes, length, argument ) { var i = argument < 0 ? argument + length : argument; for ( ; --i >= 0; ) { matchIndexes.push( i ); } return matchIndexes; }), "gt": createPositionalPseudo(function( matchIndexes, length, argument ) { var i = argument < 0 ? argument + length : argument; for ( ; ++i < length; ) { matchIndexes.push( i ); } return matchIndexes; }) } }; Expr.pseudos["nth"] = Expr.pseudos["eq"]; // Add button/input type pseudos for ( i in { radio: true, checkbox: true, file: true, password: true, image: true } ) { Expr.pseudos[ i ] = createInputPseudo( i ); } for ( i in { submit: true, reset: true } ) { Expr.pseudos[ i ] = createButtonPseudo( i ); } // Easy API for creating new setFilters function setFilters() {} setFilters.prototype = Expr.filters = Expr.pseudos; Expr.setFilters = new setFilters(); tokenize = Sizzle.tokenize = function( selector, parseOnly ) { var matched, match, tokens, type, soFar, groups, preFilters, cached = tokenCache[ selector + " " ]; if ( cached ) { return parseOnly ? 0 : cached.slice( 0 ); } soFar = selector; groups = []; preFilters = Expr.preFilter; while ( soFar ) { // Comma and first run if ( !matched || (match = rcomma.exec( soFar )) ) { if ( match ) { // Don't consume trailing commas as valid soFar = soFar.slice( match[0].length ) || soFar; } groups.push( (tokens = []) ); } matched = false; // Combinators if ( (match = rcombinators.exec( soFar )) ) { matched = match.shift(); tokens.push({ value: matched, // Cast descendant combinators to space type: match[0].replace( rtrim, " " ) }); soFar = soFar.slice( matched.length ); } // Filters for ( type in Expr.filter ) { if ( (match = matchExpr[ type ].exec( soFar )) && (!preFilters[ type ] || (match = preFilters[ type ]( match ))) ) { matched = match.shift(); tokens.push({ value: matched, type: type, matches: match }); soFar = soFar.slice( matched.length ); } } if ( !matched ) { break; } } // Return the length of the invalid excess // if we're just parsing // Otherwise, throw an error or return tokens return parseOnly ? soFar.length : soFar ? Sizzle.error( selector ) : // Cache the tokens tokenCache( selector, groups ).slice( 0 ); }; function toSelector( tokens ) { var i = 0, len = tokens.length, selector = ""; for ( ; i < len; i++ ) { selector += tokens[i].value; } return selector; } function addCombinator( matcher, combinator, base ) { var dir = combinator.dir, checkNonElements = base && dir === "parentNode", doneName = done++; return combinator.first ? // Check against closest ancestor/preceding element function( elem, context, xml ) { while ( (elem = elem[ dir ]) ) { if ( elem.nodeType === 1 || checkNonElements ) { return matcher( elem, context, xml ); } } } : // Check against all ancestor/preceding elements function( elem, context, xml ) { var oldCache, uniqueCache, outerCache, newCache = [ dirruns, doneName ]; // We can't set arbitrary data on XML nodes, so they don't benefit from combinator caching if ( xml ) { while ( (elem = elem[ dir ]) ) { if ( elem.nodeType === 1 || checkNonElements ) { if ( matcher( elem, context, xml ) ) { return true; } } } } else { while ( (elem = elem[ dir ]) ) { if ( elem.nodeType === 1 || checkNonElements ) { outerCache = elem[ expando ] || (elem[ expando ] = {}); // Support: IE <9 only // Defend against cloned attroperties (jQuery gh-1709) uniqueCache = outerCache[ elem.uniqueID ] || (outerCache[ elem.uniqueID ] = {}); if ( (oldCache = uniqueCache[ dir ]) && oldCache[ 0 ] === dirruns && oldCache[ 1 ] === doneName ) { // Assign to newCache so results back-propagate to previous elements return (newCache[ 2 ] = oldCache[ 2 ]); } else { // Reuse newcache so results back-propagate to previous elements uniqueCache[ dir ] = newCache; // A match means we're done; a fail means we have to keep checking if ( (newCache[ 2 ] = matcher( elem, context, xml )) ) { return true; } } } } } }; } function elementMatcher( matchers ) { return matchers.length > 1 ? function( elem, context, xml ) { var i = matchers.length; while ( i-- ) { if ( !matchers[i]( elem, context, xml ) ) { return false; } } return true; } : matchers[0]; } function multipleContexts( selector, contexts, results ) { var i = 0, len = contexts.length; for ( ; i < len; i++ ) { Sizzle( selector, contexts[i], results ); } return results; } function condense( unmatched, map, filter, context, xml ) { var elem, newUnmatched = [], i = 0, len = unmatched.length, mapped = map != null; for ( ; i < len; i++ ) { if ( (elem = unmatched[i]) ) { if ( !filter || filter( elem, context, xml ) ) { newUnmatched.push( elem ); if ( mapped ) { map.push( i ); } } } } return newUnmatched; } function setMatcher( preFilter, selector, matcher, postFilter, postFinder, postSelector ) { if ( postFilter && !postFilter[ expando ] ) { postFilter = setMatcher( postFilter ); } if ( postFinder && !postFinder[ expando ] ) { postFinder = setMatcher( postFinder, postSelector ); } return markFunction(function( seed, results, context, xml ) { var temp, i, elem, preMap = [], postMap = [], preexisting = results.length, // Get initial elements from seed or context elems = seed || multipleContexts( selector || "*", context.nodeType ? [ context ] : context, [] ), // Prefilter to get matcher input, preserving a map for seed-results synchronization matcherIn = preFilter && ( seed || !selector ) ? condense( elems, preMap, preFilter, context, xml ) : elems, matcherOut = matcher ? // If we have a postFinder, or filtered seed, or non-seed postFilter or preexisting results, postFinder || ( seed ? preFilter : preexisting || postFilter ) ? // ...intermediate processing is necessary [] : // ...otherwise use results directly results : matcherIn; // Find primary matches if ( matcher ) { matcher( matcherIn, matcherOut, context, xml ); } // Apply postFilter if ( postFilter ) { temp = condense( matcherOut, postMap ); postFilter( temp, [], context, xml ); // Un-match failing elements by moving them back to matcherIn i = temp.length; while ( i-- ) { if ( (elem = temp[i]) ) { matcherOut[ postMap[i] ] = !(matcherIn[ postMap[i] ] = elem); } } } if ( seed ) { if ( postFinder || preFilter ) { if ( postFinder ) { // Get the final matcherOut by condensing this intermediate into postFinder contexts temp = []; i = matcherOut.length; while ( i-- ) { if ( (elem = matcherOut[i]) ) { // Restore matcherIn since elem is not yet a final match temp.push( (matcherIn[i] = elem) ); } } postFinder( null, (matcherOut = []), temp, xml ); } // Move matched elements from seed to results to keep them synchronized i = matcherOut.length; while ( i-- ) { if ( (elem = matcherOut[i]) && (temp = postFinder ? indexOf( seed, elem ) : preMap[i]) > -1 ) { seed[temp] = !(results[temp] = elem); } } } // Add elements to results, through postFinder if defined } else { matcherOut = condense( matcherOut === results ? matcherOut.splice( preexisting, matcherOut.length ) : matcherOut ); if ( postFinder ) { postFinder( null, results, matcherOut, xml ); } else { push.apply( results, matcherOut ); } } }); } function matcherFromTokens( tokens ) { var checkContext, matcher, j, len = tokens.length, leadingRelative = Expr.relative[ tokens[0].type ], implicitRelative = leadingRelative || Expr.relative[" "], i = leadingRelative ? 1 : 0, // The foundational matcher ensures that elements are reachable from top-level context(s) matchContext = addCombinator( function( elem ) { return elem === checkContext; }, implicitRelative, true ), matchAnyContext = addCombinator( function( elem ) { return indexOf( checkContext, elem ) > -1; }, implicitRelative, true ), matchers = [ function( elem, context, xml ) { var ret = ( !leadingRelative && ( xml || context !== outermostContext ) ) || ( (checkContext = context).nodeType ? matchContext( elem, context, xml ) : matchAnyContext( elem, context, xml ) ); // Avoid hanging onto element (issue #299) checkContext = null; return ret; } ]; for ( ; i < len; i++ ) { if ( (matcher = Expr.relative[ tokens[i].type ]) ) { matchers = [ addCombinator(elementMatcher( matchers ), matcher) ]; } else { matcher = Expr.filter[ tokens[i].type ].apply( null, tokens[i].matches ); // Return special upon seeing a positional matcher if ( matcher[ expando ] ) { // Find the next relative operator (if any) for proper handling j = ++i; for ( ; j < len; j++ ) { if ( Expr.relative[ tokens[j].type ] ) { break; } } return setMatcher( i > 1 && elementMatcher( matchers ), i > 1 && toSelector( // If the preceding token was a descendant combinator, insert an implicit any-element `*` tokens.slice( 0, i - 1 ).concat({ value: tokens[ i - 2 ].type === " " ? "*" : "" }) ).replace( rtrim, "$1" ), matcher, i < j && matcherFromTokens( tokens.slice( i, j ) ), j < len && matcherFromTokens( (tokens = tokens.slice( j )) ), j < len && toSelector( tokens ) ); } matchers.push( matcher ); } } return elementMatcher( matchers ); } function matcherFromGroupMatchers( elementMatchers, setMatchers ) { var bySet = setMatchers.length > 0, byElement = elementMatchers.length > 0, superMatcher = function( seed, context, xml, results, outermost ) { var elem, j, matcher, matchedCount = 0, i = "0", unmatched = seed && [], setMatched = [], contextBackup = outermostContext, // We must always have either seed elements or outermost context elems = seed || byElement && Expr.find["TAG"]( "*", outermost ), // Use integer dirruns iff this is the outermost matcher dirrunsUnique = (dirruns += contextBackup == null ? 1 : Math.random() || 0.1), len = elems.length; if ( outermost ) { outermostContext = context === document || context || outermost; } // Add elements passing elementMatchers directly to results // Support: IE<9, Safari // Tolerate NodeList properties (IE: "length"; Safari: ) matching elements by id for ( ; i !== len && (elem = elems[i]) != null; i++ ) { if ( byElement && elem ) { j = 0; if ( !context && elem.ownerDocument !== document ) { setDocument( elem ); xml = !documentIsHTML; } while ( (matcher = elementMatchers[j++]) ) { if ( matcher( elem, context || document, xml) ) { results.push( elem ); break; } } if ( outermost ) { dirruns = dirrunsUnique; } } // Track unmatched elements for set filters if ( bySet ) { // They will have gone through all possible matchers if ( (elem = !matcher && elem) ) { matchedCount--; } // Lengthen the array for every element, matched or not if ( seed ) { unmatched.push( elem ); } } } // `i` is now the count of elements visited above, and adding it to `matchedCount` // makes the latter nonnegative. matchedCount += i; // Apply set filters to unmatched elements // NOTE: This can be skipped if there are no unmatched elements (i.e., `matchedCount` // equals `i`), unless we didn't visit _any_ elements in the above loop because we have // no element matchers and no seed. // Incrementing an initially-string "0" `i` allows `i` to remain a string only in that // case, which will result in a "00" `matchedCount` that differs from `i` but is also // numerically zero. if ( bySet && i !== matchedCount ) { j = 0; while ( (matcher = setMatchers[j++]) ) { matcher( unmatched, setMatched, context, xml ); } if ( seed ) { // Reintegrate element matches to eliminate the need for sorting if ( matchedCount > 0 ) { while ( i-- ) { if ( !(unmatched[i] || setMatched[i]) ) { setMatched[i] = pop.call( results ); } } } // Discard index placeholder values to get only actual matches setMatched = condense( setMatched ); } // Add matches to results push.apply( results, setMatched ); // Seedless set matches succeeding multiple successful matchers stipulate sorting if ( outermost && !seed && setMatched.length > 0 && ( matchedCount + setMatchers.length ) > 1 ) { Sizzle.uniqueSort( results ); } } // Override manipulation of globals by nested matchers if ( outermost ) { dirruns = dirrunsUnique; outermostContext = contextBackup; } return unmatched; }; return bySet ? markFunction( superMatcher ) : superMatcher; } compile = Sizzle.compile = function( selector, match /* Internal Use Only */ ) { var i, setMatchers = [], elementMatchers = [], cached = compilerCache[ selector + " " ]; if ( !cached ) { // Generate a function of recursive functions that can be used to check each element if ( !match ) { match = tokenize( selector ); } i = match.length; while ( i-- ) { cached = matcherFromTokens( match[i] ); if ( cached[ expando ] ) { setMatchers.push( cached ); } else { elementMatchers.push( cached ); } } // Cache the compiled function cached = compilerCache( selector, matcherFromGroupMatchers( elementMatchers, setMatchers ) ); // Save selector and tokenization cached.selector = selector; } return cached; }; /** * A low-level selection function that works with Sizzle's compiled * selector functions * @param {String|Function} selector A selector or a pre-compiled * selector function built with Sizzle.compile * @param {Element} context * @param {Array} [results] * @param {Array} [seed] A set of elements to match against */ select = Sizzle.select = function( selector, context, results, seed ) { var i, tokens, token, type, find, compiled = typeof selector === "function" && selector, match = !seed && tokenize( (selector = compiled.selector || selector) ); results = results || []; // Try to minimize operations if there is only one selector in the list and no seed // (the latter of which guarantees us context) if ( match.length === 1 ) { // Reduce context if the leading compound selector is an ID tokens = match[0] = match[0].slice( 0 ); if ( tokens.length > 2 && (token = tokens[0]).type === "ID" && support.getById && context.nodeType === 9 && documentIsHTML && Expr.relative[ tokens[1].type ] ) { context = ( Expr.find["ID"]( token.matches[0].replace(runescape, funescape), context ) || [] )[0]; if ( !context ) { return results; // Precompiled matchers will still verify ancestry, so step up a level } else if ( compiled ) { context = context.parentNode; } selector = selector.slice( tokens.shift().value.length ); } // Fetch a seed set for right-to-left matching i = matchExpr["needsContext"].test( selector ) ? 0 : tokens.length; while ( i-- ) { token = tokens[i]; // Abort if we hit a combinator if ( Expr.relative[ (type = token.type) ] ) { break; } if ( (find = Expr.find[ type ]) ) { // Search, expanding context for leading sibling combinators if ( (seed = find( token.matches[0].replace( runescape, funescape ), rsibling.test( tokens[0].type ) && testContext( context.parentNode ) || context )) ) { // If seed is empty or no tokens remain, we can return early tokens.splice( i, 1 ); selector = seed.length && toSelector( tokens ); if ( !selector ) { push.apply( results, seed ); return results; } break; } } } } // Compile and execute a filtering function if one is not provided // Provide `match` to avoid retokenization if we modified the selector above ( compiled || compile( selector, match ) )( seed, context, !documentIsHTML, results, !context || rsibling.test( selector ) && testContext( context.parentNode ) || context ); return results; }; // One-time assignments // Sort stability support.sortStable = expando.split("").sort( sortOrder ).join("") === expando; // Support: Chrome 14-35+ // Always assume duplicates if they aren't passed to the comparison function support.detectDuplicates = !!hasDuplicate; // Initialize against the default document setDocument(); // Support: Webkit<537.32 - Safari 6.0.3/Chrome 25 (fixed in Chrome 27) // Detached nodes confoundingly follow *each other* support.sortDetached = assert(function( div1 ) { // Should return 1, but returns 4 (following) return div1.compareDocumentPosition( document.createElement("div") ) & 1; }); // Support: IE<8 // Prevent attribute/property "interpolation" // http://msdn.microsoft.com/en-us/library/ms536429%28VS.85%29.aspx if ( !assert(function( div ) { div.innerHTML = ""; return div.firstChild.getAttribute("href") === "#" ; }) ) { addHandle( "type|href|height|width", function( elem, name, isXML ) { if ( !isXML ) { return elem.getAttribute( name, name.toLowerCase() === "type" ? 1 : 2 ); } }); } // Support: IE<9 // Use defaultValue in place of getAttribute("value") if ( !support.attributes || !assert(function( div ) { div.innerHTML = ""; div.firstChild.setAttribute( "value", "" ); return div.firstChild.getAttribute( "value" ) === ""; }) ) { addHandle( "value", function( elem, name, isXML ) { if ( !isXML && elem.nodeName.toLowerCase() === "input" ) { return elem.defaultValue; } }); } // Support: IE<9 // Use getAttributeNode to fetch booleans when getAttribute lies if ( !assert(function( div ) { return div.getAttribute("disabled") == null; }) ) { addHandle( booleans, function( elem, name, isXML ) { var val; if ( !isXML ) { return elem[ name ] === true ? name.toLowerCase() : (val = elem.getAttributeNode( name )) && val.specified ? val.value : null; } }); } return Sizzle; })( window ); jQuery.find = Sizzle; jQuery.expr = Sizzle.selectors; jQuery.expr[ ":" ] = jQuery.expr.pseudos; jQuery.uniqueSort = jQuery.unique = Sizzle.uniqueSort; jQuery.text = Sizzle.getText; jQuery.isXMLDoc = Sizzle.isXML; jQuery.contains = Sizzle.contains; var dir = function( elem, dir, until ) { var matched = [], truncate = until !== undefined; while ( ( elem = elem[ dir ] ) && elem.nodeType !== 9 ) { if ( elem.nodeType === 1 ) { if ( truncate && jQuery( elem ).is( until ) ) { break; } matched.push( elem ); } } return matched; }; var siblings = function( n, elem ) { var matched = []; for ( ; n; n = n.nextSibling ) { if ( n.nodeType === 1 && n !== elem ) { matched.push( n ); } } return matched; }; var rneedsContext = jQuery.expr.match.needsContext; var rsingleTag = ( /^<([\w-]+)\s*\/?>(?:<\/\1>|)$/ ); var risSimple = /^.[^:#\[\.,]*$/; // Implement the identical functionality for filter and not function winnow( elements, qualifier, not ) { if ( jQuery.isFunction( qualifier ) ) { return jQuery.grep( elements, function( elem, i ) { /* jshint -W018 */ return !!qualifier.call( elem, i, elem ) !== not; } ); } if ( qualifier.nodeType ) { return jQuery.grep( elements, function( elem ) { return ( elem === qualifier ) !== not; } ); } if ( typeof qualifier === "string" ) { if ( risSimple.test( qualifier ) ) { return jQuery.filter( qualifier, elements, not ); } qualifier = jQuery.filter( qualifier, elements ); } return jQuery.grep( elements, function( elem ) { return ( jQuery.inArray( elem, qualifier ) > -1 ) !== not; } ); } jQuery.filter = function( expr, elems, not ) { var elem = elems[ 0 ]; if ( not ) { expr = ":not(" + expr + ")"; } return elems.length === 1 && elem.nodeType === 1 ? jQuery.find.matchesSelector( elem, expr ) ? [ elem ] : [] : jQuery.find.matches( expr, jQuery.grep( elems, function( elem ) { return elem.nodeType === 1; } ) ); }; jQuery.fn.extend( { find: function( selector ) { var i, ret = [], self = this, len = self.length; if ( typeof selector !== "string" ) { return this.pushStack( jQuery( selector ).filter( function() { for ( i = 0; i < len; i++ ) { if ( jQuery.contains( self[ i ], this ) ) { return true; } } } ) ); } for ( i = 0; i < len; i++ ) { jQuery.find( selector, self[ i ], ret ); } // Needed because $( selector, context ) becomes $( context ).find( selector ) ret = this.pushStack( len > 1 ? jQuery.unique( ret ) : ret ); ret.selector = this.selector ? this.selector + " " + selector : selector; return ret; }, filter: function( selector ) { return this.pushStack( winnow( this, selector || [], false ) ); }, not: function( selector ) { return this.pushStack( winnow( this, selector || [], true ) ); }, is: function( selector ) { return !!winnow( this, // If this is a positional/relative selector, check membership in the returned set // so $("p:first").is("p:last") won't return true for a doc with two "p". typeof selector === "string" && rneedsContext.test( selector ) ? jQuery( selector ) : selector || [], false ).length; } } ); // Initialize a jQuery object // A central reference to the root jQuery(document) var rootjQuery, // A simple way to check for HTML strings // Prioritize #id over to avoid XSS via location.hash (#9521) // Strict HTML recognition (#11290: must start with <) rquickExpr = /^(?:\s*(<[\w\W]+>)[^>]*|#([\w-]*))$/, init = jQuery.fn.init = function( selector, context, root ) { var match, elem; // HANDLE: $(""), $(null), $(undefined), $(false) if ( !selector ) { return this; } // init accepts an alternate rootjQuery // so migrate can support jQuery.sub (gh-2101) root = root || rootjQuery; // Handle HTML strings if ( typeof selector === "string" ) { if ( selector.charAt( 0 ) === "<" && selector.charAt( selector.length - 1 ) === ">" && selector.length >= 3 ) { // Assume that strings that start and end with <> are HTML and skip the regex check match = [ null, selector, null ]; } else { match = rquickExpr.exec( selector ); } // Match html or make sure no context is specified for #id if ( match && ( match[ 1 ] || !context ) ) { // HANDLE: $(html) -> $(array) if ( match[ 1 ] ) { context = context instanceof jQuery ? context[ 0 ] : context; // scripts is true for back-compat // Intentionally let the error be thrown if parseHTML is not present jQuery.merge( this, jQuery.parseHTML( match[ 1 ], context && context.nodeType ? context.ownerDocument || context : document, true ) ); // HANDLE: $(html, props) if ( rsingleTag.test( match[ 1 ] ) && jQuery.isPlainObject( context ) ) { for ( match in context ) { // Properties of context are called as methods if possible if ( jQuery.isFunction( this[ match ] ) ) { this[ match ]( context[ match ] ); // ...and otherwise set as attributes } else { this.attr( match, context[ match ] ); } } } return this; // HANDLE: $(#id) } else { elem = document.getElementById( match[ 2 ] ); // Check parentNode to catch when Blackberry 4.6 returns // nodes that are no longer in the document #6963 if ( elem && elem.parentNode ) { // Handle the case where IE and Opera return items // by name instead of ID if ( elem.id !== match[ 2 ] ) { return rootjQuery.find( selector ); } // Otherwise, we inject the element directly into the jQuery object this.length = 1; this[ 0 ] = elem; } this.context = document; this.selector = selector; return this; } // HANDLE: $(expr, $(...)) } else if ( !context || context.jquery ) { return ( context || root ).find( selector ); // HANDLE: $(expr, context) // (which is just equivalent to: $(context).find(expr) } else { return this.constructor( context ).find( selector ); } // HANDLE: $(DOMElement) } else if ( selector.nodeType ) { this.context = this[ 0 ] = selector; this.length = 1; return this; // HANDLE: $(function) // Shortcut for document ready } else if ( jQuery.isFunction( selector ) ) { return typeof root.ready !== "undefined" ? root.ready( selector ) : // Execute immediately if ready is not present selector( jQuery ); } if ( selector.selector !== undefined ) { this.selector = selector.selector; this.context = selector.context; } return jQuery.makeArray( selector, this ); }; // Give the init function the jQuery prototype for later instantiation init.prototype = jQuery.fn; // Initialize central reference rootjQuery = jQuery( document ); var rparentsprev = /^(?:parents|prev(?:Until|All))/, // methods guaranteed to produce a unique set when starting from a unique set guaranteedUnique = { children: true, contents: true, next: true, prev: true }; jQuery.fn.extend( { has: function( target ) { var i, targets = jQuery( target, this ), len = targets.length; return this.filter( function() { for ( i = 0; i < len; i++ ) { if ( jQuery.contains( this, targets[ i ] ) ) { return true; } } } ); }, closest: function( selectors, context ) { var cur, i = 0, l = this.length, matched = [], pos = rneedsContext.test( selectors ) || typeof selectors !== "string" ? jQuery( selectors, context || this.context ) : 0; for ( ; i < l; i++ ) { for ( cur = this[ i ]; cur && cur !== context; cur = cur.parentNode ) { // Always skip document fragments if ( cur.nodeType < 11 && ( pos ? pos.index( cur ) > -1 : // Don't pass non-elements to Sizzle cur.nodeType === 1 && jQuery.find.matchesSelector( cur, selectors ) ) ) { matched.push( cur ); break; } } } return this.pushStack( matched.length > 1 ? jQuery.uniqueSort( matched ) : matched ); }, // Determine the position of an element within // the matched set of elements index: function( elem ) { // No argument, return index in parent if ( !elem ) { return ( this[ 0 ] && this[ 0 ].parentNode ) ? this.first().prevAll().length : -1; } // index in selector if ( typeof elem === "string" ) { return jQuery.inArray( this[ 0 ], jQuery( elem ) ); } // Locate the position of the desired element return jQuery.inArray( // If it receives a jQuery object, the first element is used elem.jquery ? elem[ 0 ] : elem, this ); }, add: function( selector, context ) { return this.pushStack( jQuery.uniqueSort( jQuery.merge( this.get(), jQuery( selector, context ) ) ) ); }, addBack: function( selector ) { return this.add( selector == null ? this.prevObject : this.prevObject.filter( selector ) ); } } ); function sibling( cur, dir ) { do { cur = cur[ dir ]; } while ( cur && cur.nodeType !== 1 ); return cur; } jQuery.each( { parent: function( elem ) { var parent = elem.parentNode; return parent && parent.nodeType !== 11 ? parent : null; }, parents: function( elem ) { return dir( elem, "parentNode" ); }, parentsUntil: function( elem, i, until ) { return dir( elem, "parentNode", until ); }, next: function( elem ) { return sibling( elem, "nextSibling" ); }, prev: function( elem ) { return sibling( elem, "previousSibling" ); }, nextAll: function( elem ) { return dir( elem, "nextSibling" ); }, prevAll: function( elem ) { return dir( elem, "previousSibling" ); }, nextUntil: function( elem, i, until ) { return dir( elem, "nextSibling", until ); }, prevUntil: function( elem, i, until ) { return dir( elem, "previousSibling", until ); }, siblings: function( elem ) { return siblings( ( elem.parentNode || {} ).firstChild, elem ); }, children: function( elem ) { return siblings( elem.firstChild ); }, contents: function( elem ) { return jQuery.nodeName( elem, "iframe" ) ? elem.contentDocument || elem.contentWindow.document : jQuery.merge( [], elem.childNodes ); } }, function( name, fn ) { jQuery.fn[ name ] = function( until, selector ) { var ret = jQuery.map( this, fn, until ); if ( name.slice( -5 ) !== "Until" ) { selector = until; } if ( selector && typeof selector === "string" ) { ret = jQuery.filter( selector, ret ); } if ( this.length > 1 ) { // Remove duplicates if ( !guaranteedUnique[ name ] ) { ret = jQuery.uniqueSort( ret ); } // Reverse order for parents* and prev-derivatives if ( rparentsprev.test( name ) ) { ret = ret.reverse(); } } return this.pushStack( ret ); }; } ); var rnotwhite = ( /\S+/g ); // Convert String-formatted options into Object-formatted ones function createOptions( options ) { var object = {}; jQuery.each( options.match( rnotwhite ) || [], function( _, flag ) { object[ flag ] = true; } ); return object; } /* * Create a callback list using the following parameters: * * options: an optional list of space-separated options that will change how * the callback list behaves or a more traditional option object * * By default a callback list will act like an event callback list and can be * "fired" multiple times. * * Possible options: * * once: will ensure the callback list can only be fired once (like a Deferred) * * memory: will keep track of previous values and will call any callback added * after the list has been fired right away with the latest "memorized" * values (like a Deferred) * * unique: will ensure a callback can only be added once (no duplicate in the list) * * stopOnFalse: interrupt callings when a callback returns false * */ jQuery.Callbacks = function( options ) { // Convert options from String-formatted to Object-formatted if needed // (we check in cache first) options = typeof options === "string" ? createOptions( options ) : jQuery.extend( {}, options ); var // Flag to know if list is currently firing firing, // Last fire value for non-forgettable lists memory, // Flag to know if list was already fired fired, // Flag to prevent firing locked, // Actual callback list list = [], // Queue of execution data for repeatable lists queue = [], // Index of currently firing callback (modified by add/remove as needed) firingIndex = -1, // Fire callbacks fire = function() { // Enforce single-firing locked = options.once; // Execute callbacks for all pending executions, // respecting firingIndex overrides and runtime changes fired = firing = true; for ( ; queue.length; firingIndex = -1 ) { memory = queue.shift(); while ( ++firingIndex < list.length ) { // Run callback and check for early termination if ( list[ firingIndex ].apply( memory[ 0 ], memory[ 1 ] ) === false && options.stopOnFalse ) { // Jump to end and forget the data so .add doesn't re-fire firingIndex = list.length; memory = false; } } } // Forget the data if we're done with it if ( !options.memory ) { memory = false; } firing = false; // Clean up if we're done firing for good if ( locked ) { // Keep an empty list if we have data for future add calls if ( memory ) { list = []; // Otherwise, this object is spent } else { list = ""; } } }, // Actual Callbacks object self = { // Add a callback or a collection of callbacks to the list add: function() { if ( list ) { // If we have memory from a past run, we should fire after adding if ( memory && !firing ) { firingIndex = list.length - 1; queue.push( memory ); } ( function add( args ) { jQuery.each( args, function( _, arg ) { if ( jQuery.isFunction( arg ) ) { if ( !options.unique || !self.has( arg ) ) { list.push( arg ); } } else if ( arg && arg.length && jQuery.type( arg ) !== "string" ) { // Inspect recursively add( arg ); } } ); } )( arguments ); if ( memory && !firing ) { fire(); } } return this; }, // Remove a callback from the list remove: function() { jQuery.each( arguments, function( _, arg ) { var index; while ( ( index = jQuery.inArray( arg, list, index ) ) > -1 ) { list.splice( index, 1 ); // Handle firing indexes if ( index <= firingIndex ) { firingIndex--; } } } ); return this; }, // Check if a given callback is in the list. // If no argument is given, return whether or not list has callbacks attached. has: function( fn ) { return fn ? jQuery.inArray( fn, list ) > -1 : list.length > 0; }, // Remove all callbacks from the list empty: function() { if ( list ) { list = []; } return this; }, // Disable .fire and .add // Abort any current/pending executions // Clear all callbacks and values disable: function() { locked = queue = []; list = memory = ""; return this; }, disabled: function() { return !list; }, // Disable .fire // Also disable .add unless we have memory (since it would have no effect) // Abort any pending executions lock: function() { locked = true; if ( !memory ) { self.disable(); } return this; }, locked: function() { return !!locked; }, // Call all callbacks with the given context and arguments fireWith: function( context, args ) { if ( !locked ) { args = args || []; args = [ context, args.slice ? args.slice() : args ]; queue.push( args ); if ( !firing ) { fire(); } } return this; }, // Call all the callbacks with the given arguments fire: function() { self.fireWith( this, arguments ); return this; }, // To know if the callbacks have already been called at least once fired: function() { return !!fired; } }; return self; }; jQuery.extend( { Deferred: function( func ) { var tuples = [ // action, add listener, listener list, final state [ "resolve", "done", jQuery.Callbacks( "once memory" ), "resolved" ], [ "reject", "fail", jQuery.Callbacks( "once memory" ), "rejected" ], [ "notify", "progress", jQuery.Callbacks( "memory" ) ] ], state = "pending", promise = { state: function() { return state; }, always: function() { deferred.done( arguments ).fail( arguments ); return this; }, then: function( /* fnDone, fnFail, fnProgress */ ) { var fns = arguments; return jQuery.Deferred( function( newDefer ) { jQuery.each( tuples, function( i, tuple ) { var fn = jQuery.isFunction( fns[ i ] ) && fns[ i ]; // deferred[ done | fail | progress ] for forwarding actions to newDefer deferred[ tuple[ 1 ] ]( function() { var returned = fn && fn.apply( this, arguments ); if ( returned && jQuery.isFunction( returned.promise ) ) { returned.promise() .progress( newDefer.notify ) .done( newDefer.resolve ) .fail( newDefer.reject ); } else { newDefer[ tuple[ 0 ] + "With" ]( this === promise ? newDefer.promise() : this, fn ? [ returned ] : arguments ); } } ); } ); fns = null; } ).promise(); }, // Get a promise for this deferred // If obj is provided, the promise aspect is added to the object promise: function( obj ) { return obj != null ? jQuery.extend( obj, promise ) : promise; } }, deferred = {}; // Keep pipe for back-compat promise.pipe = promise.then; // Add list-specific methods jQuery.each( tuples, function( i, tuple ) { var list = tuple[ 2 ], stateString = tuple[ 3 ]; // promise[ done | fail | progress ] = list.add promise[ tuple[ 1 ] ] = list.add; // Handle state if ( stateString ) { list.add( function() { // state = [ resolved | rejected ] state = stateString; // [ reject_list | resolve_list ].disable; progress_list.lock }, tuples[ i ^ 1 ][ 2 ].disable, tuples[ 2 ][ 2 ].lock ); } // deferred[ resolve | reject | notify ] deferred[ tuple[ 0 ] ] = function() { deferred[ tuple[ 0 ] + "With" ]( this === deferred ? promise : this, arguments ); return this; }; deferred[ tuple[ 0 ] + "With" ] = list.fireWith; } ); // Make the deferred a promise promise.promise( deferred ); // Call given func if any if ( func ) { func.call( deferred, deferred ); } // All done! return deferred; }, // Deferred helper when: function( subordinate /* , ..., subordinateN */ ) { var i = 0, resolveValues = slice.call( arguments ), length = resolveValues.length, // the count of uncompleted subordinates remaining = length !== 1 || ( subordinate && jQuery.isFunction( subordinate.promise ) ) ? length : 0, // the master Deferred. // If resolveValues consist of only a single Deferred, just use that. deferred = remaining === 1 ? subordinate : jQuery.Deferred(), // Update function for both resolve and progress values updateFunc = function( i, contexts, values ) { return function( value ) { contexts[ i ] = this; values[ i ] = arguments.length > 1 ? slice.call( arguments ) : value; if ( values === progressValues ) { deferred.notifyWith( contexts, values ); } else if ( !( --remaining ) ) { deferred.resolveWith( contexts, values ); } }; }, progressValues, progressContexts, resolveContexts; // add listeners to Deferred subordinates; treat others as resolved if ( length > 1 ) { progressValues = new Array( length ); progressContexts = new Array( length ); resolveContexts = new Array( length ); for ( ; i < length; i++ ) { if ( resolveValues[ i ] && jQuery.isFunction( resolveValues[ i ].promise ) ) { resolveValues[ i ].promise() .progress( updateFunc( i, progressContexts, progressValues ) ) .done( updateFunc( i, resolveContexts, resolveValues ) ) .fail( deferred.reject ); } else { --remaining; } } } // if we're not waiting on anything, resolve the master if ( !remaining ) { deferred.resolveWith( resolveContexts, resolveValues ); } return deferred.promise(); } } ); // The deferred used on DOM ready var readyList; jQuery.fn.ready = function( fn ) { // Add the callback jQuery.ready.promise().done( fn ); return this; }; jQuery.extend( { // Is the DOM ready to be used? Set to true once it occurs. isReady: false, // A counter to track how many items to wait for before // the ready event fires. See #6781 readyWait: 1, // Hold (or release) the ready event holdReady: function( hold ) { if ( hold ) { jQuery.readyWait++; } else { jQuery.ready( true ); } }, // Handle when the DOM is ready ready: function( wait ) { // Abort if there are pending holds or we're already ready if ( wait === true ? --jQuery.readyWait : jQuery.isReady ) { return; } // Remember that the DOM is ready jQuery.isReady = true; // If a normal DOM Ready event fired, decrement, and wait if need be if ( wait !== true && --jQuery.readyWait > 0 ) { return; } // If there are functions bound, to execute readyList.resolveWith( document, [ jQuery ] ); // Trigger any bound ready events if ( jQuery.fn.triggerHandler ) { jQuery( document ).triggerHandler( "ready" ); jQuery( document ).off( "ready" ); } } } ); /** * Clean-up method for dom ready events */ function detach() { if ( document.addEventListener ) { document.removeEventListener( "DOMContentLoaded", completed ); window.removeEventListener( "load", completed ); } else { document.detachEvent( "onreadystatechange", completed ); window.detachEvent( "onload", completed ); } } /** * The ready event handler and self cleanup method */ function completed() { // readyState === "complete" is good enough for us to call the dom ready in oldIE if ( document.addEventListener || window.event.type === "load" || document.readyState === "complete" ) { detach(); jQuery.ready(); } } jQuery.ready.promise = function( obj ) { if ( !readyList ) { readyList = jQuery.Deferred(); // Catch cases where $(document).ready() is called // after the browser event has already occurred. // Support: IE6-10 // Older IE sometimes signals "interactive" too soon if ( document.readyState === "complete" || ( document.readyState !== "loading" && !document.documentElement.doScroll ) ) { // Handle it asynchronously to allow scripts the opportunity to delay ready window.setTimeout( jQuery.ready ); // Standards-based browsers support DOMContentLoaded } else if ( document.addEventListener ) { // Use the handy event callback document.addEventListener( "DOMContentLoaded", completed ); // A fallback to window.onload, that will always work window.addEventListener( "load", completed ); // If IE event model is used } else { // Ensure firing before onload, maybe late but safe also for iframes document.attachEvent( "onreadystatechange", completed ); // A fallback to window.onload, that will always work window.attachEvent( "onload", completed ); // If IE and not a frame // continually check to see if the document is ready var top = false; try { top = window.frameElement == null && document.documentElement; } catch ( e ) {} if ( top && top.doScroll ) { ( function doScrollCheck() { if ( !jQuery.isReady ) { try { // Use the trick by Diego Perini // http://javascript.nwbox.com/IEContentLoaded/ top.doScroll( "left" ); } catch ( e ) { return window.setTimeout( doScrollCheck, 50 ); } // detach all dom ready events detach(); // and execute any waiting functions jQuery.ready(); } } )(); } } } return readyList.promise( obj ); }; // Kick off the DOM ready check even if the user does not jQuery.ready.promise(); // Support: IE<9 // Iteration over object's inherited properties before its own var i; for ( i in jQuery( support ) ) { break; } support.ownFirst = i === "0"; // Note: most support tests are defined in their respective modules. // false until the test is run support.inlineBlockNeedsLayout = false; // Execute ASAP in case we need to set body.style.zoom jQuery( function() { // Minified: var a,b,c,d var val, div, body, container; body = document.getElementsByTagName( "body" )[ 0 ]; if ( !body || !body.style ) { // Return for frameset docs that don't have a body return; } // Setup div = document.createElement( "div" ); container = document.createElement( "div" ); container.style.cssText = "position:absolute;border:0;width:0;height:0;top:0;left:-9999px"; body.appendChild( container ).appendChild( div ); if ( typeof div.style.zoom !== "undefined" ) { // Support: IE<8 // Check if natively block-level elements act like inline-block // elements when setting their display to 'inline' and giving // them layout div.style.cssText = "display:inline;margin:0;border:0;padding:1px;width:1px;zoom:1"; support.inlineBlockNeedsLayout = val = div.offsetWidth === 3; if ( val ) { // Prevent IE 6 from affecting layout for positioned elements #11048 // Prevent IE from shrinking the body in IE 7 mode #12869 // Support: IE<8 body.style.zoom = 1; } } body.removeChild( container ); } ); ( function() { var div = document.createElement( "div" ); // Support: IE<9 support.deleteExpando = true; try { delete div.test; } catch ( e ) { support.deleteExpando = false; } // Null elements to avoid leaks in IE. div = null; } )(); var acceptData = function( elem ) { var noData = jQuery.noData[ ( elem.nodeName + " " ).toLowerCase() ], nodeType = +elem.nodeType || 1; // Do not set data on non-element DOM nodes because it will not be cleared (#8335). return nodeType !== 1 && nodeType !== 9 ? false : // Nodes accept data unless otherwise specified; rejection can be conditional !noData || noData !== true && elem.getAttribute( "classid" ) === noData; }; var rbrace = /^(?:\{[\w\W]*\}|\[[\w\W]*\])$/, rmultiDash = /([A-Z])/g; function dataAttr( elem, key, data ) { // If nothing was found internally, try to fetch any // data from the HTML5 data-* attribute if ( data === undefined && elem.nodeType === 1 ) { var name = "data-" + key.replace( rmultiDash, "-$1" ).toLowerCase(); data = elem.getAttribute( name ); if ( typeof data === "string" ) { try { data = data === "true" ? true : data === "false" ? false : data === "null" ? null : // Only convert to a number if it doesn't change the string +data + "" === data ? +data : rbrace.test( data ) ? jQuery.parseJSON( data ) : data; } catch ( e ) {} // Make sure we set the data so it isn't changed later jQuery.data( elem, key, data ); } else { data = undefined; } } return data; } // checks a cache object for emptiness function isEmptyDataObject( obj ) { var name; for ( name in obj ) { // if the public data object is empty, the private is still empty if ( name === "data" && jQuery.isEmptyObject( obj[ name ] ) ) { continue; } if ( name !== "toJSON" ) { return false; } } return true; } function internalData( elem, name, data, pvt /* Internal Use Only */ ) { if ( !acceptData( elem ) ) { return; } var ret, thisCache, internalKey = jQuery.expando, // We have to handle DOM nodes and JS objects differently because IE6-7 // can't GC object references properly across the DOM-JS boundary isNode = elem.nodeType, // Only DOM nodes need the global jQuery cache; JS object data is // attached directly to the object so GC can occur automatically cache = isNode ? jQuery.cache : elem, // Only defining an ID for JS objects if its cache already exists allows // the code to shortcut on the same path as a DOM node with no cache id = isNode ? elem[ internalKey ] : elem[ internalKey ] && internalKey; // Avoid doing any more work than we need to when trying to get data on an // object that has no data at all if ( ( !id || !cache[ id ] || ( !pvt && !cache[ id ].data ) ) && data === undefined && typeof name === "string" ) { return; } if ( !id ) { // Only DOM nodes need a new unique ID for each element since their data // ends up in the global cache if ( isNode ) { id = elem[ internalKey ] = deletedIds.pop() || jQuery.guid++; } else { id = internalKey; } } if ( !cache[ id ] ) { // Avoid exposing jQuery metadata on plain JS objects when the object // is serialized using JSON.stringify cache[ id ] = isNode ? {} : { toJSON: jQuery.noop }; } // An object can be passed to jQuery.data instead of a key/value pair; this gets // shallow copied over onto the existing cache if ( typeof name === "object" || typeof name === "function" ) { if ( pvt ) { cache[ id ] = jQuery.extend( cache[ id ], name ); } else { cache[ id ].data = jQuery.extend( cache[ id ].data, name ); } } thisCache = cache[ id ]; // jQuery data() is stored in a separate object inside the object's internal data // cache in order to avoid key collisions between internal data and user-defined // data. if ( !pvt ) { if ( !thisCache.data ) { thisCache.data = {}; } thisCache = thisCache.data; } if ( data !== undefined ) { thisCache[ jQuery.camelCase( name ) ] = data; } // Check for both converted-to-camel and non-converted data property names // If a data property was specified if ( typeof name === "string" ) { // First Try to find as-is property data ret = thisCache[ name ]; // Test for null|undefined property data if ( ret == null ) { // Try to find the camelCased property ret = thisCache[ jQuery.camelCase( name ) ]; } } else { ret = thisCache; } return ret; } function internalRemoveData( elem, name, pvt ) { if ( !acceptData( elem ) ) { return; } var thisCache, i, isNode = elem.nodeType, // See jQuery.data for more information cache = isNode ? jQuery.cache : elem, id = isNode ? elem[ jQuery.expando ] : jQuery.expando; // If there is already no cache entry for this object, there is no // purpose in continuing if ( !cache[ id ] ) { return; } if ( name ) { thisCache = pvt ? cache[ id ] : cache[ id ].data; if ( thisCache ) { // Support array or space separated string names for data keys if ( !jQuery.isArray( name ) ) { // try the string as a key before any manipulation if ( name in thisCache ) { name = [ name ]; } else { // split the camel cased version by spaces unless a key with the spaces exists name = jQuery.camelCase( name ); if ( name in thisCache ) { name = [ name ]; } else { name = name.split( " " ); } } } else { // If "name" is an array of keys... // When data is initially created, via ("key", "val") signature, // keys will be converted to camelCase. // Since there is no way to tell _how_ a key was added, remove // both plain key and camelCase key. #12786 // This will only penalize the array argument path. name = name.concat( jQuery.map( name, jQuery.camelCase ) ); } i = name.length; while ( i-- ) { delete thisCache[ name[ i ] ]; } // If there is no data left in the cache, we want to continue // and let the cache object itself get destroyed if ( pvt ? !isEmptyDataObject( thisCache ) : !jQuery.isEmptyObject( thisCache ) ) { return; } } } // See jQuery.data for more information if ( !pvt ) { delete cache[ id ].data; // Don't destroy the parent cache unless the internal data object // had been the only thing left in it if ( !isEmptyDataObject( cache[ id ] ) ) { return; } } // Destroy the cache if ( isNode ) { jQuery.cleanData( [ elem ], true ); // Use delete when supported for expandos or `cache` is not a window per isWindow (#10080) /* jshint eqeqeq: false */ } else if ( support.deleteExpando || cache != cache.window ) { /* jshint eqeqeq: true */ delete cache[ id ]; // When all else fails, undefined } else { cache[ id ] = undefined; } } jQuery.extend( { cache: {}, // The following elements (space-suffixed to avoid Object.prototype collisions) // throw uncatchable exceptions if you attempt to set expando properties noData: { "applet ": true, "embed ": true, // ...but Flash objects (which have this classid) *can* handle expandos "object ": "clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" }, hasData: function( elem ) { elem = elem.nodeType ? jQuery.cache[ elem[ jQuery.expando ] ] : elem[ jQuery.expando ]; return !!elem && !isEmptyDataObject( elem ); }, data: function( elem, name, data ) { return internalData( elem, name, data ); }, removeData: function( elem, name ) { return internalRemoveData( elem, name ); }, // For internal use only. _data: function( elem, name, data ) { return internalData( elem, name, data, true ); }, _removeData: function( elem, name ) { return internalRemoveData( elem, name, true ); } } ); jQuery.fn.extend( { data: function( key, value ) { var i, name, data, elem = this[ 0 ], attrs = elem && elem.attributes; // Special expections of .data basically thwart jQuery.access, // so implement the relevant behavior ourselves // Gets all values if ( key === undefined ) { if ( this.length ) { data = jQuery.data( elem ); if ( elem.nodeType === 1 && !jQuery._data( elem, "parsedAttrs" ) ) { i = attrs.length; while ( i-- ) { // Support: IE11+ // The attrs elements can be null (#14894) if ( attrs[ i ] ) { name = attrs[ i ].name; if ( name.indexOf( "data-" ) === 0 ) { name = jQuery.camelCase( name.slice( 5 ) ); dataAttr( elem, name, data[ name ] ); } } } jQuery._data( elem, "parsedAttrs", true ); } } return data; } // Sets multiple values if ( typeof key === "object" ) { return this.each( function() { jQuery.data( this, key ); } ); } return arguments.length > 1 ? // Sets one value this.each( function() { jQuery.data( this, key, value ); } ) : // Gets one value // Try to fetch any internally stored data first elem ? dataAttr( elem, key, jQuery.data( elem, key ) ) : undefined; }, removeData: function( key ) { return this.each( function() { jQuery.removeData( this, key ); } ); } } ); jQuery.extend( { queue: function( elem, type, data ) { var queue; if ( elem ) { type = ( type || "fx" ) + "queue"; queue = jQuery._data( elem, type ); // Speed up dequeue by getting out quickly if this is just a lookup if ( data ) { if ( !queue || jQuery.isArray( data ) ) { queue = jQuery._data( elem, type, jQuery.makeArray( data ) ); } else { queue.push( data ); } } return queue || []; } }, dequeue: function( elem, type ) { type = type || "fx"; var queue = jQuery.queue( elem, type ), startLength = queue.length, fn = queue.shift(), hooks = jQuery._queueHooks( elem, type ), next = function() { jQuery.dequeue( elem, type ); }; // If the fx queue is dequeued, always remove the progress sentinel if ( fn === "inprogress" ) { fn = queue.shift(); startLength--; } if ( fn ) { // Add a progress sentinel to prevent the fx queue from being // automatically dequeued if ( type === "fx" ) { queue.unshift( "inprogress" ); } // clear up the last queue stop function delete hooks.stop; fn.call( elem, next, hooks ); } if ( !startLength && hooks ) { hooks.empty.fire(); } }, // not intended for public consumption - generates a queueHooks object, // or returns the current one _queueHooks: function( elem, type ) { var key = type + "queueHooks"; return jQuery._data( elem, key ) || jQuery._data( elem, key, { empty: jQuery.Callbacks( "once memory" ).add( function() { jQuery._removeData( elem, type + "queue" ); jQuery._removeData( elem, key ); } ) } ); } } ); jQuery.fn.extend( { queue: function( type, data ) { var setter = 2; if ( typeof type !== "string" ) { data = type; type = "fx"; setter--; } if ( arguments.length < setter ) { return jQuery.queue( this[ 0 ], type ); } return data === undefined ? this : this.each( function() { var queue = jQuery.queue( this, type, data ); // ensure a hooks for this queue jQuery._queueHooks( this, type ); if ( type === "fx" && queue[ 0 ] !== "inprogress" ) { jQuery.dequeue( this, type ); } } ); }, dequeue: function( type ) { return this.each( function() { jQuery.dequeue( this, type ); } ); }, clearQueue: function( type ) { return this.queue( type || "fx", [] ); }, // Get a promise resolved when queues of a certain type // are emptied (fx is the type by default) promise: function( type, obj ) { var tmp, count = 1, defer = jQuery.Deferred(), elements = this, i = this.length, resolve = function() { if ( !( --count ) ) { defer.resolveWith( elements, [ elements ] ); } }; if ( typeof type !== "string" ) { obj = type; type = undefined; } type = type || "fx"; while ( i-- ) { tmp = jQuery._data( elements[ i ], type + "queueHooks" ); if ( tmp && tmp.empty ) { count++; tmp.empty.add( resolve ); } } resolve(); return defer.promise( obj ); } } ); ( function() { var shrinkWrapBlocksVal; support.shrinkWrapBlocks = function() { if ( shrinkWrapBlocksVal != null ) { return shrinkWrapBlocksVal; } // Will be changed later if needed. shrinkWrapBlocksVal = false; // Minified: var b,c,d var div, body, container; body = document.getElementsByTagName( "body" )[ 0 ]; if ( !body || !body.style ) { // Test fired too early or in an unsupported environment, exit. return; } // Setup div = document.createElement( "div" ); container = document.createElement( "div" ); container.style.cssText = "position:absolute;border:0;width:0;height:0;top:0;left:-9999px"; body.appendChild( container ).appendChild( div ); // Support: IE6 // Check if elements with layout shrink-wrap their children if ( typeof div.style.zoom !== "undefined" ) { // Reset CSS: box-sizing; display; margin; border div.style.cssText = // Support: Firefox<29, Android 2.3 // Vendor-prefix box-sizing "-webkit-box-sizing:content-box;-moz-box-sizing:content-box;" + "box-sizing:content-box;display:block;margin:0;border:0;" + "padding:1px;width:1px;zoom:1"; div.appendChild( document.createElement( "div" ) ).style.width = "5px"; shrinkWrapBlocksVal = div.offsetWidth !== 3; } body.removeChild( container ); return shrinkWrapBlocksVal; }; } )(); var pnum = ( /[+-]?(?:\d*\.|)\d+(?:[eE][+-]?\d+|)/ ).source; var rcssNum = new RegExp( "^(?:([+-])=|)(" + pnum + ")([a-z%]*)$", "i" ); var cssExpand = [ "Top", "Right", "Bottom", "Left" ]; var isHidden = function( elem, el ) { // isHidden might be called from jQuery#filter function; // in that case, element will be second argument elem = el || elem; return jQuery.css( elem, "display" ) === "none" || !jQuery.contains( elem.ownerDocument, elem ); }; function adjustCSS( elem, prop, valueParts, tween ) { var adjusted, scale = 1, maxIterations = 20, currentValue = tween ? function() { return tween.cur(); } : function() { return jQuery.css( elem, prop, "" ); }, initial = currentValue(), unit = valueParts && valueParts[ 3 ] || ( jQuery.cssNumber[ prop ] ? "" : "px" ), // Starting value computation is required for potential unit mismatches initialInUnit = ( jQuery.cssNumber[ prop ] || unit !== "px" && +initial ) && rcssNum.exec( jQuery.css( elem, prop ) ); if ( initialInUnit && initialInUnit[ 3 ] !== unit ) { // Trust units reported by jQuery.css unit = unit || initialInUnit[ 3 ]; // Make sure we update the tween properties later on valueParts = valueParts || []; // Iteratively approximate from a nonzero starting point initialInUnit = +initial || 1; do { // If previous iteration zeroed out, double until we get *something*. // Use string for doubling so we don't accidentally see scale as unchanged below scale = scale || ".5"; // Adjust and apply initialInUnit = initialInUnit / scale; jQuery.style( elem, prop, initialInUnit + unit ); // Update scale, tolerating zero or NaN from tween.cur() // Break the loop if scale is unchanged or perfect, or if we've just had enough. } while ( scale !== ( scale = currentValue() / initial ) && scale !== 1 && --maxIterations ); } if ( valueParts ) { initialInUnit = +initialInUnit || +initial || 0; // Apply relative offset (+=/-=) if specified adjusted = valueParts[ 1 ] ? initialInUnit + ( valueParts[ 1 ] + 1 ) * valueParts[ 2 ] : +valueParts[ 2 ]; if ( tween ) { tween.unit = unit; tween.start = initialInUnit; tween.end = adjusted; } } return adjusted; } // Multifunctional method to get and set values of a collection // The value/s can optionally be executed if it's a function var access = function( elems, fn, key, value, chainable, emptyGet, raw ) { var i = 0, length = elems.length, bulk = key == null; // Sets many values if ( jQuery.type( key ) === "object" ) { chainable = true; for ( i in key ) { access( elems, fn, i, key[ i ], true, emptyGet, raw ); } // Sets one value } else if ( value !== undefined ) { chainable = true; if ( !jQuery.isFunction( value ) ) { raw = true; } if ( bulk ) { // Bulk operations run against the entire set if ( raw ) { fn.call( elems, value ); fn = null; // ...except when executing function values } else { bulk = fn; fn = function( elem, key, value ) { return bulk.call( jQuery( elem ), value ); }; } } if ( fn ) { for ( ; i < length; i++ ) { fn( elems[ i ], key, raw ? value : value.call( elems[ i ], i, fn( elems[ i ], key ) ) ); } } } return chainable ? elems : // Gets bulk ? fn.call( elems ) : length ? fn( elems[ 0 ], key ) : emptyGet; }; var rcheckableType = ( /^(?:checkbox|radio)$/i ); var rtagName = ( /<([\w:-]+)/ ); var rscriptType = ( /^$|\/(?:java|ecma)script/i ); var rleadingWhitespace = ( /^\s+/ ); var nodeNames = "abbr|article|aside|audio|bdi|canvas|data|datalist|" + "details|dialog|figcaption|figure|footer|header|hgroup|main|" + "mark|meter|nav|output|picture|progress|section|summary|template|time|video"; function createSafeFragment( document ) { var list = nodeNames.split( "|" ), safeFrag = document.createDocumentFragment(); if ( safeFrag.createElement ) { while ( list.length ) { safeFrag.createElement( list.pop() ); } } return safeFrag; } ( function() { var div = document.createElement( "div" ), fragment = document.createDocumentFragment(), input = document.createElement( "input" ); // Setup div.innerHTML = "
a"; // IE strips leading whitespace when .innerHTML is used support.leadingWhitespace = div.firstChild.nodeType === 3; // Make sure that tbody elements aren't automatically inserted // IE will insert them into empty tables support.tbody = !div.getElementsByTagName( "tbody" ).length; // Make sure that link elements get serialized correctly by innerHTML // This requires a wrapper element in IE support.htmlSerialize = !!div.getElementsByTagName( "link" ).length; // Makes sure cloning an html5 element does not cause problems // Where outerHTML is undefined, this still works support.html5Clone = document.createElement( "nav" ).cloneNode( true ).outerHTML !== "<:nav>"; // Check if a disconnected checkbox will retain its checked // value of true after appended to the DOM (IE6/7) input.type = "checkbox"; input.checked = true; fragment.appendChild( input ); support.appendChecked = input.checked; // Make sure textarea (and checkbox) defaultValue is properly cloned // Support: IE6-IE11+ div.innerHTML = ""; support.noCloneChecked = !!div.cloneNode( true ).lastChild.defaultValue; // #11217 - WebKit loses check when the name is after the checked attribute fragment.appendChild( div ); // Support: Windows Web Apps (WWA) // `name` and `type` must use .setAttribute for WWA (#14901) input = document.createElement( "input" ); input.setAttribute( "type", "radio" ); input.setAttribute( "checked", "checked" ); input.setAttribute( "name", "t" ); div.appendChild( input ); // Support: Safari 5.1, iOS 5.1, Android 4.x, Android 2.3 // old WebKit doesn't clone checked state correctly in fragments support.checkClone = div.cloneNode( true ).cloneNode( true ).lastChild.checked; // Support: IE<9 // Cloned elements keep attachEvent handlers, we use addEventListener on IE9+ support.noCloneEvent = !!div.addEventListener; // Support: IE<9 // Since attributes and properties are the same in IE, // cleanData must set properties to undefined rather than use removeAttribute div[ jQuery.expando ] = 1; support.attributes = !div.getAttribute( jQuery.expando ); } )(); // We have to close these tags to support XHTML (#13200) var wrapMap = { option: [ 1, "" ], legend: [ 1, "
", "
" ], area: [ 1, "", "" ], // Support: IE8 param: [ 1, "", "" ], thead: [ 1, "", "
" ], tr: [ 2, "", "
" ], col: [ 2, "", "
" ], td: [ 3, "", "
" ], // IE6-8 can't serialize link, script, style, or any html5 (NoScope) tags, // unless wrapped in a div with non-breaking characters in front of it. _default: support.htmlSerialize ? [ 0, "", "" ] : [ 1, "X
", "
" ] }; // Support: IE8-IE9 wrapMap.optgroup = wrapMap.option; wrapMap.tbody = wrapMap.tfoot = wrapMap.colgroup = wrapMap.caption = wrapMap.thead; wrapMap.th = wrapMap.td; function getAll( context, tag ) { var elems, elem, i = 0, found = typeof context.getElementsByTagName !== "undefined" ? context.getElementsByTagName( tag || "*" ) : typeof context.querySelectorAll !== "undefined" ? context.querySelectorAll( tag || "*" ) : undefined; if ( !found ) { for ( found = [], elems = context.childNodes || context; ( elem = elems[ i ] ) != null; i++ ) { if ( !tag || jQuery.nodeName( elem, tag ) ) { found.push( elem ); } else { jQuery.merge( found, getAll( elem, tag ) ); } } } return tag === undefined || tag && jQuery.nodeName( context, tag ) ? jQuery.merge( [ context ], found ) : found; } // Mark scripts as having already been evaluated function setGlobalEval( elems, refElements ) { var elem, i = 0; for ( ; ( elem = elems[ i ] ) != null; i++ ) { jQuery._data( elem, "globalEval", !refElements || jQuery._data( refElements[ i ], "globalEval" ) ); } } var rhtml = /<|&#?\w+;/, rtbody = / from table fragments if ( !support.tbody ) { // String was a , *may* have spurious elem = tag === "table" && !rtbody.test( elem ) ? tmp.firstChild : // String was a bare or wrap[ 1 ] === "
" && !rtbody.test( elem ) ? tmp : 0; j = elem && elem.childNodes.length; while ( j-- ) { if ( jQuery.nodeName( ( tbody = elem.childNodes[ j ] ), "tbody" ) && !tbody.childNodes.length ) { elem.removeChild( tbody ); } } } jQuery.merge( nodes, tmp.childNodes ); // Fix #12392 for WebKit and IE > 9 tmp.textContent = ""; // Fix #12392 for oldIE while ( tmp.firstChild ) { tmp.removeChild( tmp.firstChild ); } // Remember the top-level container for proper cleanup tmp = safe.lastChild; } } } // Fix #11356: Clear elements from fragment if ( tmp ) { safe.removeChild( tmp ); } // Reset defaultChecked for any radios and checkboxes // about to be appended to the DOM in IE 6/7 (#8060) if ( !support.appendChecked ) { jQuery.grep( getAll( nodes, "input" ), fixDefaultChecked ); } i = 0; while ( ( elem = nodes[ i++ ] ) ) { // Skip elements already in the context collection (trac-4087) if ( selection && jQuery.inArray( elem, selection ) > -1 ) { if ( ignored ) { ignored.push( elem ); } continue; } contains = jQuery.contains( elem.ownerDocument, elem ); // Append to fragment tmp = getAll( safe.appendChild( elem ), "script" ); // Preserve script evaluation history if ( contains ) { setGlobalEval( tmp ); } // Capture executables if ( scripts ) { j = 0; while ( ( elem = tmp[ j++ ] ) ) { if ( rscriptType.test( elem.type || "" ) ) { scripts.push( elem ); } } } } tmp = null; return safe; } ( function() { var i, eventName, div = document.createElement( "div" ); // Support: IE<9 (lack submit/change bubble), Firefox (lack focus(in | out) events) for ( i in { submit: true, change: true, focusin: true } ) { eventName = "on" + i; if ( !( support[ i ] = eventName in window ) ) { // Beware of CSP restrictions (https://developer.mozilla.org/en/Security/CSP) div.setAttribute( eventName, "t" ); support[ i ] = div.attributes[ eventName ].expando === false; } } // Null elements to avoid leaks in IE. div = null; } )(); var rformElems = /^(?:input|select|textarea)$/i, rkeyEvent = /^key/, rmouseEvent = /^(?:mouse|pointer|contextmenu|drag|drop)|click/, rfocusMorph = /^(?:focusinfocus|focusoutblur)$/, rtypenamespace = /^([^.]*)(?:\.(.+)|)/; function returnTrue() { return true; } function returnFalse() { return false; } // Support: IE9 // See #13393 for more info function safeActiveElement() { try { return document.activeElement; } catch ( err ) { } } function on( elem, types, selector, data, fn, one ) { var origFn, type; // Types can be a map of types/handlers if ( typeof types === "object" ) { // ( types-Object, selector, data ) if ( typeof selector !== "string" ) { // ( types-Object, data ) data = data || selector; selector = undefined; } for ( type in types ) { on( elem, type, selector, data, types[ type ], one ); } return elem; } if ( data == null && fn == null ) { // ( types, fn ) fn = selector; data = selector = undefined; } else if ( fn == null ) { if ( typeof selector === "string" ) { // ( types, selector, fn ) fn = data; data = undefined; } else { // ( types, data, fn ) fn = data; data = selector; selector = undefined; } } if ( fn === false ) { fn = returnFalse; } else if ( !fn ) { return elem; } if ( one === 1 ) { origFn = fn; fn = function( event ) { // Can use an empty set, since event contains the info jQuery().off( event ); return origFn.apply( this, arguments ); }; // Use same guid so caller can remove using origFn fn.guid = origFn.guid || ( origFn.guid = jQuery.guid++ ); } return elem.each( function() { jQuery.event.add( this, types, fn, data, selector ); } ); } /* * Helper functions for managing events -- not part of the public interface. * Props to Dean Edwards' addEvent library for many of the ideas. */ jQuery.event = { global: {}, add: function( elem, types, handler, data, selector ) { var tmp, events, t, handleObjIn, special, eventHandle, handleObj, handlers, type, namespaces, origType, elemData = jQuery._data( elem ); // Don't attach events to noData or text/comment nodes (but allow plain objects) if ( !elemData ) { return; } // Caller can pass in an object of custom data in lieu of the handler if ( handler.handler ) { handleObjIn = handler; handler = handleObjIn.handler; selector = handleObjIn.selector; } // Make sure that the handler has a unique ID, used to find/remove it later if ( !handler.guid ) { handler.guid = jQuery.guid++; } // Init the element's event structure and main handler, if this is the first if ( !( events = elemData.events ) ) { events = elemData.events = {}; } if ( !( eventHandle = elemData.handle ) ) { eventHandle = elemData.handle = function( e ) { // Discard the second event of a jQuery.event.trigger() and // when an event is called after a page has unloaded return typeof jQuery !== "undefined" && ( !e || jQuery.event.triggered !== e.type ) ? jQuery.event.dispatch.apply( eventHandle.elem, arguments ) : undefined; }; // Add elem as a property of the handle fn to prevent a memory leak // with IE non-native events eventHandle.elem = elem; } // Handle multiple events separated by a space types = ( types || "" ).match( rnotwhite ) || [ "" ]; t = types.length; while ( t-- ) { tmp = rtypenamespace.exec( types[ t ] ) || []; type = origType = tmp[ 1 ]; namespaces = ( tmp[ 2 ] || "" ).split( "." ).sort(); // There *must* be a type, no attaching namespace-only handlers if ( !type ) { continue; } // If event changes its type, use the special event handlers for the changed type special = jQuery.event.special[ type ] || {}; // If selector defined, determine special event api type, otherwise given type type = ( selector ? special.delegateType : special.bindType ) || type; // Update special based on newly reset type special = jQuery.event.special[ type ] || {}; // handleObj is passed to all event handlers handleObj = jQuery.extend( { type: type, origType: origType, data: data, handler: handler, guid: handler.guid, selector: selector, needsContext: selector && jQuery.expr.match.needsContext.test( selector ), namespace: namespaces.join( "." ) }, handleObjIn ); // Init the event handler queue if we're the first if ( !( handlers = events[ type ] ) ) { handlers = events[ type ] = []; handlers.delegateCount = 0; // Only use addEventListener/attachEvent if the special events handler returns false if ( !special.setup || special.setup.call( elem, data, namespaces, eventHandle ) === false ) { // Bind the global event handler to the element if ( elem.addEventListener ) { elem.addEventListener( type, eventHandle, false ); } else if ( elem.attachEvent ) { elem.attachEvent( "on" + type, eventHandle ); } } } if ( special.add ) { special.add.call( elem, handleObj ); if ( !handleObj.handler.guid ) { handleObj.handler.guid = handler.guid; } } // Add to the element's handler list, delegates in front if ( selector ) { handlers.splice( handlers.delegateCount++, 0, handleObj ); } else { handlers.push( handleObj ); } // Keep track of which events have ever been used, for event optimization jQuery.event.global[ type ] = true; } // Nullify elem to prevent memory leaks in IE elem = null; }, // Detach an event or set of events from an element remove: function( elem, types, handler, selector, mappedTypes ) { var j, handleObj, tmp, origCount, t, events, special, handlers, type, namespaces, origType, elemData = jQuery.hasData( elem ) && jQuery._data( elem ); if ( !elemData || !( events = elemData.events ) ) { return; } // Once for each type.namespace in types; type may be omitted types = ( types || "" ).match( rnotwhite ) || [ "" ]; t = types.length; while ( t-- ) { tmp = rtypenamespace.exec( types[ t ] ) || []; type = origType = tmp[ 1 ]; namespaces = ( tmp[ 2 ] || "" ).split( "." ).sort(); // Unbind all events (on this namespace, if provided) for the element if ( !type ) { for ( type in events ) { jQuery.event.remove( elem, type + types[ t ], handler, selector, true ); } continue; } special = jQuery.event.special[ type ] || {}; type = ( selector ? special.delegateType : special.bindType ) || type; handlers = events[ type ] || []; tmp = tmp[ 2 ] && new RegExp( "(^|\\.)" + namespaces.join( "\\.(?:.*\\.|)" ) + "(\\.|$)" ); // Remove matching events origCount = j = handlers.length; while ( j-- ) { handleObj = handlers[ j ]; if ( ( mappedTypes || origType === handleObj.origType ) && ( !handler || handler.guid === handleObj.guid ) && ( !tmp || tmp.test( handleObj.namespace ) ) && ( !selector || selector === handleObj.selector || selector === "**" && handleObj.selector ) ) { handlers.splice( j, 1 ); if ( handleObj.selector ) { handlers.delegateCount--; } if ( special.remove ) { special.remove.call( elem, handleObj ); } } } // Remove generic event handler if we removed something and no more handlers exist // (avoids potential for endless recursion during removal of special event handlers) if ( origCount && !handlers.length ) { if ( !special.teardown || special.teardown.call( elem, namespaces, elemData.handle ) === false ) { jQuery.removeEvent( elem, type, elemData.handle ); } delete events[ type ]; } } // Remove the expando if it's no longer used if ( jQuery.isEmptyObject( events ) ) { delete elemData.handle; // removeData also checks for emptiness and clears the expando if empty // so use it instead of delete jQuery._removeData( elem, "events" ); } }, trigger: function( event, data, elem, onlyHandlers ) { var handle, ontype, cur, bubbleType, special, tmp, i, eventPath = [ elem || document ], type = hasOwn.call( event, "type" ) ? event.type : event, namespaces = hasOwn.call( event, "namespace" ) ? event.namespace.split( "." ) : []; cur = tmp = elem = elem || document; // Don't do events on text and comment nodes if ( elem.nodeType === 3 || elem.nodeType === 8 ) { return; } // focus/blur morphs to focusin/out; ensure we're not firing them right now if ( rfocusMorph.test( type + jQuery.event.triggered ) ) { return; } if ( type.indexOf( "." ) > -1 ) { // Namespaced trigger; create a regexp to match event type in handle() namespaces = type.split( "." ); type = namespaces.shift(); namespaces.sort(); } ontype = type.indexOf( ":" ) < 0 && "on" + type; // Caller can pass in a jQuery.Event object, Object, or just an event type string event = event[ jQuery.expando ] ? event : new jQuery.Event( type, typeof event === "object" && event ); // Trigger bitmask: & 1 for native handlers; & 2 for jQuery (always true) event.isTrigger = onlyHandlers ? 2 : 3; event.namespace = namespaces.join( "." ); event.rnamespace = event.namespace ? new RegExp( "(^|\\.)" + namespaces.join( "\\.(?:.*\\.|)" ) + "(\\.|$)" ) : null; // Clean up the event in case it is being reused event.result = undefined; if ( !event.target ) { event.target = elem; } // Clone any incoming data and prepend the event, creating the handler arg list data = data == null ? [ event ] : jQuery.makeArray( data, [ event ] ); // Allow special events to draw outside the lines special = jQuery.event.special[ type ] || {}; if ( !onlyHandlers && special.trigger && special.trigger.apply( elem, data ) === false ) { return; } // Determine event propagation path in advance, per W3C events spec (#9951) // Bubble up to document, then to window; watch for a global ownerDocument var (#9724) if ( !onlyHandlers && !special.noBubble && !jQuery.isWindow( elem ) ) { bubbleType = special.delegateType || type; if ( !rfocusMorph.test( bubbleType + type ) ) { cur = cur.parentNode; } for ( ; cur; cur = cur.parentNode ) { eventPath.push( cur ); tmp = cur; } // Only add window if we got to document (e.g., not plain obj or detached DOM) if ( tmp === ( elem.ownerDocument || document ) ) { eventPath.push( tmp.defaultView || tmp.parentWindow || window ); } } // Fire handlers on the event path i = 0; while ( ( cur = eventPath[ i++ ] ) && !event.isPropagationStopped() ) { event.type = i > 1 ? bubbleType : special.bindType || type; // jQuery handler handle = ( jQuery._data( cur, "events" ) || {} )[ event.type ] && jQuery._data( cur, "handle" ); if ( handle ) { handle.apply( cur, data ); } // Native handler handle = ontype && cur[ ontype ]; if ( handle && handle.apply && acceptData( cur ) ) { event.result = handle.apply( cur, data ); if ( event.result === false ) { event.preventDefault(); } } } event.type = type; // If nobody prevented the default action, do it now if ( !onlyHandlers && !event.isDefaultPrevented() ) { if ( ( !special._default || special._default.apply( eventPath.pop(), data ) === false ) && acceptData( elem ) ) { // Call a native DOM method on the target with the same name name as the event. // Can't use an .isFunction() check here because IE6/7 fails that test. // Don't do default actions on window, that's where global variables be (#6170) if ( ontype && elem[ type ] && !jQuery.isWindow( elem ) ) { // Don't re-trigger an onFOO event when we call its FOO() method tmp = elem[ ontype ]; if ( tmp ) { elem[ ontype ] = null; } // Prevent re-triggering of the same event, since we already bubbled it above jQuery.event.triggered = type; try { elem[ type ](); } catch ( e ) { // IE<9 dies on focus/blur to hidden element (#1486,#12518) // only reproducible on winXP IE8 native, not IE9 in IE8 mode } jQuery.event.triggered = undefined; if ( tmp ) { elem[ ontype ] = tmp; } } } } return event.result; }, dispatch: function( event ) { // Make a writable jQuery.Event from the native event object event = jQuery.event.fix( event ); var i, j, ret, matched, handleObj, handlerQueue = [], args = slice.call( arguments ), handlers = ( jQuery._data( this, "events" ) || {} )[ event.type ] || [], special = jQuery.event.special[ event.type ] || {}; // Use the fix-ed jQuery.Event rather than the (read-only) native event args[ 0 ] = event; event.delegateTarget = this; // Call the preDispatch hook for the mapped type, and let it bail if desired if ( special.preDispatch && special.preDispatch.call( this, event ) === false ) { return; } // Determine handlers handlerQueue = jQuery.event.handlers.call( this, event, handlers ); // Run delegates first; they may want to stop propagation beneath us i = 0; while ( ( matched = handlerQueue[ i++ ] ) && !event.isPropagationStopped() ) { event.currentTarget = matched.elem; j = 0; while ( ( handleObj = matched.handlers[ j++ ] ) && !event.isImmediatePropagationStopped() ) { // Triggered event must either 1) have no namespace, or 2) have namespace(s) // a subset or equal to those in the bound event (both can have no namespace). if ( !event.rnamespace || event.rnamespace.test( handleObj.namespace ) ) { event.handleObj = handleObj; event.data = handleObj.data; ret = ( ( jQuery.event.special[ handleObj.origType ] || {} ).handle || handleObj.handler ).apply( matched.elem, args ); if ( ret !== undefined ) { if ( ( event.result = ret ) === false ) { event.preventDefault(); event.stopPropagation(); } } } } } // Call the postDispatch hook for the mapped type if ( special.postDispatch ) { special.postDispatch.call( this, event ); } return event.result; }, handlers: function( event, handlers ) { var i, matches, sel, handleObj, handlerQueue = [], delegateCount = handlers.delegateCount, cur = event.target; // Support (at least): Chrome, IE9 // Find delegate handlers // Black-hole SVG instance trees (#13180) // // Support: Firefox<=42+ // Avoid non-left-click in FF but don't block IE radio events (#3861, gh-2343) if ( delegateCount && cur.nodeType && ( event.type !== "click" || isNaN( event.button ) || event.button < 1 ) ) { /* jshint eqeqeq: false */ for ( ; cur != this; cur = cur.parentNode || this ) { /* jshint eqeqeq: true */ // Don't check non-elements (#13208) // Don't process clicks on disabled elements (#6911, #8165, #11382, #11764) if ( cur.nodeType === 1 && ( cur.disabled !== true || event.type !== "click" ) ) { matches = []; for ( i = 0; i < delegateCount; i++ ) { handleObj = handlers[ i ]; // Don't conflict with Object.prototype properties (#13203) sel = handleObj.selector + " "; if ( matches[ sel ] === undefined ) { matches[ sel ] = handleObj.needsContext ? jQuery( sel, this ).index( cur ) > -1 : jQuery.find( sel, this, null, [ cur ] ).length; } if ( matches[ sel ] ) { matches.push( handleObj ); } } if ( matches.length ) { handlerQueue.push( { elem: cur, handlers: matches } ); } } } } // Add the remaining (directly-bound) handlers if ( delegateCount < handlers.length ) { handlerQueue.push( { elem: this, handlers: handlers.slice( delegateCount ) } ); } return handlerQueue; }, fix: function( event ) { if ( event[ jQuery.expando ] ) { return event; } // Create a writable copy of the event object and normalize some properties var i, prop, copy, type = event.type, originalEvent = event, fixHook = this.fixHooks[ type ]; if ( !fixHook ) { this.fixHooks[ type ] = fixHook = rmouseEvent.test( type ) ? this.mouseHooks : rkeyEvent.test( type ) ? this.keyHooks : {}; } copy = fixHook.props ? this.props.concat( fixHook.props ) : this.props; event = new jQuery.Event( originalEvent ); i = copy.length; while ( i-- ) { prop = copy[ i ]; event[ prop ] = originalEvent[ prop ]; } // Support: IE<9 // Fix target property (#1925) if ( !event.target ) { event.target = originalEvent.srcElement || document; } // Support: Safari 6-8+ // Target should not be a text node (#504, #13143) if ( event.target.nodeType === 3 ) { event.target = event.target.parentNode; } // Support: IE<9 // For mouse/key events, metaKey==false if it's undefined (#3368, #11328) event.metaKey = !!event.metaKey; return fixHook.filter ? fixHook.filter( event, originalEvent ) : event; }, // Includes some event props shared by KeyEvent and MouseEvent props: ( "altKey bubbles cancelable ctrlKey currentTarget detail eventPhase " + "metaKey relatedTarget shiftKey target timeStamp view which" ).split( " " ), fixHooks: {}, keyHooks: { props: "char charCode key keyCode".split( " " ), filter: function( event, original ) { // Add which for key events if ( event.which == null ) { event.which = original.charCode != null ? original.charCode : original.keyCode; } return event; } }, mouseHooks: { props: ( "button buttons clientX clientY fromElement offsetX offsetY " + "pageX pageY screenX screenY toElement" ).split( " " ), filter: function( event, original ) { var body, eventDoc, doc, button = original.button, fromElement = original.fromElement; // Calculate pageX/Y if missing and clientX/Y available if ( event.pageX == null && original.clientX != null ) { eventDoc = event.target.ownerDocument || document; doc = eventDoc.documentElement; body = eventDoc.body; event.pageX = original.clientX + ( doc && doc.scrollLeft || body && body.scrollLeft || 0 ) - ( doc && doc.clientLeft || body && body.clientLeft || 0 ); event.pageY = original.clientY + ( doc && doc.scrollTop || body && body.scrollTop || 0 ) - ( doc && doc.clientTop || body && body.clientTop || 0 ); } // Add relatedTarget, if necessary if ( !event.relatedTarget && fromElement ) { event.relatedTarget = fromElement === event.target ? original.toElement : fromElement; } // Add which for click: 1 === left; 2 === middle; 3 === right // Note: button is not normalized, so don't use it if ( !event.which && button !== undefined ) { event.which = ( button & 1 ? 1 : ( button & 2 ? 3 : ( button & 4 ? 2 : 0 ) ) ); } return event; } }, special: { load: { // Prevent triggered image.load events from bubbling to window.load noBubble: true }, focus: { // Fire native event if possible so blur/focus sequence is correct trigger: function() { if ( this !== safeActiveElement() && this.focus ) { try { this.focus(); return false; } catch ( e ) { // Support: IE<9 // If we error on focus to hidden element (#1486, #12518), // let .trigger() run the handlers } } }, delegateType: "focusin" }, blur: { trigger: function() { if ( this === safeActiveElement() && this.blur ) { this.blur(); return false; } }, delegateType: "focusout" }, click: { // For checkbox, fire native event so checked state will be right trigger: function() { if ( jQuery.nodeName( this, "input" ) && this.type === "checkbox" && this.click ) { this.click(); return false; } }, // For cross-browser consistency, don't fire native .click() on links _default: function( event ) { return jQuery.nodeName( event.target, "a" ); } }, beforeunload: { postDispatch: function( event ) { // Support: Firefox 20+ // Firefox doesn't alert if the returnValue field is not set. if ( event.result !== undefined && event.originalEvent ) { event.originalEvent.returnValue = event.result; } } } }, // Piggyback on a donor event to simulate a different one simulate: function( type, elem, event ) { var e = jQuery.extend( new jQuery.Event(), event, { type: type, isSimulated: true // Previously, `originalEvent: {}` was set here, so stopPropagation call // would not be triggered on donor event, since in our own // jQuery.event.stopPropagation function we had a check for existence of // originalEvent.stopPropagation method, so, consequently it would be a noop. // // Guard for simulated events was moved to jQuery.event.stopPropagation function // since `originalEvent` should point to the original event for the // constancy with other events and for more focused logic } ); jQuery.event.trigger( e, null, elem ); if ( e.isDefaultPrevented() ) { event.preventDefault(); } } }; jQuery.removeEvent = document.removeEventListener ? function( elem, type, handle ) { // This "if" is needed for plain objects if ( elem.removeEventListener ) { elem.removeEventListener( type, handle ); } } : function( elem, type, handle ) { var name = "on" + type; if ( elem.detachEvent ) { // #8545, #7054, preventing memory leaks for custom events in IE6-8 // detachEvent needed property on element, by name of that event, // to properly expose it to GC if ( typeof elem[ name ] === "undefined" ) { elem[ name ] = null; } elem.detachEvent( name, handle ); } }; jQuery.Event = function( src, props ) { // Allow instantiation without the 'new' keyword if ( !( this instanceof jQuery.Event ) ) { return new jQuery.Event( src, props ); } // Event object if ( src && src.type ) { this.originalEvent = src; this.type = src.type; // Events bubbling up the document may have been marked as prevented // by a handler lower down the tree; reflect the correct value. this.isDefaultPrevented = src.defaultPrevented || src.defaultPrevented === undefined && // Support: IE < 9, Android < 4.0 src.returnValue === false ? returnTrue : returnFalse; // Event type } else { this.type = src; } // Put explicitly provided properties onto the event object if ( props ) { jQuery.extend( this, props ); } // Create a timestamp if incoming event doesn't have one this.timeStamp = src && src.timeStamp || jQuery.now(); // Mark it as fixed this[ jQuery.expando ] = true; }; // jQuery.Event is based on DOM3 Events as specified by the ECMAScript Language Binding // http://www.w3.org/TR/2003/WD-DOM-Level-3-Events-20030331/ecma-script-binding.html jQuery.Event.prototype = { constructor: jQuery.Event, isDefaultPrevented: returnFalse, isPropagationStopped: returnFalse, isImmediatePropagationStopped: returnFalse, preventDefault: function() { var e = this.originalEvent; this.isDefaultPrevented = returnTrue; if ( !e ) { return; } // If preventDefault exists, run it on the original event if ( e.preventDefault ) { e.preventDefault(); // Support: IE // Otherwise set the returnValue property of the original event to false } else { e.returnValue = false; } }, stopPropagation: function() { var e = this.originalEvent; this.isPropagationStopped = returnTrue; if ( !e || this.isSimulated ) { return; } // If stopPropagation exists, run it on the original event if ( e.stopPropagation ) { e.stopPropagation(); } // Support: IE // Set the cancelBubble property of the original event to true e.cancelBubble = true; }, stopImmediatePropagation: function() { var e = this.originalEvent; this.isImmediatePropagationStopped = returnTrue; if ( e && e.stopImmediatePropagation ) { e.stopImmediatePropagation(); } this.stopPropagation(); } }; // Create mouseenter/leave events using mouseover/out and event-time checks // so that event delegation works in jQuery. // Do the same for pointerenter/pointerleave and pointerover/pointerout // // Support: Safari 7 only // Safari sends mouseenter too often; see: // https://code.google.com/p/chromium/issues/detail?id=470258 // for the description of the bug (it existed in older Chrome versions as well). jQuery.each( { mouseenter: "mouseover", mouseleave: "mouseout", pointerenter: "pointerover", pointerleave: "pointerout" }, function( orig, fix ) { jQuery.event.special[ orig ] = { delegateType: fix, bindType: fix, handle: function( event ) { var ret, target = this, related = event.relatedTarget, handleObj = event.handleObj; // For mouseenter/leave call the handler if related is outside the target. // NB: No relatedTarget if the mouse left/entered the browser window if ( !related || ( related !== target && !jQuery.contains( target, related ) ) ) { event.type = handleObj.origType; ret = handleObj.handler.apply( this, arguments ); event.type = fix; } return ret; } }; } ); // IE submit delegation if ( !support.submit ) { jQuery.event.special.submit = { setup: function() { // Only need this for delegated form submit events if ( jQuery.nodeName( this, "form" ) ) { return false; } // Lazy-add a submit handler when a descendant form may potentially be submitted jQuery.event.add( this, "click._submit keypress._submit", function( e ) { // Node name check avoids a VML-related crash in IE (#9807) var elem = e.target, form = jQuery.nodeName( elem, "input" ) || jQuery.nodeName( elem, "button" ) ? // Support: IE <=8 // We use jQuery.prop instead of elem.form // to allow fixing the IE8 delegated submit issue (gh-2332) // by 3rd party polyfills/workarounds. jQuery.prop( elem, "form" ) : undefined; if ( form && !jQuery._data( form, "submit" ) ) { jQuery.event.add( form, "submit._submit", function( event ) { event._submitBubble = true; } ); jQuery._data( form, "submit", true ); } } ); // return undefined since we don't need an event listener }, postDispatch: function( event ) { // If form was submitted by the user, bubble the event up the tree if ( event._submitBubble ) { delete event._submitBubble; if ( this.parentNode && !event.isTrigger ) { jQuery.event.simulate( "submit", this.parentNode, event ); } } }, teardown: function() { // Only need this for delegated form submit events if ( jQuery.nodeName( this, "form" ) ) { return false; } // Remove delegated handlers; cleanData eventually reaps submit handlers attached above jQuery.event.remove( this, "._submit" ); } }; } // IE change delegation and checkbox/radio fix if ( !support.change ) { jQuery.event.special.change = { setup: function() { if ( rformElems.test( this.nodeName ) ) { // IE doesn't fire change on a check/radio until blur; trigger it on click // after a propertychange. Eat the blur-change in special.change.handle. // This still fires onchange a second time for check/radio after blur. if ( this.type === "checkbox" || this.type === "radio" ) { jQuery.event.add( this, "propertychange._change", function( event ) { if ( event.originalEvent.propertyName === "checked" ) { this._justChanged = true; } } ); jQuery.event.add( this, "click._change", function( event ) { if ( this._justChanged && !event.isTrigger ) { this._justChanged = false; } // Allow triggered, simulated change events (#11500) jQuery.event.simulate( "change", this, event ); } ); } return false; } // Delegated event; lazy-add a change handler on descendant inputs jQuery.event.add( this, "beforeactivate._change", function( e ) { var elem = e.target; if ( rformElems.test( elem.nodeName ) && !jQuery._data( elem, "change" ) ) { jQuery.event.add( elem, "change._change", function( event ) { if ( this.parentNode && !event.isSimulated && !event.isTrigger ) { jQuery.event.simulate( "change", this.parentNode, event ); } } ); jQuery._data( elem, "change", true ); } } ); }, handle: function( event ) { var elem = event.target; // Swallow native change events from checkbox/radio, we already triggered them above if ( this !== elem || event.isSimulated || event.isTrigger || ( elem.type !== "radio" && elem.type !== "checkbox" ) ) { return event.handleObj.handler.apply( this, arguments ); } }, teardown: function() { jQuery.event.remove( this, "._change" ); return !rformElems.test( this.nodeName ); } }; } // Support: Firefox // Firefox doesn't have focus(in | out) events // Related ticket - https://bugzilla.mozilla.org/show_bug.cgi?id=687787 // // Support: Chrome, Safari // focus(in | out) events fire after focus & blur events, // which is spec violation - http://www.w3.org/TR/DOM-Level-3-Events/#events-focusevent-event-order // Related ticket - https://code.google.com/p/chromium/issues/detail?id=449857 if ( !support.focusin ) { jQuery.each( { focus: "focusin", blur: "focusout" }, function( orig, fix ) { // Attach a single capturing handler on the document while someone wants focusin/focusout var handler = function( event ) { jQuery.event.simulate( fix, event.target, jQuery.event.fix( event ) ); }; jQuery.event.special[ fix ] = { setup: function() { var doc = this.ownerDocument || this, attaches = jQuery._data( doc, fix ); if ( !attaches ) { doc.addEventListener( orig, handler, true ); } jQuery._data( doc, fix, ( attaches || 0 ) + 1 ); }, teardown: function() { var doc = this.ownerDocument || this, attaches = jQuery._data( doc, fix ) - 1; if ( !attaches ) { doc.removeEventListener( orig, handler, true ); jQuery._removeData( doc, fix ); } else { jQuery._data( doc, fix, attaches ); } } }; } ); } jQuery.fn.extend( { on: function( types, selector, data, fn ) { return on( this, types, selector, data, fn ); }, one: function( types, selector, data, fn ) { return on( this, types, selector, data, fn, 1 ); }, off: function( types, selector, fn ) { var handleObj, type; if ( types && types.preventDefault && types.handleObj ) { // ( event ) dispatched jQuery.Event handleObj = types.handleObj; jQuery( types.delegateTarget ).off( handleObj.namespace ? handleObj.origType + "." + handleObj.namespace : handleObj.origType, handleObj.selector, handleObj.handler ); return this; } if ( typeof types === "object" ) { // ( types-object [, selector] ) for ( type in types ) { this.off( type, selector, types[ type ] ); } return this; } if ( selector === false || typeof selector === "function" ) { // ( types [, fn] ) fn = selector; selector = undefined; } if ( fn === false ) { fn = returnFalse; } return this.each( function() { jQuery.event.remove( this, types, fn, selector ); } ); }, trigger: function( type, data ) { return this.each( function() { jQuery.event.trigger( type, data, this ); } ); }, triggerHandler: function( type, data ) { var elem = this[ 0 ]; if ( elem ) { return jQuery.event.trigger( type, data, elem, true ); } } } ); var rinlinejQuery = / jQuery\d+="(?:null|\d+)"/g, rnoshimcache = new RegExp( "<(?:" + nodeNames + ")[\\s/>]", "i" ), rxhtmlTag = /<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:-]+)[^>]*)\/>/gi, // Support: IE 10-11, Edge 10240+ // In IE/Edge using regex groups here causes severe slowdowns. // See https://connect.microsoft.com/IE/feedback/details/1736512/ rnoInnerhtml = /\s*$/g, safeFragment = createSafeFragment( document ), fragmentDiv = safeFragment.appendChild( document.createElement( "div" ) ); // Support: IE<8 // Manipulating tables requires a tbody function manipulationTarget( elem, content ) { return jQuery.nodeName( elem, "table" ) && jQuery.nodeName( content.nodeType !== 11 ? content : content.firstChild, "tr" ) ? elem.getElementsByTagName( "tbody" )[ 0 ] || elem.appendChild( elem.ownerDocument.createElement( "tbody" ) ) : elem; } // Replace/restore the type attribute of script elements for safe DOM manipulation function disableScript( elem ) { elem.type = ( jQuery.find.attr( elem, "type" ) !== null ) + "/" + elem.type; return elem; } function restoreScript( elem ) { var match = rscriptTypeMasked.exec( elem.type ); if ( match ) { elem.type = match[ 1 ]; } else { elem.removeAttribute( "type" ); } return elem; } function cloneCopyEvent( src, dest ) { if ( dest.nodeType !== 1 || !jQuery.hasData( src ) ) { return; } var type, i, l, oldData = jQuery._data( src ), curData = jQuery._data( dest, oldData ), events = oldData.events; if ( events ) { delete curData.handle; curData.events = {}; for ( type in events ) { for ( i = 0, l = events[ type ].length; i < l; i++ ) { jQuery.event.add( dest, type, events[ type ][ i ] ); } } } // make the cloned public data object a copy from the original if ( curData.data ) { curData.data = jQuery.extend( {}, curData.data ); } } function fixCloneNodeIssues( src, dest ) { var nodeName, e, data; // We do not need to do anything for non-Elements if ( dest.nodeType !== 1 ) { return; } nodeName = dest.nodeName.toLowerCase(); // IE6-8 copies events bound via attachEvent when using cloneNode. if ( !support.noCloneEvent && dest[ jQuery.expando ] ) { data = jQuery._data( dest ); for ( e in data.events ) { jQuery.removeEvent( dest, e, data.handle ); } // Event data gets referenced instead of copied if the expando gets copied too dest.removeAttribute( jQuery.expando ); } // IE blanks contents when cloning scripts, and tries to evaluate newly-set text if ( nodeName === "script" && dest.text !== src.text ) { disableScript( dest ).text = src.text; restoreScript( dest ); // IE6-10 improperly clones children of object elements using classid. // IE10 throws NoModificationAllowedError if parent is null, #12132. } else if ( nodeName === "object" ) { if ( dest.parentNode ) { dest.outerHTML = src.outerHTML; } // This path appears unavoidable for IE9. When cloning an object // element in IE9, the outerHTML strategy above is not sufficient. // If the src has innerHTML and the destination does not, // copy the src.innerHTML into the dest.innerHTML. #10324 if ( support.html5Clone && ( src.innerHTML && !jQuery.trim( dest.innerHTML ) ) ) { dest.innerHTML = src.innerHTML; } } else if ( nodeName === "input" && rcheckableType.test( src.type ) ) { // IE6-8 fails to persist the checked state of a cloned checkbox // or radio button. Worse, IE6-7 fail to give the cloned element // a checked appearance if the defaultChecked value isn't also set dest.defaultChecked = dest.checked = src.checked; // IE6-7 get confused and end up setting the value of a cloned // checkbox/radio button to an empty string instead of "on" if ( dest.value !== src.value ) { dest.value = src.value; } // IE6-8 fails to return the selected option to the default selected // state when cloning options } else if ( nodeName === "option" ) { dest.defaultSelected = dest.selected = src.defaultSelected; // IE6-8 fails to set the defaultValue to the correct value when // cloning other types of input fields } else if ( nodeName === "input" || nodeName === "textarea" ) { dest.defaultValue = src.defaultValue; } } function domManip( collection, args, callback, ignored ) { // Flatten any nested arrays args = concat.apply( [], args ); var first, node, hasScripts, scripts, doc, fragment, i = 0, l = collection.length, iNoClone = l - 1, value = args[ 0 ], isFunction = jQuery.isFunction( value ); // We can't cloneNode fragments that contain checked, in WebKit if ( isFunction || ( l > 1 && typeof value === "string" && !support.checkClone && rchecked.test( value ) ) ) { return collection.each( function( index ) { var self = collection.eq( index ); if ( isFunction ) { args[ 0 ] = value.call( this, index, self.html() ); } domManip( self, args, callback, ignored ); } ); } if ( l ) { fragment = buildFragment( args, collection[ 0 ].ownerDocument, false, collection, ignored ); first = fragment.firstChild; if ( fragment.childNodes.length === 1 ) { fragment = first; } // Require either new content or an interest in ignored elements to invoke the callback if ( first || ignored ) { scripts = jQuery.map( getAll( fragment, "script" ), disableScript ); hasScripts = scripts.length; // Use the original fragment for the last item // instead of the first because it can end up // being emptied incorrectly in certain situations (#8070). for ( ; i < l; i++ ) { node = fragment; if ( i !== iNoClone ) { node = jQuery.clone( node, true, true ); // Keep references to cloned scripts for later restoration if ( hasScripts ) { // Support: Android<4.1, PhantomJS<2 // push.apply(_, arraylike) throws on ancient WebKit jQuery.merge( scripts, getAll( node, "script" ) ); } } callback.call( collection[ i ], node, i ); } if ( hasScripts ) { doc = scripts[ scripts.length - 1 ].ownerDocument; // Reenable scripts jQuery.map( scripts, restoreScript ); // Evaluate executable scripts on first document insertion for ( i = 0; i < hasScripts; i++ ) { node = scripts[ i ]; if ( rscriptType.test( node.type || "" ) && !jQuery._data( node, "globalEval" ) && jQuery.contains( doc, node ) ) { if ( node.src ) { // Optional AJAX dependency, but won't run scripts if not present if ( jQuery._evalUrl ) { jQuery._evalUrl( node.src ); } } else { jQuery.globalEval( ( node.text || node.textContent || node.innerHTML || "" ) .replace( rcleanScript, "" ) ); } } } } // Fix #11809: Avoid leaking memory fragment = first = null; } } return collection; } function remove( elem, selector, keepData ) { var node, elems = selector ? jQuery.filter( selector, elem ) : elem, i = 0; for ( ; ( node = elems[ i ] ) != null; i++ ) { if ( !keepData && node.nodeType === 1 ) { jQuery.cleanData( getAll( node ) ); } if ( node.parentNode ) { if ( keepData && jQuery.contains( node.ownerDocument, node ) ) { setGlobalEval( getAll( node, "script" ) ); } node.parentNode.removeChild( node ); } } return elem; } jQuery.extend( { htmlPrefilter: function( html ) { return html.replace( rxhtmlTag, "<$1>" ); }, clone: function( elem, dataAndEvents, deepDataAndEvents ) { var destElements, node, clone, i, srcElements, inPage = jQuery.contains( elem.ownerDocument, elem ); if ( support.html5Clone || jQuery.isXMLDoc( elem ) || !rnoshimcache.test( "<" + elem.nodeName + ">" ) ) { clone = elem.cloneNode( true ); // IE<=8 does not properly clone detached, unknown element nodes } else { fragmentDiv.innerHTML = elem.outerHTML; fragmentDiv.removeChild( clone = fragmentDiv.firstChild ); } if ( ( !support.noCloneEvent || !support.noCloneChecked ) && ( elem.nodeType === 1 || elem.nodeType === 11 ) && !jQuery.isXMLDoc( elem ) ) { // We eschew Sizzle here for performance reasons: http://jsperf.com/getall-vs-sizzle/2 destElements = getAll( clone ); srcElements = getAll( elem ); // Fix all IE cloning issues for ( i = 0; ( node = srcElements[ i ] ) != null; ++i ) { // Ensure that the destination node is not null; Fixes #9587 if ( destElements[ i ] ) { fixCloneNodeIssues( node, destElements[ i ] ); } } } // Copy the events from the original to the clone if ( dataAndEvents ) { if ( deepDataAndEvents ) { srcElements = srcElements || getAll( elem ); destElements = destElements || getAll( clone ); for ( i = 0; ( node = srcElements[ i ] ) != null; i++ ) { cloneCopyEvent( node, destElements[ i ] ); } } else { cloneCopyEvent( elem, clone ); } } // Preserve script evaluation history destElements = getAll( clone, "script" ); if ( destElements.length > 0 ) { setGlobalEval( destElements, !inPage && getAll( elem, "script" ) ); } destElements = srcElements = node = null; // Return the cloned set return clone; }, cleanData: function( elems, /* internal */ forceAcceptData ) { var elem, type, id, data, i = 0, internalKey = jQuery.expando, cache = jQuery.cache, attributes = support.attributes, special = jQuery.event.special; for ( ; ( elem = elems[ i ] ) != null; i++ ) { if ( forceAcceptData || acceptData( elem ) ) { id = elem[ internalKey ]; data = id && cache[ id ]; if ( data ) { if ( data.events ) { for ( type in data.events ) { if ( special[ type ] ) { jQuery.event.remove( elem, type ); // This is a shortcut to avoid jQuery.event.remove's overhead } else { jQuery.removeEvent( elem, type, data.handle ); } } } // Remove cache only if it was not already removed by jQuery.event.remove if ( cache[ id ] ) { delete cache[ id ]; // Support: IE<9 // IE does not allow us to delete expando properties from nodes // IE creates expando attributes along with the property // IE does not have a removeAttribute function on Document nodes if ( !attributes && typeof elem.removeAttribute !== "undefined" ) { elem.removeAttribute( internalKey ); // Webkit & Blink performance suffers when deleting properties // from DOM nodes, so set to undefined instead // https://code.google.com/p/chromium/issues/detail?id=378607 } else { elem[ internalKey ] = undefined; } deletedIds.push( id ); } } } } } } ); jQuery.fn.extend( { // Keep domManip exposed until 3.0 (gh-2225) domManip: domManip, detach: function( selector ) { return remove( this, selector, true ); }, remove: function( selector ) { return remove( this, selector ); }, text: function( value ) { return access( this, function( value ) { return value === undefined ? jQuery.text( this ) : this.empty().append( ( this[ 0 ] && this[ 0 ].ownerDocument || document ).createTextNode( value ) ); }, null, value, arguments.length ); }, append: function() { return domManip( this, arguments, function( elem ) { if ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) { var target = manipulationTarget( this, elem ); target.appendChild( elem ); } } ); }, prepend: function() { return domManip( this, arguments, function( elem ) { if ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) { var target = manipulationTarget( this, elem ); target.insertBefore( elem, target.firstChild ); } } ); }, before: function() { return domManip( this, arguments, function( elem ) { if ( this.parentNode ) { this.parentNode.insertBefore( elem, this ); } } ); }, after: function() { return domManip( this, arguments, function( elem ) { if ( this.parentNode ) { this.parentNode.insertBefore( elem, this.nextSibling ); } } ); }, empty: function() { var elem, i = 0; for ( ; ( elem = this[ i ] ) != null; i++ ) { // Remove element nodes and prevent memory leaks if ( elem.nodeType === 1 ) { jQuery.cleanData( getAll( elem, false ) ); } // Remove any remaining nodes while ( elem.firstChild ) { elem.removeChild( elem.firstChild ); } // If this is a select, ensure that it displays empty (#12336) // Support: IE<9 if ( elem.options && jQuery.nodeName( elem, "select" ) ) { elem.options.length = 0; } } return this; }, clone: function( dataAndEvents, deepDataAndEvents ) { dataAndEvents = dataAndEvents == null ? false : dataAndEvents; deepDataAndEvents = deepDataAndEvents == null ? dataAndEvents : deepDataAndEvents; return this.map( function() { return jQuery.clone( this, dataAndEvents, deepDataAndEvents ); } ); }, html: function( value ) { return access( this, function( value ) { var elem = this[ 0 ] || {}, i = 0, l = this.length; if ( value === undefined ) { return elem.nodeType === 1 ? elem.innerHTML.replace( rinlinejQuery, "" ) : undefined; } // See if we can take a shortcut and just use innerHTML if ( typeof value === "string" && !rnoInnerhtml.test( value ) && ( support.htmlSerialize || !rnoshimcache.test( value ) ) && ( support.leadingWhitespace || !rleadingWhitespace.test( value ) ) && !wrapMap[ ( rtagName.exec( value ) || [ "", "" ] )[ 1 ].toLowerCase() ] ) { value = jQuery.htmlPrefilter( value ); try { for ( ; i < l; i++ ) { // Remove element nodes and prevent memory leaks elem = this[ i ] || {}; if ( elem.nodeType === 1 ) { jQuery.cleanData( getAll( elem, false ) ); elem.innerHTML = value; } } elem = 0; // If using innerHTML throws an exception, use the fallback method } catch ( e ) {} } if ( elem ) { this.empty().append( value ); } }, null, value, arguments.length ); }, replaceWith: function() { var ignored = []; // Make the changes, replacing each non-ignored context element with the new content return domManip( this, arguments, function( elem ) { var parent = this.parentNode; if ( jQuery.inArray( this, ignored ) < 0 ) { jQuery.cleanData( getAll( this ) ); if ( parent ) { parent.replaceChild( elem, this ); } } // Force callback invocation }, ignored ); } } ); jQuery.each( { appendTo: "append", prependTo: "prepend", insertBefore: "before", insertAfter: "after", replaceAll: "replaceWith" }, function( name, original ) { jQuery.fn[ name ] = function( selector ) { var elems, i = 0, ret = [], insert = jQuery( selector ), last = insert.length - 1; for ( ; i <= last; i++ ) { elems = i === last ? this : this.clone( true ); jQuery( insert[ i ] )[ original ]( elems ); // Modern browsers can apply jQuery collections as arrays, but oldIE needs a .get() push.apply( ret, elems.get() ); } return this.pushStack( ret ); }; } ); var iframe, elemdisplay = { // Support: Firefox // We have to pre-define these values for FF (#10227) HTML: "block", BODY: "block" }; /** * Retrieve the actual display of a element * @param {String} name nodeName of the element * @param {Object} doc Document object */ // Called only from within defaultDisplay function actualDisplay( name, doc ) { var elem = jQuery( doc.createElement( name ) ).appendTo( doc.body ), display = jQuery.css( elem[ 0 ], "display" ); // We don't have any data stored on the element, // so use "detach" method as fast way to get rid of the element elem.detach(); return display; } /** * Try to determine the default display value of an element * @param {String} nodeName */ function defaultDisplay( nodeName ) { var doc = document, display = elemdisplay[ nodeName ]; if ( !display ) { display = actualDisplay( nodeName, doc ); // If the simple way fails, read from inside an iframe if ( display === "none" || !display ) { // Use the already-created iframe if possible iframe = ( iframe || jQuery( "
Title1 Title2 Title3
d11 d12 d13
d21 d22 d23
================================================ FILE: src/main/resources/static/assets/vendor/jquery-easyui-1.9.7/demo/tabs/striptools.html ================================================ Tabs Strip Tools - jQuery EasyUI Demo

Tabs Strip Tools

Click the mini-buttons on the tab strip to perform actions.

jQuery EasyUI framework helps you build your web pages easily.

  • easyui is a collection of user-interface plugin based on jQuery.
  • easyui provides essential functionality for building modem, interactive, javascript applications.
  • using easyui you don't need to write many javascript code, you usually defines user-interface by writing some HTML markup.
  • complete framework for HTML5 web page.
  • easyui save your time and scales while developing your products.
  • easyui is very easy but powerful.
This is the help content.
================================================ FILE: src/main/resources/static/assets/vendor/jquery-easyui-1.9.7/demo/tabs/style.html ================================================ Tabs Style - jQuery EasyUI Demo

Tabs Style

Click the options below to change the tabs style.

plain
narrow
pill
justified

jQuery EasyUI framework helps you build your web pages easily.

  • easyui is a collection of user-interface plugin based on jQuery.
  • easyui provides essential functionality for building modem, interactive, javascript applications.
  • using easyui you don't need to write many javascript code, you usually defines user-interface by writing some HTML markup.
  • complete framework for HTML5 web page.
  • easyui save your time and scales while developing your products.
  • easyui is very easy but powerful.
    This is the help content.
    ================================================ FILE: src/main/resources/static/assets/vendor/jquery-easyui-1.9.7/demo/tabs/tabimage.html ================================================ Tabs with Images - jQuery EasyUI Demo

    Tabs with Images

    The tab strip can display big images.

    A modem (modulator-demodulator) is a device that modulates an analog carrier signal to encode digital information, and also demodulates such a carrier signal to decode the transmitted information.

    In computing, an image scanner—often abbreviated to just scanner—is a device that optically scans images, printed text, handwriting, or an object, and converts it to a digital image.

    A personal digital assistant (PDA), also known as a palmtop computer, or personal data assistant, is a mobile device that functions as a personal information manager. PDAs are largely considered obsolete with the widespread adoption of smartphones.

    A tablet computer, or simply tablet, is a one-piece mobile computer. Devices typically have a touchscreen, with finger or stylus gestures replacing the conventional computer mouse.

    ================================================ FILE: src/main/resources/static/assets/vendor/jquery-easyui-1.9.7/demo/tabs/tabposition.html ================================================ Tab Position - jQuery EasyUI Demo

    Tab Position

    Click the 'position' drop-down list and select an item to change the tab position.

    Position:

    jQuery EasyUI framework helps you build your web pages easily.

    • easyui is a collection of user-interface plugin based on jQuery.
    • easyui provides essential functionality for building modem, interactive, javascript applications.
    • using easyui you don't need to write many javascript code, you usually defines user-interface by writing some HTML markup.
    • complete framework for HTML5 web page.
    • easyui save your time and scales while developing your products.
    • easyui is very easy but powerful.
      This is the help content.
      ================================================ FILE: src/main/resources/static/assets/vendor/jquery-easyui-1.9.7/demo/tabs/tabstools.html ================================================ Tabs Tools - jQuery EasyUI Demo

      Tabs Tools

      Click the buttons on the top right of tabs header to add or remove tab panel.

      ================================================ FILE: src/main/resources/static/assets/vendor/jquery-easyui-1.9.7/demo/tabs/tree_data1.json ================================================ [{ "id":1, "text":"My Documents", "children":[{ "id":11, "text":"Photos", "state":"closed", "children":[{ "id":111, "text":"Friend" },{ "id":112, "text":"Wife" },{ "id":113, "text":"Company" }] },{ "id":12, "text":"Program Files", "children":[{ "id":121, "text":"Intel" },{ "id":122, "text":"Java", "attributes":{ "p1":"Custom Attribute1", "p2":"Custom Attribute2" } },{ "id":123, "text":"Microsoft Office" },{ "id":124, "text":"Games", "checked":true }] },{ "id":13, "text":"index.html" },{ "id":14, "text":"about.html" },{ "id":15, "text":"welcome.html" }] }] ================================================ FILE: src/main/resources/static/assets/vendor/jquery-easyui-1.9.7/demo/tagbox/autocomplete.html ================================================ TagBox with Autocomplete - jQuery EasyUI Demo

      TagBox with Autocomplete

      The autocomplete is the built-in feature that allows the user to select a value from the drop-down list.

      ================================================ FILE: src/main/resources/static/assets/vendor/jquery-easyui-1.9.7/demo/tagbox/basic.html ================================================ Basic TagBox - jQuery EasyUI Demo

      Basic TagBox

      The TagBox is created from a simple input element.

      ================================================ FILE: src/main/resources/static/assets/vendor/jquery-easyui-1.9.7/demo/tagbox/button.html ================================================ TagBox with Button - jQuery EasyUI Demo

      TagBox with Button

      The button can be attached to a tagbox.

      ================================================ FILE: src/main/resources/static/assets/vendor/jquery-easyui-1.9.7/demo/tagbox/format.html ================================================ Format TagBox - jQuery EasyUI Demo

      Format TagBox

      This example shows how to format the tagbox values.

      ================================================ FILE: src/main/resources/static/assets/vendor/jquery-easyui-1.9.7/demo/tagbox/style.html ================================================ Custom TagBox Style - jQuery EasyUI Demo

      Custom TagBox Style

      This example shows how to apply different CSS styles to different tags.

      ================================================ FILE: src/main/resources/static/assets/vendor/jquery-easyui-1.9.7/demo/tagbox/tagbox_data1.json ================================================ [{ "id":"1", "text":"Java", "desc":"Write once, run anywhere" },{ "id":"2", "text":"C#", "desc":"One of the programming languages designed for the Common Language Infrastructure" },{ "id":"3", "text":"Ruby", "desc":"A dynamic, reflective, general-purpose object-oriented programming language" },{ "id":"4", "text":"Perl", "desc":"A high-level, general-purpose, interpreted, dynamic programming language" },{ "id":"5", "text":"Basic", "desc":"A family of general-purpose, high-level programming languages" }] ================================================ FILE: src/main/resources/static/assets/vendor/jquery-easyui-1.9.7/demo/tagbox/validate.html ================================================ Validate TagBox - jQuery EasyUI Demo

      Validate TagBox

      This example shows how to validate the tagbox values.

      ================================================ FILE: src/main/resources/static/assets/vendor/jquery-easyui-1.9.7/demo/textbox/basic.html ================================================ Basic TextBox - jQuery EasyUI Demo

      Basic TextBox

      The textbox allows a user to enter information.

      ================================================ FILE: src/main/resources/static/assets/vendor/jquery-easyui-1.9.7/demo/textbox/button.html ================================================ TextBox with Button - jQuery EasyUI Demo

      TextBox with Button

      The button can be attached to a textbox.

      ================================================ FILE: src/main/resources/static/assets/vendor/jquery-easyui-1.9.7/demo/textbox/clearicon.html ================================================ TextBox with Clear Icon - jQuery EasyUI Demo

      TextBox with Clear Icon

      This example shows how to create an textbox with an icon to clear the input element itself.

      ================================================ FILE: src/main/resources/static/assets/vendor/jquery-easyui-1.9.7/demo/textbox/custom.html ================================================ Custom TextBox - jQuery EasyUI Demo

      Custom TextBox

      This example shows how to custom a login form.

      Remember me
      ================================================ FILE: src/main/resources/static/assets/vendor/jquery-easyui-1.9.7/demo/textbox/fluid.html ================================================ Fluid TextBox - jQuery EasyUI Demo

      Fluid TextBox

      This example shows how to set the width of TextBox to a percentage of its parent container.

      ================================================ FILE: src/main/resources/static/assets/vendor/jquery-easyui-1.9.7/demo/textbox/icons.html ================================================ TextBox with Icons - jQuery EasyUI Demo

      TextBox with Icons

      Click the icons on textbox to perform actions.

      Select Icon Align:
      ================================================ FILE: src/main/resources/static/assets/vendor/jquery-easyui-1.9.7/demo/textbox/multiline.html ================================================ Multiline TextBox - jQuery EasyUI Demo

      Multiline TextBox

      This example shows how to define a textbox for the user to enter multi-line text input.

      ================================================ FILE: src/main/resources/static/assets/vendor/jquery-easyui-1.9.7/demo/textbox/size.html ================================================ TextBox Size - jQuery EasyUI Demo

      TextBox Size

      The textbox can vary in size.

      ================================================ FILE: src/main/resources/static/assets/vendor/jquery-easyui-1.9.7/demo/timepicker/basic.html ================================================ Basic TimePicker - jQuery EasyUI Demo

      Basic TimePicker

      Click drop-down button to choose time on a clock.

      ================================================ FILE: src/main/resources/static/assets/vendor/jquery-easyui-1.9.7/demo/timespinner/actions.html ================================================ TimeSpinner Actions - jQuery EasyUI Demo

      TimeSpinner Actions

      Click the buttons below to perform actions.

      ================================================ FILE: src/main/resources/static/assets/vendor/jquery-easyui-1.9.7/demo/timespinner/basic.html ================================================ Basic TimeSpinner - jQuery EasyUI Demo

      Basic TimeSpinner

      Click spin button to adjust time.

      ================================================ FILE: src/main/resources/static/assets/vendor/jquery-easyui-1.9.7/demo/timespinner/fluid.html ================================================ Fluid TimeSpinner - jQuery EasyUI Demo

      Fluid TimeSpinner

      This example shows how to set the width of TimeSpinner to a percentage of its parent container.

      ================================================ FILE: src/main/resources/static/assets/vendor/jquery-easyui-1.9.7/demo/timespinner/hour12.html ================================================ 12 Hour Format - jQuery EasyUI Demo

      12 Hour Format

      Displays in a 12 hour format.

      ================================================ FILE: src/main/resources/static/assets/vendor/jquery-easyui-1.9.7/demo/timespinner/range.html ================================================ Time Range - jQuery EasyUI Demo

      Time Range

      The time value is constrained in specified range.

      From 08:30 to 18:00
      ================================================ FILE: src/main/resources/static/assets/vendor/jquery-easyui-1.9.7/demo/tooltip/_content.html ================================================ AJAX Content

      Here is the content loaded via AJAX.

      • easyui is a collection of user-interface plugin based on jQuery.
      • easyui provides essential functionality for building modern, interactive, javascript applications.
      • using easyui you don't need to write many javascript code, you usually defines user-interface by writing some HTML markup.
      • complete framework for HTML5 web page.
      • easyui save your time and scales while developing your products.
      • easyui is very easy but powerful.
      ================================================ FILE: src/main/resources/static/assets/vendor/jquery-easyui-1.9.7/demo/tooltip/_dialog.html ================================================ Dialog Content
      User Name:
      Password:
      ================================================ FILE: src/main/resources/static/assets/vendor/jquery-easyui-1.9.7/demo/tooltip/ajax.html ================================================ Ajax Tooltip - jQuery EasyUI Demo

      Ajax Tooltip

      The tooltip content can be loaded via AJAX.

      Hove me to display tooltip content via AJAX. ================================================ FILE: src/main/resources/static/assets/vendor/jquery-easyui-1.9.7/demo/tooltip/basic.html ================================================ Basic Tooltip - jQuery EasyUI Demo

      Basic Tooltip

      Hover the links to display tooltip message.

      The tooltip can use each elements title attribute. Hover me to display tooltip.

      ================================================ FILE: src/main/resources/static/assets/vendor/jquery-easyui-1.9.7/demo/tooltip/customcontent.html ================================================ Custom Tooltip Content - jQuery EasyUI Demo

      Custom Tooltip Content

      Access to each elements attribute to get the tooltip content.

      ================================================ FILE: src/main/resources/static/assets/vendor/jquery-easyui-1.9.7/demo/tooltip/customstyle.html ================================================ Custom Tooltip Style - jQuery EasyUI Demo

      Custom Tooltip Style

      This sample shows how to change the tooltip style.

      Hover Me
      Hover Me
      ================================================ FILE: src/main/resources/static/assets/vendor/jquery-easyui-1.9.7/demo/tooltip/position.html ================================================ Tooltip Position - jQuery EasyUI Demo

      Tooltip Position

      Click the drop-down list below to change where the tooltip appears.

      Select position:
      Hover Me
      ================================================ FILE: src/main/resources/static/assets/vendor/jquery-easyui-1.9.7/demo/tooltip/toolbar.html ================================================ Tooltip as Toolbar - jQuery EasyUI Demo

      Tooltip as Toolbar

      This sample shows how to create a tooltip style toolbar.

      Hover me to display toolbar.

      ================================================ FILE: src/main/resources/static/assets/vendor/jquery-easyui-1.9.7/demo/tooltip/tooltipdialog.html ================================================ Tooltip Dialog - jQuery EasyUI Demo

      Tooltip Dialog

      This sample shows how to create a tooltip dialog.

      Click here to see the tooltip dialog.

      ================================================ FILE: src/main/resources/static/assets/vendor/jquery-easyui-1.9.7/demo/tree/actions.html ================================================ Tree Actions - jQuery EasyUI Demo

      Tree Actions

      Click the buttons below to perform actions.

        ================================================ FILE: src/main/resources/static/assets/vendor/jquery-easyui-1.9.7/demo/tree/animation.html ================================================ Animation Tree - jQuery EasyUI Demo

        Animation Tree

        Apply 'animate' property to true to enable animation effect.

          ================================================ FILE: src/main/resources/static/assets/vendor/jquery-easyui-1.9.7/demo/tree/basic.html ================================================ Basic Tree - jQuery EasyUI Demo

          Basic Tree

          Click the arrow on the left to expand or collapse nodes.

          • My Documents
            • Photos
              • Friend
              • Wife
              • Company
            • Program Files
              • Intel
              • Java
              • Microsoft Office
              • Games
            • index.html
            • about.html
            • welcome.html
          ================================================ FILE: src/main/resources/static/assets/vendor/jquery-easyui-1.9.7/demo/tree/checkbox.html ================================================ CheckBox Tree - jQuery EasyUI Demo

          CheckBox Tree

          Tree nodes with check boxes.

          CascadeCheck OnlyLeafCheck
            ================================================ FILE: src/main/resources/static/assets/vendor/jquery-easyui-1.9.7/demo/tree/contextmenu.html ================================================ Tree Context Menu - jQuery EasyUI Demo

            Tree Context Menu

            Right click on a node to display context menu.

              Append
              Remove
              Expand
              Collapse
              ================================================ FILE: src/main/resources/static/assets/vendor/jquery-easyui-1.9.7/demo/tree/customcheckbox.html ================================================ Custom CheckBox Tree - jQuery EasyUI Demo

              Custom CheckBox Tree

              Tree nodes with customized check boxes.

                ================================================ FILE: src/main/resources/static/assets/vendor/jquery-easyui-1.9.7/demo/tree/dnd.html ================================================ Drag Drop Tree Nodes - jQuery EasyUI Demo

                Drag Drop Tree Nodes

                Press mouse down and drag a node to another position.

                  ================================================ FILE: src/main/resources/static/assets/vendor/jquery-easyui-1.9.7/demo/tree/editable.html ================================================ Editable Tree - jQuery EasyUI Demo

                  Editable Tree

                  Click the node to begin edit, press enter key to stop edit or esc key to cancel edit.

                    ================================================ FILE: src/main/resources/static/assets/vendor/jquery-easyui-1.9.7/demo/tree/formatting.html ================================================ Formatting Tree Nodes - jQuery EasyUI Demo

                    Formatting Tree Nodes

                    This example shows how to display extra information on nodes.

                    ================================================ FILE: src/main/resources/static/assets/vendor/jquery-easyui-1.9.7/demo/tree/icons.html ================================================ Tree Node Icons - jQuery EasyUI Demo

                    Tree Node Icons

                    This sample illustrates how to add icons to tree node.

                      ================================================ FILE: src/main/resources/static/assets/vendor/jquery-easyui-1.9.7/demo/tree/lazyload.html ================================================ Lazy Load Tree Nodes - jQuery EasyUI Demo

                      Lazy Load Tree Nodes

                      Get full hierarchical tree data but lazy load nodes level by level.

                        ================================================ FILE: src/main/resources/static/assets/vendor/jquery-easyui-1.9.7/demo/tree/lines.html ================================================ Tree Lines - jQuery EasyUI Demo

                        Tree Lines

                        This sample shows how to show tree lines.

                          ================================================ FILE: src/main/resources/static/assets/vendor/jquery-easyui-1.9.7/demo/tree/tree_data1.json ================================================ [{ "id":1, "text":"My Documents", "children":[{ "id":11, "text":"Photos", "state":"closed", "children":[{ "id":111, "text":"Friend" },{ "id":112, "text":"Wife" },{ "id":113, "text":"Company" }] },{ "id":12, "text":"Program Files", "children":[{ "id":121, "text":"Intel" },{ "id":122, "text":"Java", "attributes":{ "p1":"Custom Attribute1", "p2":"Custom Attribute2" } },{ "id":123, "text":"Microsoft Office" },{ "id":124, "text":"Games", "checked":true }] },{ "id":13, "text":"index.html" },{ "id":14, "text":"about.html" },{ "id":15, "text":"welcome.html" }] }] ================================================ FILE: src/main/resources/static/assets/vendor/jquery-easyui-1.9.7/demo/tree/tree_data2.json ================================================ [{ "id":1, "text":"My Documents", "children":[{ "id":11, "text":"Photos", "state":"closed", "children":[{ "id":111, "text":"Friend" },{ "id":112, "text":"Wife" },{ "id":113, "text":"Company" }] },{ "id":12, "text":"Program Files", "state":"closed", "children":[{ "id":121, "text":"Intel" },{ "id":122, "text":"Java" },{ "id":123, "text":"Microsoft Office" },{ "id":124, "text":"Games" }] },{ "id":16, "text":"Actions", "children":[{ "text":"Add", "iconCls":"icon-add" },{ "text":"Remove", "iconCls":"icon-remove" },{ "text":"Save", "iconCls":"icon-save" },{ "text":"Search", "iconCls":"icon-search" }] },{ "id":13, "text":"index.html" },{ "id":14, "text":"about.html" },{ "id":15, "text":"welcome.html" }] }] ================================================ FILE: src/main/resources/static/assets/vendor/jquery-easyui-1.9.7/demo/treegrid/actions.html ================================================ TreeGrid Actions - jQuery EasyUI Demo

                          TreeGrid Actions

                          Click the buttons below to perform actions.

                          Task Name Persons Begin Date End Date Progress
                          ================================================ FILE: src/main/resources/static/assets/vendor/jquery-easyui-1.9.7/demo/treegrid/basic.html ================================================ Basic TreeGrid - jQuery EasyUI Demo

                          Basic TreeGrid

                          TreeGrid allows you to expand or collapse group rows.

                          Name Size Modified Date
                          ================================================ FILE: src/main/resources/static/assets/vendor/jquery-easyui-1.9.7/demo/treegrid/checkbox.html ================================================ Cascade CheckBox in TreeGrid - jQuery EasyUI Demo

                          Cascade CheckBox in TreeGrid

                          TreeGrid nodes with cascade check boxes.

                          Name Size Modified Date
                          ================================================ FILE: src/main/resources/static/assets/vendor/jquery-easyui-1.9.7/demo/treegrid/clientpagination.html ================================================ Client Side Pagination in TreeGrid - jQuery EasyUI Demo

                          Client Side Pagination in TreeGrid

                          This sample shows how to implement client side pagination in TreeGrid.

                          Task Name Persons Begin Date End Date Progress
                          ================================================ FILE: src/main/resources/static/assets/vendor/jquery-easyui-1.9.7/demo/treegrid/contextmenu.html ================================================ TreeGrid ContextMenu - jQuery EasyUI Demo

                          TreeGrid ContextMenu

                          Right click to display the context menu.

                          Task Name Persons Begin Date End Date Progress
                          Append
                          Remove
                          Collapse
                          Expand
                          ================================================ FILE: src/main/resources/static/assets/vendor/jquery-easyui-1.9.7/demo/treegrid/customcheckbox.html ================================================ Custom CheckBox in TreeGrid - jQuery EasyUI Demo

                          Custom CheckBox in TreeGrid

                          TreeGrid nodes with customized check boxes.

                          Name Size Modified Date
                          ================================================ FILE: src/main/resources/static/assets/vendor/jquery-easyui-1.9.7/demo/treegrid/editable.html ================================================ Editable TreeGrid - jQuery EasyUI Demo

                          Editable TreeGrid

                          Select one node and click edit button to perform editing.

                          Task Name Persons Begin Date End Date Progress
                          ================================================ FILE: src/main/resources/static/assets/vendor/jquery-easyui-1.9.7/demo/treegrid/fluid.html ================================================ Fluid TreeGrid - jQuery EasyUI Demo

                          Fluid TreeGrid

                          This example shows how to assign percentage width to a column in TreeGrid.

                          Name(50%) Size(20%) Modified Date(30%)
                          ================================================ FILE: src/main/resources/static/assets/vendor/jquery-easyui-1.9.7/demo/treegrid/footer.html ================================================ TreeGrid with Footer - jQuery EasyUI Demo

                          TreeGrid with Footer

                          Show summary information on TreeGrid footer.

                          ================================================ FILE: src/main/resources/static/assets/vendor/jquery-easyui-1.9.7/demo/treegrid/lines.html ================================================ TreeGrid Lines - jQuery EasyUI Demo

                          TreeGrid Lines

                          This example shows how to show treegrid lines.

                          Name Size Modified Date
                          ================================================ FILE: src/main/resources/static/assets/vendor/jquery-easyui-1.9.7/demo/treegrid/reports.html ================================================ Reports using TreeGrid - jQuery EasyUI Demo

                          Reports using TreeGrid

                          Using TreeGrid to show complex reports.

                          Region
                          2009 2010
                          1st qrt. 2st qrt. 3st qrt. 4st qrt. 1st qrt. 2st qrt. 3st qrt. 4st qrt.
                          ================================================ FILE: src/main/resources/static/assets/vendor/jquery-easyui-1.9.7/demo/treegrid/treegrid_data1.json ================================================ [{ "id":1, "name":"C", "size":"", "date":"02/19/2010", "children":[{ "id":2, "name":"Program Files", "size":"120 MB", "date":"03/20/2010", "children":[{ "id":21, "name":"Java", "size":"", "date":"01/13/2010", "state":"closed", "children":[{ "id":211, "name":"java.exe", "size":"142 KB", "date":"01/13/2010" },{ "id":212, "name":"jawt.dll", "size":"5 KB", "date":"01/13/2010" }] },{ "id":22, "name":"MySQL", "size":"", "date":"01/13/2010", "state":"closed", "children":[{ "id":221, "name":"my.ini", "size":"10 KB", "date":"02/26/2009" },{ "id":222, "name":"my-huge.ini", "size":"5 KB", "date":"02/26/2009" },{ "id":223, "name":"my-large.ini", "size":"5 KB", "date":"02/26/2009" }] }] },{ "id":3, "name":"eclipse", "size":"", "date":"01/20/2010", "children":[{ "id":31, "name":"eclipse.exe", "size":"56 KB", "date":"05/19/2009" },{ "id":32, "name":"eclipse.ini", "size":"1 KB", "date":"04/20/2010" },{ "id":33, "name":"notice.html", "size":"7 KB", "date":"03/17/2005" }] }] }] ================================================ FILE: src/main/resources/static/assets/vendor/jquery-easyui-1.9.7/demo/treegrid/treegrid_data2.json ================================================ {"total":7,"rows":[ {"id":1,"name":"All Tasks","begin":"3/4/2010","end":"3/20/2010","progress":60,"iconCls":"icon-ok"}, {"id":2,"name":"Designing","begin":"3/4/2010","end":"3/10/2010","progress":100,"_parentId":1,"state":"closed"}, {"id":21,"name":"Database","persons":2,"begin":"3/4/2010","end":"3/6/2010","progress":100,"_parentId":2}, {"id":22,"name":"UML","persons":1,"begin":"3/7/2010","end":"3/8/2010","progress":100,"_parentId":2}, {"id":23,"name":"Export Document","persons":1,"begin":"3/9/2010","end":"3/10/2010","progress":100,"_parentId":2}, {"id":3,"name":"Coding","persons":2,"begin":"3/11/2010","end":"3/18/2010","progress":80}, {"id":4,"name":"Testing","persons":1,"begin":"3/19/2010","end":"3/20/2010","progress":20} ],"footer":[ {"name":"Total Persons:","persons":7,"iconCls":"icon-sum"} ]} ================================================ FILE: src/main/resources/static/assets/vendor/jquery-easyui-1.9.7/demo/treegrid/treegrid_data3.json ================================================ {"total":9,"rows":[ {"id":1,"region":"Wyoming"}, {"id":11,"region":"Albin","f1":2000,"f2":1800,"f3":1903,"f4":2183,"f5":2133,"f6":1923,"f7":2018,"f8":1838,"_parentId":1}, {"id":12,"region":"Canon","f1":2000,"f2":1800,"f3":1903,"f4":2183,"f5":2133,"f6":1923,"f7":2018,"f8":1838,"_parentId":1}, {"id":13,"region":"Egbert","f1":2000,"f2":1800,"f3":1903,"f4":2183,"f5":2133,"f6":1923,"f7":2018,"f8":1838,"_parentId":1}, {"id":2,"region":"Washington"}, {"id":21,"region":"Bellingham","f1":2000,"f2":1800,"f3":1903,"f4":2183,"f5":2133,"f6":1923,"f7":2018,"f8":1838,"_parentId":2}, {"id":22,"region":"Chehalis","f1":2000,"f2":1800,"f3":1903,"f4":2183,"f5":2133,"f6":1923,"f7":2018,"f8":1838,"_parentId":2}, {"id":23,"region":"Ellensburg","f1":2000,"f2":1800,"f3":1903,"f4":2183,"f5":2133,"f6":1923,"f7":2018,"f8":1838,"_parentId":2}, {"id":24,"region":"Monroe","f1":2000,"f2":1800,"f3":1903,"f4":2183,"f5":2133,"f6":1923,"f7":2018,"f8":1838,"_parentId":2} ],"footer":[ {"region":"Total","f1":14000,"f2":12600,"f3":13321,"f4":15281,"f5":14931,"f6":13461,"f7":14126,"f8":12866} ]} ================================================ FILE: src/main/resources/static/assets/vendor/jquery-easyui-1.9.7/demo/validatebox/basic.html ================================================ Basic ValidateBox - jQuery EasyUI Demo

                          Basic ValidateBox

                          It's easy to add validate logic to a input box.

                          ================================================ FILE: src/main/resources/static/assets/vendor/jquery-easyui-1.9.7/demo/validatebox/customtooltip.html ================================================ Custom ValidateBox Tooltip - jQuery EasyUI Demo

                          Custom ValidateBox Tooltip

                          This sample shows how to display another tooltip message on a valid textbox.

                          ================================================ FILE: src/main/resources/static/assets/vendor/jquery-easyui-1.9.7/demo/validatebox/errorplacement.html ================================================ Error Placement in ValidateBox - jQuery EasyUI Demo

                          Error Placement in ValidateBox

                          This example shows how to display the error message below the field.

                          ================================================ FILE: src/main/resources/static/assets/vendor/jquery-easyui-1.9.7/demo/validatebox/validateonblur.html ================================================ Validate On Blur - jQuery EasyUI Demo

                          Validate On Blur

                          Active validation on first blur event.

                          ================================================ FILE: src/main/resources/static/assets/vendor/jquery-easyui-1.9.7/demo/window/basic.html ================================================ Basic Window - jQuery EasyUI Demo

                          Basic Window

                          Window can be dragged freely on screen.

                          The window content.
                          ================================================ FILE: src/main/resources/static/assets/vendor/jquery-easyui-1.9.7/demo/window/borderstyle.html ================================================ Window Border Style - jQuery EasyUI Demo

                          Window Border Style

                          This example shows how to set the different border style.

                          Window content

                          Window content

                          Window content

                          Window content

                          Window content

                          Window content

                          ================================================ FILE: src/main/resources/static/assets/vendor/jquery-easyui-1.9.7/demo/window/customtools.html ================================================ Custom Window Tools - jQuery EasyUI Demo

                          Custom Window Tools

                          Click the right top buttons to perform actions.

                          The window content.
                          ================================================ FILE: src/main/resources/static/assets/vendor/jquery-easyui-1.9.7/demo/window/fluid.html ================================================ Fluid Window - jQuery EasyUI Demo

                          Fluid Window

                          This example shows how to set the width of Window to a percentage of its parent container.

                          The window has a width of 80%.

                          ================================================ FILE: src/main/resources/static/assets/vendor/jquery-easyui-1.9.7/demo/window/footer.html ================================================ Window with a Footer - jQuery EasyUI Demo

                          Window with a Footer

                          This example shows how to attach a footer bar to the window.

                          The window content.
                          ================================================ FILE: src/main/resources/static/assets/vendor/jquery-easyui-1.9.7/demo/window/inlinewindow.html ================================================ Inline Window - jQuery EasyUI Demo

                          Inline Window

                          The inline window stay inside its parent.

                          This window stay inside its parent
                          ================================================ FILE: src/main/resources/static/assets/vendor/jquery-easyui-1.9.7/demo/window/modalwindow.html ================================================ Modal Window - jQuery EasyUI Demo

                          Modal Window

                          Click the open button below to open the modal window.

                          The window content.
                          ================================================ FILE: src/main/resources/static/assets/vendor/jquery-easyui-1.9.7/demo/window/windowlayout.html ================================================ Window Layout - jQuery EasyUI Demo

                          Window Layout

                          Using layout on window.

                          jQuery EasyUI framework help you build your web page easily.
                          ================================================ FILE: src/main/resources/static/assets/vendor/jquery-easyui-1.9.7/demo-mobile/accordion/_content.html ================================================ AJAX Content

                          Here is the content loaded via AJAX.

                          • easyui is a collection of user-interface plugin based on jQuery.
                          • easyui provides essential functionality for building modern, interactive, javascript applications.
                          • using easyui you don't need to write many javascript code, you usually defines user-interface by writing some HTML markup.
                          • complete framework for HTML5 web page.
                          • easyui save your time and scales while developing your products.
                          • easyui is very easy but powerful.
                          ================================================ FILE: src/main/resources/static/assets/vendor/jquery-easyui-1.9.7/demo-mobile/accordion/basic.html ================================================ Basic Accordion - jQuery EasyUI Mobile Demo
                          Basic Accordion
                          • WLAN
                          • Memory
                          • Screen
                          • More...
                          ================================================ FILE: src/main/resources/static/assets/vendor/jquery-easyui-1.9.7/demo-mobile/accordion/header.html ================================================ Custom Accordion Header - jQuery EasyUI Mobile Demo
                          Custom Accordion Header
                          List 26/51
                          • WLAN
                          • Memory
                          • Screen
                          • More...
                          Ajax Loading via ajax 23
                          ================================================ FILE: src/main/resources/static/assets/vendor/jquery-easyui-1.9.7/demo-mobile/animation/basic.html ================================================ Basic Animation - jQuery EasyUI Mobile Demo
                          Basic Animation
                          Panel2
                          Panel3

                          Panel3 Content.

                          ================================================ FILE: src/main/resources/static/assets/vendor/jquery-easyui-1.9.7/demo-mobile/animation/fade.html ================================================ Fade Animation - jQuery EasyUI Mobile Demo
                          Fade Animation
                          Panel2

                          Panel2 Content.

                          ================================================ FILE: src/main/resources/static/assets/vendor/jquery-easyui-1.9.7/demo-mobile/animation/pop.html ================================================ Pop Animation - jQuery EasyUI Mobile Demo
                          Pop Animation
                          Panel2

                          Panel2 Content.

                          ================================================ FILE: src/main/resources/static/assets/vendor/jquery-easyui-1.9.7/demo-mobile/animation/slide.html ================================================ Slide Animation - jQuery EasyUI Mobile Demo
                          Panel2

                          Panel2 Content.

                          ================================================ FILE: src/main/resources/static/assets/vendor/jquery-easyui-1.9.7/demo-mobile/badge/basic.html ================================================ Basic Badge - jQuery EasyUI Mobile Demo ================================================ FILE: src/main/resources/static/assets/vendor/jquery-easyui-1.9.7/demo-mobile/badge/button.html ================================================ Button Badge - jQuery EasyUI Mobile Demo ================================================ FILE: src/main/resources/static/assets/vendor/jquery-easyui-1.9.7/demo-mobile/badge/list.html ================================================ List Badge - jQuery EasyUI Mobile Demo
                          List Badge
                          • Large
                            234
                          • Spotted Adult Female
                            215
                          • Venomless
                            12
                          • Rattleless
                            6
                          • Green Adult
                          • Tailless
                          • With tail
                          • Adult Female
                          ================================================ FILE: src/main/resources/static/assets/vendor/jquery-easyui-1.9.7/demo-mobile/badge/tabs.html ================================================ Tabs Badge - jQuery EasyUI Mobile Demo
                          Tabs Badge

                          Modem

                          A modem (modulator-demodulator) is a device that modulates an analog carrier signal to encode digital information, and also demodulates such a carrier signal to decode the transmitted information.


                          Scanner

                          In computing, an image scanner—often abbreviated to just scanner—is a device that optically scans images, printed text, handwriting, or an object, and converts it to a digital image.


                          Pda 23

                          A personal digital assistant (PDA), also known as a palmtop computer, or personal data assistant, is a mobile device that functions as a personal information manager. PDAs are largely considered obsolete with the widespread adoption of smartphones.


                          Pda 13

                          A tablet computer, or simply tablet, is a one-piece mobile computer. Devices typically have a touchscreen, with finger or stylus gestures replacing the conventional computer mouse.

                          ================================================ FILE: src/main/resources/static/assets/vendor/jquery-easyui-1.9.7/demo-mobile/button/basic.html ================================================ Basic LinkButton - jQuery EasyUI Mobile Demo
                          Login to System
                          ================================================ FILE: src/main/resources/static/assets/vendor/jquery-easyui-1.9.7/demo-mobile/button/group.html ================================================ Group LinkButton - jQuery EasyUI Mobile Demo
                          Button Group

                          A modem (modulator-demodulator) is a device that modulates an analog carrier signal to encode digital information, and also demodulates such a carrier signal to decode the transmitted information.

                          ================================================ FILE: src/main/resources/static/assets/vendor/jquery-easyui-1.9.7/demo-mobile/button/style.html ================================================ Button Style - jQuery EasyUI Mobile Demo ================================================ FILE: src/main/resources/static/assets/vendor/jquery-easyui-1.9.7/demo-mobile/button/switch.html ================================================ Switch Button - jQuery EasyUI Mobile Demo
                          Switch Button
                          ================================================ FILE: src/main/resources/static/assets/vendor/jquery-easyui-1.9.7/demo-mobile/datagrid/basic.html ================================================ Basic DataGrid - jQuery EasyUI Mobile Demo
                          Item ID Product List Price Unit Cost
                          Basic DataGrid
                          ================================================ FILE: src/main/resources/static/assets/vendor/jquery-easyui-1.9.7/demo-mobile/datagrid/rowediting.html ================================================ Row Editing DataGrid - jQuery EasyUI Mobile Demo
                          Item ID Product List Price Unit Cost
                          Row Editing
                          ================================================ FILE: src/main/resources/static/assets/vendor/jquery-easyui-1.9.7/demo-mobile/datalist/basic.html ================================================ Basic DataList - jQuery EasyUI Mobile Demo
                          Basic DataList
                          ================================================ FILE: src/main/resources/static/assets/vendor/jquery-easyui-1.9.7/demo-mobile/datalist/group.html ================================================ Group DataList - jQuery EasyUI Mobile Demo
                          Group DataList
                          Detail
                          ================================================ FILE: src/main/resources/static/assets/vendor/jquery-easyui-1.9.7/demo-mobile/datalist/selection.html ================================================ DataList Selection - jQuery EasyUI Mobile Demo
                          DataList Selection
                          ================================================ FILE: src/main/resources/static/assets/vendor/jquery-easyui-1.9.7/demo-mobile/dialog/basic.html ================================================ Basic Dialog - jQuery EasyUI Mobile Demo ================================================ FILE: src/main/resources/static/assets/vendor/jquery-easyui-1.9.7/demo-mobile/dialog/message.html ================================================ Message Dialog - jQuery EasyUI Mobile Demo
                          Message Dialog

                          This is a message dialog.

                          OK
                          ================================================ FILE: src/main/resources/static/assets/vendor/jquery-easyui-1.9.7/demo-mobile/form/basic.html ================================================ Basic Form - jQuery EasyUI Mobile Demo
                          Basic Form
                          ================================================ FILE: src/main/resources/static/assets/vendor/jquery-easyui-1.9.7/demo-mobile/input/numberspinner.html ================================================ NumberSpinner - jQuery EasyUI Mobile Demo
                          NumberSpinner
                          ================================================ FILE: src/main/resources/static/assets/vendor/jquery-easyui-1.9.7/demo-mobile/input/textbox.html ================================================ TextBox - jQuery EasyUI Mobile Demo
                          TextBox
                          ================================================ FILE: src/main/resources/static/assets/vendor/jquery-easyui-1.9.7/demo-mobile/layout/basic.html ================================================ Basic Layout - jQuery EasyUI Mobile Demo
                          Layout
                          ================================================ FILE: src/main/resources/static/assets/vendor/jquery-easyui-1.9.7/demo-mobile/menu/basic.html ================================================ Basic Menu - jQuery EasyUI Mobile Demo
                          Menu
                          Undo
                          Redo
                          Cut
                          Copy
                          Paste
                          Toolbar
                          Delete
                          Select All
                          ================================================ FILE: src/main/resources/static/assets/vendor/jquery-easyui-1.9.7/demo-mobile/menu/menubar.html ================================================ Menubar - jQuery EasyUI Mobile Demo
                          Undo
                          Redo
                          Cut
                          Copy
                          Paste
                          Toolbar
                          Delete
                          Select All
                          Help
                          Update
                          About
                          ================================================ FILE: src/main/resources/static/assets/vendor/jquery-easyui-1.9.7/demo-mobile/panel/_content.html ================================================ AJAX Content

                          Here is the content loaded via AJAX.

                          • easyui is a collection of user-interface plugin based on jQuery.
                          • easyui provides essential functionality for building modern, interactive, javascript applications.
                          • using easyui you don't need to write many javascript code, you usually defines user-interface by writing some HTML markup.
                          • complete framework for HTML5 web page.
                          • easyui save your time and scales while developing your products.
                          • easyui is very easy but powerful.
                          ================================================ FILE: src/main/resources/static/assets/vendor/jquery-easyui-1.9.7/demo-mobile/panel/ajax.html ================================================ Ajax Panel - jQuery EasyUI Mobile Demo
                          Ajax Panel
                          Panel Footer
                          ================================================ FILE: src/main/resources/static/assets/vendor/jquery-easyui-1.9.7/demo-mobile/panel/basic.html ================================================ Basic Panel - jQuery EasyUI Mobile Demo
                          Panel Header
                          Panel Footer
                          ================================================ FILE: src/main/resources/static/assets/vendor/jquery-easyui-1.9.7/demo-mobile/panel/nav.html ================================================ Navigation Panel - jQuery EasyUI Mobile Demo
                          Navigation
                          Panel2
                          ================================================ FILE: src/main/resources/static/assets/vendor/jquery-easyui-1.9.7/demo-mobile/simplelist/basic.html ================================================ Simple List - jQuery EasyUI Mobile Demo
                          Simple List
                          • Large
                          • Spotted Adult Female
                          • Venomless
                          • Rattleless
                          • Green Adult
                          • Tailless
                          • With tail
                          • Adult Female
                          ================================================ FILE: src/main/resources/static/assets/vendor/jquery-easyui-1.9.7/demo-mobile/simplelist/button.html ================================================ Button on List - jQuery EasyUI Mobile Demo
                          Button on List
                          • HP Deskjet 1000 Printer
                            Add
                          • Epson WorkForce 845
                            Add
                          • Logitech Keyboard K120
                            Add
                          • Nikon COOLPIX L26 16.1 MP
                            Add
                          • SanDisk Sansa Clip Zip 4GB
                            Add
                          • BLUE MP3 Metal Mini Clip Player
                            Add
                          ================================================ FILE: src/main/resources/static/assets/vendor/jquery-easyui-1.9.7/demo-mobile/simplelist/group.html ================================================ Group List - jQuery EasyUI Mobile Demo
                          Detail
                          ================================================ FILE: src/main/resources/static/assets/vendor/jquery-easyui-1.9.7/demo-mobile/simplelist/image.html ================================================ List with Image - jQuery EasyUI Mobile Demo
                          List with Image
                          • modem
                            modulates an analog carrier signal to encode digital information.
                          • scanner
                            scans images, printed text, handwriting, or an object.
                          • pda
                            A personal digital assistant.
                          • tablet
                            one-piece mobile computer.
                          ================================================ FILE: src/main/resources/static/assets/vendor/jquery-easyui-1.9.7/demo-mobile/simplelist/link.html ================================================ Link List - jQuery EasyUI Mobile Demo
                          Detail
                          ================================================ FILE: src/main/resources/static/assets/vendor/jquery-easyui-1.9.7/demo-mobile/tabs/basic.html ================================================ Basic Tabs - jQuery EasyUI Mobile Demo

                          Java is a general-purpose, concurrent, class-based, object-oriented computer programming language that is specifically designed to have as few implementation dependencies as possible.

                          Java applications are typically compiled to bytecode (class file) that can run on any Java virtual machine (JVM) regardless of computer architecture.

                          Fortran (previously FORTRAN) is a general-purpose, imperative programming language that is especially suited to numeric computation and scientific computing. Originally developed by IBM at their campus in south San Jose, California[1] in the 1950s for scientific and engineering applications.

                          Perl is a family of high-level, general-purpose, interpreted, dynamic programming languages. The languages in this family include Perl 5 and Perl 6.

                          Though Perl is not officially an acronym, there are various backronyms in use, such as: Practical Extraction and Reporting Language. Perl was originally developed by Larry Wall in 1987 as a general-purpose Unix scripting language to make report processing easier. Since then, it has undergone many changes and revisions.

                          ================================================ FILE: src/main/resources/static/assets/vendor/jquery-easyui-1.9.7/demo-mobile/tabs/nav.html ================================================ Navigation Tabs - jQuery EasyUI Mobile Demo
                          Devices

                          Modem

                          A modem (modulator-demodulator) is a device that modulates an analog carrier signal to encode digital information, and also demodulates such a carrier signal to decode the transmitted information.


                          Scanner

                          In computing, an image scanner—often abbreviated to just scanner—is a device that optically scans images, printed text, handwriting, or an object, and converts it to a digital image.


                          Pda

                          A personal digital assistant (PDA), also known as a palmtop computer, or personal data assistant, is a mobile device that functions as a personal information manager. PDAs are largely considered obsolete with the widespread adoption of smartphones.


                          Pda

                          A tablet computer, or simply tablet, is a one-piece mobile computer. Devices typically have a touchscreen, with finger or stylus gestures replacing the conventional computer mouse.

                          ================================================ FILE: src/main/resources/static/assets/vendor/jquery-easyui-1.9.7/demo-mobile/tabs/pill.html ================================================ Pill Tabs - jQuery EasyUI Mobile Demo

                          Java is a general-purpose, concurrent, class-based, object-oriented computer programming language that is specifically designed to have as few implementation dependencies as possible.

                          Java applications are typically compiled to bytecode (class file) that can run on any Java virtual machine (JVM) regardless of computer architecture.

                          Fortran (previously FORTRAN) is a general-purpose, imperative programming language that is especially suited to numeric computation and scientific computing. Originally developed by IBM at their campus in south San Jose, California[1] in the 1950s for scientific and engineering applications.

                          Perl is a family of high-level, general-purpose, interpreted, dynamic programming languages. The languages in this family include Perl 5 and Perl 6.

                          Though Perl is not officially an acronym, there are various backronyms in use, such as: Practical Extraction and Reporting Language. Perl was originally developed by Larry Wall in 1987 as a general-purpose Unix scripting language to make report processing easier. Since then, it has undergone many changes and revisions.

                          ================================================ FILE: src/main/resources/static/assets/vendor/jquery-easyui-1.9.7/demo-mobile/toolbar/basic.html ================================================ Basic Toolbar - jQuery EasyUI Mobile Demo
                          Basic Toolbar
                          • Large
                          • Spotted Adult Female
                          • Venomless
                          • Rattleless
                          • Green Adult
                          • Tailless
                          • With tail
                          • Adult Female
                          Detail
                          ================================================ FILE: src/main/resources/static/assets/vendor/jquery-easyui-1.9.7/demo-mobile/toolbar/button.html ================================================ Toolbar Button - jQuery EasyUI Mobile Demo
                          Toolbar Button
                          • Large
                          • Spotted Adult Female
                          • Venomless
                          • Rattleless
                          • Green Adult
                          • Tailless
                          • With tail
                          • Adult Female
                          ================================================ FILE: src/main/resources/static/assets/vendor/jquery-easyui-1.9.7/demo-mobile/toolbar/menu.html ================================================ Menu on Toolbar - jQuery EasyUI Mobile Demo
                          Menu on Toolbar
                          Undo
                          Redo
                          Cut
                          Copy
                          Paste
                          Toolbar
                          Delete
                          Select All
                          • Large
                          • Spotted Adult Female
                          • Venomless
                          • Rattleless
                          • Green Adult
                          • Tailless
                          • With tail
                          • Adult Female
                          Detail
                          ================================================ FILE: src/main/resources/static/assets/vendor/jquery-easyui-1.9.7/demo-mobile/tree/basic.html ================================================ Basic Tree - jQuery EasyUI Mobile Demo
                          Basic Tree
                          • My Documents
                            • Photos
                              • Friend
                              • Wife
                              • Company
                            • Program Files
                              • Intel
                              • Java
                              • Microsoft Office
                              • Games
                            • index.html
                            • about.html
                            • welcome.html
                          ================================================ FILE: src/main/resources/static/assets/vendor/jquery-easyui-1.9.7/demo-mobile/tree/dnd.html ================================================ Drag Drop Tree Nodes - jQuery EasyUI Mobile Demo
                          Drag Drop Tree Nodes
                          • My Documents
                            • Photos
                              • Friend
                              • Wife
                              • Company
                            • Program Files
                              • Intel
                              • Java
                              • Microsoft Office
                              • Games
                            • index.html
                            • about.html
                            • welcome.html
                          ================================================ FILE: src/main/resources/static/assets/vendor/jquery-easyui-1.9.7/easyloader.js ================================================ /** * EasyUI for jQuery 1.9.7 * * Copyright (c) 2009-2020 www.jeasyui.com. All rights reserved. * * Licensed under the freeware license: http://www.jeasyui.com/license_freeware.php * To use it on other terms please contact us: info@jeasyui.com * */ (function(){ var _1={draggable:{js:"jquery.draggable.js"},droppable:{js:"jquery.droppable.js"},resizable:{js:"jquery.resizable.js"},linkbutton:{js:"jquery.linkbutton.js",css:"linkbutton.css"},progressbar:{js:"jquery.progressbar.js",css:"progressbar.css"},tooltip:{js:"jquery.tooltip.js",css:"tooltip.css"},pagination:{js:"jquery.pagination.js",css:"pagination.css",dependencies:["linkbutton"]},datagrid:{js:"jquery.datagrid.js",css:"datagrid.css",dependencies:["panel","resizable","linkbutton","pagination"]},treegrid:{js:"jquery.treegrid.js",css:"tree.css",dependencies:["datagrid"]},propertygrid:{js:"jquery.propertygrid.js",css:"propertygrid.css",dependencies:["datagrid"]},datalist:{js:"jquery.datalist.js",css:"datalist.css",dependencies:["datagrid"]},panel:{js:"jquery.panel.js",css:"panel.css"},window:{js:"jquery.window.js",css:"window.css",dependencies:["resizable","draggable","panel"]},dialog:{js:"jquery.dialog.js",css:"dialog.css",dependencies:["linkbutton","window"]},messager:{js:"jquery.messager.js",css:"messager.css",dependencies:["linkbutton","dialog","progressbar"]},layout:{js:"jquery.layout.js",css:"layout.css",dependencies:["resizable","panel"]},form:{js:"jquery.form.js"},menu:{js:"jquery.menu.js",css:"menu.css"},tabs:{js:"jquery.tabs.js",css:"tabs.css",dependencies:["panel","linkbutton"]},menubutton:{js:"jquery.menubutton.js",css:"menubutton.css",dependencies:["linkbutton","menu"]},splitbutton:{js:"jquery.splitbutton.js",css:"splitbutton.css",dependencies:["menubutton"]},switchbutton:{js:"jquery.switchbutton.js",css:"switchbutton.css"},accordion:{js:"jquery.accordion.js",css:"accordion.css",dependencies:["panel"]},calendar:{js:"jquery.calendar.js",css:"calendar.css"},textbox:{js:"jquery.textbox.js",css:"textbox.css",dependencies:["validatebox","linkbutton"]},passwordbox:{js:"jquery.passwordbox.js",css:"passwordbox.css",dependencies:["textbox"]},filebox:{js:"jquery.filebox.js",css:"filebox.css",dependencies:["textbox"]},radiobutton:{js:"jquery.radiobutton.js",css:"radiobutton.css"},checkbox:{js:"jquery.checkbox.js",css:"checkbox.css"},sidemenu:{js:"jquery.sidemenu.js",css:"sidemenu.css",dependencies:["accordion","tree","tooltip"]},combo:{js:"jquery.combo.js",css:"combo.css",dependencies:["panel","textbox"]},combobox:{js:"jquery.combobox.js",css:"combobox.css",dependencies:["combo"]},combotree:{js:"jquery.combotree.js",dependencies:["combo","tree"]},combogrid:{js:"jquery.combogrid.js",dependencies:["combo","datagrid"]},combotreegrid:{js:"jquery.combotreegrid.js",dependencies:["combo","treegrid"]},tagbox:{js:"jquery.tagbox.js",dependencies:["combobox"]},validatebox:{js:"jquery.validatebox.js",css:"validatebox.css",dependencies:["tooltip"]},numberbox:{js:"jquery.numberbox.js",dependencies:["textbox"]},searchbox:{js:"jquery.searchbox.js",css:"searchbox.css",dependencies:["menubutton","textbox"]},spinner:{js:"jquery.spinner.js",css:"spinner.css",dependencies:["textbox"]},numberspinner:{js:"jquery.numberspinner.js",dependencies:["spinner","numberbox"]},timespinner:{js:"jquery.timespinner.js",dependencies:["spinner"]},timepicker:{js:"jquery.timepicker.js",css:"timepicker.css",dependencies:["combo"]},tree:{js:"jquery.tree.js",css:"tree.css",dependencies:["draggable","droppable"]},datebox:{js:"jquery.datebox.js",css:"datebox.css",dependencies:["calendar","combo"]},datetimebox:{js:"jquery.datetimebox.js",dependencies:["datebox","timespinner"]},slider:{js:"jquery.slider.js",dependencies:["draggable"]},parser:{js:"jquery.parser.js",css:"flex.css"},mobile:{js:"jquery.mobile.js"}}; var _2={"af":"easyui-lang-af.js","ar":"easyui-lang-ar.js","bg":"easyui-lang-bg.js","ca":"easyui-lang-ca.js","cs":"easyui-lang-cs.js","cz":"easyui-lang-cz.js","da":"easyui-lang-da.js","de":"easyui-lang-de.js","el":"easyui-lang-el.js","en":"easyui-lang-en.js","es":"easyui-lang-es.js","fr":"easyui-lang-fr.js","it":"easyui-lang-it.js","jp":"easyui-lang-jp.js","nl":"easyui-lang-nl.js","pl":"easyui-lang-pl.js","pt_BR":"easyui-lang-pt_BR.js","ru":"easyui-lang-ru.js","sv_SE":"easyui-lang-sv_SE.js","tr":"easyui-lang-tr.js","zh_CN":"easyui-lang-zh_CN.js","zh_TW":"easyui-lang-zh_TW.js"}; var _3={}; function _4(_5,_6){ var _7=false; var _8=document.createElement("script"); _8.type="text/javascript"; _8.language="javascript"; _8.src=_5; _8.onload=_8.onreadystatechange=function(){ if(!_7&&(!_8.readyState||_8.readyState=="loaded"||_8.readyState=="complete")){ _7=true; _8.onload=_8.onreadystatechange=null; if(_6){ _6.call(_8); } } }; document.getElementsByTagName("head")[0].appendChild(_8); }; function _9(_a,_b){ _4(_a,function(){ document.getElementsByTagName("head")[0].removeChild(this); if(_b){ _b(); } }); }; function _c(_d,_e){ var _f=document.createElement("link"); _f.rel="stylesheet"; _f.type="text/css"; _f.media="screen"; _f.href=_d; document.getElementsByTagName("head")[0].appendChild(_f); if(_e){ _e.call(_f); } }; function _10(_11,_12){ _3[_11]="loading"; var _13=_1[_11]; var _14="loading"; var _15=(easyloader.css&&_13["css"])?"loading":"loaded"; if(easyloader.css&&_13["css"]){ if(/^http/i.test(_13["css"])){ var url=_13["css"]; }else{ var url=easyloader.base+"themes/"+easyloader.theme+"/"+_13["css"]; } _c(url,function(){ _15="loaded"; if(_14=="loaded"&&_15=="loaded"){ _16(); } }); } if(/^http/i.test(_13["js"])){ var url=_13["js"]; }else{ var url=easyloader.base+"plugins/"+_13["js"]; } _4(url,function(){ _14="loaded"; if(_14=="loaded"&&_15=="loaded"){ _16(); } }); function _16(){ _3[_11]="loaded"; easyloader.onProgress(_11); if(_12){ _12(); } }; }; function _17(_18,_19){ var mm=[]; var _1a=false; if(typeof _18=="string"){ add(_18); }else{ for(var i=0;i<_18.length;i++){ add(_18[i]); } } mm.unshift("parser"); function add(_1b){ if(!_1[_1b]){ return; } var d=_1[_1b]["dependencies"]; if(d){ for(var i=0;i=0;i--){ _9.unshift(_a.children[i]); } } } }}; $.parser={auto:true,emptyFn:function(){ },onComplete:function(_b){ },plugins:["draggable","droppable","resizable","pagination","tooltip","linkbutton","menu","sidemenu","menubutton","splitbutton","switchbutton","progressbar","radiobutton","checkbox","tree","textbox","passwordbox","maskedbox","filebox","combo","combobox","combotree","combogrid","combotreegrid","tagbox","numberbox","validatebox","searchbox","spinner","numberspinner","timespinner","datetimespinner","calendar","datebox","datetimebox","timepicker","slider","layout","panel","datagrid","propertygrid","treegrid","datalist","tabs","accordion","window","dialog","form"],parse:function(_c){ var aa=[]; for(var i=0;i<$.parser.plugins.length;i++){ var _d=$.parser.plugins[i]; var r=$(".easyui-"+_d,_c); if(r.length){ if(r[_d]){ r.each(function(){ $(this)[_d]($.data(this,"options")||{}); }); }else{ aa.push({name:_d,jq:r}); } } } if(aa.length&&window.easyloader){ var _e=[]; for(var i=0;i=0){ _13+=_12[0].offsetWidth-_12[0].clientWidth; v=Math.floor((_12.width()-_13)*v/100); }else{ _13+=_12[0].offsetHeight-_12[0].clientHeight; v=Math.floor((_12.height()-_13)*v/100); } }else{ v=parseInt(v)||undefined; } return v; },parseOptions:function(_15,_16){ var t=$(_15); var _17={}; var s=$.trim(t.attr("data-options")); if(s){ if(s.substring(0,1)!="{"){ s="{"+s+"}"; } _17=(new Function("return "+s))(); } $.map(["width","height","left","top","minWidth","maxWidth","minHeight","maxHeight"],function(p){ var pv=$.trim(_15.style[p]||""); if(pv){ if(pv.indexOf("%")==-1){ pv=parseInt(pv); if(isNaN(pv)){ pv=undefined; } } _17[p]=pv; } }); if(_16){ var _18={}; for(var i=0;i<_16.length;i++){ var pp=_16[i]; if(typeof pp=="string"){ _18[pp]=t.attr(pp); }else{ for(var _19 in pp){ var _1a=pp[_19]; if(_1a=="boolean"){ _18[_19]=t.attr(_19)?(t.attr(_19)=="true"):undefined; }else{ if(_1a=="number"){ _18[_19]=t.attr(_19)=="0"?0:parseFloat(t.attr(_19))||undefined; } } } } } $.extend(_17,_18); } return _17; },parseVars:function(){ var d=$("
                          ").appendTo("body"); $._boxModel=d.outerWidth()!=100; d.remove(); d=$("
                          ").appendTo("body"); $._positionFixed=(d.css("position")=="fixed"); d.remove(); }}; $(function(){ $.parser.parseVars(); if(!window.easyloader&&$.parser.auto){ $.parser.parse(); } }); $.fn._outerWidth=function(_1b){ if(_1b==undefined){ if(this[0]==window){ return this.width()||document.body.clientWidth; } return this.outerWidth()||0; } return this._size("width",_1b); }; $.fn._outerHeight=function(_1c){ if(_1c==undefined){ if(this[0]==window){ return this.height()||document.body.clientHeight; } return this.outerHeight()||0; } return this._size("height",_1c); }; $.fn._scrollLeft=function(_1d){ if(_1d==undefined){ return this.scrollLeft(); }else{ return this.each(function(){ $(this).scrollLeft(_1d); }); } }; $.fn._propAttr=$.fn.prop||$.fn.attr; $.fn._bind=$.fn.on; $.fn._unbind=$.fn.off; $.fn._size=function(_1e,_1f){ if(typeof _1e=="string"){ if(_1e=="clear"){ return this.each(function(){ $(this).css({width:"",minWidth:"",maxWidth:"",height:"",minHeight:"",maxHeight:""}); }); }else{ if(_1e=="fit"){ return this.each(function(){ _20(this,this.tagName=="BODY"?$("body"):$(this).parent(),true); }); }else{ if(_1e=="unfit"){ return this.each(function(){ _20(this,$(this).parent(),false); }); }else{ if(_1f==undefined){ return _21(this[0],_1e); }else{ return this.each(function(){ _21(this,_1e,_1f); }); } } } } }else{ return this.each(function(){ _1f=_1f||$(this).parent(); $.extend(_1e,_20(this,_1f,_1e.fit)||{}); var r1=_22(this,"width",_1f,_1e); var r2=_22(this,"height",_1f,_1e); if(r1||r2){ $(this).addClass("easyui-fluid"); }else{ $(this).removeClass("easyui-fluid"); } }); } function _20(_23,_24,fit){ if(!_24.length){ return false; } var t=$(_23)[0]; var p=_24[0]; var _25=p.fcount||0; if(fit){ if(!t.fitted){ t.fitted=true; p.fcount=_25+1; $(p).addClass("panel-noscroll"); if(p.tagName=="BODY"){ $("html").addClass("panel-fit"); } } return {width:($(p).width()||1),height:($(p).height()||1)}; }else{ if(t.fitted){ t.fitted=false; p.fcount=_25-1; if(p.fcount==0){ $(p).removeClass("panel-noscroll"); if(p.tagName=="BODY"){ $("html").removeClass("panel-fit"); } } } return false; } }; function _22(_26,_27,_28,_29){ var t=$(_26); var p=_27; var p1=p.substr(0,1).toUpperCase()+p.substr(1); var min=$.parser.parseValue("min"+p1,_29["min"+p1],_28); var max=$.parser.parseValue("max"+p1,_29["max"+p1],_28); var val=$.parser.parseValue(p,_29[p],_28); var _2a=(String(_29[p]||"").indexOf("%")>=0?true:false); if(!isNaN(val)){ var v=Math.min(Math.max(val,min||0),max||99999); if(!_2a){ _29[p]=v; } t._size("min"+p1,""); t._size("max"+p1,""); t._size(p,v); }else{ t._size(p,""); t._size("min"+p1,min); t._size("max"+p1,max); } return _2a||_29.fit; }; function _21(_2b,_2c,_2d){ var t=$(_2b); if(_2d==undefined){ _2d=parseInt(_2b.style[_2c]); if(isNaN(_2d)){ return undefined; } if($._boxModel){ _2d+=_2e(); } return _2d; }else{ if(_2d===""){ t.css(_2c,""); }else{ if($._boxModel){ _2d-=_2e(); if(_2d<0){ _2d=0; } } t.css(_2c,_2d+"px"); } } function _2e(){ if(_2c.toLowerCase().indexOf("width")>=0){ return t.outerWidth()-t.width(); }else{ return t.outerHeight()-t.height(); } }; }; }; })(jQuery); (function($){ var _2f=null; var _30=null; var _31=false; function _32(e){ if(e.touches.length!=1){ return; } if(!_31){ _31=true; dblClickTimer=setTimeout(function(){ _31=false; },500); }else{ clearTimeout(dblClickTimer); _31=false; _33(e,"dblclick"); } _2f=setTimeout(function(){ _33(e,"contextmenu",3); },1000); _33(e,"mousedown"); if($.fn.draggable.isDragging||$.fn.resizable.isResizing){ e.preventDefault(); } }; function _34(e){ if(e.touches.length!=1){ return; } if(_2f){ clearTimeout(_2f); } _33(e,"mousemove"); if($.fn.draggable.isDragging||$.fn.resizable.isResizing){ e.preventDefault(); } }; function _35(e){ if(_2f){ clearTimeout(_2f); } _33(e,"mouseup"); if($.fn.draggable.isDragging||$.fn.resizable.isResizing){ e.preventDefault(); } }; function _33(e,_36,_37){ var _38=new $.Event(_36); _38.pageX=e.changedTouches[0].pageX; _38.pageY=e.changedTouches[0].pageY; _38.which=_37||1; $(e.target).trigger(_38); }; if(document.addEventListener){ document.addEventListener("touchstart",_32,true); document.addEventListener("touchmove",_34,true); document.addEventListener("touchend",_35,true); } })(jQuery); (function($){ function _39(e){ var _3a=$.data(e.data.target,"draggable"); var _3b=_3a.options; var _3c=_3a.proxy; var _3d=e.data; var _3e=_3d.startLeft+e.pageX-_3d.startX; var top=_3d.startTop+e.pageY-_3d.startY; if(_3c){ if(_3c.parent()[0]==document.body){ if(_3b.deltaX!=null&&_3b.deltaX!=undefined){ _3e=e.pageX+_3b.deltaX; }else{ _3e=e.pageX-e.data.offsetWidth; } if(_3b.deltaY!=null&&_3b.deltaY!=undefined){ top=e.pageY+_3b.deltaY; }else{ top=e.pageY-e.data.offsetHeight; } }else{ if(_3b.deltaX!=null&&_3b.deltaX!=undefined){ _3e+=e.data.offsetWidth+_3b.deltaX; } if(_3b.deltaY!=null&&_3b.deltaY!=undefined){ top+=e.data.offsetHeight+_3b.deltaY; } } } if(e.data.parent!=document.body){ _3e+=$(e.data.parent).scrollLeft(); top+=$(e.data.parent).scrollTop(); } if(_3b.axis=="h"){ _3d.left=_3e; }else{ if(_3b.axis=="v"){ _3d.top=top; }else{ _3d.left=_3e; _3d.top=top; } } }; function _3f(e){ var _40=$.data(e.data.target,"draggable"); var _41=_40.options; var _42=_40.proxy; if(!_42){ _42=$(e.data.target); } _42.css({left:e.data.left,top:e.data.top}); $("body").css("cursor",_41.cursor); }; function _43(e){ if(!$.fn.draggable.isDragging){ return false; } var _44=$.data(e.data.target,"draggable"); var _45=_44.options; var _46=$(".droppable:visible").filter(function(){ return e.data.target!=this; }).filter(function(){ var _47=$.data(this,"droppable").options.accept; if(_47){ return $(_47).filter(function(){ return this==e.data.target; }).length>0; }else{ return true; } }); _44.droppables=_46; var _48=_44.proxy; if(!_48){ if(_45.proxy){ if(_45.proxy=="clone"){ _48=$(e.data.target).clone().insertAfter(e.data.target); }else{ _48=_45.proxy.call(e.data.target,e.data.target); } _44.proxy=_48; }else{ _48=$(e.data.target); } } _48.css("position","absolute"); _39(e); _3f(e); _45.onStartDrag.call(e.data.target,e); return false; }; function _49(e){ if(!$.fn.draggable.isDragging){ return false; } var _4a=$.data(e.data.target,"draggable"); _39(e); if(_4a.options.onDrag.call(e.data.target,e)!=false){ _3f(e); } var _4b=e.data.target; _4a.droppables.each(function(){ var _4c=$(this); if(_4c.droppable("options").disabled){ return; } var p2=_4c.offset(); if(e.pageX>p2.left&&e.pageXp2.top&&e.pageYp2.left&&e.pageXp2.top&&e.pageY_62.options.edge; }; }); }; $.fn.draggable.methods={options:function(jq){ return $.data(jq[0],"draggable").options; },proxy:function(jq){ return $.data(jq[0],"draggable").proxy; },enable:function(jq){ return jq.each(function(){ $(this).draggable({disabled:false}); }); },disable:function(jq){ return jq.each(function(){ $(this).draggable({disabled:true}); }); }}; $.fn.draggable.parseOptions=function(_67){ var t=$(_67); return $.extend({},$.parser.parseOptions(_67,["cursor","handle","axis",{"revert":"boolean","deltaX":"number","deltaY":"number","edge":"number","delay":"number"}]),{disabled:(t.attr("disabled")?true:undefined)}); }; $.fn.draggable.defaults={proxy:null,revert:false,cursor:"move",deltaX:null,deltaY:null,handle:null,disabled:false,edge:0,axis:null,delay:100,onBeforeDrag:function(e){ },onStartDrag:function(e){ },onDrag:function(e){ },onEndDrag:function(e){ },onStopDrag:function(e){ }}; $.fn.draggable.isDragging=false; })(jQuery); (function($){ function _68(_69){ $(_69).addClass("droppable"); $(_69)._bind("_dragenter",function(e,_6a){ $.data(_69,"droppable").options.onDragEnter.apply(_69,[e,_6a]); }); $(_69)._bind("_dragleave",function(e,_6b){ $.data(_69,"droppable").options.onDragLeave.apply(_69,[e,_6b]); }); $(_69)._bind("_dragover",function(e,_6c){ $.data(_69,"droppable").options.onDragOver.apply(_69,[e,_6c]); }); $(_69)._bind("_drop",function(e,_6d){ $.data(_69,"droppable").options.onDrop.apply(_69,[e,_6d]); }); }; $.fn.droppable=function(_6e,_6f){ if(typeof _6e=="string"){ return $.fn.droppable.methods[_6e](this,_6f); } _6e=_6e||{}; return this.each(function(){ var _70=$.data(this,"droppable"); if(_70){ $.extend(_70.options,_6e); }else{ _68(this); $.data(this,"droppable",{options:$.extend({},$.fn.droppable.defaults,$.fn.droppable.parseOptions(this),_6e)}); } }); }; $.fn.droppable.methods={options:function(jq){ return $.data(jq[0],"droppable").options; },enable:function(jq){ return jq.each(function(){ $(this).droppable({disabled:false}); }); },disable:function(jq){ return jq.each(function(){ $(this).droppable({disabled:true}); }); }}; $.fn.droppable.parseOptions=function(_71){ var t=$(_71); return $.extend({},$.parser.parseOptions(_71,["accept"]),{disabled:(t.attr("disabled")?true:undefined)}); }; $.fn.droppable.defaults={accept:null,disabled:false,onDragEnter:function(e,_72){ },onDragOver:function(e,_73){ },onDragLeave:function(e,_74){ },onDrop:function(e,_75){ }}; })(jQuery); (function($){ function _76(e){ var _77=e.data; var _78=$.data(_77.target,"resizable").options; if(_77.dir.indexOf("e")!=-1){ var _79=_77.startWidth+e.pageX-_77.startX; _79=Math.min(Math.max(_79,_78.minWidth),_78.maxWidth); _77.width=_79; } if(_77.dir.indexOf("s")!=-1){ var _7a=_77.startHeight+e.pageY-_77.startY; _7a=Math.min(Math.max(_7a,_78.minHeight),_78.maxHeight); _77.height=_7a; } if(_77.dir.indexOf("w")!=-1){ var _79=_77.startWidth-e.pageX+_77.startX; _79=Math.min(Math.max(_79,_78.minWidth),_78.maxWidth); _77.width=_79; _77.left=_77.startLeft+_77.startWidth-_77.width; } if(_77.dir.indexOf("n")!=-1){ var _7a=_77.startHeight-e.pageY+_77.startY; _7a=Math.min(Math.max(_7a,_78.minHeight),_78.maxHeight); _77.height=_7a; _77.top=_77.startTop+_77.startHeight-_77.height; } }; function _7b(e){ var _7c=e.data; var t=$(_7c.target); t.css({left:_7c.left,top:_7c.top}); if(t.outerWidth()!=_7c.width){ t._outerWidth(_7c.width); } if(t.outerHeight()!=_7c.height){ t._outerHeight(_7c.height); } }; function _7d(e){ $.fn.resizable.isResizing=true; $.data(e.data.target,"resizable").options.onStartResize.call(e.data.target,e); return false; }; function _7e(e){ _76(e); if($.data(e.data.target,"resizable").options.onResize.call(e.data.target,e)!=false){ _7b(e); } return false; }; function _7f(e){ $.fn.resizable.isResizing=false; _76(e,true); _7b(e); $.data(e.data.target,"resizable").options.onStopResize.call(e.data.target,e); $(document)._unbind(".resizable"); $("body").css("cursor",""); return false; }; function _80(e){ var _81=$(e.data.target).resizable("options"); var tt=$(e.data.target); var dir=""; var _82=tt.offset(); var _83=tt.outerWidth(); var _84=tt.outerHeight(); var _85=_81.edge; if(e.pageY>_82.top&&e.pageY<_82.top+_85){ dir+="n"; }else{ if(e.pageY<_82.top+_84&&e.pageY>_82.top+_84-_85){ dir+="s"; } } if(e.pageX>_82.left&&e.pageX<_82.left+_85){ dir+="w"; }else{ if(e.pageX<_82.left+_83&&e.pageX>_82.left+_83-_85){ dir+="e"; } } var _86=_81.handles.split(","); _86=$.map(_86,function(h){ return $.trim(h).toLowerCase(); }); if($.inArray("all",_86)>=0||$.inArray(dir,_86)>=0){ return dir; } for(var i=0;i=0){ return _86[_87]; } } return ""; }; $.fn.resizable=function(_88,_89){ if(typeof _88=="string"){ return $.fn.resizable.methods[_88](this,_89); } return this.each(function(){ var _8a=null; var _8b=$.data(this,"resizable"); if(_8b){ $(this)._unbind(".resizable"); _8a=$.extend(_8b.options,_88||{}); }else{ _8a=$.extend({},$.fn.resizable.defaults,$.fn.resizable.parseOptions(this),_88||{}); $.data(this,"resizable",{options:_8a}); } if(_8a.disabled==true){ return; } $(this)._bind("mousemove.resizable",{target:this},function(e){ if($.fn.resizable.isResizing){ return; } var dir=_80(e); $(e.data.target).css("cursor",dir?dir+"-resize":""); })._bind("mouseleave.resizable",{target:this},function(e){ $(e.data.target).css("cursor",""); })._bind("mousedown.resizable",{target:this},function(e){ var dir=_80(e); if(dir==""){ return; } function _8c(css){ var val=parseInt($(e.data.target).css(css)); if(isNaN(val)){ return 0; }else{ return val; } }; var _8d={target:e.data.target,dir:dir,startLeft:_8c("left"),startTop:_8c("top"),left:_8c("left"),top:_8c("top"),startX:e.pageX,startY:e.pageY,startWidth:$(e.data.target).outerWidth(),startHeight:$(e.data.target).outerHeight(),width:$(e.data.target).outerWidth(),height:$(e.data.target).outerHeight(),deltaWidth:$(e.data.target).outerWidth()-$(e.data.target).width(),deltaHeight:$(e.data.target).outerHeight()-$(e.data.target).height()}; $(document)._bind("mousedown.resizable",_8d,_7d); $(document)._bind("mousemove.resizable",_8d,_7e); $(document)._bind("mouseup.resizable",_8d,_7f); $("body").css("cursor",dir+"-resize"); }); }); }; $.fn.resizable.methods={options:function(jq){ return $.data(jq[0],"resizable").options; },enable:function(jq){ return jq.each(function(){ $(this).resizable({disabled:false}); }); },disable:function(jq){ return jq.each(function(){ $(this).resizable({disabled:true}); }); }}; $.fn.resizable.parseOptions=function(_8e){ var t=$(_8e); return $.extend({},$.parser.parseOptions(_8e,["handles",{minWidth:"number",minHeight:"number",maxWidth:"number",maxHeight:"number",edge:"number"}]),{disabled:(t.attr("disabled")?true:undefined)}); }; $.fn.resizable.defaults={disabled:false,handles:"n, e, s, w, ne, se, sw, nw, all",minWidth:10,minHeight:10,maxWidth:10000,maxHeight:10000,edge:5,onStartResize:function(e){ },onResize:function(e){ },onStopResize:function(e){ }}; $.fn.resizable.isResizing=false; })(jQuery); (function($){ function _8f(_90,_91){ var _92=$.data(_90,"linkbutton").options; if(_91){ $.extend(_92,_91); } if(_92.width||_92.height||_92.fit){ var btn=$(_90); var _93=btn.parent(); var _94=btn.is(":visible"); if(!_94){ var _95=$("
                          ").insertBefore(_90); var _96={position:btn.css("position"),display:btn.css("display"),left:btn.css("left")}; btn.appendTo("body"); btn.css({position:"absolute",display:"inline-block",left:-20000}); } btn._size(_92,_93); var _97=btn.find(".l-btn-left"); _97.css("margin-top",0); _97.css("margin-top",parseInt((btn.height()-_97.height())/2)+"px"); if(!_94){ btn.insertAfter(_95); btn.css(_96); _95.remove(); } } }; function _98(_99){ var _9a=$.data(_99,"linkbutton").options; var t=$(_99).empty(); t.addClass("l-btn").removeClass("l-btn-plain l-btn-selected l-btn-plain-selected l-btn-outline"); t.removeClass("l-btn-small l-btn-medium l-btn-large").addClass("l-btn-"+_9a.size); if(_9a.plain){ t.addClass("l-btn-plain"); } if(_9a.outline){ t.addClass("l-btn-outline"); } if(_9a.selected){ t.addClass(_9a.plain?"l-btn-selected l-btn-plain-selected":"l-btn-selected"); } t.attr("group",_9a.group||""); t.attr("id",_9a.id||""); var _9b=$("").appendTo(t); if(_9a.text){ $("").html(_9a.text).appendTo(_9b); }else{ $(" ").appendTo(_9b); } if(_9a.iconCls){ $(" ").addClass(_9a.iconCls).appendTo(_9b); _9b.addClass("l-btn-icon-"+_9a.iconAlign); } t._unbind(".linkbutton")._bind("focus.linkbutton",function(){ if(!_9a.disabled){ $(this).addClass("l-btn-focus"); } })._bind("blur.linkbutton",function(){ $(this).removeClass("l-btn-focus"); })._bind("click.linkbutton",function(){ if(!_9a.disabled){ if(_9a.toggle){ if(_9a.selected){ $(this).linkbutton("unselect"); }else{ $(this).linkbutton("select"); } } _9a.onClick.call(this); } }); _9c(_99,_9a.selected); _9d(_99,_9a.disabled); }; function _9c(_9e,_9f){ var _a0=$.data(_9e,"linkbutton").options; if(_9f){ if(_a0.group){ $("a.l-btn[group=\""+_a0.group+"\"]").each(function(){ var o=$(this).linkbutton("options"); if(o.toggle){ $(this).removeClass("l-btn-selected l-btn-plain-selected"); o.selected=false; } }); } $(_9e).addClass(_a0.plain?"l-btn-selected l-btn-plain-selected":"l-btn-selected"); _a0.selected=true; }else{ if(!_a0.group){ $(_9e).removeClass("l-btn-selected l-btn-plain-selected"); _a0.selected=false; } } }; function _9d(_a1,_a2){ var _a3=$.data(_a1,"linkbutton"); var _a4=_a3.options; $(_a1).removeClass("l-btn-disabled l-btn-plain-disabled"); if(_a2){ _a4.disabled=true; var _a5=$(_a1).attr("href"); if(_a5){ _a3.href=_a5; $(_a1).attr("href","javascript:;"); } if(_a1.onclick){ _a3.onclick=_a1.onclick; _a1.onclick=null; } _a4.plain?$(_a1).addClass("l-btn-disabled l-btn-plain-disabled"):$(_a1).addClass("l-btn-disabled"); }else{ _a4.disabled=false; if(_a3.href){ $(_a1).attr("href",_a3.href); } if(_a3.onclick){ _a1.onclick=_a3.onclick; } } $(_a1)._propAttr("disabled",_a2); }; $.fn.linkbutton=function(_a6,_a7){ if(typeof _a6=="string"){ return $.fn.linkbutton.methods[_a6](this,_a7); } _a6=_a6||{}; return this.each(function(){ var _a8=$.data(this,"linkbutton"); if(_a8){ $.extend(_a8.options,_a6); }else{ $.data(this,"linkbutton",{options:$.extend({},$.fn.linkbutton.defaults,$.fn.linkbutton.parseOptions(this),_a6)}); $(this)._propAttr("disabled",false); $(this)._bind("_resize",function(e,_a9){ if($(this).hasClass("easyui-fluid")||_a9){ _8f(this); } return false; }); } _98(this); _8f(this); }); }; $.fn.linkbutton.methods={options:function(jq){ return $.data(jq[0],"linkbutton").options; },resize:function(jq,_aa){ return jq.each(function(){ _8f(this,_aa); }); },enable:function(jq){ return jq.each(function(){ _9d(this,false); }); },disable:function(jq){ return jq.each(function(){ _9d(this,true); }); },select:function(jq){ return jq.each(function(){ _9c(this,true); }); },unselect:function(jq){ return jq.each(function(){ _9c(this,false); }); }}; $.fn.linkbutton.parseOptions=function(_ab){ var t=$(_ab); return $.extend({},$.parser.parseOptions(_ab,["id","iconCls","iconAlign","group","size","text",{plain:"boolean",toggle:"boolean",selected:"boolean",outline:"boolean"}]),{disabled:(t.attr("disabled")?true:undefined),text:($.trim(t.html())||undefined),iconCls:(t.attr("icon")||t.attr("iconCls"))}); }; $.fn.linkbutton.defaults={id:null,disabled:false,toggle:false,selected:false,outline:false,group:null,plain:false,text:"",iconCls:null,iconAlign:"left",size:"small",onClick:function(){ }}; })(jQuery); (function($){ function _ac(_ad){ var _ae=$.data(_ad,"pagination"); var _af=_ae.options; var bb=_ae.bb={}; if(_af.buttons&&!$.isArray(_af.buttons)){ $(_af.buttons).insertAfter(_ad); } var _b0=$(_ad).addClass("pagination").html("
                          "); var tr=_b0.find("tr"); var aa=$.extend([],_af.layout); if(!_af.showPageList){ _b1(aa,"list"); } if(!_af.showPageInfo){ _b1(aa,"info"); } if(!_af.showRefresh){ _b1(aa,"refresh"); } if(aa[0]=="sep"){ aa.shift(); } if(aa[aa.length-1]=="sep"){ aa.pop(); } for(var _b2=0;_b2"); ps._bind("change",function(){ _af.pageSize=parseInt($(this).val()); _af.onChangePageSize.call(_ad,_af.pageSize); _b9(_ad,_af.pageNumber); }); for(var i=0;i<_af.pageList.length;i++){ $("").text(_af.pageList[i]).appendTo(ps); } $("").append(ps).appendTo(tr); }else{ if(_b3=="sep"){ $("
                          ").appendTo(tr); }else{ if(_b3=="first"){ bb.first=_b4("first"); }else{ if(_b3=="prev"){ bb.prev=_b4("prev"); }else{ if(_b3=="next"){ bb.next=_b4("next"); }else{ if(_b3=="last"){ bb.last=_b4("last"); }else{ if(_b3=="manual"){ $("").html(_af.beforePageText).appendTo(tr).wrap(""); bb.num=$("").appendTo(tr).wrap(""); bb.num._unbind(".pagination")._bind("keydown.pagination",function(e){ if(e.keyCode==13){ var _b5=parseInt($(this).val())||1; _b9(_ad,_b5); return false; } }); bb.after=$("").appendTo(tr).wrap(""); }else{ if(_b3=="refresh"){ bb.refresh=_b4("refresh"); }else{ if(_b3=="links"){ $("").appendTo(tr); }else{ if(_b3=="info"){ if(_b2==aa.length-1){ $("
                          ").appendTo(_b0); }else{ $("
                          ").appendTo(tr); } } } } } } } } } } } } if(_af.buttons){ $("
                          ").appendTo(tr); if($.isArray(_af.buttons)){ for(var i=0;i<_af.buttons.length;i++){ var btn=_af.buttons[i]; if(btn=="-"){ $("
                          ").appendTo(tr); }else{ var td=$("").appendTo(tr); var a=$("").appendTo(td); a[0].onclick=eval(btn.handler||function(){ }); a.linkbutton($.extend({},btn,{plain:true})); } } }else{ var td=$("").appendTo(tr); $(_af.buttons).appendTo(td).show(); } } $("
                          ").appendTo(_b0); function _b4(_b6){ var btn=_af.nav[_b6]; var a=$("").appendTo(tr); a.wrap(""); a.linkbutton({iconCls:btn.iconCls,plain:true})._unbind(".pagination")._bind("click.pagination",function(){ btn.handler.call(_ad); }); return a; }; function _b1(aa,_b7){ var _b8=$.inArray(_b7,aa); if(_b8>=0){ aa.splice(_b8,1); } return aa; }; }; function _b9(_ba,_bb){ var _bc=$.data(_ba,"pagination").options; if(_bc.onBeforeSelectPage.call(_ba,_bb,_bc.pageSize)==false){ _bd(_ba); return; } _bd(_ba,{pageNumber:_bb}); _bc.onSelectPage.call(_ba,_bc.pageNumber,_bc.pageSize); }; function _bd(_be,_bf){ var _c0=$.data(_be,"pagination"); var _c1=_c0.options; var bb=_c0.bb; $.extend(_c1,_bf||{}); var ps=$(_be).find("select.pagination-page-list"); if(ps.length){ ps.val(_c1.pageSize+""); _c1.pageSize=parseInt(ps.val()); } var _c2=Math.ceil(_c1.total/_c1.pageSize)||1; if(_c1.pageNumber<1){ _c1.pageNumber=1; } if(_c1.pageNumber>_c2){ _c1.pageNumber=_c2; } if(_c1.total==0){ _c1.pageNumber=0; _c2=0; } if(bb.num){ bb.num.val(_c1.pageNumber); } if(bb.after){ bb.after.html(_c1.afterPageText.replace(/{pages}/,_c2)); } var td=$(_be).find("td.pagination-links"); if(td.length){ td.empty(); var _c3=_c1.pageNumber-Math.floor(_c1.links/2); if(_c3<1){ _c3=1; } var _c4=_c3+_c1.links-1; if(_c4>_c2){ _c4=_c2; } _c3=_c4-_c1.links+1; if(_c3<1){ _c3=1; } for(var i=_c3;i<=_c4;i++){ var a=$("").appendTo(td); a.linkbutton({plain:true,text:i}); if(i==_c1.pageNumber){ a.linkbutton("select"); }else{ a._unbind(".pagination")._bind("click.pagination",{pageNumber:i},function(e){ _b9(_be,e.data.pageNumber); }); } } } var _c5=_c1.displayMsg; _c5=_c5.replace(/{from}/,_c1.total==0?0:_c1.pageSize*(_c1.pageNumber-1)+1); _c5=_c5.replace(/{to}/,Math.min(_c1.pageSize*(_c1.pageNumber),_c1.total)); _c5=_c5.replace(/{total}/,_c1.total); $(_be).find("div.pagination-info").html(_c5); if(bb.first){ bb.first.linkbutton({disabled:((!_c1.total)||_c1.pageNumber==1)}); } if(bb.prev){ bb.prev.linkbutton({disabled:((!_c1.total)||_c1.pageNumber==1)}); } if(bb.next){ bb.next.linkbutton({disabled:(_c1.pageNumber==_c2)}); } if(bb.last){ bb.last.linkbutton({disabled:(_c1.pageNumber==_c2)}); } _c6(_be,_c1.loading); }; function _c6(_c7,_c8){ var _c9=$.data(_c7,"pagination"); var _ca=_c9.options; _ca.loading=_c8; if(_ca.showRefresh&&_c9.bb.refresh){ _c9.bb.refresh.linkbutton({iconCls:(_ca.loading?"pagination-loading":"pagination-load")}); } }; $.fn.pagination=function(_cb,_cc){ if(typeof _cb=="string"){ return $.fn.pagination.methods[_cb](this,_cc); } _cb=_cb||{}; return this.each(function(){ var _cd; var _ce=$.data(this,"pagination"); if(_ce){ _cd=$.extend(_ce.options,_cb); }else{ _cd=$.extend({},$.fn.pagination.defaults,$.fn.pagination.parseOptions(this),_cb); $.data(this,"pagination",{options:_cd}); } _ac(this); _bd(this); }); }; $.fn.pagination.methods={options:function(jq){ return $.data(jq[0],"pagination").options; },loading:function(jq){ return jq.each(function(){ _c6(this,true); }); },loaded:function(jq){ return jq.each(function(){ _c6(this,false); }); },refresh:function(jq,_cf){ return jq.each(function(){ _bd(this,_cf); }); },select:function(jq,_d0){ return jq.each(function(){ _b9(this,_d0); }); }}; $.fn.pagination.parseOptions=function(_d1){ var t=$(_d1); return $.extend({},$.parser.parseOptions(_d1,[{total:"number",pageSize:"number",pageNumber:"number",links:"number"},{loading:"boolean",showPageList:"boolean",showPageInfo:"boolean",showRefresh:"boolean"}]),{pageList:(t.attr("pageList")?eval(t.attr("pageList")):undefined)}); }; $.fn.pagination.defaults={total:1,pageSize:10,pageNumber:1,pageList:[10,20,30,50],loading:false,buttons:null,showPageList:true,showPageInfo:true,showRefresh:true,links:10,layout:["list","sep","first","prev","sep","manual","sep","next","last","sep","refresh","info"],onBeforeSelectPage:function(_d2,_d3){ },onSelectPage:function(_d4,_d5){ },onBeforeRefresh:function(_d6,_d7){ },onRefresh:function(_d8,_d9){ },onChangePageSize:function(_da){ },beforePageText:"Page",afterPageText:"of {pages}",displayMsg:"Displaying {from} to {to} of {total} items",nav:{first:{iconCls:"pagination-first",handler:function(){ var _db=$(this).pagination("options"); if(_db.pageNumber>1){ $(this).pagination("select",1); } }},prev:{iconCls:"pagination-prev",handler:function(){ var _dc=$(this).pagination("options"); if(_dc.pageNumber>1){ $(this).pagination("select",_dc.pageNumber-1); } }},next:{iconCls:"pagination-next",handler:function(){ var _dd=$(this).pagination("options"); var _de=Math.ceil(_dd.total/_dd.pageSize); if(_dd.pageNumber<_de){ $(this).pagination("select",_dd.pageNumber+1); } }},last:{iconCls:"pagination-last",handler:function(){ var _df=$(this).pagination("options"); var _e0=Math.ceil(_df.total/_df.pageSize); if(_df.pageNumber<_e0){ $(this).pagination("select",_e0); } }},refresh:{iconCls:"pagination-refresh",handler:function(){ var _e1=$(this).pagination("options"); if(_e1.onBeforeRefresh.call(this,_e1.pageNumber,_e1.pageSize)!=false){ $(this).pagination("select",_e1.pageNumber); _e1.onRefresh.call(this,_e1.pageNumber,_e1.pageSize); } }}}}; })(jQuery); (function($){ function _e2(_e3){ var _e4=$(_e3); _e4.addClass("tree"); return _e4; }; function _e5(_e6){ var _e7=$.data(_e6,"tree").options; $(_e6)._unbind()._bind("mouseover",function(e){ var tt=$(e.target); var _e8=tt.closest("div.tree-node"); if(!_e8.length){ return; } _e8.addClass("tree-node-hover"); if(tt.hasClass("tree-hit")){ if(tt.hasClass("tree-expanded")){ tt.addClass("tree-expanded-hover"); }else{ tt.addClass("tree-collapsed-hover"); } } e.stopPropagation(); })._bind("mouseout",function(e){ var tt=$(e.target); var _e9=tt.closest("div.tree-node"); if(!_e9.length){ return; } _e9.removeClass("tree-node-hover"); if(tt.hasClass("tree-hit")){ if(tt.hasClass("tree-expanded")){ tt.removeClass("tree-expanded-hover"); }else{ tt.removeClass("tree-collapsed-hover"); } } e.stopPropagation(); })._bind("click",function(e){ var tt=$(e.target); var _ea=tt.closest("div.tree-node"); if(!_ea.length){ return; } if(tt.hasClass("tree-hit")){ _148(_e6,_ea[0]); return false; }else{ if(tt.hasClass("tree-checkbox")){ _10f(_e6,_ea[0]); return false; }else{ _18d(_e6,_ea[0]); _e7.onClick.call(_e6,_ed(_e6,_ea[0])); } } e.stopPropagation(); })._bind("dblclick",function(e){ var _eb=$(e.target).closest("div.tree-node"); if(!_eb.length){ return; } _18d(_e6,_eb[0]); _e7.onDblClick.call(_e6,_ed(_e6,_eb[0])); e.stopPropagation(); })._bind("contextmenu",function(e){ var _ec=$(e.target).closest("div.tree-node"); if(!_ec.length){ return; } _e7.onContextMenu.call(_e6,e,_ed(_e6,_ec[0])); e.stopPropagation(); }); }; function _ee(_ef){ var _f0=$.data(_ef,"tree").options; _f0.dnd=false; var _f1=$(_ef).find("div.tree-node"); _f1.draggable("disable"); _f1.css("cursor","pointer"); }; function _f2(_f3){ var _f4=$.data(_f3,"tree"); var _f5=_f4.options; var _f6=_f4.tree; _f4.disabledNodes=[]; _f5.dnd=true; _f6.find("div.tree-node").draggable({disabled:false,revert:true,cursor:"pointer",proxy:function(_f7){ var p=$("
                          ").appendTo("body"); p.html(" "+$(_f7).find(".tree-title").html()); p.hide(); return p; },deltaX:15,deltaY:15,onBeforeDrag:function(e){ if(_f5.onBeforeDrag.call(_f3,_ed(_f3,this))==false){ return false; } if($(e.target).hasClass("tree-hit")||$(e.target).hasClass("tree-checkbox")){ return false; } if(e.which!=1){ return false; } var _f8=$(this).find("span.tree-indent"); if(_f8.length){ e.data.offsetWidth-=_f8.length*_f8.width(); } },onStartDrag:function(e){ $(this).next("ul").find("div.tree-node").each(function(){ $(this).droppable("disable"); _f4.disabledNodes.push(this); }); $(this).draggable("proxy").css({left:-10000,top:-10000}); _f5.onStartDrag.call(_f3,_ed(_f3,this)); var _f9=_ed(_f3,this); if(_f9.id==undefined){ _f9.id="easyui_tree_node_id_temp"; _12f(_f3,_f9); } _f4.draggingNodeId=_f9.id; },onDrag:function(e){ var x1=e.pageX,y1=e.pageY,x2=e.data.startX,y2=e.data.startY; var d=Math.sqrt((x1-x2)*(x1-x2)+(y1-y2)*(y1-y2)); if(d>3){ $(this).draggable("proxy").show(); } this.pageY=e.pageY; },onStopDrag:function(){ for(var i=0;i<_f4.disabledNodes.length;i++){ $(_f4.disabledNodes[i]).droppable("enable"); } _f4.disabledNodes=[]; var _fa=_185(_f3,_f4.draggingNodeId); if(_fa&&_fa.id=="easyui_tree_node_id_temp"){ _fa.id=""; _12f(_f3,_fa); } _f5.onStopDrag.call(_f3,_fa); }}).droppable({accept:"div.tree-node",onDragEnter:function(e,_fb){ if(_f5.onDragEnter.call(_f3,this,_fc(_fb))==false){ _fd(_fb,false); $(this).removeClass("tree-node-append tree-node-top tree-node-bottom"); $(this).droppable("disable"); _f4.disabledNodes.push(this); } },onDragOver:function(e,_fe){ if($(this).droppable("options").disabled){ return; } var _ff=_fe.pageY; var top=$(this).offset().top; var _100=top+$(this).outerHeight(); _fd(_fe,true); $(this).removeClass("tree-node-append tree-node-top tree-node-bottom"); if(_ff>top+(_100-top)/2){ if(_100-_ff<5){ $(this).addClass("tree-node-bottom"); }else{ $(this).addClass("tree-node-append"); } }else{ if(_ff-top<5){ $(this).addClass("tree-node-top"); }else{ $(this).addClass("tree-node-append"); } } if(_f5.onDragOver.call(_f3,this,_fc(_fe))==false){ _fd(_fe,false); $(this).removeClass("tree-node-append tree-node-top tree-node-bottom"); $(this).droppable("disable"); _f4.disabledNodes.push(this); } },onDragLeave:function(e,_101){ _fd(_101,false); $(this).removeClass("tree-node-append tree-node-top tree-node-bottom"); _f5.onDragLeave.call(_f3,this,_fc(_101)); },onDrop:function(e,_102){ var dest=this; var _103,_104; if($(this).hasClass("tree-node-append")){ _103=_105; _104="append"; }else{ _103=_106; _104=$(this).hasClass("tree-node-top")?"top":"bottom"; } if(_f5.onBeforeDrop.call(_f3,dest,_fc(_102),_104)==false){ $(this).removeClass("tree-node-append tree-node-top tree-node-bottom"); return; } _103(_102,dest,_104); $(this).removeClass("tree-node-append tree-node-top tree-node-bottom"); }}); function _fc(_107,pop){ return $(_107).closest("ul.tree").tree(pop?"pop":"getData",_107); }; function _fd(_108,_109){ var icon=$(_108).draggable("proxy").find("span.tree-dnd-icon"); icon.removeClass("tree-dnd-yes tree-dnd-no").addClass(_109?"tree-dnd-yes":"tree-dnd-no"); }; function _105(_10a,dest){ if(_ed(_f3,dest).state=="closed"){ _140(_f3,dest,function(){ _10b(); }); }else{ _10b(); } function _10b(){ var node=_fc(_10a,true); $(_f3).tree("append",{parent:dest,data:[node]}); _f5.onDrop.call(_f3,dest,node,"append"); }; }; function _106(_10c,dest,_10d){ var _10e={}; if(_10d=="top"){ _10e.before=dest; }else{ _10e.after=dest; } var node=_fc(_10c,true); _10e.data=node; $(_f3).tree("insert",_10e); _f5.onDrop.call(_f3,dest,node,_10d); }; }; function _10f(_110,_111,_112,_113){ var _114=$.data(_110,"tree"); var opts=_114.options; if(!opts.checkbox){ return; } var _115=_ed(_110,_111); if(!_115.checkState){ return; } var ck=$(_111).find(".tree-checkbox"); if(_112==undefined){ if(ck.hasClass("tree-checkbox1")){ _112=false; }else{ if(ck.hasClass("tree-checkbox0")){ _112=true; }else{ if(_115._checked==undefined){ _115._checked=$(_111).find(".tree-checkbox").hasClass("tree-checkbox1"); } _112=!_115._checked; } } } _115._checked=_112; if(_112){ if(ck.hasClass("tree-checkbox1")){ return; } }else{ if(ck.hasClass("tree-checkbox0")){ return; } } if(!_113){ if(opts.onBeforeCheck.call(_110,_115,_112)==false){ return; } } if(opts.cascadeCheck){ _116(_110,_115,_112); _117(_110,_115); }else{ _118(_110,_115,_112?"1":"0"); } if(!_113){ opts.onCheck.call(_110,_115,_112); } }; function _116(_119,_11a,_11b){ var opts=$.data(_119,"tree").options; var flag=_11b?1:0; _118(_119,_11a,flag); if(opts.deepCheck){ $.easyui.forEach(_11a.children||[],true,function(n){ _118(_119,n,flag); }); }else{ var _11c=[]; if(_11a.children&&_11a.children.length){ _11c.push(_11a); } $.easyui.forEach(_11a.children||[],true,function(n){ if(!n.hidden){ _118(_119,n,flag); if(n.children&&n.children.length){ _11c.push(n); } } }); for(var i=_11c.length-1;i>=0;i--){ var node=_11c[i]; _118(_119,node,_11d(node)); } } }; function _118(_11e,_11f,flag){ var opts=$.data(_11e,"tree").options; if(!_11f.checkState||flag==undefined){ return; } if(_11f.hidden&&!opts.deepCheck){ return; } var ck=$("#"+_11f.domId).find(".tree-checkbox"); _11f.checkState=["unchecked","checked","indeterminate"][flag]; _11f.checked=(_11f.checkState=="checked"); ck.removeClass("tree-checkbox0 tree-checkbox1 tree-checkbox2"); ck.addClass("tree-checkbox"+flag); }; function _117(_120,_121){ var pd=_122(_120,$("#"+_121.domId)[0]); if(pd){ _118(_120,pd,_11d(pd)); _117(_120,pd); } }; function _11d(row){ var c0=0; var c1=0; var len=0; $.easyui.forEach(row.children||[],false,function(r){ if(r.checkState){ len++; if(r.checkState=="checked"){ c1++; }else{ if(r.checkState=="unchecked"){ c0++; } } } }); if(len==0){ return undefined; } var flag=0; if(c0==len){ flag=0; }else{ if(c1==len){ flag=1; }else{ flag=2; } } return flag; }; function _123(_124,_125){ var opts=$.data(_124,"tree").options; if(!opts.checkbox){ return; } var node=$(_125); var ck=node.find(".tree-checkbox"); var _126=_ed(_124,_125); if(opts.view.hasCheckbox(_124,_126)){ if(!ck.length){ _126.checkState=_126.checkState||"unchecked"; $("").insertBefore(node.find(".tree-title")); } if(_126.checkState=="checked"){ _10f(_124,_125,true,true); }else{ if(_126.checkState=="unchecked"){ _10f(_124,_125,false,true); }else{ var flag=_11d(_126); if(flag===0){ _10f(_124,_125,false,true); }else{ if(flag===1){ _10f(_124,_125,true,true); } } } } }else{ ck.remove(); _126.checkState=undefined; _126.checked=undefined; _117(_124,_126); } }; function _127(_128,ul,data,_129,_12a){ var _12b=$.data(_128,"tree"); var opts=_12b.options; var _12c=$(ul).prevAll("div.tree-node:first"); data=opts.loadFilter.call(_128,data,_12c[0]); var _12d=_12e(_128,"domId",_12c.attr("id")); if(!_129){ _12d?_12d.children=data:_12b.data=data; $(ul).empty(); }else{ if(_12d){ _12d.children?_12d.children=_12d.children.concat(data):_12d.children=data; }else{ _12b.data=_12b.data.concat(data); } } opts.view.render.call(opts.view,_128,ul,data); if(opts.dnd){ _f2(_128); } if(_12d){ _12f(_128,_12d); } for(var i=0;i<_12b.tmpIds.length;i++){ _10f(_128,$("#"+_12b.tmpIds[i])[0],true,true); } _12b.tmpIds=[]; setTimeout(function(){ _130(_128,_128); },0); if(!_12a){ opts.onLoadSuccess.call(_128,_12d,data); } }; function _130(_131,ul,_132){ var opts=$.data(_131,"tree").options; if(opts.lines){ $(_131).addClass("tree-lines"); }else{ $(_131).removeClass("tree-lines"); return; } if(!_132){ _132=true; $(_131).find("span.tree-indent").removeClass("tree-line tree-join tree-joinbottom"); $(_131).find("div.tree-node").removeClass("tree-node-last tree-root-first tree-root-one"); var _133=$(_131).tree("getRoots"); if(_133.length>1){ $(_133[0].target).addClass("tree-root-first"); }else{ if(_133.length==1){ $(_133[0].target).addClass("tree-root-one"); } } } $(ul).children("li").each(function(){ var node=$(this).children("div.tree-node"); var ul=node.next("ul"); if(ul.length){ if($(this).next().length){ _134(node); } _130(_131,ul,_132); }else{ _135(node); } }); var _136=$(ul).children("li:last").children("div.tree-node").addClass("tree-node-last"); _136.children("span.tree-join").removeClass("tree-join").addClass("tree-joinbottom"); function _135(node,_137){ var icon=node.find("span.tree-icon"); icon.prev("span.tree-indent").addClass("tree-join"); }; function _134(node){ var _138=node.find("span.tree-indent, span.tree-hit").length; node.next().find("div.tree-node").each(function(){ $(this).children("span:eq("+(_138-1)+")").addClass("tree-line"); }); }; }; function _139(_13a,ul,_13b,_13c){ var opts=$.data(_13a,"tree").options; _13b=$.extend({},opts.queryParams,_13b||{}); var _13d=null; if(_13a!=ul){ var node=$(ul).prev(); _13d=_ed(_13a,node[0]); } if(opts.onBeforeLoad.call(_13a,_13d,_13b)==false){ return; } var _13e=$(ul).prev().children("span.tree-folder"); _13e.addClass("tree-loading"); var _13f=opts.loader.call(_13a,_13b,function(data){ _13e.removeClass("tree-loading"); _127(_13a,ul,data); if(_13c){ _13c(); } },function(){ _13e.removeClass("tree-loading"); opts.onLoadError.apply(_13a,arguments); if(_13c){ _13c(); } }); if(_13f==false){ _13e.removeClass("tree-loading"); } }; function _140(_141,_142,_143){ var opts=$.data(_141,"tree").options; var hit=$(_142).children("span.tree-hit"); if(hit.length==0){ return; } if(hit.hasClass("tree-expanded")){ return; } var node=_ed(_141,_142); if(opts.onBeforeExpand.call(_141,node)==false){ return; } hit.removeClass("tree-collapsed tree-collapsed-hover").addClass("tree-expanded"); hit.next().addClass("tree-folder-open"); var ul=$(_142).next(); if(ul.length){ if(opts.animate){ ul.slideDown("normal",function(){ node.state="open"; opts.onExpand.call(_141,node); if(_143){ _143(); } }); }else{ ul.css("display","block"); node.state="open"; opts.onExpand.call(_141,node); if(_143){ _143(); } } }else{ var _144=$("
                            ").insertAfter(_142); _139(_141,_144[0],{id:node.id},function(){ if(_144.is(":empty")){ _144.remove(); } if(opts.animate){ _144.slideDown("normal",function(){ node.state="open"; opts.onExpand.call(_141,node); if(_143){ _143(); } }); }else{ _144.css("display","block"); node.state="open"; opts.onExpand.call(_141,node); if(_143){ _143(); } } }); } }; function _145(_146,_147){ var opts=$.data(_146,"tree").options; var hit=$(_147).children("span.tree-hit"); if(hit.length==0){ return; } if(hit.hasClass("tree-collapsed")){ return; } var node=_ed(_146,_147); if(opts.onBeforeCollapse.call(_146,node)==false){ return; } hit.removeClass("tree-expanded tree-expanded-hover").addClass("tree-collapsed"); hit.next().removeClass("tree-folder-open"); var ul=$(_147).next(); if(opts.animate){ ul.slideUp("normal",function(){ node.state="closed"; opts.onCollapse.call(_146,node); }); }else{ ul.css("display","none"); node.state="closed"; opts.onCollapse.call(_146,node); } }; function _148(_149,_14a){ var hit=$(_14a).children("span.tree-hit"); if(hit.length==0){ return; } if(hit.hasClass("tree-expanded")){ _145(_149,_14a); }else{ _140(_149,_14a); } }; function _14b(_14c,_14d){ var _14e=_14f(_14c,_14d); if(_14d){ _14e.unshift(_ed(_14c,_14d)); } for(var i=0;i<_14e.length;i++){ _140(_14c,_14e[i].target); } }; function _150(_151,_152){ var _153=[]; var p=_122(_151,_152); while(p){ _153.unshift(p); p=_122(_151,p.target); } for(var i=0;i<_153.length;i++){ _140(_151,_153[i].target); } }; function _154(_155,_156){ var c=$(_155).parent(); while(c[0].tagName!="BODY"&&c.css("overflow-y")!="auto"){ c=c.parent(); } var n=$(_156); var ntop=n.offset().top; if(c[0].tagName!="BODY"){ var ctop=c.offset().top; if(ntopctop+c.outerHeight()-18){ c.scrollTop(c.scrollTop()+ntop+n.outerHeight()-ctop-c.outerHeight()+18); } } }else{ c.scrollTop(ntop); } }; function _157(_158,_159){ var _15a=_14f(_158,_159); if(_159){ _15a.unshift(_ed(_158,_159)); } for(var i=0;i<_15a.length;i++){ _145(_158,_15a[i].target); } }; function _15b(_15c,_15d){ var node=$(_15d.parent); var data=_15d.data; if(!data){ return; } data=$.isArray(data)?data:[data]; if(!data.length){ return; } var ul; if(node.length==0){ ul=$(_15c); }else{ if(_15e(_15c,node[0])){ var _15f=node.find("span.tree-icon"); _15f.removeClass("tree-file").addClass("tree-folder tree-folder-open"); var hit=$("").insertBefore(_15f); if(hit.prev().length){ hit.prev().remove(); } } ul=node.next(); if(!ul.length){ ul=$("
                              ").insertAfter(node); } } _127(_15c,ul[0],data,true,true); }; function _160(_161,_162){ var ref=_162.before||_162.after; var _163=_122(_161,ref); var data=_162.data; if(!data){ return; } data=$.isArray(data)?data:[data]; if(!data.length){ return; } _15b(_161,{parent:(_163?_163.target:null),data:data}); var _164=_163?_163.children:$(_161).tree("getRoots"); for(var i=0;i<_164.length;i++){ if(_164[i].domId==$(ref).attr("id")){ for(var j=data.length-1;j>=0;j--){ _164.splice((_162.before?i:(i+1)),0,data[j]); } _164.splice(_164.length-data.length,data.length); break; } } var li=$(); for(var i=0;i").prependTo(node); node.next().remove(); } _12f(_166,_168); } _130(_166,_166); function del(_169){ var id=$(_169).attr("id"); var _16a=_122(_166,_169); var cc=_16a?_16a.children:$.data(_166,"tree").data; for(var i=0;i").appendTo(nt); _196.val(node.text).focus(); _196.width(_195+20); _196._outerHeight(opts.editorHeight); _196._bind("click",function(e){ return false; })._bind("mousedown",function(e){ e.stopPropagation(); })._bind("mousemove",function(e){ e.stopPropagation(); })._bind("keydown",function(e){ if(e.keyCode==13){ _197(_193,_194); return false; }else{ if(e.keyCode==27){ _19b(_193,_194); return false; } } })._bind("blur",function(e){ e.stopPropagation(); _197(_193,_194); }); }; function _197(_198,_199){ var opts=$.data(_198,"tree").options; $(_199).css("position",""); var _19a=$(_199).find("input.tree-editor"); var val=_19a.val(); _19a.remove(); var node=_ed(_198,_199); node.text=val; _12f(_198,node); opts.onAfterEdit.call(_198,node); }; function _19b(_19c,_19d){ var opts=$.data(_19c,"tree").options; $(_19d).css("position",""); $(_19d).find("input.tree-editor").remove(); var node=_ed(_19c,_19d); _12f(_19c,node); opts.onCancelEdit.call(_19c,node); }; function _19e(_19f,q){ var _1a0=$.data(_19f,"tree"); var opts=_1a0.options; var ids={}; $.easyui.forEach(_1a0.data,true,function(node){ if(opts.filter.call(_19f,q,node)){ $("#"+node.domId).removeClass("tree-node-hidden"); ids[node.domId]=1; node.hidden=false; }else{ $("#"+node.domId).addClass("tree-node-hidden"); node.hidden=true; } }); for(var id in ids){ _1a1(id); } function _1a1(_1a2){ var p=$(_19f).tree("getParent",$("#"+_1a2)[0]); while(p){ $(p.target).removeClass("tree-node-hidden"); p.hidden=false; p=$(_19f).tree("getParent",p.target); } }; }; $.fn.tree=function(_1a3,_1a4){ if(typeof _1a3=="string"){ return $.fn.tree.methods[_1a3](this,_1a4); } var _1a3=_1a3||{}; return this.each(function(){ var _1a5=$.data(this,"tree"); var opts; if(_1a5){ opts=$.extend(_1a5.options,_1a3); _1a5.options=opts; }else{ opts=$.extend({},$.fn.tree.defaults,$.fn.tree.parseOptions(this),_1a3); $.data(this,"tree",{options:opts,tree:_e2(this),data:[],tmpIds:[]}); var data=$.fn.tree.parseData(this); if(data.length){ _127(this,this,data); } } _e5(this); if(opts.data){ _127(this,this,$.extend(true,[],opts.data)); } _139(this,this); }); }; $.fn.tree.methods={options:function(jq){ return $.data(jq[0],"tree").options; },loadData:function(jq,data){ return jq.each(function(){ _127(this,this,data); }); },getNode:function(jq,_1a6){ return _ed(jq[0],_1a6); },getData:function(jq,_1a7){ return _180(jq[0],_1a7); },reload:function(jq,_1a8){ return jq.each(function(){ if(_1a8){ var node=$(_1a8); var hit=node.children("span.tree-hit"); hit.removeClass("tree-expanded tree-expanded-hover").addClass("tree-collapsed"); node.next().remove(); _140(this,_1a8); }else{ $(this).empty(); _139(this,this); } }); },getRoot:function(jq,_1a9){ return _16d(jq[0],_1a9); },getRoots:function(jq){ return _171(jq[0]); },getParent:function(jq,_1aa){ return _122(jq[0],_1aa); },getChildren:function(jq,_1ab){ return _14f(jq[0],_1ab); },getChecked:function(jq,_1ac){ return _17a(jq[0],_1ac); },getSelected:function(jq){ return _17e(jq[0]); },isLeaf:function(jq,_1ad){ return _15e(jq[0],_1ad); },find:function(jq,id){ return _185(jq[0],id); },findBy:function(jq,_1ae){ return _12e(jq[0],_1ae.field,_1ae.value); },select:function(jq,_1af){ return jq.each(function(){ _18d(this,_1af); }); },check:function(jq,_1b0){ return jq.each(function(){ _10f(this,_1b0,true); }); },uncheck:function(jq,_1b1){ return jq.each(function(){ _10f(this,_1b1,false); }); },collapse:function(jq,_1b2){ return jq.each(function(){ _145(this,_1b2); }); },expand:function(jq,_1b3){ return jq.each(function(){ _140(this,_1b3); }); },collapseAll:function(jq,_1b4){ return jq.each(function(){ _157(this,_1b4); }); },expandAll:function(jq,_1b5){ return jq.each(function(){ _14b(this,_1b5); }); },expandTo:function(jq,_1b6){ return jq.each(function(){ _150(this,_1b6); }); },scrollTo:function(jq,_1b7){ return jq.each(function(){ _154(this,_1b7); }); },toggle:function(jq,_1b8){ return jq.each(function(){ _148(this,_1b8); }); },append:function(jq,_1b9){ return jq.each(function(){ _15b(this,_1b9); }); },insert:function(jq,_1ba){ return jq.each(function(){ _160(this,_1ba); }); },remove:function(jq,_1bb){ return jq.each(function(){ _165(this,_1bb); }); },pop:function(jq,_1bc){ var node=jq.tree("getData",_1bc); jq.tree("remove",_1bc); return node; },update:function(jq,_1bd){ return jq.each(function(){ _12f(this,$.extend({},_1bd,{checkState:_1bd.checked?"checked":(_1bd.checked===false?"unchecked":undefined)})); }); },enableDnd:function(jq){ return jq.each(function(){ _f2(this); }); },disableDnd:function(jq){ return jq.each(function(){ _ee(this); }); },beginEdit:function(jq,_1be){ return jq.each(function(){ _192(this,_1be); }); },endEdit:function(jq,_1bf){ return jq.each(function(){ _197(this,_1bf); }); },cancelEdit:function(jq,_1c0){ return jq.each(function(){ _19b(this,_1c0); }); },doFilter:function(jq,q){ return jq.each(function(){ _19e(this,q); }); }}; $.fn.tree.parseOptions=function(_1c1){ var t=$(_1c1); return $.extend({},$.parser.parseOptions(_1c1,["url","method",{checkbox:"boolean",cascadeCheck:"boolean",onlyLeafCheck:"boolean"},{animate:"boolean",lines:"boolean",dnd:"boolean"}])); }; $.fn.tree.parseData=function(_1c2){ var data=[]; _1c3(data,$(_1c2)); return data; function _1c3(aa,tree){ tree.children("li").each(function(){ var node=$(this); var item=$.extend({},$.parser.parseOptions(this,["id","iconCls","state"]),{checked:(node.attr("checked")?true:undefined)}); item.text=node.children("span").html(); if(!item.text){ item.text=node.html(); } var _1c4=node.children("ul"); if(_1c4.length){ item.children=[]; _1c3(item.children,_1c4); } aa.push(item); }); }; }; var _1c5=1; var _1c6={render:function(_1c7,ul,data){ var _1c8=$.data(_1c7,"tree"); var opts=_1c8.options; var _1c9=$(ul).prev(".tree-node"); var _1ca=_1c9.length?$(_1c7).tree("getNode",_1c9[0]):null; var _1cb=_1c9.find("span.tree-indent, span.tree-hit").length; var _1cc=$(_1c7).attr("id")||""; var cc=_1cd.call(this,_1cb,data); $(ul).append(cc.join("")); function _1cd(_1ce,_1cf){ var cc=[]; for(var i=0;i<_1cf.length;i++){ var item=_1cf[i]; if(item.state!="open"&&item.state!="closed"){ item.state="open"; } item.domId=_1cc+"_easyui_tree_"+_1c5++; cc.push("
                            • "); cc.push("
                              "); for(var j=0;j<_1ce;j++){ cc.push(""); } if(item.state=="closed"){ cc.push(""); cc.push(""); }else{ if(item.children&&item.children.length){ cc.push(""); cc.push(""); }else{ cc.push(""); cc.push(""); } } if(this.hasCheckbox(_1c7,item)){ var flag=0; if(_1ca&&_1ca.checkState=="checked"&&opts.cascadeCheck){ flag=1; item.checked=true; }else{ if(item.checked){ $.easyui.addArrayItem(_1c8.tmpIds,item.domId); } } item.checkState=flag?"checked":"unchecked"; cc.push(""); }else{ item.checkState=undefined; item.checked=undefined; } cc.push(""+opts.formatter.call(_1c7,item)+""); cc.push("
                              "); if(item.children&&item.children.length){ var tmp=_1cd.call(this,_1ce+1,item.children); cc.push("
                                "); cc=cc.concat(tmp); cc.push("
                              "); } cc.push("
                            • "); } return cc; }; },hasCheckbox:function(_1d0,item){ var _1d1=$.data(_1d0,"tree"); var opts=_1d1.options; if(opts.checkbox){ if($.isFunction(opts.checkbox)){ if(opts.checkbox.call(_1d0,item)){ return true; }else{ return false; } }else{ if(opts.onlyLeafCheck){ if(item.state=="open"&&!(item.children&&item.children.length)){ return true; } }else{ return true; } } } return false; }}; $.fn.tree.defaults={url:null,method:"post",animate:false,checkbox:false,cascadeCheck:true,onlyLeafCheck:false,lines:false,dnd:false,editorHeight:26,data:null,queryParams:{},formatter:function(node){ return node.text; },filter:function(q,node){ var qq=[]; $.map($.isArray(q)?q:[q],function(q){ q=$.trim(q); if(q){ qq.push(q); } }); for(var i=0;i=0){ return true; } } return !qq.length; },loader:function(_1d3,_1d4,_1d5){ var opts=$(this).tree("options"); if(!opts.url){ return false; } $.ajax({type:opts.method,url:opts.url,data:_1d3,dataType:"json",success:function(data){ _1d4(data); },error:function(){ _1d5.apply(this,arguments); }}); },loadFilter:function(data,_1d6){ return data; },view:_1c6,onBeforeLoad:function(node,_1d7){ },onLoadSuccess:function(node,data){ },onLoadError:function(){ },onClick:function(node){ },onDblClick:function(node){ },onBeforeExpand:function(node){ },onExpand:function(node){ },onBeforeCollapse:function(node){ },onCollapse:function(node){ },onBeforeCheck:function(node,_1d8){ },onCheck:function(node,_1d9){ },onBeforeSelect:function(node){ },onSelect:function(node){ },onContextMenu:function(e,node){ },onBeforeDrag:function(node){ },onStartDrag:function(node){ },onStopDrag:function(node){ },onDragEnter:function(_1da,_1db){ },onDragOver:function(_1dc,_1dd){ },onDragLeave:function(_1de,_1df){ },onBeforeDrop:function(_1e0,_1e1,_1e2){ },onDrop:function(_1e3,_1e4,_1e5){ },onBeforeEdit:function(node){ },onAfterEdit:function(node){ },onCancelEdit:function(node){ }}; })(jQuery); (function($){ function init(_1e6){ $(_1e6).addClass("progressbar"); $(_1e6).html("
                              "); $(_1e6)._bind("_resize",function(e,_1e7){ if($(this).hasClass("easyui-fluid")||_1e7){ _1e8(_1e6); } return false; }); return $(_1e6); }; function _1e8(_1e9,_1ea){ var opts=$.data(_1e9,"progressbar").options; var bar=$.data(_1e9,"progressbar").bar; if(_1ea){ opts.width=_1ea; } bar._size(opts); bar.find("div.progressbar-text").css("width",bar.width()); bar.find("div.progressbar-text,div.progressbar-value").css({height:bar.height()+"px",lineHeight:bar.height()+"px"}); }; $.fn.progressbar=function(_1eb,_1ec){ if(typeof _1eb=="string"){ var _1ed=$.fn.progressbar.methods[_1eb]; if(_1ed){ return _1ed(this,_1ec); } } _1eb=_1eb||{}; return this.each(function(){ var _1ee=$.data(this,"progressbar"); if(_1ee){ $.extend(_1ee.options,_1eb); }else{ _1ee=$.data(this,"progressbar",{options:$.extend({},$.fn.progressbar.defaults,$.fn.progressbar.parseOptions(this),_1eb),bar:init(this)}); } $(this).progressbar("setValue",_1ee.options.value); _1e8(this); }); }; $.fn.progressbar.methods={options:function(jq){ return $.data(jq[0],"progressbar").options; },resize:function(jq,_1ef){ return jq.each(function(){ _1e8(this,_1ef); }); },getValue:function(jq){ return $.data(jq[0],"progressbar").options.value; },setValue:function(jq,_1f0){ if(_1f0<0){ _1f0=0; } if(_1f0>100){ _1f0=100; } return jq.each(function(){ var opts=$.data(this,"progressbar").options; var text=opts.text.replace(/{value}/,_1f0); var _1f1=opts.value; opts.value=_1f0; $(this).find("div.progressbar-value").width(_1f0+"%"); $(this).find("div.progressbar-text").html(text); if(_1f1!=_1f0){ opts.onChange.call(this,_1f0,_1f1); } }); }}; $.fn.progressbar.parseOptions=function(_1f2){ return $.extend({},$.parser.parseOptions(_1f2,["width","height","text",{value:"number"}])); }; $.fn.progressbar.defaults={width:"auto",height:22,value:0,text:"{value}%",onChange:function(_1f3,_1f4){ }}; })(jQuery); (function($){ function init(_1f5){ $(_1f5).addClass("tooltip-f"); }; function _1f6(_1f7){ var opts=$.data(_1f7,"tooltip").options; $(_1f7)._unbind(".tooltip")._bind(opts.showEvent+".tooltip",function(e){ $(_1f7).tooltip("show",e); })._bind(opts.hideEvent+".tooltip",function(e){ $(_1f7).tooltip("hide",e); })._bind("mousemove.tooltip",function(e){ if(opts.trackMouse){ opts.trackMouseX=e.pageX; opts.trackMouseY=e.pageY; $(_1f7).tooltip("reposition"); } }); }; function _1f8(_1f9){ var _1fa=$.data(_1f9,"tooltip"); if(_1fa.showTimer){ clearTimeout(_1fa.showTimer); _1fa.showTimer=null; } if(_1fa.hideTimer){ clearTimeout(_1fa.hideTimer); _1fa.hideTimer=null; } }; function _1fb(_1fc){ var _1fd=$.data(_1fc,"tooltip"); if(!_1fd||!_1fd.tip){ return; } var opts=_1fd.options; var tip=_1fd.tip; var pos={left:-100000,top:-100000}; if($(_1fc).is(":visible")){ pos=_1fe(opts.position); if(opts.position=="top"&&pos.top<0){ pos=_1fe("bottom"); }else{ if((opts.position=="bottom")&&(pos.top+tip._outerHeight()>$(window)._outerHeight()+$(document).scrollTop())){ pos=_1fe("top"); } } if(pos.left<0){ if(opts.position=="left"){ pos=_1fe("right"); }else{ $(_1fc).tooltip("arrow").css("left",tip._outerWidth()/2+pos.left); pos.left=0; } }else{ if(pos.left+tip._outerWidth()>$(window)._outerWidth()+$(document)._scrollLeft()){ if(opts.position=="right"){ pos=_1fe("left"); }else{ var left=pos.left; pos.left=$(window)._outerWidth()+$(document)._scrollLeft()-tip._outerWidth(); $(_1fc).tooltip("arrow").css("left",tip._outerWidth()/2-(pos.left-left)); } } } } tip.css({left:pos.left,top:pos.top,zIndex:(opts.zIndex!=undefined?opts.zIndex:($.fn.window?$.fn.window.defaults.zIndex++:""))}); opts.onPosition.call(_1fc,pos.left,pos.top); function _1fe(_1ff){ opts.position=_1ff||"bottom"; tip.removeClass("tooltip-top tooltip-bottom tooltip-left tooltip-right").addClass("tooltip-"+opts.position); var left,top; var _200=$.isFunction(opts.deltaX)?opts.deltaX.call(_1fc,opts.position):opts.deltaX; var _201=$.isFunction(opts.deltaY)?opts.deltaY.call(_1fc,opts.position):opts.deltaY; if(opts.trackMouse){ t=$(); left=opts.trackMouseX+_200; top=opts.trackMouseY+_201; }else{ var t=$(_1fc); left=t.offset().left+_200; top=t.offset().top+_201; } switch(opts.position){ case "right": left+=t._outerWidth()+12+(opts.trackMouse?12:0); if(opts.valign=="middle"){ top-=(tip._outerHeight()-t._outerHeight())/2; } break; case "left": left-=tip._outerWidth()+12+(opts.trackMouse?12:0); if(opts.valign=="middle"){ top-=(tip._outerHeight()-t._outerHeight())/2; } break; case "top": left-=(tip._outerWidth()-t._outerWidth())/2; top-=tip._outerHeight()+12+(opts.trackMouse?12:0); break; case "bottom": left-=(tip._outerWidth()-t._outerWidth())/2; top+=t._outerHeight()+12+(opts.trackMouse?12:0); break; } return {left:left,top:top}; }; }; function _202(_203,e){ var _204=$.data(_203,"tooltip"); var opts=_204.options; var tip=_204.tip; if(!tip){ tip=$("
                              "+"
                              "+"
                              "+"
                              "+"
                              ").appendTo("body"); _204.tip=tip; _205(_203); } _1f8(_203); _204.showTimer=setTimeout(function(){ $(_203).tooltip("reposition"); tip.show(); opts.onShow.call(_203,e); var _206=tip.children(".tooltip-arrow-outer"); var _207=tip.children(".tooltip-arrow"); var bc="border-"+opts.position+"-color"; _206.add(_207).css({borderTopColor:"",borderBottomColor:"",borderLeftColor:"",borderRightColor:""}); _206.css(bc,tip.css(bc)); _207.css(bc,tip.css("backgroundColor")); },opts.showDelay); }; function _208(_209,e){ var _20a=$.data(_209,"tooltip"); if(_20a&&_20a.tip){ _1f8(_209); _20a.hideTimer=setTimeout(function(){ _20a.tip.hide(); _20a.options.onHide.call(_209,e); },_20a.options.hideDelay); } }; function _205(_20b,_20c){ var _20d=$.data(_20b,"tooltip"); var opts=_20d.options; if(_20c){ opts.content=_20c; } if(!_20d.tip){ return; } var cc=typeof opts.content=="function"?opts.content.call(_20b):opts.content; _20d.tip.children(".tooltip-content").html(cc); opts.onUpdate.call(_20b,cc); }; function _20e(_20f){ var _210=$.data(_20f,"tooltip"); if(_210){ _1f8(_20f); var opts=_210.options; if(_210.tip){ _210.tip.remove(); } if(opts._title){ $(_20f).attr("title",opts._title); } $.removeData(_20f,"tooltip"); $(_20f)._unbind(".tooltip").removeClass("tooltip-f"); opts.onDestroy.call(_20f); } }; $.fn.tooltip=function(_211,_212){ if(typeof _211=="string"){ return $.fn.tooltip.methods[_211](this,_212); } _211=_211||{}; return this.each(function(){ var _213=$.data(this,"tooltip"); if(_213){ $.extend(_213.options,_211); }else{ $.data(this,"tooltip",{options:$.extend({},$.fn.tooltip.defaults,$.fn.tooltip.parseOptions(this),_211)}); init(this); } _1f6(this); _205(this); }); }; $.fn.tooltip.methods={options:function(jq){ return $.data(jq[0],"tooltip").options; },tip:function(jq){ return $.data(jq[0],"tooltip").tip; },arrow:function(jq){ return jq.tooltip("tip").children(".tooltip-arrow-outer,.tooltip-arrow"); },show:function(jq,e){ return jq.each(function(){ _202(this,e); }); },hide:function(jq,e){ return jq.each(function(){ _208(this,e); }); },update:function(jq,_214){ return jq.each(function(){ _205(this,_214); }); },reposition:function(jq){ return jq.each(function(){ _1fb(this); }); },destroy:function(jq){ return jq.each(function(){ _20e(this); }); }}; $.fn.tooltip.parseOptions=function(_215){ var t=$(_215); var opts=$.extend({},$.parser.parseOptions(_215,["position","showEvent","hideEvent","content",{trackMouse:"boolean",deltaX:"number",deltaY:"number",showDelay:"number",hideDelay:"number"}]),{_title:t.attr("title")}); t.attr("title",""); if(!opts.content){ opts.content=opts._title; } return opts; }; $.fn.tooltip.defaults={position:"bottom",valign:"middle",content:null,trackMouse:false,deltaX:0,deltaY:0,showEvent:"mouseenter",hideEvent:"mouseleave",showDelay:200,hideDelay:100,onShow:function(e){ },onHide:function(e){ },onUpdate:function(_216){ },onPosition:function(left,top){ },onDestroy:function(){ }}; })(jQuery); (function($){ $.fn._remove=function(){ return this.each(function(){ $(this).remove(); try{ this.outerHTML=""; } catch(err){ } }); }; function _217(node){ node._remove(); }; function _218(_219,_21a){ var _21b=$.data(_219,"panel"); var opts=_21b.options; var _21c=_21b.panel; var _21d=_21c.children(".panel-header"); var _21e=_21c.children(".panel-body"); var _21f=_21c.children(".panel-footer"); var _220=(opts.halign=="left"||opts.halign=="right"); if(_21a){ $.extend(opts,{width:_21a.width,height:_21a.height,minWidth:_21a.minWidth,maxWidth:_21a.maxWidth,minHeight:_21a.minHeight,maxHeight:_21a.maxHeight,left:_21a.left,top:_21a.top}); opts.hasResized=false; } var _221=_21c.outerWidth(); var _222=_21c.outerHeight(); _21c._size(opts); var _223=_21c.outerWidth(); var _224=_21c.outerHeight(); if(opts.hasResized&&(_221==_223&&_222==_224)){ return; } opts.hasResized=true; if(!_220){ _21d._outerWidth(_21c.width()); } _21e._outerWidth(_21c.width()); if(!isNaN(parseInt(opts.height))){ if(_220){ if(opts.header){ var _225=$(opts.header)._outerWidth(); }else{ _21d.css("width",""); var _225=_21d._outerWidth(); } var _226=_21d.find(".panel-title"); _225+=Math.min(_226._outerWidth(),_226._outerHeight()); var _227=_21c.height(); _21d._outerWidth(_225)._outerHeight(_227); _226._outerWidth(_21d.height()); _21e._outerWidth(_21c.width()-_225-_21f._outerWidth())._outerHeight(_227); _21f._outerHeight(_227); _21e.css({left:"",right:""}); if(_21d.length){ _21e.css(opts.halign,(_21d.position()[opts.halign]+_225)+"px"); } opts.panelCssWidth=_21c.css("width"); if(opts.collapsed){ _21c._outerWidth(_225+_21f._outerWidth()); } }else{ _21e._outerHeight(_21c.height()-_21d._outerHeight()-_21f._outerHeight()); } }else{ _21e.css("height",""); var min=$.parser.parseValue("minHeight",opts.minHeight,_21c.parent()); var max=$.parser.parseValue("maxHeight",opts.maxHeight,_21c.parent()); var _228=_21d._outerHeight()+_21f._outerHeight()+_21c._outerHeight()-_21c.height(); _21e._size("minHeight",min?(min-_228):""); _21e._size("maxHeight",max?(max-_228):""); } _21c.css({height:(_220?undefined:""),minHeight:"",maxHeight:"",left:opts.left,top:opts.top}); opts.onResize.apply(_219,[opts.width,opts.height]); $(_219).panel("doLayout"); }; function _229(_22a,_22b){ var _22c=$.data(_22a,"panel"); var opts=_22c.options; var _22d=_22c.panel; if(_22b){ if(_22b.left!=null){ opts.left=_22b.left; } if(_22b.top!=null){ opts.top=_22b.top; } } _22d.css({left:opts.left,top:opts.top}); _22d.find(".tooltip-f").each(function(){ $(this).tooltip("reposition"); }); opts.onMove.apply(_22a,[opts.left,opts.top]); }; function _22e(_22f){ $(_22f).addClass("panel-body")._size("clear"); var _230=$("
                              ").insertBefore(_22f); _230[0].appendChild(_22f); _230._bind("_resize",function(e,_231){ if($(this).hasClass("easyui-fluid")||_231){ _218(_22f,{}); } return false; }); return _230; }; function _232(_233){ var _234=$.data(_233,"panel"); var opts=_234.options; var _235=_234.panel; _235.css(opts.style); _235.addClass(opts.cls); _235.removeClass("panel-hleft panel-hright").addClass("panel-h"+opts.halign); _236(); _237(); var _238=$(_233).panel("header"); var body=$(_233).panel("body"); var _239=$(_233).siblings(".panel-footer"); if(opts.border){ _238.removeClass("panel-header-noborder"); body.removeClass("panel-body-noborder"); _239.removeClass("panel-footer-noborder"); }else{ _238.addClass("panel-header-noborder"); body.addClass("panel-body-noborder"); _239.addClass("panel-footer-noborder"); } _238.addClass(opts.headerCls); body.addClass(opts.bodyCls); $(_233).attr("id",opts.id||""); if(opts.content){ $(_233).panel("clear"); $(_233).html(opts.content); $.parser.parse($(_233)); } function _236(){ if(opts.noheader||(!opts.title&&!opts.header)){ _217(_235.children(".panel-header")); _235.children(".panel-body").addClass("panel-body-noheader"); }else{ if(opts.header){ $(opts.header).addClass("panel-header").prependTo(_235); }else{ var _23a=_235.children(".panel-header"); if(!_23a.length){ _23a=$("
                              ").prependTo(_235); } if(!$.isArray(opts.tools)){ _23a.find("div.panel-tool .panel-tool-a").appendTo(opts.tools); } _23a.empty(); var _23b=$("
                              ").html(opts.title).appendTo(_23a); if(opts.iconCls){ _23b.addClass("panel-with-icon"); $("
                              ").addClass(opts.iconCls).appendTo(_23a); } if(opts.halign=="left"||opts.halign=="right"){ _23b.addClass("panel-title-"+opts.titleDirection); } var tool=$("
                              ").appendTo(_23a); tool._bind("click",function(e){ e.stopPropagation(); }); if(opts.tools){ if($.isArray(opts.tools)){ $.map(opts.tools,function(t){ _23c(tool,t.iconCls,eval(t.handler)); }); }else{ $(opts.tools).children().each(function(){ $(this).addClass($(this).attr("iconCls")).addClass("panel-tool-a").appendTo(tool); }); } } if(opts.collapsible){ _23c(tool,"panel-tool-collapse",function(){ if(opts.collapsed==true){ _25d(_233,true); }else{ _24e(_233,true); } }); } if(opts.minimizable){ _23c(tool,"panel-tool-min",function(){ _263(_233); }); } if(opts.maximizable){ _23c(tool,"panel-tool-max",function(){ if(opts.maximized==true){ _266(_233); }else{ _24d(_233); } }); } if(opts.closable){ _23c(tool,"panel-tool-close",function(){ _24f(_233); }); } } _235.children("div.panel-body").removeClass("panel-body-noheader"); } }; function _23c(c,icon,_23d){ var a=$("").addClass(icon).appendTo(c); a._bind("click",_23d); }; function _237(){ if(opts.footer){ $(opts.footer).addClass("panel-footer").appendTo(_235); $(_233).addClass("panel-body-nobottom"); }else{ _235.children(".panel-footer").remove(); $(_233).removeClass("panel-body-nobottom"); } }; }; function _23e(_23f,_240){ var _241=$.data(_23f,"panel"); var opts=_241.options; if(_242){ opts.queryParams=_240; } if(!opts.href){ return; } if(!_241.isLoaded||!opts.cache){ var _242=$.extend({},opts.queryParams); if(opts.onBeforeLoad.call(_23f,_242)==false){ return; } _241.isLoaded=false; if(opts.loadingMessage){ $(_23f).panel("clear"); $(_23f).html($("
                              ").html(opts.loadingMessage)); } opts.loader.call(_23f,_242,function(data){ var _243=opts.extractor.call(_23f,data); $(_23f).panel("clear"); $(_23f).html(_243); $.parser.parse($(_23f)); opts.onLoad.apply(_23f,arguments); _241.isLoaded=true; },function(){ opts.onLoadError.apply(_23f,arguments); }); } }; function _244(_245){ var t=$(_245); t.find(".combo-f").each(function(){ $(this).combo("destroy"); }); t.find(".m-btn").each(function(){ $(this).menubutton("destroy"); }); t.find(".s-btn").each(function(){ $(this).splitbutton("destroy"); }); t.find(".tooltip-f").each(function(){ $(this).tooltip("destroy"); }); t.children("div").each(function(){ $(this)._size("unfit"); }); t.empty(); }; function _246(_247){ $(_247).panel("doLayout",true); }; function _248(_249,_24a){ var _24b=$.data(_249,"panel"); var opts=_24b.options; var _24c=_24b.panel; if(_24a!=true){ if(opts.onBeforeOpen.call(_249)==false){ return; } } _24c.stop(true,true); if($.isFunction(opts.openAnimation)){ opts.openAnimation.call(_249,cb); }else{ switch(opts.openAnimation){ case "slide": _24c.slideDown(opts.openDuration,cb); break; case "fade": _24c.fadeIn(opts.openDuration,cb); break; case "show": _24c.show(opts.openDuration,cb); break; default: _24c.show(); cb(); } } function cb(){ opts.closed=false; opts.minimized=false; var tool=_24c.children(".panel-header").find("a.panel-tool-restore"); if(tool.length){ opts.maximized=true; } opts.onOpen.call(_249); if(opts.maximized==true){ opts.maximized=false; _24d(_249); } if(opts.collapsed==true){ opts.collapsed=false; _24e(_249); } if(!opts.collapsed){ if(opts.href&&(!_24b.isLoaded||!opts.cache)){ _23e(_249); _246(_249); opts.doneLayout=true; } } if(!opts.doneLayout){ opts.doneLayout=true; _246(_249); } }; }; function _24f(_250,_251){ var _252=$.data(_250,"panel"); var opts=_252.options; var _253=_252.panel; if(_251!=true){ if(opts.onBeforeClose.call(_250)==false){ return; } } _253.find(".tooltip-f").each(function(){ $(this).tooltip("hide"); }); _253.stop(true,true); _253._size("unfit"); if($.isFunction(opts.closeAnimation)){ opts.closeAnimation.call(_250,cb); }else{ switch(opts.closeAnimation){ case "slide": _253.slideUp(opts.closeDuration,cb); break; case "fade": _253.fadeOut(opts.closeDuration,cb); break; case "hide": _253.hide(opts.closeDuration,cb); break; default: _253.hide(); cb(); } } function cb(){ opts.closed=true; opts.onClose.call(_250); }; }; function _254(_255,_256){ var _257=$.data(_255,"panel"); var opts=_257.options; var _258=_257.panel; if(_256!=true){ if(opts.onBeforeDestroy.call(_255)==false){ return; } } $(_255).panel("clear").panel("clear","footer"); _217(_258); opts.onDestroy.call(_255); }; function _24e(_259,_25a){ var opts=$.data(_259,"panel").options; var _25b=$.data(_259,"panel").panel; var body=_25b.children(".panel-body"); var _25c=_25b.children(".panel-header"); var tool=_25c.find("a.panel-tool-collapse"); if(opts.collapsed==true){ return; } body.stop(true,true); if(opts.onBeforeCollapse.call(_259)==false){ return; } tool.addClass("panel-tool-expand"); if(_25a==true){ if(opts.halign=="left"||opts.halign=="right"){ _25b.animate({width:_25c._outerWidth()+_25b.children(".panel-footer")._outerWidth()},function(){ cb(); }); }else{ body.slideUp("normal",function(){ cb(); }); } }else{ if(opts.halign=="left"||opts.halign=="right"){ _25b._outerWidth(_25c._outerWidth()+_25b.children(".panel-footer")._outerWidth()); } cb(); } function cb(){ body.hide(); opts.collapsed=true; opts.onCollapse.call(_259); }; }; function _25d(_25e,_25f){ var opts=$.data(_25e,"panel").options; var _260=$.data(_25e,"panel").panel; var body=_260.children(".panel-body"); var tool=_260.children(".panel-header").find("a.panel-tool-collapse"); if(opts.collapsed==false){ return; } body.stop(true,true); if(opts.onBeforeExpand.call(_25e)==false){ return; } tool.removeClass("panel-tool-expand"); if(_25f==true){ if(opts.halign=="left"||opts.halign=="right"){ body.show(); _260.animate({width:opts.panelCssWidth},function(){ cb(); }); }else{ body.slideDown("normal",function(){ cb(); }); } }else{ if(opts.halign=="left"||opts.halign=="right"){ _260.css("width",opts.panelCssWidth); } cb(); } function cb(){ body.show(); opts.collapsed=false; opts.onExpand.call(_25e); _23e(_25e); _246(_25e); }; }; function _24d(_261){ var opts=$.data(_261,"panel").options; var _262=$.data(_261,"panel").panel; var tool=_262.children(".panel-header").find("a.panel-tool-max"); if(opts.maximized==true){ return; } tool.addClass("panel-tool-restore"); if(!$.data(_261,"panel").original){ $.data(_261,"panel").original={width:opts.width,height:opts.height,left:opts.left,top:opts.top,fit:opts.fit}; } opts.left=0; opts.top=0; opts.fit=true; _218(_261); opts.minimized=false; opts.maximized=true; opts.onMaximize.call(_261); }; function _263(_264){ var opts=$.data(_264,"panel").options; var _265=$.data(_264,"panel").panel; _265._size("unfit"); _265.hide(); opts.minimized=true; opts.maximized=false; opts.onMinimize.call(_264); }; function _266(_267){ var opts=$.data(_267,"panel").options; var _268=$.data(_267,"panel").panel; var tool=_268.children(".panel-header").find("a.panel-tool-max"); if(opts.maximized==false){ return; } _268.show(); tool.removeClass("panel-tool-restore"); $.extend(opts,$.data(_267,"panel").original); _218(_267); opts.minimized=false; opts.maximized=false; $.data(_267,"panel").original=null; opts.onRestore.call(_267); }; function _269(_26a,_26b){ $.data(_26a,"panel").options.title=_26b; $(_26a).panel("header").find("div.panel-title").html(_26b); }; var _26c=null; $(window)._unbind(".panel")._bind("resize.panel",function(){ if(_26c){ clearTimeout(_26c); } _26c=setTimeout(function(){ var _26d=$("body.layout"); if(_26d.length){ _26d.layout("resize"); $("body").children(".easyui-fluid:visible").each(function(){ $(this).triggerHandler("_resize"); }); }else{ $("body").panel("doLayout"); } _26c=null; },100); }); $.fn.panel=function(_26e,_26f){ if(typeof _26e=="string"){ return $.fn.panel.methods[_26e](this,_26f); } _26e=_26e||{}; return this.each(function(){ var _270=$.data(this,"panel"); var opts; if(_270){ opts=$.extend(_270.options,_26e); _270.isLoaded=false; }else{ opts=$.extend({},$.fn.panel.defaults,$.fn.panel.parseOptions(this),_26e); $(this).attr("title",""); _270=$.data(this,"panel",{options:opts,panel:_22e(this),isLoaded:false}); } _232(this); $(this).show(); if(opts.doSize==true){ _270.panel.css("display","block"); _218(this); } if(opts.closed==true||opts.minimized==true){ _270.panel.hide(); }else{ _248(this); } }); }; $.fn.panel.methods={options:function(jq){ return $.data(jq[0],"panel").options; },panel:function(jq){ return $.data(jq[0],"panel").panel; },header:function(jq){ return $.data(jq[0],"panel").panel.children(".panel-header"); },footer:function(jq){ return jq.panel("panel").children(".panel-footer"); },body:function(jq){ return $.data(jq[0],"panel").panel.children(".panel-body"); },setTitle:function(jq,_271){ return jq.each(function(){ _269(this,_271); }); },open:function(jq,_272){ return jq.each(function(){ _248(this,_272); }); },close:function(jq,_273){ return jq.each(function(){ _24f(this,_273); }); },destroy:function(jq,_274){ return jq.each(function(){ _254(this,_274); }); },clear:function(jq,type){ return jq.each(function(){ _244(type=="footer"?$(this).panel("footer"):this); }); },refresh:function(jq,href){ return jq.each(function(){ var _275=$.data(this,"panel"); _275.isLoaded=false; if(href){ if(typeof href=="string"){ _275.options.href=href; }else{ _275.options.queryParams=href; } } _23e(this); }); },resize:function(jq,_276){ return jq.each(function(){ _218(this,_276||{}); }); },doLayout:function(jq,all){ return jq.each(function(){ _277(this,"body"); _277($(this).siblings(".panel-footer")[0],"footer"); function _277(_278,type){ if(!_278){ return; } var _279=_278==$("body")[0]; var s=$(_278).find("div.panel:visible,div.accordion:visible,div.tabs-container:visible,div.layout:visible,.easyui-fluid:visible").filter(function(_27a,el){ var p=$(el).parents(".panel-"+type+":first"); return _279?p.length==0:p[0]==_278; }); s.each(function(){ $(this).triggerHandler("_resize",[all||false]); }); }; }); },move:function(jq,_27b){ return jq.each(function(){ _229(this,_27b); }); },maximize:function(jq){ return jq.each(function(){ _24d(this); }); },minimize:function(jq){ return jq.each(function(){ _263(this); }); },restore:function(jq){ return jq.each(function(){ _266(this); }); },collapse:function(jq,_27c){ return jq.each(function(){ _24e(this,_27c); }); },expand:function(jq,_27d){ return jq.each(function(){ _25d(this,_27d); }); }}; $.fn.panel.parseOptions=function(_27e){ var t=$(_27e); var hh=t.children(".panel-header,header"); var ff=t.children(".panel-footer,footer"); return $.extend({},$.parser.parseOptions(_27e,["id","width","height","left","top","title","iconCls","cls","headerCls","bodyCls","tools","href","method","header","footer","halign","titleDirection",{cache:"boolean",fit:"boolean",border:"boolean",noheader:"boolean"},{collapsible:"boolean",minimizable:"boolean",maximizable:"boolean"},{closable:"boolean",collapsed:"boolean",minimized:"boolean",maximized:"boolean",closed:"boolean"},"openAnimation","closeAnimation",{openDuration:"number",closeDuration:"number"},]),{loadingMessage:(t.attr("loadingMessage")!=undefined?t.attr("loadingMessage"):undefined),header:(hh.length?hh.removeClass("panel-header"):undefined),footer:(ff.length?ff.removeClass("panel-footer"):undefined)}); }; $.fn.panel.defaults={id:null,title:null,iconCls:null,width:"auto",height:"auto",left:null,top:null,cls:null,headerCls:null,bodyCls:null,style:{},href:null,cache:true,fit:false,border:true,doSize:true,noheader:false,content:null,halign:"top",titleDirection:"down",collapsible:false,minimizable:false,maximizable:false,closable:false,collapsed:false,minimized:false,maximized:false,closed:false,openAnimation:false,openDuration:400,closeAnimation:false,closeDuration:400,tools:null,footer:null,header:null,queryParams:{},method:"get",href:null,loadingMessage:"Loading...",loader:function(_27f,_280,_281){ var opts=$(this).panel("options"); if(!opts.href){ return false; } $.ajax({type:opts.method,url:opts.href,cache:false,data:_27f,dataType:"html",success:function(data){ _280(data); },error:function(){ _281.apply(this,arguments); }}); },extractor:function(data){ var _282=/]*>((.|[\n\r])*)<\/body>/im; var _283=_282.exec(data); if(_283){ return _283[1]; }else{ return data; } },onBeforeLoad:function(_284){ },onLoad:function(){ },onLoadError:function(){ },onBeforeOpen:function(){ },onOpen:function(){ },onBeforeClose:function(){ },onClose:function(){ },onBeforeDestroy:function(){ },onDestroy:function(){ },onResize:function(_285,_286){ },onMove:function(left,top){ },onMaximize:function(){ },onRestore:function(){ },onMinimize:function(){ },onBeforeCollapse:function(){ },onBeforeExpand:function(){ },onCollapse:function(){ },onExpand:function(){ }}; })(jQuery); (function($){ function _287(_288,_289){ var _28a=$.data(_288,"window"); if(_289){ if(_289.left!=null){ _28a.options.left=_289.left; } if(_289.top!=null){ _28a.options.top=_289.top; } } $(_288).panel("move",_28a.options); if(_28a.shadow){ _28a.shadow.css({left:_28a.options.left,top:_28a.options.top}); } }; function _28b(_28c,_28d){ var opts=$.data(_28c,"window").options; var pp=$(_28c).window("panel"); var _28e=pp._outerWidth(); if(opts.inline){ var _28f=pp.parent(); opts.left=Math.ceil((_28f.width()-_28e)/2+_28f.scrollLeft()); }else{ var _290=opts.fixed?0:$(document).scrollLeft(); opts.left=Math.ceil(($(window)._outerWidth()-_28e)/2+_290); } if(_28d){ _287(_28c); } }; function _291(_292,_293){ var opts=$.data(_292,"window").options; var pp=$(_292).window("panel"); var _294=pp._outerHeight(); if(opts.inline){ var _295=pp.parent(); opts.top=Math.ceil((_295.height()-_294)/2+_295.scrollTop()); }else{ var _296=opts.fixed?0:$(document).scrollTop(); opts.top=Math.ceil(($(window)._outerHeight()-_294)/2+_296); } if(_293){ _287(_292); } }; function _297(_298){ var _299=$.data(_298,"window"); var opts=_299.options; var win=$(_298).panel($.extend({},_299.options,{border:false,doSize:true,closed:true,cls:"window "+(!opts.border?"window-thinborder window-noborder ":(opts.border=="thin"?"window-thinborder ":""))+(opts.cls||""),headerCls:"window-header "+(opts.headerCls||""),bodyCls:"window-body "+(opts.noheader?"window-body-noheader ":" ")+(opts.bodyCls||""),onBeforeDestroy:function(){ if(opts.onBeforeDestroy.call(_298)==false){ return false; } if(_299.shadow){ _299.shadow.remove(); } if(_299.mask){ _299.mask.remove(); } },onClose:function(){ if(_299.shadow){ _299.shadow.hide(); } if(_299.mask){ _299.mask.hide(); } opts.onClose.call(_298); },onOpen:function(){ if(_299.mask){ _299.mask.css($.extend({display:"block",zIndex:$.fn.window.defaults.zIndex++},$.fn.window.getMaskSize(_298))); } if(_299.shadow){ _299.shadow.css({display:"block",position:(opts.fixed?"fixed":"absolute"),zIndex:$.fn.window.defaults.zIndex++,left:opts.left,top:opts.top,width:_299.window._outerWidth(),height:_299.window._outerHeight()}); } _299.window.css({position:(opts.fixed?"fixed":"absolute"),zIndex:$.fn.window.defaults.zIndex++}); opts.onOpen.call(_298); },onResize:function(_29a,_29b){ var _29c=$(this).panel("options"); $.extend(opts,{width:_29c.width,height:_29c.height,left:_29c.left,top:_29c.top}); if(_299.shadow){ _299.shadow.css({left:opts.left,top:opts.top,width:_299.window._outerWidth(),height:_299.window._outerHeight()}); } opts.onResize.call(_298,_29a,_29b); },onMinimize:function(){ if(_299.shadow){ _299.shadow.hide(); } if(_299.mask){ _299.mask.hide(); } _299.options.onMinimize.call(_298); },onBeforeCollapse:function(){ if(opts.onBeforeCollapse.call(_298)==false){ return false; } if(_299.shadow){ _299.shadow.hide(); } },onExpand:function(){ if(_299.shadow){ _299.shadow.show(); } opts.onExpand.call(_298); }})); _299.window=win.panel("panel"); if(_299.mask){ _299.mask.remove(); } if(opts.modal){ _299.mask=$("
                              ").insertAfter(_299.window); } if(_299.shadow){ _299.shadow.remove(); } if(opts.shadow){ _299.shadow=$("
                              ").insertAfter(_299.window); } var _29d=opts.closed; if(opts.left==null){ _28b(_298); } if(opts.top==null){ _291(_298); } _287(_298); if(!_29d){ win.window("open"); } }; function _29e(left,top,_29f,_2a0){ var _2a1=this; var _2a2=$.data(_2a1,"window"); var opts=_2a2.options; if(!opts.constrain){ return {}; } if($.isFunction(opts.constrain)){ return opts.constrain.call(_2a1,left,top,_29f,_2a0); } var win=$(_2a1).window("window"); var _2a3=opts.inline?win.parent():$(window); var _2a4=opts.fixed?0:_2a3.scrollTop(); if(left<0){ left=0; } if(top<_2a4){ top=_2a4; } if(left+_29f>_2a3.width()){ if(_29f==win.outerWidth()){ left=_2a3.width()-_29f; }else{ _29f=_2a3.width()-left; } } if(top-_2a4+_2a0>_2a3.height()){ if(_2a0==win.outerHeight()){ top=_2a3.height()-_2a0+_2a4; }else{ _2a0=_2a3.height()-top+_2a4; } } return {left:left,top:top,width:_29f,height:_2a0}; }; function _2a5(_2a6){ var _2a7=$.data(_2a6,"window"); var opts=_2a7.options; _2a7.window.draggable({handle:">div.panel-header>div.panel-title",disabled:_2a7.options.draggable==false,onBeforeDrag:function(e){ if(_2a7.mask){ _2a7.mask.css("z-index",$.fn.window.defaults.zIndex++); } if(_2a7.shadow){ _2a7.shadow.css("z-index",$.fn.window.defaults.zIndex++); } _2a7.window.css("z-index",$.fn.window.defaults.zIndex++); },onStartDrag:function(e){ _2a8(e); },onDrag:function(e){ _2a9(e); return false; },onStopDrag:function(e){ _2aa(e,"move"); }}); _2a7.window.resizable({disabled:_2a7.options.resizable==false,onStartResize:function(e){ _2a8(e); },onResize:function(e){ _2a9(e); return false; },onStopResize:function(e){ _2aa(e,"resize"); }}); function _2a8(e){ _2a7.window.css("position",opts.fixed?"fixed":"absolute"); if(_2a7.shadow){ _2a7.shadow.css("position",opts.fixed?"fixed":"absolute"); } if(_2a7.pmask){ _2a7.pmask.remove(); } _2a7.pmask=$("
                              ").insertAfter(_2a7.window); _2a7.pmask.css({display:"none",position:(opts.fixed?"fixed":"absolute"),zIndex:$.fn.window.defaults.zIndex++,left:e.data.left,top:e.data.top,width:_2a7.window._outerWidth(),height:_2a7.window._outerHeight()}); if(_2a7.proxy){ _2a7.proxy.remove(); } _2a7.proxy=$("
                              ").insertAfter(_2a7.window); _2a7.proxy.css({display:"none",position:(opts.fixed?"fixed":"absolute"),zIndex:$.fn.window.defaults.zIndex++,left:e.data.left,top:e.data.top}); _2a7.proxy._outerWidth(e.data.width)._outerHeight(e.data.height); _2a7.proxy.hide(); setTimeout(function(){ if(_2a7.pmask){ _2a7.pmask.show(); } if(_2a7.proxy){ _2a7.proxy.show(); } },500); }; function _2a9(e){ $.extend(e.data,_29e.call(_2a6,e.data.left,e.data.top,e.data.width,e.data.height)); _2a7.pmask.show(); _2a7.proxy.css({display:"block",left:e.data.left,top:e.data.top}); _2a7.proxy._outerWidth(e.data.width); _2a7.proxy._outerHeight(e.data.height); }; function _2aa(e,_2ab){ _2a7.window.css("position",opts.fixed?"fixed":"absolute"); if(_2a7.shadow){ _2a7.shadow.css("position",opts.fixed?"fixed":"absolute"); } $.extend(e.data,_29e.call(_2a6,e.data.left,e.data.top,e.data.width+0.1,e.data.height+0.1)); $(_2a6).window(_2ab,e.data); _2a7.pmask.remove(); _2a7.pmask=null; _2a7.proxy.remove(); _2a7.proxy=null; }; }; $(function(){ if(!$._positionFixed){ $(window).resize(function(){ $("body>div.window-mask:visible").css({width:"",height:""}); setTimeout(function(){ $("body>div.window-mask:visible").css($.fn.window.getMaskSize()); },50); }); } }); $.fn.window=function(_2ac,_2ad){ if(typeof _2ac=="string"){ var _2ae=$.fn.window.methods[_2ac]; if(_2ae){ return _2ae(this,_2ad); }else{ return this.panel(_2ac,_2ad); } } _2ac=_2ac||{}; return this.each(function(){ var _2af=$.data(this,"window"); if(_2af){ $.extend(_2af.options,_2ac); }else{ _2af=$.data(this,"window",{options:$.extend({},$.fn.window.defaults,$.fn.window.parseOptions(this),_2ac)}); if(!_2af.options.inline){ document.body.appendChild(this); } } _297(this); _2a5(this); }); }; $.fn.window.methods={options:function(jq){ var _2b0=jq.panel("options"); var _2b1=$.data(jq[0],"window").options; return $.extend(_2b1,{closed:_2b0.closed,collapsed:_2b0.collapsed,minimized:_2b0.minimized,maximized:_2b0.maximized}); },window:function(jq){ return $.data(jq[0],"window").window; },move:function(jq,_2b2){ return jq.each(function(){ _287(this,_2b2); }); },hcenter:function(jq){ return jq.each(function(){ _28b(this,true); }); },vcenter:function(jq){ return jq.each(function(){ _291(this,true); }); },center:function(jq){ return jq.each(function(){ _28b(this); _291(this); _287(this); }); }}; $.fn.window.getMaskSize=function(_2b3){ var _2b4=$(_2b3).data("window"); if(_2b4&&_2b4.options.inline){ return {}; }else{ if($._positionFixed){ return {position:"fixed"}; }else{ return {width:$(document).width(),height:$(document).height()}; } } }; $.fn.window.parseOptions=function(_2b5){ return $.extend({},$.fn.panel.parseOptions(_2b5),$.parser.parseOptions(_2b5,[{draggable:"boolean",resizable:"boolean",shadow:"boolean",modal:"boolean",inline:"boolean"}])); }; $.fn.window.defaults=$.extend({},$.fn.panel.defaults,{zIndex:9000,draggable:true,resizable:true,shadow:true,modal:false,border:true,inline:false,title:"New Window",collapsible:true,minimizable:true,maximizable:true,closable:true,closed:false,fixed:false,constrain:false}); })(jQuery); (function($){ function _2b6(_2b7){ var opts=$.data(_2b7,"dialog").options; opts.inited=false; $(_2b7).window($.extend({},opts,{onResize:function(w,h){ if(opts.inited){ _2bc(this); opts.onResize.call(this,w,h); } }})); var win=$(_2b7).window("window"); if(opts.toolbar){ if($.isArray(opts.toolbar)){ $(_2b7).siblings("div.dialog-toolbar").remove(); var _2b8=$("
                              ").appendTo(win); var tr=_2b8.find("tr"); for(var i=0;i
                              ").appendTo(tr); }else{ var td=$("").appendTo(tr); var tool=$("").appendTo(td); tool[0].onclick=eval(btn.handler||function(){ }); tool.linkbutton($.extend({},btn,{plain:true})); } } }else{ $(opts.toolbar).addClass("dialog-toolbar").appendTo(win); $(opts.toolbar).show(); } }else{ $(_2b7).siblings("div.dialog-toolbar").remove(); } if(opts.buttons){ if($.isArray(opts.buttons)){ $(_2b7).siblings("div.dialog-button").remove(); var _2b9=$("
                              ").appendTo(win); for(var i=0;i").appendTo(_2b9); if(p.handler){ _2ba[0].onclick=p.handler; } _2ba.linkbutton(p); } }else{ $(opts.buttons).addClass("dialog-button").appendTo(win); $(opts.buttons).show(); } }else{ $(_2b7).siblings("div.dialog-button").remove(); } opts.inited=true; var _2bb=opts.closed; win.show(); $(_2b7).window("resize",{}); if(_2bb){ win.hide(); } }; function _2bc(_2bd,_2be){ var t=$(_2bd); var opts=t.dialog("options"); var _2bf=opts.noheader; var tb=t.siblings(".dialog-toolbar"); var bb=t.siblings(".dialog-button"); tb.insertBefore(_2bd).css({borderTopWidth:(_2bf?1:0),top:(_2bf?tb.length:0)}); bb.insertAfter(_2bd); tb.add(bb)._outerWidth(t._outerWidth()).find(".easyui-fluid:visible").each(function(){ $(this).triggerHandler("_resize"); }); var _2c0=tb._outerHeight()+bb._outerHeight(); if(!isNaN(parseInt(opts.height))){ t._outerHeight(t._outerHeight()-_2c0); }else{ var _2c1=t._size("min-height"); if(_2c1){ t._size("min-height",_2c1-_2c0); } var _2c2=t._size("max-height"); if(_2c2){ t._size("max-height",_2c2-_2c0); } } var _2c3=$.data(_2bd,"window").shadow; if(_2c3){ var cc=t.panel("panel"); _2c3.css({width:cc._outerWidth(),height:cc._outerHeight()}); } }; $.fn.dialog=function(_2c4,_2c5){ if(typeof _2c4=="string"){ var _2c6=$.fn.dialog.methods[_2c4]; if(_2c6){ return _2c6(this,_2c5); }else{ return this.window(_2c4,_2c5); } } _2c4=_2c4||{}; return this.each(function(){ var _2c7=$.data(this,"dialog"); if(_2c7){ $.extend(_2c7.options,_2c4); }else{ $.data(this,"dialog",{options:$.extend({},$.fn.dialog.defaults,$.fn.dialog.parseOptions(this),_2c4)}); } _2b6(this); }); }; $.fn.dialog.methods={options:function(jq){ var _2c8=$.data(jq[0],"dialog").options; var _2c9=jq.panel("options"); $.extend(_2c8,{width:_2c9.width,height:_2c9.height,left:_2c9.left,top:_2c9.top,closed:_2c9.closed,collapsed:_2c9.collapsed,minimized:_2c9.minimized,maximized:_2c9.maximized}); return _2c8; },dialog:function(jq){ return jq.window("window"); }}; $.fn.dialog.parseOptions=function(_2ca){ var t=$(_2ca); return $.extend({},$.fn.window.parseOptions(_2ca),$.parser.parseOptions(_2ca,["toolbar","buttons"]),{toolbar:(t.children(".dialog-toolbar").length?t.children(".dialog-toolbar").removeClass("dialog-toolbar"):undefined),buttons:(t.children(".dialog-button").length?t.children(".dialog-button").removeClass("dialog-button"):undefined)}); }; $.fn.dialog.defaults=$.extend({},$.fn.window.defaults,{title:"New Dialog",collapsible:false,minimizable:false,maximizable:false,resizable:false,toolbar:null,buttons:null}); })(jQuery); (function($){ function _2cb(){ $(document)._unbind(".messager")._bind("keydown.messager",function(e){ if(e.keyCode==27){ $("body").children("div.messager-window").children("div.messager-body").each(function(){ $(this).dialog("close"); }); }else{ if(e.keyCode==9){ var win=$("body").children("div.messager-window"); if(!win.length){ return; } var _2cc=win.find(".messager-input,.messager-button .l-btn"); for(var i=0;i<_2cc.length;i++){ if($(_2cc[i]).is(":focus")){ $(_2cc[i>=_2cc.length-1?0:i+1]).focus(); return false; } } }else{ if(e.keyCode==13){ var _2cd=$(e.target).closest("input.messager-input"); if(_2cd.length){ var dlg=_2cd.closest(".messager-body"); _2ce(dlg,_2cd.val()); } } } } }); }; function _2cf(){ $(document)._unbind(".messager"); }; function _2d0(_2d1){ var opts=$.extend({},$.messager.defaults,{modal:false,shadow:false,draggable:false,resizable:false,closed:true,style:{left:"",top:"",right:0,zIndex:$.fn.window.defaults.zIndex++,bottom:-document.body.scrollTop-document.documentElement.scrollTop},title:"",width:300,height:150,minHeight:0,showType:"slide",showSpeed:600,content:_2d1.msg,timeout:4000},_2d1); var dlg=$("
                              ").appendTo("body"); dlg.dialog($.extend({},opts,{noheader:(opts.title?false:true),openAnimation:(opts.showType),closeAnimation:(opts.showType=="show"?"hide":opts.showType),openDuration:opts.showSpeed,closeDuration:opts.showSpeed,onOpen:function(){ dlg.dialog("dialog").hover(function(){ if(opts.timer){ clearTimeout(opts.timer); } },function(){ _2d2(); }); _2d2(); function _2d2(){ if(opts.timeout>0){ opts.timer=setTimeout(function(){ if(dlg.length&&dlg.data("dialog")){ dlg.dialog("close"); } },opts.timeout); } }; if(_2d1.onOpen){ _2d1.onOpen.call(this); }else{ opts.onOpen.call(this); } },onClose:function(){ if(opts.timer){ clearTimeout(opts.timer); } if(_2d1.onClose){ _2d1.onClose.call(this); }else{ opts.onClose.call(this); } dlg.dialog("destroy"); }})); dlg.dialog("dialog").css(opts.style); dlg.dialog("open"); return dlg; }; function _2d3(_2d4){ _2cb(); var dlg=$("
                              ").appendTo("body"); dlg.dialog($.extend({},_2d4,{noheader:(_2d4.title?false:true),onClose:function(){ _2cf(); if(_2d4.onClose){ _2d4.onClose.call(this); } dlg.dialog("destroy"); }})); var win=dlg.dialog("dialog").addClass("messager-window"); win.find(".dialog-button").addClass("messager-button").find("a:first").focus(); return dlg; }; function _2ce(dlg,_2d5){ var opts=dlg.dialog("options"); dlg.dialog("close"); opts.fn(_2d5); }; $.messager={show:function(_2d6){ return _2d0(_2d6); },alert:function(_2d7,msg,icon,fn){ var opts=typeof _2d7=="object"?_2d7:{title:_2d7,msg:msg,icon:icon,fn:fn}; var cls=opts.icon?"messager-icon messager-"+opts.icon:""; opts=$.extend({},$.messager.defaults,{content:"
                              "+"
                              "+opts.msg+"
                              "+"
                              "},opts); if(!opts.buttons){ opts.buttons=[{text:opts.ok,onClick:function(){ _2ce(dlg); }}]; } var dlg=_2d3(opts); return dlg; },confirm:function(_2d8,msg,fn){ var opts=typeof _2d8=="object"?_2d8:{title:_2d8,msg:msg,fn:fn}; opts=$.extend({},$.messager.defaults,{content:"
                              "+"
                              "+opts.msg+"
                              "+"
                              "},opts); if(!opts.buttons){ opts.buttons=[{text:opts.ok,onClick:function(){ _2ce(dlg,true); }},{text:opts.cancel,onClick:function(){ _2ce(dlg,false); }}]; } var dlg=_2d3(opts); return dlg; },prompt:function(_2d9,msg,fn){ var opts=typeof _2d9=="object"?_2d9:{title:_2d9,msg:msg,fn:fn}; opts=$.extend({},$.messager.defaults,{content:"
                              "+"
                              "+opts.msg+"
                              "+"
                              "+"
                              "+"
                              "},opts); if(!opts.buttons){ opts.buttons=[{text:opts.ok,onClick:function(){ _2ce(dlg,dlg.find(".messager-input").val()); }},{text:opts.cancel,onClick:function(){ _2ce(dlg); }}]; } var dlg=_2d3(opts); dlg.find(".messager-input").focus(); return dlg; },progress:function(_2da){ var _2db={bar:function(){ return $("body>div.messager-window").find("div.messager-p-bar"); },close:function(){ var dlg=$("body>div.messager-window>div.messager-body:has(div.messager-progress)"); if(dlg.length){ dlg.dialog("close"); } }}; if(typeof _2da=="string"){ var _2dc=_2db[_2da]; return _2dc(); } _2da=_2da||{}; var opts=$.extend({},{title:"",minHeight:0,content:undefined,msg:"",text:undefined,interval:300},_2da); var dlg=_2d3($.extend({},$.messager.defaults,{content:"
                              "+opts.msg+"
                              ",closable:false,doSize:false},opts,{onClose:function(){ if(this.timer){ clearInterval(this.timer); } if(_2da.onClose){ _2da.onClose.call(this); }else{ $.messager.defaults.onClose.call(this); } }})); var bar=dlg.find("div.messager-p-bar"); bar.progressbar({text:opts.text}); dlg.dialog("resize"); if(opts.interval){ dlg[0].timer=setInterval(function(){ var v=bar.progressbar("getValue"); v+=10; if(v>100){ v=0; } bar.progressbar("setValue",v); },opts.interval); } return dlg; }}; $.messager.defaults=$.extend({},$.fn.dialog.defaults,{ok:"Ok",cancel:"Cancel",width:300,height:"auto",minHeight:150,modal:true,collapsible:false,minimizable:false,maximizable:false,resizable:false,fn:function(){ }}); })(jQuery); (function($){ function _2dd(_2de,_2df){ var _2e0=$.data(_2de,"accordion"); var opts=_2e0.options; var _2e1=_2e0.panels; var cc=$(_2de); var _2e2=(opts.halign=="left"||opts.halign=="right"); cc.children(".panel-last").removeClass("panel-last"); cc.children(".panel:last").addClass("panel-last"); if(_2df){ $.extend(opts,{width:_2df.width,height:_2df.height}); } cc._size(opts); var _2e3=0; var _2e4="auto"; var _2e5=cc.find(">.panel>.accordion-header"); if(_2e5.length){ if(_2e2){ $(_2e5[0]).next().panel("resize",{width:cc.width(),height:cc.height()}); _2e3=$(_2e5[0])._outerWidth(); }else{ _2e3=$(_2e5[0]).css("height","")._outerHeight(); } } if(!isNaN(parseInt(opts.height))){ if(_2e2){ _2e4=cc.width()-_2e3*_2e5.length; }else{ _2e4=cc.height()-_2e3*_2e5.length; } } _2e6(true,_2e4-_2e6(false)); function _2e6(_2e7,_2e8){ var _2e9=0; for(var i=0;i<_2e1.length;i++){ var p=_2e1[i]; if(_2e2){ var h=p.panel("header")._outerWidth(_2e3); }else{ var h=p.panel("header")._outerHeight(_2e3); } if(p.panel("options").collapsible==_2e7){ var _2ea=isNaN(_2e8)?undefined:(_2e8+_2e3*h.length); if(_2e2){ p.panel("resize",{height:cc.height(),width:(_2e7?_2ea:undefined)}); _2e9+=p.panel("panel")._outerWidth()-_2e3*h.length; }else{ p.panel("resize",{width:cc.width(),height:(_2e7?_2ea:undefined)}); _2e9+=p.panel("panel").outerHeight()-_2e3*h.length; } } } return _2e9; }; }; function _2eb(_2ec,_2ed,_2ee,all){ var _2ef=$.data(_2ec,"accordion").panels; var pp=[]; for(var i=0;i<_2ef.length;i++){ var p=_2ef[i]; if(_2ed){ if(p.panel("options")[_2ed]==_2ee){ pp.push(p); } }else{ if(p[0]==$(_2ee)[0]){ return i; } } } if(_2ed){ return all?pp:(pp.length?pp[0]:null); }else{ return -1; } }; function _2f0(_2f1){ return _2eb(_2f1,"collapsed",false,true); }; function _2f2(_2f3){ var pp=_2f0(_2f3); return pp.length?pp[0]:null; }; function _2f4(_2f5,_2f6){ return _2eb(_2f5,null,_2f6); }; function _2f7(_2f8,_2f9){ var _2fa=$.data(_2f8,"accordion").panels; if(typeof _2f9=="number"){ if(_2f9<0||_2f9>=_2fa.length){ return null; }else{ return _2fa[_2f9]; } } return _2eb(_2f8,"title",_2f9); }; function _2fb(_2fc){ var opts=$.data(_2fc,"accordion").options; var cc=$(_2fc); if(opts.border){ cc.removeClass("accordion-noborder"); }else{ cc.addClass("accordion-noborder"); } }; function init(_2fd){ var _2fe=$.data(_2fd,"accordion"); var cc=$(_2fd); cc.addClass("accordion"); _2fe.panels=[]; cc.children("div").each(function(){ var opts=$.extend({},$.parser.parseOptions(this),{selected:($(this).attr("selected")?true:undefined)}); var pp=$(this); _2fe.panels.push(pp); _300(_2fd,pp,opts); }); cc._bind("_resize",function(e,_2ff){ if($(this).hasClass("easyui-fluid")||_2ff){ _2dd(_2fd); } return false; }); }; function _300(_301,pp,_302){ var opts=$.data(_301,"accordion").options; pp.panel($.extend({},{collapsible:true,minimizable:false,maximizable:false,closable:false,doSize:false,collapsed:true,headerCls:"accordion-header",bodyCls:"accordion-body",halign:opts.halign},_302,{onBeforeExpand:function(){ if(_302.onBeforeExpand){ if(_302.onBeforeExpand.call(this)==false){ return false; } } if(!opts.multiple){ var all=$.grep(_2f0(_301),function(p){ return p.panel("options").collapsible; }); for(var i=0;i.panel-last>.accordion-header").removeClass("accordion-header-border"); if(_302.onExpand){ _302.onExpand.call(this); } opts.onSelect.call(_301,$(this).panel("options").title,_2f4(_301,this)); },onBeforeCollapse:function(){ if(_302.onBeforeCollapse){ if(_302.onBeforeCollapse.call(this)==false){ return false; } } $(_301).find(">.panel-last>.accordion-header").addClass("accordion-header-border"); var _304=$(this).panel("header"); _304.removeClass("accordion-header-selected"); _304.find(".accordion-collapse").addClass("accordion-expand"); },onCollapse:function(){ if(isNaN(parseInt(opts.height))){ $(_301).find(">.panel-last>.accordion-header").removeClass("accordion-header-border"); } if(_302.onCollapse){ _302.onCollapse.call(this); } opts.onUnselect.call(_301,$(this).panel("options").title,_2f4(_301,this)); }})); var _305=pp.panel("header"); var tool=_305.children("div.panel-tool"); tool.children("a.panel-tool-collapse").hide(); var t=$("").addClass("accordion-collapse accordion-expand").appendTo(tool); t._bind("click",function(){ _306(pp); return false; }); pp.panel("options").collapsible?t.show():t.hide(); if(opts.halign=="left"||opts.halign=="right"){ t.hide(); } _305._bind("click",function(){ _306(pp); return false; }); function _306(p){ var _307=p.panel("options"); if(_307.collapsible){ var _308=_2f4(_301,p); if(_307.collapsed){ _309(_301,_308); }else{ _30a(_301,_308); } } }; }; function _309(_30b,_30c){ var p=_2f7(_30b,_30c); if(!p){ return; } _30d(_30b); var opts=$.data(_30b,"accordion").options; p.panel("expand",opts.animate); }; function _30a(_30e,_30f){ var p=_2f7(_30e,_30f); if(!p){ return; } _30d(_30e); var opts=$.data(_30e,"accordion").options; p.panel("collapse",opts.animate); }; function _310(_311){ var opts=$.data(_311,"accordion").options; $(_311).find(">.panel-last>.accordion-header").addClass("accordion-header-border"); var p=_2eb(_311,"selected",true); if(p){ _312(_2f4(_311,p)); }else{ _312(opts.selected); } function _312(_313){ var _314=opts.animate; opts.animate=false; _309(_311,_313); opts.animate=_314; }; }; function _30d(_315){ var _316=$.data(_315,"accordion").panels; for(var i=0;i<_316.length;i++){ _316[i].stop(true,true); } }; function add(_317,_318){ var _319=$.data(_317,"accordion"); var opts=_319.options; var _31a=_319.panels; if(_318.selected==undefined){ _318.selected=true; } _30d(_317); var pp=$("
                              ").appendTo(_317); _31a.push(pp); _300(_317,pp,_318); _2dd(_317); opts.onAdd.call(_317,_318.title,_31a.length-1); if(_318.selected){ _309(_317,_31a.length-1); } }; function _31b(_31c,_31d){ var _31e=$.data(_31c,"accordion"); var opts=_31e.options; var _31f=_31e.panels; _30d(_31c); var _320=_2f7(_31c,_31d); var _321=_320.panel("options").title; var _322=_2f4(_31c,_320); if(!_320){ return; } if(opts.onBeforeRemove.call(_31c,_321,_322)==false){ return; } _31f.splice(_322,1); _320.panel("destroy"); if(_31f.length){ _2dd(_31c); var curr=_2f2(_31c); if(!curr){ _309(_31c,0); } } opts.onRemove.call(_31c,_321,_322); }; $.fn.accordion=function(_323,_324){ if(typeof _323=="string"){ return $.fn.accordion.methods[_323](this,_324); } _323=_323||{}; return this.each(function(){ var _325=$.data(this,"accordion"); if(_325){ $.extend(_325.options,_323); }else{ $.data(this,"accordion",{options:$.extend({},$.fn.accordion.defaults,$.fn.accordion.parseOptions(this),_323),accordion:$(this).addClass("accordion"),panels:[]}); init(this); } _2fb(this); _2dd(this); _310(this); }); }; $.fn.accordion.methods={options:function(jq){ return $.data(jq[0],"accordion").options; },panels:function(jq){ return $.data(jq[0],"accordion").panels; },resize:function(jq,_326){ return jq.each(function(){ _2dd(this,_326); }); },getSelections:function(jq){ return _2f0(jq[0]); },getSelected:function(jq){ return _2f2(jq[0]); },getPanel:function(jq,_327){ return _2f7(jq[0],_327); },getPanelIndex:function(jq,_328){ return _2f4(jq[0],_328); },select:function(jq,_329){ return jq.each(function(){ _309(this,_329); }); },unselect:function(jq,_32a){ return jq.each(function(){ _30a(this,_32a); }); },add:function(jq,_32b){ return jq.each(function(){ add(this,_32b); }); },remove:function(jq,_32c){ return jq.each(function(){ _31b(this,_32c); }); }}; $.fn.accordion.parseOptions=function(_32d){ var t=$(_32d); return $.extend({},$.parser.parseOptions(_32d,["width","height","halign",{fit:"boolean",border:"boolean",animate:"boolean",multiple:"boolean",selected:"number"}])); }; $.fn.accordion.defaults={width:"auto",height:"auto",fit:false,border:true,animate:true,multiple:false,selected:0,halign:"top",onSelect:function(_32e,_32f){ },onUnselect:function(_330,_331){ },onAdd:function(_332,_333){ },onBeforeRemove:function(_334,_335){ },onRemove:function(_336,_337){ }}; })(jQuery); (function($){ function _338(c){ var w=0; $(c).children().each(function(){ w+=$(this).outerWidth(true); }); return w; }; function _339(_33a){ var opts=$.data(_33a,"tabs").options; if(!opts.showHeader){ return; } var _33b=$(_33a).children("div.tabs-header"); var tool=_33b.children("div.tabs-tool:not(.tabs-tool-hidden)"); var _33c=_33b.children("div.tabs-scroller-left"); var _33d=_33b.children("div.tabs-scroller-right"); var wrap=_33b.children("div.tabs-wrap"); if(opts.tabPosition=="left"||opts.tabPosition=="right"){ if(!tool.length){ return; } tool._outerWidth(_33b.width()); var _33e={left:opts.tabPosition=="left"?"auto":0,right:opts.tabPosition=="left"?0:"auto",top:opts.toolPosition=="top"?0:"auto",bottom:opts.toolPosition=="top"?"auto":0}; var _33f={marginTop:opts.toolPosition=="top"?tool.outerHeight():0}; tool.css(_33e); wrap.css(_33f); return; } var _340=_33b.outerHeight(); if(opts.plain){ _340-=_340-_33b.height(); } tool._outerHeight(_340); var _341=_338(_33b.find("ul.tabs")); var _342=_33b.width()-tool._outerWidth(); if(_341>_342){ _33c.add(_33d).show()._outerHeight(_340); if(opts.toolPosition=="left"){ tool.css({left:_33c.outerWidth(),right:""}); wrap.css({marginLeft:_33c.outerWidth()+tool._outerWidth(),marginRight:_33d._outerWidth(),width:_342-_33c.outerWidth()-_33d.outerWidth()}); }else{ tool.css({left:"",right:_33d.outerWidth()}); wrap.css({marginLeft:_33c.outerWidth(),marginRight:_33d.outerWidth()+tool._outerWidth(),width:_342-_33c.outerWidth()-_33d.outerWidth()}); } }else{ _33c.add(_33d).hide(); if(opts.toolPosition=="left"){ tool.css({left:0,right:""}); wrap.css({marginLeft:tool._outerWidth(),marginRight:0,width:_342}); }else{ tool.css({left:"",right:0}); wrap.css({marginLeft:0,marginRight:tool._outerWidth(),width:_342}); } } }; function _343(_344){ var opts=$.data(_344,"tabs").options; var _345=$(_344).children("div.tabs-header"); if(opts.tools){ if(typeof opts.tools=="string"){ $(opts.tools).addClass("tabs-tool").appendTo(_345); $(opts.tools).show(); }else{ _345.children("div.tabs-tool").remove(); var _346=$("
                              ").appendTo(_345); var tr=_346.find("tr"); for(var i=0;i").appendTo(tr); var tool=$("").appendTo(td); tool[0].onclick=eval(opts.tools[i].handler||function(){ }); tool.linkbutton($.extend({},opts.tools[i],{plain:true})); } } }else{ _345.children("div.tabs-tool").remove(); } }; function _347(_348,_349){ var _34a=$.data(_348,"tabs"); var opts=_34a.options; var cc=$(_348); if(!opts.doSize){ return; } if(_349){ $.extend(opts,{width:_349.width,height:_349.height}); } cc._size(opts); var _34b=cc.children("div.tabs-header"); var _34c=cc.children("div.tabs-panels"); var wrap=_34b.find("div.tabs-wrap"); var ul=wrap.find(".tabs"); ul.children("li").removeClass("tabs-first tabs-last"); ul.children("li:first").addClass("tabs-first"); ul.children("li:last").addClass("tabs-last"); if(opts.tabPosition=="left"||opts.tabPosition=="right"){ _34b._outerWidth(opts.showHeader?opts.headerWidth:0); _34c._outerWidth(cc.width()-_34b.outerWidth()); _34b.add(_34c)._size("height",isNaN(parseInt(opts.height))?"":cc.height()); wrap._outerWidth(_34b.width()); ul._outerWidth(wrap.width()).css("height",""); }else{ _34b.children("div.tabs-scroller-left,div.tabs-scroller-right,div.tabs-tool:not(.tabs-tool-hidden)").css("display",opts.showHeader?"block":"none"); _34b._outerWidth(cc.width()).css("height",""); if(opts.showHeader){ _34b.css("background-color",""); wrap.css("height",""); }else{ _34b.css("background-color","transparent"); _34b._outerHeight(0); wrap._outerHeight(0); } ul._outerHeight(opts.tabHeight).css("width",""); ul._outerHeight(ul.outerHeight()-ul.height()-1+opts.tabHeight).css("width",""); _34c._size("height",isNaN(parseInt(opts.height))?"":(cc.height()-_34b.outerHeight())); _34c._size("width",cc.width()); } if(_34a.tabs.length){ var d1=ul.outerWidth(true)-ul.width(); var li=ul.children("li:first"); var d2=li.outerWidth(true)-li.width(); var _34d=_34b.width()-_34b.children(".tabs-tool:not(.tabs-tool-hidden)")._outerWidth(); var _34e=Math.floor((_34d-d1-d2*_34a.tabs.length)/_34a.tabs.length); $.map(_34a.tabs,function(p){ _34f(p,(opts.justified&&$.inArray(opts.tabPosition,["top","bottom"])>=0)?_34e:undefined); }); if(opts.justified&&$.inArray(opts.tabPosition,["top","bottom"])>=0){ var _350=_34d-d1-_338(ul); _34f(_34a.tabs[_34a.tabs.length-1],_34e+_350); } } _339(_348); function _34f(p,_351){ var _352=p.panel("options"); var p_t=_352.tab.find("a.tabs-inner"); var _351=_351?_351:(parseInt(_352.tabWidth||opts.tabWidth||undefined)); if(_351){ p_t._outerWidth(_351); }else{ p_t.css("width",""); } p_t._outerHeight(opts.tabHeight); p_t.css("lineHeight",p_t.height()+"px"); p_t.find(".easyui-fluid:visible").triggerHandler("_resize"); }; }; function _353(_354){ var opts=$.data(_354,"tabs").options; var tab=_355(_354); if(tab){ var _356=$(_354).children("div.tabs-panels"); var _357=opts.width=="auto"?"auto":_356.width(); var _358=opts.height=="auto"?"auto":_356.height(); tab.panel("resize",{width:_357,height:_358}); } }; function _359(_35a){ var tabs=$.data(_35a,"tabs").tabs; var cc=$(_35a).addClass("tabs-container"); var _35b=$("
                              ").insertBefore(cc); cc.children("div").each(function(){ _35b[0].appendChild(this); }); cc[0].appendChild(_35b[0]); $("
                              "+"
                              "+"
                              "+"
                              "+"
                                "+"
                                "+"
                                ").prependTo(_35a); cc.children("div.tabs-panels").children("div").each(function(i){ var opts=$.extend({},$.parser.parseOptions(this),{disabled:($(this).attr("disabled")?true:undefined),selected:($(this).attr("selected")?true:undefined)}); _368(_35a,opts,$(this)); }); cc.children("div.tabs-header").find(".tabs-scroller-left, .tabs-scroller-right")._bind("mouseenter",function(){ $(this).addClass("tabs-scroller-over"); })._bind("mouseleave",function(){ $(this).removeClass("tabs-scroller-over"); }); cc._bind("_resize",function(e,_35c){ if($(this).hasClass("easyui-fluid")||_35c){ _347(_35a); _353(_35a); } return false; }); }; function _35d(_35e){ var _35f=$.data(_35e,"tabs"); var opts=_35f.options; $(_35e).children("div.tabs-header")._unbind()._bind("click",function(e){ if($(e.target).hasClass("tabs-scroller-left")){ $(_35e).tabs("scrollBy",-opts.scrollIncrement); }else{ if($(e.target).hasClass("tabs-scroller-right")){ $(_35e).tabs("scrollBy",opts.scrollIncrement); }else{ var li=$(e.target).closest("li"); if(li.hasClass("tabs-disabled")){ return false; } var a=$(e.target).closest("a.tabs-close"); if(a.length){ _382(_35e,_360(li)); }else{ if(li.length){ var _361=_360(li); var _362=_35f.tabs[_361].panel("options"); if(_362.collapsible){ _362.closed?_379(_35e,_361):_399(_35e,_361); }else{ _379(_35e,_361); } } } return false; } } })._bind("contextmenu",function(e){ var li=$(e.target).closest("li"); if(li.hasClass("tabs-disabled")){ return; } if(li.length){ opts.onContextMenu.call(_35e,e,li.find("span.tabs-title").html(),_360(li)); } }); function _360(li){ var _363=0; li.parent().children("li").each(function(i){ if(li[0]==this){ _363=i; return false; } }); return _363; }; }; function _364(_365){ var opts=$.data(_365,"tabs").options; var _366=$(_365).children("div.tabs-header"); var _367=$(_365).children("div.tabs-panels"); _366.removeClass("tabs-header-top tabs-header-bottom tabs-header-left tabs-header-right"); _367.removeClass("tabs-panels-top tabs-panels-bottom tabs-panels-left tabs-panels-right"); if(opts.tabPosition=="top"){ _366.insertBefore(_367); }else{ if(opts.tabPosition=="bottom"){ _366.insertAfter(_367); _366.addClass("tabs-header-bottom"); _367.addClass("tabs-panels-top"); }else{ if(opts.tabPosition=="left"){ _366.addClass("tabs-header-left"); _367.addClass("tabs-panels-right"); }else{ if(opts.tabPosition=="right"){ _366.addClass("tabs-header-right"); _367.addClass("tabs-panels-left"); } } } } if(opts.plain==true){ _366.addClass("tabs-header-plain"); }else{ _366.removeClass("tabs-header-plain"); } _366.removeClass("tabs-header-narrow").addClass(opts.narrow?"tabs-header-narrow":""); var tabs=_366.find(".tabs"); tabs.removeClass("tabs-pill").addClass(opts.pill?"tabs-pill":""); tabs.removeClass("tabs-narrow").addClass(opts.narrow?"tabs-narrow":""); tabs.removeClass("tabs-justified").addClass(opts.justified?"tabs-justified":""); if(opts.border==true){ _366.removeClass("tabs-header-noborder"); _367.removeClass("tabs-panels-noborder"); }else{ _366.addClass("tabs-header-noborder"); _367.addClass("tabs-panels-noborder"); } opts.doSize=true; }; function _368(_369,_36a,pp){ _36a=_36a||{}; var _36b=$.data(_369,"tabs"); var tabs=_36b.tabs; if(_36a.index==undefined||_36a.index>tabs.length){ _36a.index=tabs.length; } if(_36a.index<0){ _36a.index=0; } var ul=$(_369).children("div.tabs-header").find("ul.tabs"); var _36c=$(_369).children("div.tabs-panels"); var tab=$("
                              • "+""+""+""+""+"
                              • "); if(!pp){ pp=$("
                                "); } if(_36a.index>=tabs.length){ tab.appendTo(ul); pp.appendTo(_36c); tabs.push(pp); }else{ tab.insertBefore(ul.children("li:eq("+_36a.index+")")); pp.insertBefore(_36c.children("div.panel:eq("+_36a.index+")")); tabs.splice(_36a.index,0,pp); } pp.panel($.extend({},_36a,{tab:tab,border:false,noheader:true,closed:true,doSize:false,iconCls:(_36a.icon?_36a.icon:undefined),onLoad:function(){ if(_36a.onLoad){ _36a.onLoad.apply(this,arguments); } _36b.options.onLoad.call(_369,$(this)); },onBeforeOpen:function(){ if(_36a.onBeforeOpen){ if(_36a.onBeforeOpen.call(this)==false){ return false; } } var p=$(_369).tabs("getSelected"); if(p){ if(p[0]!=this){ $(_369).tabs("unselect",_374(_369,p)); p=$(_369).tabs("getSelected"); if(p){ return false; } }else{ _353(_369); return false; } } var _36d=$(this).panel("options"); _36d.tab.addClass("tabs-selected"); var wrap=$(_369).find(">div.tabs-header>div.tabs-wrap"); var left=_36d.tab.position().left; var _36e=left+_36d.tab.outerWidth(); if(left<0||_36e>wrap.width()){ var _36f=left-(wrap.width()-_36d.tab.width())/2; $(_369).tabs("scrollBy",_36f); }else{ $(_369).tabs("scrollBy",0); } var _370=$(this).panel("panel"); _370.css("display","block"); _353(_369); _370.css("display","none"); },onOpen:function(){ if(_36a.onOpen){ _36a.onOpen.call(this); } var _371=$(this).panel("options"); var _372=_374(_369,this); _36b.selectHis.push(_372); _36b.options.onSelect.call(_369,_371.title,_372); },onBeforeClose:function(){ if(_36a.onBeforeClose){ if(_36a.onBeforeClose.call(this)==false){ return false; } } $(this).panel("options").tab.removeClass("tabs-selected"); },onClose:function(){ if(_36a.onClose){ _36a.onClose.call(this); } var _373=$(this).panel("options"); _36b.options.onUnselect.call(_369,_373.title,_374(_369,this)); }})); $(_369).tabs("update",{tab:pp,options:pp.panel("options"),type:"header"}); }; function _375(_376,_377){ var _378=$.data(_376,"tabs"); var opts=_378.options; if(_377.selected==undefined){ _377.selected=true; } _368(_376,_377); opts.onAdd.call(_376,_377.title,_377.index); if(_377.selected){ _379(_376,_377.index); } }; function _37a(_37b,_37c){ _37c.type=_37c.type||"all"; var _37d=$.data(_37b,"tabs").selectHis; var pp=_37c.tab; var opts=pp.panel("options"); var _37e=opts.title; $.extend(opts,_37c.options,{iconCls:(_37c.options.icon?_37c.options.icon:undefined)}); if(_37c.type=="all"||_37c.type=="body"){ pp.panel(); } if(_37c.type=="all"||_37c.type=="header"){ var tab=opts.tab; if(opts.header){ tab.find(".tabs-inner").html($(opts.header)); }else{ var _37f=tab.find("span.tabs-title"); var _380=tab.find("span.tabs-icon"); _37f.html(opts.title); _380.attr("class","tabs-icon"); tab.find("a.tabs-close").remove(); if(opts.closable){ _37f.addClass("tabs-closable"); $("").appendTo(tab); }else{ _37f.removeClass("tabs-closable"); } if(opts.iconCls){ _37f.addClass("tabs-with-icon"); _380.addClass(opts.iconCls); }else{ _37f.removeClass("tabs-with-icon"); } if(opts.tools){ var _381=tab.find("span.tabs-p-tool"); if(!_381.length){ var _381=$("").insertAfter(tab.find("a.tabs-inner")); } if($.isArray(opts.tools)){ _381.empty(); for(var i=0;i").appendTo(_381); t.addClass(opts.tools[i].iconCls); if(opts.tools[i].handler){ t._bind("click",{handler:opts.tools[i].handler},function(e){ if($(this).parents("li").hasClass("tabs-disabled")){ return; } e.data.handler.call(this); }); } } }else{ $(opts.tools).children().appendTo(_381); } var pr=_381.children().length*12; if(opts.closable){ pr+=8; _381.css("right",""); }else{ pr-=3; _381.css("right","5px"); } _37f.css("padding-right",pr+"px"); }else{ tab.find("span.tabs-p-tool").remove(); _37f.css("padding-right",""); } } } if(opts.disabled){ opts.tab.addClass("tabs-disabled"); }else{ opts.tab.removeClass("tabs-disabled"); } _347(_37b); $.data(_37b,"tabs").options.onUpdate.call(_37b,opts.title,_374(_37b,pp)); }; function _382(_383,_384){ var _385=$.data(_383,"tabs"); var opts=_385.options; var tabs=_385.tabs; var _386=_385.selectHis; if(!_387(_383,_384)){ return; } var tab=_388(_383,_384); var _389=tab.panel("options").title; var _38a=_374(_383,tab); if(opts.onBeforeClose.call(_383,_389,_38a)==false){ return; } var tab=_388(_383,_384,true); tab.panel("options").tab.remove(); tab.panel("destroy"); opts.onClose.call(_383,_389,_38a); _347(_383); var his=[]; for(var i=0;i<_386.length;i++){ var _38b=_386[i]; if(_38b!=_38a){ his.push(_38b>_38a?_38b-1:_38b); } } _385.selectHis=his; var _38c=$(_383).tabs("getSelected"); if(!_38c&&his.length){ _38a=_385.selectHis.pop(); $(_383).tabs("select",_38a); } }; function _388(_38d,_38e,_38f){ var tabs=$.data(_38d,"tabs").tabs; var tab=null; if(typeof _38e=="number"){ if(_38e>=0&&_38e"); for(var i=0;i.tabs-header>.tabs-tool"); if(_3a4){ tool.removeClass("tabs-tool-hidden").show(); }else{ tool.addClass("tabs-tool-hidden").hide(); } $(_3a3).tabs("resize").tabs("scrollBy",0); }; $.fn.tabs=function(_3a5,_3a6){ if(typeof _3a5=="string"){ return $.fn.tabs.methods[_3a5](this,_3a6); } _3a5=_3a5||{}; return this.each(function(){ var _3a7=$.data(this,"tabs"); if(_3a7){ $.extend(_3a7.options,_3a5); }else{ $.data(this,"tabs",{options:$.extend({},$.fn.tabs.defaults,$.fn.tabs.parseOptions(this),_3a5),tabs:[],selectHis:[]}); _359(this); } _343(this); _364(this); _347(this); _35d(this); _393(this); }); }; $.fn.tabs.methods={options:function(jq){ var cc=jq[0]; var opts=$.data(cc,"tabs").options; var s=_355(cc); opts.selected=s?_374(cc,s):-1; return opts; },tabs:function(jq){ return $.data(jq[0],"tabs").tabs; },resize:function(jq,_3a8){ return jq.each(function(){ _347(this,_3a8); _353(this); }); },add:function(jq,_3a9){ return jq.each(function(){ _375(this,_3a9); }); },close:function(jq,_3aa){ return jq.each(function(){ _382(this,_3aa); }); },getTab:function(jq,_3ab){ return _388(jq[0],_3ab); },getTabIndex:function(jq,tab){ return _374(jq[0],tab); },getSelected:function(jq){ return _355(jq[0]); },select:function(jq,_3ac){ return jq.each(function(){ _379(this,_3ac); }); },unselect:function(jq,_3ad){ return jq.each(function(){ _399(this,_3ad); }); },exists:function(jq,_3ae){ return _387(jq[0],_3ae); },update:function(jq,_3af){ return jq.each(function(){ _37a(this,_3af); }); },enableTab:function(jq,_3b0){ return jq.each(function(){ var opts=$(this).tabs("getTab",_3b0).panel("options"); opts.tab.removeClass("tabs-disabled"); opts.disabled=false; }); },disableTab:function(jq,_3b1){ return jq.each(function(){ var opts=$(this).tabs("getTab",_3b1).panel("options"); opts.tab.addClass("tabs-disabled"); opts.disabled=true; }); },showHeader:function(jq){ return jq.each(function(){ _39f(this,true); }); },hideHeader:function(jq){ return jq.each(function(){ _39f(this,false); }); },showTool:function(jq){ return jq.each(function(){ _3a2(this,true); }); },hideTool:function(jq){ return jq.each(function(){ _3a2(this,false); }); },scrollBy:function(jq,_3b2){ return jq.each(function(){ var opts=$(this).tabs("options"); var wrap=$(this).find(">div.tabs-header>div.tabs-wrap"); var pos=Math.min(wrap._scrollLeft()+_3b2,_3b3()); wrap.animate({scrollLeft:pos},opts.scrollDuration); function _3b3(){ var w=0; var ul=wrap.children("ul"); ul.children("li").each(function(){ w+=$(this).outerWidth(true); }); return w-wrap.width()+(ul.outerWidth()-ul.width()); }; }); }}; $.fn.tabs.parseOptions=function(_3b4){ return $.extend({},$.parser.parseOptions(_3b4,["tools","toolPosition","tabPosition",{fit:"boolean",border:"boolean",plain:"boolean"},{headerWidth:"number",tabWidth:"number",tabHeight:"number",selected:"number"},{showHeader:"boolean",justified:"boolean",narrow:"boolean",pill:"boolean"}])); }; $.fn.tabs.defaults={width:"auto",height:"auto",headerWidth:150,tabWidth:"auto",tabHeight:32,selected:0,showHeader:true,plain:false,fit:false,border:true,justified:false,narrow:false,pill:false,tools:null,toolPosition:"right",tabPosition:"top",scrollIncrement:100,scrollDuration:400,onLoad:function(_3b5){ },onSelect:function(_3b6,_3b7){ },onUnselect:function(_3b8,_3b9){ },onBeforeClose:function(_3ba,_3bb){ },onClose:function(_3bc,_3bd){ },onAdd:function(_3be,_3bf){ },onUpdate:function(_3c0,_3c1){ },onContextMenu:function(e,_3c2,_3c3){ }}; })(jQuery); (function($){ var _3c4=false; function _3c5(_3c6,_3c7){ var _3c8=$.data(_3c6,"layout"); var opts=_3c8.options; var _3c9=_3c8.panels; var cc=$(_3c6); if(_3c7){ $.extend(opts,{width:_3c7.width,height:_3c7.height}); } if(_3c6.tagName.toLowerCase()=="body"){ cc._size("fit"); }else{ cc._size(opts); } var cpos={top:0,left:0,width:cc.width(),height:cc.height()}; _3ca(_3cb(_3c9.expandNorth)?_3c9.expandNorth:_3c9.north,"n"); _3ca(_3cb(_3c9.expandSouth)?_3c9.expandSouth:_3c9.south,"s"); _3cc(_3cb(_3c9.expandEast)?_3c9.expandEast:_3c9.east,"e"); _3cc(_3cb(_3c9.expandWest)?_3c9.expandWest:_3c9.west,"w"); _3c9.center.panel("resize",cpos); function _3ca(pp,type){ if(!pp.length||!_3cb(pp)){ return; } var opts=pp.panel("options"); pp.panel("resize",{width:cc.width(),height:opts.height}); var _3cd=pp.panel("panel").outerHeight(); pp.panel("move",{left:0,top:(type=="n"?0:cc.height()-_3cd)}); cpos.height-=_3cd; if(type=="n"){ cpos.top+=_3cd; if(!opts.split&&opts.border){ cpos.top--; } } if(!opts.split&&opts.border){ cpos.height++; } }; function _3cc(pp,type){ if(!pp.length||!_3cb(pp)){ return; } var opts=pp.panel("options"); pp.panel("resize",{width:opts.width,height:cpos.height}); var _3ce=pp.panel("panel").outerWidth(); pp.panel("move",{left:(type=="e"?cc.width()-_3ce:0),top:cpos.top}); cpos.width-=_3ce; if(type=="w"){ cpos.left+=_3ce; if(!opts.split&&opts.border){ cpos.left--; } } if(!opts.split&&opts.border){ cpos.width++; } }; }; function init(_3cf){ var cc=$(_3cf); cc.addClass("layout"); function _3d0(el){ var _3d1=$.fn.layout.parsePanelOptions(el); if("north,south,east,west,center".indexOf(_3d1.region)>=0){ _3d4(_3cf,_3d1,el); } }; var opts=cc.layout("options"); var _3d2=opts.onAdd; opts.onAdd=function(){ }; cc.find(">div,>form>div").each(function(){ _3d0(this); }); opts.onAdd=_3d2; cc.append("
                                "); cc._bind("_resize",function(e,_3d3){ if($(this).hasClass("easyui-fluid")||_3d3){ _3c5(_3cf); } return false; }); }; function _3d4(_3d5,_3d6,el){ _3d6.region=_3d6.region||"center"; var _3d7=$.data(_3d5,"layout").panels; var cc=$(_3d5); var dir=_3d6.region; if(_3d7[dir].length){ return; } var pp=$(el); if(!pp.length){ pp=$("
                                ").appendTo(cc); } var _3d8=$.extend({},$.fn.layout.paneldefaults,{width:(pp.length?parseInt(pp[0].style.width)||pp.outerWidth():"auto"),height:(pp.length?parseInt(pp[0].style.height)||pp.outerHeight():"auto"),doSize:false,collapsible:true,onOpen:function(){ var tool=$(this).panel("header").children("div.panel-tool"); tool.children("a.panel-tool-collapse").hide(); var _3d9={north:"up",south:"down",east:"right",west:"left"}; if(!_3d9[dir]){ return; } var _3da="layout-button-"+_3d9[dir]; var t=tool.children("a."+_3da); if(!t.length){ t=$("").addClass(_3da).appendTo(tool); t._bind("click",{dir:dir},function(e){ _3f1(_3d5,e.data.dir); return false; }); } $(this).panel("options").collapsible?t.show():t.hide(); }},_3d6,{cls:((_3d6.cls||"")+" layout-panel layout-panel-"+dir),bodyCls:((_3d6.bodyCls||"")+" layout-body")}); pp.panel(_3d8); _3d7[dir]=pp; var _3db={north:"s",south:"n",east:"w",west:"e"}; var _3dc=pp.panel("panel"); if(pp.panel("options").split){ _3dc.addClass("layout-split-"+dir); } _3dc.resizable($.extend({},{handles:(_3db[dir]||""),disabled:(!pp.panel("options").split),onStartResize:function(e){ _3c4=true; if(dir=="north"||dir=="south"){ var _3dd=$(">div.layout-split-proxy-v",_3d5); }else{ var _3dd=$(">div.layout-split-proxy-h",_3d5); } var top=0,left=0,_3de=0,_3df=0; var pos={display:"block"}; if(dir=="north"){ pos.top=parseInt(_3dc.css("top"))+_3dc.outerHeight()-_3dd.height(); pos.left=parseInt(_3dc.css("left")); pos.width=_3dc.outerWidth(); pos.height=_3dd.height(); }else{ if(dir=="south"){ pos.top=parseInt(_3dc.css("top")); pos.left=parseInt(_3dc.css("left")); pos.width=_3dc.outerWidth(); pos.height=_3dd.height(); }else{ if(dir=="east"){ pos.top=parseInt(_3dc.css("top"))||0; pos.left=parseInt(_3dc.css("left"))||0; pos.width=_3dd.width(); pos.height=_3dc.outerHeight(); }else{ if(dir=="west"){ pos.top=parseInt(_3dc.css("top"))||0; pos.left=_3dc.outerWidth()-_3dd.width(); pos.width=_3dd.width(); pos.height=_3dc.outerHeight(); } } } } _3dd.css(pos); $("
                                ").css({left:0,top:0,width:cc.width(),height:cc.height()}).appendTo(cc); },onResize:function(e){ if(dir=="north"||dir=="south"){ var _3e0=_3e1(this); $(this).resizable("options").maxHeight=_3e0; var _3e2=$(">div.layout-split-proxy-v",_3d5); var top=dir=="north"?e.data.height-_3e2.height():$(_3d5).height()-e.data.height; _3e2.css("top",top); }else{ var _3e3=_3e1(this); $(this).resizable("options").maxWidth=_3e3; var _3e2=$(">div.layout-split-proxy-h",_3d5); var left=dir=="west"?e.data.width-_3e2.width():$(_3d5).width()-e.data.width; _3e2.css("left",left); } return false; },onStopResize:function(e){ cc.children("div.layout-split-proxy-v,div.layout-split-proxy-h").hide(); pp.panel("resize",e.data); _3c5(_3d5); _3c4=false; cc.find(">div.layout-mask").remove(); }},_3d6)); cc.layout("options").onAdd.call(_3d5,dir); function _3e1(p){ var _3e4="expand"+dir.substring(0,1).toUpperCase()+dir.substring(1); var _3e5=_3d7["center"]; var _3e6=(dir=="north"||dir=="south")?"minHeight":"minWidth"; var _3e7=(dir=="north"||dir=="south")?"maxHeight":"maxWidth"; var _3e8=(dir=="north"||dir=="south")?"_outerHeight":"_outerWidth"; var _3e9=$.parser.parseValue(_3e7,_3d7[dir].panel("options")[_3e7],$(_3d5)); var _3ea=$.parser.parseValue(_3e6,_3e5.panel("options")[_3e6],$(_3d5)); var _3eb=_3e5.panel("panel")[_3e8]()-_3ea; if(_3cb(_3d7[_3e4])){ _3eb+=_3d7[_3e4][_3e8]()-1; }else{ _3eb+=$(p)[_3e8](); } if(_3eb>_3e9){ _3eb=_3e9; } return _3eb; }; }; function _3ec(_3ed,_3ee){ var _3ef=$.data(_3ed,"layout").panels; if(_3ef[_3ee].length){ _3ef[_3ee].panel("destroy"); _3ef[_3ee]=$(); var _3f0="expand"+_3ee.substring(0,1).toUpperCase()+_3ee.substring(1); if(_3ef[_3f0]){ _3ef[_3f0].panel("destroy"); _3ef[_3f0]=undefined; } $(_3ed).layout("options").onRemove.call(_3ed,_3ee); } }; function _3f1(_3f2,_3f3,_3f4){ if(_3f4==undefined){ _3f4="normal"; } var _3f5=$.data(_3f2,"layout").panels; var p=_3f5[_3f3]; var _3f6=p.panel("options"); if(_3f6.onBeforeCollapse.call(p)==false){ return; } var _3f7="expand"+_3f3.substring(0,1).toUpperCase()+_3f3.substring(1); if(!_3f5[_3f7]){ _3f5[_3f7]=_3f8(_3f3); var ep=_3f5[_3f7].panel("panel"); if(!_3f6.expandMode){ ep.css("cursor","default"); }else{ ep._bind("click",function(){ if(_3f6.expandMode=="dock"){ _405(_3f2,_3f3); }else{ p.panel("expand",false).panel("open"); var _3f9=_3fa(); p.panel("resize",_3f9.collapse); p.panel("panel")._unbind(".layout")._bind("mouseleave.layout",{region:_3f3},function(e){ $(this).stop(true,true); if(_3c4==true){ return; } if($("body>div.combo-p>div.combo-panel:visible").length){ return; } _3f1(_3f2,e.data.region); }); p.panel("panel").animate(_3f9.expand,function(){ $(_3f2).layout("options").onExpand.call(_3f2,_3f3); }); } return false; }); } } var _3fb=_3fa(); if(!_3cb(_3f5[_3f7])){ _3f5.center.panel("resize",_3fb.resizeC); } p.panel("panel").animate(_3fb.collapse,_3f4,function(){ p.panel("collapse",false).panel("close"); _3f5[_3f7].panel("open").panel("resize",_3fb.expandP); $(this)._unbind(".layout"); $(_3f2).layout("options").onCollapse.call(_3f2,_3f3); }); function _3f8(dir){ var _3fc={"east":"left","west":"right","north":"down","south":"up"}; var isns=(_3f6.region=="north"||_3f6.region=="south"); var icon="layout-button-"+_3fc[dir]; var p=$("
                                ").appendTo(_3f2); p.panel($.extend({},$.fn.layout.paneldefaults,{cls:("layout-expand layout-expand-"+dir),title:" ",titleDirection:_3f6.titleDirection,iconCls:(_3f6.hideCollapsedContent?null:_3f6.iconCls),closed:true,minWidth:0,minHeight:0,doSize:false,region:_3f6.region,collapsedSize:_3f6.collapsedSize,noheader:(!isns&&_3f6.hideExpandTool),tools:((isns&&_3f6.hideExpandTool)?null:[{iconCls:icon,handler:function(){ _405(_3f2,_3f3); return false; }}]),onResize:function(){ var _3fd=$(this).children(".layout-expand-title"); if(_3fd.length){ var icon=$(this).children(".panel-icon"); var _3fe=icon.length>0?(icon._outerHeight()+2):0; _3fd._outerWidth($(this).height()-_3fe); var left=($(this).width()-Math.min(_3fd._outerWidth(),_3fd._outerHeight()))/2; var top=Math.max(_3fd._outerWidth(),_3fd._outerHeight()); if(_3fd.hasClass("layout-expand-title-down")){ left+=Math.min(_3fd._outerWidth(),_3fd._outerHeight()); top=0; } top+=_3fe; _3fd.css({left:(left+"px"),top:(top+"px")}); } }})); if(!_3f6.hideCollapsedContent){ var _3ff=typeof _3f6.collapsedContent=="function"?_3f6.collapsedContent.call(p[0],_3f6.title):_3f6.collapsedContent; isns?p.panel("setTitle",_3ff):p.html(_3ff); } p.panel("panel").hover(function(){ $(this).addClass("layout-expand-over"); },function(){ $(this).removeClass("layout-expand-over"); }); return p; }; function _3fa(){ var cc=$(_3f2); var _400=_3f5.center.panel("options"); var _401=_3f6.collapsedSize; if(_3f3=="east"){ var _402=p.panel("panel")._outerWidth(); var _403=_400.width+_402-_401; if(_3f6.split||!_3f6.border){ _403++; } return {resizeC:{width:_403},expand:{left:cc.width()-_402},expandP:{top:_400.top,left:cc.width()-_401,width:_401,height:_400.height},collapse:{left:cc.width(),top:_400.top,height:_400.height}}; }else{ if(_3f3=="west"){ var _402=p.panel("panel")._outerWidth(); var _403=_400.width+_402-_401; if(_3f6.split||!_3f6.border){ _403++; } return {resizeC:{width:_403,left:_401-1},expand:{left:0},expandP:{left:0,top:_400.top,width:_401,height:_400.height},collapse:{left:-_402,top:_400.top,height:_400.height}}; }else{ if(_3f3=="north"){ var _404=p.panel("panel")._outerHeight(); var hh=_400.height; if(!_3cb(_3f5.expandNorth)){ hh+=_404-_401+((_3f6.split||!_3f6.border)?1:0); } _3f5.east.add(_3f5.west).add(_3f5.expandEast).add(_3f5.expandWest).panel("resize",{top:_401-1,height:hh}); return {resizeC:{top:_401-1,height:hh},expand:{top:0},expandP:{top:0,left:0,width:cc.width(),height:_401},collapse:{top:-_404,width:cc.width()}}; }else{ if(_3f3=="south"){ var _404=p.panel("panel")._outerHeight(); var hh=_400.height; if(!_3cb(_3f5.expandSouth)){ hh+=_404-_401+((_3f6.split||!_3f6.border)?1:0); } _3f5.east.add(_3f5.west).add(_3f5.expandEast).add(_3f5.expandWest).panel("resize",{height:hh}); return {resizeC:{height:hh},expand:{top:cc.height()-_404},expandP:{top:cc.height()-_401,left:0,width:cc.width(),height:_401},collapse:{top:cc.height(),width:cc.width()}}; } } } } }; }; function _405(_406,_407){ var _408=$.data(_406,"layout").panels; var p=_408[_407]; var _409=p.panel("options"); if(_409.onBeforeExpand.call(p)==false){ return; } var _40a="expand"+_407.substring(0,1).toUpperCase()+_407.substring(1); if(_408[_40a]){ _408[_40a].panel("close"); p.panel("panel").stop(true,true); p.panel("expand",false).panel("open"); var _40b=_40c(); p.panel("resize",_40b.collapse); p.panel("panel").animate(_40b.expand,function(){ _3c5(_406); $(_406).layout("options").onExpand.call(_406,_407); }); } function _40c(){ var cc=$(_406); var _40d=_408.center.panel("options"); if(_407=="east"&&_408.expandEast){ return {collapse:{left:cc.width(),top:_40d.top,height:_40d.height},expand:{left:cc.width()-p.panel("panel")._outerWidth()}}; }else{ if(_407=="west"&&_408.expandWest){ return {collapse:{left:-p.panel("panel")._outerWidth(),top:_40d.top,height:_40d.height},expand:{left:0}}; }else{ if(_407=="north"&&_408.expandNorth){ return {collapse:{top:-p.panel("panel")._outerHeight(),width:cc.width()},expand:{top:0}}; }else{ if(_407=="south"&&_408.expandSouth){ return {collapse:{top:cc.height(),width:cc.width()},expand:{top:cc.height()-p.panel("panel")._outerHeight()}}; } } } } }; }; function _3cb(pp){ if(!pp){ return false; } if(pp.length){ return pp.panel("panel").is(":visible"); }else{ return false; } }; function _40e(_40f){ var _410=$.data(_40f,"layout"); var opts=_410.options; var _411=_410.panels; var _412=opts.onCollapse; opts.onCollapse=function(){ }; _413("east"); _413("west"); _413("north"); _413("south"); opts.onCollapse=_412; function _413(_414){ var p=_411[_414]; if(p.length&&p.panel("options").collapsed){ _3f1(_40f,_414,0); } }; }; function _415(_416,_417,_418){ var p=$(_416).layout("panel",_417); p.panel("options").split=_418; var cls="layout-split-"+_417; var _419=p.panel("panel").removeClass(cls); if(_418){ _419.addClass(cls); } _419.resizable({disabled:(!_418)}); _3c5(_416); }; $.fn.layout=function(_41a,_41b){ if(typeof _41a=="string"){ return $.fn.layout.methods[_41a](this,_41b); } _41a=_41a||{}; return this.each(function(){ var _41c=$.data(this,"layout"); if(_41c){ $.extend(_41c.options,_41a); }else{ var opts=$.extend({},$.fn.layout.defaults,$.fn.layout.parseOptions(this),_41a); $.data(this,"layout",{options:opts,panels:{center:$(),north:$(),south:$(),east:$(),west:$()}}); init(this); } _3c5(this); _40e(this); }); }; $.fn.layout.methods={options:function(jq){ return $.data(jq[0],"layout").options; },resize:function(jq,_41d){ return jq.each(function(){ _3c5(this,_41d); }); },panel:function(jq,_41e){ return $.data(jq[0],"layout").panels[_41e]; },collapse:function(jq,_41f){ return jq.each(function(){ _3f1(this,_41f); }); },expand:function(jq,_420){ return jq.each(function(){ _405(this,_420); }); },add:function(jq,_421){ return jq.each(function(){ _3d4(this,_421); _3c5(this); if($(this).layout("panel",_421.region).panel("options").collapsed){ _3f1(this,_421.region,0); } }); },remove:function(jq,_422){ return jq.each(function(){ _3ec(this,_422); _3c5(this); }); },split:function(jq,_423){ return jq.each(function(){ _415(this,_423,true); }); },unsplit:function(jq,_424){ return jq.each(function(){ _415(this,_424,false); }); }}; $.fn.layout.parseOptions=function(_425){ return $.extend({},$.parser.parseOptions(_425,[{fit:"boolean"}])); }; $.fn.layout.defaults={fit:false,onExpand:function(_426){ },onCollapse:function(_427){ },onAdd:function(_428){ },onRemove:function(_429){ }}; $.fn.layout.parsePanelOptions=function(_42a){ var t=$(_42a); return $.extend({},$.fn.panel.parseOptions(_42a),$.parser.parseOptions(_42a,["region",{split:"boolean",collpasedSize:"number",minWidth:"number",minHeight:"number",maxWidth:"number",maxHeight:"number"}])); }; $.fn.layout.paneldefaults=$.extend({},$.fn.panel.defaults,{region:null,split:false,collapsedSize:32,expandMode:"float",hideExpandTool:false,hideCollapsedContent:true,collapsedContent:function(_42b){ var p=$(this); var opts=p.panel("options"); if(opts.region=="north"||opts.region=="south"){ return _42b; } var cc=[]; if(opts.iconCls){ cc.push("
                                "); } cc.push("
                                "); cc.push(_42b); cc.push("
                                "); return cc.join(""); },minWidth:10,minHeight:10,maxWidth:10000,maxHeight:10000}); })(jQuery); (function($){ $(function(){ $(document)._unbind(".menu")._bind("mousedown.menu",function(e){ var m=$(e.target).closest("div.menu,div.combo-p"); if(m.length){ return; } $("body>div.menu-top:visible").not(".menu-inline").menu("hide"); _42c($("body>div.menu:visible").not(".menu-inline")); }); }); function init(_42d){ var opts=$.data(_42d,"menu").options; $(_42d).addClass("menu-top"); opts.inline?$(_42d).addClass("menu-inline"):$(_42d).appendTo("body"); $(_42d)._bind("_resize",function(e,_42e){ if($(this).hasClass("easyui-fluid")||_42e){ $(_42d).menu("resize",_42d); } return false; }); var _42f=_430($(_42d)); for(var i=0;i<_42f.length;i++){ _433(_42d,_42f[i]); } function _430(menu){ var _431=[]; menu.addClass("menu"); _431.push(menu); if(!menu.hasClass("menu-content")){ menu.children("div").each(function(){ var _432=$(this).children("div"); if(_432.length){ _432.appendTo("body"); this.submenu=_432; var mm=_430(_432); _431=_431.concat(mm); } }); } return _431; }; }; function _433(_434,div){ var menu=$(div).addClass("menu"); if(!menu.data("menu")){ menu.data("menu",{options:$.parser.parseOptions(menu[0],["width","height"])}); } if(!menu.hasClass("menu-content")){ menu.children("div").each(function(){ _435(_434,this); }); $("
                                ").prependTo(menu); } _436(_434,menu); if(!menu.hasClass("menu-inline")){ menu.hide(); } _437(_434,menu); }; function _435(_438,div,_439){ var item=$(div); var _43a=$.extend({},$.parser.parseOptions(item[0],["id","name","iconCls","href",{separator:"boolean"}]),{disabled:(item.attr("disabled")?true:undefined),text:$.trim(item.html()),onclick:item[0].onclick},_439||{}); _43a.onclick=_43a.onclick||_43a.handler||null; item.data("menuitem",{options:_43a}); if(_43a.separator){ item.addClass("menu-sep"); } if(!item.hasClass("menu-sep")){ item.addClass("menu-item"); item.empty().append($("
                                ").html(_43a.text)); if(_43a.iconCls){ $("
                                ").addClass(_43a.iconCls).appendTo(item); } if(_43a.id){ item.attr("id",_43a.id); } if(_43a.onclick){ if(typeof _43a.onclick=="string"){ item.attr("onclick",_43a.onclick); }else{ item[0].onclick=eval(_43a.onclick); } } if(_43a.disabled){ _43b(_438,item[0],true); } if(item[0].submenu){ $("
                                ").appendTo(item); } } }; function _436(_43c,menu){ var opts=$.data(_43c,"menu").options; var _43d=menu.attr("style")||""; var _43e=menu.is(":visible"); menu.css({display:"block",left:-10000,height:"auto",overflow:"hidden"}); menu.find(".menu-item").each(function(){ $(this)._outerHeight(opts.itemHeight); $(this).find(".menu-text").css({height:(opts.itemHeight-2)+"px",lineHeight:(opts.itemHeight-2)+"px"}); }); menu.removeClass("menu-noline").addClass(opts.noline?"menu-noline":""); var _43f=menu.data("menu").options; var _440=_43f.width; var _441=_43f.height; if(isNaN(parseInt(_440))){ _440=0; menu.find("div.menu-text").each(function(){ if(_440<$(this).outerWidth()){ _440=$(this).outerWidth(); } }); _440=_440?_440+40:""; } var _442=menu.outerHeight(); if(isNaN(parseInt(_441))){ _441=_442; if(menu.hasClass("menu-top")&&opts.alignTo){ var at=$(opts.alignTo); var h1=at.offset().top-$(document).scrollTop(); var h2=$(window)._outerHeight()+$(document).scrollTop()-at.offset().top-at._outerHeight(); _441=Math.min(_441,Math.max(h1,h2)); }else{ if(_441>$(window)._outerHeight()){ _441=$(window).height(); } } } menu.attr("style",_43d); menu.show(); menu._size($.extend({},_43f,{width:_440,height:_441,minWidth:_43f.minWidth||opts.minWidth,maxWidth:_43f.maxWidth||opts.maxWidth})); menu.find(".easyui-fluid").triggerHandler("_resize",[true]); menu.css("overflow",menu.outerHeight()<_442?"auto":"hidden"); menu.children("div.menu-line")._outerHeight(_442-2); if(!_43e){ menu.hide(); } }; function _437(_443,menu){ var _444=$.data(_443,"menu"); var opts=_444.options; menu._unbind(".menu"); for(var _445 in opts.events){ menu._bind(_445+".menu",{target:_443},opts.events[_445]); } }; function _446(e){ var _447=e.data.target; var _448=$.data(_447,"menu"); if(_448.timer){ clearTimeout(_448.timer); _448.timer=null; } }; function _449(e){ var _44a=e.data.target; var _44b=$.data(_44a,"menu"); if(_44b.options.hideOnUnhover){ _44b.timer=setTimeout(function(){ _44c(_44a,$(_44a).hasClass("menu-inline")); },_44b.options.duration); } }; function _44d(e){ var _44e=e.data.target; var item=$(e.target).closest(".menu-item"); if(item.length){ item.siblings().each(function(){ if(this.submenu){ _42c(this.submenu); } $(this).removeClass("menu-active"); }); item.addClass("menu-active"); if(item.hasClass("menu-item-disabled")){ item.addClass("menu-active-disabled"); return; } var _44f=item[0].submenu; if(_44f){ $(_44e).menu("show",{menu:_44f,parent:item}); } } }; function _450(e){ var item=$(e.target).closest(".menu-item"); if(item.length){ item.removeClass("menu-active menu-active-disabled"); var _451=item[0].submenu; if(_451){ if(e.pageX>=parseInt(_451.css("left"))){ item.addClass("menu-active"); }else{ _42c(_451); } }else{ item.removeClass("menu-active"); } } }; function _452(e){ var _453=e.data.target; var item=$(e.target).closest(".menu-item"); if(item.length){ var opts=$(_453).data("menu").options; var _454=item.data("menuitem").options; if(_454.disabled){ return; } if(!item[0].submenu){ _44c(_453,opts.inline); if(_454.href){ location.href=_454.href; } } item.trigger("mouseenter"); opts.onClick.call(_453,$(_453).menu("getItem",item[0])); } }; function _44c(_455,_456){ var _457=$.data(_455,"menu"); if(_457){ if($(_455).is(":visible")){ _42c($(_455)); if(_456){ $(_455).show(); }else{ _457.options.onHide.call(_455); } } } return false; }; function _458(_459,_45a){ _45a=_45a||{}; var left,top; var opts=$.data(_459,"menu").options; var menu=$(_45a.menu||_459); $(_459).menu("resize",menu[0]); if(menu.hasClass("menu-top")){ $.extend(opts,_45a); left=opts.left; top=opts.top; if(opts.alignTo){ var at=$(opts.alignTo); left=at.offset().left; top=at.offset().top+at._outerHeight(); if(opts.align=="right"){ left+=at.outerWidth()-menu.outerWidth(); } } if(left+menu.outerWidth()>$(window)._outerWidth()+$(document)._scrollLeft()){ left=$(window)._outerWidth()+$(document).scrollLeft()-menu.outerWidth()-5; } if(left<0){ left=0; } top=_45b(top,opts.alignTo); }else{ var _45c=_45a.parent; left=_45c.offset().left+_45c.outerWidth()-2; if(left+menu.outerWidth()+5>$(window)._outerWidth()+$(document).scrollLeft()){ left=_45c.offset().left-menu.outerWidth()+2; } top=_45b(_45c.offset().top-3); } function _45b(top,_45d){ if(top+menu.outerHeight()>$(window)._outerHeight()+$(document).scrollTop()){ if(_45d){ top=$(_45d).offset().top-menu._outerHeight(); }else{ top=$(window)._outerHeight()+$(document).scrollTop()-menu.outerHeight(); } } if(top<0){ top=0; } return top; }; menu.css(opts.position.call(_459,menu[0],left,top)); menu.show(0,function(){ if(!menu[0].shadow){ menu[0].shadow=$("
                                ").insertAfter(menu); } menu[0].shadow.css({display:(menu.hasClass("menu-inline")?"none":"block"),zIndex:$.fn.menu.defaults.zIndex++,left:menu.css("left"),top:menu.css("top"),width:menu.outerWidth(),height:menu.outerHeight()}); menu.css("z-index",$.fn.menu.defaults.zIndex++); if(menu.hasClass("menu-top")){ opts.onShow.call(_459); } }); }; function _42c(menu){ if(menu&&menu.length){ _45e(menu); menu.find("div.menu-item").each(function(){ if(this.submenu){ _42c(this.submenu); } $(this).removeClass("menu-active"); }); } function _45e(m){ m.stop(true,true); if(m[0].shadow){ m[0].shadow.hide(); } m.hide(); }; }; function _45f(_460,_461){ var _462=null; var fn=$.isFunction(_461)?_461:function(item){ for(var p in _461){ if(item[p]!=_461[p]){ return false; } } return true; }; function find(menu){ menu.children("div.menu-item").each(function(){ var opts=$(this).data("menuitem").options; if(fn.call(_460,opts)==true){ _462=$(_460).menu("getItem",this); }else{ if(this.submenu&&!_462){ find(this.submenu); } } }); }; find($(_460)); return _462; }; function _43b(_463,_464,_465){ var t=$(_464); if(t.hasClass("menu-item")){ var opts=t.data("menuitem").options; opts.disabled=_465; if(_465){ t.addClass("menu-item-disabled"); t[0].onclick=null; }else{ t.removeClass("menu-item-disabled"); t[0].onclick=opts.onclick; } } }; function _466(_467,_468){ var opts=$.data(_467,"menu").options; var menu=$(_467); if(_468.parent){ if(!_468.parent.submenu){ var _469=$("
                                ").appendTo("body"); _468.parent.submenu=_469; $("
                                ").appendTo(_468.parent); _433(_467,_469); } menu=_468.parent.submenu; } var div=$("
                                ").appendTo(menu); _435(_467,div,_468); }; function _46a(_46b,_46c){ function _46d(el){ if(el.submenu){ el.submenu.children("div.menu-item").each(function(){ _46d(this); }); var _46e=el.submenu[0].shadow; if(_46e){ _46e.remove(); } el.submenu.remove(); } $(el).remove(); }; _46d(_46c); }; function _46f(_470,_471,_472){ var menu=$(_471).parent(); if(_472){ $(_471).show(); }else{ $(_471).hide(); } _436(_470,menu); }; function _473(_474){ $(_474).children("div.menu-item").each(function(){ _46a(_474,this); }); if(_474.shadow){ _474.shadow.remove(); } $(_474).remove(); }; $.fn.menu=function(_475,_476){ if(typeof _475=="string"){ return $.fn.menu.methods[_475](this,_476); } _475=_475||{}; return this.each(function(){ var _477=$.data(this,"menu"); if(_477){ $.extend(_477.options,_475); }else{ _477=$.data(this,"menu",{options:$.extend({},$.fn.menu.defaults,$.fn.menu.parseOptions(this),_475)}); init(this); } $(this).css({left:_477.options.left,top:_477.options.top}); }); }; $.fn.menu.methods={options:function(jq){ return $.data(jq[0],"menu").options; },show:function(jq,pos){ return jq.each(function(){ _458(this,pos); }); },hide:function(jq){ return jq.each(function(){ _44c(this); }); },destroy:function(jq){ return jq.each(function(){ _473(this); }); },setText:function(jq,_478){ return jq.each(function(){ var item=$(_478.target).data("menuitem").options; item.text=_478.text; $(_478.target).children("div.menu-text").html(_478.text); }); },setIcon:function(jq,_479){ return jq.each(function(){ var item=$(_479.target).data("menuitem").options; item.iconCls=_479.iconCls; $(_479.target).children("div.menu-icon").remove(); if(_479.iconCls){ $("
                                ").addClass(_479.iconCls).appendTo(_479.target); } }); },getItem:function(jq,_47a){ var item=$(_47a).data("menuitem").options; return $.extend({},item,{target:$(_47a)[0]}); },findItem:function(jq,text){ if(typeof text=="string"){ return _45f(jq[0],function(item){ return $("
                                "+item.text+"
                                ").text()==text; }); }else{ return _45f(jq[0],text); } },appendItem:function(jq,_47b){ return jq.each(function(){ _466(this,_47b); }); },removeItem:function(jq,_47c){ return jq.each(function(){ _46a(this,_47c); }); },enableItem:function(jq,_47d){ return jq.each(function(){ _43b(this,_47d,false); }); },disableItem:function(jq,_47e){ return jq.each(function(){ _43b(this,_47e,true); }); },showItem:function(jq,_47f){ return jq.each(function(){ _46f(this,_47f,true); }); },hideItem:function(jq,_480){ return jq.each(function(){ _46f(this,_480,false); }); },resize:function(jq,_481){ return jq.each(function(){ _436(this,_481?$(_481):$(this)); }); }}; $.fn.menu.parseOptions=function(_482){ return $.extend({},$.parser.parseOptions(_482,[{minWidth:"number",itemHeight:"number",duration:"number",hideOnUnhover:"boolean"},{fit:"boolean",inline:"boolean",noline:"boolean"}])); }; $.fn.menu.defaults={zIndex:110000,left:0,top:0,alignTo:null,align:"left",minWidth:150,itemHeight:32,duration:100,hideOnUnhover:true,inline:false,fit:false,noline:false,events:{mouseenter:_446,mouseleave:_449,mouseover:_44d,mouseout:_450,click:_452},position:function(_483,left,top){ return {left:left,top:top}; },onShow:function(){ },onHide:function(){ },onClick:function(item){ }}; })(jQuery); (function($){ var _484=1; function init(_485){ $(_485).addClass("sidemenu"); }; function _486(_487,_488){ var opts=$(_487).sidemenu("options"); if(_488){ $.extend(opts,{width:_488.width,height:_488.height}); } $(_487)._size(opts); $(_487).find(".accordion").accordion("resize"); }; function _489(_48a,_48b,data){ var opts=$(_48a).sidemenu("options"); var tt=$("
                                  ").appendTo(_48b); tt.tree({data:data,animate:opts.animate,onBeforeSelect:function(node){ if(node.children){ return false; } },onSelect:function(node){ _48c(_48a,node.id,true); },onExpand:function(node){ _499(_48a,node); },onCollapse:function(node){ _499(_48a,node); },onClick:function(node){ if(node.children){ if(node.state=="open"){ $(node.target).addClass("tree-node-nonleaf-collapsed"); }else{ $(node.target).removeClass("tree-node-nonleaf-collapsed"); } $(this).tree("toggle",node.target); } }}); tt._unbind(".sidemenu")._bind("mouseleave.sidemenu",function(){ $(_48b).trigger("mouseleave"); }); _48c(_48a,opts.selectedItemId); }; function _48d(_48e,_48f,data){ var opts=$(_48e).sidemenu("options"); $(_48f).tooltip({content:$("
                                  "),position:opts.floatMenuPosition,valign:"top",data:data,onUpdate:function(_490){ var _491=$(this).tooltip("options"); var data=_491.data; _490.accordion({width:opts.floatMenuWidth,multiple:false}).accordion("add",{title:data.text,collapsed:false,collapsible:false}); _489(_48e,_490.accordion("panels")[0],data.children); },onShow:function(){ var t=$(this); var tip=t.tooltip("tip").addClass("sidemenu-tooltip"); tip.children(".tooltip-content").addClass("sidemenu"); tip.find(".accordion").accordion("resize"); tip.add(tip.find("ul.tree"))._unbind(".sidemenu")._bind("mouseover.sidemenu",function(){ t.tooltip("show"); })._bind("mouseleave.sidemenu",function(){ t.tooltip("hide"); }); t.tooltip("reposition"); },onPosition:function(left,top){ var tip=$(this).tooltip("tip"); if(!opts.collapsed){ tip.css({left:-999999}); }else{ if(top+tip.outerHeight()>$(window)._outerHeight()+$(document).scrollTop()){ top=$(window)._outerHeight()+$(document).scrollTop()-tip.outerHeight(); tip.css("top",top); } } }}); }; function _492(_493,_494){ $(_493).find(".sidemenu-tree").each(function(){ _494($(this)); }); $(_493).find(".tooltip-f").each(function(){ var tip=$(this).tooltip("tip"); if(tip){ tip.find(".sidemenu-tree").each(function(){ _494($(this)); }); $(this).tooltip("reposition"); } }); }; function _48c(_495,_496,_497){ var _498=null; var opts=$(_495).sidemenu("options"); _492(_495,function(t){ t.find("div.tree-node-selected").removeClass("tree-node-selected"); var node=t.tree("find",_496); if(node){ $(node.target).addClass("tree-node-selected"); opts.selectedItemId=node.id; t.trigger("mouseleave.sidemenu"); _498=node; } }); if(_497&&_498){ opts.onSelect.call(_495,_498); } }; function _499(_49a,item){ _492(_49a,function(t){ var node=t.tree("find",item.id); if(node){ var _49b=t.tree("options"); var _49c=_49b.animate; _49b.animate=false; t.tree(item.state=="open"?"expand":"collapse",node.target); _49b.animate=_49c; } }); }; function _49d(_49e){ var opts=$(_49e).sidemenu("options"); $(_49e).empty(); if(opts.data){ $.easyui.forEach(opts.data,true,function(node){ if(!node.id){ node.id="_easyui_sidemenu_"+(_484++); } if(!node.iconCls){ node.iconCls="sidemenu-default-icon"; } if(node.children){ node.nodeCls="tree-node-nonleaf"; if(!node.state){ node.state="closed"; } if(node.state=="open"){ node.nodeCls="tree-node-nonleaf"; }else{ node.nodeCls="tree-node-nonleaf tree-node-nonleaf-collapsed"; } } }); var acc=$("
                                  ").appendTo(_49e); acc.accordion({fit:opts.height=="auto"?false:true,border:opts.border,multiple:opts.multiple}); var data=opts.data; for(var i=0;i").addClass(opts.cls.arrow).appendTo(_4ae); $("").addClass("m-btn-line").appendTo(_4ae); } $(_4ad).menubutton("resize"); if(opts.menu){ $(opts.menu).menu({duration:opts.duration}); var _4af=$(opts.menu).menu("options"); var _4b0=_4af.onShow; var _4b1=_4af.onHide; $.extend(_4af,{onShow:function(){ var _4b2=$(this).menu("options"); var btn=$(_4b2.alignTo); var opts=btn.menubutton("options"); btn.addClass((opts.plain==true)?opts.cls.btn2:opts.cls.btn1); _4b0.call(this); },onHide:function(){ var _4b3=$(this).menu("options"); var btn=$(_4b3.alignTo); var opts=btn.menubutton("options"); btn.removeClass((opts.plain==true)?opts.cls.btn2:opts.cls.btn1); _4b1.call(this); }}); } }; function _4b4(_4b5){ var opts=$.data(_4b5,"menubutton").options; var btn=$(_4b5); var t=btn.find("."+opts.cls.trigger); if(!t.length){ t=btn; } t._unbind(".menubutton"); var _4b6=null; t._bind(opts.showEvent+".menubutton",function(){ if(!_4b7()){ _4b6=setTimeout(function(){ _4b8(_4b5); },opts.duration); return false; } })._bind(opts.hideEvent+".menubutton",function(){ if(_4b6){ clearTimeout(_4b6); } $(opts.menu).triggerHandler("mouseleave"); }); function _4b7(){ return $(_4b5).linkbutton("options").disabled; }; }; function _4b8(_4b9){ var opts=$(_4b9).menubutton("options"); if(opts.disabled||!opts.menu){ return; } $("body>div.menu-top").menu("hide"); var btn=$(_4b9); var mm=$(opts.menu); if(mm.length){ mm.menu("options").alignTo=btn; mm.menu("show",{alignTo:btn,align:opts.menuAlign}); } btn.blur(); }; $.fn.menubutton=function(_4ba,_4bb){ if(typeof _4ba=="string"){ var _4bc=$.fn.menubutton.methods[_4ba]; if(_4bc){ return _4bc(this,_4bb); }else{ return this.linkbutton(_4ba,_4bb); } } _4ba=_4ba||{}; return this.each(function(){ var _4bd=$.data(this,"menubutton"); if(_4bd){ $.extend(_4bd.options,_4ba); }else{ $.data(this,"menubutton",{options:$.extend({},$.fn.menubutton.defaults,$.fn.menubutton.parseOptions(this),_4ba)}); $(this)._propAttr("disabled",false); } init(this); _4b4(this); }); }; $.fn.menubutton.methods={options:function(jq){ var _4be=jq.linkbutton("options"); return $.extend($.data(jq[0],"menubutton").options,{toggle:_4be.toggle,selected:_4be.selected,disabled:_4be.disabled}); },destroy:function(jq){ return jq.each(function(){ var opts=$(this).menubutton("options"); if(opts.menu){ $(opts.menu).menu("destroy"); } $(this).remove(); }); }}; $.fn.menubutton.parseOptions=function(_4bf){ var t=$(_4bf); return $.extend({},$.fn.linkbutton.parseOptions(_4bf),$.parser.parseOptions(_4bf,["menu",{plain:"boolean",hasDownArrow:"boolean",duration:"number"}])); }; $.fn.menubutton.defaults=$.extend({},$.fn.linkbutton.defaults,{plain:true,hasDownArrow:true,menu:null,menuAlign:"left",duration:100,showEvent:"mouseenter",hideEvent:"mouseleave",cls:{btn1:"m-btn-active",btn2:"m-btn-plain-active",arrow:"m-btn-downarrow",trigger:"m-btn"}}); })(jQuery); (function($){ function init(_4c0){ var opts=$.data(_4c0,"splitbutton").options; $(_4c0).menubutton(opts); $(_4c0).addClass("s-btn"); }; $.fn.splitbutton=function(_4c1,_4c2){ if(typeof _4c1=="string"){ var _4c3=$.fn.splitbutton.methods[_4c1]; if(_4c3){ return _4c3(this,_4c2); }else{ return this.menubutton(_4c1,_4c2); } } _4c1=_4c1||{}; return this.each(function(){ var _4c4=$.data(this,"splitbutton"); if(_4c4){ $.extend(_4c4.options,_4c1); }else{ $.data(this,"splitbutton",{options:$.extend({},$.fn.splitbutton.defaults,$.fn.splitbutton.parseOptions(this),_4c1)}); $(this)._propAttr("disabled",false); } init(this); }); }; $.fn.splitbutton.methods={options:function(jq){ var _4c5=jq.menubutton("options"); var _4c6=$.data(jq[0],"splitbutton").options; $.extend(_4c6,{disabled:_4c5.disabled,toggle:_4c5.toggle,selected:_4c5.selected}); return _4c6; }}; $.fn.splitbutton.parseOptions=function(_4c7){ var t=$(_4c7); return $.extend({},$.fn.linkbutton.parseOptions(_4c7),$.parser.parseOptions(_4c7,["menu",{plain:"boolean",duration:"number"}])); }; $.fn.splitbutton.defaults=$.extend({},$.fn.linkbutton.defaults,{plain:true,menu:null,duration:100,cls:{btn1:"m-btn-active s-btn-active",btn2:"m-btn-plain-active s-btn-plain-active",arrow:"m-btn-downarrow",trigger:"m-btn-line"}}); })(jQuery); (function($){ var _4c8=1; function init(_4c9){ var _4ca=$(""+""+""+""+""+""+""+"").insertAfter(_4c9); var t=$(_4c9); t.addClass("switchbutton-f").hide(); var name=t.attr("name"); if(name){ t.removeAttr("name").attr("switchbuttonName",name); _4ca.find(".switchbutton-value").attr("name",name); } _4ca._bind("_resize",function(e,_4cb){ if($(this).hasClass("easyui-fluid")||_4cb){ _4cc(_4c9); } return false; }); return _4ca; }; function _4cc(_4cd,_4ce){ var _4cf=$.data(_4cd,"switchbutton"); var opts=_4cf.options; var _4d0=_4cf.switchbutton; if(_4ce){ $.extend(opts,_4ce); } var _4d1=_4d0.is(":visible"); if(!_4d1){ _4d0.appendTo("body"); } _4d0._size(opts); if(opts.label&&opts.labelPosition){ if(opts.labelPosition=="top"){ _4cf.label._size({width:opts.labelWidth},_4d0); }else{ _4cf.label._size({width:opts.labelWidth,height:_4d0.outerHeight()},_4d0); _4cf.label.css("lineHeight",_4d0.outerHeight()+"px"); } } var w=_4d0.width(); var h=_4d0.height(); var w=_4d0.outerWidth(); var h=_4d0.outerHeight(); var _4d2=parseInt(opts.handleWidth)||_4d0.height(); var _4d3=w*2-_4d2; _4d0.find(".switchbutton-inner").css({width:_4d3+"px",height:h+"px",lineHeight:h+"px"}); _4d0.find(".switchbutton-handle")._outerWidth(_4d2)._outerHeight(h).css({marginLeft:-_4d2/2+"px"}); _4d0.find(".switchbutton-on").css({width:(w-_4d2/2)+"px",textIndent:(opts.reversed?"":"-")+_4d2/2+"px"}); _4d0.find(".switchbutton-off").css({width:(w-_4d2/2)+"px",textIndent:(opts.reversed?"-":"")+_4d2/2+"px"}); opts.marginWidth=w-_4d2; _4d4(_4cd,opts.checked,false); if(!_4d1){ _4d0.insertAfter(_4cd); } }; function _4d5(_4d6){ var _4d7=$.data(_4d6,"switchbutton"); var opts=_4d7.options; var _4d8=_4d7.switchbutton; var _4d9=_4d8.find(".switchbutton-inner"); var on=_4d9.find(".switchbutton-on").html(opts.onText); var off=_4d9.find(".switchbutton-off").html(opts.offText); var _4da=_4d9.find(".switchbutton-handle").html(opts.handleText); if(opts.reversed){ off.prependTo(_4d9); on.insertAfter(_4da); }else{ on.prependTo(_4d9); off.insertAfter(_4da); } var _4db="_easyui_switchbutton_"+(++_4c8); var _4dc=_4d8.find(".switchbutton-value")._propAttr("checked",opts.checked).attr("id",_4db); _4dc._unbind(".switchbutton")._bind("change.switchbutton",function(e){ return false; }); _4d8.removeClass("switchbutton-reversed").addClass(opts.reversed?"switchbutton-reversed":""); if(opts.label){ if(typeof opts.label=="object"){ _4d7.label=$(opts.label); _4d7.label.attr("for",_4db); }else{ $(_4d7.label).remove(); _4d7.label=$("").html(opts.label); _4d7.label.css("textAlign",opts.labelAlign).attr("for",_4db); if(opts.labelPosition=="after"){ _4d7.label.insertAfter(_4d8); }else{ _4d7.label.insertBefore(_4d6); } _4d7.label.removeClass("textbox-label-left textbox-label-right textbox-label-top"); _4d7.label.addClass("textbox-label-"+opts.labelPosition); } }else{ $(_4d7.label).remove(); } _4d4(_4d6,opts.checked); _4dd(_4d6,opts.readonly); _4de(_4d6,opts.disabled); $(_4d6).switchbutton("setValue",opts.value); }; function _4d4(_4df,_4e0,_4e1){ var _4e2=$.data(_4df,"switchbutton"); var opts=_4e2.options; var _4e3=_4e2.switchbutton.find(".switchbutton-inner"); var _4e4=_4e3.find(".switchbutton-on"); var _4e5=opts.reversed?(_4e0?opts.marginWidth:0):(_4e0?0:opts.marginWidth); var dir=_4e4.css("float").toLowerCase(); var css={}; css["margin-"+dir]=-_4e5+"px"; _4e1?_4e3.animate(css,200):_4e3.css(css); var _4e6=_4e3.find(".switchbutton-value"); $(_4df).add(_4e6)._propAttr("checked",_4e0); if(opts.checked!=_4e0){ opts.checked=_4e0; opts.onChange.call(_4df,opts.checked); $(_4df).closest("form").trigger("_change",[_4df]); } }; function _4de(_4e7,_4e8){ var _4e9=$.data(_4e7,"switchbutton"); var opts=_4e9.options; var _4ea=_4e9.switchbutton; var _4eb=_4ea.find(".switchbutton-value"); if(_4e8){ opts.disabled=true; $(_4e7).add(_4eb)._propAttr("disabled",true); _4ea.addClass("switchbutton-disabled"); _4ea.removeAttr("tabindex"); }else{ opts.disabled=false; $(_4e7).add(_4eb)._propAttr("disabled",false); _4ea.removeClass("switchbutton-disabled"); _4ea.attr("tabindex",$(_4e7).attr("tabindex")||""); } }; function _4dd(_4ec,mode){ var _4ed=$.data(_4ec,"switchbutton"); var opts=_4ed.options; opts.readonly=mode==undefined?true:mode; _4ed.switchbutton.removeClass("switchbutton-readonly").addClass(opts.readonly?"switchbutton-readonly":""); }; function _4ee(_4ef){ var _4f0=$.data(_4ef,"switchbutton"); var opts=_4f0.options; _4f0.switchbutton._unbind(".switchbutton")._bind("click.switchbutton",function(){ if(!opts.disabled&&!opts.readonly){ _4d4(_4ef,opts.checked?false:true,true); } })._bind("keydown.switchbutton",function(e){ if(e.which==13||e.which==32){ if(!opts.disabled&&!opts.readonly){ _4d4(_4ef,opts.checked?false:true,true); return false; } } }); }; $.fn.switchbutton=function(_4f1,_4f2){ if(typeof _4f1=="string"){ return $.fn.switchbutton.methods[_4f1](this,_4f2); } _4f1=_4f1||{}; return this.each(function(){ var _4f3=$.data(this,"switchbutton"); if(_4f3){ $.extend(_4f3.options,_4f1); }else{ _4f3=$.data(this,"switchbutton",{options:$.extend({},$.fn.switchbutton.defaults,$.fn.switchbutton.parseOptions(this),_4f1),switchbutton:init(this)}); } _4f3.options.originalChecked=_4f3.options.checked; _4d5(this); _4cc(this); _4ee(this); }); }; $.fn.switchbutton.methods={options:function(jq){ var _4f4=jq.data("switchbutton"); return $.extend(_4f4.options,{value:_4f4.switchbutton.find(".switchbutton-value").val()}); },resize:function(jq,_4f5){ return jq.each(function(){ _4cc(this,_4f5); }); },enable:function(jq){ return jq.each(function(){ _4de(this,false); }); },disable:function(jq){ return jq.each(function(){ _4de(this,true); }); },readonly:function(jq,mode){ return jq.each(function(){ _4dd(this,mode); }); },check:function(jq){ return jq.each(function(){ _4d4(this,true); }); },uncheck:function(jq){ return jq.each(function(){ _4d4(this,false); }); },clear:function(jq){ return jq.each(function(){ _4d4(this,false); }); },reset:function(jq){ return jq.each(function(){ var opts=$(this).switchbutton("options"); _4d4(this,opts.originalChecked); }); },setValue:function(jq,_4f6){ return jq.each(function(){ $(this).val(_4f6); $.data(this,"switchbutton").switchbutton.find(".switchbutton-value").val(_4f6); }); }}; $.fn.switchbutton.parseOptions=function(_4f7){ var t=$(_4f7); return $.extend({},$.parser.parseOptions(_4f7,["onText","offText","handleText",{handleWidth:"number",reversed:"boolean"},"label","labelPosition","labelAlign",{labelWidth:"number"}]),{value:(t.val()||undefined),checked:(t.attr("checked")?true:undefined),disabled:(t.attr("disabled")?true:undefined),readonly:(t.attr("readonly")?true:undefined)}); }; $.fn.switchbutton.defaults={handleWidth:"auto",width:60,height:30,checked:false,disabled:false,readonly:false,reversed:false,onText:"ON",offText:"OFF",handleText:"",value:"on",label:null,labelWidth:"auto",labelPosition:"before",labelAlign:"left",onChange:function(_4f8){ }}; })(jQuery); (function($){ var _4f9=1; function init(_4fa){ var _4fb=$(""+""+""+"").insertAfter(_4fa); var t=$(_4fa); t.addClass("radiobutton-f").hide(); var name=t.attr("name"); if(name){ t.removeAttr("name").attr("radiobuttonName",name); _4fb.find(".radiobutton-value").attr("name",name); } return _4fb; }; function _4fc(_4fd){ var _4fe=$.data(_4fd,"radiobutton"); var opts=_4fe.options; var _4ff=_4fe.radiobutton; var _500="_easyui_radiobutton_"+(++_4f9); var _501=_4ff.find(".radiobutton-value").attr("id",_500); _501._unbind(".radiobutton")._bind("change.radiobutton",function(e){ return false; }); if(opts.label){ if(typeof opts.label=="object"){ _4fe.label=$(opts.label); _4fe.label.attr("for",_500); }else{ $(_4fe.label).remove(); _4fe.label=$("").html(opts.label); _4fe.label.css("textAlign",opts.labelAlign).attr("for",_500); if(opts.labelPosition=="after"){ _4fe.label.insertAfter(_4ff); }else{ _4fe.label.insertBefore(_4fd); } _4fe.label.removeClass("textbox-label-left textbox-label-right textbox-label-top"); _4fe.label.addClass("textbox-label-"+opts.labelPosition); } }else{ $(_4fe.label).remove(); } $(_4fd).radiobutton("setValue",opts.value); _502(_4fd,opts.checked); _503(_4fd,opts.readonly); _504(_4fd,opts.disabled); }; function _505(_506){ var _507=$.data(_506,"radiobutton"); var opts=_507.options; var _508=_507.radiobutton; _508._unbind(".radiobutton")._bind("click.radiobutton",function(){ if(!opts.disabled&&!opts.readonly){ _502(_506,true); } }); }; function _509(_50a){ var _50b=$.data(_50a,"radiobutton"); var opts=_50b.options; var _50c=_50b.radiobutton; _50c._size(opts,_50c.parent()); if(opts.label&&opts.labelPosition){ if(opts.labelPosition=="top"){ _50b.label._size({width:opts.labelWidth},_50c); }else{ _50b.label._size({width:opts.labelWidth,height:_50c.outerHeight()},_50c); _50b.label.css("lineHeight",_50c.outerHeight()+"px"); } } }; function _502(_50d,_50e){ if(_50e){ var f=$(_50d).closest("form"); var name=$(_50d).attr("radiobuttonName"); f.find(".radiobutton-f[radiobuttonName=\""+name+"\"]").each(function(){ if(this!=_50d){ _50f(this,false); } }); _50f(_50d,true); }else{ _50f(_50d,false); } function _50f(b,c){ var _510=$(b).data("radiobutton"); var opts=_510.options; var _511=_510.radiobutton; _511.find(".radiobutton-inner").css("display",c?"":"none"); _511.find(".radiobutton-value")._propAttr("checked",c); if(c){ _511.addClass("radiobutton-checked"); $(_510.label).addClass("textbox-label-checked"); }else{ _511.removeClass("radiobutton-checked"); $(_510.label).removeClass("textbox-label-checked"); } if(opts.checked!=c){ opts.checked=c; opts.onChange.call($(b)[0],c); $(b).closest("form").trigger("_change",[$(b)[0]]); } }; }; function _504(_512,_513){ var _514=$.data(_512,"radiobutton"); var opts=_514.options; var _515=_514.radiobutton; var rv=_515.find(".radiobutton-value"); opts.disabled=_513; if(_513){ $(_512).add(rv)._propAttr("disabled",true); _515.addClass("radiobutton-disabled"); $(_514.label).addClass("textbox-label-disabled"); }else{ $(_512).add(rv)._propAttr("disabled",false); _515.removeClass("radiobutton-disabled"); $(_514.label).removeClass("textbox-label-disabled"); } }; function _503(_516,mode){ var _517=$.data(_516,"radiobutton"); var opts=_517.options; opts.readonly=mode==undefined?true:mode; if(opts.readonly){ _517.radiobutton.addClass("radiobutton-readonly"); $(_517.label).addClass("textbox-label-readonly"); }else{ _517.radiobutton.removeClass("radiobutton-readonly"); $(_517.label).removeClass("textbox-label-readonly"); } }; $.fn.radiobutton=function(_518,_519){ if(typeof _518=="string"){ return $.fn.radiobutton.methods[_518](this,_519); } _518=_518||{}; return this.each(function(){ var _51a=$.data(this,"radiobutton"); if(_51a){ $.extend(_51a.options,_518); }else{ _51a=$.data(this,"radiobutton",{options:$.extend({},$.fn.radiobutton.defaults,$.fn.radiobutton.parseOptions(this),_518),radiobutton:init(this)}); } _51a.options.originalChecked=_51a.options.checked; _4fc(this); _505(this); _509(this); }); }; $.fn.radiobutton.methods={options:function(jq){ var _51b=jq.data("radiobutton"); return $.extend(_51b.options,{value:_51b.radiobutton.find(".radiobutton-value").val()}); },setValue:function(jq,_51c){ return jq.each(function(){ $(this).val(_51c); $.data(this,"radiobutton").radiobutton.find(".radiobutton-value").val(_51c); }); },enable:function(jq){ return jq.each(function(){ _504(this,false); }); },disable:function(jq){ return jq.each(function(){ _504(this,true); }); },readonly:function(jq,mode){ return jq.each(function(){ _503(this,mode); }); },check:function(jq){ return jq.each(function(){ _502(this,true); }); },uncheck:function(jq){ return jq.each(function(){ _502(this,false); }); },clear:function(jq){ return jq.each(function(){ _502(this,false); }); },reset:function(jq){ return jq.each(function(){ var opts=$(this).radiobutton("options"); _502(this,opts.originalChecked); }); }}; $.fn.radiobutton.parseOptions=function(_51d){ var t=$(_51d); return $.extend({},$.parser.parseOptions(_51d,["label","labelPosition","labelAlign",{labelWidth:"number"}]),{value:(t.val()||undefined),checked:(t.attr("checked")?true:undefined),disabled:(t.attr("disabled")?true:undefined),readonly:(t.attr("readonly")?true:undefined)}); }; $.fn.radiobutton.defaults={width:20,height:20,value:null,disabled:false,readonly:false,checked:false,label:null,labelWidth:"auto",labelPosition:"before",labelAlign:"left",onChange:function(_51e){ }}; })(jQuery); (function($){ var _51f=1; function init(_520){ var _521=$(""+""+""+""+""+"").insertAfter(_520); var t=$(_520); t.addClass("checkbox-f").hide(); var name=t.attr("name"); if(name){ t.removeAttr("name").attr("checkboxName",name); _521.find(".checkbox-value").attr("name",name); } return _521; }; function _522(_523){ var _524=$.data(_523,"checkbox"); var opts=_524.options; var _525=_524.checkbox; var _526="_easyui_checkbox_"+(++_51f); var _527=_525.find(".checkbox-value").attr("id",_526); _527._unbind(".checkbox")._bind("change.checkbox",function(e){ return false; }); if(opts.label){ if(typeof opts.label=="object"){ _524.label=$(opts.label); _524.label.attr("for",_526); }else{ $(_524.label).remove(); _524.label=$("").html(opts.label); _524.label.css("textAlign",opts.labelAlign).attr("for",_526); if(opts.labelPosition=="after"){ _524.label.insertAfter(_525); }else{ _524.label.insertBefore(_523); } _524.label.removeClass("textbox-label-left textbox-label-right textbox-label-top"); _524.label.addClass("textbox-label-"+opts.labelPosition); } }else{ $(_524.label).remove(); } $(_523).checkbox("setValue",opts.value); _528(_523,opts.checked); _529(_523,opts.readonly); _52a(_523,opts.disabled); }; function _52b(_52c){ var _52d=$.data(_52c,"checkbox"); var opts=_52d.options; var _52e=_52d.checkbox; _52e._unbind(".checkbox")._bind("click.checkbox",function(){ if(!opts.disabled&&!opts.readonly){ _528(_52c,!opts.checked); } }); }; function _52f(_530){ var _531=$.data(_530,"checkbox"); var opts=_531.options; var _532=_531.checkbox; _532._size(opts,_532.parent()); if(opts.label&&opts.labelPosition){ if(opts.labelPosition=="top"){ _531.label._size({width:opts.labelWidth},_532); }else{ _531.label._size({width:opts.labelWidth,height:_532.outerHeight()},_532); _531.label.css("lineHeight",_532.outerHeight()+"px"); } } }; function _528(_533,_534){ var _535=$.data(_533,"checkbox"); var opts=_535.options; var _536=_535.checkbox; _536.find(".checkbox-value")._propAttr("checked",_534); var _537=_536.find(".checkbox-inner").css("display",_534?"":"none"); if(_534){ _536.addClass("checkbox-checked"); $(_535.label).addClass("textbox-label-checked"); }else{ _536.removeClass("checkbox-checked"); $(_535.label).removeClass("textbox-label-checked"); } if(opts.checked!=_534){ opts.checked=_534; opts.onChange.call(_533,_534); $(_533).closest("form").trigger("_change",[_533]); } }; function _529(_538,mode){ var _539=$.data(_538,"checkbox"); var opts=_539.options; opts.readonly=mode==undefined?true:mode; if(opts.readonly){ _539.checkbox.addClass("checkbox-readonly"); $(_539.label).addClass("textbox-label-readonly"); }else{ _539.checkbox.removeClass("checkbox-readonly"); $(_539.label).removeClass("textbox-label-readonly"); } }; function _52a(_53a,_53b){ var _53c=$.data(_53a,"checkbox"); var opts=_53c.options; var _53d=_53c.checkbox; var rv=_53d.find(".checkbox-value"); opts.disabled=_53b; if(_53b){ $(_53a).add(rv)._propAttr("disabled",true); _53d.addClass("checkbox-disabled"); $(_53c.label).addClass("textbox-label-disabled"); }else{ $(_53a).add(rv)._propAttr("disabled",false); _53d.removeClass("checkbox-disabled"); $(_53c.label).removeClass("textbox-label-disabled"); } }; $.fn.checkbox=function(_53e,_53f){ if(typeof _53e=="string"){ return $.fn.checkbox.methods[_53e](this,_53f); } _53e=_53e||{}; return this.each(function(){ var _540=$.data(this,"checkbox"); if(_540){ $.extend(_540.options,_53e); }else{ _540=$.data(this,"checkbox",{options:$.extend({},$.fn.checkbox.defaults,$.fn.checkbox.parseOptions(this),_53e),checkbox:init(this)}); } _540.options.originalChecked=_540.options.checked; _522(this); _52b(this); _52f(this); }); }; $.fn.checkbox.methods={options:function(jq){ var _541=jq.data("checkbox"); return $.extend(_541.options,{value:_541.checkbox.find(".checkbox-value").val()}); },setValue:function(jq,_542){ return jq.each(function(){ $(this).val(_542); $.data(this,"checkbox").checkbox.find(".checkbox-value").val(_542); }); },enable:function(jq){ return jq.each(function(){ _52a(this,false); }); },disable:function(jq){ return jq.each(function(){ _52a(this,true); }); },readonly:function(jq,mode){ return jq.each(function(){ _529(this,mode); }); },check:function(jq){ return jq.each(function(){ _528(this,true); }); },uncheck:function(jq){ return jq.each(function(){ _528(this,false); }); },clear:function(jq){ return jq.each(function(){ _528(this,false); }); },reset:function(jq){ return jq.each(function(){ var opts=$(this).checkbox("options"); _528(this,opts.originalChecked); }); }}; $.fn.checkbox.parseOptions=function(_543){ var t=$(_543); return $.extend({},$.parser.parseOptions(_543,["label","labelPosition","labelAlign",{labelWidth:"number"}]),{value:(t.val()||undefined),checked:(t.attr("checked")?true:undefined),disabled:(t.attr("disabled")?true:undefined),readonly:(t.attr("readonly")?true:undefined)}); }; $.fn.checkbox.defaults={width:20,height:20,value:null,disabled:false,readonly:false,checked:false,label:null,labelWidth:"auto",labelPosition:"before",labelAlign:"left",onChange:function(_544){ }}; })(jQuery); (function($){ function init(_545){ $(_545).addClass("validatebox-text"); }; function _546(_547){ var _548=$.data(_547,"validatebox"); _548.validating=false; if(_548.vtimer){ clearTimeout(_548.vtimer); } if(_548.ftimer){ clearTimeout(_548.ftimer); } $(_547).tooltip("destroy"); $(_547)._unbind(); $(_547).remove(); }; function _549(_54a){ var opts=$.data(_54a,"validatebox").options; $(_54a)._unbind(".validatebox"); if(opts.novalidate||opts.disabled){ return; } for(var _54b in opts.events){ $(_54a)._bind(_54b+".validatebox",{target:_54a},opts.events[_54b]); } }; function _54c(e){ var _54d=e.data.target; var _54e=$.data(_54d,"validatebox"); var opts=_54e.options; if($(_54d).attr("readonly")){ return; } _54e.validating=true; _54e.value=opts.val(_54d); (function(){ if(!$(_54d).is(":visible")){ _54e.validating=false; } if(_54e.validating){ var _54f=opts.val(_54d); if(_54e.value!=_54f){ _54e.value=_54f; if(_54e.vtimer){ clearTimeout(_54e.vtimer); } _54e.vtimer=setTimeout(function(){ $(_54d).validatebox("validate"); },opts.delay); }else{ if(_54e.message){ opts.err(_54d,_54e.message); } } _54e.ftimer=setTimeout(arguments.callee,opts.interval); } })(); }; function _550(e){ var _551=e.data.target; var _552=$.data(_551,"validatebox"); var opts=_552.options; _552.validating=false; if(_552.vtimer){ clearTimeout(_552.vtimer); _552.vtimer=undefined; } if(_552.ftimer){ clearTimeout(_552.ftimer); _552.ftimer=undefined; } if(opts.validateOnBlur){ setTimeout(function(){ $(_551).validatebox("validate"); },0); } opts.err(_551,_552.message,"hide"); }; function _553(e){ var _554=e.data.target; var _555=$.data(_554,"validatebox"); _555.options.err(_554,_555.message,"show"); }; function _556(e){ var _557=e.data.target; var _558=$.data(_557,"validatebox"); if(!_558.validating){ _558.options.err(_557,_558.message,"hide"); } }; function _559(_55a,_55b,_55c){ var _55d=$.data(_55a,"validatebox"); var opts=_55d.options; var t=$(_55a); if(_55c=="hide"||!_55b){ t.tooltip("hide"); }else{ if((t.is(":focus")&&_55d.validating)||_55c=="show"){ t.tooltip($.extend({},opts.tipOptions,{content:_55b,position:opts.tipPosition,deltaX:opts.deltaX,deltaY:opts.deltaY})).tooltip("show"); } } }; function _55e(_55f){ var _560=$.data(_55f,"validatebox"); var opts=_560.options; var box=$(_55f); opts.onBeforeValidate.call(_55f); var _561=_562(); _561?box.removeClass("validatebox-invalid"):box.addClass("validatebox-invalid"); opts.err(_55f,_560.message); opts.onValidate.call(_55f,_561); return _561; function _563(msg){ _560.message=msg; }; function _564(_565,_566){ var _567=opts.val(_55f); var _568=/([a-zA-Z_]+)(.*)/.exec(_565); var rule=opts.rules[_568[1]]; if(rule&&_567){ var _569=_566||opts.validParams||eval(_568[2]); if(!rule["validator"].call(_55f,_567,_569)){ var _56a=rule["message"]; if(_569){ for(var i=0;i<_569.length;i++){ _56a=_56a.replace(new RegExp("\\{"+i+"\\}","g"),_569[i]); } } _563(opts.invalidMessage||_56a); return false; } } return true; }; function _562(){ _563(""); if(!opts._validateOnCreate){ setTimeout(function(){ opts._validateOnCreate=true; },0); return true; } if(opts.novalidate||opts.disabled){ return true; } if(opts.required){ if(opts.val(_55f)==""){ _563(opts.missingMessage); return false; } } if(opts.validType){ if($.isArray(opts.validType)){ for(var i=0;i=_57d[0]&&len<=_57d[1]; },message:"Please enter a value between {0} and {1}."},remote:{validator:function(_57e,_57f){ var data={}; data[_57f[1]]=_57e; var _580=$.ajax({url:_57f[0],dataType:"json",data:data,async:false,cache:false,type:"post"}).responseText; return _580=="true"; },message:"Please fix this field."}},onBeforeValidate:function(){ },onValidate:function(_581){ }}; })(jQuery); (function($){ var _582=0; function init(_583){ $(_583).addClass("textbox-f").hide(); var span=$(""+""+""+"").insertAfter(_583); var name=$(_583).attr("name"); if(name){ span.find("input.textbox-value").attr("name",name); $(_583).removeAttr("name").attr("textboxName",name); } return span; }; function _584(_585){ var _586=$.data(_585,"textbox"); var opts=_586.options; var tb=_586.textbox; var _587="_easyui_textbox_input"+(++_582); tb.addClass(opts.cls); tb.find(".textbox-text").remove(); if(opts.multiline){ $("").prependTo(tb); }else{ $("").prependTo(tb); } $("#"+_587).attr("tabindex",$(_585).attr("tabindex")||"").css("text-align",_585.style.textAlign||""); tb.find(".textbox-addon").remove(); var bb=opts.icons?$.extend(true,[],opts.icons):[]; if(opts.iconCls){ bb.push({iconCls:opts.iconCls,disabled:true}); } if(bb.length){ var bc=$("").prependTo(tb); bc.addClass("textbox-addon-"+opts.iconAlign); for(var i=0;i"); } } tb.find(".textbox-button").remove(); if(opts.buttonText||opts.buttonIcon){ var btn=$("").prependTo(tb); btn.addClass("textbox-button-"+opts.buttonAlign).linkbutton({text:opts.buttonText,iconCls:opts.buttonIcon,onClick:function(){ var t=$(this).parent().prev(); t.textbox("options").onClickButton.call(t[0]); }}); } if(opts.label){ if(typeof opts.label=="object"){ _586.label=$(opts.label); _586.label.attr("for",_587); }else{ $(_586.label).remove(); _586.label=$("").html(opts.label); _586.label.css("textAlign",opts.labelAlign).attr("for",_587); if(opts.labelPosition=="after"){ _586.label.insertAfter(tb); }else{ _586.label.insertBefore(_585); } _586.label.removeClass("textbox-label-left textbox-label-right textbox-label-top"); _586.label.addClass("textbox-label-"+opts.labelPosition); } }else{ $(_586.label).remove(); } _588(_585); _589(_585,opts.disabled); _58a(_585,opts.readonly); }; function _58b(_58c){ var _58d=$.data(_58c,"textbox"); var tb=_58d.textbox; tb.find(".textbox-text").validatebox("destroy"); tb.remove(); $(_58d.label).remove(); $(_58c).remove(); }; function _58e(_58f,_590){ var _591=$.data(_58f,"textbox"); var opts=_591.options; var tb=_591.textbox; var _592=tb.parent(); if(_590){ if(typeof _590=="object"){ $.extend(opts,_590); }else{ opts.width=_590; } } if(isNaN(parseInt(opts.width))){ var c=$(_58f).clone(); c.css("visibility","hidden"); c.insertAfter(_58f); opts.width=c.outerWidth(); c.remove(); } var _593=tb.is(":visible"); if(!_593){ tb.appendTo("body"); } var _594=tb.find(".textbox-text"); var btn=tb.find(".textbox-button"); var _595=tb.find(".textbox-addon"); var _596=_595.find(".textbox-icon"); if(opts.height=="auto"){ _594.css({margin:"",paddingTop:"",paddingBottom:"",height:"",lineHeight:""}); } tb._size(opts,_592); if(opts.label&&opts.labelPosition){ if(opts.labelPosition=="top"){ _591.label._size({width:opts.labelWidth=="auto"?tb.outerWidth():opts.labelWidth},tb); if(opts.height!="auto"){ tb._size("height",tb.outerHeight()-_591.label.outerHeight()); } }else{ _591.label._size({width:opts.labelWidth,height:tb.outerHeight()},tb); if(!opts.multiline){ _591.label.css("lineHeight",_591.label.height()+"px"); } tb._size("width",tb.outerWidth()-_591.label.outerWidth()); } } if(opts.buttonAlign=="left"||opts.buttonAlign=="right"){ btn.linkbutton("resize",{height:tb.height()}); }else{ btn.linkbutton("resize",{width:"100%"}); } var _597=tb.width()-_596.length*opts.iconWidth-_598("left")-_598("right"); var _599=opts.height=="auto"?_594.outerHeight():(tb.height()-_598("top")-_598("bottom")); _595.css(opts.iconAlign,_598(opts.iconAlign)+"px"); _595.css("top",_598("top")+"px"); _596.css({width:opts.iconWidth+"px",height:_599+"px"}); _594.css({paddingLeft:(_58f.style.paddingLeft||""),paddingRight:(_58f.style.paddingRight||""),marginLeft:_59a("left"),marginRight:_59a("right"),marginTop:_598("top"),marginBottom:_598("bottom")}); if(opts.multiline){ _594.css({paddingTop:(_58f.style.paddingTop||""),paddingBottom:(_58f.style.paddingBottom||"")}); _594._outerHeight(_599); }else{ _594.css({paddingTop:0,paddingBottom:0,height:_599+"px",lineHeight:_599+"px"}); } _594._outerWidth(_597); opts.onResizing.call(_58f,opts.width,opts.height); if(!_593){ tb.insertAfter(_58f); } opts.onResize.call(_58f,opts.width,opts.height); function _59a(_59b){ return (opts.iconAlign==_59b?_595._outerWidth():0)+_598(_59b); }; function _598(_59c){ var w=0; btn.filter(".textbox-button-"+_59c).each(function(){ if(_59c=="left"||_59c=="right"){ w+=$(this).outerWidth(); }else{ w+=$(this).outerHeight(); } }); return w; }; }; function _588(_59d){ var opts=$(_59d).textbox("options"); var _59e=$(_59d).textbox("textbox"); _59e.validatebox($.extend({},opts,{deltaX:function(_59f){ return $(_59d).textbox("getTipX",_59f); },deltaY:function(_5a0){ return $(_59d).textbox("getTipY",_5a0); },onBeforeValidate:function(){ opts.onBeforeValidate.call(_59d); var box=$(this); if(!box.is(":focus")){ if(box.val()!==opts.value){ opts.oldInputValue=box.val(); box.val(opts.value); } } },onValidate:function(_5a1){ var box=$(this); if(opts.oldInputValue!=undefined){ box.val(opts.oldInputValue); opts.oldInputValue=undefined; } var tb=box.parent(); if(_5a1){ tb.removeClass("textbox-invalid"); }else{ tb.addClass("textbox-invalid"); } opts.onValidate.call(_59d,_5a1); }})); }; function _5a2(_5a3){ var _5a4=$.data(_5a3,"textbox"); var opts=_5a4.options; var tb=_5a4.textbox; var _5a5=tb.find(".textbox-text"); _5a5.attr("placeholder",opts.prompt); _5a5._unbind(".textbox"); $(_5a4.label)._unbind(".textbox"); if(!opts.disabled&&!opts.readonly){ if(_5a4.label){ $(_5a4.label)._bind("click.textbox",function(e){ if(!opts.hasFocusMe){ _5a5.focus(); $(_5a3).textbox("setSelectionRange",{start:0,end:_5a5.val().length}); } }); } _5a5._bind("blur.textbox",function(e){ if(!tb.hasClass("textbox-focused")){ return; } opts.value=$(this).val(); if(opts.value==""){ $(this).val(opts.prompt).addClass("textbox-prompt"); }else{ $(this).removeClass("textbox-prompt"); } tb.removeClass("textbox-focused"); tb.closest(".form-field").removeClass("form-field-focused"); })._bind("focus.textbox",function(e){ opts.hasFocusMe=true; if(tb.hasClass("textbox-focused")){ return; } if($(this).val()!=opts.value){ $(this).val(opts.value); } $(this).removeClass("textbox-prompt"); tb.addClass("textbox-focused"); tb.closest(".form-field").addClass("form-field-focused"); }); for(var _5a6 in opts.inputEvents){ _5a5._bind(_5a6+".textbox",{target:_5a3},opts.inputEvents[_5a6]); } } var _5a7=tb.find(".textbox-addon"); _5a7._unbind()._bind("click",{target:_5a3},function(e){ var icon=$(e.target).closest("a.textbox-icon:not(.textbox-icon-disabled)"); if(icon.length){ var _5a8=parseInt(icon.attr("icon-index")); var conf=opts.icons[_5a8]; if(conf&&conf.handler){ conf.handler.call(icon[0],e); } opts.onClickIcon.call(_5a3,_5a8); } }); _5a7.find(".textbox-icon").each(function(_5a9){ var conf=opts.icons[_5a9]; var icon=$(this); if(!conf||conf.disabled||opts.disabled||opts.readonly){ icon.addClass("textbox-icon-disabled"); }else{ icon.removeClass("textbox-icon-disabled"); } }); var btn=tb.find(".textbox-button"); btn.linkbutton((opts.disabled||opts.readonly)?"disable":"enable"); tb._unbind(".textbox")._bind("_resize.textbox",function(e,_5aa){ if($(this).hasClass("easyui-fluid")||_5aa){ _58e(_5a3); } return false; }); }; function _589(_5ab,_5ac){ var _5ad=$.data(_5ab,"textbox"); var opts=_5ad.options; var tb=_5ad.textbox; var _5ae=tb.find(".textbox-text"); var ss=$(_5ab).add(tb.find(".textbox-value")); opts.disabled=_5ac; if(opts.disabled){ _5ae.blur(); _5ae.validatebox("disable"); tb.addClass("textbox-disabled"); ss._propAttr("disabled",true); $(_5ad.label).addClass("textbox-label-disabled"); }else{ _5ae.validatebox("enable"); tb.removeClass("textbox-disabled"); ss._propAttr("disabled",false); $(_5ad.label).removeClass("textbox-label-disabled"); } }; function _58a(_5af,mode){ var _5b0=$.data(_5af,"textbox"); var opts=_5b0.options; var tb=_5b0.textbox; var _5b1=tb.find(".textbox-text"); opts.readonly=mode==undefined?true:mode; if(opts.readonly){ _5b1.triggerHandler("blur.textbox"); } _5b1.validatebox("readonly",opts.readonly); if(opts.readonly){ tb.addClass("textbox-readonly"); $(_5b0.label).addClass("textbox-label-readonly"); }else{ tb.removeClass("textbox-readonly"); $(_5b0.label).removeClass("textbox-label-readonly"); } }; $.fn.textbox=function(_5b2,_5b3){ if(typeof _5b2=="string"){ var _5b4=$.fn.textbox.methods[_5b2]; if(_5b4){ return _5b4(this,_5b3); }else{ return this.each(function(){ var _5b5=$(this).textbox("textbox"); _5b5.validatebox(_5b2,_5b3); }); } } _5b2=_5b2||{}; return this.each(function(){ var _5b6=$.data(this,"textbox"); if(_5b6){ $.extend(_5b6.options,_5b2); if(_5b2.value!=undefined){ _5b6.options.originalValue=_5b2.value; } }else{ _5b6=$.data(this,"textbox",{options:$.extend({},$.fn.textbox.defaults,$.fn.textbox.parseOptions(this),_5b2),textbox:init(this)}); _5b6.options.originalValue=_5b6.options.value; } _584(this); _5a2(this); if(_5b6.options.doSize){ _58e(this); } var _5b7=_5b6.options.value; _5b6.options.value=""; $(this).textbox("initValue",_5b7); }); }; $.fn.textbox.methods={options:function(jq){ return $.data(jq[0],"textbox").options; },cloneFrom:function(jq,from){ return jq.each(function(){ var t=$(this); if(t.data("textbox")){ return; } if(!$(from).data("textbox")){ $(from).textbox(); } var opts=$.extend(true,{},$(from).textbox("options")); var name=t.attr("name")||""; t.addClass("textbox-f").hide(); t.removeAttr("name").attr("textboxName",name); var span=$(from).next().clone().insertAfter(t); var _5b8="_easyui_textbox_input"+(++_582); span.find(".textbox-value").attr("name",name); span.find(".textbox-text").attr("id",_5b8); var _5b9=$($(from).textbox("label")).clone(); if(_5b9.length){ _5b9.attr("for",_5b8); if(opts.labelPosition=="after"){ _5b9.insertAfter(t.next()); }else{ _5b9.insertBefore(t); } } $.data(this,"textbox",{options:opts,textbox:span,label:(_5b9.length?_5b9:undefined)}); var _5ba=$(from).textbox("button"); if(_5ba.length){ t.textbox("button").linkbutton($.extend(true,{},_5ba.linkbutton("options"))); } _5a2(this); _588(this); }); },textbox:function(jq){ return $.data(jq[0],"textbox").textbox.find(".textbox-text"); },button:function(jq){ return $.data(jq[0],"textbox").textbox.find(".textbox-button"); },label:function(jq){ return $.data(jq[0],"textbox").label; },destroy:function(jq){ return jq.each(function(){ _58b(this); }); },resize:function(jq,_5bb){ return jq.each(function(){ _58e(this,_5bb); }); },disable:function(jq){ return jq.each(function(){ _589(this,true); _5a2(this); }); },enable:function(jq){ return jq.each(function(){ _589(this,false); _5a2(this); }); },readonly:function(jq,mode){ return jq.each(function(){ _58a(this,mode); _5a2(this); }); },isValid:function(jq){ return jq.textbox("textbox").validatebox("isValid"); },clear:function(jq){ return jq.each(function(){ $(this).textbox("setValue",""); }); },setText:function(jq,_5bc){ return jq.each(function(){ var opts=$(this).textbox("options"); var _5bd=$(this).textbox("textbox"); _5bc=_5bc==undefined?"":String(_5bc); if($(this).textbox("getText")!=_5bc){ _5bd.val(_5bc); } opts.value=_5bc; if(!_5bd.is(":focus")){ if(_5bc){ _5bd.removeClass("textbox-prompt"); }else{ _5bd.val(opts.prompt).addClass("textbox-prompt"); } } if(opts.value){ $(this).closest(".form-field").removeClass("form-field-empty"); }else{ $(this).closest(".form-field").addClass("form-field-empty"); } $(this).textbox("validate"); }); },initValue:function(jq,_5be){ return jq.each(function(){ var _5bf=$.data(this,"textbox"); $(this).textbox("setText",_5be); _5bf.textbox.find(".textbox-value").val(_5be); $(this).val(_5be); }); },setValue:function(jq,_5c0){ return jq.each(function(){ var opts=$.data(this,"textbox").options; var _5c1=$(this).textbox("getValue"); $(this).textbox("initValue",_5c0); if(_5c1!=_5c0){ opts.onChange.call(this,_5c0,_5c1); $(this).closest("form").trigger("_change",[this]); } }); },getText:function(jq){ var _5c2=jq.textbox("textbox"); if(_5c2.is(":focus")){ return _5c2.val(); }else{ return jq.textbox("options").value; } },getValue:function(jq){ return jq.data("textbox").textbox.find(".textbox-value").val(); },reset:function(jq){ return jq.each(function(){ var opts=$(this).textbox("options"); $(this).textbox("textbox").val(opts.originalValue); $(this).textbox("setValue",opts.originalValue); }); },getIcon:function(jq,_5c3){ return jq.data("textbox").textbox.find(".textbox-icon:eq("+_5c3+")"); },getTipX:function(jq,_5c4){ var _5c5=jq.data("textbox"); var opts=_5c5.options; var tb=_5c5.textbox; var _5c6=tb.find(".textbox-text"); var _5c4=_5c4||opts.tipPosition; var p1=tb.offset(); var p2=_5c6.offset(); var w1=tb.outerWidth(); var w2=_5c6.outerWidth(); if(_5c4=="right"){ return w1-w2-p2.left+p1.left; }else{ if(_5c4=="left"){ return p1.left-p2.left; }else{ return (w1-w2-p2.left+p1.left)/2-(p2.left-p1.left)/2; } } },getTipY:function(jq,_5c7){ var _5c8=jq.data("textbox"); var opts=_5c8.options; var tb=_5c8.textbox; var _5c9=tb.find(".textbox-text"); var _5c7=_5c7||opts.tipPosition; var p1=tb.offset(); var p2=_5c9.offset(); var h1=tb.outerHeight(); var h2=_5c9.outerHeight(); if(_5c7=="left"||_5c7=="right"){ return (h1-h2-p2.top+p1.top)/2-(p2.top-p1.top)/2; }else{ if(_5c7=="bottom"){ return (h1-h2-p2.top+p1.top); }else{ return (p1.top-p2.top); } } },getSelectionStart:function(jq){ return jq.textbox("getSelectionRange").start; },getSelectionRange:function(jq){ var _5ca=jq.textbox("textbox")[0]; var _5cb=0; var end=0; if(typeof _5ca.selectionStart=="number"){ _5cb=_5ca.selectionStart; end=_5ca.selectionEnd; }else{ if(_5ca.createTextRange){ var s=document.selection.createRange(); var _5cc=_5ca.createTextRange(); _5cc.setEndPoint("EndToStart",s); _5cb=_5cc.text.length; end=_5cb+s.text.length; } } return {start:_5cb,end:end}; },setSelectionRange:function(jq,_5cd){ return jq.each(function(){ var _5ce=$(this).textbox("textbox")[0]; var _5cf=_5cd.start; var end=_5cd.end; if(_5ce.setSelectionRange){ _5ce.setSelectionRange(_5cf,end); }else{ if(_5ce.createTextRange){ var _5d0=_5ce.createTextRange(); _5d0.collapse(); _5d0.moveEnd("character",end); _5d0.moveStart("character",_5cf); _5d0.select(); } } }); }}; $.fn.textbox.parseOptions=function(_5d1){ var t=$(_5d1); return $.extend({},$.fn.validatebox.parseOptions(_5d1),$.parser.parseOptions(_5d1,["prompt","iconCls","iconAlign","buttonText","buttonIcon","buttonAlign","label","labelPosition","labelAlign",{multiline:"boolean",iconWidth:"number",labelWidth:"number"}]),{value:(t.val()||undefined),type:(t.attr("type")?t.attr("type"):undefined)}); }; $.fn.textbox.defaults=$.extend({},$.fn.validatebox.defaults,{doSize:true,width:"auto",height:"auto",cls:null,prompt:"",value:"",type:"text",multiline:false,icons:[],iconCls:null,iconAlign:"right",iconWidth:26,buttonText:"",buttonIcon:null,buttonAlign:"right",label:null,labelWidth:"auto",labelPosition:"before",labelAlign:"left",inputEvents:{blur:function(e){ var t=$(e.data.target); var opts=t.textbox("options"); if(t.textbox("getValue")!=opts.value){ t.textbox("setValue",opts.value); } },keydown:function(e){ if(e.keyCode==13){ var t=$(e.data.target); t.textbox("setValue",t.textbox("getText")); } }},onChange:function(_5d2,_5d3){ },onResizing:function(_5d4,_5d5){ },onResize:function(_5d6,_5d7){ },onClickButton:function(){ },onClickIcon:function(_5d8){ }}); })(jQuery); (function($){ function _5d9(_5da){ var _5db=$.data(_5da,"passwordbox"); var opts=_5db.options; var _5dc=$.extend(true,[],opts.icons); if(opts.showEye){ _5dc.push({iconCls:"passwordbox-open",handler:function(e){ opts.revealed=!opts.revealed; _5dd(_5da); }}); } $(_5da).addClass("passwordbox-f").textbox($.extend({},opts,{icons:_5dc})); _5dd(_5da); }; function _5de(_5df,_5e0,all){ var _5e1=$(_5df).data("passwordbox"); var t=$(_5df); var opts=t.passwordbox("options"); if(opts.revealed){ t.textbox("setValue",_5e0); return; } _5e1.converting=true; var _5e2=unescape(opts.passwordChar); var cc=_5e0.split(""); var vv=t.passwordbox("getValue").split(""); for(var i=0;i=0){ vv.splice(_60c,1); } }else{ var _60a=_602(_607,_609.start); var end=_60b(_607,_609.end); var _60c=_60a-_604(_607,_60a); var _60d=end-_604(_607,end); vv.splice(_60c,_60d-_60c+1); } $(_607).maskedbox("setValue",_5fb(_607,vv.join(""))); $(_607).maskedbox("setSelectionRange",{start:_60a,end:_60a}); }; function _604(_60e,pos){ var opts=$(_60e).maskedbox("options"); var _60f=0; if(pos>=opts.mask.length){ pos--; } for(var i=pos;i>=0;i--){ if(opts.masks[opts.mask[i]]==undefined){ _60f++; } } return _60f; }; function _602(_610,pos){ var opts=$(_610).maskedbox("options"); var m=opts.mask[pos]; var r=opts.masks[m]; while(pos=0&&!r){ pos--; m=opts.mask[pos]; r=opts.masks[m]; } return pos<0?0:pos; }; function _612(e){ if(e.metaKey||e.ctrlKey){ return; } var _613=e.data.target; var opts=$(_613).maskedbox("options"); var _614=[9,13,35,36,37,39]; if($.inArray(e.keyCode,_614)!=-1){ return true; } if(e.keyCode>=96&&e.keyCode<=105){ e.keyCode-=48; } var c=String.fromCharCode(e.keyCode); if(e.keyCode>=65&&e.keyCode<=90&&!e.shiftKey){ c=c.toLowerCase(); }else{ if(e.keyCode==189){ c="-"; }else{ if(e.keyCode==187){ c="+"; }else{ if(e.keyCode==190){ c="."; } } } } if(e.keyCode==8){ _606(_613,true); }else{ if(e.keyCode==46){ _606(_613,false); }else{ _5fe(_613,c); } } return false; }; $.extend($.fn.textbox.methods,{inputMask:function(jq,_615){ return jq.each(function(){ var _616=this; var opts=$.extend({},$.fn.maskedbox.defaults,_615); $.data(_616,"maskedbox",{options:opts}); var _617=$(_616).textbox("textbox"); _617._unbind(".maskedbox"); for(var _618 in opts.inputEvents){ _617._bind(_618+".maskedbox",{target:_616},opts.inputEvents[_618]); } }); }}); $.fn.maskedbox=function(_619,_61a){ if(typeof _619=="string"){ var _61b=$.fn.maskedbox.methods[_619]; if(_61b){ return _61b(this,_61a); }else{ return this.textbox(_619,_61a); } } _619=_619||{}; return this.each(function(){ var _61c=$.data(this,"maskedbox"); if(_61c){ $.extend(_61c.options,_619); }else{ $.data(this,"maskedbox",{options:$.extend({},$.fn.maskedbox.defaults,$.fn.maskedbox.parseOptions(this),_619)}); } _5f5(this); }); }; $.fn.maskedbox.methods={options:function(jq){ var opts=jq.textbox("options"); return $.extend($.data(jq[0],"maskedbox").options,{width:opts.width,value:opts.value,originalValue:opts.originalValue,disabled:opts.disabled,readonly:opts.readonly}); },initValue:function(jq,_61d){ return jq.each(function(){ _61d=_5fb(this,_5f8(this,_61d)); $(this).textbox("initValue",_61d); }); },setValue:function(jq,_61e){ return jq.each(function(){ _61e=_5fb(this,_5f8(this,_61e)); $(this).textbox("setValue",_61e); }); }}; $.fn.maskedbox.parseOptions=function(_61f){ var t=$(_61f); return $.extend({},$.fn.textbox.parseOptions(_61f),$.parser.parseOptions(_61f,["mask","promptChar"]),{}); }; $.fn.maskedbox.defaults=$.extend({},$.fn.textbox.defaults,{mask:"",promptChar:"_",masks:{"9":"[0-9]","a":"[a-zA-Z]","*":"[0-9a-zA-Z]"},inputEvents:{keydown:_612}}); })(jQuery); (function($){ var _620=0; function _621(_622){ var _623=$.data(_622,"filebox"); var opts=_623.options; opts.fileboxId="filebox_file_id_"+(++_620); $(_622).addClass("filebox-f").textbox(opts); $(_622).textbox("textbox").attr("readonly","readonly"); _623.filebox=$(_622).next().addClass("filebox"); var file=_624(_622); var btn=$(_622).filebox("button"); if(btn.length){ $("").appendTo(btn); if(btn.linkbutton("options").disabled){ file._propAttr("disabled",true); }else{ file._propAttr("disabled",false); } } }; function _624(_625){ var _626=$.data(_625,"filebox"); var opts=_626.options; _626.filebox.find(".textbox-value").remove(); opts.oldValue=""; var file=$("").appendTo(_626.filebox); file.attr("id",opts.fileboxId).attr("name",$(_625).attr("textboxName")||""); file.attr("accept",opts.accept); file.attr("capture",opts.capture); if(opts.multiple){ file.attr("multiple","multiple"); } file.change(function(){ var _627=this.value; if(this.files){ _627=$.map(this.files,function(file){ return file.name; }).join(opts.separator); } $(_625).filebox("setText",_627); opts.onChange.call(_625,_627,opts.oldValue); opts.oldValue=_627; }); return file; }; $.fn.filebox=function(_628,_629){ if(typeof _628=="string"){ var _62a=$.fn.filebox.methods[_628]; if(_62a){ return _62a(this,_629); }else{ return this.textbox(_628,_629); } } _628=_628||{}; return this.each(function(){ var _62b=$.data(this,"filebox"); if(_62b){ $.extend(_62b.options,_628); }else{ $.data(this,"filebox",{options:$.extend({},$.fn.filebox.defaults,$.fn.filebox.parseOptions(this),_628)}); } _621(this); }); }; $.fn.filebox.methods={options:function(jq){ var opts=jq.textbox("options"); return $.extend($.data(jq[0],"filebox").options,{width:opts.width,value:opts.value,originalValue:opts.originalValue,disabled:opts.disabled,readonly:opts.readonly}); },clear:function(jq){ return jq.each(function(){ $(this).textbox("clear"); _624(this); }); },reset:function(jq){ return jq.each(function(){ $(this).filebox("clear"); }); },setValue:function(jq){ return jq; },setValues:function(jq){ return jq; },files:function(jq){ return jq.next().find(".textbox-value")[0].files; }}; $.fn.filebox.parseOptions=function(_62c){ var t=$(_62c); return $.extend({},$.fn.textbox.parseOptions(_62c),$.parser.parseOptions(_62c,["accept","capture","separator"]),{multiple:(t.attr("multiple")?true:undefined)}); }; $.fn.filebox.defaults=$.extend({},$.fn.textbox.defaults,{buttonIcon:null,buttonText:"Choose File",buttonAlign:"right",inputEvents:{},accept:"",capture:"",separator:",",multiple:false}); })(jQuery); (function($){ function _62d(_62e){ var _62f=$.data(_62e,"searchbox"); var opts=_62f.options; var _630=$.extend(true,[],opts.icons); _630.push({iconCls:"searchbox-button",handler:function(e){ var t=$(e.data.target); var opts=t.searchbox("options"); opts.searcher.call(e.data.target,t.searchbox("getValue"),t.searchbox("getName")); }}); _631(); var _632=_633(); $(_62e).addClass("searchbox-f").textbox($.extend({},opts,{icons:_630,buttonText:(_632?_632.text:"")})); $(_62e).attr("searchboxName",$(_62e).attr("textboxName")); _62f.searchbox=$(_62e).next(); _62f.searchbox.addClass("searchbox"); _634(_632); function _631(){ if(opts.menu){ _62f.menu=$(opts.menu).menu(); var _635=_62f.menu.menu("options"); var _636=_635.onClick; _635.onClick=function(item){ _634(item); _636.call(this,item); }; }else{ if(_62f.menu){ _62f.menu.menu("destroy"); } _62f.menu=null; } }; function _633(){ if(_62f.menu){ var item=_62f.menu.children("div.menu-item:first"); _62f.menu.children("div.menu-item").each(function(){ var _637=$.extend({},$.parser.parseOptions(this),{selected:($(this).attr("selected")?true:undefined)}); if(_637.selected){ item=$(this); return false; } }); return _62f.menu.menu("getItem",item[0]); }else{ return null; } }; function _634(item){ if(!item){ return; } $(_62e).textbox("button").menubutton({text:item.text,iconCls:(item.iconCls||null),menu:_62f.menu,menuAlign:opts.buttonAlign,plain:false}); _62f.searchbox.find("input.textbox-value").attr("name",item.name||item.text); $(_62e).searchbox("resize"); }; }; $.fn.searchbox=function(_638,_639){ if(typeof _638=="string"){ var _63a=$.fn.searchbox.methods[_638]; if(_63a){ return _63a(this,_639); }else{ return this.textbox(_638,_639); } } _638=_638||{}; return this.each(function(){ var _63b=$.data(this,"searchbox"); if(_63b){ $.extend(_63b.options,_638); }else{ $.data(this,"searchbox",{options:$.extend({},$.fn.searchbox.defaults,$.fn.searchbox.parseOptions(this),_638)}); } _62d(this); }); }; $.fn.searchbox.methods={options:function(jq){ var opts=jq.textbox("options"); return $.extend($.data(jq[0],"searchbox").options,{width:opts.width,value:opts.value,originalValue:opts.originalValue,disabled:opts.disabled,readonly:opts.readonly}); },menu:function(jq){ return $.data(jq[0],"searchbox").menu; },getName:function(jq){ return $.data(jq[0],"searchbox").searchbox.find("input.textbox-value").attr("name"); },selectName:function(jq,name){ return jq.each(function(){ var menu=$.data(this,"searchbox").menu; if(menu){ menu.children("div.menu-item").each(function(){ var item=menu.menu("getItem",this); if(item.name==name){ $(this).trigger("click"); return false; } }); } }); },destroy:function(jq){ return jq.each(function(){ var menu=$(this).searchbox("menu"); if(menu){ menu.menu("destroy"); } $(this).textbox("destroy"); }); }}; $.fn.searchbox.parseOptions=function(_63c){ var t=$(_63c); return $.extend({},$.fn.textbox.parseOptions(_63c),$.parser.parseOptions(_63c,["menu"]),{searcher:(t.attr("searcher")?eval(t.attr("searcher")):undefined)}); }; $.fn.searchbox.defaults=$.extend({},$.fn.textbox.defaults,{inputEvents:$.extend({},$.fn.textbox.defaults.inputEvents,{keydown:function(e){ if(e.keyCode==13){ e.preventDefault(); var t=$(e.data.target); var opts=t.searchbox("options"); t.searchbox("setValue",$(this).val()); opts.searcher.call(e.data.target,t.searchbox("getValue"),t.searchbox("getName")); return false; } }}),buttonAlign:"left",menu:null,searcher:function(_63d,name){ }}); })(jQuery); (function($){ function _63e(_63f,_640){ var opts=$.data(_63f,"form").options; $.extend(opts,_640||{}); var _641=$.extend({},opts.queryParams); if(opts.onSubmit.call(_63f,_641)==false){ return; } var _642=$(_63f).find(".textbox-text:focus"); _642.triggerHandler("blur"); _642.focus(); var _643=null; if(opts.dirty){ var ff=[]; $.map(opts.dirtyFields,function(f){ if($(f).hasClass("textbox-f")){ $(f).next().find(".textbox-value").each(function(){ ff.push(this); }); }else{ ff.push(f); } }); _643=$(_63f).find("input[name]:enabled,textarea[name]:enabled,select[name]:enabled").filter(function(){ return $.inArray(this,ff)==-1; }); _643._propAttr("disabled",true); } if(opts.ajax){ if(opts.iframe){ _644(_63f,_641); }else{ if(window.FormData!==undefined){ _645(_63f,_641); }else{ _644(_63f,_641); } } }else{ $(_63f).submit(); } if(opts.dirty){ _643._propAttr("disabled",false); } }; function _644(_646,_647){ var opts=$.data(_646,"form").options; var _648="easyui_frame_"+(new Date().getTime()); var _649=$("").appendTo("body"); _649.attr("src",window.ActiveXObject?"javascript:false":"about:blank"); _649.css({position:"absolute",top:-1000,left:-1000}); _649.bind("load",cb); _64a(_647); function _64a(_64b){ var form=$(_646); if(opts.url){ form.attr("action",opts.url); } var t=form.attr("target"),a=form.attr("action"); form.attr("target",_648); var _64c=$(); try{ for(var n in _64b){ var _64d=$("").val(_64b[n]).appendTo(form); _64c=_64c.add(_64d); } _64e(); form[0].submit(); } finally{ form.attr("action",a); t?form.attr("target",t):form.removeAttr("target"); _64c.remove(); } }; function _64e(){ var f=$("#"+_648); if(!f.length){ return; } try{ var s=f.contents()[0].readyState; if(s&&s.toLowerCase()=="uninitialized"){ setTimeout(_64e,100); } } catch(e){ cb(); } }; var _64f=10; function cb(){ var f=$("#"+_648); if(!f.length){ return; } f.unbind(); var data=""; try{ var body=f.contents().find("body"); data=body.html(); if(data==""){ if(--_64f){ setTimeout(cb,100); return; } } var ta=body.find(">textarea"); if(ta.length){ data=ta.val(); }else{ var pre=body.find(">pre"); if(pre.length){ data=pre.html(); } } } catch(e){ } opts.success.call(_646,data); setTimeout(function(){ f.unbind(); f.remove(); },100); }; }; function _645(_650,_651){ var opts=$.data(_650,"form").options; var _652=new FormData($(_650)[0]); for(var name in _651){ _652.append(name,_651[name]); } $.ajax({url:opts.url,type:"post",xhr:function(){ var xhr=$.ajaxSettings.xhr(); if(xhr.upload){ xhr.upload.addEventListener("progress",function(e){ if(e.lengthComputable){ var _653=e.total; var _654=e.loaded||e.position; var _655=Math.ceil(_654*100/_653); opts.onProgress.call(_650,_655); } },false); } return xhr; },data:_652,dataType:"html",cache:false,contentType:false,processData:false,complete:function(res){ opts.success.call(_650,res.responseText); }}); }; function load(_656,data){ var opts=$.data(_656,"form").options; if(typeof data=="string"){ var _657={}; if(opts.onBeforeLoad.call(_656,_657)==false){ return; } $.ajax({url:data,data:_657,dataType:"json",success:function(data){ _658(data); },error:function(){ opts.onLoadError.apply(_656,arguments); }}); }else{ _658(data); } function _658(data){ var form=$(_656); for(var name in data){ var val=data[name]; if(!_659(name,val)){ if(!_65a(name,val)){ form.find("input[name=\""+name+"\"]").val(val); form.find("textarea[name=\""+name+"\"]").val(val); form.find("select[name=\""+name+"\"]").val(val); } } } opts.onLoadSuccess.call(_656,data); form.form("validate"); }; function _659(name,val){ var _65b=["switchbutton","radiobutton","checkbox"]; for(var i=0;i<_65b.length;i++){ var _65c=_65b[i]; var cc=$(_656).find("["+_65c+"Name=\""+name+"\"]"); if(cc.length){ cc[_65c]("uncheck"); cc.each(function(){ if(_65d($(this)[_65c]("options").value,val)){ $(this)[_65c]("check"); } }); return true; } } var cc=$(_656).find("input[name=\""+name+"\"][type=radio], input[name=\""+name+"\"][type=checkbox]"); if(cc.length){ cc._propAttr("checked",false); cc.each(function(){ if(_65d($(this).val(),val)){ $(this)._propAttr("checked",true); } }); return true; } return false; }; function _65d(v,val){ if(v==String(val)||$.inArray(v,$.isArray(val)?val:[val])>=0){ return true; }else{ return false; } }; function _65a(name,val){ var _65e=$(_656).find("[textboxName=\""+name+"\"],[sliderName=\""+name+"\"]"); if(_65e.length){ for(var i=0;i=0;i--){ var type=opts.fieldTypes[i]; var _666=form.find("."+type+"-f"); if(_666.length&&_666[type]){ _666[type]("reset"); } } form.form("validate"); }; function _667(_668){ var _669=$.data(_668,"form").options; $(_668).unbind(".form"); if(_669.ajax){ $(_668).bind("submit.form",function(){ setTimeout(function(){ _63e(_668,_669); },0); return false; }); } $(_668).bind("_change.form",function(e,t){ if($.inArray(t,_669.dirtyFields)==-1){ _669.dirtyFields.push(t); } _669.onChange.call(this,t); }).bind("change.form",function(e){ var t=e.target; if(!$(t).hasClass("textbox-text")){ if($.inArray(t,_669.dirtyFields)==-1){ _669.dirtyFields.push(t); } _669.onChange.call(this,t); } }); _66a(_668,_669.novalidate); }; function _66b(_66c,_66d){ _66d=_66d||{}; var _66e=$.data(_66c,"form"); if(_66e){ $.extend(_66e.options,_66d); }else{ $.data(_66c,"form",{options:$.extend({},$.fn.form.defaults,$.fn.form.parseOptions(_66c),_66d)}); } }; function _66f(_670){ if($.fn.validatebox){ var t=$(_670); t.find(".validatebox-text:not(:disabled)").validatebox("validate"); var _671=t.find(".validatebox-invalid"); _671.filter(":not(:disabled):first").focus(); return _671.length==0; } return true; }; function _66a(_672,_673){ var opts=$.data(_672,"form").options; opts.novalidate=_673; $(_672).find(".validatebox-text:not(:disabled)").validatebox(_673?"disableValidation":"enableValidation"); }; $.fn.form=function(_674,_675){ if(typeof _674=="string"){ this.each(function(){ _66b(this); }); return $.fn.form.methods[_674](this,_675); } return this.each(function(){ _66b(this,_674); _667(this); }); }; $.fn.form.methods={options:function(jq){ return $.data(jq[0],"form").options; },submit:function(jq,_676){ return jq.each(function(){ _63e(this,_676); }); },load:function(jq,data){ return jq.each(function(){ load(this,data); }); },clear:function(jq){ return jq.each(function(){ _660(this); }); },reset:function(jq){ return jq.each(function(){ _664(this); }); },validate:function(jq){ return _66f(jq[0]); },disableValidation:function(jq){ return jq.each(function(){ _66a(this,true); }); },enableValidation:function(jq){ return jq.each(function(){ _66a(this,false); }); },resetValidation:function(jq){ return jq.each(function(){ $(this).find(".validatebox-text:not(:disabled)").validatebox("resetValidation"); }); },resetDirty:function(jq){ return jq.each(function(){ $(this).form("options").dirtyFields=[]; }); }}; $.fn.form.parseOptions=function(_677){ var t=$(_677); return $.extend({},$.parser.parseOptions(_677,[{ajax:"boolean",dirty:"boolean"}]),{url:(t.attr("action")?t.attr("action"):undefined)}); }; $.fn.form.defaults={fieldTypes:["tagbox","combobox","combotree","combogrid","combotreegrid","datetimebox","datebox","timepicker","combo","datetimespinner","timespinner","numberspinner","spinner","slider","searchbox","numberbox","passwordbox","filebox","textbox","switchbutton","radiobutton","checkbox"],novalidate:false,ajax:true,iframe:true,dirty:false,dirtyFields:[],url:null,queryParams:{},onSubmit:function(_678){ return $(this).form("validate"); },onProgress:function(_679){ },success:function(data){ },onBeforeLoad:function(_67a){ },onLoadSuccess:function(data){ },onLoadError:function(){ },onChange:function(_67b){ }}; })(jQuery); (function($){ function _67c(_67d){ var _67e=$.data(_67d,"numberbox"); var opts=_67e.options; $(_67d).addClass("numberbox-f").textbox(opts); $(_67d).textbox("textbox").css({imeMode:"disabled"}); $(_67d).attr("numberboxName",$(_67d).attr("textboxName")); _67e.numberbox=$(_67d).next(); _67e.numberbox.addClass("numberbox"); var _67f=opts.parser.call(_67d,opts.value); var _680=opts.formatter.call(_67d,_67f); $(_67d).numberbox("initValue",_67f).numberbox("setText",_680); }; function _681(_682,_683){ var _684=$.data(_682,"numberbox"); var opts=_684.options; opts.value=parseFloat(_683); var _683=opts.parser.call(_682,_683); var text=opts.formatter.call(_682,_683); opts.value=_683; $(_682).textbox("setText",text).textbox("setValue",_683); text=opts.formatter.call(_682,$(_682).textbox("getValue")); $(_682).textbox("setText",text); }; $.fn.numberbox=function(_685,_686){ if(typeof _685=="string"){ var _687=$.fn.numberbox.methods[_685]; if(_687){ return _687(this,_686); }else{ return this.textbox(_685,_686); } } _685=_685||{}; return this.each(function(){ var _688=$.data(this,"numberbox"); if(_688){ $.extend(_688.options,_685); }else{ _688=$.data(this,"numberbox",{options:$.extend({},$.fn.numberbox.defaults,$.fn.numberbox.parseOptions(this),_685)}); } _67c(this); }); }; $.fn.numberbox.methods={options:function(jq){ var opts=jq.data("textbox")?jq.textbox("options"):{}; return $.extend($.data(jq[0],"numberbox").options,{width:opts.width,originalValue:opts.originalValue,disabled:opts.disabled,readonly:opts.readonly}); },cloneFrom:function(jq,from){ return jq.each(function(){ $(this).textbox("cloneFrom",from); $.data(this,"numberbox",{options:$.extend(true,{},$(from).numberbox("options"))}); $(this).addClass("numberbox-f"); }); },fix:function(jq){ return jq.each(function(){ var opts=$(this).numberbox("options"); opts.value=null; var _689=opts.parser.call(this,$(this).numberbox("getText")); $(this).numberbox("setValue",_689); }); },setValue:function(jq,_68a){ return jq.each(function(){ _681(this,_68a); }); },clear:function(jq){ return jq.each(function(){ $(this).textbox("clear"); $(this).numberbox("options").value=""; }); },reset:function(jq){ return jq.each(function(){ $(this).textbox("reset"); $(this).numberbox("setValue",$(this).numberbox("getValue")); }); }}; $.fn.numberbox.parseOptions=function(_68b){ var t=$(_68b); return $.extend({},$.fn.textbox.parseOptions(_68b),$.parser.parseOptions(_68b,["decimalSeparator","groupSeparator","suffix",{min:"number",max:"number",precision:"number"}]),{prefix:(t.attr("prefix")?t.attr("prefix"):undefined)}); }; $.fn.numberbox.defaults=$.extend({},$.fn.textbox.defaults,{inputEvents:{keypress:function(e){ var _68c=e.data.target; var opts=$(_68c).numberbox("options"); return opts.filter.call(_68c,e); },blur:function(e){ $(e.data.target).numberbox("fix"); },keydown:function(e){ if(e.keyCode==13){ $(e.data.target).numberbox("fix"); } }},min:null,max:null,precision:0,decimalSeparator:".",groupSeparator:"",prefix:"",suffix:"",filter:function(e){ var opts=$(this).numberbox("options"); var s=$(this).numberbox("getText"); if(e.metaKey||e.ctrlKey){ return true; } if($.inArray(String(e.which),["46","8","13","0"])>=0){ return true; } var tmp=$(""); tmp.html(String.fromCharCode(e.which)); var c=tmp.text(); tmp.remove(); if(!c){ return true; } if(c=="-"&&opts.min!=null&&opts.min>=0){ return false; } if(c=="-"||c==opts.decimalSeparator){ return (s.indexOf(c)==-1)?true:false; }else{ if(c==opts.groupSeparator){ return true; }else{ if("0123456789".indexOf(c)>=0){ return true; }else{ return false; } } } },formatter:function(_68d){ if(!_68d){ return _68d; } _68d=_68d+""; var opts=$(this).numberbox("options"); var s1=_68d,s2=""; var dpos=_68d.indexOf("."); if(dpos>=0){ s1=_68d.substring(0,dpos); s2=_68d.substring(dpos+1,_68d.length); } if(opts.groupSeparator){ var p=/(\d+)(\d{3})/; while(p.test(s1)){ s1=s1.replace(p,"$1"+opts.groupSeparator+"$2"); } } if(s2){ return opts.prefix+s1+opts.decimalSeparator+s2+opts.suffix; }else{ return opts.prefix+s1+opts.suffix; } },parser:function(s){ s=s+""; var opts=$(this).numberbox("options"); if(opts.prefix){ s=$.trim(s.replace(new RegExp("\\"+$.trim(opts.prefix),"g"),"")); } if(opts.suffix){ s=$.trim(s.replace(new RegExp("\\"+$.trim(opts.suffix),"g"),"")); } if(parseFloat(s)!=opts.value){ if(opts.groupSeparator){ s=$.trim(s.replace(new RegExp("\\"+opts.groupSeparator,"g"),"")); } if(opts.decimalSeparator){ s=$.trim(s.replace(new RegExp("\\"+opts.decimalSeparator,"g"),".")); } s=s.replace(/\s/g,""); } var val=parseFloat(s).toFixed(opts.precision); if(isNaN(val)){ val=""; }else{ if(typeof (opts.min)=="number"&&valopts.max){ val=opts.max.toFixed(opts.precision); } } } return val; }}); })(jQuery); (function($){ function _68e(_68f,_690){ var opts=$.data(_68f,"calendar").options; var t=$(_68f); if(_690){ $.extend(opts,{width:_690.width,height:_690.height}); } t._size(opts,t.parent()); t.find(".calendar-body")._outerHeight(t.height()-t.find(".calendar-header")._outerHeight()); if(t.find(".calendar-menu").is(":visible")){ _691(_68f); } }; function init(_692){ $(_692).addClass("calendar").html("
                                  "+"
                                  "+"
                                  "+"
                                  "+"
                                  "+"
                                  "+""+"
                                  "+"
                                  "+"
                                  "+"
                                  "+"
                                  "+""+""+""+"
                                  "+"
                                  "+"
                                  "+"
                                  "+"
                                  "); $(_692)._bind("_resize",function(e,_693){ if($(this).hasClass("easyui-fluid")||_693){ _68e(_692); } return false; }); }; function _694(_695){ var opts=$.data(_695,"calendar").options; var menu=$(_695).find(".calendar-menu"); menu.find(".calendar-menu-year")._unbind(".calendar")._bind("keypress.calendar",function(e){ if(e.keyCode==13){ _696(true); } }); $(_695)._unbind(".calendar")._bind("mouseover.calendar",function(e){ var t=_697(e.target); if(t.hasClass("calendar-nav")||t.hasClass("calendar-text")||(t.hasClass("calendar-day")&&!t.hasClass("calendar-disabled"))){ t.addClass("calendar-nav-hover"); } })._bind("mouseout.calendar",function(e){ var t=_697(e.target); if(t.hasClass("calendar-nav")||t.hasClass("calendar-text")||(t.hasClass("calendar-day")&&!t.hasClass("calendar-disabled"))){ t.removeClass("calendar-nav-hover"); } })._bind("click.calendar",function(e){ var t=_697(e.target); if(t.hasClass("calendar-menu-next")||t.hasClass("calendar-nextyear")){ _698(1); }else{ if(t.hasClass("calendar-menu-prev")||t.hasClass("calendar-prevyear")){ _698(-1); }else{ if(t.hasClass("calendar-menu-month")){ menu.find(".calendar-selected").removeClass("calendar-selected"); t.addClass("calendar-selected"); _696(true); }else{ if(t.hasClass("calendar-prevmonth")){ _699(-1); }else{ if(t.hasClass("calendar-nextmonth")){ _699(1); }else{ if(t.hasClass("calendar-text")){ if(menu.is(":visible")){ menu.hide(); }else{ _691(_695); } }else{ if(t.hasClass("calendar-day")){ if(t.hasClass("calendar-disabled")){ return; } var _69a=opts.current; t.closest("div.calendar-body").find(".calendar-selected").removeClass("calendar-selected"); t.addClass("calendar-selected"); var _69b=t.attr("abbr").split(","); var y=parseInt(_69b[0]); var m=parseInt(_69b[1]); var d=parseInt(_69b[2]); opts.current=new opts.Date(y,m-1,d); opts.onSelect.call(_695,opts.current); if(!_69a||_69a.getTime()!=opts.current.getTime()){ opts.onChange.call(_695,opts.current,_69a); } if(opts.year!=y||opts.month!=m){ opts.year=y; opts.month=m; show(_695); } } } } } } } } }); function _697(t){ var day=$(t).closest(".calendar-day"); if(day.length){ return day; }else{ return $(t); } }; function _696(_69c){ var menu=$(_695).find(".calendar-menu"); var year=menu.find(".calendar-menu-year").val(); var _69d=menu.find(".calendar-selected").attr("abbr"); if(!isNaN(year)){ opts.year=parseInt(year); opts.month=parseInt(_69d); show(_695); } if(_69c){ menu.hide(); } }; function _698(_69e){ opts.year+=_69e; show(_695); menu.find(".calendar-menu-year").val(opts.year); }; function _699(_69f){ opts.month+=_69f; if(opts.month>12){ opts.year++; opts.month=1; }else{ if(opts.month<1){ opts.year--; opts.month=12; } } show(_695); menu.find("td.calendar-selected").removeClass("calendar-selected"); menu.find("td:eq("+(opts.month-1)+")").addClass("calendar-selected"); }; }; function _691(_6a0){ var opts=$.data(_6a0,"calendar").options; $(_6a0).find(".calendar-menu").show(); if($(_6a0).find(".calendar-menu-month-inner").is(":empty")){ $(_6a0).find(".calendar-menu-month-inner").empty(); var t=$("
                                  ").appendTo($(_6a0).find(".calendar-menu-month-inner")); var idx=0; for(var i=0;i<3;i++){ var tr=$("").appendTo(t); for(var j=0;j<4;j++){ $("").html(opts.months[idx++]).attr("abbr",idx).appendTo(tr); } } } var body=$(_6a0).find(".calendar-body"); var sele=$(_6a0).find(".calendar-menu"); var _6a1=sele.find(".calendar-menu-year-inner"); var _6a2=sele.find(".calendar-menu-month-inner"); _6a1.find("input").val(opts.year).focus(); _6a2.find("td.calendar-selected").removeClass("calendar-selected"); _6a2.find("td:eq("+(opts.month-1)+")").addClass("calendar-selected"); sele._outerWidth(body._outerWidth()); sele._outerHeight(body._outerHeight()); _6a2._outerHeight(sele.height()-_6a1._outerHeight()); }; function _6a3(_6a4,year,_6a5){ var opts=$.data(_6a4,"calendar").options; var _6a6=[]; var _6a7=new opts.Date(year,_6a5,0).getDate(); for(var i=1;i<=_6a7;i++){ _6a6.push([year,_6a5,i]); } var _6a8=[],week=[]; var _6a9=-1; while(_6a6.length>0){ var date=_6a6.shift(); week.push(date); var day=new opts.Date(date[0],date[1]-1,date[2]).getDay(); if(_6a9==day){ day=0; }else{ if(day==(opts.firstDay==0?7:opts.firstDay)-1){ _6a8.push(week); week=[]; } } _6a9=day; } if(week.length){ _6a8.push(week); } var _6aa=_6a8[0]; if(_6aa.length<7){ while(_6aa.length<7){ var _6ab=_6aa[0]; var date=new opts.Date(_6ab[0],_6ab[1]-1,_6ab[2]-1); _6aa.unshift([date.getFullYear(),date.getMonth()+1,date.getDate()]); } }else{ var _6ab=_6aa[0]; var week=[]; for(var i=1;i<=7;i++){ var date=new opts.Date(_6ab[0],_6ab[1]-1,_6ab[2]-i); week.unshift([date.getFullYear(),date.getMonth()+1,date.getDate()]); } _6a8.unshift(week); } var _6ac=_6a8[_6a8.length-1]; while(_6ac.length<7){ var _6ad=_6ac[_6ac.length-1]; var date=new opts.Date(_6ad[0],_6ad[1]-1,_6ad[2]+1); _6ac.push([date.getFullYear(),date.getMonth()+1,date.getDate()]); } if(_6a8.length<6){ var _6ad=_6ac[_6ac.length-1]; var week=[]; for(var i=1;i<=7;i++){ var date=new opts.Date(_6ad[0],_6ad[1]-1,_6ad[2]+i); week.push([date.getFullYear(),date.getMonth()+1,date.getDate()]); } _6a8.push(week); } return _6a8; }; function show(_6ae){ var opts=$.data(_6ae,"calendar").options; if(opts.current&&!opts.validator.call(_6ae,opts.current)){ opts.current=null; } var now=new opts.Date(); var _6af=now.getFullYear()+","+(now.getMonth()+1)+","+now.getDate(); var _6b0=opts.current?(opts.current.getFullYear()+","+(opts.current.getMonth()+1)+","+opts.current.getDate()):""; var _6b1=6-opts.firstDay; var _6b2=_6b1+1; if(_6b1>=7){ _6b1-=7; } if(_6b2>=7){ _6b2-=7; } $(_6ae).find(".calendar-title span").html(opts.months[opts.month-1]+" "+opts.year); var body=$(_6ae).find("div.calendar-body"); body.children("table").remove(); var data=[""]; data.push(""); if(opts.showWeek){ data.push(""); } for(var i=opts.firstDay;i"+opts.weeks[i]+""); } for(var i=0;i"+opts.weeks[i]+""); } data.push(""); data.push(""); var _6b3=_6a3(_6ae,opts.year,opts.month); for(var i=0;i<_6b3.length;i++){ var week=_6b3[i]; var cls=""; if(i==0){ cls="calendar-first"; }else{ if(i==_6b3.length-1){ cls="calendar-last"; } } data.push(""); if(opts.showWeek){ var _6b4=opts.getWeekNumber(new opts.Date(week[0][0],parseInt(week[0][1])-1,week[0][2])); data.push(""); } for(var j=0;j"+d+""); } data.push(""); } data.push(""); data.push("
                                  "+opts.weekNumberHeader+"
                                  "+_6b4+"
                                  "); body.append(data.join("")); body.children("table.calendar-dtable").prependTo(body); opts.onNavigate.call(_6ae,opts.year,opts.month); }; $.fn.calendar=function(_6b8,_6b9){ if(typeof _6b8=="string"){ return $.fn.calendar.methods[_6b8](this,_6b9); } _6b8=_6b8||{}; return this.each(function(){ var _6ba=$.data(this,"calendar"); if(_6ba){ $.extend(_6ba.options,_6b8); }else{ _6ba=$.data(this,"calendar",{options:$.extend({},$.fn.calendar.defaults,$.fn.calendar.parseOptions(this),_6b8)}); init(this); } if(_6ba.options.border==false){ $(this).addClass("calendar-noborder"); } _68e(this); _694(this); show(this); $(this).find("div.calendar-menu").hide(); }); }; $.fn.calendar.methods={options:function(jq){ return $.data(jq[0],"calendar").options; },resize:function(jq,_6bb){ return jq.each(function(){ _68e(this,_6bb); }); },moveTo:function(jq,date){ return jq.each(function(){ var opts=$(this).calendar("options"); if(!date){ var now=new opts.Date(); $(this).calendar({year:now.getFullYear(),month:now.getMonth()+1,current:date}); return; } if(opts.validator.call(this,date)){ var _6bc=opts.current; $(this).calendar({year:date.getFullYear(),month:date.getMonth()+1,current:date}); if(!_6bc||_6bc.getTime()!=date.getTime()){ opts.onChange.call(this,opts.current,_6bc); } } }); }}; $.fn.calendar.parseOptions=function(_6bd){ var t=$(_6bd); return $.extend({},$.parser.parseOptions(_6bd,["weekNumberHeader",{firstDay:"number",fit:"boolean",border:"boolean",showWeek:"boolean"}])); }; $.fn.calendar.defaults={Date:Date,width:180,height:180,fit:false,border:true,showWeek:false,firstDay:0,weeks:["S","M","T","W","T","F","S"],months:["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"],year:new Date().getFullYear(),month:new Date().getMonth()+1,current:(function(){ var d=new Date(); return new Date(d.getFullYear(),d.getMonth(),d.getDate()); })(),weekNumberHeader:"",getWeekNumber:function(date){ var _6be=new Date(date.getTime()); _6be.setDate(_6be.getDate()+4-(_6be.getDay()||7)); var time=_6be.getTime(); _6be.setMonth(0); _6be.setDate(1); return Math.floor(Math.round((time-_6be)/86400000)/7)+1; },formatter:function(date){ return date.getDate(); },styler:function(date){ return ""; },validator:function(date){ return true; },onSelect:function(date){ },onChange:function(_6bf,_6c0){ },onNavigate:function(year,_6c1){ }}; })(jQuery); (function($){ function _6c2(_6c3){ var _6c4=$.data(_6c3,"spinner"); var opts=_6c4.options; var _6c5=$.extend(true,[],opts.icons); if(opts.spinAlign=="left"||opts.spinAlign=="right"){ opts.spinArrow=true; opts.iconAlign=opts.spinAlign; var _6c6={iconCls:"spinner-button-updown",handler:function(e){ var spin=$(e.target).closest(".spinner-arrow-up,.spinner-arrow-down"); _6d0(e.data.target,spin.hasClass("spinner-arrow-down")); }}; if(opts.spinAlign=="left"){ _6c5.unshift(_6c6); }else{ _6c5.push(_6c6); } }else{ opts.spinArrow=false; if(opts.spinAlign=="vertical"){ if(opts.buttonAlign!="top"){ opts.buttonAlign="bottom"; } opts.clsLeft="textbox-button-bottom"; opts.clsRight="textbox-button-top"; }else{ opts.clsLeft="textbox-button-left"; opts.clsRight="textbox-button-right"; } } $(_6c3).addClass("spinner-f").textbox($.extend({},opts,{icons:_6c5,doSize:false,onResize:function(_6c7,_6c8){ if(!opts.spinArrow){ var span=$(this).next(); var btn=span.find(".textbox-button:not(.spinner-button)"); if(btn.length){ var _6c9=btn.outerWidth(); var _6ca=btn.outerHeight(); var _6cb=span.find(".spinner-button."+opts.clsLeft); var _6cc=span.find(".spinner-button."+opts.clsRight); if(opts.buttonAlign=="right"){ _6cc.css("marginRight",_6c9+"px"); }else{ if(opts.buttonAlign=="left"){ _6cb.css("marginLeft",_6c9+"px"); }else{ if(opts.buttonAlign=="top"){ _6cc.css("marginTop",_6ca+"px"); }else{ _6cb.css("marginBottom",_6ca+"px"); } } } } } opts.onResize.call(this,_6c7,_6c8); }})); $(_6c3).attr("spinnerName",$(_6c3).attr("textboxName")); _6c4.spinner=$(_6c3).next(); _6c4.spinner.addClass("spinner"); if(opts.spinArrow){ var _6cd=_6c4.spinner.find(".spinner-button-updown"); _6cd.append(""+""+""+""+""+""); }else{ var _6ce=$("").addClass(opts.clsLeft).appendTo(_6c4.spinner); var _6cf=$("").addClass(opts.clsRight).appendTo(_6c4.spinner); _6ce.linkbutton({iconCls:opts.reversed?"spinner-button-up":"spinner-button-down",onClick:function(){ _6d0(_6c3,!opts.reversed); }}); _6cf.linkbutton({iconCls:opts.reversed?"spinner-button-down":"spinner-button-up",onClick:function(){ _6d0(_6c3,opts.reversed); }}); if(opts.disabled){ $(_6c3).spinner("disable"); } if(opts.readonly){ $(_6c3).spinner("readonly"); } } $(_6c3).spinner("resize"); }; function _6d0(_6d1,down){ var opts=$(_6d1).spinner("options"); opts.spin.call(_6d1,down); opts[down?"onSpinDown":"onSpinUp"].call(_6d1); $(_6d1).spinner("validate"); }; $.fn.spinner=function(_6d2,_6d3){ if(typeof _6d2=="string"){ var _6d4=$.fn.spinner.methods[_6d2]; if(_6d4){ return _6d4(this,_6d3); }else{ return this.textbox(_6d2,_6d3); } } _6d2=_6d2||{}; return this.each(function(){ var _6d5=$.data(this,"spinner"); if(_6d5){ $.extend(_6d5.options,_6d2); }else{ _6d5=$.data(this,"spinner",{options:$.extend({},$.fn.spinner.defaults,$.fn.spinner.parseOptions(this),_6d2)}); } _6c2(this); }); }; $.fn.spinner.methods={options:function(jq){ var opts=jq.textbox("options"); return $.extend($.data(jq[0],"spinner").options,{width:opts.width,value:opts.value,originalValue:opts.originalValue,disabled:opts.disabled,readonly:opts.readonly}); }}; $.fn.spinner.parseOptions=function(_6d6){ return $.extend({},$.fn.textbox.parseOptions(_6d6),$.parser.parseOptions(_6d6,["min","max","spinAlign",{increment:"number",reversed:"boolean"}])); }; $.fn.spinner.defaults=$.extend({},$.fn.textbox.defaults,{min:null,max:null,increment:1,spinAlign:"right",reversed:false,spin:function(down){ },onSpinUp:function(){ },onSpinDown:function(){ }}); })(jQuery); (function($){ function _6d7(_6d8){ $(_6d8).addClass("numberspinner-f"); var opts=$.data(_6d8,"numberspinner").options; $(_6d8).numberbox($.extend({},opts,{doSize:false})).spinner(opts); $(_6d8).numberbox("setValue",opts.value); }; function _6d9(_6da,down){ var opts=$.data(_6da,"numberspinner").options; var v=parseFloat($(_6da).numberbox("getValue")||opts.value)||0; if(down){ v-=opts.increment; }else{ v+=opts.increment; } $(_6da).numberbox("setValue",v); }; $.fn.numberspinner=function(_6db,_6dc){ if(typeof _6db=="string"){ var _6dd=$.fn.numberspinner.methods[_6db]; if(_6dd){ return _6dd(this,_6dc); }else{ return this.numberbox(_6db,_6dc); } } _6db=_6db||{}; return this.each(function(){ var _6de=$.data(this,"numberspinner"); if(_6de){ $.extend(_6de.options,_6db); }else{ $.data(this,"numberspinner",{options:$.extend({},$.fn.numberspinner.defaults,$.fn.numberspinner.parseOptions(this),_6db)}); } _6d7(this); }); }; $.fn.numberspinner.methods={options:function(jq){ var opts=jq.numberbox("options"); return $.extend($.data(jq[0],"numberspinner").options,{width:opts.width,value:opts.value,originalValue:opts.originalValue,disabled:opts.disabled,readonly:opts.readonly}); }}; $.fn.numberspinner.parseOptions=function(_6df){ return $.extend({},$.fn.spinner.parseOptions(_6df),$.fn.numberbox.parseOptions(_6df),{}); }; $.fn.numberspinner.defaults=$.extend({},$.fn.spinner.defaults,$.fn.numberbox.defaults,{spin:function(down){ _6d9(this,down); }}); })(jQuery); (function($){ function _6e0(_6e1){ var opts=$.data(_6e1,"timespinner").options; $(_6e1).addClass("timespinner-f").spinner(opts); var _6e2=opts.formatter.call(_6e1,opts.parser.call(_6e1,opts.value)); $(_6e1).timespinner("initValue",_6e2); }; function _6e3(e){ var _6e4=e.data.target; var opts=$.data(_6e4,"timespinner").options; var _6e5=$(_6e4).timespinner("getSelectionStart"); for(var i=0;i=_6e6[0]&&_6e5<=_6e6[1]){ _6e7(_6e4,i); return; } } }; function _6e7(_6e8,_6e9){ var opts=$.data(_6e8,"timespinner").options; if(_6e9!=undefined){ opts.highlight=_6e9; } var _6ea=opts.selections[opts.highlight]; if(_6ea){ var tb=$(_6e8).timespinner("textbox"); $(_6e8).timespinner("setSelectionRange",{start:_6ea[0],end:_6ea[1]}); tb.focus(); } }; function _6eb(_6ec,_6ed){ var opts=$.data(_6ec,"timespinner").options; var _6ed=opts.parser.call(_6ec,_6ed); var text=opts.formatter.call(_6ec,_6ed); $(_6ec).spinner("setValue",text); }; function _6ee(_6ef,down){ var opts=$.data(_6ef,"timespinner").options; var s=$(_6ef).timespinner("getValue"); var _6f0=opts.selections[opts.highlight]; var s1=s.substring(0,_6f0[0]); var s2=s.substring(_6f0[0],_6f0[1]); var s3=s.substring(_6f0[1]); if(s2==opts.ampm[0]){ s2=opts.ampm[1]; }else{ if(s2==opts.ampm[1]){ s2=opts.ampm[0]; }else{ s2=parseInt(s2,10)||0; if(opts.selections.length-4==opts.highlight&&opts.hour12){ if(s2==12){ s2=0; }else{ if(s2==11&&!down){ var tmp=s3.replace(opts.ampm[0],opts.ampm[1]); if(s3!=tmp){ s3=tmp; }else{ s3=s3.replace(opts.ampm[1],opts.ampm[0]); } } } } s2=s2+opts.increment*(down?-1:1); } } var v=s1+s2+s3; $(_6ef).timespinner("setValue",v); _6e7(_6ef); }; $.fn.timespinner=function(_6f1,_6f2){ if(typeof _6f1=="string"){ var _6f3=$.fn.timespinner.methods[_6f1]; if(_6f3){ return _6f3(this,_6f2); }else{ return this.spinner(_6f1,_6f2); } } _6f1=_6f1||{}; return this.each(function(){ var _6f4=$.data(this,"timespinner"); if(_6f4){ $.extend(_6f4.options,_6f1); }else{ $.data(this,"timespinner",{options:$.extend({},$.fn.timespinner.defaults,$.fn.timespinner.parseOptions(this),_6f1)}); } _6e0(this); }); }; $.fn.timespinner.methods={options:function(jq){ var opts=jq.data("spinner")?jq.spinner("options"):{}; return $.extend($.data(jq[0],"timespinner").options,{width:opts.width,value:opts.value,originalValue:opts.originalValue,disabled:opts.disabled,readonly:opts.readonly}); },setValue:function(jq,_6f5){ return jq.each(function(){ _6eb(this,_6f5); }); },getHours:function(jq){ var opts=$.data(jq[0],"timespinner").options; var date=opts.parser.call(jq[0],jq.timespinner("getValue")); return date?date.getHours():null; },getMinutes:function(jq){ var opts=$.data(jq[0],"timespinner").options; var date=opts.parser.call(jq[0],jq.timespinner("getValue")); return date?date.getMinutes():null; },getSeconds:function(jq){ var opts=$.data(jq[0],"timespinner").options; var date=opts.parser.call(jq[0],jq.timespinner("getValue")); return date?date.getSeconds():null; }}; $.fn.timespinner.parseOptions=function(_6f6){ return $.extend({},$.fn.spinner.parseOptions(_6f6),$.parser.parseOptions(_6f6,["separator",{hour12:"boolean",showSeconds:"boolean",highlight:"number"}])); }; $.fn.timespinner.defaults=$.extend({},$.fn.spinner.defaults,{inputEvents:$.extend({},$.fn.spinner.defaults.inputEvents,{click:function(e){ _6e3.call(this,e); },blur:function(e){ var t=$(e.data.target); t.timespinner("setValue",t.timespinner("getText")); },keydown:function(e){ if(e.keyCode==13){ var t=$(e.data.target); t.timespinner("setValue",t.timespinner("getText")); } }}),formatter:function(date){ if(!date){ return ""; } var opts=$(this).timespinner("options"); var hour=date.getHours(); var _6f7=date.getMinutes(); var _6f8=date.getSeconds(); var ampm=""; if(opts.hour12){ ampm=hour>=12?opts.ampm[1]:opts.ampm[0]; hour=hour%12; if(hour==0){ hour=12; } } var tt=[_6f9(hour),_6f9(_6f7)]; if(opts.showSeconds){ tt.push(_6f9(_6f8)); } var s=tt.join(opts.separator)+" "+ampm; return $.trim(s); function _6f9(_6fa){ return (_6fa<10?"0":"")+_6fa; }; },parser:function(s){ var opts=$(this).timespinner("options"); var date=_6fb(s); if(date){ var min=_6fb(opts.min); var max=_6fb(opts.max); if(min&&min>date){ date=min; } if(max&&max"]; for(var i=0;i<_712.length;i++){ _711.cache[_712[i][0]]={width:_712[i][1]}; } var _713=0; for(var s in _711.cache){ var item=_711.cache[s]; item.index=_713++; ss.push(s+"{width:"+item.width+"}"); } ss.push(""); $(ss.join("\n")).appendTo(cc); cc.children("style[easyui]:not(:last)").remove(); },getRule:function(_714){ var _715=cc.children("style[easyui]:last")[0]; var _716=_715.styleSheet?_715.styleSheet:(_715.sheet||document.styleSheets[document.styleSheets.length-1]); var _717=_716.cssRules||_716.rules; return _717[_714]; },set:function(_718,_719){ var item=_711.cache[_718]; if(item){ item.width=_719; var rule=this.getRule(item.index); if(rule){ rule.style["width"]=_719; } } },remove:function(_71a){ var tmp=[]; for(var s in _711.cache){ if(s.indexOf(_71a)==-1){ tmp.push([s,_711.cache[s].width]); } } _711.cache={}; this.add(tmp); },dirty:function(_71b){ if(_71b){ _711.dirty.push(_71b); } },clean:function(){ for(var i=0;i<_711.dirty.length;i++){ this.remove(_711.dirty[i]); } _711.dirty=[]; }}; }; function _71c(_71d,_71e){ var _71f=$.data(_71d,"datagrid"); var opts=_71f.options; var _720=_71f.panel; if(_71e){ $.extend(opts,_71e); } if(opts.fit==true){ var p=_720.panel("panel").parent(); opts.width=p.width(); opts.height=p.height(); } _720.panel("resize",opts); }; function _721(_722){ var _723=$.data(_722,"datagrid"); var opts=_723.options; var dc=_723.dc; var wrap=_723.panel; if(!wrap.is(":visible")){ return; } var _724=wrap.width(); var _725=wrap.height(); var view=dc.view; var _726=dc.view1; var _727=dc.view2; var _728=_726.children("div.datagrid-header"); var _729=_727.children("div.datagrid-header"); var _72a=_728.find("table"); var _72b=_729.find("table"); view.width(_724); var _72c=_728.children("div.datagrid-header-inner").show(); _726.width(_72c.find("table").width()); if(!opts.showHeader){ _72c.hide(); } _727.width(_724-_726._outerWidth()); _726.children()._outerWidth(_726.width()); _727.children()._outerWidth(_727.width()); var all=_728.add(_729).add(_72a).add(_72b); all.css("height",""); var hh=Math.max(_72a.height(),_72b.height()); all._outerHeight(hh); view.children(".datagrid-empty").css("top",hh+"px"); dc.body1.add(dc.body2).children("table.datagrid-btable-frozen").css({position:"absolute",top:dc.header2._outerHeight()}); var _72d=dc.body2.children("table.datagrid-btable-frozen")._outerHeight(); var _72e=_72d+_729._outerHeight()+_727.children(".datagrid-footer")._outerHeight(); wrap.children(":not(.datagrid-view,.datagrid-mask,.datagrid-mask-msg)").each(function(){ _72e+=$(this)._outerHeight(); }); var _72f=wrap.outerHeight()-wrap.height(); var _730=wrap._size("minHeight")||""; var _731=wrap._size("maxHeight")||""; _726.add(_727).children("div.datagrid-body").css({marginTop:_72d,height:(isNaN(parseInt(opts.height))?"":(_725-_72e)),minHeight:(_730?_730-_72f-_72e:""),maxHeight:(_731?_731-_72f-_72e:"")}); view.height(_727.height()); }; function _732(_733,_734,_735){ var rows=$.data(_733,"datagrid").data.rows; var opts=$.data(_733,"datagrid").options; var dc=$.data(_733,"datagrid").dc; var tmp=$("").appendTo("body"); var _736=tmp.outerHeight(); tmp.remove(); if(!dc.body1.is(":empty")&&(!opts.nowrap||opts.autoRowHeight||_735)){ if(_734!=undefined){ var tr1=opts.finder.getTr(_733,_734,"body",1); var tr2=opts.finder.getTr(_733,_734,"body",2); _737(tr1,tr2); }else{ var tr1=opts.finder.getTr(_733,0,"allbody",1); var tr2=opts.finder.getTr(_733,0,"allbody",2); _737(tr1,tr2); if(opts.showFooter){ var tr1=opts.finder.getTr(_733,0,"allfooter",1); var tr2=opts.finder.getTr(_733,0,"allfooter",2); _737(tr1,tr2); } } } _721(_733); if(opts.height=="auto"){ var _738=dc.body1.parent(); var _739=dc.body2; var _73a=_73b(_739); var _73c=_73a.height; if(_73a.width>_739.width()){ _73c+=18; } _73c-=parseInt(_739.css("marginTop"))||0; _738.height(_73c); _739.height(_73c); dc.view.height(dc.view2.height()); } dc.body2.triggerHandler("scroll"); function _737(trs1,trs2){ for(var i=0;i"); } _744(true); _744(false); _721(_741); function _744(_745){ var _746=_745?1:2; var tr=opts.finder.getTr(_741,_742,"body",_746); (_745?dc.body1:dc.body2).children("table.datagrid-btable-frozen").append(tr); }; }; function _747(_748,_749){ function _74a(){ var _74b=[]; var _74c=[]; $(_748).children("thead").each(function(){ var opt=$.parser.parseOptions(this,[{frozen:"boolean"}]); $(this).find("tr").each(function(){ var cols=[]; $(this).find("th").each(function(){ var th=$(this); var col=$.extend({},$.parser.parseOptions(this,["id","field","align","halign","order","width",{sortable:"boolean",checkbox:"boolean",resizable:"boolean",fixed:"boolean"},{rowspan:"number",colspan:"number"}]),{title:(th.html()||undefined),hidden:(th.attr("hidden")?true:undefined),formatter:(th.attr("formatter")?eval(th.attr("formatter")):undefined),styler:(th.attr("styler")?eval(th.attr("styler")):undefined),sorter:(th.attr("sorter")?eval(th.attr("sorter")):undefined)}); if(col.width&&String(col.width).indexOf("%")==-1){ col.width=parseInt(col.width); } if(th.attr("editor")){ var s=$.trim(th.attr("editor")); if(s.substr(0,1)=="{"){ col.editor=eval("("+s+")"); }else{ col.editor=s; } } cols.push(col); }); opt.frozen?_74b.push(cols):_74c.push(cols); }); }); return [_74b,_74c]; }; var _74d=$("
                                  "+"
                                  "+"
                                  "+"
                                  "+"
                                  "+"
                                  "+"
                                  "+"
                                  "+"
                                  "+"
                                  "+""+"
                                  "+"
                                  "+"
                                  "+"
                                  "+"
                                  "+"
                                  "+"
                                  "+"
                                  "+""+"
                                  "+"
                                  "+"
                                  "+"
                                  ").insertAfter(_748); _74d.panel({doSize:false,cls:"datagrid"}); $(_748).addClass("datagrid-f").hide().appendTo(_74d.children("div.datagrid-view")); var cc=_74a(); var view=_74d.children("div.datagrid-view"); var _74e=view.children("div.datagrid-view1"); var _74f=view.children("div.datagrid-view2"); return {panel:_74d,frozenColumns:cc[0],columns:cc[1],dc:{view:view,view1:_74e,view2:_74f,header1:_74e.children("div.datagrid-header").children("div.datagrid-header-inner"),header2:_74f.children("div.datagrid-header").children("div.datagrid-header-inner"),body1:_74e.children("div.datagrid-body").children("div.datagrid-body-inner"),body2:_74f.children("div.datagrid-body"),footer1:_74e.children("div.datagrid-footer").children("div.datagrid-footer-inner"),footer2:_74f.children("div.datagrid-footer").children("div.datagrid-footer-inner")}}; }; function _750(_751){ var _752=$.data(_751,"datagrid"); var opts=_752.options; var dc=_752.dc; var _753=_752.panel; _752.ss=$(_751).datagrid("createStyleSheet"); _753.panel($.extend({},opts,{id:null,doSize:false,onResize:function(_754,_755){ if($.data(_751,"datagrid")){ _721(_751); $(_751).datagrid("fitColumns"); opts.onResize.call(_753,_754,_755); } },onExpand:function(){ if($.data(_751,"datagrid")){ $(_751).datagrid("fixRowHeight").datagrid("fitColumns"); opts.onExpand.call(_753); } }})); var _756=$(_751).attr("id")||""; if(_756){ _756+="_"; } _752.rowIdPrefix=_756+"datagrid-row-r"+(++_707); _752.cellClassPrefix=_756+"datagrid-cell-c"+_707; _757(dc.header1,opts.frozenColumns,true); _757(dc.header2,opts.columns,false); _758(); dc.header1.add(dc.header2).css("display",opts.showHeader?"block":"none"); dc.footer1.add(dc.footer2).css("display",opts.showFooter?"block":"none"); if(opts.toolbar){ if($.isArray(opts.toolbar)){ $("div.datagrid-toolbar",_753).remove(); var tb=$("
                                  ").prependTo(_753); var tr=tb.find("tr"); for(var i=0;i
                                  ").appendTo(tr); }else{ var td=$("").appendTo(tr); var tool=$("").appendTo(td); tool[0].onclick=eval(btn.handler||function(){ }); tool.linkbutton($.extend({},btn,{plain:true})); } } }else{ $(opts.toolbar).addClass("datagrid-toolbar").prependTo(_753); $(opts.toolbar).show(); } }else{ $("div.datagrid-toolbar",_753).remove(); } $("div.datagrid-pager",_753).remove(); if(opts.pagination){ var _759=$("
                                  "); if(opts.pagePosition=="bottom"){ _759.appendTo(_753); }else{ if(opts.pagePosition=="top"){ _759.addClass("datagrid-pager-top").prependTo(_753); }else{ var ptop=$("
                                  ").prependTo(_753); _759.appendTo(_753); _759=_759.add(ptop); } } _759.pagination({total:0,pageNumber:opts.pageNumber,pageSize:opts.pageSize,pageList:opts.pageList,onSelectPage:function(_75a,_75b){ opts.pageNumber=_75a||1; opts.pageSize=_75b; _759.pagination("refresh",{pageNumber:_75a,pageSize:_75b}); _7a3(_751); }}); opts.pageSize=_759.pagination("options").pageSize; } function _757(_75c,_75d,_75e){ if(!_75d){ return; } $(_75c).show(); $(_75c).empty(); var tmp=$("
                                  ").appendTo("body"); tmp._outerWidth(99); var _75f=100-parseInt(tmp[0].style.width); tmp.remove(); var _760=[]; var _761=[]; var _762=[]; if(opts.sortName){ _760=opts.sortName.split(","); _761=opts.sortOrder.split(","); } var t=$("
                                  ").appendTo(_75c); for(var i=0;i<_75d.length;i++){ var tr=$("").appendTo($("tbody",t)); var cols=_75d[i]; for(var j=0;j").appendTo(tr); if(col.checkbox){ td.attr("field",col.field); $("
                                  ").html("").appendTo(td); }else{ if(col.field){ td.attr("field",col.field); td.append("
                                  "); td.find("span:first").html(col.title); var cell=td.find("div.datagrid-cell"); var pos=_708(_760,col.field); if(pos>=0){ cell.addClass("datagrid-sort-"+_761[pos]); } if(col.sortable){ cell.addClass("datagrid-sort"); } if(col.resizable==false){ cell.attr("resizable","false"); } if(col.width){ var _763=$.parser.parseValue("width",col.width,dc.view,opts.scrollbarSize+(opts.rownumbers?opts.rownumberWidth:0)); col.deltaWidth=_75f; col.boxWidth=_763-_75f; }else{ col.auto=true; } cell.css("text-align",(col.halign||col.align||"")); col.cellClass=_752.cellClassPrefix+"-"+col.field.replace(/[\.|\s]/g,"-"); cell.addClass(col.cellClass); }else{ $("
                                  ").html(col.title).appendTo(td); } } if(col.hidden){ td.hide(); _762.push(col.field); } } } if(_75e&&opts.rownumbers){ var td=$("
                                  "); if($("tr",t).length==0){ td.wrap("").parent().appendTo($("tbody",t)); }else{ td.prependTo($("tr:first",t)); } } for(var i=0;i<_762.length;i++){ _7a5(_751,_762[i],-1); } }; function _758(){ var _764=[[".datagrid-header-rownumber",(opts.rownumberWidth-1)+"px"],[".datagrid-cell-rownumber",(opts.rownumberWidth-1)+"px"]]; var _765=_766(_751,true).concat(_766(_751)); for(var i=0;i<_765.length;i++){ var col=_767(_751,_765[i]); if(col&&!col.checkbox){ _764.push(["."+col.cellClass,col.boxWidth?col.boxWidth+"px":"auto"]); } } _752.ss.add(_764); _752.ss.dirty(_752.cellSelectorPrefix); _752.cellSelectorPrefix="."+_752.cellClassPrefix; }; }; function _768(_769){ var _76a=$.data(_769,"datagrid"); var _76b=_76a.panel; var opts=_76a.options; var dc=_76a.dc; var _76c=dc.header1.add(dc.header2); _76c._unbind(".datagrid"); for(var _76d in opts.headerEvents){ _76c._bind(_76d+".datagrid",opts.headerEvents[_76d]); } var _76e=_76c.find("div.datagrid-cell"); var _76f=opts.resizeHandle=="right"?"e":(opts.resizeHandle=="left"?"w":"e,w"); _76e.each(function(){ $(this).resizable({handles:_76f,edge:opts.resizeEdge,disabled:($(this).attr("resizable")?$(this).attr("resizable")=="false":false),minWidth:25,onStartResize:function(e){ _76a.resizing=true; _76c.css("cursor",$("body").css("cursor")); if(!_76a.proxy){ _76a.proxy=$("
                                  ").appendTo(dc.view); } if(e.data.dir=="e"){ e.data.deltaEdge=$(this)._outerWidth()-(e.pageX-$(this).offset().left); }else{ e.data.deltaEdge=$(this).offset().left-e.pageX-1; } _76a.proxy.css({left:e.pageX-$(_76b).offset().left-1+e.data.deltaEdge,display:"none"}); setTimeout(function(){ if(_76a.proxy){ _76a.proxy.show(); } },500); },onResize:function(e){ _76a.proxy.css({left:e.pageX-$(_76b).offset().left-1+e.data.deltaEdge,display:"block"}); return false; },onStopResize:function(e){ _76c.css("cursor",""); $(this).css("height",""); var _770=$(this).parent().attr("field"); var col=_767(_769,_770); col.width=$(this)._outerWidth()+1; col.boxWidth=col.width-col.deltaWidth; col.auto=undefined; $(this).css("width",""); $(_769).datagrid("fixColumnSize",_770); _76a.proxy.remove(); _76a.proxy=null; if($(this).parents("div:first.datagrid-header").parent().hasClass("datagrid-view1")){ _721(_769); } $(_769).datagrid("fitColumns"); opts.onResizeColumn.call(_769,_770,col.width); setTimeout(function(){ _76a.resizing=false; },0); }}); }); var bb=dc.body1.add(dc.body2); bb._unbind(); for(var _76d in opts.rowEvents){ bb._bind(_76d,opts.rowEvents[_76d]); } dc.body1._bind("mousewheel DOMMouseScroll MozMousePixelScroll",function(e){ e.preventDefault(); var e1=e.originalEvent||window.event; var _771=e1.wheelDelta||e1.detail*(-1); if("deltaY" in e1){ _771=e1.deltaY*-1; } var dg=$(e.target).closest("div.datagrid-view").children(".datagrid-f"); var dc=dg.data("datagrid").dc; dc.body2.scrollTop(dc.body2.scrollTop()-_771); }); dc.body2._bind("scroll",function(){ var b1=dc.view1.children("div.datagrid-body"); var stv=$(this).scrollTop(); $(this).scrollTop(stv); b1.scrollTop(stv); var c1=dc.body1.children(":first"); var c2=dc.body2.children(":first"); if(c1.length&&c2.length){ var top1=c1.offset().top; var top2=c2.offset().top; if(top1!=top2){ b1.scrollTop(b1.scrollTop()+top1-top2); } } dc.view2.children("div.datagrid-header,div.datagrid-footer")._scrollLeft($(this)._scrollLeft()); dc.body2.children("table.datagrid-btable-frozen").css("left",-$(this)._scrollLeft()); }); }; function _772(_773){ return function(e){ var td=$(e.target).closest("td[field]"); if(td.length){ var _774=_775(td); if(!$(_774).data("datagrid").resizing&&_773){ td.addClass("datagrid-header-over"); }else{ td.removeClass("datagrid-header-over"); } } }; }; function _776(e){ var _777=_775(e.target); var opts=$(_777).datagrid("options"); var ck=$(e.target).closest("input[type=checkbox]"); if(ck.length){ if(opts.singleSelect&&opts.selectOnCheck){ return false; } if(ck.is(":checked")){ _778(_777); }else{ _779(_777); } e.stopPropagation(); }else{ var cell=$(e.target).closest(".datagrid-cell"); if(cell.length){ var p1=cell.offset().left+5; var p2=cell.offset().left+cell._outerWidth()-5; if(e.pageXp1){ _77a(_777,cell.parent().attr("field")); } } } }; function _77b(e){ var _77c=_775(e.target); var opts=$(_77c).datagrid("options"); var cell=$(e.target).closest(".datagrid-cell"); if(cell.length){ var p1=cell.offset().left+5; var p2=cell.offset().left+cell._outerWidth()-5; var cond=opts.resizeHandle=="right"?(e.pageX>p2):(opts.resizeHandle=="left"?(e.pageXp2)); if(cond){ var _77d=cell.parent().attr("field"); var col=_767(_77c,_77d); if(col.resizable==false){ return; } $(_77c).datagrid("autoSizeColumn",_77d); col.auto=false; } } }; function _77e(e){ var _77f=_775(e.target); var opts=$(_77f).datagrid("options"); var td=$(e.target).closest("td[field]"); opts.onHeaderContextMenu.call(_77f,e,td.attr("field")); }; function _780(_781){ return function(e){ var tr=_782(e.target); if(!tr){ return; } var _783=_775(tr); if($.data(_783,"datagrid").resizing){ return; } var _784=_785(tr); if(_781){ _786(_783,_784); }else{ var opts=$.data(_783,"datagrid").options; opts.finder.getTr(_783,_784).removeClass("datagrid-row-over"); } }; }; function _787(e){ var tr=_782(e.target); if(!tr){ return; } var _788=_775(tr); var opts=$.data(_788,"datagrid").options; var _789=_785(tr); var tt=$(e.target); if(tt.parent().hasClass("datagrid-cell-check")){ if(opts.singleSelect&&opts.selectOnCheck){ tt._propAttr("checked",!tt.is(":checked")); _78a(_788,_789); }else{ if(tt.is(":checked")){ tt._propAttr("checked",false); _78a(_788,_789); }else{ tt._propAttr("checked",true); _78b(_788,_789); } } }else{ var row=opts.finder.getRow(_788,_789); var td=tt.closest("td[field]",tr); if(td.length){ var _78c=td.attr("field"); opts.onClickCell.call(_788,_789,_78c,row[_78c]); } if(opts.singleSelect==true){ _78d(_788,_789); }else{ if(opts.ctrlSelect){ if(e.metaKey||e.ctrlKey){ if(tr.hasClass("datagrid-row-selected")){ _78e(_788,_789); }else{ _78d(_788,_789); } }else{ if(e.shiftKey){ $(_788).datagrid("clearSelections"); var _78f=Math.min(opts.lastSelectedIndex||0,_789); var _790=Math.max(opts.lastSelectedIndex||0,_789); for(var i=_78f;i<=_790;i++){ _78d(_788,i); } }else{ $(_788).datagrid("clearSelections"); _78d(_788,_789); opts.lastSelectedIndex=_789; } } }else{ if(tr.hasClass("datagrid-row-selected")){ _78e(_788,_789); }else{ _78d(_788,_789); } } } opts.onClickRow.apply(_788,_70b(_788,[_789,row])); } }; function _791(e){ var tr=_782(e.target); if(!tr){ return; } var _792=_775(tr); var opts=$.data(_792,"datagrid").options; var _793=_785(tr); var row=opts.finder.getRow(_792,_793); var td=$(e.target).closest("td[field]",tr); if(td.length){ var _794=td.attr("field"); opts.onDblClickCell.call(_792,_793,_794,row[_794]); } opts.onDblClickRow.apply(_792,_70b(_792,[_793,row])); }; function _795(e){ var tr=_782(e.target); if(tr){ var _796=_775(tr); var opts=$.data(_796,"datagrid").options; var _797=_785(tr); var row=opts.finder.getRow(_796,_797); opts.onRowContextMenu.call(_796,e,_797,row); }else{ var body=_782(e.target,".datagrid-body"); if(body){ var _796=_775(body); var opts=$.data(_796,"datagrid").options; opts.onRowContextMenu.call(_796,e,-1,null); } } }; function _775(t){ return $(t).closest("div.datagrid-view").children(".datagrid-f")[0]; }; function _782(t,_798){ var tr=$(t).closest(_798||"tr.datagrid-row"); if(tr.length&&tr.parent().length){ return tr; }else{ return undefined; } }; function _785(tr){ if(tr.attr("datagrid-row-index")){ return parseInt(tr.attr("datagrid-row-index")); }else{ return tr.attr("node-id"); } }; function _77a(_799,_79a){ var _79b=$.data(_799,"datagrid"); var opts=_79b.options; _79a=_79a||{}; var _79c={sortName:opts.sortName,sortOrder:opts.sortOrder}; if(typeof _79a=="object"){ $.extend(_79c,_79a); } var _79d=[]; var _79e=[]; if(_79c.sortName){ _79d=_79c.sortName.split(","); _79e=_79c.sortOrder.split(","); } if(typeof _79a=="string"){ var _79f=_79a; var col=_767(_799,_79f); if(!col.sortable||_79b.resizing){ return; } var _7a0=col.order||"asc"; var pos=_708(_79d,_79f); if(pos>=0){ var _7a1=_79e[pos]=="asc"?"desc":"asc"; if(opts.multiSort&&_7a1==_7a0){ _79d.splice(pos,1); _79e.splice(pos,1); }else{ _79e[pos]=_7a1; } }else{ if(opts.multiSort){ _79d.push(_79f); _79e.push(_7a0); }else{ _79d=[_79f]; _79e=[_7a0]; } } _79c.sortName=_79d.join(","); _79c.sortOrder=_79e.join(","); } if(opts.onBeforeSortColumn.call(_799,_79c.sortName,_79c.sortOrder)==false){ return; } $.extend(opts,_79c); var dc=_79b.dc; var _7a2=dc.header1.add(dc.header2); _7a2.find("div.datagrid-cell").removeClass("datagrid-sort-asc datagrid-sort-desc"); for(var i=0;i<_79d.length;i++){ var col=_767(_799,_79d[i]); _7a2.find("div."+col.cellClass).addClass("datagrid-sort-"+_79e[i]); } if(opts.remoteSort){ _7a3(_799); }else{ _7a4(_799,$(_799).datagrid("getData")); } opts.onSortColumn.call(_799,opts.sortName,opts.sortOrder); }; function _7a5(_7a6,_7a7,_7a8){ _7a9(true); _7a9(false); function _7a9(_7aa){ var aa=_7ab(_7a6,_7aa); if(aa.length){ var _7ac=aa[aa.length-1]; var _7ad=_708(_7ac,_7a7); if(_7ad>=0){ for(var _7ae=0;_7ae=_7b3.find("table").width()){ dc.body2.css("overflow-x","hidden"); } if(!opts.showHeader){ _7b4.hide(); } function _7b7(){ if(!opts.fitColumns){ return; } if(!_7b2.leftWidth){ _7b2.leftWidth=0; } var _7b8=0; var cc=[]; var _7b9=_766(_7b1,false); for(var i=0;i<_7b9.length;i++){ var col=_767(_7b1,_7b9[i]); if(_7ba(col)){ _7b8+=col.width; cc.push({field:col.field,col:col,addingWidth:0}); } } if(!_7b8){ return; } cc[cc.length-1].addingWidth-=_7b2.leftWidth; _7b4.show(); var _7bb=_7b3.width()-_7b3.find("table").width()-opts.scrollbarSize+_7b2.leftWidth; var rate=_7bb/_7b8; if(!opts.showHeader){ _7b4.hide(); } for(var i=0;i0){ c.col.boxWidth+=c.addingWidth; c.col.width+=c.addingWidth; } } _7b2.leftWidth=_7bb; $(_7b1).datagrid("fixColumnSize"); }; function _7b6(){ var _7bd=false; var _7be=_766(_7b1,true).concat(_766(_7b1,false)); $.map(_7be,function(_7bf){ var col=_767(_7b1,_7bf); if(String(col.width||"").indexOf("%")>=0){ var _7c0=$.parser.parseValue("width",col.width,dc.view,opts.scrollbarSize+(opts.rownumbers?opts.rownumberWidth:0))-col.deltaWidth; if(_7c0>0){ col.boxWidth=_7c0; _7bd=true; } } }); if(_7bd){ $(_7b1).datagrid("fixColumnSize"); } }; function _7b5(fit){ var _7c1=dc.header1.add(dc.header2).find(".datagrid-cell-group"); if(_7c1.length){ _7c1.each(function(){ $(this)._outerWidth(fit?$(this).parent().width():10); }); if(fit){ _721(_7b1); } } }; function _7ba(col){ if(String(col.width||"").indexOf("%")>=0){ return false; } if(!col.hidden&&!col.checkbox&&!col.auto&&!col.fixed){ return true; } }; }; function _7c2(_7c3,_7c4){ var _7c5=$.data(_7c3,"datagrid"); var opts=_7c5.options; var dc=_7c5.dc; var tmp=$("
                                  ").appendTo("body"); if(_7c4){ _71c(_7c4); $(_7c3).datagrid("fitColumns"); }else{ var _7c6=false; var _7c7=_766(_7c3,true).concat(_766(_7c3,false)); for(var i=0;i<_7c7.length;i++){ var _7c4=_7c7[i]; var col=_767(_7c3,_7c4); if(col.auto){ _71c(_7c4); _7c6=true; } } if(_7c6){ $(_7c3).datagrid("fitColumns"); } } tmp.remove(); function _71c(_7c8){ var _7c9=dc.view.find("div.datagrid-header td[field=\""+_7c8+"\"] div.datagrid-cell"); _7c9.css("width",""); var col=$(_7c3).datagrid("getColumnOption",_7c8); col.width=undefined; col.boxWidth=undefined; col.auto=true; $(_7c3).datagrid("fixColumnSize",_7c8); var _7ca=Math.max(_7cb("header"),_7cb("allbody"),_7cb("allfooter"))+1; _7c9._outerWidth(_7ca-1); col.width=_7ca; col.boxWidth=parseInt(_7c9[0].style.width); col.deltaWidth=_7ca-col.boxWidth; _7c9.css("width",""); $(_7c3).datagrid("fixColumnSize",_7c8); opts.onResizeColumn.call(_7c3,_7c8,col.width); function _7cb(type){ var _7cc=0; if(type=="header"){ _7cc=_7cd(_7c9); }else{ opts.finder.getTr(_7c3,0,type).find("td[field=\""+_7c8+"\"] div.datagrid-cell").each(function(){ var w=_7cd($(this)); if(_7cc1){ var col=_767(_7d6,td.attr("field")); var _7d8=col.boxWidth+col.deltaWidth-1; for(var i=1;i<_7d7;i++){ td=td.next(); col=_767(_7d6,td.attr("field")); _7d8+=col.boxWidth+col.deltaWidth; } $(this).children("div.datagrid-cell")._outerWidth(_7d8); } }); }; function _7d4(_7d9){ var dc=$.data(_7d9,"datagrid").dc; dc.view.find("div.datagrid-editable").each(function(){ var cell=$(this); var _7da=cell.parent().attr("field"); var col=$(_7d9).datagrid("getColumnOption",_7da); cell._outerWidth(col.boxWidth+col.deltaWidth-1); var ed=$.data(this,"datagrid.editor"); if(ed.actions.resize){ ed.actions.resize(ed.target,cell.width()); } }); }; function _767(_7db,_7dc){ function find(_7dd){ if(_7dd){ for(var i=0;i<_7dd.length;i++){ var cc=_7dd[i]; for(var j=0;j=0){ var _7e6=col.field||col.id||""; for(var c=0;c<(col.colspan||1);c++){ for(var r=0;r<(col.rowspan||1);r++){ aa[_7e3+r][_7e4]=_7e6; } _7e4++; } } }); } return aa; function _7e2(){ var _7e7=0; $.map(_7e0[0]||[],function(col){ _7e7+=col.colspan||1; }); return _7e7; }; function _7e5(a){ for(var i=0;ib?1:-1); }; r=_7ee(r1[sn],r2[sn],r1,r2)*(so=="asc"?1:-1); if(r!=0){ return r; } } return r; }); } if(opts.view.onBeforeRender){ opts.view.onBeforeRender.call(opts.view,_7ea,data.rows); } opts.view.render.call(opts.view,_7ea,dc.body2,false); opts.view.render.call(opts.view,_7ea,dc.body1,true); if(opts.showFooter){ opts.view.renderFooter.call(opts.view,_7ea,dc.footer2,false); opts.view.renderFooter.call(opts.view,_7ea,dc.footer1,true); } if(opts.view.onAfterRender){ opts.view.onAfterRender.call(opts.view,_7ea); } _7eb.ss.clean(); var _7ef=$(_7ea).datagrid("getPager"); if(_7ef.length){ var _7f0=_7ef.pagination("options"); if(_7f0.total!=data.total){ _7ef.pagination("refresh",{pageNumber:opts.pageNumber,total:data.total}); if(opts.pageNumber!=_7f0.pageNumber&&_7f0.pageNumber>0){ opts.pageNumber=_7f0.pageNumber; _7a3(_7ea); } } } _732(_7ea); dc.body2.triggerHandler("scroll"); $(_7ea).datagrid("setSelectionState"); $(_7ea).datagrid("autoSizeColumn"); opts.onLoadSuccess.call(_7ea,data); }; function _7f1(_7f2){ var _7f3=$.data(_7f2,"datagrid"); var opts=_7f3.options; var dc=_7f3.dc; dc.header1.add(dc.header2).find("input[type=checkbox]")._propAttr("checked",false); if(opts.idField){ var _7f4=$.data(_7f2,"treegrid")?true:false; var _7f5=opts.onSelect; var _7f6=opts.onCheck; opts.onSelect=opts.onCheck=function(){ }; var rows=opts.finder.getRows(_7f2); for(var i=0;i_807.height()-_808){ _807.scrollTop(_807.scrollTop()+top+tr._outerHeight()-_807.height()+_808); } } } }; function _786(_80a,_80b){ var _80c=$.data(_80a,"datagrid"); var opts=_80c.options; opts.finder.getTr(_80a,_80c.highlightIndex).removeClass("datagrid-row-over"); opts.finder.getTr(_80a,_80b).addClass("datagrid-row-over"); _80c.highlightIndex=_80b; }; function _78d(_80d,_80e,_80f,_810){ var _811=$.data(_80d,"datagrid"); var opts=_811.options; var row=opts.finder.getRow(_80d,_80e); if(!row){ return; } if(opts.onBeforeSelect.apply(_80d,_70b(_80d,[_80e,row]))==false){ return; } if(opts.singleSelect){ _812(_80d,true); _811.selectedRows=[]; } if(!_80f&&opts.checkOnSelect){ _78a(_80d,_80e,true); } if(opts.idField){ _70a(_811.selectedRows,opts.idField,row); } opts.finder.getTr(_80d,_80e).addClass("datagrid-row-selected"); opts.onSelect.apply(_80d,_70b(_80d,[_80e,row])); if(!_810&&opts.scrollOnSelect){ _802(_80d,_80e); } }; function _78e(_813,_814,_815){ var _816=$.data(_813,"datagrid"); var dc=_816.dc; var opts=_816.options; var row=opts.finder.getRow(_813,_814); if(!row){ return; } if(opts.onBeforeUnselect.apply(_813,_70b(_813,[_814,row]))==false){ return; } if(!_815&&opts.checkOnSelect){ _78b(_813,_814,true); } opts.finder.getTr(_813,_814).removeClass("datagrid-row-selected"); if(opts.idField){ _709(_816.selectedRows,opts.idField,row[opts.idField]); } opts.onUnselect.apply(_813,_70b(_813,[_814,row])); }; function _817(_818,_819){ var _81a=$.data(_818,"datagrid"); var opts=_81a.options; var rows=opts.finder.getRows(_818); var _81b=$.data(_818,"datagrid").selectedRows; if(!_819&&opts.checkOnSelect){ _778(_818,true); } opts.finder.getTr(_818,"","allbody").addClass("datagrid-row-selected"); if(opts.idField){ for(var _81c=0;_81c"); cell.children("table")._bind("click dblclick contextmenu",function(e){ e.stopPropagation(); }); $.data(cell[0],"datagrid.editor",{actions:_851,target:_851.init(cell.find("td"),$.extend({height:opts.editorHeight},_850)),field:_84e,type:_84f,oldHtml:_852}); } } }); _732(_84c,_84d,true); }; function _843(_854,_855){ var opts=$.data(_854,"datagrid").options; var tr=opts.finder.getTr(_854,_855); tr.children("td").each(function(){ var cell=$(this).find("div.datagrid-editable"); if(cell.length){ var ed=$.data(cell[0],"datagrid.editor"); if(ed.actions.destroy){ ed.actions.destroy(ed.target); } cell.html(ed.oldHtml); $.removeData(cell[0],"datagrid.editor"); cell.removeClass("datagrid-editable"); cell.css("width",""); } }); }; function _836(_856,_857){ var tr=$.data(_856,"datagrid").options.finder.getTr(_856,_857); if(!tr.hasClass("datagrid-row-editing")){ return true; } var vbox=tr.find(".validatebox-text"); vbox.validatebox("validate"); vbox.trigger("mouseleave"); var _858=tr.find(".validatebox-invalid"); return _858.length==0; }; function _859(_85a,_85b){ var _85c=$.data(_85a,"datagrid").insertedRows; var _85d=$.data(_85a,"datagrid").deletedRows; var _85e=$.data(_85a,"datagrid").updatedRows; if(!_85b){ var rows=[]; rows=rows.concat(_85c); rows=rows.concat(_85d); rows=rows.concat(_85e); return rows; }else{ if(_85b=="inserted"){ return _85c; }else{ if(_85b=="deleted"){ return _85d; }else{ if(_85b=="updated"){ return _85e; } } } } return []; }; function _85f(_860,_861){ var _862=$.data(_860,"datagrid"); var opts=_862.options; var data=_862.data; var _863=_862.insertedRows; var _864=_862.deletedRows; $(_860).datagrid("cancelEdit",_861); var row=opts.finder.getRow(_860,_861); if(_708(_863,row)>=0){ _709(_863,row); }else{ _864.push(row); } _709(_862.selectedRows,opts.idField,row[opts.idField]); _709(_862.checkedRows,opts.idField,row[opts.idField]); opts.view.deleteRow.call(opts.view,_860,_861); if(opts.height=="auto"){ _732(_860); } $(_860).datagrid("getPager").pagination("refresh",{total:data.total}); }; function _865(_866,_867){ var data=$.data(_866,"datagrid").data; var view=$.data(_866,"datagrid").options.view; var _868=$.data(_866,"datagrid").insertedRows; view.insertRow.call(view,_866,_867.index,_867.row); _868.push(_867.row); $(_866).datagrid("getPager").pagination("refresh",{total:data.total}); }; function _869(_86a,row){ var data=$.data(_86a,"datagrid").data; var view=$.data(_86a,"datagrid").options.view; var _86b=$.data(_86a,"datagrid").insertedRows; view.insertRow.call(view,_86a,null,row); _86b.push(row); $(_86a).datagrid("getPager").pagination("refresh",{total:data.total}); }; function _86c(_86d,_86e){ var _86f=$.data(_86d,"datagrid"); var opts=_86f.options; var row=opts.finder.getRow(_86d,_86e.index); var _870=false; _86e.row=_86e.row||{}; for(var _871 in _86e.row){ if(row[_871]!==_86e.row[_871]){ _870=true; break; } } if(_870){ if(_708(_86f.insertedRows,row)==-1){ if(_708(_86f.updatedRows,row)==-1){ _86f.updatedRows.push(row); } } opts.view.updateRow.call(opts.view,_86d,_86e.index,_86e.row); } }; function _872(_873){ var _874=$.data(_873,"datagrid"); var data=_874.data; var rows=data.rows; var _875=[]; for(var i=0;i=0){ (_882=="s"?_78d:_78a)(_879,_883,true); } } }; for(var i=0;i0){ $(this).datagrid("loadData",data); }else{ $(this).datagrid("autoSizeColumn"); } } _7a3(this); }); }; function _893(_894){ var _895={}; $.map(_894,function(name){ _895[name]=_896(name); }); return _895; function _896(name){ function isA(_897){ return $.data($(_897)[0],name)!=undefined; }; return {init:function(_898,_899){ var _89a=$("").appendTo(_898); if(_89a[name]&&name!="text"){ return _89a[name](_899); }else{ return _89a; } },destroy:function(_89b){ if(isA(_89b,name)){ $(_89b)[name]("destroy"); } },getValue:function(_89c){ if(isA(_89c,name)){ var opts=$(_89c)[name]("options"); if(opts.multiple){ return $(_89c)[name]("getValues").join(opts.separator); }else{ return $(_89c)[name]("getValue"); } }else{ return $(_89c).val(); } },setValue:function(_89d,_89e){ if(isA(_89d,name)){ var opts=$(_89d)[name]("options"); if(opts.multiple){ if(_89e){ $(_89d)[name]("setValues",_89e.split(opts.separator)); }else{ $(_89d)[name]("clear"); } }else{ $(_89d)[name]("setValue",_89e); } }else{ $(_89d).val(_89e); } },resize:function(_89f,_8a0){ if(isA(_89f,name)){ $(_89f)[name]("resize",_8a0); }else{ $(_89f)._size({width:_8a0,height:$.fn.datagrid.defaults.editorHeight}); } }}; }; }; var _8a1=$.extend({},_893(["text","textbox","passwordbox","filebox","numberbox","numberspinner","combobox","combotree","combogrid","combotreegrid","datebox","datetimebox","timespinner","datetimespinner"]),{textarea:{init:function(_8a2,_8a3){ var _8a4=$("").appendTo(_8a2); _8a4.css("vertical-align","middle")._outerHeight(_8a3.height); return _8a4; },getValue:function(_8a5){ return $(_8a5).val(); },setValue:function(_8a6,_8a7){ $(_8a6).val(_8a7); },resize:function(_8a8,_8a9){ $(_8a8)._outerWidth(_8a9); }},checkbox:{init:function(_8aa,_8ab){ var _8ac=$("").appendTo(_8aa); _8ac.val(_8ab.on); _8ac.attr("offval",_8ab.off); return _8ac; },getValue:function(_8ad){ if($(_8ad).is(":checked")){ return $(_8ad).val(); }else{ return $(_8ad).attr("offval"); } },setValue:function(_8ae,_8af){ var _8b0=false; if($(_8ae).val()==_8af){ _8b0=true; } $(_8ae)._propAttr("checked",_8b0); }},validatebox:{init:function(_8b1,_8b2){ var _8b3=$("").appendTo(_8b1); _8b3.validatebox(_8b2); return _8b3; },destroy:function(_8b4){ $(_8b4).validatebox("destroy"); },getValue:function(_8b5){ return $(_8b5).val(); },setValue:function(_8b6,_8b7){ $(_8b6).val(_8b7); },resize:function(_8b8,_8b9){ $(_8b8)._outerWidth(_8b9)._outerHeight($.fn.datagrid.defaults.editorHeight); }}}); $.fn.datagrid.methods={options:function(jq){ var _8ba=$.data(jq[0],"datagrid").options; var _8bb=$.data(jq[0],"datagrid").panel.panel("options"); var opts=$.extend(_8ba,{width:_8bb.width,height:_8bb.height,closed:_8bb.closed,collapsed:_8bb.collapsed,minimized:_8bb.minimized,maximized:_8bb.maximized}); return opts; },setSelectionState:function(jq){ return jq.each(function(){ _7f1(this); }); },createStyleSheet:function(jq){ return _70d(jq[0]); },getPanel:function(jq){ return $.data(jq[0],"datagrid").panel; },getPager:function(jq){ return $.data(jq[0],"datagrid").panel.children("div.datagrid-pager"); },getColumnFields:function(jq,_8bc){ return _766(jq[0],_8bc); },getColumnOption:function(jq,_8bd){ return _767(jq[0],_8bd); },resize:function(jq,_8be){ return jq.each(function(){ _71c(this,_8be); }); },load:function(jq,_8bf){ return jq.each(function(){ var opts=$(this).datagrid("options"); if(typeof _8bf=="string"){ opts.url=_8bf; _8bf=null; } opts.pageNumber=1; var _8c0=$(this).datagrid("getPager"); _8c0.pagination("refresh",{pageNumber:1}); _7a3(this,_8bf); }); },reload:function(jq,_8c1){ return jq.each(function(){ var opts=$(this).datagrid("options"); if(typeof _8c1=="string"){ opts.url=_8c1; _8c1=null; } _7a3(this,_8c1); }); },reloadFooter:function(jq,_8c2){ return jq.each(function(){ var opts=$.data(this,"datagrid").options; var dc=$.data(this,"datagrid").dc; if(_8c2){ $.data(this,"datagrid").footer=_8c2; } if(opts.showFooter){ opts.view.renderFooter.call(opts.view,this,dc.footer2,false); opts.view.renderFooter.call(opts.view,this,dc.footer1,true); if(opts.view.onAfterRender){ opts.view.onAfterRender.call(opts.view,this); } $(this).datagrid("fixRowHeight"); } }); },loading:function(jq){ return jq.each(function(){ var opts=$.data(this,"datagrid").options; $(this).datagrid("getPager").pagination("loading"); if(opts.loadMsg){ var _8c3=$(this).datagrid("getPanel"); if(!_8c3.children("div.datagrid-mask").length){ $("
                                  ").appendTo(_8c3); var msg=$("
                                  ").html(opts.loadMsg).appendTo(_8c3); msg._outerHeight(40); msg.css({marginLeft:(-msg.outerWidth()/2),lineHeight:(msg.height()+"px")}); } } }); },loaded:function(jq){ return jq.each(function(){ $(this).datagrid("getPager").pagination("loaded"); var _8c4=$(this).datagrid("getPanel"); _8c4.children("div.datagrid-mask-msg").remove(); _8c4.children("div.datagrid-mask").remove(); }); },fitColumns:function(jq){ return jq.each(function(){ _7b0(this); }); },fixColumnSize:function(jq,_8c5){ return jq.each(function(){ _7ce(this,_8c5); }); },fixRowHeight:function(jq,_8c6){ return jq.each(function(){ _732(this,_8c6); }); },freezeRow:function(jq,_8c7){ return jq.each(function(){ _740(this,_8c7); }); },autoSizeColumn:function(jq,_8c8){ return jq.each(function(){ _7c2(this,_8c8); }); },loadData:function(jq,data){ return jq.each(function(){ _7a4(this,data); _872(this); }); },getData:function(jq){ return $.data(jq[0],"datagrid").data; },getRows:function(jq){ return $.data(jq[0],"datagrid").data.rows; },getFooterRows:function(jq){ return $.data(jq[0],"datagrid").footer; },getRowIndex:function(jq,id){ return _7f9(jq[0],id); },getChecked:function(jq){ return _7ff(jq[0]); },getSelected:function(jq){ var rows=_7fc(jq[0]); return rows.length>0?rows[0]:null; },getSelections:function(jq){ return _7fc(jq[0]); },clearSelections:function(jq){ return jq.each(function(){ var _8c9=$.data(this,"datagrid"); var _8ca=_8c9.selectedRows; var _8cb=_8c9.checkedRows; _8ca.splice(0,_8ca.length); _812(this); if(_8c9.options.checkOnSelect){ _8cb.splice(0,_8cb.length); } }); },clearChecked:function(jq){ return jq.each(function(){ var _8cc=$.data(this,"datagrid"); var _8cd=_8cc.selectedRows; var _8ce=_8cc.checkedRows; _8ce.splice(0,_8ce.length); _779(this); if(_8cc.options.selectOnCheck){ _8cd.splice(0,_8cd.length); } }); },scrollTo:function(jq,_8cf){ return jq.each(function(){ _802(this,_8cf); }); },highlightRow:function(jq,_8d0){ return jq.each(function(){ _786(this,_8d0); _802(this,_8d0); }); },selectAll:function(jq){ return jq.each(function(){ _817(this); }); },unselectAll:function(jq){ return jq.each(function(){ _812(this); }); },selectRow:function(jq,_8d1){ return jq.each(function(){ _78d(this,_8d1); }); },selectRecord:function(jq,id){ return jq.each(function(){ var opts=$.data(this,"datagrid").options; if(opts.idField){ var _8d2=_7f9(this,id); if(_8d2>=0){ $(this).datagrid("selectRow",_8d2); } } }); },unselectRow:function(jq,_8d3){ return jq.each(function(){ _78e(this,_8d3); }); },checkRow:function(jq,_8d4){ return jq.each(function(){ _78a(this,_8d4); }); },uncheckRow:function(jq,_8d5){ return jq.each(function(){ _78b(this,_8d5); }); },checkAll:function(jq){ return jq.each(function(){ _778(this); }); },uncheckAll:function(jq){ return jq.each(function(){ _779(this); }); },beginEdit:function(jq,_8d6){ return jq.each(function(){ _831(this,_8d6); }); },endEdit:function(jq,_8d7){ return jq.each(function(){ _837(this,_8d7,false); }); },cancelEdit:function(jq,_8d8){ return jq.each(function(){ _837(this,_8d8,true); }); },getEditors:function(jq,_8d9){ return _844(jq[0],_8d9); },getEditor:function(jq,_8da){ return _848(jq[0],_8da); },refreshRow:function(jq,_8db){ return jq.each(function(){ var opts=$.data(this,"datagrid").options; opts.view.refreshRow.call(opts.view,this,_8db); }); },validateRow:function(jq,_8dc){ return _836(jq[0],_8dc); },updateRow:function(jq,_8dd){ return jq.each(function(){ _86c(this,_8dd); }); },appendRow:function(jq,row){ return jq.each(function(){ _869(this,row); }); },insertRow:function(jq,_8de){ return jq.each(function(){ _865(this,_8de); }); },deleteRow:function(jq,_8df){ return jq.each(function(){ _85f(this,_8df); }); },getChanges:function(jq,_8e0){ return _859(jq[0],_8e0); },acceptChanges:function(jq){ return jq.each(function(){ _876(this); }); },rejectChanges:function(jq){ return jq.each(function(){ _878(this); }); },mergeCells:function(jq,_8e1){ return jq.each(function(){ _88a(this,_8e1); }); },showColumn:function(jq,_8e2){ return jq.each(function(){ var col=$(this).datagrid("getColumnOption",_8e2); if(col.hidden){ col.hidden=false; $(this).datagrid("getPanel").find("td[field=\""+_8e2+"\"]").show(); _7a5(this,_8e2,1); $(this).datagrid("fitColumns"); } }); },hideColumn:function(jq,_8e3){ return jq.each(function(){ var col=$(this).datagrid("getColumnOption",_8e3); if(!col.hidden){ col.hidden=true; $(this).datagrid("getPanel").find("td[field=\""+_8e3+"\"]").hide(); _7a5(this,_8e3,-1); $(this).datagrid("fitColumns"); } }); },sort:function(jq,_8e4){ return jq.each(function(){ _77a(this,_8e4); }); },gotoPage:function(jq,_8e5){ return jq.each(function(){ var _8e6=this; var page,cb; if(typeof _8e5=="object"){ page=_8e5.page; cb=_8e5.callback; }else{ page=_8e5; } $(_8e6).datagrid("options").pageNumber=page; $(_8e6).datagrid("getPager").pagination("refresh",{pageNumber:page}); _7a3(_8e6,null,function(){ if(cb){ cb.call(_8e6,page); } }); }); }}; $.fn.datagrid.parseOptions=function(_8e7){ var t=$(_8e7); return $.extend({},$.fn.panel.parseOptions(_8e7),$.parser.parseOptions(_8e7,["url","toolbar","idField","sortName","sortOrder","pagePosition","resizeHandle",{sharedStyleSheet:"boolean",fitColumns:"boolean",autoRowHeight:"boolean",striped:"boolean",nowrap:"boolean"},{rownumbers:"boolean",singleSelect:"boolean",ctrlSelect:"boolean",checkOnSelect:"boolean",selectOnCheck:"boolean"},{pagination:"boolean",pageSize:"number",pageNumber:"number"},{multiSort:"boolean",remoteSort:"boolean",showHeader:"boolean",showFooter:"boolean"},{scrollbarSize:"number",scrollOnSelect:"boolean"}]),{pageList:(t.attr("pageList")?eval(t.attr("pageList")):undefined),loadMsg:(t.attr("loadMsg")!=undefined?t.attr("loadMsg"):undefined),rowStyler:(t.attr("rowStyler")?eval(t.attr("rowStyler")):undefined)}); }; $.fn.datagrid.parseData=function(_8e8){ var t=$(_8e8); var data={total:0,rows:[]}; var _8e9=t.datagrid("getColumnFields",true).concat(t.datagrid("getColumnFields",false)); t.find("tbody tr").each(function(){ data.total++; var row={}; $.extend(row,$.parser.parseOptions(this,["iconCls","state"])); for(var i=0;i<_8e9.length;i++){ row[_8e9[i]]=$(this).find("td:eq("+i+")").html(); } data.rows.push(row); }); return data; }; var _8ea={render:function(_8eb,_8ec,_8ed){ var rows=$(_8eb).datagrid("getRows"); $(_8ec).empty().html(this.renderTable(_8eb,0,rows,_8ed)); },renderFooter:function(_8ee,_8ef,_8f0){ var opts=$.data(_8ee,"datagrid").options; var rows=$.data(_8ee,"datagrid").footer||[]; var _8f1=$(_8ee).datagrid("getColumnFields",_8f0); var _8f2=[""]; for(var i=0;i"); _8f2.push(this.renderRow.call(this,_8ee,_8f1,_8f0,i,rows[i])); _8f2.push(""); } _8f2.push("
                                  "); $(_8ef).html(_8f2.join("")); },renderTable:function(_8f3,_8f4,rows,_8f5){ var _8f6=$.data(_8f3,"datagrid"); var opts=_8f6.options; if(_8f5){ if(!(opts.rownumbers||(opts.frozenColumns&&opts.frozenColumns.length))){ return ""; } } var _8f7=$(_8f3).datagrid("getColumnFields",_8f5); var _8f8=[""]; for(var i=0;i"); _8f8.push(this.renderRow.call(this,_8f3,_8f7,_8f5,_8f4,row)); _8f8.push(""); _8f4++; } _8f8.push("
                                  "); return _8f8.join(""); },renderRow:function(_8fb,_8fc,_8fd,_8fe,_8ff){ var opts=$.data(_8fb,"datagrid").options; var cc=[]; if(_8fd&&opts.rownumbers){ var _900=_8fe+1; if(opts.pagination){ _900+=(opts.pageNumber-1)*opts.pageSize; } cc.push("
                                  "+_900+"
                                  "); } for(var i=0;i<_8fc.length;i++){ var _901=_8fc[i]; var col=$(_8fb).datagrid("getColumnOption",_901); if(col){ var _902=_8ff[_901]; var css=col.styler?(col.styler.call(_8fb,_902,_8ff,_8fe)||""):""; var cs=this.getStyleValue(css); var cls=cs.c?"class=\""+cs.c+"\"":""; var _903=col.hidden?"style=\"display:none;"+cs.s+"\"":(cs.s?"style=\""+cs.s+"\"":""); cc.push(""); var _903=""; if(!col.checkbox){ if(col.align){ _903+="text-align:"+col.align+";"; } if(!opts.nowrap){ _903+="white-space:normal;height:auto;"; }else{ if(opts.autoRowHeight){ _903+="height:auto;"; } } } cc.push("
                                  "); if(col.checkbox){ cc.push(""); }else{ if(col.formatter){ cc.push(col.formatter(_902,_8ff,_8fe)); }else{ cc.push(_902); } } cc.push("
                                  "); cc.push(""); } } return cc.join(""); },getStyleValue:function(css){ var _904=""; var _905=""; if(typeof css=="string"){ _905=css; }else{ if(css){ _904=css["class"]||""; _905=css["style"]||""; } } return {c:_904,s:_905}; },refreshRow:function(_906,_907){ this.updateRow.call(this,_906,_907,{}); },updateRow:function(_908,_909,row){ var opts=$.data(_908,"datagrid").options; var _90a=opts.finder.getRow(_908,_909); $.extend(_90a,row); var cs=_90b.call(this,_909); var _90c=cs.s; var cls="datagrid-row "+(_909%2&&opts.striped?"datagrid-row-alt ":" ")+cs.c; function _90b(_90d){ var css=opts.rowStyler?opts.rowStyler.call(_908,_90d,_90a):""; return this.getStyleValue(css); }; function _90e(_90f){ var tr=opts.finder.getTr(_908,_909,"body",(_90f?1:2)); if(!tr.length){ return; } var _910=$(_908).datagrid("getColumnFields",_90f); var _911=tr.find("div.datagrid-cell-check input[type=checkbox]").is(":checked"); tr.html(this.renderRow.call(this,_908,_910,_90f,_909,_90a)); var _912=(tr.hasClass("datagrid-row-checked")?" datagrid-row-checked":"")+(tr.hasClass("datagrid-row-selected")?" datagrid-row-selected":""); tr.attr("style",_90c).attr("class",cls+_912); if(_911){ tr.find("div.datagrid-cell-check input[type=checkbox]")._propAttr("checked",true); } }; _90e.call(this,true); _90e.call(this,false); $(_908).datagrid("fixRowHeight",_909); },insertRow:function(_913,_914,row){ var _915=$.data(_913,"datagrid"); var opts=_915.options; var dc=_915.dc; var data=_915.data; if(_914==undefined||_914==null){ _914=data.rows.length; } if(_914>data.rows.length){ _914=data.rows.length; } function _916(_917){ var _918=_917?1:2; for(var i=data.rows.length-1;i>=_914;i--){ var tr=opts.finder.getTr(_913,i,"body",_918); tr.attr("datagrid-row-index",i+1); tr.attr("id",_915.rowIdPrefix+"-"+_918+"-"+(i+1)); if(_917&&opts.rownumbers){ var _919=i+2; if(opts.pagination){ _919+=(opts.pageNumber-1)*opts.pageSize; } tr.find("div.datagrid-cell-rownumber").html(_919); } if(opts.striped){ tr.removeClass("datagrid-row-alt").addClass((i+1)%2?"datagrid-row-alt":""); } } }; function _91a(_91b){ var _91c=_91b?1:2; var _91d=$(_913).datagrid("getColumnFields",_91b); var _91e=_915.rowIdPrefix+"-"+_91c+"-"+_914; var tr=""; if(_914>=data.rows.length){ if(data.rows.length){ opts.finder.getTr(_913,"","last",_91c).after(tr); }else{ var cc=_91b?dc.body1:dc.body2; cc.html(""+tr+"
                                  "); } }else{ opts.finder.getTr(_913,_914+1,"body",_91c).before(tr); } }; _916.call(this,true); _916.call(this,false); _91a.call(this,true); _91a.call(this,false); data.total+=1; data.rows.splice(_914,0,row); this.setEmptyMsg(_913); this.refreshRow.call(this,_913,_914); },deleteRow:function(_91f,_920){ var _921=$.data(_91f,"datagrid"); var opts=_921.options; var data=_921.data; function _922(_923){ var _924=_923?1:2; for(var i=_920+1;i
                                  ").appendTo(_92b.dc.view); d.html(opts.emptyMsg).css("top",h+"px"); } } },renderEmptyRow:function(_92d){ var opts=$(_92d).datagrid("options"); var cols=$.map($(_92d).datagrid("getColumnFields"),function(_92e){ return $(_92d).datagrid("getColumnOption",_92e); }); $.map(cols,function(col){ col.formatter1=col.formatter; col.styler1=col.styler; col.formatter=col.styler=undefined; }); var _92f=opts.rowStyler; opts.rowStyler=function(){ }; var _930=$.data(_92d,"datagrid").dc.body2; _930.html(this.renderTable(_92d,0,[{}],false)); _930.find("tbody *").css({height:1,borderColor:"transparent",background:"transparent"}); var tr=_930.find(".datagrid-row"); tr.removeClass("datagrid-row").removeAttr("datagrid-row-index"); tr.find(".datagrid-cell,.datagrid-cell-check").empty(); $.map(cols,function(col){ col.formatter=col.formatter1; col.styler=col.styler1; col.formatter1=col.styler1=undefined; }); opts.rowStyler=_92f; }}; $.fn.datagrid.defaults=$.extend({},$.fn.panel.defaults,{sharedStyleSheet:false,frozenColumns:undefined,columns:undefined,fitColumns:false,resizeHandle:"right",resizeEdge:5,autoRowHeight:true,toolbar:null,striped:false,method:"post",nowrap:true,idField:null,url:null,data:null,loadMsg:"Processing, please wait ...",emptyMsg:"",rownumbers:false,singleSelect:false,ctrlSelect:false,selectOnCheck:true,checkOnSelect:true,pagination:false,pagePosition:"bottom",pageNumber:1,pageSize:10,pageList:[10,20,30,40,50],queryParams:{},sortName:null,sortOrder:"asc",multiSort:false,remoteSort:true,showHeader:true,showFooter:false,scrollOnSelect:true,scrollbarSize:18,rownumberWidth:30,editorHeight:31,headerEvents:{mouseover:_772(true),mouseout:_772(false),click:_776,dblclick:_77b,contextmenu:_77e},rowEvents:{mouseover:_780(true),mouseout:_780(false),click:_787,dblclick:_791,contextmenu:_795},rowStyler:function(_931,_932){ },loader:function(_933,_934,_935){ var opts=$(this).datagrid("options"); if(!opts.url){ return false; } $.ajax({type:opts.method,url:opts.url,data:_933,dataType:"json",success:function(data){ _934(data); },error:function(){ _935.apply(this,arguments); }}); },loadFilter:function(data){ return data; },editors:_8a1,finder:{getTr:function(_936,_937,type,_938){ type=type||"body"; _938=_938||0; var _939=$.data(_936,"datagrid"); var dc=_939.dc; var opts=_939.options; if(_938==0){ var tr1=opts.finder.getTr(_936,_937,type,1); var tr2=opts.finder.getTr(_936,_937,type,2); return tr1.add(tr2); }else{ if(type=="body"){ var tr=$("#"+_939.rowIdPrefix+"-"+_938+"-"+_937); if(!tr.length){ tr=(_938==1?dc.body1:dc.body2).find(">table>tbody>tr[datagrid-row-index="+_937+"]"); } return tr; }else{ if(type=="footer"){ return (_938==1?dc.footer1:dc.footer2).find(">table>tbody>tr[datagrid-row-index="+_937+"]"); }else{ if(type=="selected"){ return (_938==1?dc.body1:dc.body2).find(">table>tbody>tr.datagrid-row-selected"); }else{ if(type=="highlight"){ return (_938==1?dc.body1:dc.body2).find(">table>tbody>tr.datagrid-row-over"); }else{ if(type=="checked"){ return (_938==1?dc.body1:dc.body2).find(">table>tbody>tr.datagrid-row-checked"); }else{ if(type=="editing"){ return (_938==1?dc.body1:dc.body2).find(">table>tbody>tr.datagrid-row-editing"); }else{ if(type=="last"){ return (_938==1?dc.body1:dc.body2).find(">table>tbody>tr[datagrid-row-index]:last"); }else{ if(type=="allbody"){ return (_938==1?dc.body1:dc.body2).find(">table>tbody>tr[datagrid-row-index]"); }else{ if(type=="allfooter"){ return (_938==1?dc.footer1:dc.footer2).find(">table>tbody>tr[datagrid-row-index]"); } } } } } } } } } } },getRow:function(_93a,p){ var _93b=(typeof p=="object")?p.attr("datagrid-row-index"):p; return $.data(_93a,"datagrid").data.rows[parseInt(_93b)]; },getRows:function(_93c){ return $(_93c).datagrid("getRows"); }},view:_8ea,onBeforeLoad:function(_93d){ },onLoadSuccess:function(){ },onLoadError:function(){ },onClickRow:function(_93e,_93f){ },onDblClickRow:function(_940,_941){ },onClickCell:function(_942,_943,_944){ },onDblClickCell:function(_945,_946,_947){ },onBeforeSortColumn:function(sort,_948){ },onSortColumn:function(sort,_949){ },onResizeColumn:function(_94a,_94b){ },onBeforeSelect:function(_94c,_94d){ },onSelect:function(_94e,_94f){ },onBeforeUnselect:function(_950,_951){ },onUnselect:function(_952,_953){ },onSelectAll:function(rows){ },onUnselectAll:function(rows){ },onBeforeCheck:function(_954,_955){ },onCheck:function(_956,_957){ },onBeforeUncheck:function(_958,_959){ },onUncheck:function(_95a,_95b){ },onCheckAll:function(rows){ },onUncheckAll:function(rows){ },onBeforeEdit:function(_95c,_95d){ },onBeginEdit:function(_95e,_95f){ },onEndEdit:function(_960,_961,_962){ },onAfterEdit:function(_963,_964,_965){ },onCancelEdit:function(_966,_967){ },onHeaderContextMenu:function(e,_968){ },onRowContextMenu:function(e,_969,_96a){ }}); })(jQuery); (function($){ var _96b; $(document)._unbind(".propertygrid")._bind("mousedown.propertygrid",function(e){ var p=$(e.target).closest("div.datagrid-view,div.combo-panel"); if(p.length){ return; } _96c(_96b); _96b=undefined; }); function _96d(_96e){ var _96f=$.data(_96e,"propertygrid"); var opts=$.data(_96e,"propertygrid").options; $(_96e).datagrid($.extend({},opts,{cls:"propertygrid",view:(opts.showGroup?opts.groupView:opts.view),onBeforeEdit:function(_970,row){ if(opts.onBeforeEdit.call(_96e,_970,row)==false){ return false; } var dg=$(this); var row=dg.datagrid("getRows")[_970]; var col=dg.datagrid("getColumnOption","value"); col.editor=row.editor; },onClickCell:function(_971,_972,_973){ if(_96b!=this){ _96c(_96b); _96b=this; } if(opts.editIndex!=_971){ _96c(_96b); $(this).datagrid("beginEdit",_971); var ed=$(this).datagrid("getEditor",{index:_971,field:_972}); if(!ed){ ed=$(this).datagrid("getEditor",{index:_971,field:"value"}); } if(ed){ var t=$(ed.target); var _974=t.data("textbox")?t.textbox("textbox"):t; _974.focus(); opts.editIndex=_971; } } opts.onClickCell.call(_96e,_971,_972,_973); },loadFilter:function(data){ _96c(this); return opts.loadFilter.call(this,data); }})); }; function _96c(_975){ var t=$(_975); if(!t.length){ return; } var opts=$.data(_975,"propertygrid").options; opts.finder.getTr(_975,null,"editing").each(function(){ var _976=parseInt($(this).attr("datagrid-row-index")); if(t.datagrid("validateRow",_976)){ t.datagrid("endEdit",_976); }else{ t.datagrid("cancelEdit",_976); } }); opts.editIndex=undefined; }; $.fn.propertygrid=function(_977,_978){ if(typeof _977=="string"){ var _979=$.fn.propertygrid.methods[_977]; if(_979){ return _979(this,_978); }else{ return this.datagrid(_977,_978); } } _977=_977||{}; return this.each(function(){ var _97a=$.data(this,"propertygrid"); if(_97a){ $.extend(_97a.options,_977); }else{ var opts=$.extend({},$.fn.propertygrid.defaults,$.fn.propertygrid.parseOptions(this),_977); opts.frozenColumns=$.extend(true,[],opts.frozenColumns); opts.columns=$.extend(true,[],opts.columns); $.data(this,"propertygrid",{options:opts}); } _96d(this); }); }; $.fn.propertygrid.methods={options:function(jq){ return $.data(jq[0],"propertygrid").options; }}; $.fn.propertygrid.parseOptions=function(_97b){ return $.extend({},$.fn.datagrid.parseOptions(_97b),$.parser.parseOptions(_97b,[{showGroup:"boolean"}])); }; var _97c=$.extend({},$.fn.datagrid.defaults.view,{render:function(_97d,_97e,_97f){ var _980=[]; var _981=this.groups; for(var i=0;i<_981.length;i++){ _980.push(this.renderGroup.call(this,_97d,i,_981[i],_97f)); } $(_97e).html(_980.join("")); },renderGroup:function(_982,_983,_984,_985){ var _986=$.data(_982,"datagrid"); var opts=_986.options; var _987=$(_982).datagrid("getColumnFields",_985); var _988=opts.frozenColumns&&opts.frozenColumns.length; if(_985){ if(!(opts.rownumbers||_988)){ return ""; } } var _989=[]; var css=opts.groupStyler.call(_982,_984.value,_984.rows); var cs=_98a(css,"datagrid-group"); _989.push("
                                  "); if((_985&&(opts.rownumbers||opts.frozenColumns.length))||(!_985&&!(opts.rownumbers||opts.frozenColumns.length))){ _989.push(""); _989.push(" "); _989.push(""); } if((_985&&_988)||(!_985)){ _989.push(""); _989.push(opts.groupFormatter.call(_982,_984.value,_984.rows)); _989.push(""); } _989.push("
                                  "); _989.push(""); var _98b=_984.startIndex; for(var j=0;j<_984.rows.length;j++){ var css=opts.rowStyler?opts.rowStyler.call(_982,_98b,_984.rows[j]):""; var _98c=""; var _98d=""; if(typeof css=="string"){ _98d=css; }else{ if(css){ _98c=css["class"]||""; _98d=css["style"]||""; } } var cls="class=\"datagrid-row "+(_98b%2&&opts.striped?"datagrid-row-alt ":" ")+_98c+"\""; var _98e=_98d?"style=\""+_98d+"\"":""; var _98f=_986.rowIdPrefix+"-"+(_985?1:2)+"-"+_98b; _989.push(""); _989.push(this.renderRow.call(this,_982,_987,_985,_98b,_984.rows[j])); _989.push(""); _98b++; } _989.push("
                                  "); return _989.join(""); function _98a(css,cls){ var _990=""; var _991=""; if(typeof css=="string"){ _991=css; }else{ if(css){ _990=css["class"]||""; _991=css["style"]||""; } } return "class=\""+cls+(_990?" "+_990:"")+"\" "+"style=\""+_991+"\""; }; },bindEvents:function(_992){ var _993=$.data(_992,"datagrid"); var dc=_993.dc; var body=dc.body1.add(dc.body2); var _994=($.data(body[0],"events")||$._data(body[0],"events")).click[0].handler; body._unbind("click")._bind("click",function(e){ var tt=$(e.target); var _995=tt.closest("span.datagrid-row-expander"); if(_995.length){ var _996=_995.closest("div.datagrid-group").attr("group-index"); if(_995.hasClass("datagrid-row-collapse")){ $(_992).datagrid("collapseGroup",_996); }else{ $(_992).datagrid("expandGroup",_996); } }else{ _994(e); } e.stopPropagation(); }); },onBeforeRender:function(_997,rows){ var _998=$.data(_997,"datagrid"); var opts=_998.options; _999(); var _99a=[]; for(var i=0;i"+".datagrid-group{height:"+opts.groupHeight+"px;overflow:hidden;font-weight:bold;border-bottom:1px solid #ccc;white-space:nowrap;word-break:normal;}"+".datagrid-group-title,.datagrid-group-expander{display:inline-block;vertical-align:bottom;height:100%;line-height:"+opts.groupHeight+"px;padding:0 4px;}"+".datagrid-group-title{position:relative;}"+".datagrid-group-expander{width:"+opts.expanderWidth+"px;text-align:center;padding:0}"+".datagrid-row-expander{margin:"+Math.floor((opts.groupHeight-16)/2)+"px 0;display:inline-block;width:16px;height:16px;cursor:pointer}"+""); } }; },onAfterRender:function(_9a1){ $.fn.datagrid.defaults.view.onAfterRender.call(this,_9a1); var view=this; var _9a2=$.data(_9a1,"datagrid"); var opts=_9a2.options; if(!_9a2.onResizeColumn){ _9a2.onResizeColumn=opts.onResizeColumn; } if(!_9a2.onResize){ _9a2.onResize=opts.onResize; } opts.onResizeColumn=function(_9a3,_9a4){ view.resizeGroup(_9a1); _9a2.onResizeColumn.call(_9a1,_9a3,_9a4); }; opts.onResize=function(_9a5,_9a6){ view.resizeGroup(_9a1); _9a2.onResize.call($(_9a1).datagrid("getPanel")[0],_9a5,_9a6); }; view.resizeGroup(_9a1); }}); $.extend($.fn.datagrid.methods,{groups:function(jq){ return jq.datagrid("options").view.groups; },expandGroup:function(jq,_9a7){ return jq.each(function(){ var opts=$(this).datagrid("options"); var view=$.data(this,"datagrid").dc.view; var _9a8=view.find(_9a7!=undefined?"div.datagrid-group[group-index=\""+_9a7+"\"]":"div.datagrid-group"); var _9a9=_9a8.find("span.datagrid-row-expander"); if(_9a9.hasClass("datagrid-row-expand")){ _9a9.removeClass("datagrid-row-expand").addClass("datagrid-row-collapse"); _9a8.next("table").show(); } $(this).datagrid("fixRowHeight"); if(opts.onExpandGroup){ opts.onExpandGroup.call(this,_9a7); } }); },collapseGroup:function(jq,_9aa){ return jq.each(function(){ var opts=$(this).datagrid("options"); var view=$.data(this,"datagrid").dc.view; var _9ab=view.find(_9aa!=undefined?"div.datagrid-group[group-index=\""+_9aa+"\"]":"div.datagrid-group"); var _9ac=_9ab.find("span.datagrid-row-expander"); if(_9ac.hasClass("datagrid-row-collapse")){ _9ac.removeClass("datagrid-row-collapse").addClass("datagrid-row-expand"); _9ab.next("table").hide(); } $(this).datagrid("fixRowHeight"); if(opts.onCollapseGroup){ opts.onCollapseGroup.call(this,_9aa); } }); },scrollToGroup:function(jq,_9ad){ return jq.each(function(){ var _9ae=$.data(this,"datagrid"); var dc=_9ae.dc; var grow=dc.body2.children("div.datagrid-group[group-index=\""+_9ad+"\"]"); if(grow.length){ var _9af=grow.outerHeight(); var _9b0=dc.view2.children("div.datagrid-header")._outerHeight(); var _9b1=dc.body2.outerHeight(true)-dc.body2.outerHeight(); var top=grow.position().top-_9b0-_9b1; if(top<0){ dc.body2.scrollTop(dc.body2.scrollTop()+top); }else{ if(top+_9af>dc.body2.height()-18){ dc.body2.scrollTop(dc.body2.scrollTop()+top+_9af-dc.body2.height()+18); } } } }); }}); $.extend(_97c,{refreshGroupTitle:function(_9b2,_9b3){ var _9b4=$.data(_9b2,"datagrid"); var opts=_9b4.options; var dc=_9b4.dc; var _9b5=this.groups[_9b3]; var span=dc.body1.add(dc.body2).children("div.datagrid-group[group-index="+_9b3+"]").find("span.datagrid-group-title"); span.html(opts.groupFormatter.call(_9b2,_9b5.value,_9b5.rows)); },resizeGroup:function(_9b6,_9b7){ var _9b8=$.data(_9b6,"datagrid"); var dc=_9b8.dc; var ht=dc.header2.find("table"); var fr=ht.find("tr.datagrid-filter-row").hide(); var ww=dc.body2.children("table.datagrid-btable:first").width(); if(_9b7==undefined){ var _9b9=dc.body2.children("div.datagrid-group"); }else{ var _9b9=dc.body2.children("div.datagrid-group[group-index="+_9b7+"]"); } _9b9._outerWidth(ww); var opts=_9b8.options; if(opts.frozenColumns&&opts.frozenColumns.length){ var _9ba=dc.view1.width()-opts.expanderWidth; var _9bb=dc.view1.css("direction").toLowerCase()=="rtl"; _9b9.find(".datagrid-group-title").css(_9bb?"right":"left",-_9ba+"px"); } if(fr.length){ if(opts.showFilterBar){ fr.show(); } } },insertRow:function(_9bc,_9bd,row){ var _9be=$.data(_9bc,"datagrid"); var opts=_9be.options; var dc=_9be.dc; var _9bf=null; var _9c0; if(!_9be.data.rows.length){ $(_9bc).datagrid("loadData",[row]); return; } for(var i=0;i_9bf.startIndex+_9bf.rows.length){ _9bd=_9bf.startIndex+_9bf.rows.length; } } $.fn.datagrid.defaults.view.insertRow.call(this,_9bc,_9bd,row); if(_9bd>=_9bf.startIndex+_9bf.rows.length){ _9c1(_9bd,true); _9c1(_9bd,false); } _9bf.rows.splice(_9bd-_9bf.startIndex,0,row); }else{ _9bf={value:row[opts.groupField],rows:[row],startIndex:_9be.data.rows.length}; _9c0=this.groups.length; dc.body1.append(this.renderGroup.call(this,_9bc,_9c0,_9bf,true)); dc.body2.append(this.renderGroup.call(this,_9bc,_9c0,_9bf,false)); this.groups.push(_9bf); _9be.data.rows.push(row); } this.setGroupIndex(_9bc); this.refreshGroupTitle(_9bc,_9c0); this.resizeGroup(_9bc); function _9c1(_9c2,_9c3){ var _9c4=_9c3?1:2; var _9c5=opts.finder.getTr(_9bc,_9c2-1,"body",_9c4); var tr=opts.finder.getTr(_9bc,_9c2,"body",_9c4); tr.insertAfter(_9c5); }; },updateRow:function(_9c6,_9c7,row){ var opts=$.data(_9c6,"datagrid").options; $.fn.datagrid.defaults.view.updateRow.call(this,_9c6,_9c7,row); var tb=opts.finder.getTr(_9c6,_9c7,"body",2).closest("table.datagrid-btable"); var _9c8=parseInt(tb.prev().attr("group-index")); this.refreshGroupTitle(_9c6,_9c8); },deleteRow:function(_9c9,_9ca){ var _9cb=$.data(_9c9,"datagrid"); var opts=_9cb.options; var dc=_9cb.dc; var body=dc.body1.add(dc.body2); var tb=opts.finder.getTr(_9c9,_9ca,"body",2).closest("table.datagrid-btable"); var _9cc=parseInt(tb.prev().attr("group-index")); $.fn.datagrid.defaults.view.deleteRow.call(this,_9c9,_9ca); var _9cd=this.groups[_9cc]; if(_9cd.rows.length>1){ _9cd.rows.splice(_9ca-_9cd.startIndex,1); this.refreshGroupTitle(_9c9,_9cc); }else{ body.children("div.datagrid-group[group-index="+_9cc+"]").remove(); for(var i=_9cc+1;i").insertBefore(tr.find(".tree-title")); } if(row.checkState=="checked"){ _9f5(_a09,_a0a,true,true); }else{ if(row.checkState=="unchecked"){ _9f5(_a09,_a0a,false,true); }else{ var flag=_a07(row); if(flag===0){ _9f5(_a09,_a0a,false,true); }else{ if(flag===1){ _9f5(_a09,_a0a,true,true); } } } } }else{ ck.remove(); row.checkState=undefined; row.checked=undefined; _9fe(_a09,row); } }; function _a0b(_a0c,_a0d){ var opts=$.data(_a0c,"treegrid").options; var tr1=opts.finder.getTr(_a0c,_a0d,"body",1); var tr2=opts.finder.getTr(_a0c,_a0d,"body",2); var _a0e=$(_a0c).datagrid("getColumnFields",true).length+(opts.rownumbers?1:0); var _a0f=$(_a0c).datagrid("getColumnFields",false).length; _a10(tr1,_a0e); _a10(tr2,_a0f); function _a10(tr,_a11){ $(""+""+"
                                  "+""+"").insertAfter(tr); }; }; function _a12(_a13,_a14,data,_a15,_a16){ var _a17=$.data(_a13,"treegrid"); var opts=_a17.options; var dc=_a17.dc; data=opts.loadFilter.call(_a13,data,_a14); var node=find(_a13,_a14); if(node){ var _a18=opts.finder.getTr(_a13,_a14,"body",1); var _a19=opts.finder.getTr(_a13,_a14,"body",2); var cc1=_a18.next("tr.treegrid-tr-tree").children("td").children("div"); var cc2=_a19.next("tr.treegrid-tr-tree").children("td").children("div"); if(!_a15){ node.children=[]; } }else{ var cc1=dc.body1; var cc2=dc.body2; if(!_a15){ _a17.data=[]; } } if(!_a15){ cc1.empty(); cc2.empty(); } if(opts.view.onBeforeRender){ opts.view.onBeforeRender.call(opts.view,_a13,_a14,data); } opts.view.render.call(opts.view,_a13,cc1,true); opts.view.render.call(opts.view,_a13,cc2,false); if(opts.showFooter){ opts.view.renderFooter.call(opts.view,_a13,dc.footer1,true); opts.view.renderFooter.call(opts.view,_a13,dc.footer2,false); } if(opts.view.onAfterRender){ opts.view.onAfterRender.call(opts.view,_a13); } if(!_a14&&opts.pagination){ var _a1a=$.data(_a13,"treegrid").total; var _a1b=$(_a13).datagrid("getPager"); var _a1c=_a1b.pagination("options"); if(_a1c.total!=data.total){ _a1b.pagination("refresh",{pageNumber:opts.pageNumber,total:data.total}); if(opts.pageNumber!=_a1c.pageNumber&&_a1c.pageNumber>0){ opts.pageNumber=_a1c.pageNumber; _9e3(_a13); } } } _9e4(_a13); _9ec(_a13); $(_a13).treegrid("showLines"); $(_a13).treegrid("setSelectionState"); $(_a13).treegrid("autoSizeColumn"); if(!_a16){ opts.onLoadSuccess.call(_a13,node,data); } }; function _9e3(_a1d,_a1e,_a1f,_a20,_a21){ var opts=$.data(_a1d,"treegrid").options; var body=$(_a1d).datagrid("getPanel").find("div.datagrid-body"); if(_a1e==undefined&&opts.queryParams){ opts.queryParams.id=undefined; } if(_a1f){ opts.queryParams=_a1f; } var _a22=$.extend({},opts.queryParams); if(opts.pagination){ $.extend(_a22,{page:opts.pageNumber,rows:opts.pageSize}); } if(opts.sortName){ $.extend(_a22,{sort:opts.sortName,order:opts.sortOrder}); } var row=find(_a1d,_a1e); if(opts.onBeforeLoad.call(_a1d,row,_a22)==false){ return; } var _a23=body.find("tr[node-id=\""+_a1e+"\"] span.tree-folder"); _a23.addClass("tree-loading"); $(_a1d).treegrid("loading"); var _a24=opts.loader.call(_a1d,_a22,function(data){ _a23.removeClass("tree-loading"); $(_a1d).treegrid("loaded"); _a12(_a1d,_a1e,data,_a20); if(_a21){ _a21(); } },function(){ _a23.removeClass("tree-loading"); $(_a1d).treegrid("loaded"); opts.onLoadError.apply(_a1d,arguments); if(_a21){ _a21(); } }); if(_a24==false){ _a23.removeClass("tree-loading"); $(_a1d).treegrid("loaded"); } }; function _a25(_a26){ var _a27=_a28(_a26); return _a27.length?_a27[0]:null; }; function _a28(_a29){ return $.data(_a29,"treegrid").data; }; function _a06(_a2a,_a2b){ var row=find(_a2a,_a2b); if(row._parentId){ return find(_a2a,row._parentId); }else{ return null; } }; function _9e8(_a2c,_a2d){ var data=$.data(_a2c,"treegrid").data; if(_a2d){ var _a2e=find(_a2c,_a2d); data=_a2e?(_a2e.children||[]):[]; } var _a2f=[]; $.easyui.forEach(data,true,function(node){ _a2f.push(node); }); return _a2f; }; function _a30(_a31,_a32){ var opts=$.data(_a31,"treegrid").options; var tr=opts.finder.getTr(_a31,_a32); var node=tr.children("td[field=\""+opts.treeField+"\"]"); return node.find("span.tree-indent,span.tree-hit").length; }; function find(_a33,_a34){ var _a35=$.data(_a33,"treegrid"); var opts=_a35.options; var _a36=null; $.easyui.forEach(_a35.data,true,function(node){ if(node[opts.idField]==_a34){ _a36=node; return false; } }); return _a36; }; function _a37(_a38,_a39){ var opts=$.data(_a38,"treegrid").options; var row=find(_a38,_a39); var tr=opts.finder.getTr(_a38,_a39); var hit=tr.find("span.tree-hit"); if(hit.length==0){ return; } if(hit.hasClass("tree-collapsed")){ return; } if(opts.onBeforeCollapse.call(_a38,row)==false){ return; } hit.removeClass("tree-expanded tree-expanded-hover").addClass("tree-collapsed"); hit.next().removeClass("tree-folder-open"); row.state="closed"; tr=tr.next("tr.treegrid-tr-tree"); var cc=tr.children("td").children("div"); if(opts.animate){ cc.slideUp("normal",function(){ $(_a38).treegrid("autoSizeColumn"); _9e4(_a38,_a39); opts.onCollapse.call(_a38,row); }); }else{ cc.hide(); $(_a38).treegrid("autoSizeColumn"); _9e4(_a38,_a39); opts.onCollapse.call(_a38,row); } }; function _a3a(_a3b,_a3c){ var opts=$.data(_a3b,"treegrid").options; var tr=opts.finder.getTr(_a3b,_a3c); var hit=tr.find("span.tree-hit"); var row=find(_a3b,_a3c); if(hit.length==0){ return; } if(hit.hasClass("tree-expanded")){ return; } if(opts.onBeforeExpand.call(_a3b,row)==false){ return; } hit.removeClass("tree-collapsed tree-collapsed-hover").addClass("tree-expanded"); hit.next().addClass("tree-folder-open"); var _a3d=tr.next("tr.treegrid-tr-tree"); if(_a3d.length){ var cc=_a3d.children("td").children("div"); _a3e(cc); }else{ _a0b(_a3b,row[opts.idField]); var _a3d=tr.next("tr.treegrid-tr-tree"); var cc=_a3d.children("td").children("div"); cc.hide(); var _a3f=$.extend({},opts.queryParams||{}); _a3f.id=row[opts.idField]; _9e3(_a3b,row[opts.idField],_a3f,true,function(){ if(cc.is(":empty")){ _a3d.remove(); }else{ _a3e(cc); } }); } function _a3e(cc){ row.state="open"; if(opts.animate){ cc.slideDown("normal",function(){ $(_a3b).treegrid("autoSizeColumn"); _9e4(_a3b,_a3c); opts.onExpand.call(_a3b,row); }); }else{ cc.show(); $(_a3b).treegrid("autoSizeColumn"); _9e4(_a3b,_a3c); opts.onExpand.call(_a3b,row); } }; }; function _9f4(_a40,_a41){ var opts=$.data(_a40,"treegrid").options; var tr=opts.finder.getTr(_a40,_a41); var hit=tr.find("span.tree-hit"); if(hit.hasClass("tree-expanded")){ _a37(_a40,_a41); }else{ _a3a(_a40,_a41); } }; function _a42(_a43,_a44){ var opts=$.data(_a43,"treegrid").options; var _a45=_9e8(_a43,_a44); if(_a44){ _a45.unshift(find(_a43,_a44)); } for(var i=0;i<_a45.length;i++){ _a37(_a43,_a45[i][opts.idField]); } }; function _a46(_a47,_a48){ var opts=$.data(_a47,"treegrid").options; var _a49=_9e8(_a47,_a48); if(_a48){ _a49.unshift(find(_a47,_a48)); } for(var i=0;i<_a49.length;i++){ _a3a(_a47,_a49[i][opts.idField]); } }; function _a4a(_a4b,_a4c){ var opts=$.data(_a4b,"treegrid").options; var ids=[]; var p=_a06(_a4b,_a4c); while(p){ var id=p[opts.idField]; ids.unshift(id); p=_a06(_a4b,id); } for(var i=0;i").insertBefore(_a51); if(hit.prev().length){ hit.prev().remove(); } } } _a12(_a4e,_a4f.parent,_a4f.data,_a50.data.length>0,true); }; function _a52(_a53,_a54){ var ref=_a54.before||_a54.after; var opts=$.data(_a53,"treegrid").options; var _a55=_a06(_a53,ref); _a4d(_a53,{parent:(_a55?_a55[opts.idField]:null),data:[_a54.data]}); var _a56=_a55?_a55.children:$(_a53).treegrid("getRoots"); for(var i=0;i<_a56.length;i++){ if(_a56[i][opts.idField]==ref){ var _a57=_a56[_a56.length-1]; _a56.splice(_a54.before?i:(i+1),0,_a57); _a56.splice(_a56.length-1,1); break; } } _a58(true); _a58(false); _9ec(_a53); $(_a53).treegrid("showLines"); function _a58(_a59){ var _a5a=_a59?1:2; var tr=opts.finder.getTr(_a53,_a54.data[opts.idField],"body",_a5a); var _a5b=tr.closest("table.datagrid-btable"); tr=tr.parent().children(); var dest=opts.finder.getTr(_a53,ref,"body",_a5a); if(_a54.before){ tr.insertBefore(dest); }else{ var sub=dest.next("tr.treegrid-tr-tree"); tr.insertAfter(sub.length?sub:dest); } _a5b.remove(); }; }; function _a5c(_a5d,_a5e){ var _a5f=$.data(_a5d,"treegrid"); var opts=_a5f.options; var prow=_a06(_a5d,_a5e); $(_a5d).datagrid("deleteRow",_a5e); $.easyui.removeArrayItem(_a5f.checkedRows,opts.idField,_a5e); _9ec(_a5d); if(prow){ _a08(_a5d,prow[opts.idField]); } _a5f.total-=1; $(_a5d).datagrid("getPager").pagination("refresh",{total:_a5f.total}); $(_a5d).treegrid("showLines"); }; function _a60(_a61){ var t=$(_a61); var opts=t.treegrid("options"); if(opts.lines){ t.treegrid("getPanel").addClass("tree-lines"); }else{ t.treegrid("getPanel").removeClass("tree-lines"); return; } t.treegrid("getPanel").find("span.tree-indent").removeClass("tree-line tree-join tree-joinbottom"); t.treegrid("getPanel").find("div.datagrid-cell").removeClass("tree-node-last tree-root-first tree-root-one"); var _a62=t.treegrid("getRoots"); if(_a62.length>1){ _a63(_a62[0]).addClass("tree-root-first"); }else{ if(_a62.length==1){ _a63(_a62[0]).addClass("tree-root-one"); } } _a64(_a62); _a65(_a62); function _a64(_a66){ $.map(_a66,function(node){ if(node.children&&node.children.length){ _a64(node.children); }else{ var cell=_a63(node); cell.find(".tree-icon").prev().addClass("tree-join"); } }); if(_a66.length){ var cell=_a63(_a66[_a66.length-1]); cell.addClass("tree-node-last"); cell.find(".tree-join").removeClass("tree-join").addClass("tree-joinbottom"); } }; function _a65(_a67){ $.map(_a67,function(node){ if(node.children&&node.children.length){ _a65(node.children); } }); for(var i=0;i<_a67.length-1;i++){ var node=_a67[i]; var _a68=t.treegrid("getLevel",node[opts.idField]); var tr=opts.finder.getTr(_a61,node[opts.idField]); var cc=tr.next().find("tr.datagrid-row td[field=\""+opts.treeField+"\"] div.datagrid-cell"); cc.find("span:eq("+(_a68-1)+")").addClass("tree-line"); } }; function _a63(node){ var tr=opts.finder.getTr(_a61,node[opts.idField]); var cell=tr.find("td[field=\""+opts.treeField+"\"] div.datagrid-cell"); return cell; }; }; $.fn.treegrid=function(_a69,_a6a){ if(typeof _a69=="string"){ var _a6b=$.fn.treegrid.methods[_a69]; if(_a6b){ return _a6b(this,_a6a); }else{ return this.datagrid(_a69,_a6a); } } _a69=_a69||{}; return this.each(function(){ var _a6c=$.data(this,"treegrid"); if(_a6c){ $.extend(_a6c.options,_a69); }else{ _a6c=$.data(this,"treegrid",{options:$.extend({},$.fn.treegrid.defaults,$.fn.treegrid.parseOptions(this),_a69),data:[],checkedRows:[],tmpIds:[]}); } _9d3(this); if(_a6c.options.data){ $(this).treegrid("loadData",_a6c.options.data); } _9e3(this); }); }; $.fn.treegrid.methods={options:function(jq){ return $.data(jq[0],"treegrid").options; },resize:function(jq,_a6d){ return jq.each(function(){ $(this).datagrid("resize",_a6d); }); },fixRowHeight:function(jq,_a6e){ return jq.each(function(){ _9e4(this,_a6e); }); },loadData:function(jq,data){ return jq.each(function(){ _a12(this,data.parent,data); }); },load:function(jq,_a6f){ return jq.each(function(){ $(this).treegrid("options").pageNumber=1; $(this).treegrid("getPager").pagination({pageNumber:1}); $(this).treegrid("reload",_a6f); }); },reload:function(jq,id){ return jq.each(function(){ var opts=$(this).treegrid("options"); var _a70={}; if(typeof id=="object"){ _a70=id; }else{ _a70=$.extend({},opts.queryParams); _a70.id=id; } if(_a70.id){ var node=$(this).treegrid("find",_a70.id); if(node.children){ node.children.splice(0,node.children.length); } opts.queryParams=_a70; var tr=opts.finder.getTr(this,_a70.id); tr.next("tr.treegrid-tr-tree").remove(); tr.find("span.tree-hit").removeClass("tree-expanded tree-expanded-hover").addClass("tree-collapsed"); _a3a(this,_a70.id); }else{ _9e3(this,null,_a70); } }); },reloadFooter:function(jq,_a71){ return jq.each(function(){ var opts=$.data(this,"treegrid").options; var dc=$.data(this,"datagrid").dc; if(_a71){ $.data(this,"treegrid").footer=_a71; } if(opts.showFooter){ opts.view.renderFooter.call(opts.view,this,dc.footer1,true); opts.view.renderFooter.call(opts.view,this,dc.footer2,false); if(opts.view.onAfterRender){ opts.view.onAfterRender.call(opts.view,this); } $(this).treegrid("fixRowHeight"); } }); },getData:function(jq){ return $.data(jq[0],"treegrid").data; },getFooterRows:function(jq){ return $.data(jq[0],"treegrid").footer; },getRoot:function(jq){ return _a25(jq[0]); },getRoots:function(jq){ return _a28(jq[0]); },getParent:function(jq,id){ return _a06(jq[0],id); },getChildren:function(jq,id){ return _9e8(jq[0],id); },getLevel:function(jq,id){ return _a30(jq[0],id); },find:function(jq,id){ return find(jq[0],id); },isLeaf:function(jq,id){ var opts=$.data(jq[0],"treegrid").options; var tr=opts.finder.getTr(jq[0],id); var hit=tr.find("span.tree-hit"); return hit.length==0; },select:function(jq,id){ return jq.each(function(){ $(this).datagrid("selectRow",id); }); },unselect:function(jq,id){ return jq.each(function(){ $(this).datagrid("unselectRow",id); }); },collapse:function(jq,id){ return jq.each(function(){ _a37(this,id); }); },expand:function(jq,id){ return jq.each(function(){ _a3a(this,id); }); },toggle:function(jq,id){ return jq.each(function(){ _9f4(this,id); }); },collapseAll:function(jq,id){ return jq.each(function(){ _a42(this,id); }); },expandAll:function(jq,id){ return jq.each(function(){ _a46(this,id); }); },expandTo:function(jq,id){ return jq.each(function(){ _a4a(this,id); }); },append:function(jq,_a72){ return jq.each(function(){ _a4d(this,_a72); }); },insert:function(jq,_a73){ return jq.each(function(){ _a52(this,_a73); }); },remove:function(jq,id){ return jq.each(function(){ _a5c(this,id); }); },pop:function(jq,id){ var row=jq.treegrid("find",id); jq.treegrid("remove",id); return row; },refresh:function(jq,id){ return jq.each(function(){ var opts=$.data(this,"treegrid").options; opts.view.refreshRow.call(opts.view,this,id); }); },update:function(jq,_a74){ return jq.each(function(){ var opts=$.data(this,"treegrid").options; var row=_a74.row; opts.view.updateRow.call(opts.view,this,_a74.id,row); if(row.checked!=undefined){ row=find(this,_a74.id); $.extend(row,{checkState:row.checked?"checked":(row.checked===false?"unchecked":undefined)}); _a08(this,_a74.id); } }); },beginEdit:function(jq,id){ return jq.each(function(){ $(this).datagrid("beginEdit",id); $(this).treegrid("fixRowHeight",id); }); },endEdit:function(jq,id){ return jq.each(function(){ $(this).datagrid("endEdit",id); }); },cancelEdit:function(jq,id){ return jq.each(function(){ $(this).datagrid("cancelEdit",id); }); },showLines:function(jq){ return jq.each(function(){ _a60(this); }); },setSelectionState:function(jq){ return jq.each(function(){ $(this).datagrid("setSelectionState"); var _a75=$(this).data("treegrid"); for(var i=0;i<_a75.tmpIds.length;i++){ _9f5(this,_a75.tmpIds[i],true,true); } _a75.tmpIds=[]; }); },getCheckedNodes:function(jq,_a76){ _a76=_a76||"checked"; var rows=[]; $.easyui.forEach(jq.data("treegrid").checkedRows,false,function(row){ if(row.checkState==_a76){ rows.push(row); } }); return rows; },checkNode:function(jq,id){ return jq.each(function(){ _9f5(this,id,true); }); },uncheckNode:function(jq,id){ return jq.each(function(){ _9f5(this,id,false); }); },clearChecked:function(jq){ return jq.each(function(){ var _a77=this; var opts=$(_a77).treegrid("options"); $(_a77).datagrid("clearChecked"); $.map($(_a77).treegrid("getCheckedNodes"),function(row){ _9f5(_a77,row[opts.idField],false,true); }); }); }}; $.fn.treegrid.parseOptions=function(_a78){ return $.extend({},$.fn.datagrid.parseOptions(_a78),$.parser.parseOptions(_a78,["treeField",{checkbox:"boolean",cascadeCheck:"boolean",onlyLeafCheck:"boolean"},{animate:"boolean"}])); }; var _a79=$.extend({},$.fn.datagrid.defaults.view,{render:function(_a7a,_a7b,_a7c){ var opts=$.data(_a7a,"treegrid").options; var _a7d=$(_a7a).datagrid("getColumnFields",_a7c); var _a7e=$.data(_a7a,"datagrid").rowIdPrefix; if(_a7c){ if(!(opts.rownumbers||(opts.frozenColumns&&opts.frozenColumns.length))){ return; } } var view=this; if(this.treeNodes&&this.treeNodes.length){ var _a7f=_a80.call(this,_a7c,this.treeLevel,this.treeNodes); $(_a7b).append(_a7f.join("")); } function _a80(_a81,_a82,_a83){ var _a84=$(_a7a).treegrid("getParent",_a83[0][opts.idField]); var _a85=(_a84?_a84.children.length:$(_a7a).treegrid("getRoots").length)-_a83.length; var _a86=[""]; for(var i=0;i<_a83.length;i++){ var row=_a83[i]; if(row.state!="open"&&row.state!="closed"){ row.state="open"; } var css=opts.rowStyler?opts.rowStyler.call(_a7a,row):""; var cs=this.getStyleValue(css); var cls="class=\"datagrid-row "+(_a85++%2&&opts.striped?"datagrid-row-alt ":" ")+cs.c+"\""; var _a87=cs.s?"style=\""+cs.s+"\"":""; var _a88=_a7e+"-"+(_a81?1:2)+"-"+row[opts.idField]; _a86.push(""); _a86=_a86.concat(view.renderRow.call(view,_a7a,_a7d,_a81,_a82,row)); _a86.push(""); if(row.children&&row.children.length){ var tt=_a80.call(this,_a81,_a82+1,row.children); var v=row.state=="closed"?"none":"block"; _a86.push(""); } } _a86.push("
                                  "); _a86=_a86.concat(tt); _a86.push("
                                  "); return _a86; }; },renderFooter:function(_a89,_a8a,_a8b){ var opts=$.data(_a89,"treegrid").options; var rows=$.data(_a89,"treegrid").footer||[]; var _a8c=$(_a89).datagrid("getColumnFields",_a8b); var _a8d=[""]; for(var i=0;i"); _a8d.push(this.renderRow.call(this,_a89,_a8c,_a8b,0,row)); _a8d.push(""); } _a8d.push("
                                  "); $(_a8a).html(_a8d.join("")); },renderRow:function(_a8e,_a8f,_a90,_a91,row){ var _a92=$.data(_a8e,"treegrid"); var opts=_a92.options; var cc=[]; if(_a90&&opts.rownumbers){ cc.push("
                                  0
                                  "); } for(var i=0;i<_a8f.length;i++){ var _a93=_a8f[i]; var col=$(_a8e).datagrid("getColumnOption",_a93); if(col){ var css=col.styler?(col.styler(row[_a93],row)||""):""; var cs=this.getStyleValue(css); var cls=cs.c?"class=\""+cs.c+"\"":""; var _a94=col.hidden?"style=\"display:none;"+cs.s+"\"":(cs.s?"style=\""+cs.s+"\"":""); cc.push(""); var _a94=""; if(!col.checkbox){ if(col.align){ _a94+="text-align:"+col.align+";"; } if(!opts.nowrap){ _a94+="white-space:normal;height:auto;"; }else{ if(opts.autoRowHeight){ _a94+="height:auto;"; } } } cc.push("
                                  "); if(col.checkbox){ if(row.checked){ cc.push(""); }else{ var val=null; if(col.formatter){ val=col.formatter(row[_a93],row); }else{ val=row[_a93]; } if(_a93==opts.treeField){ for(var j=0;j<_a91;j++){ cc.push(""); } if(row.state=="closed"){ cc.push(""); cc.push(""); }else{ if(row.children&&row.children.length){ cc.push(""); cc.push(""); }else{ cc.push(""); cc.push(""); } } if(this.hasCheckbox(_a8e,row)){ var flag=0; var crow=$.easyui.getArrayItem(_a92.checkedRows,opts.idField,row[opts.idField]); if(crow){ flag=crow.checkState=="checked"?1:2; row.checkState=crow.checkState; row.checked=crow.checked; $.easyui.addArrayItem(_a92.checkedRows,opts.idField,row); }else{ var prow=$.easyui.getArrayItem(_a92.checkedRows,opts.idField,row._parentId); if(prow&&prow.checkState=="checked"&&opts.cascadeCheck){ flag=1; row.checked=true; $.easyui.addArrayItem(_a92.checkedRows,opts.idField,row); }else{ if(row.checked){ $.easyui.addArrayItem(_a92.tmpIds,row[opts.idField]); } } row.checkState=flag?"checked":"unchecked"; } cc.push(""); }else{ row.checkState=undefined; row.checked=undefined; } cc.push(""+val+""); }else{ cc.push(val); } } cc.push("
                                  "); cc.push(""); } } return cc.join(""); },hasCheckbox:function(_a95,row){ var opts=$.data(_a95,"treegrid").options; if(opts.checkbox){ if($.isFunction(opts.checkbox)){ if(opts.checkbox.call(_a95,row)){ return true; }else{ return false; } }else{ if(opts.onlyLeafCheck){ if(row.state=="open"&&!(row.children&&row.children.length)){ return true; } }else{ return true; } } } return false; },refreshRow:function(_a96,id){ this.updateRow.call(this,_a96,id,{}); },updateRow:function(_a97,id,row){ var opts=$.data(_a97,"treegrid").options; var _a98=$(_a97).treegrid("find",id); $.extend(_a98,row); var _a99=$(_a97).treegrid("getLevel",id)-1; var _a9a=opts.rowStyler?opts.rowStyler.call(_a97,_a98):""; var _a9b=$.data(_a97,"datagrid").rowIdPrefix; var _a9c=_a98[opts.idField]; function _a9d(_a9e){ var _a9f=$(_a97).treegrid("getColumnFields",_a9e); var tr=opts.finder.getTr(_a97,id,"body",(_a9e?1:2)); var _aa0=tr.find("div.datagrid-cell-rownumber").html(); var _aa1=tr.find("div.datagrid-cell-check input[type=checkbox]").is(":checked"); tr.html(this.renderRow(_a97,_a9f,_a9e,_a99,_a98)); tr.attr("style",_a9a||""); tr.find("div.datagrid-cell-rownumber").html(_aa0); if(_aa1){ tr.find("div.datagrid-cell-check input[type=checkbox]")._propAttr("checked",true); } if(_a9c!=id){ tr.attr("id",_a9b+"-"+(_a9e?1:2)+"-"+_a9c); tr.attr("node-id",_a9c); } }; _a9d.call(this,true); _a9d.call(this,false); $(_a97).treegrid("fixRowHeight",id); },deleteRow:function(_aa2,id){ var opts=$.data(_aa2,"treegrid").options; var tr=opts.finder.getTr(_aa2,id); tr.next("tr.treegrid-tr-tree").remove(); tr.remove(); var _aa3=del(id); if(_aa3){ if(_aa3.children.length==0){ tr=opts.finder.getTr(_aa2,_aa3[opts.idField]); tr.next("tr.treegrid-tr-tree").remove(); var cell=tr.children("td[field=\""+opts.treeField+"\"]").children("div.datagrid-cell"); cell.find(".tree-icon").removeClass("tree-folder").addClass("tree-file"); cell.find(".tree-hit").remove(); $("").prependTo(cell); } } this.setEmptyMsg(_aa2); function del(id){ var cc; var _aa4=$(_aa2).treegrid("getParent",id); if(_aa4){ cc=_aa4.children; }else{ cc=$(_aa2).treegrid("getData"); } for(var i=0;ib?1:-1); }; r=_aaf(r1[sn],r2[sn])*(so=="asc"?1:-1); if(r!=0){ return r; } } return r; }); for(var i=0;i"); if(!_ad2){ _ad5.push(""); _ad5.push(opts.groupFormatter.call(_acf,_ad1.value,_ad1.rows)); _ad5.push(""); } _ad5.push("
                                  "); _ad5.push(this.renderTable(_acf,_ad1.startIndex,_ad1.rows,_ad2)); return _ad5.join(""); },groupRows:function(_ad6,rows){ var _ad7=$.data(_ad6,"datagrid"); var opts=_ad7.options; var _ad8=[]; for(var i=0;idiv.combo-p>div.combo-panel:visible").panel("close"); }); }); function _ae8(_ae9){ var _aea=$.data(_ae9,"combo"); var opts=_aea.options; if(!_aea.panel){ _aea.panel=$("
                                  ").appendTo("html>body"); _aea.panel.panel({minWidth:opts.panelMinWidth,maxWidth:opts.panelMaxWidth,minHeight:opts.panelMinHeight,maxHeight:opts.panelMaxHeight,doSize:false,closed:true,cls:"combo-p",style:{position:"absolute",zIndex:10},onOpen:function(){ var _aeb=$(this).panel("options").comboTarget; var _aec=$.data(_aeb,"combo"); if(_aec){ _aec.options.onShowPanel.call(_aeb); } },onBeforeClose:function(){ _ae7($(this).parent()); },onClose:function(){ var _aed=$(this).panel("options").comboTarget; var _aee=$(_aed).data("combo"); if(_aee){ _aee.options.onHidePanel.call(_aed); } }}); } var _aef=$.extend(true,[],opts.icons); if(opts.hasDownArrow){ _aef.push({iconCls:"combo-arrow",handler:function(e){ _af4(e.data.target); }}); } $(_ae9).addClass("combo-f").textbox($.extend({},opts,{icons:_aef,onChange:function(){ }})); $(_ae9).attr("comboName",$(_ae9).attr("textboxName")); _aea.combo=$(_ae9).next(); _aea.combo.addClass("combo"); _aea.panel._unbind(".combo"); for(var _af0 in opts.panelEvents){ _aea.panel._bind(_af0+".combo",{target:_ae9},opts.panelEvents[_af0]); } }; function _af1(_af2){ var _af3=$.data(_af2,"combo"); var opts=_af3.options; var p=_af3.panel; if(p.is(":visible")){ p.panel("close"); } if(!opts.cloned){ p.panel("destroy"); } $(_af2).textbox("destroy"); }; function _af4(_af5){ var _af6=$.data(_af5,"combo").panel; if(_af6.is(":visible")){ var _af7=_af6.combo("combo"); _af8(_af7); if(_af7!=_af5){ $(_af5).combo("showPanel"); } }else{ var p=$(_af5).closest("div.combo-p").children(".combo-panel"); $("div.combo-panel:visible").not(_af6).not(p).panel("close"); $(_af5).combo("showPanel"); } $(_af5).combo("textbox").focus(); }; function _ae7(_af9){ $(_af9).find(".combo-f").each(function(){ var p=$(this).combo("panel"); if(p.is(":visible")){ p.panel("close"); } }); }; function _afa(e){ var _afb=e.data.target; var _afc=$.data(_afb,"combo"); var opts=_afc.options; if(!opts.editable){ _af4(_afb); }else{ var p=$(_afb).closest("div.combo-p").children(".combo-panel"); $("div.combo-panel:visible").not(p).each(function(){ var _afd=$(this).combo("combo"); if(_afd!=_afb){ _af8(_afd); } }); } }; function _afe(e){ var _aff=e.data.target; var t=$(_aff); var _b00=t.data("combo"); var opts=t.combo("options"); _b00.panel.panel("options").comboTarget=_aff; switch(e.keyCode){ case 38: opts.keyHandler.up.call(_aff,e); break; case 40: opts.keyHandler.down.call(_aff,e); break; case 37: opts.keyHandler.left.call(_aff,e); break; case 39: opts.keyHandler.right.call(_aff,e); break; case 13: e.preventDefault(); opts.keyHandler.enter.call(_aff,e); return false; case 9: case 27: _af8(_aff); break; default: if(opts.editable){ if(_b00.timer){ clearTimeout(_b00.timer); } _b00.timer=setTimeout(function(){ var q=t.combo("getText"); if(_b00.previousText!=q){ _b00.previousText=q; t.combo("showPanel"); opts.keyHandler.query.call(_aff,q,e); t.combo("validate"); } },opts.delay); } } }; function _b01(e){ var _b02=e.data.target; var _b03=$(_b02).data("combo"); if(_b03.timer){ clearTimeout(_b03.timer); } }; function _b04(_b05){ var _b06=$.data(_b05,"combo"); var _b07=_b06.combo; var _b08=_b06.panel; var opts=$(_b05).combo("options"); var _b09=_b08.panel("options"); _b09.comboTarget=_b05; if(_b09.closed){ _b08.panel("panel").show().css({zIndex:($.fn.menu?$.fn.menu.defaults.zIndex++:($.fn.window?$.fn.window.defaults.zIndex++:99)),left:-999999}); _b08.panel("resize",{width:(opts.panelWidth?opts.panelWidth:_b07._outerWidth()),height:opts.panelHeight}); _b08.panel("panel").hide(); _b08.panel("open"); } (function(){ if(_b09.comboTarget==_b05&&_b08.is(":visible")){ _b08.panel("move",{left:_b0a(),top:_b0b()}); setTimeout(arguments.callee,200); } })(); function _b0a(){ var left=_b07.offset().left; if(opts.panelAlign=="right"){ left+=_b07._outerWidth()-_b08._outerWidth(); } if(left+_b08._outerWidth()>$(window)._outerWidth()+$(document).scrollLeft()){ left=$(window)._outerWidth()+$(document).scrollLeft()-_b08._outerWidth(); } if(left<0){ left=0; } return left; }; function _b0b(){ if(opts.panelValign=="top"){ var top=_b07.offset().top-_b08._outerHeight(); }else{ if(opts.panelValign=="bottom"){ var top=_b07.offset().top+_b07._outerHeight(); }else{ var top=_b07.offset().top+_b07._outerHeight(); if(top+_b08._outerHeight()>$(window)._outerHeight()+$(document).scrollTop()){ top=_b07.offset().top-_b08._outerHeight(); } if(top<$(document).scrollTop()){ top=_b07.offset().top+_b07._outerHeight(); } } } return top; }; }; function _af8(_b0c){ var _b0d=$.data(_b0c,"combo").panel; _b0d.panel("close"); }; function _b0e(_b0f,text){ var _b10=$.data(_b0f,"combo"); var _b11=$(_b0f).textbox("getText"); if(_b11!=text){ $(_b0f).textbox("setText",text); } _b10.previousText=text; }; function _b12(_b13){ var _b14=$.data(_b13,"combo"); var opts=_b14.options; var _b15=$(_b13).next(); var _b16=[]; _b15.find(".textbox-value").each(function(){ _b16.push($(this).val()); }); if(opts.multivalue){ return _b16; }else{ return _b16.length?_b16[0].split(opts.separator):_b16; } }; function _b17(_b18,_b19){ var _b1a=$.data(_b18,"combo"); var _b1b=_b1a.combo; var opts=$(_b18).combo("options"); if(!$.isArray(_b19)){ _b19=_b19.split(opts.separator); } var _b1c=_b12(_b18); _b1b.find(".textbox-value").remove(); if(_b19.length){ if(opts.multivalue){ for(var i=0;i<_b19.length;i++){ _b1d(_b19[i]); } }else{ _b1d(_b19.join(opts.separator)); } } function _b1d(_b1e){ var name=$(_b18).attr("textboxName")||""; var _b1f=$("").appendTo(_b1b); _b1f.attr("name",name); if(opts.disabled){ _b1f.attr("disabled","disabled"); } _b1f.val(_b1e); }; var _b20=(function(){ if(opts.onChange==$.parser.emptyFn){ return false; } if(_b1c.length!=_b19.length){ return true; } for(var i=0;i<_b19.length;i++){ if(_b19[i]!=_b1c[i]){ return true; } } return false; })(); if(_b20){ $(_b18).val(_b19.join(opts.separator)); if(opts.multiple){ opts.onChange.call(_b18,_b19,_b1c); }else{ opts.onChange.call(_b18,_b19[0],_b1c[0]); } $(_b18).closest("form").trigger("_change",[_b18]); } }; function _b21(_b22){ var _b23=_b12(_b22); return _b23[0]; }; function _b24(_b25,_b26){ _b17(_b25,[_b26]); }; function _b27(_b28){ var opts=$.data(_b28,"combo").options; var _b29=opts.onChange; opts.onChange=$.parser.emptyFn; if(opts.multiple){ _b17(_b28,opts.value?opts.value:[]); }else{ _b24(_b28,opts.value); } opts.onChange=_b29; }; $.fn.combo=function(_b2a,_b2b){ if(typeof _b2a=="string"){ var _b2c=$.fn.combo.methods[_b2a]; if(_b2c){ return _b2c(this,_b2b); }else{ return this.textbox(_b2a,_b2b); } } _b2a=_b2a||{}; return this.each(function(){ var _b2d=$.data(this,"combo"); if(_b2d){ $.extend(_b2d.options,_b2a); if(_b2a.value!=undefined){ _b2d.options.originalValue=_b2a.value; } }else{ _b2d=$.data(this,"combo",{options:$.extend({},$.fn.combo.defaults,$.fn.combo.parseOptions(this),_b2a),previousText:""}); if(_b2d.options.multiple&&_b2d.options.value==""){ _b2d.options.originalValue=[]; }else{ _b2d.options.originalValue=_b2d.options.value; } } _ae8(this); _b27(this); }); }; $.fn.combo.methods={options:function(jq){ var opts=jq.textbox("options"); return $.extend($.data(jq[0],"combo").options,{width:opts.width,height:opts.height,disabled:opts.disabled,readonly:opts.readonly}); },cloneFrom:function(jq,from){ return jq.each(function(){ $(this).textbox("cloneFrom",from); $.data(this,"combo",{options:$.extend(true,{cloned:true},$(from).combo("options")),combo:$(this).next(),panel:$(from).combo("panel")}); $(this).addClass("combo-f").attr("comboName",$(this).attr("textboxName")); }); },combo:function(jq){ return jq.closest(".combo-panel").panel("options").comboTarget; },panel:function(jq){ return $.data(jq[0],"combo").panel; },destroy:function(jq){ return jq.each(function(){ _af1(this); }); },showPanel:function(jq){ return jq.each(function(){ _b04(this); }); },hidePanel:function(jq){ return jq.each(function(){ _af8(this); }); },clear:function(jq){ return jq.each(function(){ $(this).textbox("setText",""); var opts=$.data(this,"combo").options; if(opts.multiple){ $(this).combo("setValues",[]); }else{ $(this).combo("setValue",""); } }); },reset:function(jq){ return jq.each(function(){ var opts=$.data(this,"combo").options; if(opts.multiple){ $(this).combo("setValues",opts.originalValue); }else{ $(this).combo("setValue",opts.originalValue); } }); },setText:function(jq,text){ return jq.each(function(){ _b0e(this,text); }); },getValues:function(jq){ return _b12(jq[0]); },setValues:function(jq,_b2e){ return jq.each(function(){ _b17(this,_b2e); }); },getValue:function(jq){ return _b21(jq[0]); },setValue:function(jq,_b2f){ return jq.each(function(){ _b24(this,_b2f); }); }}; $.fn.combo.parseOptions=function(_b30){ var t=$(_b30); return $.extend({},$.fn.textbox.parseOptions(_b30),$.parser.parseOptions(_b30,["separator","panelAlign",{panelWidth:"number",hasDownArrow:"boolean",delay:"number",reversed:"boolean",multivalue:"boolean",selectOnNavigation:"boolean"},{panelMinWidth:"number",panelMaxWidth:"number",panelMinHeight:"number",panelMaxHeight:"number"}]),{panelHeight:(t.attr("panelHeight")=="auto"?"auto":parseInt(t.attr("panelHeight"))||undefined),multiple:(t.attr("multiple")?true:undefined)}); }; $.fn.combo.defaults=$.extend({},$.fn.textbox.defaults,{inputEvents:{click:_afa,keydown:_afe,paste:_afe,drop:_afe,blur:_b01},panelEvents:{mousedown:function(e){ e.preventDefault(); e.stopPropagation(); }},panelWidth:null,panelHeight:300,panelMinWidth:null,panelMaxWidth:null,panelMinHeight:null,panelMaxHeight:null,panelAlign:"left",panelValign:"auto",reversed:false,multiple:false,multivalue:true,selectOnNavigation:true,separator:",",hasDownArrow:true,delay:200,keyHandler:{up:function(e){ },down:function(e){ },left:function(e){ },right:function(e){ },enter:function(e){ },query:function(q,e){ }},onShowPanel:function(){ },onHidePanel:function(){ },onChange:function(_b31,_b32){ }}); })(jQuery); (function($){ function _b33(_b34,_b35){ var _b36=$.data(_b34,"combobox"); return $.easyui.indexOfArray(_b36.data,_b36.options.valueField,_b35); }; function _b37(_b38,_b39){ var opts=$.data(_b38,"combobox").options; var _b3a=$(_b38).combo("panel"); var item=opts.finder.getEl(_b38,_b39); if(item.length){ if(item.position().top<=0){ var h=_b3a.scrollTop()+item.position().top; _b3a.scrollTop(h); }else{ if(item.position().top+item.outerHeight()>_b3a.height()){ var h=_b3a.scrollTop()+item.position().top+item.outerHeight()-_b3a.height(); _b3a.scrollTop(h); } } } _b3a.triggerHandler("scroll"); }; function nav(_b3b,dir){ var opts=$.data(_b3b,"combobox").options; var _b3c=$(_b3b).combobox("panel"); var item=_b3c.children("div.combobox-item-hover"); if(!item.length){ item=_b3c.children("div.combobox-item-selected"); } item.removeClass("combobox-item-hover"); var _b3d="div.combobox-item:visible:not(.combobox-item-disabled):first"; var _b3e="div.combobox-item:visible:not(.combobox-item-disabled):last"; if(!item.length){ item=_b3c.children(dir=="next"?_b3d:_b3e); }else{ if(dir=="next"){ item=item.nextAll(_b3d); if(!item.length){ item=_b3c.children(_b3d); } }else{ item=item.prevAll(_b3d); if(!item.length){ item=_b3c.children(_b3e); } } } if(item.length){ item.addClass("combobox-item-hover"); var row=opts.finder.getRow(_b3b,item); if(row){ $(_b3b).combobox("scrollTo",row[opts.valueField]); if(opts.selectOnNavigation){ _b3f(_b3b,row[opts.valueField]); } } } }; function _b3f(_b40,_b41,_b42){ var opts=$.data(_b40,"combobox").options; var _b43=$(_b40).combo("getValues"); if($.inArray(_b41+"",_b43)==-1){ if(opts.multiple){ _b43.push(_b41); }else{ _b43=[_b41]; } _b44(_b40,_b43,_b42); } }; function _b45(_b46,_b47){ var opts=$.data(_b46,"combobox").options; var _b48=$(_b46).combo("getValues"); var _b49=$.inArray(_b47+"",_b48); if(_b49>=0){ _b48.splice(_b49,1); _b44(_b46,_b48); } }; function _b44(_b4a,_b4b,_b4c){ var opts=$.data(_b4a,"combobox").options; var _b4d=$(_b4a).combo("panel"); if(!$.isArray(_b4b)){ _b4b=_b4b.split(opts.separator); } if(!opts.multiple){ _b4b=_b4b.length?[_b4b[0]]:[""]; } var _b4e=$(_b4a).combo("getValues"); if(_b4d.is(":visible")){ _b4d.find(".combobox-item-selected").each(function(){ var row=opts.finder.getRow(_b4a,$(this)); if(row){ if($.easyui.indexOfArray(_b4e,row[opts.valueField])==-1){ $(this).removeClass("combobox-item-selected"); } } }); } $.map(_b4e,function(v){ if($.easyui.indexOfArray(_b4b,v)==-1){ var el=opts.finder.getEl(_b4a,v); if(el.hasClass("combobox-item-selected")){ el.removeClass("combobox-item-selected"); opts.onUnselect.call(_b4a,opts.finder.getRow(_b4a,v)); } } }); var _b4f=null; var vv=[],ss=[]; for(var i=0;i<_b4b.length;i++){ var v=_b4b[i]; var s=v; var row=opts.finder.getRow(_b4a,v); if(row){ s=row[opts.textField]; _b4f=row; var el=opts.finder.getEl(_b4a,v); if(!el.hasClass("combobox-item-selected")){ el.addClass("combobox-item-selected"); opts.onSelect.call(_b4a,row); } }else{ s=_b50(v,opts.mappingRows)||v; } vv.push(v); ss.push(s); } if(!_b4c){ $(_b4a).combo("setText",ss.join(opts.separator)); } if(opts.showItemIcon){ var tb=$(_b4a).combobox("textbox"); tb.removeClass("textbox-bgicon "+opts.textboxIconCls); if(_b4f&&_b4f.iconCls){ tb.addClass("textbox-bgicon "+_b4f.iconCls); opts.textboxIconCls=_b4f.iconCls; } } $(_b4a).combo("setValues",vv); _b4d.triggerHandler("scroll"); function _b50(_b51,a){ var item=$.easyui.getArrayItem(a,opts.valueField,_b51); return item?item[opts.textField]:undefined; }; }; function _b52(_b53,data,_b54){ var _b55=$.data(_b53,"combobox"); var opts=_b55.options; _b55.data=opts.loadFilter.call(_b53,data); opts.view.render.call(opts.view,_b53,$(_b53).combo("panel"),_b55.data); var vv=$(_b53).combobox("getValues"); $.easyui.forEach(_b55.data,false,function(row){ if(row["selected"]){ $.easyui.addArrayItem(vv,row[opts.valueField]+""); } }); if(opts.multiple){ _b44(_b53,vv,_b54); }else{ _b44(_b53,vv.length?[vv[vv.length-1]]:[],_b54); } opts.onLoadSuccess.call(_b53,data); }; function _b56(_b57,url,_b58,_b59){ var opts=$.data(_b57,"combobox").options; if(url){ opts.url=url; } _b58=$.extend({},opts.queryParams,_b58||{}); if(opts.onBeforeLoad.call(_b57,_b58)==false){ return; } opts.loader.call(_b57,_b58,function(data){ _b52(_b57,data,_b59); },function(){ opts.onLoadError.apply(this,arguments); }); }; function _b5a(_b5b,q){ var _b5c=$.data(_b5b,"combobox"); var opts=_b5c.options; var _b5d=$(); var qq=opts.multiple?q.split(opts.separator):[q]; if(opts.mode=="remote"){ _b5e(qq); _b56(_b5b,null,{q:q},true); }else{ var _b5f=$(_b5b).combo("panel"); _b5f.find(".combobox-item-hover").removeClass("combobox-item-hover"); _b5f.find(".combobox-item,.combobox-group").hide(); var data=_b5c.data; var vv=[]; $.map(qq,function(q){ q=$.trim(q); var _b60=q; var _b61=undefined; _b5d=$(); for(var i=0;i=0){ vv.push(v); } }); t.combobox("setValues",vv); if(!opts.multiple){ t.combobox("hidePanel"); } }; function _b66(_b67){ var _b68=$.data(_b67,"combobox"); var opts=_b68.options; $(_b67).addClass("combobox-f"); $(_b67).combo($.extend({},opts,{onShowPanel:function(){ $(this).combo("panel").find("div.combobox-item:hidden,div.combobox-group:hidden").show(); _b44(this,$(this).combobox("getValues"),true); $(this).combobox("scrollTo",$(this).combobox("getValue")); opts.onShowPanel.call(this); }})); }; function _b69(e){ $(this).children("div.combobox-item-hover").removeClass("combobox-item-hover"); var item=$(e.target).closest("div.combobox-item"); if(!item.hasClass("combobox-item-disabled")){ item.addClass("combobox-item-hover"); } e.stopPropagation(); }; function _b6a(e){ $(e.target).closest("div.combobox-item").removeClass("combobox-item-hover"); e.stopPropagation(); }; function _b6b(e){ var _b6c=$(this).panel("options").comboTarget; if(!_b6c){ return; } var opts=$(_b6c).combobox("options"); var item=$(e.target).closest("div.combobox-item"); if(!item.length||item.hasClass("combobox-item-disabled")){ return; } var row=opts.finder.getRow(_b6c,item); if(!row){ return; } if(opts.blurTimer){ clearTimeout(opts.blurTimer); opts.blurTimer=null; } opts.onClick.call(_b6c,row); var _b6d=row[opts.valueField]; if(opts.multiple){ if(item.hasClass("combobox-item-selected")){ _b45(_b6c,_b6d); }else{ _b3f(_b6c,_b6d); } }else{ $(_b6c).combobox("setValue",_b6d).combobox("hidePanel"); } e.stopPropagation(); }; function _b6e(e){ var _b6f=$(this).panel("options").comboTarget; if(!_b6f){ return; } var opts=$(_b6f).combobox("options"); if(opts.groupPosition=="sticky"){ var _b70=$(this).children(".combobox-stick"); if(!_b70.length){ _b70=$("
                                  ").appendTo(this); } _b70.hide(); var _b71=$(_b6f).data("combobox"); $(this).children(".combobox-group:visible").each(function(){ var g=$(this); var _b72=opts.finder.getGroup(_b6f,g); var _b73=_b71.data[_b72.startIndex+_b72.count-1]; var last=opts.finder.getEl(_b6f,_b73[opts.valueField]); if(g.position().top<0&&last.position().top>0){ _b70.show().html(g.html()); return false; } }); } }; $.fn.combobox=function(_b74,_b75){ if(typeof _b74=="string"){ var _b76=$.fn.combobox.methods[_b74]; if(_b76){ return _b76(this,_b75); }else{ return this.combo(_b74,_b75); } } _b74=_b74||{}; return this.each(function(){ var _b77=$.data(this,"combobox"); if(_b77){ $.extend(_b77.options,_b74); }else{ _b77=$.data(this,"combobox",{options:$.extend({},$.fn.combobox.defaults,$.fn.combobox.parseOptions(this),_b74),data:[]}); } _b66(this); if(_b77.options.data){ _b52(this,_b77.options.data); }else{ var data=$.fn.combobox.parseData(this); if(data.length){ _b52(this,data); } } _b56(this); }); }; $.fn.combobox.methods={options:function(jq){ var _b78=jq.combo("options"); return $.extend($.data(jq[0],"combobox").options,{width:_b78.width,height:_b78.height,originalValue:_b78.originalValue,disabled:_b78.disabled,readonly:_b78.readonly}); },cloneFrom:function(jq,from){ return jq.each(function(){ $(this).combo("cloneFrom",from); $.data(this,"combobox",$(from).data("combobox")); $(this).addClass("combobox-f").attr("comboboxName",$(this).attr("textboxName")); }); },getData:function(jq){ return $.data(jq[0],"combobox").data; },setValues:function(jq,_b79){ return jq.each(function(){ var opts=$(this).combobox("options"); if($.isArray(_b79)){ _b79=$.map(_b79,function(_b7a){ if(_b7a&&typeof _b7a=="object"){ $.easyui.addArrayItem(opts.mappingRows,opts.valueField,_b7a); return _b7a[opts.valueField]; }else{ return _b7a; } }); } _b44(this,_b79); }); },setValue:function(jq,_b7b){ return jq.each(function(){ $(this).combobox("setValues",$.isArray(_b7b)?_b7b:[_b7b]); }); },clear:function(jq){ return jq.each(function(){ _b44(this,[]); }); },reset:function(jq){ return jq.each(function(){ var opts=$(this).combobox("options"); if(opts.multiple){ $(this).combobox("setValues",opts.originalValue); }else{ $(this).combobox("setValue",opts.originalValue); } }); },loadData:function(jq,data){ return jq.each(function(){ _b52(this,data); }); },reload:function(jq,url){ return jq.each(function(){ if(typeof url=="string"){ _b56(this,url); }else{ if(url){ var opts=$(this).combobox("options"); opts.queryParams=url; } _b56(this); } }); },select:function(jq,_b7c){ return jq.each(function(){ _b3f(this,_b7c); }); },unselect:function(jq,_b7d){ return jq.each(function(){ _b45(this,_b7d); }); },scrollTo:function(jq,_b7e){ return jq.each(function(){ _b37(this,_b7e); }); }}; $.fn.combobox.parseOptions=function(_b7f){ var t=$(_b7f); return $.extend({},$.fn.combo.parseOptions(_b7f),$.parser.parseOptions(_b7f,["valueField","textField","groupField","groupPosition","mode","method","url",{showItemIcon:"boolean",limitToList:"boolean"}])); }; $.fn.combobox.parseData=function(_b80){ var data=[]; var opts=$(_b80).combobox("options"); $(_b80).children().each(function(){ if(this.tagName.toLowerCase()=="optgroup"){ var _b81=$(this).attr("label"); $(this).children().each(function(){ _b82(this,_b81); }); }else{ _b82(this); } }); return data; function _b82(el,_b83){ var t=$(el); var row={}; row[opts.valueField]=t.attr("value")!=undefined?t.attr("value"):t.text(); row[opts.textField]=t.text(); row["iconCls"]=$.parser.parseOptions(el,["iconCls"]).iconCls; row["selected"]=t.is(":selected"); row["disabled"]=t.is(":disabled"); if(_b83){ opts.groupField=opts.groupField||"group"; row[opts.groupField]=_b83; } data.push(row); }; }; var _b84=0; var _b85={render:function(_b86,_b87,data){ var _b88=$.data(_b86,"combobox"); var opts=_b88.options; var _b89=$(_b86).attr("id")||""; _b84++; _b88.itemIdPrefix=_b89+"_easyui_combobox_i"+_b84; _b88.groupIdPrefix=_b89+"_easyui_combobox_g"+_b84; _b88.groups=[]; var dd=[]; var _b8a=undefined; for(var i=0;i"); dd.push(opts.groupFormatter?opts.groupFormatter.call(_b86,g):g); dd.push("
                                  "); }else{ _b88.groups[_b88.groups.length-1].count++; } }else{ _b8a=undefined; } var cls="combobox-item"+(row.disabled?" combobox-item-disabled":"")+(g?" combobox-gitem":""); dd.push("
                                  "); if(opts.showItemIcon&&row.iconCls){ dd.push(""); } dd.push(opts.formatter?opts.formatter.call(_b86,row):s); dd.push("
                                  "); } $(_b87).html(dd.join("")); }}; $.fn.combobox.defaults=$.extend({},$.fn.combo.defaults,{valueField:"value",textField:"text",groupPosition:"static",groupField:null,groupFormatter:function(_b8b){ return _b8b; },mode:"local",method:"post",url:null,data:null,queryParams:{},showItemIcon:false,limitToList:false,unselectedValues:[],mappingRows:[],view:_b85,keyHandler:{up:function(e){ nav(this,"prev"); e.preventDefault(); },down:function(e){ nav(this,"next"); e.preventDefault(); },left:function(e){ },right:function(e){ },enter:function(e){ _b62(this); },query:function(q,e){ _b5a(this,q); }},inputEvents:$.extend({},$.fn.combo.defaults.inputEvents,{blur:function(e){ $.fn.combo.defaults.inputEvents.blur(e); var _b8c=e.data.target; var opts=$(_b8c).combobox("options"); if(opts.reversed||opts.limitToList){ if(opts.blurTimer){ clearTimeout(opts.blurTimer); } opts.blurTimer=setTimeout(function(){ var _b8d=$(_b8c).parent().length; if(_b8d){ if(opts.reversed){ $(_b8c).combobox("setValues",$(_b8c).combobox("getValues")); }else{ if(opts.limitToList){ var vv=[]; $.map($(_b8c).combobox("getValues"),function(v){ var _b8e=$.easyui.indexOfArray($(_b8c).combobox("getData"),opts.valueField,v); if(_b8e>=0){ vv.push(v); } }); $(_b8c).combobox("setValues",vv); } } opts.blurTimer=null; } },50); } }}),panelEvents:{mouseover:_b69,mouseout:_b6a,mousedown:function(e){ e.preventDefault(); e.stopPropagation(); },click:_b6b,scroll:_b6e},filter:function(q,row){ var opts=$(this).combobox("options"); return row[opts.textField].toLowerCase().indexOf(q.toLowerCase())>=0; },formatter:function(row){ var opts=$(this).combobox("options"); return row[opts.textField]; },loader:function(_b8f,_b90,_b91){ var opts=$(this).combobox("options"); if(!opts.url){ return false; } $.ajax({type:opts.method,url:opts.url,data:_b8f,dataType:"json",success:function(data){ _b90(data); },error:function(){ _b91.apply(this,arguments); }}); },loadFilter:function(data){ return data; },finder:{getEl:function(_b92,_b93){ var _b94=_b33(_b92,_b93); var id=$.data(_b92,"combobox").itemIdPrefix+"_"+_b94; return $("#"+id); },getGroupEl:function(_b95,_b96){ var _b97=$.data(_b95,"combobox"); var _b98=$.easyui.indexOfArray(_b97.groups,"value",_b96); var id=_b97.groupIdPrefix+"_"+_b98; return $("#"+id); },getGroup:function(_b99,p){ var _b9a=$.data(_b99,"combobox"); var _b9b=p.attr("id").substr(_b9a.groupIdPrefix.length+1); return _b9a.groups[parseInt(_b9b)]; },getRow:function(_b9c,p){ var _b9d=$.data(_b9c,"combobox"); var _b9e=(p instanceof $)?p.attr("id").substr(_b9d.itemIdPrefix.length+1):_b33(_b9c,p); return _b9d.data[parseInt(_b9e)]; }},onBeforeLoad:function(_b9f){ },onLoadSuccess:function(data){ },onLoadError:function(){ },onSelect:function(_ba0){ },onUnselect:function(_ba1){ },onClick:function(_ba2){ }}); })(jQuery); (function($){ function _ba3(_ba4){ var _ba5=$.data(_ba4,"combotree"); var opts=_ba5.options; var tree=_ba5.tree; $(_ba4).addClass("combotree-f"); $(_ba4).combo($.extend({},opts,{onShowPanel:function(){ if(opts.editable){ tree.tree("doFilter",""); } opts.onShowPanel.call(this); }})); var _ba6=$(_ba4).combo("panel"); if(!tree){ tree=$("
                                    ").appendTo(_ba6); _ba5.tree=tree; } tree.tree($.extend({},opts,{checkbox:opts.multiple,onLoadSuccess:function(node,data){ var _ba7=$(_ba4).combotree("getValues"); if(opts.multiple){ $.map(tree.tree("getChecked"),function(node){ $.easyui.addArrayItem(_ba7,node.id); }); } _bac(_ba4,_ba7,_ba5.remainText); opts.onLoadSuccess.call(this,node,data); },onClick:function(node){ if(opts.multiple){ $(this).tree(node.checked?"uncheck":"check",node.target); }else{ $(_ba4).combo("hidePanel"); } _ba5.remainText=false; _ba9(_ba4); opts.onClick.call(this,node); },onCheck:function(node,_ba8){ _ba5.remainText=false; _ba9(_ba4); opts.onCheck.call(this,node,_ba8); }})); }; function _ba9(_baa){ var _bab=$.data(_baa,"combotree"); var opts=_bab.options; var tree=_bab.tree; var vv=[]; if(opts.multiple){ vv=$.map(tree.tree("getChecked"),function(node){ return node.id; }); }else{ var node=tree.tree("getSelected"); if(node){ vv.push(node.id); } } vv=vv.concat(opts.unselectedValues); _bac(_baa,vv,_bab.remainText); }; function _bac(_bad,_bae,_baf){ var _bb0=$.data(_bad,"combotree"); var opts=_bb0.options; var tree=_bb0.tree; var _bb1=tree.tree("options"); var _bb2=_bb1.onBeforeCheck; var _bb3=_bb1.onCheck; var _bb4=_bb1.onBeforeSelect; var _bb5=_bb1.onSelect; _bb1.onBeforeCheck=_bb1.onCheck=_bb1.onBeforeSelect=_bb1.onSelect=function(){ }; if(!$.isArray(_bae)){ _bae=_bae.split(opts.separator); } if(!opts.multiple){ _bae=_bae.length?[_bae[0]]:[""]; } var vv=$.map(_bae,function(_bb6){ return String(_bb6); }); tree.find("div.tree-node-selected").removeClass("tree-node-selected"); $.map(tree.tree("getChecked"),function(node){ if($.inArray(String(node.id),vv)==-1){ tree.tree("uncheck",node.target); } }); var ss=[]; opts.unselectedValues=[]; $.map(vv,function(v){ var node=tree.tree("find",v); if(node){ tree.tree("check",node.target).tree("select",node.target); ss.push(_bb7(node)); }else{ ss.push(_bb8(v,opts.mappingRows)||v); opts.unselectedValues.push(v); } }); if(opts.multiple){ $.map(tree.tree("getChecked"),function(node){ var id=String(node.id); if($.inArray(id,vv)==-1){ vv.push(id); ss.push(_bb7(node)); } }); } _bb1.onBeforeCheck=_bb2; _bb1.onCheck=_bb3; _bb1.onBeforeSelect=_bb4; _bb1.onSelect=_bb5; if(!_baf){ var s=ss.join(opts.separator); if($(_bad).combo("getText")!=s){ $(_bad).combo("setText",s); } } $(_bad).combo("setValues",vv); function _bb8(_bb9,a){ var item=$.easyui.getArrayItem(a,"id",_bb9); return item?_bb7(item):undefined; }; function _bb7(node){ return node[opts.textField||""]||node.text; }; }; function _bba(_bbb,q){ var _bbc=$.data(_bbb,"combotree"); var opts=_bbc.options; var tree=_bbc.tree; _bbc.remainText=true; tree.tree("doFilter",opts.multiple?q.split(opts.separator):q); }; function _bbd(_bbe){ var _bbf=$.data(_bbe,"combotree"); _bbf.remainText=false; $(_bbe).combotree("setValues",$(_bbe).combotree("getValues")); $(_bbe).combotree("hidePanel"); }; $.fn.combotree=function(_bc0,_bc1){ if(typeof _bc0=="string"){ var _bc2=$.fn.combotree.methods[_bc0]; if(_bc2){ return _bc2(this,_bc1); }else{ return this.combo(_bc0,_bc1); } } _bc0=_bc0||{}; return this.each(function(){ var _bc3=$.data(this,"combotree"); if(_bc3){ $.extend(_bc3.options,_bc0); }else{ $.data(this,"combotree",{options:$.extend({},$.fn.combotree.defaults,$.fn.combotree.parseOptions(this),_bc0)}); } _ba3(this); }); }; $.fn.combotree.methods={options:function(jq){ var _bc4=jq.combo("options"); return $.extend($.data(jq[0],"combotree").options,{width:_bc4.width,height:_bc4.height,originalValue:_bc4.originalValue,disabled:_bc4.disabled,readonly:_bc4.readonly}); },clone:function(jq,_bc5){ var t=jq.combo("clone",_bc5); t.data("combotree",{options:$.extend(true,{},jq.combotree("options")),tree:jq.combotree("tree")}); return t; },tree:function(jq){ return $.data(jq[0],"combotree").tree; },loadData:function(jq,data){ return jq.each(function(){ var opts=$.data(this,"combotree").options; opts.data=data; var tree=$.data(this,"combotree").tree; tree.tree("loadData",data); }); },reload:function(jq,url){ return jq.each(function(){ var opts=$.data(this,"combotree").options; var tree=$.data(this,"combotree").tree; if(url){ opts.url=url; } tree.tree({url:opts.url}); }); },setValues:function(jq,_bc6){ return jq.each(function(){ var opts=$(this).combotree("options"); if($.isArray(_bc6)){ _bc6=$.map(_bc6,function(_bc7){ if(_bc7&&typeof _bc7=="object"){ $.easyui.addArrayItem(opts.mappingRows,"id",_bc7); return _bc7.id; }else{ return _bc7; } }); } _bac(this,_bc6); }); },setValue:function(jq,_bc8){ return jq.each(function(){ $(this).combotree("setValues",$.isArray(_bc8)?_bc8:[_bc8]); }); },clear:function(jq){ return jq.each(function(){ $(this).combotree("setValues",[]); }); },reset:function(jq){ return jq.each(function(){ var opts=$(this).combotree("options"); if(opts.multiple){ $(this).combotree("setValues",opts.originalValue); }else{ $(this).combotree("setValue",opts.originalValue); } }); }}; $.fn.combotree.parseOptions=function(_bc9){ return $.extend({},$.fn.combo.parseOptions(_bc9),$.fn.tree.parseOptions(_bc9)); }; $.fn.combotree.defaults=$.extend({},$.fn.combo.defaults,$.fn.tree.defaults,{editable:false,textField:null,unselectedValues:[],mappingRows:[],keyHandler:{up:function(e){ },down:function(e){ },left:function(e){ },right:function(e){ },enter:function(e){ _bbd(this); },query:function(q,e){ _bba(this,q); }}}); })(jQuery); (function($){ function _bca(_bcb){ var _bcc=$.data(_bcb,"combogrid"); var opts=_bcc.options; var grid=_bcc.grid; $(_bcb).addClass("combogrid-f").combo($.extend({},opts,{onShowPanel:function(){ _be3(this,$(this).combogrid("getValues"),true); var p=$(this).combogrid("panel"); var _bcd=p.outerHeight()-p.height(); var _bce=p._size("minHeight"); var _bcf=p._size("maxHeight"); var dg=$(this).combogrid("grid"); dg.datagrid("resize",{width:"100%",height:(isNaN(parseInt(opts.panelHeight))?"auto":"100%"),minHeight:(_bce?_bce-_bcd:""),maxHeight:(_bcf?_bcf-_bcd:"")}); var row=dg.datagrid("getSelected"); if(row){ dg.datagrid("scrollTo",dg.datagrid("getRowIndex",row)); } opts.onShowPanel.call(this); }})); var _bd0=$(_bcb).combo("panel"); if(!grid){ grid=$("
                                    ").appendTo(_bd0); _bcc.grid=grid; } grid.datagrid($.extend({},opts,{border:false,singleSelect:(!opts.multiple),onLoadSuccess:_bd1,onClickRow:_bd2,onSelect:_bd3("onSelect"),onUnselect:_bd3("onUnselect"),onSelectAll:_bd3("onSelectAll"),onUnselectAll:_bd3("onUnselectAll")})); function _bd4(dg){ return $(dg).closest(".combo-panel").panel("options").comboTarget||_bcb; }; function _bd1(data){ var _bd5=_bd4(this); var _bd6=$(_bd5).data("combogrid"); var opts=_bd6.options; var _bd7=$(_bd5).combo("getValues"); _be3(_bd5,_bd7,_bd6.remainText); opts.onLoadSuccess.call(this,data); }; function _bd2(_bd8,row){ var _bd9=_bd4(this); var _bda=$(_bd9).data("combogrid"); var opts=_bda.options; _bda.remainText=false; _bdb.call(this); if(!opts.multiple){ $(_bd9).combo("hidePanel"); } opts.onClickRow.call(this,_bd8,row); }; function _bd3(_bdc){ return function(_bdd,row){ var _bde=_bd4(this); var opts=$(_bde).combogrid("options"); if(_bdc=="onUnselectAll"){ if(opts.multiple){ _bdb.call(this); } }else{ _bdb.call(this); } opts[_bdc].call(this,_bdd,row); }; }; function _bdb(){ var dg=$(this); var _bdf=_bd4(dg); var _be0=$(_bdf).data("combogrid"); var opts=_be0.options; var vv=$.map(dg.datagrid("getSelections"),function(row){ return row[opts.idField]; }); vv=vv.concat(opts.unselectedValues); var _be1=dg.data("datagrid").dc.body2; var _be2=_be1.scrollTop(); _be3(_bdf,vv,_be0.remainText); _be1.scrollTop(_be2); }; }; function nav(_be4,dir){ var _be5=$.data(_be4,"combogrid"); var opts=_be5.options; var grid=_be5.grid; var _be6=grid.datagrid("getRows").length; if(!_be6){ return; } var tr=opts.finder.getTr(grid[0],null,"highlight"); if(!tr.length){ tr=opts.finder.getTr(grid[0],null,"selected"); } var _be7; if(!tr.length){ _be7=(dir=="next"?0:_be6-1); }else{ var _be7=parseInt(tr.attr("datagrid-row-index")); _be7+=(dir=="next"?1:-1); if(_be7<0){ _be7=_be6-1; } if(_be7>=_be6){ _be7=0; } } grid.datagrid("highlightRow",_be7); if(opts.selectOnNavigation){ _be5.remainText=false; grid.datagrid("selectRow",_be7); } }; function _be3(_be8,_be9,_bea){ var _beb=$.data(_be8,"combogrid"); var opts=_beb.options; var grid=_beb.grid; var _bec=$(_be8).combo("getValues"); var _bed=$(_be8).combo("options"); var _bee=_bed.onChange; _bed.onChange=function(){ }; var _bef=grid.datagrid("options"); var _bf0=_bef.onSelect; var _bf1=_bef.onUnselectAll; _bef.onSelect=_bef.onUnselectAll=function(){ }; if(!$.isArray(_be9)){ _be9=_be9.split(opts.separator); } if(!opts.multiple){ _be9=_be9.length?[_be9[0]]:[""]; } var vv=$.map(_be9,function(_bf2){ return String(_bf2); }); vv=$.grep(vv,function(v,_bf3){ return _bf3===$.inArray(v,vv); }); var _bf4=$.grep(grid.datagrid("getSelections"),function(row,_bf5){ return $.inArray(String(row[opts.idField]),vv)>=0; }); grid.datagrid("clearSelections"); grid.data("datagrid").selectedRows=_bf4; var ss=[]; opts.unselectedValues=[]; $.map(vv,function(v){ var _bf6=grid.datagrid("getRowIndex",v); if(_bf6>=0){ grid.datagrid("selectRow",_bf6); }else{ opts.unselectedValues.push(v); } ss.push(_bf7(v,grid.datagrid("getRows"))||_bf7(v,_bf4)||_bf7(v,opts.mappingRows)||v); }); $(_be8).combo("setValues",_bec); _bed.onChange=_bee; _bef.onSelect=_bf0; _bef.onUnselectAll=_bf1; if(!_bea){ var s=ss.join(opts.separator); if($(_be8).combo("getText")!=s){ $(_be8).combo("setText",s); } } $(_be8).combo("setValues",_be9); function _bf7(_bf8,a){ var item=$.easyui.getArrayItem(a,opts.idField,_bf8); return item?item[opts.textField]:undefined; }; }; function _bf9(_bfa,q){ var _bfb=$.data(_bfa,"combogrid"); var opts=_bfb.options; var grid=_bfb.grid; _bfb.remainText=true; var qq=opts.multiple?q.split(opts.separator):[q]; qq=$.grep(qq,function(q){ return $.trim(q)!=""; }); if(opts.mode=="remote"){ _bfc(qq); grid.datagrid("load",$.extend({},opts.queryParams,{q:q})); }else{ grid.datagrid("highlightRow",-1); var rows=grid.datagrid("getRows"); var vv=[]; $.map(qq,function(q){ q=$.trim(q); var _bfd=q; _bfe(opts.mappingRows,q); _bfe(grid.datagrid("getSelections"),q); var _bff=_bfe(rows,q); if(_bff>=0){ if(opts.reversed){ grid.datagrid("highlightRow",_bff); } }else{ $.map(rows,function(row,i){ if(opts.filter.call(_bfa,q,row)){ grid.datagrid("highlightRow",i); } }); } }); _bfc(vv); } function _bfe(rows,q){ for(var i=0;i=0){ $.easyui.addArrayItem(vv,v); } }); $(_c01).combogrid("setValues",vv); if(!opts.multiple){ $(_c01).combogrid("hidePanel"); } }; $.fn.combogrid=function(_c04,_c05){ if(typeof _c04=="string"){ var _c06=$.fn.combogrid.methods[_c04]; if(_c06){ return _c06(this,_c05); }else{ return this.combo(_c04,_c05); } } _c04=_c04||{}; return this.each(function(){ var _c07=$.data(this,"combogrid"); if(_c07){ $.extend(_c07.options,_c04); }else{ _c07=$.data(this,"combogrid",{options:$.extend({},$.fn.combogrid.defaults,$.fn.combogrid.parseOptions(this),_c04)}); } _bca(this); }); }; $.fn.combogrid.methods={options:function(jq){ var _c08=jq.combo("options"); return $.extend($.data(jq[0],"combogrid").options,{width:_c08.width,height:_c08.height,originalValue:_c08.originalValue,disabled:_c08.disabled,readonly:_c08.readonly}); },cloneFrom:function(jq,from){ return jq.each(function(){ $(this).combo("cloneFrom",from); $.data(this,"combogrid",{options:$.extend(true,{cloned:true},$(from).combogrid("options")),combo:$(this).next(),panel:$(from).combo("panel"),grid:$(from).combogrid("grid")}); }); },grid:function(jq){ return $.data(jq[0],"combogrid").grid; },setValues:function(jq,_c09){ return jq.each(function(){ var opts=$(this).combogrid("options"); if($.isArray(_c09)){ _c09=$.map(_c09,function(_c0a){ if(_c0a&&typeof _c0a=="object"){ $.easyui.addArrayItem(opts.mappingRows,opts.idField,_c0a); return _c0a[opts.idField]; }else{ return _c0a; } }); } _be3(this,_c09); }); },setValue:function(jq,_c0b){ return jq.each(function(){ $(this).combogrid("setValues",$.isArray(_c0b)?_c0b:[_c0b]); }); },clear:function(jq){ return jq.each(function(){ $(this).combogrid("setValues",[]); }); },reset:function(jq){ return jq.each(function(){ var opts=$(this).combogrid("options"); if(opts.multiple){ $(this).combogrid("setValues",opts.originalValue); }else{ $(this).combogrid("setValue",opts.originalValue); } }); }}; $.fn.combogrid.parseOptions=function(_c0c){ var t=$(_c0c); return $.extend({},$.fn.combo.parseOptions(_c0c),$.fn.datagrid.parseOptions(_c0c),$.parser.parseOptions(_c0c,["idField","textField","mode"])); }; $.fn.combogrid.defaults=$.extend({},$.fn.combo.defaults,$.fn.datagrid.defaults,{loadMsg:null,idField:null,textField:null,unselectedValues:[],mappingRows:[],mode:"local",keyHandler:{up:function(e){ nav(this,"prev"); e.preventDefault(); },down:function(e){ nav(this,"next"); e.preventDefault(); },left:function(e){ },right:function(e){ },enter:function(e){ _c00(this); },query:function(q,e){ _bf9(this,q); }},inputEvents:$.extend({},$.fn.combo.defaults.inputEvents,{blur:function(e){ $.fn.combo.defaults.inputEvents.blur(e); var _c0d=e.data.target; var opts=$(_c0d).combogrid("options"); if(opts.reversed){ $(_c0d).combogrid("setValues",$(_c0d).combogrid("getValues")); } }}),panelEvents:{mousedown:function(e){ }},filter:function(q,row){ var opts=$(this).combogrid("options"); return (row[opts.textField]||"").toLowerCase().indexOf(q.toLowerCase())>=0; }}); })(jQuery); (function($){ function _c0e(_c0f){ var _c10=$.data(_c0f,"combotreegrid"); var opts=_c10.options; $(_c0f).addClass("combotreegrid-f").combo($.extend({},opts,{onShowPanel:function(){ var p=$(this).combotreegrid("panel"); var _c11=p.outerHeight()-p.height(); var _c12=p._size("minHeight"); var _c13=p._size("maxHeight"); var dg=$(this).combotreegrid("grid"); dg.treegrid("resize",{width:"100%",height:(isNaN(parseInt(opts.panelHeight))?"auto":"100%"),minHeight:(_c12?_c12-_c11:""),maxHeight:(_c13?_c13-_c11:"")}); var row=dg.treegrid("getSelected"); if(row){ dg.treegrid("scrollTo",row[opts.idField]); } opts.onShowPanel.call(this); }})); if(!_c10.grid){ var _c14=$(_c0f).combo("panel"); _c10.grid=$("
                                    ").appendTo(_c14); } _c10.grid.treegrid($.extend({},opts,{border:false,checkbox:opts.multiple,onLoadSuccess:function(row,data){ var _c15=$(_c0f).combotreegrid("getValues"); if(opts.multiple){ $.map($(this).treegrid("getCheckedNodes"),function(row){ $.easyui.addArrayItem(_c15,row[opts.idField]); }); } _c1a(_c0f,_c15); opts.onLoadSuccess.call(this,row,data); _c10.remainText=false; },onClickRow:function(row){ if(opts.multiple){ $(this).treegrid(row.checked?"uncheckNode":"checkNode",row[opts.idField]); $(this).treegrid("unselect",row[opts.idField]); }else{ $(_c0f).combo("hidePanel"); } _c17(_c0f); opts.onClickRow.call(this,row); },onCheckNode:function(row,_c16){ _c17(_c0f); opts.onCheckNode.call(this,row,_c16); }})); }; function _c17(_c18){ var _c19=$.data(_c18,"combotreegrid"); var opts=_c19.options; var grid=_c19.grid; var vv=[]; if(opts.multiple){ vv=$.map(grid.treegrid("getCheckedNodes"),function(row){ return row[opts.idField]; }); }else{ var row=grid.treegrid("getSelected"); if(row){ vv.push(row[opts.idField]); } } vv=vv.concat(opts.unselectedValues); _c1a(_c18,vv); }; function _c1a(_c1b,_c1c){ var _c1d=$.data(_c1b,"combotreegrid"); var opts=_c1d.options; var grid=_c1d.grid; var _c1e=grid.datagrid("options"); var _c1f=_c1e.onBeforeCheck; var _c20=_c1e.onCheck; var _c21=_c1e.onBeforeSelect; var _c22=_c1e.onSelect; _c1e.onBeforeCheck=_c1e.onCheck=_c1e.onBeforeSelect=_c1e.onSelect=function(){ }; if(!$.isArray(_c1c)){ _c1c=_c1c.split(opts.separator); } if(!opts.multiple){ _c1c=_c1c.length?[_c1c[0]]:[""]; } var vv=$.map(_c1c,function(_c23){ return String(_c23); }); vv=$.grep(vv,function(v,_c24){ return _c24===$.inArray(v,vv); }); var _c25=grid.treegrid("getSelected"); if(_c25){ grid.treegrid("unselect",_c25[opts.idField]); } $.map(grid.treegrid("getCheckedNodes"),function(row){ if($.inArray(String(row[opts.idField]),vv)==-1){ grid.treegrid("uncheckNode",row[opts.idField]); } }); var ss=[]; opts.unselectedValues=[]; $.map(vv,function(v){ var row=grid.treegrid("find",v); if(row){ if(opts.multiple){ grid.treegrid("checkNode",v); }else{ grid.treegrid("select",v); } ss.push(_c26(row)); }else{ ss.push(_c27(v,opts.mappingRows)||v); opts.unselectedValues.push(v); } }); if(opts.multiple){ $.map(grid.treegrid("getCheckedNodes"),function(row){ var id=String(row[opts.idField]); if($.inArray(id,vv)==-1){ vv.push(id); ss.push(_c26(row)); } }); } _c1e.onBeforeCheck=_c1f; _c1e.onCheck=_c20; _c1e.onBeforeSelect=_c21; _c1e.onSelect=_c22; if(!_c1d.remainText){ var s=ss.join(opts.separator); if($(_c1b).combo("getText")!=s){ $(_c1b).combo("setText",s); } } $(_c1b).combo("setValues",vv); function _c27(_c28,a){ var item=$.easyui.getArrayItem(a,opts.idField,_c28); return item?_c26(item):undefined; }; function _c26(row){ return row[opts.textField||""]||row[opts.treeField]; }; }; function _c29(_c2a,q){ var _c2b=$.data(_c2a,"combotreegrid"); var opts=_c2b.options; var grid=_c2b.grid; _c2b.remainText=true; var qq=opts.multiple?q.split(opts.separator):[q]; qq=$.grep(qq,function(q){ return $.trim(q)!=""; }); grid.treegrid("clearSelections").treegrid("clearChecked").treegrid("highlightRow",-1); if(opts.mode=="remote"){ _c2c(qq); grid.treegrid("load",$.extend({},opts.queryParams,{q:q})); }else{ if(q){ var data=grid.treegrid("getData"); var vv=[]; $.map(qq,function(q){ q=$.trim(q); if(q){ var v=undefined; $.easyui.forEach(data,true,function(row){ if(q.toLowerCase()==String(row[opts.treeField]).toLowerCase()){ v=row[opts.idField]; return false; }else{ if(opts.filter.call(_c2a,q,row)){ grid.treegrid("expandTo",row[opts.idField]); grid.treegrid("highlightRow",row[opts.idField]); return false; } } }); if(v==undefined){ $.easyui.forEach(opts.mappingRows,false,function(row){ if(q.toLowerCase()==String(row[opts.treeField])){ v=row[opts.idField]; return false; } }); } if(v!=undefined){ vv.push(v); }else{ vv.push(q); } } }); _c2c(vv); _c2b.remainText=false; } } function _c2c(vv){ if(!opts.reversed){ $(_c2a).combotreegrid("setValues",vv); } }; }; function _c2d(_c2e){ var _c2f=$.data(_c2e,"combotreegrid"); var opts=_c2f.options; var grid=_c2f.grid; var tr=opts.finder.getTr(grid[0],null,"highlight"); _c2f.remainText=false; if(tr.length){ var id=tr.attr("node-id"); if(opts.multiple){ if(tr.hasClass("datagrid-row-selected")){ grid.treegrid("uncheckNode",id); }else{ grid.treegrid("checkNode",id); } }else{ grid.treegrid("selectRow",id); } } var vv=[]; if(opts.multiple){ $.map(grid.treegrid("getCheckedNodes"),function(row){ vv.push(row[opts.idField]); }); }else{ var row=grid.treegrid("getSelected"); if(row){ vv.push(row[opts.idField]); } } $.map(opts.unselectedValues,function(v){ if($.easyui.indexOfArray(opts.mappingRows,opts.idField,v)>=0){ $.easyui.addArrayItem(vv,v); } }); $(_c2e).combotreegrid("setValues",vv); if(!opts.multiple){ $(_c2e).combotreegrid("hidePanel"); } }; $.fn.combotreegrid=function(_c30,_c31){ if(typeof _c30=="string"){ var _c32=$.fn.combotreegrid.methods[_c30]; if(_c32){ return _c32(this,_c31); }else{ return this.combo(_c30,_c31); } } _c30=_c30||{}; return this.each(function(){ var _c33=$.data(this,"combotreegrid"); if(_c33){ $.extend(_c33.options,_c30); }else{ _c33=$.data(this,"combotreegrid",{options:$.extend({},$.fn.combotreegrid.defaults,$.fn.combotreegrid.parseOptions(this),_c30)}); } _c0e(this); }); }; $.fn.combotreegrid.methods={options:function(jq){ var _c34=jq.combo("options"); return $.extend($.data(jq[0],"combotreegrid").options,{width:_c34.width,height:_c34.height,originalValue:_c34.originalValue,disabled:_c34.disabled,readonly:_c34.readonly}); },grid:function(jq){ return $.data(jq[0],"combotreegrid").grid; },setValues:function(jq,_c35){ return jq.each(function(){ var opts=$(this).combotreegrid("options"); if($.isArray(_c35)){ _c35=$.map(_c35,function(_c36){ if(_c36&&typeof _c36=="object"){ $.easyui.addArrayItem(opts.mappingRows,opts.idField,_c36); return _c36[opts.idField]; }else{ return _c36; } }); } _c1a(this,_c35); }); },setValue:function(jq,_c37){ return jq.each(function(){ $(this).combotreegrid("setValues",$.isArray(_c37)?_c37:[_c37]); }); },clear:function(jq){ return jq.each(function(){ $(this).combotreegrid("setValues",[]); }); },reset:function(jq){ return jq.each(function(){ var opts=$(this).combotreegrid("options"); if(opts.multiple){ $(this).combotreegrid("setValues",opts.originalValue); }else{ $(this).combotreegrid("setValue",opts.originalValue); } }); }}; $.fn.combotreegrid.parseOptions=function(_c38){ var t=$(_c38); return $.extend({},$.fn.combo.parseOptions(_c38),$.fn.treegrid.parseOptions(_c38),$.parser.parseOptions(_c38,["mode",{limitToGrid:"boolean"}])); }; $.fn.combotreegrid.defaults=$.extend({},$.fn.combo.defaults,$.fn.treegrid.defaults,{editable:false,singleSelect:true,limitToGrid:false,unselectedValues:[],mappingRows:[],mode:"local",textField:null,keyHandler:{up:function(e){ },down:function(e){ },left:function(e){ },right:function(e){ },enter:function(e){ _c2d(this); },query:function(q,e){ _c29(this,q); }},inputEvents:$.extend({},$.fn.combo.defaults.inputEvents,{blur:function(e){ $.fn.combo.defaults.inputEvents.blur(e); var _c39=e.data.target; var opts=$(_c39).combotreegrid("options"); if(opts.limitToGrid){ _c2d(_c39); } }}),filter:function(q,row){ var opts=$(this).combotreegrid("options"); return (row[opts.treeField]||"").toLowerCase().indexOf(q.toLowerCase())>=0; }}); })(jQuery); (function($){ function _c3a(_c3b){ var _c3c=$.data(_c3b,"tagbox"); var opts=_c3c.options; $(_c3b).addClass("tagbox-f").combobox($.extend({},opts,{cls:"tagbox",reversed:true,onChange:function(_c3d,_c3e){ _c3f(); $(this).combobox("hidePanel"); opts.onChange.call(_c3b,_c3d,_c3e); },onResizing:function(_c40,_c41){ var _c42=$(this).combobox("textbox"); var tb=$(this).data("textbox").textbox; var _c43=tb.outerWidth(); tb.css({height:"",paddingLeft:_c42.css("marginLeft"),paddingRight:_c42.css("marginRight")}); _c42.css("margin",0); tb._outerWidth(_c43); _c56(_c3b); _c48(this); opts.onResizing.call(_c3b,_c40,_c41); },onLoadSuccess:function(data){ _c3f(); opts.onLoadSuccess.call(_c3b,data); }})); _c3f(); _c56(_c3b); function _c3f(){ $(_c3b).next().find(".tagbox-label").remove(); var _c44=$(_c3b).tagbox("textbox"); var ss=[]; $.map($(_c3b).tagbox("getValues"),function(_c45,_c46){ var row=opts.finder.getRow(_c3b,_c45); var text=opts.tagFormatter.call(_c3b,_c45,row); var cs={}; var css=opts.tagStyler.call(_c3b,_c45,row)||""; if(typeof css=="string"){ cs={s:css}; }else{ cs={c:css["class"]||"",s:css["style"]||""}; } var _c47=$("").insertBefore(_c44).html(text); _c47.attr("tagbox-index",_c46); _c47.attr("style",cs.s).addClass(cs.c); $("").appendTo(_c47); }); _c48(_c3b); $(_c3b).combobox("setText",""); }; }; function _c48(_c49,_c4a){ var span=$(_c49).next(); var _c4b=_c4a?$(_c4a):span.find(".tagbox-label"); if(_c4b.length){ var _c4c=$(_c49).tagbox("textbox"); var _c4d=$(_c4b[0]); var _c4e=_c4d.outerHeight(true)-_c4d.outerHeight(); var _c4f=_c4c.outerHeight()-_c4e*2; _c4b.css({height:_c4f+"px",lineHeight:_c4f+"px"}); var _c50=span.find(".textbox-addon").css("height","100%"); _c50.find(".textbox-icon").css("height","100%"); span.find(".textbox-button").linkbutton("resize",{height:"100%"}); } }; function _c51(_c52){ var span=$(_c52).next(); span._unbind(".tagbox")._bind("click.tagbox",function(e){ var opts=$(_c52).tagbox("options"); if(opts.disabled||opts.readonly){ return; } if($(e.target).hasClass("tagbox-remove")){ var _c53=parseInt($(e.target).parent().attr("tagbox-index")); var _c54=$(_c52).tagbox("getValues"); if(opts.onBeforeRemoveTag.call(_c52,_c54[_c53])==false){ return; } opts.onRemoveTag.call(_c52,_c54[_c53]); _c54.splice(_c53,1); $(_c52).tagbox("setValues",_c54); }else{ var _c55=$(e.target).closest(".tagbox-label"); if(_c55.length){ var _c53=parseInt(_c55.attr("tagbox-index")); var _c54=$(_c52).tagbox("getValues"); opts.onClickTag.call(_c52,_c54[_c53]); } } $(this).find(".textbox-text").focus(); })._bind("keyup.tagbox",function(e){ _c56(_c52); })._bind("mouseover.tagbox",function(e){ if($(e.target).closest(".textbox-button,.textbox-addon,.tagbox-label").length){ $(this).triggerHandler("mouseleave"); }else{ $(this).find(".textbox-text").triggerHandler("mouseenter"); } })._bind("mouseleave.tagbox",function(e){ $(this).find(".textbox-text").triggerHandler("mouseleave"); }); }; function _c56(_c57){ var opts=$(_c57).tagbox("options"); var _c58=$(_c57).tagbox("textbox"); var span=$(_c57).next(); var tmp=$("").appendTo("body"); tmp.attr("style",_c58.attr("style")); tmp.css({position:"absolute",top:-9999,left:-9999,width:"auto",fontFamily:_c58.css("fontFamily"),fontSize:_c58.css("fontSize"),fontWeight:_c58.css("fontWeight"),whiteSpace:"nowrap"}); var _c59=_c5a(_c58.val()); var _c5b=_c5a(opts.prompt||""); tmp.remove(); var _c5c=Math.min(Math.max(_c59,_c5b)+20,span.width()); _c58._outerWidth(_c5c); span.find(".textbox-button").linkbutton("resize",{height:"100%"}); function _c5a(val){ var s=val.replace(/&/g,"&").replace(/\s/g," ").replace(//g,">"); tmp.html(s); return tmp.outerWidth(); }; }; function _c5d(_c5e){ var t=$(_c5e); var opts=t.tagbox("options"); if(opts.limitToList){ var _c5f=t.tagbox("panel"); var item=_c5f.children("div.combobox-item-hover"); if(item.length){ item.removeClass("combobox-item-hover"); var row=opts.finder.getRow(_c5e,item); var _c60=row[opts.valueField]; $(_c5e).tagbox(item.hasClass("combobox-item-selected")?"unselect":"select",_c60); } $(_c5e).tagbox("hidePanel"); }else{ var v=$.trim($(_c5e).tagbox("getText")); if(v!==""){ var _c61=$(_c5e).tagbox("getValues"); _c61.push(v); $(_c5e).tagbox("setValues",_c61); } } }; function _c62(_c63,_c64){ $(_c63).combobox("setText",""); _c56(_c63); $(_c63).combobox("setValues",_c64); $(_c63).combobox("setText",""); $(_c63).tagbox("validate"); }; $.fn.tagbox=function(_c65,_c66){ if(typeof _c65=="string"){ var _c67=$.fn.tagbox.methods[_c65]; if(_c67){ return _c67(this,_c66); }else{ return this.combobox(_c65,_c66); } } _c65=_c65||{}; return this.each(function(){ var _c68=$.data(this,"tagbox"); if(_c68){ $.extend(_c68.options,_c65); }else{ $.data(this,"tagbox",{options:$.extend({},$.fn.tagbox.defaults,$.fn.tagbox.parseOptions(this),_c65)}); } _c3a(this); _c51(this); }); }; $.fn.tagbox.methods={options:function(jq){ var _c69=jq.combobox("options"); return $.extend($.data(jq[0],"tagbox").options,{width:_c69.width,height:_c69.height,originalValue:_c69.originalValue,disabled:_c69.disabled,readonly:_c69.readonly}); },setValues:function(jq,_c6a){ return jq.each(function(){ _c62(this,_c6a); }); },reset:function(jq){ return jq.each(function(){ $(this).combobox("reset").combobox("setText",""); }); }}; $.fn.tagbox.parseOptions=function(_c6b){ return $.extend({},$.fn.combobox.parseOptions(_c6b),$.parser.parseOptions(_c6b,[])); }; $.fn.tagbox.defaults=$.extend({},$.fn.combobox.defaults,{hasDownArrow:false,multiple:true,reversed:true,selectOnNavigation:false,tipOptions:$.extend({},$.fn.textbox.defaults.tipOptions,{showDelay:200}),val:function(_c6c){ var vv=$(_c6c).parent().prev().tagbox("getValues"); if($(_c6c).is(":focus")){ vv.push($(_c6c).val()); } return vv.join(","); },inputEvents:$.extend({},$.fn.combo.defaults.inputEvents,{blur:function(e){ var _c6d=e.data.target; var opts=$(_c6d).tagbox("options"); if(opts.limitToList){ _c5d(_c6d); } }}),keyHandler:$.extend({},$.fn.combobox.defaults.keyHandler,{enter:function(e){ _c5d(this); },query:function(q,e){ var opts=$(this).tagbox("options"); if(opts.limitToList){ $.fn.combobox.defaults.keyHandler.query.call(this,q,e); }else{ $(this).combobox("hidePanel"); } }}),tagFormatter:function(_c6e,row){ var opts=$(this).tagbox("options"); return row?row[opts.textField]:_c6e; },tagStyler:function(_c6f,row){ return ""; },onClickTag:function(_c70){ },onBeforeRemoveTag:function(_c71){ },onRemoveTag:function(_c72){ }}); })(jQuery); (function($){ function _c73(_c74){ var _c75=$.data(_c74,"datebox"); var opts=_c75.options; $(_c74).addClass("datebox-f").combo($.extend({},opts,{onShowPanel:function(){ _c76(this); _c77(this); _c78(this); _c86(this,$(this).datebox("getText"),true); opts.onShowPanel.call(this); }})); if(!_c75.calendar){ var _c79=$(_c74).combo("panel").css("overflow","hidden"); _c79.panel("options").onBeforeDestroy=function(){ var c=$(this).find(".calendar-shared"); if(c.length){ c.insertBefore(c[0].pholder); } }; var cc=$("
                                    ").prependTo(_c79); if(opts.sharedCalendar){ var c=$(opts.sharedCalendar); if(!c[0].pholder){ c[0].pholder=$("
                                    ").insertAfter(c); } c.addClass("calendar-shared").appendTo(cc); if(!c.hasClass("calendar")){ c.calendar(); } _c75.calendar=c; }else{ _c75.calendar=$("
                                    ").appendTo(cc).calendar(); } $.extend(_c75.calendar.calendar("options"),{fit:true,border:false,onSelect:function(date){ var _c7a=this.target; var opts=$(_c7a).datebox("options"); opts.onSelect.call(_c7a,date); _c86(_c7a,opts.formatter.call(_c7a,date)); $(_c7a).combo("hidePanel"); }}); } $(_c74).combo("textbox").parent().addClass("datebox"); $(_c74).datebox("initValue",opts.value); function _c76(_c7b){ var opts=$(_c7b).datebox("options"); var _c7c=$(_c7b).combo("panel"); _c7c._unbind(".datebox")._bind("click.datebox",function(e){ if($(e.target).hasClass("datebox-button-a")){ var _c7d=parseInt($(e.target).attr("datebox-button-index")); opts.buttons[_c7d].handler.call(e.target,_c7b); } }); }; function _c77(_c7e){ var _c7f=$(_c7e).combo("panel"); if(_c7f.children("div.datebox-button").length){ return; } var _c80=$("
                                    ").appendTo(_c7f); var tr=_c80.find("tr"); for(var i=0;i").appendTo(tr); var btn=opts.buttons[i]; var t=$("").html($.isFunction(btn.text)?btn.text(_c7e):btn.text).appendTo(td); t.attr("datebox-button-index",i); } tr.find("td").css("width",(100/opts.buttons.length)+"%"); }; function _c78(_c81){ var _c82=$(_c81).combo("panel"); var cc=_c82.children("div.datebox-calendar-inner"); _c82.children()._outerWidth(_c82.width()); _c75.calendar.appendTo(cc); _c75.calendar[0].target=_c81; if(opts.panelHeight!="auto"){ var _c83=_c82.height(); _c82.children().not(cc).each(function(){ _c83-=$(this).outerHeight(); }); cc._outerHeight(_c83); } _c75.calendar.calendar("resize"); }; }; function _c84(_c85,q){ _c86(_c85,q,true); }; function _c87(_c88){ var _c89=$.data(_c88,"datebox"); var opts=_c89.options; var _c8a=_c89.calendar.calendar("options").current; if(_c8a){ _c86(_c88,opts.formatter.call(_c88,_c8a)); $(_c88).combo("hidePanel"); } }; function _c86(_c8b,_c8c,_c8d){ var _c8e=$.data(_c8b,"datebox"); var opts=_c8e.options; var _c8f=_c8e.calendar; _c8f.calendar("moveTo",opts.parser.call(_c8b,_c8c)); if(_c8d){ $(_c8b).combo("setValue",_c8c); }else{ if(_c8c){ _c8c=opts.formatter.call(_c8b,_c8f.calendar("options").current); } $(_c8b).combo("setText",_c8c).combo("setValue",_c8c); } }; $.fn.datebox=function(_c90,_c91){ if(typeof _c90=="string"){ var _c92=$.fn.datebox.methods[_c90]; if(_c92){ return _c92(this,_c91); }else{ return this.combo(_c90,_c91); } } _c90=_c90||{}; return this.each(function(){ var _c93=$.data(this,"datebox"); if(_c93){ $.extend(_c93.options,_c90); }else{ $.data(this,"datebox",{options:$.extend({},$.fn.datebox.defaults,$.fn.datebox.parseOptions(this),_c90)}); } _c73(this); }); }; $.fn.datebox.methods={options:function(jq){ var _c94=jq.combo("options"); return $.extend($.data(jq[0],"datebox").options,{width:_c94.width,height:_c94.height,originalValue:_c94.originalValue,disabled:_c94.disabled,readonly:_c94.readonly}); },cloneFrom:function(jq,from){ return jq.each(function(){ $(this).combo("cloneFrom",from); $.data(this,"datebox",{options:$.extend(true,{},$(from).datebox("options")),calendar:$(from).datebox("calendar")}); $(this).addClass("datebox-f"); }); },calendar:function(jq){ return $.data(jq[0],"datebox").calendar; },initValue:function(jq,_c95){ return jq.each(function(){ var opts=$(this).datebox("options"); var _c96=opts.value; if(_c96){ var date=opts.parser.call(this,_c96); _c96=opts.formatter.call(this,date); $(this).datebox("calendar").calendar("moveTo",date); } $(this).combo("initValue",_c96).combo("setText",_c96); }); },setValue:function(jq,_c97){ return jq.each(function(){ _c86(this,_c97); }); },reset:function(jq){ return jq.each(function(){ var opts=$(this).datebox("options"); $(this).datebox("setValue",opts.originalValue); }); },setDate:function(jq,date){ return jq.each(function(){ var opts=$(this).datebox("options"); $(this).datebox("calendar").calendar("moveTo",date); _c86(this,date?opts.formatter.call(this,date):""); }); },getDate:function(jq){ if(jq.datebox("getValue")){ return jq.datebox("calendar").calendar("options").current; }else{ return null; } }}; $.fn.datebox.parseOptions=function(_c98){ return $.extend({},$.fn.combo.parseOptions(_c98),$.parser.parseOptions(_c98,["sharedCalendar"])); }; $.fn.datebox.defaults=$.extend({},$.fn.combo.defaults,{panelWidth:250,panelHeight:"auto",sharedCalendar:null,keyHandler:{up:function(e){ },down:function(e){ },left:function(e){ },right:function(e){ },enter:function(e){ _c87(this); },query:function(q,e){ _c84(this,q); }},currentText:"Today",closeText:"Close",okText:"Ok",buttons:[{text:function(_c99){ return $(_c99).datebox("options").currentText; },handler:function(_c9a){ var opts=$(_c9a).datebox("options"); var now=new Date(); var _c9b=new Date(now.getFullYear(),now.getMonth(),now.getDate()); $(_c9a).datebox("calendar").calendar({year:_c9b.getFullYear(),month:_c9b.getMonth()+1,current:_c9b}); opts.onSelect.call(_c9a,_c9b); _c87(_c9a); }},{text:function(_c9c){ return $(_c9c).datebox("options").closeText; },handler:function(_c9d){ $(this).closest("div.combo-panel").panel("close"); }}],formatter:function(date){ var y=date.getFullYear(); var m=date.getMonth()+1; var d=date.getDate(); return (m<10?("0"+m):m)+"/"+(d<10?("0"+d):d)+"/"+y; },parser:function(s){ var _c9e=$(this).datebox("calendar").calendar("options"); if(!s){ return new _c9e.Date(); } var ss=s.split("/"); var m=parseInt(ss[0],10); var d=parseInt(ss[1],10); var y=parseInt(ss[2],10); if(!isNaN(y)&&!isNaN(m)&&!isNaN(d)){ return new _c9e.Date(y,m-1,d); }else{ return new _c9e.Date(); } },onSelect:function(date){ }}); })(jQuery); (function($){ function _c9f(_ca0){ var _ca1=$.data(_ca0,"datetimebox"); var opts=_ca1.options; $(_ca0).datebox($.extend({},opts,{onShowPanel:function(){ var _ca2=$(this).datetimebox("getValue"); _ca8(this,_ca2,true); opts.onShowPanel.call(this); },formatter:$.fn.datebox.defaults.formatter,parser:$.fn.datebox.defaults.parser})); $(_ca0).removeClass("datebox-f").addClass("datetimebox-f"); $(_ca0).datebox("calendar").calendar({onSelect:function(date){ opts.onSelect.call(this.target,date); }}); if(!_ca1.spinner){ var _ca3=$(_ca0).datebox("panel"); var p=$("
                                    ").insertAfter(_ca3.children("div.datebox-calendar-inner")); _ca1.spinner=p.children("input"); } _ca1.spinner.timespinner({width:opts.spinnerWidth,showSeconds:opts.showSeconds,separator:opts.timeSeparator,hour12:opts.hour12}); $(_ca0).datetimebox("initValue",opts.value); }; function _ca4(_ca5){ var c=$(_ca5).datetimebox("calendar"); var t=$(_ca5).datetimebox("spinner"); var date=c.calendar("options").current; return new Date(date.getFullYear(),date.getMonth(),date.getDate(),t.timespinner("getHours"),t.timespinner("getMinutes"),t.timespinner("getSeconds")); }; function _ca6(_ca7,q){ _ca8(_ca7,q,true); }; function _ca9(_caa){ var opts=$.data(_caa,"datetimebox").options; var date=_ca4(_caa); _ca8(_caa,opts.formatter.call(_caa,date)); $(_caa).combo("hidePanel"); }; function _ca8(_cab,_cac,_cad){ var opts=$.data(_cab,"datetimebox").options; $(_cab).combo("setValue",_cac); if(!_cad){ if(_cac){ var date=opts.parser.call(_cab,_cac); $(_cab).combo("setText",opts.formatter.call(_cab,date)); $(_cab).combo("setValue",opts.formatter.call(_cab,date)); }else{ $(_cab).combo("setText",_cac); } } var date=opts.parser.call(_cab,_cac); $(_cab).datetimebox("calendar").calendar("moveTo",date); $(_cab).datetimebox("spinner").timespinner("setValue",_cae(date)); function _cae(date){ function _caf(_cb0){ return (_cb0<10?"0":"")+_cb0; }; var tt=[_caf(date.getHours()),_caf(date.getMinutes())]; if(opts.showSeconds){ tt.push(_caf(date.getSeconds())); } return tt.join($(_cab).datetimebox("spinner").timespinner("options").separator); }; }; $.fn.datetimebox=function(_cb1,_cb2){ if(typeof _cb1=="string"){ var _cb3=$.fn.datetimebox.methods[_cb1]; if(_cb3){ return _cb3(this,_cb2); }else{ return this.datebox(_cb1,_cb2); } } _cb1=_cb1||{}; return this.each(function(){ var _cb4=$.data(this,"datetimebox"); if(_cb4){ $.extend(_cb4.options,_cb1); }else{ $.data(this,"datetimebox",{options:$.extend({},$.fn.datetimebox.defaults,$.fn.datetimebox.parseOptions(this),_cb1)}); } _c9f(this); }); }; $.fn.datetimebox.methods={options:function(jq){ var _cb5=jq.datebox("options"); return $.extend($.data(jq[0],"datetimebox").options,{originalValue:_cb5.originalValue,disabled:_cb5.disabled,readonly:_cb5.readonly}); },cloneFrom:function(jq,from){ return jq.each(function(){ $(this).datebox("cloneFrom",from); $.data(this,"datetimebox",{options:$.extend(true,{},$(from).datetimebox("options")),spinner:$(from).datetimebox("spinner")}); $(this).removeClass("datebox-f").addClass("datetimebox-f"); }); },spinner:function(jq){ return $.data(jq[0],"datetimebox").spinner; },initValue:function(jq,_cb6){ return jq.each(function(){ var opts=$(this).datetimebox("options"); var _cb7=opts.value; if(_cb7){ var date=opts.parser.call(this,_cb7); _cb7=opts.formatter.call(this,date); $(this).datetimebox("calendar").calendar("moveTo",date); } $(this).combo("initValue",_cb7).combo("setText",_cb7); }); },setValue:function(jq,_cb8){ return jq.each(function(){ _ca8(this,_cb8); }); },reset:function(jq){ return jq.each(function(){ var opts=$(this).datetimebox("options"); $(this).datetimebox("setValue",opts.originalValue); }); },setDate:function(jq,date){ return jq.each(function(){ var opts=$(this).datetimebox("options"); $(this).datetimebox("calendar").calendar("moveTo",date); _ca8(this,date?opts.formatter.call(this,date):""); }); },getDate:function(jq){ if(jq.datetimebox("getValue")){ return jq.datetimebox("calendar").calendar("options").current; }else{ return null; } }}; $.fn.datetimebox.parseOptions=function(_cb9){ var t=$(_cb9); return $.extend({},$.fn.datebox.parseOptions(_cb9),$.parser.parseOptions(_cb9,["timeSeparator","spinnerWidth",{showSeconds:"boolean"}])); }; $.fn.datetimebox.defaults=$.extend({},$.fn.datebox.defaults,{spinnerWidth:"100%",showSeconds:true,timeSeparator:":",hour12:false,panelEvents:{mousedown:function(e){ }},keyHandler:{up:function(e){ },down:function(e){ },left:function(e){ },right:function(e){ },enter:function(e){ _ca9(this); },query:function(q,e){ _ca6(this,q); }},buttons:[{text:function(_cba){ return $(_cba).datetimebox("options").currentText; },handler:function(_cbb){ var opts=$(_cbb).datetimebox("options"); _ca8(_cbb,opts.formatter.call(_cbb,new Date())); $(_cbb).datetimebox("hidePanel"); }},{text:function(_cbc){ return $(_cbc).datetimebox("options").okText; },handler:function(_cbd){ _ca9(_cbd); }},{text:function(_cbe){ return $(_cbe).datetimebox("options").closeText; },handler:function(_cbf){ $(_cbf).datetimebox("hidePanel"); }}],formatter:function(date){ if(!date){ return ""; } return $.fn.datebox.defaults.formatter.call(this,date)+" "+$.fn.timespinner.defaults.formatter.call($(this).datetimebox("spinner")[0],date); },parser:function(s){ s=$.trim(s); if(!s){ return new Date(); } var dt=s.split(" "); var _cc0=$.fn.datebox.defaults.parser.call(this,dt[0]); if(dt.length<2){ return _cc0; } var _cc1=$.fn.timespinner.defaults.parser.call($(this).datetimebox("spinner")[0],dt[1]+(dt[2]?" "+dt[2]:"")); return new Date(_cc0.getFullYear(),_cc0.getMonth(),_cc0.getDate(),_cc1.getHours(),_cc1.getMinutes(),_cc1.getSeconds()); }}); })(jQuery); (function($){ function _cc2(_cc3){ var _cc4=$.data(_cc3,"timepicker"); var opts=_cc4.options; $(_cc3).addClass("timepicker-f").combo($.extend({},opts,{onShowPanel:function(){ _cc5(this); _cc6(_cc3); _cd0(_cc3,$(_cc3).timepicker("getValue")); }})); $(_cc3).timepicker("initValue",opts.value); function _cc5(_cc7){ var opts=$(_cc7).timepicker("options"); var _cc8=$(_cc7).combo("panel"); _cc8._unbind(".timepicker")._bind("click.timepicker",function(e){ if($(e.target).hasClass("datebox-button-a")){ var _cc9=parseInt($(e.target).attr("datebox-button-index")); opts.buttons[_cc9].handler.call(e.target,_cc7); } }); }; function _cc6(_cca){ var _ccb=$(_cca).combo("panel"); if(_ccb.children("div.datebox-button").length){ return; } var _ccc=$("
                                    ").appendTo(_ccb); var tr=_ccc.find("tr"); for(var i=0;i").appendTo(tr); var btn=opts.buttons[i]; var t=$("").html($.isFunction(btn.text)?btn.text(_cca):btn.text).appendTo(td); t.attr("datebox-button-index",i); } tr.find("td").css("width",(100/opts.buttons.length)+"%"); }; }; function _ccd(_cce,_ccf){ var opts=$(_cce).data("timepicker").options; _cd0(_cce,_ccf); opts.value=_cd1(_cce); $(_cce).combo("setValue",opts.value).combo("setText",opts.value); }; function _cd0(_cd2,_cd3){ var opts=$(_cd2).data("timepicker").options; if(_cd3){ var _cd4=_cd3.split(" "); var hm=_cd4[0].split(":"); opts.selectingHour=parseInt(hm[0],10); opts.selectingMinute=parseInt(hm[1],10); opts.selectingAmpm=_cd4[1]; }else{ opts.selectingHour=12; opts.selectingMinute=0; opts.selectingAmpm=opts.ampm[0]; } _cd5(_cd2); }; function _cd1(_cd6){ var opts=$(_cd6).data("timepicker").options; var h=opts.selectingHour; var m=opts.selectingMinute; var ampm=opts.selectingAmpm; if(!ampm){ ampm=opts.ampm[0]; } return (h<10?"0"+h:h)+":"+(m<10?"0"+m:m)+" "+ampm; }; function _cd5(_cd7){ var opts=$(_cd7).data("timepicker").options; var _cd8=$(_cd7).combo("panel"); var _cd9=_cd8.children(".timepicker-panel"); if(!_cd9.length){ var _cd9=$("
                                    ").prependTo(_cd8); } _cd9.empty(); if(opts.panelHeight!="auto"){ var _cda=_cd8.height()-_cd8.find(".datebox-button").outerHeight(); _cd9._outerHeight(_cda); } _cdb(_cd7); _cdc(_cd7); _cd9.off(".timepicker"); _cd9.on("click.timepicker",".title-hour",function(e){ opts.selectingType="hour"; _cd5(_cd7); }).on("click.timepicker",".title-minute",function(e){ opts.selectingType="minute"; _cd5(_cd7); }).on("click.timepicker",".title-am",function(e){ opts.selectingAmpm=opts.ampm[0]; _cd5(_cd7); }).on("click.timepicker",".title-pm",function(e){ opts.selectingAmpm=opts.ampm[1]; _cd5(_cd7); }).on("click.timepicker",".item",function(e){ var _cdd=parseInt($(this).text(),10); if(opts.selectingType=="hour"){ opts.selectingHour=_cdd; }else{ opts.selectingMinute=_cdd; } _cd5(_cd7); }); }; function _cdb(_cde){ var opts=$(_cde).data("timepicker").options; var _cdf=$(_cde).combo("panel"); var _ce0=_cdf.find(".timepicker-panel"); var hour=opts.selectingHour; var _ce1=opts.selectingMinute; $("
                                    "+"
                                    "+(hour<10?"0"+hour:hour)+"
                                    "+"
                                    :
                                    "+"
                                    "+(_ce1<10?"0"+_ce1:_ce1)+"
                                    "+"
                                    "+"
                                    "+opts.ampm[0]+"
                                    "+"
                                    "+opts.ampm[1]+"
                                    "+"
                                    "+"
                                    ").appendTo(_ce0); var _ce2=_ce0.find(".panel-header"); if(opts.selectingType=="hour"){ _ce2.find(".title-hour").addClass("title-selected"); }else{ _ce2.find(".title-minute").addClass("title-selected"); } if(opts.selectingAmpm==opts.ampm[0]){ _ce2.find(".title-am").addClass("title-selected"); } if(opts.selectingAmpm==opts.ampm[1]){ _ce2.find(".title-pm").addClass("title-selected"); } }; function _cdc(_ce3){ var opts=$(_ce3).data("timepicker").options; var _ce4=$(_ce3).combo("panel"); var _ce5=_ce4.find(".timepicker-panel"); var _ce6=$("
                                    "+"
                                    ").appendTo(_ce5); var _ce7=_ce6.outerWidth(); var _ce8=_ce6.outerHeight(); var size=Math.min(_ce7,_ce8)-20; var _ce9=size/2; _ce7=size; _ce8=size; var _cea=opts.selectingType=="hour"?opts.selectingHour:opts.selectingMinute; var _ceb=_cea/(opts.selectingType=="hour"?12:60)*360; _ceb=parseFloat(_ceb).toFixed(4); var _cec={transform:"rotate("+_ceb+"deg)"}; var _ced={width:_ce7+"px",height:_ce8+"px",marginLeft:-_ce7/2+"px",marginTop:-_ce8/2+"px"}; var _cee=[]; _cee.push("
                                    "); _cee.push("
                                    "); _cee.push("
                                    "); _cee.push("
                                    "); _cee.push("
                                    "); var data=_cef(); for(var i=0;i"+_cf0+"
                                    "); } _cee.push(""); _ce6.html(_cee.join("")); _ce6.find(".clock").css(_ced); _ce6.find(".hand").css(_cec); function _cef(){ var data=[]; if(opts.selectingType=="hour"){ for(var i=0;i<12;i++){ data.push(String(i)); } data[0]="12"; }else{ for(var i=0;i<60;i+=5){ data.push(i<10?"0"+i:String(i)); } data[0]="00"; } return data; }; }; $.fn.timepicker=function(_cf2,_cf3){ if(typeof _cf2=="string"){ var _cf4=$.fn.timepicker.methods[_cf2]; if(_cf4){ return _cf4(this,_cf3); }else{ return this.combo(_cf2,_cf3); } } _cf2=_cf2||{}; return this.each(function(){ var _cf5=$.data(this,"timepicker"); if(_cf5){ $.extend(_cf5.options,_cf2); }else{ $.data(this,"timepicker",{options:$.extend({},$.fn.timepicker.defaults,$.fn.timepicker.parseOptions(this),_cf2)}); } _cc2(this); }); }; $.fn.timepicker.methods={options:function(jq){ var _cf6=jq.combo("options"); return $.extend($.data(jq[0],"timepicker").options,{width:_cf6.width,height:_cf6.height,originalValue:_cf6.originalValue,disabled:_cf6.disabled,readonly:_cf6.readonly}); },initValue:function(jq,_cf7){ return jq.each(function(){ var opts=$(this).timepicker("options"); opts.value=_cf7; _cd0(this,_cf7); if(_cf7){ opts.value=_cd1(this); $(this).combo("initValue",opts.value).combo("setText",opts.value); } }); },setValue:function(jq,_cf8){ return jq.each(function(){ _ccd(this,_cf8); }); },reset:function(jq){ return jq.each(function(){ var opts=$(this).timepicker("options"); $(this).timepicker("setValue",opts.originalValue); }); }}; $.fn.timepicker.parseOptions=function(_cf9){ return $.extend({},$.fn.combo.parseOptions(_cf9),$.parser.parseOptions(_cf9,[])); }; $.fn.timepicker.defaults=$.extend({},$.fn.combo.defaults,{closeText:"Close",okText:"Ok",buttons:[{text:function(_cfa){ return $(_cfa).timepicker("options").okText; },handler:function(_cfb){ $(_cfb).timepicker("setValue",_cd1(_cfb)); $(this).closest("div.combo-panel").panel("close"); }},{text:function(_cfc){ return $(_cfc).timepicker("options").closeText; },handler:function(_cfd){ $(this).closest("div.combo-panel").panel("close"); }}],editable:false,ampm:["am","pm"],value:"",selectingHour:12,selectingMinute:0,selectingType:"hour"}); })(jQuery); (function($){ function init(_cfe){ var _cff=$("
                                    "+"
                                    "+""+""+"
                                    "+"
                                    "+"
                                    "+"
                                    "+""+"
                                    ").insertAfter(_cfe); var t=$(_cfe); t.addClass("slider-f").hide(); var name=t.attr("name"); if(name){ _cff.find("input.slider-value").attr("name",name); t.removeAttr("name").attr("sliderName",name); } _cff._bind("_resize",function(e,_d00){ if($(this).hasClass("easyui-fluid")||_d00){ _d01(_cfe); } return false; }); return _cff; }; function _d01(_d02,_d03){ var _d04=$.data(_d02,"slider"); var opts=_d04.options; var _d05=_d04.slider; if(_d03){ if(_d03.width){ opts.width=_d03.width; } if(_d03.height){ opts.height=_d03.height; } } _d05._size(opts); if(opts.mode=="h"){ _d05.css("height",""); _d05.children("div").css("height",""); }else{ _d05.css("width",""); _d05.children("div").css("width",""); _d05.children("div.slider-rule,div.slider-rulelabel,div.slider-inner")._outerHeight(_d05._outerHeight()); } _d06(_d02); }; function _d07(_d08){ var _d09=$.data(_d08,"slider"); var opts=_d09.options; var _d0a=_d09.slider; var aa=opts.mode=="h"?opts.rule:opts.rule.slice(0).reverse(); if(opts.reversed){ aa=aa.slice(0).reverse(); } _d0b(aa); function _d0b(aa){ var rule=_d0a.find("div.slider-rule"); var _d0c=_d0a.find("div.slider-rulelabel"); rule.empty(); _d0c.empty(); for(var i=0;i").appendTo(rule); span.css((opts.mode=="h"?"left":"top"),_d0d); if(aa[i]!="|"){ span=$("").appendTo(_d0c); span.html(aa[i]); if(opts.mode=="h"){ span.css({left:_d0d,marginLeft:-Math.round(span.outerWidth()/2)}); }else{ span.css({top:_d0d,marginTop:-Math.round(span.outerHeight()/2)}); } } } }; }; function _d0e(_d0f){ var _d10=$.data(_d0f,"slider"); var opts=_d10.options; var _d11=_d10.slider; _d11.removeClass("slider-h slider-v slider-disabled"); _d11.addClass(opts.mode=="h"?"slider-h":"slider-v"); _d11.addClass(opts.disabled?"slider-disabled":""); var _d12=_d11.find(".slider-inner"); _d12.html(""+""); if(opts.range){ _d12.append(""+""); } _d11.find("a.slider-handle").draggable({axis:opts.mode,cursor:"pointer",disabled:opts.disabled,onDrag:function(e){ var left=e.data.left; var _d13=_d11.width(); if(opts.mode!="h"){ left=e.data.top; _d13=_d11.height(); } if(left<0||left>_d13){ return false; }else{ _d14(left,this); return false; } },onStartDrag:function(){ _d10.isDragging=true; opts.onSlideStart.call(_d0f,opts.value); },onStopDrag:function(e){ _d14(opts.mode=="h"?e.data.left:e.data.top,this); opts.onSlideEnd.call(_d0f,opts.value); opts.onComplete.call(_d0f,opts.value); _d10.isDragging=false; }}); _d11.find("div.slider-inner")._unbind(".slider")._bind("mousedown.slider",function(e){ if(_d10.isDragging||opts.disabled){ return; } var pos=$(this).offset(); _d14(opts.mode=="h"?(e.pageX-pos.left):(e.pageY-pos.top)); opts.onComplete.call(_d0f,opts.value); }); function _d15(_d16){ var dd=String(opts.step).split("."); var dlen=dd.length>1?dd[1].length:0; return parseFloat(_d16.toFixed(dlen)); }; function _d14(pos,_d17){ var _d18=_d19(_d0f,pos); var s=Math.abs(_d18%opts.step); if(s0; if(_d18<=v2&&_d1a){ v1=_d18; }else{ if(_d18>=v1&&(!_d1a)){ v2=_d18; } } }else{ if(_d18v2){ v2=_d18; }else{ _d18opts.max){ _d22=opts.max; } var _d23=$("").appendTo(_d1f); _d23.attr("name",name); _d23.val(_d22); _d21.push(_d22); var _d24=_d1f.find(".slider-handle:eq("+i+")"); var tip=_d24.next(); var pos=_d25(_d1c,_d22); if(opts.showTip){ tip.show(); tip.html(opts.tipFormatter.call(_d1c,_d22)); }else{ tip.hide(); } if(opts.mode=="h"){ var _d26="left:"+pos+"px;"; _d24.attr("style",_d26); tip.attr("style",_d26+"margin-left:"+(-Math.round(tip.outerWidth()/2))+"px"); }else{ var _d26="top:"+pos+"px;"; _d24.attr("style",_d26); tip.attr("style",_d26+"margin-left:"+(-Math.round(tip.outerWidth()))+"px"); } } opts.value=opts.range?_d21:_d21[0]; $(_d1c).val(opts.range?_d21.join(opts.separator):_d21[0]); if(_d20.join(",")!=_d21.join(",")){ opts.onChange.call(_d1c,opts.value,(opts.range?_d20:_d20[0])); } }; function _d06(_d27){ var opts=$.data(_d27,"slider").options; var fn=opts.onChange; opts.onChange=function(){ }; _d1b(_d27,opts.value); opts.onChange=fn; }; function _d25(_d28,_d29){ var _d2a=$.data(_d28,"slider"); var opts=_d2a.options; var _d2b=_d2a.slider; var size=opts.mode=="h"?_d2b.width():_d2b.height(); var pos=opts.converter.toPosition.call(_d28,_d29,size); if(opts.mode=="v"){ pos=_d2b.height()-pos; } if(opts.reversed){ pos=size-pos; } return pos; }; function _d19(_d2c,pos){ var _d2d=$.data(_d2c,"slider"); var opts=_d2d.options; var _d2e=_d2d.slider; var size=opts.mode=="h"?_d2e.width():_d2e.height(); var pos=opts.mode=="h"?(opts.reversed?(size-pos):pos):(opts.reversed?pos:(size-pos)); var _d2f=opts.converter.toValue.call(_d2c,pos,size); return _d2f; }; $.fn.slider=function(_d30,_d31){ if(typeof _d30=="string"){ return $.fn.slider.methods[_d30](this,_d31); } _d30=_d30||{}; return this.each(function(){ var _d32=$.data(this,"slider"); if(_d32){ $.extend(_d32.options,_d30); }else{ _d32=$.data(this,"slider",{options:$.extend({},$.fn.slider.defaults,$.fn.slider.parseOptions(this),_d30),slider:init(this)}); $(this)._propAttr("disabled",false); } var opts=_d32.options; opts.min=parseFloat(opts.min); opts.max=parseFloat(opts.max); if(opts.range){ if(!$.isArray(opts.value)){ opts.value=$.map(String(opts.value).split(opts.separator),function(v){ return parseFloat(v); }); } if(opts.value.length<2){ opts.value.push(opts.max); } }else{ opts.value=parseFloat(opts.value); } opts.step=parseFloat(opts.step); opts.originalValue=opts.value; _d0e(this); _d07(this); _d01(this); }); }; $.fn.slider.methods={options:function(jq){ return $.data(jq[0],"slider").options; },destroy:function(jq){ return jq.each(function(){ $.data(this,"slider").slider.remove(); $(this).remove(); }); },resize:function(jq,_d33){ return jq.each(function(){ _d01(this,_d33); }); },getValue:function(jq){ return jq.slider("options").value; },getValues:function(jq){ return jq.slider("options").value; },setValue:function(jq,_d34){ return jq.each(function(){ _d1b(this,[_d34]); }); },setValues:function(jq,_d35){ return jq.each(function(){ _d1b(this,_d35); }); },clear:function(jq){ return jq.each(function(){ var opts=$(this).slider("options"); _d1b(this,opts.range?[opts.min,opts.max]:[opts.min]); }); },reset:function(jq){ return jq.each(function(){ var opts=$(this).slider("options"); $(this).slider(opts.range?"setValues":"setValue",opts.originalValue); }); },enable:function(jq){ return jq.each(function(){ $.data(this,"slider").options.disabled=false; _d0e(this); }); },disable:function(jq){ return jq.each(function(){ $.data(this,"slider").options.disabled=true; _d0e(this); }); }}; $.fn.slider.parseOptions=function(_d36){ var t=$(_d36); return $.extend({},$.parser.parseOptions(_d36,["width","height","mode",{reversed:"boolean",showTip:"boolean",range:"boolean",min:"number",max:"number",step:"number"}]),{value:(t.val()||undefined),disabled:(t.attr("disabled")?true:undefined),rule:(t.attr("rule")?eval(t.attr("rule")):undefined)}); }; $.fn.slider.defaults={width:"auto",height:"auto",mode:"h",reversed:false,showTip:false,disabled:false,range:false,value:0,separator:",",min:0,max:100,step:1,rule:[],tipFormatter:function(_d37){ return _d37; },converter:{toPosition:function(_d38,size){ var opts=$(this).slider("options"); var p=(_d38-opts.min)/(opts.max-opts.min)*size; return p; },toValue:function(pos,size){ var opts=$(this).slider("options"); var v=opts.min+(opts.max-opts.min)*(pos/size); return v; }},onChange:function(_d39,_d3a){ },onSlideStart:function(_d3b){ },onSlideEnd:function(_d3c){ },onComplete:function(_d3d){ }}; })(jQuery); ================================================ FILE: src/main/resources/static/assets/vendor/jquery-easyui-1.9.7/jquery.easyui.mobile.js ================================================ /** * EasyUI for jQuery 1.9.7 * * Copyright (c) 2009-2020 www.jeasyui.com. All rights reserved. * * Licensed under the freeware license: http://www.jeasyui.com/license_freeware.php * To use it on other terms please contact us: info@jeasyui.com * */ (function($){ $.fn.navpanel=function(_1,_2){ if(typeof _1=="string"){ var _3=$.fn.navpanel.methods[_1]; return _3?_3(this,_2):this.panel(_1,_2); }else{ _1=_1||{}; return this.each(function(){ var _4=$.data(this,"navpanel"); if(_4){ $.extend(_4.options,_1); }else{ _4=$.data(this,"navpanel",{options:$.extend({},$.fn.navpanel.defaults,$.fn.navpanel.parseOptions(this),_1)}); } $(this).panel(_4.options); }); } }; $.fn.navpanel.methods={options:function(jq){ return $.data(jq[0],"navpanel").options; }}; $.fn.navpanel.parseOptions=function(_5){ return $.extend({},$.fn.panel.parseOptions(_5),$.parser.parseOptions(_5,[])); }; $.fn.navpanel.defaults=$.extend({},$.fn.panel.defaults,{fit:true,border:false,cls:"navpanel"}); $.parser.plugins.push("navpanel"); })(jQuery); (function($){ $(function(){ $.mobile.init(); }); $.mobile={defaults:{animation:"slide",direction:"left",reverseDirections:{up:"down",down:"up",left:"right",right:"left"}},panels:[],init:function(_6){ $.mobile.panels=[]; var _7=$(_6||"body").children(".navpanel:visible"); if(_7.length){ _7.not(":first").children(".panel-body").navpanel("close"); var p=_7.eq(0).children(".panel-body"); $.mobile.panels.push({panel:p,animation:$.mobile.defaults.animation,direction:$.mobile.defaults.direction}); } $(document)._unbind(".mobile")._bind("click.mobile",function(e){ var a=$(e.target).closest("a"); if(a.length){ var _8=$.parser.parseOptions(a[0],["animation","direction",{back:"boolean"}]); if(_8.back){ $.mobile.back(); e.preventDefault(); }else{ var _9=$.trim(a.attr("href")); if(/^#/.test(_9)){ var to=$(_9); if(to.length&&to.hasClass("panel-body")){ $.mobile.go(to,_8.animation,_8.direction); e.preventDefault(); } } } } }); $(window)._unbind(".mobile")._bind("hashchange.mobile",function(){ var _a=$.mobile.panels.length; if(_a>1){ var _b=location.hash; var p=$.mobile.panels[_a-2]; if(!_b||_b=="#&"+p.panel.attr("id")){ $.mobile._back(); } } }); },nav:function(_c,to,_d,_e){ if(window.WebKitAnimationEvent){ _d=_d!=undefined?_d:$.mobile.defaults.animation; _e=_e!=undefined?_e:$.mobile.defaults.direction; var _f="m-"+_d+(_e?"-"+_e:""); var p1=$(_c).panel("open").panel("resize").panel("panel"); var p2=$(to).panel("open").panel("resize").panel("panel"); p1.add(p2)._bind("webkitAnimationEnd",function(){ $(this)._unbind("webkitAnimationEnd"); var p=$(this).children(".panel-body"); if($(this).hasClass("m-in")){ p.panel("open").panel("resize"); }else{ p.panel("close"); } $(this).removeClass(_f+" m-in m-out"); }); p2.addClass(_f+" m-in"); p1.addClass(_f+" m-out"); }else{ $(to).panel("open").panel("resize"); $(_c).panel("close"); } },_go:function(_10,_11,_12){ _11=_11!=undefined?_11:$.mobile.defaults.animation; _12=_12!=undefined?_12:$.mobile.defaults.direction; var _13=$.mobile.panels[$.mobile.panels.length-1].panel; var to=$(_10); if(_13[0]!=to[0]){ $.mobile.nav(_13,to,_11,_12); $.mobile.panels.push({panel:to,animation:_11,direction:_12}); } },_back:function(){ if($.mobile.panels.length<2){ return; } var p1=$.mobile.panels.pop(); var p2=$.mobile.panels[$.mobile.panels.length-1]; var _14=p1.animation; var _15=$.mobile.defaults.reverseDirections[p1.direction]||""; $.mobile.nav(p1.panel,p2.panel,_14,_15); },go:function(_16,_17,_18){ _17=_17!=undefined?_17:$.mobile.defaults.animation; _18=_18!=undefined?_18:$.mobile.defaults.direction; location.hash="#&"+$(_16).attr("id"); $.mobile._go(_16,_17,_18); },back:function(){ history.go(-1); }}; $.map(["validatebox","textbox","passwordbox","filebox","searchbox","combo","combobox","combogrid","combotree","combotreegrid","datebox","datetimebox","numberbox","spinner","numberspinner","timespinner","datetimespinner"],function(_19){ if($.fn[_19]){ $.extend($.fn[_19].defaults,{iconWidth:28,tipPosition:"bottom"}); } }); $.map(["spinner","numberspinner","timespinner","datetimespinner"],function(_1a){ if($.fn[_1a]){ $.extend($.fn[_1a].defaults,{iconWidth:56,spinAlign:"horizontal"}); } }); if($.fn.menu){ $.extend($.fn.menu.defaults,{itemHeight:30,noline:true}); } })(jQuery); ================================================ FILE: src/main/resources/static/assets/vendor/jquery-easyui-1.9.7/jquery.min.js ================================================ /*! jQuery v3.3.1 | (c) JS Foundation and other contributors | jquery.org/license */ !function(e,t){"use strict";"object"==typeof module&&"object"==typeof module.exports?module.exports=e.document?t(e,!0):function(e){if(!e.document)throw new Error("jQuery requires a window with a document");return t(e)}:t(e)}("undefined"!=typeof window?window:this,function(e,t){"use strict";var n=[],r=e.document,i=Object.getPrototypeOf,o=n.slice,a=n.concat,s=n.push,u=n.indexOf,l={},c=l.toString,f=l.hasOwnProperty,p=f.toString,d=p.call(Object),h={},g=function e(t){return"function"==typeof t&&"number"!=typeof t.nodeType},y=function e(t){return null!=t&&t===t.window},v={type:!0,src:!0,noModule:!0};function m(e,t,n){var i,o=(t=t||r).createElement("script");if(o.text=e,n)for(i in v)n[i]&&(o[i]=n[i]);t.head.appendChild(o).parentNode.removeChild(o)}function x(e){return null==e?e+"":"object"==typeof e||"function"==typeof e?l[c.call(e)]||"object":typeof e}var b="3.3.1",w=function(e,t){return new w.fn.init(e,t)},T=/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g;w.fn=w.prototype={jquery:"3.3.1",constructor:w,length:0,toArray:function(){return o.call(this)},get:function(e){return null==e?o.call(this):e<0?this[e+this.length]:this[e]},pushStack:function(e){var t=w.merge(this.constructor(),e);return t.prevObject=this,t},each:function(e){return w.each(this,e)},map:function(e){return this.pushStack(w.map(this,function(t,n){return e.call(t,n,t)}))},slice:function(){return this.pushStack(o.apply(this,arguments))},first:function(){return this.eq(0)},last:function(){return this.eq(-1)},eq:function(e){var t=this.length,n=+e+(e<0?t:0);return this.pushStack(n>=0&&n0&&t-1 in e)}var E=function(e){var t,n,r,i,o,a,s,u,l,c,f,p,d,h,g,y,v,m,x,b="sizzle"+1*new Date,w=e.document,T=0,C=0,E=ae(),k=ae(),S=ae(),D=function(e,t){return e===t&&(f=!0),0},N={}.hasOwnProperty,A=[],j=A.pop,q=A.push,L=A.push,H=A.slice,O=function(e,t){for(var n=0,r=e.length;n+~]|"+M+")"+M+"*"),z=new RegExp("="+M+"*([^\\]'\"]*?)"+M+"*\\]","g"),X=new RegExp(W),U=new RegExp("^"+R+"$"),V={ID:new RegExp("^#("+R+")"),CLASS:new RegExp("^\\.("+R+")"),TAG:new RegExp("^("+R+"|[*])"),ATTR:new RegExp("^"+I),PSEUDO:new RegExp("^"+W),CHILD:new RegExp("^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\("+M+"*(even|odd|(([+-]|)(\\d*)n|)"+M+"*(?:([+-]|)"+M+"*(\\d+)|))"+M+"*\\)|)","i"),bool:new RegExp("^(?:"+P+")$","i"),needsContext:new RegExp("^"+M+"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\("+M+"*((?:-\\d)?\\d*)"+M+"*\\)|)(?=[^-]|$)","i")},G=/^(?:input|select|textarea|button)$/i,Y=/^h\d$/i,Q=/^[^{]+\{\s*\[native \w/,J=/^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/,K=/[+~]/,Z=new RegExp("\\\\([\\da-f]{1,6}"+M+"?|("+M+")|.)","ig"),ee=function(e,t,n){var r="0x"+t-65536;return r!==r||n?t:r<0?String.fromCharCode(r+65536):String.fromCharCode(r>>10|55296,1023&r|56320)},te=/([\0-\x1f\x7f]|^-?\d)|^-$|[^\0-\x1f\x7f-\uFFFF\w-]/g,ne=function(e,t){return t?"\0"===e?"\ufffd":e.slice(0,-1)+"\\"+e.charCodeAt(e.length-1).toString(16)+" ":"\\"+e},re=function(){p()},ie=me(function(e){return!0===e.disabled&&("form"in e||"label"in e)},{dir:"parentNode",next:"legend"});try{L.apply(A=H.call(w.childNodes),w.childNodes),A[w.childNodes.length].nodeType}catch(e){L={apply:A.length?function(e,t){q.apply(e,H.call(t))}:function(e,t){var n=e.length,r=0;while(e[n++]=t[r++]);e.length=n-1}}}function oe(e,t,r,i){var o,s,l,c,f,h,v,m=t&&t.ownerDocument,T=t?t.nodeType:9;if(r=r||[],"string"!=typeof e||!e||1!==T&&9!==T&&11!==T)return r;if(!i&&((t?t.ownerDocument||t:w)!==d&&p(t),t=t||d,g)){if(11!==T&&(f=J.exec(e)))if(o=f[1]){if(9===T){if(!(l=t.getElementById(o)))return r;if(l.id===o)return r.push(l),r}else if(m&&(l=m.getElementById(o))&&x(t,l)&&l.id===o)return r.push(l),r}else{if(f[2])return L.apply(r,t.getElementsByTagName(e)),r;if((o=f[3])&&n.getElementsByClassName&&t.getElementsByClassName)return L.apply(r,t.getElementsByClassName(o)),r}if(n.qsa&&!S[e+" "]&&(!y||!y.test(e))){if(1!==T)m=t,v=e;else if("object"!==t.nodeName.toLowerCase()){(c=t.getAttribute("id"))?c=c.replace(te,ne):t.setAttribute("id",c=b),s=(h=a(e)).length;while(s--)h[s]="#"+c+" "+ve(h[s]);v=h.join(","),m=K.test(e)&&ge(t.parentNode)||t}if(v)try{return L.apply(r,m.querySelectorAll(v)),r}catch(e){}finally{c===b&&t.removeAttribute("id")}}}return u(e.replace(B,"$1"),t,r,i)}function ae(){var e=[];function t(n,i){return e.push(n+" ")>r.cacheLength&&delete t[e.shift()],t[n+" "]=i}return t}function se(e){return e[b]=!0,e}function ue(e){var t=d.createElement("fieldset");try{return!!e(t)}catch(e){return!1}finally{t.parentNode&&t.parentNode.removeChild(t),t=null}}function le(e,t){var n=e.split("|"),i=n.length;while(i--)r.attrHandle[n[i]]=t}function ce(e,t){var n=t&&e,r=n&&1===e.nodeType&&1===t.nodeType&&e.sourceIndex-t.sourceIndex;if(r)return r;if(n)while(n=n.nextSibling)if(n===t)return-1;return e?1:-1}function fe(e){return function(t){return"input"===t.nodeName.toLowerCase()&&t.type===e}}function pe(e){return function(t){var n=t.nodeName.toLowerCase();return("input"===n||"button"===n)&&t.type===e}}function de(e){return function(t){return"form"in t?t.parentNode&&!1===t.disabled?"label"in t?"label"in t.parentNode?t.parentNode.disabled===e:t.disabled===e:t.isDisabled===e||t.isDisabled!==!e&&ie(t)===e:t.disabled===e:"label"in t&&t.disabled===e}}function he(e){return se(function(t){return t=+t,se(function(n,r){var i,o=e([],n.length,t),a=o.length;while(a--)n[i=o[a]]&&(n[i]=!(r[i]=n[i]))})})}function ge(e){return e&&"undefined"!=typeof e.getElementsByTagName&&e}n=oe.support={},o=oe.isXML=function(e){var t=e&&(e.ownerDocument||e).documentElement;return!!t&&"HTML"!==t.nodeName},p=oe.setDocument=function(e){var t,i,a=e?e.ownerDocument||e:w;return a!==d&&9===a.nodeType&&a.documentElement?(d=a,h=d.documentElement,g=!o(d),w!==d&&(i=d.defaultView)&&i.top!==i&&(i.addEventListener?i.addEventListener("unload",re,!1):i.attachEvent&&i.attachEvent("onunload",re)),n.attributes=ue(function(e){return e.className="i",!e.getAttribute("className")}),n.getElementsByTagName=ue(function(e){return e.appendChild(d.createComment("")),!e.getElementsByTagName("*").length}),n.getElementsByClassName=Q.test(d.getElementsByClassName),n.getById=ue(function(e){return h.appendChild(e).id=b,!d.getElementsByName||!d.getElementsByName(b).length}),n.getById?(r.filter.ID=function(e){var t=e.replace(Z,ee);return function(e){return e.getAttribute("id")===t}},r.find.ID=function(e,t){if("undefined"!=typeof t.getElementById&&g){var n=t.getElementById(e);return n?[n]:[]}}):(r.filter.ID=function(e){var t=e.replace(Z,ee);return function(e){var n="undefined"!=typeof e.getAttributeNode&&e.getAttributeNode("id");return n&&n.value===t}},r.find.ID=function(e,t){if("undefined"!=typeof t.getElementById&&g){var n,r,i,o=t.getElementById(e);if(o){if((n=o.getAttributeNode("id"))&&n.value===e)return[o];i=t.getElementsByName(e),r=0;while(o=i[r++])if((n=o.getAttributeNode("id"))&&n.value===e)return[o]}return[]}}),r.find.TAG=n.getElementsByTagName?function(e,t){return"undefined"!=typeof t.getElementsByTagName?t.getElementsByTagName(e):n.qsa?t.querySelectorAll(e):void 0}:function(e,t){var n,r=[],i=0,o=t.getElementsByTagName(e);if("*"===e){while(n=o[i++])1===n.nodeType&&r.push(n);return r}return o},r.find.CLASS=n.getElementsByClassName&&function(e,t){if("undefined"!=typeof t.getElementsByClassName&&g)return t.getElementsByClassName(e)},v=[],y=[],(n.qsa=Q.test(d.querySelectorAll))&&(ue(function(e){h.appendChild(e).innerHTML="",e.querySelectorAll("[msallowcapture^='']").length&&y.push("[*^$]="+M+"*(?:''|\"\")"),e.querySelectorAll("[selected]").length||y.push("\\["+M+"*(?:value|"+P+")"),e.querySelectorAll("[id~="+b+"-]").length||y.push("~="),e.querySelectorAll(":checked").length||y.push(":checked"),e.querySelectorAll("a#"+b+"+*").length||y.push(".#.+[+~]")}),ue(function(e){e.innerHTML="";var t=d.createElement("input");t.setAttribute("type","hidden"),e.appendChild(t).setAttribute("name","D"),e.querySelectorAll("[name=d]").length&&y.push("name"+M+"*[*^$|!~]?="),2!==e.querySelectorAll(":enabled").length&&y.push(":enabled",":disabled"),h.appendChild(e).disabled=!0,2!==e.querySelectorAll(":disabled").length&&y.push(":enabled",":disabled"),e.querySelectorAll("*,:x"),y.push(",.*:")})),(n.matchesSelector=Q.test(m=h.matches||h.webkitMatchesSelector||h.mozMatchesSelector||h.oMatchesSelector||h.msMatchesSelector))&&ue(function(e){n.disconnectedMatch=m.call(e,"*"),m.call(e,"[s!='']:x"),v.push("!=",W)}),y=y.length&&new RegExp(y.join("|")),v=v.length&&new RegExp(v.join("|")),t=Q.test(h.compareDocumentPosition),x=t||Q.test(h.contains)?function(e,t){var n=9===e.nodeType?e.documentElement:e,r=t&&t.parentNode;return e===r||!(!r||1!==r.nodeType||!(n.contains?n.contains(r):e.compareDocumentPosition&&16&e.compareDocumentPosition(r)))}:function(e,t){if(t)while(t=t.parentNode)if(t===e)return!0;return!1},D=t?function(e,t){if(e===t)return f=!0,0;var r=!e.compareDocumentPosition-!t.compareDocumentPosition;return r||(1&(r=(e.ownerDocument||e)===(t.ownerDocument||t)?e.compareDocumentPosition(t):1)||!n.sortDetached&&t.compareDocumentPosition(e)===r?e===d||e.ownerDocument===w&&x(w,e)?-1:t===d||t.ownerDocument===w&&x(w,t)?1:c?O(c,e)-O(c,t):0:4&r?-1:1)}:function(e,t){if(e===t)return f=!0,0;var n,r=0,i=e.parentNode,o=t.parentNode,a=[e],s=[t];if(!i||!o)return e===d?-1:t===d?1:i?-1:o?1:c?O(c,e)-O(c,t):0;if(i===o)return ce(e,t);n=e;while(n=n.parentNode)a.unshift(n);n=t;while(n=n.parentNode)s.unshift(n);while(a[r]===s[r])r++;return r?ce(a[r],s[r]):a[r]===w?-1:s[r]===w?1:0},d):d},oe.matches=function(e,t){return oe(e,null,null,t)},oe.matchesSelector=function(e,t){if((e.ownerDocument||e)!==d&&p(e),t=t.replace(z,"='$1']"),n.matchesSelector&&g&&!S[t+" "]&&(!v||!v.test(t))&&(!y||!y.test(t)))try{var r=m.call(e,t);if(r||n.disconnectedMatch||e.document&&11!==e.document.nodeType)return r}catch(e){}return oe(t,d,null,[e]).length>0},oe.contains=function(e,t){return(e.ownerDocument||e)!==d&&p(e),x(e,t)},oe.attr=function(e,t){(e.ownerDocument||e)!==d&&p(e);var i=r.attrHandle[t.toLowerCase()],o=i&&N.call(r.attrHandle,t.toLowerCase())?i(e,t,!g):void 0;return void 0!==o?o:n.attributes||!g?e.getAttribute(t):(o=e.getAttributeNode(t))&&o.specified?o.value:null},oe.escape=function(e){return(e+"").replace(te,ne)},oe.error=function(e){throw new Error("Syntax error, unrecognized expression: "+e)},oe.uniqueSort=function(e){var t,r=[],i=0,o=0;if(f=!n.detectDuplicates,c=!n.sortStable&&e.slice(0),e.sort(D),f){while(t=e[o++])t===e[o]&&(i=r.push(o));while(i--)e.splice(r[i],1)}return c=null,e},i=oe.getText=function(e){var t,n="",r=0,o=e.nodeType;if(o){if(1===o||9===o||11===o){if("string"==typeof e.textContent)return e.textContent;for(e=e.firstChild;e;e=e.nextSibling)n+=i(e)}else if(3===o||4===o)return e.nodeValue}else while(t=e[r++])n+=i(t);return n},(r=oe.selectors={cacheLength:50,createPseudo:se,match:V,attrHandle:{},find:{},relative:{">":{dir:"parentNode",first:!0}," ":{dir:"parentNode"},"+":{dir:"previousSibling",first:!0},"~":{dir:"previousSibling"}},preFilter:{ATTR:function(e){return e[1]=e[1].replace(Z,ee),e[3]=(e[3]||e[4]||e[5]||"").replace(Z,ee),"~="===e[2]&&(e[3]=" "+e[3]+" "),e.slice(0,4)},CHILD:function(e){return e[1]=e[1].toLowerCase(),"nth"===e[1].slice(0,3)?(e[3]||oe.error(e[0]),e[4]=+(e[4]?e[5]+(e[6]||1):2*("even"===e[3]||"odd"===e[3])),e[5]=+(e[7]+e[8]||"odd"===e[3])):e[3]&&oe.error(e[0]),e},PSEUDO:function(e){var t,n=!e[6]&&e[2];return V.CHILD.test(e[0])?null:(e[3]?e[2]=e[4]||e[5]||"":n&&X.test(n)&&(t=a(n,!0))&&(t=n.indexOf(")",n.length-t)-n.length)&&(e[0]=e[0].slice(0,t),e[2]=n.slice(0,t)),e.slice(0,3))}},filter:{TAG:function(e){var t=e.replace(Z,ee).toLowerCase();return"*"===e?function(){return!0}:function(e){return e.nodeName&&e.nodeName.toLowerCase()===t}},CLASS:function(e){var t=E[e+" "];return t||(t=new RegExp("(^|"+M+")"+e+"("+M+"|$)"))&&E(e,function(e){return t.test("string"==typeof e.className&&e.className||"undefined"!=typeof e.getAttribute&&e.getAttribute("class")||"")})},ATTR:function(e,t,n){return function(r){var i=oe.attr(r,e);return null==i?"!="===t:!t||(i+="","="===t?i===n:"!="===t?i!==n:"^="===t?n&&0===i.indexOf(n):"*="===t?n&&i.indexOf(n)>-1:"$="===t?n&&i.slice(-n.length)===n:"~="===t?(" "+i.replace($," ")+" ").indexOf(n)>-1:"|="===t&&(i===n||i.slice(0,n.length+1)===n+"-"))}},CHILD:function(e,t,n,r,i){var o="nth"!==e.slice(0,3),a="last"!==e.slice(-4),s="of-type"===t;return 1===r&&0===i?function(e){return!!e.parentNode}:function(t,n,u){var l,c,f,p,d,h,g=o!==a?"nextSibling":"previousSibling",y=t.parentNode,v=s&&t.nodeName.toLowerCase(),m=!u&&!s,x=!1;if(y){if(o){while(g){p=t;while(p=p[g])if(s?p.nodeName.toLowerCase()===v:1===p.nodeType)return!1;h=g="only"===e&&!h&&"nextSibling"}return!0}if(h=[a?y.firstChild:y.lastChild],a&&m){x=(d=(l=(c=(f=(p=y)[b]||(p[b]={}))[p.uniqueID]||(f[p.uniqueID]={}))[e]||[])[0]===T&&l[1])&&l[2],p=d&&y.childNodes[d];while(p=++d&&p&&p[g]||(x=d=0)||h.pop())if(1===p.nodeType&&++x&&p===t){c[e]=[T,d,x];break}}else if(m&&(x=d=(l=(c=(f=(p=t)[b]||(p[b]={}))[p.uniqueID]||(f[p.uniqueID]={}))[e]||[])[0]===T&&l[1]),!1===x)while(p=++d&&p&&p[g]||(x=d=0)||h.pop())if((s?p.nodeName.toLowerCase()===v:1===p.nodeType)&&++x&&(m&&((c=(f=p[b]||(p[b]={}))[p.uniqueID]||(f[p.uniqueID]={}))[e]=[T,x]),p===t))break;return(x-=i)===r||x%r==0&&x/r>=0}}},PSEUDO:function(e,t){var n,i=r.pseudos[e]||r.setFilters[e.toLowerCase()]||oe.error("unsupported pseudo: "+e);return i[b]?i(t):i.length>1?(n=[e,e,"",t],r.setFilters.hasOwnProperty(e.toLowerCase())?se(function(e,n){var r,o=i(e,t),a=o.length;while(a--)e[r=O(e,o[a])]=!(n[r]=o[a])}):function(e){return i(e,0,n)}):i}},pseudos:{not:se(function(e){var t=[],n=[],r=s(e.replace(B,"$1"));return r[b]?se(function(e,t,n,i){var o,a=r(e,null,i,[]),s=e.length;while(s--)(o=a[s])&&(e[s]=!(t[s]=o))}):function(e,i,o){return t[0]=e,r(t,null,o,n),t[0]=null,!n.pop()}}),has:se(function(e){return function(t){return oe(e,t).length>0}}),contains:se(function(e){return e=e.replace(Z,ee),function(t){return(t.textContent||t.innerText||i(t)).indexOf(e)>-1}}),lang:se(function(e){return U.test(e||"")||oe.error("unsupported lang: "+e),e=e.replace(Z,ee).toLowerCase(),function(t){var n;do{if(n=g?t.lang:t.getAttribute("xml:lang")||t.getAttribute("lang"))return(n=n.toLowerCase())===e||0===n.indexOf(e+"-")}while((t=t.parentNode)&&1===t.nodeType);return!1}}),target:function(t){var n=e.location&&e.location.hash;return n&&n.slice(1)===t.id},root:function(e){return e===h},focus:function(e){return e===d.activeElement&&(!d.hasFocus||d.hasFocus())&&!!(e.type||e.href||~e.tabIndex)},enabled:de(!1),disabled:de(!0),checked:function(e){var t=e.nodeName.toLowerCase();return"input"===t&&!!e.checked||"option"===t&&!!e.selected},selected:function(e){return e.parentNode&&e.parentNode.selectedIndex,!0===e.selected},empty:function(e){for(e=e.firstChild;e;e=e.nextSibling)if(e.nodeType<6)return!1;return!0},parent:function(e){return!r.pseudos.empty(e)},header:function(e){return Y.test(e.nodeName)},input:function(e){return G.test(e.nodeName)},button:function(e){var t=e.nodeName.toLowerCase();return"input"===t&&"button"===e.type||"button"===t},text:function(e){var t;return"input"===e.nodeName.toLowerCase()&&"text"===e.type&&(null==(t=e.getAttribute("type"))||"text"===t.toLowerCase())},first:he(function(){return[0]}),last:he(function(e,t){return[t-1]}),eq:he(function(e,t,n){return[n<0?n+t:n]}),even:he(function(e,t){for(var n=0;n=0;)e.push(r);return e}),gt:he(function(e,t,n){for(var r=n<0?n+t:n;++r1?function(t,n,r){var i=e.length;while(i--)if(!e[i](t,n,r))return!1;return!0}:e[0]}function be(e,t,n){for(var r=0,i=t.length;r-1&&(o[l]=!(a[l]=f))}}else v=we(v===a?v.splice(h,v.length):v),i?i(null,a,v,u):L.apply(a,v)})}function Ce(e){for(var t,n,i,o=e.length,a=r.relative[e[0].type],s=a||r.relative[" "],u=a?1:0,c=me(function(e){return e===t},s,!0),f=me(function(e){return O(t,e)>-1},s,!0),p=[function(e,n,r){var i=!a&&(r||n!==l)||((t=n).nodeType?c(e,n,r):f(e,n,r));return t=null,i}];u1&&xe(p),u>1&&ve(e.slice(0,u-1).concat({value:" "===e[u-2].type?"*":""})).replace(B,"$1"),n,u0,i=e.length>0,o=function(o,a,s,u,c){var f,h,y,v=0,m="0",x=o&&[],b=[],w=l,C=o||i&&r.find.TAG("*",c),E=T+=null==w?1:Math.random()||.1,k=C.length;for(c&&(l=a===d||a||c);m!==k&&null!=(f=C[m]);m++){if(i&&f){h=0,a||f.ownerDocument===d||(p(f),s=!g);while(y=e[h++])if(y(f,a||d,s)){u.push(f);break}c&&(T=E)}n&&((f=!y&&f)&&v--,o&&x.push(f))}if(v+=m,n&&m!==v){h=0;while(y=t[h++])y(x,b,a,s);if(o){if(v>0)while(m--)x[m]||b[m]||(b[m]=j.call(u));b=we(b)}L.apply(u,b),c&&!o&&b.length>0&&v+t.length>1&&oe.uniqueSort(u)}return c&&(T=E,l=w),x};return n?se(o):o}return s=oe.compile=function(e,t){var n,r=[],i=[],o=S[e+" "];if(!o){t||(t=a(e)),n=t.length;while(n--)(o=Ce(t[n]))[b]?r.push(o):i.push(o);(o=S(e,Ee(i,r))).selector=e}return o},u=oe.select=function(e,t,n,i){var o,u,l,c,f,p="function"==typeof e&&e,d=!i&&a(e=p.selector||e);if(n=n||[],1===d.length){if((u=d[0]=d[0].slice(0)).length>2&&"ID"===(l=u[0]).type&&9===t.nodeType&&g&&r.relative[u[1].type]){if(!(t=(r.find.ID(l.matches[0].replace(Z,ee),t)||[])[0]))return n;p&&(t=t.parentNode),e=e.slice(u.shift().value.length)}o=V.needsContext.test(e)?0:u.length;while(o--){if(l=u[o],r.relative[c=l.type])break;if((f=r.find[c])&&(i=f(l.matches[0].replace(Z,ee),K.test(u[0].type)&&ge(t.parentNode)||t))){if(u.splice(o,1),!(e=i.length&&ve(u)))return L.apply(n,i),n;break}}}return(p||s(e,d))(i,t,!g,n,!t||K.test(e)&&ge(t.parentNode)||t),n},n.sortStable=b.split("").sort(D).join("")===b,n.detectDuplicates=!!f,p(),n.sortDetached=ue(function(e){return 1&e.compareDocumentPosition(d.createElement("fieldset"))}),ue(function(e){return e.innerHTML="","#"===e.firstChild.getAttribute("href")})||le("type|href|height|width",function(e,t,n){if(!n)return e.getAttribute(t,"type"===t.toLowerCase()?1:2)}),n.attributes&&ue(function(e){return e.innerHTML="",e.firstChild.setAttribute("value",""),""===e.firstChild.getAttribute("value")})||le("value",function(e,t,n){if(!n&&"input"===e.nodeName.toLowerCase())return e.defaultValue}),ue(function(e){return null==e.getAttribute("disabled")})||le(P,function(e,t,n){var r;if(!n)return!0===e[t]?t.toLowerCase():(r=e.getAttributeNode(t))&&r.specified?r.value:null}),oe}(e);w.find=E,w.expr=E.selectors,w.expr[":"]=w.expr.pseudos,w.uniqueSort=w.unique=E.uniqueSort,w.text=E.getText,w.isXMLDoc=E.isXML,w.contains=E.contains,w.escapeSelector=E.escape;var k=function(e,t,n){var r=[],i=void 0!==n;while((e=e[t])&&9!==e.nodeType)if(1===e.nodeType){if(i&&w(e).is(n))break;r.push(e)}return r},S=function(e,t){for(var n=[];e;e=e.nextSibling)1===e.nodeType&&e!==t&&n.push(e);return n},D=w.expr.match.needsContext;function N(e,t){return e.nodeName&&e.nodeName.toLowerCase()===t.toLowerCase()}var A=/^<([a-z][^\/\0>:\x20\t\r\n\f]*)[\x20\t\r\n\f]*\/?>(?:<\/\1>|)$/i;function j(e,t,n){return g(t)?w.grep(e,function(e,r){return!!t.call(e,r,e)!==n}):t.nodeType?w.grep(e,function(e){return e===t!==n}):"string"!=typeof t?w.grep(e,function(e){return u.call(t,e)>-1!==n}):w.filter(t,e,n)}w.filter=function(e,t,n){var r=t[0];return n&&(e=":not("+e+")"),1===t.length&&1===r.nodeType?w.find.matchesSelector(r,e)?[r]:[]:w.find.matches(e,w.grep(t,function(e){return 1===e.nodeType}))},w.fn.extend({find:function(e){var t,n,r=this.length,i=this;if("string"!=typeof e)return this.pushStack(w(e).filter(function(){for(t=0;t1?w.uniqueSort(n):n},filter:function(e){return this.pushStack(j(this,e||[],!1))},not:function(e){return this.pushStack(j(this,e||[],!0))},is:function(e){return!!j(this,"string"==typeof e&&D.test(e)?w(e):e||[],!1).length}});var q,L=/^(?:\s*(<[\w\W]+>)[^>]*|#([\w-]+))$/;(w.fn.init=function(e,t,n){var i,o;if(!e)return this;if(n=n||q,"string"==typeof e){if(!(i="<"===e[0]&&">"===e[e.length-1]&&e.length>=3?[null,e,null]:L.exec(e))||!i[1]&&t)return!t||t.jquery?(t||n).find(e):this.constructor(t).find(e);if(i[1]){if(t=t instanceof w?t[0]:t,w.merge(this,w.parseHTML(i[1],t&&t.nodeType?t.ownerDocument||t:r,!0)),A.test(i[1])&&w.isPlainObject(t))for(i in t)g(this[i])?this[i](t[i]):this.attr(i,t[i]);return this}return(o=r.getElementById(i[2]))&&(this[0]=o,this.length=1),this}return e.nodeType?(this[0]=e,this.length=1,this):g(e)?void 0!==n.ready?n.ready(e):e(w):w.makeArray(e,this)}).prototype=w.fn,q=w(r);var H=/^(?:parents|prev(?:Until|All))/,O={children:!0,contents:!0,next:!0,prev:!0};w.fn.extend({has:function(e){var t=w(e,this),n=t.length;return this.filter(function(){for(var e=0;e-1:1===n.nodeType&&w.find.matchesSelector(n,e))){o.push(n);break}return this.pushStack(o.length>1?w.uniqueSort(o):o)},index:function(e){return e?"string"==typeof e?u.call(w(e),this[0]):u.call(this,e.jquery?e[0]:e):this[0]&&this[0].parentNode?this.first().prevAll().length:-1},add:function(e,t){return this.pushStack(w.uniqueSort(w.merge(this.get(),w(e,t))))},addBack:function(e){return this.add(null==e?this.prevObject:this.prevObject.filter(e))}});function P(e,t){while((e=e[t])&&1!==e.nodeType);return e}w.each({parent:function(e){var t=e.parentNode;return t&&11!==t.nodeType?t:null},parents:function(e){return k(e,"parentNode")},parentsUntil:function(e,t,n){return k(e,"parentNode",n)},next:function(e){return P(e,"nextSibling")},prev:function(e){return P(e,"previousSibling")},nextAll:function(e){return k(e,"nextSibling")},prevAll:function(e){return k(e,"previousSibling")},nextUntil:function(e,t,n){return k(e,"nextSibling",n)},prevUntil:function(e,t,n){return k(e,"previousSibling",n)},siblings:function(e){return S((e.parentNode||{}).firstChild,e)},children:function(e){return S(e.firstChild)},contents:function(e){return N(e,"iframe")?e.contentDocument:(N(e,"template")&&(e=e.content||e),w.merge([],e.childNodes))}},function(e,t){w.fn[e]=function(n,r){var i=w.map(this,t,n);return"Until"!==e.slice(-5)&&(r=n),r&&"string"==typeof r&&(i=w.filter(r,i)),this.length>1&&(O[e]||w.uniqueSort(i),H.test(e)&&i.reverse()),this.pushStack(i)}});var M=/[^\x20\t\r\n\f]+/g;function R(e){var t={};return w.each(e.match(M)||[],function(e,n){t[n]=!0}),t}w.Callbacks=function(e){e="string"==typeof e?R(e):w.extend({},e);var t,n,r,i,o=[],a=[],s=-1,u=function(){for(i=i||e.once,r=t=!0;a.length;s=-1){n=a.shift();while(++s-1)o.splice(n,1),n<=s&&s--}),this},has:function(e){return e?w.inArray(e,o)>-1:o.length>0},empty:function(){return o&&(o=[]),this},disable:function(){return i=a=[],o=n="",this},disabled:function(){return!o},lock:function(){return i=a=[],n||t||(o=n=""),this},locked:function(){return!!i},fireWith:function(e,n){return i||(n=[e,(n=n||[]).slice?n.slice():n],a.push(n),t||u()),this},fire:function(){return l.fireWith(this,arguments),this},fired:function(){return!!r}};return l};function I(e){return e}function W(e){throw e}function $(e,t,n,r){var i;try{e&&g(i=e.promise)?i.call(e).done(t).fail(n):e&&g(i=e.then)?i.call(e,t,n):t.apply(void 0,[e].slice(r))}catch(e){n.apply(void 0,[e])}}w.extend({Deferred:function(t){var n=[["notify","progress",w.Callbacks("memory"),w.Callbacks("memory"),2],["resolve","done",w.Callbacks("once memory"),w.Callbacks("once memory"),0,"resolved"],["reject","fail",w.Callbacks("once memory"),w.Callbacks("once memory"),1,"rejected"]],r="pending",i={state:function(){return r},always:function(){return o.done(arguments).fail(arguments),this},"catch":function(e){return i.then(null,e)},pipe:function(){var e=arguments;return w.Deferred(function(t){w.each(n,function(n,r){var i=g(e[r[4]])&&e[r[4]];o[r[1]](function(){var e=i&&i.apply(this,arguments);e&&g(e.promise)?e.promise().progress(t.notify).done(t.resolve).fail(t.reject):t[r[0]+"With"](this,i?[e]:arguments)})}),e=null}).promise()},then:function(t,r,i){var o=0;function a(t,n,r,i){return function(){var s=this,u=arguments,l=function(){var e,l;if(!(t=o&&(r!==W&&(s=void 0,u=[e]),n.rejectWith(s,u))}};t?c():(w.Deferred.getStackHook&&(c.stackTrace=w.Deferred.getStackHook()),e.setTimeout(c))}}return w.Deferred(function(e){n[0][3].add(a(0,e,g(i)?i:I,e.notifyWith)),n[1][3].add(a(0,e,g(t)?t:I)),n[2][3].add(a(0,e,g(r)?r:W))}).promise()},promise:function(e){return null!=e?w.extend(e,i):i}},o={};return w.each(n,function(e,t){var a=t[2],s=t[5];i[t[1]]=a.add,s&&a.add(function(){r=s},n[3-e][2].disable,n[3-e][3].disable,n[0][2].lock,n[0][3].lock),a.add(t[3].fire),o[t[0]]=function(){return o[t[0]+"With"](this===o?void 0:this,arguments),this},o[t[0]+"With"]=a.fireWith}),i.promise(o),t&&t.call(o,o),o},when:function(e){var t=arguments.length,n=t,r=Array(n),i=o.call(arguments),a=w.Deferred(),s=function(e){return function(n){r[e]=this,i[e]=arguments.length>1?o.call(arguments):n,--t||a.resolveWith(r,i)}};if(t<=1&&($(e,a.done(s(n)).resolve,a.reject,!t),"pending"===a.state()||g(i[n]&&i[n].then)))return a.then();while(n--)$(i[n],s(n),a.reject);return a.promise()}});var B=/^(Eval|Internal|Range|Reference|Syntax|Type|URI)Error$/;w.Deferred.exceptionHook=function(t,n){e.console&&e.console.warn&&t&&B.test(t.name)&&e.console.warn("jQuery.Deferred exception: "+t.message,t.stack,n)},w.readyException=function(t){e.setTimeout(function(){throw t})};var F=w.Deferred();w.fn.ready=function(e){return F.then(e)["catch"](function(e){w.readyException(e)}),this},w.extend({isReady:!1,readyWait:1,ready:function(e){(!0===e?--w.readyWait:w.isReady)||(w.isReady=!0,!0!==e&&--w.readyWait>0||F.resolveWith(r,[w]))}}),w.ready.then=F.then;function _(){r.removeEventListener("DOMContentLoaded",_),e.removeEventListener("load",_),w.ready()}"complete"===r.readyState||"loading"!==r.readyState&&!r.documentElement.doScroll?e.setTimeout(w.ready):(r.addEventListener("DOMContentLoaded",_),e.addEventListener("load",_));var z=function(e,t,n,r,i,o,a){var s=0,u=e.length,l=null==n;if("object"===x(n)){i=!0;for(s in n)z(e,t,s,n[s],!0,o,a)}else if(void 0!==r&&(i=!0,g(r)||(a=!0),l&&(a?(t.call(e,r),t=null):(l=t,t=function(e,t,n){return l.call(w(e),n)})),t))for(;s1,null,!0)},removeData:function(e){return this.each(function(){K.remove(this,e)})}}),w.extend({queue:function(e,t,n){var r;if(e)return t=(t||"fx")+"queue",r=J.get(e,t),n&&(!r||Array.isArray(n)?r=J.access(e,t,w.makeArray(n)):r.push(n)),r||[]},dequeue:function(e,t){t=t||"fx";var n=w.queue(e,t),r=n.length,i=n.shift(),o=w._queueHooks(e,t),a=function(){w.dequeue(e,t)};"inprogress"===i&&(i=n.shift(),r--),i&&("fx"===t&&n.unshift("inprogress"),delete o.stop,i.call(e,a,o)),!r&&o&&o.empty.fire()},_queueHooks:function(e,t){var n=t+"queueHooks";return J.get(e,n)||J.access(e,n,{empty:w.Callbacks("once memory").add(function(){J.remove(e,[t+"queue",n])})})}}),w.fn.extend({queue:function(e,t){var n=2;return"string"!=typeof e&&(t=e,e="fx",n--),arguments.length\x20\t\r\n\f]+)/i,he=/^$|^module$|\/(?:java|ecma)script/i,ge={option:[1,""],thead:[1,"","
                                    "],col:[2,"","
                                    "],tr:[2,"","
                                    "],td:[3,"","
                                    "],_default:[0,"",""]};ge.optgroup=ge.option,ge.tbody=ge.tfoot=ge.colgroup=ge.caption=ge.thead,ge.th=ge.td;function ye(e,t){var n;return n="undefined"!=typeof e.getElementsByTagName?e.getElementsByTagName(t||"*"):"undefined"!=typeof e.querySelectorAll?e.querySelectorAll(t||"*"):[],void 0===t||t&&N(e,t)?w.merge([e],n):n}function ve(e,t){for(var n=0,r=e.length;n-1)i&&i.push(o);else if(l=w.contains(o.ownerDocument,o),a=ye(f.appendChild(o),"script"),l&&ve(a),n){c=0;while(o=a[c++])he.test(o.type||"")&&n.push(o)}return f}!function(){var e=r.createDocumentFragment().appendChild(r.createElement("div")),t=r.createElement("input");t.setAttribute("type","radio"),t.setAttribute("checked","checked"),t.setAttribute("name","t"),e.appendChild(t),h.checkClone=e.cloneNode(!0).cloneNode(!0).lastChild.checked,e.innerHTML="",h.noCloneChecked=!!e.cloneNode(!0).lastChild.defaultValue}();var be=r.documentElement,we=/^key/,Te=/^(?:mouse|pointer|contextmenu|drag|drop)|click/,Ce=/^([^.]*)(?:\.(.+)|)/;function Ee(){return!0}function ke(){return!1}function Se(){try{return r.activeElement}catch(e){}}function De(e,t,n,r,i,o){var a,s;if("object"==typeof t){"string"!=typeof n&&(r=r||n,n=void 0);for(s in t)De(e,s,n,r,t[s],o);return e}if(null==r&&null==i?(i=n,r=n=void 0):null==i&&("string"==typeof n?(i=r,r=void 0):(i=r,r=n,n=void 0)),!1===i)i=ke;else if(!i)return e;return 1===o&&(a=i,(i=function(e){return w().off(e),a.apply(this,arguments)}).guid=a.guid||(a.guid=w.guid++)),e.each(function(){w.event.add(this,t,i,r,n)})}w.event={global:{},add:function(e,t,n,r,i){var o,a,s,u,l,c,f,p,d,h,g,y=J.get(e);if(y){n.handler&&(n=(o=n).handler,i=o.selector),i&&w.find.matchesSelector(be,i),n.guid||(n.guid=w.guid++),(u=y.events)||(u=y.events={}),(a=y.handle)||(a=y.handle=function(t){return"undefined"!=typeof w&&w.event.triggered!==t.type?w.event.dispatch.apply(e,arguments):void 0}),l=(t=(t||"").match(M)||[""]).length;while(l--)d=g=(s=Ce.exec(t[l])||[])[1],h=(s[2]||"").split(".").sort(),d&&(f=w.event.special[d]||{},d=(i?f.delegateType:f.bindType)||d,f=w.event.special[d]||{},c=w.extend({type:d,origType:g,data:r,handler:n,guid:n.guid,selector:i,needsContext:i&&w.expr.match.needsContext.test(i),namespace:h.join(".")},o),(p=u[d])||((p=u[d]=[]).delegateCount=0,f.setup&&!1!==f.setup.call(e,r,h,a)||e.addEventListener&&e.addEventListener(d,a)),f.add&&(f.add.call(e,c),c.handler.guid||(c.handler.guid=n.guid)),i?p.splice(p.delegateCount++,0,c):p.push(c),w.event.global[d]=!0)}},remove:function(e,t,n,r,i){var o,a,s,u,l,c,f,p,d,h,g,y=J.hasData(e)&&J.get(e);if(y&&(u=y.events)){l=(t=(t||"").match(M)||[""]).length;while(l--)if(s=Ce.exec(t[l])||[],d=g=s[1],h=(s[2]||"").split(".").sort(),d){f=w.event.special[d]||{},p=u[d=(r?f.delegateType:f.bindType)||d]||[],s=s[2]&&new RegExp("(^|\\.)"+h.join("\\.(?:.*\\.|)")+"(\\.|$)"),a=o=p.length;while(o--)c=p[o],!i&&g!==c.origType||n&&n.guid!==c.guid||s&&!s.test(c.namespace)||r&&r!==c.selector&&("**"!==r||!c.selector)||(p.splice(o,1),c.selector&&p.delegateCount--,f.remove&&f.remove.call(e,c));a&&!p.length&&(f.teardown&&!1!==f.teardown.call(e,h,y.handle)||w.removeEvent(e,d,y.handle),delete u[d])}else for(d in u)w.event.remove(e,d+t[l],n,r,!0);w.isEmptyObject(u)&&J.remove(e,"handle events")}},dispatch:function(e){var t=w.event.fix(e),n,r,i,o,a,s,u=new Array(arguments.length),l=(J.get(this,"events")||{})[t.type]||[],c=w.event.special[t.type]||{};for(u[0]=t,n=1;n=1))for(;l!==this;l=l.parentNode||this)if(1===l.nodeType&&("click"!==e.type||!0!==l.disabled)){for(o=[],a={},n=0;n-1:w.find(i,this,null,[l]).length),a[i]&&o.push(r);o.length&&s.push({elem:l,handlers:o})}return l=this,u\x20\t\r\n\f]*)[^>]*)\/>/gi,Ae=/\s*$/g;function Le(e,t){return N(e,"table")&&N(11!==t.nodeType?t:t.firstChild,"tr")?w(e).children("tbody")[0]||e:e}function He(e){return e.type=(null!==e.getAttribute("type"))+"/"+e.type,e}function Oe(e){return"true/"===(e.type||"").slice(0,5)?e.type=e.type.slice(5):e.removeAttribute("type"),e}function Pe(e,t){var n,r,i,o,a,s,u,l;if(1===t.nodeType){if(J.hasData(e)&&(o=J.access(e),a=J.set(t,o),l=o.events)){delete a.handle,a.events={};for(i in l)for(n=0,r=l[i].length;n1&&"string"==typeof y&&!h.checkClone&&je.test(y))return e.each(function(i){var o=e.eq(i);v&&(t[0]=y.call(this,i,o.html())),Re(o,t,n,r)});if(p&&(i=xe(t,e[0].ownerDocument,!1,e,r),o=i.firstChild,1===i.childNodes.length&&(i=o),o||r)){for(u=(s=w.map(ye(i,"script"),He)).length;f")},clone:function(e,t,n){var r,i,o,a,s=e.cloneNode(!0),u=w.contains(e.ownerDocument,e);if(!(h.noCloneChecked||1!==e.nodeType&&11!==e.nodeType||w.isXMLDoc(e)))for(a=ye(s),r=0,i=(o=ye(e)).length;r0&&ve(a,!u&&ye(e,"script")),s},cleanData:function(e){for(var t,n,r,i=w.event.special,o=0;void 0!==(n=e[o]);o++)if(Y(n)){if(t=n[J.expando]){if(t.events)for(r in t.events)i[r]?w.event.remove(n,r):w.removeEvent(n,r,t.handle);n[J.expando]=void 0}n[K.expando]&&(n[K.expando]=void 0)}}}),w.fn.extend({detach:function(e){return Ie(this,e,!0)},remove:function(e){return Ie(this,e)},text:function(e){return z(this,function(e){return void 0===e?w.text(this):this.empty().each(function(){1!==this.nodeType&&11!==this.nodeType&&9!==this.nodeType||(this.textContent=e)})},null,e,arguments.length)},append:function(){return Re(this,arguments,function(e){1!==this.nodeType&&11!==this.nodeType&&9!==this.nodeType||Le(this,e).appendChild(e)})},prepend:function(){return Re(this,arguments,function(e){if(1===this.nodeType||11===this.nodeType||9===this.nodeType){var t=Le(this,e);t.insertBefore(e,t.firstChild)}})},before:function(){return Re(this,arguments,function(e){this.parentNode&&this.parentNode.insertBefore(e,this)})},after:function(){return Re(this,arguments,function(e){this.parentNode&&this.parentNode.insertBefore(e,this.nextSibling)})},empty:function(){for(var e,t=0;null!=(e=this[t]);t++)1===e.nodeType&&(w.cleanData(ye(e,!1)),e.textContent="");return this},clone:function(e,t){return e=null!=e&&e,t=null==t?e:t,this.map(function(){return w.clone(this,e,t)})},html:function(e){return z(this,function(e){var t=this[0]||{},n=0,r=this.length;if(void 0===e&&1===t.nodeType)return t.innerHTML;if("string"==typeof e&&!Ae.test(e)&&!ge[(de.exec(e)||["",""])[1].toLowerCase()]){e=w.htmlPrefilter(e);try{for(;n=0&&(u+=Math.max(0,Math.ceil(e["offset"+t[0].toUpperCase()+t.slice(1)]-o-u-s-.5))),u}function et(e,t,n){var r=$e(e),i=Fe(e,t,r),o="border-box"===w.css(e,"boxSizing",!1,r),a=o;if(We.test(i)){if(!n)return i;i="auto"}return a=a&&(h.boxSizingReliable()||i===e.style[t]),("auto"===i||!parseFloat(i)&&"inline"===w.css(e,"display",!1,r))&&(i=e["offset"+t[0].toUpperCase()+t.slice(1)],a=!0),(i=parseFloat(i)||0)+Ze(e,t,n||(o?"border":"content"),a,r,i)+"px"}w.extend({cssHooks:{opacity:{get:function(e,t){if(t){var n=Fe(e,"opacity");return""===n?"1":n}}}},cssNumber:{animationIterationCount:!0,columnCount:!0,fillOpacity:!0,flexGrow:!0,flexShrink:!0,fontWeight:!0,lineHeight:!0,opacity:!0,order:!0,orphans:!0,widows:!0,zIndex:!0,zoom:!0},cssProps:{},style:function(e,t,n,r){if(e&&3!==e.nodeType&&8!==e.nodeType&&e.style){var i,o,a,s=G(t),u=Xe.test(t),l=e.style;if(u||(t=Je(s)),a=w.cssHooks[t]||w.cssHooks[s],void 0===n)return a&&"get"in a&&void 0!==(i=a.get(e,!1,r))?i:l[t];"string"==(o=typeof n)&&(i=ie.exec(n))&&i[1]&&(n=ue(e,t,i),o="number"),null!=n&&n===n&&("number"===o&&(n+=i&&i[3]||(w.cssNumber[s]?"":"px")),h.clearCloneStyle||""!==n||0!==t.indexOf("background")||(l[t]="inherit"),a&&"set"in a&&void 0===(n=a.set(e,n,r))||(u?l.setProperty(t,n):l[t]=n))}},css:function(e,t,n,r){var i,o,a,s=G(t);return Xe.test(t)||(t=Je(s)),(a=w.cssHooks[t]||w.cssHooks[s])&&"get"in a&&(i=a.get(e,!0,n)),void 0===i&&(i=Fe(e,t,r)),"normal"===i&&t in Ve&&(i=Ve[t]),""===n||n?(o=parseFloat(i),!0===n||isFinite(o)?o||0:i):i}}),w.each(["height","width"],function(e,t){w.cssHooks[t]={get:function(e,n,r){if(n)return!ze.test(w.css(e,"display"))||e.getClientRects().length&&e.getBoundingClientRect().width?et(e,t,r):se(e,Ue,function(){return et(e,t,r)})},set:function(e,n,r){var i,o=$e(e),a="border-box"===w.css(e,"boxSizing",!1,o),s=r&&Ze(e,t,r,a,o);return a&&h.scrollboxSize()===o.position&&(s-=Math.ceil(e["offset"+t[0].toUpperCase()+t.slice(1)]-parseFloat(o[t])-Ze(e,t,"border",!1,o)-.5)),s&&(i=ie.exec(n))&&"px"!==(i[3]||"px")&&(e.style[t]=n,n=w.css(e,t)),Ke(e,n,s)}}}),w.cssHooks.marginLeft=_e(h.reliableMarginLeft,function(e,t){if(t)return(parseFloat(Fe(e,"marginLeft"))||e.getBoundingClientRect().left-se(e,{marginLeft:0},function(){return e.getBoundingClientRect().left}))+"px"}),w.each({margin:"",padding:"",border:"Width"},function(e,t){w.cssHooks[e+t]={expand:function(n){for(var r=0,i={},o="string"==typeof n?n.split(" "):[n];r<4;r++)i[e+oe[r]+t]=o[r]||o[r-2]||o[0];return i}},"margin"!==e&&(w.cssHooks[e+t].set=Ke)}),w.fn.extend({css:function(e,t){return z(this,function(e,t,n){var r,i,o={},a=0;if(Array.isArray(t)){for(r=$e(e),i=t.length;a1)}});function tt(e,t,n,r,i){return new tt.prototype.init(e,t,n,r,i)}w.Tween=tt,tt.prototype={constructor:tt,init:function(e,t,n,r,i,o){this.elem=e,this.prop=n,this.easing=i||w.easing._default,this.options=t,this.start=this.now=this.cur(),this.end=r,this.unit=o||(w.cssNumber[n]?"":"px")},cur:function(){var e=tt.propHooks[this.prop];return e&&e.get?e.get(this):tt.propHooks._default.get(this)},run:function(e){var t,n=tt.propHooks[this.prop];return this.options.duration?this.pos=t=w.easing[this.easing](e,this.options.duration*e,0,1,this.options.duration):this.pos=t=e,this.now=(this.end-this.start)*t+this.start,this.options.step&&this.options.step.call(this.elem,this.now,this),n&&n.set?n.set(this):tt.propHooks._default.set(this),this}},tt.prototype.init.prototype=tt.prototype,tt.propHooks={_default:{get:function(e){var t;return 1!==e.elem.nodeType||null!=e.elem[e.prop]&&null==e.elem.style[e.prop]?e.elem[e.prop]:(t=w.css(e.elem,e.prop,""))&&"auto"!==t?t:0},set:function(e){w.fx.step[e.prop]?w.fx.step[e.prop](e):1!==e.elem.nodeType||null==e.elem.style[w.cssProps[e.prop]]&&!w.cssHooks[e.prop]?e.elem[e.prop]=e.now:w.style(e.elem,e.prop,e.now+e.unit)}}},tt.propHooks.scrollTop=tt.propHooks.scrollLeft={set:function(e){e.elem.nodeType&&e.elem.parentNode&&(e.elem[e.prop]=e.now)}},w.easing={linear:function(e){return e},swing:function(e){return.5-Math.cos(e*Math.PI)/2},_default:"swing"},w.fx=tt.prototype.init,w.fx.step={};var nt,rt,it=/^(?:toggle|show|hide)$/,ot=/queueHooks$/;function at(){rt&&(!1===r.hidden&&e.requestAnimationFrame?e.requestAnimationFrame(at):e.setTimeout(at,w.fx.interval),w.fx.tick())}function st(){return e.setTimeout(function(){nt=void 0}),nt=Date.now()}function ut(e,t){var n,r=0,i={height:e};for(t=t?1:0;r<4;r+=2-t)i["margin"+(n=oe[r])]=i["padding"+n]=e;return t&&(i.opacity=i.width=e),i}function lt(e,t,n){for(var r,i=(pt.tweeners[t]||[]).concat(pt.tweeners["*"]),o=0,a=i.length;o1)},removeAttr:function(e){return this.each(function(){w.removeAttr(this,e)})}}),w.extend({attr:function(e,t,n){var r,i,o=e.nodeType;if(3!==o&&8!==o&&2!==o)return"undefined"==typeof e.getAttribute?w.prop(e,t,n):(1===o&&w.isXMLDoc(e)||(i=w.attrHooks[t.toLowerCase()]||(w.expr.match.bool.test(t)?dt:void 0)),void 0!==n?null===n?void w.removeAttr(e,t):i&&"set"in i&&void 0!==(r=i.set(e,n,t))?r:(e.setAttribute(t,n+""),n):i&&"get"in i&&null!==(r=i.get(e,t))?r:null==(r=w.find.attr(e,t))?void 0:r)},attrHooks:{type:{set:function(e,t){if(!h.radioValue&&"radio"===t&&N(e,"input")){var n=e.value;return e.setAttribute("type",t),n&&(e.value=n),t}}}},removeAttr:function(e,t){var n,r=0,i=t&&t.match(M);if(i&&1===e.nodeType)while(n=i[r++])e.removeAttribute(n)}}),dt={set:function(e,t,n){return!1===t?w.removeAttr(e,n):e.setAttribute(n,n),n}},w.each(w.expr.match.bool.source.match(/\w+/g),function(e,t){var n=ht[t]||w.find.attr;ht[t]=function(e,t,r){var i,o,a=t.toLowerCase();return r||(o=ht[a],ht[a]=i,i=null!=n(e,t,r)?a:null,ht[a]=o),i}});var gt=/^(?:input|select|textarea|button)$/i,yt=/^(?:a|area)$/i;w.fn.extend({prop:function(e,t){return z(this,w.prop,e,t,arguments.length>1)},removeProp:function(e){return this.each(function(){delete this[w.propFix[e]||e]})}}),w.extend({prop:function(e,t,n){var r,i,o=e.nodeType;if(3!==o&&8!==o&&2!==o)return 1===o&&w.isXMLDoc(e)||(t=w.propFix[t]||t,i=w.propHooks[t]),void 0!==n?i&&"set"in i&&void 0!==(r=i.set(e,n,t))?r:e[t]=n:i&&"get"in i&&null!==(r=i.get(e,t))?r:e[t]},propHooks:{tabIndex:{get:function(e){var t=w.find.attr(e,"tabindex");return t?parseInt(t,10):gt.test(e.nodeName)||yt.test(e.nodeName)&&e.href?0:-1}}},propFix:{"for":"htmlFor","class":"className"}}),h.optSelected||(w.propHooks.selected={get:function(e){var t=e.parentNode;return t&&t.parentNode&&t.parentNode.selectedIndex,null},set:function(e){var t=e.parentNode;t&&(t.selectedIndex,t.parentNode&&t.parentNode.selectedIndex)}}),w.each(["tabIndex","readOnly","maxLength","cellSpacing","cellPadding","rowSpan","colSpan","useMap","frameBorder","contentEditable"],function(){w.propFix[this.toLowerCase()]=this});function vt(e){return(e.match(M)||[]).join(" ")}function mt(e){return e.getAttribute&&e.getAttribute("class")||""}function xt(e){return Array.isArray(e)?e:"string"==typeof e?e.match(M)||[]:[]}w.fn.extend({addClass:function(e){var t,n,r,i,o,a,s,u=0;if(g(e))return this.each(function(t){w(this).addClass(e.call(this,t,mt(this)))});if((t=xt(e)).length)while(n=this[u++])if(i=mt(n),r=1===n.nodeType&&" "+vt(i)+" "){a=0;while(o=t[a++])r.indexOf(" "+o+" ")<0&&(r+=o+" ");i!==(s=vt(r))&&n.setAttribute("class",s)}return this},removeClass:function(e){var t,n,r,i,o,a,s,u=0;if(g(e))return this.each(function(t){w(this).removeClass(e.call(this,t,mt(this)))});if(!arguments.length)return this.attr("class","");if((t=xt(e)).length)while(n=this[u++])if(i=mt(n),r=1===n.nodeType&&" "+vt(i)+" "){a=0;while(o=t[a++])while(r.indexOf(" "+o+" ")>-1)r=r.replace(" "+o+" "," ");i!==(s=vt(r))&&n.setAttribute("class",s)}return this},toggleClass:function(e,t){var n=typeof e,r="string"===n||Array.isArray(e);return"boolean"==typeof t&&r?t?this.addClass(e):this.removeClass(e):g(e)?this.each(function(n){w(this).toggleClass(e.call(this,n,mt(this),t),t)}):this.each(function(){var t,i,o,a;if(r){i=0,o=w(this),a=xt(e);while(t=a[i++])o.hasClass(t)?o.removeClass(t):o.addClass(t)}else void 0!==e&&"boolean"!==n||((t=mt(this))&&J.set(this,"__className__",t),this.setAttribute&&this.setAttribute("class",t||!1===e?"":J.get(this,"__className__")||""))})},hasClass:function(e){var t,n,r=0;t=" "+e+" ";while(n=this[r++])if(1===n.nodeType&&(" "+vt(mt(n))+" ").indexOf(t)>-1)return!0;return!1}});var bt=/\r/g;w.fn.extend({val:function(e){var t,n,r,i=this[0];{if(arguments.length)return r=g(e),this.each(function(n){var i;1===this.nodeType&&(null==(i=r?e.call(this,n,w(this).val()):e)?i="":"number"==typeof i?i+="":Array.isArray(i)&&(i=w.map(i,function(e){return null==e?"":e+""})),(t=w.valHooks[this.type]||w.valHooks[this.nodeName.toLowerCase()])&&"set"in t&&void 0!==t.set(this,i,"value")||(this.value=i))});if(i)return(t=w.valHooks[i.type]||w.valHooks[i.nodeName.toLowerCase()])&&"get"in t&&void 0!==(n=t.get(i,"value"))?n:"string"==typeof(n=i.value)?n.replace(bt,""):null==n?"":n}}}),w.extend({valHooks:{option:{get:function(e){var t=w.find.attr(e,"value");return null!=t?t:vt(w.text(e))}},select:{get:function(e){var t,n,r,i=e.options,o=e.selectedIndex,a="select-one"===e.type,s=a?null:[],u=a?o+1:i.length;for(r=o<0?u:a?o:0;r-1)&&(n=!0);return n||(e.selectedIndex=-1),o}}}}),w.each(["radio","checkbox"],function(){w.valHooks[this]={set:function(e,t){if(Array.isArray(t))return e.checked=w.inArray(w(e).val(),t)>-1}},h.checkOn||(w.valHooks[this].get=function(e){return null===e.getAttribute("value")?"on":e.value})}),h.focusin="onfocusin"in e;var wt=/^(?:focusinfocus|focusoutblur)$/,Tt=function(e){e.stopPropagation()};w.extend(w.event,{trigger:function(t,n,i,o){var a,s,u,l,c,p,d,h,v=[i||r],m=f.call(t,"type")?t.type:t,x=f.call(t,"namespace")?t.namespace.split("."):[];if(s=h=u=i=i||r,3!==i.nodeType&&8!==i.nodeType&&!wt.test(m+w.event.triggered)&&(m.indexOf(".")>-1&&(m=(x=m.split(".")).shift(),x.sort()),c=m.indexOf(":")<0&&"on"+m,t=t[w.expando]?t:new w.Event(m,"object"==typeof t&&t),t.isTrigger=o?2:3,t.namespace=x.join("."),t.rnamespace=t.namespace?new RegExp("(^|\\.)"+x.join("\\.(?:.*\\.|)")+"(\\.|$)"):null,t.result=void 0,t.target||(t.target=i),n=null==n?[t]:w.makeArray(n,[t]),d=w.event.special[m]||{},o||!d.trigger||!1!==d.trigger.apply(i,n))){if(!o&&!d.noBubble&&!y(i)){for(l=d.delegateType||m,wt.test(l+m)||(s=s.parentNode);s;s=s.parentNode)v.push(s),u=s;u===(i.ownerDocument||r)&&v.push(u.defaultView||u.parentWindow||e)}a=0;while((s=v[a++])&&!t.isPropagationStopped())h=s,t.type=a>1?l:d.bindType||m,(p=(J.get(s,"events")||{})[t.type]&&J.get(s,"handle"))&&p.apply(s,n),(p=c&&s[c])&&p.apply&&Y(s)&&(t.result=p.apply(s,n),!1===t.result&&t.preventDefault());return t.type=m,o||t.isDefaultPrevented()||d._default&&!1!==d._default.apply(v.pop(),n)||!Y(i)||c&&g(i[m])&&!y(i)&&((u=i[c])&&(i[c]=null),w.event.triggered=m,t.isPropagationStopped()&&h.addEventListener(m,Tt),i[m](),t.isPropagationStopped()&&h.removeEventListener(m,Tt),w.event.triggered=void 0,u&&(i[c]=u)),t.result}},simulate:function(e,t,n){var r=w.extend(new w.Event,n,{type:e,isSimulated:!0});w.event.trigger(r,null,t)}}),w.fn.extend({trigger:function(e,t){return this.each(function(){w.event.trigger(e,t,this)})},triggerHandler:function(e,t){var n=this[0];if(n)return w.event.trigger(e,t,n,!0)}}),h.focusin||w.each({focus:"focusin",blur:"focusout"},function(e,t){var n=function(e){w.event.simulate(t,e.target,w.event.fix(e))};w.event.special[t]={setup:function(){var r=this.ownerDocument||this,i=J.access(r,t);i||r.addEventListener(e,n,!0),J.access(r,t,(i||0)+1)},teardown:function(){var r=this.ownerDocument||this,i=J.access(r,t)-1;i?J.access(r,t,i):(r.removeEventListener(e,n,!0),J.remove(r,t))}}});var Ct=e.location,Et=Date.now(),kt=/\?/;w.parseXML=function(t){var n;if(!t||"string"!=typeof t)return null;try{n=(new e.DOMParser).parseFromString(t,"text/xml")}catch(e){n=void 0}return n&&!n.getElementsByTagName("parsererror").length||w.error("Invalid XML: "+t),n};var St=/\[\]$/,Dt=/\r?\n/g,Nt=/^(?:submit|button|image|reset|file)$/i,At=/^(?:input|select|textarea|keygen)/i;function jt(e,t,n,r){var i;if(Array.isArray(t))w.each(t,function(t,i){n||St.test(e)?r(e,i):jt(e+"["+("object"==typeof i&&null!=i?t:"")+"]",i,n,r)});else if(n||"object"!==x(t))r(e,t);else for(i in t)jt(e+"["+i+"]",t[i],n,r)}w.param=function(e,t){var n,r=[],i=function(e,t){var n=g(t)?t():t;r[r.length]=encodeURIComponent(e)+"="+encodeURIComponent(null==n?"":n)};if(Array.isArray(e)||e.jquery&&!w.isPlainObject(e))w.each(e,function(){i(this.name,this.value)});else for(n in e)jt(n,e[n],t,i);return r.join("&")},w.fn.extend({serialize:function(){return w.param(this.serializeArray())},serializeArray:function(){return this.map(function(){var e=w.prop(this,"elements");return e?w.makeArray(e):this}).filter(function(){var e=this.type;return this.name&&!w(this).is(":disabled")&&At.test(this.nodeName)&&!Nt.test(e)&&(this.checked||!pe.test(e))}).map(function(e,t){var n=w(this).val();return null==n?null:Array.isArray(n)?w.map(n,function(e){return{name:t.name,value:e.replace(Dt,"\r\n")}}):{name:t.name,value:n.replace(Dt,"\r\n")}}).get()}});var qt=/%20/g,Lt=/#.*$/,Ht=/([?&])_=[^&]*/,Ot=/^(.*?):[ \t]*([^\r\n]*)$/gm,Pt=/^(?:about|app|app-storage|.+-extension|file|res|widget):$/,Mt=/^(?:GET|HEAD)$/,Rt=/^\/\//,It={},Wt={},$t="*/".concat("*"),Bt=r.createElement("a");Bt.href=Ct.href;function Ft(e){return function(t,n){"string"!=typeof t&&(n=t,t="*");var r,i=0,o=t.toLowerCase().match(M)||[];if(g(n))while(r=o[i++])"+"===r[0]?(r=r.slice(1)||"*",(e[r]=e[r]||[]).unshift(n)):(e[r]=e[r]||[]).push(n)}}function _t(e,t,n,r){var i={},o=e===Wt;function a(s){var u;return i[s]=!0,w.each(e[s]||[],function(e,s){var l=s(t,n,r);return"string"!=typeof l||o||i[l]?o?!(u=l):void 0:(t.dataTypes.unshift(l),a(l),!1)}),u}return a(t.dataTypes[0])||!i["*"]&&a("*")}function zt(e,t){var n,r,i=w.ajaxSettings.flatOptions||{};for(n in t)void 0!==t[n]&&((i[n]?e:r||(r={}))[n]=t[n]);return r&&w.extend(!0,e,r),e}function Xt(e,t,n){var r,i,o,a,s=e.contents,u=e.dataTypes;while("*"===u[0])u.shift(),void 0===r&&(r=e.mimeType||t.getResponseHeader("Content-Type"));if(r)for(i in s)if(s[i]&&s[i].test(r)){u.unshift(i);break}if(u[0]in n)o=u[0];else{for(i in n){if(!u[0]||e.converters[i+" "+u[0]]){o=i;break}a||(a=i)}o=o||a}if(o)return o!==u[0]&&u.unshift(o),n[o]}function Ut(e,t,n,r){var i,o,a,s,u,l={},c=e.dataTypes.slice();if(c[1])for(a in e.converters)l[a.toLowerCase()]=e.converters[a];o=c.shift();while(o)if(e.responseFields[o]&&(n[e.responseFields[o]]=t),!u&&r&&e.dataFilter&&(t=e.dataFilter(t,e.dataType)),u=o,o=c.shift())if("*"===o)o=u;else if("*"!==u&&u!==o){if(!(a=l[u+" "+o]||l["* "+o]))for(i in l)if((s=i.split(" "))[1]===o&&(a=l[u+" "+s[0]]||l["* "+s[0]])){!0===a?a=l[i]:!0!==l[i]&&(o=s[0],c.unshift(s[1]));break}if(!0!==a)if(a&&e["throws"])t=a(t);else try{t=a(t)}catch(e){return{state:"parsererror",error:a?e:"No conversion from "+u+" to "+o}}}return{state:"success",data:t}}w.extend({active:0,lastModified:{},etag:{},ajaxSettings:{url:Ct.href,type:"GET",isLocal:Pt.test(Ct.protocol),global:!0,processData:!0,async:!0,contentType:"application/x-www-form-urlencoded; charset=UTF-8",accepts:{"*":$t,text:"text/plain",html:"text/html",xml:"application/xml, text/xml",json:"application/json, text/javascript"},contents:{xml:/\bxml\b/,html:/\bhtml/,json:/\bjson\b/},responseFields:{xml:"responseXML",text:"responseText",json:"responseJSON"},converters:{"* text":String,"text html":!0,"text json":JSON.parse,"text xml":w.parseXML},flatOptions:{url:!0,context:!0}},ajaxSetup:function(e,t){return t?zt(zt(e,w.ajaxSettings),t):zt(w.ajaxSettings,e)},ajaxPrefilter:Ft(It),ajaxTransport:Ft(Wt),ajax:function(t,n){"object"==typeof t&&(n=t,t=void 0),n=n||{};var i,o,a,s,u,l,c,f,p,d,h=w.ajaxSetup({},n),g=h.context||h,y=h.context&&(g.nodeType||g.jquery)?w(g):w.event,v=w.Deferred(),m=w.Callbacks("once memory"),x=h.statusCode||{},b={},T={},C="canceled",E={readyState:0,getResponseHeader:function(e){var t;if(c){if(!s){s={};while(t=Ot.exec(a))s[t[1].toLowerCase()]=t[2]}t=s[e.toLowerCase()]}return null==t?null:t},getAllResponseHeaders:function(){return c?a:null},setRequestHeader:function(e,t){return null==c&&(e=T[e.toLowerCase()]=T[e.toLowerCase()]||e,b[e]=t),this},overrideMimeType:function(e){return null==c&&(h.mimeType=e),this},statusCode:function(e){var t;if(e)if(c)E.always(e[E.status]);else for(t in e)x[t]=[x[t],e[t]];return this},abort:function(e){var t=e||C;return i&&i.abort(t),k(0,t),this}};if(v.promise(E),h.url=((t||h.url||Ct.href)+"").replace(Rt,Ct.protocol+"//"),h.type=n.method||n.type||h.method||h.type,h.dataTypes=(h.dataType||"*").toLowerCase().match(M)||[""],null==h.crossDomain){l=r.createElement("a");try{l.href=h.url,l.href=l.href,h.crossDomain=Bt.protocol+"//"+Bt.host!=l.protocol+"//"+l.host}catch(e){h.crossDomain=!0}}if(h.data&&h.processData&&"string"!=typeof h.data&&(h.data=w.param(h.data,h.traditional)),_t(It,h,n,E),c)return E;(f=w.event&&h.global)&&0==w.active++&&w.event.trigger("ajaxStart"),h.type=h.type.toUpperCase(),h.hasContent=!Mt.test(h.type),o=h.url.replace(Lt,""),h.hasContent?h.data&&h.processData&&0===(h.contentType||"").indexOf("application/x-www-form-urlencoded")&&(h.data=h.data.replace(qt,"+")):(d=h.url.slice(o.length),h.data&&(h.processData||"string"==typeof h.data)&&(o+=(kt.test(o)?"&":"?")+h.data,delete h.data),!1===h.cache&&(o=o.replace(Ht,"$1"),d=(kt.test(o)?"&":"?")+"_="+Et+++d),h.url=o+d),h.ifModified&&(w.lastModified[o]&&E.setRequestHeader("If-Modified-Since",w.lastModified[o]),w.etag[o]&&E.setRequestHeader("If-None-Match",w.etag[o])),(h.data&&h.hasContent&&!1!==h.contentType||n.contentType)&&E.setRequestHeader("Content-Type",h.contentType),E.setRequestHeader("Accept",h.dataTypes[0]&&h.accepts[h.dataTypes[0]]?h.accepts[h.dataTypes[0]]+("*"!==h.dataTypes[0]?", "+$t+"; q=0.01":""):h.accepts["*"]);for(p in h.headers)E.setRequestHeader(p,h.headers[p]);if(h.beforeSend&&(!1===h.beforeSend.call(g,E,h)||c))return E.abort();if(C="abort",m.add(h.complete),E.done(h.success),E.fail(h.error),i=_t(Wt,h,n,E)){if(E.readyState=1,f&&y.trigger("ajaxSend",[E,h]),c)return E;h.async&&h.timeout>0&&(u=e.setTimeout(function(){E.abort("timeout")},h.timeout));try{c=!1,i.send(b,k)}catch(e){if(c)throw e;k(-1,e)}}else k(-1,"No Transport");function k(t,n,r,s){var l,p,d,b,T,C=n;c||(c=!0,u&&e.clearTimeout(u),i=void 0,a=s||"",E.readyState=t>0?4:0,l=t>=200&&t<300||304===t,r&&(b=Xt(h,E,r)),b=Ut(h,b,E,l),l?(h.ifModified&&((T=E.getResponseHeader("Last-Modified"))&&(w.lastModified[o]=T),(T=E.getResponseHeader("etag"))&&(w.etag[o]=T)),204===t||"HEAD"===h.type?C="nocontent":304===t?C="notmodified":(C=b.state,p=b.data,l=!(d=b.error))):(d=C,!t&&C||(C="error",t<0&&(t=0))),E.status=t,E.statusText=(n||C)+"",l?v.resolveWith(g,[p,C,E]):v.rejectWith(g,[E,C,d]),E.statusCode(x),x=void 0,f&&y.trigger(l?"ajaxSuccess":"ajaxError",[E,h,l?p:d]),m.fireWith(g,[E,C]),f&&(y.trigger("ajaxComplete",[E,h]),--w.active||w.event.trigger("ajaxStop")))}return E},getJSON:function(e,t,n){return w.get(e,t,n,"json")},getScript:function(e,t){return w.get(e,void 0,t,"script")}}),w.each(["get","post"],function(e,t){w[t]=function(e,n,r,i){return g(n)&&(i=i||r,r=n,n=void 0),w.ajax(w.extend({url:e,type:t,dataType:i,data:n,success:r},w.isPlainObject(e)&&e))}}),w._evalUrl=function(e){return w.ajax({url:e,type:"GET",dataType:"script",cache:!0,async:!1,global:!1,"throws":!0})},w.fn.extend({wrapAll:function(e){var t;return this[0]&&(g(e)&&(e=e.call(this[0])),t=w(e,this[0].ownerDocument).eq(0).clone(!0),this[0].parentNode&&t.insertBefore(this[0]),t.map(function(){var e=this;while(e.firstElementChild)e=e.firstElementChild;return e}).append(this)),this},wrapInner:function(e){return g(e)?this.each(function(t){w(this).wrapInner(e.call(this,t))}):this.each(function(){var t=w(this),n=t.contents();n.length?n.wrapAll(e):t.append(e)})},wrap:function(e){var t=g(e);return this.each(function(n){w(this).wrapAll(t?e.call(this,n):e)})},unwrap:function(e){return this.parent(e).not("body").each(function(){w(this).replaceWith(this.childNodes)}),this}}),w.expr.pseudos.hidden=function(e){return!w.expr.pseudos.visible(e)},w.expr.pseudos.visible=function(e){return!!(e.offsetWidth||e.offsetHeight||e.getClientRects().length)},w.ajaxSettings.xhr=function(){try{return new e.XMLHttpRequest}catch(e){}};var Vt={0:200,1223:204},Gt=w.ajaxSettings.xhr();h.cors=!!Gt&&"withCredentials"in Gt,h.ajax=Gt=!!Gt,w.ajaxTransport(function(t){var n,r;if(h.cors||Gt&&!t.crossDomain)return{send:function(i,o){var a,s=t.xhr();if(s.open(t.type,t.url,t.async,t.username,t.password),t.xhrFields)for(a in t.xhrFields)s[a]=t.xhrFields[a];t.mimeType&&s.overrideMimeType&&s.overrideMimeType(t.mimeType),t.crossDomain||i["X-Requested-With"]||(i["X-Requested-With"]="XMLHttpRequest");for(a in i)s.setRequestHeader(a,i[a]);n=function(e){return function(){n&&(n=r=s.onload=s.onerror=s.onabort=s.ontimeout=s.onreadystatechange=null,"abort"===e?s.abort():"error"===e?"number"!=typeof s.status?o(0,"error"):o(s.status,s.statusText):o(Vt[s.status]||s.status,s.statusText,"text"!==(s.responseType||"text")||"string"!=typeof s.responseText?{binary:s.response}:{text:s.responseText},s.getAllResponseHeaders()))}},s.onload=n(),r=s.onerror=s.ontimeout=n("error"),void 0!==s.onabort?s.onabort=r:s.onreadystatechange=function(){4===s.readyState&&e.setTimeout(function(){n&&r()})},n=n("abort");try{s.send(t.hasContent&&t.data||null)}catch(e){if(n)throw e}},abort:function(){n&&n()}}}),w.ajaxPrefilter(function(e){e.crossDomain&&(e.contents.script=!1)}),w.ajaxSetup({accepts:{script:"text/javascript, application/javascript, application/ecmascript, application/x-ecmascript"},contents:{script:/\b(?:java|ecma)script\b/},converters:{"text script":function(e){return w.globalEval(e),e}}}),w.ajaxPrefilter("script",function(e){void 0===e.cache&&(e.cache=!1),e.crossDomain&&(e.type="GET")}),w.ajaxTransport("script",function(e){if(e.crossDomain){var t,n;return{send:function(i,o){t=w(" ================================================ FILE: src/main/resources/templates/mail/send.html ================================================
                                    发件人:
                                    收件人:
                                    主题:
                                    内容:
                                    是否为 HTML:
                                    备注:
                                    ================================================ FILE: src/main/resources/templates/mail/send_dialog.html ================================================
                                    发件人:
                                    收件人:
                                    主题:
                                    内容:
                                    是否为 HTML:
                                    备注:
                                    ================================================ FILE: src/main/resources/templates/mail/template/change_email_verify_code.html.bak ================================================

                                    尊敬的用户:

                                          您的账号正在进行邮箱验证,本次请求的验证码为:,30分钟内有效,切勿告知他人。

                                    ================================================ FILE: src/main/resources/templates/mail/template/change_password_verify_code.html ================================================

                                    你好:

                                          你的企业邮帐号 test@example.com 于今天14日19:51左右在北京市登录,登录IP为:。若登录地址信息有误差,如有疑问请在电脑登录并查看自助查询。

                                    管理平台:http://exmail.qq.com 企业邮箱帮助中心:http://service.exmail.qq.com
                                    管理平台
                                    ================================================ FILE: src/main/resources/templates/mail/template/email_verify_code.html ================================================

                                    验证码:,该验证码10分钟内有效。为了保障您的账户安全,请勿向他人泄漏验证码信息。

                                    ================================================ FILE: src/main/resources/templates/mail/view_dialog.html ================================================
                                    发件人:
                                    收件人:
                                    主题:
                                    内容:
                                    是否为 HTML:
                                    备注:
                                    ================================================ FILE: src/main/resources/templates/quartz/job/add_dialog.html ================================================
                                    任务类名:
                                    任务组名:
                                    CRON 表达式
                                    描述:
                                    ================================================ FILE: src/main/resources/templates/quartz/job/edit_dialog.html ================================================
                                    CRON 表达式
                                    描述:
                                    ================================================ FILE: src/main/resources/templates/quartz/job/list.html ================================================
                                    ================================================ FILE: src/main/resources/templates/quartz/job_runtime_log/add_dialog.html ================================================
                                    API 名称:
                                    请求地址(url):
                                    权限(authority):
                                    排序:
                                    备注:
                                    ================================================ FILE: src/main/resources/templates/quartz/job_runtime_log/edit_dialog.html ================================================
                                    API 名称:
                                    请求地址(url):
                                    权限(authority):
                                    排序:
                                    备注:
                                    ================================================ FILE: src/main/resources/templates/quartz/job_runtime_log/list.html ================================================
                                    ================================================ FILE: src/main/resources/templates/system/close.html ================================================ Title 网站已关闭! ================================================ FILE: src/main/resources/templates/system/dictionary/add_dialog.html ================================================
                                    字典键名:
                                    字典键:
                                    字典值名:
                                    字典值别名:
                                    字典值:
                                    字典分类:
                                    是否启用:
                                    排序:
                                    备注:
                                    ================================================ FILE: src/main/resources/templates/system/dictionary/edit_dialog.html ================================================
                                    字典键名:
                                    字典键:
                                    字典值名:
                                    字典值别名:
                                    字典值:
                                    字典分类:
                                    是否启用:
                                    排序:
                                    备注:
                                    ================================================ FILE: src/main/resources/templates/system/dictionary/list.html ================================================
                                    新增 编辑 删除 同步所有字典到内存 更改数据字典后,同步后才会生效!
                                    ================================================ FILE: src/main/resources/templates/system/dictionary_category/add_dialog.html ================================================
                                    分类名称:
                                    父级分类:
                                    排序:
                                    备注:
                                    ================================================ FILE: src/main/resources/templates/system/dictionary_category/edit_dialog.html ================================================
                                    分类名称:
                                    父级分类:
                                    排序:
                                    备注:
                                    ================================================ FILE: src/main/resources/templates/system/file/edit_dialog.html ================================================
                                    文件名:
                                    文件大小:
                                    唯一标识符:
                                    MIME 类型:
                                    文件路径:
                                    备注:
                                    ================================================ FILE: src/main/resources/templates/system/file/list.html ================================================
                                    ================================================ FILE: src/main/resources/templates/system/file/upload_all_dialog.html ================================================

                                    上传

                                    ================================================ FILE: src/main/resources/templates/system/file/upload_one_dialog.html ================================================

                                    上传

                                    ================================================ FILE: src/main/resources/templates/system/file/upload_one_dialog.html.bak ================================================

                                    上传

                                    ================================================ FILE: src/main/resources/templates/system/index.html ================================================
                                    ================================================ FILE: src/main/resources/templates/system/loading.html ================================================ Title
                                    ================================================ FILE: src/main/resources/templates/system/operation_log/list.html ================================================
                                    ================================================ FILE: src/main/resources/templates/system/operation_log/view_dialog.html ================================================
                                    ID:
                                    访问用户:
                                    用户 IP:
                                    操作类型:
                                    操作说明:
                                    请求耗时(毫秒):
                                    请求地址(url):
                                    请求方法:
                                    请求参数:
                                    请求语言:
                                    请求来源:
                                    用户代理:
                                    Handler:
                                    异常堆栈:
                                    Session ID:
                                    Cookie:
                                    响应状态码:
                                    创建时间:
                                    ================================================ FILE: src/main/resources/templates/system/workbench.html ================================================
                                    ================================================ FILE: src/main/resources/templates/user/add_dialog.html ================================================
                                    avatar
                                    更换头像 移除头像
                                    用户名:
                                    密码:
                                    电子邮箱:
                                    电子邮箱是否验证:
                                    所在部门:
                                    是否启用:
                                    备注:
                                    ================================================ FILE: src/main/resources/templates/user/api/add_dialog.html ================================================
                                    API 名称:
                                    API 分类:
                                    请求地址(url):
                                    权限(authority):
                                    排序:
                                    备注:
                                    ================================================ FILE: src/main/resources/templates/user/api/edit_dialog.html ================================================
                                    API 名称:
                                    API 分类:
                                    请求地址(url):
                                    权限(authority):
                                    排序:
                                    备注:
                                    ================================================ FILE: src/main/resources/templates/user/api/list.html ================================================
                                    ================================================ FILE: src/main/resources/templates/user/api_category/add_dialog.html ================================================
                                    分类名称:
                                    父级分类:
                                    排序:
                                    备注:
                                    ================================================ FILE: src/main/resources/templates/user/api_category/edit_dialog.html ================================================
                                    分类名称:
                                    父级分类:
                                    排序:
                                    备注:
                                    ================================================ FILE: src/main/resources/templates/user/change_avatar_dialog.html ================================================

                                    上传

                                    ================================================ FILE: src/main/resources/templates/user/change_email_dialog.html ================================================
                                    电子邮箱: 发送验证码
                                    验证码:
                                    ================================================ FILE: src/main/resources/templates/user/change_password_dialog.html ================================================
                                    原密码:
                                    新密码:
                                    重输密码:
                                    ================================================ FILE: src/main/resources/templates/user/department/add_dialog.html ================================================
                                    部门名称:
                                    上级部门:
                                    备注:
                                    ================================================ FILE: src/main/resources/templates/user/department/edit_dialog.html ================================================
                                    部门名称:
                                    上级部门:
                                    备注:
                                    ================================================ FILE: src/main/resources/templates/user/department/list.html ================================================
                                    ================================================ FILE: src/main/resources/templates/user/edit_dialog.html ================================================
                                    avatar
                                    更换头像 移除头像
                                    用户名:
                                    密码:
                                    电子邮箱:
                                    电子邮箱是否验证:
                                    所在部门:
                                    是否启用:
                                    备注:
                                    ================================================ FILE: src/main/resources/templates/user/list.html ================================================
                                    ================================================ FILE: src/main/resources/templates/user/login.html ================================================
                                    ================================================ FILE: src/main/resources/templates/user/logout.html ================================================
                                    注销登录。。。 ================================================ FILE: src/main/resources/templates/user/profile.html ================================================
                                    avatar
                                    更换头像 移除头像
                                    用户名:
                                    密码: 更改密码
                                    电子邮箱: 更换邮箱
                                    角色:
                                    所在部门:
                                    ================================================ FILE: src/main/resources/templates/user/role/add_dialog.html ================================================
                                    角色名称:
                                    角色值:
                                    备注:
                                    ================================================ FILE: src/main/resources/templates/user/role/edit_dialog.html ================================================
                                    角色名称:
                                    备注:
                                    ================================================ FILE: src/main/resources/templates/user/role/list.html ================================================
                                    ================================================ FILE: src/main/resources/templates/user/role_authority/api.html ================================================
                                    ================================================ FILE: src/main/resources/templates/user/role_authority/view_page.html ================================================
                                    ================================================ FILE: src/main/resources/templates/user/role_view_menu/list.html ================================================
                                    ================================================ FILE: src/main/resources/templates/user/user_role/add_dialog.html ================================================
                                    角色:
                                    ================================================ FILE: src/main/resources/templates/user/user_role/list.html ================================================
                                    ================================================ FILE: src/main/resources/templates/user/view_menu/add_dialog.html ================================================
                                    菜单名称:
                                    菜单分类:
                                    图标(icon):
                                    请求地址(url):
                                    排序:
                                    备注:
                                    ================================================ FILE: src/main/resources/templates/user/view_menu/edit_dialog.html ================================================
                                    菜单名称:
                                    菜单分类:
                                    图标(icon):
                                    请求地址(url):
                                    排序:
                                    备注:
                                    ================================================ FILE: src/main/resources/templates/user/view_menu/list.html ================================================
                                    ================================================ FILE: src/main/resources/templates/user/view_menu_category/add_dialog.html ================================================
                                    分类名称:
                                    父级分类:
                                    图标(icon):
                                    排序:
                                    备注:
                                    ================================================ FILE: src/main/resources/templates/user/view_menu_category/edit_dialog.html ================================================
                                    分类名称:
                                    父级分类:
                                    图标(icon):
                                    排序:
                                    备注:
                                    ================================================ FILE: src/main/resources/templates/user/view_page/add_dialog.html ================================================
                                    页面名称:
                                    页面分类:
                                    请求地址(url):
                                    权限(authority):
                                    排序:
                                    备注:
                                    ================================================ FILE: src/main/resources/templates/user/view_page/edit_dialog.html ================================================
                                    页面名称:
                                    页面分类:
                                    请求地址(url):
                                    权限(authority):
                                    排序:
                                    备注:
                                    ================================================ FILE: src/main/resources/templates/user/view_page/list.html ================================================
                                    ================================================ FILE: src/main/resources/templates/user/view_page_api/add_dialog.html ================================================
                                    API 名称:
                                    请求地址(url):
                                    权限(authority):
                                    排序:
                                    备注:
                                    ================================================ FILE: src/main/resources/templates/user/view_page_api/edit_dialog.html ================================================
                                    API 名称:
                                    请求地址(url):
                                    排序:
                                    备注:
                                    ================================================ FILE: src/main/resources/templates/user/view_page_api/list.html ================================================
                                    ================================================ FILE: src/main/resources/templates/user/view_page_category/add_dialog.html ================================================
                                    分类名称:
                                    父级分类:
                                    排序:
                                    备注:
                                    ================================================ FILE: src/main/resources/templates/user/view_page_category/edit_dialog.html ================================================
                                    分类名称:
                                    父级分类:
                                    排序:
                                    备注:
                                    ================================================ FILE: src/main/resources/templates/user/view_page_component/add_dialog.html ================================================
                                    组件类型:
                                    组件名称:
                                    权限(authority):
                                    排序:
                                    备注:
                                    ================================================ FILE: src/main/resources/templates/user/view_page_component/edit_dialog.html ================================================
                                    组件类型:
                                    组件名称:
                                    权限(authority):
                                    排序:
                                    备注:
                                    ================================================ FILE: src/main/resources/templates/user/view_page_component_api/add_dialog.html ================================================
                                    API 名称:
                                    请求地址(url):
                                    权限(authority):
                                    排序:
                                    备注:
                                    ================================================ FILE: src/main/resources/templates/user/view_page_component_api/edit_dialog.html ================================================
                                    API 名称:
                                    请求地址(url):
                                    排序:
                                    备注:
                                    ================================================ FILE: src/main/resources/templates/user/view_page_component_api/list.html ================================================
                                    ================================================ FILE: src/main/resources/templates/widget/base.html ================================================ Title
                                    ================================================ FILE: src/main/resources/templates/widget/basejs.html ================================================ ================================================ FILE: src/test/java/com/godcheese/nimrod/NimrodApplicationTests.java ================================================ package com.godcheese.nimrod; import org.junit.jupiter.api.Test; import org.springframework.boot.test.context.SpringBootTest; @SpringBootTest class NimrodApplicationTests { @Test void contextLoads() { } }