From 67b194075a036051b32b26eb7ff7917f33e5803b Mon Sep 17 00:00:00 2001 From: sunrich <17596519046@163.com> Date: Mon, 22 Oct 2018 10:03:37 +0800 Subject: [PATCH] =?UTF-8?q?jlr=E6=8F=90=E4=BA=A4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .classpath | 28 + .gitignore | 1 + .idea/.name | 1 + .idea/artifacts/jlr_war.xml | 8 + .idea/artifacts/jlr_war_exploded.xml | 94 + .idea/compiler.xml | 16 + .idea/encodings.xml | 6 + .idea/libraries/Maven__antlr_antlr_2_7_7.xml | 13 + .../Maven__aopalliance_aopalliance_1_0.xml | 13 + .idea/libraries/Maven__asm_asm_3_1.xml | 13 + .idea/libraries/Maven__cglib_cglib_2_2.xml | 13 + .../Maven__cglib_cglib_nodep_2_2_2.xml | 13 + .../Maven__com_alibaba_druid_1_0_15.xml | 13 + .../Maven__com_alibaba_fastjson_1_1_39.xml | 13 + .../Maven__com_caucho_hessian_4_0_33.xml | 13 + ...en__com_github_virtuald_curvesapi_1_03.xml | 13 + .../Maven__com_google_guava_guava_17_0.xml | 13 + .../Maven__com_oracle_ojdbc6_11_2_0_3.xml | 13 + ...mons_beanutils_commons_beanutils_1_8_0.xml | 13 + ...aven__commons_codec_commons_codec_1_10.xml | 13 + ..._collections_commons_collections_3_2_1.xml | 13 + ...ns_fileupload_commons_fileupload_1_2_2.xml | 13 + ...mons_httpclient_commons_httpclient_3_0.xml | 13 + .../Maven__commons_io_commons_io_1_3_2.xml | 13 + .../Maven__commons_lang_commons_lang_2_5.xml | 13 + ..._commons_logging_commons_logging_1_1_3.xml | 13 + .idea/libraries/Maven__dom4j_dom4j_1_6_1.xml | 13 + .../Maven__javax_faces_jsf_api_1_2_04.xml | 13 + .../Maven__javax_faces_jsf_impl_1_2_04.xml | 13 + ..._javax_servlet_javax_servlet_api_3_0_1.xml | 13 + .../Maven__javax_servlet_jsp_jsp_api_2_1.xml | 13 + .../Maven__javax_servlet_jstl_1_2.xml | 13 + .../Maven__javax_transaction_jta_1_1.xml | 13 + .idea/libraries/Maven__jstl_jstl_1_2.xml | 13 + .idea/libraries/Maven__junit_junit_4_11.xml | 13 + ...ven__mysql_mysql_connector_java_5_1_21.xml | 13 + ...ven__net_sf_ehcache_ehcache_core_2_4_7.xml | 13 + ...aven__net_sf_ehcache_ehcache_web_2_0_4.xml | 13 + .../Maven__net_sf_ezmorph_ezmorph_1_0_6.xml | 13 + ...en__net_sf_json_lib_json_lib_jdk15_2_4.xml | 13 + .../Maven__org_apache_ant_ant_1_8_2.xml | 13 + ...ven__org_apache_ant_ant_launcher_1_8_2.xml | 13 + ...org_apache_commons_commons_lang3_3_3_2.xml | 13 + ...apache_httpcomponents_httpclient_4_3_6.xml | 13 + ...g_apache_httpcomponents_httpcore_4_3_3.xml | 13 + ...n__org_apache_openejb_javaee_api_5_0_1.xml | 13 + .../Maven__org_apache_poi_poi_3_14.xml | 13 + .../Maven__org_apache_poi_poi_ooxml_3_14.xml | 13 + ..._org_apache_poi_poi_ooxml_schemas_3_14.xml | 13 + ...en__org_apache_poi_poi_scratchpad_3_14.xml | 13 + ...che_servicemix_bundles_xerces_2_11_0_1.xml | 13 + ...en__org_apache_xmlbeans_xmlbeans_2_6_0.xml | 13 + .../Maven__org_aspectj_aspectjrt_1_6_9.xml | 13 + ...Maven__org_aspectj_aspectjweaver_1_6_9.xml | 13 + ...odehaus_jackson_jackson_core_asl_1_9_7.xml | 13 + ...ehaus_jackson_jackson_mapper_asl_1_9_7.xml | 13 + .../Maven__org_hamcrest_hamcrest_core_1_3.xml | 13 + ...ernate_commons_annotations_4_0_1_Final.xml | 13 + ...g_hibernate_hibernate_core_4_1_6_Final.xml | 13 + ...te_hibernate_entitymanager_4_1_6_Final.xml | 13 + ...hibernate_hibernate_envers_4_1_6_Final.xml | 13 + ...ence_hibernate_jpa_2_0_api_1_0_1_Final.xml | 13 + ...ven__org_javassist_javassist_3_15_0_GA.xml | 13 + ...g_jboss_logging_jboss_logging_3_1_0_GA.xml | 13 + ...s_transaction_api_1_1_spec_1_0_0_Final.xml | 13 + .../libraries/Maven__org_jodd_jodd_3_3_8.xml | 13 + .../Maven__org_json_json_20160810.xml | 13 + ...ven__org_quartz_scheduler_quartz_1_8_4.xml | 13 + .../Maven__org_slf4j_slf4j_api_1_7_0.xml | 13 + .../Maven__org_slf4j_slf4j_simple_1_7_0.xml | 13 + ...rity_spring_security_acl_3_1_1_RELEASE.xml | 13 + ...y_spring_security_config_3_1_1_RELEASE.xml | 13 + ...ity_spring_security_core_3_1_1_RELEASE.xml | 13 + ...ring_security_core_tiger_2_0_7_RELEASE.xml | 13 + ..._spring_security_taglibs_3_1_1_RELEASE.xml | 13 + ...rity_spring_security_web_3_1_1_RELEASE.xml | 13 + ...ringframework_spring_aop_3_2_5_RELEASE.xml | 13 + ...ngframework_spring_beans_3_2_5_RELEASE.xml | 13 + ...framework_spring_context_3_2_5_RELEASE.xml | 13 + ...k_spring_context_support_3_2_5_RELEASE.xml | 13 + ...ingframework_spring_core_3_2_5_RELEASE.xml | 13 + ...mework_spring_expression_3_2_5_RELEASE.xml | 13 + ...ingframework_spring_jdbc_3_2_5_RELEASE.xml | 13 + ...ringframework_spring_orm_3_2_5_RELEASE.xml | 13 + ...pringframework_spring_tx_3_2_5_RELEASE.xml | 13 + ...ringframework_spring_web_3_2_5_RELEASE.xml | 13 + ...gframework_spring_webmvc_3_2_5_RELEASE.xml | 13 + .idea/libraries/Maven__sax_sax_2_0_1.xml | 13 + .../libraries/Maven__stax_stax_api_1_0_1.xml | 13 + .../Maven__xml_apis_xml_apis_1_4_01.xml | 13 + .idea/misc.xml | 16 + .idea/modules.xml | 8 + .idea/uiDesigner.xml | 124 + .idea/workspace.xml | 1288 ++ .project | 58 + .settings/.jsdtscope | 12 + .settings/org.eclipse.core.resources.prefs | 5 + .settings/org.eclipse.jdt.core.prefs | 8 + .settings/org.eclipse.m2e.core.prefs | 4 + .settings/org.eclipse.wst.common.component | 11 + ....eclipse.wst.common.project.facet.core.xml | 8 + ...rg.eclipse.wst.jsdt.ui.superType.container | 1 + .../org.eclipse.wst.jsdt.ui.superType.name | 1 + .settings/org.eclipse.wst.validation.prefs | 2 + jlr.iml | 135 + pom.xml | 533 + src/main/java/com/dubh/common/dao/Dao.java | 154 + .../dao/hibernate/BaseDaoHibernate.java | 674 + .../java/com/dubh/common/dto/BaseDto.java | 31 + .../java/com/dubh/common/file/Downfile.java | 60 + .../java/com/dubh/common/file/UploadFile.java | 243 + .../java/com/dubh/sysconfig/EacheConfig.java | 21 + src/main/java/com/dubh/sysconfig/ehcache.xml | 69 + .../java/com/dubh/sysconfig/group.properties | 3 + .../annotation/SystemControllerAfterLog.java | 16 + .../annotation/SystemControllerBeforeLog.java | 16 + .../syslog/annotation/SystemLogAspect.java | 263 + .../syslog/annotation/SystemServiceLog.java | 20 + src/main/java/com/hessian/HessianService.java | 10 + .../excel/annotation/ColumnAnnotation.java | 15 + .../java/com/ljh/excel/bean/BaseBean.java | 73 + .../ljh/excel/bean/factory/ExcelFactory.java | 20 + .../java/com/ljh/excel/parser/BaseParser.java | 100 + .../com/ljh/excel/parser/BeanOperation.java | 248 + .../java/com/ljh/excel/parser/FromHowTo.java | 142 + .../java/com/ljh/excel/parser/Parser.java | 255 + .../java/com/ljh/excel/test/MySqlTest.java | 101 + src/main/java/com/ljh/excel/test/User.java | 54 + src/main/java/com/quartz/UnlockOrder.java | 17 + src/main/java/com/quartz/queryservlet.java | 81 + src/main/java/com/util/AutoDtoFile.java | 59 + src/main/java/com/util/BaiDuDistanceKm.java | 74 + .../java/com/util/BaiduLatitudeUtils.java | 79 + src/main/java/com/util/BuilderExcel.java | 197 + src/main/java/com/util/Check.java | 42 + src/main/java/com/util/ComTreeInfo.java | 45 + src/main/java/com/util/Configmessage.java | 51 + src/main/java/com/util/Distance.java | 51 + src/main/java/com/util/Escape.java | 131 + src/main/java/com/util/NetUtil.java | 210 + .../java/com/util/NewFieldUtileTools.java | 155 + src/main/java/com/util/OfficeUtil.java | 278 + src/main/java/com/util/OutCall.java | 153 + .../java/com/util/PinYin2Abbreviation.java | 102 + src/main/java/com/util/ReadExcel.java | 141 + src/main/java/com/util/ReadExcel2003.java | 109 + src/main/java/com/util/ReadExcel2007.java | 112 + src/main/java/com/util/RequestMessage.java | 139 + src/main/java/com/util/RequestUtil.java | 1407 ++ src/main/java/com/util/SendMessage.java | 57 + src/main/java/com/util/SetJsonObject.java | 39 + src/main/java/com/util/SpringUtil.java | 20 + src/main/java/com/util/Student.java | 69 + src/main/java/com/util/SystemTool.java | 166 + src/main/java/com/util/UniqId.java | 240 + src/main/java/com/util/UtilTools.java | 917 + src/main/java/com/util/Vo.java | 30 + src/main/java/com/util/ZipUtil.java | 518 + .../java/com/util/yzcode/BuilderCode.java | 146 + src/main/java/com/zhongdao/jlr/BaiduTest.java | 78 + src/main/java/com/zhongdao/jlr/Test.java | 55 + .../jlr/business/action/BaseAction.java | 106 + .../jlr/business/action/CasesAction.java | 176 + .../jlr/business/action/CouponAction.java | 299 + .../jlr/business/action/EnterpriseAction.java | 323 + .../jlr/business/action/OrderCheckAction.java | 129 + .../jlr/business/action/RoleAction.java | 177 + .../jlr/business/action/SupplierAction.java | 332 + .../jlr/business/action/UserAction.java | 227 + .../zhongdao/jlr/business/dao/BaseDao.java | 25 + .../zhongdao/jlr/business/dao/CaseDao.java | 48 + .../zhongdao/jlr/business/dao/CouponDao.java | 53 + .../jlr/business/dao/EnterpriseDao.java | 50 + .../jlr/business/dao/OrderCheckDao.java | 51 + .../zhongdao/jlr/business/dao/RoleDao.java | 62 + .../jlr/business/dao/SupplierDao.java | 104 + .../jlr/business/dao/UserInfoDao.java | 51 + .../jlr/business/dao/impl/BaseDaoImpl.java | 99 + .../jlr/business/dao/impl/CaseDaoImpl.java | 438 + .../jlr/business/dao/impl/CouponDaoImpl.java | 394 + .../business/dao/impl/EnterpriseDaoImpl.java | 115 + .../business/dao/impl/OrderCheckDaoImpl.java | 277 + .../jlr/business/dao/impl/RoleDaoImpl.java | 216 + .../business/dao/impl/SupplierDaoImpl.java | 293 + .../business/dao/impl/UserInfoDaoImpl.java | 138 + .../business/interceptor/UserInterceptor.java | 40 + .../jlr/business/listener/AutoRunServlet.java | 22 + .../business/listener/StartupListener.java | 37 + .../jlr/business/service/BaseService.java | 30 + .../business/service/CasesListService.java | 67 + .../jlr/business/service/CouponService.java | 88 + .../business/service/EnterpriseService.java | 46 + .../business/service/OrderCheckService.java | 48 + .../jlr/business/service/RoleService.java | 56 + .../jlr/business/service/SupplierService.java | 98 + .../jlr/business/service/UserInfoService.java | 53 + .../service/impl/BaseServiceImpl.java | 70 + .../service/impl/CasesListServiceImpl.java | 475 + .../service/impl/CouponServiceImpl.java | 459 + .../service/impl/EnterpriseServiceImpl.java | 167 + .../service/impl/OrderCheckServiceImpl.java | 40 + .../service/impl/RoleServiceImpl.java | 199 + .../service/impl/SupplierServiceImpl.java | 151 + .../service/impl/UserInfoServiceImpl.java | 65 + .../servlet/ReceiveCustomerInfoServlet.java | 10 + .../jlr/business/vo/ConsumeQueryExcelVO.java | 104 + .../zhongdao/jlr/business/vo/Contract.java | 31 + .../jlr/business/vo/CouponConsumeJlr.java | 141 + .../zhongdao/jlr/business/vo/CouponJlrVO.java | 76 + .../jlr/business/vo/CouponRechargeJlr.java | 129 + .../zhongdao/jlr/business/vo/Destination.java | 31 + .../zhongdao/jlr/business/vo/Enterprise.java | 31 + .../jlr/business/vo/EnterpriseExcelVO.java | 203 + .../com/zhongdao/jlr/business/vo/JLRMenu.java | 44 + .../zhongdao/jlr/business/vo/JLRRMenu.java | 41 + .../zhongdao/jlr/business/vo/LoginUserVo.java | 127 + .../jlr/business/vo/OrderCheckExcelVO.java | 135 + .../zhongdao/jlr/business/vo/PageInfo.java | 47 + .../jlr/business/vo/RechangeQueryExcelVO.java | 125 + .../jlr/business/vo/UserOrderCSVVO.java | 214 + .../jlr/business/vo/UserOrderExcelVO.java | 252 + .../jlr/business/vo/UserOrderViewVO.java | 689 + .../zhongdao/jlr/customer/ResponseInfo.java | 31 + .../com/zhongdao/jlr/customer/TextConfig.java | 11 + .../jlr/customer/dao/CustomerDao.java | 12 + .../customer/dao/impl/CustomerDaoImpl.java | 16 + .../customer/interceptor/UserInterceptor.java | 90 + .../jlr/customer/service/CustomerService.java | 17 + .../jlr/customer/web/CustomerController.java | 34 + .../jlr/customer/web/vo/ClaimsOrderVo.java | 50 + .../jlr/customer/web/vo/InsuranceContext.java | 52 + .../zhongdao/jlr/customer/xss/XssFilter.java | 30 + .../xss/XssHttpServletRequestWrapper.java | 48 + .../java/com/zhongdao/jlr/enums/Week.java | 5 + .../java/com/zhongdao/jlr/pojo/BaseMenu.java | 131 + .../java/com/zhongdao/jlr/pojo/BaseRole.java | 100 + .../zhongdao/jlr/pojo/BaseRoleAuthority.java | 39 + .../java/com/zhongdao/jlr/pojo/BaseUser.java | 124 + .../com/zhongdao/jlr/pojo/BaseUserRole.java | 50 + .../zhongdao/jlr/pojo/CouponConsumeJlrPO.java | 171 + .../jlr/pojo/CouponRechargeJlrPO.java | 161 + .../com/zhongdao/jlr/pojo/EnterpriseJlr.java | 313 + .../com/zhongdao/jlr/pojo/JLRAuthority.java | 62 + .../java/com/zhongdao/jlr/pojo/JLRCoupon.java | 141 + .../com/zhongdao/jlr/pojo/JLRDestination.java | 50 + .../java/com/zhongdao/jlr/pojo/JLRRole.java | 64 + .../com/zhongdao/jlr/pojo/JLRSupplier.java | 50 + .../java/com/zhongdao/jlr/pojo/JLRUser.java | 120 + .../zhongdao/jlr/pojo/JLRUserContract.java | 50 + .../java/com/zhongdao/jlr/pojo/JLRepqr.java | 241 + .../java/com/zhongdao/jlr/util/DateUtil.java | 152 + .../com/zhongdao/jlr/util/ExportCSVUtil.java | 106 + .../zhongdao/jlr/util/GeoAddressCenter.java | 235 + .../zhongdao/jlr/util/HttpClientDownload.java | 141 + src/main/java/com/zhongdao/jlr/util/MD5.java | 62 + .../com/zhongdao/jlr/util/MTextUtils.java | 484 + .../java/com/zhongdao/jlr/util/XJson.java | 436 + .../applicationContext-hibernate.xml | 88 + .../business/applicationContext-customer.xml | 22 + .../business/applicationContext-zengwp.xml | 28 + .../eache/applicationContext-eache.xml | 41 + src/main/resources/files/Conditions.xlsx | Bin 0 -> 15296 bytes src/main/resources/files/Outcomes.xlsx | Bin 0 -> 11283 bytes src/main/webapp/404.html | 18 + src/main/webapp/500.html | 18 + src/main/webapp/META-INF/MANIFEST.MF | 3 + .../webapp/WEB-INF/mvc-dispatcher-servlet.xml | 73 + src/main/webapp/WEB-INF/web.xml | 133 + src/main/webapp/css/addDialog.css | 97 + src/main/webapp/css/demo.css | 21 + src/main/webapp/css/dialog.css | 217 + src/main/webapp/css/home.css | 756 + src/main/webapp/css/index.css | 787 + src/main/webapp/css/list.css | 42 + src/main/webapp/css/login.css | 218 + src/main/webapp/css/mc.css | 106 + src/main/webapp/css/page.css | 28 + src/main/webapp/css/printOut.css | 159 + src/main/webapp/css/search.css | 82 + src/main/webapp/css/style.css | 1159 ++ .../webapp/css/themes/black/accordion.css | 89 + src/main/webapp/css/themes/black/calendar.css | 202 + src/main/webapp/css/themes/black/combo.css | 35 + src/main/webapp/css/themes/black/combobox.css | 39 + src/main/webapp/css/themes/black/datagrid.css | 288 + src/main/webapp/css/themes/black/datalist.css | 95 + src/main/webapp/css/themes/black/datebox.css | 36 + src/main/webapp/css/themes/black/dialog.css | 47 + src/main/webapp/css/themes/black/easyui.css | 3220 ++++ src/main/webapp/css/themes/black/filebox.css | 20 + .../themes/black/images/accordion_arrows.png | Bin 0 -> 122 bytes .../webapp/css/themes/black/images/blank.gif | Bin 0 -> 43 bytes .../themes/black/images/calendar_arrows.png | Bin 0 -> 173 bytes .../css/themes/black/images/combo_arrow.png | Bin 0 -> 100 bytes .../themes/black/images/datagrid_icons.png | Bin 0 -> 300 bytes .../css/themes/black/images/datebox_arrow.png | Bin 0 -> 626 bytes .../css/themes/black/images/layout_arrows.png | Bin 0 -> 179 bytes .../css/themes/black/images/linkbutton_bg.png | Bin 0 -> 1274 bytes .../css/themes/black/images/loading.gif | Bin 0 -> 1737 bytes .../css/themes/black/images/menu_arrows.png | Bin 0 -> 134 bytes .../themes/black/images/messager_icons.png | Bin 0 -> 6116 bytes .../themes/black/images/pagination_icons.png | Bin 0 -> 339 bytes .../css/themes/black/images/panel_tools.png | Bin 0 -> 184 bytes .../themes/black/images/passwordbox_close.png | Bin 0 -> 149 bytes .../themes/black/images/passwordbox_open.png | Bin 0 -> 160 bytes .../themes/black/images/searchbox_button.png | Bin 0 -> 813 bytes .../css/themes/black/images/slider_handle.png | Bin 0 -> 863 bytes .../themes/black/images/spinner_arrows.png | Bin 0 -> 140 bytes .../css/themes/black/images/tabs_icons.png | Bin 0 -> 144 bytes .../css/themes/black/images/tagbox_icons.png | Bin 0 -> 133 bytes .../css/themes/black/images/tree_icons.png | Bin 0 -> 3086 bytes .../black/images/validatebox_warning.png | Bin 0 -> 921 bytes src/main/webapp/css/themes/black/layout.css | 150 + .../webapp/css/themes/black/linkbutton.css | 203 + src/main/webapp/css/themes/black/menu.css | 119 + .../webapp/css/themes/black/menubutton.css | 94 + src/main/webapp/css/themes/black/messager.css | 44 + .../webapp/css/themes/black/numberbox.css | 0 .../webapp/css/themes/black/pagination.css | 71 + src/main/webapp/css/themes/black/panel.css | 265 + .../webapp/css/themes/black/passwordbox.css | 6 + .../webapp/css/themes/black/progressbar.css | 32 + .../webapp/css/themes/black/propertygrid.css | 28 + .../webapp/css/themes/black/searchbox.css | 61 + src/main/webapp/css/themes/black/slider.css | 101 + src/main/webapp/css/themes/black/spinner.css | 58 + .../webapp/css/themes/black/splitbutton.css | 12 + .../webapp/css/themes/black/switchbutton.css | 77 + src/main/webapp/css/themes/black/tabs.css | 413 + src/main/webapp/css/themes/black/tagbox.css | 44 + src/main/webapp/css/themes/black/textbox.css | 139 + src/main/webapp/css/themes/black/tooltip.css | 103 + src/main/webapp/css/themes/black/tree.css | 161 + .../webapp/css/themes/black/validatebox.css | 5 + src/main/webapp/css/themes/black/window.css | 183 + .../webapp/css/themes/bootstrap/accordion.css | 89 + .../webapp/css/themes/bootstrap/calendar.css | 202 + .../webapp/css/themes/bootstrap/combo.css | 35 + .../webapp/css/themes/bootstrap/combobox.css | 39 + .../webapp/css/themes/bootstrap/datagrid.css | 288 + .../webapp/css/themes/bootstrap/datalist.css | 95 + .../webapp/css/themes/bootstrap/datebox.css | 36 + .../webapp/css/themes/bootstrap/dialog.css | 47 + .../webapp/css/themes/bootstrap/easyui.css | 3239 ++++ .../webapp/css/themes/bootstrap/filebox.css | 20 + .../bootstrap/images/accordion_arrows.png | Bin 0 -> 184 bytes .../css/themes/bootstrap/images/blank.gif | Bin 0 -> 43 bytes .../bootstrap/images/calendar_arrows.png | Bin 0 -> 173 bytes .../themes/bootstrap/images/combo_arrow.png | Bin 0 -> 117 bytes .../bootstrap/images/datagrid_icons.png | Bin 0 -> 307 bytes .../themes/bootstrap/images/datebox_arrow.png | Bin 0 -> 626 bytes .../themes/bootstrap/images/layout_arrows.png | Bin 0 -> 319 bytes .../themes/bootstrap/images/linkbutton_bg.png | Bin 0 -> 1274 bytes .../css/themes/bootstrap/images/loading.gif | Bin 0 -> 1737 bytes .../themes/bootstrap/images/menu_arrows.png | Bin 0 -> 160 bytes .../bootstrap/images/messager_icons.png | Bin 0 -> 6116 bytes .../bootstrap/images/pagination_icons.png | Bin 0 -> 628 bytes .../themes/bootstrap/images/panel_tools.png | Bin 0 -> 194 bytes .../bootstrap/images/passwordbox_close.png | Bin 0 -> 159 bytes .../bootstrap/images/passwordbox_open.png | Bin 0 -> 165 bytes .../bootstrap/images/searchbox_button.png | Bin 0 -> 813 bytes .../themes/bootstrap/images/slider_handle.png | Bin 0 -> 863 bytes .../bootstrap/images/spinner_arrows.png | Bin 0 -> 149 bytes .../themes/bootstrap/images/tabs_icons.png | Bin 0 -> 150 bytes .../themes/bootstrap/images/tagbox_icons.png | Bin 0 -> 134 bytes .../themes/bootstrap/images/tree_icons.png | Bin 0 -> 3115 bytes .../bootstrap/images/validatebox_warning.png | Bin 0 -> 921 bytes .../webapp/css/themes/bootstrap/layout.css | 150 + .../css/themes/bootstrap/linkbutton.css | 203 + src/main/webapp/css/themes/bootstrap/menu.css | 119 + .../css/themes/bootstrap/menubutton.css | 94 + .../webapp/css/themes/bootstrap/messager.css | 44 + .../webapp/css/themes/bootstrap/numberbox.css | 0 .../css/themes/bootstrap/pagination.css | 71 + .../webapp/css/themes/bootstrap/panel.css | 265 + .../css/themes/bootstrap/passwordbox.css | 6 + .../css/themes/bootstrap/progressbar.css | 32 + .../css/themes/bootstrap/propertygrid.css | 28 + .../webapp/css/themes/bootstrap/searchbox.css | 61 + .../webapp/css/themes/bootstrap/slider.css | 101 + .../webapp/css/themes/bootstrap/spinner.css | 58 + .../css/themes/bootstrap/splitbutton.css | 12 + .../css/themes/bootstrap/switchbutton.css | 77 + src/main/webapp/css/themes/bootstrap/tabs.css | 413 + .../webapp/css/themes/bootstrap/tagbox.css | 44 + .../webapp/css/themes/bootstrap/textbox.css | 139 + .../webapp/css/themes/bootstrap/tooltip.css | 103 + src/main/webapp/css/themes/bootstrap/tree.css | 161 + .../css/themes/bootstrap/validatebox.css | 5 + .../webapp/css/themes/bootstrap/window.css | 183 + src/main/webapp/css/themes/color.css | 210 + .../webapp/css/themes/default/accordion.css | 89 + .../webapp/css/themes/default/calendar.css | 202 + src/main/webapp/css/themes/default/combo.css | 35 + .../webapp/css/themes/default/combobox.css | 39 + .../webapp/css/themes/default/datagrid.css | 288 + .../webapp/css/themes/default/datalist.css | 95 + .../webapp/css/themes/default/datebox.css | 36 + src/main/webapp/css/themes/default/dialog.css | 47 + src/main/webapp/css/themes/default/easyui.css | 3220 ++++ .../webapp/css/themes/default/filebox.css | 20 + .../default/images/accordion_arrows.png | Bin 0 -> 184 bytes .../css/themes/default/images/blank.gif | Bin 0 -> 43 bytes .../themes/default/images/calendar_arrows.png | Bin 0 -> 173 bytes .../css/themes/default/images/combo_arrow.png | Bin 0 -> 117 bytes .../themes/default/images/datagrid_icons.png | Bin 0 -> 307 bytes .../themes/default/images/datebox_arrow.png | Bin 0 -> 626 bytes .../themes/default/images/layout_arrows.png | Bin 0 -> 319 bytes .../themes/default/images/linkbutton_bg.png | Bin 0 -> 1274 bytes .../css/themes/default/images/loading.gif | Bin 0 -> 1737 bytes .../css/themes/default/images/menu_arrows.png | Bin 0 -> 160 bytes .../themes/default/images/messager_icons.png | Bin 0 -> 6116 bytes .../default/images/pagination_icons.png | Bin 0 -> 628 bytes .../css/themes/default/images/panel_tools.png | Bin 0 -> 852 bytes .../default/images/passwordbox_close.png | Bin 0 -> 159 bytes .../default/images/passwordbox_open.png | Bin 0 -> 165 bytes .../default/images/searchbox_button.png | Bin 0 -> 813 bytes .../themes/default/images/slider_handle.png | Bin 0 -> 863 bytes .../themes/default/images/spinner_arrows.png | Bin 0 -> 149 bytes .../css/themes/default/images/tabs_icons.png | Bin 0 -> 150 bytes .../themes/default/images/tagbox_icons.png | Bin 0 -> 134 bytes .../css/themes/default/images/tree_icons.png | Bin 0 -> 3115 bytes .../default/images/validatebox_warning.png | Bin 0 -> 921 bytes src/main/webapp/css/themes/default/layout.css | 150 + .../webapp/css/themes/default/linkbutton.css | 203 + src/main/webapp/css/themes/default/menu.css | 119 + .../webapp/css/themes/default/menubutton.css | 94 + .../webapp/css/themes/default/messager.css | 44 + .../webapp/css/themes/default/numberbox.css | 0 .../webapp/css/themes/default/pagination.css | 71 + src/main/webapp/css/themes/default/panel.css | 265 + .../webapp/css/themes/default/passwordbox.css | 6 + .../webapp/css/themes/default/progressbar.css | 32 + .../css/themes/default/propertygrid.css | 28 + .../webapp/css/themes/default/searchbox.css | 61 + src/main/webapp/css/themes/default/slider.css | 101 + .../webapp/css/themes/default/spinner.css | 58 + .../webapp/css/themes/default/splitbutton.css | 12 + .../css/themes/default/switchbutton.css | 77 + src/main/webapp/css/themes/default/tabs.css | 413 + src/main/webapp/css/themes/default/tagbox.css | 44 + .../webapp/css/themes/default/textbox.css | 139 + .../webapp/css/themes/default/tooltip.css | 103 + src/main/webapp/css/themes/default/tree.css | 161 + .../webapp/css/themes/default/validatebox.css | 5 + src/main/webapp/css/themes/default/window.css | 183 + src/main/webapp/css/themes/gray/accordion.css | 89 + src/main/webapp/css/themes/gray/calendar.css | 202 + src/main/webapp/css/themes/gray/combo.css | 35 + src/main/webapp/css/themes/gray/combobox.css | 39 + src/main/webapp/css/themes/gray/datagrid.css | 288 + src/main/webapp/css/themes/gray/datalist.css | 95 + src/main/webapp/css/themes/gray/datebox.css | 36 + src/main/webapp/css/themes/gray/dialog.css | 47 + src/main/webapp/css/themes/gray/easyui.css | 3220 ++++ src/main/webapp/css/themes/gray/filebox.css | 20 + .../themes/gray/images/accordion_arrows.png | Bin 0 -> 125 bytes .../webapp/css/themes/gray/images/blank.gif | Bin 0 -> 43 bytes .../themes/gray/images/calendar_arrows.png | Bin 0 -> 173 bytes .../css/themes/gray/images/combo_arrow.png | Bin 0 -> 103 bytes .../css/themes/gray/images/datagrid_icons.png | Bin 0 -> 330 bytes .../css/themes/gray/images/datebox_arrow.png | Bin 0 -> 626 bytes .../css/themes/gray/images/layout_arrows.png | Bin 0 -> 181 bytes .../css/themes/gray/images/linkbutton_bg.png | Bin 0 -> 1274 bytes .../webapp/css/themes/gray/images/loading.gif | Bin 0 -> 1737 bytes .../css/themes/gray/images/menu_arrows.png | Bin 0 -> 160 bytes .../css/themes/gray/images/messager_icons.png | Bin 0 -> 6116 bytes .../themes/gray/images/pagination_icons.png | Bin 0 -> 466 bytes .../css/themes/gray/images/panel_tools.png | Bin 0 -> 191 bytes .../themes/gray/images/passwordbox_close.png | Bin 0 -> 149 bytes .../themes/gray/images/passwordbox_open.png | Bin 0 -> 160 bytes .../themes/gray/images/searchbox_button.png | Bin 0 -> 813 bytes .../css/themes/gray/images/slider_handle.png | Bin 0 -> 863 bytes .../css/themes/gray/images/spinner_arrows.png | Bin 0 -> 149 bytes .../css/themes/gray/images/tabs_icons.png | Bin 0 -> 144 bytes .../css/themes/gray/images/tagbox_icons.png | Bin 0 -> 133 bytes .../css/themes/gray/images/tree_icons.png | Bin 0 -> 3115 bytes .../gray/images/validatebox_warning.png | Bin 0 -> 921 bytes src/main/webapp/css/themes/gray/layout.css | 150 + .../webapp/css/themes/gray/linkbutton.css | 203 + src/main/webapp/css/themes/gray/menu.css | 119 + .../webapp/css/themes/gray/menubutton.css | 94 + src/main/webapp/css/themes/gray/messager.css | 44 + src/main/webapp/css/themes/gray/numberbox.css | 0 .../webapp/css/themes/gray/pagination.css | 71 + src/main/webapp/css/themes/gray/panel.css | 265 + .../webapp/css/themes/gray/passwordbox.css | 6 + .../webapp/css/themes/gray/progressbar.css | 32 + .../webapp/css/themes/gray/propertygrid.css | 28 + src/main/webapp/css/themes/gray/searchbox.css | 61 + src/main/webapp/css/themes/gray/slider.css | 101 + src/main/webapp/css/themes/gray/spinner.css | 58 + .../webapp/css/themes/gray/splitbutton.css | 12 + .../webapp/css/themes/gray/switchbutton.css | 77 + src/main/webapp/css/themes/gray/tabs.css | 413 + src/main/webapp/css/themes/gray/tagbox.css | 44 + src/main/webapp/css/themes/gray/textbox.css | 139 + src/main/webapp/css/themes/gray/tooltip.css | 103 + src/main/webapp/css/themes/gray/tree.css | 161 + .../webapp/css/themes/gray/validatebox.css | 5 + src/main/webapp/css/themes/gray/window.css | 183 + src/main/webapp/css/themes/icon.css | 96 + src/main/webapp/css/themes/icons/back.png | Bin 0 -> 912 bytes src/main/webapp/css/themes/icons/blank.gif | Bin 0 -> 43 bytes src/main/webapp/css/themes/icons/cancel.png | Bin 0 -> 1133 bytes src/main/webapp/css/themes/icons/clear.png | Bin 0 -> 779 bytes src/main/webapp/css/themes/icons/cut.png | Bin 0 -> 1024 bytes src/main/webapp/css/themes/icons/edit_add.png | Bin 0 -> 1088 bytes .../webapp/css/themes/icons/edit_remove.png | Bin 0 -> 625 bytes src/main/webapp/css/themes/icons/filesave.png | Bin 0 -> 898 bytes src/main/webapp/css/themes/icons/filter.png | Bin 0 -> 305 bytes src/main/webapp/css/themes/icons/help.png | Bin 0 -> 1187 bytes .../webapp/css/themes/icons/large_chart.png | Bin 0 -> 1669 bytes .../webapp/css/themes/icons/large_clipart.png | Bin 0 -> 1727 bytes .../webapp/css/themes/icons/large_picture.png | Bin 0 -> 1667 bytes .../webapp/css/themes/icons/large_shapes.png | Bin 0 -> 1318 bytes .../css/themes/icons/large_smartart.png | Bin 0 -> 1336 bytes src/main/webapp/css/themes/icons/lock.png | Bin 0 -> 311 bytes src/main/webapp/css/themes/icons/man.png | Bin 0 -> 244 bytes src/main/webapp/css/themes/icons/mini_add.png | Bin 0 -> 244 bytes .../webapp/css/themes/icons/mini_edit.png | Bin 0 -> 161 bytes .../webapp/css/themes/icons/mini_refresh.png | Bin 0 -> 160 bytes src/main/webapp/css/themes/icons/more.png | Bin 0 -> 110 bytes src/main/webapp/css/themes/icons/no.png | Bin 0 -> 922 bytes src/main/webapp/css/themes/icons/ok.png | Bin 0 -> 883 bytes src/main/webapp/css/themes/icons/pencil.png | Bin 0 -> 713 bytes src/main/webapp/css/themes/icons/print.png | Bin 0 -> 1057 bytes src/main/webapp/css/themes/icons/redo.png | Bin 0 -> 708 bytes src/main/webapp/css/themes/icons/reload.png | Bin 0 -> 1045 bytes src/main/webapp/css/themes/icons/search.png | Bin 0 -> 813 bytes src/main/webapp/css/themes/icons/sum.png | Bin 0 -> 289 bytes src/main/webapp/css/themes/icons/tip.png | Bin 0 -> 743 bytes src/main/webapp/css/themes/icons/undo.png | Bin 0 -> 707 bytes .../webapp/css/themes/material/accordion.css | 89 + .../webapp/css/themes/material/calendar.css | 202 + src/main/webapp/css/themes/material/combo.css | 35 + .../webapp/css/themes/material/combobox.css | 39 + .../webapp/css/themes/material/datagrid.css | 282 + .../webapp/css/themes/material/datalist.css | 95 + .../webapp/css/themes/material/datebox.css | 36 + .../webapp/css/themes/material/dialog.css | 47 + .../webapp/css/themes/material/easyui.css | 3229 ++++ .../webapp/css/themes/material/filebox.css | 20 + .../css/themes/material/images/Thumbs.db | Bin 0 -> 35328 bytes .../material/images/accordion_arrows.png | Bin 0 -> 125 bytes .../css/themes/material/images/blank.gif | Bin 0 -> 43 bytes .../material/images/calendar_arrows.png | Bin 0 -> 173 bytes .../themes/material/images/combo_arrow.png | Bin 0 -> 103 bytes .../themes/material/images/datagrid_icons.png | Bin 0 -> 330 bytes .../themes/material/images/datebox_arrow.png | Bin 0 -> 626 bytes .../themes/material/images/layout_arrows.png | Bin 0 -> 181 bytes .../themes/material/images/linkbutton_bg.png | Bin 0 -> 1274 bytes .../css/themes/material/images/loading.gif | Bin 0 -> 1737 bytes .../themes/material/images/menu_arrows.png | Bin 0 -> 160 bytes .../themes/material/images/messager_icons.png | Bin 0 -> 6116 bytes .../material/images/pagination_icons.png | Bin 0 -> 466 bytes .../themes/material/images/panel_tools.png | Bin 0 -> 191 bytes .../material/images/passwordbox_close.png | Bin 0 -> 149 bytes .../material/images/passwordbox_open.png | Bin 0 -> 160 bytes .../material/images/searchbox_button.png | Bin 0 -> 813 bytes .../themes/material/images/slider_handle.png | Bin 0 -> 863 bytes .../themes/material/images/spinner_arrows.png | Bin 0 -> 149 bytes .../css/themes/material/images/tabs_icons.png | Bin 0 -> 144 bytes .../themes/material/images/tagbox_icons.png | Bin 0 -> 133 bytes .../css/themes/material/images/tree_icons.png | Bin 0 -> 3115 bytes .../material/images/validatebox_warning.png | Bin 0 -> 921 bytes .../webapp/css/themes/material/layout.css | 150 + .../webapp/css/themes/material/linkbutton.css | 191 + src/main/webapp/css/themes/material/menu.css | 119 + .../webapp/css/themes/material/menubutton.css | 94 + .../webapp/css/themes/material/messager.css | 44 + .../webapp/css/themes/material/numberbox.css | 0 .../webapp/css/themes/material/pagination.css | 71 + src/main/webapp/css/themes/material/panel.css | 259 + .../css/themes/material/passwordbox.css | 6 + .../css/themes/material/progressbar.css | 32 + .../css/themes/material/propertygrid.css | 28 + .../webapp/css/themes/material/searchbox.css | 61 + .../webapp/css/themes/material/slider.css | 101 + .../webapp/css/themes/material/spinner.css | 58 + .../css/themes/material/splitbutton.css | 12 + .../css/themes/material/switchbutton.css | 77 + src/main/webapp/css/themes/material/tabs.css | 377 + .../webapp/css/themes/material/tagbox.css | 44 + .../webapp/css/themes/material/textbox.css | 139 + .../webapp/css/themes/material/tooltip.css | 103 + src/main/webapp/css/themes/material/tree.css | 161 + .../css/themes/material/validatebox.css | 5 + .../webapp/css/themes/material/window.css | 177 + .../webapp/css/themes/metro/accordion.css | 89 + src/main/webapp/css/themes/metro/calendar.css | 202 + src/main/webapp/css/themes/metro/combo.css | 35 + src/main/webapp/css/themes/metro/combobox.css | 39 + src/main/webapp/css/themes/metro/datagrid.css | 282 + src/main/webapp/css/themes/metro/datalist.css | 95 + src/main/webapp/css/themes/metro/datebox.css | 36 + src/main/webapp/css/themes/metro/dialog.css | 47 + src/main/webapp/css/themes/metro/easyui.css | 3166 +++ src/main/webapp/css/themes/metro/filebox.css | 20 + .../themes/metro/images/accordion_arrows.png | Bin 0 -> 184 bytes .../webapp/css/themes/metro/images/blank.gif | Bin 0 -> 43 bytes .../themes/metro/images/calendar_arrows.png | Bin 0 -> 173 bytes .../css/themes/metro/images/combo_arrow.png | Bin 0 -> 117 bytes .../themes/metro/images/datagrid_icons.png | Bin 0 -> 307 bytes .../css/themes/metro/images/datebox_arrow.png | Bin 0 -> 626 bytes .../css/themes/metro/images/layout_arrows.png | Bin 0 -> 319 bytes .../css/themes/metro/images/linkbutton_bg.png | Bin 0 -> 1274 bytes .../css/themes/metro/images/loading.gif | Bin 0 -> 1737 bytes .../css/themes/metro/images/menu_arrows.png | Bin 0 -> 160 bytes .../themes/metro/images/messager_icons.png | Bin 0 -> 6116 bytes .../themes/metro/images/pagination_icons.png | Bin 0 -> 628 bytes .../css/themes/metro/images/panel_tools.png | Bin 0 -> 194 bytes .../themes/metro/images/passwordbox_close.png | Bin 0 -> 159 bytes .../themes/metro/images/passwordbox_open.png | Bin 0 -> 165 bytes .../themes/metro/images/searchbox_button.png | Bin 0 -> 813 bytes .../css/themes/metro/images/slider_handle.png | Bin 0 -> 863 bytes .../themes/metro/images/spinner_arrows.png | Bin 0 -> 149 bytes .../css/themes/metro/images/tabs_icons.png | Bin 0 -> 150 bytes .../css/themes/metro/images/tagbox_icons.png | Bin 0 -> 134 bytes .../css/themes/metro/images/tree_icons.png | Bin 0 -> 3115 bytes .../metro/images/validatebox_warning.png | Bin 0 -> 921 bytes src/main/webapp/css/themes/metro/layout.css | 150 + .../webapp/css/themes/metro/linkbutton.css | 203 + src/main/webapp/css/themes/metro/menu.css | 119 + .../webapp/css/themes/metro/menubutton.css | 94 + src/main/webapp/css/themes/metro/messager.css | 44 + .../webapp/css/themes/metro/numberbox.css | 0 .../webapp/css/themes/metro/pagination.css | 71 + src/main/webapp/css/themes/metro/panel.css | 259 + .../webapp/css/themes/metro/passwordbox.css | 6 + .../webapp/css/themes/metro/progressbar.css | 32 + .../webapp/css/themes/metro/propertygrid.css | 28 + .../webapp/css/themes/metro/searchbox.css | 61 + src/main/webapp/css/themes/metro/slider.css | 101 + src/main/webapp/css/themes/metro/spinner.css | 58 + .../webapp/css/themes/metro/splitbutton.css | 12 + .../webapp/css/themes/metro/switchbutton.css | 77 + src/main/webapp/css/themes/metro/tabs.css | 377 + src/main/webapp/css/themes/metro/tagbox.css | 44 + src/main/webapp/css/themes/metro/textbox.css | 139 + src/main/webapp/css/themes/metro/tooltip.css | 103 + src/main/webapp/css/themes/metro/tree.css | 161 + .../webapp/css/themes/metro/validatebox.css | 5 + src/main/webapp/css/themes/metro/window.css | 177 + src/main/webapp/css/themes/mobile.css | 380 + src/main/webapp/favicon.ico | Bin 0 -> 4286 bytes src/main/webapp/images/0.jpg | Bin 0 -> 140910 bytes src/main/webapp/images/00.jpg | Bin 0 -> 142919 bytes src/main/webapp/images/000.jpg | Bin 0 -> 136252 bytes src/main/webapp/images/1.png | Bin 0 -> 775805 bytes src/main/webapp/images/2.png | Bin 0 -> 8789 bytes src/main/webapp/images/4.png | Bin 0 -> 60440 bytes src/main/webapp/images/Login.jpg | Bin 0 -> 406901 bytes src/main/webapp/images/Login1.jpg | Bin 0 -> 328016 bytes src/main/webapp/images/Login11.jpg | Bin 0 -> 298796 bytes src/main/webapp/images/Login12.jpg | Bin 0 -> 380928 bytes src/main/webapp/images/Login2.jpg | Bin 0 -> 419919 bytes src/main/webapp/images/activeCheck.png | Bin 0 -> 1273 bytes src/main/webapp/images/add.png | Bin 0 -> 14613 bytes src/main/webapp/images/bb1.jpg | Bin 0 -> 70740 bytes src/main/webapp/images/bg1.jpg | Bin 0 -> 262905 bytes src/main/webapp/images/bg2.jpg | Bin 0 -> 337955 bytes src/main/webapp/images/bgGround.jpg | Bin 0 -> 490809 bytes src/main/webapp/images/bgGround3.jpg | Bin 0 -> 456992 bytes src/main/webapp/images/carlogo.png | Bin 0 -> 112191 bytes src/main/webapp/images/clear.png | Bin 0 -> 272 bytes src/main/webapp/images/close.png | Bin 0 -> 531 bytes src/main/webapp/images/favicon.png | Bin 0 -> 1563 bytes src/main/webapp/images/jblogo.png | Bin 0 -> 11358 bytes src/main/webapp/images/loginBg.jpg | Bin 0 -> 333399 bytes src/main/webapp/images/loginBg2.jpg | Bin 0 -> 406901 bytes src/main/webapp/images/mainbk.png | Bin 0 -> 261 bytes src/main/webapp/images/menuArrow.png | Bin 0 -> 14667 bytes src/main/webapp/images/menuArrowActive.png | Bin 0 -> 14653 bytes src/main/webapp/images/powerIcon.png | Bin 0 -> 294 bytes src/main/webapp/images/replaceMoney.png | Bin 0 -> 4076 bytes src/main/webapp/images/replaceWalkCar.png | Bin 0 -> 2507 bytes src/main/webapp/images/roadRepair.png | Bin 0 -> 3416 bytes src/main/webapp/images/save.png | Bin 0 -> 1257 bytes src/main/webapp/images/search.png | Bin 0 -> 292 bytes src/main/webapp/images/sendWater.png | Bin 0 -> 3599 bytes src/main/webapp/images/sign.png | Bin 0 -> 1278 bytes src/main/webapp/images/timg.jpg | Bin 0 -> 25206 bytes src/main/webapp/images/topLogo.png | Bin 0 -> 6274 bytes src/main/webapp/images/top_bg.png | Bin 0 -> 16521 bytes src/main/webapp/images/top_bg2.png | Bin 0 -> 17878 bytes src/main/webapp/images/topbgnew.png | Bin 0 -> 16457 bytes src/main/webapp/img/500.jpg | Bin 0 -> 115965 bytes src/main/webapp/index.jsp | 27 + .../webapp/js/DatePicker/My97DatePicker.htm | 49 + src/main/webapp/js/DatePicker/WdatePicker.js | 39 + src/main/webapp/js/DatePicker/calendar.js | 5 + src/main/webapp/js/DatePicker/config.js | 12 + src/main/webapp/js/DatePicker/lang/en.js | 14 + src/main/webapp/js/DatePicker/lang/zh-cn.js | 14 + src/main/webapp/js/DatePicker/lang/zh-tw.js | 14 + .../webapp/js/DatePicker/skin/WdatePicker.css | 15 + src/main/webapp/js/DatePicker/skin/date.png | Bin 0 -> 1573 bytes .../webapp/js/DatePicker/skin/datePicker.gif | Bin 0 -> 1043 bytes .../js/DatePicker/skin/default/datepicker.css | 246 + .../webapp/js/DatePicker/skin/default/img.gif | Bin 0 -> 1578 bytes .../webapp/js/DatePicker/skin/whyGreen/bg.jpg | Bin 0 -> 307 bytes .../DatePicker/skin/whyGreen/datepicker.css | 256 + .../js/DatePicker/skin/whyGreen/img.gif | Bin 0 -> 1679 bytes src/main/webapp/js/business/balance.js | 462 + src/main/webapp/js/business/caseEnter.js | 257 + src/main/webapp/js/business/cases.js | 294 + src/main/webapp/js/business/coupon.js | 467 + src/main/webapp/js/business/coupon_query.js | 203 + src/main/webapp/js/business/enterprise.js | 175 + src/main/webapp/js/business/orderCheck.js | 300 + src/main/webapp/js/business/orderCheckAll.js | 245 + src/main/webapp/js/business/orderCheckHIs.js | 247 + src/main/webapp/js/business/recharge_query.js | 153 + src/main/webapp/js/business/role.js | 307 + src/main/webapp/js/business/sue.js | 357 + src/main/webapp/js/business/supplier.js | 698 + src/main/webapp/js/business/user.js | 337 + src/main/webapp/js/clear.js | 73 + src/main/webapp/js/common.js | 722 + src/main/webapp/js/easyloader.js | 190 + src/main/webapp/js/jquery.easyui.min.js | 16078 ++++++++++++++++ src/main/webapp/js/jquery.easyui.mobile.js | 141 + src/main/webapp/js/jquery.jqprint-0.3.js | 74 + src/main/webapp/js/jquery.min.js | 5 + src/main/webapp/js/loading.js | 15 + src/main/webapp/js/locale/easyui-lang-af.js | 44 + src/main/webapp/js/locale/easyui-lang-am.js | 46 + src/main/webapp/js/locale/easyui-lang-ar.js | 45 + src/main/webapp/js/locale/easyui-lang-bg.js | 44 + src/main/webapp/js/locale/easyui-lang-ca.js | 44 + src/main/webapp/js/locale/easyui-lang-cs.js | 44 + src/main/webapp/js/locale/easyui-lang-cz.js | 44 + src/main/webapp/js/locale/easyui-lang-da.js | 44 + src/main/webapp/js/locale/easyui-lang-de.js | 63 + src/main/webapp/js/locale/easyui-lang-el.js | 45 + src/main/webapp/js/locale/easyui-lang-en.js | 45 + src/main/webapp/js/locale/easyui-lang-es.js | 45 + src/main/webapp/js/locale/easyui-lang-fr.js | 44 + src/main/webapp/js/locale/easyui-lang-it.js | 64 + src/main/webapp/js/locale/easyui-lang-jp.js | 45 + src/main/webapp/js/locale/easyui-lang-ko.js | 45 + src/main/webapp/js/locale/easyui-lang-nl.js | 44 + src/main/webapp/js/locale/easyui-lang-pl.js | 45 + .../webapp/js/locale/easyui-lang-pt_BR.js | 45 + src/main/webapp/js/locale/easyui-lang-ru.js | 46 + .../webapp/js/locale/easyui-lang-sv_SE.js | 45 + src/main/webapp/js/locale/easyui-lang-tr.js | 59 + .../webapp/js/locale/easyui-lang-zh_CN.js | 66 + .../webapp/js/locale/easyui-lang-zh_TW.js | 48 + src/main/webapp/js/page.js | 123 + .../webapp/js/plugins/jquery.accordion.js | 350 + src/main/webapp/js/plugins/jquery.calendar.js | 403 + src/main/webapp/js/plugins/jquery.combo.js | 386 + src/main/webapp/js/plugins/jquery.combobox.js | 587 + .../webapp/js/plugins/jquery.combogrid.js | 346 + .../webapp/js/plugins/jquery.combotree.js | 237 + .../webapp/js/plugins/jquery.combotreegrid.js | 270 + src/main/webapp/js/plugins/jquery.datagrid.js | 2574 +++ src/main/webapp/js/plugins/jquery.datalist.js | 136 + src/main/webapp/js/plugins/jquery.datebox.js | 212 + .../webapp/js/plugins/jquery.datetimebox.js | 178 + .../js/plugins/jquery.datetimespinner.js | 61 + src/main/webapp/js/plugins/jquery.dialog.js | 136 + .../webapp/js/plugins/jquery.draggable.js | 304 + .../webapp/js/plugins/jquery.droppable.js | 62 + src/main/webapp/js/plugins/jquery.filebox.js | 98 + src/main/webapp/js/plugins/jquery.form.js | 410 + src/main/webapp/js/plugins/jquery.layout.js | 518 + .../webapp/js/plugins/jquery.linkbutton.js | 184 + src/main/webapp/js/plugins/jquery.menu.js | 491 + .../webapp/js/plugins/jquery.menubutton.js | 128 + src/main/webapp/js/plugins/jquery.messager.js | 187 + src/main/webapp/js/plugins/jquery.mobile.js | 141 + .../webapp/js/plugins/jquery.numberbox.js | 178 + .../webapp/js/plugins/jquery.numberspinner.js | 58 + .../webapp/js/plugins/jquery.pagination.js | 296 + src/main/webapp/js/plugins/jquery.panel.js | 674 + src/main/webapp/js/plugins/jquery.parser.js | 386 + .../webapp/js/plugins/jquery.passwordbox.js | 156 + .../webapp/js/plugins/jquery.progressbar.js | 84 + .../webapp/js/plugins/jquery.propertygrid.js | 330 + .../webapp/js/plugins/jquery.resizable.js | 170 + .../webapp/js/plugins/jquery.searchbox.js | 132 + src/main/webapp/js/plugins/jquery.slider.js | 339 + src/main/webapp/js/plugins/jquery.spinner.js | 129 + .../webapp/js/plugins/jquery.splitbutton.js | 49 + .../webapp/js/plugins/jquery.switchbutton.js | 193 + src/main/webapp/js/plugins/jquery.tabs.js | 708 + src/main/webapp/js/plugins/jquery.tagbox.js | 218 + src/main/webapp/js/plugins/jquery.textbox.js | 559 + .../webapp/js/plugins/jquery.timespinner.js | 149 + src/main/webapp/js/plugins/jquery.tooltip.js | 234 + src/main/webapp/js/plugins/jquery.tree.js | 1247 ++ src/main/webapp/js/plugins/jquery.treegrid.js | 1350 ++ .../webapp/js/plugins/jquery.validatebox.js | 310 + src/main/webapp/js/plugins/jquery.window.js | 311 + src/main/webapp/login.jsp | 276 + src/main/webapp/page/amap/amap.jsp | 409 + src/main/webapp/page/amap/cityList.jsp | 33 + src/main/webapp/page/amap/citylist.js | 151 + src/main/webapp/page/amap/css/common.css | 626 + .../page/amap/css/jquery.autocomplete.css | 48 + src/main/webapp/page/amap/css/placeSearch.css | 88 + .../page/amap/js/cityDialog/citySearch.js | 146 + .../webapp/page/amap/js/cityDialog/city_u.js | Bin 0 -> 42162 bytes .../page/amap/js/cityDialog/citylist.js | 151 + .../page/amap/js/jquery.autocomplete.js | 893 + src/main/webapp/page/amap/js/layer/layer.js | 2 + src/main/webapp/page/balance.jsp | 262 + src/main/webapp/page/caseDetail.jsp | 709 + src/main/webapp/page/caseInfo.jsp | 306 + src/main/webapp/page/caseInfoEnter.jsp | 248 + src/main/webapp/page/common.jsp | 11 + src/main/webapp/page/coupon_consume.jsp | 240 + .../webapp/page/coupon_consume_history.jsp | 175 + src/main/webapp/page/coupon_consume_query.jsp | 360 + .../webapp/page/coupon_recharge_query.jsp | 145 + src/main/webapp/page/enterprise.jsp | 464 + src/main/webapp/page/footer.jsp | 306 + src/main/webapp/page/header.jsp | 110 + src/main/webapp/page/home.jsp | 196 + src/main/webapp/page/home1.jsp | 10 + src/main/webapp/page/modifyPassword.jsp | 180 + src/main/webapp/page/orderCheck.jsp | 346 + src/main/webapp/page/orderCheckAll.jsp | 363 + src/main/webapp/page/orderCheckHis.jsp | 244 + src/main/webapp/page/role.jsp | 203 + src/main/webapp/page/sue.jsp | 321 + src/main/webapp/page/supplier.jsp | 548 + src/main/webapp/page/topMenu.jsp | 26 + src/main/webapp/page/user.jsp | 390 + src/main/webapp/page/validate.jsp | 78 + src/test/java/Test.java | 9 + 834 files changed, 117477 insertions(+) create mode 100644 .classpath create mode 100644 .gitignore create mode 100644 .idea/.name create mode 100644 .idea/artifacts/jlr_war.xml create mode 100644 .idea/artifacts/jlr_war_exploded.xml create mode 100644 .idea/compiler.xml create mode 100644 .idea/encodings.xml create mode 100644 .idea/libraries/Maven__antlr_antlr_2_7_7.xml create mode 100644 .idea/libraries/Maven__aopalliance_aopalliance_1_0.xml create mode 100644 .idea/libraries/Maven__asm_asm_3_1.xml create mode 100644 .idea/libraries/Maven__cglib_cglib_2_2.xml create mode 100644 .idea/libraries/Maven__cglib_cglib_nodep_2_2_2.xml create mode 100644 .idea/libraries/Maven__com_alibaba_druid_1_0_15.xml create mode 100644 .idea/libraries/Maven__com_alibaba_fastjson_1_1_39.xml create mode 100644 .idea/libraries/Maven__com_caucho_hessian_4_0_33.xml create mode 100644 .idea/libraries/Maven__com_github_virtuald_curvesapi_1_03.xml create mode 100644 .idea/libraries/Maven__com_google_guava_guava_17_0.xml create mode 100644 .idea/libraries/Maven__com_oracle_ojdbc6_11_2_0_3.xml create mode 100644 .idea/libraries/Maven__commons_beanutils_commons_beanutils_1_8_0.xml create mode 100644 .idea/libraries/Maven__commons_codec_commons_codec_1_10.xml create mode 100644 .idea/libraries/Maven__commons_collections_commons_collections_3_2_1.xml create mode 100644 .idea/libraries/Maven__commons_fileupload_commons_fileupload_1_2_2.xml create mode 100644 .idea/libraries/Maven__commons_httpclient_commons_httpclient_3_0.xml create mode 100644 .idea/libraries/Maven__commons_io_commons_io_1_3_2.xml create mode 100644 .idea/libraries/Maven__commons_lang_commons_lang_2_5.xml create mode 100644 .idea/libraries/Maven__commons_logging_commons_logging_1_1_3.xml create mode 100644 .idea/libraries/Maven__dom4j_dom4j_1_6_1.xml create mode 100644 .idea/libraries/Maven__javax_faces_jsf_api_1_2_04.xml create mode 100644 .idea/libraries/Maven__javax_faces_jsf_impl_1_2_04.xml create mode 100644 .idea/libraries/Maven__javax_servlet_javax_servlet_api_3_0_1.xml create mode 100644 .idea/libraries/Maven__javax_servlet_jsp_jsp_api_2_1.xml create mode 100644 .idea/libraries/Maven__javax_servlet_jstl_1_2.xml create mode 100644 .idea/libraries/Maven__javax_transaction_jta_1_1.xml create mode 100644 .idea/libraries/Maven__jstl_jstl_1_2.xml create mode 100644 .idea/libraries/Maven__junit_junit_4_11.xml create mode 100644 .idea/libraries/Maven__mysql_mysql_connector_java_5_1_21.xml create mode 100644 .idea/libraries/Maven__net_sf_ehcache_ehcache_core_2_4_7.xml create mode 100644 .idea/libraries/Maven__net_sf_ehcache_ehcache_web_2_0_4.xml create mode 100644 .idea/libraries/Maven__net_sf_ezmorph_ezmorph_1_0_6.xml create mode 100644 .idea/libraries/Maven__net_sf_json_lib_json_lib_jdk15_2_4.xml create mode 100644 .idea/libraries/Maven__org_apache_ant_ant_1_8_2.xml create mode 100644 .idea/libraries/Maven__org_apache_ant_ant_launcher_1_8_2.xml create mode 100644 .idea/libraries/Maven__org_apache_commons_commons_lang3_3_3_2.xml create mode 100644 .idea/libraries/Maven__org_apache_httpcomponents_httpclient_4_3_6.xml create mode 100644 .idea/libraries/Maven__org_apache_httpcomponents_httpcore_4_3_3.xml create mode 100644 .idea/libraries/Maven__org_apache_openejb_javaee_api_5_0_1.xml create mode 100644 .idea/libraries/Maven__org_apache_poi_poi_3_14.xml create mode 100644 .idea/libraries/Maven__org_apache_poi_poi_ooxml_3_14.xml create mode 100644 .idea/libraries/Maven__org_apache_poi_poi_ooxml_schemas_3_14.xml create mode 100644 .idea/libraries/Maven__org_apache_poi_poi_scratchpad_3_14.xml create mode 100644 .idea/libraries/Maven__org_apache_servicemix_bundles_org_apache_servicemix_bundles_xerces_2_11_0_1.xml create mode 100644 .idea/libraries/Maven__org_apache_xmlbeans_xmlbeans_2_6_0.xml create mode 100644 .idea/libraries/Maven__org_aspectj_aspectjrt_1_6_9.xml create mode 100644 .idea/libraries/Maven__org_aspectj_aspectjweaver_1_6_9.xml create mode 100644 .idea/libraries/Maven__org_codehaus_jackson_jackson_core_asl_1_9_7.xml create mode 100644 .idea/libraries/Maven__org_codehaus_jackson_jackson_mapper_asl_1_9_7.xml create mode 100644 .idea/libraries/Maven__org_hamcrest_hamcrest_core_1_3.xml create mode 100644 .idea/libraries/Maven__org_hibernate_common_hibernate_commons_annotations_4_0_1_Final.xml create mode 100644 .idea/libraries/Maven__org_hibernate_hibernate_core_4_1_6_Final.xml create mode 100644 .idea/libraries/Maven__org_hibernate_hibernate_entitymanager_4_1_6_Final.xml create mode 100644 .idea/libraries/Maven__org_hibernate_hibernate_envers_4_1_6_Final.xml create mode 100644 .idea/libraries/Maven__org_hibernate_javax_persistence_hibernate_jpa_2_0_api_1_0_1_Final.xml create mode 100644 .idea/libraries/Maven__org_javassist_javassist_3_15_0_GA.xml create mode 100644 .idea/libraries/Maven__org_jboss_logging_jboss_logging_3_1_0_GA.xml create mode 100644 .idea/libraries/Maven__org_jboss_spec_javax_transaction_jboss_transaction_api_1_1_spec_1_0_0_Final.xml create mode 100644 .idea/libraries/Maven__org_jodd_jodd_3_3_8.xml create mode 100644 .idea/libraries/Maven__org_json_json_20160810.xml create mode 100644 .idea/libraries/Maven__org_quartz_scheduler_quartz_1_8_4.xml create mode 100644 .idea/libraries/Maven__org_slf4j_slf4j_api_1_7_0.xml create mode 100644 .idea/libraries/Maven__org_slf4j_slf4j_simple_1_7_0.xml create mode 100644 .idea/libraries/Maven__org_springframework_security_spring_security_acl_3_1_1_RELEASE.xml create mode 100644 .idea/libraries/Maven__org_springframework_security_spring_security_config_3_1_1_RELEASE.xml create mode 100644 .idea/libraries/Maven__org_springframework_security_spring_security_core_3_1_1_RELEASE.xml create mode 100644 .idea/libraries/Maven__org_springframework_security_spring_security_core_tiger_2_0_7_RELEASE.xml create mode 100644 .idea/libraries/Maven__org_springframework_security_spring_security_taglibs_3_1_1_RELEASE.xml create mode 100644 .idea/libraries/Maven__org_springframework_security_spring_security_web_3_1_1_RELEASE.xml create mode 100644 .idea/libraries/Maven__org_springframework_spring_aop_3_2_5_RELEASE.xml create mode 100644 .idea/libraries/Maven__org_springframework_spring_beans_3_2_5_RELEASE.xml create mode 100644 .idea/libraries/Maven__org_springframework_spring_context_3_2_5_RELEASE.xml create mode 100644 .idea/libraries/Maven__org_springframework_spring_context_support_3_2_5_RELEASE.xml create mode 100644 .idea/libraries/Maven__org_springframework_spring_core_3_2_5_RELEASE.xml create mode 100644 .idea/libraries/Maven__org_springframework_spring_expression_3_2_5_RELEASE.xml create mode 100644 .idea/libraries/Maven__org_springframework_spring_jdbc_3_2_5_RELEASE.xml create mode 100644 .idea/libraries/Maven__org_springframework_spring_orm_3_2_5_RELEASE.xml create mode 100644 .idea/libraries/Maven__org_springframework_spring_tx_3_2_5_RELEASE.xml create mode 100644 .idea/libraries/Maven__org_springframework_spring_web_3_2_5_RELEASE.xml create mode 100644 .idea/libraries/Maven__org_springframework_spring_webmvc_3_2_5_RELEASE.xml create mode 100644 .idea/libraries/Maven__sax_sax_2_0_1.xml create mode 100644 .idea/libraries/Maven__stax_stax_api_1_0_1.xml create mode 100644 .idea/libraries/Maven__xml_apis_xml_apis_1_4_01.xml create mode 100644 .idea/misc.xml create mode 100644 .idea/modules.xml create mode 100644 .idea/uiDesigner.xml create mode 100644 .idea/workspace.xml create mode 100644 .project create mode 100644 .settings/.jsdtscope create mode 100644 .settings/org.eclipse.core.resources.prefs create mode 100644 .settings/org.eclipse.jdt.core.prefs create mode 100644 .settings/org.eclipse.m2e.core.prefs create mode 100644 .settings/org.eclipse.wst.common.component create mode 100644 .settings/org.eclipse.wst.common.project.facet.core.xml create mode 100644 .settings/org.eclipse.wst.jsdt.ui.superType.container create mode 100644 .settings/org.eclipse.wst.jsdt.ui.superType.name create mode 100644 .settings/org.eclipse.wst.validation.prefs create mode 100644 jlr.iml create mode 100644 pom.xml create mode 100644 src/main/java/com/dubh/common/dao/Dao.java create mode 100644 src/main/java/com/dubh/common/dao/hibernate/BaseDaoHibernate.java create mode 100644 src/main/java/com/dubh/common/dto/BaseDto.java create mode 100644 src/main/java/com/dubh/common/file/Downfile.java create mode 100644 src/main/java/com/dubh/common/file/UploadFile.java create mode 100644 src/main/java/com/dubh/sysconfig/EacheConfig.java create mode 100644 src/main/java/com/dubh/sysconfig/ehcache.xml create mode 100644 src/main/java/com/dubh/sysconfig/group.properties create mode 100644 src/main/java/com/dubh/syslog/annotation/SystemControllerAfterLog.java create mode 100644 src/main/java/com/dubh/syslog/annotation/SystemControllerBeforeLog.java create mode 100644 src/main/java/com/dubh/syslog/annotation/SystemLogAspect.java create mode 100644 src/main/java/com/dubh/syslog/annotation/SystemServiceLog.java create mode 100644 src/main/java/com/hessian/HessianService.java create mode 100644 src/main/java/com/ljh/excel/annotation/ColumnAnnotation.java create mode 100644 src/main/java/com/ljh/excel/bean/BaseBean.java create mode 100644 src/main/java/com/ljh/excel/bean/factory/ExcelFactory.java create mode 100644 src/main/java/com/ljh/excel/parser/BaseParser.java create mode 100644 src/main/java/com/ljh/excel/parser/BeanOperation.java create mode 100644 src/main/java/com/ljh/excel/parser/FromHowTo.java create mode 100644 src/main/java/com/ljh/excel/parser/Parser.java create mode 100644 src/main/java/com/ljh/excel/test/MySqlTest.java create mode 100644 src/main/java/com/ljh/excel/test/User.java create mode 100644 src/main/java/com/quartz/UnlockOrder.java create mode 100644 src/main/java/com/quartz/queryservlet.java create mode 100644 src/main/java/com/util/AutoDtoFile.java create mode 100644 src/main/java/com/util/BaiDuDistanceKm.java create mode 100644 src/main/java/com/util/BaiduLatitudeUtils.java create mode 100644 src/main/java/com/util/BuilderExcel.java create mode 100644 src/main/java/com/util/Check.java create mode 100644 src/main/java/com/util/ComTreeInfo.java create mode 100644 src/main/java/com/util/Configmessage.java create mode 100644 src/main/java/com/util/Distance.java create mode 100644 src/main/java/com/util/Escape.java create mode 100644 src/main/java/com/util/NetUtil.java create mode 100644 src/main/java/com/util/NewFieldUtileTools.java create mode 100644 src/main/java/com/util/OfficeUtil.java create mode 100644 src/main/java/com/util/OutCall.java create mode 100644 src/main/java/com/util/PinYin2Abbreviation.java create mode 100644 src/main/java/com/util/ReadExcel.java create mode 100644 src/main/java/com/util/ReadExcel2003.java create mode 100644 src/main/java/com/util/ReadExcel2007.java create mode 100644 src/main/java/com/util/RequestMessage.java create mode 100644 src/main/java/com/util/RequestUtil.java create mode 100644 src/main/java/com/util/SendMessage.java create mode 100644 src/main/java/com/util/SetJsonObject.java create mode 100644 src/main/java/com/util/SpringUtil.java create mode 100644 src/main/java/com/util/Student.java create mode 100644 src/main/java/com/util/SystemTool.java create mode 100644 src/main/java/com/util/UniqId.java create mode 100644 src/main/java/com/util/UtilTools.java create mode 100644 src/main/java/com/util/Vo.java create mode 100644 src/main/java/com/util/ZipUtil.java create mode 100644 src/main/java/com/util/yzcode/BuilderCode.java create mode 100644 src/main/java/com/zhongdao/jlr/BaiduTest.java create mode 100644 src/main/java/com/zhongdao/jlr/Test.java create mode 100644 src/main/java/com/zhongdao/jlr/business/action/BaseAction.java create mode 100644 src/main/java/com/zhongdao/jlr/business/action/CasesAction.java create mode 100644 src/main/java/com/zhongdao/jlr/business/action/CouponAction.java create mode 100644 src/main/java/com/zhongdao/jlr/business/action/EnterpriseAction.java create mode 100644 src/main/java/com/zhongdao/jlr/business/action/OrderCheckAction.java create mode 100644 src/main/java/com/zhongdao/jlr/business/action/RoleAction.java create mode 100644 src/main/java/com/zhongdao/jlr/business/action/SupplierAction.java create mode 100644 src/main/java/com/zhongdao/jlr/business/action/UserAction.java create mode 100644 src/main/java/com/zhongdao/jlr/business/dao/BaseDao.java create mode 100644 src/main/java/com/zhongdao/jlr/business/dao/CaseDao.java create mode 100644 src/main/java/com/zhongdao/jlr/business/dao/CouponDao.java create mode 100644 src/main/java/com/zhongdao/jlr/business/dao/EnterpriseDao.java create mode 100644 src/main/java/com/zhongdao/jlr/business/dao/OrderCheckDao.java create mode 100644 src/main/java/com/zhongdao/jlr/business/dao/RoleDao.java create mode 100644 src/main/java/com/zhongdao/jlr/business/dao/SupplierDao.java create mode 100644 src/main/java/com/zhongdao/jlr/business/dao/UserInfoDao.java create mode 100644 src/main/java/com/zhongdao/jlr/business/dao/impl/BaseDaoImpl.java create mode 100644 src/main/java/com/zhongdao/jlr/business/dao/impl/CaseDaoImpl.java create mode 100644 src/main/java/com/zhongdao/jlr/business/dao/impl/CouponDaoImpl.java create mode 100644 src/main/java/com/zhongdao/jlr/business/dao/impl/EnterpriseDaoImpl.java create mode 100644 src/main/java/com/zhongdao/jlr/business/dao/impl/OrderCheckDaoImpl.java create mode 100644 src/main/java/com/zhongdao/jlr/business/dao/impl/RoleDaoImpl.java create mode 100644 src/main/java/com/zhongdao/jlr/business/dao/impl/SupplierDaoImpl.java create mode 100644 src/main/java/com/zhongdao/jlr/business/dao/impl/UserInfoDaoImpl.java create mode 100644 src/main/java/com/zhongdao/jlr/business/interceptor/UserInterceptor.java create mode 100644 src/main/java/com/zhongdao/jlr/business/listener/AutoRunServlet.java create mode 100644 src/main/java/com/zhongdao/jlr/business/listener/StartupListener.java create mode 100644 src/main/java/com/zhongdao/jlr/business/service/BaseService.java create mode 100644 src/main/java/com/zhongdao/jlr/business/service/CasesListService.java create mode 100644 src/main/java/com/zhongdao/jlr/business/service/CouponService.java create mode 100644 src/main/java/com/zhongdao/jlr/business/service/EnterpriseService.java create mode 100644 src/main/java/com/zhongdao/jlr/business/service/OrderCheckService.java create mode 100644 src/main/java/com/zhongdao/jlr/business/service/RoleService.java create mode 100644 src/main/java/com/zhongdao/jlr/business/service/SupplierService.java create mode 100644 src/main/java/com/zhongdao/jlr/business/service/UserInfoService.java create mode 100644 src/main/java/com/zhongdao/jlr/business/service/impl/BaseServiceImpl.java create mode 100644 src/main/java/com/zhongdao/jlr/business/service/impl/CasesListServiceImpl.java create mode 100644 src/main/java/com/zhongdao/jlr/business/service/impl/CouponServiceImpl.java create mode 100644 src/main/java/com/zhongdao/jlr/business/service/impl/EnterpriseServiceImpl.java create mode 100644 src/main/java/com/zhongdao/jlr/business/service/impl/OrderCheckServiceImpl.java create mode 100644 src/main/java/com/zhongdao/jlr/business/service/impl/RoleServiceImpl.java create mode 100644 src/main/java/com/zhongdao/jlr/business/service/impl/SupplierServiceImpl.java create mode 100644 src/main/java/com/zhongdao/jlr/business/service/impl/UserInfoServiceImpl.java create mode 100644 src/main/java/com/zhongdao/jlr/business/servlet/ReceiveCustomerInfoServlet.java create mode 100644 src/main/java/com/zhongdao/jlr/business/vo/ConsumeQueryExcelVO.java create mode 100644 src/main/java/com/zhongdao/jlr/business/vo/Contract.java create mode 100644 src/main/java/com/zhongdao/jlr/business/vo/CouponConsumeJlr.java create mode 100644 src/main/java/com/zhongdao/jlr/business/vo/CouponJlrVO.java create mode 100644 src/main/java/com/zhongdao/jlr/business/vo/CouponRechargeJlr.java create mode 100644 src/main/java/com/zhongdao/jlr/business/vo/Destination.java create mode 100644 src/main/java/com/zhongdao/jlr/business/vo/Enterprise.java create mode 100644 src/main/java/com/zhongdao/jlr/business/vo/EnterpriseExcelVO.java create mode 100644 src/main/java/com/zhongdao/jlr/business/vo/JLRMenu.java create mode 100644 src/main/java/com/zhongdao/jlr/business/vo/JLRRMenu.java create mode 100644 src/main/java/com/zhongdao/jlr/business/vo/LoginUserVo.java create mode 100644 src/main/java/com/zhongdao/jlr/business/vo/OrderCheckExcelVO.java create mode 100644 src/main/java/com/zhongdao/jlr/business/vo/PageInfo.java create mode 100644 src/main/java/com/zhongdao/jlr/business/vo/RechangeQueryExcelVO.java create mode 100644 src/main/java/com/zhongdao/jlr/business/vo/UserOrderCSVVO.java create mode 100644 src/main/java/com/zhongdao/jlr/business/vo/UserOrderExcelVO.java create mode 100644 src/main/java/com/zhongdao/jlr/business/vo/UserOrderViewVO.java create mode 100644 src/main/java/com/zhongdao/jlr/customer/ResponseInfo.java create mode 100644 src/main/java/com/zhongdao/jlr/customer/TextConfig.java create mode 100644 src/main/java/com/zhongdao/jlr/customer/dao/CustomerDao.java create mode 100644 src/main/java/com/zhongdao/jlr/customer/dao/impl/CustomerDaoImpl.java create mode 100644 src/main/java/com/zhongdao/jlr/customer/interceptor/UserInterceptor.java create mode 100644 src/main/java/com/zhongdao/jlr/customer/service/CustomerService.java create mode 100644 src/main/java/com/zhongdao/jlr/customer/web/CustomerController.java create mode 100644 src/main/java/com/zhongdao/jlr/customer/web/vo/ClaimsOrderVo.java create mode 100644 src/main/java/com/zhongdao/jlr/customer/web/vo/InsuranceContext.java create mode 100644 src/main/java/com/zhongdao/jlr/customer/xss/XssFilter.java create mode 100644 src/main/java/com/zhongdao/jlr/customer/xss/XssHttpServletRequestWrapper.java create mode 100644 src/main/java/com/zhongdao/jlr/enums/Week.java create mode 100644 src/main/java/com/zhongdao/jlr/pojo/BaseMenu.java create mode 100644 src/main/java/com/zhongdao/jlr/pojo/BaseRole.java create mode 100644 src/main/java/com/zhongdao/jlr/pojo/BaseRoleAuthority.java create mode 100644 src/main/java/com/zhongdao/jlr/pojo/BaseUser.java create mode 100644 src/main/java/com/zhongdao/jlr/pojo/BaseUserRole.java create mode 100644 src/main/java/com/zhongdao/jlr/pojo/CouponConsumeJlrPO.java create mode 100644 src/main/java/com/zhongdao/jlr/pojo/CouponRechargeJlrPO.java create mode 100644 src/main/java/com/zhongdao/jlr/pojo/EnterpriseJlr.java create mode 100644 src/main/java/com/zhongdao/jlr/pojo/JLRAuthority.java create mode 100644 src/main/java/com/zhongdao/jlr/pojo/JLRCoupon.java create mode 100644 src/main/java/com/zhongdao/jlr/pojo/JLRDestination.java create mode 100644 src/main/java/com/zhongdao/jlr/pojo/JLRRole.java create mode 100644 src/main/java/com/zhongdao/jlr/pojo/JLRSupplier.java create mode 100644 src/main/java/com/zhongdao/jlr/pojo/JLRUser.java create mode 100644 src/main/java/com/zhongdao/jlr/pojo/JLRUserContract.java create mode 100644 src/main/java/com/zhongdao/jlr/pojo/JLRepqr.java create mode 100644 src/main/java/com/zhongdao/jlr/util/DateUtil.java create mode 100644 src/main/java/com/zhongdao/jlr/util/ExportCSVUtil.java create mode 100644 src/main/java/com/zhongdao/jlr/util/GeoAddressCenter.java create mode 100644 src/main/java/com/zhongdao/jlr/util/HttpClientDownload.java create mode 100644 src/main/java/com/zhongdao/jlr/util/MD5.java create mode 100644 src/main/java/com/zhongdao/jlr/util/MTextUtils.java create mode 100644 src/main/java/com/zhongdao/jlr/util/XJson.java create mode 100644 src/main/resources/application/applicationContext-hibernate.xml create mode 100644 src/main/resources/business/applicationContext-customer.xml create mode 100644 src/main/resources/business/applicationContext-zengwp.xml create mode 100644 src/main/resources/eache/applicationContext-eache.xml create mode 100644 src/main/resources/files/Conditions.xlsx create mode 100644 src/main/resources/files/Outcomes.xlsx create mode 100644 src/main/webapp/404.html create mode 100644 src/main/webapp/500.html create mode 100644 src/main/webapp/META-INF/MANIFEST.MF create mode 100644 src/main/webapp/WEB-INF/mvc-dispatcher-servlet.xml create mode 100644 src/main/webapp/WEB-INF/web.xml create mode 100644 src/main/webapp/css/addDialog.css create mode 100644 src/main/webapp/css/demo.css create mode 100644 src/main/webapp/css/dialog.css create mode 100644 src/main/webapp/css/home.css create mode 100644 src/main/webapp/css/index.css create mode 100644 src/main/webapp/css/list.css create mode 100644 src/main/webapp/css/login.css create mode 100644 src/main/webapp/css/mc.css create mode 100644 src/main/webapp/css/page.css create mode 100644 src/main/webapp/css/printOut.css create mode 100644 src/main/webapp/css/search.css create mode 100644 src/main/webapp/css/style.css create mode 100644 src/main/webapp/css/themes/black/accordion.css create mode 100644 src/main/webapp/css/themes/black/calendar.css create mode 100644 src/main/webapp/css/themes/black/combo.css create mode 100644 src/main/webapp/css/themes/black/combobox.css create mode 100644 src/main/webapp/css/themes/black/datagrid.css create mode 100644 src/main/webapp/css/themes/black/datalist.css create mode 100644 src/main/webapp/css/themes/black/datebox.css create mode 100644 src/main/webapp/css/themes/black/dialog.css create mode 100644 src/main/webapp/css/themes/black/easyui.css create mode 100644 src/main/webapp/css/themes/black/filebox.css create mode 100644 src/main/webapp/css/themes/black/images/accordion_arrows.png create mode 100644 src/main/webapp/css/themes/black/images/blank.gif create mode 100644 src/main/webapp/css/themes/black/images/calendar_arrows.png create mode 100644 src/main/webapp/css/themes/black/images/combo_arrow.png create mode 100644 src/main/webapp/css/themes/black/images/datagrid_icons.png create mode 100644 src/main/webapp/css/themes/black/images/datebox_arrow.png create mode 100644 src/main/webapp/css/themes/black/images/layout_arrows.png create mode 100644 src/main/webapp/css/themes/black/images/linkbutton_bg.png create mode 100644 src/main/webapp/css/themes/black/images/loading.gif create mode 100644 src/main/webapp/css/themes/black/images/menu_arrows.png create mode 100644 src/main/webapp/css/themes/black/images/messager_icons.png create mode 100644 src/main/webapp/css/themes/black/images/pagination_icons.png create mode 100644 src/main/webapp/css/themes/black/images/panel_tools.png create mode 100644 src/main/webapp/css/themes/black/images/passwordbox_close.png create mode 100644 src/main/webapp/css/themes/black/images/passwordbox_open.png create mode 100644 src/main/webapp/css/themes/black/images/searchbox_button.png create mode 100644 src/main/webapp/css/themes/black/images/slider_handle.png create mode 100644 src/main/webapp/css/themes/black/images/spinner_arrows.png create mode 100644 src/main/webapp/css/themes/black/images/tabs_icons.png create mode 100644 src/main/webapp/css/themes/black/images/tagbox_icons.png create mode 100644 src/main/webapp/css/themes/black/images/tree_icons.png create mode 100644 src/main/webapp/css/themes/black/images/validatebox_warning.png create mode 100644 src/main/webapp/css/themes/black/layout.css create mode 100644 src/main/webapp/css/themes/black/linkbutton.css create mode 100644 src/main/webapp/css/themes/black/menu.css create mode 100644 src/main/webapp/css/themes/black/menubutton.css create mode 100644 src/main/webapp/css/themes/black/messager.css create mode 100644 src/main/webapp/css/themes/black/numberbox.css create mode 100644 src/main/webapp/css/themes/black/pagination.css create mode 100644 src/main/webapp/css/themes/black/panel.css create mode 100644 src/main/webapp/css/themes/black/passwordbox.css create mode 100644 src/main/webapp/css/themes/black/progressbar.css create mode 100644 src/main/webapp/css/themes/black/propertygrid.css create mode 100644 src/main/webapp/css/themes/black/searchbox.css create mode 100644 src/main/webapp/css/themes/black/slider.css create mode 100644 src/main/webapp/css/themes/black/spinner.css create mode 100644 src/main/webapp/css/themes/black/splitbutton.css create mode 100644 src/main/webapp/css/themes/black/switchbutton.css create mode 100644 src/main/webapp/css/themes/black/tabs.css create mode 100644 src/main/webapp/css/themes/black/tagbox.css create mode 100644 src/main/webapp/css/themes/black/textbox.css create mode 100644 src/main/webapp/css/themes/black/tooltip.css create mode 100644 src/main/webapp/css/themes/black/tree.css create mode 100644 src/main/webapp/css/themes/black/validatebox.css create mode 100644 src/main/webapp/css/themes/black/window.css create mode 100644 src/main/webapp/css/themes/bootstrap/accordion.css create mode 100644 src/main/webapp/css/themes/bootstrap/calendar.css create mode 100644 src/main/webapp/css/themes/bootstrap/combo.css create mode 100644 src/main/webapp/css/themes/bootstrap/combobox.css create mode 100644 src/main/webapp/css/themes/bootstrap/datagrid.css create mode 100644 src/main/webapp/css/themes/bootstrap/datalist.css create mode 100644 src/main/webapp/css/themes/bootstrap/datebox.css create mode 100644 src/main/webapp/css/themes/bootstrap/dialog.css create mode 100644 src/main/webapp/css/themes/bootstrap/easyui.css create mode 100644 src/main/webapp/css/themes/bootstrap/filebox.css create mode 100644 src/main/webapp/css/themes/bootstrap/images/accordion_arrows.png create mode 100644 src/main/webapp/css/themes/bootstrap/images/blank.gif create mode 100644 src/main/webapp/css/themes/bootstrap/images/calendar_arrows.png create mode 100644 src/main/webapp/css/themes/bootstrap/images/combo_arrow.png create mode 100644 src/main/webapp/css/themes/bootstrap/images/datagrid_icons.png create mode 100644 src/main/webapp/css/themes/bootstrap/images/datebox_arrow.png create mode 100644 src/main/webapp/css/themes/bootstrap/images/layout_arrows.png create mode 100644 src/main/webapp/css/themes/bootstrap/images/linkbutton_bg.png create mode 100644 src/main/webapp/css/themes/bootstrap/images/loading.gif create mode 100644 src/main/webapp/css/themes/bootstrap/images/menu_arrows.png create mode 100644 src/main/webapp/css/themes/bootstrap/images/messager_icons.png create mode 100644 src/main/webapp/css/themes/bootstrap/images/pagination_icons.png create mode 100644 src/main/webapp/css/themes/bootstrap/images/panel_tools.png create mode 100644 src/main/webapp/css/themes/bootstrap/images/passwordbox_close.png create mode 100644 src/main/webapp/css/themes/bootstrap/images/passwordbox_open.png create mode 100644 src/main/webapp/css/themes/bootstrap/images/searchbox_button.png create mode 100644 src/main/webapp/css/themes/bootstrap/images/slider_handle.png create mode 100644 src/main/webapp/css/themes/bootstrap/images/spinner_arrows.png create mode 100644 src/main/webapp/css/themes/bootstrap/images/tabs_icons.png create mode 100644 src/main/webapp/css/themes/bootstrap/images/tagbox_icons.png create mode 100644 src/main/webapp/css/themes/bootstrap/images/tree_icons.png create mode 100644 src/main/webapp/css/themes/bootstrap/images/validatebox_warning.png create mode 100644 src/main/webapp/css/themes/bootstrap/layout.css create mode 100644 src/main/webapp/css/themes/bootstrap/linkbutton.css create mode 100644 src/main/webapp/css/themes/bootstrap/menu.css create mode 100644 src/main/webapp/css/themes/bootstrap/menubutton.css create mode 100644 src/main/webapp/css/themes/bootstrap/messager.css create mode 100644 src/main/webapp/css/themes/bootstrap/numberbox.css create mode 100644 src/main/webapp/css/themes/bootstrap/pagination.css create mode 100644 src/main/webapp/css/themes/bootstrap/panel.css create mode 100644 src/main/webapp/css/themes/bootstrap/passwordbox.css create mode 100644 src/main/webapp/css/themes/bootstrap/progressbar.css create mode 100644 src/main/webapp/css/themes/bootstrap/propertygrid.css create mode 100644 src/main/webapp/css/themes/bootstrap/searchbox.css create mode 100644 src/main/webapp/css/themes/bootstrap/slider.css create mode 100644 src/main/webapp/css/themes/bootstrap/spinner.css create mode 100644 src/main/webapp/css/themes/bootstrap/splitbutton.css create mode 100644 src/main/webapp/css/themes/bootstrap/switchbutton.css create mode 100644 src/main/webapp/css/themes/bootstrap/tabs.css create mode 100644 src/main/webapp/css/themes/bootstrap/tagbox.css create mode 100644 src/main/webapp/css/themes/bootstrap/textbox.css create mode 100644 src/main/webapp/css/themes/bootstrap/tooltip.css create mode 100644 src/main/webapp/css/themes/bootstrap/tree.css create mode 100644 src/main/webapp/css/themes/bootstrap/validatebox.css create mode 100644 src/main/webapp/css/themes/bootstrap/window.css create mode 100644 src/main/webapp/css/themes/color.css create mode 100644 src/main/webapp/css/themes/default/accordion.css create mode 100644 src/main/webapp/css/themes/default/calendar.css create mode 100644 src/main/webapp/css/themes/default/combo.css create mode 100644 src/main/webapp/css/themes/default/combobox.css create mode 100644 src/main/webapp/css/themes/default/datagrid.css create mode 100644 src/main/webapp/css/themes/default/datalist.css create mode 100644 src/main/webapp/css/themes/default/datebox.css create mode 100644 src/main/webapp/css/themes/default/dialog.css create mode 100644 src/main/webapp/css/themes/default/easyui.css create mode 100644 src/main/webapp/css/themes/default/filebox.css create mode 100644 src/main/webapp/css/themes/default/images/accordion_arrows.png create mode 100644 src/main/webapp/css/themes/default/images/blank.gif create mode 100644 src/main/webapp/css/themes/default/images/calendar_arrows.png create mode 100644 src/main/webapp/css/themes/default/images/combo_arrow.png create mode 100644 src/main/webapp/css/themes/default/images/datagrid_icons.png create mode 100644 src/main/webapp/css/themes/default/images/datebox_arrow.png create mode 100644 src/main/webapp/css/themes/default/images/layout_arrows.png create mode 100644 src/main/webapp/css/themes/default/images/linkbutton_bg.png create mode 100644 src/main/webapp/css/themes/default/images/loading.gif create mode 100644 src/main/webapp/css/themes/default/images/menu_arrows.png create mode 100644 src/main/webapp/css/themes/default/images/messager_icons.png create mode 100644 src/main/webapp/css/themes/default/images/pagination_icons.png create mode 100644 src/main/webapp/css/themes/default/images/panel_tools.png create mode 100644 src/main/webapp/css/themes/default/images/passwordbox_close.png create mode 100644 src/main/webapp/css/themes/default/images/passwordbox_open.png create mode 100644 src/main/webapp/css/themes/default/images/searchbox_button.png create mode 100644 src/main/webapp/css/themes/default/images/slider_handle.png create mode 100644 src/main/webapp/css/themes/default/images/spinner_arrows.png create mode 100644 src/main/webapp/css/themes/default/images/tabs_icons.png create mode 100644 src/main/webapp/css/themes/default/images/tagbox_icons.png create mode 100644 src/main/webapp/css/themes/default/images/tree_icons.png create mode 100644 src/main/webapp/css/themes/default/images/validatebox_warning.png create mode 100644 src/main/webapp/css/themes/default/layout.css create mode 100644 src/main/webapp/css/themes/default/linkbutton.css create mode 100644 src/main/webapp/css/themes/default/menu.css create mode 100644 src/main/webapp/css/themes/default/menubutton.css create mode 100644 src/main/webapp/css/themes/default/messager.css create mode 100644 src/main/webapp/css/themes/default/numberbox.css create mode 100644 src/main/webapp/css/themes/default/pagination.css create mode 100644 src/main/webapp/css/themes/default/panel.css create mode 100644 src/main/webapp/css/themes/default/passwordbox.css create mode 100644 src/main/webapp/css/themes/default/progressbar.css create mode 100644 src/main/webapp/css/themes/default/propertygrid.css create mode 100644 src/main/webapp/css/themes/default/searchbox.css create mode 100644 src/main/webapp/css/themes/default/slider.css create mode 100644 src/main/webapp/css/themes/default/spinner.css create mode 100644 src/main/webapp/css/themes/default/splitbutton.css create mode 100644 src/main/webapp/css/themes/default/switchbutton.css create mode 100644 src/main/webapp/css/themes/default/tabs.css create mode 100644 src/main/webapp/css/themes/default/tagbox.css create mode 100644 src/main/webapp/css/themes/default/textbox.css create mode 100644 src/main/webapp/css/themes/default/tooltip.css create mode 100644 src/main/webapp/css/themes/default/tree.css create mode 100644 src/main/webapp/css/themes/default/validatebox.css create mode 100644 src/main/webapp/css/themes/default/window.css create mode 100644 src/main/webapp/css/themes/gray/accordion.css create mode 100644 src/main/webapp/css/themes/gray/calendar.css create mode 100644 src/main/webapp/css/themes/gray/combo.css create mode 100644 src/main/webapp/css/themes/gray/combobox.css create mode 100644 src/main/webapp/css/themes/gray/datagrid.css create mode 100644 src/main/webapp/css/themes/gray/datalist.css create mode 100644 src/main/webapp/css/themes/gray/datebox.css create mode 100644 src/main/webapp/css/themes/gray/dialog.css create mode 100644 src/main/webapp/css/themes/gray/easyui.css create mode 100644 src/main/webapp/css/themes/gray/filebox.css create mode 100644 src/main/webapp/css/themes/gray/images/accordion_arrows.png create mode 100644 src/main/webapp/css/themes/gray/images/blank.gif create mode 100644 src/main/webapp/css/themes/gray/images/calendar_arrows.png create mode 100644 src/main/webapp/css/themes/gray/images/combo_arrow.png create mode 100644 src/main/webapp/css/themes/gray/images/datagrid_icons.png create mode 100644 src/main/webapp/css/themes/gray/images/datebox_arrow.png create mode 100644 src/main/webapp/css/themes/gray/images/layout_arrows.png create mode 100644 src/main/webapp/css/themes/gray/images/linkbutton_bg.png create mode 100644 src/main/webapp/css/themes/gray/images/loading.gif create mode 100644 src/main/webapp/css/themes/gray/images/menu_arrows.png create mode 100644 src/main/webapp/css/themes/gray/images/messager_icons.png create mode 100644 src/main/webapp/css/themes/gray/images/pagination_icons.png create mode 100644 src/main/webapp/css/themes/gray/images/panel_tools.png create mode 100644 src/main/webapp/css/themes/gray/images/passwordbox_close.png create mode 100644 src/main/webapp/css/themes/gray/images/passwordbox_open.png create mode 100644 src/main/webapp/css/themes/gray/images/searchbox_button.png create mode 100644 src/main/webapp/css/themes/gray/images/slider_handle.png create mode 100644 src/main/webapp/css/themes/gray/images/spinner_arrows.png create mode 100644 src/main/webapp/css/themes/gray/images/tabs_icons.png create mode 100644 src/main/webapp/css/themes/gray/images/tagbox_icons.png create mode 100644 src/main/webapp/css/themes/gray/images/tree_icons.png create mode 100644 src/main/webapp/css/themes/gray/images/validatebox_warning.png create mode 100644 src/main/webapp/css/themes/gray/layout.css create mode 100644 src/main/webapp/css/themes/gray/linkbutton.css create mode 100644 src/main/webapp/css/themes/gray/menu.css create mode 100644 src/main/webapp/css/themes/gray/menubutton.css create mode 100644 src/main/webapp/css/themes/gray/messager.css create mode 100644 src/main/webapp/css/themes/gray/numberbox.css create mode 100644 src/main/webapp/css/themes/gray/pagination.css create mode 100644 src/main/webapp/css/themes/gray/panel.css create mode 100644 src/main/webapp/css/themes/gray/passwordbox.css create mode 100644 src/main/webapp/css/themes/gray/progressbar.css create mode 100644 src/main/webapp/css/themes/gray/propertygrid.css create mode 100644 src/main/webapp/css/themes/gray/searchbox.css create mode 100644 src/main/webapp/css/themes/gray/slider.css create mode 100644 src/main/webapp/css/themes/gray/spinner.css create mode 100644 src/main/webapp/css/themes/gray/splitbutton.css create mode 100644 src/main/webapp/css/themes/gray/switchbutton.css create mode 100644 src/main/webapp/css/themes/gray/tabs.css create mode 100644 src/main/webapp/css/themes/gray/tagbox.css create mode 100644 src/main/webapp/css/themes/gray/textbox.css create mode 100644 src/main/webapp/css/themes/gray/tooltip.css create mode 100644 src/main/webapp/css/themes/gray/tree.css create mode 100644 src/main/webapp/css/themes/gray/validatebox.css create mode 100644 src/main/webapp/css/themes/gray/window.css create mode 100644 src/main/webapp/css/themes/icon.css create mode 100644 src/main/webapp/css/themes/icons/back.png create mode 100644 src/main/webapp/css/themes/icons/blank.gif create mode 100644 src/main/webapp/css/themes/icons/cancel.png create mode 100644 src/main/webapp/css/themes/icons/clear.png create mode 100644 src/main/webapp/css/themes/icons/cut.png create mode 100644 src/main/webapp/css/themes/icons/edit_add.png create mode 100644 src/main/webapp/css/themes/icons/edit_remove.png create mode 100644 src/main/webapp/css/themes/icons/filesave.png create mode 100644 src/main/webapp/css/themes/icons/filter.png create mode 100644 src/main/webapp/css/themes/icons/help.png create mode 100644 src/main/webapp/css/themes/icons/large_chart.png create mode 100644 src/main/webapp/css/themes/icons/large_clipart.png create mode 100644 src/main/webapp/css/themes/icons/large_picture.png create mode 100644 src/main/webapp/css/themes/icons/large_shapes.png create mode 100644 src/main/webapp/css/themes/icons/large_smartart.png create mode 100644 src/main/webapp/css/themes/icons/lock.png create mode 100644 src/main/webapp/css/themes/icons/man.png create mode 100644 src/main/webapp/css/themes/icons/mini_add.png create mode 100644 src/main/webapp/css/themes/icons/mini_edit.png create mode 100644 src/main/webapp/css/themes/icons/mini_refresh.png create mode 100644 src/main/webapp/css/themes/icons/more.png create mode 100644 src/main/webapp/css/themes/icons/no.png create mode 100644 src/main/webapp/css/themes/icons/ok.png create mode 100644 src/main/webapp/css/themes/icons/pencil.png create mode 100644 src/main/webapp/css/themes/icons/print.png create mode 100644 src/main/webapp/css/themes/icons/redo.png create mode 100644 src/main/webapp/css/themes/icons/reload.png create mode 100644 src/main/webapp/css/themes/icons/search.png create mode 100644 src/main/webapp/css/themes/icons/sum.png create mode 100644 src/main/webapp/css/themes/icons/tip.png create mode 100644 src/main/webapp/css/themes/icons/undo.png create mode 100644 src/main/webapp/css/themes/material/accordion.css create mode 100644 src/main/webapp/css/themes/material/calendar.css create mode 100644 src/main/webapp/css/themes/material/combo.css create mode 100644 src/main/webapp/css/themes/material/combobox.css create mode 100644 src/main/webapp/css/themes/material/datagrid.css create mode 100644 src/main/webapp/css/themes/material/datalist.css create mode 100644 src/main/webapp/css/themes/material/datebox.css create mode 100644 src/main/webapp/css/themes/material/dialog.css create mode 100644 src/main/webapp/css/themes/material/easyui.css create mode 100644 src/main/webapp/css/themes/material/filebox.css create mode 100644 src/main/webapp/css/themes/material/images/Thumbs.db create mode 100644 src/main/webapp/css/themes/material/images/accordion_arrows.png create mode 100644 src/main/webapp/css/themes/material/images/blank.gif create mode 100644 src/main/webapp/css/themes/material/images/calendar_arrows.png create mode 100644 src/main/webapp/css/themes/material/images/combo_arrow.png create mode 100644 src/main/webapp/css/themes/material/images/datagrid_icons.png create mode 100644 src/main/webapp/css/themes/material/images/datebox_arrow.png create mode 100644 src/main/webapp/css/themes/material/images/layout_arrows.png create mode 100644 src/main/webapp/css/themes/material/images/linkbutton_bg.png create mode 100644 src/main/webapp/css/themes/material/images/loading.gif create mode 100644 src/main/webapp/css/themes/material/images/menu_arrows.png create mode 100644 src/main/webapp/css/themes/material/images/messager_icons.png create mode 100644 src/main/webapp/css/themes/material/images/pagination_icons.png create mode 100644 src/main/webapp/css/themes/material/images/panel_tools.png create mode 100644 src/main/webapp/css/themes/material/images/passwordbox_close.png create mode 100644 src/main/webapp/css/themes/material/images/passwordbox_open.png create mode 100644 src/main/webapp/css/themes/material/images/searchbox_button.png create mode 100644 src/main/webapp/css/themes/material/images/slider_handle.png create mode 100644 src/main/webapp/css/themes/material/images/spinner_arrows.png create mode 100644 src/main/webapp/css/themes/material/images/tabs_icons.png create mode 100644 src/main/webapp/css/themes/material/images/tagbox_icons.png create mode 100644 src/main/webapp/css/themes/material/images/tree_icons.png create mode 100644 src/main/webapp/css/themes/material/images/validatebox_warning.png create mode 100644 src/main/webapp/css/themes/material/layout.css create mode 100644 src/main/webapp/css/themes/material/linkbutton.css create mode 100644 src/main/webapp/css/themes/material/menu.css create mode 100644 src/main/webapp/css/themes/material/menubutton.css create mode 100644 src/main/webapp/css/themes/material/messager.css create mode 100644 src/main/webapp/css/themes/material/numberbox.css create mode 100644 src/main/webapp/css/themes/material/pagination.css create mode 100644 src/main/webapp/css/themes/material/panel.css create mode 100644 src/main/webapp/css/themes/material/passwordbox.css create mode 100644 src/main/webapp/css/themes/material/progressbar.css create mode 100644 src/main/webapp/css/themes/material/propertygrid.css create mode 100644 src/main/webapp/css/themes/material/searchbox.css create mode 100644 src/main/webapp/css/themes/material/slider.css create mode 100644 src/main/webapp/css/themes/material/spinner.css create mode 100644 src/main/webapp/css/themes/material/splitbutton.css create mode 100644 src/main/webapp/css/themes/material/switchbutton.css create mode 100644 src/main/webapp/css/themes/material/tabs.css create mode 100644 src/main/webapp/css/themes/material/tagbox.css create mode 100644 src/main/webapp/css/themes/material/textbox.css create mode 100644 src/main/webapp/css/themes/material/tooltip.css create mode 100644 src/main/webapp/css/themes/material/tree.css create mode 100644 src/main/webapp/css/themes/material/validatebox.css create mode 100644 src/main/webapp/css/themes/material/window.css create mode 100644 src/main/webapp/css/themes/metro/accordion.css create mode 100644 src/main/webapp/css/themes/metro/calendar.css create mode 100644 src/main/webapp/css/themes/metro/combo.css create mode 100644 src/main/webapp/css/themes/metro/combobox.css create mode 100644 src/main/webapp/css/themes/metro/datagrid.css create mode 100644 src/main/webapp/css/themes/metro/datalist.css create mode 100644 src/main/webapp/css/themes/metro/datebox.css create mode 100644 src/main/webapp/css/themes/metro/dialog.css create mode 100644 src/main/webapp/css/themes/metro/easyui.css create mode 100644 src/main/webapp/css/themes/metro/filebox.css create mode 100644 src/main/webapp/css/themes/metro/images/accordion_arrows.png create mode 100644 src/main/webapp/css/themes/metro/images/blank.gif create mode 100644 src/main/webapp/css/themes/metro/images/calendar_arrows.png create mode 100644 src/main/webapp/css/themes/metro/images/combo_arrow.png create mode 100644 src/main/webapp/css/themes/metro/images/datagrid_icons.png create mode 100644 src/main/webapp/css/themes/metro/images/datebox_arrow.png create mode 100644 src/main/webapp/css/themes/metro/images/layout_arrows.png create mode 100644 src/main/webapp/css/themes/metro/images/linkbutton_bg.png create mode 100644 src/main/webapp/css/themes/metro/images/loading.gif create mode 100644 src/main/webapp/css/themes/metro/images/menu_arrows.png create mode 100644 src/main/webapp/css/themes/metro/images/messager_icons.png create mode 100644 src/main/webapp/css/themes/metro/images/pagination_icons.png create mode 100644 src/main/webapp/css/themes/metro/images/panel_tools.png create mode 100644 src/main/webapp/css/themes/metro/images/passwordbox_close.png create mode 100644 src/main/webapp/css/themes/metro/images/passwordbox_open.png create mode 100644 src/main/webapp/css/themes/metro/images/searchbox_button.png create mode 100644 src/main/webapp/css/themes/metro/images/slider_handle.png create mode 100644 src/main/webapp/css/themes/metro/images/spinner_arrows.png create mode 100644 src/main/webapp/css/themes/metro/images/tabs_icons.png create mode 100644 src/main/webapp/css/themes/metro/images/tagbox_icons.png create mode 100644 src/main/webapp/css/themes/metro/images/tree_icons.png create mode 100644 src/main/webapp/css/themes/metro/images/validatebox_warning.png create mode 100644 src/main/webapp/css/themes/metro/layout.css create mode 100644 src/main/webapp/css/themes/metro/linkbutton.css create mode 100644 src/main/webapp/css/themes/metro/menu.css create mode 100644 src/main/webapp/css/themes/metro/menubutton.css create mode 100644 src/main/webapp/css/themes/metro/messager.css create mode 100644 src/main/webapp/css/themes/metro/numberbox.css create mode 100644 src/main/webapp/css/themes/metro/pagination.css create mode 100644 src/main/webapp/css/themes/metro/panel.css create mode 100644 src/main/webapp/css/themes/metro/passwordbox.css create mode 100644 src/main/webapp/css/themes/metro/progressbar.css create mode 100644 src/main/webapp/css/themes/metro/propertygrid.css create mode 100644 src/main/webapp/css/themes/metro/searchbox.css create mode 100644 src/main/webapp/css/themes/metro/slider.css create mode 100644 src/main/webapp/css/themes/metro/spinner.css create mode 100644 src/main/webapp/css/themes/metro/splitbutton.css create mode 100644 src/main/webapp/css/themes/metro/switchbutton.css create mode 100644 src/main/webapp/css/themes/metro/tabs.css create mode 100644 src/main/webapp/css/themes/metro/tagbox.css create mode 100644 src/main/webapp/css/themes/metro/textbox.css create mode 100644 src/main/webapp/css/themes/metro/tooltip.css create mode 100644 src/main/webapp/css/themes/metro/tree.css create mode 100644 src/main/webapp/css/themes/metro/validatebox.css create mode 100644 src/main/webapp/css/themes/metro/window.css create mode 100644 src/main/webapp/css/themes/mobile.css create mode 100644 src/main/webapp/favicon.ico create mode 100644 src/main/webapp/images/0.jpg create mode 100644 src/main/webapp/images/00.jpg create mode 100644 src/main/webapp/images/000.jpg create mode 100644 src/main/webapp/images/1.png create mode 100644 src/main/webapp/images/2.png create mode 100644 src/main/webapp/images/4.png create mode 100644 src/main/webapp/images/Login.jpg create mode 100644 src/main/webapp/images/Login1.jpg create mode 100644 src/main/webapp/images/Login11.jpg create mode 100644 src/main/webapp/images/Login12.jpg create mode 100644 src/main/webapp/images/Login2.jpg create mode 100644 src/main/webapp/images/activeCheck.png create mode 100644 src/main/webapp/images/add.png create mode 100644 src/main/webapp/images/bb1.jpg create mode 100644 src/main/webapp/images/bg1.jpg create mode 100644 src/main/webapp/images/bg2.jpg create mode 100644 src/main/webapp/images/bgGround.jpg create mode 100644 src/main/webapp/images/bgGround3.jpg create mode 100644 src/main/webapp/images/carlogo.png create mode 100644 src/main/webapp/images/clear.png create mode 100644 src/main/webapp/images/close.png create mode 100644 src/main/webapp/images/favicon.png create mode 100644 src/main/webapp/images/jblogo.png create mode 100644 src/main/webapp/images/loginBg.jpg create mode 100644 src/main/webapp/images/loginBg2.jpg create mode 100644 src/main/webapp/images/mainbk.png create mode 100644 src/main/webapp/images/menuArrow.png create mode 100644 src/main/webapp/images/menuArrowActive.png create mode 100644 src/main/webapp/images/powerIcon.png create mode 100644 src/main/webapp/images/replaceMoney.png create mode 100644 src/main/webapp/images/replaceWalkCar.png create mode 100644 src/main/webapp/images/roadRepair.png create mode 100644 src/main/webapp/images/save.png create mode 100644 src/main/webapp/images/search.png create mode 100644 src/main/webapp/images/sendWater.png create mode 100644 src/main/webapp/images/sign.png create mode 100644 src/main/webapp/images/timg.jpg create mode 100644 src/main/webapp/images/topLogo.png create mode 100644 src/main/webapp/images/top_bg.png create mode 100644 src/main/webapp/images/top_bg2.png create mode 100644 src/main/webapp/images/topbgnew.png create mode 100644 src/main/webapp/img/500.jpg create mode 100644 src/main/webapp/index.jsp create mode 100644 src/main/webapp/js/DatePicker/My97DatePicker.htm create mode 100644 src/main/webapp/js/DatePicker/WdatePicker.js create mode 100644 src/main/webapp/js/DatePicker/calendar.js create mode 100644 src/main/webapp/js/DatePicker/config.js create mode 100644 src/main/webapp/js/DatePicker/lang/en.js create mode 100644 src/main/webapp/js/DatePicker/lang/zh-cn.js create mode 100644 src/main/webapp/js/DatePicker/lang/zh-tw.js create mode 100644 src/main/webapp/js/DatePicker/skin/WdatePicker.css create mode 100644 src/main/webapp/js/DatePicker/skin/date.png create mode 100644 src/main/webapp/js/DatePicker/skin/datePicker.gif create mode 100644 src/main/webapp/js/DatePicker/skin/default/datepicker.css create mode 100644 src/main/webapp/js/DatePicker/skin/default/img.gif create mode 100644 src/main/webapp/js/DatePicker/skin/whyGreen/bg.jpg create mode 100644 src/main/webapp/js/DatePicker/skin/whyGreen/datepicker.css create mode 100644 src/main/webapp/js/DatePicker/skin/whyGreen/img.gif create mode 100644 src/main/webapp/js/business/balance.js create mode 100644 src/main/webapp/js/business/caseEnter.js create mode 100644 src/main/webapp/js/business/cases.js create mode 100644 src/main/webapp/js/business/coupon.js create mode 100644 src/main/webapp/js/business/coupon_query.js create mode 100644 src/main/webapp/js/business/enterprise.js create mode 100644 src/main/webapp/js/business/orderCheck.js create mode 100644 src/main/webapp/js/business/orderCheckAll.js create mode 100644 src/main/webapp/js/business/orderCheckHIs.js create mode 100644 src/main/webapp/js/business/recharge_query.js create mode 100644 src/main/webapp/js/business/role.js create mode 100644 src/main/webapp/js/business/sue.js create mode 100644 src/main/webapp/js/business/supplier.js create mode 100644 src/main/webapp/js/business/user.js create mode 100644 src/main/webapp/js/clear.js create mode 100644 src/main/webapp/js/common.js create mode 100644 src/main/webapp/js/easyloader.js create mode 100644 src/main/webapp/js/jquery.easyui.min.js create mode 100644 src/main/webapp/js/jquery.easyui.mobile.js create mode 100644 src/main/webapp/js/jquery.jqprint-0.3.js create mode 100644 src/main/webapp/js/jquery.min.js create mode 100644 src/main/webapp/js/loading.js create mode 100644 src/main/webapp/js/locale/easyui-lang-af.js create mode 100644 src/main/webapp/js/locale/easyui-lang-am.js create mode 100644 src/main/webapp/js/locale/easyui-lang-ar.js create mode 100644 src/main/webapp/js/locale/easyui-lang-bg.js create mode 100644 src/main/webapp/js/locale/easyui-lang-ca.js create mode 100644 src/main/webapp/js/locale/easyui-lang-cs.js create mode 100644 src/main/webapp/js/locale/easyui-lang-cz.js create mode 100644 src/main/webapp/js/locale/easyui-lang-da.js create mode 100644 src/main/webapp/js/locale/easyui-lang-de.js create mode 100644 src/main/webapp/js/locale/easyui-lang-el.js create mode 100644 src/main/webapp/js/locale/easyui-lang-en.js create mode 100644 src/main/webapp/js/locale/easyui-lang-es.js create mode 100644 src/main/webapp/js/locale/easyui-lang-fr.js create mode 100644 src/main/webapp/js/locale/easyui-lang-it.js create mode 100644 src/main/webapp/js/locale/easyui-lang-jp.js create mode 100644 src/main/webapp/js/locale/easyui-lang-ko.js create mode 100644 src/main/webapp/js/locale/easyui-lang-nl.js create mode 100644 src/main/webapp/js/locale/easyui-lang-pl.js create mode 100644 src/main/webapp/js/locale/easyui-lang-pt_BR.js create mode 100644 src/main/webapp/js/locale/easyui-lang-ru.js create mode 100644 src/main/webapp/js/locale/easyui-lang-sv_SE.js create mode 100644 src/main/webapp/js/locale/easyui-lang-tr.js create mode 100644 src/main/webapp/js/locale/easyui-lang-zh_CN.js create mode 100644 src/main/webapp/js/locale/easyui-lang-zh_TW.js create mode 100644 src/main/webapp/js/page.js create mode 100644 src/main/webapp/js/plugins/jquery.accordion.js create mode 100644 src/main/webapp/js/plugins/jquery.calendar.js create mode 100644 src/main/webapp/js/plugins/jquery.combo.js create mode 100644 src/main/webapp/js/plugins/jquery.combobox.js create mode 100644 src/main/webapp/js/plugins/jquery.combogrid.js create mode 100644 src/main/webapp/js/plugins/jquery.combotree.js create mode 100644 src/main/webapp/js/plugins/jquery.combotreegrid.js create mode 100644 src/main/webapp/js/plugins/jquery.datagrid.js create mode 100644 src/main/webapp/js/plugins/jquery.datalist.js create mode 100644 src/main/webapp/js/plugins/jquery.datebox.js create mode 100644 src/main/webapp/js/plugins/jquery.datetimebox.js create mode 100644 src/main/webapp/js/plugins/jquery.datetimespinner.js create mode 100644 src/main/webapp/js/plugins/jquery.dialog.js create mode 100644 src/main/webapp/js/plugins/jquery.draggable.js create mode 100644 src/main/webapp/js/plugins/jquery.droppable.js create mode 100644 src/main/webapp/js/plugins/jquery.filebox.js create mode 100644 src/main/webapp/js/plugins/jquery.form.js create mode 100644 src/main/webapp/js/plugins/jquery.layout.js create mode 100644 src/main/webapp/js/plugins/jquery.linkbutton.js create mode 100644 src/main/webapp/js/plugins/jquery.menu.js create mode 100644 src/main/webapp/js/plugins/jquery.menubutton.js create mode 100644 src/main/webapp/js/plugins/jquery.messager.js create mode 100644 src/main/webapp/js/plugins/jquery.mobile.js create mode 100644 src/main/webapp/js/plugins/jquery.numberbox.js create mode 100644 src/main/webapp/js/plugins/jquery.numberspinner.js create mode 100644 src/main/webapp/js/plugins/jquery.pagination.js create mode 100644 src/main/webapp/js/plugins/jquery.panel.js create mode 100644 src/main/webapp/js/plugins/jquery.parser.js create mode 100644 src/main/webapp/js/plugins/jquery.passwordbox.js create mode 100644 src/main/webapp/js/plugins/jquery.progressbar.js create mode 100644 src/main/webapp/js/plugins/jquery.propertygrid.js create mode 100644 src/main/webapp/js/plugins/jquery.resizable.js create mode 100644 src/main/webapp/js/plugins/jquery.searchbox.js create mode 100644 src/main/webapp/js/plugins/jquery.slider.js create mode 100644 src/main/webapp/js/plugins/jquery.spinner.js create mode 100644 src/main/webapp/js/plugins/jquery.splitbutton.js create mode 100644 src/main/webapp/js/plugins/jquery.switchbutton.js create mode 100644 src/main/webapp/js/plugins/jquery.tabs.js create mode 100644 src/main/webapp/js/plugins/jquery.tagbox.js create mode 100644 src/main/webapp/js/plugins/jquery.textbox.js create mode 100644 src/main/webapp/js/plugins/jquery.timespinner.js create mode 100644 src/main/webapp/js/plugins/jquery.tooltip.js create mode 100644 src/main/webapp/js/plugins/jquery.tree.js create mode 100644 src/main/webapp/js/plugins/jquery.treegrid.js create mode 100644 src/main/webapp/js/plugins/jquery.validatebox.js create mode 100644 src/main/webapp/js/plugins/jquery.window.js create mode 100644 src/main/webapp/login.jsp create mode 100644 src/main/webapp/page/amap/amap.jsp create mode 100644 src/main/webapp/page/amap/cityList.jsp create mode 100644 src/main/webapp/page/amap/citylist.js create mode 100644 src/main/webapp/page/amap/css/common.css create mode 100644 src/main/webapp/page/amap/css/jquery.autocomplete.css create mode 100644 src/main/webapp/page/amap/css/placeSearch.css create mode 100644 src/main/webapp/page/amap/js/cityDialog/citySearch.js create mode 100644 src/main/webapp/page/amap/js/cityDialog/city_u.js create mode 100644 src/main/webapp/page/amap/js/cityDialog/citylist.js create mode 100644 src/main/webapp/page/amap/js/jquery.autocomplete.js create mode 100644 src/main/webapp/page/amap/js/layer/layer.js create mode 100644 src/main/webapp/page/balance.jsp create mode 100644 src/main/webapp/page/caseDetail.jsp create mode 100644 src/main/webapp/page/caseInfo.jsp create mode 100644 src/main/webapp/page/caseInfoEnter.jsp create mode 100644 src/main/webapp/page/common.jsp create mode 100644 src/main/webapp/page/coupon_consume.jsp create mode 100644 src/main/webapp/page/coupon_consume_history.jsp create mode 100644 src/main/webapp/page/coupon_consume_query.jsp create mode 100644 src/main/webapp/page/coupon_recharge_query.jsp create mode 100644 src/main/webapp/page/enterprise.jsp create mode 100644 src/main/webapp/page/footer.jsp create mode 100644 src/main/webapp/page/header.jsp create mode 100644 src/main/webapp/page/home.jsp create mode 100644 src/main/webapp/page/home1.jsp create mode 100644 src/main/webapp/page/modifyPassword.jsp create mode 100644 src/main/webapp/page/orderCheck.jsp create mode 100644 src/main/webapp/page/orderCheckAll.jsp create mode 100644 src/main/webapp/page/orderCheckHis.jsp create mode 100644 src/main/webapp/page/role.jsp create mode 100644 src/main/webapp/page/sue.jsp create mode 100644 src/main/webapp/page/supplier.jsp create mode 100644 src/main/webapp/page/topMenu.jsp create mode 100644 src/main/webapp/page/user.jsp create mode 100644 src/main/webapp/page/validate.jsp create mode 100644 src/test/java/Test.java diff --git a/.classpath b/.classpath new file mode 100644 index 0000000..6c95717 --- /dev/null +++ b/.classpath @@ -0,0 +1,28 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..ea8c4bf --- /dev/null +++ b/.gitignore @@ -0,0 +1 @@ +/target diff --git a/.idea/.name b/.idea/.name new file mode 100644 index 0000000..93858ff --- /dev/null +++ b/.idea/.name @@ -0,0 +1 @@ +jlr \ No newline at end of file diff --git a/.idea/artifacts/jlr_war.xml b/.idea/artifacts/jlr_war.xml new file mode 100644 index 0000000..55b0e1a --- /dev/null +++ b/.idea/artifacts/jlr_war.xml @@ -0,0 +1,8 @@ + + + $PROJECT_DIR$/target + + + + + \ No newline at end of file diff --git a/.idea/artifacts/jlr_war_exploded.xml b/.idea/artifacts/jlr_war_exploded.xml new file mode 100644 index 0000000..a984b26 --- /dev/null +++ b/.idea/artifacts/jlr_war_exploded.xml @@ -0,0 +1,94 @@ + + + $PROJECT_DIR$/target/admin + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/compiler.xml b/.idea/compiler.xml new file mode 100644 index 0000000..98c88f3 --- /dev/null +++ b/.idea/compiler.xml @@ -0,0 +1,16 @@ + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/encodings.xml b/.idea/encodings.xml new file mode 100644 index 0000000..b26911b --- /dev/null +++ b/.idea/encodings.xml @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__antlr_antlr_2_7_7.xml b/.idea/libraries/Maven__antlr_antlr_2_7_7.xml new file mode 100644 index 0000000..6029cf8 --- /dev/null +++ b/.idea/libraries/Maven__antlr_antlr_2_7_7.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__aopalliance_aopalliance_1_0.xml b/.idea/libraries/Maven__aopalliance_aopalliance_1_0.xml new file mode 100644 index 0000000..23a9d11 --- /dev/null +++ b/.idea/libraries/Maven__aopalliance_aopalliance_1_0.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__asm_asm_3_1.xml b/.idea/libraries/Maven__asm_asm_3_1.xml new file mode 100644 index 0000000..62bbb78 --- /dev/null +++ b/.idea/libraries/Maven__asm_asm_3_1.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__cglib_cglib_2_2.xml b/.idea/libraries/Maven__cglib_cglib_2_2.xml new file mode 100644 index 0000000..2398e9e --- /dev/null +++ b/.idea/libraries/Maven__cglib_cglib_2_2.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__cglib_cglib_nodep_2_2_2.xml b/.idea/libraries/Maven__cglib_cglib_nodep_2_2_2.xml new file mode 100644 index 0000000..dafc94f --- /dev/null +++ b/.idea/libraries/Maven__cglib_cglib_nodep_2_2_2.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__com_alibaba_druid_1_0_15.xml b/.idea/libraries/Maven__com_alibaba_druid_1_0_15.xml new file mode 100644 index 0000000..893dabe --- /dev/null +++ b/.idea/libraries/Maven__com_alibaba_druid_1_0_15.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__com_alibaba_fastjson_1_1_39.xml b/.idea/libraries/Maven__com_alibaba_fastjson_1_1_39.xml new file mode 100644 index 0000000..8be2217 --- /dev/null +++ b/.idea/libraries/Maven__com_alibaba_fastjson_1_1_39.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__com_caucho_hessian_4_0_33.xml b/.idea/libraries/Maven__com_caucho_hessian_4_0_33.xml new file mode 100644 index 0000000..b68ee2d --- /dev/null +++ b/.idea/libraries/Maven__com_caucho_hessian_4_0_33.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__com_github_virtuald_curvesapi_1_03.xml b/.idea/libraries/Maven__com_github_virtuald_curvesapi_1_03.xml new file mode 100644 index 0000000..b3f4bfb --- /dev/null +++ b/.idea/libraries/Maven__com_github_virtuald_curvesapi_1_03.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__com_google_guava_guava_17_0.xml b/.idea/libraries/Maven__com_google_guava_guava_17_0.xml new file mode 100644 index 0000000..8db0097 --- /dev/null +++ b/.idea/libraries/Maven__com_google_guava_guava_17_0.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__com_oracle_ojdbc6_11_2_0_3.xml b/.idea/libraries/Maven__com_oracle_ojdbc6_11_2_0_3.xml new file mode 100644 index 0000000..5d1787f --- /dev/null +++ b/.idea/libraries/Maven__com_oracle_ojdbc6_11_2_0_3.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__commons_beanutils_commons_beanutils_1_8_0.xml b/.idea/libraries/Maven__commons_beanutils_commons_beanutils_1_8_0.xml new file mode 100644 index 0000000..ab8a3d6 --- /dev/null +++ b/.idea/libraries/Maven__commons_beanutils_commons_beanutils_1_8_0.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__commons_codec_commons_codec_1_10.xml b/.idea/libraries/Maven__commons_codec_commons_codec_1_10.xml new file mode 100644 index 0000000..110e468 --- /dev/null +++ b/.idea/libraries/Maven__commons_codec_commons_codec_1_10.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__commons_collections_commons_collections_3_2_1.xml b/.idea/libraries/Maven__commons_collections_commons_collections_3_2_1.xml new file mode 100644 index 0000000..754c7e8 --- /dev/null +++ b/.idea/libraries/Maven__commons_collections_commons_collections_3_2_1.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__commons_fileupload_commons_fileupload_1_2_2.xml b/.idea/libraries/Maven__commons_fileupload_commons_fileupload_1_2_2.xml new file mode 100644 index 0000000..9293068 --- /dev/null +++ b/.idea/libraries/Maven__commons_fileupload_commons_fileupload_1_2_2.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__commons_httpclient_commons_httpclient_3_0.xml b/.idea/libraries/Maven__commons_httpclient_commons_httpclient_3_0.xml new file mode 100644 index 0000000..cc0525c --- /dev/null +++ b/.idea/libraries/Maven__commons_httpclient_commons_httpclient_3_0.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__commons_io_commons_io_1_3_2.xml b/.idea/libraries/Maven__commons_io_commons_io_1_3_2.xml new file mode 100644 index 0000000..cd7ff51 --- /dev/null +++ b/.idea/libraries/Maven__commons_io_commons_io_1_3_2.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__commons_lang_commons_lang_2_5.xml b/.idea/libraries/Maven__commons_lang_commons_lang_2_5.xml new file mode 100644 index 0000000..6cebdd5 --- /dev/null +++ b/.idea/libraries/Maven__commons_lang_commons_lang_2_5.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__commons_logging_commons_logging_1_1_3.xml b/.idea/libraries/Maven__commons_logging_commons_logging_1_1_3.xml new file mode 100644 index 0000000..add7f33 --- /dev/null +++ b/.idea/libraries/Maven__commons_logging_commons_logging_1_1_3.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__dom4j_dom4j_1_6_1.xml b/.idea/libraries/Maven__dom4j_dom4j_1_6_1.xml new file mode 100644 index 0000000..70c1aef --- /dev/null +++ b/.idea/libraries/Maven__dom4j_dom4j_1_6_1.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__javax_faces_jsf_api_1_2_04.xml b/.idea/libraries/Maven__javax_faces_jsf_api_1_2_04.xml new file mode 100644 index 0000000..b1470d2 --- /dev/null +++ b/.idea/libraries/Maven__javax_faces_jsf_api_1_2_04.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__javax_faces_jsf_impl_1_2_04.xml b/.idea/libraries/Maven__javax_faces_jsf_impl_1_2_04.xml new file mode 100644 index 0000000..35aa782 --- /dev/null +++ b/.idea/libraries/Maven__javax_faces_jsf_impl_1_2_04.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__javax_servlet_javax_servlet_api_3_0_1.xml b/.idea/libraries/Maven__javax_servlet_javax_servlet_api_3_0_1.xml new file mode 100644 index 0000000..019f192 --- /dev/null +++ b/.idea/libraries/Maven__javax_servlet_javax_servlet_api_3_0_1.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__javax_servlet_jsp_jsp_api_2_1.xml b/.idea/libraries/Maven__javax_servlet_jsp_jsp_api_2_1.xml new file mode 100644 index 0000000..476f9e3 --- /dev/null +++ b/.idea/libraries/Maven__javax_servlet_jsp_jsp_api_2_1.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__javax_servlet_jstl_1_2.xml b/.idea/libraries/Maven__javax_servlet_jstl_1_2.xml new file mode 100644 index 0000000..1f202da --- /dev/null +++ b/.idea/libraries/Maven__javax_servlet_jstl_1_2.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__javax_transaction_jta_1_1.xml b/.idea/libraries/Maven__javax_transaction_jta_1_1.xml new file mode 100644 index 0000000..68bde72 --- /dev/null +++ b/.idea/libraries/Maven__javax_transaction_jta_1_1.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__jstl_jstl_1_2.xml b/.idea/libraries/Maven__jstl_jstl_1_2.xml new file mode 100644 index 0000000..f1fe003 --- /dev/null +++ b/.idea/libraries/Maven__jstl_jstl_1_2.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__junit_junit_4_11.xml b/.idea/libraries/Maven__junit_junit_4_11.xml new file mode 100644 index 0000000..1002050 --- /dev/null +++ b/.idea/libraries/Maven__junit_junit_4_11.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__mysql_mysql_connector_java_5_1_21.xml b/.idea/libraries/Maven__mysql_mysql_connector_java_5_1_21.xml new file mode 100644 index 0000000..4f6cc51 --- /dev/null +++ b/.idea/libraries/Maven__mysql_mysql_connector_java_5_1_21.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__net_sf_ehcache_ehcache_core_2_4_7.xml b/.idea/libraries/Maven__net_sf_ehcache_ehcache_core_2_4_7.xml new file mode 100644 index 0000000..f3d33c1 --- /dev/null +++ b/.idea/libraries/Maven__net_sf_ehcache_ehcache_core_2_4_7.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__net_sf_ehcache_ehcache_web_2_0_4.xml b/.idea/libraries/Maven__net_sf_ehcache_ehcache_web_2_0_4.xml new file mode 100644 index 0000000..71a7c61 --- /dev/null +++ b/.idea/libraries/Maven__net_sf_ehcache_ehcache_web_2_0_4.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__net_sf_ezmorph_ezmorph_1_0_6.xml b/.idea/libraries/Maven__net_sf_ezmorph_ezmorph_1_0_6.xml new file mode 100644 index 0000000..f31c23a --- /dev/null +++ b/.idea/libraries/Maven__net_sf_ezmorph_ezmorph_1_0_6.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__net_sf_json_lib_json_lib_jdk15_2_4.xml b/.idea/libraries/Maven__net_sf_json_lib_json_lib_jdk15_2_4.xml new file mode 100644 index 0000000..e8d98d8 --- /dev/null +++ b/.idea/libraries/Maven__net_sf_json_lib_json_lib_jdk15_2_4.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__org_apache_ant_ant_1_8_2.xml b/.idea/libraries/Maven__org_apache_ant_ant_1_8_2.xml new file mode 100644 index 0000000..f97b436 --- /dev/null +++ b/.idea/libraries/Maven__org_apache_ant_ant_1_8_2.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__org_apache_ant_ant_launcher_1_8_2.xml b/.idea/libraries/Maven__org_apache_ant_ant_launcher_1_8_2.xml new file mode 100644 index 0000000..7ba4e18 --- /dev/null +++ b/.idea/libraries/Maven__org_apache_ant_ant_launcher_1_8_2.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__org_apache_commons_commons_lang3_3_3_2.xml b/.idea/libraries/Maven__org_apache_commons_commons_lang3_3_3_2.xml new file mode 100644 index 0000000..5c06b4f --- /dev/null +++ b/.idea/libraries/Maven__org_apache_commons_commons_lang3_3_3_2.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__org_apache_httpcomponents_httpclient_4_3_6.xml b/.idea/libraries/Maven__org_apache_httpcomponents_httpclient_4_3_6.xml new file mode 100644 index 0000000..c6381f6 --- /dev/null +++ b/.idea/libraries/Maven__org_apache_httpcomponents_httpclient_4_3_6.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__org_apache_httpcomponents_httpcore_4_3_3.xml b/.idea/libraries/Maven__org_apache_httpcomponents_httpcore_4_3_3.xml new file mode 100644 index 0000000..35e79d1 --- /dev/null +++ b/.idea/libraries/Maven__org_apache_httpcomponents_httpcore_4_3_3.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__org_apache_openejb_javaee_api_5_0_1.xml b/.idea/libraries/Maven__org_apache_openejb_javaee_api_5_0_1.xml new file mode 100644 index 0000000..27916af --- /dev/null +++ b/.idea/libraries/Maven__org_apache_openejb_javaee_api_5_0_1.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__org_apache_poi_poi_3_14.xml b/.idea/libraries/Maven__org_apache_poi_poi_3_14.xml new file mode 100644 index 0000000..ab42068 --- /dev/null +++ b/.idea/libraries/Maven__org_apache_poi_poi_3_14.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__org_apache_poi_poi_ooxml_3_14.xml b/.idea/libraries/Maven__org_apache_poi_poi_ooxml_3_14.xml new file mode 100644 index 0000000..e89ddba --- /dev/null +++ b/.idea/libraries/Maven__org_apache_poi_poi_ooxml_3_14.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__org_apache_poi_poi_ooxml_schemas_3_14.xml b/.idea/libraries/Maven__org_apache_poi_poi_ooxml_schemas_3_14.xml new file mode 100644 index 0000000..972cbe1 --- /dev/null +++ b/.idea/libraries/Maven__org_apache_poi_poi_ooxml_schemas_3_14.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__org_apache_poi_poi_scratchpad_3_14.xml b/.idea/libraries/Maven__org_apache_poi_poi_scratchpad_3_14.xml new file mode 100644 index 0000000..5ac831c --- /dev/null +++ b/.idea/libraries/Maven__org_apache_poi_poi_scratchpad_3_14.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__org_apache_servicemix_bundles_org_apache_servicemix_bundles_xerces_2_11_0_1.xml b/.idea/libraries/Maven__org_apache_servicemix_bundles_org_apache_servicemix_bundles_xerces_2_11_0_1.xml new file mode 100644 index 0000000..d112683 --- /dev/null +++ b/.idea/libraries/Maven__org_apache_servicemix_bundles_org_apache_servicemix_bundles_xerces_2_11_0_1.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__org_apache_xmlbeans_xmlbeans_2_6_0.xml b/.idea/libraries/Maven__org_apache_xmlbeans_xmlbeans_2_6_0.xml new file mode 100644 index 0000000..55f0019 --- /dev/null +++ b/.idea/libraries/Maven__org_apache_xmlbeans_xmlbeans_2_6_0.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__org_aspectj_aspectjrt_1_6_9.xml b/.idea/libraries/Maven__org_aspectj_aspectjrt_1_6_9.xml new file mode 100644 index 0000000..6ea7244 --- /dev/null +++ b/.idea/libraries/Maven__org_aspectj_aspectjrt_1_6_9.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__org_aspectj_aspectjweaver_1_6_9.xml b/.idea/libraries/Maven__org_aspectj_aspectjweaver_1_6_9.xml new file mode 100644 index 0000000..f281872 --- /dev/null +++ b/.idea/libraries/Maven__org_aspectj_aspectjweaver_1_6_9.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__org_codehaus_jackson_jackson_core_asl_1_9_7.xml b/.idea/libraries/Maven__org_codehaus_jackson_jackson_core_asl_1_9_7.xml new file mode 100644 index 0000000..812fad5 --- /dev/null +++ b/.idea/libraries/Maven__org_codehaus_jackson_jackson_core_asl_1_9_7.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__org_codehaus_jackson_jackson_mapper_asl_1_9_7.xml b/.idea/libraries/Maven__org_codehaus_jackson_jackson_mapper_asl_1_9_7.xml new file mode 100644 index 0000000..3899d77 --- /dev/null +++ b/.idea/libraries/Maven__org_codehaus_jackson_jackson_mapper_asl_1_9_7.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__org_hamcrest_hamcrest_core_1_3.xml b/.idea/libraries/Maven__org_hamcrest_hamcrest_core_1_3.xml new file mode 100644 index 0000000..1aea0c7 --- /dev/null +++ b/.idea/libraries/Maven__org_hamcrest_hamcrest_core_1_3.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__org_hibernate_common_hibernate_commons_annotations_4_0_1_Final.xml b/.idea/libraries/Maven__org_hibernate_common_hibernate_commons_annotations_4_0_1_Final.xml new file mode 100644 index 0000000..328b0ee --- /dev/null +++ b/.idea/libraries/Maven__org_hibernate_common_hibernate_commons_annotations_4_0_1_Final.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__org_hibernate_hibernate_core_4_1_6_Final.xml b/.idea/libraries/Maven__org_hibernate_hibernate_core_4_1_6_Final.xml new file mode 100644 index 0000000..b3f84d8 --- /dev/null +++ b/.idea/libraries/Maven__org_hibernate_hibernate_core_4_1_6_Final.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__org_hibernate_hibernate_entitymanager_4_1_6_Final.xml b/.idea/libraries/Maven__org_hibernate_hibernate_entitymanager_4_1_6_Final.xml new file mode 100644 index 0000000..3110081 --- /dev/null +++ b/.idea/libraries/Maven__org_hibernate_hibernate_entitymanager_4_1_6_Final.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__org_hibernate_hibernate_envers_4_1_6_Final.xml b/.idea/libraries/Maven__org_hibernate_hibernate_envers_4_1_6_Final.xml new file mode 100644 index 0000000..e030fd1 --- /dev/null +++ b/.idea/libraries/Maven__org_hibernate_hibernate_envers_4_1_6_Final.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__org_hibernate_javax_persistence_hibernate_jpa_2_0_api_1_0_1_Final.xml b/.idea/libraries/Maven__org_hibernate_javax_persistence_hibernate_jpa_2_0_api_1_0_1_Final.xml new file mode 100644 index 0000000..c1b9ecf --- /dev/null +++ b/.idea/libraries/Maven__org_hibernate_javax_persistence_hibernate_jpa_2_0_api_1_0_1_Final.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__org_javassist_javassist_3_15_0_GA.xml b/.idea/libraries/Maven__org_javassist_javassist_3_15_0_GA.xml new file mode 100644 index 0000000..6359ef4 --- /dev/null +++ b/.idea/libraries/Maven__org_javassist_javassist_3_15_0_GA.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__org_jboss_logging_jboss_logging_3_1_0_GA.xml b/.idea/libraries/Maven__org_jboss_logging_jboss_logging_3_1_0_GA.xml new file mode 100644 index 0000000..c14f7c7 --- /dev/null +++ b/.idea/libraries/Maven__org_jboss_logging_jboss_logging_3_1_0_GA.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__org_jboss_spec_javax_transaction_jboss_transaction_api_1_1_spec_1_0_0_Final.xml b/.idea/libraries/Maven__org_jboss_spec_javax_transaction_jboss_transaction_api_1_1_spec_1_0_0_Final.xml new file mode 100644 index 0000000..6e08893 --- /dev/null +++ b/.idea/libraries/Maven__org_jboss_spec_javax_transaction_jboss_transaction_api_1_1_spec_1_0_0_Final.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__org_jodd_jodd_3_3_8.xml b/.idea/libraries/Maven__org_jodd_jodd_3_3_8.xml new file mode 100644 index 0000000..8f65ffc --- /dev/null +++ b/.idea/libraries/Maven__org_jodd_jodd_3_3_8.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__org_json_json_20160810.xml b/.idea/libraries/Maven__org_json_json_20160810.xml new file mode 100644 index 0000000..92edf05 --- /dev/null +++ b/.idea/libraries/Maven__org_json_json_20160810.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__org_quartz_scheduler_quartz_1_8_4.xml b/.idea/libraries/Maven__org_quartz_scheduler_quartz_1_8_4.xml new file mode 100644 index 0000000..24daf28 --- /dev/null +++ b/.idea/libraries/Maven__org_quartz_scheduler_quartz_1_8_4.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__org_slf4j_slf4j_api_1_7_0.xml b/.idea/libraries/Maven__org_slf4j_slf4j_api_1_7_0.xml new file mode 100644 index 0000000..52faad1 --- /dev/null +++ b/.idea/libraries/Maven__org_slf4j_slf4j_api_1_7_0.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__org_slf4j_slf4j_simple_1_7_0.xml b/.idea/libraries/Maven__org_slf4j_slf4j_simple_1_7_0.xml new file mode 100644 index 0000000..1272832 --- /dev/null +++ b/.idea/libraries/Maven__org_slf4j_slf4j_simple_1_7_0.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__org_springframework_security_spring_security_acl_3_1_1_RELEASE.xml b/.idea/libraries/Maven__org_springframework_security_spring_security_acl_3_1_1_RELEASE.xml new file mode 100644 index 0000000..bf910f1 --- /dev/null +++ b/.idea/libraries/Maven__org_springframework_security_spring_security_acl_3_1_1_RELEASE.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__org_springframework_security_spring_security_config_3_1_1_RELEASE.xml b/.idea/libraries/Maven__org_springframework_security_spring_security_config_3_1_1_RELEASE.xml new file mode 100644 index 0000000..50ef5d2 --- /dev/null +++ b/.idea/libraries/Maven__org_springframework_security_spring_security_config_3_1_1_RELEASE.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__org_springframework_security_spring_security_core_3_1_1_RELEASE.xml b/.idea/libraries/Maven__org_springframework_security_spring_security_core_3_1_1_RELEASE.xml new file mode 100644 index 0000000..ba31a61 --- /dev/null +++ b/.idea/libraries/Maven__org_springframework_security_spring_security_core_3_1_1_RELEASE.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__org_springframework_security_spring_security_core_tiger_2_0_7_RELEASE.xml b/.idea/libraries/Maven__org_springframework_security_spring_security_core_tiger_2_0_7_RELEASE.xml new file mode 100644 index 0000000..4c406d4 --- /dev/null +++ b/.idea/libraries/Maven__org_springframework_security_spring_security_core_tiger_2_0_7_RELEASE.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__org_springframework_security_spring_security_taglibs_3_1_1_RELEASE.xml b/.idea/libraries/Maven__org_springframework_security_spring_security_taglibs_3_1_1_RELEASE.xml new file mode 100644 index 0000000..75803e4 --- /dev/null +++ b/.idea/libraries/Maven__org_springframework_security_spring_security_taglibs_3_1_1_RELEASE.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__org_springframework_security_spring_security_web_3_1_1_RELEASE.xml b/.idea/libraries/Maven__org_springframework_security_spring_security_web_3_1_1_RELEASE.xml new file mode 100644 index 0000000..253dd62 --- /dev/null +++ b/.idea/libraries/Maven__org_springframework_security_spring_security_web_3_1_1_RELEASE.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__org_springframework_spring_aop_3_2_5_RELEASE.xml b/.idea/libraries/Maven__org_springframework_spring_aop_3_2_5_RELEASE.xml new file mode 100644 index 0000000..36d7170 --- /dev/null +++ b/.idea/libraries/Maven__org_springframework_spring_aop_3_2_5_RELEASE.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__org_springframework_spring_beans_3_2_5_RELEASE.xml b/.idea/libraries/Maven__org_springframework_spring_beans_3_2_5_RELEASE.xml new file mode 100644 index 0000000..7f3798c --- /dev/null +++ b/.idea/libraries/Maven__org_springframework_spring_beans_3_2_5_RELEASE.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__org_springframework_spring_context_3_2_5_RELEASE.xml b/.idea/libraries/Maven__org_springframework_spring_context_3_2_5_RELEASE.xml new file mode 100644 index 0000000..6d03f14 --- /dev/null +++ b/.idea/libraries/Maven__org_springframework_spring_context_3_2_5_RELEASE.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__org_springframework_spring_context_support_3_2_5_RELEASE.xml b/.idea/libraries/Maven__org_springframework_spring_context_support_3_2_5_RELEASE.xml new file mode 100644 index 0000000..a31cc65 --- /dev/null +++ b/.idea/libraries/Maven__org_springframework_spring_context_support_3_2_5_RELEASE.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__org_springframework_spring_core_3_2_5_RELEASE.xml b/.idea/libraries/Maven__org_springframework_spring_core_3_2_5_RELEASE.xml new file mode 100644 index 0000000..9450a3b --- /dev/null +++ b/.idea/libraries/Maven__org_springframework_spring_core_3_2_5_RELEASE.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__org_springframework_spring_expression_3_2_5_RELEASE.xml b/.idea/libraries/Maven__org_springframework_spring_expression_3_2_5_RELEASE.xml new file mode 100644 index 0000000..029d8c4 --- /dev/null +++ b/.idea/libraries/Maven__org_springframework_spring_expression_3_2_5_RELEASE.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__org_springframework_spring_jdbc_3_2_5_RELEASE.xml b/.idea/libraries/Maven__org_springframework_spring_jdbc_3_2_5_RELEASE.xml new file mode 100644 index 0000000..2d45e5d --- /dev/null +++ b/.idea/libraries/Maven__org_springframework_spring_jdbc_3_2_5_RELEASE.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__org_springframework_spring_orm_3_2_5_RELEASE.xml b/.idea/libraries/Maven__org_springframework_spring_orm_3_2_5_RELEASE.xml new file mode 100644 index 0000000..9d1cde8 --- /dev/null +++ b/.idea/libraries/Maven__org_springframework_spring_orm_3_2_5_RELEASE.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__org_springframework_spring_tx_3_2_5_RELEASE.xml b/.idea/libraries/Maven__org_springframework_spring_tx_3_2_5_RELEASE.xml new file mode 100644 index 0000000..012cf62 --- /dev/null +++ b/.idea/libraries/Maven__org_springframework_spring_tx_3_2_5_RELEASE.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__org_springframework_spring_web_3_2_5_RELEASE.xml b/.idea/libraries/Maven__org_springframework_spring_web_3_2_5_RELEASE.xml new file mode 100644 index 0000000..e813b42 --- /dev/null +++ b/.idea/libraries/Maven__org_springframework_spring_web_3_2_5_RELEASE.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__org_springframework_spring_webmvc_3_2_5_RELEASE.xml b/.idea/libraries/Maven__org_springframework_spring_webmvc_3_2_5_RELEASE.xml new file mode 100644 index 0000000..8288228 --- /dev/null +++ b/.idea/libraries/Maven__org_springframework_spring_webmvc_3_2_5_RELEASE.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__sax_sax_2_0_1.xml b/.idea/libraries/Maven__sax_sax_2_0_1.xml new file mode 100644 index 0000000..98f1048 --- /dev/null +++ b/.idea/libraries/Maven__sax_sax_2_0_1.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__stax_stax_api_1_0_1.xml b/.idea/libraries/Maven__stax_stax_api_1_0_1.xml new file mode 100644 index 0000000..55361e6 --- /dev/null +++ b/.idea/libraries/Maven__stax_stax_api_1_0_1.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__xml_apis_xml_apis_1_4_01.xml b/.idea/libraries/Maven__xml_apis_xml_apis_1_4_01.xml new file mode 100644 index 0000000..f881aeb --- /dev/null +++ b/.idea/libraries/Maven__xml_apis_xml_apis_1_4_01.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/misc.xml b/.idea/misc.xml new file mode 100644 index 0000000..2d87148 --- /dev/null +++ b/.idea/misc.xml @@ -0,0 +1,16 @@ + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/modules.xml b/.idea/modules.xml new file mode 100644 index 0000000..65791fb --- /dev/null +++ b/.idea/modules.xml @@ -0,0 +1,8 @@ + + + + + + + + \ No newline at end of file diff --git a/.idea/uiDesigner.xml b/.idea/uiDesigner.xml new file mode 100644 index 0000000..e96534f --- /dev/null +++ b/.idea/uiDesigner.xml @@ -0,0 +1,124 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/workspace.xml b/.idea/workspace.xml new file mode 100644 index 0000000..534c6ae --- /dev/null +++ b/.idea/workspace.xml @@ -0,0 +1,1288 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + consume_query.do + 请查看 + delete + consume_dialog + format + coupon_history.do + search_consume + vinSelectCode + get_coupon_recharge + consume_query + simpl + SimpleDateFormat + exportData + recharge_query + simple + c_type + rechangeExportData + loginEmailBlur + putSystemUser + update + rescueState + showMyInfoDialog + GET_MY + sendMsg + consume_querys + eval + s + recharges_query + consume_update + sou + + + D:\JLR\JLR-master-19f1e7b4858da9a529342c6e8625154c882ae7c4\src\main\webapp\css + + + + + + + + + + + + true + DEFINITION_ORDER + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 1533884729896 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + file://$PROJECT_DIR$/src/main/java/com/zhongdao/jlr/business/dao/impl/CouponDaoImpl.java + 126 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + jlr:war + + + + + + + + Spring + + + + + + + + + + + + + + + 1.7 + + + + + + + + jlr + + + + + + + + 1.7 + + + + + + + + Maven: antlr:antlr:2.7.7 + + + + + + + + \ No newline at end of file diff --git a/.project b/.project new file mode 100644 index 0000000..77aa2d6 --- /dev/null +++ b/.project @@ -0,0 +1,58 @@ + + + JLR + + + + + + org.eclipse.wst.jsdt.core.javascriptValidator + + + + + org.eclipse.jdt.core.javabuilder + + + + + org.eclipse.wst.common.project.facet.core.builder + + + + + org.eclipse.m2e.core.maven2Builder + + + + + com.genuitec.eclipse.springframework.springbuilder + + + + + org.eclipse.wst.validation.validationbuilder + + + + + com.genuitec.eclipse.j2eedt.core.DeploymentDescriptorValidator + + + + + com.genuitec.eclipse.ast.deploy.core.DeploymentBuilder + + + + + + org.eclipse.jem.workbench.JavaEMFNature + org.eclipse.wst.common.modulecore.ModuleCoreNature + com.genuitec.eclipse.springframework.springnature + org.eclipse.jdt.core.javanature + org.eclipse.m2e.core.maven2Nature + org.eclipse.wst.common.project.facet.core.nature + org.eclipse.wst.jsdt.core.jsNature + + diff --git a/.settings/.jsdtscope b/.settings/.jsdtscope new file mode 100644 index 0000000..9dbed1b --- /dev/null +++ b/.settings/.jsdtscope @@ -0,0 +1,12 @@ + + + + + + + + + + + + diff --git a/.settings/org.eclipse.core.resources.prefs b/.settings/org.eclipse.core.resources.prefs new file mode 100644 index 0000000..2e657e3 --- /dev/null +++ b/.settings/org.eclipse.core.resources.prefs @@ -0,0 +1,5 @@ +eclipse.preferences.version=1 +encoding//src/main/java=UTF-8 +encoding//src/main/resources=UTF-8 +encoding//src/test/java=utf-8 +encoding/=UTF-8 diff --git a/.settings/org.eclipse.jdt.core.prefs b/.settings/org.eclipse.jdt.core.prefs new file mode 100644 index 0000000..443e085 --- /dev/null +++ b/.settings/org.eclipse.jdt.core.prefs @@ -0,0 +1,8 @@ +eclipse.preferences.version=1 +org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled +org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.7 +org.eclipse.jdt.core.compiler.compliance=1.7 +org.eclipse.jdt.core.compiler.problem.assertIdentifier=error +org.eclipse.jdt.core.compiler.problem.enumIdentifier=error +org.eclipse.jdt.core.compiler.problem.forbiddenReference=warning +org.eclipse.jdt.core.compiler.source=1.7 diff --git a/.settings/org.eclipse.m2e.core.prefs b/.settings/org.eclipse.m2e.core.prefs new file mode 100644 index 0000000..f897a7f --- /dev/null +++ b/.settings/org.eclipse.m2e.core.prefs @@ -0,0 +1,4 @@ +activeProfiles= +eclipse.preferences.version=1 +resolveWorkspaceProjects=true +version=1 diff --git a/.settings/org.eclipse.wst.common.component b/.settings/org.eclipse.wst.common.component new file mode 100644 index 0000000..535aa59 --- /dev/null +++ b/.settings/org.eclipse.wst.common.component @@ -0,0 +1,11 @@ + + + + + + + + + + + diff --git a/.settings/org.eclipse.wst.common.project.facet.core.xml b/.settings/org.eclipse.wst.common.project.facet.core.xml new file mode 100644 index 0000000..791234c --- /dev/null +++ b/.settings/org.eclipse.wst.common.project.facet.core.xml @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/.settings/org.eclipse.wst.jsdt.ui.superType.container b/.settings/org.eclipse.wst.jsdt.ui.superType.container new file mode 100644 index 0000000..3bd5d0a --- /dev/null +++ b/.settings/org.eclipse.wst.jsdt.ui.superType.container @@ -0,0 +1 @@ +org.eclipse.wst.jsdt.launching.baseBrowserLibrary \ No newline at end of file diff --git a/.settings/org.eclipse.wst.jsdt.ui.superType.name b/.settings/org.eclipse.wst.jsdt.ui.superType.name new file mode 100644 index 0000000..05bd71b --- /dev/null +++ b/.settings/org.eclipse.wst.jsdt.ui.superType.name @@ -0,0 +1 @@ +Window \ No newline at end of file diff --git a/.settings/org.eclipse.wst.validation.prefs b/.settings/org.eclipse.wst.validation.prefs new file mode 100644 index 0000000..04cad8c --- /dev/null +++ b/.settings/org.eclipse.wst.validation.prefs @@ -0,0 +1,2 @@ +disabled=06target +eclipse.preferences.version=1 diff --git a/jlr.iml b/jlr.iml new file mode 100644 index 0000000..4e440ce --- /dev/null +++ b/jlr.iml @@ -0,0 +1,135 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/pom.xml b/pom.xml new file mode 100644 index 0000000..a68f212 --- /dev/null +++ b/pom.xml @@ -0,0 +1,533 @@ + + + 4.0.0 + com.zhongdao + jlr + war + 1.0-SNAPSHOT + jlr + http://maven.apache.org + + + + + + 3.14 + 1.3.2 + 4.1.6.Final + 3.0.1 + 2.5 + 1.3.2 + 4.0.33 + 1.1.1 + 3.3.2 + 3.2.5.RELEASE + 2.2 + 17.0 + 3.1.1.RELEASE + 1.1.39 + 4.3.3 + 4.3.6 + 3.0 + 2.2.2 + 1.7.0 + 2.1.1-b04 + 5.1.21 + 1.8.4 + + 1.7.3 + 1.2.2 + 1.9.7 + 1.2 + 3.16.1-GA + 3.1.5 + 1.6.1 + 2.2.2 + 0.9.1.2 + 1.6.9 + 1.7.3 + 2.6.12 + 3.0.1 + 2.2 + 1.2.3 + 2.4.7 + 2.0.4 + 1.1 + + 4.11 + 2.18.1 + 3.2.11.RELEASE + + 2.2 + + 3.2 + 1.7 + UTF-8 + true + + + + + + + + + org.json + json + 20141113 + + + + org.apache.servicemix.bundles + org.apache.servicemix.bundles.xerces + 2.11.0_1 + + + + sax + sax + 2.0.1 + + + + org.apache.poi + poi + ${org.apache.poi.version} + + + + org.apache.poi + poi-ooxml + ${org.apache.poi.version} + + + + org.apache.poi + poi-scratchpad + ${org.apache.poi.version} + + + + org.apache.poi + poi-ooxml-schemas + ${org.apache.poi.version} + + + + org.apache.commons + commons-io + ${org.apache.commons.version} + + + + dom4j + dom4j + ${dom4j.version} + + + + com.alibaba + druid + 1.0.15 + + + + org.json + json + 20160810 + + + + org.hibernate + hibernate-envers + ${hibernate.version} + + + + org.hibernate + hibernate-core + ${hibernate.version} + + + + + org.aspectj + aspectjrt + ${aspectj.version} + + + org.aspectj + aspectjweaver + ${aspectj.version} + + + org.apache.commons + commons-io + ${commons.io.version} + + + com.caucho + hessian + ${com.caucho.version} + + + org.quartz-scheduler + quartz + ${org.quartz} + + + com.google.guava + guava + ${google.guava.version} + + + com.alibaba + fastjson + ${com.alibaba.fastjson} + + + + org.apache.httpcomponents + httpcore + ${org.apache.httpcomponents.httpcore} + + + org.apache.httpcomponents + httpclient + ${org.apache.httpcomponents.httpclient} + + + commons-httpclient + commons-httpclient + ${commons.httpclient} + + + + + net.sf.json-lib + json-lib + 2.4 + jdk15 + + + + + + org.springframework + spring-core + ${springframework.version} + + + + org.springframework + spring-web + ${springframework.version} + + + + org.springframework + spring-webmvc + ${springframework.version} + + + org.springframework.security + spring-security-config + ${springframework.security.version} + + + org.springframework.security + spring-security-taglibs + ${springframework.security.version} + + + org.springframework + spring-tx + ${springframework.version} + + + org.springframework + spring-orm + ${springframework.version} + + + org.springframework + spring-context-support + ${springframework.version} + + + org.springframework.security + spring-security-core-tiger + 2.0.7.RELEASE + + + net.sf.ehcache + ehcache-core + ${ehcache-core.version} + + + net.sf.ehcache + ehcache-web + ${ehcache-web.version} + + + + cglib + cglib-nodep + ${cglib.nodep.version} + + + + + org.codehaus.jackson + jackson-core-asl + 1.9.7 + + + org.codehaus.jackson + jackson-mapper-asl + 1.9.7 + + + jstl + jstl + 1.2 + + + + + org.apache.commons + commons-lang3 + ${commons-lang3.version} + + + + commons-lang + commons-lang + ${commons.lang.version} + + + org.apache.commons + commons-io + ${commons.io.version} + + + commons-collections + commons-collections + 3.2.1 + + + + org.slf4j + slf4j-api + ${slf4j.version} + + + org.slf4j + slf4j-simple + 1.7.0 + + + cglib + cglib + ${cglib.version} + + + + + + + + mysql + mysql-connector-java + ${mysql.connector.version} + + + + com.oracle + ojdbc6 + 11.2.0.3 + + + + + commons-fileupload + commons-fileupload + 1.2.2 + + + + + junit + junit + ${junit.version} + test + + + org.apache.openejb + javaee-api + 5.0-1 + provided + + + javax.faces + jsf-api + 1.2_04 + provided + + + javax.servlet + jstl + 1.2 + provided + + + javax.servlet.jsp + jsp-api + 2.1 + provided + + + + javax.servlet + javax.servlet-api + ${servlet.version} + + + + javax.faces + jsf-impl + 1.2_04 + provided + + + + + + + + + org.apache.ant + ant + 1.8.2 + + + org.jodd + jodd + 3.3.8 + + + + + codelds + https://code.lds.org/nexus/content/groups/main-repo + + + + admin + + + org.eclipse.jetty + jetty-maven-plugin + 9.2.6.v20141205 + + + + + + + + dev + + true + + + compile + env_dev + + + + + org.apache.maven.plugins + maven-compiler-plugin + 3.1 + + utf-8 + 1.7 + 1.7 + + + + + + src/main/java + + **/*.java + + + + src/main/resources + true + + + etc/dev + true + + + + + + + test + + compile + env_test + + + + + src/main/java + + **/*.java + + + + src/main/resources + true + + + etc/test + true + + + + + + + online + + provided + env_online + + + + + src/main/java + + **/*.java + + + + src/main/resources + true + + + etc/online + true + + + + + + diff --git a/src/main/java/com/dubh/common/dao/Dao.java b/src/main/java/com/dubh/common/dao/Dao.java new file mode 100644 index 0000000..317d255 --- /dev/null +++ b/src/main/java/com/dubh/common/dao/Dao.java @@ -0,0 +1,154 @@ +package com.dubh.common.dao; + +import java.io.Serializable; +import java.util.List; + +/** + * @author 作者姓名: dubaohui + * @version 创建时间:2015-5-15 上午11:19:21 + * 类说明 :公用方法接口类 + */ +public interface Dao { + + + + /** + * 获取单一对象 + * @param clazz 实体类 + * @param id 主键 + * @return + */ + public Object getObject(Class clazz,Serializable id); + + /** + * 添加对象 + * @param object 实体类 + * @throws Exception + */ + public void saveObject(Object object) throws Exception; + + /** + * 更新对象 + * @param object 实体对象 + * @throws Exception + */ + public void updateObject(Object object) throws Exception; + + /** + * 通过传入hql语句进行批量更新对象 + * @param hqlStr HQL语句 + * @throws Exception + */ + public void updateHql(String hqlStr) throws Exception; + + /** + * 删除对象 + * @param clazz 实体类 + * @param id 主键 + * @throws Exception + */ + public void removeObject(Class clazz, Serializable id) throws Exception; + + /** + * 通过传入标准sql语句获取记录集 + * @param sqlStr SQL语句 + * @return 返回记录集 + * @throws Exception + */ + public List getRsBySql(String sqlStr) throws Exception; + + /** + * 通过传入标准sql语句获取记录集,并支持分页 + * @param sqlStr SQL语句 + * @param pageNo 页码 + * @param pageSize 页面大小 + * @return 返回记录集 + * @throws Exception + */ + public List getRsBySql(String sqlStr,int pageNo,int pageSize) throws Exception; + + /** + * 通过传入hql语句获取记录集,并支持分页功能 + * @param hqlStr HQL语句 + * @param pageNo 页码 + * @param pageSize 页面大小 + * @return 返回记录集 + * @throws Exception + */ + public List getRsByHql(String hqlStr,int pageNo,int pageSize) throws Exception; + + /** + * 批量删除数据 + * @param hqlStr HQL语句 + * @throws Exception + */ + public void deleteHql(String hqlStr) throws Exception; + + /** + * 通过传入hql语句获取记录集 + * @param hqlStr HQL语句 + * @return 返回记录集 + * @throws Exception + */ + public List getRsByHql(String hqlStr) throws Exception; + + /** + * 通过传入标准sql语句获取记录集行数 + * @param sqlStr SQL语句 + * @return + * @throws Exception + */ + public Integer getRsCountsBySql(String sqlStr) throws Exception; + + /** + * 通过传入标准hql语句获取记录集行数 + * @param hqlStr HQL语句 + * @return + * @throws Exception + */ + public Integer getRsCountsByHql(String hqlStr) throws Exception; + + /** + * 删除数据 + * @param object 实体对象 + */ + public void deleteObject(Object object) throws Exception; + + /** + * 保存或更新一个实体对象 + * @param object 实体对象 + * @throws Exception 异常信息 + */ + public void saveOrUpdate(Object object) throws Exception; + + + + /** + * 标准SQL语句修改数据 + * @param sql + * @throws Exception + * */ + public void updateSql (String sql) throws Exception; + /** + * 调用存储过程信息 + * @param stroName + * @throws Exception + */ + public void getcallStor(String stroName,String parm) throws Exception; + + /** + * 执行标准SQL语句 + * @param sql + * @throws Exception + * */ + public void createView(String sql) throws Exception; + + + /** + * 获取单一对象 + * @param hql + * @return Object + * @throws Exception + * */ + public Object getObjectHql(String hql) throws Exception; +} diff --git a/src/main/java/com/dubh/common/dao/hibernate/BaseDaoHibernate.java b/src/main/java/com/dubh/common/dao/hibernate/BaseDaoHibernate.java new file mode 100644 index 0000000..f2fb4a5 --- /dev/null +++ b/src/main/java/com/dubh/common/dao/hibernate/BaseDaoHibernate.java @@ -0,0 +1,674 @@ +package com.dubh.common.dao.hibernate; + +import com.dubh.common.dao.Dao; +import org.hibernate.*; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.orm.ObjectRetrievalFailureException; +import org.springframework.stereotype.Repository; + +import java.io.Serializable; +import java.sql.Connection; +import java.sql.PreparedStatement; +import java.sql.ResultSet; +import java.sql.Statement; +import java.util.ArrayList; +import java.util.List; + +/** + * @author 作者姓名: dubaohui + * @version 创建时间:2015-5-15 上午11:20:08 类说明:公用方法实现类 + */ +public class BaseDaoHibernate implements Dao { + @Autowired + private SessionFactory sessionFactory; + + /*public void setSessionFactory(SessionFactory sessionFactory) { + this.sessionFactory = sessionFactory; + }*/ + + + /** + * 添加对象 + * + * @param object + * 实体类 + * @throws Exception + */ + public void saveObject(Object object) throws Exception { + Session session = null; + Transaction tx=null; + try { + session = sessionFactory.getCurrentSession().getSessionFactory().openSession(); + tx = session.beginTransaction(); + String entityName = getEntityName(object); + session.save(entityName, object); + tx.commit(); + } catch (Exception ex) { + if(tx !=null){ + tx.rollback(); + } + throw new RuntimeException("saveObject:" + ex); + } finally { + + closeResouce(session); + } + } + + public SessionFactory getSessionFactory() { + return sessionFactory; + } + + /** + * 更新对象 + * + * @param object + * 实体对象 + * @throws Exception + */ + public void updateObject(Object object) throws Exception { + + Session session = null; + Transaction tx=null; + try { + session = sessionFactory.getCurrentSession().getSessionFactory().openSession(); + tx = session.beginTransaction(); + String entityName = getEntityName(object); + session.update(entityName, object); + tx.commit(); + } catch (Exception ex) { + if(tx !=null){ + tx.rollback(); + } + throw new RuntimeException("updateObject:" + ex); + } finally { + closeResouce(session); + } + } + + /** + * 删除对象 + * + * @param clazz + * 实体类 + * @param id + * 主键 + * @throws Exception + */ + public void removeObject(Class clazz, Serializable id) throws Exception { + Session session = null; + Transaction tx = null; + try{ + session = sessionFactory.getCurrentSession().getSessionFactory().openSession(); + tx = session.beginTransaction(); + session.delete(getObject(clazz, id)); + tx.commit(); + }catch(Exception ex){ + if(null !=tx){ + tx.rollback(); + } + throw new RuntimeException("removeObject:" + ex); + }finally{ + closeResouce(session); + } + } + + /** + * 通过传入hql语句进行批量更新对象 + * + * @param hqlStr + * HQL语句 + * @throws Exception + */ + public void updateHql(String hqlStr) throws Exception { + Session session = null; + Transaction tx = null; + try { + session = sessionFactory.getCurrentSession().getSessionFactory() + .openSession(); + tx = session.beginTransaction(); + Query query = session.createQuery(hqlStr); + query.executeUpdate(); + tx.commit(); + } catch (Exception ex) { + if(tx !=null){ + tx.rollback(); + } + throw new RuntimeException("updateObjects" + ex); + } finally { + + closeResouce(session); + } + + } + + /** + * 获取单一对象 + * + * @param clazz + * 实体类 + * @param id + * 主键 + * @return + */ + public Object getObject(Class clazz, Serializable id) { + Object o = sessionFactory.getCurrentSession().get(clazz, id); + + if (o == null) { + throw new ObjectRetrievalFailureException(clazz, id); + } + + return o; + } + + /** + * 通过传入hql语句获取记录集,并支持分页功能 + * + * @param hqlStr + * HQL语句 + * @param pageNo + * 页码 + * @param pageSize + * 页面大小 + * @return 返回记录集 + * @throws Exception + */ + public List getRsByHql(String hqlStr, int pageNo, int pageSize) + throws Exception { + List list = new ArrayList(); + Session session = null; + try { + session = sessionFactory.getCurrentSession().getSessionFactory() + .openSession(); + Query query = session.createQuery(hqlStr); + query.setFirstResult(getFirstSize(pageNo, pageSize)); + query.setMaxResults(pageSize); + list = query.list(); + System.out.println(list); + return list; + } catch (HibernateException ex) { + throw new RuntimeException("getRsByHql" + ex); + } finally { + closeResouce(session); + } + } + + /** + * 通过传入标准sql语句获取记录集 + * + * @param sqlStr + * SQL语句 + * @return 返回记录集 + * @throws Exception + */ + public List getRsBySql(String sqlStr) throws Exception { + Session session = null; + try { + long startTime=System.currentTimeMillis(); + session = sessionFactory.getCurrentSession().getSessionFactory() + .openSession(); + SQLQuery sqlQuery = session.createSQLQuery(sqlStr); + System.out.println("getRsBySql1:"+(System.currentTimeMillis()-startTime)); + List list=sqlQuery.list(); + System.out.println("getRsBySql2:"+(System.currentTimeMillis()-startTime)); + return list; + } catch (HibernateException ex) { + throw new RuntimeException("getRsBySql: " + ex); + } finally { + closeResouce(session); + } + } + + /** + * 通过传入标准sql语句获取记录集,并支持分页 + * + * @param sqlStr + * SQL语句 + * @param pageNo + * 页码 + * @param pageSize + * 页面大小 + * @return 返回记录集 + * @throws Exception + */ + public List getRsBySql(String sqlStr, int pageNo, int pageSize) + throws Exception { + Session session = null; + try { + session = sessionFactory.getCurrentSession().getSessionFactory() + .openSession(); + SQLQuery sqlQuery = session.createSQLQuery(sqlStr); + // sqlQuery.list().size(); + sqlQuery.setFirstResult(getFirstSize(pageNo, pageSize)); + sqlQuery.setMaxResults(pageSize); + return sqlQuery.list(); + } catch (HibernateException ex) { + throw new RuntimeException("getRsBySql: " + ex); + } finally { + closeResouce(session); + } + } + + /** + * 通过传入标准sql语句获取记录集行数 + * + * @param sqlStr + * SQL语句 + * @return 返回记录集数量 + * @throws Exception + */ + public Integer getRsCountsBySql(String sqlStr) throws Exception { + // TODO Auto-generated method stub + Session session = null; + Integer count = new Integer(0); + try { + session = sessionFactory.getCurrentSession().getSessionFactory() + .openSession(); + SQLQuery sqlQuery = session.createSQLQuery(sqlStr); + List list = sqlQuery.list(); + if (null != list && list.size() > 0) { + count = list.size(); + } + return count; + } catch (HibernateException ex) { + throw new RuntimeException("getRsCountsBySql: " + ex); + + } finally { + closeResouce(session); + } + } + /** + * 通过传入标准hql语句获取记录集行数 + * + * @param hqlStr + * SQL语句 + * @return 返回记录集数量 + * @throws Exception + */ + public Integer getRsCountsBySelectHql(String hqlStr) throws Exception { + // TODO Auto-generated method stub + Session session = null; + Integer count = new Integer(0); + try { + session = sessionFactory.getCurrentSession().getSessionFactory() + .openSession(); + String countsql="select count(*)"+hqlStr.substring(hqlStr.toLowerCase().indexOf("from")); + + //createSQLQuery和createQuery + count = Integer.valueOf(session.createQuery(countsql).uniqueResult().toString()); + + return count; + } catch (HibernateException ex) { + throw new RuntimeException("getRsCountsBySql: " + ex); + + } finally { + closeResouce(session); + } + } + + /** + * 通过传入标准sql语句获取记录集行数 + * + * @param sqlStr + * SQL语句 + * @return 返回记录集数量 + * @throws Exception + */ + public Integer getRsCountsBySelectSql(String sqlStr) throws Exception { + // TODO Auto-generated method stub + Session session = null; + Integer count = new Integer(0); + try { + session = sessionFactory.getCurrentSession().getSessionFactory() + .openSession(); +// String countsql="select count(*)"+sqlStr.substring(sqlStr.toLowerCase().indexOf("from")); + String countsql="select count(*)"+sqlStr.substring(sqlStr.toLowerCase().lastIndexOf("from")); + //createSQLQuery和createQuery + count = Integer.valueOf(session.createSQLQuery(countsql).uniqueResult().toString()); + + return count; + } catch (HibernateException ex) { + throw new RuntimeException("getRsCountsBySql: " + ex); + + } finally { + closeResouce(session); + } + } + + /** + * 通过传入标准sql语句获取单个sql执行语句 + * + * @param sqlStr + * SQL语句 + * @return 返回记录集数量 + * @throws Exception + */ + public Double getRsSingleCountsBySelectSql(String sqlStr) throws Exception { + Session session = null; + Double count = new Double(0); + try { + session = sessionFactory.getCurrentSession().getSessionFactory() + .openSession(); + String countsql=sqlStr; + + count = Double.valueOf((session.createSQLQuery(countsql).uniqueResult()).toString()); + + return count; + } catch (HibernateException ex) { + throw new RuntimeException("getRsCountsBySql: " + ex); + + }catch (NullPointerException ex) { + ex.printStackTrace(); + return 0.0; + + } finally { + closeResouce(session); + } + } + /** + * 通过传入标准hql语句获取记录集行数 + * + * @param hqlStr + * HQL语句 + * @throws Exception + */ + public Integer getRsCountsByHql(String hqlStr) throws Exception { + // TODO Auto-generated method stub + Session session = null; + Integer count = new Integer(0); + try { + session = sessionFactory.getCurrentSession().getSessionFactory() + .openSession(); + Query query = session.createQuery(hqlStr); + List list = query.list(); + if (null != list && list.size() > 0) { + count = list.size(); + } + return count; + } catch (HibernateException ex) { + throw new RuntimeException("getRsCountsByHql:" + ex); + + } finally { + closeResouce(session); + } + } + + /** + * 通过传入hql语句获取记录集 + * + * @param hqlStr + * HQL语句 + * @return 返回记录集 + * @throws Exception + */ + public List getRsByHql(String hqlStr) throws Exception { + Query query = sessionFactory.getCurrentSession().createQuery(hqlStr); + return query.list(); + } + + /** + * 批量删除数据 + * + * @param hqlStr + * HQL语句 + * @throws Exception + */ + public void deleteHql(String hqlStr) throws Exception { + Session session = null; + Transaction tx = null; + try { + session = sessionFactory.getCurrentSession().getSessionFactory() + .openSession(); + tx = session.beginTransaction(); + Query query = session.createQuery(hqlStr); + query.executeUpdate(); + tx.commit(); + } catch (Exception ex) { + if(tx !=null){ + tx.rollback(); + } + throw new RuntimeException("deleteHql:" + ex); + } finally { + closeResouce(session); + } + + } + + /** + * 删除数据 + * + * @param object + * 实体对象 + */ + public void deleteObject(Object object) throws Exception { + Session session =null; + Transaction tx = null; + try { + session = sessionFactory.getCurrentSession().getSessionFactory().openSession(); + tx = session.beginTransaction(); + session.delete(object); + tx.commit(); + } catch (Exception e) { + if(tx !=null){ + tx.rollback(); + } + throw new RuntimeException("deleteObject:" + e); + }finally{ + closeResouce(session); + } + } + + /** + * 关闭资源 + * + * @param object + * @throws Exception + */ + protected void closeResouce(Object object) throws Exception { + if (null == object) + return; + + if (object instanceof Connection) { + Connection conn = (Connection) object; + conn.close(); + } else if (object instanceof Statement) { + Statement statement = (Statement) object; + statement.close(); + } else if (object instanceof PreparedStatement) { + PreparedStatement prepared = (PreparedStatement) object; + prepared.close(); + } else if (object instanceof ResultSet) { + ResultSet rs = (ResultSet) object; + rs.close(); + } else if (object instanceof Session) { + Session session = (Session) object; + session.close(); + } + + } + + /** + * 获得实体对象名称 + * + * @param object + * 实体对象 + * @return + */ + private String getEntityName(Object object) { + String entityName = new String(""); + try { + Class objectClass = object.getClass(); + entityName = objectClass.getName(); + } catch (Exception ex) { + throw new RuntimeException("" + ex); + } + return entityName; + } + + /** + * 保存或更新一个实体对象 + * + * @param object + * 实体对象 + * @throws Exception + * 异常信息 + */ + public void saveOrUpdate(Object object) throws Exception { + Session session =null; + Transaction tx = null; + try { + session = sessionFactory.getCurrentSession().getSessionFactory().openSession(); + tx = session.beginTransaction(); + session.saveOrUpdate(object); + session.flush(); + session.clear(); + tx.commit(); + } catch (Exception e) { + if(tx !=null){ + tx.rollback(); + } + throw new RuntimeException("saveOrUpdate " + e); + }finally{ + closeResouce(session); + } + + } + + /** + * 获得当前分页开始的记录数 + * + * @param pageNo + * 页码 + * @param pageSize + * 页面大小 + * @return 当前分页开始记录数 + */ + private int getFirstSize(int pageNo, int pageSize) { + int firstSize = 0; + firstSize = (pageNo - 1) * pageSize; + return firstSize; + } + + public void updateSql(String sql) throws Exception { + Session session = null; + Transaction tx = null; + try { + session = getSession(); + tx = session.beginTransaction(); + SQLQuery query = session.createSQLQuery(sql); + query.executeUpdate(); + tx.commit(); + } catch (Exception ex) { + if(tx !=null){ + tx.rollback(); + } + throw new RuntimeException("updateSql:" + ex); + } finally { + closeResouce(session); + } + } + + /** + * 调用存储过程信息 + * + * @param stroName + * @throws Exception + */ + public void getcallStor(String stroName, String parm) throws Exception { + Session session = null; + try { + session = sessionFactory.getCurrentSession().getSessionFactory() + .openSession(); + String proc = "{ call " + stroName + "(:param) }"; + SQLQuery query = session.createSQLQuery(proc); + if (null != parm && !"".equals(parm)) { + query.setParameter("param", parm); + } + query.executeUpdate(); + } catch (Exception ex) { + + throw new RuntimeException("getcallStor:" + ex); + + } finally { + + closeResouce(session); + } + } + + public void createView(String sqlStr) throws Exception { + Session session = null; + Transaction tx = null; + try { + session = sessionFactory.getCurrentSession().getSessionFactory() + .openSession(); + tx = session.beginTransaction(); + SQLQuery query = sessionFactory.getCurrentSession().createSQLQuery( + sqlStr); + query.executeUpdate(); + tx.commit(); + } catch (Exception ex) { + if(tx !=null){ + tx.rollback(); + } + throw new RuntimeException("createView:" + ex); + + } finally { + + closeResouce(session); + } + + + } + + public void deletes(String hqlStr) throws Exception { + Session session = null; + Transaction tx = null; + try { + session = sessionFactory.getCurrentSession().getSessionFactory() + .openSession(); + tx = session.beginTransaction(); + Query query = session.createQuery(hqlStr); + query.executeUpdate(); + tx.commit(); + } catch (Exception ex) { + if(tx !=null){ + tx.rollback(); + } + throw new RuntimeException("deletes:" + ex); + + } finally { + + closeResouce(session); + } + + } + + @Override + public Object getObjectHql(String hql) throws Exception { + // TODO Auto-generated method stub + Session session = null; + Object obj = null; + try { + session = sessionFactory.getCurrentSession().getSessionFactory() + .openSession(); + Query query = session.createQuery(hql); + obj = query.uniqueResult(); + } catch (Exception ex) { + throw new RuntimeException("getObjectHql:" + ex); + } finally { + closeResouce(session); + } + + return obj; + } + + + public Session getSession() { + Session session = null; + if(null==session || false==session.isOpen()){ + session = sessionFactory.openSession(); + }else{ + session=sessionFactory.getCurrentSession(); + } + return session; + } +} diff --git a/src/main/java/com/dubh/common/dto/BaseDto.java b/src/main/java/com/dubh/common/dto/BaseDto.java new file mode 100644 index 0000000..852f051 --- /dev/null +++ b/src/main/java/com/dubh/common/dto/BaseDto.java @@ -0,0 +1,31 @@ +package com.dubh.common.dto; + +import java.io.Serializable; + +/** + * @author 作者姓名: dubaohui + * @version 创建时间:2015-5-15 上午11:23:33 + * 类说明 实体类序列化及分页参数封装 + */ +public class BaseDto implements Serializable { + protected int pageNo = 0; + protected int pageSize =0; + + public int getPageNo() { + return pageNo; + } + + public void setPageNo(int pageNo) { + this.pageNo = pageNo; + } + + public int getPageSize() { + return pageSize; + } + + public void setPageSize(int pageSize) { + this.pageSize = pageSize; + } + + +} diff --git a/src/main/java/com/dubh/common/file/Downfile.java b/src/main/java/com/dubh/common/file/Downfile.java new file mode 100644 index 0000000..d68bb98 --- /dev/null +++ b/src/main/java/com/dubh/common/file/Downfile.java @@ -0,0 +1,60 @@ +package com.dubh.common.file; + +import java.io.BufferedInputStream; +import java.io.BufferedOutputStream; +import java.io.File; +import java.io.FileInputStream; +import java.io.IOException; +import java.io.InputStream; +import java.io.OutputStream; +import java.net.URLEncoder; + +import javax.servlet.ServletOutputStream; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; + +/** + * @author 作者姓名: dubaohui + * @version 创建时间:2015-8-12 下午7:17:21 + * 类说明 + */ +public class Downfile { + + public static void DownloadFile(HttpServletRequest request,HttpServletResponse response,String filename){ + //获取网站部署路径(通过ServletContext对象),用于确定下载文件位置,从而实现下载 + String path = request.getSession().getServletContext().getRealPath("attached")+File.separator+filename; + File file = null; + try { + file = new File(path); + } catch (Exception e) { + e.printStackTrace(); + } + + if(null!=file){ + if(file.exists()){ + try { + //弹出下载对话框 + response.setHeader("Content-disposition", "attachment;filename=" + URLEncoder.encode(file.getName(), "utf-8")); + OutputStream os = os=response.getOutputStream(); + InputStream is= is=new FileInputStream(file); + BufferedInputStream bis=new BufferedInputStream(is); + BufferedOutputStream bos= new BufferedOutputStream(os); + //用输入流进行先读,然后用输出流去写 + int bytesRead = 0; + byte[] buffer = new byte[8192]; + while ((bytesRead = bis.read(buffer, 0, 8192)) != -1) { + bos.write(buffer, 0, bytesRead); + } + bos.flush(); + bos.close(); + bis.close(); + os.flush(); + os.close(); + is.close(); + } catch (IOException e) { + e.printStackTrace(); + } + } + } + } +} diff --git a/src/main/java/com/dubh/common/file/UploadFile.java b/src/main/java/com/dubh/common/file/UploadFile.java new file mode 100644 index 0000000..756cdfc --- /dev/null +++ b/src/main/java/com/dubh/common/file/UploadFile.java @@ -0,0 +1,243 @@ +package com.dubh.common.file; +import java.io.File; +import java.util.Iterator; +import java.util.UUID; + +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; + +import org.json.JSONArray; +import org.json.JSONObject; +import org.springframework.web.multipart.MultipartFile; +import org.springframework.web.multipart.MultipartHttpServletRequest; +import org.springframework.web.multipart.commons.CommonsMultipartResolver; + +import com.util.RequestUtil; + +/** + * @author 作者姓名: dubaohui + * @version 创建时间:2015-5-18 下午8:29:45 + * + * 类说明 :文件上传 + */ +public class UploadFile { + + + /** + * 多文件上传 + * @param HttpServletRequest + * @param HttpServletResponse + * @return JSONArray + * */ + public static JSONArray uploadmore(HttpServletRequest request, + HttpServletResponse response) { + JSONArray array = new JSONArray(); + try { + // 创建一个通用的多部分解析器 + CommonsMultipartResolver multipartResolver = new CommonsMultipartResolver( + request.getSession().getServletContext()); + // 判断 request 是否有文件上传,即多部分请求 + if (multipartResolver.isMultipart(request)) { + // 转换成多部分request + MultipartHttpServletRequest multiRequest = (MultipartHttpServletRequest) request; + // 取得request中的所有文件名 + Iterator iter = multiRequest.getFileNames(); + while (iter.hasNext()) { + JSONObject object = new JSONObject(); + // 记录上传过程起始时的时间,用来计算上传时间 + int pre = (int) System.currentTimeMillis(); + // 取得上传文件 + MultipartFile file = multiRequest.getFile(iter.next()); + if (file != null) { + // 取得当前上传文件的文件名称 + String myFileName = file.getOriginalFilename(); + // 如果名称不为“”,说明该文件存在,否则说明该文件不存在 + if (myFileName.trim() != "") { + String oldname = myFileName; + object.put("filename",oldname); + object.put("filekj", file.getName()); + //定义上传路径命名新文件夹 + String mkfile = RequestUtil.getid(0); + //判断新文件夹是否存在 + String paths = request.getSession().getServletContext().getRealPath("attached")+"/"+mkfile; + File newfile = new File(paths); + if(!newfile.exists()){ + newfile.mkdir(); + } + //新文件名称 + String newfilename=RequestUtil.getid(3)+"."+RequestUtil.getExtensionName(myFileName); + //文件绝对路径 + String path = paths+"/"+ newfilename; + File localFile = new File(path); + file.transferTo(localFile); + //文件相对路径 + String filepath = "/"+"attached"+"/"+mkfile+"/"+newfilename; + object.put("filepath",filepath); + // 记录上传该文件后的时间 + int finaltime = (int) System.currentTimeMillis(); + int time = finaltime - pre; + object.put("time",time); + array.put(object); + } + } + } + + } + } catch (Exception ex) { + ex.printStackTrace(); + } + return array; + } + + + + + + /*** + * + * 单文件上传 + * @param HttpServletRequest + * @param HttpServletResponse + * @return JSONObject + * */ + public static JSONObject uploadone(HttpServletRequest request, + HttpServletResponse response) { + JSONObject object = new JSONObject(); + String oldname =""; + String filepath=""; + int time =0; + try { + // 创建一个通用的多部分解析器 + CommonsMultipartResolver multipartResolver = new CommonsMultipartResolver( + request.getSession().getServletContext()); + // 判断 request 是否有文件上传,即多部分请求 + if (multipartResolver.isMultipart(request)) { + // 转换成多部分request + MultipartHttpServletRequest multiRequest = (MultipartHttpServletRequest) request; + // 取得request中的所有文件名 + Iterator iter = multiRequest.getFileNames(); + while (iter.hasNext()) { + // 记录上传过程起始时的时间,用来计算上传时间 + int pre = (int) System.currentTimeMillis(); + // 取得上传文件 + MultipartFile file = multiRequest.getFile(iter.next()); + if (file != null) { + // 取得当前上传文件的文件名称 + String myFileName = file.getOriginalFilename(); + // 如果名称不为“”,说明该文件存在,否则说明该文件不存在 + if (myFileName.trim() != "") { + oldname = myFileName; + + //定义上传路径命名新文件夹 + String mkfile = RequestUtil.getid(5); + //判断新文件夹是否存在 + String paths = request.getSession().getServletContext().getRealPath("attached")+"/"+mkfile; + File newfile = new File(paths); + if(!newfile.exists()){ + newfile.mkdir(); + } + //新文件名称 + String newfilename=RequestUtil.getid(3)+"."+RequestUtil.getExtensionName(myFileName); + //文件绝对路径 + String path = paths+"/"+ newfilename; + File localFile = new File(path); + file.transferTo(localFile); + //文件相对路径 + filepath = "/"+"attached"+"/"+mkfile+"/"+newfilename; + + } + } + // 记录上传该文件后的时间 + int finaltime = (int) System.currentTimeMillis(); + time = finaltime - pre; + + } + + } + object.put("time",time); + object.put("filename",oldname); + object.put("filepath",filepath); + } catch (Exception ex) { + ex.printStackTrace(); + } + return object; + } + + + + /** + * 多文件上传(仅供与检测端使用) + * @param HttpServletRequest + * @param HttpServletResponse + * @return JSONArray + * */ + public static JSONArray uploadmore2(HttpServletRequest request, + HttpServletResponse response,String id) { + JSONArray array = new JSONArray(); + try { + // 创建一个通用的多部分解析器 + CommonsMultipartResolver multipartResolver = new CommonsMultipartResolver(request.getSession().getServletContext()); + // 判断 request 是否有文件上传,即多部分请求 + if (multipartResolver.isMultipart(request)) { + // 转换成多部分request + MultipartHttpServletRequest multiRequest = (MultipartHttpServletRequest) request; + // 取得request中的所有文件名 + Iterator iter = multiRequest.getFileNames(); + while (iter.hasNext()) { + JSONObject object = new JSONObject(); + // 记录上传过程起始时的时间,用来计算上传时间 + int pre = (int) System.currentTimeMillis(); + // 取得上传文件 + MultipartFile file = multiRequest.getFile(iter.next()); + synchronized (file) { + if (file != null) { + // 取得当前上传文件的文件名称 + String myFileName = file.getOriginalFilename(); + // 如果名称不为“”,说明该文件存在,否则说明该文件不存在 + if (myFileName.trim() != "") { + String oldname = myFileName; + oldname=oldname.replaceAll("_", ""); + object.put("filename",oldname); + object.put("filekj", file.getName()); + object.put("filesize", file.getSize()/1024); + String type=oldname.substring((oldname.lastIndexOf(".")+1),oldname.length()); + object.put("type", type); + //定义上传路径命名新文件夹 + String mkfile =id; + //判断新文件夹是否存在 + String paths = request.getSession().getServletContext().getRealPath("attached")+"/"+mkfile; + File newfile = new File(paths); + if(!newfile.exists()){ + newfile.mkdir(); + } + //新文件名称 +// String newfilename=RequestUtil.getid(3)+"."+RequestUtil.getExtensionName(myFileName); + String newfilename=UUID.randomUUID()+"."+RequestUtil.getExtensionName(myFileName); + //文件绝对路径 +// String path = paths+"/"+ oldname; + String path = paths+"/"+ newfilename; + File localFile = new File(path); + file.transferTo(localFile); + //文件相对路径 +// String filepath = "/"+"attached"+"/"+mkfile+"/"+oldname; + String filepath = "/"+"attached"+"/"+mkfile+"/"+newfilename; + object.put("filepath",filepath); + // 记录上传该文件后的时间 + int finaltime = (int) System.currentTimeMillis(); + int time = finaltime - pre; + System.out.println(file.getName()+":"+filepath); + object.put("time",time); + array.put(object); + } + } + } + } + + } + } catch (Exception ex) { + ex.printStackTrace(); + } + return array; + } + +} diff --git a/src/main/java/com/dubh/sysconfig/EacheConfig.java b/src/main/java/com/dubh/sysconfig/EacheConfig.java new file mode 100644 index 0000000..ee794ed --- /dev/null +++ b/src/main/java/com/dubh/sysconfig/EacheConfig.java @@ -0,0 +1,21 @@ +package com.dubh.sysconfig; +/** + * @author 作者姓名: dubaohui + * @version 创建时间:2015-8-14 上午9:04:13 + * 类说明 + */ +public class EacheConfig { + //当前方法名 + public static final String methodnames = "#root.methodName"; + //当前方法 + public static final String methodname = "#root.method.name"; + //当前被调用的对象 + public static final String targetobject = "#root.target"; + //当前被调用的对象的class + public static final String targetclass = "#root.targetClass"; + //当前方法参数组成的数组 + public static final String args = "#root.args[0]"; + //当前被调用的方法使用的Cache + public static final String caches = "#root.caches[0].name"; + +} diff --git a/src/main/java/com/dubh/sysconfig/ehcache.xml b/src/main/java/com/dubh/sysconfig/ehcache.xml new file mode 100644 index 0000000..01df772 --- /dev/null +++ b/src/main/java/com/dubh/sysconfig/ehcache.xml @@ -0,0 +1,69 @@ + + + + + + + + + + + + + + + diff --git a/src/main/java/com/dubh/sysconfig/group.properties b/src/main/java/com/dubh/sysconfig/group.properties new file mode 100644 index 0000000..11ff692 --- /dev/null +++ b/src/main/java/com/dubh/sysconfig/group.properties @@ -0,0 +1,3 @@ +functiontype=user +initpassword=111111 +userexportcoll=\u90E8\u95E8\u540D\u79F0,\u7528\u6237\u59D3\u540D,\u7528\u6237\u5E10\u53F7,\u6027\u522B,\u8054\u7CFB\u7535\u8BDD,\u90AE\u7BB1,\u7528\u6237\u804C\u79F0,\u6BD5\u4E1A\u9662\u6821,\u7C4D\u8D2F,\u6C11\u65CF,\u8EAB\u4EFD\u8BC1\u53F7\u7801,\u6237\u7C4D\u5730\u5740,\u5C45\u4F4F\u5730\u5740,\u7528\u6237\u63CF\u8FF0 \ No newline at end of file diff --git a/src/main/java/com/dubh/syslog/annotation/SystemControllerAfterLog.java b/src/main/java/com/dubh/syslog/annotation/SystemControllerAfterLog.java new file mode 100644 index 0000000..530c5c0 --- /dev/null +++ b/src/main/java/com/dubh/syslog/annotation/SystemControllerAfterLog.java @@ -0,0 +1,16 @@ +package com.dubh.syslog.annotation; +import java.lang.annotation.*; +/** + * @author 作者姓名: dubaohui + * @version 创建时间:2015-5-18 下午12:43:33 + * 类说明 :自定义注解 后置通知拦截Controller + */ +@Target({ElementType.PARAMETER, ElementType.METHOD}) +@Retention(RetentionPolicy.RUNTIME) +@Documented +public @interface SystemControllerAfterLog { + + String description() default ""; + +} + diff --git a/src/main/java/com/dubh/syslog/annotation/SystemControllerBeforeLog.java b/src/main/java/com/dubh/syslog/annotation/SystemControllerBeforeLog.java new file mode 100644 index 0000000..33525dd --- /dev/null +++ b/src/main/java/com/dubh/syslog/annotation/SystemControllerBeforeLog.java @@ -0,0 +1,16 @@ +package com.dubh.syslog.annotation; +import java.lang.annotation.*; +/** + * @author 作者姓名: dubaohui + * @version 创建时间:2015-5-18 下午12:43:33 + * 类说明 :自定义注解 前置通知拦截Controller + */ +@Target({ElementType.PARAMETER, ElementType.METHOD}) +@Retention(RetentionPolicy.RUNTIME) +@Documented +public @interface SystemControllerBeforeLog { + + String description() default ""; + +} + diff --git a/src/main/java/com/dubh/syslog/annotation/SystemLogAspect.java b/src/main/java/com/dubh/syslog/annotation/SystemLogAspect.java new file mode 100644 index 0000000..a5c1a1e --- /dev/null +++ b/src/main/java/com/dubh/syslog/annotation/SystemLogAspect.java @@ -0,0 +1,263 @@ +package com.dubh.syslog.annotation; + +import org.aspectj.lang.JoinPoint; +import org.aspectj.lang.annotation.*; +import org.springframework.stereotype.Component; +import org.springframework.web.context.request.RequestContextHolder; +import org.springframework.web.context.request.ServletRequestAttributes; + + +import com.util.RequestUtil; +import javax.annotation.Resource; +import javax.servlet.http.HttpServletRequest; +import java.lang.reflect.Method; + +/** + * @author 作者姓名: dubaohui + * @version 创建时间:2015-5-18 下午12:46:28 类说明:切入点 + */ +@Aspect +@Component +public class SystemLogAspect { + // 注入Service用于把日志保存数据库 +// @Resource(name = "syslogservice") +// private SyslogService syslogservice; + + // Service层切点 + @Pointcut("@annotation(com.dubh.syslog.annotation.SystemServiceLog)") + public void serviceAspect() { + } + + // 前置Controller层切点 + @Pointcut("@annotation(com.dubh.syslog.annotation.SystemControllerBeforeLog)") + public void controllerBeforeAspect() { + } + + // 后置Controller层切点 + @Pointcut("@annotation(com.dubh.syslog.annotation.SystemControllerAfterLog)") + public void controllerAfterAspect() { + } + + /** + * 前置通知 用于拦截Controller层记录用户的操作 + * + * @param joinPoint + * 切点 + */ + @Before("controllerBeforeAspect()") + public void doBefore(JoinPoint joinPoint) { + HttpServletRequest request = ((ServletRequestAttributes) RequestContextHolder + .getRequestAttributes()).getRequest(); +// // 读取session中的用户 +// Tblsysuser user = SessionUser.getsession(request); +// String loginname = ""; +// String loginkey = ""; +// String loginaccount = ""; +// if (null != user) { +// loginname = user.getSysusername(); +// loginkey = user.getSysuserkey(); +// loginaccount = user.getSysaccount(); +// } +// // 请求的IP +// String ip = RequestUtil.getIpAddr(request); +// try { +// Tblsyslog loginfo = new Tblsyslog(); +// loginfo.setSyslogkey(RequestUtil.getid(6)); +// loginfo.setSysuserkey(loginkey); +// loginfo.setSysuseraccount(loginaccount); +// loginfo.setSysusername(loginname); +// loginfo.setSyspagename(joinPoint.getTarget().getClass().getName() +// + "." + joinPoint.getSignature().getName()); +// loginfo.setSysclassnameen(joinPoint.getTarget().getClass() +// .getName()); +// loginfo.setSyslogmothoden(joinPoint.getSignature().getName()); +// loginfo.setSyslogmothodcn(getControllerBeforeMethodDescription(joinPoint)); +// loginfo.setSysipaddress(ip); +// loginfo.setSyslogdate(RequestUtil.getDateTime()); +//// syslogservice.savelog(loginfo); +// } catch (Exception e) { +// // 记录本地异常日志 +// System.out.println("==前置通知异常=="); +// System.out.println("异常信息:{}" + e.getMessage()); +// } + } + + /** + * 后置通知 用于拦截Controller层记录用户的操作 + * + * @param joinPoint + * 切点 + */ + @After("controllerAfterAspect()") + public void doAfter(JoinPoint joinPoint) { + HttpServletRequest request = ((ServletRequestAttributes) RequestContextHolder + .getRequestAttributes()).getRequest(); + // 读取session中的用户 +// Tblsysuser user = SessionUser.getsession(request); +// String loginname = ""; +// String loginaccount = ""; +// String loginkey =""; +// if(null !=user){ +// loginname = user.getSysusername(); +// loginaccount = user.getSysaccount(); +// loginkey = user.getSysuserkey(); +// } +// // 请求的IP +// String ip = RequestUtil.getIpAddr(request); +// try { +// Tblsyslog loginfo = new Tblsyslog(); +// loginfo.setSyslogkey(RequestUtil.getid(6)); +// loginfo.setSysuserkey(loginkey); +// loginfo.setSysuseraccount(loginaccount); +// loginfo.setSysusername(loginname); +// loginfo.setSyspagename(joinPoint.getTarget().getClass().getName() +// + "." + joinPoint.getSignature().getName()); +// loginfo.setSysclassnameen(joinPoint.getTarget().getClass() +// .getName()); +// loginfo.setSyslogmothoden(joinPoint.getSignature().getName()); +// loginfo.setSyslogmothodcn(getControllerAfterMethodDescription(joinPoint)); +// loginfo.setSysipaddress(ip); +// loginfo.setSyslogdate(RequestUtil.getDateTime()); +//// syslogservice.savelog(loginfo); +// } catch (Exception e) { +// // 记录本地异常日志 +// System.out.println("==后置通知异常=="); +// System.out.println("异常信息:{}" + e.getMessage()); +// } + } + + /** + * 异常通知 用于拦截service层记录异常日志 + * + * @param joinPoint + * @param e + */ + @AfterThrowing(pointcut = "serviceAspect()", throwing = "e") + public void doAfterThrowing(JoinPoint joinPoint, Throwable e) { + HttpServletRequest request = ((ServletRequestAttributes) RequestContextHolder + .getRequestAttributes()).getRequest(); +// // 读取session中的用户 +// Tblsysuser user = SessionUser.getsession(request); +// // 获取请求ip +// String ip = request.getRemoteAddr(); +// // 获取用户请求方法的参数并序列化为JSON格式字符串 +// String params = ""; +// if (joinPoint.getArgs() != null && joinPoint.getArgs().length > 0) { +// for (int i = 0; i < joinPoint.getArgs().length; i++) { +// params += joinPoint.getArgs()[i] + ";"; +// } +// } +// try { +// /* ========控制台输出========= */ +// System.out.println("=====异常通知开始====="); +// System.out.println("异常代码:" + e.getClass().getName()); +// System.out.println("异常信息:" + e.getMessage()); +// System.out.println("异常方法:" +// + (joinPoint.getTarget().getClass().getName() + "." +// + joinPoint.getSignature().getName() + "()")); +// System.out.println("方法描述:" + getServiceMthodDescription(joinPoint)); +// System.out.println("请求人:" + user.getSysusername()); +// System.out.println("请求IP:" + ip); +// System.out.println("请求参数:" + params); +// /* ==========数据库日志========= */ +// System.out.println("=====异常通知结束====="); +// } catch (Exception ex) { +// // 记录本地异常日志 +// System.out.println("==异常通知异常=="); +// System.out.println("异常信息:{}" + ex.getMessage()); +// } +// /* ==========记录本地异常日志========== */ +// System.out.println("异常方法:" + joinPoint.getTarget().getClass().getName() +// + joinPoint.getSignature().getName()); +// System.out.println("异常代码:" + e.getClass().getName()); +// System.out.println("异常信息:" + e.getMessage()); +// System.out.println("参数:" + params); + } + + /** + * 获取注解中对方法的描述信息 用于service层注解 + * + * @param joinPoint + * 切点 + * @return 方法描述 + * @throws Exception + */ + public static String getServiceMthodDescription(JoinPoint joinPoint) + throws Exception { + String targetName = joinPoint.getTarget().getClass().getName(); + String methodName = joinPoint.getSignature().getName(); + Object[] arguments = joinPoint.getArgs(); + Class targetClass = Class.forName(targetName); + Method[] methods = targetClass.getMethods(); + String description = ""; + for (Method method : methods) { + if (method.getName().equals(methodName)) { + Class[] clazzs = method.getParameterTypes(); + if (clazzs.length == arguments.length) { + description = method.getAnnotation(SystemServiceLog.class) + .description(); + break; + } + } + } + return description; + } + + /** + * 获取注解中对方法的描述信息 用于Controller层注解 + * + * @param joinPoint + * 切点 + * @return 方法描述 + * @throws Exception + */ + public static String getControllerAfterMethodDescription(JoinPoint joinPoint) + throws Exception { + String targetName = joinPoint.getTarget().getClass().getName(); + String methodName = joinPoint.getSignature().getName(); + Object[] arguments = joinPoint.getArgs(); + Class targetClass = Class.forName(targetName); + Method[] methods = targetClass.getMethods(); + String description = ""; + for (Method method : methods) { + if (method.getName().equals(methodName)) { + Class[] clazzs = method.getParameterTypes(); + if (clazzs.length == arguments.length) { + description = method.getAnnotation( + SystemControllerAfterLog.class).description(); + break; + } + } + } + return description; + } + + /** + * 获取注解中对方法的描述信息 用于Controller层注解 + * + * @param joinPoint + * 切点 + * @return 方法描述 + * @throws Exception + */ + public static String getControllerBeforeMethodDescription( + JoinPoint joinPoint) throws Exception { + String targetName = joinPoint.getTarget().getClass().getName(); + String methodName = joinPoint.getSignature().getName(); + Object[] arguments = joinPoint.getArgs(); + Class targetClass = Class.forName(targetName); + Method[] methods = targetClass.getMethods(); + String description = ""; + for (Method method : methods) { + if (method.getName().equals(methodName)) { + Class[] clazzs = method.getParameterTypes(); + if (clazzs.length == arguments.length) { + description = method.getAnnotation( + SystemControllerBeforeLog.class).description(); + break; + } + } + } + return description; + } +} diff --git a/src/main/java/com/dubh/syslog/annotation/SystemServiceLog.java b/src/main/java/com/dubh/syslog/annotation/SystemServiceLog.java new file mode 100644 index 0000000..f76fed5 --- /dev/null +++ b/src/main/java/com/dubh/syslog/annotation/SystemServiceLog.java @@ -0,0 +1,20 @@ +package com.dubh.syslog.annotation; +import java.lang.annotation.Documented; +import java.lang.annotation.ElementType; +import java.lang.annotation.Retention; +import java.lang.annotation.RetentionPolicy; +import java.lang.annotation.Target; +/** + * @author 作者姓名: dubaohui + * @version 创建时间:2015-5-18 下午12:45:10 + * 类说明:自定义注解 拦截service + */ +@Target({ElementType.PARAMETER, ElementType.METHOD}) +@Retention(RetentionPolicy.RUNTIME) +@Documented +public @interface SystemServiceLog { + + String description() default ""; + + +} diff --git a/src/main/java/com/hessian/HessianService.java b/src/main/java/com/hessian/HessianService.java new file mode 100644 index 0000000..ff452ef --- /dev/null +++ b/src/main/java/com/hessian/HessianService.java @@ -0,0 +1,10 @@ +package com.hessian; +/** + * @author 作者姓名: dubaohui + * @version 创建时间:2015-12-16 下午4:58:10 + * 类说明 + */ +public interface HessianService { + + public String getName(String names); +} diff --git a/src/main/java/com/ljh/excel/annotation/ColumnAnnotation.java b/src/main/java/com/ljh/excel/annotation/ColumnAnnotation.java new file mode 100644 index 0000000..01dc1d1 --- /dev/null +++ b/src/main/java/com/ljh/excel/annotation/ColumnAnnotation.java @@ -0,0 +1,15 @@ +package com.ljh.excel.annotation; + +import java.lang.annotation.Documented; +import java.lang.annotation.ElementType; +import java.lang.annotation.Retention; +import java.lang.annotation.RetentionPolicy; +import java.lang.annotation.Target; + +@Target(ElementType.FIELD) +@Retention(RetentionPolicy.RUNTIME) +@Documented +//字段注解,对应excel里面的列 +public @interface ColumnAnnotation { + public String value() default "A"; +} diff --git a/src/main/java/com/ljh/excel/bean/BaseBean.java b/src/main/java/com/ljh/excel/bean/BaseBean.java new file mode 100644 index 0000000..07506ee --- /dev/null +++ b/src/main/java/com/ljh/excel/bean/BaseBean.java @@ -0,0 +1,73 @@ +package com.ljh.excel.bean; + +import java.util.List; + +import com.ljh.excel.parser.BeanOperation; +import com.ljh.excel.parser.Parser; + +public class BaseBean { + public List selectAll() { + Parser p = new Parser(this.getClass()); + try { + List list = p.processAllSheets(); +// System.out.println(list); + return list; + + } catch (Exception e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } + return null; + } + + public List selectAll(String filename) throws Exception{ + Parser p = new Parser(this.getClass()); + try { + List list = p.processAllSheets(filename); +// System.out.println(list); + return list; + + } catch (Exception e) { + // TODO Auto-generated catch block + throw e; + } + } + + // ����һ��bean����ݼ��ϣ��Ḳ��ԭ�ȵ���� + public void saveAll(List data) { + BeanOperation p = new BeanOperation(); + try { + p.saveAll(data); + } catch (Exception e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } + } + + public boolean saveAll(List data, String filename) { + BeanOperation p = new BeanOperation(); + try { + p.saveAll(data, filename); + return true; + } catch (Exception e) { + // TODO Auto-generated catch block + e.printStackTrace(); + return false; + } + } + + public void addAll(List data) { + BeanOperation p = new BeanOperation(); + try { + p.addAll(data); + } catch (Exception e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } + } + + public void deleteByIndex(int index) { + BeanOperation p = new BeanOperation(); + p.deleteByIndex(index, this.getClass()); + } +} diff --git a/src/main/java/com/ljh/excel/bean/factory/ExcelFactory.java b/src/main/java/com/ljh/excel/bean/factory/ExcelFactory.java new file mode 100644 index 0000000..781d59a --- /dev/null +++ b/src/main/java/com/ljh/excel/bean/factory/ExcelFactory.java @@ -0,0 +1,20 @@ +package com.ljh.excel.bean.factory; + +import java.io.File; + +public class ExcelFactory { + public static String PACTORYPATH = ""; + + private ExcelFactory() { + } + + public static void instance(String path) { + PACTORYPATH = path; + File f = new File(path); + if (f.exists() && f.isDirectory()) { + + }else{ + f.mkdirs(); + } + } +} diff --git a/src/main/java/com/ljh/excel/parser/BaseParser.java b/src/main/java/com/ljh/excel/parser/BaseParser.java new file mode 100644 index 0000000..9ddea2d --- /dev/null +++ b/src/main/java/com/ljh/excel/parser/BaseParser.java @@ -0,0 +1,100 @@ +package com.ljh.excel.parser; + +import java.io.IOException; +import java.io.InputStream; +import java.util.ArrayList; +import java.util.Iterator; +import java.util.LinkedList; +import java.util.List; + +import org.apache.poi.hssf.usermodel.HSSFCell; +import org.apache.poi.openxml4j.opc.OPCPackage; +import org.apache.poi.xssf.eventusermodel.XSSFReader; +import org.apache.poi.xssf.model.SharedStringsTable; +import org.apache.poi.xssf.model.StylesTable; +import org.apache.poi.xssf.usermodel.XSSFCell; +import org.apache.poi.xssf.usermodel.XSSFRow; +import org.apache.poi.xssf.usermodel.XSSFSheet; +import org.apache.poi.xssf.usermodel.XSSFWorkbook; +import org.xml.sax.ContentHandler; +import org.xml.sax.InputSource; +import org.xml.sax.SAXException; +import org.xml.sax.XMLReader; +import org.xml.sax.helpers.XMLReaderFactory; + +import com.ljh.excel.bean.factory.ExcelFactory; + +public class BaseParser { + public static ContentHandler handler; + protected List beanList = new ArrayList<>(); + protected Class cls; + protected Object bean; + protected SharedStringsTable sst; + protected StylesTable stylesTable; + + public void processFirstSheet(String filename) throws Exception { + OPCPackage pkg = OPCPackage.open(filename); + XSSFReader r = new XSSFReader(pkg); + SharedStringsTable sst = r.getSharedStringsTable(); + + XMLReader parser = fetchSheetParser(sst); + stylesTable = r.getStylesTable(); + // To look up the Sheet Name / Sheet Order / rID, + // you need to process the core Workbook stream. + // Normally it's of the form rId# or rSheet# + InputStream sheet2 = r.getSheet("rId2"); + InputSource sheetSource = new InputSource(sheet2); + parser.parse(sheetSource); + sheet2.close(); + } + + public List processAllSheets() throws Exception { + + return processAllSheets(cls.getSimpleName()); + } + + public List processAllSheets(String filename) throws Exception { + + OPCPackage pkg = OPCPackage.open(filename); + XSSFReader r = new XSSFReader(pkg); + SharedStringsTable sst = r.getSharedStringsTable(); + + XMLReader parser = fetchSheetParser(sst); + stylesTable = r.getStylesTable(); + + Iterator sheets = r.getSheetsData(); + int i=0; + while (sheets.hasNext()) { + // System.out.println("Processing new sheet:\n"); + InputStream sheet = sheets.next(); + InputSource sheetSource = new InputSource(sheet); + parser.parse(sheetSource); + sheet.close(); + if (beanList != null && bean != null) { + beanList.add(bean); + System.out.println("bean-->"); + } + break; + // System.out.println("end-->"); + } + return beanList; + } + + static XMLReader xmlReader = null; + static { + try { + xmlReader = XMLReaderFactory.createXMLReader("org.apache.xerces.parsers.SAXParser"); + } catch (SAXException e) { + e.printStackTrace(); + } + } + + public XMLReader fetchSheetParser(SharedStringsTable sst) throws SAXException { + XMLReader xmlReader = XMLReaderFactory.createXMLReader("org.apache.xerces.parsers.SAXParser"); + // ContentHandler handler = new SheetHandler(sst); + this.sst = sst; + xmlReader.setContentHandler(handler); + return xmlReader; + } + +} diff --git a/src/main/java/com/ljh/excel/parser/BeanOperation.java b/src/main/java/com/ljh/excel/parser/BeanOperation.java new file mode 100644 index 0000000..ddead49 --- /dev/null +++ b/src/main/java/com/ljh/excel/parser/BeanOperation.java @@ -0,0 +1,248 @@ +package com.ljh.excel.parser; + +import com.ljh.excel.annotation.ColumnAnnotation; +import com.ljh.excel.bean.BaseBean; +import com.ljh.excel.bean.factory.ExcelFactory; +import org.apache.poi.xssf.streaming.SXSSFRow; +import org.apache.poi.xssf.streaming.SXSSFSheet; +import org.apache.poi.xssf.streaming.SXSSFWorkbook; +import org.apache.poi.xssf.usermodel.XSSFRow; +import org.apache.poi.xssf.usermodel.XSSFSheet; +import org.apache.poi.xssf.usermodel.XSSFWorkbook; + +import java.io.File; +import java.io.FileInputStream; +import java.io.FileOutputStream; +import java.lang.reflect.Field; +import java.lang.reflect.Method; +import java.util.ArrayList; +import java.util.List; + +// +public class BeanOperation { + public void saveAll(List data) throws Exception { + saveAll(data, data.get(0).getClass().getSimpleName()); + } + + public void saveAll(List data, String filename) throws Exception { + // if (data.size() > 10000) { + // boolean tag = true; + // List data1 = new LinkedList<>(); + // + // while (tag) { + // int i = 0; + // boolean tag2 = true; + // while (tag2) { + // if (data.size()>0) { + // i++; + // data1.add(data.get(0)); + // data.remove(0); + // } else { + // tag = false; + // break; + // } + // if (i >= 5000) { + // break; + // } + // } + // addAll(data1, filename); + // data1.clear(); + // } + // data.clear(); + // } else { + // saveData(data,filename); + // } + + saveData(data, filename); + + } + + public void saveData(List data, String filename) throws Exception { + System.out.println("saveAll:" + filename + " data:" + data.size()); + SXSSFWorkbook wb = new SXSSFWorkbook(10000); + SXSSFSheet sheet = wb.createSheet("sheet1"); + createCell(data, sheet, 0); + new File(new File(filename).getParent()).mkdirs(); + FileOutputStream fout = new FileOutputStream(filename); + wb.write(fout); + fout.close(); + wb.dispose(); + System.out.println("saveData-end" ); + } + + public void addAll(List data) throws Exception { + addAll(data, data.get(0).getClass().getSimpleName()); + } + + public void addAll(List data, String filename) throws Exception { + if (new File(ExcelFactory.PACTORYPATH + "/" + filename + ".xlsx").exists() + && new File(ExcelFactory.PACTORYPATH + "/" + filename + ".xlsx").isFile()) { + System.out.println("addAll---"); + } else { + saveData(new ArrayList<>(), filename); + } + FileInputStream fs = new FileInputStream(ExcelFactory.PACTORYPATH + + "/" + filename + ".xlsx"); + XSSFWorkbook wb = new XSSFWorkbook(fs); +// SXSSFWorkbook wb = new SXSSFWorkbook(wb1); + + XSSFSheet sheet = wb.getSheetAt(0); + XSSFRow row = sheet.getRow(0); // + + FileOutputStream out = new FileOutputStream( + ExcelFactory.PACTORYPATH + "/" + filename + ".xlsx"); // + createCell(data, sheet, sheet.getLastRowNum() + 1); + out.flush(); + wb.write(out); + out.close(); + + + } + + private void createCell(List data, SXSSFSheet sheet, int first) { + SXSSFRow row; + int i = first; + String fname; + String s1; + ColumnAnnotation canno; + String s2; + Method m; + boolean tag = false; + if (data != null && data.size() > 0) { + tag = true; + } + while (tag) { + BaseBean bean = data.get(0); + //System.out.println("createCell" + i); + Class c = bean.getClass(); + Field[] filds = c.getDeclaredFields(); + row = sheet.createRow(i); + i++; + + for (Field f : filds) { + f.setAccessible(true); + canno = f.getAnnotation(ColumnAnnotation.class); + if (canno != null) { + fname = "get" + f.getName().substring(0, 1).toUpperCase() + f.getName().substring(1); + s1 = canno.value(); + try { + m = c.getDeclaredMethod(fname, new Class[] {}); + m.setAccessible(true); + s2 = (String) m.invoke(bean); + + char[] c1 = s1.toCharArray(); + int index = (int) c1[0] - 65; + try { + int index2= (int) c1[1] - 65; + index=26+index2; + } catch (Exception e) { + // TODO: handle exception + } + //System.out.println("canno:"+s1+" index:"+index); + row.createCell((short) index).setCellValue(s2); + + } catch (Exception e) { + e.printStackTrace(); + } + } + } + data.remove(0); + if (data.size() > 0) { + tag = true; + } else { + tag = false; + } + } + } + private void createCell(List data, XSSFSheet sheet, int first) { + XSSFRow row; + int i = first; + String fname; + String s1; + ColumnAnnotation canno; + String s2; + Method m; + boolean tag = false; + if (data != null && data.size() > 0) { + tag = true; + } + while (tag) { + BaseBean bean = data.get(0); + System.out.println("createCell" + i); + Class c = bean.getClass(); + Field[] filds = c.getDeclaredFields(); + row = sheet.createRow(i); + i++; + + for (Field f : filds) { + f.setAccessible(true); + canno = f.getAnnotation(ColumnAnnotation.class); + if (canno != null) { + fname = "get" + f.getName().substring(0, 1).toUpperCase() + f.getName().substring(1); + s1 = canno.value(); + try { + m = c.getDeclaredMethod(fname, new Class[] {}); + m.setAccessible(true); + s2 = (String) m.invoke(bean); + + char[] c1 = s1.toCharArray(); + int index = (int) c1[0] - 65; + try { + int index2= (int) c1[1] - 65; + index=26+index2; + } catch (Exception e) { + // TODO: handle exception + } + System.out.println("canno:"+s1+" index:"+index); + row.createCell((short) index).setCellValue(s2); + + } catch (Exception e) { + e.printStackTrace(); + } + + } + } + data.remove(0); + if (data.size() > 0) { + tag = true; + } else { + tag = false; + } + } + } + + public void deleteByIndex(int index, Class cls) { + try { + + FileInputStream is = new FileInputStream(ExcelFactory.PACTORYPATH + "/" + cls.getSimpleName() + ".xlsx"); + + XSSFWorkbook workbook = new XSSFWorkbook(is); + + XSSFSheet sheet = workbook.getSheetAt(0); + + removeRow(sheet, index); + FileOutputStream os = new FileOutputStream(ExcelFactory.PACTORYPATH + "/" + cls.getSimpleName() + ".xlsx"); + + workbook.write(os); + + is.close(); + + os.close(); + + } catch (Exception e) { + + e.printStackTrace(); + } + } + + public void removeRow(XSSFSheet sheet, int rowIndex) { + int lastRowNum = sheet.getLastRowNum(); + if (rowIndex >= 0 && rowIndex < lastRowNum) + sheet.shiftRows(rowIndex + 1, lastRowNum, -1); + if (rowIndex == lastRowNum) { + XSSFRow removingRow = sheet.getRow(rowIndex); + if (removingRow != null) + sheet.removeRow(removingRow); + } + } +} diff --git a/src/main/java/com/ljh/excel/parser/FromHowTo.java b/src/main/java/com/ljh/excel/parser/FromHowTo.java new file mode 100644 index 0000000..8c76e3e --- /dev/null +++ b/src/main/java/com/ljh/excel/parser/FromHowTo.java @@ -0,0 +1,142 @@ +/* ==================================================================== + Licensed to the Apache Software Foundation (ASF) under one or more + contributor license agreements. See the NOTICE file distributed with + this work for additional information regarding copyright ownership. + The ASF licenses this file to You under the Apache License, Version 2.0 + (the "License"); you may not use this file except in compliance with + the License. You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +==================================================================== */ +package com.ljh.excel.parser; + +import java.io.InputStream; +import java.util.Iterator; + +import org.apache.poi.xssf.eventusermodel.XSSFReader; +import org.apache.poi.xssf.model.SharedStringsTable; +import org.apache.poi.xssf.usermodel.XSSFRichTextString; +import org.apache.poi.openxml4j.opc.OPCPackage; +import org.xml.sax.Attributes; +import org.xml.sax.ContentHandler; +import org.xml.sax.InputSource; +import org.xml.sax.SAXException; +import org.xml.sax.XMLReader; +import org.xml.sax.helpers.DefaultHandler; +import org.xml.sax.helpers.XMLReaderFactory; + +/** + * XSSF and SAX (Event API) basic example. + * See {@link XLSX2CSV} for a fuller example of doing + * XSLX processing with the XSSF Event code. + */ +public class FromHowTo { + public void processFirstSheet(String filename) throws Exception { + OPCPackage pkg = OPCPackage.open(filename); + XSSFReader r = new XSSFReader( pkg ); + SharedStringsTable sst = r.getSharedStringsTable(); + + XMLReader parser = fetchSheetParser(sst); + + // To look up the Sheet Name / Sheet Order / rID, + // you need to process the core Workbook stream. + // Normally it's of the form rId# or rSheet# + InputStream sheet2 = r.getSheet("rId2"); + InputSource sheetSource = new InputSource(sheet2); + parser.parse(sheetSource); + sheet2.close(); + } + + public static void processAllSheets(String filename) throws Exception { + OPCPackage pkg = OPCPackage.open(filename); + XSSFReader r = new XSSFReader( pkg ); + SharedStringsTable sst = r.getSharedStringsTable(); + + XMLReader parser = fetchSheetParser(sst); + + Iterator sheets = r.getSheetsData(); + while(sheets.hasNext()) { + System.out.println("Processing new sheet:\n"); + InputStream sheet = sheets.next(); + InputSource sheetSource = new InputSource(sheet); + parser.parse(sheetSource); + sheet.close(); + System.out.println(""); + } + } + + public static XMLReader fetchSheetParser(SharedStringsTable sst) throws SAXException { + XMLReader parser = + XMLReaderFactory.createXMLReader( + "org.apache.xerces.parsers.SAXParser" + ); + ContentHandler handler = new SheetHandler(sst); + parser.setContentHandler(handler); + return parser; + } + + /** + * See org.xml.sax.helpers.DefaultHandler javadocs + */ + private static class SheetHandler extends DefaultHandler { + private SharedStringsTable sst; + private String lastContents; + private boolean nextIsString; + + private SheetHandler(SharedStringsTable sst) { + this.sst = sst; + } + + public void startElement(String uri, String localName, String name, + Attributes attributes) throws SAXException { + // c => cell + if(name.equals("c")) { + // Print the cell reference + System.out.print(attributes.getValue("r") + " - "); + // Figure out if the value is an index in the SST + String cellType = attributes.getValue("t"); + if(cellType != null && cellType.equals("s")) { + nextIsString = true; + } else { + nextIsString = false; + } + } + // Clear contents cache + lastContents = ""; + } + + public void endElement(String uri, String localName, String name) + throws SAXException { + // Process the last contents as required. + // Do now, as characters() may be called more than once + if(nextIsString) { + int idx = Integer.parseInt(lastContents); + lastContents = new XSSFRichTextString(sst.getEntryAt(idx)).toString(); + nextIsString = false; + } + + // v => contents of a cell + // Output after we've seen the string contents + if(name.equals("v")) { + System.out.println(lastContents); + } + } + + public void characters(char[] ch, int start, int length) + throws SAXException { + lastContents += new String(ch, start, length); + } + } + + public static void main(String[] args) throws Exception { + FromHowTo howto = new FromHowTo(); + howto.processFirstSheet(args[0]); + howto.processAllSheets(args[0]); + } +} diff --git a/src/main/java/com/ljh/excel/parser/Parser.java b/src/main/java/com/ljh/excel/parser/Parser.java new file mode 100644 index 0000000..710b236 --- /dev/null +++ b/src/main/java/com/ljh/excel/parser/Parser.java @@ -0,0 +1,255 @@ +package com.ljh.excel.parser; + +import java.lang.ref.WeakReference; +import java.lang.reflect.Field; +import java.lang.reflect.Method; +import java.util.ArrayList; +import java.util.List; + +import org.apache.poi.ss.usermodel.BuiltinFormats; +import org.apache.poi.ss.usermodel.DataFormatter; +import org.apache.poi.xssf.model.SharedStringsTable; +import org.apache.poi.xssf.model.StylesTable; +import org.apache.poi.xssf.usermodel.XSSFCellStyle; +import org.apache.poi.xssf.usermodel.XSSFRichTextString; +import org.xml.sax.Attributes; +import org.xml.sax.ContentHandler; +import org.xml.sax.SAXException; +import org.xml.sax.XMLReader; +import org.xml.sax.helpers.DefaultHandler; +import org.xml.sax.helpers.XMLReaderFactory; + +import com.ljh.excel.annotation.ColumnAnnotation; +import com.ljh.excel.test.User; + +public class Parser extends BaseParser { + /** + * See org.xml.sax.helpers.DefaultHandler javadocs + */ + /** + */ + private CellDataType nextDataType = CellDataType.SSTINDEX; + + private final DataFormatter formatter = new DataFormatter(); + private short formatIndex; + + private String formatString; + + public Parser(Class cl) { + cls = cl; + } + + public XMLReader fetchSheetParser(SharedStringsTable sst) throws SAXException { + ContentHandler handler = new SheetHandler(sst); + xmlReader.setContentHandler(handler); + return xmlReader; + } + + class SheetHandler extends DefaultHandler { + private SharedStringsTable sst; + private String lastContents; + private boolean nextIsString; + + private SheetHandler(SharedStringsTable sst) { + this.sst = sst; + + } + + String lastTag = ""; + String con = ""; + int i=0; + @Override + public void startElement(String uri, String localName, String name, Attributes attributes) throws SAXException { + // c => cell + if (name.equals("c")) { + setNextDataType(attributes); + + String attributest = attributes.getValue("r"); + String attributestr = attributest.substring(1).replaceAll("[A-Z]*", ""); + con = attributest.replaceAll("[0-9]*", ""); + if (attributestr != null && !attributestr.equals("") + && (lastTag.equals("") || !attributestr.equals(lastTag))) { + lastTag = attributestr; + + // System.out.println(""); + + if (bean != null) { + beanList.add(bean); + +// if(i%2000==0){ +// System.gc(); +// } +// System.out.println("bean:"+(i++)+"->" + bean); + System.out.println("bean:"+(i++)+"->" ); + } + try { + bean = cls.newInstance(); + } catch (InstantiationException e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } catch (IllegalAccessException e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } + + } + // Print the cell reference + // System.out.print("(->"+attributes.getValue("r") + " - "); + // Figure out if the value is an index in the SST + String cellType = attributes.getValue("t"); + if (cellType != null && cellType.equals("s")) { + nextIsString = true; + } else { + nextIsString = false; + } + } + // Clear contents cache + lastContents = ""; + } + + public void endElement(String uri, String localName, String name) throws SAXException { + // Process the last contents as required. + // Do now, as characters() may be called more than once + if (nextIsString) { + int idx = Integer.parseInt(lastContents); + lastContents =new WeakReference(new XSSFRichTextString(sst.getEntryAt(idx))).get().toString(); + nextIsString = false; + } + + // v => contents of a cell + // Output after we've seen the string contents + if (name.equals("v") || "t".equals(name)) { + Class c = bean.getClass(); + Field[] fs = c.getDeclaredFields(); + + for (Field f : fs) { + f.setAccessible(true); + ColumnAnnotation canno = f.getAnnotation(ColumnAnnotation.class); + if (canno != null && canno.value().equals(con)) { + String fname = "set" + f.getName().substring(0, 1).toUpperCase() + f.getName().substring(1); + try { + Method m = c.getDeclaredMethod(fname, new Class[] { String.class }); + m.setAccessible(true); + // v => ��Ԫ���ֵ�����Ԫ�����ַ���v��ǩ��ֵΪ���ַ���SST�е����� + String value = getDataValue(lastContents.trim(), ""); + System.out.println(fname+lastContents.trim()); + m.invoke(bean, value.trim()); + } catch (Exception e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } + } + } + } + } + + public void characters(char[] ch, int start, int length) throws SAXException { + lastContents += new String(ch, start, length); + } + } + + /** + */ + enum CellDataType { + BOOL, ERROR, FORMULA, INLINESTR, SSTINDEX, NUMBER, DATE, NULL + } + + /** + * + * @param attributes + */ + public void setNextDataType(Attributes attributes) { + try { + nextDataType = CellDataType.NUMBER; + formatIndex = -1; + formatString = null; + String cellType = attributes.getValue("t"); + String cellStyleStr = attributes.getValue("s"); + + if ("b".equals(cellType)) { + nextDataType = CellDataType.BOOL; + } else if ("e".equals(cellType)) { + nextDataType = CellDataType.ERROR; + } else if ("inlineStr".equals(cellType)) { + nextDataType = CellDataType.INLINESTR; + } else if ("s".equals(cellType)) { + nextDataType = CellDataType.SSTINDEX; + } else if ("str".equals(cellType)) { + nextDataType = CellDataType.FORMULA; + } + + if (cellStyleStr != null) { + int styleIndex = Integer.parseInt(cellStyleStr); + XSSFCellStyle style = stylesTable.getStyleAt(styleIndex); + formatIndex = style.getDataFormat(); + formatString = style.getDataFormatString(); + + if ("m/d/yy".equals(formatString) || "m/d/yy h:mm".equals(formatString)) { + nextDataType = CellDataType.DATE; + formatString = "yyyy/MM/dd hh:mm:ss"; + } + + if (formatString == null) { + nextDataType = CellDataType.NULL; + formatString = BuiltinFormats.getBuiltinFormat(formatIndex); + } + } + } catch (Exception e) { + e.printStackTrace(); + } + + } + + @SuppressWarnings("deprecation") + public String getDataValue(String value, String thisStr) { + switch (nextDataType) { + case BOOL: + char first = value.charAt(0); + thisStr = first == '0' ? "FALSE" : "TRUE"; + break; + case ERROR: + thisStr = "\"ERROR:" + value.toString() + '"'; + break; + case FORMULA: + thisStr = '"' + value.toString() + '"'; + break; + case INLINESTR: + XSSFRichTextString rtsi = new XSSFRichTextString(value.toString()); + + thisStr = rtsi.toString(); + rtsi = null; + break; + case SSTINDEX: + String sstIndex = value.toString(); + try { + int idx = Integer.parseInt(sstIndex); + XSSFRichTextString rtss = new XSSFRichTextString(sst.getEntryAt(idx)); + thisStr = rtss.toString(); + rtss = null; + } catch (Exception ex) { + thisStr = value.toString(); + } + break; + case NUMBER: + if (formatString != null) { + thisStr = formatter.formatRawCellContents(Double.parseDouble(value), formatIndex, formatString).trim(); + } else { + thisStr = value; + } + + thisStr = thisStr.replace("_", "").trim(); + break; + case DATE: + thisStr = formatter.formatRawCellContents(Double.parseDouble(value), formatIndex, formatString); + + // thisStr = thisStr.replace(" ", "T"); + break; + default: + thisStr = " "; + + break; + } + + return thisStr; + } +} diff --git a/src/main/java/com/ljh/excel/test/MySqlTest.java b/src/main/java/com/ljh/excel/test/MySqlTest.java new file mode 100644 index 0000000..1f10d78 --- /dev/null +++ b/src/main/java/com/ljh/excel/test/MySqlTest.java @@ -0,0 +1,101 @@ +package com.ljh.excel.test; + + + +import java.sql.Connection; +import java.sql.DriverManager; +import java.sql.PreparedStatement; +import java.sql.ResultSet; +import java.sql.SQLException; +import java.text.SimpleDateFormat; +import java.util.ArrayList; +import java.util.Calendar; +import java.util.List; + +import com.ljh.excel.bean.factory.ExcelFactory; + +public class MySqlTest { + public static void main(String[] args) throws SQLException { + ExcelFactory.PACTORYPATH="F:\\vmx"; + List list=new ArrayList(); + list.add(new User()); + list.add(new User("ljh2","test","test")); + list.add(new User("ljh3","test","test")); + new User().saveAll(list,"F:\\text.xlsx"); +// Connection conn = null; +// PreparedStatement stmt = null; +// ResultSet rs = null; +// +// try { +// Class.forName("com.mysql.jdbc.Driver"); +// conn = DriverManager.getConnection( +// "jdbc:mysql://localhost:3306/jeecp", "root", +// ""); +// stmt = conn.prepareStatement("select * from person where id=?"); +// stmt.setInt(1, 10); +// rs = stmt.executeQuery(); +// while (rs.next()) { +// System.out.println(rs.getInt("id")); +// System.out.println(rs.getString("name")); +// System.out.println("----------------------------"); +// } +// } catch (ClassNotFoundException e) { +// e.printStackTrace(); +// } catch (SQLException e) { +// e.printStackTrace(); +// } finally { +// if (rs != null) +// rs.close(); +// if (stmt != null) +// stmt.close(); +// if (conn != null) +// conn.close(); +// } +// Integer i1=new Integer("2"); +// Integer i2=new Integer("2"); +// System.out.println((int)i1==(int)i2); +// try { +//// List datalist2 = new ETabDispatch().selectAll("C:/Users/junhui/Desktop/tes.xlsx"); +//// for(ETabDispatch ed:datalist2){ +//// System.out.println("ed:"+ed); +//// } +//// System.out.println("datalist2:"+datalist2.size()); +// ExcelFactory.instance("d://"); +// SevenParams p1=new SevenParams("SevenParams", "SevenParams", "SevenParams", "SevenParams", "SevenParams"); +// SevenParams p2=new SevenParams("SevenParams", "SevenParams", "SevenParams"); +// SevenParams p3=new SevenParams("SevenParams", "SevenParams", "SevenParams", "SevenParams", "SevenParams", "SevenParams", "SevenParams"); +// SevenParams p4=new SevenParams("SevenParams", "SevenParams", "SevenParams", "SevenParams", "SevenParams", "SevenParams", "SevenParams"); +// List list=new ArrayList<>(); +// list.add(p1); +// list.add(p2); +// list.add(p3); +// list.add(p4); +// +// p1.saveAll(list,"d://SevenParams.xlsx"); +// } catch (Exception e) { +// // TODO Auto-generated catch block +// e.printStackTrace(); +// } +// System.out.println("days:"+daysBetween("2016-10-13 12:44:31","2016-10-15 12:44:31")); + } + /** + *字符串的日期格式的计算 + */ + public static int daysBetween(String smdate,String bdate){ + try { + SimpleDateFormat sdf=new SimpleDateFormat("yyyy-MM-dd"); + Calendar cal = Calendar.getInstance(); + cal.setTime(sdf.parse(smdate)); + long time1 = cal.getTimeInMillis(); + cal.setTime(sdf.parse(bdate)); + long time2 = cal.getTimeInMillis(); + long between_days=(time2-time1)/(1000*3600*24); + + return Integer.parseInt(String.valueOf(between_days)); + } catch (Exception e) { + // TODO: handle exception + return 0; + } + + } +} \ No newline at end of file diff --git a/src/main/java/com/ljh/excel/test/User.java b/src/main/java/com/ljh/excel/test/User.java new file mode 100644 index 0000000..99a387d --- /dev/null +++ b/src/main/java/com/ljh/excel/test/User.java @@ -0,0 +1,54 @@ +package com.ljh.excel.test; + +import com.ljh.excel.annotation.ColumnAnnotation; +import com.ljh.excel.bean.BaseBean; + +public class User extends BaseBean { + @ColumnAnnotation("A") + private String name; + @ColumnAnnotation("B") + private String department; + @ColumnAnnotation("C") + private String hobby; + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + + public String getDepartment() { + return department; + } + + public void setDepartment(String department) { + this.department = department; + } + + public String getHobby() { + return hobby; + } + + public void setHobby(String hobby) { + this.hobby = hobby; + } + + public User() { + super(); + } + + public User(String name, String department, String hobby) { + super(); + this.name = name; + this.department = department; + this.hobby = hobby; + } + + @Override + public String toString() { + return "User [name=" + name + ", department=" + department + ", hobby=" + hobby + "]"; + } + +} diff --git a/src/main/java/com/quartz/UnlockOrder.java b/src/main/java/com/quartz/UnlockOrder.java new file mode 100644 index 0000000..5ff3adf --- /dev/null +++ b/src/main/java/com/quartz/UnlockOrder.java @@ -0,0 +1,17 @@ +package com.quartz; + + +import org.quartz.Job; +import org.quartz.JobExecutionContext; +import com.util.SpringUtil; +public class UnlockOrder implements Job { + + + @Override + public void execute(JobExecutionContext context){ +// OrderService service =(OrderService)SpringUtil.getBean("orderservice"); +// //解锁10分钟以前的数据 +// service.executeSql("update taborder tab1 set locksign=0 where DATE_SUB(now(),INTERVAL 10 MINUTE)>=tab1.createtime and locksign=1 "); +// + } +} diff --git a/src/main/java/com/quartz/queryservlet.java b/src/main/java/com/quartz/queryservlet.java new file mode 100644 index 0000000..31c53b6 --- /dev/null +++ b/src/main/java/com/quartz/queryservlet.java @@ -0,0 +1,81 @@ +package com.quartz; +import java.io.IOException; +import java.text.ParseException; +import java.util.Date; + +import javax.servlet.ServletContext; +import javax.servlet.ServletException; +import javax.servlet.http.HttpServlet; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; + +import org.quartz.CronTrigger; +import org.quartz.JobDetail; +import org.quartz.Scheduler; +import org.quartz.SchedulerException; +import org.quartz.SchedulerFactory; +import org.quartz.Trigger; +import org.quartz.impl.StdSchedulerFactory; +import org.springframework.web.context.WebApplicationContext; +import org.springframework.web.context.support.WebApplicationContextUtils; + +/** + * 监听策略信息 + * 获取预执行任务 + * @author dubaohui + * */ +public class queryservlet extends HttpServlet { + private static Scheduler sched =null; + public queryservlet() + { + super(); + } + + public void init() throws ServletException { +// SchedulerFactory schedFact = new org.quartz.impl.StdSchedulerFactory(); +// try { +// sched = StdSchedulerFactory.getDefaultScheduler(); +// if(sched.isStarted()){ +// sched.shutdown(true); //如果已经启动 停止当前调度任务 +// sched = StdSchedulerFactory.getDefaultScheduler(); +// } +// ServletContext sc = getServletContext(); +// WebApplicationContext ac = WebApplicationContextUtils.getRequiredWebApplicationContext(sc); +// +// JobDetail jobDetai1 = new JobDetail("订单解锁", sched.DEFAULT_GROUP,UnlockOrder.class); +// try { +// Trigger trigger1 =new CronTrigger("启动订单解锁扫描", Scheduler.DEFAULT_GROUP,"0 0/10 * * * ?"); +// sched.scheduleJob(jobDetai1,trigger1); +// sched.start(); +// } catch (Exception e) { +// e.printStackTrace(); +// } +// } catch (SchedulerException e) { +// e.printStackTrace(); +// } + + } + public void doGet(HttpServletRequest request, HttpServletResponse response) throws + ServletException, IOException { +// try { +// if(sched.isStarted()) +// { +// sched.shutdown(true); +// } +// if(sched.isShutdown()) +// { +// init(); +// } +// } catch (SchedulerException e) { +// e.printStackTrace(); +// } + + + + } + public void doPost(HttpServletRequest request, HttpServletResponse response) throws + ServletException, IOException { +// doGet(request, response); + } + +} diff --git a/src/main/java/com/util/AutoDtoFile.java b/src/main/java/com/util/AutoDtoFile.java new file mode 100644 index 0000000..5de1be6 --- /dev/null +++ b/src/main/java/com/util/AutoDtoFile.java @@ -0,0 +1,59 @@ +package com.util; + +import java.util.List; + +public class AutoDtoFile { + public static boolean creatDtoFile(String sqlTableName,String title,List list){ + if(null==title){ + title=""; + } + String tableName=UtilTools.szmZdx(sqlTableName); + StringBuffer buf=new StringBuffer(); + buf.append("package com.cn.pojo;\r\n"+ + "import javax.persistence.Column;\r\n"+ + "import javax.persistence.Entity;\r\n"+ + "import javax.persistence.Id;\r\n"+ + "import javax.persistence.Table;\r\n"+ + "import com.dubh.common.dto.BaseDto;\r\n\r\n" + + "/**\r\n"+ + " * "+title+"\r\n"+ + " * @author zengwp\r\n"+ + " */\r\n"+ + " @Entity\r\n"+ + " @Table(name = \""+sqlTableName+"\")\r\n"+ + " public class "+tableName+" extends BaseDto {\r\n"+ + " \r\n"); + //生成字段变量 + for (int i = 0; i =0){ + strSty="Integer "; + } + buf.append("\t private "+strSty+arr[0]+";\r\n"); + } + + //默认第一个为主键 + buf.append("\r\n\t @Id\r\n"); + + //GET和SET方法 + for (int i = 0; i < list.size(); i++) { + Object[] arr=(Object[])list.get(i); + String strSty="String "; + if(arr[1].toString().indexOf("int")>=0){ + strSty="Integer "; + } + String optsName=UtilTools.szmZdx(arr[0].toString()); + buf.append("\t @Column(name = \""+arr[0]+"\")\r\n"); + buf.append("\t public "+strSty+" get"+optsName+"() {\r\n"+ + "\t return "+arr[0]+";\r\n"+ + "\t }\r\n"+ + "\t public void set"+optsName+"("+strSty+" "+arr[0]+") {\r\n"+ + "\t this."+arr[0]+" = "+arr[0]+";\r\n"+ + "\t }\r\n"); + } + buf.append(" }"); + return NewFieldUtileTools.fileOperation("E:\\WorkSpace\\goldkey\\src\\com\\cn\\pojo",tableName+".java",buf.toString()); + + } +} diff --git a/src/main/java/com/util/BaiDuDistanceKm.java b/src/main/java/com/util/BaiDuDistanceKm.java new file mode 100644 index 0000000..e7be1b8 --- /dev/null +++ b/src/main/java/com/util/BaiDuDistanceKm.java @@ -0,0 +1,74 @@ +package com.util; +/** + * @author 作者姓名: dubaohui + * @version 创建时间:2015-10-8 下午3:51:18 + * 类说明 :计算坐标点之间的距离 + */ +public class BaiDuDistanceKm { + static double DEF_PI = 3.14159265359; // PI + static double DEF_2PI= 6.28318530712; // 2*PI + static double DEF_PI180= 0.01745329252; // PI/180.0 + static double DEF_R =6370693.5; // radius of earth + //适用于近距离 + public static double GetShortDistance(double lng1, double lat1, double lng2, double lat2) + { + double ew1, ns1, ew2, ns2; + double dx, dy, dew; + double distance; + double distancekm; + // 角度转换为弧度 + ew1 = lng1 * DEF_PI180; + ns1 = lat1 * DEF_PI180; + ew2 = lng2 * DEF_PI180; + ns2 = lat2 * DEF_PI180; + // 经度差 + dew = ew1 - ew2; + // 若跨东经和西经180 度,进行调整 + if (dew > DEF_PI) + dew = DEF_2PI - dew; + else if (dew < -DEF_PI) + dew = DEF_2PI + dew; + dx = DEF_R * Math.cos(ns1) * dew; // 东西方向长度(在纬度圈上的投影长度) + dy = DEF_R * (ns1 - ns2); // 南北方向长度(在经度圈上的投影长度) + // 勾股定理求斜边长 + distance = Math.sqrt(dx * dx + dy * dy); + distancekm = Math.rint(distance/100)/10; + return distancekm; + } + + //适用于远距离 + public static double GetLongDistance(double lng1, double lat1, double lng2, double lat2) + { + double ew1, ns1, ew2, ns2; + double distance; + double distancekm; + // 角度转换为弧度 + ew1 = lng1 * DEF_PI180; + ns1 = lat1 * DEF_PI180; + ew2 = lng2 * DEF_PI180; + ns2 = lat2 * DEF_PI180; + // 求大圆劣弧与球心所夹的角(弧度) + distance = Math.sin(ns1) * Math.sin(ns2) + Math.cos(ns1) * Math.cos(ns2) * Math.cos(ew1 - ew2); + // 调整到[-1..1]范围内,避免溢出 + if (distance > 1.0) + distance = 1.0; + else if (distance < -1.0) + distance = -1.0; + // 求大圆劣弧长度 + distance = DEF_R * Math.acos(distance); + distancekm = Math.rint(distance/100)/10; + return distancekm; + } + public static void main(String[] args) { + + double mLat1 = 29.490295; // point1纬度 + double mLon1 = 106.486654; // point1经度 + double mLat2 = 29.615467;// point2纬度 + double mLon2 = 106.581515;// point2经度 + double distance = BaiDuDistanceKm.GetLongDistance(mLon1, mLat1, mLon2, mLat2); + double distances = BaiDuDistanceKm.GetShortDistance(mLon1, mLat1, mLon2, mLat2); + //double b = Math.rint(distance/100)/10;// + System.out.println(distance+"----"+distances); + } + +} diff --git a/src/main/java/com/util/BaiduLatitudeUtils.java b/src/main/java/com/util/BaiduLatitudeUtils.java new file mode 100644 index 0000000..0781d66 --- /dev/null +++ b/src/main/java/com/util/BaiduLatitudeUtils.java @@ -0,0 +1,79 @@ +package com.util; +/** + * @author 作者姓名: dubaohui + * @version 创建时间:2015-10-8 下午3:45:59 + * 类说明:百度地址反解析 + */ +import java.io.BufferedReader; +import java.io.IOException; +import java.io.InputStreamReader; +import java.net.URL; +import java.net.URLEncoder; +import java.util.HashMap; +import java.util.Map; + +import org.apache.commons.lang.StringUtils; + +public class BaiduLatitudeUtils { + + public static final String KEY_1 = "46aaaddd44217ffb415f20a5a4466bcd"; + + + /** + * 返回输入地址的经纬度坐标 + * key lng(经度),lat(纬度) + */ + public static Map getGeocoderLatitude(String address){ + BufferedReader in = null; + Map map = new HashMap(); + try { + //将地址转换成utf-8的16进制 + address = URLEncoder.encode(address, "UTF-8"); +// 如果有代理,要设置代理,没代理可注释 +// System.setProperty("http.proxyHost","192.168.1.188"); +// System.setProperty("http.proxyPort","3128"); + URL tirc = new URL("http://api.map.baidu.com/geocoder?address="+ address +"&output=json&key="+ KEY_1); + + in = new BufferedReader(new InputStreamReader(tirc.openStream(),"UTF-8")); + String res; + StringBuilder sb = new StringBuilder(""); + while((res = in.readLine())!=null){ + sb.append(res.trim()); + } + String str = sb.toString(); + + if(StringUtils.isNotEmpty(str)){ + int lngStart = str.indexOf("lng\":"); + int lngEnd = str.indexOf(",\"lat"); + int latEnd = str.indexOf("},\"precise"); + if(lngStart > 0 && lngEnd > 0 && latEnd > 0){ + String lng =str.substring(lngStart+5, lngEnd); + String lat = str.substring(lngEnd+7, latEnd); + map.put("lng", lng); //经度 + map.put("lat", lat); //纬度 + }else{ + map.put("lng", "0"); //经度 + map.put("lat", "0"); //纬度 + } + }else{ + map.put("lng", "0"); //经度 + map.put("lat", "0"); //纬度 + } + }catch (Exception e) { + e.printStackTrace(); + }finally{ + try { + in.close(); + } catch (IOException e) { + e.printStackTrace(); + } + } + return map; + } + public static void main(String args[]){ + Map json = BaiduLatitudeUtils.getGeocoderLatitude("上海沪南路2419弄"); + System.out.println("lng : "+json.get("lng")); //经度 + System.out.println("lat : "+json.get("lat")); //纬度 + } + +} diff --git a/src/main/java/com/util/BuilderExcel.java b/src/main/java/com/util/BuilderExcel.java new file mode 100644 index 0000000..b274834 --- /dev/null +++ b/src/main/java/com/util/BuilderExcel.java @@ -0,0 +1,197 @@ +package com.util; + +import java.io.File; +import java.io.FileOutputStream; +import java.io.IOException; +import java.text.SimpleDateFormat; +import java.util.ArrayList; +import java.util.List; + +import javax.servlet.http.HttpServletRequest; + +import org.apache.poi.hssf.usermodel.HSSFCell; +import org.apache.poi.hssf.usermodel.HSSFCellStyle; +import org.apache.poi.hssf.usermodel.HSSFFont; +import org.apache.poi.hssf.usermodel.HSSFRow; +import org.apache.poi.hssf.usermodel.HSSFSheet; +import org.apache.poi.hssf.usermodel.HSSFWorkbook; + +/** + * @author 作者姓名: dubaohui + * @version 创建时间:2015-8-12 下午2:57:13 + * 类说明:生成Excel工具类 + */ +public class BuilderExcel +{ + /** + * @功能:手工构建一个简单格式的Excel + */ + private static List getStudent() throws Exception + { + List list = new ArrayList(); + SimpleDateFormat df = new SimpleDateFormat("yyyy-mm-dd"); + Student user1 = new Student(1, "张三", 16, df.parse("1997-03-12")); + Student user2 = new Student(2, "李四", 17, df.parse("1996-08-12")); + Student user3 = new Student(3, "王五", 26, df.parse("1985-11-12")); + list.add(user1); + list.add(user2); + list.add(user3); + return list; + } + //生成Excel + public static boolean Builderexcels(HttpServletRequest request,String sheetname,String[] heard,List list,String xlsname){ + boolean sign = false; + // 第一步,创建一个webbook,对应一个Excel文件 + HSSFWorkbook wb = new HSSFWorkbook(); + // 第二步,在webbook中添加一个sheet,对应Excel文件中的sheet + HSSFSheet sheet = wb.createSheet(sheetname); + // 第三步,在sheet中添加表头第0行,注意老版本poi对Excel的行数列数有限制short + HSSFRow row = sheet.createRow(0); + // 第四步,创建单元格,并设置值表头 设置表头居中 + HSSFCellStyle style =Tablestyle(wb, 14, true, true, true, 13, false); + // 创建一个居中格式 + HSSFCell cell = null; + int valuelength=0; + if(heard.length>0){ + valuelength = heard.length; + for(int i=0;i0){ + for (int i = 0; i < list.size(); i++) + { + int j=i+1; + row = sheet.createRow(j); + Object[] obj =(Object[])list.get(i); + // 第四步,创建单元格,并设置值 + for(int t = 0;t>> 8)]); + sbuf.append(hex[(0x00FF & ch)]); + } + } } + return sbuf.toString(); + } + public static String unescape(String s) { + + StringBuffer sbuf = new StringBuffer(); + if(null !=s && !"".equals(s)){ + int i = 0; + int len = s.length(); + while (i < len) { + int ch = s.charAt(i); + if (ch == '+') { // + : map to ' ' + sbuf.append(' '); + } else if ('A' <= ch && ch <= 'Z') { // 'A'..'Z' : as it was + sbuf.append((char)ch); + } else if ('a' <= ch && ch <= 'z') { // 'a'..'z' : as it was + sbuf.append((char)ch); + } else if ('0' <= ch && ch <= '9') { // '0'..'9' : as it was + sbuf.append((char)ch); + } else if (ch == '-' || ch == '_' // unreserved : as it was + || ch == '.' || ch == '!' + || ch == '~' || ch == '*' + || ch == '\'' || ch == '(' + || ch == ')') { + sbuf.append((char)ch); + } else if (ch == '%') { + int cint = 0; + if ('u' != s.charAt(i+1)) { // %XX : map to ascii(XX) + cint = (cint << 4) | val[s.charAt(i+1)]; + cint = (cint << 4) | val[s.charAt(i+2)]; + i+=2; + } else { // %uXXXX : map to unicode(XXXX) + cint = (cint << 4) | val[s.charAt(i+2)]; + cint = (cint << 4) | val[s.charAt(i+3)]; + cint = (cint << 4) | val[s.charAt(i+4)]; + cint = (cint << 4) | val[s.charAt(i+5)]; + i+=5; + } + sbuf.append((char)cint); + } + i++; + } + } + return sbuf.toString(); + } + public static void main(String[] args) { + String str = Escape.escape("{\"jhraccount\":\"testa\",\"jhrpassword\":\"1111\"}"); + System.out.println(str); + System.out.println(Escape.unescape("%257B%250A++%2522teacherkey%2522+%253A+%25222014122718143719141%2522%252C%250A++%2522schoolkey%2522+%253A+%25222014122718143657297%2522%252C%250A++%2522babykey%2522+%253A+%25222014122920394364557%2522%252C%250A++%2522qdtype%2522+%253A+0%250A%257D")); + + + } +} \ No newline at end of file diff --git a/src/main/java/com/util/NetUtil.java b/src/main/java/com/util/NetUtil.java new file mode 100644 index 0000000..ce389ce --- /dev/null +++ b/src/main/java/com/util/NetUtil.java @@ -0,0 +1,210 @@ +package com.util; + +import java.io.BufferedReader; +import java.io.IOException; +import java.io.InputStream; +import java.io.InputStreamReader; +import java.io.PrintWriter; +import java.io.UnsupportedEncodingException; +import java.net.HttpURLConnection; +import java.net.URL; +import java.net.URLConnection; +import java.net.URLEncoder; +import java.util.List; +import java.util.Map; + +public class NetUtil { + public static final String DEF_CHATSET = "UTF-8"; + public static final int DEF_CONN_TIMEOUT = 30000; + public static final int DEF_READ_TIMEOUT = 30000; + public static String userAgent = "Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/29.0.1547.66 Safari/537.36"; + + /** + * + * @param strUrl 请求地址 + * @param params 请求参数 + * @param method 请求方法 + * @return 网络请求字符串 + * @throws Exception + */ + public static String net(String strUrl, final Map params,String method) throws Exception { + HttpURLConnection conn = null; + BufferedReader reader = null; + String rs = null; + try { + StringBuffer sb = new StringBuffer(); + if(method==null || method.equals("GET")){ + if(params!=null&&"".equals(params)){ + strUrl = strUrl+"?"+urlencode(params); + } + + } +// System.out.println("net_url:"+strUrl); +// String last = strUrl.substring(strUrl.length()-1, strUrl.length()); +// if("&".equals(last)){ +// strUrl = strUrl.substring(0, strUrl.length()-1); +// } + URL url = new URL(strUrl); + conn = (HttpURLConnection) url.openConnection(); + if(method==null || method.equals("GET")){ + conn.setRequestMethod("GET"); + }else{ + conn.setRequestMethod("POST"); + conn.setDoOutput(true); + } + conn.setRequestProperty("User-agent", userAgent); + conn.setUseCaches(false); + conn.setConnectTimeout(DEF_CONN_TIMEOUT); + conn.setReadTimeout(DEF_READ_TIMEOUT); + conn.setInstanceFollowRedirects(false); + conn.connect(); +// if (params!= null && method.equals("POST")) { +// try (DataOutputStream out = new DataOutputStream(conn.getOutputStream())) { +// out.writeBytes(urlencode(params)); +// } +// } + InputStream is = conn.getInputStream(); + reader = new BufferedReader(new InputStreamReader(is, DEF_CHATSET)); + String strRead = null; + while ((strRead = reader.readLine()) != null) { + sb.append(strRead); + } + rs = sb.toString(); + } catch (IOException e) { + e.printStackTrace(); + } finally { + if (reader != null) { + reader.close(); + } + if (conn != null) { + conn.disconnect(); + } + } + return rs; + } + + /** + * 向指定URL发送GET方法的请求 + * + * @param url + * 发送请求的URL + * @param param + * 请求参数,请求参数应该是 name1=value1&name2=value2 的形式。 + * @return URL 所代表远程资源的响应结果 + */ + public static String sendGet(String url, String param) { + String result = ""; + BufferedReader in = null; + try { + String urlNameString = url + "?" + param; + URL realUrl = new URL(urlNameString); + // 打开和URL之间的连接 + URLConnection connection = realUrl.openConnection(); + // 设置通用的请求属性 + connection.setRequestProperty("accept", "*/*"); + connection.setRequestProperty("connection", "Keep-Alive"); + connection.setRequestProperty("user-agent", + "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1;SV1)"); + // 建立实际的连接 + connection.connect(); + // 获取所有响应头字段 + Map> map = connection.getHeaderFields(); + // 遍历所有的响应头字段 + for (String key : map.keySet()) { + System.out.println(key + "--->" + map.get(key)); + } + // 定义 BufferedReader输入流来读取URL的响应 + in = new BufferedReader(new InputStreamReader( + connection.getInputStream())); + String line; + while ((line = in.readLine()) != null) { + result += line; + } + } catch (Exception e) { + System.out.println("发送GET请求出现异常!" + e); + e.printStackTrace(); + } + // 使用finally块来关闭输入流 + finally { + try { + if (in != null) { + in.close(); + } + } catch (Exception e2) { + e2.printStackTrace(); + } + } + return result; + } + + /** + * 向指定 URL 发送POST方法的请求 + * + * @param url + * 发送请求的 URL + * @param param + * 请求参数,请求参数应该是 name1=value1&name2=value2 的形式。 + * @return 所代表远程资源的响应结果 + */ + public static String sendPost(String url, String param) { + PrintWriter out = null; + BufferedReader in = null; + String result = ""; + try { + URL realUrl = new URL(url); + // 打开和URL之间的连接 + URLConnection conn = realUrl.openConnection(); + // 设置通用的请求属性 + conn.setRequestProperty("accept", "*/*"); + conn.setRequestProperty("connection", "Keep-Alive"); + conn.setRequestProperty("user-agent", + "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1;SV1)"); + // 发送POST请求必须设置如下两行 + conn.setDoOutput(true); + conn.setDoInput(true); + // 获取URLConnection对象对应的输出流 + out = new PrintWriter(conn.getOutputStream()); + // 发送请求参数 + out.print(param); + // flush输出流的缓冲 + out.flush(); + // 定义BufferedReader输入流来读取URL的响应 + in = new BufferedReader( + new InputStreamReader(conn.getInputStream())); + String line; + while ((line = in.readLine()) != null) { + result += line; + } + } catch (Exception e) { + System.out.println("发送 POST 请求出现异常!"+e); + e.printStackTrace(); + } + //使用finally块来关闭输出流、输入流 + finally{ + try{ + if(out!=null){ + out.close(); + } + if(in!=null){ + in.close(); + } + } + catch(IOException ex){ + ex.printStackTrace(); + } + } + return result; + } + //将map型转为请求参数型 + public static String urlencode(Map data) { + StringBuilder sb = new StringBuilder(); + for (Map.Entry i : data.entrySet()) { + try { + sb.append(i.getKey()).append("=").append(URLEncoder.encode(i.getValue()+"","UTF-8")).append("&"); + } catch (UnsupportedEncodingException e) { + e.printStackTrace(); + } + } + return sb.toString(); + } +} diff --git a/src/main/java/com/util/NewFieldUtileTools.java b/src/main/java/com/util/NewFieldUtileTools.java new file mode 100644 index 0000000..86fc096 --- /dev/null +++ b/src/main/java/com/util/NewFieldUtileTools.java @@ -0,0 +1,155 @@ +package com.util; + +import java.io.BufferedReader; +import java.io.File; +import java.io.FileInputStream; +import java.io.FileNotFoundException; +import java.io.FileOutputStream; +import java.io.IOException; +import java.io.InputStreamReader; +import java.io.OutputStreamWriter; +import java.io.UnsupportedEncodingException; +import java.io.Writer; + +public class NewFieldUtileTools { + + /** + * 生成文件 + * @param filePath + * @param fileName + * @param fileContent + * @return + * @throws UnsupportedEncodingException + * @throws FileNotFoundException + */ + public static boolean fileOperation(String filePath, String fileName,String fileContent){ + boolean sign = false; + String pathTemp = filePath + "\\" + fileName; + File file = new File(pathTemp); + File file2 = new File(filePath); + file2.mkdirs(); + try { + // 文件不存在 + if (!file.exists()) { + + sign = createFile(pathTemp);// 创建文件 + if (sign) {// 文件创建成功 + writeFile(pathTemp, fileContent);// 写入内容 + } + } else { + sign = deleteFile(pathTemp);// 删除文件 + sign = createFile(pathTemp);// 创建文件 + if (sign) {// 文件创建成功 + writeFile(pathTemp, fileContent);// 写入内容 + } + } + } catch (IOException e) { + e.printStackTrace(); + } + return sign; + } + /** + * 创建文件 + * + * @throws IOException + */ + public static boolean createFile(String name) throws IOException { + boolean flag = false; + File filename = new File(name); + if (!filename.exists()) { + filename.createNewFile(); + flag = true; + } + return flag; + } + + /** + * 写文件 + * + * @param newStr + * 新内容 + * @throws IOException + */ + public static boolean writeFile(String filePath, String newStr) + throws IOException { + // 先读取原有文件内容,然后进行写入操作 + boolean flag = false; + String filein = newStr + "\r\n"; + // String str = new String(filein.getBytes("UTF-8"),"UTF-8"); + String temp = ""; + FileInputStream fis = null; + InputStreamReader isr = null; + BufferedReader br = null; + FileOutputStream fos = null; + // PrintWriter pw = null; + Writer pw = null; + try { + File file = new File(filePath); + // 将文件读入输入流 + fis = new FileInputStream(file); + isr = new InputStreamReader(fis, "utf-8"); + br = new BufferedReader(isr); + StringBuffer buf = new StringBuffer(); + // // 文件路径 + // File file = new File(filePath); + // // 将文件读入输入流 + // + // isr = new InputStreamReader(new FileInputStream(file),"utf-8"); + // br = new BufferedReader(isr); + // StringBuffer buf = new StringBuffer(); + /** + * File f=new File(rawfilename); if(f.exists()) { BufferedReader + * br=null; try { String line; InputStreamReader read = new + * InputStreamReader(new FileInputStream(f),"utf-8"); br=new + * BufferedReader(read); + */ + // 保存该文件原有的内容 + for (int i = 1; (temp = br.readLine()) != null; i++) { + buf = buf.append(temp); + buf = buf.append(System.getProperty("line.separator")); + } + buf.append(filein); + fos = new FileOutputStream(file); + pw = new OutputStreamWriter(fos, "utf-8"); + pw.write(buf.toString()); + pw.flush(); + flag = true; + } catch (IOException e1) { + throw e1; + } finally { + if (pw != null) { + pw.close(); + } + if (fos != null) { + fos.close(); + } + if (br != null) { + br.close(); + } + if (isr != null) { + isr.close(); + } + if (fis != null) { + fis.close(); + } + } + return flag; + } + + /** + * 删除单个文件 + * + * @param fileName + * 被删除文件的文件名 + * @return 单个文件删除成功返回true,否则返回false + */ + public static boolean deleteFile(String fileName) { + boolean isSuccess = false; + File file = new File(fileName); + if (file.isFile() && file.exists()) { + file.delete(); + isSuccess = true; + } + return isSuccess; + } +} diff --git a/src/main/java/com/util/OfficeUtil.java b/src/main/java/com/util/OfficeUtil.java new file mode 100644 index 0000000..78cd9ed --- /dev/null +++ b/src/main/java/com/util/OfficeUtil.java @@ -0,0 +1,278 @@ +package com.util; + +import java.io.File; +import java.io.FileNotFoundException; +import java.io.FileOutputStream; +import java.io.IOException; +import java.io.OutputStream; +import java.text.DecimalFormat; +import java.text.SimpleDateFormat; +import java.util.List; + +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; + +import org.apache.poi.hssf.usermodel.HSSFCell; +import org.apache.poi.hssf.usermodel.HSSFCellStyle; +import org.apache.poi.hssf.usermodel.HSSFDateUtil; +import org.apache.poi.hssf.usermodel.HSSFFont; +import org.apache.poi.hssf.usermodel.HSSFRow; +import org.apache.poi.hssf.usermodel.HSSFSheet; +import org.apache.poi.hssf.usermodel.HSSFWorkbook; +import org.apache.poi.ss.usermodel.Workbook; +import org.apache.poi.xssf.usermodel.XSSFCell; +import org.apache.poi.xssf.usermodel.XSSFCellStyle; +import org.apache.poi.xssf.usermodel.XSSFFont; +import org.apache.poi.xssf.usermodel.XSSFRow; +import org.apache.poi.xssf.usermodel.XSSFSheet; +import org.apache.poi.xssf.usermodel.XSSFWorkbook; + +public class OfficeUtil { + + /********************************************************* xls *************************************************************/ + + /** + * 写Excel并下载针对.xls + * + */ + public boolean writeAndDownExcelToXLS(HttpServletRequest request,HttpServletResponse response, List list, String[] titles, + HSSFWorkbook workbook, HSSFSheet sheet, String filepath) { + boolean flag = true; + if (null!=list && list.size()>0) { + try { + for (int i = 0; i < titles.length; i++) { + HSSFRow row = sheet.createRow(i); + WriteExcelCellContextToXLS(workbook, row,i,titles[i]); + } + for (int j = 1; j <= list.size(); j++) { + Object[] object = object = (Object[]) list.get(j - 1); + HSSFRow row = sheet.createRow(j); + for (int n = 0; n < object.length; n++) { + WriteExcelCellContextToXLS(workbook,row,n,object[n] == null ? "" : UtilTools.delHTMLTag(object[n].toString())); + } + } + flag = CreateExcel(filepath, workbook); + if (flag) { + flag = UtilTools.downFile(response, filepath); + } + } catch (Exception e) { + flag = false; + e.printStackTrace(); + } + } + return flag; + } + + /** + * 写Excel内容针对.xls且对标题行加样式 + * + */ + public static void WriteExcelCellContextToXLS(HSSFWorkbook workbook,HSSFRow row,int cellindex,String content) { + HSSFCell cell = row.createCell((short) cellindex); + cell.setCellType(HSSFCell.CELL_TYPE_STRING); + // cell.setEncoding(HSSFCell.ENCODING_UTF_16); + cell.setCellValue(content); + //加样式 + HSSFCellStyle style = workbook.createCellStyle(); + HSSFFont font = workbook.createFont(); + font.setFontHeightInPoints((short) 11);// 字号 + font.setBoldweight(HSSFFont.BOLDWEIGHT_NORMAL);// 加粗 + font.setColor(HSSFFont.COLOR_RED);// 颜色 + style.setFont(font); + style.setAlignment(HSSFCellStyle.ALIGN_CENTER);// 左右居中 + style.setVerticalAlignment(HSSFCellStyle.VERTICAL_CENTER);// 上下居中 + cell.setCellStyle(style); + } + + /** + * 写Excel内容针对.xls + * + */ + public static void WriteExcelCellContextToXLS(HSSFRow row,int cellindex,String content) { + HSSFCell cell = row.createCell((short) cellindex); + cell.setCellType(HSSFCell.CELL_TYPE_STRING); + // cell.setEncoding(HSSFCell.ENCODING_UTF_16); + cell.setCellValue(content); + } + + /** + * 获取.xls Excel单元格的值 + * + */ + public static Object getCellResultToXLS(HSSFRow row, int cellnum) { + HSSFCell cell = row.getCell((short) cellnum); + Object value = null; + DecimalFormat df = new DecimalFormat("0");// 格式化 number String 字符 + SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");// 格式化日期字符串 + DecimalFormat nf = new DecimalFormat("0.00");// 格式化数字 + if (null != cell) { + switch (cell.getCellType()) { + case HSSFCell.CELL_TYPE_STRING: + value = cell.getStringCellValue(); + break; + case HSSFCell.CELL_TYPE_FORMULA: + try { + value=cell.getNumericCellValue(); + } catch (Exception e) { + e.printStackTrace(); + value =""; + } + break; + case HSSFCell.CELL_TYPE_NUMERIC: + /*if ("@".equals(cell.getCellStyle().getDataFormat())) { + value = df.format(cell.getNumericCellValue()); + } else if ("General".equals(cell.getCellStyle().getDataFormat())) { + value = nf.format(cell.getNumericCellValue()); + } else { + value = sdf.format(HSSFDateUtil.getJavaDate(cell.getNumericCellValue())); + }*/ + if (HSSFDateUtil.isCellDateFormatted(cell)) { //日期 + value = sdf.format(HSSFDateUtil.getJavaDate(cell.getNumericCellValue())); + } else { // 纯数字 + value = df.format(cell.getNumericCellValue()); + } + break; + case HSSFCell.CELL_TYPE_BOOLEAN: + value = cell.getBooleanCellValue(); + break; + case HSSFCell.CELL_TYPE_BLANK: + value = ""; + break; + default: + value = cell.toString(); + } + } else { + value = ""; + } + + return value; + + } + + /********************************************************* xlsx *************************************************************/ + + /** + * 写Excel内容针对.xlsx且对标题行加样式 + * + */ + public static void WriteExcelCellContextToXLSX(XSSFWorkbook workbook,XSSFRow row,int cellindex,String content) { + XSSFCell cell = row.createCell(cellindex); + cell.setCellType(HSSFCell.CELL_TYPE_STRING); + cell.setCellValue(content); + //加样式 + XSSFCellStyle style = workbook.createCellStyle(); + XSSFFont font = workbook.createFont(); + font.setFontHeightInPoints((short) 11); + font.setBoldweight(HSSFFont.BOLDWEIGHT_NORMAL); + font.setColor(HSSFFont.COLOR_RED); + style.setFont(font); + style.setAlignment(HSSFCellStyle.ALIGN_CENTER); + style.setVerticalAlignment(HSSFCellStyle.VERTICAL_CENTER); + cell.setCellStyle(style); + } + + /** + * 写Excel内容针对.xlsx + * + */ + public static void WriteExcelCellContextToXLSX(XSSFRow row, int cellindex,String content) { + XSSFCell cell = row.createCell(cellindex); + cell.setCellType(HSSFCell.CELL_TYPE_STRING); + cell.setCellValue(content); + } + + /** + * 获取.xlsx Excel单元格的值 + * + */ + public static Object getExcelResultToXLSX(XSSFRow row, int cellnum) { + Object value = null; + XSSFCell cell = row.getCell(cellnum); + DecimalFormat df = new DecimalFormat("0");// 格式化 number String 字符 + SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");// 格式化日期字符串 + DecimalFormat ndf = new DecimalFormat("0.00");// 格式化数字 + if (null != cell) { + switch (cell.getCellType()) { + case XSSFCell.CELL_TYPE_STRING: + value = cell.getStringCellValue(); + break; + case XSSFCell.CELL_TYPE_NUMERIC: + if ("@".equals(cell.getCellStyle().getDataFormatString())) { + value = df.format(cell.getNumericCellValue()); + } else if ("General".equals(cell.getCellStyle().getDataFormatString())) { + value = ndf.format(cell.getNumericCellValue()); + } else { + value = sdf.format(HSSFDateUtil.getJavaDate(cell.getNumericCellValue())); + } + break; + case XSSFCell.CELL_TYPE_BOOLEAN: + value = cell.getBooleanCellValue(); + break; + case XSSFCell.CELL_TYPE_BLANK: + value = ""; + break; + default: + value = cell.toString(); + } + + } + + if(value==null)value=""; + return value; + } + + /** + * 判断sheet行标题与指定标题是否一至 + */ + public static boolean sheetRowTitleToXlSX(XSSFSheet sheet,String[] titles){ + boolean flag=true; + XSSFRow row=sheet.getRow(0); + for(int i=0;i params = new HashMap();//请求参数 + params.put("Action","Dialout");//命令名称,外呼接口中固定名称为Dialout + params.put("ActionID",key);//随机码,用户用来标识请求的操作,服务器返回的Response中会带有对应Action的ActionID;在通话事件中会带有该字段;该字段最大长度是40个字节 + params.put("Account","N00000002010"); + params.put("Exten",phoneno);//被叫号码 + params.put("FromExten",zxno);//坐席工号 + params.put("PBX", "sh.ali.1.5"); + params.put("ExtenType", "gateway");//外呼时强制座席使用该接听方式。可选参数。正常情况下调用外呼接口不需传此字段,座席默认使用登陆呼叫中心的接听方式外呼。 + //如有特殊需要,例如:座席不登陆系统发起外呼,需要传此字段。 + //Local为“手机” + //sip为“软电话” + //gateway为“语音网关” + + try { + result =net(url, params, "GET"); + System.out.println("---"+result); + JSONObject object = JSONObject.fromObject(result); + sign = object.getBoolean("Succeed"); + } catch (Exception e) { + e.printStackTrace(); + sign = false; + } + return sign; + } + + + + public static void main(String[] args) { + System.out.println(getTalk("13764935808","8003",RequestUtil.getid(6))); + + } + + /** + * + * @param strUrl 请求地址 + * @param params 请求参数 + * @param method 请求方法 + * @return 网络请求字符串 + * @throws Exception + */ + public static String net(String strUrl, final Map params,String method) throws Exception { + HttpURLConnection conn = null; + BufferedReader reader = null; + String rs = null; + try { + StringBuffer sb = new StringBuffer(); + if(method==null || method.equals("GET")){ + strUrl = strUrl+"?"+urlencode(params); + } +// String last = strUrl.substring(strUrl.length()-1, strUrl.length()); +// if("&".equals(last)){ +// strUrl = strUrl.substring(0, strUrl.length()-1); +// } + URL url = new URL(strUrl); + conn = (HttpURLConnection) url.openConnection(); + if(method==null || method.equals("GET")){ + conn.setRequestMethod("GET"); + }else{ + conn.setRequestMethod("POST"); + conn.setDoOutput(true); + } + conn.setRequestProperty("User-agent", userAgent); + conn.setUseCaches(false); + conn.setConnectTimeout(DEF_CONN_TIMEOUT); + conn.setReadTimeout(DEF_READ_TIMEOUT); + conn.setInstanceFollowRedirects(false); + conn.connect(); +// if (params!= null && method.equals("POST")) { +// try (DataOutputStream out = new DataOutputStream(conn.getOutputStream())) { +// out.writeBytes(urlencode(params)); +// } +// } + InputStream is = conn.getInputStream(); + reader = new BufferedReader(new InputStreamReader(is, DEF_CHATSET)); + String strRead = null; + while ((strRead = reader.readLine()) != null) { + sb.append(strRead); + } + rs = sb.toString(); + } catch (IOException e) { + e.printStackTrace(); + } finally { + if (reader != null) { + reader.close(); + } + if (conn != null) { + conn.disconnect(); + } + } + return rs; + } + + //将map型转为请求参数型 + public static String urlencode(Map data) { + StringBuilder sb = new StringBuilder(); + for (Map.Entry i : data.entrySet()) { + try { + sb.append(i.getKey()).append("=").append(URLEncoder.encode(i.getValue()+"","UTF-8")).append("&"); + } catch (UnsupportedEncodingException e) { + e.printStackTrace(); + } + } + return sb.toString(); + } +} diff --git a/src/main/java/com/util/PinYin2Abbreviation.java b/src/main/java/com/util/PinYin2Abbreviation.java new file mode 100644 index 0000000..56f8290 --- /dev/null +++ b/src/main/java/com/util/PinYin2Abbreviation.java @@ -0,0 +1,102 @@ +package com.util; +/** + * @author 作者姓名: dubaohui + * @version 创建时间:2015-10-6 下午2:03:37 + * 类说明:获取中文首字母 + */ +public class PinYin2Abbreviation { + + // 简体中文的编码范围从B0A1(45217)一直到F7FE(63486) + private static int BEGIN = 45217; + private static int END = 63486; + + // 按照声 母表示,这个表是在GB2312中的出现的第一个汉字,也就是说“啊”是代表首字母a的第一个汉字。 + // i, u, v都不做声母, 自定规则跟随前面的字母 + private static char[] chartable = { '啊', '芭', '擦', '搭', '蛾', '发', '噶', '哈', '哈', '击', '喀', '垃', '妈', '拿', '哦', '啪', '期', '然', '撒', '塌', '塌', '塌', '挖', '昔', '压', '匝', }; + + // 二十六个字母区间对应二十七个端点 + // GB2312码汉字区间十进制表示 + private static int[] table = new int[27]; + + // 对应首字母区间表 + private static char[] initialtable = { 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'h', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 't', 't', 'w', 'x', 'y', 'z', }; + + // 初始化 + static { + for (int i = 0; i < 26; i++) { + table[i] = gbValue(chartable[i]);// 得到GB2312码的首字母区间端点表,十进制。 + } + table[26] = END;// 区间表结尾 + } + + // ------------------------public方法区------------------------ + // 根据一个包含汉字的字符串返回一个汉字拼音首字母的字符串 最重要的一个方法,思路如下:一个个字符读入、判断、输出 + + public static String cn2py(String SourceStr) { + String Result = ""; + int StrLength = SourceStr.length(); + int i; + try { + for (i = 0; i < StrLength; i++) { + Result += Char2Initial(SourceStr.charAt(i)); + } + } catch (Exception e) { + Result = ""; + e.printStackTrace(); + } + return Result; + } + + // ------------------------private方法区------------------------ + /** + * 输入字符,得到他的声母,英文字母返回对应的大写字母,其他非简体汉字返回 '0'   *    + */ + private static char Char2Initial(char ch) { + // 对英文字母的处理:小写字母转换为大写,大写的直接返回 + if (ch >= 'a' && ch <= 'z') { + return (char) (ch - 'a' + 'A'); + } + if (ch >= 'A' && ch <= 'Z') { + return ch; + } + // 对非英文字母的处理:转化为首字母,然后判断是否在码表范围内, + // 若不是,则直接返回。 + // 若是,则在码表内的进行判断。 + int gb = gbValue(ch);// 汉字转换首字母 + if ((gb < BEGIN) || (gb > END))// 在码表区间之前,直接返回 + { + return ch; + } + int i; + for (i = 0; i < 26; i++) {// 判断匹配码表区间,匹配到就break,判断区间形如“[,)” + if ((gb >= table[i]) && (gb < table[i + 1])) { + break; + } + } + if (gb == END) {// 补上GB2312区间最右端 + i = 25; + } + return initialtable[i]; // 在码表区间中,返回首字母 + } + + /** + * 取出汉字的编码 cn 汉字    + */ + private static int gbValue(char ch) {// 将一个汉字(GB2312)转换为十进制表示。 + String str = new String(); + str += ch; + try { + byte[] bytes = str.getBytes("GB2312"); + if (bytes.length < 2) { + return 0; + } + return (bytes[0] << 8 & 0xff00) + (bytes[1] & 0xff); + } catch (Exception e) { + return 0; + } + } + + public static void main(String[] args) throws Exception { + System.out.println(cn2py("宝").toUpperCase()); + } +} diff --git a/src/main/java/com/util/ReadExcel.java b/src/main/java/com/util/ReadExcel.java new file mode 100644 index 0000000..22ae356 --- /dev/null +++ b/src/main/java/com/util/ReadExcel.java @@ -0,0 +1,141 @@ +package com.util; + +import org.apache.poi.hssf.usermodel.HSSFDateUtil; +import org.apache.poi.hssf.usermodel.HSSFWorkbook; +import org.apache.poi.ss.usermodel.*; + +import javax.swing.filechooser.FileSystemView; +import java.io.*; +import java.text.DecimalFormat; +import java.text.SimpleDateFormat; +import java.util.*; + +/** + * Created by 16094 on 2017/8/24. + */ +public class ReadExcel { + + private Workbook workbook; + + private static String desktopPath = FileSystemView.getFileSystemView().getHomeDirectory().getAbsolutePath(); + + + public ReadExcel(File excelFile) throws Exception { + workbook = WorkbookFactory.create(new FileInputStream(excelFile)); + } + + public List getData(int index) { + + try { + List result = new ArrayList(); + int rowSize = 0; + Cell cell = null; + int numberOfSheets = Math.min(workbook.getNumberOfSheets(), index); + for (int sheetIndex = 0; sheetIndex < numberOfSheets; sheetIndex++) { + Sheet sheetAt = workbook.getSheetAt(sheetIndex); + for (int rowIndex = 0; rowIndex <= sheetAt.getLastRowNum(); rowIndex++) { + Row row = sheetAt.getRow(rowIndex); + if (row == null) { + continue; + } + int tempRowSize = row.getLastCellNum() + 1; + if (tempRowSize > rowSize) { + rowSize = tempRowSize; + } + List mapList = new ArrayList(); + // mapList.clear(); + //boolean hasValue = false; + for (short columnIndex = 0; columnIndex <= row.getLastCellNum(); columnIndex = (short) (columnIndex + 1)) { + String value = ""; + // String key = ""; + cell = row.getCell(columnIndex); + if (cell != null) { + switch (cell.getCellType()) { + case 1: + value = cell.getStringCellValue(); + // key = "String"; + break; + case 0: + if (HSSFDateUtil.isCellDateFormatted(cell)) { + Date date = cell.getDateCellValue(); + if (date != null) + value = new SimpleDateFormat("yyyy-MM-dd").format(date); + else { + value = ""; + } + // key = "Date"; + } else { + value = new DecimalFormat("0").format(cell.getNumericCellValue()); + // key = "Integer"; + } + break; + case 2: + if (!cell.getStringCellValue().equals("")) + value = cell.getStringCellValue(); + else { + value = cell.getNumericCellValue() + ""; + } + // key = "String"; + break; + case 3: + break; + case 5: + value = ""; + // key = ""; + break; + case 4: + value = cell.getBooleanCellValue() == true ? "Y" : "N"; + //key = "boolean"; + break; + default: + value = ""; + //key = ""; + } + } + if (value == null || value.equals("")) { + break; + } + if ((columnIndex == 0) && (value.trim().equals(""))) { + break; + } + //stringStringMap.put(rightTrim(key), ); + mapList.add(rightTrim(value)); + // hasValue = true; + } + result.add(mapList); +// if (hasValue) { +// result.add(mapList); +// } + } + } + return result; + } catch (Exception e) { + e.printStackTrace(); + } + return null; + } + + public static String rightTrim(String str) { + if (str == null) { + return ""; + } + int length = str.length(); + for (int i = length - 1; (i >= 0) && + (str.charAt(i) == ' '); i--) { + length--; + } + return str.substring(0, length); + } + + + public static void main(String[] args) throws Exception { + File file = new File(desktopPath + "/Outcomes.xlsx"); + List datas = new ReadExcel(file).getData(1); + for (int i = 0; i < datas.size(); i++) { + List listinfo = (List) datas.get(i); + for (int j = 0; j < listinfo.size(); j++) { + System.out.print(listinfo.get(j) + " "); + } + } + } +} diff --git a/src/main/java/com/util/ReadExcel2003.java b/src/main/java/com/util/ReadExcel2003.java new file mode 100644 index 0000000..2ae0aaa --- /dev/null +++ b/src/main/java/com/util/ReadExcel2003.java @@ -0,0 +1,109 @@ +package com.util; + +import java.io.File; +import java.io.FileInputStream; +import java.io.FileNotFoundException; +import java.io.IOException; +import java.util.ArrayList; +import java.util.List; + +import org.apache.poi.hssf.usermodel.HSSFCell; +import org.apache.poi.hssf.usermodel.HSSFRow; +import org.apache.poi.hssf.usermodel.HSSFSheet; +import org.apache.poi.hssf.usermodel.HSSFWorkbook; +/** +* 解析excel2003 +*/ +public class ReadExcel2003{ + +private HSSFWorkbook workbook ; +public ReadExcel2003(File excelFile) throws FileNotFoundException, IOException{ + workbook = new HSSFWorkbook(new FileInputStream(excelFile)); +} + +/** +*读取所有列 +*/ +public List getDatasInSheetarrall(int sheetNumber) throws FileNotFoundException, IOException{ + List result = new ArrayList(); + + //获得指定的表 + HSSFSheet sheet = workbook.getSheetAt(sheetNumber); + //获得数据总行数 + int rowCount = sheet.getLastRowNum(); + if (rowCount < 1) { + return result; + } + //逐行读取数据 + for (int rowIndex = 0; rowIndex <= rowCount; rowIndex++) { + //获得行对象 + HSSFRow row = sheet.getRow(rowIndex); + if (row != null) { + List list=new ArrayList(); + int columnCount = row.getLastCellNum(); + //读取所有的列 + for (int i = 0; i datas = parser.getDatasInSheetarrall(0); + boolean b=false; + for (int i = 0; i < datas.size(); i++) { + List listinfo = (List) datas.get(i); + for (int j = 0; j < listinfo.size(); j++) { + System.out.print(listinfo.get(j) + " "); + } + System.out.println(""); + } + +} + +} diff --git a/src/main/java/com/util/ReadExcel2007.java b/src/main/java/com/util/ReadExcel2007.java new file mode 100644 index 0000000..ca7c8d5 --- /dev/null +++ b/src/main/java/com/util/ReadExcel2007.java @@ -0,0 +1,112 @@ +package com.util; + +import java.io.File; +import java.io.FileInputStream; +import java.io.FileNotFoundException; +import java.io.IOException; +import java.util.ArrayList; +import java.util.List; +import org.apache.poi.xssf.usermodel.XSSFCell; +import org.apache.poi.xssf.usermodel.XSSFRow; +import org.apache.poi.xssf.usermodel.XSSFSheet; +import org.apache.poi.xssf.usermodel.XSSFWorkbook; + +/** + * 解析excel2007 + */ +public class ReadExcel2007 { + + private XSSFWorkbook workbook; + + public ReadExcel2007(File excelFile)throws FileNotFoundException, IOException { + workbook = new XSSFWorkbook(new FileInputStream(excelFile)); + } + + /** + *读取所有列 + */ + public List getDatasInSheetarrall(int sheetNumber) + throws FileNotFoundException, IOException { + List result = new ArrayList(); + + //获得指定的表 + XSSFSheet sheet = workbook.getSheetAt(sheetNumber); + //获得数据总行数 + int rowCount = sheet.getLastRowNum(); + if (rowCount < 1) { + return result; + } + //逐行读取数据 + for (int rowIndex = 0; rowIndex <= rowCount; rowIndex++) { + //获得行对象 + XSSFRow row = sheet.getRow(rowIndex); + if (row != null) { + List list = new ArrayList(); + int columnCount = row.getLastCellNum(); + //读取所有的列 + for (int i = 0; i < columnCount; i++) { + //获得本行中单元格的个数 + //获得本行中各单元格中的数据 + XSSFCell cell = row.getCell(Short.parseShort(i + "")); + //获得指定单元格中数据 + Object cellStr = this.getCellString(cell); + if (null != cellStr) { + list.add(cellStr.toString().trim()); + } else { + list.add(""); + } + } + result.add(list); + } + } + return result; + } + + /** + * 获得单元格中的内容 + * @param cell + * @return + */ + protected Object getCellString(XSSFCell cell) { + Object result = null; + if (cell != null) { + int cellType = cell.getCellType(); + switch (cellType) { + case XSSFCell.CELL_TYPE_STRING: + result = cell.getStringCellValue(); + break; + case XSSFCell.CELL_TYPE_NUMERIC: + result = cell.getNumericCellValue(); + break; + case XSSFCell.CELL_TYPE_FORMULA: + result = cell.getNumericCellValue(); + break; + case XSSFCell.CELL_TYPE_ERROR: + break; + case XSSFCell.CELL_TYPE_BOOLEAN: + result = cell.getBooleanCellValue(); + break; + case XSSFCell.CELL_TYPE_BLANK: + result = null; + break; + } + } + return result; + } + + public static void main(String[] args) throws Exception { + File file = new File("C:\\Users\\Administrator\\Desktop\\金钥匙\\测试清单.xlsx"); + ReadExcel2007 parser3 = new ReadExcel2007(file); + List datas = parser3.getDatasInSheetarrall(0); + for (int i = 0; i < datas.size(); i++) { + List listinfo = (List) datas.get(i); + for (int j = 0; j < listinfo.size(); j++) { + System.out.print(listinfo.get(j) + " "); + } + System.out.println(""); + } + //XMLEventFactory + //C:\java\MyEclipse 6.0\myeclipse\eclipse\plugins\com.genuitec.eclipse.j2eedt.core_6.0.0.zmyeclipse60020070820\data\libraryset\EE_5 + } + +} diff --git a/src/main/java/com/util/RequestMessage.java b/src/main/java/com/util/RequestMessage.java new file mode 100644 index 0000000..a061c0b --- /dev/null +++ b/src/main/java/com/util/RequestMessage.java @@ -0,0 +1,139 @@ +package com.util; + +import java.io.BufferedReader; +import java.io.IOException; +import java.io.InputStream; +import java.io.InputStreamReader; +import java.io.UnsupportedEncodingException; +import java.net.HttpURLConnection; +import java.net.URL; +import java.net.URLEncoder; +import java.util.HashMap; +import java.util.Map; + +import net.sf.json.JSONObject; + +/** + * @author 作者姓名: dubaohui + * @version 创建时间:2015-9-29 下午4:56:12 + * 类说明 + */ +public class RequestMessage { + public static final String DEF_CHATSET = "UTF-8"; + public static final int DEF_CONN_TIMEOUT = 30000; + public static final int DEF_READ_TIMEOUT = 30000; + public static String userAgent = "Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/29.0.1547.66 Safari/537.36"; + //配置您申请的KEY + public static final String APPKEY ="3bbd4eebe311f16af14c8f38dfa927f1"; + //模板编号 + // public static String tpl_id= "4027"; + //返回格式 + public static String dtype = "json"; + public static String url ="http://v.juhe.cn/sms/send"; + + //2.发送短信 + public static boolean SendMessage(String phoneno,String code,String tpl_id){ + boolean sign = false; + String result =null; + Map params = new HashMap();//请求参数 + params.put("mobile",phoneno);//接收短信的手机号码 + params.put("tpl_id",tpl_id);//短信模板ID,请参考个人中心短信模板设置 + //"#customername#="+code+"&#employeeno#="+8004+"" + params.put("tpl_value",code); + //变量名和变量值对。如果你的变量名或者变量值中带有#&=中的任意一个特殊符号,请先分别进行urlencode编码后再传递,<a href="http://www.juhe.cn/news/index/id/50" target="_blank">详细说明></a> + params.put("key",APPKEY);//应用APPKEY(应用详细页查询) + params.put("dtype",dtype);//返回数据的格式,xml或json,默认json + + try { + result =net(url, params, "GET"); + // System.out.println("---"+result); + JSONObject object = JSONObject.fromObject(result); + if(object.getInt("error_code")==0){ + // System.out.println(object.get("result")); + sign = true; + }else{ + // System.out.println(object.get("error_code")+":"+object.get("reason")); + sign = false; + } + } catch (Exception e) { + e.printStackTrace(); + sign = false; + } + return sign; + } + + + + public static void main(String[] args) { + //System.out.println(SendMessage("17717522592","收到请回复。。。。。")); + } + + /** + * + * @param strUrl 请求地址 + * @param params 请求参数 + * @param method 请求方法 + * @return 网络请求字符串 + * @throws Exception + */ + public static String net(String strUrl, final Map params,String method) throws Exception { + HttpURLConnection conn = null; + BufferedReader reader = null; + String rs = null; + try { + StringBuffer sb = new StringBuffer(); + if(method==null || method.equals("GET")){ + strUrl = strUrl+"?"+urlencode(params); + } + URL url = new URL(strUrl); + conn = (HttpURLConnection) url.openConnection(); + if(method==null || method.equals("GET")){ + conn.setRequestMethod("GET"); + }else{ + conn.setRequestMethod("POST"); + conn.setDoOutput(true); + } + conn.setRequestProperty("User-agent", userAgent); + conn.setUseCaches(false); + conn.setConnectTimeout(DEF_CONN_TIMEOUT); + conn.setReadTimeout(DEF_READ_TIMEOUT); + conn.setInstanceFollowRedirects(false); + conn.connect(); +// if (params!= null && method.equals("POST")) { +// try (DataOutputStream out = new DataOutputStream(conn.getOutputStream())) { +// out.writeBytes(urlencode(params)); +// } +// } + InputStream is = conn.getInputStream(); + reader = new BufferedReader(new InputStreamReader(is, DEF_CHATSET)); + String strRead = null; + while ((strRead = reader.readLine()) != null) { + sb.append(strRead); + } + rs = sb.toString(); + } catch (IOException e) { + e.printStackTrace(); + } finally { + if (reader != null) { + reader.close(); + } + if (conn != null) { + conn.disconnect(); + } + } + return rs; + } + + //将map型转为请求参数型 + public static String urlencode(Map data) { + StringBuilder sb = new StringBuilder(); + for (Map.Entry i : data.entrySet()) { + try { + sb.append(i.getKey()).append("=").append(URLEncoder.encode(i.getValue()+"","UTF-8")).append("&"); + } catch (UnsupportedEncodingException e) { + e.printStackTrace(); + } + } + return sb.toString(); + } +} diff --git a/src/main/java/com/util/RequestUtil.java b/src/main/java/com/util/RequestUtil.java new file mode 100644 index 0000000..5426f65 --- /dev/null +++ b/src/main/java/com/util/RequestUtil.java @@ -0,0 +1,1407 @@ +package com.util; + +import java.awt.image.BufferedImage; + +import java.io.*; +import java.net.InetAddress; +import java.net.UnknownHostException; +import java.security.MessageDigest; +import java.text.DateFormat; +import java.text.ParseException; +import java.text.SimpleDateFormat; +import java.util.ArrayList; +import java.util.Calendar; +import java.util.Date; +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import java.util.MissingResourceException; +import java.util.Properties; +import java.util.Random; +import java.util.ResourceBundle; +import javax.imageio.ImageIO; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; + +import com.alibaba.fastjson.JSON; +import net.sf.json.JSONArray; +import net.sf.json.JSONObject; + +/** + * 工具类 + * + * @author dubaohui + * */ +public class RequestUtil { + + /** + * 获取自动编号 + * + * @param int + * @return String + * */ + public static String getid(int f) { + SimpleDateFormat tempDate = new SimpleDateFormat("yyyyMMddHHmmss"); + String id = tempDate.format(new java.util.Date()) + getCodeint(f); + return id; + } + + /** + * + * 获取当前年份 + * + * */ + public static String getLongYear() { + SimpleDateFormat tempDate = new SimpleDateFormat("yyyy"); + String id = tempDate.format(new java.util.Date()); + return id; + } + + /** + * + * 获取当前年份 + * + * */ + public static String getShortYear() { + SimpleDateFormat tempDate = new SimpleDateFormat("yyyy"); + String id = tempDate.format(new java.util.Date()); + return id.substring(2, id.length()); + } + + /** + * + * 获取当前日期周日对应的日期 + * + * @param + * @return String + * */ + public static String getDateForSunday() { + Calendar cal = Calendar.getInstance(); + // n为推迟的周数,1本周,-1向前推迟一周,2下周,依次类推 + int n = 1; + cal.add(Calendar.DATE, n * 7); + cal.set(Calendar.DAY_OF_WEEK, Calendar.SUNDAY); + String sunday = new SimpleDateFormat("yyyy-MM-dd") + .format(cal.getTime()); + return sunday; + } + + /** + * + * 获取当前日期周一对应的日期 + * + * @param + * @return String + * */ + public static String getDateForMonday() { + Calendar cal = Calendar.getInstance(); + // n为推迟的周数,1本周,-1向前推迟一周,2下周,依次类推 + int n = 0; + cal.add(Calendar.DATE, n * 7); + cal.set(Calendar.DAY_OF_WEEK, Calendar.MONDAY); + String monday = new SimpleDateFormat("yyyy-MM-dd") + .format(cal.getTime()); + + return monday; + } + + /** + * + * 获取随即数字 + * + * @param code_len + * @reutrn String + * + * */ + public static String getCodeint(int code_len) { + int count = 0; + char str[] = { '1', '2', '3', '4', '5', '6', '7', '8', '9' }; + StringBuffer pwd = new StringBuffer(""); + Random r = new Random(); + while (count < code_len) { + int i = Math.abs(r.nextInt(10)); + if (i >= 0 && i < str.length) { + pwd.append(str[i]); + count++; + } + } + return pwd.toString(); + } + + /** + * 获取随即数 + * + * @param code_len + * @return String + * */ + public static String getCodechar(int codelen) { + int count = 0; + char str[] = { 'a', '1', 'b', 'c', '2', 'd', 'e', '4', 'f', 'j', 'h', + '3', 'i', 'j', '6', 'k', 'l', '9', 'm', 'n', 'p', 'q', 'r', + 's', 't', '7', 'u', 'v', 'w', '8', 'x', 'y', '5', 'z' }; + StringBuffer pwd = new StringBuffer(""); + Random r = new Random(); + while (count < codelen) { + int i = Math.abs(r.nextInt(10)); + if (i >= 0 && i < str.length) { + pwd.append(str[i]); + count++; + } + } + return pwd.toString(); + } + + /** + * 获取当前时间 + * + * @param + * @return String yyyy-MM-dd HH:mm:ss + * + * */ + public static String getDateTime() { + SimpleDateFormat tempDate = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); + return tempDate.format(new java.util.Date()); + } + + /** + * 获取当前时间 + * + * @param + * @return String HH:mm + * + * */ + public static String getHHmmTime() { + SimpleDateFormat tempDate = new SimpleDateFormat("HH:mm"); + return tempDate.format(new java.util.Date()); + } + + /** + * + * 获取日期 YYYY-MM-DD + * */ + public static String getShortDate() { + SimpleDateFormat tempDate = new SimpleDateFormat("yyyy-MM-dd"); + return tempDate.format(new java.util.Date()); + } + + /** + * + * 根据起止日期获取范围内的每一天 + * + * @param start + * @param end + * @return String[] + * + * */ + public static String[] getEveryDateForDay(String start, String end) { + SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd"); + String strs = ""; + try { + Date dBegin = sdf.parse(start); + Date dEnd = sdf.parse(end); + List lDate = findDates(dBegin, dEnd); + + for (Date date : lDate) { + // System.out.println(sdf.format(date)); + strs += sdf.format(date) + ","; + } + } catch (ParseException e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } + if (!"".equals(strs)) { + strs = strs.substring(0, strs.length() - 1); + } + String str[] = strs.split(","); + return str; + } + + + + public static List findDates(Date dBegin, Date dEnd) { + List lDate = new ArrayList(); + lDate.add(dBegin); + Calendar calBegin = Calendar.getInstance(); + // 使用给定的 Date 设置此 Calendar 的时间 + calBegin.setTime(dBegin); + Calendar calEnd = Calendar.getInstance(); + // 使用给定的 Date 设置此 Calendar 的时间 + calEnd.setTime(dEnd); + // 测试此日期是否在指定日期之后 + while (dEnd.after(calBegin.getTime())) { + // 根据日历的规则,为给定的日历字段添加或减去指定的时间量 + calBegin.add(Calendar.DAY_OF_MONTH, 1); + lDate.add(calBegin.getTime()); + } + return lDate; + } + + /** + * + * 计算时间差 + * + * @param dateStart + * @param dateStop + * @return String + * + * */ + public static String TimeDifference(String dateStart, String dateStop) { + String returnvalue = "0天0时0分0秒"; + SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); + try { + Date d1 = format.parse(dateStart); + Date d2 = format.parse(dateStop); + // 毫秒ms + long diff = d2.getTime() - d1.getTime(); + System.out.println(diff); + long diffSeconds = diff / 1000 % 60; + long diffMinutes = diff / (60 * 1000) % 60; + long diffHours = diff / (60 * 60 * 1000) % 24; + long diffDays = diff / (24 * 60 * 60 * 1000); + returnvalue = diffDays + "天" + diffHours + "小时" + diffMinutes + + "分钟" + diffSeconds + "秒"; + } catch (Exception e) { + e.printStackTrace(); + } + return returnvalue; + } + + + /** + * + * 计算间隔天数 + * + * @param dateStart + * @param dateStop + * @return String + * + * */ + public static Integer DateDifference(String dateStart, String dateStop) { + int returnvalue = 0; + SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd"); + try { + Date d1 = format.parse(dateStart); + Date d2 = format.parse(dateStop); + // 毫秒ms + long diff = d2.getTime() - d1.getTime(); + long diffDays = diff / (24 * 60 * 60 * 1000); + returnvalue = Integer.parseInt(String.valueOf(diffDays)); + } catch (Exception e) { + e.printStackTrace(); + } + return returnvalue; + } + /** + * + * 计算间隔天数 + * + * @param dateStart + * @param dateStop + * @return String + * + * */ + public static Integer DateDifference(String dateStart, String dateStop,String dataformat) throws Exception{ + int returnvalue = 0; + SimpleDateFormat format = new SimpleDateFormat(dataformat); + try { + Date d1 = format.parse(dateStart); + Date d2 = format.parse(dateStop); + // 毫秒ms + long diff = d2.getTime() - d1.getTime(); + long diffDays = diff / (24 * 60 * 60 * 1000); + returnvalue = Integer.parseInt(String.valueOf(diffDays)); + } catch (Exception e) { + throw e; + } + return returnvalue; + } + /** + * + * 根据日期获取分钟 + * + * @param dateStart + * @param dateStop + * @return String + * */ + public static String getMinutes(String dateStart, String dateStop) { + + String returnvalue = "0"; + SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); + try { + Date d1 = format.parse(dateStart); + Date d2 = format.parse(dateStop); + // 毫秒ms + long diff = d2.getTime() - d1.getTime(); + long minut = diff / (1000 * 60); + returnvalue = minut + ""; + } catch (Exception e) { + e.printStackTrace(); + } + return returnvalue; + } + + + /** + * 获取服务路径 + * + * @param HttpServletRequest + * @return String + * */ + public static String getPath(HttpServletRequest request) { + return request.getContextPath(); + + } + + /** + * 获取文件路径 + * @param String + * @return String + * + * */ + public static String getFilePath(String filename,HttpServletRequest request){ + return request.getSession().getServletContext().getRealPath(filename); + } + + /** + * 读取实体文件转成二进制字符串 + * + * @param path + * @return String + * @throws IOException + * */ + public static String GetHexStringbyImg(String path, String type) + throws IOException { + + String info = ""; + File f = new File(path); + InputStream input = new FileInputStream(f); + BufferedInputStream bis = new BufferedInputStream(input); + BufferedImage bm = ImageIO.read(bis); + ByteArrayOutputStream bos = new ByteArrayOutputStream(); + ImageIO.write(bm, type, bos); + bos.flush(); + byte[] data = bos.toByteArray(); + info = byte2hex(data); + // System.out.println(info); + bos.close(); + return info; + } + + /** + * @title 根据二进制字符串生成图片 + * @param data + * 生成图片的二进制字符串 + * @param fileName + * 图片名称(完整路径) + * @param type + * 图片类型 + * @return + */ + public static void saveImage(String data, String fileName, String type) { + + BufferedImage image = new BufferedImage(300, 300, + BufferedImage.TYPE_BYTE_BINARY); + ByteArrayOutputStream byteOutputStream = new ByteArrayOutputStream(); + try { + ImageIO.write(image, type, byteOutputStream); + // byte[] date = byteOutputStream.toByteArray(); + byte[] bytes = hex2byte(data); + // System.out.println("path:" + fileName); + RandomAccessFile file = new RandomAccessFile(fileName, "rw"); + file.write(bytes); + file.close(); + } catch (IOException e) { + e.printStackTrace(); + } + } + + /** + * 反格式化byte + * + * @param s + * @return + */ + public static byte[] hex2byte(String s) { + byte[] src = s.toLowerCase().getBytes(); + byte[] ret = new byte[src.length / 2]; + for (int i = 0; i < src.length; i += 2) { + byte hi = src[i]; + byte low = src[i + 1]; + hi = (byte) ((hi >= 'a' && hi <= 'f') ? 0x0a + (hi - 'a') + : hi - '0'); + low = (byte) ((low >= 'a' && low <= 'f') ? 0x0a + (low - 'a') + : low - '0'); + ret[i / 2] = (byte) (hi << 4 | low); + } + return ret; + } + + /** + * 格式化byte + * + * @param b + * @return + */ + public static String byte2hex(byte[] b) { + char[] Digit = { '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'A', + 'B', 'C', 'D', 'E', 'F' }; + char[] out = new char[b.length * 2]; + for (int i = 0; i < b.length; i++) { + byte c = b[i]; + out[i * 2] = Digit[(c >>> 4) & 0X0F]; + out[i * 2 + 1] = Digit[c & 0X0F]; + } + + return new String(out); + } + + /** + * MD5加密 + * + * @param String + * @param String + * */ + + public static String getMD5Message(String strs) { + String returnValue = ""; + char hexDigits[] = { '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', + 'a', 'b', 'c', 'd', 'e', 'f' }; + try { + byte[] strTemp = strs.getBytes(); + // 使用MD5创建MessageDigest对象 + MessageDigest mdTemp = MessageDigest.getInstance("MD5"); + mdTemp.update(strTemp); + byte[] md = mdTemp.digest(); + int j = md.length; + char str[] = new char[j * 2]; + int k = 0; + for (int i = 0; i < j; i++) { + byte b = md[i]; + // 将每个数(int)b进行双字节加密 + str[k++] = hexDigits[b >> 4 & 0xf]; + str[k++] = hexDigits[b & 0xf]; + } + returnValue = new String(str); + } catch (Exception e) { + return null; + } + return returnValue; + } + + /** + * 获取某年 某月的第一天 + * + * @param year + * @param month + * @reutrn String + * */ + public static String getFirstDayOfMonth(int year, int month) { + Calendar cal = Calendar.getInstance(); + cal.set(Calendar.YEAR, year); + cal.set(Calendar.MONTH, month - 1); + cal.set(Calendar.DAY_OF_MONTH, cal.getMinimum(Calendar.DATE)); + return new SimpleDateFormat("yyyyMMdd ").format(cal.getTime()); + } + + /** + * 获取某月的最后一天 + * + * @param year + * @param month + * @return String + * */ + public static String getLastDayOfMonth(int year, int month) { + Calendar cal = Calendar.getInstance(); + cal.set(Calendar.YEAR, year); + cal.set(Calendar.MONTH, month - 1); + cal.set(Calendar.DAY_OF_MONTH, cal.getActualMaximum(Calendar.DATE)); + return new SimpleDateFormat("yyyyMMdd ").format(cal.getTime()); + } + + /** + * 获取某年 某月的第一天 + * + * @param year + * @param month + * @reutrn String + * */ + public static String getFirstDayOfMonthformat(int year, int month) { + Calendar cal = Calendar.getInstance(); + cal.set(Calendar.YEAR, year); + cal.set(Calendar.MONTH, month - 1); + cal.set(Calendar.DAY_OF_MONTH, cal.getMinimum(Calendar.DATE)); + return new SimpleDateFormat("yyyy-MM-dd ").format(cal.getTime()); + } + + /** + * 获取某月的最后一天 + * + * @param year + * @param month + * @return String + * */ + public static String getLastDayOfMonthformat(int year, int month) { + Calendar cal = Calendar.getInstance(); + cal.set(Calendar.YEAR, year); + cal.set(Calendar.MONTH, month - 1); + cal.set(Calendar.DAY_OF_MONTH, cal.getActualMaximum(Calendar.DATE)); + return new SimpleDateFormat("yyyy-MM-dd ").format(cal.getTime()); + } + + /** + * 根据年月获取周的起止日期 + * + * @param year + * @param month + * return String + * */ + public static String getWeekStartandEnd(String year, String month) { + + String info = ""; + Calendar cal = Calendar.getInstance(); + cal.clear(); + cal.set(Calendar.YEAR, Integer.parseInt(year)); + cal.set(Calendar.MONTH, Integer.parseInt(month) - 1); + int index = 1; + String start = null; + if (Integer.parseInt(month) < 10) { + start = year +"-"+ "0" + month +"-"+ "0" + 1; + } else { + start = year +"-"+ month +"-"+ 1; + } + String end = null; + for (int i = 1; i <= cal.getActualMaximum(Calendar.DAY_OF_MONTH); i++) { + cal.set(Calendar.DAY_OF_MONTH, i); + int week = cal.get(Calendar.DAY_OF_WEEK); + if (Integer.parseInt(month) < 10) { + if (i < 10) { + end = year +"-"+ "0" + month +"-"+ "0" + i; + } else { + end = year +"-"+ "0" + month+"-" + i; + } + } else { + if (i < 10) { + end = year +"-"+ month +"-"+ "0" + i; + } else { + end = year +"-"+ month +"-"+ i; + } + } + if (week - 1 == 6) { + info += start + "&" + end + ","; + if (Integer.parseInt(month) < 10) { + if ((i + 1) < 10) { + start = year +"-"+ "0" + month +"-"+ "0" + (i + 1); + } else { + start = year +"-"+ "0" + month +"-"+ (i + 1); + } + + } else { + if ((i + 1) < 10) { + start = year +"-"+ month +"-"+ "0" + (i + 1); + } else { + start = year +"-"+ month +"-"+ (i + 1); + } + } + index++; + } + } + info += start + "&" + end; + return info; + } + + + /** + * 得到本周和上周的起止日期 + * */ + public static String ReWeek(int n) { + Calendar cal = Calendar.getInstance(); + // n为推迟的周数,1本周,-1向前推迟一周,2下周,依次类推 + // 上周起止时间 n=-1 n=0 上周 n=-1<= date 9) { + } else { + if (month.length() == 2) { + month = month.substring(1, month.length()); + } + } + String str = getWeekStartandEnd(year, month); + String st[] = str.split(","); + info = st[f - 1].toString(); + return info; + } + + /** + * 计算时间段间隔多少分钟 + * + * @param String + * @param String + * @return String + * */ + public static String TimeLock(Date t11, Date t22) { + long l1 = 0; + long l2 = 0; + SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm"); + String t1 = sdf.format(t11); + String t2 = sdf.format(t22); + try { + l1 = sdf.parse(t1).getTime(); + l2 = sdf.parse(t2).getTime(); + } catch (java.text.ParseException pe) { + pe.printStackTrace(); + } + return String.valueOf((l2 - l1) / 1000 / 60); + } + + /** + * + * 对象数组[]转化成string + * */ + public static String ReturnObjStr(Object obj) { + if (obj != null) { + return obj.toString(); + } else { + return ""; + } + } + + /** + * 返回 空值 + * */ + public static String IsNULL(String str) { + if (str == null) { + str = ""; + } + return str; + } + + /** + * 判断当前日期是星期几
+ *
+ * + * @param pTime + * 修要判断的时间
+ * @return dayForWeek 判断结果
+ * @Exception 发生异常
+ */ + public static int dayForWeekInt(String pTime) { + SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd"); + Calendar c = Calendar.getInstance(); + try { + c.setTime(format.parse(pTime)); + } catch (ParseException e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } + int dayForWeek = 0; + if (c.get(Calendar.DAY_OF_WEEK) == 1) { + dayForWeek = 7; + } else { + dayForWeek = c.get(Calendar.DAY_OF_WEEK) - 1; + } + return dayForWeek; + } + + /*** + * + * 根据日期获取今天是周几中文 + * + * */ + public static String dayForWeekString(String pTime) { + SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd"); + Calendar c = Calendar.getInstance(); + try { + c.setTime(format.parse(pTime)); + } catch (ParseException e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } + int dayForWeek = 0; + if (c.get(Calendar.DAY_OF_WEEK) == 1) { + dayForWeek = 7; + } else { + dayForWeek = c.get(Calendar.DAY_OF_WEEK) - 1; + } + String[] weeks = { "星期一", "星期二", "星期三", "星期四", "星期五", "星期六", "星期日" }; + return weeks[dayForWeek - 1]; + + } + + + /** + * 获取当前年月第几周 + * + * */ + public static String getYearMonthWeek() { + + Calendar cal = Calendar.getInstance(); + int month = cal.get(Calendar.MONTH) + 1;// 月 + int year = cal.get(Calendar.YEAR); // 年 + Map map = new HashMap(); + map.put(1, "一"); + map.put(2, "二"); + map.put(3, "三"); + map.put(4, "四"); + map.put(5, "五"); + map.put(6, "六"); + map.put(7, "七"); + map.put(8, "八"); + map.put(9, "九"); + int week = cal.get(Calendar.WEEK_OF_MONTH);// 获取是本月的第几周 + return year + "年" + month + "月" + " 第" + map.get(week) + "周"; + } + + public static void main(String[] args) throws ParseException { + String str = "201506151234"; + String co = str.substring(0, str.length()-4); + String newstr = str.substring(str.length()-4, str.length()); + int c = Integer.parseInt(newstr)+1; + String c1 = String.valueOf(c); + String code = ""; + if(c1.length()==1){ + code = co+"000"+c1; + }else if(c1.length()==2){ + code = co+"00"+c1; + }else if(c1.length()==3){ + code = co+"0"+c1; + }else{ + code=co+c1; + } + System.out.println(code); + } + + + + public static String GetCodeByCode(String jcode,String beforecode){ + String code = ""; + String between = UtilTools.getTime("YYYYMMdd"); + if(RequestUtil.checkisnull(beforecode) && beforecode.length()>8){ + String lastcode = beforecode.substring(beforecode.length()-4, beforecode.length()); + String newlastcode = String.valueOf(Integer.parseInt(lastcode)+1); + if(newlastcode.length()==1){ + code = jcode+between+"000"+newlastcode; + }else if(newlastcode.length()==2){ + code = jcode+between+"00"+newlastcode; + }else if(newlastcode.length()==3){ + code = jcode+between+"0"+newlastcode; + }else{ + code = jcode+between+newlastcode; + } + }else{ + code = jcode+between+"0001"; + } + return code; + } + + /*** + * 根据年月获取月份的最后一天 + * + * @param year + * @param month + * @param String + * yyyy-mm-dd + * */ + // 需要注意的是:月份是从0开始的,比如说如果输入5的话,实际上显示的是4月份的最后一天,千万不要搞错了哦 + public static String getLastDayOfYearMonth(int year, int month) { + Calendar cal = Calendar.getInstance(); + cal.set(Calendar.YEAR, year); + cal.set(Calendar.MONTH, month - 1); + cal.set(Calendar.DAY_OF_MONTH, cal.getActualMaximum(Calendar.DATE)); + return new SimpleDateFormat("yyyy-MM-dd").format(cal.getTime()); + } + + /*** + * 根据年月获取月份的第一天 + * + * @param year + * @param month + * @param String + * yyyy-mm-dd + * */ + public static String getFirstDayOfYearMonth(int year, int month) { + Calendar cal = Calendar.getInstance(); + cal.set(Calendar.YEAR, year); + cal.set(Calendar.MONTH, month - 1); + cal.set(Calendar.DAY_OF_MONTH, cal.getMinimum(Calendar.DATE)); + return new SimpleDateFormat("yyyy-MM-dd").format(cal.getTime()); + } + + /** + * + * double转int实现四舍五入 + * */ + public static int DoubletoInt(double value) { + int yvalue = Integer.parseInt(new java.text.DecimalFormat("0") + .format(value)); + return yvalue; + } + + /** + * Object转换成JSON + * + * @param javaObj + * @return + */ + public static String ObjecttoJsonString(Object javaObj) { + JSONObject json; + json = JSONObject.fromObject(javaObj); + return json.toString(); + + } + + + /** + * list转换成JSON + * + * @param javaObj + * @return + */ + public static String ListtoJsonString(List list) { + JSONArray json; + if (list != null && list.size() > 0) { + json = JSONArray.fromObject(list); + return json.toString(); + } else { + return ""; + } + + } + + + /** + * 数据写入缓存操作 + * + * @param HttpServletResponse + * @param jsonResult + * @return + * @author dubaohui + * */ + + public static void responseResult4Json(HttpServletResponse response, + String jsonResult) { + response.setCharacterEncoding("UTF-8"); + try { + PrintWriter out = response.getWriter(); + out.println(jsonResult); + out.flush(); + out.close(); + } catch (IOException e) { + e.printStackTrace(); + } + } + + /** + * JSON参数格式错误 + * + * @param HttpServletResponse + * @param jsonResult + * @return + * @author dubaohui + * */ + + public static void responseResult4JsonError(HttpServletResponse response, + String param) { + response.setCharacterEncoding("UTF-8"); + try { + PrintWriter out = response.getWriter(); + String jsonResult = "error:错误的JSON格式:" + param + ",请认真检查您的JSON格式。"; + out.println(jsonResult); + out.flush(); + out.close(); + } catch (IOException e) { + e.printStackTrace(); + } + } + + /** + * + * 获取List.size() + * + * @param List + * @return int + * @author dubaohui + * */ + public static int IfList(List list) { + if (list != null && list.size() > 0) { + return list.size(); + } else { + return 0; + } + } + + /** + * 数据删除提示 + * + * @param boolean + * @param HttpServletResponse + * @return String + * @author dubaohui + * */ + public static void Delete(boolean sign, HttpServletResponse response) { + if (sign) { + responseResult4Json(response, Configmessage.DELECESUCC); + } else { + responseResult4Json(response, Configmessage.DELECEFINAL); + } + } + + /** + * 数据修改提示 + * + * @param boolean + * @param HttpServletResponse + * @return String + * @author dubaohui + * */ + public static void Update(boolean sign, HttpServletResponse response) { + if (sign) { + responseResult4Json(response, Configmessage.UPDATESUCC); + } else { + responseResult4Json(response, Configmessage.UPDATEFINAL); + } + } + + /** + * 数据新增提示 + * + * @param boolean + * @param HttpServletResponse + * @return String + * @author dubaohui + * */ + public static void Save(boolean sign, HttpServletResponse response) { + if (sign) { + responseResult4Json(response, Configmessage.SAVESUCC); + } else { + responseResult4Json(response, Configmessage.SAVEFINAL); + } + } + + + /** + * + * 数据操作提示 + * + * @param boolean + * @return String + * @author dubaohui + * + * */ + public static void CAOZ(boolean sign, HttpServletResponse response) { + if (sign) { + responseResult4Json(response, Configmessage.CAOZYES); + } else { + responseResult4Json(response, Configmessage.CAOZNO); + } + } + /** + * + * 数据设置提示 + * + * @param boolean + * @return String + * @author dubaohui + * + * */ + public static void Setting(boolean sign, HttpServletResponse response) { + if (sign) { + responseResult4Json(response, Configmessage.SETINGSUCC); + } else { + responseResult4Json(response, Configmessage.SETINGFINAL); + } + } + + /** + * + * 数据调动提示 + * + * @param boolean + * @return String + * @author dubaohui + * + * */ + public static void Redeploy(boolean sign, HttpServletResponse response) { + if (sign) { + responseResult4Json(response, Configmessage.REDSUCC); + } else { + responseResult4Json(response, Configmessage.REDFINAL); + } + } + + /** + * + * 数据初始化提示 + * + * @param boolean + * @return String + * @author dubaohui + * + * */ + public static void Init(boolean sign, HttpServletResponse response) { + if (sign) { + responseResult4Json(response, Configmessage.INITSUCC); + } else { + responseResult4Json(response, Configmessage.INITFINAL); + } + } + /** + * + * 判断是否为int + * + * */ + public static boolean isInt(String value) { + boolean flg = false; + try { + Integer.parseInt(value); + flg = true; + } catch (Exception ex) { + flg = false; + } + return flg; + } + + /** + * + * 返回List结果集的记录条数 + * + * */ + public static int ListCount(List listcount) { + + int count = 0; + if (listcount != null && listcount.size() > 0) { + count = listcount.size(); + } + return count; + } + + // 返回序号 + public static int checkabc(String value) { + int j = 0; + String convert[] = { "A", "B", "C", "D", "E", "F", "G", "H", "I", "J", + "K", "L", "M", "N", "O", "P", "Q", "R", "S", "T", "U", "V", + "W", "X", "Y", "Z" }; + for (int i = 0; i < convert.length; i++) { + if (value.equals(convert[i])) { + j = i + 1; + break; + } + } + return j; + } + + /*** + * @param List + * + * @param String + * [] JSON标识 + * @return JSONArray + * @author dubaohui + * */ + public static JSONArray listTojsonArray(List list, String[] names) { + JSONArray jarry = new JSONArray(); + if (list != null && list.size() > 0) { + for (int i = 0; i < list.size(); i++) { + Object[] obj = (Object[]) list.get(i); + JSONObject object = new JSONObject(); + for (int j = 0; j < names.length; j++) { + object.put(names[j], + null == obj[j] ? "" : obj[j].toString()); + } + jarry.add(object); + } + } + return jarry; + } + + /** + * + * 读取properties配置文件中的数据 + * + * @param key + * @return value + * */ + public static String getpropertiesvalue(String key) { + ResourceBundle resourceBundle=ResourceBundle.getBundle("com/dubh/sysconfig/group"); + if (key == null || key.equals("") || key.equals("null")) { + return ""; + } + String result = ""; + try { + result = resourceBundle.getString(key); + } catch (MissingResourceException e) { + e.printStackTrace(); + } + return result; + } + + + /** + * + * 获取访问者IP地址 + * + * */ + public static String getIpAddr(HttpServletRequest request) { + String ipAddress = null; + // ipAddress = this.getRequest().getRemoteAddr(); + ipAddress = request.getHeader("x-forwarded-for"); + if (ipAddress == null || ipAddress.length() == 0 + || "unknown".equalsIgnoreCase(ipAddress)) { + ipAddress = request.getHeader("Proxy-Client-IP"); + } + if (ipAddress == null || ipAddress.length() == 0 + || "unknown".equalsIgnoreCase(ipAddress)) { + ipAddress = request.getHeader("WL-Proxy-Client-IP"); + } + if (ipAddress == null || ipAddress.length() == 0 + || "unknown".equalsIgnoreCase(ipAddress)) { + ipAddress = request.getRemoteAddr(); + if (ipAddress.equals("127.0.0.1") + || ipAddress.equals("0:0:0:0:0:0:0:1")) { + // 根据网卡取本机配置的IP + InetAddress inet = null; + try { + inet = InetAddress.getLocalHost(); + } catch (UnknownHostException e) { + e.printStackTrace(); + } + ipAddress = inet.getHostAddress(); + } + + } + + // 对于通过多个代理的情况,第一个IP为客户端真实IP,多个IP按照','分割 + if (ipAddress != null && ipAddress.length() > 15) { // "***.***.***.***".length() + // = 15 + if (ipAddress.indexOf(",") > 0) { + ipAddress = ipAddress.substring(0, ipAddress.indexOf(",")); + } + } + return ipAddress; + } + + + /** + * 如果文件为NULL 返回”” + * + * */ + public static String stringIsNull(String objstr) { + if (null == objstr) { + return ""; + } else { + return objstr; + } + } + + + + /** + * + * 获取文件后缀名 + * + * */ + public static String getExtensionName(String filename) { + if ((filename != null) && (filename.length() > 0)) { + int dot = filename.lastIndexOf('.'); + if ((dot >-1) && (dot < (filename.length() - 1))) { + return filename.substring(dot + 1); + } + } + return filename; + } + + + + /** + * + * 去除固定标示 + * + * @param String + * @return String + * */ + public static String SplitString(String flg){ + String info=""; + if(flg !=null && !"".equals(flg)){ + if(flg.indexOf("_")>0){ + + info= flg.replace("_", ""); + }else{ + + info= flg; + } + } + return info; + } + + + /** + * + * 判断是否为空 + * @param String + * @return boolean + * */ + public static boolean checkisnull(String str){ + if(null != str && !"".equals(str)){ + return true; + }else{ + return false; + } + } + + + + /*** + * + * 字符串转成万元 + * + * */ + public static String getMoneytoWan(String money){ + String wanmoney = "0.0万"; + if(checkisnull(money)){ + double moneys = Double.parseDouble(money); + double n = (double) moneys / 10000; + wanmoney = n+"万"; + } + return wanmoney; + } + + + /** + * 获取某一周内的所有日期及星期 + * @param int 0:本周 1:下一周 -1:上一周 可一次递增或递减 + * */ + public static org.json.JSONArray getEveryDayforWeek(int n) { + org.json.JSONArray array = new org.json.JSONArray(); + try{ + Calendar cal = Calendar.getInstance(); + cal.add(Calendar.DATE, n * 7); + cal.set(Calendar.DAY_OF_WEEK, Calendar.MONDAY); + SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd"); + Calendar callast = Calendar.getInstance(); + //获取中国周日日期 + int f=n+1; + callast.add(Calendar.DATE, f * 7); + callast.set(Calendar.DAY_OF_WEEK, Calendar.SUNDAY); + //获取本周内所有日期 + String monday = dateFormat.format(cal.getTime()); + String sunday = dateFormat.format(callast.getTime()); + Date dBegin = dateFormat.parse(monday); + Date dEnd = dateFormat.parse(sunday); + List lDate = findDates(dBegin, dEnd); + for (Date date : lDate) { + org.json.JSONObject object = new org.json.JSONObject(); + object.put("date", dateFormat.format(date)); + object.put("weekcn",dayForWeekInt(dateFormat.format(date))); + object.put("weeken",dayForWeekString(dateFormat.format(date))); + array.put(object); + } + }catch(Exception ex){ + ex.printStackTrace(); + } + return array; + } + + + /** + * + * 根据日期获取日期属于第几周 + * @param date + * @return int + * */ + public static int getWeekforNum(String date){ + Calendar ca = Calendar.getInstance(); + SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd"); + try { + ca.setTime(dateFormat.parse(date)); + } catch (ParseException e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } + int weeknum = ca.get(Calendar.WEEK_OF_YEAR); + return weeknum; + } + + + /** + * 获取对象编号 + * */ + public String getwebkeys(String webkey){ + StringBuffer sb = new StringBuffer(""); + if(RequestUtil.checkisnull(webkey)){ + if(webkey.indexOf(":")>-1){ + String webkeys[] = webkey.split(":"); + if(webkeys.length>0){ + for(int i=0;i-1){ + String student[] = webkey.split(":"); + if(student.length>0){ + webkeys= new String[student.length]; + for(int i=0;i params = new ArrayList(); + params.add(new BasicNameValuePair("action", action)); + params.add(new BasicNameValuePair("account", account)); + params.add(new BasicNameValuePair("password", password)); + params.add(new BasicNameValuePair("num", phone)); + params.add(new BasicNameValuePair("sign",sign)); + params.add(new BasicNameValuePair("content", context+" 退订请回T")); + params.add(new BasicNameValuePair("md5", md5)); + httppost.setEntity(new UrlEncodedFormEntity(params, HTTP.UTF_8)); + HttpResponse response = new DefaultHttpClient().execute(httppost); + if (response.getStatusLine().getStatusCode() == 200) { + String result = EntityUtils.toString(response.getEntity()); + JSONObject json = new JSONObject(result); + flg = json.getBoolean("success"); + } + }catch(Exception ex){ + ex.printStackTrace(); + } + return flg; + } + + public static void main(String[] args) { + System.out.println(sendcode("13764935808", "尊敬的车商您好! 退订请回T")); + } + +} diff --git a/src/main/java/com/util/SetJsonObject.java b/src/main/java/com/util/SetJsonObject.java new file mode 100644 index 0000000..32acf4c --- /dev/null +++ b/src/main/java/com/util/SetJsonObject.java @@ -0,0 +1,39 @@ +package com.util; + +import java.io.Serializable; +import java.util.List; + +import com.dubh.common.dto.BaseDto; + + + +/** + * JSON构造工具类 + * @author dubaohui + * */ +public class SetJsonObject implements Serializable{ + + + + private int total = 0; + private List rows; + private Object obj; + public Object getObj() { + return obj; + } + public void setObj(Object obj) { + this.obj = obj; + } + public int getTotal() { + return total; + } + public void setTotal(int total) { + this.total = total; + } + public List getRows() { + return rows; + } + public void setRows(List rows) { + this.rows = rows; + } +} diff --git a/src/main/java/com/util/SpringUtil.java b/src/main/java/com/util/SpringUtil.java new file mode 100644 index 0000000..fe32797 --- /dev/null +++ b/src/main/java/com/util/SpringUtil.java @@ -0,0 +1,20 @@ +package com.util; +import org.springframework.beans.BeansException; +import org.springframework.context.ApplicationContext; +import org.springframework.context.ApplicationContextAware; +/** + * 工具类 + * 服务启动时得到SpringBean + * @author dubaohui + * */ +public class SpringUtil implements ApplicationContextAware { + private static ApplicationContext applicationContext; + public void setApplicationContext(ApplicationContext arg0) + throws BeansException { + SpringUtil.applicationContext = arg0; + } + public static Object getBean(String name){ + return applicationContext.getBean(name); + } +} + diff --git a/src/main/java/com/util/Student.java b/src/main/java/com/util/Student.java new file mode 100644 index 0000000..e1b4f65 --- /dev/null +++ b/src/main/java/com/util/Student.java @@ -0,0 +1,69 @@ +package com.util; + +import java.util.Date; + +/** + * @author 作者姓名: dubaohui + * @version 创建时间:2015-8-12 下午2:40:28 + * 类说明 + */ +public class Student +{ + private int id; + private String name; + private int age; + private Date birth; + + public Student() + { + } + + public Student(int id, String name, int age, Date birth) + { + this.id = id; + this.name = name; + this.age = age; + this.birth = birth; + } + + public int getId() + { + return id; + } + + public void setId(int id) + { + this.id = id; + } + + public String getName() + { + return name; + } + + public void setName(String name) + { + this.name = name; + } + + public int getAge() + { + return age; + } + + public void setAge(int age) + { + this.age = age; + } + + public Date getBirth() + { + return birth; + } + + public void setBirth(Date birth) + { + this.birth = birth; + } + +} \ No newline at end of file diff --git a/src/main/java/com/util/SystemTool.java b/src/main/java/com/util/SystemTool.java new file mode 100644 index 0000000..c81e81c --- /dev/null +++ b/src/main/java/com/util/SystemTool.java @@ -0,0 +1,166 @@ +package com.util; + +import java.io.BufferedReader; +import java.io.IOException; +import java.io.InputStreamReader; +import java.net.InetAddress; +import java.net.NetworkInterface; + +/** + * 与系统相关的一些常用工具方法. + * + * @author dubaohui + * @version 1.0.0 + */ +public class SystemTool { + + /** + * 获取当前操作系统名称. return 操作系统名称 例如:windows xp,linux 等. + */ + public static String getOSName() { + return System.getProperty("os.name").toLowerCase(); + } + + /** + * 获取unix网卡的mac地址. 非windows的系统默认调用本方法获取. + * 如果有特殊系统请继续扩充新的取mac地址方法. + * + * @return mac地址 + */ + public static String getUnixMACAddress() { + String mac = null; + BufferedReader bufferedReader = null; + Process process = null; + try { + // linux下的命令,一般取eth0作为本地主网卡 + process = Runtime.getRuntime().exec("ifconfig eth0"); + // 显示信息中包含有mac地址信息 + bufferedReader = new BufferedReader(new InputStreamReader( + process.getInputStream())); + String line = null; + int index = -1; + while ((line = bufferedReader.readLine()) != null) { + // 寻找标示字符串[hwaddr] + index = line.toLowerCase().indexOf("hwaddr"); + if (index >= 0) {// 找到了 + // 取出mac地址并去除2边空格 + mac = line.substring(index + "hwaddr".length() + 1).trim(); + break; + } + } + } catch (IOException e) { + e.printStackTrace(); + } finally { + try { + if (bufferedReader != null) { + bufferedReader.close(); + } + } catch (IOException e1) { + e1.printStackTrace(); + } + bufferedReader = null; + process = null; + } + return mac; + } + + /** + * 获取widnows网卡的mac地址. + * + * @return mac地址 + */ + public static String getWindowsMACAddress() { + String mac = null; + BufferedReader bufferedReader = null; + Process process = null; + try { + // windows下的命令,显示信息中包含有mac地址信息 + process = Runtime.getRuntime().exec("ipconfig /all"); + bufferedReader = new BufferedReader(new InputStreamReader( + process.getInputStream())); + String line = null; + int index = -1; + while ((line = bufferedReader.readLine()) != null) { + System.out.println(line); + // 寻找标示字符串[physical + index = line.toLowerCase().indexOf("physical address"); + + if (index >= 0) {// 找到了 + index = line.indexOf(":");// 寻找":"的位置 + if (index >= 0) { + System.out.println(mac); + // 取出mac地址并去除2边空格 + mac = line.substring(index + 1).trim(); + } + break; + } + } + } catch (IOException e) { + e.printStackTrace(); + } finally { + try { + if (bufferedReader != null) { + bufferedReader.close(); + } + } catch (IOException e1) { + e1.printStackTrace(); + } + bufferedReader = null; + process = null; + } + + return mac; + } + + /** + * windows 7 专用 获取MAC地址 + * + * @return + * @throws Exception + */ + public static String getMACAddress() throws Exception { + + // 获取本地IP对象 + InetAddress ia = InetAddress.getLocalHost(); + // 获得网络接口对象(即网卡),并得到mac地址,mac地址存在于一个byte数组中。 + byte[] mac = NetworkInterface.getByInetAddress(ia).getHardwareAddress(); + + // 下面代码是把mac地址拼装成String + StringBuffer sb = new StringBuffer(); + + for (int i = 0; i < mac.length; i++) { + if (i != 0) { + sb.append("-"); + } + // mac[i] & 0xFF 是为了把byte转化为正整数 + String s = Integer.toHexString(mac[i] & 0xFF); + sb.append(s.length() == 1 ? 0 + s : s); + } + + // 把字符串所有小写字母改为大写成为正规的mac地址并返回 + return sb.toString().toUpperCase(); + } + + /** + * 测试用的main方法. + * + * @param argc 运行参数. + * @throws Exception + */ + public static void main(String[] argc) throws Exception { + String os = getOSName(); + System.out.println(os); + if (os.equals("windows 7")) { + String mac = getMACAddress(); + System.out.println(mac); + } else if (os.startsWith("windows")) { + // 本地是windows + String mac = getWindowsMACAddress(); + System.out.println(mac); + } else { + // 本地是非windows系统 一般就是unix + String mac = getUnixMACAddress(); + System.out.println(mac); + } + } +} diff --git a/src/main/java/com/util/UniqId.java b/src/main/java/com/util/UniqId.java new file mode 100644 index 0000000..d1b6bfb --- /dev/null +++ b/src/main/java/com/util/UniqId.java @@ -0,0 +1,240 @@ +/** + * @Copyright com.taiyiche + * @author 刘峻辉 + * @description 用户登录token生成器 + * @date 2016-08-08 + */ +package com.util; + + +import java.io.IOException; +import java.io.UnsupportedEncodingException; +import java.net.InetAddress; +import java.security.MessageDigest; +import java.security.NoSuchAlgorithmException; +import java.security.SecureRandom; +import java.util.HashMap; +import java.util.Map; +import java.util.Random; +import java.util.concurrent.atomic.AtomicLong; +import java.util.concurrent.locks.ReentrantLock; + + +public class UniqId { + private static char[] digits = { '0', '1', '2', '3', '4', '5', '6', '7', + '8', '9', 'a', 'b', 'c', 'd', 'e', 'f' }; + + private static Map rDigits = new HashMap( + 16); + static { + for (int i = 0; i < digits.length; ++i) { + rDigits.put(digits[i], i); + } + } + + private static UniqId me = new UniqId(); + private String hostAddr; + private Random random = new SecureRandom(); + private MessageDigest mHasher; + private UniqTimer timer = new UniqTimer(); + + private ReentrantLock opLock = new ReentrantLock(); + + private UniqId() { + try { + InetAddress addr = InetAddress.getLocalHost(); + + hostAddr = addr.getHostAddress(); + } catch (IOException e) { + hostAddr = String.valueOf(System.currentTimeMillis()); + } + + if (hostAddr == null || hostAddr.length() == 0 + || "127.0.0.1".equals(hostAddr)) { + hostAddr = String.valueOf(System.currentTimeMillis()); + } + + try { + mHasher = MessageDigest.getInstance("MD5"); + } catch (NoSuchAlgorithmException nex) { + mHasher = null; + } + } + + /** + * 获取UniqID实例 + * + * @return UniqId + */ + public static UniqId getInstance() { + return me; + } + + /** + * 获得不会重复的毫秒数 + * + * @return + */ + public long getUniqTime() { + return timer.getCurrentTime(); + } + + /** + * 获得UniqId + * + * @return uniqTime-randomNum-hostAddr-threadId + */ + public String getUniqID() { + StringBuffer sb = new StringBuffer(); + long t = timer.getCurrentTime(); + + sb.append(t); + + sb.append("-"); + + sb.append(random.nextInt(8999) + 1000); + + sb.append("-"); + sb.append(hostAddr); + + sb.append("-"); + sb.append(Thread.currentThread().hashCode()); + + return sb.toString(); + } + + /** + * 获取MD5之后的uniqId string + * + * @return uniqId md5 string + */ + public String getUniqIDHashString() { + return hashString(getUniqID()); + } + + /** + * 获取MD5之后的uniqId + * + * @return byte[16] + */ + public byte[] getUniqIDHash() { + return hash(getUniqID()); + } + + /** + * 对字符串进行md5 + * + * @param str + * @return md5 byte[16] + */ + public byte[] hash(String str) { + opLock.lock(); + try { + byte[] bt = mHasher.digest(str.getBytes("UTF-8")); + if (null == bt || bt.length != 16) { + throw new IllegalArgumentException("md5 need"); + } + return bt; + } catch (UnsupportedEncodingException e) { + throw new RuntimeException("unsupported utf-8 encoding", e); + } finally { + opLock.unlock(); + } + } + + /** + * 对二进制数据进行md5 + * + * @param str + * @return md5 byte[16] + */ + public byte[] hash(byte[] data) { + opLock.lock(); + try { + byte[] bt = mHasher.digest(data); + if (null == bt || bt.length != 16) { + throw new IllegalArgumentException("md5 need"); + } + return bt; + } finally { + opLock.unlock(); + } + } + + /** + * 对字符串进行md5 string + * + * @param str + * @return md5 string + */ + public String hashString(String str) { + byte[] bt = hash(str); + return bytes2string(bt); + } + + /** + * 对字节流进行md5 string + * + * @param str + * @return md5 string + */ + public String hashBytes(byte[] str) { + byte[] bt = hash(str); + return bytes2string(bt); + } + + /** + * 将一个字节数组转化为可见的字符串 + * + * @param bt + * @return + */ + public String bytes2string(byte[] bt) { + int l = bt.length; + + char[] out = new char[l << 1]; + + for (int i = 0, j = 0; i < l; i++) { + out[j++] = digits[(0xF0 & bt[i]) >>> 4]; + out[j++] = digits[0x0F & bt[i]]; + } + + return new String(out); + } + + /** + * 将字符串转换为bytes + * + * @param str + * @return byte[] + */ + public byte[] string2bytes(String str) { + if (null == str) { + throw new NullPointerException("参数不能为空"); + } + if (str.length() != 32) { + throw new IllegalArgumentException("字符串长度必须是32"); + } + byte[] data = new byte[16]; + char[] chs = str.toCharArray(); + for (int i = 0; i < 16; ++i) { + int h = rDigits.get(chs[i * 2]).intValue(); + int l = rDigits.get(chs[i * 2 + 1]).intValue(); + data[i] = (byte) ((h & 0x0F) << 4 | (l & 0x0F)); + } + return data; + } + + /** + * 实现不重复的时间 + * + * @author dogun + */ + private static class UniqTimer { + private AtomicLong lastTime = new AtomicLong(System.currentTimeMillis()); + + public long getCurrentTime() { + return this.lastTime.incrementAndGet(); + } + } +} \ No newline at end of file diff --git a/src/main/java/com/util/UtilTools.java b/src/main/java/com/util/UtilTools.java new file mode 100644 index 0000000..6199f82 --- /dev/null +++ b/src/main/java/com/util/UtilTools.java @@ -0,0 +1,917 @@ +package com.util; + +import java.io.BufferedInputStream; +import java.io.BufferedOutputStream; +import java.io.File; +import java.io.FileInputStream; +import java.io.IOException; +import java.io.InputStream; +import java.io.OutputStream; +import java.net.InetAddress; +import java.net.UnknownHostException; +import java.text.ParseException; +import java.text.ParsePosition; +import java.text.SimpleDateFormat; +import java.util.Calendar; +import java.util.Date; +import java.util.GregorianCalendar; +import java.util.List; +import java.util.regex.Matcher; +import java.util.regex.Pattern; + +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; + +import com.zhongdao.jlr.enums.Week; + +import net.sf.json.JSONArray; +import net.sf.json.JSONObject; + +public class UtilTools { + private static final String regEx_script = "]*?>[\\s\\S]*?<\\/script>"; // 定义script的正则表达式 + private static final String regEx_style = "]*?>[\\s\\S]*?<\\/style>"; // 定义style的正则表达式 + private static final String regEx_html = "<[^>]+>"; // 定义HTML标签的正则表达式 + private static final String bxcompanykey = "2016052210383737344";// 太保上海分公司编号 + private static final String sysrolekey = "20150807152252189885";// 管理员角色编号 + private static final String adminCode = "2015050608332656789";// 超级管理员(admin)主键编号 + + public static String getCode(String codeStr) { + String str = ""; + if (codeStr.equals("bxcompanykey")) { + str = bxcompanykey; + } else if (codeStr.equals("sysrolekey")) { + str = sysrolekey; + } else if (codeStr.equals("adminCode")) { + str = adminCode; + } + return str; + } + + /** + * 获取List长度 + * + * @param List + * @return int + * + */ + public static Integer ListCount(List list) { + Integer count = new Integer(0); + if (list != null && list.size() > 0) { + count = list.size(); + } + return count; + } + + /** + * 得到当前日期 gs(格式):自定义 + */ + public static String getTime(String gs) { + SimpleDateFormat df = new SimpleDateFormat(gs); + String currentdate = df.format(new Date()); + return currentdate; + } + + /** + * 获取具体时间精确到日 + */ + public static String getTimeForD() { + return getTime("yyyy-MM-dd"); + } + + /** + * 获取具体时间精确到日 + */ + public static String getTimeForD(String format) { + return getTime(format); + } + + /** + * 获取具体时间精确到时 + */ + public static String getTimeForH() { + return getTime("yyyy-MM-dd HH"); + } + + /** + * 获取具体时间精确到分 + */ + public static String getTimeForM() { + return getTime("yyyy-MM-dd HH:mm"); + } + + /** + * 获取具体时间精确到秒 + */ + public static String getTimeForS() { + return getTime("yyyy-MM-dd HH:mm:ss"); + } + + /** + * 删除HTML标签 + * + * @param htmlStr + * @return + */ + public static String delHTMLTag(String htmlStr) { + Pattern p_script = Pattern.compile(regEx_script, + Pattern.CASE_INSENSITIVE); + Matcher m_script = p_script.matcher(htmlStr); + htmlStr = m_script.replaceAll(""); // 过滤script标签 + + Pattern p_style = Pattern + .compile(regEx_style, Pattern.CASE_INSENSITIVE); + Matcher m_style = p_style.matcher(htmlStr); + htmlStr = m_style.replaceAll(""); // 过滤style标签 + + Pattern p_html = Pattern.compile(regEx_html, Pattern.CASE_INSENSITIVE); + Matcher m_html = p_html.matcher(htmlStr); + htmlStr = m_html.replaceAll(""); // 过滤html标签 + + htmlStr = htmlStr.replaceAll(" ", " ");// 过滤空格标签 + + return htmlStr.trim(); // 返回文本字符串 + } + + /** + * Date转String gs:时间格式 + */ + public static String dateToString(Date date, String gs) { + String result = ""; + SimpleDateFormat df = new SimpleDateFormat(gs); + result = df.format(date); + return result; + } + + /** + * String转Date sj:时间,默认"yyyy-MM-dd" gs:时间格式 + */ + public static Date stringToDate(String sj, String gs) { + Date date = null; + if (!strNotNull(sj)) { + sj = getTimeForD(); + } + SimpleDateFormat df = new SimpleDateFormat(gs); + try { + date = df.parse(sj); + } catch (ParseException e) { + e.printStackTrace(); + } + return date; + } + + /** + * 判断字符串是否为null或空 + */ + public static boolean strNotNull(String str) { + if (null != str && !"".equals(str.trim())) { + return true; + } else { + return false; + } + } + + public static boolean strNotNullAndNullStr(String str) { + if (null != str && !"".equals(str.trim()) && !"null".equals(str.trim())) { + return true; + } else { + return false; + } + } + + /** + * 自定义添加Day获取新的日期 yyyy-MM-dd + * + * @param args + */ + public static String getNewDateForDay(Integer day) { + SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd"); + String rq = getTimeForD(); + Calendar calendar = Calendar.getInstance(); + try { + calendar.setTime(sdf.parse(rq)); + } catch (ParseException e) { + e.printStackTrace(); + } + calendar.add(Calendar.DAY_OF_MONTH, day); + rq = sdf.format(calendar.getTime()); + return rq; + } + + /** + * list转换为jsonArray + * + * @param list + * @param names + * @return + */ + public static JSONArray listTojsonArray(List list, String[] names) { + JSONArray jarry = new JSONArray(); + if (list != null && list.size() > 0) { + for (int i = 0; i < list.size(); i++) { + Object[] obj = (Object[]) list.get(i); + JSONObject object = new JSONObject(); + for (int j = 0; j < names.length; j++) { + object.put(names[j], + null == obj[j] ? "" : obj[j].toString()); + } + jarry.add(object); + } + } + return jarry; + } + + /** + * list转换为jsonObject + * + * @param list + * @param names + * @return + */ + public static JSONObject listTojsonObject(List list, String[] names) { + JSONObject object= new JSONObject(); + if (list != null && list.size() > 0) { + for (int i = 0; i < list.size(); i++) { + Object[] obj = (Object[]) list.get(i); + object = new JSONObject(); + for (int j = 0; j < names.length; j++) { + object.put(names[j], + null == obj[j] ? "" : obj[j].toString()); + } + } + } + return object; + } + /** + * 返回新的字符串格式 'p1','p2',..... + * + * @param str + * 要转换的字符串 + * @param separator + * 字符串之间的分隔符 ,值为null时,默认为',' + * @return + */ + public static String strToNewStr(String str, String separator) { + String result = ""; + if (null != str && !"".equals(str)) { + if (null == separator) + separator = ","; + String[] nstr = str.split(separator); + for (int i = 0; i < nstr.length; i++) { + if (!"".equals(result)) { + result += ","; + } + result += "'" + nstr[i] + "'"; + } + } + return result; + } + + /** + * 判断字符串是否是数字 true:数字 false:非数字 + */ + public static boolean isNumber(String str) { + if (null != str + && !"".equals(str.trim()) + && str.matches("^[-+]?(([0-9]+)([.]([0-9]+))?|([.]([0-9]+))?)$")) { + return true; + } else { + return false; + } + } + + /** + * 把Vo 封装成jsonObj + * + * @param v + * @param thistablesx + * @return + */ + public static SetJsonObject voToJsonObj(Vo v, String[] thistablesx) { + long startTime=System.currentTimeMillis(); + JSONArray json = new JSONArray(); + SetJsonObject jsonObj = new SetJsonObject(); + try { + for (int i = 0; i < v.getRows().size(); i++) { + Object[] obj = (Object[]) v.getRows().get(i); + JSONObject jobj = new JSONObject(); + for (int j = 0; j < thistablesx.length; j++) { + String strarr = null == obj[j] ? "" : obj[j].toString(); + String str = thistablesx[j]; + jobj.put(str, strarr); + } + json.add(jobj); + } + jsonObj.setRows(json); + jsonObj.setTotal(v.getTotal()); + } catch (Exception e) { + e.printStackTrace(); + } + System.out.println("voToJsonObjTime:"+(System.currentTimeMillis()-startTime)); + return jsonObj; + } + + public static SetJsonObject voToJsonObj(Vo v) { + SetJsonObject jsonObj = new SetJsonObject(); + jsonObj.setRows(v.getRows()); + jsonObj.setTotal(v.getTotal()); + return jsonObj; + } + + /** + * 把List 封装成jsonObj + * + * @param v + * @param thistablesx + * @return + */ + public static SetJsonObject listToJsonObj(List list, String[] thistablesx) { + JSONArray json = new JSONArray(); + SetJsonObject jsonObj = new SetJsonObject(); + try { + for (int i = 0; i < list.size(); i++) { + Object[] obj = (Object[]) list.get(i); + JSONObject jobj = new JSONObject(); + for (int j = 0; j < thistablesx.length; j++) { + String strarr = null == obj[j] ? "" : obj[j].toString(); + String str = thistablesx[j]; + jobj.put(str, strarr); + } + json.add(jobj); + } + jsonObj.setRows(json); + jsonObj.setTotal(list.size()); + } catch (Exception e) { + e.printStackTrace(); + } + return jsonObj; + } + /** + * 把List 封装成jsonObj + * + * @param v + * @param thistablesx + * @return + */ + public static JSONArray listToJsonObj2(List list, String[] thistablesx) { + JSONArray json = new JSONArray(); + try { + for (int i = 0; i < list.size(); i++) { + Object[] obj = (Object[]) list.get(i); + JSONObject jobj = new JSONObject(); + for (int j = 0; j < thistablesx.length; j++) { + String strarr = null == obj[j] ? "" : obj[j].toString(); + String str = thistablesx[j]; + jobj.put(str, strarr); + } + json.add(jobj); + } + } catch (Exception e) { + e.printStackTrace(); + } + return json; + } + /** + * 得到前天 昨天 今天 明天的日期 -1代表前一天 1代表后一天 等等 默认 yyyy-MM-dd + */ + public static String getTcTime(String style, int numb) { + if (!UtilTools.strNotNull(style)) { + style = "yyyy-MM-dd"; + } + Date date = new Date();// 取时间 + Calendar calendar = new GregorianCalendar(); + calendar.setTime(date); + calendar.add(calendar.DATE, numb);// 把日期往后增加一天.整数往后推,负数往前移动 + date = calendar.getTime(); // 这个时间就是日期往后推一天的结果 + SimpleDateFormat formatter = new SimpleDateFormat(style); + String dateString = formatter.format(date); + return dateString; + } + + /** + * 得到上一个月第一天 + */ + public static String getMMTop() { + Calendar c = Calendar.getInstance(); + c.add(Calendar.MONTH, -1); + SimpleDateFormat format = new SimpleDateFormat("yyyy-MM"); + String time = format.format(c.getTime()); + return time + "-01"; + } + + /** + * 得到上一个月最后一天 + */ + public static String getMMNext() { + Calendar c = Calendar.getInstance(); + c.add(Calendar.MONTH, -1); + int MaxDay = c.getActualMaximum(Calendar.DAY_OF_MONTH); + // 按你的要求设置时间 + c.set(c.get(Calendar.YEAR), c.get(Calendar.MONTH), MaxDay, 23, 59, 59); + // 按格式输出 + SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd"); + String gtime = sdf.format(c.getTime()); // 上月最后一天 + return gtime; + } + + /** + * 得到page + * + * @return mysql默认0 oracle默认1 + */ + public static Integer getPage(HttpServletRequest request) { + Integer page = 1; + if (null != request && null != request.getParameter("page") + && isNumber(request.getParameter("page"))) { + return Integer.parseInt(request.getParameter("page")); + } + return page; + } + + /** + * 得到rows + * + * @return 默认10 + */ + public static Integer getRows(HttpServletRequest request) { + Integer rows = 10; + if (null != request && null != request.getParameter("rows") + && isNumber(request.getParameter("rows"))) { + return Integer.parseInt(request.getParameter("rows")); + } + return rows; + } + + /** + * 字符串首字母转换大写 + */ + public static String szmZdx(String result) { + String result1 = ""; + if (null != result && !"".equals(result)) { + result1 = result.substring(0, 1).toUpperCase() + + result.substring(1, result.length()); + } + return result1; + } + + /** + * 获取服务器地址:如:http://192.168.1.100:8080/web + * + * @param request + * @return + */ + public static String getWebAddress(HttpServletRequest request) { + String web1 = request.getServerName(); + // 把localhost替换成本机ip + if (web1.equals("localhost")) { + try { + web1 = InetAddress.getLocalHost().getHostAddress(); + } catch (UnknownHostException e) { + e.printStackTrace(); + } + } + String path = "http://" + web1 + ":" + request.getServerPort() + + request.getContextPath(); + return path; + } + + /** + * 判断手机号码是否正确 + * + * @param mobiles + * @return + */ + public static boolean isMobileNO(String mobiles) { + Pattern p = Pattern + .compile("^(13[0-9]|15[012356789]|17[36780]|18[0-9]|14[57])[0-9]{8}$"); + Matcher m = p.matcher(mobiles); + return m.matches(); + } + + /** + * 获取状态 + */ + public static String getOrderState(Integer state) { + String str = "初始值"; + if (0 == state) { + str = "初始值"; + } else if (5 == state) { + str = "待取车预约"; + } else if (10 == state) { + str = "取车预约失败"; + } else if (15 == state) { + str = "待取车派单"; + } else if (20 == state) { + str = "待取车邀约"; + } else if (30 == state) { + str = "取车邀约失败"; + } else if (31 == state) { + str = "待取车"; + } else if (32 == state) { + str = "取车条件不符"; + } else if (33 == state) { + str = "待送修"; + } else if (34 == state) { + str = "取车失败"; + } else if (343 == state) { + str = "等待定损"; + }else if (345 == state) { + str = "还车预约"; + }else if (347 == state) { + str = "还车派单"; + }else if (35 == state) { + str = "待还车邀约"; + } else if (351 == state) { + str = "邀约失败重新"; + }else if (352 == state) { + str = "邀约失败重新派单"; + }else if (36 == state) { + str = "待维修网点取车"; + }else if (361 == state) { + str = "提车失败"; + } else if (37 == state) { + str = "待还车"; + }else if (371 == state) { + str = "还车失败"; + } else if (40 == state) { + str = "待理赔"; + } else if (100 == state) { + str = "理赔完毕"; + } else if (101 == state) { + str = "强制废除"; + } + return str; + } + + /** + * 获取状态 + */ + public static String getOrderState(String state) { + StringBuffer str = new StringBuffer(); + if ("初始值".contains(state)) { + str.append("0,"); + } else if ("待取车预约".equals(state)) { + str.append("5,"); + } else if ("取车预约失败".equals(state)) { + str.append("10,"); + } else if ("待取车派单".equals(state)) { + str.append("15,"); + } else if ("待取车邀约".equals(state)) { + str.append("20,"); + } else if ("取车邀约成功".equals(state)) { + str.append("25,"); + } else if ("取车邀约失败".equals(state)) { + str.append("30,"); + } else if ("待取车".equals(state)) { + str.append("31,"); + } else if ("待送修".equals(state)) { + str.append("33,"); + } else if ("取车失败".equals(state)) { + str.append("34,"); + } else if ("等待定损".equals(state)) { + str.append("343,"); + } else if ("还车预约".equals(state)) { + str.append("345,"); + } else if ("还车派单".equals(state)) { + str.append("347,"); + } + else if ("待还车邀约".equals(state)) { + str.append("35,"); + } + else if ("邀约失败重新预约".equals(state)) { + str.append("351,"); + } else if ("邀约失败重新派单".equals(state)) { + str.append("352,"); + } + else if ("待维修网点取车".equals(state)) { + str.append("36,"); + } else if ("提车失败".equals(state)) { + str.append("361,"); + } else if ("待还车".equals(state)) { + str.append("37,"); + } else if ("还车失败 ".equals(state)) { + str.append("371,"); + } else if ("还车成功待理赔".equals(state)) { + str.append("40,"); + } else if ("理赔完毕".equals(state)) { + str.append("100,"); + } else if ("强制废除".equals(state)) { + str.append("101,"); + } + return str.toString(); + } + /** + * 获取状态App + */ + public static String getOrderStateApp(String state) { + StringBuffer str = new StringBuffer(); + if ("初始值".contains(state)) { + str.append("0,"); + } else if ("取车预约".equals(state)) { + str.append("5,"); + } else if ("预约失败".equals(state)) { + str.append("10,"); + } else if ("取车派单".equals(state)) { + str.append("15,"); + } else if ("取车邀约".equals(state)) { + str.append("20,"); + } else if ("邀约失败".equals(state)) { + str.append("30,"); + } else if ("取车".equals(state)) { + str.append("31,"); + } else if ("送修".equals(state)) { + str.append("33,"); + } else if ("取车失败".equals(state)) { + str.append("34,"); + } else if ("定损".equals(state)) { + str.append("343,"); + } else if ("还车预约".equals(state)) { + str.append("345,"); + } else if ("还车派单".equals(state)) { + str.append("347,"); + } + else if ("还车邀约".equals(state)) { + str.append("35,"); + } + else if ("重新预约".equals(state)) { + str.append("351,"); + } else if ("重新派单".equals(state)) { + str.append("352,"); + } + else if ("提车".equals(state)) { + str.append("36,"); + } else if ("提车失败".equals(state)) { + str.append("361,"); + } else if ("还车".equals(state)) { + str.append("37,"); + } else if ("还车失败 ".equals(state)) { + str.append("371,"); + } else if ("理赔".equals(state)) { + str.append("40,"); + } else if ("理赔完毕".equals(state)) { + str.append("100,"); + } else if ("强制废除".equals(state)) { + str.append("101,"); + } + return str.toString(); + } + + /** + * 获取状态4SApp + */ + public static String get4SOrderStateApp(String state) { + StringBuffer str = new StringBuffer(); + if ("等待送修".contains(state)) { + str.append("5,"); + } else if ("送修途中".equals(state)) { + str.append("10,"); + } else if ("返修途中".equals(state)) { + str.append("20,"); + } else if ("接车成功".equals(state)) { + str.append("30,"); + } else if ("交车失败".equals(state)) { + str.append("35,"); + } else if ("开始维修".equals(state)) { + str.append("40,"); + } else if ("维修完毕".equals(state)) { + str.append("50,"); + } else if ("等待交车".equals(state)) { + str.append("60,"); + } else if ("交车成功".equals(state)) { + str.append("70,"); + } else if ("接车失败".equals(state)) { + str.append("15,"); + } else if ("结账完毕".equals(state)) { + str.append("100,"); + } else if ("强制撤销".equals(state)) { + str.append("101,"); + } + return str.toString(); + } + + /** + * 获取组号 + */ + public static int getModenoByFiletype(int filetype) { + if (filetype == 6 || filetype == 7 || filetype == 101) { + return 0; + } else if (filetype == 8) { + return 1; + } else if (filetype >= 9 && filetype <= 12) { + return 2; + } else if (filetype == 13) { + return 3; + } else if (filetype >= 14 && filetype <= 17) { + return 4; + } else if (filetype == 18) { + return 5; + } else if (filetype >= 19 && filetype <= 22) { + return 6; + } else if (filetype == 23) { + return 7; + } else if (filetype >= 24 && filetype <= 27) { + return 8; + } else if (filetype == 28) { + return 9; + } else if (filetype >= 29 && filetype <= 30) { + return 10; + } else if (filetype == 31) { + return 11; + } + return -1; + } + + /** + * 客户类型 + */ + public static String getOrderCustomlb(String state) { + if ("A类".equals(state)) { + return "A"; + } else if ("B类".equals(state)) { + return "B"; + } + return ""; + } + + /** + * 下载 + */ + public static boolean downFile(HttpServletResponse response, String path) { + boolean flag = false; + File file = null; + try { + file = new File(path); + } catch (Exception e) { + e.printStackTrace(); + } + + if (null != file) { + if (file.exists()) { + try { + String filename = file.getName(); + // 弹出下载对话框 + response.reset(); + response.setContentType("application/octet-stream"); + filename = new String(filename.getBytes(System + .getProperty("file.encoding")), "ISO-8859-1"); + response.addHeader("Content-Disposition", + "attachment;filename=\"" + filename + "\""); + OutputStream os = os = response.getOutputStream(); + InputStream is = is = new FileInputStream(file); + BufferedInputStream bis = new BufferedInputStream(is); + BufferedOutputStream bos = new BufferedOutputStream(os); + // 用输入流进行先读,然后用输出流去写 + int bytesRead = 0; + byte[] buffer = new byte[8192]; + while ((bytesRead = bis.read(buffer, 0, 8192)) != -1) { + bos.write(buffer, 0, bytesRead); + } + bos.flush(); + bos.close(); + bis.close(); + os.flush(); + os.close(); + is.close(); + flag = true; + } catch (IOException e) { + flag = false; + e.printStackTrace(); + } + } + } + return flag; + } + + public static String parsJsonString(org.json.JSONObject json, String params) { + try { + return json.getString(params); + } catch (Exception e) { + // TODO: handle exception + return null; + } + } + + /** + * 根据一个日期,返回是星期几的字符串 + * + * @param sdate + * @return + */ + // public static String getWeek(String sdate) { + // // 再转换为时间 + // Date date =strToDate(sdate); + // Calendar c = Calendar.getInstance(); + // c.setTime(date); + // // int hour=c.get(Calendar.DAY_OF_WEEK); + // // hour中存的就是星期几了,其范围 1~7 + // // 1=星期日 7=星期六,其他类推 + // return new SimpleDateFormat("EEEE").format(c.getTime()); + // } + public static Week getWeekStr(String sdate) { + int year = Integer.parseInt(sdate.substring(0, 4)); + int month = Integer.parseInt(sdate.substring(5, 7)); + int day = Integer.parseInt(sdate.substring(8, 10)); + + Calendar c = Calendar.getInstance(); + + c.set(Calendar.YEAR, year); + c.set(Calendar.MONTH, month - 1); + c.set(Calendar.DAY_OF_MONTH, day); + + String str = c.get(Calendar.DAY_OF_WEEK) + ""; + + if ("1".equals(str)) { + return Week.SUN; + } else if ("2".equals(str)) { + return Week.MON; + } else if ("3".equals(str)) { + return Week.TUE; + } else if ("4".equals(str)) { + return Week.WEN; + } else if ("5".equals(str)) { + return Week.THU; + } else if ("6".equals(str)) { + return Week.FRI; + } else if ("7".equals(str)) { + return Week.SAT; + } + return null; + } + + /** + * 将短时间格式字符串转换为时间 yyyy-MM-dd + * + * @param strDate + * @return + */ + public static Date strToDate(String strDate) { + SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd"); + ParsePosition pos = new ParsePosition(0); + Date strtodate = formatter.parse(strDate, pos); + return strtodate; + } + + /** + * 字符串的日期格式的计算 + */ + public static int daysBetween(String smdate, String bdate) + throws ParseException { + SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd"); + Calendar cal = Calendar.getInstance(); + cal.setTime(sdf.parse(smdate)); + long time1 = cal.getTimeInMillis(); + cal.setTime(sdf.parse(bdate)); + long time2 = cal.getTimeInMillis(); + long between_days = (time2 - time1) / (1000 * 3600 * 24); + + return Integer.parseInt(String.valueOf(between_days)); + } + /** + * 获得指定日期的前一天 + * + * @param specifiedDay + * @return + * @throws Exception + */ + public static String getSpecifiedDayBefore(String specifiedDay) { + // SimpleDateFormat simpleDateFormat = new + // SimpleDateFormat("yyyy-MM-dd"); + Calendar c = Calendar.getInstance(); + Date date = null; + try { + date = new SimpleDateFormat("yyyy-MM-dd").parse(specifiedDay); + } catch (ParseException e) { + e.printStackTrace(); + } + c.setTime(date); + int day = c.get(Calendar.DATE); + c.set(Calendar.DATE, day - 1); + + String dayBefore = new SimpleDateFormat("yyyy-MM-dd").format(c + .getTime()); + return dayBefore; + } + + /** + * 获得指定日期的后一天 + * + * @param specifiedDay + * @return + */ + public static String getSpecifiedDayAfter(String specifiedDay) { + Calendar c = Calendar.getInstance(); + Date date = null; + try { + date = new SimpleDateFormat("yyyy-MM-dd").parse(specifiedDay); + } catch (ParseException e) { + e.printStackTrace(); + } + c.setTime(date); + int day = c.get(Calendar.DATE); + c.set(Calendar.DATE, day + 1); + + String dayAfter = new SimpleDateFormat("yyyy-MM-dd") + .format(c.getTime()); + return dayAfter; + } + +} diff --git a/src/main/java/com/util/Vo.java b/src/main/java/com/util/Vo.java new file mode 100644 index 0000000..55d1944 --- /dev/null +++ b/src/main/java/com/util/Vo.java @@ -0,0 +1,30 @@ +package com.util; + +import com.dubh.common.dto.BaseDto; + +import java.util.List; + +public class Vo extends BaseDto{ + private List rows; + private Integer total; + public List getRows() { + return rows; + } + public void setRows(List rows) { + this.rows = rows; + } + public Integer getTotal() { + return total; + } + public void setTotal(Integer total) { + this.total = total; + } + + @Override + public String toString() { + return "Vo{" + + "rows=" + rows + + ", total=" + total + + '}'; + } +} diff --git a/src/main/java/com/util/ZipUtil.java b/src/main/java/com/util/ZipUtil.java new file mode 100644 index 0000000..f7dd79f --- /dev/null +++ b/src/main/java/com/util/ZipUtil.java @@ -0,0 +1,518 @@ +package com.util; + +import java.io.BufferedInputStream; +import java.io.BufferedOutputStream; +import java.io.File; +import java.io.FileInputStream; +import java.io.FileNotFoundException; +import java.io.FileOutputStream; +import java.io.IOException; +import java.io.InputStream; +import java.util.ArrayList; +import java.util.List; +import java.util.zip.CRC32; +import java.util.zip.CheckedOutputStream; +import java.util.zip.Deflater; + +import org.apache.tools.zip.ZipEntry; +import org.apache.tools.zip.ZipOutputStream; + +/** + * 功能:使用Apache Ant里提供的org.apache.tools.zip实现zip压缩和解压 (支持中文文件名) + * 解决了由于java.util.zip包不支持汉字的问题。 使用java.util.zip包时,当zip文件中有名字为中文的文件时, + * 就会出现异常:"Exception in thread "main " java.lang.IllegalArgumentException at + * java.util.zip.ZipInputStream.getUTF8String(ZipInputStream.java:285) + * + * @author 夏明龙 E-mail:邮箱 + * @version 创建时间:2013-3-22 上午10:40:21 类说明: + */ +public class ZipUtil { + private static List list = new ArrayList(); + + private static List listFile(String path) { + File file = new File(path); + String[] array = null; + String sTemp = ""; + + if (!file.isDirectory()) { + return null; + } + array = file.list(); + if (array.length > 0) { + for (int i = 0; i < array.length; i++) { + sTemp = path + array[i]; + file = new File(sTemp); + if (file.isDirectory()) { + listFile(sTemp + "/"); + } else + list.add(sTemp); + } + } else { + return null; + } + + return list; + } + + public static void zip(String needtozipfilepath) { + try { + byte[] b = new byte[512]; + + File needtozipfile = new File(needtozipfilepath); + + if (!needtozipfile.exists()) { + System.err.println("指定的要压缩的文件或目录不存在."); + return; + } + + String zipFile = needtozipfilepath + ".zip"; + System.out.println("zipFile:" + zipFile); + // File targetFile = new File(zipFile.substring(0, + // zipFile.indexOf("\\") + 1)); + // + // if (!targetFile.exists()) { + // System.out.println("指定的目标文件或目录不存在."); + // return; + // } + + String filepath = needtozipfilepath; + List fileList = listFile(filepath + "/"); + FileOutputStream fileOutputStream = new FileOutputStream(zipFile); + CheckedOutputStream cs = new CheckedOutputStream(fileOutputStream, + new CRC32()); + ZipOutputStream out = new ZipOutputStream(new BufferedOutputStream( + cs)); + + for (int i = 0; i < fileList.size(); i++) { + InputStream in = new FileInputStream((String) fileList.get(i)); + String fileName = ((String) fileList.get(i)).replace( + File.separatorChar, '/'); + fileName = fileName.substring(fileName.indexOf("/") + 1); + ZipEntry e = new ZipEntry(fileName); + out.putNextEntry(e); + int len = 0; + while ((len = in.read(b)) != -1) { + out.write(b, 0, len); + } + out.closeEntry(); + } + out.close(); + } catch (Exception e) { + e.printStackTrace(); + } + } + + // /////////////////////////////////////// + /** + * 压缩文件 或者 文件夹 + * + * @param baseDirName + * 压缩的根目录 + * @param fileName + * 根目录下待压缩的文件或文件夹名 + * @param targetFileName + * 目标ZIP 文件 星号 "*" 表示压缩根目录下的全部文件 + * + */ + public static boolean zip(String baseDirName, String[] fileNames, + String targetFileName, String encoding) { + boolean flag = false; + try { + // 判断 "压缩的根目录"是否存在! 是否是一个文件夹! + File baseDir = new File(baseDirName); + if (!baseDir.exists() || (!baseDir.isDirectory())) { + System.err.println("压缩失败! 根目录不存在: " + baseDirName); + return false; + } + + // 得到这个 "压缩的根目录" 的绝对路径 + String baseDirPath = baseDir.getAbsolutePath(); + + // 由这个 "目标 ZIP 文件" 文件名得到一个 压缩对象 ZipOutputStream + File targetFile = new File(targetFileName); + ZipOutputStream out = new ZipOutputStream(new FileOutputStream( + targetFile)); + // 中文有乱码,引进下面的改造类 + // CnZipOutputStream out = new CnZipOutputStream(new + // FileOutputStream(targetFile),encoding); + + // 设置压缩编码Apache Ant有个包专门处理ZIP文件,可以指定文件名的编码方式。由此可以解决问题。例如:用 + // org.apache.tools.zip.ZipOutputStream代替java.util.zip.ZipOutputStream。ZipOutputStream + // out = .....; out.setEncoding("GBK"); + // out.setEncoding("GBK");//设置为GBK后在windows下就不会乱码了,如果要放到Linux或者Unix下就不要设置了 + out.setEncoding(encoding); + + // "*" 表示压缩包括根目录 baseDirName 在内的全部文件 到 targetFileName文件下 + if (fileNames.equals("*")) { + ZipUtil.dirToZip(baseDirPath, baseDir, out); + } else { + File[] files = new File[fileNames.length]; + for (int i = 0; i < files.length; i++) { + // 根据 parent 抽象路径名和 child 路径名字符串创建一个新 File 实例。 + files[i] = new File(baseDir, fileNames[i]); + } + if (files[0].isFile()) { + // 调用本类的一个静态方法 压缩一个文件 + // CompressUtil.fileToZip(baseDirPath, file, out); + ZipUtil.filesToZip(baseDirPath, files, out); + } + + } + out.close(); + // System.out.println("压缩成功! 目标文件名为: " + targetFileName); + flag = true; + } catch (FileNotFoundException e) { + e.printStackTrace(); + } catch (IOException e) { + e.printStackTrace(); + } + return flag; + } + + /** + * 将文件压缩到Zip 输出流 + * + * @param baseDirPath + * 根目录路径 + * @param file + * 要压缩的文件 + * @param out + * 输出流 + * @throws IOException + */ + private static void fileToZip(String baseDirPath, File file, + ZipOutputStream out) throws IOException { + // + FileInputStream in = null; + org.apache.tools.zip.ZipEntry entry = null; + // 创建复制缓冲区 1024*4 = 4K + byte[] buffer = new byte[1024 * 4]; + int bytes_read = 0; + if (file.isFile()) { + in = new FileInputStream(file); + // 根据 parent 路径名字符串和 child 路径名字符串创建一个新 File 实例 + String zipFileName = getEntryName(baseDirPath, file); + entry = new org.apache.tools.zip.ZipEntry(zipFileName); + // "压缩文件" 对象加入 "要压缩的文件" 对象 + out.putNextEntry(entry); + // 现在是把 "要压缩的文件" 对象中的内容写入到 "压缩文件" 对象 + while ((bytes_read = in.read(buffer)) != -1) { + out.write(buffer, 0, bytes_read); + } + out.closeEntry(); + in.close(); + // System.out.println("添加文件" + file.getAbsolutePath()+ "被添加到 ZIP + // 文件中!"); + } + } + + /** + * 多个文件目录压缩到Zip 输出流 + * + * @param baseDirPath + * @param files + * @param out + * @throws IOException + */ + @SuppressWarnings("unused") + private static void filesToZip(String baseDirPath, File[] files, + ZipOutputStream out) throws IOException { + // 遍历所有的文件 一个一个地压缩 + for (int i = 0; i < files.length; i++) { + File file = files[i]; + if (file.isFile()) { + // 调用本类的一个静态方法 压缩一个文件 + ZipUtil.fileToZip(baseDirPath, file, out); + } else { + /* + * 这是一个文件夹 所以要再次得到它下面的所有的文件 这里是自己调用自己..............递归.......... + */ + ZipUtil.dirToZip(baseDirPath, file, out); + } + } + } + + /** + * 将文件目录压缩到Zip 输出流 + * + * @param baseDirPath + * @param dir + * @param out + * @throws IOException + */ + private static void dirToZip(String baseDirPath, File dir, + ZipOutputStream out) throws IOException { + // 得到一个文件列表 (本目录下的所有文件对象集合) + File[] files = dir.listFiles(); + // 要是这个文件集合数组的长度为 0 , 也就证明了这是一个空的文件夹,虽然没有再循环遍历它的必要,但是也要把这个空文件夹也压缩到目标文件中去 + if (files.length == 0) { + // 根据 parent 路径名字符串和 child 路径名字符串创建一个新 File 实例 + String zipFileName = getEntryName(baseDirPath, dir); + org.apache.tools.zip.ZipEntry entry = new org.apache.tools.zip.ZipEntry( + zipFileName); + out.putNextEntry(entry); + out.closeEntry(); + } else { + // 遍历所有的文件 一个一个地压缩 + for (int i = 0; i < files.length; i++) { + File file = files[i]; + if (file.isFile()) { + // 调用本类的一个静态方法 压缩一个文件 + ZipUtil.fileToZip(baseDirPath, file, out); + } else { + /* + * 这是一个文件夹 所以要再次得到它下面的所有的文件 + * 这里是自己调用自己..............递归.......... + */ + ZipUtil.dirToZip(baseDirPath, file, out); + } + } + } + } + + /** + * 获取 待压缩文件在 ZIP 文件中的 entry的名字,即相对于根目录的相对路径名 + * + * @param baseDirPath + * 根目录 + * @param file + * @return + */ + private static String getEntryName(String baseDirPath, File file) { + /** + * 改变 baseDirPath 的形式 把 "C:/temp" 变成 "C:/temp/" + */ + if (!baseDirPath.endsWith(File.separator)) { + baseDirPath += File.separator; + } + String filePath = file.getAbsolutePath(); + /** + * 测试此抽象路径名表示的文件是否是一个目录。 要是这个文件对象是一个目录 则也要变成 后面带 "/" 这个文件对象类似于 + * "C:/temp/人体写真/1.jpg" 要是这个文件是一个文件夹 则也要变成 后面带 "/" + * 因为你要是不这样做,它也会被压缩到目标文件中 但是却不能正解显示 也就是说操作系统不能正确识别它的文件类型(是文件还是文件夹) + */ + if (file.isDirectory()) { + filePath += "/"; + } + int index = filePath.indexOf(baseDirPath); + return filePath.substring(index + baseDirPath.length()); + } + + // //////////////////////////解压缩//////////////////////////////////////// + /** + * 调用org.apache.tools.zip实现解压缩,支持目录嵌套和中文名 + * 也可以使用java.util.zip不过如果是中文的话,解压缩的时候文件名字会是乱码 + * 。原因是解压缩软件的编码格式跟java.util.zip.ZipInputStream的编码字符集(固定是UTF-8)不同 + * + * @param zipFileName + * 要解压缩的文件 + * @param outputDirectory + * 要解压到的目录 + * @throws Exception + */ + public static boolean unZip(String zipFileName, String outputDirectory) { + boolean flag = false; + try { + org.apache.tools.zip.ZipFile zipFile = new org.apache.tools.zip.ZipFile( + zipFileName); + java.util.Enumeration e = zipFile.getEntries(); + org.apache.tools.zip.ZipEntry zipEntry = null; + createDirectory(outputDirectory, ""); + while (e.hasMoreElements()) { + zipEntry = (org.apache.tools.zip.ZipEntry) e.nextElement(); + // System.out.println("unziping " + zipEntry.getName()); + if (zipEntry.isDirectory()) { + String name = zipEntry.getName(); + name = name.substring(0, name.length() - 1); + File f = new File(outputDirectory + File.separator + name); + f.mkdir(); + System.out.println("创建目录:" + outputDirectory + + File.separator + name); + } else { + String fileName = zipEntry.getName(); + fileName = fileName.replace('\\', '/'); + // System.out.println("测试文件1:" +fileName); + if (fileName.indexOf("/") != -1) { + createDirectory(outputDirectory, fileName.substring(0, + fileName.lastIndexOf("/"))); + fileName = fileName.substring( + fileName.lastIndexOf("/") + 1, + fileName.length()); + } + + File f = new File(outputDirectory + File.separator + + zipEntry.getName()); + + f.createNewFile(); + InputStream in = zipFile.getInputStream(zipEntry); + FileOutputStream out = new FileOutputStream(f); + + byte[] by = new byte[1024]; + int c; + while ((c = in.read(by)) != -1) { + out.write(by, 0, c); + } + out.close(); + in.close(); + } + flag = true; + } + } catch (Exception ex) { + ex.printStackTrace(); + } + return flag; + } + + /** + * 创建目录 + * + * @param directory + * 父目录 + * @param subDirectory + * 子目录 + */ + private static void createDirectory(String directory, String subDirectory) { + String dir[]; + File fl = new File(directory); + try { + if (subDirectory == "" && fl.exists() != true) + fl.mkdir(); + else if (subDirectory != "") { + dir = subDirectory.replace('\\', '/').split("/"); + for (int i = 0; i < dir.length; i++) { + File subFile = new File(directory + File.separator + dir[i]); + if (subFile.exists() == false) + subFile.mkdir(); + directory += File.separator + dir[i]; + } + } + } catch (Exception ex) { + System.out.println(ex.getMessage()); + } + } + + public static void zip(File inputFile) { + try { + //创建文件输出对象out,提示:注意中文支持 + FileOutputStream out = new FileOutputStream(inputFile.getAbsolutePath()+".zip"); + //將文件輸出ZIP输出流接起来 + ZipOutputStream zOut = new ZipOutputStream(out); + + zip(zOut, inputFile, ""); + + zOut.close(); + + } catch (Exception e) { + e.printStackTrace(); + } + } + public static void zip(ZipOutputStream zOut, File file, String base) { + try { + // 如果文件句柄是目录 + if (file.isDirectory()) { + // 获取目录下的文件 + File[] listFiles = file.listFiles(); + // 建立ZIP条目 + zOut.putNextEntry(new ZipEntry(base + "/")); + + base = (base.length() == 0 ? "" : base + "/"); + + // 遍历目录下文件 + for (int i = 0; i < listFiles.length; i++) { + // 递归进入本方法 + zip(zOut, listFiles[i], base + listFiles[i].getName()); + } + } + // 如果文件句柄是文件 + else { + if (base == "") { + base = file.getName(); + } + // 填入文件句柄 + zOut.putNextEntry(new ZipEntry(base)); + + // 开始压缩 + // 从文件入流读,写入ZIP 出流 + writeFile(zOut, file); + } + + } catch (Exception e) { + e.printStackTrace(); + } + } + + public static void writeFile(ZipOutputStream zOut, File file) + throws IOException { + FileInputStream in = new FileInputStream(file); + int len; + while ((len = in.read()) != -1) + zOut.write(len); + in.close(); + } + + // ///////////////////////////////////// + + public static void main(String[] temp) { + // 压缩 + // String baseDirName = "C:\\"; + // String[] fileNames = { "中文1.doc", "中文2.doc" }; + // String zipFileName = "c:\\中文.zip"; + // // 压缩多个指定的文件 到ZIP + // System.out.println(ZipUtil.zip(baseDirName, + // fileNames,zipFileName,"GBK")); + + // 压缩一个文件夹 到ZIP + String sourcePath = "G:\\tomcat\\apache-tomcat-7.0.70\\apache-tomcat-7.0.70\\webapps\\mgmt\\attached\\downlaodcache\\2015050608332656789\\2017010516350645638"; + ZipUtil.zip(new File(sourcePath)); + + // 解压缩 + // System.out.println(ZipUtil.unZip("c:\\中文.zip", "c:\\中文")); + } + //删除指定文件夹下所有文件 + //param path 文件夹完整绝对路径 + public static boolean delAllFile(String path) { + boolean flag = false; + File file = new File(path); + if (!file.exists()) { + return flag; + } + if (!file.isDirectory()) { + return flag; + } + String[] tempList = file.list(); + File temp = null; + for (int i = 0; i < tempList.length; i++) { + if (path.endsWith(File.separator)) { + temp = new File(path + tempList[i]); + } else { + temp = new File(path + File.separator + tempList[i]); + } + if (temp.isFile()) { + temp.delete(); + } + if (temp.isDirectory()) { + delAllFile(path + "/" + tempList[i]);//先删除文件夹里面的文件 + delFolder(path + "/" + tempList[i]);//再删除空文件夹 + flag = true; + } + } + return flag; + } +//删除文件夹 +//param folderPath 文件夹完整绝对路径 + + public static void delFolder(String folderPath) { + try { + delAllFile(folderPath); //删除完里面所有内容 + String filePath = folderPath; + filePath = filePath.toString(); + java.io.File myFilePath = new java.io.File(filePath); + myFilePath.delete(); //删除空文件夹 + } catch (Exception e) { + e.printStackTrace(); + } +} + + + +} \ No newline at end of file diff --git a/src/main/java/com/util/yzcode/BuilderCode.java b/src/main/java/com/util/yzcode/BuilderCode.java new file mode 100644 index 0000000..5a54ad8 --- /dev/null +++ b/src/main/java/com/util/yzcode/BuilderCode.java @@ -0,0 +1,146 @@ +package com.util.yzcode; + +import javax.servlet.http.HttpServlet; +import java.awt.Color; +import java.awt.Font; +import java.awt.Graphics2D; +import java.awt.image.BufferedImage; +import java.util.Random; + +import javax.imageio.ImageIO; +import javax.servlet.ServletException; +import javax.servlet.ServletOutputStream; +import javax.servlet.http.HttpServlet; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; +import javax.servlet.http.HttpSession; +public class BuilderCode extends HttpServlet { + + + + + /** + * 生成图片验证码 + * + * @author dubaohui + * @date 2009-6-5 + */ + + // 验证码图片的宽度。 + private int width = 60; + // 验证码图片的高度。 + private int height = 32; + // 验证码字符个数 + private int codeCount = 4; + private int x = 0; + // 字体高度 + private int fontHeight; + private int codeY; + + char[] codeSequence = {'0', '1', '2', '3', '4', '5', '6', '7', '8', '9' }; + + /** + * 初始化验证图片属性 + */ + public void init() throws ServletException { + // 从web.xml中获取初始信息 + // 宽度 + String strWidth = this.getInitParameter("width"); + // 高度 + String strHeight = this.getInitParameter("height"); + // 字符个数 + String strCodeCount = this.getInitParameter("codeCount"); + + // 将配置的信息转换成数值 + try { + if (strWidth != null && strWidth.length() != 0) { + width = Integer.parseInt(strWidth); + } + if (strHeight != null && strHeight.length() != 0) { + height = Integer.parseInt(strHeight); + } + if (strCodeCount != null && strCodeCount.length() != 0) { + codeCount = Integer.parseInt(strCodeCount); + } + } catch (NumberFormatException e) { + } + + x = width / (codeCount + 1); + fontHeight = height - 2; + codeY = height - 4; + + } + + protected void service(HttpServletRequest req, HttpServletResponse resp) + throws ServletException, java.io.IOException { + + HttpSession session = req.getSession(); + + // 定义图像buffer + BufferedImage buffImg = new BufferedImage(width, height, + BufferedImage.TYPE_INT_RGB); + Graphics2D g = buffImg.createGraphics(); + + // 创建一个随机数生成器类 + Random random = new Random(); + + // 将图像填充为白色 + g.setColor(Color.WHITE); + g.fillRect(0, 0, width, height); + + // 创建字体,字体的大小应该根据图片的高度来定。 + Font font = new Font("Fixedsys", Font.PLAIN, fontHeight); + // 设置字体。 + g.setFont(font); + + // 画边框。 + g.setColor(Color.WHITE); + g.drawRect(0, 0, width - 1, height - 1); + + // 随机产生20条干扰线,使图象中的认证码不易被其它程序探测到。 + g.setColor(Color.BLACK); + /*for (int i = 0; i < 20; i++) { + int x = random.nextInt(width); + int y = random.nextInt(height); + int xl = random.nextInt(12); + int yl = random.nextInt(12); + g.drawLine(x, y, x + xl, y + yl); + }*/ + + // randomCode用于保存随机产生的验证码,以便用户登录后进行验证。 + StringBuffer randomCode = new StringBuffer(); + int red = 0, green = 0, blue = 0; + + // 随机产生codeCount数字的验证码。 + for (int i = 0; i < codeCount; i++) { + // 得到随机产生的验证码数字。 + String strRand = String.valueOf(codeSequence[random.nextInt(10)]); + // 产生随机的颜色分量来构造颜色值,这样输出的每位数字的颜色值都将不同。 + red = random.nextInt(255); + green = random.nextInt(255); + blue = random.nextInt(255); + + // 用随机产生的颜色将验证码绘制到图像中。 + g.setColor(new Color(red, green, blue)); + g.drawString(strRand, (i + 1) * x-2, codeY+2); + // 将产生的四个随机数组合在一起。 + randomCode.append(strRand); + } + // 将四位数字的验证码保存到Session中。 + session.setAttribute("validateCodeRecruitstu", randomCode.toString()); + // 禁止图像缓存。 + resp.setHeader("Pragma", "no-cache"); + resp.setHeader("Cache-Control", "no-cache"); + resp.setDateHeader("Expires", 0); + resp.setContentType("image/jpeg"); + //清空缓存 + g.dispose(); + // 将图像输出到Servlet输出流中。 + ServletOutputStream sos = resp.getOutputStream(); + ImageIO.write(buffImg, "jpeg", sos); + sos.close(); + } + + + +} diff --git a/src/main/java/com/zhongdao/jlr/BaiduTest.java b/src/main/java/com/zhongdao/jlr/BaiduTest.java new file mode 100644 index 0000000..23ea900 --- /dev/null +++ b/src/main/java/com/zhongdao/jlr/BaiduTest.java @@ -0,0 +1,78 @@ +package com.zhongdao.jlr; + +import com.util.NetUtil; + +import java.io.UnsupportedEncodingException; +import java.net.URLEncoder; +import java.security.NoSuchAlgorithmException; +import java.util.LinkedHashMap; +import java.util.Map; +import java.util.Map.Entry; + +//java版计算signature签名 +public class BaiduTest { + public static void main(String[] args) throws UnsupportedEncodingException, + NoSuchAlgorithmException { + BaiduTest snCal = new BaiduTest(); + + // 计算sn跟参数对出现顺序有关,get请求请使用LinkedHashMap保存,该方法根据key的插入顺序排序;post请使用TreeMap保存,该方法会自动将key按照字母a-z顺序排序。所以get请求可自定义参数顺序(sn参数必须在最后)发送请求,但是post请求必须按照字母a-z顺序填充body(sn参数必须在最后)。以get请求为例:http://api.map.baidu.com/geocoder/v2/?address=百度大厦&output=json&ak=yourak,paramsMap中先放入address,再放output,然后放ak,放入顺序必须跟get请求中对应参数的出现顺序保持一致。 + Map paramsMap = new LinkedHashMap(); + paramsMap.put("address", "上海市张江路1196号"); + paramsMap.put("output", "json"); + paramsMap.put("ak", "F5lGYj8lbIGcZUSym6jIQNnN0ms9sabM"); + + // 调用下面的toQueryString方法,对LinkedHashMap内所有value作utf8编码,拼接返回结果address=%E7%99%BE%E5%BA%A6%E5%A4%A7%E5%8E%A6&output=json&ak=yourak + String paramsStr = snCal.toQueryString(paramsMap); + + // 对paramsStr前面拼接上/geocoder/v2/?,后面直接拼接yoursk得到/geocoder/v2/?address=%E7%99%BE%E5%BA%A6%E5%A4%A7%E5%8E%A6&output=json&ak=yourakyoursk + String wholeStr = new String("/geocoder/v2/?" + paramsStr + "4VbjBrpfEfKeFPGc8PfGRIjRmRX8MwWy"); + + // 对上面wholeStr再作utf8编码 + String tempStr = URLEncoder.encode(wholeStr, "UTF-8"); + + // 调用下面的MD5方法得到最后的sn签名7de5a22212ffaa9e326444c75a58f9a0 + String sn=snCal.MD5(tempStr); + System.out.println(sn); + System.out.println(NetUtil.sendPost("http://api.map.baidu.com/geocoder/v2/?address=上海市张江路1196号&output=json&ak=F5lGYj8lbIGcZUSym6jIQNnN0ms9sabM&sn="+sn, "")); + } + + // 对Map内所有value作utf8编码,拼接返回结果 + public String toQueryString(Map data) + throws UnsupportedEncodingException { StringBuffer queryString = new StringBuffer(); + for (Entry pair : data.entrySet()) { + queryString.append(pair.getKey() + "="); + String ss[] = pair.getValue().toString().split(","); + if(ss.length>1){ + for(String s:ss){ + queryString.append(URLEncoder.encode(s,"UTF-8") + ","); + } + queryString.deleteCharAt(queryString.length()-1); + queryString.append("&"); + } + else{ + queryString.append(URLEncoder.encode((String) pair.getValue(), + "UTF-8") + "&"); + } + } + if (queryString.length() > 0) { + queryString.deleteCharAt(queryString.length() - 1); + } + return queryString.toString();} + + // 来自stackoverflow的MD5计算方法,调用了MessageDigest库函数,并把byte数组结果转换成16进制 + public String MD5(String md5) { + try { + java.security.MessageDigest md = java.security.MessageDigest + .getInstance("MD5"); + byte[] array = md.digest(md5.getBytes()); + StringBuffer sb = new StringBuffer(); + for (int i = 0; i < array.length; ++i) { + sb.append(Integer.toHexString((array[i] & 0xFF) | 0x100) + .substring(1, 3)); + } + return sb.toString(); + } catch (java.security.NoSuchAlgorithmException e) { + } + return null; + } +} \ No newline at end of file diff --git a/src/main/java/com/zhongdao/jlr/Test.java b/src/main/java/com/zhongdao/jlr/Test.java new file mode 100644 index 0000000..3a7ffb2 --- /dev/null +++ b/src/main/java/com/zhongdao/jlr/Test.java @@ -0,0 +1,55 @@ +package com.zhongdao.jlr; + +import java.math.BigDecimal; +import java.text.DecimalFormat; +import java.text.NumberFormat; + +public class Test { +// public static void main(String[] args) { +// Week week=Week.valueOf("SUN1"); +// switch (week) { +// case SUN: +// System.out.println("星期天"); +// break; +// case MON: +// System.out.println("星期1"); +// break; +// default: +// System.out.println("不是星期内"); +// break; +// } +// } + + double f = 111231; + public void m1() { + BigDecimal bg = new BigDecimal(f); + double f1 = bg.setScale(2, BigDecimal.ROUND_HALF_UP).doubleValue(); + System.out.println(f1); + } + /** + * DecimalFormat转换最简便 + */ + public void m2() { + DecimalFormat df = new DecimalFormat("#.00"); + System.out.println(df.format(f)); + } + /** + * String.format打印最简便 + */ + public void m3() { + System.out.println(String.format("%.2f", f)); + } + public void m4() { + NumberFormat nf = NumberFormat.getNumberInstance(); + nf.setMaximumFractionDigits(2); + System.out.println(nf.format(f)); + } + public static void main(String[] args) { +// Test f = new Test(); +// f.m1(); +// f.m2(); +// f.m3(); +// f.m4(); + System.out.println(System.currentTimeMillis()+""); + } +} diff --git a/src/main/java/com/zhongdao/jlr/business/action/BaseAction.java b/src/main/java/com/zhongdao/jlr/business/action/BaseAction.java new file mode 100644 index 0000000..784fb9a --- /dev/null +++ b/src/main/java/com/zhongdao/jlr/business/action/BaseAction.java @@ -0,0 +1,106 @@ +package com.zhongdao.jlr.business.action; + + +import com.util.RequestUtil; +import com.zhongdao.jlr.business.service.BaseService; +import com.zhongdao.jlr.pojo.BaseMenu; +import org.apache.http.util.TextUtils; +import org.springframework.stereotype.Controller; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RequestMethod; + +import javax.annotation.Resource; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +/*** + * 用户登录控制器 + */ + +@Controller +@RequestMapping("/base") +public class BaseAction { + + @Resource(name = "baseServiceImpl") + BaseService baseService; + + /*** + * 用户登录 + * @param request + * @param response + */ + @RequestMapping(value = "/login.do", produces = "text/html;chrset=UTF-8", method = {RequestMethod.GET, + RequestMethod.POST}) + public void login(HttpServletRequest request, HttpServletResponse response) { + //获取参数 + String username = request.getParameter("username"); + String password = request.getParameter("password"); + Map result = new HashMap(); + result.put("flag", "0"); + result.put("msg", "执行失败"); + if (TextUtils.isEmpty(username) || TextUtils.isEmpty(password)) { + result.put("msg", "必填参数不能为空"); + RequestUtil.responseResult4Json(response, RequestUtil.ObjecttoJsonString(result)); + return; + } + Map map = baseService.login(request, result, username, password); + RequestUtil.responseResult4Json(response, RequestUtil.ObjecttoJsonString(map)); + } + + /*** + * 展示权限列表 + * @param request + * @param response + * @return + */ + @RequestMapping(value = "/home.do", produces = "text/html;chrset=UTF-8", method = {RequestMethod.GET, + RequestMethod.POST}) + public String home(HttpServletRequest request, HttpServletResponse response) { + //获取菜单信息 + List list=baseService.getMenuInfo(); + //获取父级菜单信息 + List lists=baseService.getParentMenuInfo(); + //共享数据 + request.setAttribute("firstPage", 1); + request.getSession().setAttribute("menu", list); + request.getSession().setAttribute("parentMenu", lists); + return "/page/home"; + } + + /*** + * 用户注销 + * @param request + * @param response + * @return + */ + @RequestMapping(value = "/loginout.do", produces = "text/html;chrset=UTF-8", method = {RequestMethod.GET, + RequestMethod.POST}) + public String loginout(HttpServletRequest request, HttpServletResponse response) { + request.getSession().invalidate(); + return "/login"; + } + + /** + * 地图定位 + * @param request + * @param response + * @return + */ + @RequestMapping(value = "/amap.do", produces = "text/html;chrset=UTF-8", method = {RequestMethod.GET, + RequestMethod.POST}) + public String amap(HttpServletRequest request, HttpServletResponse response) { + //获取参数 + String lngStr = request.getParameter("lngStr"); + //将参数类型转换为double类型 + Double lng = Double.valueOf(TextUtils.isBlank(lngStr) ? 0 : Double.valueOf(lngStr)); + String StrLat = request.getParameter("lat"); + Double lat = Double.valueOf(TextUtils.isBlank(StrLat) ? 0 : Double.valueOf(StrLat)); + //共享数据 + request.setAttribute("lng", lng); + request.setAttribute("lat", lat); + return "/page/amap/amap"; + } +} diff --git a/src/main/java/com/zhongdao/jlr/business/action/CasesAction.java b/src/main/java/com/zhongdao/jlr/business/action/CasesAction.java new file mode 100644 index 0000000..fcfbb84 --- /dev/null +++ b/src/main/java/com/zhongdao/jlr/business/action/CasesAction.java @@ -0,0 +1,176 @@ +package com.zhongdao.jlr.business.action; +import com.util.RequestUtil; +import com.util.Vo; +import com.zhongdao.jlr.business.service.CasesListService; +import com.zhongdao.jlr.business.vo.LoginUserVo; +import net.sf.json.JSON; +import net.sf.json.JSONArray; +import org.json.JSONObject; +import org.springframework.stereotype.Controller; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RequestMethod; + +import javax.annotation.Resource; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; + + + +/** + * 道路救援控制器 + */ +@Controller +@RequestMapping("/casesInfo") +public class CasesAction { + + private final static String timeFormat = "yyyy/MM/dd"; + + @Resource(name = "casesListServiceImpl") + CasesListService casesListService; + + /* + * 跳转救援工单页面 + * */ + @RequestMapping(value = "/case.do", produces = "text/html;chrset=UTF-8", method = {RequestMethod.GET, + RequestMethod.POST}) + public String JumpTocaseInfo(HttpServletRequest request, HttpServletResponse response) { + //获取参数 + String state = request.getParameter("state"); + //共享数据 + request.setAttribute("state", state); + if("0".equals(state)){ + return "/page/caseInfo"; + }else { + return "/page/sue"; + } + } + + /* + * 跳转进店工单页面 + * */ + @RequestMapping(value = "/caseEnter.do", produces = "text/html;chrset=UTF-8", method = {RequestMethod.GET, + RequestMethod.POST}) + public String caseEnter(HttpServletRequest request, HttpServletResponse response) { + //获取登录信息 + LoginUserVo loginInfo=(LoginUserVo)request.getSession().getAttribute("logininfo"); + //获取参数 + String state = request.getParameter("state"); + //共享数据 + request.setAttribute("state", state); + return "/page/caseInfoEnter"; + } + + /* + * 获取道路救援案件信息 + * */ + @RequestMapping(value = "/caseFirstQuery.do", produces = "text/html;chrset=UTF-8", method = {RequestMethod.GET, + RequestMethod.POST}) + public void caseInfoList(HttpServletRequest request, HttpServletResponse response) { + //获取参数 + String caseCode = request.getParameter("caseCode");// 案件编号 + String frame_code = request.getParameter("frame_code");// VIN码 + String rescueState = request.getParameter("rescueState");// 服务状态 + String createTime = request.getParameter("createTime");//开始时间 + String finishTime = request.getParameter("finishTime");//结束时间 + String companyName = request.getParameter("companyName");//服务商代码 + String state = request.getParameter("state");//服务商代码 + String plateNumber = request.getParameter("plateNumber");//服务商代码 + //获取救援信息 + Vo vo = casesListService.casesListService(state,request,caseCode, + frame_code, rescueState,createTime, finishTime, companyName,plateNumber); + //将救援信息响应到客户端 + RequestUtil.responseResult4Json(response, RequestUtil.ObjecttoJsonString(vo)); + } + + /* + * 获取进店救援案件信息 + * */ + @RequestMapping(value = "/caseEnterQuery.do", produces = "text/html;chrset=UTF-8", method = {RequestMethod.GET, + RequestMethod.POST}) + public void caseEnterQuery(HttpServletRequest request, HttpServletResponse response) { + //获取参数 + String caseCode = request.getParameter("caseCode");// 案件编号 + String frame_code = request.getParameter("frame_code");// VIN码 + String createTime = request.getParameter("createTime");//开始时间 + String finishTime = request.getParameter("finishTime");//结束时间 + String state = request.getParameter("state");//结束时间 + //获取进店救援案件信息 + Vo vo = casesListService.caseEnterQuery(state,request,caseCode, + frame_code,createTime, finishTime); + //将救援信息响应到客户端 + RequestUtil.responseResult4Json(response, RequestUtil.ObjecttoJsonString(vo)); + } + + /* + * 救援案件详情信息 + * */ + @RequestMapping(value = "/caseEnterInfo.do", produces = "text/html;chrset=UTF-8", method = {RequestMethod.GET, + RequestMethod.POST}) + public String caseEnterInfo(HttpServletRequest request, HttpServletResponse response) { + //获取参数 + String caseCode = request.getParameter("code");// 案件编号 + String tid = request.getParameter("tid");//任务编号 + String state = request.getParameter("state");//任务编号 + //获取进店救援案件详情信息 + Vo vo = casesListService.caseEnterInfo(request,caseCode,tid); + //共享数据 + request.setAttribute("info",vo); + request.setAttribute("state",state); + //跳转页面 + return "/page/caseDetail"; + } + + /* + * 故障零件三级检索 + * */ + @RequestMapping(value = "/getTroubleCode.do", produces = "text/html;chrset=UTF-8", method = {RequestMethod.GET, + RequestMethod.POST}) + public void getTroubleCode(HttpServletRequest request, HttpServletResponse response) throws Exception { + JSONObject jsonObject = casesListService.getTroubleCode(request); + RequestUtil.responseResult4Json(response, jsonObject.toString()); + } + + /* + * 案件详细信息保存 + * */ + @RequestMapping(value = "/caseDetailSave.do", produces = "text/html;chrset=UTF-8", method = {RequestMethod.GET, + RequestMethod.POST}) + public void caseDetailSave(HttpServletRequest request, HttpServletResponse response) throws Exception { + JSONObject jsonObject = casesListService.caseDetailSave(request); + RequestUtil.responseResult4Json(response, jsonObject.toString()); + } + + /* + *导出数据EXCEl格式 + * */ + @RequestMapping(value = "/exportData.do", produces = "text/html;chrset=UTF-8", method = {RequestMethod.GET, + RequestMethod.POST}) + public void exportData(HttpServletRequest request, HttpServletResponse response) throws Exception { + JSONObject jsonObject = casesListService.exportData(request); + RequestUtil.responseResult4Json(response, jsonObject.toString()); + } + + /* + *导出数据CSV + * */ + @RequestMapping(value = "/exportDataCSV.do", produces = "text/html;chrset=UTF-8", method = {RequestMethod.GET, + RequestMethod.POST}) + public void exportDataCSV(HttpServletRequest request, HttpServletResponse response) throws Exception { + JSONObject jsonObject = casesListService.exportCSVData(request, response); + RequestUtil.responseResult4Json(response, jsonObject.toString()); + } + + /* + * 救援完成确认 + * */ + @RequestMapping(value = "/completionOfRescue.do", produces = "text/html;chrset=UTF-8", method = {RequestMethod.GET, + RequestMethod.POST}) + public void completionOfRescue(HttpServletRequest request, HttpServletResponse response) throws Exception { + //获取参数 + String code = request.getParameter("code"); + //获取救援详情信息 + JSON jsonObject = casesListService.completionOfRescue(code); + //将json数据响应到客户端 + RequestUtil.responseResult4Json(response, RequestUtil.ObjecttoJsonString(jsonObject)); + } +} diff --git a/src/main/java/com/zhongdao/jlr/business/action/CouponAction.java b/src/main/java/com/zhongdao/jlr/business/action/CouponAction.java new file mode 100644 index 0000000..9bdfc4c --- /dev/null +++ b/src/main/java/com/zhongdao/jlr/business/action/CouponAction.java @@ -0,0 +1,299 @@ + +package com.zhongdao.jlr.business.action; + + +import com.util.RequestUtil; +import com.util.UtilTools; +import com.util.Vo; +import com.zhongdao.jlr.business.service.CouponService; +import com.zhongdao.jlr.business.vo.LoginUserVo; +import org.apache.http.util.TextUtils; +import org.json.JSONObject; +import org.springframework.stereotype.Controller; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RequestMethod; +import org.springframework.web.bind.annotation.RequestParam; + +import javax.annotation.Resource; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; +import java.util.HashMap; +import java.util.Map; + + +/** + * 代金劵控制器 + */ +@Controller +@RequestMapping("/coupon") +public class CouponAction { + + @Resource(name = "couponServiceImpl") + CouponService baseService; + + /** + * 账户查询页面 + */ + @RequestMapping(value = "/coupon_history.do", produces = "text/html;chrset=UTF-8", method = {RequestMethod.GET, RequestMethod.POST}) + public String couponHistory(HttpServletRequest request, HttpServletResponse response) { + return "/page/coupon_consume_history"; + } + + /** + * 代金劵搜索 + */ + @RequestMapping(value = "/search_consume.do", produces = "text/html;chrset=UTF-8", method = {RequestMethod.GET, RequestMethod.POST}) + public void searchConsume(HttpServletRequest request, HttpServletResponse response) { + //获取参数 + String vinCode = request.getParameter("vinCode"); + String userPhone = request.getParameter("userPhone"); + String electronicAccounts = request.getParameter("electronicAccounts"); + //查询代金券数据 + Vo list = baseService.searchConsume(vinCode, electronicAccounts,userPhone, UtilTools.getPage(request), UtilTools.getRows(request)); + //将数据响应到客户端 + RequestUtil.responseResult4Json(response, RequestUtil.ObjecttoJsonString(list)); + } + + /** + * 获取个人代金券消费记录 + */ + + @RequestMapping(value = "/get_coupon_consume.do", produces = "text/html;chrset=UTF-8", method = {RequestMethod.GET, RequestMethod.POST}) + public void getCouponConsume(HttpServletRequest request, HttpServletResponse response) { + //获取参数 + String vin = request.getParameter("vinCode"); + if (!TextUtils.isEmpty(vin)) { + //获取个人代金券消费信息 + Vo vo = baseService.getCouponConsume(vin, UtilTools.getPage(request), UtilTools.getRows(request)); + //将数据响应到客户端 + RequestUtil.responseResult4Json(response, RequestUtil.ObjecttoJsonString(vo)); + + } else { + RequestUtil.responseResult4JsonError(response, "参数为空"); + ; + } + + } + + /** + * 获取个人充值记录 + */ + @RequestMapping(value = "/get_coupon_recharge.do", produces = "text/html;chrset=UTF-8", method = {RequestMethod.GET, RequestMethod.POST}) + public void getCouponRecharge(HttpServletRequest request, HttpServletResponse response) { + //获取参数 + String vin = request.getParameter("vinCode"); + if (!TextUtils.isEmpty(vin)) { + //获取用户充值记录 + Vo vo = baseService.getCouponRecharge(vin, UtilTools.getPage(request), UtilTools.getRows(request)); + //将用户充值记录信息发送到客户端 + RequestUtil.responseResult4Json(response, RequestUtil.ObjecttoJsonString(vo)); + } else { + RequestUtil.responseResult4JsonError(response, "参数为空"); + ; + } + + } + + /** + * 消费记录查询、处理页面 + */ + @RequestMapping(value = "/consume_query.do", produces = "text/html;chrset=UTF-8", method = {RequestMethod.GET}) + public String couponConsumeQuery(HttpServletRequest request, HttpServletResponse response) { + //获取参数 + String state = request.getParameter("state"); + //共享数据 + request.setAttribute("state",state); + return "/page/coupon_consume_query"; + } + + /** + * 消费记录查询、处理页面 + */ + @RequestMapping(value = "/consume_querys.do", produces = "text/html;chrset=UTF-8", method = {RequestMethod.POST}) + public void getConsumeQuery(@RequestParam(value = "vininput", required = false, defaultValue = "") String vin, + @RequestParam(value = "electronicAccounts", required = false, defaultValue = "") String account, + @RequestParam(value = "license", required = false, defaultValue = "") String license, + @RequestParam(value = "phone", required = false, defaultValue = "") String phone, + @RequestParam(value = "rescueCompanyName", required = false, defaultValue = "") String rescueCompanyName, + @RequestParam(value = "queryDate1", required = false, defaultValue = "") String queryDate1, + @RequestParam(value = "queryDate2", required = false, defaultValue = "") String queryDate2, + @RequestParam(value = "checkState", required = false, defaultValue = "") String checkState, + HttpServletRequest request, HttpServletResponse response) { + //获取session信息 + LoginUserVo logininfo = (LoginUserVo) request.getSession().getAttribute("logininfo"); + String rescueCompanyCode = ""; + if (logininfo.getEnterpriseJlrId() != null) rescueCompanyCode = logininfo.getEnterpriseJlrId().toString(); + //查询用户消费记录信息并发送到客户端 + Vo vo = baseService.queryCouponConsume(vin, account, rescueCompanyName, rescueCompanyCode, license, phone, checkState, queryDate1, queryDate2, UtilTools.getPage(request), UtilTools.getRows(request)); + RequestUtil.responseResult4Json(response, RequestUtil.ObjecttoJsonString(vo)); + } + + /** + * 导出消费记录报表 + */ + @RequestMapping(value = "/exportData.do", produces = "text/html;chrset=UTF-8", method = {RequestMethod.GET, RequestMethod.POST} + ) + public void exportData(@RequestParam(value = "vininput", required = false, defaultValue = "") String vin, + @RequestParam(value = "electronicAccounts", required = false, defaultValue = "") String account, + @RequestParam(value = "license", required = false, defaultValue = "") String license, + @RequestParam(value = "phone", required = false, defaultValue = "") String phone, + @RequestParam(value = "rescueCompanyName", required = false, defaultValue = "") String rescueCompanyName, + @RequestParam(value = "queryDate1", required = false, defaultValue = "") String queryDate1, + @RequestParam(value = "queryDate2", required = false, defaultValue = "") String queryDate2, + @RequestParam(value = "checkState", required = false, defaultValue = "") String checkState, HttpServletRequest request, HttpServletResponse response) { + JSONObject jsonObject = null; + //获取session数据 + LoginUserVo logininfo = (LoginUserVo) request.getSession().getAttribute("logininfo"); + try { + String rescueCompanyCode = ""; + //获取导出的报表信息 + if (logininfo.getEnterpriseJlrId() != null) rescueCompanyCode = logininfo.getEnterpriseJlrId().toString(); + jsonObject = baseService.exportData(request, vin, account, rescueCompanyName, rescueCompanyCode, license, phone, checkState, queryDate1, queryDate2); + } catch (Exception e) { + e.printStackTrace(); + } + //将报表信息响应到客户端 + RequestUtil.responseResult4Json(response, jsonObject.toString()); + } + + /** + * 消费记录查询、处理页面 + */ + @RequestMapping(value = "/consume_update.do", produces = "text/html;chrset=UTF-8", method = {RequestMethod.POST}) + public void updateConsumeState(@RequestParam(value = "ids", required = false, defaultValue = "") String ids, + @RequestParam(value = "state", required = false, defaultValue = "") String state, + HttpServletRequest request, HttpServletResponse response) { + //修改消费记录的状态 + Boolean b = baseService.updateConsumeState(ids, state); + //将修改记录的状态响应到客户端 + RequestUtil.responseResult4Json(response, RequestUtil.ObjecttoJsonString(b)); + } + + /** + * 代金卷账户密码短信发送 + */ + @RequestMapping(value = "/sendMsg.do", produces = "text/html;chrset=UTF-8", method = {RequestMethod.GET, + RequestMethod.POST}) + public void sendMsg(HttpServletRequest request, HttpServletResponse response) { + String phoneNum = request.getParameter("phoneNum"); + String msgContent = request.getParameter("msgContent"); + phoneNum = phoneNum == null ? "" : phoneNum; + msgContent = msgContent == null ? "" : msgContent; + boolean sign = baseService.sendMsg(phoneNum, msgContent); + JSONObject jsonObject = new JSONObject(); + jsonObject.put("sign", sign); + RequestUtil.responseResult4Json(response, jsonObject.toString()); + } + + /** + * 充值记录查询页面 + */ + @RequestMapping(value = "/recharge_query.do", produces = "text/html;chrset=UTF-8", method = {RequestMethod.GET}) + public String couponRechargeQuery(HttpServletRequest request, HttpServletResponse response) { + return "/page/coupon_recharge_query"; + } + + /** + * 充值记录查询、处理页面 + */ + @RequestMapping(value = "/recharges_query.do", produces = "text/html;chrset=UTF-8", method = {RequestMethod.POST}) + public void getRechargeQuery(@RequestParam(value = "vininput", required = false, defaultValue = "") String vin, + @RequestParam(value = "electronicAccounts", required = false, defaultValue = "") String account, + @RequestParam(value = "license", required = false, defaultValue = "") String license, + @RequestParam(value = "phone", required = false, defaultValue = "") String phone, + @RequestParam(value = "orderCode", required = false, defaultValue = "") String orderCode, + @RequestParam(value = "queryDate1", required = false, defaultValue = "") String queryDate1, + @RequestParam(value = "queryDate2", required = false, defaultValue = "") String queryDate2, + HttpServletRequest request, HttpServletResponse response) { + Vo vo = baseService.queryCouponRecharge(vin, account, orderCode, license, phone, queryDate1, queryDate2, UtilTools.getPage(request), UtilTools.getRows(request)); + RequestUtil.responseResult4Json(response, RequestUtil.ObjecttoJsonString(vo)); + } + + /** + * 导出充值记录报表 + */ + @RequestMapping(value = "/rechangeExportData.do", produces = "text/html;chrset=UTF-8", method = {RequestMethod.GET, + RequestMethod.POST}) + public void rechangeExportData(@RequestParam(value = "vininput", required = false, defaultValue = "") String vin, + @RequestParam(value = "electronicAccounts", required = false, defaultValue = "") String account, + @RequestParam(value = "phone", required = false, defaultValue = "") String phone, + @RequestParam(value = "orderCode", required = false, defaultValue = "") String orderCode, + @RequestParam(value = "queryDate1", required = false, defaultValue = "") String queryDate1, + @RequestParam(value = "queryDate2", required = false, defaultValue = "") String queryDate2, + HttpServletRequest request, HttpServletResponse response) { + JSONObject jsonObject = null; + try { + //获取充值记录的报表信息 + jsonObject = baseService.rechangeExportData(request, vin, account, orderCode, phone, queryDate1, queryDate2); + } catch (Exception e) { + e.printStackTrace(); + } + //将报表信息响应到客户端 + RequestUtil.responseResult4Json(response, jsonObject.toString()); + } + + /** + * 代金劵消费页面 + */ + @RequestMapping(value = "/coupon_consume.do", produces = "text/html;chrset=UTF-8", method = {RequestMethod.GET, RequestMethod.POST}) + public String couponConsume(HttpServletRequest request, HttpServletResponse response) { + return "/page/coupon_consume"; + } + + /** + * 获取个人账户信息 + */ + @RequestMapping(value = "/get_coupon.do", produces = "text/html;chrset=UTF-8", method = {RequestMethod.GET, RequestMethod.POST}) + public void getCoupon(HttpServletRequest request, HttpServletResponse response) { + String vin = request.getParameter("vin"); + String electronicAccounts = request.getParameter("electronicAccounts"); + + if (!TextUtils.isEmpty(vin) || !TextUtils.isEmpty(electronicAccounts)) { + Vo list = baseService.getCoupon(vin, electronicAccounts, UtilTools.getPage(request), UtilTools.getRows(request)); + + RequestUtil.responseResult4Json(response, RequestUtil.ObjecttoJsonString(list)); + } else { + RequestUtil.responseResult4JsonError(response, "参数为空"); + } + } + + /** + * 代金劵消费 + */ + @RequestMapping(value = "/consume.do", produces = "text/html;chrset=UTF-8", method = {RequestMethod.GET, RequestMethod.POST}) + public void consume(HttpServletRequest request, HttpServletResponse response) { + //声明一个map集合,用来存储返回的结果集 + Map result = new HashMap(); + result.put("flag", "0"); + result.put("msg", "消费失败"); + //获取参数 + String vinCode = request.getParameter("vinCode"); + String consumeCount = request.getParameter("consumeCount"); + String remark = request.getParameter("remark"); + String epassword = request.getParameter("epassword"); + String consumeTime = request.getParameter("consumeTime"); + String reparieInfo = request.getParameter("reparieInfo"); + String hitchInfo = request.getParameter("hitchInfo"); + //获取用户信息 + LoginUserVo loginuser = (LoginUserVo) request.getSession().getAttribute("logininfo"); + //若用户为空则返回错误信息 + if (loginuser == null) { + result.put("msg", "没有登录"); + RequestUtil.responseResult4Json(response, RequestUtil.ObjecttoJsonString(result)); + return; + } + if (!TextUtils.isEmpty(consumeTime) && !TextUtils.isEmpty(vinCode) && !TextUtils.isEmpty(consumeCount) && !TextUtils.isEmpty(epassword)) { + Map back = baseService.consume(consumeTime, vinCode, Double.valueOf(consumeCount), Integer.valueOf(loginuser.getEnterpriseJlrId()), reparieInfo, hitchInfo, remark, epassword); + if ((boolean) back.get("status")) { + result.put("flag", "1"); + result.put("msg", "消费成功"); + } else { + result.put("msg", back.get("msg").toString()); + } + } else { + + result.put("msg", "参数为空"); + } + RequestUtil.responseResult4Json(response, RequestUtil.ObjecttoJsonString(result)); + } +} diff --git a/src/main/java/com/zhongdao/jlr/business/action/EnterpriseAction.java b/src/main/java/com/zhongdao/jlr/business/action/EnterpriseAction.java new file mode 100644 index 0000000..98cbbaf --- /dev/null +++ b/src/main/java/com/zhongdao/jlr/business/action/EnterpriseAction.java @@ -0,0 +1,323 @@ +package com.zhongdao.jlr.business.action; + +import com.util.RequestUtil; +import com.util.UtilTools; +import com.util.Vo; +import com.zhongdao.jlr.business.service.EnterpriseService; +import com.zhongdao.jlr.business.vo.LoginUserVo; +import com.zhongdao.jlr.pojo.EnterpriseJlr; +import org.apache.http.util.TextUtils; +import org.json.JSONObject; +import org.springframework.stereotype.Controller; +import org.springframework.web.bind.annotation.ModelAttribute; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RequestMethod; + +import javax.annotation.Resource; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; +import java.util.Arrays; +import java.util.HashMap; +import java.util.Map; + +/*** + * 经销商维护控制器 + */ +@Controller +@RequestMapping("/enterprise") +public class EnterpriseAction { + + @Resource(name = "enterpriseServiceImpl") + EnterpriseService baseService; + + /** + * 经销商维护列表页面 + */ + @RequestMapping(value = "/enterprise.do", produces = "text/html;chrset=UTF-8", method = {RequestMethod.GET, + RequestMethod.POST}) + public String enterprise(HttpServletRequest request, HttpServletResponse response) { + return "/page/enterprise"; + } + + /** + * 经销商维护搜索 + */ + @RequestMapping(value = "/search_enterprise.do", produces = "text/html;chrset=UTF-8", method = {RequestMethod.GET, + RequestMethod.POST}) + public void searchEnterprise(HttpServletRequest request, HttpServletResponse response) { + //获取参数 + String name = request.getParameter("name"); + String abbrCode = request.getParameter("abbrCode"); + //获取经销商信息 + Vo list = baseService.searchEnterprise(name, abbrCode, UtilTools.getPage(request), UtilTools + .getRows(request)); + //将数据响应到客户端 + RequestUtil.responseResult4Json(response, RequestUtil.ObjecttoJsonString(list)); + } + + /** + * 根据编号删除经销商信息 + */ + @RequestMapping(value = "/delete_by_id.do", produces = "text/html;chrset=UTF-8", method = {RequestMethod.GET, + RequestMethod.POST}) + public void deleteById(HttpServletRequest request, HttpServletResponse response) { + //声明一个map对象用于存放响应到客户端的数据 + Map result = new HashMap(); + result.put("flag", "0"); + result.put("msg", "执行失败"); + //获取参数 + String id = request.getParameter("id"); + + if (!TextUtils.isEmpty(id)) { + //根据编号删除经销商信息 + boolean back = baseService.deleteById(id); + if (back) { + result.put("flag", "1"); + result.put("msg", "执行成功"); + } + } else { + + result.put("msg", "参数为空"); + } + //将数据信息响应到客户端 + RequestUtil.responseResult4Json(response, RequestUtil.ObjecttoJsonString(result)); + + } + + + /** + * 经销商信息修改 + */ + @RequestMapping(value = "/put_enterprise.do", produces = "text/html;chrset=UTF-8", method = {RequestMethod.GET, + RequestMethod.POST}) + public void putMyEnterprise(HttpServletRequest request, HttpServletResponse response, @ModelAttribute EnterpriseJlr + enterprise) throws Exception { + //声明一个map集合,存储返回的结果信息 + Map result = new HashMap(); + result.put("flag", "0"); + result.put("msg", "执行失败"); + //获取参数 + String name = request.getParameter("name"); + String abbrCode = request.getParameter("abbr_code"); + String brands = request.getParameter("brands"); + String contact = request.getParameter("contact"); + String phone1 = request.getParameter("phone1"); + String job1 = request.getParameter("job1"); + String newPassword = request.getParameter("newPassword"); + String confirmPassword = request.getParameter("confirmPassword"); + String contact2 = request.getParameter("contact2"); + String phone2 = request.getParameter("phone2"); + String job2 = request.getParameter("job2"); + String contact3 = request.getParameter("contact3"); + String phone3 = request.getParameter("phone3"); + String job3 = request.getParameter("job3"); + //遍历服务资质信息并将其拼接 + String[] serviceQualifications = request.getParameterValues("service_qualification"); + StringBuffer serviceQualification=new StringBuffer(); + for(String service:serviceQualifications){ + serviceQualification.append(service); + serviceQualification.append(","); + } + String serviceQualificationer=serviceQualification.subSequence(0,serviceQualification.lastIndexOf(",")).toString(); + String address = request.getParameter("address"); + String vinCode = request.getParameter("vin_code"); + String carType = request.getParameter("car_type"); + String firstSellDate = request.getParameter("first_sale_date"); + String lon = request.getParameter("lon"); + String lat = request.getParameter("lat"); + String id = request.getParameter("id"); + // 防止数据累加 + if (enterprise != null) { + enterprise.setName(name); + enterprise.setAbbr_code(abbrCode); + enterprise.setBrands(brands); + enterprise.setContact(contact); + enterprise.setPhone1(phone1); + enterprise.setJob1(job1); + enterprise.setContact2(contact2); + enterprise.setPhone2(phone2); + enterprise.setJob2(job2); + enterprise.setContact3(contact3); + enterprise.setPhone3(phone3); + enterprise.setJob3(job3); + enterprise.setAddress(address); + enterprise.setVin_code(vinCode); + enterprise.setCar_type(carType); + enterprise.setFirst_sale_date(firstSellDate); + enterprise.setLon(lon); + enterprise.setLat(lat); + enterprise.setService_qualification(serviceQualificationer); + //如果id不为空则判断此操作为更改 + if(!TextUtils.isEmpty(id)){ + //根据id获取经销商信息 + EnterpriseJlr back = baseService.getById(id); + //获取创建时间并放入enterprise对象中 + enterprise.setCreate_time(back.getCreate_time()); + } + } + if (!TextUtils.isEmpty(name) && !TextUtils.isEmpty(brands) && !TextUtils.isEmpty(abbrCode)) { + //添加或更改经销商信息 + boolean back = baseService.putEnterprise(enterprise, newPassword, confirmPassword,null); + if (back) { + result.put("flag", "1"); + result.put("msg", "执行成功"); + } + } else { + result.put("msg", "参数为空"); + } + //将数据响应到客户端 + RequestUtil.responseResult4Json(response, RequestUtil.ObjecttoJsonString(result)); + + } + + /** + * 经销商个人信息修改 + */ + @RequestMapping(value = "/put_Myenterprise.do", produces = "text/html;chrset=UTF-8", method = {RequestMethod.GET, + RequestMethod.POST}) + public void put_Myenterprise(HttpServletRequest request, HttpServletResponse response, @ModelAttribute EnterpriseJlr + enterprise) throws Exception { + //声明一个map集合,存储返回的结果信息 + Map result = new HashMap(); + result.put("flag", "0"); + result.put("msg", "执行失败"); + //获取参数 + String name = request.getParameter("name"); + String abbrCode = request.getParameter("abbr_code"); + String brands = request.getParameter("brands"); + String contact = request.getParameter("contact"); + String phone1 = request.getParameter("phone1"); + String job1 = request.getParameter("job1"); + String newPassword = request.getParameter("newPassword"); + String confirmPassword = request.getParameter("confirmPassword"); + String contact2 = request.getParameter("contact2"); + String phone2 = request.getParameter("phone2"); + String job2 = request.getParameter("job2"); + String contact3 = request.getParameter("contact3"); + String phone3 = request.getParameter("phone3"); + String job3 = request.getParameter("job3"); + String address = request.getParameter("address"); + String vinCode = request.getParameter("vin_code"); + String carType = request.getParameter("car_type"); + String firstSellDate = request.getParameter("first_sale_date"); + String lon = request.getParameter("lon"); + String lat = request.getParameter("lat"); + // 防止数据累加 + if (enterprise != null) { + enterprise.setName(name); + enterprise.setAbbr_code(abbrCode); + enterprise.setBrands(brands); + enterprise.setContact(contact); + enterprise.setPhone1(phone1); + enterprise.setJob1(job1); + enterprise.setContact2(contact2); + enterprise.setPhone2(phone2); + enterprise.setJob2(job2); + enterprise.setContact3(contact3); + enterprise.setPhone3(phone3); + enterprise.setJob3(job3); + enterprise.setAddress(address); + enterprise.setVin_code(vinCode); + enterprise.setCar_type(carType); + enterprise.setFirst_sale_date(firstSellDate); + enterprise.setLon(lon); + enterprise.setLat(lat); + } + //获取session数据 + LoginUserVo logininfo=(LoginUserVo)request.getSession().getAttribute("logininfo"); + String enpterpriseId=String.valueOf(logininfo.getEnterpriseJlrId()); + //根据id获取经销商信息 + EnterpriseJlr back = baseService.getById(enpterpriseId); + enterprise.setId(logininfo.getEnterpriseJlrId()); + enterprise.setService_qualification(back.getService_qualification()); + //获取创建时间并放入enterprise对象中 + enterprise.setCreate_time(back.getCreate_time()); + if (!TextUtils.isEmpty(name) && !TextUtils.isEmpty(brands) && !TextUtils.isEmpty(abbrCode)) { + //更改个人经销商信息 + boolean backs = baseService.putEnterprise(enterprise, newPassword, confirmPassword,String.valueOf(logininfo.getId())); + if (backs) { + result.put("flag", "1"); + result.put("msg", "执行成功"); + } + } else { + result.put("msg", "参数为空"); + } + //将数据响应到客户端 + RequestUtil.responseResult4Json(response, RequestUtil.ObjecttoJsonString(result)); + } + + /** + * 根据id查询经销商 + */ + @RequestMapping(value = "/get_by_id.do", produces = "text/html;chrset=UTF-8", method = {RequestMethod.GET, + RequestMethod.POST}) + public void getById(HttpServletRequest request, HttpServletResponse response) { + //声明一个map集合,存储返回的结果信息 + Map result = new HashMap(); + result.put("flag", "0"); + result.put("msg", "执行失败"); + String id = request.getParameter("id"); + if (!TextUtils.isEmpty(id)) { + //根据id获取经销商信息 + EnterpriseJlr back = baseService.getById(id); + if (back != null) { + result.put("flag", "1"); + result.put("msg", "执行成功"); + result.put("data", back); + } + } else { + + result.put("msg", "参数为空"); + } + //将结果信息响应到客户端 + RequestUtil.responseResult4Json(response, RequestUtil.ObjecttoJsonString(result)); + + } + + /** + * 查询自己的经销商信息 + */ + @RequestMapping(value = "/get_my_info.do", produces = "text/html;chrset=UTF-8", method = {RequestMethod.GET, + RequestMethod.POST}) + public void getMyInfo(HttpServletRequest request, HttpServletResponse response) { + Map result = new HashMap(); + result.put("flag", "0"); + result.put("msg", "执行失败"); + LoginUserVo loginuser = (LoginUserVo) request.getSession().getAttribute("logininfo"); + String id = loginuser.getEnterpriseJlrId() + ""; + if (!TextUtils.isEmpty(id)) { + EnterpriseJlr back = baseService.getById(id); + if (back != null) { + result.put("flag", "1"); + result.put("msg", "执行成功"); + result.put("data", back); + }else { + result.put("flag", "0"); + result.put("msg", "暂无经销商信息"); + } + } else { + + result.put("msg", "参数为空"); + } + RequestUtil.responseResult4Json(response, RequestUtil.ObjecttoJsonString(result)); + + } + + /** + * 导出报表 + */ + @RequestMapping(value = "/exportData.do", produces = "text/html;chrset=UTF-8", method = {RequestMethod.GET, + RequestMethod.POST}) + public void exportData(HttpServletRequest request, HttpServletResponse response) { + //获取参数 + String name = request.getParameter("name"); + String abbrCode = request.getParameter("abbrCode"); + //获取经销商信息 + JSONObject jsonObject = baseService.expordata(request, name, abbrCode); + //将结果信息响应到客户端 + RequestUtil.responseResult4Json(response, jsonObject.toString()); + + } + +} + diff --git a/src/main/java/com/zhongdao/jlr/business/action/OrderCheckAction.java b/src/main/java/com/zhongdao/jlr/business/action/OrderCheckAction.java new file mode 100644 index 0000000..dc4acb2 --- /dev/null +++ b/src/main/java/com/zhongdao/jlr/business/action/OrderCheckAction.java @@ -0,0 +1,129 @@ +package com.zhongdao.jlr.business.action; + +import com.util.RequestUtil; +import com.util.UtilTools; +import com.util.Vo; +import com.zhongdao.jlr.business.service.OrderCheckService; +import net.sf.json.JSONObject; +import org.apache.commons.lang.StringUtils; +import org.springframework.stereotype.Controller; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RequestMethod; + +import javax.annotation.Resource; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; +import java.util.HashMap; +import java.util.Map; + + +/**** + * 服务结算控制器 + */ + +@Controller +@RequestMapping("/orderCheck") +public class OrderCheckAction { + + @Resource(name = "orderCheckServiceImpl") + OrderCheckService serviceImpl; + + /** + * 跳转到中道服务核对界面 + */ + @RequestMapping(value = "/list.do", produces = "text/html;chrset=UTF-8", method = {RequestMethod.GET, RequestMethod.POST}) + public String list(HttpServletRequest request, HttpServletResponse response) { + String state = request.getParameter("state"); + return "/page/orderCheck"; + } + + /** + * 跳转到中道服务结算界面 + */ + @RequestMapping(value = "/settle.do", produces = "text/html;chrset=UTF-8", method = {RequestMethod.GET, RequestMethod.POST}) + public String settle(HttpServletRequest request, HttpServletResponse response) { + //获取参数 + String state = request.getParameter("state"); + //共享数据 + request.setAttribute("state",state); + return "/page/orderCheckAll"; + } + + /** + * 查询服务费用核对信息 + */ + @RequestMapping(value = "/query.do", produces = "text/html;chrset=UTF-8", method = {RequestMethod.GET, RequestMethod.POST}) + public void query(HttpServletRequest request, HttpServletResponse response) { + //获取参数 + String orderCode = request.getParameter("orderCode"); + String queryDate1 = request.getParameter("queryDate1"); + String queryDate2 = request.getParameter("queryDate2"); + String rescueCompanyName = request.getParameter("rescueCompanyName"); + String checkState = request.getParameter("checkState"); + //获取工单服务费用信息 + Vo vo = serviceImpl.list(request, UtilTools.getPage(request), UtilTools.getRows(request),orderCode, queryDate1, rescueCompanyName, queryDate2, checkState); + //RequestUtil.responseResult4Json(response, "1"); + RequestUtil.responseResult4Json(response, RequestUtil.ObjecttoJsonString(vo)); + } + + /** + * 查询工单费用信息 + */ + @RequestMapping(value = "/querys.do", produces = "text/html;chrset=UTF-8", method = {RequestMethod.GET, RequestMethod.POST}) + public void querys(HttpServletRequest request, HttpServletResponse response) { + //获取参数 + String code = request.getParameter("code"); + String orderCode = request.getParameter("orderCode"); + String queryDate1 = request.getParameter("queryDate1"); + String queryDate2 = request.getParameter("queryDate2"); + String rescueCompanyName = request.getParameter("rescueCompanyName"); + String checkState = request.getParameter("checkState"); + String state = request.getParameter("state"); + //获取工单服务费用信息 + Vo vo = serviceImpl.lists(request, UtilTools.getPage(request), UtilTools.getRows(request), code, orderCode, queryDate1, rescueCompanyName, queryDate2, checkState,state); + //RequestUtil.responseResult4Json(response, "1"); + RequestUtil.responseResult4Json(response, RequestUtil.ObjecttoJsonString(vo)); + } + + /*** + * 导出 + * @param request + * @param response + */ + @RequestMapping(value = "/exportData.do", produces = "text/html;chrset=UTF-8", method = {RequestMethod.POST}) + public void exportData(HttpServletRequest request, HttpServletResponse response) { + //获取参数 + String code = request.getParameter("code"); + String orderCode = request.getParameter("orderCode"); + String queryDate1 = request.getParameter("queryDate1"); + String queryDate2 = request.getParameter("queryDate2"); + String rescueCompanyName = request.getParameter("rescueCompanyName"); + String checkState = request.getParameter("checkState"); + JSONObject jsonObject = serviceImpl.exportData(request, code, orderCode, queryDate1, rescueCompanyName, queryDate2, checkState); + RequestUtil.responseResult4Json(response, jsonObject.toString()); + } + + /*** + * 保存核对后信息 + * @param request + * @param response + */ + @RequestMapping(value = "/save.do", produces = "text/html;chrset=UTF-8", method = {RequestMethod.GET, RequestMethod.POST}) + public void save(HttpServletRequest request, HttpServletResponse response) { + //获取参数 + String uid = request.getParameter("uid"); + String totalFee = request.getParameter("totalFee"); + Map result = new HashMap(); + result.put("flag", "0"); + if (StringUtils.isNotBlank(totalFee) && StringUtils.isNotBlank(uid)) { + boolean state=serviceImpl.updateInfo(uid,totalFee); + if(state){ + result.put("flag","1"); + } + }else{ + result.put("msg","参数为空"); + } + RequestUtil.responseResult4Json(response,RequestUtil.ObjecttoJsonString(result)); + } + +} diff --git a/src/main/java/com/zhongdao/jlr/business/action/RoleAction.java b/src/main/java/com/zhongdao/jlr/business/action/RoleAction.java new file mode 100644 index 0000000..df19c2e --- /dev/null +++ b/src/main/java/com/zhongdao/jlr/business/action/RoleAction.java @@ -0,0 +1,177 @@ +package com.zhongdao.jlr.business.action; + +import com.util.RequestUtil; +import com.util.Vo; +import com.zhongdao.jlr.business.service.RoleService; +import com.zhongdao.jlr.business.vo.JLRMenu; +import com.zhongdao.jlr.pojo.BaseMenu; +import com.zhongdao.jlr.pojo.JLRRole; +import org.apache.http.util.TextUtils; +import org.springframework.stereotype.Controller; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RequestMethod; +import org.springframework.web.bind.annotation.ResponseBody; + +import javax.annotation.Resource; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +/*** + * 角色控制器 + */ +@Controller +@RequestMapping("/role") +public class RoleAction { + + @Resource(name = "roleServiceImpl") + RoleService service; + + /*** + * 跳转角色管理界面 + * @param request + * @param response + * @return + */ + @RequestMapping(value = "/role.do", produces = "text/html;chrset=UTF-8", method = {RequestMethod.GET, + RequestMethod.POST}) + public String JumpTocaseInfo(HttpServletRequest request, HttpServletResponse response) { + return "/page/role"; + } + + /*** + * 获取角色信息 + * @param request + * @param response + */ + @RequestMapping(value = "/getRole.do", produces = "text/html;chrset=UTF-8", method = {RequestMethod.GET, + RequestMethod.POST}) + public void caseInfoList(HttpServletRequest request, HttpServletResponse response) { + //获取参数 + String name = request.getParameter("name");// 案件编号 + //获取用户信息 + Vo vo = service.getRoleInfo(request, name); + //将用户信息响应到客户端 + RequestUtil.responseResult4Json(response, RequestUtil.ObjecttoJsonString(vo)); + } + + /*** + * 获取tree数据 + * @param request + * @param response + */ + @RequestMapping(value = "/getTree.do", produces = "text/html;chrset=UTF-8", method = {RequestMethod.GET, + RequestMethod.POST}) + public void getTreeInfo(HttpServletRequest request, HttpServletResponse response) { + //获取用户信息 + List vo = service.getTreeInfo(); + //将用户信息响应到客户端 + RequestUtil.responseResult4Json(response, RequestUtil.ListtoJsonString(vo)); + } + + /** + * 添加角色信息 + */ + @RequestMapping(value = "/insertRole.do", produces = "application/json;chrset=UTF-8", method = {RequestMethod.GET, + RequestMethod.POST}) + @ResponseBody + public Map putMyEnterprise(HttpServletRequest request, HttpServletResponse response, JLRRole jlrRole, int[] ids) throws Exception { + //声明一个map集合,存储返回的结果信息 + Map result = new HashMap(); + result.put("flag", "0"); + result.put("msg", "执行失败"); + if (jlrRole != null) { + //添加或更改用户信息 + boolean back = service.updateRoleInfo(jlrRole, ids); + if (back) { + result.put("flag", "1"); + result.put("msg", "执行成功"); + } + } else { + result.put("msg", "参数为空"); + } + //将数据响应到客户端 + return result; + } + + /** + * 根据id查询角色信息 + */ + @RequestMapping(value = "/getRoleInfo.do", produces = "text/html;chrset=UTF-8", method = {RequestMethod.GET, + RequestMethod.POST}) + public void getById(HttpServletRequest request, HttpServletResponse response) { + //声明一个map集合,存储返回的结果信息 + Map result = new HashMap(); + result.put("flag", "0"); + result.put("msg", "执行失败"); + String id = request.getParameter("id"); + if (!TextUtils.isEmpty(id)) { + //根据id获取角色信息 + JLRRole back = service.getRole(id); + if (back != null) { + result.put("flag", "1"); + result.put("msg", "执行成功"); + result.put("data", back); + } + } else { + result.put("msg", "参数为空"); + } + //将结果信息响应到客户端 + RequestUtil.responseResult4Json(response, RequestUtil.ObjecttoJsonString(result)); + } + + /** + * 根据id查询菜单信息 + */ + @RequestMapping(value = "/getMenuInfo.do", produces = "text/html;chrset=UTF-8", method = {RequestMethod.GET, + RequestMethod.POST}) + public void getMenu(HttpServletRequest request, HttpServletResponse response) { + //声明一个map集合,存储返回的结果信息 + Map result = new HashMap(); + result.put("flag", "0"); + result.put("msg", "执行失败"); + String id = request.getParameter("id"); + if (!TextUtils.isEmpty(id)) { + //根据id获取角色信息 + List back = service.getMenu(id); + if (back != null) { + result.put("flag", "1"); + result.put("msg", "执行成功"); + result.put("data", back); + } + } else { + result.put("msg", "参数为空"); + } + //将结果信息响应到客户端 + RequestUtil.responseResult4Json(response, RequestUtil.ObjecttoJsonString(result)); + } + + /** + * 根据编号删除角色信息 + */ + @RequestMapping(value = "/deleteRole.do", produces = "text/html;chrset=UTF-8", method = {RequestMethod.GET, + RequestMethod.POST}) + public void deleteById(HttpServletRequest request, HttpServletResponse response) { + //声明一个map对象用于存放响应到客户端的数据 + Map result = new HashMap(); + result.put("flag", "0"); + result.put("msg", "执行失败"); + //获取参数 + String id = request.getParameter("id"); + String name = request.getParameter("name"); + if (!TextUtils.isEmpty(id) && !TextUtils.isEmpty(name)) { + boolean back = service.deleteRole(id,name); + if (back) { + result.put("flag", "1"); + result.put("msg", "执行成功"); + } + } else { + result.put("msg", "参数为空"); + } + //将数据信息响应到客户端 + RequestUtil.responseResult4Json(response, RequestUtil.ObjecttoJsonString(result)); + + } +} \ No newline at end of file diff --git a/src/main/java/com/zhongdao/jlr/business/action/SupplierAction.java b/src/main/java/com/zhongdao/jlr/business/action/SupplierAction.java new file mode 100644 index 0000000..a22af65 --- /dev/null +++ b/src/main/java/com/zhongdao/jlr/business/action/SupplierAction.java @@ -0,0 +1,332 @@ +package com.zhongdao.jlr.business.action; + +import com.util.RequestUtil; +import com.util.Vo; +import com.zhongdao.jlr.business.service.SupplierService; +import com.zhongdao.jlr.business.service.UserInfoService; +import com.zhongdao.jlr.business.vo.Contract; +import com.zhongdao.jlr.business.vo.Destination; +import com.zhongdao.jlr.business.vo.Enterprise; +import com.zhongdao.jlr.pojo.JLRRole; +import com.zhongdao.jlr.pojo.JLRUserContract; +import org.apache.http.util.TextUtils; +import org.springframework.stereotype.Controller; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RequestMethod; +import org.springframework.web.bind.annotation.ResponseBody; + +import javax.annotation.Resource; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +@Controller +@RequestMapping("/supplier") +public class SupplierAction { + + @Resource(name = "userInfoService") + UserInfoService service; + + @Resource(name = "supplierServiceImpl") + SupplierService serviceImpl; + + /*** + * 获取用户信息,跳转数据权限管理页面 + * @param request + * @param response + * @return + */ + @RequestMapping(value = "/supplier.do", produces = "text/html;chrset=UTF-8", method = {RequestMethod.GET, + RequestMethod.POST}) + public String JumpTocaseInfo(HttpServletRequest request, HttpServletResponse response) { + //获取角色信息 + List baseRoles=service.getRoleInfo(); + //共享数据 + request.setAttribute("roles",baseRoles); + return "/page/supplier"; + } + + /*** + * 获取合同信息 + * @param request + * @param response + */ + @RequestMapping(value = "/getContractInfo.do", produces = "text/html;chrset=UTF-8", method = {RequestMethod.GET, + RequestMethod.POST}) + public void caseInfoList(HttpServletRequest request, HttpServletResponse response) { + //获取参数 + String name = request.getParameter("name");// 合同名称 + String id = request.getParameter("id");// 用户id + //获取合同信息 + Vo vo = serviceImpl.getContractInfo(request,name,id); + //将合同信息响应到客户端 + RequestUtil.responseResult4Json(response, RequestUtil.ObjecttoJsonString(vo)); + } + + /*** + * 获取指定的合同信息 + * @param request + * @param response + */ + @RequestMapping(value = "/geAssignContract.do", produces = "application/json;chrset=UTF-8", method = {RequestMethod.GET, + RequestMethod.POST}) + @ResponseBody + public List geAssignContract(HttpServletRequest request, HttpServletResponse response) { + //获取参数 + String id = request.getParameter("id");// 用户id + //获取合同信息 + List vo = serviceImpl.getAssignContract(id); + //将数据响应到客户端 + return vo; + } + + /*** + * 获取指定的目的地信息 + * @param request + * @param response + */ + @RequestMapping(value = "/geAssignDestination.do", produces = "application/json;chrset=UTF-8", method = {RequestMethod.GET, + RequestMethod.POST}) + @ResponseBody + public List geAssignDestination(HttpServletRequest request, HttpServletResponse response) { + //获取参数 + String id = request.getParameter("id");// 用户id + //获取合同信息 + List vo = serviceImpl.geAssignDestination(id); + //将数据响应到客户端 + return vo; + } + + /*** + * 获取指定的供应商信息 + * @param request + * @param response + */ + @RequestMapping(value = "/geAssignEnterprise.do", produces = "application/json;chrset=UTF-8", method = {RequestMethod.GET, + RequestMethod.POST}) + @ResponseBody + public List geAssignEnterprise(HttpServletRequest request, HttpServletResponse response) { + //获取参数 + String id = request.getParameter("id");// 用户id + //获取合同信息 + List vo = serviceImpl.geAssignEnterprise(id); + //将数据响应到客户端 + return vo; + } + + + /*** + * 获取供应商信息 + * @param request + * @param response + */ + @RequestMapping(value = "/getEnterpriseInfo.do", produces = "text/html;chrset=UTF-8", method = {RequestMethod.GET, + RequestMethod.POST}) + public void getEnterpriseInfo(HttpServletRequest request, HttpServletResponse response) { + //获取参数 + String name = request.getParameter("name");// 合同名称 + String id = request.getParameter("id");// 用户id + //获取供应商信息 + Vo vo = serviceImpl.getEnterpriseInfo(request,name,id); + //将用户信息响应到客户端 + RequestUtil.responseResult4Json(response, RequestUtil.ObjecttoJsonString(vo)); + } + + /*** + * 获取合同下的目的地信息 + * @param request + * @param response + */ + @RequestMapping(value = "/getDestination.do", produces = "text/html;chrset=UTF-8", method = {RequestMethod.GET, + RequestMethod.POST}) + public void getList(HttpServletRequest request, HttpServletResponse response) { + //获取参数 + String name = request.getParameter("name");// 合同名称 + String id= request.getParameter("id");// 合同名称 + //获取合同下的目的地信息 + Vo vo = serviceImpl.getDestination(request,name,id); + //将目的地信息响应到客户端 + RequestUtil.responseResult4Json(response, RequestUtil.ObjecttoJsonString(vo)); + } + + /** + * 指定合同 + */ + @RequestMapping(value = "/insertContract.do", produces = "application/json;chrset=UTF-8", method = {RequestMethod.GET, + RequestMethod.POST}) + @ResponseBody + public Map putMyEnterprise(HttpServletRequest request, HttpServletResponse response, Integer id, int[] ids) throws Exception { + //声明一个map集合,存储返回的结果信息 + Map result = new HashMap(); + result.put("flag", "0"); + result.put("msg", "执行失败"); + if (ids != null && id != null) { + //添加合同信息 + boolean back = serviceImpl.insertContractInfo(id,ids); + if (back) { + result.put("flag", "1"); + result.put("msg", "执行成功"); + } else { + result.put("msg", "参数为空"); + } + } + //将数据响应到客户端 + return result; + } + + + /** + * 指定目的地 + */ + @RequestMapping(value = "/insertDestination.do", produces = "application/json;chrset=UTF-8", method = {RequestMethod.GET, + RequestMethod.POST}) + @ResponseBody + public Map insertDestination(HttpServletRequest request, HttpServletResponse response, Integer id, int[] ids) throws Exception { + //声明一个map集合,存储返回的结果信息 + Map result = new HashMap(); + result.put("flag", "0"); + result.put("msg", "执行失败"); + if (ids != null && id != null) { + //添加或更改用户信息 + boolean back = serviceImpl.insertDestinationInfo(id,ids); + if (back) { + result.put("flag", "1"); + result.put("msg", "执行成功"); + } else { + result.put("msg", "参数为空"); + } + } + //将数据响应到客户端 + return result; + } + + /** + * 指定供应商 + */ + @RequestMapping(value = "/insertEnterprise.do", produces = "application/json;chrset=UTF-8", method = {RequestMethod.GET, + RequestMethod.POST}) + @ResponseBody + public Map insertEnterprise(HttpServletRequest request, HttpServletResponse response, Integer id, int[] ids) throws Exception { + //声明一个map集合,存储返回的结果信息 + Map result = new HashMap(); + result.put("flag", "0"); + result.put("msg", "执行失败"); + if (ids != null && id != null) { + //添加或更改用户信息 + boolean back = serviceImpl.insertEnterpriseInfo(id,ids); + if (back) { + result.put("flag", "1"); + result.put("msg", "执行成功"); + } else { + result.put("msg", "参数为空"); + } + } + //将数据响应到客户端 + return result; + } + + /** + * 删除指定的合同 + */ + @RequestMapping(value = "/deleteContract.do", produces = "application/json;chrset=UTF-8", method = {RequestMethod.GET, + RequestMethod.POST}) + @ResponseBody + public Map deleteContract(HttpServletRequest request, HttpServletResponse response, Integer id, int[] ids) throws Exception { + //声明一个map集合,存储返回的结果信息 + Map result = new HashMap(); + result.put("flag", "0"); + result.put("msg", "执行失败"); + if (ids != null && id != null) { + //添加或更改用户信息 + boolean back = serviceImpl.deleteContractInfo(id,ids); + if (back) { + result.put("flag", "1"); + result.put("msg", "执行成功"); + } + } else { + result.put("msg", "参数为空"); + } + //将数据响应到客户端 + return result; + } + + /** + * 删除指定的供应商 + */ + @RequestMapping(value = "/deleteEnterprise.do", produces = "application/json;chrset=UTF-8", method = {RequestMethod.GET, + RequestMethod.POST}) + @ResponseBody + public Map deleteEnterprise(HttpServletRequest request, HttpServletResponse response, Integer id, int[] ids) throws Exception { + //声明一个map集合,存储返回的结果信息 + Map result = new HashMap(); + result.put("flag", "0"); + result.put("msg", "执行失败"); + if (ids != null && id != null) { + //添加或更改用户信息 + boolean back = serviceImpl.deleteEnterpriseInfo(id,ids); + if (back) { + result.put("flag", "1"); + result.put("msg", "执行成功"); + } + } else { + result.put("msg", "参数为空"); + } + //将数据响应到客户端 + return result; + } + + /** + * 删除指定的目的地 + */ + @RequestMapping(value = "/deleteDestination.do", produces = "application/json;chrset=UTF-8", method = {RequestMethod.GET, + RequestMethod.POST}) + @ResponseBody + public Map deleteDestination(HttpServletRequest request, HttpServletResponse response, Integer id, int[] ids) throws Exception { + //声明一个map集合,存储返回的结果信息 + Map result = new HashMap(); + result.put("flag", "0"); + result.put("msg", "执行失败"); + if (ids != null && id != null) { + //添加或更改用户信息 + boolean back = serviceImpl.deleteDestinationInfo(id,ids); + if (back) { + result.put("flag", "1"); + result.put("msg", "执行成功"); + } + }else { + result.put("msg", "参数为空"); + } + //将数据响应到客户端 + return result; + } + + /** + * 根据用户id查询合同信息 + */ + @RequestMapping(value = "/getDestinationInfo.do", produces = "text/html;chrset=UTF-8", method = {RequestMethod.GET, + RequestMethod.POST}) + public void getById(HttpServletRequest request, HttpServletResponse response) { + //声明一个map集合,存储返回的结果信息 + Map result = new HashMap(); + result.put("flag", "0"); + result.put("msg", "执行失败"); + String id = request.getParameter("id"); + if (!TextUtils.isEmpty(id)) { + //根据id获取合同信息 + List back = serviceImpl.getDestinationInfo(id); + if (back != null) { + result.put("flag", "1"); + result.put("msg", "执行成功"); + result.put("data", back); + } + } else { + result.put("msg", "参数为空"); + } + //将结果信息响应到客户端 + RequestUtil.responseResult4Json(response, RequestUtil.ObjecttoJsonString(result)); + } + + +} diff --git a/src/main/java/com/zhongdao/jlr/business/action/UserAction.java b/src/main/java/com/zhongdao/jlr/business/action/UserAction.java new file mode 100644 index 0000000..e65c5fb --- /dev/null +++ b/src/main/java/com/zhongdao/jlr/business/action/UserAction.java @@ -0,0 +1,227 @@ +package com.zhongdao.jlr.business.action; + +import com.util.RequestUtil; +import com.util.Vo; +import com.zhongdao.jlr.business.service.UserInfoService; +import com.zhongdao.jlr.pojo.*; +import jodd.util.BCrypt; +import org.apache.http.util.TextUtils; +import org.springframework.stereotype.Controller; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RequestMethod; + +import javax.annotation.Resource; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +/*** + * 用户管理控制器 + */ +@Controller +@RequestMapping("/user") +public class UserAction { + @Resource(name = "userInfoService") + UserInfoService service; + + /*** + * 获取角色信息,跳转用户管理页面 + * @param request + * @param response + * @return + */ + @RequestMapping(value = "/user.do", produces = "text/html;chrset=UTF-8", method = {RequestMethod.GET, + RequestMethod.POST}) + public String JumpTocaseInfo(HttpServletRequest request, HttpServletResponse response) { + //获取角色信息 + List baseRoles=service.getRoleInfo(); + //获取经销商信息 + List enterpriseJlrs=service.getEnterpriseInfo(); + //共享数据 + request.setAttribute("roles",baseRoles); + request.setAttribute("enterprise",enterpriseJlrs); + return "/page/user"; + } + + /*** + * 获取,跳转用户账号页面 + * @param request + * @param response + * @return + */ + @RequestMapping(value = "/myself.do", produces = "text/html;chrset=UTF-8", method = {RequestMethod.GET, + RequestMethod.POST}) + public String JumpMyself(HttpServletRequest request, HttpServletResponse response) { + return "/page/modifyPassword"; + } + + /*** + * 获取用户信息 + * @param request + * @param response + */ + @RequestMapping(value = "/getUserInfo.do", produces = "text/html;chrset=UTF-8", method = {RequestMethod.GET, + RequestMethod.POST}) + public void caseInfoList(HttpServletRequest request, HttpServletResponse response) { + //获取参数 + String name = request.getParameter("name");// 案件编号 + String phone = request.getParameter("phone");// VIN码 + String role = request.getParameter("role");// VIN码 + String username = request.getParameter("username");// VIN码 + //获取用户信息 + Vo vo = service.getUserInfo(request,name,phone,role,username); + //将用户信息响应到客户端 + RequestUtil.responseResult4Json(response, RequestUtil.ObjecttoJsonString(vo)); + } + + /** + * 用户信息添加或修改信息修改 + */ + @RequestMapping(value = "/insertUser.do", produces = "text/html;chrset=UTF-8", method = {RequestMethod.GET, + RequestMethod.POST}) + public void putMyEnterprise(HttpServletRequest request, HttpServletResponse response) throws Exception { + JLRUser jlrUser=new JLRUser(); + //声明一个map集合,存储返回的结果信息 + Map result = new HashMap(); + result.put("flag", "0"); + result.put("msg", "执行失败"); + //获取参数 + String name = request.getParameter("name"); + String username = request.getParameter("login_name"); + String phone = request.getParameter("phone"); + String email = request.getParameter("email"); + String role = request.getParameter("role"); + String enterprise = request.getParameter("enterprise"); + String newPassword = request.getParameter("newPassword"); + String id = request.getParameter("id"); + //将参数放入对象中 + if(!TextUtils.isEmpty(id)){ + jlrUser.setId(Integer.valueOf(id)); + } + jlrUser.setName(name); + jlrUser.setLogin_name(username); + jlrUser.setPhone(phone); + jlrUser.setEmail(email); + jlrUser.setPassword(newPassword); + jlrUser.setRole_id(Integer.valueOf(role)); + jlrUser.setEnterprise_id(Integer.valueOf(enterprise)); + if (jlrUser != null) { + //添加或更改用户信息 + boolean back = service.updateUserInfo(jlrUser); + if (back) { + result.put("flag", "1"); + result.put("msg", "执行成功"); + } + } else { + result.put("msg", "参数为空"); + } + //将数据响应到客户端 + RequestUtil.responseResult4Json(response, RequestUtil.ObjecttoJsonString(result)); + + } + + /** + * 根据id查询用户信息 + */ + @RequestMapping(value = "/getUser.do", produces = "text/html;chrset=UTF-8", method = {RequestMethod.GET, + RequestMethod.POST}) + public void getById(HttpServletRequest request, HttpServletResponse response) { + //声明一个map集合,存储返回的结果信息 + Map result = new HashMap(); + result.put("flag", "0"); + result.put("msg", "执行失败"); + String id = request.getParameter("id"); + if (!TextUtils.isEmpty(id)) { + //根据id获取用户信息 + JLRUser back = service.getUser(id); + if (back != null) { + result.put("flag", "1"); + result.put("msg", "执行成功"); + result.put("data", back); + } + } else { + result.put("msg", "参数为空"); + } + //将结果信息响应到客户端 + RequestUtil.responseResult4Json(response, RequestUtil.ObjecttoJsonString(result)); + } + + /** + * 根据编号删除用户信息 + */ + @RequestMapping(value = "/deleteUser.do", produces = "text/html;chrset=UTF-8", method = {RequestMethod.GET, + RequestMethod.POST}) + public void deleteById(HttpServletRequest request, HttpServletResponse response) { + //声明一个map对象用于存放响应到客户端的数据 + Map result = new HashMap(); + result.put("flag", "0"); + result.put("msg", "执行失败"); + //获取参数 + String id = request.getParameter("id"); + if (!TextUtils.isEmpty(id)) { + //根据id获取用户信息 + JLRUser user = service.getUser(id); + //根据编号删除经用户信息 + boolean back = service.deleteUser(user); + if (back) { + result.put("flag", "1"); + result.put("msg", "执行成功"); + } + } else { + result.put("msg", "参数为空"); + } + //将数据信息响应到客户端 + RequestUtil.responseResult4Json(response, RequestUtil.ObjecttoJsonString(result)); + + } + + /** + * 修改密码 + */ + @RequestMapping(value = "/updatePassword.do", produces = "text/html;chrset=UTF-8", method = {RequestMethod.GET, + RequestMethod.POST}) + public void updatePassword(HttpServletRequest request, HttpServletResponse response) throws Exception { + //声明一个map集合,存储返回的结果信息 + Map result = new HashMap(); + result.put("flag", "0"); + result.put("msg", "执行失败"); + //获取参数 + String password = request.getParameter("password"); + String newPassword = request.getParameter("newPassword"); + String confirmPassword = request.getParameter("confirmPassword"); + String id = request.getParameter("id"); + if (!TextUtils.isEmpty(id) && !TextUtils.isEmpty(password) && !TextUtils.isEmpty(newPassword) && !TextUtils.isEmpty(confirmPassword)) { + try { + //根据id获取用户信息 + JLRUser jlrUser=service.getUser(id); + if(jlrUser != null){ + //判断密码是否正确 + boolean ps= BCrypt.checkpw(password,jlrUser.getPassword()); + if(ps){ + //将新密码放入对象中 + jlrUser.setPassword(newPassword); + //修改密码 + boolean back = service.updateUserInfo(jlrUser); + if (back) { + result.put("flag", "1"); + result.put("msg", "执行成功"); + } + }else{ + throw new Exception("密码错误"); + } + } + }catch (Exception e){ + e.printStackTrace(); + result.put("msg",e.getMessage()); + } + } else { + result.put("msg", "参数为空"); + } + //将数据响应到客户端 + RequestUtil.responseResult4Json(response, RequestUtil.ObjecttoJsonString(result)); + + } + +} diff --git a/src/main/java/com/zhongdao/jlr/business/dao/BaseDao.java b/src/main/java/com/zhongdao/jlr/business/dao/BaseDao.java new file mode 100644 index 0000000..ff2c153 --- /dev/null +++ b/src/main/java/com/zhongdao/jlr/business/dao/BaseDao.java @@ -0,0 +1,25 @@ +package com.zhongdao.jlr.business.dao; + +import com.dubh.common.dao.Dao; +import com.zhongdao.jlr.pojo.BaseMenu; +import org.springframework.stereotype.Repository; + +import java.util.List; + +/*** + * 接口 + */ +public interface BaseDao extends Dao{ + + /*** + * 获取子菜单信息 + * @return + */ + List getMenuInfo(); + + /*** + * 获取父级菜单信息 + * @return + */ + List getParentMenuInfo(); +} diff --git a/src/main/java/com/zhongdao/jlr/business/dao/CaseDao.java b/src/main/java/com/zhongdao/jlr/business/dao/CaseDao.java new file mode 100644 index 0000000..baf9734 --- /dev/null +++ b/src/main/java/com/zhongdao/jlr/business/dao/CaseDao.java @@ -0,0 +1,48 @@ +package com.zhongdao.jlr.business.dao; + +import com.dubh.common.dao.Dao; +import com.util.Vo; +import com.zhongdao.jlr.business.vo.UserOrderViewVO; +import org.json.JSONObject; + +import javax.servlet.http.HttpServletRequest; +import java.util.List; + +public interface CaseDao extends Dao { + + /** + * 救援工单信息 + * + * @param + * @return 用户信息 + */ + Vo casesListService(String state,HttpServletRequest request, String caseCode, String frame_code, String + rescueState,String createTime, String finishTime, String companyName,String plateNumber); + + /*** + * 获取进店救援案件信息 + * @param request + * @param caseCode + * @param frame_code + * @param createTime + * @param finishTime + * @return + */ + Vo caseEnterQuery(String state,HttpServletRequest request,String caseCode,String frame_code,String createTime,String finishTime); + + /**** + * 获取案件详情信息 + * @return + */ + Vo caseEnterInfo(HttpServletRequest request,String caseCode,String tid); + + /* + * 故障三级信息 + */ + JSONObject getTroubleCode(HttpServletRequest request) throws Exception; + + /* + * 详细页面保存 + */ + JSONObject caseDetailSave(HttpServletRequest request) throws Exception; +} diff --git a/src/main/java/com/zhongdao/jlr/business/dao/CouponDao.java b/src/main/java/com/zhongdao/jlr/business/dao/CouponDao.java new file mode 100644 index 0000000..fe97588 --- /dev/null +++ b/src/main/java/com/zhongdao/jlr/business/dao/CouponDao.java @@ -0,0 +1,53 @@ +package com.zhongdao.jlr.business.dao; + +import com.dubh.common.dao.Dao; +import com.util.Vo; +import com.zhongdao.jlr.business.vo.CouponRechargeJlr; +import com.zhongdao.jlr.pojo.CouponConsumeJlrPO; +import com.zhongdao.jlr.pojo.CouponRechargeJlrPO; + +import java.util.List; + +public interface CouponDao extends Dao { + + /** + * 代金券模糊搜索 + */ + public Vo searchConsume(String vinCode, String electronicAccounts, String userPhone, int page, int raws); + + /** + * 代金券消费记录 + */ + public Vo getCouponConsume(String vin, int page, int raws); + + + /** + * 代金券充值记录 + */ + public Vo getCouponRecharge(String vin, int page, int raws); + + /** + * 代金券消费记录(整体) + */ + public Vo queryCouponConsume(String vin, String account, String RecuseCompanyName, String rescueCompanyCode, String license, String phone, String state, String qureyDate1, String queryDate2, int page, int raws); + + /** + * 代金券消费修改 撤回、同意付款 + */ + public boolean updateConsumeState(List couponechargeList, String cId, String state); + + /** + * 充值记录 + */ + public Vo queryCouponRecharge(String vin, String account, String orderCode, String license, String phone, String qureyDate1, String queryDate2, int page, int raws); + + /** + * 代金券获取 + */ + public Vo getCoupon(String vin, String electronicAccounts, int page, int raws); + + /** + * 代金券消费 + */ + public boolean consume(CouponConsumeJlrPO couponConsumeJlr, List CouponRechargeJlrs); +} diff --git a/src/main/java/com/zhongdao/jlr/business/dao/EnterpriseDao.java b/src/main/java/com/zhongdao/jlr/business/dao/EnterpriseDao.java new file mode 100644 index 0000000..7e91f48 --- /dev/null +++ b/src/main/java/com/zhongdao/jlr/business/dao/EnterpriseDao.java @@ -0,0 +1,50 @@ +package com.zhongdao.jlr.business.dao; + +import com.dubh.common.dao.Dao; +import com.util.Vo; +import com.zhongdao.jlr.pojo.BaseUser; +import com.zhongdao.jlr.pojo.EnterpriseJlr; + +/*** + * 接口 + */ +public interface EnterpriseDao extends Dao { + + /**** + * 获取经销商维护信息 + * @param name + * @param page + * @param rows + * @return + */ + public Vo searchEnterprise(String name,String abbrCode, + Integer page, Integer rows); + + /*** + * 删除经销商信息 + * @param id + * @return + */ + public boolean deleteById(String id); + + /*** + * 保存经销商信息 + * @param enterprise + * @return + */ + public boolean putEnterprise(EnterpriseJlr enterprise); + + /**** + * 保存用户信息 + * @param systemUser + * @return + */ + boolean putSystemUser(BaseUser systemUser); + + /*** + * 根据id查询经销商 + * @param id + * @return + */ + public EnterpriseJlr getById(String id); +} diff --git a/src/main/java/com/zhongdao/jlr/business/dao/OrderCheckDao.java b/src/main/java/com/zhongdao/jlr/business/dao/OrderCheckDao.java new file mode 100644 index 0000000..940887a --- /dev/null +++ b/src/main/java/com/zhongdao/jlr/business/dao/OrderCheckDao.java @@ -0,0 +1,51 @@ +package com.zhongdao.jlr.business.dao; + +import com.dubh.common.dao.Dao; +import com.util.Vo; +import net.sf.json.JSONObject; + +import javax.servlet.http.HttpServletRequest; + +/*** + * 接口 + */ +public interface OrderCheckDao extends Dao{ + + /** + * 服务费用核对信息 + * + * @param + * @return 用户信息 + */ + public Vo list(HttpServletRequest request, int page, int raws, String orderCode, String queryDate1, String rescueCompanyName, String queryDate2, String check_state); + + /** + * 服务费用信息 + * + * @param + * @return 用户信息 + */ + public Vo lists(HttpServletRequest request, int page, int raws, String code, String orderCode, String queryDate1, String rescueCompanyName, String queryDate2, String check_state,String state); + + /*** + * 导出 + * @param request + * @param code + * @param orderCode + * @param queryDate1 + * @param rescueCompanyName + * @param queryDate2 + * @param check_state + * @return + */ + JSONObject exportData(HttpServletRequest request, String code, String orderCode, String queryDate1, String rescueCompanyName, String queryDate2, String check_state); + + /*** + * 修改服务信息 + * @param uid + * @param totalFee + * @return + */ + boolean updateInfo(String uid,String totalFee); + +} diff --git a/src/main/java/com/zhongdao/jlr/business/dao/RoleDao.java b/src/main/java/com/zhongdao/jlr/business/dao/RoleDao.java new file mode 100644 index 0000000..c36803d --- /dev/null +++ b/src/main/java/com/zhongdao/jlr/business/dao/RoleDao.java @@ -0,0 +1,62 @@ +package com.zhongdao.jlr.business.dao; + +import com.dubh.common.dao.Dao; +import com.util.Vo; +import com.zhongdao.jlr.business.vo.JLRMenu; +import com.zhongdao.jlr.pojo.BaseMenu; +import com.zhongdao.jlr.pojo.JLRAuthority; +import com.zhongdao.jlr.pojo.JLRRole; +import com.zhongdao.jlr.pojo.JLRUser; + +import javax.servlet.http.HttpServletRequest; +import java.util.List; + +/*** + * 接口 + */ +public interface RoleDao extends Dao{ + + /*** + * 获取角色信息 + * @param request + * @param name + * @return + */ + Vo getRoleInfo(HttpServletRequest request, String name); + + /*** + * 获取树的信息 + * @return + */ + List getTreeInfo(); + + /*** + * 添加角色信息 + */ + boolean updateRoleInfo(JLRRole jlrRole); + + /*** + * 添加角色权限信息 + */ + boolean updateRolesInfo(JLRAuthority jlrAuthority); + + /*** + * 根据id获取角色信息 + * @return + */ + JLRRole getUser(String id); + + /*** + * 根据角色id获取菜单信息 + * @param id + * @return + */ + List getMenu(String id); + + /*** + * 删除权限信息 + * @param id + * @return + */ + boolean deleteSupplier(Integer id); +} diff --git a/src/main/java/com/zhongdao/jlr/business/dao/SupplierDao.java b/src/main/java/com/zhongdao/jlr/business/dao/SupplierDao.java new file mode 100644 index 0000000..ba3040d --- /dev/null +++ b/src/main/java/com/zhongdao/jlr/business/dao/SupplierDao.java @@ -0,0 +1,104 @@ +package com.zhongdao.jlr.business.dao; + +import com.dubh.common.dao.Dao; +import com.util.Vo; +import com.zhongdao.jlr.business.vo.Contract; +import com.zhongdao.jlr.business.vo.Destination; +import com.zhongdao.jlr.business.vo.Enterprise; +import com.zhongdao.jlr.pojo.JLRDestination; +import com.zhongdao.jlr.pojo.JLRSupplier; +import com.zhongdao.jlr.pojo.JLRUserContract; + +import javax.servlet.http.HttpServletRequest; +import java.util.List; + +/*** + * 接口 + */ +public interface SupplierDao extends Dao{ + + /*** + * 获取合同信息并分页展示 + * @param request + * @return + */ + Vo getContractInfo(HttpServletRequest request,String name,String id); + + /*** + * 获取指定的合同信息 + * @return + */ + List getAssignContract(String id); + + /*** + * 获取指定的目的地信息 + * @param id + * @return + */ + List getAssignDestination(String id); + + /*** + * 获取指定的供应商信息 + * @param id + * @return + */ + List getAssignEnterprise(String id); + + /*** + * 获取供应商信息并分页展示 + * @param request + * @return + */ + Vo getEnterpriseInfo(HttpServletRequest request,String name,String id); + + + /*** + * 获取合同下的目的地信息并分页展示 + * @param request + * @return + */ + Vo getDestination(HttpServletRequest request,String name,String id); + + /*** + * 为用户指定合同 + * @return + */ + boolean insertContractInfo(JLRUserContract jlrUserContract); + + /*** + * 指定目的地 + * @return + */ + boolean insertDestinationInfo(JLRDestination jlrDestination); + + /*** + * 指定供应商 + * @return + */ + boolean insertEnterpriseInfo(JLRSupplier jlrSupplier); + + /*** + * 删除指定的合同 + * @return + */ + boolean deleteContractInfo(int cid,int id); + + /*** + * 删除指定的供应商 + * @return + */ + boolean deleteEnterpriseInfo(int sid,int id); + + /*** + * 删除指定的目的地 + * @return + */ + boolean deleteDestinationInfo(int did,int id); + + /*** + *根据用户id获取合同信息 + * @param id + * @return + */ + List getContract(String id); +} diff --git a/src/main/java/com/zhongdao/jlr/business/dao/UserInfoDao.java b/src/main/java/com/zhongdao/jlr/business/dao/UserInfoDao.java new file mode 100644 index 0000000..30da9b8 --- /dev/null +++ b/src/main/java/com/zhongdao/jlr/business/dao/UserInfoDao.java @@ -0,0 +1,51 @@ +package com.zhongdao.jlr.business.dao; + +import com.dubh.common.dao.Dao; +import com.util.Vo; +import com.zhongdao.jlr.pojo.BaseRole; +import com.zhongdao.jlr.pojo.EnterpriseJlr; +import com.zhongdao.jlr.pojo.JLRRole; +import com.zhongdao.jlr.pojo.JLRUser; + +import javax.servlet.http.HttpServletRequest; +import java.util.List; + +public interface UserInfoDao extends Dao { + + /*** + * 获取角色信息 + * @return + */ + List getRoleInfo(); + + /*** + * 获取经销商信息 + * @return + */ + List getEnterpriseInfo(); + + /*** + * 获取用户信息 + * @return + */ + Vo getUserInfo(HttpServletRequest request, String name, String phone,String role,String username); + + /*** + * 添加或更改用户信息 + */ + boolean updateUserInfo(JLRUser user); + + + /*** + * 获取用户信息 + * @return + */ + JLRUser getUser(String id); + + /*** + * 根据编号删除用户 + * @param user + * @return + */ + boolean deleteUser(JLRUser user); +} diff --git a/src/main/java/com/zhongdao/jlr/business/dao/impl/BaseDaoImpl.java b/src/main/java/com/zhongdao/jlr/business/dao/impl/BaseDaoImpl.java new file mode 100644 index 0000000..f75ed5c --- /dev/null +++ b/src/main/java/com/zhongdao/jlr/business/dao/impl/BaseDaoImpl.java @@ -0,0 +1,99 @@ +package com.zhongdao.jlr.business.dao.impl; + +import com.dubh.common.dao.hibernate.BaseDaoHibernate; +import com.zhongdao.jlr.business.dao.BaseDao; +import com.zhongdao.jlr.business.vo.LoginUserVo; +import com.zhongdao.jlr.pojo.BaseMenu; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Repository; + +import javax.servlet.http.HttpServletRequest; +import java.util.ArrayList; +import java.util.List; + +/*** + * 登录 + */ +@Repository("baseDaoImpl") +public class BaseDaoImpl extends BaseDaoHibernate implements BaseDao { + + @Autowired + private HttpServletRequest request; + + @Override + public List getMenuInfo() { + //获取登录信息 + LoginUserVo logininfo=(LoginUserVo)request.getSession().getAttribute("logininfo"); + List lists=new ArrayList<>(); + List list=null; + try { + String sql = "select id, parent_id, name, action " + + "from jlr_menu " + + "where id in (" + + "select menu_id from jlr_role_authority " + + "where role_id ="+logininfo.getRole_id()+")"; + //获取菜单信息 + list = getRsBySql(sql); + //遍历菜单信息 + if (list != null && list.size() > 0) { + for (int i = 0; i < list.size(); i++) { + //声明一个菜单对象并将信息放入对象里面 + BaseMenu baseMenu = new BaseMenu(); + Object[] objects = (Object[]) list.get(i); + baseMenu.setId(Integer.valueOf(objects[0].toString())); + baseMenu.setParent_id(Integer.valueOf(objects[1] == null ? "0" : objects[1].toString())); + baseMenu.setName(objects[2] == null ? "" : objects[2].toString()); + baseMenu.setAction(objects[3] == null ? "" : objects[3].toString()); + //将对象放入集合中 + lists.add(baseMenu); + } + } + }catch (Exception ex){ + ex.printStackTrace(); + return null; + } + return lists; + } + + @Override + public List getParentMenuInfo() { + //获取登录信息 + LoginUserVo logininfo=(LoginUserVo)request.getSession().getAttribute("logininfo"); + //将角色编号存入集合中 + List lists=new ArrayList<>(); + List list=null; + try { + String sql = "select b.id,b.parent_id,b.name,b.action " + + "from (select parent_id " + + "from (select r.id," + + "r.role_id,r.menu_id,p.parent_id parent_id,p.id n,p.name,p.action" + + " from jlr_role_authority r " + + "inner join jlr_menu p on" + + " r.menu_id=p.id " + + "where role_id="+logininfo.getRole_id()+") m " + + "group by " + + "m.parent_id) m " + + "inner join jlr_menu b on m.parent_id=b.id"; + //获取父级菜单信息 + list = getRsBySql(sql); + //遍历菜单信息 + if (list != null && list.size() > 0) { + for (int i = 0; i < list.size(); i++) { + //声明一个菜单对象并将信息放入对象里面 + BaseMenu baseMenu = new BaseMenu(); + Object[] objects = (Object[]) list.get(i); + baseMenu.setId(Integer.valueOf(objects[0].toString())); + baseMenu.setParent_id(Integer.valueOf(objects[1] == null ? "0" : objects[1].toString())); + baseMenu.setName(objects[2] == null ? "" : objects[2].toString()); + baseMenu.setAction(objects[3] == null ? "" : objects[3].toString()); + //将对象放入集合中 + lists.add(baseMenu); + } + } + }catch (Exception ex){ + ex.printStackTrace(); + return null; + } + return lists; + } +} diff --git a/src/main/java/com/zhongdao/jlr/business/dao/impl/CaseDaoImpl.java b/src/main/java/com/zhongdao/jlr/business/dao/impl/CaseDaoImpl.java new file mode 100644 index 0000000..27ae20d --- /dev/null +++ b/src/main/java/com/zhongdao/jlr/business/dao/impl/CaseDaoImpl.java @@ -0,0 +1,438 @@ +package com.zhongdao.jlr.business.dao.impl; + +import com.dubh.common.dao.hibernate.BaseDaoHibernate; +import com.util.UtilTools; +import com.util.Vo; +import com.zhongdao.jlr.business.dao.CaseDao; +import com.zhongdao.jlr.business.vo.LoginUserVo; +import com.zhongdao.jlr.business.vo.PageInfo; +import com.zhongdao.jlr.pojo.JLRepqr; +import org.apache.commons.lang.StringUtils; +import org.apache.http.util.TextUtils; +import org.json.JSONObject; +import org.springframework.stereotype.Repository; +import javax.servlet.http.HttpServletRequest; +import java.text.SimpleDateFormat; +import java.util.ArrayList; +import java.util.Date; +import java.util.List; + +@Repository("caseDaoImpl") +public class CaseDaoImpl extends BaseDaoHibernate implements CaseDao { + + private final static SimpleDateFormat df = new SimpleDateFormat("yyyy/MM/dd"); + + @Override + public Vo casesListService(String state,HttpServletRequest request, String caseCode, String frame_code, String rescueState, String createTime, String finishTime, String companyName,String plateNumber) { + //获取登录信息 + LoginUserVo logininfo=(LoginUserVo)request.getSession().getAttribute("logininfo"); + Vo vo=new Vo(); + //声明一个分页对象 + PageInfo pageInfo=new PageInfo(); + //获取页数和一页显示多少行并将其放入对象中 + pageInfo.setPage(UtilTools.getPage(request)); + pageInfo.setRows(UtilTools.getRows(request)); + //sql动态拼接 + StringBuffer sql=null; + //如果state为0则证明此操作为管理员,否则是经销商 + if("0".equals(state)){ + if("1".equals(rescueState)){ + sql = new StringBuffer("select DISTINCT u.code orderCode,u.create_time create_time," + + "u.vin_no vin_no,s.name name," + + "s.code code,b.name serviceName,u.order_status order_status,t.task_status task_status,u.plate_number plate_number from user_order u " + + "left join task_order t on t.user_order_id=u.id " + + "left join supplier s on t.service_supplier_id=s.id " + + "left join base_service b on b.id=u.service_id " + + "and u.order_status not in (51,53,55) " + + "where u.contract_id in (select contract_id from jlr_contract_visual where jlr_user_id ="+logininfo.getId()+")"); + }else if("2".equals(rescueState)){ + sql = new StringBuffer("select DISTINCT u.code orderCode,u.create_time create_time," + + "u.vin_no vin_no,s.name name," + + "s.code code,b.name serviceName,u.order_status order_status,t.task_status task_status,u.plate_number plate_number from user_order_his u " + + "left join task_order_his t on t.user_order_id=u.id " + + "left join supplier s on t.service_supplier_id=s.id " + + "left join base_service b on b.id=u.service_id " + + "where u.contract_id in (select contract_id from jlr_contract_visual where jlr_user_id ="+logininfo.getId()+") " + + "and u.order_status = 55"); + }else if("3".equals(rescueState)){ + sql = new StringBuffer("select DISTINCT u.code orderCode,u.create_time create_time," + + "u.vin_no vin_no,s.name name," + + "s.code code,b.name serviceName,u.order_status order_status,t.task_status task_status,u.plate_number plate_number from user_order_his u " + + "left join task_order_his t on t.user_order_id=u.id " + + "left join supplier s on t.service_supplier_id=s.id " + + "left join base_service b on b.id=u.service_id " + + "where u.contract_id in (select contract_id from jlr_contract_visual where jlr_user_id ="+logininfo.getId()+") " + + "and u.order_status = 51"); + }else { + sql = new StringBuffer("select DISTINCT u.code orderCode,u.create_time " + + "create_time,u.vin_no vin_no,s.name name, " + + "s.code code,b.name serviceName,u.order_status order_status,u.task_status task_status,u.plate_number plate_number from " + + "(select u.code code,u.create_time,u.vin_no,u.id,u.order_status," + + "u.service_id,t.service_supplier_id,u.contract_id contract_id,t.task_status task_status,u.plate_number plate_number from user_order_his u " + + "left join task_order_his t on t.user_order_id=u.id " + + "union select u.code code,u.create_time create_time,u.vin_no vin_no," + + "u.id id,u.order_status order_status,u.service_id service_id " + + ",t.service_supplier_id service_supplier_id,u.contract_id contract_id,t.task_status task_status,u.plate_number plate_number from user_order u " + + "left join task_order t on t.user_order_id=u.id " + + ") u " + + "left join supplier s on u.service_supplier_id=s.id " + + "left join base_service b on b.id=u.service_id " + + "left join jlr_supplier_visual v on v.supplier_id=s.id " + + "where " + + "u.contract_id in (select contract_id from jlr_contract_visual where jlr_user_id =" + logininfo.getId() + ") "); + } + }else if("1".equals(state)){ + if("1".equals(rescueState)){ + sql = new StringBuffer("select DISTINCT u.code orderCode,u.create_time create_time," + + "u.vin_no vin_no,s.name name," + + "s.code code,b.name serviceName,u.order_status order_status,t.task_status task_status,u.plate_number plate_number from user_order u " + + "left join task_order t on t.user_order_id=u.id " + + "left join supplier s on t.service_supplier_id=s.id " + + "left join base_service b on b.id=u.service_id " + + "left join jlr_supplier_visual v on v.supplier_id=s.id " + + "where u.contract_id in (select contract_id from jlr_contract_visual where jlr_user_id ="+logininfo.getId()+") " + + "and u.order_status not in (51,53,55)"); +// "and u.order_status = 31 " + +// "and v.jlr_user_id =" + logininfo.getId()); + }else if("2".equals(rescueState)){ + sql = new StringBuffer("select DISTINCT u.code orderCode,u.create_time create_time," + + "u.vin_no vin_no,s.name name," + + "s.code code,b.name serviceName,u.order_status order_status,t.task_status task_status,u.plate_number plate_number from user_order_his u " + + "left join task_order_his t on t.user_order_id=u.id " + + "left join supplier s on t.service_supplier_id=s.id " + + "left join base_service b on b.id=u.service_id " + + "left join jlr_supplier_visual v on v.supplier_id=s.id " + + "where u.contract_id in (select contract_id from jlr_contract_visual where jlr_user_id ="+logininfo.getId()+") "); +// "and u.order_status = 55 " + +// "and v.jlr_user_id =" + logininfo.getId()); + }else if("3".equals(rescueState)){ + sql = new StringBuffer("select DISTINCT u.code orderCode,u.create_time create_time," + + "u.vin_no vin_no,s.name name," + + "s.code code,b.name serviceName,u.order_status order_status,t.task_status task_status,u.plate_number plate_number from user_order_his u " + + "left join task_order_his t on t.user_order_id=u.id " + + "left join supplier s on t.service_supplier_id=s.id " + + "left join base_service b on b.id=u.service_id " + + "left join jlr_supplier_visual v on v.supplier_id=s.id " + + "where u.contract_id in (select contract_id from jlr_contract_visual where jlr_user_id ="+logininfo.getId()+") "); +// "and u.order_status = 51 " + +// "and v.jlr_user_id =" + logininfo.getId()); + }else { + sql = new StringBuffer("select DISTINCT u.code orderCode,u.create_time " + + "create_time,u.vin_no vin_no,s.name name, " + + "s.code code,b.name serviceName,u.order_status order_status,u.task_status task_status,u.plate_number plate_number from " + + "(select u.code code,u.create_time,u.vin_no,u.id,u.order_status," + + "u.service_id,t.service_supplier_id,u.contract_id contract_id,t.task_status task_status,u.plate_number plate_number from user_order_his u " + + "left join task_order_his t on t.user_order_id=u.id " + + "union select u.code code,u.create_time create_time,u.vin_no vin_no," + + "u.id id,u.order_status order_status,u.service_id service_id " + + ",t.service_supplier_id service_supplier_id,u.contract_id contract_id,t.task_status task_status,u.plate_number plate_number from user_order u " + + "left join task_order t on t.user_order_id=u.id " + + ") u " + + "left join supplier s on u.service_supplier_id=s.id " + + "left join base_service b on b.id=u.service_id " + + "left join jlr_supplier_visual v on v.supplier_id=s.id " + + "where " + + "u.contract_id in (select contract_id from jlr_contract_visual where jlr_user_id =" + logininfo.getId() + ")") ; +// "and u.order_status in (31,53,51,55) " + +// "and v.jlr_user_id =" + logininfo.getId()); + } + } + if (StringUtils.isNotBlank(frame_code)) { + sql.append(" and u.vin_no like '%" + frame_code + "%'"); + } + if (StringUtils.isNotBlank(caseCode)) { + sql.append(" and u.code like '%" + caseCode + "%'"); + } + if (StringUtils.isNotBlank(companyName)) { + sql.append(" and s.name like '%" + companyName + "%'"); + } + if (StringUtils.isNotBlank(plateNumber)) { + sql.append(" and u.plate_number like '%" + plateNumber + "%'"); + } + //开始时间 + if (StringUtils.isNotBlank(createTime)) { + sql.append(" and u.create_time >= '"+createTime+"'"); + } + // 结束时间 + if (StringUtils.isNotBlank(finishTime)) { + sql.append(" and u.create_time <= '"+finishTime+"'"); + } + String countSql=sql.toString(); + String info=sql.append(" limit "+pageInfo.getCurrentIndex()+","+pageInfo.getRows()).toString(); + try { + //获取救援信息总数 + List lists=getRsBySql(countSql); + //分页获取救援信息 + List list = getRsBySql(info); + if (list != null && list.size() > 0) { + vo.setRows(UtilTools.listTojsonArray(list, new String[]{"ORDER_CODE","CREATE_TIME","VIN_NO","NAME","CODE","SERVICE_NAME","STATUS","TASK_STATUS","PLATE_NUMBER"})); + } + if(lists != null && lists.size() > 0) { + vo.setTotal(lists.size()); + } + } catch (Exception e) { + e.printStackTrace(); + return null; + } + return vo; + } + + @Override + public Vo caseEnterQuery(String state,HttpServletRequest request, String caseCode, String frame_code, String createTime, String finishTime) { + //获取登录信息 + LoginUserVo logininfo=(LoginUserVo)request.getSession().getAttribute("logininfo"); + Vo vo=new Vo(); + //声明一个分页对象 + PageInfo pageInfo=new PageInfo(); + //获取页数和一页显示多少行并将其放入对象中 + pageInfo.setPage(UtilTools.getPage(request)); + pageInfo.setRows(UtilTools.getRows(request)); + //sql动态拼接 + StringBuffer sql=null; + if("0".equals(state)){ + sql = new StringBuffer("select DISTINCT u.tid tid,u.id id,u.code orderCode,u.create_time " + + "create_time,u.vin_no vin_no,s.name name, "+ + "s.code code,b.name serviceName,u.order_status order_status,w.state state,w.update_time update_time from "+ + "(select t.create_time createTime,t.code taskCode,u.code code,u.create_time,u.vin_no,u.id id,u.order_status," + + "u.service_id,t.service_supplier_id,u.contract_id contract_id,t.id tid from user_order_his u "+ + "left join task_order_his t on t.user_order_id=u.id "+ + "union select t.create_time createTime,t.code taskCode,u.code code,u.create_time create_time,u.vin_no vin_no," + + "u.id id,u.order_status order_status,u.service_id service_id "+ + ",t.service_supplier_id service_supplier_id,u.contract_id contract_id,t.id tid from user_order u "+ + "left join task_order t on t.user_order_id=u.id "+ + ") u "+ + "left join supplier s on u.service_supplier_id=s.id "+ + "left join base_service b on b.id=u.service_id "+ + "left join jlr_epqr w on w.task_order_id = u.tid " + + "where b.id in (1041,1050,1500,1501,1520,1521) " + + "and u.order_status in (21,23,25,28,31) " + + "and w.state = 1 " + + "and u.contract_id in (select contract_id from jlr_contract_visual where jlr_user_id ="+logininfo.getId()+")"); + }else{ + sql = new StringBuffer("select DISTINCT u.tid tid,u.id id,u.code orderCode,u.create_time " + + "create_time,u.vin_no vin_no,s.name name, "+ + "s.code code,b.name serviceName,u.order_status order_status,w.state state,w.update_time update_time from "+ + "(select t.create_time createTime,t.code taskCode,u.code code,u.create_time,u.vin_no,u.id id,u.order_status," + + "u.service_id,t.service_supplier_id,u.contract_id contract_id,u.contract_destination_id destination_code,t.id tid from user_order_his u "+ + "left join task_order_his t on t.user_order_id=u.id "+ + "union select t.create_time createTime,t.code taskCode,u.code code,u.create_time create_time,u.vin_no vin_no," + + "u.id id,u.order_status order_status,u.service_id service_id "+ + ",t.service_supplier_id service_supplier_id,u.contract_id contract_id,u.contract_destination_id destination_code,t.id tid from user_order u "+ + "left join task_order t on t.user_order_id=u.id "+ + ") u "+ + "left join supplier s on u.service_supplier_id=s.id "+ + "left join jlr_epqr w on w.task_order_id = u.tid " + + "left join base_service b on b.id=u.service_id "+ + "where b.id in (1041,1050,1500,1501,1520,1521) " + + "and u.order_status in (21,23,25,28,31) " + + "and u.destination_code in (select contract_destination_id from jlr_destination_visual where jlr_user_id ="+logininfo.getId()+")"); + } + if (StringUtils.isNotBlank(frame_code)) { + sql.append(" and u.vin_no like '%" + frame_code + "%'"); + } + if (StringUtils.isNotBlank(caseCode)) { + sql.append(" and u.code like '%" + caseCode + "%'"); + } + //开始时间 + if (StringUtils.isNotBlank(createTime)) { + sql.append(" and u.create_time >= '"+createTime+"'"); + } + // 结束时间 + if (StringUtils.isNotBlank(finishTime)) { + sql.append(" and u.create_time <= '"+finishTime+"'"); + } + String countSql=sql.append(" order by w.update_time desc").toString(); + String info=sql.append(" limit "+pageInfo.getCurrentIndex()+","+pageInfo.getRows()).toString(); + try { + //获取进店救援信息总数 + List lists=getRsBySql(countSql); + //分页获取进店救援信息 + List list = getRsBySql(info); + if (list != null && list.size() > 0) { + vo.setRows(UtilTools.listTojsonArray(list, new String[]{"TID","ID","ORDER_CODE","CREATE_TIME","VIN_NO","NAME","CODE","SERVICE_NAME","STATUS","STATE"})); + } + if(lists != null && lists.size() > 0) { + vo.setTotal(lists.size()); + } + } catch (Exception e) { + e.printStackTrace(); + return null; + } + return vo; + } + + @Override + public Vo caseEnterInfo(HttpServletRequest request, String caseCode,String tid) { + //获取用户信息 + LoginUserVo logininfo=(LoginUserVo)request.getSession().getAttribute("logininfo"); + //声明一个vo对象 + Vo vo=new Vo(); + //创建sql + StringBuffer sql=new StringBuffer("select DISTINCT u.id uid,u.tid tid,u.code orderCode,u.create_time " + + "create_time,u.vin_no vin_no,s.name name, "+ + "s.code code,b.name serviceName,u.model model,u.plate_number plate_number,m.start_time start_time,j.level_name levelName," + + "u.finish_time finish_time,j.level_name levelNames,d.name dName,d.brand_name brandName,e.dms_code dms_code," + + "e.trouble_reason trouble_reason,e.mileage mileage,e.dphm dphm,e.arrive_time arrive_time,e.remaer remaer," + + "e.choice_type choice_type,e.trouble_code trouble_code,e.repair repair,e.ref_time ref_time,e.finish_time finishes_time" + + ",e.hand_time hand_time,e.use_time use_time,e.state state from "+ + "(select u.code code,u.create_time,u.vin_no,u.order_status," + + "u.service_id,t.service_supplier_id,u.contract_id contract_id,u.contract_destination_id destination_code," + + "u.model model,u.plate_number plate_number,u.member_service_group_id member_service_group_id,u.finish_time finish_time," + + "u.malfunction_level1 malfunction_level1,u.malfunction_level2 malfunction_level2,u.id id,u.contract_destination_id contract_destination_id,t.id tid " + + "from user_order_his u "+ + "left join task_order_his t on t.user_order_id=u.id "+ + "union select u.code code,u.create_time create_time,u.vin_no vin_no," + + "u.order_status order_status,u.service_id service_id "+ + ",t.service_supplier_id service_supplier_id,u.contract_id contract_id,u.contract_destination_id destination_code," + + "u.model model,u.plate_number plate_number,u.member_service_group_id member_service_group_id,u.finish_time finish_time," + + "u.malfunction_level1 malfunction_level1,u.malfunction_level2 malfunction_level2,u.id id,u.contract_destination_id contract_destination_id,t.id tid " + + "from user_order u "+ + "left join task_order t on t.user_order_id=u.id "+ + ") u "+ + "left join supplier s on u.service_supplier_id = s.id "+ + "left join base_service b on b.id = u.service_id " + + "left join contract_member_service_group m on u.member_service_group_id=m.id " + + "left join contract_trouble_level j on j.id = u.malfunction_level1 " + + "left join contract_destination d on d.id = u.contract_destination_id " + + "left join jlr_epqr e on e.task_order_id = u.tid " + + "where u.id = '" + caseCode+"'"); + if (StringUtils.isNotBlank(tid)) { + sql.append(" and u.tid = '" + tid +"'"); + } + try { + //获取案件详情信息 + List list = getRsBySql(sql.toString()); + if (list != null && list.size() > 0) { + vo.setRows(UtilTools.listTojsonArray(list, new String[]{"UID","TID","ORDER_CODE", "CREATE_TIME", "VIN_NO", "NAME", "CODE", "SERVICE_NAME", "MODEL", "PLATENUMBER", "STARTTIME", "LEVELNAME1", "FINISHTIME", "LEVELNAME2", "DNAME", "BRANDNAME", "DMS", "REASON", "MILEAGE", "DNUMBER", "ARRIVETIME", "REMARK", "CHOICE", "PART", "REPAIR", "REFTIME", "FINTIME", "HANDTIME", "USETIME","STATE"})); + } + }catch (Exception e){ + e.printStackTrace(); + return null; + } + return vo; + } + + @Override + public JSONObject getTroubleCode(HttpServletRequest request) throws Exception { + //获取参数 + String firstParam = request.getParameter("firstParam"); + String flag = request.getParameter("flag"); + //声明一个对象 + JSONObject jsonObject = new JSONObject(); + //创建集合 + List idList = new ArrayList(); + List listfirst = new ArrayList();// 祖 + List listSecond = new ArrayList();// 父 + + // 第一级系统 + if ("1".equals(flag)) { + String sql = "select id,name from jlr_trouble_parts where parent_id = 0"; + //获取一级故障信息 + List list = getRsBySql(sql); + //遍历获取到的信息将其放入对象中并将对象放入集合中 + if (list != null && list.size() > 0) { + for (int i = 0; i < list.size(); i++) { + Object[] objects = (Object[]) list.get(i); + listfirst.add(objects[1].toString()); + idList.add(objects[0].toString()); + } + jsonObject.put("listfirst", listfirst); + jsonObject.put("idList", idList); + } + } + // 第二级系统和第三级 + if ("2".equals(flag) || "3".equals(flag)) { + String sql = "select id,name from jlr_trouble_parts where parent_id ="+firstParam; + //获取二级故障和三级故障信息将其放入对象中并将对象放入集合中 + List list = getRsBySql(sql); + if (list != null && list.size() > 0) { + for (int i = 0; i < list.size(); i++) { + Object[] objects = (Object[]) list.get(i); + listSecond.add(objects[1].toString()); + idList.add(objects[0].toString()); + } + jsonObject.put("listSecond", listSecond); + jsonObject.put("idList", idList); + } + } + return jsonObject; + } + + @Override + public JSONObject caseDetailSave(HttpServletRequest request) throws Exception { + //声明一个object对象 + JSONObject jsonObject = new JSONObject(); + //获取参数 + String uid = request.getParameter("uid"); + String tid = request.getParameter("tid"); + String mileage = request.getParameter("mileage"); + String dphm = request.getParameter("dphm"); + Date arriveTime = TextUtils.isBlank(request.getParameter("arriveTime")) ? null : df.parse(request.getParameter + ("arriveTime")); + Date refTime = TextUtils.isBlank(request.getParameter("refTime")) ? null : df.parse(request.getParameter + ("refTime")); + Date repairFinishTime = TextUtils.isBlank(request.getParameter("repairFinishTime")) ? null : df.parse(request + .getParameter("repairFinishTime")); + Date handTime = TextUtils.isBlank(request.getParameter("handTime")) ? null : df.parse(request.getParameter + ("handTime")); + String finalChoice = request.getParameter("finalChoice"); + Date useTime = TextUtils.isBlank(request.getParameter("useTime")) ? null : df.parse(request.getParameter + ("useTime")); + String troubleCodeValue = request.getParameter("troubleCodeValue"); + String troubleReasonVaule = request.getParameter("troubleReasonValue"); + String repair = request.getParameter("repair"); + String remark = request.getParameter("remark"); + String dmsCode = request.getParameter("dmsCode"); + String state = request.getParameter("state"); + JLRepqr epqrJlr = null; + //创建一个时间对象 + Date date=new Date(); + try { + //创建一个sql + StringBuffer hql =new StringBuffer("from JLRepqr where order_id= " + uid); + if(tid != null && tid != ""){ + hql.append(" and task_order_id ="+tid); + } + //根据订单id获取案件详情信息 + List list = getRsByHql(hql.toString()); + if (list != null && list.size() > 0) { + epqrJlr = (JLRepqr) list.get(0); + } else { + //若信息为空则证明该操作为添加 + epqrJlr = new JLRepqr(); + //生成主键id并放入对象中 + epqrJlr.setId(Integer.valueOf((System.currentTimeMillis() + "").substring(4))); + epqrJlr.setCreate_time(date); + } + if(!TextUtils.isBlank(tid)){ + epqrJlr.setTask_order_id(Integer.valueOf(tid)); + }else { + epqrJlr.setTask_order_id(0); + } + epqrJlr.setUpdate_time(date); + epqrJlr.setHand_time(handTime); + epqrJlr.setState(Integer.valueOf(state)); + epqrJlr.setMileage(TextUtils.isBlank(mileage) ? 0 : Integer.valueOf(mileage)); + epqrJlr.setDphm(dphm); + epqrJlr.setArrive_time(arriveTime); + epqrJlr.setRef_time(refTime); + epqrJlr.setFinish_time(repairFinishTime); + epqrJlr.setChoice_type(finalChoice); + epqrJlr.setUse_time(useTime); + epqrJlr.setTrouble_reason(troubleReasonVaule); + epqrJlr.setTrouble_code(troubleCodeValue); + epqrJlr.setRepair(repair); + epqrJlr.setRemaer(remark); + epqrJlr.setOrder_id(Integer.valueOf(uid)); + epqrJlr.setDms_code(dmsCode); + saveOrUpdate(epqrJlr); + jsonObject.put("sign", true); + //回传json对象 + return jsonObject; + } catch (Exception e) { + e.printStackTrace(); + jsonObject.put("sign", false); + return jsonObject; + } + } +} diff --git a/src/main/java/com/zhongdao/jlr/business/dao/impl/CouponDaoImpl.java b/src/main/java/com/zhongdao/jlr/business/dao/impl/CouponDaoImpl.java new file mode 100644 index 0000000..a691d90 --- /dev/null +++ b/src/main/java/com/zhongdao/jlr/business/dao/impl/CouponDaoImpl.java @@ -0,0 +1,394 @@ +package com.zhongdao.jlr.business.dao.impl; + +import com.dubh.common.dao.hibernate.BaseDaoHibernate; +import com.util.UtilTools; +import com.util.Vo; +import com.zhongdao.jlr.business.dao.CouponDao; +import com.zhongdao.jlr.business.vo.CouponConsumeJlr; +import com.zhongdao.jlr.business.vo.CouponJlrVO; +import com.zhongdao.jlr.business.vo.CouponRechargeJlr; +import com.zhongdao.jlr.business.vo.PageInfo; +import com.zhongdao.jlr.pojo.CouponConsumeJlrPO; +import com.zhongdao.jlr.pojo.CouponRechargeJlrPO; +import com.zhongdao.jlr.util.MTextUtils; +import org.apache.commons.lang.StringUtils; +import org.apache.http.util.TextUtils; +import org.hibernate.SQLQuery; +import org.hibernate.Session; +import org.hibernate.Transaction; +import org.springframework.stereotype.Repository; + +import java.text.SimpleDateFormat; +import java.util.ArrayList; +import java.util.List; + +@Repository("couponDaoImpl") +public class CouponDaoImpl extends BaseDaoHibernate implements CouponDao { + + @Override + public Vo searchConsume(String vin, String electronicAccounts,String userPhone, int page, int raws) { + //声明一个vo对象用来存储账户信息和账户数据总数 + Vo vo = new Vo(); + //声明一个分页类用来存储页数和每页多少条数据 + PageInfo pageInfo=new PageInfo(); + pageInfo.setPage(page); + pageInfo.setRows(raws); + try { + //sql动态拼接 + StringBuffer sql = new StringBuffer("select cj.electronic_accounts, cj.vin_code,cj.user_name,cj.user_phone,cj.license,cj.remark,ifNull((select sum((ifNull((recharge_count),0)-ifNull((consume_count),0))) as result from jlr_coupon_recharge j where j.overdue_time>NOW() and j.vin_code=cj.vin_code),0) as result ,cj.e_password from jlr_coupon cj where 1=1"); + if (!TextUtils.isEmpty(vin) || !TextUtils.isEmpty(electronicAccounts) || !TextUtils.isEmpty(userPhone)) { + if (!TextUtils.isEmpty(vin)) { + sql.append(" and cj.vin_code like '%" + vin + "%'"); + } + + if (!TextUtils.isEmpty(electronicAccounts)) { + sql.append(" and cj.electronic_accounts like '%" + electronicAccounts + "%'"); + } + if (!TextUtils.isEmpty(userPhone)) { + sql.append(" and cj.USER_PHONE like '%" + userPhone + "%'"); + } + } + String countSql=sql.toString(); + String sqlStr =sql.append(" limit "+pageInfo.getCurrentIndex()+","+pageInfo.getRows()).toString(); + List list = getRsBySql(sqlStr); + //声明一个list集合用来存储账户信息对象 + List resultList = new ArrayList<>(); + //遍历账户信息数据,并将每一个对象放入集合中 + for (Object[] obj : list) { + CouponJlrVO couponvo = new CouponJlrVO(); + couponvo.setElectronicAccounts(MTextUtils.objectToString(obj[0])); + couponvo.setVinCode(MTextUtils.objectToString(obj[1])); + couponvo.setUserName(MTextUtils.objectToString(obj[2])); + couponvo.setUserPhone(MTextUtils.objectToString(obj[3])); + couponvo.setLicense(MTextUtils.objectToString(obj[4])); + couponvo.setRemark(MTextUtils.objectToString(obj[5])); + couponvo.setCharge(MTextUtils.stringToDouble(MTextUtils.objectToString(obj[6]))); + couponvo.setPassword(MTextUtils.objectToString(obj[7])); + resultList.add(couponvo); + } + vo.setRows(resultList); + //获取账户数据总数 + int size = getRsCountsBySelectSql(countSql); + vo.setTotal(size); + } catch (Exception e) { + e.printStackTrace(); + return null; + } + return vo; + } + + @Override + public Vo getCouponConsume(String vin, int page, int raws) { + //声明一个分页类用来存储页数和每页多少条数据 + PageInfo pageInfo=new PageInfo(); + pageInfo.setPage(page); + pageInfo.setRows(raws); + //声明一个list集合用来存储用户代金券消费记录 + List lists=new ArrayList<>(); + //时间格式化转换 + SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyyMMddHHmmss"); + Vo vo = new Vo(); + try { + //获取用户代金券消费记录 + List list = getRsBySql("select vin_code,consume_count,consume_time,settlement_state,remark from jlr_coupon_consume where VIN_CODE='" + vin + "' order by consume_time desc limit "+pageInfo.getCurrentIndex()+","+pageInfo.getRows()); + //遍历用户代金券消费记录并将其放入list集合中 + if(list != null && list.size()>0){ + for (int i=0;i lists=new ArrayList<>(); + try { + //获取用户的代金券充值记录 + List list = getRsBySql("select task_order_id,recharge_count,service_name,overdue_time,recharge_time from jlr_coupon_recharge where VIN_CODE='" + vin + "' limit "+pageInfo.getCurrentIndex()+","+pageInfo.getRows()); + //遍历充值信息及其放入集合中 + if(list != null && list.size()>0){ + for (int i=0;i= '"+queryDate1+"'"); + } + + // 结束时间 + if (StringUtils.isNotBlank(queryDate2)) { + sql.append(" and c.CONSUME_TIME <= '"+queryDate2+"'"); + } + String countSql=sql.append("ORDER BY CONSUME_TIME DESC ").toString(); + String info=sql.append("limit "+pageInfo.getCurrentIndex()+","+pageInfo.getRows()).toString(); + try { + List list = getRsBySql(info); + if (list != null && list.size() > 0) { + vo.setRows(UtilTools.listTojsonArray(list, new String[]{"ID", "VIN_CODE","CONSUME_COUNT","ELECTRONIC_ACCOUNTS","USER_PHONE","LICENSE","NAME","SETTLEMENT_STATE","CONSUME_TIME","REPARIE_INFO","HITCH_INFO","SETTLE_TIME","CREATE_TIME","REMARK"})); + } + vo.setTotal(getRsCountsBySelectSql(countSql)); + } catch (Exception e) { + e.printStackTrace(); + } + return vo; + } + + @Override + public boolean updateConsumeState(List couponechargeList, String cId, String state) { + Session session = null; + Transaction tx = null; + try { + session = getSessionFactory().getCurrentSession().getSessionFactory().openSession(); + tx = session.beginTransaction(); + //sql动态拼接 + StringBuffer sql = new StringBuffer("update jlr_coupon_consume set SETTLEMENT_STATE = " + state); + if (StringUtils.isBlank(state)) { + return false; + } + if ("10".equals(state)) { + sql.append(", settle_time = NOW()"); + } + if (StringUtils.isBlank(cId)) { + return false; + } else { + sql.append(" where id in (" + cId + ")"); + } + //更改状态 + SQLQuery query = session.createSQLQuery(sql.toString()); + query.executeUpdate(); + + //回滚充值记录 + for (CouponRechargeJlrPO c : couponechargeList) { + session.saveOrUpdate(c); + } + //事务提交 + tx.commit(); + return true; + } catch (Exception e) { + if (tx != null) { + //事务回滚 + tx.rollback(); + } + e.printStackTrace(); + return false; + } finally { + try { + closeResouce(session); + } catch (Exception e) { + e.printStackTrace(); + return false; + } + } + + } + @Override + public Vo queryCouponRecharge(String vin, String account, String orderCode, String license, String phone, String queryDate1, String queryDate2, int page, int raws) { + Vo vo = new Vo(); + //声明一个分页类用来存储页数和每页多少条数据 + PageInfo pageInfo=new PageInfo(); + pageInfo.setPage(page); + pageInfo.setRows(raws); + //sql动态拼接 + StringBuffer sql = new StringBuffer( + "SELECT c.ID,c.VIN_CODE,u.code,c.RECHARGE_TIME,c.RECHARGE_COUNT,c.SEATE_NAME,c.REMARK,c.SERVICE_NAME,c.OVERDUE_TIME,c.CONSUME_COUNT,r.ELECTRONIC_ACCOUNTS,c.CREATE_TIME, " + + "r.LICENSE, r.USER_PHONE\n" + + "FROM jlr_coupon_recharge c LEFT JOIN jlr_coupon r ON c.VIN_CODE = r.VIN_CODE " + + "LEFT JOIN (SELECT ID,CODE FROM user_order union SELECT ID,CODE FROM user_order_his) u on u.id = c.order_id " + + "where 1=1 "); + if (StringUtils.isNotBlank(vin)) { + sql.append(" and c.VIN_CODE like '%" + vin + "%'"); + } + if (StringUtils.isNotBlank(account)) { + sql.append(" and r.ELECTRONIC_ACCOUNTS like '%" + account + "%'"); + } + if (StringUtils.isNotBlank(orderCode)) { + sql.append(" and c.task_order_id like '%" + orderCode + "%'"); + } + if (StringUtils.isNotBlank(phone)) { + sql.append(" and r.USER_PHONE like '%" + phone + "%'"); + } + if (StringUtils.isNotBlank(license)) { + sql.append(" and r.LICENSE like '%" + license + "%'"); + } + if (StringUtils.isNotBlank(queryDate1)) { + sql.append(" and c.RECHARGE_TIME >= '"+queryDate1+"'"); + } + // 结束时间 + if (StringUtils.isNotBlank(queryDate2)) { + sql.append(" and c.RECHARGE_TIME <= '"+queryDate2+"'"); + } + String countSql=sql.append(" ORDER BY c.CREATE_TIME DESC").toString(); + String info=sql.append(" limit "+pageInfo.getCurrentIndex()+","+pageInfo.getRows()).toString(); + try { + //获取充值记录 + List list = getRsBySql(info); + //获取充值记录总数 + List lists = getRsBySql(countSql); + if (list != null && list.size() > 0) { + vo.setRows(UtilTools.listTojsonArray(list, new String[]{"ID", "VIN_CODE", "ORDER_CODE", "RECHARGE_TIME", "RECHARGE_COUNT", "SEATE_NAME", "REMARK", "SERVICE_NAME", "OVERDUE_TIME", "CONSUME_COUNT", "ELECTRONIC_ACCOUNTS", "CREATE_TIME", "LICENSE", "USER_PHONE"})); + } + //获取充值记录总条数 + vo.setTotal(lists.size()); + } catch (Exception e) { + e.printStackTrace(); + } + return vo; + } + + @Override + public Vo getCoupon(String vin, String electronicAccounts, int page, int raws) { + Vo vo = new Vo(); + //声明一个分页对象 + PageInfo pageInfo=new PageInfo(); + //获取页数和一页显示多少行并将其放入对象中 + pageInfo.setPage(page); + pageInfo.setRows(raws); + try { +// select cj.electronic_accounts, cj.vin_code,cj.user_name,cj.user_phone,cj.license,cj.remark, +// nvl((select sum((nvl((recharge_count),0)-nvl((consume_count),0))) as result from coupon_recharge_jlr j where j.overdue_timeNOW() and j.vin_code=cj.vin_code),0) as result,cj.e_password from jlr_coupon cj where 1=1"); + if (!TextUtils.isEmpty(vin) || !TextUtils.isEmpty(electronicAccounts)) { + if (!TextUtils.isEmpty(vin)) { + sql.append(" and cj.vin_code='" + vin + "'"); + } + + if (!TextUtils.isEmpty(electronicAccounts)) { + sql.append(" and cj.electronic_accounts='" + electronicAccounts + "'"); + } + } + String count=sql.toString(); + String info=sql.append(" limit "+pageInfo.getCurrentIndex()+","+pageInfo.getRows()).toString(); + List list = getRsBySql(info); + List resultList = new ArrayList<>(); + for (Object[] obj : list) { + CouponJlrVO couponvo = new CouponJlrVO(); + couponvo.setElectronicAccounts(MTextUtils.objectToString(obj[0])); + couponvo.setVinCode(MTextUtils.objectToString(obj[1])); + couponvo.setUserName(MTextUtils.objectToString(obj[2])); + couponvo.setUserPhone(MTextUtils.objectToString(obj[3])); + couponvo.setLicense(MTextUtils.objectToString(obj[4])); + couponvo.setRemark(MTextUtils.objectToString(obj[5])); + couponvo.setCharge(MTextUtils.stringToDouble(MTextUtils.objectToString(obj[6]))); + couponvo.setPassword(MTextUtils.objectToString(obj[7])); + resultList.add(couponvo); + } + vo.setRows(resultList); + List lists = getRsBySql(count); + int size=lists.size(); + vo.setTotal(size); + } catch (Exception e) { + e.printStackTrace(); + return null; + } + return vo; + } + + @Override + public boolean consume(CouponConsumeJlrPO couponConsumeJlr, List couponRechargeJlrs) { + Session session = null; + Transaction tx = null; + try { + //获取session + session = getSessionFactory().getCurrentSession().getSessionFactory().openSession(); + //开启事务 + tx = session.beginTransaction(); + //保存或修改 + session.saveOrUpdate(couponConsumeJlr); + //批量保存或修改 + for (CouponRechargeJlrPO c : couponRechargeJlrs) { + session.saveOrUpdate(c); + } + //提交事务 + tx.commit(); + } catch (Exception e) { + if (tx != null) { + //事务回滚 + tx.rollback(); + } + e.printStackTrace(); + return false; + } finally { + try { + closeResouce(session); + } catch (Exception e) { + e.printStackTrace(); + return false; + } + } + + return true; + } +} diff --git a/src/main/java/com/zhongdao/jlr/business/dao/impl/EnterpriseDaoImpl.java b/src/main/java/com/zhongdao/jlr/business/dao/impl/EnterpriseDaoImpl.java new file mode 100644 index 0000000..0d26bdf --- /dev/null +++ b/src/main/java/com/zhongdao/jlr/business/dao/impl/EnterpriseDaoImpl.java @@ -0,0 +1,115 @@ +package com.zhongdao.jlr.business.dao.impl; + +import com.dubh.common.dao.hibernate.BaseDaoHibernate; +import com.util.Vo; +import com.zhongdao.jlr.business.dao.EnterpriseDao; +import com.zhongdao.jlr.business.vo.PageInfo; +import com.zhongdao.jlr.pojo.BaseUser; +import com.zhongdao.jlr.pojo.EnterpriseJlr; +import org.apache.http.util.TextUtils; +import org.springframework.stereotype.Repository; + +import java.util.ArrayList; +import java.util.List; + +/*** + * 经销商维护 + */ + +@Repository(value = "enterpriseDaoImpl") +public class EnterpriseDaoImpl extends BaseDaoHibernate implements EnterpriseDao { + + @Override + public Vo searchEnterprise(String name,String abbrCode, Integer page, Integer rows) { + Vo vo=new Vo(); + //声明一个List集合用于接收查询的数据 + List list=null; + //声明一个分页的实体类分页数据放入实体类中 + PageInfo pageInfo=new PageInfo(); + pageInfo.setPage(page); + pageInfo.setRows(rows); + //声明一个字符串对象并将所需要的sql语句拼接到字符串中 + StringBuffer hqlSb=new StringBuffer("select name,abbr_code,address,contact,id from jlr_enterprise where 1=1"); + if(!TextUtils.isEmpty(name)){ + hqlSb.append(" and name like '%"+name+"%'"); + } + if(!TextUtils.isEmpty(abbrCode)){ + hqlSb.append(" and abbr_code like '%"+abbrCode+"%'"); + } + //声明一个字符串用于查询经销商数据总数 + String sql=hqlSb.toString(); + String hql=hqlSb.append(" limit "+pageInfo.getCurrentIndex()+","+pageInfo.getRows()).toString(); + //声明一个List集合用于存放Enterprise对象 + List lists=new ArrayList<>(); + try { + list=getRsBySql(hql); + if(list != null && list.size()>0){ + //遍历查询到数据并将其放入Enterprise对象中 + for (int i=0;i= '"+queryDate1+"'"); + } + // 结束时间 + if (StringUtils.isNotBlank(queryDate2)) { + sql.append(" and u.create_time <= '"+queryDate2+"'"); + } + String countSql=sql.toString(); + String info=sql.append(" limit "+pageInfo.getCurrentIndex()+","+pageInfo.getRows()).toString(); + try { + //获取服务费用核对信息总数 + List lists=getRsBySql(countSql); + //分页获取服务费用核对信息 + List list = getRsBySql(info); + if (list != null && list.size() > 0) { + vo.setRows(UtilTools.listTojsonArray(list, new String[]{"ID","ORDER_CODE","VIN_NO","NAME","ADDRESS","SERVICE_NAME","CREATE_TIME","RECUESTATE","MONEY","ACCOUNTSTATE","MILE","DESTINATION"})); + } + if(lists != null && lists.size() > 0) { + vo.setTotal(lists.size()); + } + } catch (Exception e) { + e.printStackTrace(); + return null; + } + return vo; + } + + @Override + public Vo lists(HttpServletRequest request, int page, int raws, String code, String orderCode, String queryDate1, String rescueCompanyName, String queryDate2, String check_state,String state) { + //创建一个vo对象 + Vo vo=new Vo(); + //声明一个分页对象 + PageInfo pageInfo=new PageInfo(); + //获取页数和一页显示多少行并将其放入对象中 + pageInfo.setPage(page); + pageInfo.setRows(raws); + //获取用户信息 + LoginUserVo logininfo=(LoginUserVo)request.getSession().getAttribute("logininfo"); + //创建sql + StringBuffer sql=null; + System.out.println(state); + if("0".equals(state)){ + sql=new StringBuffer("select u.id id,u.code code,u.vin_no vin_no,s.name name,u.vehicle_point_address vehicle_point_address," + + "b.name serviceName,u.create_time,u.order_status,c.other_amount other_amount,c.account_status account_status," + + "c.settle_mileage_bc settle_mileage_bc,d.address address from user_order_his u " + + "left join task_order_his t on t.user_order_id = u.id " + + "left join supplier s on s.id = t.service_supplier_id " + + "left join jlr_supplier_visual j on j.supplier_id = s.id " + + "left join task_order_cost_his c on c.user_order_id = u.id " + + "left join base_service b on b.id = u.service_id " + + "left join contract_destination d on d.id = u.contract_destination_id " + + "where j.jlr_user_id = "+logininfo.getId()); + }else{ + sql=new StringBuffer("select u.id id,u.code code,u.vin_no vin_no,s.name name,u.vehicle_point_address vehicle_point_address," + + "b.name serviceName,u.create_time,u.order_status,c.other_amount other_amount,c.account_status account_status," + + "c.settle_mileage_bc settle_mileage_bc,d.address address from user_order_his u " + + "left join task_order_his t on t.user_order_id = u.id " + + "left join supplier s on s.id = t.service_supplier_id " + + "left join jlr_supplier_visual j on j.supplier_id = s.id " + + "left join task_order_cost_his c on c.user_order_id = u.id " + + "left join base_service b on b.id = u.service_id " + + "left join contract_destination d on d.id = u.contract_destination_id " + + "where c.account_status in (4,6) and j.jlr_user_id = "+logininfo.getId()); + } + + if (StringUtils.isNotBlank(code)) { + sql.append(" and u.vin_no like '%" + code + "%'"); + } + if (StringUtils.isNotBlank(orderCode)) { + sql.append(" and u.code like '%" + orderCode + "%'"); + } + if (StringUtils.isNotBlank(rescueCompanyName)) { + sql.append(" and s.name like '%" + rescueCompanyName + "%'"); + } + if ("8".equals(check_state)){ + sql.append(" and (c.account_status = 2 or c.account_status = 3)"); + }else if(StringUtils.isNotBlank(check_state)){ + sql.append(" and c.account_status = "+check_state); + } + //开始时间 + if (StringUtils.isNotBlank(queryDate1)) { + sql.append(" and u.create_time >= '"+queryDate1+"'"); + } + // 结束时间 + if (StringUtils.isNotBlank(queryDate2)) { + sql.append(" and u.create_time <= '"+queryDate2+"'"); + } + String countSql=sql.toString(); + String info=sql.append(" limit "+pageInfo.getCurrentIndex()+","+pageInfo.getRows()).toString(); + try { + //获取服务费用信息总数 + List lists=getRsBySql(countSql); + //分页获取服务费用信息 + List list = getRsBySql(info); + if (list != null && list.size() > 0) { + vo.setRows(UtilTools.listTojsonArray(list, new String[]{"ID","ORDER_CODE","VIN_NO","NAME","ADDRESS","SERVICE_NAME","CREATE_TIME","RECUESTATE","MONEY","ACCOUNTSTATE","MILE","DESTINATION"})); + } + if(lists != null && lists.size() > 0) { + vo.setTotal(lists.size()); + } + } catch (Exception e) { + e.printStackTrace(); + return null; + } + return vo; + } + + @Override + public JSONObject exportData(HttpServletRequest request, String code, String orderCode, String queryDate1, String rescueCompanyName, String queryDate2, String check_state) { + //创建集合 + List listExcel = new ArrayList(); + //声明一个json对象 + JSONObject jsonObject = new JSONObject(); + //获取用户信息 + LoginUserVo logininfo = (LoginUserVo) request.getSession().getAttribute("logininfo"); + //创建sql + StringBuffer sql=new StringBuffer("select u.code code,u.vin_no vin_no,s.name name,u.vehicle_point_address vehicle_point_address," + + "b.name serviceName,u.create_time,u.order_status,c.other_amount other_amount,c.account_status account_status," + + "c.settle_mileage_bc settle_mileage_bc,d.address address from user_order_his u " + + "left join task_order_his t on t.user_order_id = u.id " + + "left join supplier s on s.id = t.service_supplier_id " + + "left join jlr_supplier_visual j on j.supplier_id = s.id " + + "left join task_order_cost_his c on c.user_order_id = u.id " + + "left join base_service b on b.id = u.service_id " + + "left join contract_destination d on d.id = u.contract_destination_id " + + "where j.jlr_user_id = "+logininfo.getId()); + //动态拼接 + if (StringUtils.isNotBlank(code)) { + sql.append(" and u.vin_no like '%" + code + "%'"); + } + if (StringUtils.isNotBlank(orderCode)) { + sql.append(" and u.code like '%" + orderCode + "%'"); + } + if (StringUtils.isNotBlank(rescueCompanyName)) { + sql.append(" and s.name like '%" + rescueCompanyName + "%'"); + } + if ("2".equals(check_state)){ + sql.append(" and (c.account_status = 2 or c.account_status = 3)"); + }else if(StringUtils.isNotBlank(check_state)){ + sql.append(" and c.account_status = "+check_state); + } + //开始时间 + if (StringUtils.isNotBlank(queryDate1)) { + sql.append(" and u.create_time >= '"+queryDate1+"'"); + } + // 结束时间 + if (StringUtils.isNotBlank(queryDate2)) { + sql.append(" and u.create_time <= '"+queryDate2+"'"); + } + List list=null; + try { + //获取服务费用信息 + list = getRsBySql(sql.toString()); + OrderCheckExcelVO header = new OrderCheckExcelVO("案件编号", "VIN码", "供应商", "案件事发地", "案件目的地", "服务类型", "案发时间", "案件状态", "公里数", "结算状态", "金额"); + listExcel.add(header); + if (list != null && list.size() > 0) { + JSONArray array = UtilTools.listTojsonArray(list, new String[]{"CODE", "VIN_NO", "NAME", "ADDRESS", "SERVICE_NAME","CREATE_TIME","RECUESTATE", "MONEY","ACCOUNTSTATE","MILE","DESTINATION"}); + for (int i = 0; i < array.size(); i++) { + JSONObject json = array.getJSONObject(i); + OrderCheckExcelVO vo = new OrderCheckExcelVO( + json.getString("CODE"), + json.getString("VIN_NO"), + json.getString("NAME"), + json.getString("ADDRESS"), + json.getString("DESTINATION"), + json.getString("SERVICE_NAME"), + json.getString("CREATE_TIME"), + MTextUtils.getRecueName(json.getString("RECUESTATE")), + StringUtils.isBlank(json.getString("MILE")) ? "NA" : String.valueOf(json.getInt("MILE") / 1000), + MTextUtils.getAccountState(json.getString("ACCOUNTSTATE")), + getFee(json.getInt("RECUESTATE"), + StringUtils.isBlank(json.getString("MONEY")) ? 0 : json.getInt("MONEY"), + StringUtils.isBlank(json.getString("MONEY")) ? 0 : json.getInt("MONEY") + ) + ); + listExcel.add(vo); + } + } + //获取时间戳 + long dateTime = System.currentTimeMillis(); + //获取导出路径 + String path = request.getRealPath("attached") + File.separator + + logininfo.getName() + File.separator + dateTime + ".xlsx"; + String webUrl = UtilTools.getWebAddress(request) + File.separator + + "attached" + File.separator + logininfo.getName() + File.separator + dateTime + ".xlsx"; + boolean b = new UserOrderExcelVO().saveAll(listExcel, path); + if (b) { + jsonObject.put("result", "0");// 0:成功,1失败 + jsonObject.put("msg", "导出成功!"); + jsonObject.put("webUrl", webUrl); + } + + } catch (Exception e) { + e.printStackTrace(); + } + return jsonObject; + + } + + @Override + public boolean updateInfo(String uid, String totalFee) { + String sql="update task_order_cost_his set report_amount =" +totalFee+ ",guidance_amount = 800,account_status = 3 where user_order_id ="+uid; + try{ + updateSql(sql); + }catch (Exception e){ + e.printStackTrace(); + return false; + } + return true; + } + + private String getFee(int state, int total2, int other2) { + if (state == 4 || state == 6) { + return String.valueOf(total2 + other2); + } else { + return "NA"; + } + } +} diff --git a/src/main/java/com/zhongdao/jlr/business/dao/impl/RoleDaoImpl.java b/src/main/java/com/zhongdao/jlr/business/dao/impl/RoleDaoImpl.java new file mode 100644 index 0000000..44b239a --- /dev/null +++ b/src/main/java/com/zhongdao/jlr/business/dao/impl/RoleDaoImpl.java @@ -0,0 +1,216 @@ +package com.zhongdao.jlr.business.dao.impl; +import com.dubh.common.dao.hibernate.BaseDaoHibernate; +import com.util.UtilTools; +import com.util.Vo; +import com.zhongdao.jlr.business.dao.RoleDao; +import com.zhongdao.jlr.business.vo.JLRMenu; +import com.zhongdao.jlr.business.vo.JLRRMenu; +import com.zhongdao.jlr.business.vo.LoginUserVo; +import com.zhongdao.jlr.business.vo.PageInfo; +import com.zhongdao.jlr.pojo.BaseMenu; +import com.zhongdao.jlr.pojo.JLRAuthority; +import com.zhongdao.jlr.pojo.JLRRole; +import org.apache.commons.lang.StringUtils; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Repository; +import javax.servlet.http.HttpServletRequest; +import java.util.ArrayList; +import java.util.List; +@Repository +public class RoleDaoImpl extends BaseDaoHibernate implements RoleDao{ + + @Autowired + HttpServletRequest request; + + @Override + public Vo getRoleInfo(HttpServletRequest request, String name) { + //获取sessions用户信息 + LoginUserVo logininfo=(LoginUserVo)request.getSession().getAttribute("logininfo"); + Vo vo=new Vo(); + //声明一个分页对象 + PageInfo pageInfo=new PageInfo(); + //获取页数和一页显示多少行并将其放入对象中 + pageInfo.setPage(UtilTools.getPage(request)); + pageInfo.setRows(UtilTools.getRows(request)); + //sql动态拼接 + StringBuffer sql=new StringBuffer("select j.id,j.name,j.update_time from jlr_role j where j.delete_flag != 1 and j.id != "+ logininfo.getRole_id()); + if (StringUtils.isNotBlank(name)) { + sql.append(" and j.name like '%" + name + "%'"); + } + String countSql=sql.toString(); + String info=sql.append(" order by j.update_time desc limit "+pageInfo.getCurrentIndex()+","+pageInfo.getRows()).toString(); + try { + //获取角色信息总数 + List lists=getRsBySql(countSql); + //分页获取角色信息 + List list = getRsBySql(info); + if (list != null && list.size() > 0) { + //将角色信息放入vo对象中 + vo.setRows(UtilTools.listTojsonArray(list, new String[]{"ID","NAME","UPDATETIME"})); + } + if(lists != null && lists.size() > 0) { + vo.setTotal(lists.size()); + } + } catch (Exception e) { + e.printStackTrace(); + } + return vo; + } + + @Override + public List getTreeInfo() { + List listes=new ArrayList<>(); + List list=null; + try { + String sql = "select b.id,b.parent_id,b.name,b.action " + + "from (select parent_id " + + "from (select r.id," + + "r.role_id,r.menu_id,p.parent_id parent_id,p.id n,p.name,p.action" + + " from jlr_role_authority r " + + "inner join jlr_menu p on" + + " r.menu_id=p.id ) m " + + "group by " + + "m.parent_id) m " + + "inner join jlr_menu b on m.parent_id=b.id"; + //获取父级菜单信息 + list = getRsBySql(sql); + //获取子菜单 + List listess=getMenuInfo(); + //遍历菜单信息 + if (list != null && list.size() > 0) { + for (int i = 0; i < list.size(); i++) { + //将角色编号存入集合中 + List lists=new ArrayList<>(); + //声明一个菜单对象并将信息放入对象里面 + BaseMenu baseMenu = new BaseMenu(); + Object[] objects = (Object[]) list.get(i); + //声明一个tree对象 + JLRMenu jlrMenu= new JLRMenu(); + //将id和名称分别存入tree对象中 + jlrMenu.setId(Integer.valueOf(objects[0].toString())); + jlrMenu.setText(objects[2] == null ? "" : objects[2].toString()); + if(listess != null && list.size()>0) { + for (JLRRMenu listt : listess) { + //如果是父节点的子节点 + if(listt.getParent_id() == jlrMenu.getId()){ + //则将字节点放如集合中 + lists.add(listt); + } + } + } + //将集合放入tree对象中 + jlrMenu.setChildren(lists); + //将树对象放入集合中 + listes.add(jlrMenu); + } + } + }catch (Exception ex){ + ex.printStackTrace(); + return null; + } + return listes; + } + + @Override + public boolean updateRoleInfo(JLRRole jlrRole) { + try { + //添加或更新用户信息 + saveOrUpdate(jlrRole); + } catch (Exception e) { + e.printStackTrace(); + return false; + } + return true; + } + + @Override + public boolean updateRolesInfo(JLRAuthority jlrAuthority) { + try { + //添加或更新权限信息 + saveOrUpdate(jlrAuthority); + } catch (Exception e) { + e.printStackTrace(); + return false; + } + return true; + } + + @Override + public JLRRole getUser(String id) { + JLRRole jlrUser=null; + try { + //获取单个用户对象信息 + jlrUser=(JLRRole) getObjectHql("from JLRRole where id = "+id); + } catch (Exception e) { + e.printStackTrace(); + return null; + } + return jlrUser; + } + + @Override + public List getMenu(String id) { + List lists=new ArrayList<>(); + List list=null; + try { + String sql = "select j.id,j.parent_id,j.name,j.action from jlr_menu j inner join jlr_role_authority l on j.id = l.menu_id where role_id ="+id; + //获取菜单信息 + list = getRsBySql(sql); + //遍历菜单信息 + if (list != null && list.size() > 0) { + for (int i = 0; i < list.size(); i++) { + //声明一个菜单对象并将信息放入对象里面 + BaseMenu baseMenu = new BaseMenu(); + Object[] objects = (Object[]) list.get(i); + baseMenu.setId(Integer.valueOf(objects[0].toString())); + baseMenu.setParent_id(Integer.valueOf(objects[1] == null ? "0" : objects[1].toString())); + baseMenu.setName(objects[2] == null ? "" : objects[2].toString()); + //将对象放入集合中 + lists.add(baseMenu); + } + } + }catch (Exception ex){ + ex.printStackTrace(); + return null; + } + return lists; + } + + public List getMenuInfo() { + List lists=new ArrayList<>(); + List list=null; + try { + String sql = "select l.id,l.parent_id,l.name,l.action from jlr_menu j inner join jlr_menu l on j.id = l.parent_id"; + //获取菜单信息 + list = getRsBySql(sql); + //遍历菜单信息 + if (list != null && list.size() > 0) { + for (int i = 0; i < list.size(); i++) { + //声明一个菜单对象并将信息放入对象里面 + JLRRMenu baseMenu = new JLRRMenu(); + Object[] objects = (Object[]) list.get(i); + baseMenu.setId(Integer.valueOf(objects[0].toString())); + baseMenu.setParent_id(Integer.valueOf(objects[1] == null ? "0" : objects[1].toString())); + baseMenu.setText(objects[2] == null ? "" : objects[2].toString()); + //将对象放入集合中 + lists.add(baseMenu); + } + } + }catch (Exception ex){ + ex.printStackTrace(); + return null; + } + return lists; + } + + @Override + public boolean deleteSupplier(Integer id) { + try { + deleteHql("delete JLRAuthority where role_id="+id); + } catch (Exception e) { + e.printStackTrace(); + return false; + } + return true; + } +} diff --git a/src/main/java/com/zhongdao/jlr/business/dao/impl/SupplierDaoImpl.java b/src/main/java/com/zhongdao/jlr/business/dao/impl/SupplierDaoImpl.java new file mode 100644 index 0000000..42f89db --- /dev/null +++ b/src/main/java/com/zhongdao/jlr/business/dao/impl/SupplierDaoImpl.java @@ -0,0 +1,293 @@ +package com.zhongdao.jlr.business.dao.impl; + +import com.dubh.common.dao.hibernate.BaseDaoHibernate; +import com.util.UtilTools; +import com.util.Vo; +import com.zhongdao.jlr.business.dao.SupplierDao; +import com.zhongdao.jlr.business.vo.Contract; +import com.zhongdao.jlr.business.vo.Destination; +import com.zhongdao.jlr.business.vo.Enterprise; +import com.zhongdao.jlr.business.vo.PageInfo; +import com.zhongdao.jlr.pojo.*; +import org.apache.commons.lang.StringUtils; +import org.springframework.stereotype.Repository; + +import javax.servlet.http.HttpServletRequest; +import java.util.ArrayList; +import java.util.List; + +@Repository +public class SupplierDaoImpl extends BaseDaoHibernate implements SupplierDao{ + + @Override + public Vo getContractInfo(HttpServletRequest request,String name,String id) { + Vo vo=new Vo(); + //声明一个分页对象 + PageInfo pageInfo=new PageInfo(); + //获取页数和一页显示多少行并将其放入对象中 + pageInfo.setPage(UtilTools.getPage(request)); + pageInfo.setRows(UtilTools.getRows(request)); + //sql动态拼接 + StringBuffer sql=new StringBuffer("select c.id,c.contarct_code,c.contract_name,c.remark,c.app_code,c.create_time from contract c " + + "where c.id in (7049,7079,7050,7080) and c.level = 2 and c.delete_flag != 1 " + + "and c.id not in (select contract_id from jlr_contract_visual where jlr_user_id = "+id+")"); + //开始时间 + if (StringUtils.isNotBlank(name)) { + sql.append(" and c.contract_name like '%" + name + "%'"); + } + String countSql=sql.toString(); + String info=sql.append(" limit "+pageInfo.getCurrentIndex()+","+pageInfo.getRows()).toString(); + try { + //获取用户信息总数 + List lists=getRsBySql(countSql); + //分页获取用户信息 + List list = getRsBySql(info); + if (list != null && list.size() > 0) { + //将用户信息放入vo对象中 + vo.setRows(UtilTools.listTojsonArray(list, new String[]{"ID","CODE","NAME","REMARK","APPCODE","CREATETIME"})); + } + if(lists != null && lists.size() > 0) { + vo.setTotal(lists.size()); + } + } catch (Exception e) { + e.printStackTrace(); + } + return vo; + } + + @Override + public List getAssignContract(String id) { + List lists=new ArrayList<>(); + String sql="select c.id,c.contarct_code,c.contract_name,c.remark,c.app_code,c.create_time from contract c " + + "left join jlr_contract_visual j " + + "on j.contract_id = c. id " + + "where j.jlr_user_id="+id; + try { + //获取指定合同信息 + List list = getRsBySql(sql); + if (list != null && list.size() > 0) { + for(int i=0;i getAssignDestination(String id) { + List lists=new ArrayList<>(); + String sql="select c.id,c.name from contract_destination c " + + "left join jlr_destination_visual j " + + "on j.contract_destination_id = c.id " + + "where j.jlr_user_id="+id; + try { + //获取指定目的地信息 + List list = getRsBySql(sql); + if (list != null && list.size() > 0) { + for(int i=0;i getAssignEnterprise(String id) { + List lists=new ArrayList<>(); + String sql="select s.id,s.name from supplier s " + + "left join jlr_supplier_visual j " + + "on s.id=j.supplier_id " + + "where j.jlr_user_id="+id; + try { + //获取指定目的地信息 + List list = getRsBySql(sql); + if (list != null && list.size() > 0) { + for(int i=0;i 0) { + //将用户信息放入vo对象中 + vo.setRows(UtilTools.listTojsonArray(list, new String[]{"ID","NAME","CODE","LOGINNAME","CREATETIME"})); + } + if(lists != null && lists.size() > 0) { + vo.setTotal(lists.size()); + } + } catch (Exception e) { + e.printStackTrace(); + } + return vo; + } + + @Override + public Vo getDestination(HttpServletRequest request, String name,String id) { + Vo vo=new Vo(); + //声明一个分页对象 + PageInfo pageInfo=new PageInfo(); + //获取页数和一页显示多少行并将其放入对象中 + pageInfo.setPage(UtilTools.getPage(request)); + pageInfo.setRows(UtilTools.getRows(request)); + //sql动态拼接 + StringBuffer sql=new StringBuffer("select c.id,c.name,c.address,c.brand_name,c.create_time from contract_destination c " + + "left join jlr_contract_visual j " + + "on j.contract_id = c.contract_id " + + "where c.delete_flag != 1 " + + "and c.id not in (select contract_destination_id from jlr_destination_visual where jlr_user_id = "+id+") and j.jlr_user_id ="+id); + //开始时间 + if (StringUtils.isNotBlank(name)) { + sql.append(" and c.name like '%" + name + "%'"); + } + String countSql=sql.toString(); + String info=sql.append(" limit "+pageInfo.getCurrentIndex()+","+pageInfo.getRows()).toString(); + try { + //分页获取合同下的目的地信息总数 + List lists=getRsBySql(countSql); + //分页获取合同下的目的地信息 + List list = getRsBySql(info); + if (list != null && list.size() > 0) { + //将用户信息放入vo对象中 + vo.setRows(UtilTools.listTojsonArray(list, new String[]{"ID","NAME","ADDRESS","BRAND","CREATETIME"})); + } + if(lists != null && lists.size() > 0) { + vo.setTotal(lists.size()); + } + } catch (Exception e) { + e.printStackTrace(); + } + return vo; + } + + @Override + public boolean insertContractInfo(JLRUserContract jlrUserContract) { + try { + //为用户指定合同 + saveOrUpdate(jlrUserContract); + } catch (Exception e) { + e.printStackTrace(); + return false; + } + return true; + } + + @Override + public boolean insertDestinationInfo(JLRDestination jlrDestination) { + try { + //指定目的地 + saveOrUpdate(jlrDestination); + } catch (Exception e) { + e.printStackTrace(); + return false; + } + return true; + } + + @Override + public boolean insertEnterpriseInfo(JLRSupplier jlrSupplier) { + try { + //指定服务商 + saveOrUpdate(jlrSupplier); + } catch (Exception e) { + e.printStackTrace(); + return false; + } + return true; + } + + @Override + public boolean deleteDestinationInfo(int id,int uid) { + try { + //删除已指定的目的地信息 + deleteHql("delete JLRDestination where jlr_user_id = "+uid+" and contract_destination_id = "+id); + } catch (Exception e) { + e.printStackTrace(); + return false; + } + return true; + } + + @Override + public boolean deleteEnterpriseInfo(int sid,int uid) { + try { + //删除已指定的供应商信息 + deleteHql("delete JLRSupplier where jlr_user_id = "+uid+" and supplier_id = "+sid); + } catch (Exception e) { + e.printStackTrace(); + return false; + } + return true; + } + + @Override + public boolean deleteContractInfo(int cid,int uid) { + try { + //删除已指定的合同信息 + deleteHql("delete JLRUserContract where jlr_user_id = "+uid+" and contract_id = "+cid); + } catch (Exception e) { + e.printStackTrace(); + return false; + } + return true; + } + + @Override + public List getContract(String id) { + List jlrUserContract=null; + try { + jlrUserContract=(List) getRsByHql("from JLRUserContract where jlr_user_id = "+id); + } catch (Exception e) { + e.printStackTrace(); + return null; + } + return jlrUserContract; + } +} diff --git a/src/main/java/com/zhongdao/jlr/business/dao/impl/UserInfoDaoImpl.java b/src/main/java/com/zhongdao/jlr/business/dao/impl/UserInfoDaoImpl.java new file mode 100644 index 0000000..bad8fef --- /dev/null +++ b/src/main/java/com/zhongdao/jlr/business/dao/impl/UserInfoDaoImpl.java @@ -0,0 +1,138 @@ +package com.zhongdao.jlr.business.dao.impl; + +import com.dubh.common.dao.hibernate.BaseDaoHibernate; +import com.util.UtilTools; +import com.util.Vo; +import com.zhongdao.jlr.business.dao.UserInfoDao; +import com.zhongdao.jlr.business.vo.LoginUserVo; +import com.zhongdao.jlr.business.vo.PageInfo; +import com.zhongdao.jlr.pojo.EnterpriseJlr; +import com.zhongdao.jlr.pojo.JLRRole; +import com.zhongdao.jlr.pojo.JLRUser; +import org.apache.commons.lang.StringUtils; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Repository; + +import javax.servlet.http.HttpServletRequest; +import java.util.List; + +@Repository +public class UserInfoDaoImpl extends BaseDaoHibernate implements UserInfoDao { + @Autowired + HttpServletRequest request; + @Override + public List getRoleInfo() { + //获取sessions用户信息 + LoginUserVo logininfo=(LoginUserVo)request.getSession().getAttribute("logininfo"); + List baseRole=null; + try { + //获取角色信息 + baseRole=(List)getRsByHql("from JLRRole where delete_flag != 1 and id != "+logininfo.getRole_id()); + } catch (Exception e) { + e.printStackTrace(); + return null; + } + return baseRole; + } + + @Override + public List getEnterpriseInfo() { + //获取sessions用户信息 + LoginUserVo logininfo=(LoginUserVo)request.getSession().getAttribute("logininfo"); + List enterpriseJlrs=null; + try { + //获取用户信息 + enterpriseJlrs=(List)getRsByHql("from EnterpriseJlr"); + } catch (Exception e) { + e.printStackTrace(); + return null; + } + return enterpriseJlrs; + } + + @Override + public Vo getUserInfo(HttpServletRequest request, String name, String phone,String role,String username) { + Vo vo=new Vo(); + //声明一个分页对象 + PageInfo pageInfo=new PageInfo(); + //获取页数和一页显示多少行并将其放入对象中 + pageInfo.setPage(UtilTools.getPage(request)); + pageInfo.setRows(UtilTools.getRows(request)); + //sql动态拼接 + StringBuffer sql=new StringBuffer("select j.login_name,j.id,j.name,j.phone,j.email,r.name roleName,j.update_time " + + "from jlr_user j " + + "left join jlr_role r " + + "on r.id=j.role_id " + + "where j.role_id != 1 and j.delete_flag != 1"); + if (StringUtils.isNotBlank(name)) { + sql.append(" and j.name like '%" + name + "%'"); + } + if (StringUtils.isNotBlank(phone)) { + sql.append(" and j.phone like '%" + phone + "%'"); + } + if (StringUtils.isNotBlank(role)) { + sql.append(" and j.role_id = '"+ role +"'"); + } + if (StringUtils.isNotBlank(username)) { + sql.append(" and j.login_name = '"+ username +"'"); + } + String countSql=sql.toString(); + String info=sql.append(" order by j.update_time desc limit "+pageInfo.getCurrentIndex()+","+pageInfo.getRows()).toString(); + try { + //获取用户信息总数 + List lists=getRsBySql(countSql); + //分页获取用户信息 + List list = getRsBySql(info); + if (list != null && list.size() > 0) { + //将用户信息放入vo对象中 + vo.setRows(UtilTools.listTojsonArray(list, new String[]{"LOGINNAME","ID","NAME","PHONE","EMAIL","ROLENAME","UPDATETIME"})); + } + if(lists != null && lists.size() > 0) { + vo.setTotal(lists.size()); + } + } catch (Exception e) { + e.printStackTrace(); + } + return vo; + } + + @Override + public boolean updateUserInfo(JLRUser user) { + try { + //添加或更新用户信息 + saveOrUpdate(user); + } catch (Exception e) { + e.printStackTrace(); + return false; + } + return true; + } + + @Override + public JLRUser getUser(String id) { + JLRUser jlrUser=null; + try { + //获取单个用户对象信息 + jlrUser=(JLRUser) getObjectHql("from JLRUser where id ="+id); + } catch (Exception e) { + e.printStackTrace(); + return null; + } + return jlrUser; + } + + @Override + public boolean deleteUser(JLRUser user) { + try { + if(user != null){ + user.setDelete_flag(1); + } + //添加或更新用户信息 + saveOrUpdate(user); + } catch (Exception e) { + e.printStackTrace(); + return false; + } + return true; + } +} diff --git a/src/main/java/com/zhongdao/jlr/business/interceptor/UserInterceptor.java b/src/main/java/com/zhongdao/jlr/business/interceptor/UserInterceptor.java new file mode 100644 index 0000000..03f036c --- /dev/null +++ b/src/main/java/com/zhongdao/jlr/business/interceptor/UserInterceptor.java @@ -0,0 +1,40 @@ +package com.zhongdao.jlr.business.interceptor; + +import java.util.Enumeration; + +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; + +import org.springframework.web.servlet.HandlerInterceptor; +import org.springframework.web.servlet.ModelAndView; + +public class UserInterceptor implements HandlerInterceptor { + + private final String LOGININFO = "logininfo"; + + // 拦截前处理 + public boolean preHandle(HttpServletRequest request, + HttpServletResponse response, Object obj) throws Exception { + + Object sessionObj = request.getSession().getAttribute(LOGININFO); + if (sessionObj != null) { + return true; + } + response.sendRedirect(request.getContextPath()+"/login.jsp"); + return false; + } + + // 拦截后处理 + public void postHandle(HttpServletRequest request, + HttpServletResponse response, Object obj, ModelAndView mav) + throws Exception { + } + + // 全部完成后处理 + public void afterCompletion(HttpServletRequest request, + HttpServletResponse response, Object obj, Exception e) + throws Exception { + } + + +} diff --git a/src/main/java/com/zhongdao/jlr/business/listener/AutoRunServlet.java b/src/main/java/com/zhongdao/jlr/business/listener/AutoRunServlet.java new file mode 100644 index 0000000..1c77126 --- /dev/null +++ b/src/main/java/com/zhongdao/jlr/business/listener/AutoRunServlet.java @@ -0,0 +1,22 @@ +package com.zhongdao.jlr.business.listener; + +import java.util.Date; + +import javax.servlet.ServletContextEvent; +import javax.servlet.ServletContextListener; + +public class AutoRunServlet implements ServletContextListener{ + + public AutoRunServlet(){ + System.out.println("调用了构造方法"); + } + public void contextInitialized(ServletContextEvent event) { + System.out.println(" ----------创建了Context created on " + + new Date() + "."); + } + public void contextDestroyed(ServletContextEvent event) { + System.out.println("--------销毁了Context destroyed on " + + new Date() + "."); + } + + } diff --git a/src/main/java/com/zhongdao/jlr/business/listener/StartupListener.java b/src/main/java/com/zhongdao/jlr/business/listener/StartupListener.java new file mode 100644 index 0000000..9184b94 --- /dev/null +++ b/src/main/java/com/zhongdao/jlr/business/listener/StartupListener.java @@ -0,0 +1,37 @@ +package com.zhongdao.jlr.business.listener; + +/* + * To change this license header, choose License Headers in Project Properties. + * To change this template file, choose Tools | Templates + * and open the template in the editor. + */ + +import javax.annotation.Resource; + +import org.hibernate.Session; +import org.hibernate.SessionFactory; +import org.springframework.context.ApplicationListener; +import org.springframework.context.event.ContextRefreshedEvent; +import org.springframework.orm.hibernate4.SessionHolder; +import org.springframework.stereotype.Component; +import org.springframework.transaction.support.TransactionSynchronizationManager; + +/** + * 启动监听器 + * + * @author Storezhang + */ +@Component +public class StartupListener implements + ApplicationListener { + @Resource + private SessionFactory sessionFactory; + @Override + public void onApplicationEvent(ContextRefreshedEvent arg0) { + System.out.println("-----所有Bean载入完成---"); + System.out.println("开始配置缓存"); + //解决Spring启动加载静态数据时报No Session found for current thread异常 + Session session = sessionFactory.openSession(); + TransactionSynchronizationManager.bindResource(sessionFactory, new SessionHolder(session)); + } +} \ No newline at end of file diff --git a/src/main/java/com/zhongdao/jlr/business/service/BaseService.java b/src/main/java/com/zhongdao/jlr/business/service/BaseService.java new file mode 100644 index 0000000..b33efe1 --- /dev/null +++ b/src/main/java/com/zhongdao/jlr/business/service/BaseService.java @@ -0,0 +1,30 @@ +package com.zhongdao.jlr.business.service; + +import com.zhongdao.jlr.pojo.BaseMenu; +import org.json.JSONObject; + +import javax.servlet.http.HttpServletRequest; +import java.util.List; +import java.util.Map; + +public interface BaseService { + + /** + * 登录 + * @param + * @return 用户信息 + */ + public Map login(HttpServletRequest request,Map result,String username,String password); + + /*** + * 获取菜单信息 + * @return + */ + List getMenuInfo(); + + /*** + * 获取父级菜单信息 + * @return + */ + List getParentMenuInfo(); +} diff --git a/src/main/java/com/zhongdao/jlr/business/service/CasesListService.java b/src/main/java/com/zhongdao/jlr/business/service/CasesListService.java new file mode 100644 index 0000000..dececae --- /dev/null +++ b/src/main/java/com/zhongdao/jlr/business/service/CasesListService.java @@ -0,0 +1,67 @@ +package com.zhongdao.jlr.business.service; + +import com.util.Vo; +import com.zhongdao.jlr.business.vo.UserOrderViewVO; +import net.sf.json.JSONArray; +import org.json.JSONObject; + +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; +import java.util.List; + +/** + * 接口 + */ +public interface CasesListService { + + /** + * 救援工单信息 + * + * @param + * @return 用户信息 + */ + Vo casesListService(String state,HttpServletRequest request, String caseCode, String frame_code, String + rescueState, String createTime, String finishTime, String companyName,String plateNumber); + + /*** + * 获取进店救援案件信息 + * @param request + * @param caseCode + * @param frame_code + * @param createTime + * @param finishTime + * @return + */ + Vo caseEnterQuery(String state,HttpServletRequest request,String caseCode,String frame_code,String createTime,String finishTime); + + /**** + * 获取案件详情信息 + * @return + */ + Vo caseEnterInfo(HttpServletRequest request,String caseCode,String tid); + + /* + * 故障三级信息 + */ + JSONObject getTroubleCode(HttpServletRequest request) throws Exception; + + /* + * 详细页面保存 + */ + JSONObject caseDetailSave(HttpServletRequest request) throws Exception; + + /* + * 导出报表 + */ + JSONObject exportData(HttpServletRequest request) throws Exception; + + /* + * 导出报表CSV格式 + */ + JSONObject exportCSVData(HttpServletRequest request,HttpServletResponse response) throws Exception; + + /* + * 求援完成确认 + */ + net.sf.json.JSONObject completionOfRescue(String code) throws Exception; +} diff --git a/src/main/java/com/zhongdao/jlr/business/service/CouponService.java b/src/main/java/com/zhongdao/jlr/business/service/CouponService.java new file mode 100644 index 0000000..b57e888 --- /dev/null +++ b/src/main/java/com/zhongdao/jlr/business/service/CouponService.java @@ -0,0 +1,88 @@ +package com.zhongdao.jlr.business.service; + + +import com.util.Vo; +import com.zhongdao.jlr.business.vo.CouponRechargeJlr; +import com.zhongdao.jlr.pojo.CouponRechargeJlrPO; +import org.json.JSONObject; + +import javax.servlet.http.HttpServletRequest; +import java.util.List; +import java.util.Map; + +/*** + * 接口 + */ + +public interface CouponService { + + /** + * 代金券模糊搜索 + */ + public Vo searchConsume(String vinCode, String electronicAccounts,String userPhone, int page, int raws); + + /** + * 代金券消费记录 + */ + public Vo getCouponConsume(String vin, int page, int raws); + + /** + * 代金券充值记录 + */ + public Vo getCouponRecharge(String vin, int page, int raws); + + /** + * 代金券消费记录(整体) + */ + public Vo queryCouponConsume(String vin, String account, String RecuseCompanyName, String rescueCompanyCode, String license, String phone, String state, String qureyDate1, String queryDate2, int page, int raws); + + /* + * 导出报表 + */ + JSONObject exportData(HttpServletRequest request, String vin, String account, String RecuseCompanyName, String rescueCompanyCode, String license, String phone, String state, String qureyDate1, String queryDate2) throws Exception; + + /** + * 代金券消费修改 撤回、同意付款 + */ + public boolean updateConsumeState(String cId, String state); + + /** + * 代金券充值记录撤销 + */ + public List revokeRecharge(String vinCode, double revokeRechargeCount); + + /** + * 代金卷账户密码短信发送 + */ + boolean sendMsg(String phoneNum, String msgContent); + + /** + * 充值记录 + */ + public Vo queryCouponRecharge(String vin, String account, String orderCode, String license, String phone, String qureyDate1, String queryDate2, int page, int raws); + + + /*** + * 充值记录导出报表 + * @param request + * @param vin + * @param account + * @param orderCode + * @param phone + * @param qureyDate1 + * @param queryDate2 + * @return + * @throws Exception + */ + JSONObject rechangeExportData(HttpServletRequest request, String vin, String account, String orderCode, String phone, String qureyDate1, String queryDate2) throws Exception; + + /** + * 代金券 + */ + public Vo getCoupon(String vin, String electronicAccounts, int page, int raws); + + /** + * 代金券消费 + */ + public Map consume(String createTime, String vinCode, Double consumeCount, Integer resccueCompanyCode, String reparieInfo, String hitchInfo, String remark, String epassword); +} diff --git a/src/main/java/com/zhongdao/jlr/business/service/EnterpriseService.java b/src/main/java/com/zhongdao/jlr/business/service/EnterpriseService.java new file mode 100644 index 0000000..5b25dbb --- /dev/null +++ b/src/main/java/com/zhongdao/jlr/business/service/EnterpriseService.java @@ -0,0 +1,46 @@ +package com.zhongdao.jlr.business.service; + +import com.util.Vo; +import com.zhongdao.jlr.pojo.EnterpriseJlr; +import org.json.JSONObject; + +import javax.servlet.http.HttpServletRequest; + +/*** + * 接口 + */ + +public interface EnterpriseService { + + /*** + * 查询经销商信息 + * @param name + * @param abbrCode + * @param page + * @param rows + * @return + */ + Vo searchEnterprise(String name,String abbrCode, + Integer page, Integer rows); + + /** + * 删除经销商信息 + */ + boolean deleteById(String id); + + /** + * 新增或者修改经销商信息 + */ + boolean putEnterprise(EnterpriseJlr enterprise, String newPassword, String confirmPassword,String UID) throws Exception; + + /** + * 根据ID获取经销商信息 + */ + public EnterpriseJlr getById(String id); + + + /** + * 获取经销商报表信息 + */ + JSONObject expordata(HttpServletRequest request, String name, String abbrCode); +} diff --git a/src/main/java/com/zhongdao/jlr/business/service/OrderCheckService.java b/src/main/java/com/zhongdao/jlr/business/service/OrderCheckService.java new file mode 100644 index 0000000..916eabd --- /dev/null +++ b/src/main/java/com/zhongdao/jlr/business/service/OrderCheckService.java @@ -0,0 +1,48 @@ +package com.zhongdao.jlr.business.service; + +import com.util.Vo; +import net.sf.json.JSONObject; + +import javax.servlet.http.HttpServletRequest; + +/*** + * 接口 + */ + +public interface OrderCheckService { + + /** + * 订单核对信息 + * + * @param + * @return 用户信息 + */ + public Vo list(HttpServletRequest request, int page, int raws,String orderCode, String queryDate1, String rescueCompanyName, String queryDate2, String check_state); + + /** + * 服务费用信息 + * + * @param + * @return 用户信息 + */ + public Vo lists(HttpServletRequest request, int page, int raws, String code, String orderCode, String queryDate1, String rescueCompanyName, String queryDate2, String check_state,String state); + + /*** + * 导出 + * @param request + * @param code + * @param orderCode + * @param queryDate1 + * @param rescueCompanyName + * @param queryDate2 + * @param check_state + * @return + */ + JSONObject exportData(HttpServletRequest request, String code, String orderCode, String queryDate1, String rescueCompanyName, String queryDate2, String check_state); + + /*** + * 修改服务费用信息 + * @return + */ + boolean updateInfo(String uid,String totalFee); +} diff --git a/src/main/java/com/zhongdao/jlr/business/service/RoleService.java b/src/main/java/com/zhongdao/jlr/business/service/RoleService.java new file mode 100644 index 0000000..7f3c147 --- /dev/null +++ b/src/main/java/com/zhongdao/jlr/business/service/RoleService.java @@ -0,0 +1,56 @@ +package com.zhongdao.jlr.business.service; + +import com.util.Vo; +import com.zhongdao.jlr.business.vo.JLRMenu; +import com.zhongdao.jlr.business.vo.JLRRMenu; +import com.zhongdao.jlr.pojo.BaseMenu; +import com.zhongdao.jlr.pojo.JLRRole; + +import javax.servlet.http.HttpServletRequest; +import java.util.List; + +/*** + * 接口 + */ + +public interface RoleService { + + /*** + * 获取角色信息 + * @param request + * @param name + * @return + */ + Vo getRoleInfo(HttpServletRequest request,String name); + + /*** + * 获取树的信息 + * @return + */ + List getTreeInfo(); + + /*** + * 添加角色信息 + */ + boolean updateRoleInfo(JLRRole jlrRole ,int[] ids); + + /*** + * 根据编号获取角色信息 + * @param id + */ + JLRRole getRole(String id); + + /*** + * 根据id获取菜单信息 + * @param id + * @return + */ + List getMenu(String id); + + /*** + * 删除角色信息 + * @param id + * @param name + */ + boolean deleteRole(String id,String name); +} diff --git a/src/main/java/com/zhongdao/jlr/business/service/SupplierService.java b/src/main/java/com/zhongdao/jlr/business/service/SupplierService.java new file mode 100644 index 0000000..68f8338 --- /dev/null +++ b/src/main/java/com/zhongdao/jlr/business/service/SupplierService.java @@ -0,0 +1,98 @@ +package com.zhongdao.jlr.business.service; + + +import com.util.Vo; +import com.zhongdao.jlr.business.vo.Contract; +import com.zhongdao.jlr.business.vo.Destination; +import com.zhongdao.jlr.business.vo.Enterprise; +import com.zhongdao.jlr.pojo.JLRUserContract; + +import javax.servlet.http.HttpServletRequest; +import java.util.List; + +public interface SupplierService{ + + /*** + *获取合同信息并分页展示 + * @param request + * @return + */ + Vo getContractInfo(HttpServletRequest request,String name,String id); + + /*** + * 获取指定的合同信息 + * @return + */ + List getAssignContract(String id); + + /*** + * 获取指定的目的地信息 + * @param id + * @return + */ + List geAssignDestination(String id); + + /*** + * 获取指定的供应商信息 + * @param id + * @return + */ + List geAssignEnterprise(String id); + + /*** + *获取供应商信息并分页展示 + * @param request + * @return + */ + Vo getEnterpriseInfo(HttpServletRequest request,String name,String id); + + /*** + *获取合同下的目的地信息并分页展示 + * @param request + * @return + */ + Vo getDestination(HttpServletRequest request,String name,String id); + + /*** + * 为用户指定合同 + * @return + */ + boolean insertContractInfo(Integer id,int[] ids); + + /*** + * 为用户指定目的地 + * @return + */ + boolean insertDestinationInfo(Integer id,int[] ids); + + /*** + * 为用户指定供应商 + * @return + */ + boolean insertEnterpriseInfo(Integer id,int[] ids); + + /*** + * 删除指定的合同 + * @return + */ + boolean deleteContractInfo(Integer id,int[] ids); + + /*** + * 删除指定的供应商 + * @return + */ + boolean deleteEnterpriseInfo(Integer id,int[] ids); + + /*** + * 删除指定的目的地 + * @return + */ + boolean deleteDestinationInfo(Integer id,int[] ids); + + /*** + * 获取合同信息 + * @param id + * @return + */ + List getDestinationInfo(String id); +} diff --git a/src/main/java/com/zhongdao/jlr/business/service/UserInfoService.java b/src/main/java/com/zhongdao/jlr/business/service/UserInfoService.java new file mode 100644 index 0000000..151ebbb --- /dev/null +++ b/src/main/java/com/zhongdao/jlr/business/service/UserInfoService.java @@ -0,0 +1,53 @@ +package com.zhongdao.jlr.business.service; + +import com.util.Vo; +import com.zhongdao.jlr.pojo.EnterpriseJlr; +import com.zhongdao.jlr.pojo.JLRRole; +import com.zhongdao.jlr.pojo.JLRUser; + +import javax.servlet.http.HttpServletRequest; +import java.util.List; + +/*** + * 接口 + */ +public interface UserInfoService { + /*** + * 获取角色信息 + * @return + */ + List getRoleInfo(); + + /*** + * 获取经销商信息 + * @return + */ + List getEnterpriseInfo(); + + /*** + * 获取用户信息 + * @param request + * @param name + * @param phone + * @return + */ + Vo getUserInfo(HttpServletRequest request,String name,String phone,String role,String username); + + /*** + * 添加或更改用户信息 + */ + boolean updateUserInfo(JLRUser user); + + /*** + * 获取用户信息 + * @return + */ + JLRUser getUser(String id); + + /*** + * 根据编号删除用户 + * @param user + * @return + */ + boolean deleteUser(JLRUser user); +} diff --git a/src/main/java/com/zhongdao/jlr/business/service/impl/BaseServiceImpl.java b/src/main/java/com/zhongdao/jlr/business/service/impl/BaseServiceImpl.java new file mode 100644 index 0000000..a3650ad --- /dev/null +++ b/src/main/java/com/zhongdao/jlr/business/service/impl/BaseServiceImpl.java @@ -0,0 +1,70 @@ +package com.zhongdao.jlr.business.service.impl; +import com.zhongdao.jlr.business.dao.BaseDao; +import com.zhongdao.jlr.business.service.BaseService; +import com.zhongdao.jlr.business.vo.LoginUserVo; +import com.zhongdao.jlr.pojo.*; +import jodd.util.BCrypt; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; +import javax.servlet.http.HttpServletRequest; +import java.util.ArrayList; +import java.util.List; +import java.util.Map; + +@Service(value = "baseServiceImpl") +public class BaseServiceImpl implements BaseService { + + @Autowired + private BaseDao dao; + + @Override + public Map login(HttpServletRequest request, Map result, String username, String password) { + BaseUser entity = null; + List baseUserRoles=null; + List list=new ArrayList<>(); + try { + if (username.length() > 0 && null != password) { + //获取用户信息 + entity = (BaseUser) dao.getObjectHql("from BaseUser where delete_flag != 1 and login_name='" + username + "'"); + if (entity == null) { + throw new Exception("登陆帐号不存在!"); + } + //判断密码是否正确 + boolean ps=BCrypt.checkpw(password,entity.getPassword() ); + if (ps != true) { + throw new Exception("密码错误!"); + } + } else { + + throw new Exception("非法用户!"); + + } + LoginUserVo loginInfo = new LoginUserVo(); + loginInfo.setRole_id(entity.getRole_id()); + loginInfo.setId(entity.getId()); + loginInfo.setLogin_name(entity.getLogin_name()); + loginInfo.setName(entity.getName()); + loginInfo.setPhone(entity.getPhone()); + loginInfo.setEmail(entity.getEmail()); + loginInfo.setEnterpriseJlrId(entity.getEnterprise_id()); + request.getSession().setAttribute("logininfo", loginInfo); + result.put("flag", "1"); + result.put("msg", "登录成功"); + } catch (Exception ex) { + result.put("msg", ex.getMessage()); + } + return result; + } + + @Override + public List getMenuInfo() { + return dao.getMenuInfo(); + } + + @Override + public List getParentMenuInfo() { + return dao.getParentMenuInfo(); + } + + +} diff --git a/src/main/java/com/zhongdao/jlr/business/service/impl/CasesListServiceImpl.java b/src/main/java/com/zhongdao/jlr/business/service/impl/CasesListServiceImpl.java new file mode 100644 index 0000000..ea54cfc --- /dev/null +++ b/src/main/java/com/zhongdao/jlr/business/service/impl/CasesListServiceImpl.java @@ -0,0 +1,475 @@ +package com.zhongdao.jlr.business.service.impl; +import com.util.UtilTools; +import com.util.Vo; +import com.zhongdao.jlr.business.dao.CaseDao; +import com.zhongdao.jlr.business.service.CasesListService; + +import com.zhongdao.jlr.business.vo.LoginUserVo; +import com.zhongdao.jlr.business.vo.UserOrderCSVVO; +import com.zhongdao.jlr.business.vo.UserOrderExcelVO; +import com.zhongdao.jlr.util.ExportCSVUtil; +import com.zhongdao.jlr.util.MTextUtils; + +import org.apache.commons.lang.StringUtils; +import org.json.JSONObject; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; +import java.io.File; +import java.text.SimpleDateFormat; +import java.util.ArrayList; +import java.util.Date; +import java.util.List; + +import static com.util.RequestUtil.ReturnObjStr; + +/** + * 处理道路救援的业务 + */ +@Service(value = "casesListServiceImpl") +public class CasesListServiceImpl implements CasesListService { + + @Autowired + private CaseDao dao; + + @Override + public Vo casesListService(String state,HttpServletRequest request, String caseCode, String frame_code, String rescueState, String createTime, String finishTime, String companyName,String plateNumber) { + return dao.casesListService(state,request,caseCode,frame_code,rescueState,createTime,finishTime,companyName,plateNumber); + } + + @Override + public Vo caseEnterQuery(String state,HttpServletRequest request, String caseCode, String frame_code, String createTime, String finishTime) { + return dao.caseEnterQuery(state,request,caseCode,frame_code,createTime,finishTime); + } + + @Override + public Vo caseEnterInfo(HttpServletRequest request, String caseCode,String tid) { + return dao.caseEnterInfo(request,caseCode,tid); + } + + @Override + public JSONObject getTroubleCode(HttpServletRequest request) throws Exception { + return dao.getTroubleCode(request); + } + + @Override + public JSONObject caseDetailSave(HttpServletRequest request) throws Exception { + return dao.caseDetailSave(request); + } + + @Override + public JSONObject exportData(HttpServletRequest request) throws Exception { + //获取参数 + String caseCode = request.getParameter("caseCode"); + String frame_code = request.getParameter("frame_code"); + String createTime = request.getParameter("createTime"); + String finishTime = request.getParameter("finishTime"); + String state = request.getParameter("state"); + //声明一个报表集合用来保存工单信息 + List listExcel = new ArrayList(); + String userName = null; + //获取用户信息 + LoginUserVo logininfo = (LoginUserVo) request.getSession().getAttribute("logininfo"); + if (logininfo != null) { + userName = logininfo.getLogin_name().toString(); + } + //创建sql + StringBuffer sql=null; + if("0".equals(state)){ + sql = new StringBuffer("select DISTINCT u.id uid,u.tid tid,u.code orderCode,u.create_time " + + "create_time,u.vin_no vin_no,s.name name, " + + "s.code code,b.name serviceName,u.model model,u.plate_number plate_number,m.start_time start_time,j.level_name levelName," + + "u.finish_time finish_time,t.level_name levelNames,d.name dName,d.brand_name brandName,e.dms_code dms_code," + + "e.trouble_reason trouble_reason,e.mileage mileage,e.dphm dphm,e.arrive_time arrive_time,e.remaer remaer," + + "e.choice_type choice_type,e.trouble_code trouble_code,e.repair repair,e.ref_time ref_time,e.finish_time finishes_time" + + ",e.hand_time hand_time,e.use_time use_time from " + + "(select u.code code,u.create_time,u.vin_no,u.order_status order_status," + + "u.service_id,t.service_supplier_id,u.contract_id contract_id,u.contract_destination_id destination_code," + + "u.model model,u.plate_number plate_number,u.member_service_group_id member_service_group_id,u.finish_time finish_time," + + "u.malfunction_level1 malfunction_level1,u.malfunction_level2 malfunction_level2,u.id id,u.contract_destination_id contract_destination_id,t.id tid " + + "from user_order_his u " + + "left join task_order_his t on t.user_order_id=u.id " + + "union select u.code code,u.create_time create_time,u.vin_no vin_no," + + "u.order_status order_status,u.service_id service_id " + + ",t.service_supplier_id service_supplier_id,u.contract_id contract_id,u.contract_destination_id destination_code," + + "u.model model,u.plate_number plate_number,u.member_service_group_id member_service_group_id,u.finish_time finish_time," + + "u.malfunction_level1 malfunction_level1,u.malfunction_level2 malfunction_level2,u.id id,u.contract_destination_id contract_destination_id,t.id tid " + + "from user_order u " + + "left join task_order t on t.user_order_id=u.id " + + ") u " + + "left join supplier s on u.service_supplier_id = s.id " + + "left join base_service b on b.id = u.service_id " + + "left join contract_member_service_group m on u.member_service_group_id=m.id " + + "left join contract_trouble_level j on j.id = u.malfunction_level1 " + + "left join contract_trouble_level t on t.id = u.malfunction_level2 " + + "left join jlr_epqr w on w.order_id = u.id " + + "left join contract_destination d on d.id = u.contract_destination_id " + + "left join jlr_epqr e on e.task_order_id = u.tid " + + "where b.id in (1041,1050,1500,1501,1520,1521) and " + + "u.order_status in (21,23,25,28,31) " + + "and u.contract_id in (select contract_id from jlr_contract_visual where jlr_user_id =" + logininfo.getId() + ")"); + }else{ + sql = new StringBuffer("select DISTINCT u.id uid,u.tid tid,u.code orderCode,u.create_time " + + "create_time,u.vin_no vin_no,s.name name, " + + "s.code code,b.name serviceName,u.model model,u.plate_number plate_number,m.start_time start_time,j.level_name levelName," + + "u.finish_time finish_time,t.level_name levelNames,d.name dName,d.brand_name brandName,e.dms_code dms_code," + + "e.trouble_reason trouble_reason,e.mileage mileage,e.dphm dphm,e.arrive_time arrive_time,e.remaer remaer," + + "e.choice_type choice_type,e.trouble_code trouble_code,e.repair repair,e.ref_time ref_time,e.finish_time finishes_time" + + ",e.hand_time hand_time,e.use_time use_time from " + + "(select u.code code,u.create_time,u.vin_no,u.order_status order_status," + + "u.service_id,t.service_supplier_id,u.contract_id contract_id,u.contract_destination_id destination_code," + + "u.model model,u.plate_number plate_number,u.member_service_group_id member_service_group_id,u.finish_time finish_time," + + "u.malfunction_level1 malfunction_level1,u.malfunction_level2 malfunction_level2,u.id id,u.contract_destination_id contract_destination_id,t.id tid " + + "from user_order_his u " + + "left join task_order_his t on t.user_order_id=u.id " + + "union select u.code code,u.create_time create_time,u.vin_no vin_no," + + "u.order_status order_status,u.service_id service_id " + + ",t.service_supplier_id service_supplier_id,u.contract_id contract_id,u.contract_destination_id destination_code," + + "u.model model,u.plate_number plate_number,u.member_service_group_id member_service_group_id,u.finish_time finish_time," + + "u.malfunction_level1 malfunction_level1,u.malfunction_level2 malfunction_level2,u.id id,u.contract_destination_id contract_destination_id,t.id tid " + + "from user_order u " + + "left join task_order t on t.user_order_id=u.id " + + ") u " + + "left join supplier s on u.service_supplier_id = s.id " + + "left join base_service b on b.id = u.service_id " + + "left join contract_member_service_group m on u.member_service_group_id=m.id " + + "left join contract_trouble_level j on j.id = u.malfunction_level1 " + + "left join contract_trouble_level t on t.id = u.malfunction_level2 " + + "left join jlr_epqr w on w.order_id = u.id " + + "left join contract_destination d on d.id = u.contract_destination_id " + + "left join jlr_epqr e on e.task_order_id = u.tid " + + "where b.id in (1041,1050,1500,1501,1520,1521) and " + + "u.order_status in (21,23,25,28,31) " + + "and u.destination_code in (select contract_destination_id from jlr_destination_visual where jlr_user_id ="+logininfo.getId()+")"); + } + //sql动态拼接 + if (StringUtils.isNotBlank(frame_code)) { + sql.append(" and u.vin_no like '%" + frame_code + "%'"); + } + if (StringUtils.isNotBlank(caseCode)) { + sql.append(" and u.code like '%" + caseCode + "%'"); + } + //开始时间 + if (StringUtils.isNotBlank(createTime)) { + sql.append(" and u.create_time >= '"+createTime+"'"); + } + // 结束时间 + if (StringUtils.isNotBlank(finishTime)) { + sql.append(" and u.create_time <= '"+finishTime+"'"); + } + sql.append(" order by u.create_time desc"); + JSONObject jsonObject = new JSONObject(); + //获取进店工单案件详情信息 + List list = dao.getRsBySql(sql.toString()); + SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); + if (list != null && list.size() > 0) { + UserOrderExcelVO header = new UserOrderExcelVO("CLUB_ID_NUMBER", "BREAKDOWN_DATE", "VIN", "CURRENT_MILEAGE", "COMPONENT_DESCRIPTION", + "JLR_COMPONENT", "FAULT_DESCRIPTION", "VRT_CODE", "VFG_CODE", "COMPLETION_DESCRIPTION", "VERBATIM_COMMENTS", "INITIAL_DIAGNOSED_FAULT", + "ATTENDING_RESOURCE", "ACCEPTED", "SUPPRESS", "SHORT_VIN", "CTRY_OF_INCIDENT", "DEALER_CODE_REPAIR", "DEALER_NAME_REPAIR"); + listExcel.add(header); + //遍历获取到的进店工单信息并将其放入excel表中 + for (int i = 0; i < list.size(); i++) { + Object[] objects = (Object[]) list.get(i); + UserOrderExcelVO userOrderExcelVO = new UserOrderExcelVO(); + userOrderExcelVO.setClubIdNumber(ReturnObjStr(objects[2])); + userOrderExcelVO.setCtryOfIncident("CHN"); + userOrderExcelVO.setVerbatimComments(ReturnObjStr(objects[21])); + userOrderExcelVO.setBreakdownDate(sdf.format(sdf.parse(ReturnObjStr(objects[3])))); + userOrderExcelVO.setCurrentMileage(ReturnObjStr(objects[18])); + userOrderExcelVO.setAttendingResource("sino"); + userOrderExcelVO.setDealerCodeRepair("sino"); + userOrderExcelVO.setDealerNameRepair("中道救援"); + userOrderExcelVO.setAttendingResource(ReturnObjStr(objects[6])); + userOrderExcelVO.setDealerCodeRepair(ReturnObjStr(objects[15])); + userOrderExcelVO.setDealerNameRepair(ReturnObjStr(objects[14])); + String vin = ReturnObjStr(objects[4]); + userOrderExcelVO.setVin(vin); + userOrderExcelVO.setShortVin(vin.length() > 6 ? vin.substring(vin.length() - 6) : vin); + userOrderExcelVO.setJlrComponent(""); + userOrderExcelVO.setAccepted(""); + userOrderExcelVO.setSuppress(""); + userOrderExcelVO.setComponentDescription(ReturnObjStr(objects[23])); + userOrderExcelVO.setInitialDiagnosedFault(ReturnObjStr(objects[12])); + userOrderExcelVO.setFaultDescription(MTextUtils.getReason(ReturnObjStr(objects[17]))); + userOrderExcelVO.setVrtCode(""); + userOrderExcelVO.setVfgCode(""); + userOrderExcelVO.setCompletionDescription(MTextUtils.getRepairResult(ReturnObjStr(objects[24]))); + listExcel.add(userOrderExcelVO); + } + //格式化日期 + SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyyMMddHHmmss"); + String dateTime = simpleDateFormat.format(new Date()); + //创建导出路径 + String path = request.getRealPath("attached") + File.separator + + userName + File.separator + "EPQR_" + dateTime + ".xlsx"; + String webUrl = UtilTools.getWebAddress(request) + File.separator + + "attached" + File.separator + userName + File.separator + "EPQR_" + dateTime + ".xlsx"; + boolean b = new UserOrderExcelVO().saveAll(listExcel, path); + if (b) { + jsonObject.put("result", "0");// 0:成功,1失败 + jsonObject.put("msg", "导出成功!"); + jsonObject.put("webUrl", webUrl); + } + } + return jsonObject; + } + + @Override + public JSONObject exportCSVData(HttpServletRequest request,HttpServletResponse response) throws Exception { + //获取参数 + String caseCode = request.getParameter("caseCode"); + String frame_code = request.getParameter("frame_code"); + String createTime = request.getParameter("createTime"); + String finishTime = request.getParameter("finishTime"); + String state = request.getParameter("state"); + //声明一个报表集合用来保存工单信息 + List listExcel = new ArrayList(); + String userName = null; + //获取用户信息 + LoginUserVo logininfo = (LoginUserVo) request.getSession().getAttribute("logininfo"); + if (logininfo != null) { + userName = logininfo.getLogin_name().toString(); + } + //创建sql + StringBuffer sql=null; + if("0".equals(state)){ + sql = new StringBuffer("select DISTINCT u.id uid,u.tid tid,u.code orderCode,u.create_time " + + "create_time,u.vin_no vin_no,s.name name, " + + "s.code code,b.name serviceName,u.model model,u.plate_number plate_number,m.start_time start_time,j.level_name levelName," + + "u.finish_time finish_time,t.level_name levelNames,d.name dName,d.brand_name brandName,e.dms_code dms_code," + + "e.trouble_reason trouble_reason,e.mileage mileage,e.dphm dphm,e.arrive_time arrive_time,e.remaer remaer," + + "e.choice_type choice_type,e.trouble_code trouble_code,e.repair repair,e.ref_time ref_time,e.finish_time finishes_time" + + ",e.hand_time hand_time,e.use_time use_time from " + + "(select u.code code,u.create_time,u.vin_no,u.order_status order_status," + + "u.service_id,t.service_supplier_id,u.contract_id contract_id,u.contract_destination_id destination_code," + + "u.model model,u.plate_number plate_number,u.member_service_group_id member_service_group_id,u.finish_time finish_time," + + "u.malfunction_level1 malfunction_level1,u.malfunction_level2 malfunction_level2,u.id id,u.contract_destination_id contract_destination_id,t.id tid " + + "from user_order_his u " + + "left join task_order_his t on t.user_order_id=u.id " + + "union select u.code code,u.create_time create_time,u.vin_no vin_no," + + "u.order_status order_status,u.service_id service_id " + + ",t.service_supplier_id service_supplier_id,u.contract_id contract_id,u.contract_destination_id destination_code," + + "u.model model,u.plate_number plate_number,u.member_service_group_id member_service_group_id,u.finish_time finish_time," + + "u.malfunction_level1 malfunction_level1,u.malfunction_level2 malfunction_level2,u.id id,u.contract_destination_id contract_destination_id,t.id tid " + + "from user_order u " + + "left join task_order t on t.user_order_id=u.id " + + ") u " + + "left join supplier s on u.service_supplier_id = s.id " + + "left join base_service b on b.id = u.service_id " + + "left join contract_member_service_group m on u.member_service_group_id=m.id " + + "left join contract_trouble_level j on j.id = u.malfunction_level1 " + + "left join contract_trouble_level t on t.id = u.malfunction_level2 " + + "left join jlr_epqr w on w.order_id = u.id " + + "left join contract_destination d on d.id = u.contract_destination_id " + + "left join jlr_epqr e on e.task_order_id = u.tid " + + "where b.id in (1041,1050,1500,1501,1520,1521) and " + + "u.order_status in (21,23,25,28,31) " + + "and u.contract_id in (select contract_id from jlr_contract_visual where jlr_user_id =" + logininfo.getId() + ")"); + }else{ + sql = new StringBuffer("select DISTINCT u.id uid,u.tid tid,u.code orderCode,u.create_time " + + "create_time,u.vin_no vin_no,s.name name, " + + "s.code code,b.name serviceName,u.model model,u.plate_number plate_number,m.start_time start_time,j.level_name levelName," + + "u.finish_time finish_time,t.level_name levelNames,d.name dName,d.brand_name brandName,e.dms_code dms_code," + + "e.trouble_reason trouble_reason,e.mileage mileage,e.dphm dphm,e.arrive_time arrive_time,e.remaer remaer," + + "e.choice_type choice_type,e.trouble_code trouble_code,e.repair repair,e.ref_time ref_time,e.finish_time finishes_time" + + ",e.hand_time hand_time,e.use_time use_time from " + + "(select u.code code,u.create_time,u.vin_no,u.order_status order_status," + + "u.service_id,t.service_supplier_id,u.contract_id contract_id,u.contract_destination_id destination_code," + + "u.model model,u.plate_number plate_number,u.member_service_group_id member_service_group_id,u.finish_time finish_time," + + "u.malfunction_level1 malfunction_level1,u.malfunction_level2 malfunction_level2,u.id id,u.contract_destination_id contract_destination_id,t.id tid " + + "from user_order_his u " + + "left join task_order_his t on t.user_order_id=u.id " + + "union select u.code code,u.create_time create_time,u.vin_no vin_no," + + "u.order_status order_status,u.service_id service_id " + + ",t.service_supplier_id service_supplier_id,u.contract_id contract_id,u.contract_destination_id destination_code," + + "u.model model,u.plate_number plate_number,u.member_service_group_id member_service_group_id,u.finish_time finish_time," + + "u.malfunction_level1 malfunction_level1,u.malfunction_level2 malfunction_level2,u.id id,u.contract_destination_id contract_destination_id,t.id tid " + + "from user_order u " + + "left join task_order t on t.user_order_id=u.id " + + ") u " + + "left join supplier s on u.service_supplier_id = s.id " + + "left join base_service b on b.id = u.service_id " + + "left join contract_member_service_group m on u.member_service_group_id=m.id " + + "left join contract_trouble_level j on j.id = u.malfunction_level1 " + + "left join contract_trouble_level t on t.id = u.malfunction_level2 " + + "left join jlr_epqr w on w.order_id = u.id " + + "left join contract_destination d on d.id = u.contract_destination_id " + + "left join jlr_epqr e on e.task_order_id = u.tid " + + "where b.id in (1041,1050,1500,1501,1520,1521) and " + + "u.order_status in (21,23,25,28,31) " + + "and u.destination_code in (select contract_destination_id from jlr_destination_visual where jlr_user_id ="+logininfo.getId()+")"); + } + //sql动态拼接 + if (StringUtils.isNotBlank(frame_code)) { + sql.append(" and u.vin_no like '%" + frame_code + "%'"); + } + if (StringUtils.isNotBlank(caseCode)) { + sql.append(" and u.code like '%" + caseCode + "%'"); + } + //开始时间 + if (StringUtils.isNotBlank(createTime)) { + sql.append(" and u.create_time >= '"+createTime+"'"); + } + // 结束时间 + if (StringUtils.isNotBlank(finishTime)) { + sql.append(" and u.create_time <= '"+finishTime+"'"); + } + sql.append(" order by u.create_time desc"); + JSONObject jsonObject = new JSONObject(); + //获取进店工单案件详情信息 + List list = dao.getRsBySql(sql.toString()); + SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); + if (list != null && list.size() > 0) { + UserOrderCSVVO header = new UserOrderCSVVO("CLUB_ID_NUMBER", "BREAKDOWN_DATE", "VIN", "CURRENT_MILEAGE", "COMPONENT_DESCRIPTION", + "JLR_COMPONENT", "FAULT_DESCRIPTION", "VRT_CODE", "VFG_CODE", "COMPLETION_DESCRIPTION", "VERBATIM_COMMENTS", "INITIAL_DIAGNOSED_FAULT", + "ATTENDING_RESOURCE", "ACCEPTED", "SUPPRESS", "SHORT_VIN", "CTRY_OF_INCIDENT", "DEALER_CODE_REPAIR", "DEALER_NAME_REPAIR"); + listExcel.add(header); + //遍历获取到的进店工单信息并将其放入excel表中 + for (int i = 0; i < list.size(); i++) { + Object[] objects = (Object[]) list.get(i); + UserOrderCSVVO userOrderExcelVO = new UserOrderCSVVO(); + userOrderExcelVO.setClubIdNumber(ReturnObjStr(objects[2])); + userOrderExcelVO.setCtryOfIncident("CHN"); + userOrderExcelVO.setVerbatimComments(ReturnObjStr(objects[21])); + userOrderExcelVO.setBreakdownDate(sdf.format(sdf.parse(ReturnObjStr(objects[3])))); + userOrderExcelVO.setCurrentMileage(ReturnObjStr(objects[18])); + userOrderExcelVO.setAttendingResource("sino"); + userOrderExcelVO.setDealerCodeRepair("sino"); + userOrderExcelVO.setDealerNameRepair("中道救援"); + userOrderExcelVO.setAttendingResource(ReturnObjStr(objects[6])); + userOrderExcelVO.setDealerCodeRepair(ReturnObjStr(objects[15])); + userOrderExcelVO.setDealerNameRepair(ReturnObjStr(objects[14])); + String vin = ReturnObjStr(objects[4]); + userOrderExcelVO.setVin(vin); + userOrderExcelVO.setShortVin(vin.length() > 6 ? vin.substring(vin.length() - 6) : vin); + userOrderExcelVO.setJlrComponent(""); + userOrderExcelVO.setAccepted(""); + userOrderExcelVO.setSuppress(""); + userOrderExcelVO.setComponentDescription(ReturnObjStr(objects[23])); + userOrderExcelVO.setInitialDiagnosedFault(ReturnObjStr(objects[12])); + userOrderExcelVO.setFaultDescription(MTextUtils.getReason(ReturnObjStr(objects[17]))); + userOrderExcelVO.setVrtCode(""); + userOrderExcelVO.setVfgCode(""); + userOrderExcelVO.setCompletionDescription(MTextUtils.getRepairResult(ReturnObjStr(objects[24]))); + listExcel.add(userOrderExcelVO); + } + //格式化日期 + SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyyMMddHHmmss"); + String dateTime = simpleDateFormat.format(new Date()); + //创建导出路径 + String path = request.getRealPath("attached") + File.separator + + userName + File.separator + "EPQR_" + dateTime + ".csv"; + String webUrl = UtilTools.getWebAddress(request) + File.separator + + "attached" + File.separator + userName + File.separator + "EPQR_" + dateTime + ".csv"; + boolean b = ExportCSVUtil.doExport(listExcel, path); + if (b) { + jsonObject.put("result", "0");// 0:成功,1失败 + jsonObject.put("msg", "导出成功!"); + jsonObject.put("webUrl", webUrl); + } + } + return jsonObject; + } + + @Override + public net.sf.json.JSONObject completionOfRescue(String code) throws Exception { + //声明一个解析图片的路径 + String url = "http://192.168.1.220:8888"; + //声明一个对象 + net.sf.json.JSONObject jsonObject=null; + String sql = "select u.code code,u.vin_no vin_no,u.model model,u.malfunction_remark malfunction_remark," + + "u.vehicle_point_address vehicle_point_address,u.destination_address destination_address,u.create_time create_time,u.arrive_time arrive_time," + + "u.finish_time finish_time,s.name supplier_name,s.code supplier_code,b.name name,i.images images from " + + "(select u.id id,u.code code,u.vin_no vin_no,u.model model,u.malfunction_remark malfunction_remark," + + "u.vehicle_point_address vehicle_point_address,u.destination_address destination_address,u.create_time create_time,t.arrive_time arrive_time," + + "t.finish_time finish_time,t.task_status task_status,u.service_id service_id,t.service_supplier_id service_supplier_id from user_order u " + + "left join task_order t on t.user_order_id = u.id " + + "union select u.id id,u.code code,u.vin_no vin_no,u.model model,u.malfunction_remark malfunction_remark," + + "u.vehicle_point_address vehicle_point_address,u.destination_address destination_address,u.create_time create_time,t.arrive_time arrive_time," + + "t.finish_time finish_time,t.task_status task_status,u.service_id service_id,t.service_supplier_id service_supplier_id from user_order_his u " + + "left join task_order_his t on t.user_order_id = u.id) u " + + "left join supplier s on u.service_supplier_id = s.id " + + "left join base_service b on b.id = u.service_id " + + "left join order_images i on i.order_id = u.id " + + "where u.code = '" + code +"' and i.task_status =19001"; + String Hsql="select u.code code,u.vin_no vin_no,u.model model,u.malfunction_remark malfunction_remark," + + "u.vehicle_point_address vehicle_point_address,u.destination_address destination_address,u.create_time create_time,u.arrive_time arrive_time," + + "u.finish_time finish_time,s.name supplier_name,s.code supplier_code,b.name name,i.images images from " + + "(select u.id id,u.code code,u.vin_no vin_no,u.model model,u.malfunction_remark malfunction_remark," + + "u.vehicle_point_address vehicle_point_address,u.destination_address destination_address,u.create_time create_time,t.arrive_time arrive_time," + + "t.finish_time finish_time,t.task_status task_status,u.service_id service_id,t.service_supplier_id service_supplier_id from user_order u " + + "left join task_order t on t.user_order_id = u.id " + + "union select u.id id,u.code code,u.vin_no vin_no,u.model model,u.malfunction_remark malfunction_remark," + + "u.vehicle_point_address vehicle_point_address,u.destination_address destination_address,u.create_time create_time,t.arrive_time arrive_time," + + "t.finish_time finish_time,t.task_status task_status,u.service_id service_id,t.service_supplier_id service_supplier_id from user_order_his u " + + "left join task_order_his t on t.user_order_id = u.id) u " + + "left join supplier s on u.service_supplier_id = s.id " + + "left join base_service b on b.id = u.service_id " + + "left join order_images i on i.order_id = u.id " + + "where u.code = '" + code +"' and i.task_status =14001"; + String sqls="select u.code code,u.vin_no vin_no,u.model model,u.malfunction_remark malfunction_remark," + + "u.vehicle_point_address vehicle_point_address,u.destination_address destination_address,u.create_time create_time,u.arrive_time arrive_time," + + "u.finish_time finish_time,s.name supplier_name,s.code supplier_code,b.name name from " + + "(select u.id id,u.code code,u.vin_no vin_no,u.model model,u.malfunction_remark malfunction_remark," + + "u.vehicle_point_address vehicle_point_address,u.destination_address destination_address,u.create_time create_time,t.arrive_time arrive_time," + + "t.finish_time finish_time,t.task_status task_status,u.service_id service_id,t.service_supplier_id service_supplier_id from user_order u " + + "left join task_order t on t.user_order_id = u.id " + + "union select u.id id,u.code code,u.vin_no vin_no,u.model model,u.malfunction_remark malfunction_remark," + + "u.vehicle_point_address vehicle_point_address,u.destination_address destination_address,u.create_time create_time,t.arrive_time arrive_time," + + "t.finish_time finish_time,t.task_status task_status,u.service_id service_id,t.service_supplier_id service_supplier_id from user_order_his u " + + "left join task_order_his t on t.user_order_id = u.id) u " + + "left join supplier s on u.service_supplier_id = s.id " + + "left join base_service b on b.id = u.service_id " + + "where u.code = '" + code +"'"; + try { + //声明一个对象 + net.sf.json.JSONObject jsonObjects=null; + //获取车主签名图片及救援详情信息 + List list = dao.getRsBySql(sql); + //获取客户接车签名图片及救援信息 + List list1=dao.getRsBySql(Hsql); + //获取救援详情信息 + List list2=dao.getRsBySql(sqls); + if (list != null && list.size() > 0) { + //若两张图片都有则将图片路径放入对象中 + jsonObject=UtilTools.listTojsonObject(list, new String[]{"ORDER_CODE", "VIN_NO", "MODEL", "MAL_REMARK", "START_ADDRESS", "DESTINATION_ADDRESS", "CREATE_TIME","ARRIVE_TIME","FINISH_TIME","NAME","CODE","SERVICE_TIME","URL"}); + if (list1 != null && list1.size() > 0) { + jsonObjects=UtilTools.listTojsonObject(list1, new String[]{"ORDER_CODE", "VIN_NO", "MODEL", "MAL_REMARK", "START_ADDRESS", "DESTINATION_ADDRESS", "CREATE_TIME","ARRIVE_TIME","FINISH_TIME","NAME","CODE","SERVICE_TIME","URL"}); + jsonObject.put("URLS",jsonObjects.get("URL")); + }else{ + jsonObject.put("URLS",""); + } + }else{ + //若两张图片都没有则将救援数据放入对象中 + if (list1 != null && list1.size() > 0) { + jsonObject=UtilTools.listTojsonObject(list1, new String[]{"ORDER_CODE", "VIN_NO", "MODEL", "MAL_REMARK", "START_ADDRESS", "DESTINATION_ADDRESS", "CREATE_TIME","ARRIVE_TIME","FINISH_TIME","NAME","CODE","SERVICE_TIME","URL"}); + jsonObject.put("URLS",jsonObject.get("URL")); + jsonObject.put("URL",""); + }else{ + if(list2 != null && list2.size()>0){ + jsonObject=UtilTools.listTojsonObject(list2, new String[]{"ORDER_CODE", "VIN_NO", "MODEL", "MAL_REMARK", "START_ADDRESS", "DESTINATION_ADDRESS", "CREATE_TIME","ARRIVE_TIME","FINISH_TIME","NAME","CODE","SERVICE_TIME"}); + jsonObject.put("URL",""); + jsonObject.put("URLS",""); + } + } + } + //截取图片路径动态拼接 + String urls=jsonObject.getString("URL"); + String urll=jsonObject.getString("URLS"); + if(urls.contains("IMAGE_URL_NEW")){ + String urles=urls.substring(13); + jsonObject.put("URL",url+urles); + } + if(urll.contains("IMAGE_URL_NEW")){ + String urles=urll.substring(13); + jsonObject.put("URLS",url+urles); + } + } catch (Exception e) { + e.printStackTrace(); + return null; + } + return jsonObject; + } +} diff --git a/src/main/java/com/zhongdao/jlr/business/service/impl/CouponServiceImpl.java b/src/main/java/com/zhongdao/jlr/business/service/impl/CouponServiceImpl.java new file mode 100644 index 0000000..6be0b6a --- /dev/null +++ b/src/main/java/com/zhongdao/jlr/business/service/impl/CouponServiceImpl.java @@ -0,0 +1,459 @@ +package com.zhongdao.jlr.business.service.impl; + +import com.util.UtilTools; +import com.util.Vo; +import com.zhongdao.jlr.business.dao.CouponDao; +import com.zhongdao.jlr.business.service.CouponService; + +import com.zhongdao.jlr.business.vo.*; +import com.zhongdao.jlr.pojo.CouponConsumeJlrPO; +import com.zhongdao.jlr.pojo.CouponRechargeJlrPO; +import com.zhongdao.jlr.pojo.JLRCoupon; +import com.zhongdao.jlr.util.MTextUtils; +import org.apache.commons.lang.StringUtils; +import org.json.JSONObject; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +import javax.servlet.http.HttpServletRequest; +import java.io.BufferedReader; +import java.io.File; +import java.io.InputStreamReader; +import java.net.URL; +import java.net.URLConnection; +import java.net.URLEncoder; +import java.text.DateFormat; +import java.text.SimpleDateFormat; +import java.util.*; + +import static com.util.RequestUtil.ReturnObjStr; + +/*** + * 处理代金券的业务 + */ + +@Service(value = "couponServiceImpl") +public class CouponServiceImpl implements CouponService { + + @Autowired + private CouponDao dao; + + @Override + public Vo searchConsume(String vinCode, String electronicAccounts, + String userPhone, int page, int raws) { + + return dao.searchConsume(vinCode, electronicAccounts,userPhone, page, raws); + } + + @Override + public Vo getCouponConsume(String vin, int page, int raws) { + return dao.getCouponConsume(vin, page, raws); + } + + @Override + public Vo getCouponRecharge(String vin, int page, int raws) { + return dao.getCouponRecharge(vin, page, raws); + } + + @Override + public Vo queryCouponConsume(String vin, String account, String RecuseCompanyName, String rescueCompanyCode, String license, String phone, String state, String qureyDate1, String queryDate2, int page, int raws) { + return dao.queryCouponConsume(vin, account, RecuseCompanyName, rescueCompanyCode, license, phone, state, qureyDate1, queryDate2, page, raws); + } + @Override + public JSONObject exportData(HttpServletRequest request, String vin, String account, String RecuseCompanyName, String rescueCompanyCode, String license, String phone, String state, String queryDate1, String queryDate2) { + //声明一个json对象用来存储导出报表的信息 + JSONObject jsonObject = new JSONObject(); + //声明一个集合用来接收代金券消费记录的数据 + List list = null; + //声明一个导出报表集合用来存储代金券消费记录信息 + List listExcel = new ArrayList(); + //sql动态拼接 + StringBuffer sql = new StringBuffer( + "SELECT c.id,c.vin_code,c.consume_count,c.electronic_accounts,r.user_phone,r.license,e.NAME,c.settlement_state,c.CONSUME_TIME,c.reparie_info,c.hitch_info,c.settle_time,c.create_time,c.remark\n" + + "FROM jlr_coupon_consume c LEFT JOIN jlr_coupon r ON c.VIN_CODE = r.VIN_CODE\n" + + "LEFT JOIN jlr_enterprise e on c.enterprise_id = e.ID\n where 1=1 "); + if (StringUtils.isNotBlank(vin)) { + sql.append(" and c.VIN_CODE like '%" + vin + "%'"); + } + if (StringUtils.isNotBlank(account)) { + sql.append(" and c.electronic_accounts like '%" + account + "%'"); + } + if (StringUtils.isNotBlank(RecuseCompanyName)) { + sql.append(" and e.NAME like '%" + RecuseCompanyName + "%'"); + } + if (StringUtils.isNotBlank(phone)) { + sql.append(" and r.USER_PHONE like '%" + phone + "%'"); + } + if (StringUtils.isNotBlank(license)) { + sql.append(" and r.LICENSE like '%" + license + "%'"); + } + if (StringUtils.isNotBlank(state)) { + sql.append(" and c.settlement_state = '" + state + "'"); + } + if (StringUtils.isNotBlank(rescueCompanyCode)) { + sql.append(" and c.enterprise_id = '" + rescueCompanyCode + "'"); + } + if (StringUtils.isNotBlank(queryDate1)) { + sql.append(" and c.CONSUME_TIME >= '"+queryDate1+"'"); + } + + // 结束时间 + if (StringUtils.isNotBlank(queryDate2)) { + sql.append(" and c.CONSUME_TIME <= '"+queryDate2+"'"); + } + try { + //获取代金券消费记录信息 + list = dao.getRsBySql(sql.toString()); + //遍历代金券消费记录数据,并将其放入消费记录实体类中,再将实体类加入集合中 + if (list != null && list.size() > 0) { + ConsumeQueryExcelVO header = new ConsumeQueryExcelVO("VIN码", "电子账户", "手机号码", "车牌号", "消费时间", "消费金额", "经销商", "审批状态"); + listExcel.add(header); + for (int i = 0; i < list.size(); i++) { + ConsumeQueryExcelVO consumeQueryExcelVO = new ConsumeQueryExcelVO(); + Object[] objects = (Object[]) list.get(i); + consumeQueryExcelVO.setVinCode(ReturnObjStr(objects[1])); + consumeQueryExcelVO.setElectronicccounts(ReturnObjStr(objects[3])); + consumeQueryExcelVO.setUserPhone(ReturnObjStr(objects[4])); + consumeQueryExcelVO.setLicense(ReturnObjStr(objects[5])); + //格式化日期 + SimpleDateFormat sdf=new SimpleDateFormat("yyyy-MM-dd hh:mm:ss"); + Date date=sdf.parse(ReturnObjStr(objects[8])); + consumeQueryExcelVO.setConsumeTime(sdf.format(date)); + consumeQueryExcelVO.setConsumeCount(ReturnObjStr(objects[2])); + consumeQueryExcelVO.setName(ReturnObjStr(objects[6])); + consumeQueryExcelVO.setState(transState(ReturnObjStr(objects[7]))); + listExcel.add(consumeQueryExcelVO); + } + //时间格式转换 + SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyyMMddHHmmss"); + //获取当前时间并将其转换为string字符串 + String dateTime = simpleDateFormat.format(new Date()); + //导出报表路径 + String path = request.getRealPath("attached") + File.separator + "consumption_record_" + dateTime + ".xlsx"; + String webUrl = UtilTools.getWebAddress(request) + File.separator + + "attached" + File.separator + "consumption_record_" + dateTime + ".xlsx"; + boolean b = new ConsumeQueryExcelVO().saveAll(listExcel, path); + if (b) { + jsonObject.put("result", "0");// 0:成功,1失败 + jsonObject.put("msg", "导出成功!"); + jsonObject.put("webUrl", webUrl); + } + } + } catch (Exception e) { + e.printStackTrace(); + } + return jsonObject; + + } + + /**** + * 根据状态码返回对应的结果信息 + * @param value + * @return + */ + private String transState(String value) { + switch (value) { + case "0": + return "未结算"; + case "1": + return "未结算"; + case "5": + return "提交结算"; + case "10": + return "同意付款"; + case "100": + return "已付款"; + case "101": + return "已撤销"; + default: + break; + } + return ""; + } + + @Override + public boolean updateConsumeState(String cId, String state) { + List couponRechargeJlrList = new ArrayList(); + //如果是撤销这需要撤销充值记录的变动 + if ("101".equals(state)) { + //以,分割id + String[] ids = cId.split(","); + for (String id : ids) { + CouponConsumeJlrPO consumejlr = null; + try { + //获取消费记录信息 + consumejlr = (CouponConsumeJlrPO) dao.getObjectHql("from CouponConsumeJlrPO where id=" + id); + } catch (Exception e) { + e.printStackTrace(); + return false; + } + //获取充值记录信息 + List list = revokeRecharge(consumejlr.getVin_code(), consumejlr.getConsume_count()); + if (list != null) { + couponRechargeJlrList.addAll(list); + } + } + if (couponRechargeJlrList.size() == 0) { + return false; + } + } + //更改状态(撤销充值记录) + return dao.updateConsumeState(couponRechargeJlrList, cId, state); + } + + @Override + public List revokeRecharge(String vinCode, double revokeRechargeCount) { + //声明一个集合用来存储充值记录信息 + List couponRechargeJlrList = null; + try { + //获取用户的充值记录 + couponRechargeJlrList = dao.getRsByHql("from CouponRechargeJlrPO where CONSUME_COUNT>0 and VIN_CODE='" + vinCode + "' and overdue_time>NOW() order by overdue_time desc"); + } catch (Exception e) { + e.printStackTrace(); + return couponRechargeJlrList; + } + //计算代金劵充值应该退回的充值记录 + List revokeCouponRechargeJlrList = new ArrayList(); + double b = revokeRechargeCount; + //遍历用户的代金券充值记录 + for (CouponRechargeJlrPO couponRechargeJlr : couponRechargeJlrList) { + //获取用户的消费金额 + double c = couponRechargeJlr.getConsume_count(); + if (c > 0) { + //如果用户的代金券充值金额大于用户的代金券消费金额 + if (b >= c) { + //更新用户代金券的消费金额为0.0 + couponRechargeJlr.setConsume_count(0.0F); + b = b - c; + revokeCouponRechargeJlrList.add(couponRechargeJlr); + continue; + } else { + //更新用户的代金券消费金额 + couponRechargeJlr.setConsume_count(Float.valueOf(String.valueOf(Double.parseDouble(couponRechargeJlr.getConsume_count().toString()) - b))); + revokeCouponRechargeJlrList.add(couponRechargeJlr); + b = 0; + break; + } + + } + } + return couponRechargeJlrList; + } + @Override + public boolean sendMsg(String phoneNum, String msgContent) { + //String send_url = "http://sms.10690221.com/hy/?uid=20016&auth=8827d737029bc0950a90cf9ce5946ce9&expid=0&encode=GBK"; + String send_url = "http://sms.10690221.com/hy/?uid=20016&auth=093627dd3b2b54900dcd355fd92b8f91&expid=0&encode=GBK"; + BufferedReader reader = null; + try { + send_url += "&mobile=" + phoneNum + "&msg=" + URLEncoder.encode(msgContent, "GBK"); + StringBuffer readOneLineBuff = new StringBuffer(); + String content = ""; + URL url = new URL(send_url); + URLConnection conn = url.openConnection(); + conn.setConnectTimeout(1000); + conn.setReadTimeout(1000); + reader = new BufferedReader(new InputStreamReader(conn.getInputStream())); + String line = ""; + while ((line = reader.readLine()) != null) { + readOneLineBuff.append(line); + } + reader.close(); + + content = readOneLineBuff.toString(); + + if ("0".equals(content.split(",")[0])) { + return true; + } + } catch (Exception e2) { + } finally { + if (reader != null) { + try { + reader.close(); + } catch (Exception e) { + e.printStackTrace(); + } + } + } + return false; + } + + @Override + public Vo queryCouponRecharge(String vin, String account, String orderCode, String license, String phone, String qureyDate1, String queryDate2, int page, int raws) { + return dao.queryCouponRecharge(vin, account, orderCode, license, phone, qureyDate1, queryDate2, page, raws); + } + + @Override + public JSONObject rechangeExportData(HttpServletRequest request, String vin, String account, String orderCode, String phone, String queryDate1, String queryDate2) throws Exception { + { + JSONObject jsonObject = new JSONObject(); + List list = null; + List listExcel = new ArrayList(); + //sql动态拼接 + StringBuffer sql = new StringBuffer( + "SELECT c.ID,c.VIN_CODE,c.task_order_id,c.RECHARGE_TIME,c.RECHARGE_COUNT,c.SEATE_NAME,c.REMARK,c.SERVICE_NAME,c.OVERDUE_TIME,c.CONSUME_COUNT,r.ELECTRONIC_ACCOUNTS,c.CREATE_TIME, " + + "r.LICENSE, r.USER_PHONE\n" + + "FROM jlr_coupon_recharge c LEFT JOIN jlr_coupon r ON c.VIN_CODE = r.VIN_CODE where 1=1 "); + if (StringUtils.isNotBlank(vin)) { + sql.append(" and c.VIN_CODE like '%" + vin + "%'"); + } + if (StringUtils.isNotBlank(account)) { + sql.append(" and r.ELECTRONIC_ACCOUNTS like '%" + account + "%'"); + } + if (StringUtils.isNotBlank(orderCode)) { + sql.append(" and c.task_order_id like '%" + orderCode + "%'"); + } + if (StringUtils.isNotBlank(phone)) { + sql.append(" and r.USER_PHONE like '%" + phone + "%'"); + } + if (StringUtils.isNotBlank(queryDate1)) { + sql.append(" and c.RECHARGE_TIME >= '"+queryDate1+"'"); + } + // 结束时间 + if (StringUtils.isNotBlank(queryDate2)) { + sql.append(" and c.RECHARGE_TIME <= '"+queryDate2+"'"); + } + + sql.append("ORDER BY CREATE_TIME DESC"); + try { + list = dao.getRsBySql(sql.toString()); + //获取充值记录信息并将其遍历,放入实例化对象中,再将对象加入集合中 + if (list != null && list.size() > 0) { + RechangeQueryExcelVO header = new RechangeQueryExcelVO("VIN码", "电子账户", "手机号码", "车牌号", "服务类型", "案件编号", "充值金额", "充值时间", "到期时间"); + listExcel.add(header); + for (int i = 0; i < list.size(); i++) { + RechangeQueryExcelVO rechangeQueryExcelVO = new RechangeQueryExcelVO(); + Object[] objects = (Object[]) list.get(i); + rechangeQueryExcelVO.setVinCode(ReturnObjStr(objects[1])); + rechangeQueryExcelVO.setElectronicAccounts(ReturnObjStr(objects[10])); + rechangeQueryExcelVO.setUserPhone(ReturnObjStr(objects[13])); + rechangeQueryExcelVO.setLicense(ReturnObjStr(objects[12])); + rechangeQueryExcelVO.setServiceType(ReturnObjStr(objects[5])); + rechangeQueryExcelVO.setcaseCode(ReturnObjStr(objects[2])); + //格式化日期 + SimpleDateFormat sdf=new SimpleDateFormat("yyyy-MM-dd hh:mm:ss"); + Date date=sdf.parse(ReturnObjStr(objects[3])); + rechangeQueryExcelVO.setRechargeTime(sdf.format(date)); + rechangeQueryExcelVO.setRechargeCount(ReturnObjStr(objects[4])); + Date overDate=sdf.parse(ReturnObjStr(objects[8])); + rechangeQueryExcelVO.setOverdueTime(sdf.format(overDate)); + listExcel.add(rechangeQueryExcelVO); + } + + //String s = URLEncoder.encode("充值记录", "GBK"); + //时间格式转换 + SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyyMMddHHmmss"); + //获取当前时间并转换为字符串 + String dateTime = simpleDateFormat.format(new Date()); + //到处报表路径 + String path = request.getRealPath("attached") + File.separator + "recharge_record_" + dateTime + ".xlsx"; + String webUrl = UtilTools.getWebAddress(request) + File.separator + + "attached" + File.separator + "recharge_record_" + dateTime + ".xlsx"; + boolean b = new RechangeQueryExcelVO().saveAll(listExcel, path); + if (b) { + jsonObject.put("result", "0");// 0:成功,1失败 + jsonObject.put("msg", "导出成功!"); + jsonObject.put("webUrl", webUrl); + } + } + } catch (Exception e) { + e.printStackTrace(); + } + return jsonObject; + + } + } + + @Override + public Vo getCoupon(String vin, String electronicAccounts, int page, int raws) { + return dao.getCoupon(vin, electronicAccounts, page, raws); + } + + @Override + public Map consume(String consumeTime, String vinCode, Double consumeCount, + Integer enterpriseJlrId, String reparieInfo, String hitchInfo, String remark, String epassword) { + //声明一个Map集合用来存储结果集信息 + Map map = new HashMap(); + map.put("status", false); + try { + //判断密码是否正确 + JLRCoupon conponjlr = (JLRCoupon) dao.getObjectHql("from JLRCoupon where vin_code='" + vinCode + "' and e_password='" + epassword + "'"); + if (conponjlr == null) { + map.put("msg", "消费密码不正确"); + return map; + } + + //查询该用户的充值记录 + List couponRechargeJlrList = dao.getRsByHql("from CouponRechargeJlrPO where VIN_CODE='" + vinCode + "' and recharge_count>ifNull(consume_count,0) and overdue_time>NOW() order by overdue_time"); + double balance = 0;//余额 + if (couponRechargeJlrList != null && couponRechargeJlrList.size() > 0) { + for (CouponRechargeJlrPO couponRechargeJlr : couponRechargeJlrList) { + balance += (couponRechargeJlr.getRecharge_count() - MTextUtils.stringToDouble(couponRechargeJlr.getConsume_count())); + } + } else { + map.put("msg", "余额不足"); + return map; + } + + + //余额小于消费金额 + if (balance < consumeCount) { + map.put("msg", "余额不足"); + return map; + } + + + //计算代金劵消费 + List consumeCouponRechargeJlrList = new ArrayList(); + //声明本次的消费金额 + double b = consumeCount; + //遍历所有的充值信息(充值金额大于消费金额且没有过期) + for (CouponRechargeJlrPO couponRechargeJlr : couponRechargeJlrList) { + double c = couponRechargeJlr.getRecharge_count() - MTextUtils.stringToDouble(couponRechargeJlr.getConsume_count()); + if (c > 0) { + if (c >= b) { + String s=String.valueOf(b + MTextUtils.stringToDouble(couponRechargeJlr.getConsume_count())); + couponRechargeJlr.setConsume_count(Float.valueOf(s)); + consumeCouponRechargeJlrList.add(couponRechargeJlr); + break; + } else { + b = b - c; + couponRechargeJlr.setConsume_count(couponRechargeJlr.getRecharge_count()); + consumeCouponRechargeJlrList.add(couponRechargeJlr); + continue; + } + + } + } + //声明一个消费记录实体类 + CouponConsumeJlrPO conponConsumejlr = new CouponConsumeJlrPO(); + conponConsumejlr.setElectronic_accounts(conponjlr.getElectronic_accounts()); + conponConsumejlr.setVin_code(vinCode); + conponConsumejlr.setConsume_count(Float.valueOf(String.valueOf(consumeCount))); + conponConsumejlr.setHitch_info(hitchInfo); + conponConsumejlr.setEnterprise_id(enterpriseJlrId); + conponConsumejlr.setReparie_info(reparieInfo); + conponConsumejlr.setRemark(remark); + conponConsumejlr.setSettlement_state(0); + conponConsumejlr.setCreate_time(new Date()); + conponConsumejlr.setUpdate_time(new Date()); + conponConsumejlr.setSettle_time(new Date()); + DateFormat format1 = new SimpleDateFormat("yyyy-MM-dd"); + conponConsumejlr.setConsume_time(format1.parse(consumeTime)); + //临时主键生成 + conponConsumejlr.setId(Integer.valueOf((System.currentTimeMillis() / 10 + "").substring(3))); + if (dao.consume(conponConsumejlr, consumeCouponRechargeJlrList)) { + map.put("status", true); + return map; + } else { + map.put("msg", "数据出错!"); + return map; + } + + } catch (Exception e) { + e.printStackTrace(); + map.put("msg", "数据出错!"); + return map; + } + } + +} diff --git a/src/main/java/com/zhongdao/jlr/business/service/impl/EnterpriseServiceImpl.java b/src/main/java/com/zhongdao/jlr/business/service/impl/EnterpriseServiceImpl.java new file mode 100644 index 0000000..9f5e2d2 --- /dev/null +++ b/src/main/java/com/zhongdao/jlr/business/service/impl/EnterpriseServiceImpl.java @@ -0,0 +1,167 @@ +package com.zhongdao.jlr.business.service.impl; + +import com.util.UtilTools; +import com.util.Vo; +import com.zhongdao.jlr.business.dao.EnterpriseDao; +import com.zhongdao.jlr.business.service.EnterpriseService; +import com.zhongdao.jlr.business.vo.EnterpriseExcelVO; +import com.zhongdao.jlr.pojo.BaseUser; +import com.zhongdao.jlr.pojo.EnterpriseJlr; +import com.zhongdao.jlr.util.GeoAddressCenter; +import jodd.util.BCrypt; +import org.apache.http.util.TextUtils; +import org.json.JSONObject; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +import javax.servlet.http.HttpServletRequest; +import java.io.File; +import java.text.SimpleDateFormat; +import java.util.ArrayList; +import java.util.Date; +import java.util.List; + +/*** + * 处理经销商维护的业务 + */ +@Service(value = "enterpriseServiceImpl") +public class EnterpriseServiceImpl implements EnterpriseService { + + @Autowired + private EnterpriseDao enterpriseDao; + + @Override + public Vo searchEnterprise(String name, String abbrCode, + Integer page, Integer rows) { + return enterpriseDao.searchEnterprise(name,abbrCode,page, rows); + } + + @Override + public boolean deleteById(String id) { + return enterpriseDao.deleteById(id); + } + + @Override + public boolean putEnterprise(EnterpriseJlr enterprise, String newPassword, String confirmPassword,String UID) throws + Exception { + //声明一个用户对象 + List systemUser =new ArrayList<>(); + String sql=null; + //根据供应商id获取用户信息 + if(UID == null) { + sql = "select id from jlr_user where enterprise_id is not null and enterprise_id = "+ enterprise.getId(); + }else{ + sql = "select id from jlr_user where enterprise_id is not null and enterprise_id= "+ enterprise.getId()+ " and id = "+UID; + } + List list=enterpriseDao.getRsBySql(sql); + for (int i = 0; i < list.size(); i++) { + //声明一个菜单对象并将信息放入对象里面 + BaseUser baseUser = new BaseUser(); + baseUser.setId((Integer)list.get(i)); + //将对象放入集合中 + systemUser.add(baseUser); + } + //如果没有供应商id说明此操作为添加 + if (enterprise.getId() == null || enterprise.getId() < 1) { + //临时主键生成 + enterprise.setId(Integer.valueOf((System.currentTimeMillis() / 10 + "").substring(3))); + //声明一个当前时间的对象 + Date date=new Date(); + enterprise.setCreate_time(date); + } + //如果经纬度不为空则根据经纬度获取地区编码,并将其放入供应商对象中 + if (enterprise.getLon() != null && enterprise.getLat() != null) { + String areaCode = GeoAddressCenter.getGeoAdcode(enterprise.getLon() + "", enterprise.getLat() + ""); + enterprise.setArea_code(areaCode); + } else { + return false; + } + //如果用户信息不为空则更新用户信息 + if (systemUser != null && !TextUtils.isEmpty(newPassword)) { + for(BaseUser baseUser:systemUser){ + String password=BCrypt.hashpw(newPassword,BCrypt.gensalt()); + baseUser.setPassword(password); + enterpriseDao.putSystemUser(baseUser); + } + } + Date updateDate=new Date(); + enterprise.setUpdate_time(updateDate); + //添加或修改用户信息 + return enterpriseDao.putEnterprise(enterprise); + } + + @Override + public EnterpriseJlr getById(String id) { + return enterpriseDao.getById(id); + } + + @Override + public JSONObject expordata(HttpServletRequest request, String name, String abbrCode) { + //声明一个集合用于存放供应商信息 + List listExcel = new ArrayList(); + StringBuffer hqlSb = new StringBuffer("from EnterpriseJlr where 1=1"); + if (!TextUtils.isEmpty(name)) { + hqlSb.append(" and name like '%" + name.trim() + "%' "); + } + if (!TextUtils.isEmpty(abbrCode)) { + hqlSb.append(" and abbr_code like '%" + abbrCode.trim() + "%'"); + } + //声明一个json对象 + JSONObject jsonObject = new JSONObject(); + List list = null; + try { + //根据搜索条件获取供应商信息 + list = enterpriseDao.getRsByHql(hqlSb.toString()); + } catch (Exception e) { + e.printStackTrace(); + jsonObject.put("result", "1");// 0:成功,1失败 + jsonObject.put("msg", "导出失败!"); + } + if (list != null && list.size() > 0) { + //声明一个excel表头 + EnterpriseExcelVO header = new EnterpriseExcelVO("VIN码", "经销商名称", "经销商代码", "地址", + "24小时联系人1姓名", "24小时联系人1电话", "24小时联系人1职务", "24小时联系人2姓名", "24小时联系人2电话", + "24小时联系人2职务", "对账联系人姓名", "对账联系人电话", "对账联系人职务", "邮箱", "服务类型", "车型", "首次销售日期"); + listExcel.add(header); + //遍历供应商信息并将其放入供应商对象中 + for (int i = 0; i < list.size(); i++) { + EnterpriseExcelVO enterpriseExcelVO = new EnterpriseExcelVO(); + EnterpriseJlr enterpriseJlr = (EnterpriseJlr) list.get(i); + enterpriseExcelVO.setVinCode(enterpriseJlr.getVin_code()); + enterpriseExcelVO.setName(enterpriseJlr.getName()); + enterpriseExcelVO.setAbbrCode(enterpriseJlr.getAbbr_code()); + enterpriseExcelVO.setAddress(enterpriseJlr.getAddress()); + enterpriseExcelVO.setContract(enterpriseJlr.getContact()); + enterpriseExcelVO.setJob1(enterpriseJlr.getJob1()); + enterpriseExcelVO.setPhone1(enterpriseJlr.getPhone1()); + enterpriseExcelVO.setContact2(enterpriseJlr.getContact2()); + enterpriseExcelVO.setPhone2(enterpriseJlr.getPhone2()); + enterpriseExcelVO.setJob2(enterpriseJlr.getJob2()); + enterpriseExcelVO.setContact3(enterpriseJlr.getContact3()); + enterpriseExcelVO.setJob3(enterpriseJlr.getJob3()); + enterpriseExcelVO.setPhone3(enterpriseJlr.getPhone3()); + enterpriseExcelVO.setBrands(enterpriseJlr.getBrands()); + enterpriseExcelVO.setServiceQualification(enterpriseJlr.getService_qualification()); + enterpriseExcelVO.setFirstSaleDate(enterpriseJlr.getFirst_sale_date()); + enterpriseExcelVO.setCarType(enterpriseJlr.getCar_type()); + listExcel.add(enterpriseExcelVO); + } + //格式转换 + SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyyMMddHHmmss"); + String dateTime = simpleDateFormat.format(new Date()); + //导出路径 + String path = request.getRealPath("attached") + File.separator + "enterprise_" + dateTime + ".xlsx"; + String webUrl = UtilTools.getWebAddress(request) + File.separator + "attached" + File.separator + "enterprise_" + dateTime + ".xlsx"; + // webUrl = URLEncoder.encode(webUrl, "UTF-8"); + //所有信息保存到excel表中并导出表格 + boolean b = new EnterpriseExcelVO().saveAll(listExcel, path); + if (b) { + jsonObject.put("result", "0");// 0:成功,1失败 + jsonObject.put("msg", "导出成功!"); + jsonObject.put("webUrl", webUrl); + } + } + return jsonObject; + } + +} diff --git a/src/main/java/com/zhongdao/jlr/business/service/impl/OrderCheckServiceImpl.java b/src/main/java/com/zhongdao/jlr/business/service/impl/OrderCheckServiceImpl.java new file mode 100644 index 0000000..1fed59c --- /dev/null +++ b/src/main/java/com/zhongdao/jlr/business/service/impl/OrderCheckServiceImpl.java @@ -0,0 +1,40 @@ +package com.zhongdao.jlr.business.service.impl; + +import com.util.Vo; +import com.zhongdao.jlr.business.dao.OrderCheckDao; +import com.zhongdao.jlr.business.service.OrderCheckService; +import net.sf.json.JSONObject; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +import javax.servlet.http.HttpServletRequest; + +/*** + * 处理服务结算的业务 + */ +@Service(value = "orderCheckServiceImpl") +public class OrderCheckServiceImpl implements OrderCheckService{ + + @Autowired + OrderCheckDao dao; + + @Override + public Vo list(HttpServletRequest request, int page, int raws, String orderCode, String queryDate1, String rescueCompanyName, String queryDate2, String check_state) { + return dao.list(request,page,raws,orderCode,queryDate1,rescueCompanyName,queryDate2,check_state); + } + + @Override + public Vo lists(HttpServletRequest request, int page, int raws, String code, String orderCode, String queryDate1, String rescueCompanyName, String queryDate2, String check_state,String state) { + return dao.lists(request,page,raws,code,orderCode,queryDate1,rescueCompanyName,queryDate2,check_state,state); + } + + @Override + public JSONObject exportData(HttpServletRequest request, String code, String orderCode, String queryDate1, String rescueCompanyName, String queryDate2, String check_state) { + return dao.exportData(request,code,orderCode,queryDate1,rescueCompanyName,queryDate2,check_state); + } + + @Override + public boolean updateInfo(String uid, String totalFee) { + return dao.updateInfo(uid,totalFee); + } +} diff --git a/src/main/java/com/zhongdao/jlr/business/service/impl/RoleServiceImpl.java b/src/main/java/com/zhongdao/jlr/business/service/impl/RoleServiceImpl.java new file mode 100644 index 0000000..0eedbdd --- /dev/null +++ b/src/main/java/com/zhongdao/jlr/business/service/impl/RoleServiceImpl.java @@ -0,0 +1,199 @@ +package com.zhongdao.jlr.business.service.impl; + +import com.util.Vo; +import com.zhongdao.jlr.business.dao.RoleDao; +import com.zhongdao.jlr.business.service.RoleService; +import com.zhongdao.jlr.business.vo.JLRMenu; +import com.zhongdao.jlr.pojo.BaseMenu; +import com.zhongdao.jlr.pojo.JLRAuthority; +import com.zhongdao.jlr.pojo.JLRRole; +import org.apache.http.util.TextUtils; +import org.hibernate.Session; +import org.hibernate.SessionFactory; +import org.hibernate.Transaction; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +import javax.servlet.http.HttpServletRequest; +import java.sql.Connection; +import java.sql.PreparedStatement; +import java.sql.ResultSet; +import java.sql.Statement; +import java.util.Date; +import java.util.List; + +/*** + * 处理关于角色的业务 + */ +@Service(value = "roleServiceImpl") +public class RoleServiceImpl implements RoleService { + + @Autowired + RoleDao dao; +// @Autowired +// private SessionFactory sessionFactory; + + @Override + public Vo getRoleInfo(HttpServletRequest request, String name) { + return dao.getRoleInfo(request,name); + } + + @Override + public List getTreeInfo() { + return dao.getTreeInfo(); + } + +// @Override +// public boolean updateRoleInfo(JLRRole jlrRole, int[] ids) { +// //获取当前日期 +// Date date=new Date(); +// jlrRole.setUpdate_time(date); +// jlrRole.setDelete_flag(0); +// //声明一个角色权限对象 +// JLRAuthority jlrAuthority=new JLRAuthority(); +// if(jlrRole.getId() == null){ +// //随机生成主键id +// int id=Integer.valueOf((System.currentTimeMillis() / 10 + "").substring(3)); +// jlrRole.setId(id); +// //将角色id放入对象中 +// jlrAuthority.setRole_id(id); +// }else{ +// //如果角色id不为空则判断此操作为修改,删除权限信息 +// dao.deleteSupplier(jlrRole.getId()); +// jlrAuthority.setRole_id(jlrRole.getId()); +// } +// //添加角色信息 +// dao.updateRoleInfo(jlrRole); +// //将时间放入对象中 +// jlrAuthority.setUpdate_time(date); +// try { +// Session session = sessionFactory.getCurrentSession().getSessionFactory().openSession(); +// Transaction tx = session.beginTransaction(); +// //遍历菜单id,并批量添加数据 +// for(int i=0 ; i getMenu(String id) { + return dao.getMenu(id); + } + + @Override + public boolean deleteRole(String id, String name) { + //声明一个角色对象 + JLRRole jlrRole = new JLRRole(); + //将数据放入对象中 + jlrRole.setId(Integer.valueOf(id)); + jlrRole.setName(name); + jlrRole.setDelete_flag(1); + Date date = new Date(); + jlrRole.setUpdate_time(date); + //分别删除角色信息和权限信息 + if (dao.updateRoleInfo(jlrRole) && dao.deleteSupplier(jlrRole.getId())) { + return true; + } + return false; + } +} diff --git a/src/main/java/com/zhongdao/jlr/business/service/impl/SupplierServiceImpl.java b/src/main/java/com/zhongdao/jlr/business/service/impl/SupplierServiceImpl.java new file mode 100644 index 0000000..d1c2184 --- /dev/null +++ b/src/main/java/com/zhongdao/jlr/business/service/impl/SupplierServiceImpl.java @@ -0,0 +1,151 @@ +package com.zhongdao.jlr.business.service.impl; + +import com.util.Vo; +import com.zhongdao.jlr.business.dao.SupplierDao; +import com.zhongdao.jlr.business.service.SupplierService; +import com.zhongdao.jlr.business.vo.Contract; +import com.zhongdao.jlr.business.vo.Destination; +import com.zhongdao.jlr.business.vo.Enterprise; +import com.zhongdao.jlr.pojo.JLRDestination; +import com.zhongdao.jlr.pojo.JLRSupplier; +import com.zhongdao.jlr.pojo.JLRUserContract; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +import javax.servlet.http.HttpServletRequest; +import java.util.List; + +@Service(value = "supplierServiceImpl") +public class SupplierServiceImpl implements SupplierService { + + @Autowired + SupplierDao dao; + @Override + public Vo getContractInfo(HttpServletRequest request,String name,String id) { + return dao.getContractInfo(request,name,id); + } + + @Override + public List getAssignContract(String id) { + return dao.getAssignContract(id); + } + + @Override + public List geAssignDestination(String id) { + return dao.getAssignDestination(id); + } + + @Override + public List geAssignEnterprise(String id) { + return dao.getAssignEnterprise(id); + } + + @Override + public Vo getEnterpriseInfo(HttpServletRequest request,String name,String id) { + return dao.getEnterpriseInfo(request,name,id); + } + + @Override + public Vo getDestination(HttpServletRequest request, String name,String id) { + return dao.getDestination(request,name,id); + } + + @Override + public boolean insertContractInfo(Integer id, int[] ids) { + //声明一个合同对象 + JLRUserContract jlrUserContract=new JLRUserContract(); + jlrUserContract.setJlr_user_id(id); + //批量插入数据 + for(int i=0;i getDestinationInfo(String id) { + return dao.getContract(id); + } +} diff --git a/src/main/java/com/zhongdao/jlr/business/service/impl/UserInfoServiceImpl.java b/src/main/java/com/zhongdao/jlr/business/service/impl/UserInfoServiceImpl.java new file mode 100644 index 0000000..ffcdc1b --- /dev/null +++ b/src/main/java/com/zhongdao/jlr/business/service/impl/UserInfoServiceImpl.java @@ -0,0 +1,65 @@ +package com.zhongdao.jlr.business.service.impl; + +import com.util.Vo; +import com.zhongdao.jlr.business.dao.UserInfoDao; +import com.zhongdao.jlr.business.service.UserInfoService; +import com.zhongdao.jlr.pojo.BaseRole; +import com.zhongdao.jlr.pojo.EnterpriseJlr; +import com.zhongdao.jlr.pojo.JLRRole; +import com.zhongdao.jlr.pojo.JLRUser; +import jodd.util.BCrypt; +import org.apache.http.util.TextUtils; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +import javax.servlet.http.HttpServletRequest; +import java.util.Date; +import java.util.List; + +/** + * 处理用户信息管理的业务 + */ +@Service(value = "userInfoService") +public class UserInfoServiceImpl implements UserInfoService { + + @Autowired + UserInfoDao dao; + + @Override + public List getRoleInfo() { + return dao.getRoleInfo(); + } + + @Override + public List getEnterpriseInfo() { + return dao.getEnterpriseInfo(); + } + + @Override + public Vo getUserInfo(HttpServletRequest request,String name,String phone,String role,String username) { + return dao.getUserInfo(request,name,phone,role,username); + } + + @Override + public boolean updateUserInfo(JLRUser user) { + //声明一个当前日期的对象 + Date date=new Date(); + //将当前日期存入对象中 + user.setUpdate_time(date); + if(!TextUtils.isEmpty(user.getPassword())){ + //密码加密 + user.setPassword(BCrypt.hashpw(user.getPassword(),BCrypt.gensalt())); + } + return dao.updateUserInfo(user); + } + + @Override + public JLRUser getUser(String id) { + return dao.getUser(id); + } + + @Override + public boolean deleteUser(JLRUser user) { + return dao.deleteUser(user); + } +} diff --git a/src/main/java/com/zhongdao/jlr/business/servlet/ReceiveCustomerInfoServlet.java b/src/main/java/com/zhongdao/jlr/business/servlet/ReceiveCustomerInfoServlet.java new file mode 100644 index 0000000..f105b0c --- /dev/null +++ b/src/main/java/com/zhongdao/jlr/business/servlet/ReceiveCustomerInfoServlet.java @@ -0,0 +1,10 @@ +package com.zhongdao.jlr.business.servlet; + +import javax.servlet.http.HttpServlet; + +/** + * 用于 + */ +public class ReceiveCustomerInfoServlet extends HttpServlet { + +} diff --git a/src/main/java/com/zhongdao/jlr/business/vo/ConsumeQueryExcelVO.java b/src/main/java/com/zhongdao/jlr/business/vo/ConsumeQueryExcelVO.java new file mode 100644 index 0000000..425b421 --- /dev/null +++ b/src/main/java/com/zhongdao/jlr/business/vo/ConsumeQueryExcelVO.java @@ -0,0 +1,104 @@ +package com.zhongdao.jlr.business.vo; + +import com.ljh.excel.annotation.ColumnAnnotation; +import com.ljh.excel.bean.BaseBean; + +/** + */ +public class ConsumeQueryExcelVO extends BaseBean { + + @ColumnAnnotation("A") + private String vinCode;//VIN码 + @ColumnAnnotation("B") + private String electronicccounts;//电子账户 + @ColumnAnnotation("C") + private String userPhone;//手机号码 + @ColumnAnnotation("D") + private String license;//车牌号 + @ColumnAnnotation("E") + private String consumeTime;// 消费时间 + @ColumnAnnotation("F") + private String consumeCount;// 消费金额 + @ColumnAnnotation("G") + private String name;//经销商 + @ColumnAnnotation("H") + private String state;//审批状态 + + public ConsumeQueryExcelVO(String vinCode, String electronicccounts, String userPhone, String license, String consumeTime, String consumeCount, String name, String state) { + this.vinCode = vinCode; + this.electronicccounts = electronicccounts; + this.userPhone = userPhone; + this.license = license; + this.consumeTime = consumeTime; + this.consumeCount = consumeCount; + this.name = name; + this.state = state; + } + + public ConsumeQueryExcelVO() { + } + + public String getVinCode() { + return vinCode; + } + + public void setVinCode(String vinCode) { + this.vinCode = vinCode; + } + + public String getElectronicccounts() { + return electronicccounts; + } + + public void setElectronicccounts(String electronicccounts) { + this.electronicccounts = electronicccounts; + } + + public String getUserPhone() { + return userPhone; + } + + public void setUserPhone(String userPhone) { + this.userPhone = userPhone; + } + + public String getLicense() { + return license; + } + + public void setLicense(String license) { + this.license = license; + } + + public String getConsumeTime() { + return consumeTime; + } + + public void setConsumeTime(String consumeTime) { + this.consumeTime = consumeTime; + } + + public String getConsumeCount() { + return consumeCount; + } + + public void setConsumeCount(String consumeCount) { + this.consumeCount = consumeCount; + } + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + + public String getState() { + return state; + } + + public void setState(String state) { + this.state = state; + } +} diff --git a/src/main/java/com/zhongdao/jlr/business/vo/Contract.java b/src/main/java/com/zhongdao/jlr/business/vo/Contract.java new file mode 100644 index 0000000..4ef8858 --- /dev/null +++ b/src/main/java/com/zhongdao/jlr/business/vo/Contract.java @@ -0,0 +1,31 @@ +package com.zhongdao.jlr.business.vo; + +public class Contract { + + private int id;//编号 + private String name;//名称 + + public int getId() { + return id; + } + + public void setId(int id) { + this.id = id; + } + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + + @Override + public String toString() { + return "Contract{" + + "id=" + id + + ", name='" + name + '\'' + + '}'; + } +} diff --git a/src/main/java/com/zhongdao/jlr/business/vo/CouponConsumeJlr.java b/src/main/java/com/zhongdao/jlr/business/vo/CouponConsumeJlr.java new file mode 100644 index 0000000..4a9fe75 --- /dev/null +++ b/src/main/java/com/zhongdao/jlr/business/vo/CouponConsumeJlr.java @@ -0,0 +1,141 @@ +package com.zhongdao.jlr.business.vo; +import java.util.Date; + +public class CouponConsumeJlr { + private Integer id;//主键 + private String vinCode; + private String electronicAccounts;//电子账户 + private Double consumeCount; + private Date consumeTime; + private Integer resccueCompanyCode; + private String reparieInfo; + private String hitchInfo; + private Integer isSettle; + private Date settleTime; + private String remark;//备注 + private Integer settlementState; //结算状态 + private Date createTime; + + public Integer getId() { + return id; + } + + public void setId(Integer id) { + this.id = id; + } + + public String getVinCode() { + return vinCode; + } + + public void setVinCode(String vinCode) { + this.vinCode = vinCode; + } + + public String getElectronicAccounts() { + return electronicAccounts; + } + + public void setElectronicAccounts(String electronicAccounts) { + this.electronicAccounts = electronicAccounts; + } + + public Double getConsumeCount() { + return consumeCount; + } + + public void setConsumeCount(Double consumeCount) { + this.consumeCount = consumeCount; + } + + public Date getConsumeTime() { + return consumeTime; + } + + public void setConsumeTime(Date consumeTime) { + this.consumeTime = consumeTime; + } + + public Integer getResccueCompanyCode() { + return resccueCompanyCode; + } + + public void setResccueCompanyCode(Integer resccueCompanyCode) { + this.resccueCompanyCode = resccueCompanyCode; + } + + public String getReparieInfo() { + return reparieInfo; + } + + public void setReparieInfo(String reparieInfo) { + this.reparieInfo = reparieInfo; + } + + public String getHitchInfo() { + return hitchInfo; + } + + public void setHitchInfo(String hitchInfo) { + this.hitchInfo = hitchInfo; + } + + public Integer getIsSettle() { + return isSettle; + } + + public void setIsSettle(Integer isSettle) { + this.isSettle = isSettle; + } + + public Date getSettleTime() { + return settleTime; + } + + public void setSettleTime(Date settleTime) { + this.settleTime = settleTime; + } + + public String getRemark() { + return remark; + } + + public void setRemark(String remark) { + this.remark = remark; + } + + public Integer getSettlementState() { + return settlementState; + } + + public void setSettlementState(Integer settlementState) { + this.settlementState = settlementState; + } + + public Date getCreateTime() { + return createTime; + } + + public void setCreateTime(Date createTime) { + this.createTime = createTime; + } + + @Override + public String toString() { + return "CouponConsumeJlr{" + + "id=" + id + + ", vinCode='" + vinCode + '\'' + + ", electronicAccounts='" + electronicAccounts + '\'' + + ", consumeCount=" + consumeCount + + ", consumeTime=" + consumeTime + + ", resccueCompanyCode=" + resccueCompanyCode + + ", reparieInfo='" + reparieInfo + '\'' + + ", hitchInfo='" + hitchInfo + '\'' + + ", isSettle=" + isSettle + + ", settleTime=" + settleTime + + ", remark='" + remark + '\'' + + ", settlementState=" + settlementState + + ", createTime=" + createTime + + '}'; + } +} \ No newline at end of file diff --git a/src/main/java/com/zhongdao/jlr/business/vo/CouponJlrVO.java b/src/main/java/com/zhongdao/jlr/business/vo/CouponJlrVO.java new file mode 100644 index 0000000..37ec28e --- /dev/null +++ b/src/main/java/com/zhongdao/jlr/business/vo/CouponJlrVO.java @@ -0,0 +1,76 @@ +package com.zhongdao.jlr.business.vo; + +public class CouponJlrVO { + private String vinCode; + private String electronicAccounts;//电子账户 + private String userName; + private String userPhone; + private String license; + private String remark; + private Double charge;//余额 + private String password; + + public String getVinCode() { + return vinCode; + } + + public void setVinCode(String vinCode) { + this.vinCode = vinCode; + } + + public String getElectronicAccounts() { + return electronicAccounts; + } + + public void setElectronicAccounts(String electronicAccounts) { + this.electronicAccounts = electronicAccounts; + } + + public String getUserName() { + return userName; + } + + public void setUserName(String userName) { + this.userName = userName; + } + + public String getUserPhone() { + return userPhone; + } + + public void setUserPhone(String userPhone) { + this.userPhone = userPhone; + } + + public String getLicense() { + return license; + } + + public void setLicense(String license) { + this.license = license; + } + + public String getRemark() { + return remark; + } + + public void setRemark(String remark) { + this.remark = remark; + } + + public Double getCharge() { + return charge; + } + + public void setCharge(Double charge) { + this.charge = charge; + } + + public String getPassword() { + return password; + } + + public void setPassword(String password) { + this.password = password; + } +} diff --git a/src/main/java/com/zhongdao/jlr/business/vo/CouponRechargeJlr.java b/src/main/java/com/zhongdao/jlr/business/vo/CouponRechargeJlr.java new file mode 100644 index 0000000..7c0854e --- /dev/null +++ b/src/main/java/com/zhongdao/jlr/business/vo/CouponRechargeJlr.java @@ -0,0 +1,129 @@ +package com.zhongdao.jlr.business.vo; + + +import javax.persistence.Column; +import javax.persistence.Entity; +import javax.persistence.Id; +import javax.persistence.Table; +import java.util.Date; + +public class CouponRechargeJlr { + private Integer id; + private String vinCode; + private String orderCode; + private Date rechargeTime;//充值时间 + private Date overdueTime;//过期时间 + + private Double rechargeCount;//充值金额 + private Double consumeCount;//已经消耗 + + private String seateName; + private String remark; + private String serviceName; + private Date createTime; + + public Integer getId() { + return id; + } + + public void setId(Integer id) { + this.id = id; + } + + public String getVinCode() { + return vinCode; + } + + public void setVinCode(String vinCode) { + this.vinCode = vinCode; + } + + public String getOrderCode() { + return orderCode; + } + + public void setOrderCode(String orderCode) { + this.orderCode = orderCode; + } + + public Date getRechargeTime() { + return rechargeTime; + } + + public void setRechargeTime(Date rechargeTime) { + this.rechargeTime = rechargeTime; + } + + public Date getOverdueTime() { + return overdueTime; + } + + public void setOverdueTime(Date overdueTime) { + this.overdueTime = overdueTime; + } + + public Double getRechargeCount() { + return rechargeCount; + } + + public void setRechargeCount(Double rechargeCount) { + this.rechargeCount = rechargeCount; + } + + public Double getConsumeCount() { + return consumeCount; + } + + public void setConsumeCount(Double consumeCount) { + this.consumeCount = consumeCount; + } + + public String getSeateName() { + return seateName; + } + + public void setSeateName(String seateName) { + this.seateName = seateName; + } + + public String getRemark() { + return remark; + } + + public void setRemark(String remark) { + this.remark = remark; + } + + public String getServiceName() { + return serviceName; + } + + public void setServiceName(String serviceName) { + this.serviceName = serviceName; + } + + public Date getCreateTime() { + return createTime; + } + + public void setCreateTime(Date createTime) { + this.createTime = createTime; + } + + @Override + public String toString() { + return "CouponRechargeJlr{" + + "id=" + id + + ", vinCode='" + vinCode + '\'' + + ", orderCode='" + orderCode + '\'' + + ", rechargeTime=" + rechargeTime + + ", overdueTime=" + overdueTime + + ", rechargeCount=" + rechargeCount + + ", consumeCount=" + consumeCount + + ", seateName='" + seateName + '\'' + + ", remark='" + remark + '\'' + + ", serviceName='" + serviceName + '\'' + + ", createTime=" + createTime + + '}'; + } +} \ No newline at end of file diff --git a/src/main/java/com/zhongdao/jlr/business/vo/Destination.java b/src/main/java/com/zhongdao/jlr/business/vo/Destination.java new file mode 100644 index 0000000..c5dd161 --- /dev/null +++ b/src/main/java/com/zhongdao/jlr/business/vo/Destination.java @@ -0,0 +1,31 @@ +package com.zhongdao.jlr.business.vo; + +public class Destination { + + private int id;//编号 + private String name;//名称 + + public int getId() { + return id; + } + + public void setId(int id) { + this.id = id; + } + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + + @Override + public String toString() { + return "Destination{" + + "id=" + id + + ", name='" + name + '\'' + + '}'; + } +} diff --git a/src/main/java/com/zhongdao/jlr/business/vo/Enterprise.java b/src/main/java/com/zhongdao/jlr/business/vo/Enterprise.java new file mode 100644 index 0000000..2da9c64 --- /dev/null +++ b/src/main/java/com/zhongdao/jlr/business/vo/Enterprise.java @@ -0,0 +1,31 @@ +package com.zhongdao.jlr.business.vo; + +public class Enterprise { + + private int id;//编号 + private String name;//名称 + + public int getId() { + return id; + } + + public void setId(int id) { + this.id = id; + } + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + + @Override + public String toString() { + return "Enterprise{" + + "id=" + id + + ", name='" + name + '\'' + + '}'; + } +} diff --git a/src/main/java/com/zhongdao/jlr/business/vo/EnterpriseExcelVO.java b/src/main/java/com/zhongdao/jlr/business/vo/EnterpriseExcelVO.java new file mode 100644 index 0000000..616d01a --- /dev/null +++ b/src/main/java/com/zhongdao/jlr/business/vo/EnterpriseExcelVO.java @@ -0,0 +1,203 @@ +package com.zhongdao.jlr.business.vo; + +import com.ljh.excel.annotation.ColumnAnnotation; +import com.ljh.excel.bean.BaseBean; + +/** + */ +public class EnterpriseExcelVO extends BaseBean { + + @ColumnAnnotation("A") + private String vinCode; + @ColumnAnnotation("B") + private String name;//经销商 + @ColumnAnnotation("C") + private String abbrCode;//经销商代码 + @ColumnAnnotation("D") + private String address;//地址 + @ColumnAnnotation("E") + private String contract;//联系人 + @ColumnAnnotation("F") + private String phone1; + @ColumnAnnotation("G") + private String job1; + @ColumnAnnotation("H") + private String contact2; + @ColumnAnnotation("I") + private String phone2; + @ColumnAnnotation("J") + private String job2; + @ColumnAnnotation("K") + private String phone3; + @ColumnAnnotation("L") + private String contact3; + @ColumnAnnotation("M") + private String job3; + @ColumnAnnotation("N") + private String brands; + @ColumnAnnotation("O") + private String serviceQualification; + @ColumnAnnotation("P") + private String carType; + @ColumnAnnotation("Q") + private String firstSaleDate; + + public EnterpriseExcelVO() { + } + + public EnterpriseExcelVO(String vinCode, String name, String abbrCode, String address, String contract, String phone1, String job1, String contact2, String phone2, String job2, String phone3, String contact3, String job3, String brands, String serviceQualification, String carType, String firstSaleDate) { + this.vinCode = vinCode; + this.name = name; + this.abbrCode = abbrCode; + this.address = address; + this.contract = contract; + this.phone1 = phone1; + this.job1 = job1; + this.contact2 = contact2; + this.phone2 = phone2; + this.job2 = job2; + this.phone3 = phone3; + this.contact3 = contact3; + this.job3 = job3; + this.brands = brands; + this.serviceQualification = serviceQualification; + this.carType = carType; + this.firstSaleDate = firstSaleDate; + } + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + + public String getAbbrCode() { + return abbrCode; + } + + public void setAbbrCode(String abbrCode) { + this.abbrCode = abbrCode; + } + + public String getAddress() { + return address; + } + + public void setAddress(String address) { + this.address = address; + } + + public String getContract() { + return contract; + } + + public void setContract(String contract) { + this.contract = contract; + } + + public String getPhone1() { + return phone1; + } + + public void setPhone1(String phone1) { + this.phone1 = phone1; + } + + public String getJob1() { + return job1; + } + + public void setJob1(String job1) { + this.job1 = job1; + } + + public String getContact2() { + return contact2; + } + + public void setContact2(String contact2) { + this.contact2 = contact2; + } + + public String getPhone2() { + return phone2; + } + + public void setPhone2(String phone2) { + this.phone2 = phone2; + } + + public String getJob2() { + return job2; + } + + public void setJob2(String job2) { + this.job2 = job2; + } + + public String getPhone3() { + return phone3; + } + + public void setPhone3(String phone3) { + this.phone3 = phone3; + } + + public String getContact3() { + return contact3; + } + + public void setContact3(String contact3) { + this.contact3 = contact3; + } + + public String getJob3() { + return job3; + } + + public void setJob3(String job3) { + this.job3 = job3; + } + + public String getBrands() { + return brands; + } + + public void setBrands(String brands) { + this.brands = brands; + } + + public String getServiceQualification() { + return serviceQualification; + } + + public void setServiceQualification(String serviceQualification) { + this.serviceQualification = serviceQualification; + } + + public String getVinCode() { + return vinCode; + } + + public void setVinCode(String vinCode) { + this.vinCode = vinCode; + } + + public String getCarType() { + return carType; + } + + public void setCarType(String carType) { + this.carType = carType; + } + + public String getFirstSaleDate() { + return firstSaleDate; + } + + public void setFirstSaleDate(String firstSaleDate) { + this.firstSaleDate = firstSaleDate; + } +} diff --git a/src/main/java/com/zhongdao/jlr/business/vo/JLRMenu.java b/src/main/java/com/zhongdao/jlr/business/vo/JLRMenu.java new file mode 100644 index 0000000..0e927ce --- /dev/null +++ b/src/main/java/com/zhongdao/jlr/business/vo/JLRMenu.java @@ -0,0 +1,44 @@ +package com.zhongdao.jlr.business.vo; + + +import java.util.List; + +public class JLRMenu { + + private int id;//编号 + private String text;//名称 + private List children;//子菜单 + + public int getId() { + return id; + } + + public void setId(int id) { + this.id = id; + } + + public String getText() { + return text; + } + + public void setText(String text) { + this.text = text; + } + + public List getChildren() { + return children; + } + + public void setChildren(List children) { + this.children = children; + } + + @Override + public String toString() { + return "JLRMenu{" + + "id=" + id + + ", text='" + text + '\'' + + ", children=" + children + + '}'; + } +} diff --git a/src/main/java/com/zhongdao/jlr/business/vo/JLRRMenu.java b/src/main/java/com/zhongdao/jlr/business/vo/JLRRMenu.java new file mode 100644 index 0000000..06cd55c --- /dev/null +++ b/src/main/java/com/zhongdao/jlr/business/vo/JLRRMenu.java @@ -0,0 +1,41 @@ +package com.zhongdao.jlr.business.vo; + +public class JLRRMenu { + + private int id;//编号 + private String text;//名称 + private int parent_id;//父id + + public int getId() { + return id; + } + + public void setId(int id) { + this.id = id; + } + + public String getText() { + return text; + } + + public void setText(String text) { + this.text = text; + } + + public int getParent_id() { + return parent_id; + } + + public void setParent_id(int parent_id) { + this.parent_id = parent_id; + } + + @Override + public String toString() { + return "JLRRMenu{" + + "id=" + id + + ", text='" + text + '\'' + + ", parent_id=" + parent_id + + '}'; + } +} diff --git a/src/main/java/com/zhongdao/jlr/business/vo/LoginUserVo.java b/src/main/java/com/zhongdao/jlr/business/vo/LoginUserVo.java new file mode 100644 index 0000000..35d5f9f --- /dev/null +++ b/src/main/java/com/zhongdao/jlr/business/vo/LoginUserVo.java @@ -0,0 +1,127 @@ +package com.zhongdao.jlr.business.vo; + +import java.util.Collections; +import java.util.Comparator; +import java.util.List; + +import com.zhongdao.jlr.pojo.BaseMenu; + +public class LoginUserVo { + private Long id; + private String name; + private String login_name; + private String phone; + private String remark; + private Integer rescue_company_code; + private Integer role_id; + private Integer permission_organize_flag; + private Integer permission_flag; + private Integer enterpriseJlrId; + private String email; + + public String getEmail() { + return email; + } + + public void setEmail(String email) { + this.email = email; + } + + 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 getLogin_name() { + return login_name; + } + + public void setLogin_name(String login_name) { + this.login_name = login_name; + } + + public String getPhone() { + return phone; + } + + public void setPhone(String phone) { + this.phone = phone; + } + + public String getRemark() { + return remark; + } + + public void setRemark(String remark) { + this.remark = remark; + } + + public Integer getRescue_company_code() { + return rescue_company_code; + } + + public void setRescue_company_code(Integer rescue_company_code) { + this.rescue_company_code = rescue_company_code; + } + + public Integer getPermission_organize_flag() { + return permission_organize_flag; + } + + public void setPermission_organize_flag(Integer permission_organize_flag) { + this.permission_organize_flag = permission_organize_flag; + } + + public Integer getPermission_flag() { + return permission_flag; + } + + public void setPermission_flag(Integer permission_flag) { + this.permission_flag = permission_flag; + } + + + public Integer getEnterpriseJlrId() { + return enterpriseJlrId; + } + + public void setEnterpriseJlrId(Integer enterpriseJlrId) { + this.enterpriseJlrId = enterpriseJlrId; + } + + public Integer getRole_id() { + return role_id; + } + + public void setRole_id(Integer role_id) { + this.role_id = role_id; + } + + @Override + public String toString() { + return "LoginUserVo{" + + "id=" + id + + ", name='" + name + '\'' + + ", login_name='" + login_name + '\'' + + ", phone='" + phone + '\'' + + ", remark='" + remark + '\'' + + ", rescue_company_code=" + rescue_company_code + + ", role_id=" + role_id + + ", permission_organize_flag=" + permission_organize_flag + + ", permission_flag=" + permission_flag + + ", enterpriseJlrId=" + enterpriseJlrId + + ", email='" + email + '\'' + + '}'; + } +} diff --git a/src/main/java/com/zhongdao/jlr/business/vo/OrderCheckExcelVO.java b/src/main/java/com/zhongdao/jlr/business/vo/OrderCheckExcelVO.java new file mode 100644 index 0000000..562b189 --- /dev/null +++ b/src/main/java/com/zhongdao/jlr/business/vo/OrderCheckExcelVO.java @@ -0,0 +1,135 @@ +package com.zhongdao.jlr.business.vo; + +import com.ljh.excel.annotation.ColumnAnnotation; +import com.ljh.excel.bean.BaseBean; + +/** + */ +public class OrderCheckExcelVO extends BaseBean { + + @ColumnAnnotation("A") + private String code;//案件号码 + @ColumnAnnotation("B") + private String frameCode;//vin + @ColumnAnnotation("C") + private String rescueCompany;// + @ColumnAnnotation("D") + private String address;// + @ColumnAnnotation("E") + private String destAddress; + @ColumnAnnotation("F") + private String serviceType;// + @ColumnAnnotation("G") + private String createTime; + @ColumnAnnotation("H") + private String state;// + @ColumnAnnotation("I") + private String mileage; + @ColumnAnnotation("J") + private String checkState;// + @ColumnAnnotation("K") + private String totalFee;// + + public OrderCheckExcelVO(String code, String frameCode, String rescueCompany, String address, String destAddress, String serviceType, String createTime, String state, String mileage, String checkState, String totalFee) { + this.code = code; + this.frameCode = frameCode; + this.rescueCompany = rescueCompany; + this.address = address; + this.destAddress = destAddress; + this.serviceType = serviceType; + this.createTime = createTime; + this.state = state; + this.mileage = mileage; + this.checkState = checkState; + this.totalFee = totalFee; + } + + + public String getCode() { + return code; + } + + public void setCode(String code) { + this.code = code; + } + + public String getFrameCode() { + return frameCode; + } + + public void setFrameCode(String frameCode) { + this.frameCode = frameCode; + } + + public String getRescueCompany() { + return rescueCompany; + } + + public void setRescueCompany(String rescueCompany) { + this.rescueCompany = rescueCompany; + } + + public String getAddress() { + return address; + } + + public void setAddress(String address) { + this.address = address; + } + + public String getDestAddress() { + return destAddress; + } + + public void setDestAddress(String destAddress) { + this.destAddress = destAddress; + } + + public String getServiceType() { + return serviceType; + } + + public void setServiceType(String serviceType) { + this.serviceType = serviceType; + } + + public String getCreateTime() { + return createTime; + } + + public void setCreateTime(String createTime) { + this.createTime = createTime; + } + + public String getState() { + return state; + } + + public void setState(String state) { + this.state = state; + } + + public String getMileage() { + return mileage; + } + + public void setMileage(String mileage) { + this.mileage = mileage; + } + + public String getCheckState() { + return checkState; + } + + public void setCheckState(String checkState) { + this.checkState = checkState; + } + + public String getTotalFee() { + return totalFee; + } + + public void setTotalFee(String totalFee) { + this.totalFee = totalFee; + } +} diff --git a/src/main/java/com/zhongdao/jlr/business/vo/PageInfo.java b/src/main/java/com/zhongdao/jlr/business/vo/PageInfo.java new file mode 100644 index 0000000..ed37f03 --- /dev/null +++ b/src/main/java/com/zhongdao/jlr/business/vo/PageInfo.java @@ -0,0 +1,47 @@ +package com.zhongdao.jlr.business.vo; + +/*** + * 分页信息 + */ + +public class PageInfo { + + private Integer page; + private Integer rows; + private Integer currentIndex; + + // 获取 第page页的起始索引 + public int getCurrentIndex() { + return (page - 1) * rows; + } + + + public Integer getPage() { + return page; + } + + public void setPage(Integer page) { + this.page = page; + } + + public Integer getRows() { + return rows; + } + + public void setRows(Integer rows) { + this.rows = rows; + } + + public void setCurrentIndex(Integer currentIndex) { + this.currentIndex = currentIndex; + } + + @Override + public String toString() { + return "PageInfo{" + + "page=" + page + + ", rows=" + rows + + ", currentIndex=" + currentIndex + + '}'; + } +} diff --git a/src/main/java/com/zhongdao/jlr/business/vo/RechangeQueryExcelVO.java b/src/main/java/com/zhongdao/jlr/business/vo/RechangeQueryExcelVO.java new file mode 100644 index 0000000..6bec953 --- /dev/null +++ b/src/main/java/com/zhongdao/jlr/business/vo/RechangeQueryExcelVO.java @@ -0,0 +1,125 @@ +package com.zhongdao.jlr.business.vo; + +import com.ljh.excel.annotation.ColumnAnnotation; +import com.ljh.excel.bean.BaseBean; + +/** + */ +public class RechangeQueryExcelVO extends BaseBean { + + @ColumnAnnotation("A") + private String vinCode;//VIN码 + @ColumnAnnotation("B") + private String electronicAccounts;//电子账户 + @ColumnAnnotation("C") + private String userPhone;//手机号码 + @ColumnAnnotation("D") + private String license;//车牌号 + @ColumnAnnotation("E") + private String serviceType;// 服务类型 + @ColumnAnnotation("F") + private String caseCode;// 案件编号 +// @ColumnAnnotation("G") +// private String createTime;//案件创建时间 + @ColumnAnnotation("G") + private String rechargeCount;//充值金额 + @ColumnAnnotation("H") + private String rechargeTime;//充值时间 + @ColumnAnnotation("I") + private String overdueTime;//到期时间 + + public RechangeQueryExcelVO(String vinCode, String electronicAccounts, String userPhone, String license, String serviceType, String caseCode, String rechargeCount, String rechargeTime, String overdueTime) { + this.vinCode = vinCode; + this.electronicAccounts = electronicAccounts; + this.userPhone = userPhone; + this.license = license; + this.serviceType = serviceType; + this.caseCode = caseCode; + this.rechargeCount = rechargeCount; + this.rechargeTime = rechargeTime; + this.overdueTime = overdueTime; + } + + public RechangeQueryExcelVO() { + } + + public String getVinCode() { + return vinCode; + } + + public void setVinCode(String vinCode) { + this.vinCode = vinCode; + } + + public String getElectronicAccounts() { + return electronicAccounts; + } + + public void setElectronicAccounts(String electronicAccounts) { + this.electronicAccounts = electronicAccounts; + } + + public String getUserPhone() { + return userPhone; + } + + public void setUserPhone(String userPhone) { + this.userPhone = userPhone; + } + + public String getLicense() { + return license; + } + + public void setLicense(String license) { + this.license = license; + } + + public String getCaseCode() { + return caseCode; + } + + public void setCaseCode(String caseCode) { + this.caseCode = caseCode; + } + + public String getServiceType() { + return serviceType; + } + + public void setServiceType(String serviceType) { + this.serviceType = serviceType; + } + + public String getcaseCode() { + return caseCode; + } + + public void setcaseCode(String caseCode) { + this.caseCode = caseCode; + } + + public String getRechargeCount() { + return rechargeCount; + } + + public void setRechargeCount(String rechargeCount) { + this.rechargeCount = rechargeCount; + } + + public String getRechargeTime() { + return rechargeTime; + } + + public void setRechargeTime(String rechargeTime) { + this.rechargeTime = rechargeTime; + } + + public String getOverdueTime() { + return overdueTime; + } + + public void setOverdueTime(String overdueTime) { + this.overdueTime = overdueTime; + } +} diff --git a/src/main/java/com/zhongdao/jlr/business/vo/UserOrderCSVVO.java b/src/main/java/com/zhongdao/jlr/business/vo/UserOrderCSVVO.java new file mode 100644 index 0000000..49425bc --- /dev/null +++ b/src/main/java/com/zhongdao/jlr/business/vo/UserOrderCSVVO.java @@ -0,0 +1,214 @@ +package com.zhongdao.jlr.business.vo; + +/** + * Created by TEC2 on 2017/6/7. + */ +public class UserOrderCSVVO { + + private String clubIdNumber;//案件号码 + private String breakdownDate;// 开案日期 + private String vin;// VIN + private String currentMileage;// 里程表读数 + private String componentDescription;// 故障零件 + private String jlrComponent;// + private String faultDescription;// 故障原因(英文) + private String vrtCode; //VRT_CODE + private String vfgCode;// VFG_CODE + private String completionDescription;// 维修结果 英文 + private String verbatimComments;// 文字描述 + private String initialDiagnosedFault;// level2 英文 + private String attendingResource;//经销商代码 + private String accepted;// + private String suppress;// + private String shortVin;// vin码后6位 + private String ctryOfIncident; // 国家 chn + private String dealerCodeRepair;// 经销商代码 + private String dealerNameRepair;// 经销商名字 中文 + + public UserOrderCSVVO(String clubIdNumber, String breakdownDate, String vin, String currentMileage, String componentDescription, String jlrComponent, String faultDescription, String vrtCode, String vfgCode, String completionDescription, String verbatimComments, String initialDiagnosedFault, String attendingResource, String accepted, String suppress, String shortVin, String ctryOfIncident, String dealerCodeRepair, String dealerNameRepair) { + this.clubIdNumber = clubIdNumber; + this.breakdownDate = breakdownDate; + this.vin = vin; + this.currentMileage = currentMileage; + this.componentDescription = componentDescription; + this.jlrComponent = jlrComponent; + this.faultDescription = faultDescription; + this.vrtCode = vrtCode; + this.vfgCode = vfgCode; + this.completionDescription = completionDescription; + this.verbatimComments = verbatimComments; + this.initialDiagnosedFault = initialDiagnosedFault; + this.attendingResource = attendingResource; + this.accepted = accepted; + this.suppress = suppress; + this.shortVin = shortVin; + this.ctryOfIncident = ctryOfIncident; + this.dealerCodeRepair = dealerCodeRepair; + this.dealerNameRepair = dealerNameRepair; + } + + public UserOrderCSVVO() { + + } + + public String getClubIdNumber() { + return clubIdNumber; + } + + public void setClubIdNumber(String clubIdNumber) { + this.clubIdNumber = clubIdNumber; + } + + public String getBreakdownDate() { + return breakdownDate; + } + + public void setBreakdownDate(String breakdownDate) { + this.breakdownDate = breakdownDate; + } + + public String getVin() { + return vin; + } + + public void setVin(String vin) { + this.vin = vin; + } + + public String getCurrentMileage() { + return currentMileage; + } + + public void setCurrentMileage(String currentMileage) { + this.currentMileage = currentMileage; + } + + public String getComponentDescription() { + return componentDescription; + } + + public void setComponentDescription(String componentDescription) { + this.componentDescription = componentDescription; + } + + public String getJlrComponent() { + return jlrComponent; + } + + public void setJlrComponent(String jlrComponent) { + this.jlrComponent = jlrComponent; + } + + public String getFaultDescription() { + return faultDescription; + } + + public void setFaultDescription(String faultDescription) { + this.faultDescription = faultDescription; + } + + public String getVrtCode() { + return vrtCode; + } + + public void setVrtCode(String vrtCode) { + this.vrtCode = vrtCode; + } + + public String getVfgCode() { + return vfgCode; + } + + public void setVfgCode(String vfgCode) { + this.vfgCode = vfgCode; + } + + public String getCompletionDescription() { + return completionDescription; + } + + public void setCompletionDescription(String completionDescription) { + this.completionDescription = completionDescription; + } + + public String getVerbatimComments() { + return verbatimComments; + } + + public void setVerbatimComments(String verbatimComments) { + this.verbatimComments = verbatimComments; + } + + public String getInitialDiagnosedFault() { + return initialDiagnosedFault; + } + + public void setInitialDiagnosedFault(String initialDiagnosedFault) { + this.initialDiagnosedFault = initialDiagnosedFault; + } + + public String getAttendingResource() { + return attendingResource; + } + + public void setAttendingResource(String attendingResource) { + this.attendingResource = attendingResource; + } + + public String getAccepted() { + return accepted; + } + + public void setAccepted(String accepted) { + this.accepted = accepted; + } + + public String getSuppress() { + return suppress; + } + + public void setSuppress(String suppress) { + this.suppress = suppress; + } + + public String getShortVin() { + return shortVin; + } + + public void setShortVin(String shortVin) { + this.shortVin = shortVin; + } + + public String getCtryOfIncident() { + return ctryOfIncident; + } + + public void setCtryOfIncident(String ctryOfIncident) { + this.ctryOfIncident = ctryOfIncident; + } + + public String getDealerCodeRepair() { + return dealerCodeRepair; + } + + public void setDealerCodeRepair(String dealerCodeRepair) { + this.dealerCodeRepair = dealerCodeRepair; + } + + public String getDealerNameRepair() { + return dealerNameRepair; + } + + public void setDealerNameRepair(String dealerNameRepair) { + this.dealerNameRepair = dealerNameRepair; + } + + + @Override + public String toString() { + return clubIdNumber + "," + breakdownDate + ',' + vin + ',' + currentMileage + "," + componentDescription + + "," + jlrComponent + "," + faultDescription + "," + vrtCode + "," + vfgCode + "," + completionDescription + + "," + verbatimComments + "," + initialDiagnosedFault + "," + attendingResource + "," + accepted + + "," + suppress + "," + shortVin + "," + ctryOfIncident + "," + dealerCodeRepair + "," + dealerNameRepair+"\n"; + } +} diff --git a/src/main/java/com/zhongdao/jlr/business/vo/UserOrderExcelVO.java b/src/main/java/com/zhongdao/jlr/business/vo/UserOrderExcelVO.java new file mode 100644 index 0000000..d574695 --- /dev/null +++ b/src/main/java/com/zhongdao/jlr/business/vo/UserOrderExcelVO.java @@ -0,0 +1,252 @@ +package com.zhongdao.jlr.business.vo; + +import com.ljh.excel.annotation.ColumnAnnotation; +import com.ljh.excel.bean.BaseBean; + +/** + * Created by TEC2 on 2017/6/7. + */ +public class UserOrderExcelVO extends BaseBean { + + @ColumnAnnotation("A") + private String clubIdNumber;//案件号码 + @ColumnAnnotation("B") + private String breakdownDate;// 开案日期 + @ColumnAnnotation("C") + private String vin;// VIN + @ColumnAnnotation("D") + private String currentMileage;// 里程表读数 + @ColumnAnnotation("E") + private String componentDescription;// 故障零件 + @ColumnAnnotation("F") + private String jlrComponent;// + @ColumnAnnotation("G") + private String faultDescription;// 故障原因(英文) + @ColumnAnnotation("H") + private String vrtCode; //VRT_CODE + @ColumnAnnotation("I") + private String vfgCode;// VFG_CODE + @ColumnAnnotation("J") + private String completionDescription;// 维修结果 英文 + @ColumnAnnotation("K") + private String verbatimComments;// 文字描述 + @ColumnAnnotation("L") + private String initialDiagnosedFault;// level2 英文 + @ColumnAnnotation("M") + private String attendingResource;//经销商代码 + @ColumnAnnotation("N") + private String accepted;// + @ColumnAnnotation("O") + private String suppress;// + @ColumnAnnotation("P") + private String shortVin;// vin码后6位 + @ColumnAnnotation("Q") + private String ctryOfIncident; // 国家 chn + @ColumnAnnotation("R") + private String dealerCodeRepair;// 经销商代码 + @ColumnAnnotation("S") + private String dealerNameRepair;// 经销商名字 中文 + + public UserOrderExcelVO(String clubIdNumber, String breakdownDate, String vin, String currentMileage, String componentDescription, String jlrComponent, String faultDescription, String vrtCode, String vfgCode, String completionDescription, String verbatimComments, String initialDiagnosedFault, String attendingResource, String accepted, String suppress, String shortVin, String ctryOfIncident, String dealerCodeRepair, String dealerNameRepair) { + this.clubIdNumber = clubIdNumber; + this.breakdownDate = breakdownDate; + this.vin = vin; + this.currentMileage = currentMileage; + this.componentDescription = componentDescription; + this.jlrComponent = jlrComponent; + this.faultDescription = faultDescription; + this.vrtCode = vrtCode; + this.vfgCode = vfgCode; + this.completionDescription = completionDescription; + this.verbatimComments = verbatimComments; + this.initialDiagnosedFault = initialDiagnosedFault; + this.attendingResource = attendingResource; + this.accepted = accepted; + this.suppress = suppress; + this.shortVin = shortVin; + this.ctryOfIncident = ctryOfIncident; + this.dealerCodeRepair = dealerCodeRepair; + this.dealerNameRepair = dealerNameRepair; + } + + public UserOrderExcelVO() { + + } + + public String getClubIdNumber() { + return clubIdNumber; + } + + public void setClubIdNumber(String clubIdNumber) { + this.clubIdNumber = clubIdNumber; + } + + public String getBreakdownDate() { + return breakdownDate; + } + + public void setBreakdownDate(String breakdownDate) { + this.breakdownDate = breakdownDate; + } + + public String getVin() { + return vin; + } + + public void setVin(String vin) { + this.vin = vin; + } + + public String getCurrentMileage() { + return currentMileage; + } + + public void setCurrentMileage(String currentMileage) { + this.currentMileage = currentMileage; + } + + public String getComponentDescription() { + return componentDescription; + } + + public void setComponentDescription(String componentDescription) { + this.componentDescription = componentDescription; + } + + public String getJlrComponent() { + return jlrComponent; + } + + public void setJlrComponent(String jlrComponent) { + this.jlrComponent = jlrComponent; + } + + public String getFaultDescription() { + return faultDescription; + } + + public void setFaultDescription(String faultDescription) { + this.faultDescription = faultDescription; + } + + public String getVrtCode() { + return vrtCode; + } + + public void setVrtCode(String vrtCode) { + this.vrtCode = vrtCode; + } + + public String getVfgCode() { + return vfgCode; + } + + public void setVfgCode(String vfgCode) { + this.vfgCode = vfgCode; + } + + public String getCompletionDescription() { + return completionDescription; + } + + public void setCompletionDescription(String completionDescription) { + this.completionDescription = completionDescription; + } + + public String getVerbatimComments() { + return verbatimComments; + } + + public void setVerbatimComments(String verbatimComments) { + this.verbatimComments = verbatimComments; + } + + public String getInitialDiagnosedFault() { + return initialDiagnosedFault; + } + + public void setInitialDiagnosedFault(String initialDiagnosedFault) { + this.initialDiagnosedFault = initialDiagnosedFault; + } + + public String getAttendingResource() { + return attendingResource; + } + + public void setAttendingResource(String attendingResource) { + this.attendingResource = attendingResource; + } + + public String getAccepted() { + return accepted; + } + + public void setAccepted(String accepted) { + this.accepted = accepted; + } + + public String getSuppress() { + return suppress; + } + + public void setSuppress(String suppress) { + this.suppress = suppress; + } + + public String getShortVin() { + return shortVin; + } + + public void setShortVin(String shortVin) { + this.shortVin = shortVin; + } + + public String getCtryOfIncident() { + return ctryOfIncident; + } + + public void setCtryOfIncident(String ctryOfIncident) { + this.ctryOfIncident = ctryOfIncident; + } + + public String getDealerCodeRepair() { + return dealerCodeRepair; + } + + public void setDealerCodeRepair(String dealerCodeRepair) { + this.dealerCodeRepair = dealerCodeRepair; + } + + public String getDealerNameRepair() { + return dealerNameRepair; + } + + public void setDealerNameRepair(String dealerNameRepair) { + this.dealerNameRepair = dealerNameRepair; + } + + @Override + public String toString() { + return "UserOrderExcelVO{" + + "clubIdNumber='" + clubIdNumber + '\'' + + ", breakdownDate='" + breakdownDate + '\'' + + ", vin='" + vin + '\'' + + ", currentMileage='" + currentMileage + '\'' + + ", componentDescription='" + componentDescription + '\'' + + ", jlrComponent='" + jlrComponent + '\'' + + ", faultDescription='" + faultDescription + '\'' + + ", vrtCode='" + vrtCode + '\'' + + ", vfgCode='" + vfgCode + '\'' + + ", completionDescription='" + completionDescription + '\'' + + ", verbatimComments='" + verbatimComments + '\'' + + ", initialDiagnosedFault='" + initialDiagnosedFault + '\'' + + ", attendingResource='" + attendingResource + '\'' + + ", accepted='" + accepted + '\'' + + ", suppress='" + suppress + '\'' + + ", shortVin='" + shortVin + '\'' + + ", ctryOfIncident='" + ctryOfIncident + '\'' + + ", dealerCodeRepair='" + dealerCodeRepair + '\'' + + ", dealerNameRepair='" + dealerNameRepair + '\'' + + '}'; + } +} diff --git a/src/main/java/com/zhongdao/jlr/business/vo/UserOrderViewVO.java b/src/main/java/com/zhongdao/jlr/business/vo/UserOrderViewVO.java new file mode 100644 index 0000000..79a9069 --- /dev/null +++ b/src/main/java/com/zhongdao/jlr/business/vo/UserOrderViewVO.java @@ -0,0 +1,689 @@ +package com.zhongdao.jlr.business.vo; + +import java.util.Date; + +/** + * Created by TEC2 on 2017/6/7. + */ +public class UserOrderViewVO { + private String companyname; + private String companycode; + private String servercarname; + private String servicesname; + private String contractcompanyname; + + private int id; + private int rescue_vehicle_binding; + private int vehicle_user_id; + private int rescue_vehicle_user_id; + private int state; + private String address; + private double lon; + private double lat; + + private int service_id; + private String situation_describe; + private String address_property; + private int flow_id; + private String order_source; + private String userName; + private String userPhone; + private int range; + private int refuse_times; + private int find_overTime; + private int accept_overTime; + private int km_per; + private int has_refuse_times; + private String refuse_vehicle_ids; + private int score; + private String create_user; + private Date update_time; + private String score_content; + private String code; + private String contract_code; + private String identity; + private String license; + private String frame_code; + private String style; + private String brands; + private String fail_reason; + private int create_flag; + private int create_rescue_company; + private String settle; + private String create_time; + private Date appoint_time; + private String area_code; + private Date accept_time; + private Date finish_time; + private String contract_company_code; + private int order_type; + private int is_settle; + private String special_organize; + private String dest_address; + private String dest_describe; + private double dest_lon; + private double dest_lat; + private String service_staff_name; + private String service_staff_phone; + private int discount_type; + private int settle_type; + private String extra_pay; + private int MILEAGE2; + private int REF_MILEAGE2; + private String remark; + private String contracting_code; + private Date expect_arrive_time; + private String frist_deal; + + private int giveup_state; + private int is_audit; + private String report_phone; + private int dispatch_type; + private String checker_name; + private String checker_phone; + private String serviceEndTime; + + private String serviceType; + private String abbr_code; + + public String getServiceType() { + return serviceType; + } + + public void setServiceType(String serviceType) { + this.serviceType = serviceType; + } + + public String getServiceEndTime() { + return serviceEndTime; + } + + public void setServiceEndTime(String serviceEndTime) { + this.serviceEndTime = serviceEndTime; + } + + public String getChecker_name() { + return checker_name; + } + + public void setChecker_name(String checker_name) { + this.checker_name = checker_name; + } + + public String getChecker_phone() { + return checker_phone; + } + + public void setChecker_phone(String checker_phone) { + this.checker_phone = checker_phone; + } + + public int getDispatch_type() { + return dispatch_type; + } + + public void setDispatch_type(int dispatch_type) { + this.dispatch_type = dispatch_type; + } + + public String getReport_phone() { + return report_phone; + } + + public void setReport_phone(String report_phone) { + this.report_phone = report_phone; + } + + public int getGiveup_state() { + return giveup_state; + } + + public void setGiveup_state(int giveup_state) { + this.giveup_state = giveup_state; + } + + public int getId() { + return id; + } + + public void setId(int id) { + this.id = id; + } + + public int getRescue_vehicle_binding() { + return rescue_vehicle_binding; + } + + public void setRescue_vehicle_binding(int rescue_vehicle_binding) { + this.rescue_vehicle_binding = rescue_vehicle_binding; + } + + public int getVehicle_user_id() { + return vehicle_user_id; + } + + public void setVehicle_user_id(int vehicle_user_id) { + this.vehicle_user_id = vehicle_user_id; + } + + public int getRescue_vehicle_user_id() { + return rescue_vehicle_user_id; + } + + public void setRescue_vehicle_user_id(int rescue_vehicle_user_id) { + this.rescue_vehicle_user_id = rescue_vehicle_user_id; + } + + public int getState() { + return state; + } + + public void setState(int state) { + this.state = state; + } + + public String getAddress() { + return address; + } + + public void setAddress(String address) { + this.address = address; + } + + public double getLon() { + return lon; + } + + public void setLon(double lon) { + this.lon = lon; + } + + public double getLat() { + return lat; + } + + public void setLat(double lat) { + this.lat = lat; + } + + public int getService_id() { + return service_id; + + } + + public void setService_id(int service_id) { + this.service_id = service_id; + } + + public String getSituation_describe() { + return situation_describe; + } + + public void setSituation_describe(String situation_describe) { + this.situation_describe = situation_describe; + } + + public String getAddress_property() { + return address_property; + } + + public void setAddress_property(String address_property) { + this.address_property = address_property; + } + + public int getFlow_id() { + return flow_id; + } + + public void setFlow_id(int flow_id) { + this.flow_id = flow_id; + } + + public String getOrder_source() { + return order_source; + } + + public void setOrder_source(String order_source) { + this.order_source = order_source; + } + + public String getUserName() { + return userName; + } + + public void setUserName(String userName) { + this.userName = userName; + } + + public String getUserPhone() { + return userPhone; + } + + public void setUserPhone(String userPhone) { + this.userPhone = userPhone; + } + + public int getRange() { + return range; + } + + public void setRange(int range) { + this.range = range; + } + + public int getRefuse_times() { + return refuse_times; + } + + public void setRefuse_times(int refuse_times) { + this.refuse_times = refuse_times; + } + + public int getFind_overTime() { + return find_overTime; + } + + public void setFind_overTime(int find_overTime) { + this.find_overTime = find_overTime; + } + + public int getAccept_overTime() { + return accept_overTime; + } + + public void setAccept_overTime(int accept_overTime) { + this.accept_overTime = accept_overTime; + } + + public int getKm_per() { + return km_per; + } + + public void setKm_per(int km_per) { + this.km_per = km_per; + } + + public int getHas_refuse_times() { + return has_refuse_times; + } + + public void setHas_refuse_times(int has_refuse_times) { + this.has_refuse_times = has_refuse_times; + } + + public String getRefuse_vehicle_ids() { + return refuse_vehicle_ids; + } + + public void setRefuse_vehicle_ids(String refuse_vehicle_ids) { + this.refuse_vehicle_ids = refuse_vehicle_ids; + } + + public int getScore() { + return score; + } + + public void setScore(int score) { + this.score = score; + } + + public String getCreate_user() { + return create_user; + } + + public void setCreate_user(String create_user) { + this.create_user = create_user; + } + + public Date getUpdate_time() { + return update_time; + } + + public void setUpdate_time(Date update_time) { + this.update_time = update_time; + } + + public String getScore_content() { + return score_content; + } + + public void setScore_content(String score_content) { + this.score_content = score_content; + } + + public String getCode() { + return code; + } + + public void setCode(String code) { + this.code = code; + } + + public String getContract_code() { + return contract_code; + } + + public void setContract_code(String contract_code) { + this.contract_code = contract_code; + } + + public String getIdentity() { + return identity; + } + + public void setIdentity(String identity) { + this.identity = identity; + } + + public String getLicense() { + return license; + } + + public void setLicense(String license) { + this.license = license; + } + + public String getFrame_code() { + return frame_code; + } + + public void setFrame_code(String frame_code) { + this.frame_code = frame_code; + } + + public String getStyle() { + return style; + } + + public void setStyle(String style) { + this.style = style; + } + + public String getBrands() { + return brands; + } + + public void setBrands(String brands) { + this.brands = brands; + } + + public String getFail_reason() { + return fail_reason; + } + + public void setFail_reason(String fail_reason) { + this.fail_reason = fail_reason; + } + + public int getCreate_flag() { + return create_flag; + } + + public void setCreate_flag(int create_flag) { + this.create_flag = create_flag; + } + + public int getCreate_rescue_company() { + return create_rescue_company; + } + + public void setCreate_rescue_company(int create_rescue_company) { + this.create_rescue_company = create_rescue_company; + } + + public String getSettle() { + return settle; + } + + public void setSettle(String settle) { + this.settle = settle; + } + + public String getCreate_time() { + return create_time; + } + + public void setCreate_time(String create_time) { + this.create_time = create_time; + } + + public Date getAppoint_time() { + return appoint_time; + } + + public void setAppoint_time(Date appoint_time) { + this.appoint_time = appoint_time; + } + + public String getArea_code() { + return area_code; + } + + public void setArea_code(String area_code) { + this.area_code = area_code; + } + + public Date getAccept_time() { + return accept_time; + } + + public void setAccept_time(Date accept_time) { + this.accept_time = accept_time; + } + + public Date getFinish_time() { + return finish_time; + } + + public void setFinish_time(Date finish_time) { + this.finish_time = finish_time; + } + + public String getContract_company_code() { + return contract_company_code; + } + + public void setContract_company_code(String contract_company_code) { + this.contract_company_code = contract_company_code; + } + + public int getOrder_type() { + return order_type; + } + + public void setOrder_type(int order_type) { + this.order_type = order_type; + } + + public String getCompanyname() { + return companyname; + } + + public void setCompanyname(String companyname) { + this.companyname = companyname; + } + + public String getCompanycode() { + return companycode; + } + + public void setCompanycode(String companycode) { + this.companycode = companycode; + } + + public String getServercarname() { + return servercarname; + } + + public void setServercarname(String servercarname) { + this.servercarname = servercarname; + } + + public String getServicesname() { + return servicesname; + } + + public void setServicesname(String servicesname) { + this.servicesname = servicesname; + } + + public String getContractcompanyname() { + return contractcompanyname; + } + + public void setContractcompanyname(String contractcompanyname) { + this.contractcompanyname = contractcompanyname; + } + + public String getService_staff_phone() { + return service_staff_phone; + } + + public void setService_staff_phone(String service_staff_phone) { + this.service_staff_phone = service_staff_phone; + } + + public int getIs_settle() { + return is_settle; + } + + public void setIs_settle(int is_settle) { + this.is_settle = is_settle; + } + + public String getSpecial_organize() { + return special_organize; + } + + public void setSpecial_organize(String special_organize) { + this.special_organize = special_organize; + } + + public String getDest_address() { + return dest_address; + } + + public void setDest_address(String dest_address) { + this.dest_address = dest_address; + } + + public String getDest_describe() { + return dest_describe; + } + + public void setDest_describe(String dest_describe) { + this.dest_describe = dest_describe; + } + + public double getDest_lon() { + return dest_lon; + } + + public void setDest_lon(double dest_lon) { + this.dest_lon = dest_lon; + } + + public double getDest_lat() { + return dest_lat; + } + + public void setDest_lat(double dest_lat) { + this.dest_lat = dest_lat; + } + + public String getService_staff_name() { + return service_staff_name; + } + + public void setService_staff_name(String service_staff_name) { + this.service_staff_name = service_staff_name; + } + + public int getDiscount_type() { + return discount_type; + } + + public void setDiscount_type(int discount_type) { + this.discount_type = discount_type; + } + + public int getSettle_type() { + return settle_type; + } + + public void setSettle_type(int settle_type) { + this.settle_type = settle_type; + } + + public String getExtra_pay() { + return extra_pay; + } + + public void setExtra_pay(String extra_pay) { + this.extra_pay = extra_pay; + } + + public int getMILEAGE2() { + return MILEAGE2; + } + + public void setMILEAGE2(int mILEAGE2) { + MILEAGE2 = mILEAGE2; + } + + public int getREF_MILEAGE2() { + return REF_MILEAGE2; + } + + public void setREF_MILEAGE2(int rEF_MILEAGE2) { + REF_MILEAGE2 = rEF_MILEAGE2; + } + + public String getRemark() { + return remark; + } + + public void setRemark(String remark) { + this.remark = remark; + } + + public String getContracting_code() { + return contracting_code; + } + + public void setContracting_code(String contracting_code) { + this.contracting_code = contracting_code; + } + + public Date getExpect_arrive_time() { + return expect_arrive_time; + } + + public void setExpect_arrive_time(Date expect_arrive_time) { + this.expect_arrive_time = expect_arrive_time; + } + + public String getFrist_deal() { + return frist_deal; + } + + public void setFrist_deal(String frist_deal) { + this.frist_deal = frist_deal; + } + + public int getIs_audit() { + return is_audit; + } + + public void setIs_audit(int is_audit) { + this.is_audit = is_audit; + } + + public String getAbbr_code() { + return abbr_code; + } + + public void setAbbr_code(String abbr_code) { + this.abbr_code = abbr_code; + } +} diff --git a/src/main/java/com/zhongdao/jlr/customer/ResponseInfo.java b/src/main/java/com/zhongdao/jlr/customer/ResponseInfo.java new file mode 100644 index 0000000..c3c8ed3 --- /dev/null +++ b/src/main/java/com/zhongdao/jlr/customer/ResponseInfo.java @@ -0,0 +1,31 @@ +package com.zhongdao.jlr.customer; +/** + * @author 作者姓名: dubaohui + * @version 创建时间:2015-9-1 下午5:14:36 + * 类说明 + */ +public class ResponseInfo { + private Integer flg; + private boolean sign; + private String issign; + + public String getIssign() { + return issign; + } + public void setIssign(String issign) { + this.issign = issign; + } + public Integer getFlg() { + return flg; + } + public void setFlg(Integer flg) { + this.flg = flg; + } + public boolean isSign() { + return sign; + } + public void setSign(boolean sign) { + this.sign = sign; + } + +} diff --git a/src/main/java/com/zhongdao/jlr/customer/TextConfig.java b/src/main/java/com/zhongdao/jlr/customer/TextConfig.java new file mode 100644 index 0000000..eef4679 --- /dev/null +++ b/src/main/java/com/zhongdao/jlr/customer/TextConfig.java @@ -0,0 +1,11 @@ +package com.zhongdao.jlr.customer; +/** + * @author 作者姓名: dubaohui + * @version 创建时间:2016-5-23 上午9:02:15 + * 类说明 + */ +public class TextConfig { + public static final String GetCarYaoYueSucc = "取车邀约成功"; + public static final String GetCarHaiCheSuss = "还车成功待理赔"; + public static final String GetCarYaoYueFinal = "取车邀约失败"; +} diff --git a/src/main/java/com/zhongdao/jlr/customer/dao/CustomerDao.java b/src/main/java/com/zhongdao/jlr/customer/dao/CustomerDao.java new file mode 100644 index 0000000..6307d3a --- /dev/null +++ b/src/main/java/com/zhongdao/jlr/customer/dao/CustomerDao.java @@ -0,0 +1,12 @@ +package com.zhongdao.jlr.customer.dao; + +import com.dubh.common.dao.Dao; + +/** + * @author 作者姓名: dubaohui + * @version 创建时间:2016-5-20 上午10:55:18 + * 类说明 + */ +public interface CustomerDao extends Dao { + +} diff --git a/src/main/java/com/zhongdao/jlr/customer/dao/impl/CustomerDaoImpl.java b/src/main/java/com/zhongdao/jlr/customer/dao/impl/CustomerDaoImpl.java new file mode 100644 index 0000000..673b3a1 --- /dev/null +++ b/src/main/java/com/zhongdao/jlr/customer/dao/impl/CustomerDaoImpl.java @@ -0,0 +1,16 @@ +package com.zhongdao.jlr.customer.dao.impl; + +import org.springframework.stereotype.Repository; + +import com.zhongdao.jlr.customer.dao.CustomerDao; +import com.dubh.common.dao.hibernate.BaseDaoHibernate; + +/** + * @author 作者姓名: dubaohui + * @version 创建时间:2016-5-20 上午10:55:40 + * 类说明 + */ +@Repository("customerdao") +public class CustomerDaoImpl extends BaseDaoHibernate implements CustomerDao { + +} diff --git a/src/main/java/com/zhongdao/jlr/customer/interceptor/UserInterceptor.java b/src/main/java/com/zhongdao/jlr/customer/interceptor/UserInterceptor.java new file mode 100644 index 0000000..8236329 --- /dev/null +++ b/src/main/java/com/zhongdao/jlr/customer/interceptor/UserInterceptor.java @@ -0,0 +1,90 @@ +package com.zhongdao.jlr.customer.interceptor; + +import java.util.HashMap; +import java.util.List; + +import javax.annotation.Resource; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; + +import org.apache.http.util.TextUtils; +import org.json.JSONObject; +import org.springframework.web.servlet.HandlerInterceptor; +import org.springframework.web.servlet.ModelAndView; + + + +import com.zhongdao.jlr.customer.dao.CustomerDao; +import com.zhongdao.jlr.customer.service.CustomerService; +import com.util.RequestUtil; + +public class UserInterceptor implements HandlerInterceptor { + + public final String LOGINTOKEN = "logintoken"; + public final String SYSACCOUNT = "sysaccount"; + public final String ORDERKEY = "orderkey"; + public final String CUSTOMKEY = "customkey"; + private CustomerDao dao; + + public CustomerDao getDao() { + return dao; + } + + public void setDao(CustomerDao dao) { + this.dao = dao; + } + // 拦截前处理 + public boolean preHandle(HttpServletRequest request, + HttpServletResponse response, Object obj) throws Exception { + String logintoken = request.getHeader(LOGINTOKEN); + String sysaccount = request.getHeader(SYSACCOUNT); + String customkey = request.getHeader(CUSTOMKEY); + String orderkey = request.getParameter(ORDERKEY); + JSONObject error = new JSONObject(); + + if (logintoken != null && sysaccount != null) { + + String hql = "select * from tabusertoken t where t.token ='" + + logintoken + "' and t.sysaccount ='"+ sysaccount + "'"; + List list = dao.getRsBySql(hql); + if (list != null && list.size() > 0) { + System.out.println("已经登录!"); + if(!TextUtils.isEmpty(orderkey)){ + String orderhql = "select * from taborder where customkey ='"+customkey+"' and orderkey ='"+orderkey+"'"; + list = dao.getRsBySql(orderhql); + if (list != null && list.size() > 0) { + return true; + }else{ + System.out.println("订单权限已变!"); + error.put("errormsg", "订单权限已变!"); + RequestUtil.responseResult4Json(response, error.toString()); + return false; + } + }else{ + return true; + } + + + }else{ + System.out.println("没有登录!"); + error.put("errormsg", "没有登录!"); + RequestUtil.responseResult4Json(response, error.toString()); + return false; + } + + } + return true; + } + + // 拦截后处理 + public void postHandle(HttpServletRequest request, + HttpServletResponse response, Object obj, ModelAndView mav) + throws Exception { + } + + // 全部完成后处理 + public void afterCompletion(HttpServletRequest request, + HttpServletResponse response, Object obj, Exception e) + throws Exception { + } +} diff --git a/src/main/java/com/zhongdao/jlr/customer/service/CustomerService.java b/src/main/java/com/zhongdao/jlr/customer/service/CustomerService.java new file mode 100644 index 0000000..e40ad70 --- /dev/null +++ b/src/main/java/com/zhongdao/jlr/customer/service/CustomerService.java @@ -0,0 +1,17 @@ +package com.zhongdao.jlr.customer.service; + +import java.util.HashMap; +import java.util.List; + +import com.zhongdao.jlr.pojo.*; +import org.json.JSONArray; +import org.json.JSONObject; + +import com.zhongdao.jlr.customer.ResponseInfo; + +/** + * @author 作者姓名: dubaohui + * @version 创建时间:2016-5-20 上午11:03:57 + * 类说明 + */ +public interface CustomerService {} diff --git a/src/main/java/com/zhongdao/jlr/customer/web/CustomerController.java b/src/main/java/com/zhongdao/jlr/customer/web/CustomerController.java new file mode 100644 index 0000000..481086a --- /dev/null +++ b/src/main/java/com/zhongdao/jlr/customer/web/CustomerController.java @@ -0,0 +1,34 @@ +package com.zhongdao.jlr.customer.web; + +import com.dubh.common.file.UploadFile; +import com.zhongdao.jlr.business.service.BaseService; +import com.zhongdao.jlr.customer.ResponseInfo; +import com.zhongdao.jlr.customer.service.CustomerService; +import com.zhongdao.jlr.pojo.*; +import com.util.RequestUtil; +import com.util.UtilTools; + +import org.apache.http.util.TextUtils; +import org.json.JSONArray; +import org.json.JSONException; +import org.json.JSONObject; +import org.springframework.stereotype.Controller; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RequestMethod; +import org.springframework.web.bind.annotation.ResponseBody; + +import javax.annotation.Resource; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; + +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +/** + * @author 作者姓名: dubaohui + * @version 创建时间:2016-5-20 上午11:06:24 类说明 + */ +@Controller +@RequestMapping("/customer") +public class CustomerController {} diff --git a/src/main/java/com/zhongdao/jlr/customer/web/vo/ClaimsOrderVo.java b/src/main/java/com/zhongdao/jlr/customer/web/vo/ClaimsOrderVo.java new file mode 100644 index 0000000..0abfe81 --- /dev/null +++ b/src/main/java/com/zhongdao/jlr/customer/web/vo/ClaimsOrderVo.java @@ -0,0 +1,50 @@ +package com.zhongdao.jlr.customer.web.vo; + +/** + * Created by loson on 16/8/23. + */ +public class ClaimsOrderVo { + + //名称 + private String name; + + //图片路径 + private String picturePath; + + // 标志图片是否正常 + private String reviewed; + + private String lpdatumkey; + + public String getLpdatumkey() { + return lpdatumkey; + } + + public void setLpdatumkey(String lpdatumkey) { + this.lpdatumkey = lpdatumkey; + } + + public String getReviewed() { + return reviewed; + } + + public void setReviewed(String reviewed) { + this.reviewed = reviewed; + } + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + + public String getPicturePath() { + return picturePath; + } + + public void setPicturePath(String picturePath) { + this.picturePath = picturePath; + } +} diff --git a/src/main/java/com/zhongdao/jlr/customer/web/vo/InsuranceContext.java b/src/main/java/com/zhongdao/jlr/customer/web/vo/InsuranceContext.java new file mode 100644 index 0000000..a9a53d0 --- /dev/null +++ b/src/main/java/com/zhongdao/jlr/customer/web/vo/InsuranceContext.java @@ -0,0 +1,52 @@ +package com.zhongdao.jlr.customer.web.vo; + +/** + * Created by TEC2 on 2017/1/4. + */ +public class InsuranceContext { + private String createtime; + private String disc; + private String sysusername; + private String insuranceamounts; + private String logtype; + + public String getLogtype() { + return logtype; + } + + public void setLogtype(String logtype) { + this.logtype = logtype; + } + + public String getInsuranceamounts() { + return insuranceamounts; + } + + public void setInsuranceamounts(String insuranceamounts) { + this.insuranceamounts = insuranceamounts; + } + + public String getCreatetime() { + return createtime; + } + + public void setCreatetime(String createtime) { + this.createtime = createtime; + } + + public String getDisc() { + return disc; + } + + public void setDisc(String disc) { + this.disc = disc; + } + + public String getSysusername() { + return sysusername; + } + + public void setSysusername(String sysusername) { + this.sysusername = sysusername; + } +} diff --git a/src/main/java/com/zhongdao/jlr/customer/xss/XssFilter.java b/src/main/java/com/zhongdao/jlr/customer/xss/XssFilter.java new file mode 100644 index 0000000..37a544e --- /dev/null +++ b/src/main/java/com/zhongdao/jlr/customer/xss/XssFilter.java @@ -0,0 +1,30 @@ +package com.zhongdao.jlr.customer.xss; + +import java.io.IOException; + +import javax.servlet.Filter; +import javax.servlet.FilterChain; +import javax.servlet.FilterConfig; +import javax.servlet.ServletException; +import javax.servlet.ServletRequest; +import javax.servlet.ServletResponse; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; + +public class XssFilter implements Filter { + FilterConfig filterConfig = null; + + public void init(FilterConfig filterConfig) throws ServletException { + this.filterConfig = filterConfig; + } + + public void destroy() { + this.filterConfig = null; + } + + public void doFilter(ServletRequest request, ServletResponse response, + FilterChain chain) throws IOException, ServletException { + chain.doFilter(new XssHttpServletRequestWrapper( + (HttpServletRequest) request), response); + } +} diff --git a/src/main/java/com/zhongdao/jlr/customer/xss/XssHttpServletRequestWrapper.java b/src/main/java/com/zhongdao/jlr/customer/xss/XssHttpServletRequestWrapper.java new file mode 100644 index 0000000..db24f5f --- /dev/null +++ b/src/main/java/com/zhongdao/jlr/customer/xss/XssHttpServletRequestWrapper.java @@ -0,0 +1,48 @@ +package com.zhongdao.jlr.customer.xss; + +import java.util.Enumeration; + +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletRequestWrapper; + +public class XssHttpServletRequestWrapper extends HttpServletRequestWrapper { + public XssHttpServletRequestWrapper(HttpServletRequest servletRequest) { + super(servletRequest); + } + public String[] getParameterValues(String parameter) { + String[] values = super.getParameterValues(parameter); + if (values==null) { + return null; + } + int count = values.length; + String[] encodedValues = new String[count]; + for (int i = 0; i < count; i++) { + encodedValues[i] = cleanXSS(values[i]); + } + return encodedValues; + } + public String getParameter(String parameter) { + String value = super.getParameter(parameter); + if (value == null) { + return null; + } + return cleanXSS(value); + } + public String getHeader(String name) { + String value = super.getHeader(name); + if (value == null) + return null; + return cleanXSS(value); + } + private String cleanXSS(String value) { + //You'll need to remove the spaces from the html entities below + value = value.replaceAll("<", "& lt;").replaceAll(">", "& gt;"); + value = value.replaceAll("\\(", "& #40;").replaceAll("\\)", "& #41;"); + value = value.replaceAll("'", "& #39;"); + value = value.replaceAll("eval\\((.*)\\)", ""); + value = value.replaceAll("[\\\"\\\'][\\s]*javascript:(.*)[\\\"\\\']", "\"\""); + value = value.replaceAll("script", ""); + return value; + } + +} \ No newline at end of file diff --git a/src/main/java/com/zhongdao/jlr/enums/Week.java b/src/main/java/com/zhongdao/jlr/enums/Week.java new file mode 100644 index 0000000..5e3327a --- /dev/null +++ b/src/main/java/com/zhongdao/jlr/enums/Week.java @@ -0,0 +1,5 @@ +package com.zhongdao.jlr.enums; + +public enum Week { + MON,TUE,WEN,THU,FRI,SAT,SUN; +} diff --git a/src/main/java/com/zhongdao/jlr/pojo/BaseMenu.java b/src/main/java/com/zhongdao/jlr/pojo/BaseMenu.java new file mode 100644 index 0000000..db1137c --- /dev/null +++ b/src/main/java/com/zhongdao/jlr/pojo/BaseMenu.java @@ -0,0 +1,131 @@ +package com.zhongdao.jlr.pojo; + +import javax.persistence.Column; +import javax.persistence.Entity; +import javax.persistence.Id; +import javax.persistence.Table; +import java.util.Date; + +@Entity +@Table(name = "base_menu") +public class BaseMenu { + + private Integer id; + private Integer parent_id; + private String name; + private String action; + private Integer sort; + private Integer type; + private Integer is_sys; + private String icon; + private String chinese_name; + private Integer status; + private Date update_time; + + @Id + @Column(name = "id") + public Integer getId() { + return id; + } + + public void setId(Integer id) { + this.id = id; + } + @Column(name = "parent_id") + public Integer getParent_id() { + return parent_id; + } + + public void setParent_id(Integer parent_id) { + this.parent_id = parent_id; + } + @Column(name = "name") + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + @Column(name = "action") + public String getAction() { + return action; + } + + public void setAction(String action) { + this.action = action; + } + @Column(name = "sort") + public Integer getSort() { + return sort; + } + + public void setSort(Integer sort) { + this.sort = sort; + } + @Column(name = "type") + public Integer getType() { + return type; + } + + public void setType(Integer type) { + this.type = type; + } + @Column(name = "is_sys") + public Integer getIs_sys() { + return is_sys; + } + + public void setIs_sys(Integer is_sys) { + this.is_sys = is_sys; + } + @Column(name = "icon") + public String getIcon() { + return icon; + } + + public void setIcon(String icon) { + this.icon = icon; + } + @Column(name = "chinese_name") + public String getChinese_name() { + return chinese_name; + } + + public void setChinese_name(String chinese_name) { + this.chinese_name = chinese_name; + } + @Column(name = "status") + public Integer getStatus() { + return status; + } + + public void setStatus(Integer status) { + this.status = status; + } + @Column(name = "update_time") + public Date getUpdate_time() { + return update_time; + } + + public void setUpdate_time(Date update_time) { + this.update_time = update_time; + } + + @Override + public String toString() { + return "BaseMenu{" + + "id=" + id + + ", parent_id=" + parent_id + + ", name='" + name + '\'' + + ", action='" + action + '\'' + + ", sort=" + sort + + ", type=" + type + + ", is_sys=" + is_sys + + ", icon='" + icon + '\'' + + ", chinese_name='" + chinese_name + '\'' + + ", status=" + status + + ", update_time=" + update_time + + '}'; + } +} diff --git a/src/main/java/com/zhongdao/jlr/pojo/BaseRole.java b/src/main/java/com/zhongdao/jlr/pojo/BaseRole.java new file mode 100644 index 0000000..70b817c --- /dev/null +++ b/src/main/java/com/zhongdao/jlr/pojo/BaseRole.java @@ -0,0 +1,100 @@ +package com.zhongdao.jlr.pojo; + +import javax.persistence.Column; +import javax.persistence.Entity; +import javax.persistence.Id; +import javax.persistence.Table; +import java.util.Date; + +@Entity +@Table(name = "base_role") +public class BaseRole { + + private Integer id; + private Integer role_type; + private Integer supplier_id; + private Integer delete_flag; + private String name; + private String remark; + private Date create_time; + private Date update_time; + @Id + @Column(name = "id") + public Integer getId() { + return id; + } + + public void setId(Integer id) { + this.id = id; + } + @Column(name = "role_type") + public Integer getRole_type() { + return role_type; + } + + public void setRole_type(Integer role_type) { + this.role_type = role_type; + } + @Column(name = "supplier_id") + public Integer getSupplier_id() { + return supplier_id; + } + + public void setSupplier_id(Integer supplier_id) { + this.supplier_id = supplier_id; + } + @Column(name = "delete_flag") + public Integer getDelete_flag() { + return delete_flag; + } + + public void setDelete_flag(Integer delete_flag) { + this.delete_flag = delete_flag; + } + @Column(name = "name") + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + @Column(name = "remark") + public String getRemark() { + return remark; + } + + public void setRemark(String remark) { + this.remark = remark; + } + @Column(name = "create_time") + public Date getCreate_time() { + return create_time; + } + + public void setCreate_time(Date create_time) { + this.create_time = create_time; + } + @Column(name = "update_time") + public Date getUpdate_time() { + return update_time; + } + + public void setUpdate_time(Date update_time) { + this.update_time = update_time; + } + + @Override + public String toString() { + return "BaseRole{" + + "id=" + id + + ", role_type=" + role_type + + ", supplier_id=" + supplier_id + + ", delete_flag=" + delete_flag + + ", name='" + name + '\'' + + ", remark='" + remark + '\'' + + ", create_time=" + create_time + + ", update_time=" + update_time + + '}'; + } +} diff --git a/src/main/java/com/zhongdao/jlr/pojo/BaseRoleAuthority.java b/src/main/java/com/zhongdao/jlr/pojo/BaseRoleAuthority.java new file mode 100644 index 0000000..fea06de --- /dev/null +++ b/src/main/java/com/zhongdao/jlr/pojo/BaseRoleAuthority.java @@ -0,0 +1,39 @@ +package com.zhongdao.jlr.pojo; + +import javax.persistence.Column; +import javax.persistence.Entity; +import javax.persistence.Id; +import javax.persistence.Table; + +@Entity +@Table(name = "base_role_authority") +public class BaseRoleAuthority { + + private Integer id; + private Integer menu_id; + @Id + @Column(name = "id") + public Integer getId() { + return id; + } + + public void setId(Integer id) { + this.id = id; + } + @Column(name = "menu_id") + public Integer getMenu_id() { + return menu_id; + } + + public void setMenu_id(Integer menu_id) { + this.menu_id = menu_id; + } + + @Override + public String toString() { + return "BaseRoleAuthority{" + + "id=" + id + + ", menu_id=" + menu_id + + '}'; + } +} diff --git a/src/main/java/com/zhongdao/jlr/pojo/BaseUser.java b/src/main/java/com/zhongdao/jlr/pojo/BaseUser.java new file mode 100644 index 0000000..e7481bd --- /dev/null +++ b/src/main/java/com/zhongdao/jlr/pojo/BaseUser.java @@ -0,0 +1,124 @@ +package com.zhongdao.jlr.pojo; + +import javax.persistence.Column; +import javax.persistence.Entity; +import javax.persistence.Id; +import javax.persistence.Table; +import java.util.Date; + +@Entity +@Table(name = "jlr_user") +public class BaseUser { + + private Long id;//编号 + private String name;//登录名 + private String login_name;//用户名 + private String password;//密码 + private String phone;//手机号 + private String email;//电子邮箱 + private Date update_time;//更新时间 + private Integer delete_flag;//用户状态 + private Integer role_id;//角色编号 + private Integer enterprise_id;//经销商编号 + + @Id + @Column(name = "id") + public long getId() { + return id; + } + + public void setId(long id) { + this.id = id; + } + + @Column(name = "name") + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + @Column(name = "login_name") + public String getLogin_name() { + return login_name; + } + + public void setLogin_name(String login_name) { + this.login_name = login_name; + } + + @Column(name = "password") + public String getPassword() { + return password; + } + + public void setPassword(String password) { + this.password = password; + } + @Column(name = "phone") + public String getPhone() { + return phone; + } + + public void setPhone(String phone) { + this.phone = phone; + } + @Column(name = "email") + public String getEmail() { + return email; + } + + public void setEmail(String email) { + this.email = email; + } + + @Column(name = "update_time") + public Date getUpdate_time() { + return update_time; + } + + public void setUpdate_time(Date update_time) { + this.update_time = update_time; + } + @Column(name = "delete_flag") + public Integer getDelete_flag() { + return delete_flag; + } + + public void setDelete_flag(Integer delete_flag) { + this.delete_flag = delete_flag; + } + @Column(name = "role_id") + public Integer getRole_id() { + return role_id; + } + + public void setRole_id(Integer role_id) { + this.role_id = role_id; + } + @Column(name = "enterprise_id") + public Integer getEnterprise_id() { + return enterprise_id; + } + + public void setEnterprise_id(Integer enterprise_id) { + this.enterprise_id = enterprise_id; + } + + @Override + public String toString() { + return "BaseUser{" + + "id=" + id + + ", name='" + name + '\'' + + ", login_name='" + login_name + '\'' + + ", password='" + password + '\'' + + ", phone='" + phone + '\'' + + ", email='" + email + '\'' + + ", update_time=" + update_time + + ", delete_flag=" + delete_flag + + ", role_id=" + role_id + + ", enterprise_id=" + enterprise_id + + '}'; + } +} diff --git a/src/main/java/com/zhongdao/jlr/pojo/BaseUserRole.java b/src/main/java/com/zhongdao/jlr/pojo/BaseUserRole.java new file mode 100644 index 0000000..07183c7 --- /dev/null +++ b/src/main/java/com/zhongdao/jlr/pojo/BaseUserRole.java @@ -0,0 +1,50 @@ +package com.zhongdao.jlr.pojo; + +import javax.persistence.Column; +import javax.persistence.Entity; +import javax.persistence.Id; +import javax.persistence.Table; + +@Entity +@Table(name = "base_user_role") +public class BaseUserRole { + + private Integer id;//主键编号 + private Integer role_id;//角色编号 + private Integer user_id;//用户编号 + + @Id + @Column(name = "id") + public Integer getId() { + return id; + } + + public void setId(Integer id) { + this.id = id; + } + @Column(name = "role_id") + public Integer getRole_id() { + return role_id; + } + + public void setRole_id(Integer role_id) { + this.role_id = role_id; + } + @Column(name = "user_id") + public Integer getUser_id() { + return user_id; + } + + public void setUser_id(Integer user_id) { + this.user_id = user_id; + } + + @Override + public String toString() { + return "BaseUserRole{" + + "id=" + id + + ", role_id=" + role_id + + ", user_id=" + user_id + + '}'; + } +} diff --git a/src/main/java/com/zhongdao/jlr/pojo/CouponConsumeJlrPO.java b/src/main/java/com/zhongdao/jlr/pojo/CouponConsumeJlrPO.java new file mode 100644 index 0000000..057d8cd --- /dev/null +++ b/src/main/java/com/zhongdao/jlr/pojo/CouponConsumeJlrPO.java @@ -0,0 +1,171 @@ +package com.zhongdao.jlr.pojo; + +import javax.persistence.Column; +import javax.persistence.Entity; +import javax.persistence.Id; +import javax.persistence.Table; +import java.util.Date; + +@Entity +@Table(name = "jlr_coupon_consume") +public class CouponConsumeJlrPO { + + private Integer id; + private Integer contract_id; + private Integer enterprise_id; + private Integer is_settle; + private Integer settlement_state; + private String vin_code; + private String reparie_info; + private String hitch_info; + private String remark; + private String electronic_accounts; + private Float consume_count; + private Date consume_time; + private Date settle_time; + private Date create_time; + private Date update_time; + + @Id + @Column(name = "id") + public Integer getId() { + return id; + } + + public void setId(Integer id) { + this.id = id; + } + @Column(name = "contract_id") + public Integer getContract_id() { + return contract_id; + } + + public void setContract_id(Integer contract_id) { + this.contract_id = contract_id; + } + @Column(name = "enterprise_id") + public Integer getEnterprise_id() { + return enterprise_id; + } + + public void setEnterprise_id(Integer enterprise_id) { + this.enterprise_id = enterprise_id; + } + @Column(name = "is_settle") + public Integer getIs_settle() { + return is_settle; + } + + public void setIs_settle(Integer is_settle) { + this.is_settle = is_settle; + } + @Column(name = "settlement_state") + public Integer getSettlement_state() { + return settlement_state; + } + + public void setSettlement_state(Integer settlement_state) { + this.settlement_state = settlement_state; + } + @Column(name = "vin_code") + public String getVin_code() { + return vin_code; + } + + public void setVin_code(String vin_code) { + this.vin_code = vin_code; + } + @Column(name = "reparie_info") + public String getReparie_info() { + return reparie_info; + } + + public void setReparie_info(String reparie_info) { + this.reparie_info = reparie_info; + } + @Column(name = "hitch_info") + public String getHitch_info() { + return hitch_info; + } + + public void setHitch_info(String hitch_info) { + this.hitch_info = hitch_info; + } + @Column(name = "remark") + public String getRemark() { + return remark; + } + + public void setRemark(String remark) { + this.remark = remark; + } + @Column(name = "electronic_accounts") + public String getElectronic_accounts() { + return electronic_accounts; + } + + public void setElectronic_accounts(String electronic_accounts) { + this.electronic_accounts = electronic_accounts; + } + @Column(name = "consume_count") + public Float getConsume_count() { + return consume_count; + } + + public void setConsume_count(Float consume_count) { + this.consume_count = consume_count; + } + @Column(name = "consume_time") + public Date getConsume_time() { + return consume_time; + } + + public void setConsume_time(Date consume_time) { + this.consume_time = consume_time; + } + @Column(name = "settle_time") + public Date getSettle_time() { + return settle_time; + } + + public void setSettle_time(Date settle_time) { + this.settle_time = settle_time; + } + @Column(name = "create_time") + public Date getCreate_time() { + return create_time; + } + + public void setCreate_time(Date create_time) { + this.create_time = create_time; + } + @Column(name = "update_time") + public Date getUpdate_time() { + return update_time; + } + + public void setUpdate_time(Date update_time) { + this.update_time = update_time; + } + + @Override + public String toString() { + return "CouponConsumeJlrPO{" + + "id=" + id + + ", contract_id=" + contract_id + + ", enterprise_id=" + enterprise_id + + ", is_settle=" + is_settle + + ", settlement_state=" + settlement_state + + ", vin_code='" + vin_code + '\'' + + ", reparie_info='" + reparie_info + '\'' + + ", hitch_info='" + hitch_info + '\'' + + ", remark='" + remark + '\'' + + ", electronic_accounts='" + electronic_accounts + '\'' + + ", consume_count=" + consume_count + + ", consume_time=" + consume_time + + ", settle_time=" + settle_time + + ", create_time=" + create_time + + ", update_time=" + update_time + + '}'; + } +} diff --git a/src/main/java/com/zhongdao/jlr/pojo/CouponRechargeJlrPO.java b/src/main/java/com/zhongdao/jlr/pojo/CouponRechargeJlrPO.java new file mode 100644 index 0000000..e7045f3 --- /dev/null +++ b/src/main/java/com/zhongdao/jlr/pojo/CouponRechargeJlrPO.java @@ -0,0 +1,161 @@ +package com.zhongdao.jlr.pojo; + +import javax.persistence.Column; +import javax.persistence.Entity; +import javax.persistence.Id; +import javax.persistence.Table; +import java.util.Date; + +@Entity +@Table(name = "jlr_coupon_recharge") +public class CouponRechargeJlrPO { + + private Integer id; + private Integer order_id; + private Integer task_order_id; + private String vin_code; + private String seate_name; + private String remark; + private String service_name; + private String electronic_accounts; + private Float recharge_count; + private Float consume_count; + private Date overdue_time; + private Date recharge_time; + private Date create_time; + private Date update_time; + + @Id + @Column(name = "id") + public Integer getId() { + return id; + } + + public void setId(Integer id) { + this.id = id; + } + @Column(name = "order_id") + public Integer getOrder_id() { + return order_id; + } + + public void setOrder_id(Integer order_id) { + this.order_id = order_id; + } + @Column(name = "task_order_id") + public Integer getTask_order_id() { + return task_order_id; + } + + public void setTask_order_id(Integer task_order_id) { + this.task_order_id = task_order_id; + } + @Column(name = "vin_code") + public String getVin_code() { + return vin_code; + } + + public void setVin_code(String vin_code) { + this.vin_code = vin_code; + } + @Column(name = "seate_name") + public String getSeate_name() { + return seate_name; + } + + public void setSeate_name(String seate_name) { + this.seate_name = seate_name; + } + @Column(name = "remark") + public String getRemark() { + return remark; + } + + public void setRemark(String remark) { + this.remark = remark; + } + @Column(name = "service_name") + public String getService_name() { + return service_name; + } + + public void setService_name(String service_name) { + this.service_name = service_name; + } + @Column(name = "electronic_accounts") + public String getElectronic_accounts() { + return electronic_accounts; + } + + public void setElectronic_accounts(String electronic_accounts) { + this.electronic_accounts = electronic_accounts; + } + @Column(name = "recharge_count") + public Float getRecharge_count() { + return recharge_count; + } + + public void setRecharge_count(Float recharge_count) { + this.recharge_count = recharge_count; + } + @Column(name = "consume_count") + public Float getConsume_count() { + return consume_count; + } + + public void setConsume_count(Float consume_count) { + this.consume_count = consume_count; + } + @Column(name = "overdue_time") + public Date getOverdue_time() { + return overdue_time; + } + + public void setOverdue_time(Date overdue_time) { + this.overdue_time = overdue_time; + } + @Column(name = "recharge_time") + public Date getRecharge_time() { + return recharge_time; + } + + public void setRecharge_time(Date recharge_time) { + this.recharge_time = recharge_time; + } + @Column(name = "create_time") + public Date getCreate_time() { + return create_time; + } + + public void setCreate_time(Date create_time) { + this.create_time = create_time; + } + @Column(name = "update_time") + public Date getUpdate_time() { + return update_time; + } + + public void setUpdate_time(Date update_time) { + this.update_time = update_time; + } + + @Override + public String toString() { + return "CouponRechargeJlrPO{" + + "id=" + id + + ", order_id=" + order_id + + ", task_order_id=" + task_order_id + + ", vin_code='" + vin_code + '\'' + + ", seate_name='" + seate_name + '\'' + + ", remark='" + remark + '\'' + + ", service_name='" + service_name + '\'' + + ", electronic_accounts='" + electronic_accounts + '\'' + + ", recharge_count=" + recharge_count + + ", consume_count=" + consume_count + + ", overdue_time=" + overdue_time + + ", recharge_time=" + recharge_time + + ", create_time=" + create_time + + ", update_time=" + update_time + + '}'; + } +} diff --git a/src/main/java/com/zhongdao/jlr/pojo/EnterpriseJlr.java b/src/main/java/com/zhongdao/jlr/pojo/EnterpriseJlr.java new file mode 100644 index 0000000..770cfbf --- /dev/null +++ b/src/main/java/com/zhongdao/jlr/pojo/EnterpriseJlr.java @@ -0,0 +1,313 @@ +package com.zhongdao.jlr.pojo; + +import javax.persistence.Column; +import javax.persistence.Entity; +import javax.persistence.Id; +import javax.persistence.Table; +import java.util.Date; + +@Entity +@Table(name = "jlr_enterprise") +public class EnterpriseJlr { + + private Integer id; + private Integer settle_type; + private Integer is_send; + private String name; + private String contact; + private String phone1; + private String phone2; + private String phone3; + private String registry; + private String lon; + private String lat; + private String abbr_name; + private String brands; + private String activate_code; + private String area_code; + private String abbr_code; + private String remark; + private String address; + private String contact2; + private String contact3; + private String job1; + private String job2; + private String job3; + private String service_qualification; + private String car_type; + private String first_sale_date; + private String vin_code; + private Date create_time; + private Date update_time; + + @Id + @Column(name = "id") + public Integer getId() { + return id; + } + + public void setId(Integer id) { + this.id = id; + } + @Column(name = "settle_type") + public Integer getSettle_type() { + return settle_type; + } + + public void setSettle_type(Integer settle_type) { + this.settle_type = settle_type; + } + @Column(name = "is_send") + public Integer getIs_send() { + return is_send; + } + + public void setIs_send(Integer is_send) { + this.is_send = is_send; + } + @Column(name = "name") + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + @Column(name = "contact") + public String getContact() { + return contact; + } + + public void setContact(String contact) { + this.contact = contact; + } + @Column(name = "phone1") + public String getPhone1() { + return phone1; + } + + public void setPhone1(String phone1) { + this.phone1 = phone1; + } + @Column(name = "phone2") + public String getPhone2() { + return phone2; + } + + public void setPhone2(String phone2) { + this.phone2 = phone2; + } + @Column(name = "phone3") + public String getPhone3() { + return phone3; + } + + public void setPhone3(String phone3) { + this.phone3 = phone3; + } + @Column(name = "registry") + public String getRegistry() { + return registry; + } + + public void setRegistry(String registry) { + this.registry = registry; + } + @Column(name = "lon") + public String getLon() { + return lon; + } + + public void setLon(String lon) { + this.lon = lon; + } + @Column(name = "lat") + public String getLat() { + return lat; + } + + public void setLat(String lat) { + this.lat = lat; + } + @Column(name = "abbr_name") + public String getAbbr_name() { + return abbr_name; + } + + public void setAbbr_name(String abbr_name) { + this.abbr_name = abbr_name; + } + @Column(name = "brands") + public String getBrands() { + return brands; + } + + public void setBrands(String brands) { + this.brands = brands; + } + @Column(name = "activate_code") + public String getActivate_code() { + return activate_code; + } + + public void setActivate_code(String activate_code) { + this.activate_code = activate_code; + } + @Column(name = "area_code") + public String getArea_code() { + return area_code; + } + + public void setArea_code(String area_code) { + this.area_code = area_code; + } + @Column(name = "abbr_code") + public String getAbbr_code() { + return abbr_code; + } + + public void setAbbr_code(String abbr_code) { + this.abbr_code = abbr_code; + } + @Column(name = "remark") + public String getRemark() { + return remark; + } + + public void setRemark(String remark) { + this.remark = remark; + } + @Column(name = "address") + public String getAddress() { + return address; + } + + public void setAddress(String address) { + this.address = address; + } + @Column(name = "contact2") + public String getContact2() { + return contact2; + } + + public void setContact2(String contact2) { + this.contact2 = contact2; + } + @Column(name = "contact3") + public String getContact3() { + return contact3; + } + + public void setContact3(String contact3) { + this.contact3 = contact3; + } + @Column(name = "job1") + public String getJob1() { + return job1; + } + + public void setJob1(String job1) { + this.job1 = job1; + } + @Column(name = "job2") + public String getJob2() { + return job2; + } + + public void setJob2(String job2) { + this.job2 = job2; + } + @Column(name = "job3") + public String getJob3() { + return job3; + } + + public void setJob3(String job3) { + this.job3 = job3; + } + @Column(name = "service_qualification") + public String getService_qualification() { + return service_qualification; + } + + public void setService_qualification(String service_qualification) { + this.service_qualification = service_qualification; + } + @Column(name = "car_type") + public String getCar_type() { + return car_type; + } + + public void setCar_type(String car_type) { + this.car_type = car_type; + } + @Column(name = "first_sale_date") + public String getFirst_sale_date() { + return first_sale_date; + } + + public void setFirst_sale_date(String first_sale_date) { + this.first_sale_date = first_sale_date; + } + @Column(name = "vin_code") + public String getVin_code() { + return vin_code; + } + + public void setVin_code(String vin_code) { + this.vin_code = vin_code; + } + @Column(name = "create_time") + public Date getCreate_time() { + return create_time; + } + + public void setCreate_time(Date create_time) { + this.create_time = create_time; + } + @Column(name = "update_time") + public Date getUpdate_time() { + return update_time; + } + + public void setUpdate_time(Date update_time) { + this.update_time = update_time; + } + + + + @Override + public String toString() { + return "EnterpriseJlr{" + + "id=" + id + + ", settle_type=" + settle_type + + ", is_send=" + is_send + + ", name='" + name + '\'' + + ", contact='" + contact + '\'' + + ", phone1='" + phone1 + '\'' + + ", phone2='" + phone2 + '\'' + + ", phone3='" + phone3 + '\'' + + ", registry='" + registry + '\'' + + ", lon='" + lon + '\'' + + ", lat='" + lat + '\'' + + ", abbr_name='" + abbr_name + '\'' + + ", brands='" + brands + '\'' + + ", activate_code='" + activate_code + '\'' + + ", area_code='" + area_code + '\'' + + ", abbr_code='" + abbr_code + '\'' + + ", remark='" + remark + '\'' + + ", address='" + address + '\'' + + ", contact2='" + contact2 + '\'' + + ", contact3='" + contact3 + '\'' + + ", job1='" + job1 + '\'' + + ", job2='" + job2 + '\'' + + ", job3='" + job3 + '\'' + + ", service_qualification='" + service_qualification + '\'' + + ", car_type='" + car_type + '\'' + + ", first_sale_date='" + first_sale_date + '\'' + + ", vin_code='" + vin_code + '\'' + + ", create_time=" + create_time + + ", update_time=" + update_time + + '}'; + } +} diff --git a/src/main/java/com/zhongdao/jlr/pojo/JLRAuthority.java b/src/main/java/com/zhongdao/jlr/pojo/JLRAuthority.java new file mode 100644 index 0000000..c7c8437 --- /dev/null +++ b/src/main/java/com/zhongdao/jlr/pojo/JLRAuthority.java @@ -0,0 +1,62 @@ +package com.zhongdao.jlr.pojo; + +import javax.persistence.Column; +import javax.persistence.Entity; +import javax.persistence.Id; +import javax.persistence.Table; +import java.util.Date; + +@Entity +@Table(name = "jlr_role_authority") +public class JLRAuthority { + + private Integer id;//编号 + private Integer menu_id;//菜单编号 + private Integer role_id;//角色编号 + private Date update_time;//更新时间 + + @Id + @Column(name = "id") + public Integer getId() { + return id; + } + + public void setId(Integer id) { + this.id = id; + } + @Column(name = "menu_id") + public Integer getMenu_id() { + return menu_id; + } + + public void setMenu_id(Integer menu_id) { + this.menu_id = menu_id; + } + @Column(name = "role_id") + public Integer getRole_id() { + return role_id; + } + + public void setRole_id(Integer role_id) { + this.role_id = role_id; + } + + @Column(name = "update_time") + public Date getUpdate_time() { + return update_time; + } + + public void setUpdate_time(Date update_time) { + this.update_time = update_time; + } + + @Override + public String toString() { + return "JLRAuthority{" + + "id=" + id + + ", menu_id=" + menu_id + + ", role_id=" + role_id + + ", update_time=" + update_time + + '}'; + } +} diff --git a/src/main/java/com/zhongdao/jlr/pojo/JLRCoupon.java b/src/main/java/com/zhongdao/jlr/pojo/JLRCoupon.java new file mode 100644 index 0000000..cb26c24 --- /dev/null +++ b/src/main/java/com/zhongdao/jlr/pojo/JLRCoupon.java @@ -0,0 +1,141 @@ +package com.zhongdao.jlr.pojo; + +import javax.persistence.Column; +import javax.persistence.Entity; +import javax.persistence.Id; +import javax.persistence.Table; +import java.util.Date; + +@Entity +@Table(name = "jlr_coupon") +public class JLRCoupon { + + private Integer id; + private String vin_code; + private String user_name; + private String user_phone; + private String license; + private String remark; + private String electronic_accounts; + private String e_password; + private Float charge; + private Float consume_charge; + private Date create_time; + private Date update_time; + + @Id + @Column(name = "id") + public Integer getId() { + return id; + } + + public void setId(Integer id) { + this.id = id; + } + @Column(name = "vin_code") + public String getVin_code() { + return vin_code; + } + + public void setVin_code(String vin_code) { + this.vin_code = vin_code; + } + @Column(name = "user_name") + public String getUser_name() { + return user_name; + } + + public void setUser_name(String user_name) { + this.user_name = user_name; + } + @Column(name = "user_phone") + public String getUser_phone() { + return user_phone; + } + + public void setUser_phone(String user_phone) { + this.user_phone = user_phone; + } + @Column(name = "license") + public String getLicense() { + return license; + } + + public void setLicense(String license) { + this.license = license; + } + @Column(name = "remark") + public String getRemark() { + return remark; + } + + public void setRemark(String remark) { + this.remark = remark; + } + @Column(name = "electronic_accounts") + public String getElectronic_accounts() { + return electronic_accounts; + } + + public void setElectronic_accounts(String electronic_accounts) { + this.electronic_accounts = electronic_accounts; + } + @Column(name = "e_password") + public String getE_password() { + return e_password; + } + + public void setE_password(String e_password) { + this.e_password = e_password; + } + @Column(name = "charge") + public Float getCharge() { + return charge; + } + + public void setCharge(Float charge) { + this.charge = charge; + } + @Column(name = "consume_charge") + public Float getConsume_charge() { + return consume_charge; + } + + public void setConsume_charge(Float consume_charge) { + this.consume_charge = consume_charge; + } + @Column(name = "create_time") + public Date getCreate_time() { + return create_time; + } + + public void setCreate_time(Date create_time) { + this.create_time = create_time; + } + @Column(name = "update_time") + public Date getUpdate_time() { + return update_time; + } + + public void setUpdate_time(Date update_time) { + this.update_time = update_time; + } + + @Override + public String toString() { + return "JLRCoupon{" + + "id=" + id + + ", vin_code='" + vin_code + '\'' + + ", user_name='" + user_name + '\'' + + ", user_phone='" + user_phone + '\'' + + ", license='" + license + '\'' + + ", remark='" + remark + '\'' + + ", electronic_accounts='" + electronic_accounts + '\'' + + ", e_password='" + e_password + '\'' + + ", charge=" + charge + + ", consume_charge=" + consume_charge + + ", create_time=" + create_time + + ", update_time=" + update_time + + '}'; + } +} diff --git a/src/main/java/com/zhongdao/jlr/pojo/JLRDestination.java b/src/main/java/com/zhongdao/jlr/pojo/JLRDestination.java new file mode 100644 index 0000000..250543b --- /dev/null +++ b/src/main/java/com/zhongdao/jlr/pojo/JLRDestination.java @@ -0,0 +1,50 @@ +package com.zhongdao.jlr.pojo; + +import javax.persistence.Column; +import javax.persistence.Entity; +import javax.persistence.Id; +import javax.persistence.Table; + +@Entity +@Table(name = "jlr_destination_visual") +public class JLRDestination { + + private Integer id;//主键id + private Integer jlr_user_id;//用户id + private Integer contract_destination_id;//目的地id + + @Id + @Column(name = "id") + public Integer getId() { + return id; + } + + public void setId(Integer id) { + this.id = id; + } + @Column(name = "jlr_user_id") + public Integer getJlr_user_id() { + return jlr_user_id; + } + + public void setJlr_user_id(Integer jlr_user_id) { + this.jlr_user_id = jlr_user_id; + } + @Column(name = "contract_destination_id") + public Integer getContract_destination_id() { + return contract_destination_id; + } + + public void setContract_destination_id(Integer contract_destination_id) { + this.contract_destination_id = contract_destination_id; + } + + @Override + public String toString() { + return "JLRDestination{" + + "id=" + id + + ", jlr_user_id=" + jlr_user_id + + ", contract_destination_id=" + contract_destination_id + + '}'; + } +} diff --git a/src/main/java/com/zhongdao/jlr/pojo/JLRRole.java b/src/main/java/com/zhongdao/jlr/pojo/JLRRole.java new file mode 100644 index 0000000..88158d9 --- /dev/null +++ b/src/main/java/com/zhongdao/jlr/pojo/JLRRole.java @@ -0,0 +1,64 @@ +package com.zhongdao.jlr.pojo; + +import javax.persistence.Column; +import javax.persistence.Entity; +import javax.persistence.Id; +import javax.persistence.Table; +import java.util.Date; + +@Entity +@Table(name = "jlr_role") +public class JLRRole { + + private Integer id;//编号 + private String name;//名称 + private Date update_time; + private Integer delete_flag; + + @Id + @Column(name = "id") + public Integer getId() { + return id; + } + + public void setId(Integer id) { + this.id = id; + } + + @Column(name = "name") + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + + @Column(name = "update_time") + public Date getUpdate_time() { + return update_time; + } + + public void setUpdate_time(Date update_time) { + this.update_time = update_time; + } + + @Column(name = "delete_flag") + public Integer getDelete_flag() { + return delete_flag; + } + + public void setDelete_flag(Integer delete_flag) { + this.delete_flag = delete_flag; + } + + @Override + public String toString() { + return "JLRRole{" + + "id=" + id + + ", name='" + name + '\'' + + ", update_time=" + update_time + + ", delete_flag=" + delete_flag + + '}'; + } +} diff --git a/src/main/java/com/zhongdao/jlr/pojo/JLRSupplier.java b/src/main/java/com/zhongdao/jlr/pojo/JLRSupplier.java new file mode 100644 index 0000000..f77e889 --- /dev/null +++ b/src/main/java/com/zhongdao/jlr/pojo/JLRSupplier.java @@ -0,0 +1,50 @@ +package com.zhongdao.jlr.pojo; + +import javax.persistence.Column; +import javax.persistence.Entity; +import javax.persistence.Id; +import javax.persistence.Table; + +@Entity +@Table(name = "jlr_supplier_visual") +public class JLRSupplier { + + private Integer id;//主键id + private Integer jlr_user_id;//用户id + private Integer supplier_id;//供应商id + + @Id + @Column(name = "id") + public Integer getId() { + return id; + } + + public void setId(Integer id) { + this.id = id; + } + @Column(name = "jlr_user_id") + public Integer getJlr_user_id() { + return jlr_user_id; + } + + public void setJlr_user_id(Integer jlr_user_id) { + this.jlr_user_id = jlr_user_id; + } + @Column(name = "supplier_id") + public Integer getSupplier_id() { + return supplier_id; + } + + public void setSupplier_id(Integer supplier_id) { + this.supplier_id = supplier_id; + } + + @Override + public String toString() { + return "JLRSupplier{" + + "id=" + id + + ", jlr_user_id=" + jlr_user_id + + ", supplier_id=" + supplier_id + + '}'; + } +} diff --git a/src/main/java/com/zhongdao/jlr/pojo/JLRUser.java b/src/main/java/com/zhongdao/jlr/pojo/JLRUser.java new file mode 100644 index 0000000..2dc1c02 --- /dev/null +++ b/src/main/java/com/zhongdao/jlr/pojo/JLRUser.java @@ -0,0 +1,120 @@ +package com.zhongdao.jlr.pojo; + +import javax.persistence.Column; +import javax.persistence.Entity; +import javax.persistence.Id; +import javax.persistence.Table; +import java.util.Date; +@Entity +@Table(name = "jlr_user") +public class JLRUser { + + private int id; + private int role_id; + private int enterprise_id; + private int delete_flag; + private String name; + private String login_name; + private String password; + private String phone; + private String email; + private Date update_time; + + @Id + @Column(name = "id") + public int getId() { + return id; + } + + public void setId(int id) { + this.id = id; + } + @Column(name = "role_id") + public int getRole_id() { + return role_id; + } + + public void setRole_id(int role_id) { + this.role_id = role_id; + } + @Column(name = "delete_flag") + public int getDelete_flag() { + return delete_flag; + } + + public void setDelete_flag(int delete_flag) { + this.delete_flag = delete_flag; + } + @Column(name = "name") + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + @Column(name = "login_name") + public String getLogin_name() { + return login_name; + } + + public void setLogin_name(String login_name) { + this.login_name = login_name; + } + @Column(name = "password") + public String getPassword() { + return password; + } + + public void setPassword(String password) { + this.password = password; + } + @Column(name = "phone") + public String getPhone() { + return phone; + } + + public void setPhone(String phone) { + this.phone = phone; + } + @Column(name = "email") + public String getEmail() { + return email; + } + + public void setEmail(String email) { + this.email = email; + } + @Column(name = "update_time") + public Date getUpdate_time() { + return update_time; + } + + public void setUpdate_time(Date update_time) { + this.update_time = update_time; + } + @Column(name = "enterprise_id") + public int getEnterprise_id() { + return enterprise_id; + } + + public void setEnterprise_id(int enterprise_id) { + this.enterprise_id = enterprise_id; + } + + @Override + public String toString() { + return "JLRUser{" + + "id=" + id + + ", role_id=" + role_id + + ", enterprise_id=" + enterprise_id + + ", delete_flag=" + delete_flag + + ", name='" + name + '\'' + + ", login_name='" + login_name + '\'' + + ", password='" + password + '\'' + + ", phone='" + phone + '\'' + + ", email='" + email + '\'' + + ", update_time=" + update_time + + '}'; + } +} diff --git a/src/main/java/com/zhongdao/jlr/pojo/JLRUserContract.java b/src/main/java/com/zhongdao/jlr/pojo/JLRUserContract.java new file mode 100644 index 0000000..1e458b4 --- /dev/null +++ b/src/main/java/com/zhongdao/jlr/pojo/JLRUserContract.java @@ -0,0 +1,50 @@ +package com.zhongdao.jlr.pojo; + +import javax.persistence.Column; +import javax.persistence.Entity; +import javax.persistence.Id; +import javax.persistence.Table; + +@Entity +@Table(name = "jlr_contract_visual") +public class JLRUserContract { + + private Integer id;//编号 + private Integer jlr_user_id;//用户id + private Integer contract_id;//合同id + + @Id + @Column(name = "id") + public Integer getId() { + return id; + } + + public void setId(Integer id) { + this.id = id; + } + @Column(name = "jlr_user_id") + public Integer getJlr_user_id() { + return jlr_user_id; + } + + public void setJlr_user_id(Integer jlr_user_id) { + this.jlr_user_id = jlr_user_id; + } + @Column(name = "contract_id") + public Integer getContract_id() { + return contract_id; + } + + public void setContract_id(Integer contract_id) { + this.contract_id = contract_id; + } + + @Override + public String toString() { + return "JLRUserContract{" + + "id=" + id + + ", jlr_user_id=" + jlr_user_id + + ", contract_id=" + contract_id + + '}'; + } +} diff --git a/src/main/java/com/zhongdao/jlr/pojo/JLRepqr.java b/src/main/java/com/zhongdao/jlr/pojo/JLRepqr.java new file mode 100644 index 0000000..d8630bc --- /dev/null +++ b/src/main/java/com/zhongdao/jlr/pojo/JLRepqr.java @@ -0,0 +1,241 @@ +package com.zhongdao.jlr.pojo; + +import javax.persistence.Column; +import javax.persistence.Entity; +import javax.persistence.Id; +import javax.persistence.Table; +import java.util.Date; + +@Entity +@Table(name = "jlr_epqr") +public class JLRepqr { + + private Integer id;//主键id + private Integer order_id;//订单id + private Integer task_order_id;//任务id + private Integer mileage;//公里数 + private Integer state;//状态 + private String trouble_code_value; + private String dms_code;//dms码 + private String remaer;//备注 + private String repair;//维修结果 + private String trouble_reason;//故障原因 + private String trouble_code;//故障零件 + private String choice_type;//出行方式 + private String other_service; + private String dphm;//底盘码 + private Date arrive_time;//到达时间 + private Date ref_time;//预计完成时间 + private Date finish_time;//完成时间 + private Date hand_time;//交货时间 + private Date other_serivce_time; + private Date use_time;//使用时间 + private Date create_time;//创建时间 + private Date update_time;//更新时间 + + @Id + @Column(name = "id") + public Integer getId() { + return id; + } + + public void setId(Integer id) { + this.id = id; + } + @Column(name = "order_id") + public Integer getOrder_id() { + return order_id; + } + + public void setOrder_id(Integer order_id) { + this.order_id = order_id; + } + @Column(name = "task_order_id") + public Integer getTask_order_id() { + return task_order_id; + } + + public void setTask_order_id(Integer task_order_id) { + this.task_order_id = task_order_id; + } + @Column(name = "mileage") + public Integer getMileage() { + return mileage; + } + + public void setMileage(Integer mileage) { + this.mileage = mileage; + } + @Column(name = "state") + public Integer getState() { + return state; + } + + public void setState(Integer state) { + this.state = state; + } + @Column(name = "trouble_code_value") + public String getTrouble_code_value() { + return trouble_code_value; + } + + public void setTrouble_code_value(String trouble_code_value) { + this.trouble_code_value = trouble_code_value; + } + @Column(name = "dms_code") + public String getDms_code() { + return dms_code; + } + + public void setDms_code(String dms_code) { + this.dms_code = dms_code; + } + @Column(name = "remaer") + public String getRemaer() { + return remaer; + } + + public void setRemaer(String remaer) { + this.remaer = remaer; + } + @Column(name = "repair") + public String getRepair() { + return repair; + } + + public void setRepair(String repair) { + this.repair = repair; + } + @Column(name = "trouble_reason") + public String getTrouble_reason() { + return trouble_reason; + } + + public void setTrouble_reason(String trouble_reason) { + this.trouble_reason = trouble_reason; + } + @Column(name = "trouble_code") + public String getTrouble_code() { + return trouble_code; + } + + public void setTrouble_code(String trouble_code) { + this.trouble_code = trouble_code; + } + @Column(name = "choice_type") + public String getChoice_type() { + return choice_type; + } + + public void setChoice_type(String choice_type) { + this.choice_type = choice_type; + } + @Column(name = "other_service") + public String getOther_service() { + return other_service; + } + + public void setOther_service(String other_service) { + this.other_service = other_service; + } + @Column(name = "dphm") + public String getDphm() { + return dphm; + } + + public void setDphm(String dphm) { + this.dphm = dphm; + } + @Column(name = "arrive_time") + public Date getArrive_time() { + return arrive_time; + } + + public void setArrive_time(Date arrive_time) { + this.arrive_time = arrive_time; + } + @Column(name = "ref_time") + public Date getRef_time() { + return ref_time; + } + + public void setRef_time(Date ref_time) { + this.ref_time = ref_time; + } + @Column(name = "finish_time") + public Date getFinish_time() { + return finish_time; + } + + public void setFinish_time(Date finish_time) { + this.finish_time = finish_time; + } + @Column(name = "hand_time") + public Date getHand_time() { + return hand_time; + } + + public void setHand_time(Date hand_time) { + this.hand_time = hand_time; + } + @Column(name = "other_serivce_time") + public Date getOther_serivce_time() { + return other_serivce_time; + } + + public void setOther_serivce_time(Date other_serivce_time) { + this.other_serivce_time = other_serivce_time; + } + @Column(name = "use_time") + public Date getUse_time() { + return use_time; + } + + public void setUse_time(Date use_time) { + this.use_time = use_time; + } + @Column(name = "create_time") + public Date getCreate_time() { + return create_time; + } + + public void setCreate_time(Date create_time) { + this.create_time = create_time; + } + @Column(name = "update_time") + public Date getUpdate_time() { + return update_time; + } + + public void setUpdate_time(Date update_time) { + this.update_time = update_time; + } + + @Override + public String toString() { + return "JLRepqr{" + + "id=" + id + + ", order_id=" + order_id + + ", task_order_id=" + task_order_id + + ", mileage=" + mileage + + ", state=" + state + + ", trouble_code_value='" + trouble_code_value + '\'' + + ", dms_code='" + dms_code + '\'' + + ", remaer='" + remaer + '\'' + + ", repair='" + repair + '\'' + + ", trouble_reason='" + trouble_reason + '\'' + + ", trouble_code='" + trouble_code + '\'' + + ", choice_type='" + choice_type + '\'' + + ", other_service='" + other_service + '\'' + + ", dphm='" + dphm + '\'' + + ", arrive_time=" + arrive_time + + ", ref_time=" + ref_time + + ", finish_time=" + finish_time + + ", hand_time=" + hand_time + + ", other_serivce_time=" + other_serivce_time + + ", use_time=" + use_time + + ", create_time=" + create_time + + ", update_time=" + update_time + + '}'; + } +} diff --git a/src/main/java/com/zhongdao/jlr/util/DateUtil.java b/src/main/java/com/zhongdao/jlr/util/DateUtil.java new file mode 100644 index 0000000..fee29fd --- /dev/null +++ b/src/main/java/com/zhongdao/jlr/util/DateUtil.java @@ -0,0 +1,152 @@ +package com.zhongdao.jlr.util; + +import java.text.DateFormat; +import java.text.ParseException; +import java.text.SimpleDateFormat; +import java.util.ArrayList; +import java.util.Calendar; +import java.util.Date; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +public class DateUtil { + + /** + * 获取SimpleDateFormat + * @param parttern 日期格式 + * @return SimpleDateFormat对象 + * @throws RuntimeException 异常:非法日期格式 + */ + private static SimpleDateFormat getDateFormat(String parttern) throws RuntimeException { + return new SimpleDateFormat(parttern); + } + + /** + * 获取日期中的某数值。如获取月份 + * @param date 日期 + * @param dateType 日期格式 + * @return 数值 + */ + private static int getInteger(Date date, int dateType) { + Calendar calendar = Calendar.getInstance(); + calendar.setTime(date); + return calendar.get(dateType); + } + + /** + * 增加日期中某类型的某数值。如增加日期 + * @param date 日期 + * @param dateType 类型 + * @param amount 数值 + * @return 计算后日期 + */ + private static Date addInteger(Date date, int dateType, int amount) { + Date myDate = null; + if (date != null) { + Calendar calendar = Calendar.getInstance(); + calendar.setTime(date); + calendar.add(dateType, amount); + myDate = calendar.getTime(); + } + return myDate; + } + + /** + * 获取精确的日期 + * @param timestamps 时间long集合 + * @return 日期 + */ + private static Date getAccurateDate(List timestamps) { + Date date = null; + long timestamp = 0; + Map map = new HashMap(); + List absoluteValues = new ArrayList(); + + if (timestamps != null && timestamps.size() > 0) { + if (timestamps.size() > 1) { + for (int i = 0; i < timestamps.size(); i++) { + for (int j = i + 1; j < timestamps.size(); j++) { + long absoluteValue = Math.abs(timestamps.get(i) - timestamps.get(j)); + absoluteValues.add(absoluteValue); + long[] timestampTmp = { timestamps.get(i), timestamps.get(j) }; + map.put(absoluteValue, timestampTmp); + } + } + + // 有可能有相等的情况。如2012-11和2012-11-01。时间戳是相等的 + long minAbsoluteValue = -1; + if (!absoluteValues.isEmpty()) { + // 如果timestamps的size为2,这是差值只有一个,因此要给默认值 + minAbsoluteValue = absoluteValues.get(0); + } + for (int i = 0; i < absoluteValues.size(); i++) { + for (int j = i + 1; j < absoluteValues.size(); j++) { + if (absoluteValues.get(i) > absoluteValues.get(j)) { + minAbsoluteValue = absoluteValues.get(j); + } else { + minAbsoluteValue = absoluteValues.get(i); + } + } + } + + if (minAbsoluteValue != -1) { + long[] timestampsLastTmp = map.get(minAbsoluteValue); + if (absoluteValues.size() > 1) { + timestamp = Math.max(timestampsLastTmp[0], timestampsLastTmp[1]); + } else if (absoluteValues.size() == 1) { + // 当timestamps的size为2,需要与当前时间作为参照 + long dateOne = timestampsLastTmp[0]; + long dateTwo = timestampsLastTmp[1]; + if ((Math.abs(dateOne - dateTwo)) < 100000000000L) { + timestamp = Math.max(timestampsLastTmp[0], timestampsLastTmp[1]); + } else { + long now = new Date().getTime(); + if (Math.abs(dateOne - now) <= Math.abs(dateTwo - now)) { + timestamp = dateOne; + } else { + timestamp = dateTwo; + } + } + } + } + } else { + timestamp = timestamps.get(0); + } + } + + if (timestamp != 0) { + date = new Date(timestamp); + } + return date; + } + + + + /** + * 将日期字符串转化为日期。失败返回null。 + * @param date 日期字符串 + * @param parttern 日期格式 + * @return 日期 + */ + public static Date StringToDate(String date, String parttern) { + Date myDate = null; + if (date != null) { + try { + myDate = getDateFormat(parttern).parse(date); + } catch (Exception e) { + } + } + return myDate; + } + + public static String DateToString(Date date) { + if(date==null){ + return null; + } + SimpleDateFormat sdf=new SimpleDateFormat("yyyy-MM-dd hh:mm:ss"); + String str=sdf.format(date); + return str; + } + +} diff --git a/src/main/java/com/zhongdao/jlr/util/ExportCSVUtil.java b/src/main/java/com/zhongdao/jlr/util/ExportCSVUtil.java new file mode 100644 index 0000000..4b61240 --- /dev/null +++ b/src/main/java/com/zhongdao/jlr/util/ExportCSVUtil.java @@ -0,0 +1,106 @@ +package com.zhongdao.jlr.util; + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import javax.servlet.http.HttpServletResponse; +import java.io.*; +import java.net.URLEncoder; +import java.text.SimpleDateFormat; +import java.util.Date; +import java.util.List; +import java.util.Map; + +public class ExportCSVUtil { + + private static final Logger logger = LoggerFactory.getLogger(ExportCSVUtil.class); + /** + * CSV文件列分隔符 + */ + private static final String CSV_COLUMN_SEPARATOR = ","; + + /** + * CSV文件列分隔符 + */ + private static final String CSV_RN = "\r\n"; + + /** + * @param dataList 集合数据 + * @param + */ + public static boolean doExport(List dataList, String path) { + FileOutputStream out = null; + OutputStreamWriter osw = null; + BufferedWriter bw = null; + + try { + File file = new File(path); + if (!file.exists()) { + try { + file.createNewFile(); + } catch (IOException e) { + e.printStackTrace(); + } + } + StringBuffer buf = new StringBuffer(); + out = new FileOutputStream(file); + osw = new OutputStreamWriter(out); + // 完成数据csv文件的封装 + for (int i = 0; i < dataList.size(); i++) { + buf.append(dataList.get(i)); + } + buf.append(CSV_RN); + // 写出响应 + osw.write(buf.toString()); + osw.flush(); + return true; + } catch (Exception e) { + logger.error("doExport错误...", e); + } finally { + if (bw != null) { + try { + bw.close(); + bw = null; + } catch (IOException e) { + e.printStackTrace(); + } + } + if (osw != null) { + try { + osw.close(); + osw = null; + } catch (IOException e) { + e.printStackTrace(); + } + } + if (out != null) { + try { + out.close(); + out = null; + } catch (IOException e) { + e.printStackTrace(); + } + } + + } + return false; + } + + /** + * @throws UnsupportedEncodingException setHeader + */ + public static void responseSetProperties(String path, HttpServletResponse response) throws UnsupportedEncodingException { + // 设置文件后缀 + SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMddHHmmss"); + // 读取字符编码 + String utf = "UTF-8"; + + // 设置响应 + response.setContentType("application/ms-txt.numberformat:@"); + response.setCharacterEncoding(utf); + response.setHeader("Pragma", "public"); + response.setHeader("Cache-Control", "max-age=30"); + response.setHeader("Content-Disposition", "attachment; filename=" + URLEncoder.encode(path, utf)); + } + +} diff --git a/src/main/java/com/zhongdao/jlr/util/GeoAddressCenter.java b/src/main/java/com/zhongdao/jlr/util/GeoAddressCenter.java new file mode 100644 index 0000000..931718a --- /dev/null +++ b/src/main/java/com/zhongdao/jlr/util/GeoAddressCenter.java @@ -0,0 +1,235 @@ +package com.zhongdao.jlr.util; + + + +import java.net.URLEncoder; +import java.util.List; +import java.util.Map; + +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; + +import com.alibaba.fastjson.JSON; + +public class GeoAddressCenter { + private static Log log = LogFactory.getLog(GeoAddressCenter.class); + public static final String KEY = "7de40e4d33458a1c5901c3935f916d3c"; //个人KEY + + + //public static final String KEY = "41e95051d96ed69493f46e435204dc56"; //企业KEY + /** + * 根据经纬度查询位置信息 + * @param locaX + * @param locaY + * @return + */ + public static String getGeoAddress(String locaX,String locaY){ + String geoAddress = ""; + try { + String route_url = " http://restapi.amap.com/v3/geocode/regeo?output=json&radius=1000"; + + if (locaX == null || locaY == null || locaX.equals("") || locaY.equals("")) { + + }else{ + route_url += "&location="+locaX+","+locaY +"&key="+ KEY; + //System.out.println(route_url); + HttpClientDownload httpDown = new HttpClientDownload(); + httpDown.setFileUrl(route_url); + if (httpDown.download()) { + byte[] httpb = httpDown.getData(); + String data = new String(httpb, "utf-8"); + //System.out.println(data); + if(data!=null && !"".equals(data)){ + Map map = (Map) JSON.parse(data); + if (map.get("status") != null&& !map.get("status").equals("")) { + if (map.get("status").equals("1")) { + Map geoMap = (Map)map.get("regeocode"); + if(geoMap != null){ + geoAddress = (String)geoMap.get("formatted_address"); + } + } + } + } + } + } + } catch (Exception ee) { + log.error("", ee); + } + + return geoAddress; + } + + /** + * 根据经纬度查询地理编码 + * @param locaX + * @param locaY + * @return + */ + public static String getGeoAdcode(String locaX,String locaY){ + String adCode = "000000"; + try { + String route_url = " http://restapi.amap.com/v3/geocode/regeo?output=json&radius=1000"; + + if (locaX == null || locaY == null || locaX.equals("") || locaY.equals("")) { + + }else{ + route_url += "&location="+locaX+","+locaY +"&key="+ KEY; + //System.out.println(route_url); + HttpClientDownload httpDown = new HttpClientDownload(); + httpDown.setFileUrl(route_url); + if (httpDown.download()) { + byte[] httpb = httpDown.getData(); + String data = new String(httpb, "utf-8"); + //System.out.println(data); + if(data!=null && !"".equals(data)){ + Map map = (Map) JSON.parse(data); + if (map.get("status") != null&& !map.get("status").equals("")) { + if (map.get("status").equals("1")) { + Map geoMap = (Map)map.get("regeocode"); + if(geoMap != null){ + Map addressMap = (Map)geoMap.get("addressComponent"); + if(addressMap != null){ + adCode = (String)addressMap.get("adcode"); + if(adCode==null){ + adCode = "000000"; + } + } + } + } + } + } + } + } + } catch (Exception ee) { + log.error("", ee); + } + + return adCode; + } + + /** + * 根据地理名称查询区域代码 + * @param addressName + * @return + */ + public static String getGeoAdcode(String addressName){ + String adCode = "000000"; + try { + String route_url = "http://restapi.amap.com/v3/geocode/geo?"; + + if (addressName != null || !addressName.equals("")) { + route_url += "address="+URLEncoder.encode(addressName, "utf-8")+"&key="+ KEY+"&output=json"; + + HttpClientDownload httpDown = new HttpClientDownload(); + httpDown.setFileUrl(route_url); + if (httpDown.download()) { + byte[] httpb = httpDown.getData(); + String data = new String(httpb, "utf-8"); + if(data!=null && !"".equals(data)){ + Map map = (Map) JSON.parse(data); + if (map.get("status") != null&& !map.get("status").equals("")) { + if (map.get("status").equals("1")) { + List geoList = (List)map.get("geocodes"); + if(geoList!=null && geoList.size()>0){ + Map sMap = (Map)geoList.get(0); + adCode = (String)sMap.get("adcode"); + } + } + } + } + } + } + + } catch (Exception ee) { + log.error("", ee); + } + + return adCode; + } + + /** + * 根据地理名称查询经纬度 + * @param addressName + * @return + */ + public static String getGeoLonLat(String addressName){ + String locationXY = ""; + try { + String route_url = "http://restapi.amap.com/v3/geocode/geo?"; + + if (addressName != null || !addressName.equals("")) { + route_url += "address="+URLEncoder.encode(addressName, "utf-8")+"&key="+ KEY+"&output=json"; + + HttpClientDownload httpDown = new HttpClientDownload(); + httpDown.setFileUrl(route_url); + if (httpDown.download()) { + byte[] httpb = httpDown.getData(); + String data = new String(httpb, "utf-8"); + System.out.println(data); + if(data!=null && !"".equals(data)){ + Map map = (Map) JSON.parse(data); + if (map.get("status") != null&& !map.get("status").equals("")) { + if (map.get("status").equals("1")) { + List geoList = (List)map.get("geocodes"); + if(geoList!=null && geoList.size()>0){ + Map sMap = (Map)geoList.get(0); + locationXY = (String)sMap.get("location"); + } + } + } + } + } + } + + } catch (Exception ee) { + log.error("", ee); + } + + return locationXY; + } + + public static String getGeoJson(String addressName){ + String locationXY = ""; + try { + String route_url = "http://restapi.amap.com/v3/geocode/geo?"; + + if (addressName != null || !addressName.equals("")) { + route_url += "address="+URLEncoder.encode(addressName, "utf-8")+"&key="+ KEY+"&output=json"; + //log.info(route_url); + HttpClientDownload httpDown = new HttpClientDownload(); + httpDown.setFileUrl(route_url); + if (httpDown.download()) { + byte[] httpb = httpDown.getData(); + String data = new String(httpb, "utf-8"); + if(data!=null && !"".equals(data)){ + Map map = (Map) JSON.parse(data); + if (map.get("status") != null&& !map.get("status").equals("")) { + if (map.get("status").equals("1")) { + List geoList = (List)map.get("geocodes"); + if(geoList!=null && geoList.size()>0){ + Map sMap = (Map)geoList.get(0); + locationXY = (String)sMap.get("location")+","+(String)sMap.get("adcode"); + } + } + } + } + } + } + + } catch (Exception ee) { + ee.printStackTrace(); + log.error("", ee); + } + System.out.println(locationXY); + return locationXY; + } + + public static void main(String[] atgs){ + String dd = GeoAddressCenter.getGeoAdcode("121.397358","31.623553"); +// String dd = GeoAddressCenter.getGeoLonLat("浙江省嘉兴市桐乡市屠甸出口"); + System.out.println(dd); + + } + + +} diff --git a/src/main/java/com/zhongdao/jlr/util/HttpClientDownload.java b/src/main/java/com/zhongdao/jlr/util/HttpClientDownload.java new file mode 100644 index 0000000..4b0457d --- /dev/null +++ b/src/main/java/com/zhongdao/jlr/util/HttpClientDownload.java @@ -0,0 +1,141 @@ +package com.zhongdao.jlr.util; + +import java.io.ByteArrayOutputStream; +import java.io.InputStream; + +import org.apache.commons.httpclient.HttpClient; +import org.apache.commons.httpclient.MultiThreadedHttpConnectionManager; +import org.apache.commons.httpclient.methods.GetMethod; +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; + +public class HttpClientDownload { + + private ByteArrayOutputStream dataStream = new ByteArrayOutputStream(); + private MultiThreadedHttpConnectionManager manager = new MultiThreadedHttpConnectionManager(); + private boolean stop = false; + + protected final Log log = LogFactory.getLog(HttpClientDownload.class); + + private String fileUrl = "http://umsa.careland.com.cn/tmc/get_zone_traffic_snapshoot.ums?cdid=30000&cpid=12&kcard=108001100000002007697598&devidcode=22844C70CCTJ1&actcode=7142549098995416&verid=4C707502252C&zlibcomp=1"; + + private int buffer = 1024 * 10; + + private String fileName = "TSPService.txt"; + + public boolean isStop() { + return stop; + } + + public void setStop(boolean stop) { + this.stop = stop; + } + + public String getFileName() { + return fileName; + } + + public void setFileName(String fileName) { + this.fileName = fileName; + } + + public String getFileUrl() { + return fileUrl; + } + + public void setFileUrl(String fileUrl) { + this.fileUrl = fileUrl; + } + + public int getBuffer() { + return buffer; + } + + public void setBuffer(int buffer) { + this.buffer = buffer; + } + + public byte[] getData() { + return dataStream.toByteArray(); + } + + public ByteArrayOutputStream getDataStream() { + return dataStream; + } + + public void setDataStream(ByteArrayOutputStream dataStream) { + this.dataStream = dataStream; + } + + public boolean download() { + HttpClient client = null; + GetMethod httpGet = null; + try { + manager.getParams().setConnectionTimeout(2000); + manager.getParams().setSoTimeout(2000); + client = new HttpClient(manager); + httpGet = new GetMethod(fileUrl); + httpGet.setRequestHeader("Connection", "close"); + client.executeMethod(httpGet); + String path = httpGet.getPath(); + + int offset = path.lastIndexOf("/"); + if (offset != -1) { + fileName = path.substring(offset + 1); + } else { + fileName = path; + } + if (fileName.indexOf(".") == -1) { + fileName = fileName + ".htm"; + } + if (fileName.equals(".htm")) { + fileName = "123.htm"; + } + InputStream in = httpGet.getResponseBodyAsStream(); + + byte[] b = new byte[buffer]; + int len = 0; + while ((len = in.read(b)) != -1 && !isStop()) { + dataStream.write(b, 0, len); + } + in.close(); + dataStream.close(); + } catch (Exception e) { + log.error(e); + return false; + } finally { + try { + + httpGet.releaseConnection(); + client.getHttpConnectionManager().closeIdleConnections(0); + } catch (Exception e) { + // log.error(e); + return false; + } + } + return true; + } + + + /* + public static void main(String args[]) { + HttpClientDownload d = new HttpClientDownload(); + d.download(); + ZipSeparate zp = new ZipSeparate(); + if (d.download()) { + byte[] httpb = d.getData(); + zp.setFirstLength(768); + zp.setData(httpb); + zp.separateData(); + List datas = zp.getDatas(); + DownFileSession ds = new DownFileSession(); + ds.setVehicleId("1"); + ds.setTime(new Date()); + ds.setSessionId(SessionIdUtil.getSessionId()); + ds.setDatas(datas); + System.out.println(zp.getZipData().length); + System.out.println(ds.getSize()); + } + } + */ +} diff --git a/src/main/java/com/zhongdao/jlr/util/MD5.java b/src/main/java/com/zhongdao/jlr/util/MD5.java new file mode 100644 index 0000000..7076532 --- /dev/null +++ b/src/main/java/com/zhongdao/jlr/util/MD5.java @@ -0,0 +1,62 @@ +package com.zhongdao.jlr.util; + + +import java.security.MessageDigest; +/* + * MD5 算法 +*/ +public class MD5 { + + /*** + * MD5加码 生成32位md5码 + */ + public static String string2MD5(String inStr){ + MessageDigest md5 = null; + try{ + md5 = MessageDigest.getInstance("MD5"); + }catch (Exception e){ + System.out.println(e.toString()); + e.printStackTrace(); + return ""; + } + char[] charArray = inStr.toCharArray(); + byte[] byteArray = new byte[charArray.length]; + + for (int i = 0; i < charArray.length; i++) + byteArray[i] = (byte) charArray[i]; + byte[] md5Bytes = md5.digest(byteArray); + StringBuffer hexValue = new StringBuffer(); + for (int i = 0; i < md5Bytes.length; i++){ + int val = ((int) md5Bytes[i]) & 0xff; + if (val < 16) + hexValue.append("0"); + hexValue.append(Integer.toHexString(val)); + } + return hexValue.toString(); + + } + + /** + * 加密解密算法 执行一次加密,两次解密 + */ + public static String convertMD5(String inStr){ + + char[] a = inStr.toCharArray(); + for (int i = 0; i < a.length; i++){ + a[i] = (char) (a[i] ^ 't'); + } + String s = new String(a); + return s; + + } + + // 测试主函数 + public static void main(String args[]) { + String s = new String("zdjySino6103"); + System.out.println("原始:" + s); + System.out.println("MD5后:" + string2MD5(s)); + System.out.println("加密的:" + convertMD5(s)); + System.out.println("解密的:" + convertMD5("8827d737029bc0950a90cf9ce5946ce9")); + + } +} diff --git a/src/main/java/com/zhongdao/jlr/util/MTextUtils.java b/src/main/java/com/zhongdao/jlr/util/MTextUtils.java new file mode 100644 index 0000000..cc60636 --- /dev/null +++ b/src/main/java/com/zhongdao/jlr/util/MTextUtils.java @@ -0,0 +1,484 @@ +package com.zhongdao.jlr.util; + +public class MTextUtils { + + public static String objectToString(Object o){ + try { + if(o!=null){ + return o.toString(); + }else{ + return ""; + } + } catch (Exception e) { + return ""; + } + } + + public static double stringToDouble(Object s){ + try { + if(s!=null){ + return Double.valueOf(s.toString()); + }else{ + return 0; + } + } catch (Exception e) { + return 0; + } + } + + /*** + * 根据状态码返回对应的案件状态 + * @param state + * @return + */ + public static String getRecueName(String state){ + if("51".equals(state)){ + return "取消服务"; + } + if("53".equals(state)){ + return "救援失败"; + } + if("55".equals(state)){ + return "救援成功"; + } + return ""; + } + + /*** + * 根据状态码返回对应的结算状态 + * @param state + * @return + */ + public static String getAccountState(String state){ + if("2".equals(state)){ + return "对账中"; + } + if("3".equals(state)){ + return "对账中"; + } + if("4".equals(state)){ + return "对账完成"; + } + if("6".equals(state)){ + return "开票完成"; + } + return ""; + } + + /*** + * 根据状态码返回对应的维修结果 + * @param state + * @return + */ + public static String getRepairResult(String state){ + if("0".equals(state)){ + return ""; + } + if("11".equals(state)){ + return "车辆无法使用"; + } + if("6".equals(state)){ + return "重新标定"; + } + if("1".equals(state)){ + return "调整"; + } + if("4".equals(state)){ + return "提供的建议"; + } + if("5".equals(state)){ + return "未发现故障"; + } + if("2".equals(state)){ + return "已充电蓄电池"; + } + if("10".equals(state)){ + return "已重新编程(软件上传"; + } + if("9".equals(state)){ + return "已更换零部件 — 问题未解决"; + } + if("8".equals(state)){ + return "已更换部件"; + } + if("3".equals(state)){ + return "已添加油液到正确液位"; + } + if("7".equals(state)){ + return "已维修"; + } + return ""; + } + + /*** + * 根据状态码返回对应的故障原因 + * @param state + * @return + */ + public static String getReason(String state){ + if("0".equals(state)){ + return ""; + } + if("57".equals(state)){ + return "安装不当"; + } + if("53".equals(state)){ + return "安装了错误部件"; + } + if("110".equals(state)){ + return "凹陷"; + } + if("67".equals(state)){ + return "疤痕"; + } + if("118".equals(state)){ + return "摆动"; + } + if("45".equals(state)){ + return "保险丝熔断"; + } + if("109".equals(state)){ + return "被剥离"; + } + if("107".equals(state)){ + return "被盗"; + } + if("5".equals(state)){ + return "被堵塞"; + } + if("19".equals(state)){ + return "被腐蚀"; + } + if("16".equals(state)){ + return "被碎屑污染"; + } + if("117".equals(state)){ + return "被损坏"; + } + if("98".equals(state)){ + return "被剪切"; + } + if("30".equals(state)){ + return "变形"; + } + if("42".equals(state)){ + return "波动"; + } + if("78".equals(state)){ + return "不工作"; + } + if("62".equals(state)){ + return "部件松动"; + } + if("79".equals(state)){ + return "不受广播/发射支持"; + } + if("86".equals(state)){ + return "不同步"; + } + if("51".equals(state)){ + return "不准确"; + } + if("10".equals(state)){ + return "擦伤"; + } + if("59".equals(state)){ + return "颤动 / 震动"; + } + if("50".equals(state)){ + return "电阻过高"; + } + if("43".equals(state)){ + return "冻结(低温)"; + } + if("24".equals(state)){ + return "断口"; + } + if("7".equals(state)){ + return "断裂"; + } + if("99".equals(state)){ + return "短路"; + } + if("101".equals(state)){ + return "对地短路"; + } + if("100".equals(state)){ + return "对蓄电池短路"; + } + if("25".equals(state)){ + return "放气"; + } + if("106".equals(state)){ + return "发硬"; + } + if("26".equals(state)){ + return "分层"; + } + if("33".equals(state)){ + return "工厂损坏"; + } + if("95".equals(state)){ + return "刮擦"; + } + if("37".equals(state)){ + return "固定件/紧固件 — 断裂"; + } + if("40".equals(state)){ + return "固定件/紧固件 — 缺失"; + } + if("38".equals(state)){ + return "固定件/紧固件 — 安装不正确"; + } + if("39".equals(state)){ + return "固定件/紧固件 — 松脱"; + } + if("55".equals(state)){ + return "规格错误"; + } + if("88".equals(state)){ + return "过热"; + } + if("36".equals(state)){ + return "火烧损坏"; + } + if("9".equals(state)){ + return "校准"; + } + if("63".equals(state)){ + return "接地线松动"; + } + if("92".equals(state)){ + return "静态损耗"; + } + if("23".equals(state)){ + return "挤压"; + } + if("103".equals(state)){ + return "开裂"; + } + if("85".equals(state)){ + return "开路"; + } + if("96".equals(state)){ + return "卡滞"; + } + if("58".equals(state)){ + return "卡住"; + } + if("105".equals(state)){ + return "卡滞"; + } + if("31".equals(state)){ + return "空"; + } + if("11".equals(state)){ + return "溃缩"; + } + if("108".equals(state)){ + return "拉抻"; + } + if("120".equals(state)){ + return "类型错误"; + } + if("13".equals(state)){ + return "冷凝"; + } + if("15".equals(state)){ + return "冷却液污染"; + } + if("14".equals(state)){ + return "连接器断开"; + } + if("21".equals(state)){ + return "裂缝"; + } + if("47".equals(state)){ + return "密封圈/密封胶 — 安装不正确"; + } + if("48".equals(state)){ + return "密封圈/密封胶 — 泄漏"; + } + if("46".equals(state)){ + return "密封圈/密封胶 — 零件不正确"; + } + if("49".equals(state)){ + return "密封圈/密封胶 — 缺失"; + } + if("71".equals(state)){ + return "模糊"; + } + if("74".equals(state)){ + return "模块间无通信"; + } + if("72".equals(state)){ + return "模块未改编"; + } + if("73".equals(state)){ + return "模块未配置"; + } + if("114".equals(state)){ + return "磨破"; + } + if("119".equals(state)){ + return "磨损"; + } + if("115".equals(state)){ + return "扭绞"; + } + if("90".equals(state)){ + return "喷镀故障"; + } + if("8".equals(state)){ + return "膨胀"; + } + if("97".equals(state)){ + return "破碎"; + } + if("4".equals(state)){ + return "起泡"; + } + if("2".equals(state)){ + return "气锁"; + } + if("64".equals(state)){ + return "缺失"; + } + if("70".equals(state)){ + return "缺失"; + } + if("68".equals(state)){ + return "熔化"; + } + if("32".equals(state)){ + return "乳化"; + } + if("41".equals(state)){ + return "闪烁"; + } + if("94".equals(state)){ + return "撕裂"; + } + if("18".equals(state)){ + return "水浸"; + } + if("87".equals(state)){ + return "失去平衡"; + } + if("93".equals(state)){ + return "受限制"; + } + if("20".equals(state)){ + return "损坏"; + } + if("111".equals(state)){ + return "表面损坏"; + } + if("56".equals(state)){ + return "调整不当"; + } + if("34".equals(state)){ + return "褪色"; + } + if("27".equals(state)){ + return "脱离"; + } + if("102".equals(state)){ + return "涂污"; + } + if("3".equals(state)){ + return "弯曲"; + } + if("28".equals(state)){ + return "完全放电"; + } + if("77".equals(state)){ + return "未安装"; + } + if("35".equals(state)){ + return "未能初始化"; + } + if("116".equals(state)){ + return "无法编程"; + } + if("104".equals(state)){ + return "污渍"; + } + if("75".equals(state)){ + return "无诊断通信"; + } + if("89".equals(state)){ + return "像素丢失或错误"; + } + if("60".equals(state)){ + return "泄漏"; + } + if("113".equals(state)){ + return "锈蚀"; + } + if("65".equals(state)){ + return "压力过低"; + } + if("52".equals(state)){ + return "颜色错误"; + } + if("12".equals(state)){ + return "压缩"; + } + if("61".equals(state)){ + return "液位过低"; + } + if("29".equals(state)){ + return "已变色"; + } + if("44".equals(state)){ + return "已满"; + } + if("6".equals(state)){ + return "易碎"; + } + if("80".equals(state)){ + return "异味"; + } + if("82".equals(state)){ + return "油封/O 形圈 — 安装不正确"; + } + if("81".equals(state)){ + return "油封/O 形圈 — 零件不正确"; + } + if("84".equals(state)){ + return "油封/O 形圈 — 缺失"; + } + if("83".equals(state)){ + return "油封/O 形圈 — 泄漏"; + } + if("91".equals(state)){ + return "有孔"; + } + if("17".equals(state)){ + return "油液污染"; + } + if("1".equals(state)){ + return "游移"; + } + if("22".equals(state)){ + return "有折痕"; + } + if("54".equals(state)){ + return "语言错误"; + } + if("76".equals(state)){ + return "噪音"; + } + if("69".equals(state)){ + return "制造不当"; + } + if("112".equals(state)){ + return "肿胀"; + } + if("66".equals(state)){ + return "阻力低"; + } + return ""; + } +} diff --git a/src/main/java/com/zhongdao/jlr/util/XJson.java b/src/main/java/com/zhongdao/jlr/util/XJson.java new file mode 100644 index 0000000..5025413 --- /dev/null +++ b/src/main/java/com/zhongdao/jlr/util/XJson.java @@ -0,0 +1,436 @@ +package com.zhongdao.jlr.util; + +import java.lang.reflect.Field; + +import java.util.ArrayList; +import java.util.List; + +import org.json.JSONArray; +import org.json.JSONException; +import org.json.JSONObject; + +/** + * Created by anqiansong on 2016/5/27. + * 主题:[案例1]XJson,目前只支持数据类型,Array,Map,List + */ +public class XJson { //===============================JSON解析===================================== + /** + * get jsonobject + * @param String json + * @return JOSNObject + */ + public static JSONObject getJsonObject(String json){ + JSONObject jsonObject = null; + try { + jsonObject = new JSONObject(json); + } catch (JSONException e) { + e.getCause(); + return null; + } + return jsonObject; + } + /** + * get jsonarray + * @param String json + * @return JOSNArray + */ + public static JSONArray getJsonArray(String json){ + JSONArray jsonArray= null; + try { + jsonArray = new JSONArray(json); + } catch (JSONException e) { + //LogUtil.e(TAG, "create jsonobject exception"); + e.printStackTrace(); + } + return jsonArray; + } + /** + * get String data + * @param json json data + * @param key param + * @return data + * @throws JSONException + */ + public static String getString(String json,String key){ + JSONObject jsonObject=getJsonObject(json); + if(jsonObject!= null){ + try { + return jsonObject.getString(key); + } catch (JSONException e) { + // TODO Auto-generated catch block + e.printStackTrace(); + return ""; + } + }else{ + return null; + } + } + /** + * get String data + * @param json json data + * @param key param + * @return data + * @throws JSONException + */ + public static int getInt(String json,String key){ + JSONObject jsonObject=getJsonObject(json); + if(jsonObject!= null){ + try { + return jsonObject.getInt(key); + } catch (JSONException e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } + }else{ + return -1; + } + return 0; + + } + /** + * get Double data + * @param json json data + * @param key param + * @return data + * @throws JSONException + */ + public static double getDouble(String json,String key){ + JSONObject jsonObject=getJsonObject(json); + if(jsonObject!= null){ + try { + return jsonObject.getDouble(key); + } catch (JSONException e) { + // TODO Auto-generated catch block + e.printStackTrace(); + return 0d; + } + }else{ + return -1; + } + } + + /** + *

parent {@link Object getObject(String json,Class c,String key)}

+ * @return + */ + public static Object getObject(String json,Class c){ + JSONObject jo=getJsonObject(json); + if(jo==null){ + return null; + } + return getObject(jo,c); + } + /** + * This Method use in jsonObject get current class with object :{"a":"x","b":"xx"} + * @param jsonObject + * @param key query key,not null + * @param c class + * @return object + * @throws Exception + */ + public static Object getObject(String json,Class c,String key){ + JSONObject jo = null; + if(key!=null){ + try { + jo = getJsonObject(json).getJSONObject(key); + } catch (JSONException e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } + } + if(jo==null){ + return null; + } + return getObject(jo,c); + } + /** + * 解析JSONObject对象,返回Object + * @param jo + * @param c + * @return Object of class c + */ + public static Object getObject(JSONObject jo,Class c){ + Object bean=null; + try { + bean = c.newInstance(); + } catch (InstantiationException e) { + e.printStackTrace(); + } catch (IllegalAccessException e) { + e.printStackTrace(); + } + Field[] fs = c.getDeclaredFields(); + for (int i = 0; i < fs.length; i++) { + Field f = fs[i]; + f.setAccessible(true); + String type = f.getType().getSimpleName();//f.getGenericType(); + //LogUtil.print("type="+type.toString()+","+f.getType()+",name="+f.getName()); + String value = null; + try{ + try{ + value = jo.getString(f.getName()); + }catch (JSONException e) { + value=null; + } + if(type.equals(boolean.class.getSimpleName())){ + f.setBoolean(bean,Boolean.valueOf(value)); + }else if(type.equals(int.class.getSimpleName())){ + f.setInt(bean,Integer.valueOf(value)); + }else if(type.equals(double.class.getSimpleName())){ + f.setDouble(bean, Double.valueOf(value)); + }else if(type.equals(long.class.getSimpleName())){ + f.setLong(bean, Long.valueOf(value)); + }else if(type.equals(String.class.getSimpleName())){ + f.set(bean,value); + }else if(type.equals("List")){ + String listClass=f.getGenericType().toString(); + listClass=listClass.substring(listClass.lastIndexOf("<")+1, listClass.lastIndexOf(">")); + //LogUtil.print(listClass); + Class listCls=null; + try { + listCls=Class.forName(listClass); + } catch (ClassNotFoundException e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } + if(listCls!=null){ + if(value==null){ + f.set(bean, null); + }else{ + f.set(bean, getList(value, listCls)); + } + } + }else{ + //f.set(bean,getBaseObject(value, f.getType())); + f.set(bean,getObject(getJsonObject(value), f.getType())); + } + }catch(NumberFormatException e){ + e.printStackTrace(); + }catch(IllegalAccessException e){ + e.printStackTrace(); + }catch(IllegalArgumentException e){ + e.printStackTrace(); + } + } + return bean; + } + /** + * This method use in jsonObject get list object:{"b":[{"a":"x","b":"xx"},{"a":"x","b":"xx"}]} + * @param key list key,such as the "b",not null + * @param objectKey object key + * @param c object + * @return list + * @throws Exception + */ + public static List getList(String json,String key ,Class c){ + JSONObject jsonObject=getJsonObject(json); + List list = null; + if(jsonObject!=null && key!=null){ + try { + list=getList(jsonObject.getJSONArray(key).toString(), c); + } catch (JSONException e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } + } + return list; + } + + /** + * 获取List的基本数据,This method use in jsonObject get list object:[{"a":"x","b":"xx"},{"a":"x","b":"xx"}] + * @param json + * @param c + * @return List,object of class c + */ + public static List getList(String json,Class c){ + List list = null; + JSONArray jsonArray = null; + try { + jsonArray = new JSONArray(json); + } catch (JSONException e) { + // TODO Auto-generated catch block + e.printStackTrace(); + return null; + } + if(!jsonArray.isNull(0)){ + list = new ArrayList(); + for (int i = 0; i < jsonArray.length(); i++) { + JSONObject jsObject = null; + try { + jsObject = jsonArray.getJSONObject(i); + } catch (JSONException e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } + Object object = getObject(getJsonObject(jsObject.toString()),c); + list.add(object); + } + } + return list; + } + //=========================================JSON生成================================= + /*** + * create json object data:{"a":"x","b":"xx"} + */ + public static String jsonObject_encodeToString(Object bean){ + return jsonObject_encode(bean).toString(); + } + @SuppressWarnings("unchecked") + public static JSONObject jsonObject_encode(Object bean){ + JSONObject jsonObject = new JSONObject(); + Field[] fs = bean.getClass().getDeclaredFields(); + for (int i = 0; i < fs.length; i++) { + Field f = fs[i]; + f.setAccessible(true); + //LogUtil.print("object type="+f.getType().getSimpleName()+",name="+f.getName()); + try { + if(f.getType().getSimpleName().equals("List")){ + + if(f.get(bean)!=null){ + jsonObject.put(f.getName(),jsonArray_encode((List)f.get(bean))); + }else{ + jsonObject.put(f.getName(),""); + } + }else if(f.getType().getSimpleName().equals(String.class.getSimpleName()) || + f.getType().getSimpleName().equals(boolean.class.getSimpleName()) || + f.getType().getSimpleName().equals(int.class.getSimpleName()) || + f.getType().getSimpleName().equals(long.class.getSimpleName()) || + f.getType().getSimpleName().equals(double.class.getSimpleName()) || + f.getType().getSimpleName().equals(float.class.getSimpleName()) || + f.getType().getSimpleName().equals(double.class.getSimpleName())){ + jsonObject.put(f.getName(),f.get(bean)); + }else{ + Object object=null; + try { + object=f.getType().newInstance(); + } catch (InstantiationException e) { + e.printStackTrace(); + } + object=f.get(bean); + jsonObject.put(f.getName(),jsonObject_encode(object)); + } + } catch (IllegalArgumentException e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } catch (JSONException e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } + catch (IllegalAccessException e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } + } + return jsonObject; + } + /*** + * create json array data:[{"a":"x","b":"xx"},{"a":"x","b":"xx"}] + */ + public static String jsonArray_encodeToString(List list){ + return jsonArray_encode(list).toString(); + } + @SuppressWarnings("unchecked") + private static JSONArray jsonArray_encode(List list){ + JSONArray jsonArray=new JSONArray(); + for(int n=0;n)f.get(bean))); + }else{ + jsonObject.put(f.getName(),""); + } + }else if(f.getType().getSimpleName().equals(String.class.getSimpleName()) || + f.getType().getSimpleName().equals(boolean.class.getSimpleName()) || + f.getType().getSimpleName().equals(int.class.getSimpleName()) || + f.getType().getSimpleName().equals(long.class.getSimpleName()) || + f.getType().getSimpleName().equals(double.class.getSimpleName()) || + f.getType().getSimpleName().equals(float.class.getSimpleName()) || + f.getType().getSimpleName().equals(double.class.getSimpleName())){ + jsonObject.put(f.getName(),f.get(bean)); + }else{ + Object object=null; + try { + object=f.getType().newInstance(); + } catch (InstantiationException e) { + e.printStackTrace(); + }catch (Exception e) { + // e.printStackTrace(); + } + object=f.get(bean); + jsonObject.put(f.getName(),jsonObject_encode(object)); + } + } catch (IllegalArgumentException e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } catch (JSONException e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } + catch (IllegalAccessException e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } + } + try { + jsonArray.put(n, jsonObject); + } catch (JSONException e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } + } + return jsonArray; + } + /*** + * create String array data:[{"0":"str0"},{"1":"str1"}] + */ + public static String stringArray_encode(List list){ + JSONArray jsonArray=new JSONArray(); + for(int n=0;n c){ + StringBuffer sb = new StringBuffer(); + Field[] fs = c.getDeclaredFields(); + for (int i = 0; i < fs.length; i++) { + String s=""; + Field fd=fs[i]; + try { + fd.setAccessible(true); + s = fd.getName()+"="+fd.get(Object); + } catch (IllegalAccessException e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } catch (IllegalArgumentException e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } + sb.append(s).append(";"); + } + sb.append("\n"); + return sb.toString(); + } +} diff --git a/src/main/resources/application/applicationContext-hibernate.xml b/src/main/resources/application/applicationContext-hibernate.xml new file mode 100644 index 0000000..b2a969c --- /dev/null +++ b/src/main/resources/application/applicationContext-hibernate.xml @@ -0,0 +1,88 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + com.zhongdao.jlr.pojo + + + + + + org.hibernate.dialect.OracleDialect + + + update + true + true + thread + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/main/resources/business/applicationContext-customer.xml b/src/main/resources/business/applicationContext-customer.xml new file mode 100644 index 0000000..34f7a9d --- /dev/null +++ b/src/main/resources/business/applicationContext-customer.xml @@ -0,0 +1,22 @@ + + + + + + + + + + + + + + + diff --git a/src/main/resources/business/applicationContext-zengwp.xml b/src/main/resources/business/applicationContext-zengwp.xml new file mode 100644 index 0000000..e3b36fd --- /dev/null +++ b/src/main/resources/business/applicationContext-zengwp.xml @@ -0,0 +1,28 @@ + + + + + + + + + + + + + + + + + + + + + diff --git a/src/main/resources/eache/applicationContext-eache.xml b/src/main/resources/eache/applicationContext-eache.xml new file mode 100644 index 0000000..e2452f2 --- /dev/null +++ b/src/main/resources/eache/applicationContext-eache.xml @@ -0,0 +1,41 @@ + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/main/resources/files/Conditions.xlsx b/src/main/resources/files/Conditions.xlsx new file mode 100644 index 0000000000000000000000000000000000000000..74bf11f409223167d6b90c18669b180314b14957 GIT binary patch literal 15296 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 C_=iaV literal 0 HcmV?d00001 diff --git a/src/main/webapp/404.html b/src/main/webapp/404.html new file mode 100644 index 0000000..f19b821 --- /dev/null +++ b/src/main/webapp/404.html @@ -0,0 +1,18 @@ + + + + +错误404 + + + + +
+
+ + + \ No newline at end of file diff --git a/src/main/webapp/500.html b/src/main/webapp/500.html new file mode 100644 index 0000000..cb5914f --- /dev/null +++ b/src/main/webapp/500.html @@ -0,0 +1,18 @@ + + + + +错误500 + + + + +
+
+ + + \ No newline at end of file diff --git a/src/main/webapp/META-INF/MANIFEST.MF b/src/main/webapp/META-INF/MANIFEST.MF new file mode 100644 index 0000000..254272e --- /dev/null +++ b/src/main/webapp/META-INF/MANIFEST.MF @@ -0,0 +1,3 @@ +Manifest-Version: 1.0 +Class-Path: + diff --git a/src/main/webapp/WEB-INF/mvc-dispatcher-servlet.xml b/src/main/webapp/WEB-INF/mvc-dispatcher-servlet.xml new file mode 100644 index 0000000..c36f298 --- /dev/null +++ b/src/main/webapp/WEB-INF/mvc-dispatcher-servlet.xml @@ -0,0 +1,73 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/html;charset=UTF-8 + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/main/webapp/WEB-INF/web.xml b/src/main/webapp/WEB-INF/web.xml new file mode 100644 index 0000000..7ef7c97 --- /dev/null +++ b/src/main/webapp/WEB-INF/web.xml @@ -0,0 +1,133 @@ + + + + login.jsp + + + contextConfigLocation + classpath*:application/applicationContext-hibernate.xml + + + + org.springframework.web.context.ContextLoaderListener + + + springMVC + org.springframework.web.servlet.DispatcherServlet + + contextConfigLocation + /WEB-INF/mvc-dispatcher-servlet.xml + + 1 + + + springMVC + *.do + + + encodingFilter + org.springframework.web.filter.CharacterEncodingFilter + + encoding + UTF-8 + + + forceEncoding + true + + + + encodingFilter + /* + + + ImageServlet + com.util.yzcode.BuilderCode + + + ImageServlet + /servlet/ImageServlet + + + check + com.util.Check + + + check + /page/* + + + openSession + org.springframework.orm.hibernate4.support.OpenSessionInViewFilter + + + openSession + /* + + + quartzexec + com.quartz.queryservlet + 1 + + + DruidWebStatFilter + com.alibaba.druid.support.http.WebStatFilter + + exclusions + *.js,*.gif,*.jpg,*.png,*.css,*.ico,*.jsp,/druid/*,/download/* + + + sessionStatMaxCount + 2000 + + + sessionStatEnable + true + + + principalSessionName + session_user_key + + + profileEnable + true + + + + DruidWebStatFilter + /* + + + DruidStatView + com.alibaba.druid.support.http.StatViewServlet + + resetEnable + true + + + + DruidStatView + /druid/* + + + + XssSqlFilter + com.zhongdao.jlr.customer.xss.XssFilter + + + XssSqlFilter + /* + REQUEST + + + + org.springframework.web.context.ContextLoaderListener + + + + com.zhongdao.jlr.business.listener.AutoRunServlet + + \ No newline at end of file diff --git a/src/main/webapp/css/addDialog.css b/src/main/webapp/css/addDialog.css new file mode 100644 index 0000000..a77a55b --- /dev/null +++ b/src/main/webapp/css/addDialog.css @@ -0,0 +1,97 @@ + +.dialog_default { + width: 1300px; + margin: 50px auto auto; +} +.dialog_default2 { + width: 800px; + margin: 50px auto auto; +} +.dialog_con { + width: 100%; + padding: 0; + float:left; +} +.dialog_left { + width:46%; + float:left; + padding-top: 15px; + padding-bottom: 40px; + margin-left: 1%; +} + +.dialog_left table td { + padding-bottom: 10px; + padding-right:0; +} +.dialog_left table td span { + width:95px; + text-align:left; + display: block; + float: left; + line-height:32px; +} +/* .dialog_left table td span.concat { + width:95px; + text-align:left; + display: block; + float: left; + line-height:32px; +} */ + +.dialog_left table td input[type="text"] { + width: 176px; + height: 32px; + line-height: 32px; + border-radius: 3px; + border: 1px solid #d2d2d2; + text-indent: 0.5em; + +} +.dialog_left table td select{ + width: 170px; + height: 35px; + line-height: 35px; + border-radius: 3px; + border: 1px solid #d2d2d2; + text-indent: 0.5em; +} +.confirm_cancel a,.confirm_cancel input { + width: 140px; + height: 40px; + border-radius: 5px; + text-align: center; + line-height: 40px; + display: block; + float: left; +} +.addressBtn { + width: 120px; + height: 36px; + border-radius: 5px; + text-align: center; + line-height: 35px; + display: block; + float: right; + background: #AF1E18; + color: #ffffff; + border: 1px solid #AF1E18; +} +#address { + /* width:445px !important; */ +} +.dialog_right { + width: 53%; + float: left; +} +.dialog_title { + width: 100%; + height: 53px; + line-height: 45px; + background: url(../images/top_bg.png) no-repeat; + background-size: cover; + text-indent:4.5em; + color: #d1d2d4; + background-color: #FFFFFF; + padding-left:0; +} \ No newline at end of file diff --git a/src/main/webapp/css/demo.css b/src/main/webapp/css/demo.css new file mode 100644 index 0000000..5c01467 --- /dev/null +++ b/src/main/webapp/css/demo.css @@ -0,0 +1,21 @@ +*{ + font-size:12px; +} +body { + font-family:verdana,helvetica,arial,sans-serif; + padding:20px; + font-size:12px; + margin:0; +} +h2 { + font-size:18px; + font-weight:bold; + margin:0; + margin-bottom:15px; +} +.demo-info{ + padding:0 0 12px 0; +} +.demo-tip{ + display:none; +} diff --git a/src/main/webapp/css/dialog.css b/src/main/webapp/css/dialog.css new file mode 100644 index 0000000..bc82809 --- /dev/null +++ b/src/main/webapp/css/dialog.css @@ -0,0 +1,217 @@ +/* 弹框样式开始 */ + .order_undo { + position: fixed; + top: 0; + bottom: 0; + left: 0; + right: 0; + background-color: rgba(0,0,0,0.5); + overflow-y: auto; + } + .dialog_default { + width: 800px; + margin: 30px auto auto; + } + .dialog_title { + width: 95%; + height: 53px; + line-height: 45px; + background: url(../images/top_bg.png) no-repeat; + background-color: #FFFFFF; + -ms-background-color:#000000; + background-size: cover; + padding-left: 5%; + color: #d1d2d4; + + } + .dialog_con { + width: 90%; + padding: 0 5% 30px; + background: #f4f4f4; + color: #555; + box-sizing:content-box; + } + .result_input { + width: 100%; + height: 40px; + line-height: 40px; + } + .line { + background: #3b3a3f; + width: 5px; + display: block; + height: 18px; + vertical-align: middle; + margin-right: 10px; + border-radius: 5px; + float: left; + margin-top: 11px; + } + .money_con { + width: 99%; + height: 40px; + border: 1px solid #ccc; + text-indent: 1em; + } + .confirm_cancel { + width: 96%; + margin-top: 20px; + margin-right: 4%; + height:42px; + } + .confirm_cancel a { + width: 140px; + height: 40px; + border-radius: 5px; + text-align: center; + line-height: 40px; + display: block; + float: right; + } + .btn2 { + background: #036EB7; + color: #ffffff; + border: 1px solid #036EB7; + } + .btn2:hover { + color: #ffffff; + } + .btn1 { + border: 1px dashed #036EB7; + color: #036EB7; + margin-right: 30px; + } + .btn1:hover { + color: #036EB7; + } + .check { + color:black; + width:150px; + height:42.5px; + display:block; + float:left; + line-height: 42.5px; + text-align: center; + } + .activeCheck { + width: 150px; + height: 42.5px; + /* background: url(../images/activeCheck.png) no-repeat; */ + background-size: cover; + display: block; + float: left; + line-height: 42.5px; + text-align: center; + color: black; + } + .datagrid-toolbar { + height:0 !important; + border:0 !important; + } + /* #datatable2 { + height:500px; + } */ + .activeCheck span { + color: black; + border-bottom: 3px solid black; + line-height: 39px; + height: 39px; + display: inline-block; + width: 90px; + } + .check span { + color: #cccccc; + border-bottom: 3px solid #FFFFFF; + line-height: 39px; + height: 39px; + display: inline-block; + width: 90px; + } + + .dialog_left2 { + width: 90%; + padding: 15px 5% 40px; + margin: 0; +} +.dialog_left2 table td { + padding-bottom: 10px; + padding-right: 20px; + width: 50%; +} +.dialog_left2 table td input[type="text"] { + width: 215px; + height: 32px; + line-height: 32px; + border-radius: 3px; + border: 1px solid #d2d2d2; + text-indent: 0.5em; +} +.dialog_left2 table td span { + width:95px; + text-align:left; + display: block; + float: left; + line-height:32px; +} +.order_undo1 { + position: fixed; + top: 0; + bottom: 0; + left: 0; + right: 0; + background-color: rgba(0,0,0,0.5); + overflow-y: auto; +} +/* .dialog_default { + width:800px !important; + } */ + .dialog_left2 { + width: 90%; + padding: 15px 5% 40px; + margin: 0; + } + .dialog_left2 table { + width: 100%; + } + .dialog_left2 table td { + padding-bottom: 10px; + padding-right: 20px; + width: 50%; + } + .dialog_left2 table td input[type="text"] { + width: 215px; + } + .dialog_left2 table td .contactWrap { + float: left; + width: 28%; + } + .dialog_left2 table td .contactWrap .contactInput{ + width: 183px; + } + #address { + /* width: 260px !important; */ + } + .dialog_left2 table td input[type="password"] { + width: 215px; + height: 32px; + line-height: 32px; + border-radius: 3px; + border: 1px solid #d2d2d2; + text-indent: 0.5em; + } + .dialog_left2 table td input[type="email"] { + width: 215px; + height: 32px; + line-height: 32px; + border-radius: 3px; + border: 1px solid #d2d2d2; + text-indent: 0.5em; + } + .dialog_con2 { + width:100%; + background: #f4f4f4; + color: #555; + box-sizing: content-box; + } + + /* 弹框样式结束 */ \ No newline at end of file diff --git a/src/main/webapp/css/home.css b/src/main/webapp/css/home.css new file mode 100644 index 0000000..132633d --- /dev/null +++ b/src/main/webapp/css/home.css @@ -0,0 +1,756 @@ +/* ::::: http://jaguar.ag1199.cn/Content/css?v=n0bC9-Ppon4UEjl8e4gVasERUOvYia2Rzl_1UdL29VY1 ::::: */ + +html { font-family: sans-serif; } +body { margin: 0pt; } +audio:not([controls]) { display: none; height: 0pt; } +a { background: none repeat scroll 0pt 0pt transparent; } +a:active, a:hover { outline: 0pt none; cursor: pointer;} +b, strong { font-weight: 700; } +h1 { margin: 0.67em 0pt; font-size: 2em; } +img { border: 0pt none; } +svg:not(:root) { overflow: hidden; } +pre { overflow: auto; } +code, kbd, pre, samp { font-family: monospace,monospace; font-size: 1em; } +button, input, optgroup, select, textarea { margin: 0pt; font: inherit; color: inherit; } +button { overflow: visible; } +button, select { text-transform: none; } +button, html input[type="button"], input[type="reset"], input[type="submit"] { cursor: pointer; } +button::-moz-focus-inner, input::-moz-focus-inner { padding: 0pt; border: 0pt none; } +input { line-height: normal; } +table { border-spacing: 0pt; border-collapse: collapse;} +td, th { padding: 0pt; } +.text-center {text-align: center;} +.t-button,.btn-xs, .btn-group-xs>.btn {margin-right:2px;} +@media print { + * { color: rgb(0, 0, 0) ! important; text-shadow: none ! important; background: none repeat scroll 0% 0% transparent ! important; } + a, a:visited { text-decoration: underline; } + a[href]:after { content: " (" attr(href) ")"; } + abbr[title]:after { content: " (" attr(title) ")"; } + a[href^="javascript:"]:after, a[href^="#"]:after { content: ""; } + pre, blockquote { border: 1px solid rgb(153, 153, 153); page-break-inside: avoid; } + thead { display: table-header-group; } + tr, img { page-break-inside: avoid; } + img { max-width: 100% ! important; } + p, h2, h3 { orphans: 3; widows: 3; } + h2, h3 { page-break-after: avoid; } + select { background: none repeat scroll 0% 0% rgb(255, 255, 255) ! important; } + .navbar { display: none; } + .table td, .table th { background-color: rgb(255, 255, 255) ! important; } + .btn > .caret, .dropup > .btn > .caret { border-top-color: rgb(0, 0, 0) ! important; } + .label { border: 1px solid rgb(0, 0, 0); } + .table { border-collapse: collapse ! important; } + .table-bordered th, .table-bordered td { border: 1px solid rgb(221, 221, 221) ! important; } +} +@font-face { + font-family: "Glyphicons Halflings"; src: url('glyphicons-halflings-regular.eot') format("embedded-opentype"), url('fonts/glyphicons-halflings-regular.woff') format("woff"), url('glyphicons-halflings-regular.ttf') format("truetype"), url('glyphicons-halflings-regular.svg') format("svg");} +* { -moz-box-sizing: content-box; } +*:before, *:after { -moz-box-sizing: border-box; } +html { font-size: 10px; } +body { font-family: "Helvetica Neue",Helvetica,Arial,sans-serif; font-size: 14px; line-height: 1.42857; color: rgb(51, 51, 51); } + +a {/* color: rgb(66, 139, 202); */ text-decoration: none; } +/* a:hover, a:focus { color: rgb(42, 100, 150); text-decoration: underline; } */ +a:focus { outline: none; /* outline-offset: -2px; */ } +img { vertical-align: middle; } +h1, h2, h3, h4, h5, h6, .h1, .h2, .h3, .h4, .h5, .h6 { font-family: inherit; font-weight: 500; line-height: 1.1; color: inherit; } +h1, .h1, h2, .h2, h3, .h3 { margin-top: 20px; margin-bottom: 10px; } +h1, .h1 { font-size: 36px; } +h2, .h2 { font-size: 30px; } +h4, .h4 { + font-size: 18px; +} +@media (min-width: 768px) { + .lead { font-size: 21px; } +} +ul, ol { margin-top: 0pt; margin-bottom: 10px; } +ul ul, ol ul, ul ol, ol ol { margin-bottom: 0pt; } +@media (min-width: 768px) { + .dl-horizontal dt { float: left; width: 160px; overflow: hidden; clear: left; text-align: right; white-space: nowrap; } + .dl-horizontal dd { margin-left: 180px; } +} +code, kbd, pre, samp { font-family: Menlo,Monaco,Consolas,"Courier New",monospace; } +pre { display: block; padding: 9.5px; margin: 0pt 0pt 10px; font-size: 13px; line-height: 1.42857; color: rgb(51, 51, 51); word-wrap: break-word; background-color: rgb(245, 245, 245); border: 1px solid rgb(204, 204, 204); } +@media (min-width: 768px) { + .container { width: 750px; } +} +@media (min-width: 992px) { + .container { width: 970px; } +} +@media (min-width: 1200px) { + .container { width: 1170px; } +} +@media (min-width: 768px) { + .col-sm-1, .col-sm-2, .col-sm-3, .col-sm-4, .col-sm-5, .col-sm-6, .col-sm-7, .col-sm-8, .col-sm-9, .col-sm-10, .col-sm-11, .col-sm-12 { float: left; } + .col-sm-12 { width: 100%; } + .col-sm-11 { width: 91.6667%; } + .col-sm-10 { width: 83.3333%; } + .col-sm-9 { width: 75%; } + .col-sm-8 { width: 66.6667%; } + .col-sm-7 { width: 58.3333%; } + .col-sm-6 { width: 50%; } + .col-sm-5 { width: 41.6667%; } + .col-sm-4 { width: 33.3333%; } + .col-sm-3 { width: 25%; } + .col-sm-2 { width: 16.6667%; } + .col-sm-1 { width: 8.33333%; } + .col-sm-pull-12 { right: 100%; } + .col-sm-pull-11 { right: 91.6667%; } + .col-sm-pull-10 { right: 83.3333%; } + .col-sm-pull-9 { right: 75%; } + .col-sm-pull-8 { right: 66.6667%; } + .col-sm-pull-7 { right: 58.3333%; } + .col-sm-pull-6 { right: 50%; } + .col-sm-pull-5 { right: 41.6667%; } + .col-sm-pull-4 { right: 33.3333%; } + .col-sm-pull-3 { right: 25%; } + .col-sm-pull-2 { right: 16.6667%; } + .col-sm-pull-1 { right: 8.33333%; } + .col-sm-pull-0 { right: auto; } + .col-sm-push-12 { left: 100%; } + .col-sm-push-11 { left: 91.6667%; } + .col-sm-push-10 { left: 83.3333%; } + .col-sm-push-9 { left: 75%; } + .col-sm-push-8 { left: 66.6667%; } + .col-sm-push-7 { left: 58.3333%; } + .col-sm-push-6 { left: 50%; } + .col-sm-push-5 { left: 41.6667%; } + .col-sm-push-4 { left: 33.3333%; } + .col-sm-push-3 { left: 25%; } + .col-sm-push-2 { left: 16.6667%; } + .col-sm-push-1 { left: 8.33333%; } + .col-sm-push-0 { left: auto; } + .col-sm-offset-12 { margin-left: 100%; } + .col-sm-offset-11 { margin-left: 91.6667%; } + .col-sm-offset-10 { margin-left: 83.3333%; } + .col-sm-offset-9 { margin-left: 75%; } + .col-sm-offset-8 { margin-left: 66.6667%; } + .col-sm-offset-7 { margin-left: 58.3333%; } + .col-sm-offset-6 { margin-left: 50%; } + .col-sm-offset-5 { margin-left: 41.6667%; } + .col-sm-offset-4 { margin-left: 33.3333%; } + .col-sm-offset-3 { margin-left: 25%; } + .col-sm-offset-2 { margin-left: 16.6667%; } + .col-sm-offset-1 { margin-left: 8.33333%; } + .col-sm-offset-0 { margin-left: 0pt; } +} +@media (min-width: 992px) { + .col-md-1, .col-md-2, .col-md-3, .col-md-4, .col-md-5, .col-md-6, .col-md-7, .col-md-8, .col-md-9, .col-md-10, .col-md-11, .col-md-12 { float: left; } + .col-md-12 { width: 100%; } + .col-md-11 { width: 91.6667%; } + .col-md-10 { width: 83.3333%; } + .col-md-9 { width: 75%; } + .col-md-8 { width: 66.6667%; } + .col-md-7 { width: 58.3333%; } + .col-md-6 { width: 50%; } + .col-md-5 { width: 41.6667%; } + .col-md-4 { width: 33.3333%; } + .col-md-3 { width: 25%; } + .col-md-2 { width: 16.6667%; } + .col-md-1 { width: 8.33333%; } + .col-md-pull-12 { right: 100%; } + .col-md-pull-11 { right: 91.6667%; } + .col-md-pull-10 { right: 83.3333%; } + .col-md-pull-9 { right: 75%; } + .col-md-pull-8 { right: 66.6667%; } + .col-md-pull-7 { right: 58.3333%; } + .col-md-pull-6 { right: 50%; } + .col-md-pull-5 { right: 41.6667%; } + .col-md-pull-4 { right: 33.3333%; } + .col-md-pull-3 { right: 25%; } + .col-md-pull-2 { right: 16.6667%; } + .col-md-pull-1 { right: 8.33333%; } + .col-md-pull-0 { right: auto; } + .col-md-push-12 { left: 100%; } + .col-md-push-11 { left: 91.6667%; } + .col-md-push-10 { left: 83.3333%; } + .col-md-push-9 { left: 75%; } + .col-md-push-8 { left: 66.6667%; } + .col-md-push-7 { left: 58.3333%; } + .col-md-push-6 { left: 50%; } + .col-md-push-5 { left: 41.6667%; } + .col-md-push-4 { left: 33.3333%; } + .col-md-push-3 { left: 25%; } + .col-md-push-2 { left: 16.6667%; } + .col-md-push-1 { left: 8.33333%; } + .col-md-push-0 { left: auto; } + .col-md-offset-12 { margin-left: 100%; } + .col-md-offset-11 { margin-left: 91.6667%; } + .col-md-offset-10 { margin-left: 83.3333%; } + .col-md-offset-9 { margin-left: 75%; } + .col-md-offset-8 { margin-left: 66.6667%; } + .col-md-offset-7 { margin-left: 58.3333%; } + .col-md-offset-6 { margin-left: 50%; } + .col-md-offset-5 { margin-left: 41.6667%; } + .col-md-offset-4 { margin-left: 33.3333%; } + .col-md-offset-3 { margin-left: 25%; } + .col-md-offset-2 { margin-left: 16.6667%; } + .col-md-offset-1 { margin-left: 8.33333%; } + .col-md-offset-0 { margin-left: 0pt; } +} +@media (min-width: 1200px) { + .col-lg-1, .col-lg-2, .col-lg-3, .col-lg-4, .col-lg-5, .col-lg-6, .col-lg-7, .col-lg-8, .col-lg-9, .col-lg-10, .col-lg-11, .col-lg-12 { float: left; } + .col-lg-12 { width: 100%; } + .col-lg-11 { width: 91.6667%; } + .col-lg-10 { width: 83.3333%; } + .col-lg-9 { width: 75%; } + .col-lg-8 { width: 66.6667%; } + .col-lg-7 { width: 58.3333%; } + .col-lg-6 { width: 50%; } + .col-lg-5 { width: 41.6667%; } + .col-lg-4 { width: 33.3333%; } + .col-lg-3 { width: 25%; } + .col-lg-2 { width: 16.6667%; } + .col-lg-1 { width: 8.33333%; } + .col-lg-pull-12 { right: 100%; } + .col-lg-pull-11 { right: 91.6667%; } + .col-lg-pull-10 { right: 83.3333%; } + .col-lg-pull-9 { right: 75%; } + .col-lg-pull-8 { right: 66.6667%; } + .col-lg-pull-7 { right: 58.3333%; } + .col-lg-pull-6 { right: 50%; } + .col-lg-pull-5 { right: 41.6667%; } + .col-lg-pull-4 { right: 33.3333%; } + .col-lg-pull-3 { right: 25%; } + .col-lg-pull-2 { right: 16.6667%; } + .col-lg-pull-1 { right: 8.33333%; } + .col-lg-pull-0 { right: auto; } + .col-lg-push-12 { left: 100%; } + .col-lg-push-11 { left: 91.6667%; } + .col-lg-push-10 { left: 83.3333%; } + .col-lg-push-9 { left: 75%; } + .col-lg-push-8 { left: 66.6667%; } + .col-lg-push-7 { left: 58.3333%; } + .col-lg-push-6 { left: 50%; } + .col-lg-push-5 { left: 41.6667%; } + .col-lg-push-4 { left: 33.3333%; } + .col-lg-push-3 { left: 25%; } + .col-lg-push-2 { left: 16.6667%; } + .col-lg-push-1 { left: 8.33333%; } + .col-lg-push-0 { left: auto; } + .col-lg-offset-12 { margin-left: 100%; } + .col-lg-offset-11 { margin-left: 91.6667%; } + .col-lg-offset-10 { margin-left: 83.3333%; } + .col-lg-offset-9 { margin-left: 75%; } + .col-lg-offset-8 { margin-left: 66.6667%; } + .col-lg-offset-7 { margin-left: 58.3333%; } + .col-lg-offset-6 { margin-left: 50%; } + .col-lg-offset-5 { margin-left: 41.6667%; } + .col-lg-offset-4 { margin-left: 33.3333%; } + .col-lg-offset-3 { margin-left: 25%; } + .col-lg-offset-2 { margin-left: 16.6667%; } + .col-lg-offset-1 { margin-left: 8.33333%; } + .col-lg-offset-0 { margin-left: 0pt; } +} +table { background-color: transparent; } +th { text-align: left; } +.table { width: 100%; max-width: 100%; margin-bottom: 20px; } +.table > thead > tr > th, .table > tbody > tr > th, .table > tfoot > tr > th, .table > thead > tr > td, .table > tbody > tr > td, .table > tfoot > tr > td { /* padding: 8px; */line-height: 1.42857; vertical-align: top; border-top: 1px solid rgb(221, 221, 221); } +.table-condensed > thead > tr > th, .table-condensed > tbody > tr > th, .table-condensed > tfoot > tr > th, .table-condensed > thead > tr > td, .table-condensed > tbody > tr > td, .table-condensed > tfoot > tr > td { padding: 5px; } +.table-bordered { border: 1px solid rgb(221, 221, 221); } +.table-bordered > thead > tr > th, .table-bordered > tbody > tr > th, .table-bordered > tfoot > tr > th, .table-bordered > thead > tr > td, .table-bordered > tbody > tr > td, .table-bordered > tfoot > tr > td { border: 1px solid rgb(221, 221, 221); } +.table-striped > tbody > tr:nth-child(2n+0) > td, .table-striped > tbody > tr:nth-child(2n+0) > th { background-color: rgb(249, 249, 249); } +.table-hover > tbody > tr:hover > td, .table-hover > tbody > tr:hover > th { background-color: rgb(245, 245, 245); } +@media screen and (max-width: 767px) { + .table-responsive { width: 100%; margin-bottom: 15px; overflow-x: auto; overflow-y: hidden; border: 1px solid rgb(221, 221, 221); } + .table-responsive > .table { margin-bottom: 0pt; } + .table-responsive > .table > thead > tr > th, .table-responsive > .table > tbody > tr > th, .table-responsive > .table > tfoot > tr > th, .table-responsive > .table > thead > tr > td, .table-responsive > .table > tbody > tr > td, .table-responsive > .table > tfoot > tr > td { white-space: nowrap; } + .table-responsive > .table-bordered { border: 0pt none; } + .table-responsive > .table-bordered > thead > tr > th:first-child, .table-responsive > .table-bordered > tbody > tr > th:first-child, .table-responsive > .table-bordered > tfoot > tr > th:first-child, .table-responsive > .table-bordered > thead > tr > td:first-child, .table-responsive > .table-bordered > tbody > tr > td:first-child, .table-responsive > .table-bordered > tfoot > tr > td:first-child { border-left: 0pt none; } + .table-responsive > .table-bordered > thead > tr > th:last-child, .table-responsive > .table-bordered > tbody > tr > th:last-child, .table-responsive > .table-bordered > tfoot > tr > th:last-child, .table-responsive > .table-bordered > thead > tr > td:last-child, .table-responsive > .table-bordered > tbody > tr > td:last-child, .table-responsive > .table-bordered > tfoot > tr > td:last-child { border-right: 0pt none; } + .table-responsive > .table-bordered > tbody > tr:last-child > th, .table-responsive > .table-bordered > tfoot > tr:last-child > th, .table-responsive > .table-bordered > tbody > tr:last-child > td, .table-responsive > .table-bordered > tfoot > tr:last-child > td { border-bottom: 0pt none; } +} + + .table > tbody > tr > th{ + width:10%; + /* padding: 10px; */ + border-top:0; + line-height:32px; +} + .table > tbody > tr > td { + width:40%; + /* padding: 10px; */ + border-top:0; +} +label { display: inline-block; max-width: 100%; margin-bottom: 5px; font-weight: 700; } +@media (min-width: 768px) { + .form-inline .form-group { display: inline-block; margin-bottom: 0pt; vertical-align: middle; } + .form-inline .form-control { display: inline-block; width: auto; vertical-align: middle; } + .form-inline .input-group { display: inline-table; vertical-align: middle; } + .form-inline .input-group .input-group-addon, .form-inline .input-group .input-group-btn, .form-inline .input-group .form-control { width: auto; } + .form-inline .input-group > .form-control { width: 100%; } + .form-inline .control-label { margin-bottom: 0pt; vertical-align: middle; } + .form-inline .radio, .form-inline .checkbox { display: inline-block; margin-top: 0pt; margin-bottom: 0pt; vertical-align: middle; } + .form-inline .radio label, .form-inline .checkbox label { padding-left: 0pt; } + .form-inline .radio input[type="radio"], .form-inline .checkbox input[type="checkbox"] { position: relative; margin-left: 0pt; } + .form-inline .has-feedback .form-control-feedback { top: 0pt; } +} +@media (min-width: 768px) { + .form-horizontal .control-label { padding-top: 7px; margin-bottom: 0pt; text-align: right; } +} +@media (min-width: 768px) { + .form-horizontal .form-group-lg .control-label { padding-top: 14.3px; } +} +@media (min-width: 768px) { + .form-horizontal .form-group-sm .control-label { padding-top: 6px; } +} +.btn { display: inline-block; padding: 6px 12px; margin-bottom: 0pt; font-size: 14px; font-weight: 400; line-height: 1.42857; text-align: center; white-space: nowrap; vertical-align: middle; cursor: pointer; -moz-user-select: none; background-image: none; border: 1px solid transparent; } +.btn:focus, .btn:active:focus, .btn.active:focus { outline: thin dotted; outline-offset: -2px; } +.btn:hover, .btn:focus { color: rgb(51, 51, 51); text-decoration: none; } +.btn:active, .btn.active { background-image: none; outline: 0pt none; } +.btn-link { font-weight: 400; color: rgb(66, 139, 202); cursor: pointer; } +.btn-link, .btn-link:active, .btn-link[disabled], fieldset[disabled] .btn-link { background-color: transparent; } +.btn-link, .btn-link:hover, .btn-link:focus, .btn-link:active { border-color: transparent; } +.btn-link:hover, .btn-link:focus { color: rgb(42, 100, 150); text-decoration: underline; background-color: transparent; } +.btn-xs, .btn-group-xs > .btn { padding: 1px 5px; font-size: 12px; line-height: 1.5; } +@media (min-width: 768px) { + .navbar-right .dropdown-menu { right: 0pt; left: auto; } + .navbar-right .dropdown-menu-left { right: auto; left: 0pt; } +} +.btn-group > .btn:not(:first-child):not(:last-child):not(.dropdown-toggle) { } +.btn-group > .btn:first-child:not(:last-child):not(.dropdown-toggle) { } +.btn-group > .btn:last-child:not(:first-child), .btn-group > .dropdown-toggle:not(:first-child) { } +.btn-group > .btn-group:not(:first-child):not(:last-child) > .btn { } +.btn-group-vertical > .btn:not(:first-child):not(:last-child) { } +.btn-group-vertical > .btn:first-child:not(:last-child) { } +.btn-group-vertical > .btn:last-child:not(:first-child) { } +.btn-group-vertical > .btn-group:not(:first-child):not(:last-child) > .btn { } +.btn-group-vertical > .btn-group:first-child:not(:last-child) > .btn:last-child, .btn-group-vertical > .btn-group:first-child:not(:last-child) > .dropdown-toggle { } +.btn-group-vertical > .btn-group:last-child:not(:first-child) > .btn:first-child { } +.input-group-addon:not(:first-child):not(:last-child), .input-group-btn:not(:first-child):not(:last-child), .input-group .form-control:not(:first-child):not(:last-child) { } +.input-group .form-control:first-child, .input-group-addon:first-child, .input-group-btn:first-child > .btn, .input-group-btn:first-child > .btn-group > .btn, .input-group-btn:first-child > .dropdown-toggle, .input-group-btn:last-child > .btn:not(:last-child):not(.dropdown-toggle), .input-group-btn:last-child > .btn-group:not(:last-child) > .btn { } +.input-group .form-control:last-child, .input-group-addon:last-child, .input-group-btn:last-child > .btn, .input-group-btn:last-child > .btn-group > .btn, .input-group-btn:last-child > .dropdown-toggle, .input-group-btn:first-child > .btn:not(:first-child), .input-group-btn:first-child > .btn-group:not(:first-child) > .btn { } +@media (min-width: 768px) { + .nav-tabs.nav-justified > li { display: table-cell; width: 1%; } + .nav-tabs.nav-justified > li > a { margin-bottom: 0pt; } +} +@media (min-width: 768px) { + .nav-tabs.nav-justified > li > a { border-bottom: 1px solid rgb(221, 221, 221); } + .nav-tabs.nav-justified > .active > a, .nav-tabs.nav-justified > .active > a:hover, .nav-tabs.nav-justified > .active > a:focus { border-bottom-color: rgb(255, 255, 255); } +} +@media (min-width: 768px) { + .nav-justified > li { display: table-cell; width: 1%; } + .nav-justified > li > a { margin-bottom: 0pt; } +} +@media (min-width: 768px) { + .nav-tabs-justified > li > a { border-bottom: 1px solid rgb(221, 221, 221); } + .nav-tabs-justified > .active > a, .nav-tabs-justified > .active > a:hover, .nav-tabs-justified > .active > a:focus { border-bottom-color: rgb(255, 255, 255); } +} +@media (min-width: 768px) { + .navbar { } +} +@media (min-width: 768px) { + .navbar-header { float: left; } +} +@media (min-width: 768px) { + .navbar-collapse { width: auto; border-top: 0pt none; } + .navbar-collapse.collapse { display: block ! important; height: auto ! important; padding-bottom: 0pt; overflow: visible ! important; } + .navbar-collapse.in { overflow-y: visible; } + .navbar-fixed-top .navbar-collapse, .navbar-static-top .navbar-collapse, .navbar-fixed-bottom .navbar-collapse { padding-right: 0pt; padding-left: 0pt; } +} +@media (max-width: 480px) and (orientation: landscape) { + .navbar-fixed-top .navbar-collapse, .navbar-fixed-bottom .navbar-collapse { max-height: 200px; } +} +@media (min-width: 768px) { + .container > .navbar-header, .container-fluid > .navbar-header, .container > .navbar-collapse, .container-fluid > .navbar-collapse { margin-right: 0pt; margin-left: 0pt; } +} +@media (min-width: 768px) { + .navbar-static-top { } +} +@media (min-width: 768px) { + .navbar-fixed-top, .navbar-fixed-bottom { } +} +@media (min-width: 768px) { + .navbar > .container .navbar-brand, .navbar > .container-fluid .navbar-brand { margin-left: -15px; } +} +@media (min-width: 768px) { + .navbar-toggle { display: none; } +} +@media (max-width: 767px) { + .navbar-nav .open .dropdown-menu { position: static; float: none; width: auto; margin-top: 0pt; background-color: transparent; border: 0pt none; } + .navbar-nav .open .dropdown-menu > li > a, .navbar-nav .open .dropdown-menu .dropdown-header { padding: 5px 15px 5px 25px; } + .navbar-nav .open .dropdown-menu > li > a { line-height: 20px; } + .navbar-nav .open .dropdown-menu > li > a:hover, .navbar-nav .open .dropdown-menu > li > a:focus { background-image: none; } +} +@media (min-width: 768px) { + .navbar-nav { float: left; margin: 0pt; } + .navbar-nav > li { float: left; } + .navbar-nav > li > a { padding-top: 15px; padding-bottom: 15px; } + .navbar-nav.navbar-right:last-child { margin-right: -15px; } +} +@media (min-width: 768px) { + .navbar-left { float: left ! important; } + .navbar-right { float: right ! important; } +} +@media (min-width: 768px) { + .navbar-form .form-group { display: inline-block; margin-bottom: 0pt; vertical-align: middle; } + .navbar-form .form-control { display: inline-block; width: auto; vertical-align: middle; } + .navbar-form .input-group { display: inline-table; vertical-align: middle; } + .navbar-form .input-group .input-group-addon, .navbar-form .input-group .input-group-btn, .navbar-form .input-group .form-control { width: auto; } + .navbar-form .input-group > .form-control { width: 100%; } + .navbar-form .control-label { margin-bottom: 0pt; vertical-align: middle; } + .navbar-form .radio, .navbar-form .checkbox { display: inline-block; margin-top: 0pt; margin-bottom: 0pt; vertical-align: middle; } + .navbar-form .radio label, .navbar-form .checkbox label { padding-left: 0pt; } + .navbar-form .radio input[type="radio"], .navbar-form .checkbox input[type="checkbox"] { position: relative; margin-left: 0pt; } + .navbar-form .has-feedback .form-control-feedback { top: 0pt; } +} +@media (max-width: 767px) { + .navbar-form .form-group { margin-bottom: 5px; } +} +@media (min-width: 768px) { + .navbar-form { width: auto; padding-top: 0pt; padding-bottom: 0pt; margin-right: 0pt; margin-left: 0pt; border: 0pt none; } + .navbar-form.navbar-right:last-child { margin-right: -15px; } +} +@media (min-width: 768px) { + .navbar-text { float: left; margin-right: 15px; margin-left: 15px; } + .navbar-text.navbar-right:last-child { margin-right: 0pt; } +} +@media (max-width: 767px) { + .navbar-default .navbar-nav .open .dropdown-menu > li > a { color: rgb(119, 119, 119); } + .navbar-default .navbar-nav .open .dropdown-menu > li > a:hover, .navbar-default .navbar-nav .open .dropdown-menu > li > a:focus { color: rgb(51, 51, 51); background-color: transparent; } + .navbar-default .navbar-nav .open .dropdown-menu > .active > a, .navbar-default .navbar-nav .open .dropdown-menu > .active > a:hover, .navbar-default .navbar-nav .open .dropdown-menu > .active > a:focus { color: rgb(85, 85, 85); background-color: rgb(231, 231, 231); } + .navbar-default .navbar-nav .open .dropdown-menu > .disabled > a, .navbar-default .navbar-nav .open .dropdown-menu > .disabled > a:hover, .navbar-default .navbar-nav .open .dropdown-menu > .disabled > a:focus { color: rgb(204, 204, 204); background-color: transparent; } +} +@media (max-width: 767px) { + .navbar-inverse .navbar-nav .open .dropdown-menu > .dropdown-header { border-color: rgb(8, 8, 8); } + .navbar-inverse .navbar-nav .open .dropdown-menu .divider { background-color: rgb(8, 8, 8); } + .navbar-inverse .navbar-nav .open .dropdown-menu > li > a { color: rgb(119, 119, 119); } + .navbar-inverse .navbar-nav .open .dropdown-menu > li > a:hover, .navbar-inverse .navbar-nav .open .dropdown-menu > li > a:focus { color: rgb(255, 255, 255); background-color: transparent; } + .navbar-inverse .navbar-nav .open .dropdown-menu > .active > a, .navbar-inverse .navbar-nav .open .dropdown-menu > .active > a:hover, .navbar-inverse .navbar-nav .open .dropdown-menu > .active > a:focus { color: rgb(255, 255, 255); background-color: rgb(8, 8, 8); } + .navbar-inverse .navbar-nav .open .dropdown-menu > .disabled > a, .navbar-inverse .navbar-nav .open .dropdown-menu > .disabled > a:hover, .navbar-inverse .navbar-nav .open .dropdown-menu > .disabled > a:focus { color: rgb(68, 68, 68); background-color: transparent; } +} +.pagination { display: inline-block; padding-left: 0pt; margin: 20px 0pt; } +.pagination > tr td { display: inline; } +.pagination > tr td > a, .pagination > tr td > span { position: relative; float: left; padding: 6px 12px; margin-left: -1px; line-height: 1.42857; color: rgb(66, 139, 202); text-decoration: none; background-color: rgb(255, 255, 255); border: 1px solid rgb(221, 221, 221); } +.pagination > tr td:first-child > a, .pagination > tr td:first-child > span { margin-left: 0pt; } +.pagination > tr td:last-child > a, .pagination > tr td:last-child > span { } +.pagination > tr td > a:hover, .pagination > tr td > span:hover, .pagination > tr td > a:focus, .pagination > tr td > span:focus { color: rgb(42, 100, 150); background-color: rgb(238, 238, 238); border-color: rgb(221, 221, 221); } +.pagination > .active > a, .pagination > .active > span, .pagination > .active > a:hover, .pagination > .active > span:hover, .pagination > .active > a:focus, .pagination > .active > span:focus { z-index: 2; color: rgb(255, 255, 255); cursor: default; background-color: rgb(66, 139, 202); border-color: rgb(66, 139, 202); } +.pagination > .disabled > span, .pagination > .disabled > span:hover, .pagination > .disabled > span:focus, .pagination > .disabled > a, .pagination > .disabled > a:hover, .pagination > .disabled > a:focus { color: rgb(119, 119, 119); cursor: not-allowed; background-color: rgb(255, 255, 255); border-color: rgb(221, 221, 221); } +.pagination-sm > tr td > a, .pagination-sm > tr td > span { padding: 5px 10px; font-size: 12px; } +.pagination-sm > tr td:first-child > a, .pagination-sm > tr td:first-child > span { } +.pagination-sm > tr td:last-child > a, .pagination-sm > tr td:last-child > span { } +@media screen and (min-width: 768px) { + .jumbotron { padding-top: 48px; padding-bottom: 48px; } + .container .jumbotron { padding-right: 60px; padding-left: 60px; } + .jumbotron h1, .jumbotron .h1 { font-size: 63px; } +} +@media (min-width: 768px) { + .modal-dialog { width: 600px; margin: 30px auto; } + .modal-content { } + .modal-sm { width: 300px; } +} +@media (min-width: 992px) { + .modal-lg { width: 900px; } +} +@media screen and (min-width: 768px) { + .carousel-control .glyphicon-chevron-left, .carousel-control .glyphicon-chevron-right, .carousel-control .icon-prev, .carousel-control .icon-next { width: 30px; height: 30px; margin-top: -15px; font-size: 30px; } + .carousel-control .glyphicon-chevron-left, .carousel-control .icon-prev { margin-left: -15px; } + .carousel-control .glyphicon-chevron-right, .carousel-control .icon-next { margin-right: -15px; } + .carousel-caption { right: 20%; left: 20%; padding-bottom: 30px; } + .carousel-indicators { bottom: 20px; } +} +@media (max-width: 767px) { + .visible-xs { display: block ! important; } + table.visible-xs { display: table; } + tr.visible-xs { display: table-row ! important; } + th.visible-xs, td.visible-xs { display: table-cell ! important; } +} +@media (max-width: 767px) { + .visible-xs-block { display: block ! important; } +} +@media (max-width: 767px) { + .visible-xs-inline { display: inline ! important; } +} +@media (max-width: 767px) { + .visible-xs-inline-block { display: inline-block ! important; } +} +@media (min-width: 768px) and (max-width: 991px) { + .visible-sm { display: block ! important; } + table.visible-sm { display: table; } + tr.visible-sm { display: table-row ! important; } + th.visible-sm, td.visible-sm { display: table-cell ! important; } +} +@media (min-width: 768px) and (max-width: 991px) { + .visible-sm-block { display: block ! important; } +} +@media (min-width: 768px) and (max-width: 991px) { + .visible-sm-inline { display: inline ! important; } +} +@media (min-width: 768px) and (max-width: 991px) { + .visible-sm-inline-block { display: inline-block ! important; } +} +@media (min-width: 992px) and (max-width: 1199px) { + .visible-md { display: block ! important; } + table.visible-md { display: table; } + tr.visible-md { display: table-row ! important; } + th.visible-md, td.visible-md { display: table-cell ! important; } +} +@media (min-width: 992px) and (max-width: 1199px) { + .visible-md-block { display: block ! important; } +} +@media (min-width: 992px) and (max-width: 1199px) { + .visible-md-inline { display: inline ! important; } +} +@media (min-width: 992px) and (max-width: 1199px) { + .visible-md-inline-block { display: inline-block ! important; } +} +@media (min-width: 1200px) { + .visible-lg { display: block ! important; } + table.visible-lg { display: table; } + tr.visible-lg { display: table-row ! important; } + th.visible-lg, td.visible-lg { display: table-cell ! important; } +} +@media (min-width: 1200px) { + .visible-lg-block { display: block ! important; } +} +@media (min-width: 1200px) { + .visible-lg-inline { display: inline ! important; } +} +@media (min-width: 1200px) { + .visible-lg-inline-block { display: inline-block ! important; } +} +@media (max-width: 767px) { + .hidden-xs { display: none ! important; } +} +@media (min-width: 768px) and (max-width: 991px) { + .hidden-sm { display: none ! important; } +} +@media (min-width: 992px) and (max-width: 1199px) { + .hidden-md { display: none ! important; } +} +@media (min-width: 1200px) { + .hidden-lg { display: none ! important; } +} +@media print { + .visible-print { display: block ! important; } + table.visible-print { display: table; } + tr.visible-print { display: table-row ! important; } + th.visible-print, td.visible-print { display: table-cell ! important; } +} +@media print { + .visible-print-block { display: block ! important; } +} +@media print { + .visible-print-inline { display: inline ! important; } +} +@media print { + .visible-print-inline-block { display: inline-block ! important; } +} +@media print { + .hidden-print { display: none ! important; } +} +@font-face { + font-family: "FontAwesome"; font-style: normal; font-weight: normal; src: url('fontawesome-webfont.eot') format("embedded-opentype"), url('fontawesome-webfont.woff') format("woff"), url('fontawesome-webfont.ttf') format("truetype"), url('fontawesome-webfont.svg') format("svg");} +.table td, .table th { font-size: 12px; } +.page { /* width: 1119px; */ height: 100%; margin: 3px auto; } +.page #header { width: 100%; height: 65px; background-image: url('../images/topbgnew.png'); background-repeat: no-repeat;background-size: cover; } +.page #header #logo { /* position: absolute; top: 24px; */ z-index: 0; float: left; width: 210px; margin-top: 35px;margin-left:60px;} +.page #header #title { float: left; width: 750px; color: rgb(255, 255, 255); height: 40px; } +.page #header #logindisplay { float: right; color: rgb(255, 255, 255); font-size: 14px; line-height: 65px; margin-right: 10px;vertical-align: middle; } +.page #header #logindisplay a { /* color: rgb(255, 255, 255); font-size: 14px; */ } +.page #header #logindisplay a.logout { + /* width:45px; */ + height:45px; + border-left:1px solid #ffffff; + display:inline-block; + vertical-align: middle; + margin-left:10px; + padding: 0 20px; + color: #ffffff; + line-height: 45px; +} +.page #header #logindisplay a.logout:hover { + color: #ffffff; +} + +.page #header #logindisplay a img.logoutIcon { + /* width:13px; + height:13px; */ + /* background-image: url('../images/powerIcon.png'); */ + margin-left: 10px; + margin-bottom: 22px; +} + +.page #header #logindisplay a:hover { color: blue; } +.page #menucontainer { /* float: left; *//* margin-top: 10px; */ width: 100%; height: 37px; /* border-bottom: 3px solid rgb(178, 171, 171); */ } +.page #menucontainer .menuContent { position: relative; } +.footer { + width: 100%; + height: 25px; + background-color: rgb(0, 71, 148); + background-image: url('../images/2.png'); + background-repeat: no-repeat; + background-position: right center; + position:fixed; + bottom:0; + } +.menuContent { width: 100%; clear: both; } +.menuContent ul { float: right; } +ul#css3menu { + float: right; + margin-right: 55px; +} +ul#css3menu ul { + margin: 0pt; + list-style: none outside none; + padding: 0pt; + background-color: rgb(222, 222, 222); + border: 1px solid rgb(95, 95, 95); + float: right; + border-radius:8px; +} +ul#css3menu { display: block; font-size: 0pt; z-index: 1000; margin-top: 18px;} +ul#css3menu ul { + display: none; + position: absolute; + left: 12px; + top: 100%; + padding: 15px 10px; + background-color: rgb(255, 255, 255); + border-color: #757679; + z-index: 100; + border-radius: 8px; + -moz-box-shadow: 2px 2px 8px #888888; + box-shadow: 2px 2px 8px #888888; + box-sizing: border-box; +} +ul#css3menu ul li.subfirst:nth-last-child(1){ + border-bottom:none; +} +ul#css3menu li:hover > * { display: block; } +ul#css3menu li:hover { position: relative; } +ul#css3menu li { display: block; white-space: nowrap; font-size: 0pt; float: left; } +ul#css3menu > li, ul#css3menu li { margin: 0pt; } +ul#css3menu a:active, ul#css3menu a:focus { outline-style: none; } +ul#css3menu li.topitem>a { + display: block; + font: 16px Trebuchet MS,sans-serif; + color: rgb(0,0,0); + float: left; + padding-left: 20px; + padding-right: 5px; +} +ul#css3menu li.topitem { + border-left: 1px solid #9B9B9B; +} + +ul#css3menu li.subfirst a { + display: block; + font: 12px Trebuchet MS,sans-serif; + color: #9B9B9B; + padding: 0px 8px; + text-align:center; +} + +ul#css3menu li.topitem:nth-last-child(1){ + border-right: 1px solid #9B9B9B; +} +ul#css3menu ul li { + float: none; + margin: 10px 0pt 0pt; + border-bottom: 1px solid #d1d2d5; + padding-bottom: 10px; +} +ul#css3menu ul a { text-align: left; padding: 4px; background-color: rgb(255, 255, 255); background-image: none; border-width: 0pt; font: 14px Tahoma,serif; color: rgb(0, 0, 0); text-decoration: none; } +ul#css3menu li.topitem span.arrow { + width: 12px; + height: 8px; + background-image: url(../images/menuArrow.png); + display: block; + background-size: cover; + float: left; + margin-right: 20px; + margin-top: 5px; +} +ul#css3menu li.topitem:hover span.arrow { + background-image: url(../images/menuArrowActive.png); +} + + +ul#css3menu li:hover > a { + color: rgb(0, 0, 0); + text-decoration: none; + /* background-color: rgb(12, 151, 226); + border-color: silver; + border-style: solid; + font: bold 14px Trebuchet MS,sans-serif; + text-shadow: 0pt 0pt 1px rgb(255, 255, 255); + background-image: url('../images/mainbk.png'); + background-position: 0pt 100%; */ +} + +ul#css3menu ul li:hover > a { + background-color: rgb(255, 255, 255); + background-image: none; + color: #12B7F5; + text-decoration: none; +} +ul#css3menu ul li:hover > a:hover { + background-color: rgb(255, 255, 255); + background-image: none; + color: #12B7F5; + text-decoration: none; +} +ul#css3menu li.topfirst > a { } +ul#css3menu li.toplast > a { } +/* ::::: http://jaguar.ag1199.cn/Content/themes/base/jquery.ui.all.css ::::: */ + +/* ::::: http://jaguar.ag1199.cn/Content/themes/base/jquery.ui.base.css ::::: */ + +/* ::::: http://jaguar.ag1199.cn/Content/themes/base/jquery.ui.core.css ::::: */ + +.ui-helper-clearfix:before, .ui-helper-clearfix:after { content: ""; display: table; border-collapse: collapse; } +.ui-helper-clearfix:after { clear: both; } +.ui-helper-clearfix { min-height: 0pt; } +/* ::::: http://jaguar.ag1199.cn/Content/themes/base/jquery.ui.accordion.css ::::: */ + +/* ::::: http://jaguar.ag1199.cn/Content/themes/base/jquery.ui.autocomplete.css ::::: */ + +/* ::::: http://jaguar.ag1199.cn/Content/themes/base/jquery.ui.button.css ::::: */ + +input.ui-button::-moz-focus-inner, button.ui-button::-moz-focus-inner { border: 0pt none; padding: 0pt; } +/* ::::: http://jaguar.ag1199.cn/Content/themes/base/jquery.ui.datepicker.css ::::: */ + +.ui-datepicker { width: 17em; padding: 0.2em 0.2em 0pt; display: none; } +/* ::::: http://jaguar.ag1199.cn/Content/themes/base/jquery.ui.dialog.css ::::: */ + +/* ::::: http://jaguar.ag1199.cn/Content/themes/base/jquery.ui.menu.css ::::: */ + +/* ::::: http://jaguar.ag1199.cn/Content/themes/base/jquery.ui.progressbar.css ::::: */ + +/* ::::: http://jaguar.ag1199.cn/Content/themes/base/jquery.ui.resizable.css ::::: */ + +/* ::::: http://jaguar.ag1199.cn/Content/themes/base/jquery.ui.selectable.css ::::: */ + +/* ::::: http://jaguar.ag1199.cn/Content/themes/base/jquery.ui.slider.css ::::: */ + +/* ::::: http://jaguar.ag1199.cn/Content/themes/base/jquery.ui.spinner.css ::::: */ + +/* ::::: http://jaguar.ag1199.cn/Content/themes/base/jquery.ui.tabs.css ::::: */ + +/* ::::: http://jaguar.ag1199.cn/Content/themes/base/jquery.ui.tooltip.css ::::: */ + +/* ::::: http://jaguar.ag1199.cn/Content/themes/base/jquery.ui.theme.css ::::: */ + +.ui-widget { font-family: Verdana,Arial,sans-serif; font-size: 1.1em; } +.ui-widget-content { border: 1px solid rgb(170, 170, 170); background: url('../images/ui-bg_flat_75_ffffff_40x100.png') repeat-x scroll 50% 50% rgb(255, 255, 255); color: rgb(34, 34, 34); } +.ui-corner-all, .ui-corner-top, .ui-corner-left, .ui-corner-tl { } +.ui-corner-all, .ui-corner-top, .ui-corner-right, .ui-corner-tr { } +.ui-corner-all, .ui-corner-bottom, .ui-corner-left, .ui-corner-bl { } +.ui-corner-all, .ui-corner-bottom, .ui-corner-right, .ui-corner-br { } +.red-true { color: red; } +table tr th{color: rgb(51, 51, 51);} +.pr12{padding-right:12px;} + +.tableCosShow { + width: 351px; + table-layout:fixed; + word-break: break-all; + overflow:hidden; +} +.datagrid .panel-body { + border-bottom:0; +} +.modifyPas { + color:#ffffff; +} \ No newline at end of file diff --git a/src/main/webapp/css/index.css b/src/main/webapp/css/index.css new file mode 100644 index 0000000..b42d592 --- /dev/null +++ b/src/main/webapp/css/index.css @@ -0,0 +1,787 @@ +/* ::::: http://jaguar.ag1199.cn/Content/css?v=n0bC9-Ppon4UEjl8e4gVasERUOvYia2Rzl_1UdL29VY1 ::::: */ + +html { font-family: sans-serif; } +body { margin: 0pt; } +audio:not([controls]) { display: none; height: 0pt; } +a { background: none repeat scroll 0pt 0pt transparent; } +a:active, a:hover { outline: 0pt none; cursor: pointer;} +b, strong { font-weight: 700; } +h1 { margin: 0.67em 0pt; font-size: 2em; } +img { border: 0pt none; } +svg:not(:root) { overflow: hidden; } +pre { overflow: auto; } +code, kbd, pre, samp { font-family: monospace,monospace; font-size: 1em; } +button, input, optgroup, select, textarea { margin: 0pt; font: inherit; color: inherit; } +button { overflow: visible; } +button, select { text-transform: none; } +button, html input[type="button"], input[type="reset"], input[type="submit"] { cursor: pointer; } +button::-moz-focus-inner, input::-moz-focus-inner { padding: 0pt; border: 0pt none; } +input { line-height: normal; } +table { border-spacing: 0pt; border-collapse: collapse;} +td, th { padding: 0pt; } +.text-center {text-align: center;} +.t-button,.btn-xs, .btn-group-xs>.btn {margin-right:2px;} +@media print { + * { color: rgb(0, 0, 0) ! important; text-shadow: none ! important; background: none repeat scroll 0% 0% transparent ! important; } + a, a:visited { text-decoration: underline; } + a[href]:after { content: " (" attr(href) ")"; } + abbr[title]:after { content: " (" attr(title) ")"; } + a[href^="javascript:"]:after, a[href^="#"]:after { content: ""; } + pre, blockquote { border: 1px solid rgb(153, 153, 153); page-break-inside: avoid; } + thead { display: table-header-group; } + tr, img { page-break-inside: avoid; } + img { max-width: 100% ! important; } + p, h2, h3 { orphans: 3; widows: 3; } + h2, h3 { page-break-after: avoid; } + select { background: none repeat scroll 0% 0% rgb(255, 255, 255) ! important; } + .navbar { display: none; } + .table td, .table th { background-color: rgb(255, 255, 255) ! important; } + .btn > .caret, .dropup > .btn > .caret { border-top-color: rgb(0, 0, 0) ! important; } + .label { border: 1px solid rgb(0, 0, 0); } + .table { border-collapse: collapse ! important; } + .table-bordered th, .table-bordered td { border: 1px solid rgb(221, 221, 221) ! important; } +} +@font-face { + font-family: "Glyphicons Halflings"; src: url('glyphicons-halflings-regular.eot') format("embedded-opentype"), url('fonts/glyphicons-halflings-regular.woff') format("woff"), url('glyphicons-halflings-regular.ttf') format("truetype"), url('glyphicons-halflings-regular.svg') format("svg");} +* { -moz-box-sizing: content-box; } +*:before, *:after { -moz-box-sizing: border-box; } +html { font-size: 10px; } +body { font-family: "Helvetica Neue",Helvetica,Arial,sans-serif; font-size: 14px; line-height: 1.42857; color: rgb(51, 51, 51); background-color: rgb(255, 255, 255); } + +a {/* color: rgb(66, 139, 202); */ text-decoration: none; } +/* a:hover, a:focus { color: rgb(42, 100, 150); text-decoration: underline;outline:none; } */ + +a:focus { outline: thin dotted; outline-offset: -2px; } +img { vertical-align: middle; } +h1, h2, h3, h4, h5, h6, .h1, .h2, .h3, .h4, .h5, .h6 { font-family: inherit; font-weight: 500; line-height: 1.1; color: inherit; } +h1, .h1, h2, .h2, h3, .h3 { margin-top: 20px; margin-bottom: 10px; } +h1, .h1 { font-size: 36px; } +h2, .h2 { font-size: 30px; } +h4, .h4 { + font-size: 18px; +} +@media (min-width: 768px) { + .lead { font-size: 21px; } +} +ul, ol { margin-top: 0pt; margin-bottom: 10px; } +ul ul, ol ul, ul ol, ol ol { margin-bottom: 0pt; } +@media (min-width: 768px) { + .dl-horizontal dt { float: left; width: 160px; overflow: hidden; clear: left; text-align: right; white-space: nowrap; } + .dl-horizontal dd { margin-left: 180px; } +} +code, kbd, pre, samp { font-family: Menlo,Monaco,Consolas,"Courier New",monospace; } +pre { display: block; padding: 9.5px; margin: 0pt 0pt 10px; font-size: 13px; line-height: 1.42857; color: rgb(51, 51, 51); word-wrap: break-word; background-color: rgb(245, 245, 245); border: 1px solid rgb(204, 204, 204); } +@media (min-width: 768px) { + .container { width: 750px; } +} +@media (min-width: 992px) { + .container { width: 970px; } +} +@media (min-width: 1200px) { + .container { width: 1170px; } +} +@media (min-width: 768px) { + .col-sm-1, .col-sm-2, .col-sm-3, .col-sm-4, .col-sm-5, .col-sm-6, .col-sm-7, .col-sm-8, .col-sm-9, .col-sm-10, .col-sm-11, .col-sm-12 { float: left; } + .col-sm-12 { width: 100%; } + .col-sm-11 { width: 91.6667%; } + .col-sm-10 { width: 83.3333%; } + .col-sm-9 { width: 75%; } + .col-sm-8 { width: 66.6667%; } + .col-sm-7 { width: 58.3333%; } + .col-sm-6 { width: 50%; } + .col-sm-5 { width: 41.6667%; } + .col-sm-4 { width: 33.3333%; } + .col-sm-3 { width: 25%; } + .col-sm-2 { width: 16.6667%; } + .col-sm-1 { width: 8.33333%; } + .col-sm-pull-12 { right: 100%; } + .col-sm-pull-11 { right: 91.6667%; } + .col-sm-pull-10 { right: 83.3333%; } + .col-sm-pull-9 { right: 75%; } + .col-sm-pull-8 { right: 66.6667%; } + .col-sm-pull-7 { right: 58.3333%; } + .col-sm-pull-6 { right: 50%; } + .col-sm-pull-5 { right: 41.6667%; } + .col-sm-pull-4 { right: 33.3333%; } + .col-sm-pull-3 { right: 25%; } + .col-sm-pull-2 { right: 16.6667%; } + .col-sm-pull-1 { right: 8.33333%; } + .col-sm-pull-0 { right: auto; } + .col-sm-push-12 { left: 100%; } + .col-sm-push-11 { left: 91.6667%; } + .col-sm-push-10 { left: 83.3333%; } + .col-sm-push-9 { left: 75%; } + .col-sm-push-8 { left: 66.6667%; } + .col-sm-push-7 { left: 58.3333%; } + .col-sm-push-6 { left: 50%; } + .col-sm-push-5 { left: 41.6667%; } + .col-sm-push-4 { left: 33.3333%; } + .col-sm-push-3 { left: 25%; } + .col-sm-push-2 { left: 16.6667%; } + .col-sm-push-1 { left: 8.33333%; } + .col-sm-push-0 { left: auto; } + .col-sm-offset-12 { margin-left: 100%; } + .col-sm-offset-11 { margin-left: 91.6667%; } + .col-sm-offset-10 { margin-left: 83.3333%; } + .col-sm-offset-9 { margin-left: 75%; } + .col-sm-offset-8 { margin-left: 66.6667%; } + .col-sm-offset-7 { margin-left: 58.3333%; } + .col-sm-offset-6 { margin-left: 50%; } + .col-sm-offset-5 { margin-left: 41.6667%; } + .col-sm-offset-4 { margin-left: 33.3333%; } + .col-sm-offset-3 { margin-left: 25%; } + .col-sm-offset-2 { margin-left: 16.6667%; } + .col-sm-offset-1 { margin-left: 8.33333%; } + .col-sm-offset-0 { margin-left: 0pt; } +} +@media (min-width: 992px) { + .col-md-1, .col-md-2, .col-md-3, .col-md-4, .col-md-5, .col-md-6, .col-md-7, .col-md-8, .col-md-9, .col-md-10, .col-md-11, .col-md-12 { float: left; } + .col-md-12 { width: 100%; } + .col-md-11 { width: 91.6667%; } + .col-md-10 { width: 83.3333%; } + .col-md-9 { width: 75%; } + .col-md-8 { width: 66.6667%; } + .col-md-7 { width: 58.3333%; } + .col-md-6 { width: 50%; } + .col-md-5 { width: 41.6667%; } + .col-md-4 { width: 33.3333%; } + .col-md-3 { width: 25%; } + .col-md-2 { width: 16.6667%; } + .col-md-1 { width: 8.33333%; } + .col-md-pull-12 { right: 100%; } + .col-md-pull-11 { right: 91.6667%; } + .col-md-pull-10 { right: 83.3333%; } + .col-md-pull-9 { right: 75%; } + .col-md-pull-8 { right: 66.6667%; } + .col-md-pull-7 { right: 58.3333%; } + .col-md-pull-6 { right: 50%; } + .col-md-pull-5 { right: 41.6667%; } + .col-md-pull-4 { right: 33.3333%; } + .col-md-pull-3 { right: 25%; } + .col-md-pull-2 { right: 16.6667%; } + .col-md-pull-1 { right: 8.33333%; } + .col-md-pull-0 { right: auto; } + .col-md-push-12 { left: 100%; } + .col-md-push-11 { left: 91.6667%; } + .col-md-push-10 { left: 83.3333%; } + .col-md-push-9 { left: 75%; } + .col-md-push-8 { left: 66.6667%; } + .col-md-push-7 { left: 58.3333%; } + .col-md-push-6 { left: 50%; } + .col-md-push-5 { left: 41.6667%; } + .col-md-push-4 { left: 33.3333%; } + .col-md-push-3 { left: 25%; } + .col-md-push-2 { left: 16.6667%; } + .col-md-push-1 { left: 8.33333%; } + .col-md-push-0 { left: auto; } + .col-md-offset-12 { margin-left: 100%; } + .col-md-offset-11 { margin-left: 91.6667%; } + .col-md-offset-10 { margin-left: 83.3333%; } + .col-md-offset-9 { margin-left: 75%; } + .col-md-offset-8 { margin-left: 66.6667%; } + .col-md-offset-7 { margin-left: 58.3333%; } + .col-md-offset-6 { margin-left: 50%; } + .col-md-offset-5 { margin-left: 41.6667%; } + .col-md-offset-4 { margin-left: 33.3333%; } + .col-md-offset-3 { margin-left: 25%; } + .col-md-offset-2 { margin-left: 16.6667%; } + .col-md-offset-1 { margin-left: 8.33333%; } + .col-md-offset-0 { margin-left: 0pt; } +} +@media (min-width: 1200px) { + .col-lg-1, .col-lg-2, .col-lg-3, .col-lg-4, .col-lg-5, .col-lg-6, .col-lg-7, .col-lg-8, .col-lg-9, .col-lg-10, .col-lg-11, .col-lg-12 { float: left; } + .col-lg-12 { width: 100%; } + .col-lg-11 { width: 91.6667%; } + .col-lg-10 { width: 83.3333%; } + .col-lg-9 { width: 75%; } + .col-lg-8 { width: 66.6667%; } + .col-lg-7 { width: 58.3333%; } + .col-lg-6 { width: 50%; } + .col-lg-5 { width: 41.6667%; } + .col-lg-4 { width: 33.3333%; } + .col-lg-3 { width: 25%; } + .col-lg-2 { width: 16.6667%; } + .col-lg-1 { width: 8.33333%; } + .col-lg-pull-12 { right: 100%; } + .col-lg-pull-11 { right: 91.6667%; } + .col-lg-pull-10 { right: 83.3333%; } + .col-lg-pull-9 { right: 75%; } + .col-lg-pull-8 { right: 66.6667%; } + .col-lg-pull-7 { right: 58.3333%; } + .col-lg-pull-6 { right: 50%; } + .col-lg-pull-5 { right: 41.6667%; } + .col-lg-pull-4 { right: 33.3333%; } + .col-lg-pull-3 { right: 25%; } + .col-lg-pull-2 { right: 16.6667%; } + .col-lg-pull-1 { right: 8.33333%; } + .col-lg-pull-0 { right: auto; } + .col-lg-push-12 { left: 100%; } + .col-lg-push-11 { left: 91.6667%; } + .col-lg-push-10 { left: 83.3333%; } + .col-lg-push-9 { left: 75%; } + .col-lg-push-8 { left: 66.6667%; } + .col-lg-push-7 { left: 58.3333%; } + .col-lg-push-6 { left: 50%; } + .col-lg-push-5 { left: 41.6667%; } + .col-lg-push-4 { left: 33.3333%; } + .col-lg-push-3 { left: 25%; } + .col-lg-push-2 { left: 16.6667%; } + .col-lg-push-1 { left: 8.33333%; } + .col-lg-push-0 { left: auto; } + .col-lg-offset-12 { margin-left: 100%; } + .col-lg-offset-11 { margin-left: 91.6667%; } + .col-lg-offset-10 { margin-left: 83.3333%; } + .col-lg-offset-9 { margin-left: 75%; } + .col-lg-offset-8 { margin-left: 66.6667%; } + .col-lg-offset-7 { margin-left: 58.3333%; } + .col-lg-offset-6 { margin-left: 50%; } + .col-lg-offset-5 { margin-left: 41.6667%; } + .col-lg-offset-4 { margin-left: 33.3333%; } + .col-lg-offset-3 { margin-left: 25%; } + .col-lg-offset-2 { margin-left: 16.6667%; } + .col-lg-offset-1 { margin-left: 8.33333%; } + .col-lg-offset-0 { margin-left: 0pt; } +} +table { background-color: transparent; } +th { text-align: left; } +.table { width: 100%; max-width: 100%; margin-bottom: 20px; } +.table > thead > tr > th, .table > tbody > tr > th, .table > tfoot > tr > th, .table > thead > tr > td, .table > tbody > tr > td, .table > tfoot > tr > td { /* padding: 8px; */line-height: 1.42857; vertical-align: top; border-top: 1px solid rgb(221, 221, 221); } +.table-condensed > thead > tr > th, .table-condensed > tbody > tr > th, .table-condensed > tfoot > tr > th, .table-condensed > thead > tr > td, .table-condensed > tbody > tr > td, .table-condensed > tfoot > tr > td { padding: 5px; } +.table-bordered { border: 1px solid rgb(221, 221, 221); } +.table-bordered > thead > tr > th, .table-bordered > tbody > tr > th, .table-bordered > tfoot > tr > th, .table-bordered > thead > tr > td, .table-bordered > tbody > tr > td, .table-bordered > tfoot > tr > td { border: 1px solid rgb(221, 221, 221); } +.table-striped > tbody > tr:nth-child(2n+0) > td, .table-striped > tbody > tr:nth-child(2n+0) > th { background-color: rgb(249, 249, 249); } +.table-hover > tbody > tr:hover > td, .table-hover > tbody > tr:hover > th { background-color: rgb(245, 245, 245); } +@media screen and (max-width: 767px) { + .table-responsive { width: 100%; margin-bottom: 15px; overflow-x: auto; overflow-y: hidden; border: 1px solid rgb(221, 221, 221); } + .table-responsive > .table { margin-bottom: 0pt; } + .table-responsive > .table > thead > tr > th, .table-responsive > .table > tbody > tr > th, .table-responsive > .table > tfoot > tr > th, .table-responsive > .table > thead > tr > td, .table-responsive > .table > tbody > tr > td, .table-responsive > .table > tfoot > tr > td { white-space: nowrap; } + .table-responsive > .table-bordered { border: 0pt none; } + .table-responsive > .table-bordered > thead > tr > th:first-child, .table-responsive > .table-bordered > tbody > tr > th:first-child, .table-responsive > .table-bordered > tfoot > tr > th:first-child, .table-responsive > .table-bordered > thead > tr > td:first-child, .table-responsive > .table-bordered > tbody > tr > td:first-child, .table-responsive > .table-bordered > tfoot > tr > td:first-child { border-left: 0pt none; } + .table-responsive > .table-bordered > thead > tr > th:last-child, .table-responsive > .table-bordered > tbody > tr > th:last-child, .table-responsive > .table-bordered > tfoot > tr > th:last-child, .table-responsive > .table-bordered > thead > tr > td:last-child, .table-responsive > .table-bordered > tbody > tr > td:last-child, .table-responsive > .table-bordered > tfoot > tr > td:last-child { border-right: 0pt none; } + .table-responsive > .table-bordered > tbody > tr:last-child > th, .table-responsive > .table-bordered > tfoot > tr:last-child > th, .table-responsive > .table-bordered > tbody > tr:last-child > td, .table-responsive > .table-bordered > tfoot > tr:last-child > td { border-bottom: 0pt none; } +} + + .table > tbody > tr > th{ + width:10%; + /* padding: 10px; */ + border-top:0; + line-height:32px; +} + .table > tbody > tr > td { + width:40%; + /* padding: 10px; */ + border-top:0; +} +label { display: inline-block; max-width: 100%; margin-bottom: 5px; font-weight: 700; } +@media (min-width: 768px) { + .form-inline .form-group { display: inline-block; margin-bottom: 0pt; vertical-align: middle; } + .form-inline .form-control { display: inline-block; width: auto; vertical-align: middle; } + .form-inline .input-group { display: inline-table; vertical-align: middle; } + .form-inline .input-group .input-group-addon, .form-inline .input-group .input-group-btn, .form-inline .input-group .form-control { width: auto; } + .form-inline .input-group > .form-control { width: 100%; } + .form-inline .control-label { margin-bottom: 0pt; vertical-align: middle; } + .form-inline .radio, .form-inline .checkbox { display: inline-block; margin-top: 0pt; margin-bottom: 0pt; vertical-align: middle; } + .form-inline .radio label, .form-inline .checkbox label { padding-left: 0pt; } + .form-inline .radio input[type="radio"], .form-inline .checkbox input[type="checkbox"] { position: relative; margin-left: 0pt; } + .form-inline .has-feedback .form-control-feedback { top: 0pt; } +} +@media (min-width: 768px) { + .form-horizontal .control-label { padding-top: 7px; margin-bottom: 0pt; text-align: right; } +} +@media (min-width: 768px) { + .form-horizontal .form-group-lg .control-label { padding-top: 14.3px; } +} +@media (min-width: 768px) { + .form-horizontal .form-group-sm .control-label { padding-top: 6px; } +} +.btn { display: inline-block; padding: 6px 12px; margin-bottom: 0pt; font-size: 14px; font-weight: 400; line-height: 1.42857; text-align: center; white-space: nowrap; vertical-align: middle; cursor: pointer; -moz-user-select: none; background-image: none; border: 1px solid transparent; } +.btn:focus, .btn:active:focus, .btn.active:focus { outline: thin dotted; outline-offset: -2px; } +.btn:hover, .btn:focus { color: rgb(51, 51, 51); text-decoration: none; } +.btn:active, .btn.active { background-image: none; outline: 0pt none; } +.btn-link { font-weight: 400; color: rgb(66, 139, 202); cursor: pointer; } +.btn-link, .btn-link:active, .btn-link[disabled], fieldset[disabled] .btn-link { background-color: transparent; } +.btn-link, .btn-link:hover, .btn-link:focus, .btn-link:active { border-color: transparent; } +.btn-link:hover, .btn-link:focus { color: rgb(42, 100, 150); text-decoration: underline; background-color: transparent; } +.btn-xs, .btn-group-xs > .btn { padding: 1px 5px; font-size: 12px; line-height: 1.5; } +@media (min-width: 768px) { + .navbar-right .dropdown-menu { right: 0pt; left: auto; } + .navbar-right .dropdown-menu-left { right: auto; left: 0pt; } +} +.btn-group > .btn:not(:first-child):not(:last-child):not(.dropdown-toggle) { } +.btn-group > .btn:first-child:not(:last-child):not(.dropdown-toggle) { } +.btn-group > .btn:last-child:not(:first-child), .btn-group > .dropdown-toggle:not(:first-child) { } +.btn-group > .btn-group:not(:first-child):not(:last-child) > .btn { } +.btn-group-vertical > .btn:not(:first-child):not(:last-child) { } +.btn-group-vertical > .btn:first-child:not(:last-child) { } +.btn-group-vertical > .btn:last-child:not(:first-child) { } +.btn-group-vertical > .btn-group:not(:first-child):not(:last-child) > .btn { } +.btn-group-vertical > .btn-group:first-child:not(:last-child) > .btn:last-child, .btn-group-vertical > .btn-group:first-child:not(:last-child) > .dropdown-toggle { } +.btn-group-vertical > .btn-group:last-child:not(:first-child) > .btn:first-child { } +.input-group-addon:not(:first-child):not(:last-child), .input-group-btn:not(:first-child):not(:last-child), .input-group .form-control:not(:first-child):not(:last-child) { } +.input-group .form-control:first-child, .input-group-addon:first-child, .input-group-btn:first-child > .btn, .input-group-btn:first-child > .btn-group > .btn, .input-group-btn:first-child > .dropdown-toggle, .input-group-btn:last-child > .btn:not(:last-child):not(.dropdown-toggle), .input-group-btn:last-child > .btn-group:not(:last-child) > .btn { } +.input-group .form-control:last-child, .input-group-addon:last-child, .input-group-btn:last-child > .btn, .input-group-btn:last-child > .btn-group > .btn, .input-group-btn:last-child > .dropdown-toggle, .input-group-btn:first-child > .btn:not(:first-child), .input-group-btn:first-child > .btn-group:not(:first-child) > .btn { } +@media (min-width: 768px) { + .nav-tabs.nav-justified > li { display: table-cell; width: 1%; } + .nav-tabs.nav-justified > li > a { margin-bottom: 0pt; } +} +@media (min-width: 768px) { + .nav-tabs.nav-justified > li > a { border-bottom: 1px solid rgb(221, 221, 221); } + .nav-tabs.nav-justified > .active > a, .nav-tabs.nav-justified > .active > a:hover, .nav-tabs.nav-justified > .active > a:focus { border-bottom-color: rgb(255, 255, 255); } +} +@media (min-width: 768px) { + .nav-justified > li { display: table-cell; width: 1%; } + .nav-justified > li > a { margin-bottom: 0pt; } +} +@media (min-width: 768px) { + .nav-tabs-justified > li > a { border-bottom: 1px solid rgb(221, 221, 221); } + .nav-tabs-justified > .active > a, .nav-tabs-justified > .active > a:hover, .nav-tabs-justified > .active > a:focus { border-bottom-color: rgb(255, 255, 255); } +} +@media (min-width: 768px) { + .navbar { } +} +@media (min-width: 768px) { + .navbar-header { float: left; } +} +@media (min-width: 768px) { + .navbar-collapse { width: auto; border-top: 0pt none; } + .navbar-collapse.collapse { display: block ! important; height: auto ! important; padding-bottom: 0pt; overflow: visible ! important; } + .navbar-collapse.in { overflow-y: visible; } + .navbar-fixed-top .navbar-collapse, .navbar-static-top .navbar-collapse, .navbar-fixed-bottom .navbar-collapse { padding-right: 0pt; padding-left: 0pt; } +} +@media (max-width: 480px) and (orientation: landscape) { + .navbar-fixed-top .navbar-collapse, .navbar-fixed-bottom .navbar-collapse { max-height: 200px; } +} +@media (min-width: 768px) { + .container > .navbar-header, .container-fluid > .navbar-header, .container > .navbar-collapse, .container-fluid > .navbar-collapse { margin-right: 0pt; margin-left: 0pt; } +} +@media (min-width: 768px) { + .navbar-static-top { } +} +@media (min-width: 768px) { + .navbar-fixed-top, .navbar-fixed-bottom { } +} +@media (min-width: 768px) { + .navbar > .container .navbar-brand, .navbar > .container-fluid .navbar-brand { margin-left: -15px; } +} +@media (min-width: 768px) { + .navbar-toggle { display: none; } +} +@media (max-width: 767px) { + .navbar-nav .open .dropdown-menu { position: static; float: none; width: auto; margin-top: 0pt; background-color: transparent; border: 0pt none; } + .navbar-nav .open .dropdown-menu > li > a, .navbar-nav .open .dropdown-menu .dropdown-header { padding: 5px 15px 5px 25px; } + .navbar-nav .open .dropdown-menu > li > a { line-height: 20px; } + .navbar-nav .open .dropdown-menu > li > a:hover, .navbar-nav .open .dropdown-menu > li > a:focus { background-image: none; } +} +@media (min-width: 768px) { + .navbar-nav { float: left; margin: 0pt; } + .navbar-nav > li { float: left; } + .navbar-nav > li > a { padding-top: 15px; padding-bottom: 15px; } + .navbar-nav.navbar-right:last-child { margin-right: -15px; } +} +@media (min-width: 768px) { + .navbar-left { float: left ! important; } + .navbar-right { float: right ! important; } +} +@media (min-width: 768px) { + .navbar-form .form-group { display: inline-block; margin-bottom: 0pt; vertical-align: middle; } + .navbar-form .form-control { display: inline-block; width: auto; vertical-align: middle; } + .navbar-form .input-group { display: inline-table; vertical-align: middle; } + .navbar-form .input-group .input-group-addon, .navbar-form .input-group .input-group-btn, .navbar-form .input-group .form-control { width: auto; } + .navbar-form .input-group > .form-control { width: 100%; } + .navbar-form .control-label { margin-bottom: 0pt; vertical-align: middle; } + .navbar-form .radio, .navbar-form .checkbox { display: inline-block; margin-top: 0pt; margin-bottom: 0pt; vertical-align: middle; } + .navbar-form .radio label, .navbar-form .checkbox label { padding-left: 0pt; } + .navbar-form .radio input[type="radio"], .navbar-form .checkbox input[type="checkbox"] { position: relative; margin-left: 0pt; } + .navbar-form .has-feedback .form-control-feedback { top: 0pt; } +} +@media (max-width: 767px) { + .navbar-form .form-group { margin-bottom: 5px; } +} +@media (min-width: 768px) { + .navbar-form { width: auto; padding-top: 0pt; padding-bottom: 0pt; margin-right: 0pt; margin-left: 0pt; border: 0pt none; } + .navbar-form.navbar-right:last-child { margin-right: -15px; } +} +@media (min-width: 768px) { + .navbar-text { float: left; margin-right: 15px; margin-left: 15px; } + .navbar-text.navbar-right:last-child { margin-right: 0pt; } +} +@media (max-width: 767px) { + .navbar-default .navbar-nav .open .dropdown-menu > li > a { color: rgb(119, 119, 119); } + .navbar-default .navbar-nav .open .dropdown-menu > li > a:hover, .navbar-default .navbar-nav .open .dropdown-menu > li > a:focus { color: rgb(51, 51, 51); background-color: transparent; } + .navbar-default .navbar-nav .open .dropdown-menu > .active > a, .navbar-default .navbar-nav .open .dropdown-menu > .active > a:hover, .navbar-default .navbar-nav .open .dropdown-menu > .active > a:focus { color: rgb(85, 85, 85); background-color: rgb(231, 231, 231); } + .navbar-default .navbar-nav .open .dropdown-menu > .disabled > a, .navbar-default .navbar-nav .open .dropdown-menu > .disabled > a:hover, .navbar-default .navbar-nav .open .dropdown-menu > .disabled > a:focus { color: rgb(204, 204, 204); background-color: transparent; } +} +@media (max-width: 767px) { + .navbar-inverse .navbar-nav .open .dropdown-menu > .dropdown-header { border-color: rgb(8, 8, 8); } + .navbar-inverse .navbar-nav .open .dropdown-menu .divider { background-color: rgb(8, 8, 8); } + .navbar-inverse .navbar-nav .open .dropdown-menu > li > a { color: rgb(119, 119, 119); } + .navbar-inverse .navbar-nav .open .dropdown-menu > li > a:hover, .navbar-inverse .navbar-nav .open .dropdown-menu > li > a:focus { color: rgb(255, 255, 255); background-color: transparent; } + .navbar-inverse .navbar-nav .open .dropdown-menu > .active > a, .navbar-inverse .navbar-nav .open .dropdown-menu > .active > a:hover, .navbar-inverse .navbar-nav .open .dropdown-menu > .active > a:focus { color: rgb(255, 255, 255); background-color: rgb(8, 8, 8); } + .navbar-inverse .navbar-nav .open .dropdown-menu > .disabled > a, .navbar-inverse .navbar-nav .open .dropdown-menu > .disabled > a:hover, .navbar-inverse .navbar-nav .open .dropdown-menu > .disabled > a:focus { color: rgb(68, 68, 68); background-color: transparent; } +} +.pagination { display: inline-block; padding-left: 0pt; margin: 20px 0pt; } +.pagination > tr td { display: inline; } +.pagination > tr td > a, .pagination > tr td > span { position: relative; float: left; padding: 6px 12px; margin-left: -1px; line-height: 1.42857; color: rgb(66, 139, 202); text-decoration: none; background-color: rgb(255, 255, 255); border: 1px solid rgb(221, 221, 221); } +.pagination > tr td:first-child > a, .pagination > tr td:first-child > span { margin-left: 0pt; } +.pagination > tr td:last-child > a, .pagination > tr td:last-child > span { } +.pagination > tr td > a:hover, .pagination > tr td > span:hover, .pagination > tr td > a:focus, .pagination > tr td > span:focus { color: rgb(42, 100, 150); background-color: rgb(238, 238, 238); border-color: rgb(221, 221, 221); } +.pagination > .active > a, .pagination > .active > span, .pagination > .active > a:hover, .pagination > .active > span:hover, .pagination > .active > a:focus, .pagination > .active > span:focus { z-index: 2; color: rgb(255, 255, 255); cursor: default; background-color: rgb(66, 139, 202); border-color: rgb(66, 139, 202); } +.pagination > .disabled > span, .pagination > .disabled > span:hover, .pagination > .disabled > span:focus, .pagination > .disabled > a, .pagination > .disabled > a:hover, .pagination > .disabled > a:focus { color: rgb(119, 119, 119); cursor: not-allowed; background-color: rgb(255, 255, 255); border-color: rgb(221, 221, 221); } +.pagination-sm > tr td > a, .pagination-sm > tr td > span { padding: 5px 10px; font-size: 12px; } +.pagination-sm > tr td:first-child > a, .pagination-sm > tr td:first-child > span { } +.pagination-sm > tr td:last-child > a, .pagination-sm > tr td:last-child > span { } +@media screen and (min-width: 768px) { + .jumbotron { padding-top: 48px; padding-bottom: 48px; } + .container .jumbotron { padding-right: 60px; padding-left: 60px; } + .jumbotron h1, .jumbotron .h1 { font-size: 63px; } +} +@media (min-width: 768px) { + .modal-dialog { width: 600px; margin: 30px auto; } + .modal-content { } + .modal-sm { width: 300px; } +} +@media (min-width: 992px) { + .modal-lg { width: 900px; } +} +@media screen and (min-width: 768px) { + .carousel-control .glyphicon-chevron-left, .carousel-control .glyphicon-chevron-right, .carousel-control .icon-prev, .carousel-control .icon-next { width: 30px; height: 30px; margin-top: -15px; font-size: 30px; } + .carousel-control .glyphicon-chevron-left, .carousel-control .icon-prev { margin-left: -15px; } + .carousel-control .glyphicon-chevron-right, .carousel-control .icon-next { margin-right: -15px; } + .carousel-caption { right: 20%; left: 20%; padding-bottom: 30px; } + .carousel-indicators { bottom: 20px; } +} +@media (max-width: 767px) { + .visible-xs { display: block ! important; } + table.visible-xs { display: table; } + tr.visible-xs { display: table-row ! important; } + th.visible-xs, td.visible-xs { display: table-cell ! important; } +} +@media (max-width: 767px) { + .visible-xs-block { display: block ! important; } +} +@media (max-width: 767px) { + .visible-xs-inline { display: inline ! important; } +} +@media (max-width: 767px) { + .visible-xs-inline-block { display: inline-block ! important; } +} +@media (min-width: 768px) and (max-width: 991px) { + .visible-sm { display: block ! important; } + table.visible-sm { display: table; } + tr.visible-sm { display: table-row ! important; } + th.visible-sm, td.visible-sm { display: table-cell ! important; } +} +@media (min-width: 768px) and (max-width: 991px) { + .visible-sm-block { display: block ! important; } +} +@media (min-width: 768px) and (max-width: 991px) { + .visible-sm-inline { display: inline ! important; } +} +@media (min-width: 768px) and (max-width: 991px) { + .visible-sm-inline-block { display: inline-block ! important; } +} +@media (min-width: 992px) and (max-width: 1199px) { + .visible-md { display: block ! important; } + table.visible-md { display: table; } + tr.visible-md { display: table-row ! important; } + th.visible-md, td.visible-md { display: table-cell ! important; } +} +@media (min-width: 992px) and (max-width: 1199px) { + .visible-md-block { display: block ! important; } +} +@media (min-width: 992px) and (max-width: 1199px) { + .visible-md-inline { display: inline ! important; } +} +@media (min-width: 992px) and (max-width: 1199px) { + .visible-md-inline-block { display: inline-block ! important; } +} +@media (min-width: 1200px) { + .visible-lg { display: block ! important; } + table.visible-lg { display: table; } + tr.visible-lg { display: table-row ! important; } + th.visible-lg, td.visible-lg { display: table-cell ! important; } +} +@media (min-width: 1200px) { + .visible-lg-block { display: block ! important; } +} +@media (min-width: 1200px) { + .visible-lg-inline { display: inline ! important; } +} +@media (min-width: 1200px) { + .visible-lg-inline-block { display: inline-block ! important; } +} +@media (max-width: 767px) { + .hidden-xs { display: none ! important; } +} +@media (min-width: 768px) and (max-width: 991px) { + .hidden-sm { display: none ! important; } +} +@media (min-width: 992px) and (max-width: 1199px) { + .hidden-md { display: none ! important; } +} +@media (min-width: 1200px) { + .hidden-lg { display: none ! important; } +} +@media print { + .visible-print { display: block ! important; } + table.visible-print { display: table; } + tr.visible-print { display: table-row ! important; } + th.visible-print, td.visible-print { display: table-cell ! important; } +} +@media print { + .visible-print-block { display: block ! important; } +} +@media print { + .visible-print-inline { display: inline ! important; } +} +@media print { + .visible-print-inline-block { display: inline-block ! important; } +} +@media print { + .hidden-print { display: none ! important; } +} +@font-face { + font-family: "FontAwesome"; font-style: normal; font-weight: normal; src: url('fontawesome-webfont.eot') format("embedded-opentype"), url('fontawesome-webfont.woff') format("woff"), url('fontawesome-webfont.ttf') format("truetype"), url('fontawesome-webfont.svg') format("svg");} +.table td, .table th { font-size: 12px; } +.page { /* width: 1119px; */ height: 100%; margin: 3px auto; background-color: rgb(255, 255, 255); } +.page #header { width: 100%; height: 65px; background-image: url('../images/topbgnew.png'); background-repeat: no-repeat;background-size: cover; } +.page #header #logo { /* position: absolute; top: 24px; */ z-index: 0; float: left; width: 210px; margin-top: 35px;margin-left:60px;} +.page #header #title { float: left; width: 750px; color: rgb(255, 255, 255); height: 40px; } +.page #header #logindisplay { float: right; color: rgb(255, 255, 255); font-size: 14px; line-height: 65px; margin-right: 10px;vertical-align: middle; } +.page #header #logindisplay a { /* color: rgb(255, 255, 255); font-size: 14px; */ } +.page #header #logindisplay a.logout { + /* width:45px; */ + height:45px; + border-left:1px solid #ffffff; + display:inline-block; + vertical-align: middle; + margin-left:10px; + line-height: 45px; + color:#ffffff; + padding:0 20px; +} +.page #header #logindisplay a.logout:hover { + color:#ffffff; +} +.page #header #logindisplay a img.logoutIcon { + /* width:13px; + height:13px; */ + /* background-image: url('../images/powerIcon.png'); */ + margin-left: 10px; + margin-bottom: 22px; +} + +.page #header #logindisplay a:hover { color: blue; } +.page #menucontainer { /* float: left; */ margin-top: 10px; width: 100%; height: 37px; background-color: rgb(255, 255, 255); /* border-bottom: 3px solid rgb(178, 171, 171); */ } +.page #menucontainer .menuContent { position: relative; } +.footer { + width: 100%; + height: 25px; + background-color: rgb(0, 71, 148); + background-image: url('../images/2.png'); + background-repeat: no-repeat; + background-position: right center; + position:fixed; + bottom:0; + } +.menuContent { width: 100%; clear: both; } +.menuContent ul { float: right; } +ul#css3menu { + float: right; + margin-right: 55px; +} +ul#css3menu ul { + margin: 0pt; + list-style: none outside none; + padding: 0pt; + background-color: rgb(222, 222, 222); + border: 1px solid rgb(95, 95, 95); + float: right; + border-radius:8px; +} +ul#css3menu { display: block; font-size: 0pt; z-index: 1000; } +ul#css3menu ul { + display: none; + position: absolute; + left: 12px; + top: 100%; + padding: 15px 10px; + background-color: rgb(255, 255, 255); + border-color: #757679; + z-index: 100; + border-radius: 8px; + -moz-box-shadow: 2px 2px 8px #888888; + box-shadow: 2px 2px 8px #888888; + box-sizing: border-box; +} +ul#css3menu ul li.subfirst:nth-last-child(1){ + border-bottom:none; +} +ul#css3menu li:hover > * { display: block; } +ul#css3menu li:hover { position: relative; } +ul#css3menu li { display: block; white-space: nowrap; font-size: 0pt; float: left; } +ul#css3menu > li, ul#css3menu li { margin: 0pt; } +ul#css3menu a:active, ul#css3menu a:focus { outline-style: none; } +ul#css3menu li.topitem>a { + display: block; + font: 16px Trebuchet MS,sans-serif; + color: #9B9B9B; + float: left; + padding-left: 30px; + padding-right: 5px; +} +ul#css3menu li.topitem { + border-left: 1px solid #9B9B9B; +} + +ul#css3menu li.subfirst a { + display: block; + font: 12px Trebuchet MS,sans-serif; + color: #9B9B9B; + padding: 0px 8px; + text-align:center; +} + +ul#css3menu li.topitem:nth-last-child(1){ + border-right: 1px solid #9B9B9B; +} +ul#css3menu ul li { + float: none; + margin: 10px 0pt 0pt; + border-bottom: 1px solid #d1d2d5; + padding-bottom: 10px; +} +ul#css3menu ul a { text-align: left; padding: 4px; background-color: rgb(255, 255, 255); background-image: none; border-width: 0pt; font: 14px Tahoma,serif; color: rgb(0, 0, 0); text-decoration: none; } +ul#css3menu li.topitem span.arrow { + width: 12px; + height: 8px; + background-image: url(../images/menuArrow.png); + display: block; + background-size: cover; + float: left; + margin-right: 30px; + margin-top: 5px; +} +ul#css3menu li.topitem:hover span.arrow { + background-image: url(../images/menuArrowActive.png); +} + + +ul#css3menu li:hover > a { + color: rgb(0, 0, 0); + text-decoration: none; + /* background-color: rgb(12, 151, 226); + border-color: silver; + border-style: solid; + font: bold 14px Trebuchet MS,sans-serif; + text-shadow: 0pt 0pt 1px rgb(255, 255, 255); + background-image: url('../images/mainbk.png'); + background-position: 0pt 100%; */ +} + +ul#css3menu ul li:hover > a { + background-color: rgb(255, 255, 255); + background-image: none; + color: #12B7F5; + text-decoration: none; +} +ul#css3menu ul li:hover > a:hover { + background-color: rgb(255, 255, 255); + background-image: none; + color: #12B7F5; + text-decoration: none; +} +ul#css3menu li.topfirst > a { } +ul#css3menu li.toplast > a { } +/* ::::: http://jaguar.ag1199.cn/Content/themes/base/jquery.ui.all.css ::::: */ + +/* ::::: http://jaguar.ag1199.cn/Content/themes/base/jquery.ui.base.css ::::: */ + +/* ::::: http://jaguar.ag1199.cn/Content/themes/base/jquery.ui.core.css ::::: */ + +.ui-helper-clearfix:before, .ui-helper-clearfix:after { content: ""; display: table; border-collapse: collapse; } +.ui-helper-clearfix:after { clear: both; } +.ui-helper-clearfix { min-height: 0pt; } +/* ::::: http://jaguar.ag1199.cn/Content/themes/base/jquery.ui.accordion.css ::::: */ + +/* ::::: http://jaguar.ag1199.cn/Content/themes/base/jquery.ui.autocomplete.css ::::: */ + +/* ::::: http://jaguar.ag1199.cn/Content/themes/base/jquery.ui.button.css ::::: */ + +input.ui-button::-moz-focus-inner, button.ui-button::-moz-focus-inner { border: 0pt none; padding: 0pt; } +/* ::::: http://jaguar.ag1199.cn/Content/themes/base/jquery.ui.datepicker.css ::::: */ + +.ui-datepicker { width: 17em; padding: 0.2em 0.2em 0pt; display: none; } +/* ::::: http://jaguar.ag1199.cn/Content/themes/base/jquery.ui.dialog.css ::::: */ + +/* ::::: http://jaguar.ag1199.cn/Content/themes/base/jquery.ui.menu.css ::::: */ + +/* ::::: http://jaguar.ag1199.cn/Content/themes/base/jquery.ui.progressbar.css ::::: */ + +/* ::::: http://jaguar.ag1199.cn/Content/themes/base/jquery.ui.resizable.css ::::: */ + +/* ::::: http://jaguar.ag1199.cn/Content/themes/base/jquery.ui.selectable.css ::::: */ + +/* ::::: http://jaguar.ag1199.cn/Content/themes/base/jquery.ui.slider.css ::::: */ + +/* ::::: http://jaguar.ag1199.cn/Content/themes/base/jquery.ui.spinner.css ::::: */ + +/* ::::: http://jaguar.ag1199.cn/Content/themes/base/jquery.ui.tabs.css ::::: */ + +/* ::::: http://jaguar.ag1199.cn/Content/themes/base/jquery.ui.tooltip.css ::::: */ + +/* ::::: http://jaguar.ag1199.cn/Content/themes/base/jquery.ui.theme.css ::::: */ + +.ui-widget { font-family: Verdana,Arial,sans-serif; font-size: 1.1em; } +.ui-widget-content { border: 1px solid rgb(170, 170, 170); background: url('../images/ui-bg_flat_75_ffffff_40x100.png') repeat-x scroll 50% 50% rgb(255, 255, 255); color: rgb(34, 34, 34); } +.ui-corner-all, .ui-corner-top, .ui-corner-left, .ui-corner-tl { } +.ui-corner-all, .ui-corner-top, .ui-corner-right, .ui-corner-tr { } +.ui-corner-all, .ui-corner-bottom, .ui-corner-left, .ui-corner-bl { } +.ui-corner-all, .ui-corner-bottom, .ui-corner-right, .ui-corner-br { } +.red-true { color: red; } +table tr th{color: rgb(51, 51, 51);} +.pr12{padding-right:12px;} + +.tableCosShow { + width: 351px; + table-layout:fixed; + word-break: break-all; + overflow:hidden; +} +.datagrid .panel-body { + border-bottom:0; +} + +.infoTable { + width:100%; +} +.infoTable td { + width:33.3%; +} +.infoTable td hr{ + height: 0; + border-top: 1px solid #BABABA; +} +.table td hr{ + height: 0; + border-top: 1px dashed #BABABA; +} +a.modifyPas { + color:#ffffff; +} +a.modifyPas:hover { + color:#ffffff !important; +} +a.modifyPas:visited { + color:#ffffff !important; +} +a.modifyPas:active { + color:#ffffff !important; +} +a:focus { outline: none; } +input:-webkit-autofill, textarea:-webkit-autofill, select:-webkit-autofill { + background-color: transparent; + background-image: none; + color: rgb(0, 0, 0); + transition: background-color 50000s ease-in-out 0s; +} \ No newline at end of file diff --git a/src/main/webapp/css/list.css b/src/main/webapp/css/list.css new file mode 100644 index 0000000..6391328 --- /dev/null +++ b/src/main/webapp/css/list.css @@ -0,0 +1,42 @@ +a:hover { + text-decoration:none; + } + .datagrid-header-row, .datagrid-row { + height: 40px; + } + + .datagrid-header td, .datagrid-body td, .datagrid-footer td { + border:0; + } + .datagrid-row-over, .datagrid-header td.datagrid-header-over { + background-color:#E3F1ED; + color: #757679; + } + .datagrid-header { + border:none; + } + .datagrid-row-selected { + background-color:#E3F1ED; + color: #757679; + } + .datagrid-htable{ + color:#676A73; + font-size:14px; + font-weight: bold; + } + .datagrid-btable { + color:#757679; + } + .pagination table { + float:none; + margin: 0 auto; + } + .datagrid .datagrid-pager { + margin-top:10px; + text-align:center; + border:0; + } + .pagination-info { + float:none; + height: 0; + } \ No newline at end of file diff --git a/src/main/webapp/css/login.css b/src/main/webapp/css/login.css new file mode 100644 index 0000000..0db859f --- /dev/null +++ b/src/main/webapp/css/login.css @@ -0,0 +1,218 @@ +body { + margin: 0; + padding: 0; + background-color:#fff; +} + + +#header { + height:70px; + width:100%; + background-color:#036EB7; +} +#header img.carlogo{ + width: 210px; + float: left; + margin-top: 10px; + margin-left: 30px; +} +#header img{ + float: right; + margin-right: 40px; + width: 255px; + margin-top: 17px; +} +.login { + margin: 160px auto 0; + width: 680px; + height: 209px; + background-image: url(../images/000.jpg); + padding-top: 110px; + background-size: contain; +} +.login .tologin { + margin-left: 375px; + height: 200px; +} +.editor-field { + float: left; + clear: both; + width: 440px; + margin-bottom: 5px; +} +.login .tologin p.userPrompt { + margin: 0; + font-size: 12px; + color: #FE1A1C; + padding-left: 77px; + display:none; + font-weight: 600; + letter-spacing: 2px; +} +.login .tologin p { + float: left; + clear: both; +} +.editor-field label { + width: 65px; + display: block; + float: left; + line-height: 32px; + font-weight:normal; +} +.editor-field input { + width: 200px; + height: 30px; + padding-left:10px; + float: left; + border-radius: 3px; + border: 1px solid #969899; +} +.login .tologin p input { + width: 95px; + height: 35px; + float: left; + margin-left: 65px; + border: none; + border-radius: 3px; + font-size: 13px; +} +.checkFair { + background: #e0dbdb; + color: #99999a; +} +.checkSuccess { + background: #036EB7; + color: #ffffff; +} + +.validation-summary-errors { + font-size: 12px; + color: red; +} +.mc-ipt .mc-ipt-tip { + color: red; + font-size: 11px; +} +.redStar { + color:#FE1A1C; +} +input:-webkit-autofill, textarea:-webkit-autofill, select:-webkit-autofill { + background-color: transparent !important; + background-image: none; + color: rgb(0, 0, 0); + transition: background-color 50000s ease-in-out 0s; +} + + @media screen and (max-width: 1600px) { + html { + width:100%; + height:100%; + background-image: url(../images/Login12.jpg);background-size:100% 100%; + } + #loginTitle { + padding-top: 30px; + font-size: 28px; + letter-spacing: 4px; + } + #loginWrap { + width: 430px; + padding-left:70px; + height: 290px; + background: rgba(255,255,255,0.3); + position: absolute; + top: 233px; + right: 200px; + -moz-box-shadow: 3px 3px 20px #cccccc; + box-shadow: 3px 3px 20px #cccccc; + } + #username { + width: 300px; + height: 30px; + border: 1px solid #ccc; + border-radius: 5px; + text-indent: 0.5em; + } + #password { + width: 300px; + height: 30px; + border: 1px solid #ccc; + border-radius: 5px; + text-indent: 0.5em; + } + #LoginForm1BtnCtId { + + width: 95px; + height: 35px; + border: none; + border-radius: 3px; + font-size: 13px; + } + .userPrompt{ + color: red; + font-size: 12px; + } + #tip { + position:absolute; + top:108%; + left:75px; + color: #848383; + line-height:24px; + } + } + @media screen and (max-width: 1366px) { + html { + width:100%; + height:100%; + background-image: url(../images/Login11.jpg);background-size:100% 100%; + } + #loginTitle { + padding-top: 30px; + font-size: 25px; + letter-spacing: 4px; + } + #loginWrap { + width: 390px; + padding-left:60px; + height: 290px; + background: rgba(255,255,255,0.3); + position: absolute; + top: 195px; + right: 165px; + -moz-box-shadow: 3px 3px 20px #cccccc; + box-shadow: 3px 3px 20px #cccccc; + } + #username { + width: 260px; + height: 30px; + border: 1px solid #ccc; + border-radius: 5px; + text-indent: 0.5em; + } + #password { + width: 260px; + height: 30px; + border: 1px solid #ccc; + border-radius: 5px; + text-indent: 0.5em; + } + #LoginForm1BtnCtId { + width: 95px; + height: 35px; + border: none; + border-radius: 3px; + font-size: 13px; + } + .userPrompt{ + color: red; + font-size: 12px; + } + #tip { + position:absolute; + top:108%; + left:75px; + color: #848383; + line-height:24px; + } + + } \ No newline at end of file diff --git a/src/main/webapp/css/mc.css b/src/main/webapp/css/mc.css new file mode 100644 index 0000000..fdf5146 --- /dev/null +++ b/src/main/webapp/css/mc.css @@ -0,0 +1,106 @@ +/** + * Mask + */ +.mc-mask { top:0; left:0; width:100%; height:100%; position:absolute; z-index:150; background-color:#000; opacity:0.6; filter:alpha(opacity=40);} + +/** + * Dialog + */ +.mc-dlg, .mc-dlg-nb { position:absolute; z-index:151; width:460px; border-radius:4px; outline:0; box-shadow: 0 0 10px rgba(0,0,0,.5); } +.mc-dlg-body, .mc-dlg-body-nb { background:#fafafa; border-radius: 0 0 4px 4px; color: #555; } +.mc-dlg { border:1px solid #6C92AD; background: none repeat scroll 0 0 white; } +.mc-dlg-head { color:#FFFFFF; cursor:move; height:27px; line-height:27px; padding:0 10px; background-color:#1F5699; background:url("../lib/mc/images/win_hd_bg.png") 0 -45px repeat-x;} +.mc-dlg-title { float: left; font-size: 12px; font-weight: bold; } +.mc-dlg-close { background:url("../lib/mc/images/w_hd_bg.png") 0 -64px no-repeat; line-height:20px; position:absolute; right:3px; top:3px; cursor:pointer; height:20px; width:20px; float:right; } +.mc-dlg-close:hover {background-position: 0 -96px; } +.mc-dlg-foot { background-color: #F6F9FC; border-color: #6C92AD; border-style: solid; border-width: 1px 0 0 0; height: 38px; margin-top: -4px; padding: 4px 10px; border-radius: 0 0 4px 4px; } +.mc-dlg-foot .mc-dlg-btn {font-size: 12px; height: 15px; line-height: 15px; margin-right: 8px; padding: 5px 12px;} +.mc-dlg-btn .mc-btn { + padding: 5px 15px; margin-bottom: 0; *margin-left: .3em; + font-size: 14px; line-height: 20px; + color: #333333; text-align: center; text-shadow: 0 1px 1px rgba(255, 255, 255, 0.75); + vertical-align: middle; cursor: pointer; + background:#DFDFDF; + background: -webkit-gradient(linear, left top, left bottom, from(#f1f1f1), to(#DFDFDF)); + background: -moz-linear-gradient(top, #f1f1f1, #DFDFDF); + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffffff', endColorstr='#ffdfdfdf', GradientType=0); + filter: progid:DXImageTransform.Microsoft.gradient(enabled=false); + box-shadow:-1px 0px 1px 0px #fff inset;border-radius:4px; + display: inline-block; *display: inline; + border: 1px solid #bbbbbb; + *zoom: 1; +} +.mc-dlg-btn .mc-btn-green { + color: #ffffff; + text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25); + background-color: #93D727; + background-image: -webkit-gradient(linear, left top, left bottom, from(#93D727), to(#67AC03)); + background-image: -moz-linear-gradient(top, #93D727, #67AC03); + background-image: linear-gradient(to bottom, #93D727, #67AC03); + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#FF93D727', endColorstr='#FF67AC03', GradientType=0); + filter: progid:DXImageTransform.Microsoft.gradient(enabled=false); + box-shadow:-1px 0px 1px 0px #fff inset; + border-radius:4px; + border:1px solid #67AC03; +} + +.mc-dlg-nb { padding: 3px; background: url("../lib/mc/images/dlg_bg.png") repeat; } +.mc-dlg-body-nb { border-radius: 4px; border:1px solid #666; } +.mc-dlg-nb-close { background:url("../lib/mc/images/win_close.jpg") no-repeat scroll 0 0 transparent; position:absolute; right:6px; top:6px; cursor:pointer; height:32px; width:32px; } +.mc-dlg-nb-tl { background: url("../lib/mc/images/dlg_nb.png") no-repeat scroll -101px 0 transparent; height: 21px; width: 21px; } +.mc-dlg-nb-tc { background: url("../lib/mc/images/dlg_nb_bd.png") repeat-x scroll 0 0 transparent; height: 21px; } +.mc-dlg-nb-tr { background: url("../lib/mc/images/dlg_nb.png") no-repeat scroll -130px 0 transparent; height: 21px; width: 21px; } +.mc-dlg-nb-ml { background: url("../lib/mc/images/dlg_nb.png") repeat-y scroll left top transparent; width: 21px; } +.mc-dlg-nb-mr { background: url("../lib/mc/images/dlg_nb.png") repeat-y scroll right top transparent; width: 21px; } +.mc-dlg-nb-bl { background: url("../lib/mc/images/dlg_nb.png") no-repeat scroll -101px -29px transparent; height: 21px; width: 21px; } +.mc-dlg-nb-bc { background: url("../lib/mc/images/dlg_nb_bd.png") repeat-x scroll 0 -29px transparent; height: 21px; } +.mc-dlg-nb-br { background: url("../lib/mc/images/dlg_nb.png") no-repeat scroll -130px -29px transparent; height: 21px; width: 21px; } + +/** + * Msg + */ +.mc-msg-ct { position:fixed; top:0px; z-index:50000; } +.mc-msg { min-width:120px; border-radius:0 0 6px 6px; min-height:26px; display:block; text-align:center; font-weight:bold; } +.mc-msg.info { background: url("../lib/mc/images/msg_info.png") repeat-x scroll 0 0; border: 1px solid #227700; } +.mc-msg.warn { background: url("../lib/mc/images/msg_warn.png") repeat-x scroll 0 0; border: 1px solid #880000; } +.mc-msg.loading { background: url("../lib/mc/images/msg_loading.png") repeat-x scroll 0 0; } +.mc-msg-content { padding: 6px 20px; color:#FFFFFF; } +.mc-msg-icon { background:url("../lib/mc/images/icon_loading.gif") 100% 100% scroll no-repeat; margin-right:8px; height:14px; width:15px; float:left; display: inline-block; vertical-align:middle;} +.mc-msg-dlg-ct { padding: 25px 10px 30px 75px; position: relative; zoom: 1; } +.mc-msg-dlg-text { font-size: 14px; padding: 0 30px; } +.mc-msg-dlg-icon { position: absolute; left: 25px; top: 20px; width: 32px; height: 32px; background: url(../lib/mc/images/icon-info.gif) no-repeat; } +/** + * Toolbar + */ +.mc-toolbar-ct {clear: both; padding: 5px; white-space: nowrap; border-radius: 5px;} +.mc-toolbar-ct.white {background-color: #fff; border-radius: 0px;} +.mc-toolbar-ct.gray {background-color: #f5f5f5; border-bottom: 1px solid #c7c7c7;} +.mc-toolbar-right {float:right;} +.mc-toolbar-item {float:left; margin-right:10px; line-height:30px;} +/** + * Input + */ +.mc-tips {padding-left:5px;color: red;font-size: 12px; } +.mc-ipt-msg { color: #D90000!important } +.mc-ipt-tip, .mc-textarea-tip {position: absolute;color: #ccc;} +.mc-ipt-tip-show { position: absolute; color: #ccc; left:12px; top:10px;} +.mc-ipt-tip-query { position: absolute; color: #ccc; left:12px; top:3px;} +.mc-ipt-tip-login { color: red;font-size: 12px;display: none;} +/* css for timepicker */ +.ui-timepicker-div .ui-widget-header { margin-bottom: 8px; } +.ui-timepicker-div dl { text-align: left; } +.ui-timepicker-div dl dt { float: left; clear:left; padding: 0 0 0 5px; } +.ui-timepicker-div dl dd { margin: 0 10px 10px 45%; } +.ui-timepicker-div td { font-size: 90%; } +.ui-tpicker-grid-label { background: none; border: none; margin: 0; padding: 0; } +.ui-timepicker-rtl{ direction: rtl; } +.ui-timepicker-rtl dl { text-align: right; padding: 0 5px 0 0; } +.ui-timepicker-rtl dl dt{ float: right; clear: right; } +.ui-timepicker-rtl dl dd { margin: 0 45% 10px 10px; } +/** + * Paging + */ +.mc-pagi-cursor { float:left; cursor:pointer; border:1px solid #c8c7c7; text-align:center; padding:2px 6px; margin-right:8px; } +.mc-pagi-cursor a, .mc-pagi-cursor a:hover { color: #0B3B8C !important; } +.mc-pagi-cursor a:hover { text-decoration: underline; } +.mc-pagi-cursor-act { background-color: #7e96ff; border: 1px solid #5a6f8d; color: white !important; font-weight: bold; } \ No newline at end of file diff --git a/src/main/webapp/css/page.css b/src/main/webapp/css/page.css new file mode 100644 index 0000000..be81f63 --- /dev/null +++ b/src/main/webapp/css/page.css @@ -0,0 +1,28 @@ +.page{ + list-style: none; +} +.page>li{ + float: left; + padding: 5px 10px; + cursor: pointer; +} +.page .pageItem{ + border: solid thin #DDDDDD; + margin: 5px; +} +.page .pageItemActive{ + border: solid thin #0099FF; + margin: 5px; + background-color: #0099FF; + color:white; +} +.page .pageItem:hover{ + border: solid thin #0099FF; + background-color: #0099FF; + color:white; +} +.page .pageItemDisable{ + border: solid thin #DDDDDD; + margin: 5px; + background-color: #DDDDDD; +} \ No newline at end of file diff --git a/src/main/webapp/css/printOut.css b/src/main/webapp/css/printOut.css new file mode 100644 index 0000000..4eadc9b --- /dev/null +++ b/src/main/webapp/css/printOut.css @@ -0,0 +1,159 @@ +.order_print { + position: fixed; + top: 0px; + bottom: 0px; + left: 0px; + right: 0px; + background-color: rgba(0, 0, 0, 0.5); + overflow-y: auto; +} +.printWrap { + width: 710px; + margin:100px auto auto; + background: #ffffff; +} +.printTitle { + width: 100%; + height: 45px; + line-height: 45px; + background: #232227; + color: #ffffff; + text-align: center; +} +.printBtn { + display: inline-block; + width: 96px; + background: #13b7f6; + float: left; + border-right:1px solid #ffffff; +} +.printClose { + display: inline-block; + float: right; +} +.printClose img { + width: 20px; + margin-top: 0; + margin-right: 20px; +} +.printCon { + width:100%; + padding-top:2%; + letter-spacing: 1px; +} +.printCon hr { + width: 90%; + height:0; + border-top:1px solid #959699; +} +.PrintCase,.saveDetail{ + text-align: left; + width: 90%; + margin:0 5%; +} +.sign { + text-align: left; + width: 100%; + background: #e8e8ea; + margin-top: 10px; +} +.PrintCase tr th,.saveDetail tr th{ + font-weight: normal; + color: #666871; + height: 40px; + line-height: 40px; + position: relative; +} +.sign tr th { + font-weight: normal; + color: #666871; + height: 90px; + line-height: 90px; + position: relative; +} +.signList { + width:150px; + margin-left: 40px; + float: left; +} +.printSignList { + display: inline-block; + width: 5px; + height: 10px; + background: #666871; + position: absolute; + left: 25px; + top: 45px; + top: 40px; +} +.signImg { + width: 108px; + height: 40px; + float: left; + margin-top: 25px; +} +.PrintCase tr td { + color: #666871; + height: 30px; + line-height: 30px; + font-size:12px; +} +.PrintCase tr td span { + margin-right: 5px; +} +.PrintCase tr td:nth-child(1){ + width:40%; +} +.PrintCase tr td:nth-child(2){ + width:30%; +} +.PrintCase tr td:nth-child(3){ + width:30%; +} +.printList { + display: inline-block; + width: 5px; + height: 10px; + background: #666871; + position: absolute; + left: -15px; + top: 15px; +} +/* .saveDetail tr td { + width: 50%; + font-size: 12px; + color: #676A73; + height: 30px; + line-height: 30px; +} */ +.saveDetail tr td:nth-child(1) { + width: 20%; + font-size: 12px; + color: #676A73; + height: 30px; + line-height: 30px; +} +.saveDetail tr td:nth-child(2) { + width: 80%; + font-size: 12px; + color: #676A73; + height: 30px; + line-height: 30px; +} +.saveDetail tr td span { + width: 18px; + height: 20px; + display: inline-block; + margin-right: 25px; + border: 1px solid #acadb1; + border-radius: 4px; + color: #676A73; + line-height: 20px; + text-align: center; + letter-spacing: 0; +} +.sign tr th { + width: 50%; + background: #e8e8ea; + height: 90px; +} \ No newline at end of file diff --git a/src/main/webapp/css/search.css b/src/main/webapp/css/search.css new file mode 100644 index 0000000..01b4a85 --- /dev/null +++ b/src/main/webapp/css/search.css @@ -0,0 +1,82 @@ +.search { + margin: 15px 55px 10px 185px; +} +.searchTable { + width:100%; +} +table.searchTable td { + width: 25%; + padding-bottom:5px; +} +table.searchTable td:nth-last-child(1){ + width:25%; + } +table.searchTable td input { + width:63%; + height:28px; + line-height:28px; + border-radius: 5px; + border:1px solid #D2D2D2; + text-indent: 1em; + color:#AFAFAF; +} + +table.searchTable td select{ + width:63%; + height:33px; + line-height:30px; + border-radius: 5px; + border:1px solid #D2D2D2; + text-indent: 1em; + color:#AFAFAF; +} +.Wdate { + padding-left:0; + } +table.searchTable td span { + color:#000000; + text-align: right; +} +input:focus{outline:0 !important} +.searchTable input::-webkit-input-placeholder { + color : #AFAFAF; +} +.searchTable input::-moz-input-placeholder { + color : #AFAFAF; +} +.searchTable input::-ms-input-placeholder { + color : #AFAFAF; +} +.searchTable input::-o-input-placeholder { + color : #AFAFAF; +} +.searchBtn { + background: #036EB7; + border: 1px solid #036EB7; + border-radius: 3px; + color: #ffffff; + padding: 6px 14px; + display: block; + float:right; +} +.searchBtn2 { + background: #ffffff; + border:1px dashed #036EB7; + border-radius: 3px; + color:#036EB7; + padding: 6px 14px; + display: block; + float:right; +} +.searchIcon { + margin-top: -3px; + margin-right: 7px; +} +.textbox .textbox-text { + padding:0; + border-radius: 10px; +} +.inputTitle { + width: 75px; + display: inline-block; +} \ No newline at end of file diff --git a/src/main/webapp/css/style.css b/src/main/webapp/css/style.css new file mode 100644 index 0000000..46681ce --- /dev/null +++ b/src/main/webapp/css/style.css @@ -0,0 +1,1159 @@ +@font-face { + font-family: 'ElegantIcons'; + src:url('fonts/ElegantIcons.eot'); + src:url('fonts/ElegantIcons.eot?#iefix') format('embedded-opentype'), + url('fonts/ElegantIcons.woff') format('woff'), + url('fonts/ElegantIcons.ttf') format('truetype'), + url('fonts/ElegantIcons.svg#ElegantIcons') format('svg'); + font-weight: normal; + font-style: normal; +} + +/* Use the following CSS code if you want to use data attributes for inserting your icons */ +[data-icon]:before { + font-family: 'ElegantIcons'; + content: attr(data-icon); + speak: none; + font-weight: normal; + font-variant: normal; + text-transform: none; + line-height: 1; + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; +} + +/* Use the following CSS code if you want to have a class per icon */ +/* +Instead of a list of all class selectors, +you can use the generic selector below, but it's slower: +[class*="your-class-prefix"] { +*/ +.arrow_up, .arrow_down, .arrow_left, .arrow_right, .arrow_left-up, .arrow_right-up, .arrow_right-down, .arrow_left-down, .arrow-up-down, .arrow_up-down_alt, .arrow_left-right_alt, .arrow_left-right, .arrow_expand_alt2, .arrow_expand_alt, .arrow_condense, .arrow_expand, .arrow_move, .arrow_carrot-up, .arrow_carrot-down, .arrow_carrot-left, .arrow_carrot-right, .arrow_carrot-2up, .arrow_carrot-2down, .arrow_carrot-2left, .arrow_carrot-2right, .arrow_carrot-up_alt2, .arrow_carrot-down_alt2, .arrow_carrot-left_alt2, .arrow_carrot-right_alt2, .arrow_carrot-2up_alt2, .arrow_carrot-2down_alt2, .arrow_carrot-2left_alt2, .arrow_carrot-2right_alt2, .arrow_triangle-up, .arrow_triangle-down, .arrow_triangle-left, .arrow_triangle-right, .arrow_triangle-up_alt2, .arrow_triangle-down_alt2, .arrow_triangle-left_alt2, .arrow_triangle-right_alt2, .arrow_back, .icon_minus-06, .icon_plus, .icon_close, .icon_check, .icon_minus_alt2, .icon_plus_alt2, .icon_close_alt2, .icon_check_alt2, .icon_zoom-out_alt, .icon_zoom-in_alt, .icon_search, .icon_box-empty, .icon_box-selected, .icon_minus-box, .icon_plus-box, .icon_box-checked, .icon_circle-empty, .icon_circle-slelected, .icon_stop_alt2, .icon_stop, .icon_pause_alt2, .icon_pause, .icon_menu, .icon_menu-square_alt2, .icon_menu-circle_alt2, .icon_ul, .icon_ol, .icon_adjust-horiz, .icon_adjust-vert, .icon_document_alt, .icon_documents_alt, .icon_pencil, .icon_pencil-edit_alt, .icon_pencil-edit, .icon_folder-alt, .icon_folder-open_alt, .icon_folder-add_alt, .icon_info_alt, .icon_error-oct_alt, .icon_error-circle_alt, .icon_error-triangle_alt, .icon_question_alt2, .icon_question, .icon_comment_alt, .icon_chat_alt, .icon_vol-mute_alt, .icon_volume-low_alt, .icon_volume-high_alt, .icon_quotations, .icon_quotations_alt2, .icon_clock_alt, .icon_lock_alt, .icon_lock-open_alt, .icon_key_alt, .icon_cloud_alt, .icon_cloud-upload_alt, .icon_cloud-download_alt, .icon_image, .icon_images, .icon_lightbulb_alt, .icon_gift_alt, .icon_house_alt, .icon_genius, .icon_mobile, .icon_tablet, .icon_laptop, .icon_desktop, .icon_camera_alt, .icon_mail_alt, .icon_cone_alt, .icon_ribbon_alt, .icon_bag_alt, .icon_creditcard, .icon_cart_alt, .icon_paperclip, .icon_tag_alt, .icon_tags_alt, .icon_trash_alt, .icon_cursor_alt, .icon_mic_alt, .icon_compass_alt, .icon_pin_alt, .icon_pushpin_alt, .icon_map_alt, .icon_drawer_alt, .icon_toolbox_alt, .icon_book_alt, .icon_calendar, .icon_film, .icon_table, .icon_contacts_alt, .icon_headphones, .icon_lifesaver, .icon_piechart, .icon_refresh, .icon_link_alt, .icon_link, .icon_loading, .icon_blocked, .icon_archive_alt, .icon_heart_alt, .icon_star_alt, .icon_star-half_alt, .icon_star, .icon_star-half, .icon_tools, .icon_tool, .icon_cog, .icon_cogs, .arrow_up_alt, .arrow_down_alt, .arrow_left_alt, .arrow_right_alt, .arrow_left-up_alt, .arrow_right-up_alt, .arrow_right-down_alt, .arrow_left-down_alt, .arrow_condense_alt, .arrow_expand_alt3, .arrow_carrot_up_alt, .arrow_carrot-down_alt, .arrow_carrot-left_alt, .arrow_carrot-right_alt, .arrow_carrot-2up_alt, .arrow_carrot-2dwnn_alt, .arrow_carrot-2left_alt, .arrow_carrot-2right_alt, .arrow_triangle-up_alt, .arrow_triangle-down_alt, .arrow_triangle-left_alt, .arrow_triangle-right_alt, .icon_minus_alt, .icon_plus_alt, .icon_close_alt, .icon_check_alt, .icon_zoom-out, .icon_zoom-in, .icon_stop_alt, .icon_menu-square_alt, .icon_menu-circle_alt, .icon_document, .icon_documents, .icon_pencil_alt, .icon_folder, .icon_folder-open, .icon_folder-add, .icon_folder_upload, .icon_folder_download, .icon_info, .icon_error-circle, .icon_error-oct, .icon_error-triangle, .icon_question_alt, .icon_comment, .icon_chat, .icon_vol-mute, .icon_volume-low, .icon_volume-high, .icon_quotations_alt, .icon_clock, .icon_lock, .icon_lock-open, .icon_key, .icon_cloud, .icon_cloud-upload, .icon_cloud-download, .icon_lightbulb, .icon_gift, .icon_house, .icon_camera, .icon_mail, .icon_cone, .icon_ribbon, .icon_bag, .icon_cart, .icon_tag, .icon_tags, .icon_trash, .icon_cursor, .icon_mic, .icon_compass, .icon_pin, .icon_pushpin, .icon_map, .icon_drawer, .icon_toolbox, .icon_book, .icon_contacts, .icon_archive, .icon_heart, .icon_profile, .icon_group, .icon_grid-2x2, .icon_grid-3x3, .icon_music, .icon_pause_alt, .icon_phone, .icon_upload, .icon_download, .social_facebook, .social_twitter, .social_pinterest, .social_googleplus, .social_tumblr, .social_tumbleupon, .social_wordpress, .social_instagram, .social_dribbble, .social_vimeo, .social_linkedin, .social_rss, .social_deviantart, .social_share, .social_myspace, .social_skype, .social_youtube, .social_picassa, .social_googledrive, .social_flickr, .social_blogger, .social_spotify, .social_delicious, .social_facebook_circle, .social_twitter_circle, .social_pinterest_circle, .social_googleplus_circle, .social_tumblr_circle, .social_stumbleupon_circle, .social_wordpress_circle, .social_instagram_circle, .social_dribbble_circle, .social_vimeo_circle, .social_linkedin_circle, .social_rss_circle, .social_deviantart_circle, .social_share_circle, .social_myspace_circle, .social_skype_circle, .social_youtube_circle, .social_picassa_circle, .social_googledrive_alt2, .social_flickr_circle, .social_blogger_circle, .social_spotify_circle, .social_delicious_circle, .social_facebook_square, .social_twitter_square, .social_pinterest_square, .social_googleplus_square, .social_tumblr_square, .social_stumbleupon_square, .social_wordpress_square, .social_instagram_square, .social_dribbble_square, .social_vimeo_square, .social_linkedin_square, .social_rss_square, .social_deviantart_square, .social_share_square, .social_myspace_square, .social_skype_square, .social_youtube_square, .social_picassa_square, .social_googledrive_square, .social_flickr_square, .social_blogger_square, .social_spotify_square, .social_delicious_square, .icon_printer, .icon_calulator, .icon_building, .icon_floppy, .icon_drive, .icon_search-2, .icon_id, .icon_id-2, .icon_puzzle, .icon_like, .icon_dislike, .icon_mug, .icon_currency, .icon_wallet, .icon_pens, .icon_easel, .icon_flowchart, .icon_datareport, .icon_briefcase, .icon_shield, .icon_percent, .icon_globe, .icon_globe-2, .icon_target, .icon_hourglass, .icon_balance, .icon_rook, .icon_printer-alt, .icon_calculator_alt, .icon_building_alt, .icon_floppy_alt, .icon_drive_alt, .icon_search_alt, .icon_id_alt, .icon_id-2_alt, .icon_puzzle_alt, .icon_like_alt, .icon_dislike_alt, .icon_mug_alt, .icon_currency_alt, .icon_wallet_alt, .icon_pens_alt, .icon_easel_alt, .icon_flowchart_alt, .icon_datareport_alt, .icon_briefcase_alt, .icon_shield_alt, .icon_percent_alt, .icon_globe_alt, .icon_clipboard { + font-family: 'ElegantIcons'; + speak: none; + font-style: normal; + font-weight: normal; + font-variant: normal; + text-transform: none; + line-height: 1; + -webkit-font-smoothing: antialiased; +} +.arrow_up:before { + content: "\21"; +} +.arrow_down:before { + content: "\22"; +} +.arrow_left:before { + content: "\23"; +} +.arrow_right:before { + content: "\24"; +} +.arrow_left-up:before { + content: "\25"; +} +.arrow_right-up:before { + content: "\26"; +} +.arrow_right-down:before { + content: "\27"; +} +.arrow_left-down:before { + content: "\28"; +} +.arrow-up-down:before { + content: "\29"; +} +.arrow_up-down_alt:before { + content: "\2a"; +} +.arrow_left-right_alt:before { + content: "\2b"; +} +.arrow_left-right:before { + content: "\2c"; +} +.arrow_expand_alt2:before { + content: "\2d"; +} +.arrow_expand_alt:before { + content: "\2e"; +} +.arrow_condense:before { + content: "\2f"; +} +.arrow_expand:before { + content: "\30"; +} +.arrow_move:before { + content: "\31"; +} +.arrow_carrot-up:before { + content: "\32"; +} +.arrow_carrot-down:before { + content: "\33"; +} +.arrow_carrot-left:before { + content: "\34"; +} +.arrow_carrot-right:before { + content: "\35"; +} +.arrow_carrot-2up:before { + content: "\36"; +} +.arrow_carrot-2down:before { + content: "\37"; +} +.arrow_carrot-2left:before { + content: "\38"; +} +.arrow_carrot-2right:before { + content: "\39"; +} +.arrow_carrot-up_alt2:before { + content: "\3a"; +} +.arrow_carrot-down_alt2:before { + content: "\3b"; +} +.arrow_carrot-left_alt2:before { + content: "\3c"; +} +.arrow_carrot-right_alt2:before { + content: "\3d"; +} +.arrow_carrot-2up_alt2:before { + content: "\3e"; +} +.arrow_carrot-2down_alt2:before { + content: "\3f"; +} +.arrow_carrot-2left_alt2:before { + content: "\40"; +} +.arrow_carrot-2right_alt2:before { + content: "\41"; +} +.arrow_triangle-up:before { + content: "\42"; +} +.arrow_triangle-down:before { + content: "\43"; +} +.arrow_triangle-left:before { + content: "\44"; +} +.arrow_triangle-right:before { + content: "\45"; +} +.arrow_triangle-up_alt2:before { + content: "\46"; +} +.arrow_triangle-down_alt2:before { + content: "\47"; +} +.arrow_triangle-left_alt2:before { + content: "\48"; +} +.arrow_triangle-right_alt2:before { + content: "\49"; +} +.arrow_back:before { + content: "\4a"; +} +.icon_minus-06:before { + content: "\4b"; +} +.icon_plus:before { + content: "\4c"; +} +.icon_close:before { + content: "\4d"; +} +.icon_check:before { + content: "\4e"; +} +.icon_minus_alt2:before { + content: "\4f"; +} +.icon_plus_alt2:before { + content: "\50"; +} +.icon_close_alt2:before { + content: "\51"; +} +.icon_check_alt2:before { + content: "\52"; +} +.icon_zoom-out_alt:before { + content: "\53"; +} +.icon_zoom-in_alt:before { + content: "\54"; +} +.icon_search:before { + content: "\55"; +} +.icon_box-empty:before { + content: "\56"; +} +.icon_box-selected:before { + content: "\57"; +} +.icon_minus-box:before { + content: "\58"; +} +.icon_plus-box:before { + content: "\59"; +} +.icon_box-checked:before { + content: "\5a"; +} +.icon_circle-empty:before { + content: "\5b"; +} +.icon_circle-slelected:before { + content: "\5c"; +} +.icon_stop_alt2:before { + content: "\5d"; +} +.icon_stop:before { + content: "\5e"; +} +.icon_pause_alt2:before { + content: "\5f"; +} +.icon_pause:before { + content: "\60"; +} +.icon_menu:before { + content: "\61"; +} +.icon_menu-square_alt2:before { + content: "\62"; +} +.icon_menu-circle_alt2:before { + content: "\63"; +} +.icon_ul:before { + content: "\64"; +} +.icon_ol:before { + content: "\65"; +} +.icon_adjust-horiz:before { + content: "\66"; +} +.icon_adjust-vert:before { + content: "\67"; +} +.icon_document_alt:before { + content: "\68"; +} +.icon_documents_alt:before { + content: "\69"; +} +.icon_pencil:before { + content: "\6a"; +} +.icon_pencil-edit_alt:before { + content: "\6b"; +} +.icon_pencil-edit:before { + content: "\6c"; +} +.icon_folder-alt:before { + content: "\6d"; +} +.icon_folder-open_alt:before { + content: "\6e"; +} +.icon_folder-add_alt:before { + content: "\6f"; +} +.icon_info_alt:before { + content: "\70"; +} +.icon_error-oct_alt:before { + content: "\71"; +} +.icon_error-circle_alt:before { + content: "\72"; +} +.icon_error-triangle_alt:before { + content: "\73"; +} +.icon_question_alt2:before { + content: "\74"; +} +.icon_question:before { + content: "\75"; +} +.icon_comment_alt:before { + content: "\76"; +} +.icon_chat_alt:before { + content: "\77"; +} +.icon_vol-mute_alt:before { + content: "\78"; +} +.icon_volume-low_alt:before { + content: "\79"; +} +.icon_volume-high_alt:before { + content: "\7a"; +} +.icon_quotations:before { + content: "\7b"; +} +.icon_quotations_alt2:before { + content: "\7c"; +} +.icon_clock_alt:before { + content: "\7d"; +} +.icon_lock_alt:before { + content: "\7e"; +} +.icon_lock-open_alt:before { + content: "\e000"; +} +.icon_key_alt:before { + content: "\e001"; +} +.icon_cloud_alt:before { + content: "\e002"; +} +.icon_cloud-upload_alt:before { + content: "\e003"; +} +.icon_cloud-download_alt:before { + content: "\e004"; +} +.icon_image:before { + content: "\e005"; +} +.icon_images:before { + content: "\e006"; +} +.icon_lightbulb_alt:before { + content: "\e007"; +} +.icon_gift_alt:before { + content: "\e008"; +} +.icon_house_alt:before { + content: "\e009"; +} +.icon_genius:before { + content: "\e00a"; +} +.icon_mobile:before { + content: "\e00b"; +} +.icon_tablet:before { + content: "\e00c"; +} +.icon_laptop:before { + content: "\e00d"; +} +.icon_desktop:before { + content: "\e00e"; +} +.icon_camera_alt:before { + content: "\e00f"; +} +.icon_mail_alt:before { + content: "\e010"; +} +.icon_cone_alt:before { + content: "\e011"; +} +.icon_ribbon_alt:before { + content: "\e012"; +} +.icon_bag_alt:before { + content: "\e013"; +} +.icon_creditcard:before { + content: "\e014"; +} +.icon_cart_alt:before { + content: "\e015"; +} +.icon_paperclip:before { + content: "\e016"; +} +.icon_tag_alt:before { + content: "\e017"; +} +.icon_tags_alt:before { + content: "\e018"; +} +.icon_trash_alt:before { + content: "\e019"; +} +.icon_cursor_alt:before { + content: "\e01a"; +} +.icon_mic_alt:before { + content: "\e01b"; +} +.icon_compass_alt:before { + content: "\e01c"; +} +.icon_pin_alt:before { + content: "\e01d"; +} +.icon_pushpin_alt:before { + content: "\e01e"; +} +.icon_map_alt:before { + content: "\e01f"; +} +.icon_drawer_alt:before { + content: "\e020"; +} +.icon_toolbox_alt:before { + content: "\e021"; +} +.icon_book_alt:before { + content: "\e022"; +} +.icon_calendar:before { + content: "\e023"; +} +.icon_film:before { + content: "\e024"; +} +.icon_table:before { + content: "\e025"; +} +.icon_contacts_alt:before { + content: "\e026"; +} +.icon_headphones:before { + content: "\e027"; +} +.icon_lifesaver:before { + content: "\e028"; +} +.icon_piechart:before { + content: "\e029"; +} +.icon_refresh:before { + content: "\e02a"; +} +.icon_link_alt:before { + content: "\e02b"; +} +.icon_link:before { + content: "\e02c"; +} +.icon_loading:before { + content: "\e02d"; +} +.icon_blocked:before { + content: "\e02e"; +} +.icon_archive_alt:before { + content: "\e02f"; +} +.icon_heart_alt:before { + content: "\e030"; +} +.icon_star_alt:before { + content: "\e031"; +} +.icon_star-half_alt:before { + content: "\e032"; +} +.icon_star:before { + content: "\e033"; +} +.icon_star-half:before { + content: "\e034"; +} +.icon_tools:before { + content: "\e035"; +} +.icon_tool:before { + content: "\e036"; +} +.icon_cog:before { + content: "\e037"; +} +.icon_cogs:before { + content: "\e038"; +} +.arrow_up_alt:before { + content: "\e039"; +} +.arrow_down_alt:before { + content: "\e03a"; +} +.arrow_left_alt:before { + content: "\e03b"; +} +.arrow_right_alt:before { + content: "\e03c"; +} +.arrow_left-up_alt:before { + content: "\e03d"; +} +.arrow_right-up_alt:before { + content: "\e03e"; +} +.arrow_right-down_alt:before { + content: "\e03f"; +} +.arrow_left-down_alt:before { + content: "\e040"; +} +.arrow_condense_alt:before { + content: "\e041"; +} +.arrow_expand_alt3:before { + content: "\e042"; +} +.arrow_carrot_up_alt:before { + content: "\e043"; +} +.arrow_carrot-down_alt:before { + content: "\e044"; +} +.arrow_carrot-left_alt:before { + content: "\e045"; +} +.arrow_carrot-right_alt:before { + content: "\e046"; +} +.arrow_carrot-2up_alt:before { + content: "\e047"; +} +.arrow_carrot-2dwnn_alt:before { + content: "\e048"; +} +.arrow_carrot-2left_alt:before { + content: "\e049"; +} +.arrow_carrot-2right_alt:before { + content: "\e04a"; +} +.arrow_triangle-up_alt:before { + content: "\e04b"; +} +.arrow_triangle-down_alt:before { + content: "\e04c"; +} +.arrow_triangle-left_alt:before { + content: "\e04d"; +} +.arrow_triangle-right_alt:before { + content: "\e04e"; +} +.icon_minus_alt:before { + content: "\e04f"; +} +.icon_plus_alt:before { + content: "\e050"; +} +.icon_close_alt:before { + content: "\e051"; +} +.icon_check_alt:before { + content: "\e052"; +} +.icon_zoom-out:before { + content: "\e053"; +} +.icon_zoom-in:before { + content: "\e054"; +} +.icon_stop_alt:before { + content: "\e055"; +} +.icon_menu-square_alt:before { + content: "\e056"; +} +.icon_menu-circle_alt:before { + content: "\e057"; +} +.icon_document:before { + content: "\e058"; +} +.icon_documents:before { + content: "\e059"; +} +.icon_pencil_alt:before { + content: "\e05a"; +} +.icon_folder:before { + content: "\e05b"; +} +.icon_folder-open:before { + content: "\e05c"; +} +.icon_folder-add:before { + content: "\e05d"; +} +.icon_folder_upload:before { + content: "\e05e"; +} +.icon_folder_download:before { + content: "\e05f"; +} +.icon_info:before { + content: "\e060"; +} +.icon_error-circle:before { + content: "\e061"; +} +.icon_error-oct:before { + content: "\e062"; +} +.icon_error-triangle:before { + content: "\e063"; +} +.icon_question_alt:before { + content: "\e064"; +} +.icon_comment:before { + content: "\e065"; +} +.icon_chat:before { + content: "\e066"; +} +.icon_vol-mute:before { + content: "\e067"; +} +.icon_volume-low:before { + content: "\e068"; +} +.icon_volume-high:before { + content: "\e069"; +} +.icon_quotations_alt:before { + content: "\e06a"; +} +.icon_clock:before { + content: "\e06b"; +} +.icon_lock:before { + content: "\e06c"; +} +.icon_lock-open:before { + content: "\e06d"; +} +.icon_key:before { + content: "\e06e"; +} +.icon_cloud:before { + content: "\e06f"; +} +.icon_cloud-upload:before { + content: "\e070"; +} +.icon_cloud-download:before { + content: "\e071"; +} +.icon_lightbulb:before { + content: "\e072"; +} +.icon_gift:before { + content: "\e073"; +} +.icon_house:before { + content: "\e074"; +} +.icon_camera:before { + content: "\e075"; +} +.icon_mail:before { + content: "\e076"; +} +.icon_cone:before { + content: "\e077"; +} +.icon_ribbon:before { + content: "\e078"; +} +.icon_bag:before { + content: "\e079"; +} +.icon_cart:before { + content: "\e07a"; +} +.icon_tag:before { + content: "\e07b"; +} +.icon_tags:before { + content: "\e07c"; +} +.icon_trash:before { + content: "\e07d"; +} +.icon_cursor:before { + content: "\e07e"; +} +.icon_mic:before { + content: "\e07f"; +} +.icon_compass:before { + content: "\e080"; +} +.icon_pin:before { + content: "\e081"; +} +.icon_pushpin:before { + content: "\e082"; +} +.icon_map:before { + content: "\e083"; +} +.icon_drawer:before { + content: "\e084"; +} +.icon_toolbox:before { + content: "\e085"; +} +.icon_book:before { + content: "\e086"; +} +.icon_contacts:before { + content: "\e087"; +} +.icon_archive:before { + content: "\e088"; +} +.icon_heart:before { + content: "\e089"; +} +.icon_profile:before { + content: "\e08a"; +} +.icon_group:before { + content: "\e08b"; +} +.icon_grid-2x2:before { + content: "\e08c"; +} +.icon_grid-3x3:before { + content: "\e08d"; +} +.icon_music:before { + content: "\e08e"; +} +.icon_pause_alt:before { + content: "\e08f"; +} +.icon_phone:before { + content: "\e090"; +} +.icon_upload:before { + content: "\e091"; +} +.icon_download:before { + content: "\e092"; +} +.social_facebook:before { + content: "\e093"; +} +.social_twitter:before { + content: "\e094"; +} +.social_pinterest:before { + content: "\e095"; +} +.social_googleplus:before { + content: "\e096"; +} +.social_tumblr:before { + content: "\e097"; +} +.social_tumbleupon:before { + content: "\e098"; +} +.social_wordpress:before { + content: "\e099"; +} +.social_instagram:before { + content: "\e09a"; +} +.social_dribbble:before { + content: "\e09b"; +} +.social_vimeo:before { + content: "\e09c"; +} +.social_linkedin:before { + content: "\e09d"; +} +.social_rss:before { + content: "\e09e"; +} +.social_deviantart:before { + content: "\e09f"; +} +.social_share:before { + content: "\e0a0"; +} +.social_myspace:before { + content: "\e0a1"; +} +.social_skype:before { + content: "\e0a2"; +} +.social_youtube:before { + content: "\e0a3"; +} +.social_picassa:before { + content: "\e0a4"; +} +.social_googledrive:before { + content: "\e0a5"; +} +.social_flickr:before { + content: "\e0a6"; +} +.social_blogger:before { + content: "\e0a7"; +} +.social_spotify:before { + content: "\e0a8"; +} +.social_delicious:before { + content: "\e0a9"; +} +.social_facebook_circle:before { + content: "\e0aa"; +} +.social_twitter_circle:before { + content: "\e0ab"; +} +.social_pinterest_circle:before { + content: "\e0ac"; +} +.social_googleplus_circle:before { + content: "\e0ad"; +} +.social_tumblr_circle:before { + content: "\e0ae"; +} +.social_stumbleupon_circle:before { + content: "\e0af"; +} +.social_wordpress_circle:before { + content: "\e0b0"; +} +.social_instagram_circle:before { + content: "\e0b1"; +} +.social_dribbble_circle:before { + content: "\e0b2"; +} +.social_vimeo_circle:before { + content: "\e0b3"; +} +.social_linkedin_circle:before { + content: "\e0b4"; +} +.social_rss_circle:before { + content: "\e0b5"; +} +.social_deviantart_circle:before { + content: "\e0b6"; +} +.social_share_circle:before { + content: "\e0b7"; +} +.social_myspace_circle:before { + content: "\e0b8"; +} +.social_skype_circle:before { + content: "\e0b9"; +} +.social_youtube_circle:before { + content: "\e0ba"; +} +.social_picassa_circle:before { + content: "\e0bb"; +} +.social_googledrive_alt2:before { + content: "\e0bc"; +} +.social_flickr_circle:before { + content: "\e0bd"; +} +.social_blogger_circle:before { + content: "\e0be"; +} +.social_spotify_circle:before { + content: "\e0bf"; +} +.social_delicious_circle:before { + content: "\e0c0"; +} +.social_facebook_square:before { + content: "\e0c1"; +} +.social_twitter_square:before { + content: "\e0c2"; +} +.social_pinterest_square:before { + content: "\e0c3"; +} +.social_googleplus_square:before { + content: "\e0c4"; +} +.social_tumblr_square:before { + content: "\e0c5"; +} +.social_stumbleupon_square:before { + content: "\e0c6"; +} +.social_wordpress_square:before { + content: "\e0c7"; +} +.social_instagram_square:before { + content: "\e0c8"; +} +.social_dribbble_square:before { + content: "\e0c9"; +} +.social_vimeo_square:before { + content: "\e0ca"; +} +.social_linkedin_square:before { + content: "\e0cb"; +} +.social_rss_square:before { + content: "\e0cc"; +} +.social_deviantart_square:before { + content: "\e0cd"; +} +.social_share_square:before { + content: "\e0ce"; +} +.social_myspace_square:before { + content: "\e0cf"; +} +.social_skype_square:before { + content: "\e0d0"; +} +.social_youtube_square:before { + content: "\e0d1"; +} +.social_picassa_square:before { + content: "\e0d2"; +} +.social_googledrive_square:before { + content: "\e0d3"; +} +.social_flickr_square:before { + content: "\e0d4"; +} +.social_blogger_square:before { + content: "\e0d5"; +} +.social_spotify_square:before { + content: "\e0d6"; +} +.social_delicious_square:before { + content: "\e0d7"; +} +.icon_printer:before { + content: "\e103"; +} +.icon_calulator:before { + content: "\e0ee"; +} +.icon_building:before { + content: "\e0ef"; +} +.icon_floppy:before { + content: "\e0e8"; +} +.icon_drive:before { + content: "\e0ea"; +} +.icon_search-2:before { + content: "\e101"; +} +.icon_id:before { + content: "\e107"; +} +.icon_id-2:before { + content: "\e108"; +} +.icon_puzzle:before { + content: "\e102"; +} +.icon_like:before { + content: "\e106"; +} +.icon_dislike:before { + content: "\e0eb"; +} +.icon_mug:before { + content: "\e105"; +} +.icon_currency:before { + content: "\e0ed"; +} +.icon_wallet:before { + content: "\e100"; +} +.icon_pens:before { + content: "\e104"; +} +.icon_easel:before { + content: "\e0e9"; +} +.icon_flowchart:before { + content: "\e109"; +} +.icon_datareport:before { + content: "\e0ec"; +} +.icon_briefcase:before { + content: "\e0fe"; +} +.icon_shield:before { + content: "\e0f6"; +} +.icon_percent:before { + content: "\e0fb"; +} +.icon_globe:before { + content: "\e0e2"; +} +.icon_globe-2:before { + content: "\e0e3"; +} +.icon_target:before { + content: "\e0f5"; +} +.icon_hourglass:before { + content: "\e0e1"; +} +.icon_balance:before { + content: "\e0ff"; +} +.icon_rook:before { + content: "\e0f8"; +} +.icon_printer-alt:before { + content: "\e0fa"; +} +.icon_calculator_alt:before { + content: "\e0e7"; +} +.icon_building_alt:before { + content: "\e0fd"; +} +.icon_floppy_alt:before { + content: "\e0e4"; +} +.icon_drive_alt:before { + content: "\e0e5"; +} +.icon_search_alt:before { + content: "\e0f7"; +} +.icon_id_alt:before { + content: "\e0e0"; +} +.icon_id-2_alt:before { + content: "\e0fc"; +} +.icon_puzzle_alt:before { + content: "\e0f9"; +} +.icon_like_alt:before { + content: "\e0dd"; +} +.icon_dislike_alt:before { + content: "\e0f1"; +} +.icon_mug_alt:before { + content: "\e0dc"; +} +.icon_currency_alt:before { + content: "\e0f3"; +} +.icon_wallet_alt:before { + content: "\e0d8"; +} +.icon_pens_alt:before { + content: "\e0db"; +} +.icon_easel_alt:before { + content: "\e0f0"; +} +.icon_flowchart_alt:before { + content: "\e0df"; +} +.icon_datareport_alt:before { + content: "\e0f2"; +} +.icon_briefcase_alt:before { + content: "\e0f4"; +} +.icon_shield_alt:before { + content: "\e0d9"; +} +.icon_percent_alt:before { + content: "\e0da"; +} +.icon_globe_alt:before { + content: "\e0de"; +} +.icon_clipboard:before { + content: "\e0e6"; +} + + + .glyph { + float: left; + text-align: center; + padding: .75em; + margin: .4em 1.5em .75em 0; + width: 6em; +text-shadow: none; + } + .glyph_big { + font-size: 128px; + color: #59c5dc; + float: left; + margin-right: 20px; + } + + .glyph div { padding-bottom: 10px;} + + .glyph input { + font-family: consolas, monospace; + font-size: 12px; + width: 100%; + text-align: center; + border: 0; + box-shadow: 0 0 0 1px #ccc; + padding: .2em; + -moz-border-radius: 5px; + -webkit-border-radius: 5px; + } + .centered { + margin-left: auto; + margin-right: auto; + } + .glyph .fs1 { + font-size: 2em; + } + + diff --git a/src/main/webapp/css/themes/black/accordion.css b/src/main/webapp/css/themes/black/accordion.css new file mode 100644 index 0000000..b2dba52 --- /dev/null +++ b/src/main/webapp/css/themes/black/accordion.css @@ -0,0 +1,89 @@ +.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; +} +.accordion-expand { + background: url('images/accordion_arrows.png') no-repeat -16px 0; +} +.accordion { + background: #666; + border-color: #000; +} +.accordion .accordion-header { + background: #3d3d3d; + filter: none; +} +.accordion .accordion-header-selected { + background: #0052A3; +} +.accordion .accordion-header-selected .panel-title { + color: #fff; +} +.accordion .panel-last > .accordion-header { + border-bottom-color: #3d3d3d; +} +.accordion .panel-last > .accordion-body { + border-bottom-color: #666; +} +.accordion .panel-last > .accordion-header-selected, +.accordion .panel-last > .accordion-header-border { + border-bottom-color: #000; +} +.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: #3d3d3d; +} +.accordion> .panel-hleft.panel-last > .accordion-body { + border-right-color: #666; +} +.accordion> .panel-hleft.panel-last > .accordion-header-selected, +.accordion> .panel-hleft.panel-last > .accordion-header-border { + border-right-color: #000; +} +.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: #3d3d3d; +} +.accordion> .panel-hright.panel-last > .accordion-body { + border-left-color: #666; +} +.accordion> .panel-hright.panel-last > .accordion-header-selected, +.accordion> .panel-hright.panel-last > .accordion-header-border { + border-left-color: #000; +} diff --git a/src/main/webapp/css/themes/black/calendar.css b/src/main/webapp/css/themes/black/calendar.css new file mode 100644 index 0000000..5e71d3e --- /dev/null +++ b/src/main/webapp/css/themes/black/calendar.css @@ -0,0 +1,202 @@ +.calendar { + border-width: 1px; + border-style: solid; + padding: 1px; + overflow: hidden; +} +.calendar table { + table-layout: fixed; + border-collapse: separate; + font-size: 12px; + width: 100%; + height: 100%; +} +.calendar table td, +.calendar table th { + font-size: 12px; +} +.calendar-noborder { + border: 0; +} +.calendar-header { + position: relative; + height: 22px; +} +.calendar-title { + text-align: center; + height: 22px; +} +.calendar-title span { + position: relative; + display: inline-block; + top: 2px; + padding: 0 3px; + height: 18px; + line-height: 18px; + font-size: 12px; + cursor: pointer; + -moz-border-radius: 5px 5px 5px 5px; + -webkit-border-radius: 5px 5px 5px 5px; + border-radius: 5px 5px 5px 5px; +} +.calendar-prevmonth, +.calendar-nextmonth, +.calendar-prevyear, +.calendar-nextyear { + position: absolute; + top: 50%; + margin-top: -7px; + width: 14px; + height: 14px; + cursor: pointer; + font-size: 1px; + -moz-border-radius: 5px 5px 5px 5px; + -webkit-border-radius: 5px 5px 5px 5px; + border-radius: 5px 5px 5px 5px; +} +.calendar-prevmonth { + left: 20px; + background: url('images/calendar_arrows.png') no-repeat -18px -2px; +} +.calendar-nextmonth { + right: 20px; + background: url('images/calendar_arrows.png') no-repeat -34px -2px; +} +.calendar-prevyear { + left: 3px; + background: url('images/calendar_arrows.png') no-repeat -1px -2px; +} +.calendar-nextyear { + right: 3px; + background: url('images/calendar_arrows.png') no-repeat -49px -2px; +} +.calendar-body { + position: relative; +} +.calendar-body th, +.calendar-body td { + text-align: center; +} +.calendar-day { + border: 0; + padding: 1px; + cursor: pointer; + -moz-border-radius: 5px 5px 5px 5px; + -webkit-border-radius: 5px 5px 5px 5px; + border-radius: 5px 5px 5px 5px; +} +.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: 12px; + display: none; + overflow: hidden; +} +.calendar-menu-year-inner { + text-align: center; + padding-bottom: 5px; +} +.calendar-menu-year { + width: 50px; + text-align: center; + border-width: 1px; + border-style: solid; + outline-style: none; + resize: none; + margin: 0; + padding: 2px; + font-weight: bold; + font-size: 12px; + -moz-border-radius: 5px 5px 5px 5px; + -webkit-border-radius: 5px 5px 5px 5px; + border-radius: 5px 5px 5px 5px; +} +.calendar-menu-prev, +.calendar-menu-next { + display: inline-block; + width: 21px; + height: 21px; + vertical-align: top; + cursor: pointer; + -moz-border-radius: 5px 5px 5px 5px; + -webkit-border-radius: 5px 5px 5px 5px; + border-radius: 5px 5px 5px 5px; +} +.calendar-menu-prev { + margin-right: 10px; + background: url('images/calendar_arrows.png') no-repeat 2px 2px; +} +.calendar-menu-next { + margin-left: 10px; + background: url('images/calendar_arrows.png') no-repeat -45px 2px; +} +.calendar-menu-month { + text-align: center; + cursor: pointer; + font-weight: bold; + -moz-border-radius: 5px 5px 5px 5px; + -webkit-border-radius: 5px 5px 5px 5px; + border-radius: 5px 5px 5px 5px; +} +.calendar-body th, +.calendar-menu-month { + color: #ffffff; +} +.calendar-day { + color: #fff; +} +.calendar-sunday { + color: #CC2222; +} +.calendar-saturday { + color: #00ee00; +} +.calendar-today { + color: #0000ff; +} +.calendar-menu-year { + border-color: #000; +} +.calendar { + border-color: #000; +} +.calendar-header { + background: #3d3d3d; +} +.calendar-body, +.calendar-menu { + background: #666; +} +.calendar-body th { + background: #555; + padding: 2px 0; +} +.calendar-hover, +.calendar-nav-hover, +.calendar-menu-hover { + background-color: #777; + color: #fff; +} +.calendar-hover { + border: 1px solid #555; + padding: 0; +} +.calendar-selected { + background-color: #0052A3; + color: #fff; + border: 1px solid #00458a; + padding: 0; +} diff --git a/src/main/webapp/css/themes/black/combo.css b/src/main/webapp/css/themes/black/combo.css new file mode 100644 index 0000000..0798ce1 --- /dev/null +++ b/src/main/webapp/css/themes/black/combo.css @@ -0,0 +1,35 @@ +.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; +} +.combo-panel { + background-color: #666; +} +.combo-arrow { + background-color: #3d3d3d; +} +.combo-arrow-hover { + background-color: #777; +} +.combo-arrow:hover { + background-color: #777; +} +.combo .textbox-icon-disabled:hover { + cursor: default; +} diff --git a/src/main/webapp/css/themes/black/combobox.css b/src/main/webapp/css/themes/black/combobox.css new file mode 100644 index 0000000..27b4096 --- /dev/null +++ b/src/main/webapp/css/themes/black/combobox.css @@ -0,0 +1,39 @@ +.combobox-item, +.combobox-group, +.combobox-stick { + font-size: 12px; + padding: 3px; +} +.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: #777; + color: #fff; +} +.combobox-item-selected { + background-color: #0052A3; + color: #fff; +} +.combobox-icon { + display: inline-block; + width: 16px; + height: 16px; + vertical-align: middle; + margin-right: 2px; +} diff --git a/src/main/webapp/css/themes/black/datagrid.css b/src/main/webapp/css/themes/black/datagrid.css new file mode 100644 index 0000000..3559be7 --- /dev/null +++ b/src/main/webapp/css/themes/black/datagrid.css @@ -0,0 +1,288 @@ +.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 #444; + border-right: 1px solid #777; + 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: 25px; +} +.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 #000; + font-size: 12px; + 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: #666 url('images/loading.gif') no-repeat scroll 5px center; +} +.datagrid-header, +.datagrid-td-rownumber { + background-color: #444; + background: -webkit-linear-gradient(top,#4c4c4c 0,#3f3f3f 100%); + background: -moz-linear-gradient(top,#4c4c4c 0,#3f3f3f 100%); + background: -o-linear-gradient(top,#4c4c4c 0,#3f3f3f 100%); + background: linear-gradient(to bottom,#4c4c4c 0,#3f3f3f 100%); + background-repeat: repeat-x; + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr=#4c4c4c,endColorstr=#3f3f3f,GradientType=0); +} +.datagrid-cell-rownumber { + color: #fff; +} +.datagrid-resize-proxy { + background: #cccccc; +} +.datagrid-mask { + background: #000; +} +.datagrid-mask-msg { + border-color: #000; +} +.datagrid-toolbar, +.datagrid-pager { + background: #555; +} +.datagrid-header, +.datagrid-toolbar, +.datagrid-pager, +.datagrid-footer-inner { + border-color: #222; +} +.datagrid-header td, +.datagrid-body td, +.datagrid-footer td { + border-color: #222; +} +.datagrid-htable, +.datagrid-btable, +.datagrid-ftable { + color: #fff; + border-collapse: separate; +} +.datagrid-row-alt { + background: #555; +} +.datagrid-row-over, +.datagrid-header td.datagrid-header-over { + background: #777; + color: #fff; + cursor: default; +} +.datagrid-row-selected { + background: #0052A3; + 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; +} diff --git a/src/main/webapp/css/themes/black/datalist.css b/src/main/webapp/css/themes/black/datalist.css new file mode 100644 index 0000000..94dd67e --- /dev/null +++ b/src/main/webapp/css/themes/black/datalist.css @@ -0,0 +1,95 @@ +.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: #444; + border-style: solid; + border-width: 0 0 1px 0; + border-color: #222; +} +.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: #fff; + 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: #222; +} +.m-list li>a:hover { + background: #777; + color: #fff; +} +.m-list .m-list-group { + padding: 0 4px; +} diff --git a/src/main/webapp/css/themes/black/datebox.css b/src/main/webapp/css/themes/black/datebox.css new file mode 100644 index 0000000..f5b6bb7 --- /dev/null +++ b/src/main/webapp/css/themes/black/datebox.css @@ -0,0 +1,36 @@ +.datebox-calendar-inner { + height: 180px; +} +.datebox-button { + padding: 0 5px; + text-align: center; +} +.datebox-button a { + line-height: 22px; + font-size: 12px; + 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: #555; +} +.datebox-button a { + color: #fff; +} diff --git a/src/main/webapp/css/themes/black/dialog.css b/src/main/webapp/css/themes/black/dialog.css new file mode 100644 index 0000000..4a6f36e --- /dev/null +++ b/src/main/webapp/css/themes/black/dialog.css @@ -0,0 +1,47 @@ +.dialog-content { + overflow: auto; +} +.dialog-toolbar { + position: relative; + padding: 2px 5px; +} +.dialog-tool-separator { + float: left; + height: 24px; + border-left: 1px solid #444; + border-right: 1px solid #777; + 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: #555; + border-width: 1px; + border-style: solid; +} +.dialog-toolbar { + border-color: #000 #000 #222 #000; +} +.dialog-button { + border-color: #222 #000 #000 #000; +} +.window-thinborder .dialog-toolbar { + border-left: transparent; + border-right: transparent; + border-top-color: #555; +} +.window-thinborder .dialog-button { + top: 0px; + padding: 5px 8px 8px 8px; + border-left: transparent; + border-right: transparent; + border-bottom: transparent; +} diff --git a/src/main/webapp/css/themes/black/easyui.css b/src/main/webapp/css/themes/black/easyui.css new file mode 100644 index 0000000..91149e3 --- /dev/null +++ b/src/main/webapp/css/themes/black/easyui.css @@ -0,0 +1,3220 @@ +.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: #777; + -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; +} +.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; +} +.panel-header, +.panel-body { + border-color: #000; +} +.panel-header { + background-color: #3d3d3d; + background: -webkit-linear-gradient(top,#454545 0,#383838 100%); + background: -moz-linear-gradient(top,#454545 0,#383838 100%); + background: -o-linear-gradient(top,#454545 0,#383838 100%); + background: linear-gradient(to bottom,#454545 0,#383838 100%); + background-repeat: repeat-x; + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr=#454545,endColorstr=#383838,GradientType=0); +} +.panel-body { + background-color: #666; + color: #fff; + font-size: 12px; +} +.panel-title { + font-size: 12px; + font-weight: bold; + color: #fff; + height: 16px; + line-height: 16px; +} +.panel-footer { + border: 1px solid #000; + overflow: hidden; + background: #555; +} +.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; +} +.panel-hleft>.panel-header .panel-title, +.panel-hright>.panel-header .panel-title { + position: absolute; + min-width: 16px; + left: 21px; + 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: 5px; + 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; +} +.accordion-expand { + background: url('images/accordion_arrows.png') no-repeat -16px 0; +} +.accordion { + background: #666; + border-color: #000; +} +.accordion .accordion-header { + background: #3d3d3d; + filter: none; +} +.accordion .accordion-header-selected { + background: #0052A3; +} +.accordion .accordion-header-selected .panel-title { + color: #fff; +} +.accordion .panel-last > .accordion-header { + border-bottom-color: #3d3d3d; +} +.accordion .panel-last > .accordion-body { + border-bottom-color: #666; +} +.accordion .panel-last > .accordion-header-selected, +.accordion .panel-last > .accordion-header-border { + border-bottom-color: #000; +} +.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: #3d3d3d; +} +.accordion> .panel-hleft.panel-last > .accordion-body { + border-right-color: #666; +} +.accordion> .panel-hleft.panel-last > .accordion-header-selected, +.accordion> .panel-hleft.panel-last > .accordion-header-border { + border-right-color: #000; +} +.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: #3d3d3d; +} +.accordion> .panel-hright.panel-last > .accordion-body { + border-left-color: #666; +} +.accordion> .panel-hright.panel-last > .accordion-header-selected, +.accordion> .panel-hright.panel-last > .accordion-header-border { + border-left-color: #000; +} +.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: 5px 5px 5px 5px; + -webkit-border-radius: 5px 5px 5px 5px; + border-radius: 5px 5px 5px 5px; +} +.window-shadow { + background: #777; + -moz-box-shadow: 2px 2px 3px #787878; + -webkit-box-shadow: 2px 2px 3px #787878; + box-shadow: 2px 2px 3px #787878; + filter: progid:DXImageTransform.Microsoft.Blur(pixelRadius=2,MakeShadow=false,ShadowOpacity=0.2); +} +.window, +.window .window-body { + border-color: #000; +} +.window { + background-color: #3d3d3d; + background: -webkit-linear-gradient(top,#454545 0,#383838 20%); + background: -moz-linear-gradient(top,#454545 0,#383838 20%); + background: -o-linear-gradient(top,#454545 0,#383838 20%); + background: linear-gradient(to bottom,#454545 0,#383838 20%); + background-repeat: repeat-x; + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr=#454545,endColorstr=#383838,GradientType=0); +} +.window-proxy { + border: 1px dashed #000; +} +.window-proxy-mask, +.window-mask { + background: #000; +} +.window .panel-footer { + border: 1px solid #000; + 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-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 #444; + border-right: 1px solid #777; + 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: #555; + border-width: 1px; + border-style: solid; +} +.dialog-toolbar { + border-color: #000 #000 #222 #000; +} +.dialog-button { + border-color: #222 #000 #000 #000; +} +.window-thinborder .dialog-toolbar { + border-left: transparent; + border-right: transparent; + border-top-color: #555; +} +.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: 24px; + font-size: 12px; + padding: 0; + margin: 0 4px; +} +.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 4px 0 24px; +} +.l-btn-icon-left .l-btn-icon { + left: 4px; +} +.l-btn-icon-right .l-btn-text { + margin: 0 24px 0 4px; +} +.l-btn-icon-right .l-btn-icon { + right: 4px; +} +.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 4px; + width: 16px; +} +.l-btn-plain:hover { + padding: 0; +} +.l-btn-focus { + outline: #0000FF dotted thin; +} +.l-btn-large .l-btn-text { + line-height: 40px; +} +.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 4px; + width: 32px; +} +.l-btn { + color: #fff; + background: #777; + background-repeat: repeat-x; + border: 1px solid #555; + background: -webkit-linear-gradient(top,#919191 0,#6a6a6a 100%); + background: -moz-linear-gradient(top,#919191 0,#6a6a6a 100%); + background: -o-linear-gradient(top,#919191 0,#6a6a6a 100%); + background: linear-gradient(to bottom,#919191 0,#6a6a6a 100%); + background-repeat: repeat-x; + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr=#919191,endColorstr=#6a6a6a,GradientType=0); + -moz-border-radius: 5px 5px 5px 5px; + -webkit-border-radius: 5px 5px 5px 5px; + border-radius: 5px 5px 5px 5px; +} +.l-btn:hover { + background: #777; + color: #fff; + border: 1px solid #555; + filter: none; +} +.l-btn-plain { + background: transparent; + border-width: 0; + filter: none; +} +.l-btn-outline { + border-width: 1px; + border-color: #555; + padding: 0; +} +.l-btn-plain:hover { + background: #777; + color: #fff; + border: 1px solid #555; + -moz-border-radius: 5px 5px 5px 5px; + -webkit-border-radius: 5px 5px 5px 5px; + border-radius: 5px 5px 5px 5px; +} +.l-btn-disabled, +.l-btn-disabled:hover { + opacity: 0.5; + cursor: default; + background: #777; + color: #fff; + background: -webkit-linear-gradient(top,#919191 0,#6a6a6a 100%); + background: -moz-linear-gradient(top,#919191 0,#6a6a6a 100%); + background: -o-linear-gradient(top,#919191 0,#6a6a6a 100%); + background: linear-gradient(to bottom,#919191 0,#6a6a6a 100%); + background-repeat: repeat-x; + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr=#919191,endColorstr=#6a6a6a,GradientType=0); +} +.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: #000; + filter: none; +} +.l-btn-plain-selected, +.l-btn-plain-selected:hover { + background: #000; +} +.textbox { + position: relative; + border: 1px solid #000; + background-color: #fff; + vertical-align: middle; + display: inline-block; + overflow: hidden; + white-space: nowrap; + margin: 0; + padding: 0; + -moz-border-radius: 5px 5px 5px 5px; + -webkit-border-radius: 5px 5px 5px 5px; + border-radius: 5px 5px 5px 5px; +} +.textbox .textbox-text { + font-size: 12px; + border: 0; + margin: 0; + padding: 4px; + white-space: normal; + vertical-align: top; + outline-style: none; + resize: none; + -moz-border-radius: 5px 5px 5px 5px; + -webkit-border-radius: 5px 5px 5px 5px; + border-radius: 5px 5px 5px 5px; +} +.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: 22px; + line-height: 22px; + 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: #000000; + -moz-box-shadow: 0 0 3px 0 #000; + -webkit-box-shadow: 0 0 3px 0 #000; + box-shadow: 0 0 3px 0 #000; +} +.textbox-invalid { + border-color: #ffa8a8; + background-color: #fff3f3; +} +.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; +} +.combo-panel { + background-color: #666; +} +.combo-arrow { + background-color: #3d3d3d; +} +.combo-arrow-hover { + background-color: #777; +} +.combo-arrow:hover { + background-color: #777; +} +.combo .textbox-icon-disabled:hover { + cursor: default; +} +.combobox-item, +.combobox-group, +.combobox-stick { + font-size: 12px; + padding: 3px; +} +.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: #777; + color: #fff; +} +.combobox-item-selected { + background-color: #0052A3; + 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: 5px 5px 5px 5px; + -webkit-border-radius: 5px 5px 5px 5px; + border-radius: 5px 5px 5px 5px; + background: #777; + color: #fff; +} +.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: #cccccc; +} +.layout-split-north { + border-bottom: 5px solid #444; +} +.layout-split-south { + border-top: 5px solid #444; +} +.layout-split-east { + border-left: 5px solid #444; +} +.layout-split-west { + border-right: 5px solid #444; +} +.layout-expand { + background-color: #3d3d3d; +} +.layout-expand-over { + background-color: #3d3d3d; +} +.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 a.tabs-inner { + display: inline-block; + text-decoration: none; + 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 a.tabs-inner { + font-weight: bold; + outline: none; +} +.tabs li.tabs-selected a:hover.tabs-inner { + 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: 12px; +} +.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 a.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 a.tabs-inner { + padding-left: 0; + padding-right: 0; +} +.tabs-header-left .tabs li a.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 a.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 a.tabs-inner { + -moz-border-radius: 5px 5px 5px 5px; + -webkit-border-radius: 5px 5px 5px 5px; + border-radius: 5px 5px 5px 5px; +} +.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: #3d3d3d url('images/tabs_icons.png') no-repeat 1px center; +} +.tabs-scroller-right { + background: #3d3d3d 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 a.tabs-inner:hover { + background: #777; + color: #fff; + filter: none; +} +.tabs li.tabs-selected a.tabs-inner { + background-color: #666; + color: #fff; + background: -webkit-linear-gradient(top,#454545 0,#666 100%); + background: -moz-linear-gradient(top,#454545 0,#666 100%); + background: -o-linear-gradient(top,#454545 0,#666 100%); + background: linear-gradient(to bottom,#454545 0,#666 100%); + background-repeat: repeat-x; + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr=#454545,endColorstr=#666,GradientType=0); +} +.tabs-header-bottom .tabs li.tabs-selected a.tabs-inner { + background: -webkit-linear-gradient(top,#666 0,#454545 100%); + background: -moz-linear-gradient(top,#666 0,#454545 100%); + background: -o-linear-gradient(top,#666 0,#454545 100%); + background: linear-gradient(to bottom,#666 0,#454545 100%); + background-repeat: repeat-x; + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr=#666,endColorstr=#454545,GradientType=0); +} +.tabs-header-left .tabs li.tabs-selected a.tabs-inner { + background: -webkit-linear-gradient(left,#454545 0,#666 100%); + background: -moz-linear-gradient(left,#454545 0,#666 100%); + background: -o-linear-gradient(left,#454545 0,#666 100%); + background: linear-gradient(to right,#454545 0,#666 100%); + background-repeat: repeat-y; + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr=#454545,endColorstr=#666,GradientType=1); +} +.tabs-header-right .tabs li.tabs-selected a.tabs-inner { + background: -webkit-linear-gradient(left,#666 0,#454545 100%); + background: -moz-linear-gradient(left,#666 0,#454545 100%); + background: -o-linear-gradient(left,#666 0,#454545 100%); + background: linear-gradient(to right,#666 0,#454545 100%); + background-repeat: repeat-y; + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr=#666,endColorstr=#454545,GradientType=1); +} +.tabs li a.tabs-inner { + color: #fff; + background-color: #3d3d3d; + background: -webkit-linear-gradient(top,#454545 0,#383838 100%); + background: -moz-linear-gradient(top,#454545 0,#383838 100%); + background: -o-linear-gradient(top,#454545 0,#383838 100%); + background: linear-gradient(to bottom,#454545 0,#383838 100%); + background-repeat: repeat-x; + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr=#454545,endColorstr=#383838,GradientType=0); +} +.tabs-header, +.tabs-tool { + background-color: #3d3d3d; +} +.tabs-header-plain { + background: transparent; +} +.tabs-header, +.tabs-scroller-left, +.tabs-scroller-right, +.tabs-tool, +.tabs, +.tabs-panels, +.tabs li a.tabs-inner, +.tabs li.tabs-selected a.tabs-inner, +.tabs-header-bottom .tabs li.tabs-selected a.tabs-inner, +.tabs-header-left .tabs li.tabs-selected a.tabs-inner, +.tabs-header-right .tabs li.tabs-selected a.tabs-inner { + border-color: #000; +} +.tabs-p-tool a:hover, +.tabs li a:hover.tabs-close, +.tabs-scroller-over { + background-color: #777; +} +.tabs li.tabs-selected a.tabs-inner { + border-bottom: 1px solid #666; +} +.tabs-header-bottom .tabs li.tabs-selected a.tabs-inner { + border-top: 1px solid #666; +} +.tabs-header-left .tabs li.tabs-selected a.tabs-inner { + border-right: 1px solid #666; +} +.tabs-header-right .tabs li.tabs-selected a.tabs-inner { + border-left: 1px solid #666; +} +.tabs-header .tabs-pill li.tabs-selected a.tabs-inner { + background: #0052A3; + color: #fff; + filter: none; + border-color: #000; +} +.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 #444; + border-right: 1px solid #777; + 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: 25px; +} +.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 #000; + font-size: 12px; + 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: #666 url('images/loading.gif') no-repeat scroll 5px center; +} +.datagrid-header, +.datagrid-td-rownumber { + background-color: #444; + background: -webkit-linear-gradient(top,#4c4c4c 0,#3f3f3f 100%); + background: -moz-linear-gradient(top,#4c4c4c 0,#3f3f3f 100%); + background: -o-linear-gradient(top,#4c4c4c 0,#3f3f3f 100%); + background: linear-gradient(to bottom,#4c4c4c 0,#3f3f3f 100%); + background-repeat: repeat-x; + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr=#4c4c4c,endColorstr=#3f3f3f,GradientType=0); +} +.datagrid-cell-rownumber { + color: #fff; +} +.datagrid-resize-proxy { + background: #cccccc; +} +.datagrid-mask { + background: #000; +} +.datagrid-mask-msg { + border-color: #000; +} +.datagrid-toolbar, +.datagrid-pager { + background: #555; +} +.datagrid-header, +.datagrid-toolbar, +.datagrid-pager, +.datagrid-footer-inner { + border-color: #222; +} +.datagrid-header td, +.datagrid-body td, +.datagrid-footer td { + border-color: #222; +} +.datagrid-htable, +.datagrid-btable, +.datagrid-ftable { + color: #fff; + border-collapse: separate; +} +.datagrid-row-alt { + background: #555; +} +.datagrid-row-over, +.datagrid-header td.datagrid-header-over { + background: #777; + color: #fff; + cursor: default; +} +.datagrid-row-selected { + background: #0052A3; + 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; +} +.propertygrid .datagrid-view1 .datagrid-body td { + padding-bottom: 1px; + border-width: 0 1px 0 0; +} +.propertygrid .datagrid-group { + height: 21px; + 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: #222; +} +.propertygrid .datagrid-view1 .datagrid-group { + border-color: #3d3d3d; +} +.propertygrid .datagrid-view2 .datagrid-group { + border-color: #222; +} +.propertygrid .datagrid-group, +.propertygrid .datagrid-view1 .datagrid-body, +.propertygrid .datagrid-view1 .datagrid-row-over, +.propertygrid .datagrid-view1 .datagrid-row-selected { + background: #3d3d3d; +} +.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: #444; + border-style: solid; + border-width: 0 0 1px 0; + border-color: #222; +} +.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: #fff; + 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: #222; +} +.m-list li>a:hover { + background: #777; + color: #fff; +} +.m-list .m-list-group { + padding: 0 4px; +} +.pagination { + zoom: 1; +} +.pagination table { + float: left; + height: 30px; +} +.pagination td { + border: 0; +} +.pagination-btn-separator { + float: left; + height: 24px; + border-left: 1px solid #444; + border-right: 1px solid #777; + margin: 3px 1px; +} +.pagination .pagination-num { + border-width: 1px; + border-style: solid; + margin: 0 2px; + padding: 2px; + width: 2em; + height: auto; +} +.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 { + width: 24px; + text-align: center; + margin: 0; +} +.pagination-first { + background: url('images/pagination_icons.png') no-repeat 0 center; +} +.pagination-prev { + background: url('images/pagination_icons.png') no-repeat -16px center; +} +.pagination-next { + background: url('images/pagination_icons.png') no-repeat -32px center; +} +.pagination-last { + background: url('images/pagination_icons.png') no-repeat -48px center; +} +.pagination-load { + background: url('images/pagination_icons.png') no-repeat -64px center; +} +.pagination-loading { + background: url('images/loading.gif') no-repeat center center; +} +.pagination-page-list, +.pagination .pagination-num { + border-color: #000; +} +.calendar { + border-width: 1px; + border-style: solid; + padding: 1px; + overflow: hidden; +} +.calendar table { + table-layout: fixed; + border-collapse: separate; + font-size: 12px; + width: 100%; + height: 100%; +} +.calendar table td, +.calendar table th { + font-size: 12px; +} +.calendar-noborder { + border: 0; +} +.calendar-header { + position: relative; + height: 22px; +} +.calendar-title { + text-align: center; + height: 22px; +} +.calendar-title span { + position: relative; + display: inline-block; + top: 2px; + padding: 0 3px; + height: 18px; + line-height: 18px; + font-size: 12px; + cursor: pointer; + -moz-border-radius: 5px 5px 5px 5px; + -webkit-border-radius: 5px 5px 5px 5px; + border-radius: 5px 5px 5px 5px; +} +.calendar-prevmonth, +.calendar-nextmonth, +.calendar-prevyear, +.calendar-nextyear { + position: absolute; + top: 50%; + margin-top: -7px; + width: 14px; + height: 14px; + cursor: pointer; + font-size: 1px; + -moz-border-radius: 5px 5px 5px 5px; + -webkit-border-radius: 5px 5px 5px 5px; + border-radius: 5px 5px 5px 5px; +} +.calendar-prevmonth { + left: 20px; + background: url('images/calendar_arrows.png') no-repeat -18px -2px; +} +.calendar-nextmonth { + right: 20px; + background: url('images/calendar_arrows.png') no-repeat -34px -2px; +} +.calendar-prevyear { + left: 3px; + background: url('images/calendar_arrows.png') no-repeat -1px -2px; +} +.calendar-nextyear { + right: 3px; + background: url('images/calendar_arrows.png') no-repeat -49px -2px; +} +.calendar-body { + position: relative; +} +.calendar-body th, +.calendar-body td { + text-align: center; +} +.calendar-day { + border: 0; + padding: 1px; + cursor: pointer; + -moz-border-radius: 5px 5px 5px 5px; + -webkit-border-radius: 5px 5px 5px 5px; + border-radius: 5px 5px 5px 5px; +} +.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: 12px; + display: none; + overflow: hidden; +} +.calendar-menu-year-inner { + text-align: center; + padding-bottom: 5px; +} +.calendar-menu-year { + width: 50px; + text-align: center; + border-width: 1px; + border-style: solid; + outline-style: none; + resize: none; + margin: 0; + padding: 2px; + font-weight: bold; + font-size: 12px; + -moz-border-radius: 5px 5px 5px 5px; + -webkit-border-radius: 5px 5px 5px 5px; + border-radius: 5px 5px 5px 5px; +} +.calendar-menu-prev, +.calendar-menu-next { + display: inline-block; + width: 21px; + height: 21px; + vertical-align: top; + cursor: pointer; + -moz-border-radius: 5px 5px 5px 5px; + -webkit-border-radius: 5px 5px 5px 5px; + border-radius: 5px 5px 5px 5px; +} +.calendar-menu-prev { + margin-right: 10px; + background: url('images/calendar_arrows.png') no-repeat 2px 2px; +} +.calendar-menu-next { + margin-left: 10px; + background: url('images/calendar_arrows.png') no-repeat -45px 2px; +} +.calendar-menu-month { + text-align: center; + cursor: pointer; + font-weight: bold; + -moz-border-radius: 5px 5px 5px 5px; + -webkit-border-radius: 5px 5px 5px 5px; + border-radius: 5px 5px 5px 5px; +} +.calendar-body th, +.calendar-menu-month { + color: #ffffff; +} +.calendar-day { + color: #fff; +} +.calendar-sunday { + color: #CC2222; +} +.calendar-saturday { + color: #00ee00; +} +.calendar-today { + color: #0000ff; +} +.calendar-menu-year { + border-color: #000; +} +.calendar { + border-color: #000; +} +.calendar-header { + background: #3d3d3d; +} +.calendar-body, +.calendar-menu { + background: #666; +} +.calendar-body th { + background: #555; + padding: 2px 0; +} +.calendar-hover, +.calendar-nav-hover, +.calendar-menu-hover { + background-color: #777; + color: #fff; +} +.calendar-hover { + border: 1px solid #555; + padding: 0; +} +.calendar-selected { + background-color: #0052A3; + color: #fff; + border: 1px solid #00458a; + padding: 0; +} +.datebox-calendar-inner { + height: 180px; +} +.datebox-button { + padding: 0 5px; + text-align: center; +} +.datebox-button a { + line-height: 22px; + font-size: 12px; + 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: #555; +} +.datebox-button a { + color: #fff; +} +.spinner-arrow { + background-color: #3d3d3d; + display: inline-block; + overflow: hidden; + vertical-align: top; + margin: 0; + padding: 0; + opacity: 1.0; + filter: alpha(opacity=100); + width: 18px; +} +.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: #fff; + outline-style: none; +} +.spinner-arrow-hover { + background-color: #777; + opacity: 1.0; + filter: alpha(opacity=100); +} +.spinner-arrow-up:hover, +.spinner-arrow-down:hover { + opacity: 1.0; + filter: alpha(opacity=100); + background-color: #777; +} +.textbox-icon-disabled .spinner-arrow-up:hover, +.textbox-icon-disabled .spinner-arrow-down:hover { + opacity: 0.6; + filter: alpha(opacity=60); + background-color: #3d3d3d; + 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; +} +.spinner-arrow-down { + background: url('images/spinner_arrows.png') no-repeat -15px center; +} +.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: 5px 5px 5px 5px; + -webkit-border-radius: 5px 5px 5px 5px; + border-radius: 5px 5px 5px 5px; + overflow: hidden; + position: relative; +} +.progressbar-text { + text-align: center; + position: absolute; +} +.progressbar-value { + position: relative; + overflow: hidden; + width: 0; + -moz-border-radius: 5px 0 0 5px; + -webkit-border-radius: 5px 0 0 5px; + border-radius: 5px 0 0 5px; +} +.progressbar { + border-color: #000; +} +.progressbar-text { + color: #fff; + font-size: 12px; +} +.progressbar-value .progressbar-text { + background-color: #0052A3; + 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: #3d3d3d; +} +.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: 12px; + 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: 12px; +} +.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: #000; + background: #3d3d3d; +} +.slider-rule span { + border-color: #000; +} +.slider-rulelabel span { + color: #fff; +} +.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: 5px 5px 5px 5px; + -webkit-border-radius: 5px 5px 5px 5px; + border-radius: 5px 5px 5px 5px; +} +.menu-item-disabled { + opacity: 0.5; + filter: alpha(opacity=50); + cursor: default; +} +.menu-text, +.menu-text span { + font-size: 12px; +} +.menu-shadow { + position: absolute; + -moz-border-radius: 5px 5px 5px 5px; + -webkit-border-radius: 5px 5px 5px 5px; + border-radius: 5px 5px 5px 5px; + background: #777; + -moz-box-shadow: 2px 2px 3px #787878; + -webkit-box-shadow: 2px 2px 3px #787878; + box-shadow: 2px 2px 3px #787878; + filter: progid:DXImageTransform.Microsoft.Blur(pixelRadius=2,MakeShadow=false,ShadowOpacity=0.2); +} +.menu-rightarrow { + background: url('images/menu_arrows.png') no-repeat -32px center; +} +.menu-line { + border-left: 1px solid #444; + border-right: 1px solid #777; +} +.menu-sep { + border-top: 1px solid #444; + border-bottom: 1px solid #777; +} +.menu { + background-color: #666; + border-color: #444; + color: #fff; +} +.menu-content { + background: #666; +} +.menu-item { + border-color: transparent; + _border-color: #666; +} +.menu-active { + border-color: #555; + color: #fff; + background: #777; +} +.menu-active-disabled { + border-color: transparent; + background: transparent; + color: #fff; +} +.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: #777; + color: #fff; + border: 1px solid #555; + filter: none; +} +.m-btn-plain-active, +.s-btn-plain-active { + background: transparent; + padding: 0; + border-width: 1px; + border-style: solid; + -moz-border-radius: 5px 5px 5px 5px; + -webkit-border-radius: 5px 5px 5px 5px; + border-radius: 5px 5px 5px 5px; +} +.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: #cccccc; + 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: #555; + background-color: #777; + color: #fff; +} +.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: #cccccc; + 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; +} +.messager-info { + background: url('images/messager_icons.png') no-repeat scroll 0 0; +} +.messager-question { + background: url('images/messager_icons.png') no-repeat scroll -32px 0; +} +.messager-warning { + background: url('images/messager_icons.png') no-repeat scroll -96px 0; +} +.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 #000; +} +.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: 18px; + 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; + vertical-align: top; + overflow: hidden; +} +.tree-expanded { + background: url('images/tree_icons.png') no-repeat -18px 0px; +} +.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; +} +.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; +} +.tree-folder-open { + background: url('images/tree_icons.png') no-repeat -224px 0; +} +.tree-file { + background: url('images/tree_icons.png') no-repeat -240px 0; +} +.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; +} +.tree-title { + font-size: 12px; + display: inline-block; + text-decoration: none; + vertical-align: top; + white-space: nowrap; + padding: 0 2px; + height: 18px; + line-height: 18px; +} +.tree-node-proxy { + font-size: 12px; + 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 #000; + font-size: 12px; + line-height: 16px; + padding: 0 4px; + margin: 0; + width: 80px; + outline-style: none; + vertical-align: top; + position: absolute; + top: 0; +} +.tree-node-proxy { + background-color: #666; + color: #fff; + border-color: #000; +} +.tree-node-hover { + background: #777; + color: #fff; +} +.tree-node-selected { + background: #0052A3; + color: #fff; +} +.tree-node-hidden { + display: none; +} +.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; + border-radius: 5px; + -moz-border-radius: 5px 5px 5px 5px; + -webkit-border-radius: 5px 5px 5px 5px; + border-radius: 5px 5px 5px 5px; +} +.tooltip-content { + font-size: 12px; +} +.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; + _border-color: tomato; + _filter: chroma(color=tomato); +} +.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: #666; + border-color: #000; + color: #fff; +} +.tooltip-right .tooltip-arrow-outer { + border-right-color: #000; +} +.tooltip-right .tooltip-arrow { + border-right-color: #666; +} +.tooltip-left .tooltip-arrow-outer { + border-left-color: #000; +} +.tooltip-left .tooltip-arrow { + border-left-color: #666; +} +.tooltip-top .tooltip-arrow-outer { + border-top-color: #000; +} +.tooltip-top .tooltip-arrow { + border-top-color: #666; +} +.tooltip-bottom .tooltip-arrow-outer { + border-bottom-color: #000; +} +.tooltip-bottom .tooltip-arrow { + border-bottom-color: #666; +} +.switchbutton { + text-decoration: none; + display: inline-block; + overflow: hidden; + vertical-align: middle; + margin: 0; + padding: 0; + cursor: pointer; + background: #555; + border: 1px solid #555; + -moz-border-radius: 5px 5px 5px 5px; + -webkit-border-radius: 5px 5px 5px 5px; + border-radius: 5px 5px 5px 5px; +} +.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: 12px; + -moz-border-radius: 5px 5px 5px 5px; + -webkit-border-radius: 5px 5px 5px 5px; + border-radius: 5px 5px 5px 5px; +} +.switchbutton-on { + background: #0052A3; + color: #fff; +} +.switchbutton-off { + background-color: #666; + color: #fff; +} +.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: #666; + color: #fff; + border: 1px solid #555; + -moz-box-shadow: 0 0 3px 0 #555; + -webkit-box-shadow: 0 0 3px 0 #555; + box-shadow: 0 0 3px 0 #555; +} +.switchbutton-value { + position: absolute; + top: 0; + left: -5000px; +} +.switchbutton-disabled { + opacity: 0.5; + filter: alpha(opacity=50); +} +.switchbutton-disabled, +.switchbutton-readonly { + cursor: default; +} diff --git a/src/main/webapp/css/themes/black/filebox.css b/src/main/webapp/css/themes/black/filebox.css new file mode 100644 index 0000000..c6bac66 --- /dev/null +++ b/src/main/webapp/css/themes/black/filebox.css @@ -0,0 +1,20 @@ +.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; +} diff --git a/src/main/webapp/css/themes/black/images/accordion_arrows.png b/src/main/webapp/css/themes/black/images/accordion_arrows.png new file mode 100644 index 0000000000000000000000000000000000000000..45fd44aa30476e107428feeea74273a354d3b003 GIT binary patch literal 122 zcmeAS@N?(olHy`uVBq!ia0vp^3P3Et!3HGD8EPYel%uDMV@SoVN1z5L3B> xDW~hhNx=}0EonJY9@lzK3(R79rLjPWf#H~1{zPk!fAK(V44$rjF6*2Ung9evL?JRtAPgomjiGH|9{f$n(B`$j zEeb&pg!EKZW!#K$4@xNm$yT6c41rc&wh}>_*7}p71!8&8673tn-QQiFh646*YwHT+ z)EV#dB}QIviTL0tB!=YS+5%Rf3nh>uG`~OIR&I9Pb&1#X>AvnQFNH)(9OKtKv|Z?jXgA8=g#}$o8PwWf~s)v4TOWbIh-FayvCIQ*!i4(A|Z*a`pRGU y`z_2`-mf|ief_$wXW7b|3Y(^xL#4%pFkRlNzMe3nx0Htf00005OC%H;f`~O(q$Q#t2<^v$A>fbmv%e#dKTwK=Ku{5lS|}<-`a#7b zzTCOnnT>at)D}AMFuOZ5&%EqFN(lyumd$2ASF6=;nM~%2?gqc@U=#|4PqkX@EBo-9 z7pD#bO_RUa>*faM`8;MYfVi$JnB-zcBFc6gjl$d!bF98Q!!!(Z1_R~P?e!pt#6CHJ9S&n_n&@=9 z%GP;!@Co4c*at+6vNz7o(6en^Q1%qHrc;1)9IRaz-$@S$Z-qdC^ds3X0NvQH;KS)D z-dh&rW&@X;1cS(45z)J&BVt+tv&GMVJ%!EiW) zLBGZW)#Z+gl-Lih&?>X3SS-S#ujQ;9JRXmIB7X)8`d6ETj)D#Q2+$s|<_b7-B9Xvq zwNfqlEp%y3$uY`h{Y$(Gn5@}sqEsq95lpAkFO5dyBmP6^H-51G4J|rN2Ujt<`2YX_ M07*qoM6N<$f3kcwMx!yWk;1b9CG_kXOx zmzFK*Ssi^NN-27((w?4M8@u`^_qP=9nfy4m{lwb6;U^wS@qDtp9?C45@HGEwayQ3S z%Ua=ZSB3W+c`gDw6;3c4*f@AGFEUxQKH4x2D*a5)78&qol`;+03qN((f|Me literal 0 HcmV?d00001 diff --git a/src/main/webapp/css/themes/black/images/linkbutton_bg.png b/src/main/webapp/css/themes/black/images/linkbutton_bg.png new file mode 100644 index 0000000000000000000000000000000000000000..fc66bd2cd24047b8377342365a1df3846327ecde GIT binary patch literal 1274 zcmVc6j2;SWMDuL>F^vlqEUI{oOgO!xNf*11TukM z6kTZ3V2qd3<~<$H&Lrt?SpXUxF5Zb^}(={r!EHE+$QMdH|XZ zSYbMyc0tQc3qbP$tG{U_Jyg>I(0srOscEGU?-T)4AzuS$_2J>6`+BJ50YDY<^>2vV z+uI880P2ui(hyHiPrK$)CkbHg=kD&V3^8pD z0v3QOB&8eT@87?rgaGPrb#+ySxU;jP=nkL`nZ_{0e*BD+1Tc5b&d$oLo}8R$90gF1 z^ij>~#>R%HIRNUB_kgpQ+Lg!80Gbb2saY8>1EBeUm7A3TegK*dSciv)Wqp0!h-3im z1+1f^qq4iZ+ZEMUS63~e0I+zh`2rwd0l@!F(!7sM%_`|&0+*B!z{1(u+A9BIU&~T- z2he=L>dmc7TLXZFkeTeCHMcE|qX51{z>0ZC=xGjss*FaXGOMX+dHf8Z8hL6ntGQ_z zF9V<&dwY9jh`D7czyqj4g3S=~)zFA!0980RI4DC*Ez1%L09D8%=OHF&S@Q*;3bRfe zeL2-ZzyeT(Av4`$>R3`j096>WH7BOELD3yR70%Dk%Mk4)1W=73OH{L_UgIc$YFu7k zmRaq`&NxK?Rk*skDzlhL4IV!OsLJ*Ab@{BRT^TO}pgQC6xO~R6G8o_oU?C)>`xlc2 zriH~zU-;g$PyPA_&X!OBSU6SIeB~eKNAhF&(fs&F|1n9<+Yj^2T+4Dj%UFjr zZ%rnX^7Qmn0ANwP308gILtaQfK0Z1j0Br`Wq<=~Ka+?BxW&>7kRtZ+q>C~wJXg6S` zW|cJ1%?d#C0V@Ue)T{uY>425ig?tTsczEc(0+M8_c7^t|!sm-1Nw(}#nnLr?FgGlc zY}ut0+w(d)Uk6FDWtY;*aCdjteIX>tmhA#o+8PqHNU~+SlrTfyKRaNHBx~Ch-FJ3& z%B(Y&NwStp{rH$6Yj{YqhR=Gk~Mtw_&K$#yeTBf z7JV~bCN(VwL$c|B^>Topn-X{+7;S!yV~2^ zBgv-iMkME}U;-COwrsbABDvwg!2wA&ZMWttf5^jTl5E*7V41=|@=Hu>NJ^O8(7b4p z&ChgC(LF5>Md#{+4LgS{%KA|H(Xv`l4P^KdiBKB*_;1&m|Q7!{|O$ k%vVK{T!hwqk^D0L0mO==@4IV9lK=n!07*qoM6N<$f|Ge;n*aa+ literal 0 HcmV?d00001 diff --git a/src/main/webapp/css/themes/black/images/loading.gif b/src/main/webapp/css/themes/black/images/loading.gif new file mode 100644 index 0000000000000000000000000000000000000000..68f01d04813c1f622810864a3aaa04b4a17ac8f9 GIT binary patch literal 1737 zcmaKsX;2e)7>CzDa{xjjy99|1A!tC(kfocDi)<1$AxHpOQ4k^l!Vx1W6x7<&|FYXU zqO4jEiU-!VR1p+Xj1?4-iuI_J;!&?!+ghg|JJad3U)pMGzcKxNeCM6tJnuX+uPvX@ zZY|=AHdxt2Xr2y*)5|c6#FSEuyJ+Y3Z&l z2hJWo`9;lJ$6wzSoW60tqkB|d$oiO*d-^85^ojn{*NR{MP*%{@H*#gihZ8BKyB68E z-MIbjgNNV0y5khpJ^Jv`51aR%={<4jhaVq5e*9D5+*hL)XCHn4{^d%hPu@?KpKbc=eN!D=XUjDmH#n{YHNS zHCX6BV)yn2CuTNujhN~V+`RKpyXO6^ht92eqhIIlQLfz6eeCnH_C7`NPNrw9ks366 z4xX9(`s~z=+1uX^ocZ$2_fBs=JihPfWYufOIuD&AU-@`>>qn~cy$1)T7CU!5z2(U8 z)9Kt9)l`f6?NU41j6XbXfR{OHwm|T4}&24tIf+!C-g~6cQfY2^n$?AT&ZW zgqm`}3-jS2NS6n=k;sr5Hv(Q%%n)qW0X|neWVBd;Ko}d(=u%?{O0-a>kSI}shOd9n z5top}%gUCf=>?tg;*;#7!^HOL3k$fMxd=O-6Y4@%u8LS)C1D_a?27R6^vcC+6tttL z)GmTahbyJB!xmcHL#ya8ZXyfRl)a!N0BJE0y3BBfAV5;#=K&Z2VkaKZ)?9`1h5P_% znt*b}%j1|#j`b|aQDx@~wA#$PYRN2xE6UO;;vE(@$&xww-s8fZ5HmJ(eJ*rQrDbaawDbrfe_8F(wq{ge?)qQG`aXV;r(*6EM|ESje;52aFmrX!f=Pw^2oGQX$1|o4yts|b_5@w_kNwtl{wDP#JGMvIp#!SYX?Wq9S&`&_ZwkgGH5CLB7DEGJ6=R4J~p3Z4i^A}hs=-uZeD zs92l6u@**R$~L()G{5N8*7cE5-q$SCo`q4|NSVF*+A7&xZnypm$EdXgf)E%(VJHFD zSgi(H!D!(;9Zcc#GrCCJh=RlvXBQ-hv4Vodse`a32ZUFWgP5ZhM5LeV(#D^H8p@Lg ztra5R32z@1rQv{6u&RZL5%Z@Ye{q|t#6aM_1hIrpl@)oH6}os*cbAQywa{5<`ekzW O1il%9bk82&KlvLjD^%40 literal 0 HcmV?d00001 diff --git a/src/main/webapp/css/themes/black/images/menu_arrows.png b/src/main/webapp/css/themes/black/images/menu_arrows.png new file mode 100644 index 0000000000000000000000000000000000000000..2a984941d6590c78d67ee68d2087d8cc88efbac6 GIT binary patch literal 134 zcmeAS@N?(olHy`uVBq!ia0vp^4nQox!3HFkJ+IURQof!pjv*Dd-d;V(%b>u);`l3H z>g53sy@tf+`c*Dhco^6|8Eg#8WENqsU-wu%RB=*I5D$X7F_Nb6Mw<&;$S;RV&B< literal 0 HcmV?d00001 diff --git a/src/main/webapp/css/themes/black/images/messager_icons.png b/src/main/webapp/css/themes/black/images/messager_icons.png new file mode 100644 index 0000000000000000000000000000000000000000..62c18c135860351063ebaabe8c0f4df7664b8f65 GIT binary patch literal 6116 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 lGy-mR literal 0 HcmV?d00001 diff --git a/src/main/webapp/css/themes/black/images/panel_tools.png b/src/main/webapp/css/themes/black/images/panel_tools.png new file mode 100644 index 0000000000000000000000000000000000000000..f97761eb393def3b5f61774142413e740fe8fe8b GIT binary patch literal 184 zcmeAS@N?(olHy`uVBq!ia0vp^20*O9!3HEluKbn(QuUrLjv*Dd-p+93Yfuni{`r6T z$48CLf{EOzXU|M@xy0GMavBpu(5ti8zb3QZ+Tfp^siO37?WI*8%sM?7u5w1XttgAw z*Z5axHOr-aZj1~Mw;UHx3vIVCg!0FXpSG5`Po literal 0 HcmV?d00001 diff --git a/src/main/webapp/css/themes/black/images/passwordbox_close.png b/src/main/webapp/css/themes/black/images/passwordbox_close.png new file mode 100644 index 0000000000000000000000000000000000000000..276b57974284d1449250e362644dd7416632d92c GIT binary patch literal 149 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`F`h1tAr-fh6C~yxIB_Cl)5eV- z>r;4yl-<@d?s6;P338s2Hlg>#j0uWN8C(aFPJB{e^6h1c5$jHyQsD5--fSz=3o~iS wnLdu+*z}wOVj6h@O#h^}NFFlaV$)<`u-+3C6wY^M3(y`0Pgg&ebxsLQ04X#uG5`Po literal 0 HcmV?d00001 diff --git a/src/main/webapp/css/themes/black/images/passwordbox_open.png b/src/main/webapp/css/themes/black/images/passwordbox_open.png new file mode 100644 index 0000000000000000000000000000000000000000..0f25d535e05b22b406fd72647611aace9cfa6249 GIT binary patch literal 160 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`>7Fi*Ar-fh6C~yxIB_Cl)5eV- z>r;4yl-<@d?s6;P338s2rmQ?!Qz1HW#so#C46Xx7Cq5}K`Svo!h;^q;DRB5^Z?=`` zg<12Qetm(ByO<;&a5^L{7TnL>!KiVsAxlibJl4>NC!c|#Jtt+3rSZgWpp^`su6{1- HoD!M<3i~r2 literal 0 HcmV?d00001 diff --git a/src/main/webapp/css/themes/black/images/searchbox_button.png b/src/main/webapp/css/themes/black/images/searchbox_button.png new file mode 100644 index 0000000000000000000000000000000000000000..6dd1931589b453f6cc9772fd1851d8705d6b6631 GIT binary patch literal 813 zcmV+|1JeA7P)lXvaa)1B=8vtU6i;3jw7+Lm8D5$Z@i10EnF)=bcefw4K z$^E-CUfjQG`svfBbfD6|R#sLFj6lo3FG$G6@;ee>>~6i|H^5OY8c00W#fi<*1vzh{0&qu3dB`V0{{XDY`}(1n>S9M(9!zw#!&`A z#;*+0{6GVMSeWGp!`o{o8NPge#o%jgs54WT$qnQYpsyGNpauX05F;oJfZ`Pdw6!$j zynTH0RMa&!n3$Pa9zVGEY{&L(3qnPBl_DG6<9Xk0`Fl3`LiD4@pH{vDsxJWQ1qdJp zEJ>M}osCtQlY?CgW>F{;gVK#SmgoOZnEn5J%EtIXaWQXAO>Rdf)WFR;gt~f zXaA3z{{L{q=l48y!32yJ3i0hJ2BS=^}@sXzH{F9Iq&OW375;I7CG-}Vr|aF#l<(fySwu2>`YdxRW*W0f#2un=W5Jmvoe`XCK%I_Y++#`fwE+= zSd{sEULGDE%A=#BOW<6gP*6VfMa^fr8qe`5w%)P0a^Y9WGTw! zvI^|$>l@1Da^Ke1*T3RdY7KqM%gaBb(P+oP!GW;b?ZRfW3Bxc1H@GCaHK#XhZ*Lc= zRBC@>V&W#x&B5%(#>OW5`};d6I5Qw218EG_q@1gtr!Nl*v7yn?(MPMRt4SNy%--JK zanm#f^bw^}Nr7b(EUg}TUi(2;)deX10lAo=83+VA(QksJI6(zwptET-y~avN=J9w$ zI2`W5lG|aOkjY7(&!@;Jx*nUA>~J`Q)9L&(G8y=g$3a4YgD7z)5>gXQNKhw=uR0zF z#jHruh)gDv=bj|2ZES4(fEM?I!JyKqo=}sj-fBYTcDt4KXq)eFQH}wW`vh%Mla}#@ z@Mb`C)x@YkK{xd2>8ZLg+E!Lps$Q@6DY-~!0=Gs+Mm~_JnW1EbX2uxClEdN>Y@I78 z=ke_9?7sX@o0*x}M{JB77MIXj_MmNE%+1Xe{*{crh)9={dR(U;y-{jrxUXmG%Gt002ovPDHLkV1hy(sXhPz literal 0 HcmV?d00001 diff --git a/src/main/webapp/css/themes/black/images/spinner_arrows.png b/src/main/webapp/css/themes/black/images/spinner_arrows.png new file mode 100644 index 0000000000000000000000000000000000000000..349d7d9d1dd5757fe673c74779ca4397b3ac9880 GIT binary patch literal 140 zcmeAS@N?(olHy`uVBq!ia0vp^4nQox!3HFkJ+IURQo)`sjv*Dd-cGgTVld!f`TKvl zx$i261Imkz%njSa<|ydo5x!wz!%F5U-;Ot$9v8}1XAs{bw8eCRinje8hmeGw4b#=% p?40+0pF;`bK1VJIy@m-jV#fsL6&$#pdj@DcgQu&X%Q~loCIE{>Fhc+U literal 0 HcmV?d00001 diff --git a/src/main/webapp/css/themes/black/images/tabs_icons.png b/src/main/webapp/css/themes/black/images/tabs_icons.png new file mode 100644 index 0000000000000000000000000000000000000000..732b1237a14cf6c525dee8646f322d5603664866 GIT binary patch literal 144 zcmeAS@N?(olHy`uVBq!ia0vp^20$#p!3HD)*8SNCq{2O2978H@B_~L*E^a7$U@!3C zaj-Z4S(*MEORM>}ezCPaUb%ArQw1m64&Nzopr0N{TzyZ`_I literal 0 HcmV?d00001 diff --git a/src/main/webapp/css/themes/black/images/tagbox_icons.png b/src/main/webapp/css/themes/black/images/tagbox_icons.png new file mode 100644 index 0000000000000000000000000000000000000000..faddd10cab63488000e766ca3cb10a4a21671c10 GIT binary patch literal 133 zcmeAS@N?(olHy`uVBq!ia0vp^3P3Et!3HGD8EPYel#i#2V@SoV($fFg z6O)c!JXo)x5GJ#nd4ld?HMbLtC#EF|E8h}a647_oX_D^oryN0xCn=p~zr)BZ#mYR7 hgWX2DuSt-dVWQ=IMMbkYnLu+HJYD@<);T3K0RXNJC2Rly literal 0 HcmV?d00001 diff --git a/src/main/webapp/css/themes/black/images/tree_icons.png b/src/main/webapp/css/themes/black/images/tree_icons.png new file mode 100644 index 0000000000000000000000000000000000000000..2b4fd2025c7588c84df27d89466b470e273f5c06 GIT binary patch literal 3086 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 literal 0 HcmV?d00001 diff --git a/src/main/webapp/css/themes/black/images/validatebox_warning.png b/src/main/webapp/css/themes/black/images/validatebox_warning.png new file mode 100644 index 0000000000000000000000000000000000000000..2b3d4f05babf3f82b146350e96570fac02075de0 GIT binary patch literal 921 zcmV;K17`e*P)nRv1_mBsMY*-M^XCf)eflW5 z|MC^)Hw+AW{sHCCF+cz@{fF8J!+#-kxoSv=7^|!zgOQUngSQ}mDo|J)n+pH}hzZ#= zr~y18$_m-?9v%$;?mu8);}>9vFgFvDXJDwrW&l6{p}625M66yTFhGz^K$w9^O$BHi zFN2Ym7DIple*#cW4BY^L0Al(Jbv6k9U|^6IQBp{hx3XdQ&CJ4Z_|YSVr@XujY(PVT zlok1<85nBO4FCurumK>O|A07*jFlSRUcxLAQVcIR*co#3@)&jj4Pj7KXRri%#h;fa z4ya5O*#Lk5Vq!q}T~=CGH(uV-hJk^fkAYoGjN#AMuMF($>N=giWG}IXse|=+c=i>7HEg>%*E%fLD!-uy|85n^6W?^Dt(9zXp5EB&z+w>_knBmdiKMbzi z?A!`WOl>e100a=&05*1xZdFls?*HtZ48H?o7=HW%ivIu45E2~BASWx!@DIpmv9e}h zaPwji|L}pqor@y`=yxrU0RRES^qYY}O;TRcU+DKIhL4`%3_nyf8U6tS<<-ZJ40D$( zWjJ%`G6NIPHNP2{7am*Fp% z{>ShK#0G`~kjd~57_BU.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; +} +.panel-hleft>.panel-header .panel-title, +.panel-hright>.panel-header .panel-title { + position: absolute; + min-width: 16px; + left: 21px; + 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: 5px; + 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; +} diff --git a/src/main/webapp/css/themes/black/passwordbox.css b/src/main/webapp/css/themes/black/passwordbox.css new file mode 100644 index 0000000..92c9ce5 --- /dev/null +++ b/src/main/webapp/css/themes/black/passwordbox.css @@ -0,0 +1,6 @@ +.passwordbox-open { + background: url('images/passwordbox_open.png') no-repeat center center; +} +.passwordbox-close { + background: url('images/passwordbox_close.png') no-repeat center center; +} diff --git a/src/main/webapp/css/themes/black/progressbar.css b/src/main/webapp/css/themes/black/progressbar.css new file mode 100644 index 0000000..79fcf62 --- /dev/null +++ b/src/main/webapp/css/themes/black/progressbar.css @@ -0,0 +1,32 @@ +.progressbar { + border-width: 1px; + border-style: solid; + -moz-border-radius: 5px 5px 5px 5px; + -webkit-border-radius: 5px 5px 5px 5px; + border-radius: 5px 5px 5px 5px; + overflow: hidden; + position: relative; +} +.progressbar-text { + text-align: center; + position: absolute; +} +.progressbar-value { + position: relative; + overflow: hidden; + width: 0; + -moz-border-radius: 5px 0 0 5px; + -webkit-border-radius: 5px 0 0 5px; + border-radius: 5px 0 0 5px; +} +.progressbar { + border-color: #000; +} +.progressbar-text { + color: #fff; + font-size: 12px; +} +.progressbar-value .progressbar-text { + background-color: #0052A3; + color: #fff; +} diff --git a/src/main/webapp/css/themes/black/propertygrid.css b/src/main/webapp/css/themes/black/propertygrid.css new file mode 100644 index 0000000..d71ce7c --- /dev/null +++ b/src/main/webapp/css/themes/black/propertygrid.css @@ -0,0 +1,28 @@ +.propertygrid .datagrid-view1 .datagrid-body td { + padding-bottom: 1px; + border-width: 0 1px 0 0; +} +.propertygrid .datagrid-group { + height: 21px; + 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: #222; +} +.propertygrid .datagrid-view1 .datagrid-group { + border-color: #3d3d3d; +} +.propertygrid .datagrid-view2 .datagrid-group { + border-color: #222; +} +.propertygrid .datagrid-group, +.propertygrid .datagrid-view1 .datagrid-body, +.propertygrid .datagrid-view1 .datagrid-row-over, +.propertygrid .datagrid-view1 .datagrid-row-selected { + background: #3d3d3d; +} diff --git a/src/main/webapp/css/themes/black/searchbox.css b/src/main/webapp/css/themes/black/searchbox.css new file mode 100644 index 0000000..01f6697 --- /dev/null +++ b/src/main/webapp/css/themes/black/searchbox.css @@ -0,0 +1,61 @@ +.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: #3d3d3d; +} +.searchbox .l-btn-plain-disabled, +.searchbox .l-btn-plain-disabled:hover { + opacity: 0.5; + filter: alpha(opacity=50); +} diff --git a/src/main/webapp/css/themes/black/slider.css b/src/main/webapp/css/themes/black/slider.css new file mode 100644 index 0000000..cd66bf5 --- /dev/null +++ b/src/main/webapp/css/themes/black/slider.css @@ -0,0 +1,101 @@ +.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: 12px; + 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: 12px; +} +.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: #000; + background: #3d3d3d; +} +.slider-rule span { + border-color: #000; +} +.slider-rulelabel span { + color: #fff; +} diff --git a/src/main/webapp/css/themes/black/spinner.css b/src/main/webapp/css/themes/black/spinner.css new file mode 100644 index 0000000..6686ca0 --- /dev/null +++ b/src/main/webapp/css/themes/black/spinner.css @@ -0,0 +1,58 @@ +.spinner-arrow { + background-color: #3d3d3d; + display: inline-block; + overflow: hidden; + vertical-align: top; + margin: 0; + padding: 0; + opacity: 1.0; + filter: alpha(opacity=100); + width: 18px; +} +.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: #fff; + outline-style: none; +} +.spinner-arrow-hover { + background-color: #777; + opacity: 1.0; + filter: alpha(opacity=100); +} +.spinner-arrow-up:hover, +.spinner-arrow-down:hover { + opacity: 1.0; + filter: alpha(opacity=100); + background-color: #777; +} +.textbox-icon-disabled .spinner-arrow-up:hover, +.textbox-icon-disabled .spinner-arrow-down:hover { + opacity: 0.6; + filter: alpha(opacity=60); + background-color: #3d3d3d; + 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; +} +.spinner-arrow-down { + background: url('images/spinner_arrows.png') no-repeat -15px center; +} +.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; +} diff --git a/src/main/webapp/css/themes/black/splitbutton.css b/src/main/webapp/css/themes/black/splitbutton.css new file mode 100644 index 0000000..b42e396 --- /dev/null +++ b/src/main/webapp/css/themes/black/splitbutton.css @@ -0,0 +1,12 @@ +.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: #cccccc; + border-width: 0 0 0 1px; +} diff --git a/src/main/webapp/css/themes/black/switchbutton.css b/src/main/webapp/css/themes/black/switchbutton.css new file mode 100644 index 0000000..b1b5714 --- /dev/null +++ b/src/main/webapp/css/themes/black/switchbutton.css @@ -0,0 +1,77 @@ +.switchbutton { + text-decoration: none; + display: inline-block; + overflow: hidden; + vertical-align: middle; + margin: 0; + padding: 0; + cursor: pointer; + background: #555; + border: 1px solid #555; + -moz-border-radius: 5px 5px 5px 5px; + -webkit-border-radius: 5px 5px 5px 5px; + border-radius: 5px 5px 5px 5px; +} +.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: 12px; + -moz-border-radius: 5px 5px 5px 5px; + -webkit-border-radius: 5px 5px 5px 5px; + border-radius: 5px 5px 5px 5px; +} +.switchbutton-on { + background: #0052A3; + color: #fff; +} +.switchbutton-off { + background-color: #666; + color: #fff; +} +.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: #666; + color: #fff; + border: 1px solid #555; + -moz-box-shadow: 0 0 3px 0 #555; + -webkit-box-shadow: 0 0 3px 0 #555; + box-shadow: 0 0 3px 0 #555; +} +.switchbutton-value { + position: absolute; + top: 0; + left: -5000px; +} +.switchbutton-disabled { + opacity: 0.5; + filter: alpha(opacity=50); +} +.switchbutton-disabled, +.switchbutton-readonly { + cursor: default; +} diff --git a/src/main/webapp/css/themes/black/tabs.css b/src/main/webapp/css/themes/black/tabs.css new file mode 100644 index 0000000..4ab73de --- /dev/null +++ b/src/main/webapp/css/themes/black/tabs.css @@ -0,0 +1,413 @@ +.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 a.tabs-inner { + display: inline-block; + text-decoration: none; + 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 a.tabs-inner { + font-weight: bold; + outline: none; +} +.tabs li.tabs-selected a:hover.tabs-inner { + 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: 12px; +} +.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 a.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 a.tabs-inner { + padding-left: 0; + padding-right: 0; +} +.tabs-header-left .tabs li a.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 a.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 a.tabs-inner { + -moz-border-radius: 5px 5px 5px 5px; + -webkit-border-radius: 5px 5px 5px 5px; + border-radius: 5px 5px 5px 5px; +} +.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: #3d3d3d url('images/tabs_icons.png') no-repeat 1px center; +} +.tabs-scroller-right { + background: #3d3d3d 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 a.tabs-inner:hover { + background: #777; + color: #fff; + filter: none; +} +.tabs li.tabs-selected a.tabs-inner { + background-color: #666; + color: #fff; + background: -webkit-linear-gradient(top,#454545 0,#666 100%); + background: -moz-linear-gradient(top,#454545 0,#666 100%); + background: -o-linear-gradient(top,#454545 0,#666 100%); + background: linear-gradient(to bottom,#454545 0,#666 100%); + background-repeat: repeat-x; + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr=#454545,endColorstr=#666,GradientType=0); +} +.tabs-header-bottom .tabs li.tabs-selected a.tabs-inner { + background: -webkit-linear-gradient(top,#666 0,#454545 100%); + background: -moz-linear-gradient(top,#666 0,#454545 100%); + background: -o-linear-gradient(top,#666 0,#454545 100%); + background: linear-gradient(to bottom,#666 0,#454545 100%); + background-repeat: repeat-x; + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr=#666,endColorstr=#454545,GradientType=0); +} +.tabs-header-left .tabs li.tabs-selected a.tabs-inner { + background: -webkit-linear-gradient(left,#454545 0,#666 100%); + background: -moz-linear-gradient(left,#454545 0,#666 100%); + background: -o-linear-gradient(left,#454545 0,#666 100%); + background: linear-gradient(to right,#454545 0,#666 100%); + background-repeat: repeat-y; + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr=#454545,endColorstr=#666,GradientType=1); +} +.tabs-header-right .tabs li.tabs-selected a.tabs-inner { + background: -webkit-linear-gradient(left,#666 0,#454545 100%); + background: -moz-linear-gradient(left,#666 0,#454545 100%); + background: -o-linear-gradient(left,#666 0,#454545 100%); + background: linear-gradient(to right,#666 0,#454545 100%); + background-repeat: repeat-y; + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr=#666,endColorstr=#454545,GradientType=1); +} +.tabs li a.tabs-inner { + color: #fff; + background-color: #3d3d3d; + background: -webkit-linear-gradient(top,#454545 0,#383838 100%); + background: -moz-linear-gradient(top,#454545 0,#383838 100%); + background: -o-linear-gradient(top,#454545 0,#383838 100%); + background: linear-gradient(to bottom,#454545 0,#383838 100%); + background-repeat: repeat-x; + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr=#454545,endColorstr=#383838,GradientType=0); +} +.tabs-header, +.tabs-tool { + background-color: #3d3d3d; +} +.tabs-header-plain { + background: transparent; +} +.tabs-header, +.tabs-scroller-left, +.tabs-scroller-right, +.tabs-tool, +.tabs, +.tabs-panels, +.tabs li a.tabs-inner, +.tabs li.tabs-selected a.tabs-inner, +.tabs-header-bottom .tabs li.tabs-selected a.tabs-inner, +.tabs-header-left .tabs li.tabs-selected a.tabs-inner, +.tabs-header-right .tabs li.tabs-selected a.tabs-inner { + border-color: #000; +} +.tabs-p-tool a:hover, +.tabs li a:hover.tabs-close, +.tabs-scroller-over { + background-color: #777; +} +.tabs li.tabs-selected a.tabs-inner { + border-bottom: 1px solid #666; +} +.tabs-header-bottom .tabs li.tabs-selected a.tabs-inner { + border-top: 1px solid #666; +} +.tabs-header-left .tabs li.tabs-selected a.tabs-inner { + border-right: 1px solid #666; +} +.tabs-header-right .tabs li.tabs-selected a.tabs-inner { + border-left: 1px solid #666; +} +.tabs-header .tabs-pill li.tabs-selected a.tabs-inner { + background: #0052A3; + color: #fff; + filter: none; + border-color: #000; +} diff --git a/src/main/webapp/css/themes/black/tagbox.css b/src/main/webapp/css/themes/black/tagbox.css new file mode 100644 index 0000000..e08ec87 --- /dev/null +++ b/src/main/webapp/css/themes/black/tagbox.css @@ -0,0 +1,44 @@ +.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: 5px 5px 5px 5px; + -webkit-border-radius: 5px 5px 5px 5px; + border-radius: 5px 5px 5px 5px; + background: #777; + color: #fff; +} +.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); +} diff --git a/src/main/webapp/css/themes/black/textbox.css b/src/main/webapp/css/themes/black/textbox.css new file mode 100644 index 0000000..f93ad88 --- /dev/null +++ b/src/main/webapp/css/themes/black/textbox.css @@ -0,0 +1,139 @@ +.textbox { + position: relative; + border: 1px solid #000; + background-color: #fff; + vertical-align: middle; + display: inline-block; + overflow: hidden; + white-space: nowrap; + margin: 0; + padding: 0; + -moz-border-radius: 5px 5px 5px 5px; + -webkit-border-radius: 5px 5px 5px 5px; + border-radius: 5px 5px 5px 5px; +} +.textbox .textbox-text { + font-size: 12px; + border: 0; + margin: 0; + padding: 4px; + white-space: normal; + vertical-align: top; + outline-style: none; + resize: none; + -moz-border-radius: 5px 5px 5px 5px; + -webkit-border-radius: 5px 5px 5px 5px; + border-radius: 5px 5px 5px 5px; +} +.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: 22px; + line-height: 22px; + 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: #000000; + -moz-box-shadow: 0 0 3px 0 #000; + -webkit-box-shadow: 0 0 3px 0 #000; + box-shadow: 0 0 3px 0 #000; +} +.textbox-invalid { + border-color: #ffa8a8; + background-color: #fff3f3; +} diff --git a/src/main/webapp/css/themes/black/tooltip.css b/src/main/webapp/css/themes/black/tooltip.css new file mode 100644 index 0000000..391fd95 --- /dev/null +++ b/src/main/webapp/css/themes/black/tooltip.css @@ -0,0 +1,103 @@ +.tooltip { + position: absolute; + display: none; + z-index: 9900000; + outline: none; + opacity: 1; + filter: alpha(opacity=100); + padding: 5px; + border-width: 1px; + border-style: solid; + border-radius: 5px; + -moz-border-radius: 5px 5px 5px 5px; + -webkit-border-radius: 5px 5px 5px 5px; + border-radius: 5px 5px 5px 5px; +} +.tooltip-content { + font-size: 12px; +} +.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; + _border-color: tomato; + _filter: chroma(color=tomato); +} +.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: #666; + border-color: #000; + color: #fff; +} +.tooltip-right .tooltip-arrow-outer { + border-right-color: #000; +} +.tooltip-right .tooltip-arrow { + border-right-color: #666; +} +.tooltip-left .tooltip-arrow-outer { + border-left-color: #000; +} +.tooltip-left .tooltip-arrow { + border-left-color: #666; +} +.tooltip-top .tooltip-arrow-outer { + border-top-color: #000; +} +.tooltip-top .tooltip-arrow { + border-top-color: #666; +} +.tooltip-bottom .tooltip-arrow-outer { + border-bottom-color: #000; +} +.tooltip-bottom .tooltip-arrow { + border-bottom-color: #666; +} diff --git a/src/main/webapp/css/themes/black/tree.css b/src/main/webapp/css/themes/black/tree.css new file mode 100644 index 0000000..88dfe0b --- /dev/null +++ b/src/main/webapp/css/themes/black/tree.css @@ -0,0 +1,161 @@ +.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: 18px; + 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; + vertical-align: top; + overflow: hidden; +} +.tree-expanded { + background: url('images/tree_icons.png') no-repeat -18px 0px; +} +.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; +} +.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; +} +.tree-folder-open { + background: url('images/tree_icons.png') no-repeat -224px 0; +} +.tree-file { + background: url('images/tree_icons.png') no-repeat -240px 0; +} +.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; +} +.tree-title { + font-size: 12px; + display: inline-block; + text-decoration: none; + vertical-align: top; + white-space: nowrap; + padding: 0 2px; + height: 18px; + line-height: 18px; +} +.tree-node-proxy { + font-size: 12px; + 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 #000; + font-size: 12px; + line-height: 16px; + padding: 0 4px; + margin: 0; + width: 80px; + outline-style: none; + vertical-align: top; + position: absolute; + top: 0; +} +.tree-node-proxy { + background-color: #666; + color: #fff; + border-color: #000; +} +.tree-node-hover { + background: #777; + color: #fff; +} +.tree-node-selected { + background: #0052A3; + color: #fff; +} +.tree-node-hidden { + display: none; +} diff --git a/src/main/webapp/css/themes/black/validatebox.css b/src/main/webapp/css/themes/black/validatebox.css new file mode 100644 index 0000000..1fc3ad6 --- /dev/null +++ b/src/main/webapp/css/themes/black/validatebox.css @@ -0,0 +1,5 @@ +.validatebox-invalid { + border-color: #ffa8a8; + background-color: #fff3f3; + color: #000; +} diff --git a/src/main/webapp/css/themes/black/window.css b/src/main/webapp/css/themes/black/window.css new file mode 100644 index 0000000..37de72d --- /dev/null +++ b/src/main/webapp/css/themes/black/window.css @@ -0,0 +1,183 @@ +.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: 5px 5px 5px 5px; + -webkit-border-radius: 5px 5px 5px 5px; + border-radius: 5px 5px 5px 5px; +} +.window-shadow { + background: #777; + -moz-box-shadow: 2px 2px 3px #787878; + -webkit-box-shadow: 2px 2px 3px #787878; + box-shadow: 2px 2px 3px #787878; + filter: progid:DXImageTransform.Microsoft.Blur(pixelRadius=2,MakeShadow=false,ShadowOpacity=0.2); +} +.window, +.window .window-body { + border-color: #000; +} +.window { + background-color: #3d3d3d; + background: -webkit-linear-gradient(top,#454545 0,#383838 20%); + background: -moz-linear-gradient(top,#454545 0,#383838 20%); + background: -o-linear-gradient(top,#454545 0,#383838 20%); + background: linear-gradient(to bottom,#454545 0,#383838 20%); + background-repeat: repeat-x; + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr=#454545,endColorstr=#383838,GradientType=0); +} +.window-proxy { + border: 1px dashed #000; +} +.window-proxy-mask, +.window-mask { + background: #000; +} +.window .panel-footer { + border: 1px solid #000; + 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-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; +} diff --git a/src/main/webapp/css/themes/bootstrap/accordion.css b/src/main/webapp/css/themes/bootstrap/accordion.css new file mode 100644 index 0000000..9d268c0 --- /dev/null +++ b/src/main/webapp/css/themes/bootstrap/accordion.css @@ -0,0 +1,89 @@ +.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; +} +.accordion-expand { + background: url('images/accordion_arrows.png') no-repeat -16px 0; +} +.accordion { + background: #ffffff; + border-color: #D4D4D4; +} +.accordion .accordion-header { + background: #F2F2F2; + filter: none; +} +.accordion .accordion-header-selected { + background: #0081c2; +} +.accordion .accordion-header-selected .panel-title { + color: #fff; +} +.accordion .panel-last > .accordion-header { + border-bottom-color: #F2F2F2; +} +.accordion .panel-last > .accordion-body { + border-bottom-color: #ffffff; +} +.accordion .panel-last > .accordion-header-selected, +.accordion .panel-last > .accordion-header-border { + border-bottom-color: #D4D4D4; +} +.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: #F2F2F2; +} +.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: #D4D4D4; +} +.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: #F2F2F2; +} +.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: #D4D4D4; +} diff --git a/src/main/webapp/css/themes/bootstrap/calendar.css b/src/main/webapp/css/themes/bootstrap/calendar.css new file mode 100644 index 0000000..ae1a8ac --- /dev/null +++ b/src/main/webapp/css/themes/bootstrap/calendar.css @@ -0,0 +1,202 @@ +.calendar { + border-width: 1px; + border-style: solid; + padding: 1px; + overflow: hidden; +} +.calendar table { + table-layout: fixed; + border-collapse: separate; + font-size: 12px; + width: 100%; + height: 100%; +} +.calendar table td, +.calendar table th { + font-size: 12px; +} +.calendar-noborder { + border: 0; +} +.calendar-header { + position: relative; + height: 22px; +} +.calendar-title { + text-align: center; + height: 22px; +} +.calendar-title span { + position: relative; + display: inline-block; + top: 2px; + padding: 0 3px; + height: 18px; + line-height: 18px; + font-size: 12px; + cursor: pointer; + -moz-border-radius: 5px 5px 5px 5px; + -webkit-border-radius: 5px 5px 5px 5px; + border-radius: 5px 5px 5px 5px; +} +.calendar-prevmonth, +.calendar-nextmonth, +.calendar-prevyear, +.calendar-nextyear { + position: absolute; + top: 50%; + margin-top: -7px; + width: 14px; + height: 14px; + cursor: pointer; + font-size: 1px; + -moz-border-radius: 5px 5px 5px 5px; + -webkit-border-radius: 5px 5px 5px 5px; + border-radius: 5px 5px 5px 5px; +} +.calendar-prevmonth { + left: 20px; + background: url('images/calendar_arrows.png') no-repeat -18px -2px; +} +.calendar-nextmonth { + right: 20px; + background: url('images/calendar_arrows.png') no-repeat -34px -2px; +} +.calendar-prevyear { + left: 3px; + background: url('images/calendar_arrows.png') no-repeat -1px -2px; +} +.calendar-nextyear { + right: 3px; + background: url('images/calendar_arrows.png') no-repeat -49px -2px; +} +.calendar-body { + position: relative; +} +.calendar-body th, +.calendar-body td { + text-align: center; +} +.calendar-day { + border: 0; + padding: 1px; + cursor: pointer; + -moz-border-radius: 5px 5px 5px 5px; + -webkit-border-radius: 5px 5px 5px 5px; + border-radius: 5px 5px 5px 5px; +} +.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: 12px; + display: none; + overflow: hidden; +} +.calendar-menu-year-inner { + text-align: center; + padding-bottom: 5px; +} +.calendar-menu-year { + width: 50px; + text-align: center; + border-width: 1px; + border-style: solid; + outline-style: none; + resize: none; + margin: 0; + padding: 2px; + font-weight: bold; + font-size: 12px; + -moz-border-radius: 5px 5px 5px 5px; + -webkit-border-radius: 5px 5px 5px 5px; + border-radius: 5px 5px 5px 5px; +} +.calendar-menu-prev, +.calendar-menu-next { + display: inline-block; + width: 21px; + height: 21px; + vertical-align: top; + cursor: pointer; + -moz-border-radius: 5px 5px 5px 5px; + -webkit-border-radius: 5px 5px 5px 5px; + border-radius: 5px 5px 5px 5px; +} +.calendar-menu-prev { + margin-right: 10px; + background: url('images/calendar_arrows.png') no-repeat 2px 2px; +} +.calendar-menu-next { + margin-left: 10px; + background: url('images/calendar_arrows.png') no-repeat -45px 2px; +} +.calendar-menu-month { + text-align: center; + cursor: pointer; + font-weight: bold; + -moz-border-radius: 5px 5px 5px 5px; + -webkit-border-radius: 5px 5px 5px 5px; + border-radius: 5px 5px 5px 5px; +} +.calendar-body th, +.calendar-menu-month { + color: #808080; +} +.calendar-day { + color: #333; +} +.calendar-sunday { + color: #CC2222; +} +.calendar-saturday { + color: #00ee00; +} +.calendar-today { + color: #0000ff; +} +.calendar-menu-year { + border-color: #D4D4D4; +} +.calendar { + border-color: #D4D4D4; +} +.calendar-header { + background: #F2F2F2; +} +.calendar-body, +.calendar-menu { + background: #ffffff; +} +.calendar-body th { + background: #F5F5F5; + padding: 2px 0; +} +.calendar-hover, +.calendar-nav-hover, +.calendar-menu-hover { + background-color: #e6e6e6; + color: #00438a; +} +.calendar-hover { + border: 1px solid #ddd; + padding: 0; +} +.calendar-selected { + background-color: #0081c2; + color: #fff; + border: 1px solid #0070a9; + padding: 0; +} diff --git a/src/main/webapp/css/themes/bootstrap/combo.css b/src/main/webapp/css/themes/bootstrap/combo.css new file mode 100644 index 0000000..fc9030d --- /dev/null +++ b/src/main/webapp/css/themes/bootstrap/combo.css @@ -0,0 +1,35 @@ +.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; +} +.combo-panel { + background-color: #ffffff; +} +.combo-arrow { + background-color: #F2F2F2; +} +.combo-arrow-hover { + background-color: #e6e6e6; +} +.combo-arrow:hover { + background-color: #e6e6e6; +} +.combo .textbox-icon-disabled:hover { + cursor: default; +} diff --git a/src/main/webapp/css/themes/bootstrap/combobox.css b/src/main/webapp/css/themes/bootstrap/combobox.css new file mode 100644 index 0000000..fe74425 --- /dev/null +++ b/src/main/webapp/css/themes/bootstrap/combobox.css @@ -0,0 +1,39 @@ +.combobox-item, +.combobox-group, +.combobox-stick { + font-size: 12px; + padding: 3px; +} +.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: #e6e6e6; + color: #00438a; +} +.combobox-item-selected { + background-color: #0081c2; + color: #fff; +} +.combobox-icon { + display: inline-block; + width: 16px; + height: 16px; + vertical-align: middle; + margin-right: 2px; +} diff --git a/src/main/webapp/css/themes/bootstrap/datagrid.css b/src/main/webapp/css/themes/bootstrap/datagrid.css new file mode 100644 index 0000000..806bd6a --- /dev/null +++ b/src/main/webapp/css/themes/bootstrap/datagrid.css @@ -0,0 +1,288 @@ +.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: 25px; +} +.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 #D4D4D4; + font-size: 12px; + 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; +} +.datagrid-header, +.datagrid-td-rownumber { + background-color: #F2F2F2; + background: -webkit-linear-gradient(top,#ffffff 0,#F2F2F2 100%); + background: -moz-linear-gradient(top,#ffffff 0,#F2F2F2 100%); + background: -o-linear-gradient(top,#ffffff 0,#F2F2F2 100%); + background: linear-gradient(to bottom,#ffffff 0,#F2F2F2 100%); + background-repeat: repeat-x; + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr=#ffffff,endColorstr=#F2F2F2,GradientType=0); +} +.datagrid-cell-rownumber { + color: #333; +} +.datagrid-resize-proxy { + background: #bbb; +} +.datagrid-mask { + background: #ccc; +} +.datagrid-mask-msg { + border-color: #D4D4D4; +} +.datagrid-toolbar, +.datagrid-pager { + background: #F5F5F5; +} +.datagrid-header, +.datagrid-toolbar, +.datagrid-pager, +.datagrid-footer-inner { + border-color: #e6e6e6; +} +.datagrid-header td, +.datagrid-body td, +.datagrid-footer td { + border-color: #ccc; +} +.datagrid-htable, +.datagrid-btable, +.datagrid-ftable { + color: #333; + border-collapse: separate; +} +.datagrid-row-alt { + background: #F5F5F5; +} +.datagrid-row-over, +.datagrid-header td.datagrid-header-over { + background: #e6e6e6; + color: #00438a; + cursor: default; +} +.datagrid-row-selected { + background: #0081c2; + 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; +} diff --git a/src/main/webapp/css/themes/bootstrap/datalist.css b/src/main/webapp/css/themes/bootstrap/datalist.css new file mode 100644 index 0000000..68e8df6 --- /dev/null +++ b/src/main/webapp/css/themes/bootstrap/datalist.css @@ -0,0 +1,95 @@ +.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: #F2F2F2; + 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: #333; + 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: #e6e6e6; + color: #00438a; +} +.m-list .m-list-group { + padding: 0 4px; +} diff --git a/src/main/webapp/css/themes/bootstrap/datebox.css b/src/main/webapp/css/themes/bootstrap/datebox.css new file mode 100644 index 0000000..97e20dd --- /dev/null +++ b/src/main/webapp/css/themes/bootstrap/datebox.css @@ -0,0 +1,36 @@ +.datebox-calendar-inner { + height: 180px; +} +.datebox-button { + padding: 0 5px; + text-align: center; +} +.datebox-button a { + line-height: 22px; + font-size: 12px; + 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: #F5F5F5; +} +.datebox-button a { + color: #444; +} diff --git a/src/main/webapp/css/themes/bootstrap/dialog.css b/src/main/webapp/css/themes/bootstrap/dialog.css new file mode 100644 index 0000000..b44497f --- /dev/null +++ b/src/main/webapp/css/themes/bootstrap/dialog.css @@ -0,0 +1,47 @@ +.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: #F5F5F5; + border-width: 1px; + border-style: solid; +} +.dialog-toolbar { + border-color: #D4D4D4 #D4D4D4 #e6e6e6 #D4D4D4; +} +.dialog-button { + border-color: #e6e6e6 #D4D4D4 #D4D4D4 #D4D4D4; +} +.window-thinborder .dialog-toolbar { + border-left: transparent; + border-right: transparent; + border-top-color: #F5F5F5; +} +.window-thinborder .dialog-button { + top: 0px; + padding: 5px 8px 8px 8px; + border-left: transparent; + border-right: transparent; + border-bottom: transparent; +} diff --git a/src/main/webapp/css/themes/bootstrap/easyui.css b/src/main/webapp/css/themes/bootstrap/easyui.css new file mode 100644 index 0000000..1e6b255 --- /dev/null +++ b/src/main/webapp/css/themes/bootstrap/easyui.css @@ -0,0 +1,3239 @@ +.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: #e6e6e6; + -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; +} +.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; +} +.panel-header, +.panel-body { + border-color: #D4D4D4; +} +.panel-header { + background-color: #F2F2F2; + background: -webkit-linear-gradient(top,#ffffff 0,#F2F2F2 100%); + background: -moz-linear-gradient(top,#ffffff 0,#F2F2F2 100%); + background: -o-linear-gradient(top,#ffffff 0,#F2F2F2 100%); + background: linear-gradient(to bottom,#ffffff 0,#F2F2F2 100%); + background-repeat: repeat-x; + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr=#ffffff,endColorstr=#F2F2F2,GradientType=0); +} +.panel-body { + background-color: #ffffff; + color: #333; + font-size: 12px; +} +.panel-title { + font-size: 12px; + font-weight: bold; + color: #777; + height: 16px; + line-height: 16px; +} +.panel-footer { + border: 1px solid #D4D4D4; + overflow: hidden; + background: #F5F5F5; +} +.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; +} +.panel-hleft>.panel-header .panel-title, +.panel-hright>.panel-header .panel-title { + position: absolute; + min-width: 16px; + left: 21px; + 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: 5px; + 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; +} +.accordion-expand { + background: url('images/accordion_arrows.png') no-repeat -16px 0; +} +.accordion { + background: #ffffff; + border-color: #D4D4D4; +} +.accordion .accordion-header { + background: #F2F2F2; + filter: none; +} +.accordion .accordion-header-selected { + background: #0081c2; +} +.accordion .accordion-header-selected .panel-title { + color: #fff; +} +.accordion .panel-last > .accordion-header { + border-bottom-color: #F2F2F2; +} +.accordion .panel-last > .accordion-body { + border-bottom-color: #ffffff; +} +.accordion .panel-last > .accordion-header-selected, +.accordion .panel-last > .accordion-header-border { + border-bottom-color: #D4D4D4; +} +.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: #F2F2F2; +} +.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: #D4D4D4; +} +.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: #F2F2F2; +} +.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: #D4D4D4; +} +.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: 5px 5px 5px 5px; + -webkit-border-radius: 5px 5px 5px 5px; + border-radius: 5px 5px 5px 5px; +} +.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: progid:DXImageTransform.Microsoft.Blur(pixelRadius=2,MakeShadow=false,ShadowOpacity=0.2); +} +.window, +.window .window-body { + border-color: #D4D4D4; +} +.window { + background-color: #F2F2F2; + background: -webkit-linear-gradient(top,#ffffff 0,#F2F2F2 20%); + background: -moz-linear-gradient(top,#ffffff 0,#F2F2F2 20%); + background: -o-linear-gradient(top,#ffffff 0,#F2F2F2 20%); + background: linear-gradient(to bottom,#ffffff 0,#F2F2F2 20%); + background-repeat: repeat-x; + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr=#ffffff,endColorstr=#F2F2F2,GradientType=0); +} +.window-proxy { + border: 1px dashed #D4D4D4; +} +.window-proxy-mask, +.window-mask { + background: #ccc; +} +.window .panel-footer { + border: 1px solid #D4D4D4; + 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-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: #F5F5F5; + border-width: 1px; + border-style: solid; +} +.dialog-toolbar { + border-color: #D4D4D4 #D4D4D4 #e6e6e6 #D4D4D4; +} +.dialog-button { + border-color: #e6e6e6 #D4D4D4 #D4D4D4 #D4D4D4; +} +.window-thinborder .dialog-toolbar { + border-left: transparent; + border-right: transparent; + border-top-color: #F5F5F5; +} +.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: 24px; + font-size: 12px; + padding: 0; + margin: 0 4px; +} +.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 4px 0 24px; +} +.l-btn-icon-left .l-btn-icon { + left: 4px; +} +.l-btn-icon-right .l-btn-text { + margin: 0 24px 0 4px; +} +.l-btn-icon-right .l-btn-icon { + right: 4px; +} +.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 4px; + width: 16px; +} +.l-btn-plain:hover { + padding: 0; +} +.l-btn-focus { + outline: #0000FF dotted thin; +} +.l-btn-large .l-btn-text { + line-height: 40px; +} +.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 4px; + width: 32px; +} +.l-btn { + color: #444; + background: #f5f5f5; + background-repeat: repeat-x; + border: 1px solid #bbb; + background: -webkit-linear-gradient(top,#ffffff 0,#e6e6e6 100%); + background: -moz-linear-gradient(top,#ffffff 0,#e6e6e6 100%); + background: -o-linear-gradient(top,#ffffff 0,#e6e6e6 100%); + background: linear-gradient(to bottom,#ffffff 0,#e6e6e6 100%); + background-repeat: repeat-x; + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr=#ffffff,endColorstr=#e6e6e6,GradientType=0); + -moz-border-radius: 5px 5px 5px 5px; + -webkit-border-radius: 5px 5px 5px 5px; + border-radius: 5px 5px 5px 5px; +} +.l-btn:hover { + background: #e6e6e6; + color: #00438a; + border: 1px solid #ddd; + filter: none; +} +.l-btn-plain { + background: transparent; + border-width: 0; + filter: none; +} +.l-btn-outline { + border-width: 1px; + border-color: #ddd; + padding: 0; +} +.l-btn-plain:hover { + background: #e6e6e6; + color: #00438a; + border: 1px solid #ddd; + -moz-border-radius: 5px 5px 5px 5px; + -webkit-border-radius: 5px 5px 5px 5px; + border-radius: 5px 5px 5px 5px; +} +.l-btn-disabled, +.l-btn-disabled:hover { + opacity: 0.5; + cursor: default; + background: #f5f5f5; + color: #444; + background: -webkit-linear-gradient(top,#ffffff 0,#e6e6e6 100%); + background: -moz-linear-gradient(top,#ffffff 0,#e6e6e6 100%); + background: -o-linear-gradient(top,#ffffff 0,#e6e6e6 100%); + background: linear-gradient(to bottom,#ffffff 0,#e6e6e6 100%); + background-repeat: repeat-x; + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr=#ffffff,endColorstr=#e6e6e6,GradientType=0); +} +.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 #D4D4D4; + background-color: #fff; + vertical-align: middle; + display: inline-block; + overflow: hidden; + white-space: nowrap; + margin: 0; + padding: 0; + -moz-border-radius: 5px 5px 5px 5px; + -webkit-border-radius: 5px 5px 5px 5px; + border-radius: 5px 5px 5px 5px; +} +.textbox .textbox-text { + font-size: 12px; + border: 0; + margin: 0; + padding: 4px; + white-space: normal; + vertical-align: top; + outline-style: none; + resize: none; + -moz-border-radius: 5px 5px 5px 5px; + -webkit-border-radius: 5px 5px 5px 5px; + border-radius: 5px 5px 5px 5px; +} +.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: 22px; + line-height: 22px; + 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: #bbbbbb; + -moz-box-shadow: 0 0 3px 0 #D4D4D4; + -webkit-box-shadow: 0 0 3px 0 #D4D4D4; + box-shadow: 0 0 3px 0 #D4D4D4; +} +.textbox-invalid { + border-color: #ffa8a8; + background-color: #fff3f3; +} +.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; +} +.combo-panel { + background-color: #ffffff; +} +.combo-arrow { + background-color: #F2F2F2; +} +.combo-arrow-hover { + background-color: #e6e6e6; +} +.combo-arrow:hover { + background-color: #e6e6e6; +} +.combo .textbox-icon-disabled:hover { + cursor: default; +} +.combobox-item, +.combobox-group, +.combobox-stick { + font-size: 12px; + padding: 3px; +} +.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: #e6e6e6; + color: #00438a; +} +.combobox-item-selected { + background-color: #0081c2; + 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: 5px 5px 5px 5px; + -webkit-border-radius: 5px 5px 5px 5px; + border-radius: 5px 5px 5px 5px; + background: #e6e6e6; + color: #00438a; +} +.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: #bbb; +} +.layout-split-north { + border-bottom: 5px solid #eee; +} +.layout-split-south { + border-top: 5px solid #eee; +} +.layout-split-east { + border-left: 5px solid #eee; +} +.layout-split-west { + border-right: 5px solid #eee; +} +.layout-expand { + background-color: #F2F2F2; +} +.layout-expand-over { + background-color: #F2F2F2; +} +.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 a.tabs-inner { + display: inline-block; + text-decoration: none; + 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 a.tabs-inner { + font-weight: bold; + outline: none; +} +.tabs li.tabs-selected a:hover.tabs-inner { + 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: 12px; +} +.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 a.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 a.tabs-inner { + padding-left: 0; + padding-right: 0; +} +.tabs-header-left .tabs li a.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 a.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 a.tabs-inner { + -moz-border-radius: 5px 5px 5px 5px; + -webkit-border-radius: 5px 5px 5px 5px; + border-radius: 5px 5px 5px 5px; +} +.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: #F2F2F2 url('images/tabs_icons.png') no-repeat 1px center; +} +.tabs-scroller-right { + background: #F2F2F2 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 a.tabs-inner:hover { + background: #e6e6e6; + color: #00438a; + filter: none; +} +.tabs li.tabs-selected a.tabs-inner { + background-color: #ffffff; + color: #777; + background: -webkit-linear-gradient(top,#ffffff 0,#ffffff 100%); + background: -moz-linear-gradient(top,#ffffff 0,#ffffff 100%); + background: -o-linear-gradient(top,#ffffff 0,#ffffff 100%); + background: linear-gradient(to bottom,#ffffff 0,#ffffff 100%); + background-repeat: repeat-x; + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr=#ffffff,endColorstr=#ffffff,GradientType=0); +} +.tabs-header-bottom .tabs li.tabs-selected a.tabs-inner { + background: -webkit-linear-gradient(top,#ffffff 0,#ffffff 100%); + background: -moz-linear-gradient(top,#ffffff 0,#ffffff 100%); + background: -o-linear-gradient(top,#ffffff 0,#ffffff 100%); + background: linear-gradient(to bottom,#ffffff 0,#ffffff 100%); + background-repeat: repeat-x; + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr=#ffffff,endColorstr=#ffffff,GradientType=0); +} +.tabs-header-left .tabs li.tabs-selected a.tabs-inner { + background: -webkit-linear-gradient(left,#ffffff 0,#ffffff 100%); + background: -moz-linear-gradient(left,#ffffff 0,#ffffff 100%); + background: -o-linear-gradient(left,#ffffff 0,#ffffff 100%); + background: linear-gradient(to right,#ffffff 0,#ffffff 100%); + background-repeat: repeat-y; + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr=#ffffff,endColorstr=#ffffff,GradientType=1); +} +.tabs-header-right .tabs li.tabs-selected a.tabs-inner { + background: -webkit-linear-gradient(left,#ffffff 0,#ffffff 100%); + background: -moz-linear-gradient(left,#ffffff 0,#ffffff 100%); + background: -o-linear-gradient(left,#ffffff 0,#ffffff 100%); + background: linear-gradient(to right,#ffffff 0,#ffffff 100%); + background-repeat: repeat-y; + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr=#ffffff,endColorstr=#ffffff,GradientType=1); +} +.tabs li a.tabs-inner { + color: #777; + background-color: #F2F2F2; + background: -webkit-linear-gradient(top,#ffffff 0,#F2F2F2 100%); + background: -moz-linear-gradient(top,#ffffff 0,#F2F2F2 100%); + background: -o-linear-gradient(top,#ffffff 0,#F2F2F2 100%); + background: linear-gradient(to bottom,#ffffff 0,#F2F2F2 100%); + background-repeat: repeat-x; + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr=#ffffff,endColorstr=#F2F2F2,GradientType=0); +} +.tabs-header, +.tabs-tool { + background-color: #F2F2F2; +} +.tabs-header-plain { + background: transparent; +} +.tabs-header, +.tabs-scroller-left, +.tabs-scroller-right, +.tabs-tool, +.tabs, +.tabs-panels, +.tabs li a.tabs-inner, +.tabs li.tabs-selected a.tabs-inner, +.tabs-header-bottom .tabs li.tabs-selected a.tabs-inner, +.tabs-header-left .tabs li.tabs-selected a.tabs-inner, +.tabs-header-right .tabs li.tabs-selected a.tabs-inner { + border-color: #D4D4D4; +} +.tabs-p-tool a:hover, +.tabs li a:hover.tabs-close, +.tabs-scroller-over { + background-color: #e6e6e6; +} +.tabs li.tabs-selected a.tabs-inner { + border-bottom: 1px solid #ffffff; +} +.tabs-header-bottom .tabs li.tabs-selected a.tabs-inner { + border-top: 1px solid #ffffff; +} +.tabs-header-left .tabs li.tabs-selected a.tabs-inner { + border-right: 1px solid #ffffff; +} +.tabs-header-right .tabs li.tabs-selected a.tabs-inner { + border-left: 1px solid #ffffff; +} +.tabs-header .tabs-pill li.tabs-selected a.tabs-inner { + background: #0081c2; + color: #fff; + filter: none; + border-color: #D4D4D4; +} +.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: 25px; +} +.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 #D4D4D4; + font-size: 12px; + 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; +} +.datagrid-header, +.datagrid-td-rownumber { + background-color: #F2F2F2; + background: -webkit-linear-gradient(top,#ffffff 0,#F2F2F2 100%); + background: -moz-linear-gradient(top,#ffffff 0,#F2F2F2 100%); + background: -o-linear-gradient(top,#ffffff 0,#F2F2F2 100%); + background: linear-gradient(to bottom,#ffffff 0,#F2F2F2 100%); + background-repeat: repeat-x; + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr=#ffffff,endColorstr=#F2F2F2,GradientType=0); +} +.datagrid-cell-rownumber { + color: #333; +} +.datagrid-resize-proxy { + background: #bbb; +} +.datagrid-mask { + background: #ccc; +} +.datagrid-mask-msg { + border-color: #D4D4D4; +} +.datagrid-toolbar, +.datagrid-pager { + background: #F5F5F5; +} +.datagrid-header, +.datagrid-toolbar, +.datagrid-pager, +.datagrid-footer-inner { + border-color: #e6e6e6; +} +.datagrid-header td, +.datagrid-body td, +.datagrid-footer td { + border-color: #ccc; +} +.datagrid-htable, +.datagrid-btable, +.datagrid-ftable { + color: #333; + border-collapse: separate; +} +.datagrid-row-alt { + background: #F5F5F5; +} +.datagrid-row-over, +.datagrid-header td.datagrid-header-over { + background: #e6e6e6; + color: #00438a; + cursor: default; +} +.datagrid-row-selected { + background: #0081c2; + 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; +} +.propertygrid .datagrid-view1 .datagrid-body td { + padding-bottom: 1px; + border-width: 0 1px 0 0; +} +.propertygrid .datagrid-group { + height: 21px; + 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: #e6e6e6; +} +.propertygrid .datagrid-view1 .datagrid-group { + border-color: #F2F2F2; +} +.propertygrid .datagrid-view2 .datagrid-group { + border-color: #e6e6e6; +} +.propertygrid .datagrid-group, +.propertygrid .datagrid-view1 .datagrid-body, +.propertygrid .datagrid-view1 .datagrid-row-over, +.propertygrid .datagrid-view1 .datagrid-row-selected { + background: #F2F2F2; +} +.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: #F2F2F2; + 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: #333; + 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: #e6e6e6; + color: #00438a; +} +.m-list .m-list-group { + padding: 0 4px; +} +.pagination { + zoom: 1; +} +.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: 2em; + height: auto; +} +.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 { + width: 24px; + text-align: center; + margin: 0; +} +.pagination-first { + background: url('images/pagination_icons.png') no-repeat 0 center; +} +.pagination-prev { + background: url('images/pagination_icons.png') no-repeat -16px center; +} +.pagination-next { + background: url('images/pagination_icons.png') no-repeat -32px center; +} +.pagination-last { + background: url('images/pagination_icons.png') no-repeat -48px center; +} +.pagination-load { + background: url('images/pagination_icons.png') no-repeat -64px center; +} +.pagination-loading { + background: url('images/loading.gif') no-repeat center center; +} +.pagination-page-list, +.pagination .pagination-num { + border-color: #D4D4D4; +} +.calendar { + border-width: 1px; + border-style: solid; + padding: 1px; + overflow: hidden; +} +.calendar table { + table-layout: fixed; + border-collapse: separate; + font-size: 12px; + width: 100%; + height: 100%; +} +.calendar table td, +.calendar table th { + font-size: 12px; +} +.calendar-noborder { + border: 0; +} +.calendar-header { + position: relative; + height: 22px; +} +.calendar-title { + text-align: center; + height: 22px; +} +.calendar-title span { + position: relative; + display: inline-block; + top: 2px; + padding: 0 3px; + height: 18px; + line-height: 18px; + font-size: 12px; + cursor: pointer; + -moz-border-radius: 5px 5px 5px 5px; + -webkit-border-radius: 5px 5px 5px 5px; + border-radius: 5px 5px 5px 5px; +} +.calendar-prevmonth, +.calendar-nextmonth, +.calendar-prevyear, +.calendar-nextyear { + position: absolute; + top: 50%; + margin-top: -7px; + width: 14px; + height: 14px; + cursor: pointer; + font-size: 1px; + -moz-border-radius: 5px 5px 5px 5px; + -webkit-border-radius: 5px 5px 5px 5px; + border-radius: 5px 5px 5px 5px; +} +.calendar-prevmonth { + left: 20px; + background: url('images/calendar_arrows.png') no-repeat -18px -2px; +} +.calendar-nextmonth { + right: 20px; + background: url('images/calendar_arrows.png') no-repeat -34px -2px; +} +.calendar-prevyear { + left: 3px; + background: url('images/calendar_arrows.png') no-repeat -1px -2px; +} +.calendar-nextyear { + right: 3px; + background: url('images/calendar_arrows.png') no-repeat -49px -2px; +} +.calendar-body { + position: relative; +} +.calendar-body th, +.calendar-body td { + text-align: center; +} +.calendar-day { + border: 0; + padding: 1px; + cursor: pointer; + -moz-border-radius: 5px 5px 5px 5px; + -webkit-border-radius: 5px 5px 5px 5px; + border-radius: 5px 5px 5px 5px; +} +.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: 12px; + display: none; + overflow: hidden; +} +.calendar-menu-year-inner { + text-align: center; + padding-bottom: 5px; +} +.calendar-menu-year { + width: 50px; + text-align: center; + border-width: 1px; + border-style: solid; + outline-style: none; + resize: none; + margin: 0; + padding: 2px; + font-weight: bold; + font-size: 12px; + -moz-border-radius: 5px 5px 5px 5px; + -webkit-border-radius: 5px 5px 5px 5px; + border-radius: 5px 5px 5px 5px; +} +.calendar-menu-prev, +.calendar-menu-next { + display: inline-block; + width: 21px; + height: 21px; + vertical-align: top; + cursor: pointer; + -moz-border-radius: 5px 5px 5px 5px; + -webkit-border-radius: 5px 5px 5px 5px; + border-radius: 5px 5px 5px 5px; +} +.calendar-menu-prev { + margin-right: 10px; + background: url('images/calendar_arrows.png') no-repeat 2px 2px; +} +.calendar-menu-next { + margin-left: 10px; + background: url('images/calendar_arrows.png') no-repeat -45px 2px; +} +.calendar-menu-month { + text-align: center; + cursor: pointer; + font-weight: bold; + -moz-border-radius: 5px 5px 5px 5px; + -webkit-border-radius: 5px 5px 5px 5px; + border-radius: 5px 5px 5px 5px; +} +.calendar-body th, +.calendar-menu-month { + color: #808080; +} +.calendar-day { + color: #333; +} +.calendar-sunday { + color: #CC2222; +} +.calendar-saturday { + color: #00ee00; +} +.calendar-today { + color: #0000ff; +} +.calendar-menu-year { + border-color: #D4D4D4; +} +.calendar { + border-color: #D4D4D4; +} +.calendar-header { + background: #F2F2F2; +} +.calendar-body, +.calendar-menu { + background: #ffffff; +} +.calendar-body th { + background: #F5F5F5; + padding: 2px 0; +} +.calendar-hover, +.calendar-nav-hover, +.calendar-menu-hover { + background-color: #e6e6e6; + color: #00438a; +} +.calendar-hover { + border: 1px solid #ddd; + padding: 0; +} +.calendar-selected { + background-color: #0081c2; + color: #fff; + border: 1px solid #0070a9; + padding: 0; +} +.datebox-calendar-inner { + height: 180px; +} +.datebox-button { + padding: 0 5px; + text-align: center; +} +.datebox-button a { + line-height: 22px; + font-size: 12px; + 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: #F5F5F5; +} +.datebox-button a { + color: #444; +} +.spinner-arrow { + background-color: #F2F2F2; + display: inline-block; + overflow: hidden; + vertical-align: top; + margin: 0; + padding: 0; + opacity: 1.0; + filter: alpha(opacity=100); + width: 18px; +} +.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; +} +.spinner-arrow-hover { + background-color: #e6e6e6; + opacity: 1.0; + filter: alpha(opacity=100); +} +.spinner-arrow-up:hover, +.spinner-arrow-down:hover { + opacity: 1.0; + filter: alpha(opacity=100); + background-color: #e6e6e6; +} +.textbox-icon-disabled .spinner-arrow-up:hover, +.textbox-icon-disabled .spinner-arrow-down:hover { + opacity: 0.6; + filter: alpha(opacity=60); + background-color: #F2F2F2; + 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; +} +.spinner-arrow-down { + background: url('images/spinner_arrows.png') no-repeat -15px center; +} +.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: 5px 5px 5px 5px; + -webkit-border-radius: 5px 5px 5px 5px; + border-radius: 5px 5px 5px 5px; + overflow: hidden; + position: relative; +} +.progressbar-text { + text-align: center; + position: absolute; +} +.progressbar-value { + position: relative; + overflow: hidden; + width: 0; + -moz-border-radius: 5px 0 0 5px; + -webkit-border-radius: 5px 0 0 5px; + border-radius: 5px 0 0 5px; +} +.progressbar { + border-color: #D4D4D4; +} +.progressbar-text { + color: #333; + font-size: 12px; +} +.progressbar-value .progressbar-text { + background-color: #0081c2; + 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: #F2F2F2; +} +.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: 12px; + 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: 12px; +} +.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: #D4D4D4; + background: #F2F2F2; +} +.slider-rule span { + border-color: #D4D4D4; +} +.slider-rulelabel span { + color: #333; +} +.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: 5px 5px 5px 5px; + -webkit-border-radius: 5px 5px 5px 5px; + border-radius: 5px 5px 5px 5px; +} +.menu-item-disabled { + opacity: 0.5; + filter: alpha(opacity=50); + cursor: default; +} +.menu-text, +.menu-text span { + font-size: 12px; +} +.menu-shadow { + position: absolute; + -moz-border-radius: 5px 5px 5px 5px; + -webkit-border-radius: 5px 5px 5px 5px; + border-radius: 5px 5px 5px 5px; + background: #ccc; + -moz-box-shadow: 2px 2px 3px #cccccc; + -webkit-box-shadow: 2px 2px 3px #cccccc; + box-shadow: 2px 2px 3px #cccccc; + filter: progid:DXImageTransform.Microsoft.Blur(pixelRadius=2,MakeShadow=false,ShadowOpacity=0.2); +} +.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: #fff; + border-color: #e6e6e6; + color: #333; +} +.menu-content { + background: #ffffff; +} +.menu-item { + border-color: transparent; + _border-color: #fff; +} +.menu-active { + border-color: #ddd; + color: #00438a; + background: #e6e6e6; +} +.menu-active-disabled { + border-color: transparent; + background: transparent; + color: #333; +} +.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: #e6e6e6; + color: #00438a; + border: 1px solid #ddd; + filter: none; +} +.m-btn-plain-active, +.s-btn-plain-active { + background: transparent; + padding: 0; + border-width: 1px; + border-style: solid; + -moz-border-radius: 5px 5px 5px 5px; + -webkit-border-radius: 5px 5px 5px 5px; + border-radius: 5px 5px 5px 5px; +} +.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: #bbb; + 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: #ddd; + background-color: #e6e6e6; + color: #00438a; +} +.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: #bbb; + 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; +} +.messager-info { + background: url('images/messager_icons.png') no-repeat scroll 0 0; +} +.messager-question { + background: url('images/messager_icons.png') no-repeat scroll -32px 0; +} +.messager-warning { + background: url('images/messager_icons.png') no-repeat scroll -96px 0; +} +.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 #D4D4D4; +} +.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: 18px; + 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; + vertical-align: top; + overflow: hidden; +} +.tree-expanded { + background: url('images/tree_icons.png') no-repeat -18px 0px; +} +.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; +} +.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; +} +.tree-folder-open { + background: url('images/tree_icons.png') no-repeat -224px 0; +} +.tree-file { + background: url('images/tree_icons.png') no-repeat -240px 0; +} +.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; +} +.tree-title { + font-size: 12px; + display: inline-block; + text-decoration: none; + vertical-align: top; + white-space: nowrap; + padding: 0 2px; + height: 18px; + line-height: 18px; +} +.tree-node-proxy { + font-size: 12px; + 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 #D4D4D4; + font-size: 12px; + line-height: 16px; + padding: 0 4px; + margin: 0; + width: 80px; + outline-style: none; + vertical-align: top; + position: absolute; + top: 0; +} +.tree-node-proxy { + background-color: #ffffff; + color: #333; + border-color: #D4D4D4; +} +.tree-node-hover { + background: #e6e6e6; + color: #00438a; +} +.tree-node-selected { + background: #0081c2; + color: #fff; +} +.tree-node-hidden { + display: none; +} +.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; + border-radius: 5px; + -moz-border-radius: 5px 5px 5px 5px; + -webkit-border-radius: 5px 5px 5px 5px; + border-radius: 5px 5px 5px 5px; +} +.tooltip-content { + font-size: 12px; +} +.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; + _border-color: tomato; + _filter: chroma(color=tomato); +} +.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: #D4D4D4; + color: #333; +} +.tooltip-right .tooltip-arrow-outer { + border-right-color: #D4D4D4; +} +.tooltip-right .tooltip-arrow { + border-right-color: #ffffff; +} +.tooltip-left .tooltip-arrow-outer { + border-left-color: #D4D4D4; +} +.tooltip-left .tooltip-arrow { + border-left-color: #ffffff; +} +.tooltip-top .tooltip-arrow-outer { + border-top-color: #D4D4D4; +} +.tooltip-top .tooltip-arrow { + border-top-color: #ffffff; +} +.tooltip-bottom .tooltip-arrow-outer { + border-bottom-color: #D4D4D4; +} +.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: 5px 5px 5px 5px; + -webkit-border-radius: 5px 5px 5px 5px; + border-radius: 5px 5px 5px 5px; +} +.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: 12px; + -moz-border-radius: 5px 5px 5px 5px; + -webkit-border-radius: 5px 5px 5px 5px; + border-radius: 5px 5px 5px 5px; +} +.switchbutton-on { + background: #0081c2; + color: #fff; +} +.switchbutton-off { + background-color: #ffffff; + color: #333; +} +.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: #333; + 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; +} +.tabs-panels { + border-color: transparent; +} +.tabs li a.tabs-inner { + border-color: transparent; + background: transparent; + filter: none; + color: #0088CC; +} +.menu-active { + background-color: #0081C2; + border-color: #0081C2; + color: #fff; +} +.menu-active-disabled { + border-color: transparent; + background: transparent; + color: #333; +} diff --git a/src/main/webapp/css/themes/bootstrap/filebox.css b/src/main/webapp/css/themes/bootstrap/filebox.css new file mode 100644 index 0000000..c6bac66 --- /dev/null +++ b/src/main/webapp/css/themes/bootstrap/filebox.css @@ -0,0 +1,20 @@ +.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; +} diff --git a/src/main/webapp/css/themes/bootstrap/images/accordion_arrows.png b/src/main/webapp/css/themes/bootstrap/images/accordion_arrows.png new file mode 100644 index 0000000000000000000000000000000000000000..720835f69c96c17ec32a20b03ac9753aa59b7f4f GIT binary patch literal 184 zcmeAS@N?(olHy`uVBq!ia0vp^3P3Et!3HGD8EPYeRK2H*V@SoVUT_Y-nKxaI`{RC0WjSLJ&w^R(C-|JQTojLXc1&{d*_z{$ jW+oTMdQ(F|jDg|L>K${_)^zO#I)%a0)z4*}Q$iB}_fAN- literal 0 HcmV?d00001 diff --git a/src/main/webapp/css/themes/bootstrap/images/blank.gif b/src/main/webapp/css/themes/bootstrap/images/blank.gif new file mode 100644 index 0000000000000000000000000000000000000000..1d11fa9ada9e93505b3d736acb204083f45d5fbf GIT binary patch literal 43 scmZ?wbhEHbWMp7uX!y@?;J^U}1_s5SEQ~;kK?g*DWEhy3To@Uw0n;G|I{*Lx literal 0 HcmV?d00001 diff --git a/src/main/webapp/css/themes/bootstrap/images/calendar_arrows.png b/src/main/webapp/css/themes/bootstrap/images/calendar_arrows.png new file mode 100644 index 0000000000000000000000000000000000000000..430c4ad685b8c0068ecb7e3cbef74f493a84ad0d GIT binary patch literal 173 zcmeAS@N?(olHy`uVBq!ia0vp^4nQox!3HFkJ+IURQYD@)jv*Dd-cCEn)nLHm{QbZE z+q@uWwandfr?Jb4eDYYmB3UAt=OO2Vt+MMT&+KD%&6hZDt!FBpej;sEpMN69^tKl% zp6y<4_lG^P z=;=eQ4Vs74-2)Ua&f1tcVdk$#{GPKe@&?ZMHmT&SMw?IV&w7)}ixLbB3d$Zg{&KGb P8OPx1>gTe~DWM4fp>5!O@Gl{c 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 literal 0 HcmV?d00001 diff --git a/src/main/webapp/css/themes/bootstrap/images/loading.gif b/src/main/webapp/css/themes/bootstrap/images/loading.gif new file mode 100644 index 0000000000000000000000000000000000000000..68f01d04813c1f622810864a3aaa04b4a17ac8f9 GIT binary patch literal 1737 zcmaKsX;2e)7>CzDa{xjjy99|1A!tC(kfocDi)<1$AxHpOQ4k^l!Vx1W6x7<&|FYXU zqO4jEiU-!VR1p+Xj1?4-iuI_J;!&?!+ghg|JJad3U)pMGzcKxNeCM6tJnuX+uPvX@ zZY|=AHdxt2Xr2y*)5|c6#FSEuyJ+Y3Z&l z2hJWo`9;lJ$6wzSoW60tqkB|d$oiO*d-^85^ojn{*NR{MP*%{@H*#gihZ8BKyB68E z-MIbjgNNV0y5khpJ^Jv`51aR%={<4jhaVq5e*9D5+*hL)XCHn4{^d%hPu@?KpKbc=eN!D=XUjDmH#n{YHNS zHCX6BV)yn2CuTNujhN~V+`RKpyXO6^ht92eqhIIlQLfz6eeCnH_C7`NPNrw9ks366 z4xX9(`s~z=+1uX^ocZ$2_fBs=JihPfWYufOIuD&AU-@`>>qn~cy$1)T7CU!5z2(U8 z)9Kt9)l`f6?NU41j6XbXfR{OHwm|T4}&24tIf+!C-g~6cQfY2^n$?AT&ZW zgqm`}3-jS2NS6n=k;sr5Hv(Q%%n)qW0X|neWVBd;Ko}d(=u%?{O0-a>kSI}shOd9n z5top}%gUCf=>?tg;*;#7!^HOL3k$fMxd=O-6Y4@%u8LS)C1D_a?27R6^vcC+6tttL z)GmTahbyJB!xmcHL#ya8ZXyfRl)a!N0BJE0y3BBfAV5;#=K&Z2VkaKZ)?9`1h5P_% znt*b}%j1|#j`b|aQDx@~wA#$PYRN2xE6UO;;vE(@$&xww-s8fZ5HmJ(eJ*rQrDbaawDbrfe_8F(wq{ge?)qQG`aXV;r(*6EM|ESje;52aFmrX!f=Pw^2oGQX$1|o4yts|b_5@w_kNwtl{wDP#JGMvIp#!SYX?Wq9S&`&_ZwkgGH5CLB7DEGJ6=R4J~p3Z4i^A}hs=-uZeD zs92l6u@**R$~L()G{5N8*7cE5-q$SCo`q4|NSVF*+A7&xZnypm$EdXgf)E%(VJHFD zSgi(H!D!(;9Zcc#GrCCJh=RlvXBQ-hv4Vodse`a32ZUFWgP5ZhM5LeV(#D^H8p@Lg ztra5R32z@1rQv{6u&RZL5%Z@Ye{q|t#6aM_1hIrpl@)oH6}os*cbAQywa{5<`ekzW O1il%9bk82&KlvLjD^%40 literal 0 HcmV?d00001 diff --git a/src/main/webapp/css/themes/bootstrap/images/menu_arrows.png b/src/main/webapp/css/themes/bootstrap/images/menu_arrows.png new file mode 100644 index 0000000000000000000000000000000000000000..b986842e7e4044caed18edbcb4b376a4bb915623 GIT binary patch literal 160 zcmeAS@N?(olHy`uVBq!ia0vp^4nQox!3HFkJ+IURQt6&9jv*Dd-cB{-J7B=U{PTZ! zWrKV9%Z3|Wt5t$(gq+#d+-OocB$0fsr9DfRx52vPhSu$$+yXuy+69hDZ54DDTxx#r zL7>-12UT01v)>tZ+;HI4pDNf?@KK~EC$@35ykmXyu^HJF3})N>8P9Uwo&~g$!PC{x JWt~$(697!FIeGv9 literal 0 HcmV?d00001 diff --git a/src/main/webapp/css/themes/bootstrap/images/messager_icons.png b/src/main/webapp/css/themes/bootstrap/images/messager_icons.png new file mode 100644 index 0000000000000000000000000000000000000000..62c18c135860351063ebaabe8c0f4df7664b8f65 GIT binary patch literal 6116 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 G5}E*M5;#5p literal 0 HcmV?d00001 diff --git a/src/main/webapp/css/themes/bootstrap/images/passwordbox_open.png b/src/main/webapp/css/themes/bootstrap/images/passwordbox_open.png new file mode 100644 index 0000000000000000000000000000000000000000..d328891f6a18ea703fd25a47b228df9cb13b4744 GIT binary patch literal 165 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`Ii4<#Ar-fh6C~y}*jFF6I{2&m zf8fW~lSf{d9=Ouc<(SoRr6$ox=6dW5rxOB`TRe8 z#G%R{$Nj@Z)5m5kM@2RMITi_;Npmte=_#;rBych_7F`xqKKy}=f%DM}Q4`(M(}DIf Nc)I$ztaD0e0su|qH(3Ax literal 0 HcmV?d00001 diff --git a/src/main/webapp/css/themes/bootstrap/images/searchbox_button.png b/src/main/webapp/css/themes/bootstrap/images/searchbox_button.png new file mode 100644 index 0000000000000000000000000000000000000000..6dd1931589b453f6cc9772fd1851d8705d6b6631 GIT binary patch literal 813 zcmV+|1JeA7P)lXvaa)1B=8vtU6i;3jw7+Lm8D5$Z@i10EnF)=bcefw4K z$^E-CUfjQG`svfBbfD6|R#sLFj6lo3FG$G6@;ee>>~6i|H^5OY8c00W#fi<*1vzh{0&qu3dB`V0{{XDY`}(1n>S9M(9!zw#!&`A z#;*+0{6GVMSeWGp!`o{o8NPge#o%jgs54WT$qnQYpsyGNpauX05F;oJfZ`Pdw6!$j zynTH0RMa&!n3$Pa9zVGEY{&L(3qnPBl_DG6<9Xk0`Fl3`LiD4@pH{vDsxJWQ1qdJp zEJ>M}osCtQlY?CgW>F{;gVK#SmgoOZnEn5J%EtIXaWQXAO>Rdf)WFR;gt~f zXaA3z{{L{q=l48y!32yJ3i0hJ2BS=^}@sXzH{F9Iq&OW375;I7CG-}Vr|aF#l<(fySwu2>`YdxRW*W0f#2un=W5Jmvoe`XCK%I_Y++#`fwE+= zSd{sEULGDE%A=#BOW<6gP*6VfMa^fr8qe`5w%)P0a^Y9WGTw! zvI^|$>l@1Da^Ke1*T3RdY7KqM%gaBb(P+oP!GW;b?ZRfW3Bxc1H@GCaHK#XhZ*Lc= zRBC@>V&W#x&B5%(#>OW5`};d6I5Qw218EG_q@1gtr!Nl*v7yn?(MPMRt4SNy%--JK zanm#f^bw^}Nr7b(EUg}TUi(2;)deX10lAo=83+VA(QksJI6(zwptET-y~avN=J9w$ zI2`W5lG|aOkjY7(&!@;Jx*nUA>~J`Q)9L&(G8y=g$3a4YgD7z)5>gXQNKhw=uR0zF z#jHruh)gDv=bj|2ZES4(fEM?I!JyKqo=}sj-fBYTcDt4KXq)eFQH}wW`vh%Mla}#@ z@Mb`C)x@YkK{xd2>8ZLg+E!Lps$Q@6DY-~!0=Gs+Mm~_JnW1EbX2uxClEdN>Y@I78 z=ke_9?7sX@o0*x}M{JB77MIXj_MmNE%+1Xe{*{crh)9={dR(U;y-{jrxUXmG%Gt002ovPDHLkV1hy(sXhPz literal 0 HcmV?d00001 diff --git a/src/main/webapp/css/themes/bootstrap/images/spinner_arrows.png b/src/main/webapp/css/themes/bootstrap/images/spinner_arrows.png new file mode 100644 index 0000000000000000000000000000000000000000..7c2df483dbb30dfb3a51332c03fe6f0c229c0547 GIT binary patch literal 149 zcmeAS@N?(olHy`uVBq!ia0vp^4nQox!3HFkJ+IURQZb$`jv*Ddk`p9Y7bl4Dgeh3R zJz6gy$J;RRRRiNz`7}$-z5~nWg=}UsVYp!HpQ#{_&8An~S<1fjm*zKyrHmF27#+^4 x`1rk&EZfSkR8C?on>%wt3;O{L3Dzy_3@=Og7TEqO`UJFx!PC{xWt~$(69D$UE$jdQ literal 0 HcmV?d00001 diff --git a/src/main/webapp/css/themes/bootstrap/images/tabs_icons.png b/src/main/webapp/css/themes/bootstrap/images/tabs_icons.png new file mode 100644 index 0000000000000000000000000000000000000000..4d29966d7154338a9e2e358821a5f72655eba43e GIT binary patch literal 150 zcmeAS@N?(olHy`uVBq!ia0vp^20$#p!3HD)*8SNCq+&f?978H@B_~L*E^a7uNPG49 z|BoM6E;$_tDnm{r-UW|t3f!- literal 0 HcmV?d00001 diff --git a/src/main/webapp/css/themes/bootstrap/images/tagbox_icons.png b/src/main/webapp/css/themes/bootstrap/images/tagbox_icons.png new file mode 100644 index 0000000000000000000000000000000000000000..bd02e2d817c6b7c4e2a105919e9a89cc0a1d577f GIT binary patch literal 134 zcmeAS@N?(olHy`uVBq!ia0vp^3P3Et!3HGD8EPYel&`0YV@SoV>_0CQASS literal 0 HcmV?d00001 diff --git a/src/main/webapp/css/themes/bootstrap/images/tree_icons.png b/src/main/webapp/css/themes/bootstrap/images/tree_icons.png new file mode 100644 index 0000000000000000000000000000000000000000..e9be4f3a9965e49a4e4078f8c53f486d761a7468 GIT binary patch literal 3115 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 literal 0 HcmV?d00001 diff --git a/src/main/webapp/css/themes/bootstrap/images/validatebox_warning.png b/src/main/webapp/css/themes/bootstrap/images/validatebox_warning.png new file mode 100644 index 0000000000000000000000000000000000000000..2b3d4f05babf3f82b146350e96570fac02075de0 GIT binary patch literal 921 zcmV;K17`e*P)nRv1_mBsMY*-M^XCf)eflW5 z|MC^)Hw+AW{sHCCF+cz@{fF8J!+#-kxoSv=7^|!zgOQUngSQ}mDo|J)n+pH}hzZ#= zr~y18$_m-?9v%$;?mu8);}>9vFgFvDXJDwrW&l6{p}625M66yTFhGz^K$w9^O$BHi zFN2Ym7DIple*#cW4BY^L0Al(Jbv6k9U|^6IQBp{hx3XdQ&CJ4Z_|YSVr@XujY(PVT zlok1<85nBO4FCurumK>O|A07*jFlSRUcxLAQVcIR*co#3@)&jj4Pj7KXRri%#h;fa z4ya5O*#Lk5Vq!q}T~=CGH(uV-hJk^fkAYoGjN#AMuMF($>N=giWG}IXse|=+c=i>7HEg>%*E%fLD!-uy|85n^6W?^Dt(9zXp5EB&z+w>_knBmdiKMbzi z?A!`WOl>e100a=&05*1xZdFls?*HtZ48H?o7=HW%ivIu45E2~BASWx!@DIpmv9e}h zaPwji|L}pqor@y`=yxrU0RRES^qYY}O;TRcU+DKIhL4`%3_nyf8U6tS<<-ZJ40D$( zWjJ%`G6NIPHNP2{7am*Fp% z{>ShK#0G`~kjd~57_BU.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; +} +.panel-hleft>.panel-header .panel-title, +.panel-hright>.panel-header .panel-title { + position: absolute; + min-width: 16px; + left: 21px; + 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: 5px; + 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; +} diff --git a/src/main/webapp/css/themes/bootstrap/passwordbox.css b/src/main/webapp/css/themes/bootstrap/passwordbox.css new file mode 100644 index 0000000..92c9ce5 --- /dev/null +++ b/src/main/webapp/css/themes/bootstrap/passwordbox.css @@ -0,0 +1,6 @@ +.passwordbox-open { + background: url('images/passwordbox_open.png') no-repeat center center; +} +.passwordbox-close { + background: url('images/passwordbox_close.png') no-repeat center center; +} diff --git a/src/main/webapp/css/themes/bootstrap/progressbar.css b/src/main/webapp/css/themes/bootstrap/progressbar.css new file mode 100644 index 0000000..c660f0e --- /dev/null +++ b/src/main/webapp/css/themes/bootstrap/progressbar.css @@ -0,0 +1,32 @@ +.progressbar { + border-width: 1px; + border-style: solid; + -moz-border-radius: 5px 5px 5px 5px; + -webkit-border-radius: 5px 5px 5px 5px; + border-radius: 5px 5px 5px 5px; + overflow: hidden; + position: relative; +} +.progressbar-text { + text-align: center; + position: absolute; +} +.progressbar-value { + position: relative; + overflow: hidden; + width: 0; + -moz-border-radius: 5px 0 0 5px; + -webkit-border-radius: 5px 0 0 5px; + border-radius: 5px 0 0 5px; +} +.progressbar { + border-color: #D4D4D4; +} +.progressbar-text { + color: #333; + font-size: 12px; +} +.progressbar-value .progressbar-text { + background-color: #0081c2; + color: #fff; +} diff --git a/src/main/webapp/css/themes/bootstrap/propertygrid.css b/src/main/webapp/css/themes/bootstrap/propertygrid.css new file mode 100644 index 0000000..abf87d6 --- /dev/null +++ b/src/main/webapp/css/themes/bootstrap/propertygrid.css @@ -0,0 +1,28 @@ +.propertygrid .datagrid-view1 .datagrid-body td { + padding-bottom: 1px; + border-width: 0 1px 0 0; +} +.propertygrid .datagrid-group { + height: 21px; + 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: #e6e6e6; +} +.propertygrid .datagrid-view1 .datagrid-group { + border-color: #F2F2F2; +} +.propertygrid .datagrid-view2 .datagrid-group { + border-color: #e6e6e6; +} +.propertygrid .datagrid-group, +.propertygrid .datagrid-view1 .datagrid-body, +.propertygrid .datagrid-view1 .datagrid-row-over, +.propertygrid .datagrid-view1 .datagrid-row-selected { + background: #F2F2F2; +} diff --git a/src/main/webapp/css/themes/bootstrap/searchbox.css b/src/main/webapp/css/themes/bootstrap/searchbox.css new file mode 100644 index 0000000..bf615de --- /dev/null +++ b/src/main/webapp/css/themes/bootstrap/searchbox.css @@ -0,0 +1,61 @@ +.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: #F2F2F2; +} +.searchbox .l-btn-plain-disabled, +.searchbox .l-btn-plain-disabled:hover { + opacity: 0.5; + filter: alpha(opacity=50); +} diff --git a/src/main/webapp/css/themes/bootstrap/slider.css b/src/main/webapp/css/themes/bootstrap/slider.css new file mode 100644 index 0000000..b58d8de --- /dev/null +++ b/src/main/webapp/css/themes/bootstrap/slider.css @@ -0,0 +1,101 @@ +.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: 12px; + 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: 12px; +} +.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: #D4D4D4; + background: #F2F2F2; +} +.slider-rule span { + border-color: #D4D4D4; +} +.slider-rulelabel span { + color: #333; +} diff --git a/src/main/webapp/css/themes/bootstrap/spinner.css b/src/main/webapp/css/themes/bootstrap/spinner.css new file mode 100644 index 0000000..bc153fc --- /dev/null +++ b/src/main/webapp/css/themes/bootstrap/spinner.css @@ -0,0 +1,58 @@ +.spinner-arrow { + background-color: #F2F2F2; + display: inline-block; + overflow: hidden; + vertical-align: top; + margin: 0; + padding: 0; + opacity: 1.0; + filter: alpha(opacity=100); + width: 18px; +} +.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; +} +.spinner-arrow-hover { + background-color: #e6e6e6; + opacity: 1.0; + filter: alpha(opacity=100); +} +.spinner-arrow-up:hover, +.spinner-arrow-down:hover { + opacity: 1.0; + filter: alpha(opacity=100); + background-color: #e6e6e6; +} +.textbox-icon-disabled .spinner-arrow-up:hover, +.textbox-icon-disabled .spinner-arrow-down:hover { + opacity: 0.6; + filter: alpha(opacity=60); + background-color: #F2F2F2; + 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; +} +.spinner-arrow-down { + background: url('images/spinner_arrows.png') no-repeat -15px center; +} +.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; +} diff --git a/src/main/webapp/css/themes/bootstrap/splitbutton.css b/src/main/webapp/css/themes/bootstrap/splitbutton.css new file mode 100644 index 0000000..bf86453 --- /dev/null +++ b/src/main/webapp/css/themes/bootstrap/splitbutton.css @@ -0,0 +1,12 @@ +.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: #bbb; + border-width: 0 0 0 1px; +} diff --git a/src/main/webapp/css/themes/bootstrap/switchbutton.css b/src/main/webapp/css/themes/bootstrap/switchbutton.css new file mode 100644 index 0000000..38803aa --- /dev/null +++ b/src/main/webapp/css/themes/bootstrap/switchbutton.css @@ -0,0 +1,77 @@ +.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: 5px 5px 5px 5px; + -webkit-border-radius: 5px 5px 5px 5px; + border-radius: 5px 5px 5px 5px; +} +.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: 12px; + -moz-border-radius: 5px 5px 5px 5px; + -webkit-border-radius: 5px 5px 5px 5px; + border-radius: 5px 5px 5px 5px; +} +.switchbutton-on { + background: #0081c2; + color: #fff; +} +.switchbutton-off { + background-color: #ffffff; + color: #333; +} +.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: #333; + 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; +} diff --git a/src/main/webapp/css/themes/bootstrap/tabs.css b/src/main/webapp/css/themes/bootstrap/tabs.css new file mode 100644 index 0000000..c06a4aa --- /dev/null +++ b/src/main/webapp/css/themes/bootstrap/tabs.css @@ -0,0 +1,413 @@ +.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 a.tabs-inner { + display: inline-block; + text-decoration: none; + 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 a.tabs-inner { + font-weight: bold; + outline: none; +} +.tabs li.tabs-selected a:hover.tabs-inner { + 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: 12px; +} +.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 a.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 a.tabs-inner { + padding-left: 0; + padding-right: 0; +} +.tabs-header-left .tabs li a.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 a.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 a.tabs-inner { + -moz-border-radius: 5px 5px 5px 5px; + -webkit-border-radius: 5px 5px 5px 5px; + border-radius: 5px 5px 5px 5px; +} +.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: #F2F2F2 url('images/tabs_icons.png') no-repeat 1px center; +} +.tabs-scroller-right { + background: #F2F2F2 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 a.tabs-inner:hover { + background: #e6e6e6; + color: #00438a; + filter: none; +} +.tabs li.tabs-selected a.tabs-inner { + background-color: #ffffff; + color: #777; + background: -webkit-linear-gradient(top,#ffffff 0,#ffffff 100%); + background: -moz-linear-gradient(top,#ffffff 0,#ffffff 100%); + background: -o-linear-gradient(top,#ffffff 0,#ffffff 100%); + background: linear-gradient(to bottom,#ffffff 0,#ffffff 100%); + background-repeat: repeat-x; + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr=#ffffff,endColorstr=#ffffff,GradientType=0); +} +.tabs-header-bottom .tabs li.tabs-selected a.tabs-inner { + background: -webkit-linear-gradient(top,#ffffff 0,#ffffff 100%); + background: -moz-linear-gradient(top,#ffffff 0,#ffffff 100%); + background: -o-linear-gradient(top,#ffffff 0,#ffffff 100%); + background: linear-gradient(to bottom,#ffffff 0,#ffffff 100%); + background-repeat: repeat-x; + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr=#ffffff,endColorstr=#ffffff,GradientType=0); +} +.tabs-header-left .tabs li.tabs-selected a.tabs-inner { + background: -webkit-linear-gradient(left,#ffffff 0,#ffffff 100%); + background: -moz-linear-gradient(left,#ffffff 0,#ffffff 100%); + background: -o-linear-gradient(left,#ffffff 0,#ffffff 100%); + background: linear-gradient(to right,#ffffff 0,#ffffff 100%); + background-repeat: repeat-y; + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr=#ffffff,endColorstr=#ffffff,GradientType=1); +} +.tabs-header-right .tabs li.tabs-selected a.tabs-inner { + background: -webkit-linear-gradient(left,#ffffff 0,#ffffff 100%); + background: -moz-linear-gradient(left,#ffffff 0,#ffffff 100%); + background: -o-linear-gradient(left,#ffffff 0,#ffffff 100%); + background: linear-gradient(to right,#ffffff 0,#ffffff 100%); + background-repeat: repeat-y; + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr=#ffffff,endColorstr=#ffffff,GradientType=1); +} +.tabs li a.tabs-inner { + color: #777; + background-color: #F2F2F2; + background: -webkit-linear-gradient(top,#ffffff 0,#F2F2F2 100%); + background: -moz-linear-gradient(top,#ffffff 0,#F2F2F2 100%); + background: -o-linear-gradient(top,#ffffff 0,#F2F2F2 100%); + background: linear-gradient(to bottom,#ffffff 0,#F2F2F2 100%); + background-repeat: repeat-x; + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr=#ffffff,endColorstr=#F2F2F2,GradientType=0); +} +.tabs-header, +.tabs-tool { + background-color: #F2F2F2; +} +.tabs-header-plain { + background: transparent; +} +.tabs-header, +.tabs-scroller-left, +.tabs-scroller-right, +.tabs-tool, +.tabs, +.tabs-panels, +.tabs li a.tabs-inner, +.tabs li.tabs-selected a.tabs-inner, +.tabs-header-bottom .tabs li.tabs-selected a.tabs-inner, +.tabs-header-left .tabs li.tabs-selected a.tabs-inner, +.tabs-header-right .tabs li.tabs-selected a.tabs-inner { + border-color: #D4D4D4; +} +.tabs-p-tool a:hover, +.tabs li a:hover.tabs-close, +.tabs-scroller-over { + background-color: #e6e6e6; +} +.tabs li.tabs-selected a.tabs-inner { + border-bottom: 1px solid #ffffff; +} +.tabs-header-bottom .tabs li.tabs-selected a.tabs-inner { + border-top: 1px solid #ffffff; +} +.tabs-header-left .tabs li.tabs-selected a.tabs-inner { + border-right: 1px solid #ffffff; +} +.tabs-header-right .tabs li.tabs-selected a.tabs-inner { + border-left: 1px solid #ffffff; +} +.tabs-header .tabs-pill li.tabs-selected a.tabs-inner { + background: #0081c2; + color: #fff; + filter: none; + border-color: #D4D4D4; +} diff --git a/src/main/webapp/css/themes/bootstrap/tagbox.css b/src/main/webapp/css/themes/bootstrap/tagbox.css new file mode 100644 index 0000000..7e98a0a --- /dev/null +++ b/src/main/webapp/css/themes/bootstrap/tagbox.css @@ -0,0 +1,44 @@ +.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: 5px 5px 5px 5px; + -webkit-border-radius: 5px 5px 5px 5px; + border-radius: 5px 5px 5px 5px; + background: #e6e6e6; + color: #00438a; +} +.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); +} diff --git a/src/main/webapp/css/themes/bootstrap/textbox.css b/src/main/webapp/css/themes/bootstrap/textbox.css new file mode 100644 index 0000000..dc2dfa8 --- /dev/null +++ b/src/main/webapp/css/themes/bootstrap/textbox.css @@ -0,0 +1,139 @@ +.textbox { + position: relative; + border: 1px solid #D4D4D4; + background-color: #fff; + vertical-align: middle; + display: inline-block; + overflow: hidden; + white-space: nowrap; + margin: 0; + padding: 0; + -moz-border-radius: 5px 5px 5px 5px; + -webkit-border-radius: 5px 5px 5px 5px; + border-radius: 5px 5px 5px 5px; +} +.textbox .textbox-text { + font-size: 12px; + border: 0; + margin: 0; + padding: 4px; + white-space: normal; + vertical-align: top; + outline-style: none; + resize: none; + -moz-border-radius: 5px 5px 5px 5px; + -webkit-border-radius: 5px 5px 5px 5px; + border-radius: 5px 5px 5px 5px; +} +.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: 22px; + line-height: 22px; + 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: #bbbbbb; + -moz-box-shadow: 0 0 3px 0 #D4D4D4; + -webkit-box-shadow: 0 0 3px 0 #D4D4D4; + box-shadow: 0 0 3px 0 #D4D4D4; +} +.textbox-invalid { + border-color: #ffa8a8; + background-color: #fff3f3; +} diff --git a/src/main/webapp/css/themes/bootstrap/tooltip.css b/src/main/webapp/css/themes/bootstrap/tooltip.css new file mode 100644 index 0000000..ed9fe1c --- /dev/null +++ b/src/main/webapp/css/themes/bootstrap/tooltip.css @@ -0,0 +1,103 @@ +.tooltip { + position: absolute; + display: none; + z-index: 9900000; + outline: none; + opacity: 1; + filter: alpha(opacity=100); + padding: 5px; + border-width: 1px; + border-style: solid; + border-radius: 5px; + -moz-border-radius: 5px 5px 5px 5px; + -webkit-border-radius: 5px 5px 5px 5px; + border-radius: 5px 5px 5px 5px; +} +.tooltip-content { + font-size: 12px; +} +.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; + _border-color: tomato; + _filter: chroma(color=tomato); +} +.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: #D4D4D4; + color: #333; +} +.tooltip-right .tooltip-arrow-outer { + border-right-color: #D4D4D4; +} +.tooltip-right .tooltip-arrow { + border-right-color: #ffffff; +} +.tooltip-left .tooltip-arrow-outer { + border-left-color: #D4D4D4; +} +.tooltip-left .tooltip-arrow { + border-left-color: #ffffff; +} +.tooltip-top .tooltip-arrow-outer { + border-top-color: #D4D4D4; +} +.tooltip-top .tooltip-arrow { + border-top-color: #ffffff; +} +.tooltip-bottom .tooltip-arrow-outer { + border-bottom-color: #D4D4D4; +} +.tooltip-bottom .tooltip-arrow { + border-bottom-color: #ffffff; +} diff --git a/src/main/webapp/css/themes/bootstrap/tree.css b/src/main/webapp/css/themes/bootstrap/tree.css new file mode 100644 index 0000000..3fd3583 --- /dev/null +++ b/src/main/webapp/css/themes/bootstrap/tree.css @@ -0,0 +1,161 @@ +.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: 18px; + 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; + vertical-align: top; + overflow: hidden; +} +.tree-expanded { + background: url('images/tree_icons.png') no-repeat -18px 0px; +} +.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; +} +.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; +} +.tree-folder-open { + background: url('images/tree_icons.png') no-repeat -224px 0; +} +.tree-file { + background: url('images/tree_icons.png') no-repeat -240px 0; +} +.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; +} +.tree-title { + font-size: 12px; + display: inline-block; + text-decoration: none; + vertical-align: top; + white-space: nowrap; + padding: 0 2px; + height: 18px; + line-height: 18px; +} +.tree-node-proxy { + font-size: 12px; + 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 #D4D4D4; + font-size: 12px; + line-height: 16px; + padding: 0 4px; + margin: 0; + width: 80px; + outline-style: none; + vertical-align: top; + position: absolute; + top: 0; +} +.tree-node-proxy { + background-color: #ffffff; + color: #333; + border-color: #D4D4D4; +} +.tree-node-hover { + background: #e6e6e6; + color: #00438a; +} +.tree-node-selected { + background: #0081c2; + color: #fff; +} +.tree-node-hidden { + display: none; +} diff --git a/src/main/webapp/css/themes/bootstrap/validatebox.css b/src/main/webapp/css/themes/bootstrap/validatebox.css new file mode 100644 index 0000000..1fc3ad6 --- /dev/null +++ b/src/main/webapp/css/themes/bootstrap/validatebox.css @@ -0,0 +1,5 @@ +.validatebox-invalid { + border-color: #ffa8a8; + background-color: #fff3f3; + color: #000; +} diff --git a/src/main/webapp/css/themes/bootstrap/window.css b/src/main/webapp/css/themes/bootstrap/window.css new file mode 100644 index 0000000..b216f37 --- /dev/null +++ b/src/main/webapp/css/themes/bootstrap/window.css @@ -0,0 +1,183 @@ +.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: 5px 5px 5px 5px; + -webkit-border-radius: 5px 5px 5px 5px; + border-radius: 5px 5px 5px 5px; +} +.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: progid:DXImageTransform.Microsoft.Blur(pixelRadius=2,MakeShadow=false,ShadowOpacity=0.2); +} +.window, +.window .window-body { + border-color: #D4D4D4; +} +.window { + background-color: #F2F2F2; + background: -webkit-linear-gradient(top,#ffffff 0,#F2F2F2 20%); + background: -moz-linear-gradient(top,#ffffff 0,#F2F2F2 20%); + background: -o-linear-gradient(top,#ffffff 0,#F2F2F2 20%); + background: linear-gradient(to bottom,#ffffff 0,#F2F2F2 20%); + background-repeat: repeat-x; + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr=#ffffff,endColorstr=#F2F2F2,GradientType=0); +} +.window-proxy { + border: 1px dashed #D4D4D4; +} +.window-proxy-mask, +.window-mask { + background: #ccc; +} +.window .panel-footer { + border: 1px solid #D4D4D4; + 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-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; +} diff --git a/src/main/webapp/css/themes/color.css b/src/main/webapp/css/themes/color.css new file mode 100644 index 0000000..bfb8ecb --- /dev/null +++ b/src/main/webapp/css/themes/color.css @@ -0,0 +1,210 @@ +.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); +} diff --git a/src/main/webapp/css/themes/default/accordion.css b/src/main/webapp/css/themes/default/accordion.css new file mode 100644 index 0000000..9d60531 --- /dev/null +++ b/src/main/webapp/css/themes/default/accordion.css @@ -0,0 +1,89 @@ +.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; +} +.accordion-expand { + background: url('images/accordion_arrows.png') no-repeat -16px 0; +} +.accordion { + background: #ffffff; + border-color: #95B8E7; +} +.accordion .accordion-header { + background: #E0ECFF; + filter: none; +} +.accordion .accordion-header-selected { + background: #ffe48d; +} +.accordion .accordion-header-selected .panel-title { + color: #000000; +} +.accordion .panel-last > .accordion-header { + border-bottom-color: #E0ECFF; +} +.accordion .panel-last > .accordion-body { + border-bottom-color: #ffffff; +} +.accordion .panel-last > .accordion-header-selected, +.accordion .panel-last > .accordion-header-border { + border-bottom-color: #95B8E7; +} +.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: #E0ECFF; +} +.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: #95B8E7; +} +.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: #E0ECFF; +} +.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: #95B8E7; +} diff --git a/src/main/webapp/css/themes/default/calendar.css b/src/main/webapp/css/themes/default/calendar.css new file mode 100644 index 0000000..a3b953d --- /dev/null +++ b/src/main/webapp/css/themes/default/calendar.css @@ -0,0 +1,202 @@ +.calendar { + border-width: 1px; + border-style: solid; + padding: 1px; + overflow: hidden; +} +.calendar table { + table-layout: fixed; + border-collapse: separate; + font-size: 12px; + width: 100%; + height: 100%; +} +.calendar table td, +.calendar table th { + font-size: 12px; +} +.calendar-noborder { + border: 0; +} +.calendar-header { + position: relative; + height: 22px; +} +.calendar-title { + text-align: center; + height: 22px; +} +.calendar-title span { + position: relative; + display: inline-block; + top: 2px; + padding: 0 3px; + height: 18px; + line-height: 18px; + font-size: 12px; + cursor: pointer; + -moz-border-radius: 5px 5px 5px 5px; + -webkit-border-radius: 5px 5px 5px 5px; + border-radius: 5px 5px 5px 5px; +} +.calendar-prevmonth, +.calendar-nextmonth, +.calendar-prevyear, +.calendar-nextyear { + position: absolute; + top: 50%; + margin-top: -7px; + width: 14px; + height: 14px; + cursor: pointer; + font-size: 1px; + -moz-border-radius: 5px 5px 5px 5px; + -webkit-border-radius: 5px 5px 5px 5px; + border-radius: 5px 5px 5px 5px; +} +.calendar-prevmonth { + left: 20px; + background: url('images/calendar_arrows.png') no-repeat -18px -2px; +} +.calendar-nextmonth { + right: 20px; + background: url('images/calendar_arrows.png') no-repeat -34px -2px; +} +.calendar-prevyear { + left: 3px; + background: url('images/calendar_arrows.png') no-repeat -1px -2px; +} +.calendar-nextyear { + right: 3px; + background: url('images/calendar_arrows.png') no-repeat -49px -2px; +} +.calendar-body { + position: relative; +} +.calendar-body th, +.calendar-body td { + text-align: center; +} +.calendar-day { + border: 0; + padding: 1px; + cursor: pointer; + -moz-border-radius: 5px 5px 5px 5px; + -webkit-border-radius: 5px 5px 5px 5px; + border-radius: 5px 5px 5px 5px; +} +.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: 12px; + display: none; + overflow: hidden; +} +.calendar-menu-year-inner { + text-align: center; + padding-bottom: 5px; +} +.calendar-menu-year { + width: 50px; + text-align: center; + border-width: 1px; + border-style: solid; + outline-style: none; + resize: none; + margin: 0; + padding: 2px; + font-weight: bold; + font-size: 12px; + -moz-border-radius: 5px 5px 5px 5px; + -webkit-border-radius: 5px 5px 5px 5px; + border-radius: 5px 5px 5px 5px; +} +.calendar-menu-prev, +.calendar-menu-next { + display: inline-block; + width: 21px; + height: 21px; + vertical-align: top; + cursor: pointer; + -moz-border-radius: 5px 5px 5px 5px; + -webkit-border-radius: 5px 5px 5px 5px; + border-radius: 5px 5px 5px 5px; +} +.calendar-menu-prev { + margin-right: 10px; + background: url('images/calendar_arrows.png') no-repeat 2px 2px; +} +.calendar-menu-next { + margin-left: 10px; + background: url('images/calendar_arrows.png') no-repeat -45px 2px; +} +.calendar-menu-month { + text-align: center; + cursor: pointer; + font-weight: bold; + -moz-border-radius: 5px 5px 5px 5px; + -webkit-border-radius: 5px 5px 5px 5px; + border-radius: 5px 5px 5px 5px; +} +.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: #95B8E7; +} +.calendar { + border-color: #95B8E7; +} +.calendar-header { + background: #E0ECFF; +} +.calendar-body, +.calendar-menu { + background: #ffffff; +} +.calendar-body th { + background: #F4F4F4; + padding: 2px 0; +} +.calendar-hover, +.calendar-nav-hover, +.calendar-menu-hover { + background-color: #eaf2ff; + color: #000000; +} +.calendar-hover { + border: 1px solid #b7d2ff; + padding: 0; +} +.calendar-selected { + background-color: #ffe48d; + color: #000000; + border: 1px solid #ffab3f; + padding: 0; +} diff --git a/src/main/webapp/css/themes/default/combo.css b/src/main/webapp/css/themes/default/combo.css new file mode 100644 index 0000000..a516386 --- /dev/null +++ b/src/main/webapp/css/themes/default/combo.css @@ -0,0 +1,35 @@ +.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; +} +.combo-panel { + background-color: #ffffff; +} +.combo-arrow { + background-color: #E0ECFF; +} +.combo-arrow-hover { + background-color: #eaf2ff; +} +.combo-arrow:hover { + background-color: #eaf2ff; +} +.combo .textbox-icon-disabled:hover { + cursor: default; +} diff --git a/src/main/webapp/css/themes/default/combobox.css b/src/main/webapp/css/themes/default/combobox.css new file mode 100644 index 0000000..67ae3c6 --- /dev/null +++ b/src/main/webapp/css/themes/default/combobox.css @@ -0,0 +1,39 @@ +.combobox-item, +.combobox-group, +.combobox-stick { + font-size: 12px; + padding: 3px; +} +.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: #eaf2ff; + color: #000000; +} +.combobox-item-selected { + background-color: #ffe48d; + color: #000000; +} +.combobox-icon { + display: inline-block; + width: 16px; + height: 16px; + vertical-align: middle; + margin-right: 2px; +} diff --git a/src/main/webapp/css/themes/default/datagrid.css b/src/main/webapp/css/themes/default/datagrid.css new file mode 100644 index 0000000..bf557af --- /dev/null +++ b/src/main/webapp/css/themes/default/datagrid.css @@ -0,0 +1,288 @@ +.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: 25px; +} +.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 #95B8E7; + font-size: 12px; + 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; +} +.datagrid-header, +.datagrid-td-rownumber { + background-color: #efefef; + background: -webkit-linear-gradient(top,#F9F9F9 0,#efefef 100%); + background: -moz-linear-gradient(top,#F9F9F9 0,#efefef 100%); + background: -o-linear-gradient(top,#F9F9F9 0,#efefef 100%); + background: linear-gradient(to bottom,#F9F9F9 0,#efefef 100%); + background-repeat: repeat-x; + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr=#F9F9F9,endColorstr=#efefef,GradientType=0); +} +.datagrid-cell-rownumber { + color: #000000; +} +.datagrid-resize-proxy { + background: #aac5e7; +} +.datagrid-mask { + background: #ccc; +} +.datagrid-mask-msg { + border-color: #95B8E7; +} +.datagrid-toolbar, +.datagrid-pager { + background: #F4F4F4; +} +.datagrid-header, +.datagrid-toolbar, +.datagrid-pager, +.datagrid-footer-inner { + border-color: #dddddd; +} +.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: #eaf2ff; + color: #000000; + cursor: default; +} +.datagrid-row-selected { + background: #ffe48d; + color: #000000; +} +.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; +} diff --git a/src/main/webapp/css/themes/default/datalist.css b/src/main/webapp/css/themes/default/datalist.css new file mode 100644 index 0000000..eedd25b --- /dev/null +++ b/src/main/webapp/css/themes/default/datalist.css @@ -0,0 +1,95 @@ +.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: #efefef; + 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: #eaf2ff; + color: #000000; +} +.m-list .m-list-group { + padding: 0 4px; +} diff --git a/src/main/webapp/css/themes/default/datebox.css b/src/main/webapp/css/themes/default/datebox.css new file mode 100644 index 0000000..25c05fd --- /dev/null +++ b/src/main/webapp/css/themes/default/datebox.css @@ -0,0 +1,36 @@ +.datebox-calendar-inner { + height: 180px; +} +.datebox-button { + padding: 0 5px; + text-align: center; +} +.datebox-button a { + line-height: 22px; + font-size: 12px; + 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: #F4F4F4; +} +.datebox-button a { + color: #444; +} diff --git a/src/main/webapp/css/themes/default/dialog.css b/src/main/webapp/css/themes/default/dialog.css new file mode 100644 index 0000000..ff55387 --- /dev/null +++ b/src/main/webapp/css/themes/default/dialog.css @@ -0,0 +1,47 @@ +.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: #F4F4F4; + border-width: 1px; + border-style: solid; +} +.dialog-toolbar { + border-color: #95B8E7 #95B8E7 #dddddd #95B8E7; +} +.dialog-button { + border-color: #dddddd #95B8E7 #95B8E7 #95B8E7; +} +.window-thinborder .dialog-toolbar { + border-left: transparent; + border-right: transparent; + border-top-color: #F4F4F4; +} +.window-thinborder .dialog-button { + top: 0px; + padding: 5px 8px 8px 8px; + border-left: transparent; + border-right: transparent; + border-bottom: transparent; +} diff --git a/src/main/webapp/css/themes/default/easyui.css b/src/main/webapp/css/themes/default/easyui.css new file mode 100644 index 0000000..cd6b081 --- /dev/null +++ b/src/main/webapp/css/themes/default/easyui.css @@ -0,0 +1,3220 @@ +.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: #eaf2ff; + -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; +} +.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; +} +.panel-header, +.panel-body { + border-color: #95B8E7; +} +.panel-header { + background-color: #E0ECFF; + background: -webkit-linear-gradient(top,#EFF5FF 0,#E0ECFF 100%); + background: -moz-linear-gradient(top,#EFF5FF 0,#E0ECFF 100%); + background: -o-linear-gradient(top,#EFF5FF 0,#E0ECFF 100%); + background: linear-gradient(to bottom,#EFF5FF 0,#E0ECFF 100%); + background-repeat: repeat-x; + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr=#EFF5FF,endColorstr=#E0ECFF,GradientType=0); +} +.panel-body { + background-color: #ffffff; + color: #000000; + font-size: 12px; +} +.panel-title { + font-size: 12px; + font-weight: bold; + color: #0E2D5F; + height: 16px; + line-height: 16px; +} +.panel-footer { + border: 1px solid #95B8E7; + overflow: hidden; + background: #F4F4F4; +} +.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; +} +.panel-hleft>.panel-header .panel-title, +.panel-hright>.panel-header .panel-title { + position: absolute; + min-width: 16px; + left: 21px; + 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: 5px; + 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; +} +.accordion-expand { + background: url('images/accordion_arrows.png') no-repeat -16px 0; +} +.accordion { + background: #ffffff; + border-color: #95B8E7; +} +.accordion .accordion-header { + background: #E0ECFF; + filter: none; +} +.accordion .accordion-header-selected { + background: #ffe48d; +} +.accordion .accordion-header-selected .panel-title { + color: #000000; +} +.accordion .panel-last > .accordion-header { + border-bottom-color: #E0ECFF; +} +.accordion .panel-last > .accordion-body { + border-bottom-color: #ffffff; +} +.accordion .panel-last > .accordion-header-selected, +.accordion .panel-last > .accordion-header-border { + border-bottom-color: #95B8E7; +} +.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: #E0ECFF; +} +.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: #95B8E7; +} +.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: #E0ECFF; +} +.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: #95B8E7; +} +.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: 5px 5px 5px 5px; + -webkit-border-radius: 5px 5px 5px 5px; + border-radius: 5px 5px 5px 5px; +} +.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: progid:DXImageTransform.Microsoft.Blur(pixelRadius=2,MakeShadow=false,ShadowOpacity=0.2); +} +.window, +.window .window-body { + border-color: #95B8E7; +} +.window { + background-color: #E0ECFF; + background: -webkit-linear-gradient(top,#EFF5FF 0,#E0ECFF 20%); + background: -moz-linear-gradient(top,#EFF5FF 0,#E0ECFF 20%); + background: -o-linear-gradient(top,#EFF5FF 0,#E0ECFF 20%); + background: linear-gradient(to bottom,#EFF5FF 0,#E0ECFF 20%); + background-repeat: repeat-x; + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr=#EFF5FF,endColorstr=#E0ECFF,GradientType=0); +} +.window-proxy { + border: 1px dashed #95B8E7; +} +.window-proxy-mask, +.window-mask { + background: #ccc; +} +.window .panel-footer { + border: 1px solid #95B8E7; + 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-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: #F4F4F4; + border-width: 1px; + border-style: solid; +} +.dialog-toolbar { + border-color: #95B8E7 #95B8E7 #dddddd #95B8E7; +} +.dialog-button { + border-color: #dddddd #95B8E7 #95B8E7 #95B8E7; +} +.window-thinborder .dialog-toolbar { + border-left: transparent; + border-right: transparent; + border-top-color: #F4F4F4; +} +.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: 24px; + font-size: 12px; + padding: 0; + margin: 0 4px; +} +.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 4px 0 24px; +} +.l-btn-icon-left .l-btn-icon { + left: 4px; +} +.l-btn-icon-right .l-btn-text { + margin: 0 24px 0 4px; +} +.l-btn-icon-right .l-btn-icon { + right: 4px; +} +.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 4px; + width: 16px; +} +.l-btn-plain:hover { + padding: 0; +} +.l-btn-focus { + outline: #0000FF dotted thin; +} +.l-btn-large .l-btn-text { + line-height: 40px; +} +.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 4px; + width: 32px; +} +.l-btn { + color: #444; + background: #fafafa; + background-repeat: repeat-x; + border: 1px solid #bbb; + background: -webkit-linear-gradient(top,#ffffff 0,#eeeeee 100%); + background: -moz-linear-gradient(top,#ffffff 0,#eeeeee 100%); + background: -o-linear-gradient(top,#ffffff 0,#eeeeee 100%); + background: linear-gradient(to bottom,#ffffff 0,#eeeeee 100%); + background-repeat: repeat-x; + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr=#ffffff,endColorstr=#eeeeee,GradientType=0); + -moz-border-radius: 5px 5px 5px 5px; + -webkit-border-radius: 5px 5px 5px 5px; + border-radius: 5px 5px 5px 5px; +} +.l-btn:hover { + background: #eaf2ff; + color: #000000; + border: 1px solid #b7d2ff; + filter: none; +} +.l-btn-plain { + background: transparent; + border-width: 0; + filter: none; +} +.l-btn-outline { + border-width: 1px; + border-color: #b7d2ff; + padding: 0; +} +.l-btn-plain:hover { + background: #eaf2ff; + color: #000000; + border: 1px solid #b7d2ff; + -moz-border-radius: 5px 5px 5px 5px; + -webkit-border-radius: 5px 5px 5px 5px; + border-radius: 5px 5px 5px 5px; +} +.l-btn-disabled, +.l-btn-disabled:hover { + opacity: 0.5; + cursor: default; + background: #fafafa; + color: #444; + background: -webkit-linear-gradient(top,#ffffff 0,#eeeeee 100%); + background: -moz-linear-gradient(top,#ffffff 0,#eeeeee 100%); + background: -o-linear-gradient(top,#ffffff 0,#eeeeee 100%); + background: linear-gradient(to bottom,#ffffff 0,#eeeeee 100%); + background-repeat: repeat-x; + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr=#ffffff,endColorstr=#eeeeee,GradientType=0); +} +.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 #95B8E7; + background-color: #fff; + vertical-align: middle; + display: inline-block; + overflow: hidden; + white-space: nowrap; + margin: 0; + padding: 0; + -moz-border-radius: 5px 5px 5px 5px; + -webkit-border-radius: 5px 5px 5px 5px; + border-radius: 5px 5px 5px 5px; +} +.textbox .textbox-text { + font-size: 12px; + border: 0; + margin: 0; + padding: 4px; + white-space: normal; + vertical-align: top; + outline-style: none; + resize: none; + -moz-border-radius: 5px 5px 5px 5px; + -webkit-border-radius: 5px 5px 5px 5px; + border-radius: 5px 5px 5px 5px; +} +.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: 22px; + line-height: 22px; + 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: #6b9cde; + -moz-box-shadow: 0 0 3px 0 #95B8E7; + -webkit-box-shadow: 0 0 3px 0 #95B8E7; + box-shadow: 0 0 3px 0 #95B8E7; +} +.textbox-invalid { + border-color: #ffa8a8; + background-color: #fff3f3; +} +.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; +} +.combo-panel { + background-color: #ffffff; +} +.combo-arrow { + background-color: #E0ECFF; +} +.combo-arrow-hover { + background-color: #eaf2ff; +} +.combo-arrow:hover { + background-color: #eaf2ff; +} +.combo .textbox-icon-disabled:hover { + cursor: default; +} +.combobox-item, +.combobox-group, +.combobox-stick { + font-size: 12px; + padding: 3px; +} +.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: #eaf2ff; + color: #000000; +} +.combobox-item-selected { + background-color: #ffe48d; + color: #000000; +} +.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: 5px 5px 5px 5px; + -webkit-border-radius: 5px 5px 5px 5px; + border-radius: 5px 5px 5px 5px; + background: #eaf2ff; + 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: #aac5e7; +} +.layout-split-north { + border-bottom: 5px solid #E6EEF8; +} +.layout-split-south { + border-top: 5px solid #E6EEF8; +} +.layout-split-east { + border-left: 5px solid #E6EEF8; +} +.layout-split-west { + border-right: 5px solid #E6EEF8; +} +.layout-expand { + background-color: #E0ECFF; +} +.layout-expand-over { + background-color: #E0ECFF; +} +.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 a.tabs-inner { + display: inline-block; + text-decoration: none; + 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 a.tabs-inner { + font-weight: bold; + outline: none; +} +.tabs li.tabs-selected a:hover.tabs-inner { + 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: 12px; +} +.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 a.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 a.tabs-inner { + padding-left: 0; + padding-right: 0; +} +.tabs-header-left .tabs li a.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 a.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 a.tabs-inner { + -moz-border-radius: 5px 5px 5px 5px; + -webkit-border-radius: 5px 5px 5px 5px; + border-radius: 5px 5px 5px 5px; +} +.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: #E0ECFF url('images/tabs_icons.png') no-repeat 1px center; +} +.tabs-scroller-right { + background: #E0ECFF 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 a.tabs-inner:hover { + background: #eaf2ff; + color: #000000; + filter: none; +} +.tabs li.tabs-selected a.tabs-inner { + background-color: #ffffff; + color: #0E2D5F; + background: -webkit-linear-gradient(top,#EFF5FF 0,#ffffff 100%); + background: -moz-linear-gradient(top,#EFF5FF 0,#ffffff 100%); + background: -o-linear-gradient(top,#EFF5FF 0,#ffffff 100%); + background: linear-gradient(to bottom,#EFF5FF 0,#ffffff 100%); + background-repeat: repeat-x; + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr=#EFF5FF,endColorstr=#ffffff,GradientType=0); +} +.tabs-header-bottom .tabs li.tabs-selected a.tabs-inner { + background: -webkit-linear-gradient(top,#ffffff 0,#EFF5FF 100%); + background: -moz-linear-gradient(top,#ffffff 0,#EFF5FF 100%); + background: -o-linear-gradient(top,#ffffff 0,#EFF5FF 100%); + background: linear-gradient(to bottom,#ffffff 0,#EFF5FF 100%); + background-repeat: repeat-x; + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr=#ffffff,endColorstr=#EFF5FF,GradientType=0); +} +.tabs-header-left .tabs li.tabs-selected a.tabs-inner { + background: -webkit-linear-gradient(left,#EFF5FF 0,#ffffff 100%); + background: -moz-linear-gradient(left,#EFF5FF 0,#ffffff 100%); + background: -o-linear-gradient(left,#EFF5FF 0,#ffffff 100%); + background: linear-gradient(to right,#EFF5FF 0,#ffffff 100%); + background-repeat: repeat-y; + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr=#EFF5FF,endColorstr=#ffffff,GradientType=1); +} +.tabs-header-right .tabs li.tabs-selected a.tabs-inner { + background: -webkit-linear-gradient(left,#ffffff 0,#EFF5FF 100%); + background: -moz-linear-gradient(left,#ffffff 0,#EFF5FF 100%); + background: -o-linear-gradient(left,#ffffff 0,#EFF5FF 100%); + background: linear-gradient(to right,#ffffff 0,#EFF5FF 100%); + background-repeat: repeat-y; + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr=#ffffff,endColorstr=#EFF5FF,GradientType=1); +} +.tabs li a.tabs-inner { + color: #0E2D5F; + background-color: #E0ECFF; + background: -webkit-linear-gradient(top,#EFF5FF 0,#E0ECFF 100%); + background: -moz-linear-gradient(top,#EFF5FF 0,#E0ECFF 100%); + background: -o-linear-gradient(top,#EFF5FF 0,#E0ECFF 100%); + background: linear-gradient(to bottom,#EFF5FF 0,#E0ECFF 100%); + background-repeat: repeat-x; + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr=#EFF5FF,endColorstr=#E0ECFF,GradientType=0); +} +.tabs-header, +.tabs-tool { + background-color: #E0ECFF; +} +.tabs-header-plain { + background: transparent; +} +.tabs-header, +.tabs-scroller-left, +.tabs-scroller-right, +.tabs-tool, +.tabs, +.tabs-panels, +.tabs li a.tabs-inner, +.tabs li.tabs-selected a.tabs-inner, +.tabs-header-bottom .tabs li.tabs-selected a.tabs-inner, +.tabs-header-left .tabs li.tabs-selected a.tabs-inner, +.tabs-header-right .tabs li.tabs-selected a.tabs-inner { + border-color: #95B8E7; +} +.tabs-p-tool a:hover, +.tabs li a:hover.tabs-close, +.tabs-scroller-over { + background-color: #eaf2ff; +} +.tabs li.tabs-selected a.tabs-inner { + border-bottom: 1px solid #ffffff; +} +.tabs-header-bottom .tabs li.tabs-selected a.tabs-inner { + border-top: 1px solid #ffffff; +} +.tabs-header-left .tabs li.tabs-selected a.tabs-inner { + border-right: 1px solid #ffffff; +} +.tabs-header-right .tabs li.tabs-selected a.tabs-inner { + border-left: 1px solid #ffffff; +} +.tabs-header .tabs-pill li.tabs-selected a.tabs-inner { + background: #ffe48d; + color: #000000; + filter: none; + border-color: #95B8E7; +} +.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: 25px; +} +.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 #95B8E7; + font-size: 12px; + 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; +} +.datagrid-header, +.datagrid-td-rownumber { + background-color: #efefef; + background: -webkit-linear-gradient(top,#F9F9F9 0,#efefef 100%); + background: -moz-linear-gradient(top,#F9F9F9 0,#efefef 100%); + background: -o-linear-gradient(top,#F9F9F9 0,#efefef 100%); + background: linear-gradient(to bottom,#F9F9F9 0,#efefef 100%); + background-repeat: repeat-x; + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr=#F9F9F9,endColorstr=#efefef,GradientType=0); +} +.datagrid-cell-rownumber { + color: #000000; +} +.datagrid-resize-proxy { + background: #aac5e7; +} +.datagrid-mask { + background: #ccc; +} +.datagrid-mask-msg { + border-color: #95B8E7; +} +.datagrid-toolbar, +.datagrid-pager { + background: #F4F4F4; +} +.datagrid-header, +.datagrid-toolbar, +.datagrid-pager, +.datagrid-footer-inner { + border-color: #dddddd; +} +.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: #eaf2ff; + color: #000000; + cursor: default; +} +.datagrid-row-selected { + background: #ffe48d; + color: #000000; +} +.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; +} +.propertygrid .datagrid-view1 .datagrid-body td { + padding-bottom: 1px; + border-width: 0 1px 0 0; +} +.propertygrid .datagrid-group { + height: 21px; + 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: #dddddd; +} +.propertygrid .datagrid-view1 .datagrid-group { + border-color: #E0ECFF; +} +.propertygrid .datagrid-view2 .datagrid-group { + border-color: #dddddd; +} +.propertygrid .datagrid-group, +.propertygrid .datagrid-view1 .datagrid-body, +.propertygrid .datagrid-view1 .datagrid-row-over, +.propertygrid .datagrid-view1 .datagrid-row-selected { + background: #E0ECFF; +} +.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: #efefef; + 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: #eaf2ff; + color: #000000; +} +.m-list .m-list-group { + padding: 0 4px; +} +.pagination { + zoom: 1; +} +.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: 2em; + height: auto; +} +.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 { + width: 24px; + text-align: center; + margin: 0; +} +.pagination-first { + background: url('images/pagination_icons.png') no-repeat 0 center; +} +.pagination-prev { + background: url('images/pagination_icons.png') no-repeat -16px center; +} +.pagination-next { + background: url('images/pagination_icons.png') no-repeat -32px center; +} +.pagination-last { + background: url('images/pagination_icons.png') no-repeat -48px center; +} +.pagination-load { + background: url('images/pagination_icons.png') no-repeat -64px center; +} +.pagination-loading { + background: url('images/loading.gif') no-repeat center center; +} +.pagination-page-list, +.pagination .pagination-num { + border-color: #95B8E7; +} +.calendar { + border-width: 1px; + border-style: solid; + padding: 1px; + overflow: hidden; +} +.calendar table { + table-layout: fixed; + border-collapse: separate; + font-size: 12px; + width: 100%; + height: 100%; +} +.calendar table td, +.calendar table th { + font-size: 12px; +} +.calendar-noborder { + border: 0; +} +.calendar-header { + position: relative; + height: 22px; +} +.calendar-title { + text-align: center; + height: 22px; +} +.calendar-title span { + position: relative; + display: inline-block; + top: 2px; + padding: 0 3px; + height: 18px; + line-height: 18px; + font-size: 12px; + cursor: pointer; + -moz-border-radius: 5px 5px 5px 5px; + -webkit-border-radius: 5px 5px 5px 5px; + border-radius: 5px 5px 5px 5px; +} +.calendar-prevmonth, +.calendar-nextmonth, +.calendar-prevyear, +.calendar-nextyear { + position: absolute; + top: 50%; + margin-top: -7px; + width: 14px; + height: 14px; + cursor: pointer; + font-size: 1px; + -moz-border-radius: 5px 5px 5px 5px; + -webkit-border-radius: 5px 5px 5px 5px; + border-radius: 5px 5px 5px 5px; +} +.calendar-prevmonth { + left: 20px; + background: url('images/calendar_arrows.png') no-repeat -18px -2px; +} +.calendar-nextmonth { + right: 20px; + background: url('images/calendar_arrows.png') no-repeat -34px -2px; +} +.calendar-prevyear { + left: 3px; + background: url('images/calendar_arrows.png') no-repeat -1px -2px; +} +.calendar-nextyear { + right: 3px; + background: url('images/calendar_arrows.png') no-repeat -49px -2px; +} +.calendar-body { + position: relative; +} +.calendar-body th, +.calendar-body td { + text-align: center; +} +.calendar-day { + border: 0; + padding: 1px; + cursor: pointer; + -moz-border-radius: 5px 5px 5px 5px; + -webkit-border-radius: 5px 5px 5px 5px; + border-radius: 5px 5px 5px 5px; +} +.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: 12px; + display: none; + overflow: hidden; +} +.calendar-menu-year-inner { + text-align: center; + padding-bottom: 5px; +} +.calendar-menu-year { + width: 50px; + text-align: center; + border-width: 1px; + border-style: solid; + outline-style: none; + resize: none; + margin: 0; + padding: 2px; + font-weight: bold; + font-size: 12px; + -moz-border-radius: 5px 5px 5px 5px; + -webkit-border-radius: 5px 5px 5px 5px; + border-radius: 5px 5px 5px 5px; +} +.calendar-menu-prev, +.calendar-menu-next { + display: inline-block; + width: 21px; + height: 21px; + vertical-align: top; + cursor: pointer; + -moz-border-radius: 5px 5px 5px 5px; + -webkit-border-radius: 5px 5px 5px 5px; + border-radius: 5px 5px 5px 5px; +} +.calendar-menu-prev { + margin-right: 10px; + background: url('images/calendar_arrows.png') no-repeat 2px 2px; +} +.calendar-menu-next { + margin-left: 10px; + background: url('images/calendar_arrows.png') no-repeat -45px 2px; +} +.calendar-menu-month { + text-align: center; + cursor: pointer; + font-weight: bold; + -moz-border-radius: 5px 5px 5px 5px; + -webkit-border-radius: 5px 5px 5px 5px; + border-radius: 5px 5px 5px 5px; +} +.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: #95B8E7; +} +.calendar { + border-color: #95B8E7; +} +.calendar-header { + background: #E0ECFF; +} +.calendar-body, +.calendar-menu { + background: #ffffff; +} +.calendar-body th { + background: #F4F4F4; + padding: 2px 0; +} +.calendar-hover, +.calendar-nav-hover, +.calendar-menu-hover { + background-color: #eaf2ff; + color: #000000; +} +.calendar-hover { + border: 1px solid #b7d2ff; + padding: 0; +} +.calendar-selected { + background-color: #ffe48d; + color: #000000; + border: 1px solid #ffab3f; + padding: 0; +} +.datebox-calendar-inner { + height: 180px; +} +.datebox-button { + padding: 0 5px; + text-align: center; +} +.datebox-button a { + line-height: 22px; + font-size: 12px; + 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: #F4F4F4; +} +.datebox-button a { + color: #444; +} +.spinner-arrow { + background-color: #E0ECFF; + display: inline-block; + overflow: hidden; + vertical-align: top; + margin: 0; + padding: 0; + opacity: 1.0; + filter: alpha(opacity=100); + width: 18px; +} +.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; +} +.spinner-arrow-hover { + background-color: #eaf2ff; + opacity: 1.0; + filter: alpha(opacity=100); +} +.spinner-arrow-up:hover, +.spinner-arrow-down:hover { + opacity: 1.0; + filter: alpha(opacity=100); + background-color: #eaf2ff; +} +.textbox-icon-disabled .spinner-arrow-up:hover, +.textbox-icon-disabled .spinner-arrow-down:hover { + opacity: 0.6; + filter: alpha(opacity=60); + background-color: #E0ECFF; + 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; +} +.spinner-arrow-down { + background: url('images/spinner_arrows.png') no-repeat -15px center; +} +.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: 5px 5px 5px 5px; + -webkit-border-radius: 5px 5px 5px 5px; + border-radius: 5px 5px 5px 5px; + overflow: hidden; + position: relative; +} +.progressbar-text { + text-align: center; + position: absolute; +} +.progressbar-value { + position: relative; + overflow: hidden; + width: 0; + -moz-border-radius: 5px 0 0 5px; + -webkit-border-radius: 5px 0 0 5px; + border-radius: 5px 0 0 5px; +} +.progressbar { + border-color: #95B8E7; +} +.progressbar-text { + color: #000000; + font-size: 12px; +} +.progressbar-value .progressbar-text { + background-color: #ffe48d; + color: #000000; +} +.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: #E0ECFF; +} +.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: 12px; + 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: 12px; +} +.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: #95B8E7; + background: #E0ECFF; +} +.slider-rule span { + border-color: #95B8E7; +} +.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: 5px 5px 5px 5px; + -webkit-border-radius: 5px 5px 5px 5px; + border-radius: 5px 5px 5px 5px; +} +.menu-item-disabled { + opacity: 0.5; + filter: alpha(opacity=50); + cursor: default; +} +.menu-text, +.menu-text span { + font-size: 12px; +} +.menu-shadow { + position: absolute; + -moz-border-radius: 5px 5px 5px 5px; + -webkit-border-radius: 5px 5px 5px 5px; + border-radius: 5px 5px 5px 5px; + background: #ccc; + -moz-box-shadow: 2px 2px 3px #cccccc; + -webkit-box-shadow: 2px 2px 3px #cccccc; + box-shadow: 2px 2px 3px #cccccc; + filter: progid:DXImageTransform.Microsoft.Blur(pixelRadius=2,MakeShadow=false,ShadowOpacity=0.2); +} +.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: #fafafa; + border-color: #ddd; + color: #444; +} +.menu-content { + background: #ffffff; +} +.menu-item { + border-color: transparent; + _border-color: #fafafa; +} +.menu-active { + border-color: #b7d2ff; + color: #000000; + background: #eaf2ff; +} +.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: #eaf2ff; + color: #000000; + border: 1px solid #b7d2ff; + filter: none; +} +.m-btn-plain-active, +.s-btn-plain-active { + background: transparent; + padding: 0; + border-width: 1px; + border-style: solid; + -moz-border-radius: 5px 5px 5px 5px; + -webkit-border-radius: 5px 5px 5px 5px; + border-radius: 5px 5px 5px 5px; +} +.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: #aac5e7; + 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: #b7d2ff; + background-color: #eaf2ff; + 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: #aac5e7; + 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; +} +.messager-info { + background: url('images/messager_icons.png') no-repeat scroll 0 0; +} +.messager-question { + background: url('images/messager_icons.png') no-repeat scroll -32px 0; +} +.messager-warning { + background: url('images/messager_icons.png') no-repeat scroll -96px 0; +} +.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 #95B8E7; +} +.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: 18px; + 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; + vertical-align: top; + overflow: hidden; +} +.tree-expanded { + background: url('images/tree_icons.png') no-repeat -18px 0px; +} +.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; +} +.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; +} +.tree-folder-open { + background: url('images/tree_icons.png') no-repeat -224px 0; +} +.tree-file { + background: url('images/tree_icons.png') no-repeat -240px 0; +} +.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; +} +.tree-title { + font-size: 12px; + display: inline-block; + text-decoration: none; + vertical-align: top; + white-space: nowrap; + padding: 0 2px; + height: 18px; + line-height: 18px; +} +.tree-node-proxy { + font-size: 12px; + 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 #95B8E7; + font-size: 12px; + line-height: 16px; + padding: 0 4px; + margin: 0; + width: 80px; + outline-style: none; + vertical-align: top; + position: absolute; + top: 0; +} +.tree-node-proxy { + background-color: #ffffff; + color: #000000; + border-color: #95B8E7; +} +.tree-node-hover { + background: #eaf2ff; + color: #000000; +} +.tree-node-selected { + background: #ffe48d; + color: #000000; +} +.tree-node-hidden { + display: none; +} +.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; + border-radius: 5px; + -moz-border-radius: 5px 5px 5px 5px; + -webkit-border-radius: 5px 5px 5px 5px; + border-radius: 5px 5px 5px 5px; +} +.tooltip-content { + font-size: 12px; +} +.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; + _border-color: tomato; + _filter: chroma(color=tomato); +} +.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: #95B8E7; + color: #000000; +} +.tooltip-right .tooltip-arrow-outer { + border-right-color: #95B8E7; +} +.tooltip-right .tooltip-arrow { + border-right-color: #ffffff; +} +.tooltip-left .tooltip-arrow-outer { + border-left-color: #95B8E7; +} +.tooltip-left .tooltip-arrow { + border-left-color: #ffffff; +} +.tooltip-top .tooltip-arrow-outer { + border-top-color: #95B8E7; +} +.tooltip-top .tooltip-arrow { + border-top-color: #ffffff; +} +.tooltip-bottom .tooltip-arrow-outer { + border-bottom-color: #95B8E7; +} +.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: 5px 5px 5px 5px; + -webkit-border-radius: 5px 5px 5px 5px; + border-radius: 5px 5px 5px 5px; +} +.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: 12px; + -moz-border-radius: 5px 5px 5px 5px; + -webkit-border-radius: 5px 5px 5px 5px; + border-radius: 5px 5px 5px 5px; +} +.switchbutton-on { + background: #ffe48d; + color: #000000; +} +.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; +} diff --git a/src/main/webapp/css/themes/default/filebox.css b/src/main/webapp/css/themes/default/filebox.css new file mode 100644 index 0000000..c6bac66 --- /dev/null +++ b/src/main/webapp/css/themes/default/filebox.css @@ -0,0 +1,20 @@ +.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; +} diff --git a/src/main/webapp/css/themes/default/images/accordion_arrows.png b/src/main/webapp/css/themes/default/images/accordion_arrows.png new file mode 100644 index 0000000000000000000000000000000000000000..720835f69c96c17ec32a20b03ac9753aa59b7f4f GIT binary patch literal 184 zcmeAS@N?(olHy`uVBq!ia0vp^3P3Et!3HGD8EPYeRK2H*V@SoVUT_Y-nKxaI`{RC0WjSLJ&w^R(C-|JQTojLXc1&{d*_z{$ jW+oTMdQ(F|jDg|L>K${_)^zO#I)%a0)z4*}Q$iB}_fAN- literal 0 HcmV?d00001 diff --git a/src/main/webapp/css/themes/default/images/blank.gif b/src/main/webapp/css/themes/default/images/blank.gif new file mode 100644 index 0000000000000000000000000000000000000000..1d11fa9ada9e93505b3d736acb204083f45d5fbf GIT binary patch literal 43 scmZ?wbhEHbWMp7uX!y@?;J^U}1_s5SEQ~;kK?g*DWEhy3To@Uw0n;G|I{*Lx literal 0 HcmV?d00001 diff --git a/src/main/webapp/css/themes/default/images/calendar_arrows.png b/src/main/webapp/css/themes/default/images/calendar_arrows.png new file mode 100644 index 0000000000000000000000000000000000000000..430c4ad685b8c0068ecb7e3cbef74f493a84ad0d GIT binary patch literal 173 zcmeAS@N?(olHy`uVBq!ia0vp^4nQox!3HFkJ+IURQYD@)jv*Dd-cCEn)nLHm{QbZE z+q@uWwandfr?Jb4eDYYmB3UAt=OO2Vt+MMT&+KD%&6hZDt!FBpej;sEpMN69^tKl% zp6y<4_lG^P z=;=eQ4Vs74-2)Ua&f1tcVdk$#{GPKe@&?ZMHmT&SMw?IV&w7)}ixLbB3d$Zg{&KGb P8OPx1>gTe~DWM4fp>5!O@Gl{c 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 literal 0 HcmV?d00001 diff --git a/src/main/webapp/css/themes/default/images/loading.gif b/src/main/webapp/css/themes/default/images/loading.gif new file mode 100644 index 0000000000000000000000000000000000000000..68f01d04813c1f622810864a3aaa04b4a17ac8f9 GIT binary patch literal 1737 zcmaKsX;2e)7>CzDa{xjjy99|1A!tC(kfocDi)<1$AxHpOQ4k^l!Vx1W6x7<&|FYXU zqO4jEiU-!VR1p+Xj1?4-iuI_J;!&?!+ghg|JJad3U)pMGzcKxNeCM6tJnuX+uPvX@ zZY|=AHdxt2Xr2y*)5|c6#FSEuyJ+Y3Z&l z2hJWo`9;lJ$6wzSoW60tqkB|d$oiO*d-^85^ojn{*NR{MP*%{@H*#gihZ8BKyB68E z-MIbjgNNV0y5khpJ^Jv`51aR%={<4jhaVq5e*9D5+*hL)XCHn4{^d%hPu@?KpKbc=eN!D=XUjDmH#n{YHNS zHCX6BV)yn2CuTNujhN~V+`RKpyXO6^ht92eqhIIlQLfz6eeCnH_C7`NPNrw9ks366 z4xX9(`s~z=+1uX^ocZ$2_fBs=JihPfWYufOIuD&AU-@`>>qn~cy$1)T7CU!5z2(U8 z)9Kt9)l`f6?NU41j6XbXfR{OHwm|T4}&24tIf+!C-g~6cQfY2^n$?AT&ZW zgqm`}3-jS2NS6n=k;sr5Hv(Q%%n)qW0X|neWVBd;Ko}d(=u%?{O0-a>kSI}shOd9n z5top}%gUCf=>?tg;*;#7!^HOL3k$fMxd=O-6Y4@%u8LS)C1D_a?27R6^vcC+6tttL z)GmTahbyJB!xmcHL#ya8ZXyfRl)a!N0BJE0y3BBfAV5;#=K&Z2VkaKZ)?9`1h5P_% znt*b}%j1|#j`b|aQDx@~wA#$PYRN2xE6UO;;vE(@$&xww-s8fZ5HmJ(eJ*rQrDbaawDbrfe_8F(wq{ge?)qQG`aXV;r(*6EM|ESje;52aFmrX!f=Pw^2oGQX$1|o4yts|b_5@w_kNwtl{wDP#JGMvIp#!SYX?Wq9S&`&_ZwkgGH5CLB7DEGJ6=R4J~p3Z4i^A}hs=-uZeD zs92l6u@**R$~L()G{5N8*7cE5-q$SCo`q4|NSVF*+A7&xZnypm$EdXgf)E%(VJHFD zSgi(H!D!(;9Zcc#GrCCJh=RlvXBQ-hv4Vodse`a32ZUFWgP5ZhM5LeV(#D^H8p@Lg ztra5R32z@1rQv{6u&RZL5%Z@Ye{q|t#6aM_1hIrpl@)oH6}os*cbAQywa{5<`ekzW O1il%9bk82&KlvLjD^%40 literal 0 HcmV?d00001 diff --git a/src/main/webapp/css/themes/default/images/menu_arrows.png b/src/main/webapp/css/themes/default/images/menu_arrows.png new file mode 100644 index 0000000000000000000000000000000000000000..b986842e7e4044caed18edbcb4b376a4bb915623 GIT binary patch literal 160 zcmeAS@N?(olHy`uVBq!ia0vp^4nQox!3HFkJ+IURQt6&9jv*Dd-cB{-J7B=U{PTZ! zWrKV9%Z3|Wt5t$(gq+#d+-OocB$0fsr9DfRx52vPhSu$$+yXuy+69hDZ54DDTxx#r zL7>-12UT01v)>tZ+;HI4pDNf?@KK~EC$@35ykmXyu^HJF3})N>8P9Uwo&~g$!PC{x JWt~$(697!FIeGv9 literal 0 HcmV?d00001 diff --git a/src/main/webapp/css/themes/default/images/messager_icons.png b/src/main/webapp/css/themes/default/images/messager_icons.png new file mode 100644 index 0000000000000000000000000000000000000000..62c18c135860351063ebaabe8c0f4df7664b8f65 GIT binary patch literal 6116 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 eBlUQ{{Qm&YJg{HE_Fe7(0000`TRe8 z#G%R{$NfX%tci2`Gda4n1O70V3HltacN37lc`VT21_Oig(wY*}T!mDijSQZyelF{r G5}E*M5;#5p literal 0 HcmV?d00001 diff --git a/src/main/webapp/css/themes/default/images/passwordbox_open.png b/src/main/webapp/css/themes/default/images/passwordbox_open.png new file mode 100644 index 0000000000000000000000000000000000000000..d328891f6a18ea703fd25a47b228df9cb13b4744 GIT binary patch literal 165 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`Ii4<#Ar-fh6C~y}*jFF6I{2&m zf8fW~lSf{d9=Ouc<(SoRr6$ox=6dW5rxOB`TRe8 z#G%R{$Nj@Z)5m5kM@2RMITi_;Npmte=_#;rBych_7F`xqKKy}=f%DM}Q4`(M(}DIf Nc)I$ztaD0e0su|qH(3Ax literal 0 HcmV?d00001 diff --git a/src/main/webapp/css/themes/default/images/searchbox_button.png b/src/main/webapp/css/themes/default/images/searchbox_button.png new file mode 100644 index 0000000000000000000000000000000000000000..6dd1931589b453f6cc9772fd1851d8705d6b6631 GIT binary patch literal 813 zcmV+|1JeA7P)lXvaa)1B=8vtU6i;3jw7+Lm8D5$Z@i10EnF)=bcefw4K z$^E-CUfjQG`svfBbfD6|R#sLFj6lo3FG$G6@;ee>>~6i|H^5OY8c00W#fi<*1vzh{0&qu3dB`V0{{XDY`}(1n>S9M(9!zw#!&`A z#;*+0{6GVMSeWGp!`o{o8NPge#o%jgs54WT$qnQYpsyGNpauX05F;oJfZ`Pdw6!$j zynTH0RMa&!n3$Pa9zVGEY{&L(3qnPBl_DG6<9Xk0`Fl3`LiD4@pH{vDsxJWQ1qdJp zEJ>M}osCtQlY?CgW>F{;gVK#SmgoOZnEn5J%EtIXaWQXAO>Rdf)WFR;gt~f zXaA3z{{L{q=l48y!32yJ3i0hJ2BS=^}@sXzH{F9Iq&OW375;I7CG-}Vr|aF#l<(fySwu2>`YdxRW*W0f#2un=W5Jmvoe`XCK%I_Y++#`fwE+= zSd{sEULGDE%A=#BOW<6gP*6VfMa^fr8qe`5w%)P0a^Y9WGTw! zvI^|$>l@1Da^Ke1*T3RdY7KqM%gaBb(P+oP!GW;b?ZRfW3Bxc1H@GCaHK#XhZ*Lc= zRBC@>V&W#x&B5%(#>OW5`};d6I5Qw218EG_q@1gtr!Nl*v7yn?(MPMRt4SNy%--JK zanm#f^bw^}Nr7b(EUg}TUi(2;)deX10lAo=83+VA(QksJI6(zwptET-y~avN=J9w$ zI2`W5lG|aOkjY7(&!@;Jx*nUA>~J`Q)9L&(G8y=g$3a4YgD7z)5>gXQNKhw=uR0zF z#jHruh)gDv=bj|2ZES4(fEM?I!JyKqo=}sj-fBYTcDt4KXq)eFQH}wW`vh%Mla}#@ z@Mb`C)x@YkK{xd2>8ZLg+E!Lps$Q@6DY-~!0=Gs+Mm~_JnW1EbX2uxClEdN>Y@I78 z=ke_9?7sX@o0*x}M{JB77MIXj_MmNE%+1Xe{*{crh)9={dR(U;y-{jrxUXmG%Gt002ovPDHLkV1hy(sXhPz literal 0 HcmV?d00001 diff --git a/src/main/webapp/css/themes/default/images/spinner_arrows.png b/src/main/webapp/css/themes/default/images/spinner_arrows.png new file mode 100644 index 0000000000000000000000000000000000000000..7c2df483dbb30dfb3a51332c03fe6f0c229c0547 GIT binary patch literal 149 zcmeAS@N?(olHy`uVBq!ia0vp^4nQox!3HFkJ+IURQZb$`jv*Ddk`p9Y7bl4Dgeh3R zJz6gy$J;RRRRiNz`7}$-z5~nWg=}UsVYp!HpQ#{_&8An~S<1fjm*zKyrHmF27#+^4 x`1rk&EZfSkR8C?on>%wt3;O{L3Dzy_3@=Og7TEqO`UJFx!PC{xWt~$(69D$UE$jdQ literal 0 HcmV?d00001 diff --git a/src/main/webapp/css/themes/default/images/tabs_icons.png b/src/main/webapp/css/themes/default/images/tabs_icons.png new file mode 100644 index 0000000000000000000000000000000000000000..4d29966d7154338a9e2e358821a5f72655eba43e GIT binary patch literal 150 zcmeAS@N?(olHy`uVBq!ia0vp^20$#p!3HD)*8SNCq+&f?978H@B_~L*E^a7uNPG49 z|BoM6E;$_tDnm{r-UW|t3f!- literal 0 HcmV?d00001 diff --git a/src/main/webapp/css/themes/default/images/tagbox_icons.png b/src/main/webapp/css/themes/default/images/tagbox_icons.png new file mode 100644 index 0000000000000000000000000000000000000000..bd02e2d817c6b7c4e2a105919e9a89cc0a1d577f GIT binary patch literal 134 zcmeAS@N?(olHy`uVBq!ia0vp^3P3Et!3HGD8EPYel&`0YV@SoV>_0CQASS literal 0 HcmV?d00001 diff --git a/src/main/webapp/css/themes/default/images/tree_icons.png b/src/main/webapp/css/themes/default/images/tree_icons.png new file mode 100644 index 0000000000000000000000000000000000000000..e9be4f3a9965e49a4e4078f8c53f486d761a7468 GIT binary patch literal 3115 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 literal 0 HcmV?d00001 diff --git a/src/main/webapp/css/themes/default/images/validatebox_warning.png b/src/main/webapp/css/themes/default/images/validatebox_warning.png new file mode 100644 index 0000000000000000000000000000000000000000..2b3d4f05babf3f82b146350e96570fac02075de0 GIT binary patch literal 921 zcmV;K17`e*P)nRv1_mBsMY*-M^XCf)eflW5 z|MC^)Hw+AW{sHCCF+cz@{fF8J!+#-kxoSv=7^|!zgOQUngSQ}mDo|J)n+pH}hzZ#= zr~y18$_m-?9v%$;?mu8);}>9vFgFvDXJDwrW&l6{p}625M66yTFhGz^K$w9^O$BHi zFN2Ym7DIple*#cW4BY^L0Al(Jbv6k9U|^6IQBp{hx3XdQ&CJ4Z_|YSVr@XujY(PVT zlok1<85nBO4FCurumK>O|A07*jFlSRUcxLAQVcIR*co#3@)&jj4Pj7KXRri%#h;fa z4ya5O*#Lk5Vq!q}T~=CGH(uV-hJk^fkAYoGjN#AMuMF($>N=giWG}IXse|=+c=i>7HEg>%*E%fLD!-uy|85n^6W?^Dt(9zXp5EB&z+w>_knBmdiKMbzi z?A!`WOl>e100a=&05*1xZdFls?*HtZ48H?o7=HW%ivIu45E2~BASWx!@DIpmv9e}h zaPwji|L}pqor@y`=yxrU0RRES^qYY}O;TRcU+DKIhL4`%3_nyf8U6tS<<-ZJ40D$( zWjJ%`G6NIPHNP2{7am*Fp% z{>ShK#0G`~kjd~57_BU.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; +} +.panel-hleft>.panel-header .panel-title, +.panel-hright>.panel-header .panel-title { + position: absolute; + min-width: 16px; + left: 21px; + 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: 5px; + 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; +} diff --git a/src/main/webapp/css/themes/default/passwordbox.css b/src/main/webapp/css/themes/default/passwordbox.css new file mode 100644 index 0000000..92c9ce5 --- /dev/null +++ b/src/main/webapp/css/themes/default/passwordbox.css @@ -0,0 +1,6 @@ +.passwordbox-open { + background: url('images/passwordbox_open.png') no-repeat center center; +} +.passwordbox-close { + background: url('images/passwordbox_close.png') no-repeat center center; +} diff --git a/src/main/webapp/css/themes/default/progressbar.css b/src/main/webapp/css/themes/default/progressbar.css new file mode 100644 index 0000000..e4d3003 --- /dev/null +++ b/src/main/webapp/css/themes/default/progressbar.css @@ -0,0 +1,32 @@ +.progressbar { + border-width: 1px; + border-style: solid; + -moz-border-radius: 5px 5px 5px 5px; + -webkit-border-radius: 5px 5px 5px 5px; + border-radius: 5px 5px 5px 5px; + overflow: hidden; + position: relative; +} +.progressbar-text { + text-align: center; + position: absolute; +} +.progressbar-value { + position: relative; + overflow: hidden; + width: 0; + -moz-border-radius: 5px 0 0 5px; + -webkit-border-radius: 5px 0 0 5px; + border-radius: 5px 0 0 5px; +} +.progressbar { + border-color: #95B8E7; +} +.progressbar-text { + color: #000000; + font-size: 12px; +} +.progressbar-value .progressbar-text { + background-color: #ffe48d; + color: #000000; +} diff --git a/src/main/webapp/css/themes/default/propertygrid.css b/src/main/webapp/css/themes/default/propertygrid.css new file mode 100644 index 0000000..5f5fbb3 --- /dev/null +++ b/src/main/webapp/css/themes/default/propertygrid.css @@ -0,0 +1,28 @@ +.propertygrid .datagrid-view1 .datagrid-body td { + padding-bottom: 1px; + border-width: 0 1px 0 0; +} +.propertygrid .datagrid-group { + height: 21px; + 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: #dddddd; +} +.propertygrid .datagrid-view1 .datagrid-group { + border-color: #E0ECFF; +} +.propertygrid .datagrid-view2 .datagrid-group { + border-color: #dddddd; +} +.propertygrid .datagrid-group, +.propertygrid .datagrid-view1 .datagrid-body, +.propertygrid .datagrid-view1 .datagrid-row-over, +.propertygrid .datagrid-view1 .datagrid-row-selected { + background: #E0ECFF; +} diff --git a/src/main/webapp/css/themes/default/searchbox.css b/src/main/webapp/css/themes/default/searchbox.css new file mode 100644 index 0000000..ada5ce3 --- /dev/null +++ b/src/main/webapp/css/themes/default/searchbox.css @@ -0,0 +1,61 @@ +.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: #E0ECFF; +} +.searchbox .l-btn-plain-disabled, +.searchbox .l-btn-plain-disabled:hover { + opacity: 0.5; + filter: alpha(opacity=50); +} diff --git a/src/main/webapp/css/themes/default/slider.css b/src/main/webapp/css/themes/default/slider.css new file mode 100644 index 0000000..f51f986 --- /dev/null +++ b/src/main/webapp/css/themes/default/slider.css @@ -0,0 +1,101 @@ +.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: 12px; + 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: 12px; +} +.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: #95B8E7; + background: #E0ECFF; +} +.slider-rule span { + border-color: #95B8E7; +} +.slider-rulelabel span { + color: #000000; +} diff --git a/src/main/webapp/css/themes/default/spinner.css b/src/main/webapp/css/themes/default/spinner.css new file mode 100644 index 0000000..e2df29b --- /dev/null +++ b/src/main/webapp/css/themes/default/spinner.css @@ -0,0 +1,58 @@ +.spinner-arrow { + background-color: #E0ECFF; + display: inline-block; + overflow: hidden; + vertical-align: top; + margin: 0; + padding: 0; + opacity: 1.0; + filter: alpha(opacity=100); + width: 18px; +} +.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; +} +.spinner-arrow-hover { + background-color: #eaf2ff; + opacity: 1.0; + filter: alpha(opacity=100); +} +.spinner-arrow-up:hover, +.spinner-arrow-down:hover { + opacity: 1.0; + filter: alpha(opacity=100); + background-color: #eaf2ff; +} +.textbox-icon-disabled .spinner-arrow-up:hover, +.textbox-icon-disabled .spinner-arrow-down:hover { + opacity: 0.6; + filter: alpha(opacity=60); + background-color: #E0ECFF; + 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; +} +.spinner-arrow-down { + background: url('images/spinner_arrows.png') no-repeat -15px center; +} +.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; +} diff --git a/src/main/webapp/css/themes/default/splitbutton.css b/src/main/webapp/css/themes/default/splitbutton.css new file mode 100644 index 0000000..86d6da5 --- /dev/null +++ b/src/main/webapp/css/themes/default/splitbutton.css @@ -0,0 +1,12 @@ +.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: #aac5e7; + border-width: 0 0 0 1px; +} diff --git a/src/main/webapp/css/themes/default/switchbutton.css b/src/main/webapp/css/themes/default/switchbutton.css new file mode 100644 index 0000000..20818ab --- /dev/null +++ b/src/main/webapp/css/themes/default/switchbutton.css @@ -0,0 +1,77 @@ +.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: 5px 5px 5px 5px; + -webkit-border-radius: 5px 5px 5px 5px; + border-radius: 5px 5px 5px 5px; +} +.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: 12px; + -moz-border-radius: 5px 5px 5px 5px; + -webkit-border-radius: 5px 5px 5px 5px; + border-radius: 5px 5px 5px 5px; +} +.switchbutton-on { + background: #ffe48d; + color: #000000; +} +.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; +} diff --git a/src/main/webapp/css/themes/default/tabs.css b/src/main/webapp/css/themes/default/tabs.css new file mode 100644 index 0000000..d5d84e8 --- /dev/null +++ b/src/main/webapp/css/themes/default/tabs.css @@ -0,0 +1,413 @@ +.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 a.tabs-inner { + display: inline-block; + text-decoration: none; + 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 a.tabs-inner { + font-weight: bold; + outline: none; +} +.tabs li.tabs-selected a:hover.tabs-inner { + 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: 12px; +} +.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 a.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 a.tabs-inner { + padding-left: 0; + padding-right: 0; +} +.tabs-header-left .tabs li a.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 a.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 a.tabs-inner { + -moz-border-radius: 5px 5px 5px 5px; + -webkit-border-radius: 5px 5px 5px 5px; + border-radius: 5px 5px 5px 5px; +} +.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: #E0ECFF url('images/tabs_icons.png') no-repeat 1px center; +} +.tabs-scroller-right { + background: #E0ECFF 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 a.tabs-inner:hover { + background: #eaf2ff; + color: #000000; + filter: none; +} +.tabs li.tabs-selected a.tabs-inner { + background-color: #ffffff; + color: #0E2D5F; + background: -webkit-linear-gradient(top,#EFF5FF 0,#ffffff 100%); + background: -moz-linear-gradient(top,#EFF5FF 0,#ffffff 100%); + background: -o-linear-gradient(top,#EFF5FF 0,#ffffff 100%); + background: linear-gradient(to bottom,#EFF5FF 0,#ffffff 100%); + background-repeat: repeat-x; + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr=#EFF5FF,endColorstr=#ffffff,GradientType=0); +} +.tabs-header-bottom .tabs li.tabs-selected a.tabs-inner { + background: -webkit-linear-gradient(top,#ffffff 0,#EFF5FF 100%); + background: -moz-linear-gradient(top,#ffffff 0,#EFF5FF 100%); + background: -o-linear-gradient(top,#ffffff 0,#EFF5FF 100%); + background: linear-gradient(to bottom,#ffffff 0,#EFF5FF 100%); + background-repeat: repeat-x; + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr=#ffffff,endColorstr=#EFF5FF,GradientType=0); +} +.tabs-header-left .tabs li.tabs-selected a.tabs-inner { + background: -webkit-linear-gradient(left,#EFF5FF 0,#ffffff 100%); + background: -moz-linear-gradient(left,#EFF5FF 0,#ffffff 100%); + background: -o-linear-gradient(left,#EFF5FF 0,#ffffff 100%); + background: linear-gradient(to right,#EFF5FF 0,#ffffff 100%); + background-repeat: repeat-y; + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr=#EFF5FF,endColorstr=#ffffff,GradientType=1); +} +.tabs-header-right .tabs li.tabs-selected a.tabs-inner { + background: -webkit-linear-gradient(left,#ffffff 0,#EFF5FF 100%); + background: -moz-linear-gradient(left,#ffffff 0,#EFF5FF 100%); + background: -o-linear-gradient(left,#ffffff 0,#EFF5FF 100%); + background: linear-gradient(to right,#ffffff 0,#EFF5FF 100%); + background-repeat: repeat-y; + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr=#ffffff,endColorstr=#EFF5FF,GradientType=1); +} +.tabs li a.tabs-inner { + color: #0E2D5F; + background-color: #E0ECFF; + background: -webkit-linear-gradient(top,#EFF5FF 0,#E0ECFF 100%); + background: -moz-linear-gradient(top,#EFF5FF 0,#E0ECFF 100%); + background: -o-linear-gradient(top,#EFF5FF 0,#E0ECFF 100%); + background: linear-gradient(to bottom,#EFF5FF 0,#E0ECFF 100%); + background-repeat: repeat-x; + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr=#EFF5FF,endColorstr=#E0ECFF,GradientType=0); +} +.tabs-header, +.tabs-tool { + background-color: #E0ECFF; +} +.tabs-header-plain { + background: transparent; +} +.tabs-header, +.tabs-scroller-left, +.tabs-scroller-right, +.tabs-tool, +.tabs, +.tabs-panels, +.tabs li a.tabs-inner, +.tabs li.tabs-selected a.tabs-inner, +.tabs-header-bottom .tabs li.tabs-selected a.tabs-inner, +.tabs-header-left .tabs li.tabs-selected a.tabs-inner, +.tabs-header-right .tabs li.tabs-selected a.tabs-inner { + border-color: #95B8E7; +} +.tabs-p-tool a:hover, +.tabs li a:hover.tabs-close, +.tabs-scroller-over { + background-color: #eaf2ff; +} +.tabs li.tabs-selected a.tabs-inner { + border-bottom: 1px solid #ffffff; +} +.tabs-header-bottom .tabs li.tabs-selected a.tabs-inner { + border-top: 1px solid #ffffff; +} +.tabs-header-left .tabs li.tabs-selected a.tabs-inner { + border-right: 1px solid #ffffff; +} +.tabs-header-right .tabs li.tabs-selected a.tabs-inner { + border-left: 1px solid #ffffff; +} +.tabs-header .tabs-pill li.tabs-selected a.tabs-inner { + background: #ffe48d; + color: #000000; + filter: none; + border-color: #95B8E7; +} diff --git a/src/main/webapp/css/themes/default/tagbox.css b/src/main/webapp/css/themes/default/tagbox.css new file mode 100644 index 0000000..67d51a3 --- /dev/null +++ b/src/main/webapp/css/themes/default/tagbox.css @@ -0,0 +1,44 @@ +.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: 5px 5px 5px 5px; + -webkit-border-radius: 5px 5px 5px 5px; + border-radius: 5px 5px 5px 5px; + background: #eaf2ff; + 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); +} diff --git a/src/main/webapp/css/themes/default/textbox.css b/src/main/webapp/css/themes/default/textbox.css new file mode 100644 index 0000000..ae2d963 --- /dev/null +++ b/src/main/webapp/css/themes/default/textbox.css @@ -0,0 +1,139 @@ +.textbox { + position: relative; + border: 1px solid #95B8E7; + background-color: #fff; + vertical-align: middle; + display: inline-block; + overflow: hidden; + white-space: nowrap; + margin: 0; + padding: 0; + -moz-border-radius: 5px 5px 5px 5px; + -webkit-border-radius: 5px 5px 5px 5px; + border-radius: 5px 5px 5px 5px; +} +.textbox .textbox-text { + font-size: 12px; + border: 0; + margin: 0; + padding: 4px; + white-space: normal; + vertical-align: top; + outline-style: none; + resize: none; + -moz-border-radius: 5px 5px 5px 5px; + -webkit-border-radius: 5px 5px 5px 5px; + border-radius: 5px 5px 5px 5px; +} +.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: 22px; + line-height: 22px; + 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: #6b9cde; + -moz-box-shadow: 0 0 3px 0 #95B8E7; + -webkit-box-shadow: 0 0 3px 0 #95B8E7; + box-shadow: 0 0 3px 0 #95B8E7; +} +.textbox-invalid { + border-color: #ffa8a8; + background-color: #fff3f3; +} diff --git a/src/main/webapp/css/themes/default/tooltip.css b/src/main/webapp/css/themes/default/tooltip.css new file mode 100644 index 0000000..9294d9d --- /dev/null +++ b/src/main/webapp/css/themes/default/tooltip.css @@ -0,0 +1,103 @@ +.tooltip { + position: absolute; + display: none; + z-index: 9900000; + outline: none; + opacity: 1; + filter: alpha(opacity=100); + padding: 5px; + border-width: 1px; + border-style: solid; + border-radius: 5px; + -moz-border-radius: 5px 5px 5px 5px; + -webkit-border-radius: 5px 5px 5px 5px; + border-radius: 5px 5px 5px 5px; +} +.tooltip-content { + font-size: 12px; +} +.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; + _border-color: tomato; + _filter: chroma(color=tomato); +} +.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: #95B8E7; + color: #000000; +} +.tooltip-right .tooltip-arrow-outer { + border-right-color: #95B8E7; +} +.tooltip-right .tooltip-arrow { + border-right-color: #ffffff; +} +.tooltip-left .tooltip-arrow-outer { + border-left-color: #95B8E7; +} +.tooltip-left .tooltip-arrow { + border-left-color: #ffffff; +} +.tooltip-top .tooltip-arrow-outer { + border-top-color: #95B8E7; +} +.tooltip-top .tooltip-arrow { + border-top-color: #ffffff; +} +.tooltip-bottom .tooltip-arrow-outer { + border-bottom-color: #95B8E7; +} +.tooltip-bottom .tooltip-arrow { + border-bottom-color: #ffffff; +} diff --git a/src/main/webapp/css/themes/default/tree.css b/src/main/webapp/css/themes/default/tree.css new file mode 100644 index 0000000..d6f5e16 --- /dev/null +++ b/src/main/webapp/css/themes/default/tree.css @@ -0,0 +1,161 @@ +.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: 18px; + 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; + vertical-align: top; + overflow: hidden; +} +.tree-expanded { + background: url('images/tree_icons.png') no-repeat -18px 0px; +} +.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; +} +.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; +} +.tree-folder-open { + background: url('images/tree_icons.png') no-repeat -224px 0; +} +.tree-file { + background: url('images/tree_icons.png') no-repeat -240px 0; +} +.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; +} +.tree-title { + font-size: 12px; + display: inline-block; + text-decoration: none; + vertical-align: top; + white-space: nowrap; + padding: 0 2px; + height: 18px; + line-height: 18px; +} +.tree-node-proxy { + font-size: 12px; + 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 #95B8E7; + font-size: 12px; + line-height: 16px; + padding: 0 4px; + margin: 0; + width: 80px; + outline-style: none; + vertical-align: top; + position: absolute; + top: 0; +} +.tree-node-proxy { + background-color: #ffffff; + color: #000000; + border-color: #95B8E7; +} +.tree-node-hover { + background: #eaf2ff; + color: #000000; +} +.tree-node-selected { + background: #ffe48d; + color: #000000; +} +.tree-node-hidden { + display: none; +} diff --git a/src/main/webapp/css/themes/default/validatebox.css b/src/main/webapp/css/themes/default/validatebox.css new file mode 100644 index 0000000..1fc3ad6 --- /dev/null +++ b/src/main/webapp/css/themes/default/validatebox.css @@ -0,0 +1,5 @@ +.validatebox-invalid { + border-color: #ffa8a8; + background-color: #fff3f3; + color: #000; +} diff --git a/src/main/webapp/css/themes/default/window.css b/src/main/webapp/css/themes/default/window.css new file mode 100644 index 0000000..ee7e8bd --- /dev/null +++ b/src/main/webapp/css/themes/default/window.css @@ -0,0 +1,183 @@ +.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: 5px 5px 5px 5px; + -webkit-border-radius: 5px 5px 5px 5px; + border-radius: 5px 5px 5px 5px; +} +.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: progid:DXImageTransform.Microsoft.Blur(pixelRadius=2,MakeShadow=false,ShadowOpacity=0.2); +} +.window, +.window .window-body { + border-color: #95B8E7; +} +.window { + background-color: #E0ECFF; + background: -webkit-linear-gradient(top,#EFF5FF 0,#E0ECFF 20%); + background: -moz-linear-gradient(top,#EFF5FF 0,#E0ECFF 20%); + background: -o-linear-gradient(top,#EFF5FF 0,#E0ECFF 20%); + background: linear-gradient(to bottom,#EFF5FF 0,#E0ECFF 20%); + background-repeat: repeat-x; + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr=#EFF5FF,endColorstr=#E0ECFF,GradientType=0); +} +.window-proxy { + border: 1px dashed #95B8E7; +} +.window-proxy-mask, +.window-mask { + background: #ccc; +} +.window .panel-footer { + border: 1px solid #95B8E7; + 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-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; +} diff --git a/src/main/webapp/css/themes/gray/accordion.css b/src/main/webapp/css/themes/gray/accordion.css new file mode 100644 index 0000000..3226cb3 --- /dev/null +++ b/src/main/webapp/css/themes/gray/accordion.css @@ -0,0 +1,89 @@ +.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; +} +.accordion-expand { + background: url('images/accordion_arrows.png') no-repeat -16px 0; +} +.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; +} diff --git a/src/main/webapp/css/themes/gray/calendar.css b/src/main/webapp/css/themes/gray/calendar.css new file mode 100644 index 0000000..a020472 --- /dev/null +++ b/src/main/webapp/css/themes/gray/calendar.css @@ -0,0 +1,202 @@ +.calendar { + border-width: 1px; + border-style: solid; + padding: 1px; + overflow: hidden; +} +.calendar table { + table-layout: fixed; + border-collapse: separate; + font-size: 12px; + width: 100%; + height: 100%; +} +.calendar table td, +.calendar table th { + font-size: 12px; +} +.calendar-noborder { + border: 0; +} +.calendar-header { + position: relative; + height: 22px; +} +.calendar-title { + text-align: center; + height: 22px; +} +.calendar-title span { + position: relative; + display: inline-block; + top: 2px; + padding: 0 3px; + height: 18px; + line-height: 18px; + font-size: 12px; + cursor: pointer; + -moz-border-radius: 5px 5px 5px 5px; + -webkit-border-radius: 5px 5px 5px 5px; + border-radius: 5px 5px 5px 5px; +} +.calendar-prevmonth, +.calendar-nextmonth, +.calendar-prevyear, +.calendar-nextyear { + position: absolute; + top: 50%; + margin-top: -7px; + width: 14px; + height: 14px; + cursor: pointer; + font-size: 1px; + -moz-border-radius: 5px 5px 5px 5px; + -webkit-border-radius: 5px 5px 5px 5px; + border-radius: 5px 5px 5px 5px; +} +.calendar-prevmonth { + left: 20px; + background: url('images/calendar_arrows.png') no-repeat -18px -2px; +} +.calendar-nextmonth { + right: 20px; + background: url('images/calendar_arrows.png') no-repeat -34px -2px; +} +.calendar-prevyear { + left: 3px; + background: url('images/calendar_arrows.png') no-repeat -1px -2px; +} +.calendar-nextyear { + right: 3px; + background: url('images/calendar_arrows.png') no-repeat -49px -2px; +} +.calendar-body { + position: relative; +} +.calendar-body th, +.calendar-body td { + text-align: center; +} +.calendar-day { + border: 0; + padding: 1px; + cursor: pointer; + -moz-border-radius: 5px 5px 5px 5px; + -webkit-border-radius: 5px 5px 5px 5px; + border-radius: 5px 5px 5px 5px; +} +.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: 12px; + display: none; + overflow: hidden; +} +.calendar-menu-year-inner { + text-align: center; + padding-bottom: 5px; +} +.calendar-menu-year { + width: 50px; + text-align: center; + border-width: 1px; + border-style: solid; + outline-style: none; + resize: none; + margin: 0; + padding: 2px; + font-weight: bold; + font-size: 12px; + -moz-border-radius: 5px 5px 5px 5px; + -webkit-border-radius: 5px 5px 5px 5px; + border-radius: 5px 5px 5px 5px; +} +.calendar-menu-prev, +.calendar-menu-next { + display: inline-block; + width: 21px; + height: 21px; + vertical-align: top; + cursor: pointer; + -moz-border-radius: 5px 5px 5px 5px; + -webkit-border-radius: 5px 5px 5px 5px; + border-radius: 5px 5px 5px 5px; +} +.calendar-menu-prev { + margin-right: 10px; + background: url('images/calendar_arrows.png') no-repeat 2px 2px; +} +.calendar-menu-next { + margin-left: 10px; + background: url('images/calendar_arrows.png') no-repeat -45px 2px; +} +.calendar-menu-month { + text-align: center; + cursor: pointer; + font-weight: bold; + -moz-border-radius: 5px 5px 5px 5px; + -webkit-border-radius: 5px 5px 5px 5px; + border-radius: 5px 5px 5px 5px; +} +.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: 2px 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; +} diff --git a/src/main/webapp/css/themes/gray/combo.css b/src/main/webapp/css/themes/gray/combo.css new file mode 100644 index 0000000..6ebdf5e --- /dev/null +++ b/src/main/webapp/css/themes/gray/combo.css @@ -0,0 +1,35 @@ +.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; +} +.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; +} diff --git a/src/main/webapp/css/themes/gray/combobox.css b/src/main/webapp/css/themes/gray/combobox.css new file mode 100644 index 0000000..0f7b5af --- /dev/null +++ b/src/main/webapp/css/themes/gray/combobox.css @@ -0,0 +1,39 @@ +.combobox-item, +.combobox-group, +.combobox-stick { + font-size: 12px; + padding: 3px; +} +.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; +} diff --git a/src/main/webapp/css/themes/gray/datagrid.css b/src/main/webapp/css/themes/gray/datagrid.css new file mode 100644 index 0000000..737faf7 --- /dev/null +++ b/src/main/webapp/css/themes/gray/datagrid.css @@ -0,0 +1,288 @@ +.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: 25px; +} +.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: 12px; + 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; +} +.datagrid-header, +.datagrid-td-rownumber { + background-color: #fafafa; + background: -webkit-linear-gradient(top,#fdfdfd 0,#f5f5f5 100%); + background: -moz-linear-gradient(top,#fdfdfd 0,#f5f5f5 100%); + background: -o-linear-gradient(top,#fdfdfd 0,#f5f5f5 100%); + background: linear-gradient(to bottom,#fdfdfd 0,#f5f5f5 100%); + background-repeat: repeat-x; + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr=#fdfdfd,endColorstr=#f5f5f5,GradientType=0); +} +.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; +} diff --git a/src/main/webapp/css/themes/gray/datalist.css b/src/main/webapp/css/themes/gray/datalist.css new file mode 100644 index 0000000..de149ef --- /dev/null +++ b/src/main/webapp/css/themes/gray/datalist.css @@ -0,0 +1,95 @@ +.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; +} diff --git a/src/main/webapp/css/themes/gray/datebox.css b/src/main/webapp/css/themes/gray/datebox.css new file mode 100644 index 0000000..f616375 --- /dev/null +++ b/src/main/webapp/css/themes/gray/datebox.css @@ -0,0 +1,36 @@ +.datebox-calendar-inner { + height: 180px; +} +.datebox-button { + padding: 0 5px; + text-align: center; +} +.datebox-button a { + line-height: 22px; + font-size: 12px; + 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; +} diff --git a/src/main/webapp/css/themes/gray/dialog.css b/src/main/webapp/css/themes/gray/dialog.css new file mode 100644 index 0000000..2850ca1 --- /dev/null +++ b/src/main/webapp/css/themes/gray/dialog.css @@ -0,0 +1,47 @@ +.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; +} diff --git a/src/main/webapp/css/themes/gray/easyui.css b/src/main/webapp/css/themes/gray/easyui.css new file mode 100644 index 0000000..0779449 --- /dev/null +++ b/src/main/webapp/css/themes/gray/easyui.css @@ -0,0 +1,3220 @@ +.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; +} +.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; +} +.panel-header, +.panel-body { + border-color: #D3D3D3; +} +.panel-header { + background-color: #f3f3f3; + background: -webkit-linear-gradient(top,#F8F8F8 0,#eeeeee 100%); + background: -moz-linear-gradient(top,#F8F8F8 0,#eeeeee 100%); + background: -o-linear-gradient(top,#F8F8F8 0,#eeeeee 100%); + background: linear-gradient(to bottom,#F8F8F8 0,#eeeeee 100%); + background-repeat: repeat-x; + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr=#F8F8F8,endColorstr=#eeeeee,GradientType=0); +} +.panel-body { + background-color: #ffffff; + color: #000000; + font-size: 12px; +} +.panel-title { + font-size: 12px; + font-weight: bold; + color: #575765; + height: 16px; + line-height: 16px; +} +.panel-footer { + border: 1px solid #D3D3D3; + overflow: hidden; + background: #fafafa; +} +.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; +} +.panel-hleft>.panel-header .panel-title, +.panel-hright>.panel-header .panel-title { + position: absolute; + min-width: 16px; + left: 21px; + 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: 5px; + 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; +} +.accordion-expand { + background: url('images/accordion_arrows.png') no-repeat -16px 0; +} +.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: 5px 5px 5px 5px; + -webkit-border-radius: 5px 5px 5px 5px; + border-radius: 5px 5px 5px 5px; +} +.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: progid:DXImageTransform.Microsoft.Blur(pixelRadius=2,MakeShadow=false,ShadowOpacity=0.2); +} +.window, +.window .window-body { + border-color: #D3D3D3; +} +.window { + background-color: #f3f3f3; + background: -webkit-linear-gradient(top,#F8F8F8 0,#eeeeee 20%); + background: -moz-linear-gradient(top,#F8F8F8 0,#eeeeee 20%); + background: -o-linear-gradient(top,#F8F8F8 0,#eeeeee 20%); + background: linear-gradient(to bottom,#F8F8F8 0,#eeeeee 20%); + background-repeat: repeat-x; + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr=#F8F8F8,endColorstr=#eeeeee,GradientType=0); +} +.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-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: 24px; + font-size: 12px; + padding: 0; + margin: 0 4px; +} +.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 4px 0 24px; +} +.l-btn-icon-left .l-btn-icon { + left: 4px; +} +.l-btn-icon-right .l-btn-text { + margin: 0 24px 0 4px; +} +.l-btn-icon-right .l-btn-icon { + right: 4px; +} +.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 4px; + width: 16px; +} +.l-btn-plain:hover { + padding: 0; +} +.l-btn-focus { + outline: #0000FF dotted thin; +} +.l-btn-large .l-btn-text { + line-height: 40px; +} +.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 4px; + width: 32px; +} +.l-btn { + color: #444; + background: #fafafa; + background-repeat: repeat-x; + border: 1px solid #bbb; + background: -webkit-linear-gradient(top,#ffffff 0,#eeeeee 100%); + background: -moz-linear-gradient(top,#ffffff 0,#eeeeee 100%); + background: -o-linear-gradient(top,#ffffff 0,#eeeeee 100%); + background: linear-gradient(to bottom,#ffffff 0,#eeeeee 100%); + background-repeat: repeat-x; + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr=#ffffff,endColorstr=#eeeeee,GradientType=0); + -moz-border-radius: 5px 5px 5px 5px; + -webkit-border-radius: 5px 5px 5px 5px; + border-radius: 5px 5px 5px 5px; +} +.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: 5px 5px 5px 5px; + -webkit-border-radius: 5px 5px 5px 5px; + border-radius: 5px 5px 5px 5px; +} +.l-btn-disabled, +.l-btn-disabled:hover { + opacity: 0.5; + cursor: default; + background: #fafafa; + color: #444; + background: -webkit-linear-gradient(top,#ffffff 0,#eeeeee 100%); + background: -moz-linear-gradient(top,#ffffff 0,#eeeeee 100%); + background: -o-linear-gradient(top,#ffffff 0,#eeeeee 100%); + background: linear-gradient(to bottom,#ffffff 0,#eeeeee 100%); + background-repeat: repeat-x; + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr=#ffffff,endColorstr=#eeeeee,GradientType=0); +} +.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: 5px 5px 5px 5px; + -webkit-border-radius: 5px 5px 5px 5px; + border-radius: 5px 5px 5px 5px; +} +.textbox .textbox-text { + font-size: 12px; + border: 0; + margin: 0; + padding: 4px; + white-space: normal; + vertical-align: top; + outline-style: none; + resize: none; + -moz-border-radius: 5px 5px 5px 5px; + -webkit-border-radius: 5px 5px 5px 5px; + border-radius: 5px 5px 5px 5px; +} +.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: 22px; + line-height: 22px; + 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; +} +.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; +} +.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: 12px; + padding: 3px; +} +.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: 5px 5px 5px 5px; + -webkit-border-radius: 5px 5px 5px 5px; + border-radius: 5px 5px 5px 5px; + 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 a.tabs-inner { + display: inline-block; + text-decoration: none; + 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 a.tabs-inner { + font-weight: bold; + outline: none; +} +.tabs li.tabs-selected a:hover.tabs-inner { + 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: 12px; +} +.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 a.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 a.tabs-inner { + padding-left: 0; + padding-right: 0; +} +.tabs-header-left .tabs li a.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 a.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 a.tabs-inner { + -moz-border-radius: 5px 5px 5px 5px; + -webkit-border-radius: 5px 5px 5px 5px; + border-radius: 5px 5px 5px 5px; +} +.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 a.tabs-inner:hover { + background: #e2e2e2; + color: #000000; + filter: none; +} +.tabs li.tabs-selected a.tabs-inner { + background-color: #ffffff; + color: #575765; + background: -webkit-linear-gradient(top,#F8F8F8 0,#ffffff 100%); + background: -moz-linear-gradient(top,#F8F8F8 0,#ffffff 100%); + background: -o-linear-gradient(top,#F8F8F8 0,#ffffff 100%); + background: linear-gradient(to bottom,#F8F8F8 0,#ffffff 100%); + background-repeat: repeat-x; + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr=#F8F8F8,endColorstr=#ffffff,GradientType=0); +} +.tabs-header-bottom .tabs li.tabs-selected a.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: progid:DXImageTransform.Microsoft.gradient(startColorstr=#ffffff,endColorstr=#F8F8F8,GradientType=0); +} +.tabs-header-left .tabs li.tabs-selected a.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: progid:DXImageTransform.Microsoft.gradient(startColorstr=#F8F8F8,endColorstr=#ffffff,GradientType=1); +} +.tabs-header-right .tabs li.tabs-selected a.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: progid:DXImageTransform.Microsoft.gradient(startColorstr=#ffffff,endColorstr=#F8F8F8,GradientType=1); +} +.tabs li a.tabs-inner { + color: #575765; + background-color: #f3f3f3; + background: -webkit-linear-gradient(top,#F8F8F8 0,#eeeeee 100%); + background: -moz-linear-gradient(top,#F8F8F8 0,#eeeeee 100%); + background: -o-linear-gradient(top,#F8F8F8 0,#eeeeee 100%); + background: linear-gradient(to bottom,#F8F8F8 0,#eeeeee 100%); + background-repeat: repeat-x; + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr=#F8F8F8,endColorstr=#eeeeee,GradientType=0); +} +.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 a.tabs-inner, +.tabs li.tabs-selected a.tabs-inner, +.tabs-header-bottom .tabs li.tabs-selected a.tabs-inner, +.tabs-header-left .tabs li.tabs-selected a.tabs-inner, +.tabs-header-right .tabs li.tabs-selected a.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 a.tabs-inner { + border-bottom: 1px solid #ffffff; +} +.tabs-header-bottom .tabs li.tabs-selected a.tabs-inner { + border-top: 1px solid #ffffff; +} +.tabs-header-left .tabs li.tabs-selected a.tabs-inner { + border-right: 1px solid #ffffff; +} +.tabs-header-right .tabs li.tabs-selected a.tabs-inner { + border-left: 1px solid #ffffff; +} +.tabs-header .tabs-pill li.tabs-selected a.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: 25px; +} +.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: 12px; + 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; +} +.datagrid-header, +.datagrid-td-rownumber { + background-color: #fafafa; + background: -webkit-linear-gradient(top,#fdfdfd 0,#f5f5f5 100%); + background: -moz-linear-gradient(top,#fdfdfd 0,#f5f5f5 100%); + background: -o-linear-gradient(top,#fdfdfd 0,#f5f5f5 100%); + background: linear-gradient(to bottom,#fdfdfd 0,#f5f5f5 100%); + background-repeat: repeat-x; + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr=#fdfdfd,endColorstr=#f5f5f5,GradientType=0); +} +.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; +} +.propertygrid .datagrid-view1 .datagrid-body td { + padding-bottom: 1px; + border-width: 0 1px 0 0; +} +.propertygrid .datagrid-group { + height: 21px; + 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; +} +.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: 2em; + height: auto; +} +.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 { + width: 24px; + text-align: center; + margin: 0; +} +.pagination-first { + background: url('images/pagination_icons.png') no-repeat 0 center; +} +.pagination-prev { + background: url('images/pagination_icons.png') no-repeat -16px center; +} +.pagination-next { + background: url('images/pagination_icons.png') no-repeat -32px center; +} +.pagination-last { + background: url('images/pagination_icons.png') no-repeat -48px center; +} +.pagination-load { + background: url('images/pagination_icons.png') no-repeat -64px center; +} +.pagination-loading { + background: url('images/loading.gif') no-repeat center center; +} +.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: 12px; + width: 100%; + height: 100%; +} +.calendar table td, +.calendar table th { + font-size: 12px; +} +.calendar-noborder { + border: 0; +} +.calendar-header { + position: relative; + height: 22px; +} +.calendar-title { + text-align: center; + height: 22px; +} +.calendar-title span { + position: relative; + display: inline-block; + top: 2px; + padding: 0 3px; + height: 18px; + line-height: 18px; + font-size: 12px; + cursor: pointer; + -moz-border-radius: 5px 5px 5px 5px; + -webkit-border-radius: 5px 5px 5px 5px; + border-radius: 5px 5px 5px 5px; +} +.calendar-prevmonth, +.calendar-nextmonth, +.calendar-prevyear, +.calendar-nextyear { + position: absolute; + top: 50%; + margin-top: -7px; + width: 14px; + height: 14px; + cursor: pointer; + font-size: 1px; + -moz-border-radius: 5px 5px 5px 5px; + -webkit-border-radius: 5px 5px 5px 5px; + border-radius: 5px 5px 5px 5px; +} +.calendar-prevmonth { + left: 20px; + background: url('images/calendar_arrows.png') no-repeat -18px -2px; +} +.calendar-nextmonth { + right: 20px; + background: url('images/calendar_arrows.png') no-repeat -34px -2px; +} +.calendar-prevyear { + left: 3px; + background: url('images/calendar_arrows.png') no-repeat -1px -2px; +} +.calendar-nextyear { + right: 3px; + background: url('images/calendar_arrows.png') no-repeat -49px -2px; +} +.calendar-body { + position: relative; +} +.calendar-body th, +.calendar-body td { + text-align: center; +} +.calendar-day { + border: 0; + padding: 1px; + cursor: pointer; + -moz-border-radius: 5px 5px 5px 5px; + -webkit-border-radius: 5px 5px 5px 5px; + border-radius: 5px 5px 5px 5px; +} +.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: 12px; + display: none; + overflow: hidden; +} +.calendar-menu-year-inner { + text-align: center; + padding-bottom: 5px; +} +.calendar-menu-year { + width: 50px; + text-align: center; + border-width: 1px; + border-style: solid; + outline-style: none; + resize: none; + margin: 0; + padding: 2px; + font-weight: bold; + font-size: 12px; + -moz-border-radius: 5px 5px 5px 5px; + -webkit-border-radius: 5px 5px 5px 5px; + border-radius: 5px 5px 5px 5px; +} +.calendar-menu-prev, +.calendar-menu-next { + display: inline-block; + width: 21px; + height: 21px; + vertical-align: top; + cursor: pointer; + -moz-border-radius: 5px 5px 5px 5px; + -webkit-border-radius: 5px 5px 5px 5px; + border-radius: 5px 5px 5px 5px; +} +.calendar-menu-prev { + margin-right: 10px; + background: url('images/calendar_arrows.png') no-repeat 2px 2px; +} +.calendar-menu-next { + margin-left: 10px; + background: url('images/calendar_arrows.png') no-repeat -45px 2px; +} +.calendar-menu-month { + text-align: center; + cursor: pointer; + font-weight: bold; + -moz-border-radius: 5px 5px 5px 5px; + -webkit-border-radius: 5px 5px 5px 5px; + border-radius: 5px 5px 5px 5px; +} +.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: 2px 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; +} +.datebox-calendar-inner { + height: 180px; +} +.datebox-button { + padding: 0 5px; + text-align: center; +} +.datebox-button a { + line-height: 22px; + font-size: 12px; + 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 { + background-color: #f3f3f3; + display: inline-block; + overflow: hidden; + vertical-align: top; + margin: 0; + padding: 0; + opacity: 1.0; + filter: alpha(opacity=100); + width: 18px; +} +.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; +} +.spinner-arrow-hover { + background-color: #e2e2e2; + opacity: 1.0; + filter: alpha(opacity=100); +} +.spinner-arrow-up:hover, +.spinner-arrow-down:hover { + opacity: 1.0; + filter: alpha(opacity=100); + background-color: #e2e2e2; +} +.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; +} +.spinner-arrow-down { + background: url('images/spinner_arrows.png') no-repeat -15px center; +} +.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: 5px 5px 5px 5px; + -webkit-border-radius: 5px 5px 5px 5px; + border-radius: 5px 5px 5px 5px; + overflow: hidden; + position: relative; +} +.progressbar-text { + text-align: center; + position: absolute; +} +.progressbar-value { + position: relative; + overflow: hidden; + width: 0; + -moz-border-radius: 5px 0 0 5px; + -webkit-border-radius: 5px 0 0 5px; + border-radius: 5px 0 0 5px; +} +.progressbar { + border-color: #D3D3D3; +} +.progressbar-text { + color: #000000; + font-size: 12px; +} +.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: 12px; + 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: 12px; +} +.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: 5px 5px 5px 5px; + -webkit-border-radius: 5px 5px 5px 5px; + border-radius: 5px 5px 5px 5px; +} +.menu-item-disabled { + opacity: 0.5; + filter: alpha(opacity=50); + cursor: default; +} +.menu-text, +.menu-text span { + font-size: 12px; +} +.menu-shadow { + position: absolute; + -moz-border-radius: 5px 5px 5px 5px; + -webkit-border-radius: 5px 5px 5px 5px; + border-radius: 5px 5px 5px 5px; + background: #ccc; + -moz-box-shadow: 2px 2px 3px #cccccc; + -webkit-box-shadow: 2px 2px 3px #cccccc; + box-shadow: 2px 2px 3px #cccccc; + filter: progid:DXImageTransform.Microsoft.Blur(pixelRadius=2,MakeShadow=false,ShadowOpacity=0.2); +} +.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: 5px 5px 5px 5px; + -webkit-border-radius: 5px 5px 5px 5px; + border-radius: 5px 5px 5px 5px; +} +.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; +} +.messager-info { + background: url('images/messager_icons.png') no-repeat scroll 0 0; +} +.messager-question { + background: url('images/messager_icons.png') no-repeat scroll -32px 0; +} +.messager-warning { + background: url('images/messager_icons.png') no-repeat scroll -96px 0; +} +.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: 18px; + 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; + vertical-align: top; + overflow: hidden; +} +.tree-expanded { + background: url('images/tree_icons.png') no-repeat -18px 0px; +} +.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; +} +.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; +} +.tree-folder-open { + background: url('images/tree_icons.png') no-repeat -224px 0; +} +.tree-file { + background: url('images/tree_icons.png') no-repeat -240px 0; +} +.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; +} +.tree-title { + font-size: 12px; + display: inline-block; + text-decoration: none; + vertical-align: top; + white-space: nowrap; + padding: 0 2px; + height: 18px; + line-height: 18px; +} +.tree-node-proxy { + font-size: 12px; + 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: 12px; + line-height: 16px; + padding: 0 4px; + margin: 0; + width: 80px; + outline-style: none; + vertical-align: top; + 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-hidden { + display: none; +} +.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; + border-radius: 5px; + -moz-border-radius: 5px 5px 5px 5px; + -webkit-border-radius: 5px 5px 5px 5px; + border-radius: 5px 5px 5px 5px; +} +.tooltip-content { + font-size: 12px; +} +.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; + _border-color: tomato; + _filter: chroma(color=tomato); +} +.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: 5px 5px 5px 5px; + -webkit-border-radius: 5px 5px 5px 5px; + border-radius: 5px 5px 5px 5px; +} +.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: 12px; + -moz-border-radius: 5px 5px 5px 5px; + -webkit-border-radius: 5px 5px 5px 5px; + border-radius: 5px 5px 5px 5px; +} +.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; +} diff --git a/src/main/webapp/css/themes/gray/filebox.css b/src/main/webapp/css/themes/gray/filebox.css new file mode 100644 index 0000000..c6bac66 --- /dev/null +++ b/src/main/webapp/css/themes/gray/filebox.css @@ -0,0 +1,20 @@ +.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; +} diff --git a/src/main/webapp/css/themes/gray/images/accordion_arrows.png b/src/main/webapp/css/themes/gray/images/accordion_arrows.png new file mode 100644 index 0000000000000000000000000000000000000000..a0b8769cc5091d81760c7ed555ac3c3453febbfd GIT binary patch literal 125 zcmeAS@N?(olHy`uVBq!ia0vp^3P3Et!3HGD8EPYel#8c}V@SoVHq8x z8Mn?6aTf^k-V*tOYvn_ZO}fk5lvg|}E|PI9vs&aPwII@?XO4*juRBlIrj#un@>dub Yl7)&6CQe}74m6L!)78&qol`;+0Id=veEh?7!oT zn93bYIb9!43Wj)WNz0M)xYl!8U>3_OjRiss3@1j_Zvlb#iD~jUnsR3em#t_3WtUHqj%c^0} zFSrhZpjU$)YHUS-lsMx)nN8pghWK6h!524#*oXjC@NjHF9H1y2K%G?c=lr%4eY%ue zT+7R9Pld<2<$C}OAU0HZIJPqD0RA&Sip042zF(tA4uaUhZ>jL`*HN0POocjDIidNRbTZ#@zvW7@I c5>Ct23v;ttA1D3-v;Y7A07*qoM6N<$f&+eyE&u=k literal 0 HcmV?d00001 diff --git a/src/main/webapp/css/themes/gray/images/datebox_arrow.png b/src/main/webapp/css/themes/gray/images/datebox_arrow.png new file mode 100644 index 0000000000000000000000000000000000000000..783c83357fdf90a1c7c024358e1d768b5c09c135 GIT binary patch literal 626 zcmV-&0*(ENP)5OC%H;f`~O(q$Q#t2<^v$A>fbmv%e#dKTwK=Ku{5lS|}<-`a#7b zzTCOnnT>at)D}AMFuOZ5&%EqFN(lyumd$2ASF6=;nM~%2?gqc@U=#|4PqkX@EBo-9 z7pD#bO_RUa>*faM`8;MYfVi$JnB-zcBFc6gjl$d!bF98Q!!!(Z1_R~P?e!pt#6CHJ9S&n_n&@=9 z%GP;!@Co4c*at+6vNz7o(6en^Q1%qHrc;1)9IRaz-$@S$Z-qdC^ds3X0NvQH;KS)D z-dh&rW&@X;1cS(45z)J&BVt+tv&GMVJ%!EiW) zLBGZW)#Z+gl-Lih&?>X3SS-S#ujQ;9JRXmIB7X)8`d6ETj)D#Q2+$s|<_b7-B9Xvq zwNfqlEp%y3$uY`h{Y$(Gn5@}sqEsq95lpAkFO5dyBmP6^H-51G4J|rN2Ujt<`2YX_ M07*qoM6N<$fWs*_M~|PZK4f_B}P-f8$r|z#h zE+)9D_?OzcE{A)9cRCb`94D|RR5VOsbIEjx-=1{JpsQ;^Px3ZX?(@vc^nEOU2KU{_ gJ$cDa*@;a`BkgHpqSBTGpgR~mUHx3vIVCg!07Oqo9{>OV literal 0 HcmV?d00001 diff --git a/src/main/webapp/css/themes/gray/images/linkbutton_bg.png b/src/main/webapp/css/themes/gray/images/linkbutton_bg.png new file mode 100644 index 0000000000000000000000000000000000000000..fc66bd2cd24047b8377342365a1df3846327ecde GIT binary patch literal 1274 zcmVc6j2;SWMDuL>F^vlqEUI{oOgO!xNf*11TukM z6kTZ3V2qd3<~<$H&Lrt?SpXUxF5Zb^}(={r!EHE+$QMdH|XZ zSYbMyc0tQc3qbP$tG{U_Jyg>I(0srOscEGU?-T)4AzuS$_2J>6`+BJ50YDY<^>2vV z+uI880P2ui(hyHiPrK$)CkbHg=kD&V3^8pD z0v3QOB&8eT@87?rgaGPrb#+ySxU;jP=nkL`nZ_{0e*BD+1Tc5b&d$oLo}8R$90gF1 z^ij>~#>R%HIRNUB_kgpQ+Lg!80Gbb2saY8>1EBeUm7A3TegK*dSciv)Wqp0!h-3im z1+1f^qq4iZ+ZEMUS63~e0I+zh`2rwd0l@!F(!7sM%_`|&0+*B!z{1(u+A9BIU&~T- z2he=L>dmc7TLXZFkeTeCHMcE|qX51{z>0ZC=xGjss*FaXGOMX+dHf8Z8hL6ntGQ_z zF9V<&dwY9jh`D7czyqj4g3S=~)zFA!0980RI4DC*Ez1%L09D8%=OHF&S@Q*;3bRfe zeL2-ZzyeT(Av4`$>R3`j096>WH7BOELD3yR70%Dk%Mk4)1W=73OH{L_UgIc$YFu7k zmRaq`&NxK?Rk*skDzlhL4IV!OsLJ*Ab@{BRT^TO}pgQC6xO~R6G8o_oU?C)>`xlc2 zriH~zU-;g$PyPA_&X!OBSU6SIeB~eKNAhF&(fs&F|1n9<+Yj^2T+4Dj%UFjr zZ%rnX^7Qmn0ANwP308gILtaQfK0Z1j0Br`Wq<=~Ka+?BxW&>7kRtZ+q>C~wJXg6S` zW|cJ1%?d#C0V@Ue)T{uY>425ig?tTsczEc(0+M8_c7^t|!sm-1Nw(}#nnLr?FgGlc zY}ut0+w(d)Uk6FDWtY;*aCdjteIX>tmhA#o+8PqHNU~+SlrTfyKRaNHBx~Ch-FJ3& z%B(Y&NwStp{rH$6Yj{YqhR=Gk~Mtw_&K$#yeTBf z7JV~bCN(VwL$c|B^>Topn-X{+7;S!yV~2^ zBgv-iMkME}U;-COwrsbABDvwg!2wA&ZMWttf5^jTl5E*7V41=|@=Hu>NJ^O8(7b4p z&ChgC(LF5>Md#{+4LgS{%KA|H(Xv`l4P^KdiBKB*_;1&m|Q7!{|O$ k%vVK{T!hwqk^D0L0mO==@4IV9lK=n!07*qoM6N<$f|Ge;n*aa+ literal 0 HcmV?d00001 diff --git a/src/main/webapp/css/themes/gray/images/loading.gif b/src/main/webapp/css/themes/gray/images/loading.gif new file mode 100644 index 0000000000000000000000000000000000000000..68f01d04813c1f622810864a3aaa04b4a17ac8f9 GIT binary patch literal 1737 zcmaKsX;2e)7>CzDa{xjjy99|1A!tC(kfocDi)<1$AxHpOQ4k^l!Vx1W6x7<&|FYXU zqO4jEiU-!VR1p+Xj1?4-iuI_J;!&?!+ghg|JJad3U)pMGzcKxNeCM6tJnuX+uPvX@ zZY|=AHdxt2Xr2y*)5|c6#FSEuyJ+Y3Z&l z2hJWo`9;lJ$6wzSoW60tqkB|d$oiO*d-^85^ojn{*NR{MP*%{@H*#gihZ8BKyB68E z-MIbjgNNV0y5khpJ^Jv`51aR%={<4jhaVq5e*9D5+*hL)XCHn4{^d%hPu@?KpKbc=eN!D=XUjDmH#n{YHNS zHCX6BV)yn2CuTNujhN~V+`RKpyXO6^ht92eqhIIlQLfz6eeCnH_C7`NPNrw9ks366 z4xX9(`s~z=+1uX^ocZ$2_fBs=JihPfWYufOIuD&AU-@`>>qn~cy$1)T7CU!5z2(U8 z)9Kt9)l`f6?NU41j6XbXfR{OHwm|T4}&24tIf+!C-g~6cQfY2^n$?AT&ZW zgqm`}3-jS2NS6n=k;sr5Hv(Q%%n)qW0X|neWVBd;Ko}d(=u%?{O0-a>kSI}shOd9n z5top}%gUCf=>?tg;*;#7!^HOL3k$fMxd=O-6Y4@%u8LS)C1D_a?27R6^vcC+6tttL z)GmTahbyJB!xmcHL#ya8ZXyfRl)a!N0BJE0y3BBfAV5;#=K&Z2VkaKZ)?9`1h5P_% znt*b}%j1|#j`b|aQDx@~wA#$PYRN2xE6UO;;vE(@$&xww-s8fZ5HmJ(eJ*rQrDbaawDbrfe_8F(wq{ge?)qQG`aXV;r(*6EM|ESje;52aFmrX!f=Pw^2oGQX$1|o4yts|b_5@w_kNwtl{wDP#JGMvIp#!SYX?Wq9S&`&_ZwkgGH5CLB7DEGJ6=R4J~p3Z4i^A}hs=-uZeD zs92l6u@**R$~L()G{5N8*7cE5-q$SCo`q4|NSVF*+A7&xZnypm$EdXgf)E%(VJHFD zSgi(H!D!(;9Zcc#GrCCJh=RlvXBQ-hv4Vodse`a32ZUFWgP5ZhM5LeV(#D^H8p@Lg ztra5R32z@1rQv{6u&RZL5%Z@Ye{q|t#6aM_1hIrpl@)oH6}os*cbAQywa{5<`ekzW O1il%9bk82&KlvLjD^%40 literal 0 HcmV?d00001 diff --git a/src/main/webapp/css/themes/gray/images/menu_arrows.png b/src/main/webapp/css/themes/gray/images/menu_arrows.png new file mode 100644 index 0000000000000000000000000000000000000000..b986842e7e4044caed18edbcb4b376a4bb915623 GIT binary patch literal 160 zcmeAS@N?(olHy`uVBq!ia0vp^4nQox!3HFkJ+IURQt6&9jv*Dd-cB{-J7B=U{PTZ! zWrKV9%Z3|Wt5t$(gq+#d+-OocB$0fsr9DfRx52vPhSu$$+yXuy+69hDZ54DDTxx#r zL7>-12UT01v)>tZ+;HI4pDNf?@KK~EC$@35ykmXyu^HJF3})N>8P9Uwo&~g$!PC{x JWt~$(697!FIeGv9 literal 0 HcmV?d00001 diff --git a/src/main/webapp/css/themes/gray/images/messager_icons.png b/src/main/webapp/css/themes/gray/images/messager_icons.png new file mode 100644 index 0000000000000000000000000000000000000000..62c18c135860351063ebaabe8c0f4df7664b8f65 GIT binary patch literal 6116 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 literal 0 HcmV?d00001 diff --git a/src/main/webapp/css/themes/gray/images/passwordbox_open.png b/src/main/webapp/css/themes/gray/images/passwordbox_open.png new file mode 100644 index 0000000000000000000000000000000000000000..0f25d535e05b22b406fd72647611aace9cfa6249 GIT binary patch literal 160 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`>7Fi*Ar-fh6C~yxIB_Cl)5eV- z>r;4yl-<@d?s6;P338s2rmQ?!Qz1HW#so#C46Xx7Cq5}K`Svo!h;^q;DRB5^Z?=`` zg<12Qetm(ByO<;&a5^L{7TnL>!KiVsAxlibJl4>NC!c|#Jtt+3rSZgWpp^`su6{1- HoD!M<3i~r2 literal 0 HcmV?d00001 diff --git a/src/main/webapp/css/themes/gray/images/searchbox_button.png b/src/main/webapp/css/themes/gray/images/searchbox_button.png new file mode 100644 index 0000000000000000000000000000000000000000..6dd1931589b453f6cc9772fd1851d8705d6b6631 GIT binary patch literal 813 zcmV+|1JeA7P)lXvaa)1B=8vtU6i;3jw7+Lm8D5$Z@i10EnF)=bcefw4K z$^E-CUfjQG`svfBbfD6|R#sLFj6lo3FG$G6@;ee>>~6i|H^5OY8c00W#fi<*1vzh{0&qu3dB`V0{{XDY`}(1n>S9M(9!zw#!&`A z#;*+0{6GVMSeWGp!`o{o8NPge#o%jgs54WT$qnQYpsyGNpauX05F;oJfZ`Pdw6!$j zynTH0RMa&!n3$Pa9zVGEY{&L(3qnPBl_DG6<9Xk0`Fl3`LiD4@pH{vDsxJWQ1qdJp zEJ>M}osCtQlY?CgW>F{;gVK#SmgoOZnEn5J%EtIXaWQXAO>Rdf)WFR;gt~f zXaA3z{{L{q=l48y!32yJ3i0hJ2BS=^}@sXzH{F9Iq&OW375;I7CG-}Vr|aF#l<(fySwu2>`YdxRW*W0f#2un=W5Jmvoe`XCK%I_Y++#`fwE+= zSd{sEULGDE%A=#BOW<6gP*6VfMa^fr8qe`5w%)P0a^Y9WGTw! zvI^|$>l@1Da^Ke1*T3RdY7KqM%gaBb(P+oP!GW;b?ZRfW3Bxc1H@GCaHK#XhZ*Lc= zRBC@>V&W#x&B5%(#>OW5`};d6I5Qw218EG_q@1gtr!Nl*v7yn?(MPMRt4SNy%--JK zanm#f^bw^}Nr7b(EUg}TUi(2;)deX10lAo=83+VA(QksJI6(zwptET-y~avN=J9w$ zI2`W5lG|aOkjY7(&!@;Jx*nUA>~J`Q)9L&(G8y=g$3a4YgD7z)5>gXQNKhw=uR0zF z#jHruh)gDv=bj|2ZES4(fEM?I!JyKqo=}sj-fBYTcDt4KXq)eFQH}wW`vh%Mla}#@ z@Mb`C)x@YkK{xd2>8ZLg+E!Lps$Q@6DY-~!0=Gs+Mm~_JnW1EbX2uxClEdN>Y@I78 z=ke_9?7sX@o0*x}M{JB77MIXj_MmNE%+1Xe{*{crh)9={dR(U;y-{jrxUXmG%Gt002ovPDHLkV1hy(sXhPz literal 0 HcmV?d00001 diff --git a/src/main/webapp/css/themes/gray/images/spinner_arrows.png b/src/main/webapp/css/themes/gray/images/spinner_arrows.png new file mode 100644 index 0000000000000000000000000000000000000000..b1773c24b20b30318e38c4b84690e3d0010c9c43 GIT binary patch literal 149 zcmeAS@N?(olHy`uVBq!ia0vp^4nQox!3HFkJ+IURQZb$`jv*Ddk`p9Y7bl4DgeBzU z{E=^QXHHmRmEiEUJ<_jB`NK-}t7{l}8A{FvOK}{T)p$BC>8|6-x-MIXOa{IRh5%#E x$&;(vVs#x>vb(K5c#%QkA)^788{=C>2L8QE5AM%P*8@KmF984m literal 0 HcmV?d00001 diff --git a/src/main/webapp/css/themes/gray/images/tabs_icons.png b/src/main/webapp/css/themes/gray/images/tabs_icons.png new file mode 100644 index 0000000000000000000000000000000000000000..dfa10f7d78b3dc6965ef86957a0e4345ec000bc6 GIT binary patch literal 144 zcmeAS@N?(olHy`uVBq!ia0vp^20$#p!3HD)*8SNCq{2O2978H@B_~L*E^a70aO1`g zdpoacw*Y(&nwsF2UyID`n8m&$nZ<^krzppre_*0C6=+@buQ_y%c^L~IL^<_ t&+}8oM91jk1`W4%S64GGH^xE+hOnLmClB8dn+LRl!PC{xWt~$(69Df$H1z-g literal 0 HcmV?d00001 diff --git a/src/main/webapp/css/themes/gray/images/tagbox_icons.png b/src/main/webapp/css/themes/gray/images/tagbox_icons.png new file mode 100644 index 0000000000000000000000000000000000000000..8ec64360884b3fdb81255ad6074bc08ed183232c GIT binary patch literal 133 zcmeAS@N?(olHy`uVBq!ia0vp^3P3Et!3HGD8EPYel#i#2V@SoVtb9vwNkrdSr%AfUpK=5(o}_e|{SG6u6f5&Q g4t5*qz9vC-hN^}472i&@1{u%b>FVdQ&MBb@08Zm4@c;k- literal 0 HcmV?d00001 diff --git a/src/main/webapp/css/themes/gray/images/tree_icons.png b/src/main/webapp/css/themes/gray/images/tree_icons.png new file mode 100644 index 0000000000000000000000000000000000000000..e9be4f3a9965e49a4e4078f8c53f486d761a7468 GIT binary patch literal 3115 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 literal 0 HcmV?d00001 diff --git a/src/main/webapp/css/themes/gray/images/validatebox_warning.png b/src/main/webapp/css/themes/gray/images/validatebox_warning.png new file mode 100644 index 0000000000000000000000000000000000000000..2b3d4f05babf3f82b146350e96570fac02075de0 GIT binary patch literal 921 zcmV;K17`e*P)nRv1_mBsMY*-M^XCf)eflW5 z|MC^)Hw+AW{sHCCF+cz@{fF8J!+#-kxoSv=7^|!zgOQUngSQ}mDo|J)n+pH}hzZ#= zr~y18$_m-?9v%$;?mu8);}>9vFgFvDXJDwrW&l6{p}625M66yTFhGz^K$w9^O$BHi zFN2Ym7DIple*#cW4BY^L0Al(Jbv6k9U|^6IQBp{hx3XdQ&CJ4Z_|YSVr@XujY(PVT zlok1<85nBO4FCurumK>O|A07*jFlSRUcxLAQVcIR*co#3@)&jj4Pj7KXRri%#h;fa z4ya5O*#Lk5Vq!q}T~=CGH(uV-hJk^fkAYoGjN#AMuMF($>N=giWG}IXse|=+c=i>7HEg>%*E%fLD!-uy|85n^6W?^Dt(9zXp5EB&z+w>_knBmdiKMbzi z?A!`WOl>e100a=&05*1xZdFls?*HtZ48H?o7=HW%ivIu45E2~BASWx!@DIpmv9e}h zaPwji|L}pqor@y`=yxrU0RRES^qYY}O;TRcU+DKIhL4`%3_nyf8U6tS<<-ZJ40D$( zWjJ%`G6NIPHNP2{7am*Fp% z{>ShK#0G`~kjd~57_BU.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; +} +.panel-hleft>.panel-header .panel-title, +.panel-hright>.panel-header .panel-title { + position: absolute; + min-width: 16px; + left: 21px; + 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: 5px; + 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; +} diff --git a/src/main/webapp/css/themes/gray/passwordbox.css b/src/main/webapp/css/themes/gray/passwordbox.css new file mode 100644 index 0000000..92c9ce5 --- /dev/null +++ b/src/main/webapp/css/themes/gray/passwordbox.css @@ -0,0 +1,6 @@ +.passwordbox-open { + background: url('images/passwordbox_open.png') no-repeat center center; +} +.passwordbox-close { + background: url('images/passwordbox_close.png') no-repeat center center; +} diff --git a/src/main/webapp/css/themes/gray/progressbar.css b/src/main/webapp/css/themes/gray/progressbar.css new file mode 100644 index 0000000..93818e3 --- /dev/null +++ b/src/main/webapp/css/themes/gray/progressbar.css @@ -0,0 +1,32 @@ +.progressbar { + border-width: 1px; + border-style: solid; + -moz-border-radius: 5px 5px 5px 5px; + -webkit-border-radius: 5px 5px 5px 5px; + border-radius: 5px 5px 5px 5px; + overflow: hidden; + position: relative; +} +.progressbar-text { + text-align: center; + position: absolute; +} +.progressbar-value { + position: relative; + overflow: hidden; + width: 0; + -moz-border-radius: 5px 0 0 5px; + -webkit-border-radius: 5px 0 0 5px; + border-radius: 5px 0 0 5px; +} +.progressbar { + border-color: #D3D3D3; +} +.progressbar-text { + color: #000000; + font-size: 12px; +} +.progressbar-value .progressbar-text { + background-color: #0092DC; + color: #fff; +} diff --git a/src/main/webapp/css/themes/gray/propertygrid.css b/src/main/webapp/css/themes/gray/propertygrid.css new file mode 100644 index 0000000..90e4520 --- /dev/null +++ b/src/main/webapp/css/themes/gray/propertygrid.css @@ -0,0 +1,28 @@ +.propertygrid .datagrid-view1 .datagrid-body td { + padding-bottom: 1px; + border-width: 0 1px 0 0; +} +.propertygrid .datagrid-group { + height: 21px; + 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; +} diff --git a/src/main/webapp/css/themes/gray/searchbox.css b/src/main/webapp/css/themes/gray/searchbox.css new file mode 100644 index 0000000..7b15815 --- /dev/null +++ b/src/main/webapp/css/themes/gray/searchbox.css @@ -0,0 +1,61 @@ +.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); +} diff --git a/src/main/webapp/css/themes/gray/slider.css b/src/main/webapp/css/themes/gray/slider.css new file mode 100644 index 0000000..b163812 --- /dev/null +++ b/src/main/webapp/css/themes/gray/slider.css @@ -0,0 +1,101 @@ +.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: 12px; + 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: 12px; +} +.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; +} diff --git a/src/main/webapp/css/themes/gray/spinner.css b/src/main/webapp/css/themes/gray/spinner.css new file mode 100644 index 0000000..a61944d --- /dev/null +++ b/src/main/webapp/css/themes/gray/spinner.css @@ -0,0 +1,58 @@ +.spinner-arrow { + background-color: #f3f3f3; + display: inline-block; + overflow: hidden; + vertical-align: top; + margin: 0; + padding: 0; + opacity: 1.0; + filter: alpha(opacity=100); + width: 18px; +} +.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; +} +.spinner-arrow-hover { + background-color: #e2e2e2; + opacity: 1.0; + filter: alpha(opacity=100); +} +.spinner-arrow-up:hover, +.spinner-arrow-down:hover { + opacity: 1.0; + filter: alpha(opacity=100); + background-color: #e2e2e2; +} +.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; +} +.spinner-arrow-down { + background: url('images/spinner_arrows.png') no-repeat -15px center; +} +.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; +} diff --git a/src/main/webapp/css/themes/gray/splitbutton.css b/src/main/webapp/css/themes/gray/splitbutton.css new file mode 100644 index 0000000..bb2b6da --- /dev/null +++ b/src/main/webapp/css/themes/gray/splitbutton.css @@ -0,0 +1,12 @@ +.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; +} diff --git a/src/main/webapp/css/themes/gray/switchbutton.css b/src/main/webapp/css/themes/gray/switchbutton.css new file mode 100644 index 0000000..a33305c --- /dev/null +++ b/src/main/webapp/css/themes/gray/switchbutton.css @@ -0,0 +1,77 @@ +.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: 5px 5px 5px 5px; + -webkit-border-radius: 5px 5px 5px 5px; + border-radius: 5px 5px 5px 5px; +} +.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: 12px; + -moz-border-radius: 5px 5px 5px 5px; + -webkit-border-radius: 5px 5px 5px 5px; + border-radius: 5px 5px 5px 5px; +} +.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; +} diff --git a/src/main/webapp/css/themes/gray/tabs.css b/src/main/webapp/css/themes/gray/tabs.css new file mode 100644 index 0000000..bbdd989 --- /dev/null +++ b/src/main/webapp/css/themes/gray/tabs.css @@ -0,0 +1,413 @@ +.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 a.tabs-inner { + display: inline-block; + text-decoration: none; + 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 a.tabs-inner { + font-weight: bold; + outline: none; +} +.tabs li.tabs-selected a:hover.tabs-inner { + 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: 12px; +} +.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 a.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 a.tabs-inner { + padding-left: 0; + padding-right: 0; +} +.tabs-header-left .tabs li a.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 a.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 a.tabs-inner { + -moz-border-radius: 5px 5px 5px 5px; + -webkit-border-radius: 5px 5px 5px 5px; + border-radius: 5px 5px 5px 5px; +} +.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 a.tabs-inner:hover { + background: #e2e2e2; + color: #000000; + filter: none; +} +.tabs li.tabs-selected a.tabs-inner { + background-color: #ffffff; + color: #575765; + background: -webkit-linear-gradient(top,#F8F8F8 0,#ffffff 100%); + background: -moz-linear-gradient(top,#F8F8F8 0,#ffffff 100%); + background: -o-linear-gradient(top,#F8F8F8 0,#ffffff 100%); + background: linear-gradient(to bottom,#F8F8F8 0,#ffffff 100%); + background-repeat: repeat-x; + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr=#F8F8F8,endColorstr=#ffffff,GradientType=0); +} +.tabs-header-bottom .tabs li.tabs-selected a.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: progid:DXImageTransform.Microsoft.gradient(startColorstr=#ffffff,endColorstr=#F8F8F8,GradientType=0); +} +.tabs-header-left .tabs li.tabs-selected a.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: progid:DXImageTransform.Microsoft.gradient(startColorstr=#F8F8F8,endColorstr=#ffffff,GradientType=1); +} +.tabs-header-right .tabs li.tabs-selected a.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: progid:DXImageTransform.Microsoft.gradient(startColorstr=#ffffff,endColorstr=#F8F8F8,GradientType=1); +} +.tabs li a.tabs-inner { + color: #575765; + background-color: #f3f3f3; + background: -webkit-linear-gradient(top,#F8F8F8 0,#eeeeee 100%); + background: -moz-linear-gradient(top,#F8F8F8 0,#eeeeee 100%); + background: -o-linear-gradient(top,#F8F8F8 0,#eeeeee 100%); + background: linear-gradient(to bottom,#F8F8F8 0,#eeeeee 100%); + background-repeat: repeat-x; + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr=#F8F8F8,endColorstr=#eeeeee,GradientType=0); +} +.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 a.tabs-inner, +.tabs li.tabs-selected a.tabs-inner, +.tabs-header-bottom .tabs li.tabs-selected a.tabs-inner, +.tabs-header-left .tabs li.tabs-selected a.tabs-inner, +.tabs-header-right .tabs li.tabs-selected a.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 a.tabs-inner { + border-bottom: 1px solid #ffffff; +} +.tabs-header-bottom .tabs li.tabs-selected a.tabs-inner { + border-top: 1px solid #ffffff; +} +.tabs-header-left .tabs li.tabs-selected a.tabs-inner { + border-right: 1px solid #ffffff; +} +.tabs-header-right .tabs li.tabs-selected a.tabs-inner { + border-left: 1px solid #ffffff; +} +.tabs-header .tabs-pill li.tabs-selected a.tabs-inner { + background: #0092DC; + color: #fff; + filter: none; + border-color: #D3D3D3; +} diff --git a/src/main/webapp/css/themes/gray/tagbox.css b/src/main/webapp/css/themes/gray/tagbox.css new file mode 100644 index 0000000..46cbd33 --- /dev/null +++ b/src/main/webapp/css/themes/gray/tagbox.css @@ -0,0 +1,44 @@ +.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: 5px 5px 5px 5px; + -webkit-border-radius: 5px 5px 5px 5px; + border-radius: 5px 5px 5px 5px; + 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); +} diff --git a/src/main/webapp/css/themes/gray/textbox.css b/src/main/webapp/css/themes/gray/textbox.css new file mode 100644 index 0000000..d86f4b3 --- /dev/null +++ b/src/main/webapp/css/themes/gray/textbox.css @@ -0,0 +1,139 @@ +.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: 5px 5px 5px 5px; + -webkit-border-radius: 5px 5px 5px 5px; + border-radius: 5px 5px 5px 5px; +} +.textbox .textbox-text { + font-size: 12px; + border: 0; + margin: 0; + padding: 4px; + white-space: normal; + vertical-align: top; + outline-style: none; + resize: none; + -moz-border-radius: 5px 5px 5px 5px; + -webkit-border-radius: 5px 5px 5px 5px; + border-radius: 5px 5px 5px 5px; +} +.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: 22px; + line-height: 22px; + 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; +} diff --git a/src/main/webapp/css/themes/gray/tooltip.css b/src/main/webapp/css/themes/gray/tooltip.css new file mode 100644 index 0000000..e2ba0c5 --- /dev/null +++ b/src/main/webapp/css/themes/gray/tooltip.css @@ -0,0 +1,103 @@ +.tooltip { + position: absolute; + display: none; + z-index: 9900000; + outline: none; + opacity: 1; + filter: alpha(opacity=100); + padding: 5px; + border-width: 1px; + border-style: solid; + border-radius: 5px; + -moz-border-radius: 5px 5px 5px 5px; + -webkit-border-radius: 5px 5px 5px 5px; + border-radius: 5px 5px 5px 5px; +} +.tooltip-content { + font-size: 12px; +} +.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; + _border-color: tomato; + _filter: chroma(color=tomato); +} +.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; +} diff --git a/src/main/webapp/css/themes/gray/tree.css b/src/main/webapp/css/themes/gray/tree.css new file mode 100644 index 0000000..a39504f --- /dev/null +++ b/src/main/webapp/css/themes/gray/tree.css @@ -0,0 +1,161 @@ +.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: 18px; + 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; + vertical-align: top; + overflow: hidden; +} +.tree-expanded { + background: url('images/tree_icons.png') no-repeat -18px 0px; +} +.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; +} +.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; +} +.tree-folder-open { + background: url('images/tree_icons.png') no-repeat -224px 0; +} +.tree-file { + background: url('images/tree_icons.png') no-repeat -240px 0; +} +.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; +} +.tree-title { + font-size: 12px; + display: inline-block; + text-decoration: none; + vertical-align: top; + white-space: nowrap; + padding: 0 2px; + height: 18px; + line-height: 18px; +} +.tree-node-proxy { + font-size: 12px; + 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: 12px; + line-height: 16px; + padding: 0 4px; + margin: 0; + width: 80px; + outline-style: none; + vertical-align: top; + 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-hidden { + display: none; +} diff --git a/src/main/webapp/css/themes/gray/validatebox.css b/src/main/webapp/css/themes/gray/validatebox.css new file mode 100644 index 0000000..1fc3ad6 --- /dev/null +++ b/src/main/webapp/css/themes/gray/validatebox.css @@ -0,0 +1,5 @@ +.validatebox-invalid { + border-color: #ffa8a8; + background-color: #fff3f3; + color: #000; +} diff --git a/src/main/webapp/css/themes/gray/window.css b/src/main/webapp/css/themes/gray/window.css new file mode 100644 index 0000000..bd69fdb --- /dev/null +++ b/src/main/webapp/css/themes/gray/window.css @@ -0,0 +1,183 @@ +.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: 5px 5px 5px 5px; + -webkit-border-radius: 5px 5px 5px 5px; + border-radius: 5px 5px 5px 5px; +} +.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: progid:DXImageTransform.Microsoft.Blur(pixelRadius=2,MakeShadow=false,ShadowOpacity=0.2); +} +.window, +.window .window-body { + border-color: #D3D3D3; +} +.window { + background-color: #f3f3f3; + background: -webkit-linear-gradient(top,#F8F8F8 0,#eeeeee 20%); + background: -moz-linear-gradient(top,#F8F8F8 0,#eeeeee 20%); + background: -o-linear-gradient(top,#F8F8F8 0,#eeeeee 20%); + background: linear-gradient(to bottom,#F8F8F8 0,#eeeeee 20%); + background-repeat: repeat-x; + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr=#F8F8F8,endColorstr=#eeeeee,GradientType=0); +} +.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-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; +} diff --git a/src/main/webapp/css/themes/icon.css b/src/main/webapp/css/themes/icon.css new file mode 100644 index 0000000..c2d3b21 --- /dev/null +++ b/src/main/webapp/css/themes/icon.css @@ -0,0 +1,96 @@ +.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; +} diff --git a/src/main/webapp/css/themes/icons/back.png b/src/main/webapp/css/themes/icons/back.png new file mode 100644 index 0000000000000000000000000000000000000000..3fe8b178ec9eb9fdbfefe0f2c81c8d4acf0dc275 GIT binary patch literal 912 zcmV;B18@9^P)DPbufGfoO#dy!l?7(~R{rJuB|Ic3( zr2qlMf}#2UUndb!-U*#ucDjkNIt+}=Obow%{r$o4^UqfXE*6k;foc%S0Rjlgfd4?5 zf5px&s!cN{J9F|ViZCp>{+}U8Tk|V?U_iPMphZz_IS$;9h@%hJaXH%3`;KjXZQ*9FFVV3hN%aCGjMUR1HHn+ z@a^MI26o0j4AJ(Y49b$+;J^R~Ag}?Z#!~g|?RE?+ZZR?}IQyT0vRH6Gfp6#Aq|XXnD!yol{GeUeEH15z{&iNK}>*+ff=Ho0U&_D2K@WS)Y#U3 zL<*QjlG@v>7^K*LF;uO1$H33~kD)O@mf_`_pA4@*{$OBc;sM6se}=oyzcD<1{hb-4 z7a)M3fynfS;s3w1j*cU*?%aD#}SqhQ+&{GkpB3~WDG86SXj0t66JI$#2Z>i^0$tFE0td*)?Zf4{AAccL7__n-e5zW@IF`Rlho zISk)^-(&#U%K~&i4@4_K0AWeW%&YF-``{WFx_xe1-VuhUFTXRebF#1lJi_@W|M}sAhw_srY>W~TKsPfouoxLJNIief_Uq!sAfaEsA{^Y@xOjmE zgETUH_`vZ0)G3BDOP2h+bm&kaKmak@u(Mx&^y$-mrq{2%AP9OrSt~`cWMBe}Df@WdXVtAb^-{fqrKM zhBm{WKbK$p{CV}~>(@b&Z{ISrfec|{VqpC9hvEOnj||^|n$Pav|M&czJ4yfk{hPxK ziXor@00G3p|Me>aP=MhdQ1O2@wh#Zfxc+?xI`hkm7YtzU0Ks3N8c+cLWnuXTwCn>L zPz;1Y=>#Bvm|a;}8UBK7;o$HwmX%#&_3Ev z8Du=HOuX z4|L&Apeyv`#@8bfBxE!U^>5?3)J&j7~IN0z^T7prh^aQ_9m=nqi-_p@gVCMG7_z;K%h5I{^nzkYr61?WsB zppBr|;1UpEcqk91j^EtPTT1|U8QuVY?eYHqKSSK zP3o7x#7F%IgmygBVw*mDl7H^Z{OA78x#wJf^N>g+(A}*)`QG z5RTB`_EMce+Rq7v1K^?@u()CXf6xoz7!8!yDW$`H4viiQVXJBa++G(roc6hNHhJa` zc)tgNK1C=T#LYg4#zR25R*jil>eLtT{GdaAuGwmA2T&d-c>V5!!d9NyEp9Qmxe|`j ziex$g4vI7tOS{$FMw-cFlc$u|)oH@xv;lB4TdF3p9zS6L`{g|*5)D-xF1xRMSgLOC z7MSARP8Hv+kyxnx2--m{*z6VvMS>8Zy#!`G*)JEFkDm^i! z57&EQSe~y>rx{P4Jq8WqI_>n@dK|C^u()ifPp27dDGN*U z^*)3m0U({Lwv9rzno6%R=}dwtY~>hiY=vzs3$T+mn9{vzjZvdfBXyxZ39Q1lxt*_O za!Cf)+FBy^2Uli$r+^So1&^UvC9Uv!asn@3M*|?0O5yp7r!a4LH=D=I>FhdY&DZp^ zI_lx02LqV>=f-B1VTE_&n|?;e8M}28xLj@nAnp)D|3JTRN;i4Tjw+i=)$ZND8$(OU zO0JNPx!jIl*?fw5pNO9Is(T6ipVtD2MW9ltL~^<8_V~oBFC(MFPBbrJi4vhmDCP_J z3YkoHXME!2*U=lJE*_6}vFCCRm&4&S04zz3eYkpUkW2Ite1g#M`uYfvc1r7BSCpMy$Yx?I literal 0 HcmV?d00001 diff --git a/src/main/webapp/css/themes/icons/cut.png b/src/main/webapp/css/themes/icons/cut.png new file mode 100644 index 0000000000000000000000000000000000000000..21fdb4dc3c8ee79a0ce59a981c336538bb334442 GIT binary patch literal 1024 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 Y07EoBQ)jr0B>(^b07*qoM6N<$g57L=!vFvP literal 0 HcmV?d00001 diff --git a/src/main/webapp/css/themes/icons/filter.png b/src/main/webapp/css/themes/icons/filter.png new file mode 100644 index 0000000000000000000000000000000000000000..1fedf7ae66f9512c8991a91f606e33926210dfd1 GIT binary patch literal 305 zcmV-10nYx3P)i;JxOiC&m|MyN^@V~Zu%6~m0)Bj`zY(-tqe_OBM|76EZZDa3$M~@)# z4XCPX|L^4POMwARE&rW8d?@fjbNzpNXSe?h!y5nqPb`Zh>Gjmx00000NkvXXu0mjf D9Yd^C literal 0 HcmV?d00001 diff --git a/src/main/webapp/css/themes/icons/help.png b/src/main/webapp/css/themes/icons/help.png new file mode 100644 index 0000000000000000000000000000000000000000..28a0f9e5e6a24fe2cc3d842d0708e70512dbf84b GIT binary patch literal 1187 zcmXX`YfMuI6h6Hzx2+Ut1EjYq1A-3cSfq4{Is$g`oXj!QjiG^7TiBdhXGlOZxm1@9 zS*DOla3bRT0cHN_rJ;^5DgN)q2ZN z|EAt&1z&5w`m%mvX&4t+@c4Ki)zj^n9Qtq}u-Kkgm|S+sG2Fc6RK?X36?YJhP0dA}?VOU?JP&>G6klO2uGz08Gy=gKR?}h(b{K&aenodIzi% z2f@MJp01+RY|(6BJziiDpcm1+C)f4BSg6zCdpJmKRiimi){G4(q} z1^PxxRYp%IvSXi?q6Z{WU1=c||G9fvjNOV8M5eGC9+9=$-Km*DQ5AV*WII_(dnpARZKp%77uh;KZ$z~72R!)*N`!~x=0M8DAMel@xO((;7NkGYln^j z>m@53+D`)q@q?T2z|AfKr0Wq7@&V%3vEWE%IJj2*@I~|AQ1|l-SXw1vg>V7oa|8I- z0PP3HCDVWP3>La6dZtL>>2W$NTXeTeE3}I*#OEs`#HLvXE;&}!k}!JOU8}8G*^*;= zPjSv0_%M5yo+6j0Lw14m9`2dn-mf1NjIPg)Vw7)%a0o9zj^>|q#+Vv13MJSTT;}7h z4Zfq*P7G=k-K=j!InVUNj9wh!)4I~ern6^GUXtfu4!SZ`QB}@5t|WV`n%8=*ErSn) zGjYM$*~Vxc9q@=I`#Q~!`<=w&Se+$ud=Pk1O*Brwau1*M?WFKRth>8iTZJdIQgn~v zCzI($b7!BT>3&ZqyhH4&mz1-ow|8KFVjY;l(ti5lghhYge-hacl;-uimIqemZ0Qjj zBEs2%Kv-FHfq7&Jo><&)%Bjgdi{^SdvbB+` z{s9&)87BY$ literal 0 HcmV?d00001 diff --git a/src/main/webapp/css/themes/icons/large_chart.png b/src/main/webapp/css/themes/icons/large_chart.png new file mode 100644 index 0000000000000000000000000000000000000000..527608ee94683724de57fac1ed7593714ac41be4 GIT binary patch literal 1669 zcmV;027394P)OoL=dNpfT{jDe$P=9Ivhqz^iKm@S3IrUXvM(0iptmQ@N;^Xr`2l z>4!e;MtyMJ3@@+P z*cta0P;qWNgQ5t%kIIj;1wLh)>WhuhRMihnmHnENfO~VPJZBe!rXUHBxK2!dnjp`y z(`>y!X!;Ed4J}m4t$ZUqDz_on(tKFP<=Z=Rs60EC!Cg-WdZizNtwDlZX0M^Vz;da) zRk?SP0@rg5(0I-o4d?oDoM&fiyuRg4U;@stq2@8HW2l!$}hO{43f| zkRR=*CN3~#OC`C|Iv#~EN98>g3S3CjgZzXU!JJQyrc1M^d~XB;xx@+$vxiXb(Hu;2 zFkVG15abzF9mEABn@ce}UQW15nZ?ctSFs`YA(b2XNb$S02Wm1+P?Kd!R)b`wDdkb6 zCzU6LGN^U6z@3>6xI=D6HtT0{`DdiBAW!S7q=4(sCGh;Unj`KKp_&pQYoKyNuN0h3 z>4uAkjZtyfh~o%1H-B;Tyx`6PO>T7N03V` zRm26HLyu!xbTQ#9Pcfzv)@CTEytl`8oQ&&CR-qS4QuImc^K&oUE}l;1F@X$9N9*IV zt0kqDPnO3&c?t4VOC>Ad6r2G`;c zZL$jAAUCcD$!6rIrcrt1d7v}p0A*tdPKG=NXjthX$oHBn*@BUalQ2H`5S$6` z=j!BAD(~+66VldeLAJFU$F}YQwYk%%Jlu!D>47@<&9NuWwLl;BLGFS)*|eRw!0-ie za0*Js*mo@Da%Dm>mFtdK4rzo2jz;S?v#Be|uBeu|QF-WW1}FM!qG)(`6n)FmjZ1QT zD{!hH-)-`>xWHha&2U__1EVQB;porJD|X~jx$a1R>xdQ@kmMRh^?hR)nfvf`+O z%7Z-_$ZXV*Kcq8G59xyZ!8~ME1WXp>iN;C_IDEeWBj(2tw(!JIf?{P<-f74@B!zT< zbe#^N6Q4RbKqyO}MCB`HFgRwVijxkV$WJf1UsxQp=`3I5BFGbr+K3C-O%KIT?T?T-@#dA#9Q z;sUmAt1xJ0IEN>jVHikqadaA$YuV30+)`ES3DG2Ik=5Xmr9?W3%2^JXwn3&%2M%i% zH8QK=vahos-)X311*~0{V8FCs!YV!q?!oZixSz_^ZQSt75)~w@)IcI3VHJxeJuXgl z5elRlllOu?D&(=NLi0!;Rg$Wxo;OaAr}+IKF3`u>4|bBJu$#P;roAMHWDxu!_E7ma z?={#K&<>Oq`+Z|wn+bg3ZL(&JZbVMWEEBYkyTWk)Z(So z!f8HiUHo|hg!B!M$GACb=$E$mwIkcmQAGak2~^IWlW0V?!K{sl3*KXpx^l@oc}8YI z#pD*RYzcN>l)?XzF!)U82=c!Hwib{lHNGh0 P00000NkvXXu0mjf#2YXZ literal 0 HcmV?d00001 diff --git a/src/main/webapp/css/themes/icons/large_clipart.png b/src/main/webapp/css/themes/icons/large_clipart.png new file mode 100644 index 0000000000000000000000000000000000000000..9c9c44002b6f76fcddea75aad020f5f58e91d10f GIT binary patch literal 1727 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 N002ovPDHLkV1luY1RVeX literal 0 HcmV?d00001 diff --git a/src/main/webapp/css/themes/icons/large_shapes.png b/src/main/webapp/css/themes/icons/large_shapes.png new file mode 100644 index 0000000000000000000000000000000000000000..90a0dcacd8d8b851262102fbbd9f99e23404da11 GIT binary patch literal 1318 zcmV+>1=;$EP)9s!&kf1?`{(nr_nL4ijp z@Q59_AEy-e%+o#ZJ=sso=F5O#0npiiBF!K&3p5uYxXhffFJlfWXEo!=YI0RFHj|7W z&H(1NBtX7zVpRehUIYfo{O?&edZ&-@i=qNGe+_v<@V;`X*;FshvcF;T88V-8p>5(AZNn>gl#-9;-jVL6Zqt{a0Jynq z=d$e|UqepKAj-6p7_e+%Y4Zq2$EP^I+-^6v4_uhEA3$qbL2-*2*?;t+e{vhTc{lps zyU|0LcUUCzma!wWo44>?RMtg+^*yP4@*ZZC^RgtE6sv5dFQ1Brbbj=2NJS70%oFl<4p8eh$siTIRu^T?<{w4o zO=R3)cB1v26SpHX{{@gzDCU}*i#0~06P{d1)GpdTw`eE^IVH2hW2ryhkXf6>4UOp# zRk|J0HfjvJl%W&1!qN%;80}=O&W=zzH!cA1_^~mI4a1TO(K6ve z?<_6=*!%$084n2hL;y(UQs(uhebgHEQKjF7vU&gsFDiWikiolUNjzeqNd@?G()}L* zxB$S=w?dza%-LLHI-ttz3G;^GJw&FyhN`l|8z3UNK#ZSRo^4V{Vt@eSC-^$#iIh2& zy_QVXdIx>(Kz4Z_VxN`K88EW#bq<6luOHzqnF*auL*&S>Jxa^#HoxuSGW$xFUS7_o(5!A3KNgoUV^#B8C2JFaD4^28?_+<%y_grD6z~>!07Bw^NBr{&sH!?HH|NF8(A;BIaA(R2wgPNQaZIAy zso^etBH|Aig2zHuumB$OaE=wwGvPG=oXvS4>p?=k_etpRK8oMk&H$u2_nv~F0q)1= z`33l#F$@~uhhJ49*yRA;Q^42P2Jmx6849&?=&_ywoSa@>fm-^tE9siYou3rJ190ai zDb^faoa~#vtuJo{>G47$b(*}il2nl)ZxD%s9IQ=WSaMlM1aFb`3 z193JPDm9|h@^P24;|Gp!!_sg!T7jrk71ETISDX8*K*;AqW8dg)8OE1{Dc=+5++PL8 cmjX5Y2jT&te&o4V^Z)<=07*qoM6N<$f=jV;pa1{> literal 0 HcmV?d00001 diff --git a/src/main/webapp/css/themes/icons/large_smartart.png b/src/main/webapp/css/themes/icons/large_smartart.png new file mode 100644 index 0000000000000000000000000000000000000000..b47da08fa7ff9b56f6abb2517cb6c2177029faf8 GIT binary patch literal 1336 zcmV-81;_e{P)pBh)O^%3AYgtAK>fS=bS`B3ob2ygd+n1+_U!rp`nRtOoyGX4 z=(KTP5eZuwP_)XRw^g9SUyshotLT2$geTLtU<+8$8*JY(&u4BU|8g?AY}~;uO)!@y z>wkj2Plaovm1yv2ah0#c4PJ+vZatdah8=NjxDqu^B~rEDZ*79zU=O5Q_QT*TLmht} zwVWEYLlv+Ll%uADk^-pOgQdid1!+XCm|3L0E>AWS|%q`)HvTg}BgDAjS}svlza|@=dV0YH3{6 zlZT?;5|LSXFg_DGEyrMdDaVDrLR8!HQDr-gs^@uODs6dD`NlaRe|~z?Tn_SS-8^HO zU}CG+Gl3mS)#Gevp5;KhOEeN}tbCY(<8&VG+4;sTzoc?ne#H5wCtc4@QF? z8cVQTnB(CM;}OWMQX}i!QL5g(8gmDdE#IO1!7org&JZwKo8epZkf0|V$L4v74MG7o zJcM^+9+U|181awbSYB>Oyz{eXAknlJC0$8SK1!oriRi62Nth>L9^(s4)GaU?ieYgV zJaaBVj2Fgk@RYj=*9-@zyBDWaMz-}_mz__EdJB@w-=eVNXR1C0G$ibX+|Vviq-%pr(~4|WBhpIhalD`wM{`U#l%)eVbHj>odMUZ zi>l_pO^={|bO3{14*t0nOwO%F8_?aWhOCXmyOUAvI0e&iVHD<$R!ppni;K(T>4rEm0?aX^j%&w4$RTOCJA`P6-9ma{O zACRd&6cbHd132F>F(fcNK7^q$k-^bdR3Sz0t1tr|#vu9$-@C17zr@~VMVO#}j;dx*^?pe_mVpFjf=$HYdWRi><#o(0 zeIOGbkS;e7227I?h2al@VqH55G;KIp(Ta?c8%Qp!$FbZ?IGk-HQ)>bff`R(azXe-e z*V}s$T>gl_(nm6}PA1l+U0B1rAR!4%(oQg@NXRcSF}o`CpNa3nfIYT>`7av?@4)O1 z4P0$!E%+$5V3EWb)Qai(55f*ig$Nm$TNA~Jx2$>+enXM5GXr;DKyA4#e3((VOSWww uo;PJ%&{}NG?HKsto3b6^`p5L2x&8(W8B7jWgRVFL0000P$7bO0Bg$#2^g^4GL=P|t$hNq6Wo3a*(T;p z0vQVx+}+~^FZg$7F5mpj8TfC>dxjeSoPQ1VOMaA_u^ZnVr5#t%}HrnH>ScvMk452cyww4>){z4m<+~ zz$VYjod;A^<#YL=rT|^%{p!C3c<0*i002ov JPDHLkV1n}aiueEk literal 0 HcmV?d00001 diff --git a/src/main/webapp/css/themes/icons/man.png b/src/main/webapp/css/themes/icons/man.png new file mode 100644 index 0000000000000000000000000000000000000000..a8cafcb9a1bc9fafbc429093084aa2e5b37103b6 GIT binary patch literal 244 zcmVC_BI~?$baTUM>r&7#gjkN^eHIi#o0SqI#KDxPp zw@9vyR-*q#A1*f^_CI2jYYrM;0TvR|rdBA|{&P?5Vul}=KM*D;@QW`DQsz%=+`fM~ u3QS{w?+kN@RWQ}B0CTJ}SKVj!J=PhX&@(3LQ}*Qm0000>$j+3?x7IEPn{3BuiW)N`mv#O3D+9QW+dm@{>{( zJaZG%Q-e|yQz{EjrrH1%xd!-zxLTAQhakJ^Q+73{+?&sPG@tVTk}cBH8-FbMA2gTIwZ$R1rnqZ!{LQN5dZW*_A98)a hcb&}1B^+S+>+nau>-9y|=gz9{lr;}c=wVN)Q*o7; z#1rt#{)*L{NuLvUInMbWz@F$~q+t2X*32`7HA0n}1B^+RR-Z*1Eqt_euNB=!4?3hCYmYkCBcssH5 zPdnEk2K$~yJ;tQ}=`B*K3`ckaI0gPP&VH(3X7A9z$Z+9+&@?^iN_(Jb44$rjF6*2U FngA=BGHCz+ literal 0 HcmV?d00001 diff --git a/src/main/webapp/css/themes/icons/more.png b/src/main/webapp/css/themes/icons/more.png new file mode 100644 index 0000000000000000000000000000000000000000..94922a2c86cb6b1cd2a7085e055073226ad591ed GIT binary patch literal 110 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`rk*a2Ar-fh6Atj!H2mNcuy5Mr z$>!hq!(QaR^6>_B54Jn1#~Jije3o~(=`7H5>`;cz1${9F%W##sAI~(r1scHM>FVdQ I&MBb@08~pNrT_o{ literal 0 HcmV?d00001 diff --git a/src/main/webapp/css/themes/icons/no.png b/src/main/webapp/css/themes/icons/no.png new file mode 100644 index 0000000000000000000000000000000000000000..37a7c7497782dadcf14a765051a62dd5616200c5 GIT binary patch literal 922 zcmV;L17-Y)P)~H)FpGiVA+maa075~P;^Ost z%FF+My>{*Y{|_Jj|9|)H|Nl2{{{Mgd`v2FHC;#tBN%>zXAW)C22Oxl$VT=}a_4z4N zrW6=>dNQ#7{ma1c;R6H1`}YhCZ{IR7ym`aG`ujJ7l8z38nu>}8%kkq1$A10V2+{`- zKwtwZB_!%oy1NTx6%`p6K7NE?kmh&qz?vCezh+=~@q&Tj`Ev$7py4W#k_H^-&M_Qi zU^oa6K+Hft^Ls=_t}xct=3w~ph2g@XLkuqj1Q@RF*ukL03^f1MD~7#5#lI~rfyxgu zaNW7Xz<&Nb!`D}@41jje0SF)#Adz5aXehvN>=*+B8yf?swKapfn;XM72M30|Sy>DW zKpQP*⪼M8hY&JO$LjiB8ETz{xN7UFbD`TFvI`^5R0b1z5^G~7O=A!85y{?ZDaUm zW(L+^Ic*v^d_e5S7cMYxwYD<+1#12S6ypJ6X$A&ofB<6R;@}Wqc=-|@XtF@Rz6ILy z4af&+glT^3?aiPM6a#4n;om^~pMgONAb^+{fF?40{tPhyif@4oL;}JJ3Jh;0B^mw# zW8x=}{|jLN13&;Vy?*uT0mILqkWdF|-uwSQgXPktaGPN+vD~wV;i$eo!w;Y)5C$0p zwDt}_05Ls!`0&8vU%%kCa{`?TcealY!&?szxFJjd0dNCeK=2WO00KL4xwZBE|LW@h z|4T~#eCJ-NHV0gBdfguHGz&s%LFGwFi05M|8lxzVE3}(QD5+KCD wpazO6V0O9-%njRjGcW*?E5jFL#Q*^Y0M({d4SP?a6aWAK07*qoM6N<$f&>VU5C8xG literal 0 HcmV?d00001 diff --git a/src/main/webapp/css/themes/icons/ok.png b/src/main/webapp/css/themes/icons/ok.png new file mode 100644 index 0000000000000000000000000000000000000000..5b0f6a6174f67879d89b8c970d88734cd6f9f844 GIT binary patch literal 883 zcmV-(1C0EMP)wF51aIxG|t0o~WeTux?(*f!J?S`!vJrWM3^ z)v?u>(g^>@;xO#mkNlu=e*%b!BkO=S9U%&s|{QUTj4;ur+Qxv`b{1=&{q{_{@=tdkKKPJjPv{N-R+ z=H{q0b!wOgrI|?`QkZ(!{_7i9LV-VtRJx`%DQ2F^23wD{DqBhIRk` zF);r5{m+$GoMl&Put7+Jt2=`@4-Z4{!AlI=w!d7({+qd+0V(7F0suh(zW)OTFd63V z^!sFSNlF9<4gMd;*WzU&Dh*+FS2`3*A~OK^{__Bz$W0R(*Uum z?9l=80a*nF0_+3*1ONs71^@>82>=H93IGBCK>)u00}wAF|NZm@`|<(rTQ4UU0WcOM z00aL60Pp?k0KeVV0IsF+;Q#FbO$G-6;062!00#UB00{XE00{OE015OE00M|vNJE=} z^$*A6FQ5Ne@vDAS;$dfD`1Jo3!|5mY7`86`{^s{nmH;M>-&g)K|ATm%5g73x%=8b8 z0Ro7L;}<&v=RdZejL-PCo<9Aa;W^_ShKsN6GwfXY>&vg(Trted45#rWFn|DJV*bm{ z0Ky#q*cZJ%!~O8Y?dJ?fS26$kepw(JsCg%$6bcYP%o1uwz$j&AU}9wa&h(8#?9FW+ ziyzl{>lm2-O#9FFhv6UdZ-)OYzzhWT0wab200G2EX?6w(FaS`kAv2YZ@FM^K002ov JPDHLkV1n^7jC=q9 literal 0 HcmV?d00001 diff --git a/src/main/webapp/css/themes/icons/pencil.png b/src/main/webapp/css/themes/icons/pencil.png new file mode 100644 index 0000000000000000000000000000000000000000..5b8cc893d0e50c0e15cf10fbbb08706f81ec224a GIT binary patch literal 713 zcmV;)0yh1LP)R)!_m*FeI9eJ0Gxq#H zf0_XxfS9lv%LmkKB8}kx16siJFV!*nd7pOS69ERhSDg(18DcA(#PsQ(DfoWDDC{a=@>nto>xWzb;o zP$*;Aa%nq5TlT(fKhM4o2P*mk(g_ei5CcqsHvff2=RY9k`aMC~Kn&o76a{330bLQrJ&U26`M=Sy3)uqGxWf%F0d5QMO1 v>|l^)2n34pz-1YUGXNlf7%9!p009O71V-RMzjpE=00000NkvXXu0mjfxvf2L literal 0 HcmV?d00001 diff --git a/src/main/webapp/css/themes/icons/print.png b/src/main/webapp/css/themes/icons/print.png new file mode 100644 index 0000000000000000000000000000000000000000..fdf67a1e2771c1481d4fdf3c3bb219904cdde434 GIT binary patch literal 1057 zcmV++1m63JP)z1G?hxZ;&`ED+>cNGYingzZn1m zi0SLs4-79~-etIOVGqOe=l2>Z%BAk7f^KhW_13_pMU`pwSH#-O94%^)f& z3N-K^13&;VLHzfh;p^8g3^#9{H2wblqZrJ9KS1%{Kv(?!`4i~P{|ua*91=XdJgT6; z`St4;*p&bQ!~(?P!otFnEG?~V1q1{|M1_S}KY#tr@b%YUh9AFvGyDPKzd*%*zcVld z`Ugr`TiaZI_Ty@A>nW=<)yo#7xKlEh(vj1xwlt7#MgWzP$bT0%*uZWO;x9 z!fSwov9Uh~14Beagrk7ItviRhqIkg9=T8*)ge4C=e*XL?NDV*$F=Er`Vr(4mXr?g1 z)x}1@)Y^!FfsqM{nHgR`f5y<=G55mJn=cZMojrRIAb>Coh_o}9pPyizU~Z|yz`(=; z#6U+fLTM=f>$l$wi{@|tuwv(>V1NKZ@j|4%et%nvY=(}S5Cg-n4-5>yKLTkW{__dQ z{tTo)gT>g`J~N1_^Ko3f_)G{OfLLIf9gU6cqmAAaD6jz)zkJHTz{3~O8o!7fdBvhJL&&7 zEzS8KWN)@fPg66=+sNqB{}Vy~Up;L5Ul8klLse1H6FK$(0tk$}jE(!hOym0h|8~m% zDNRwIbd{B3fWmAbIX`3L{U`QU{to~eC?zhgj2`F!0R%=(K`Q6}?=tznbY|Lr4LLb~ zWE+4{s&A&Qo(5!cV$%x{Kwva8UiSa1o0b3Vw6&)alRA+BKmf4-{V&fa#mul`<-^an zUcH*g01htV0YCr&lNW=6vZVpTfxUMQymyyFg$$D!0_P3$1SAV4gvrH q1Tx^k^5vIKzWDHAF9R6>Aiw}@kj85RTB}e10000VP)p|3y6O+Fnsy(*G|dGwA8_{sE@0VD?kY)l*s511}8@N@DpuwT|nH_3V>hx1ODQ%gn&~@8_@IOt#8aVhL_V%$IK8 zWk{S+eg652N7)Q)9AE25ELv$HybnO!M{I#uKD}#=M;vYf7lrQFmo`l@cj9I@ZL*+0D=T!0-G4a z_us4x|CxR%P+4O z%=m19E(1m6KcMkUz;yA2;myD24DM`^3=_Jyz22~IyVL&*H?9B#5X1$4SsA{6|NY{@ z(^>zp*f|F>^Eg`1=E%Jp>r!82Fy*Fx0GG_T{`ts%Hw-;|-9sl#=*HT~_cnLQ6 zZwyY1jNAqP|1re_1K>S4TZ6MV5dUL@_zCI)fB*vkslXvaa)1B=8vtU6i;3jw7+Lm8D5$Z@i10EnF)=bcefw4K z$^E-CUfjQG`svfBbfD6|R#sLFj6lo3FG$G6@;ee>>~6i|H^5OY8c00W#fi<*1vzh{0&qu3dB`V0{{XDY`}(1n>S9M(9!zw#!&`A z#;*+0{6GVMSeWGp!`o{o8NPge#o%jgs54WT$qnQYpsyGNpauX05F;oJfZ`Pdw6!$j zynTH0RMa&!n3$Pa9zVGEY{&L(3qnPBl_DG6<9Xk0`Fl3`LiD4@pH{vDsxJWQ1qdJp zEJ>M}osCtQlY?CgW>F{;gVK#SmgoOZnEn5J%EtIXaWQXAO>Rdf)WFR;gt~f zXaA3z{{L{q=l48y!32dEcNn4H`bJ0C+qr9t=q z3IB5(AiS{sSlm!hKmUK){R9C#j!Zc}`+sBs9tE)p5$}U$;ZzVK5OzQCHlA<@UGIO! zvj@U9`H!I>IKl6{$7vAD0_aTr_h<@&41C_Zzj3U$sW?P)s`^}rT?-9$gz_!>OcE=Nf062l+NnAOE%LIKMeUciG zG5@4$#o>#0(^REaszX( z@Br;Y1jl>uI&DD}m2Idxq%!Gwkr0;PT_BnCf*VQmb@KBW^WVSl?z4#ixOz4Ke!ssk zy+~qx3HN1Lmf_*JwldghDRx~#Huv5AzuyA9NNmE;P!yvrh(>!r*9CAQI{gJZ77+*H z@%Rxtk;~ literal 0 HcmV?d00001 diff --git a/src/main/webapp/css/themes/icons/undo.png b/src/main/webapp/css/themes/icons/undo.png new file mode 100644 index 0000000000000000000000000000000000000000..6129fa0c77eb1d2100ed1c99b5643ab8990a9566 GIT binary patch literal 707 zcmV;!0zCbRP)gx00G1Zv_aomR`x(qRh0l2FE0bbpFa!?fB$08 zkFQ)|s9L!2z&&2xfMaLReuNnS5I{^UzkfRf$Hoe9fp{-pGBCV;4WVDWU|@Lm41ym& zW{~CPX6X0xb5MHuav8D<00M~l)~8P=@1HyOnT?gzU0Y6$f#K#&28Oq985rKZgBbSe z6~w?NPZ+p>wDzArsy8?}Ki_-*{y4}0fB<3!5w|~mI{y0k^X(5GJqk7R^5S3xY54Gg z;V@9{y|_37pRO(g>+jzT438c$h_JFUeEIar>Y2FstQW6ee+LL4W|&hReEj(I13UYi znbkhd^K)@A%v-naX4mP{i91)X{{CA+!pI;bgn{AeRR)QlKiRi``0yC0=M+Ey zVT~0JdHJSom6iV+{r%6t#LV>djcY9}FMXXe=l_3O+y7ZoQhPw+00D#(*(oWx*+@tv zp{LLZetz%&x3v79qNw;ED8va6Kn$b;P{O)4dGi0A+S>nhH8gAh0*IMZ1Ma+ke^KiH z{{%~Qb%Axyo~;K6ASMPf!11eBC%hFCV_^OEO$;D_$THxanAm~S7cMXefB&up5J1f2 p81VS{^OpjgoMw-I|K0`=U;x^&`B18C?@a&z002ovPDHLkV1f|(PF(;1 literal 0 HcmV?d00001 diff --git a/src/main/webapp/css/themes/material/accordion.css b/src/main/webapp/css/themes/material/accordion.css new file mode 100644 index 0000000..51d0c70 --- /dev/null +++ b/src/main/webapp/css/themes/material/accordion.css @@ -0,0 +1,89 @@ +.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; +} +.accordion-expand { + background: url('images/accordion_arrows.png') no-repeat -16px 0; +} +.accordion { + background: #ffffff; + border-color: #ddd; +} +.accordion .accordion-header { + background: #f5f5f5; + filter: none; +} +.accordion .accordion-header-selected { + background: #00bbee; +} +.accordion .accordion-header-selected .panel-title { + color: #fff; +} +.accordion .panel-last > .accordion-header { + border-bottom-color: #f5f5f5; +} +.accordion .panel-last > .accordion-body { + border-bottom-color: #ffffff; +} +.accordion .panel-last > .accordion-header-selected, +.accordion .panel-last > .accordion-header-border { + border-bottom-color: #ddd; +} +.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: #f5f5f5; +} +.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: #ddd; +} +.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: #f5f5f5; +} +.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: #ddd; +} diff --git a/src/main/webapp/css/themes/material/calendar.css b/src/main/webapp/css/themes/material/calendar.css new file mode 100644 index 0000000..47ba4b1 --- /dev/null +++ b/src/main/webapp/css/themes/material/calendar.css @@ -0,0 +1,202 @@ +.calendar { + border-width: 1px; + border-style: solid; + padding: 1px; + overflow: hidden; +} +.calendar table { + table-layout: fixed; + border-collapse: separate; + font-size: 12px; + width: 100%; + height: 100%; +} +.calendar table td, +.calendar table th { + font-size: 12px; +} +.calendar-noborder { + border: 0; +} +.calendar-header { + position: relative; + height: 22px; +} +.calendar-title { + text-align: center; + height: 22px; +} +.calendar-title span { + position: relative; + display: inline-block; + top: 2px; + padding: 0 3px; + height: 18px; + line-height: 18px; + font-size: 12px; + cursor: pointer; + -moz-border-radius: 4px 4px 4px 4px; + -webkit-border-radius: 4px 4px 4px 4px; + border-radius: 4px 4px 4px 4px; +} +.calendar-prevmonth, +.calendar-nextmonth, +.calendar-prevyear, +.calendar-nextyear { + position: absolute; + top: 50%; + margin-top: -7px; + width: 14px; + height: 14px; + cursor: pointer; + font-size: 1px; + -moz-border-radius: 4px 4px 4px 4px; + -webkit-border-radius: 4px 4px 4px 4px; + border-radius: 4px 4px 4px 4px; +} +.calendar-prevmonth { + left: 20px; + background: url('images/calendar_arrows.png') no-repeat -18px -2px; +} +.calendar-nextmonth { + right: 20px; + background: url('images/calendar_arrows.png') no-repeat -34px -2px; +} +.calendar-prevyear { + left: 3px; + background: url('images/calendar_arrows.png') no-repeat -1px -2px; +} +.calendar-nextyear { + right: 3px; + background: url('images/calendar_arrows.png') no-repeat -49px -2px; +} +.calendar-body { + position: relative; +} +.calendar-body th, +.calendar-body td { + text-align: center; +} +.calendar-day { + border: 0; + padding: 1px; + cursor: pointer; + -moz-border-radius: 4px 4px 4px 4px; + -webkit-border-radius: 4px 4px 4px 4px; + border-radius: 4px 4px 4px 4px; +} +.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: 12px; + display: none; + overflow: hidden; +} +.calendar-menu-year-inner { + text-align: center; + padding-bottom: 5px; +} +.calendar-menu-year { + width: 50px; + text-align: center; + border-width: 1px; + border-style: solid; + outline-style: none; + resize: none; + margin: 0; + padding: 2px; + font-weight: bold; + font-size: 12px; + -moz-border-radius: 4px 4px 4px 4px; + -webkit-border-radius: 4px 4px 4px 4px; + border-radius: 4px 4px 4px 4px; +} +.calendar-menu-prev, +.calendar-menu-next { + display: inline-block; + width: 21px; + height: 21px; + vertical-align: top; + cursor: pointer; + -moz-border-radius: 4px 4px 4px 4px; + -webkit-border-radius: 4px 4px 4px 4px; + border-radius: 4px 4px 4px 4px; +} +.calendar-menu-prev { + margin-right: 10px; + background: url('images/calendar_arrows.png') no-repeat 2px 2px; +} +.calendar-menu-next { + margin-left: 10px; + background: url('images/calendar_arrows.png') no-repeat -45px 2px; +} +.calendar-menu-month { + text-align: center; + cursor: pointer; + font-weight: bold; + -moz-border-radius: 4px 4px 4px 4px; + -webkit-border-radius: 4px 4px 4px 4px; + border-radius: 4px 4px 4px 4px; +} +.calendar-body th, +.calendar-menu-month { + color: #8d8d8d; +} +.calendar-day { + color: #404040; +} +.calendar-sunday { + color: #CC2222; +} +.calendar-saturday { + color: #00ee00; +} +.calendar-today { + color: #0000ff; +} +.calendar-menu-year { + border-color: #ddd; +} +.calendar { + border-color: #ddd; +} +.calendar-header { + background: #f5f5f5; +} +.calendar-body, +.calendar-menu { + background: #ffffff; +} +.calendar-body th { + background: #fafafa; + padding: 2px 0; +} +.calendar-hover, +.calendar-nav-hover, +.calendar-menu-hover { + background-color: #eee; + color: #404040; +} +.calendar-hover { + border: 1px solid #ccc; + padding: 0; +} +.calendar-selected { + background-color: #00bbee; + color: #fff; + border: 1px solid #9cc8f7; + padding: 0; +} diff --git a/src/main/webapp/css/themes/material/combo.css b/src/main/webapp/css/themes/material/combo.css new file mode 100644 index 0000000..622d7c2 --- /dev/null +++ b/src/main/webapp/css/themes/material/combo.css @@ -0,0 +1,35 @@ +.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; +} +.combo-panel { + background-color: #ffffff; +} +.combo-arrow { + background-color: #f5f5f5; +} +.combo-arrow-hover { + background-color: #eee; +} +.combo-arrow:hover { + background-color: #eee; +} +.combo .textbox-icon-disabled:hover { + cursor: default; +} diff --git a/src/main/webapp/css/themes/material/combobox.css b/src/main/webapp/css/themes/material/combobox.css new file mode 100644 index 0000000..8f97a2b --- /dev/null +++ b/src/main/webapp/css/themes/material/combobox.css @@ -0,0 +1,39 @@ +.combobox-item, +.combobox-group, +.combobox-stick { + font-size: 12px; + padding: 3px; +} +.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: #eee; + color: #404040; +} +.combobox-item-selected { + background-color: #00bbee; + color: #fff; +} +.combobox-icon { + display: inline-block; + width: 16px; + height: 16px; + vertical-align: middle; + margin-right: 2px; +} diff --git a/src/main/webapp/css/themes/material/datagrid.css b/src/main/webapp/css/themes/material/datagrid.css new file mode 100644 index 0000000..7259808 --- /dev/null +++ b/src/main/webapp/css/themes/material/datagrid.css @@ -0,0 +1,282 @@ +.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 #ddd; + 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: 25px; +} +.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 #ddd; + font-size: 12px; + 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; +} +.datagrid-header, +.datagrid-td-rownumber { + background-color: #fafafa; +} +.datagrid-cell-rownumber { + color: #404040; +} +.datagrid-resize-proxy { + background: #ccc; +} +.datagrid-mask { + background: #eee; +} +.datagrid-mask-msg { + border-color: #ddd; +} +.datagrid-toolbar, +.datagrid-pager { + background: #fafafa; +} +.datagrid-header, +.datagrid-toolbar, +.datagrid-pager, +.datagrid-footer-inner { + border-color: #eee; +} +.datagrid-header td, +.datagrid-body td, +.datagrid-footer td { + border-color: #ebebeb; +} +.datagrid-htable, +.datagrid-btable, +.datagrid-ftable { + color: #404040; + border-collapse: separate; +} +.datagrid-row-alt { + background: #f9f9f9; +} +.datagrid-row-over, +.datagrid-header td.datagrid-header-over { + background: #eee; + color: #404040; + cursor: default; +} +.datagrid-row-selected { + background: #00bbee; + 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; +} diff --git a/src/main/webapp/css/themes/material/datalist.css b/src/main/webapp/css/themes/material/datalist.css new file mode 100644 index 0000000..27617f0 --- /dev/null +++ b/src/main/webapp/css/themes/material/datalist.css @@ -0,0 +1,95 @@ +.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: #ebebeb; +} +.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: #404040; + 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: #ebebeb; +} +.m-list li>a:hover { + background: #eee; + color: #404040; +} +.m-list .m-list-group { + padding: 0 4px; +} diff --git a/src/main/webapp/css/themes/material/datebox.css b/src/main/webapp/css/themes/material/datebox.css new file mode 100644 index 0000000..e2874e8 --- /dev/null +++ b/src/main/webapp/css/themes/material/datebox.css @@ -0,0 +1,36 @@ +.datebox-calendar-inner { + height: 180px; +} +.datebox-button { + padding: 0 5px; + text-align: center; +} +.datebox-button a { + line-height: 22px; + font-size: 12px; + 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: #404040; +} diff --git a/src/main/webapp/css/themes/material/dialog.css b/src/main/webapp/css/themes/material/dialog.css new file mode 100644 index 0000000..82a1bb8 --- /dev/null +++ b/src/main/webapp/css/themes/material/dialog.css @@ -0,0 +1,47 @@ +.dialog-content { + overflow: auto; +} +.dialog-toolbar { + position: relative; + padding: 2px 5px; +} +.dialog-tool-separator { + float: left; + height: 24px; + border-left: 1px solid #ddd; + 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: #ddd #ddd #eee #ddd; +} +.dialog-button { + border-color: #eee #ddd #ddd #ddd; +} +.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; +} diff --git a/src/main/webapp/css/themes/material/easyui.css b/src/main/webapp/css/themes/material/easyui.css new file mode 100644 index 0000000..3b79252 --- /dev/null +++ b/src/main/webapp/css/themes/material/easyui.css @@ -0,0 +1,3229 @@ +.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: #eee; + -moz-border-radius: 2px 2px 2px 2px; + -webkit-border-radius: 2px 2px 2px 2px; + border-radius: 2px 2px 2px 2px; +} +.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; +} +.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; +} +.panel-header, +.panel-body { + border-color: #ddd; +} +.panel-header { + background-color: #f5f5f5; +} +.panel-body { + background-color: #ffffff; + color: #404040; + font-size: 12px; +} +.panel-title { + font-size: 12px; + font-weight: bold; + color: #000000; + height: 16px; + line-height: 16px; +} +.panel-footer { + border: 1px solid #ddd; + overflow: hidden; + background: #fafafa; +} +.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; +} +.panel-hleft>.panel-header .panel-title, +.panel-hright>.panel-header .panel-title { + position: absolute; + min-width: 16px; + left: 21px; + 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: 5px; + 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; +} +.accordion-expand { + background: url('images/accordion_arrows.png') no-repeat -16px 0; +} +.accordion { + background: #ffffff; + border-color: #ddd; +} +.accordion .accordion-header { + background: #f5f5f5; + filter: none; +} +.accordion .accordion-header-selected { + background: #00bbee; +} +.accordion .accordion-header-selected .panel-title { + color: #fff; +} +.accordion .panel-last > .accordion-header { + border-bottom-color: #f5f5f5; +} +.accordion .panel-last > .accordion-body { + border-bottom-color: #ffffff; +} +.accordion .panel-last > .accordion-header-selected, +.accordion .panel-last > .accordion-header-border { + border-bottom-color: #ddd; +} +.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: #f5f5f5; +} +.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: #ddd; +} +.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: #f5f5f5; +} +.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: #ddd; +} +.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: 4px 4px 4px 4px; + -webkit-border-radius: 4px 4px 4px 4px; + border-radius: 4px 4px 4px 4px; +} +.window-shadow { + background: #fafafa; + -moz-box-shadow: 2px 2px 3px #fafafa; + -webkit-box-shadow: 2px 2px 3px #fafafa; + box-shadow: 2px 2px 3px #fafafa; + filter: progid:DXImageTransform.Microsoft.Blur(pixelRadius=2,MakeShadow=false,ShadowOpacity=0.2); +} +.window, +.window .window-body { + border-color: #ddd; +} +.window { + background-color: #f5f5f5; +} +.window-proxy { + border: 1px dashed #ddd; +} +.window-proxy-mask, +.window-mask { + background: #eee; +} +.window .panel-footer { + border: 1px solid #ddd; + 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-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 #ddd; + 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: #ddd #ddd #eee #ddd; +} +.dialog-button { + border-color: #eee #ddd #ddd #ddd; +} +.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: 24px; + font-size: 12px; + padding: 0; + margin: 0 4px; +} +.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 4px 0 24px; +} +.l-btn-icon-left .l-btn-icon { + left: 4px; +} +.l-btn-icon-right .l-btn-text { + margin: 0 24px 0 4px; +} +.l-btn-icon-right .l-btn-icon { + right: 4px; +} +.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 4px; + width: 16px; +} +.l-btn-plain:hover { + padding: 0; +} +.l-btn-focus { + outline: #0000FF dotted thin; +} +.l-btn-large .l-btn-text { + line-height: 40px; +} +.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 4px; + width: 32px; +} +.l-btn { + color: #404040; + background: #fafafa; + background-repeat: repeat-x; + border: 1px solid #d9d9d9; + -moz-border-radius: 4px 4px 4px 4px; + -webkit-border-radius: 4px 4px 4px 4px; + border-radius: 4px 4px 4px 4px; +} +.l-btn:hover { + background: #eee; + color: #404040; + 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: #eee; + color: #404040; + border: 1px solid #ccc; + -moz-border-radius: 4px 4px 4px 4px; + -webkit-border-radius: 4px 4px 4px 4px; + border-radius: 4px 4px 4px 4px; +} +.l-btn-disabled, +.l-btn-disabled:hover { + opacity: 0.5; + cursor: default; + background: #fafafa; + color: #404040; +} +.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: #00bbee; + filter: none; +} +.l-btn-plain-selected, +.l-btn-plain-selected:hover { + background: #00bbee; +} +.textbox { + position: relative; + border: 1px solid #ddd; + background-color: #fff; + vertical-align: middle; + display: inline-block; + overflow: hidden; + white-space: nowrap; + margin: 0; + padding: 0; + -moz-border-radius: 4px 4px 4px 4px; + -webkit-border-radius: 4px 4px 4px 4px; + border-radius: 4px 4px 4px 4px; +} +.textbox .textbox-text { + font-size: 12px; + border: 0; + margin: 0; + padding: 4px; + white-space: normal; + vertical-align: top; + outline-style: none; + resize: none; + -moz-border-radius: 4px 4px 4px 4px; + -webkit-border-radius: 4px 4px 4px 4px; + border-radius: 4px 4px 4px 4px; +} +.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: 22px; + line-height: 22px; + 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: #c4c4c4; + -moz-box-shadow: 0 0 3px 0 #ddd; + -webkit-box-shadow: 0 0 3px 0 #ddd; + box-shadow: 0 0 3px 0 #ddd; +} +.textbox-invalid { + border-color: #ffa8a8; + background-color: #fff; +} +.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; +} +.combo-panel { + background-color: #ffffff; +} +.combo-arrow { + background-color: #f5f5f5; +} +.combo-arrow-hover { + background-color: #eee; +} +.combo-arrow:hover { + background-color: #eee; +} +.combo .textbox-icon-disabled:hover { + cursor: default; +} +.combobox-item, +.combobox-group, +.combobox-stick { + font-size: 12px; + padding: 3px; +} +.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: #eee; + color: #404040; +} +.combobox-item-selected { + background-color: #00bbee; + 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: 4px 4px 4px 4px; + -webkit-border-radius: 4px 4px 4px 4px; + border-radius: 4px 4px 4px 4px; + background: #eee; + color: #404040; +} +.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: #ccc; +} +.layout-split-north { + border-bottom: 5px solid #ffffff; +} +.layout-split-south { + border-top: 5px solid #ffffff; +} +.layout-split-east { + border-left: 5px solid #ffffff; +} +.layout-split-west { + border-right: 5px solid #ffffff; +} +.layout-expand { + background-color: #f5f5f5; +} +.layout-expand-over { + background-color: #f5f5f5; +} +.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 a.tabs-inner { + display: inline-block; + text-decoration: none; + 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: 4px 4px 0 0; + -webkit-border-radius: 4px 4px 0 0; + border-radius: 4px 4px 0 0; +} +.tabs li.tabs-selected a.tabs-inner { + font-weight: bold; + outline: none; +} +.tabs li.tabs-selected a:hover.tabs-inner { + 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: 12px; +} +.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 a.tabs-inner { + -moz-border-radius: 0 0 4px 4px; + -webkit-border-radius: 0 0 4px 4px; + border-radius: 0 0 4px 4px; +} +.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 a.tabs-inner { + padding-left: 0; + padding-right: 0; +} +.tabs-header-left .tabs li a.tabs-inner { + display: block; + text-align: left; + padding-left: 10px; + padding-right: 10px; + -moz-border-radius: 4px 0 0 4px; + -webkit-border-radius: 4px 0 0 4px; + border-radius: 4px 0 0 4px; +} +.tabs-header-right .tabs li a.tabs-inner { + display: block; + text-align: left; + padding-left: 10px; + padding-right: 10px; + -moz-border-radius: 0 4px 4px 0; + -webkit-border-radius: 0 4px 4px 0; + border-radius: 0 4px 4px 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 a.tabs-inner { + -moz-border-radius: 4px 4px 4px 4px; + -webkit-border-radius: 4px 4px 4px 4px; + border-radius: 4px 4px 4px 4px; +} +.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: #f5f5f5 url('images/tabs_icons.png') no-repeat 1px center; +} +.tabs-scroller-right { + background: #f5f5f5 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 a.tabs-inner:hover { + background: #eee; + color: #404040; + filter: none; +} +.tabs li.tabs-selected a.tabs-inner { + background-color: #ffffff; + color: #000000; +} +.tabs li a.tabs-inner { + color: #000000; + background-color: #f5f5f5; +} +.tabs-header, +.tabs-tool { + background-color: #f5f5f5; +} +.tabs-header-plain { + background: transparent; +} +.tabs-header, +.tabs-scroller-left, +.tabs-scroller-right, +.tabs-tool, +.tabs, +.tabs-panels, +.tabs li a.tabs-inner, +.tabs li.tabs-selected a.tabs-inner, +.tabs-header-bottom .tabs li.tabs-selected a.tabs-inner, +.tabs-header-left .tabs li.tabs-selected a.tabs-inner, +.tabs-header-right .tabs li.tabs-selected a.tabs-inner { + border-color: #ddd; +} +.tabs-p-tool a:hover, +.tabs li a:hover.tabs-close, +.tabs-scroller-over { + background-color: #eee; +} +.tabs li.tabs-selected a.tabs-inner { + border-bottom: 1px solid #ffffff; +} +.tabs-header-bottom .tabs li.tabs-selected a.tabs-inner { + border-top: 1px solid #ffffff; +} +.tabs-header-left .tabs li.tabs-selected a.tabs-inner { + border-right: 1px solid #ffffff; +} +.tabs-header-right .tabs li.tabs-selected a.tabs-inner { + border-left: 1px solid #ffffff; +} +.tabs-header .tabs-pill li.tabs-selected a.tabs-inner { + background: #00bbee; + color: #fff; + filter: none; + border-color: #ddd; +} +.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 #ddd; + 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: 25px; +} +.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 #ddd; + font-size: 12px; + 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; +} +.datagrid-header, +.datagrid-td-rownumber { + background-color: #fafafa; +} +.datagrid-cell-rownumber { + color: #404040; +} +.datagrid-resize-proxy { + background: #ccc; +} +.datagrid-mask { + background: #eee; +} +.datagrid-mask-msg { + border-color: #ddd; +} +.datagrid-toolbar, +.datagrid-pager { + background: #fafafa; +} +.datagrid-header, +.datagrid-toolbar, +.datagrid-pager, +.datagrid-footer-inner { + border-color: #eee; +} +.datagrid-header td, +.datagrid-body td, +.datagrid-footer td { + border-color: #ebebeb; +} +.datagrid-htable, +.datagrid-btable, +.datagrid-ftable { + color: #404040; + border-collapse: separate; +} +.datagrid-row-alt { + background: #f9f9f9; +} +.datagrid-row-over, +.datagrid-header td.datagrid-header-over { + background: #eee; + color: #404040; + cursor: default; +} +.datagrid-row-selected { + background: #00bbee; + 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; +} +.propertygrid .datagrid-view1 .datagrid-body td { + padding-bottom: 1px; + border-width: 0 1px 0 0; +} +.propertygrid .datagrid-group { + height: 21px; + 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: #eee; +} +.propertygrid .datagrid-view1 .datagrid-group { + border-color: #f5f5f5; +} +.propertygrid .datagrid-view2 .datagrid-group { + border-color: #eee; +} +.propertygrid .datagrid-group, +.propertygrid .datagrid-view1 .datagrid-body, +.propertygrid .datagrid-view1 .datagrid-row-over, +.propertygrid .datagrid-view1 .datagrid-row-selected { + background: #f5f5f5; +} +.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: #ebebeb; +} +.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: #404040; + 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: #ebebeb; +} +.m-list li>a:hover { + background: #eee; + color: #404040; +} +.m-list .m-list-group { + padding: 0 4px; +} +.pagination { + zoom: 1; +} +.pagination table { + float: left; + height: 30px; +} +.pagination td { + border: 0; +} +.pagination-btn-separator { + float: left; + height: 24px; + border-left: 1px solid #ddd; + border-right: 1px solid #fff; + margin: 3px 1px; +} +.pagination .pagination-num { + border-width: 1px; + border-style: solid; + margin: 0 2px; + padding: 2px; + width: 2em; + height: auto; +} +.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 { + width: 24px; + text-align: center; + margin: 0; +} +.pagination-first { + background: url('images/pagination_icons.png') no-repeat 0 center; +} +.pagination-prev { + background: url('images/pagination_icons.png') no-repeat -16px center; +} +.pagination-next { + background: url('images/pagination_icons.png') no-repeat -32px center; +} +.pagination-last { + background: url('images/pagination_icons.png') no-repeat -48px center; +} +.pagination-load { + background: url('images/pagination_icons.png') no-repeat -64px center; +} +.pagination-loading { + background: url('images/loading.gif') no-repeat center center; +} +.pagination-page-list, +.pagination .pagination-num { + border-color: #ddd; +} +.calendar { + border-width: 1px; + border-style: solid; + padding: 1px; + overflow: hidden; +} +.calendar table { + table-layout: fixed; + border-collapse: separate; + font-size: 12px; + width: 100%; + height: 100%; +} +.calendar table td, +.calendar table th { + font-size: 12px; +} +.calendar-noborder { + border: 0; +} +.calendar-header { + position: relative; + height: 22px; +} +.calendar-title { + text-align: center; + height: 22px; +} +.calendar-title span { + position: relative; + display: inline-block; + top: 2px; + padding: 0 3px; + height: 18px; + line-height: 18px; + font-size: 12px; + cursor: pointer; + -moz-border-radius: 4px 4px 4px 4px; + -webkit-border-radius: 4px 4px 4px 4px; + border-radius: 4px 4px 4px 4px; +} +.calendar-prevmonth, +.calendar-nextmonth, +.calendar-prevyear, +.calendar-nextyear { + position: absolute; + top: 50%; + margin-top: -7px; + width: 14px; + height: 14px; + cursor: pointer; + font-size: 1px; + -moz-border-radius: 4px 4px 4px 4px; + -webkit-border-radius: 4px 4px 4px 4px; + border-radius: 4px 4px 4px 4px; +} +.calendar-prevmonth { + left: 20px; + background: url('images/calendar_arrows.png') no-repeat -18px -2px; +} +.calendar-nextmonth { + right: 20px; + background: url('images/calendar_arrows.png') no-repeat -34px -2px; +} +.calendar-prevyear { + left: 3px; + background: url('images/calendar_arrows.png') no-repeat -1px -2px; +} +.calendar-nextyear { + right: 3px; + background: url('images/calendar_arrows.png') no-repeat -49px -2px; +} +.calendar-body { + position: relative; +} +.calendar-body th, +.calendar-body td { + text-align: center; +} +.calendar-day { + border: 0; + padding: 1px; + cursor: pointer; + -moz-border-radius: 4px 4px 4px 4px; + -webkit-border-radius: 4px 4px 4px 4px; + border-radius: 4px 4px 4px 4px; +} +.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: 12px; + display: none; + overflow: hidden; +} +.calendar-menu-year-inner { + text-align: center; + padding-bottom: 5px; +} +.calendar-menu-year { + width: 50px; + text-align: center; + border-width: 1px; + border-style: solid; + outline-style: none; + resize: none; + margin: 0; + padding: 2px; + font-weight: bold; + font-size: 12px; + -moz-border-radius: 4px 4px 4px 4px; + -webkit-border-radius: 4px 4px 4px 4px; + border-radius: 4px 4px 4px 4px; +} +.calendar-menu-prev, +.calendar-menu-next { + display: inline-block; + width: 21px; + height: 21px; + vertical-align: top; + cursor: pointer; + -moz-border-radius: 4px 4px 4px 4px; + -webkit-border-radius: 4px 4px 4px 4px; + border-radius: 4px 4px 4px 4px; +} +.calendar-menu-prev { + margin-right: 10px; + background: url('images/calendar_arrows.png') no-repeat 2px 2px; +} +.calendar-menu-next { + margin-left: 10px; + background: url('images/calendar_arrows.png') no-repeat -45px 2px; +} +.calendar-menu-month { + text-align: center; + cursor: pointer; + font-weight: bold; + -moz-border-radius: 4px 4px 4px 4px; + -webkit-border-radius: 4px 4px 4px 4px; + border-radius: 4px 4px 4px 4px; +} +.calendar-body th, +.calendar-menu-month { + color: #8d8d8d; +} +.calendar-day { + color: #404040; +} +.calendar-sunday { + color: #CC2222; +} +.calendar-saturday { + color: #00ee00; +} +.calendar-today { + color: #0000ff; +} +.calendar-menu-year { + border-color: #ddd; +} +.calendar { + border-color: #ddd; +} +.calendar-header { + background: #f5f5f5; +} +.calendar-body, +.calendar-menu { + background: #ffffff; +} +.calendar-body th { + background: #fafafa; + padding: 2px 0; +} +.calendar-hover, +.calendar-nav-hover, +.calendar-menu-hover { + background-color: #eee; + color: #404040; +} +.calendar-hover { + border: 1px solid #ccc; + padding: 0; +} +.calendar-selected { + background-color: #00bbee; + color: #fff; + border: 1px solid #9cc8f7; + padding: 0; +} +.datebox-calendar-inner { + height: 180px; +} +.datebox-button { + padding: 0 5px; + text-align: center; +} +.datebox-button a { + line-height: 22px; + font-size: 12px; + 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: #404040; +} +.spinner-arrow { + background-color: #f5f5f5; + display: inline-block; + overflow: hidden; + vertical-align: top; + margin: 0; + padding: 0; + opacity: 1.0; + filter: alpha(opacity=100); + width: 18px; +} +.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: #404040; + outline-style: none; +} +.spinner-arrow-hover { + background-color: #eee; + opacity: 1.0; + filter: alpha(opacity=100); +} +.spinner-arrow-up:hover, +.spinner-arrow-down:hover { + opacity: 1.0; + filter: alpha(opacity=100); + background-color: #eee; +} +.textbox-icon-disabled .spinner-arrow-up:hover, +.textbox-icon-disabled .spinner-arrow-down:hover { + opacity: 0.6; + filter: alpha(opacity=60); + background-color: #f5f5f5; + 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; +} +.spinner-arrow-down { + background: url('images/spinner_arrows.png') no-repeat -15px center; +} +.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: 4px 4px 4px 4px; + -webkit-border-radius: 4px 4px 4px 4px; + border-radius: 4px 4px 4px 4px; + overflow: hidden; + position: relative; +} +.progressbar-text { + text-align: center; + position: absolute; +} +.progressbar-value { + position: relative; + overflow: hidden; + width: 0; + -moz-border-radius: 4px 0 0 4px; + -webkit-border-radius: 4px 0 0 4px; + border-radius: 4px 0 0 4px; +} +.progressbar { + border-color: #ddd; +} +.progressbar-text { + color: #404040; + font-size: 12px; +} +.progressbar-value .progressbar-text { + background-color: #00bbee; + 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: #f5f5f5; +} +.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: 4px; +} +.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: 12px; + 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: 12px; +} +.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: #ddd; + background: #f5f5f5; +} +.slider-rule span { + border-color: #ddd; +} +.slider-rulelabel span { + color: #404040; +} +.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: 4px 4px 4px 4px; + -webkit-border-radius: 4px 4px 4px 4px; + border-radius: 4px 4px 4px 4px; +} +.menu-item-disabled { + opacity: 0.5; + filter: alpha(opacity=50); + cursor: default; +} +.menu-text, +.menu-text span { + font-size: 12px; +} +.menu-shadow { + position: absolute; + -moz-border-radius: 4px 4px 4px 4px; + -webkit-border-radius: 4px 4px 4px 4px; + border-radius: 4px 4px 4px 4px; + background: #fafafa; + -moz-box-shadow: 2px 2px 3px #fafafa; + -webkit-box-shadow: 2px 2px 3px #fafafa; + box-shadow: 2px 2px 3px #fafafa; + filter: progid:DXImageTransform.Microsoft.Blur(pixelRadius=2,MakeShadow=false,ShadowOpacity=0.2); +} +.menu-rightarrow { + background: url('images/menu_arrows.png') no-repeat -32px center; +} +.menu-line { + border-left: 1px solid #ddd; + border-right: 1px solid #fff; +} +.menu-sep { + border-top: 1px solid #ddd; + border-bottom: 1px solid #fff; +} +.menu { + background-color: #fff; + border-color: #eee; + color: #404040; +} +.menu-content { + background: #ffffff; +} +.menu-item { + border-color: transparent; + _border-color: #fff; +} +.menu-active { + border-color: #ccc; + color: #404040; + background: #eee; +} +.menu-active-disabled { + border-color: transparent; + background: transparent; + color: #404040; +} +.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: #eee; + color: #404040; + 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: 4px 4px 4px 4px; + -webkit-border-radius: 4px 4px 4px 4px; + border-radius: 4px 4px 4px 4px; +} +.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: #ccc; + 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: #eee; + color: #404040; +} +.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: #ccc; + 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; +} +.messager-info { + background: url('images/messager_icons.png') no-repeat scroll 0 0; +} +.messager-question { + background: url('images/messager_icons.png') no-repeat scroll -32px 0; +} +.messager-warning { + background: url('images/messager_icons.png') no-repeat scroll -96px 0; +} +.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 #ddd; +} +.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: 18px; + 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; + vertical-align: top; + overflow: hidden; +} +.tree-expanded { + background: url('images/tree_icons.png') no-repeat -18px 0px; +} +.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; +} +.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; +} +.tree-folder-open { + background: url('images/tree_icons.png') no-repeat -224px 0; +} +.tree-file { + background: url('images/tree_icons.png') no-repeat -240px 0; +} +.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; +} +.tree-title { + font-size: 12px; + display: inline-block; + text-decoration: none; + vertical-align: top; + white-space: nowrap; + padding: 0 2px; + height: 18px; + line-height: 18px; +} +.tree-node-proxy { + font-size: 12px; + 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 #ddd; + font-size: 12px; + line-height: 16px; + padding: 0 4px; + margin: 0; + width: 80px; + outline-style: none; + vertical-align: top; + position: absolute; + top: 0; +} +.tree-node-proxy { + background-color: #ffffff; + color: #404040; + border-color: #ddd; +} +.tree-node-hover { + background: #eee; + color: #404040; +} +.tree-node-selected { + background: #00bbee; + color: #fff; +} +.tree-node-hidden { + display: none; +} +.validatebox-invalid { + border-color: #ffa8a8; + background-color: #fff; + color: #404040; +} +.tooltip { + position: absolute; + display: none; + z-index: 9900000; + outline: none; + opacity: 1; + filter: alpha(opacity=100); + padding: 5px; + border-width: 1px; + border-style: solid; + border-radius: 5px; + -moz-border-radius: 4px 4px 4px 4px; + -webkit-border-radius: 4px 4px 4px 4px; + border-radius: 4px 4px 4px 4px; +} +.tooltip-content { + font-size: 12px; +} +.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; + _border-color: tomato; + _filter: chroma(color=tomato); +} +.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: #ddd; + color: #404040; +} +.tooltip-right .tooltip-arrow-outer { + border-right-color: #ddd; +} +.tooltip-right .tooltip-arrow { + border-right-color: #ffffff; +} +.tooltip-left .tooltip-arrow-outer { + border-left-color: #ddd; +} +.tooltip-left .tooltip-arrow { + border-left-color: #ffffff; +} +.tooltip-top .tooltip-arrow-outer { + border-top-color: #ddd; +} +.tooltip-top .tooltip-arrow { + border-top-color: #ffffff; +} +.tooltip-bottom .tooltip-arrow-outer { + border-bottom-color: #ddd; +} +.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: #d9d9d9; + border: 1px solid #d9d9d9; + -moz-border-radius: 4px 4px 4px 4px; + -webkit-border-radius: 4px 4px 4px 4px; + border-radius: 4px 4px 4px 4px; +} +.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: 12px; + -moz-border-radius: 4px 4px 4px 4px; + -webkit-border-radius: 4px 4px 4px 4px; + border-radius: 4px 4px 4px 4px; +} +.switchbutton-on { + background: #00bbee; + color: #fff; +} +.switchbutton-off { + background-color: #ffffff; + color: #404040; +} +.switchbutton-on, +.switchbutton-reversed .switchbutton-off { + -moz-border-radius: 4px 0 0 4px; + -webkit-border-radius: 4px 0 0 4px; + border-radius: 4px 0 0 4px; +} +.switchbutton-off, +.switchbutton-reversed .switchbutton-on { + -moz-border-radius: 0 4px 4px 0; + -webkit-border-radius: 0 4px 4px 0; + border-radius: 0 4px 4px 0; +} +.switchbutton-handle { + position: absolute; + top: 0; + left: 50%; + background-color: #ffffff; + color: #404040; + border: 1px solid #d9d9d9; + -moz-box-shadow: 0 0 3px 0 #d9d9d9; + -webkit-box-shadow: 0 0 3px 0 #d9d9d9; + box-shadow: 0 0 3px 0 #d9d9d9; +} +.switchbutton-value { + position: absolute; + top: 0; + left: -5000px; +} +.switchbutton-disabled { + opacity: 0.5; + filter: alpha(opacity=50); +} +.switchbutton-disabled, +.switchbutton-readonly { + cursor: default; +} +.l-btn { + box-shadow: 0 1px 2px rgba(0,0,0,0.2), 0 1px 1px rgba(0,0,0,0.05); +} +.l-btn:active { + box-shadow: 0 6px 17px 0 rgba(235,235,235,0.3); +} +.l-btn-selected { + box-shadow: 0 1px 2px rgba(89,205,226,0.2), 0 1px 1px rgba(89,205,226,0.05); +} +.l-btn-plain, +.l-btn-disabled, +.l-btn-disabled:active, +.textbox-button { + box-shadow: none; +} +.l-btn-selected, +.l-btn-selected:hover { + background: #00bbee; + color: #fff; +} +.l-btn-plain-selected, +.l-btn-plain-selected:hover { + background: #00bbee; +} +.m-btn-active, +.m-btn-plain-active, +.s-btn-active, +.s-btn-plain-active { + background: #00bbee; + color: #fff; +} +.menu-shadow, +.combo-p { + -moz-box-shadow: 0 1px 3px rgba(0,0,0,0.12), 0 1px 2px rgba(0,0,0,0.24); + -webkit-box-shadow: 0 1px 3px rgba(0,0,0,0.12), 0 1px 2px rgba(0,0,0,0.24); + box-shadow: 0 1px 3px rgba(0,0,0,0.12), 0 1px 2px rgba(0,0,0,0.24); + filter: none; +} +.menu-active { + border-color: transparent; + color: #fff; + background: #00bbee; +} +.menu-active-disabled { + border-color: transparent; + background: transparent; + color: #404040; +} +.window { + background-color: #fff; +} +.window-proxy { + border-color: #ccc; +} +.window-shadow { + -moz-box-shadow: 0 7px 8px -4px rgba(0,0,0,0.2), 0 13px 19px 2px rgba(0,0,0,0.14), 0 5px 24px 4px rgba(0,0,0,0.12); + -webkit-box-shadow: 0 7px 8px -4px rgba(0,0,0,0.2), 0 13px 19px 2px rgba(0,0,0,0.14), 0 5px 24px 4px rgba(0,0,0,0.12); + box-shadow: 0 7px 8px -4px rgba(0,0,0,0.2), 0 13px 19px 2px rgba(0,0,0,0.14), 0 5px 24px 4px rgba(0,0,0,0.12); + filter: none; +} +.window-mask { + background: #000; +} +.datagrid-header .datagrid-cell, +.datagrid-header .datagrid-cell-group { + color: #666; + font-weight: bold; + filter: alpha(opacity=80); + opacity: 0.80; +} +.datagrid-header td, +.datagrid-body td, +.datagrid-footer td { + border-style: solid; +} diff --git a/src/main/webapp/css/themes/material/filebox.css b/src/main/webapp/css/themes/material/filebox.css new file mode 100644 index 0000000..c6bac66 --- /dev/null +++ b/src/main/webapp/css/themes/material/filebox.css @@ -0,0 +1,20 @@ +.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; +} diff --git a/src/main/webapp/css/themes/material/images/Thumbs.db b/src/main/webapp/css/themes/material/images/Thumbs.db new file mode 100644 index 0000000000000000000000000000000000000000..5f257a2a49959543d36e2641d352572547e40e63 GIT binary patch literal 35328 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 T0gjLZeOBaa?|wA#e_!~27*z{8 literal 0 HcmV?d00001 diff --git a/src/main/webapp/css/themes/material/images/accordion_arrows.png b/src/main/webapp/css/themes/material/images/accordion_arrows.png new file mode 100644 index 0000000000000000000000000000000000000000..a0b8769cc5091d81760c7ed555ac3c3453febbfd GIT binary patch literal 125 zcmeAS@N?(olHy`uVBq!ia0vp^3P3Et!3HGD8EPYel#8c}V@SoVHq8x z8Mn?6aTf^k-V*tOYvn_ZO}fk5lvg|}E|PI9vs&aPwII@?XO4*juRBlIrj#un@>dub Yl7)&6CQe}74m6L!)78&qol`;+0Id=veEh?7!oT zn93bYIb9!43Wj)WNz0M)xYl!8U>3_OjRiss3@1j_Zvlb#iD~jUnsR3em#t_3WtUHqj%c^0} zFSrhZpjU$)YHUS-lsMx)nN8pghWK6h!524#*oXjC@NjHF9H1y2K%G?c=lr%4eY%ue zT+7R9Pld<2<$C}OAU0HZIJPqD0RA&Sip042zF(tA4uaUhZ>jL`*HN0POocjDIidNRbTZ#@zvW7@I c5>Ct23v;ttA1D3-v;Y7A07*qoM6N<$f&+eyE&u=k literal 0 HcmV?d00001 diff --git a/src/main/webapp/css/themes/material/images/datebox_arrow.png b/src/main/webapp/css/themes/material/images/datebox_arrow.png new file mode 100644 index 0000000000000000000000000000000000000000..783c83357fdf90a1c7c024358e1d768b5c09c135 GIT binary patch literal 626 zcmV-&0*(ENP)5OC%H;f`~O(q$Q#t2<^v$A>fbmv%e#dKTwK=Ku{5lS|}<-`a#7b zzTCOnnT>at)D}AMFuOZ5&%EqFN(lyumd$2ASF6=;nM~%2?gqc@U=#|4PqkX@EBo-9 z7pD#bO_RUa>*faM`8;MYfVi$JnB-zcBFc6gjl$d!bF98Q!!!(Z1_R~P?e!pt#6CHJ9S&n_n&@=9 z%GP;!@Co4c*at+6vNz7o(6en^Q1%qHrc;1)9IRaz-$@S$Z-qdC^ds3X0NvQH;KS)D z-dh&rW&@X;1cS(45z)J&BVt+tv&GMVJ%!EiW) zLBGZW)#Z+gl-Lih&?>X3SS-S#ujQ;9JRXmIB7X)8`d6ETj)D#Q2+$s|<_b7-B9Xvq zwNfqlEp%y3$uY`h{Y$(Gn5@}sqEsq95lpAkFO5dyBmP6^H-51G4J|rN2Ujt<`2YX_ M07*qoM6N<$fWs*_M~|PZK4f_B}P-f8$r|z#h zE+)9D_?OzcE{A)9cRCb`94D|RR5VOsbIEjx-=1{JpsQ;^Px3ZX?(@vc^nEOU2KU{_ gJ$cDa*@;a`BkgHpqSBTGpgR~mUHx3vIVCg!07Oqo9{>OV literal 0 HcmV?d00001 diff --git a/src/main/webapp/css/themes/material/images/linkbutton_bg.png b/src/main/webapp/css/themes/material/images/linkbutton_bg.png new file mode 100644 index 0000000000000000000000000000000000000000..fc66bd2cd24047b8377342365a1df3846327ecde GIT binary patch literal 1274 zcmVc6j2;SWMDuL>F^vlqEUI{oOgO!xNf*11TukM z6kTZ3V2qd3<~<$H&Lrt?SpXUxF5Zb^}(={r!EHE+$QMdH|XZ zSYbMyc0tQc3qbP$tG{U_Jyg>I(0srOscEGU?-T)4AzuS$_2J>6`+BJ50YDY<^>2vV z+uI880P2ui(hyHiPrK$)CkbHg=kD&V3^8pD z0v3QOB&8eT@87?rgaGPrb#+ySxU;jP=nkL`nZ_{0e*BD+1Tc5b&d$oLo}8R$90gF1 z^ij>~#>R%HIRNUB_kgpQ+Lg!80Gbb2saY8>1EBeUm7A3TegK*dSciv)Wqp0!h-3im z1+1f^qq4iZ+ZEMUS63~e0I+zh`2rwd0l@!F(!7sM%_`|&0+*B!z{1(u+A9BIU&~T- z2he=L>dmc7TLXZFkeTeCHMcE|qX51{z>0ZC=xGjss*FaXGOMX+dHf8Z8hL6ntGQ_z zF9V<&dwY9jh`D7czyqj4g3S=~)zFA!0980RI4DC*Ez1%L09D8%=OHF&S@Q*;3bRfe zeL2-ZzyeT(Av4`$>R3`j096>WH7BOELD3yR70%Dk%Mk4)1W=73OH{L_UgIc$YFu7k zmRaq`&NxK?Rk*skDzlhL4IV!OsLJ*Ab@{BRT^TO}pgQC6xO~R6G8o_oU?C)>`xlc2 zriH~zU-;g$PyPA_&X!OBSU6SIeB~eKNAhF&(fs&F|1n9<+Yj^2T+4Dj%UFjr zZ%rnX^7Qmn0ANwP308gILtaQfK0Z1j0Br`Wq<=~Ka+?BxW&>7kRtZ+q>C~wJXg6S` zW|cJ1%?d#C0V@Ue)T{uY>425ig?tTsczEc(0+M8_c7^t|!sm-1Nw(}#nnLr?FgGlc zY}ut0+w(d)Uk6FDWtY;*aCdjteIX>tmhA#o+8PqHNU~+SlrTfyKRaNHBx~Ch-FJ3& z%B(Y&NwStp{rH$6Yj{YqhR=Gk~Mtw_&K$#yeTBf z7JV~bCN(VwL$c|B^>Topn-X{+7;S!yV~2^ zBgv-iMkME}U;-COwrsbABDvwg!2wA&ZMWttf5^jTl5E*7V41=|@=Hu>NJ^O8(7b4p z&ChgC(LF5>Md#{+4LgS{%KA|H(Xv`l4P^KdiBKB*_;1&m|Q7!{|O$ k%vVK{T!hwqk^D0L0mO==@4IV9lK=n!07*qoM6N<$f|Ge;n*aa+ literal 0 HcmV?d00001 diff --git a/src/main/webapp/css/themes/material/images/loading.gif b/src/main/webapp/css/themes/material/images/loading.gif new file mode 100644 index 0000000000000000000000000000000000000000..68f01d04813c1f622810864a3aaa04b4a17ac8f9 GIT binary patch literal 1737 zcmaKsX;2e)7>CzDa{xjjy99|1A!tC(kfocDi)<1$AxHpOQ4k^l!Vx1W6x7<&|FYXU zqO4jEiU-!VR1p+Xj1?4-iuI_J;!&?!+ghg|JJad3U)pMGzcKxNeCM6tJnuX+uPvX@ zZY|=AHdxt2Xr2y*)5|c6#FSEuyJ+Y3Z&l z2hJWo`9;lJ$6wzSoW60tqkB|d$oiO*d-^85^ojn{*NR{MP*%{@H*#gihZ8BKyB68E z-MIbjgNNV0y5khpJ^Jv`51aR%={<4jhaVq5e*9D5+*hL)XCHn4{^d%hPu@?KpKbc=eN!D=XUjDmH#n{YHNS zHCX6BV)yn2CuTNujhN~V+`RKpyXO6^ht92eqhIIlQLfz6eeCnH_C7`NPNrw9ks366 z4xX9(`s~z=+1uX^ocZ$2_fBs=JihPfWYufOIuD&AU-@`>>qn~cy$1)T7CU!5z2(U8 z)9Kt9)l`f6?NU41j6XbXfR{OHwm|T4}&24tIf+!C-g~6cQfY2^n$?AT&ZW zgqm`}3-jS2NS6n=k;sr5Hv(Q%%n)qW0X|neWVBd;Ko}d(=u%?{O0-a>kSI}shOd9n z5top}%gUCf=>?tg;*;#7!^HOL3k$fMxd=O-6Y4@%u8LS)C1D_a?27R6^vcC+6tttL z)GmTahbyJB!xmcHL#ya8ZXyfRl)a!N0BJE0y3BBfAV5;#=K&Z2VkaKZ)?9`1h5P_% znt*b}%j1|#j`b|aQDx@~wA#$PYRN2xE6UO;;vE(@$&xww-s8fZ5HmJ(eJ*rQrDbaawDbrfe_8F(wq{ge?)qQG`aXV;r(*6EM|ESje;52aFmrX!f=Pw^2oGQX$1|o4yts|b_5@w_kNwtl{wDP#JGMvIp#!SYX?Wq9S&`&_ZwkgGH5CLB7DEGJ6=R4J~p3Z4i^A}hs=-uZeD zs92l6u@**R$~L()G{5N8*7cE5-q$SCo`q4|NSVF*+A7&xZnypm$EdXgf)E%(VJHFD zSgi(H!D!(;9Zcc#GrCCJh=RlvXBQ-hv4Vodse`a32ZUFWgP5ZhM5LeV(#D^H8p@Lg ztra5R32z@1rQv{6u&RZL5%Z@Ye{q|t#6aM_1hIrpl@)oH6}os*cbAQywa{5<`ekzW O1il%9bk82&KlvLjD^%40 literal 0 HcmV?d00001 diff --git a/src/main/webapp/css/themes/material/images/menu_arrows.png b/src/main/webapp/css/themes/material/images/menu_arrows.png new file mode 100644 index 0000000000000000000000000000000000000000..b986842e7e4044caed18edbcb4b376a4bb915623 GIT binary patch literal 160 zcmeAS@N?(olHy`uVBq!ia0vp^4nQox!3HFkJ+IURQt6&9jv*Dd-cB{-J7B=U{PTZ! zWrKV9%Z3|Wt5t$(gq+#d+-OocB$0fsr9DfRx52vPhSu$$+yXuy+69hDZ54DDTxx#r zL7>-12UT01v)>tZ+;HI4pDNf?@KK~EC$@35ykmXyu^HJF3})N>8P9Uwo&~g$!PC{x JWt~$(697!FIeGv9 literal 0 HcmV?d00001 diff --git a/src/main/webapp/css/themes/material/images/messager_icons.png b/src/main/webapp/css/themes/material/images/messager_icons.png new file mode 100644 index 0000000000000000000000000000000000000000..62c18c135860351063ebaabe8c0f4df7664b8f65 GIT binary patch literal 6116 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 literal 0 HcmV?d00001 diff --git a/src/main/webapp/css/themes/material/images/passwordbox_open.png b/src/main/webapp/css/themes/material/images/passwordbox_open.png new file mode 100644 index 0000000000000000000000000000000000000000..0f25d535e05b22b406fd72647611aace9cfa6249 GIT binary patch literal 160 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`>7Fi*Ar-fh6C~yxIB_Cl)5eV- z>r;4yl-<@d?s6;P338s2rmQ?!Qz1HW#so#C46Xx7Cq5}K`Svo!h;^q;DRB5^Z?=`` zg<12Qetm(ByO<;&a5^L{7TnL>!KiVsAxlibJl4>NC!c|#Jtt+3rSZgWpp^`su6{1- HoD!M<3i~r2 literal 0 HcmV?d00001 diff --git a/src/main/webapp/css/themes/material/images/searchbox_button.png b/src/main/webapp/css/themes/material/images/searchbox_button.png new file mode 100644 index 0000000000000000000000000000000000000000..6dd1931589b453f6cc9772fd1851d8705d6b6631 GIT binary patch literal 813 zcmV+|1JeA7P)lXvaa)1B=8vtU6i;3jw7+Lm8D5$Z@i10EnF)=bcefw4K z$^E-CUfjQG`svfBbfD6|R#sLFj6lo3FG$G6@;ee>>~6i|H^5OY8c00W#fi<*1vzh{0&qu3dB`V0{{XDY`}(1n>S9M(9!zw#!&`A z#;*+0{6GVMSeWGp!`o{o8NPge#o%jgs54WT$qnQYpsyGNpauX05F;oJfZ`Pdw6!$j zynTH0RMa&!n3$Pa9zVGEY{&L(3qnPBl_DG6<9Xk0`Fl3`LiD4@pH{vDsxJWQ1qdJp zEJ>M}osCtQlY?CgW>F{;gVK#SmgoOZnEn5J%EtIXaWQXAO>Rdf)WFR;gt~f zXaA3z{{L{q=l48y!32yJ3i0hJ2BS=^}@sXzH{F9Iq&OW375;I7CG-}Vr|aF#l<(fySwu2>`YdxRW*W0f#2un=W5Jmvoe`XCK%I_Y++#`fwE+= zSd{sEULGDE%A=#BOW<6gP*6VfMa^fr8qe`5w%)P0a^Y9WGTw! zvI^|$>l@1Da^Ke1*T3RdY7KqM%gaBb(P+oP!GW;b?ZRfW3Bxc1H@GCaHK#XhZ*Lc= zRBC@>V&W#x&B5%(#>OW5`};d6I5Qw218EG_q@1gtr!Nl*v7yn?(MPMRt4SNy%--JK zanm#f^bw^}Nr7b(EUg}TUi(2;)deX10lAo=83+VA(QksJI6(zwptET-y~avN=J9w$ zI2`W5lG|aOkjY7(&!@;Jx*nUA>~J`Q)9L&(G8y=g$3a4YgD7z)5>gXQNKhw=uR0zF z#jHruh)gDv=bj|2ZES4(fEM?I!JyKqo=}sj-fBYTcDt4KXq)eFQH}wW`vh%Mla}#@ z@Mb`C)x@YkK{xd2>8ZLg+E!Lps$Q@6DY-~!0=Gs+Mm~_JnW1EbX2uxClEdN>Y@I78 z=ke_9?7sX@o0*x}M{JB77MIXj_MmNE%+1Xe{*{crh)9={dR(U;y-{jrxUXmG%Gt002ovPDHLkV1hy(sXhPz literal 0 HcmV?d00001 diff --git a/src/main/webapp/css/themes/material/images/spinner_arrows.png b/src/main/webapp/css/themes/material/images/spinner_arrows.png new file mode 100644 index 0000000000000000000000000000000000000000..b1773c24b20b30318e38c4b84690e3d0010c9c43 GIT binary patch literal 149 zcmeAS@N?(olHy`uVBq!ia0vp^4nQox!3HFkJ+IURQZb$`jv*Ddk`p9Y7bl4DgeBzU z{E=^QXHHmRmEiEUJ<_jB`NK-}t7{l}8A{FvOK}{T)p$BC>8|6-x-MIXOa{IRh5%#E x$&;(vVs#x>vb(K5c#%QkA)^788{=C>2L8QE5AM%P*8@KmF984m literal 0 HcmV?d00001 diff --git a/src/main/webapp/css/themes/material/images/tabs_icons.png b/src/main/webapp/css/themes/material/images/tabs_icons.png new file mode 100644 index 0000000000000000000000000000000000000000..dfa10f7d78b3dc6965ef86957a0e4345ec000bc6 GIT binary patch literal 144 zcmeAS@N?(olHy`uVBq!ia0vp^20$#p!3HD)*8SNCq{2O2978H@B_~L*E^a70aO1`g zdpoacw*Y(&nwsF2UyID`n8m&$nZ<^krzppre_*0C6=+@buQ_y%c^L~IL^<_ t&+}8oM91jk1`W4%S64GGH^xE+hOnLmClB8dn+LRl!PC{xWt~$(69Df$H1z-g literal 0 HcmV?d00001 diff --git a/src/main/webapp/css/themes/material/images/tagbox_icons.png b/src/main/webapp/css/themes/material/images/tagbox_icons.png new file mode 100644 index 0000000000000000000000000000000000000000..8ec64360884b3fdb81255ad6074bc08ed183232c GIT binary patch literal 133 zcmeAS@N?(olHy`uVBq!ia0vp^3P3Et!3HGD8EPYel#i#2V@SoVtb9vwNkrdSr%AfUpK=5(o}_e|{SG6u6f5&Q g4t5*qz9vC-hN^}472i&@1{u%b>FVdQ&MBb@08Zm4@c;k- literal 0 HcmV?d00001 diff --git a/src/main/webapp/css/themes/material/images/tree_icons.png b/src/main/webapp/css/themes/material/images/tree_icons.png new file mode 100644 index 0000000000000000000000000000000000000000..e9be4f3a9965e49a4e4078f8c53f486d761a7468 GIT binary patch literal 3115 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 literal 0 HcmV?d00001 diff --git a/src/main/webapp/css/themes/material/images/validatebox_warning.png b/src/main/webapp/css/themes/material/images/validatebox_warning.png new file mode 100644 index 0000000000000000000000000000000000000000..2b3d4f05babf3f82b146350e96570fac02075de0 GIT binary patch literal 921 zcmV;K17`e*P)nRv1_mBsMY*-M^XCf)eflW5 z|MC^)Hw+AW{sHCCF+cz@{fF8J!+#-kxoSv=7^|!zgOQUngSQ}mDo|J)n+pH}hzZ#= zr~y18$_m-?9v%$;?mu8);}>9vFgFvDXJDwrW&l6{p}625M66yTFhGz^K$w9^O$BHi zFN2Ym7DIple*#cW4BY^L0Al(Jbv6k9U|^6IQBp{hx3XdQ&CJ4Z_|YSVr@XujY(PVT zlok1<85nBO4FCurumK>O|A07*jFlSRUcxLAQVcIR*co#3@)&jj4Pj7KXRri%#h;fa z4ya5O*#Lk5Vq!q}T~=CGH(uV-hJk^fkAYoGjN#AMuMF($>N=giWG}IXse|=+c=i>7HEg>%*E%fLD!-uy|85n^6W?^Dt(9zXp5EB&z+w>_knBmdiKMbzi z?A!`WOl>e100a=&05*1xZdFls?*HtZ48H?o7=HW%ivIu45E2~BASWx!@DIpmv9e}h zaPwji|L}pqor@y`=yxrU0RRES^qYY}O;TRcU+DKIhL4`%3_nyf8U6tS<<-ZJ40D$( zWjJ%`G6NIPHNP2{7am*Fp% z{>ShK#0G`~kjd~57_BU.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; +} +.panel-hleft>.panel-header .panel-title, +.panel-hright>.panel-header .panel-title { + position: absolute; + min-width: 16px; + left: 21px; + 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: 5px; + 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; +} diff --git a/src/main/webapp/css/themes/material/passwordbox.css b/src/main/webapp/css/themes/material/passwordbox.css new file mode 100644 index 0000000..92c9ce5 --- /dev/null +++ b/src/main/webapp/css/themes/material/passwordbox.css @@ -0,0 +1,6 @@ +.passwordbox-open { + background: url('images/passwordbox_open.png') no-repeat center center; +} +.passwordbox-close { + background: url('images/passwordbox_close.png') no-repeat center center; +} diff --git a/src/main/webapp/css/themes/material/progressbar.css b/src/main/webapp/css/themes/material/progressbar.css new file mode 100644 index 0000000..1690673 --- /dev/null +++ b/src/main/webapp/css/themes/material/progressbar.css @@ -0,0 +1,32 @@ +.progressbar { + border-width: 1px; + border-style: solid; + -moz-border-radius: 4px 4px 4px 4px; + -webkit-border-radius: 4px 4px 4px 4px; + border-radius: 4px 4px 4px 4px; + overflow: hidden; + position: relative; +} +.progressbar-text { + text-align: center; + position: absolute; +} +.progressbar-value { + position: relative; + overflow: hidden; + width: 0; + -moz-border-radius: 4px 0 0 4px; + -webkit-border-radius: 4px 0 0 4px; + border-radius: 4px 0 0 4px; +} +.progressbar { + border-color: #ddd; +} +.progressbar-text { + color: #404040; + font-size: 12px; +} +.progressbar-value .progressbar-text { + background-color: #00bbee; + color: #fff; +} diff --git a/src/main/webapp/css/themes/material/propertygrid.css b/src/main/webapp/css/themes/material/propertygrid.css new file mode 100644 index 0000000..fbd2c7c --- /dev/null +++ b/src/main/webapp/css/themes/material/propertygrid.css @@ -0,0 +1,28 @@ +.propertygrid .datagrid-view1 .datagrid-body td { + padding-bottom: 1px; + border-width: 0 1px 0 0; +} +.propertygrid .datagrid-group { + height: 21px; + 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: #eee; +} +.propertygrid .datagrid-view1 .datagrid-group { + border-color: #f5f5f5; +} +.propertygrid .datagrid-view2 .datagrid-group { + border-color: #eee; +} +.propertygrid .datagrid-group, +.propertygrid .datagrid-view1 .datagrid-body, +.propertygrid .datagrid-view1 .datagrid-row-over, +.propertygrid .datagrid-view1 .datagrid-row-selected { + background: #f5f5f5; +} diff --git a/src/main/webapp/css/themes/material/searchbox.css b/src/main/webapp/css/themes/material/searchbox.css new file mode 100644 index 0000000..54ad885 --- /dev/null +++ b/src/main/webapp/css/themes/material/searchbox.css @@ -0,0 +1,61 @@ +.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: #f5f5f5; +} +.searchbox .l-btn-plain-disabled, +.searchbox .l-btn-plain-disabled:hover { + opacity: 0.5; + filter: alpha(opacity=50); +} diff --git a/src/main/webapp/css/themes/material/slider.css b/src/main/webapp/css/themes/material/slider.css new file mode 100644 index 0000000..1e471ef --- /dev/null +++ b/src/main/webapp/css/themes/material/slider.css @@ -0,0 +1,101 @@ +.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: 4px; +} +.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: 12px; + 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: 12px; +} +.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: #ddd; + background: #f5f5f5; +} +.slider-rule span { + border-color: #ddd; +} +.slider-rulelabel span { + color: #404040; +} diff --git a/src/main/webapp/css/themes/material/spinner.css b/src/main/webapp/css/themes/material/spinner.css new file mode 100644 index 0000000..15098d1 --- /dev/null +++ b/src/main/webapp/css/themes/material/spinner.css @@ -0,0 +1,58 @@ +.spinner-arrow { + background-color: #f5f5f5; + display: inline-block; + overflow: hidden; + vertical-align: top; + margin: 0; + padding: 0; + opacity: 1.0; + filter: alpha(opacity=100); + width: 18px; +} +.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: #404040; + outline-style: none; +} +.spinner-arrow-hover { + background-color: #eee; + opacity: 1.0; + filter: alpha(opacity=100); +} +.spinner-arrow-up:hover, +.spinner-arrow-down:hover { + opacity: 1.0; + filter: alpha(opacity=100); + background-color: #eee; +} +.textbox-icon-disabled .spinner-arrow-up:hover, +.textbox-icon-disabled .spinner-arrow-down:hover { + opacity: 0.6; + filter: alpha(opacity=60); + background-color: #f5f5f5; + 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; +} +.spinner-arrow-down { + background: url('images/spinner_arrows.png') no-repeat -15px center; +} +.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; +} diff --git a/src/main/webapp/css/themes/material/splitbutton.css b/src/main/webapp/css/themes/material/splitbutton.css new file mode 100644 index 0000000..2ad86f7 --- /dev/null +++ b/src/main/webapp/css/themes/material/splitbutton.css @@ -0,0 +1,12 @@ +.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: #ccc; + border-width: 0 0 0 1px; +} diff --git a/src/main/webapp/css/themes/material/switchbutton.css b/src/main/webapp/css/themes/material/switchbutton.css new file mode 100644 index 0000000..8e3ddb7 --- /dev/null +++ b/src/main/webapp/css/themes/material/switchbutton.css @@ -0,0 +1,77 @@ +.switchbutton { + text-decoration: none; + display: inline-block; + overflow: hidden; + vertical-align: middle; + margin: 0; + padding: 0; + cursor: pointer; + background: #d9d9d9; + border: 1px solid #d9d9d9; + -moz-border-radius: 4px 4px 4px 4px; + -webkit-border-radius: 4px 4px 4px 4px; + border-radius: 4px 4px 4px 4px; +} +.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: 12px; + -moz-border-radius: 4px 4px 4px 4px; + -webkit-border-radius: 4px 4px 4px 4px; + border-radius: 4px 4px 4px 4px; +} +.switchbutton-on { + background: #00bbee; + color: #fff; +} +.switchbutton-off { + background-color: #ffffff; + color: #404040; +} +.switchbutton-on, +.switchbutton-reversed .switchbutton-off { + -moz-border-radius: 4px 0 0 4px; + -webkit-border-radius: 4px 0 0 4px; + border-radius: 4px 0 0 4px; +} +.switchbutton-off, +.switchbutton-reversed .switchbutton-on { + -moz-border-radius: 0 4px 4px 0; + -webkit-border-radius: 0 4px 4px 0; + border-radius: 0 4px 4px 0; +} +.switchbutton-handle { + position: absolute; + top: 0; + left: 50%; + background-color: #ffffff; + color: #404040; + border: 1px solid #d9d9d9; + -moz-box-shadow: 0 0 3px 0 #d9d9d9; + -webkit-box-shadow: 0 0 3px 0 #d9d9d9; + box-shadow: 0 0 3px 0 #d9d9d9; +} +.switchbutton-value { + position: absolute; + top: 0; + left: -5000px; +} +.switchbutton-disabled { + opacity: 0.5; + filter: alpha(opacity=50); +} +.switchbutton-disabled, +.switchbutton-readonly { + cursor: default; +} diff --git a/src/main/webapp/css/themes/material/tabs.css b/src/main/webapp/css/themes/material/tabs.css new file mode 100644 index 0000000..2ea78d2 --- /dev/null +++ b/src/main/webapp/css/themes/material/tabs.css @@ -0,0 +1,377 @@ +.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 a.tabs-inner { + display: inline-block; + text-decoration: none; + 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: 4px 4px 0 0; + -webkit-border-radius: 4px 4px 0 0; + border-radius: 4px 4px 0 0; +} +.tabs li.tabs-selected a.tabs-inner { + font-weight: bold; + outline: none; +} +.tabs li.tabs-selected a:hover.tabs-inner { + 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: 12px; +} +.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 a.tabs-inner { + -moz-border-radius: 0 0 4px 4px; + -webkit-border-radius: 0 0 4px 4px; + border-radius: 0 0 4px 4px; +} +.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 a.tabs-inner { + padding-left: 0; + padding-right: 0; +} +.tabs-header-left .tabs li a.tabs-inner { + display: block; + text-align: left; + padding-left: 10px; + padding-right: 10px; + -moz-border-radius: 4px 0 0 4px; + -webkit-border-radius: 4px 0 0 4px; + border-radius: 4px 0 0 4px; +} +.tabs-header-right .tabs li a.tabs-inner { + display: block; + text-align: left; + padding-left: 10px; + padding-right: 10px; + -moz-border-radius: 0 4px 4px 0; + -webkit-border-radius: 0 4px 4px 0; + border-radius: 0 4px 4px 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 a.tabs-inner { + -moz-border-radius: 4px 4px 4px 4px; + -webkit-border-radius: 4px 4px 4px 4px; + border-radius: 4px 4px 4px 4px; +} +.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: #f5f5f5 url('images/tabs_icons.png') no-repeat 1px center; +} +.tabs-scroller-right { + background: #f5f5f5 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 a.tabs-inner:hover { + background: #eee; + color: #404040; + filter: none; +} +.tabs li.tabs-selected a.tabs-inner { + background-color: #ffffff; + color: #000000; +} +.tabs li a.tabs-inner { + color: #000000; + background-color: #f5f5f5; +} +.tabs-header, +.tabs-tool { + background-color: #f5f5f5; +} +.tabs-header-plain { + background: transparent; +} +.tabs-header, +.tabs-scroller-left, +.tabs-scroller-right, +.tabs-tool, +.tabs, +.tabs-panels, +.tabs li a.tabs-inner, +.tabs li.tabs-selected a.tabs-inner, +.tabs-header-bottom .tabs li.tabs-selected a.tabs-inner, +.tabs-header-left .tabs li.tabs-selected a.tabs-inner, +.tabs-header-right .tabs li.tabs-selected a.tabs-inner { + border-color: #ddd; +} +.tabs-p-tool a:hover, +.tabs li a:hover.tabs-close, +.tabs-scroller-over { + background-color: #eee; +} +.tabs li.tabs-selected a.tabs-inner { + border-bottom: 1px solid #ffffff; +} +.tabs-header-bottom .tabs li.tabs-selected a.tabs-inner { + border-top: 1px solid #ffffff; +} +.tabs-header-left .tabs li.tabs-selected a.tabs-inner { + border-right: 1px solid #ffffff; +} +.tabs-header-right .tabs li.tabs-selected a.tabs-inner { + border-left: 1px solid #ffffff; +} +.tabs-header .tabs-pill li.tabs-selected a.tabs-inner { + background: #00bbee; + color: #fff; + filter: none; + border-color: #ddd; +} diff --git a/src/main/webapp/css/themes/material/tagbox.css b/src/main/webapp/css/themes/material/tagbox.css new file mode 100644 index 0000000..16ff414 --- /dev/null +++ b/src/main/webapp/css/themes/material/tagbox.css @@ -0,0 +1,44 @@ +.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: 4px 4px 4px 4px; + -webkit-border-radius: 4px 4px 4px 4px; + border-radius: 4px 4px 4px 4px; + background: #eee; + color: #404040; +} +.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); +} diff --git a/src/main/webapp/css/themes/material/textbox.css b/src/main/webapp/css/themes/material/textbox.css new file mode 100644 index 0000000..48bd54d --- /dev/null +++ b/src/main/webapp/css/themes/material/textbox.css @@ -0,0 +1,139 @@ +.textbox { + position: relative; + border: 1px solid #ddd; + background-color: #fff; + vertical-align: middle; + display: inline-block; + overflow: hidden; + white-space: nowrap; + margin: 0; + padding: 0; + -moz-border-radius: 4px 4px 4px 4px; + -webkit-border-radius: 4px 4px 4px 4px; + border-radius: 4px 4px 4px 4px; +} +.textbox .textbox-text { + font-size: 12px; + border: 0; + margin: 0; + padding: 4px; + white-space: normal; + vertical-align: top; + outline-style: none; + resize: none; + -moz-border-radius: 4px 4px 4px 4px; + -webkit-border-radius: 4px 4px 4px 4px; + border-radius: 4px 4px 4px 4px; +} +.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: 22px; + line-height: 22px; + 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: #c4c4c4; + -moz-box-shadow: 0 0 3px 0 #ddd; + -webkit-box-shadow: 0 0 3px 0 #ddd; + box-shadow: 0 0 3px 0 #ddd; +} +.textbox-invalid { + border-color: #ffa8a8; + background-color: #fff; +} diff --git a/src/main/webapp/css/themes/material/tooltip.css b/src/main/webapp/css/themes/material/tooltip.css new file mode 100644 index 0000000..18aa87c --- /dev/null +++ b/src/main/webapp/css/themes/material/tooltip.css @@ -0,0 +1,103 @@ +.tooltip { + position: absolute; + display: none; + z-index: 9900000; + outline: none; + opacity: 1; + filter: alpha(opacity=100); + padding: 5px; + border-width: 1px; + border-style: solid; + border-radius: 5px; + -moz-border-radius: 4px 4px 4px 4px; + -webkit-border-radius: 4px 4px 4px 4px; + border-radius: 4px 4px 4px 4px; +} +.tooltip-content { + font-size: 12px; +} +.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; + _border-color: tomato; + _filter: chroma(color=tomato); +} +.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: #ddd; + color: #404040; +} +.tooltip-right .tooltip-arrow-outer { + border-right-color: #ddd; +} +.tooltip-right .tooltip-arrow { + border-right-color: #ffffff; +} +.tooltip-left .tooltip-arrow-outer { + border-left-color: #ddd; +} +.tooltip-left .tooltip-arrow { + border-left-color: #ffffff; +} +.tooltip-top .tooltip-arrow-outer { + border-top-color: #ddd; +} +.tooltip-top .tooltip-arrow { + border-top-color: #ffffff; +} +.tooltip-bottom .tooltip-arrow-outer { + border-bottom-color: #ddd; +} +.tooltip-bottom .tooltip-arrow { + border-bottom-color: #ffffff; +} diff --git a/src/main/webapp/css/themes/material/tree.css b/src/main/webapp/css/themes/material/tree.css new file mode 100644 index 0000000..aa34571 --- /dev/null +++ b/src/main/webapp/css/themes/material/tree.css @@ -0,0 +1,161 @@ +.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: 18px; + 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; + vertical-align: top; + overflow: hidden; +} +.tree-expanded { + background: url('images/tree_icons.png') no-repeat -18px 0px; +} +.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; +} +.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; +} +.tree-folder-open { + background: url('images/tree_icons.png') no-repeat -224px 0; +} +.tree-file { + background: url('images/tree_icons.png') no-repeat -240px 0; +} +.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; +} +.tree-title { + font-size: 12px; + display: inline-block; + text-decoration: none; + vertical-align: top; + white-space: nowrap; + padding: 0 2px; + height: 18px; + line-height: 18px; +} +.tree-node-proxy { + font-size: 12px; + 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 #ddd; + font-size: 12px; + line-height: 16px; + padding: 0 4px; + margin: 0; + width: 80px; + outline-style: none; + vertical-align: top; + position: absolute; + top: 0; +} +.tree-node-proxy { + background-color: #ffffff; + color: #404040; + border-color: #ddd; +} +.tree-node-hover { + background: #eee; + color: #404040; +} +.tree-node-selected { + background: #00bbee; + color: #fff; +} +.tree-node-hidden { + display: none; +} diff --git a/src/main/webapp/css/themes/material/validatebox.css b/src/main/webapp/css/themes/material/validatebox.css new file mode 100644 index 0000000..5911752 --- /dev/null +++ b/src/main/webapp/css/themes/material/validatebox.css @@ -0,0 +1,5 @@ +.validatebox-invalid { + border-color: #ffa8a8; + background-color: #fff; + color: #404040; +} diff --git a/src/main/webapp/css/themes/material/window.css b/src/main/webapp/css/themes/material/window.css new file mode 100644 index 0000000..5bd6c46 --- /dev/null +++ b/src/main/webapp/css/themes/material/window.css @@ -0,0 +1,177 @@ +.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: 4px 4px 4px 4px; + -webkit-border-radius: 4px 4px 4px 4px; + border-radius: 4px 4px 4px 4px; +} +.window-shadow { + background: #fafafa; + -moz-box-shadow: 2px 2px 3px #fafafa; + -webkit-box-shadow: 2px 2px 3px #fafafa; + box-shadow: 2px 2px 3px #fafafa; + filter: progid:DXImageTransform.Microsoft.Blur(pixelRadius=2,MakeShadow=false,ShadowOpacity=0.2); +} +.window, +.window .window-body { + border-color: #ddd; +} +.window { + background-color: #f5f5f5; +} +.window-proxy { + border: 1px dashed #ddd; +} +.window-proxy-mask, +.window-mask { + background: #eee; +} +.window .panel-footer { + border: 1px solid #ddd; + 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-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; +} diff --git a/src/main/webapp/css/themes/metro/accordion.css b/src/main/webapp/css/themes/metro/accordion.css new file mode 100644 index 0000000..fb9f85e --- /dev/null +++ b/src/main/webapp/css/themes/metro/accordion.css @@ -0,0 +1,89 @@ +.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; +} +.accordion-expand { + background: url('images/accordion_arrows.png') no-repeat -16px 0; +} +.accordion { + background: #fff; + border-color: #ddd; +} +.accordion .accordion-header { + background: #ffffff; + filter: none; +} +.accordion .accordion-header-selected { + background: #CCE6FF; +} +.accordion .accordion-header-selected .panel-title { + color: #000; +} +.accordion .panel-last > .accordion-header { + border-bottom-color: #ffffff; +} +.accordion .panel-last > .accordion-body { + border-bottom-color: #fff; +} +.accordion .panel-last > .accordion-header-selected, +.accordion .panel-last > .accordion-header-border { + border-bottom-color: #ddd; +} +.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: #ffffff; +} +.accordion> .panel-hleft.panel-last > .accordion-body { + border-right-color: #fff; +} +.accordion> .panel-hleft.panel-last > .accordion-header-selected, +.accordion> .panel-hleft.panel-last > .accordion-header-border { + border-right-color: #ddd; +} +.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: #ffffff; +} +.accordion> .panel-hright.panel-last > .accordion-body { + border-left-color: #fff; +} +.accordion> .panel-hright.panel-last > .accordion-header-selected, +.accordion> .panel-hright.panel-last > .accordion-header-border { + border-left-color: #ddd; +} diff --git a/src/main/webapp/css/themes/metro/calendar.css b/src/main/webapp/css/themes/metro/calendar.css new file mode 100644 index 0000000..42f7366 --- /dev/null +++ b/src/main/webapp/css/themes/metro/calendar.css @@ -0,0 +1,202 @@ +.calendar { + border-width: 1px; + border-style: solid; + padding: 1px; + overflow: hidden; +} +.calendar table { + table-layout: fixed; + border-collapse: separate; + font-size: 12px; + width: 100%; + height: 100%; +} +.calendar table td, +.calendar table th { + font-size: 12px; +} +.calendar-noborder { + border: 0; +} +.calendar-header { + position: relative; + height: 22px; +} +.calendar-title { + text-align: center; + height: 22px; +} +.calendar-title span { + position: relative; + display: inline-block; + top: 2px; + padding: 0 3px; + height: 18px; + line-height: 18px; + font-size: 12px; + cursor: pointer; + -moz-border-radius: 0px 0px 0px 0px; + -webkit-border-radius: 0px 0px 0px 0px; + border-radius: 0px 0px 0px 0px; +} +.calendar-prevmonth, +.calendar-nextmonth, +.calendar-prevyear, +.calendar-nextyear { + position: absolute; + top: 50%; + margin-top: -7px; + width: 14px; + height: 14px; + cursor: pointer; + font-size: 1px; + -moz-border-radius: 0px 0px 0px 0px; + -webkit-border-radius: 0px 0px 0px 0px; + border-radius: 0px 0px 0px 0px; +} +.calendar-prevmonth { + left: 20px; + background: url('images/calendar_arrows.png') no-repeat -18px -2px; +} +.calendar-nextmonth { + right: 20px; + background: url('images/calendar_arrows.png') no-repeat -34px -2px; +} +.calendar-prevyear { + left: 3px; + background: url('images/calendar_arrows.png') no-repeat -1px -2px; +} +.calendar-nextyear { + right: 3px; + background: url('images/calendar_arrows.png') no-repeat -49px -2px; +} +.calendar-body { + position: relative; +} +.calendar-body th, +.calendar-body td { + text-align: center; +} +.calendar-day { + border: 0; + padding: 1px; + cursor: pointer; + -moz-border-radius: 0px 0px 0px 0px; + -webkit-border-radius: 0px 0px 0px 0px; + border-radius: 0px 0px 0px 0px; +} +.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: 12px; + display: none; + overflow: hidden; +} +.calendar-menu-year-inner { + text-align: center; + padding-bottom: 5px; +} +.calendar-menu-year { + width: 50px; + text-align: center; + border-width: 1px; + border-style: solid; + outline-style: none; + resize: none; + margin: 0; + padding: 2px; + font-weight: bold; + font-size: 12px; + -moz-border-radius: 0px 0px 0px 0px; + -webkit-border-radius: 0px 0px 0px 0px; + border-radius: 0px 0px 0px 0px; +} +.calendar-menu-prev, +.calendar-menu-next { + display: inline-block; + width: 21px; + height: 21px; + vertical-align: top; + cursor: pointer; + -moz-border-radius: 0px 0px 0px 0px; + -webkit-border-radius: 0px 0px 0px 0px; + border-radius: 0px 0px 0px 0px; +} +.calendar-menu-prev { + margin-right: 10px; + background: url('images/calendar_arrows.png') no-repeat 2px 2px; +} +.calendar-menu-next { + margin-left: 10px; + background: url('images/calendar_arrows.png') no-repeat -45px 2px; +} +.calendar-menu-month { + text-align: center; + cursor: pointer; + font-weight: bold; + -moz-border-radius: 0px 0px 0px 0px; + -webkit-border-radius: 0px 0px 0px 0px; + border-radius: 0px 0px 0px 0px; +} +.calendar-body th, +.calendar-menu-month { + color: #919191; +} +.calendar-day { + color: #444; +} +.calendar-sunday { + color: #CC2222; +} +.calendar-saturday { + color: #00ee00; +} +.calendar-today { + color: #0000ff; +} +.calendar-menu-year { + border-color: #ddd; +} +.calendar { + border-color: #ddd; +} +.calendar-header { + background: #ffffff; +} +.calendar-body, +.calendar-menu { + background: #fff; +} +.calendar-body th { + background: #fff; + padding: 2px 0; +} +.calendar-hover, +.calendar-nav-hover, +.calendar-menu-hover { + background-color: #E6E6E6; + color: #444; +} +.calendar-hover { + border: 1px solid #ddd; + padding: 0; +} +.calendar-selected { + background-color: #CCE6FF; + color: #000; + border: 1px solid #99cdff; + padding: 0; +} diff --git a/src/main/webapp/css/themes/metro/combo.css b/src/main/webapp/css/themes/metro/combo.css new file mode 100644 index 0000000..2e89071 --- /dev/null +++ b/src/main/webapp/css/themes/metro/combo.css @@ -0,0 +1,35 @@ +.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; +} +.combo-panel { + background-color: #fff; +} +.combo-arrow { + background-color: #ffffff; +} +.combo-arrow-hover { + background-color: #E6E6E6; +} +.combo-arrow:hover { + background-color: #E6E6E6; +} +.combo .textbox-icon-disabled:hover { + cursor: default; +} diff --git a/src/main/webapp/css/themes/metro/combobox.css b/src/main/webapp/css/themes/metro/combobox.css new file mode 100644 index 0000000..eaabb31 --- /dev/null +++ b/src/main/webapp/css/themes/metro/combobox.css @@ -0,0 +1,39 @@ +.combobox-item, +.combobox-group, +.combobox-stick { + font-size: 12px; + padding: 3px; +} +.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: #E6E6E6; + color: #444; +} +.combobox-item-selected { + background-color: #CCE6FF; + color: #000; +} +.combobox-icon { + display: inline-block; + width: 16px; + height: 16px; + vertical-align: middle; + margin-right: 2px; +} diff --git a/src/main/webapp/css/themes/metro/datagrid.css b/src/main/webapp/css/themes/metro/datagrid.css new file mode 100644 index 0000000..95d409f --- /dev/null +++ b/src/main/webapp/css/themes/metro/datagrid.css @@ -0,0 +1,282 @@ +.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 #ddd; + 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: 25px; +} +.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 #ddd; + font-size: 12px; + 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: #fff url('images/loading.gif') no-repeat scroll 5px center; +} +.datagrid-header, +.datagrid-td-rownumber { + background-color: #ffffff; +} +.datagrid-cell-rownumber { + color: #444; +} +.datagrid-resize-proxy { + background: #b3b3b3; +} +.datagrid-mask { + background: #eee; +} +.datagrid-mask-msg { + border-color: #ddd; +} +.datagrid-toolbar, +.datagrid-pager { + background: #fff; +} +.datagrid-header, +.datagrid-toolbar, +.datagrid-pager, +.datagrid-footer-inner { + border-color: #ddd; +} +.datagrid-header td, +.datagrid-body td, +.datagrid-footer td { + border-color: #ddd; +} +.datagrid-htable, +.datagrid-btable, +.datagrid-ftable { + color: #444; + border-collapse: separate; +} +.datagrid-row-alt { + background: #f5f5f5; +} +.datagrid-row-over, +.datagrid-header td.datagrid-header-over { + background: #E6E6E6; + color: #444; + cursor: default; +} +.datagrid-row-selected { + background: #CCE6FF; + color: #000; +} +.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; +} diff --git a/src/main/webapp/css/themes/metro/datalist.css b/src/main/webapp/css/themes/metro/datalist.css new file mode 100644 index 0000000..8a7f949 --- /dev/null +++ b/src/main/webapp/css/themes/metro/datalist.css @@ -0,0 +1,95 @@ +.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: #ffffff; + border-style: solid; + border-width: 0 0 1px 0; + border-color: #ddd; +} +.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: #444; + 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: #ddd; +} +.m-list li>a:hover { + background: #E6E6E6; + color: #444; +} +.m-list .m-list-group { + padding: 0 4px; +} diff --git a/src/main/webapp/css/themes/metro/datebox.css b/src/main/webapp/css/themes/metro/datebox.css new file mode 100644 index 0000000..0a23595 --- /dev/null +++ b/src/main/webapp/css/themes/metro/datebox.css @@ -0,0 +1,36 @@ +.datebox-calendar-inner { + height: 180px; +} +.datebox-button { + padding: 0 5px; + text-align: center; +} +.datebox-button a { + line-height: 22px; + font-size: 12px; + 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: #fff; +} +.datebox-button a { + color: #777; +} diff --git a/src/main/webapp/css/themes/metro/dialog.css b/src/main/webapp/css/themes/metro/dialog.css new file mode 100644 index 0000000..3737479 --- /dev/null +++ b/src/main/webapp/css/themes/metro/dialog.css @@ -0,0 +1,47 @@ +.dialog-content { + overflow: auto; +} +.dialog-toolbar { + position: relative; + padding: 2px 5px; +} +.dialog-tool-separator { + float: left; + height: 24px; + border-left: 1px solid #ddd; + 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: #fff; + border-width: 1px; + border-style: solid; +} +.dialog-toolbar { + border-color: #ddd #ddd #ddd #ddd; +} +.dialog-button { + border-color: #ddd #ddd #ddd #ddd; +} +.window-thinborder .dialog-toolbar { + border-left: transparent; + border-right: transparent; + border-top-color: #fff; +} +.window-thinborder .dialog-button { + top: 0px; + padding: 5px 8px 8px 8px; + border-left: transparent; + border-right: transparent; + border-bottom: transparent; +} diff --git a/src/main/webapp/css/themes/metro/easyui.css b/src/main/webapp/css/themes/metro/easyui.css new file mode 100644 index 0000000..9f31359 --- /dev/null +++ b/src/main/webapp/css/themes/metro/easyui.css @@ -0,0 +1,3166 @@ +.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: #E6E6E6; + -moz-border-radius: -2px -2px -2px -2px; + -webkit-border-radius: -2px -2px -2px -2px; + border-radius: -2px -2px -2px -2px; +} +.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; +} +.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; +} +.panel-header, +.panel-body { + border-color: #ddd; +} +.panel-header { + background-color: #ffffff; +} +.panel-body { + background-color: #fff; + color: #444; + font-size: 12px; +} +.panel-title { + font-size: 12px; + font-weight: bold; + color: #777; + height: 16px; + line-height: 16px; +} +.panel-footer { + border: 1px solid #ddd; + overflow: hidden; + background: #fff; +} +.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; +} +.panel-hleft>.panel-header .panel-title, +.panel-hright>.panel-header .panel-title { + position: absolute; + min-width: 16px; + left: 21px; + 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: 5px; + 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; +} +.accordion-expand { + background: url('images/accordion_arrows.png') no-repeat -16px 0; +} +.accordion { + background: #fff; + border-color: #ddd; +} +.accordion .accordion-header { + background: #ffffff; + filter: none; +} +.accordion .accordion-header-selected { + background: #CCE6FF; +} +.accordion .accordion-header-selected .panel-title { + color: #000; +} +.accordion .panel-last > .accordion-header { + border-bottom-color: #ffffff; +} +.accordion .panel-last > .accordion-body { + border-bottom-color: #fff; +} +.accordion .panel-last > .accordion-header-selected, +.accordion .panel-last > .accordion-header-border { + border-bottom-color: #ddd; +} +.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: #ffffff; +} +.accordion> .panel-hleft.panel-last > .accordion-body { + border-right-color: #fff; +} +.accordion> .panel-hleft.panel-last > .accordion-header-selected, +.accordion> .panel-hleft.panel-last > .accordion-header-border { + border-right-color: #ddd; +} +.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: #ffffff; +} +.accordion> .panel-hright.panel-last > .accordion-body { + border-left-color: #fff; +} +.accordion> .panel-hright.panel-last > .accordion-header-selected, +.accordion> .panel-hright.panel-last > .accordion-header-border { + border-left-color: #ddd; +} +.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: 0px 0px 0px 0px; + -webkit-border-radius: 0px 0px 0px 0px; + border-radius: 0px 0px 0px 0px; +} +.window-shadow { + background: #eee; + -moz-box-shadow: 2px 2px 3px #ededed; + -webkit-box-shadow: 2px 2px 3px #ededed; + box-shadow: 2px 2px 3px #ededed; + filter: progid:DXImageTransform.Microsoft.Blur(pixelRadius=2,MakeShadow=false,ShadowOpacity=0.2); +} +.window, +.window .window-body { + border-color: #ddd; +} +.window { + background-color: #ffffff; +} +.window-proxy { + border: 1px dashed #ddd; +} +.window-proxy-mask, +.window-mask { + background: #eee; +} +.window .panel-footer { + border: 1px solid #ddd; + 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-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 #ddd; + 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: #fff; + border-width: 1px; + border-style: solid; +} +.dialog-toolbar { + border-color: #ddd #ddd #ddd #ddd; +} +.dialog-button { + border-color: #ddd #ddd #ddd #ddd; +} +.window-thinborder .dialog-toolbar { + border-left: transparent; + border-right: transparent; + border-top-color: #fff; +} +.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: 24px; + font-size: 12px; + padding: 0; + margin: 0 4px; +} +.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 4px 0 24px; +} +.l-btn-icon-left .l-btn-icon { + left: 4px; +} +.l-btn-icon-right .l-btn-text { + margin: 0 24px 0 4px; +} +.l-btn-icon-right .l-btn-icon { + right: 4px; +} +.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 4px; + width: 16px; +} +.l-btn-plain:hover { + padding: 0; +} +.l-btn-focus { + outline: #0000FF dotted thin; +} +.l-btn-large .l-btn-text { + line-height: 40px; +} +.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 4px; + width: 32px; +} +.l-btn { + color: #777; + background: #ffffff; + background-repeat: repeat-x; + border: 1px solid #dddddd; + background: -webkit-linear-gradient(top,#ffffff 0,#ffffff 100%); + background: -moz-linear-gradient(top,#ffffff 0,#ffffff 100%); + background: -o-linear-gradient(top,#ffffff 0,#ffffff 100%); + background: linear-gradient(to bottom,#ffffff 0,#ffffff 100%); + background-repeat: repeat-x; + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr=#ffffff,endColorstr=#ffffff,GradientType=0); + -moz-border-radius: 0px 0px 0px 0px; + -webkit-border-radius: 0px 0px 0px 0px; + border-radius: 0px 0px 0px 0px; +} +.l-btn:hover { + background: #E6E6E6; + color: #444; + border: 1px solid #ddd; + filter: none; +} +.l-btn-plain { + background: transparent; + border-width: 0; + filter: none; +} +.l-btn-outline { + border-width: 1px; + border-color: #ddd; + padding: 0; +} +.l-btn-plain:hover { + background: #E6E6E6; + color: #444; + border: 1px solid #ddd; + -moz-border-radius: 0px 0px 0px 0px; + -webkit-border-radius: 0px 0px 0px 0px; + border-radius: 0px 0px 0px 0px; +} +.l-btn-disabled, +.l-btn-disabled:hover { + opacity: 0.5; + cursor: default; + background: #ffffff; + color: #777; + background: -webkit-linear-gradient(top,#ffffff 0,#ffffff 100%); + background: -moz-linear-gradient(top,#ffffff 0,#ffffff 100%); + background: -o-linear-gradient(top,#ffffff 0,#ffffff 100%); + background: linear-gradient(to bottom,#ffffff 0,#ffffff 100%); + background-repeat: repeat-x; + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr=#ffffff,endColorstr=#ffffff,GradientType=0); +} +.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 #ddd; + background-color: #fff; + vertical-align: middle; + display: inline-block; + overflow: hidden; + white-space: nowrap; + margin: 0; + padding: 0; + -moz-border-radius: 0px 0px 0px 0px; + -webkit-border-radius: 0px 0px 0px 0px; + border-radius: 0px 0px 0px 0px; +} +.textbox .textbox-text { + font-size: 12px; + border: 0; + margin: 0; + padding: 4px; + white-space: normal; + vertical-align: top; + outline-style: none; + resize: none; + -moz-border-radius: 0px 0px 0px 0px; + -webkit-border-radius: 0px 0px 0px 0px; + border-radius: 0px 0px 0px 0px; +} +.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: 22px; + line-height: 22px; + 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: #c4c4c4; + -moz-box-shadow: 0 0 3px 0 #ddd; + -webkit-box-shadow: 0 0 3px 0 #ddd; + box-shadow: 0 0 3px 0 #ddd; +} +.textbox-invalid { + border-color: #ffa8a8; + background-color: #fff3f3; +} +.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; +} +.combo-panel { + background-color: #fff; +} +.combo-arrow { + background-color: #ffffff; +} +.combo-arrow-hover { + background-color: #E6E6E6; +} +.combo-arrow:hover { + background-color: #E6E6E6; +} +.combo .textbox-icon-disabled:hover { + cursor: default; +} +.combobox-item, +.combobox-group, +.combobox-stick { + font-size: 12px; + padding: 3px; +} +.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: #E6E6E6; + color: #444; +} +.combobox-item-selected { + background-color: #CCE6FF; + color: #000; +} +.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: 0px 0px 0px 0px; + -webkit-border-radius: 0px 0px 0px 0px; + border-radius: 0px 0px 0px 0px; + background: #E6E6E6; + color: #444; +} +.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: #b3b3b3; +} +.layout-split-north { + border-bottom: 5px solid #fff; +} +.layout-split-south { + border-top: 5px solid #fff; +} +.layout-split-east { + border-left: 5px solid #fff; +} +.layout-split-west { + border-right: 5px solid #fff; +} +.layout-expand { + background-color: #ffffff; +} +.layout-expand-over { + background-color: #ffffff; +} +.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 a.tabs-inner { + display: inline-block; + text-decoration: none; + 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: 0px 0px 0 0; + -webkit-border-radius: 0px 0px 0 0; + border-radius: 0px 0px 0 0; +} +.tabs li.tabs-selected a.tabs-inner { + font-weight: bold; + outline: none; +} +.tabs li.tabs-selected a:hover.tabs-inner { + 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: 12px; +} +.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 a.tabs-inner { + -moz-border-radius: 0 0 0px 0px; + -webkit-border-radius: 0 0 0px 0px; + border-radius: 0 0 0px 0px; +} +.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 a.tabs-inner { + padding-left: 0; + padding-right: 0; +} +.tabs-header-left .tabs li a.tabs-inner { + display: block; + text-align: left; + padding-left: 10px; + padding-right: 10px; + -moz-border-radius: 0px 0 0 0px; + -webkit-border-radius: 0px 0 0 0px; + border-radius: 0px 0 0 0px; +} +.tabs-header-right .tabs li a.tabs-inner { + display: block; + text-align: left; + padding-left: 10px; + padding-right: 10px; + -moz-border-radius: 0 0px 0px 0; + -webkit-border-radius: 0 0px 0px 0; + border-radius: 0 0px 0px 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 a.tabs-inner { + -moz-border-radius: 0px 0px 0px 0px; + -webkit-border-radius: 0px 0px 0px 0px; + border-radius: 0px 0px 0px 0px; +} +.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: #ffffff url('images/tabs_icons.png') no-repeat 1px center; +} +.tabs-scroller-right { + background: #ffffff 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 a.tabs-inner:hover { + background: #E6E6E6; + color: #444; + filter: none; +} +.tabs li.tabs-selected a.tabs-inner { + background-color: #fff; + color: #777; +} +.tabs li a.tabs-inner { + color: #777; + background-color: #ffffff; +} +.tabs-header, +.tabs-tool { + background-color: #ffffff; +} +.tabs-header-plain { + background: transparent; +} +.tabs-header, +.tabs-scroller-left, +.tabs-scroller-right, +.tabs-tool, +.tabs, +.tabs-panels, +.tabs li a.tabs-inner, +.tabs li.tabs-selected a.tabs-inner, +.tabs-header-bottom .tabs li.tabs-selected a.tabs-inner, +.tabs-header-left .tabs li.tabs-selected a.tabs-inner, +.tabs-header-right .tabs li.tabs-selected a.tabs-inner { + border-color: #ddd; +} +.tabs-p-tool a:hover, +.tabs li a:hover.tabs-close, +.tabs-scroller-over { + background-color: #E6E6E6; +} +.tabs li.tabs-selected a.tabs-inner { + border-bottom: 1px solid #fff; +} +.tabs-header-bottom .tabs li.tabs-selected a.tabs-inner { + border-top: 1px solid #fff; +} +.tabs-header-left .tabs li.tabs-selected a.tabs-inner { + border-right: 1px solid #fff; +} +.tabs-header-right .tabs li.tabs-selected a.tabs-inner { + border-left: 1px solid #fff; +} +.tabs-header .tabs-pill li.tabs-selected a.tabs-inner { + background: #CCE6FF; + color: #000; + filter: none; + border-color: #ddd; +} +.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 #ddd; + 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: 25px; +} +.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 #ddd; + font-size: 12px; + 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: #fff url('images/loading.gif') no-repeat scroll 5px center; +} +.datagrid-header, +.datagrid-td-rownumber { + background-color: #ffffff; +} +.datagrid-cell-rownumber { + color: #444; +} +.datagrid-resize-proxy { + background: #b3b3b3; +} +.datagrid-mask { + background: #eee; +} +.datagrid-mask-msg { + border-color: #ddd; +} +.datagrid-toolbar, +.datagrid-pager { + background: #fff; +} +.datagrid-header, +.datagrid-toolbar, +.datagrid-pager, +.datagrid-footer-inner { + border-color: #ddd; +} +.datagrid-header td, +.datagrid-body td, +.datagrid-footer td { + border-color: #ddd; +} +.datagrid-htable, +.datagrid-btable, +.datagrid-ftable { + color: #444; + border-collapse: separate; +} +.datagrid-row-alt { + background: #f5f5f5; +} +.datagrid-row-over, +.datagrid-header td.datagrid-header-over { + background: #E6E6E6; + color: #444; + cursor: default; +} +.datagrid-row-selected { + background: #CCE6FF; + color: #000; +} +.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; +} +.propertygrid .datagrid-view1 .datagrid-body td { + padding-bottom: 1px; + border-width: 0 1px 0 0; +} +.propertygrid .datagrid-group { + height: 21px; + 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: #ffffff; +} +.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: #ffffff; +} +.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: #ffffff; + border-style: solid; + border-width: 0 0 1px 0; + border-color: #ddd; +} +.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: #444; + 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: #ddd; +} +.m-list li>a:hover { + background: #E6E6E6; + color: #444; +} +.m-list .m-list-group { + padding: 0 4px; +} +.pagination { + zoom: 1; +} +.pagination table { + float: left; + height: 30px; +} +.pagination td { + border: 0; +} +.pagination-btn-separator { + float: left; + height: 24px; + border-left: 1px solid #ddd; + border-right: 1px solid #fff; + margin: 3px 1px; +} +.pagination .pagination-num { + border-width: 1px; + border-style: solid; + margin: 0 2px; + padding: 2px; + width: 2em; + height: auto; +} +.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 { + width: 24px; + text-align: center; + margin: 0; +} +.pagination-first { + background: url('images/pagination_icons.png') no-repeat 0 center; +} +.pagination-prev { + background: url('images/pagination_icons.png') no-repeat -16px center; +} +.pagination-next { + background: url('images/pagination_icons.png') no-repeat -32px center; +} +.pagination-last { + background: url('images/pagination_icons.png') no-repeat -48px center; +} +.pagination-load { + background: url('images/pagination_icons.png') no-repeat -64px center; +} +.pagination-loading { + background: url('images/loading.gif') no-repeat center center; +} +.pagination-page-list, +.pagination .pagination-num { + border-color: #ddd; +} +.calendar { + border-width: 1px; + border-style: solid; + padding: 1px; + overflow: hidden; +} +.calendar table { + table-layout: fixed; + border-collapse: separate; + font-size: 12px; + width: 100%; + height: 100%; +} +.calendar table td, +.calendar table th { + font-size: 12px; +} +.calendar-noborder { + border: 0; +} +.calendar-header { + position: relative; + height: 22px; +} +.calendar-title { + text-align: center; + height: 22px; +} +.calendar-title span { + position: relative; + display: inline-block; + top: 2px; + padding: 0 3px; + height: 18px; + line-height: 18px; + font-size: 12px; + cursor: pointer; + -moz-border-radius: 0px 0px 0px 0px; + -webkit-border-radius: 0px 0px 0px 0px; + border-radius: 0px 0px 0px 0px; +} +.calendar-prevmonth, +.calendar-nextmonth, +.calendar-prevyear, +.calendar-nextyear { + position: absolute; + top: 50%; + margin-top: -7px; + width: 14px; + height: 14px; + cursor: pointer; + font-size: 1px; + -moz-border-radius: 0px 0px 0px 0px; + -webkit-border-radius: 0px 0px 0px 0px; + border-radius: 0px 0px 0px 0px; +} +.calendar-prevmonth { + left: 20px; + background: url('images/calendar_arrows.png') no-repeat -18px -2px; +} +.calendar-nextmonth { + right: 20px; + background: url('images/calendar_arrows.png') no-repeat -34px -2px; +} +.calendar-prevyear { + left: 3px; + background: url('images/calendar_arrows.png') no-repeat -1px -2px; +} +.calendar-nextyear { + right: 3px; + background: url('images/calendar_arrows.png') no-repeat -49px -2px; +} +.calendar-body { + position: relative; +} +.calendar-body th, +.calendar-body td { + text-align: center; +} +.calendar-day { + border: 0; + padding: 1px; + cursor: pointer; + -moz-border-radius: 0px 0px 0px 0px; + -webkit-border-radius: 0px 0px 0px 0px; + border-radius: 0px 0px 0px 0px; +} +.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: 12px; + display: none; + overflow: hidden; +} +.calendar-menu-year-inner { + text-align: center; + padding-bottom: 5px; +} +.calendar-menu-year { + width: 50px; + text-align: center; + border-width: 1px; + border-style: solid; + outline-style: none; + resize: none; + margin: 0; + padding: 2px; + font-weight: bold; + font-size: 12px; + -moz-border-radius: 0px 0px 0px 0px; + -webkit-border-radius: 0px 0px 0px 0px; + border-radius: 0px 0px 0px 0px; +} +.calendar-menu-prev, +.calendar-menu-next { + display: inline-block; + width: 21px; + height: 21px; + vertical-align: top; + cursor: pointer; + -moz-border-radius: 0px 0px 0px 0px; + -webkit-border-radius: 0px 0px 0px 0px; + border-radius: 0px 0px 0px 0px; +} +.calendar-menu-prev { + margin-right: 10px; + background: url('images/calendar_arrows.png') no-repeat 2px 2px; +} +.calendar-menu-next { + margin-left: 10px; + background: url('images/calendar_arrows.png') no-repeat -45px 2px; +} +.calendar-menu-month { + text-align: center; + cursor: pointer; + font-weight: bold; + -moz-border-radius: 0px 0px 0px 0px; + -webkit-border-radius: 0px 0px 0px 0px; + border-radius: 0px 0px 0px 0px; +} +.calendar-body th, +.calendar-menu-month { + color: #919191; +} +.calendar-day { + color: #444; +} +.calendar-sunday { + color: #CC2222; +} +.calendar-saturday { + color: #00ee00; +} +.calendar-today { + color: #0000ff; +} +.calendar-menu-year { + border-color: #ddd; +} +.calendar { + border-color: #ddd; +} +.calendar-header { + background: #ffffff; +} +.calendar-body, +.calendar-menu { + background: #fff; +} +.calendar-body th { + background: #fff; + padding: 2px 0; +} +.calendar-hover, +.calendar-nav-hover, +.calendar-menu-hover { + background-color: #E6E6E6; + color: #444; +} +.calendar-hover { + border: 1px solid #ddd; + padding: 0; +} +.calendar-selected { + background-color: #CCE6FF; + color: #000; + border: 1px solid #99cdff; + padding: 0; +} +.datebox-calendar-inner { + height: 180px; +} +.datebox-button { + padding: 0 5px; + text-align: center; +} +.datebox-button a { + line-height: 22px; + font-size: 12px; + 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: #fff; +} +.datebox-button a { + color: #777; +} +.spinner-arrow { + background-color: #ffffff; + display: inline-block; + overflow: hidden; + vertical-align: top; + margin: 0; + padding: 0; + opacity: 1.0; + filter: alpha(opacity=100); + width: 18px; +} +.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: #777; + outline-style: none; +} +.spinner-arrow-hover { + background-color: #E6E6E6; + opacity: 1.0; + filter: alpha(opacity=100); +} +.spinner-arrow-up:hover, +.spinner-arrow-down:hover { + opacity: 1.0; + filter: alpha(opacity=100); + background-color: #E6E6E6; +} +.textbox-icon-disabled .spinner-arrow-up:hover, +.textbox-icon-disabled .spinner-arrow-down:hover { + opacity: 0.6; + filter: alpha(opacity=60); + background-color: #ffffff; + 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; +} +.spinner-arrow-down { + background: url('images/spinner_arrows.png') no-repeat -15px center; +} +.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: 0px 0px 0px 0px; + -webkit-border-radius: 0px 0px 0px 0px; + border-radius: 0px 0px 0px 0px; + overflow: hidden; + position: relative; +} +.progressbar-text { + text-align: center; + position: absolute; +} +.progressbar-value { + position: relative; + overflow: hidden; + width: 0; + -moz-border-radius: 0px 0 0 0px; + -webkit-border-radius: 0px 0 0 0px; + border-radius: 0px 0 0 0px; +} +.progressbar { + border-color: #ddd; +} +.progressbar-text { + color: #444; + font-size: 12px; +} +.progressbar-value .progressbar-text { + background-color: #CCE6FF; + color: #000; +} +.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: #ffffff; +} +.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: 0px; +} +.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: 12px; + 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: 12px; +} +.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: #ddd; + background: #ffffff; +} +.slider-rule span { + border-color: #ddd; +} +.slider-rulelabel span { + color: #444; +} +.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: 0px 0px 0px 0px; + -webkit-border-radius: 0px 0px 0px 0px; + border-radius: 0px 0px 0px 0px; +} +.menu-item-disabled { + opacity: 0.5; + filter: alpha(opacity=50); + cursor: default; +} +.menu-text, +.menu-text span { + font-size: 12px; +} +.menu-shadow { + position: absolute; + -moz-border-radius: 0px 0px 0px 0px; + -webkit-border-radius: 0px 0px 0px 0px; + border-radius: 0px 0px 0px 0px; + background: #eee; + -moz-box-shadow: 2px 2px 3px #ededed; + -webkit-box-shadow: 2px 2px 3px #ededed; + box-shadow: 2px 2px 3px #ededed; + filter: progid:DXImageTransform.Microsoft.Blur(pixelRadius=2,MakeShadow=false,ShadowOpacity=0.2); +} +.menu-rightarrow { + background: url('images/menu_arrows.png') no-repeat -32px center; +} +.menu-line { + border-left: 1px solid #ddd; + border-right: 1px solid #fff; +} +.menu-sep { + border-top: 1px solid #ddd; + border-bottom: 1px solid #fff; +} +.menu { + background-color: #ffffff; + border-color: #ddd; + color: #444; +} +.menu-content { + background: #fff; +} +.menu-item { + border-color: transparent; + _border-color: #ffffff; +} +.menu-active { + border-color: #ddd; + color: #444; + background: #E6E6E6; +} +.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: #E6E6E6; + color: #444; + border: 1px solid #ddd; + filter: none; +} +.m-btn-plain-active, +.s-btn-plain-active { + background: transparent; + padding: 0; + border-width: 1px; + border-style: solid; + -moz-border-radius: 0px 0px 0px 0px; + -webkit-border-radius: 0px 0px 0px 0px; + border-radius: 0px 0px 0px 0px; +} +.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: #b3b3b3; + 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: #ddd; + background-color: #E6E6E6; + color: #444; +} +.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: #b3b3b3; + 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; +} +.messager-info { + background: url('images/messager_icons.png') no-repeat scroll 0 0; +} +.messager-question { + background: url('images/messager_icons.png') no-repeat scroll -32px 0; +} +.messager-warning { + background: url('images/messager_icons.png') no-repeat scroll -96px 0; +} +.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 #ddd; +} +.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: 18px; + 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; + vertical-align: top; + overflow: hidden; +} +.tree-expanded { + background: url('images/tree_icons.png') no-repeat -18px 0px; +} +.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; +} +.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; +} +.tree-folder-open { + background: url('images/tree_icons.png') no-repeat -224px 0; +} +.tree-file { + background: url('images/tree_icons.png') no-repeat -240px 0; +} +.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; +} +.tree-title { + font-size: 12px; + display: inline-block; + text-decoration: none; + vertical-align: top; + white-space: nowrap; + padding: 0 2px; + height: 18px; + line-height: 18px; +} +.tree-node-proxy { + font-size: 12px; + 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 #ddd; + font-size: 12px; + line-height: 16px; + padding: 0 4px; + margin: 0; + width: 80px; + outline-style: none; + vertical-align: top; + position: absolute; + top: 0; +} +.tree-node-proxy { + background-color: #fff; + color: #444; + border-color: #ddd; +} +.tree-node-hover { + background: #E6E6E6; + color: #444; +} +.tree-node-selected { + background: #CCE6FF; + color: #000; +} +.tree-node-hidden { + display: none; +} +.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; + border-radius: 5px; + -moz-border-radius: 0px 0px 0px 0px; + -webkit-border-radius: 0px 0px 0px 0px; + border-radius: 0px 0px 0px 0px; +} +.tooltip-content { + font-size: 12px; +} +.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; + _border-color: tomato; + _filter: chroma(color=tomato); +} +.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: #fff; + border-color: #ddd; + color: #444; +} +.tooltip-right .tooltip-arrow-outer { + border-right-color: #ddd; +} +.tooltip-right .tooltip-arrow { + border-right-color: #fff; +} +.tooltip-left .tooltip-arrow-outer { + border-left-color: #ddd; +} +.tooltip-left .tooltip-arrow { + border-left-color: #fff; +} +.tooltip-top .tooltip-arrow-outer { + border-top-color: #ddd; +} +.tooltip-top .tooltip-arrow { + border-top-color: #fff; +} +.tooltip-bottom .tooltip-arrow-outer { + border-bottom-color: #ddd; +} +.tooltip-bottom .tooltip-arrow { + border-bottom-color: #fff; +} +.switchbutton { + text-decoration: none; + display: inline-block; + overflow: hidden; + vertical-align: middle; + margin: 0; + padding: 0; + cursor: pointer; + background: #dddddd; + border: 1px solid #dddddd; + -moz-border-radius: 0px 0px 0px 0px; + -webkit-border-radius: 0px 0px 0px 0px; + border-radius: 0px 0px 0px 0px; +} +.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: 12px; + -moz-border-radius: 0px 0px 0px 0px; + -webkit-border-radius: 0px 0px 0px 0px; + border-radius: 0px 0px 0px 0px; +} +.switchbutton-on { + background: #CCE6FF; + color: #000; +} +.switchbutton-off { + background-color: #fff; + color: #444; +} +.switchbutton-on, +.switchbutton-reversed .switchbutton-off { + -moz-border-radius: 0px 0 0 0px; + -webkit-border-radius: 0px 0 0 0px; + border-radius: 0px 0 0 0px; +} +.switchbutton-off, +.switchbutton-reversed .switchbutton-on { + -moz-border-radius: 0 0px 0px 0; + -webkit-border-radius: 0 0px 0px 0; + border-radius: 0 0px 0px 0; +} +.switchbutton-handle { + position: absolute; + top: 0; + left: 50%; + background-color: #fff; + color: #444; + border: 1px solid #dddddd; + -moz-box-shadow: 0 0 3px 0 #dddddd; + -webkit-box-shadow: 0 0 3px 0 #dddddd; + box-shadow: 0 0 3px 0 #dddddd; +} +.switchbutton-value { + position: absolute; + top: 0; + left: -5000px; +} +.switchbutton-disabled { + opacity: 0.5; + filter: alpha(opacity=50); +} +.switchbutton-disabled, +.switchbutton-readonly { + cursor: default; +} diff --git a/src/main/webapp/css/themes/metro/filebox.css b/src/main/webapp/css/themes/metro/filebox.css new file mode 100644 index 0000000..c6bac66 --- /dev/null +++ b/src/main/webapp/css/themes/metro/filebox.css @@ -0,0 +1,20 @@ +.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; +} diff --git a/src/main/webapp/css/themes/metro/images/accordion_arrows.png b/src/main/webapp/css/themes/metro/images/accordion_arrows.png new file mode 100644 index 0000000000000000000000000000000000000000..720835f69c96c17ec32a20b03ac9753aa59b7f4f GIT binary patch literal 184 zcmeAS@N?(olHy`uVBq!ia0vp^3P3Et!3HGD8EPYeRK2H*V@SoVUT_Y-nKxaI`{RC0WjSLJ&w^R(C-|JQTojLXc1&{d*_z{$ jW+oTMdQ(F|jDg|L>K${_)^zO#I)%a0)z4*}Q$iB}_fAN- literal 0 HcmV?d00001 diff --git a/src/main/webapp/css/themes/metro/images/blank.gif b/src/main/webapp/css/themes/metro/images/blank.gif new file mode 100644 index 0000000000000000000000000000000000000000..1d11fa9ada9e93505b3d736acb204083f45d5fbf GIT binary patch literal 43 scmZ?wbhEHbWMp7uX!y@?;J^U}1_s5SEQ~;kK?g*DWEhy3To@Uw0n;G|I{*Lx literal 0 HcmV?d00001 diff --git a/src/main/webapp/css/themes/metro/images/calendar_arrows.png b/src/main/webapp/css/themes/metro/images/calendar_arrows.png new file mode 100644 index 0000000000000000000000000000000000000000..430c4ad685b8c0068ecb7e3cbef74f493a84ad0d GIT binary patch literal 173 zcmeAS@N?(olHy`uVBq!ia0vp^4nQox!3HFkJ+IURQYD@)jv*Dd-cCEn)nLHm{QbZE z+q@uWwandfr?Jb4eDYYmB3UAt=OO2Vt+MMT&+KD%&6hZDt!FBpej;sEpMN69^tKl% zp6y<4_lG^P z=;=eQ4Vs74-2)Ua&f1tcVdk$#{GPKe@&?ZMHmT&SMw?IV&w7)}ixLbB3d$Zg{&KGb P8OPx1>gTe~DWM4fp>5!O@Gl{c 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 literal 0 HcmV?d00001 diff --git a/src/main/webapp/css/themes/metro/images/loading.gif b/src/main/webapp/css/themes/metro/images/loading.gif new file mode 100644 index 0000000000000000000000000000000000000000..68f01d04813c1f622810864a3aaa04b4a17ac8f9 GIT binary patch literal 1737 zcmaKsX;2e)7>CzDa{xjjy99|1A!tC(kfocDi)<1$AxHpOQ4k^l!Vx1W6x7<&|FYXU zqO4jEiU-!VR1p+Xj1?4-iuI_J;!&?!+ghg|JJad3U)pMGzcKxNeCM6tJnuX+uPvX@ zZY|=AHdxt2Xr2y*)5|c6#FSEuyJ+Y3Z&l z2hJWo`9;lJ$6wzSoW60tqkB|d$oiO*d-^85^ojn{*NR{MP*%{@H*#gihZ8BKyB68E z-MIbjgNNV0y5khpJ^Jv`51aR%={<4jhaVq5e*9D5+*hL)XCHn4{^d%hPu@?KpKbc=eN!D=XUjDmH#n{YHNS zHCX6BV)yn2CuTNujhN~V+`RKpyXO6^ht92eqhIIlQLfz6eeCnH_C7`NPNrw9ks366 z4xX9(`s~z=+1uX^ocZ$2_fBs=JihPfWYufOIuD&AU-@`>>qn~cy$1)T7CU!5z2(U8 z)9Kt9)l`f6?NU41j6XbXfR{OHwm|T4}&24tIf+!C-g~6cQfY2^n$?AT&ZW zgqm`}3-jS2NS6n=k;sr5Hv(Q%%n)qW0X|neWVBd;Ko}d(=u%?{O0-a>kSI}shOd9n z5top}%gUCf=>?tg;*;#7!^HOL3k$fMxd=O-6Y4@%u8LS)C1D_a?27R6^vcC+6tttL z)GmTahbyJB!xmcHL#ya8ZXyfRl)a!N0BJE0y3BBfAV5;#=K&Z2VkaKZ)?9`1h5P_% znt*b}%j1|#j`b|aQDx@~wA#$PYRN2xE6UO;;vE(@$&xww-s8fZ5HmJ(eJ*rQrDbaawDbrfe_8F(wq{ge?)qQG`aXV;r(*6EM|ESje;52aFmrX!f=Pw^2oGQX$1|o4yts|b_5@w_kNwtl{wDP#JGMvIp#!SYX?Wq9S&`&_ZwkgGH5CLB7DEGJ6=R4J~p3Z4i^A}hs=-uZeD zs92l6u@**R$~L()G{5N8*7cE5-q$SCo`q4|NSVF*+A7&xZnypm$EdXgf)E%(VJHFD zSgi(H!D!(;9Zcc#GrCCJh=RlvXBQ-hv4Vodse`a32ZUFWgP5ZhM5LeV(#D^H8p@Lg ztra5R32z@1rQv{6u&RZL5%Z@Ye{q|t#6aM_1hIrpl@)oH6}os*cbAQywa{5<`ekzW O1il%9bk82&KlvLjD^%40 literal 0 HcmV?d00001 diff --git a/src/main/webapp/css/themes/metro/images/menu_arrows.png b/src/main/webapp/css/themes/metro/images/menu_arrows.png new file mode 100644 index 0000000000000000000000000000000000000000..b986842e7e4044caed18edbcb4b376a4bb915623 GIT binary patch literal 160 zcmeAS@N?(olHy`uVBq!ia0vp^4nQox!3HFkJ+IURQt6&9jv*Dd-cB{-J7B=U{PTZ! zWrKV9%Z3|Wt5t$(gq+#d+-OocB$0fsr9DfRx52vPhSu$$+yXuy+69hDZ54DDTxx#r zL7>-12UT01v)>tZ+;HI4pDNf?@KK~EC$@35ykmXyu^HJF3})N>8P9Uwo&~g$!PC{x JWt~$(697!FIeGv9 literal 0 HcmV?d00001 diff --git a/src/main/webapp/css/themes/metro/images/messager_icons.png b/src/main/webapp/css/themes/metro/images/messager_icons.png new file mode 100644 index 0000000000000000000000000000000000000000..62c18c135860351063ebaabe8c0f4df7664b8f65 GIT binary patch literal 6116 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 G5}E*M5;#5p literal 0 HcmV?d00001 diff --git a/src/main/webapp/css/themes/metro/images/passwordbox_open.png b/src/main/webapp/css/themes/metro/images/passwordbox_open.png new file mode 100644 index 0000000000000000000000000000000000000000..d328891f6a18ea703fd25a47b228df9cb13b4744 GIT binary patch literal 165 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`Ii4<#Ar-fh6C~y}*jFF6I{2&m zf8fW~lSf{d9=Ouc<(SoRr6$ox=6dW5rxOB`TRe8 z#G%R{$Nj@Z)5m5kM@2RMITi_;Npmte=_#;rBych_7F`xqKKy}=f%DM}Q4`(M(}DIf Nc)I$ztaD0e0su|qH(3Ax literal 0 HcmV?d00001 diff --git a/src/main/webapp/css/themes/metro/images/searchbox_button.png b/src/main/webapp/css/themes/metro/images/searchbox_button.png new file mode 100644 index 0000000000000000000000000000000000000000..6dd1931589b453f6cc9772fd1851d8705d6b6631 GIT binary patch literal 813 zcmV+|1JeA7P)lXvaa)1B=8vtU6i;3jw7+Lm8D5$Z@i10EnF)=bcefw4K z$^E-CUfjQG`svfBbfD6|R#sLFj6lo3FG$G6@;ee>>~6i|H^5OY8c00W#fi<*1vzh{0&qu3dB`V0{{XDY`}(1n>S9M(9!zw#!&`A z#;*+0{6GVMSeWGp!`o{o8NPge#o%jgs54WT$qnQYpsyGNpauX05F;oJfZ`Pdw6!$j zynTH0RMa&!n3$Pa9zVGEY{&L(3qnPBl_DG6<9Xk0`Fl3`LiD4@pH{vDsxJWQ1qdJp zEJ>M}osCtQlY?CgW>F{;gVK#SmgoOZnEn5J%EtIXaWQXAO>Rdf)WFR;gt~f zXaA3z{{L{q=l48y!32yJ3i0hJ2BS=^}@sXzH{F9Iq&OW375;I7CG-}Vr|aF#l<(fySwu2>`YdxRW*W0f#2un=W5Jmvoe`XCK%I_Y++#`fwE+= zSd{sEULGDE%A=#BOW<6gP*6VfMa^fr8qe`5w%)P0a^Y9WGTw! zvI^|$>l@1Da^Ke1*T3RdY7KqM%gaBb(P+oP!GW;b?ZRfW3Bxc1H@GCaHK#XhZ*Lc= zRBC@>V&W#x&B5%(#>OW5`};d6I5Qw218EG_q@1gtr!Nl*v7yn?(MPMRt4SNy%--JK zanm#f^bw^}Nr7b(EUg}TUi(2;)deX10lAo=83+VA(QksJI6(zwptET-y~avN=J9w$ zI2`W5lG|aOkjY7(&!@;Jx*nUA>~J`Q)9L&(G8y=g$3a4YgD7z)5>gXQNKhw=uR0zF z#jHruh)gDv=bj|2ZES4(fEM?I!JyKqo=}sj-fBYTcDt4KXq)eFQH}wW`vh%Mla}#@ z@Mb`C)x@YkK{xd2>8ZLg+E!Lps$Q@6DY-~!0=Gs+Mm~_JnW1EbX2uxClEdN>Y@I78 z=ke_9?7sX@o0*x}M{JB77MIXj_MmNE%+1Xe{*{crh)9={dR(U;y-{jrxUXmG%Gt002ovPDHLkV1hy(sXhPz literal 0 HcmV?d00001 diff --git a/src/main/webapp/css/themes/metro/images/spinner_arrows.png b/src/main/webapp/css/themes/metro/images/spinner_arrows.png new file mode 100644 index 0000000000000000000000000000000000000000..7c2df483dbb30dfb3a51332c03fe6f0c229c0547 GIT binary patch literal 149 zcmeAS@N?(olHy`uVBq!ia0vp^4nQox!3HFkJ+IURQZb$`jv*Ddk`p9Y7bl4Dgeh3R zJz6gy$J;RRRRiNz`7}$-z5~nWg=}UsVYp!HpQ#{_&8An~S<1fjm*zKyrHmF27#+^4 x`1rk&EZfSkR8C?on>%wt3;O{L3Dzy_3@=Og7TEqO`UJFx!PC{xWt~$(69D$UE$jdQ literal 0 HcmV?d00001 diff --git a/src/main/webapp/css/themes/metro/images/tabs_icons.png b/src/main/webapp/css/themes/metro/images/tabs_icons.png new file mode 100644 index 0000000000000000000000000000000000000000..4d29966d7154338a9e2e358821a5f72655eba43e GIT binary patch literal 150 zcmeAS@N?(olHy`uVBq!ia0vp^20$#p!3HD)*8SNCq+&f?978H@B_~L*E^a7uNPG49 z|BoM6E;$_tDnm{r-UW|t3f!- literal 0 HcmV?d00001 diff --git a/src/main/webapp/css/themes/metro/images/tagbox_icons.png b/src/main/webapp/css/themes/metro/images/tagbox_icons.png new file mode 100644 index 0000000000000000000000000000000000000000..bd02e2d817c6b7c4e2a105919e9a89cc0a1d577f GIT binary patch literal 134 zcmeAS@N?(olHy`uVBq!ia0vp^3P3Et!3HGD8EPYel&`0YV@SoV>_0CQASS literal 0 HcmV?d00001 diff --git a/src/main/webapp/css/themes/metro/images/tree_icons.png b/src/main/webapp/css/themes/metro/images/tree_icons.png new file mode 100644 index 0000000000000000000000000000000000000000..e9be4f3a9965e49a4e4078f8c53f486d761a7468 GIT binary patch literal 3115 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 literal 0 HcmV?d00001 diff --git a/src/main/webapp/css/themes/metro/images/validatebox_warning.png b/src/main/webapp/css/themes/metro/images/validatebox_warning.png new file mode 100644 index 0000000000000000000000000000000000000000..2b3d4f05babf3f82b146350e96570fac02075de0 GIT binary patch literal 921 zcmV;K17`e*P)nRv1_mBsMY*-M^XCf)eflW5 z|MC^)Hw+AW{sHCCF+cz@{fF8J!+#-kxoSv=7^|!zgOQUngSQ}mDo|J)n+pH}hzZ#= zr~y18$_m-?9v%$;?mu8);}>9vFgFvDXJDwrW&l6{p}625M66yTFhGz^K$w9^O$BHi zFN2Ym7DIple*#cW4BY^L0Al(Jbv6k9U|^6IQBp{hx3XdQ&CJ4Z_|YSVr@XujY(PVT zlok1<85nBO4FCurumK>O|A07*jFlSRUcxLAQVcIR*co#3@)&jj4Pj7KXRri%#h;fa z4ya5O*#Lk5Vq!q}T~=CGH(uV-hJk^fkAYoGjN#AMuMF($>N=giWG}IXse|=+c=i>7HEg>%*E%fLD!-uy|85n^6W?^Dt(9zXp5EB&z+w>_knBmdiKMbzi z?A!`WOl>e100a=&05*1xZdFls?*HtZ48H?o7=HW%ivIu45E2~BASWx!@DIpmv9e}h zaPwji|L}pqor@y`=yxrU0RRES^qYY}O;TRcU+DKIhL4`%3_nyf8U6tS<<-ZJ40D$( zWjJ%`G6NIPHNP2{7am*Fp% z{>ShK#0G`~kjd~57_BU.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; +} +.panel-hleft>.panel-header .panel-title, +.panel-hright>.panel-header .panel-title { + position: absolute; + min-width: 16px; + left: 21px; + 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: 5px; + 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; +} diff --git a/src/main/webapp/css/themes/metro/passwordbox.css b/src/main/webapp/css/themes/metro/passwordbox.css new file mode 100644 index 0000000..92c9ce5 --- /dev/null +++ b/src/main/webapp/css/themes/metro/passwordbox.css @@ -0,0 +1,6 @@ +.passwordbox-open { + background: url('images/passwordbox_open.png') no-repeat center center; +} +.passwordbox-close { + background: url('images/passwordbox_close.png') no-repeat center center; +} diff --git a/src/main/webapp/css/themes/metro/progressbar.css b/src/main/webapp/css/themes/metro/progressbar.css new file mode 100644 index 0000000..7721f1b --- /dev/null +++ b/src/main/webapp/css/themes/metro/progressbar.css @@ -0,0 +1,32 @@ +.progressbar { + border-width: 1px; + border-style: solid; + -moz-border-radius: 0px 0px 0px 0px; + -webkit-border-radius: 0px 0px 0px 0px; + border-radius: 0px 0px 0px 0px; + overflow: hidden; + position: relative; +} +.progressbar-text { + text-align: center; + position: absolute; +} +.progressbar-value { + position: relative; + overflow: hidden; + width: 0; + -moz-border-radius: 0px 0 0 0px; + -webkit-border-radius: 0px 0 0 0px; + border-radius: 0px 0 0 0px; +} +.progressbar { + border-color: #ddd; +} +.progressbar-text { + color: #444; + font-size: 12px; +} +.progressbar-value .progressbar-text { + background-color: #CCE6FF; + color: #000; +} diff --git a/src/main/webapp/css/themes/metro/propertygrid.css b/src/main/webapp/css/themes/metro/propertygrid.css new file mode 100644 index 0000000..f5ae0c4 --- /dev/null +++ b/src/main/webapp/css/themes/metro/propertygrid.css @@ -0,0 +1,28 @@ +.propertygrid .datagrid-view1 .datagrid-body td { + padding-bottom: 1px; + border-width: 0 1px 0 0; +} +.propertygrid .datagrid-group { + height: 21px; + 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: #ffffff; +} +.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: #ffffff; +} diff --git a/src/main/webapp/css/themes/metro/searchbox.css b/src/main/webapp/css/themes/metro/searchbox.css new file mode 100644 index 0000000..2d3af1c --- /dev/null +++ b/src/main/webapp/css/themes/metro/searchbox.css @@ -0,0 +1,61 @@ +.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: #ffffff; +} +.searchbox .l-btn-plain-disabled, +.searchbox .l-btn-plain-disabled:hover { + opacity: 0.5; + filter: alpha(opacity=50); +} diff --git a/src/main/webapp/css/themes/metro/slider.css b/src/main/webapp/css/themes/metro/slider.css new file mode 100644 index 0000000..42ddc17 --- /dev/null +++ b/src/main/webapp/css/themes/metro/slider.css @@ -0,0 +1,101 @@ +.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: 0px; +} +.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: 12px; + 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: 12px; +} +.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: #ddd; + background: #ffffff; +} +.slider-rule span { + border-color: #ddd; +} +.slider-rulelabel span { + color: #444; +} diff --git a/src/main/webapp/css/themes/metro/spinner.css b/src/main/webapp/css/themes/metro/spinner.css new file mode 100644 index 0000000..9179f9b --- /dev/null +++ b/src/main/webapp/css/themes/metro/spinner.css @@ -0,0 +1,58 @@ +.spinner-arrow { + background-color: #ffffff; + display: inline-block; + overflow: hidden; + vertical-align: top; + margin: 0; + padding: 0; + opacity: 1.0; + filter: alpha(opacity=100); + width: 18px; +} +.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: #777; + outline-style: none; +} +.spinner-arrow-hover { + background-color: #E6E6E6; + opacity: 1.0; + filter: alpha(opacity=100); +} +.spinner-arrow-up:hover, +.spinner-arrow-down:hover { + opacity: 1.0; + filter: alpha(opacity=100); + background-color: #E6E6E6; +} +.textbox-icon-disabled .spinner-arrow-up:hover, +.textbox-icon-disabled .spinner-arrow-down:hover { + opacity: 0.6; + filter: alpha(opacity=60); + background-color: #ffffff; + 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; +} +.spinner-arrow-down { + background: url('images/spinner_arrows.png') no-repeat -15px center; +} +.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; +} diff --git a/src/main/webapp/css/themes/metro/splitbutton.css b/src/main/webapp/css/themes/metro/splitbutton.css new file mode 100644 index 0000000..3451138 --- /dev/null +++ b/src/main/webapp/css/themes/metro/splitbutton.css @@ -0,0 +1,12 @@ +.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: #b3b3b3; + border-width: 0 0 0 1px; +} diff --git a/src/main/webapp/css/themes/metro/switchbutton.css b/src/main/webapp/css/themes/metro/switchbutton.css new file mode 100644 index 0000000..351083e --- /dev/null +++ b/src/main/webapp/css/themes/metro/switchbutton.css @@ -0,0 +1,77 @@ +.switchbutton { + text-decoration: none; + display: inline-block; + overflow: hidden; + vertical-align: middle; + margin: 0; + padding: 0; + cursor: pointer; + background: #dddddd; + border: 1px solid #dddddd; + -moz-border-radius: 0px 0px 0px 0px; + -webkit-border-radius: 0px 0px 0px 0px; + border-radius: 0px 0px 0px 0px; +} +.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: 12px; + -moz-border-radius: 0px 0px 0px 0px; + -webkit-border-radius: 0px 0px 0px 0px; + border-radius: 0px 0px 0px 0px; +} +.switchbutton-on { + background: #CCE6FF; + color: #000; +} +.switchbutton-off { + background-color: #fff; + color: #444; +} +.switchbutton-on, +.switchbutton-reversed .switchbutton-off { + -moz-border-radius: 0px 0 0 0px; + -webkit-border-radius: 0px 0 0 0px; + border-radius: 0px 0 0 0px; +} +.switchbutton-off, +.switchbutton-reversed .switchbutton-on { + -moz-border-radius: 0 0px 0px 0; + -webkit-border-radius: 0 0px 0px 0; + border-radius: 0 0px 0px 0; +} +.switchbutton-handle { + position: absolute; + top: 0; + left: 50%; + background-color: #fff; + color: #444; + border: 1px solid #dddddd; + -moz-box-shadow: 0 0 3px 0 #dddddd; + -webkit-box-shadow: 0 0 3px 0 #dddddd; + box-shadow: 0 0 3px 0 #dddddd; +} +.switchbutton-value { + position: absolute; + top: 0; + left: -5000px; +} +.switchbutton-disabled { + opacity: 0.5; + filter: alpha(opacity=50); +} +.switchbutton-disabled, +.switchbutton-readonly { + cursor: default; +} diff --git a/src/main/webapp/css/themes/metro/tabs.css b/src/main/webapp/css/themes/metro/tabs.css new file mode 100644 index 0000000..e42fd50 --- /dev/null +++ b/src/main/webapp/css/themes/metro/tabs.css @@ -0,0 +1,377 @@ +.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 a.tabs-inner { + display: inline-block; + text-decoration: none; + 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: 0px 0px 0 0; + -webkit-border-radius: 0px 0px 0 0; + border-radius: 0px 0px 0 0; +} +.tabs li.tabs-selected a.tabs-inner { + font-weight: bold; + outline: none; +} +.tabs li.tabs-selected a:hover.tabs-inner { + 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: 12px; +} +.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 a.tabs-inner { + -moz-border-radius: 0 0 0px 0px; + -webkit-border-radius: 0 0 0px 0px; + border-radius: 0 0 0px 0px; +} +.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 a.tabs-inner { + padding-left: 0; + padding-right: 0; +} +.tabs-header-left .tabs li a.tabs-inner { + display: block; + text-align: left; + padding-left: 10px; + padding-right: 10px; + -moz-border-radius: 0px 0 0 0px; + -webkit-border-radius: 0px 0 0 0px; + border-radius: 0px 0 0 0px; +} +.tabs-header-right .tabs li a.tabs-inner { + display: block; + text-align: left; + padding-left: 10px; + padding-right: 10px; + -moz-border-radius: 0 0px 0px 0; + -webkit-border-radius: 0 0px 0px 0; + border-radius: 0 0px 0px 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 a.tabs-inner { + -moz-border-radius: 0px 0px 0px 0px; + -webkit-border-radius: 0px 0px 0px 0px; + border-radius: 0px 0px 0px 0px; +} +.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: #ffffff url('images/tabs_icons.png') no-repeat 1px center; +} +.tabs-scroller-right { + background: #ffffff 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 a.tabs-inner:hover { + background: #E6E6E6; + color: #444; + filter: none; +} +.tabs li.tabs-selected a.tabs-inner { + background-color: #fff; + color: #777; +} +.tabs li a.tabs-inner { + color: #777; + background-color: #ffffff; +} +.tabs-header, +.tabs-tool { + background-color: #ffffff; +} +.tabs-header-plain { + background: transparent; +} +.tabs-header, +.tabs-scroller-left, +.tabs-scroller-right, +.tabs-tool, +.tabs, +.tabs-panels, +.tabs li a.tabs-inner, +.tabs li.tabs-selected a.tabs-inner, +.tabs-header-bottom .tabs li.tabs-selected a.tabs-inner, +.tabs-header-left .tabs li.tabs-selected a.tabs-inner, +.tabs-header-right .tabs li.tabs-selected a.tabs-inner { + border-color: #ddd; +} +.tabs-p-tool a:hover, +.tabs li a:hover.tabs-close, +.tabs-scroller-over { + background-color: #E6E6E6; +} +.tabs li.tabs-selected a.tabs-inner { + border-bottom: 1px solid #fff; +} +.tabs-header-bottom .tabs li.tabs-selected a.tabs-inner { + border-top: 1px solid #fff; +} +.tabs-header-left .tabs li.tabs-selected a.tabs-inner { + border-right: 1px solid #fff; +} +.tabs-header-right .tabs li.tabs-selected a.tabs-inner { + border-left: 1px solid #fff; +} +.tabs-header .tabs-pill li.tabs-selected a.tabs-inner { + background: #CCE6FF; + color: #000; + filter: none; + border-color: #ddd; +} diff --git a/src/main/webapp/css/themes/metro/tagbox.css b/src/main/webapp/css/themes/metro/tagbox.css new file mode 100644 index 0000000..7c6fd15 --- /dev/null +++ b/src/main/webapp/css/themes/metro/tagbox.css @@ -0,0 +1,44 @@ +.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: 0px 0px 0px 0px; + -webkit-border-radius: 0px 0px 0px 0px; + border-radius: 0px 0px 0px 0px; + background: #E6E6E6; + color: #444; +} +.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); +} diff --git a/src/main/webapp/css/themes/metro/textbox.css b/src/main/webapp/css/themes/metro/textbox.css new file mode 100644 index 0000000..53f08dd --- /dev/null +++ b/src/main/webapp/css/themes/metro/textbox.css @@ -0,0 +1,139 @@ +.textbox { + position: relative; + border: 1px solid #ddd; + background-color: #fff; + vertical-align: middle; + display: inline-block; + overflow: hidden; + white-space: nowrap; + margin: 0; + padding: 0; + -moz-border-radius: 0px 0px 0px 0px; + -webkit-border-radius: 0px 0px 0px 0px; + border-radius: 0px 0px 0px 0px; +} +.textbox .textbox-text { + font-size: 12px; + border: 0; + margin: 0; + padding: 4px; + white-space: normal; + vertical-align: top; + outline-style: none; + resize: none; + -moz-border-radius: 0px 0px 0px 0px; + -webkit-border-radius: 0px 0px 0px 0px; + border-radius: 0px 0px 0px 0px; +} +.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: 22px; + line-height: 22px; + 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: #c4c4c4; + -moz-box-shadow: 0 0 3px 0 #ddd; + -webkit-box-shadow: 0 0 3px 0 #ddd; + box-shadow: 0 0 3px 0 #ddd; +} +.textbox-invalid { + border-color: #ffa8a8; + background-color: #fff3f3; +} diff --git a/src/main/webapp/css/themes/metro/tooltip.css b/src/main/webapp/css/themes/metro/tooltip.css new file mode 100644 index 0000000..b8f955c --- /dev/null +++ b/src/main/webapp/css/themes/metro/tooltip.css @@ -0,0 +1,103 @@ +.tooltip { + position: absolute; + display: none; + z-index: 9900000; + outline: none; + opacity: 1; + filter: alpha(opacity=100); + padding: 5px; + border-width: 1px; + border-style: solid; + border-radius: 5px; + -moz-border-radius: 0px 0px 0px 0px; + -webkit-border-radius: 0px 0px 0px 0px; + border-radius: 0px 0px 0px 0px; +} +.tooltip-content { + font-size: 12px; +} +.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; + _border-color: tomato; + _filter: chroma(color=tomato); +} +.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: #fff; + border-color: #ddd; + color: #444; +} +.tooltip-right .tooltip-arrow-outer { + border-right-color: #ddd; +} +.tooltip-right .tooltip-arrow { + border-right-color: #fff; +} +.tooltip-left .tooltip-arrow-outer { + border-left-color: #ddd; +} +.tooltip-left .tooltip-arrow { + border-left-color: #fff; +} +.tooltip-top .tooltip-arrow-outer { + border-top-color: #ddd; +} +.tooltip-top .tooltip-arrow { + border-top-color: #fff; +} +.tooltip-bottom .tooltip-arrow-outer { + border-bottom-color: #ddd; +} +.tooltip-bottom .tooltip-arrow { + border-bottom-color: #fff; +} diff --git a/src/main/webapp/css/themes/metro/tree.css b/src/main/webapp/css/themes/metro/tree.css new file mode 100644 index 0000000..52892a1 --- /dev/null +++ b/src/main/webapp/css/themes/metro/tree.css @@ -0,0 +1,161 @@ +.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: 18px; + 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; + vertical-align: top; + overflow: hidden; +} +.tree-expanded { + background: url('images/tree_icons.png') no-repeat -18px 0px; +} +.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; +} +.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; +} +.tree-folder-open { + background: url('images/tree_icons.png') no-repeat -224px 0; +} +.tree-file { + background: url('images/tree_icons.png') no-repeat -240px 0; +} +.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; +} +.tree-title { + font-size: 12px; + display: inline-block; + text-decoration: none; + vertical-align: top; + white-space: nowrap; + padding: 0 2px; + height: 18px; + line-height: 18px; +} +.tree-node-proxy { + font-size: 12px; + 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 #ddd; + font-size: 12px; + line-height: 16px; + padding: 0 4px; + margin: 0; + width: 80px; + outline-style: none; + vertical-align: top; + position: absolute; + top: 0; +} +.tree-node-proxy { + background-color: #fff; + color: #444; + border-color: #ddd; +} +.tree-node-hover { + background: #E6E6E6; + color: #444; +} +.tree-node-selected { + background: #CCE6FF; + color: #000; +} +.tree-node-hidden { + display: none; +} diff --git a/src/main/webapp/css/themes/metro/validatebox.css b/src/main/webapp/css/themes/metro/validatebox.css new file mode 100644 index 0000000..1fc3ad6 --- /dev/null +++ b/src/main/webapp/css/themes/metro/validatebox.css @@ -0,0 +1,5 @@ +.validatebox-invalid { + border-color: #ffa8a8; + background-color: #fff3f3; + color: #000; +} diff --git a/src/main/webapp/css/themes/metro/window.css b/src/main/webapp/css/themes/metro/window.css new file mode 100644 index 0000000..7ec192e --- /dev/null +++ b/src/main/webapp/css/themes/metro/window.css @@ -0,0 +1,177 @@ +.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: 0px 0px 0px 0px; + -webkit-border-radius: 0px 0px 0px 0px; + border-radius: 0px 0px 0px 0px; +} +.window-shadow { + background: #eee; + -moz-box-shadow: 2px 2px 3px #ededed; + -webkit-box-shadow: 2px 2px 3px #ededed; + box-shadow: 2px 2px 3px #ededed; + filter: progid:DXImageTransform.Microsoft.Blur(pixelRadius=2,MakeShadow=false,ShadowOpacity=0.2); +} +.window, +.window .window-body { + border-color: #ddd; +} +.window { + background-color: #ffffff; +} +.window-proxy { + border: 1px dashed #ddd; +} +.window-proxy-mask, +.window-mask { + background: #eee; +} +.window .panel-footer { + border: 1px solid #ddd; + 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-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; +} diff --git a/src/main/webapp/css/themes/mobile.css b/src/main/webapp/css/themes/mobile.css new file mode 100644 index 0000000..b9f2f58 --- /dev/null +++ b/src/main/webapp/css/themes/mobile.css @@ -0,0 +1,380 @@ +.m-toolbar{ + position: relative; + text-align: center; + min-height: 32px; +} +.m-toolbar .m-title{ + line-height: 32px; + 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: -13px; +} +.m-back::before,.m-next::after{ + position: relative; + display: inline-block; + box-sizing: border-box; + vertical-align: top; + border-style: solid; + -webkit-transform:rotate(45deg); + transform:rotate(45deg); + width: 10px; + height: 10px; + top: 7px; + content: ''; +} +.m-back::before{ + border-width: 0 0 1px 1px; + margin-left: 6px; + margin-right: -6px; +} +.m-next::after{ + border-width: 1px 1px 0 0; + margin-left: -6px; + margin-right: 6px; +} +.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: 8px 4px; +} +.calendar-header,.calendar-title{ + height: 30px; +} +.calendar-title span{ + height: 26px; + line-height: 26px +} +.datebox-button{ + height: 24px; +} +.datebox-button a{ + line-height: 24px; + display1: inline-block; +} +.tree-node{ + height:28px; + padding:5px 0; + box-sizing: border-box; +} + +.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: 35px; +} +.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; +} + +.spinner-arrow-up,.spinner-arrow-down{ + position: relative; + display: inline-block; + width: 50%; + height: 100%; + background: none; + float: right; +} +.spinner-arrow-down{ + float: left; +} +.spinner-arrow-up::after, +.spinner-arrow-down::after{ + position: absolute; + display: inline-block; + box-sizing: border-box; + vertical-align: top; + border-style: solid; + border-width: 2px 2px 0 0; + -webkit-transform:rotate(-45deg); + transform:rotate(-45deg); + width: 10px; + height: 10px; + left: 50%; + top: 50%; + margin-left: -5px; + margin-top: -3px; + content: ''; +} +.spinner-arrow-down::after{ + border-width: 0 0 2px 2px; + margin-top: -8px; +} \ No newline at end of file diff --git a/src/main/webapp/favicon.ico b/src/main/webapp/favicon.ico new file mode 100644 index 0000000000000000000000000000000000000000..8a7d1b3429b036ea870e2de1e6581b65dfca39d3 GIT binary patch literal 4286 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

s=;a(m@;$EB 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%0D~K|(U$Yut6O`_a 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%0A|gj*)R8i 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�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

yCTVW27 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 literal 0 HcmV?d00001 diff --git a/src/main/webapp/images/000.jpg b/src/main/webapp/images/000.jpg new file mode 100644 index 0000000000000000000000000000000000000000..99ca5953e4fae5b180c807b6347b18bf82ecb717 GIT binary patch literal 136252 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 X0mH5cg4Zw^AX#F8{NV4jmBD`iwh6H7 literal 0 HcmV?d00001 diff --git a/src/main/webapp/images/1.png b/src/main/webapp/images/1.png new file mode 100644 index 0000000000000000000000000000000000000000..0e28aa7c8b25beb36a65e82b85dfe459cac0af64 GIT binary patch literal 775805 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%0ApWU|E0UKHJ5L(tS|LhB(B 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

    _&_ueG_|Xes&)Ghb%;XE5g73 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

    7Nw=Ng@t?YOH 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 XRmbe1~&n7SAR5Nf4)M^ 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�nZ@yIA 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¥VgGoh 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 z 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