diff --git a/.idea/compiler.xml b/.idea/compiler.xml index 8095554..279c1ed 100644 --- a/.idea/compiler.xml +++ b/.idea/compiler.xml @@ -11,18 +11,20 @@ - + + + \ No newline at end of file diff --git a/.idea/dataSources.xml b/.idea/dataSources.xml index 61b7c86..cf4e75b 100644 --- a/.idea/dataSources.xml +++ b/.idea/dataSources.xml @@ -5,7 +5,7 @@ mysql.8 true com.mysql.cj.jdbc.Driver - jdbc:mysql://localhost:3308 + jdbc:mysql://localhost:3306 $ProjectFileDir$ diff --git a/.idea/modules.xml b/.idea/modules.xml new file mode 100644 index 0000000..98a3e99 --- /dev/null +++ b/.idea/modules.xml @@ -0,0 +1,8 @@ + + + + + + + + \ No newline at end of file diff --git a/common/pom.xml b/common/pom.xml index 6b7eb38..bd6e640 100644 --- a/common/pom.xml +++ b/common/pom.xml @@ -20,6 +20,40 @@ org.projectlombok lombok + + org.springframework.boot + spring-boot-starter + + + org.springframework.boot + spring-boot-starter-data-jpa + + + mysql + mysql-connector-java + + + com.alibaba + druid-spring-boot-starter + + + + + org.springframework.boot + spring-boot-starter-test + test + + + org.junit.vintage + junit-vintage-engine + + + + + junit + junit + test + \ No newline at end of file diff --git a/common/src/main/java/org/example/shop/CommonApplication.java b/common/src/main/java/org/example/shop/CommonApplication.java new file mode 100644 index 0000000..9ac88db --- /dev/null +++ b/common/src/main/java/org/example/shop/CommonApplication.java @@ -0,0 +1,11 @@ +package org.example.shop; + +import org.springframework.boot.SpringApplication; +import org.springframework.boot.autoconfigure.SpringBootApplication; + +//@SpringBootApplication +public class CommonApplication { + public static void main(String[] args) { + SpringApplication.run(CommonApplication.class,args); + } +} diff --git a/common/src/main/java/org/example/shop/dao/UserDao.java b/common/src/main/java/org/example/shop/dao/UserDao.java new file mode 100644 index 0000000..36d8d7f --- /dev/null +++ b/common/src/main/java/org/example/shop/dao/UserDao.java @@ -0,0 +1,13 @@ +package org.example.shop.dao; + +import org.example.shop.pojo.UserInfo; +import org.springframework.data.jpa.repository.JpaRepository; +import org.springframework.stereotype.Repository; + +/** + * 用户数据操作 + */ +@Repository +public interface UserDao extends JpaRepository { + UserInfo findByUsername(String username); +} diff --git a/common/src/main/java/org/example/shop/pojo/UserInfo.java b/common/src/main/java/org/example/shop/pojo/UserInfo.java new file mode 100644 index 0000000..e07f14e --- /dev/null +++ b/common/src/main/java/org/example/shop/pojo/UserInfo.java @@ -0,0 +1,21 @@ +package org.example.shop.pojo; + +import lombok.Data; +import lombok.ToString; +import lombok.experimental.Accessors; + +import javax.persistence.*; + +@Data +@Accessors(chain = true) +@Entity +@Table(name = "users") // 设置类对应的表名 +@ToString +public class UserInfo { + @Id + @GeneratedValue(strategy= GenerationType.IDENTITY) + private Integer id; + private String username; + private String password; + private Integer status; +} diff --git a/common/src/main/java/org/example/shop/service/UserService.java b/common/src/main/java/org/example/shop/service/UserService.java new file mode 100644 index 0000000..bb9f132 --- /dev/null +++ b/common/src/main/java/org/example/shop/service/UserService.java @@ -0,0 +1,19 @@ +package org.example.shop.service; + +import org.example.shop.pojo.UserInfo; + +public interface UserService { + /** + * 根据名称查询是否存在 + * @param name + * @return + */ + UserInfo findByName(String name); + + /** + * 新增用户信息 + * @param userInfo + * @return + */ + UserInfo save(UserInfo userInfo); +} diff --git a/common/src/main/java/org/example/shop/service/UserServiceImpl.java b/common/src/main/java/org/example/shop/service/UserServiceImpl.java new file mode 100644 index 0000000..bc5c341 --- /dev/null +++ b/common/src/main/java/org/example/shop/service/UserServiceImpl.java @@ -0,0 +1,30 @@ +package org.example.shop.service; + +import org.example.shop.dao.UserDao; +import org.example.shop.pojo.UserInfo; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +@Service +public class UserServiceImpl implements UserService { + + private UserDao userDao; + + @Autowired + public void setUserDao(UserDao userDao) { + this.userDao = userDao; + } + + @Override + public UserInfo findByName(String name) { + return userDao.findByUsername(name); + } + + @Override + public UserInfo save(UserInfo userInfo) { + if (findByName(userInfo.getUsername()) != null) { + throw new RuntimeException("用户名已经存在了"); + } + return userDao.save(userInfo); + } +} diff --git a/common/src/main/resources/application.yaml b/common/src/main/resources/application.yaml new file mode 100644 index 0000000..6b34dcd --- /dev/null +++ b/common/src/main/resources/application.yaml @@ -0,0 +1,15 @@ +server: + port: 9001 +spring: + datasource: + url: jdbc:mysql://localhost:3306/shop_demo + username: root + password: 123456 + driver-class-name: com.mysql.cj.jdbc.Driver + jpa: + show-sql: true + + redis: # redis的配置 + database: 1 + host: localhost + port: 6379 diff --git a/common/src/test/java/org/example/shop/UserServiceTest.java b/common/src/test/java/org/example/shop/UserServiceTest.java new file mode 100644 index 0000000..f556952 --- /dev/null +++ b/common/src/test/java/org/example/shop/UserServiceTest.java @@ -0,0 +1,31 @@ +package org.example.shop; + +import org.example.shop.pojo.UserInfo; +import org.example.shop.service.UserService; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.test.context.SpringBootTest; +import org.springframework.test.context.junit4.SpringRunner; +import org.springframework.util.Assert; + +@SpringBootTest +@RunWith(SpringRunner.class) +public class UserServiceTest { + + private UserService userService; + + @Autowired + public void setUserService(UserService userService) { + this.userService = userService; + } + + @Test + public void testFindUser() { + UserInfo zhangsan = userService.findByName("zhangsan"); + Assert.notNull(zhangsan, "查找张三失败"); + System.out.println(zhangsan); + UserInfo lisi = userService.findByName("lisi"); + Assert.isNull(lisi, "李四应该未null"); + } +} diff --git a/pom.xml b/pom.xml index 22c72f9..1977009 100644 --- a/pom.xml +++ b/pom.xml @@ -19,7 +19,6 @@ provider-goods-search provider-order-service provider-pay-service - web diff --git a/user-service/pom.xml b/user-service/pom.xml index a2cf6f8..98a4b3c 100644 --- a/user-service/pom.xml +++ b/user-service/pom.xml @@ -60,5 +60,13 @@ org.projectlombok lombok + + org.springframework.boot + spring-boot-starter-mail + + + org.springframework.boot + spring-boot-starter-data-redis + \ No newline at end of file diff --git a/user-service/reg.puml b/user-service/reg.puml new file mode 100644 index 0000000..5b5313f --- /dev/null +++ b/user-service/reg.puml @@ -0,0 +1,12 @@ +@startuml +'https://plantuml.com/sequence-diagram +actor User + +autonumber + +User -> Server: 获取验证码 +Server --> Mail: 服务将验证码发送到对应邮箱(服务需要保存code) +User -> Mail: 接收验证码 +User -> Server: 使用用户名、密码和验证码进行注册(验证code) +Server -> User: 注册结果 +@enduml \ No newline at end of file diff --git a/user-service/src/main/java/org/example/shop/config/RabbitConfig.java b/user-service/src/main/java/org/example/shop/config/RabbitConfig.java index 6435b28..81daa48 100644 --- a/user-service/src/main/java/org/example/shop/config/RabbitConfig.java +++ b/user-service/src/main/java/org/example/shop/config/RabbitConfig.java @@ -9,6 +9,11 @@ import org.springframework.context.annotation.Configuration; @Configuration public class RabbitConfig { + /** + * 实际消费队列 + * + * @return + */ @Bean public Queue rabbitmqDemoDirectQueue() { /** @@ -20,12 +25,22 @@ public class RabbitConfig { return new Queue(RabbitMQConfig.RABBITMQ_DEFAULT_TOPIC, true, false, false); } + /** + * 消息实际消费队列所绑定的交换机 + * + * @return + */ @Bean public DirectExchange rabbitmqDemoDirectExchange() { //Direct交换机 return new DirectExchange(RabbitMQConfig.RABBITMQ_DEFAULT_DIRECT_EXCHANGE, true, false); } + /** + * 将消息队列绑定到交换机 + * + * @return + */ @Bean public Binding bindDirect() { //链式写法,绑定交换机和队列,并设置匹配键 diff --git a/common/src/main/java/org/example/shop/config/RabbitMQConfig.java b/user-service/src/main/java/org/example/shop/config/RabbitMQConfig.java similarity index 100% rename from common/src/main/java/org/example/shop/config/RabbitMQConfig.java rename to user-service/src/main/java/org/example/shop/config/RabbitMQConfig.java diff --git a/user-service/src/main/java/org/example/shop/controller/UserController.java b/user-service/src/main/java/org/example/shop/controller/UserController.java new file mode 100644 index 0000000..ed3e6ef --- /dev/null +++ b/user-service/src/main/java/org/example/shop/controller/UserController.java @@ -0,0 +1,109 @@ +package org.example.shop.controller; + +import org.example.shop.pojo.UserInfo; +import org.example.shop.service.MailService; +import org.example.shop.service.UserService; +import org.example.shop.vo.ApiResponse; +import org.example.shop.vo.UserReg; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.data.redis.core.StringRedisTemplate; +import org.springframework.util.StringUtils; +import org.springframework.web.bind.annotation.*; + +import java.util.Random; +import java.util.concurrent.TimeUnit; + +@RestController +@RequestMapping("/user") +@CrossOrigin // 允许跨域 +public class UserController { + private UserService userService; + private MailService mailService; + private StringRedisTemplate stringRedisTemplate; + + @Autowired + public void setUserService(UserService userService) { + this.userService = userService; + } + + @Autowired + public void setMailService(MailService mailService) { + this.mailService = mailService; + } + + @Autowired + public void setStringRedisTemplate(StringRedisTemplate stringRedisTemplate) { + this.stringRedisTemplate = stringRedisTemplate; + } + + @GetMapping("/query") + public ApiResponse query(String name) { + UserInfo userInfo = userService.findByName(name); + if (null != userInfo) { + // 将密码职位null + userInfo.setPassword(null); + } + return new ApiResponse().setCode(0).setData(userInfo); + } + + @GetMapping("/send-code") + public ApiResponse sendCode(String email) { + ApiResponse res = new ApiResponse().setCode(0); + if (StringUtils.isEmpty(email)) { + return res.setCode(1).setMessage("邮箱地址为空"); + } + StringBuffer code = new StringBuffer(); + Random r = new Random(); + for (int i = 0; i < 6; i++) { + code.append(r.nextInt(10)); + } + // 保存code到redis 过期时间设为 3min + stringRedisTemplate.opsForValue().set("code:" + email, code.toString(), 3, TimeUnit.MINUTES); + + if (mailService.sendVerifyCode(email, code.toString())) { + return res; + } + return res.setCode(2).setMessage("发送邮件失败"); + } + + @PostMapping("/create-with-code") + public ApiResponse createWithCode(@RequestBody UserReg userReg) { + ApiResponse res = new ApiResponse().setCode(1); + if (StringUtils.isEmpty(userReg.getCode())) { + return res.setMessage("验证码为空"); + } + if (StringUtils.isEmpty(userReg.getUsername()) || !StringUtils.hasLength(userReg.getPassword())) { + return res.setMessage("参数用户名和密码都允许为空"); + } + // 验证 验证码是否正确 + String code = stringRedisTemplate.opsForValue().get("code:" + userReg.getUsername()); + if (code == null || !code.equals(userReg.getCode())) { + return res.setMessage("验证码不正确"); + } + UserInfo userInfo = new UserInfo(); + userInfo.setUsername(userReg.getUsername()).setPassword(userReg.getPassword()); + userInfo = userService.save(userInfo); + if (null != userInfo) { + userInfo.setPassword(null); + } + return res.setCode(0).setData(userInfo); + } + + @PostMapping("/create") + public ApiResponse create(@RequestBody UserReg userReg) { + ApiResponse res = new ApiResponse().setCode(1); + if (StringUtils.isEmpty(userReg.getUsername()) || !StringUtils.hasLength(userReg.getPassword())) { + return res.setMessage("参数用户名和密码都允许为空"); + } + UserInfo userInfo = new UserInfo(); + userInfo.setUsername(userReg.getUsername()).setPassword(userReg.getPassword()); + userInfo.setStatus(1); + userInfo = userService.save(userInfo); + if (null != userInfo) { + userInfo.setPassword(null); + } + return res.setCode(0).setData(userInfo); + } + + +} diff --git a/user-service/src/main/java/org/example/shop/service/MailService.java b/user-service/src/main/java/org/example/shop/service/MailService.java new file mode 100644 index 0000000..2befe7f --- /dev/null +++ b/user-service/src/main/java/org/example/shop/service/MailService.java @@ -0,0 +1,5 @@ +package org.example.shop.service; + +public interface MailService { + boolean sendVerifyCode(String to,String code); +} diff --git a/user-service/src/main/java/org/example/shop/service/RabbitMQService.java b/user-service/src/main/java/org/example/shop/service/RabbitMQService.java new file mode 100644 index 0000000..eddcf2e --- /dev/null +++ b/user-service/src/main/java/org/example/shop/service/RabbitMQService.java @@ -0,0 +1,11 @@ +package org.example.shop.service; + +public interface RabbitMQService { + /** + * 发送消息 + * + * @param message + * @return + */ + boolean sendMessage(String message,int delay); +} \ No newline at end of file diff --git a/user-service/src/main/java/org/example/shop/service/impl/MailServiceImpl.java b/user-service/src/main/java/org/example/shop/service/impl/MailServiceImpl.java new file mode 100644 index 0000000..9bce275 --- /dev/null +++ b/user-service/src/main/java/org/example/shop/service/impl/MailServiceImpl.java @@ -0,0 +1,38 @@ +package org.example.shop.service.impl; + +import org.example.shop.service.MailService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.mail.MailException; +import org.springframework.mail.SimpleMailMessage; +import org.springframework.mail.javamail.JavaMailSender; +import org.springframework.stereotype.Service; + +@Service +public class MailServiceImpl implements MailService { + private JavaMailSender javaMailSender; + @Value("${spring.mail.from}") + private String from; + + @Autowired + public void setJavaMailSender(JavaMailSender javaMailSender) { + this.javaMailSender = javaMailSender; + } + + @Override + public boolean sendVerifyCode(String to, String code) { + SimpleMailMessage message = new SimpleMailMessage(); + message.setFrom(from);//谁发的 + message.setTo(to); //谁要接收 + message.setSubject("验证码");//邮件标题 + message.setText("当前的验证码为:" + code);//邮件内容 + try { + // 发送邮件 + javaMailSender.send(message); + return true; + } catch (MailException e) { + e.printStackTrace(); + } + return false; + } +} diff --git a/user-service/src/main/java/org/example/shop/service/impl/RabbitMQServiceImpl.java b/user-service/src/main/java/org/example/shop/service/impl/RabbitMQServiceImpl.java new file mode 100644 index 0000000..cba653e --- /dev/null +++ b/user-service/src/main/java/org/example/shop/service/impl/RabbitMQServiceImpl.java @@ -0,0 +1,54 @@ +package org.example.shop.service.impl; + +import org.example.shop.config.RabbitMQConfig; +import org.example.shop.service.RabbitMQService; +import org.springframework.amqp.AmqpException; +import org.springframework.amqp.core.Message; +import org.springframework.amqp.core.MessagePostProcessor; +import org.springframework.amqp.rabbit.core.RabbitTemplate; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +import java.text.SimpleDateFormat; +import java.util.Date; +import java.util.HashMap; +import java.util.Map; +import java.util.UUID; + +@Service +public class RabbitMQServiceImpl implements RabbitMQService { + + private RabbitTemplate rabbitTemplate; + + @Autowired + public void setRabbitTemplate(RabbitTemplate rabbitTemplate) { + this.rabbitTemplate = rabbitTemplate; + } + + + @Override + public boolean sendMessage(String message, int delay) { + try { + String msgId = UUID.randomUUID().toString().replace("-", "").substring(0, 32); + + Map map = new HashMap<>(); + map.put("id", msgId); + map.put("sendTime", System.currentTimeMillis()); + map.put("message", message); + // 发送 + rabbitTemplate.convertAndSend(RabbitMQConfig.RABBITMQ_DEFAULT_DIRECT_EXCHANGE, + RabbitMQConfig.RABBITMQ_DEFAULT_DIRECT_ROUTING, map, new MessagePostProcessor() { + @Override + public Message postProcessMessage(Message message) throws AmqpException { + //给消息设置延迟毫秒值 + message.getMessageProperties().setExpiration(String.valueOf(delay)); + return message; + } + }); + return true; + } catch (Exception e) { + e.printStackTrace(); + return false; + } + } +} diff --git a/user-service/src/main/java/org/example/shop/vo/ApiResponse.java b/user-service/src/main/java/org/example/shop/vo/ApiResponse.java new file mode 100644 index 0000000..e8ef4ea --- /dev/null +++ b/user-service/src/main/java/org/example/shop/vo/ApiResponse.java @@ -0,0 +1,12 @@ +package org.example.shop.vo; + +import lombok.Data; +import lombok.experimental.Accessors; + +@Data +@Accessors(chain = true) +public class ApiResponse { + private int code; + private String message; + private Object data; +} diff --git a/user-service/src/main/java/org/example/shop/vo/UserReg.java b/user-service/src/main/java/org/example/shop/vo/UserReg.java new file mode 100644 index 0000000..64c67e4 --- /dev/null +++ b/user-service/src/main/java/org/example/shop/vo/UserReg.java @@ -0,0 +1,10 @@ +package org.example.shop.vo; + +import lombok.Data; + +@Data +public class UserReg { + private String username; + private String password; + private String code; +} diff --git a/user-service/src/main/resources/application.yaml b/user-service/src/main/resources/application.yaml new file mode 100644 index 0000000..e71af0a --- /dev/null +++ b/user-service/src/main/resources/application.yaml @@ -0,0 +1,40 @@ +server: + port: 9001 +spring: + datasource: + url: jdbc:mysql://localhost:3306/shop_demo + username: root + password: 123456 + driver-class-name: com.mysql.cj.jdbc.Driver + jpa: + show-sql: true + rabbitmq: + host: 127.0.0.1 + port: 5672 + username: client + password: 123123 + redis: # redis的配置 + database: 1 + host: localhost + port: 6379 +# 配置邮件发送信息 + mail: + # 填写邮箱供应的SMTP地址 + # smtp.yandex.com + host: smtp.qq.com + # 用户名 + username: 3094651170@qq.com + # 填写密码 / 授权码 Qw!212er + password: xotopefxpuytdghg + from: 3094651170@qq.com + port: 465 + properties: + mail: + smtp: + auth: true + starttls: + enable: true + ssl: + enable: true + + diff --git a/user-service/src/test/java/org/example/shop/TestEmailSend.java b/user-service/src/test/java/org/example/shop/TestEmailSend.java new file mode 100644 index 0000000..5d14a95 --- /dev/null +++ b/user-service/src/test/java/org/example/shop/TestEmailSend.java @@ -0,0 +1,26 @@ +package org.example.shop; + +import org.example.shop.service.MailService; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.test.context.SpringBootTest; +import org.springframework.test.context.junit4.SpringRunner; +import org.springframework.util.Assert; + +@SpringBootTest +@RunWith(SpringRunner.class) +public class TestEmailSend { + private MailService mailService; + + @Autowired + public void setMailService(MailService mailService) { + this.mailService = mailService; + } + + @Test + public void testSend() { + boolean b = mailService.sendVerifyCode("yaclty@qq.com", "123323"); + Assert.isTrue(b,"发送邮件失败"); + } +} diff --git a/web/package-lock.json b/web/package-lock.json index 8f1ff2a..944ecc8 100644 --- a/web/package-lock.json +++ b/web/package-lock.json @@ -8,6 +8,8 @@ "name": "shop-web", "version": "0.0.0", "dependencies": { + "ant-design-vue": "^2.2.8", + "axios": "^0.23.0", "vue": "^3.2.16", "vue-router": "^4.0.12" }, @@ -20,6 +22,33 @@ "vue-tsc": "^0.3.0" } }, + "node_modules/@ant-design/colors": { + "version": "5.1.1", + "resolved": "https://registry.npm.taobao.org/@ant-design/colors/download/@ant-design/colors-5.1.1.tgz", + "integrity": "sha1-gAshhrHifmZDLmfQPtlq8+IdiUA=", + "dependencies": { + "@ctrl/tinycolor": "^3.3.1" + } + }, + "node_modules/@ant-design/icons-svg": { + "version": "4.2.1", + "resolved": "https://registry.npmmirror.com/@ant-design/icons-svg/download/@ant-design/icons-svg-4.2.1.tgz", + "integrity": "sha1-hjDajrRHGkqr2u19H/apfcss8Fo=" + }, + "node_modules/@ant-design/icons-vue": { + "version": "6.0.1", + "resolved": "https://registry.nlark.com/@ant-design/icons-vue/download/@ant-design/icons-vue-6.0.1.tgz", + "integrity": "sha1-nYBMPHTSz6+XyxjlgtO5QAk09f0=", + "dependencies": { + "@ant-design/colors": "^5.0.0", + "@ant-design/icons-svg": "^4.0.0", + "@types/lodash": "^4.14.165", + "lodash": "^4.17.15" + }, + "peerDependencies": { + "vue": ">=3.0.3" + } + }, "node_modules/@babel/helper-validator-identifier": { "version": "7.15.7", "resolved": "https://registry.nlark.com/@babel/helper-validator-identifier/download/@babel/helper-validator-identifier-7.15.7.tgz", @@ -41,6 +70,17 @@ "node": ">=6.0.0" } }, + "node_modules/@babel/runtime": { + "version": "7.15.4", + "resolved": "https://registry.nlark.com/@babel/runtime/download/@babel/runtime-7.15.4.tgz?cache=0&sync_timestamp=1630618785994&other_urls=https%3A%2F%2Fregistry.nlark.com%2F%40babel%2Fruntime%2Fdownload%2F%40babel%2Fruntime-7.15.4.tgz", + "integrity": "sha1-/RfRa/34eObdAtGXU6OfqKjZyEo=", + "dependencies": { + "regenerator-runtime": "^0.13.4" + }, + "engines": { + "node": ">=6.9.0" + } + }, "node_modules/@babel/types": { "version": "7.15.6", "resolved": "https://registry.nlark.com/@babel/types/download/@babel/types-7.15.6.tgz", @@ -54,6 +94,14 @@ "node": ">=6.9.0" } }, + "node_modules/@ctrl/tinycolor": { + "version": "3.4.0", + "resolved": "https://registry.npm.taobao.org/@ctrl/tinycolor/download/@ctrl/tinycolor-3.4.0.tgz", + "integrity": "sha1-w8WuVDyJfKqcKmhjC+01W+X5mQ8=", + "engines": { + "node": ">=10" + } + }, "node_modules/@emmetio/abbreviation": { "version": "2.2.2", "resolved": "https://registry.nlark.com/@emmetio/abbreviation/download/@emmetio/abbreviation-2.2.2.tgz", @@ -78,6 +126,15 @@ "integrity": "sha1-Blsq9iM/50dNRII+PeuJckr0K18=", "dev": true }, + "node_modules/@simonwep/pickr": { + "version": "1.8.2", + "resolved": "https://registry.nlark.com/@simonwep/pickr/download/@simonwep/pickr-1.8.2.tgz", + "integrity": "sha1-ltyGZ1lA18rWPWnCIIPdHLuXl8s=", + "dependencies": { + "core-js": "^3.15.1", + "nanopop": "^2.1.0" + } + }, "node_modules/@types/eslint": { "version": "7.28.1", "resolved": "https://registry.npmmirror.com/@types/eslint/download/@types/eslint-7.28.1.tgz", @@ -115,6 +172,12 @@ "dev": true, "peer": true }, + "node_modules/@types/lodash": { + "version": "4.14.176", + "resolved": "https://registry.npmmirror.com/@types/lodash/download/@types/lodash-4.14.176.tgz?cache=0&sync_timestamp=1634769339682&other_urls=https%3A%2F%2Fregistry.npmmirror.com%2F%40types%2Flodash%2Fdownload%2F%40types%2Flodash-4.14.176.tgz", + "integrity": "sha1-ZBFQ/BzaNvv6Mp3mA7uxddfuIMA=", + "license": "MIT" + }, "node_modules/@types/node": { "version": "16.11.1", "resolved": "https://registry.npmmirror.com/@types/node/download/@types/node-16.11.1.tgz?cache=0&sync_timestamp=1634443414534&other_urls=https%3A%2F%2Fregistry.npmmirror.com%2F%40types%2Fnode%2Fdownload%2F%40types%2Fnode-16.11.1.tgz", @@ -537,6 +600,38 @@ "ajv": "^6.9.1" } }, + "node_modules/ant-design-vue": { + "version": "2.2.8", + "resolved": "https://registry.npmmirror.com/ant-design-vue/download/ant-design-vue-2.2.8.tgz", + "integrity": "sha1-+ofPaELY7poNivOT/0CZ7MQHLys=", + "dependencies": { + "@ant-design/icons-vue": "^6.0.0", + "@babel/runtime": "^7.10.5", + "@simonwep/pickr": "~1.8.0", + "array-tree-filter": "^2.1.0", + "async-validator": "^3.3.0", + "dom-align": "^1.12.1", + "dom-scroll-into-view": "^2.0.0", + "lodash": "^4.17.21", + "lodash-es": "^4.17.15", + "moment": "^2.27.0", + "omit.js": "^2.0.0", + "resize-observer-polyfill": "^1.5.1", + "scroll-into-view-if-needed": "^2.2.25", + "shallow-equal": "^1.0.0", + "vue-types": "^3.0.0", + "warning": "^4.0.0" + }, + "peerDependencies": { + "@vue/compiler-sfc": ">=3.1.0", + "vue": ">=3.1.0" + } + }, + "node_modules/array-tree-filter": { + "version": "2.1.0", + "resolved": "https://registry.nlark.com/array-tree-filter/download/array-tree-filter-2.1.0.tgz", + "integrity": "sha1-hzrAD+yDdJ8lWsjdCDgUtPYykZA=" + }, "node_modules/asap": { "version": "2.0.6", "resolved": "https://registry.nlark.com/asap/download/asap-2.0.6.tgz", @@ -549,6 +644,20 @@ "integrity": "sha1-EfDjY78UYgX7CBk7XHuQ9NHPRP4=", "dev": true }, + "node_modules/async-validator": { + "version": "3.5.2", + "resolved": "https://registry.npmmirror.com/async-validator/download/async-validator-3.5.2.tgz?cache=0&sync_timestamp=1634529574100&other_urls=https%3A%2F%2Fregistry.npmmirror.com%2Fasync-validator%2Fdownload%2Fasync-validator-3.5.2.tgz", + "integrity": "sha1-aOhmqWgk6LJpT/eoMcGiXETV5QA=" + }, + "node_modules/axios": { + "version": "0.23.0", + "resolved": "https://registry.npmmirror.com/axios/download/axios-0.23.0.tgz?cache=0&sync_timestamp=1634053131158&other_urls=https%3A%2F%2Fregistry.npmmirror.com%2Faxios%2Fdownload%2Faxios-0.23.0.tgz", + "integrity": "sha1-sPpdCUio0ddePVY1I4tsRiWwUUk=", + "license": "MIT", + "dependencies": { + "follow-redirects": "^1.14.4" + } + }, "node_modules/babel-walk": { "version": "3.0.0-canary-5", "resolved": "https://registry.nlark.com/babel-walk/download/babel-walk-3.0.0-canary-5.tgz", @@ -649,6 +758,11 @@ "dev": true, "peer": true }, + "node_modules/compute-scroll-into-view": { + "version": "1.0.17", + "resolved": "https://registry.npm.taobao.org/compute-scroll-into-view/download/compute-scroll-into-view-1.0.17.tgz", + "integrity": "sha1-aojxis2dQunPS6pr7H4FImB6t6s=" + }, "node_modules/constantinople": { "version": "4.0.1", "resolved": "https://registry.nlark.com/constantinople/download/constantinople-4.0.1.tgz", @@ -668,6 +782,17 @@ "is-what": "^3.12.0" } }, + "node_modules/core-js": { + "version": "3.18.3", + "resolved": "https://registry.npmmirror.com/core-js/download/core-js-3.18.3.tgz?cache=0&sync_timestamp=1634062619940&other_urls=https%3A%2F%2Fregistry.npmmirror.com%2Fcore-js%2Fdownload%2Fcore-js-3.18.3.tgz", + "integrity": "sha1-hqC7otjsPfhg/vzAeo0Rl3nwFQk=", + "hasInstallScript": true, + "license": "MIT", + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/core-js" + } + }, "node_modules/csstype": { "version": "2.6.18", "resolved": "https://registry.nlark.com/csstype/download/csstype-2.6.18.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fcsstype%2Fdownload%2Fcsstype-2.6.18.tgz", @@ -689,6 +814,16 @@ "integrity": "sha1-6oCxBqh1OHdOijpKWv4pPeSJ4Kk=", "dev": true }, + "node_modules/dom-align": { + "version": "1.12.2", + "resolved": "https://registry.nlark.com/dom-align/download/dom-align-1.12.2.tgz", + "integrity": "sha1-D4Fk69DJwhsMeQMQSTzYVYkqzUs=" + }, + "node_modules/dom-scroll-into-view": { + "version": "2.0.1", + "resolved": "https://registry.npm.taobao.org/dom-scroll-into-view/download/dom-scroll-into-view-2.0.1.tgz", + "integrity": "sha1-DezIUigB/Y0/HGujVadNOCxfmJs=" + }, "node_modules/dom-serializer": { "version": "1.3.2", "resolved": "https://registry.nlark.com/dom-serializer/download/dom-serializer-1.3.2.tgz?cache=0&sync_timestamp=1621256858583&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fdom-serializer%2Fdownload%2Fdom-serializer-1.3.2.tgz", @@ -1161,6 +1296,14 @@ "dev": true, "peer": true }, + "node_modules/follow-redirects": { + "version": "1.14.4", + "resolved": "https://registry.nlark.com/follow-redirects/download/follow-redirects-1.14.4.tgz?cache=0&sync_timestamp=1631622534118&other_urls=https%3A%2F%2Fregistry.nlark.com%2Ffollow-redirects%2Fdownload%2Ffollow-redirects-1.14.4.tgz", + "integrity": "sha1-g4/fSKi73XnlLuUfsclOPtmLk3k=", + "engines": { + "node": ">=4.0" + } + }, "node_modules/fsevents": { "version": "2.3.2", "resolved": "https://registry.npm.taobao.org/fsevents/download/fsevents-2.3.2.tgz", @@ -1305,6 +1448,14 @@ "object-assign": "^4.1.1" } }, + "node_modules/is-plain-object": { + "version": "3.0.1", + "resolved": "https://registry.npm.taobao.org/is-plain-object/download/is-plain-object-3.0.1.tgz", + "integrity": "sha1-Zi2S0kwKpDAkB7DUXSHyJRyF+Fs=", + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/is-promise": { "version": "2.2.2", "resolved": "https://registry.npm.taobao.org/is-promise/download/is-promise-2.2.2.tgz", @@ -1352,6 +1503,11 @@ "integrity": "sha1-Fzb939lyTyijaCrcYjCufk6Weds=", "dev": true }, + "node_modules/js-tokens": { + "version": "4.0.0", + "resolved": "https://registry.nlark.com/js-tokens/download/js-tokens-4.0.0.tgz?cache=0&sync_timestamp=1619345098261&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fjs-tokens%2Fdownload%2Fjs-tokens-4.0.0.tgz", + "integrity": "sha1-GSA/tZmR35jjoocFDUZHzerzJJk=" + }, "node_modules/json-parse-better-errors": { "version": "1.0.2", "resolved": "https://registry.npm.taobao.org/json-parse-better-errors/download/json-parse-better-errors-1.0.2.tgz", @@ -1456,6 +1612,27 @@ "node": ">=6.11.5" } }, + "node_modules/lodash": { + "version": "4.17.21", + "resolved": "https://registry.npm.taobao.org/lodash/download/lodash-4.17.21.tgz?cache=0&sync_timestamp=1613835817439&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Flodash%2Fdownload%2Flodash-4.17.21.tgz", + "integrity": "sha1-Z5WRxWTDv/quhFTPCz3zcMPWkRw=" + }, + "node_modules/lodash-es": { + "version": "4.17.21", + "resolved": "https://registry.nlark.com/lodash-es/download/lodash-es-4.17.21.tgz", + "integrity": "sha1-Q+YmxG5lkbd1C+srUBFzkMYJ4+4=" + }, + "node_modules/loose-envify": { + "version": "1.4.0", + "resolved": "https://registry.nlark.com/loose-envify/download/loose-envify-1.4.0.tgz", + "integrity": "sha1-ce5R+nvkyuwaY4OffmgtgTLTDK8=", + "dependencies": { + "js-tokens": "^3.0.0 || ^4.0.0" + }, + "bin": { + "loose-envify": "cli.js" + } + }, "node_modules/lru-cache": { "version": "6.0.0", "resolved": "https://registry.npm.taobao.org/lru-cache/download/lru-cache-6.0.0.tgz?cache=0&sync_timestamp=1615982572805&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Flru-cache%2Fdownload%2Flru-cache-6.0.0.tgz", @@ -1544,6 +1721,14 @@ "node": ">= 0.6" } }, + "node_modules/moment": { + "version": "2.29.1", + "resolved": "https://registry.nlark.com/moment/download/moment-2.29.1.tgz", + "integrity": "sha1-sr52n6MZQL6e7qZGnAdeNQBvo9M=", + "engines": { + "node": "*" + } + }, "node_modules/ms": { "version": "2.1.3", "resolved": "https://registry.npmmirror.com/ms/download/ms-2.1.3.tgz?cache=0&sync_timestamp=1632788512775&other_urls=https%3A%2F%2Fregistry.npmmirror.com%2Fms%2Fdownload%2Fms-2.1.3.tgz", @@ -1563,6 +1748,11 @@ "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" } }, + "node_modules/nanopop": { + "version": "2.1.0", + "resolved": "https://registry.npm.taobao.org/nanopop/download/nanopop-2.1.0.tgz", + "integrity": "sha1-I0dlE87iQFiIr9LopLVAZrcLnmA=" + }, "node_modules/needle": { "version": "2.9.1", "resolved": "https://registry.nlark.com/needle/download/needle-2.9.1.tgz", @@ -1605,6 +1795,11 @@ "node": ">=0.10.0" } }, + "node_modules/omit.js": { + "version": "2.0.2", + "resolved": "https://registry.npm.taobao.org/omit.js/download/omit.js-2.0.2.tgz", + "integrity": "sha1-3ZuENvq5R6Xz/yFMslOGMeMT7C8=" + }, "node_modules/p-limit": { "version": "3.1.0", "resolved": "https://registry.nlark.com/p-limit/download/p-limit-3.1.0.tgz?cache=0&sync_timestamp=1628812721654&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fp-limit%2Fdownload%2Fp-limit-3.1.0.tgz", @@ -1827,12 +2022,22 @@ "safe-buffer": "^5.1.0" } }, + "node_modules/regenerator-runtime": { + "version": "0.13.9", + "resolved": "https://registry.nlark.com/regenerator-runtime/download/regenerator-runtime-0.13.9.tgz", + "integrity": "sha1-iSV0Kpj/2QgUmI11Zq0wyjsmO1I=" + }, "node_modules/request-light": { "version": "0.5.4", "resolved": "https://registry.npmmirror.com/request-light/download/request-light-0.5.4.tgz", "integrity": "sha1-SXqYxtiuSVNkF6Xi1/ODuTTz44w=", "dev": true }, + "node_modules/resize-observer-polyfill": { + "version": "1.5.1", + "resolved": "https://registry.npm.taobao.org/resize-observer-polyfill/download/resize-observer-polyfill-1.5.1.tgz", + "integrity": "sha1-DpAg3T0hAkRY1OvSfiPkAmmBBGQ=" + }, "node_modules/resolve": { "version": "1.20.0", "resolved": "https://registry.npm.taobao.org/resolve/download/resolve-1.20.0.tgz", @@ -1898,6 +2103,14 @@ "node": ">= 10.13.0" } }, + "node_modules/scroll-into-view-if-needed": { + "version": "2.2.28", + "resolved": "https://registry.nlark.com/scroll-into-view-if-needed/download/scroll-into-view-if-needed-2.2.28.tgz", + "integrity": "sha1-WhWy9YpSZCyIyOylhGROAXA9ZFo=", + "dependencies": { + "compute-scroll-into-view": "^1.0.17" + } + }, "node_modules/semver": { "version": "7.3.5", "resolved": "https://registry.nlark.com/semver/download/semver-7.3.5.tgz?cache=0&sync_timestamp=1618847119601&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fsemver%2Fdownload%2Fsemver-7.3.5.tgz", @@ -1923,6 +2136,11 @@ "randombytes": "^2.1.0" } }, + "node_modules/shallow-equal": { + "version": "1.2.1", + "resolved": "https://registry.npm.taobao.org/shallow-equal/download/shallow-equal-1.2.1.tgz", + "integrity": "sha1-TBar+lYEOqINBQMk76aJQLDaedo=" + }, "node_modules/source-map": { "version": "0.6.1", "resolved": "https://registry.nlark.com/source-map/download/source-map-0.6.1.tgz", @@ -2340,6 +2558,28 @@ "typescript": "*" } }, + "node_modules/vue-types": { + "version": "3.0.2", + "resolved": "https://registry.npmmirror.com/vue-types/download/vue-types-3.0.2.tgz?cache=0&sync_timestamp=1634179982853&other_urls=https%3A%2F%2Fregistry.npmmirror.com%2Fvue-types%2Fdownload%2Fvue-types-3.0.2.tgz", + "integrity": "sha1-7BbgXUEsA4Ji/B76TOuWR+f7YB0=", + "dependencies": { + "is-plain-object": "3.0.1" + }, + "engines": { + "node": ">=10.15.0" + }, + "peerDependencies": { + "vue": "^3.0.0" + } + }, + "node_modules/warning": { + "version": "4.0.3", + "resolved": "https://registry.nlark.com/warning/download/warning-4.0.3.tgz?cache=0&sync_timestamp=1624607899338&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fwarning%2Fdownload%2Fwarning-4.0.3.tgz", + "integrity": "sha1-Fungd+uKhtavfWSqHgX9hbRnjKM=", + "dependencies": { + "loose-envify": "^1.0.0" + } + }, "node_modules/watchpack": { "version": "2.2.0", "resolved": "https://registry.nlark.com/watchpack/download/watchpack-2.2.0.tgz", @@ -2470,6 +2710,30 @@ } }, "dependencies": { + "@ant-design/colors": { + "version": "5.1.1", + "resolved": "https://registry.npm.taobao.org/@ant-design/colors/download/@ant-design/colors-5.1.1.tgz", + "integrity": "sha1-gAshhrHifmZDLmfQPtlq8+IdiUA=", + "requires": { + "@ctrl/tinycolor": "^3.3.1" + } + }, + "@ant-design/icons-svg": { + "version": "4.2.1", + "resolved": "https://registry.npmmirror.com/@ant-design/icons-svg/download/@ant-design/icons-svg-4.2.1.tgz", + "integrity": "sha1-hjDajrRHGkqr2u19H/apfcss8Fo=" + }, + "@ant-design/icons-vue": { + "version": "6.0.1", + "resolved": "https://registry.nlark.com/@ant-design/icons-vue/download/@ant-design/icons-vue-6.0.1.tgz", + "integrity": "sha1-nYBMPHTSz6+XyxjlgtO5QAk09f0=", + "requires": { + "@ant-design/colors": "^5.0.0", + "@ant-design/icons-svg": "^4.0.0", + "@types/lodash": "^4.14.165", + "lodash": "^4.17.15" + } + }, "@babel/helper-validator-identifier": { "version": "7.15.7", "resolved": "https://registry.nlark.com/@babel/helper-validator-identifier/download/@babel/helper-validator-identifier-7.15.7.tgz", @@ -2481,6 +2745,14 @@ "resolved": "https://registry.npmmirror.com/@babel/parser/download/@babel/parser-7.15.8.tgz", "integrity": "sha1-e6zcvnG9w/+TbVEMFdzqfPC5kBY=" }, + "@babel/runtime": { + "version": "7.15.4", + "resolved": "https://registry.nlark.com/@babel/runtime/download/@babel/runtime-7.15.4.tgz?cache=0&sync_timestamp=1630618785994&other_urls=https%3A%2F%2Fregistry.nlark.com%2F%40babel%2Fruntime%2Fdownload%2F%40babel%2Fruntime-7.15.4.tgz", + "integrity": "sha1-/RfRa/34eObdAtGXU6OfqKjZyEo=", + "requires": { + "regenerator-runtime": "^0.13.4" + } + }, "@babel/types": { "version": "7.15.6", "resolved": "https://registry.nlark.com/@babel/types/download/@babel/types-7.15.6.tgz", @@ -2491,6 +2763,11 @@ "to-fast-properties": "^2.0.0" } }, + "@ctrl/tinycolor": { + "version": "3.4.0", + "resolved": "https://registry.npm.taobao.org/@ctrl/tinycolor/download/@ctrl/tinycolor-3.4.0.tgz", + "integrity": "sha1-w8WuVDyJfKqcKmhjC+01W+X5mQ8=" + }, "@emmetio/abbreviation": { "version": "2.2.2", "resolved": "https://registry.nlark.com/@emmetio/abbreviation/download/@emmetio/abbreviation-2.2.2.tgz", @@ -2515,6 +2792,15 @@ "integrity": "sha1-Blsq9iM/50dNRII+PeuJckr0K18=", "dev": true }, + "@simonwep/pickr": { + "version": "1.8.2", + "resolved": "https://registry.nlark.com/@simonwep/pickr/download/@simonwep/pickr-1.8.2.tgz", + "integrity": "sha1-ltyGZ1lA18rWPWnCIIPdHLuXl8s=", + "requires": { + "core-js": "^3.15.1", + "nanopop": "^2.1.0" + } + }, "@types/eslint": { "version": "7.28.1", "resolved": "https://registry.npmmirror.com/@types/eslint/download/@types/eslint-7.28.1.tgz", @@ -2551,6 +2837,11 @@ "dev": true, "peer": true }, + "@types/lodash": { + "version": "4.14.176", + "resolved": "https://registry.npmmirror.com/@types/lodash/download/@types/lodash-4.14.176.tgz?cache=0&sync_timestamp=1634769339682&other_urls=https%3A%2F%2Fregistry.npmmirror.com%2F%40types%2Flodash%2Fdownload%2F%40types%2Flodash-4.14.176.tgz", + "integrity": "sha1-ZBFQ/BzaNvv6Mp3mA7uxddfuIMA=" + }, "@types/node": { "version": "16.11.1", "resolved": "https://registry.npmmirror.com/@types/node/download/@types/node-16.11.1.tgz?cache=0&sync_timestamp=1634443414534&other_urls=https%3A%2F%2Fregistry.npmmirror.com%2F%40types%2Fnode%2Fdownload%2F%40types%2Fnode-16.11.1.tgz", @@ -2945,6 +3236,34 @@ "peer": true, "requires": {} }, + "ant-design-vue": { + "version": "2.2.8", + "resolved": "https://registry.npmmirror.com/ant-design-vue/download/ant-design-vue-2.2.8.tgz", + "integrity": "sha1-+ofPaELY7poNivOT/0CZ7MQHLys=", + "requires": { + "@ant-design/icons-vue": "^6.0.0", + "@babel/runtime": "^7.10.5", + "@simonwep/pickr": "~1.8.0", + "array-tree-filter": "^2.1.0", + "async-validator": "^3.3.0", + "dom-align": "^1.12.1", + "dom-scroll-into-view": "^2.0.0", + "lodash": "^4.17.21", + "lodash-es": "^4.17.15", + "moment": "^2.27.0", + "omit.js": "^2.0.0", + "resize-observer-polyfill": "^1.5.1", + "scroll-into-view-if-needed": "^2.2.25", + "shallow-equal": "^1.0.0", + "vue-types": "^3.0.0", + "warning": "^4.0.0" + } + }, + "array-tree-filter": { + "version": "2.1.0", + "resolved": "https://registry.nlark.com/array-tree-filter/download/array-tree-filter-2.1.0.tgz", + "integrity": "sha1-hzrAD+yDdJ8lWsjdCDgUtPYykZA=" + }, "asap": { "version": "2.0.6", "resolved": "https://registry.nlark.com/asap/download/asap-2.0.6.tgz", @@ -2957,6 +3276,19 @@ "integrity": "sha1-EfDjY78UYgX7CBk7XHuQ9NHPRP4=", "dev": true }, + "async-validator": { + "version": "3.5.2", + "resolved": "https://registry.npmmirror.com/async-validator/download/async-validator-3.5.2.tgz?cache=0&sync_timestamp=1634529574100&other_urls=https%3A%2F%2Fregistry.npmmirror.com%2Fasync-validator%2Fdownload%2Fasync-validator-3.5.2.tgz", + "integrity": "sha1-aOhmqWgk6LJpT/eoMcGiXETV5QA=" + }, + "axios": { + "version": "0.23.0", + "resolved": "https://registry.npmmirror.com/axios/download/axios-0.23.0.tgz?cache=0&sync_timestamp=1634053131158&other_urls=https%3A%2F%2Fregistry.npmmirror.com%2Faxios%2Fdownload%2Faxios-0.23.0.tgz", + "integrity": "sha1-sPpdCUio0ddePVY1I4tsRiWwUUk=", + "requires": { + "follow-redirects": "^1.14.4" + } + }, "babel-walk": { "version": "3.0.0-canary-5", "resolved": "https://registry.nlark.com/babel-walk/download/babel-walk-3.0.0-canary-5.tgz", @@ -3036,6 +3368,11 @@ "dev": true, "peer": true }, + "compute-scroll-into-view": { + "version": "1.0.17", + "resolved": "https://registry.npm.taobao.org/compute-scroll-into-view/download/compute-scroll-into-view-1.0.17.tgz", + "integrity": "sha1-aojxis2dQunPS6pr7H4FImB6t6s=" + }, "constantinople": { "version": "4.0.1", "resolved": "https://registry.nlark.com/constantinople/download/constantinople-4.0.1.tgz", @@ -3055,6 +3392,11 @@ "is-what": "^3.12.0" } }, + "core-js": { + "version": "3.18.3", + "resolved": "https://registry.npmmirror.com/core-js/download/core-js-3.18.3.tgz?cache=0&sync_timestamp=1634062619940&other_urls=https%3A%2F%2Fregistry.npmmirror.com%2Fcore-js%2Fdownload%2Fcore-js-3.18.3.tgz", + "integrity": "sha1-hqC7otjsPfhg/vzAeo0Rl3nwFQk=" + }, "csstype": { "version": "2.6.18", "resolved": "https://registry.nlark.com/csstype/download/csstype-2.6.18.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fcsstype%2Fdownload%2Fcsstype-2.6.18.tgz", @@ -3076,6 +3418,16 @@ "integrity": "sha1-6oCxBqh1OHdOijpKWv4pPeSJ4Kk=", "dev": true }, + "dom-align": { + "version": "1.12.2", + "resolved": "https://registry.nlark.com/dom-align/download/dom-align-1.12.2.tgz", + "integrity": "sha1-D4Fk69DJwhsMeQMQSTzYVYkqzUs=" + }, + "dom-scroll-into-view": { + "version": "2.0.1", + "resolved": "https://registry.npm.taobao.org/dom-scroll-into-view/download/dom-scroll-into-view-2.0.1.tgz", + "integrity": "sha1-DezIUigB/Y0/HGujVadNOCxfmJs=" + }, "dom-serializer": { "version": "1.3.2", "resolved": "https://registry.nlark.com/dom-serializer/download/dom-serializer-1.3.2.tgz?cache=0&sync_timestamp=1621256858583&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fdom-serializer%2Fdownload%2Fdom-serializer-1.3.2.tgz", @@ -3378,6 +3730,11 @@ "dev": true, "peer": true }, + "follow-redirects": { + "version": "1.14.4", + "resolved": "https://registry.nlark.com/follow-redirects/download/follow-redirects-1.14.4.tgz?cache=0&sync_timestamp=1631622534118&other_urls=https%3A%2F%2Fregistry.nlark.com%2Ffollow-redirects%2Fdownload%2Ffollow-redirects-1.14.4.tgz", + "integrity": "sha1-g4/fSKi73XnlLuUfsclOPtmLk3k=" + }, "fsevents": { "version": "2.3.2", "resolved": "https://registry.npm.taobao.org/fsevents/download/fsevents-2.3.2.tgz", @@ -3494,6 +3851,11 @@ "object-assign": "^4.1.1" } }, + "is-plain-object": { + "version": "3.0.1", + "resolved": "https://registry.npm.taobao.org/is-plain-object/download/is-plain-object-3.0.1.tgz", + "integrity": "sha1-Zi2S0kwKpDAkB7DUXSHyJRyF+Fs=" + }, "is-promise": { "version": "2.2.2", "resolved": "https://registry.npm.taobao.org/is-promise/download/is-promise-2.2.2.tgz", @@ -3534,6 +3896,11 @@ "integrity": "sha1-Fzb939lyTyijaCrcYjCufk6Weds=", "dev": true }, + "js-tokens": { + "version": "4.0.0", + "resolved": "https://registry.nlark.com/js-tokens/download/js-tokens-4.0.0.tgz?cache=0&sync_timestamp=1619345098261&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fjs-tokens%2Fdownload%2Fjs-tokens-4.0.0.tgz", + "integrity": "sha1-GSA/tZmR35jjoocFDUZHzerzJJk=" + }, "json-parse-better-errors": { "version": "1.0.2", "resolved": "https://registry.npm.taobao.org/json-parse-better-errors/download/json-parse-better-errors-1.0.2.tgz", @@ -3604,6 +3971,24 @@ "dev": true, "peer": true }, + "lodash": { + "version": "4.17.21", + "resolved": "https://registry.npm.taobao.org/lodash/download/lodash-4.17.21.tgz?cache=0&sync_timestamp=1613835817439&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Flodash%2Fdownload%2Flodash-4.17.21.tgz", + "integrity": "sha1-Z5WRxWTDv/quhFTPCz3zcMPWkRw=" + }, + "lodash-es": { + "version": "4.17.21", + "resolved": "https://registry.nlark.com/lodash-es/download/lodash-es-4.17.21.tgz", + "integrity": "sha1-Q+YmxG5lkbd1C+srUBFzkMYJ4+4=" + }, + "loose-envify": { + "version": "1.4.0", + "resolved": "https://registry.nlark.com/loose-envify/download/loose-envify-1.4.0.tgz", + "integrity": "sha1-ce5R+nvkyuwaY4OffmgtgTLTDK8=", + "requires": { + "js-tokens": "^3.0.0 || ^4.0.0" + } + }, "lru-cache": { "version": "6.0.0", "resolved": "https://registry.npm.taobao.org/lru-cache/download/lru-cache-6.0.0.tgz?cache=0&sync_timestamp=1615982572805&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Flru-cache%2Fdownload%2Flru-cache-6.0.0.tgz", @@ -3672,6 +4057,11 @@ "mime-db": "1.50.0" } }, + "moment": { + "version": "2.29.1", + "resolved": "https://registry.nlark.com/moment/download/moment-2.29.1.tgz", + "integrity": "sha1-sr52n6MZQL6e7qZGnAdeNQBvo9M=" + }, "ms": { "version": "2.1.3", "resolved": "https://registry.npmmirror.com/ms/download/ms-2.1.3.tgz?cache=0&sync_timestamp=1632788512775&other_urls=https%3A%2F%2Fregistry.npmmirror.com%2Fms%2Fdownload%2Fms-2.1.3.tgz", @@ -3684,6 +4074,11 @@ "resolved": "https://registry.npmmirror.com/nanoid/download/nanoid-3.1.30.tgz?cache=0&sync_timestamp=1634166241996&other_urls=https%3A%2F%2Fregistry.npmmirror.com%2Fnanoid%2Fdownload%2Fnanoid-3.1.30.tgz", "integrity": "sha1-Y/k8xUjSoRPcXfvGO/oJ4rm2Q2I=" }, + "nanopop": { + "version": "2.1.0", + "resolved": "https://registry.npm.taobao.org/nanopop/download/nanopop-2.1.0.tgz", + "integrity": "sha1-I0dlE87iQFiIr9LopLVAZrcLnmA=" + }, "needle": { "version": "2.9.1", "resolved": "https://registry.nlark.com/needle/download/needle-2.9.1.tgz", @@ -3716,6 +4111,11 @@ "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=", "dev": true }, + "omit.js": { + "version": "2.0.2", + "resolved": "https://registry.npm.taobao.org/omit.js/download/omit.js-2.0.2.tgz", + "integrity": "sha1-3ZuENvq5R6Xz/yFMslOGMeMT7C8=" + }, "p-limit": { "version": "3.1.0", "resolved": "https://registry.nlark.com/p-limit/download/p-limit-3.1.0.tgz?cache=0&sync_timestamp=1628812721654&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fp-limit%2Fdownload%2Fp-limit-3.1.0.tgz", @@ -3917,12 +4317,22 @@ "safe-buffer": "^5.1.0" } }, + "regenerator-runtime": { + "version": "0.13.9", + "resolved": "https://registry.nlark.com/regenerator-runtime/download/regenerator-runtime-0.13.9.tgz", + "integrity": "sha1-iSV0Kpj/2QgUmI11Zq0wyjsmO1I=" + }, "request-light": { "version": "0.5.4", "resolved": "https://registry.npmmirror.com/request-light/download/request-light-0.5.4.tgz", "integrity": "sha1-SXqYxtiuSVNkF6Xi1/ODuTTz44w=", "dev": true }, + "resize-observer-polyfill": { + "version": "1.5.1", + "resolved": "https://registry.npm.taobao.org/resize-observer-polyfill/download/resize-observer-polyfill-1.5.1.tgz", + "integrity": "sha1-DpAg3T0hAkRY1OvSfiPkAmmBBGQ=" + }, "resolve": { "version": "1.20.0", "resolved": "https://registry.npm.taobao.org/resolve/download/resolve-1.20.0.tgz", @@ -3975,6 +4385,14 @@ "ajv-keywords": "^3.5.2" } }, + "scroll-into-view-if-needed": { + "version": "2.2.28", + "resolved": "https://registry.nlark.com/scroll-into-view-if-needed/download/scroll-into-view-if-needed-2.2.28.tgz", + "integrity": "sha1-WhWy9YpSZCyIyOylhGROAXA9ZFo=", + "requires": { + "compute-scroll-into-view": "^1.0.17" + } + }, "semver": { "version": "7.3.5", "resolved": "https://registry.nlark.com/semver/download/semver-7.3.5.tgz?cache=0&sync_timestamp=1618847119601&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fsemver%2Fdownload%2Fsemver-7.3.5.tgz", @@ -3994,6 +4412,11 @@ "randombytes": "^2.1.0" } }, + "shallow-equal": { + "version": "1.2.1", + "resolved": "https://registry.npm.taobao.org/shallow-equal/download/shallow-equal-1.2.1.tgz", + "integrity": "sha1-TBar+lYEOqINBQMk76aJQLDaedo=" + }, "source-map": { "version": "0.6.1", "resolved": "https://registry.nlark.com/source-map/download/source-map-0.6.1.tgz", @@ -4317,6 +4740,22 @@ "vscode-vue-languageservice": "^0.27.0" } }, + "vue-types": { + "version": "3.0.2", + "resolved": "https://registry.npmmirror.com/vue-types/download/vue-types-3.0.2.tgz?cache=0&sync_timestamp=1634179982853&other_urls=https%3A%2F%2Fregistry.npmmirror.com%2Fvue-types%2Fdownload%2Fvue-types-3.0.2.tgz", + "integrity": "sha1-7BbgXUEsA4Ji/B76TOuWR+f7YB0=", + "requires": { + "is-plain-object": "3.0.1" + } + }, + "warning": { + "version": "4.0.3", + "resolved": "https://registry.nlark.com/warning/download/warning-4.0.3.tgz?cache=0&sync_timestamp=1624607899338&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fwarning%2Fdownload%2Fwarning-4.0.3.tgz", + "integrity": "sha1-Fungd+uKhtavfWSqHgX9hbRnjKM=", + "requires": { + "loose-envify": "^1.0.0" + } + }, "watchpack": { "version": "2.2.0", "resolved": "https://registry.nlark.com/watchpack/download/watchpack-2.2.0.tgz", diff --git a/web/package.json b/web/package.json index 8f114e8..d415150 100644 --- a/web/package.json +++ b/web/package.json @@ -7,6 +7,8 @@ "serve": "vite preview" }, "dependencies": { + "ant-design-vue": "^2.2.8", + "axios": "^0.23.0", "vue": "^3.2.16", "vue-router": "^4.0.12" }, diff --git a/web/src/App.vue b/web/src/App.vue index dbe8274..3669e38 100644 --- a/web/src/App.vue +++ b/web/src/App.vue @@ -26,10 +26,5 @@ import HelloWorld from './components/HelloWorld.vue' color: #2c3e50; margin-top: 60px; } -.a{ - .b{ - height: 200px; - background-color: #ff0; - } -} + diff --git a/web/src/main.ts b/web/src/main.ts index b116ceb..42f13f2 100644 --- a/web/src/main.ts +++ b/web/src/main.ts @@ -1,7 +1,12 @@ import { createApp } from 'vue' import router from './routes' +// 导入AntDesign库 +import AntD from 'ant-design-vue' +import 'ant-design-vue/dist/antd.css' import App from './App.vue' + const app = createApp(App) // 创建vue app app.use(router) // 使用路由 +app.use(AntD) app.mount('#app') // 将vue app绑定到index.html中的 div#app 元素上 diff --git a/web/src/pages/a.vue b/web/src/pages/a.vue index adeec00..ca2e976 100644 --- a/web/src/pages/a.vue +++ b/web/src/pages/a.vue @@ -1,10 +1,77 @@