Compare commits

..

4 Commits

Author SHA1 Message Date
曾文豪
8b205ebb30 publish 0.8.4
Some checks failed
/ local-deploy (push) Failing after 4s
2025-05-15 23:55:42 +08:00
7364ffb094 删除 .DS_Store 2025-05-15 23:51:58 +08:00
6f444a4d4c 删除 .gitea/.DS_Store 2025-05-15 23:51:48 +08:00
曾文豪
2a0248ff16 publish 0.8.4
Some checks failed
/ local-deploy (push) Failing after 3s
2025-05-15 23:50:27 +08:00
264 changed files with 1575 additions and 6888 deletions

BIN
.DS_Store vendored

Binary file not shown.

View File

@@ -0,0 +1,25 @@
## 工作流触发时机
on:
push:
tags:
- '*'
jobs:
## 任务名称
local-deploy:
## 任务执行的服务器
runs-on: tiesheng-local
## 任务步骤
steps:
## 检出代码(固定配置)
- name: Check out repository code
uses: https://git.tieshengkeji.com/actions/checkout@v4
## maven打包
- name: Maven deploy
run: |
mvn deploy

1
.gitignore vendored
View File

@@ -6,3 +6,4 @@ rebel.xml
/static/
/config/
/runtime/
.DS_Store

View File

@@ -1,15 +1,16 @@
stages:
- deploy
- package
deploy-jar:
stage: deploy
tags:
- zengos
- hzkepai
rules:
- if: $CI_COMMIT_TAG
script:
- mvn clean deploy -Dmaven.test.skip -DaltDeploymentRepository=master::default::file:$TAG_REPO_FOLDER
- cd $TAG_REPO_FOLDER
- mvn clean deploy -Dmaven.test.skip -DaltDeploymentRepository=master::default::file:/usr/local/nginx/html/kepai-repo
- cd /usr/local/nginx/html/kepai-repo
- git checkout master
- git pull
- git add .

View File

@@ -1,7 +1,32 @@
## 2.0.0.rc4
## 0.8.3
- perfTsTokenConfig不在提供静态方法
- perf移除TsTokenAspect由TokenWebMvcConfigurer替代并实现TokenBean参数注入
### 调整
> 1优化返回数据加密
> 2上传文件接口调整统一为**application/json**格式;
## 0.8.0
### 调整
> 1移除**PasswordUtil**类,新增**EncryptConfig**配置;
> 2默认启用网络请求的加解密前端请配合接口使用。
## 0.7.4
### 新增
> 现在操作日志默认收集不包括GET请求使用方法名称和接口作为参数存储。如果存在OperationLog注解则使用注解的内容。
## 0.7.3
### 增加
> 1TsTokenConfig增加新的属性**ignorePaths**用于通过路径忽略token
> 2PasswordUtils增加密码复杂度校验方法
> 3PasswordUtils.verifyPassword增加登录次数限制10分钟内不能错误6次
>
### 调整
> 1TsTokenConfig中的**ignores**属性调整为**testMap**

View File

@@ -1,94 +0,0 @@
## 1.1.0
- featglobalConfig增加ext属性。
- feat增加网络请求超时、重定向的配置。
- perf更新数据库对比插件。
- feat(web)增加DaoBase的常量。
- perf(web):操作日志优化。
## 1.0.12
- perf(encrypt):开启关闭加解密移动到**yaml**中配置,移除**EnableEncryptConfig**注解。
- feat(login):登录接口增加验签步骤,可通过**validLoginSign**属性开启或关闭(默认)。
- perf(login):可重写**onSignError**方法自定义验签错误的跳转。
- fix(login)修复微信、钉钉授权跳转地址错误的bug
## 1.0.7
- feat(web): 增加uploadFileCustomize方法允许自定义文件存放情况
- feat(database): 增加db/data目录存放初始化数据的sql
- perf(login): 增加默认值防止token解析异常
## 1.0.6
- feat(web):新增 **OperationIgnore** 注解,可以指定接口忽略操作日志的收集。
- feat(web)**OperationLog** 增加 desensitize 属性,用来脱敏指定的字段。
## 1.0.2
- feat(database):增加数据库定时备份;
- feat(database)增加过期备份的删除操作默认过期时间为7天
- perf(message):调整阿里云短信类,方便扩展其他方法。
- perf(message)消息发送接口该body类型为 **JSONObject**
- perf(message):调整消息发送接口和方法(不兼容旧版本)
## 1.0.1
- perf(web)fastjson增加配置 **DisableCircularReferenceDetect**,禁用相同的对象写成引用的形式。
## 1.0.0
- perfhutool依赖升级5.8.11 -> 5.8.16
- perffastjson依赖升级1.2.78 -> 1.2.83
- perfmybatis-plus依赖升级3.5.1 -> 3.5.3
- perf**TieshengWebConfigurer** 增加 **configSystemCheck** 方法,可根据情况校验系统配置参数。
从该版本开始,仓库地址改为:
``` pom
<repositories>
<repository>
<id>kepai-repo</id>
<url>http://git.kepai365.com/tiesheng/repository/raw/master</url>
</repository>
</repositories>
```
## 0.9.3
> 1增加版本对比器防止某些情况下版本对比失效
>
## 0.8.3
### 调整
> 1优化返回数据加密
> 2上传文件接口调整统一为**application/json**格式;
## 0.8.0
### 调整
> 1移除**PasswordUtil**类,新增**EncryptConfig**配置;
> 2默认启用网络请求的加解密前端请配合接口使用。
## 0.7.4
### 新增
> 现在操作日志默认收集不包括GET请求使用方法名称和接口作为参数存储。如果存在OperationLog注解则使用注解的内容。
## 0.7.3
### 增加
> 1TsTokenConfig增加新的属性**ignorePaths**用于通过路径忽略token
> 2PasswordUtils增加密码复杂度校验方法
> 3PasswordUtils.verifyPassword增加登录次数限制10分钟内不能错误6次
>
### 调整
> 1TsTokenConfig中的**ignores**属性调整为**testMap**

40
pom.xml
View File

@@ -6,7 +6,7 @@
<groupId>com.tiesheng.springboot-parent</groupId>
<artifactId>springboot-parent</artifactId>
<version>2.0.0.rc28</version>
<version>0.8.4</version>
<packaging>pom</packaging>
<name>springboot-parent</name>
<description>杭州铁晟科技有限公司基础依赖</description>
@@ -28,7 +28,6 @@
<module>springboot-message</module>
<module>springboot-encrypt</module>
<module>springboot-annotation</module>
<module>springboot-role</module>
</modules>
<properties>
@@ -58,61 +57,55 @@
<dependency>
<groupId>com.tiesheng.springboot-parent</groupId>
<artifactId>springboot-database</artifactId>
<version>2.0.0.rc28</version>
<version>0.8.4</version>
</dependency>
<dependency>
<groupId>com.tiesheng.springboot-parent</groupId>
<artifactId>springboot-login</artifactId>
<version>2.0.0.rc28</version>
<version>0.8.4</version>
</dependency>
<dependency>
<groupId>com.tiesheng.springboot-parent</groupId>
<artifactId>springboot-web</artifactId>
<version>2.0.0.rc28</version>
<version>0.8.4</version>
</dependency>
<dependency>
<groupId>com.tiesheng.springboot-parent</groupId>
<artifactId>springboot-util</artifactId>
<version>2.0.0.rc28</version>
<version>0.8.4</version>
</dependency>
<dependency>
<groupId>com.tiesheng.springboot-parent</groupId>
<artifactId>springboot-platform</artifactId>
<version>2.0.0.rc28</version>
<version>0.8.4</version>
</dependency>
<dependency>
<groupId>com.tiesheng.springboot-parent</groupId>
<artifactId>springboot-message</artifactId>
<version>2.0.0.rc28</version>
<version>0.8.4</version>
</dependency>
<dependency>
<groupId>com.tiesheng.springboot-parent</groupId>
<artifactId>springboot-encrypt</artifactId>
<version>2.0.0.rc28</version>
</dependency>
<dependency>
<groupId>com.tiesheng.springboot-parent</groupId>
<artifactId>springboot-role</artifactId>
<version>2.0.0.rc28</version>
<version>0.8.4</version>
</dependency>
<dependency>
<groupId>com.tiesheng.springboot-parent</groupId>
<artifactId>springboot-annotation</artifactId>
<version>2.0.0.rc28</version>
<version>0.8.4</version>
</dependency>
<dependency>
<groupId>com.tiesheng.springboot-parent</groupId>
<artifactId>springboot-poi</artifactId>
<version>2.0.0.rc28</version>
<version>0.8.4</version>
</dependency>
<dependency>
@@ -124,7 +117,7 @@
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-boot-starter</artifactId>
<version>3.5.3</version>
<version>3.5.1</version>
</dependency>
</dependencies>
@@ -132,11 +125,18 @@
<pluginRepositories>
<pluginRepository>
<id>kepai-repo-plugin</id>
<url>http://git.kepai365.com/tiesheng/repository/raw/master</url>
<id>tiesheng-repo-plugin</id>
<url>https://git.tieshengkeji.com/api/packages/tieshengkeji/maven</url>
</pluginRepository>
</pluginRepositories>
<distributionManagement>
<repository>
<id>tiesheng-gitea</id>
<url>https://git.tieshengkeji.com/api/packages/tieshengkeji/maven</url>
</repository>
</distributionManagement>
<build>
<pluginManagement>
<plugins>

Binary file not shown.

View File

@@ -6,11 +6,11 @@
<parent>
<groupId>com.tiesheng.springboot-parent</groupId>
<artifactId>springboot-parent</artifactId>
<version>2.0.0.rc28</version>
<version>0.8.4</version>
</parent>
<artifactId>springboot-ademo</artifactId>
<version>2.0.0.rc28</version>
<version>1.0.0</version>
<properties>
<maven.compiler.source>8</maven.compiler.source>
@@ -25,29 +25,12 @@
<groupId>com.tiesheng.springboot-parent</groupId>
<artifactId>springboot-web</artifactId>
</dependency>
<dependency>
<groupId>com.tiesheng.springboot-parent</groupId>
<artifactId>springboot-role</artifactId>
</dependency>
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>easyexcel</artifactId>
</dependency>
<dependency>
<groupId>redis.clients</groupId>
<artifactId>jedis</artifactId>
<version>3.7.0</version>
</dependency>
</dependencies>
<repositories>
<repository>
<id>kepai-repo</id>
<url>http://git.kepai365.com/tiesheng/repository/raw/master</url>
<url>http://git.kepai365.com/zeng_wenhao/kepai-repo/raw/master</url>
</repository>
</repositories>

View File

@@ -1,8 +1,9 @@
package com.tiesheng.demo;
import com.tiesheng.web.EnableTieshengWeb;
import com.tiesheng.core.EnableTieshengWeb;
import com.tiesheng.demo.config.DemoWebConfigurer;
import com.tiesheng.encrypt.EnableEncryptConfig;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.transaction.annotation.EnableTransactionManagement;
@@ -13,6 +14,7 @@ import org.springframework.transaction.annotation.EnableTransactionManagement;
@EnableTransactionManagement
@SpringBootApplication
@EnableTieshengWeb(webConfigurer = DemoWebConfigurer.class)
@EnableEncryptConfig
public class DemoApplication {
public static void main(String[] args) {

View File

@@ -1,12 +1,11 @@
package com.tiesheng.demo.config;
import cn.hutool.core.util.StrUtil;
import com.tiesheng.login.pojos.RequestUserInfo;
import com.tiesheng.login.pojos.dao.CorePlatformUnique;
import com.tiesheng.login.service.TsLoginConfigurer;
import com.tiesheng.core.pojos.RequestUserInfo;
import com.tiesheng.core.pojos.dao.CorePlatformUnique;
import com.tiesheng.core.service.TieshengWebConfigurer;
import com.tiesheng.login.config.token.bean.TokenBean;
import com.tiesheng.util.config.GlobalConfig;
import com.tiesheng.util.pojos.TokenBean;
import com.tiesheng.web.service.TieshengWebConfigurer;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
@@ -14,44 +13,44 @@ import javax.servlet.http.HttpServletResponse;
import java.util.Objects;
@Component
public class DemoWebConfigurer implements TieshengWebConfigurer, TsLoginConfigurer {
public class DemoWebConfigurer implements TieshengWebConfigurer {
@Autowired
GlobalConfig globalConfig;
@Override
public RequestUserInfo getCurrentUserName(TokenBean tokenBean) {
RequestUserInfo info = new RequestUserInfo();
if (Objects.equals(tokenBean.getId(), "1")) {
return info;
}
info.setId("1");
info.setName("test");
return info;
}
public TokenBean login(CorePlatformUnique platformUnique) {
TokenBean tokenBean = null;
if (!StrUtil.isEmpty(platformUnique.getUserId())) {
tokenBean = new TokenBean(platformUnique.getUserId(), "super");
} else if (Objects.equals(platformUnique.getUniqueId(), "1110290049")) {
tokenBean = new TokenBean("1", "super");
}
if (tokenBean != null) {
tokenBean.setExtra("1110290049");
}
return tokenBean;
}
@Override
public void redirect(TokenBean bean, String to, String extra, HttpServletResponse response) {
public LoginConfigurer loginConfigurer() {
return new LoginConfigurer() {
@Override
public TokenBean doLogin(CorePlatformUnique platformUnique, String to) {
}
// 默认跳转到mobile
to = StrUtil.emptyToDefault(to, "mobile");
TokenBean tokenBean = null;
if (!StrUtil.isEmpty(platformUnique.getUserId())) {
tokenBean = new TokenBean(platformUnique.getUserId(), to, globalConfig.getService());
} else {
// 获取用户信息判断是否可登录
}
@Override
public TsLoginConfigurer configureLogin() {
return this;
return tokenBean;
}
@Override
public void redirect(TokenBean bean, String to, String extra, HttpServletResponse response) {
if (Objects.equals(bean.getEnvironmentType(), "mobile")) {
globalConfig.redirect("mobile", "/?token=" + bean.toToken(), response);
}
}
};
}
}

View File

@@ -1,23 +0,0 @@
package com.tiesheng.demo.config;
import com.tiesheng.web.service.CoreConfigService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import javax.annotation.PostConstruct;
/**
* @author hao
*/
@Component
public class TestJobConfig {
@Autowired
CoreConfigService coreConfigService;
@PostConstruct
public void init() {
}
}

View File

@@ -1,109 +1,68 @@
package com.tiesheng.demo.controller;
import cn.hutool.core.collection.CollUtil;
import cn.hutool.core.date.TimeInterval;
import cn.hutool.json.JSONUtil;
import cn.hutool.log.LogFactory;
import cn.hutool.poi.excel.ExcelUtil;
import com.alibaba.excel.EasyExcel;
import com.alibaba.excel.context.AnalysisContext;
import com.alibaba.excel.read.listener.ReadListener;
import com.tiesheng.annotation.role.RoleAuthority;
import com.tiesheng.annotation.token.TokenIgnore;
import com.tiesheng.database.config.DbBackupConfig;
import com.tiesheng.demo.pojos.PoiBean;
import com.tiesheng.demo.pojos.TestFile;
import com.tiesheng.platform.config.ding.PlatformDingConfig;
import com.tiesheng.platform.config.ding.bean.DingUserInfo;
import com.tiesheng.login.config.token.TsTokenConfig;
import com.tiesheng.login.config.token.bean.TokenBean;
import com.tiesheng.message.config.aliyun.AliyunSmsConfig;
import com.tiesheng.message.pojos.MessageReqResp;
import com.tiesheng.util.config.EncryptConfig;
import com.tiesheng.util.config.GlobalConfig;
import com.tiesheng.util.config.Ip2regionConfig;
import com.tiesheng.util.config.TsTokenConfig;
import com.tiesheng.util.pojos.ApiResp;
import com.tiesheng.util.pojos.FileUploadPath;
import com.tiesheng.util.service.TsCacheService;
import com.tiesheng.web.service.CoreLogService;
import com.tiesheng.web.util.ProcessImportConsumer;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import javax.servlet.http.HttpServletResponse;
import java.io.File;
import java.util.ArrayList;
import java.util.List;
import java.util.function.Consumer;
/**
* @author hao
*/
@RestController
@RequestMapping("/test")
@RoleAuthority(value = "test", group = "test")
public class TestController {
@Autowired
GlobalConfig globalConfig;
@Autowired
AliyunSmsConfig aliyunSmsConfig;
@Autowired
TsTokenConfig tsTokenConfig;
@Autowired
Ip2regionConfig ip2regionConfig;
@Autowired
EncryptConfig encryptConfig;
@Autowired
CoreLogService coreLogService;
@Autowired
DbBackupConfig dbBackupConfig;
@Autowired
TsCacheService tsCacheService;
@Autowired
PlatformDingConfig platformDingConfig;
@RequestMapping("/index")
@TokenIgnore
public void index(HttpServletResponse response) {
globalConfig.redirect("mobile", "/test", response);
public ApiResp<String> index() {
TokenBean tokenBean = new TokenBean("11", "", "fdfd");
LogFactory.get().info(tokenBean.toToken());
return ApiResp.respOK("hello world");
}
@RequestMapping("/redirect")
@TokenIgnore
@RoleAuthority("redirect")
public ApiResp<String> redirect(HttpServletResponse response) {
// ArrayList<String> strings = CollUtil.newArrayList("11111", "22222");
// coreLogService.addProcess("fdfd", strings, new ProcessImportConsumer<String>() {
// @Override
// public int accept(List<String> list) {
// LogFactory.get().info("list: " + list.size());
// return 0;
// }
//
// @Override
// public String getFailFile() {
// LogFactory.get().info("getFailFile: " + strings.size());
// return null;
// }
// });
//
// LogFactory.get().info("strings: " + strings.size());
public void redirect(HttpServletResponse response) {
// tsTokenConfig.validToken("eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJleHAiOjE2NzYwMDY4NzUsImlkIjoiMSIsImVudmlyb25tZW50VHlwZSI6Im1vYmlsZSIsInNlcnZpY2UiOiJjb250ZXN0LXJlc2VydmUiLCJleHRyYSI6IiJ9.nsfxEFpCNHC7eNCS5DJXdu1VDdnHrTjSfgrozND70Lc", true);
// globalConfig.redirect("mobile", "/test", response);
return ApiResp.respOK("");
}
@GetMapping("/send")
@TokenIgnore
public ApiResp<String> sendMessage() {
// MessageReqResp reqResp = coreMessageService.send(new UserChannel("13567116463", "sms"),
// JSONUtil.createObj().putOpt("action", "sms-visitor-invite"));
return ApiResp.respOK(null);
@RequestMapping("/send")
public ApiResp<MessageReqResp> sendMessage() {
MessageReqResp reqResp = aliyunSmsConfig.sendSms("13567116463", "SMS_154950909",
JSONUtil.createObj().putOpt("code", "123456"));
return ApiResp.respOK(reqResp);
}
@@ -111,16 +70,6 @@ public class TestController {
@TokenIgnore
public ApiResp<String> export() {
// tsCacheService.put("fdfhdfd", "fdfdfdfd");
// String s = tsCacheService.get("fdfhdfd");
// LogFactory.get().info("export: " + s);
platformDingConfig.syncDeptUser("", null, new Consumer<DingUserInfo>() {
@Override
public void accept(DingUserInfo dingUserInfo) {
}
});
// List<TestFile> list = new ArrayList<>();
// list.add(new TestFile("11111"));
// list.add(new TestFile("22222"));
@@ -141,13 +90,14 @@ public class TestController {
}
@PostMapping("searchIP")
@RequestMapping("searchIP")
@TokenIgnore
public ApiResp<String> searchIp() {
String search = ip2regionConfig.search("127.0.0.1");
return ApiResp.respOK(search);
}
@RequestMapping("desensitize")
@TokenIgnore
public ApiResp<List<TestFile>> desensitize() {
@@ -170,43 +120,4 @@ public class TestController {
return ApiResp.respOK("");
}
@RequestMapping("poi")
@TokenIgnore
public ApiResp<String> poi() {
TimeInterval timeInterval = new TimeInterval();
FileUploadPath file = FileUploadPath.file("/upload/test.xlsx");
EasyExcel.read(new File(file.getAbsolutePath()), PoiBean.class, new ReadListener<PoiBean>() {
@Override
public void invoke(PoiBean poiBean, AnalysisContext analysisContext) {
}
@Override
public void doAfterAllAnalysed(AnalysisContext analysisContext) {
}
}).sheet().doRead();
System.out.println("timeInterval: " + timeInterval.interval());
return ApiResp.respOK("");
}
@RequestMapping("poiTool")
@TokenIgnore
public ApiResp<String> poiTool() {
TimeInterval timeInterval = new TimeInterval();
FileUploadPath file = FileUploadPath.file("/upload/test.xlsx");
ExcelUtil.getReader(new File(file.getAbsolutePath())).read();
System.out.println("timeInterval: " + timeInterval.interval());
return ApiResp.respOK("");
}
}

View File

@@ -1,75 +0,0 @@
package com.tiesheng.demo.pojos;
import com.alibaba.excel.annotation.ExcelProperty;
public class PoiBean {
@ExcelProperty("学院")
private String college;
private String type;
private String name;
private String no;
private String sex;
private String fdy;
private String fdyNo;
///////////////////////////////////////////////////////////////////////////
// setter\getter
///////////////////////////////////////////////////////////////////////////
public String getCollege() {
return college;
}
public void setCollege(String college) {
this.college = college;
}
public String getType() {
return type;
}
public void setType(String type) {
this.type = type;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getNo() {
return no;
}
public void setNo(String no) {
this.no = no;
}
public String getSex() {
return sex;
}
public void setSex(String sex) {
this.sex = sex;
}
public String getFdy() {
return fdy;
}
public void setFdy(String fdy) {
this.fdy = fdy;
}
public String getFdyNo() {
return fdyNo;
}
public void setFdyNo(String fdyNo) {
this.fdyNo = fdyNo;
}
}

View File

@@ -1,32 +0,0 @@
package com.tiesheng.demo.service;
import cn.hutool.core.date.DateUtil;
import cn.hutool.json.JSONObject;
import cn.hutool.json.JSONUtil;
import com.tiesheng.message.config.aliyun.AliyunSmsHandler;
import com.tiesheng.message.config.aliyun.AliyunTempParam;
import org.springframework.stereotype.Service;
import java.util.Objects;
@Service
public class DemoSmsHandler implements AliyunSmsHandler {
@Override
public AliyunTempParam handler(JSONObject obj) {
String action = obj.getStr("action");
AliyunTempParam param = new AliyunTempParam();
param.setSignName("智慧校园");
if (Objects.equals(action, "sms-visitor-invite")) {
param.setTemplateCode("SMS_276125463");
param.setTemplateParam(JSONUtil.createObj()
.putOpt("date", DateUtil.today())
);
}
return param;
}
}

View File

@@ -7,16 +7,8 @@ spring:
url: jdbc:mysql://47.96.30.85:3306/com_tiesheng_web?useSSL=false&useUnicode=true&characterEncoding=UTF-8&autoReconnect=true&queryTimeout=5400&allowMultiQueries=true&serverTimezone=GMT%2B8
username: com_tiesheng_web
password: 4Xo$XheGFc
# redis:
# url: redis://kyF0zUL3011111@47.96.30.85:6234
platform:
ding:
global:
corpId: dingebe664cb3baf3a52a39a90f97fcb1e09
agentId: 2474444028
appKey: dingyvf1niiajfaajyo5
appSecret: y6SGZ4fvPbdbj4RVbDWLeMBkGgplaOdnTA_9wN5TDdOV_Y47alYc1LDlIHjsBJE1
wxmp:
global:
app-id: wxa0343fe519824651
@@ -26,14 +18,11 @@ tiesheng:
token:
test-map:
"1111":
id: "1"
role-id: "1822829641023524865"
id: "1111"
global:
version: 2
host: http://localhost:8100
service: yrx
host: http://localhost:8080
aliyun:
access-key-id: LTAI5tJtbgBCnTY5eS4SmrTf
access-key-secret: JIHqpRUFffCHhXaJEVvWN31WcexWqG
encrypt:
body: false
sign-name: 阿里云短信测试

View File

@@ -9,13 +9,14 @@ spring:
servlet:
multipart:
max-file-size: 20MB
max-request-size: 20MB
web:
resources:
static-locations: classpath:/static/,file:static/
mvc:
pathmatch:
matching-strategy: ant_path_matcher
## 日志
logging:
file:
name: runtime/logs/tiesheng.log

View File

@@ -1 +0,0 @@
*{margin:0;padding:0}@font-face{font-family:webfont;font-display:swap;src:url(//at.alicdn.com/t/webfont_enly703pzve.eot);src:url(//at.alicdn.com/t/webfont_enly703pzve.eot#iefix) format("embedded-opentype"),url(//at.alicdn.com/t/webfont_enly703pzve.woff2) format("woff2"),url(//at.alicdn.com/t/webfont_enly703pzve.woff) format("woff"),url(//at.alicdn.com/t/webfont_enly703pzve.ttf) format("truetype"),url(//at.alicdn.com/t/webfont_enly703pzve.svg#NotoSansHans-DemiLight) format("svg")}.web-font{font-family:serif;font-size:16px;font-style:normal;-webkit-font-smoothing:antialiased;-webkit-text-stroke-width:.2px;-moz-osx-font-smoothing:grayscale}.flex[data-v-7ce2b5d6]{display:flex;position:relative;box-sizing:border-box;-moz-box-sizing:border-box;-webkit-box-sizing:border-box;word-break:break-all;white-space:normal;flex-shrink:0;-webkit-flex-shrink:0}

View File

@@ -1 +0,0 @@
.state[data-v-48e36584]{width:5rem;height:auto;position:absolute;right:-2%;bottom:-1%;margin-right:0}.state img[data-v-48e36584]{width:85%;height:75%}.wraps[data-v-48e36584]{width:100%;padding:6px 0}.wraps .item[data-v-48e36584]{background:#fff;margin:6px 12px;padding:8px;line-height:1.8;border-radius:4px;box-shadow:0 2px 4px 0 rgba(0,0,0,.1);border-top:5px solid #5aabff;font-size:15px}.wraps .item .label[data-v-48e36584]{width:76px}.wraps .item .label[data-v-48e36584]:after{content:""}.wraps .jia[data-v-48e36584],.wraps .meiyou[data-v-48e36584]{width:100%;text-align:center;padding:10px}.wraps .meiyou[data-v-48e36584]{color:grey}[data-v-20482632] .tabTwo .tabTwo_div2 .tabTwo_div2_Time2[data-v-56ab07cd] .van-cell,[data-v-20482632] .tabTwo .tabTwo_div2 .tabTwo_div2_Time[data-v-56ab07cd] .van-cell{box-sizing:border-box;width:100%;padding:3px 0;color:#323233;font-size:13px;line-height:24px;background-color:#f2f5f8;border-radius:5px}[data-v-20482632] [data-v-56ab07cd] .van-field__control{display:block;box-sizing:border-box;width:100%;min-width:0;margin:0;padding:0;color:#323233;line-height:inherit;border:0;resize:none;font-size:13px!important}[data-v-20482632] [data-v-56ab07cd] .van-field__label{flex:none;box-sizing:border-box;width:2.3em;margin:0;color:#59adff;white-space:nowrap}[data-v-20482632] .tabTwo .tabTwo_one .tabTwo_div1 .inp[data-v-56ab07cd]{width:100%;padding:0 0;border-radius:10px;outline:none;border:none;font-size:13px;border-radius:5px}[data-v-20482632] .van-cell:after{position:absolute;box-sizing:border-box;content:" ";pointer-events:none;right:16px;bottom:0;left:16px;border:none;transform:scaleY(.5)}.state_vant[data-v-20482632]{width:15rem;padding:0 0}[data-v-20482632] .van-field__label{flex:none;box-sizing:border-box;width:3.3em;color:#59adff;word-wrap:break-word}[data-v-20482632] .van-field__control{display:block;box-sizing:border-box;width:100%;min-width:0;margin:0;padding:0;color:#323233;line-height:inherit;text-align:center;border:0;resize:none}.tabTwo[data-v-20482632]{width:100%;height:5.5rem}.tabTwo .tabTwo_one[data-v-20482632]{width:100%;height:2.5rem;font-size:13px;display:flex;justify-content:space-around;padding:0 12px}.tabTwo .tabTwo_one .tabTwo_div2_state[data-v-20482632]{width:5.8rem;height:2.5rem;display:flex;justify-content:space-around}.tabTwo .tabTwo_one .tabTwo_div2_state[data-v-20482632] .van-cell{width:126%;padding:10px 0;color:#323233;font-size:13px;line-height:25px;background-color:#fff;box-sizing:border-box}.tabTwo .tabTwo_one .tabTwo_div1[data-v-20482632]{width:0;height:3rem;text-align:left;display:flex;justify-content:flex-start;align-items:center;flex-grow:1;font-size:13px!important}.tabTwo .tabTwo_one .tabTwo_div1 .inp[data-v-20482632]{width:90%;padding:3px 10px;border-radius:10px;outline:none;border:none;font-size:13px!important}.tabTwo .tabTwo_div2[data-v-20482632]{width:100%;height:3rem;display:flex;padding:8px 10px;box-sizing:border-box;justify-content:space-evenly;align-items:center}.tabTwo .tabTwo_div2 .tabTwo_div2_Time[data-v-20482632]{width:40%}.tabTwo .tabTwo_div2 .tabTwo_div2_Time[data-v-20482632] .van-cell{box-sizing:border-box;width:100%;padding:3px 0;color:#323233;font-size:13px;line-height:24px;background-color:#f2f5f8}.tabTwo .tabTwo_div2 .zhe[data-v-20482632]{width:4%;color:rgba(193,195,196,.6784313725490196)}.tabTwo .tabTwo_div2 .tabTwo_div2_Time2[data-v-20482632]{width:40%}.tabTwo .tabTwo_div2 .tabTwo_div2_Time2[data-v-20482632] .van-cell{box-sizing:border-box;width:100%;padding:3px 0;color:#323233;font-size:13px;line-height:24px;background-color:#f2f5f8}.tabTwoBtn[data-v-20482632]{width:15%;height:90%;margin:0 8px;background-color:#59adff;color:#fff;outline:none;border:none;border-radius:5px}.wrap .btn[data-v-20482632]{width:50px;height:50px;border-radius:50px;outline:none;border:none;background:#58acf2 url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAAAXNSR0IArs4c6QAAAIJJREFUWEdjZBhgwDjA9jOMOmBoh8D///8XgdIQIyNjHLlpiaIQ+P///36oAxxHHTAaAqMhMBoCVA2B////r2JgYBAl11Ac+l4zMjKGocthLQmhRawslR3wGFuRPVoUj4bAaAiMhsCQDwFQkQ1qlGIUscSWohSFALGW4FM36oDREAAAIXhaIRTlu6kAAAAASUVORK5CYII=) no-repeat .5rem .5rem;position:fixed;right:2rem;bottom:3rem}.wrap .skip[data-v-20482632]{width:100vw;height:100vh}.wrap .skip .skip_left[data-v-20482632]{width:70%;height:20vw;margin:6px 0;-o-object-fit:contain;object-fit:contain}

View File

@@ -1 +0,0 @@
.wrap[data-v-347dc6ff]{width:100vw;height:100vh;position:fixed;top:0;left:0}.wrap .top[data-v-347dc6ff]{width:100vh;height:15vh}.wrap .top img[data-v-347dc6ff]{width:100vw;height:100%}.wrap .content[data-v-347dc6ff]{width:80vw;height:50vh;margin:5rem auto;display:flex;flex-direction:column;justify-content:space-around;align-items:center}.wrap .content img[data-v-347dc6ff]{width:100%;height:60%}.wrap .content h3[data-v-347dc6ff]{color:#666;font-size:18px;font-weight:350}.wrap .bottom[data-v-347dc6ff]{width:100vh;height:15vh;position:fixed;bottom:0;left:0}.wrap .bottom img[data-v-347dc6ff]{width:100vw;height:100%}

View File

@@ -1 +0,0 @@
.view[data-v-3c038828]{width:100%}.jkmNucleic[data-v-3c038828]{width:100%;margin-top:12px;font-size:14px;color:#fff}.jkmNucleic .header[data-v-3c038828]{background:hsla(0,0%,100%,.4);font-size:13px;padding:4px;line-height:20px!important}.jkmNucleic .body2[data-v-3c038828],.jkmNucleic .body[data-v-3c038828]{padding:6px 4px;white-space:pre-wrap;line-height:20px;height:56px;text-align:center}.jkmNucleic .body2[data-v-3c038828]{line-height:40px;font-size:18px}.jkmNucleic .jkm[data-v-3c038828]{width:0;border-radius:6px;margin-right:6px}.jkmNucleic .nucleic[data-v-3c038828]{border-radius:6px;width:0;margin-left:6px}.xck[data-v-3c038828]{width:100%;height:100%;-o-object-fit:contain;object-fit:contain}.vaccinum[data-v-3c038828]{width:100%;border-top:1px solid #ddd;padding-top:12px;margin-top:12px;color:#999;font-size:14px}.vaccinum .va1[data-v-3c038828]{color:#339b68}.wrap[data-v-4c39bc1c]{width:100vw;min-height:100vh;background:#fff;padding-bottom:100px}.header[data-v-4c39bc1c]{height:50vw;position:relative;color:#fff}.header .headerText[data-v-4c39bc1c]{font-size:8vw;margin-top:24px;font-weight:700}.header .bg[data-v-4c39bc1c]{-o-object-fit:cover;object-fit:cover;z-index:0;position:absolute;left:0;top:0;width:100%;height:100%}.content[data-v-4c39bc1c]{padding:12px;border-radius:4px;background:#fff;margin:-48px 24px 12px;box-shadow:0 2px 10px 0 rgba(0,0,0,.25)}.qrcode[data-v-4c39bc1c]{width:200px;height:200px;margin-top:12px}.qrcode .expired[data-v-4c39bc1c]{position:absolute;left:0;top:0;color:red;width:100%;font-size:16px;line-height:32px;font-weight:700;height:100%;align-items:center;justify-content:center;background:#000;opacity:.9}.time[data-v-4c39bc1c]{margin-top:12px;color:#b5b5b5;display:flex;align-items:center;justify-content:center}.tips[data-v-4c39bc1c]{color:#555;line-height:1.6;font-size:14px;margin:0 36px;text-align:center;white-space:pre-wrap}.tips pre[data-v-4c39bc1c]{white-space:pre-wrap}.primaryColor[data-v-4c39bc1c]{color:#59adff}

View File

@@ -1 +0,0 @@
.state[data-v-48e36584]{width:5rem;height:auto;position:absolute;right:-2%;bottom:-1%;margin-right:0}.state img[data-v-48e36584]{width:85%;height:75%}.wraps[data-v-48e36584]{width:100%;padding:6px 0}.wraps .item[data-v-48e36584]{background:#fff;margin:6px 12px;padding:8px;line-height:1.8;border-radius:4px;box-shadow:0 2px 4px 0 rgba(0,0,0,.1);border-top:5px solid #5aabff;font-size:15px}.wraps .item .label[data-v-48e36584]{width:76px}.wraps .item .label[data-v-48e36584]:after{content:""}.wraps .jia[data-v-48e36584],.wraps .meiyou[data-v-48e36584]{width:100%;text-align:center;padding:10px}.wraps .meiyou[data-v-48e36584]{color:grey}.tabTwo[data-v-dd0e5654]{width:100%;margin-top:12px;padding:0 12px;font-size:14px;display:flex;align-items:center}.tabTwo .tabTwo_div1[data-v-dd0e5654]{width:0;flex-grow:1;height:32px;display:flex;font-size:13px!important}.tabTwo .tabTwo_div1 .inp[data-v-dd0e5654]{width:100%;height:100%;padding:0 12px;border-radius:4px;outline:none;border:none;font-size:13px!important;background-color:#f7f8fa}.tabTwo .tabTwo_div2[data-v-dd0e5654]{width:48px;background-color:#59adff;color:#fff;height:32px;line-height:32px;text-align:center;border-radius:4px;margin-left:6px}

View File

@@ -1 +0,0 @@
input[data-v-35195103]{margin:24px 48px;width:calc(100% - 96px);line-height:32px;border:1px solid #555;border-radius:2px;padding:0 8px;font-size:15px}.skip[data-v-f9824790]{width:100vw}.skip .skip_left[data-v-f9824790]{width:44%;height:23vw;margin:.6rem .5rem .6rem 1rem;background:url(link_1.bea27bf1.png);background-size:100% 100%;border-radius:10px;padding:10px;box-sizing:border-box;display:flex;align-items:center}.skip .skip_left img[data-v-f9824790]{width:24%;height:70%;flex-grow:2}.skip .skip_left div[data-v-f9824790]{width:50%;flex-grow:3}.skip .skip_left div .p1[data-v-f9824790]{color:#fff;font-size:18px;font-weight:400}.skip .skip_left div .p2[data-v-f9824790]{color:hsla(0,0%,100%,.2901960784313726);font-size:12px;font-weight:400}.skip .skip_right[data-v-f9824790]{width:44%;height:23vw;margin:.6rem 1rem .6rem .5rem;background:url(message_1.24803f90.png);background-size:100% 100%;border-radius:10px;padding:10px;box-sizing:border-box;display:flex;align-items:center}.skip .skip_right img[data-v-f9824790]{width:24%;height:70%;flex-grow:2}.skip .skip_right div[data-v-f9824790]{width:50%;flex-grow:3}.skip .skip_right div .p1[data-v-f9824790]{color:#fff;font-size:18px;font-weight:400}.skip .skip_right div .p2[data-v-f9824790]{color:hsla(0,0%,100%,.2901960784313726);font-size:12px;font-weight:400}@font-face{font-family:webfont;font-display:swap;src:url(//at.alicdn.com/t/webfont_0ojzn4lmety.eot);src:url(//at.alicdn.com/t/webfont_0ojzn4lmety.eot#iefix) format("embedded-opentype"),url(//at.alicdn.com/t/webfont_0ojzn4lmety.woff2) format("woff2"),url(//at.alicdn.com/t/webfont_0ojzn4lmety.woff) format("woff"),url(//at.alicdn.com/t/webfont_0ojzn4lmety.ttf) format("truetype"),url(//at.alicdn.com/t/webfont_0ojzn4lmety.svg#Alibaba-PuHuiTi-Regular) format("svg")}[data-v-f9824790] .van-badge{display:inline-block;box-sizing:border-box;min-width:22px;padding:0 3px;margin-bottom:1rem;color:#fff;font-weight:500;font-size:12px;line-height:1.6;text-align:center;background-color:#ee0a24;border:1px solid #fff;border-radius:1rem}[data-v-f9824790] .van-badge--fixed{position:absolute;top:0;right:-10px;transform:translate(50%,-50%);transform-origin:100%}.home[data-v-f9824790]{width:100vw;height:100vh;background:#fff;overflow:hidden}a[data-v-f9824790]{text-decoration:none;color:#333}.router-link-exact-active[data-v-f9824790]{color:#58acf2}.tabs[data-v-f9824790]{width:100vw;background:#f2f2f2;padding:6px 0}.tabItem[data-v-f9824790]{flex-grow:1;width:0;font-size:15px;font-weight:700}.content[data-v-f9824790]{height:0;overflow:auto;flex-grow:1}

View File

@@ -1 +0,0 @@
.bg[data-v-742d767c]{min-height:100vh;position:relative}.bg .beijing[data-v-742d767c]{width:100%;position:absolute;top:0;left:0;z-index:1}.bg .content[data-v-742d767c]{z-index:2;width:100vw;min-height:100vh}.bg .content .log_logo[data-v-742d767c]{width:calc(100% - 48px);max-height:100px;margin:24px;-o-object-fit:contain;object-fit:contain}.bg .content .kuang[data-v-742d767c]{width:calc(100vw - 48px);background:#fff;box-shadow:0 0 10px 0 rgba(0,0,0,.1);border-radius:30px;padding:15px 20px;box-sizing:border-box;margin:10vh auto}.bg .content .kuang .goBtn[data-v-742d767c]{width:calc(100% - 48px);height:60px;background:#59adff;border-radius:30px;color:#fff}.bg .content .kuang .inpWrap[data-v-742d767c]{width:calc(100% - 48px);margin:24px;height:60px;background:#f3f5fc;box-shadow:inset 0 0 5px 0 rgba(151,171,184,.1);border-radius:30px;padding:10px;box-sizing:border-box}.bg .content .kuang .inpWrap img[data-v-742d767c]{width:12px;height:17px;-o-object-fit:cover;object-fit:cover;margin:0 10px}.bg .content .kuang .inpWrap input[data-v-742d767c]{width:100%;height:100%;border:none;outline:none;background:#f3f5fc}.bg .content .kuang .xian[data-v-742d767c]{width:100%;height:1px;margin:20px 0;border:1px solid;-o-border-image:linear-gradient(270deg,rgba(89,173,255,0),#1890ff,rgba(24,144,255,0)) 1 1;border-image:linear-gradient(270deg,rgba(89,173,255,0),#1890ff,rgba(24,144,255,0)) 1 1}.bg .content .kuang .btns[data-v-742d767c]{width:calc(100% - 48px)}.bg .content .kuang .btns .fill[data-v-742d767c]{width:100%;height:60px;background:#49ccd9;border-radius:16px;margin-bottom:20px}.bg .content .kuang .btns .fill img[data-v-742d767c]{width:21px;height:21px;margin:0 5px;-o-object-fit:contain;object-fit:contain}.bg .content .kuang .btns .fill div[data-v-742d767c]{font-size:16px;font-family:AlibabaPuHuiTi-Medium\, AlibabaPuHuiTi;font-weight:500;color:#fff}.modalConten[data-v-742d767c]{height:400px;overflow-y:auto;padding:5px 16px;box-sizing:border-box;white-space:pre-line}.modalBtn[data-v-742d767c]{width:80%;height:40px;text-align:center;line-height:30px;background-color:#59adff;color:#fff;margin:20px 0 10px 0;border-radius:25px;border:none;outline:none}

View File

@@ -1 +0,0 @@
.succeed[data-v-bfc49e60]{background-color:#fff}.succeed .succeed_box[data-v-bfc49e60]{width:100vw;padding:20vw 10vw;text-align:center;background-color:#21c7ff;color:#fff}.succeed .succeed_box .chenggong[data-v-bfc49e60]{width:16vw;height:16vw;margin-bottom:4vw}.succeed .succeed_box .shadowBg[data-v-bfc49e60]{width:100vw;position:absolute;-o-object-fit:cover;object-fit:cover;height:20vw;bottom:0;left:0}.succeed .succeed_btn[data-v-bfc49e60]{width:50vw;margin:5rem auto}.succeed .succeed_btn button[data-v-bfc49e60]{width:100%;height:3rem;color:#fff;border-radius:4px;border:none;background-color:#66c0fd}

View File

@@ -1 +0,0 @@
.wrap[data-v-347dc6ff]{width:100vw;height:100vh;position:fixed;top:0;left:0}.wrap .top[data-v-347dc6ff]{width:100vh;height:15vh}.wrap .top img[data-v-347dc6ff]{width:100vw;height:100%}.wrap .content[data-v-347dc6ff]{width:80vw;height:50vh;margin:5rem auto;display:flex;flex-direction:column;justify-content:space-around;align-items:center}.wrap .content img[data-v-347dc6ff]{width:100%;height:60%}.wrap .content h3[data-v-347dc6ff]{color:#666;font-size:18px;font-weight:350}.wrap .bottom[data-v-347dc6ff]{width:100vh;height:15vh;position:fixed;bottom:0;left:0}.wrap .bottom img[data-v-347dc6ff]{width:100vw;height:100%}

View File

@@ -1 +0,0 @@
.colorHui[data-v-e807bdea]{color:#999}[data-v-e807bdea] .van-step__title--active{color:#323233!important}.daiShenHe[data-v-e807bdea]{width:90vw;display:flex;align-items:center}.daiShenHe .daiShenHe_name[data-v-e807bdea]{display:flex;font-size:12px}.daiShenHe .daiShenHe_name div[data-v-e807bdea]{background-color:#90c95e;color:#fff;border-radius:50%;width:48px;height:48px;line-height:48px;text-align:center;transform:scale(.8);box-sizing:border-box}.liucheng[data-v-e807bdea]{width:100%;margin-left:-1.2rem}.zanwei[data-v-e807bdea]{width:8%}.border[data-v-e807bdea]{width:100%;border-top:10px solid #f2f5f8;font-size:15px}.border .zhu[data-v-e807bdea]{background-color:#59aefc;width:150px;height:30px;line-height:30px;display:flex;justify-content:center;margin:20px auto;color:#fff;border-radius:15px;border:none;outline:none}.van-step__icon--finish[data-v-e807bdea],.van-step__title--active[data-v-e807bdea],.van-step__title--finish[data-v-e807bdea],[data-v-e807bdea] .van-step__icon--active{position:relative;color:#59aefc;z-index:1000}.van-step--finish .van-step__line[data-v-e807bdea],[data-v-e807bdea] .van-step--finish .van-step__circle{position:relative;background-color:#59aefc;z-index:1000}[data-v-e807bdea] .van-step__line{border-left:1px dashed #999;background-color:#fff;color:#59aefc}[data-v-e807bdea] .van-step__title--active{color:#59aefc}.wrap[data-v-e807bdea]{height:100%;line-height:1.8;padding:12px 0;color:#000;min-height:100vh}.xiangguan[data-v-e807bdea]{background-color:#59aefc;width:150px;margin:0 auto;height:30px;line-height:30px;color:#fff;border-radius:15px;border:none;outline:none}.itemDivider[data-v-e807bdea]{border-bottom:1px solid #eee;padding:8px 12px;color:#3a3a3a;font-size:15px}.itemDivider .label[data-v-e807bdea]{width:96px}.itemDivider img[data-v-e807bdea]{width:20vw;height:20vw;-o-object-fit:cover;object-fit:cover}.footer[data-v-e807bdea]{z-index:100;width:100%;left:0;padding:0 12px;background:#fff;height:76px;color:#fff;border-top:1px solid #ddd}.footer button[data-v-e807bdea]{width:0;flex-grow:1;height:48px;border-radius:4px;border:none;margin:0 6px}.smsOk[data-v-e807bdea]{color:#999}.smsOk[data-v-e807bdea],.smsOkResend[data-v-e807bdea]{font-size:12px;line-height:24px;margin-left:8px;transform:scale(.9)}.smsOkResend[data-v-e807bdea]{color:#999;background:#5aabff;color:#fff;border-radius:4px;padding:0 6px}

View File

@@ -1 +0,0 @@
.wrap[data-v-347dc6ff]{width:100vw;height:100vh;position:fixed;top:0;left:0}.wrap .top[data-v-347dc6ff]{width:100vh;height:15vh}.wrap .top img[data-v-347dc6ff]{width:100vw;height:100%}.wrap .content[data-v-347dc6ff]{width:80vw;height:50vh;margin:5rem auto;display:flex;flex-direction:column;justify-content:space-around;align-items:center}.wrap .content img[data-v-347dc6ff]{width:100%;height:60%}.wrap .content h3[data-v-347dc6ff]{color:#666;font-size:18px;font-weight:350}.wrap .bottom[data-v-347dc6ff]{width:100vh;height:15vh;position:fixed;bottom:0;left:0}.wrap .bottom img[data-v-347dc6ff]{width:100vw;height:100%}

View File

@@ -1 +0,0 @@
.state[data-v-48e36584]{width:5rem;height:auto;position:absolute;right:-2%;bottom:-1%;margin-right:0}.state img[data-v-48e36584]{width:85%;height:75%}.wraps[data-v-48e36584]{width:100%;padding:6px 0}.wraps .item[data-v-48e36584]{background:#fff;margin:6px 12px;padding:8px;line-height:1.8;border-radius:4px;box-shadow:0 2px 4px 0 rgba(0,0,0,.1);border-top:5px solid #5aabff;font-size:15px}.wraps .item .label[data-v-48e36584]{width:76px}.wraps .item .label[data-v-48e36584]:after{content:""}.wraps .jia[data-v-48e36584],.wraps .meiyou[data-v-48e36584]{width:100%;text-align:center;padding:10px}.wraps .meiyou[data-v-48e36584]{color:grey}.skip_left[data-v-2b65ce1d]{width:100%;height:23vw;margin:6px 0;background:url(message_1.24803f90.png);background-size:100% 100%;border-radius:10px;padding:10px;box-sizing:border-box;display:flex;align-items:center;justify-content:flex-end}.skip_left img[data-v-2b65ce1d]{width:16vw;height:16vw;display:flex;align-items:flex-end}.skip_left div[data-v-2b65ce1d]{width:75%;margin-left:5vw}.skip_left div .p1[data-v-2b65ce1d]{color:#fff;font-size:18px;font-weight:400}.skip_left div .p2[data-v-2b65ce1d]{color:hsla(0,0%,100%,.2901960784313726);font-size:12px;font-weight:400}.skip_right[data-v-2b65ce1d]{width:50%;height:23vw;margin:6px 0;background:url(message_1.24803f90.png);background-size:100% 100%;border-radius:10px;padding:10px;box-sizing:border-box;display:flex;align-items:center;justify-content:flex-end}.skip_right img[data-v-2b65ce1d]{width:16vw;height:16vw;display:flex;align-items:flex-end}.skip_right div[data-v-2b65ce1d]{width:75%;margin-left:5vw}.skip_right div .p1[data-v-2b65ce1d]{color:#fff;font-size:18px;font-weight:400}.skip_right div .p2[data-v-2b65ce1d]{color:hsla(0,0%,100%,.2901960784313726);font-size:12px;font-weight:400}@font-face{font-family:webfont;font-display:swap;src:url(//at.alicdn.com/t/webfont_0ojzn4lmety.eot);src:url(//at.alicdn.com/t/webfont_0ojzn4lmety.eot#iefix) format("embedded-opentype"),url(//at.alicdn.com/t/webfont_0ojzn4lmety.woff2) format("woff2"),url(//at.alicdn.com/t/webfont_0ojzn4lmety.woff) format("woff"),url(//at.alicdn.com/t/webfont_0ojzn4lmety.ttf) format("truetype"),url(//at.alicdn.com/t/webfont_0ojzn4lmety.svg#Alibaba-PuHuiTi-Regular) format("svg")}.item[data-v-2b65ce1d]{background:#fff;margin:6px 12px;padding:8px;line-height:1.8;border-radius:4px;box-shadow:0 2px 4px 0 rgba(0,0,0,.1);border-top:5px solid #5aabff}.item .hui[data-v-2b65ce1d]{color:grey}

View File

@@ -1 +0,0 @@
.state[data-v-48e36584]{width:5rem;height:auto;position:absolute;right:-2%;bottom:-1%;margin-right:0}.state img[data-v-48e36584]{width:85%;height:75%}.wraps[data-v-48e36584]{width:100%;padding:6px 0}.wraps .item[data-v-48e36584]{background:#fff;margin:6px 12px;padding:8px;line-height:1.8;border-radius:4px;box-shadow:0 2px 4px 0 rgba(0,0,0,.1);border-top:5px solid #5aabff;font-size:15px}.wraps .item .label[data-v-48e36584]{width:76px}.wraps .item .label[data-v-48e36584]:after{content:""}.wraps .jia[data-v-48e36584],.wraps .meiyou[data-v-48e36584]{width:100%;text-align:center;padding:10px}.wraps .meiyou[data-v-48e36584]{color:grey}.tabTwo[data-v-36552c82]{width:100%;margin-top:12px;padding:0 12px;font-size:14px;display:flex;align-items:center}.tabTwo .tabTwo_div1[data-v-36552c82]{width:0;flex-grow:1;height:32px;display:flex;font-size:13px!important}.tabTwo .tabTwo_div1 .inp[data-v-36552c82]{width:100%;height:100%;padding:0 12px;border-radius:4px;outline:none;border:none;font-size:13px!important;background-color:#f7f8fa}.tabTwo .tabTwo_div2[data-v-36552c82]{width:48px;background-color:#59adff;color:#fff;height:32px;line-height:32px;text-align:center;border-radius:4px;margin-left:6px}

View File

@@ -1 +0,0 @@
[data-v-667c97f7] .van-field__control{display:block;box-sizing:border-box;width:80%;min-width:0;color:#323233;background-color:transparent;border:0;resize:none;margin-left:8%;text-align:left}.reson[data-v-667c97f7]{display:flex;flex-direction:column!important;color:#646566}.reson .van-cell__value[data-v-667c97f7]{text-align:left}.notice[data-v-7d4cc171]{position:fixed;width:100%;left:0;top:0;z-index:100}.holder[data-v-7d4cc171]{height:40px}[data-v-3d45a78b] .van-field__body input{padding:0 6px}[data-v-3d45a78b] .reson_div[data-v-cb3ced6c]{border-top:10px solid #f2f5f8;border-bottom:10px solid #f2f5f8;padding:10px 0;color:#646566;font-size:14px;text-align:center}[data-v-3d45a78b] .van-field--disabled .van-field__label{color:#646566!important}[data-v-3d45a78b] .van-cell--required span:before{content:""!important}[data-v-3d45a78b] .van-cell--required span:after{position:absolute;right:-10px;color:#ee0a24;font-size:14px;content:"*"}textarea[data-v-3d45a78b]::-webkit-input-placeholder{color:#d2ced0;font-size:14px}i[data-v-3d45a78b]{color:red}.header[data-v-3d45a78b]{width:99%;height:auto;margin:0 auto;padding:10px;box-sizing:border-box}.header img[data-v-3d45a78b]{width:calc(100% - 48px);max-height:100px;margin:1px;-o-object-fit:contain;object-fit:contain}[data-v-3d45a78b] .van-cell__value{text-align:left}[data-v-3d45a78b] .van-field__control{display:block;box-sizing:border-box;width:100%;margin:0;color:#323233;background-color:transparent;border:0;resize:none;text-align:left;padding:0}.reson_div[data-v-3d45a78b]{border-top:10px solid #f2f5f8;border-bottom:10px solid #f2f5f8;padding:10px 1px!important;color:#646566;font-size:14px}.btns[data-v-3d45a78b]{width:auto;height:60px;display:flex;justify-content:flex-end;align-items:flex-end}.pays[data-v-3d45a78b]{margin:8px auto;border-radius:10px;box-sizing:border-box}.paysAdd[data-v-3d45a78b]{width:90%;height:40px;color:#59adff;text-align:center;line-height:40px;margin:0 auto}.payReduce[data-v-3d45a78b]{width:100%;border-top:20px solid #f2f5f8;padding:0 0 4px 16px;display:flex;background:#f2f5f8;justify-content:space-between;align-items:center}.payReduce button[data-v-3d45a78b]{color:#e36969;border:none;padding:0 16px;background-color:#f2f5f8}[data-v-3d45a78b] .van-cell--required:before{content:""}[data-v-3d45a78b] .van-cell--required .van-cell__title span{position:relative}[data-v-3d45a78b] .van-cell--required .van-cell__title span:before{position:absolute;right:-8px;color:#ee0a24;font-size:14px;content:"*"}.reson[data-v-3d45a78b]{display:flex;flex-direction:column!important;color:#646566}.addPay[data-v-3d45a78b]{width:100%;margin:10px auto;border-radius:10px;padding:0;box-sizing:border-box}.button[data-v-3d45a78b]{width:10rem;height:2rem;display:block;margin:1rem auto}.van-nav-bar .van-icon[data-v-3d45a78b]{color:#000}.submit[data-v-3d45a78b]{width:calc(100vw - 24px);height:3rem;color:#fff;border-radius:3px;margin:14px 12px;outline:none}.van-action-sheet[data-v-3d45a78b]{display:flex;flex-direction:column;max-height:40%;overflow:hidden;color:#323233}

File diff suppressed because one or more lines are too long

Binary file not shown.

Before

Width:  |  Height:  |  Size: 4.2 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 44 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 8.4 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 5.3 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 7.3 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 42 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 75 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 5.8 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 5.3 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 5.8 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 5.5 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 4.1 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 5.0 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 5.3 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 8.5 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 7.3 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 5.3 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 4.2 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 8.9 KiB

View File

@@ -1,138 +0,0 @@
<!DOCTYPE html><html lang=""><head><meta charset="utf-8"><meta content="IE=edge" http-equiv="X-UA-Compatible"><meta content="width=device-width,initial-scale=1,maximum-scale=1,user-scalable=0" name="viewport"><link href="favicon.ico" rel="icon"><title>校外人员入校审核</title><style>html, body {
margin: 0;
padding: 0;
}
* {
box-sizing: border-box;
-moz-box-sizing: border-box;
-webkit-box-sizing: border-box;
}</style><style>.loading {
width: 100vw;
height: 100vh;
display: flex;
font-size: 13px;
flex-direction: column;
justify-content: center;
align-items: center;
}
.loading-tips {
height: 20px;
line-height: 20px;
color: #3a3a3a;
}
.loading-container {
width: 100px;
height: 100px;
animation: rotate-move 2s ease-in-out infinite;
}
.loading-container-dot {
width: 24px;
height: 24px;
border-radius: 50%;
background-color: #000;
position: absolute;
top: 0;
bottom: 0;
left: 0;
right: 0;
margin: auto;
}
.dot-3 {
background-color: #f74d75;
animation: dot-3-move 2s ease infinite;
}
.dot-2 {
background-color: #10beae;
animation: dot-2-move 2s ease infinite;
}
.dot-1 {
background-color: #ffe386;
animation: dot-1-move 2s ease infinite;
}
@keyframes dot-3-move {
20% {
transform: scale(1)
}
45% {
transform: translateY(-5px) scale(.6)
}
60% {
transform: translateY(-20px) scale(.6)
}
80% {
transform: translateY(-20px) scale(.6)
}
100% {
transform: translateY(0px) scale(1)
}
}
@keyframes dot-2-move {
20% {
transform: scale(1)
}
45% {
transform: translate(-4px, 3px) scale(.6)
}
60% {
transform: translate(-20px, 15px) scale(.6)
}
80% {
transform: translate(-20px, 15px) scale(.6)
}
100% {
transform: translateY(0px) scale(1)
}
}
@keyframes dot-1-move {
20% {
transform: scale(1)
}
45% {
transform: translate(4px, 3px) scale(.6)
}
60% {
transform: translate(20px, 15px) scale(.6)
}
80% {
transform: translate(20px, 15px) scale(.6)
}
100% {
transform: translateY(0px) scale(1)
}
}
@keyframes rotate-move {
55% {
transform: rotate(0deg)
}
80% {
transform: rotate(360deg)
}
100% {
transform: rotate(360deg)
}
}</style><link href="css/chunk-042d5992.89adb41e.css" rel="prefetch"><link href="css/chunk-0531775c.5b0eefaf.css" rel="prefetch"><link href="css/chunk-0648c3ef.0ff9539c.css" rel="prefetch"><link href="css/chunk-188e3fa4.275399a9.css" rel="prefetch"><link href="css/chunk-26937ed4.b3bb8164.css" rel="prefetch"><link href="css/chunk-27755411.65febfb3.css" rel="prefetch"><link href="css/chunk-300e725c.944af6a2.css" rel="prefetch"><link href="css/chunk-31e07dff.5b0eefaf.css" rel="prefetch"><link href="css/chunk-4d1974da.c70f0eba.css" rel="prefetch"><link href="css/chunk-4eb60a5d.5b0eefaf.css" rel="prefetch"><link href="css/chunk-72a73cc2.23c45673.css" rel="prefetch"><link href="css/chunk-dd7f1184.c4031c36.css" rel="prefetch"><link href="css/chunk-e9950686.60793d7d.css" rel="prefetch"><link href="js/chunk-042d5992.b340b18c.js" rel="prefetch"><link href="js/chunk-0531775c.e68fe2d1.js" rel="prefetch"><link href="js/chunk-0648c3ef.8397ad46.js" rel="prefetch"><link href="js/chunk-188e3fa4.71744b51.js" rel="prefetch"><link href="js/chunk-26937ed4.99cdb24b.js" rel="prefetch"><link href="js/chunk-26b05676.8cad4b43.js" rel="prefetch"><link href="js/chunk-27755411.62b9ce63.js" rel="prefetch"><link href="js/chunk-2d0b2ecb.1abd02a2.js" rel="prefetch"><link href="js/chunk-300e725c.fc2456fa.js" rel="prefetch"><link href="js/chunk-31e07dff.c267db1d.js" rel="prefetch"><link href="js/chunk-364cf210.c3e2fbd0.js" rel="prefetch"><link href="js/chunk-4bdf2c4e.fcc723c1.js" rel="prefetch"><link href="js/chunk-4d1974da.66c2525b.js" rel="prefetch"><link href="js/chunk-4eb60a5d.0875be6e.js" rel="prefetch"><link href="js/chunk-72a73cc2.0d7368e1.js" rel="prefetch"><link href="js/chunk-dd7f1184.fbeaa819.js" rel="prefetch"><link href="js/chunk-e9950686.f3e29c04.js" rel="prefetch"><link href="css/app.722d931f.css" rel="preload" as="style"><link href="css/chunk-vendors.eda94bcc.css" rel="preload" as="style"><link href="js/app.fdc7fe9d.js" rel="preload" as="script"><link href="js/chunk-vendors.335d9dbf.js" rel="preload" as="script"><link href="css/chunk-vendors.eda94bcc.css" rel="stylesheet"><link href="css/app.722d931f.css" rel="stylesheet"></head><body><noscript><strong>We're sorry but faqi doesn't work properly without JavaScript enabled. Please enable it to continue.</strong></noscript><div id="app"></div><script src="loading/loading.js"></script><script src="js/chunk-vendors.335d9dbf.js"></script><script src="js/app.fdc7fe9d.js"></script></body></html>

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@@ -1 +0,0 @@
(window["webpackJsonp"]=window["webpackJsonp"]||[]).push([["chunk-0531775c"],{"1fcb":function(t,o,s){"use strict";s.r(o);var n=function(){var t=this,o=t.$createElement,n=t._self._c||o;return n("Result",[n("div",{staticClass:"top",attrs:{slot:"top"},slot:"top"},[n("img",{attrs:{src:s("2846"),alt:""}})]),n("div",{staticClass:"content",attrs:{slot:"content"},slot:"content"},[n("img",{attrs:{src:s("ed77"),alt:""}}),n("h3",[t._v("您的审核未通过")])]),n("div",{staticClass:"bottom",attrs:{slot:"bottom"},slot:"bottom"},[n("img",{attrs:{slot:"bottom",src:s("3e6d"),alt:""},slot:"bottom"})])])},c=[],e=s("ffa4"),a={components:{Result:e["a"]}},i=a,l=s("2877"),r=Object(l["a"])(i,n,c,!1,null,"0b5cfe32",null);o["default"]=r.exports},2846:function(t,o,s){t.exports=s.p+"img/top.9905f564.png"},"3e6d":function(t,o,s){t.exports=s.p+"img/bottom.784753ac.png"},cb5f:function(t,o,s){"use strict";s("ceb1")},ceb1:function(t,o,s){},ed77:function(t,o,s){t.exports=s.p+"img/content.96f77c79.png"},ffa4:function(t,o,s){"use strict";var n=function(){var t=this,o=t.$createElement,s=t._self._c||o;return s("div",{staticClass:"wrap"},[t._t("top"),t._t("content"),t._t("bottom")],2)},c=[],e={},a=e,i=(s("cb5f"),s("2877")),l=Object(i["a"])(a,n,c,!1,null,"347dc6ff",null);o["a"]=l.exports}}]);

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@@ -1 +0,0 @@
(window["webpackJsonp"]=window["webpackJsonp"]||[]).push([["chunk-2d0b2ecb"],{"25d6":function(e,n,t){"use strict";t.r(n);var a=function(){var e=this,n=e.$createElement,t=e._self._c||n;return t("router-view")},c=[],u={name:"BasicLayout"},r=u,o=t("2877"),s=Object(o["a"])(r,a,c,!1,null,"2eabe62e",null);n["default"]=s.exports}}]);

View File

@@ -1 +0,0 @@
(window["webpackJsonp"]=window["webpackJsonp"]||[]).push([["chunk-300e725c"],{"4fcf":function(t,c,o){"use strict";var e=o("906c"),n=o("a18c"),i=function(t,c){n["a"].push({path:"/record/detail",query:{id:t,num:c}})},s=function(){n["a"].push({path:"/"})},u=function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:-1;n["a"].go(t)},a=function(){n["a"].push({path:"/record/successful"})},r=function(){n["a"].push({path:"/record/succeed"})},f=function(t){var c=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"phone",o={source:c};e["a"].isEmpty(t)||(o.recordId=t),n["a"].push({path:"/record/apply",query:o})},p=function(t){e["a"].isEmpty(t)?s():i(t)},l={login:function(){n["a"].push({path:"/visitor/login"})},record:function(){n["a"].push({path:"/visitor/record"})},result:function(t){n["a"].push({path:"/visitor/result",query:{id:t}})}};c["a"]={Visitor:l,goDetail:i,goHome:s,goBack:u,goRecordSuccessful:a,goRecordSucceed:r,goRecordApply:f,homeDetail:p}},9707:function(t,c,o){},c94f:function(t,c,o){t.exports=o.p+"img/payment.64b9ec15.png"},d108:function(t,c,o){"use strict";o("9707")},f017:function(t,c,o){"use strict";o.r(c);var e=function(){var t=this,c=t.$createElement,e=t._self._c||c;return e("flex",{staticClass:"succeed",attrs:{direction:"column"}},[e("flex",{staticClass:"succeed_box",attrs:{"align-items":"center",direction:"column",justify:"center"}},[e("img",{staticClass:"chenggong",attrs:{alt:"",src:o("c94f")}}),e("h2",[t._v("提交成功")]),e("flex",[t._v("您的入校申请已提交,审核通过后您将收到短信通知,请注意查收。")])],1),e("div",{staticClass:"succeed_btn"},[e("button",{on:{click:t.goVisitorLogin}},[t._v("去查看审核进度")])])],1)},n=[],i=o("4fcf"),s={methods:{goVisitorLogin:function(){i["a"].goBack(-2)}}},u=s,a=(o("d108"),o("2877")),r=Object(a["a"])(u,e,n,!1,null,"bfc49e60",null);c["default"]=r.exports}}]);

View File

@@ -1 +0,0 @@
(window["webpackJsonp"]=window["webpackJsonp"]||[]).push([["chunk-31e07dff"],{"63f8":function(t,o,s){t.exports=s.p+"img/top.70166250.png"},cb5f:function(t,o,s){"use strict";s("ceb1")},ceb1:function(t,o,s){},d4c5:function(t,o,s){"use strict";s.r(o);var n=function(){var t=this,o=t.$createElement,n=t._self._c||o;return n("Result",[n("div",{staticClass:"top",attrs:{slot:"top"},slot:"top"},[n("img",{attrs:{src:s("63f8"),alt:""}})]),n("div",{staticClass:"content",attrs:{slot:"content"},slot:"content"},[n("img",{attrs:{src:s("f85a"),alt:""}}),n("h3",[t._v("您已提交过记录,请等待审核通过")])]),n("div",{staticClass:"bottom",attrs:{slot:"bottom"},slot:"bottom"},[n("img",{attrs:{slot:"bottom",src:s("e38a"),alt:""},slot:"bottom"})])])},e=[],c=s("ffa4"),a={components:{Result:c["a"]}},i=a,l=s("2877"),r=Object(l["a"])(i,n,e,!1,null,"2996a060",null);o["default"]=r.exports},e38a:function(t,o,s){t.exports=s.p+"img/bottom.2e5666e8.png"},f85a:function(t,o,s){t.exports=s.p+"img/content.6ed9ad22.png"},ffa4:function(t,o,s){"use strict";var n=function(){var t=this,o=t.$createElement,s=t._self._c||o;return s("div",{staticClass:"wrap"},[t._t("top"),t._t("content"),t._t("bottom")],2)},e=[],c={},a=c,i=(s("cb5f"),s("2877")),l=Object(i["a"])(a,n,e,!1,null,"347dc6ff",null);o["a"]=l.exports}}]);

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@@ -1 +0,0 @@
(window["webpackJsonp"]=window["webpackJsonp"]||[]).push([["chunk-4eb60a5d"],{"401c":function(t,o,s){t.exports=s.p+"img/404.aae0b83c.png"},"757e":function(t,o,s){t.exports=s.p+"img/top.ef87bb54.png"},cb5f:function(t,o,s){"use strict";s("ceb1")},ceb1:function(t,o,s){},dc93:function(t,o,s){t.exports=s.p+"img/bottom.6eba07d4.png"},f173:function(t,o,s){"use strict";s.r(o);var n=function(){var t=this,o=t.$createElement,n=t._self._c||o;return n("Result",[n("div",{staticClass:"top",attrs:{slot:"top"},slot:"top"},[n("img",{attrs:{src:s("dc93"),alt:""}})]),n("div",{staticClass:"content",attrs:{slot:"content"},slot:"content"},[n("img",{attrs:{src:s("401c"),alt:""}}),n("h3",[t._v("页面出错了")])]),n("div",{staticClass:"bottom",attrs:{slot:"bottom"},slot:"bottom"},[n("img",{attrs:{slot:"bottom",src:s("757e"),alt:""},slot:"bottom"})])])},c=[],e=s("ffa4"),a={components:{Result:e["a"]}},i=a,l=s("2877"),r=Object(l["a"])(i,n,c,!1,null,"340221be",null);o["default"]=r.exports},ffa4:function(t,o,s){"use strict";var n=function(){var t=this,o=t.$createElement,s=t._self._c||o;return s("div",{staticClass:"wrap"},[t._t("top"),t._t("content"),t._t("bottom")],2)},c=[],e={},a=e,i=(s("cb5f"),s("2877")),l=Object(i["a"])(a,n,c,!1,null,"347dc6ff",null);o["a"]=l.exports}}]);

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@@ -1,32 +0,0 @@
/**
* 倒计时10s中提醒用户
*/
function reloadTips() {
setTimeout(() => {
let ele = document.getElementById("loading-tips");
if (ele) {
ele.innerHTML = "加载时间过长,请检查网络或退出重试"
}
}, 10 * 1000);
}
/**
* 显示加载框
*/
function showLoading() {
var loading = " <div class=\"loading\">\n" +
" <div class=\"loading-container\">\n" +
" <div class=\"loading-container-dot dot-1\"></div>\n" +
" <div class=\"loading-container-dot dot-2\"></div>\n" +
" <div class=\"loading-container-dot dot-3\"></div>\n" +
" </div>\n" +
" <div id='loading-tips' class=\"loading-tips\">&nbsp;</div>\n" +
" </div>";
var root = document.getElementById("app");
root.innerHTML = loading;
reloadTips();
}
showLoading();

View File

@@ -1,17 +0,0 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8"/>
<meta content="IE=edge" http-equiv="X-UA-Compatible"/>
<meta
content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=0"
name="viewport"
/>
</head>
<body>
<script type="text/javascript">
</script>
</body>
</html>

View File

@@ -0,0 +1,37 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8"/>
<meta content="IE=edge" http-equiv="X-UA-Compatible"/>
<meta
content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=0"
name="viewport"
/>
<title>钉钉授权</title>
</head>
<body>
<script src="dingtalk.open.js"></script>
<script type="text/javascript">
function getQueryString(name) {
var reg = new RegExp("(^|&)" + name + "=([^&]*)(&|$)", "i");
var r = window.location.search.substr(1).match(reg);
if (r != null) return decodeURI(r[2]);
return null;
}
dd.runtime.permission.requestAuthCode({
corpId: getQueryString("corpId"),
onSuccess: function (result) {
let search = window.location.search + "&code=" + result.code;
window.location.href = "/auth/ding/oauth2/" + getQueryString("service") + search;
},
onFail: function (err) {
window.location.href = "./error.html?message=" + JSON.stringify(err);
}
})
</script>
</body>
</html>

View File

@@ -0,0 +1,37 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8"/>
<meta content="IE=edge" http-equiv="X-UA-Compatible"/>
<meta
content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=0"
name="viewport"
/>
<title>钉钉授权</title>
</head>
<body>
<script src="dingtalk.open.js"></script>
<script type="text/javascript">
function getQueryString(name) {
var reg = new RegExp("(^|&)" + name + "=([^&]*)(&|$)", "i");
var r = window.location.search.substr(1).match(reg);
if (r != null) return decodeURI(r[2]);
return null;
}
dd.runtime.permission.requestAuthCode({
corpId: getQueryString("corpId"),
onSuccess: function (result) {
let search = window.location.search + "&code=" + result.code;
window.location.href = "/auth/ding/oauth2/" + getQueryString("service") + search;
},
onFail: function (err) {
window.location.href = "./error.html?message=" + JSON.stringify(err);
}
})
</script>
</body>
</html>

Binary file not shown.

View File

@@ -6,7 +6,7 @@
<parent>
<groupId>com.tiesheng.springboot-parent</groupId>
<artifactId>springboot-parent</artifactId>
<version>2.0.0.rc28</version>
<version>0.8.4</version>
</parent>
<artifactId>springboot-annotation</artifactId>

View File

@@ -1,13 +0,0 @@
package com.tiesheng.annotation.operation;
import java.lang.annotation.*;
/**
* @author hao
*/
@Target(ElementType.METHOD)
@Documented
@Retention(RetentionPolicy.RUNTIME)
public @interface OperationIgnore {
}

View File

@@ -21,12 +21,4 @@ public @interface OperationLog {
*/
String insertKey() default "";
/**
* 需要脱敏的字段
*
* @return
*/
String[] desensitize() default {};
}

View File

@@ -1,41 +0,0 @@
package com.tiesheng.annotation.role;
import java.lang.annotation.*;
@Target({ElementType.METHOD, ElementType.TYPE})
@Documented
@Retention(RetentionPolicy.RUNTIME)
public @interface RoleAuthority {
/**
* 编号
*
* @return
*/
String value();
/**
* 平台类型
*
* @return
*/
String platform() default "";
/**
* 分组
*
* @return
*/
String[] group() default {};
/**
* 依赖其他权限
*
* @return
*/
String[] deps() default {};
}

View File

@@ -1,9 +0,0 @@
package com.tiesheng.annotation.role;
import java.lang.annotation.*;
@Target({ElementType.METHOD})
@Documented
@Retention(RetentionPolicy.RUNTIME)
public @interface RoleIgnore {
}

Binary file not shown.

View File

@@ -6,7 +6,7 @@
<parent>
<groupId>com.tiesheng.springboot-parent</groupId>
<artifactId>springboot-parent</artifactId>
<version>2.0.0.rc28</version>
<version>0.8.4</version>
</parent>
<artifactId>springboot-database</artifactId>

View File

@@ -9,20 +9,15 @@ import cn.hutool.log.LogFactory;
import com.tiesheng.database.utls.TieshengDbUtil;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.context.annotation.Configuration;
import org.springframework.scheduling.annotation.EnableScheduling;
import org.springframework.scheduling.annotation.SchedulingConfigurer;
import org.springframework.scheduling.config.ScheduledTaskRegistrar;
import java.util.Date;
import java.util.List;
/**
* @author hao
*/
@Configuration
@ConfigurationProperties(prefix = "tiesheng.db.backup")
@EnableScheduling
public class DbBackupConfig implements SchedulingConfigurer {
@ConfigurationProperties(prefix = "tiesheng.db-backup")
public class DbBackupConfig {
/**
* 数据库备份的路径
@@ -34,45 +29,25 @@ public class DbBackupConfig implements SchedulingConfigurer {
*/
private String format = "yyyyMMdd";
/**
* 过期天数
*/
private Integer days = 7;
@Override
public void configureTasks(ScheduledTaskRegistrar taskRegistrar) {
taskRegistrar.addCronTask(this::dbBackup, "0 0 1 * * ?");
}
/**
* 数据库备份
*/
public void dbBackup() {
if (!FileUtil.exist(path)) {
return;
}
String url = SpringUtil.getProperty("spring.datasource.url");
String username = SpringUtil.getProperty("spring.datasource.username");
String password = SpringUtil.getProperty("spring.datasource.password");
String dbName = TieshengDbUtil.getTableSchema(url);
String backupDir = StrUtil.format("{}{}", getPath(), dbName);
try {
String saveFile = StrUtil.format("{}/{}.sql", backupDir, DateUtil.format(new Date(), format));
String saveFile = StrUtil.format("{}{}/{}.sql", getPath(), dbName, DateUtil.format(new Date(), format));
FileUtil.mkParentDirs(saveFile);
String cmd = StrUtil.format("mysqldump -u {} --password={} --databases {} " +
"--compress --skip-opt --result-file {} ", username, password, dbName, saveFile);
RuntimeUtil.execForStr(cmd);
RuntimeUtil.execForStr(StrUtil.format("gzip -9f {}", saveFile));
// 删除过期备份
List<String> forStr = RuntimeUtil.execForLines("find " + backupDir + " -name *.sql.gz -mtime +" + days);
forStr.forEach(FileUtil::del);
} catch (Exception e) {
LogFactory.get().info(e);
String cmd = StrUtil.format("mysqldump -u{} -p {} > {}", username, dbName, saveFile);
LogFactory.get().info("cmd: " + cmd);
String forStr = RuntimeUtil.execForStr(cmd);
LogFactory.get().info("dbBackup: " + forStr);
forStr = RuntimeUtil.execForStr(password);
LogFactory.get().info("dbBackup: " + forStr);
} catch (Exception ignored) {
}
}
///////////////////////////////////////////////////////////////////////////
@@ -94,14 +69,4 @@ public class DbBackupConfig implements SchedulingConfigurer {
public void setFormat(String format) {
this.format = format;
}
public Integer getDays() {
return days;
}
public void setDays(Integer days) {
this.days = days;
}
}

View File

@@ -16,12 +16,11 @@ import java.util.List;
* @author hao
*/
@Configuration
@ConfigurationProperties(prefix = "tiesheng.db.migration")
@ConfigurationProperties(prefix = "tiesheng.db-migration")
public class DbMigrationConfig {
private String table = "core_config_db";
private List<String> migrations = CollUtil.newArrayList("classpath*:db/migration/*.sql");
private List<String> datas = CollUtil.newArrayList("classpath*:db/data/*.sql");
private List<String> locations = CollUtil.newArrayList("classpath*:db/migration/*.sql");
private String ignoreSqls = "drop table,delete from";
/**
@@ -58,20 +57,12 @@ public class DbMigrationConfig {
this.table = table;
}
public List<String> getMigrations() {
return migrations;
public List<String> getLocations() {
return locations;
}
public void setMigrations(List<String> migrations) {
this.migrations = migrations;
}
public List<String> getDatas() {
return datas;
}
public void setDatas(List<String> datas) {
this.datas = datas;
public void setLocations(List<String> locations) {
this.locations = locations;
}
public String getIgnoreSqls() {

View File

@@ -22,7 +22,6 @@ import java.sql.SQLException;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.concurrent.atomic.AtomicReference;
import java.util.zip.Checksum;
/**
@@ -37,24 +36,17 @@ public class DbMigrationInitializer implements ServletContextInitializer {
DataSource dataSource;
@Autowired
DbMigrationConfig dbMigrationConfig;
@Autowired
@Autowired(required = false)
List<DbDataInitializer> dbDataInitializerList;
@Override
public void onStartup(ServletContext servletContext) {
try {
// 初始化
Db coreDb = Db.use(dataSource);
dbMigrationConfig.checkDbExists(coreDb);
startDeal(coreDb, dbMigrationConfig.getMigrations());
startDeal(coreDb, dbMigrationConfig.getDatas());
// 其他数据初始化
dbDataInitializerList.forEach(DbDataInitializer::init);
startDeal();
if (dbDataInitializerList != null) {
dbDataInitializerList.forEach(DbDataInitializer::init);
}
} catch (Exception ignore) {
}
}
@@ -65,13 +57,18 @@ public class DbMigrationInitializer implements ServletContextInitializer {
*
* @throws Exception
*/
private void startDeal(Db coreDb, List<String> locations) throws Exception {
private void startDeal() throws Exception {
Db coreDb = Db.use(dataSource);
dbMigrationConfig.checkDbExists(coreDb);
PathMatchingResourcePatternResolver patternResolver = new PathMatchingResourcePatternResolver();
List<Resource> resourceList = new ArrayList<>();
for (String location : locations) {
for (String location : dbMigrationConfig.getLocations()) {
Resource[] resources = patternResolver.getResources(location);
resourceList.addAll(Arrays.asList(resources));
}
// 排序后执行sql
resourceList.sort((o1, o2) -> StrUtil.compare(o1.getFilename(), o2.getFilename(), true));
for (Resource resource : resourceList) {
migrationByResource(resource, coreDb);
@@ -95,8 +92,6 @@ public class DbMigrationInitializer implements ServletContextInitializer {
if (entity == null) {
return;
}
AtomicReference<Integer> success = new AtomicReference<>(0);
AtomicReference<Integer> fail = new AtomicReference<>(0);
db.tx((VoidFunc1<Db>) parameter -> {
List<String> split = StrUtil.split(readUtf8, ";");
for (String sql : split) {
@@ -109,12 +104,11 @@ public class DbMigrationInitializer implements ServletContextInitializer {
}
try {
parameter.execute(sql);
success.getAndSet(success.get() + 1);
} catch (Exception ignore) {
fail.getAndSet(fail.get() + 1);
}
}
});
entity.set("checksum", checksum.getValue());
entity.set("update_time", DateUtil.date());
db.update(entity, Entity.create(dbMigrationConfig.getTable()).set("id", entity.get("id")));

View File

@@ -1,13 +0,0 @@
package com.tiesheng.database.service.impl;
import com.tiesheng.database.service.DbDataInitializer;
import org.springframework.stereotype.Component;
@Component
public class DefaultDbDataInitializer implements DbDataInitializer {
@Override
public void init() {
}
}

Binary file not shown.

View File

@@ -6,7 +6,7 @@
<parent>
<groupId>com.tiesheng.springboot-parent</groupId>
<artifactId>springboot-parent</artifactId>
<version>2.0.0.rc28</version>
<version>0.8.4</version>
</parent>
<artifactId>springboot-encrypt</artifactId>

View File

@@ -0,0 +1,21 @@
package com.tiesheng.encrypt;
import com.tiesheng.encrypt.config.DecryptRequestBodyAdvice;
import com.tiesheng.encrypt.config.EncryptResponseBodyAdvice;
import org.springframework.context.annotation.Import;
import java.lang.annotation.*;
/**
* @author hao
*/
@Retention(RetentionPolicy.RUNTIME)
@Target({ElementType.TYPE})
@Documented
@Import({
DecryptRequestBodyAdvice.class,
EncryptResponseBodyAdvice.class,
})
public @interface EnableEncryptConfig {
}

View File

@@ -1,10 +0,0 @@
package com.tiesheng.encrypt;
import org.springframework.context.annotation.ComponentScan;
@ComponentScan({
"com.tiesheng.encrypt.**.*",
})
public class EncryptAutoConfigurer {
}

View File

@@ -37,7 +37,7 @@ public class EncryptResponseBodyAdvice implements ResponseBodyAdvice<ApiResp> {
try {
Object data = body.getData();
if (data == null || !body.successful() || !encryptConfig.isBody()) {
if (data == null || !body.successful()) {
return body;
}

Binary file not shown.

View File

@@ -6,7 +6,7 @@
<parent>
<groupId>com.tiesheng.springboot-parent</groupId>
<artifactId>springboot-parent</artifactId>
<version>2.0.0.rc28</version>
<version>0.8.4</version>
</parent>
<artifactId>springboot-login</artifactId>

View File

@@ -0,0 +1,16 @@
package com.tiesheng.login;
import com.tiesheng.platform.PlatformAutoConfigurer;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Import;
/**
* @author hao
*/
@ComponentScan({
"com.tiesheng.login.**.*",
})
@Import(PlatformAutoConfigurer.class)
public class LoginAutoConfigurer {
}

View File

@@ -1,121 +0,0 @@
package com.tiesheng.login.config;
import cn.hutool.core.util.ObjUtil;
import cn.hutool.core.util.StrUtil;
import com.tiesheng.annotation.token.TokenIgnore;
import com.tiesheng.login.pojos.RequestUserInfo;
import com.tiesheng.login.service.TsLoginConfigurer;
import com.tiesheng.util.config.TsTokenConfig;
import com.tiesheng.util.exception.ApiException;
import com.tiesheng.util.pojos.TokenBean;
import org.springframework.boot.autoconfigure.web.servlet.error.BasicErrorController;
import org.springframework.context.annotation.Configuration;
import org.springframework.core.MethodParameter;
import org.springframework.web.bind.support.WebDataBinderFactory;
import org.springframework.web.context.request.NativeWebRequest;
import org.springframework.web.method.HandlerMethod;
import org.springframework.web.method.support.HandlerMethodArgumentResolver;
import org.springframework.web.method.support.ModelAndViewContainer;
import org.springframework.web.servlet.HandlerInterceptor;
import org.springframework.web.servlet.config.annotation.InterceptorRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
import javax.annotation.Resource;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.lang.reflect.Method;
import java.util.List;
@Configuration
public class TokenWebMvcConfigurer implements WebMvcConfigurer {
@Resource
TsTokenConfig tsTokenConfig;
@Resource
TsLoginConfigurer tsLoginConfigurer;
@Override
public void addArgumentResolvers(List<HandlerMethodArgumentResolver> resolvers) {
resolvers.add(new HandlerMethodArgumentResolver() {
@Override
public boolean supportsParameter(MethodParameter parameter) {
return parameter.getParameterType().isAssignableFrom(TokenBean.class);
}
@Override
public Object resolveArgument(MethodParameter parameter, ModelAndViewContainer mavContainer,
NativeWebRequest webRequest, WebDataBinderFactory binderFactory) {
String header = webRequest.getHeader(TsTokenConfig.TOKEN_KEY);
boolean thrExp = true;
Method method = parameter.getMethod();
if (method != null) {
TokenIgnore annotation = method.getAnnotation(TokenIgnore.class);
thrExp = annotation == null;
}
return tsTokenConfig.validToken(header, thrExp);
}
});
}
@Override
public void addInterceptors(InterceptorRegistry registry) {
registry.addInterceptor(new HandlerInterceptor() {
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) {
// 非接口类直接跳过
if (!(handler instanceof HandlerMethod)) {
return true;
}
String requestURI = request.getRequestURI();
String[] ignorePaths = tsTokenConfig.getIgnorePaths();
if (ObjUtil.isNotEmpty(ignorePaths)) {
for (String path : ignorePaths) {
if (path.contains("/**") &&
StrUtil.startWith(requestURI, path.replace("/**", ""))) {
// 通配路径
return true;
} else if (requestURI.equals(path)) {
// 完整路径
return true;
}
}
}
// 过滤不要需要验证的接口(注解)
HandlerMethod handlerMethod = (HandlerMethod) handler;
if (handlerMethod.getBeanType() == BasicErrorController.class) {
return true;
}
TokenIgnore annotation = handlerMethod.getBeanType().getAnnotation(TokenIgnore.class);
if (annotation != null) {
return true;
}
TokenIgnore apiTokenIgnore = handlerMethod.getMethodAnnotation(TokenIgnore.class);
if (apiTokenIgnore != null) {
return true;
}
// 验证TOKEN是否存在
TokenBean tokenBean = tsTokenConfig.validToken(request, true);
// 验证用户是否存在
RequestUserInfo cachedUserInfo = tsLoginConfigurer.getCachedUserInfo(tokenBean);
if (cachedUserInfo == null) {
throw new ApiException("非法TOKEN请重新登录");
}
return true;
}
});
}
}

View File

@@ -0,0 +1,76 @@
package com.tiesheng.login.config.token;
import cn.hutool.core.util.StrUtil;
import com.tiesheng.annotation.token.TokenIgnore;
import com.tiesheng.util.ServletKit;
import org.aspectj.lang.JoinPoint;
import org.aspectj.lang.annotation.Aspect;
import org.aspectj.lang.annotation.Before;
import org.aspectj.lang.annotation.Pointcut;
import org.aspectj.lang.reflect.MethodSignature;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import java.lang.reflect.Method;
/**
* @author hao
* @ProjectName CmccSpring
* @Copyright Hangzhou ShuoChuang Technology Co.,Ltd All Right Reserved
* @Description 这里是对文件的描述
* @data 2019-07-15
* @note 这里写文件的详细功能和改动
* @note
*/
@Aspect
@Component
public class TsTokenAspect {
@Autowired
TsTokenConfig tsTokenConfig;
/**
* 切入点
*/
@Pointcut("execution(* com..controller..*.*(..))")
public void methodArgs() {
}
/**
* 获取操作日志说明
*
* @param joinPoint
*/
@Before("methodArgs()")
public void before(JoinPoint joinPoint) {
// 过滤不要需要验证的接口path
String requestURI = ServletKit.getRequest().getRequestURI();
if (StrUtil.startWithAnyIgnoreCase(requestURI, tsTokenConfig.getIgnorePaths())) {
return;
}
// 过滤不要需要验证的接口(注解)
Object aThis = joinPoint.getTarget();
TokenIgnore annotation = aThis.getClass().getAnnotation(TokenIgnore.class);
if (annotation != null) {
return;
}
MethodSignature signature = (MethodSignature) joinPoint.getSignature();
Method method = signature.getMethod();
TokenIgnore apiTokenIgnore = method.getAnnotation(TokenIgnore.class);
if (apiTokenIgnore != null) {
return;
}
// token验证
tsTokenConfig.validToken(true);
}
}

View File

@@ -1,18 +1,18 @@
package com.tiesheng.util.config;
package com.tiesheng.login.config.token;
import cn.hutool.core.map.MapUtil;
import cn.hutool.core.util.StrUtil;
import cn.hutool.extra.servlet.ServletUtil;
import cn.hutool.json.JSONUtil;
import cn.hutool.extra.spring.SpringUtil;
import cn.hutool.jwt.JWT;
import cn.hutool.jwt.JWTValidator;
import com.tiesheng.login.config.token.bean.TokenBean;
import com.tiesheng.util.ServletKit;
import com.tiesheng.util.exception.ApiException;
import com.tiesheng.util.pojos.TokenBean;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.context.annotation.Configuration;
import javax.servlet.http.HttpServletRequest;
import java.util.Map;
@@ -23,22 +23,32 @@ import java.util.Map;
@ConfigurationProperties("tiesheng.token")
public class TsTokenConfig {
/**
* 用户登录的KEY
*/
public static String CACHE_REQUEST_LOGIN_KEY = "CACHE:LOGIN:{}";
/**
* token常量
*/
public static final String TOKEN_KEY = "token";
private Map<String, TokenBean> testMap = MapUtil.newHashMap();
private String encryptKey = "%kIp9frQCu";
private Integer expireHours = 48;
private String[] ignorePaths;
private boolean validLoginSign = false;
/**
* 获取当前登录的token
*
* @return
*/
public static TokenBean get() {
TsTokenConfig tokenConfig = SpringUtil.getBean(TsTokenConfig.class);
return tokenConfig.validToken(true);
}
/**
* 获取当前登录的token
*
* @return
*/
public static TokenBean getWithoutThr() {
TsTokenConfig tokenConfig = SpringUtil.getBean(TsTokenConfig.class);
return tokenConfig.validToken(false);
}
/**
@@ -61,8 +71,8 @@ public class TsTokenConfig {
* @param thrExp
* @return
*/
public TokenBean validToken(HttpServletRequest request, boolean thrExp) {
String token = ServletUtil.getHeader(request, TOKEN_KEY, "utf-8");
public TokenBean validToken(boolean thrExp) {
String token = ServletUtil.getHeader(ServletKit.getRequest(), "token", "utf-8");
return validToken(token, thrExp);
}
@@ -81,11 +91,16 @@ public class TsTokenConfig {
try {
JWT decode = JWT.of(token);
JWTValidator.of(decode).validateDate();
tokenBean = JSONUtil.toBean(decode.getPayloads(), TokenBean.class);
String id = decode.getPayload("id").toString();
String environmentType = decode.getPayload("environmentType").toString();
String service = decode.getPayload("service").toString();
String extra = decode.getPayload("extra").toString();
tokenBean = new TokenBean(id, environmentType, service);
tokenBean.setExtra(extra);
} catch (Exception ignored) {
}
if ((tokenBean == null || StrUtil.isEmpty(tokenBean.getId())) && thrExp) {
if (tokenBean == null && thrExp) {
throw new ApiException(StrUtil.isEmpty(token) ? 110 : 112,
StrUtil.isEmpty(token) ? "请先登录" : "登录过期,请重新登陆");
}
@@ -133,12 +148,4 @@ public class TsTokenConfig {
public void setIgnorePaths(String[] ignorePaths) {
this.ignorePaths = ignorePaths;
}
public boolean isValidLoginSign() {
return validLoginSign;
}
public void setValidLoginSign(boolean validLoginSign) {
this.validLoginSign = validLoginSign;
}
}

Some files were not shown because too many files have changed in this diff Show More