修改Oauth接口
diff --git a/oauth/build.gradle b/oauth/build.gradle
index 17d4252..aeffb67 100644
--- a/oauth/build.gradle
+++ b/oauth/build.gradle
@@ -5,7 +5,6 @@
id 'org.jetbrains.kotlin.plugin.jpa' version '1.3.31'
id 'org.jetbrains.kotlin.plugin.spring'
id "com.palantir.git-version"
- id 'com.palantir.docker'
}
apply plugin: 'java'
@@ -34,7 +33,6 @@
dependencies {
-
implementation 'org.springframework.boot:spring-boot-starter-data-jpa'
implementation 'org.springframework.boot:spring-boot-starter-data-redis'
implementation 'org.springframework.boot:spring-boot-starter-web'
@@ -47,23 +45,25 @@
implementation 'org.springframework.security.oauth.boot:spring-security-oauth2-autoconfigure:2.1.5.RELEASE'
implementation 'org.springframework.boot:spring-boot-starter-thymeleaf'
implementation 'org.springframework.session:spring-session-data-redis'
- implementation 'commons-codec:commons-codec:1.12'
- implementation 'com.jcabi:jcabi-manifests:1.1'
- implementation 'org.slf4j:slf4j-parent:1.7.26'
+ implementation 'org.springframework.boot:spring-boot-starter-cache'
+ implementation 'org.springframework.social:spring-social-web:1.1.6.RELEASE'
implementation 'org.jetbrains.kotlin:kotlin-reflect'
implementation 'org.jetbrains.kotlin:kotlin-stdlib-jdk8'
- implementation group: 'com.google.code.gson', name: 'gson', version: '2.8.5'
- implementation group: 'com.sun.jersey', name: 'jersey-client', version: '1.19'
- implementation group: 'javax.servlet', name: 'jstl', version: '1.2'
- implementation group: 'taglibs', name: 'standard', version: '1.1.2'
- implementation group: 'commons-codec', name: 'commons-codec', version: '1.6'
- implementation 'org.dom4j:dom4j:2.1.1'
- implementation 'commons-beanutils:commons-beanutils:1.9.3'
- implementation 'commons-net:commons-net:3.6'
- implementation 'org.postgresql:postgresql:42.2.5'
+ implementation 'commons-codec:commons-codec:1.12'
+ implementation 'org.apache.commons:commons-lang3:3.9'
implementation 'net.javacrumbs.shedlock:shedlock-spring:2.5.0'
implementation 'net.javacrumbs.shedlock:shedlock-provider-redis-spring:2.5.0'
+
+ implementation 'org.thymeleaf.extras:thymeleaf-extras-springsecurity5'
+
+ implementation 'org.postgresql:postgresql:42.2.5'
+ implementation 'com.fasterxml.jackson.module:jackson-module-kotlin'
+ implementation 'com.jcabi:jcabi-manifests:1.1'
implementation 'org.bitbucket.b_c:jose4j:0.6.5'
+ implementation 'io.github.microutils:kotlin-logging:1.6.26'
+ implementation 'org.slf4j:slf4j-parent:1.7.26'
+
+ implementation 'commons-dbcp:commons-dbcp:1.4'
implementation project(':payapi-common')
diff --git a/oauth/src/main/java/com/supwisdom/oauth/ServletInitializer.kt b/oauth/src/main/java/com/supwisdom/oauth/ServletInitializer.kt
new file mode 100644
index 0000000..5df64f0
--- /dev/null
+++ b/oauth/src/main/java/com/supwisdom/oauth/ServletInitializer.kt
@@ -0,0 +1,13 @@
+package com.supwisdom.oauth
+
+import com.supwisdom.oauth.OAuthApplication
+import org.springframework.boot.builder.SpringApplicationBuilder
+import org.springframework.boot.web.servlet.support.SpringBootServletInitializer
+
+class ServletInitializer : SpringBootServletInitializer() {
+
+ override fun configure(application: SpringApplicationBuilder): SpringApplicationBuilder {
+ return application.sources(OAuthApplication::class.java)
+ }
+
+}
diff --git a/oauth/src/main/kotlin/com/supwisdom/oauth/OAuthApplication.kt b/oauth/src/main/kotlin/com/supwisdom/oauth/OAuthApplication.kt
index 674639b..7d34f95 100644
--- a/oauth/src/main/kotlin/com/supwisdom/oauth/OAuthApplication.kt
+++ b/oauth/src/main/kotlin/com/supwisdom/oauth/OAuthApplication.kt
@@ -1,4 +1,4 @@
-package com.supwisdom.dlpay
+package com.supwisdom.oauth
import io.lettuce.core.ReadFrom
import net.javacrumbs.shedlock.core.LockProvider
@@ -112,7 +112,6 @@
}
}
-
@SpringBootApplication
@EnableScheduling
@EnableCaching
diff --git a/oauth/src/main/kotlin/com/supwisdom/oauth/dao/ApiClientDao.kt b/oauth/src/main/kotlin/com/supwisdom/oauth/dao/ApiClientDao.kt
index cf0bdbe..e2a80a5 100644
--- a/oauth/src/main/kotlin/com/supwisdom/oauth/dao/ApiClientDao.kt
+++ b/oauth/src/main/kotlin/com/supwisdom/oauth/dao/ApiClientDao.kt
@@ -12,8 +12,6 @@
interface ApiClientDao : JpaRepository<TApiClient, String> {
@Transactional(propagation = Propagation.REQUIRED, readOnly = true, rollbackFor = [Exception::class])
- fun findByAppid(appid: String): TApiClient
+ fun findByAppid(appid: String): TApiClient?
- @Transactional(propagation = Propagation.REQUIRED, readOnly = true, rollbackFor = [Exception::class])
- fun findByAppidContaining(appid: String, pageable: Pageable): Page<TApiClient>
}
diff --git a/oauth/src/main/kotlin/com/supwisdom/oauth/oauth.kt b/oauth/src/main/kotlin/com/supwisdom/oauth/oauth.kt
index 16e27ba..8fb70be 100644
--- a/oauth/src/main/kotlin/com/supwisdom/oauth/oauth.kt
+++ b/oauth/src/main/kotlin/com/supwisdom/oauth/oauth.kt
@@ -25,10 +25,8 @@
import org.springframework.security.oauth2.provider.OAuth2Authentication
import org.springframework.security.oauth2.provider.client.BaseClientDetails
import org.springframework.security.oauth2.provider.token.store.redis.RedisTokenStore
-import org.springframework.web.bind.annotation.RequestHeader
-import org.springframework.web.bind.annotation.RequestMapping
-import org.springframework.web.bind.annotation.RequestParam
-import org.springframework.web.bind.annotation.RestController
+import org.springframework.stereotype.Controller
+import org.springframework.web.bind.annotation.*
import java.security.Principal
import java.util.*
import java.security.SecureRandom
@@ -46,20 +44,29 @@
if (access_token.isNullOrEmpty() && auth.isNullOrEmpty()) {
return ResponseEntity.status(HttpStatus.UNAUTHORIZED).build()
}
- var jwt: String
- if(!auth.isNullOrEmpty()){
- jwt = auth.substring(jwtConfig.tokenHeader.length)
+ var jwt = if(!auth.isNullOrEmpty()){
+ auth.substring(jwtConfig.tokenHeader.length)
}else{
- jwt = access_token!!
+ access_token!!
}
val obj: OAuth2Authentication? = RedisTokenStore(redisConnectionFactory).readAuthentication(jwt) ?: return ResponseEntity.status(HttpStatus.UNAUTHORIZED).build()
val user = obj!!.userAuthentication.principal as UserDetails
if(user.username.isNullOrEmpty()){
return ResponseEntity.status(HttpStatus.UNAUTHORIZED).build()
}
- return ResponseEntity.status(HttpStatus.OK).body("""{"name":"${user.username}"}""")
+ return ResponseEntity.status(HttpStatus.OK).body("""{"outid":"${user.username}"}""")
}
}
+@Controller
+class WebMainController {
+ @GetMapping("/login")
+ fun loginView() = "login"
+
+ @GetMapping("/index")
+ fun indexView() = "index"
+}
+
+
class OAuthDetailService : ClientDetailsService {
@Autowired
@@ -71,13 +78,13 @@
}
details.clientId = clientId
apiClientDao.findByAppid(clientId)?.let {
- details.setAuthorizedGrantTypes(Arrays.asList("password","authorization_code","refresh_token"))
- details.setScope(Arrays.asList("read"))
- details.setResourceIds(Arrays.asList("oauth2-resource"))
+ details.setAuthorizedGrantTypes(listOf("password", "authorization_code", "refresh_token"))
+ details.setScope(listOf("read"))
+ details.setResourceIds(listOf("oauth2-resource"))
val authorities = HashSet<GrantedAuthority>()
authorities.add(SimpleGrantedAuthority("ROLE_THIRD_ADMIN"))
details.authorities = authorities
- details.setAutoApproveScopes(Arrays.asList("true"))
+ details.setAutoApproveScopes(listOf("true"))
details.clientSecret = it.bcryptSecret
details.accessTokenValiditySeconds = 3600
details.refreshTokenValiditySeconds=43200
diff --git a/oauth/src/main/kotlin/com/supwisdom/oauth/security.kt b/oauth/src/main/kotlin/com/supwisdom/oauth/security.kt
index f70bb02..0fdf884 100644
--- a/oauth/src/main/kotlin/com/supwisdom/oauth/security.kt
+++ b/oauth/src/main/kotlin/com/supwisdom/oauth/security.kt
@@ -1,4 +1,4 @@
-package com.supwisdom.dlpay
+package com.supwisdom.oauth
import com.supwisdom.oauth.domain.OAuthUser
import com.supwisdom.oauth.service.OAuthUserService
@@ -6,12 +6,14 @@
import org.springframework.beans.factory.annotation.Autowired
import org.springframework.context.annotation.Bean
import org.springframework.context.annotation.Configuration
+import org.springframework.security.authentication.AuthenticationManager
import org.springframework.security.authentication.BadCredentialsException
import org.springframework.security.authentication.LockedException
import org.springframework.security.authentication.dao.DaoAuthenticationProvider
import org.springframework.security.config.annotation.authentication.builders.AuthenticationManagerBuilder
import org.springframework.security.config.annotation.method.configuration.EnableGlobalMethodSecurity
import org.springframework.security.config.annotation.web.builders.HttpSecurity
+import org.springframework.security.config.annotation.web.builders.WebSecurity
import org.springframework.security.config.annotation.web.configuration.EnableWebSecurity
import org.springframework.security.config.annotation.web.configuration.WebSecurityConfigurerAdapter
import org.springframework.security.config.http.SessionCreationPolicy
@@ -20,7 +22,6 @@
import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder
import org.springframework.security.web.authentication.SimpleUrlAuthenticationFailureHandler
import org.springframework.security.web.authentication.SimpleUrlAuthenticationSuccessHandler
-import org.springframework.security.web.authentication.rememberme.JdbcTokenRepositoryImpl
import org.springframework.security.web.util.matcher.AntPathRequestMatcher
import org.springframework.stereotype.Component
import java.io.IOException
@@ -28,24 +29,23 @@
import javax.servlet.ServletException
import javax.servlet.http.HttpServletRequest
import javax.servlet.http.HttpServletResponse
-import javax.sql.DataSource
@Component("authLoginSuccessHandler")
class AuthLoginSuccessHandler : SimpleUrlAuthenticationSuccessHandler() {
@Autowired
- lateinit var userService: OAuthUserService
+ lateinit var oAuthUserService: OAuthUserService
@Override
override fun onAuthenticationSuccess(request: HttpServletRequest, response: HttpServletResponse, authentication: Authentication) {
val temp = authentication.principal as OAuthUser
- val user = userService.getByUid(temp.uid)
+ val user = oAuthUserService.getByUid(temp.uid)
if (user != null) {
if (user.loginpwderror > 0) {
user.loginpwderror = 0
user.loginpwderrortime = null
}
user.lastlogin = DateUtil.getNow()
- userService.saveUser(user)
+ oAuthUserService.saveUser(user)
super.onAuthenticationSuccess(request, response, authentication)
} else {
throw UserLoginFailException("登录错误")
@@ -55,7 +55,7 @@
@Component("authLoginFailHandler")
class AuthLoginFailHandler : SimpleUrlAuthenticationFailureHandler() {
@Autowired
- lateinit var userService: OAuthUserService
+ lateinit var oAuthUserService: OAuthUserService
@Throws(IOException::class, ServletException::class)
override fun onAuthenticationFailure(request: HttpServletRequest,
@@ -67,13 +67,13 @@
}
val temp = request.getParameter("username")
if(!temp.isNullOrEmpty()) {
- userService.findByLoginid(temp)?.let {
+ oAuthUserService.findByLoginid(temp)?.let {
if (it.loginpwderror == 0) {
it.loginpwderror = 0
it.loginpwderrortime = System.currentTimeMillis()
}
it.loginpwderror += 1
- userService.saveUser(it)
+ oAuthUserService.saveUser(it)
}
}
setDefaultFailureUrl("/login")
@@ -92,10 +92,6 @@
@Configuration
class MvcWebSecurityConfigurationAdapter : WebSecurityConfigurerAdapter() {
@Autowired
- lateinit var dataSource: DataSource
- @Autowired
- lateinit var validateCodeSecurityConfig: ValidateCodeSecurityConfig
- @Autowired
lateinit var authLoginFailHandler: AuthLoginFailHandler
@Autowired
lateinit var authLoginSuccessHandler: AuthLoginSuccessHandler
@@ -109,6 +105,11 @@
}
@Bean
+ override fun authenticationManager(): AuthenticationManager {
+ return super.authenticationManagerBean()
+ }
+
+ @Bean
fun authenticationProvider(): DaoAuthenticationProvider {
return DaoAuthenticationProvider().apply {
setUserDetailsService(userDetailsService)
@@ -126,18 +127,9 @@
}
}
- @Bean
- fun jdbcTokenImplement(): JdbcTokenRepositoryImpl {
- return JdbcTokenRepositoryImpl().also {
- it.dataSource = dataSource
- }
- }
-
override fun configure(http: HttpSecurity) {
// 设置 Web MVC 应用权限
- http.apply(validateCodeSecurityConfig)
- .and()
- .authorizeRequests()
+ http.authorizeRequests()
.antMatchers("/login", "/login/form", "/userinfor").permitAll()
.antMatchers("/static/**").permitAll()
.antMatchers("/code/image").permitAll()
diff --git a/oauth/src/main/kotlin/com/supwisdom/oauth/util/Constants.java b/oauth/src/main/kotlin/com/supwisdom/oauth/util/Constants.java
deleted file mode 100644
index 7cf989f..0000000
--- a/oauth/src/main/kotlin/com/supwisdom/oauth/util/Constants.java
+++ /dev/null
@@ -1,15 +0,0 @@
-package com.supwisdom.oauth.util;
-
-public class Constants {
- // HTTP HEADER define
- public static final String HEADER_TETANTID = "X-TENANT-ID";
-
- // define
- public static final String JWT_CLAIM_TENANTID = "tenantId";
- public static final String JWT_CLAIM_UID = "uid";
- public static final String JWT_CLAIM_AUTHORITIES = "authorities";
- // 根商户ID
- public static final Integer ROOT_SHOP_FID = 1;
-
- public static final String HEADER_AUTHORIZATION = "Authorization";
-}
diff --git a/oauth/src/main/kotlin/com/supwisdom/oauth/util/Constants.kt b/oauth/src/main/kotlin/com/supwisdom/oauth/util/Constants.kt
new file mode 100644
index 0000000..8860143
--- /dev/null
+++ b/oauth/src/main/kotlin/com/supwisdom/oauth/util/Constants.kt
@@ -0,0 +1,5 @@
+package com.supwisdom.oauth.util
+
+object Constants {
+ const val HEADER_AUTHORIZATION = "Authorization"
+}
diff --git a/oauth/src/main/kotlin/com/supwisdom/oauth/util/DateUtil.java b/oauth/src/main/kotlin/com/supwisdom/oauth/util/DateUtil.java
deleted file mode 100644
index 5b355c6..0000000
--- a/oauth/src/main/kotlin/com/supwisdom/oauth/util/DateUtil.java
+++ /dev/null
@@ -1,361 +0,0 @@
-package com.supwisdom.oauth.util;
-
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-import java.sql.Timestamp;
-import java.text.ParseException;
-import java.text.SimpleDateFormat;
-import java.util.Calendar;
-import java.util.Date;
-import java.util.TimeZone;
-
-public class DateUtil {
- private static final Logger logger = LoggerFactory.getLogger(DateUtil.class);
- public static final String DATE_FMT = "yyyyMMdd";
- public static final String TIME_FMT = "HHmmss";
- public static final String DATETIME_FMT = "yyyyMMddHHmmss";
-
- /**
- * Description: 返回一个当前时间 @return String 格式:yyyyMMddHHmmss @exception Modify
- * History:
- */
- public static String getNow() {
- SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMddHHmmss");
- return sdf.format(new Date());
- }
-
-
- /**
- * Description: 根据类型返回一个当前时间 @param partten String @return String 格式:partten
- */
- public static String getNow(String partten) {
- SimpleDateFormat sdf = new SimpleDateFormat(partten);
- return sdf.format(new Date());
- }
- /*
- *
- * */
- public static String getNowInterDay(int intervalday) {
- try {
- SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMdd");
- Date d = new Date();
- Calendar calendar = Calendar.getInstance();
- calendar.setTimeInMillis(d.getTime());
- calendar.add(Calendar.DATE, intervalday);
- return sdf.format(calendar.getTime());
- } catch (Exception e) {
- e.printStackTrace();
- return null;
- }
- }
-
- /**
- * Description: 得到一个特殊的时间 @param startTime String 格式:yyyyMMddHHmmss @param
- * interval int 秒 @return String 格式:partten @exception Modify History:
- */
- public static String getNewTime(String startTime, int interval) {
- try {
- SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMddHHmmss");
- Date d = sdf.parse(startTime);
- Calendar calendar = Calendar.getInstance();
- calendar.setTimeInMillis(d.getTime());
- calendar.add(Calendar.SECOND, interval);
- return sdf.format(calendar.getTime());
- } catch (ParseException e) {
- return startTime;
- }
- }
-
- /**
- * Description: 得到一个特殊的时间 @param startTime String 格式:partten @param
- * interval int 秒 @return String 格式:partten @exception Modify History:
- */
- public static String getNewTime(String startTime, int interval, String partten) {
- try {
- SimpleDateFormat sdf = new SimpleDateFormat(partten);
- Date d = sdf.parse(startTime);
- Calendar calendar = Calendar.getInstance();
- calendar.setTimeInMillis(d.getTime());
- calendar.add(Calendar.SECOND, interval);
- return sdf.format(calendar.getTime());
- } catch (ParseException e) {
- return startTime;
- }
- }
-
- public static String getNewDay(String startDay, int intervalday) {
- try {
- SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMdd");
- Date d = sdf.parse(startDay);
- Calendar calendar = Calendar.getInstance();
- calendar.setTimeInMillis(d.getTime());
- calendar.add(Calendar.DATE, intervalday);
- return sdf.format(calendar.getTime());
- } catch (ParseException e) {
- return startDay;
- }
- }
-
- /**
- * 得到两个日期相差的天数 格式 yyyyMMdd @return diffdays = secondDay - firstDay
- */
- public static long getIntervalDay(String firstDay, String secondDay) {
- try {
- SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMdd");
- Date f = sdf.parse(firstDay);
- Date s = sdf.parse(secondDay);
- long time = s.getTime() - f.getTime();
- return time / (24 * 60 * 60 * 1000);
- } catch (ParseException e) {
- return 0;
- }
- }
-
- /**
- * Description: 比较两个时间字符串的前后关系 @param firstTime String 格式:yyyyMMddHHmmss
- *
- * @param secondTime String 格式: yyyyMMddHHmmss @return int |
- * firstTime=second int=0 | firstTime>secondTime int>0 |
- * firstTime<secondTime int<0 @exception Modify History:
- */
- public static int compareDatetime(String firstTime, String secondTime) {
- try {
- SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMddHHmmss");
- Date f = sdf.parse(firstTime);
- Date s = sdf.parse(secondTime);
- return f.compareTo(s);
- } catch (ParseException e) {
- return 0;
- }
- }
-
- /**
- * Description: 比较两个时间字符串的前后关系 @param firstTime String 格式:pattern
- *
- * @param secondTime String 格式: yyyyMMddHHmmss @return int |
- * firstTime=second int=0 | firstTime>secondTime int>0 |
- * firstTime<secondTime int<0 @exception Modify History:
- */
- public static int compareDatetime(String firstTime, String secondTime, String pattern) {
- try {
- SimpleDateFormat sdf = new SimpleDateFormat(pattern);
- Date f = sdf.parse(firstTime);
- Date s = sdf.parse(secondTime);
- return f.compareTo(s);
- } catch (ParseException e) {
- return 0;
- }
- }
-
- /**
- * Description: 比较两个时间字符串的时间差 @param firstTime String 格式:yyyyMMddHHmmss
- *
- * @param secondTime String 格式: yyyyMMddHHmmss @param second int 格式 @return
- * int | firstTime+seconds=secondTime int=0 | firstTime+seconds>secondTime
- * int>0 | firstTime+seconds<secondTime int<0 @exception Modify History:
- */
- public static int compareDatetime(String firstTime, String secondTime, int seconds) {
- try {
- SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMddHHmmss");
- Date f = sdf.parse(firstTime);
- Date s = sdf.parse(secondTime);
- Calendar calendar = Calendar.getInstance();
- calendar.setTimeInMillis(f.getTime());
- calendar.add(Calendar.SECOND, seconds);
- Date temp = calendar.getTime();
- return temp.compareTo(s);
- } catch (Exception e) {
- return 0;
- }
- }
-
- /**
- * Description: 对time重新格式化
- */
- public static String reformatDatetime(String time, String fromPattern, String toPattern) {
- try {
- SimpleDateFormat sdf = new SimpleDateFormat(fromPattern);
- Date d = sdf.parse(time);
- Calendar calendar = Calendar.getInstance();
- calendar.setTimeInMillis(d.getTime());
- sdf = new SimpleDateFormat(toPattern);
- return sdf.format(calendar.getTime());
- } catch (Exception e) {
- e.printStackTrace();
- return time;
- }
- }
-
- /**
- * 获得两个字符串日期之间的时间差(单位毫秒) 格式 yyyyMMddHHmmss
- */
- public static long getInterval(String startTime, String endTime) {
- long duration = 0;
- try {
- SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMddHHmmss");
- duration = sdf.parse(endTime).getTime() - sdf.parse(startTime).getTime();
- } catch (ParseException e) {
- logger.error("Hi guys,there is an error when you try to parse the date string");
- }
- return duration;
- }
-
- /**
- * 获得两个字符串日期之间的时间差(单位毫秒)
- */
- public static long getIntervalTime(String startTime, String endTime, String pattern) {
- long duration = 0;
- try {
- SimpleDateFormat sdf = new SimpleDateFormat(pattern);
- duration = sdf.parse(endTime).getTime() - sdf.parse(startTime).getTime();
- } catch (ParseException e) {
- logger.error("Hi guys,there is an error when you try to parse the date string");
- }
- return duration;
- }
-
- /**
- * 转换成日期格式
- * 短格式:20140401 -> 2014-04-01
- * 中格式:201404011200 -> 2014-04-01 12:00
- * 长格式:20140401123025 -> 2014-04-01 12:30:25
- **/
- public static String parseToDateFormat(String str) {
- switch (str.length()) {
- case 8:
- str = str.substring(0, 4) + "-" + str.substring(4, 6) + "-" + str.substring(6, 8);
- break;
- case 12:
- str = str.substring(0, 4) + "-" + str.substring(4, 6) + "-" + str.substring(6, 8) + " " + str.substring(8, 10) + ":" + str.substring(10, 12);
- break;
- case 14:
- str = str.substring(0, 4) + "-" + str.substring(4, 6) + "-" + str.substring(6, 8) + " " + str.substring(8, 10) + ":" + str.substring(10, 12) + ":" + str.substring(12, 14);
- break;
- default:
- break;
- }
- return str;
- }
-
- /**
- * 解日期格式
- * 短格式:2014-04-01 -> 20140401
- * 中格式:2014-04-01 12:00 -> 201404011200
- * 长格式:2014-04-01 12:30:25 -> 20140401123025
- **/
- public static String unParseToDateFormat(String str) {
- return str.replaceAll("-", "").replaceAll(" ", "").replaceAll(":", "");
- }
-
- /**
- * 检验时间格式
- */
- public static boolean checkDatetimeValid(String datetime, String pattern) {
- if (null == datetime) return false;
- try {
- SimpleDateFormat sdf = new SimpleDateFormat(pattern);
- Date d = sdf.parse(datetime);
- return datetime.trim().equals(sdf.format(d));
- } catch (Exception e) {
- }
- return false;
- }
-
- /**
- * 获取指定日期是星期几 格式 yyyyMMdd
- * MON|TUE|WED|THU|FRI|SAT|SUN
- * 1 2 3 4 5 6 7
- */
- public static int getWeekday(String datestr) {
- try {
- SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMdd");
- Calendar calendar = Calendar.getInstance();
- boolean isFirstSunday = (calendar.getFirstDayOfWeek() == Calendar.SUNDAY); //一周第一天是否为星期天
- Date d = sdf.parse(datestr);
- calendar.setTimeInMillis(d.getTime());
- int weekDay = calendar.get(calendar.DAY_OF_WEEK);
- if (isFirstSunday) {
- weekDay = weekDay - 1;
- if (weekDay == 0) {
- weekDay = 7;
- }
- }
- return weekDay;
- } catch (Exception e) {
- return -1;
- }
- }
-
- /**
- * 获取指定日期
- */
- public static Date getSpecifyDate(String datestr, String pattern) {
- try {
- SimpleDateFormat sdf = new SimpleDateFormat(pattern);
- Date result = sdf.parse(datestr);
- return result;
- } catch (Exception e) {
- return new Date();
- }
- }
-
- public static Integer getLastDayOfMonth(Integer year, Integer month) {
- Calendar cal = Calendar.getInstance();
- cal.set(Calendar.YEAR, year);
- cal.set(Calendar.MONTH, month - 1);
- cal.set(Calendar.DAY_OF_MONTH, cal.getActualMaximum(Calendar.DATE));
- String str = new SimpleDateFormat("yyyyMMdd ").format(cal.getTime()).toString();
- Integer result = Integer.parseInt(str.substring(0, 4) + str.substring(4, 6) + str.substring(6, 8));
- return result;
- }
-
- private static Date set(Date date, int calendarField, int amount) {
- Calendar c = Calendar.getInstance();
- c.setLenient(false);
- c.setTime(date);
- c.add(calendarField, amount);
- return c.getTime();
- }
-
-
- public static Date setMinutes(Date date, int amount) {
- return set(date, Calendar.MINUTE, amount);
- }
-
-
- public static long getNowSecond() {
- Calendar calendar = Calendar.getInstance();
- return calendar.getTimeInMillis() / 1000;
- }
-
-
- public static String getUTCTime(Long timeInMillisSecond) {
- Calendar time = Calendar.getInstance();
- SimpleDateFormat fmt = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss z");
- fmt.setTimeZone(TimeZone.getTimeZone("UTC"));
- time.setTimeInMillis(timeInMillisSecond);
- return fmt.format(time.getTime());
- }
-
- public static String getUTCTime() {
- return getUTCTime(System.currentTimeMillis());
- }
-
- public static int compareDay(Timestamp d1, Timestamp d2) {
- Calendar cd1 = Calendar.getInstance();
- cd1.setTimeInMillis(d1.getTime());
- Calendar cd2 = Calendar.getInstance();
- cd2.setTimeInMillis(d2.getTime());
-
- if (cd1.get(Calendar.YEAR) != cd2.get(Calendar.YEAR)) {
- return cd1.compareTo(cd2);
- }
-
- return Integer.compare(cd1.get(Calendar.DAY_OF_YEAR), cd2.get(Calendar.DAY_OF_YEAR));
- }
-
- public static Boolean sameDay(Timestamp d1, Timestamp d2) {
- return (compareDay(d1, d2) == 0);
- }
-}
diff --git a/oauth/src/main/kotlin/com/supwisdom/oauth/util/DateUtil.kt b/oauth/src/main/kotlin/com/supwisdom/oauth/util/DateUtil.kt
new file mode 100644
index 0000000..096ad53
--- /dev/null
+++ b/oauth/src/main/kotlin/com/supwisdom/oauth/util/DateUtil.kt
@@ -0,0 +1,17 @@
+package com.supwisdom.oauth.util
+import java.text.SimpleDateFormat
+import java.util.Date
+
+object DateUtil {
+ /**
+ * Description: 根据类型返回一个当前时间 @param partten String @return String 格式:partten
+ */
+ fun getNow(partten: String): String {
+ val sdf = SimpleDateFormat(partten)
+ return sdf.format(Date())
+ }
+ fun getNow(): String {
+ val sdf = java.text.SimpleDateFormat("yyyyMMddHHmmss")
+ return sdf.format(Date())
+ }
+}
diff --git a/oauth/src/main/kotlin/com/supwisdom/oauth/util/JwtConfig.java b/oauth/src/main/kotlin/com/supwisdom/oauth/util/JwtConfig.java
deleted file mode 100644
index 3bf4921..0000000
--- a/oauth/src/main/kotlin/com/supwisdom/oauth/util/JwtConfig.java
+++ /dev/null
@@ -1,36 +0,0 @@
-package com.supwisdom.oauth.util;
-
-import org.springframework.beans.factory.annotation.Value;
-import org.springframework.context.annotation.Configuration;
-
-@Configuration
-public class JwtConfig {
- @Value("${jwt.secret}")
- private String secret;
- @Value("${jwt.expiration:3600}")
- private Long expiration = 3600L;
- @Value("${jwt.header:Authorization}")
- private String header = "Authorization";
- @Value("${jwt.token_header:Bearer }")
- private String tokenHeader = "Bearer";
-
- public String getSecret() {
- return secret;
- }
-
- public Long getExpiration() {
- return expiration;
- }
-
- public String getHeader() {
- return header;
- }
-
- public String getTokenHeader() {
- return tokenHeader;
- }
-
- public void setExpiration(Long expiration) {
- this.expiration = expiration;
- }
-}
diff --git a/oauth/src/main/kotlin/com/supwisdom/oauth/util/JwtConfig.kt b/oauth/src/main/kotlin/com/supwisdom/oauth/util/JwtConfig.kt
new file mode 100644
index 0000000..70cc74e
--- /dev/null
+++ b/oauth/src/main/kotlin/com/supwisdom/oauth/util/JwtConfig.kt
@@ -0,0 +1,16 @@
+package com.supwisdom.oauth.util
+
+import org.springframework.beans.factory.annotation.Value
+import org.springframework.context.annotation.Configuration
+
+@Configuration
+class JwtConfig {
+ @Value("\${jwt.secret}")
+ val secret: String? = null
+ @Value("\${jwt.expiration:3600}")
+ var expiration: Long? = 3600L
+ @Value("\${jwt.header:Authorization}")
+ val header = "Authorization"
+ @Value("\${jwt.token_header:Bearer }")
+ val tokenHeader = "Bearer"
+}
diff --git a/oauth/src/main/kotlin/com/supwisdom/oauth/util/JwtToken.java b/oauth/src/main/kotlin/com/supwisdom/oauth/util/JwtToken.java
deleted file mode 100644
index 8d17542..0000000
--- a/oauth/src/main/kotlin/com/supwisdom/oauth/util/JwtToken.java
+++ /dev/null
@@ -1,39 +0,0 @@
-package com.supwisdom.oauth.util;
-
-import org.jose4j.jwt.NumericDate;
-
-public class JwtToken {
- private String jti;
- private NumericDate expiration;
- private String jwtToken;
-
- public JwtToken(String jti, String jwtToken, NumericDate exp) {
- this.jti = jti;
- this.jwtToken = jwtToken;
- this.expiration = exp;
- }
-
- public String getJti() {
- return jti;
- }
-
- public void setJti(String jti) {
- this.jti = jti;
- }
-
- public String getJwtToken() {
- return jwtToken;
- }
-
- public void setJwtToken(String jwtToken) {
- this.jwtToken = jwtToken;
- }
-
- public NumericDate getExpiration() {
- return expiration;
- }
-
- public void setExpiration(NumericDate expiration) {
- this.expiration = expiration;
- }
-}
diff --git a/oauth/src/main/kotlin/com/supwisdom/oauth/util/JwtToken.kt b/oauth/src/main/kotlin/com/supwisdom/oauth/util/JwtToken.kt
new file mode 100644
index 0000000..7a7fb7b
--- /dev/null
+++ b/oauth/src/main/kotlin/com/supwisdom/oauth/util/JwtToken.kt
@@ -0,0 +1,5 @@
+package com.supwisdom.oauth.util
+
+import org.jose4j.jwt.NumericDate
+
+class JwtToken(var jti: String?, var jwtToken: String?, var expiration: NumericDate?)
diff --git a/oauth/src/main/kotlin/com/supwisdom/oauth/util/JwtTokenUtil.java b/oauth/src/main/kotlin/com/supwisdom/oauth/util/JwtTokenUtil.java
deleted file mode 100644
index 9304dcd..0000000
--- a/oauth/src/main/kotlin/com/supwisdom/oauth/util/JwtTokenUtil.java
+++ /dev/null
@@ -1,94 +0,0 @@
-package com.supwisdom.oauth.util;
-
-import org.jose4j.jwa.AlgorithmConstraints;
-import org.jose4j.jwk.JsonWebKey;
-import org.jose4j.jws.AlgorithmIdentifiers;
-import org.jose4j.jws.JsonWebSignature;
-import org.jose4j.jwt.JwtClaims;
-import org.jose4j.jwt.MalformedClaimException;
-import org.jose4j.jwt.consumer.InvalidJwtException;
-import org.jose4j.jwt.consumer.JwtConsumer;
-import org.jose4j.jwt.consumer.JwtConsumerBuilder;
-import org.jose4j.lang.JoseException;
-import org.springframework.security.core.userdetails.UserDetails;
-
-import java.util.HashMap;
-import java.util.Map;
-
-public class JwtTokenUtil {
- private JwtConfig jwtConfig;
-
- public JwtTokenUtil(JwtConfig config) {
- this.jwtConfig = config;
- }
-
- public String getHeader() {
- return jwtConfig.getHeader();
- }
-
- public JwtToken generateToken(Map<String, Object> params) throws JoseException, MalformedClaimException {
- JwtClaims claims = new JwtClaims();
- claims.setIssuer(params.get("issuer").toString()); // who creates the token and signs it
- if (params.get("audience") != null) {
- claims.setAudience(params.get("audience").toString());
- }
- claims.setExpirationTimeMinutesInTheFuture(jwtConfig.getExpiration() / 60); // time when the token will expire (10 minutes from now)
- claims.setGeneratedJwtId();
- claims.setIssuedAtToNow(); // when the token was issued/created (now)
- claims.setNotBeforeMinutesInThePast(2); // time before which the token is not yet valid (2 minutes ago)
- if (params.get("subject") != null) {
- claims.setSubject(params.get("subject").toString()); // the subject/principal is whom the token is about
- }
- if (params.get(Constants.JWT_CLAIM_AUTHORITIES) != null) {
- claims.setClaim(Constants.JWT_CLAIM_AUTHORITIES, params.get(Constants.JWT_CLAIM_AUTHORITIES));
- }
- if (params.get(Constants.JWT_CLAIM_UID) != null) {
- claims.setClaim(Constants.JWT_CLAIM_UID, params.get(Constants.JWT_CLAIM_UID));
- }
- if (params.get(Constants.JWT_CLAIM_TENANTID) != null) {
- claims.setClaim(Constants.JWT_CLAIM_TENANTID, params.get(Constants.JWT_CLAIM_TENANTID));
- }
- /*
- claims.setClaim("email", "mail@example.com"); // additional claims/attributes about the subject can be added
- List<String> groups = Arrays.asList("group-one", "other-group", "group-three");
- claims.setStringListClaim("groups", groups); // multi-valued claims work too and will end up as a JSON array
- */
-
- Map<String, Object> keySpec = new HashMap<>();
- keySpec.put("kty", "oct");
- keySpec.put("k", jwtConfig.getSecret());
- JsonWebKey key = JsonWebKey.Factory.newJwk(keySpec);
- JsonWebSignature jws = new JsonWebSignature();
- jws.setPayload(claims.toJson());
- jws.setKey(key.getKey());
- jws.setKeyIdHeaderValue(key.getKeyId());
- jws.setAlgorithmHeaderValue(AlgorithmIdentifiers.HMAC_SHA256);
- return new JwtToken(claims.getJwtId(), jws.getCompactSerialization(), claims.getExpirationTime());
- }
-
- public JwtToken generateToken(UserDetails userDetails) throws JoseException, MalformedClaimException {
- Map<String, Object> claims = new HashMap<>();
- claims.put("uid", userDetails.getUsername());
- return generateToken(claims);
- }
-
- public Map<String, Object> verifyToken(String token) throws JoseException, InvalidJwtException {
- Map<String, Object> keySpec = new HashMap<>();
- keySpec.put("kty", "oct");
- keySpec.put("k", jwtConfig.getSecret());
- JsonWebKey key = JsonWebKey.Factory.newJwk(keySpec);
- JwtConsumer jwtConsumer = new JwtConsumerBuilder()
- .setRequireExpirationTime() // the JWT must have an expiration time
- .setAllowedClockSkewInSeconds(30) // allow some leeway in validating time based claims to account for clock skew
- .setVerificationKey(key.getKey()) // verify the signature with the public key
- .setSkipDefaultAudienceValidation()
- .setJwsAlgorithmConstraints( // only allow the expected signature algorithm(s) in the given context
- new AlgorithmConstraints(org.jose4j.jwa.AlgorithmConstraints.ConstraintType.WHITELIST, // which is only RS256 here
- AlgorithmIdentifiers.HMAC_SHA256))
- .build(); // create the JwtConsumer instance
-
- // Validate the JWT and process it to the Claims
- JwtClaims jwtClaims = jwtConsumer.processToClaims(token);
- return jwtClaims.getClaimsMap();
- }
-}
diff --git a/oauth/src/main/kotlin/com/supwisdom/oauth/util/PasswordBCryptConfig.java b/oauth/src/main/kotlin/com/supwisdom/oauth/util/PasswordBCryptConfig.java
deleted file mode 100644
index 55d2c03..0000000
--- a/oauth/src/main/kotlin/com/supwisdom/oauth/util/PasswordBCryptConfig.java
+++ /dev/null
@@ -1,28 +0,0 @@
-package com.supwisdom.oauth.util;
-
-import org.springframework.beans.factory.annotation.Value;
-import org.springframework.context.annotation.Configuration;
-
-@Configuration
-public class PasswordBCryptConfig {
- @Value("${auth.password.bcrypt.length:10}")
- private Integer length;
- @Value("${auth.password.bcrypt.seed}")
- private String seed = "";
-
- public Integer getLength() {
- return length;
- }
-
- public void setLength(Integer length) {
- this.length = length;
- }
-
- public String getSeed() {
- return seed;
- }
-
- public void setSeed(String seed) {
- this.seed = seed;
- }
-}
diff --git a/oauth/src/main/kotlin/com/supwisdom/oauth/util/PasswordBCryptConfig.kt b/oauth/src/main/kotlin/com/supwisdom/oauth/util/PasswordBCryptConfig.kt
new file mode 100644
index 0000000..139508c
--- /dev/null
+++ b/oauth/src/main/kotlin/com/supwisdom/oauth/util/PasswordBCryptConfig.kt
@@ -0,0 +1,12 @@
+package com.supwisdom.oauth.util
+
+import org.springframework.beans.factory.annotation.Value
+import org.springframework.context.annotation.Configuration
+
+@Configuration
+class PasswordBCryptConfig {
+ @Value("\${auth.password.bcrypt.length:10}")
+ var length: Int = 0
+ @Value("\${auth.password.bcrypt.seed}")
+ var seed = ""
+}
diff --git a/oauth/src/main/kotlin/com/supwisdom/oauth/util/ValidateCodeException.java b/oauth/src/main/kotlin/com/supwisdom/oauth/util/ValidateCodeException.java
deleted file mode 100755
index c719096..0000000
--- a/oauth/src/main/kotlin/com/supwisdom/oauth/util/ValidateCodeException.java
+++ /dev/null
@@ -1,23 +0,0 @@
-/**
- *
- */
-package com.supwisdom.oauth.util;
-
-import org.springframework.security.core.AuthenticationException;
-
-/**
- * @author lenovo
- *
- */
-public class ValidateCodeException extends AuthenticationException {
-
- /**
- *
- */
- private static final long serialVersionUID = 1170189980006964105L;
-
-
- public ValidateCodeException(String msg) {
- super(msg);
- }
-}
diff --git a/oauth/src/main/kotlin/com/supwisdom/oauth/util/ValidateCodeException.kt b/oauth/src/main/kotlin/com/supwisdom/oauth/util/ValidateCodeException.kt
new file mode 100644
index 0000000..b5459dc
--- /dev/null
+++ b/oauth/src/main/kotlin/com/supwisdom/oauth/util/ValidateCodeException.kt
@@ -0,0 +1,19 @@
+/**
+ *
+ */
+package com.supwisdom.oauth.util
+
+import org.springframework.security.core.AuthenticationException
+
+/**
+ * @author lenovo
+ */
+class ValidateCodeException(msg: String) : AuthenticationException(msg) {
+ companion object {
+
+ /**
+ *
+ */
+ private val serialVersionUID = 1170189980006964105L
+ }
+}
diff --git a/oauth/src/main/kotlin/com/supwisdom/oauth/util/ValidateCodeSecurityConfig.java b/oauth/src/main/kotlin/com/supwisdom/oauth/util/ValidateCodeSecurityConfig.java
deleted file mode 100644
index 9f0118c..0000000
--- a/oauth/src/main/kotlin/com/supwisdom/oauth/util/ValidateCodeSecurityConfig.java
+++ /dev/null
@@ -1,23 +0,0 @@
-package com.supwisdom.oauth.util;
-
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.security.config.annotation.SecurityConfigurerAdapter;
-import org.springframework.security.config.annotation.web.builders.HttpSecurity;
-import org.springframework.security.web.DefaultSecurityFilterChain;
-import org.springframework.security.web.authentication.preauth.AbstractPreAuthenticatedProcessingFilter;
-import org.springframework.stereotype.Component;
-
-import javax.servlet.Filter;
-
-@Component("validateCodeSecurityConfig")
-public class ValidateCodeSecurityConfig extends SecurityConfigurerAdapter<DefaultSecurityFilterChain,HttpSecurity> {
-
- @Autowired
- private Filter validateCodeFilter;
-
- @Override
- public void configure(HttpSecurity http) throws Exception {
- http.addFilterBefore(validateCodeFilter, AbstractPreAuthenticatedProcessingFilter.class);
- }
-
-}
\ No newline at end of file
diff --git a/oauth/src/main/resources/static/css/jquery-weui.css b/oauth/src/main/resources/static/css/jquery-weui.css
new file mode 100644
index 0000000..333bdc9
--- /dev/null
+++ b/oauth/src/main/resources/static/css/jquery-weui.css
@@ -0,0 +1,2345 @@
+/**
+* jQuery WeUI V1.2.0
+* By 言川
+* http://lihongxun945.github.io/jquery-weui/
+ */
+.preloader {
+ width: 20px;
+ height: 20px;
+ -webkit-transform-origin: 50%;
+ transform-origin: 50%;
+ -webkit-animation: preloader-spin 1s steps(12, end) infinite;
+ animation: preloader-spin 1s steps(12, end) infinite;
+}
+.preloader:after {
+ display: block;
+ width: 100%;
+ height: 100%;
+ content: "";
+ background-image: url("data:image/svg+xml;charset=utf-8,%3Csvg%20viewBox%3D'0%200%20120%20120'%20xmlns%3D'http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg'%20xmlns%3Axlink%3D'http%3A%2F%2Fwww.w3.org%2F1999%2Fxlink'%3E%3Cdefs%3E%3Cline%20id%3D'l'%20x1%3D'60'%20x2%3D'60'%20y1%3D'7'%20y2%3D'27'%20stroke%3D'%236c6c6c'%20stroke-width%3D'11'%20stroke-linecap%3D'round'%2F%3E%3C%2Fdefs%3E%3Cg%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.27'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.27'%20transform%3D'rotate(30%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.27'%20transform%3D'rotate(60%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.27'%20transform%3D'rotate(90%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.27'%20transform%3D'rotate(120%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.27'%20transform%3D'rotate(150%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.37'%20transform%3D'rotate(180%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.46'%20transform%3D'rotate(210%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.56'%20transform%3D'rotate(240%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.66'%20transform%3D'rotate(270%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.75'%20transform%3D'rotate(300%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.85'%20transform%3D'rotate(330%2060%2C60)'%2F%3E%3C%2Fg%3E%3C%2Fsvg%3E");
+ background-repeat: no-repeat;
+ background-position: 50%;
+ background-size: 100%;
+}
+@-webkit-keyframes preloader-spin {
+ 100% {
+ -webkit-transform: rotate(360deg);
+ transform: rotate(360deg);
+ }
+}
+@keyframes preloader-spin {
+ 100% {
+ -webkit-transform: rotate(360deg);
+ transform: rotate(360deg);
+ }
+}
+/*
+.hairline(@position, @color) when (@position = top) {
+ border-top: 1px solid @color;
+}
+.hairline(@position, @color) when (@position = left) {
+ border-left: 1px solid @color;
+}
+.hairline(@position, @color) when (@position = bottom) {
+ border-bottom: 1px solid @color;
+}
+.hairline(@position, @color) when (@position = right) {
+ border-right: 1px solid @color;
+}
+// For right and bottom
+.hairline-remove(@position) when not (@position = left) and not (@position = top) {
+ border-left: 0;
+ border-bottom: 0;
+}
+// For left and top
+.hairline-remove(@position) when not (@position = right) and not (@position = bottom) {
+ border-right: 0;
+ border-top: 0;
+}
+// For right and bottom
+.hairline-color(@position, @color) when not (@position = left) and not (@position = top) {
+ border-right-color: @color;
+ border-bottom-color: @color;
+}
+// For left and top
+.hairline-color(@position, @color) when not (@position = right) and not (@position = bottom) {
+ border-left-color: @color;
+ border-top-color: @color;
+}
+*/
+label > * {
+ pointer-events: none;
+}
+html {
+ font-size: 20px;
+}
+body {
+ font-size: 16px;
+}
+@media only screen and (min-width: 400px) {
+ html {
+ font-size: 21.33333333px !important;
+ }
+}
+@media only screen and (min-width: 414px) {
+ html {
+ font-size: 22.08px !important;
+ }
+}
+@media only screen and (min-width: 480px) {
+ html {
+ font-size: 25.6px !important;
+ }
+}
+.weui_navbar {
+ z-index: 10;
+}
+.weui-popup-overlay,
+.weui-popup-container {
+ z-index: 1000;
+}
+.weui-mask {
+ z-index: 1000;
+}
+/* === Grid === */
+.weui-row {
+ display: -webkit-box;
+ display: -ms-flexbox;
+ display: -webkit-flex;
+ display: flex;
+ -webkit-box-pack: justify;
+ -ms-flex-pack: justify;
+ -webkit-justify-content: space-between;
+ justify-content: space-between;
+ -webkit-box-lines: multiple;
+ -moz-box-lines: multiple;
+ -webkit-flex-wrap: wrap;
+ -ms-flex-wrap: wrap;
+ flex-wrap: wrap;
+ -webkit-box-align: start;
+ -ms-flex-align: start;
+ -webkit-align-items: flex-start;
+ align-items: flex-start;
+}
+.weui-row > [class*="col-"] {
+ box-sizing: border-box;
+}
+.weui-row .col-auto {
+ width: 100%;
+}
+.weui-row .weui-col-100 {
+ width: 100%;
+ width: calc((100% - 15px*0) / 1);
+}
+.weui-row.weui-no-gutter .weui-col-100 {
+ width: 100%;
+}
+.weui-row .weui-col-95 {
+ width: 95%;
+ width: calc((100% - 15px*0.05263157894736836) / 1.0526315789473684);
+}
+.weui-row.weui-no-gutter .weui-col-95 {
+ width: 95%;
+}
+.weui-row .weui-col-90 {
+ width: 90%;
+ width: calc((100% - 15px*0.11111111111111116) / 1.1111111111111112);
+}
+.weui-row.weui-no-gutter .weui-col-90 {
+ width: 90%;
+}
+.weui-row .weui-col-85 {
+ width: 85%;
+ width: calc((100% - 15px*0.17647058823529416) / 1.1764705882352942);
+}
+.weui-row.weui-no-gutter .weui-col-85 {
+ width: 85%;
+}
+.weui-row .weui-col-80 {
+ width: 80%;
+ width: calc((100% - 15px*0.25) / 1.25);
+}
+.weui-row.weui-no-gutter .weui-col-80 {
+ width: 80%;
+}
+.weui-row .weui-col-75 {
+ width: 75%;
+ width: calc((100% - 15px*0.33333333333333326) / 1.3333333333333333);
+}
+.weui-row.weui-no-gutter .weui-col-75 {
+ width: 75%;
+}
+.weui-row .weui-col-66 {
+ width: 66.66666666666666%;
+ width: calc((100% - 15px*0.5000000000000002) / 1.5000000000000002);
+}
+.weui-row.weui-no-gutter .weui-col-66 {
+ width: 66.66666666666666%;
+}
+.weui-row .weui-col-60 {
+ width: 60%;
+ width: calc((100% - 15px*0.6666666666666667) / 1.6666666666666667);
+}
+.weui-row.weui-no-gutter .weui-col-60 {
+ width: 60%;
+}
+.weui-row .weui-col-50 {
+ width: 50%;
+ width: calc((100% - 15px*1) / 2);
+}
+.weui-row.weui-no-gutter .weui-col-50 {
+ width: 50%;
+}
+.weui-row .weui-col-40 {
+ width: 40%;
+ width: calc((100% - 15px*1.5) / 2.5);
+}
+.weui-row.weui-no-gutter .weui-col-40 {
+ width: 40%;
+}
+.weui-row .weui-col-33 {
+ width: 33.333333333333336%;
+ width: calc((100% - 15px*2) / 3);
+}
+.weui-row.weui-no-gutter .weui-col-33 {
+ width: 33.333333333333336%;
+}
+.weui-row .weui-col-25 {
+ width: 25%;
+ width: calc((100% - 15px*3) / 4);
+}
+.weui-row.weui-no-gutter .weui-col-25 {
+ width: 25%;
+}
+.weui-row .weui-col-20 {
+ width: 20%;
+ width: calc((100% - 15px*4) / 5);
+}
+.weui-row.weui-no-gutter .weui-col-20 {
+ width: 20%;
+}
+.weui-row .weui-col-15 {
+ width: 15%;
+ width: calc((100% - 15px*5.666666666666667) / 6.666666666666667);
+}
+.weui-row.weui-no-gutter .weui-col-15 {
+ width: 15%;
+}
+.weui-row .weui-col-10 {
+ width: 10%;
+ width: calc((100% - 15px*9) / 10);
+}
+.weui-row.weui-no-gutter .weui-col-10 {
+ width: 10%;
+}
+.weui-row .weui-col-5 {
+ width: 5%;
+ width: calc((100% - 15px*19) / 20);
+}
+.weui-row.weui-no-gutter .weui-col-5 {
+ width: 5%;
+}
+.weui-row .weui-col-auto:nth-last-child(1),
+.weui-row .weui-col-auto:nth-last-child(1) ~ .weui-col-auto {
+ width: 100%;
+ width: calc((100% - 15px*0) / 1);
+}
+.weui-row.weui-no-gutter .weui-col-auto:nth-last-child(1),
+.weui-row.weui-no-gutter .weui-col-auto:nth-last-child(1) ~ .weui-col-auto {
+ width: 100%;
+}
+.weui-row .weui-col-auto:nth-last-child(2),
+.weui-row .weui-col-auto:nth-last-child(2) ~ .weui-col-auto {
+ width: 50%;
+ width: calc((100% - 15px*1) / 2);
+}
+.weui-row.weui-no-gutter .weui-col-auto:nth-last-child(2),
+.weui-row.weui-no-gutter .weui-col-auto:nth-last-child(2) ~ .weui-col-auto {
+ width: 50%;
+}
+.weui-row .weui-col-auto:nth-last-child(3),
+.weui-row .weui-col-auto:nth-last-child(3) ~ .weui-col-auto {
+ width: 33.33333333%;
+ width: calc((100% - 15px*2) / 3);
+}
+.weui-row.weui-no-gutter .weui-col-auto:nth-last-child(3),
+.weui-row.weui-no-gutter .weui-col-auto:nth-last-child(3) ~ .weui-col-auto {
+ width: 33.33333333%;
+}
+.weui-row .weui-col-auto:nth-last-child(4),
+.weui-row .weui-col-auto:nth-last-child(4) ~ .weui-col-auto {
+ width: 25%;
+ width: calc((100% - 15px*3) / 4);
+}
+.weui-row.weui-no-gutter .weui-col-auto:nth-last-child(4),
+.weui-row.weui-no-gutter .weui-col-auto:nth-last-child(4) ~ .weui-col-auto {
+ width: 25%;
+}
+.weui-row .weui-col-auto:nth-last-child(5),
+.weui-row .weui-col-auto:nth-last-child(5) ~ .weui-col-auto {
+ width: 20%;
+ width: calc((100% - 15px*4) / 5);
+}
+.weui-row.weui-no-gutter .weui-col-auto:nth-last-child(5),
+.weui-row.weui-no-gutter .weui-col-auto:nth-last-child(5) ~ .weui-col-auto {
+ width: 20%;
+}
+.weui-row .weui-col-auto:nth-last-child(6),
+.weui-row .weui-col-auto:nth-last-child(6) ~ .weui-col-auto {
+ width: 16.66666667%;
+ width: calc((100% - 15px*5) / 6);
+}
+.weui-row.weui-no-gutter .weui-col-auto:nth-last-child(6),
+.weui-row.weui-no-gutter .weui-col-auto:nth-last-child(6) ~ .weui-col-auto {
+ width: 16.66666667%;
+}
+.weui-row .weui-col-auto:nth-last-child(7),
+.weui-row .weui-col-auto:nth-last-child(7) ~ .weui-col-auto {
+ width: 14.28571429%;
+ width: calc((100% - 15px*6) / 7);
+}
+.weui-row.weui-no-gutter .weui-col-auto:nth-last-child(7),
+.weui-row.weui-no-gutter .weui-col-auto:nth-last-child(7) ~ .weui-col-auto {
+ width: 14.28571429%;
+}
+.weui-row .weui-col-auto:nth-last-child(8),
+.weui-row .weui-col-auto:nth-last-child(8) ~ .weui-col-auto {
+ width: 12.5%;
+ width: calc((100% - 15px*7) / 8);
+}
+.weui-row.weui-no-gutter .weui-col-auto:nth-last-child(8),
+.weui-row.weui-no-gutter .weui-col-auto:nth-last-child(8) ~ .weui-col-auto {
+ width: 12.5%;
+}
+.weui-row .weui-col-auto:nth-last-child(9),
+.weui-row .weui-col-auto:nth-last-child(9) ~ .weui-col-auto {
+ width: 11.11111111%;
+ width: calc((100% - 15px*8) / 9);
+}
+.weui-row.weui-no-gutter .weui-col-auto:nth-last-child(9),
+.weui-row.weui-no-gutter .weui-col-auto:nth-last-child(9) ~ .weui-col-auto {
+ width: 11.11111111%;
+}
+.weui-row .weui-col-auto:nth-last-child(10),
+.weui-row .weui-col-auto:nth-last-child(10) ~ .weui-col-auto {
+ width: 10%;
+ width: calc((100% - 15px*9) / 10);
+}
+.weui-row.weui-no-gutter .weui-col-auto:nth-last-child(10),
+.weui-row.weui-no-gutter .weui-col-auto:nth-last-child(10) ~ .weui-col-auto {
+ width: 10%;
+}
+.weui-row .weui-col-auto:nth-last-child(11),
+.weui-row .weui-col-auto:nth-last-child(11) ~ .weui-col-auto {
+ width: 9.09090909%;
+ width: calc((100% - 15px*10) / 11);
+}
+.weui-row.weui-no-gutter .weui-col-auto:nth-last-child(11),
+.weui-row.weui-no-gutter .weui-col-auto:nth-last-child(11) ~ .weui-col-auto {
+ width: 9.09090909%;
+}
+.weui-row .weui-col-auto:nth-last-child(12),
+.weui-row .weui-col-auto:nth-last-child(12) ~ .weui-col-auto {
+ width: 8.33333333%;
+ width: calc((100% - 15px*11) / 12);
+}
+.weui-row.weui-no-gutter .weui-col-auto:nth-last-child(12),
+.weui-row.weui-no-gutter .weui-col-auto:nth-last-child(12) ~ .weui-col-auto {
+ width: 8.33333333%;
+}
+.weui-row .weui-col-auto:nth-last-child(13),
+.weui-row .weui-col-auto:nth-last-child(13) ~ .weui-col-auto {
+ width: 7.69230769%;
+ width: calc((100% - 15px*12) / 13);
+}
+.weui-row.weui-no-gutter .weui-col-auto:nth-last-child(13),
+.weui-row.weui-no-gutter .weui-col-auto:nth-last-child(13) ~ .weui-col-auto {
+ width: 7.69230769%;
+}
+.weui-row .weui-col-auto:nth-last-child(14),
+.weui-row .weui-col-auto:nth-last-child(14) ~ .weui-col-auto {
+ width: 7.14285714%;
+ width: calc((100% - 15px*13) / 14);
+}
+.weui-row.weui-no-gutter .weui-col-auto:nth-last-child(14),
+.weui-row.weui-no-gutter .weui-col-auto:nth-last-child(14) ~ .weui-col-auto {
+ width: 7.14285714%;
+}
+.weui-row .weui-col-auto:nth-last-child(15),
+.weui-row .weui-col-auto:nth-last-child(15) ~ .weui-col-auto {
+ width: 6.66666667%;
+ width: calc((100% - 15px*14) / 15);
+}
+.weui-row.weui-no-gutter .weui-col-auto:nth-last-child(15),
+.weui-row.weui-no-gutter .weui-col-auto:nth-last-child(15) ~ .weui-col-auto {
+ width: 6.66666667%;
+}
+@media all and (min-width: 768px) {
+ .row .tablet-100 {
+ width: 100%;
+ width: calc((100% - 15px*0) / 1);
+ }
+ .row.no-gutter .tablet-100 {
+ width: 100%;
+ }
+ .row .tablet-95 {
+ width: 95%;
+ width: calc((100% - 15px*0.05263157894736836) / 1.0526315789473684);
+ }
+ .row.no-gutter .tablet-95 {
+ width: 95%;
+ }
+ .row .tablet-90 {
+ width: 90%;
+ width: calc((100% - 15px*0.11111111111111116) / 1.1111111111111112);
+ }
+ .row.no-gutter .tablet-90 {
+ width: 90%;
+ }
+ .row .tablet-85 {
+ width: 85%;
+ width: calc((100% - 15px*0.17647058823529416) / 1.1764705882352942);
+ }
+ .row.no-gutter .tablet-85 {
+ width: 85%;
+ }
+ .row .tablet-80 {
+ width: 80%;
+ width: calc((100% - 15px*0.25) / 1.25);
+ }
+ .row.no-gutter .tablet-80 {
+ width: 80%;
+ }
+ .row .tablet-75 {
+ width: 75%;
+ width: calc((100% - 15px*0.33333333333333326) / 1.3333333333333333);
+ }
+ .row.no-gutter .tablet-75 {
+ width: 75%;
+ }
+ .row .tablet-66 {
+ width: 66.66666666666666%;
+ width: calc((100% - 15px*0.5000000000000002) / 1.5000000000000002);
+ }
+ .row.no-gutter .tablet-66 {
+ width: 66.66666666666666%;
+ }
+ .row .tablet-60 {
+ width: 60%;
+ width: calc((100% - 15px*0.6666666666666667) / 1.6666666666666667);
+ }
+ .row.no-gutter .tablet-60 {
+ width: 60%;
+ }
+ .row .tablet-50 {
+ width: 50%;
+ width: calc((100% - 15px*1) / 2);
+ }
+ .row.no-gutter .tablet-50 {
+ width: 50%;
+ }
+ .row .tablet-40 {
+ width: 40%;
+ width: calc((100% - 15px*1.5) / 2.5);
+ }
+ .row.no-gutter .tablet-40 {
+ width: 40%;
+ }
+ .row .tablet-33 {
+ width: 33.333333333333336%;
+ width: calc((100% - 15px*2) / 3);
+ }
+ .row.no-gutter .tablet-33 {
+ width: 33.333333333333336%;
+ }
+ .row .tablet-25 {
+ width: 25%;
+ width: calc((100% - 15px*3) / 4);
+ }
+ .row.no-gutter .tablet-25 {
+ width: 25%;
+ }
+ .row .tablet-20 {
+ width: 20%;
+ width: calc((100% - 15px*4) / 5);
+ }
+ .row.no-gutter .tablet-20 {
+ width: 20%;
+ }
+ .row .tablet-15 {
+ width: 15%;
+ width: calc((100% - 15px*5.666666666666667) / 6.666666666666667);
+ }
+ .row.no-gutter .tablet-15 {
+ width: 15%;
+ }
+ .row .tablet-10 {
+ width: 10%;
+ width: calc((100% - 15px*9) / 10);
+ }
+ .row.no-gutter .tablet-10 {
+ width: 10%;
+ }
+ .row .tablet-5 {
+ width: 5%;
+ width: calc((100% - 15px*19) / 20);
+ }
+ .row.no-gutter .tablet-5 {
+ width: 5%;
+ }
+ .row .tablet-auto:nth-last-child(1),
+ .row .tablet-auto:nth-last-child(1) ~ .col-auto {
+ width: 100%;
+ width: calc((100% - 15px*0) / 1);
+ }
+ .row.no-gutter .tablet-auto:nth-last-child(1),
+ .row.no-gutter .tablet-auto:nth-last-child(1) ~ .tablet-auto {
+ width: 100%;
+ }
+ .row .tablet-auto:nth-last-child(2),
+ .row .tablet-auto:nth-last-child(2) ~ .col-auto {
+ width: 50%;
+ width: calc((100% - 15px*1) / 2);
+ }
+ .row.no-gutter .tablet-auto:nth-last-child(2),
+ .row.no-gutter .tablet-auto:nth-last-child(2) ~ .tablet-auto {
+ width: 50%;
+ }
+ .row .tablet-auto:nth-last-child(3),
+ .row .tablet-auto:nth-last-child(3) ~ .col-auto {
+ width: 33.33333333%;
+ width: calc((100% - 15px*2) / 3);
+ }
+ .row.no-gutter .tablet-auto:nth-last-child(3),
+ .row.no-gutter .tablet-auto:nth-last-child(3) ~ .tablet-auto {
+ width: 33.33333333%;
+ }
+ .row .tablet-auto:nth-last-child(4),
+ .row .tablet-auto:nth-last-child(4) ~ .col-auto {
+ width: 25%;
+ width: calc((100% - 15px*3) / 4);
+ }
+ .row.no-gutter .tablet-auto:nth-last-child(4),
+ .row.no-gutter .tablet-auto:nth-last-child(4) ~ .tablet-auto {
+ width: 25%;
+ }
+ .row .tablet-auto:nth-last-child(5),
+ .row .tablet-auto:nth-last-child(5) ~ .col-auto {
+ width: 20%;
+ width: calc((100% - 15px*4) / 5);
+ }
+ .row.no-gutter .tablet-auto:nth-last-child(5),
+ .row.no-gutter .tablet-auto:nth-last-child(5) ~ .tablet-auto {
+ width: 20%;
+ }
+ .row .tablet-auto:nth-last-child(6),
+ .row .tablet-auto:nth-last-child(6) ~ .col-auto {
+ width: 16.66666667%;
+ width: calc((100% - 15px*5) / 6);
+ }
+ .row.no-gutter .tablet-auto:nth-last-child(6),
+ .row.no-gutter .tablet-auto:nth-last-child(6) ~ .tablet-auto {
+ width: 16.66666667%;
+ }
+ .row .tablet-auto:nth-last-child(7),
+ .row .tablet-auto:nth-last-child(7) ~ .col-auto {
+ width: 14.28571429%;
+ width: calc((100% - 15px*6) / 7);
+ }
+ .row.no-gutter .tablet-auto:nth-last-child(7),
+ .row.no-gutter .tablet-auto:nth-last-child(7) ~ .tablet-auto {
+ width: 14.28571429%;
+ }
+ .row .tablet-auto:nth-last-child(8),
+ .row .tablet-auto:nth-last-child(8) ~ .col-auto {
+ width: 12.5%;
+ width: calc((100% - 15px*7) / 8);
+ }
+ .row.no-gutter .tablet-auto:nth-last-child(8),
+ .row.no-gutter .tablet-auto:nth-last-child(8) ~ .tablet-auto {
+ width: 12.5%;
+ }
+ .row .tablet-auto:nth-last-child(9),
+ .row .tablet-auto:nth-last-child(9) ~ .col-auto {
+ width: 11.11111111%;
+ width: calc((100% - 15px*8) / 9);
+ }
+ .row.no-gutter .tablet-auto:nth-last-child(9),
+ .row.no-gutter .tablet-auto:nth-last-child(9) ~ .tablet-auto {
+ width: 11.11111111%;
+ }
+ .row .tablet-auto:nth-last-child(10),
+ .row .tablet-auto:nth-last-child(10) ~ .col-auto {
+ width: 10%;
+ width: calc((100% - 15px*9) / 10);
+ }
+ .row.no-gutter .tablet-auto:nth-last-child(10),
+ .row.no-gutter .tablet-auto:nth-last-child(10) ~ .tablet-auto {
+ width: 10%;
+ }
+ .row .tablet-auto:nth-last-child(11),
+ .row .tablet-auto:nth-last-child(11) ~ .col-auto {
+ width: 9.09090909%;
+ width: calc((100% - 15px*10) / 11);
+ }
+ .row.no-gutter .tablet-auto:nth-last-child(11),
+ .row.no-gutter .tablet-auto:nth-last-child(11) ~ .tablet-auto {
+ width: 9.09090909%;
+ }
+ .row .tablet-auto:nth-last-child(12),
+ .row .tablet-auto:nth-last-child(12) ~ .col-auto {
+ width: 8.33333333%;
+ width: calc((100% - 15px*11) / 12);
+ }
+ .row.no-gutter .tablet-auto:nth-last-child(12),
+ .row.no-gutter .tablet-auto:nth-last-child(12) ~ .tablet-auto {
+ width: 8.33333333%;
+ }
+ .row .tablet-auto:nth-last-child(13),
+ .row .tablet-auto:nth-last-child(13) ~ .col-auto {
+ width: 7.69230769%;
+ width: calc((100% - 15px*12) / 13);
+ }
+ .row.no-gutter .tablet-auto:nth-last-child(13),
+ .row.no-gutter .tablet-auto:nth-last-child(13) ~ .tablet-auto {
+ width: 7.69230769%;
+ }
+ .row .tablet-auto:nth-last-child(14),
+ .row .tablet-auto:nth-last-child(14) ~ .col-auto {
+ width: 7.14285714%;
+ width: calc((100% - 15px*13) / 14);
+ }
+ .row.no-gutter .tablet-auto:nth-last-child(14),
+ .row.no-gutter .tablet-auto:nth-last-child(14) ~ .tablet-auto {
+ width: 7.14285714%;
+ }
+ .row .tablet-auto:nth-last-child(15),
+ .row .tablet-auto:nth-last-child(15) ~ .col-auto {
+ width: 6.66666667%;
+ width: calc((100% - 15px*14) / 15);
+ }
+ .row.no-gutter .tablet-auto:nth-last-child(15),
+ .row.no-gutter .tablet-auto:nth-last-child(15) ~ .tablet-auto {
+ width: 6.66666667%;
+ }
+}
+.weui-cell__hd img {
+ display: block;
+ margin-right: 5px;
+}
+.weui-cell_swiped .weui-cell__bd {
+ -webkit-transition: -webkit-transform .3s;
+ transition: -webkit-transform .3s;
+ transition: transform .3s;
+ transition: transform .3s, -webkit-transform .3s;
+}
+.swipeout-touching .weui-cell__bd {
+ -webkit-transition: none;
+ transition: none;
+}
+.weui-dialog,
+.weui-toast {
+ -webkit-transition-duration: .2s;
+ transition-duration: .2s;
+ opacity: 0;
+ -webkit-transform: translate(-50%, -50%);
+ transform: translate(-50%, -50%);
+ -webkit-transform-origin: 0 0;
+ transform-origin: 0 0;
+ visibility: hidden;
+ margin: 0;
+ top: 45%;
+ z-index: 2000;
+}
+.weui-dialog .weui-dialog__btn.default,
+.weui-toast .weui-dialog__btn.default {
+ color: #5f646e;
+}
+.weui-dialog .weui-dialog__btn + .weui-dialog__btn,
+.weui-toast .weui-dialog__btn + .weui-dialog__btn {
+ position: relative;
+}
+.weui-dialog .weui-dialog__btn + .weui-dialog__btn:after,
+.weui-toast .weui-dialog__btn + .weui-dialog__btn:after {
+ content: " ";
+ position: absolute;
+ left: 0;
+ top: 0;
+ width: 1px;
+ height: 100%;
+ border-left: 1px solid #D5D5D6;
+ color: #D5D5D6;
+ -webkit-transform-origin: 0 0;
+ transform-origin: 0 0;
+ -webkit-transform: scaleX(0.5);
+ transform: scaleX(0.5);
+}
+.weui-dialog.weui-dialog--visible,
+.weui-toast.weui-dialog--visible,
+.weui-dialog.weui-toast--visible,
+.weui-toast.weui-toast--visible {
+ opacity: 1;
+ visibility: visible;
+}
+.weui-toast_forbidden {
+ color: #F76260;
+}
+.weui-toast_cancel .weui-icon-toast:before {
+ content: "\EA0D";
+}
+.weui-toast_forbidden .weui-icon-toast:before {
+ content: "\EA0B";
+ color: #F76260;
+}
+.weui-toast_text {
+ min-height: 1em;
+ width: auto;
+ height: 45px;
+ border-radius: 25px;
+ margin-left: 0;
+ -webkit-transform: scale(0.9) translate3d(-50%, 0, 0);
+ transform: scale(0.9) translate3d(-50%, 0, 0);
+ -webkit-transform-origin: left;
+ transform-origin: left;
+}
+.weui-toast_text.weui-toast--visible {
+ -webkit-transform: scale(1) translate3d(-50%, 0, 0);
+ transform: scale(1) translate3d(-50%, 0, 0);
+}
+.weui-toast_text .weui-icon-toast {
+ display: none;
+}
+.weui-toast_text .weui-toast_content {
+ margin: 10px 15px;
+}
+.weui-mask {
+ opacity: 0;
+ -webkit-transition-duration: .3s;
+ transition-duration: .3s;
+ visibility: hidden;
+}
+.weui-mask.weui-mask--visible {
+ opacity: 1;
+ visibility: visible;
+}
+.weui-prompt-input {
+ padding: 4px 6px;
+ border: 1px solid #ccc;
+ box-sizing: border-box;
+ height: 2em;
+ width: 80%;
+ margin-top: 10px;
+}
+.weui-pull-to-refresh {
+ margin-top: -50px;
+ -webkit-transition: -webkit-transform .4s;
+ transition: -webkit-transform .4s;
+ transition: transform .4s;
+ transition: transform .4s, -webkit-transform .4s;
+}
+.weui-pull-to-refresh.refreshing {
+ -webkit-transform: translate3d(0, 50px, 0);
+ transform: translate3d(0, 50px, 0);
+}
+.weui-pull-to-refresh.touching {
+ -webkit-transition-duration: 0s;
+ transition-duration: 0s;
+}
+.weui-pull-to-refresh__layer {
+ height: 30px;
+ line-height: 30px;
+ padding: 10px;
+ text-align: center;
+}
+.weui-pull-to-refresh__layer .down {
+ display: inline-block;
+}
+.weui-pull-to-refresh__layer .up,
+.weui-pull-to-refresh__layer .refresh {
+ display: none;
+}
+.weui-pull-to-refresh__layer .weui-pull-to-refresh__arrow {
+ display: inline-block;
+ z-index: 10;
+ width: 20px;
+ height: 20px;
+ margin-right: 4px;
+ vertical-align: -4px;
+ background: no-repeat center;
+ background-size: 13px 20px;
+ -webkit-transition-duration: 300ms;
+ transition-duration: 300ms;
+ -webkit-transform: rotate(0deg) translate3d(0, 0, 0);
+ transform: rotate(0deg) translate3d(0, 0, 0);
+ background-image: url("data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D'http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg'%20viewBox%3D'0%200%2026%2040'%3E%3Cpolygon%20points%3D'9%2C22%209%2C0%2017%2C0%2017%2C22%2026%2C22%2013.5%2C40%200%2C22'%20fill%3D'%238c8c8c'%2F%3E%3C%2Fsvg%3E");
+}
+.weui-pull-to-refresh__layer .weui-pull-to-refresh__preloader {
+ display: none;
+ vertical-align: -4px;
+ margin-right: 4px;
+ width: 20px;
+ height: 20px;
+ -webkit-transform-origin: 50%;
+ transform-origin: 50%;
+ -webkit-animation: preloader-spin 1s steps(12, end) infinite;
+ animation: preloader-spin 1s steps(12, end) infinite;
+}
+.weui-pull-to-refresh__layer .weui-pull-to-refresh__preloader:after {
+ display: block;
+ width: 100%;
+ height: 100%;
+ content: "";
+ background-image: url("data:image/svg+xml;charset=utf-8,%3Csvg%20viewBox%3D'0%200%20120%20120'%20xmlns%3D'http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg'%20xmlns%3Axlink%3D'http%3A%2F%2Fwww.w3.org%2F1999%2Fxlink'%3E%3Cdefs%3E%3Cline%20id%3D'l'%20x1%3D'60'%20x2%3D'60'%20y1%3D'7'%20y2%3D'27'%20stroke%3D'%236c6c6c'%20stroke-width%3D'11'%20stroke-linecap%3D'round'%2F%3E%3C%2Fdefs%3E%3Cg%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.27'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.27'%20transform%3D'rotate(30%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.27'%20transform%3D'rotate(60%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.27'%20transform%3D'rotate(90%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.27'%20transform%3D'rotate(120%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.27'%20transform%3D'rotate(150%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.37'%20transform%3D'rotate(180%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.46'%20transform%3D'rotate(210%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.56'%20transform%3D'rotate(240%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.66'%20transform%3D'rotate(270%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.75'%20transform%3D'rotate(300%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.85'%20transform%3D'rotate(330%2060%2C60)'%2F%3E%3C%2Fg%3E%3C%2Fsvg%3E");
+ background-repeat: no-repeat;
+ background-position: 50%;
+ background-size: 100%;
+}
+.pull-up .weui-pull-to-refresh__layer .down,
+.refreshing .weui-pull-to-refresh__layer .down {
+ display: none;
+}
+.pull-up .weui-pull-to-refresh__layer .weui-pull-to-refresh__arrow {
+ display: inline-block;
+ -webkit-transform: rotate(180deg) translate3d(0, 0, 0);
+ transform: rotate(180deg) translate3d(0, 0, 0);
+}
+.pull-up .weui-pull-to-refresh__layer .up {
+ display: inline-block;
+}
+.pull-down .weui-pull-to-refresh__layer .weui-pull-to-refresh__arrow {
+ display: inline-block;
+}
+.pull-down .weui-pull-to-refresh__layer .down {
+ display: inline-block;
+}
+.refreshing .weui-pull-to-refresh__layer .weui-pull-to-refresh__arrow {
+ display: none;
+}
+.refreshing .weui-pull-to-refresh__layer .weui-pull-to-refresh__preloader {
+ display: inline-block;
+}
+.refreshing .weui-pull-to-refresh__layer .refresh {
+ display: inline-block;
+}
+@keyframes preloader-spin {
+ 100% {
+ -webkit-transform: rotate(360deg);
+ transform: rotate(360deg);
+ }
+}
+.weui-tab__bd-item.weui-pull-to-refresh {
+ position: absolute;
+ top: 50px;
+}
+.weui-tabbar__item {
+ position: relative;
+}
+.weui-tabbar__item.weui-bar__item--on .weui-tabbar__label {
+ color: #04BE02;
+}
+.weui-navbar__item {
+ color: #888;
+}
+.weui-navbar__item.weui-bar__item--on {
+ color: #666;
+ background-color: #f1f1f1;
+}
+.weui-tab__bd {
+ box-sizing: border-box;
+ height: 100%;
+}
+.weui-tab__bd .weui-tab__bd-item {
+ display: none;
+ height: 100%;
+ overflow: auto;
+}
+.weui-tab__bd .weui-tab__bd-item.weui-tab__bd-item--active {
+ display: block;
+}
+.weui-navbar + .weui-tab__bd {
+ padding-top: 50px;
+}
+.toolbar {
+ position: relative;
+ width: 100%;
+ font-size: .85rem;
+ line-height: 1.5;
+ color: #3d4145;
+ background: #f7f7f8;
+}
+.toolbar:before {
+ content: '';
+ position: absolute;
+ left: 0;
+ top: 0;
+ bottom: auto;
+ right: auto;
+ height: 1px;
+ width: 100%;
+ background-color: #d9d9d9;
+ display: block;
+ z-index: 15;
+ -webkit-transform-origin: 50% 0%;
+ transform-origin: 50% 0%;
+}
+@media only screen and (-webkit-min-device-pixel-ratio: 2) {
+ .toolbar:before {
+ -webkit-transform: scaleY(0.5);
+ transform: scaleY(0.5);
+ }
+}
+@media only screen and (-webkit-min-device-pixel-ratio: 3) {
+ .toolbar:before {
+ -webkit-transform: scaleY(0.33);
+ transform: scaleY(0.33);
+ }
+}
+.toolbar .toolbar-inner {
+ height: 2.2rem;
+ display: -webkit-box;
+ display: -ms-flexbox;
+ display: -webkit-flex;
+ display: flex;
+ text-align: center;
+}
+.toolbar .title {
+ position: absolute;
+ display: block;
+ width: 100%;
+ padding: 0;
+ font-size: .85rem;
+ font-weight: normal;
+ line-height: 2.2rem;
+ color: #3d4145;
+ text-align: center;
+ white-space: nowrap;
+}
+.toolbar .picker-button {
+ position: absolute;
+ right: 0;
+ box-sizing: border-box;
+ height: 2.2rem;
+ line-height: 2.2rem;
+ color: #04BE02;
+ z-index: 1;
+ padding: 0 .5rem;
+}
+/* === Columns Picker === */
+.weui-picker-modal {
+ width: 100%;
+ position: absolute;
+ bottom: 0;
+ text-align: center;
+ border-radius: 0;
+ opacity: 0.6;
+ color: #3d4145;
+ -webkit-transition-duration: .3s;
+ transition-duration: .3s;
+ height: 13rem;
+ background: #EFEFF4;
+ -webkit-transform: translate3d(0, 100%, 0);
+ transform: translate3d(0, 100%, 0);
+ -webkit-transition-property: opacity, -webkit-transform;
+ transition-property: opacity, -webkit-transform;
+ transition-property: transform, opacity;
+ transition-property: transform, opacity, -webkit-transform;
+}
+.weui-picker-modal.picker-modal-inline {
+ height: 10.8rem;
+ opacity: 1;
+ position: static;
+ -webkit-transform: translate3d(0, 0, 0);
+ transform: translate3d(0, 0, 0);
+}
+.weui-picker-modal.picker-modal-inline .toolbar {
+ display: none;
+}
+.weui-picker-modal.picker-columns-single .picker-items-col {
+ width: 100%;
+}
+.weui-picker-modal.weui-picker-modal-visible {
+ opacity: 1;
+ -webkit-transform: translate3d(0, 0, 0);
+ transform: translate3d(0, 0, 0);
+}
+.weui-picker-modal .picker-modal-inner {
+ position: relative;
+ height: 10.8rem;
+}
+.weui-picker-modal .picker-columns {
+ width: 100%;
+ height: 13rem;
+ z-index: 11500;
+}
+.weui-picker-modal .picker-columns.picker-modal-inline,
+.popover .weui-picker-modal .picker-columns {
+ height: 10rem;
+}
+@media (orientation: landscape) and (max-height: 415px) {
+ .weui-picker-modal .picker-columns:not(.picker-modal-inline) {
+ height: 10rem;
+ }
+}
+.weui-picker-modal .popover.popover-picker-columns {
+ width: 14rem;
+}
+.weui-picker-modal .picker-items {
+ display: -webkit-box;
+ display: -ms-flexbox;
+ display: -webkit-flex;
+ display: flex;
+ -webkit-box-pack: center;
+ -ms-flex-pack: center;
+ -webkit-justify-content: center;
+ justify-content: center;
+ width: 100%;
+ padding: 0;
+ text-align: right;
+ font-size: 1rem;
+ font-weight: normal;
+ -webkit-mask-box-image: -webkit-linear-gradient(bottom, transparent, transparent 5%, white 20%, white 80%, transparent 95%, transparent);
+ -webkit-mask-box-image: linear-gradient(to top, transparent, transparent 5%, white 20%, white 80%, transparent 95%, transparent);
+}
+.weui-picker-modal .bar + .picker-items {
+ height: 10.8rem;
+}
+.weui-picker-modal .picker-items-col {
+ overflow: hidden;
+ position: relative;
+ max-height: 100%;
+}
+.weui-picker-modal .picker-items-col.picker-items-col-left {
+ text-align: left;
+}
+.weui-picker-modal .picker-items-col.picker-items-col-center {
+ text-align: center;
+}
+.weui-picker-modal .picker-items-col.picker-items-col-right {
+ text-align: right;
+}
+.weui-picker-modal .picker-items-col.picker-items-col-divider {
+ color: #3d4145;
+ display: -webkit-box;
+ display: -ms-flexbox;
+ display: -webkit-flex;
+ display: flex;
+ -webkit-box-align: center;
+ -ms-flex-align: center;
+ -webkit-align-items: center;
+ align-items: center;
+}
+.weui-picker-modal .picker-items-col-wrapper {
+ -webkit-transition: 300ms;
+ transition: 300ms;
+ -webkit-transition-timing-function: ease-out;
+ transition-timing-function: ease-out;
+}
+.weui-picker-modal .picker-item {
+ height: 32px;
+ line-height: 32px;
+ padding: 0 10px;
+ white-space: nowrap;
+ position: relative;
+ overflow: hidden;
+ text-overflow: ellipsis;
+ color: #9b9b9b;
+ left: 0;
+ top: 0;
+ width: 100%;
+ box-sizing: border-box;
+ -webkit-transition: 300ms;
+ transition: 300ms;
+}
+.picker-items-col-absolute .weui-picker-modal .picker-item {
+ position: absolute;
+}
+.weui-picker-modal .picker-item.picker-item-far {
+ pointer-events: none;
+}
+.weui-picker-modal .picker-item.picker-selected {
+ color: #3d4145;
+ -webkit-transform: translate3d(0, 0, 0);
+ transform: translate3d(0, 0, 0);
+ -webkit-transform: rotateX(0deg);
+ transform: rotateX(0deg);
+}
+.weui-picker-modal .picker-center-highlight {
+ height: 32px;
+ box-sizing: border-box;
+ position: absolute;
+ left: 0;
+ width: 100%;
+ top: 50%;
+ margin-top: -16px;
+ pointer-events: none;
+}
+.weui-picker-modal .picker-center-highlight:before {
+ content: '';
+ position: absolute;
+ left: 0;
+ top: 0;
+ bottom: auto;
+ right: auto;
+ height: 1px;
+ width: 100%;
+ background-color: #D9D9D9;
+ display: block;
+ z-index: 15;
+ -webkit-transform-origin: 50% 0%;
+ transform-origin: 50% 0%;
+}
+@media only screen and (-webkit-min-device-pixel-ratio: 2) {
+ .weui-picker-modal .picker-center-highlight:before {
+ -webkit-transform: scaleY(0.5);
+ transform: scaleY(0.5);
+ }
+}
+@media only screen and (-webkit-min-device-pixel-ratio: 3) {
+ .weui-picker-modal .picker-center-highlight:before {
+ -webkit-transform: scaleY(0.33);
+ transform: scaleY(0.33);
+ }
+}
+.weui-picker-modal .picker-center-highlight:after {
+ content: '';
+ position: absolute;
+ left: 0;
+ bottom: 0;
+ right: auto;
+ top: auto;
+ height: 1px;
+ width: 100%;
+ background-color: #D9D9D9;
+ display: block;
+ z-index: 15;
+ -webkit-transform-origin: 50% 100%;
+ transform-origin: 50% 100%;
+}
+@media only screen and (-webkit-min-device-pixel-ratio: 2) {
+ .weui-picker-modal .picker-center-highlight:after {
+ -webkit-transform: scaleY(0.5);
+ transform: scaleY(0.5);
+ }
+}
+@media only screen and (-webkit-min-device-pixel-ratio: 3) {
+ .weui-picker-modal .picker-center-highlight:after {
+ -webkit-transform: scaleY(0.33);
+ transform: scaleY(0.33);
+ }
+}
+.weui-picker-modal .picker-3d .picker-items {
+ overflow: hidden;
+ -webkit-perspective: 1200px;
+ perspective: 1200px;
+}
+.weui-picker-modal .picker-3d .picker-items-col,
+.weui-picker-modal .picker-3d .picker-items-col-wrapper,
+.weui-picker-modal .picker-3d .picker-item {
+ -webkit-transform-style: preserve-3d;
+ transform-style: preserve-3d;
+}
+.weui-picker-modal .picker-3d .picker-items-col {
+ overflow: visible;
+}
+.weui-picker-modal .picker-3d .picker-item {
+ -webkit-transform-origin: center center -110px;
+ transform-origin: center center -110px;
+ -webkit-backface-visibility: hidden;
+ backface-visibility: hidden;
+ -webkit-transition-timing-function: ease-out;
+ transition-timing-function: ease-out;
+}
+.weui-picker-overlay,
+.weui-picker-container {
+ position: fixed;
+ bottom: 0;
+ left: 0;
+ right: 0;
+ height: 0;
+ width: 100%;
+ z-index: 1000;
+}
+.city-picker .picker-items-col {
+ -webkit-box-flex: 1;
+ -webkit-flex: 1;
+ -ms-flex: 1;
+ flex: 1;
+ max-width: 7rem;
+}
+.weui-picker-container .weui-cells {
+ margin: 0;
+ text-align: left;
+}
+.datetime-picker .picker-item {
+ text-overflow: initial;
+}
+.weui-select-modal {
+ height: auto;
+}
+.weui-select-modal .weui-cells {
+ margin: 0;
+ text-align: left;
+ overflow-y: auto;
+ overflow-x: hidden;
+ max-height: 16rem;
+}
+.weui-select-modal .weui-cells:after {
+ display: none;
+}
+/* === Calendar === */
+.weui-picker-calendar {
+ background: #fff;
+ height: 15rem;
+ width: 100%;
+ overflow: hidden;
+}
+.weui-picker-calendar .picker-modal-inner {
+ overflow: hidden;
+ height: 12.8rem;
+}
+.picker-calendar-week-days {
+ height: .9rem;
+ background: #f7f7f8;
+ display: -webkit-box;
+ display: -ms-flexbox;
+ display: -webkit-flex;
+ display: flex;
+ font-size: 11px;
+ box-sizing: border-box;
+ position: relative;
+}
+.picker-calendar-week-days:after {
+ content: '';
+ position: absolute;
+ left: 0;
+ bottom: 0;
+ right: auto;
+ top: auto;
+ height: 1px;
+ width: 100%;
+ background-color: #c4c4c4;
+ display: block;
+ z-index: 15;
+ -webkit-transform-origin: 50% 100%;
+ transform-origin: 50% 100%;
+}
+@media only screen and (-webkit-min-device-pixel-ratio: 2) {
+ .picker-calendar-week-days:after {
+ -webkit-transform: scaleY(0.5);
+ transform: scaleY(0.5);
+ }
+}
+@media only screen and (-webkit-min-device-pixel-ratio: 3) {
+ .picker-calendar-week-days:after {
+ -webkit-transform: scaleY(0.33);
+ transform: scaleY(0.33);
+ }
+}
+.picker-calendar-week-days .picker-calendar-week-day {
+ -webkit-flex-shrink: 1;
+ -ms-flex: 0 1 auto;
+ -webkit-flex-shrink: 1;
+ -ms-flex-negative: 1;
+ flex-shrink: 1;
+ width: 14.28571429%;
+ width: calc(100% / 7);
+ line-height: 17px;
+ text-align: center;
+}
+.picker-calendar-week-days + .picker-calendar-months {
+ height: 11.9rem;
+}
+.picker-calendar-months {
+ width: 100%;
+ height: 100%;
+ overflow: hidden;
+ position: relative;
+}
+.picker-calendar-months-wrapper {
+ position: relative;
+ width: 100%;
+ height: 100%;
+ -webkit-transition: 300ms;
+ transition: 300ms;
+}
+.picker-calendar-month {
+ display: -webkit-box;
+ display: -ms-flexbox;
+ display: -webkit-flex;
+ display: flex;
+ -webkit-box-orient: vertical;
+ -ms-flex-direction: column;
+ -webkit-flex-direction: column;
+ flex-direction: column;
+ width: 100%;
+ height: 100%;
+ position: absolute;
+ left: 0;
+ top: 0;
+}
+.picker-calendar-row {
+ height: 16.66666667%;
+ height: calc(100% / 6);
+ display: -webkit-box;
+ display: -ms-flexbox;
+ display: -webkit-flex;
+ display: flex;
+ -webkit-flex-shrink: 1;
+ -ms-flex: 0 1 auto;
+ -webkit-flex-shrink: 1;
+ -ms-flex-negative: 1;
+ flex-shrink: 1;
+ width: 100%;
+ position: relative;
+}
+.picker-calendar-row:after {
+ content: '';
+ position: absolute;
+ left: 0;
+ bottom: 0;
+ right: auto;
+ top: auto;
+ height: 1px;
+ width: 100%;
+ background-color: #ccc;
+ display: block;
+ z-index: 15;
+ -webkit-transform-origin: 50% 100%;
+ transform-origin: 50% 100%;
+}
+@media only screen and (-webkit-min-device-pixel-ratio: 2) {
+ .picker-calendar-row:after {
+ -webkit-transform: scaleY(0.5);
+ transform: scaleY(0.5);
+ }
+}
+@media only screen and (-webkit-min-device-pixel-ratio: 3) {
+ .picker-calendar-row:after {
+ -webkit-transform: scaleY(0.33);
+ transform: scaleY(0.33);
+ }
+}
+.weui-picker-modal .picker-calendar-row:last-child:after {
+ display: none;
+}
+.picker-calendar-day {
+ -webkit-flex-shrink: 1;
+ -ms-flex: 0 1 auto;
+ -webkit-flex-shrink: 1;
+ -ms-flex-negative: 1;
+ flex-shrink: 1;
+ display: -webkit-box;
+ display: -ms-flexbox;
+ display: -webkit-flex;
+ display: flex;
+ -webkit-box-pack: center;
+ -ms-flex-pack: center;
+ -webkit-justify-content: center;
+ justify-content: center;
+ -webkit-box-align: center;
+ -ms-flex-align: center;
+ -webkit-align-items: center;
+ align-items: center;
+ box-sizing: border-box;
+ width: 14.28571429%;
+ width: calc(100% / 7);
+ text-align: center;
+ color: #3d4145;
+ font-size: 15px;
+ cursor: pointer;
+}
+.picker-calendar-day.picker-calendar-day-prev,
+.picker-calendar-day.picker-calendar-day-next {
+ color: #ccc;
+}
+.picker-calendar-day.picker-calendar-day-disabled {
+ color: #d4d4d4;
+ cursor: auto;
+}
+.picker-calendar-day.picker-calendar-day-today span {
+ background: #e3e3e3;
+}
+.picker-calendar-day.picker-calendar-day-selected span {
+ background: #04BE02;
+ color: #fff;
+}
+.picker-calendar-day span {
+ display: inline-block;
+ border-radius: 100%;
+ width: 30px;
+ height: 30px;
+ line-height: 30px;
+}
+.picker-calendar-month-picker,
+.picker-calendar-year-picker {
+ display: -webkit-box;
+ display: -ms-flexbox;
+ display: -webkit-flex;
+ display: flex;
+ -webkit-box-align: center;
+ -ms-flex-align: center;
+ -webkit-align-items: center;
+ align-items: center;
+ -webkit-box-pack: justify;
+ -ms-flex-pack: justify;
+ -webkit-justify-content: space-between;
+ justify-content: space-between;
+ width: 50%;
+ max-width: 200px;
+ -webkit-flex-shrink: 10;
+ -ms-flex: 0 10 auto;
+ -webkit-flex-shrink: 10;
+ -ms-flex-negative: 10;
+ flex-shrink: 10;
+}
+.picker-calendar-month-picker a.icon-only,
+.picker-calendar-year-picker a.icon-only {
+ min-width: 36px;
+}
+.picker-calendar-month-picker span,
+.picker-calendar-year-picker span {
+ -webkit-flex-shrink: 1;
+ -ms-flex: 0 1 auto;
+ -webkit-flex-shrink: 1;
+ -ms-flex-negative: 1;
+ flex-shrink: 1;
+ position: relative;
+ overflow: hidden;
+ text-overflow: ellipsis;
+}
+.popover .picker-calendar .picker-calendar-week-days,
+.picker-calendar.picker-modal-inline .picker-calendar-week-days {
+ background: none;
+}
+.popover .picker-calendar .toolbar:before,
+.picker-calendar.picker-modal-inline .toolbar:before,
+.popover .picker-calendar .picker-calendar-week-days:before,
+.picker-calendar.picker-modal-inline .picker-calendar-week-days:before {
+ display: none;
+}
+.popover .picker-calendar .toolbar:after,
+.picker-calendar.picker-modal-inline .toolbar:after,
+.popover .picker-calendar .picker-calendar-week-days:after,
+.picker-calendar.picker-modal-inline .picker-calendar-week-days:after {
+ display: none;
+}
+.popover .picker-calendar .toolbar ~ .picker-modal-inner .picker-calendar-months:before,
+.picker-calendar.picker-modal-inline .toolbar ~ .picker-modal-inner .picker-calendar-months:before,
+.popover .picker-calendar .picker-calendar-week-days ~ .picker-calendar-months:before,
+.picker-calendar.picker-modal-inline .picker-calendar-week-days ~ .picker-calendar-months:before {
+ content: '';
+ position: absolute;
+ left: 0;
+ top: 0;
+ bottom: auto;
+ right: auto;
+ height: 1px;
+ width: 100%;
+ background-color: #c4c4c4;
+ display: block;
+ z-index: 15;
+ -webkit-transform-origin: 50% 0%;
+ transform-origin: 50% 0%;
+}
+@media only screen and (-webkit-min-device-pixel-ratio: 2) {
+ .popover .picker-calendar .toolbar ~ .picker-modal-inner .picker-calendar-months:before,
+ .picker-calendar.picker-modal-inline .toolbar ~ .picker-modal-inner .picker-calendar-months:before,
+ .popover .picker-calendar .picker-calendar-week-days ~ .picker-calendar-months:before,
+ .picker-calendar.picker-modal-inline .picker-calendar-week-days ~ .picker-calendar-months:before {
+ -webkit-transform: scaleY(0.5);
+ transform: scaleY(0.5);
+ }
+}
+@media only screen and (-webkit-min-device-pixel-ratio: 3) {
+ .popover .picker-calendar .toolbar ~ .picker-modal-inner .picker-calendar-months:before,
+ .picker-calendar.picker-modal-inline .toolbar ~ .picker-modal-inner .picker-calendar-months:before,
+ .popover .picker-calendar .picker-calendar-week-days ~ .picker-calendar-months:before,
+ .picker-calendar.picker-modal-inline .picker-calendar-week-days ~ .picker-calendar-months:before {
+ -webkit-transform: scaleY(0.33);
+ transform: scaleY(0.33);
+ }
+}
+.picker-calendar-month-picker,
+.picker-calendar-year-picker {
+ display: block;
+ line-height: 2.2rem;
+ -webkit-box-flex: 1;
+ -webkit-flex: 1;
+ -ms-flex: 1;
+ flex: 1;
+}
+.picker-calendar-month-picker a.icon-only,
+.picker-calendar-year-picker a.icon-only {
+ float: left;
+ width: 25%;
+ height: 2.2rem;
+ line-height: 2rem;
+}
+.picker-calendar-month-picker .current-month-value,
+.picker-calendar-year-picker .current-month-value,
+.picker-calendar-month-picker .current-year-value,
+.picker-calendar-year-picker .current-year-value {
+ float: left;
+ width: 50%;
+ height: 2.2rem;
+}
+i.icon {
+ display: inline-block;
+ vertical-align: middle;
+ background-size: 100% auto;
+ background-position: center;
+ background-repeat: no-repeat;
+ font-style: normal;
+ position: relative;
+}
+i.icon.icon-next,
+i.icon.icon-prev {
+ width: 0.75rem;
+ height: 0.75rem;
+}
+i.icon.icon-next {
+ background-image: url("data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D'http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg'%20viewBox%3D'0%200%2015%2015'%3E%3Cg%3E%3Cpath%20fill%3D'%2304BE02'%20d%3D'M1%2C1.6l11.8%2C5.8L1%2C13.4V1.6%20M0%2C0v15l15-7.6L0%2C0L0%2C0z'%2F%3E%3C%2Fg%3E%3C%2Fsvg%3E");
+}
+i.icon.icon-prev {
+ background-image: url("data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D'http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg'%20viewBox%3D'0%200%2015%2015'%3E%3Cg%3E%3Cpath%20fill%3D'%2304BE02'%20d%3D'M14%2C1.6v11.8L2.2%2C7.6L14%2C1.6%20M15%2C0L0%2C7.6L15%2C15V0L15%2C0z'%2F%3E%3C%2Fg%3E%3C%2Fsvg%3E");
+}
+/**
+ * Swiper 3.3.1
+ * Most modern mobile touch slider and framework with hardware accelerated transitions
+ *
+ * http://www.idangero.us/swiper/
+ *
+ * Copyright 2016, Vladimir Kharlampidi
+ * The iDangero.us
+ * http://www.idangero.us/
+ *
+ * Licensed under MIT
+ *
+ * Released on: February 7, 2016
+ */
+.swiper-container {
+ margin: 0 auto;
+ position: relative;
+ overflow: hidden;
+ /* Fix of Webkit flickering */
+ z-index: 1;
+}
+.swiper-container-no-flexbox .swiper-slide {
+ float: left;
+}
+.swiper-container-vertical > .swiper-wrapper {
+ -webkit-box-orient: vertical;
+ -ms-flex-direction: column;
+ -webkit-flex-direction: column;
+ flex-direction: column;
+}
+.swiper-wrapper {
+ position: relative;
+ width: 100%;
+ height: 100%;
+ z-index: 1;
+ display: -webkit-box;
+ display: -ms-flexbox;
+ display: -webkit-flex;
+ display: flex;
+ -webkit-transition-property: -webkit-transform;
+ transition-property: -webkit-transform;
+ transition-property: transform;
+ transition-property: transform, -webkit-transform;
+ box-sizing: content-box;
+}
+.swiper-container-android .swiper-slide,
+.swiper-wrapper {
+ -webkit-transform: translate3d(0px, 0, 0);
+ transform: translate3d(0px, 0, 0);
+}
+.swiper-container-multirow > .swiper-wrapper {
+ -webkit-box-lines: multiple;
+ -moz-box-lines: multiple;
+ -ms-flex-wrap: wrap;
+ -webkit-flex-wrap: wrap;
+ flex-wrap: wrap;
+}
+.swiper-container-free-mode > .swiper-wrapper {
+ -webkit-transition-timing-function: ease-out;
+ transition-timing-function: ease-out;
+ margin: 0 auto;
+}
+.swiper-slide {
+ -webkit-flex-shrink: 0;
+ -ms-flex: 0 0 auto;
+ -webkit-flex-shrink: 0;
+ -ms-flex-negative: 0;
+ flex-shrink: 0;
+ width: 100%;
+ height: 100%;
+ position: relative;
+}
+/* Auto Height */
+.swiper-container-autoheight,
+.swiper-container-autoheight .swiper-slide {
+ height: auto;
+}
+.swiper-container-autoheight .swiper-wrapper {
+ -webkit-box-align: start;
+ -ms-flex-align: start;
+ -webkit-align-items: flex-start;
+ align-items: flex-start;
+ -webkit-transition-property: -webkit-transform, height;
+ -webkit-transition-property: height, -webkit-transform;
+ transition-property: height, -webkit-transform;
+ transition-property: transform, height;
+ transition-property: transform, height, -webkit-transform;
+}
+/* a11y */
+.swiper-container .swiper-notification {
+ position: absolute;
+ left: 0;
+ top: 0;
+ pointer-events: none;
+ opacity: 0;
+ z-index: -1000;
+}
+/* IE10 Windows Phone 8 Fixes */
+.swiper-wp8-horizontal {
+ -ms-touch-action: pan-y;
+ touch-action: pan-y;
+}
+.swiper-wp8-vertical {
+ -ms-touch-action: pan-x;
+ touch-action: pan-x;
+}
+/* Arrows */
+.swiper-button-prev,
+.swiper-button-next {
+ position: absolute;
+ top: 50%;
+ width: 27px;
+ height: 44px;
+ margin-top: -22px;
+ z-index: 10;
+ cursor: pointer;
+ background-size: 27px 44px;
+ background-position: center;
+ background-repeat: no-repeat;
+}
+.swiper-button-prev.swiper-button-disabled,
+.swiper-button-next.swiper-button-disabled {
+ opacity: 0.35;
+ cursor: auto;
+ pointer-events: none;
+}
+.swiper-button-prev,
+.swiper-container-rtl .swiper-button-next {
+ background-image: url("data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D'http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg'%20viewBox%3D'0%200%2027%2044'%3E%3Cpath%20d%3D'M0%2C22L22%2C0l2.1%2C2.1L4.2%2C22l19.9%2C19.9L22%2C44L0%2C22L0%2C22L0%2C22z'%20fill%3D'%23007aff'%2F%3E%3C%2Fsvg%3E");
+ left: 10px;
+ right: auto;
+}
+.swiper-button-prev.swiper-button-black,
+.swiper-container-rtl .swiper-button-next.swiper-button-black {
+ background-image: url("data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D'http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg'%20viewBox%3D'0%200%2027%2044'%3E%3Cpath%20d%3D'M0%2C22L22%2C0l2.1%2C2.1L4.2%2C22l19.9%2C19.9L22%2C44L0%2C22L0%2C22L0%2C22z'%20fill%3D'%23000000'%2F%3E%3C%2Fsvg%3E");
+}
+.swiper-button-prev.swiper-button-white,
+.swiper-container-rtl .swiper-button-next.swiper-button-white {
+ background-image: url("data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D'http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg'%20viewBox%3D'0%200%2027%2044'%3E%3Cpath%20d%3D'M0%2C22L22%2C0l2.1%2C2.1L4.2%2C22l19.9%2C19.9L22%2C44L0%2C22L0%2C22L0%2C22z'%20fill%3D'%23ffffff'%2F%3E%3C%2Fsvg%3E");
+}
+.swiper-button-next,
+.swiper-container-rtl .swiper-button-prev {
+ background-image: url("data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D'http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg'%20viewBox%3D'0%200%2027%2044'%3E%3Cpath%20d%3D'M27%2C22L27%2C22L5%2C44l-2.1-2.1L22.8%2C22L2.9%2C2.1L5%2C0L27%2C22L27%2C22z'%20fill%3D'%23007aff'%2F%3E%3C%2Fsvg%3E");
+ right: 10px;
+ left: auto;
+}
+.swiper-button-next.swiper-button-black,
+.swiper-container-rtl .swiper-button-prev.swiper-button-black {
+ background-image: url("data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D'http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg'%20viewBox%3D'0%200%2027%2044'%3E%3Cpath%20d%3D'M27%2C22L27%2C22L5%2C44l-2.1-2.1L22.8%2C22L2.9%2C2.1L5%2C0L27%2C22L27%2C22z'%20fill%3D'%23000000'%2F%3E%3C%2Fsvg%3E");
+}
+.swiper-button-next.swiper-button-white,
+.swiper-container-rtl .swiper-button-prev.swiper-button-white {
+ background-image: url("data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D'http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg'%20viewBox%3D'0%200%2027%2044'%3E%3Cpath%20d%3D'M27%2C22L27%2C22L5%2C44l-2.1-2.1L22.8%2C22L2.9%2C2.1L5%2C0L27%2C22L27%2C22z'%20fill%3D'%23ffffff'%2F%3E%3C%2Fsvg%3E");
+}
+/* Pagination Styles */
+.swiper-pagination {
+ position: absolute;
+ text-align: center;
+ -webkit-transition: 300ms;
+ transition: 300ms;
+ -webkit-transform: translate3d(0, 0, 0);
+ transform: translate3d(0, 0, 0);
+ z-index: 10;
+}
+.swiper-pagination.swiper-pagination-hidden {
+ opacity: 0;
+}
+/* Common Styles */
+.swiper-pagination-fraction,
+.swiper-pagination-custom,
+.swiper-container-horizontal > .swiper-pagination-bullets {
+ bottom: 10px;
+ left: 0;
+ width: 100%;
+}
+/* Bullets */
+.swiper-pagination-bullet {
+ width: 8px;
+ height: 8px;
+ display: inline-block;
+ border-radius: 100%;
+ background: #000;
+ opacity: 0.2;
+}
+button.swiper-pagination-bullet {
+ border: none;
+ margin: 0;
+ padding: 0;
+ box-shadow: none;
+ -moz-appearance: none;
+ -ms-appearance: none;
+ -webkit-appearance: none;
+ appearance: none;
+}
+.swiper-pagination-clickable .swiper-pagination-bullet {
+ cursor: pointer;
+}
+.swiper-pagination-white .swiper-pagination-bullet {
+ background: #fff;
+}
+.swiper-pagination-bullet-active {
+ opacity: 1;
+ background: #04BE02;
+}
+.swiper-pagination-white .swiper-pagination-bullet-active {
+ background: #fff;
+}
+.swiper-pagination-black .swiper-pagination-bullet-active {
+ background: #000;
+}
+.swiper-container-vertical > .swiper-pagination-bullets {
+ right: 10px;
+ top: 50%;
+ -webkit-transform: translate3d(0px, -50%, 0);
+ transform: translate3d(0px, -50%, 0);
+}
+.swiper-container-vertical > .swiper-pagination-bullets .swiper-pagination-bullet {
+ margin: 5px 0;
+ display: block;
+}
+.swiper-container-horizontal > .swiper-pagination-bullets .swiper-pagination-bullet {
+ margin: 0 5px;
+}
+/* Progress */
+.swiper-pagination-progress {
+ background: rgba(0, 0, 0, 0.25);
+ position: absolute;
+}
+.swiper-pagination-progress .swiper-pagination-progressbar {
+ background: #007aff;
+ position: absolute;
+ left: 0;
+ top: 0;
+ width: 100%;
+ height: 100%;
+ -webkit-transform: scale(0);
+ transform: scale(0);
+ -webkit-transform-origin: left top;
+ transform-origin: left top;
+}
+.swiper-container-rtl .swiper-pagination-progress .swiper-pagination-progressbar {
+ -webkit-transform-origin: right top;
+ transform-origin: right top;
+}
+.swiper-container-horizontal > .swiper-pagination-progress {
+ width: 100%;
+ height: 4px;
+ left: 0;
+ top: 0;
+}
+.swiper-container-vertical > .swiper-pagination-progress {
+ width: 4px;
+ height: 100%;
+ left: 0;
+ top: 0;
+}
+.swiper-pagination-progress.swiper-pagination-white {
+ background: rgba(255, 255, 255, 0.5);
+}
+.swiper-pagination-progress.swiper-pagination-white .swiper-pagination-progressbar {
+ background: #fff;
+}
+.swiper-pagination-progress.swiper-pagination-black .swiper-pagination-progressbar {
+ background: #000;
+}
+/* 3D Container */
+.swiper-container-3d {
+ -webkit-perspective: 1200px;
+ -o-perspective: 1200px;
+ perspective: 1200px;
+}
+.swiper-container-3d .swiper-wrapper,
+.swiper-container-3d .swiper-slide,
+.swiper-container-3d .swiper-slide-shadow-left,
+.swiper-container-3d .swiper-slide-shadow-right,
+.swiper-container-3d .swiper-slide-shadow-top,
+.swiper-container-3d .swiper-slide-shadow-bottom,
+.swiper-container-3d .swiper-cube-shadow {
+ -webkit-transform-style: preserve-3d;
+ transform-style: preserve-3d;
+}
+.swiper-container-3d .swiper-slide-shadow-left,
+.swiper-container-3d .swiper-slide-shadow-right,
+.swiper-container-3d .swiper-slide-shadow-top,
+.swiper-container-3d .swiper-slide-shadow-bottom {
+ position: absolute;
+ left: 0;
+ top: 0;
+ width: 100%;
+ height: 100%;
+ pointer-events: none;
+ z-index: 10;
+}
+.swiper-container-3d .swiper-slide-shadow-left {
+ background-image: -webkit-gradient(linear, left top, right top, from(rgba(0, 0, 0, 0.5)), to(rgba(0, 0, 0, 0)));
+ /* Safari 4+, Chrome */
+ background-image: -webkit-linear-gradient(right, rgba(0, 0, 0, 0.5), rgba(0, 0, 0, 0));
+ /* Chrome 10+, Safari 5.1+, iOS 5+ */
+ /* Firefox 3.6-15 */
+ /* Opera 11.10-12.00 */
+ background-image: linear-gradient(to left, rgba(0, 0, 0, 0.5), rgba(0, 0, 0, 0));
+ /* Firefox 16+, IE10, Opera 12.50+ */
+}
+.swiper-container-3d .swiper-slide-shadow-right {
+ background-image: -webkit-gradient(linear, right top, left top, from(rgba(0, 0, 0, 0.5)), to(rgba(0, 0, 0, 0)));
+ /* Safari 4+, Chrome */
+ background-image: -webkit-linear-gradient(left, rgba(0, 0, 0, 0.5), rgba(0, 0, 0, 0));
+ /* Chrome 10+, Safari 5.1+, iOS 5+ */
+ /* Firefox 3.6-15 */
+ /* Opera 11.10-12.00 */
+ background-image: linear-gradient(to right, rgba(0, 0, 0, 0.5), rgba(0, 0, 0, 0));
+ /* Firefox 16+, IE10, Opera 12.50+ */
+}
+.swiper-container-3d .swiper-slide-shadow-top {
+ background-image: -webkit-gradient(linear, left top, left bottom, from(rgba(0, 0, 0, 0.5)), to(rgba(0, 0, 0, 0)));
+ /* Safari 4+, Chrome */
+ background-image: -webkit-linear-gradient(bottom, rgba(0, 0, 0, 0.5), rgba(0, 0, 0, 0));
+ /* Chrome 10+, Safari 5.1+, iOS 5+ */
+ /* Firefox 3.6-15 */
+ /* Opera 11.10-12.00 */
+ background-image: linear-gradient(to top, rgba(0, 0, 0, 0.5), rgba(0, 0, 0, 0));
+ /* Firefox 16+, IE10, Opera 12.50+ */
+}
+.swiper-container-3d .swiper-slide-shadow-bottom {
+ background-image: -webkit-gradient(linear, left bottom, left top, from(rgba(0, 0, 0, 0.5)), to(rgba(0, 0, 0, 0)));
+ /* Safari 4+, Chrome */
+ background-image: -webkit-linear-gradient(top, rgba(0, 0, 0, 0.5), rgba(0, 0, 0, 0));
+ /* Chrome 10+, Safari 5.1+, iOS 5+ */
+ /* Firefox 3.6-15 */
+ /* Opera 11.10-12.00 */
+ background-image: linear-gradient(to bottom, rgba(0, 0, 0, 0.5), rgba(0, 0, 0, 0));
+ /* Firefox 16+, IE10, Opera 12.50+ */
+}
+/* Coverflow */
+.swiper-container-coverflow .swiper-wrapper,
+.swiper-container-flip .swiper-wrapper {
+ /* Windows 8 IE 10 fix */
+ -ms-perspective: 1200px;
+}
+/* Cube + Flip */
+.swiper-container-cube,
+.swiper-container-flip {
+ overflow: visible;
+}
+.swiper-container-cube .swiper-slide,
+.swiper-container-flip .swiper-slide {
+ pointer-events: none;
+ -webkit-backface-visibility: hidden;
+ backface-visibility: hidden;
+ z-index: 1;
+}
+.swiper-container-cube .swiper-slide .swiper-slide,
+.swiper-container-flip .swiper-slide .swiper-slide {
+ pointer-events: none;
+}
+.swiper-container-cube .swiper-slide-active,
+.swiper-container-flip .swiper-slide-active,
+.swiper-container-cube .swiper-slide-active .swiper-slide-active,
+.swiper-container-flip .swiper-slide-active .swiper-slide-active {
+ pointer-events: auto;
+}
+.swiper-container-cube .swiper-slide-shadow-top,
+.swiper-container-flip .swiper-slide-shadow-top,
+.swiper-container-cube .swiper-slide-shadow-bottom,
+.swiper-container-flip .swiper-slide-shadow-bottom,
+.swiper-container-cube .swiper-slide-shadow-left,
+.swiper-container-flip .swiper-slide-shadow-left,
+.swiper-container-cube .swiper-slide-shadow-right,
+.swiper-container-flip .swiper-slide-shadow-right {
+ z-index: 0;
+ -webkit-backface-visibility: hidden;
+ backface-visibility: hidden;
+}
+/* Cube */
+.swiper-container-cube .swiper-slide {
+ visibility: hidden;
+ -webkit-transform-origin: 0 0;
+ transform-origin: 0 0;
+ width: 100%;
+ height: 100%;
+}
+.swiper-container-cube.swiper-container-rtl .swiper-slide {
+ -webkit-transform-origin: 100% 0;
+ transform-origin: 100% 0;
+}
+.swiper-container-cube .swiper-slide-active,
+.swiper-container-cube .swiper-slide-next,
+.swiper-container-cube .swiper-slide-prev,
+.swiper-container-cube .swiper-slide-next + .swiper-slide {
+ pointer-events: auto;
+ visibility: visible;
+}
+.swiper-container-cube .swiper-cube-shadow {
+ position: absolute;
+ left: 0;
+ bottom: 0px;
+ width: 100%;
+ height: 100%;
+ background: #000;
+ opacity: 0.6;
+ -webkit-filter: blur(50px);
+ filter: blur(50px);
+ z-index: 0;
+}
+/* Fade */
+.swiper-container-fade.swiper-container-free-mode .swiper-slide {
+ -webkit-transition-timing-function: ease-out;
+ transition-timing-function: ease-out;
+}
+.swiper-container-fade .swiper-slide {
+ pointer-events: none;
+ -webkit-transition-property: opacity;
+ transition-property: opacity;
+}
+.swiper-container-fade .swiper-slide .swiper-slide {
+ pointer-events: none;
+}
+.swiper-container-fade .swiper-slide-active,
+.swiper-container-fade .swiper-slide-active .swiper-slide-active {
+ pointer-events: auto;
+}
+/* Scrollbar */
+.swiper-scrollbar {
+ border-radius: 10px;
+ position: relative;
+ -ms-touch-action: none;
+ background: rgba(0, 0, 0, 0.1);
+}
+.swiper-container-horizontal > .swiper-scrollbar {
+ position: absolute;
+ left: 1%;
+ bottom: 3px;
+ z-index: 50;
+ height: 5px;
+ width: 98%;
+}
+.swiper-container-vertical > .swiper-scrollbar {
+ position: absolute;
+ right: 3px;
+ top: 1%;
+ z-index: 50;
+ width: 5px;
+ height: 98%;
+}
+.swiper-scrollbar-drag {
+ height: 100%;
+ width: 100%;
+ position: relative;
+ background: rgba(0, 0, 0, 0.5);
+ border-radius: 10px;
+ left: 0;
+ top: 0;
+}
+.swiper-scrollbar-cursor-drag {
+ cursor: move;
+}
+/* Preloader */
+.swiper-lazy-preloader {
+ width: 42px;
+ height: 42px;
+ position: absolute;
+ left: 50%;
+ top: 50%;
+ margin-left: -21px;
+ margin-top: -21px;
+ z-index: 10;
+ -webkit-transform-origin: 50%;
+ transform-origin: 50%;
+ -webkit-animation: swiper-preloader-spin 1s steps(12, end) infinite;
+ animation: swiper-preloader-spin 1s steps(12, end) infinite;
+}
+.swiper-lazy-preloader:after {
+ display: block;
+ content: "";
+ width: 100%;
+ height: 100%;
+ background-image: url("data:image/svg+xml;charset=utf-8,%3Csvg%20viewBox%3D'0%200%20120%20120'%20xmlns%3D'http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg'%20xmlns%3Axlink%3D'http%3A%2F%2Fwww.w3.org%2F1999%2Fxlink'%3E%3Cdefs%3E%3Cline%20id%3D'l'%20x1%3D'60'%20x2%3D'60'%20y1%3D'7'%20y2%3D'27'%20stroke%3D'%236c6c6c'%20stroke-width%3D'11'%20stroke-linecap%3D'round'%2F%3E%3C%2Fdefs%3E%3Cg%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.27'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.27'%20transform%3D'rotate(30%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.27'%20transform%3D'rotate(60%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.27'%20transform%3D'rotate(90%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.27'%20transform%3D'rotate(120%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.27'%20transform%3D'rotate(150%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.37'%20transform%3D'rotate(180%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.46'%20transform%3D'rotate(210%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.56'%20transform%3D'rotate(240%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.66'%20transform%3D'rotate(270%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.75'%20transform%3D'rotate(300%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.85'%20transform%3D'rotate(330%2060%2C60)'%2F%3E%3C%2Fg%3E%3C%2Fsvg%3E");
+ background-position: 50%;
+ background-size: 100%;
+ background-repeat: no-repeat;
+}
+.swiper-lazy-preloader-white:after {
+ background-image: url("data:image/svg+xml;charset=utf-8,%3Csvg%20viewBox%3D'0%200%20120%20120'%20xmlns%3D'http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg'%20xmlns%3Axlink%3D'http%3A%2F%2Fwww.w3.org%2F1999%2Fxlink'%3E%3Cdefs%3E%3Cline%20id%3D'l'%20x1%3D'60'%20x2%3D'60'%20y1%3D'7'%20y2%3D'27'%20stroke%3D'%23fff'%20stroke-width%3D'11'%20stroke-linecap%3D'round'%2F%3E%3C%2Fdefs%3E%3Cg%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.27'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.27'%20transform%3D'rotate(30%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.27'%20transform%3D'rotate(60%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.27'%20transform%3D'rotate(90%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.27'%20transform%3D'rotate(120%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.27'%20transform%3D'rotate(150%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.37'%20transform%3D'rotate(180%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.46'%20transform%3D'rotate(210%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.56'%20transform%3D'rotate(240%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.66'%20transform%3D'rotate(270%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.75'%20transform%3D'rotate(300%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.85'%20transform%3D'rotate(330%2060%2C60)'%2F%3E%3C%2Fg%3E%3C%2Fsvg%3E");
+}
+@-webkit-keyframes swiper-preloader-spin {
+ 100% {
+ -webkit-transform: rotate(360deg);
+ }
+}
+@keyframes swiper-preloader-spin {
+ 100% {
+ -webkit-transform: rotate(360deg);
+ transform: rotate(360deg);
+ }
+}
+.weui-actionsheet {
+ z-index: 10000;
+}
+.weui-popup__overlay,
+.weui-popup__container {
+ position: fixed;
+ bottom: 0;
+ left: 0;
+ right: 0;
+ height: 0;
+ width: 100%;
+ height: 100%;
+ z-index: 10;
+}
+.weui-popup__overlay {
+ background-color: rgba(0, 0, 0, 0.6);
+ opacity: 0;
+ -webkit-transition: opacity .3s;
+ transition: opacity .3s;
+}
+.weui-popup__container {
+ display: none;
+}
+.weui-popup__container.weui-popup__container--visible {
+ display: block;
+}
+.weui-popup__container .weui-cells {
+ margin: 0;
+ text-align: left;
+}
+.weui-popup__modal {
+ width: 100%;
+ position: absolute;
+ z-index: 100;
+ bottom: 0;
+ border-radius: 0;
+ opacity: 0.6;
+ color: #3d4145;
+ -webkit-transition-duration: .3s;
+ transition-duration: .3s;
+ height: 100%;
+ background: #EFEFF4;
+ -webkit-transform: translate3d(0, 100%, 0);
+ transform: translate3d(0, 100%, 0);
+ -webkit-transition-property: opacity, -webkit-transform;
+ transition-property: opacity, -webkit-transform;
+ transition-property: transform, opacity;
+ transition-property: transform, opacity, -webkit-transform;
+ overflow-x: hidden;
+ overflow-y: auto;
+}
+.popup-bottom .weui-popup__modal {
+ height: auto;
+}
+.weui-popup__modal .toolbar {
+ position: absolute;
+ left: 0;
+ top: 0;
+ right: 0;
+ z-index: 1;
+}
+.weui-popup__modal .modal-content {
+ height: 100%;
+ padding-top: 2.2rem;
+ overflow: auto;
+ box-sizing: border-box;
+}
+.weui-popup__container--visible .weui-popup__overlay {
+ opacity: 1;
+}
+.weui-popup__container--visible .weui-popup__modal {
+ opacity: 1;
+ -webkit-transform: translate3d(0, 0, 0);
+ transform: translate3d(0, 0, 0);
+}
+.weui-notification {
+ position: fixed;
+ width: 100%;
+ min-height: 3.4rem;
+ top: -2rem;
+ padding-top: 2rem;
+ left: 0;
+ right: 0;
+ z-index: 9999;
+ background-color: rgba(0, 0, 0, 0.85);
+ color: white;
+ font-size: .65rem;
+ -webkit-transform: translate3d(0, -100%, 0);
+ transform: translate3d(0, -100%, 0);
+ -webkit-transition: .4s;
+ transition: .4s;
+}
+.weui-notification.weui-notification--in {
+ -webkit-transform: translate3d(0, 0, 0);
+ transform: translate3d(0, 0, 0);
+}
+.weui-notification.weui-notification--touching {
+ -webkit-transition-duration: 0s;
+ transition-duration: 0s;
+}
+.weui-notification .weui-notification__inner {
+ padding: .4rem .6rem 1rem .6rem;
+ display: -webkit-box;
+ display: -ms-flexbox;
+ display: -webkit-flex;
+ display: flex;
+ -webkit-box-align: start;
+ -ms-flex-align: start;
+ -webkit-align-items: flex-start;
+ align-items: flex-start;
+}
+.weui-notification .weui-notification__content {
+ width: 100%;
+ margin: 0rem .4rem;
+}
+.weui-notification .weui-notification__title {
+ font-weight: bold;
+}
+.weui-notification .weui-notification__text {
+ line-height: 1;
+}
+.weui-notification .weui-notification__media {
+ height: 1rem;
+ width: 1rem;
+}
+.weui-notification .weui-notification__media img {
+ width: 100%;
+}
+.weui-notification .weui-notification__handle-bar {
+ position: absolute;
+ bottom: .2rem;
+ left: 50%;
+ -webkit-transform: translate3d(-50%, 0, 0);
+ transform: translate3d(-50%, 0, 0);
+ width: 2rem;
+ height: .3rem;
+ border-radius: .15rem;
+ background: white;
+ opacity: .5;
+}
+.weui-photo-browser-modal {
+ position: fixed;
+ top: 0;
+ left: 0;
+ right: 0;
+ bottom: 0;
+ background: black;
+ display: none;
+ opacity: 0;
+ -webkit-transition: opacity .3s;
+ transition: opacity .3s;
+}
+.weui-photo-browser-modal.weui-photo-browser-modal-visible {
+ opacity: 1;
+}
+.weui-photo-browser-modal .swiper-container {
+ height: 100%;
+ -webkit-transform: scale(0.2);
+ transform: scale(0.2);
+ -webkit-transition: -webkit-transform .5s;
+ transition: -webkit-transform .5s;
+ transition: transform .5s;
+ transition: transform .5s, -webkit-transform .5s;
+}
+.weui-photo-browser-modal .swiper-container .swiper-pagination-bullet {
+ background: white;
+ visibility: hidden;
+}
+.weui-photo-browser-modal .swiper-container.swiper-container-visible {
+ -webkit-transform: scale(1);
+ transform: scale(1);
+}
+.weui-photo-browser-modal .swiper-container.swiper-container-visible .swiper-pagination-bullet {
+ visibility: visible;
+ -webkit-transition-property: visibility;
+ transition-property: visibility;
+ -webkit-transition-delay: .5s;
+ transition-delay: .5s;
+}
+.weui-photo-browser-modal .swiper-container .swiper-pagination {
+ bottom: 10px;
+ left: 0;
+ width: 100%;
+}
+.weui-photo-browser-modal .photo-container {
+ height: 100%;
+ display: -webkit-box;
+ display: -webkit-flex;
+ display: -ms-flexbox;
+ display: flex;
+ -webkit-box-align: center;
+ -webkit-align-items: center;
+ -ms-flex-align: center;
+ align-items: center;
+ overflow: hidden;
+}
+.weui-photo-browser-modal .photo-container img {
+ max-width: 100%;
+ margin-top: -30px;
+}
+.weui-photo-browser-modal .caption {
+ position: absolute;
+ bottom: 40px;
+ left: 0;
+ right: 0;
+ color: white;
+ text-align: center;
+ padding: 0 12px;
+ min-height: 3rem;
+ font-size: 14px;
+ z-index: 10;
+ -webkit-transition: opacity .3s;
+ transition: opacity .3s;
+ -webkit-transition-delay: .5s;
+ transition-delay: .5s;
+ opacity: 0;
+}
+.weui-photo-browser-modal .caption .caption-item {
+ display: none;
+ opacity: 0;
+ -webkit-transition: opacity .15s;
+ transition: opacity .15s;
+}
+.weui-photo-browser-modal .caption .caption-item.active {
+ display: block;
+ opacity: 1;
+}
+.weui-photo-browser-modal .swiper-container-visible .caption {
+ opacity: 1;
+}
+.color-primary {
+ color: #04BE02;
+}
+.color-danger,
+.color-error {
+ color: #f6383a;
+}
+.color-warning {
+ color: #f60;
+}
+.color-success {
+ color: #4cd964;
+}
+.bg-primary,
+.bg-success,
+.bg-danger,
+.bg-error,
+.bg-warning {
+ color: white;
+}
+.bg-primary {
+ background-color: #04BE02;
+}
+.bg-danger,
+.bg-error {
+ background-color: #f6383a;
+}
+.bg-warning {
+ background-color: #f60;
+}
+.bg-success {
+ background-color: #4cd964;
+}
+.weui-toptips {
+ z-index: 100;
+ opacity: 0;
+ -webkit-transition: opacity .3s;
+ transition: opacity .3s;
+}
+.weui-toptips.weui-toptips_visible {
+ opacity: 1;
+}
+.weui-icon_toast {
+ font-size: 55px;
+ color: white;
+ margin-bottom: 6px;
+}
+.weui-toast--forbidden .weui-icon_toast {
+ color: #f6383a;
+}
+.weui-toast--text {
+ min-height: initial;
+ font-size: 18px;
+ padding: 8px 16px;
+ width: auto;
+ top: 40%;
+}
+.weui-toast--text .weui-icon_toast {
+ display: none;
+}
+.weui-count {
+ display: inline-block;
+ height: 25px;
+ line-height: 25px;
+}
+.weui-count .weui-count__btn {
+ height: 21px;
+ width: 21px;
+ line-height: 21px;
+ display: inline-block;
+ position: relative;
+ border: 1px solid #04BE02;
+ border-radius: 50%;
+ vertical-align: -6px;
+}
+.weui-count .weui-count__btn:after,
+.weui-count .weui-count__btn:before {
+ content: " ";
+ position: absolute;
+ height: 1px;
+ width: 11px;
+ background-color: #04BE02;
+ left: 50%;
+ top: 50%;
+ margin-left: -5.5px;
+}
+.weui-count .weui-count__btn:after {
+ height: 11px;
+ width: 1px;
+ margin-top: -5.5px;
+ margin-left: -1px;
+}
+.weui-count .weui-count__decrease:after {
+ display: none;
+}
+.weui-count .weui-count__increase {
+ background-color: #04BE02;
+}
+.weui-count .weui-count__increase:after,
+.weui-count .weui-count__increase:before {
+ background-color: white;
+}
+.weui-count .weui-count__number {
+ background-color: transparent;
+ font-size: .8rem;
+ border: 0;
+ width: 1.3rem;
+ text-align: center;
+ color: #5f646e;
+}
+.weui-panel .weui-media-box__title-after {
+ color: #9b9b9b;
+ font-size: .65rem;
+ float: right;
+}
diff --git a/oauth/src/main/resources/static/css/weui.min.css b/oauth/src/main/resources/static/css/weui.min.css
new file mode 100644
index 0000000..380d74f
--- /dev/null
+++ b/oauth/src/main/resources/static/css/weui.min.css
@@ -0,0 +1,5 @@
+/*!
+ * WeUI v1.1.2 (https://github.com/weui/weui)
+ * Copyright 2017 Tencent, Inc.
+ * Licensed under the MIT license
+ */html{-ms-text-size-adjust:100%;-webkit-text-size-adjust:100%}body{line-height:1.6;font-family:-apple-system-font,Helvetica Neue,sans-serif}*{margin:0;padding:0}a img{border:0}a{text-decoration:none;-webkit-tap-highlight-color:rgba(0,0,0,0)}@font-face{font-weight:400;font-style:normal;font-family:weui;src:url("data:application/octet-stream;base64,AAEAAAALAIAAAwAwR1NVQrD+s+0AAAE4AAAAQk9TLzJAKEx+AAABfAAAAFZjbWFw65cFHQAAAhwAAAJQZ2x5ZvCRR/EAAASUAAAKtGhlYWQMPROtAAAA4AAAADZoaGVhCCwD+gAAALwAAAAkaG10eEJo//8AAAHUAAAASGxvY2EYqhW4AAAEbAAAACZtYXhwASEAVQAAARgAAAAgbmFtZeNcHtgAAA9IAAAB5nBvc3T6bLhLAAARMAAAAOYAAQAAA+gAAABaA+j/////A+kAAQAAAAAAAAAAAAAAAAAAABIAAQAAAAEAACbZbxtfDzz1AAsD6AAAAADUm2dvAAAAANSbZ2///wAAA+kD6gAAAAgAAgAAAAAAAAABAAAAEgBJAAUAAAAAAAIAAAAKAAoAAAD/AAAAAAAAAAEAAAAKAB4ALAABREZMVAAIAAQAAAAAAAAAAQAAAAFsaWdhAAgAAAABAAAAAQAEAAQAAAABAAgAAQAGAAAAAQAAAAAAAQOwAZAABQAIAnoCvAAAAIwCegK8AAAB4AAxAQIAAAIABQMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUGZFZABA6gHqEQPoAAAAWgPqAAAAAAABAAAAAAAAAAAAAAPoAAAD6AAAA+gAAAPoAAAD6AAAA+gAAAPoAAAD6AAAA+gAAAPoAAAD6AAAA+gAAAPoAAAD6AAAA+j//wPoAAAD6AAAAAAABQAAAAMAAAAsAAAABAAAAXQAAQAAAAAAbgADAAEAAAAsAAMACgAAAXQABABCAAAABAAEAAEAAOoR//8AAOoB//8AAAABAAQAAAABAAIAAwAEAAUABgAHAAgACQAKAAsADAANAA4ADwAQABEAAAEGAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAwAAAAAANwAAAAAAAAAEQAA6gEAAOoBAAAAAQAA6gIAAOoCAAAAAgAA6gMAAOoDAAAAAwAA6gQAAOoEAAAABAAA6gUAAOoFAAAABQAA6gYAAOoGAAAABgAA6gcAAOoHAAAABwAA6ggAAOoIAAAACAAA6gkAAOoJAAAACQAA6goAAOoKAAAACgAA6gsAAOoLAAAACwAA6gwAAOoMAAAADAAA6g0AAOoNAAAADQAA6g4AAOoOAAAADgAA6g8AAOoPAAAADwAA6hAAAOoQAAAAEAAA6hEAAOoRAAAAEQAAAAAARgCMANIBJAF4AcQCMgJgAqgC/ANIA6YD/gROBKAE9AVaAAAAAgAAAAADrwOtABQAKQAAASIHBgcGFBcWFxYyNzY3NjQnJicmAyInJicmNDc2NzYyFxYXFhQHBgcGAfV4Z2Q7PDw7ZGfwZmQ7PDw7ZGZ4bl5bNjc3Nlte215bNjc3NlteA608O2Rn8GdjOzw8O2Nn8GdkOzz8rzc1W17bXlw1Nzc1XF7bXls1NwAAAAACAAAAAAOzA7MAFwAtAAABIgcGBwYVFBcWFxYzMjc2NzY1NCcmJyYTBwYiLwEmNjsBETQ2OwEyFhURMzIWAe52Z2Q7PT07ZGd2fGpmOz4+O2ZpIXYOKA52Dg0XXQsHJgcLXRcNA7M+O2ZqfHZnZDs9PTtkZ3Z9aWY7Pv3wmhISmhIaARcICwsI/ukaAAMAAAAAA+UD5QAXACMALAAAASIHBgcGFRQXFhcWMzI3Njc2NTQnJicmAxQrASI1AzQ7ATIHJyImNDYyFhQGAe6Ecm9BRERBb3KEiXZxQkREQnF1aQIxAwgCQgMBIxIZGSQZGQPkREJxdomEcm9BRERBb3KEinVxQkT9HQICAWICAjEZIxkZIxkAAAAAAgAAAAADsQPkABkALgAAAQYHBgc2BREUFxYXFhc2NzY3NjURJBcmJyYTAQYvASY/ATYyHwEWNjclNjIfARYB9VVVQk+v/tFHPmxebGxdbT1I/tGvT0JVo/7VBASKAwMSAQUBcQEFAgESAgUBEQQD4xMYEhk3YP6sjnVlSD8cHD9IZXWOAVRgNxkSGP62/tkDA48EBBkCAVYCAQHlAQIQBAAAAAADAAAAAAOxA+QAGwAqADMAAAEGBwYHBgcGNxEUFxYXFhc2NzY3NjURJBcmJyYHMzIWFQMUBisBIicDNDYTIiY0NjIWFAYB9UFBODssO38gRz5sXmxsXW09SP7YqFBBVW80BAYMAwImBQELBh4PFhYeFRUD5A8SDhIOEikK/q2PdWRJPh0dPklkdY8BU141GRIY/AYE/sYCAwUBOgQG/kAVHxUVHxUAAAACAAAAAAPkA+QAFwAtAAABIgcGBwYVFBcWFxYzMjc2NzY1NCcmJyYTAQYiLwEmPwE2Mh8BFjI3ATYyHwEWAe6Ecm9BQ0NCbnODiXVxQkREQnF1kf6gAQUBowMDFgEFAYUCBQEBQwIFARUEA+NEQnF1iYNzbkJDQ0FvcoSJdXFCRP6j/qUBAagEBR4CAWYBAQENAgIVBAAAAAQAAAAAA68DrQAUACkAPwBDAAABIgcGBwYUFxYXFjI3Njc2NCcmJyYDIicmJyY0NzY3NjIXFhcWFAcGBwYTBQ4BLwEmBg8BBhYfARYyNwE+ASYiFzAfAQH1eGdkOzw8O2Rn8GZkOzw8O2RmeG5eWzY3NzZbXtteWzY3NzZbXmn+9gYSBmAGDwUDBQEGfQUQBgElBQELEBUBAQOtPDtkZ/BnYzs8PDtjZ/BnZDs8/K83NVte215cNTc3NVxe215bNTcCJt0FAQVJBQIGBAcRBoAGBQEhBQ8LBAEBAAABAAAAAAO7AzoAFwAAEy4BPwE+AR8BFjY3ATYWFycWFAcBBiInPQoGBwUHGgzLDCELAh0LHwsNCgr9uQoeCgGzCyEOCw0HCZMJAQoBvgkCCg0LHQv9sQsKAAAAAAIAAAAAA+UD5gAXACwAAAEiBwYHBhUUFxYXFjMyNzY3NjU0JyYnJhMHBi8BJicmNRM0NjsBMhYVExceAQHvhHJvQUNDQm5zg4l1cUJEREJxdVcQAwT6AwIEEAMCKwIDDsUCAQPlREJxdYmDc25CQ0NBb3KEiXVxQkT9VhwEAncCAgMGAXoCAwMC/q2FAgQAAAQAAAAAA68DrQADABgALQAzAAABMB8BAyIHBgcGFBcWFxYyNzY3NjQnJicmAyInJicmNDc2NzYyFxYXFhQHBgcGAyMVMzUjAuUBAfJ4Z2Q7PDw7ZGfwZmQ7PDw7ZGZ4bl5bNjc3Nlte215bNjc3NltemyT92QKDAQEBLDw7ZGfwZ2M7PDw7Y2fwZ2Q7PPyvNzVbXtteXDU3NzVcXtteWzU3AjH9JAAAAAMAAAAAA+QD5AAXACcAMAAAASIHBgcGFRQXFhcWMzI3Njc2NTQnJicmAzMyFhUDFAYrASImNQM0NhMiJjQ2MhYUBgHuhHJvQUNDQm5zg4l1cUJEREJxdZ42BAYMAwInAwMMBh8PFhYeFhYD40RCcXWJg3NuQkNDQW9yhIl1cUJE/vYGBf7AAgMDAgFABQb+NhYfFhYfFgAABAAAAAADwAPAAAgAEgAoAD0AAAEyNjQmIgYUFhcjFTMRIxUzNSMDIgcGBwYVFBYXFjMyNzY3NjU0Jy4BAyInJicmNDc2NzYyFxYXFhQHBgcGAfQYISEwISFRjzk5yTorhG5rPT99am+DdmhlPD4+PMyFbV5bNTc3NVte2l5bNTc3NVteAqAiLyIiLyI5Hf7EHBwCsT89a26Ed8w8Pj48ZWh2g29qffyjNzVbXtpeWzU3NzVbXtpeWzU3AAADAAAAAAOoA6gACwAgADUAAAEHJwcXBxc3FzcnNwMiBwYHBhQXFhcWMjc2NzY0JyYnJgMiJyYnJjQ3Njc2MhcWFxYUBwYHBgKOmpocmpocmpocmpq2dmZiOjs7OmJm7GZiOjs7OmJmdmtdWTQ2NjRZXdZdWTQ2NjRZXQKqmpocmpocmpocmpoBGTs6YmbsZmI6Ozs6YmbsZmI6O/zCNjRZXdZdWTQ2NjRZXdZdWTQ2AAMAAAAAA+kD6gAaAC8AMAAAAQYHBiMiJyYnJjQ3Njc2MhcWFxYVFAcGBwEHATI3Njc2NCcmJyYiBwYHBhQXFhcWMwKONUBCR21dWjU3NzVaXdpdWzU2GBcrASM5/eBXS0grKysrSEuuSkkqLCwqSUpXASMrFxg2NVtd2l1aNTc3NVpdbUdCQDX+3jkBGSsrSEuuSkkqLCwqSUquS0grKwAC//8AAAPoA+gAFAAwAAABIgcGBwYQFxYXFiA3Njc2ECcmJyYTFg4BIi8BBwYuATQ/AScmPgEWHwE3Nh4BBg8BAfSIdHFDRERDcXQBEHRxQ0REQ3F0SQoBFBsKoqgKGxMKqKIKARQbCqKoChsUAQqoA+hEQ3F0/vB0cUNERENxdAEQdHFDRP1jChsTCqiiCgEUGwqiqAobFAEKqKIKARQbCqIAAAIAAAAAA+QD5AAXADQAAAEiBwYHBhUUFxYXFjMyNzY3NjU0JyYnJhMUBiMFFxYUDwEGLwEuAT8BNh8BFhQPAQUyFh0BAe6Ecm9BQ0NCbnODiXVxQkREQnF1fwQC/pGDAQEVAwTsAgEC7AQEFAIBhAFwAgMD40RCcXWJg3NuQkNDQW9yhIl1cUJE/fYCAwuVAgQCFAQE0AIFAtEEBBQCBQGVCwMDJwAAAAUAAAAAA9QD0wAjACcANwBHAEgAAAERFAYjISImNREjIiY9ATQ2MyE1NDYzITIWHQEhMhYdARQGIyERIREHIgYVERQWOwEyNjURNCYjISIGFREUFjsBMjY1ETQmKwEDeyYb/XYbJkMJDQ0JAQYZEgEvExkBBgkNDQn9CQJc0QkNDQktCQ0NCf7sCQ0NCS0JDQ0JLQMi/TQbJiYbAswMCiwJDS4SGRkSLg0JLAoM/UwCtGsNCf5NCQ0NCQGzCQ0NCf5NCQ0NCQGzCQ0AAAAAEADGAAEAAAAAAAEABAAAAAEAAAAAAAIABwAEAAEAAAAAAAMABAALAAEAAAAAAAQABAAPAAEAAAAAAAUACwATAAEAAAAAAAYABAAeAAEAAAAAAAoAKwAiAAEAAAAAAAsAEwBNAAMAAQQJAAEACABgAAMAAQQJAAIADgBoAAMAAQQJAAMACAB2AAMAAQQJAAQACAB+AAMAAQQJAAUAFgCGAAMAAQQJAAYACACcAAMAAQQJAAoAVgCkAAMAAQQJAAsAJgD6d2V1aVJlZ3VsYXJ3ZXVpd2V1aVZlcnNpb24gMS4wd2V1aUdlbmVyYXRlZCBieSBzdmcydHRmIGZyb20gRm9udGVsbG8gcHJvamVjdC5odHRwOi8vZm9udGVsbG8uY29tAHcAZQB1AGkAUgBlAGcAdQBsAGEAcgB3AGUAdQBpAHcAZQB1AGkAVgBlAHIAcwBpAG8AbgAgADEALgAwAHcAZQB1AGkARwBlAG4AZQByAGEAdABlAGQAIABiAHkAIABzAHYAZwAyAHQAdABmACAAZgByAG8AbQAgAEYAbwBuAHQAZQBsAGwAbwAgAHAAcgBvAGoAZQBjAHQALgBoAHQAdABwADoALwAvAGYAbwBuAHQAZQBsAGwAbwAuAGMAbwBtAAAAAgAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAASAQIBAwEEAQUBBgEHAQgBCQEKAQsBDAENAQ4BDwEQAREBEgETAAZjaXJjbGUIZG93bmxvYWQEaW5mbwxzYWZlX3N1Y2Nlc3MJc2FmZV93YXJuB3N1Y2Nlc3MOc3VjY2Vzcy1jaXJjbGURc3VjY2Vzcy1uby1jaXJjbGUHd2FpdGluZw53YWl0aW5nLWNpcmNsZQR3YXJuC2luZm8tY2lyY2xlBmNhbmNlbAZzZWFyY2gFY2xlYXIEYmFjawZkZWxldGUAAAAA") format("truetype")}[class*=" weui-icon-"],[class^=weui-icon-]{display:inline-block;vertical-align:middle;font:normal normal normal 14px/1 weui;font-size:inherit;text-rendering:auto;-webkit-font-smoothing:antialiased}[class*=" weui-icon-"]:before,[class^=weui-icon-]:before{display:inline-block;margin-left:.2em;margin-right:.2em}.weui-icon-circle:before{content:"\EA01"}.weui-icon-download:before{content:"\EA02"}.weui-icon-info:before{content:"\EA03"}.weui-icon-safe-success:before{content:"\EA04"}.weui-icon-safe-warn:before{content:"\EA05"}.weui-icon-success:before{content:"\EA06"}.weui-icon-success-circle:before{content:"\EA07"}.weui-icon-success-no-circle:before{content:"\EA08"}.weui-icon-waiting:before{content:"\EA09"}.weui-icon-waiting-circle:before{content:"\EA0A"}.weui-icon-warn:before{content:"\EA0B"}.weui-icon-info-circle:before{content:"\EA0C"}.weui-icon-cancel:before{content:"\EA0D"}.weui-icon-search:before{content:"\EA0E"}.weui-icon-clear:before{content:"\EA0F"}.weui-icon-back:before{content:"\EA10"}.weui-icon-delete:before{content:"\EA11"}[class*=" weui-icon_"]:before,[class^=weui-icon_]:before{margin:0}.weui-icon-success{font-size:23px;color:#09bb07}.weui-icon-waiting{font-size:23px;color:#10aeff}.weui-icon-warn{font-size:23px;color:#f43530}.weui-icon-info{font-size:23px;color:#10aeff}.weui-icon-success-circle,.weui-icon-success-no-circle{font-size:23px;color:#09bb07}.weui-icon-waiting-circle{font-size:23px;color:#10aeff}.weui-icon-circle{font-size:23px;color:#c9c9c9}.weui-icon-download,.weui-icon-info-circle{font-size:23px;color:#09bb07}.weui-icon-safe-success{color:#09bb07}.weui-icon-safe-warn{color:#ffbe00}.weui-icon-cancel{color:#f43530;font-size:22px}.weui-icon-clear,.weui-icon-search{color:#b2b2b2;font-size:14px}.weui-icon-delete.weui-icon_gallery-delete{color:#fff;font-size:22px}.weui-icon_msg{font-size:93px}.weui-icon_msg.weui-icon-warn{color:#f76260}.weui-icon_msg-primary{font-size:93px}.weui-icon_msg-primary.weui-icon-warn{color:#ffbe00}.weui-btn{position:relative;display:block;margin-left:auto;margin-right:auto;padding-left:14px;padding-right:14px;box-sizing:border-box;font-size:18px;text-align:center;text-decoration:none;color:#fff;line-height:2.55555556;border-radius:5px;-webkit-tap-highlight-color:rgba(0,0,0,0);overflow:hidden}.weui-btn:after{content:" ";width:200%;height:200%;position:absolute;top:0;left:0;border:1px solid rgba(0,0,0,.2);-webkit-transform:scale(.5);transform:scale(.5);-webkit-transform-origin:0 0;transform-origin:0 0;box-sizing:border-box;border-radius:10px}.weui-btn_inline{display:inline-block}.weui-btn_default{color:#000;background-color:#f8f8f8}.weui-btn_default:not(.weui-btn_disabled):visited{color:#000}.weui-btn_default:not(.weui-btn_disabled):active{color:rgba(0,0,0,.6);background-color:#dedede}.weui-btn_primary{background-color:#1aad19}.weui-btn_primary:not(.weui-btn_disabled):visited{color:#fff}.weui-btn_primary:not(.weui-btn_disabled):active{color:hsla(0,0%,100%,.6);background-color:#179b16}.weui-btn_warn{background-color:#e64340}.weui-btn_warn:not(.weui-btn_disabled):visited{color:#fff}.weui-btn_warn:not(.weui-btn_disabled):active{color:hsla(0,0%,100%,.6);background-color:#ce3c39}.weui-btn_disabled{color:hsla(0,0%,100%,.6)}.weui-btn_disabled.weui-btn_default{color:rgba(0,0,0,.3);background-color:#f7f7f7}.weui-btn_disabled.weui-btn_primary{background-color:#9ed99d}.weui-btn_disabled.weui-btn_warn{background-color:#ec8b89}.weui-btn_loading .weui-loading{margin:-.2em .34em 0 0}.weui-btn_loading.weui-btn_primary,.weui-btn_loading.weui-btn_warn{color:hsla(0,0%,100%,.6)}.weui-btn_loading.weui-btn_primary{background-color:#179b16}.weui-btn_loading.weui-btn_warn{background-color:#ce3c39}.weui-btn_plain-primary{color:#1aad19;border:1px solid #1aad19}.weui-btn_plain-primary:not(.weui-btn_plain-disabled):active{color:rgba(26,173,25,.6);border-color:rgba(26,173,25,.6)}.weui-btn_plain-primary:after{border-width:0}.weui-btn_plain-default{color:#353535;border:1px solid #353535}.weui-btn_plain-default:not(.weui-btn_plain-disabled):active{color:rgba(53,53,53,.6);border-color:rgba(53,53,53,.6)}.weui-btn_plain-default:after{border-width:0}.weui-btn_plain-disabled{color:rgba(0,0,0,.2);border-color:rgba(0,0,0,.2)}button.weui-btn,input.weui-btn{width:100%;border-width:0;outline:0;-webkit-appearance:none}button.weui-btn:focus,input.weui-btn:focus{outline:0}button.weui-btn_inline,button.weui-btn_mini,input.weui-btn_inline,input.weui-btn_mini{width:auto}button.weui-btn_plain-default,button.weui-btn_plain-primary,input.weui-btn_plain-default,input.weui-btn_plain-primary{border-width:1px;background-color:transparent}.weui-btn_mini{display:inline-block;padding:0 1.32em;line-height:2.3;font-size:13px}.weui-btn+.weui-btn{margin-top:15px}.weui-btn.weui-btn_inline+.weui-btn.weui-btn_inline{margin-top:auto;margin-left:15px}.weui-btn-area{margin:1.17647059em 15px .3em}.weui-btn-area_inline{display:-webkit-box;display:-webkit-flex;display:flex}.weui-btn-area_inline .weui-btn{margin-top:auto;margin-right:15px;width:100%;-webkit-box-flex:1;-webkit-flex:1;flex:1}.weui-btn-area_inline .weui-btn:last-child{margin-right:0}.weui-cells{margin-top:1.17647059em;background-color:#fff;line-height:1.47058824;font-size:17px;overflow:hidden;position:relative}.weui-cells:before{top:0;border-top:1px solid #e5e5e5;-webkit-transform-origin:0 0;transform-origin:0 0;-webkit-transform:scaleY(.5);transform:scaleY(.5)}.weui-cells:after,.weui-cells:before{content:" ";position:absolute;left:0;right:0;height:1px;color:#e5e5e5;z-index:2}.weui-cells:after{bottom:0;border-bottom:1px solid #e5e5e5;-webkit-transform-origin:0 100%;transform-origin:0 100%;-webkit-transform:scaleY(.5);transform:scaleY(.5)}.weui-cells__title{margin-top:.77em;margin-bottom:.3em;padding-left:15px;padding-right:15px;color:#999;font-size:14px}.weui-cells__title+.weui-cells{margin-top:0}.weui-cells__tips{margin-top:.3em;color:#999;padding-left:15px;padding-right:15px;font-size:14px}.weui-cell{padding:10px 15px;position:relative;display:-webkit-box;display:-webkit-flex;display:flex;-webkit-box-align:center;-webkit-align-items:center;align-items:center}.weui-cell:before{content:" ";position:absolute;left:0;top:0;right:0;height:1px;border-top:1px solid #e5e5e5;color:#e5e5e5;-webkit-transform-origin:0 0;transform-origin:0 0;-webkit-transform:scaleY(.5);transform:scaleY(.5);left:15px;z-index:2}.weui-cell:first-child:before{display:none}.weui-cell_primary{-webkit-box-align:start;-webkit-align-items:flex-start;align-items:flex-start}.weui-cell__bd{-webkit-box-flex:1;-webkit-flex:1;flex:1}.weui-cell__ft{text-align:right;color:#999}.weui-cell_swiped{display:block;padding:0}.weui-cell_swiped>.weui-cell__bd{position:relative;z-index:1;background-color:#fff}.weui-cell_swiped>.weui-cell__ft{position:absolute;right:0;top:0;bottom:0;display:-webkit-box;display:-webkit-flex;display:flex;color:#fff}.weui-swiped-btn{display:block;padding:10px 1em;line-height:1.47058824;color:inherit}.weui-swiped-btn_default{background-color:#c7c7cc}.weui-swiped-btn_warn{background-color:#ff3b30}.weui-cell_access{-webkit-tap-highlight-color:rgba(0,0,0,0);color:inherit}.weui-cell_access:active{background-color:#ececec}.weui-cell_access .weui-cell__ft{padding-right:13px;position:relative}.weui-cell_access .weui-cell__ft:after{content:" ";display:inline-block;height:6px;width:6px;border-width:2px 2px 0 0;border-color:#c8c8cd;border-style:solid;-webkit-transform:matrix(.71,.71,-.71,.71,0,0);transform:matrix(.71,.71,-.71,.71,0,0);position:relative;top:-2px;position:absolute;top:50%;margin-top:-4px;right:2px}.weui-cell_link{color:#586c94;font-size:14px}.weui-cell_link:first-child:before{display:block}.weui-check__label{-webkit-tap-highlight-color:rgba(0,0,0,0)}.weui-check__label:active{background-color:#ececec}.weui-check{position:absolute;left:-9999em}.weui-cells_radio .weui-cell__ft{padding-left:.35em}.weui-cells_radio .weui-check:checked+.weui-icon-checked:before{display:block;content:"\EA08";color:#09bb07;font-size:16px}.weui-cells_checkbox .weui-cell__hd{padding-right:.35em}.weui-cells_checkbox .weui-icon-checked:before{content:"\EA01";color:#c9c9c9;font-size:23px;display:block}.weui-cells_checkbox .weui-check:checked+.weui-icon-checked:before{content:"\EA06";color:#09bb07}.weui-label{display:block;width:105px;word-wrap:break-word;word-break:break-all}.weui-input{width:100%;border:0;outline:0;-webkit-appearance:none;background-color:transparent;font-size:inherit;color:inherit;height:1.47058824em;line-height:1.47058824}.weui-input::-webkit-inner-spin-button,.weui-input::-webkit-outer-spin-button{-webkit-appearance:none;margin:0}.weui-textarea{display:block;border:0;resize:none;width:100%;color:inherit;font-size:1em;line-height:inherit;outline:0}.weui-textarea-counter{color:#b2b2b2;text-align:right}.weui-cell_warn .weui-textarea-counter{color:#e64340}.weui-toptips{display:none;position:fixed;-webkit-transform:translateZ(0);transform:translateZ(0);top:0;left:0;right:0;padding:5px;font-size:14px;text-align:center;color:#fff;z-index:5000;word-wrap:break-word;word-break:break-all}.weui-toptips_warn{background-color:#e64340}.weui-cells_form .weui-cell__ft{font-size:0}.weui-cells_form .weui-icon-warn{display:none}.weui-cells_form input,.weui-cells_form label[for],.weui-cells_form textarea{-webkit-tap-highlight-color:rgba(0,0,0,0)}.weui-cell_warn{color:#e64340}.weui-cell_warn .weui-icon-warn{display:inline-block}.weui-form-preview{position:relative;background-color:#fff}.weui-form-preview:before{top:0;border-top:1px solid #e5e5e5;-webkit-transform-origin:0 0;transform-origin:0 0;-webkit-transform:scaleY(.5);transform:scaleY(.5)}.weui-form-preview:after,.weui-form-preview:before{content:" ";position:absolute;left:0;right:0;height:1px;color:#e5e5e5}.weui-form-preview:after{bottom:0;border-bottom:1px solid #e5e5e5;-webkit-transform-origin:0 100%;transform-origin:0 100%;-webkit-transform:scaleY(.5);transform:scaleY(.5)}.weui-form-preview__hd{position:relative;padding:10px 15px;text-align:right;line-height:2.5em}.weui-form-preview__hd:after{content:" ";position:absolute;left:0;bottom:0;right:0;height:1px;border-bottom:1px solid #e5e5e5;color:#e5e5e5;-webkit-transform-origin:0 100%;transform-origin:0 100%;-webkit-transform:scaleY(.5);transform:scaleY(.5);left:15px}.weui-form-preview__hd .weui-form-preview__value{font-style:normal;font-size:1.6em}.weui-form-preview__bd{padding:10px 15px;font-size:.9em;text-align:right;color:#999;line-height:2}.weui-form-preview__ft{position:relative;line-height:50px;display:-webkit-box;display:-webkit-flex;display:flex}.weui-form-preview__ft:before{content:" ";position:absolute;left:0;top:0;right:0;height:1px;border-top:1px solid #d5d5d6;color:#d5d5d6;-webkit-transform-origin:0 0;transform-origin:0 0;-webkit-transform:scaleY(.5);transform:scaleY(.5)}.weui-form-preview__item{overflow:hidden}.weui-form-preview__label{float:left;margin-right:1em;min-width:4em;color:#999;text-align:justify;text-align-last:justify}.weui-form-preview__value{display:block;overflow:hidden;word-break:normal;word-wrap:break-word}.weui-form-preview__btn{position:relative;display:block;-webkit-box-flex:1;-webkit-flex:1;flex:1;color:#3cc51f;text-align:center;-webkit-tap-highlight-color:rgba(0,0,0,0)}button.weui-form-preview__btn{background-color:transparent;border:0;outline:0;line-height:inherit;font-size:inherit}.weui-form-preview__btn:active{background-color:#eee}.weui-form-preview__btn:after{content:" ";position:absolute;left:0;top:0;width:1px;bottom:0;border-left:1px solid #d5d5d6;color:#d5d5d6;-webkit-transform-origin:0 0;transform-origin:0 0;-webkit-transform:scaleX(.5);transform:scaleX(.5)}.weui-form-preview__btn:first-child:after{display:none}.weui-form-preview__btn_default{color:#999}.weui-form-preview__btn_primary{color:#0bb20c}.weui-cell_select{padding:0}.weui-cell_select .weui-select{padding-right:30px}.weui-cell_select .weui-cell__bd:after{content:" ";display:inline-block;height:6px;width:6px;border-width:2px 2px 0 0;border-color:#c8c8cd;border-style:solid;-webkit-transform:matrix(.71,.71,-.71,.71,0,0);transform:matrix(.71,.71,-.71,.71,0,0);position:relative;top:-2px;position:absolute;top:50%;right:15px;margin-top:-4px}.weui-select{-webkit-appearance:none;border:0;outline:0;background-color:transparent;width:100%;font-size:inherit;height:45px;line-height:45px;position:relative;z-index:1;padding-left:15px}.weui-cell_select-before{padding-right:15px}.weui-cell_select-before .weui-select{width:105px;box-sizing:border-box}.weui-cell_select-before .weui-cell__hd{position:relative}.weui-cell_select-before .weui-cell__hd:after{content:" ";position:absolute;right:0;top:0;width:1px;bottom:0;border-right:1px solid #e5e5e5;color:#e5e5e5;-webkit-transform-origin:100% 0;transform-origin:100% 0;-webkit-transform:scaleX(.5);transform:scaleX(.5)}.weui-cell_select-before .weui-cell__hd:before{content:" ";display:inline-block;height:6px;width:6px;border-width:2px 2px 0 0;border-color:#c8c8cd;border-style:solid;-webkit-transform:matrix(.71,.71,-.71,.71,0,0);transform:matrix(.71,.71,-.71,.71,0,0);position:relative;top:-2px;position:absolute;top:50%;right:15px;margin-top:-4px}.weui-cell_select-before .weui-cell__bd{padding-left:15px}.weui-cell_select-before .weui-cell__bd:after{display:none}.weui-cell_select-after{padding-left:15px}.weui-cell_select-after .weui-select{padding-left:0}.weui-cell_vcode{padding-top:0;padding-right:0;padding-bottom:0}.weui-vcode-btn,.weui-vcode-img{margin-left:5px;height:45px;vertical-align:middle}.weui-vcode-btn{display:inline-block;padding:0 .6em 0 .7em;border-left:1px solid #e5e5e5;line-height:45px;font-size:17px;color:#3cc51f}button.weui-vcode-btn{background-color:transparent;border-top:0;border-right:0;border-bottom:0;outline:0}.weui-vcode-btn:active{color:#52a341}.weui-gallery{display:none;position:fixed;top:0;right:0;bottom:0;left:0;background-color:#000;z-index:1000}.weui-gallery__img{position:absolute;top:0;right:0;bottom:60px;left:0;background:50% no-repeat;background-size:contain}.weui-gallery__opr{position:absolute;right:0;bottom:0;left:0;background-color:#0d0d0d;color:#fff;line-height:60px;text-align:center}.weui-gallery__del{display:block}.weui-cell_switch{padding-top:6.5px;padding-bottom:6.5px}.weui-switch{-webkit-appearance:none;appearance:none}.weui-switch,.weui-switch-cp__box{position:relative;width:52px;height:32px;border:1px solid #dfdfdf;outline:0;border-radius:16px;box-sizing:border-box;background-color:#dfdfdf;-webkit-transition:background-color .1s,border .1s;transition:background-color .1s,border .1s}.weui-switch-cp__box:before,.weui-switch:before{content:" ";position:absolute;top:0;left:0;width:50px;height:30px;border-radius:15px;background-color:#fdfdfd;-webkit-transition:-webkit-transform .35s cubic-bezier(.45,1,.4,1);transition:-webkit-transform .35s cubic-bezier(.45,1,.4,1);transition:transform .35s cubic-bezier(.45,1,.4,1);transition:transform .35s cubic-bezier(.45,1,.4,1),-webkit-transform .35s cubic-bezier(.45,1,.4,1)}.weui-switch-cp__box:after,.weui-switch:after{content:" ";position:absolute;top:0;left:0;width:30px;height:30px;border-radius:15px;background-color:#fff;box-shadow:0 1px 3px rgba(0,0,0,.4);-webkit-transition:-webkit-transform .35s cubic-bezier(.4,.4,.25,1.35);transition:-webkit-transform .35s cubic-bezier(.4,.4,.25,1.35);transition:transform .35s cubic-bezier(.4,.4,.25,1.35);transition:transform .35s cubic-bezier(.4,.4,.25,1.35),-webkit-transform .35s cubic-bezier(.4,.4,.25,1.35)}.weui-switch-cp__input:checked~.weui-switch-cp__box,.weui-switch:checked{border-color:#04be02;background-color:#04be02}.weui-switch-cp__input:checked~.weui-switch-cp__box:before,.weui-switch:checked:before{-webkit-transform:scale(0);transform:scale(0)}.weui-switch-cp__input:checked~.weui-switch-cp__box:after,.weui-switch:checked:after{-webkit-transform:translateX(20px);transform:translateX(20px)}.weui-switch-cp__input{position:absolute;left:-9999px}.weui-switch-cp__box{display:block}.weui-uploader__hd{display:-webkit-box;display:-webkit-flex;display:flex;padding-bottom:10px;-webkit-box-align:center;-webkit-align-items:center;align-items:center}.weui-uploader__title{-webkit-box-flex:1;-webkit-flex:1;flex:1}.weui-uploader__info{color:#b2b2b2}.weui-uploader__bd{margin-bottom:-4px;margin-right:-9px;overflow:hidden}.weui-uploader__files{list-style:none}.weui-uploader__file{float:left;margin-right:9px;margin-bottom:9px;width:79px;height:79px;background:no-repeat 50%;background-size:cover}.weui-uploader__file_status{position:relative}.weui-uploader__file_status:before{content:" ";position:absolute;top:0;right:0;bottom:0;left:0;background-color:rgba(0,0,0,.5)}.weui-uploader__file_status .weui-uploader__file-content{display:block}.weui-uploader__file-content{display:none;position:absolute;top:50%;left:50%;-webkit-transform:translate(-50%,-50%);transform:translate(-50%,-50%);color:#fff}.weui-uploader__file-content .weui-icon-warn{display:inline-block}.weui-uploader__input-box{float:left;position:relative;margin-right:9px;margin-bottom:9px;width:77px;height:77px;border:1px solid #d9d9d9}.weui-uploader__input-box:after,.weui-uploader__input-box:before{content:" ";position:absolute;top:50%;left:50%;-webkit-transform:translate(-50%,-50%);transform:translate(-50%,-50%);background-color:#d9d9d9}.weui-uploader__input-box:before{width:2px;height:39.5px}.weui-uploader__input-box:after{width:39.5px;height:2px}.weui-uploader__input-box:active{border-color:#999}.weui-uploader__input-box:active:after,.weui-uploader__input-box:active:before{background-color:#999}.weui-uploader__input{position:absolute;z-index:1;top:0;left:0;width:100%;height:100%;opacity:0;-webkit-tap-highlight-color:rgba(0,0,0,0)}.weui-msg{padding-top:36px;text-align:center}.weui-msg__icon-area{margin-bottom:30px}.weui-msg__text-area{margin-bottom:25px;padding:0 20px}.weui-msg__text-area a{color:#586c94}.weui-msg__title{margin-bottom:5px;font-weight:400;font-size:20px}.weui-msg__desc{font-size:14px;color:#999}.weui-msg__opr-area{margin-bottom:25px}.weui-msg__extra-area{margin-bottom:15px;font-size:14px;color:#999}.weui-msg__extra-area a{color:#586c94}@media screen and (min-height:438px){.weui-msg__extra-area{position:fixed;left:0;bottom:0;width:100%;text-align:center}}.weui-article{padding:20px 15px;font-size:15px}.weui-article section{margin-bottom:1.5em}.weui-article h1{font-size:18px;font-weight:400;margin-bottom:.9em}.weui-article h2{font-size:16px}.weui-article h2,.weui-article h3{font-weight:400;margin-bottom:.34em}.weui-article h3{font-size:15px}.weui-article *{max-width:100%;box-sizing:border-box;word-wrap:break-word}.weui-article p{margin:0 0 .8em}.weui-tabbar{display:-webkit-box;display:-webkit-flex;display:flex;position:absolute;z-index:500;bottom:0;width:100%;background-color:#f7f7fa}.weui-tabbar:before{content:" ";position:absolute;left:0;top:0;right:0;height:1px;border-top:1px solid #c0bfc4;color:#c0bfc4;-webkit-transform-origin:0 0;transform-origin:0 0;-webkit-transform:scaleY(.5);transform:scaleY(.5)}.weui-tabbar__item{display:block;-webkit-box-flex:1;-webkit-flex:1;flex:1;padding:5px 0 0;font-size:0;color:#999;text-align:center;-webkit-tap-highlight-color:rgba(0,0,0,0)}.weui-tabbar__item.weui-bar__item_on .weui-tabbar__icon,.weui-tabbar__item.weui-bar__item_on .weui-tabbar__icon>i,.weui-tabbar__item.weui-bar__item_on .weui-tabbar__label{color:#09bb07}.weui-tabbar__icon{display:inline-block;width:27px;height:27px}.weui-tabbar__icon>i,i.weui-tabbar__icon{font-size:24px;color:#999}.weui-tabbar__icon img{width:100%;height:100%}.weui-tabbar__label{text-align:center;color:#999;font-size:10px;line-height:1.8}.weui-navbar{display:-webkit-box;display:-webkit-flex;display:flex;position:absolute;z-index:500;top:0;width:100%;background-color:#fafafa}.weui-navbar:after{content:" ";position:absolute;left:0;bottom:0;right:0;height:1px;border-bottom:1px solid #ccc;color:#ccc;-webkit-transform-origin:0 100%;transform-origin:0 100%;-webkit-transform:scaleY(.5);transform:scaleY(.5)}.weui-navbar+.weui-tab__panel{padding-top:50px;padding-bottom:0}.weui-navbar__item{position:relative;display:block;-webkit-box-flex:1;-webkit-flex:1;flex:1;padding:13px 0;text-align:center;font-size:15px;-webkit-tap-highlight-color:rgba(0,0,0,0)}.weui-navbar__item:active{background-color:#ededed}.weui-navbar__item.weui-bar__item_on{background-color:#eaeaea}.weui-navbar__item:after{content:" ";position:absolute;right:0;top:0;width:1px;bottom:0;border-right:1px solid #ccc;color:#ccc;-webkit-transform-origin:100% 0;transform-origin:100% 0;-webkit-transform:scaleX(.5);transform:scaleX(.5)}.weui-navbar__item:last-child:after{display:none}.weui-tab{position:relative;height:100%}.weui-tab__panel{box-sizing:border-box;height:100%;padding-bottom:50px;overflow:auto;-webkit-overflow-scrolling:touch}.weui-tab__content{display:none}.weui-progress{display:-webkit-box;display:-webkit-flex;display:flex;-webkit-box-align:center;-webkit-align-items:center;align-items:center}.weui-progress__bar{background-color:#ebebeb;height:3px;-webkit-box-flex:1;-webkit-flex:1;flex:1}.weui-progress__inner-bar{width:0;height:100%;background-color:#09bb07}.weui-progress__opr{display:block;margin-left:15px;font-size:0}.weui-panel{background-color:#fff;margin-top:10px;position:relative;overflow:hidden}.weui-panel:first-child{margin-top:0}.weui-panel:before{top:0;border-top:1px solid #e5e5e5;-webkit-transform-origin:0 0;transform-origin:0 0;-webkit-transform:scaleY(.5);transform:scaleY(.5)}.weui-panel:after,.weui-panel:before{content:" ";position:absolute;left:0;right:0;height:1px;color:#e5e5e5}.weui-panel:after{bottom:0;border-bottom:1px solid #e5e5e5;-webkit-transform-origin:0 100%;transform-origin:0 100%;-webkit-transform:scaleY(.5);transform:scaleY(.5)}.weui-panel__hd{padding:14px 15px 10px;color:#999;font-size:13px;position:relative}.weui-panel__hd:after{content:" ";position:absolute;left:0;bottom:0;right:0;height:1px;border-bottom:1px solid #e5e5e5;color:#e5e5e5;-webkit-transform-origin:0 100%;transform-origin:0 100%;-webkit-transform:scaleY(.5);transform:scaleY(.5);left:15px}.weui-media-box{padding:15px;position:relative}.weui-media-box:before{content:" ";position:absolute;left:0;top:0;right:0;height:1px;border-top:1px solid #e5e5e5;color:#e5e5e5;-webkit-transform-origin:0 0;transform-origin:0 0;-webkit-transform:scaleY(.5);transform:scaleY(.5);left:15px}.weui-media-box:first-child:before{display:none}a.weui-media-box{color:#000;-webkit-tap-highlight-color:rgba(0,0,0,0)}a.weui-media-box:active{background-color:#ececec}.weui-media-box__title{font-weight:400;font-size:17px;width:auto;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;word-wrap:normal;word-wrap:break-word;word-break:break-all}.weui-media-box__desc{color:#999;font-size:13px;line-height:1.2;overflow:hidden;text-overflow:ellipsis;display:-webkit-box;-webkit-box-orient:vertical;-webkit-line-clamp:2}.weui-media-box__info{margin-top:15px;padding-bottom:5px;font-size:13px;color:#cecece;line-height:1em;list-style:none;overflow:hidden}.weui-media-box__info__meta{float:left;padding-right:1em}.weui-media-box__info__meta_extra{padding-left:1em;border-left:1px solid #cecece}.weui-media-box_text .weui-media-box__title{margin-bottom:8px}.weui-media-box_appmsg{display:-webkit-box;display:-webkit-flex;display:flex;-webkit-box-align:center;-webkit-align-items:center;align-items:center}.weui-media-box_appmsg .weui-media-box__hd{margin-right:.8em;width:60px;height:60px;line-height:60px;text-align:center}.weui-media-box_appmsg .weui-media-box__thumb{width:100%;max-height:100%;vertical-align:top}.weui-media-box_appmsg .weui-media-box__bd{-webkit-box-flex:1;-webkit-flex:1;flex:1;min-width:0}.weui-media-box_small-appmsg{padding:0}.weui-media-box_small-appmsg .weui-cells{margin-top:0}.weui-media-box_small-appmsg .weui-cells:before{display:none}.weui-grids{position:relative;overflow:hidden}.weui-grids:before{right:0;height:1px;border-top:1px solid #d9d9d9;-webkit-transform-origin:0 0;transform-origin:0 0;-webkit-transform:scaleY(.5);transform:scaleY(.5)}.weui-grids:after,.weui-grids:before{content:" ";position:absolute;left:0;top:0;color:#d9d9d9}.weui-grids:after{width:1px;bottom:0;border-left:1px solid #d9d9d9;-webkit-transform-origin:0 0;transform-origin:0 0;-webkit-transform:scaleX(.5);transform:scaleX(.5)}.weui-grid{position:relative;float:left;padding:20px 10px;width:33.33333333%;box-sizing:border-box}.weui-grid:before{top:0;width:1px;border-right:1px solid #d9d9d9;-webkit-transform-origin:100% 0;transform-origin:100% 0;-webkit-transform:scaleX(.5);transform:scaleX(.5)}.weui-grid:after,.weui-grid:before{content:" ";position:absolute;right:0;bottom:0;color:#d9d9d9}.weui-grid:after{left:0;height:1px;border-bottom:1px solid #d9d9d9;-webkit-transform-origin:0 100%;transform-origin:0 100%;-webkit-transform:scaleY(.5);transform:scaleY(.5)}.weui-grid:active{background-color:#ececec}.weui-grid__icon{width:28px;height:28px;margin:0 auto}.weui-grid__icon img{display:block;width:100%;height:100%}.weui-grid__icon+.weui-grid__label{margin-top:5px}.weui-grid__label{display:block;color:#000;white-space:nowrap;text-overflow:ellipsis;overflow:hidden}.weui-footer,.weui-grid__label{text-align:center;font-size:14px}.weui-footer{color:#999}.weui-footer a{color:#586c94}.weui-footer_fixed-bottom{position:fixed;bottom:.52em;left:0;right:0}.weui-footer__links{font-size:0}.weui-footer__link{display:inline-block;vertical-align:top;margin:0 .62em;position:relative;font-size:14px}.weui-footer__link:before{content:" ";position:absolute;left:0;top:0;width:1px;bottom:0;border-left:1px solid #c7c7c7;color:#c7c7c7;-webkit-transform-origin:0 0;transform-origin:0 0;-webkit-transform:scaleX(.5);transform:scaleX(.5);left:-.65em;top:.36em;bottom:.36em}.weui-footer__link:first-child:before{display:none}.weui-footer__text{padding:0 .34em;font-size:12px}.weui-flex{display:-webkit-box;display:-webkit-flex;display:flex}.weui-flex__item{-webkit-box-flex:1;-webkit-flex:1;flex:1}.weui-dialog{position:fixed;z-index:5000;width:80%;max-width:300px;top:50%;left:50%;-webkit-transform:translate(-50%,-50%);transform:translate(-50%,-50%);background-color:#fff;text-align:center;border-radius:3px;overflow:hidden}.weui-dialog__hd{padding:1.3em 1.6em .5em}.weui-dialog__title{font-weight:400;font-size:18px}.weui-dialog__bd{padding:0 1.6em .8em;min-height:40px;font-size:15px;line-height:1.3;word-wrap:break-word;word-break:break-all;color:#999}.weui-dialog__bd:first-child{padding:2.7em 20px 1.7em;color:#353535}.weui-dialog__ft{position:relative;line-height:48px;font-size:18px;display:-webkit-box;display:-webkit-flex;display:flex}.weui-dialog__ft:after{content:" ";position:absolute;left:0;top:0;right:0;height:1px;border-top:1px solid #d5d5d6;color:#d5d5d6;-webkit-transform-origin:0 0;transform-origin:0 0;-webkit-transform:scaleY(.5);transform:scaleY(.5)}.weui-dialog__btn{display:block;-webkit-box-flex:1;-webkit-flex:1;flex:1;color:#3cc51f;text-decoration:none;-webkit-tap-highlight-color:rgba(0,0,0,0);position:relative}.weui-dialog__btn:active{background-color:#eee}.weui-dialog__btn:after{content:" ";position:absolute;left:0;top:0;width:1px;bottom:0;border-left:1px solid #d5d5d6;color:#d5d5d6;-webkit-transform-origin:0 0;transform-origin:0 0;-webkit-transform:scaleX(.5);transform:scaleX(.5)}.weui-dialog__btn:first-child:after{display:none}.weui-dialog__btn_default{color:#353535}.weui-dialog__btn_primary{color:#0bb20c}.weui-skin_android .weui-dialog{text-align:left;box-shadow:0 6px 30px 0 rgba(0,0,0,.1)}.weui-skin_android .weui-dialog__title{font-size:21px}.weui-skin_android .weui-dialog__hd{text-align:left}.weui-skin_android .weui-dialog__bd{color:#999;padding:.25em 1.6em 2em;font-size:17px;text-align:left}.weui-skin_android .weui-dialog__bd:first-child{padding:1.6em 1.6em 2em;color:#353535}.weui-skin_android .weui-dialog__ft{display:block;text-align:right;line-height:42px;font-size:16px;padding:0 1.6em .7em}.weui-skin_android .weui-dialog__ft:after{display:none}.weui-skin_android .weui-dialog__btn{display:inline-block;vertical-align:top;padding:0 .8em}.weui-skin_android .weui-dialog__btn:after{display:none}.weui-skin_android .weui-dialog__btn:active,.weui-skin_android .weui-dialog__btn:visited{background-color:rgba(0,0,0,.06)}.weui-skin_android .weui-dialog__btn:last-child{margin-right:-.8em}.weui-skin_android .weui-dialog__btn_default{color:gray}@media screen and (min-width:1024px){.weui-dialog{width:35%}}.weui-toast{position:fixed;z-index:5000;width:7.6em;min-height:7.6em;top:180px;left:50%;background:hsla(0,0%,7%,.7);text-align:center;border-radius:5px;color:#fff}.weui-icon_toast{margin:22px 0 0;display:block}.weui-icon_toast.weui-icon-success-no-circle:before{color:#fff;font-size:55px}.weui-icon_toast.weui-loading{margin:30px 0 0;width:38px;height:38px;vertical-align:baseline}.weui-toast__content{margin:0 0 15px}.weui-mask{background:rgba(0,0,0,.6)}.weui-mask,.weui-mask_transparent{position:fixed;z-index:2000;top:0;right:0;left:0;bottom:0}.weui-actionsheet{position:fixed;left:0;bottom:0;-webkit-transform:translateY(100%);transform:translateY(100%);-webkit-backface-visibility:hidden;backface-visibility:hidden;z-index:5000;width:100%;background-color:#efeff4;-webkit-transition:-webkit-transform .3s;transition:-webkit-transform .3s;transition:transform .3s;transition:transform .3s,-webkit-transform .3s}.weui-actionsheet__title{position:relative;height:65px;padding:0 20px;line-height:1.4;display:-webkit-box;display:-webkit-flex;display:flex;-webkit-box-pack:center;-webkit-justify-content:center;justify-content:center;-webkit-box-orient:vertical;-webkit-box-direction:normal;-webkit-flex-direction:column;flex-direction:column;text-align:center;font-size:14px;color:#888;background:#fcfcfd}.weui-actionsheet__title:before{content:" ";position:absolute;left:0;bottom:0;right:0;height:1px;border-bottom:1px solid #e5e5e5;color:#e5e5e5;-webkit-transform-origin:0 100%;transform-origin:0 100%;-webkit-transform:scaleY(.5);transform:scaleY(.5)}.weui-actionsheet__title .weui-actionsheet__title-text{overflow:hidden;text-overflow:ellipsis;display:-webkit-box;-webkit-box-orient:vertical;-webkit-line-clamp:2}.weui-actionsheet__menu{background-color:#fcfcfd}.weui-actionsheet__action{margin-top:6px;background-color:#fcfcfd}.weui-actionsheet__cell{position:relative;padding:10px 0;text-align:center;font-size:18px}.weui-actionsheet__cell:before{content:" ";position:absolute;left:0;top:0;right:0;height:1px;border-top:1px solid #e5e5e5;color:#e5e5e5;-webkit-transform-origin:0 0;transform-origin:0 0;-webkit-transform:scaleY(.5);transform:scaleY(.5)}.weui-actionsheet__cell:active{background-color:#ececec}.weui-actionsheet__cell:first-child:before{display:none}.weui-skin_android .weui-actionsheet{position:fixed;left:50%;top:50%;bottom:auto;-webkit-transform:translate(-50%,-50%);transform:translate(-50%,-50%);width:274px;box-sizing:border-box;-webkit-backface-visibility:hidden;backface-visibility:hidden;background:transparent;-webkit-transition:-webkit-transform .3s;transition:-webkit-transform .3s;transition:transform .3s;transition:transform .3s,-webkit-transform .3s}.weui-skin_android .weui-actionsheet__action{display:none}.weui-skin_android .weui-actionsheet__menu{border-radius:2px;box-shadow:0 6px 30px 0 rgba(0,0,0,.1)}.weui-skin_android .weui-actionsheet__cell{padding:13px 24px;font-size:16px;line-height:1.4;text-align:left}.weui-skin_android .weui-actionsheet__cell:first-child{border-top-left-radius:2px;border-top-right-radius:2px}.weui-skin_android .weui-actionsheet__cell:last-child{border-bottom-left-radius:2px;border-bottom-right-radius:2px}.weui-actionsheet_toggle{-webkit-transform:translate(0);transform:translate(0)}.weui-loadmore{width:65%;margin:1.5em auto;line-height:1.6em;font-size:14px;text-align:center}.weui-loadmore__tips{display:inline-block;vertical-align:middle}.weui-loadmore_line{border-top:1px solid #e5e5e5;margin-top:2.4em}.weui-loadmore_line .weui-loadmore__tips{position:relative;top:-.9em;padding:0 .55em;background-color:#fff;color:#999}.weui-loadmore_dot .weui-loadmore__tips{padding:0 .16em}.weui-loadmore_dot .weui-loadmore__tips:before{content:" ";width:4px;height:4px;border-radius:50%;background-color:#e5e5e5;display:inline-block;position:relative;vertical-align:0;top:-.16em}.weui-badge{display:inline-block;padding:.15em .4em;min-width:8px;border-radius:18px;background-color:#f43530;color:#fff;line-height:1.2;text-align:center;font-size:12px;vertical-align:middle}.weui-badge_dot{padding:.4em;min-width:0}.weui-search-bar{position:relative;padding:8px 10px;display:-webkit-box;display:-webkit-flex;display:flex;box-sizing:border-box;background-color:#efeff4}.weui-search-bar:before{top:0;border-top:1px solid #d7d6dc;-webkit-transform-origin:0 0;transform-origin:0 0;-webkit-transform:scaleY(.5);transform:scaleY(.5)}.weui-search-bar:after,.weui-search-bar:before{content:" ";position:absolute;left:0;right:0;height:1px;color:#d7d6dc}.weui-search-bar:after{bottom:0;border-bottom:1px solid #d7d6dc;-webkit-transform-origin:0 100%;transform-origin:0 100%;-webkit-transform:scaleY(.5);transform:scaleY(.5)}.weui-search-bar.weui-search-bar_focusing .weui-search-bar__cancel-btn{display:block}.weui-search-bar.weui-search-bar_focusing .weui-search-bar__label{display:none}.weui-search-bar__form{position:relative;-webkit-box-flex:1;-webkit-flex:auto;flex:auto;background-color:#efeff4}.weui-search-bar__form:after{content:"";position:absolute;left:0;top:0;width:200%;height:200%;-webkit-transform:scale(.5);transform:scale(.5);-webkit-transform-origin:0 0;transform-origin:0 0;border-radius:10px;border:1px solid #e6e6ea;box-sizing:border-box;background:#fff}.weui-search-bar__box{position:relative;padding-left:30px;padding-right:30px;height:100%;width:100%;box-sizing:border-box;z-index:1}.weui-search-bar__box .weui-search-bar__input{padding:4px 0;width:100%;height:1.42857143em;border:0;font-size:14px;line-height:1.42857143em;box-sizing:content-box;background:transparent}.weui-search-bar__box .weui-search-bar__input:focus{outline:none}.weui-search-bar__box .weui-icon-search{position:absolute;left:10px;top:0;line-height:28px}.weui-search-bar__box .weui-icon-clear{position:absolute;top:0;right:0;padding:0 10px;line-height:28px}.weui-search-bar__label{position:absolute;top:1px;right:1px;bottom:1px;left:1px;z-index:2;border-radius:3px;text-align:center;color:#9b9b9b;background:#fff}.weui-search-bar__label span{display:inline-block;font-size:14px;vertical-align:middle}.weui-search-bar__label .weui-icon-search{margin-right:5px}.weui-search-bar__cancel-btn{display:none;margin-left:10px;line-height:28px;color:#09bb07;white-space:nowrap}.weui-search-bar__input:not(:valid)~.weui-icon-clear{display:none}input[type=search]::-webkit-search-cancel-button,input[type=search]::-webkit-search-decoration,input[type=search]::-webkit-search-results-button,input[type=search]::-webkit-search-results-decoration{display:none}.weui-picker{position:fixed;width:100%;left:0;bottom:0;z-index:5000;-webkit-backface-visibility:hidden;backface-visibility:hidden;-webkit-transform:translateY(100%);transform:translateY(100%);-webkit-transition:-webkit-transform .3s;transition:-webkit-transform .3s;transition:transform .3s;transition:transform .3s,-webkit-transform .3s}.weui-picker__hd{display:-webkit-box;display:-webkit-flex;display:flex;padding:9px 15px;background-color:#fff;position:relative;text-align:center;font-size:17px}.weui-picker__hd:after{content:" ";position:absolute;left:0;bottom:0;right:0;height:1px;border-bottom:1px solid #e5e5e5;color:#e5e5e5;-webkit-transform-origin:0 100%;transform-origin:0 100%;-webkit-transform:scaleY(.5);transform:scaleY(.5)}.weui-picker__action{display:block;-webkit-box-flex:1;-webkit-flex:1;flex:1;color:#1aad19}.weui-picker__action:first-child{text-align:left;color:#888}.weui-picker__action:last-child{text-align:right}.weui-picker__bd{display:-webkit-box;display:-webkit-flex;display:flex;position:relative;background-color:#fff;height:238px;overflow:hidden}.weui-picker__group{-webkit-box-flex:1;-webkit-flex:1;flex:1;position:relative;height:100%}.weui-picker__mask{top:0;height:100%;margin:0 auto;background:-webkit-linear-gradient(top,hsla(0,0%,100%,.95),hsla(0,0%,100%,.6)),-webkit-linear-gradient(bottom,hsla(0,0%,100%,.95),hsla(0,0%,100%,.6));background:linear-gradient(180deg,hsla(0,0%,100%,.95),hsla(0,0%,100%,.6)),linear-gradient(0deg,hsla(0,0%,100%,.95),hsla(0,0%,100%,.6));background-position:top,bottom;background-size:100% 102px;background-repeat:no-repeat;-webkit-transform:translateZ(0);transform:translateZ(0)}.weui-picker__indicator,.weui-picker__mask{position:absolute;left:0;width:100%;z-index:3}.weui-picker__indicator{height:34px;top:102px}.weui-picker__indicator:before{top:0;border-top:1px solid #e5e5e5;-webkit-transform-origin:0 0;transform-origin:0 0;-webkit-transform:scaleY(.5);transform:scaleY(.5)}.weui-picker__indicator:after,.weui-picker__indicator:before{content:" ";position:absolute;left:0;right:0;height:1px;color:#e5e5e5}.weui-picker__indicator:after{bottom:0;border-bottom:1px solid #e5e5e5;-webkit-transform-origin:0 100%;transform-origin:0 100%;-webkit-transform:scaleY(.5);transform:scaleY(.5)}.weui-picker__content{position:absolute;top:0;left:0;width:100%}.weui-picker__item{padding:0;height:34px;line-height:34px;text-align:center;color:#000;text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.weui-picker__item_disabled{color:#999}@-webkit-keyframes a{0%{-webkit-transform:translate3d(0,100%,0);transform:translate3d(0,100%,0)}to{-webkit-transform:translateZ(0);transform:translateZ(0)}}@keyframes a{0%{-webkit-transform:translate3d(0,100%,0);transform:translate3d(0,100%,0)}to{-webkit-transform:translateZ(0);transform:translateZ(0)}}.weui-animate-slide-up{-webkit-animation:a ease .3s forwards;animation:a ease .3s forwards}@-webkit-keyframes b{0%{-webkit-transform:translateZ(0);transform:translateZ(0)}to{-webkit-transform:translate3d(0,100%,0);transform:translate3d(0,100%,0)}}@keyframes b{0%{-webkit-transform:translateZ(0);transform:translateZ(0)}to{-webkit-transform:translate3d(0,100%,0);transform:translate3d(0,100%,0)}}.weui-animate-slide-down{-webkit-animation:b ease .3s forwards;animation:b ease .3s forwards}@-webkit-keyframes c{0%{opacity:0}to{opacity:1}}@keyframes c{0%{opacity:0}to{opacity:1}}.weui-animate-fade-in{-webkit-animation:c ease .3s forwards;animation:c ease .3s forwards}@-webkit-keyframes d{0%{opacity:1}to{opacity:0}}@keyframes d{0%{opacity:1}to{opacity:0}}.weui-animate-fade-out{-webkit-animation:d ease .3s forwards;animation:d ease .3s forwards}.weui-agree{display:block;padding:.5em 15px;font-size:13px}.weui-agree a{color:#586c94}.weui-agree__text{color:#999}.weui-agree__checkbox{-webkit-appearance:none;appearance:none;outline:0;font-size:0;border:1px solid #d1d1d1;background-color:#fff;border-radius:3px;width:13px;height:13px;position:relative;vertical-align:0;top:2px}.weui-agree__checkbox:checked:before{font-family:weui;font-style:normal;font-weight:400;font-variant:normal;text-transform:none;text-align:center;speak:none;display:inline-block;vertical-align:middle;text-decoration:inherit;content:"\EA08";color:#09bb07;font-size:13px;position:absolute;top:50%;left:50%;-webkit-transform:translate(-50%,-48%) scale(.73);transform:translate(-50%,-48%) scale(.73)}.weui-agree__checkbox:disabled{background-color:#e1e1e1}.weui-agree__checkbox:disabled:before{color:#adadad}.weui-loading{width:20px;height:20px;display:inline-block;vertical-align:middle;-webkit-animation:e 1s steps(12) infinite;animation:e 1s steps(12) infinite;background:transparent url("data:image/svg+xml;charset=utf8, %3Csvg xmlns='http://www.w3.org/2000/svg' width='120' height='120' viewBox='0 0 100 100'%3E%3Cpath fill='none' d='M0 0h100v100H0z'/%3E%3Crect width='7' height='20' x='46.5' y='40' fill='%23E9E9E9' rx='5' ry='5' transform='translate(0 -30)'/%3E%3Crect width='7' height='20' x='46.5' y='40' fill='%23989697' rx='5' ry='5' transform='rotate(30 105.98 65)'/%3E%3Crect width='7' height='20' x='46.5' y='40' fill='%239B999A' rx='5' ry='5' transform='rotate(60 75.98 65)'/%3E%3Crect width='7' height='20' x='46.5' y='40' fill='%23A3A1A2' rx='5' ry='5' transform='rotate(90 65 65)'/%3E%3Crect width='7' height='20' x='46.5' y='40' fill='%23ABA9AA' rx='5' ry='5' transform='rotate(120 58.66 65)'/%3E%3Crect width='7' height='20' x='46.5' y='40' fill='%23B2B2B2' rx='5' ry='5' transform='rotate(150 54.02 65)'/%3E%3Crect width='7' height='20' x='46.5' y='40' fill='%23BAB8B9' rx='5' ry='5' transform='rotate(180 50 65)'/%3E%3Crect width='7' height='20' x='46.5' y='40' fill='%23C2C0C1' rx='5' ry='5' transform='rotate(-150 45.98 65)'/%3E%3Crect width='7' height='20' x='46.5' y='40' fill='%23CBCBCB' rx='5' ry='5' transform='rotate(-120 41.34 65)'/%3E%3Crect width='7' height='20' x='46.5' y='40' fill='%23D2D2D2' rx='5' ry='5' transform='rotate(-90 35 65)'/%3E%3Crect width='7' height='20' x='46.5' y='40' fill='%23DADADA' rx='5' ry='5' transform='rotate(-60 24.02 65)'/%3E%3Crect width='7' height='20' x='46.5' y='40' fill='%23E2E2E2' rx='5' ry='5' transform='rotate(-30 -5.98 65)'/%3E%3C/svg%3E") no-repeat;background-size:100%}.weui-btn_loading.weui-btn_primary .weui-loading,.weui-btn_loading.weui-btn_warn .weui-loading,.weui-loading.weui-loading_transparent{background-image:url("data:image/svg+xml;charset=utf8, %3Csvg xmlns='http://www.w3.org/2000/svg' width='120' height='120' viewBox='0 0 100 100'%3E%3Cpath fill='none' d='M0 0h100v100H0z'/%3E%3Crect xmlns='http://www.w3.org/2000/svg' width='7' height='20' x='46.5' y='40' fill='rgba(255,255,255,.56)' rx='5' ry='5' transform='translate(0 -30)'/%3E%3Crect width='7' height='20' x='46.5' y='40' fill='rgba(255,255,255,.5)' rx='5' ry='5' transform='rotate(30 105.98 65)'/%3E%3Crect width='7' height='20' x='46.5' y='40' fill='rgba(255,255,255,.43)' rx='5' ry='5' transform='rotate(60 75.98 65)'/%3E%3Crect width='7' height='20' x='46.5' y='40' fill='rgba(255,255,255,.38)' rx='5' ry='5' transform='rotate(90 65 65)'/%3E%3Crect width='7' height='20' x='46.5' y='40' fill='rgba(255,255,255,.32)' rx='5' ry='5' transform='rotate(120 58.66 65)'/%3E%3Crect width='7' height='20' x='46.5' y='40' fill='rgba(255,255,255,.28)' rx='5' ry='5' transform='rotate(150 54.02 65)'/%3E%3Crect width='7' height='20' x='46.5' y='40' fill='rgba(255,255,255,.25)' rx='5' ry='5' transform='rotate(180 50 65)'/%3E%3Crect width='7' height='20' x='46.5' y='40' fill='rgba(255,255,255,.2)' rx='5' ry='5' transform='rotate(-150 45.98 65)'/%3E%3Crect width='7' height='20' x='46.5' y='40' fill='rgba(255,255,255,.17)' rx='5' ry='5' transform='rotate(-120 41.34 65)'/%3E%3Crect width='7' height='20' x='46.5' y='40' fill='rgba(255,255,255,.14)' rx='5' ry='5' transform='rotate(-90 35 65)'/%3E%3Crect width='7' height='20' x='46.5' y='40' fill='rgba(255,255,255,.1)' rx='5' ry='5' transform='rotate(-60 24.02 65)'/%3E%3Crect width='7' height='20' x='46.5' y='40' fill='rgba(255,255,255,.03)' rx='5' ry='5' transform='rotate(-30 -5.98 65)'/%3E%3C/svg%3E")}@-webkit-keyframes e{0%{-webkit-transform:rotate(0deg);transform:rotate(0deg)}to{-webkit-transform:rotate(1turn);transform:rotate(1turn)}}@keyframes e{0%{-webkit-transform:rotate(0deg);transform:rotate(0deg)}to{-webkit-transform:rotate(1turn);transform:rotate(1turn)}}.weui-slider{padding:15px 18px;-webkit-user-select:none;user-select:none}.weui-slider__inner{position:relative;height:2px;background-color:#e9e9e9}.weui-slider__track{height:2px;background-color:#1aad19;width:0}.weui-slider__handler{position:absolute;left:0;top:50%;width:28px;height:28px;margin-left:-14px;margin-top:-14px;border-radius:50%;background-color:#fff;box-shadow:0 0 4px rgba(0,0,0,.2)}.weui-slider-box{display:-webkit-box;display:-webkit-flex;display:flex;-webkit-box-align:center;-webkit-align-items:center;align-items:center}.weui-slider-box .weui-slider{-webkit-box-flex:1;-webkit-flex:1;flex:1}.weui-slider-box__value{margin-left:.5em;min-width:24px;color:#888;text-align:center;font-size:14px}
\ No newline at end of file
diff --git a/oauth/src/main/resources/templates/login.html b/oauth/src/main/resources/templates/login.html
index ac69dd1..f3ef3d6 100644
--- a/oauth/src/main/resources/templates/login.html
+++ b/oauth/src/main/resources/templates/login.html
@@ -6,74 +6,38 @@
<meta name="_csrf" th:content="${_csrf.token}"/>
<!-- default header name is X-CSRF-TOKEN -->
<meta name="_csrf_header" th:content="${_csrf.headerName}"/>
+ <link rel="stylesheet" type="text/css" th:href="@{/static/css/weui.min.css}"/>
+ <link rel="stylesheet" type="text/css" th:href="@{/static/css/jquery-weui.css}"/>
</head>
<body>
-<div class="login-wrapper">
- <div class=" login-body">
- <div class="layui-card">
- <div class="layui-card-header">
- <i class="layui-icon layui-icon-engine"></i> 统一身份认证
+<p style="color:red;padding: 0 0 10px 0;"
+ th:if="${session['SPRING_SECURITY_LAST_EXCEPTION']!=null and session['SPRING_SECURITY_LAST_EXCEPTION'].message!=null}"
+ th:text="${session['SPRING_SECURITY_LAST_EXCEPTION'].message}"></p>
+<form th:action="@{/login/form}" method="post">
+ <input type="hidden"
+ th:name="${_csrf.parameterName}"
+ th:value="${_csrf.token}"/>
+ <div class="weui-cells__title">统一身份认证</div>
+ <div class="weui-cells" style="margin-top:30%;">
+ <div class="weui-cell">
+ <div class="weui-cell__hd">
+ <label class="weui-label">账号</label>
</div>
- <div class="layui-card-body layui-form layui-form-pane">
- <p style="color:red;padding: 0 0 10px 0;" th:if="${session['SPRING_SECURITY_LAST_EXCEPTION']!=null and session['SPRING_SECURITY_LAST_EXCEPTION'].message!=null}" th:text="${session['SPRING_SECURITY_LAST_EXCEPTION'].message}"></p>
- <form th:action="@{/login/form}" method="post">
- <div class="layui-form-item">
- <label class="layui-form-label"><i class="layui-icon layui-icon-username"></i></label>
- <div class="layui-input-block">
- <input name="username" type="text" lay-verify="required" placeholder="账号"
- class="layui-input">
- <input type="hidden"
- th:name="${_csrf.parameterName}"
- th:value="${_csrf.token}"/>
- </div>
- </div>
- <div class="layui-form-item">
- <label class="layui-form-label"><i class="layui-icon layui-icon-password"></i></label>
- <div class="layui-input-block">
- <input name="password" type="password" lay-verify="required" placeholder="密码"
- class="layui-input">
- </div>
- </div>
- <div class="layui-form-item">
- <label class="layui-form-label"><i class="layui-icon layui-icon-vercode"></i></label>
- <div class="layui-input-block">
- <div class="layui-row inline-block">
- <div class="layui-col-xs7">
- <input name="verifyCodeActual" type="text" placeholder="验证码"
- class="layui-input">
- </div>
- <div class="layui-col-xs5" style="padding-left: 10px;">
- <img width="100px" height="35px" class="login-captcha" th:src="@{/code/image}">
- </div>
- </div>
- </div>
- </div>
- <div class="layui-form-item">
- <!--<a href="javascript:;" class="layui-link">帐号注册</a>-->
- <a href="javascript:;" class="layui-link pull-right">忘记密码?</a>
- </div>
- <div class="layui-form-item">
- <button type="submit" lay-filter="login-submit" class="layui-btn layui-btn-fluid" lay-submit>登 录</button>
- </div>
- </form>
- <!--<div class="layui-form-item login-other">-->
- <!--<label>第三方登录</label>-->
- <!--<a href="javascript:;"><i class="layui-icon layui-icon-login-qq"></i></a>-->
- <!--<a href="javascript:;"><i class="layui-icon layui-icon-login-wechat"></i></a>-->
- <!--<a href="javascript:;"><i class="layui-icon layui-icon-login-weibo"></i></a>-->
- <!--</div>-->
+ <div class="weui-cell__bd">
+ <input class="weui-input" type="text" id="username" name="username" placeholder="学工号、手机号、邮箱">
</div>
</div>
- </div>
+ <div class="weui-cell">
+ <div class="weui-cell__hd">
+ <label class="weui-label">密码</label>
+ </div>
+ <div class="weui-cell__bd">
+ <input class="weui-input" type="password" id="password" name="password" placeholder="请输入密码">
+ </div>
+ </div>
- <div class="login-footer">
- <p>© 2019 <a href="javascript:;" target="_blank">上海树维信息科技有限公司 版权所有</a></p>
- <!--<p>-->
- <!--<span><a href="javascript:;" target="_blank">前往github</a></span>-->
- <!--<span><a href="https://gitee.com/andyzy/zy-admin.git" target="_blank">前往gitee</a></span>-->
- <!--<span><a href="javascript:;" target="_blank">文档说明</a></span>-->
- <!--</p>-->
</div>
-</div>
+ <button type="submit" class="weui-btn weui-btn_plain-primary">登 录</button>
+</form>
</body>
</html>
\ No newline at end of file