diff --git a/.idea/compiler.xml b/.idea/compiler.xml index 343c56d..0fad9d5 100644 --- a/.idea/compiler.xml +++ b/.idea/compiler.xml @@ -7,18 +7,27 @@ - - - - + + + + - + + + + + + + + + + + - diff --git a/.idea/encodings.xml b/.idea/encodings.xml index e6dd92d..d4d942a 100644 --- a/.idea/encodings.xml +++ b/.idea/encodings.xml @@ -3,11 +3,11 @@ - - - - - - + + + + + + \ No newline at end of file diff --git a/.idea/misc.xml b/.idea/misc.xml index 1f19f73..f095382 100644 --- a/.idea/misc.xml +++ b/.idea/misc.xml @@ -8,6 +8,7 @@ + diff --git a/README.md b/README.md index ab07054..79e7b6b 100644 --- a/README.md +++ b/README.md @@ -1 +1 @@ -# 用于自动化部署的测试项目 +# 个人中心微服务 diff --git a/devops/build/build.sh b/devops/build/build.sh deleted file mode 100644 index 861a8ff..0000000 --- a/devops/build/build.sh +++ /dev/null @@ -1,57 +0,0 @@ -#!/bin/bash -echo "==============build begin 当前环境:【$ENV】==============" -if [[ "$ENV" = "" ]]; then - ENV=$env -fi - -if [[ $ENV == 'test' ]]; then - HUB_USERNAME=wlf19941002 - HUB_PASSWORD=901002wei - UCLOUD_HUB=registry.cn-hangzhou.aliyuncs.com/weilingfeng-dev - elif [[ $ENV == 'prod' ]]; then - HUB_USERNAME=wlf19941002 - HUB_PASSWORD=901002wei - UCLOUD_HUB=registry.cn-hangzhou.aliyuncs.com/weilingfeng-prod - else - echo 'Please enter right environment! eg: test || prod(master or v/V*.*.* branch)' - exit 1 -fi - -#编译后将包拷贝至新建的publish目录下,gitlab上可以在对应节点下载包。 -mvn clean package -Dmaven.test.skip=true || exit 1 && \ - echo 'build successful!' - -# 构建 TAG 变量 -TAG="${CI_COMMIT_SHA:0:4}${CI_PIPELINE_ID:0:4}" - -# 打印 TAG 变量的值 -echo "TAG value: $TAG" - -ZHN_AUTH=zhn-auth -ZHN_GATEWAY=zhn-gateway -ZHN_SYSTEM=zhn-system - -#构建镜像 -docker build -f zhn-gateway/Dockerfile -t $UCLOUD_HUB/${ZHN_GATEWAY}:$TAG . -docker build -f zhn-auth/Dockerfile -t $UCLOUD_HUB/${ZHN_AUTH}:$TAG . -docker build -f zhn-modules/zhn-system/Dockerfile -t $UCLOUD_HUB/${ZHN_SYSTEM}:$TAG . -#镜像仓库登录 -docker login registry.cn-hangzhou.aliyuncs.com --username $HUB_USERNAME --password $HUB_PASSWORD - -#推送镜像 -docker push $UCLOUD_HUB/${ZHN_AUTH}:$TAG -docker push $UCLOUD_HUB/${ZHN_GATEWAY}:$TAG -docker push $UCLOUD_HUB/${ZHN_SYSTEM}:$TAG - -#删除镜像 -docker rmi -f $UCLOUD_HUB/${ZHN_AUTH}:$TAG -docker rmi -f $UCLOUD_HUB/${ZHN_GATEWAY}:$TAG -docker push $UCLOUD_HUB/${ZHN_SYSTEM}:$TAG - -#删除none 镜像 -docker image prune -f --filter "dangling=true" - -echo "$UCLOUD_HUB/${ZHN_AUTH}:$TAG" -echo "$UCLOUD_HUB/${ZHN_GATEWAY}:$TAG" -echo "$UCLOUD_HUB/${ZHN_SYSTEM}:$TAG" -echo "==============build end!!!================" diff --git a/devops/release/deploy.sh b/devops/release/deploy.sh deleted file mode 100644 index dea326b..0000000 --- a/devops/release/deploy.sh +++ /dev/null @@ -1,47 +0,0 @@ -#!/bin/bash -echo "==============deploy begin!!!================" - -UCLOUD_HUB=registry.cn-hangzhou.aliyuncs.com/weilingfeng-dev -UCLOUD_HUB=registry.cn-hangzhou.aliyuncs.com/weilingfeng-prod - -TAG="${CI_COMMIT_SHA:0:4}${CI_PIPELINE_ID:0:4}" - -ZHN_GATEWAY=zhn-gateway -ZHN_AUTH=zhn-auth -ZHN_SYSTEM=zhn-system - -#停止 -if [ -n "$(docker ps -a -q -f name=$ZHN_GATEWAY)" ]; then - docker rm -f $ZHN_GATEWAY - echo "$ZHN_GATEWAY 已经停止" -fi - -if [ -n "$(docker ps -a -q -f name=$ZHN_AUTH)" ]; then - docker rm -f $ZHN_AUTH - echo "$ZHN_AUTH 已经停止" -fi - -if [ -n "$(docker ps -a -q -f name=$ZHN_SYSTEM)" ]; then - docker rm -f $ZHN_SYSTEM - echo "$ZHN_SYSTEM 已经停止" -fi - -#删除所有镜像 -docker images | grep "zhn-gateway" | awk '{print $3}' | while read image_id; do docker rmi -f "$image_id"; done -docker images | grep "zhn-auth" | awk '{print $3}' | while read image_id; do docker rmi -f "$image_id"; done -docker images | grep "zhn-system" | awk '{print $3}' | while read image_id; do docker rmi -f "$image_id"; done - - -#拉取镜像 -docker pull $UCLOUD_HUB/${ZHN_AUTH}:$TAG || exit 1 -docker pull $UCLOUD_HUB/${ZHN_SYSTEM}:$TAG || exit 1 -docker pull $UCLOUD_HUB/${ZHN_GATEWAY}:$TAG || exit 1 - -#发布 -docker run -itd -p 8080:8080 --name=zhn-gateway --restart=always $UCLOUD_HUB/${ZHN_GATEWAY}:$TAG || exit 1 -docker run -itd -p 9200:9200 --name=zhn-auth --restart=always $UCLOUD_HUB/${ZHN_AUTH}:$TAG || exit 1 -docker run -itd -p 9201:9201 --name=zhn-system --restart=always $UCLOUD_HUB/${ZHN_SYSTEM}:$TAG || exit 1 - -echo "==============deploy success end!!!==================" - - diff --git a/pom.xml b/pom.xml index 1713842..0264de5 100644 --- a/pom.xml +++ b/pom.xml @@ -4,15 +4,15 @@ xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> 4.0.0 - com.zhn - zhn-dev + com.xsnb + xsnb-dev pom 1.0.0 - zhn-common - zhn-gateway - zhn-auth - zhn-modules + xsnb-common + xsnb-gateway + xsnb-auth + xsnb-modules @@ -50,12 +50,12 @@ - com.zhn - zhn-common + com.xsnb + xsnb-common 1.0.0 - \ No newline at end of file + diff --git a/zhn-auth/Dockerfile b/xsnb-auth/Dockerfile similarity index 51% rename from zhn-auth/Dockerfile rename to xsnb-auth/Dockerfile index da9260e..8ec3990 100644 --- a/zhn-auth/Dockerfile +++ b/xsnb-auth/Dockerfile @@ -4,12 +4,12 @@ FROM openjdk:8-jre MAINTAINER ex_weilingfeng@163.com # 挂载目录 -VOLUME /home/zhn +VOLUME /home/xsnb # 创建目录 -RUN mkdir -p /home/zhn +RUN mkdir -p /home/xsnb # 指定路径 -WORKDIR /home/zhn +WORKDIR /home/xsnb # 复制jar文件到路径 -COPY zhn-auth/target/zhn-auth.jar /home/zhn/zhn-auth.jar +COPY xsnb-auth/target/xsnb-auth.jar /home/xsnb/xsnb-auth.jar # 启动网关服务 -ENTRYPOINT ["java","-jar","zhn-auth.jar"] +ENTRYPOINT ["java","-jar","xsnb-auth.jar"] diff --git a/zhn-auth/pom.xml b/xsnb-auth/pom.xml similarity index 66% rename from zhn-auth/pom.xml rename to xsnb-auth/pom.xml index eaba2e3..2b6811d 100644 --- a/zhn-auth/pom.xml +++ b/xsnb-auth/pom.xml @@ -3,19 +3,29 @@ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> - zhn-dev - com.zhn + xsnb-dev + com.xsnb 1.0.0 4.0.0 - zhn-auth + xsnb-auth - com.zhn - zhn-common + com.xsnb + xsnb-common + + + com.baomidou + mybatis-plus + + + com.baomidou + mybatis-plus-boot-starter + + diff --git a/zhn-auth/src/main/java/com/zhn/auth/AuthMian.java b/xsnb-auth/src/main/java/com/xsnb/auth/AuthMian.java similarity index 93% rename from zhn-auth/src/main/java/com/zhn/auth/AuthMian.java rename to xsnb-auth/src/main/java/com/xsnb/auth/AuthMian.java index 50ed9b8..92c88d6 100644 --- a/zhn-auth/src/main/java/com/zhn/auth/AuthMian.java +++ b/xsnb-auth/src/main/java/com/xsnb/auth/AuthMian.java @@ -1,4 +1,5 @@ -package com.zhn.auth; +package com.xsnb.auth; + import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; @@ -7,8 +8,9 @@ import org.springframework.cloud.openfeign.EnableFeignClients; /** * @author zhang */ -@SpringBootApplication + @EnableFeignClients +@SpringBootApplication public class AuthMian { public static void main(String[] args) { SpringApplication.run(AuthMian.class, args); diff --git a/xsnb-auth/src/main/java/com/xsnb/auth/controller/AuthController.java b/xsnb-auth/src/main/java/com/xsnb/auth/controller/AuthController.java new file mode 100644 index 0000000..27935e2 --- /dev/null +++ b/xsnb-auth/src/main/java/com/xsnb/auth/controller/AuthController.java @@ -0,0 +1,53 @@ +package com.xsnb.auth.controller; + + +import com.xsnb.auth.service.AuthService; +import com.xsnb.common.domain.User; +import com.xsnb.common.domain.request.RequestUser; +import com.xsnb.common.domain.response.RespJwt; +import com.xsnb.common.result.Result; +import lombok.extern.log4j.Log4j2; +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.RequestBody; +import org.springframework.web.bind.annotation.RestController; + +import javax.servlet.http.HttpServletRequest; + +@RestController +@Log4j2 +public class AuthController { + @Autowired + AuthService authService; + + + + @PostMapping("/getPhoneCode") + public Result getPhoneCode(@RequestBody User user ){ + log.info("获取的信息:{}",user.toString()); + return authService.getPhoneCode(user); + } + + + /** + * + * 登录 + * @param requestUser + * @return + */ + @PostMapping("/login") + Result login(@RequestBody RequestUser requestUser){ + + return authService.login(requestUser); + } + + + @GetMapping("/user/info") + Result userinfo(HttpServletRequest request){ + return authService.userinfo(request); + + } + + +} diff --git a/zhn-auth/src/main/java/com/zhn/auth/feign/AuthFeignSystem.java b/xsnb-auth/src/main/java/com/xsnb/auth/feign/AuthFeignSystem.java similarity index 70% rename from zhn-auth/src/main/java/com/zhn/auth/feign/AuthFeignSystem.java rename to xsnb-auth/src/main/java/com/xsnb/auth/feign/AuthFeignSystem.java index aace3a0..07a3231 100644 --- a/zhn-auth/src/main/java/com/zhn/auth/feign/AuthFeignSystem.java +++ b/xsnb-auth/src/main/java/com/xsnb/auth/feign/AuthFeignSystem.java @@ -1,14 +1,15 @@ -package com.zhn.auth.feign; +package com.xsnb.auth.feign; -import com.zhn.common.domain.User; -import com.zhn.common.result.Result; +import com.xsnb.common.domain.User; +import com.xsnb.common.result.Result; import org.springframework.cloud.openfeign.FeignClient; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.PathVariable; -@FeignClient("zhn-system") +@FeignClient("xsnb-system") public interface AuthFeignSystem { + @GetMapping("/user/byphone/{phone}") Result byphone(@PathVariable String phone); diff --git a/xsnb-auth/src/main/java/com/xsnb/auth/service/AuthService.java b/xsnb-auth/src/main/java/com/xsnb/auth/service/AuthService.java new file mode 100644 index 0000000..5ee0eed --- /dev/null +++ b/xsnb-auth/src/main/java/com/xsnb/auth/service/AuthService.java @@ -0,0 +1,17 @@ +package com.xsnb.auth.service; + +import com.xsnb.common.domain.User; +import com.xsnb.common.domain.request.RequestUser; +import com.xsnb.common.domain.response.RespJwt; +import com.xsnb.common.result.Result; + +import javax.servlet.http.HttpServletRequest; + +public interface AuthService { + Result login(RequestUser requestUser); + + Result userinfo(HttpServletRequest request); + + Result getPhoneCode(User user); + +} diff --git a/xsnb-auth/src/main/java/com/xsnb/auth/service/impl/AuthServiceImpl.java b/xsnb-auth/src/main/java/com/xsnb/auth/service/impl/AuthServiceImpl.java new file mode 100644 index 0000000..f3d0013 --- /dev/null +++ b/xsnb-auth/src/main/java/com/xsnb/auth/service/impl/AuthServiceImpl.java @@ -0,0 +1,124 @@ +package com.xsnb.auth.service.impl; + + +import com.alibaba.fastjson.JSONObject; +import com.xsnb.auth.feign.AuthFeignSystem; +import com.xsnb.auth.service.AuthService; +import com.xsnb.common.constants.JwtConstants; +import com.xsnb.common.constants.RabbitMQConstants; +import com.xsnb.common.constants.TokenConstants; +import com.xsnb.common.domain.User; +import com.xsnb.common.domain.request.RequestUser; +import com.xsnb.common.domain.response.RespJwt; +import com.xsnb.common.result.Result; +import com.xsnb.common.utils.JwtUtils; +import lombok.extern.log4j.Log4j2; +import org.springframework.amqp.rabbit.core.RabbitTemplate; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.data.redis.core.RedisTemplate; +import org.springframework.stereotype.Service; + +import javax.servlet.http.HttpServletRequest; +import java.util.HashMap; +import java.util.UUID; +import java.util.concurrent.TimeUnit; +import java.util.regex.Pattern; + +@Service +@Log4j2 +public class AuthServiceImpl implements AuthService { + + @Autowired + AuthFeignSystem authFeignSystem; + + @Autowired + RedisTemplate redisTemplate; + @Autowired + RabbitTemplate rabbitTemplate; + + + @Override + public Result login(RequestUser requestUser) { + String phone = requestUser.getPhone(); + String captcha = requestUser.getCaptcha(); + if (null == phone || null == captcha) { + return Result.error("联系管理员"); + } + if ("".equals(phone) || "".equals(captcha)) { + + return Result.error("请输入手机号+密码"); + } + Result byphone = authFeignSystem.byphone(phone); + User data = byphone.getData(); + if (null == data) { + return Result.error("先注册手机号,在登录"); + } + //从redsi拿验证码进行比对 + //判断名字为"PHONE_"+phone的key是否存在 + String s = redisTemplate.opsForValue().get(phone); + log.info("拿到的:{}",s); + if (null == s || !s.equals(captcha)) { + return Result.error("验证码错误"); + } + HashMap map = new HashMap<>(); + String userkey = UUID.randomUUID().toString().replaceAll("-", ""); + map.put(JwtConstants.USER_KEY, userkey); + map.put(JwtConstants.DETAILS_USER_ID, data.getId()); + String token = JwtUtils.createToken(map); + redisTemplate.opsForValue().set( + TokenConstants.LOGIN_TOKEN_KEY + userkey, + JSONObject.toJSONString(data), + TokenConstants.EXPIRATION, + TimeUnit.MINUTES + ); + RespJwt respJwt = new RespJwt(); + respJwt.setToken(token); + respJwt.setEidTime("720MIN"); + log.info("登录成功,token:{}", token); + return Result.success(respJwt); + } + + /* + * 前台每次请求都会来到这里进行解析user + * + * */ + @Override + public Result userinfo(HttpServletRequest request) { + String token = request.getHeader(TokenConstants.TOKEN); + String userKey = JwtUtils.getUserKey(token); + String s = redisTemplate.opsForValue().get(TokenConstants.LOGIN_TOKEN_KEY + userKey); + User user = JSONObject.parseObject(s, User.class); + /*获取用户信息*/ + log.info("userInfo获取的用户信息是:{}", user); + return Result.success(user); + } + + /** + * @param user + * @return + * @dis 短信发送 + */ + @Override + public Result getPhoneCode(User user) { + String phone = user.getPhone() == null ? "18906604007" : user.getPhone(); + + log.info("短信发送的手机号 :{}", phone); + Result byphone = authFeignSystem.byphone(phone); + User data = byphone.getData(); + if (null == data) { + return Result.error("先注册手机号,在登录"); + } + Pattern compile = Pattern.compile("^(?:(?:\\+|00)86)?1\\d{10}$"); + if (!compile.matcher(phone).matches()) { + return Result.error("手机号格式错误"); + } + rabbitTemplate.convertAndSend(RabbitMQConstants.SEND_SMS_QUEUs, phone, message -> { + message.getMessageProperties().setMessageId(UUID.randomUUID().toString()); + log.info("rabbit异步发送完毕 :{}", phone); + return message; + }); + + return Result.success("开始发送短信"); + } + +} diff --git a/zhn-auth/target/classes/bootstrap.yml b/xsnb-auth/src/main/resources/bootstrap.yml similarity index 85% rename from zhn-auth/target/classes/bootstrap.yml rename to xsnb-auth/src/main/resources/bootstrap.yml index c0dda39..abe4521 100644 --- a/zhn-auth/target/classes/bootstrap.yml +++ b/xsnb-auth/src/main/resources/bootstrap.yml @@ -12,7 +12,7 @@ spring: time-zone: GMT+8 application: # 应用名称 - name: zhn-auth + name: xsnb-auth profiles: # 环境配置 active: dev @@ -20,10 +20,10 @@ spring: nacos: discovery: # 服务注册地址 - server-addr: 192.168.2.51:8848 + server-addr: 127.0.0.1:8848 config: # 配置中心地址 - server-addr: 192.168.2.51:8848 + server-addr: 127.0.0.1:8848 # 配置文件格式 file-extension: yml # 共享配置 diff --git a/zhn-auth/target/classes/mapper/AuthMapper.xml b/xsnb-auth/src/main/resources/mapper/AuthMapper.xml similarity index 78% rename from zhn-auth/target/classes/mapper/AuthMapper.xml rename to xsnb-auth/src/main/resources/mapper/AuthMapper.xml index 697c9a5..b24a808 100644 --- a/zhn-auth/target/classes/mapper/AuthMapper.xml +++ b/xsnb-auth/src/main/resources/mapper/AuthMapper.xml @@ -1,7 +1,7 @@ - + - \ No newline at end of file + diff --git a/zhn-common/pom.xml b/xsnb-common/pom.xml similarity index 79% rename from zhn-common/pom.xml rename to xsnb-common/pom.xml index 9e449e9..eb362ae 100644 --- a/zhn-common/pom.xml +++ b/xsnb-common/pom.xml @@ -3,13 +3,13 @@ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> - zhn-dev - com.zhn + xsnb-dev + com.xsnb 1.0.0 4.0.0 - zhn-common + xsnb-common @@ -58,6 +58,16 @@ org.springframework.boot spring-boot-starter-data-redis + + + org.springframework.boot + spring-boot-starter-amqp + + + + org.springframework.boot + spring-boot-starter-mail + org.springframework.boot @@ -91,6 +101,19 @@ aliyun-sdk-oss 3.12.0 + + + + + com.baomidou + mybatis-plus + 3.3.1 + + + com.baomidou + mybatis-plus-boot-starter + 3.3.1 + - \ No newline at end of file + diff --git a/zhn-common/src/main/java/com/zhn/common/constants/Constants.java b/xsnb-common/src/main/java/com/xsnb/common/constants/Constants.java similarity index 87% rename from zhn-common/src/main/java/com/zhn/common/constants/Constants.java rename to xsnb-common/src/main/java/com/xsnb/common/constants/Constants.java index 512b656..3d3cffb 100644 --- a/zhn-common/src/main/java/com/zhn/common/constants/Constants.java +++ b/xsnb-common/src/main/java/com/xsnb/common/constants/Constants.java @@ -1,8 +1,8 @@ -package com.zhn.common.constants; +package com.xsnb.common.constants; /** * @description: 系统常量 - * @author zhn + * @author xsnb */ public class Constants { /** diff --git a/zhn-common/src/main/java/com/zhn/common/constants/JwtConstants.java b/xsnb-common/src/main/java/com/xsnb/common/constants/JwtConstants.java similarity index 90% rename from zhn-common/src/main/java/com/zhn/common/constants/JwtConstants.java rename to xsnb-common/src/main/java/com/xsnb/common/constants/JwtConstants.java index e240c98..80afd33 100644 --- a/zhn-common/src/main/java/com/zhn/common/constants/JwtConstants.java +++ b/xsnb-common/src/main/java/com/xsnb/common/constants/JwtConstants.java @@ -1,7 +1,7 @@ -package com.zhn.common.constants; +package com.xsnb.common.constants; /** - * @author zhn + * @author xsnb * @description: Jwt常量 */ public class JwtConstants { diff --git a/xsnb-common/src/main/java/com/xsnb/common/constants/RabbitMQConstants.java b/xsnb-common/src/main/java/com/xsnb/common/constants/RabbitMQConstants.java new file mode 100644 index 0000000..54d6e94 --- /dev/null +++ b/xsnb-common/src/main/java/com/xsnb/common/constants/RabbitMQConstants.java @@ -0,0 +1,11 @@ +package com.xsnb.common.constants; + +/** + * @BelongsProject: Bob_Up_Like_A_Cork + * @BelongsPackage: com.zhn.common.constants + * @Author: zhangquan + * @CreateTime: 2023/8/1 20:11 + */ +public class RabbitMQConstants { + public static final String SEND_SMS_QUEUs = "send_sms_queun"; +} diff --git a/zhn-common/src/main/java/com/zhn/common/constants/TokenConstants.java b/xsnb-common/src/main/java/com/xsnb/common/constants/TokenConstants.java similarity index 90% rename from zhn-common/src/main/java/com/zhn/common/constants/TokenConstants.java rename to xsnb-common/src/main/java/com/xsnb/common/constants/TokenConstants.java index 0add0a0..a3d9e8f 100644 --- a/zhn-common/src/main/java/com/zhn/common/constants/TokenConstants.java +++ b/xsnb-common/src/main/java/com/xsnb/common/constants/TokenConstants.java @@ -1,7 +1,7 @@ -package com.zhn.common.constants; +package com.xsnb.common.constants; /** - * @author zhn + * @author xsnb * @description: 令牌常量 */ public class TokenConstants { diff --git a/xsnb-common/src/main/java/com/xsnb/common/domain/User.java b/xsnb-common/src/main/java/com/xsnb/common/domain/User.java new file mode 100644 index 0000000..fcc6713 --- /dev/null +++ b/xsnb-common/src/main/java/com/xsnb/common/domain/User.java @@ -0,0 +1,22 @@ +package com.xsnb.common.domain; + + +import lombok.Data; + +import java.util.Date; + +@Data +public class User { + + private Integer id; + private String name; + private String phone; + private String email; + private String wx_uid; + private String user_name; + private String user_pass; + private String avatar; + private Date lastLoginTime; + private String balance; + +} diff --git a/zhn-common/src/main/java/com/zhn/common/domain/request/RequestUser.java b/xsnb-common/src/main/java/com/xsnb/common/domain/request/RequestUser.java similarity index 75% rename from zhn-common/src/main/java/com/zhn/common/domain/request/RequestUser.java rename to xsnb-common/src/main/java/com/xsnb/common/domain/request/RequestUser.java index 39050e1..14b1a68 100644 --- a/zhn-common/src/main/java/com/zhn/common/domain/request/RequestUser.java +++ b/xsnb-common/src/main/java/com/xsnb/common/domain/request/RequestUser.java @@ -1,4 +1,4 @@ -package com.zhn.common.domain.request; +package com.xsnb.common.domain.request; import lombok.Data; @@ -14,6 +14,8 @@ public class RequestUser { private String emil; private String lastLoginTime; private String balance; + private String captcha; + private String loginRadio; diff --git a/zhn-common/src/main/java/com/zhn/common/domain/response/RespJwt.java b/xsnb-common/src/main/java/com/xsnb/common/domain/response/RespJwt.java similarity index 79% rename from zhn-common/src/main/java/com/zhn/common/domain/response/RespJwt.java rename to xsnb-common/src/main/java/com/xsnb/common/domain/response/RespJwt.java index 76969c3..7ddb367 100644 --- a/zhn-common/src/main/java/com/zhn/common/domain/response/RespJwt.java +++ b/xsnb-common/src/main/java/com/xsnb/common/domain/response/RespJwt.java @@ -1,10 +1,10 @@ -package com.zhn.common.domain.response; +package com.xsnb.common.domain.response; import lombok.Data; /** * @ClassName:RespJwt - * @author:zhn + * @author:xsnb * @create: 2023-08-03 09:01 * @Description: 用户登录token返回实体类 */ diff --git a/zhn-common/src/main/java/com/zhn/common/domain/response/ResponseUser.java b/xsnb-common/src/main/java/com/xsnb/common/domain/response/ResponseUser.java similarity index 89% rename from zhn-common/src/main/java/com/zhn/common/domain/response/ResponseUser.java rename to xsnb-common/src/main/java/com/xsnb/common/domain/response/ResponseUser.java index 03f7a61..97f21e9 100644 --- a/zhn-common/src/main/java/com/zhn/common/domain/response/ResponseUser.java +++ b/xsnb-common/src/main/java/com/xsnb/common/domain/response/ResponseUser.java @@ -1,4 +1,4 @@ -package com.zhn.common.domain.response; +package com.xsnb.common.domain.response; import lombok.Data; diff --git a/zhn-common/src/main/java/com/zhn/common/result/PageResult.java b/xsnb-common/src/main/java/com/xsnb/common/result/PageResult.java similarity index 93% rename from zhn-common/src/main/java/com/zhn/common/result/PageResult.java rename to xsnb-common/src/main/java/com/xsnb/common/result/PageResult.java index 35768fc..4ba4f68 100644 --- a/zhn-common/src/main/java/com/zhn/common/result/PageResult.java +++ b/xsnb-common/src/main/java/com/xsnb/common/result/PageResult.java @@ -1,4 +1,4 @@ -package com.zhn.common.result; +package com.xsnb.common.result; import lombok.Data; @@ -6,7 +6,7 @@ import java.io.Serializable; import java.util.List; /** - * @author zhn + * @author xsnb * @description: 列表返回结果集 */ @Data diff --git a/zhn-common/src/main/java/com/zhn/common/result/Result.java b/xsnb-common/src/main/java/com/xsnb/common/result/Result.java similarity index 94% rename from zhn-common/src/main/java/com/zhn/common/result/Result.java rename to xsnb-common/src/main/java/com/xsnb/common/result/Result.java index 47f249d..ef956ae 100644 --- a/zhn-common/src/main/java/com/zhn/common/result/Result.java +++ b/xsnb-common/src/main/java/com/xsnb/common/result/Result.java @@ -1,12 +1,12 @@ -package com.zhn.common.result; +package com.xsnb.common.result; -import com.zhn.common.constants.Constants; +import com.xsnb.common.constants.Constants; import lombok.Data; import java.io.Serializable; /** - * @author zhn + * @author xsnb * @description: 响应信息主体 */ @Data diff --git a/zhn-common/src/main/java/com/zhn/common/utils/JwtUtils.java b/xsnb-common/src/main/java/com/xsnb/common/utils/JwtUtils.java similarity index 96% rename from zhn-common/src/main/java/com/zhn/common/utils/JwtUtils.java rename to xsnb-common/src/main/java/com/xsnb/common/utils/JwtUtils.java index b1cd22e..ec89cf4 100644 --- a/zhn-common/src/main/java/com/zhn/common/utils/JwtUtils.java +++ b/xsnb-common/src/main/java/com/xsnb/common/utils/JwtUtils.java @@ -1,6 +1,6 @@ -package com.zhn.common.utils; +package com.xsnb.common.utils; -import com.zhn.common.constants.JwtConstants; +import com.xsnb.common.constants.JwtConstants; import io.jsonwebtoken.Claims; import io.jsonwebtoken.Jwts; import io.jsonwebtoken.SignatureAlgorithm; @@ -9,7 +9,7 @@ import java.util.Map; /** * @description: Jwt工具类 - * @author zhn + * @author xsnb */ public class JwtUtils { diff --git a/zhn-common/src/main/java/com/zhn/common/utils/Msg/HttpUtils.java b/xsnb-common/src/main/java/com/xsnb/common/utils/Msg/HttpUtils.java similarity index 99% rename from zhn-common/src/main/java/com/zhn/common/utils/Msg/HttpUtils.java rename to xsnb-common/src/main/java/com/xsnb/common/utils/Msg/HttpUtils.java index 8a8e974..cb9583e 100644 --- a/zhn-common/src/main/java/com/zhn/common/utils/Msg/HttpUtils.java +++ b/xsnb-common/src/main/java/com/xsnb/common/utils/Msg/HttpUtils.java @@ -1,6 +1,6 @@ -package com.zhn.common.utils.Msg; +package com.xsnb.common.utils.Msg; -import com.zhn.common.utils.StringUtils; +import com.xsnb.common.utils.StringUtils; import org.apache.http.HttpResponse; import org.apache.http.NameValuePair; import org.apache.http.client.HttpClient; diff --git a/zhn-common/src/main/java/com/zhn/common/utils/Msg/MsgUtil.java b/xsnb-common/src/main/java/com/xsnb/common/utils/Msg/MsgUtil.java similarity index 96% rename from zhn-common/src/main/java/com/zhn/common/utils/Msg/MsgUtil.java rename to xsnb-common/src/main/java/com/xsnb/common/utils/Msg/MsgUtil.java index 5b9c4c8..6726eb4 100644 --- a/zhn-common/src/main/java/com/zhn/common/utils/Msg/MsgUtil.java +++ b/xsnb-common/src/main/java/com/xsnb/common/utils/Msg/MsgUtil.java @@ -1,4 +1,4 @@ -package com.zhn.common.utils.Msg; +package com.xsnb.common.utils.Msg; diff --git a/zhn-common/src/main/java/com/zhn/common/utils/OssUtil.java b/xsnb-common/src/main/java/com/xsnb/common/utils/OssUtil.java similarity index 99% rename from zhn-common/src/main/java/com/zhn/common/utils/OssUtil.java rename to xsnb-common/src/main/java/com/xsnb/common/utils/OssUtil.java index 187b6ca..7c4cece 100644 --- a/zhn-common/src/main/java/com/zhn/common/utils/OssUtil.java +++ b/xsnb-common/src/main/java/com/xsnb/common/utils/OssUtil.java @@ -1,4 +1,4 @@ -package com.zhn.common.utils; +package com.xsnb.common.utils; import com.aliyun.oss.OSS; import com.aliyun.oss.OSSClientBuilder; diff --git a/zhn-common/src/main/java/com/zhn/common/utils/StringUtils.java b/xsnb-common/src/main/java/com/xsnb/common/utils/StringUtils.java similarity index 97% rename from zhn-common/src/main/java/com/zhn/common/utils/StringUtils.java rename to xsnb-common/src/main/java/com/xsnb/common/utils/StringUtils.java index c478c79..9b35e5e 100644 --- a/zhn-common/src/main/java/com/zhn/common/utils/StringUtils.java +++ b/xsnb-common/src/main/java/com/xsnb/common/utils/StringUtils.java @@ -1,4 +1,4 @@ -package com.zhn.common.utils; +package com.xsnb.common.utils; import org.springframework.util.AntPathMatcher; @@ -6,7 +6,7 @@ import java.util.Collection; import java.util.List; /** - * @author zhn + * @author xsnb * @description: 字符串处理工具类 */ public class StringUtils extends org.apache.commons.lang3.StringUtils { diff --git a/zhn-common/src/main/java/com/zhn/common/utils/TelSmsUtils.java b/xsnb-common/src/main/java/com/xsnb/common/utils/TelSmsUtils.java similarity index 75% rename from zhn-common/src/main/java/com/zhn/common/utils/TelSmsUtils.java rename to xsnb-common/src/main/java/com/xsnb/common/utils/TelSmsUtils.java index ba898de..bab8bc5 100644 --- a/zhn-common/src/main/java/com/zhn/common/utils/TelSmsUtils.java +++ b/xsnb-common/src/main/java/com/xsnb/common/utils/TelSmsUtils.java @@ -1,4 +1,4 @@ -package com.zhn.common.utils; +package com.xsnb.common.utils; import com.alibaba.fastjson.JSONObject; import com.aliyun.dysmsapi20170525.Client; @@ -18,8 +18,9 @@ public class TelSmsUtils { /** * 阿里云主账号AccessKey,accessKeySecret拥有所有API的访问权限 */ - private static String accessKeyId = "LTAIEVXszCmcd1T5"; - private static String accessKeySecret = "2zHwciQXln8wExSEnkIYtRTSwLeRNd"; + private static String accessKeyId = "LTAI5tHLTV3mgTwB4wzxvkLS"; + private static String accessKeySecret = "jjQt8WSFzSDTvp1TMhRFS8FSyueaQU"; + private static String templateCode = "SMS_154950909"; /** * 短信访问域名 @@ -28,7 +29,7 @@ public class TelSmsUtils { /** * 短信签名 */ - private static String signName = "登录验证"; + private static String signName = "阿里云短信测试"; /** * 实例化短信对象 @@ -40,22 +41,22 @@ public class TelSmsUtils { long startTime = System.currentTimeMillis(); try { client = initClient(); - log.info("初始化短信成功:{}",signName); + log.info("初始化短信成功:{}", signName); } catch (Exception e) { e.printStackTrace(); } - log.info("初始化短信服务结束:耗时:{}MS",(System.currentTimeMillis()-startTime)); + log.info("初始化短信服务结束:耗时:{}MS", (System.currentTimeMillis() - startTime)); } + /** * 初始化短信对象 + * * @return * @throws Exception */ - private static Client initClient() throws Exception{ + private static Client initClient() throws Exception { Config config = new Config() - // 您的AccessKey ID .setAccessKeyId(accessKeyId) - // 您的AccessKey Secret .setAccessKeySecret(accessKeySecret); // 访问的域名 config.endpoint = endpoint; @@ -64,11 +65,11 @@ public class TelSmsUtils { /** * 发送单条短信 + * * @param tel - * @param templateCode SMS_153991546 * @param sendDataMap */ - public static String sendSms(String tel , String templateCode , Map sendDataMap){ + public static String sendSms(String tel, Map sendDataMap) { SendSmsRequest sendSmsRequest = new SendSmsRequest() .setPhoneNumbers(tel) .setSignName(signName) diff --git a/xsnb-common/src/main/java/com/xsnb/common/utils/mqUtile/DLXQueue.java b/xsnb-common/src/main/java/com/xsnb/common/utils/mqUtile/DLXQueue.java new file mode 100644 index 0000000..0ff07eb --- /dev/null +++ b/xsnb-common/src/main/java/com/xsnb/common/utils/mqUtile/DLXQueue.java @@ -0,0 +1,77 @@ +package com.xsnb.common.utils.mqUtile; + +import org.springframework.amqp.core.Binding; +import org.springframework.amqp.core.BindingBuilder; +import org.springframework.amqp.core.DirectExchange; +import org.springframework.amqp.core.Queue; +import org.springframework.amqp.rabbit.core.RabbitAdmin; +import org.springframework.amqp.rabbit.core.RabbitTemplate; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Component; + +import javax.annotation.Resource; +import java.util.HashMap; +import java.util.Map; + +@Component +public class DLXQueue { + // routingKey + private static final String DEAD_ROUTING_KEY = "dead.routingkey"; + private static final String ROUTING_KEY = "routingkey"; + private static final String DEAD_EXCHANGE = "dead.exchange"; + private static final String EXCHANGE = "common.exchange"; + @Autowired + RabbitTemplate rabbitTemplate; + @Resource + RabbitAdmin rabbitAdmin; + + /** + * 发送死信队列,过期后进入死信交换机,进入死信队列 + * + * @param queueName 队列名称 + * @param deadQueueName 死信队列名称 + * @param params 消息内容 + * @param expiration 过期时间 毫秒 + */ + public void sendDLXQueue(String queueName, String deadQueueName, Object params, Integer expiration) { + /** + * ----------------------------------先创建一个ttl队列和死信队列-------------------------------------------- + */ + Map map = new HashMap<>(); + // 队列设置存活时间,单位ms, 必须是整形数据。 + map.put("x-message-ttl", expiration); + // 设置死信交换机 + map.put("x-dead-letter-exchange", DEAD_EXCHANGE); + // 设置死信交换器路由 + map.put("x-dead-letter-routing-key", DEAD_ROUTING_KEY); + /*参数1:队列名称 参数2:持久化 参数3:是否排他 参数4:自动删除队列 参数5:队列参数*/ + Queue queue = new Queue(queueName, true, false, false, map); + rabbitAdmin.declareQueue(queue); + /** + * ---------------------------------创建交换机--------------------------------------------- + */ + DirectExchange directExchange = new DirectExchange(EXCHANGE, true, false); + rabbitAdmin.declareExchange(directExchange); + /** + * ---------------------------------队列绑定交换机--------------------------------------------- + */ + Binding binding = BindingBuilder.bind(queue).to(directExchange).with(ROUTING_KEY); + rabbitAdmin.declareBinding(binding); + /** + * ---------------------------------在创建一个死信交换机和队列,接收死信队列--------------------------------------------- + */ + DirectExchange deadExchange = new DirectExchange(DEAD_EXCHANGE, true, false); + rabbitAdmin.declareExchange(deadExchange); + + Queue deadQueue = new Queue(deadQueueName, true, false, false); + rabbitAdmin.declareQueue(deadQueue); + /** + * ---------------------------------队列绑定死信交换机--------------------------------------------- + */ + // 将队列和交换机绑定 + Binding deadbinding = BindingBuilder.bind(deadQueue).to(deadExchange).with(DEAD_ROUTING_KEY); + rabbitAdmin.declareBinding(deadbinding); + // 发送消息 + rabbitTemplate.convertAndSend(EXCHANGE, ROUTING_KEY, params); + } +} diff --git a/xsnb-common/src/main/java/com/xsnb/common/utils/mqUtile/DelayedQueue.java b/xsnb-common/src/main/java/com/xsnb/common/utils/mqUtile/DelayedQueue.java new file mode 100644 index 0000000..5e97cde --- /dev/null +++ b/xsnb-common/src/main/java/com/xsnb/common/utils/mqUtile/DelayedQueue.java @@ -0,0 +1,79 @@ +package com.xsnb.common.utils.mqUtile; + +import org.springframework.amqp.core.Binding; +import org.springframework.amqp.core.BindingBuilder; +import org.springframework.amqp.core.CustomExchange; +import org.springframework.amqp.core.Queue; +import org.springframework.amqp.rabbit.core.RabbitAdmin; +import org.springframework.amqp.rabbit.core.RabbitTemplate; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Component; + +import javax.annotation.Resource; +import java.util.HashMap; +import java.util.Map; +import java.util.UUID; + +/** + * 发送延迟队列的工具类 + */ +@Component +public class DelayedQueue { + + // routingKey + private static final String DELAYED_ROUTING_KEY = "delayed.routingkey"; + + // 延迟队列交换机 + private static final String DELAYED_EXCHANGE = "delayed.exchange"; + + @Autowired + RabbitTemplate rabbitTemplate; + + @Resource + RabbitAdmin rabbitAdmin; + + /** + * 发送延迟队列 + * + * @param queueName 队列名称 + * @param params 消息内容 + * @param expiration 延迟时间 毫秒 + */ + public void sendDelayedQueue(String queueName, Object params, Integer expiration) { + // 先创建一个队列 + Queue queue = new Queue(queueName); + rabbitAdmin.declareQueue(queue); + + // 创建延迟队列交换机 + CustomExchange customExchange = createCustomExchange(); + rabbitAdmin.declareExchange(customExchange); + + // 将队列和交换机绑定 + Binding binding = BindingBuilder.bind(queue).to(customExchange).with(DELAYED_ROUTING_KEY).noargs(); + rabbitAdmin.declareBinding(binding); + + // 发送延迟消息 + rabbitTemplate.convertAndSend(DELAYED_EXCHANGE, DELAYED_ROUTING_KEY, params, msg -> { + // 发送消息的时候 延迟时长 + msg.getMessageProperties().setMessageId(UUID.randomUUID().toString().replaceAll("-", "")); + msg.getMessageProperties().setDelay(expiration); + return msg; + }); + } + + private CustomExchange createCustomExchange() { + Map arguments = new HashMap<>(); + /** + * 参数说明: + * 1.交换机的名称 + * 2.交换机的类型 + * 3.是否需要持久化 + * 4.是否自动删除 + * 5.其它参数 + */ + arguments.put("x-delayed-type", "direct"); + return new CustomExchange(DELAYED_EXCHANGE, "x-delayed-message", true, false, arguments); + } + +} + diff --git a/xsnb-common/src/main/java/com/xsnb/common/utils/mqUtile/RabbitMQ.java b/xsnb-common/src/main/java/com/xsnb/common/utils/mqUtile/RabbitMQ.java new file mode 100644 index 0000000..bd2448c --- /dev/null +++ b/xsnb-common/src/main/java/com/xsnb/common/utils/mqUtile/RabbitMQ.java @@ -0,0 +1,8 @@ +package com.xsnb.common.utils.mqUtile; + +import lombok.Data; + +@Data +public class RabbitMQ { + public static final String SEND_CODE_QUEUE = "send_code_queue"; +} diff --git a/xsnb-common/src/main/java/com/xsnb/common/utils/mqUtile/TtlQueue.java b/xsnb-common/src/main/java/com/xsnb/common/utils/mqUtile/TtlQueue.java new file mode 100644 index 0000000..54d7025 --- /dev/null +++ b/xsnb-common/src/main/java/com/xsnb/common/utils/mqUtile/TtlQueue.java @@ -0,0 +1,66 @@ +package com.xsnb.common.utils.mqUtile; + +import org.springframework.amqp.core.Binding; +import org.springframework.amqp.core.BindingBuilder; +import org.springframework.amqp.core.DirectExchange; +import org.springframework.amqp.core.Queue; +import org.springframework.amqp.rabbit.core.RabbitAdmin; +import org.springframework.amqp.rabbit.core.RabbitTemplate; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Component; + +import javax.annotation.Resource; +import java.util.HashMap; +import java.util.Map; + +/** + * 发送TTL队列 设置 消息的存活时间 如果超过了存活时间 + * 该条消息还没有被消费 则自动从队列中消息 ,如果配置了死信队列则消息会进入死信队列 + */ +@Component +public class TtlQueue { + // routingKey + private static final String TTL_KEY = "ttl.routingkey"; + private static final String TTL_EXCHANGE = "ttl.exchange"; + + @Autowired + RabbitTemplate rabbitTemplate; + + @Resource + RabbitAdmin rabbitAdmin; + + /** + * 发送TTL队列 + * + * @param queueName 队列名称 + * @param params 消息内容 + * @param expiration 过期时间 毫秒 + */ + public void sendTtlQueue(String queueName, Object params, Integer expiration) { + /** + * ----------------------------------先创建一个ttl队列-------------------------------------------- + */ + Map map = new HashMap<>(); + // 队列设置存活时间,单位ms,必须是整形数据。 + map.put("x-message-ttl", expiration); + /*参数1:队列名称 参数2:持久化 参数3:是否排他 参数4:自动删除队列 参数5:队列参数*/ + Queue queue = new Queue(queueName, true, false, false, map); + rabbitAdmin.declareQueue(queue); + + /** + * ---------------------------------创建交换机--------------------------------------------- + */ + DirectExchange directExchange = new DirectExchange(TTL_EXCHANGE, true, false); + rabbitAdmin.declareExchange(directExchange); + /** + * ---------------------------------队列绑定交换机--------------------------------------------- + */ + // 将队列和交换机绑定 + Binding binding = BindingBuilder.bind(queue).to(directExchange).with(TTL_KEY); + rabbitAdmin.declareBinding(binding); + + // 发送消息 + rabbitTemplate.convertAndSend(TTL_EXCHANGE, TTL_KEY, params); + } +} + diff --git a/zhn-common/src/main/resources/date.txt b/xsnb-common/src/main/resources/date.txt similarity index 100% rename from zhn-common/src/main/resources/date.txt rename to xsnb-common/src/main/resources/date.txt diff --git a/xsnb-gateway/Dockerfile b/xsnb-gateway/Dockerfile new file mode 100644 index 0000000..37ded97 --- /dev/null +++ b/xsnb-gateway/Dockerfile @@ -0,0 +1,15 @@ +# 基础镜像 +FROM openjdk:8-jre +# author +MAINTAINER ex_weilingfeng@163.com + +# 挂载目录 +VOLUME /home/xsnb +# 创建目录 +RUN mkdir -p /home/xsnb +# 指定路径 +WORKDIR /home/xsnb +# 复制jar文件到路径 +COPY xsnb-gateway/target/xsnb-gateway.jar /home/xsnb/xsnb-gateway.jar +# 启动网关服务 +ENTRYPOINT ["java","-jar","xsnb-gateway.jar"] diff --git a/zhn-gateway/pom.xml b/xsnb-gateway/pom.xml similarity index 73% rename from zhn-gateway/pom.xml rename to xsnb-gateway/pom.xml index 8429d15..b08e5d5 100644 --- a/zhn-gateway/pom.xml +++ b/xsnb-gateway/pom.xml @@ -3,19 +3,29 @@ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> - zhn-dev - com.zhn + xsnb-dev + com.xsnb 1.0.0 4.0.0 - zhn-gateway + xsnb-gateway - com.zhn - zhn-common + com.xsnb + xsnb-common + + + com.baomidou + mybatis-plus + + + com.baomidou + mybatis-plus-boot-starter + + diff --git a/zhn-gateway/src/main/java/com/zhn/gateway/GatewayMian.java b/xsnb-gateway/src/main/java/com/xsnb/gateway/GatewayMian.java similarity index 91% rename from zhn-gateway/src/main/java/com/zhn/gateway/GatewayMian.java rename to xsnb-gateway/src/main/java/com/xsnb/gateway/GatewayMian.java index 8752176..99e205a 100644 --- a/zhn-gateway/src/main/java/com/zhn/gateway/GatewayMian.java +++ b/xsnb-gateway/src/main/java/com/xsnb/gateway/GatewayMian.java @@ -1,4 +1,5 @@ -package com.zhn.gateway; +package com.xsnb.gateway; + import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; @@ -6,6 +7,7 @@ import org.springframework.boot.autoconfigure.SpringBootApplication; /** * @author zhang */ + @SpringBootApplication public class GatewayMian { public static void main(String[] args) { diff --git a/zhn-gateway/src/main/java/com/zhn/gateway/config/IgnoreWhiteConfig.java b/xsnb-gateway/src/main/java/com/xsnb/gateway/config/IgnoreWhiteConfig.java similarity index 94% rename from zhn-gateway/src/main/java/com/zhn/gateway/config/IgnoreWhiteConfig.java rename to xsnb-gateway/src/main/java/com/xsnb/gateway/config/IgnoreWhiteConfig.java index 54d7f1f..da647a8 100644 --- a/zhn-gateway/src/main/java/com/zhn/gateway/config/IgnoreWhiteConfig.java +++ b/xsnb-gateway/src/main/java/com/xsnb/gateway/config/IgnoreWhiteConfig.java @@ -1,4 +1,4 @@ -package com.zhn.gateway.config; +package com.xsnb.gateway.config; import com.alibaba.fastjson.JSONObject; import lombok.Data; @@ -12,7 +12,7 @@ import java.util.List; /** * @description: 放行白名单配置 - * @author zhn + * @author xsnb */ @Configuration @RefreshScope diff --git a/xsnb-gateway/src/main/java/com/xsnb/gateway/constants/Constants.java b/xsnb-gateway/src/main/java/com/xsnb/gateway/constants/Constants.java new file mode 100644 index 0000000..f0b59d9 --- /dev/null +++ b/xsnb-gateway/src/main/java/com/xsnb/gateway/constants/Constants.java @@ -0,0 +1,4 @@ +package com.xsnb.gateway.constants; + +public class Constants { +} diff --git a/zhn-gateway/src/main/java/com/zhn/gateway/filters/AuthFilters.java b/xsnb-gateway/src/main/java/com/xsnb/gateway/filters/AuthFilters.java similarity index 88% rename from zhn-gateway/src/main/java/com/zhn/gateway/filters/AuthFilters.java rename to xsnb-gateway/src/main/java/com/xsnb/gateway/filters/AuthFilters.java index a0b50a7..e2d726a 100644 --- a/zhn-gateway/src/main/java/com/zhn/gateway/filters/AuthFilters.java +++ b/xsnb-gateway/src/main/java/com/xsnb/gateway/filters/AuthFilters.java @@ -1,14 +1,14 @@ -package com.zhn.gateway.filters; +package com.xsnb.gateway.filters; import cn.hutool.core.date.DateUnit; import cn.hutool.core.date.DateUtil; import com.alibaba.fastjson.JSONObject; -import com.zhn.common.constants.TokenConstants; -import com.zhn.common.domain.User; -import com.zhn.common.utils.JwtUtils; -import com.zhn.common.utils.StringUtils; -import com.zhn.gateway.config.IgnoreWhiteConfig; -import com.zhn.gateway.utils.GatewayUtils; +import com.xsnb.common.constants.TokenConstants; +import com.xsnb.common.domain.User; +import com.xsnb.common.utils.JwtUtils; +import com.xsnb.common.utils.StringUtils; +import com.xsnb.gateway.config.IgnoreWhiteConfig; +import com.xsnb.gateway.utils.GatewayUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.cloud.gateway.filter.GatewayFilterChain; import org.springframework.cloud.gateway.filter.GlobalFilter; @@ -56,6 +56,7 @@ public class AuthFilters implements GlobalFilter, Ordered { } String jsonStr = redisTemplate.opsForValue().get(TokenConstants.LOGIN_TOKEN_KEY + userKey); User user = JSONObject.parseObject(jsonStr, User.class); + user.setLastLoginTime(new Date()); Date lastLoginTime = user.getLastLoginTime(); long between = DateUtil.between(lastLoginTime, new Date(), DateUnit.MINUTE); if (between >= 10) { diff --git a/zhn-gateway/src/main/java/com/zhn/gateway/utils/GatewayUtils.java b/xsnb-gateway/src/main/java/com/xsnb/gateway/utils/GatewayUtils.java similarity index 96% rename from zhn-gateway/src/main/java/com/zhn/gateway/utils/GatewayUtils.java rename to xsnb-gateway/src/main/java/com/xsnb/gateway/utils/GatewayUtils.java index bfa7346..099059b 100644 --- a/zhn-gateway/src/main/java/com/zhn/gateway/utils/GatewayUtils.java +++ b/xsnb-gateway/src/main/java/com/xsnb/gateway/utils/GatewayUtils.java @@ -1,8 +1,8 @@ -package com.zhn.gateway.utils; +package com.xsnb.gateway.utils; import com.alibaba.fastjson.JSONObject; -import com.zhn.common.result.Result; -import com.zhn.common.utils.StringUtils; +import com.xsnb.common.result.Result; +import com.xsnb.common.utils.StringUtils; import lombok.extern.log4j.Log4j2; import org.springframework.core.io.buffer.DataBuffer; import org.springframework.http.HttpHeaders; @@ -13,7 +13,7 @@ import org.springframework.web.server.ServerWebExchange; import reactor.core.publisher.Mono; /** - * @author zhn + * @author xsnb * @description: 网关处理工具类 */ @Log4j2 diff --git a/zhn-gateway/src/main/resources/bootstrap.yml b/xsnb-gateway/src/main/resources/bootstrap.yml similarity index 85% rename from zhn-gateway/src/main/resources/bootstrap.yml rename to xsnb-gateway/src/main/resources/bootstrap.yml index ea9921e..9bd5ea6 100644 --- a/zhn-gateway/src/main/resources/bootstrap.yml +++ b/xsnb-gateway/src/main/resources/bootstrap.yml @@ -5,7 +5,7 @@ server: spring: application: # 应用名称 - name: zhn-gateway + name: xsnb-gateway profiles: # 环境配置 active: dev @@ -18,10 +18,10 @@ spring: nacos: discovery: # 服务注册地址 - server-addr: 192.168.2.51:8848 + server-addr: 127.0.0.1:8848 config: # 配置中心地址 - server-addr: 192.168.2.51:8848 + server-addr: 127.0.0.1:8848 # 配置文件格式 file-extension: yml # 共享配置 diff --git a/zhn-modules/pom.xml b/xsnb-modules/pom.xml similarity index 71% rename from zhn-modules/pom.xml rename to xsnb-modules/pom.xml index cba07cf..7346441 100644 --- a/zhn-modules/pom.xml +++ b/xsnb-modules/pom.xml @@ -3,17 +3,17 @@ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> - zhn-dev - com.zhn + xsnb-dev + com.xsnb 1.0.0 4.0.0 - zhn-modules + xsnb-modules pom - zhn-system + xsnb-system - \ No newline at end of file + diff --git a/xsnb-modules/xsnb-system/Dockerfile b/xsnb-modules/xsnb-system/Dockerfile new file mode 100644 index 0000000..178916a --- /dev/null +++ b/xsnb-modules/xsnb-system/Dockerfile @@ -0,0 +1,15 @@ +# 基础镜像 +FROM openjdk:8-jre +# author +MAINTAINER ex_weilingfeng + +# 挂载目录 +VOLUME /home/xsnb +# 创建目录 +RUN mkdir -p /home/xsnb +# 指定路径 +WORKDIR /home/xsnb +# 复制jar文件到路径 +COPY xsnb-modules/xsnb-system/target/xsnb-modules-system.jar /home/xsnb/xsnb-modules-system.jar +# 启动系统服务 +ENTRYPOINT ["java","-jar","xsnb-modules-system.jar"] diff --git a/zhn-modules/zhn-system/pom.xml b/xsnb-modules/xsnb-system/pom.xml similarity index 85% rename from zhn-modules/zhn-system/pom.xml rename to xsnb-modules/xsnb-system/pom.xml index b655529..0b49d66 100644 --- a/zhn-modules/zhn-system/pom.xml +++ b/xsnb-modules/xsnb-system/pom.xml @@ -3,19 +3,19 @@ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> - zhn-modules - com.zhn + xsnb-modules + com.xsnb 1.0.0 4.0.0 - zhn-system + xsnb-system - com.zhn - zhn-common + com.xsnb + xsnb-common @@ -77,6 +77,18 @@ org.springframework.boot spring-boot-starter-websocket + + io.minio + minio + 8.5.3 + + + + com.squareup.okhttp3 + okhttp + 4.10.0 + + diff --git a/zhn-modules/zhn-system/src/main/java/com/zhn/system/SystemMian.java b/xsnb-modules/xsnb-system/src/main/java/com/xsnb/system/SystemMian.java similarity index 80% rename from zhn-modules/zhn-system/src/main/java/com/zhn/system/SystemMian.java rename to xsnb-modules/xsnb-system/src/main/java/com/xsnb/system/SystemMian.java index b41b75c..be92bf4 100644 --- a/zhn-modules/zhn-system/src/main/java/com/zhn/system/SystemMian.java +++ b/xsnb-modules/xsnb-system/src/main/java/com/xsnb/system/SystemMian.java @@ -1,5 +1,6 @@ -package com.zhn.system; +package com.xsnb.system; +import org.mybatis.spring.annotation.MapperScan; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.cloud.openfeign.EnableFeignClients; @@ -8,6 +9,7 @@ import org.springframework.scheduling.annotation.EnableScheduling; @SpringBootApplication @EnableFeignClients @EnableScheduling +@MapperScan("com.xsnb.**.mapper") public class SystemMian { public static void main(String[] args) { SpringApplication.run(SystemMian.class, args); diff --git a/xsnb-modules/xsnb-system/src/main/java/com/xsnb/system/config/MailSender.java b/xsnb-modules/xsnb-system/src/main/java/com/xsnb/system/config/MailSender.java new file mode 100644 index 0000000..d12a477 --- /dev/null +++ b/xsnb-modules/xsnb-system/src/main/java/com/xsnb/system/config/MailSender.java @@ -0,0 +1,48 @@ +package com.xsnb.system.config; + +import org.springframework.beans.factory.annotation.Value; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import org.springframework.mail.javamail.JavaMailSender; +import org.springframework.mail.javamail.JavaMailSenderImpl; + +import java.util.Properties; + +/** + * FileName: MailSender + * Author: 张海宁 + * Date: 2024/3/4 14:41 + * Description: + * History: + * + * 作者姓名 修改时间 版本号 描述 + */ +@Configuration +public class MailSender { + @Value("${spring.mail.username}") + private String username; + + @Value("${spring.mail.password}") + private String password; + + @Value("${spring.mail.host}") + private String host; + + @Value("${spring.mail.port}") + private int port; + + @Bean + public JavaMailSender javaMailSender() { + JavaMailSenderImpl mailSender = new JavaMailSenderImpl(); + mailSender.setHost(host); + mailSender.setPort(port); + mailSender.setUsername(username); + mailSender.setPassword(password); + + Properties props = mailSender.getJavaMailProperties(); + props.put("mail.smtp.auth", "true"); + props.put("mail.smtp.starttls.enable", "true"); + + return mailSender; + } +} diff --git a/xsnb-modules/xsnb-system/src/main/java/com/xsnb/system/controller/DomeController.java b/xsnb-modules/xsnb-system/src/main/java/com/xsnb/system/controller/DomeController.java new file mode 100644 index 0000000..6688f98 --- /dev/null +++ b/xsnb-modules/xsnb-system/src/main/java/com/xsnb/system/controller/DomeController.java @@ -0,0 +1,50 @@ +package com.xsnb.system.controller; + +import com.xsnb.common.domain.User; +import com.xsnb.common.result.Result; +import com.xsnb.system.domain.Mail; +import com.xsnb.system.service.MailService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +import java.util.List; + +/** + * FileName: DomeController + * Author: 张海宁 + * Date: 2024/3/4 14:07 + * Description:测试广场 + * History: + * + * 作者姓名 修改时间 版本号 描述 + */ + +@RestController +@RequestMapping("/test") +public class DomeController { + + + @Autowired + MailService mailService; + + + //获取邮件列表 + @PostMapping("/allListMail") + public Result> allListMail(User user){ + return mailService.allListMail(user); + } + //删除邮件,通过传来的邮箱id来删除邮件 + @PostMapping("/deleteMail") + public Result deleteMail(Mail mail){ + return mailService.deleteMail(mail); + } + //添加邮件,通过邮箱实体类来创建邮箱,也就是邮箱发送 + @PostMapping("/addMail") + public Result addMail(Mail mail){ + return mailService.addMail(mail); + } + + +} diff --git a/xsnb-modules/xsnb-system/src/main/java/com/xsnb/system/controller/UserController.java b/xsnb-modules/xsnb-system/src/main/java/com/xsnb/system/controller/UserController.java new file mode 100644 index 0000000..ac1c8ae --- /dev/null +++ b/xsnb-modules/xsnb-system/src/main/java/com/xsnb/system/controller/UserController.java @@ -0,0 +1,32 @@ +package com.xsnb.system.controller; + + +import com.xsnb.common.domain.User; +import com.xsnb.common.result.Result; +import com.xsnb.system.service.UserService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.PathVariable; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + + +@RestController +@RequestMapping("/user") +public class UserController { + + + @Autowired + UserService userService; + + + + @GetMapping("/byphone/{phone}") + Result byphone(@PathVariable String phone){ + + return userService.byphone(phone); + } + + + +} diff --git a/xsnb-modules/xsnb-system/src/main/java/com/xsnb/system/domain/Attachment.java b/xsnb-modules/xsnb-system/src/main/java/com/xsnb/system/domain/Attachment.java new file mode 100644 index 0000000..2b83a96 --- /dev/null +++ b/xsnb-modules/xsnb-system/src/main/java/com/xsnb/system/domain/Attachment.java @@ -0,0 +1,21 @@ +package com.xsnb.system.domain; + +import lombok.Data; + +/** + * FileName: Attachment + * Author: 张海宁 + * Date: 2024/3/4 13:57 + * Description:邮箱抽象类 + * History: + * + * 作者姓名 修改时间 版本号 描述 + */ +@Data +public class Attachment { + /** 文件名称 */ + public String fileName; + /** 文件路径 */ + public String filePath; +} + diff --git a/xsnb-modules/xsnb-system/src/main/java/com/xsnb/system/domain/Mail.java b/xsnb-modules/xsnb-system/src/main/java/com/xsnb/system/domain/Mail.java new file mode 100644 index 0000000..d89c061 --- /dev/null +++ b/xsnb-modules/xsnb-system/src/main/java/com/xsnb/system/domain/Mail.java @@ -0,0 +1,31 @@ +package com.xsnb.system.domain; + +import com.baomidou.mybatisplus.annotation.TableName; +import com.fasterxml.jackson.annotation.JsonFormat; +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; +import lombok.ToString; + +import java.util.Date; + +@Data +@AllArgsConstructor +@NoArgsConstructor +@ToString +@TableName("email") +public class Mail { + + private int id; + private String title; + @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8") + private Date sendTime; + @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8") + private Date readTime; + private String content; + private int attachmentId; + private String emailStatus; + private int userId; + private int recipientId; + +} diff --git a/xsnb-modules/xsnb-system/src/main/java/com/xsnb/system/domain/MinioReturn.java b/xsnb-modules/xsnb-system/src/main/java/com/xsnb/system/domain/MinioReturn.java new file mode 100644 index 0000000..0fef9da --- /dev/null +++ b/xsnb-modules/xsnb-system/src/main/java/com/xsnb/system/domain/MinioReturn.java @@ -0,0 +1,35 @@ +package com.xsnb.system.domain; + +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; + +/** + * FileName: MinioReturn + * Author: 张海宁 + * Date: 2024/3/1 10:30 + * Description: + * History: + * + * 作者姓名 修改时间 版本号 描述 + */ +@Data +@AllArgsConstructor +@NoArgsConstructor +public class MinioReturn { + + /** + * 文件地址 + */ + private String path; + + /** + * 原始文件名 + */ + private String inputName; + + /** + * 最终文件名 + */ + private String outPutName; +} diff --git a/xsnb-modules/xsnb-system/src/main/java/com/xsnb/system/domain/req/ReqMail.java b/xsnb-modules/xsnb-system/src/main/java/com/xsnb/system/domain/req/ReqMail.java new file mode 100644 index 0000000..f3f35a9 --- /dev/null +++ b/xsnb-modules/xsnb-system/src/main/java/com/xsnb/system/domain/req/ReqMail.java @@ -0,0 +1,30 @@ +package com.xsnb.system.domain.req; + +import com.xsnb.system.domain.Attachment; +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; + +import java.io.File; + +/** + * FileName: ReqMail + * Author: 张海宁 + * Date: 2024/3/4 14:16 + * Description: + * History: + * + * 作者姓名 修改时间 版本号 描述 + */ + +@Data +@AllArgsConstructor +@NoArgsConstructor +public class ReqMail { + private String from; + private String to; + private File mailFile; + private String subject; + private String content; + private Attachment attachment; +} diff --git a/xsnb-modules/xsnb-system/src/main/java/com/xsnb/system/mapper/MailMapper.java b/xsnb-modules/xsnb-system/src/main/java/com/xsnb/system/mapper/MailMapper.java new file mode 100644 index 0000000..cab2bcd --- /dev/null +++ b/xsnb-modules/xsnb-system/src/main/java/com/xsnb/system/mapper/MailMapper.java @@ -0,0 +1,7 @@ +package com.xsnb.system.mapper; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.xsnb.system.domain.Mail; + +public interface MailMapper extends BaseMapper { +} diff --git a/xsnb-modules/xsnb-system/src/main/java/com/xsnb/system/mapper/UserMapper.java b/xsnb-modules/xsnb-system/src/main/java/com/xsnb/system/mapper/UserMapper.java new file mode 100644 index 0000000..42facf8 --- /dev/null +++ b/xsnb-modules/xsnb-system/src/main/java/com/xsnb/system/mapper/UserMapper.java @@ -0,0 +1,12 @@ +package com.xsnb.system.mapper; + + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.xsnb.common.domain.User; +import org.apache.ibatis.annotations.Mapper; + +@Mapper +public interface UserMapper extends BaseMapper { + + +} diff --git a/xsnb-modules/xsnb-system/src/main/java/com/xsnb/system/rabbitMQ/MessageConsumerService.java b/xsnb-modules/xsnb-system/src/main/java/com/xsnb/system/rabbitMQ/MessageConsumerService.java new file mode 100644 index 0000000..10037e8 --- /dev/null +++ b/xsnb-modules/xsnb-system/src/main/java/com/xsnb/system/rabbitMQ/MessageConsumerService.java @@ -0,0 +1,60 @@ +package com.xsnb.system.rabbitMQ; + +import cn.hutool.core.util.RandomUtil; +import com.alibaba.fastjson.JSONObject; +import com.aliyun.dysmsapi20170525.models.SendSmsResponseBody; +import com.rabbitmq.client.Channel; +import com.xsnb.common.constants.RabbitMQConstants; +import com.xsnb.common.utils.TelSmsUtils; +import lombok.extern.log4j.Log4j2; +import org.springframework.amqp.core.Message; +import org.springframework.amqp.rabbit.annotation.Queue; +import org.springframework.amqp.rabbit.annotation.RabbitListener; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.data.redis.core.RedisTemplate; +import org.springframework.stereotype.Component; + +import java.util.HashMap; + +@Component +@Log4j2 +public class MessageConsumerService { + + @Autowired + private RedisTemplate redisTemplate; + + + @RabbitListener(queuesToDeclare = {@Queue(RabbitMQConstants.SEND_SMS_QUEUs)}) + public void SmsController(String phone, Message message, Channel channel){ + long s = System.currentTimeMillis(); + String messageId = message.getMessageProperties().getMessageId(); + log.info("短信消费队列开始消费 消息内容:{},开始执行",phone); + try { + Long count = redisTemplate.opsForSet().add(RabbitMQConstants.SEND_SMS_QUEUs, messageId); + if(count==1){ + String code = RandomUtil.randomNumbers(4); + String jsons = TelSmsUtils.sendSms(phone, new HashMap() {{ + put("code",code); + }}); + SendSmsResponseBody sendSmsResponseBody = JSONObject.parseObject(jsons, SendSmsResponseBody.class); + if(!"OK".equals(sendSmsResponseBody.getCode())){ + TelSmsUtils.sendSms(phone,new HashMap(){{ + put("code",code); + }}); + channel.basicAck(message.getMessageProperties().getDeliveryTag(),false); + redisTemplate.opsForValue().set(phone,JSONObject.toJSONString(code)); + log.info("短信消费队列消费成功 用户:{},耗时:{}",phone,System.currentTimeMillis()-s); + } + }else { + log.info("短信重复消费 内容:{}",phone); + } + } catch (Exception e) { + log.info("消息队列消费失败 异常信息 用户:{}, 内容:{}",phone,e.getMessage()); + try { + channel.basicReject(message.getMessageProperties().getDeliveryTag(),true); + } catch (Exception exception) { + log.error("消息队列消费失败 回退信息 用户:{},内容:{}",phone,exception.getMessage()); + } + } + } +} diff --git a/xsnb-modules/xsnb-system/src/main/java/com/xsnb/system/service/MailService.java b/xsnb-modules/xsnb-system/src/main/java/com/xsnb/system/service/MailService.java new file mode 100644 index 0000000..6dac606 --- /dev/null +++ b/xsnb-modules/xsnb-system/src/main/java/com/xsnb/system/service/MailService.java @@ -0,0 +1,25 @@ +package com.xsnb.system.service; + +import com.xsnb.common.domain.User; +import com.xsnb.common.result.Result; +import com.xsnb.system.domain.Mail; + +import java.util.List; + +/** + * FileName: MailService + * Author: 张海宁 + * Date: 2024/3/4 14:18 + * Description: + * History: + * + * 作者姓名 修改时间 版本号 描述 + */ +public interface MailService { + + Result> allListMail(User user); + + Result deleteMail(Mail mail); + + Result addMail(Mail mail); +} diff --git a/xsnb-modules/xsnb-system/src/main/java/com/xsnb/system/service/UserService.java b/xsnb-modules/xsnb-system/src/main/java/com/xsnb/system/service/UserService.java new file mode 100644 index 0000000..2a0d330 --- /dev/null +++ b/xsnb-modules/xsnb-system/src/main/java/com/xsnb/system/service/UserService.java @@ -0,0 +1,10 @@ +package com.xsnb.system.service; + +import com.xsnb.common.domain.User; +import com.xsnb.common.result.Result; + +public interface UserService { + Result byphone(String phone); + + +} diff --git a/xsnb-modules/xsnb-system/src/main/java/com/xsnb/system/service/impl/MailServiceImpl.java b/xsnb-modules/xsnb-system/src/main/java/com/xsnb/system/service/impl/MailServiceImpl.java new file mode 100644 index 0000000..e6e4460 --- /dev/null +++ b/xsnb-modules/xsnb-system/src/main/java/com/xsnb/system/service/impl/MailServiceImpl.java @@ -0,0 +1,61 @@ +package com.xsnb.system.service.impl; + +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.xsnb.common.domain.User; +import com.xsnb.common.result.Result; +import com.xsnb.system.domain.Mail; +import com.xsnb.system.mapper.MailMapper; +import com.xsnb.system.service.MailService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +import java.util.List; + +/** + * FileName: MailServiceImpl + * Author: 张海宁 + * Date: 2024/3/4 14:18 + * Description: + * History: + * + * 作者姓名 修改时间 版本号 描述 + */ +@Service +public class MailServiceImpl implements MailService { + @Autowired + MailMapper mapper; + + + + /** + * @param user + * @return + */ + @Override + public Result> allListMail(User user) { + QueryWrapper qw = new QueryWrapper<>(); + qw.eq("user_id", user.getId()); + List mailList = mapper.selectList(qw); + return Result.success(mailList); + } + + /** + * @param mail + * @return + */ + @Override + public Result deleteMail(Mail mail) { + + return null; + } + + /** + * @param mail + * @return + */ + @Override + public Result addMail(Mail mail) { + return null; + } + +} diff --git a/xsnb-modules/xsnb-system/src/main/java/com/xsnb/system/service/impl/UserServiceImpl.java b/xsnb-modules/xsnb-system/src/main/java/com/xsnb/system/service/impl/UserServiceImpl.java new file mode 100644 index 0000000..7b5e1ee --- /dev/null +++ b/xsnb-modules/xsnb-system/src/main/java/com/xsnb/system/service/impl/UserServiceImpl.java @@ -0,0 +1,27 @@ +package com.xsnb.system.service.impl; + + +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.xsnb.common.domain.User; +import com.xsnb.common.result.Result; +import com.xsnb.system.mapper.UserMapper; +import com.xsnb.system.service.UserService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +@Service +public class UserServiceImpl implements UserService { + @Autowired + UserMapper userMapper; + + @Override + public Result byphone(String phone) { + QueryWrapper queryWrapper = new QueryWrapper<>(); + queryWrapper.eq("phone",phone); + User user = userMapper.selectOne(queryWrapper); + return Result.success(user); + } + + + +} diff --git a/xsnb-modules/xsnb-system/src/main/java/com/xsnb/system/utils/EmailUtils.java b/xsnb-modules/xsnb-system/src/main/java/com/xsnb/system/utils/EmailUtils.java new file mode 100644 index 0000000..f81200a --- /dev/null +++ b/xsnb-modules/xsnb-system/src/main/java/com/xsnb/system/utils/EmailUtils.java @@ -0,0 +1,90 @@ +package com.xsnb.system.utils; + +import com.xsnb.system.domain.Attachment; +import lombok.extern.slf4j.Slf4j; +import org.apache.commons.lang3.ObjectUtils; +import org.springframework.core.io.FileSystemResource; +import org.springframework.mail.javamail.JavaMailSender; +import org.springframework.mail.javamail.MimeMessageHelper; + +import javax.mail.internet.MimeMessage; +import javax.mail.internet.MimeUtility; +import java.io.File; +import java.util.List; + +/** + * FileName: EmailUtils + * Author: 张海宁 + * Date: 2024/3/4 13:53 + * Description:邮箱工具类 + * History: + * + * 作者姓名 修改时间 版本号 描述 + */ +@Slf4j +public class EmailUtils { + + + public static Integer sendMailAttachment(JavaMailSender mailSender, + String fromEmail, + String toEmail, + String subject, + String content, + Attachment attachment) { + MimeMessage message = mailSender.createMimeMessage(); + Integer result = 1; + try { + MimeMessageHelper helper = new MimeMessageHelper(message, true, "UTF-8"); + helper.setFrom(fromEmail); + helper.setTo(toEmail); + helper.setSubject(subject); + helper.setText(content, true); + + if (attachment != null && attachment.getFileName() != null && attachment.getFilePath() != null) { + File destinationFile = new File(attachment.getFilePath()); + FileSystemResource fileResource = new FileSystemResource(destinationFile); + helper.addAttachment(destinationFile.getName(), fileResource); + } + + mailSender.send(message); + log.info("邮件发送成功,收件人地址:" + toEmail); + } catch (Exception e) { + result = 0; + log.error("邮件发送出现异常,收件人地址:" + toEmail, e); + } + return result; + } + + public static Integer sendMailAttachments(JavaMailSender mailSender, String fromEmail, String toEmail, + String subject, String content, List attachments) { + System.setProperty("mail.mime.splitlongparameters", "false"); + MimeMessage message = mailSender.createMimeMessage(); + try { + MimeMessageHelper helper = new MimeMessageHelper(message, true, "UTF-8"); + helper.setFrom(fromEmail); + helper.setTo(toEmail); + helper.setSubject(subject); + helper.setText(content, true); + if (!ObjectUtils.isEmpty(attachments)) { + attachments.forEach((attachment) -> { + try { + FileSystemResource file = new FileSystemResource(attachment.getFilePath()); + helper.addAttachment(MimeUtility. + encodeWord(attachment.getFileName(), + "UTF-8", + "B"), + file); + } catch (Exception e) { + e.printStackTrace(); + } + }); + } + mailSender.send(message); + log.info("邮件发送成功,收件人地址:" + toEmail); + return 1; + } catch (Exception e) { + log.error("邮件发送出现异常,收件人地址:" + toEmail, e); + } + return 0; + } +} diff --git a/xsnb-modules/xsnb-system/src/main/resources/bootstrap.yml b/xsnb-modules/xsnb-system/src/main/resources/bootstrap.yml new file mode 100644 index 0000000..305b9bf --- /dev/null +++ b/xsnb-modules/xsnb-system/src/main/resources/bootstrap.yml @@ -0,0 +1,50 @@ +server: + port: 9002 + +spring: + mail: # 邮件相关配置 + username: xingsnbadmin@xingsnb.cn # 你自己的QQ邮箱的用户名,需要填写你的QQ邮箱地址 + password: drjyrrmzqmjcbhdb # 你自己的QQ邮箱的密钥/密码,需要填写你的QQ邮箱登录密码 + host: smtp.qq.com # SMTP服务器主机名,这里设置为QQ邮箱的SMTP服务器 + port: 465 # SMTP服务器端口,通常情况下使用SSL的SMTP协议使用465端口 + protocol: smtp # 使用SMTP协议发送邮件 + properties: # 邮件相关的属性配置 + mail: # 邮件协议属性配置 + smtp: # SMTP协议属性配置 + ssl: # SSL/TLS属性配置 + enable: true # 启用SSL,表示使用加密传输邮件 + auth: true # 启用SMTP身份验证,需要提供用户名和密码 + starttls: # STARTTLS属性配置,用于在未加密连接上启用TLS + enable: true # 启用STARTTLS + required: true # 要求必须使用STARTTLS + socketFactory: # Socket工厂属性配置,用于SSL连接 + port: 465 # SSL连接的端口,与SMTP服务器的端口一致 + class: javax.net.ssl.SSLSocketFactory # 使用的Socket工厂类,通常用于SSL连接 + main: + allow-bean-definition-overriding: true + allow-circular-references: true + jackson: + date-format: yyyy-MM-dd HH:mm:ss + time-zone: GMT+8 + application: + name: xsnb-system + profiles: + active: dev + cloud: + nacos: + discovery: + server-addr: 127.0.0.1:8848 + config: + server-addr: 127.0.0.1:8848 + file-extension: yml + shared-configs: + - "application-${spring.profiles.active}.${spring.cloud.nacos.config.file-extension}" + rabbitmq: + host: 127.0.0.1 + port: 5672 + username: guest + password: guest + virtualHost: / + listener: + simple: + prefetch: 1 diff --git a/zhn-auth/src/main/java/com/zhn/auth/controller/AuthController.java b/zhn-auth/src/main/java/com/zhn/auth/controller/AuthController.java deleted file mode 100644 index 990ef22..0000000 --- a/zhn-auth/src/main/java/com/zhn/auth/controller/AuthController.java +++ /dev/null @@ -1,32 +0,0 @@ -package com.zhn.auth.controller; - - -import com.zhn.auth.service.AuthService; -import com.zhn.common.domain.User; -import com.zhn.common.domain.request.RequestUser; -import com.zhn.common.domain.response.RespJwt; -import com.zhn.common.result.Result; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.web.bind.annotation.*; - -import javax.servlet.http.HttpServletRequest; - -@RestController -public class AuthController { - @Autowired - AuthService authService; - @PostMapping("/login") - Result login(@RequestBody RequestUser requestUser){ - - return authService.login(requestUser); - } - - - @GetMapping("/user/info") - Result userinfo(HttpServletRequest request){ - return authService.userinfo(request); - - } - - -} diff --git a/zhn-auth/src/main/java/com/zhn/auth/service/AuthService.java b/zhn-auth/src/main/java/com/zhn/auth/service/AuthService.java deleted file mode 100644 index a470a86..0000000 --- a/zhn-auth/src/main/java/com/zhn/auth/service/AuthService.java +++ /dev/null @@ -1,14 +0,0 @@ -package com.zhn.auth.service; - -import com.zhn.common.domain.User; -import com.zhn.common.domain.request.RequestUser; -import com.zhn.common.domain.response.RespJwt; -import com.zhn.common.result.Result; - -import javax.servlet.http.HttpServletRequest; - -public interface AuthService { - Result login(RequestUser requestUser); - - Result userinfo(HttpServletRequest request); -} diff --git a/zhn-auth/src/main/java/com/zhn/auth/service/impl/AuthServiceImpl.java b/zhn-auth/src/main/java/com/zhn/auth/service/impl/AuthServiceImpl.java deleted file mode 100644 index 28054bf..0000000 --- a/zhn-auth/src/main/java/com/zhn/auth/service/impl/AuthServiceImpl.java +++ /dev/null @@ -1,85 +0,0 @@ -package com.zhn.auth.service.impl; - - -import com.alibaba.fastjson.JSONObject; -import com.zhn.auth.feign.AuthFeignSystem; -import com.zhn.auth.service.AuthService; -import com.zhn.common.constants.JwtConstants; -import com.zhn.common.constants.TokenConstants; -import com.zhn.common.domain.User; -import com.zhn.common.domain.request.RequestUser; -import com.zhn.common.domain.response.RespJwt; -import com.zhn.common.result.Result; -import com.zhn.common.utils.JwtUtils; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.data.redis.core.RedisTemplate; -import org.springframework.data.redis.core.TimeoutUtils; -import org.springframework.stereotype.Service; - - -import com.zhn.auth.service.AuthService; - -import javax.servlet.http.HttpServletRequest; -import java.util.HashMap; -import java.util.UUID; -import java.util.concurrent.TimeUnit; - -@Service -public class AuthServiceImpl implements AuthService { - - @Autowired - AuthFeignSystem authFeignSystem; - - @Autowired - RedisTemplate redisTemplate; - - @Override - public Result login(RequestUser requestUser) { - String phone = requestUser.getPhone(); - String password = requestUser.getPassword(); - if (null == phone || null == password) { - return Result.error("联系管理员"); - } - if ("".equals(phone) || "".equals(password)) { - - return Result.error("请输入手机号+密码"); - } - Result byphone = authFeignSystem.byphone(phone); - User data = byphone.getData(); - if (null == data) { - return Result.error("先注册手机号,在登录"); - } - HashMap map = new HashMap<>(); - String userkey = UUID.randomUUID().toString().replaceAll("-", ""); - map.put(JwtConstants.USER_KEY, userkey); - map.put(JwtConstants.DETAILS_USER_ID, data.getId()); - String token = JwtUtils.createToken(map); - redisTemplate.opsForValue().set( - TokenConstants.LOGIN_TOKEN_KEY + userkey, - JSONObject.toJSONString(data), - TokenConstants.EXPIRATION, - TimeUnit.MINUTES - ); - RespJwt respJwt = new RespJwt(); - respJwt.setToken(token); - respJwt.setEidTime("720MIN"); - - return Result.success(respJwt); - } - - /* - * 前台每次请求都会来到这里进行解析user - * - * */ - @Override - public Result userinfo(HttpServletRequest request) { - String token = request.getHeader(TokenConstants.TOKEN); - String userKey = JwtUtils.getUserKey(token); - String s = redisTemplate.opsForValue().get( - TokenConstants.LOGIN_TOKEN_KEY + userKey - ); - User user = JSONObject.parseObject(s, User.class); - return Result.success(user); - } - -} diff --git a/zhn-auth/src/main/resources/bootstrap.yml b/zhn-auth/src/main/resources/bootstrap.yml deleted file mode 100644 index c0dda39..0000000 --- a/zhn-auth/src/main/resources/bootstrap.yml +++ /dev/null @@ -1,31 +0,0 @@ -# Tomcat -server: - port: 9001 -# Spring -spring: - main: - allow-bean-definition-overriding: true - allow-circular-references: true - - jackson: - date-format: yyyy-MM-dd HH:mm:ss - time-zone: GMT+8 - application: - # 应用名称 - name: zhn-auth - profiles: - # 环境配置 - active: dev - cloud: - nacos: - discovery: - # 服务注册地址 - server-addr: 192.168.2.51:8848 - config: - # 配置中心地址 - server-addr: 192.168.2.51:8848 - # 配置文件格式 - file-extension: yml - # 共享配置 - shared-configs: - - application-${spring.profiles.active}.${spring.cloud.nacos.config.file-extension} diff --git a/zhn-auth/src/main/resources/mapper/AuthMapper.xml b/zhn-auth/src/main/resources/mapper/AuthMapper.xml deleted file mode 100644 index 697c9a5..0000000 --- a/zhn-auth/src/main/resources/mapper/AuthMapper.xml +++ /dev/null @@ -1,7 +0,0 @@ - - - - - - - \ No newline at end of file diff --git a/zhn-auth/target/classes/com/zhn/auth/AuthMian.class b/zhn-auth/target/classes/com/zhn/auth/AuthMian.class deleted file mode 100644 index c3c4112..0000000 Binary files a/zhn-auth/target/classes/com/zhn/auth/AuthMian.class and /dev/null differ diff --git a/zhn-auth/target/classes/com/zhn/auth/controller/AuthController.class b/zhn-auth/target/classes/com/zhn/auth/controller/AuthController.class deleted file mode 100644 index 9e0f05e..0000000 Binary files a/zhn-auth/target/classes/com/zhn/auth/controller/AuthController.class and /dev/null differ diff --git a/zhn-auth/target/classes/com/zhn/auth/feign/AuthFeignSystem.class b/zhn-auth/target/classes/com/zhn/auth/feign/AuthFeignSystem.class deleted file mode 100644 index e9d13aa..0000000 Binary files a/zhn-auth/target/classes/com/zhn/auth/feign/AuthFeignSystem.class and /dev/null differ diff --git a/zhn-auth/target/classes/com/zhn/auth/service/AuthService.class b/zhn-auth/target/classes/com/zhn/auth/service/AuthService.class deleted file mode 100644 index ad22348..0000000 Binary files a/zhn-auth/target/classes/com/zhn/auth/service/AuthService.class and /dev/null differ diff --git a/zhn-auth/target/classes/com/zhn/auth/service/impl/AuthServiceImpl.class b/zhn-auth/target/classes/com/zhn/auth/service/impl/AuthServiceImpl.class deleted file mode 100644 index 93f58b5..0000000 Binary files a/zhn-auth/target/classes/com/zhn/auth/service/impl/AuthServiceImpl.class and /dev/null differ diff --git a/zhn-common/src/main/java/com/zhn/common/domain/User.java b/zhn-common/src/main/java/com/zhn/common/domain/User.java deleted file mode 100644 index 2ec948c..0000000 --- a/zhn-common/src/main/java/com/zhn/common/domain/User.java +++ /dev/null @@ -1,22 +0,0 @@ -package com.zhn.common.domain; - -import lombok.Data; - -import java.util.Date; - -@Data -public class User { - - private String id; - private String username; - private String password; - private String tel; - private String name; - private String avatar; - /** - * 最后登录时间 - */ - private Date lastLoginTime; - private String balance; - -} diff --git a/zhn-common/target/classes/com/zhn/common/constants/Constants.class b/zhn-common/target/classes/com/zhn/common/constants/Constants.class deleted file mode 100644 index b7806dd..0000000 Binary files a/zhn-common/target/classes/com/zhn/common/constants/Constants.class and /dev/null differ diff --git a/zhn-common/target/classes/com/zhn/common/constants/JwtConstants.class b/zhn-common/target/classes/com/zhn/common/constants/JwtConstants.class deleted file mode 100644 index d120512..0000000 Binary files a/zhn-common/target/classes/com/zhn/common/constants/JwtConstants.class and /dev/null differ diff --git a/zhn-common/target/classes/com/zhn/common/constants/TokenConstants.class b/zhn-common/target/classes/com/zhn/common/constants/TokenConstants.class deleted file mode 100644 index 1602059..0000000 Binary files a/zhn-common/target/classes/com/zhn/common/constants/TokenConstants.class and /dev/null differ diff --git a/zhn-common/target/classes/com/zhn/common/domain/User.class b/zhn-common/target/classes/com/zhn/common/domain/User.class deleted file mode 100644 index 733a280..0000000 Binary files a/zhn-common/target/classes/com/zhn/common/domain/User.class and /dev/null differ diff --git a/zhn-common/target/classes/com/zhn/common/domain/request/RequestUser.class b/zhn-common/target/classes/com/zhn/common/domain/request/RequestUser.class deleted file mode 100644 index 7e62762..0000000 Binary files a/zhn-common/target/classes/com/zhn/common/domain/request/RequestUser.class and /dev/null differ diff --git a/zhn-common/target/classes/com/zhn/common/domain/response/RespJwt.class b/zhn-common/target/classes/com/zhn/common/domain/response/RespJwt.class deleted file mode 100644 index 9073e00..0000000 Binary files a/zhn-common/target/classes/com/zhn/common/domain/response/RespJwt.class and /dev/null differ diff --git a/zhn-common/target/classes/com/zhn/common/domain/response/ResponseUser.class b/zhn-common/target/classes/com/zhn/common/domain/response/ResponseUser.class deleted file mode 100644 index 8273946..0000000 Binary files a/zhn-common/target/classes/com/zhn/common/domain/response/ResponseUser.class and /dev/null differ diff --git a/zhn-common/target/classes/com/zhn/common/result/PageResult.class b/zhn-common/target/classes/com/zhn/common/result/PageResult.class deleted file mode 100644 index ce69870..0000000 Binary files a/zhn-common/target/classes/com/zhn/common/result/PageResult.class and /dev/null differ diff --git a/zhn-common/target/classes/com/zhn/common/result/Result.class b/zhn-common/target/classes/com/zhn/common/result/Result.class deleted file mode 100644 index 2829784..0000000 Binary files a/zhn-common/target/classes/com/zhn/common/result/Result.class and /dev/null differ diff --git a/zhn-common/target/classes/com/zhn/common/utils/JwtUtils.class b/zhn-common/target/classes/com/zhn/common/utils/JwtUtils.class deleted file mode 100644 index 41fef9d..0000000 Binary files a/zhn-common/target/classes/com/zhn/common/utils/JwtUtils.class and /dev/null differ diff --git a/zhn-common/target/classes/com/zhn/common/utils/Msg/HttpUtils$1.class b/zhn-common/target/classes/com/zhn/common/utils/Msg/HttpUtils$1.class deleted file mode 100644 index 434cde3..0000000 Binary files a/zhn-common/target/classes/com/zhn/common/utils/Msg/HttpUtils$1.class and /dev/null differ diff --git a/zhn-common/target/classes/com/zhn/common/utils/Msg/HttpUtils.class b/zhn-common/target/classes/com/zhn/common/utils/Msg/HttpUtils.class deleted file mode 100644 index 7bba45f..0000000 Binary files a/zhn-common/target/classes/com/zhn/common/utils/Msg/HttpUtils.class and /dev/null differ diff --git a/zhn-common/target/classes/com/zhn/common/utils/Msg/MsgUtil.class b/zhn-common/target/classes/com/zhn/common/utils/Msg/MsgUtil.class deleted file mode 100644 index 751bc8d..0000000 Binary files a/zhn-common/target/classes/com/zhn/common/utils/Msg/MsgUtil.class and /dev/null differ diff --git a/zhn-common/target/classes/com/zhn/common/utils/OssUtil.class b/zhn-common/target/classes/com/zhn/common/utils/OssUtil.class deleted file mode 100644 index d9814db..0000000 Binary files a/zhn-common/target/classes/com/zhn/common/utils/OssUtil.class and /dev/null differ diff --git a/zhn-common/target/classes/com/zhn/common/utils/StringUtils.class b/zhn-common/target/classes/com/zhn/common/utils/StringUtils.class deleted file mode 100644 index f8b57bd..0000000 Binary files a/zhn-common/target/classes/com/zhn/common/utils/StringUtils.class and /dev/null differ diff --git a/zhn-common/target/classes/com/zhn/common/utils/TelSmsUtils.class b/zhn-common/target/classes/com/zhn/common/utils/TelSmsUtils.class deleted file mode 100644 index db6530a..0000000 Binary files a/zhn-common/target/classes/com/zhn/common/utils/TelSmsUtils.class and /dev/null differ diff --git a/zhn-common/target/classes/date.txt b/zhn-common/target/classes/date.txt deleted file mode 100644 index b6760bd..0000000 --- a/zhn-common/target/classes/date.txt +++ /dev/null @@ -1 +0,0 @@ -数据源文件 \ No newline at end of file diff --git a/zhn-gateway/Dockerfile b/zhn-gateway/Dockerfile deleted file mode 100644 index 8f51fc2..0000000 --- a/zhn-gateway/Dockerfile +++ /dev/null @@ -1,15 +0,0 @@ -# 基础镜像 -FROM openjdk:8-jre -# author -MAINTAINER ex_weilingfeng@163.com - -# 挂载目录 -VOLUME /home/zhn -# 创建目录 -RUN mkdir -p /home/zhn -# 指定路径 -WORKDIR /home/zhn -# 复制jar文件到路径 -COPY zhn-gateway/target/zhn-gateway.jar /home/zhn/zhn-gateway.jar -# 启动网关服务 -ENTRYPOINT ["java","-jar","zhn-gateway.jar"] \ No newline at end of file diff --git a/zhn-gateway/src/main/java/com/zhn/gateway/constants/Constants.java b/zhn-gateway/src/main/java/com/zhn/gateway/constants/Constants.java deleted file mode 100644 index 8b1a582..0000000 --- a/zhn-gateway/src/main/java/com/zhn/gateway/constants/Constants.java +++ /dev/null @@ -1,4 +0,0 @@ -package com.zhn.gateway.constants; - -public class Constants { -} diff --git a/zhn-gateway/target/classes/bootstrap.yml b/zhn-gateway/target/classes/bootstrap.yml deleted file mode 100644 index ea9921e..0000000 --- a/zhn-gateway/target/classes/bootstrap.yml +++ /dev/null @@ -1,29 +0,0 @@ -# Tomcat -server: - port: 18080 -# Spring -spring: - application: - # 应用名称 - name: zhn-gateway - profiles: - # 环境配置 - active: dev - main: - # 允许使用循环引用 - allow-circular-references: true - # 允许定义相同的bean对象 去覆盖原有的 - allow-bean-definition-overriding: true - cloud: - nacos: - discovery: - # 服务注册地址 - server-addr: 192.168.2.51:8848 - config: - # 配置中心地址 - server-addr: 192.168.2.51:8848 - # 配置文件格式 - file-extension: yml - # 共享配置 - shared-configs: - - application-${spring.profiles.active}.${spring.cloud.nacos.config.file-extension} diff --git a/zhn-gateway/target/classes/com/zhn/gateway/GatewayMian.class b/zhn-gateway/target/classes/com/zhn/gateway/GatewayMian.class deleted file mode 100644 index 7618151..0000000 Binary files a/zhn-gateway/target/classes/com/zhn/gateway/GatewayMian.class and /dev/null differ diff --git a/zhn-gateway/target/classes/com/zhn/gateway/config/IgnoreWhiteConfig.class b/zhn-gateway/target/classes/com/zhn/gateway/config/IgnoreWhiteConfig.class deleted file mode 100644 index 956d651..0000000 Binary files a/zhn-gateway/target/classes/com/zhn/gateway/config/IgnoreWhiteConfig.class and /dev/null differ diff --git a/zhn-gateway/target/classes/com/zhn/gateway/constants/Constants.class b/zhn-gateway/target/classes/com/zhn/gateway/constants/Constants.class deleted file mode 100644 index e9086f4..0000000 Binary files a/zhn-gateway/target/classes/com/zhn/gateway/constants/Constants.class and /dev/null differ diff --git a/zhn-gateway/target/classes/com/zhn/gateway/filters/AuthFilters.class b/zhn-gateway/target/classes/com/zhn/gateway/filters/AuthFilters.class deleted file mode 100644 index fd617ff..0000000 Binary files a/zhn-gateway/target/classes/com/zhn/gateway/filters/AuthFilters.class and /dev/null differ diff --git a/zhn-gateway/target/classes/com/zhn/gateway/utils/GatewayUtils.class b/zhn-gateway/target/classes/com/zhn/gateway/utils/GatewayUtils.class deleted file mode 100644 index 3e74818..0000000 Binary files a/zhn-gateway/target/classes/com/zhn/gateway/utils/GatewayUtils.class and /dev/null differ diff --git a/zhn-modules/zhn-system/Dockerfile b/zhn-modules/zhn-system/Dockerfile deleted file mode 100644 index 1dc0431..0000000 --- a/zhn-modules/zhn-system/Dockerfile +++ /dev/null @@ -1,15 +0,0 @@ -# 基础镜像 -FROM openjdk:8-jre -# author -MAINTAINER ex_weilingfeng - -# 挂载目录 -VOLUME /home/zhn -# 创建目录 -RUN mkdir -p /home/zhn -# 指定路径 -WORKDIR /home/zhn -# 复制jar文件到路径 -COPY zhn-modules/zhn-system/target/zhn-modules-system.jar /home/zhn/zhn-modules-system.jar -# 启动系统服务 -ENTRYPOINT ["java","-jar","zhn-modules-system.jar"] \ No newline at end of file diff --git a/zhn-modules/zhn-system/src/main/java/com/zhn/system/controller/UserController.java b/zhn-modules/zhn-system/src/main/java/com/zhn/system/controller/UserController.java deleted file mode 100644 index 4e75dc2..0000000 --- a/zhn-modules/zhn-system/src/main/java/com/zhn/system/controller/UserController.java +++ /dev/null @@ -1,42 +0,0 @@ -package com.zhn.system.controller; - - -import com.zhn.common.domain.User; -import com.zhn.common.domain.request.RequestUser; -import com.zhn.common.result.Result; -import com.zhn.system.service.UserService; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.web.bind.annotation.*; - -/** - * 作者:zhn - * \/\n - * 描述:用户控制层 - */ - -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.RestController; - - -@RestController -@RequestMapping("/user") -public class UserController { - - - @Autowired - UserService userService; - @GetMapping("/byphone/{phone}") - Result byphone(@PathVariable String phone){ - - return userService.byphone(phone); - } - - - @PostMapping("/updateUser") - Result updateUser(@RequestBody RequestUser requestUser){ - - return userService.updateUser(requestUser); - } - - -} diff --git a/zhn-modules/zhn-system/src/main/java/com/zhn/system/mapper/UserMapper.java b/zhn-modules/zhn-system/src/main/java/com/zhn/system/mapper/UserMapper.java deleted file mode 100644 index dddf2ef..0000000 --- a/zhn-modules/zhn-system/src/main/java/com/zhn/system/mapper/UserMapper.java +++ /dev/null @@ -1,15 +0,0 @@ -package com.zhn.system.mapper; - - -import com.zhn.common.domain.User; -import com.zhn.common.domain.request.RequestUser; -import org.apache.ibatis.annotations.Mapper; -import org.apache.ibatis.annotations.Param; - -@Mapper -public interface UserMapper { - User byphone(@Param("phone") String phone); - int updatemenoy(RequestUser requestUser); - - -} diff --git a/zhn-modules/zhn-system/src/main/java/com/zhn/system/service/UserService.java b/zhn-modules/zhn-system/src/main/java/com/zhn/system/service/UserService.java deleted file mode 100644 index 3a901ce..0000000 --- a/zhn-modules/zhn-system/src/main/java/com/zhn/system/service/UserService.java +++ /dev/null @@ -1,11 +0,0 @@ -package com.zhn.system.service; - -import com.zhn.common.domain.User; -import com.zhn.common.domain.request.RequestUser; -import com.zhn.common.result.Result; - -public interface UserService { - Result byphone(String phone); - - Result updateUser(RequestUser requestUser); -} diff --git a/zhn-modules/zhn-system/src/main/java/com/zhn/system/service/impl/UserServiceImpl.java b/zhn-modules/zhn-system/src/main/java/com/zhn/system/service/impl/UserServiceImpl.java deleted file mode 100644 index 128a871..0000000 --- a/zhn-modules/zhn-system/src/main/java/com/zhn/system/service/impl/UserServiceImpl.java +++ /dev/null @@ -1,28 +0,0 @@ -package com.zhn.system.service.impl; - - -import com.zhn.common.domain.User; -import com.zhn.common.domain.request.RequestUser; -import com.zhn.common.result.Result; -import com.zhn.system.mapper.UserMapper; -import com.zhn.system.service.UserService; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.stereotype.Service; - -@Service -public class UserServiceImpl implements UserService { - @Autowired - UserMapper userMapper; - - @Override - public Result byphone(String phone) { - User user = userMapper.byphone(phone); - - return Result.success(user); - } - @Override - public Result updateUser(RequestUser requestUser) { - return null; - } - -} diff --git a/zhn-modules/zhn-system/src/main/resources/bootstrap.yml b/zhn-modules/zhn-system/src/main/resources/bootstrap.yml deleted file mode 100644 index 2ea14ff..0000000 --- a/zhn-modules/zhn-system/src/main/resources/bootstrap.yml +++ /dev/null @@ -1,42 +0,0 @@ -server: - port: 9002 - -spring: - main: - allow-bean-definition-overriding: true - allow-circular-references: true - jackson: - date-format: yyyy-MM-dd HH:mm:ss - time-zone: GMT+8 - application: - name: zhn-system - profiles: - active: dev - cloud: - nacos: - discovery: - server-addr: 192.168.2.51:8848 - config: - server-addr: 192.168.2.51:8848 - file-extension: yml - shared-configs: - - "application-${spring.profiles.active}.${spring.cloud.nacos.config.file-extension}" - rabbitmq: - host: 124.222.164.80 - port: 5672 - username: guest - password: guest - virtualHost: / - listener: - simple: - prefetch: 1 - acknowledge-mode: manual - retry: - enabled: true - publisher-confirm-type: correlated - publisher-returns: true - -es: - host: 124.222.164.80 - port: 9200 - scheme: http diff --git a/zhn-modules/zhn-system/src/main/resources/mappers/UserMapper.xml b/zhn-modules/zhn-system/src/main/resources/mappers/UserMapper.xml deleted file mode 100644 index 6b5cbc5..0000000 --- a/zhn-modules/zhn-system/src/main/resources/mappers/UserMapper.xml +++ /dev/null @@ -1,22 +0,0 @@ - - - - - update user - set balance = #{balance} - where username = #{username}; - - - - - - select * - from user - - - and phone =#{phone} - - - - - diff --git a/zhn-modules/zhn-system/target/classes/bootstrap.yml b/zhn-modules/zhn-system/target/classes/bootstrap.yml deleted file mode 100644 index 2ea14ff..0000000 --- a/zhn-modules/zhn-system/target/classes/bootstrap.yml +++ /dev/null @@ -1,42 +0,0 @@ -server: - port: 9002 - -spring: - main: - allow-bean-definition-overriding: true - allow-circular-references: true - jackson: - date-format: yyyy-MM-dd HH:mm:ss - time-zone: GMT+8 - application: - name: zhn-system - profiles: - active: dev - cloud: - nacos: - discovery: - server-addr: 192.168.2.51:8848 - config: - server-addr: 192.168.2.51:8848 - file-extension: yml - shared-configs: - - "application-${spring.profiles.active}.${spring.cloud.nacos.config.file-extension}" - rabbitmq: - host: 124.222.164.80 - port: 5672 - username: guest - password: guest - virtualHost: / - listener: - simple: - prefetch: 1 - acknowledge-mode: manual - retry: - enabled: true - publisher-confirm-type: correlated - publisher-returns: true - -es: - host: 124.222.164.80 - port: 9200 - scheme: http diff --git a/zhn-modules/zhn-system/target/classes/com/zhn/system/SystemMian.class b/zhn-modules/zhn-system/target/classes/com/zhn/system/SystemMian.class deleted file mode 100644 index 6111c4a..0000000 Binary files a/zhn-modules/zhn-system/target/classes/com/zhn/system/SystemMian.class and /dev/null differ diff --git a/zhn-modules/zhn-system/target/classes/com/zhn/system/controller/UserController.class b/zhn-modules/zhn-system/target/classes/com/zhn/system/controller/UserController.class deleted file mode 100644 index 1f00ce5..0000000 Binary files a/zhn-modules/zhn-system/target/classes/com/zhn/system/controller/UserController.class and /dev/null differ diff --git a/zhn-modules/zhn-system/target/classes/com/zhn/system/mapper/UserMapper.class b/zhn-modules/zhn-system/target/classes/com/zhn/system/mapper/UserMapper.class deleted file mode 100644 index 8e09d51..0000000 Binary files a/zhn-modules/zhn-system/target/classes/com/zhn/system/mapper/UserMapper.class and /dev/null differ diff --git a/zhn-modules/zhn-system/target/classes/com/zhn/system/service/UserService.class b/zhn-modules/zhn-system/target/classes/com/zhn/system/service/UserService.class deleted file mode 100644 index b326d5a..0000000 Binary files a/zhn-modules/zhn-system/target/classes/com/zhn/system/service/UserService.class and /dev/null differ diff --git a/zhn-modules/zhn-system/target/classes/com/zhn/system/service/impl/UserServiceImpl.class b/zhn-modules/zhn-system/target/classes/com/zhn/system/service/impl/UserServiceImpl.class deleted file mode 100644 index 80be7e2..0000000 Binary files a/zhn-modules/zhn-system/target/classes/com/zhn/system/service/impl/UserServiceImpl.class and /dev/null differ diff --git a/zhn-modules/zhn-system/target/classes/mappers/UserMapper.xml b/zhn-modules/zhn-system/target/classes/mappers/UserMapper.xml deleted file mode 100644 index 6b5cbc5..0000000 --- a/zhn-modules/zhn-system/target/classes/mappers/UserMapper.xml +++ /dev/null @@ -1,22 +0,0 @@ - - - - - update user - set balance = #{balance} - where username = #{username}; - - - - - - select * - from user - - - and phone =#{phone} - - - - - diff --git a/zhn-vue-ui/.editorconfig b/zhn-vue-ui/.editorconfig deleted file mode 100644 index ea6e20f..0000000 --- a/zhn-vue-ui/.editorconfig +++ /dev/null @@ -1,14 +0,0 @@ -# http://editorconfig.org -root = true - -[*] -charset = utf-8 -indent_style = space -indent_size = 2 -end_of_line = lf -insert_final_newline = true -trim_trailing_whitespace = true - -[*.md] -insert_final_newline = false -trim_trailing_whitespace = false diff --git a/zhn-vue-ui/.env.development b/zhn-vue-ui/.env.development deleted file mode 100644 index de583d0..0000000 --- a/zhn-vue-ui/.env.development +++ /dev/null @@ -1,5 +0,0 @@ -# just a flag -ENV = 'development' - -# base api -VUE_APP_BASE_API = '/dev-api' diff --git a/zhn-vue-ui/.env.production b/zhn-vue-ui/.env.production deleted file mode 100644 index 80c8103..0000000 --- a/zhn-vue-ui/.env.production +++ /dev/null @@ -1,6 +0,0 @@ -# just a flag -ENV = 'production' - -# base api -VUE_APP_BASE_API = '/prod-api' - diff --git a/zhn-vue-ui/.env.staging b/zhn-vue-ui/.env.staging deleted file mode 100644 index a8793a0..0000000 --- a/zhn-vue-ui/.env.staging +++ /dev/null @@ -1,8 +0,0 @@ -NODE_ENV = production - -# just a flag -ENV = 'staging' - -# base api -VUE_APP_BASE_API = '/stage-api' - diff --git a/zhn-vue-ui/.eslintignore b/zhn-vue-ui/.eslintignore deleted file mode 100644 index 36d5749..0000000 --- a/zhn-vue-ui/.eslintignore +++ /dev/null @@ -1,5 +0,0 @@ -build/*.js -src/assets -public -dist -* diff --git a/zhn-vue-ui/.eslintrc.js b/zhn-vue-ui/.eslintrc.js deleted file mode 100644 index c977505..0000000 --- a/zhn-vue-ui/.eslintrc.js +++ /dev/null @@ -1,198 +0,0 @@ -module.exports = { - root: true, - parserOptions: { - parser: 'babel-eslint', - sourceType: 'module' - }, - env: { - browser: true, - node: true, - es6: true, - }, - extends: ['plugin:vue/recommended', 'eslint:recommended'], - - // add your custom rules here - //it is base on https://github.com/vuejs/eslint-config-vue - rules: { - "vue/max-attributes-per-line": [2, { - "singleline": 10, - "multiline": { - "max": 1, - "allowFirstLine": false - } - }], - "vue/singleline-html-element-content-newline": "off", - "vue/multiline-html-element-content-newline":"off", - "vue/name-property-casing": ["error", "PascalCase"], - "vue/no-v-html": "off", - 'accessor-pairs': 2, - 'arrow-spacing': [2, { - 'before': true, - 'after': true - }], - 'block-spacing': [2, 'always'], - 'brace-style': [2, '1tbs', { - 'allowSingleLine': true - }], - 'camelcase': [0, { - 'properties': 'always' - }], - 'comma-dangle': [2, 'never'], - 'comma-spacing': [2, { - 'before': false, - 'after': true - }], - 'comma-style': [2, 'last'], - 'constructor-super': 2, - 'curly': [2, 'multi-line'], - 'dot-location': [2, 'property'], - 'eol-last': 2, - 'eqeqeq': ["error", "always", {"null": "ignore"}], - 'generator-star-spacing': [2, { - 'before': true, - 'after': true - }], - 'handle-callback-err': [2, '^(err|error)$'], - 'indent': [2, 2, { - 'SwitchCase': 1 - }], - 'jsx-quotes': [2, 'prefer-single'], - 'key-spacing': [2, { - 'beforeColon': false, - 'afterColon': true - }], - 'keyword-spacing': [2, { - 'before': true, - 'after': true - }], - 'new-cap': [2, { - 'newIsCap': true, - 'capIsNew': false - }], - 'new-parens': 2, - 'no-array-constructor': 2, - 'no-caller': 2, - 'no-console': 'off', - 'no-class-assign': 2, - 'no-cond-assign': 2, - 'no-const-assign': 2, - 'no-control-regex': 0, - 'no-delete-var': 2, - 'no-dupe-args': 2, - 'no-dupe-class-members': 2, - 'no-dupe-keys': 2, - 'no-duplicate-case': 2, - 'no-empty-character-class': 2, - 'no-empty-pattern': 2, - 'no-eval': 2, - 'no-ex-assign': 2, - 'no-extend-native': 2, - 'no-extra-bind': 2, - 'no-extra-boolean-cast': 2, - 'no-extra-parens': [2, 'functions'], - 'no-fallthrough': 2, - 'no-floating-decimal': 2, - 'no-func-assign': 2, - 'no-implied-eval': 2, - 'no-inner-declarations': [2, 'functions'], - 'no-invalid-regexp': 2, - 'no-irregular-whitespace': 2, - 'no-iterator': 2, - 'no-label-var': 2, - 'no-labels': [2, { - 'allowLoop': false, - 'allowSwitch': false - }], - 'no-lone-blocks': 2, - 'no-mixed-spaces-and-tabs': 2, - 'no-multi-spaces': 2, - 'no-multi-str': 2, - 'no-multiple-empty-lines': [2, { - 'max': 1 - }], - 'no-native-reassign': 2, - 'no-negated-in-lhs': 2, - 'no-new-object': 2, - 'no-new-require': 2, - 'no-new-symbol': 2, - 'no-new-wrappers': 2, - 'no-obj-calls': 2, - 'no-octal': 2, - 'no-octal-escape': 2, - 'no-path-concat': 2, - 'no-proto': 2, - 'no-redeclare': 2, - 'no-regex-spaces': 2, - 'no-return-assign': [2, 'except-parens'], - 'no-self-assign': 2, - 'no-self-compare': 2, - 'no-sequences': 2, - 'no-shadow-restricted-names': 2, - 'no-spaced-func': 2, - 'no-sparse-arrays': 2, - 'no-this-before-super': 2, - 'no-throw-literal': 2, - 'no-trailing-spaces': 2, - 'no-undef': 2, - 'no-undef-init': 2, - 'no-unexpected-multiline': 2, - 'no-unmodified-loop-condition': 2, - 'no-unneeded-ternary': [2, { - 'defaultAssignment': false - }], - 'no-unreachable': 2, - 'no-unsafe-finally': 2, - 'no-unused-vars': [2, { - 'vars': 'all', - 'args': 'none' - }], - 'no-useless-call': 2, - 'no-useless-computed-key': 2, - 'no-useless-constructor': 2, - 'no-useless-escape': 0, - 'no-whitespace-before-property': 2, - 'no-with': 2, - 'one-var': [2, { - 'initialized': 'never' - }], - 'operator-linebreak': [2, 'after', { - 'overrides': { - '?': 'before', - ':': 'before' - } - }], - 'padded-blocks': [2, 'never'], - 'quotes': [2, 'single', { - 'avoidEscape': true, - 'allowTemplateLiterals': true - }], - 'semi': [2, 'never'], - 'semi-spacing': [2, { - 'before': false, - 'after': true - }], - 'space-before-blocks': [2, 'always'], - 'space-before-function-paren': [2, 'never'], - 'space-in-parens': [2, 'never'], - 'space-infix-ops': 2, - 'space-unary-ops': [2, { - 'words': true, - 'nonwords': false - }], - 'spaced-comment': [2, 'always', { - 'markers': ['global', 'globals', 'eslint', 'eslint-disable', '*package', '!', ','] - }], - 'template-curly-spacing': [2, 'never'], - 'use-isnan': 2, - 'valid-typeof': 2, - 'wrap-iife': [2, 'any'], - 'yield-star-spacing': [2, 'both'], - 'yoda': [2, 'never'], - 'prefer-const': 2, - 'no-debugger': process.env.NODE_ENV === 'production' ? 2 : 0, - 'object-curly-spacing': [2, 'always', { - objectsInObjects: false - }], - 'array-bracket-spacing': [2, 'never'] - } -} diff --git a/zhn-vue-ui/.gitignore b/zhn-vue-ui/.gitignore deleted file mode 100644 index 9ad28d2..0000000 --- a/zhn-vue-ui/.gitignore +++ /dev/null @@ -1,16 +0,0 @@ -.DS_Store -node_modules/ -dist/ -npm-debug.log* -yarn-debug.log* -yarn-error.log* -package-lock.json -tests/**/coverage/ - -# Editor directories and files -.idea -.vscode -*.suo -*.ntvs* -*.njsproj -*.sln diff --git a/zhn-vue-ui/.travis.yml b/zhn-vue-ui/.travis.yml deleted file mode 100644 index f4be7a0..0000000 --- a/zhn-vue-ui/.travis.yml +++ /dev/null @@ -1,5 +0,0 @@ -language: node_js -node_js: 10 -script: npm run test -notifications: - email: false diff --git a/zhn-vue-ui/LICENSE b/zhn-vue-ui/LICENSE deleted file mode 100644 index 6151575..0000000 --- a/zhn-vue-ui/LICENSE +++ /dev/null @@ -1,21 +0,0 @@ -MIT License - -Copyright (c) 2017-present PanJiaChen - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. diff --git a/zhn-vue-ui/README-zh.md b/zhn-vue-ui/README-zh.md deleted file mode 100644 index 1beec9b..0000000 --- a/zhn-vue-ui/README-zh.md +++ /dev/null @@ -1,111 +0,0 @@ -# vue-admin-template - -> 这是一个极简的 vue admin 管理后台。它只包含了 Element UI & axios & iconfont & permission control & lint,这些搭建后台必要的东西。 - -[线上地址](http://panjiachen.github.io/vue-admin-template) - -[国内访问](https://panjiachen.gitee.io/vue-admin-template) - -目前版本为 `v4.0+` 基于 `vue-cli` 进行构建,若你想使用旧版本,可以切换分支到[tag/3.11.0](https://github.com/PanJiaChen/vue-admin-template/tree/tag/3.11.0),它不依赖 `vue-cli`。 - - - SPONSORED BY - - - - - - - -## Extra - -如果你想要根据用户角色来动态生成侧边栏和 router,你可以使用该分支[permission-control](https://github.com/PanJiaChen/vue-admin-template/tree/permission-control) - -## 相关项目 - -- [vue-element-admin](https://github.com/PanJiaChen/vue-element-admin) - -- [electron-vue-admin](https://github.com/PanJiaChen/electron-vue-admin) - -- [vue-typescript-admin-template](https://github.com/Armour/vue-typescript-admin-template) - -- [awesome-project](https://github.com/PanJiaChen/vue-element-admin/issues/2312) - -写了一个系列的教程配套文章,如何从零构建后一个完整的后台项目: - -- [手摸手,带你用 vue 撸后台 系列一(基础篇)](https://juejin.im/post/59097cd7a22b9d0065fb61d2) -- [手摸手,带你用 vue 撸后台 系列二(登录权限篇)](https://juejin.im/post/591aa14f570c35006961acac) -- [手摸手,带你用 vue 撸后台 系列三 (实战篇)](https://juejin.im/post/593121aa0ce4630057f70d35) -- [手摸手,带你用 vue 撸后台 系列四(vueAdmin 一个极简的后台基础模板,专门针对本项目的文章,算作是一篇文档)](https://juejin.im/post/595b4d776fb9a06bbe7dba56) -- [手摸手,带你封装一个 vue component](https://segmentfault.com/a/1190000009090836) - -## Build Setup - -```bash -# 克隆项目 -git clone https://github.com/PanJiaChen/vue-admin-template.git - -# 进入项目目录 -cd vue-admin-template - -# 安装依赖 -npm install - -# 建议不要直接使用 cnpm 安装以来,会有各种诡异的 bug。可以通过如下操作解决 npm 下载速度慢的问题 -npm install --registry=https://registry.npm.taobao.org - -# 启动服务 -npm run dev -``` - -浏览器访问 [http://localhost:9528](http://localhost:9528) - -## 发布 - -```bash -# 构建测试环境 -npm run build:stage - -# 构建生产环境 -npm run build:prod -``` - -## 其它 - -```bash -# 预览发布环境效果 -npm run preview - -# 预览发布环境效果 + 静态资源分析 -npm run preview -- --report - -# 代码格式检查 -npm run lint - -# 代码格式检查并自动修复 -npm run lint -- --fix -``` - -更多信息请参考 [使用文档](https://panjiachen.github.io/vue-element-admin-site/zh/) - -## 购买贴纸 - -你也可以通过 购买[官方授权的贴纸](https://smallsticker.com/product/vue-element-admin) 的方式来支持 vue-element-admin - 每售出一张贴纸,我们将获得 2 元的捐赠。 - -## Demo - - - -## Browsers support - -Modern browsers and Internet Explorer 10+. - -| [](http://godban.github.io/browsers-support-badges/)IE / Edge | [](http://godban.github.io/browsers-support-badges/)Firefox | [](http://godban.github.io/browsers-support-badges/)Chrome | [](http://godban.github.io/browsers-support-badges/)Safari | -| --------- | --------- | --------- | --------- | -| IE10, IE11, Edge| last 2 versions| last 2 versions| last 2 versions - -## License - -[MIT](https://github.com/PanJiaChen/vue-admin-template/blob/master/LICENSE) license. - -Copyright (c) 2017-present PanJiaChen diff --git a/zhn-vue-ui/README.md b/zhn-vue-ui/README.md deleted file mode 100644 index fa54b78..0000000 --- a/zhn-vue-ui/README.md +++ /dev/null @@ -1,99 +0,0 @@ -# vue-admin-template - -English | [简体中文](./README-zh.md) - -> A minimal vue admin template with Element UI & axios & iconfont & permission control & lint - -**Live demo:** http://panjiachen.github.io/vue-admin-template - - -**The current version is `v4.0+` build on `vue-cli`. If you want to use the old version , you can switch branch to [tag/3.11.0](https://github.com/PanJiaChen/vue-admin-template/tree/tag/3.11.0), it does not rely on `vue-cli`** - - - SPONSORED BY - - - - - - - -## Build Setup - -```bash -# clone the project -git clone https://github.com/PanJiaChen/vue-admin-template.git - -# enter the project directory -cd vue-admin-template - -# install dependency -npm install - -# develop -npm run dev -``` - -This will automatically open http://localhost:9528 - -## Build - -```bash -# build for test environment -npm run build:stage - -# build for production environment -npm run build:prod -``` - -## Advanced - -```bash -# preview the release environment effect -npm run preview - -# preview the release environment effect + static resource analysis -npm run preview -- --report - -# code format check -npm run lint - -# code format check and auto fix -npm run lint -- --fix -``` - -Refer to [Documentation](https://panjiachen.github.io/vue-element-admin-site/guide/essentials/deploy.html) for more information - -## Demo - - - -## Extra - -If you want router permission && generate menu by user roles , you can use this branch [permission-control](https://github.com/PanJiaChen/vue-admin-template/tree/permission-control) - -For `typescript` version, you can use [vue-typescript-admin-template](https://github.com/Armour/vue-typescript-admin-template) (Credits: [@Armour](https://github.com/Armour)) - -## Related Project - -- [vue-element-admin](https://github.com/PanJiaChen/vue-element-admin) - -- [electron-vue-admin](https://github.com/PanJiaChen/electron-vue-admin) - -- [vue-typescript-admin-template](https://github.com/Armour/vue-typescript-admin-template) - -- [awesome-project](https://github.com/PanJiaChen/vue-element-admin/issues/2312) - -## Browsers support - -Modern browsers and Internet Explorer 10+. - -| [](http://godban.github.io/browsers-support-badges/)IE / Edge | [](http://godban.github.io/browsers-support-badges/)Firefox | [](http://godban.github.io/browsers-support-badges/)Chrome | [](http://godban.github.io/browsers-support-badges/)Safari | -| --------- | --------- | --------- | --------- | -| IE10, IE11, Edge| last 2 versions| last 2 versions| last 2 versions - -## License - -[MIT](https://github.com/PanJiaChen/vue-admin-template/blob/master/LICENSE) license. - -Copyright (c) 2017-present PanJiaChen diff --git a/zhn-vue-ui/babel.config.js b/zhn-vue-ui/babel.config.js deleted file mode 100644 index fb82b27..0000000 --- a/zhn-vue-ui/babel.config.js +++ /dev/null @@ -1,14 +0,0 @@ -module.exports = { - presets: [ - // https://github.com/vuejs/vue-cli/tree/master/packages/@vue/babel-preset-app - '@vue/cli-plugin-babel/preset' - ], - 'env': { - 'development': { - // babel-plugin-dynamic-import-node plugin only does one thing by converting all import() to require(). - // This plugin can significantly increase the speed of hot updates, when you have a large number of pages. - // https://panjiachen.github.io/vue-element-admin-site/guide/advanced/lazy-loading.html - 'plugins': ['dynamic-import-node'] - } - } -} diff --git a/zhn-vue-ui/build/index.js b/zhn-vue-ui/build/index.js deleted file mode 100644 index 0c57de2..0000000 --- a/zhn-vue-ui/build/index.js +++ /dev/null @@ -1,35 +0,0 @@ -const { run } = require('runjs') -const chalk = require('chalk') -const config = require('../vue.config.js') -const rawArgv = process.argv.slice(2) -const args = rawArgv.join(' ') - -if (process.env.npm_config_preview || rawArgv.includes('--preview')) { - const report = rawArgv.includes('--report') - - run(`vue-cli-service build ${args}`) - - const port = 9526 - const publicPath = config.publicPath - - var connect = require('connect') - var serveStatic = require('serve-static') - const app = connect() - - app.use( - publicPath, - serveStatic('./dist', { - index: ['index.html', '/'] - }) - ) - - app.listen(port, function () { - console.log(chalk.green(`> Preview at http://localhost:${port}${publicPath}`)) - if (report) { - console.log(chalk.green(`> Report at http://localhost:${port}${publicPath}report.html`)) - } - - }) -} else { - run(`vue-cli-service build ${args}`) -} diff --git a/zhn-vue-ui/jest.config.js b/zhn-vue-ui/jest.config.js deleted file mode 100644 index 143cdc8..0000000 --- a/zhn-vue-ui/jest.config.js +++ /dev/null @@ -1,24 +0,0 @@ -module.exports = { - moduleFileExtensions: ['js', 'jsx', 'json', 'vue'], - transform: { - '^.+\\.vue$': 'vue-jest', - '.+\\.(css|styl|less|sass|scss|svg|png|jpg|ttf|woff|woff2)$': - 'jest-transform-stub', - '^.+\\.jsx?$': 'babel-jest' - }, - moduleNameMapper: { - '^@/(.*)$': '/src/$1' - }, - snapshotSerializers: ['jest-serializer-vue'], - testMatch: [ - '**/tests/unit/**/*.spec.(js|jsx|ts|tsx)|**/__tests__/*.(js|jsx|ts|tsx)' - ], - collectCoverageFrom: ['src/utils/**/*.{js,vue}', '!src/utils/auth.js', '!src/utils/request.js', 'src/components/**/*.{js,vue}'], - coverageDirectory: '/tests/unit/coverage', - // 'collectCoverage': true, - 'coverageReporters': [ - 'lcov', - 'text-summary' - ], - testURL: 'http://localhost/' -} diff --git a/zhn-vue-ui/jsconfig.json b/zhn-vue-ui/jsconfig.json deleted file mode 100644 index ed079e2..0000000 --- a/zhn-vue-ui/jsconfig.json +++ /dev/null @@ -1,9 +0,0 @@ -{ - "compilerOptions": { - "baseUrl": "./", - "paths": { - "@/*": ["src/*"] - } - }, - "exclude": ["node_modules", "dist"] -} diff --git a/zhn-vue-ui/package.json b/zhn-vue-ui/package.json deleted file mode 100644 index 2413824..0000000 --- a/zhn-vue-ui/package.json +++ /dev/null @@ -1,62 +0,0 @@ -{ - "name": "vue-admin-template", - "version": "4.4.0", - "description": "A vue admin template with Element UI & axios & iconfont & permission control & lint", - "author": "Pan ", - "scripts": { - "dev": "vue-cli-service serve", - "build:prod": "vue-cli-service build", - "build:stage": "vue-cli-service build --mode staging", - "preview": "node build/index.js --preview", - "svgo": "svgo -f src/icons/svg --config=src/icons/svgo.yml", - "lint": "eslint --ext .js,.vue src", - "test:unit": "jest --clearCache && vue-cli-service test:unit", - "test:ci": "npm run lint && npm run test:unit" - }, - "dependencies": { - "axios": "0.18.1", - "core-js": "3.6.5", - "element-ui": "2.13.2", - "js-cookie": "2.2.0", - "normalize.css": "7.0.0", - "nprogress": "0.2.0", - "path-to-regexp": "2.4.0", - "vue": "2.6.10", - "vue-router": "3.0.6", - "vuex": "3.1.0" - }, - "devDependencies": { - "@vue/cli-plugin-babel": "4.4.4", - "@vue/cli-plugin-eslint": "4.4.4", - "@vue/cli-plugin-unit-jest": "4.4.4", - "@vue/cli-service": "4.4.4", - "@vue/test-utils": "1.0.0-beta.29", - "autoprefixer": "9.5.1", - "babel-eslint": "10.1.0", - "babel-jest": "23.6.0", - "babel-plugin-dynamic-import-node": "2.3.3", - "chalk": "2.4.2", - "connect": "3.6.6", - "eslint": "6.7.2", - "eslint-plugin-vue": "6.2.2", - "html-webpack-plugin": "3.2.0", - "mockjs": "1.0.1-beta3", - "runjs": "4.3.2", - "sass": "1.26.8", - "sass-loader": "8.0.2", - "script-ext-html-webpack-plugin": "2.1.3", - "serve-static": "1.13.2", - "svg-sprite-loader": "4.1.3", - "svgo": "1.2.2", - "vue-template-compiler": "2.6.10" - }, - "browserslist": [ - "> 1%", - "last 2 versions" - ], - "engines": { - "node": ">=8.9", - "npm": ">= 3.0.0" - }, - "license": "MIT" -} diff --git a/zhn-vue-ui/postcss.config.js b/zhn-vue-ui/postcss.config.js deleted file mode 100644 index 10473ef..0000000 --- a/zhn-vue-ui/postcss.config.js +++ /dev/null @@ -1,8 +0,0 @@ -// https://github.com/michael-ciniawsky/postcss-load-config - -module.exports = { - 'plugins': { - // to edit target browsers: use "browserslist" field in package.json - 'autoprefixer': {} - } -} diff --git a/zhn-vue-ui/public/favicon.ico b/zhn-vue-ui/public/favicon.ico deleted file mode 100644 index 34b63ac..0000000 Binary files a/zhn-vue-ui/public/favicon.ico and /dev/null differ diff --git a/zhn-vue-ui/public/index.html b/zhn-vue-ui/public/index.html deleted file mode 100644 index fa2be91..0000000 --- a/zhn-vue-ui/public/index.html +++ /dev/null @@ -1,17 +0,0 @@ - - - - - - - - <%= webpackConfig.name %> - - - - We're sorry but <%= webpackConfig.name %> doesn't work properly without JavaScript enabled. Please enable it to continue. - - - - - diff --git a/zhn-vue-ui/src/App.vue b/zhn-vue-ui/src/App.vue deleted file mode 100644 index ec9032c..0000000 --- a/zhn-vue-ui/src/App.vue +++ /dev/null @@ -1,11 +0,0 @@ - - - - - - - diff --git a/zhn-vue-ui/src/api/table.js b/zhn-vue-ui/src/api/table.js deleted file mode 100644 index 2752f52..0000000 --- a/zhn-vue-ui/src/api/table.js +++ /dev/null @@ -1,9 +0,0 @@ -import request from '@/utils/request' - -export function getList(params) { - return request({ - url: '/vue-admin-template/table/list', - method: 'get', - params - }) -} diff --git a/zhn-vue-ui/src/api/user.js b/zhn-vue-ui/src/api/user.js deleted file mode 100644 index b4d4434..0000000 --- a/zhn-vue-ui/src/api/user.js +++ /dev/null @@ -1,24 +0,0 @@ -import request from '@/utils/request' - -export function login(data) { - return request({ - url: '/login', - method: 'post', - data - }) -} - -export function getInfo(token) { - return request({ - url: '/auth/user/info', - method: 'get', - params: { token } - }) -} - -export function logout() { - return request({ - url: '/auth/user/logout', - method: 'post' - }) -} diff --git a/zhn-vue-ui/src/assets/404_images/404.png b/zhn-vue-ui/src/assets/404_images/404.png deleted file mode 100644 index 3d8e230..0000000 Binary files a/zhn-vue-ui/src/assets/404_images/404.png and /dev/null differ diff --git a/zhn-vue-ui/src/assets/404_images/404_cloud.png b/zhn-vue-ui/src/assets/404_images/404_cloud.png deleted file mode 100644 index c6281d0..0000000 Binary files a/zhn-vue-ui/src/assets/404_images/404_cloud.png and /dev/null differ diff --git a/zhn-vue-ui/src/components/Breadcrumb/index.vue b/zhn-vue-ui/src/components/Breadcrumb/index.vue deleted file mode 100644 index 29f9a04..0000000 --- a/zhn-vue-ui/src/components/Breadcrumb/index.vue +++ /dev/null @@ -1,78 +0,0 @@ - - - - - {{ item.meta.title }} - {{ item.meta.title }} - - - - - - - - diff --git a/zhn-vue-ui/src/components/Hamburger/index.vue b/zhn-vue-ui/src/components/Hamburger/index.vue deleted file mode 100644 index 368b002..0000000 --- a/zhn-vue-ui/src/components/Hamburger/index.vue +++ /dev/null @@ -1,44 +0,0 @@ - - - - - - - - - - - diff --git a/zhn-vue-ui/src/components/SvgIcon/index.vue b/zhn-vue-ui/src/components/SvgIcon/index.vue deleted file mode 100644 index b07ded2..0000000 --- a/zhn-vue-ui/src/components/SvgIcon/index.vue +++ /dev/null @@ -1,62 +0,0 @@ - - - - - - - - - - diff --git a/zhn-vue-ui/src/icons/index.js b/zhn-vue-ui/src/icons/index.js deleted file mode 100644 index 2c6b309..0000000 --- a/zhn-vue-ui/src/icons/index.js +++ /dev/null @@ -1,9 +0,0 @@ -import Vue from 'vue' -import SvgIcon from '@/components/SvgIcon'// svg component - -// register globally -Vue.component('svg-icon', SvgIcon) - -const req = require.context('./svg', false, /\.svg$/) -const requireAll = requireContext => requireContext.keys().map(requireContext) -requireAll(req) diff --git a/zhn-vue-ui/src/icons/svg/dashboard.svg b/zhn-vue-ui/src/icons/svg/dashboard.svg deleted file mode 100644 index 5317d37..0000000 --- a/zhn-vue-ui/src/icons/svg/dashboard.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/zhn-vue-ui/src/icons/svg/example.svg b/zhn-vue-ui/src/icons/svg/example.svg deleted file mode 100644 index 46f42b5..0000000 --- a/zhn-vue-ui/src/icons/svg/example.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/zhn-vue-ui/src/icons/svg/eye-open.svg b/zhn-vue-ui/src/icons/svg/eye-open.svg deleted file mode 100644 index 88dcc98..0000000 --- a/zhn-vue-ui/src/icons/svg/eye-open.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/zhn-vue-ui/src/icons/svg/eye.svg b/zhn-vue-ui/src/icons/svg/eye.svg deleted file mode 100644 index 16ed2d8..0000000 --- a/zhn-vue-ui/src/icons/svg/eye.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/zhn-vue-ui/src/icons/svg/form.svg b/zhn-vue-ui/src/icons/svg/form.svg deleted file mode 100644 index dcbaa18..0000000 --- a/zhn-vue-ui/src/icons/svg/form.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/zhn-vue-ui/src/icons/svg/link.svg b/zhn-vue-ui/src/icons/svg/link.svg deleted file mode 100644 index 48197ba..0000000 --- a/zhn-vue-ui/src/icons/svg/link.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/zhn-vue-ui/src/icons/svg/nested.svg b/zhn-vue-ui/src/icons/svg/nested.svg deleted file mode 100644 index 06713a8..0000000 --- a/zhn-vue-ui/src/icons/svg/nested.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/zhn-vue-ui/src/icons/svg/password.svg b/zhn-vue-ui/src/icons/svg/password.svg deleted file mode 100644 index e291d85..0000000 --- a/zhn-vue-ui/src/icons/svg/password.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/zhn-vue-ui/src/icons/svg/table.svg b/zhn-vue-ui/src/icons/svg/table.svg deleted file mode 100644 index 0e3dc9d..0000000 --- a/zhn-vue-ui/src/icons/svg/table.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/zhn-vue-ui/src/icons/svg/tree.svg b/zhn-vue-ui/src/icons/svg/tree.svg deleted file mode 100644 index dd4b7dd..0000000 --- a/zhn-vue-ui/src/icons/svg/tree.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/zhn-vue-ui/src/icons/svg/user.svg b/zhn-vue-ui/src/icons/svg/user.svg deleted file mode 100644 index 0ba0716..0000000 --- a/zhn-vue-ui/src/icons/svg/user.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/zhn-vue-ui/src/icons/svgo.yml b/zhn-vue-ui/src/icons/svgo.yml deleted file mode 100644 index d11906a..0000000 --- a/zhn-vue-ui/src/icons/svgo.yml +++ /dev/null @@ -1,22 +0,0 @@ -# replace default config - -# multipass: true -# full: true - -plugins: - - # - name - # - # or: - # - name: false - # - name: true - # - # or: - # - name: - # param1: 1 - # param2: 2 - -- removeAttrs: - attrs: - - 'fill' - - 'fill-rule' diff --git a/zhn-vue-ui/src/layout/components/AppMain.vue b/zhn-vue-ui/src/layout/components/AppMain.vue deleted file mode 100644 index f6a3286..0000000 --- a/zhn-vue-ui/src/layout/components/AppMain.vue +++ /dev/null @@ -1,40 +0,0 @@ - - - - - - - - - - - - - diff --git a/zhn-vue-ui/src/layout/components/Navbar.vue b/zhn-vue-ui/src/layout/components/Navbar.vue deleted file mode 100644 index 2d7c925..0000000 --- a/zhn-vue-ui/src/layout/components/Navbar.vue +++ /dev/null @@ -1,136 +0,0 @@ - - - - - - - - - - - - - - - - 主页 - - - - Log Out - - - - - - - - - - diff --git a/zhn-vue-ui/src/layout/components/Sidebar/FixiOSBug.js b/zhn-vue-ui/src/layout/components/Sidebar/FixiOSBug.js deleted file mode 100644 index bc14856..0000000 --- a/zhn-vue-ui/src/layout/components/Sidebar/FixiOSBug.js +++ /dev/null @@ -1,26 +0,0 @@ -export default { - computed: { - device() { - return this.$store.state.app.device - } - }, - mounted() { - // In order to fix the click on menu on the ios device will trigger the mouseleave bug - // https://github.com/PanJiaChen/vue-element-admin/issues/1135 - this.fixBugIniOS() - }, - methods: { - fixBugIniOS() { - const $subMenu = this.$refs.subMenu - if ($subMenu) { - const handleMouseleave = $subMenu.handleMouseleave - $subMenu.handleMouseleave = (e) => { - if (this.device === 'mobile') { - return - } - handleMouseleave(e) - } - } - } - } -} diff --git a/zhn-vue-ui/src/layout/components/Sidebar/Item.vue b/zhn-vue-ui/src/layout/components/Sidebar/Item.vue deleted file mode 100644 index eacd224..0000000 --- a/zhn-vue-ui/src/layout/components/Sidebar/Item.vue +++ /dev/null @@ -1,42 +0,0 @@ - - - - diff --git a/zhn-vue-ui/src/layout/components/Sidebar/Link.vue b/zhn-vue-ui/src/layout/components/Sidebar/Link.vue deleted file mode 100644 index 81a90a5..0000000 --- a/zhn-vue-ui/src/layout/components/Sidebar/Link.vue +++ /dev/null @@ -1,44 +0,0 @@ - - - - - - - - diff --git a/zhn-vue-ui/src/layout/components/Sidebar/Logo.vue b/zhn-vue-ui/src/layout/components/Sidebar/Logo.vue deleted file mode 100644 index 9a4ef26..0000000 --- a/zhn-vue-ui/src/layout/components/Sidebar/Logo.vue +++ /dev/null @@ -1,82 +0,0 @@ - - - - - - {{ title }} - - - - {{ title }} - - - - - - - - diff --git a/zhn-vue-ui/src/layout/components/Sidebar/SidebarItem.vue b/zhn-vue-ui/src/layout/components/Sidebar/SidebarItem.vue deleted file mode 100644 index 1c082bb..0000000 --- a/zhn-vue-ui/src/layout/components/Sidebar/SidebarItem.vue +++ /dev/null @@ -1,95 +0,0 @@ - - - - - - - - - - - - - - - - - - - - diff --git a/zhn-vue-ui/src/layout/components/Sidebar/index.vue b/zhn-vue-ui/src/layout/components/Sidebar/index.vue deleted file mode 100644 index db74ac8..0000000 --- a/zhn-vue-ui/src/layout/components/Sidebar/index.vue +++ /dev/null @@ -1,57 +0,0 @@ - - - - - - - - - - - - - diff --git a/zhn-vue-ui/src/layout/components/index.js b/zhn-vue-ui/src/layout/components/index.js deleted file mode 100644 index 97ee3cd..0000000 --- a/zhn-vue-ui/src/layout/components/index.js +++ /dev/null @@ -1,3 +0,0 @@ -export { default as Navbar } from './Navbar' -export { default as Sidebar } from './Sidebar' -export { default as AppMain } from './AppMain' diff --git a/zhn-vue-ui/src/layout/index.vue b/zhn-vue-ui/src/layout/index.vue deleted file mode 100644 index efef63e..0000000 --- a/zhn-vue-ui/src/layout/index.vue +++ /dev/null @@ -1,102 +0,0 @@ - - - - - - - - - - - - - - - - diff --git a/zhn-vue-ui/src/layout/mixin/ResizeHandler.js b/zhn-vue-ui/src/layout/mixin/ResizeHandler.js deleted file mode 100644 index e8d0df8..0000000 --- a/zhn-vue-ui/src/layout/mixin/ResizeHandler.js +++ /dev/null @@ -1,45 +0,0 @@ -import store from '@/store' - -const { body } = document -const WIDTH = 992 // refer to Bootstrap's responsive design - -export default { - watch: { - $route(route) { - if (this.device === 'mobile' && this.sidebar.opened) { - store.dispatch('app/closeSideBar', { withoutAnimation: false }) - } - } - }, - beforeMount() { - window.addEventListener('resize', this.$_resizeHandler) - }, - beforeDestroy() { - window.removeEventListener('resize', this.$_resizeHandler) - }, - mounted() { - const isMobile = this.$_isMobile() - if (isMobile) { - store.dispatch('app/toggleDevice', 'mobile') - store.dispatch('app/closeSideBar', { withoutAnimation: true }) - } - }, - methods: { - // use $_ for mixins properties - // https://vuejs.org/v2/style-guide/index.html#Private-property-names-essential - $_isMobile() { - const rect = body.getBoundingClientRect() - return rect.width - 1 < WIDTH - }, - $_resizeHandler() { - if (!document.hidden) { - const isMobile = this.$_isMobile() - store.dispatch('app/toggleDevice', isMobile ? 'mobile' : 'desktop') - - if (isMobile) { - store.dispatch('app/closeSideBar', { withoutAnimation: true }) - } - } - } - } -} diff --git a/zhn-vue-ui/src/main.js b/zhn-vue-ui/src/main.js deleted file mode 100644 index 7a1bf73..0000000 --- a/zhn-vue-ui/src/main.js +++ /dev/null @@ -1,42 +0,0 @@ -import Vue from 'vue' - -import 'normalize.css/normalize.css' // A modern alternative to CSS resets - -import ElementUI from 'element-ui' -import 'element-ui/lib/theme-chalk/index.css' -import locale from 'element-ui/lib/locale/lang/en' // lang i18n - -import '@/styles/index.scss' // global css - -import App from './App' -import store from './store' -import router from './router' - -import '@/icons' // icon -import '@/permission' // permission control - -/** - 如果您不想使用模拟服务器 - 你想使用 MockJs 作为模拟 API - 你可以执行: mockXHR() - 目前 MockJs 将在生产环境中使用, - 请在上线前将其删除 ! ! ! - */ -if (process.env.NODE_ENV === 'production') { - const { mockXHR } = require('../mock') - mockXHR() -} - -// set ElementUI lang to EN -Vue.use(ElementUI, { locale }) -// 如果想要中文版 element-ui,按如下方式声明 -// Vue.use(ElementUI) -//生产提示 -Vue.config.productionTip = false - -new Vue({ - el: '#app', - router, - store, - render: h => h(App) -}) diff --git a/zhn-vue-ui/src/permission.js b/zhn-vue-ui/src/permission.js deleted file mode 100644 index e5fbcbe..0000000 --- a/zhn-vue-ui/src/permission.js +++ /dev/null @@ -1,67 +0,0 @@ -import router from './router' -import store from './store' -import { Message } from 'element-ui' -import NProgress from 'nprogress' // progress bar -import 'nprogress/nprogress.css' // progress bar style -import { getToken } from '@/utils/auth' // get token from cookie -import getPageTitle from '@/utils/get-page-title' - -NProgress.configure({ showSpinner: false }) // NProgress Configuration - -const whiteList = ['/login'] // 无重定向白名单 - -router.beforeEach(async(to, from, next) => { - // start progress bar - NProgress.start() - - // set page title - document.title = getPageTitle(to.meta.title) - - // determine whether the user has logged in - const hasToken = getToken() - -// 判断是否有 token - if (!hasToken) { - if (whiteList.includes(to.path)) { - // 白名单中的路由直接访问 - next() - } else { - // 其他路由跳转到登录页面 - next(`/login?redirect=${to.path}`) - NProgress.done() - } - return - } - - // 判断是否已经登录 - if (to.path === '/login') { - // 如果已经登录,重定向到首页 - next({ path: '/' }) - NProgress.done() - return - } - - // 判断是否已经获取用户信息 - const hasGetUserInfo = store.getters.name - if (hasGetUserInfo) { - next() - } else { - try { - // 获取用户信息 - await store.dispatch('user/getInfo') - next() - } catch (error) { - // 如果获取用户信息失败,删除 token 并跳转到登录页面 - await store.dispatch('user/resetToken') - Message.error(error || 'Has Error') - next(`/login?redirect=${to.path}`) - NProgress.done() - } - } -}) - - -router.afterEach(() => { - // finish progress bar - NProgress.done() -}) diff --git a/zhn-vue-ui/src/router/index.js b/zhn-vue-ui/src/router/index.js deleted file mode 100644 index cfe6032..0000000 --- a/zhn-vue-ui/src/router/index.js +++ /dev/null @@ -1,103 +0,0 @@ -//引用vue -import Vue from 'vue' -//引用路由器 -import Router from 'vue-router' -//Router注册到vue中使用 -Vue.use(Router) - -/* Layout */ -import Layout from '@/layout' -//常量路线 -export const constantRoutes = [ - { - path: '/login', - component: () => import('@/views/login/index'), - hidden: true - }, - - { - path: '/404', - component: () => import('@/views/404'), - hidden: true - }, - - { - path: '/', - component: Layout, - redirect: '/dashboard', - children: [{ - path: 'dashboard', - name: 'Dashboard', - component: () => import('@/views/dashboard/index'), - meta: { - title: '首页', - icon: 'dashboard', - guest: true - } - }] - }, - -/* { - path: '/example', - component: Layout, - redirect: '/example/table', - name: 'Example', - meta: { - title: '沭云管理平台', - icon: 'el-icon-s-help', - guest: true - }, - children: [ - { - path: 'e-commerce', - name: 'E-commerce', - component: () => import('@/views/e-commerce/index'), - meta: { - title: '电商系统', - icon: 'e-commerce', - guest: true - } - }, - { - path: 'loan', - name: 'Loan', - component: () => import('@/views/loan/index'), - meta: { - title: '贷款系统', - icon: 'loan', - guest: true - } - }, - { - path: '/interest-calculation', - name: 'Interest-calculation', - component: () => import('@/views/loan/interest-calculation'), - meta: { - title: '利率界面', - icon: 'interest-calculation', - guest: true - } - } - ] - },*/ - // 404 page must be placed at the end !!! - { path: '*', redirect: '/404', hidden: true } -] -//创建路由器 -const createRouter = () => new Router({ - //模式:“历史记录”, - // 需要服务支持 - scrollBehavior: () => ({ y: 0 }), - routes: constantRoutes -}) - -//一处创建多处引用 -const router = createRouter() - -// 重置路由器 -export function resetRouter() { - const newRouter = createRouter() - router.matcher = newRouter.matcher -} - -export default router diff --git a/zhn-vue-ui/src/settings.js b/zhn-vue-ui/src/settings.js deleted file mode 100644 index 3842c5c..0000000 --- a/zhn-vue-ui/src/settings.js +++ /dev/null @@ -1,16 +0,0 @@ -module.exports = { - - title: 'Vue Admin Template', - - /** - * @type {boolean} true | false - * @description Whether fix the header - */ - fixedHeader: false, - - /** - * @type {boolean} true | false - * @description Whether show the logo in sidebar - */ - sidebarLogo: true -} diff --git a/zhn-vue-ui/src/store/getters.js b/zhn-vue-ui/src/store/getters.js deleted file mode 100644 index 8cbd54c..0000000 --- a/zhn-vue-ui/src/store/getters.js +++ /dev/null @@ -1,11 +0,0 @@ -const getters = { - sidebar: state => state.app.sidebar, - device: state => state.app.device, - token: state => state.user.token, - name: state => state.user.name, - avatar: state => state.user.avatar, - phone: state => state.user.phone, - emil: state => state.user.emil - -} -export default getters diff --git a/zhn-vue-ui/src/store/index.js b/zhn-vue-ui/src/store/index.js deleted file mode 100644 index 6be466a..0000000 --- a/zhn-vue-ui/src/store/index.js +++ /dev/null @@ -1,19 +0,0 @@ -import Vue from 'vue' -import Vuex from 'vuex' -import getters from './getters' -import app from './modules/app' -import settings from './modules/settings' -import user from './modules/user' - -Vue.use(Vuex) - -const store = new Vuex.Store({ - modules: { - app, - settings, - user - }, - getters -}) - -export default store diff --git a/zhn-vue-ui/src/store/modules/app.js b/zhn-vue-ui/src/store/modules/app.js deleted file mode 100644 index 7ea7e33..0000000 --- a/zhn-vue-ui/src/store/modules/app.js +++ /dev/null @@ -1,48 +0,0 @@ -import Cookies from 'js-cookie' - -const state = { - sidebar: { - opened: Cookies.get('sidebarStatus') ? !!+Cookies.get('sidebarStatus') : true, - withoutAnimation: false - }, - device: 'desktop' -} - -const mutations = { - TOGGLE_SIDEBAR: state => { - state.sidebar.opened = !state.sidebar.opened - state.sidebar.withoutAnimation = false - if (state.sidebar.opened) { - Cookies.set('sidebarStatus', 1) - } else { - Cookies.set('sidebarStatus', 0) - } - }, - CLOSE_SIDEBAR: (state, withoutAnimation) => { - Cookies.set('sidebarStatus', 0) - state.sidebar.opened = false - state.sidebar.withoutAnimation = withoutAnimation - }, - TOGGLE_DEVICE: (state, device) => { - state.device = device - } -} - -const actions = { - toggleSideBar({ commit }) { - commit('TOGGLE_SIDEBAR') - }, - closeSideBar({ commit }, { withoutAnimation }) { - commit('CLOSE_SIDEBAR', withoutAnimation) - }, - toggleDevice({ commit }, device) { - commit('TOGGLE_DEVICE', device) - } -} - -export default { - namespaced: true, - state, - mutations, - actions -} diff --git a/zhn-vue-ui/src/store/modules/settings.js b/zhn-vue-ui/src/store/modules/settings.js deleted file mode 100644 index b3f33f8..0000000 --- a/zhn-vue-ui/src/store/modules/settings.js +++ /dev/null @@ -1,32 +0,0 @@ -import defaultSettings from '@/settings' - -const { showSettings, fixedHeader, sidebarLogo } = defaultSettings - -const state = { - showSettings: showSettings, - fixedHeader: fixedHeader, - sidebarLogo: sidebarLogo -} - -const mutations = { - CHANGE_SETTING: (state, { key, value }) => { - // eslint-disable-next-line no-prototype-builtins - if (state.hasOwnProperty(key)) { - state[key] = value - } - } -} - -const actions = { - changeSetting({ commit }, data) { - commit('CHANGE_SETTING', data) - } -} - -export default { - namespaced: true, - state, - mutations, - actions -} - diff --git a/zhn-vue-ui/src/store/modules/user.js b/zhn-vue-ui/src/store/modules/user.js deleted file mode 100644 index 5bb71dc..0000000 --- a/zhn-vue-ui/src/store/modules/user.js +++ /dev/null @@ -1,101 +0,0 @@ -import { login, logout, getInfo } from '@/api/user' -import { getToken, setToken, removeToken } from '@/utils/auth' -import { resetRouter } from '@/router' - -const getDefaultState = () => { - return { - token: getToken(), - name: '', - phone: '', - emil: '', - avatar: '' - } -} - -const state = getDefaultState() - -const mutations = { - RESET_STATE: (state) => { - Object.assign(state, getDefaultState()) - }, - SET_TOKEN: (state, token) => { - state.token = token - }, - SET_NAME: (state, name) => { - state.name = name - }, - SET_AVATAR: (state, avatar) => { - state.avatar = avatar - }, - SET_EMIL: (state, emil)=>{ - state.emil =emil - }, - SET_PHONE: (state, phone)=>{ - state.phone =phone - } -} - -const actions = { - // user login - login({ commit }, userInfo) { - const { phone, password } = userInfo - return new Promise((resolve, reject) => { - login({ phone: phone.trim(), password: password }).then(response => { - const { data } = response - commit('SET_TOKEN', data.token) - setToken(data.token) - resolve() - }).catch(error => { - reject(error) - }) - }) - }, - - // get user info - getInfo({ commit, state }) { - return new Promise((resolve, reject) => { - getInfo(state.token).then(response => { - const { data } = response - if (!data) { - return reject('验证失败,请重新登录.') - } - const { name, avatar ,phone,emil} = data - commit('SET_NAME', name) - commit('SET_AVATAR', avatar) - commit('SET_PHONE', phone) - commit('SET_EMIL', emil) - resolve(data) - }).catch(error => { - reject(error) - }) - }) - }, - - // 用户注销 - logout({ commit, state }) { - return new Promise((resolve, reject) => { - removeToken() - resetRouter() - console.log("删除") - commit('RESET_STATE') - resolve() - }) - }, - - // remove token - resetToken({ commit }) { - return new Promise(resolve => { - removeToken() // must remove token first - commit('RESET_STATE') - resolve() - }) - } -} - -export default { - namespaced: true, - state, - mutations, - actions -} - diff --git a/zhn-vue-ui/src/styles/element-ui.scss b/zhn-vue-ui/src/styles/element-ui.scss deleted file mode 100644 index 0062411..0000000 --- a/zhn-vue-ui/src/styles/element-ui.scss +++ /dev/null @@ -1,49 +0,0 @@ -// cover some element-ui styles - -.el-breadcrumb__inner, -.el-breadcrumb__inner a { - font-weight: 400 !important; -} - -.el-upload { - input[type="file"] { - display: none !important; - } -} - -.el-upload__input { - display: none; -} - - -// to fixed https://github.com/ElemeFE/element/issues/2461 -.el-dialog { - transform: none; - left: 0; - position: relative; - margin: 0 auto; -} - -// refine element ui upload -.upload-container { - .el-upload { - width: 100%; - - .el-upload-dragger { - width: 100%; - height: 200px; - } - } -} - -// dropdown -.el-dropdown-menu { - a { - display: block - } -} - -// to fix el-date-picker css style -.el-range-separator { - box-sizing: content-box; -} diff --git a/zhn-vue-ui/src/styles/index.scss b/zhn-vue-ui/src/styles/index.scss deleted file mode 100644 index 3b4da51..0000000 --- a/zhn-vue-ui/src/styles/index.scss +++ /dev/null @@ -1,65 +0,0 @@ -@import './variables.scss'; -@import './mixin.scss'; -@import './transition.scss'; -@import './element-ui.scss'; -@import './sidebar.scss'; - -body { - height: 100%; - -moz-osx-font-smoothing: grayscale; - -webkit-font-smoothing: antialiased; - text-rendering: optimizeLegibility; - font-family: Helvetica Neue, Helvetica, PingFang SC, Hiragino Sans GB, Microsoft YaHei, Arial, sans-serif; -} - -label { - font-weight: 700; -} - -html { - height: 100%; - box-sizing: border-box; -} - -#app { - height: 100%; -} - -*, -*:before, -*:after { - box-sizing: inherit; -} - -a:focus, -a:active { - outline: none; -} - -a, -a:focus, -a:hover { - cursor: pointer; - color: inherit; - text-decoration: none; -} - -div:focus { - outline: none; -} - -.clearfix { - &:after { - visibility: hidden; - display: block; - font-size: 0; - content: " "; - clear: both; - height: 0; - } -} - -// main-container global css -.app-container { - padding: 20px; -} diff --git a/zhn-vue-ui/src/styles/mixin.scss b/zhn-vue-ui/src/styles/mixin.scss deleted file mode 100644 index 36b74bb..0000000 --- a/zhn-vue-ui/src/styles/mixin.scss +++ /dev/null @@ -1,28 +0,0 @@ -@mixin clearfix { - &:after { - content: ""; - display: table; - clear: both; - } -} - -@mixin scrollBar { - &::-webkit-scrollbar-track-piece { - background: #d3dce6; - } - - &::-webkit-scrollbar { - width: 6px; - } - - &::-webkit-scrollbar-thumb { - background: #99a9bf; - border-radius: 20px; - } -} - -@mixin relative { - position: relative; - width: 100%; - height: 100%; -} diff --git a/zhn-vue-ui/src/styles/sidebar.scss b/zhn-vue-ui/src/styles/sidebar.scss deleted file mode 100644 index 94760cc..0000000 --- a/zhn-vue-ui/src/styles/sidebar.scss +++ /dev/null @@ -1,226 +0,0 @@ -#app { - - .main-container { - min-height: 100%; - transition: margin-left .28s; - margin-left: $sideBarWidth; - position: relative; - } - - .sidebar-container { - transition: width 0.28s; - width: $sideBarWidth !important; - background-color: $menuBg; - height: 100%; - position: fixed; - font-size: 0px; - top: 0; - bottom: 0; - left: 0; - z-index: 1001; - overflow: hidden; - - // reset element-ui css - .horizontal-collapse-transition { - transition: 0s width ease-in-out, 0s padding-left ease-in-out, 0s padding-right ease-in-out; - } - - .scrollbar-wrapper { - overflow-x: hidden !important; - } - - .el-scrollbar__bar.is-vertical { - right: 0px; - } - - .el-scrollbar { - height: 100%; - } - - &.has-logo { - .el-scrollbar { - height: calc(100% - 50px); - } - } - - .is-horizontal { - display: none; - } - - a { - display: inline-block; - width: 100%; - overflow: hidden; - } - - .svg-icon { - margin-right: 16px; - } - - .sub-el-icon { - margin-right: 12px; - margin-left: -2px; - } - - .el-menu { - border: none; - height: 100%; - width: 100% !important; - } - - // menu hover - .submenu-title-noDropdown, - .el-submenu__title { - &:hover { - background-color: $menuHover !important; - } - } - - .is-active>.el-submenu__title { - color: $subMenuActiveText !important; - } - - & .nest-menu .el-submenu>.el-submenu__title, - & .el-submenu .el-menu-item { - min-width: $sideBarWidth !important; - background-color: $subMenuBg !important; - - &:hover { - background-color: $subMenuHover !important; - } - } - } - - .hideSidebar { - .sidebar-container { - width: 54px !important; - } - - .main-container { - margin-left: 54px; - } - - .submenu-title-noDropdown { - padding: 0 !important; - position: relative; - - .el-tooltip { - padding: 0 !important; - - .svg-icon { - margin-left: 20px; - } - - .sub-el-icon { - margin-left: 19px; - } - } - } - - .el-submenu { - overflow: hidden; - - &>.el-submenu__title { - padding: 0 !important; - - .svg-icon { - margin-left: 20px; - } - - .sub-el-icon { - margin-left: 19px; - } - - .el-submenu__icon-arrow { - display: none; - } - } - } - - .el-menu--collapse { - .el-submenu { - &>.el-submenu__title { - &>span { - height: 0; - width: 0; - overflow: hidden; - visibility: hidden; - display: inline-block; - } - } - } - } - } - - .el-menu--collapse .el-menu .el-submenu { - min-width: $sideBarWidth !important; - } - - // mobile responsive - .mobile { - .main-container { - margin-left: 0px; - } - - .sidebar-container { - transition: transform .28s; - width: $sideBarWidth !important; - } - - &.hideSidebar { - .sidebar-container { - pointer-events: none; - transition-duration: 0.3s; - transform: translate3d(-$sideBarWidth, 0, 0); - } - } - } - - .withoutAnimation { - - .main-container, - .sidebar-container { - transition: none; - } - } -} - -// when menu collapsed -.el-menu--vertical { - &>.el-menu { - .svg-icon { - margin-right: 16px; - } - .sub-el-icon { - margin-right: 12px; - margin-left: -2px; - } - } - - .nest-menu .el-submenu>.el-submenu__title, - .el-menu-item { - &:hover { - // you can use $subMenuHover - background-color: $menuHover !important; - } - } - - // the scroll bar appears when the subMenu is too long - >.el-menu--popup { - max-height: 100vh; - overflow-y: auto; - - &::-webkit-scrollbar-track-piece { - background: #d3dce6; - } - - &::-webkit-scrollbar { - width: 6px; - } - - &::-webkit-scrollbar-thumb { - background: #99a9bf; - border-radius: 20px; - } - } -} diff --git a/zhn-vue-ui/src/styles/transition.scss b/zhn-vue-ui/src/styles/transition.scss deleted file mode 100644 index 4cb27cc..0000000 --- a/zhn-vue-ui/src/styles/transition.scss +++ /dev/null @@ -1,48 +0,0 @@ -// global transition css - -/* fade */ -.fade-enter-active, -.fade-leave-active { - transition: opacity 0.28s; -} - -.fade-enter, -.fade-leave-active { - opacity: 0; -} - -/* fade-transform */ -.fade-transform-leave-active, -.fade-transform-enter-active { - transition: all .5s; -} - -.fade-transform-enter { - opacity: 0; - transform: translateX(-30px); -} - -.fade-transform-leave-to { - opacity: 0; - transform: translateX(30px); -} - -/* breadcrumb transition */ -.breadcrumb-enter-active, -.breadcrumb-leave-active { - transition: all .5s; -} - -.breadcrumb-enter, -.breadcrumb-leave-active { - opacity: 0; - transform: translateX(20px); -} - -.breadcrumb-move { - transition: all .5s; -} - -.breadcrumb-leave-active { - position: absolute; -} diff --git a/zhn-vue-ui/src/styles/variables.scss b/zhn-vue-ui/src/styles/variables.scss deleted file mode 100644 index be55772..0000000 --- a/zhn-vue-ui/src/styles/variables.scss +++ /dev/null @@ -1,25 +0,0 @@ -// sidebar -$menuText:#bfcbd9; -$menuActiveText:#409EFF; -$subMenuActiveText:#f4f4f5; //https://github.com/ElemeFE/element/issues/12951 - -$menuBg:#304156; -$menuHover:#263445; - -$subMenuBg:#1f2d3d; -$subMenuHover:#001528; - -$sideBarWidth: 210px; - -// the :export directive is the magic sauce for webpack -// https://www.bluematador.com/blog/how-to-share-variables-between-js-and-sass -:export { - menuText: $menuText; - menuActiveText: $menuActiveText; - subMenuActiveText: $subMenuActiveText; - menuBg: $menuBg; - menuHover: $menuHover; - subMenuBg: $subMenuBg; - subMenuHover: $subMenuHover; - sideBarWidth: $sideBarWidth; -} diff --git a/zhn-vue-ui/src/utils/auth.js b/zhn-vue-ui/src/utils/auth.js deleted file mode 100644 index 059af18..0000000 --- a/zhn-vue-ui/src/utils/auth.js +++ /dev/null @@ -1,15 +0,0 @@ -import Cookies from 'js-cookie' - -const TokenKey = 'vue_admin_template_token' - -export function getToken() { - return Cookies.get(TokenKey) -} - -export function setToken(token) { - return Cookies.set(TokenKey, token) -} - -export function removeToken() { - return Cookies.remove(TokenKey) -} diff --git a/zhn-vue-ui/src/utils/get-page-title.js b/zhn-vue-ui/src/utils/get-page-title.js deleted file mode 100644 index a6de99d..0000000 --- a/zhn-vue-ui/src/utils/get-page-title.js +++ /dev/null @@ -1,10 +0,0 @@ -import defaultSettings from '@/settings' - -const title = defaultSettings.title || 'Vue Admin Template' - -export default function getPageTitle(pageTitle) { - if (pageTitle) { - return `${pageTitle} - ${title}` - } - return `${title}` -} diff --git a/zhn-vue-ui/src/utils/index.js b/zhn-vue-ui/src/utils/index.js deleted file mode 100644 index 4830c04..0000000 --- a/zhn-vue-ui/src/utils/index.js +++ /dev/null @@ -1,117 +0,0 @@ -/** - * Created by PanJiaChen on 16/11/18. - */ - -/** - * Parse the time to string - * @param {(Object|string|number)} time - * @param {string} cFormat - * @returns {string | null} - */ -export function parseTime(time, cFormat) { - if (arguments.length === 0 || !time) { - return null - } - const format = cFormat || '{y}-{m}-{d} {h}:{i}:{s}' - let date - if (typeof time === 'object') { - date = time - } else { - if ((typeof time === 'string')) { - if ((/^[0-9]+$/.test(time))) { - // support "1548221490638" - time = parseInt(time) - } else { - // support safari - // https://stackoverflow.com/questions/4310953/invalid-date-in-safari - time = time.replace(new RegExp(/-/gm), '/') - } - } - - if ((typeof time === 'number') && (time.toString().length === 10)) { - time = time * 1000 - } - date = new Date(time) - } - const formatObj = { - y: date.getFullYear(), - m: date.getMonth() + 1, - d: date.getDate(), - h: date.getHours(), - i: date.getMinutes(), - s: date.getSeconds(), - a: date.getDay() - } - const time_str = format.replace(/{([ymdhisa])+}/g, (result, key) => { - const value = formatObj[key] - // Note: getDay() returns 0 on Sunday - if (key === 'a') { return ['日', '一', '二', '三', '四', '五', '六'][value ] } - return value.toString().padStart(2, '0') - }) - return time_str -} - -/** - * @param {number} time - * @param {string} option - * @returns {string} - */ -export function formatTime(time, option) { - if (('' + time).length === 10) { - time = parseInt(time) * 1000 - } else { - time = +time - } - const d = new Date(time) - const now = Date.now() - - const diff = (now - d) / 1000 - - if (diff < 30) { - return '刚刚' - } else if (diff < 3600) { - // less 1 hour - return Math.ceil(diff / 60) + '分钟前' - } else if (diff < 3600 * 24) { - return Math.ceil(diff / 3600) + '小时前' - } else if (diff < 3600 * 24 * 2) { - return '1天前' - } - if (option) { - return parseTime(time, option) - } else { - return ( - d.getMonth() + - 1 + - '月' + - d.getDate() + - '日' + - d.getHours() + - '时' + - d.getMinutes() + - '分' - ) - } -} - -/** - * @param {string} url - * @returns {Object} - */ -export function param2Obj(url) { - const search = decodeURIComponent(url.split('?')[1]).replace(/\+/g, ' ') - if (!search) { - return {} - } - const obj = {} - const searchArr = search.split('&') - searchArr.forEach(v => { - const index = v.indexOf('=') - if (index !== -1) { - const name = v.substring(0, index) - const val = v.substring(index + 1, v.length) - obj[name] = val - } - }) - return obj -} diff --git a/zhn-vue-ui/src/utils/request.js b/zhn-vue-ui/src/utils/request.js deleted file mode 100644 index b505065..0000000 --- a/zhn-vue-ui/src/utils/request.js +++ /dev/null @@ -1,85 +0,0 @@ -import axios from 'axios' -import { MessageBox, Message } from 'element-ui' -import store from '@/store' -import { getToken } from '@/utils/auth' - -// create an axios instance -const service = axios.create({ - baseURL: process.env.VUE_APP_BASE_API, // url = base url + request url - // withCredentials: true, // send cookies when cross-domain requests - timeout: 50000 // request timeout -}) - -// request interceptor -service.interceptors.request.use( - config => { - // do something before request is sent - - if (store.getters.token) { - // let each request carry token - // ['X-Token'] is a custom headers key - // please modify it according to the actual situation - config.headers['token'] = getToken() - } - return config - }, - error => { - // do something with request error - console.log(error) // for debug - return Promise.reject(error) - } -) - -// response interceptor -service.interceptors.response.use( - /** - * If you want to get http information such as headers or status - * Please return response => response - */ - - /** - * Determine the request status by custom code - * Here is just an example - * You can also judge the status by HTTP Status Code - */ - response => { - const res = response.data - - // if the custom code is not 20000, it is judged as an error. - if (res.code !== 200) { - Message({ - message: res.msg || 'Error', - type: 'error', - duration: 5 * 1000 - }) - - // 50008: Illegal token; 50012: Other clients logged in; 50014: Token expired; - if (res.code === 508 || res.code === 512 || res.code === 514) { - // to re-login - MessageBox.confirm('You have been logged out, you can cancel to stay on this page, or log in again', 'Confirm logout', { - confirmButtonText: 'Re-Login', - cancelButtonText: 'Cancel', - type: 'warning' - }).then(() => { - store.dispatch('user/resetToken').then(() => { - location.reload() - }) - }) - } - return Promise.reject(new Error(res.msg || 'Error')) - } else { - return res - } - }, - error => { - console.log('err' + error) // for debug - Message({ - message: error.msg, - type: 'error', - duration: 5 * 1000 - }) - return Promise.reject(error) - } -) - -export default service diff --git a/zhn-vue-ui/src/utils/validate.js b/zhn-vue-ui/src/utils/validate.js deleted file mode 100644 index 8d962ad..0000000 --- a/zhn-vue-ui/src/utils/validate.js +++ /dev/null @@ -1,20 +0,0 @@ -/** - * Created by PanJiaChen on 16/11/18. - */ - -/** - * @param {string} path - * @returns {Boolean} - */ -export function isExternal(path) { - return /^(https?:|mailto:|tel:)/.test(path) -} - -/** - * @param {string} str - * @returns {Boolean} - */ -export function validUsername(str) { - const valid_map = ['admin', 'editor'] - return valid_map.indexOf(str.trim()) >= 0 -} diff --git a/zhn-vue-ui/src/views/404.vue b/zhn-vue-ui/src/views/404.vue deleted file mode 100644 index 1791f55..0000000 --- a/zhn-vue-ui/src/views/404.vue +++ /dev/null @@ -1,228 +0,0 @@ - - - - - - - - - - - OOPS! - All rights reserved - wallstreetcn - - {{ message }} - Please check that the URL you entered is correct, or click the button below to return to the homepage. - Back to home - - - - - - - - diff --git a/zhn-vue-ui/src/views/dashboard/index.vue b/zhn-vue-ui/src/views/dashboard/index.vue deleted file mode 100644 index d8b2104..0000000 --- a/zhn-vue-ui/src/views/dashboard/index.vue +++ /dev/null @@ -1,85 +0,0 @@ - - - 欢迎: {{ name}}!! - {{avatar}} - {{phone }} - {{emil}} - - - - 书籍系统 - 店铺 - - - - - - - diff --git a/zhn-vue-ui/src/views/login/index.vue b/zhn-vue-ui/src/views/login/index.vue deleted file mode 100644 index 8da0e11..0000000 --- a/zhn-vue-ui/src/views/login/index.vue +++ /dev/null @@ -1,197 +0,0 @@ - - - - - Login Form - - - - - - - - Login - - phone: admin password: any - - - - - - - - diff --git a/zhn-vue-ui/tests/unit/.eslintrc.js b/zhn-vue-ui/tests/unit/.eslintrc.js deleted file mode 100644 index 958d51b..0000000 --- a/zhn-vue-ui/tests/unit/.eslintrc.js +++ /dev/null @@ -1,5 +0,0 @@ -module.exports = { - env: { - jest: true - } -} diff --git a/zhn-vue-ui/tests/unit/components/Breadcrumb.spec.js b/zhn-vue-ui/tests/unit/components/Breadcrumb.spec.js deleted file mode 100644 index 1d94c8f..0000000 --- a/zhn-vue-ui/tests/unit/components/Breadcrumb.spec.js +++ /dev/null @@ -1,98 +0,0 @@ -import { mount, createLocalVue } from '@vue/test-utils' -import VueRouter from 'vue-router' -import ElementUI from 'element-ui' -import Breadcrumb from '@/components/Breadcrumb/index.vue' - -const localVue = createLocalVue() -localVue.use(VueRouter) -localVue.use(ElementUI) - -const routes = [ - { - path: '/', - name: 'home', - children: [{ - path: 'dashboard', - name: 'dashboard' - }] - }, - { - path: '/menu', - name: 'menu', - children: [{ - path: 'menu1', - name: 'menu1', - meta: { title: 'menu1' }, - children: [{ - path: 'menu1-1', - name: 'menu1-1', - meta: { title: 'menu1-1' } - }, - { - path: 'menu1-2', - name: 'menu1-2', - redirect: 'noredirect', - meta: { title: 'menu1-2' }, - children: [{ - path: 'menu1-2-1', - name: 'menu1-2-1', - meta: { title: 'menu1-2-1' } - }, - { - path: 'menu1-2-2', - name: 'menu1-2-2' - }] - }] - }] - }] - -const router = new VueRouter({ - routes -}) - -describe('Breadcrumb.vue', () => { - const wrapper = mount(Breadcrumb, { - localVue, - router - }) - it('dashboard', () => { - router.push('/dashboard') - const len = wrapper.findAll('.el-breadcrumb__inner').length - expect(len).toBe(1) - }) - it('normal route', () => { - router.push('/menu/menu1') - const len = wrapper.findAll('.el-breadcrumb__inner').length - expect(len).toBe(2) - }) - it('nested route', () => { - router.push('/menu/menu1/menu1-2/menu1-2-1') - const len = wrapper.findAll('.el-breadcrumb__inner').length - expect(len).toBe(4) - }) - it('no meta.title', () => { - router.push('/menu/menu1/menu1-2/menu1-2-2') - const len = wrapper.findAll('.el-breadcrumb__inner').length - expect(len).toBe(3) - }) - // it('click link', () => { - // router.push('/menu/menu1/menu1-2/menu1-2-2') - // const breadcrumbArray = wrapper.findAll('.el-breadcrumb__inner') - // const second = breadcrumbArray.at(1) - // console.log(breadcrumbArray) - // const href = second.find('a').attributes().href - // expect(href).toBe('#/menu/menu1') - // }) - // it('noRedirect', () => { - // router.push('/menu/menu1/menu1-2/menu1-2-1') - // const breadcrumbArray = wrapper.findAll('.el-breadcrumb__inner') - // const redirectBreadcrumb = breadcrumbArray.at(2) - // expect(redirectBreadcrumb.contains('a')).toBe(false) - // }) - it('last breadcrumb', () => { - router.push('/menu/menu1/menu1-2/menu1-2-1') - const breadcrumbArray = wrapper.findAll('.el-breadcrumb__inner') - const redirectBreadcrumb = breadcrumbArray.at(3) - expect(redirectBreadcrumb.contains('a')).toBe(false) - }) -}) diff --git a/zhn-vue-ui/tests/unit/components/Hamburger.spec.js b/zhn-vue-ui/tests/unit/components/Hamburger.spec.js deleted file mode 100644 index 01ea303..0000000 --- a/zhn-vue-ui/tests/unit/components/Hamburger.spec.js +++ /dev/null @@ -1,18 +0,0 @@ -import { shallowMount } from '@vue/test-utils' -import Hamburger from '@/components/Hamburger/index.vue' -describe('Hamburger.vue', () => { - it('toggle click', () => { - const wrapper = shallowMount(Hamburger) - const mockFn = jest.fn() - wrapper.vm.$on('toggleClick', mockFn) - wrapper.find('.hamburger').trigger('click') - expect(mockFn).toBeCalled() - }) - it('prop isActive', () => { - const wrapper = shallowMount(Hamburger) - wrapper.setProps({ isActive: true }) - expect(wrapper.contains('.is-active')).toBe(true) - wrapper.setProps({ isActive: false }) - expect(wrapper.contains('.is-active')).toBe(false) - }) -}) diff --git a/zhn-vue-ui/tests/unit/components/SvgIcon.spec.js b/zhn-vue-ui/tests/unit/components/SvgIcon.spec.js deleted file mode 100644 index 31467a9..0000000 --- a/zhn-vue-ui/tests/unit/components/SvgIcon.spec.js +++ /dev/null @@ -1,22 +0,0 @@ -import { shallowMount } from '@vue/test-utils' -import SvgIcon from '@/components/SvgIcon/index.vue' -describe('SvgIcon.vue', () => { - it('iconClass', () => { - const wrapper = shallowMount(SvgIcon, { - propsData: { - iconClass: 'test' - } - }) - expect(wrapper.find('use').attributes().href).toBe('#icon-test') - }) - it('className', () => { - const wrapper = shallowMount(SvgIcon, { - propsData: { - iconClass: 'test' - } - }) - expect(wrapper.classes().length).toBe(1) - wrapper.setProps({ className: 'test' }) - expect(wrapper.classes().includes('test')).toBe(true) - }) -}) diff --git a/zhn-vue-ui/tests/unit/utils/formatTime.spec.js b/zhn-vue-ui/tests/unit/utils/formatTime.spec.js deleted file mode 100644 index 24e165b..0000000 --- a/zhn-vue-ui/tests/unit/utils/formatTime.spec.js +++ /dev/null @@ -1,30 +0,0 @@ -import { formatTime } from '@/utils/index.js' - -describe('Utils:formatTime', () => { - const d = new Date('2018-07-13 17:54:01') // "2018-07-13 17:54:01" - const retrofit = 5 * 1000 - - it('ten digits timestamp', () => { - expect(formatTime((d / 1000).toFixed(0))).toBe('7月13日17时54分') - }) - it('test now', () => { - expect(formatTime(+new Date() - 1)).toBe('刚刚') - }) - it('less two minute', () => { - expect(formatTime(+new Date() - 60 * 2 * 1000 + retrofit)).toBe('2分钟前') - }) - it('less two hour', () => { - expect(formatTime(+new Date() - 60 * 60 * 2 * 1000 + retrofit)).toBe('2小时前') - }) - it('less one day', () => { - expect(formatTime(+new Date() - 60 * 60 * 24 * 1 * 1000)).toBe('1天前') - }) - it('more than one day', () => { - expect(formatTime(d)).toBe('7月13日17时54分') - }) - it('format', () => { - expect(formatTime(d, '{y}-{m}-{d} {h}:{i}')).toBe('2018-07-13 17:54') - expect(formatTime(d, '{y}-{m}-{d}')).toBe('2018-07-13') - expect(formatTime(d, '{y}/{m}/{d} {h}-{i}')).toBe('2018/07/13 17-54') - }) -}) diff --git a/zhn-vue-ui/tests/unit/utils/param2Obj.spec.js b/zhn-vue-ui/tests/unit/utils/param2Obj.spec.js deleted file mode 100644 index e106ed8..0000000 --- a/zhn-vue-ui/tests/unit/utils/param2Obj.spec.js +++ /dev/null @@ -1,14 +0,0 @@ -import { param2Obj } from '@/utils/index.js' -describe('Utils:param2Obj', () => { - const url = 'https://github.com/PanJiaChen/vue-element-admin?name=bill&age=29&sex=1&field=dGVzdA==&key=%E6%B5%8B%E8%AF%95' - - it('param2Obj test', () => { - expect(param2Obj(url)).toEqual({ - name: 'bill', - age: '29', - sex: '1', - field: window.btoa('test'), - key: '测试' - }) - }) -}) diff --git a/zhn-vue-ui/tests/unit/utils/parseTime.spec.js b/zhn-vue-ui/tests/unit/utils/parseTime.spec.js deleted file mode 100644 index 56045af..0000000 --- a/zhn-vue-ui/tests/unit/utils/parseTime.spec.js +++ /dev/null @@ -1,35 +0,0 @@ -import { parseTime } from '@/utils/index.js' - -describe('Utils:parseTime', () => { - const d = new Date('2018-07-13 17:54:01') // "2018-07-13 17:54:01" - it('timestamp', () => { - expect(parseTime(d)).toBe('2018-07-13 17:54:01') - }) - it('timestamp string', () => { - expect(parseTime((d + ''))).toBe('2018-07-13 17:54:01') - }) - it('ten digits timestamp', () => { - expect(parseTime((d / 1000).toFixed(0))).toBe('2018-07-13 17:54:01') - }) - it('new Date', () => { - expect(parseTime(new Date(d))).toBe('2018-07-13 17:54:01') - }) - it('format', () => { - expect(parseTime(d, '{y}-{m}-{d} {h}:{i}')).toBe('2018-07-13 17:54') - expect(parseTime(d, '{y}-{m}-{d}')).toBe('2018-07-13') - expect(parseTime(d, '{y}/{m}/{d} {h}-{i}')).toBe('2018/07/13 17-54') - }) - it('get the day of the week', () => { - expect(parseTime(d, '{a}')).toBe('五') // 星期五 - }) - it('get the day of the week', () => { - expect(parseTime(+d + 1000 * 60 * 60 * 24 * 2, '{a}')).toBe('日') // 星期日 - }) - it('empty argument', () => { - expect(parseTime()).toBeNull() - }) - - it('null', () => { - expect(parseTime(null)).toBeNull() - }) -}) diff --git a/zhn-vue-ui/tests/unit/utils/validate.spec.js b/zhn-vue-ui/tests/unit/utils/validate.spec.js deleted file mode 100644 index f774905..0000000 --- a/zhn-vue-ui/tests/unit/utils/validate.spec.js +++ /dev/null @@ -1,17 +0,0 @@ -import { validUsername, isExternal } from '@/utils/validate.js' - -describe('Utils:validate', () => { - it('validUsername', () => { - expect(validUsername('admin')).toBe(true) - expect(validUsername('editor')).toBe(true) - expect(validUsername('xxxx')).toBe(false) - }) - it('isExternal', () => { - expect(isExternal('https://github.com/PanJiaChen/vue-element-admin')).toBe(true) - expect(isExternal('http://github.com/PanJiaChen/vue-element-admin')).toBe(true) - expect(isExternal('github.com/PanJiaChen/vue-element-admin')).toBe(false) - expect(isExternal('/dashboard')).toBe(false) - expect(isExternal('./dashboard')).toBe(false) - expect(isExternal('dashboard')).toBe(false) - }) -}) diff --git a/zhn-vue-ui/vue.config.js b/zhn-vue-ui/vue.config.js deleted file mode 100644 index dd87a99..0000000 --- a/zhn-vue-ui/vue.config.js +++ /dev/null @@ -1,117 +0,0 @@ -'use strict' -const path = require('path') -const defaultSettings = require('./src/settings.js') - -function resolve(dir) { - return path.join(__dirname, dir) -} - -const name = defaultSettings.title || 'vue Admin Template' - -const port = process.env.port || process.env.npm_config_port || 9528 - -module.exports = { - - publicPath: '/', - outputDir: 'dist', - assetsDir: 'static', - lintOnSave: process.env.NODE_ENV === 'development', - productionSourceMap: false, - devServer: { - port: port, - open: true, - overlay: { - warnings: false, - errors: true - }, - proxy: { - [process.env.VUE_APP_BASE_API]: { - target: 'http://127.0.0.1:18080', - changeOrigin: true, - pathRewrite: { - ['^' + process.env.VUE_APP_BASE_API]: '' - } - } - } - }, - configureWebpack: { - name: name, - resolve: { - alias: { - '@': resolve('src') - } - } - }, - chainWebpack(config) { - // it can improve the speed of the first screen, it is recommended to turn on preload - config.plugin('preload').tap(() => [ - { - rel: 'preload', - // to ignore runtime.js - // https://github.com/vuejs/vue-cli/blob/dev/packages/@vue/cli-service/lib/config/app.js#L171 - fileBlacklist: [/\.map$/, /hot-update\.js$/, /runtime\..*\.js$/], - include: 'initial' - } - ]) - - // when there are many pages, it will cause too many meaningless requests - config.plugins.delete('prefetch') - - // set svg-sprite-loader - config.module - .rule('svg') - .exclude.add(resolve('src/icons')) - .end() - config.module - .rule('icons') - .test(/\.svg$/) - .include.add(resolve('src/icons')) - .end() - .use('svg-sprite-loader') - .loader('svg-sprite-loader') - .options({ - symbolId: 'icon-[name]' - }) - .end() - - config - .when(process.env.NODE_ENV !== 'development', - config => { - config - .plugin('ScriptExtHtmlWebpackPlugin') - .after('html') - .use('script-ext-html-webpack-plugin', [{ - // `runtime` must same as runtimeChunk name. default is `runtime` - inline: /runtime\..*\.js$/ - }]) - .end() - config - .optimization.splitChunks({ - chunks: 'all', - cacheGroups: { - libs: { - name: 'chunk-libs', - test: /[\\/]node_modules[\\/]/, - priority: 10, - chunks: 'initial' // only package third parties that are initially dependent - }, - elementUI: { - name: 'chunk-elementUI', // split elementUI into a single package - priority: 20, // the weight needs to be larger than libs and app or it will be packaged into libs or app - test: /[\\/]node_modules[\\/]_?element-ui(.*)/ // in order to adapt to cnpm - }, - commons: { - name: 'chunk-commons', - test: resolve('src/components'), // can customize your rules - minChunks: 3, // minimum common number - priority: 5, - reuseExistingChunk: true - } - } - }) - // https:// webpack.js.org/configuration/optimization/#optimizationruntimechunk - config.optimization.runtimeChunk('single') - } - ) - } -}
- SPONSORED BY -
- - - -