Compare commits
3 Commits
e7cb01269a
...
ce5f4035d3
Author | SHA1 | Date |
---|---|---|
hcy | ce5f4035d3 | 2 weeks ago |
hcy | 55c98067ef | 2 weeks ago |
hcy | 8b0bc547ca | 2 weeks ago |
@ -0,0 +1,8 @@
|
|||||||
|
# 默认忽略的文件
|
||||||
|
/shelf/
|
||||||
|
/workspace.xml
|
||||||
|
# 基于编辑器的 HTTP 客户端请求
|
||||||
|
/httpRequests/
|
||||||
|
# Datasource local storage ignored files
|
||||||
|
/dataSources/
|
||||||
|
/dataSources.local.xml
|
@ -0,0 +1,9 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<module type="JAVA_MODULE" version="4">
|
||||||
|
<component name="NewModuleRootManager" inherit-compiler-output="true">
|
||||||
|
<exclude-output />
|
||||||
|
<content url="file://$MODULE_DIR$" />
|
||||||
|
<orderEntry type="inheritedJdk" />
|
||||||
|
<orderEntry type="sourceFolder" forTests="false" />
|
||||||
|
</component>
|
||||||
|
</module>
|
@ -0,0 +1,6 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<project version="4">
|
||||||
|
<component name="ProjectRootManager" version="2" languageLevel="JDK_17" project-jdk-name="17" project-jdk-type="JavaSDK">
|
||||||
|
<output url="file://$PROJECT_DIR$/out" />
|
||||||
|
</component>
|
||||||
|
</project>
|
@ -0,0 +1,8 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<project version="4">
|
||||||
|
<component name="ProjectModuleManager">
|
||||||
|
<modules>
|
||||||
|
<module fileurl="file://$PROJECT_DIR$/.idea/dachuang.iml" filepath="$PROJECT_DIR$/.idea/dachuang.iml" />
|
||||||
|
</modules>
|
||||||
|
</component>
|
||||||
|
</project>
|
@ -0,0 +1,33 @@
|
|||||||
|
HELP.md
|
||||||
|
target/
|
||||||
|
!.mvn/wrapper/maven-wrapper.jar
|
||||||
|
!**/src/main/**/target/
|
||||||
|
!**/src/test/**/target/
|
||||||
|
|
||||||
|
### STS ###
|
||||||
|
.apt_generated
|
||||||
|
.classpath
|
||||||
|
.factorypath
|
||||||
|
.project
|
||||||
|
.settings
|
||||||
|
.springBeans
|
||||||
|
.sts4-cache
|
||||||
|
|
||||||
|
### IntelliJ IDEA ###
|
||||||
|
.idea
|
||||||
|
*.iws
|
||||||
|
*.iml
|
||||||
|
*.ipr
|
||||||
|
|
||||||
|
### NetBeans ###
|
||||||
|
/nbproject/private/
|
||||||
|
/nbbuild/
|
||||||
|
/dist/
|
||||||
|
/nbdist/
|
||||||
|
/.nb-gradle/
|
||||||
|
build/
|
||||||
|
!**/src/main/**/build/
|
||||||
|
!**/src/test/**/build/
|
||||||
|
|
||||||
|
### VS Code ###
|
||||||
|
.vscode/
|
@ -0,0 +1,71 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
||||||
|
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
|
||||||
|
<modelVersion>4.0.0</modelVersion>
|
||||||
|
<parent>
|
||||||
|
<groupId>org.springframework.boot</groupId>
|
||||||
|
<artifactId>spring-boot-starter-parent</artifactId>
|
||||||
|
<version>3.2.3</version>
|
||||||
|
<relativePath/> <!-- lookup parent from repository -->
|
||||||
|
</parent>
|
||||||
|
<groupId>com.sa</groupId>
|
||||||
|
<artifactId>bigevent</artifactId>
|
||||||
|
<version>0.0.1-SNAPSHOT</version>
|
||||||
|
<name>bigevent</name>
|
||||||
|
<description>bigevent</description>
|
||||||
|
<properties>
|
||||||
|
<java.version>17</java.version>
|
||||||
|
</properties>
|
||||||
|
<dependencies>
|
||||||
|
<dependency>
|
||||||
|
<groupId>org.springframework.boot</groupId>
|
||||||
|
<artifactId>spring-boot-starter-web</artifactId>
|
||||||
|
</dependency>
|
||||||
|
<dependency>
|
||||||
|
<groupId>org.mybatis.spring.boot</groupId>
|
||||||
|
<artifactId>mybatis-spring-boot-starter</artifactId>
|
||||||
|
<version>3.0.3</version>
|
||||||
|
</dependency>
|
||||||
|
|
||||||
|
<dependency>
|
||||||
|
<groupId>com.mysql</groupId>
|
||||||
|
<artifactId>mysql-connector-j</artifactId>
|
||||||
|
<scope>runtime</scope>
|
||||||
|
</dependency>
|
||||||
|
<dependency>
|
||||||
|
<groupId>org.springframework.boot</groupId>
|
||||||
|
<artifactId>spring-boot-starter-test</artifactId>
|
||||||
|
<scope>test</scope>
|
||||||
|
</dependency>
|
||||||
|
<dependency>
|
||||||
|
<groupId>org.mybatis.spring.boot</groupId>
|
||||||
|
<artifactId>mybatis-spring-boot-starter-test</artifactId>
|
||||||
|
<version>3.0.3</version>
|
||||||
|
<scope>test</scope>
|
||||||
|
</dependency>
|
||||||
|
<dependency>
|
||||||
|
<groupId>org.projectlombok</groupId>
|
||||||
|
<artifactId>lombok</artifactId>
|
||||||
|
<scope>annotationProcessor</scope>
|
||||||
|
</dependency>
|
||||||
|
<dependency>
|
||||||
|
<groupId>org.springframework.boot</groupId>
|
||||||
|
<artifactId>spring-boot-starter-validation</artifactId>
|
||||||
|
</dependency>
|
||||||
|
<dependency>
|
||||||
|
<groupId>com.auth0</groupId>
|
||||||
|
<artifactId>java-jwt</artifactId>
|
||||||
|
<version>4.4.0</version>
|
||||||
|
</dependency>
|
||||||
|
</dependencies>
|
||||||
|
|
||||||
|
<build>
|
||||||
|
<plugins>
|
||||||
|
<plugin>
|
||||||
|
<groupId>org.springframework.boot</groupId>
|
||||||
|
<artifactId>spring-boot-maven-plugin</artifactId>
|
||||||
|
</plugin>
|
||||||
|
</plugins>
|
||||||
|
</build>
|
||||||
|
|
||||||
|
</project>
|
@ -0,0 +1,61 @@
|
|||||||
|
CREATE TABLE reports (
|
||||||
|
id BIGINT AUTO_INCREMENT PRIMARY KEY,
|
||||||
|
name TEXT,
|
||||||
|
selectedTime TEXT,
|
||||||
|
selectedDate TEXT,
|
||||||
|
license TEXT,
|
||||||
|
acftType TEXT,
|
||||||
|
fixstage TEXT,
|
||||||
|
fixcheck TEXT,
|
||||||
|
aarcstatus TEXT,
|
||||||
|
phase TEXT,
|
||||||
|
wether TEXT,
|
||||||
|
lightCondition TEXT,
|
||||||
|
carone TEXT,
|
||||||
|
cartwo TEXT,
|
||||||
|
workPosition TEXT,
|
||||||
|
task TEXT,
|
||||||
|
plan TEXT,
|
||||||
|
ats TEXT,
|
||||||
|
atc TEXT,
|
||||||
|
tcas TEXT,
|
||||||
|
advise TEXT,
|
||||||
|
involve TEXT,
|
||||||
|
tudentType TEXT,
|
||||||
|
acft0Type TEXT,
|
||||||
|
task0 TEXT,
|
||||||
|
plan0 TEXT,
|
||||||
|
phase0 TEXT,
|
||||||
|
wether0 TEXT,
|
||||||
|
lightCondition0 TEXT,
|
||||||
|
ats0 TEXT,
|
||||||
|
atc0 TEXT,
|
||||||
|
tcas0 TEXT,
|
||||||
|
advise0 TEXT,
|
||||||
|
inputValue1 TEXT,
|
||||||
|
inputValue2 TEXT,
|
||||||
|
inputValue3 TEXT,
|
||||||
|
inputValue4 TEXT,
|
||||||
|
inputValue5 TEXT,
|
||||||
|
inputValue6 TEXT,
|
||||||
|
inputValue7 TEXT,
|
||||||
|
inputValue8 TEXT,
|
||||||
|
inputValue9 TEXT,
|
||||||
|
inputValue10 TEXT,
|
||||||
|
inputValue11 TEXT,
|
||||||
|
inputValue12 TEXT,
|
||||||
|
inputValue13 TEXT,
|
||||||
|
inputValue14 TEXT,
|
||||||
|
inputValue15 TEXT,
|
||||||
|
inputValue16 TEXT,
|
||||||
|
inputValue17 TEXT,
|
||||||
|
inputValue18 TEXT,
|
||||||
|
inputValue19 TEXT,
|
||||||
|
inputValue20 TEXT,
|
||||||
|
inputValue21 TEXT,
|
||||||
|
inputValue22 TEXT,
|
||||||
|
inputValue23 TEXT,
|
||||||
|
inputValue100 TEXT,
|
||||||
|
inputValue101 TEXT,
|
||||||
|
inputValue102 TEXT
|
||||||
|
);
|
@ -0,0 +1,15 @@
|
|||||||
|
package com.sa.unsafeincidents;
|
||||||
|
|
||||||
|
import org.springframework.boot.SpringApplication;
|
||||||
|
import org.springframework.boot.autoconfigure.SpringBootApplication;
|
||||||
|
|
||||||
|
@SpringBootApplication
|
||||||
|
public class UnsafeincidentsApplication {
|
||||||
|
|
||||||
|
public static void main(String[] args) {
|
||||||
|
|
||||||
|
SpringApplication.run(UnsafeincidentsApplication.class, args);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
@ -0,0 +1,20 @@
|
|||||||
|
//package com.sa.unsafeincidents.config;
|
||||||
|
//
|
||||||
|
//import com.sa.unsafeincidents.interceptors.LoginInterceptor;
|
||||||
|
//import org.springframework.beans.factory.annotation.Autowired;
|
||||||
|
//import org.springframework.context.annotation.Configuration;
|
||||||
|
//import org.springframework.web.bind.annotation.RestController;
|
||||||
|
//import org.springframework.web.servlet.config.annotation.InterceptorRegistry;
|
||||||
|
//import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
|
||||||
|
//
|
||||||
|
//@Configuration
|
||||||
|
//public class webconfig implements WebMvcConfigurer {
|
||||||
|
//
|
||||||
|
// @Autowired
|
||||||
|
// private LoginInterceptor loginInterceptor;
|
||||||
|
//
|
||||||
|
// @Override
|
||||||
|
// public void addInterceptors(InterceptorRegistry registry) {
|
||||||
|
// registry.addInterceptor(loginInterceptor).excludePathPatterns("/user/login", "/user/register");
|
||||||
|
// }
|
||||||
|
//}
|
@ -0,0 +1,53 @@
|
|||||||
|
package com.sa.unsafeincidents.controller;
|
||||||
|
import com.sa.unsafeincidents.pojo.Report;
|
||||||
|
import com.sa.unsafeincidents.pojo.Result;
|
||||||
|
import com.sa.unsafeincidents.pojo.User;
|
||||||
|
import com.sa.unsafeincidents.service.ReportService;
|
||||||
|
import com.sa.unsafeincidents.service.UserService;
|
||||||
|
import com.sa.unsafeincidents.utils.ThreadLocalUtil;
|
||||||
|
import org.springframework.beans.factory.annotation.Autowired;
|
||||||
|
import org.springframework.web.bind.annotation.*;
|
||||||
|
|
||||||
|
import java.util.List;
|
||||||
|
import java.util.Map;
|
||||||
|
|
||||||
|
@RestController
|
||||||
|
@RequestMapping("/report")
|
||||||
|
public class ReportController {
|
||||||
|
@Autowired
|
||||||
|
ReportService reportService;
|
||||||
|
|
||||||
|
@Autowired
|
||||||
|
UserService userService;
|
||||||
|
|
||||||
|
@PostMapping("/add")
|
||||||
|
public Result add(@RequestBody Report form) {
|
||||||
|
reportService.add(form);
|
||||||
|
System.out.println("test");
|
||||||
|
return Result.success();
|
||||||
|
}
|
||||||
|
|
||||||
|
@GetMapping("/get")
|
||||||
|
public Result<Report> get(Integer id) {
|
||||||
|
return Result.success(reportService.findByID(id));
|
||||||
|
}
|
||||||
|
|
||||||
|
@PostMapping("/reply")
|
||||||
|
public Result reply(Integer id, String reply) {
|
||||||
|
reportService.reply(id, reply);
|
||||||
|
return Result.success();
|
||||||
|
}
|
||||||
|
|
||||||
|
@GetMapping("/list")
|
||||||
|
public Result<List<Report>> list() {
|
||||||
|
// Map<String,Object> claims = ThreadLocalUtil.get();
|
||||||
|
// String username = (String) claims.get("username");
|
||||||
|
// User user = userService.findByUsername(username);
|
||||||
|
// if (user.getPermissions() == 1) {
|
||||||
|
return Result.success(reportService.list());
|
||||||
|
// } else {
|
||||||
|
// List<Report> reports = reportService.list(username);
|
||||||
|
// return Result.success(reports);
|
||||||
|
// }
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,60 @@
|
|||||||
|
package com.sa.unsafeincidents.controller;
|
||||||
|
|
||||||
|
|
||||||
|
import com.sa.unsafeincidents.pojo.Result;
|
||||||
|
import com.sa.unsafeincidents.pojo.User;
|
||||||
|
import com.sa.unsafeincidents.service.UserService;
|
||||||
|
import com.sa.unsafeincidents.utils.JwtUtil;
|
||||||
|
import com.sa.unsafeincidents.utils.Md5Util;
|
||||||
|
import com.sa.unsafeincidents.utils.ThreadLocalUtil;
|
||||||
|
import org.springframework.beans.factory.annotation.Autowired;
|
||||||
|
import org.springframework.web.bind.annotation.*;
|
||||||
|
|
||||||
|
import java.util.HashMap;
|
||||||
|
import java.util.Map;
|
||||||
|
|
||||||
|
@RestController
|
||||||
|
@RequestMapping("/user")
|
||||||
|
public class UserController {
|
||||||
|
@Autowired
|
||||||
|
UserService userService;
|
||||||
|
|
||||||
|
@PostMapping("/register")
|
||||||
|
public Result register(String username, String password) {
|
||||||
|
User user = userService.findByUsername(username);
|
||||||
|
|
||||||
|
if (user == null) {
|
||||||
|
userService.register(username, password);
|
||||||
|
return Result.success();
|
||||||
|
} else {
|
||||||
|
return Result.error("用户已存在");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@GetMapping("/is_admin")
|
||||||
|
public Result is_admin() {
|
||||||
|
Map<String,Object> claims = ThreadLocalUtil.get();
|
||||||
|
String username = (String) claims.get("username");
|
||||||
|
// System.out.println(username);
|
||||||
|
User user = userService.findByUsername(username);
|
||||||
|
if (user.getPermissions() == 1) return Result.success(true);
|
||||||
|
return Result.success(false);
|
||||||
|
}
|
||||||
|
|
||||||
|
@PostMapping("/login")
|
||||||
|
public Result login(String username,String password) {
|
||||||
|
User loginuser = userService.findByUsername(username);
|
||||||
|
|
||||||
|
// System.out.println(username + ' ' + password);
|
||||||
|
|
||||||
|
if (loginuser == null || !loginuser.getPassword().equals(Md5Util.getMD5String(password))) {
|
||||||
|
return Result.error("用户名或密码错误");
|
||||||
|
} else {
|
||||||
|
Map<String,Object> claims = new HashMap<>();
|
||||||
|
claims.put("id",loginuser.getId());
|
||||||
|
claims.put("username",loginuser.getUsername());
|
||||||
|
String token = JwtUtil.genToken(claims);
|
||||||
|
return Result.success(token);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,18 @@
|
|||||||
|
package com.sa.unsafeincidents.exception;
|
||||||
|
|
||||||
|
|
||||||
|
import com.sa.unsafeincidents.pojo.Result;
|
||||||
|
import org.springframework.util.StringUtils;
|
||||||
|
import org.springframework.web.bind.annotation.ExceptionHandler;
|
||||||
|
import org.springframework.web.bind.annotation.RestControllerAdvice;
|
||||||
|
|
||||||
|
@RestControllerAdvice
|
||||||
|
public class GlobalExceptionHandle {
|
||||||
|
|
||||||
|
|
||||||
|
@ExceptionHandler(Exception.class)
|
||||||
|
public Result HandleException(Exception e) {
|
||||||
|
e.printStackTrace();
|
||||||
|
return Result.error(StringUtils.hasLength(e.getMessage())? e.getMessage():"操作失败");
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,31 @@
|
|||||||
|
//package com.sa.unsafeincidents.interceptors;
|
||||||
|
//
|
||||||
|
//import com.sa.unsafeincidents.utils.JwtUtil;
|
||||||
|
//import com.sa.unsafeincidents.utils.ThreadLocalUtil;
|
||||||
|
//import jakarta.servlet.http.HttpServletRequest;
|
||||||
|
//import jakarta.servlet.http.HttpServletResponse;
|
||||||
|
//import org.springframework.stereotype.Component;
|
||||||
|
//import org.springframework.web.servlet.HandlerInterceptor;
|
||||||
|
//import org.springframework.web.servlet.ModelAndView;
|
||||||
|
//
|
||||||
|
//@Component
|
||||||
|
//public class LoginInterceptor implements HandlerInterceptor {
|
||||||
|
//
|
||||||
|
// @Override
|
||||||
|
// public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
|
||||||
|
// String token = request.getHeader("Authorization");
|
||||||
|
// try {
|
||||||
|
// ThreadLocalUtil.set(JwtUtil.parseToken(token));
|
||||||
|
// return true;
|
||||||
|
// } catch (Exception e) {
|
||||||
|
// response.setStatus(401);
|
||||||
|
// return false;
|
||||||
|
// }
|
||||||
|
// }
|
||||||
|
//
|
||||||
|
//
|
||||||
|
// @Override
|
||||||
|
// public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {
|
||||||
|
// ThreadLocalUtil.remove();
|
||||||
|
// }
|
||||||
|
//}
|
@ -0,0 +1,90 @@
|
|||||||
|
package com.sa.unsafeincidents.mapper;
|
||||||
|
|
||||||
|
import com.sa.unsafeincidents.pojo.Report;
|
||||||
|
import org.apache.ibatis.annotations.*;
|
||||||
|
|
||||||
|
import java.util.ArrayList;
|
||||||
|
|
||||||
|
@Mapper
|
||||||
|
public interface ReportMapper {
|
||||||
|
|
||||||
|
@Insert("INSERT INTO reports (name, selectedTime, selectedDate, license, acftType, fixstage, fixcheck, aarcstatus, phase, wether, lightCondition, carone, cartwo, workPosition, task, plan, ats, atc, tcas, advise, involve, tudentType, acft0Type, task0, plan0, phase0, wether0, lightCondition0, ats0, atc0, tcas0, advise0, inputValue1, inputValue2, inputValue3, inputValue4, inputValue5, inputValue6, inputValue7, inputValue8, inputValue9, inputValue10, inputValue11, inputValue12, inputValue13, inputValue14, inputValue15, inputValue16, inputValue17, inputValue18, inputValue19, inputValue20, inputValue21, inputValue22, inputValue23, inputValue100, inputValue101, inputValue102, reply) " +
|
||||||
|
"VALUES (#{name}, #{selectedTime}, #{selectedDate}, #{license}, #{acftType}, #{fixstage}, #{fixcheck}, #{aarcstatus}, #{phase}, #{wether}, #{lightCondition}, #{carone}, #{cartwo}, #{workPosition}, #{task}, #{plan}, #{ats}, #{atc}, #{tcas}, #{advise}, #{involve}, #{tudentType}, #{acft0Type}, #{task0}, #{plan0}, #{phase0}, #{wether0}, #{lightCondition0}, #{ats0}, #{atc0}, #{tcas0}, #{advise0}, #{inputValue1}, #{inputValue2}, #{inputValue3}, #{inputValue4}, #{inputValue5}, #{inputValue6}, #{inputValue7}, #{inputValue8}, #{inputValue9}, #{inputValue10}, #{inputValue11}, #{inputValue12}, #{inputValue13}, #{inputValue14}, #{inputValue15}, #{inputValue16}, #{inputValue17}, #{inputValue18}, #{inputValue19}, #{inputValue20}, #{inputValue21}, #{inputValue22}, #{inputValue23}, #{inputValue100}, #{inputValue101}, #{inputValue102}, #{reply})")
|
||||||
|
void add(Report report);
|
||||||
|
|
||||||
|
@Delete("DELETE FROM reports WHERE id = #{id}")
|
||||||
|
void deleteById(Long id);
|
||||||
|
|
||||||
|
@Select("select * from reports where name=#{name}")
|
||||||
|
ArrayList<Report> findByName(String name);
|
||||||
|
|
||||||
|
@Select("select * from reports")
|
||||||
|
ArrayList<Report> list();
|
||||||
|
|
||||||
|
@Select("select * from reports where id=#{id}")
|
||||||
|
Report findByID(Integer id);
|
||||||
|
|
||||||
|
@Update("UPDATE reports SET " +
|
||||||
|
"name = #{name}, " +
|
||||||
|
"selectedTime = #{selectedTime}, " +
|
||||||
|
"selectedDate = #{selectedDate}, " +
|
||||||
|
"license = #{license}, " +
|
||||||
|
"acftType = #{acftType}, " +
|
||||||
|
"fixstage = #{fixstage}, " +
|
||||||
|
"fixcheck = #{fixcheck}, " +
|
||||||
|
"aarcstatus = #{aarcstatus}, " +
|
||||||
|
"phase = #{phase}, " +
|
||||||
|
"wether = #{wether}, " +
|
||||||
|
"lightCondition = #{lightCondition}, " +
|
||||||
|
"carone = #{carone}, " +
|
||||||
|
"cartwo = #{cartwo}, " +
|
||||||
|
"workPosition = #{workPosition}, " +
|
||||||
|
"task = #{task}, " +
|
||||||
|
"plan = #{plan}, " +
|
||||||
|
"ats = #{ats}, " +
|
||||||
|
"atc = #{atc}, " +
|
||||||
|
"tcas = #{tcas}, " +
|
||||||
|
"advise = #{advise}, " +
|
||||||
|
"involve = #{involve}, " +
|
||||||
|
"tudentType = #{tudentType}, " +
|
||||||
|
"acft0Type = #{acft0Type}, " +
|
||||||
|
"task0 = #{task0}, " +
|
||||||
|
"plan0 = #{plan0}, " +
|
||||||
|
"phase0 = #{phase0}, " +
|
||||||
|
"wether0 = #{wether0}, " +
|
||||||
|
"lightCondition0 = #{lightCondition0}, " +
|
||||||
|
"ats0 = #{ats0}, " +
|
||||||
|
"atc0 = #{atc0}, " +
|
||||||
|
"tcas0 = #{tcas0}, " +
|
||||||
|
"advise0 = #{advise0}, " +
|
||||||
|
"inputValue1 = #{inputValue1}, " +
|
||||||
|
"inputValue2 = #{inputValue2}, " +
|
||||||
|
"inputValue3 = #{inputValue3}, " +
|
||||||
|
"inputValue4 = #{inputValue4}, " +
|
||||||
|
"inputValue5 = #{inputValue5}, " +
|
||||||
|
"inputValue6 = #{inputValue6}, " +
|
||||||
|
"inputValue7 = #{inputValue7}, " +
|
||||||
|
"inputValue8 = #{inputValue8}, " +
|
||||||
|
"inputValue9 = #{inputValue9}, " +
|
||||||
|
"inputValue10 = #{inputValue10}, " +
|
||||||
|
"inputValue11 = #{inputValue11}, " +
|
||||||
|
"inputValue12 = #{inputValue12}, " +
|
||||||
|
"inputValue13 = #{inputValue13}, " +
|
||||||
|
"inputValue14 = #{inputValue14}, " +
|
||||||
|
"inputValue15 = #{inputValue15}, " +
|
||||||
|
"inputValue16 = #{inputValue16}, " +
|
||||||
|
"inputValue17 = #{inputValue17}, " +
|
||||||
|
"inputValue18 = #{inputValue18}, " +
|
||||||
|
"inputValue19 = #{inputValue19}, " +
|
||||||
|
"inputValue20 = #{inputValue20}, " +
|
||||||
|
"inputValue21 = #{inputValue21}, " +
|
||||||
|
"inputValue22 = #{inputValue22}, " +
|
||||||
|
"inputValue23 = #{inputValue23}, " +
|
||||||
|
"inputValue100 = #{inputValue100}, " +
|
||||||
|
"inputValue101 = #{inputValue101}, " +
|
||||||
|
"inputValue102 = #{inputValue102}, " +
|
||||||
|
"reply = #{reply} " +
|
||||||
|
"WHERE id = #{id}")
|
||||||
|
void update(Integer id,Report report);
|
||||||
|
|
||||||
|
}
|
@ -0,0 +1,18 @@
|
|||||||
|
package com.sa.unsafeincidents.mapper;
|
||||||
|
|
||||||
|
import com.sa.unsafeincidents.pojo.User;
|
||||||
|
import org.apache.ibatis.annotations.Insert;
|
||||||
|
import org.apache.ibatis.annotations.Mapper;
|
||||||
|
import org.apache.ibatis.annotations.Select;
|
||||||
|
|
||||||
|
@Mapper
|
||||||
|
public interface UserMapper {
|
||||||
|
|
||||||
|
@Select("select * from users where username = #{username}")
|
||||||
|
User findByUsername(String username);
|
||||||
|
|
||||||
|
|
||||||
|
@Insert("INSERT INTO users (username, password, create_time, update_time) " +
|
||||||
|
"VALUES (#{username}, #{md5Password}, NOW(), NOW())")
|
||||||
|
void register(String username, String md5Password);
|
||||||
|
}
|
@ -0,0 +1,68 @@
|
|||||||
|
package com.sa.unsafeincidents.pojo;
|
||||||
|
|
||||||
|
import lombok.Data;
|
||||||
|
|
||||||
|
@Data
|
||||||
|
public class Report {
|
||||||
|
private Integer id;
|
||||||
|
private String username;
|
||||||
|
private String name;
|
||||||
|
private String selectedTime;
|
||||||
|
private String selectedDate;
|
||||||
|
private String license;
|
||||||
|
private String acftType;
|
||||||
|
private String fixstage;
|
||||||
|
private String fixcheck;
|
||||||
|
private String aarcstatus;
|
||||||
|
private String phase;
|
||||||
|
private String wether;
|
||||||
|
private String lightCondition;
|
||||||
|
private String carone;
|
||||||
|
private String cartwo;
|
||||||
|
private String workPosition;
|
||||||
|
private String task;
|
||||||
|
private String plan;
|
||||||
|
private String ats;
|
||||||
|
private String atc;
|
||||||
|
private String tcas;
|
||||||
|
private String advise;
|
||||||
|
private String involve;
|
||||||
|
private String tudentType;
|
||||||
|
private String acft0Type;
|
||||||
|
private String task0;
|
||||||
|
private String plan0;
|
||||||
|
private String phase0;
|
||||||
|
private String wether0;
|
||||||
|
private String lightCondition0;
|
||||||
|
private String ats0;
|
||||||
|
private String atc0;
|
||||||
|
private String tcas0;
|
||||||
|
private String advise0;
|
||||||
|
private String inputValue1;
|
||||||
|
private String inputValue2;
|
||||||
|
private String inputValue3;
|
||||||
|
private String inputValue4;
|
||||||
|
private String inputValue5;
|
||||||
|
private String inputValue6;
|
||||||
|
private String inputValue7;
|
||||||
|
private String inputValue8;
|
||||||
|
private String inputValue9;
|
||||||
|
private String inputValue10;
|
||||||
|
private String inputValue11;
|
||||||
|
private String inputValue12;
|
||||||
|
private String inputValue13;
|
||||||
|
private String inputValue14;
|
||||||
|
private String inputValue15;
|
||||||
|
private String inputValue16;
|
||||||
|
private String inputValue17;
|
||||||
|
private String inputValue18;
|
||||||
|
private String inputValue19;
|
||||||
|
private String inputValue20;
|
||||||
|
private String inputValue21;
|
||||||
|
private String inputValue22;
|
||||||
|
private String inputValue23;
|
||||||
|
private String inputValue100;
|
||||||
|
private String inputValue101;
|
||||||
|
private String inputValue102;
|
||||||
|
private String reply;
|
||||||
|
}
|
@ -0,0 +1,31 @@
|
|||||||
|
package com.sa.unsafeincidents.pojo;
|
||||||
|
|
||||||
|
|
||||||
|
//统一响应结果
|
||||||
|
|
||||||
|
import lombok.AllArgsConstructor;
|
||||||
|
import lombok.Data;
|
||||||
|
import lombok.NoArgsConstructor;
|
||||||
|
|
||||||
|
@NoArgsConstructor
|
||||||
|
@AllArgsConstructor
|
||||||
|
@Data
|
||||||
|
public class Result<T> {
|
||||||
|
private Integer code;//业务状态码 0-成功 1-失败
|
||||||
|
private String message;//提示信息
|
||||||
|
private T data;//响应数据
|
||||||
|
|
||||||
|
//快速返回操作成功响应结果(带响应数据)
|
||||||
|
public static <E> Result<E> success(E data) {
|
||||||
|
return new Result<>(0, "操作成功", data);
|
||||||
|
}
|
||||||
|
|
||||||
|
//快速返回操作成功响应结果
|
||||||
|
public static Result success() {
|
||||||
|
return new Result(0, "操作成功", null);
|
||||||
|
}
|
||||||
|
|
||||||
|
public static Result error(String message) {
|
||||||
|
return new Result(1, message, null);
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,17 @@
|
|||||||
|
package com.sa.unsafeincidents.pojo;
|
||||||
|
|
||||||
|
import com.fasterxml.jackson.annotation.JsonIgnore;
|
||||||
|
import lombok.Data;
|
||||||
|
|
||||||
|
import java.time.LocalDateTime;
|
||||||
|
|
||||||
|
@Data
|
||||||
|
public class User {
|
||||||
|
private Integer id;//主键ID
|
||||||
|
private String username;//用户名
|
||||||
|
@JsonIgnore
|
||||||
|
private String password;//密码
|
||||||
|
private Integer permissions;
|
||||||
|
private LocalDateTime createTime;//创建时间
|
||||||
|
private LocalDateTime updateTime;//更新时间
|
||||||
|
}
|
@ -0,0 +1,17 @@
|
|||||||
|
package com.sa.unsafeincidents.service;
|
||||||
|
|
||||||
|
import com.sa.unsafeincidents.pojo.Report;
|
||||||
|
|
||||||
|
import java.util.ArrayList;
|
||||||
|
|
||||||
|
public interface ReportService {
|
||||||
|
|
||||||
|
void add(Report form);
|
||||||
|
|
||||||
|
ArrayList<Report> list(String name);
|
||||||
|
ArrayList<Report> list();
|
||||||
|
|
||||||
|
Report findByID(Integer id);
|
||||||
|
|
||||||
|
void reply(Integer id, String reply);
|
||||||
|
}
|
@ -0,0 +1,10 @@
|
|||||||
|
package com.sa.unsafeincidents.service;
|
||||||
|
|
||||||
|
import com.sa.unsafeincidents.pojo.User;
|
||||||
|
|
||||||
|
public interface UserService {
|
||||||
|
|
||||||
|
User findByUsername(String username);
|
||||||
|
|
||||||
|
void register(String username, String password);
|
||||||
|
}
|
@ -0,0 +1,46 @@
|
|||||||
|
package com.sa.unsafeincidents.service.impl;
|
||||||
|
|
||||||
|
import com.sa.unsafeincidents.mapper.ReportMapper;
|
||||||
|
|
||||||
|
import com.sa.unsafeincidents.pojo.Report;
|
||||||
|
import com.sa.unsafeincidents.service.ReportService;
|
||||||
|
import org.springframework.beans.factory.annotation.Autowired;
|
||||||
|
import org.springframework.stereotype.Service;
|
||||||
|
|
||||||
|
import java.util.ArrayList;
|
||||||
|
|
||||||
|
@Service
|
||||||
|
public class ReportServiceImpl implements ReportService {
|
||||||
|
|
||||||
|
@Autowired
|
||||||
|
ReportMapper reportMapper;
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void add(Report form) {
|
||||||
|
reportMapper.add(form);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public ArrayList<Report> list(String name){
|
||||||
|
return reportMapper.findByName(name);
|
||||||
|
};
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public ArrayList<Report> list(){
|
||||||
|
return reportMapper.list();
|
||||||
|
};
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Report findByID(Integer id) {
|
||||||
|
return reportMapper.findByID(id);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void reply(Integer id,String reply) {
|
||||||
|
Report report = reportMapper.findByID(id);
|
||||||
|
report.setReply(reply);
|
||||||
|
reportMapper.update(id, report);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
}
|
@ -0,0 +1,29 @@
|
|||||||
|
package com.sa.unsafeincidents.service.impl;
|
||||||
|
|
||||||
|
import com.sa.unsafeincidents.mapper.UserMapper;
|
||||||
|
import com.sa.unsafeincidents.pojo.User;
|
||||||
|
import com.sa.unsafeincidents.service.UserService;
|
||||||
|
import com.sa.unsafeincidents.utils.Md5Util;
|
||||||
|
import org.springframework.beans.factory.annotation.Autowired;
|
||||||
|
import org.springframework.stereotype.Service;
|
||||||
|
|
||||||
|
@Service
|
||||||
|
public class UserServiceImpl implements UserService {
|
||||||
|
|
||||||
|
@Autowired
|
||||||
|
UserMapper userMapper;
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public User findByUsername(String username) {
|
||||||
|
return userMapper.findByUsername(username);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void register(String username, String password) {
|
||||||
|
String md5Password = Md5Util.getMD5String(password);
|
||||||
|
|
||||||
|
userMapper.register(username,md5Password);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
}
|
@ -0,0 +1,30 @@
|
|||||||
|
package com.sa.unsafeincidents.utils;
|
||||||
|
|
||||||
|
import com.auth0.jwt.JWT;
|
||||||
|
import com.auth0.jwt.algorithms.Algorithm;
|
||||||
|
|
||||||
|
import java.util.Date;
|
||||||
|
import java.util.Map;
|
||||||
|
|
||||||
|
public class JwtUtil {
|
||||||
|
|
||||||
|
private static final String KEY = "sa";
|
||||||
|
|
||||||
|
//接收业务数据,生成token并返回
|
||||||
|
public static String genToken(Map<String, Object> claims) {
|
||||||
|
return JWT.create()
|
||||||
|
.withClaim("claims", claims)
|
||||||
|
.withExpiresAt(new Date(System.currentTimeMillis() + 1000 * 60 * 60 * 12))
|
||||||
|
.sign(Algorithm.HMAC256(KEY));
|
||||||
|
}
|
||||||
|
|
||||||
|
//接收token,验证token,并返回业务数据
|
||||||
|
public static Map<String, Object> parseToken(String token) {
|
||||||
|
return JWT.require(Algorithm.HMAC256(KEY))
|
||||||
|
.build()
|
||||||
|
.verify(token)
|
||||||
|
.getClaim("claims")
|
||||||
|
.asMap();
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
@ -0,0 +1,26 @@
|
|||||||
|
package com.sa.unsafeincidents.utils;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* ThreadLocal 工具类
|
||||||
|
*/
|
||||||
|
@SuppressWarnings("all")
|
||||||
|
public class ThreadLocalUtil {
|
||||||
|
//提供ThreadLocal对象,
|
||||||
|
private static final ThreadLocal THREAD_LOCAL = new ThreadLocal();
|
||||||
|
|
||||||
|
//根据键获取值
|
||||||
|
public static <T> T get(){
|
||||||
|
return (T) THREAD_LOCAL.get();
|
||||||
|
}
|
||||||
|
|
||||||
|
//存储键值对
|
||||||
|
public static void set(Object value){
|
||||||
|
THREAD_LOCAL.set(value);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
//清除ThreadLocal 防止内存泄漏
|
||||||
|
public static void remove(){
|
||||||
|
THREAD_LOCAL.remove();
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,11 @@
|
|||||||
|
server:
|
||||||
|
port: 8080
|
||||||
|
spring:
|
||||||
|
datasource:
|
||||||
|
driver-class-name: com.mysql.cj.jdbc.Driver
|
||||||
|
url: jdbc:mysql://localhost:3306/unsafeincidents
|
||||||
|
username: root
|
||||||
|
password: 200408
|
||||||
|
mybatis:
|
||||||
|
configuration:
|
||||||
|
map-underscore-to-camel-case: true
|
@ -0,0 +1,6 @@
|
|||||||
|
<html>
|
||||||
|
<body>
|
||||||
|
<h1>hello word!!!</h1>
|
||||||
|
<p>this is a html page</p>
|
||||||
|
</body>
|
||||||
|
</html>
|
@ -0,0 +1,13 @@
|
|||||||
|
package com.sa.unsafeincidents;
|
||||||
|
|
||||||
|
import org.junit.jupiter.api.Test;
|
||||||
|
import org.springframework.boot.test.context.SpringBootTest;
|
||||||
|
|
||||||
|
@SpringBootTest
|
||||||
|
class UnsafeincidentsApplicationTests {
|
||||||
|
|
||||||
|
@Test
|
||||||
|
void contextLoads() {
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
@ -0,0 +1,31 @@
|
|||||||
|
/*
|
||||||
|
* Eslint config file
|
||||||
|
* Documentation: https://eslint.org/docs/user-guide/configuring/
|
||||||
|
* Install the Eslint extension before using this feature.
|
||||||
|
*/
|
||||||
|
module.exports = {
|
||||||
|
env: {
|
||||||
|
es6: true,
|
||||||
|
browser: true,
|
||||||
|
node: true,
|
||||||
|
},
|
||||||
|
ecmaFeatures: {
|
||||||
|
modules: true,
|
||||||
|
},
|
||||||
|
parserOptions: {
|
||||||
|
ecmaVersion: 2018,
|
||||||
|
sourceType: 'module',
|
||||||
|
},
|
||||||
|
globals: {
|
||||||
|
wx: true,
|
||||||
|
App: true,
|
||||||
|
Page: true,
|
||||||
|
getCurrentPages: true,
|
||||||
|
getApp: true,
|
||||||
|
Component: true,
|
||||||
|
requirePlugin: true,
|
||||||
|
requireMiniProgram: true,
|
||||||
|
},
|
||||||
|
// extends: 'eslint:recommended',
|
||||||
|
rules: {},
|
||||||
|
}
|
@ -0,0 +1,6 @@
|
|||||||
|
// app.js
|
||||||
|
App({
|
||||||
|
globalData: {
|
||||||
|
token: null
|
||||||
|
}
|
||||||
|
});
|
@ -0,0 +1,62 @@
|
|||||||
|
{
|
||||||
|
"pages": [
|
||||||
|
"pages/register/register",
|
||||||
|
"pages/login/login",
|
||||||
|
"pages/admin/admin",
|
||||||
|
"pages/home/home",
|
||||||
|
"pages/message/message",
|
||||||
|
"pages/profile/profile",
|
||||||
|
"pages/FlightCrew/FlightCrew",
|
||||||
|
"pages/Crew/Crew",
|
||||||
|
"pages/Aviation/Aviation",
|
||||||
|
"pages/AirportGround/AirportGround",
|
||||||
|
"pages/Airtraffic/Airtraffic",
|
||||||
|
"pages/Students/students",
|
||||||
|
"pages/Fast/Fast",
|
||||||
|
"pages/AircraftMaintenance/AircraftMaintenance",
|
||||||
|
"pages/FlightCrewDetails/FlightCrewDetails",
|
||||||
|
"pages/viewReports/viewReports",
|
||||||
|
"pages/userview/usereview",
|
||||||
|
"pages/dataAnalysis/dataAnalysis",
|
||||||
|
"pages/z1/z1",
|
||||||
|
"pages/z2/z2",
|
||||||
|
"pages/z3/z3",
|
||||||
|
"pages/z4/z4",
|
||||||
|
"pages/z5/z5",
|
||||||
|
"pages/z6/z6",
|
||||||
|
"pages/z7/z7",
|
||||||
|
"pages/z8/z8",
|
||||||
|
"pages/z9/z9",
|
||||||
|
"pages/z10/z10"
|
||||||
|
],
|
||||||
|
"window": {
|
||||||
|
"navigationBarTextStyle": "black",
|
||||||
|
"navigationBarTitleText": "民航反馈分析系统",
|
||||||
|
"navigationBarBackgroundColor": "#fff"
|
||||||
|
},
|
||||||
|
"tabBar": {
|
||||||
|
"list": [
|
||||||
|
{
|
||||||
|
"pagePath": "pages/home/home",
|
||||||
|
"iconPath": "image/首页.png",
|
||||||
|
"selectedIconPath": "image/首页 (2).png",
|
||||||
|
"text": "首页"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"pagePath": "pages/message/message",
|
||||||
|
"iconPath": "image/人工智能大脑.png",
|
||||||
|
"selectedIconPath": "image/人工智能大脑 (1).png",
|
||||||
|
"text": "AI对话"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"pagePath": "pages/profile/profile",
|
||||||
|
"iconPath": "image/我的.png",
|
||||||
|
"selectedIconPath": "image/我的-copy.png",
|
||||||
|
"text": "个人中心"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"componentFramework": "glass-easel",
|
||||||
|
"sitemapLocation": "sitemap.json",
|
||||||
|
"lazyCodeLoading": "requiredComponents"
|
||||||
|
}
|
@ -0,0 +1,10 @@
|
|||||||
|
/**app.wxss**/
|
||||||
|
.container {
|
||||||
|
height: 100%;
|
||||||
|
display: flex;
|
||||||
|
flex-direction: column;
|
||||||
|
align-items: center;
|
||||||
|
justify-content: space-between;
|
||||||
|
padding: 200rpx 0;
|
||||||
|
box-sizing: border-box;
|
||||||
|
}
|
@ -0,0 +1,5 @@
|
|||||||
|
{
|
||||||
|
"component": true,
|
||||||
|
"styleIsolation": "apply-shared",
|
||||||
|
"usingComponents": {}
|
||||||
|
}
|
@ -0,0 +1,64 @@
|
|||||||
|
<view class="weui-navigation-bar {{extClass}}">
|
||||||
|
<view class="weui-navigation-bar__inner {{ios ? 'ios' : 'android'}}" style="color: {{color}}; background: {{background}}; {{displayStyle}}; {{innerPaddingRight}}; {{safeAreaTop}};">
|
||||||
|
|
||||||
|
<!-- 左侧按钮 -->
|
||||||
|
<view class='weui-navigation-bar__left' style="{{leftWidth}};">
|
||||||
|
<block wx:if="{{back || homeButton}}">
|
||||||
|
<!-- 返回上一页 -->
|
||||||
|
<block wx:if="{{back}}">
|
||||||
|
<view class="weui-navigation-bar__buttons weui-navigation-bar__buttons_goback">
|
||||||
|
<view
|
||||||
|
bindtap="back"
|
||||||
|
class="weui-navigation-bar__btn_goback_wrapper"
|
||||||
|
hover-class="weui-active"
|
||||||
|
hover-stay-time="100"
|
||||||
|
aria-role="button"
|
||||||
|
aria-label="返回"
|
||||||
|
>
|
||||||
|
<view class="weui-navigation-bar__button weui-navigation-bar__btn_goback"></view>
|
||||||
|
</view>
|
||||||
|
</view>
|
||||||
|
</block>
|
||||||
|
<!-- 返回首页 -->
|
||||||
|
<block wx:if="{{homeButton}}">
|
||||||
|
<view class="weui-navigation-bar__buttons weui-navigation-bar__buttons_home">
|
||||||
|
<view
|
||||||
|
bindtap="home"
|
||||||
|
class="weui-navigation-bar__btn_home_wrapper"
|
||||||
|
hover-class="weui-active"
|
||||||
|
aria-role="button"
|
||||||
|
aria-label="首页"
|
||||||
|
>
|
||||||
|
<view class="weui-navigation-bar__button weui-navigation-bar__btn_home"></view>
|
||||||
|
</view>
|
||||||
|
</view>
|
||||||
|
</block>
|
||||||
|
</block>
|
||||||
|
<block wx:else>
|
||||||
|
<slot name="left"></slot>
|
||||||
|
</block>
|
||||||
|
</view>
|
||||||
|
|
||||||
|
<!-- 标题 -->
|
||||||
|
<view class='weui-navigation-bar__center'>
|
||||||
|
<view wx:if="{{loading}}" class="weui-navigation-bar__loading" aria-role="alert">
|
||||||
|
<view
|
||||||
|
class="weui-loading"
|
||||||
|
aria-role="img"
|
||||||
|
aria-label="加载中"
|
||||||
|
></view>
|
||||||
|
</view>
|
||||||
|
<block wx:if="{{title}}">
|
||||||
|
<text>{{title}}</text>
|
||||||
|
</block>
|
||||||
|
<block wx:else>
|
||||||
|
<slot name="center"></slot>
|
||||||
|
</block>
|
||||||
|
</view>
|
||||||
|
|
||||||
|
<!-- 右侧留空 -->
|
||||||
|
<view class='weui-navigation-bar__right'>
|
||||||
|
<slot name="right"></slot>
|
||||||
|
</view>
|
||||||
|
</view>
|
||||||
|
</view>
|
@ -0,0 +1,96 @@
|
|||||||
|
.weui-navigation-bar {
|
||||||
|
--weui-FG-0:rgba(0,0,0,.9);
|
||||||
|
--height: 44px;
|
||||||
|
--left: 16px;
|
||||||
|
}
|
||||||
|
.weui-navigation-bar .android {
|
||||||
|
--height: 48px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.weui-navigation-bar {
|
||||||
|
overflow: hidden;
|
||||||
|
color: var(--weui-FG-0);
|
||||||
|
flex: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
.weui-navigation-bar__inner {
|
||||||
|
position: relative;
|
||||||
|
top: 0;
|
||||||
|
left: 0;
|
||||||
|
height: calc(var(--height) + env(safe-area-inset-top));
|
||||||
|
display: flex;
|
||||||
|
flex-direction: row;
|
||||||
|
align-items: center;
|
||||||
|
justify-content: center;
|
||||||
|
padding-top: env(safe-area-inset-top);
|
||||||
|
width: 100%;
|
||||||
|
box-sizing: border-box;
|
||||||
|
}
|
||||||
|
|
||||||
|
.weui-navigation-bar__left {
|
||||||
|
position: relative;
|
||||||
|
padding-left: var(--left);
|
||||||
|
display: flex;
|
||||||
|
flex-direction: row;
|
||||||
|
align-items: flex-start;
|
||||||
|
height: 100%;
|
||||||
|
box-sizing: border-box;
|
||||||
|
}
|
||||||
|
|
||||||
|
.weui-navigation-bar__btn_goback_wrapper {
|
||||||
|
padding: 11px 18px 11px 16px;
|
||||||
|
margin: -11px -18px -11px -16px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.weui-navigation-bar__btn_goback_wrapper.weui-active {
|
||||||
|
opacity: 0.5;
|
||||||
|
}
|
||||||
|
|
||||||
|
.weui-navigation-bar__btn_goback {
|
||||||
|
font-size: 12px;
|
||||||
|
width: 12px;
|
||||||
|
height: 24px;
|
||||||
|
-webkit-mask: url("data:image/svg+xml;charset=utf8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='12' height='24' viewBox='0 0 12 24'%3E %3Cpath fill-opacity='.9' fill-rule='evenodd' d='M10 19.438L8.955 20.5l-7.666-7.79a1.02 1.02 0 0 1 0-1.42L8.955 3.5 10 4.563 2.682 12 10 19.438z'/%3E%3C/svg%3E") no-repeat 50% 50%;
|
||||||
|
mask: url("data:image/svg+xml;charset=utf8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='12' height='24' viewBox='0 0 12 24'%3E %3Cpath fill-opacity='.9' fill-rule='evenodd' d='M10 19.438L8.955 20.5l-7.666-7.79a1.02 1.02 0 0 1 0-1.42L8.955 3.5 10 4.563 2.682 12 10 19.438z'/%3E%3C/svg%3E") no-repeat 50% 50%;
|
||||||
|
-webkit-mask-size: cover;
|
||||||
|
mask-size: cover;
|
||||||
|
background-color: var(--weui-FG-0);
|
||||||
|
}
|
||||||
|
|
||||||
|
.weui-navigation-bar__center {
|
||||||
|
font-size: 17px;
|
||||||
|
text-align: center;
|
||||||
|
position: relative;
|
||||||
|
display: flex;
|
||||||
|
flex-direction: row;
|
||||||
|
align-items: center;
|
||||||
|
justify-content: center;
|
||||||
|
font-weight: bold;
|
||||||
|
flex: 1;
|
||||||
|
height: 100%;
|
||||||
|
}
|
||||||
|
|
||||||
|
.weui-navigation-bar__loading {
|
||||||
|
margin-right: 4px;
|
||||||
|
align-items: center;
|
||||||
|
}
|
||||||
|
|
||||||
|
.weui-loading {
|
||||||
|
font-size: 16px;
|
||||||
|
width: 16px;
|
||||||
|
height: 16px;
|
||||||
|
display: block;
|
||||||
|
background: transparent url("data:image/svg+xml,%3C%3Fxml version='1.0' encoding='UTF-8'%3F%3E%3Csvg width='80px' height='80px' viewBox='0 0 80 80' version='1.1' xmlns='http://www.w3.org/2000/svg' xmlns:xlink='http://www.w3.org/1999/xlink'%3E%3Ctitle%3Eloading%3C/title%3E%3Cdefs%3E%3ClinearGradient x1='94.0869141%25' y1='0%25' x2='94.0869141%25' y2='90.559082%25' id='linearGradient-1'%3E%3Cstop stop-color='%23606060' stop-opacity='0' offset='0%25'%3E%3C/stop%3E%3Cstop stop-color='%23606060' stop-opacity='0.3' offset='100%25'%3E%3C/stop%3E%3C/linearGradient%3E%3ClinearGradient x1='100%25' y1='8.67370605%25' x2='100%25' y2='90.6286621%25' id='linearGradient-2'%3E%3Cstop stop-color='%23606060' offset='0%25'%3E%3C/stop%3E%3Cstop stop-color='%23606060' stop-opacity='0.3' offset='100%25'%3E%3C/stop%3E%3C/linearGradient%3E%3C/defs%3E%3Cg stroke='none' stroke-width='1' fill='none' fill-rule='evenodd' opacity='0.9'%3E%3Cg%3E%3Cpath d='M40,0 C62.09139,0 80,17.90861 80,40 C80,62.09139 62.09139,80 40,80 L40,73 C58.2253967,73 73,58.2253967 73,40 C73,21.7746033 58.2253967,7 40,7 L40,0 Z' fill='url(%23linearGradient-1)'%3E%3C/path%3E%3Cpath d='M40,0 L40,7 C21.7746033,7 7,21.7746033 7,40 C7,58.2253967 21.7746033,73 40,73 L40,80 C17.90861,80 0,62.09139 0,40 C0,17.90861 17.90861,0 40,0 Z' fill='url(%23linearGradient-2)'%3E%3C/path%3E%3Ccircle id='Oval' fill='%23606060' cx='40.5' cy='3.5' r='3.5'%3E%3C/circle%3E%3C/g%3E%3C/g%3E%3C/svg%3E%0A") no-repeat;
|
||||||
|
background-size: 100%;
|
||||||
|
margin-left: 0;
|
||||||
|
animation: loading linear infinite 1s;
|
||||||
|
}
|
||||||
|
|
||||||
|
@keyframes loading {
|
||||||
|
from {
|
||||||
|
transform: rotate(0);
|
||||||
|
}
|
||||||
|
to {
|
||||||
|
transform: rotate(360deg);
|
||||||
|
}
|
||||||
|
}
|
After Width: | Height: | Size: 5.1 KiB |
After Width: | Height: | Size: 4.8 KiB |
After Width: | Height: | Size: 4.7 KiB |
After Width: | Height: | Size: 5.0 KiB |
After Width: | Height: | Size: 4.2 KiB |
After Width: | Height: | Size: 3.7 KiB |
After Width: | Height: | Size: 3.3 KiB |
After Width: | Height: | Size: 3.8 KiB |
After Width: | Height: | Size: 4.1 KiB |
After Width: | Height: | Size: 3.8 KiB |
After Width: | Height: | Size: 4.6 KiB |
After Width: | Height: | Size: 3.8 KiB |
After Width: | Height: | Size: 21 KiB |
After Width: | Height: | Size: 22 KiB |
After Width: | Height: | Size: 9.5 KiB |
After Width: | Height: | Size: 2.9 KiB |
After Width: | Height: | Size: 3.5 KiB |
After Width: | Height: | Size: 2.8 KiB |
@ -0,0 +1 @@
|
|||||||
|
export {};
|
@ -0,0 +1,78 @@
|
|||||||
|
"use strict";
|
||||||
|
Object.defineProperty(exports, "__esModule", { value: true });
|
||||||
|
var component_1 = require("../common/component");
|
||||||
|
var button_1 = require("../mixins/button");
|
||||||
|
(0, component_1.VantComponent)({
|
||||||
|
classes: ['list-class'],
|
||||||
|
mixins: [button_1.button],
|
||||||
|
props: {
|
||||||
|
show: Boolean,
|
||||||
|
title: String,
|
||||||
|
cancelText: String,
|
||||||
|
description: String,
|
||||||
|
round: {
|
||||||
|
type: Boolean,
|
||||||
|
value: true,
|
||||||
|
},
|
||||||
|
zIndex: {
|
||||||
|
type: Number,
|
||||||
|
value: 100,
|
||||||
|
},
|
||||||
|
actions: {
|
||||||
|
type: Array,
|
||||||
|
value: [],
|
||||||
|
},
|
||||||
|
overlay: {
|
||||||
|
type: Boolean,
|
||||||
|
value: true,
|
||||||
|
},
|
||||||
|
closeOnClickOverlay: {
|
||||||
|
type: Boolean,
|
||||||
|
value: true,
|
||||||
|
},
|
||||||
|
closeOnClickAction: {
|
||||||
|
type: Boolean,
|
||||||
|
value: true,
|
||||||
|
},
|
||||||
|
safeAreaInsetBottom: {
|
||||||
|
type: Boolean,
|
||||||
|
value: true,
|
||||||
|
},
|
||||||
|
rootPortal: {
|
||||||
|
type: Boolean,
|
||||||
|
value: false,
|
||||||
|
},
|
||||||
|
},
|
||||||
|
methods: {
|
||||||
|
onSelect: function (event) {
|
||||||
|
var _this = this;
|
||||||
|
var index = event.currentTarget.dataset.index;
|
||||||
|
var _a = this.data, actions = _a.actions, closeOnClickAction = _a.closeOnClickAction, canIUseGetUserProfile = _a.canIUseGetUserProfile;
|
||||||
|
var item = actions[index];
|
||||||
|
if (item) {
|
||||||
|
this.$emit('select', item);
|
||||||
|
if (closeOnClickAction) {
|
||||||
|
this.onClose();
|
||||||
|
}
|
||||||
|
if (item.openType === 'getUserInfo' && canIUseGetUserProfile) {
|
||||||
|
wx.getUserProfile({
|
||||||
|
desc: item.getUserProfileDesc || ' ',
|
||||||
|
complete: function (userProfile) {
|
||||||
|
_this.$emit('getuserinfo', userProfile);
|
||||||
|
},
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
onCancel: function () {
|
||||||
|
this.$emit('cancel');
|
||||||
|
},
|
||||||
|
onClose: function () {
|
||||||
|
this.$emit('close');
|
||||||
|
},
|
||||||
|
onClickOverlay: function () {
|
||||||
|
this.$emit('click-overlay');
|
||||||
|
this.onClose();
|
||||||
|
},
|
||||||
|
},
|
||||||
|
});
|
@ -0,0 +1,8 @@
|
|||||||
|
{
|
||||||
|
"component": true,
|
||||||
|
"usingComponents": {
|
||||||
|
"van-icon": "../icon/index",
|
||||||
|
"van-popup": "../popup/index",
|
||||||
|
"van-loading": "../loading/index"
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1 @@
|
|||||||
|
@import '../common/index.wxss';.van-action-sheet{color:var(--action-sheet-item-text-color,#323233);max-height:var(--action-sheet-max-height,90%)!important}.van-action-sheet__cancel,.van-action-sheet__item{background-color:var(--action-sheet-item-background,#fff);font-size:var(--action-sheet-item-font-size,16px);line-height:var(--action-sheet-item-line-height,22px);padding:14px 16px;text-align:center}.van-action-sheet__cancel--hover,.van-action-sheet__item--hover{background-color:#f2f3f5}.van-action-sheet__cancel:after,.van-action-sheet__item:after{border-width:0}.van-action-sheet__cancel{color:var(--action-sheet-cancel-text-color,#646566)}.van-action-sheet__gap{background-color:var(--action-sheet-cancel-padding-color,#f7f8fa);display:block;height:var(--action-sheet-cancel-padding-top,8px)}.van-action-sheet__item--disabled{color:var(--action-sheet-item-disabled-text-color,#c8c9cc)}.van-action-sheet__item--disabled.van-action-sheet__item--hover{background-color:var(--action-sheet-item-background,#fff)}.van-action-sheet__subname{color:var(--action-sheet-subname-color,#969799);font-size:var(--action-sheet-subname-font-size,12px);line-height:var(--action-sheet-subname-line-height,20px);margin-top:var(--padding-xs,8px)}.van-action-sheet__header{font-size:var(--action-sheet-header-font-size,16px);font-weight:var(--font-weight-bold,500);line-height:var(--action-sheet-header-height,48px);text-align:center}.van-action-sheet__description{color:var(--action-sheet-description-color,#969799);font-size:var(--action-sheet-description-font-size,14px);line-height:var(--action-sheet-description-line-height,20px);padding:20px var(--padding-md,16px);text-align:center}.van-action-sheet__close{color:var(--action-sheet-close-icon-color,#c8c9cc);font-size:var(--action-sheet-close-icon-size,22px)!important;line-height:inherit!important;padding:var(--action-sheet-close-icon-padding,0 16px);position:absolute!important;right:0;top:0}.van-action-sheet__loading{display:flex!important}
|
@ -0,0 +1 @@
|
|||||||
|
export {};
|
@ -0,0 +1,235 @@
|
|||||||
|
"use strict";
|
||||||
|
var __assign = (this && this.__assign) || function () {
|
||||||
|
__assign = Object.assign || function(t) {
|
||||||
|
for (var s, i = 1, n = arguments.length; i < n; i++) {
|
||||||
|
s = arguments[i];
|
||||||
|
for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
|
||||||
|
t[p] = s[p];
|
||||||
|
}
|
||||||
|
return t;
|
||||||
|
};
|
||||||
|
return __assign.apply(this, arguments);
|
||||||
|
};
|
||||||
|
Object.defineProperty(exports, "__esModule", { value: true });
|
||||||
|
var component_1 = require("../common/component");
|
||||||
|
var shared_1 = require("../picker/shared");
|
||||||
|
var utils_1 = require("../common/utils");
|
||||||
|
var EMPTY_CODE = '000000';
|
||||||
|
(0, component_1.VantComponent)({
|
||||||
|
classes: ['active-class', 'toolbar-class', 'column-class'],
|
||||||
|
props: __assign(__assign({}, shared_1.pickerProps), { showToolbar: {
|
||||||
|
type: Boolean,
|
||||||
|
value: true,
|
||||||
|
}, value: {
|
||||||
|
type: String,
|
||||||
|
observer: function (value) {
|
||||||
|
this.code = value;
|
||||||
|
this.setValues();
|
||||||
|
},
|
||||||
|
}, areaList: {
|
||||||
|
type: Object,
|
||||||
|
value: {},
|
||||||
|
observer: 'setValues',
|
||||||
|
}, columnsNum: {
|
||||||
|
type: null,
|
||||||
|
value: 3,
|
||||||
|
}, columnsPlaceholder: {
|
||||||
|
type: Array,
|
||||||
|
observer: function (val) {
|
||||||
|
this.setData({
|
||||||
|
typeToColumnsPlaceholder: {
|
||||||
|
province: val[0] || '',
|
||||||
|
city: val[1] || '',
|
||||||
|
county: val[2] || '',
|
||||||
|
},
|
||||||
|
});
|
||||||
|
},
|
||||||
|
} }),
|
||||||
|
data: {
|
||||||
|
columns: [{ values: [] }, { values: [] }, { values: [] }],
|
||||||
|
typeToColumnsPlaceholder: {},
|
||||||
|
},
|
||||||
|
mounted: function () {
|
||||||
|
var _this = this;
|
||||||
|
(0, utils_1.requestAnimationFrame)(function () {
|
||||||
|
_this.setValues();
|
||||||
|
});
|
||||||
|
},
|
||||||
|
methods: {
|
||||||
|
getPicker: function () {
|
||||||
|
if (this.picker == null) {
|
||||||
|
this.picker = this.selectComponent('.van-area__picker');
|
||||||
|
}
|
||||||
|
return this.picker;
|
||||||
|
},
|
||||||
|
onCancel: function (event) {
|
||||||
|
this.emit('cancel', event.detail);
|
||||||
|
},
|
||||||
|
onConfirm: function (event) {
|
||||||
|
var index = event.detail.index;
|
||||||
|
var value = event.detail.value;
|
||||||
|
value = this.parseValues(value);
|
||||||
|
this.emit('confirm', { value: value, index: index });
|
||||||
|
},
|
||||||
|
emit: function (type, detail) {
|
||||||
|
detail.values = detail.value;
|
||||||
|
delete detail.value;
|
||||||
|
this.$emit(type, detail);
|
||||||
|
},
|
||||||
|
parseValues: function (values) {
|
||||||
|
var columnsPlaceholder = this.data.columnsPlaceholder;
|
||||||
|
return values.map(function (value, index) {
|
||||||
|
if (value &&
|
||||||
|
(!value.code || value.name === columnsPlaceholder[index])) {
|
||||||
|
return __assign(__assign({}, value), { code: '', name: '' });
|
||||||
|
}
|
||||||
|
return value;
|
||||||
|
});
|
||||||
|
},
|
||||||
|
onChange: function (event) {
|
||||||
|
var _this = this;
|
||||||
|
var _a;
|
||||||
|
var _b = event.detail, index = _b.index, picker = _b.picker, value = _b.value;
|
||||||
|
this.code = value[index].code;
|
||||||
|
(_a = this.setValues()) === null || _a === void 0 ? void 0 : _a.then(function () {
|
||||||
|
_this.$emit('change', {
|
||||||
|
picker: picker,
|
||||||
|
values: _this.parseValues(picker.getValues()),
|
||||||
|
index: index,
|
||||||
|
});
|
||||||
|
});
|
||||||
|
},
|
||||||
|
getConfig: function (type) {
|
||||||
|
var areaList = this.data.areaList;
|
||||||
|
return (areaList && areaList["".concat(type, "_list")]) || {};
|
||||||
|
},
|
||||||
|
getList: function (type, code) {
|
||||||
|
if (type !== 'province' && !code) {
|
||||||
|
return [];
|
||||||
|
}
|
||||||
|
var typeToColumnsPlaceholder = this.data.typeToColumnsPlaceholder;
|
||||||
|
var list = this.getConfig(type);
|
||||||
|
var result = Object.keys(list).map(function (code) { return ({
|
||||||
|
code: code,
|
||||||
|
name: list[code],
|
||||||
|
}); });
|
||||||
|
if (code != null) {
|
||||||
|
// oversea code
|
||||||
|
if (code[0] === '9' && type === 'city') {
|
||||||
|
code = '9';
|
||||||
|
}
|
||||||
|
result = result.filter(function (item) { return item.code.indexOf(code) === 0; });
|
||||||
|
}
|
||||||
|
if (typeToColumnsPlaceholder[type] && result.length) {
|
||||||
|
// set columns placeholder
|
||||||
|
var codeFill = type === 'province'
|
||||||
|
? ''
|
||||||
|
: type === 'city'
|
||||||
|
? EMPTY_CODE.slice(2, 4)
|
||||||
|
: EMPTY_CODE.slice(4, 6);
|
||||||
|
result.unshift({
|
||||||
|
code: "".concat(code).concat(codeFill),
|
||||||
|
name: typeToColumnsPlaceholder[type],
|
||||||
|
});
|
||||||
|
}
|
||||||
|
return result;
|
||||||
|
},
|
||||||
|
getIndex: function (type, code) {
|
||||||
|
var compareNum = type === 'province' ? 2 : type === 'city' ? 4 : 6;
|
||||||
|
var list = this.getList(type, code.slice(0, compareNum - 2));
|
||||||
|
// oversea code
|
||||||
|
if (code[0] === '9' && type === 'province') {
|
||||||
|
compareNum = 1;
|
||||||
|
}
|
||||||
|
code = code.slice(0, compareNum);
|
||||||
|
for (var i = 0; i < list.length; i++) {
|
||||||
|
if (list[i].code.slice(0, compareNum) === code) {
|
||||||
|
return i;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return 0;
|
||||||
|
},
|
||||||
|
setValues: function () {
|
||||||
|
var picker = this.getPicker();
|
||||||
|
if (!picker) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
var code = this.code || this.getDefaultCode();
|
||||||
|
var provinceList = this.getList('province');
|
||||||
|
var cityList = this.getList('city', code.slice(0, 2));
|
||||||
|
var stack = [];
|
||||||
|
var indexes = [];
|
||||||
|
var columnsNum = this.data.columnsNum;
|
||||||
|
if (columnsNum >= 1) {
|
||||||
|
stack.push(picker.setColumnValues(0, provinceList, false));
|
||||||
|
indexes.push(this.getIndex('province', code));
|
||||||
|
}
|
||||||
|
if (columnsNum >= 2) {
|
||||||
|
stack.push(picker.setColumnValues(1, cityList, false));
|
||||||
|
indexes.push(this.getIndex('city', code));
|
||||||
|
if (cityList.length && code.slice(2, 4) === '00') {
|
||||||
|
code = cityList[0].code;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (columnsNum === 3) {
|
||||||
|
stack.push(picker.setColumnValues(2, this.getList('county', code.slice(0, 4)), false));
|
||||||
|
indexes.push(this.getIndex('county', code));
|
||||||
|
}
|
||||||
|
return Promise.all(stack)
|
||||||
|
.catch(function () { })
|
||||||
|
.then(function () { return picker.setIndexes(indexes); })
|
||||||
|
.catch(function () { });
|
||||||
|
},
|
||||||
|
getDefaultCode: function () {
|
||||||
|
var columnsPlaceholder = this.data.columnsPlaceholder;
|
||||||
|
if (columnsPlaceholder.length) {
|
||||||
|
return EMPTY_CODE;
|
||||||
|
}
|
||||||
|
var countyCodes = Object.keys(this.getConfig('county'));
|
||||||
|
if (countyCodes[0]) {
|
||||||
|
return countyCodes[0];
|
||||||
|
}
|
||||||
|
var cityCodes = Object.keys(this.getConfig('city'));
|
||||||
|
if (cityCodes[0]) {
|
||||||
|
return cityCodes[0];
|
||||||
|
}
|
||||||
|
return '';
|
||||||
|
},
|
||||||
|
getValues: function () {
|
||||||
|
var picker = this.getPicker();
|
||||||
|
if (!picker) {
|
||||||
|
return [];
|
||||||
|
}
|
||||||
|
return this.parseValues(picker.getValues().filter(function (value) { return !!value; }));
|
||||||
|
},
|
||||||
|
getDetail: function () {
|
||||||
|
var values = this.getValues();
|
||||||
|
var area = {
|
||||||
|
code: '',
|
||||||
|
country: '',
|
||||||
|
province: '',
|
||||||
|
city: '',
|
||||||
|
county: '',
|
||||||
|
};
|
||||||
|
if (!values.length) {
|
||||||
|
return area;
|
||||||
|
}
|
||||||
|
var names = values.map(function (item) { return item.name; });
|
||||||
|
area.code = values[values.length - 1].code;
|
||||||
|
if (area.code[0] === '9') {
|
||||||
|
area.country = names[1] || '';
|
||||||
|
area.province = names[2] || '';
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
area.province = names[0] || '';
|
||||||
|
area.city = names[1] || '';
|
||||||
|
area.county = names[2] || '';
|
||||||
|
}
|
||||||
|
return area;
|
||||||
|
},
|
||||||
|
reset: function (code) {
|
||||||
|
this.code = code || '';
|
||||||
|
return this.setValues();
|
||||||
|
},
|
||||||
|
},
|
||||||
|
});
|
@ -0,0 +1,6 @@
|
|||||||
|
{
|
||||||
|
"component": true,
|
||||||
|
"usingComponents": {
|
||||||
|
"van-picker": "../picker/index"
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,20 @@
|
|||||||
|
<wxs src="./index.wxs" module="computed" />
|
||||||
|
|
||||||
|
<van-picker
|
||||||
|
class="van-area__picker"
|
||||||
|
active-class="active-class"
|
||||||
|
toolbar-class="toolbar-class"
|
||||||
|
column-class="column-class"
|
||||||
|
show-toolbar="{{ showToolbar }}"
|
||||||
|
value-key="name"
|
||||||
|
title="{{ title }}"
|
||||||
|
loading="{{ loading }}"
|
||||||
|
columns="{{ computed.displayColumns(columns, columnsNum) }}"
|
||||||
|
item-height="{{ itemHeight }}"
|
||||||
|
visible-item-count="{{ visibleItemCount }}"
|
||||||
|
cancel-button-text="{{ cancelButtonText }}"
|
||||||
|
confirm-button-text="{{ confirmButtonText }}"
|
||||||
|
bind:change="onChange"
|
||||||
|
bind:confirm="onConfirm"
|
||||||
|
bind:cancel="onCancel"
|
||||||
|
/>
|
@ -0,0 +1,8 @@
|
|||||||
|
/* eslint-disable */
|
||||||
|
function displayColumns(columns, columnsNum) {
|
||||||
|
return columns.slice(0, +columnsNum);
|
||||||
|
}
|
||||||
|
|
||||||
|
module.exports = {
|
||||||
|
displayColumns: displayColumns,
|
||||||
|
};
|
@ -0,0 +1 @@
|
|||||||
|
@import '../common/index.wxss';
|
@ -0,0 +1 @@
|
|||||||
|
export {};
|
@ -0,0 +1,67 @@
|
|||||||
|
"use strict";
|
||||||
|
Object.defineProperty(exports, "__esModule", { value: true });
|
||||||
|
var component_1 = require("../common/component");
|
||||||
|
var button_1 = require("../mixins/button");
|
||||||
|
var version_1 = require("../common/version");
|
||||||
|
var mixins = [button_1.button];
|
||||||
|
if ((0, version_1.canIUseFormFieldButton)()) {
|
||||||
|
mixins.push('wx://form-field-button');
|
||||||
|
}
|
||||||
|
(0, component_1.VantComponent)({
|
||||||
|
mixins: mixins,
|
||||||
|
classes: ['hover-class', 'loading-class'],
|
||||||
|
data: {
|
||||||
|
baseStyle: '',
|
||||||
|
},
|
||||||
|
props: {
|
||||||
|
formType: String,
|
||||||
|
icon: String,
|
||||||
|
classPrefix: {
|
||||||
|
type: String,
|
||||||
|
value: 'van-icon',
|
||||||
|
},
|
||||||
|
plain: Boolean,
|
||||||
|
block: Boolean,
|
||||||
|
round: Boolean,
|
||||||
|
square: Boolean,
|
||||||
|
loading: Boolean,
|
||||||
|
hairline: Boolean,
|
||||||
|
disabled: Boolean,
|
||||||
|
loadingText: String,
|
||||||
|
customStyle: String,
|
||||||
|
loadingType: {
|
||||||
|
type: String,
|
||||||
|
value: 'circular',
|
||||||
|
},
|
||||||
|
type: {
|
||||||
|
type: String,
|
||||||
|
value: 'default',
|
||||||
|
},
|
||||||
|
dataset: null,
|
||||||
|
size: {
|
||||||
|
type: String,
|
||||||
|
value: 'normal',
|
||||||
|
},
|
||||||
|
loadingSize: {
|
||||||
|
type: String,
|
||||||
|
value: '20px',
|
||||||
|
},
|
||||||
|
color: String,
|
||||||
|
},
|
||||||
|
methods: {
|
||||||
|
onClick: function (event) {
|
||||||
|
var _this = this;
|
||||||
|
this.$emit('click', event);
|
||||||
|
var _a = this.data, canIUseGetUserProfile = _a.canIUseGetUserProfile, openType = _a.openType, getUserProfileDesc = _a.getUserProfileDesc, lang = _a.lang;
|
||||||
|
if (openType === 'getUserInfo' && canIUseGetUserProfile) {
|
||||||
|
wx.getUserProfile({
|
||||||
|
desc: getUserProfileDesc || ' ',
|
||||||
|
lang: lang || 'en',
|
||||||
|
complete: function (userProfile) {
|
||||||
|
_this.$emit('getuserinfo', userProfile);
|
||||||
|
},
|
||||||
|
});
|
||||||
|
}
|
||||||
|
},
|
||||||
|
},
|
||||||
|
});
|
@ -0,0 +1,7 @@
|
|||||||
|
{
|
||||||
|
"component": true,
|
||||||
|
"usingComponents": {
|
||||||
|
"van-icon": "../icon/index",
|
||||||
|
"van-loading": "../loading/index"
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,56 @@
|
|||||||
|
<wxs src="../wxs/utils.wxs" module="utils" />
|
||||||
|
<wxs src="./index.wxs" module="computed" />
|
||||||
|
|
||||||
|
<button
|
||||||
|
id="{{ id || buttonId }}"
|
||||||
|
data-detail="{{ dataset }}"
|
||||||
|
class="custom-class {{ utils.bem('button', [type, size, { block, round, plain, square, loading, disabled, hairline, unclickable: disabled || loading }]) }} {{ hairline ? 'van-hairline--surround' : '' }}"
|
||||||
|
hover-class="{{ disabled || loading ? '' : 'van-button--active hover-class'}}"
|
||||||
|
lang="{{ lang }}"
|
||||||
|
form-type="{{ formType }}"
|
||||||
|
style="{{ computed.rootStyle({ plain, color, customStyle }) }}"
|
||||||
|
open-type="{{ disabled || loading || (canIUseGetUserProfile && openType === 'getUserInfo') ? '' : openType }}"
|
||||||
|
business-id="{{ businessId }}"
|
||||||
|
session-from="{{ sessionFrom }}"
|
||||||
|
send-message-title="{{ sendMessageTitle }}"
|
||||||
|
send-message-path="{{ sendMessagePath }}"
|
||||||
|
send-message-img="{{ sendMessageImg }}"
|
||||||
|
show-message-card="{{ showMessageCard }}"
|
||||||
|
app-parameter="{{ appParameter }}"
|
||||||
|
aria-label="{{ ariaLabel }}"
|
||||||
|
bindtap="{{ disabled || loading ? '' : 'onClick' }}"
|
||||||
|
bindgetuserinfo="onGetUserInfo"
|
||||||
|
bindcontact="onContact"
|
||||||
|
bindgetphonenumber="onGetPhoneNumber"
|
||||||
|
bindgetrealtimephonenumber="onGetRealTimePhoneNumber"
|
||||||
|
bindagreeprivacyauthorization="onAgreePrivacyAuthorization"
|
||||||
|
binderror="onError"
|
||||||
|
bindlaunchapp="onLaunchApp"
|
||||||
|
bindopensetting="onOpenSetting"
|
||||||
|
bindchooseavatar="onChooseAvatar"
|
||||||
|
>
|
||||||
|
<block wx:if="{{ loading }}">
|
||||||
|
<van-loading
|
||||||
|
custom-class="loading-class"
|
||||||
|
size="{{ loadingSize }}"
|
||||||
|
type="{{ loadingType }}"
|
||||||
|
color="{{ computed.loadingColor({ type, color, plain }) }}"
|
||||||
|
/>
|
||||||
|
<view wx:if="{{ loadingText }}" class="van-button__loading-text">
|
||||||
|
{{ loadingText }}
|
||||||
|
</view>
|
||||||
|
</block>
|
||||||
|
<block wx:else>
|
||||||
|
<van-icon
|
||||||
|
wx:if="{{ icon }}"
|
||||||
|
size="1.2em"
|
||||||
|
name="{{ icon }}"
|
||||||
|
class-prefix="{{ classPrefix }}"
|
||||||
|
class="van-button__icon"
|
||||||
|
custom-style="line-height: inherit;"
|
||||||
|
/>
|
||||||
|
<view class="van-button__text">
|
||||||
|
<slot />
|
||||||
|
</view>
|
||||||
|
</block>
|
||||||
|
</button>
|
@ -0,0 +1,39 @@
|
|||||||
|
/* eslint-disable */
|
||||||
|
var style = require('../wxs/style.wxs');
|
||||||
|
|
||||||
|
function rootStyle(data) {
|
||||||
|
if (!data.color) {
|
||||||
|
return data.customStyle;
|
||||||
|
}
|
||||||
|
|
||||||
|
var properties = {
|
||||||
|
color: data.plain ? data.color : '#fff',
|
||||||
|
background: data.plain ? null : data.color,
|
||||||
|
};
|
||||||
|
|
||||||
|
// hide border when color is linear-gradient
|
||||||
|
if (data.color.indexOf('gradient') !== -1) {
|
||||||
|
properties.border = 0;
|
||||||
|
} else {
|
||||||
|
properties['border-color'] = data.color;
|
||||||
|
}
|
||||||
|
|
||||||
|
return style([properties, data.customStyle]);
|
||||||
|
}
|
||||||
|
|
||||||
|
function loadingColor(data) {
|
||||||
|
if (data.plain) {
|
||||||
|
return data.color ? data.color : '#c9c9c9';
|
||||||
|
}
|
||||||
|
|
||||||
|
if (data.type === 'default') {
|
||||||
|
return '#c9c9c9';
|
||||||
|
}
|
||||||
|
|
||||||
|
return '#fff';
|
||||||
|
}
|
||||||
|
|
||||||
|
module.exports = {
|
||||||
|
rootStyle: rootStyle,
|
||||||
|
loadingColor: loadingColor,
|
||||||
|
};
|
@ -0,0 +1 @@
|
|||||||
|
@import '../common/index.wxss';.van-button{-webkit-text-size-adjust:100%;align-items:center;-webkit-appearance:none;border-radius:var(--button-border-radius,2px);box-sizing:border-box;display:inline-flex;font-size:var(--button-default-font-size,16px);height:var(--button-default-height,44px);justify-content:center;line-height:var(--button-line-height,20px);padding:0;position:relative;text-align:center;transition:opacity .2s;vertical-align:middle}.van-button:before{background-color:#000;border:inherit;border-color:#000;border-radius:inherit;content:" ";height:100%;left:50%;opacity:0;position:absolute;top:50%;transform:translate(-50%,-50%);width:100%}.van-button:after{border-width:0}.van-button--active:before{opacity:.15}.van-button--unclickable:after{display:none}.van-button--default{background:var(--button-default-background-color,#fff);border:var(--button-border-width,1px) solid var(--button-default-border-color,#ebedf0);color:var(--button-default-color,#323233)}.van-button--primary{background:var(--button-primary-background-color,#07c160);border:var(--button-border-width,1px) solid var(--button-primary-border-color,#07c160);color:var(--button-primary-color,#fff)}.van-button--info{background:var(--button-info-background-color,#1989fa);border:var(--button-border-width,1px) solid var(--button-info-border-color,#1989fa);color:var(--button-info-color,#fff)}.van-button--danger{background:var(--button-danger-background-color,#ee0a24);border:var(--button-border-width,1px) solid var(--button-danger-border-color,#ee0a24);color:var(--button-danger-color,#fff)}.van-button--warning{background:var(--button-warning-background-color,#ff976a);border:var(--button-border-width,1px) solid var(--button-warning-border-color,#ff976a);color:var(--button-warning-color,#fff)}.van-button--plain{background:var(--button-plain-background-color,#fff)}.van-button--plain.van-button--primary{color:var(--button-primary-background-color,#07c160)}.van-button--plain.van-button--info{color:var(--button-info-background-color,#1989fa)}.van-button--plain.van-button--danger{color:var(--button-danger-background-color,#ee0a24)}.van-button--plain.van-button--warning{color:var(--button-warning-background-color,#ff976a)}.van-button--large{height:var(--button-large-height,50px);width:100%}.van-button--normal{font-size:var(--button-normal-font-size,14px);padding:0 15px}.van-button--small{font-size:var(--button-small-font-size,12px);height:var(--button-small-height,30px);min-width:var(--button-small-min-width,60px);padding:0 var(--padding-xs,8px)}.van-button--mini{display:inline-block;font-size:var(--button-mini-font-size,10px);height:var(--button-mini-height,22px);min-width:var(--button-mini-min-width,50px)}.van-button--mini+.van-button--mini{margin-left:5px}.van-button--block{display:flex;width:100%}.van-button--round{border-radius:var(--button-round-border-radius,999px)}.van-button--square{border-radius:0}.van-button--disabled{opacity:var(--button-disabled-opacity,.5)}.van-button__text{display:inline}.van-button__icon+.van-button__text:not(:empty),.van-button__loading-text{margin-left:4px}.van-button__icon{line-height:inherit!important;min-width:1em;vertical-align:top}.van-button--hairline{border-width:0;padding-top:1px}.van-button--hairline:after{border-color:inherit;border-radius:calc(var(--button-border-radius, 2px)*2);border-width:1px}.van-button--hairline.van-button--round:after{border-radius:var(--button-round-border-radius,999px)}.van-button--hairline.van-button--square:after{border-radius:0}
|
@ -0,0 +1,70 @@
|
|||||||
|
<wxs src="./index.wxs" module="computed" />
|
||||||
|
<wxs src="../wxs/utils.wxs" module="utils" />
|
||||||
|
<view class="van-calendar">
|
||||||
|
<header
|
||||||
|
title="{{ title }}"
|
||||||
|
showTitle="{{ showTitle }}"
|
||||||
|
subtitle="{{ subtitle }}"
|
||||||
|
showSubtitle="{{ showSubtitle }}"
|
||||||
|
firstDayOfWeek="{{ firstDayOfWeek }}"
|
||||||
|
bind:click-subtitle="onClickSubtitle"
|
||||||
|
>
|
||||||
|
<slot name="title" slot="title"></slot>
|
||||||
|
</header>
|
||||||
|
|
||||||
|
<scroll-view
|
||||||
|
class="van-calendar__body"
|
||||||
|
scroll-y
|
||||||
|
scroll-into-view="{{ scrollIntoView }}"
|
||||||
|
>
|
||||||
|
<month
|
||||||
|
wx:for="{{ computed.getMonths(minDate, maxDate) }}"
|
||||||
|
wx:key="index"
|
||||||
|
id="month{{ index }}"
|
||||||
|
class="month"
|
||||||
|
data-date="{{ item }}"
|
||||||
|
date="{{ item }}"
|
||||||
|
type="{{ type }}"
|
||||||
|
color="{{ color }}"
|
||||||
|
minDate="{{ minDate }}"
|
||||||
|
maxDate="{{ maxDate }}"
|
||||||
|
showMark="{{ showMark }}"
|
||||||
|
formatter="{{ formatter }}"
|
||||||
|
rowHeight="{{ rowHeight }}"
|
||||||
|
currentDate="{{ currentDate }}"
|
||||||
|
showSubtitle="{{ showSubtitle }}"
|
||||||
|
allowSameDay="{{ allowSameDay }}"
|
||||||
|
showMonthTitle="{{ index !== 0 || !showSubtitle }}"
|
||||||
|
firstDayOfWeek="{{ firstDayOfWeek }}"
|
||||||
|
bind:click="onClickDay"
|
||||||
|
/>
|
||||||
|
</scroll-view>
|
||||||
|
|
||||||
|
<view
|
||||||
|
class="{{ utils.bem('calendar__footer', { safeAreaInsetBottom }) }}"
|
||||||
|
>
|
||||||
|
<slot name="footer"></slot>
|
||||||
|
</view>
|
||||||
|
|
||||||
|
<view
|
||||||
|
class="{{ utils.bem('calendar__footer', { safeAreaInsetBottom }) }}"
|
||||||
|
>
|
||||||
|
<van-button
|
||||||
|
wx:if="{{ showConfirm }}"
|
||||||
|
round
|
||||||
|
block
|
||||||
|
type="danger"
|
||||||
|
color="{{ color }}"
|
||||||
|
custom-class="van-calendar__confirm"
|
||||||
|
disabled="{{ computed.getButtonDisabled(type, currentDate, minRange) }}"
|
||||||
|
nativeType="text"
|
||||||
|
bind:click="onConfirm"
|
||||||
|
>
|
||||||
|
{{
|
||||||
|
computed.getButtonDisabled(type, currentDate, minRange)
|
||||||
|
? confirmDisabledText
|
||||||
|
: confirmText
|
||||||
|
}}
|
||||||
|
</van-button>
|
||||||
|
</view>
|
||||||
|
</view>
|
@ -0,0 +1 @@
|
|||||||
|
export {};
|
@ -0,0 +1,45 @@
|
|||||||
|
"use strict";
|
||||||
|
var __spreadArray = (this && this.__spreadArray) || function (to, from, pack) {
|
||||||
|
if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {
|
||||||
|
if (ar || !(i in from)) {
|
||||||
|
if (!ar) ar = Array.prototype.slice.call(from, 0, i);
|
||||||
|
ar[i] = from[i];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return to.concat(ar || Array.prototype.slice.call(from));
|
||||||
|
};
|
||||||
|
Object.defineProperty(exports, "__esModule", { value: true });
|
||||||
|
var component_1 = require("../../../common/component");
|
||||||
|
(0, component_1.VantComponent)({
|
||||||
|
props: {
|
||||||
|
title: {
|
||||||
|
type: String,
|
||||||
|
value: '日期选择',
|
||||||
|
},
|
||||||
|
subtitle: String,
|
||||||
|
showTitle: Boolean,
|
||||||
|
showSubtitle: Boolean,
|
||||||
|
firstDayOfWeek: {
|
||||||
|
type: Number,
|
||||||
|
observer: 'initWeekDay',
|
||||||
|
},
|
||||||
|
},
|
||||||
|
data: {
|
||||||
|
weekdays: [],
|
||||||
|
},
|
||||||
|
created: function () {
|
||||||
|
this.initWeekDay();
|
||||||
|
},
|
||||||
|
methods: {
|
||||||
|
initWeekDay: function () {
|
||||||
|
var defaultWeeks = ['日', '一', '二', '三', '四', '五', '六'];
|
||||||
|
var firstDayOfWeek = this.data.firstDayOfWeek || 0;
|
||||||
|
this.setData({
|
||||||
|
weekdays: __spreadArray(__spreadArray([], defaultWeeks.slice(firstDayOfWeek, 7), true), defaultWeeks.slice(0, firstDayOfWeek), true),
|
||||||
|
});
|
||||||
|
},
|
||||||
|
onClickSubtitle: function (event) {
|
||||||
|
this.$emit('click-subtitle', event);
|
||||||
|
},
|
||||||
|
},
|
||||||
|
});
|
@ -0,0 +1,3 @@
|
|||||||
|
{
|
||||||
|
"component": true
|
||||||
|
}
|
@ -0,0 +1,16 @@
|
|||||||
|
<view class="van-calendar__header">
|
||||||
|
<block wx:if="{{ showTitle }}">
|
||||||
|
<view class="van-calendar__header-title"><slot name="title"></slot></view>
|
||||||
|
<view class="van-calendar__header-title">{{ title }}</view>
|
||||||
|
</block>
|
||||||
|
|
||||||
|
<view wx:if="{{ showSubtitle }}" class="van-calendar__header-subtitle" bind:tap="onClickSubtitle">
|
||||||
|
{{ subtitle }}
|
||||||
|
</view>
|
||||||
|
|
||||||
|
<view class="van-calendar__weekdays">
|
||||||
|
<view wx:for="{{ weekdays }}" wx:key="index" class="van-calendar__weekday">
|
||||||
|
{{ item }}
|
||||||
|
</view>
|
||||||
|
</view>
|
||||||
|
</view>
|
@ -0,0 +1 @@
|
|||||||
|
@import '../../../common/index.wxss';.van-calendar__header{box-shadow:var(--calendar-header-box-shadow,0 2px 10px hsla(220,1%,50%,.16));flex-shrink:0}.van-calendar__header-subtitle,.van-calendar__header-title{font-weight:var(--font-weight-bold,500);height:var(--calendar-header-title-height,44px);line-height:var(--calendar-header-title-height,44px);text-align:center}.van-calendar__header-title+.van-calendar__header-title,.van-calendar__header-title:empty{display:none}.van-calendar__header-title:empty+.van-calendar__header-title{display:block!important}.van-calendar__weekdays{display:flex}.van-calendar__weekday{flex:1;font-size:var(--calendar-weekdays-font-size,12px);line-height:var(--calendar-weekdays-height,30px);text-align:center}
|
@ -0,0 +1,6 @@
|
|||||||
|
export interface Day {
|
||||||
|
date: Date;
|
||||||
|
type: string;
|
||||||
|
text: number;
|
||||||
|
bottomInfo?: string;
|
||||||
|
}
|
@ -0,0 +1,158 @@
|
|||||||
|
"use strict";
|
||||||
|
Object.defineProperty(exports, "__esModule", { value: true });
|
||||||
|
var component_1 = require("../../../common/component");
|
||||||
|
var utils_1 = require("../../utils");
|
||||||
|
(0, component_1.VantComponent)({
|
||||||
|
props: {
|
||||||
|
date: {
|
||||||
|
type: null,
|
||||||
|
observer: 'setDays',
|
||||||
|
},
|
||||||
|
type: {
|
||||||
|
type: String,
|
||||||
|
observer: 'setDays',
|
||||||
|
},
|
||||||
|
color: String,
|
||||||
|
minDate: {
|
||||||
|
type: null,
|
||||||
|
observer: 'setDays',
|
||||||
|
},
|
||||||
|
maxDate: {
|
||||||
|
type: null,
|
||||||
|
observer: 'setDays',
|
||||||
|
},
|
||||||
|
showMark: Boolean,
|
||||||
|
rowHeight: null,
|
||||||
|
formatter: {
|
||||||
|
type: null,
|
||||||
|
observer: 'setDays',
|
||||||
|
},
|
||||||
|
currentDate: {
|
||||||
|
type: null,
|
||||||
|
observer: 'setDays',
|
||||||
|
},
|
||||||
|
firstDayOfWeek: {
|
||||||
|
type: Number,
|
||||||
|
observer: 'setDays',
|
||||||
|
},
|
||||||
|
allowSameDay: Boolean,
|
||||||
|
showSubtitle: Boolean,
|
||||||
|
showMonthTitle: Boolean,
|
||||||
|
},
|
||||||
|
data: {
|
||||||
|
visible: true,
|
||||||
|
days: [],
|
||||||
|
},
|
||||||
|
methods: {
|
||||||
|
onClick: function (event) {
|
||||||
|
var index = event.currentTarget.dataset.index;
|
||||||
|
var item = this.data.days[index];
|
||||||
|
if (item.type !== 'disabled') {
|
||||||
|
this.$emit('click', item);
|
||||||
|
}
|
||||||
|
},
|
||||||
|
setDays: function () {
|
||||||
|
var days = [];
|
||||||
|
var startDate = new Date(this.data.date);
|
||||||
|
var year = startDate.getFullYear();
|
||||||
|
var month = startDate.getMonth();
|
||||||
|
var totalDay = (0, utils_1.getMonthEndDay)(startDate.getFullYear(), startDate.getMonth() + 1);
|
||||||
|
for (var day = 1; day <= totalDay; day++) {
|
||||||
|
var date = new Date(year, month, day);
|
||||||
|
var type = this.getDayType(date);
|
||||||
|
var config = {
|
||||||
|
date: date,
|
||||||
|
type: type,
|
||||||
|
text: day,
|
||||||
|
bottomInfo: this.getBottomInfo(type),
|
||||||
|
};
|
||||||
|
if (this.data.formatter) {
|
||||||
|
config = this.data.formatter(config);
|
||||||
|
}
|
||||||
|
days.push(config);
|
||||||
|
}
|
||||||
|
this.setData({ days: days });
|
||||||
|
},
|
||||||
|
getMultipleDayType: function (day) {
|
||||||
|
var currentDate = this.data.currentDate;
|
||||||
|
if (!Array.isArray(currentDate)) {
|
||||||
|
return '';
|
||||||
|
}
|
||||||
|
var isSelected = function (date) {
|
||||||
|
return currentDate.some(function (item) { return (0, utils_1.compareDay)(item, date) === 0; });
|
||||||
|
};
|
||||||
|
if (isSelected(day)) {
|
||||||
|
var prevDay = (0, utils_1.getPrevDay)(day);
|
||||||
|
var nextDay = (0, utils_1.getNextDay)(day);
|
||||||
|
var prevSelected = isSelected(prevDay);
|
||||||
|
var nextSelected = isSelected(nextDay);
|
||||||
|
if (prevSelected && nextSelected) {
|
||||||
|
return 'multiple-middle';
|
||||||
|
}
|
||||||
|
if (prevSelected) {
|
||||||
|
return 'end';
|
||||||
|
}
|
||||||
|
return nextSelected ? 'start' : 'multiple-selected';
|
||||||
|
}
|
||||||
|
return '';
|
||||||
|
},
|
||||||
|
getRangeDayType: function (day) {
|
||||||
|
var _a = this.data, currentDate = _a.currentDate, allowSameDay = _a.allowSameDay;
|
||||||
|
if (!Array.isArray(currentDate)) {
|
||||||
|
return '';
|
||||||
|
}
|
||||||
|
var startDay = currentDate[0], endDay = currentDate[1];
|
||||||
|
if (!startDay) {
|
||||||
|
return '';
|
||||||
|
}
|
||||||
|
var compareToStart = (0, utils_1.compareDay)(day, startDay);
|
||||||
|
if (!endDay) {
|
||||||
|
return compareToStart === 0 ? 'start' : '';
|
||||||
|
}
|
||||||
|
var compareToEnd = (0, utils_1.compareDay)(day, endDay);
|
||||||
|
if (compareToStart === 0 && compareToEnd === 0 && allowSameDay) {
|
||||||
|
return 'start-end';
|
||||||
|
}
|
||||||
|
if (compareToStart === 0) {
|
||||||
|
return 'start';
|
||||||
|
}
|
||||||
|
if (compareToEnd === 0) {
|
||||||
|
return 'end';
|
||||||
|
}
|
||||||
|
if (compareToStart > 0 && compareToEnd < 0) {
|
||||||
|
return 'middle';
|
||||||
|
}
|
||||||
|
return '';
|
||||||
|
},
|
||||||
|
getDayType: function (day) {
|
||||||
|
var _a = this.data, type = _a.type, minDate = _a.minDate, maxDate = _a.maxDate, currentDate = _a.currentDate;
|
||||||
|
if ((0, utils_1.compareDay)(day, minDate) < 0 || (0, utils_1.compareDay)(day, maxDate) > 0) {
|
||||||
|
return 'disabled';
|
||||||
|
}
|
||||||
|
if (type === 'single') {
|
||||||
|
return (0, utils_1.compareDay)(day, currentDate) === 0 ? 'selected' : '';
|
||||||
|
}
|
||||||
|
if (type === 'multiple') {
|
||||||
|
return this.getMultipleDayType(day);
|
||||||
|
}
|
||||||
|
/* istanbul ignore else */
|
||||||
|
if (type === 'range') {
|
||||||
|
return this.getRangeDayType(day);
|
||||||
|
}
|
||||||
|
return '';
|
||||||
|
},
|
||||||
|
getBottomInfo: function (type) {
|
||||||
|
if (this.data.type === 'range') {
|
||||||
|
if (type === 'start') {
|
||||||
|
return '开始';
|
||||||
|
}
|
||||||
|
if (type === 'end') {
|
||||||
|
return '结束';
|
||||||
|
}
|
||||||
|
if (type === 'start-end') {
|
||||||
|
return '开始/结束';
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
},
|
||||||
|
});
|
@ -0,0 +1,3 @@
|
|||||||
|
{
|
||||||
|
"component": true
|
||||||
|
}
|
@ -0,0 +1,39 @@
|
|||||||
|
<wxs src="./index.wxs" module="computed"></wxs>
|
||||||
|
<wxs src="../../../wxs/utils.wxs" module="utils" />
|
||||||
|
|
||||||
|
<view class="van-calendar__month" style="{{ computed.getMonthStyle(visible, date, rowHeight) }}">
|
||||||
|
<view wx:if="{{ showMonthTitle }}" class="van-calendar__month-title">
|
||||||
|
{{ computed.formatMonthTitle(date) }}
|
||||||
|
</view>
|
||||||
|
|
||||||
|
<view wx:if="{{ visible }}" class="van-calendar__days">
|
||||||
|
<view wx:if="{{ showMark }}" class="van-calendar__month-mark">
|
||||||
|
{{ computed.getMark(date) }}
|
||||||
|
</view>
|
||||||
|
|
||||||
|
<view
|
||||||
|
wx:for="{{ days }}"
|
||||||
|
wx:key="index"
|
||||||
|
style="{{ computed.getDayStyle(item.type, index, date, rowHeight, color, firstDayOfWeek) }}"
|
||||||
|
class="{{ utils.bem('calendar__day', [item.type]) }} {{ item.className }}"
|
||||||
|
data-index="{{ index }}"
|
||||||
|
bindtap="onClick"
|
||||||
|
>
|
||||||
|
<view wx:if="{{ item.type === 'selected' }}" class="van-calendar__selected-day" style="width: {{ rowHeight }}px; height: {{ rowHeight }}px; background: {{ color }}">
|
||||||
|
<view wx:if="{{ item.topInfo }}" class="van-calendar__top-info">{{ item.topInfo }}</view>
|
||||||
|
{{ item.text }}
|
||||||
|
<view wx:if="{{ item.bottomInfo }}" class="van-calendar__bottom-info">
|
||||||
|
{{ item.bottomInfo }}
|
||||||
|
</view>
|
||||||
|
</view>
|
||||||
|
|
||||||
|
<view wx:else>
|
||||||
|
<view wx:if="{{ item.topInfo }}" class="van-calendar__top-info">{{ item.topInfo }}</view>
|
||||||
|
{{ item.text }}
|
||||||
|
<view wx:if="{{ item.bottomInfo }}" class="van-calendar__bottom-info">
|
||||||
|
{{ item.bottomInfo }}
|
||||||
|
</view>
|
||||||
|
</view>
|
||||||
|
</view>
|
||||||
|
</view>
|
||||||
|
</view>
|
@ -0,0 +1,71 @@
|
|||||||
|
/* eslint-disable */
|
||||||
|
var utils = require('../../utils.wxs');
|
||||||
|
|
||||||
|
function getMark(date) {
|
||||||
|
return getDate(date).getMonth() + 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
var ROW_HEIGHT = 64;
|
||||||
|
|
||||||
|
function getDayStyle(type, index, date, rowHeight, color, firstDayOfWeek) {
|
||||||
|
var style = [];
|
||||||
|
var current = getDate(date).getDay() || 7;
|
||||||
|
var offset = current < firstDayOfWeek ? (7 - firstDayOfWeek + current) :
|
||||||
|
current === 7 && firstDayOfWeek === 0 ? 0 :
|
||||||
|
(current - firstDayOfWeek);
|
||||||
|
|
||||||
|
if (index === 0) {
|
||||||
|
style.push(['margin-left', (100 * offset) / 7 + '%']);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (rowHeight !== ROW_HEIGHT) {
|
||||||
|
style.push(['height', rowHeight + 'px']);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (color) {
|
||||||
|
if (
|
||||||
|
type === 'start' ||
|
||||||
|
type === 'end' ||
|
||||||
|
type === 'start-end' ||
|
||||||
|
type === 'multiple-selected' ||
|
||||||
|
type === 'multiple-middle'
|
||||||
|
) {
|
||||||
|
style.push(['background', color]);
|
||||||
|
} else if (type === 'middle') {
|
||||||
|
style.push(['color', color]);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return style
|
||||||
|
.map(function(item) {
|
||||||
|
return item.join(':');
|
||||||
|
})
|
||||||
|
.join(';');
|
||||||
|
}
|
||||||
|
|
||||||
|
function formatMonthTitle(date) {
|
||||||
|
date = getDate(date);
|
||||||
|
return date.getFullYear() + '年' + (date.getMonth() + 1) + '月';
|
||||||
|
}
|
||||||
|
|
||||||
|
function getMonthStyle(visible, date, rowHeight) {
|
||||||
|
if (!visible) {
|
||||||
|
date = getDate(date);
|
||||||
|
|
||||||
|
var totalDay = utils.getMonthEndDay(
|
||||||
|
date.getFullYear(),
|
||||||
|
date.getMonth() + 1
|
||||||
|
);
|
||||||
|
var offset = getDate(date).getDay();
|
||||||
|
var padding = Math.ceil((totalDay + offset) / 7) * rowHeight;
|
||||||
|
|
||||||
|
return 'padding-bottom:' + padding + 'px';
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
module.exports = {
|
||||||
|
getMark: getMark,
|
||||||
|
getDayStyle: getDayStyle,
|
||||||
|
formatMonthTitle: formatMonthTitle,
|
||||||
|
getMonthStyle: getMonthStyle
|
||||||
|
};
|
@ -0,0 +1 @@
|
|||||||
|
@import '../../../common/index.wxss';.van-calendar{background-color:var(--calendar-background-color,#fff);display:flex;flex-direction:column;height:100%}.van-calendar__month-title{font-size:var(--calendar-month-title-font-size,14px);font-weight:var(--font-weight-bold,500);height:var(--calendar-header-title-height,44px);line-height:var(--calendar-header-title-height,44px);text-align:center}.van-calendar__days{display:flex;flex-wrap:wrap;position:relative;-webkit-user-select:none;user-select:none}.van-calendar__month-mark{color:var(--calendar-month-mark-color,rgba(242,243,245,.8));font-size:var(--calendar-month-mark-font-size,160px);left:50%;pointer-events:none;position:absolute;top:50%;transform:translate(-50%,-50%);z-index:0}.van-calendar__day,.van-calendar__selected-day{align-items:center;display:flex;justify-content:center;text-align:center}.van-calendar__day{font-size:var(--calendar-day-font-size,16px);height:var(--calendar-day-height,64px);position:relative;width:14.285%}.van-calendar__day--end,.van-calendar__day--multiple-middle,.van-calendar__day--multiple-selected,.van-calendar__day--start,.van-calendar__day--start-end{background-color:var(--calendar-range-edge-background-color,#ee0a24);color:var(--calendar-range-edge-color,#fff)}.van-calendar__day--start{border-radius:4px 0 0 4px}.van-calendar__day--end{border-radius:0 4px 4px 0}.van-calendar__day--multiple-selected,.van-calendar__day--start-end{border-radius:4px}.van-calendar__day--middle{color:var(--calendar-range-middle-color,#ee0a24)}.van-calendar__day--middle:after{background-color:currentColor;bottom:0;content:"";left:0;opacity:var(--calendar-range-middle-background-opacity,.1);position:absolute;right:0;top:0}.van-calendar__day--disabled{color:var(--calendar-day-disabled-color,#c8c9cc);cursor:default}.van-calendar__bottom-info,.van-calendar__top-info{font-size:var(--calendar-info-font-size,10px);left:0;line-height:var(--calendar-info-line-height,14px);position:absolute;right:0}@media (max-width:350px){.van-calendar__bottom-info,.van-calendar__top-info{font-size:9px}}.van-calendar__top-info{top:6px}.van-calendar__bottom-info{bottom:6px}.van-calendar__selected-day{background-color:var(--calendar-selected-day-background-color,#ee0a24);border-radius:4px;color:var(--calendar-selected-day-color,#fff);height:var(--calendar-selected-day-size,54px);width:var(--calendar-selected-day-size,54px)}
|
@ -0,0 +1 @@
|
|||||||
|
export {};
|
@ -0,0 +1,383 @@
|
|||||||
|
"use strict";
|
||||||
|
var __spreadArray = (this && this.__spreadArray) || function (to, from, pack) {
|
||||||
|
if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {
|
||||||
|
if (ar || !(i in from)) {
|
||||||
|
if (!ar) ar = Array.prototype.slice.call(from, 0, i);
|
||||||
|
ar[i] = from[i];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return to.concat(ar || Array.prototype.slice.call(from));
|
||||||
|
};
|
||||||
|
var __importDefault = (this && this.__importDefault) || function (mod) {
|
||||||
|
return (mod && mod.__esModule) ? mod : { "default": mod };
|
||||||
|
};
|
||||||
|
Object.defineProperty(exports, "__esModule", { value: true });
|
||||||
|
var component_1 = require("../common/component");
|
||||||
|
var utils_1 = require("./utils");
|
||||||
|
var toast_1 = __importDefault(require("../toast/toast"));
|
||||||
|
var utils_2 = require("../common/utils");
|
||||||
|
var initialMinDate = (0, utils_1.getToday)().getTime();
|
||||||
|
var initialMaxDate = (function () {
|
||||||
|
var now = (0, utils_1.getToday)();
|
||||||
|
return new Date(now.getFullYear(), now.getMonth() + 6, now.getDate()).getTime();
|
||||||
|
})();
|
||||||
|
var getTime = function (date) {
|
||||||
|
return date instanceof Date ? date.getTime() : date;
|
||||||
|
};
|
||||||
|
(0, component_1.VantComponent)({
|
||||||
|
props: {
|
||||||
|
title: {
|
||||||
|
type: String,
|
||||||
|
value: '日期选择',
|
||||||
|
},
|
||||||
|
color: String,
|
||||||
|
show: {
|
||||||
|
type: Boolean,
|
||||||
|
observer: function (val) {
|
||||||
|
if (val) {
|
||||||
|
this.initRect();
|
||||||
|
this.scrollIntoView();
|
||||||
|
}
|
||||||
|
},
|
||||||
|
},
|
||||||
|
formatter: null,
|
||||||
|
confirmText: {
|
||||||
|
type: String,
|
||||||
|
value: '确定',
|
||||||
|
},
|
||||||
|
confirmDisabledText: {
|
||||||
|
type: String,
|
||||||
|
value: '确定',
|
||||||
|
},
|
||||||
|
rangePrompt: String,
|
||||||
|
showRangePrompt: {
|
||||||
|
type: Boolean,
|
||||||
|
value: true,
|
||||||
|
},
|
||||||
|
defaultDate: {
|
||||||
|
type: null,
|
||||||
|
value: (0, utils_1.getToday)().getTime(),
|
||||||
|
observer: function (val) {
|
||||||
|
this.setData({ currentDate: val });
|
||||||
|
this.scrollIntoView();
|
||||||
|
},
|
||||||
|
},
|
||||||
|
allowSameDay: Boolean,
|
||||||
|
type: {
|
||||||
|
type: String,
|
||||||
|
value: 'single',
|
||||||
|
observer: 'reset',
|
||||||
|
},
|
||||||
|
minDate: {
|
||||||
|
type: Number,
|
||||||
|
value: initialMinDate,
|
||||||
|
},
|
||||||
|
maxDate: {
|
||||||
|
type: Number,
|
||||||
|
value: initialMaxDate,
|
||||||
|
},
|
||||||
|
position: {
|
||||||
|
type: String,
|
||||||
|
value: 'bottom',
|
||||||
|
},
|
||||||
|
rowHeight: {
|
||||||
|
type: null,
|
||||||
|
value: utils_1.ROW_HEIGHT,
|
||||||
|
},
|
||||||
|
round: {
|
||||||
|
type: Boolean,
|
||||||
|
value: true,
|
||||||
|
},
|
||||||
|
poppable: {
|
||||||
|
type: Boolean,
|
||||||
|
value: true,
|
||||||
|
},
|
||||||
|
showMark: {
|
||||||
|
type: Boolean,
|
||||||
|
value: true,
|
||||||
|
},
|
||||||
|
showTitle: {
|
||||||
|
type: Boolean,
|
||||||
|
value: true,
|
||||||
|
},
|
||||||
|
showConfirm: {
|
||||||
|
type: Boolean,
|
||||||
|
value: true,
|
||||||
|
},
|
||||||
|
showSubtitle: {
|
||||||
|
type: Boolean,
|
||||||
|
value: true,
|
||||||
|
},
|
||||||
|
safeAreaInsetBottom: {
|
||||||
|
type: Boolean,
|
||||||
|
value: true,
|
||||||
|
},
|
||||||
|
closeOnClickOverlay: {
|
||||||
|
type: Boolean,
|
||||||
|
value: true,
|
||||||
|
},
|
||||||
|
maxRange: {
|
||||||
|
type: null,
|
||||||
|
value: null,
|
||||||
|
},
|
||||||
|
minRange: {
|
||||||
|
type: Number,
|
||||||
|
value: 1,
|
||||||
|
},
|
||||||
|
firstDayOfWeek: {
|
||||||
|
type: Number,
|
||||||
|
value: 0,
|
||||||
|
},
|
||||||
|
readonly: Boolean,
|
||||||
|
rootPortal: {
|
||||||
|
type: Boolean,
|
||||||
|
value: false,
|
||||||
|
},
|
||||||
|
},
|
||||||
|
data: {
|
||||||
|
subtitle: '',
|
||||||
|
currentDate: null,
|
||||||
|
scrollIntoView: '',
|
||||||
|
},
|
||||||
|
watch: {
|
||||||
|
minDate: function () {
|
||||||
|
this.initRect();
|
||||||
|
},
|
||||||
|
maxDate: function () {
|
||||||
|
this.initRect();
|
||||||
|
},
|
||||||
|
},
|
||||||
|
created: function () {
|
||||||
|
this.setData({
|
||||||
|
currentDate: this.getInitialDate(this.data.defaultDate),
|
||||||
|
});
|
||||||
|
},
|
||||||
|
mounted: function () {
|
||||||
|
if (this.data.show || !this.data.poppable) {
|
||||||
|
this.initRect();
|
||||||
|
this.scrollIntoView();
|
||||||
|
}
|
||||||
|
},
|
||||||
|
methods: {
|
||||||
|
reset: function () {
|
||||||
|
this.setData({ currentDate: this.getInitialDate(this.data.defaultDate) });
|
||||||
|
this.scrollIntoView();
|
||||||
|
},
|
||||||
|
initRect: function () {
|
||||||
|
var _this = this;
|
||||||
|
if (this.contentObserver != null) {
|
||||||
|
this.contentObserver.disconnect();
|
||||||
|
}
|
||||||
|
var contentObserver = this.createIntersectionObserver({
|
||||||
|
thresholds: [0, 0.1, 0.9, 1],
|
||||||
|
observeAll: true,
|
||||||
|
});
|
||||||
|
this.contentObserver = contentObserver;
|
||||||
|
contentObserver.relativeTo('.van-calendar__body');
|
||||||
|
contentObserver.observe('.month', function (res) {
|
||||||
|
if (res.boundingClientRect.top <= res.relativeRect.top) {
|
||||||
|
// @ts-ignore
|
||||||
|
_this.setData({ subtitle: (0, utils_1.formatMonthTitle)(res.dataset.date) });
|
||||||
|
}
|
||||||
|
});
|
||||||
|
},
|
||||||
|
limitDateRange: function (date, minDate, maxDate) {
|
||||||
|
if (minDate === void 0) { minDate = null; }
|
||||||
|
if (maxDate === void 0) { maxDate = null; }
|
||||||
|
minDate = minDate || this.data.minDate;
|
||||||
|
maxDate = maxDate || this.data.maxDate;
|
||||||
|
if ((0, utils_1.compareDay)(date, minDate) === -1) {
|
||||||
|
return minDate;
|
||||||
|
}
|
||||||
|
if ((0, utils_1.compareDay)(date, maxDate) === 1) {
|
||||||
|
return maxDate;
|
||||||
|
}
|
||||||
|
return date;
|
||||||
|
},
|
||||||
|
getInitialDate: function (defaultDate) {
|
||||||
|
var _this = this;
|
||||||
|
if (defaultDate === void 0) { defaultDate = null; }
|
||||||
|
var _a = this.data, type = _a.type, minDate = _a.minDate, maxDate = _a.maxDate, allowSameDay = _a.allowSameDay;
|
||||||
|
if (!defaultDate)
|
||||||
|
return [];
|
||||||
|
var now = (0, utils_1.getToday)().getTime();
|
||||||
|
if (type === 'range') {
|
||||||
|
if (!Array.isArray(defaultDate)) {
|
||||||
|
defaultDate = [];
|
||||||
|
}
|
||||||
|
var _b = defaultDate || [], startDay = _b[0], endDay = _b[1];
|
||||||
|
var startDate = getTime(startDay || now);
|
||||||
|
var start = this.limitDateRange(startDate, minDate, allowSameDay ? startDate : (0, utils_1.getPrevDay)(new Date(maxDate)).getTime());
|
||||||
|
var date = getTime(endDay || now);
|
||||||
|
var end = this.limitDateRange(date, allowSameDay ? date : (0, utils_1.getNextDay)(new Date(minDate)).getTime());
|
||||||
|
return [start, end];
|
||||||
|
}
|
||||||
|
if (type === 'multiple') {
|
||||||
|
if (Array.isArray(defaultDate)) {
|
||||||
|
return defaultDate.map(function (date) { return _this.limitDateRange(date); });
|
||||||
|
}
|
||||||
|
return [this.limitDateRange(now)];
|
||||||
|
}
|
||||||
|
if (!defaultDate || Array.isArray(defaultDate)) {
|
||||||
|
defaultDate = now;
|
||||||
|
}
|
||||||
|
return this.limitDateRange(defaultDate);
|
||||||
|
},
|
||||||
|
scrollIntoView: function () {
|
||||||
|
var _this = this;
|
||||||
|
(0, utils_2.requestAnimationFrame)(function () {
|
||||||
|
var _a = _this.data, currentDate = _a.currentDate, type = _a.type, show = _a.show, poppable = _a.poppable, minDate = _a.minDate, maxDate = _a.maxDate;
|
||||||
|
if (!currentDate)
|
||||||
|
return;
|
||||||
|
// @ts-ignore
|
||||||
|
var targetDate = type === 'single' ? currentDate : currentDate[0];
|
||||||
|
var displayed = show || !poppable;
|
||||||
|
if (!targetDate || !displayed) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
var months = (0, utils_1.getMonths)(minDate, maxDate);
|
||||||
|
months.some(function (month, index) {
|
||||||
|
if ((0, utils_1.compareMonth)(month, targetDate) === 0) {
|
||||||
|
_this.setData({ scrollIntoView: "month".concat(index) });
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
});
|
||||||
|
});
|
||||||
|
},
|
||||||
|
onOpen: function () {
|
||||||
|
this.$emit('open');
|
||||||
|
},
|
||||||
|
onOpened: function () {
|
||||||
|
this.$emit('opened');
|
||||||
|
},
|
||||||
|
onClose: function () {
|
||||||
|
this.$emit('close');
|
||||||
|
},
|
||||||
|
onClosed: function () {
|
||||||
|
this.$emit('closed');
|
||||||
|
},
|
||||||
|
onClickDay: function (event) {
|
||||||
|
if (this.data.readonly) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
var date = event.detail.date;
|
||||||
|
var _a = this.data, type = _a.type, currentDate = _a.currentDate, allowSameDay = _a.allowSameDay;
|
||||||
|
if (type === 'range') {
|
||||||
|
// @ts-ignore
|
||||||
|
var startDay_1 = currentDate[0], endDay = currentDate[1];
|
||||||
|
if (startDay_1 && !endDay) {
|
||||||
|
var compareToStart = (0, utils_1.compareDay)(date, startDay_1);
|
||||||
|
if (compareToStart === 1) {
|
||||||
|
var days_1 = this.selectComponent('.month').data.days;
|
||||||
|
days_1.some(function (day, index) {
|
||||||
|
var isDisabled = day.type === 'disabled' &&
|
||||||
|
getTime(startDay_1) < getTime(day.date) &&
|
||||||
|
getTime(day.date) < getTime(date);
|
||||||
|
if (isDisabled) {
|
||||||
|
(date = days_1[index - 1].date);
|
||||||
|
}
|
||||||
|
return isDisabled;
|
||||||
|
});
|
||||||
|
this.select([startDay_1, date], true);
|
||||||
|
}
|
||||||
|
else if (compareToStart === -1) {
|
||||||
|
this.select([date, null]);
|
||||||
|
}
|
||||||
|
else if (allowSameDay) {
|
||||||
|
this.select([date, date], true);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
this.select([date, null]);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else if (type === 'multiple') {
|
||||||
|
var selectedIndex_1;
|
||||||
|
// @ts-ignore
|
||||||
|
var selected = currentDate.some(function (dateItem, index) {
|
||||||
|
var equal = (0, utils_1.compareDay)(dateItem, date) === 0;
|
||||||
|
if (equal) {
|
||||||
|
selectedIndex_1 = index;
|
||||||
|
}
|
||||||
|
return equal;
|
||||||
|
});
|
||||||
|
if (selected) {
|
||||||
|
// @ts-ignore
|
||||||
|
var cancelDate = currentDate.splice(selectedIndex_1, 1);
|
||||||
|
this.setData({ currentDate: currentDate });
|
||||||
|
this.unselect(cancelDate);
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
// @ts-ignore
|
||||||
|
this.select(__spreadArray(__spreadArray([], currentDate, true), [date], false));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
this.select(date, true);
|
||||||
|
}
|
||||||
|
},
|
||||||
|
unselect: function (dateArray) {
|
||||||
|
var date = dateArray[0];
|
||||||
|
if (date) {
|
||||||
|
this.$emit('unselect', (0, utils_1.copyDates)(date));
|
||||||
|
}
|
||||||
|
},
|
||||||
|
select: function (date, complete) {
|
||||||
|
if (complete && this.data.type === 'range') {
|
||||||
|
var valid = this.checkRange(date);
|
||||||
|
if (!valid) {
|
||||||
|
// auto selected to max range if showConfirm
|
||||||
|
if (this.data.showConfirm) {
|
||||||
|
this.emit([
|
||||||
|
date[0],
|
||||||
|
(0, utils_1.getDayByOffset)(date[0], this.data.maxRange - 1),
|
||||||
|
]);
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
this.emit(date);
|
||||||
|
}
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
this.emit(date);
|
||||||
|
if (complete && !this.data.showConfirm) {
|
||||||
|
this.onConfirm();
|
||||||
|
}
|
||||||
|
},
|
||||||
|
emit: function (date) {
|
||||||
|
this.setData({
|
||||||
|
currentDate: Array.isArray(date) ? date.map(getTime) : getTime(date),
|
||||||
|
});
|
||||||
|
this.$emit('select', (0, utils_1.copyDates)(date));
|
||||||
|
},
|
||||||
|
checkRange: function (date) {
|
||||||
|
var _a = this.data, maxRange = _a.maxRange, rangePrompt = _a.rangePrompt, showRangePrompt = _a.showRangePrompt;
|
||||||
|
if (maxRange && (0, utils_1.calcDateNum)(date) > maxRange) {
|
||||||
|
if (showRangePrompt) {
|
||||||
|
(0, toast_1.default)({
|
||||||
|
context: this,
|
||||||
|
message: rangePrompt || "\u9009\u62E9\u5929\u6570\u4E0D\u80FD\u8D85\u8FC7 ".concat(maxRange, " \u5929"),
|
||||||
|
});
|
||||||
|
}
|
||||||
|
this.$emit('over-range');
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
return true;
|
||||||
|
},
|
||||||
|
onConfirm: function () {
|
||||||
|
var _this = this;
|
||||||
|
if (this.data.type === 'range' &&
|
||||||
|
!this.checkRange(this.data.currentDate)) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
wx.nextTick(function () {
|
||||||
|
// @ts-ignore
|
||||||
|
_this.$emit('confirm', (0, utils_1.copyDates)(_this.data.currentDate));
|
||||||
|
});
|
||||||
|
},
|
||||||
|
onClickSubtitle: function (event) {
|
||||||
|
this.$emit('click-subtitle', event);
|
||||||
|
},
|
||||||
|
},
|
||||||
|
});
|
@ -0,0 +1,10 @@
|
|||||||
|
{
|
||||||
|
"component": true,
|
||||||
|
"usingComponents": {
|
||||||
|
"header": "./components/header/index",
|
||||||
|
"month": "./components/month/index",
|
||||||
|
"van-button": "../button/index",
|
||||||
|
"van-popup": "../popup/index",
|
||||||
|
"van-toast": "../toast/index"
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,27 @@
|
|||||||
|
<wxs src="./index.wxs" module="computed" />
|
||||||
|
<wxs src="../wxs/utils.wxs" module="utils" />
|
||||||
|
|
||||||
|
<import src="./calendar.wxml" />
|
||||||
|
|
||||||
|
<van-popup
|
||||||
|
wx:if="{{ poppable }}"
|
||||||
|
custom-class="van-calendar__popup--{{ position }}"
|
||||||
|
close-icon-class="van-calendar__close-icon"
|
||||||
|
show="{{ show }}"
|
||||||
|
round="{{ round }}"
|
||||||
|
position="{{ position }}"
|
||||||
|
closeable="{{ showTitle || showSubtitle }}"
|
||||||
|
close-on-click-overlay="{{ closeOnClickOverlay }}"
|
||||||
|
safe-area-inset-bottom="{{ safeAreaInsetBottom }}"
|
||||||
|
root-portal="{{ rootPortal }}"
|
||||||
|
bind:enter="onOpen"
|
||||||
|
bind:close="onClose"
|
||||||
|
bind:after-enter="onOpened"
|
||||||
|
bind:after-leave="onClosed"
|
||||||
|
>
|
||||||
|
<include src="./calendar.wxml" />
|
||||||
|
</van-popup>
|
||||||
|
|
||||||
|
<include wx:else src="./calendar.wxml" />
|
||||||
|
|
||||||
|
<van-toast id="van-toast" />
|
@ -0,0 +1,37 @@
|
|||||||
|
/* eslint-disable */
|
||||||
|
var utils = require('./utils.wxs');
|
||||||
|
|
||||||
|
function getMonths(minDate, maxDate) {
|
||||||
|
var months = [];
|
||||||
|
var cursor = getDate(minDate);
|
||||||
|
|
||||||
|
cursor.setDate(1);
|
||||||
|
|
||||||
|
do {
|
||||||
|
months.push(cursor.getTime());
|
||||||
|
cursor.setMonth(cursor.getMonth() + 1);
|
||||||
|
} while (utils.compareMonth(cursor, getDate(maxDate)) !== 1);
|
||||||
|
|
||||||
|
return months;
|
||||||
|
}
|
||||||
|
|
||||||
|
function getButtonDisabled(type, currentDate, minRange) {
|
||||||
|
if (currentDate == null) {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (type === 'range') {
|
||||||
|
return !currentDate[0] || !currentDate[1];
|
||||||
|
}
|
||||||
|
|
||||||
|
if (type === 'multiple') {
|
||||||
|
return currentDate.length < minRange;
|
||||||
|
}
|
||||||
|
|
||||||
|
return !currentDate;
|
||||||
|
}
|
||||||
|
|
||||||
|
module.exports = {
|
||||||
|
getMonths: getMonths,
|
||||||
|
getButtonDisabled: getButtonDisabled
|
||||||
|
};
|
@ -0,0 +1 @@
|
|||||||
|
@import '../common/index.wxss';.van-calendar{background-color:var(--calendar-background-color,#fff);display:flex;flex-direction:column;height:var(--calendar-height,100%)}.van-calendar__close-icon{top:11px}.van-calendar__popup--bottom,.van-calendar__popup--top{height:var(--calendar-popup-height,90%)}.van-calendar__popup--left,.van-calendar__popup--right{height:100%}.van-calendar__body{-webkit-overflow-scrolling:touch;flex:1;overflow:auto}.van-calendar__footer{flex-shrink:0;padding:0 var(--padding-md,16px)}.van-calendar__footer--safe-area-inset-bottom{padding-bottom:env(safe-area-inset-bottom)}.van-calendar__footer+.van-calendar__footer,.van-calendar__footer:empty{display:none}.van-calendar__footer:empty+.van-calendar__footer{display:block!important}.van-calendar__confirm{height:var(--calendar-confirm-button-height,36px)!important;line-height:var(--calendar-confirm-button-line-height,34px)!important;margin:var(--calendar-confirm-button-margin,7px 0)!important}
|
@ -0,0 +1,12 @@
|
|||||||
|
export declare const ROW_HEIGHT = 64;
|
||||||
|
export declare function formatMonthTitle(date: Date): string;
|
||||||
|
export declare function compareMonth(date1: Date | number, date2: Date | number): 0 | 1 | -1;
|
||||||
|
export declare function compareDay(day1: Date | number, day2: Date | number): 0 | 1 | -1;
|
||||||
|
export declare function getDayByOffset(date: Date, offset: number): Date;
|
||||||
|
export declare function getPrevDay(date: Date): Date;
|
||||||
|
export declare function getNextDay(date: Date): Date;
|
||||||
|
export declare function getToday(): Date;
|
||||||
|
export declare function calcDateNum(date: [Date, Date]): number;
|
||||||
|
export declare function copyDates(dates: Date | Date[]): Date | Date[];
|
||||||
|
export declare function getMonthEndDay(year: number, month: number): number;
|
||||||
|
export declare function getMonths(minDate: number, maxDate: number): number[];
|
@ -0,0 +1,97 @@
|
|||||||
|
"use strict";
|
||||||
|
Object.defineProperty(exports, "__esModule", { value: true });
|
||||||
|
exports.getMonths = exports.getMonthEndDay = exports.copyDates = exports.calcDateNum = exports.getToday = exports.getNextDay = exports.getPrevDay = exports.getDayByOffset = exports.compareDay = exports.compareMonth = exports.formatMonthTitle = exports.ROW_HEIGHT = void 0;
|
||||||
|
exports.ROW_HEIGHT = 64;
|
||||||
|
function formatMonthTitle(date) {
|
||||||
|
if (!(date instanceof Date)) {
|
||||||
|
date = new Date(date);
|
||||||
|
}
|
||||||
|
return "".concat(date.getFullYear(), "\u5E74").concat(date.getMonth() + 1, "\u6708");
|
||||||
|
}
|
||||||
|
exports.formatMonthTitle = formatMonthTitle;
|
||||||
|
function compareMonth(date1, date2) {
|
||||||
|
if (!(date1 instanceof Date)) {
|
||||||
|
date1 = new Date(date1);
|
||||||
|
}
|
||||||
|
if (!(date2 instanceof Date)) {
|
||||||
|
date2 = new Date(date2);
|
||||||
|
}
|
||||||
|
var year1 = date1.getFullYear();
|
||||||
|
var year2 = date2.getFullYear();
|
||||||
|
var month1 = date1.getMonth();
|
||||||
|
var month2 = date2.getMonth();
|
||||||
|
if (year1 === year2) {
|
||||||
|
return month1 === month2 ? 0 : month1 > month2 ? 1 : -1;
|
||||||
|
}
|
||||||
|
return year1 > year2 ? 1 : -1;
|
||||||
|
}
|
||||||
|
exports.compareMonth = compareMonth;
|
||||||
|
function compareDay(day1, day2) {
|
||||||
|
if (!(day1 instanceof Date)) {
|
||||||
|
day1 = new Date(day1);
|
||||||
|
}
|
||||||
|
if (!(day2 instanceof Date)) {
|
||||||
|
day2 = new Date(day2);
|
||||||
|
}
|
||||||
|
var compareMonthResult = compareMonth(day1, day2);
|
||||||
|
if (compareMonthResult === 0) {
|
||||||
|
var date1 = day1.getDate();
|
||||||
|
var date2 = day2.getDate();
|
||||||
|
return date1 === date2 ? 0 : date1 > date2 ? 1 : -1;
|
||||||
|
}
|
||||||
|
return compareMonthResult;
|
||||||
|
}
|
||||||
|
exports.compareDay = compareDay;
|
||||||
|
function getDayByOffset(date, offset) {
|
||||||
|
date = new Date(date);
|
||||||
|
date.setDate(date.getDate() + offset);
|
||||||
|
return date;
|
||||||
|
}
|
||||||
|
exports.getDayByOffset = getDayByOffset;
|
||||||
|
function getPrevDay(date) {
|
||||||
|
return getDayByOffset(date, -1);
|
||||||
|
}
|
||||||
|
exports.getPrevDay = getPrevDay;
|
||||||
|
function getNextDay(date) {
|
||||||
|
return getDayByOffset(date, 1);
|
||||||
|
}
|
||||||
|
exports.getNextDay = getNextDay;
|
||||||
|
function getToday() {
|
||||||
|
var today = new Date();
|
||||||
|
today.setHours(0, 0, 0, 0);
|
||||||
|
return today;
|
||||||
|
}
|
||||||
|
exports.getToday = getToday;
|
||||||
|
function calcDateNum(date) {
|
||||||
|
var day1 = new Date(date[0]).getTime();
|
||||||
|
var day2 = new Date(date[1]).getTime();
|
||||||
|
return (day2 - day1) / (1000 * 60 * 60 * 24) + 1;
|
||||||
|
}
|
||||||
|
exports.calcDateNum = calcDateNum;
|
||||||
|
function copyDates(dates) {
|
||||||
|
if (Array.isArray(dates)) {
|
||||||
|
return dates.map(function (date) {
|
||||||
|
if (date === null) {
|
||||||
|
return date;
|
||||||
|
}
|
||||||
|
return new Date(date);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
return new Date(dates);
|
||||||
|
}
|
||||||
|
exports.copyDates = copyDates;
|
||||||
|
function getMonthEndDay(year, month) {
|
||||||
|
return 32 - new Date(year, month - 1, 32).getDate();
|
||||||
|
}
|
||||||
|
exports.getMonthEndDay = getMonthEndDay;
|
||||||
|
function getMonths(minDate, maxDate) {
|
||||||
|
var months = [];
|
||||||
|
var cursor = new Date(minDate);
|
||||||
|
cursor.setDate(1);
|
||||||
|
do {
|
||||||
|
months.push(cursor.getTime());
|
||||||
|
cursor.setMonth(cursor.getMonth() + 1);
|
||||||
|
} while (compareMonth(cursor, maxDate) !== 1);
|
||||||
|
return months;
|
||||||
|
}
|
||||||
|
exports.getMonths = getMonths;
|
@ -0,0 +1,25 @@
|
|||||||
|
/* eslint-disable */
|
||||||
|
function getMonthEndDay(year, month) {
|
||||||
|
return 32 - getDate(year, month - 1, 32).getDate();
|
||||||
|
}
|
||||||
|
|
||||||
|
function compareMonth(date1, date2) {
|
||||||
|
date1 = getDate(date1);
|
||||||
|
date2 = getDate(date2);
|
||||||
|
|
||||||
|
var year1 = date1.getFullYear();
|
||||||
|
var year2 = date2.getFullYear();
|
||||||
|
var month1 = date1.getMonth();
|
||||||
|
var month2 = date2.getMonth();
|
||||||
|
|
||||||
|
if (year1 === year2) {
|
||||||
|
return month1 === month2 ? 0 : month1 > month2 ? 1 : -1;
|
||||||
|
}
|
||||||
|
|
||||||
|
return year1 > year2 ? 1 : -1;
|
||||||
|
}
|
||||||
|
|
||||||
|
module.exports = {
|
||||||
|
getMonthEndDay: getMonthEndDay,
|
||||||
|
compareMonth: compareMonth
|
||||||
|
};
|
@ -0,0 +1 @@
|
|||||||
|
export {};
|
@ -0,0 +1,51 @@
|
|||||||
|
"use strict";
|
||||||
|
Object.defineProperty(exports, "__esModule", { value: true });
|
||||||
|
var link_1 = require("../mixins/link");
|
||||||
|
var component_1 = require("../common/component");
|
||||||
|
(0, component_1.VantComponent)({
|
||||||
|
classes: [
|
||||||
|
'num-class',
|
||||||
|
'desc-class',
|
||||||
|
'thumb-class',
|
||||||
|
'title-class',
|
||||||
|
'price-class',
|
||||||
|
'origin-price-class',
|
||||||
|
],
|
||||||
|
mixins: [link_1.link],
|
||||||
|
props: {
|
||||||
|
tag: String,
|
||||||
|
num: String,
|
||||||
|
desc: String,
|
||||||
|
thumb: String,
|
||||||
|
title: String,
|
||||||
|
price: {
|
||||||
|
type: String,
|
||||||
|
observer: 'updatePrice',
|
||||||
|
},
|
||||||
|
centered: Boolean,
|
||||||
|
lazyLoad: Boolean,
|
||||||
|
thumbLink: String,
|
||||||
|
originPrice: String,
|
||||||
|
thumbMode: {
|
||||||
|
type: String,
|
||||||
|
value: 'aspectFit',
|
||||||
|
},
|
||||||
|
currency: {
|
||||||
|
type: String,
|
||||||
|
value: '¥',
|
||||||
|
},
|
||||||
|
},
|
||||||
|
methods: {
|
||||||
|
updatePrice: function () {
|
||||||
|
var price = this.data.price;
|
||||||
|
var priceArr = price.toString().split('.');
|
||||||
|
this.setData({
|
||||||
|
integerStr: priceArr[0],
|
||||||
|
decimalStr: priceArr[1] ? ".".concat(priceArr[1]) : '',
|
||||||
|
});
|
||||||
|
},
|
||||||
|
onClickThumb: function () {
|
||||||
|
this.jumpLink('thumbLink');
|
||||||
|
},
|
||||||
|
},
|
||||||
|
});
|
@ -0,0 +1,6 @@
|
|||||||
|
{
|
||||||
|
"component": true,
|
||||||
|
"usingComponents": {
|
||||||
|
"van-tag": "../tag/index"
|
||||||
|
}
|
||||||
|
}
|