Compare commits
1 Commits
Author | SHA1 | Date |
---|---|---|
|
78c683bf9c | 3 months ago |
After Width: | Height: | Size: 15 KiB |
After Width: | Height: | Size: 40 KiB |
After Width: | Height: | Size: 17 KiB |
After Width: | Height: | Size: 46 KiB |
After Width: | Height: | Size: 17 KiB |
After Width: | Height: | Size: 37 KiB |
After Width: | Height: | Size: 18 KiB |
After Width: | Height: | Size: 75 KiB |
After Width: | Height: | Size: 16 KiB |
After Width: | Height: | Size: 50 KiB |
After Width: | Height: | Size: 20 KiB |
After Width: | Height: | Size: 47 KiB |
After Width: | Height: | Size: 18 KiB |
After Width: | Height: | Size: 44 KiB |
After Width: | Height: | Size: 17 KiB |
After Width: | Height: | Size: 45 KiB |
After Width: | Height: | Size: 56 KiB |
After Width: | Height: | Size: 65 KiB |
After Width: | Height: | Size: 58 KiB |
After Width: | Height: | Size: 65 KiB |
After Width: | Height: | Size: 14 KiB |
After Width: | Height: | Size: 60 KiB |
After Width: | Height: | Size: 70 KiB |
After Width: | Height: | Size: 630 KiB |
@ -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,104 @@
|
|||||||
|
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 (username, 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 (#{username}, #{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,14 @@
|
|||||||
|
package com.sa.unsafeincidents.pojo;
|
||||||
|
|
||||||
|
import com.fasterxml.jackson.annotation.JsonIgnore;
|
||||||
|
import lombok.Data;
|
||||||
|
|
||||||
|
@Data
|
||||||
|
public class Image {
|
||||||
|
private Integer id; //图片id
|
||||||
|
private String image; //图片url
|
||||||
|
private String link; //图片跳转链接
|
||||||
|
private String content; //图片文本
|
||||||
|
@JsonIgnore
|
||||||
|
private String category; //图片类别,图片用在什么地方
|
||||||
|
}
|
@ -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,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);
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1 @@
|
|||||||
|
Subproject commit 82e6cdfe5347265c04cced222bd6398dcb6eb279
|
Before Width: | Height: | Size: 5.1 KiB After Width: | Height: | Size: 5.1 KiB |
Before Width: | Height: | Size: 4.8 KiB After Width: | Height: | Size: 4.8 KiB |
Before Width: | Height: | Size: 4.7 KiB After Width: | Height: | Size: 4.7 KiB |
Before Width: | Height: | Size: 5.0 KiB After Width: | Height: | Size: 5.0 KiB |
Before Width: | Height: | Size: 4.2 KiB After Width: | Height: | Size: 4.2 KiB |
Before Width: | Height: | Size: 23 KiB After Width: | Height: | Size: 23 KiB |
Before Width: | Height: | Size: 28 KiB After Width: | Height: | Size: 28 KiB |
Before Width: | Height: | Size: 3.7 KiB After Width: | Height: | Size: 3.7 KiB |
Before Width: | Height: | Size: 3.3 KiB After Width: | Height: | Size: 3.3 KiB |
Before Width: | Height: | Size: 3.8 KiB After Width: | Height: | Size: 3.8 KiB |
Before Width: | Height: | Size: 4.1 KiB After Width: | Height: | Size: 4.1 KiB |
Before Width: | Height: | Size: 3.8 KiB After Width: | Height: | Size: 3.8 KiB |
Before Width: | Height: | Size: 4.6 KiB After Width: | Height: | Size: 4.6 KiB |
Before Width: | Height: | Size: 3.8 KiB After Width: | Height: | Size: 3.8 KiB |
Before Width: | Height: | Size: 21 KiB After Width: | Height: | Size: 21 KiB |
Before Width: | Height: | Size: 22 KiB After Width: | Height: | Size: 22 KiB |
Before Width: | Height: | Size: 9.5 KiB After Width: | Height: | Size: 9.5 KiB |
Before Width: | Height: | Size: 41 KiB After Width: | Height: | Size: 41 KiB |
Before Width: | Height: | Size: 2.9 KiB After Width: | Height: | Size: 2.9 KiB |
Before Width: | Height: | Size: 3.5 KiB After Width: | Height: | Size: 3.5 KiB |
Before Width: | Height: | Size: 2.8 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();
|
||||||
|
},
|
||||||
|
},
|
||||||
|
});
|