@ -0,0 +1,36 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<classpath>
|
||||
<classpathentry kind="src" output="target/classes" path="src/main/java">
|
||||
<attributes>
|
||||
<attribute name="optional" value="true"/>
|
||||
<attribute name="maven.pomderived" value="true"/>
|
||||
</attributes>
|
||||
</classpathentry>
|
||||
<classpathentry excluding="**" kind="src" output="target/classes" path="src/main/resources">
|
||||
<attributes>
|
||||
<attribute name="maven.pomderived" value="true"/>
|
||||
</attributes>
|
||||
</classpathentry>
|
||||
<classpathentry kind="src" output="target/test-classes" path="src/test/java">
|
||||
<attributes>
|
||||
<attribute name="optional" value="true"/>
|
||||
<attribute name="maven.pomderived" value="true"/>
|
||||
</attributes>
|
||||
</classpathentry>
|
||||
<classpathentry excluding="**" kind="src" output="target/test-classes" path="src/test/resources">
|
||||
<attributes>
|
||||
<attribute name="maven.pomderived" value="true"/>
|
||||
</attributes>
|
||||
</classpathentry>
|
||||
<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.8">
|
||||
<attributes>
|
||||
<attribute name="maven.pomderived" value="true"/>
|
||||
</attributes>
|
||||
</classpathentry>
|
||||
<classpathentry kind="con" path="org.eclipse.m2e.MAVEN2_CLASSPATH_CONTAINER">
|
||||
<attributes>
|
||||
<attribute name="maven.pomderived" value="true"/>
|
||||
</attributes>
|
||||
</classpathentry>
|
||||
<classpathentry kind="output" path="target/classes"/>
|
||||
</classpath>
|
@ -0,0 +1 @@
|
||||
/target/
|
@ -0,0 +1,23 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<projectDescription>
|
||||
<name>tamguo-mms</name>
|
||||
<comment></comment>
|
||||
<projects>
|
||||
</projects>
|
||||
<buildSpec>
|
||||
<buildCommand>
|
||||
<name>org.eclipse.jdt.core.javabuilder</name>
|
||||
<arguments>
|
||||
</arguments>
|
||||
</buildCommand>
|
||||
<buildCommand>
|
||||
<name>org.eclipse.m2e.core.maven2Builder</name>
|
||||
<arguments>
|
||||
</arguments>
|
||||
</buildCommand>
|
||||
</buildSpec>
|
||||
<natures>
|
||||
<nature>org.eclipse.jdt.core.javanature</nature>
|
||||
<nature>org.eclipse.m2e.core.maven2Nature</nature>
|
||||
</natures>
|
||||
</projectDescription>
|
@ -0,0 +1,6 @@
|
||||
eclipse.preferences.version=1
|
||||
encoding//src/main/java=UTF-8
|
||||
encoding//src/main/resources=UTF-8
|
||||
encoding//src/test/java=UTF-8
|
||||
encoding//src/test/resources=UTF-8
|
||||
encoding/<project>=UTF-8
|
@ -0,0 +1,5 @@
|
||||
eclipse.preferences.version=1
|
||||
org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.8
|
||||
org.eclipse.jdt.core.compiler.compliance=1.8
|
||||
org.eclipse.jdt.core.compiler.problem.forbiddenReference=warning
|
||||
org.eclipse.jdt.core.compiler.source=1.8
|
@ -0,0 +1,4 @@
|
||||
activeProfiles=
|
||||
eclipse.preferences.version=1
|
||||
resolveWorkspaceProjects=true
|
||||
version=1
|
@ -0,0 +1,171 @@
|
||||
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
|
||||
<modelVersion>4.0.0</modelVersion>
|
||||
<groupId>com.tamguo</groupId>
|
||||
<artifactId>tamguo-mms</artifactId>
|
||||
<version>1.0.0</version>
|
||||
|
||||
<parent>
|
||||
<groupId>org.springframework.boot</groupId>
|
||||
<artifactId>spring-boot-starter-parent</artifactId>
|
||||
<version>2.0.3.RELEASE</version>
|
||||
<relativePath /> <!-- lookup parent from repository -->
|
||||
</parent>
|
||||
|
||||
<properties>
|
||||
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
|
||||
<java.version>1.8</java.version>
|
||||
<mybatis-plus-boot-starter.version>2.1.9</mybatis-plus-boot-starter.version>
|
||||
</properties>
|
||||
|
||||
<dependencies>
|
||||
<dependency>
|
||||
<groupId>org.springframework.boot</groupId>
|
||||
<artifactId>spring-boot-starter-web</artifactId>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>org.springframework.boot</groupId>
|
||||
<artifactId>spring-boot-starter-thymeleaf</artifactId>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>org.springframework.boot</groupId>
|
||||
<artifactId>spring-boot-starter-jdbc</artifactId>
|
||||
</dependency>
|
||||
<!-- mybatis-plus begin -->
|
||||
<dependency>
|
||||
<groupId>com.baomidou</groupId>
|
||||
<artifactId>mybatis-plus-boot-starter</artifactId>
|
||||
<version>${mybatis-plus-boot-starter.version}</version>
|
||||
<exclusions>
|
||||
<exclusion>
|
||||
<artifactId>tomcat-jdbc</artifactId>
|
||||
<groupId>org.apache.tomcat</groupId>
|
||||
</exclusion>
|
||||
</exclusions>
|
||||
</dependency>
|
||||
<!-- mybatis-plus end -->
|
||||
<dependency>
|
||||
<groupId>net.sourceforge.nekohtml</groupId>
|
||||
<artifactId>nekohtml</artifactId>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>org.springframework.boot</groupId>
|
||||
<artifactId>spring-boot-starter-test</artifactId>
|
||||
<scope>test</scope>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>org.springframework.boot</groupId>
|
||||
<artifactId>spring-boot-starter-redis</artifactId>
|
||||
<version>1.3.8.RELEASE</version>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>org.springframework.session</groupId>
|
||||
<artifactId>spring-session-data-redis</artifactId>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>com.github.theborakompanioni</groupId>
|
||||
<artifactId>thymeleaf-extras-shiro</artifactId>
|
||||
<version>1.2.1</version>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>com.alibaba</groupId>
|
||||
<artifactId>fastjson</artifactId>
|
||||
<version>1.2.32</version>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>org.apache.shiro</groupId>
|
||||
<artifactId>shiro-spring</artifactId>
|
||||
<version>1.2.5</version>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>org.apache.shiro</groupId>
|
||||
<artifactId>shiro-ehcache</artifactId>
|
||||
<version>1.2.5</version>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>cn.songxinqiang</groupId>
|
||||
<artifactId>com.baidu.ueditor</artifactId>
|
||||
<version>1.1.2-edit-1.0</version>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>commons-codec</groupId>
|
||||
<artifactId>commons-codec</artifactId>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>commons-fileupload</groupId>
|
||||
<artifactId>commons-fileupload</artifactId>
|
||||
<version>1.3.1</version>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>commons-io</groupId>
|
||||
<artifactId>commons-io</artifactId>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>com.alibaba</groupId>
|
||||
<artifactId>druid</artifactId>
|
||||
<version>1.0.18</version>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>mysql</groupId>
|
||||
<artifactId>mysql-connector-java</artifactId>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>org.apache.commons</groupId>
|
||||
<artifactId>commons-lang3</artifactId>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>com.aliyun</groupId>
|
||||
<artifactId>aliyun-java-sdk-dysmsapi</artifactId>
|
||||
<version>1.0.0</version>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>com.aliyun</groupId>
|
||||
<artifactId>aliyun-java-sdk-core</artifactId>
|
||||
<version>3.2.8</version>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>org.apache.commons</groupId>
|
||||
<artifactId>commons-email</artifactId>
|
||||
<version>1.5</version>
|
||||
</dependency>
|
||||
|
||||
<dependency>
|
||||
<groupId>com.bladejava</groupId>
|
||||
<artifactId>blade-patchca</artifactId>
|
||||
<version>1.0.5</version>
|
||||
</dependency>
|
||||
|
||||
<dependency>
|
||||
<groupId>com.tamguo</groupId>
|
||||
<artifactId>tamguo-modules-core</artifactId>
|
||||
<version>1.0.0</version>
|
||||
</dependency>
|
||||
|
||||
<dependency>
|
||||
<groupId>commons-collections</groupId>
|
||||
<artifactId>commons-collections</artifactId>
|
||||
<version>3.2.1</version>
|
||||
</dependency>
|
||||
</dependencies>
|
||||
|
||||
<dependencyManagement>
|
||||
<dependencies>
|
||||
<dependency>
|
||||
<groupId>org.springframework.cloud</groupId>
|
||||
<artifactId>spring-cloud-dependencies</artifactId>
|
||||
<version>Camden.SR6</version>
|
||||
<type>pom</type>
|
||||
<scope>import</scope>
|
||||
</dependency>
|
||||
</dependencies>
|
||||
</dependencyManagement>
|
||||
|
||||
<build>
|
||||
<finalName>mms</finalName>
|
||||
<plugins>
|
||||
<plugin>
|
||||
<groupId>org.springframework.boot</groupId>
|
||||
<artifactId>spring-boot-maven-plugin</artifactId>
|
||||
</plugin>
|
||||
</plugins>
|
||||
</build>
|
||||
</project>
|
@ -0,0 +1,36 @@
|
||||
package com.tamguo;
|
||||
|
||||
import org.springframework.boot.autoconfigure.SpringBootApplication;
|
||||
import org.springframework.boot.autoconfigure.http.HttpMessageConverters;
|
||||
import org.springframework.boot.builder.SpringApplicationBuilder;
|
||||
import org.springframework.context.annotation.Bean;
|
||||
import org.springframework.context.annotation.ComponentScan;
|
||||
|
||||
import com.alibaba.fastjson.serializer.SerializerFeature;
|
||||
import com.alibaba.fastjson.support.config.FastJsonConfig;
|
||||
import com.alibaba.fastjson.support.spring.FastJsonHttpMessageConverter;
|
||||
|
||||
@SpringBootApplication
|
||||
@ComponentScan("com.tamguo")
|
||||
public class Application {
|
||||
|
||||
public static void main(String[] args) {
|
||||
new SpringApplicationBuilder(Application.class).run(args);
|
||||
}
|
||||
|
||||
/**
|
||||
* FastJson替代Jackson
|
||||
* @return
|
||||
*/
|
||||
@Bean
|
||||
public HttpMessageConverters fastJsonHttpMessageConverters() {
|
||||
FastJsonHttpMessageConverter fastConverter = new FastJsonHttpMessageConverter();
|
||||
FastJsonConfig fastJsonConfig = new FastJsonConfig();
|
||||
fastJsonConfig.setDateFormat("yyyy-MM-dd HH:mm:ss");
|
||||
fastJsonConfig.setSerializerFeatures(SerializerFeature.DisableCircularReferenceDetect);
|
||||
fastConverter.setFastJsonConfig(fastJsonConfig);
|
||||
FastJsonHttpMessageConverter converter = fastConverter;
|
||||
return new HttpMessageConverters(converter);
|
||||
}
|
||||
|
||||
}
|
@ -0,0 +1,23 @@
|
||||
package com.tamguo.config.dao;
|
||||
|
||||
import com.baomidou.mybatisplus.mapper.MetaObjectHandler;
|
||||
import org.apache.ibatis.reflection.MetaObject;
|
||||
import org.slf4j.Logger;
|
||||
import org.slf4j.LoggerFactory;
|
||||
|
||||
/**
|
||||
* 注入公共字段自动填充,任选注入方式即可
|
||||
*/
|
||||
//@Component
|
||||
public class MyMetaObjectHandler extends MetaObjectHandler {
|
||||
|
||||
protected final static Logger logger = LoggerFactory.getLogger(MyMetaObjectHandler.class);
|
||||
|
||||
@Override
|
||||
public void insertFill(MetaObject metaObject) {
|
||||
}
|
||||
|
||||
@Override
|
||||
public void updateFill(MetaObject metaObject) {
|
||||
}
|
||||
}
|
@ -0,0 +1,72 @@
|
||||
package com.tamguo.config.shiro;
|
||||
|
||||
import java.util.Set;
|
||||
import org.apache.shiro.authc.AuthenticationException;
|
||||
import org.apache.shiro.authc.AuthenticationInfo;
|
||||
import org.apache.shiro.authc.AuthenticationToken;
|
||||
import org.apache.shiro.authc.IncorrectCredentialsException;
|
||||
import org.apache.shiro.authc.LockedAccountException;
|
||||
import org.apache.shiro.authc.SimpleAuthenticationInfo;
|
||||
import org.apache.shiro.authc.UnknownAccountException;
|
||||
import org.apache.shiro.authz.AuthorizationInfo;
|
||||
import org.apache.shiro.authz.SimpleAuthorizationInfo;
|
||||
import org.apache.shiro.crypto.hash.Sha256Hash;
|
||||
import org.apache.shiro.realm.AuthorizingRealm;
|
||||
import org.apache.shiro.subject.PrincipalCollection;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
|
||||
import com.tamguo.modules.member.model.MemberEntity;
|
||||
import com.tamguo.modules.member.service.IMemberService;
|
||||
|
||||
/**
|
||||
* 认证
|
||||
*
|
||||
*/
|
||||
public class MemberRealm extends AuthorizingRealm {
|
||||
|
||||
@Autowired
|
||||
private IMemberService iMemberService;
|
||||
|
||||
/**
|
||||
* 授权(验证权限时调用)
|
||||
*/
|
||||
@Override
|
||||
protected AuthorizationInfo doGetAuthorizationInfo(PrincipalCollection principals) {
|
||||
Set<String > permsSet = null;
|
||||
SimpleAuthorizationInfo info = new SimpleAuthorizationInfo();
|
||||
info.setStringPermissions(permsSet);
|
||||
|
||||
return info;
|
||||
}
|
||||
|
||||
/**
|
||||
* 认证(登录时调用)
|
||||
*/
|
||||
@Override
|
||||
protected AuthenticationInfo doGetAuthenticationInfo(
|
||||
AuthenticationToken token) throws AuthenticationException {
|
||||
String username = (String) token.getPrincipal();
|
||||
String password = new String((char[]) token.getCredentials());
|
||||
|
||||
MemberEntity member = iMemberService.findByUsername(username);
|
||||
if(member == null) {
|
||||
throw new UnknownAccountException("用户名或密码有误,请重新输入或找回密码");
|
||||
}
|
||||
Integer loginFailureCount = iMemberService.getLoginFailureCount(member);
|
||||
if(loginFailureCount > 10) {
|
||||
throw new LockedAccountException("账号被锁定");
|
||||
}
|
||||
|
||||
if(!new Sha256Hash(password).toHex().equals(member.getPassword())){
|
||||
loginFailureCount++;
|
||||
iMemberService.updateLoginFailureCount(member , loginFailureCount);
|
||||
throw new IncorrectCredentialsException("用户名或密码有误,请重新输入或找回密码");
|
||||
}
|
||||
// 更新登录时间
|
||||
iMemberService.updateLastLoginTime(member.getId());
|
||||
|
||||
SimpleAuthenticationInfo info = new SimpleAuthenticationInfo(member, password, getName());
|
||||
return info;
|
||||
}
|
||||
|
||||
}
|
@ -0,0 +1,69 @@
|
||||
package com.tamguo.config.shiro;
|
||||
|
||||
import java.util.LinkedHashMap;
|
||||
import java.util.Map;
|
||||
|
||||
import org.apache.shiro.cache.ehcache.EhCacheManager;
|
||||
import org.apache.shiro.spring.LifecycleBeanPostProcessor;
|
||||
import org.apache.shiro.spring.security.interceptor.AuthorizationAttributeSourceAdvisor;
|
||||
import org.apache.shiro.spring.web.ShiroFilterFactoryBean;
|
||||
import org.apache.shiro.web.mgt.DefaultWebSecurityManager;
|
||||
import org.springframework.aop.framework.autoproxy.DefaultAdvisorAutoProxyCreator;
|
||||
import org.springframework.context.annotation.Bean;
|
||||
import org.springframework.context.annotation.Configuration;
|
||||
|
||||
@Configuration
|
||||
public class ShiroConfiguration {
|
||||
private static Map<String, String> filterChainDefinitionMap = new LinkedHashMap<String, String>();
|
||||
|
||||
@Bean(name = "shiroRealm")
|
||||
public MemberRealm getShiroRealm() {
|
||||
return new MemberRealm();
|
||||
}
|
||||
|
||||
@Bean(name = "shiroEhcacheManager")
|
||||
public EhCacheManager getEhCacheManager() {
|
||||
EhCacheManager em = new EhCacheManager();
|
||||
em.setCacheManagerConfigFile("classpath:ehcache-shiro.xml");
|
||||
return em;
|
||||
}
|
||||
|
||||
@Bean(name = "lifecycleBeanPostProcessor")
|
||||
public LifecycleBeanPostProcessor getLifecycleBeanPostProcessor() {
|
||||
return new LifecycleBeanPostProcessor();
|
||||
}
|
||||
|
||||
@Bean
|
||||
public DefaultAdvisorAutoProxyCreator getDefaultAdvisorAutoProxyCreator() {
|
||||
DefaultAdvisorAutoProxyCreator daap = new DefaultAdvisorAutoProxyCreator();
|
||||
daap.setProxyTargetClass(true);
|
||||
return daap;
|
||||
}
|
||||
|
||||
@Bean(name = "securityManager")
|
||||
public DefaultWebSecurityManager getDefaultWebSecurityManager() {
|
||||
DefaultWebSecurityManager dwsm = new DefaultWebSecurityManager();
|
||||
dwsm.setRealm(getShiroRealm());
|
||||
dwsm.setCacheManager(getEhCacheManager());
|
||||
return dwsm;
|
||||
}
|
||||
|
||||
@Bean
|
||||
public AuthorizationAttributeSourceAdvisor getAuthorizationAttributeSourceAdvisor() {
|
||||
AuthorizationAttributeSourceAdvisor aasa = new AuthorizationAttributeSourceAdvisor();
|
||||
aasa.setSecurityManager(getDefaultWebSecurityManager());
|
||||
return new AuthorizationAttributeSourceAdvisor();
|
||||
}
|
||||
|
||||
@Bean(name = "shiroFilter")
|
||||
public ShiroFilterFactoryBean getShiroFilterFactoryBean() {
|
||||
ShiroFilterFactoryBean shiroFilterFactoryBean = new ShiroFilterFactoryBean();
|
||||
shiroFilterFactoryBean.setSecurityManager(getDefaultWebSecurityManager());
|
||||
shiroFilterFactoryBean.setLoginUrl("/login");
|
||||
shiroFilterFactoryBean.setSuccessUrl("/index");
|
||||
filterChainDefinitionMap.put("/member/**", "authc");
|
||||
filterChainDefinitionMap.put("/**", "anon");
|
||||
shiroFilterFactoryBean.setFilterChainDefinitionMap(filterChainDefinitionMap);
|
||||
return shiroFilterFactoryBean;
|
||||
}
|
||||
}
|
@ -0,0 +1,21 @@
|
||||
package com.tamguo.config.web;
|
||||
|
||||
import org.springframework.boot.web.server.ErrorPage;
|
||||
import org.springframework.boot.web.server.ErrorPageRegistrar;
|
||||
import org.springframework.boot.web.server.ErrorPageRegistry;
|
||||
import org.springframework.http.HttpStatus;
|
||||
import org.springframework.stereotype.Component;
|
||||
|
||||
@Component
|
||||
public class ErrorConfigurar implements ErrorPageRegistrar {
|
||||
|
||||
@Override
|
||||
public void registerErrorPages(ErrorPageRegistry registry) {
|
||||
ErrorPage[] errorPages=new ErrorPage[2];
|
||||
errorPages[0]=new ErrorPage(HttpStatus.NOT_FOUND,"/error404");
|
||||
errorPages[1]=new ErrorPage(HttpStatus.INTERNAL_SERVER_ERROR,"/error500");
|
||||
|
||||
registry.addErrorPages(errorPages);
|
||||
}
|
||||
|
||||
}
|
@ -0,0 +1,40 @@
|
||||
package com.tamguo.config.web;
|
||||
|
||||
import java.util.HashMap;
|
||||
import java.util.Map;
|
||||
import javax.annotation.Resource;
|
||||
|
||||
import org.springframework.context.EnvironmentAware;
|
||||
import org.springframework.core.env.Environment;
|
||||
import org.springframework.stereotype.Component;
|
||||
import org.thymeleaf.spring5.view.ThymeleafViewResolver;
|
||||
|
||||
import com.tamguo.common.utils.SystemConstant;
|
||||
|
||||
@Component
|
||||
public class ThymeleafConfig implements EnvironmentAware{
|
||||
|
||||
@Resource
|
||||
private Environment env;
|
||||
|
||||
@Resource
|
||||
private void configureThymeleafStaticVars(ThymeleafViewResolver viewResolver) {
|
||||
if(viewResolver != null) {
|
||||
Map<String, Object> vars = new HashMap<>();
|
||||
vars.put("domainName", env.getProperty("domain.name"));
|
||||
vars.put("adminDomain", env.getProperty("admin.domain.name"));
|
||||
vars.put("PAPER_TYPE_ZHENTI", SystemConstant.ZHENGTI_PAPER_ID);
|
||||
vars.put("PAPER_TYPE_MONI", SystemConstant.MONI_PAPER_ID);
|
||||
vars.put("PAPER_TYPE_YATI", SystemConstant.YATI_PAPER_ID);
|
||||
vars.put("PAPER_TYPE_MINGXIAO", SystemConstant.MINGXIAO_PAPER_ID);
|
||||
vars.put("BEIJING_AREA_ID", SystemConstant.BEIJING_AREA_ID);
|
||||
viewResolver.setStaticVariables(vars);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setEnvironment(Environment environment) {
|
||||
env = environment;
|
||||
}
|
||||
|
||||
}
|
@ -0,0 +1,30 @@
|
||||
package com.tamguo.config.web;
|
||||
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.beans.factory.annotation.Value;
|
||||
import org.springframework.context.annotation.Configuration;
|
||||
import org.springframework.web.servlet.config.annotation.InterceptorRegistry;
|
||||
import org.springframework.web.servlet.config.annotation.ResourceHandlerRegistry;
|
||||
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
|
||||
|
||||
import com.tamguo.web.interceptor.MemberInterceptor;
|
||||
|
||||
|
||||
@Configuration
|
||||
public class WebConfig implements WebMvcConfigurer {
|
||||
|
||||
@Value("${file.storage.path}")
|
||||
private String fileStoragePath;
|
||||
@Autowired
|
||||
private MemberInterceptor memberInterceptor;
|
||||
|
||||
@Override
|
||||
public void addInterceptors(InterceptorRegistry registry) {
|
||||
registry.addInterceptor(memberInterceptor).addPathPatterns("/member/**").excludePathPatterns("login.html","register.html","password/**");
|
||||
}
|
||||
|
||||
@Override
|
||||
public void addResourceHandlers(ResourceHandlerRegistry registry) {
|
||||
registry.addResourceHandler("/files/**").addResourceLocations("file:"+fileStoragePath);
|
||||
}
|
||||
}
|
@ -0,0 +1,43 @@
|
||||
package com.tamguo.utils;
|
||||
|
||||
import org.apache.shiro.SecurityUtils;
|
||||
import org.apache.shiro.session.Session;
|
||||
import org.apache.shiro.subject.Subject;
|
||||
|
||||
import com.tamguo.modules.member.model.MemberEntity;
|
||||
|
||||
public class ShiroUtils {
|
||||
|
||||
public static Session getSession() {
|
||||
return SecurityUtils.getSubject().getSession();
|
||||
}
|
||||
|
||||
public static Subject getSubject() {
|
||||
return SecurityUtils.getSubject();
|
||||
}
|
||||
|
||||
public static MemberEntity getMember() {
|
||||
return (MemberEntity)SecurityUtils.getSubject().getPrincipal();
|
||||
}
|
||||
|
||||
public static String getMemberId() {
|
||||
return getMember().getId();
|
||||
}
|
||||
|
||||
public static void setSessionAttribute(Object key, Object value) {
|
||||
getSession().setAttribute(key, value);
|
||||
}
|
||||
|
||||
public static Object getSessionAttribute(Object key) {
|
||||
return getSession().getAttribute(key);
|
||||
}
|
||||
|
||||
public static boolean isLogin() {
|
||||
return SecurityUtils.getSubject().getPrincipal() != null;
|
||||
}
|
||||
|
||||
public static void logout() {
|
||||
SecurityUtils.getSubject().logout();
|
||||
}
|
||||
|
||||
}
|
@ -0,0 +1,115 @@
|
||||
package com.tamguo.web;
|
||||
|
||||
import java.io.IOException;
|
||||
import javax.servlet.ServletException;
|
||||
import javax.servlet.http.HttpServletResponse;
|
||||
import javax.servlet.http.HttpSession;
|
||||
|
||||
import org.apache.commons.lang3.StringUtils;
|
||||
import org.apache.shiro.authc.IncorrectCredentialsException;
|
||||
import org.apache.shiro.authc.LockedAccountException;
|
||||
import org.apache.shiro.authc.UnknownAccountException;
|
||||
import org.apache.shiro.authc.UsernamePasswordToken;
|
||||
import org.apache.shiro.subject.Subject;
|
||||
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 org.springframework.web.servlet.ModelAndView;
|
||||
|
||||
import com.tamguo.common.image.CaptchaUtils;
|
||||
import com.tamguo.common.utils.Result;
|
||||
import com.tamguo.common.utils.SystemConstant;
|
||||
import com.tamguo.utils.ShiroUtils;
|
||||
|
||||
@Controller
|
||||
public class LoginController {
|
||||
|
||||
@RequestMapping("captcha.jpg")
|
||||
public void captcha(HttpServletResponse response , HttpSession session) throws ServletException, IOException {
|
||||
response.setHeader("Cache-Control", "no-store, no-cache");
|
||||
response.setContentType("image/jpeg");
|
||||
|
||||
String a = CaptchaUtils.generateCaptcha(response.getOutputStream());
|
||||
session.setAttribute(SystemConstant.KAPTCHA_SESSION_KEY, a);
|
||||
}
|
||||
|
||||
@RequestMapping(value = "/login.html", method = RequestMethod.GET)
|
||||
public ModelAndView login(ModelAndView model){
|
||||
model.setViewName("login");
|
||||
model.addObject("isVerifyCode" , "0");
|
||||
return model;
|
||||
}
|
||||
|
||||
@RequestMapping(value = "/submitLogin.html", method = RequestMethod.POST)
|
||||
public ModelAndView submitLogin(String username , String password , String verifyCode , ModelAndView model , HttpSession session , HttpServletResponse response) throws IOException{
|
||||
Result result = Result.successResult(null);
|
||||
if(StringUtils.isEmpty(verifyCode)) {
|
||||
result = Result.result(202, null, "请输入验证码");
|
||||
} else if(StringUtils.isNotEmpty(verifyCode)){
|
||||
String kaptcha = session.getAttribute(SystemConstant.KAPTCHA_SESSION_KEY).toString();
|
||||
if (!verifyCode.equalsIgnoreCase(kaptcha)) {
|
||||
result = Result.result(205, null, "验证码错误");
|
||||
} else {
|
||||
Subject subject = ShiroUtils.getSubject();
|
||||
UsernamePasswordToken token = new UsernamePasswordToken(username, password);
|
||||
try {
|
||||
subject.login(token);
|
||||
|
||||
session.setAttribute("currMember", ShiroUtils.getMember());
|
||||
response.sendRedirect("member/index.html");
|
||||
return null;
|
||||
} catch (UnknownAccountException e) {
|
||||
result = Result.result(201, null, "用户名或密码有误,请重新输入或找回密码");
|
||||
} catch (IncorrectCredentialsException e) {
|
||||
result = Result.result(202, null, "用户名或密码有误,请重新输入或找回密码");
|
||||
} catch (LockedAccountException e) {
|
||||
result = Result.result(203, null, "账号被锁定");
|
||||
}
|
||||
}
|
||||
}
|
||||
model.setViewName("login");
|
||||
model.addObject("code", result.getCode());
|
||||
model.addObject("msg" , result.getMessage());
|
||||
model.addObject("username", username);
|
||||
return model;
|
||||
}
|
||||
|
||||
@RequestMapping(value = "/miniLogin.html", method = RequestMethod.GET)
|
||||
@ResponseBody
|
||||
public Result miniLogin(String username , String password , String captcha, ModelAndView model , HttpSession session) {
|
||||
Result result = null;
|
||||
if(StringUtils.isEmpty(captcha)) {
|
||||
result = Result.result(204, null, "请输入验证码");
|
||||
} else if(StringUtils.isNotEmpty(captcha)){
|
||||
String kaptcha = session.getAttribute(SystemConstant.KAPTCHA_SESSION_KEY).toString();
|
||||
if (!captcha.equalsIgnoreCase(kaptcha)) {
|
||||
result = Result.result(205, null, "验证码错误");
|
||||
}else {
|
||||
Subject subject = ShiroUtils.getSubject();
|
||||
UsernamePasswordToken token = new UsernamePasswordToken(username, password);
|
||||
try {
|
||||
subject.login(token);
|
||||
session.setAttribute("currMember", ShiroUtils.getMember());
|
||||
result = Result.successResult(ShiroUtils.getMember());
|
||||
} catch (UnknownAccountException e) {
|
||||
result = Result.result(201, null, "用户名或密码有误,请重新输入或找回密码");
|
||||
} catch (IncorrectCredentialsException e) {
|
||||
result = Result.result(202, null, "用户名或密码有误,请重新输入或找回密码");
|
||||
} catch (LockedAccountException e) {
|
||||
result = Result.result(203, null, "账号被锁定");
|
||||
}
|
||||
}
|
||||
}
|
||||
return result;
|
||||
}
|
||||
|
||||
@RequestMapping(value = "/isLogin.html", method = RequestMethod.GET)
|
||||
@ResponseBody
|
||||
public Result isLogin() {
|
||||
if(ShiroUtils.isLogin()) {
|
||||
return Result.result(1, null , "已经登录");
|
||||
}
|
||||
return Result.result(0, null, "未登录");
|
||||
}
|
||||
}
|
@ -0,0 +1,81 @@
|
||||
package com.tamguo.web;
|
||||
|
||||
import javax.servlet.http.HttpSession;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
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 org.springframework.web.servlet.ModelAndView;
|
||||
|
||||
import com.tamguo.common.utils.Result;
|
||||
import com.tamguo.common.utils.SystemConstant;
|
||||
import com.tamguo.modules.member.service.IMemberService;
|
||||
|
||||
@Controller
|
||||
public class PasswordController {
|
||||
|
||||
@Autowired
|
||||
private IMemberService iMemberService;
|
||||
|
||||
@RequestMapping(value = "password/find.html", method = RequestMethod.GET)
|
||||
public ModelAndView confirmAccount(ModelAndView model){
|
||||
model.setViewName("password/confirmAccount");
|
||||
return model;
|
||||
}
|
||||
|
||||
@RequestMapping(value = "password/confirmAccount.html", method = RequestMethod.POST)
|
||||
public ModelAndView submitConfirmAccount(String username , String veritycode , ModelAndView model , HttpSession session){
|
||||
Result result = iMemberService.confirmAccount(username, veritycode);
|
||||
String kaptcha = session.getAttribute(SystemConstant.KAPTCHA_SESSION_KEY).toString();
|
||||
if (!veritycode.equalsIgnoreCase(kaptcha)) {
|
||||
result = Result.result(202, null, "验证码错误");
|
||||
}
|
||||
if(result.getCode() == 200){
|
||||
model.setViewName("password/securityCheck");
|
||||
model.addObject("result", result);
|
||||
model.addObject("isEmail", username.contains("@") ? "1" : "0");
|
||||
}else{
|
||||
model.setViewName("password/confirmAccount");
|
||||
model.addObject("account", username);
|
||||
model.addObject("username",username);
|
||||
model.addObject("veritycode", veritycode);
|
||||
model.addObject("code", result.getCode());
|
||||
}
|
||||
return model;
|
||||
}
|
||||
|
||||
@RequestMapping(value = "password/securityCheck.html", method = RequestMethod.POST)
|
||||
public ModelAndView securityCheck(String username , String isEmail , String mobileVcode , ModelAndView model){
|
||||
Result result = iMemberService.securityCheck(username , isEmail , mobileVcode);
|
||||
if(result.getCode() == 200){
|
||||
model.addObject("username", username);
|
||||
model.addObject("resetPasswordKey" , result.getResult());
|
||||
model.setViewName("password/resetPassword");
|
||||
}else{
|
||||
model.addObject("result", result);
|
||||
model.addObject("isEmail", isEmail);
|
||||
model.addObject("codeError", "1");
|
||||
model.setViewName("password/securityCheck");
|
||||
}
|
||||
return model;
|
||||
}
|
||||
|
||||
@RequestMapping(value = "password/resetPassword.html", method = RequestMethod.POST)
|
||||
public ModelAndView resetPassword(String resetPasswordKey , String username , String password , String verifypwd , ModelAndView model){
|
||||
Result result = iMemberService.resetPassword(resetPasswordKey , username , password , verifypwd);
|
||||
if(result.getCode() == 200){
|
||||
model.setViewName("password/resetPwSuccess");
|
||||
}else{
|
||||
model.setViewName("password/resetPassword");
|
||||
}
|
||||
return model;
|
||||
}
|
||||
|
||||
@RequestMapping(value = "password/checkAccount.html", method = RequestMethod.GET)
|
||||
@ResponseBody
|
||||
public Result checkAccount(String account){
|
||||
return iMemberService.checkAccount(account);
|
||||
}
|
||||
|
||||
}
|
@ -0,0 +1,69 @@
|
||||
package com.tamguo.web;
|
||||
|
||||
import javax.servlet.http.HttpSession;
|
||||
import org.apache.shiro.authc.IncorrectCredentialsException;
|
||||
import org.apache.shiro.authc.LockedAccountException;
|
||||
import org.apache.shiro.authc.UnknownAccountException;
|
||||
import org.apache.shiro.authc.UsernamePasswordToken;
|
||||
import org.apache.shiro.subject.Subject;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.stereotype.Controller;
|
||||
import org.springframework.web.bind.annotation.RequestBody;
|
||||
import org.springframework.web.bind.annotation.RequestMapping;
|
||||
import org.springframework.web.bind.annotation.RequestMethod;
|
||||
import org.springframework.web.bind.annotation.ResponseBody;
|
||||
import org.springframework.web.servlet.ModelAndView;
|
||||
|
||||
import com.tamguo.common.utils.Result;
|
||||
import com.tamguo.modules.member.model.MemberEntity;
|
||||
import com.tamguo.modules.member.service.IMemberService;
|
||||
import com.tamguo.utils.ShiroUtils;
|
||||
|
||||
@Controller
|
||||
public class RegisterController {
|
||||
|
||||
@Autowired
|
||||
private IMemberService iMemberService;
|
||||
|
||||
@RequestMapping(value = "/register.html", method = RequestMethod.GET)
|
||||
public ModelAndView register(ModelAndView model , HttpSession session) {
|
||||
model.setViewName("register");
|
||||
return model;
|
||||
}
|
||||
|
||||
@RequestMapping(value = "/checkUsername.html", method = RequestMethod.GET)
|
||||
@ResponseBody
|
||||
public Result checkUsername(String username){
|
||||
return iMemberService.checkUsername(username);
|
||||
}
|
||||
|
||||
@RequestMapping(value = "/checkMobile.html", method = RequestMethod.GET)
|
||||
@ResponseBody
|
||||
public Result checkMobile(String mobile){
|
||||
return iMemberService.checkMobile(mobile);
|
||||
}
|
||||
|
||||
@RequestMapping(value = "/subRegister.html", method = RequestMethod.POST)
|
||||
@ResponseBody
|
||||
public Result subRegister(@RequestBody MemberEntity member , HttpSession session){
|
||||
Result result = iMemberService.register(member);
|
||||
if(result.getCode() == 200) {
|
||||
Subject subject = ShiroUtils.getSubject();
|
||||
MemberEntity memberEntity = (MemberEntity) result.getResult();
|
||||
UsernamePasswordToken token = new UsernamePasswordToken(memberEntity.getUsername(), member.getPassword());
|
||||
try {
|
||||
subject.login(token);
|
||||
|
||||
session.setAttribute("currMember", ShiroUtils.getMember());
|
||||
} catch (UnknownAccountException e) {
|
||||
return Result.result(201, null, "用户名或密码有误,请重新输入或找回密码");
|
||||
} catch (IncorrectCredentialsException e) {
|
||||
return Result.result(202, null, "用户名或密码有误,请重新输入或找回密码");
|
||||
} catch (LockedAccountException e) {
|
||||
return Result.result(203, null, "账号被锁定");
|
||||
}
|
||||
}
|
||||
return result;
|
||||
}
|
||||
|
||||
}
|
@ -0,0 +1,55 @@
|
||||
package com.tamguo.web.interceptor;
|
||||
|
||||
import java.net.URLEncoder;
|
||||
import javax.servlet.http.HttpServletRequest;
|
||||
import javax.servlet.http.HttpServletResponse;
|
||||
import org.springframework.stereotype.Component;
|
||||
import org.springframework.web.servlet.handler.HandlerInterceptorAdapter;
|
||||
|
||||
@Component
|
||||
public class MemberInterceptor extends HandlerInterceptorAdapter{
|
||||
|
||||
/** "重定向URL"参数名称 */
|
||||
private static final String REDIRECT_URL_PARAMETER_NAME = "redirectUrl";
|
||||
|
||||
/** 默认登录URL */
|
||||
private static final String DEFAULT_LOGIN_URL = "/login.html";
|
||||
|
||||
/** 登录URL */
|
||||
private String loginUrl = DEFAULT_LOGIN_URL;
|
||||
|
||||
/**
|
||||
* 请求前处理
|
||||
*
|
||||
* @param request
|
||||
* HttpServletRequest
|
||||
* @param response
|
||||
* HttpServletResponse
|
||||
* @param handler
|
||||
* 处理器
|
||||
* @return 是否继续执行
|
||||
*/
|
||||
@Override
|
||||
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
|
||||
Object currMember = request.getSession().getAttribute("currMember");
|
||||
if (currMember != null) {
|
||||
return true;
|
||||
} else {
|
||||
String requestType = request.getHeader("X-Requested-With");
|
||||
if (requestType != null && requestType.equalsIgnoreCase("XMLHttpRequest")) {
|
||||
response.addHeader("loginStatus", "accessDenied");
|
||||
response.sendError(HttpServletResponse.SC_FORBIDDEN);
|
||||
return false;
|
||||
} else {
|
||||
if (request.getMethod().equalsIgnoreCase("GET")) {
|
||||
String redirectUrl = request.getQueryString() != null ? request.getRequestURI() + "?" + request.getQueryString() : request.getRequestURI();
|
||||
response.sendRedirect(request.getContextPath() + loginUrl + "?" + REDIRECT_URL_PARAMETER_NAME + "=" + URLEncoder.encode(redirectUrl, "UTF-8"));
|
||||
} else {
|
||||
response.sendRedirect(request.getContextPath() + loginUrl);
|
||||
}
|
||||
return false;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
}
|
@ -0,0 +1,62 @@
|
||||
domain.name=http://localhost:8084/
|
||||
admin.domain.name=http://localhost:8084/
|
||||
server.port=8084
|
||||
jasypt.encryptor.password=tamguo
|
||||
|
||||
spring.datasource.connectionProperties=druid.stat.mergeSql=true;druid.stat.slowSqlMillis=5000
|
||||
spring.datasource.driver-class-name=com.mysql.jdbc.Driver
|
||||
spring.datasource.filters=stat,wall,log4j
|
||||
spring.datasource.initialSize=5
|
||||
spring.datasource.maxActive=20
|
||||
spring.datasource.maxPoolPreparedStatementPerConnectionSize=20
|
||||
spring.datasource.maxWait=60000
|
||||
spring.datasource.minEvictableIdleTimeMillis=300000
|
||||
spring.datasource.minIdle=5
|
||||
spring.datasource.password=123456
|
||||
spring.datasource.poolPreparedStatements=true
|
||||
spring.datasource.testOnBorrow=false
|
||||
spring.datasource.testOnReturn=false
|
||||
spring.datasource.testWhileIdle=true
|
||||
spring.datasource.timeBetweenEvictionRunsMillis=60000
|
||||
spring.datasource.type=com.alibaba.druid.pool.DruidDataSource
|
||||
spring.datasource.url=jdbc:mysql://127.0.0.1:3306/tamguo_20181110?useUnicode=true&characterEncoding=UTF-8&useSSL=false
|
||||
spring.datasource.username=root
|
||||
spring.datasource.validationQuery=SELECT 1 FROM DUAL
|
||||
|
||||
mybatis-plus.mapper-locations=classpath:/mappers/*Mapper.xml
|
||||
mybatis-plus.typeAliasesPackage=com.tamguo.modules.*.model
|
||||
mybatis-plus.typeEnumsPackage=com.tamguo.modules.*.model.enums
|
||||
mybatis-plus.global-config.id-type=5
|
||||
mybatis-plus.global-config.field-strategy=2
|
||||
mybatis-plus.global-config.db-column-underline=true
|
||||
mybatis-plus.global-config.refresh-mapper=true
|
||||
mybatis-plus.global-config.key-generator=com.baomidou.mybatisplus.incrementer.H2KeyGenerator
|
||||
mybatis-plus.global-config.logic-delete-value=0
|
||||
mybatis-plus.global-config.logic-not-delete-value=1
|
||||
mybatis-plus.global-config.sql-injector=com.baomidou.mybatisplus.mapper.LogicSqlInjector
|
||||
mybatis-plus.global-config.meta-object-handler=com.tamguo.config.dao.MyMetaObjectHandler
|
||||
mybatis-plus.global-config.sql-parser-cache=true
|
||||
mybatis-plus.configuration.map-underscore-to-camel-case=true
|
||||
mybatis-plus.configuration.cache-enabled=false
|
||||
|
||||
spring.thymeleaf.prefix=classpath:/templates/
|
||||
spring.thymeleaf.suffix=.html
|
||||
spring.thymeleaf.mode=LEGACYHTML5
|
||||
spring.thymeleaf.encoding=UTF-8
|
||||
spring.thymeleaf.content-type=text/html
|
||||
spring.thymeleaf.cache=false
|
||||
|
||||
redis.hostname=127.0.0.1
|
||||
redis.port=6379
|
||||
redis.password=
|
||||
|
||||
logging.level.root=INFO
|
||||
logging.level.org.springframework.web=INFO
|
||||
logging.file=/home/webdata/log/tamguo.log
|
||||
logging.pattern.console=%d{yyyy/MM/dd-HH:mm:ss} [%thread] %-5level %logger- %msg%n
|
||||
logging.pattern.file=%d{yyyy/MM/dd-HH:mm} [%thread] %-5level %logger- %msg%n
|
||||
|
||||
server.compression.enabled=true
|
||||
server.compression.mime-types=application/json,application/xml,text/html,text/xml,text/plain
|
||||
|
||||
file.storage.path=/home/webdata/files/
|
@ -0,0 +1,11 @@
|
||||
<ehcache updateCheck="false" name="shiroCache">
|
||||
<defaultCache
|
||||
maxElementsInMemory="10000"
|
||||
eternal="false"
|
||||
timeToIdleSeconds="120"
|
||||
timeToLiveSeconds="120"
|
||||
overflowToDisk="false"
|
||||
diskPersistent="false"
|
||||
diskExpiryThreadIntervalSeconds="120"
|
||||
/>
|
||||
</ehcache>
|
@ -0,0 +1,9 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<redis>
|
||||
<preKey value="TAMGUO:" />
|
||||
<pool maxActive="50" maxIdle="20" maxWait="1000" />
|
||||
<servers>
|
||||
<!-- test -->
|
||||
<server ip="127.0.0.1" port="6379"/>
|
||||
</servers>
|
||||
</redis>
|
@ -0,0 +1,560 @@
|
||||
#wrapper {
|
||||
background: #fff;
|
||||
height: auto;
|
||||
position: relative;
|
||||
min-height: 100%;
|
||||
_height: 100%;
|
||||
width: 920px;
|
||||
margin: 0 auto;
|
||||
}
|
||||
#wrapper {
|
||||
width: 100%;
|
||||
}
|
||||
#head {
|
||||
padding-top: 40px;
|
||||
}
|
||||
#head, #content, #foot {
|
||||
width: 980px;
|
||||
margin-left: auto;
|
||||
margin-right: auto;
|
||||
}
|
||||
#head {
|
||||
height: 75px;
|
||||
z-index: 100;
|
||||
}
|
||||
.mod-header {
|
||||
display: inline;
|
||||
font-size: 66px;
|
||||
}
|
||||
a {
|
||||
text-decoration: underline;
|
||||
color: #00c;
|
||||
}
|
||||
#nav {
|
||||
width: 100%;
|
||||
background: #fafafa;
|
||||
z-index: 1;
|
||||
}
|
||||
.clearfix:after {
|
||||
content: '\20';
|
||||
display: block;
|
||||
height: 0;
|
||||
clear: both;
|
||||
}
|
||||
.clearfix:after {
|
||||
content: '\20';
|
||||
display: block;
|
||||
height: 0;
|
||||
clear: both;
|
||||
visibility: hidden;
|
||||
overflow: hidden;
|
||||
}
|
||||
#content {
|
||||
margin-top: 30px;
|
||||
width: 920px;
|
||||
background: url(../../images/member/login-bg.png) no-repeat 0 center;
|
||||
padding-bottom: 40px;
|
||||
display: none;
|
||||
}
|
||||
.login-container {
|
||||
_height: 475px;
|
||||
min-height: 475px;
|
||||
}
|
||||
.login-form {
|
||||
float: right;
|
||||
width: 354px;
|
||||
font-family: "Microsoft Yahei", 微软雅黑, Arial, STHeiti;
|
||||
box-shadow: rgb(239, 239, 239) 1px 1px 1px;
|
||||
padding-top: 25px;
|
||||
border-width: 1px;
|
||||
border-style: solid;
|
||||
border-color: rgb(239, 239, 239);
|
||||
border-image: initial;
|
||||
}
|
||||
.tang-pass-login {
|
||||
position: relative;
|
||||
}
|
||||
.tang-pass-login .pass-form {
|
||||
padding: 0 28px;
|
||||
}
|
||||
p.pass-form-logo {
|
||||
background: url(../../images/logo_731bc32.png) no-repeat left;
|
||||
background: url(../../images/logo_731bc32.png) no-repeat left;
|
||||
font-size: 16px;
|
||||
height: 32px;
|
||||
line-height: 46px;
|
||||
padding-left: 118px;
|
||||
color: #000;
|
||||
margin-top: 0;
|
||||
margin-bottom: 15px;
|
||||
}
|
||||
.tang-pass-login a, .tang-pass-login label, .tang-pass-login p, .tang-pass-login li, .tang-pass-login input {
|
||||
font-size: 12px;
|
||||
margin: 0;
|
||||
padding: 0;
|
||||
list-style: none;
|
||||
}
|
||||
.tang-pass-login .pass-generalErrorWrapper {
|
||||
height: auto;
|
||||
_height: 28px;
|
||||
min-height: 28px;
|
||||
color: #fc4343;
|
||||
padding-bottom: 2px;
|
||||
}
|
||||
.tang-pass-login .pass-generalError {
|
||||
display: block;
|
||||
font-size: 12px;
|
||||
line-height: 14px;
|
||||
padding-top: 8px;
|
||||
}
|
||||
.tang-pass-login .pass-form-item.pass-form-item-userName {
|
||||
z-index: 21;
|
||||
}
|
||||
.tang-pass-login .pass-form-item {
|
||||
position: relative;
|
||||
clear: both;
|
||||
z-index: 18;
|
||||
}
|
||||
.tang-pass-login .pass-form-item {
|
||||
margin-bottom: 16px;
|
||||
}
|
||||
.tang-pass-login a, .tang-pass-login label, .tang-pass-login p, .tang-pass-login li, .tang-pass-login input {
|
||||
font-size: 12px;
|
||||
margin: 0;
|
||||
padding: 0;
|
||||
list-style: none;
|
||||
}
|
||||
.tang-pass-login .pass-form-item input.pass-text-input-userName, .tang-pass-login .pass-form-item input.pass-text-input-password {
|
||||
padding-left: 8px;
|
||||
width: 284px;
|
||||
}
|
||||
.tang-pass-login .pass-form-item .pass-text-input {
|
||||
position: relative;
|
||||
z-index: 17;
|
||||
display: block;
|
||||
height: 20px;
|
||||
line-height: 20px;
|
||||
width: 300px;
|
||||
font-size: 12px;
|
||||
color: rgb(102, 102, 102);
|
||||
font-family: Tahoma, Helvetica, "Microsoft Yahei", 微软雅黑, Arial, STHeiti;
|
||||
padding: 10px 8px;
|
||||
margin: 0px;
|
||||
border-width: 1px;
|
||||
border-style: solid;
|
||||
border-color: rgb(222, 222, 222);
|
||||
border-image: initial;
|
||||
transition: 0.3s;
|
||||
}
|
||||
.tang-pass-login a, .tang-pass-login label, .tang-pass-login p, .tang-pass-login li, .tang-pass-login input {
|
||||
font-size: 12px;
|
||||
margin: 0;
|
||||
padding: 0;
|
||||
list-style: none;
|
||||
}
|
||||
.tang-pass-login .pass-form-item .pass-clearbtn {
|
||||
position: absolute;
|
||||
z-index: 20;
|
||||
top: 14px;
|
||||
right: 6px;
|
||||
height: 16px;
|
||||
width: 16px;
|
||||
background: url(../../images/member/pass_login_icons.png) no-repeat 0 0;
|
||||
cursor: pointer;
|
||||
}
|
||||
.tang-pass-login .pass-suggestion-list {
|
||||
position: absolute;
|
||||
margin: 0;
|
||||
padding: 0;
|
||||
z-index: 21;
|
||||
top: 42px;
|
||||
_top: 43px;
|
||||
left: 0;
|
||||
border: 1px solid #dedede;
|
||||
border-top: 0;
|
||||
background: #fff;
|
||||
width: 300px;
|
||||
}
|
||||
.tang-pass-login li.pass-item-suggsetion {
|
||||
position: relative;
|
||||
z-index: 2001;
|
||||
line-height: 14px;
|
||||
font-family: 宋体;
|
||||
font-size: 12px;
|
||||
color: rgb(51, 51, 51);
|
||||
cursor: pointer;
|
||||
word-break: break-all;
|
||||
padding: 5px 0px 5px 6px;
|
||||
}
|
||||
.tang-pass-login a, .tang-pass-login label, .tang-pass-login p, .tang-pass-login li, .tang-pass-login input {
|
||||
font-size: 12px;
|
||||
margin: 0;
|
||||
padding: 0;
|
||||
list-style: none;
|
||||
}
|
||||
.tang-pass-login li.pass-item-suggsetion a {
|
||||
position: absolute;
|
||||
display: none;
|
||||
top: 4px;
|
||||
right: 4px;
|
||||
height: 16px;
|
||||
width: 16px;
|
||||
background: url(../../images/member/pass_login_icons.png) no-repeat 0 0;
|
||||
}
|
||||
.tang-pass-login a {
|
||||
text-decoration: none;
|
||||
color: #2e82ff;
|
||||
}
|
||||
.tang-pass-login a, .tang-pass-login label, .tang-pass-login p, .tang-pass-login li, .tang-pass-login input {
|
||||
font-size: 12px;
|
||||
margin: 0;
|
||||
padding: 0;
|
||||
list-style: none;
|
||||
}
|
||||
.tang-pass-login .pass-form-item .pass-item-selectbtn-userName {
|
||||
position: absolute;
|
||||
display: block;
|
||||
height: 16px;
|
||||
width: 16px;
|
||||
background: url(../../images/member/pass_login_icons.png) no-repeat 0 -30px;
|
||||
top: 6px;
|
||||
right: 31px;
|
||||
_right: 50px;
|
||||
cursor: pointer;
|
||||
}
|
||||
.tang-pass-login {
|
||||
position: relative;
|
||||
}
|
||||
.tang-pass-qrcode p.pass-form-logo {
|
||||
margin-left: 28px;
|
||||
}
|
||||
p.pass-form-logo {
|
||||
background: url(../../images/logo_731bc32.png) no-repeat left;
|
||||
background: url(../../images/logo_731bc32.png) no-repeat left;
|
||||
font-size: 16px;
|
||||
height: 32px;
|
||||
line-height: 46px;
|
||||
padding-left: 118px;
|
||||
color: #000;
|
||||
margin-top: 0;
|
||||
margin-bottom: 15px;
|
||||
}
|
||||
.tang-pass-qrcode .tang-pass-qrcode-content {
|
||||
padding-top: 24px;
|
||||
height: 180px;
|
||||
overflow: hidden;
|
||||
text-align: center;
|
||||
}
|
||||
.tang-pass-qrcode .tang-pass-qrcode-imgWrapper {
|
||||
display: block;
|
||||
}
|
||||
.Qrcode-animationRight {
|
||||
-webkit-animation: marginRight .3s linear;
|
||||
-moz-animation: marginRight .3s linear;
|
||||
animation: marginRight .3s linear;
|
||||
-webkit-transition: all .3s liner;
|
||||
-moz-transition: all .3s liner;
|
||||
transition: .3s liner;
|
||||
-webkit-transform: translateX(0);
|
||||
-moz-transform: translateX(0);
|
||||
-ms-transform: translateX(0);
|
||||
transform: translateX(0);
|
||||
}
|
||||
.Qrcode-status-con {
|
||||
width: 138px;
|
||||
height: 138px;
|
||||
border: 1px solid #ecedee;
|
||||
padding: 9px;
|
||||
text-align: center;
|
||||
color: #000;
|
||||
font-size: 14px;
|
||||
display: none;
|
||||
line-height: 20px;
|
||||
margin: 0 auto;
|
||||
-webkit-transition: all .3s liner;
|
||||
-moz-transition: all .3s liner;
|
||||
transition: .3s liner;
|
||||
-webkit-transform: translateX(0);
|
||||
-moz-transform: translateX(0);
|
||||
-ms-transform: translateX(0);
|
||||
transform: translateX(0);
|
||||
}
|
||||
.tang-pass-qrcode .tang-pass-qrcode-content img {
|
||||
width: 138px;
|
||||
height: 138px;
|
||||
}
|
||||
.tang-pass-login a, .tang-pass-login label, .tang-pass-login p, .tang-pass-login li, .tang-pass-login input {
|
||||
font-size: 12px;
|
||||
margin: 0;
|
||||
padding: 0;
|
||||
list-style: none;
|
||||
}
|
||||
.Qrcode-status-success .Qrcode-status-icon {
|
||||
background: url(../../images/member/qrcode-success.png) no-repeat center;
|
||||
}
|
||||
.Qrcode-status-con .Qrcode-status-icon {
|
||||
width: 36px;
|
||||
height: 36px;
|
||||
margin: 25px auto 15px;
|
||||
}
|
||||
.Qrcode-status-msg {
|
||||
font-size: 12px;
|
||||
color: #333;
|
||||
}
|
||||
.Qrcode-status-con {
|
||||
width: 138px;
|
||||
height: 138px;
|
||||
border: 1px solid #ecedee;
|
||||
padding: 9px;
|
||||
text-align: center;
|
||||
color: #000;
|
||||
font-size: 14px;
|
||||
display: none;
|
||||
line-height: 20px;
|
||||
margin: 0 auto;
|
||||
-webkit-transition: all .3s liner;
|
||||
-moz-transition: all .3s liner;
|
||||
transition: .3s liner;
|
||||
-webkit-transform: translateX(0);
|
||||
-moz-transform: translateX(0);
|
||||
-ms-transform: translateX(0);
|
||||
transform: translateX(0);
|
||||
}
|
||||
.Qrcode-status-error .Qrcode-status-icon {
|
||||
background: url(../../images/member/qrcode-error.png) no-repeat center;
|
||||
background-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACQAAAAkCAIAAABuYg/PAAAAGXRFW…/D4I4xl3xkwAY7jblOLLskcyH7N0XjiBnHLHsac/8IMAC4AzcrBhyRBQAAAABJRU5ErkJggg==);
|
||||
}
|
||||
.Qrcode-status-con .Qrcode-status-icon {
|
||||
width: 36px;
|
||||
height: 36px;
|
||||
margin: 25px auto 15px;
|
||||
}
|
||||
.tang-pass-login p.Qrcode-refresh-btn {
|
||||
color: #38f;
|
||||
text-align: center;
|
||||
padding: 8px 10px;
|
||||
cursor: pointer;
|
||||
display: inline-block;
|
||||
margin-top: 3px;
|
||||
}
|
||||
.tang-pass-qrcode .tang-pass-qrcode-title {
|
||||
font-size: 16px;
|
||||
text-align: center;
|
||||
line-height: 16px;
|
||||
padding-left: 0;
|
||||
}
|
||||
.tang-pass-qrcode .tang-pass-qrcode-title a {
|
||||
font-size: 16px;
|
||||
}
|
||||
.tang-pass-login a {
|
||||
text-decoration: none;
|
||||
color: #2e82ff;
|
||||
}
|
||||
.tang-pass-footerBar {
|
||||
color: #2e82ff;
|
||||
margin-top: 40px;
|
||||
height: 60px;
|
||||
line-height: 60px;
|
||||
background: #f0f6ff;
|
||||
padding: 0 28px;
|
||||
position: relative;
|
||||
}
|
||||
.tang-pass-footerBarQrcode, .tang-pass-footerBarULogin {
|
||||
display: inline-block;
|
||||
width: 80px;
|
||||
text-align: left;
|
||||
margin: 0;
|
||||
font-size: 14px;
|
||||
cursor: pointer;
|
||||
}
|
||||
.tang-pass-footerBarPhoenix {
|
||||
color: #2e82ff;
|
||||
display: inline-block;
|
||||
}
|
||||
.tang-pass-footerBarPhoenixSplit {
|
||||
width: 1px;
|
||||
background: #3582f8;
|
||||
height: 8px;
|
||||
margin-right: 16px;
|
||||
display: inline-block;
|
||||
}
|
||||
.tang-pass-login-phoenix {
|
||||
padding: 0 0 10px 16px;
|
||||
position: absolute;
|
||||
margin-top: -36px;
|
||||
}
|
||||
.tang-pass-login-phoenix .pass-phoenix-list {
|
||||
clear: both;
|
||||
line-height: 20px;
|
||||
zoom: 1;
|
||||
}
|
||||
.clear {
|
||||
clear: both;
|
||||
height: 0;
|
||||
line-height: 0;
|
||||
font-size: 0;
|
||||
visibility: hidden;
|
||||
overflow: hidden;
|
||||
}
|
||||
.tang-pass-login-phoenix .pass-phoenix-list .pass-phoenix-btn {
|
||||
float: left;
|
||||
}
|
||||
.tang-pass-login-phoenix .pass-phoenix-list .bd-acc-list, .tang-pass-login-phoenix .pass-phoenix-list .bd-acc-list li {
|
||||
float: left;
|
||||
list-style: none;
|
||||
margin: 0;
|
||||
padding: 0;
|
||||
}
|
||||
.tang-pass-login-phoenix .pass-phoenix-list .bd-acc-list li {
|
||||
width: 26px;
|
||||
}
|
||||
.tang-pass-login-phoenix .pass-phoenix-list .bd-acc-list, .tang-pass-login-phoenix .pass-phoenix-list .bd-acc-list li {
|
||||
float: left;
|
||||
list-style: none;
|
||||
margin: 0;
|
||||
padding: 0;
|
||||
}
|
||||
.tang-pass-footerBar a, .tang-pass-footerBar a:hover {
|
||||
text-decoration: none;
|
||||
font-size: 14px;
|
||||
width: 80px;
|
||||
text-align: center;
|
||||
}
|
||||
a.pass-reglink {
|
||||
position: absolute;
|
||||
right: 26px;
|
||||
color: #2e82ff;
|
||||
top: 0;
|
||||
}
|
||||
.tang-pass-login .pass-form-item-submit {
|
||||
position: relative;
|
||||
}
|
||||
.tang-pass-login .pass-form-item {
|
||||
position: relative;
|
||||
clear: both;
|
||||
z-index: 18;
|
||||
}
|
||||
.tang-pass-login .pass-form-item {
|
||||
margin-bottom: 16px;
|
||||
}
|
||||
.tang-pass-login .pass-form-item-submit .pass-button-submit {
|
||||
font-size: 14px;
|
||||
font-weight: 800;
|
||||
border: 0;
|
||||
color: #fff;
|
||||
cursor: pointer;
|
||||
}
|
||||
.tang-pass-login .pass-form-item-submit input {
|
||||
width: 302px;
|
||||
height: 40px;
|
||||
line-height: 40px;
|
||||
background: #2e82ff;
|
||||
border-radius: 2px;
|
||||
}
|
||||
.tang-pass-login input[type=submit] {
|
||||
-webkit-appearance: none;
|
||||
-webkit-box-sizing: content-box;
|
||||
-moz-box-sizing: content-box;
|
||||
box-sizing: content-box;
|
||||
}
|
||||
.tang-pass-login .pass-form-item-submit .pass-fgtpwd {
|
||||
display: inline-block;
|
||||
margin-top: 12px;
|
||||
font-size: 12px;
|
||||
}
|
||||
.tang-pass-login a {
|
||||
text-decoration: none;
|
||||
color: #2e82ff;
|
||||
}
|
||||
p.pass-form-logo {
|
||||
background: url(../../images/logo_731bc32.png) no-repeat left;
|
||||
background: url(../../images/logo_731bc32.png) no-repeat left;
|
||||
font-size: 16px;
|
||||
height: 32px;
|
||||
line-height: 46px;
|
||||
padding-left: 118px;
|
||||
color: #000;
|
||||
margin-top: 0;
|
||||
margin-bottom: 15px;
|
||||
}
|
||||
.tang-pass-login-phoenix .pass-phoenix-list .phoenix-btn-item {
|
||||
display: block;
|
||||
margin-right: 15px;
|
||||
color: #00C;
|
||||
text-decoration: underline;
|
||||
padding-left: 20px;
|
||||
cursor: pointer;
|
||||
font-size: 12px;
|
||||
list-style: none;
|
||||
background: url(../../images/member/loginv4.png) no-repeat;
|
||||
_background: url(../../images/member/loginv4.gif) no-repeat;
|
||||
width: 0;
|
||||
height: 18px;
|
||||
overflow: hidden;
|
||||
}
|
||||
.tang-pass-login-phoenix .pass-phoenix-list .bd-acc-qzone .phoenix-btn-item {
|
||||
background-position: -6px -55px;
|
||||
}
|
||||
.tang-pass-login-phoenix .pass-phoenix-list .bd-acc-tsina .phoenix-btn-item {
|
||||
background-position: -55px -33px;
|
||||
}
|
||||
.tang-pass-login-phoenix .pass-phoenix-list .bd-acc-weixin .phoenix-btn-item {
|
||||
background-position: -30px -30px;
|
||||
}
|
||||
#foot {
|
||||
text-align: center;
|
||||
color: #7a77c8;
|
||||
margin-top: 20px;
|
||||
margin-bottom: 20px;
|
||||
}
|
||||
.tang-pass-login .pass-form-item .pass-text-input-focus {
|
||||
border-color: #488ee7
|
||||
}
|
||||
.tang-pass-login .pass-form-item .pass-clearbtn:hover {
|
||||
background-position: 0 -16px
|
||||
}
|
||||
.tang-pass-login .pass-form-item .pass-text-input-verifyCode {
|
||||
width: 130px;
|
||||
float: left;
|
||||
}
|
||||
.tang-pass-sms p.pass-form-item-smsVerifyCode, .tang-pass-login p.pass-form-item-verifyCode {
|
||||
position: relative;
|
||||
margin-bottom: 15px;
|
||||
width: 302px;
|
||||
zoom: 1;
|
||||
}
|
||||
.tang-pass-login .pass-form-item span.pass-clearbtn-verifyCode {
|
||||
left: 125px;
|
||||
z-index: 1999;
|
||||
}
|
||||
.tang-pass-login .pass-verifyCode {
|
||||
width: 90px;
|
||||
height: 40px;
|
||||
background: url(../../images/member/loading_16.gif) no-repeat center center;
|
||||
border: 1px solid #DDD;
|
||||
float: left;
|
||||
margin-left: 5px;
|
||||
}
|
||||
.tang-pass-login .pass-change-verifyCode {
|
||||
padding-left: 12px;
|
||||
font-size: 12px;
|
||||
text-decoration: none;
|
||||
line-height: 40px;
|
||||
float: left;
|
||||
cursor: pointer;
|
||||
}
|
||||
.tang-pass-login a {
|
||||
text-decoration: none;
|
||||
color: #2e82ff;
|
||||
}
|
||||
.tang-pass-login .pass-form-item-memberPass {
|
||||
margin-bottom: 10px;
|
||||
display: inline-block;
|
||||
}
|
||||
.tang-pass-sms p.pass-form-item-smsVerifyCode:after, .tang-pass-login p.pass-form-item-verifyCode:after {
|
||||
line-height: 20px;
|
||||
content: "\20";
|
||||
display: block;
|
||||
height: 0;
|
||||
clear: both;
|
||||
}
|
@ -0,0 +1,452 @@
|
||||
#wrapper {
|
||||
width: 100%;
|
||||
}
|
||||
#head, #content, #foot {
|
||||
width: 980px;
|
||||
margin-left: auto;
|
||||
margin-right: auto;
|
||||
}
|
||||
#head {
|
||||
height: 75px;
|
||||
z-index: 100;
|
||||
}
|
||||
#head .mod-header {
|
||||
display: block;
|
||||
width: 330px;
|
||||
}
|
||||
.mod-header {
|
||||
display: inline;
|
||||
font-size: 66px;
|
||||
}
|
||||
#head .mod-header a {
|
||||
display: none;
|
||||
width: 330px;
|
||||
height: 76px;
|
||||
}
|
||||
#head .mod-header a img {
|
||||
margin-top: 15px;
|
||||
}
|
||||
#nav {
|
||||
background: 0 0;
|
||||
}
|
||||
#nav .nav-2 {
|
||||
height: 20px;
|
||||
background: url(../../images/reg_hr.png) no-repeat center top;
|
||||
}
|
||||
.clearfix {
|
||||
zoom: 1;
|
||||
}
|
||||
.mod-reg {
|
||||
position: relative;
|
||||
}
|
||||
.tang-pass-reg {
|
||||
position: relative;
|
||||
width: 720px;
|
||||
overflow: hidden;
|
||||
}
|
||||
.reg-content {
|
||||
float: left;
|
||||
}
|
||||
.tang-pass-reg .pass-generalErrorWrapper {
|
||||
margin: 0;
|
||||
padding: 0;
|
||||
}
|
||||
.tang-pass-reg .pass-generalError {
|
||||
color: #fc4343;
|
||||
display: block;
|
||||
height: 40px;
|
||||
font-size: 12px;
|
||||
line-height: 40px;
|
||||
}
|
||||
.tang-pass-reg .pass-form-item {
|
||||
position: relative;
|
||||
clear: both;
|
||||
margin-bottom: 20px;
|
||||
zoom: 1;
|
||||
}
|
||||
.tang-pass-reg .pass-label {
|
||||
display: block;
|
||||
float: left;
|
||||
height: 42px;
|
||||
width: 65px;
|
||||
margin-right: 10px;
|
||||
line-height: 42px;
|
||||
font-size: 14px;
|
||||
color: #666;
|
||||
font-weight: 700;
|
||||
text-align: right;
|
||||
}
|
||||
.tang-pass-reg .pass-text-input {
|
||||
display: block;
|
||||
position: relative;
|
||||
float: left;
|
||||
height: 16px;
|
||||
width: 328px;
|
||||
padding: 11px 10px;
|
||||
margin-right: 10px;
|
||||
border: 1px solid #ddd;
|
||||
font-size: 14px;
|
||||
color: #666;
|
||||
transition: .3s;
|
||||
}
|
||||
.tang-pass-reg .pass-clearbtn {
|
||||
display: block;
|
||||
position: absolute;
|
||||
width: 16px;
|
||||
height: 16px;
|
||||
background: url(../../images/reg_icons.png) -32px -24px no-repeat;
|
||||
top: 12px;
|
||||
left: 398px;
|
||||
cursor: pointer;
|
||||
}
|
||||
.tang-pass-reg .pass-item-error-password {
|
||||
position: absolute;
|
||||
float: left;
|
||||
background: 0 0;
|
||||
padding: 0;
|
||||
top: 0;
|
||||
left: 434px;
|
||||
height: 40px;
|
||||
}
|
||||
.tang-pass-reg .pass-item-error {
|
||||
display: none;
|
||||
float: left;
|
||||
position: relative;
|
||||
width: 250px;
|
||||
top: 12px;
|
||||
color: #fc4343;
|
||||
height: 16px;
|
||||
line-height: 14px;
|
||||
padding-left: 20px;
|
||||
background: url(../../images/err_small.png) 0 0 no-repeat;
|
||||
}
|
||||
.tang-pass-reg .pass-item-error-password .nopwd .pwd-strength-sum {
|
||||
display: none;
|
||||
}
|
||||
.tang-pass-reg .pass-item-error-password .nopwd .pwd-strength-detail {
|
||||
margin-top: 12px;
|
||||
}
|
||||
.tang-pass-reg .pass-item-error-password .pwd-strength-detail {
|
||||
background: url(../../images/reg_icons.png) -80px -24px no-repeat;
|
||||
padding-left: 20px;
|
||||
line-height: 16px;
|
||||
display: block;
|
||||
width: 220px;
|
||||
}
|
||||
.tang-pass-reg .pass-item-error-password .pwd-strength-bg {
|
||||
background-color: #eee;
|
||||
}
|
||||
.tang-pass-reg .pass-item-error-password .pwd-strength-sco, .tang-pass-reg .pass-item-error-password .pwd-strength-bg {
|
||||
display: block;
|
||||
position: absolute;
|
||||
width: 130px;
|
||||
height: 10px;
|
||||
line-height: 10px;
|
||||
}
|
||||
.tang-pass-reg .pwd-checklist .pwd-checklist-item-error {
|
||||
background-position: -86px -144px;
|
||||
color: #fc4343;
|
||||
}
|
||||
.tang-pass-reg .pwd-checklist .pwd-checklist-item-success {
|
||||
background-position: -86px -128px;
|
||||
}
|
||||
.tang-pass-reg .pwd-checklist .pwd-checklist-item-success {
|
||||
background-position: -86px -128px;
|
||||
}
|
||||
.tang-pass-reg .pwd-checklist {
|
||||
margin-left: 10px;
|
||||
padding: 5px 10px;
|
||||
border: 1px solid #ddd;
|
||||
box-shadow: 1px 1px 1px #efefef;
|
||||
background: #f9f9f9;
|
||||
width: 200px;
|
||||
}
|
||||
.tang-pass-reg .pwd-checklist-wrapper .pwd-checklist-arrow {
|
||||
position: absolute;
|
||||
top: 8px;
|
||||
left: 0;
|
||||
}
|
||||
.tang-pass-reg .pwd-checklist-wrapper .pwd-checklist-arrow em.arrowa {
|
||||
color: #ddd;
|
||||
left: 0;
|
||||
}
|
||||
.tang-pass-reg .pwd-checklist-wrapper .pwd-checklist-arrow em {
|
||||
position: absolute;
|
||||
left: 0;
|
||||
top: 0;
|
||||
font-size: 20px;
|
||||
}
|
||||
.tang-pass-reg .pwd-checklist-wrapper .pwd-checklist-arrow em.arrowb {
|
||||
color: #f9f9f9;
|
||||
left: 1px;
|
||||
}
|
||||
.tang-pass-reg .pass-item-tiptext-password {
|
||||
padding-top: 0;
|
||||
}
|
||||
.tang-pass-reg .pass-item-tiptext {
|
||||
display: block;
|
||||
}
|
||||
.tang-pass-reg .pass-form-item {
|
||||
position: relative;
|
||||
clear: both;
|
||||
margin-bottom: 20px;
|
||||
zoom: 1;
|
||||
}
|
||||
.tang-pass-reg .pass-form-item:after {
|
||||
visibility: hidden;
|
||||
display: block;
|
||||
font-size: 0;
|
||||
content: " ";
|
||||
clear: both;
|
||||
height: 0;
|
||||
}
|
||||
.tang-pass-reg .pass-item-placeholder {
|
||||
top: 12px;
|
||||
line-height: 16px;
|
||||
_line-height: 18px;
|
||||
font-size: 14px;
|
||||
color: #ccc;
|
||||
left: 87px;
|
||||
display: none;
|
||||
visibility: hidden;
|
||||
width: 0;
|
||||
left: 0;
|
||||
}
|
||||
.tang-pass-reg .pass-item-tiptext-password {
|
||||
padding-top: 0;
|
||||
}
|
||||
.tang-pass-reg .pass-item-tip-password {
|
||||
position: absolute;
|
||||
left: 430px;
|
||||
top: 0;
|
||||
zoom: 1;
|
||||
z-index: 20;
|
||||
}
|
||||
.tang-pass-reg .pass-item-tip {
|
||||
width: 270px;
|
||||
}
|
||||
.tang-pass-reg .pass-form-item {
|
||||
position: relative;
|
||||
clear: both;
|
||||
margin-bottom: 20px;
|
||||
zoom: 1;
|
||||
}
|
||||
.tang-pass-reg .pass-label {
|
||||
display: block;
|
||||
float: left;
|
||||
height: 42px;
|
||||
width: 65px;
|
||||
margin-right: 10px;
|
||||
line-height: 42px;
|
||||
font-size: 14px;
|
||||
color: #666;
|
||||
font-weight: 700;
|
||||
text-align: right;
|
||||
}
|
||||
.tang-pass-reg .pass-text-input-verifyCode {
|
||||
width: 156px;
|
||||
}
|
||||
.tang-pass-reg .pass-form-item-verifyCode span, .tang-pass-reg .pass-form-item-verifyCodeSend span {
|
||||
float: left;
|
||||
display: block;
|
||||
}
|
||||
.tang-pass-reg .pass-clearbtn-verifyCode {
|
||||
left: 228px;
|
||||
}
|
||||
.tang-pass-reg .pass-clearbtn {
|
||||
display: block;
|
||||
position: absolute;
|
||||
width: 16px;
|
||||
height: 16px;
|
||||
background: url(../../images/reg_icons.png) -32px -24px no-repeat;
|
||||
top: 12px;
|
||||
left: 398px;
|
||||
cursor: pointer;
|
||||
}
|
||||
.tang-pass-reg input.pass-button-verifyCodeSend {
|
||||
border-radius: 0;
|
||||
border: 1px solid #ddd;
|
||||
height: 40px;
|
||||
background: #f7f7f7;
|
||||
color: #666;
|
||||
font-weight: 400;
|
||||
width: 160px;
|
||||
float: left;
|
||||
margin-right: 10px;
|
||||
font-size: 14px;
|
||||
}
|
||||
.tang-pass-reg .pass-button {
|
||||
display: block;
|
||||
height: 50px;
|
||||
font-size: 16px;
|
||||
font-weight: 700;
|
||||
cursor: pointer;
|
||||
color: #fff;
|
||||
background-image: none;
|
||||
border-radius: 3px;
|
||||
border: 0;
|
||||
-moz-border-radius: 3px;
|
||||
-webkit-border-radius: 3px;
|
||||
transition: .3s;
|
||||
-moz-transition: .3s;
|
||||
-o-transition: .3s;
|
||||
-webkit-transition: .3s;
|
||||
}
|
||||
.tang-pass-reg .pass-form-item-verifyCode span.pass-item-error, .tang-pass-reg .pass-form-item-verifyCodeSend span.pass-item-error {
|
||||
display: none;
|
||||
}
|
||||
.tang-pass-reg .pass-form-item-verifyCode span, .tang-pass-reg .pass-form-item-verifyCodeSend span {
|
||||
float: left;
|
||||
display: block;
|
||||
}
|
||||
.tang-pass-reg .pass-form-item-verifyCode span, .tang-pass-reg .pass-form-item-verifyCodeSend span {
|
||||
float: left;
|
||||
display: block;
|
||||
}
|
||||
.tang-pass-reg .pass-item-tip-verifyCodeSend {
|
||||
padding-top: 2px;
|
||||
}
|
||||
.tang-pass-reg .pass-item-tip {
|
||||
width: 270px;
|
||||
}
|
||||
.tang-pass-reg .pass-form-item-isAgree {
|
||||
margin-left: 75px;
|
||||
}
|
||||
.tang-pass-reg .pass-form-item-isAgree .pass-checkbox-isAgree {
|
||||
vertical-align: middle;
|
||||
}
|
||||
.tang-pass-reg .pass-form-item-isAgree label {
|
||||
color: #666;
|
||||
font-size: 12px;
|
||||
margin-left: 5px;
|
||||
}
|
||||
.tang-pass-reg a {
|
||||
text-decoration: none;
|
||||
color: #1b66c7;
|
||||
}
|
||||
.tang-pass-reg a {
|
||||
text-decoration: none;
|
||||
color: #1b66c7;
|
||||
}
|
||||
.tang-pass-reg .pass-form-item-submit {
|
||||
position: relative;
|
||||
left: 75px;
|
||||
}
|
||||
.tang-pass-reg .pass-form-item {
|
||||
position: relative;
|
||||
clear: both;
|
||||
margin-bottom: 20px;
|
||||
zoom: 1;
|
||||
}
|
||||
.tang-pass-reg a {
|
||||
text-decoration: none;
|
||||
color: #1b66c7;
|
||||
}
|
||||
.mod-reg .tang-pass-reg .pass-button-submit {
|
||||
background-color: #3f89ec;
|
||||
}
|
||||
.tang-pass-reg .pass-button-submit {
|
||||
float: left;
|
||||
width: 350px;
|
||||
}
|
||||
.tang-pass-reg .pass-button {
|
||||
display: block;
|
||||
height: 50px;
|
||||
font-size: 16px;
|
||||
font-weight: 700;
|
||||
cursor: pointer;
|
||||
color: #fff;
|
||||
background-image: none;
|
||||
border-radius: 3px;
|
||||
border: 0;
|
||||
-moz-border-radius: 3px;
|
||||
-webkit-border-radius: 3px;
|
||||
transition: .3s;
|
||||
-moz-transition: .3s;
|
||||
-o-transition: .3s;
|
||||
-webkit-transition: .3s;
|
||||
}
|
||||
#foot {
|
||||
text-align: center;
|
||||
color: #7a77c8;
|
||||
margin-top: 20px;
|
||||
margin-bottom: 20px;
|
||||
}
|
||||
#foot {
|
||||
margin-top: 80px;
|
||||
}
|
||||
#head, #content, #foot {
|
||||
width: 980px;
|
||||
margin-left: auto;
|
||||
margin-right: auto;
|
||||
}
|
||||
.reg-sms {
|
||||
width: 258px;
|
||||
border: 1px solid #d1eeff;
|
||||
background-color: #f5fbff;
|
||||
margin-top: 40px;
|
||||
}
|
||||
.reg-sms {
|
||||
float: right;
|
||||
}
|
||||
.mod-reg .login-link, .mod-regnotify .login-link {
|
||||
position: absolute;
|
||||
top: -70px;
|
||||
right: 0;
|
||||
color: #666;
|
||||
}
|
||||
.mod-reg .login-link span, .mod-regnotify .login-link span {
|
||||
float: left;
|
||||
display: block;
|
||||
margin-right: 5px;
|
||||
margin-top: 10px;
|
||||
}
|
||||
.mod-reg .login-link, .mod-regnotify .login-link {
|
||||
position: absolute;
|
||||
top: -70px;
|
||||
right: 0;
|
||||
color: #666;
|
||||
}
|
||||
.mod-reg .login-btn, .mod-regnotify .login-btn {
|
||||
font-weight: 700;
|
||||
color: #666;
|
||||
height: 32px;
|
||||
width: 64px;
|
||||
border: 0;
|
||||
background: url(../../images/reg_icons.png) no-repeat 0 -48px;
|
||||
}
|
||||
.tang-pass-reg .pass-item-tiptext-userName {
|
||||
padding-top: 6px;
|
||||
}
|
||||
.mod-reg .tang-pass-reg .pass-text-input-error {
|
||||
border-color: #fc4343;
|
||||
}
|
||||
.mod-reg .tang-pass-reg .pass-text-input-focus {
|
||||
border-color: #488ee7
|
||||
}
|
||||
.tang-pass-reg input.pass-text-input-disabled {
|
||||
background: #f6f6f6;
|
||||
border-color: #ebebeb;
|
||||
color: #c5c5c5
|
||||
}
|
||||
.tang-pass-reg span.pass-item-error-isAgree {
|
||||
top: 0;
|
||||
float: none;
|
||||
}
|
||||
button {
|
||||
cursor: pointer;
|
||||
}
|
||||
.clearfix:after {
|
||||
content: '\20';
|
||||
display: block;
|
||||
height: 0;
|
||||
clear: both;
|
||||
}
|
||||
.clearfix:after {
|
||||
content: '\20';
|
||||
display: block;
|
||||
height: 0;
|
||||
clear: both;
|
||||
visibility: hidden;
|
||||
overflow: hidden;
|
||||
}
|
@ -0,0 +1,270 @@
|
||||
#wrapper {
|
||||
width: 100%;
|
||||
}
|
||||
#head, #content, #foot {
|
||||
width: 980px;
|
||||
margin-left: auto;
|
||||
margin-right: auto;
|
||||
}
|
||||
#head {
|
||||
height: 75px;
|
||||
z-index: 100;
|
||||
}
|
||||
.mod-header {
|
||||
display: inline;
|
||||
font-size: 66px;
|
||||
}
|
||||
a {
|
||||
text-decoration: none;
|
||||
color: #2b78e4;
|
||||
}
|
||||
.mod-userbar {
|
||||
position: absolute;
|
||||
top: 15px;
|
||||
right: 20px;
|
||||
z-index: 300;
|
||||
font-family: "Microsoft yahei",Arial,Helvetica,STHeiti,"宋体";
|
||||
}
|
||||
.mod-userbar li {
|
||||
float: left;
|
||||
margin: 0 5px;
|
||||
color: #ccc;
|
||||
height: 24px;
|
||||
}
|
||||
.mod-userbar li a {
|
||||
color: #000;
|
||||
text-decoration: underline;
|
||||
}
|
||||
#nav {
|
||||
height: 42px;
|
||||
}
|
||||
#nav {
|
||||
width: 100%;
|
||||
background: #fafafa;
|
||||
z-index: 1;
|
||||
}
|
||||
.nav-2 {
|
||||
height: 46px;
|
||||
background: url(../../images/password/hdbg.png) repeat-x 0 0;
|
||||
width: 100%;
|
||||
}
|
||||
.mod-nav {
|
||||
position: relative;
|
||||
width: 980px;
|
||||
margin-left: auto;
|
||||
margin-right: auto;
|
||||
}
|
||||
.page-type-notab {
|
||||
color: #333;
|
||||
font-size: 14px;
|
||||
font-weight: 700;
|
||||
float: left;
|
||||
margin-left: 70px;
|
||||
line-height: 46px;
|
||||
display: inline;
|
||||
}
|
||||
.clearfix:after {
|
||||
content: '\20';
|
||||
display: block;
|
||||
height: 0;
|
||||
clear: both;
|
||||
visibility: hidden;
|
||||
overflow: hidden;
|
||||
}
|
||||
#content {
|
||||
height: auto;
|
||||
}
|
||||
#content .mod-forgot {
|
||||
min-height: 500px;
|
||||
height: auto;
|
||||
}
|
||||
.mod-forgot {
|
||||
height: 450px;
|
||||
margin-left: 70px;
|
||||
width: 910px;
|
||||
}
|
||||
.mod-sub-nav {
|
||||
height: 34px;
|
||||
background: url(../../images/password/mod_sub_nav.png) no-repeat 0 0;
|
||||
margin: 30px 0;
|
||||
line-height: 34px;
|
||||
color: #666;
|
||||
font-size: 16px;
|
||||
font-family: "Microsoft Yahei",\5fae\8f6f\96c5\9ed1,\9ed1\4f53;
|
||||
}
|
||||
.mod-sub-nav li {
|
||||
float: left;
|
||||
padding-left: 66px;
|
||||
}
|
||||
.mod-sub-list1 {
|
||||
width: 175px;
|
||||
}
|
||||
.mod-sub-list2 {
|
||||
width: 163px;
|
||||
}
|
||||
.mod-sub-nav li.list3-active {
|
||||
background: url(../../images/password/sub_nav_3.png) no-repeat 0 0;
|
||||
color: #2e82ff;
|
||||
margin-left: -12px;
|
||||
padding-left: 78px;
|
||||
width: 163px;
|
||||
}
|
||||
.mod-step-detail .step-form-tip {
|
||||
color: #999;
|
||||
font-size: 12px;
|
||||
padding-bottom: 20px;
|
||||
}
|
||||
.m_l80 {
|
||||
margin-left: 80px;
|
||||
}
|
||||
form {
|
||||
position: relative;
|
||||
}
|
||||
.pass-input-container {
|
||||
margin-bottom: 20px;
|
||||
}
|
||||
.pass-input-container {
|
||||
position: relative;
|
||||
}
|
||||
.l-h40 {
|
||||
line-height: 40px;
|
||||
}
|
||||
.pass-input-title {
|
||||
font-size: 14px;
|
||||
width: 70px;
|
||||
padding-right: 10px;
|
||||
line-height: 32px;
|
||||
float: left;
|
||||
text-align: right;
|
||||
}
|
||||
.pass-input {
|
||||
border: 1px solid #CCC;
|
||||
border-bottom: 1px solid #ddd;
|
||||
border-right: 1px solid #ddd;
|
||||
background-color: #fff;
|
||||
vertical-align: middle;
|
||||
font-size: 12px;
|
||||
_margin-top: 1px;
|
||||
padding: 7px 0 7px 8px;
|
||||
height: 16px;
|
||||
line-height: 16px;
|
||||
overflow: hidden;
|
||||
color: #333;
|
||||
font-size: 14px;
|
||||
background: url(../../images/password/form_input_261.png) no-repeat left top;
|
||||
-webkit-transition-property: all;
|
||||
-webkit-transition-duration: .3s;
|
||||
-moz-transition-property: all;
|
||||
-moz-transition-duration: .3s;
|
||||
-o-transition-property: all;
|
||||
-o-transition-duration: .3s;
|
||||
transition-property: all;
|
||||
transition-duration: .3s;
|
||||
outline: 0;
|
||||
resize: none;
|
||||
width: 253px;
|
||||
float: left;
|
||||
}
|
||||
.pass-input-forgot {
|
||||
display: block;
|
||||
position: relative;
|
||||
float: left;
|
||||
height: 16px;
|
||||
width: 328px;
|
||||
padding: 11px 10px;
|
||||
margin-right: 10px;
|
||||
border: 1px solid #ddd;
|
||||
font-size: 14px;
|
||||
color: #666;
|
||||
-webkit-transition: .3s;
|
||||
-moz-transition: .3s;
|
||||
-o-transition: .3s;
|
||||
transition: .3s;
|
||||
background: #fff;
|
||||
}
|
||||
.left {
|
||||
float: left;
|
||||
}
|
||||
.pass-input-pwdmsg {
|
||||
float: left;
|
||||
width: 226px;
|
||||
}
|
||||
.pass-streng-wrapper {
|
||||
visibility: hidden;
|
||||
}
|
||||
.pass-tips-streng {
|
||||
float: left;
|
||||
background: #f1f1f1;
|
||||
width: 165px;
|
||||
height: 10px;
|
||||
overflow: hidden;
|
||||
margin-left: 10px;
|
||||
margin-right: 6px;
|
||||
position: relative;
|
||||
}
|
||||
.pass-tips-streng span {
|
||||
position: absolute;
|
||||
left: 0;
|
||||
top: 0;
|
||||
height: 10px;
|
||||
}
|
||||
.pass-input-pwdmsg .pass-input-msg {
|
||||
line-height: 1.3em;
|
||||
margin-top: 2px;
|
||||
display: inline-block;
|
||||
width: 350px;
|
||||
}
|
||||
.l-h40 {
|
||||
line-height: 40px;
|
||||
}
|
||||
.pass-input-msg {
|
||||
line-height: 32px;
|
||||
float: left;
|
||||
color: #da1111;
|
||||
margin-left: 10px;
|
||||
font-size: 12px;
|
||||
}
|
||||
.m_l80 {
|
||||
margin-left: 80px;
|
||||
}
|
||||
.mod-step-detail .pass-button-submit {
|
||||
display: block;
|
||||
height: 40px;
|
||||
font-size: 16px;
|
||||
font-weight: 700;
|
||||
cursor: pointer;
|
||||
color: #fff;
|
||||
background-image: none;
|
||||
border-radius: 3px;
|
||||
border: 0;
|
||||
-moz-border-radius: 3px;
|
||||
-webkit-border-radius: 3px;
|
||||
transition: .3s;
|
||||
-moz-transition: .3s;
|
||||
-o-transition: .3s;
|
||||
-webkit-transition: .3s;
|
||||
background-color: #3f89ec;
|
||||
width: 350px;
|
||||
}
|
||||
.pass-button-submit, .pass-button-timer2, .mod-btn1 {
|
||||
height: 34px;
|
||||
width: 109px;
|
||||
color: #fff;
|
||||
cursor: pointer;
|
||||
text-align: center;
|
||||
border: 0;
|
||||
background: url(../../images/password/button_icon.png) no-repeat 0 0;
|
||||
line-height: 32px;
|
||||
}
|
||||
#foot {
|
||||
text-align: center;
|
||||
color: #7a77c8;
|
||||
margin-top: 20px;
|
||||
margin-bottom: 20px;
|
||||
}
|
||||
.pass-input-error {
|
||||
border: 1px solid #da1111
|
||||
}
|
||||
.pass-input-focus {
|
||||
border-color: #377bcb
|
||||
}
|
@ -0,0 +1,211 @@
|
||||
#wrapper {
|
||||
width: 100%;
|
||||
}
|
||||
#head, #content, #foot {
|
||||
width: 980px;
|
||||
margin-left: auto;
|
||||
margin-right: auto;
|
||||
}
|
||||
#head {
|
||||
height: 75px;
|
||||
z-index: 100;
|
||||
}
|
||||
.mod-header {
|
||||
display: inline;
|
||||
font-size: 66px;
|
||||
}
|
||||
a {
|
||||
text-decoration: none;
|
||||
color: #2b78e4;
|
||||
}
|
||||
.mod-userbar {
|
||||
position: absolute;
|
||||
top: 15px;
|
||||
right: 20px;
|
||||
z-index: 300;
|
||||
font-family: "Microsoft yahei", Arial, Helvetica, STHeiti, 宋体;
|
||||
}
|
||||
.mod-userbar li {
|
||||
float: left;
|
||||
margin: 0 5px;
|
||||
color: #ccc;
|
||||
height: 24px;
|
||||
}
|
||||
.mod-userbar li a {
|
||||
color: #000;
|
||||
text-decoration: underline;
|
||||
}
|
||||
.mod-userbar {
|
||||
position: absolute;
|
||||
top: 15px;
|
||||
right: 20px;
|
||||
z-index: 300;
|
||||
font-family: "Microsoft yahei", Arial, Helvetica, STHeiti, 宋体;
|
||||
}
|
||||
.mod-userbar li {
|
||||
float: left;
|
||||
margin: 0 5px;
|
||||
color: #ccc;
|
||||
height: 24px;
|
||||
}
|
||||
.mod-userbar li a {
|
||||
color: #000;
|
||||
text-decoration: underline;
|
||||
}
|
||||
#nav {
|
||||
height: 42px;
|
||||
}
|
||||
.nav-2 {
|
||||
height: 46px;
|
||||
background: url(../../images/password/hdbg.png) repeat-x 0 0;
|
||||
width: 100%;
|
||||
}
|
||||
.mod-nav {
|
||||
position: relative;
|
||||
width: 980px;
|
||||
margin-left: auto;
|
||||
margin-right: auto;
|
||||
}
|
||||
.page-type-notab {
|
||||
color: #333;
|
||||
font-size: 14px;
|
||||
font-weight: 700;
|
||||
float: left;
|
||||
margin-left: 70px;
|
||||
line-height: 46px;
|
||||
display: inline;
|
||||
}
|
||||
.clearfix:after {
|
||||
content: '\20';
|
||||
display: block;
|
||||
height: 0;
|
||||
clear: both;
|
||||
visibility: hidden;
|
||||
overflow: hidden;
|
||||
}
|
||||
#content {
|
||||
height: auto;
|
||||
}
|
||||
#content .mod-forgot {
|
||||
min-height: 500px;
|
||||
height: auto;
|
||||
}
|
||||
.mod-forgot {
|
||||
height: 450px;
|
||||
margin-left: 70px;
|
||||
width: 910px;
|
||||
}
|
||||
.mod-sub-nav {
|
||||
height: 34px;
|
||||
background: url(../../images/password/mod_sub_nav.png) no-repeat 0 0;
|
||||
margin: 30px 0;
|
||||
line-height: 34px;
|
||||
color: #666;
|
||||
font-size: 16px;
|
||||
font-family: "Microsoft Yahei",\5fae\8f6f\96c5\9ed1,\9ed1\4f53;
|
||||
}
|
||||
.mod-sub-nav li {
|
||||
float: left;
|
||||
padding-left: 66px;
|
||||
}
|
||||
.mod-sub-list1 {
|
||||
width: 175px;
|
||||
}
|
||||
.mod-sub-list2 {
|
||||
width: 163px;
|
||||
}
|
||||
.mod-sub-nav li.list3-active {
|
||||
background: url(../../images/password/sub_nav_3.png) no-repeat 0 0;
|
||||
color: #2e82ff;
|
||||
margin-left: -12px;
|
||||
padding-left: 78px;
|
||||
width: 163px;
|
||||
}
|
||||
.mod-step-detail .result-info {
|
||||
text-align: center;
|
||||
padding-top: 60px;
|
||||
width: 695px;
|
||||
}
|
||||
.mod-step-detail .result-info .result-message {
|
||||
font-size: 18px;
|
||||
font-weight: 700;
|
||||
position: relative;
|
||||
padding-bottom: 40px;
|
||||
}
|
||||
.result-message span, .result-message2 span {
|
||||
position: relative;
|
||||
top: -8px;
|
||||
left: 8px;
|
||||
}
|
||||
.mod-setinfo .button, .mod-layer-body .button, .mod-step-detail .button {
|
||||
display: block;
|
||||
float: left;
|
||||
text-align: center;
|
||||
color: #fff;
|
||||
font-weight: 400;
|
||||
line-height: 30px;
|
||||
width: 77px;
|
||||
height: 30px;
|
||||
background: #3f89ec;
|
||||
border-radius: 3px;
|
||||
}
|
||||
.mod-setinfo .result-title-btn, .mod-step-detail .result-title-btn {
|
||||
float: none;
|
||||
height: 40px;
|
||||
width: 140px;
|
||||
line-height: 40px;
|
||||
font-weight: 700;
|
||||
font-size: 14px;
|
||||
margin: 0 auto;
|
||||
margin-top: 20px;
|
||||
}
|
||||
.result-content-msg {
|
||||
font-size: 12px;
|
||||
margin: 10px 0;
|
||||
color: #999;
|
||||
text-align: left;
|
||||
display: block;
|
||||
}
|
||||
.result-content-table {
|
||||
width: 700px;
|
||||
}
|
||||
.result-content-link {
|
||||
display: block;
|
||||
text-align: right;
|
||||
margin-top: 5px;
|
||||
}
|
||||
tbody {
|
||||
display: table-row-group;
|
||||
vertical-align: middle;
|
||||
border-color: inherit;
|
||||
}
|
||||
.result-content-title {
|
||||
width: 700px;
|
||||
height: 30px;
|
||||
text-align: center;
|
||||
font-size: 12px;
|
||||
}
|
||||
tr {
|
||||
display: table-row;
|
||||
vertical-align: inherit;
|
||||
border-color: inherit;
|
||||
}
|
||||
.result-content-title th {
|
||||
color: #666;
|
||||
border-top: 1px solid #dfdfdf;
|
||||
background: #f3f3f3;
|
||||
text-align: center;
|
||||
}
|
||||
.result-content-list td {
|
||||
border-bottom: 1px dotted #dcdcdc;
|
||||
word-wrap: break-word;
|
||||
word-break: break-all;
|
||||
padding: 5px 0;
|
||||
text-align: center;
|
||||
}
|
||||
#foot {
|
||||
text-align: center;
|
||||
color: #7a77c8;
|
||||
margin-top: 20px;
|
||||
margin-bottom: 20px;
|
||||
}
|
@ -0,0 +1,393 @@
|
||||
#wrapper {
|
||||
width: 100%;
|
||||
}
|
||||
#head, #content, #foot {
|
||||
width: 980px;
|
||||
margin-left: auto;
|
||||
margin-right: auto;
|
||||
}
|
||||
#head {
|
||||
height: 75px;
|
||||
z-index: 100;
|
||||
}
|
||||
.mod-header {
|
||||
display: inline;
|
||||
font-size: 66px;
|
||||
}
|
||||
a {
|
||||
text-decoration: none;
|
||||
color: #2b78e4;
|
||||
}
|
||||
.mod-userbar {
|
||||
position: absolute;
|
||||
top: 15px;
|
||||
right: 20px;
|
||||
z-index: 300;
|
||||
font-family: "Microsoft yahei", Arial, Helvetica, STHeiti, ËÎÌå;
|
||||
}
|
||||
.mod-userbar li {
|
||||
float: left;
|
||||
margin: 0 5px;
|
||||
color: #ccc;
|
||||
height: 24px;
|
||||
}
|
||||
.mod-userbar li a {
|
||||
color: #000;
|
||||
text-decoration: underline;
|
||||
}
|
||||
#nav {
|
||||
height: 42px;
|
||||
}
|
||||
#nav {
|
||||
width: 100%;
|
||||
background: #fafafa;
|
||||
z-index: 1;
|
||||
}
|
||||
.nav-2 {
|
||||
height: 46px;
|
||||
background: url(../../images/password/hdbg.png) repeat-x 0 0;
|
||||
width: 100%;
|
||||
}
|
||||
.mod-nav {
|
||||
position: relative;
|
||||
width: 980px;
|
||||
margin-left: auto;
|
||||
margin-right: auto;
|
||||
}
|
||||
.page-type-notab {
|
||||
color: #333;
|
||||
font-size: 14px;
|
||||
font-weight: 700;
|
||||
float: left;
|
||||
margin-left: 70px;
|
||||
line-height: 46px;
|
||||
display: inline;
|
||||
}
|
||||
#content {
|
||||
height: auto;
|
||||
}
|
||||
#content .mod-forgot {
|
||||
min-height: 500px;
|
||||
height: auto;
|
||||
}
|
||||
.mod-forgot {
|
||||
height: 450px;
|
||||
margin-left: 70px;
|
||||
width: 910px;
|
||||
}
|
||||
.mod-sub-nav {
|
||||
height: 34px;
|
||||
background: url(../../images/password/mod_sub_nav.png) no-repeat 0 0;
|
||||
margin: 30px 0;
|
||||
line-height: 34px;
|
||||
color: #666;
|
||||
font-size: 16px;
|
||||
font-family: "Microsoft Yahei",\5fae\8f6f\96c5\9ed1,\9ed1\4f53;
|
||||
}
|
||||
.mod-sub-nav li {
|
||||
float: left;
|
||||
padding-left: 66px;
|
||||
}
|
||||
.mod-sub-list1 {
|
||||
width: 175px;
|
||||
}
|
||||
.mod-sub-nav li.list2-active {
|
||||
background: url(../../images/password/sub_nav_2.png) no-repeat 0 0;
|
||||
color: #2e82ff;
|
||||
margin-left: -12px;
|
||||
padding-left: 78px;
|
||||
}
|
||||
.forgot-auth-container {
|
||||
width: 520px;
|
||||
}
|
||||
.mod-step-detail .step-email-info, .mod-step-detail .step-form-info {
|
||||
font-size: 12px;
|
||||
padding-bottom: 10px;
|
||||
}
|
||||
.mod-step-detail .step-email-info, .mod-step-detail .step-form-info {
|
||||
font-size: 12px;
|
||||
padding-bottom: 10px;
|
||||
}
|
||||
.forgot-auth-type {
|
||||
position: relative;
|
||||
z-index: 1;
|
||||
}
|
||||
.m-t10 {
|
||||
margin-top: 10px;
|
||||
}
|
||||
form {
|
||||
position: relative;
|
||||
}
|
||||
.forgot-auth-title {
|
||||
font-weight: 700;
|
||||
font-size: 14px;
|
||||
margin-bottom: 20px;
|
||||
}
|
||||
.pass-input-container, .m-b15 {
|
||||
margin-bottom: 15px;
|
||||
}
|
||||
.pass-input-container {
|
||||
position: relative;
|
||||
}
|
||||
.form-2-label {
|
||||
width: 70px;
|
||||
font-size: 14px;
|
||||
float: left;
|
||||
margin-right: 10px;
|
||||
text-align: right;
|
||||
line-height: 32px;
|
||||
}
|
||||
label {
|
||||
cursor: default;
|
||||
}
|
||||
.line-32 {
|
||||
line-height: 32px;
|
||||
}
|
||||
.form-2-content {
|
||||
font-size: 14px;
|
||||
position: relative;
|
||||
float: left;
|
||||
}
|
||||
.verify-method {
|
||||
font-size: 14px;
|
||||
font-weight: 700;
|
||||
line-height: 30px;
|
||||
}
|
||||
.mod-step-detail .m-b-mobile {
|
||||
margin-bottom: 8px;
|
||||
}
|
||||
.mod-step-detail .vcode-container {
|
||||
margin-bottom: 30px;
|
||||
}
|
||||
.form-2-content {
|
||||
font-size: 14px;
|
||||
position: relative;
|
||||
float: left;
|
||||
}
|
||||
.mod-step-detail .vcode-container .vcode-input {
|
||||
float: left;
|
||||
width: 97px;
|
||||
}
|
||||
.mod-step-detail .vcode-container .pass-input-new {
|
||||
width: 220px;
|
||||
height: 22px;
|
||||
background: #fff;
|
||||
}
|
||||
.pass-input {
|
||||
border: 1px solid #CCC;
|
||||
border-bottom: 1px solid #ddd;
|
||||
border-right: 1px solid #ddd;
|
||||
background-color: #fff;
|
||||
vertical-align: middle;
|
||||
font-size: 12px;
|
||||
_margin-top: 1px;
|
||||
padding: 7px 0 7px 8px;
|
||||
height: 16px;
|
||||
line-height: 16px;
|
||||
overflow: hidden;
|
||||
color: #333;
|
||||
font-size: 14px;
|
||||
background: url(../../images/password/form_input_261.png) no-repeat left top;
|
||||
-webkit-transition-property: all;
|
||||
-webkit-transition-duration: .3s;
|
||||
-moz-transition-property: all;
|
||||
-moz-transition-duration: .3s;
|
||||
-o-transition-property: all;
|
||||
-o-transition-duration: .3s;
|
||||
transition-property: all;
|
||||
transition-duration: .3s;
|
||||
outline: 0;
|
||||
resize: none;
|
||||
width: 253px;
|
||||
float: left;
|
||||
}
|
||||
.input-label-new1 {
|
||||
top: 6px;
|
||||
left: 10px;
|
||||
font-size: 14px;
|
||||
}
|
||||
.pass-input-label {
|
||||
position: absolute;
|
||||
left: 13px;
|
||||
top: 3px;
|
||||
_top: 5px;
|
||||
color: #ccc;
|
||||
height: 28px;
|
||||
line-height: 28px;
|
||||
cursor: text;
|
||||
-webkit-transition-property: color;
|
||||
-webkit-transition-duration: .3s;
|
||||
-moz-transition-property: all;
|
||||
-moz-transition-duration: .3s;
|
||||
-o-transition-property: all;
|
||||
-o-transition-duration: .3s;
|
||||
transition-property: all;
|
||||
transition-duration: .3s;
|
||||
}
|
||||
#pass-button-new1 {
|
||||
width: 120px;
|
||||
height: 36px;
|
||||
border: 1px solid #ccc;
|
||||
background: #f7f7f7;
|
||||
color: #666;
|
||||
line-height: 36px;
|
||||
}
|
||||
.form-2-content .pass-button-timer {
|
||||
margin: 0 0 0 10px;
|
||||
}
|
||||
.pass-button-timer, .mod-btn2 {
|
||||
height: 29px;
|
||||
width: 107px;
|
||||
color: #333;
|
||||
cursor: pointer;
|
||||
border: 0;
|
||||
line-height: 29px;
|
||||
text-align: center;
|
||||
background: url(../../images/password/button_icon.png) no-repeat 0 -138px;
|
||||
float: left;
|
||||
}
|
||||
.pass-input-stip {
|
||||
line-height: 40px;
|
||||
float: left;
|
||||
font-size: 12px;
|
||||
margin-left: 10px;
|
||||
display: inline-block;
|
||||
}
|
||||
.pass-input-stip {
|
||||
line-height: 40px;
|
||||
float: left;
|
||||
font-size: 12px;
|
||||
margin-left: 10px;
|
||||
display: inline-block;
|
||||
}
|
||||
.form-2-content .pass-input-msg {
|
||||
clear: both;
|
||||
margin-left: 0;
|
||||
height: 32px;
|
||||
width: 420px;
|
||||
}
|
||||
.pass-input-msg {
|
||||
line-height: 32px;
|
||||
float: left;
|
||||
color: #da1111;
|
||||
margin-left: 10px;
|
||||
font-size: 12px;
|
||||
}
|
||||
.m-b30 {
|
||||
margin-bottom: 30px;
|
||||
}
|
||||
.m-b30 .pass-button-new1 {
|
||||
width: 360px;
|
||||
height: 40px;
|
||||
background: #2e82ff;
|
||||
color: #fff;
|
||||
font-weight: 700;
|
||||
}
|
||||
.mod-step-detail .pass-button-submit {
|
||||
display: block;
|
||||
height: 40px;
|
||||
font-size: 16px;
|
||||
font-weight: 700;
|
||||
cursor: pointer;
|
||||
color: #fff;
|
||||
background-image: none;
|
||||
border-radius: 3px;
|
||||
border: 0;
|
||||
-moz-border-radius: 3px;
|
||||
-webkit-border-radius: 3px;
|
||||
transition: .3s;
|
||||
-moz-transition: .3s;
|
||||
-o-transition: .3s;
|
||||
-webkit-transition: .3s;
|
||||
background-color: #3f89ec;
|
||||
width: 350px;
|
||||
}
|
||||
.pass-button-submit, .pass-button-timer2, .mod-btn1 {
|
||||
height: 34px;
|
||||
width: 109px;
|
||||
color: #fff;
|
||||
cursor: pointer;
|
||||
text-align: center;
|
||||
border: 0;
|
||||
background: url(../../images/password/button_icon.png) no-repeat 0 0;
|
||||
line-height: 32px;
|
||||
}
|
||||
.forgot-auth-title {
|
||||
font-weight: 700;
|
||||
font-size: 14px;
|
||||
margin-bottom: 20px;
|
||||
}
|
||||
.mod-step-detail .step-email-info, .mod-step-detail .step-form-info {
|
||||
font-size: 12px;
|
||||
padding-bottom: 10px;
|
||||
}
|
||||
.mod-step-detail .step-email-info, .mod-step-detail .step-form-info {
|
||||
font-size: 12px;
|
||||
padding-bottom: 10px;
|
||||
}
|
||||
.upsms-auth-content {
|
||||
width: 400px;
|
||||
height: 130px;
|
||||
border: 1px solid #ccc;
|
||||
margin-bottom: 15px;
|
||||
}
|
||||
.upsms-auth-left {
|
||||
background: #f9f9f9;
|
||||
width: 209px;
|
||||
height: 100px;
|
||||
float: left;
|
||||
padding: 20px 20px 10px;
|
||||
border-right: 1px solid #ccc;
|
||||
}
|
||||
.upsms-auth-left p {
|
||||
margin-bottom: 10px;
|
||||
}
|
||||
.upsms-auth-left p {
|
||||
margin-bottom: 10px;
|
||||
}
|
||||
.mod-step-detail .step-tip {
|
||||
border-top: 1px dotted #e5e5e5;
|
||||
margin: 70px 0 140px;
|
||||
width: 910px;
|
||||
}
|
||||
.mod-step-detail .m-t0 {
|
||||
margin-top: 0;
|
||||
}
|
||||
.mod-step-detail .step-tip li {
|
||||
font-family: ËÎÌå, Arial, Helvetica, STHeiti;
|
||||
}
|
||||
.mod-step-detail .step-tip li {
|
||||
margin-top: 12px;
|
||||
}
|
||||
.img-info {
|
||||
padding-right: 5px;
|
||||
}
|
||||
.left {
|
||||
float: left;
|
||||
}
|
||||
.hide {
|
||||
display: none;
|
||||
}
|
||||
#foot {
|
||||
text-align: center;
|
||||
color: #7a77c8;
|
||||
margin-top: 20px;
|
||||
margin-bottom: 20px;
|
||||
}
|
||||
.mod-sub-list2 {
|
||||
width: 163px;
|
||||
}
|
||||
.clearfix:after {
|
||||
content: '\20';
|
||||
display: block;
|
||||
height: 0;
|
||||
clear: both;
|
||||
visibility: hidden;
|
||||
overflow: hidden;
|
||||
}
|
||||
.pass-input-focus {
|
||||
border-color: #377bcb
|
||||
}
|
||||
.pass-input-error {
|
||||
border: 1px solid #da1111
|
||||
}
|
@ -0,0 +1,23 @@
|
||||
/* reset */
|
||||
html,body,h1,h2,h3,h4,h5,h6,div,dl,dt,dd,ul,ol,li,p,blockquote,pre,hr,figure,table,caption,th,td,form,fieldset,legend,input,button,textarea,menu{margin:0;padding:0;}
|
||||
header,footer,section,article,aside,nav,hgroup,address,figure,figcaption,menu,details{display:block;}
|
||||
table{border-collapse:collapse;border-spacing:0;}
|
||||
caption,th{text-align:left;font-weight:normal;}
|
||||
html,body,fieldset,img,iframe,abbr{border:0;}
|
||||
i,cite,em,var,address,dfn{font-style:normal;}
|
||||
[hidefocus],summary{outline:0;}
|
||||
li{list-style:none;}
|
||||
h1,h2,h3,h4,h5,h6,small{font-size:100%;}
|
||||
sup,sub{font-size:83%;}
|
||||
pre,code,kbd,samp{font-family:inherit;}
|
||||
q:before,q:after{content:none;}
|
||||
textarea{overflow:auto;resize:none;}
|
||||
label,summary{cursor:default;}
|
||||
a,button{cursor:pointer;}
|
||||
h1,h2,h3,h4,h5,h6,em,strong,b{font-weight:bold;}
|
||||
del,ins,u,s,a,a:hover{text-decoration:none;}
|
||||
body,textarea,input,button,select,keygen,legend{font:12px/1.14 arial,\5b8b\4f53;color:#333;outline:0;}
|
||||
body{background:#fff;}
|
||||
a{color:#333;}
|
||||
a:hover{color: #11a68d;}
|
||||
body {height: 100%;font: 12px/1.333 "\5FAE\8F6F\96C5\9ED1","Hiragino Sans GB",arial,helvetica,clean;}
|
After Width: | Height: | Size: 8.4 KiB |
After Width: | Height: | Size: 1.5 KiB |
After Width: | Height: | Size: 1.0 KiB |
After Width: | Height: | Size: 2.8 KiB |
After Width: | Height: | Size: 5.3 KiB |
After Width: | Height: | Size: 5.6 KiB |
After Width: | Height: | Size: 1.2 KiB |
After Width: | Height: | Size: 1.4 KiB |
After Width: | Height: | Size: 150 KiB |
After Width: | Height: | Size: 1.6 KiB |
After Width: | Height: | Size: 541 B |
After Width: | Height: | Size: 3.8 KiB |
After Width: | Height: | Size: 3.9 KiB |
After Width: | Height: | Size: 1.3 KiB |
After Width: | Height: | Size: 26 KiB |
After Width: | Height: | Size: 549 B |
After Width: | Height: | Size: 554 B |
After Width: | Height: | Size: 685 B |
After Width: | Height: | Size: 928 B |
After Width: | Height: | Size: 570 B |
After Width: | Height: | Size: 9.5 KiB |
After Width: | Height: | Size: 936 B |
After Width: | Height: | Size: 7.2 KiB |
After Width: | Height: | Size: 603 B |
After Width: | Height: | Size: 762 B |
After Width: | Height: | Size: 1.6 KiB |
After Width: | Height: | Size: 3.3 KiB |
After Width: | Height: | Size: 1.8 KiB |
After Width: | Height: | Size: 14 KiB |
After Width: | Height: | Size: 2.5 KiB |
After Width: | Height: | Size: 3.2 KiB |
After Width: | Height: | Size: 5.0 KiB |
After Width: | Height: | Size: 14 KiB |
After Width: | Height: | Size: 1.7 KiB |
After Width: | Height: | Size: 1.5 KiB |
After Width: | Height: | Size: 743 B |
After Width: | Height: | Size: 1.3 KiB |
After Width: | Height: | Size: 189 B |
After Width: | Height: | Size: 899 B |
After Width: | Height: | Size: 2.8 KiB |
After Width: | Height: | Size: 2.2 KiB |
After Width: | Height: | Size: 1.7 KiB |
After Width: | Height: | Size: 2.1 KiB |
After Width: | Height: | Size: 1.8 KiB |
After Width: | Height: | Size: 2.0 KiB |
After Width: | Height: | Size: 457 B |
After Width: | Height: | Size: 2.4 KiB |
@ -0,0 +1,56 @@
|
||||
$(function(){
|
||||
|
||||
$("#TANGRAM__PSP_3__userName").bind("focus",function(){
|
||||
$("#TANGRAM__PSP_3__userName").addClass("pass-text-input-focus");
|
||||
}).bind("keyup",function(){
|
||||
if($("#TANGRAM__PSP_3__userName").val() != ""){
|
||||
$("#TANGRAM__PSP_3__userName_clearbtn").show();
|
||||
}else{
|
||||
$("#TANGRAM__PSP_3__userName_clearbtn").hide();
|
||||
}
|
||||
}).bind("blur",function(){
|
||||
$("#TANGRAM__PSP_3__userName").removeClass("pass-text-input-focus");
|
||||
});
|
||||
|
||||
$("#TANGRAM__PSP_3__userName_clearbtn").bind("click",function(){
|
||||
$("#TANGRAM__PSP_3__userName").val("");
|
||||
$("#TANGRAM__PSP_3__userName_clearbtn").hide();
|
||||
$("#TANGRAM__PSP_3__userName").focus();
|
||||
});
|
||||
|
||||
$("#TANGRAM__PSP_3__verifyCodeChange").bind("click",function(){
|
||||
$("#TANGRAM__PSP_3__verifyCodeImg").attr("src",mainHttp + "captcha.jpg?t=" + $.now());
|
||||
});
|
||||
|
||||
$("#TANGRAM__PSP_3__password").bind("focus",function(){
|
||||
$("#TANGRAM__PSP_3__password").addClass("pass-text-input-focus");
|
||||
}).bind("blur",function(){
|
||||
$("#TANGRAM__PSP_3__password").removeClass("pass-text-input-focus");
|
||||
}).bind("keyup",function(){
|
||||
if($("#TANGRAM__PSP_3__password").val() != ""){
|
||||
$("#TANGRAM__PSP_3__password_clearbtn").show();
|
||||
}else{
|
||||
$("#TANGRAM__PSP_3__password_clearbtn").hide();
|
||||
}
|
||||
});
|
||||
|
||||
$("#TANGRAM__PSP_3__password_clearbtn").bind("click",function(){
|
||||
$("#TANGRAM__PSP_3__password").val("");
|
||||
$("#TANGRAM__PSP_3__password_clearbtn").hide();
|
||||
$("#TANGRAM__PSP_3__password").focus();
|
||||
});
|
||||
|
||||
$("#TANGRAM__PSP_3__submit").bind("click",function(){
|
||||
if($("#TANGRAM__PSP_3__userName").val() == ""){
|
||||
$("#TANGRAM__PSP_3__userName").focus();
|
||||
$("#TANGRAM__PSP_3__error").text("请您输入手机/邮箱/用户名");
|
||||
return false;
|
||||
}
|
||||
if($("#TANGRAM__PSP_3__password").val() == ""){
|
||||
$("#TANGRAM__PSP_3__password").focus();
|
||||
$("#TANGRAM__PSP_3__error").text("请您输入密码");
|
||||
return false;
|
||||
}
|
||||
return true;
|
||||
});
|
||||
})
|
@ -0,0 +1,124 @@
|
||||
// 校验
|
||||
var validateCheckPass = (rule, value, callback) => {
|
||||
if (value !== vm.member.password) {
|
||||
callback(new Error('两次输入密码不一致!'));
|
||||
} else {
|
||||
callback();
|
||||
}
|
||||
};
|
||||
var validateUsername = (rule, value, callback) => {
|
||||
if(!/^(undefined|null|\s)$/.test(value)){
|
||||
axios({method: 'get',url: mainHttp + 'checkUsername.html?username='+vm.member.username}).then(function(response){
|
||||
if(response.data.code == 201){
|
||||
callback(new Error('此用户名太受欢迎,请更换一个!'));
|
||||
}else{
|
||||
callback();
|
||||
}
|
||||
});
|
||||
}
|
||||
}
|
||||
var validateMobile = (rule, value, callback) => {
|
||||
if(!/^(undefined|null|\s)$/.test(value)){
|
||||
axios({method: 'get',url: mainHttp + 'checkMobile.html?mobile='+vm.member.mobile}).then(function(response){
|
||||
if(response.data.code == 201){
|
||||
callback(new Error('该手机号已经存在!'));
|
||||
}else{
|
||||
callback();
|
||||
}
|
||||
});
|
||||
}
|
||||
}
|
||||
var vm = new Vue({
|
||||
el: '#content',
|
||||
data() {
|
||||
return {
|
||||
smsDisabled:false,
|
||||
loading:false,
|
||||
member: {
|
||||
username: '',
|
||||
mobile:'',
|
||||
password:'',
|
||||
checkPass:'',
|
||||
verifyCode:''
|
||||
},
|
||||
courses: [],
|
||||
rules: {
|
||||
username: [
|
||||
{ required: true, message: '请输入用户名', trigger: 'blur' },
|
||||
{ min: 6 , message: '长度大于6个字符', trigger: 'blur' },
|
||||
{ validator: validateUsername, trigger: 'blur' }
|
||||
],
|
||||
mobile: [
|
||||
{ required: true, message: '请输入手机号', trigger: 'blur' },
|
||||
{ pattern: /^1[345678]\d{9}$/, message: '手机号格式错误', trigger: 'blur' },
|
||||
{ validator: validateMobile, trigger: 'blur' }
|
||||
],
|
||||
password: [
|
||||
{ required: true, message: '请输入密码', trigger: 'blur' },
|
||||
],
|
||||
checkPass: [
|
||||
{ required: true, message: '请输入确认密码', trigger: 'blur' },
|
||||
{ validator: validateCheckPass, trigger: 'blur' }
|
||||
],
|
||||
verifyCode:[
|
||||
{ required: true, message: '请输入验证码', trigger: 'blur' },
|
||||
],
|
||||
kemuId:[
|
||||
{required: true, message: '请选择科目', trigger: 'change'}
|
||||
],
|
||||
email:[
|
||||
{ required: true, message: '请输入邮箱地址', trigger: 'blur' },
|
||||
{ type: 'email', message: '请输入正确的邮箱地址', trigger: ['blur', 'change'] }
|
||||
]
|
||||
}
|
||||
};
|
||||
},
|
||||
methods: {
|
||||
submitForm(formName) {
|
||||
this.$refs[formName].validate((valid) => {
|
||||
if (valid) {
|
||||
vm.loading = true;
|
||||
vm.member.subjectId = vm.member.kemuId[0];
|
||||
axios({method: 'post',url: mainHttp + 'subRegister.html',data: vm.member}).then(function(response){
|
||||
if(response.data.code == 200){
|
||||
vm.loading = false;
|
||||
vm.$message({message: "注册成功",duration:500,type: 'success',onClose:function(){
|
||||
window.location.href = "member/index.html";
|
||||
}});
|
||||
}else{
|
||||
vm.loading = false;
|
||||
vm.$message.error(response.data.message);
|
||||
vm.$refs[formName].validate();
|
||||
}
|
||||
});
|
||||
} else {
|
||||
console.log('error submit!!');
|
||||
return false;
|
||||
}
|
||||
});
|
||||
},
|
||||
resetForm(formName) {
|
||||
this.$refs[formName].resetFields();
|
||||
},
|
||||
getCourses:function(){
|
||||
axios.get(mainHttp + 'subject/getSubjectTree.html').then(function(response){
|
||||
vm.courses = response.data.result;
|
||||
});
|
||||
},
|
||||
sendSms:function(){
|
||||
// 校验成功才能发送短信
|
||||
vm.$refs['member'].validateField('mobile',function(message){
|
||||
if(message == ""){
|
||||
axios.get(mainHttp + 'sms/sendFindPasswordSms.html?mobile='+vm.member.mobile).then(function(response){
|
||||
if(response.data.code == 200){
|
||||
vm.$message({message: response.data.message,type: 'success'});
|
||||
}else{
|
||||
vm.$message.error(response.data.message);
|
||||
}
|
||||
});
|
||||
}
|
||||
});
|
||||
}
|
||||
}
|
||||
});
|
||||
vm.getCourses();
|
@ -0,0 +1,88 @@
|
||||
$(function(){
|
||||
|
||||
$("#account").bind("focus",function(){
|
||||
$("#account").addClass("pass-input-focus");
|
||||
$("#pass-auth-select .pass-input-msg").text("");
|
||||
$("#account").removeClass("pass-input-error");
|
||||
}).bind("blur",function(){
|
||||
$("#account").removeClass("pass-input-focus");
|
||||
// 验证码用户名/邮箱/手机号是否存在
|
||||
if($("#account").val() != ""){
|
||||
$.ajax({
|
||||
type : "get",
|
||||
url : "checkAccount.html",
|
||||
async : false,
|
||||
data:{account:$("#account").val()},
|
||||
dataType : "json",
|
||||
success : function(data) {
|
||||
if(data.code == 201){
|
||||
$("#pass-auth-select .pass-input-msg").text("用户名不存在,请重新输入");
|
||||
$("#account").addClass("pass-input-error");
|
||||
}
|
||||
}
|
||||
});
|
||||
}
|
||||
});
|
||||
|
||||
$("#account").bind("keyup",function(){
|
||||
if($("#account").val() != ""){
|
||||
$("#userName_clearBtn").show();
|
||||
}else{
|
||||
$("#userName_clearBtn").hide();
|
||||
}
|
||||
});
|
||||
|
||||
$("#userName_clearBtn").bind("mouseover",function(){
|
||||
$("#userName_clearBtn").addClass("userName-clearbtn-hover");
|
||||
}).bind("mouseleave",function(){
|
||||
$("#userName_clearBtn").removeClass("userName-clearbtn-hover");
|
||||
}).bind("click",function(){
|
||||
$("#account").val("");
|
||||
$("#userName_clearBtn").hide();
|
||||
$("#account").trigger("focus");
|
||||
});
|
||||
|
||||
$("#veritycode").bind("focus",function(){
|
||||
$("#veritycode").addClass("pass-input-focus");
|
||||
$("#veritycode").removeClass("pass-input-error");
|
||||
$(".vcode-container .pass-input-msg").text("");
|
||||
}).bind("blur",function(){
|
||||
$("#veritycode").removeClass("pass-input-focus");
|
||||
});
|
||||
|
||||
$("#submit").bind("click",function(){
|
||||
var flag = true;
|
||||
if($("#account").val() == ""){
|
||||
$("#pass-auth-select .pass-input-msg").text("请您输入用户名/邮箱/手机");
|
||||
$("#account").addClass("pass-input-error");
|
||||
flag = false;
|
||||
}
|
||||
if($("#veritycode").val() == ""){
|
||||
$(".vcode-container .pass-input-msg").text("请您输入验证码");
|
||||
$("#veritycode").addClass("pass-input-error");
|
||||
flag = false;
|
||||
}
|
||||
// 验证码用户名/邮箱/手机号是否存在
|
||||
$.ajax({
|
||||
type : "get",
|
||||
url : "checkAccount.html",
|
||||
async : false,
|
||||
data:{account:$("#account").val()},
|
||||
dataType : "json",
|
||||
success : function(data) {
|
||||
if(data.code == 201){
|
||||
$("#pass-auth-select .pass-input-msg").text("用户名不存在,请重新输入");
|
||||
$("#account").addClass("pass-input-error");
|
||||
flag = false;
|
||||
}
|
||||
}
|
||||
});
|
||||
if(!flag){
|
||||
return false;
|
||||
}
|
||||
});
|
||||
|
||||
$(".vcode-img-change").bind("click",function(){
|
||||
$(".vcode-img").attr("src",mainHttp + "captcha.jpg?t=" + $.now());
|
||||
});
|
||||
})
|
@ -0,0 +1,40 @@
|
||||
$(function(){
|
||||
|
||||
$("#password").bind("focus",function(){
|
||||
$("#password").addClass("pass-input-focus");
|
||||
$("#password").removeClass("pass-input-error");
|
||||
$("#pass_input_msg_Pwd").text("");
|
||||
}).bind("blur",function(){
|
||||
$("#password").removeClass("pass-input-focus");
|
||||
});
|
||||
|
||||
$("#verifypwd").bind("focus",function(){
|
||||
$("#verifypwd").addClass("pass-input-focus");
|
||||
$("#verifypwd").removeClass("pass-input-error");
|
||||
$("#repassword_msg").text("");
|
||||
}).bind("blur",function(){
|
||||
$("#verifypwd").removeClass("pass-input-focus");
|
||||
});
|
||||
|
||||
$("#submit-resetpwd").bind("click",function(){
|
||||
var flag = true;
|
||||
if($("#password").val() == ""){
|
||||
$("#password").addClass("pass-input-error");
|
||||
$("#pass_input_msg_Pwd").text("请您填写密码");
|
||||
flag = false;
|
||||
}
|
||||
if($("#verifypwd").val() == ""){
|
||||
$("#verifypwd").addClass("pass-input-error");
|
||||
$("#repassword_msg").text("请您输入确认密码");
|
||||
flag = false;
|
||||
}
|
||||
if($("#password").val() != $("#verifypwd").val()){
|
||||
$("#verifypwd").addClass("pass-input-error");
|
||||
$("#verifypwd").val("");
|
||||
$("#repassword_msg").text("确认新密码和新密码不同");
|
||||
flag = false;
|
||||
}
|
||||
return flag;
|
||||
});
|
||||
|
||||
})
|
@ -0,0 +1,64 @@
|
||||
$(function(){
|
||||
|
||||
$("#pass-input-mobileVcode").bind("focus",function(){
|
||||
$("#pass-input-mobileVcode").removeClass("pass-input-error");
|
||||
$("#pass-input-mobileVcode").addClass("pass-input-focus");
|
||||
$("#forgot-mobileVcode-tip").text("");
|
||||
}).bind("blur",function(){
|
||||
$("#pass-input-mobileVcode").removeClass("pass-input-focus");
|
||||
});
|
||||
|
||||
$("#pass-button-new1").bind("click",function(){
|
||||
$("#forgot-mobileVcode-success").text("短信已经发送");
|
||||
$("#forgot-mobileVcode-success").show();
|
||||
$("#pass-button-new1").css("disabled","disabled");
|
||||
var u = 60;
|
||||
var t = function() {
|
||||
if (u < 2) {
|
||||
$("#pass-button-new1").text("重新发送");
|
||||
$("#pass-button-new1").css("disabled","");
|
||||
return
|
||||
} else {
|
||||
u--;
|
||||
$("#pass-button-new1").text("重新发送("+u+")");
|
||||
}
|
||||
setTimeout(t, 1000)
|
||||
};
|
||||
t();
|
||||
|
||||
var isEmail = $("input[name='isEmail']").val();
|
||||
if(isEmail == "0"){
|
||||
// 发送短信
|
||||
$.ajax({
|
||||
type : "get",
|
||||
url : mainHttp + "sms/sendFindPasswordSms.html",
|
||||
async : false,
|
||||
data:{mobile:$("input[name='mobile']").val()},
|
||||
dataType : "json",
|
||||
success : function(data) {
|
||||
console.log(data);
|
||||
}
|
||||
});
|
||||
}else{
|
||||
// 发送邮件
|
||||
$.ajax({
|
||||
type : "get",
|
||||
url : mainHttp + "email/sendFindPasswordEmail.html",
|
||||
async : false,
|
||||
data:{email:$("input[name='email']").val()},
|
||||
dataType : "json",
|
||||
success : function(data) {
|
||||
console.log(data);
|
||||
}
|
||||
});
|
||||
}
|
||||
});
|
||||
|
||||
$("#submit-mobile").bind("click",function(){
|
||||
if($("input[name='mobileVcode']").val() == ""){
|
||||
$("#pass-input-mobileVcode").addClass("pass-input-error");
|
||||
$("#forgot-mobileVcode-tip").text("请填写验证码");
|
||||
return false;
|
||||
}
|
||||
});
|
||||
})
|
@ -0,0 +1,102 @@
|
||||
<!DOCTYPE html>
|
||||
<html lang="Zh-hans" xmlns:th="http://www.thymeleaf.org">
|
||||
<head>
|
||||
<meta charset="UTF-8">
|
||||
<title>登录_探果网</title>
|
||||
<meta name="keywords" content="高考,财会类,建筑工程,职业资格,医卫类,考研,会计类"/>
|
||||
<meta name="description" content="探果网,高考试题,高考试卷,高校试题,名校,名校试题,名校试卷,高校名师,名师专访,名师教案,名师课堂试题库,试卷库,智能题库,历年真题,模拟试题,押题,预测试题,高考,会计证,会计从业,会计师,经济师,施工员,建造师,建筑师,造价师,职业资格,证券资格,考研,计算机考试,建筑考试,财会类,医卫类,护士资格,公务员,知识点,试题,试卷"/>
|
||||
<meta name="author" content="Tamguo Team" />
|
||||
<meta name="copyright" content="Tamguo" />
|
||||
<link rel="stylesheet" th:href="${domainName + 'css/reset.css'}" />
|
||||
<link rel="stylesheet" th:href="${domainName + 'css/member/login.css'}" />
|
||||
<link type="favicon" rel="shortcut icon" th:href="${domainName + 'images/favicon.png'}" />
|
||||
</head>
|
||||
<body>
|
||||
<div id="wrapper" class="">
|
||||
<div id="head">
|
||||
<div class="mod-header">
|
||||
<a th:href="${domainName + 'login.html'}"><img th:src="${domainName + 'images/logo_731bc32.png'}" alt="logo"></a>
|
||||
</div>
|
||||
</div>
|
||||
<div id="nav">
|
||||
<div class="nav-2">
|
||||
<div class="mod-nav clearfix">
|
||||
<h1 class="page-type-notab"></h1>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div id="content" style="display: block;">
|
||||
<div class="clearfix login-container">
|
||||
<div class="login-form">
|
||||
<div class="login-wrapper">
|
||||
<div id="login" class="tang-pass-login animation" style="display: block; visibility: visible; opacity: 1;">
|
||||
<form id="TANGRAM__PSP_3__form" th:action="${domainName + 'submitLogin.html'}" class="pass-form pass-form-normal" method="POST" autocomplete="off">
|
||||
<p class="pass-form-logo">用户名密码登录</p>
|
||||
<p id="TANGRAM__PSP_3__errorWrapper" class="pass-generalErrorWrapper">
|
||||
<span id="TANGRAM__PSP_3__error" class="pass-generalError pass-generalError-error" th:text="${msg}"></span>
|
||||
</p>
|
||||
<p id="TANGRAM__PSP_3__MakeTextWrapper" class="pass-make-text" style="display:none;"></p>
|
||||
<p id="TANGRAM__PSP_3__hiddenFields" style="display:none"></p>
|
||||
<p id="TANGRAM__PSP_3__userNameWrapper" class="pass-form-item pass-form-item-userName" style="display:"><input type="text" style="display:none;">
|
||||
<input id="TANGRAM__PSP_3__userName" type="text" name="username" class="pass-text-input pass-text-input-userName open" autocomplete="off" th:value="${username}" placeholder="手机/邮箱/用户名">
|
||||
<span id="TANGRAM__PSP_3__userName_clearbtn" class="pass-clearbtn pass-clearbtn-userName" style="display: none; visibility: visible; opacity: 1;"></span><span id="TANGRAM__PSP_3__userNameTip" class="pass-item-tip pass-item-tip-userName" style="display:none"><span id="TANGRAM__PSP_3__userNameTipText" class="pass-item-tiptext pass-item-tiptext-userName"></span></span>
|
||||
<span class="pass-item-selectbtn pass-item-selectbtn-userName" style="display: none; visibility: hidden; opacity: 1;"></span></p>
|
||||
<p id="TANGRAM__PSP_3__passwordWrapper" class="pass-form-item pass-form-item-password" style="display:">
|
||||
<input type="password" style="display: none;">
|
||||
<input id="TANGRAM__PSP_3__password" type="password" name="password" class="pass-text-input pass-text-input-password" readonly onfocus="this.removeAttribute('readonly');" value="" placeholder="密码"><span id="TANGRAM__PSP_3__password_clearbtn" class="pass-clearbtn pass-clearbtn-password" style="display:none;"></span><span id="TANGRAM__PSP_3__passwordTip" class="pass-item-tip pass-item-tip-password" style="display:none"><span id="TANGRAM__PSP_3__passwordTipText" class="pass-item-tiptext pass-item-tiptext-password"></span></span>
|
||||
</p>
|
||||
<p id="TANGRAM__PSP_3__verifyCodeImgWrapper" class="pass-form-item pass-form-item-verifyCode">
|
||||
<input id="TANGRAM__PSP_3__verifyCode" type="text" name="verifyCode" class="pass-text-input pass-text-input-verifyCode" maxlength="6" placeholder="验证码" autocomplete="off">
|
||||
<span id="TANGRAM__PSP_3__verifyCode_clearbtn" class="pass-clearbtn pass-clearbtn-verifyCode" style="display:none;"></span>
|
||||
<span id="TANGRAM__PSP_3__verifyCodeImgParent" class="pass-verifyCodeImgParent">
|
||||
<img id="TANGRAM__PSP_3__verifyCodeImg" class="pass-verifyCode" th:src="${domainName + 'captcha.jpg'}"></span>
|
||||
<a id="TANGRAM__PSP_3__verifyCodeChange" href="#" class="pass-change-verifyCode">换一张</a><span id="TANGRAM__PSP_3__verifyCodeError" class="pass-error pass-error-verifyCode"></span><span id="TANGRAM__PSP_3__verifyCodeTip" class="pass-tip pass-tip-verifyCode"></span><span id="TANGRAM__PSP_3__verifyCodeSuccess" class="pass-success pass-success-verifyCode"></span></p>
|
||||
<p id="TANGRAM__PSP_3__memberPassWrapper" class="pass-form-item pass-form-item-memberPass"><input id="TANGRAM__PSP_3__memberPass" type="checkbox" name="memberPass" class="pass-checkbox-input pass-checkbox-memberPass" checked="checked"><label for="TANGRAM__PSP_3__memberPass" id="TANGRAM__PSP_3__memberPassLabel" class="">下次自动登录</label></p>
|
||||
<p id="TANGRAM__PSP_3__submitWrapper" class="pass-form-item pass-form-item-submit"><input id="TANGRAM__PSP_3__submit" type="submit" value="登录" class="pass-button pass-button-submit">
|
||||
<a class="pass-fgtpwd pass-link" th:href="${domainName + 'password/find.html'}" target="_blank">忘记密码?</a>
|
||||
</p>
|
||||
</form>
|
||||
</div>
|
||||
<div class="tang-pass-footerBar">
|
||||
<p class="tang-pass-footerBarULogin pass-link" title="用户名登录" data-type="normal" id="TANGRAM__PSP_3__footerULoginBtn">用户名登录</p>
|
||||
<div class="tang-pass-footerBarPhoenix"><span class="tang-pass-footerBarPhoenixSplit"></span>
|
||||
<div class="tang-pass-footerBarPhoenixItem" id="TANGRAM__PSP_3__PhoenixItem">
|
||||
<div id="pass-phoenix-login" class="tang-pass-login-phoenix">
|
||||
<div id="pass-phoenix-list-login" class="pass-phoenix-list clearfix">
|
||||
<div class="pass-phoenix-btn clearfix" id="pass_phoenix_btn">
|
||||
<ul class="bd-acc-list">
|
||||
<li class="bd-acc-qzone" data-dialog="1" data-acc="15" data-height="450" data-width="750">
|
||||
<a class="phoenix-btn-item" href="#" data-title="qzone" title="QQ帐号">QQ帐号</a>
|
||||
</li>
|
||||
<li class="bd-acc-tsina" data-dialog="1" data-acc="2" data-height="669" data-width="800">
|
||||
<a class="phoenix-btn-item" href="#" data-title="tsina" title="新浪微博">新浪微博</a>
|
||||
</li>
|
||||
<li class="bd-acc-weixin" data-dialog="1" data-acc="42" data-height="450" data-width="850">
|
||||
<a class="phoenix-btn-item" href="#" data-title="weixin" title="微信">微信</a>
|
||||
</li>
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
<div class="clear"></div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<a class="pass-reglink pass-link" th:href="${domainName + 'register.html'}" target="_blank">立即注册</a>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div id="foot">
|
||||
<div class="mod-footer">
|
||||
<div class="copy-box">2018 ©Tamguo</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</body>
|
||||
<script type="text/javascript" th:inline="javascript">
|
||||
var mainHttp = [[${domainName}]];
|
||||
</script>
|
||||
<script type="text/javascript" th:src="${domainName + 'js/jquery-1.8.3.min.js'}" ></script>
|
||||
<script type="text/javascript" th:src="${domainName + 'js/member/login.js'}"></script>
|
||||
</html>
|
@ -0,0 +1,82 @@
|
||||
<!DOCTYPE html>
|
||||
<html lang="Zh-hans" xmlns:th="http://www.thymeleaf.org">
|
||||
<head>
|
||||
<meta charset="UTF-8">
|
||||
<title>找回密码_探果网</title>
|
||||
<meta name="description" content="探果网携手高校名师为考生提供高效的智能备考服务,涵括领域有高考、财会类、建筑工程、职业资格、医卫类、计算机类和学历类等热门考试题库。拥有高校名师丰富的经验,优质的学习资料和备考全阶段的高效服务,助您丰富自我,不断前行!"/>
|
||||
<meta name="keyword" content="探果网,高校名师,名师专访,名师教案,名师课堂试题库,试卷库,智能题库,历年真题,模拟试题,押题,预测试题,高考,会计证,会计从业,会计师,经济师,施工员,建造师,建筑师,造价师,职业资格,证券资格,考研,计算机考试,建筑考试,财会类,医卫类,护士资格,公务员,知识点,试题,试卷"/>
|
||||
<link rel="stylesheet" th:href="${domainName + 'css/reset.css'}" />
|
||||
<link rel="stylesheet" th:href="${domainName + 'css/password/confirmAccount.css'}" />
|
||||
<link type="favicon" rel="shortcut icon" th:href="${domainName + 'images/favicon.png'}" />
|
||||
</head>
|
||||
<body>
|
||||
<div id="wrapper" class="">
|
||||
<div id="head">
|
||||
<div class="mod-header">
|
||||
<a th:href="${domainName + 'login.html'}"><img th:src="${domainName + 'images/logo_731bc32.png'}" alt="logo"></a>
|
||||
</div>
|
||||
<ul class="mod-userbar">
|
||||
<li>
|
||||
<a id="mod-userbar-login" th:href="${domainName + 'login.html'}">登录</a>
|
||||
</li>
|
||||
<li>|</li>
|
||||
<li>
|
||||
<a th:href="${domainName + 'register.html'}">注册</a>
|
||||
</li>
|
||||
</ul>
|
||||
</div>
|
||||
<div id="nav">
|
||||
<div class="nav-2">
|
||||
<div class="mod-nav clearfix">
|
||||
<h1 class="page-type-notab">找回密码</h1>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div id="content">
|
||||
<div class="mod-forgot">
|
||||
<ul class="mod-sub-nav">
|
||||
<li class="mod-sub-list1 list1-active">确认帐号</li>
|
||||
<li class="mod-sub-list2">安全验证</li>
|
||||
<li class="mod-sub-list3">重置密码</li>
|
||||
</ul>
|
||||
<form th:action="${domainName + 'password/confirmAccount.html'}" method="post" id="forgotsel">
|
||||
<div class="mod-step-detail">
|
||||
<p class="step-email-info">请填写您需要找回的帐号
|
||||
</p>
|
||||
<div class="pass-input-container clearfix" id="pass-auth-select">
|
||||
<input type="text" th:class="${code == 201 ? 'pass-input pass-input-forgot pass-input-error':'pass-input pass-input-forgot'}" name="username" th:value="${username}" id="account" placeholder="手机/邮箱/用户名">
|
||||
<span class="fix-clear userName-clearbtn" id="userName_clearBtn"></span>
|
||||
<span class="pass-input-msg l-h40" th:text="${code == '201' ? '用户名不存在,请重新输入' : ''}"></span>
|
||||
</div>
|
||||
<div class="pass-account-slect clearfix m_b15 hide" style="position: relative; display: none;">
|
||||
<p>请协助我们确认一下您输入的内容,便于更快的定位您的信息:</p>
|
||||
<p class="pass-radio pass-radio-list" s="username">我输入的是用户名</p>
|
||||
<p class="pass-radio pass-radio-list pass-radion-active" s="securemobil">我输入的是手机号</p>
|
||||
</div>
|
||||
<div class="pass-input-container vcode-container clearfix">
|
||||
<input type="text" th:class="${code == 202 ? 'pass-input pass-input-forgot vcode-input vcode-input-width pass-input-error' : 'pass-input pass-input-forgot vcode-input vcode-input-width'}" name="veritycode" value="" id="veritycode" placeholder="请输入验证码">
|
||||
<img class="vcode-img vcode-img-big hide" alt="验证码图片" title="验证码图片" th:src="${domainName + 'captcha.jpg'}" style="display: inline;">
|
||||
<a class="vcode-img-change p-t13">换一张</a>
|
||||
<span class="pass-input-msg l-h40" th:text="${code == 202 ? '验证码错误,请重新输入' : ''}"></span>
|
||||
</div>
|
||||
<div>
|
||||
<input type="submit" name="" value="下一步" class="pass-button-submit" id="submit">
|
||||
</div>
|
||||
</div>
|
||||
</form>
|
||||
</div>
|
||||
</div>
|
||||
<div id="foot">
|
||||
<div class="mod-footer">
|
||||
<div class="copy-box">2018 ©Tamguo</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<!-- 底部结束-->
|
||||
</body>
|
||||
<script type="text/javascript" th:src="${domainName + 'js/jquery-1.8.3.min.js'}"></script>
|
||||
<script type="text/javascript" th:src="${domainName + 'js/password/confirmAccount.js'}"></script>
|
||||
<script type="text/javascript" th:inline="javascript">
|
||||
var mainHttp = [[${domainName}]];
|
||||
</script>
|
||||
</html>
|
@ -0,0 +1,90 @@
|
||||
<!DOCTYPE html>
|
||||
<html lang="Zh-hans" xmlns:th="http://www.thymeleaf.org">
|
||||
<head>
|
||||
<meta charset="UTF-8">
|
||||
<title>找回密码_探果网</title>
|
||||
<meta name="description" content="探果网携手高校名师为考生提供高效的智能备考服务,涵括领域有高考、财会类、建筑工程、职业资格、医卫类、计算机类和学历类等热门考试题库。拥有高校名师丰富的经验,优质的学习资料和备考全阶段的高效服务,助您丰富自我,不断前行!"/>
|
||||
<meta name="keyword" content="探果网,高校名师,名师专访,名师教案,名师课堂试题库,试卷库,智能题库,历年真题,模拟试题,押题,预测试题,高考,会计证,会计从业,会计师,经济师,施工员,建造师,建筑师,造价师,职业资格,证券资格,考研,计算机考试,建筑考试,财会类,医卫类,护士资格,公务员,知识点,试题,试卷"/>
|
||||
<link rel="stylesheet" th:href="${setting.domain + 'css/reset.css'}" />
|
||||
<link rel="stylesheet" th:href="${setting.domain + 'css/password/resetPassword.css'}" />
|
||||
<link type="favicon" rel="shortcut icon" th:href="${setting.domain + 'images/favicon.png'}" />
|
||||
</head>
|
||||
<body>
|
||||
<div id="wrapper" class="">
|
||||
<div id="head">
|
||||
<div class="mod-header">
|
||||
<a th:href="${setting.domain + 'login.html'}"><img th:src="${setting.domain + 'images/logo_731bc32.png'}" alt="logo"></a>
|
||||
</div>
|
||||
<ul class="mod-userbar">
|
||||
<li>
|
||||
<a id="mod-userbar-login" th:href="${setting.domain + 'login.html'}">登录</a>
|
||||
</li>
|
||||
<li>|</li>
|
||||
<li>
|
||||
<a th:href="${setting.domain + 'register.html'}">注册</a>
|
||||
</li>
|
||||
</ul>
|
||||
</div>
|
||||
<div id="nav">
|
||||
<div class="nav-2">
|
||||
<div class="mod-nav clearfix">
|
||||
<h1 class="page-type-notab">找回密码</h1>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div id="content">
|
||||
<div class="mod-forgot">
|
||||
<ul class="mod-sub-nav">
|
||||
<li class="mod-sub-list1">确认帐号</li>
|
||||
<li class="mod-sub-list2">安全验证</li>
|
||||
<li class="mod-sub-list3 list3-active">重置密码</li>
|
||||
</ul>
|
||||
<div class="mod-step-detail">
|
||||
<p class="step-form-tip m_l80">您正在找回的帐号是:喜欢吃鱼的果果</p>
|
||||
<form th:action="${setting.domain + 'password/resetPassword.html'}" method="post" id="form-resetpwd">
|
||||
<div class="pass-input-container clearfix">
|
||||
<label class="pass-input-title l-h40" for="password">新密码</label>
|
||||
<input type="password" class="pass-input pass-input-forgot left" name="password" id="password" value="" autocomplete="off">
|
||||
<div class="pass-input-pwdmsg">
|
||||
<div class="pass-streng-wrapper" id="pass_pwdMsg">
|
||||
<span class="pass-tips-streng">
|
||||
<span id="pass-tips-level"></span>
|
||||
</span>
|
||||
<span id="pass-tips-title" class="left"></span>
|
||||
</div>
|
||||
<span class="pass-input-msg l-h40" id="pass_input_msg_Pwd"></span>
|
||||
</div>
|
||||
</div>
|
||||
<div class="pass-input-container clearfix">
|
||||
<label class="pass-input-title l-h40" for="repassword">确认新密码</label>
|
||||
<input type="password" class="pass-input pass-input-forgot left" name="verifypwd" id="verifypwd" value="" autocomplete="off">
|
||||
<span class="pass-input-msg l-h40" id="repassword_msg"></span>
|
||||
</div>
|
||||
<div class="m_l80">
|
||||
<input type="hidden" name="resetPasswordKey" th:value="${resetPasswordKey}">
|
||||
<input type="hidden" name="username" th:value="${username}">
|
||||
<input class="pass-button-submit" type="submit" name="" value="确定" id="submit-resetpwd">
|
||||
</div>
|
||||
</form>
|
||||
</div>
|
||||
</div>
|
||||
<div class="pass-tips hide" id="pass-tips" style="top: 245px; left: 505px; display: none;">
|
||||
<span class="pwd-checklist-arrow"><em class="arrowa">◆</em><em class="arrowb">◆</em></span>
|
||||
<ul class="pass-tips-content">
|
||||
<li id="pwdLen" class="pass-tips-content-item pass-tips-content-item-error">长度为6~14个字符</li>
|
||||
<li id="pwdCha" class="pass-tips-content-item">支持数字,大小写字母和标点符号</li>
|
||||
<li id="pwdSpa" class="pass-tips-content-item pass-tips-content-item-success">不允许有空格</li>
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
<div id="foot">
|
||||
<div class="mod-footer">
|
||||
<div class="copy-box">2018 ©Tamguo</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</body>
|
||||
|
||||
<script type="text/javascript" th:src="${setting.domain + 'js/jquery-1.8.3.min.js'}"></script>
|
||||
<script type="text/javascript" th:src="${setting.domain + 'js/password/resetPassword.js'}"></script>
|
||||
</html>
|
@ -0,0 +1,90 @@
|
||||
<!DOCTYPE html>
|
||||
<html lang="Zh-hans" xmlns:th="http://www.thymeleaf.org">
|
||||
<head>
|
||||
<meta charset="UTF-8">
|
||||
<title>找回密码_探果网</title>
|
||||
<meta name="description" content="探果网携手高校名师为考生提供高效的智能备考服务,涵括领域有高考、财会类、建筑工程、职业资格、医卫类、计算机类和学历类等热门考试题库。拥有高校名师丰富的经验,优质的学习资料和备考全阶段的高效服务,助您丰富自我,不断前行!"/>
|
||||
<meta name="keyword" content="探果网,高校名师,名师专访,名师教案,名师课堂试题库,试卷库,智能题库,历年真题,模拟试题,押题,预测试题,高考,会计证,会计从业,会计师,经济师,施工员,建造师,建筑师,造价师,职业资格,证券资格,考研,计算机考试,建筑考试,财会类,医卫类,护士资格,公务员,知识点,试题,试卷"/>
|
||||
<link rel="stylesheet" th:href="${domainName + 'css/reset.css'}" />
|
||||
<link rel="stylesheet" th:href="${domainName + 'css/password/securityCheck.css'}" />
|
||||
<link type="favicon" rel="shortcut icon" th:href="${domainName + 'images/favicon.png'}" />
|
||||
</head>
|
||||
<body>
|
||||
<div id="wrapper" class="">
|
||||
<div id="head">
|
||||
<div class="mod-header">
|
||||
<a th:href="${domainName + 'login.html'}"><img th:src="${domainName + 'images/logo_731bc32.png'}" alt="logo"></a>
|
||||
</div>
|
||||
<ul class="mod-userbar">
|
||||
<li>
|
||||
<a id="mod-userbar-login" th:href="${domainName + 'login.html'}">登录</a>
|
||||
</li>
|
||||
<li>|</li>
|
||||
<li>
|
||||
<a th:href="${domainName + 'register.html'}">注册</a>
|
||||
</li>
|
||||
</ul>
|
||||
</div>
|
||||
<div id="nav">
|
||||
<div class="nav-2">
|
||||
<div class="mod-nav clearfix">
|
||||
<h1 class="page-type-notab">找回密码</h1>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div id="content">
|
||||
<div class="mod-forgot">
|
||||
<ul class="mod-sub-nav">
|
||||
<li class="mod-sub-list1">确认帐号</li>
|
||||
<li class="mod-sub-list2 list2-active">安全验证</li>
|
||||
<li class="mod-sub-list3">重置密码</li>
|
||||
</ul>
|
||||
<div class="mod-step-detail" style="position:relative;">
|
||||
<div class="forgot-auth-container">
|
||||
<p class="step-form-info">为了你的帐号安全,请完成身份验证</p>
|
||||
<div class="forgot-auth-type m-t10" id="mobile-auth">
|
||||
<form th:action="${domainName + 'password/securityCheck.html'}" method="post" class="form-2" id="form-mobile">
|
||||
<div class="forgot-auth-title" th:text="${isEmail == '1' ? '邮箱验证' : '手机验证'}">手机验证</div>
|
||||
<div class="form-2-item clearfix pass-input-container">
|
||||
<label class="form-2-label" th:text="${isEmail == '1' ? '邮箱' : '手机号'}">手机号:</label>
|
||||
<div class="form-2-content line-32" th:text="${isEmail == '0' ? result.result.mobile : result.result.email}">
|
||||
156******86</div>
|
||||
</div>
|
||||
<p class="verify-method">验证码:</p>
|
||||
<div class="form-2-item clearfix">
|
||||
<div class="form-2-content pass-input-container vcode-container m-b-mobile">
|
||||
<input type="text" th:class="${codeError == '1' ? 'pass-input vcode-input pass-input-new pass-input-error' : 'pass-input vcode-input pass-input-new'}" name="mobileVcode" value="" id="pass-input-mobileVcode" th:placeholder="${isEmail == '1' ? '邮箱验证码' : '手机验证码'}">
|
||||
<div class="pass-button-timer" id="pass-button-new1">发送验证码</div>
|
||||
<span class="pass-input-stip" id="forgot-mobileVcode-success"></span>
|
||||
<div class="clear"></div>
|
||||
<a class="pass-input-stip" id="forgot-mobileVcode-unreceived" style="margin-left:0;display:none;">收不到短信验证码?</a>
|
||||
<span class="pass-input-msg" id="forgot-mobileVcode-tip" th:text="${codeError == '1' ? '验证码错误' : ''}"></span>
|
||||
</div>
|
||||
</div>
|
||||
<div class="m-b30">
|
||||
<input type="hidden" name="username" th:value="${result.result.username}"></input>
|
||||
<input type="hidden" name="mobile" th:value="${result.result.mobile}"></input>
|
||||
<input type="hidden" name="email" th:value="${result.result.email}"></input>
|
||||
<input type="hidden" name="isEmail" th:value="${isEmail}"></input>
|
||||
<input class="pass-button-submit pass-submit-form pass-button-new1" type="submit" name="" value="下一步" id="submit-mobile" t="mobile">
|
||||
</div>
|
||||
</form>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div id="foot">
|
||||
<div class="mod-footer">
|
||||
<div class="copy-box">2018 ©Tamguo</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</body>
|
||||
|
||||
<script type="text/javascript" th:src="${domainName + 'js/jquery-1.8.3.min.js'}"></script>
|
||||
<script type="text/javascript" th:src="${domainName + 'js/password/securityCheck.js'}"></script>
|
||||
<script type="text/javascript" th:inline="javascript">
|
||||
var mainHttp = [[${domainName}]];
|
||||
</script>
|
||||
</html>
|
@ -0,0 +1,84 @@
|
||||
<!DOCTYPE html>
|
||||
<html lang="Zh-hans" xmlns:th="http://www.thymeleaf.org">
|
||||
<head>
|
||||
<meta charset="UTF-8">
|
||||
<title>注册_探果网</title>
|
||||
<meta name="keywords" content="高考,财会类,建筑工程,职业资格,医卫类,考研,会计类"/>
|
||||
<meta name="description" content="探果网,高考试题,高考试卷,高校试题,名校,名校试题,名校试卷,高校名师,名师专访,名师教案,名师课堂试题库,试卷库,智能题库,历年真题,模拟试题,押题,预测试题,高考,会计证,会计从业,会计师,经济师,施工员,建造师,建筑师,造价师,职业资格,证券资格,考研,计算机考试,建筑考试,财会类,医卫类,护士资格,公务员,知识点,试题,试卷"/>
|
||||
<meta name="author" content="Tamguo Team" />
|
||||
<meta name="copyright" content="Tamguo" />
|
||||
<link rel="stylesheet" th:href="${domainName + 'css/reset.css'}" />
|
||||
<link rel="stylesheet" th:href="${domainName + 'css/member/register.css'}" />
|
||||
<link type="favicon" rel="shortcut icon" th:href="${domainName + 'images/favicon.png'}" />
|
||||
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/element-ui@2.4.2/lib/theme-chalk/index.css">
|
||||
</head>
|
||||
<body>
|
||||
<div id="wrapper" class="">
|
||||
<div id="head">
|
||||
<div class="mod-header">
|
||||
<a th:href="${domainName}" style="display: block;">
|
||||
<img th:src="${domainName + 'images/logo_731bc32.png'}" alt="logo"></a>
|
||||
</div>
|
||||
</div>
|
||||
<div id="nav">
|
||||
<div class="nav-2">
|
||||
<div class="mod-nav clearfix">
|
||||
<h1 class="page-type-notab"></h1>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div id="content">
|
||||
<div class="mod-reg clearfix mod-reg-">
|
||||
<div class="reg-content tang-pass-reg" id="reg_content" style="width:50%;margin-top:10px;">
|
||||
<el-form :model="member" :rules="rules" ref="member" label-width="100px" class="demo-ruleForm" v-loading="loading">
|
||||
<el-form-item label="用戶名" prop="username">
|
||||
<el-input v-model="member.username"></el-input>
|
||||
</el-form-item>
|
||||
<el-form-item label="类型" prop="kemuId">
|
||||
<el-cascader
|
||||
:options="courses"
|
||||
v-model="member.kemuId">
|
||||
</el-cascader>
|
||||
</el-form-item>
|
||||
<el-form-item label="手机号" prop="mobile">
|
||||
<el-input v-model="member.mobile"></el-input>
|
||||
</el-form-item>
|
||||
<el-form-item label="邮箱" prop="email">
|
||||
<el-input v-model="member.email"></el-input>
|
||||
</el-form-item>
|
||||
<el-form-item label="密码" prop="password">
|
||||
<el-input type="password" v-model="member.password" auto-complete="off"></el-input>
|
||||
</el-form-item>
|
||||
<el-form-item label="确认密码" prop="checkPass">
|
||||
<el-input type="password" v-model="member.checkPass" auto-complete="off"></el-input>
|
||||
</el-form-item>
|
||||
<el-form-item label="验证码" prop="verifyCode">
|
||||
<el-input v-model="member.verifyCode" style="width:60%;"></el-input>
|
||||
<el-button @click="sendSms" :disabled="smsDisabled">发送短信</el-button>
|
||||
</el-form-item>
|
||||
<el-form-item>
|
||||
<el-button type="primary" @click="submitForm('member')">立即注册</el-button>
|
||||
<el-button @click="resetForm('member')">重置</el-button>
|
||||
</el-form-item>
|
||||
</el-form>
|
||||
</div>
|
||||
<div class="login-link" id="login_link">
|
||||
<span>我已注册,现在就</span>
|
||||
<button class="login-btn" id="login_btn"><a title="探果网登录" th:href="${domainName + 'login.html'}">登录</a></button></div>
|
||||
</div>
|
||||
<div id="foot">
|
||||
<div class="mod-footer">
|
||||
<div class="copy-box">2018 ©Tamguo</div></div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</body>
|
||||
<script type="text/javascript" th:inline="javascript">
|
||||
var mainHttp = [[${domainName}]];
|
||||
</script>
|
||||
<!-- import JavaScript -->
|
||||
<script src="https://cdn.jsdelivr.net/npm/vue@2.5.16"></script>
|
||||
<script src="https://cdn.jsdelivr.net/npm/element-ui@2.4.2/lib/index.js"></script>
|
||||
<script src="https://cdn.jsdelivr.net/npm/axios@0.18.0/dist/axios.min.js"></script>
|
||||
<script type="text/javascript" th:src="${domainName + 'js/member/register.js'}"></script>
|
||||
</html>
|