diff --git a/README.md b/README.md index 19888a7..5484480 100644 --- a/README.md +++ b/README.md @@ -1,2 +1,11 @@ # EnterpriseEquipmentManagementSystem +本项目由刘宇豪和李骁共同完成。 +使用MySQL数据库,后端采用Spring Boot框架,前端用Vue.js完成。 +在项目制作过程中,情况波澜起伏,有很多功能受限于工期和知识,没法按照预期完成。 +现在完成的功能只是设备信息的增删改查和几个记录表的添加。 +此项目期待继续完善和制作。 +这个数据库课程设计是我真正制作的第一个完整项目,倾注了很多心血。 +虽然结果没能完全达到预期,但我还是深爱着这个项目。 + +也在此感谢数据库课程设计给我这个自己开发完整项目的机会,我从中学到了很多。 \ No newline at end of file diff --git a/device/.idea/.gitignore b/device/.idea/.gitignore new file mode 100644 index 0000000..13566b8 --- /dev/null +++ b/device/.idea/.gitignore @@ -0,0 +1,8 @@ +# Default ignored files +/shelf/ +/workspace.xml +# Editor-based HTTP Client requests +/httpRequests/ +# Datasource local storage ignored files +/dataSources/ +/dataSources.local.xml diff --git a/device/.idea/compiler.xml b/device/.idea/compiler.xml new file mode 100644 index 0000000..ae9fc6c --- /dev/null +++ b/device/.idea/compiler.xml @@ -0,0 +1,19 @@ + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/device/.idea/encodings.xml b/device/.idea/encodings.xml new file mode 100644 index 0000000..63e9001 --- /dev/null +++ b/device/.idea/encodings.xml @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/device/.idea/jarRepositories.xml b/device/.idea/jarRepositories.xml new file mode 100644 index 0000000..712ab9d --- /dev/null +++ b/device/.idea/jarRepositories.xml @@ -0,0 +1,20 @@ + + + + + + + + + + + \ No newline at end of file diff --git a/device/.idea/misc.xml b/device/.idea/misc.xml new file mode 100644 index 0000000..0e7d25b --- /dev/null +++ b/device/.idea/misc.xml @@ -0,0 +1,14 @@ + + + + + + + + + + \ No newline at end of file diff --git a/device/.idea/uiDesigner.xml b/device/.idea/uiDesigner.xml new file mode 100644 index 0000000..2b63946 --- /dev/null +++ b/device/.idea/uiDesigner.xml @@ -0,0 +1,124 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/device/.idea/vcs.xml b/device/.idea/vcs.xml new file mode 100644 index 0000000..6c0b863 --- /dev/null +++ b/device/.idea/vcs.xml @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/device/pom.xml b/device/pom.xml new file mode 100644 index 0000000..55a732a --- /dev/null +++ b/device/pom.xml @@ -0,0 +1,72 @@ + + + 4.0.0 + + org.example + device + 1.0-SNAPSHOT + + org.springframework.boot + spring-boot-starter-parent + 2.3.12.RELEASE + + + 8 + 8 + + + + org.springframework.boot + spring-boot-starter-web + + + cn.hutool + hutool-all + 5.0.7 + + + com.baomidou + mybatis-plus-boot-starter + 3.5.1 + + + + com.baomidou + mybatis-plus-generator + 3.5.1 + + + + org.apache.velocity + velocity-engine-core + 2.3 + + + org.projectlombok + lombok + + + + + org.springframework.boot + spring-boot-starter-jdbc + + + + + mysql + mysql-connector-java + + + + + org.springframework.boot + spring-boot-starter-aop + + + + + + \ No newline at end of file diff --git a/device/src/main/java/com/CodeGenerator.java b/device/src/main/java/com/CodeGenerator.java new file mode 100644 index 0000000..01a3f79 --- /dev/null +++ b/device/src/main/java/com/CodeGenerator.java @@ -0,0 +1,102 @@ +//package com; +// +///** +// * 导包信息 +// */ +//import java.util.Collections; +//import com.baomidou.mybatisplus.annotation.IdType; +//import com.baomidou.mybatisplus.generator.AutoGenerator; +//import com.baomidou.mybatisplus.generator.config.DataSourceConfig; +//import com.baomidou.mybatisplus.generator.config.GlobalConfig; +//import com.baomidou.mybatisplus.generator.config.OutputFile; +//import com.baomidou.mybatisplus.generator.config.PackageConfig; +//import com.baomidou.mybatisplus.generator.config.StrategyConfig; +//import com.baomidou.mybatisplus.generator.config.TemplateConfig; +//import com.baomidou.mybatisplus.generator.config.querys.MySqlQuery; +//import com.baomidou.mybatisplus.generator.config.rules.DateType; +//import com.baomidou.mybatisplus.generator.config.rules.NamingStrategy; +// +//public class CodeGenerator { +// public static void main(String[] args) { +// /** +// * 先配置数据源 +// */ +// MySqlQuery mySqlQuery = new MySqlQuery() { +// @Override +// public String[] fieldCustom() { +// return new String[] { "Default" }; +// } +// }; +// // 配置位置1:数据库连接信息 +// DataSourceConfig dsc = new DataSourceConfig.Builder( +// "jdbc:mysql://localhost:3306/a?&useSSL=true&useUnicode=true&characterEncoding=utf-8&serverTimezone=Asia/Shanghai", +// "root", "").dbQuery(mySqlQuery).build(); +// AutoGenerator generator = new AutoGenerator(dsc); +// +// // 配置位置2:全局信息配置 +// String projectPath = System.getProperty("user.dir"); // 获取项目路径 +// String filePath = projectPath + "/src/main/java"; // java下的文件路径 +// GlobalConfig global = new GlobalConfig.Builder().outputDir(filePath)// 生成的输出路径 +// .author("刘宇豪")// 生成的作者名字 +// // .enableSwagger()开启swagger,需要添加swagger依赖并配置 +// .dateType(DateType.TIME_PACK)// 时间策略 +// .commentDate("yyyy年MM月dd日")// 格式化时间格式 +// .disableOpenDir()// 禁止打开输出目录,默认false +// .fileOverride()// 覆盖生成文件 +// .build(); +// +// // 配置位置3:包名规范配置 +// PackageConfig packages = new PackageConfig.Builder().entity("entity")// 实体类包名 +// .parent("com")// 父包名。如果为空,将下面子包名必须写全部, 否则就只需写子包名 +// .controller("controller")// 控制层包名 +// .mapper("mapper")// mapper层包名 +// .xml("mapper.xml")// 数据访问层xml包名 +// .service("service")// service层包名 +// .serviceImpl("service.impl")// service实现类包名 +// .other("output")// 输出自定义文件时的包名 +// .pathInfo(Collections.singletonMap(OutputFile.mapperXml, projectPath + "/src/main/resources/mapper")) // 路径配置信息,就是配置各个文件模板的路径信息,这里以mapper.xml为例 +// .build(); +// +// TemplateConfig template = new TemplateConfig.Builder().build(); +// // 配置位置4:生成策略配置 +// StrategyConfig strategyConfig = new StrategyConfig.Builder().enableCapitalMode()// 开启全局大写命名 +// // .likeTable()模糊表匹配 +// .addInclude()// 添加表匹配,指定要生成的数据表名,不写默认选定数据库所有表 +// // .disableSqlFilter()禁用sql过滤:默认(不使用该方法)true +// // .enableSchema()启用schema:默认false +// .entityBuilder() // 实体策略配置 +// // .disableSerialVersionUID()禁用生成SerialVersionUID:默认true +// .enableChainModel()// 开启链式模型 +// .enableLombok()// 开启lombok +// .enableRemoveIsPrefix()// 开启 Boolean 类型字段移除 is 前缀 +// .enableTableFieldAnnotation()// 开启生成实体时生成字段注解 +// // .addTableFills()添加表字段填充 +// .naming(NamingStrategy.underline_to_camel)// 数据表映射实体命名策略:默认下划线转驼峰underline_to_camel +// .columnNaming(NamingStrategy.underline_to_camel)// 表字段映射实体属性命名规则:默认null,不指定按照naming执行 +// .idType(IdType.AUTO)// 添加全局主键类型 +// .formatFileName("%s")// 格式化实体名称,%s取消首字母I +// .build() +// +// .mapperBuilder()// mapper文件策略 +// .enableMapperAnnotation()// 开启mapper注解 +// .enableBaseResultMap()// 启用xml文件中的BaseResultMap 生成 +// .enableBaseColumnList()// 启用xml文件中的BaseColumnList +// // .cache(缓存类.class)设置缓存实现类 +// .formatMapperFileName("%sMapper")// 格式化Dao类名称 +// .formatXmlFileName("%sMapper")// 格式化xml文件名称 +// .build() +// +// .serviceBuilder()// service文件策略 +// .formatServiceFileName("%sService")// 格式化 service 接口文件名称 +// .formatServiceImplFileName("%sServiceImpl")// 格式化 service 接口文件名称 +// .build() +// +// .controllerBuilder()// 控制层策略 +// // .enableHyphenStyle()开启驼峰转连字符,默认:false +// .enableRestStyle()// 开启生成@RestController +// .formatFileName("%sController")// 格式化文件名称 +// .build(); +// generator.global(global).template(template). +// packageInfo(packages).strategy(strategyConfig).execute(); +// } +//} diff --git a/device/src/main/java/com/DeviceApplication.java b/device/src/main/java/com/DeviceApplication.java new file mode 100644 index 0000000..66d1d9e --- /dev/null +++ b/device/src/main/java/com/DeviceApplication.java @@ -0,0 +1,14 @@ +package com; + +import org.mybatis.spring.annotation.MapperScan; +import org.springframework.boot.SpringApplication; +import org.springframework.boot.autoconfigure.SpringBootApplication; + +@SpringBootApplication +@MapperScan("com.mapper") +public class DeviceApplication { + public static void main(String[] args) { + SpringApplication.run(DeviceApplication.class, args); + } + +} \ No newline at end of file diff --git a/device/src/main/java/com/commons/MyBatisPlusConfig.java b/device/src/main/java/com/commons/MyBatisPlusConfig.java new file mode 100644 index 0000000..9982971 --- /dev/null +++ b/device/src/main/java/com/commons/MyBatisPlusConfig.java @@ -0,0 +1,18 @@ +package com.commons; + +import com.baomidou.mybatisplus.annotation.DbType; +import com.baomidou.mybatisplus.extension.plugins.MybatisPlusInterceptor; +import com.baomidou.mybatisplus.extension.plugins.inner.PaginationInnerInterceptor; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; + +@Configuration +public class MyBatisPlusConfig { + @Bean + public MybatisPlusInterceptor paginationInterceptor() { + MybatisPlusInterceptor interceptor = new MybatisPlusInterceptor(); + //指定数据库方言 + interceptor.addInnerInterceptor(new PaginationInnerInterceptor(DbType.MYSQL)); + return interceptor; + } +} diff --git a/device/src/main/java/com/commons/Result.java b/device/src/main/java/com/commons/Result.java new file mode 100644 index 0000000..18f157e --- /dev/null +++ b/device/src/main/java/com/commons/Result.java @@ -0,0 +1,32 @@ +package com.commons; + +/* + * 用于统一返回 + */ + +import lombok.Data; + +@Data +public class Result { + private Integer code;//业务状态码 + private Boolean flag;//描述业务是否成功 + private String message;//本次操作的描述信息 + private T data;//实际携带到前端的数据 + + public static Result success(Integer code,String message,Object data){ + Result r = new Result<>(); + r.setFlag(true); + r.setCode(code); + r.setMessage(message); + r.setData(data); + return r; + } + + public static Result fail(Integer code,String message){ + Result r = new Result<>(); + r.setFlag(false); + r.setCode(code); + r.setMessage(message); + return r; + } +} diff --git a/device/src/main/java/com/controller/DeviceController.java b/device/src/main/java/com/controller/DeviceController.java new file mode 100644 index 0000000..6d4abe7 --- /dev/null +++ b/device/src/main/java/com/controller/DeviceController.java @@ -0,0 +1,60 @@ +package com.controller; + + +import com.baomidou.mybatisplus.core.metadata.IPage; +import com.commons.Result; +import com.controller.from.findDevicePageFrom; +import com.entity.Device; +import com.service.DeviceService; +import com.service.dto.devicePageDto; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestMapping; + +import org.springframework.web.bind.annotation.RestController; + +import java.util.HashMap; + + +/** + *

+ * 前端控制器 + *

+ * + * @author 刘宇豪 + * @since 2024年12月28日 + */ +@RestController +@RequestMapping("/device") +public class DeviceController { + + @Autowired + DeviceService deviceService; + @PostMapping("/devicePage") + public Result devicePage(@RequestBody findDevicePageFrom map) throws Exception{ + + IPage devicePageDtoIPage = deviceService.devicePage(map); + return Result.success(200,"查询成功",devicePageDtoIPage); + } + + @PostMapping("/addDevice") + public Result addDevice(@RequestBody Device map) throws Exception{ + + deviceService.addDevice(map); + return Result.success(200,"添加成功",null); + } + @PostMapping("/modifyDevice") + public Result modifyDevice(@RequestBody Device map) throws Exception{ + + deviceService.modifyDevice(map); + return Result.success(200,"维护成功",null); + } + @PostMapping("/delDevice") + public Result delDevice(@RequestBody HashMap map) throws Exception{ + String id = map.get("id"); + deviceService.delDevice(id); + return Result.success(200,"报废",null); + } +} + diff --git a/device/src/main/java/com/controller/DevicecategoryController.java b/device/src/main/java/com/controller/DevicecategoryController.java new file mode 100644 index 0000000..acb21b8 --- /dev/null +++ b/device/src/main/java/com/controller/DevicecategoryController.java @@ -0,0 +1,46 @@ +package com.controller; + + +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.core.metadata.IPage; +import com.commons.Result; +import com.controller.from.findDevicePageFrom; +import com.entity.Devicecategory; +import com.mapper.DevicecategoryMapper; +import com.service.DeviceService; +import com.service.dto.devicePageDto; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestMapping; + +import org.springframework.web.bind.annotation.RestController; + +import java.util.List; + +/** + *

+ * 前端控制器 + *

+ * + * @author 刘宇豪 + * @since 2024年12月28日 + */ +@RestController +@RequestMapping("/devicecategory") +public class DevicecategoryController { + + + + @Autowired + DevicecategoryMapper devicecategoryMapper; + @PostMapping("/devicecategoryAll") + public Result devicecategoryAll() throws Exception{ + + List devicecategories = devicecategoryMapper.selectList(new QueryWrapper<>()); + return Result.success(200,"查询成功",devicecategories); + } + + +} + diff --git a/device/src/main/java/com/controller/LocationController.java b/device/src/main/java/com/controller/LocationController.java new file mode 100644 index 0000000..169bc3c --- /dev/null +++ b/device/src/main/java/com/controller/LocationController.java @@ -0,0 +1,39 @@ +package com.controller; + + +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.commons.Result; +import com.entity.Devicecategory; +import com.entity.Location; +import com.mapper.DevicecategoryMapper; +import com.mapper.LocationMapper; +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; + +/** + *

+ * 前端控制器 + *

+ * + * @author 刘宇豪 + * @since 2024年12月28日 + */ +@RestController +@RequestMapping("/location") +public class LocationController { + + @Autowired + LocationMapper locationMapper; + @PostMapping("/locationAll") + public Result locationAll() throws Exception{ + + List locations = locationMapper.selectList(new QueryWrapper<>()); + return Result.success(200,"查询成功",locations); + } +} + diff --git a/device/src/main/java/com/controller/MaintenancerecordController.java b/device/src/main/java/com/controller/MaintenancerecordController.java new file mode 100644 index 0000000..4c4aefb --- /dev/null +++ b/device/src/main/java/com/controller/MaintenancerecordController.java @@ -0,0 +1,43 @@ +package com.controller; + + +import com.baomidou.mybatisplus.core.metadata.IPage; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.commons.Result; +import com.controller.from.findDevicePageFrom; +import com.entity.Maintenancerecord; +import com.service.DeviceService; +import com.service.MaintenancerecordService; +import com.service.dto.devicePageDto; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestMapping; + +import org.springframework.web.bind.annotation.RestController; + +import java.util.HashMap; + +/** + *

+ * 前端控制器 + *

+ * + * @author 刘宇豪 + * @since 2024年12月28日 + */ +@RestController +@RequestMapping("/maintenancerecord") +public class MaintenancerecordController { + @Autowired + MaintenancerecordService maintenancerecordService; + @PostMapping("/maintenancerecordPage") + public Result maintenancerecordPage(@RequestBody HashMap map) throws Exception{ + + Page objectPage = new Page<>(Integer.valueOf(map.get("current")),Integer.valueOf(map.get("size"))); + IPage maintenancerecordPage = maintenancerecordService.page(objectPage); + return Result.success(200,"查询成功",maintenancerecordPage); + } + +} + diff --git a/device/src/main/java/com/controller/OperationlogController.java b/device/src/main/java/com/controller/OperationlogController.java new file mode 100644 index 0000000..a97f819 --- /dev/null +++ b/device/src/main/java/com/controller/OperationlogController.java @@ -0,0 +1,43 @@ +package com.controller; + + +import com.baomidou.mybatisplus.core.metadata.IPage; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.commons.Result; +import com.entity.Maintenancerecord; +import com.entity.Operationlog; +import com.service.MaintenancerecordService; +import com.service.OperationlogService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestMapping; + +import org.springframework.web.bind.annotation.RestController; + +import java.util.HashMap; + +/** + *

+ * 前端控制器 + *

+ * + * @author 刘宇豪 + * @since 2024年12月28日 + */ +@RestController +@RequestMapping("/operationlog") +public class OperationlogController { + + + @Autowired + OperationlogService maintenancerecordService; + @PostMapping("/OperationlogPage") + public Result OperationlogPage(@RequestBody HashMap map) throws Exception{ + + Page objectPage = new Page<>(Integer.valueOf(map.get("current")),Integer.valueOf(map.get("size"))); + IPage maintenancerecordPage = maintenancerecordService.page(objectPage); + return Result.success(200,"查询成功",maintenancerecordPage); + } +} + diff --git a/device/src/main/java/com/controller/RoleController.java b/device/src/main/java/com/controller/RoleController.java new file mode 100644 index 0000000..84379aa --- /dev/null +++ b/device/src/main/java/com/controller/RoleController.java @@ -0,0 +1,21 @@ +package com.controller; + + +import org.springframework.web.bind.annotation.RequestMapping; + +import org.springframework.web.bind.annotation.RestController; + +/** + *

+ * 前端控制器 + *

+ * + * @author 刘宇豪 + * @since 2024年12月28日 + */ +@RestController +@RequestMapping("/role") +public class RoleController { + +} + diff --git a/device/src/main/java/com/controller/ScraprecordController.java b/device/src/main/java/com/controller/ScraprecordController.java new file mode 100644 index 0000000..8d20774 --- /dev/null +++ b/device/src/main/java/com/controller/ScraprecordController.java @@ -0,0 +1,43 @@ +package com.controller; + + +import com.baomidou.mybatisplus.core.metadata.IPage; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.commons.Result; +import com.entity.Maintenancerecord; +import com.entity.Scraprecord; +import com.service.MaintenancerecordService; +import com.service.ScraprecordService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestMapping; + +import org.springframework.web.bind.annotation.RestController; + +import java.util.HashMap; + +/** + *

+ * 前端控制器 + *

+ * + * @author 刘宇豪 + * @since 2024年12月28日 + */ +@RestController +@RequestMapping("/scraprecord") +public class ScraprecordController { + + @Autowired + ScraprecordService maintenancerecordService; + @PostMapping("/maintenancerecordPage") + public Result maintenancerecordPage(@RequestBody HashMap map) throws Exception{ + + Page objectPage = new Page<>(Integer.valueOf(map.get("current")),Integer.valueOf(map.get("size"))); + IPage maintenancerecordPage = maintenancerecordService.page(objectPage); + return Result.success(200,"查询成功",maintenancerecordPage); + } + +} + diff --git a/device/src/main/java/com/controller/SupplierController.java b/device/src/main/java/com/controller/SupplierController.java new file mode 100644 index 0000000..bfbf450 --- /dev/null +++ b/device/src/main/java/com/controller/SupplierController.java @@ -0,0 +1,43 @@ +package com.controller; + + +import com.baomidou.mybatisplus.core.metadata.IPage; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.commons.Result; +import com.entity.Maintenancerecord; +import com.entity.Supplier; +import com.service.MaintenancerecordService; +import com.service.SupplierService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestMapping; + +import org.springframework.web.bind.annotation.RestController; + +import java.util.HashMap; + +/** + *

+ * 前端控制器 + *

+ * + * @author 刘宇豪 + * @since 2024年12月28日 + */ +@RestController +@RequestMapping("/supplier") +public class SupplierController { + + @Autowired + SupplierService maintenancerecordService; + @PostMapping("/maintenancerecordPage") + public Result maintenancerecordPage(@RequestBody HashMap map) throws Exception{ + + Page objectPage = new Page<>(Integer.valueOf(map.get("current")),Integer.valueOf(map.get("size"))); + IPage maintenancerecordPage = maintenancerecordService.page(objectPage); + return Result.success(200,"查询成功",maintenancerecordPage); + } + +} + diff --git a/device/src/main/java/com/controller/UsagerecordController.java b/device/src/main/java/com/controller/UsagerecordController.java new file mode 100644 index 0000000..43b8d22 --- /dev/null +++ b/device/src/main/java/com/controller/UsagerecordController.java @@ -0,0 +1,55 @@ +package com.controller; + + +import com.baomidou.mybatisplus.core.metadata.IPage; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.commons.Result; +import com.entity.Maintenancerecord; +import com.entity.Usagerecord; +import com.entity.User; +import com.mapper.UserMapper; +import com.service.MaintenancerecordService; +import com.service.UsagerecordService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestMapping; + +import org.springframework.web.bind.annotation.RestController; + +import java.util.HashMap; + +/** + *

+ * 前端控制器 + *

+ * + * @author 刘宇豪 + * @since 2024年12月28日 + */ +@RestController +@RequestMapping("/usagerecord") +public class UsagerecordController { + + @Autowired + UsagerecordService usagerecordService; + @Autowired + UserMapper userMapper; + @PostMapping("/usagerecordPage") + public Result maintenancerecordPage(@RequestBody HashMap map) throws Exception{ + + Page objectPage = new Page<>(Integer.valueOf(map.get("current")),Integer.valueOf(map.get("size"))); + IPage maintenancerecordPage = usagerecordService.page(objectPage); + for (int i=0; i< maintenancerecordPage.getRecords().size();i++){ + + User user = userMapper.selectById(maintenancerecordPage.getRecords().get(i).getUserID()); + maintenancerecordPage.getRecords().get(i).setUsageType(user.getUserName()); + + } + + + return Result.success(200,"查询成功",maintenancerecordPage); + } + +} + diff --git a/device/src/main/java/com/controller/UserController.java b/device/src/main/java/com/controller/UserController.java new file mode 100644 index 0000000..f7a3b01 --- /dev/null +++ b/device/src/main/java/com/controller/UserController.java @@ -0,0 +1,73 @@ +package com.controller; + + +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.core.metadata.IPage; +import com.commons.Result; +import com.controller.from.findDevicePageFrom; +import com.entity.Usagerecord; +import com.entity.User; +import com.mapper.UsagerecordMapper; +import com.mapper.UserMapper; +import com.service.DeviceService; +import com.service.dto.devicePageDto; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestMapping; + +import org.springframework.web.bind.annotation.RestController; + +import java.time.LocalDate; +import java.time.LocalTime; +import java.time.ZoneId; +import java.util.HashMap; + +/** + *

+ * 前端控制器 + *

+ * + * @author 刘宇豪 + * @since 2024年12月28日 + */ +@RestController +@RequestMapping("/user") +public class UserController { + + @Autowired + UserMapper userMapper; + @Autowired + UsagerecordMapper usagerecordMapper; + + @PostMapping("/login") + public Result login(@RequestBody HashMap map) throws Exception{ + String username = map.get("username"); + String password = map.get("password"); + + + User userName = userMapper.selectOne(new QueryWrapper().eq("UserName", username)); + if (userName == null) { + return Result.success(500,"用户不存在",null); + } + if (!userName.getPassword().equals(password)) { + Usagerecord usagerecord = new Usagerecord(); + usagerecord.setUserID(userName.getUserID()); + usagerecord.setUsageDate(LocalDate.now()); + usagerecord.setUsageTime(LocalTime.now(ZoneId.of("UTC"))); + usagerecord.setUsageDesc("登录失败"); + usagerecordMapper.insert(usagerecord); + return Result.success(500,"密码不对",null); + } + + Usagerecord usagerecord = new Usagerecord(); + usagerecord.setUserID(userName.getUserID()); + usagerecord.setUsageDate(LocalDate.now()); + usagerecord.setUsageTime(LocalTime.now(ZoneId.of("UTC"))); + usagerecord.setUsageDesc("登录成功"); + usagerecordMapper.insert(usagerecord); + return Result.success(200,"登录成功",userName); + } + +} + diff --git a/device/src/main/java/com/controller/from/findDevicePageFrom.java b/device/src/main/java/com/controller/from/findDevicePageFrom.java new file mode 100644 index 0000000..8b0b3e6 --- /dev/null +++ b/device/src/main/java/com/controller/from/findDevicePageFrom.java @@ -0,0 +1,15 @@ +package com.controller.from; + +import com.baomidou.mybatisplus.annotation.TableField; +import lombok.Data; +import org.springframework.beans.factory.annotation.Autowired; + +@Data +public class findDevicePageFrom { + private Long size; + private Long current; + private String deviceName; + private Integer deviceType; + private Integer location; + +} diff --git a/device/src/main/java/com/entity/Device.java b/device/src/main/java/com/entity/Device.java new file mode 100644 index 0000000..74b0433 --- /dev/null +++ b/device/src/main/java/com/entity/Device.java @@ -0,0 +1,51 @@ +package com.entity; + +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import java.io.Serializable; +import java.time.LocalDate; +import lombok.Getter; +import lombok.Setter; +import lombok.experimental.Accessors; + +/** + *

+ * + *

+ * + * @author 刘宇豪 + * @since 2024年12月28日 + */ +@Getter +@Setter +@Accessors(chain = true) +@TableName("device") +public class Device implements Serializable { + + private static final long serialVersionUID = 1L; + + @TableId(value = "DeviceID", type = IdType.AUTO) + private Integer deviceID; + + @TableField("DeviceName") + private String deviceName; + + @TableField("DeviceType") + private Integer deviceType; + + @TableField("Model") + private String model; + + @TableField("PurchaseDate") + private LocalDate purchaseDate; + + @TableField("Status") + private String status; + + @TableField("Location") + private Integer location; + + +} diff --git a/device/src/main/java/com/entity/Devicecategory.java b/device/src/main/java/com/entity/Devicecategory.java new file mode 100644 index 0000000..ea8b237 --- /dev/null +++ b/device/src/main/java/com/entity/Devicecategory.java @@ -0,0 +1,35 @@ +package com.entity; + +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import java.io.Serializable; +import lombok.Getter; +import lombok.Setter; +import lombok.experimental.Accessors; + +/** + *

+ * + *

+ * + * @author 刘宇豪 + * @since 2024年12月28日 + */ +@Getter +@Setter +@Accessors(chain = true) +@TableName("devicecategory") +public class Devicecategory implements Serializable { + + private static final long serialVersionUID = 1L; + + @TableId(value = "CategoryID", type = IdType.AUTO) + private Integer categoryID; + + @TableField("CategoryName") + private String categoryName; + + +} diff --git a/device/src/main/java/com/entity/Location.java b/device/src/main/java/com/entity/Location.java new file mode 100644 index 0000000..e9efc35 --- /dev/null +++ b/device/src/main/java/com/entity/Location.java @@ -0,0 +1,38 @@ +package com.entity; + +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import java.io.Serializable; +import lombok.Getter; +import lombok.Setter; +import lombok.experimental.Accessors; + +/** + *

+ * + *

+ * + * @author 刘宇豪 + * @since 2024年12月28日 + */ +@Getter +@Setter +@Accessors(chain = true) +@TableName("location") +public class Location implements Serializable { + + private static final long serialVersionUID = 1L; + + @TableId(value = "LocationID", type = IdType.AUTO) + private Integer locationID; + + @TableField("LocationName") + private String locationName; + + @TableField("LocationDescription") + private String locationDescription; + + +} diff --git a/device/src/main/java/com/entity/Maintenancerecord.java b/device/src/main/java/com/entity/Maintenancerecord.java new file mode 100644 index 0000000..83ab06c --- /dev/null +++ b/device/src/main/java/com/entity/Maintenancerecord.java @@ -0,0 +1,55 @@ +package com.entity; + +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import java.io.Serializable; +import java.math.BigDecimal; +import java.time.LocalDate; +import lombok.Getter; +import lombok.Setter; +import lombok.experimental.Accessors; + +/** + *

+ * + *

+ * + * @author 刘宇豪 + * @since 2024年12月28日 + */ +@Getter +@Setter +@Accessors(chain = true) +@TableName("maintenancerecord") +public class Maintenancerecord implements Serializable { + + private static final long serialVersionUID = 1L; + + @TableId(value = "MaintenanceID", type = IdType.AUTO) + private Integer maintenanceID; + + @TableField("DeviceID") + private Integer deviceID; + + @TableField("MaintenanceType") + private String maintenanceType; + + @TableField("MaintenanceDate") + private LocalDate maintenanceDate; + + @TableField("Technician") + private String technician; + + @TableField("MaintenanceDetails") + private String maintenanceDetails; + + @TableField("MaintenanceCost") + private BigDecimal maintenanceCost; + + @TableField("NextMaintenanceDate") + private LocalDate nextMaintenanceDate; + + +} diff --git a/device/src/main/java/com/entity/Operationlog.java b/device/src/main/java/com/entity/Operationlog.java new file mode 100644 index 0000000..23eec01 --- /dev/null +++ b/device/src/main/java/com/entity/Operationlog.java @@ -0,0 +1,43 @@ +package com.entity; + +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import java.io.Serializable; +import java.time.LocalDate; +import java.time.LocalDateTime; +import lombok.Getter; +import lombok.Setter; +import lombok.experimental.Accessors; + +/** + *

+ * + *

+ * + * @author 刘宇豪 + * @since 2024年12月28日 + */ +@Getter +@Setter +@Accessors(chain = true) +@TableName("operationlog") +public class Operationlog implements Serializable { + + private static final long serialVersionUID = 1L; + + @TableId(value = "LogID", type = IdType.AUTO) + private Integer logID; + + @TableField("OperationType") + private String operationType; + + @TableField("OperationTime") + private LocalDate operationTime; + + @TableField("OperationDescription") + private String operationDescription; + + +} diff --git a/device/src/main/java/com/entity/Role.java b/device/src/main/java/com/entity/Role.java new file mode 100644 index 0000000..726326e --- /dev/null +++ b/device/src/main/java/com/entity/Role.java @@ -0,0 +1,38 @@ +package com.entity; + +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import java.io.Serializable; +import lombok.Getter; +import lombok.Setter; +import lombok.experimental.Accessors; + +/** + *

+ * + *

+ * + * @author 刘宇豪 + * @since 2024年12月28日 + */ +@Getter +@Setter +@Accessors(chain = true) +@TableName("role") +public class Role implements Serializable { + + private static final long serialVersionUID = 1L; + + @TableId(value = "RoleID", type = IdType.AUTO) + private Integer roleID; + + @TableField("RoleName") + private String roleName; + + @TableField("PermissionDescription") + private String permissionDescription; + + +} diff --git a/device/src/main/java/com/entity/Scraprecord.java b/device/src/main/java/com/entity/Scraprecord.java new file mode 100644 index 0000000..b6905ae --- /dev/null +++ b/device/src/main/java/com/entity/Scraprecord.java @@ -0,0 +1,45 @@ +package com.entity; + +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import java.io.Serializable; +import java.time.LocalDate; +import lombok.Getter; +import lombok.Setter; +import lombok.experimental.Accessors; + +/** + *

+ * + *

+ * + * @author 刘宇豪 + * @since 2024年12月28日 + */ +@Getter +@Setter +@Accessors(chain = true) +@TableName("scraprecord") +public class Scraprecord implements Serializable { + + private static final long serialVersionUID = 1L; + + @TableId(value = "ScrapID", type = IdType.AUTO) + private Integer scrapID; + + @TableField("DeviceID") + private Integer deviceID; + + @TableField("ScrapDate") + private LocalDate scrapDate; + + @TableField("ScrapReason") + private String scrapReason; + + @TableField("DisposalMethod") + private String disposalMethod; + + +} diff --git a/device/src/main/java/com/entity/Supplier.java b/device/src/main/java/com/entity/Supplier.java new file mode 100644 index 0000000..bcd16e3 --- /dev/null +++ b/device/src/main/java/com/entity/Supplier.java @@ -0,0 +1,44 @@ +package com.entity; + +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import java.io.Serializable; +import lombok.Getter; +import lombok.Setter; +import lombok.experimental.Accessors; + +/** + *

+ * + *

+ * + * @author 刘宇豪 + * @since 2024年12月28日 + */ +@Getter +@Setter +@Accessors(chain = true) +@TableName("supplier") +public class Supplier implements Serializable { + + private static final long serialVersionUID = 1L; + + @TableId(value = "SupplierID", type = IdType.AUTO) + private Integer supplierID; + + @TableField("SupplierName") + private String supplierName; + + @TableField("ContactPerson") + private String contactPerson; + + @TableField("ContactPhone") + private String contactPhone; + + @TableField("Address") + private String address; + + +} diff --git a/device/src/main/java/com/entity/Usagerecord.java b/device/src/main/java/com/entity/Usagerecord.java new file mode 100644 index 0000000..5e93e84 --- /dev/null +++ b/device/src/main/java/com/entity/Usagerecord.java @@ -0,0 +1,52 @@ +package com.entity; + +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import java.io.Serializable; +import java.time.LocalDate; +import java.time.LocalTime; +import lombok.Getter; +import lombok.Setter; +import lombok.experimental.Accessors; + +/** + *

+ * + *

+ * + * @author 刘宇豪 + * @since 2024年12月28日 + */ +@Getter +@Setter +@Accessors(chain = true) +@TableName("usagerecord") +public class Usagerecord implements Serializable { + + private static final long serialVersionUID = 1L; + + @TableId(value = "UsageID", type = IdType.AUTO) + private Integer usageID; + + @TableField("DeviceID") + private Integer deviceID; + + @TableField("UserID") + private Integer userID; + + @TableField("UsageDate") + private LocalDate usageDate; + + @TableField("UsageTime") + private LocalTime usageTime; + + @TableField("UsageType") + private String usageType; + + @TableField("UsageDesc") + private String usageDesc; + + +} diff --git a/device/src/main/java/com/entity/User.java b/device/src/main/java/com/entity/User.java new file mode 100644 index 0000000..d8034a4 --- /dev/null +++ b/device/src/main/java/com/entity/User.java @@ -0,0 +1,41 @@ +package com.entity; + +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import java.io.Serializable; +import lombok.Getter; +import lombok.Setter; +import lombok.experimental.Accessors; + +/** + *

+ * + *

+ * + * @author 刘宇豪 + * @since 2024年12月28日 + */ +@Getter +@Setter +@Accessors(chain = true) +@TableName("user") +public class User implements Serializable { + + private static final long serialVersionUID = 1L; + + @TableId(value = "UserID", type = IdType.AUTO) + private Integer userID; + + @TableField("UserName") + private String userName; + + @TableField("Password") + private String password; + + @TableField("Role") + private Integer role; + + +} diff --git a/device/src/main/java/com/mapper/DeviceMapper.java b/device/src/main/java/com/mapper/DeviceMapper.java new file mode 100644 index 0000000..79ab018 --- /dev/null +++ b/device/src/main/java/com/mapper/DeviceMapper.java @@ -0,0 +1,18 @@ +package com.mapper; + +import com.entity.Device; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import org.apache.ibatis.annotations.Mapper; + +/** + *

+ * Mapper 接口 + *

+ * + * @author 刘宇豪 + * @since 2024年12月28日 + */ +@Mapper +public interface DeviceMapper extends BaseMapper { + +} diff --git a/device/src/main/java/com/mapper/DevicecategoryMapper.java b/device/src/main/java/com/mapper/DevicecategoryMapper.java new file mode 100644 index 0000000..15d82c2 --- /dev/null +++ b/device/src/main/java/com/mapper/DevicecategoryMapper.java @@ -0,0 +1,18 @@ +package com.mapper; + +import com.entity.Devicecategory; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import org.apache.ibatis.annotations.Mapper; + +/** + *

+ * Mapper 接口 + *

+ * + * @author 刘宇豪 + * @since 2024年12月28日 + */ +@Mapper +public interface DevicecategoryMapper extends BaseMapper { + +} diff --git a/device/src/main/java/com/mapper/LocationMapper.java b/device/src/main/java/com/mapper/LocationMapper.java new file mode 100644 index 0000000..c4547de --- /dev/null +++ b/device/src/main/java/com/mapper/LocationMapper.java @@ -0,0 +1,18 @@ +package com.mapper; + +import com.entity.Location; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import org.apache.ibatis.annotations.Mapper; + +/** + *

+ * Mapper 接口 + *

+ * + * @author 刘宇豪 + * @since 2024年12月28日 + */ +@Mapper +public interface LocationMapper extends BaseMapper { + +} diff --git a/device/src/main/java/com/mapper/MaintenancerecordMapper.java b/device/src/main/java/com/mapper/MaintenancerecordMapper.java new file mode 100644 index 0000000..0dfec9c --- /dev/null +++ b/device/src/main/java/com/mapper/MaintenancerecordMapper.java @@ -0,0 +1,18 @@ +package com.mapper; + +import com.entity.Maintenancerecord; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import org.apache.ibatis.annotations.Mapper; + +/** + *

+ * Mapper 接口 + *

+ * + * @author 刘宇豪 + * @since 2024年12月28日 + */ +@Mapper +public interface MaintenancerecordMapper extends BaseMapper { + +} diff --git a/device/src/main/java/com/mapper/OperationlogMapper.java b/device/src/main/java/com/mapper/OperationlogMapper.java new file mode 100644 index 0000000..03eac47 --- /dev/null +++ b/device/src/main/java/com/mapper/OperationlogMapper.java @@ -0,0 +1,18 @@ +package com.mapper; + +import com.entity.Operationlog; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import org.apache.ibatis.annotations.Mapper; + +/** + *

+ * Mapper 接口 + *

+ * + * @author 刘宇豪 + * @since 2024年12月28日 + */ +@Mapper +public interface OperationlogMapper extends BaseMapper { + +} diff --git a/device/src/main/java/com/mapper/RoleMapper.java b/device/src/main/java/com/mapper/RoleMapper.java new file mode 100644 index 0000000..79ed7f0 --- /dev/null +++ b/device/src/main/java/com/mapper/RoleMapper.java @@ -0,0 +1,18 @@ +package com.mapper; + +import com.entity.Role; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import org.apache.ibatis.annotations.Mapper; + +/** + *

+ * Mapper 接口 + *

+ * + * @author 刘宇豪 + * @since 2024年12月28日 + */ +@Mapper +public interface RoleMapper extends BaseMapper { + +} diff --git a/device/src/main/java/com/mapper/ScraprecordMapper.java b/device/src/main/java/com/mapper/ScraprecordMapper.java new file mode 100644 index 0000000..ff653a6 --- /dev/null +++ b/device/src/main/java/com/mapper/ScraprecordMapper.java @@ -0,0 +1,18 @@ +package com.mapper; + +import com.entity.Scraprecord; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import org.apache.ibatis.annotations.Mapper; + +/** + *

+ * Mapper 接口 + *

+ * + * @author 刘宇豪 + * @since 2024年12月28日 + */ +@Mapper +public interface ScraprecordMapper extends BaseMapper { + +} diff --git a/device/src/main/java/com/mapper/SupplierMapper.java b/device/src/main/java/com/mapper/SupplierMapper.java new file mode 100644 index 0000000..b7ecac4 --- /dev/null +++ b/device/src/main/java/com/mapper/SupplierMapper.java @@ -0,0 +1,18 @@ +package com.mapper; + +import com.entity.Supplier; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import org.apache.ibatis.annotations.Mapper; + +/** + *

+ * Mapper 接口 + *

+ * + * @author 刘宇豪 + * @since 2024年12月28日 + */ +@Mapper +public interface SupplierMapper extends BaseMapper { + +} diff --git a/device/src/main/java/com/mapper/UsagerecordMapper.java b/device/src/main/java/com/mapper/UsagerecordMapper.java new file mode 100644 index 0000000..ba32eec --- /dev/null +++ b/device/src/main/java/com/mapper/UsagerecordMapper.java @@ -0,0 +1,18 @@ +package com.mapper; + +import com.entity.Usagerecord; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import org.apache.ibatis.annotations.Mapper; + +/** + *

+ * Mapper 接口 + *

+ * + * @author 刘宇豪 + * @since 2024年12月28日 + */ +@Mapper +public interface UsagerecordMapper extends BaseMapper { + +} diff --git a/device/src/main/java/com/mapper/UserMapper.java b/device/src/main/java/com/mapper/UserMapper.java new file mode 100644 index 0000000..80d2c8b --- /dev/null +++ b/device/src/main/java/com/mapper/UserMapper.java @@ -0,0 +1,18 @@ +package com.mapper; + +import com.entity.User; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import org.apache.ibatis.annotations.Mapper; + +/** + *

+ * Mapper 接口 + *

+ * + * @author 刘宇豪 + * @since 2024年12月28日 + */ +@Mapper +public interface UserMapper extends BaseMapper { + +} diff --git a/device/src/main/java/com/service/DeviceService.java b/device/src/main/java/com/service/DeviceService.java new file mode 100644 index 0000000..1d6f07f --- /dev/null +++ b/device/src/main/java/com/service/DeviceService.java @@ -0,0 +1,26 @@ +package com.service; + +import com.baomidou.mybatisplus.core.metadata.IPage; +import com.controller.from.findDevicePageFrom; +import com.entity.Device; +import com.baomidou.mybatisplus.extension.service.IService; +import com.service.dto.devicePageDto; + +/** + *

+ * 服务类 + *

+ * + * @author 刘宇豪 + * @since 2024年12月28日 + */ +public interface DeviceService extends IService { + + IPage devicePage(findDevicePageFrom map); + + void delDevice(String id); + + void addDevice(Device map); + + void modifyDevice(Device map); +} diff --git a/device/src/main/java/com/service/DevicecategoryService.java b/device/src/main/java/com/service/DevicecategoryService.java new file mode 100644 index 0000000..9f27b90 --- /dev/null +++ b/device/src/main/java/com/service/DevicecategoryService.java @@ -0,0 +1,16 @@ +package com.service; + +import com.entity.Devicecategory; +import com.baomidou.mybatisplus.extension.service.IService; + +/** + *

+ * 服务类 + *

+ * + * @author 刘宇豪 + * @since 2024年12月28日 + */ +public interface DevicecategoryService extends IService { + +} diff --git a/device/src/main/java/com/service/LocationService.java b/device/src/main/java/com/service/LocationService.java new file mode 100644 index 0000000..9398f87 --- /dev/null +++ b/device/src/main/java/com/service/LocationService.java @@ -0,0 +1,16 @@ +package com.service; + +import com.entity.Location; +import com.baomidou.mybatisplus.extension.service.IService; + +/** + *

+ * 服务类 + *

+ * + * @author 刘宇豪 + * @since 2024年12月28日 + */ +public interface LocationService extends IService { + +} diff --git a/device/src/main/java/com/service/MaintenancerecordService.java b/device/src/main/java/com/service/MaintenancerecordService.java new file mode 100644 index 0000000..9a0be8e --- /dev/null +++ b/device/src/main/java/com/service/MaintenancerecordService.java @@ -0,0 +1,16 @@ +package com.service; + +import com.entity.Maintenancerecord; +import com.baomidou.mybatisplus.extension.service.IService; + +/** + *

+ * 服务类 + *

+ * + * @author 刘宇豪 + * @since 2024年12月28日 + */ +public interface MaintenancerecordService extends IService { + +} diff --git a/device/src/main/java/com/service/OperationlogService.java b/device/src/main/java/com/service/OperationlogService.java new file mode 100644 index 0000000..43cc5bd --- /dev/null +++ b/device/src/main/java/com/service/OperationlogService.java @@ -0,0 +1,16 @@ +package com.service; + +import com.entity.Operationlog; +import com.baomidou.mybatisplus.extension.service.IService; + +/** + *

+ * 服务类 + *

+ * + * @author 刘宇豪 + * @since 2024年12月28日 + */ +public interface OperationlogService extends IService { + +} diff --git a/device/src/main/java/com/service/RoleService.java b/device/src/main/java/com/service/RoleService.java new file mode 100644 index 0000000..044639b --- /dev/null +++ b/device/src/main/java/com/service/RoleService.java @@ -0,0 +1,16 @@ +package com.service; + +import com.entity.Role; +import com.baomidou.mybatisplus.extension.service.IService; + +/** + *

+ * 服务类 + *

+ * + * @author 刘宇豪 + * @since 2024年12月28日 + */ +public interface RoleService extends IService { + +} diff --git a/device/src/main/java/com/service/ScraprecordService.java b/device/src/main/java/com/service/ScraprecordService.java new file mode 100644 index 0000000..eb0623b --- /dev/null +++ b/device/src/main/java/com/service/ScraprecordService.java @@ -0,0 +1,16 @@ +package com.service; + +import com.entity.Scraprecord; +import com.baomidou.mybatisplus.extension.service.IService; + +/** + *

+ * 服务类 + *

+ * + * @author 刘宇豪 + * @since 2024年12月28日 + */ +public interface ScraprecordService extends IService { + +} diff --git a/device/src/main/java/com/service/SupplierService.java b/device/src/main/java/com/service/SupplierService.java new file mode 100644 index 0000000..320bfd5 --- /dev/null +++ b/device/src/main/java/com/service/SupplierService.java @@ -0,0 +1,16 @@ +package com.service; + +import com.entity.Supplier; +import com.baomidou.mybatisplus.extension.service.IService; + +/** + *

+ * 服务类 + *

+ * + * @author 刘宇豪 + * @since 2024年12月28日 + */ +public interface SupplierService extends IService { + +} diff --git a/device/src/main/java/com/service/UsagerecordService.java b/device/src/main/java/com/service/UsagerecordService.java new file mode 100644 index 0000000..954934d --- /dev/null +++ b/device/src/main/java/com/service/UsagerecordService.java @@ -0,0 +1,16 @@ +package com.service; + +import com.entity.Usagerecord; +import com.baomidou.mybatisplus.extension.service.IService; + +/** + *

+ * 服务类 + *

+ * + * @author 刘宇豪 + * @since 2024年12月28日 + */ +public interface UsagerecordService extends IService { + +} diff --git a/device/src/main/java/com/service/UserService.java b/device/src/main/java/com/service/UserService.java new file mode 100644 index 0000000..8e12e78 --- /dev/null +++ b/device/src/main/java/com/service/UserService.java @@ -0,0 +1,16 @@ +package com.service; + +import com.entity.User; +import com.baomidou.mybatisplus.extension.service.IService; + +/** + *

+ * 服务类 + *

+ * + * @author 刘宇豪 + * @since 2024年12月28日 + */ +public interface UserService extends IService { + +} diff --git a/device/src/main/java/com/service/dto/devicePageDto.java b/device/src/main/java/com/service/dto/devicePageDto.java new file mode 100644 index 0000000..224b493 --- /dev/null +++ b/device/src/main/java/com/service/dto/devicePageDto.java @@ -0,0 +1,11 @@ +package com.service.dto; + +import com.entity.Device; +import lombok.Data; + +@Data +public class devicePageDto extends Device { + String type; + String locationName; + +} diff --git a/device/src/main/java/com/service/impl/DeviceServiceImpl.java b/device/src/main/java/com/service/impl/DeviceServiceImpl.java new file mode 100644 index 0000000..0b5b68f --- /dev/null +++ b/device/src/main/java/com/service/impl/DeviceServiceImpl.java @@ -0,0 +1,119 @@ +package com.service.impl; + +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper; +import com.baomidou.mybatisplus.core.metadata.IPage; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.controller.from.findDevicePageFrom; +import com.entity.*; +import com.mapper.*; +import com.service.DeviceService; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.service.dto.devicePageDto; +import org.springframework.beans.BeanUtils; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +import java.math.BigDecimal; +import java.time.LocalDate; +import java.time.format.DateTimeFormatter; +import java.util.ArrayList; +import java.util.List; + +/** + *

+ * 服务实现类 + *

+ * + * @author 刘宇豪 + * @since 2024年12月28日 + */ +@Service +public class DeviceServiceImpl extends ServiceImpl implements DeviceService { + @Autowired + DeviceMapper deviceMapper; + @Autowired + DevicecategoryMapper devicecategoryMapper; + @Autowired + LocationMapper locationMapper; + @Autowired + ScraprecordMapper scraprecordMapper; + @Autowired + OperationlogMapper operationlogMapper; + @Autowired + MaintenancerecordMapper maintenancerecordMapper; + + @Override + public IPage devicePage(findDevicePageFrom map) { + Page objectPage = new Page<>(map.getCurrent(),map.getSize()); + QueryWrapper objectQueryWrapper = new QueryWrapper<>(); + objectQueryWrapper.eq("Status",0); + if (map.getDeviceType()!=null){ + objectQueryWrapper.eq("DeviceType",map.getDeviceType()); + } + if (map.getLocation()!=null){ + objectQueryWrapper.eq("Location",map.getLocation()); + } + IPage deviceIPage = deviceMapper.selectPage(objectPage, objectQueryWrapper); + List records = deviceIPage.getRecords(); + List devicePageDtos = new ArrayList<>(); + for (Device record : records) { + devicePageDto devicePageDto = new devicePageDto(); + BeanUtils.copyProperties(record,devicePageDto); + Devicecategory devicecategory = devicecategoryMapper.selectById(record.getDeviceType()); + devicePageDto.setType(devicecategory.getCategoryName()); + Location location = locationMapper.selectById(record.getLocation()); + devicePageDto.setLocationName(location.getLocationName()); + + devicePageDtos.add(devicePageDto); + } + IPage devicePageDtoIPage = new Page<>(); + BeanUtils.copyProperties(deviceIPage,devicePageDtoIPage); + devicePageDtoIPage.setRecords(devicePageDtos); + return devicePageDtoIPage; + } + @Override + public void addDevice(Device map) { + map.setPurchaseDate(LocalDate.now()); + deviceMapper.insert(map); + Operationlog operationlog = new Operationlog(); + operationlog.setOperationType("运行"); + // 获取当前日期 + LocalDate currentDate = LocalDate.now(); + operationlog.setOperationTime(currentDate); + operationlog.setOperationDescription("成功"); + operationlogMapper.insert(operationlog); + } + + @Override + public void modifyDevice(Device map) { + deviceMapper.updateById(map); + Maintenancerecord maintenancerecord = new Maintenancerecord(); + maintenancerecord.setDeviceID(map.getDeviceID()); + maintenancerecord.setMaintenanceType("日常维护"); + maintenancerecord.setMaintenanceDate(LocalDate.now()); + maintenancerecord.setMaintenanceDetails("成功"); + maintenancerecord.setMaintenanceCost(new BigDecimal(100)); + maintenancerecord.setTechnician("admin"); + maintenancerecord.setTechnician("admin"); + LocalDate currentDate = LocalDate.now(); + LocalDate datePlusOneMonth = currentDate.plusMonths(1); + maintenancerecord.setNextMaintenanceDate(datePlusOneMonth); + maintenancerecordMapper.insert(maintenancerecord); + + } + + @Override + public void delDevice(String id) { + deviceMapper.update(null,new UpdateWrapper().eq("DeviceID",id).set("Status",1)); + + Scraprecord scraprecord = new Scraprecord(); + scraprecord.setDeviceID(Integer.valueOf(id)); + scraprecord.setScrapReason("日常报废"); + scraprecord.setDisposalMethod("设备到期"); + scraprecord.setScrapDate(LocalDate.now()); + scraprecordMapper.insert(scraprecord); + } + + +} diff --git a/device/src/main/java/com/service/impl/DevicecategoryServiceImpl.java b/device/src/main/java/com/service/impl/DevicecategoryServiceImpl.java new file mode 100644 index 0000000..8fe3c56 --- /dev/null +++ b/device/src/main/java/com/service/impl/DevicecategoryServiceImpl.java @@ -0,0 +1,20 @@ +package com.service.impl; + +import com.entity.Devicecategory; +import com.mapper.DevicecategoryMapper; +import com.service.DevicecategoryService; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import org.springframework.stereotype.Service; + +/** + *

+ * 服务实现类 + *

+ * + * @author 刘宇豪 + * @since 2024年12月28日 + */ +@Service +public class DevicecategoryServiceImpl extends ServiceImpl implements DevicecategoryService { + +} diff --git a/device/src/main/java/com/service/impl/LocationServiceImpl.java b/device/src/main/java/com/service/impl/LocationServiceImpl.java new file mode 100644 index 0000000..2b7dff0 --- /dev/null +++ b/device/src/main/java/com/service/impl/LocationServiceImpl.java @@ -0,0 +1,20 @@ +package com.service.impl; + +import com.entity.Location; +import com.mapper.LocationMapper; +import com.service.LocationService; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import org.springframework.stereotype.Service; + +/** + *

+ * 服务实现类 + *

+ * + * @author 刘宇豪 + * @since 2024年12月28日 + */ +@Service +public class LocationServiceImpl extends ServiceImpl implements LocationService { + +} diff --git a/device/src/main/java/com/service/impl/MaintenancerecordServiceImpl.java b/device/src/main/java/com/service/impl/MaintenancerecordServiceImpl.java new file mode 100644 index 0000000..d9771a6 --- /dev/null +++ b/device/src/main/java/com/service/impl/MaintenancerecordServiceImpl.java @@ -0,0 +1,20 @@ +package com.service.impl; + +import com.entity.Maintenancerecord; +import com.mapper.MaintenancerecordMapper; +import com.service.MaintenancerecordService; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import org.springframework.stereotype.Service; + +/** + *

+ * 服务实现类 + *

+ * + * @author 刘宇豪 + * @since 2024年12月28日 + */ +@Service +public class MaintenancerecordServiceImpl extends ServiceImpl implements MaintenancerecordService { + +} diff --git a/device/src/main/java/com/service/impl/OperationlogServiceImpl.java b/device/src/main/java/com/service/impl/OperationlogServiceImpl.java new file mode 100644 index 0000000..c36abfb --- /dev/null +++ b/device/src/main/java/com/service/impl/OperationlogServiceImpl.java @@ -0,0 +1,20 @@ +package com.service.impl; + +import com.entity.Operationlog; +import com.mapper.OperationlogMapper; +import com.service.OperationlogService; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import org.springframework.stereotype.Service; + +/** + *

+ * 服务实现类 + *

+ * + * @author 刘宇豪 + * @since 2024年12月28日 + */ +@Service +public class OperationlogServiceImpl extends ServiceImpl implements OperationlogService { + +} diff --git a/device/src/main/java/com/service/impl/RoleServiceImpl.java b/device/src/main/java/com/service/impl/RoleServiceImpl.java new file mode 100644 index 0000000..a27a49c --- /dev/null +++ b/device/src/main/java/com/service/impl/RoleServiceImpl.java @@ -0,0 +1,20 @@ +package com.service.impl; + +import com.entity.Role; +import com.mapper.RoleMapper; +import com.service.RoleService; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import org.springframework.stereotype.Service; + +/** + *

+ * 服务实现类 + *

+ * + * @author 刘宇豪 + * @since 2024年12月28日 + */ +@Service +public class RoleServiceImpl extends ServiceImpl implements RoleService { + +} diff --git a/device/src/main/java/com/service/impl/ScraprecordServiceImpl.java b/device/src/main/java/com/service/impl/ScraprecordServiceImpl.java new file mode 100644 index 0000000..f1ce22a --- /dev/null +++ b/device/src/main/java/com/service/impl/ScraprecordServiceImpl.java @@ -0,0 +1,20 @@ +package com.service.impl; + +import com.entity.Scraprecord; +import com.mapper.ScraprecordMapper; +import com.service.ScraprecordService; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import org.springframework.stereotype.Service; + +/** + *

+ * 服务实现类 + *

+ * + * @author 刘宇豪 + * @since 2024年12月28日 + */ +@Service +public class ScraprecordServiceImpl extends ServiceImpl implements ScraprecordService { + +} diff --git a/device/src/main/java/com/service/impl/SupplierServiceImpl.java b/device/src/main/java/com/service/impl/SupplierServiceImpl.java new file mode 100644 index 0000000..4ece0b8 --- /dev/null +++ b/device/src/main/java/com/service/impl/SupplierServiceImpl.java @@ -0,0 +1,20 @@ +package com.service.impl; + +import com.entity.Supplier; +import com.mapper.SupplierMapper; +import com.service.SupplierService; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import org.springframework.stereotype.Service; + +/** + *

+ * 服务实现类 + *

+ * + * @author 刘宇豪 + * @since 2024年12月28日 + */ +@Service +public class SupplierServiceImpl extends ServiceImpl implements SupplierService { + +} diff --git a/device/src/main/java/com/service/impl/UsagerecordServiceImpl.java b/device/src/main/java/com/service/impl/UsagerecordServiceImpl.java new file mode 100644 index 0000000..d54fd53 --- /dev/null +++ b/device/src/main/java/com/service/impl/UsagerecordServiceImpl.java @@ -0,0 +1,20 @@ +package com.service.impl; + +import com.entity.Usagerecord; +import com.mapper.UsagerecordMapper; +import com.service.UsagerecordService; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import org.springframework.stereotype.Service; + +/** + *

+ * 服务实现类 + *

+ * + * @author 刘宇豪 + * @since 2024年12月28日 + */ +@Service +public class UsagerecordServiceImpl extends ServiceImpl implements UsagerecordService { + +} diff --git a/device/src/main/java/com/service/impl/UserServiceImpl.java b/device/src/main/java/com/service/impl/UserServiceImpl.java new file mode 100644 index 0000000..d7669dd --- /dev/null +++ b/device/src/main/java/com/service/impl/UserServiceImpl.java @@ -0,0 +1,20 @@ +package com.service.impl; + +import com.entity.User; +import com.mapper.UserMapper; +import com.service.UserService; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import org.springframework.stereotype.Service; + +/** + *

+ * 服务实现类 + *

+ * + * @author 刘宇豪 + * @since 2024年12月28日 + */ +@Service +public class UserServiceImpl extends ServiceImpl implements UserService { + +} diff --git a/device/src/main/resources/application.yml b/device/src/main/resources/application.yml new file mode 100644 index 0000000..e1de333 --- /dev/null +++ b/device/src/main/resources/application.yml @@ -0,0 +1,14 @@ +spring: + datasource: + url: jdbc:mysql://localhost:3306/a?serverTimezone=Asia/Shanghai&useUnicode=true&characterEncoding=utf-8 + username: "root" + password: "013013" + driver-class-name: com.mysql.cj.jdbc.Driver +mybatis-plus: + mapperLocations: classpath:/mapper/*Mapper.xml + configuration: + log-impl: org.apache.ibatis.logging.stdout.StdOutImpl +server: + port: 80 + tomcat: + basedir: /home/tmp \ No newline at end of file diff --git a/device/src/main/resources/mapper/DevicecategoryMapper.xml b/device/src/main/resources/mapper/DevicecategoryMapper.xml new file mode 100644 index 0000000..1b5d7b0 --- /dev/null +++ b/device/src/main/resources/mapper/DevicecategoryMapper.xml @@ -0,0 +1,16 @@ + + + + + + + + + + + + + CategoryID, CategoryName + + + diff --git a/device/src/main/resources/mapper/LocationMapper.xml b/device/src/main/resources/mapper/LocationMapper.xml new file mode 100644 index 0000000..a53f180 --- /dev/null +++ b/device/src/main/resources/mapper/LocationMapper.xml @@ -0,0 +1,17 @@ + + + + + + + + + + + + + + LocationID, LocationName, LocationDescription + + + diff --git a/device/src/main/resources/mapper/MaintenancerecordMapper.xml b/device/src/main/resources/mapper/MaintenancerecordMapper.xml new file mode 100644 index 0000000..dcd26a1 --- /dev/null +++ b/device/src/main/resources/mapper/MaintenancerecordMapper.xml @@ -0,0 +1,22 @@ + + + + + + + + + + + + + + + + + + + MaintenanceID, DeviceID, MaintenanceType, MaintenanceDate, Technician, MaintenanceDetails, MaintenanceCost, NextMaintenanceDate + + + diff --git a/device/src/main/resources/mapper/OperationlogMapper.xml b/device/src/main/resources/mapper/OperationlogMapper.xml new file mode 100644 index 0000000..bd25fc1 --- /dev/null +++ b/device/src/main/resources/mapper/OperationlogMapper.xml @@ -0,0 +1,18 @@ + + + + + + + + + + + + + + + LogID, OperationType, OperationTime, OperationDescription + + + diff --git a/device/src/main/resources/mapper/RoleMapper.xml b/device/src/main/resources/mapper/RoleMapper.xml new file mode 100644 index 0000000..bd07b02 --- /dev/null +++ b/device/src/main/resources/mapper/RoleMapper.xml @@ -0,0 +1,17 @@ + + + + + + + + + + + + + + RoleID, RoleName, PermissionDescription + + + diff --git a/device/src/main/resources/mapper/ScraprecordMapper.xml b/device/src/main/resources/mapper/ScraprecordMapper.xml new file mode 100644 index 0000000..1bf8c4a --- /dev/null +++ b/device/src/main/resources/mapper/ScraprecordMapper.xml @@ -0,0 +1,19 @@ + + + + + + + + + + + + + + + + ScrapID, DeviceID, ScrapDate, ScrapReason, DisposalMethod + + + diff --git a/device/src/main/resources/mapper/SupplierMapper.xml b/device/src/main/resources/mapper/SupplierMapper.xml new file mode 100644 index 0000000..3d0d7dd --- /dev/null +++ b/device/src/main/resources/mapper/SupplierMapper.xml @@ -0,0 +1,19 @@ + + + + + + + + + + + + + + + + SupplierID, SupplierName, ContactPerson, ContactPhone, Address + + + diff --git a/device/src/main/resources/mapper/UsagerecordMapper.xml b/device/src/main/resources/mapper/UsagerecordMapper.xml new file mode 100644 index 0000000..d5978d0 --- /dev/null +++ b/device/src/main/resources/mapper/UsagerecordMapper.xml @@ -0,0 +1,21 @@ + + + + + + + + + + + + + + + + + + UsageID, DeviceID, UserID, UsageDate, UsageTime, UsageType, UsageDesc + + + diff --git a/device/src/main/resources/mapper/UserMapper.xml b/device/src/main/resources/mapper/UserMapper.xml new file mode 100644 index 0000000..c6d0a2a --- /dev/null +++ b/device/src/main/resources/mapper/UserMapper.xml @@ -0,0 +1,18 @@ + + + + + + + + + + + + + + + UserID, UserName, Password, Role + + + diff --git a/device/src/main/resources/static/css/landc.css b/device/src/main/resources/static/css/landc.css new file mode 100644 index 0000000..ba0e970 --- /dev/null +++ b/device/src/main/resources/static/css/landc.css @@ -0,0 +1,83 @@ +*{ + margin: 0; + padding: 0; +} +body{ + background-image: url("../images/bg2.jpg"); +} +#main{ + background-color: rgba(255, 255, 255, 0.9); + width: 400px; + height: 500px; + margin: 60px auto 0rem; + border-radius: 15px; +} +.lo{ + width: 350px; + height: 80px; + border-bottom: 1px solid black; + margin: 0 auto; +} +/* .lo::after{ + content: ""; + display: block; + clear: both; +} */ +#top{ + width: 100%; + height: 100px; + margin: 0 auto ; + background-color: rgba(120, 120, 120, 0.3); + color: aliceblue; + font-size: 30px; + text-align: center; + line-height: 100px; + } +.bg{ + width: 20px; + height: 20px; + background-image: url("../images/icon-login.png"); + float: left; + margin-top: 45px; +} +.inp{ + margin-top: 45px; + float: left; + background-color: transparent; + border: 0; + outline: none; +} +.t1{ + background-position:-52px 0; +} +.t2{ + background-position:-104px 0; +} +#xl{ + width: 350px; + height: 50px; + text-align: center; + + margin: 30px auto 0; + display: block; +} +#btn{ + width: 350px; + height: 50px; + text-align: center; + background-color: rgba(0, 20, 255, 0.9); + margin: 30px auto 0; + display: block; + /* border: 0; */ + color: white; + +} +#foot{ + margin-top: 50px; + color: white; + text-align: center; +} +#a1{ + color: white; + text-decoration: none; +} \ No newline at end of file diff --git a/device/src/main/resources/static/device.html b/device/src/main/resources/static/device.html new file mode 100644 index 0000000..a66a396 --- /dev/null +++ b/device/src/main/resources/static/device.html @@ -0,0 +1,293 @@ + + + + + + + + + + + + + + + + +
+ + + 查找 + 运行 + + + + + + + + + + + + + + + 取 消 + 确 定 + + + + + + + + + + + + 取 消 + 确 定 + + + +
+ + + + \ No newline at end of file diff --git a/device/src/main/resources/static/index.html b/device/src/main/resources/static/index.html new file mode 100644 index 0000000..1746eba --- /dev/null +++ b/device/src/main/resources/static/index.html @@ -0,0 +1,82 @@ + + + + + + + + + + + + + + + + +
+ + + + + + + 设备管理 + 维护管理 + + + + + 操作日志管理 + 报废记录管理 + 用户日志 + + + + + + 供应商管理 + + + + + + + + +
+ + + + + \ No newline at end of file diff --git a/device/src/main/resources/static/js/axios.min.js b/device/src/main/resources/static/js/axios.min.js new file mode 100644 index 0000000..2d03054 --- /dev/null +++ b/device/src/main/resources/static/js/axios.min.js @@ -0,0 +1,3 @@ +/* axios v0.20.0 | (c) 2020 by Matt Zabriskie */ +!function(e,t){"object"==typeof exports&&"object"==typeof module?module.exports=t():"function"==typeof define&&define.amd?define([],t):"object"==typeof exports?exports.axios=t():e.axios=t()}(this,function(){return function(e){function t(r){if(n[r])return n[r].exports;var o=n[r]={exports:{},id:r,loaded:!1};return e[r].call(o.exports,o,o.exports,t),o.loaded=!0,o.exports}var n={};return t.m=e,t.c=n,t.p="",t(0)}([function(e,t,n){e.exports=n(1)},function(e,t,n){"use strict";function r(e){var t=new s(e),n=i(s.prototype.request,t);return o.extend(n,s.prototype,t),o.extend(n,t),n}var o=n(2),i=n(3),s=n(4),a=n(22),u=n(10),c=r(u);c.Axios=s,c.create=function(e){return r(a(c.defaults,e))},c.Cancel=n(23),c.CancelToken=n(24),c.isCancel=n(9),c.all=function(e){return Promise.all(e)},c.spread=n(25),e.exports=c,e.exports.default=c},function(e,t,n){"use strict";function r(e){return"[object Array]"===R.call(e)}function o(e){return"undefined"==typeof e}function i(e){return null!==e&&!o(e)&&null!==e.constructor&&!o(e.constructor)&&"function"==typeof e.constructor.isBuffer&&e.constructor.isBuffer(e)}function s(e){return"[object ArrayBuffer]"===R.call(e)}function a(e){return"undefined"!=typeof FormData&&e instanceof FormData}function u(e){var t;return t="undefined"!=typeof ArrayBuffer&&ArrayBuffer.isView?ArrayBuffer.isView(e):e&&e.buffer&&e.buffer instanceof ArrayBuffer}function c(e){return"string"==typeof e}function f(e){return"number"==typeof e}function p(e){return null!==e&&"object"==typeof e}function d(e){if("[object Object]"!==R.call(e))return!1;var t=Object.getPrototypeOf(e);return null===t||t===Object.prototype}function l(e){return"[object Date]"===R.call(e)}function h(e){return"[object File]"===R.call(e)}function m(e){return"[object Blob]"===R.call(e)}function y(e){return"[object Function]"===R.call(e)}function g(e){return p(e)&&y(e.pipe)}function v(e){return"undefined"!=typeof URLSearchParams&&e instanceof URLSearchParams}function x(e){return e.replace(/^\s*/,"").replace(/\s*$/,"")}function w(){return("undefined"==typeof navigator||"ReactNative"!==navigator.product&&"NativeScript"!==navigator.product&&"NS"!==navigator.product)&&("undefined"!=typeof window&&"undefined"!=typeof document)}function b(e,t){if(null!==e&&"undefined"!=typeof e)if("object"!=typeof e&&(e=[e]),r(e))for(var n=0,o=e.length;n=200&&e<300}};u.headers={common:{Accept:"application/json, text/plain, */*"}},i.forEach(["delete","get","head"],function(e){u.headers[e]={}}),i.forEach(["post","put","patch"],function(e){u.headers[e]=i.merge(a)}),e.exports=u},function(e,t,n){"use strict";var r=n(2);e.exports=function(e,t){r.forEach(e,function(n,r){r!==t&&r.toUpperCase()===t.toUpperCase()&&(e[t]=n,delete e[r])})}},function(e,t,n){"use strict";var r=n(2),o=n(13),i=n(16),s=n(5),a=n(17),u=n(20),c=n(21),f=n(14);e.exports=function(e){return new Promise(function(t,n){var p=e.data,d=e.headers;r.isFormData(p)&&delete d["Content-Type"],(r.isBlob(p)||r.isFile(p))&&p.type&&delete d["Content-Type"];var l=new XMLHttpRequest;if(e.auth){var h=e.auth.username||"",m=unescape(encodeURIComponent(e.auth.password))||"";d.Authorization="Basic "+btoa(h+":"+m)}var y=a(e.baseURL,e.url);if(l.open(e.method.toUpperCase(),s(y,e.params,e.paramsSerializer),!0),l.timeout=e.timeout,l.onreadystatechange=function(){if(l&&4===l.readyState&&(0!==l.status||l.responseURL&&0===l.responseURL.indexOf("file:"))){var r="getAllResponseHeaders"in l?u(l.getAllResponseHeaders()):null,i=e.responseType&&"text"!==e.responseType?l.response:l.responseText,s={data:i,status:l.status,statusText:l.statusText,headers:r,config:e,request:l};o(t,n,s),l=null}},l.onabort=function(){l&&(n(f("Request aborted",e,"ECONNABORTED",l)),l=null)},l.onerror=function(){n(f("Network Error",e,null,l)),l=null},l.ontimeout=function(){var t="timeout of "+e.timeout+"ms exceeded";e.timeoutErrorMessage&&(t=e.timeoutErrorMessage),n(f(t,e,"ECONNABORTED",l)),l=null},r.isStandardBrowserEnv()){var g=(e.withCredentials||c(y))&&e.xsrfCookieName?i.read(e.xsrfCookieName):void 0;g&&(d[e.xsrfHeaderName]=g)}if("setRequestHeader"in l&&r.forEach(d,function(e,t){"undefined"==typeof p&&"content-type"===t.toLowerCase()?delete d[t]:l.setRequestHeader(t,e)}),r.isUndefined(e.withCredentials)||(l.withCredentials=!!e.withCredentials),e.responseType)try{l.responseType=e.responseType}catch(t){if("json"!==e.responseType)throw t}"function"==typeof e.onDownloadProgress&&l.addEventListener("progress",e.onDownloadProgress),"function"==typeof e.onUploadProgress&&l.upload&&l.upload.addEventListener("progress",e.onUploadProgress),e.cancelToken&&e.cancelToken.promise.then(function(e){l&&(l.abort(),n(e),l=null)}),p||(p=null),l.send(p)})}},function(e,t,n){"use strict";var r=n(14);e.exports=function(e,t,n){var o=n.config.validateStatus;n.status&&o&&!o(n.status)?t(r("Request failed with status code "+n.status,n.config,null,n.request,n)):e(n)}},function(e,t,n){"use strict";var r=n(15);e.exports=function(e,t,n,o,i){var s=new Error(e);return r(s,t,n,o,i)}},function(e,t){"use strict";e.exports=function(e,t,n,r,o){return e.config=t,n&&(e.code=n),e.request=r,e.response=o,e.isAxiosError=!0,e.toJSON=function(){return{message:this.message,name:this.name,description:this.description,number:this.number,fileName:this.fileName,lineNumber:this.lineNumber,columnNumber:this.columnNumber,stack:this.stack,config:this.config,code:this.code}},e}},function(e,t,n){"use strict";var r=n(2);e.exports=r.isStandardBrowserEnv()?function(){return{write:function(e,t,n,o,i,s){var a=[];a.push(e+"="+encodeURIComponent(t)),r.isNumber(n)&&a.push("expires="+new Date(n).toGMTString()),r.isString(o)&&a.push("path="+o),r.isString(i)&&a.push("domain="+i),s===!0&&a.push("secure"),document.cookie=a.join("; ")},read:function(e){var t=document.cookie.match(new RegExp("(^|;\\s*)("+e+")=([^;]*)"));return t?decodeURIComponent(t[3]):null},remove:function(e){this.write(e,"",Date.now()-864e5)}}}():function(){return{write:function(){},read:function(){return null},remove:function(){}}}()},function(e,t,n){"use strict";var r=n(18),o=n(19);e.exports=function(e,t){return e&&!r(t)?o(e,t):t}},function(e,t){"use strict";e.exports=function(e){return/^([a-z][a-z\d\+\-\.]*:)?\/\//i.test(e)}},function(e,t){"use strict";e.exports=function(e,t){return t?e.replace(/\/+$/,"")+"/"+t.replace(/^\/+/,""):e}},function(e,t,n){"use strict";var r=n(2),o=["age","authorization","content-length","content-type","etag","expires","from","host","if-modified-since","if-unmodified-since","last-modified","location","max-forwards","proxy-authorization","referer","retry-after","user-agent"];e.exports=function(e){var t,n,i,s={};return e?(r.forEach(e.split("\n"),function(e){if(i=e.indexOf(":"),t=r.trim(e.substr(0,i)).toLowerCase(),n=r.trim(e.substr(i+1)),t){if(s[t]&&o.indexOf(t)>=0)return;"set-cookie"===t?s[t]=(s[t]?s[t]:[]).concat([n]):s[t]=s[t]?s[t]+", "+n:n}}),s):s}},function(e,t,n){"use strict";var r=n(2);e.exports=r.isStandardBrowserEnv()?function(){function e(e){var t=e;return n&&(o.setAttribute("href",t),t=o.href),o.setAttribute("href",t),{href:o.href,protocol:o.protocol?o.protocol.replace(/:$/,""):"",host:o.host,search:o.search?o.search.replace(/^\?/,""):"",hash:o.hash?o.hash.replace(/^#/,""):"",hostname:o.hostname,port:o.port,pathname:"/"===o.pathname.charAt(0)?o.pathname:"/"+o.pathname}}var t,n=/(msie|trident)/i.test(navigator.userAgent),o=document.createElement("a");return t=e(window.location.href),function(n){var o=r.isString(n)?e(n):n;return o.protocol===t.protocol&&o.host===t.host}}():function(){return function(){return!0}}()},function(e,t,n){"use strict";var r=n(2);e.exports=function(e,t){function n(e,t){return r.isPlainObject(e)&&r.isPlainObject(t)?r.merge(e,t):r.isPlainObject(t)?r.merge({},t):r.isArray(t)?t.slice():t}function o(o){r.isUndefined(t[o])?r.isUndefined(e[o])||(i[o]=n(void 0,e[o])):i[o]=n(e[o],t[o])}t=t||{};var i={},s=["url","method","data"],a=["headers","auth","proxy","params"],u=["baseURL","transformRequest","transformResponse","paramsSerializer","timeout","timeoutMessage","withCredentials","adapter","responseType","xsrfCookieName","xsrfHeaderName","onUploadProgress","onDownloadProgress","decompress","maxContentLength","maxBodyLength","maxRedirects","transport","httpAgent","httpsAgent","cancelToken","socketPath","responseEncoding"],c=["validateStatus"];r.forEach(s,function(e){r.isUndefined(t[e])||(i[e]=n(void 0,t[e]))}),r.forEach(a,o),r.forEach(u,function(o){r.isUndefined(t[o])?r.isUndefined(e[o])||(i[o]=n(void 0,e[o])):i[o]=n(void 0,t[o])}),r.forEach(c,function(r){r in t?i[r]=n(e[r],t[r]):r in e&&(i[r]=n(void 0,e[r]))});var f=s.concat(a).concat(u).concat(c),p=Object.keys(e).concat(Object.keys(t)).filter(function(e){return f.indexOf(e)===-1});return r.forEach(p,o),i}},function(e,t){"use strict";function n(e){this.message=e}n.prototype.toString=function(){return"Cancel"+(this.message?": "+this.message:"")},n.prototype.__CANCEL__=!0,e.exports=n},function(e,t,n){"use strict";function r(e){if("function"!=typeof e)throw new TypeError("executor must be a function.");var t;this.promise=new Promise(function(e){t=e});var n=this;e(function(e){n.reason||(n.reason=new o(e),t(n.reason))})}var o=n(23);r.prototype.throwIfRequested=function(){if(this.reason)throw this.reason},r.source=function(){var e,t=new r(function(t){e=t});return{token:t,cancel:e}},e.exports=r},function(e,t){"use strict";e.exports=function(e){return function(t){return e.apply(null,t)}}}])}); +//# sourceMappingURL=axios.min.map \ No newline at end of file diff --git a/device/src/main/resources/static/js/element.js b/device/src/main/resources/static/js/element.js new file mode 100644 index 0000000..6d6592f --- /dev/null +++ b/device/src/main/resources/static/js/element.js @@ -0,0 +1 @@ +!function(e,t){"object"==typeof exports&&"object"==typeof module?module.exports=t(require("vue")):"function"==typeof define&&define.amd?define("ELEMENT",["vue"],t):"object"==typeof exports?exports.ELEMENT=t(require("vue")):e.ELEMENT=t(e.Vue)}("undefined"!=typeof self?self:this,function(e){return function(e){var t={};function n(i){if(t[i])return t[i].exports;var r=t[i]={i:i,l:!1,exports:{}};return e[i].call(r.exports,r,r.exports,n),r.l=!0,r.exports}return n.m=e,n.c=t,n.d=function(e,t,i){n.o(e,t)||Object.defineProperty(e,t,{enumerable:!0,get:i})},n.r=function(e){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},n.t=function(e,t){if(1&t&&(e=n(e)),8&t)return e;if(4&t&&"object"==typeof e&&e&&e.__esModule)return e;var i=Object.create(null);if(n.r(i),Object.defineProperty(i,"default",{enumerable:!0,value:e}),2&t&&"string"!=typeof e)for(var r in e)n.d(i,r,function(t){return e[t]}.bind(null,r));return i},n.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return n.d(t,"a",t),t},n.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},n.p="/dist/",n(n.s=51)}([function(t,n){t.exports=e},function(e,t,n){var i=n(4);e.exports=function(e,t,n){return void 0===n?i(e,t,!1):i(e,n,!1!==t)}},function(e,t,n){var i;!function(r){"use strict";var o={},s=/d{1,4}|M{1,4}|yy(?:yy)?|S{1,3}|Do|ZZ|([HhMsDm])\1?|[aA]|"[^"]*"|'[^']*'/g,a="[^\\s]+",l=/\[([^]*?)\]/gm,u=function(){};function c(e,t){for(var n=[],i=0,r=e.length;i3?0:(e-e%10!=10)*e%10]}};var g={D:function(e){return e.getDay()},DD:function(e){return d(e.getDay())},Do:function(e,t){return t.DoFn(e.getDate())},d:function(e){return e.getDate()},dd:function(e){return d(e.getDate())},ddd:function(e,t){return t.dayNamesShort[e.getDay()]},dddd:function(e,t){return t.dayNames[e.getDay()]},M:function(e){return e.getMonth()+1},MM:function(e){return d(e.getMonth()+1)},MMM:function(e,t){return t.monthNamesShort[e.getMonth()]},MMMM:function(e,t){return t.monthNames[e.getMonth()]},yy:function(e){return d(String(e.getFullYear()),4).substr(2)},yyyy:function(e){return d(e.getFullYear(),4)},h:function(e){return e.getHours()%12||12},hh:function(e){return d(e.getHours()%12||12)},H:function(e){return e.getHours()},HH:function(e){return d(e.getHours())},m:function(e){return e.getMinutes()},mm:function(e){return d(e.getMinutes())},s:function(e){return e.getSeconds()},ss:function(e){return d(e.getSeconds())},S:function(e){return Math.round(e.getMilliseconds()/100)},SS:function(e){return d(Math.round(e.getMilliseconds()/10),2)},SSS:function(e){return d(e.getMilliseconds(),3)},a:function(e,t){return e.getHours()<12?t.amPm[0]:t.amPm[1]},A:function(e,t){return e.getHours()<12?t.amPm[0].toUpperCase():t.amPm[1].toUpperCase()},ZZ:function(e){var t=e.getTimezoneOffset();return(t>0?"-":"+")+d(100*Math.floor(Math.abs(t)/60)+Math.abs(t)%60,4)}},y={d:["\\d\\d?",function(e,t){e.day=t}],Do:["\\d\\d?"+a,function(e,t){e.day=parseInt(t,10)}],M:["\\d\\d?",function(e,t){e.month=t-1}],yy:["\\d\\d?",function(e,t){var n=+(""+(new Date).getFullYear()).substr(0,2);e.year=""+(t>68?n-1:n)+t}],h:["\\d\\d?",function(e,t){e.hour=t}],m:["\\d\\d?",function(e,t){e.minute=t}],s:["\\d\\d?",function(e,t){e.second=t}],yyyy:["\\d{4}",function(e,t){e.year=t}],S:["\\d",function(e,t){e.millisecond=100*t}],SS:["\\d{2}",function(e,t){e.millisecond=10*t}],SSS:["\\d{3}",function(e,t){e.millisecond=t}],D:["\\d\\d?",u],ddd:[a,u],MMM:[a,h("monthNamesShort")],MMMM:[a,h("monthNames")],a:[a,function(e,t,n){var i=t.toLowerCase();i===n.amPm[0]?e.isPm=!1:i===n.amPm[1]&&(e.isPm=!0)}],ZZ:["[^\\s]*?[\\+\\-]\\d\\d:?\\d\\d|[^\\s]*?Z",function(e,t){var n,i=(t+"").match(/([+-]|\d\d)/gi);i&&(n=60*i[1]+parseInt(i[2],10),e.timezoneOffset="+"===i[0]?n:-n)}]};y.dd=y.d,y.dddd=y.ddd,y.DD=y.D,y.mm=y.m,y.hh=y.H=y.HH=y.h,y.MM=y.M,y.ss=y.s,y.A=y.a,o.masks={default:"ddd MMM dd yyyy HH:mm:ss",shortDate:"M/D/yy",mediumDate:"MMM d, yyyy",longDate:"MMMM d, yyyy",fullDate:"dddd, MMMM d, yyyy",shortTime:"HH:mm",mediumTime:"HH:mm:ss",longTime:"HH:mm:ss.SSS"},o.format=function(e,t,n){var i=n||o.i18n;if("number"==typeof e&&(e=new Date(e)),"[object Date]"!==Object.prototype.toString.call(e)||isNaN(e.getTime()))throw new Error("Invalid Date in fecha.format");t=o.masks[t]||t||o.masks.default;var r=[];return(t=(t=t.replace(l,function(e,t){return r.push(t),"@@@"})).replace(s,function(t){return t in g?g[t](e,i):t.slice(1,t.length-1)})).replace(/@@@/g,function(){return r.shift()})},o.parse=function(e,t,n){var i=n||o.i18n;if("string"!=typeof t)throw new Error("Invalid format in fecha.parse");if(t=o.masks[t]||t,e.length>1e3)return null;var r={},a=[],u=[];t=t.replace(l,function(e,t){return u.push(t),"@@@"});var c,h=(c=t,c.replace(/[|\\{()[^$+*?.-]/g,"\\$&")).replace(s,function(e){if(y[e]){var t=y[e];return a.push(t[1]),"("+t[0]+")"}return e});h=h.replace(/@@@/g,function(){return u.shift()});var d=e.match(new RegExp(h,"i"));if(!d)return null;for(var f=1;fe?u():!0!==t&&(r=setTimeout(i?function(){r=void 0}:u,void 0===i?e-a:e))}}},function(e,t){var n=e.exports="undefined"!=typeof window&&window.Math==Math?window:"undefined"!=typeof self&&self.Math==Math?self:Function("return this")();"number"==typeof __g&&(__g=n)},function(e,t){var n=/^(attrs|props|on|nativeOn|class|style|hook)$/;function i(e,t){return function(){e&&e.apply(this,arguments),t&&t.apply(this,arguments)}}e.exports=function(e){return e.reduce(function(e,t){var r,o,s,a,l;for(s in t)if(r=e[s],o=t[s],r&&n.test(s))if("class"===s&&("string"==typeof r&&(l=r,e[s]=r={},r[l]=!0),"string"==typeof o&&(l=o,t[s]=o={},o[l]=!0)),"on"===s||"nativeOn"===s||"hook"===s)for(a in o)r[a]=i(r[a],o[a]);else if(Array.isArray(r))e[s]=r.concat(o);else if(Array.isArray(o))e[s]=[r].concat(o);else for(a in o)r[a]=o[a];else e[s]=t[s];return e},{})}},function(e,t){var n={}.hasOwnProperty;e.exports=function(e,t){return n.call(e,t)}},function(e,t,n){"use strict";t.__esModule=!0;var i,r=n(57),o=(i=r)&&i.__esModule?i:{default:i};t.default=o.default||function(e){for(var t=1;t>>1,z=[["ary",k],["bind",g],["bindKey",y],["curry",_],["curryRight",w],["flip",D],["partial",x],["partialRight",C],["rearg",S]],R="[object Arguments]",H="[object Array]",j="[object AsyncFunction]",W="[object Boolean]",q="[object Date]",Y="[object DOMException]",K="[object Error]",U="[object Function]",G="[object GeneratorFunction]",X="[object Map]",Z="[object Number]",J="[object Null]",Q="[object Object]",ee="[object Proxy]",te="[object RegExp]",ne="[object Set]",ie="[object String]",re="[object Symbol]",oe="[object Undefined]",se="[object WeakMap]",ae="[object WeakSet]",le="[object ArrayBuffer]",ue="[object DataView]",ce="[object Float32Array]",he="[object Float64Array]",de="[object Int8Array]",fe="[object Int16Array]",pe="[object Int32Array]",me="[object Uint8Array]",ve="[object Uint8ClampedArray]",ge="[object Uint16Array]",ye="[object Uint32Array]",be=/\b__p \+= '';/g,_e=/\b(__p \+=) '' \+/g,we=/(__e\(.*?\)|\b__t\)) \+\n'';/g,xe=/&(?:amp|lt|gt|quot|#39);/g,Ce=/[&<>"']/g,ke=RegExp(xe.source),Se=RegExp(Ce.source),De=/<%-([\s\S]+?)%>/g,Ee=/<%([\s\S]+?)%>/g,$e=/<%=([\s\S]+?)%>/g,Te=/\.|\[(?:[^[\]]*|(["'])(?:(?!\1)[^\\]|\\.)*?\1)\]/,Me=/^\w*$/,Ne=/[^.[\]]+|\[(?:(-?\d+(?:\.\d+)?)|(["'])((?:(?!\2)[^\\]|\\.)*?)\2)\]|(?=(?:\.|\[\])(?:\.|\[\]|$))/g,Oe=/[\\^$.*+?()[\]{}|]/g,Pe=RegExp(Oe.source),Ie=/^\s+|\s+$/g,Ae=/^\s+/,Fe=/\s+$/,Le=/\{(?:\n\/\* \[wrapped with .+\] \*\/)?\n?/,Ve=/\{\n\/\* \[wrapped with (.+)\] \*/,Be=/,? & /,ze=/[^\x00-\x2f\x3a-\x40\x5b-\x60\x7b-\x7f]+/g,Re=/\\(\\)?/g,He=/\$\{([^\\}]*(?:\\.[^\\}]*)*)\}/g,je=/\w*$/,We=/^[-+]0x[0-9a-f]+$/i,qe=/^0b[01]+$/i,Ye=/^\[object .+?Constructor\]$/,Ke=/^0o[0-7]+$/i,Ue=/^(?:0|[1-9]\d*)$/,Ge=/[\xc0-\xd6\xd8-\xf6\xf8-\xff\u0100-\u017f]/g,Xe=/($^)/,Ze=/['\n\r\u2028\u2029\\]/g,Je="\\u0300-\\u036f\\ufe20-\\ufe2f\\u20d0-\\u20ff",Qe="\\xac\\xb1\\xd7\\xf7\\x00-\\x2f\\x3a-\\x40\\x5b-\\x60\\x7b-\\xbf\\u2000-\\u206f \\t\\x0b\\f\\xa0\\ufeff\\n\\r\\u2028\\u2029\\u1680\\u180e\\u2000\\u2001\\u2002\\u2003\\u2004\\u2005\\u2006\\u2007\\u2008\\u2009\\u200a\\u202f\\u205f\\u3000",et="[\\ud800-\\udfff]",tt="["+Qe+"]",nt="["+Je+"]",it="\\d+",rt="[\\u2700-\\u27bf]",ot="[a-z\\xdf-\\xf6\\xf8-\\xff]",st="[^\\ud800-\\udfff"+Qe+it+"\\u2700-\\u27bfa-z\\xdf-\\xf6\\xf8-\\xffA-Z\\xc0-\\xd6\\xd8-\\xde]",at="\\ud83c[\\udffb-\\udfff]",lt="[^\\ud800-\\udfff]",ut="(?:\\ud83c[\\udde6-\\uddff]){2}",ct="[\\ud800-\\udbff][\\udc00-\\udfff]",ht="[A-Z\\xc0-\\xd6\\xd8-\\xde]",dt="(?:"+ot+"|"+st+")",ft="(?:"+ht+"|"+st+")",pt="(?:"+nt+"|"+at+")"+"?",mt="[\\ufe0e\\ufe0f]?"+pt+("(?:\\u200d(?:"+[lt,ut,ct].join("|")+")[\\ufe0e\\ufe0f]?"+pt+")*"),vt="(?:"+[rt,ut,ct].join("|")+")"+mt,gt="(?:"+[lt+nt+"?",nt,ut,ct,et].join("|")+")",yt=RegExp("['’]","g"),bt=RegExp(nt,"g"),_t=RegExp(at+"(?="+at+")|"+gt+mt,"g"),wt=RegExp([ht+"?"+ot+"+(?:['’](?:d|ll|m|re|s|t|ve))?(?="+[tt,ht,"$"].join("|")+")",ft+"+(?:['’](?:D|LL|M|RE|S|T|VE))?(?="+[tt,ht+dt,"$"].join("|")+")",ht+"?"+dt+"+(?:['’](?:d|ll|m|re|s|t|ve))?",ht+"+(?:['’](?:D|LL|M|RE|S|T|VE))?","\\d*(?:1ST|2ND|3RD|(?![123])\\dTH)(?=\\b|[a-z_])","\\d*(?:1st|2nd|3rd|(?![123])\\dth)(?=\\b|[A-Z_])",it,vt].join("|"),"g"),xt=RegExp("[\\u200d\\ud800-\\udfff"+Je+"\\ufe0e\\ufe0f]"),Ct=/[a-z][A-Z]|[A-Z]{2,}[a-z]|[0-9][a-zA-Z]|[a-zA-Z][0-9]|[^a-zA-Z0-9 ]/,kt=["Array","Buffer","DataView","Date","Error","Float32Array","Float64Array","Function","Int8Array","Int16Array","Int32Array","Map","Math","Object","Promise","RegExp","Set","String","Symbol","TypeError","Uint8Array","Uint8ClampedArray","Uint16Array","Uint32Array","WeakMap","_","clearTimeout","isFinite","parseInt","setTimeout"],St=-1,Dt={};Dt[ce]=Dt[he]=Dt[de]=Dt[fe]=Dt[pe]=Dt[me]=Dt[ve]=Dt[ge]=Dt[ye]=!0,Dt[R]=Dt[H]=Dt[le]=Dt[W]=Dt[ue]=Dt[q]=Dt[K]=Dt[U]=Dt[X]=Dt[Z]=Dt[Q]=Dt[te]=Dt[ne]=Dt[ie]=Dt[se]=!1;var Et={};Et[R]=Et[H]=Et[le]=Et[ue]=Et[W]=Et[q]=Et[ce]=Et[he]=Et[de]=Et[fe]=Et[pe]=Et[X]=Et[Z]=Et[Q]=Et[te]=Et[ne]=Et[ie]=Et[re]=Et[me]=Et[ve]=Et[ge]=Et[ye]=!0,Et[K]=Et[U]=Et[se]=!1;var $t={"\\":"\\","'":"'","\n":"n","\r":"r","\u2028":"u2028","\u2029":"u2029"},Tt=parseFloat,Mt=parseInt,Nt="object"==typeof e&&e&&e.Object===Object&&e,Ot="object"==typeof self&&self&&self.Object===Object&&self,Pt=Nt||Ot||Function("return this")(),It=t&&!t.nodeType&&t,At=It&&"object"==typeof i&&i&&!i.nodeType&&i,Ft=At&&At.exports===It,Lt=Ft&&Nt.process,Vt=function(){try{var e=At&&At.require&&At.require("util").types;return e||Lt&&Lt.binding&&Lt.binding("util")}catch(e){}}(),Bt=Vt&&Vt.isArrayBuffer,zt=Vt&&Vt.isDate,Rt=Vt&&Vt.isMap,Ht=Vt&&Vt.isRegExp,jt=Vt&&Vt.isSet,Wt=Vt&&Vt.isTypedArray;function qt(e,t,n){switch(n.length){case 0:return e.call(t);case 1:return e.call(t,n[0]);case 2:return e.call(t,n[0],n[1]);case 3:return e.call(t,n[0],n[1],n[2])}return e.apply(t,n)}function Yt(e,t,n,i){for(var r=-1,o=null==e?0:e.length;++r-1}function Jt(e,t,n){for(var i=-1,r=null==e?0:e.length;++i-1;);return n}function wn(e,t){for(var n=e.length;n--&&ln(t,e[n],0)>-1;);return n}var xn=fn({"À":"A","Á":"A","Â":"A","Ã":"A","Ä":"A","Å":"A","à":"a","á":"a","â":"a","ã":"a","ä":"a","å":"a","Ç":"C","ç":"c","Ð":"D","ð":"d","È":"E","É":"E","Ê":"E","Ë":"E","è":"e","é":"e","ê":"e","ë":"e","Ì":"I","Í":"I","Î":"I","Ï":"I","ì":"i","í":"i","î":"i","ï":"i","Ñ":"N","ñ":"n","Ò":"O","Ó":"O","Ô":"O","Õ":"O","Ö":"O","Ø":"O","ò":"o","ó":"o","ô":"o","õ":"o","ö":"o","ø":"o","Ù":"U","Ú":"U","Û":"U","Ü":"U","ù":"u","ú":"u","û":"u","ü":"u","Ý":"Y","ý":"y","ÿ":"y","Æ":"Ae","æ":"ae","Þ":"Th","þ":"th","ß":"ss","Ā":"A","Ă":"A","Ą":"A","ā":"a","ă":"a","ą":"a","Ć":"C","Ĉ":"C","Ċ":"C","Č":"C","ć":"c","ĉ":"c","ċ":"c","č":"c","Ď":"D","Đ":"D","ď":"d","đ":"d","Ē":"E","Ĕ":"E","Ė":"E","Ę":"E","Ě":"E","ē":"e","ĕ":"e","ė":"e","ę":"e","ě":"e","Ĝ":"G","Ğ":"G","Ġ":"G","Ģ":"G","ĝ":"g","ğ":"g","ġ":"g","ģ":"g","Ĥ":"H","Ħ":"H","ĥ":"h","ħ":"h","Ĩ":"I","Ī":"I","Ĭ":"I","Į":"I","İ":"I","ĩ":"i","ī":"i","ĭ":"i","į":"i","ı":"i","Ĵ":"J","ĵ":"j","Ķ":"K","ķ":"k","ĸ":"k","Ĺ":"L","Ļ":"L","Ľ":"L","Ŀ":"L","Ł":"L","ĺ":"l","ļ":"l","ľ":"l","ŀ":"l","ł":"l","Ń":"N","Ņ":"N","Ň":"N","Ŋ":"N","ń":"n","ņ":"n","ň":"n","ŋ":"n","Ō":"O","Ŏ":"O","Ő":"O","ō":"o","ŏ":"o","ő":"o","Ŕ":"R","Ŗ":"R","Ř":"R","ŕ":"r","ŗ":"r","ř":"r","Ś":"S","Ŝ":"S","Ş":"S","Š":"S","ś":"s","ŝ":"s","ş":"s","š":"s","Ţ":"T","Ť":"T","Ŧ":"T","ţ":"t","ť":"t","ŧ":"t","Ũ":"U","Ū":"U","Ŭ":"U","Ů":"U","Ű":"U","Ų":"U","ũ":"u","ū":"u","ŭ":"u","ů":"u","ű":"u","ų":"u","Ŵ":"W","ŵ":"w","Ŷ":"Y","ŷ":"y","Ÿ":"Y","Ź":"Z","Ż":"Z","Ž":"Z","ź":"z","ż":"z","ž":"z","IJ":"IJ","ij":"ij","Œ":"Oe","œ":"oe","ʼn":"'n","ſ":"s"}),Cn=fn({"&":"&","<":"<",">":">",'"':""","'":"'"});function kn(e){return"\\"+$t[e]}function Sn(e){return xt.test(e)}function Dn(e){var t=-1,n=Array(e.size);return e.forEach(function(e,i){n[++t]=[i,e]}),n}function En(e,t){return function(n){return e(t(n))}}function $n(e,t){for(var n=-1,i=e.length,r=0,o=[];++n",""":'"',"'":"'"});var An=function e(t){var n,i=(t=null==t?Pt:An.defaults(Pt.Object(),t,An.pick(Pt,kt))).Array,r=t.Date,Je=t.Error,Qe=t.Function,et=t.Math,tt=t.Object,nt=t.RegExp,it=t.String,rt=t.TypeError,ot=i.prototype,st=Qe.prototype,at=tt.prototype,lt=t["__core-js_shared__"],ut=st.toString,ct=at.hasOwnProperty,ht=0,dt=(n=/[^.]+$/.exec(lt&<.keys&<.keys.IE_PROTO||""))?"Symbol(src)_1."+n:"",ft=at.toString,pt=ut.call(tt),mt=Pt._,vt=nt("^"+ut.call(ct).replace(Oe,"\\$&").replace(/hasOwnProperty|(function).*?(?=\\\()| for .+?(?=\\\])/g,"$1.*?")+"$"),gt=Ft?t.Buffer:o,_t=t.Symbol,xt=t.Uint8Array,$t=gt?gt.allocUnsafe:o,Nt=En(tt.getPrototypeOf,tt),Ot=tt.create,It=at.propertyIsEnumerable,At=ot.splice,Lt=_t?_t.isConcatSpreadable:o,Vt=_t?_t.iterator:o,on=_t?_t.toStringTag:o,fn=function(){try{var e=zo(tt,"defineProperty");return e({},"",{}),e}catch(e){}}(),Fn=t.clearTimeout!==Pt.clearTimeout&&t.clearTimeout,Ln=r&&r.now!==Pt.Date.now&&r.now,Vn=t.setTimeout!==Pt.setTimeout&&t.setTimeout,Bn=et.ceil,zn=et.floor,Rn=tt.getOwnPropertySymbols,Hn=gt?gt.isBuffer:o,jn=t.isFinite,Wn=ot.join,qn=En(tt.keys,tt),Yn=et.max,Kn=et.min,Un=r.now,Gn=t.parseInt,Xn=et.random,Zn=ot.reverse,Jn=zo(t,"DataView"),Qn=zo(t,"Map"),ei=zo(t,"Promise"),ti=zo(t,"Set"),ni=zo(t,"WeakMap"),ii=zo(tt,"create"),ri=ni&&new ni,oi={},si=hs(Jn),ai=hs(Qn),li=hs(ei),ui=hs(ti),ci=hs(ni),hi=_t?_t.prototype:o,di=hi?hi.valueOf:o,fi=hi?hi.toString:o;function pi(e){if($a(e)&&!ga(e)&&!(e instanceof yi)){if(e instanceof gi)return e;if(ct.call(e,"__wrapped__"))return ds(e)}return new gi(e)}var mi=function(){function e(){}return function(t){if(!Ea(t))return{};if(Ot)return Ot(t);e.prototype=t;var n=new e;return e.prototype=o,n}}();function vi(){}function gi(e,t){this.__wrapped__=e,this.__actions__=[],this.__chain__=!!t,this.__index__=0,this.__values__=o}function yi(e){this.__wrapped__=e,this.__actions__=[],this.__dir__=1,this.__filtered__=!1,this.__iteratees__=[],this.__takeCount__=L,this.__views__=[]}function bi(e){var t=-1,n=null==e?0:e.length;for(this.clear();++t=t?e:t)),e}function Fi(e,t,n,i,r,s){var a,l=t&d,u=t&f,c=t&p;if(n&&(a=r?n(e,i,r,s):n(e)),a!==o)return a;if(!Ea(e))return e;var h=ga(e);if(h){if(a=function(e){var t=e.length,n=new e.constructor(t);return t&&"string"==typeof e[0]&&ct.call(e,"index")&&(n.index=e.index,n.input=e.input),n}(e),!l)return io(e,a)}else{var m=jo(e),v=m==U||m==G;if(wa(e))return Zr(e,l);if(m==Q||m==R||v&&!r){if(a=u||v?{}:qo(e),!l)return u?function(e,t){return ro(e,Ho(e),t)}(e,function(e,t){return e&&ro(t,ol(t),e)}(a,e)):function(e,t){return ro(e,Ro(e),t)}(e,Oi(a,e))}else{if(!Et[m])return r?e:{};a=function(e,t,n){var i,r,o,s=e.constructor;switch(t){case le:return Jr(e);case W:case q:return new s(+e);case ue:return function(e,t){var n=t?Jr(e.buffer):e.buffer;return new e.constructor(n,e.byteOffset,e.byteLength)}(e,n);case ce:case he:case de:case fe:case pe:case me:case ve:case ge:case ye:return Qr(e,n);case X:return new s;case Z:case ie:return new s(e);case te:return(o=new(r=e).constructor(r.source,je.exec(r))).lastIndex=r.lastIndex,o;case ne:return new s;case re:return i=e,di?tt(di.call(i)):{}}}(e,m,l)}}s||(s=new Ci);var g=s.get(e);if(g)return g;if(s.set(e,a),Pa(e))return e.forEach(function(i){a.add(Fi(i,t,n,i,e,s))}),a;if(Ta(e))return e.forEach(function(i,r){a.set(r,Fi(i,t,n,r,e,s))}),a;var y=h?o:(c?u?Po:Oo:u?ol:rl)(e);return Kt(y||e,function(i,r){y&&(i=e[r=i]),Ti(a,r,Fi(i,t,n,r,e,s))}),a}function Li(e,t,n){var i=n.length;if(null==e)return!i;for(e=tt(e);i--;){var r=n[i],s=t[r],a=e[r];if(a===o&&!(r in e)||!s(a))return!1}return!0}function Vi(e,t,n){if("function"!=typeof e)throw new rt(l);return rs(function(){e.apply(o,n)},t)}function Bi(e,t,n,i){var r=-1,o=Zt,a=!0,l=e.length,u=[],c=t.length;if(!l)return u;n&&(t=Qt(t,gn(n))),i?(o=Jt,a=!1):t.length>=s&&(o=bn,a=!1,t=new xi(t));e:for(;++r-1},_i.prototype.set=function(e,t){var n=this.__data__,i=Mi(n,e);return i<0?(++this.size,n.push([e,t])):n[i][1]=t,this},wi.prototype.clear=function(){this.size=0,this.__data__={hash:new bi,map:new(Qn||_i),string:new bi}},wi.prototype.delete=function(e){var t=Vo(this,e).delete(e);return this.size-=t?1:0,t},wi.prototype.get=function(e){return Vo(this,e).get(e)},wi.prototype.has=function(e){return Vo(this,e).has(e)},wi.prototype.set=function(e,t){var n=Vo(this,e),i=n.size;return n.set(e,t),this.size+=n.size==i?0:1,this},xi.prototype.add=xi.prototype.push=function(e){return this.__data__.set(e,u),this},xi.prototype.has=function(e){return this.__data__.has(e)},Ci.prototype.clear=function(){this.__data__=new _i,this.size=0},Ci.prototype.delete=function(e){var t=this.__data__,n=t.delete(e);return this.size=t.size,n},Ci.prototype.get=function(e){return this.__data__.get(e)},Ci.prototype.has=function(e){return this.__data__.has(e)},Ci.prototype.set=function(e,t){var n=this.__data__;if(n instanceof _i){var i=n.__data__;if(!Qn||i.length0&&n(a)?t>1?qi(a,t-1,n,i,r):en(r,a):i||(r[r.length]=a)}return r}var Yi=lo(),Ki=lo(!0);function Ui(e,t){return e&&Yi(e,t,rl)}function Gi(e,t){return e&&Ki(e,t,rl)}function Xi(e,t){return Xt(t,function(t){return ka(e[t])})}function Zi(e,t){for(var n=0,i=(t=Kr(t,e)).length;null!=e&&nt}function tr(e,t){return null!=e&&ct.call(e,t)}function nr(e,t){return null!=e&&t in tt(e)}function ir(e,t,n){for(var r=n?Jt:Zt,s=e[0].length,a=e.length,l=a,u=i(a),c=1/0,h=[];l--;){var d=e[l];l&&t&&(d=Qt(d,gn(t))),c=Kn(d.length,c),u[l]=!n&&(t||s>=120&&d.length>=120)?new xi(l&&d):o}d=e[0];var f=-1,p=u[0];e:for(;++f=a)return l;var u=n[i];return l*("desc"==u?-1:1)}}return e.index-t.index}(e,t,n)})}function br(e,t,n){for(var i=-1,r=t.length,o={};++i-1;)a!==e&&At.call(a,l,1),At.call(e,l,1);return e}function wr(e,t){for(var n=e?t.length:0,i=n-1;n--;){var r=t[n];if(n==i||r!==o){var o=r;Ko(r)?At.call(e,r,1):Br(e,r)}}return e}function xr(e,t){return e+zn(Xn()*(t-e+1))}function Cr(e,t){var n="";if(!e||t<1||t>I)return n;do{t%2&&(n+=e),(t=zn(t/2))&&(e+=e)}while(t);return n}function kr(e,t){return os(ts(e,t,Ml),e+"")}function Sr(e){return Si(fl(e))}function Dr(e,t){var n=fl(e);return ls(n,Ai(t,0,n.length))}function Er(e,t,n,i){if(!Ea(e))return e;for(var r=-1,s=(t=Kr(t,e)).length,a=s-1,l=e;null!=l&&++ro?0:o+t),(n=n>o?o:n)<0&&(n+=o),o=t>n?0:n-t>>>0,t>>>=0;for(var s=i(o);++r>>1,s=e[o];null!==s&&!Aa(s)&&(n?s<=t:s=s){var c=t?null:ko(e);if(c)return Mn(c);a=!1,r=bn,u=new xi}else u=t?[]:l;e:for(;++i=i?e:Nr(e,t,n)}var Xr=Fn||function(e){return Pt.clearTimeout(e)};function Zr(e,t){if(t)return e.slice();var n=e.length,i=$t?$t(n):new e.constructor(n);return e.copy(i),i}function Jr(e){var t=new e.constructor(e.byteLength);return new xt(t).set(new xt(e)),t}function Qr(e,t){var n=t?Jr(e.buffer):e.buffer;return new e.constructor(n,e.byteOffset,e.length)}function eo(e,t){if(e!==t){var n=e!==o,i=null===e,r=e==e,s=Aa(e),a=t!==o,l=null===t,u=t==t,c=Aa(t);if(!l&&!c&&!s&&e>t||s&&a&&u&&!l&&!c||i&&a&&u||!n&&u||!r)return 1;if(!i&&!s&&!c&&e1?n[r-1]:o,a=r>2?n[2]:o;for(s=e.length>3&&"function"==typeof s?(r--,s):o,a&&Uo(n[0],n[1],a)&&(s=r<3?o:s,r=1),t=tt(t);++i-1?r[s?t[a]:a]:o}}function po(e){return No(function(t){var n=t.length,i=n,r=gi.prototype.thru;for(e&&t.reverse();i--;){var s=t[i];if("function"!=typeof s)throw new rt(l);if(r&&!a&&"wrapper"==Ao(s))var a=new gi([],!0)}for(i=a?i:n;++i1&&_.reverse(),d&&cl))return!1;var c=s.get(e);if(c&&s.get(t))return c==t;var h=-1,d=!0,f=n&v?new xi:o;for(s.set(e,t),s.set(t,e);++h-1&&e%1==0&&e1?"& ":"")+t[i],t=t.join(n>2?", ":" "),e.replace(Le,"{\n/* [wrapped with "+t+"] */\n")}(i,function(e,t){return Kt(z,function(n){var i="_."+n[0];t&n[1]&&!Zt(e,i)&&e.push(i)}),e.sort()}(function(e){var t=e.match(Ve);return t?t[1].split(Be):[]}(i),n)))}function as(e){var t=0,n=0;return function(){var i=Un(),r=M-(i-n);if(n=i,r>0){if(++t>=T)return arguments[0]}else t=0;return e.apply(o,arguments)}}function ls(e,t){var n=-1,i=e.length,r=i-1;for(t=t===o?i:t;++n1?e[t-1]:o;return n="function"==typeof n?(e.pop(),n):o,Os(e,n)});function Bs(e){var t=pi(e);return t.__chain__=!0,t}function zs(e,t){return t(e)}var Rs=No(function(e){var t=e.length,n=t?e[0]:0,i=this.__wrapped__,r=function(t){return Ii(t,e)};return!(t>1||this.__actions__.length)&&i instanceof yi&&Ko(n)?((i=i.slice(n,+n+(t?1:0))).__actions__.push({func:zs,args:[r],thisArg:o}),new gi(i,this.__chain__).thru(function(e){return t&&!e.length&&e.push(o),e})):this.thru(r)});var Hs=oo(function(e,t,n){ct.call(e,n)?++e[n]:Pi(e,n,1)});var js=fo(vs),Ws=fo(gs);function qs(e,t){return(ga(e)?Kt:zi)(e,Lo(t,3))}function Ys(e,t){return(ga(e)?Ut:Ri)(e,Lo(t,3))}var Ks=oo(function(e,t,n){ct.call(e,n)?e[n].push(t):Pi(e,n,[t])});var Us=kr(function(e,t,n){var r=-1,o="function"==typeof t,s=ba(e)?i(e.length):[];return zi(e,function(e){s[++r]=o?qt(t,e,n):rr(e,t,n)}),s}),Gs=oo(function(e,t,n){Pi(e,n,t)});function Xs(e,t){return(ga(e)?Qt:fr)(e,Lo(t,3))}var Zs=oo(function(e,t,n){e[n?0:1].push(t)},function(){return[[],[]]});var Js=kr(function(e,t){if(null==e)return[];var n=t.length;return n>1&&Uo(e,t[0],t[1])?t=[]:n>2&&Uo(t[0],t[1],t[2])&&(t=[t[0]]),yr(e,qi(t,1),[])}),Qs=Ln||function(){return Pt.Date.now()};function ea(e,t,n){return t=n?o:t,t=e&&null==t?e.length:t,Do(e,k,o,o,o,o,t)}function ta(e,t){var n;if("function"!=typeof t)throw new rt(l);return e=Ra(e),function(){return--e>0&&(n=t.apply(this,arguments)),e<=1&&(t=o),n}}var na=kr(function(e,t,n){var i=g;if(n.length){var r=$n(n,Fo(na));i|=x}return Do(e,i,t,n,r)}),ia=kr(function(e,t,n){var i=g|y;if(n.length){var r=$n(n,Fo(ia));i|=x}return Do(t,i,e,n,r)});function ra(e,t,n){var i,r,s,a,u,c,h=0,d=!1,f=!1,p=!0;if("function"!=typeof e)throw new rt(l);function m(t){var n=i,s=r;return i=r=o,h=t,a=e.apply(s,n)}function v(e){var n=e-c;return c===o||n>=t||n<0||f&&e-h>=s}function g(){var e=Qs();if(v(e))return y(e);u=rs(g,function(e){var n=t-(e-c);return f?Kn(n,s-(e-h)):n}(e))}function y(e){return u=o,p&&i?m(e):(i=r=o,a)}function b(){var e=Qs(),n=v(e);if(i=arguments,r=this,c=e,n){if(u===o)return function(e){return h=e,u=rs(g,t),d?m(e):a}(c);if(f)return u=rs(g,t),m(c)}return u===o&&(u=rs(g,t)),a}return t=ja(t)||0,Ea(n)&&(d=!!n.leading,s=(f="maxWait"in n)?Yn(ja(n.maxWait)||0,t):s,p="trailing"in n?!!n.trailing:p),b.cancel=function(){u!==o&&Xr(u),h=0,i=c=r=u=o},b.flush=function(){return u===o?a:y(Qs())},b}var oa=kr(function(e,t){return Vi(e,1,t)}),sa=kr(function(e,t,n){return Vi(e,ja(t)||0,n)});function aa(e,t){if("function"!=typeof e||null!=t&&"function"!=typeof t)throw new rt(l);var n=function(){var i=arguments,r=t?t.apply(this,i):i[0],o=n.cache;if(o.has(r))return o.get(r);var s=e.apply(this,i);return n.cache=o.set(r,s)||o,s};return n.cache=new(aa.Cache||wi),n}function la(e){if("function"!=typeof e)throw new rt(l);return function(){var t=arguments;switch(t.length){case 0:return!e.call(this);case 1:return!e.call(this,t[0]);case 2:return!e.call(this,t[0],t[1]);case 3:return!e.call(this,t[0],t[1],t[2])}return!e.apply(this,t)}}aa.Cache=wi;var ua=Ur(function(e,t){var n=(t=1==t.length&&ga(t[0])?Qt(t[0],gn(Lo())):Qt(qi(t,1),gn(Lo()))).length;return kr(function(i){for(var r=-1,o=Kn(i.length,n);++r=t}),va=or(function(){return arguments}())?or:function(e){return $a(e)&&ct.call(e,"callee")&&!It.call(e,"callee")},ga=i.isArray,ya=Bt?gn(Bt):function(e){return $a(e)&&Qi(e)==le};function ba(e){return null!=e&&Da(e.length)&&!ka(e)}function _a(e){return $a(e)&&ba(e)}var wa=Hn||jl,xa=zt?gn(zt):function(e){return $a(e)&&Qi(e)==q};function Ca(e){if(!$a(e))return!1;var t=Qi(e);return t==K||t==Y||"string"==typeof e.message&&"string"==typeof e.name&&!Na(e)}function ka(e){if(!Ea(e))return!1;var t=Qi(e);return t==U||t==G||t==j||t==ee}function Sa(e){return"number"==typeof e&&e==Ra(e)}function Da(e){return"number"==typeof e&&e>-1&&e%1==0&&e<=I}function Ea(e){var t=typeof e;return null!=e&&("object"==t||"function"==t)}function $a(e){return null!=e&&"object"==typeof e}var Ta=Rt?gn(Rt):function(e){return $a(e)&&jo(e)==X};function Ma(e){return"number"==typeof e||$a(e)&&Qi(e)==Z}function Na(e){if(!$a(e)||Qi(e)!=Q)return!1;var t=Nt(e);if(null===t)return!0;var n=ct.call(t,"constructor")&&t.constructor;return"function"==typeof n&&n instanceof n&&ut.call(n)==pt}var Oa=Ht?gn(Ht):function(e){return $a(e)&&Qi(e)==te};var Pa=jt?gn(jt):function(e){return $a(e)&&jo(e)==ne};function Ia(e){return"string"==typeof e||!ga(e)&&$a(e)&&Qi(e)==ie}function Aa(e){return"symbol"==typeof e||$a(e)&&Qi(e)==re}var Fa=Wt?gn(Wt):function(e){return $a(e)&&Da(e.length)&&!!Dt[Qi(e)]};var La=wo(dr),Va=wo(function(e,t){return e<=t});function Ba(e){if(!e)return[];if(ba(e))return Ia(e)?Pn(e):io(e);if(Vt&&e[Vt])return function(e){for(var t,n=[];!(t=e.next()).done;)n.push(t.value);return n}(e[Vt]());var t=jo(e);return(t==X?Dn:t==ne?Mn:fl)(e)}function za(e){return e?(e=ja(e))===P||e===-P?(e<0?-1:1)*A:e==e?e:0:0===e?e:0}function Ra(e){var t=za(e),n=t%1;return t==t?n?t-n:t:0}function Ha(e){return e?Ai(Ra(e),0,L):0}function ja(e){if("number"==typeof e)return e;if(Aa(e))return F;if(Ea(e)){var t="function"==typeof e.valueOf?e.valueOf():e;e=Ea(t)?t+"":t}if("string"!=typeof e)return 0===e?e:+e;e=e.replace(Ie,"");var n=qe.test(e);return n||Ke.test(e)?Mt(e.slice(2),n?2:8):We.test(e)?F:+e}function Wa(e){return ro(e,ol(e))}function qa(e){return null==e?"":Lr(e)}var Ya=so(function(e,t){if(Jo(t)||ba(t))ro(t,rl(t),e);else for(var n in t)ct.call(t,n)&&Ti(e,n,t[n])}),Ka=so(function(e,t){ro(t,ol(t),e)}),Ua=so(function(e,t,n,i){ro(t,ol(t),e,i)}),Ga=so(function(e,t,n,i){ro(t,rl(t),e,i)}),Xa=No(Ii);var Za=kr(function(e,t){e=tt(e);var n=-1,i=t.length,r=i>2?t[2]:o;for(r&&Uo(t[0],t[1],r)&&(i=1);++n1),t}),ro(e,Po(e),n),i&&(n=Fi(n,d|f|p,To));for(var r=t.length;r--;)Br(n,t[r]);return n});var ul=No(function(e,t){return null==e?{}:function(e,t){return br(e,t,function(t,n){return el(e,n)})}(e,t)});function cl(e,t){if(null==e)return{};var n=Qt(Po(e),function(e){return[e]});return t=Lo(t),br(e,n,function(e,n){return t(e,n[0])})}var hl=So(rl),dl=So(ol);function fl(e){return null==e?[]:yn(e,rl(e))}var pl=co(function(e,t,n){return t=t.toLowerCase(),e+(n?ml(t):t)});function ml(e){return Cl(qa(e).toLowerCase())}function vl(e){return(e=qa(e))&&e.replace(Ge,xn).replace(bt,"")}var gl=co(function(e,t,n){return e+(n?"-":"")+t.toLowerCase()}),yl=co(function(e,t,n){return e+(n?" ":"")+t.toLowerCase()}),bl=uo("toLowerCase");var _l=co(function(e,t,n){return e+(n?"_":"")+t.toLowerCase()});var wl=co(function(e,t,n){return e+(n?" ":"")+Cl(t)});var xl=co(function(e,t,n){return e+(n?" ":"")+t.toUpperCase()}),Cl=uo("toUpperCase");function kl(e,t,n){return e=qa(e),(t=n?o:t)===o?function(e){return Ct.test(e)}(e)?function(e){return e.match(wt)||[]}(e):function(e){return e.match(ze)||[]}(e):e.match(t)||[]}var Sl=kr(function(e,t){try{return qt(e,o,t)}catch(e){return Ca(e)?e:new Je(e)}}),Dl=No(function(e,t){return Kt(t,function(t){t=cs(t),Pi(e,t,na(e[t],e))}),e});function El(e){return function(){return e}}var $l=po(),Tl=po(!0);function Ml(e){return e}function Nl(e){return ur("function"==typeof e?e:Fi(e,d))}var Ol=kr(function(e,t){return function(n){return rr(n,e,t)}}),Pl=kr(function(e,t){return function(n){return rr(e,n,t)}});function Il(e,t,n){var i=rl(t),r=Xi(t,i);null!=n||Ea(t)&&(r.length||!i.length)||(n=t,t=e,e=this,r=Xi(t,rl(t)));var o=!(Ea(n)&&"chain"in n&&!n.chain),s=ka(e);return Kt(r,function(n){var i=t[n];e[n]=i,s&&(e.prototype[n]=function(){var t=this.__chain__;if(o||t){var n=e(this.__wrapped__);return(n.__actions__=io(this.__actions__)).push({func:i,args:arguments,thisArg:e}),n.__chain__=t,n}return i.apply(e,en([this.value()],arguments))})}),e}function Al(){}var Fl=yo(Qt),Ll=yo(Gt),Vl=yo(rn);function Bl(e){return Go(e)?dn(cs(e)):function(e){return function(t){return Zi(t,e)}}(e)}var zl=_o(),Rl=_o(!0);function Hl(){return[]}function jl(){return!1}var Wl=go(function(e,t){return e+t},0),ql=Co("ceil"),Yl=go(function(e,t){return e/t},1),Kl=Co("floor");var Ul,Gl=go(function(e,t){return e*t},1),Xl=Co("round"),Zl=go(function(e,t){return e-t},0);return pi.after=function(e,t){if("function"!=typeof t)throw new rt(l);return e=Ra(e),function(){if(--e<1)return t.apply(this,arguments)}},pi.ary=ea,pi.assign=Ya,pi.assignIn=Ka,pi.assignInWith=Ua,pi.assignWith=Ga,pi.at=Xa,pi.before=ta,pi.bind=na,pi.bindAll=Dl,pi.bindKey=ia,pi.castArray=function(){if(!arguments.length)return[];var e=arguments[0];return ga(e)?e:[e]},pi.chain=Bs,pi.chunk=function(e,t,n){t=(n?Uo(e,t,n):t===o)?1:Yn(Ra(t),0);var r=null==e?0:e.length;if(!r||t<1)return[];for(var s=0,a=0,l=i(Bn(r/t));sr?0:r+n),(i=i===o||i>r?r:Ra(i))<0&&(i+=r),i=n>i?0:Ha(i);n>>0)?(e=qa(e))&&("string"==typeof t||null!=t&&!Oa(t))&&!(t=Lr(t))&&Sn(e)?Gr(Pn(e),0,n):e.split(t,n):[]},pi.spread=function(e,t){if("function"!=typeof e)throw new rt(l);return t=null==t?0:Yn(Ra(t),0),kr(function(n){var i=n[t],r=Gr(n,0,t);return i&&en(r,i),qt(e,this,r)})},pi.tail=function(e){var t=null==e?0:e.length;return t?Nr(e,1,t):[]},pi.take=function(e,t,n){return e&&e.length?Nr(e,0,(t=n||t===o?1:Ra(t))<0?0:t):[]},pi.takeRight=function(e,t,n){var i=null==e?0:e.length;return i?Nr(e,(t=i-(t=n||t===o?1:Ra(t)))<0?0:t,i):[]},pi.takeRightWhile=function(e,t){return e&&e.length?Rr(e,Lo(t,3),!1,!0):[]},pi.takeWhile=function(e,t){return e&&e.length?Rr(e,Lo(t,3)):[]},pi.tap=function(e,t){return t(e),e},pi.throttle=function(e,t,n){var i=!0,r=!0;if("function"!=typeof e)throw new rt(l);return Ea(n)&&(i="leading"in n?!!n.leading:i,r="trailing"in n?!!n.trailing:r),ra(e,t,{leading:i,maxWait:t,trailing:r})},pi.thru=zs,pi.toArray=Ba,pi.toPairs=hl,pi.toPairsIn=dl,pi.toPath=function(e){return ga(e)?Qt(e,cs):Aa(e)?[e]:io(us(qa(e)))},pi.toPlainObject=Wa,pi.transform=function(e,t,n){var i=ga(e),r=i||wa(e)||Fa(e);if(t=Lo(t,4),null==n){var o=e&&e.constructor;n=r?i?new o:[]:Ea(e)&&ka(o)?mi(Nt(e)):{}}return(r?Kt:Ui)(e,function(e,i,r){return t(n,e,i,r)}),n},pi.unary=function(e){return ea(e,1)},pi.union=$s,pi.unionBy=Ts,pi.unionWith=Ms,pi.uniq=function(e){return e&&e.length?Vr(e):[]},pi.uniqBy=function(e,t){return e&&e.length?Vr(e,Lo(t,2)):[]},pi.uniqWith=function(e,t){return t="function"==typeof t?t:o,e&&e.length?Vr(e,o,t):[]},pi.unset=function(e,t){return null==e||Br(e,t)},pi.unzip=Ns,pi.unzipWith=Os,pi.update=function(e,t,n){return null==e?e:zr(e,t,Yr(n))},pi.updateWith=function(e,t,n,i){return i="function"==typeof i?i:o,null==e?e:zr(e,t,Yr(n),i)},pi.values=fl,pi.valuesIn=function(e){return null==e?[]:yn(e,ol(e))},pi.without=Ps,pi.words=kl,pi.wrap=function(e,t){return ca(Yr(t),e)},pi.xor=Is,pi.xorBy=As,pi.xorWith=Fs,pi.zip=Ls,pi.zipObject=function(e,t){return Wr(e||[],t||[],Ti)},pi.zipObjectDeep=function(e,t){return Wr(e||[],t||[],Er)},pi.zipWith=Vs,pi.entries=hl,pi.entriesIn=dl,pi.extend=Ka,pi.extendWith=Ua,Il(pi,pi),pi.add=Wl,pi.attempt=Sl,pi.camelCase=pl,pi.capitalize=ml,pi.ceil=ql,pi.clamp=function(e,t,n){return n===o&&(n=t,t=o),n!==o&&(n=(n=ja(n))==n?n:0),t!==o&&(t=(t=ja(t))==t?t:0),Ai(ja(e),t,n)},pi.clone=function(e){return Fi(e,p)},pi.cloneDeep=function(e){return Fi(e,d|p)},pi.cloneDeepWith=function(e,t){return Fi(e,d|p,t="function"==typeof t?t:o)},pi.cloneWith=function(e,t){return Fi(e,p,t="function"==typeof t?t:o)},pi.conformsTo=function(e,t){return null==t||Li(e,t,rl(t))},pi.deburr=vl,pi.defaultTo=function(e,t){return null==e||e!=e?t:e},pi.divide=Yl,pi.endsWith=function(e,t,n){e=qa(e),t=Lr(t);var i=e.length,r=n=n===o?i:Ai(Ra(n),0,i);return(n-=t.length)>=0&&e.slice(n,r)==t},pi.eq=fa,pi.escape=function(e){return(e=qa(e))&&Se.test(e)?e.replace(Ce,Cn):e},pi.escapeRegExp=function(e){return(e=qa(e))&&Pe.test(e)?e.replace(Oe,"\\$&"):e},pi.every=function(e,t,n){var i=ga(e)?Gt:Hi;return n&&Uo(e,t,n)&&(t=o),i(e,Lo(t,3))},pi.find=js,pi.findIndex=vs,pi.findKey=function(e,t){return sn(e,Lo(t,3),Ui)},pi.findLast=Ws,pi.findLastIndex=gs,pi.findLastKey=function(e,t){return sn(e,Lo(t,3),Gi)},pi.floor=Kl,pi.forEach=qs,pi.forEachRight=Ys,pi.forIn=function(e,t){return null==e?e:Yi(e,Lo(t,3),ol)},pi.forInRight=function(e,t){return null==e?e:Ki(e,Lo(t,3),ol)},pi.forOwn=function(e,t){return e&&Ui(e,Lo(t,3))},pi.forOwnRight=function(e,t){return e&&Gi(e,Lo(t,3))},pi.get=Qa,pi.gt=pa,pi.gte=ma,pi.has=function(e,t){return null!=e&&Wo(e,t,tr)},pi.hasIn=el,pi.head=bs,pi.identity=Ml,pi.includes=function(e,t,n,i){e=ba(e)?e:fl(e),n=n&&!i?Ra(n):0;var r=e.length;return n<0&&(n=Yn(r+n,0)),Ia(e)?n<=r&&e.indexOf(t,n)>-1:!!r&&ln(e,t,n)>-1},pi.indexOf=function(e,t,n){var i=null==e?0:e.length;if(!i)return-1;var r=null==n?0:Ra(n);return r<0&&(r=Yn(i+r,0)),ln(e,t,r)},pi.inRange=function(e,t,n){return t=za(t),n===o?(n=t,t=0):n=za(n),function(e,t,n){return e>=Kn(t,n)&&e=-I&&e<=I},pi.isSet=Pa,pi.isString=Ia,pi.isSymbol=Aa,pi.isTypedArray=Fa,pi.isUndefined=function(e){return e===o},pi.isWeakMap=function(e){return $a(e)&&jo(e)==se},pi.isWeakSet=function(e){return $a(e)&&Qi(e)==ae},pi.join=function(e,t){return null==e?"":Wn.call(e,t)},pi.kebabCase=gl,pi.last=Cs,pi.lastIndexOf=function(e,t,n){var i=null==e?0:e.length;if(!i)return-1;var r=i;return n!==o&&(r=(r=Ra(n))<0?Yn(i+r,0):Kn(r,i-1)),t==t?function(e,t,n){for(var i=n+1;i--;)if(e[i]===t)return i;return i}(e,t,r):an(e,cn,r,!0)},pi.lowerCase=yl,pi.lowerFirst=bl,pi.lt=La,pi.lte=Va,pi.max=function(e){return e&&e.length?ji(e,Ml,er):o},pi.maxBy=function(e,t){return e&&e.length?ji(e,Lo(t,2),er):o},pi.mean=function(e){return hn(e,Ml)},pi.meanBy=function(e,t){return hn(e,Lo(t,2))},pi.min=function(e){return e&&e.length?ji(e,Ml,dr):o},pi.minBy=function(e,t){return e&&e.length?ji(e,Lo(t,2),dr):o},pi.stubArray=Hl,pi.stubFalse=jl,pi.stubObject=function(){return{}},pi.stubString=function(){return""},pi.stubTrue=function(){return!0},pi.multiply=Gl,pi.nth=function(e,t){return e&&e.length?gr(e,Ra(t)):o},pi.noConflict=function(){return Pt._===this&&(Pt._=mt),this},pi.noop=Al,pi.now=Qs,pi.pad=function(e,t,n){e=qa(e);var i=(t=Ra(t))?On(e):0;if(!t||i>=t)return e;var r=(t-i)/2;return bo(zn(r),n)+e+bo(Bn(r),n)},pi.padEnd=function(e,t,n){e=qa(e);var i=(t=Ra(t))?On(e):0;return t&&it){var i=e;e=t,t=i}if(n||e%1||t%1){var r=Xn();return Kn(e+r*(t-e+Tt("1e-"+((r+"").length-1))),t)}return xr(e,t)},pi.reduce=function(e,t,n){var i=ga(e)?tn:pn,r=arguments.length<3;return i(e,Lo(t,4),n,r,zi)},pi.reduceRight=function(e,t,n){var i=ga(e)?nn:pn,r=arguments.length<3;return i(e,Lo(t,4),n,r,Ri)},pi.repeat=function(e,t,n){return t=(n?Uo(e,t,n):t===o)?1:Ra(t),Cr(qa(e),t)},pi.replace=function(){var e=arguments,t=qa(e[0]);return e.length<3?t:t.replace(e[1],e[2])},pi.result=function(e,t,n){var i=-1,r=(t=Kr(t,e)).length;for(r||(r=1,e=o);++iI)return[];var n=L,i=Kn(e,L);t=Lo(t),e-=L;for(var r=vn(i,t);++n=s)return e;var l=n-On(i);if(l<1)return i;var u=a?Gr(a,0,l).join(""):e.slice(0,l);if(r===o)return u+i;if(a&&(l+=u.length-l),Oa(r)){if(e.slice(l).search(r)){var c,h=u;for(r.global||(r=nt(r.source,qa(je.exec(r))+"g")),r.lastIndex=0;c=r.exec(h);)var d=c.index;u=u.slice(0,d===o?l:d)}}else if(e.indexOf(Lr(r),l)!=l){var f=u.lastIndexOf(r);f>-1&&(u=u.slice(0,f))}return u+i},pi.unescape=function(e){return(e=qa(e))&&ke.test(e)?e.replace(xe,In):e},pi.uniqueId=function(e){var t=++ht;return qa(e)+t},pi.upperCase=xl,pi.upperFirst=Cl,pi.each=qs,pi.eachRight=Ys,pi.first=bs,Il(pi,(Ul={},Ui(pi,function(e,t){ct.call(pi.prototype,t)||(Ul[t]=e)}),Ul),{chain:!1}),pi.VERSION="4.17.10",Kt(["bind","bindKey","curry","curryRight","partial","partialRight"],function(e){pi[e].placeholder=pi}),Kt(["drop","take"],function(e,t){yi.prototype[e]=function(n){n=n===o?1:Yn(Ra(n),0);var i=this.__filtered__&&!t?new yi(this):this.clone();return i.__filtered__?i.__takeCount__=Kn(n,i.__takeCount__):i.__views__.push({size:Kn(n,L),type:e+(i.__dir__<0?"Right":"")}),i},yi.prototype[e+"Right"]=function(t){return this.reverse()[e](t).reverse()}}),Kt(["filter","map","takeWhile"],function(e,t){var n=t+1,i=n==N||3==n;yi.prototype[e]=function(e){var t=this.clone();return t.__iteratees__.push({iteratee:Lo(e,3),type:n}),t.__filtered__=t.__filtered__||i,t}}),Kt(["head","last"],function(e,t){var n="take"+(t?"Right":"");yi.prototype[e]=function(){return this[n](1).value()[0]}}),Kt(["initial","tail"],function(e,t){var n="drop"+(t?"":"Right");yi.prototype[e]=function(){return this.__filtered__?new yi(this):this[n](1)}}),yi.prototype.compact=function(){return this.filter(Ml)},yi.prototype.find=function(e){return this.filter(e).head()},yi.prototype.findLast=function(e){return this.reverse().find(e)},yi.prototype.invokeMap=kr(function(e,t){return"function"==typeof e?new yi(this):this.map(function(n){return rr(n,e,t)})}),yi.prototype.reject=function(e){return this.filter(la(Lo(e)))},yi.prototype.slice=function(e,t){e=Ra(e);var n=this;return n.__filtered__&&(e>0||t<0)?new yi(n):(e<0?n=n.takeRight(-e):e&&(n=n.drop(e)),t!==o&&(n=(t=Ra(t))<0?n.dropRight(-t):n.take(t-e)),n)},yi.prototype.takeRightWhile=function(e){return this.reverse().takeWhile(e).reverse()},yi.prototype.toArray=function(){return this.take(L)},Ui(yi.prototype,function(e,t){var n=/^(?:filter|find|map|reject)|While$/.test(t),i=/^(?:head|last)$/.test(t),r=pi[i?"take"+("last"==t?"Right":""):t],s=i||/^find/.test(t);r&&(pi.prototype[t]=function(){var t=this.__wrapped__,a=i?[1]:arguments,l=t instanceof yi,u=a[0],c=l||ga(t),h=function(e){var t=r.apply(pi,en([e],a));return i&&d?t[0]:t};c&&n&&"function"==typeof u&&1!=u.length&&(l=c=!1);var d=this.__chain__,f=!!this.__actions__.length,p=s&&!d,m=l&&!f;if(!s&&c){t=m?t:new yi(this);var v=e.apply(t,a);return v.__actions__.push({func:zs,args:[h],thisArg:o}),new gi(v,d)}return p&&m?e.apply(this,a):(v=this.thru(h),p?i?v.value()[0]:v.value():v)})}),Kt(["pop","push","shift","sort","splice","unshift"],function(e){var t=ot[e],n=/^(?:push|sort|unshift)$/.test(e)?"tap":"thru",i=/^(?:pop|shift)$/.test(e);pi.prototype[e]=function(){var e=arguments;if(i&&!this.__chain__){var r=this.value();return t.apply(ga(r)?r:[],e)}return this[n](function(n){return t.apply(ga(n)?n:[],e)})}}),Ui(yi.prototype,function(e,t){var n=pi[t];if(n){var i=n.name+"";(oi[i]||(oi[i]=[])).push({name:t,func:n})}}),oi[mo(o,y).name]=[{name:"wrapper",func:o}],yi.prototype.clone=function(){var e=new yi(this.__wrapped__);return e.__actions__=io(this.__actions__),e.__dir__=this.__dir__,e.__filtered__=this.__filtered__,e.__iteratees__=io(this.__iteratees__),e.__takeCount__=this.__takeCount__,e.__views__=io(this.__views__),e},yi.prototype.reverse=function(){if(this.__filtered__){var e=new yi(this);e.__dir__=-1,e.__filtered__=!0}else(e=this.clone()).__dir__*=-1;return e},yi.prototype.value=function(){var e=this.__wrapped__.value(),t=this.__dir__,n=ga(e),i=t<0,r=n?e.length:0,o=function(e,t,n){for(var i=-1,r=n.length;++i=this.__values__.length;return{done:e,value:e?o:this.__values__[this.__index__++]}},pi.prototype.plant=function(e){for(var t,n=this;n instanceof vi;){var i=ds(n);i.__index__=0,i.__values__=o,t?r.__wrapped__=i:t=i;var r=i;n=n.__wrapped__}return r.__wrapped__=e,t},pi.prototype.reverse=function(){var e=this.__wrapped__;if(e instanceof yi){var t=e;return this.__actions__.length&&(t=new yi(this)),(t=t.reverse()).__actions__.push({func:zs,args:[Es],thisArg:o}),new gi(t,this.__chain__)}return this.thru(Es)},pi.prototype.toJSON=pi.prototype.valueOf=pi.prototype.value=function(){return Hr(this.__wrapped__,this.__actions__)},pi.prototype.first=pi.prototype.head,Vt&&(pi.prototype[Vt]=function(){return this}),pi}();Pt._=An,(r=function(){return An}.call(t,n,t,i))===o||(i.exports=r)}).call(this)}).call(this,n(37),n(89)(e))},function(e,t){var n=e.exports={version:"2.6.2"};"number"==typeof __e&&(__e=n)},function(e,t){e.exports=function(e){return"object"==typeof e?null!==e:"function"==typeof e}},function(e,t){e.exports=function(e){try{return!!e()}catch(e){return!0}}},function(e,t,n){var i=n(4),r=n(1);e.exports={throttle:i,debounce:r}},function(e,t,n){var i=n(16);e.exports=function(e){if(!i(e))throw TypeError(e+" is not an object!");return e}},function(e,t){e.exports=function(e,t){return{enumerable:!(1&e),configurable:!(2&e),writable:!(4&e),value:t}}},function(e,t,n){var i=n(40),r=n(31);e.exports=Object.keys||function(e){return i(e,r)}},function(e,t){e.exports=!0},function(e,t){var n=0,i=Math.random();e.exports=function(e){return"Symbol(".concat(void 0===e?"":e,")_",(++n+i).toString(36))}},function(e,t){t.f={}.propertyIsEnumerable},function(e,t,n){var i=n(5),r=n(15),o=n(60),s=n(9),a=n(7),l=function(e,t,n){var u,c,h,d=e&l.F,f=e&l.G,p=e&l.S,m=e&l.P,v=e&l.B,g=e&l.W,y=f?r:r[t]||(r[t]={}),b=y.prototype,_=f?i:p?i[t]:(i[t]||{}).prototype;for(u in f&&(n=t),n)(c=!d&&_&&void 0!==_[u])&&a(y,u)||(h=c?_[u]:n[u],y[u]=f&&"function"!=typeof _[u]?n[u]:v&&c?o(h,i):g&&_[u]==h?function(e){var t=function(t,n,i){if(this instanceof e){switch(arguments.length){case 0:return new e;case 1:return new e(t);case 2:return new e(t,n)}return new e(t,n,i)}return e.apply(this,arguments)};return t.prototype=e.prototype,t}(h):m&&"function"==typeof h?o(Function.call,h):h,m&&((y.virtual||(y.virtual={}))[u]=h,e&l.R&&b&&!b[u]&&s(b,u,h)))};l.F=1,l.G=2,l.S=4,l.P=8,l.B=16,l.W=32,l.U=64,l.R=128,e.exports=l},function(e,t,n){var i=n(16);e.exports=function(e,t){if(!i(e))return e;var n,r;if(t&&"function"==typeof(n=e.toString)&&!i(r=n.call(e)))return r;if("function"==typeof(n=e.valueOf)&&!i(r=n.call(e)))return r;if(!t&&"function"==typeof(n=e.toString)&&!i(r=n.call(e)))return r;throw TypeError("Can't convert object to primitive value")}},function(e,t){e.exports=function(e){if(null==e)throw TypeError("Can't call method on "+e);return e}},function(e,t){var n=Math.ceil,i=Math.floor;e.exports=function(e){return isNaN(e=+e)?0:(e>0?i:n)(e)}},function(e,t,n){var i=n(30)("keys"),r=n(23);e.exports=function(e){return i[e]||(i[e]=r(e))}},function(e,t,n){var i=n(15),r=n(5),o=r["__core-js_shared__"]||(r["__core-js_shared__"]={});(e.exports=function(e,t){return o[e]||(o[e]=void 0!==t?t:{})})("versions",[]).push({version:i.version,mode:n(22)?"pure":"global",copyright:"© 2019 Denis Pushkarev (zloirock.ru)"})},function(e,t){e.exports="constructor,hasOwnProperty,isPrototypeOf,propertyIsEnumerable,toLocaleString,toString,valueOf".split(",")},function(e,t){t.f=Object.getOwnPropertySymbols},function(e,t){e.exports={}},function(e,t,n){var i=n(10).f,r=n(7),o=n(13)("toStringTag");e.exports=function(e,t,n){e&&!r(e=n?e:e.prototype,o)&&i(e,o,{configurable:!0,value:t})}},function(e,t,n){t.f=n(13)},function(e,t,n){var i=n(5),r=n(15),o=n(22),s=n(35),a=n(10).f;e.exports=function(e){var t=r.Symbol||(r.Symbol=o?{}:i.Symbol||{});"_"==e.charAt(0)||e in t||a(t,e,{value:s.f(e)})}},function(e,t){var n;n=function(){return this}();try{n=n||new Function("return this")()}catch(e){"object"==typeof window&&(n=window)}e.exports=n},function(e,t,n){e.exports=!n(11)&&!n(17)(function(){return 7!=Object.defineProperty(n(39)("div"),"a",{get:function(){return 7}}).a})},function(e,t,n){var i=n(16),r=n(5).document,o=i(r)&&i(r.createElement);e.exports=function(e){return o?r.createElement(e):{}}},function(e,t,n){var i=n(7),r=n(12),o=n(63)(!1),s=n(29)("IE_PROTO");e.exports=function(e,t){var n,a=r(e),l=0,u=[];for(n in a)n!=s&&i(a,n)&&u.push(n);for(;t.length>l;)i(a,n=t[l++])&&(~o(u,n)||u.push(n));return u}},function(e,t,n){var i=n(42);e.exports=Object("z").propertyIsEnumerable(0)?Object:function(e){return"String"==i(e)?e.split(""):Object(e)}},function(e,t){var n={}.toString;e.exports=function(e){return n.call(e).slice(8,-1)}},function(e,t,n){var i=n(27);e.exports=function(e){return Object(i(e))}},function(e,t,n){"use strict";var i=n(22),r=n(25),o=n(45),s=n(9),a=n(33),l=n(70),u=n(34),c=n(73),h=n(13)("iterator"),d=!([].keys&&"next"in[].keys()),f=function(){return this};e.exports=function(e,t,n,p,m,v,g){l(n,t,p);var y,b,_,w=function(e){if(!d&&e in S)return S[e];switch(e){case"keys":case"values":return function(){return new n(this,e)}}return function(){return new n(this,e)}},x=t+" Iterator",C="values"==m,k=!1,S=e.prototype,D=S[h]||S["@@iterator"]||m&&S[m],E=D||w(m),$=m?C?w("entries"):E:void 0,T="Array"==t&&S.entries||D;if(T&&(_=c(T.call(new e)))!==Object.prototype&&_.next&&(u(_,x,!0),i||"function"==typeof _[h]||s(_,h,f)),C&&D&&"values"!==D.name&&(k=!0,E=function(){return D.call(this)}),i&&!g||!d&&!k&&S[h]||s(S,h,E),a[t]=E,a[x]=f,m)if(y={values:C?E:w("values"),keys:v?E:w("keys"),entries:$},g)for(b in y)b in S||o(S,b,y[b]);else r(r.P+r.F*(d||k),t,y);return y}},function(e,t,n){e.exports=n(9)},function(e,t,n){var i=n(19),r=n(71),o=n(31),s=n(29)("IE_PROTO"),a=function(){},l=function(){var e,t=n(39)("iframe"),i=o.length;for(t.style.display="none",n(72).appendChild(t),t.src="javascript:",(e=t.contentWindow.document).open(),e.write(" + + + + + + + +
+ + + + + + +
+
+
+ 设备管理系统 +
+
+
+ +
+
+
+ +
+
+ + +
+
+
+ +
+ + + + + \ No newline at end of file diff --git a/device/src/main/resources/static/maintenancerecord.html b/device/src/main/resources/static/maintenancerecord.html new file mode 100644 index 0000000..8f77ca7 --- /dev/null +++ b/device/src/main/resources/static/maintenancerecord.html @@ -0,0 +1,115 @@ + + + + + + + + + + + + + + + + +
+ + + + + + +
+ + + + \ No newline at end of file diff --git a/device/src/main/resources/static/operationlog.html b/device/src/main/resources/static/operationlog.html new file mode 100644 index 0000000..5e47b9a --- /dev/null +++ b/device/src/main/resources/static/operationlog.html @@ -0,0 +1,100 @@ + + + + + + + + + + + + + + + + +
+ + + + + + +
+ + + + \ No newline at end of file diff --git a/device/src/main/resources/static/scraprecord.html b/device/src/main/resources/static/scraprecord.html new file mode 100644 index 0000000..eae4165 --- /dev/null +++ b/device/src/main/resources/static/scraprecord.html @@ -0,0 +1,100 @@ + + + + + + + + + + + + + + + + +
+ + + + + + +
+ + + + \ No newline at end of file diff --git a/device/src/main/resources/static/supplier.html b/device/src/main/resources/static/supplier.html new file mode 100644 index 0000000..fbffddf --- /dev/null +++ b/device/src/main/resources/static/supplier.html @@ -0,0 +1,105 @@ + + + + + + + + + + + + + + + + +
+ + + + + + +
+ + + + \ No newline at end of file diff --git a/device/src/main/resources/static/usagerecord.html b/device/src/main/resources/static/usagerecord.html new file mode 100644 index 0000000..ab6f563 --- /dev/null +++ b/device/src/main/resources/static/usagerecord.html @@ -0,0 +1,105 @@ + + + + + + + + + + + + + + + + +
+ + + + + + +
+ + + + \ No newline at end of file diff --git a/device/target/classes/application.yml b/device/target/classes/application.yml new file mode 100644 index 0000000..e1de333 --- /dev/null +++ b/device/target/classes/application.yml @@ -0,0 +1,14 @@ +spring: + datasource: + url: jdbc:mysql://localhost:3306/a?serverTimezone=Asia/Shanghai&useUnicode=true&characterEncoding=utf-8 + username: "root" + password: "013013" + driver-class-name: com.mysql.cj.jdbc.Driver +mybatis-plus: + mapperLocations: classpath:/mapper/*Mapper.xml + configuration: + log-impl: org.apache.ibatis.logging.stdout.StdOutImpl +server: + port: 80 + tomcat: + basedir: /home/tmp \ No newline at end of file diff --git a/device/target/classes/com/DeviceApplication.class b/device/target/classes/com/DeviceApplication.class new file mode 100644 index 0000000..73980c2 Binary files /dev/null and b/device/target/classes/com/DeviceApplication.class differ diff --git a/device/target/classes/com/commons/MyBatisPlusConfig.class b/device/target/classes/com/commons/MyBatisPlusConfig.class new file mode 100644 index 0000000..588e2ba Binary files /dev/null and b/device/target/classes/com/commons/MyBatisPlusConfig.class differ diff --git a/device/target/classes/com/commons/Result.class b/device/target/classes/com/commons/Result.class new file mode 100644 index 0000000..e78625c Binary files /dev/null and b/device/target/classes/com/commons/Result.class differ diff --git a/device/target/classes/com/controller/DeviceController.class b/device/target/classes/com/controller/DeviceController.class new file mode 100644 index 0000000..c67b95e Binary files /dev/null and b/device/target/classes/com/controller/DeviceController.class differ diff --git a/device/target/classes/com/controller/DevicecategoryController.class b/device/target/classes/com/controller/DevicecategoryController.class new file mode 100644 index 0000000..7573f0b Binary files /dev/null and b/device/target/classes/com/controller/DevicecategoryController.class differ diff --git a/device/target/classes/com/controller/LocationController.class b/device/target/classes/com/controller/LocationController.class new file mode 100644 index 0000000..11805e4 Binary files /dev/null and b/device/target/classes/com/controller/LocationController.class differ diff --git a/device/target/classes/com/controller/MaintenancerecordController.class b/device/target/classes/com/controller/MaintenancerecordController.class new file mode 100644 index 0000000..ec83d68 Binary files /dev/null and b/device/target/classes/com/controller/MaintenancerecordController.class differ diff --git a/device/target/classes/com/controller/OperationlogController.class b/device/target/classes/com/controller/OperationlogController.class new file mode 100644 index 0000000..0f70226 Binary files /dev/null and b/device/target/classes/com/controller/OperationlogController.class differ diff --git a/device/target/classes/com/controller/RoleController.class b/device/target/classes/com/controller/RoleController.class new file mode 100644 index 0000000..9a60bd1 Binary files /dev/null and b/device/target/classes/com/controller/RoleController.class differ diff --git a/device/target/classes/com/controller/ScraprecordController.class b/device/target/classes/com/controller/ScraprecordController.class new file mode 100644 index 0000000..8ec4e38 Binary files /dev/null and b/device/target/classes/com/controller/ScraprecordController.class differ diff --git a/device/target/classes/com/controller/SupplierController.class b/device/target/classes/com/controller/SupplierController.class new file mode 100644 index 0000000..b5650df Binary files /dev/null and b/device/target/classes/com/controller/SupplierController.class differ diff --git a/device/target/classes/com/controller/UsagerecordController.class b/device/target/classes/com/controller/UsagerecordController.class new file mode 100644 index 0000000..ecc7393 Binary files /dev/null and b/device/target/classes/com/controller/UsagerecordController.class differ diff --git a/device/target/classes/com/controller/UserController.class b/device/target/classes/com/controller/UserController.class new file mode 100644 index 0000000..1b0b185 Binary files /dev/null and b/device/target/classes/com/controller/UserController.class differ diff --git a/device/target/classes/com/controller/from/findDevicePageFrom.class b/device/target/classes/com/controller/from/findDevicePageFrom.class new file mode 100644 index 0000000..f315583 Binary files /dev/null and b/device/target/classes/com/controller/from/findDevicePageFrom.class differ diff --git a/device/target/classes/com/entity/Device.class b/device/target/classes/com/entity/Device.class new file mode 100644 index 0000000..095096b Binary files /dev/null and b/device/target/classes/com/entity/Device.class differ diff --git a/device/target/classes/com/entity/Devicecategory.class b/device/target/classes/com/entity/Devicecategory.class new file mode 100644 index 0000000..a1df8fc Binary files /dev/null and b/device/target/classes/com/entity/Devicecategory.class differ diff --git a/device/target/classes/com/entity/Location.class b/device/target/classes/com/entity/Location.class new file mode 100644 index 0000000..bc233fa Binary files /dev/null and b/device/target/classes/com/entity/Location.class differ diff --git a/device/target/classes/com/entity/Maintenancerecord.class b/device/target/classes/com/entity/Maintenancerecord.class new file mode 100644 index 0000000..fca3aba Binary files /dev/null and b/device/target/classes/com/entity/Maintenancerecord.class differ diff --git a/device/target/classes/com/entity/Operationlog.class b/device/target/classes/com/entity/Operationlog.class new file mode 100644 index 0000000..c9a3ce3 Binary files /dev/null and b/device/target/classes/com/entity/Operationlog.class differ diff --git a/device/target/classes/com/entity/Role.class b/device/target/classes/com/entity/Role.class new file mode 100644 index 0000000..3280686 Binary files /dev/null and b/device/target/classes/com/entity/Role.class differ diff --git a/device/target/classes/com/entity/Scraprecord.class b/device/target/classes/com/entity/Scraprecord.class new file mode 100644 index 0000000..fb3e986 Binary files /dev/null and b/device/target/classes/com/entity/Scraprecord.class differ diff --git a/device/target/classes/com/entity/Supplier.class b/device/target/classes/com/entity/Supplier.class new file mode 100644 index 0000000..acbf638 Binary files /dev/null and b/device/target/classes/com/entity/Supplier.class differ diff --git a/device/target/classes/com/entity/Usagerecord.class b/device/target/classes/com/entity/Usagerecord.class new file mode 100644 index 0000000..9f96301 Binary files /dev/null and b/device/target/classes/com/entity/Usagerecord.class differ diff --git a/device/target/classes/com/entity/User.class b/device/target/classes/com/entity/User.class new file mode 100644 index 0000000..0655dc9 Binary files /dev/null and b/device/target/classes/com/entity/User.class differ diff --git a/device/target/classes/com/mapper/DeviceMapper.class b/device/target/classes/com/mapper/DeviceMapper.class new file mode 100644 index 0000000..35817c0 Binary files /dev/null and b/device/target/classes/com/mapper/DeviceMapper.class differ diff --git a/device/target/classes/com/mapper/DevicecategoryMapper.class b/device/target/classes/com/mapper/DevicecategoryMapper.class new file mode 100644 index 0000000..6231f94 Binary files /dev/null and b/device/target/classes/com/mapper/DevicecategoryMapper.class differ diff --git a/device/target/classes/com/mapper/LocationMapper.class b/device/target/classes/com/mapper/LocationMapper.class new file mode 100644 index 0000000..a0972db Binary files /dev/null and b/device/target/classes/com/mapper/LocationMapper.class differ diff --git a/device/target/classes/com/mapper/MaintenancerecordMapper.class b/device/target/classes/com/mapper/MaintenancerecordMapper.class new file mode 100644 index 0000000..6a82d78 Binary files /dev/null and b/device/target/classes/com/mapper/MaintenancerecordMapper.class differ diff --git a/device/target/classes/com/mapper/OperationlogMapper.class b/device/target/classes/com/mapper/OperationlogMapper.class new file mode 100644 index 0000000..b62cf0a Binary files /dev/null and b/device/target/classes/com/mapper/OperationlogMapper.class differ diff --git a/device/target/classes/com/mapper/RoleMapper.class b/device/target/classes/com/mapper/RoleMapper.class new file mode 100644 index 0000000..09aa029 Binary files /dev/null and b/device/target/classes/com/mapper/RoleMapper.class differ diff --git a/device/target/classes/com/mapper/ScraprecordMapper.class b/device/target/classes/com/mapper/ScraprecordMapper.class new file mode 100644 index 0000000..e226a20 Binary files /dev/null and b/device/target/classes/com/mapper/ScraprecordMapper.class differ diff --git a/device/target/classes/com/mapper/SupplierMapper.class b/device/target/classes/com/mapper/SupplierMapper.class new file mode 100644 index 0000000..b75b35a Binary files /dev/null and b/device/target/classes/com/mapper/SupplierMapper.class differ diff --git a/device/target/classes/com/mapper/UsagerecordMapper.class b/device/target/classes/com/mapper/UsagerecordMapper.class new file mode 100644 index 0000000..729eb90 Binary files /dev/null and b/device/target/classes/com/mapper/UsagerecordMapper.class differ diff --git a/device/target/classes/com/mapper/UserMapper.class b/device/target/classes/com/mapper/UserMapper.class new file mode 100644 index 0000000..f9b2de5 Binary files /dev/null and b/device/target/classes/com/mapper/UserMapper.class differ diff --git a/device/target/classes/com/service/DeviceService.class b/device/target/classes/com/service/DeviceService.class new file mode 100644 index 0000000..fe23a8b Binary files /dev/null and b/device/target/classes/com/service/DeviceService.class differ diff --git a/device/target/classes/com/service/DevicecategoryService.class b/device/target/classes/com/service/DevicecategoryService.class new file mode 100644 index 0000000..93bf8bf Binary files /dev/null and b/device/target/classes/com/service/DevicecategoryService.class differ diff --git a/device/target/classes/com/service/LocationService.class b/device/target/classes/com/service/LocationService.class new file mode 100644 index 0000000..f58311e Binary files /dev/null and b/device/target/classes/com/service/LocationService.class differ diff --git a/device/target/classes/com/service/MaintenancerecordService.class b/device/target/classes/com/service/MaintenancerecordService.class new file mode 100644 index 0000000..471cf8b Binary files /dev/null and b/device/target/classes/com/service/MaintenancerecordService.class differ diff --git a/device/target/classes/com/service/OperationlogService.class b/device/target/classes/com/service/OperationlogService.class new file mode 100644 index 0000000..9fcfae8 Binary files /dev/null and b/device/target/classes/com/service/OperationlogService.class differ diff --git a/device/target/classes/com/service/RoleService.class b/device/target/classes/com/service/RoleService.class new file mode 100644 index 0000000..8e20401 Binary files /dev/null and b/device/target/classes/com/service/RoleService.class differ diff --git a/device/target/classes/com/service/ScraprecordService.class b/device/target/classes/com/service/ScraprecordService.class new file mode 100644 index 0000000..26d23aa Binary files /dev/null and b/device/target/classes/com/service/ScraprecordService.class differ diff --git a/device/target/classes/com/service/SupplierService.class b/device/target/classes/com/service/SupplierService.class new file mode 100644 index 0000000..9d6c635 Binary files /dev/null and b/device/target/classes/com/service/SupplierService.class differ diff --git a/device/target/classes/com/service/UsagerecordService.class b/device/target/classes/com/service/UsagerecordService.class new file mode 100644 index 0000000..4ed9e89 Binary files /dev/null and b/device/target/classes/com/service/UsagerecordService.class differ diff --git a/device/target/classes/com/service/UserService.class b/device/target/classes/com/service/UserService.class new file mode 100644 index 0000000..4156d52 Binary files /dev/null and b/device/target/classes/com/service/UserService.class differ diff --git a/device/target/classes/com/service/dto/devicePageDto.class b/device/target/classes/com/service/dto/devicePageDto.class new file mode 100644 index 0000000..dc99cf0 Binary files /dev/null and b/device/target/classes/com/service/dto/devicePageDto.class differ diff --git a/device/target/classes/com/service/impl/DeviceServiceImpl.class b/device/target/classes/com/service/impl/DeviceServiceImpl.class new file mode 100644 index 0000000..82734f9 Binary files /dev/null and b/device/target/classes/com/service/impl/DeviceServiceImpl.class differ diff --git a/device/target/classes/com/service/impl/DevicecategoryServiceImpl.class b/device/target/classes/com/service/impl/DevicecategoryServiceImpl.class new file mode 100644 index 0000000..036a03b Binary files /dev/null and b/device/target/classes/com/service/impl/DevicecategoryServiceImpl.class differ diff --git a/device/target/classes/com/service/impl/LocationServiceImpl.class b/device/target/classes/com/service/impl/LocationServiceImpl.class new file mode 100644 index 0000000..28d7cfc Binary files /dev/null and b/device/target/classes/com/service/impl/LocationServiceImpl.class differ diff --git a/device/target/classes/com/service/impl/MaintenancerecordServiceImpl.class b/device/target/classes/com/service/impl/MaintenancerecordServiceImpl.class new file mode 100644 index 0000000..f29dcae Binary files /dev/null and b/device/target/classes/com/service/impl/MaintenancerecordServiceImpl.class differ diff --git a/device/target/classes/com/service/impl/OperationlogServiceImpl.class b/device/target/classes/com/service/impl/OperationlogServiceImpl.class new file mode 100644 index 0000000..29e58f6 Binary files /dev/null and b/device/target/classes/com/service/impl/OperationlogServiceImpl.class differ diff --git a/device/target/classes/com/service/impl/RoleServiceImpl.class b/device/target/classes/com/service/impl/RoleServiceImpl.class new file mode 100644 index 0000000..0e9c1e6 Binary files /dev/null and b/device/target/classes/com/service/impl/RoleServiceImpl.class differ diff --git a/device/target/classes/com/service/impl/ScraprecordServiceImpl.class b/device/target/classes/com/service/impl/ScraprecordServiceImpl.class new file mode 100644 index 0000000..b026b36 Binary files /dev/null and b/device/target/classes/com/service/impl/ScraprecordServiceImpl.class differ diff --git a/device/target/classes/com/service/impl/SupplierServiceImpl.class b/device/target/classes/com/service/impl/SupplierServiceImpl.class new file mode 100644 index 0000000..a8b8cf7 Binary files /dev/null and b/device/target/classes/com/service/impl/SupplierServiceImpl.class differ diff --git a/device/target/classes/com/service/impl/UsagerecordServiceImpl.class b/device/target/classes/com/service/impl/UsagerecordServiceImpl.class new file mode 100644 index 0000000..3ac1a02 Binary files /dev/null and b/device/target/classes/com/service/impl/UsagerecordServiceImpl.class differ diff --git a/device/target/classes/com/service/impl/UserServiceImpl.class b/device/target/classes/com/service/impl/UserServiceImpl.class new file mode 100644 index 0000000..f5c9c75 Binary files /dev/null and b/device/target/classes/com/service/impl/UserServiceImpl.class differ diff --git a/device/target/classes/mapper/DevicecategoryMapper.xml b/device/target/classes/mapper/DevicecategoryMapper.xml new file mode 100644 index 0000000..1b5d7b0 --- /dev/null +++ b/device/target/classes/mapper/DevicecategoryMapper.xml @@ -0,0 +1,16 @@ + + + + + + + + + + + + + CategoryID, CategoryName + + + diff --git a/device/target/classes/mapper/LocationMapper.xml b/device/target/classes/mapper/LocationMapper.xml new file mode 100644 index 0000000..a53f180 --- /dev/null +++ b/device/target/classes/mapper/LocationMapper.xml @@ -0,0 +1,17 @@ + + + + + + + + + + + + + + LocationID, LocationName, LocationDescription + + + diff --git a/device/target/classes/mapper/MaintenancerecordMapper.xml b/device/target/classes/mapper/MaintenancerecordMapper.xml new file mode 100644 index 0000000..dcd26a1 --- /dev/null +++ b/device/target/classes/mapper/MaintenancerecordMapper.xml @@ -0,0 +1,22 @@ + + + + + + + + + + + + + + + + + + + MaintenanceID, DeviceID, MaintenanceType, MaintenanceDate, Technician, MaintenanceDetails, MaintenanceCost, NextMaintenanceDate + + + diff --git a/device/target/classes/mapper/OperationlogMapper.xml b/device/target/classes/mapper/OperationlogMapper.xml new file mode 100644 index 0000000..bd25fc1 --- /dev/null +++ b/device/target/classes/mapper/OperationlogMapper.xml @@ -0,0 +1,18 @@ + + + + + + + + + + + + + + + LogID, OperationType, OperationTime, OperationDescription + + + diff --git a/device/target/classes/mapper/RoleMapper.xml b/device/target/classes/mapper/RoleMapper.xml new file mode 100644 index 0000000..bd07b02 --- /dev/null +++ b/device/target/classes/mapper/RoleMapper.xml @@ -0,0 +1,17 @@ + + + + + + + + + + + + + + RoleID, RoleName, PermissionDescription + + + diff --git a/device/target/classes/mapper/ScraprecordMapper.xml b/device/target/classes/mapper/ScraprecordMapper.xml new file mode 100644 index 0000000..1bf8c4a --- /dev/null +++ b/device/target/classes/mapper/ScraprecordMapper.xml @@ -0,0 +1,19 @@ + + + + + + + + + + + + + + + + ScrapID, DeviceID, ScrapDate, ScrapReason, DisposalMethod + + + diff --git a/device/target/classes/mapper/SupplierMapper.xml b/device/target/classes/mapper/SupplierMapper.xml new file mode 100644 index 0000000..3d0d7dd --- /dev/null +++ b/device/target/classes/mapper/SupplierMapper.xml @@ -0,0 +1,19 @@ + + + + + + + + + + + + + + + + SupplierID, SupplierName, ContactPerson, ContactPhone, Address + + + diff --git a/device/target/classes/mapper/UsagerecordMapper.xml b/device/target/classes/mapper/UsagerecordMapper.xml new file mode 100644 index 0000000..d5978d0 --- /dev/null +++ b/device/target/classes/mapper/UsagerecordMapper.xml @@ -0,0 +1,21 @@ + + + + + + + + + + + + + + + + + + UsageID, DeviceID, UserID, UsageDate, UsageTime, UsageType, UsageDesc + + + diff --git a/device/target/classes/mapper/UserMapper.xml b/device/target/classes/mapper/UserMapper.xml new file mode 100644 index 0000000..c6d0a2a --- /dev/null +++ b/device/target/classes/mapper/UserMapper.xml @@ -0,0 +1,18 @@ + + + + + + + + + + + + + + + UserID, UserName, Password, Role + + + diff --git a/device/target/classes/static/css/landc.css b/device/target/classes/static/css/landc.css new file mode 100644 index 0000000..ba0e970 --- /dev/null +++ b/device/target/classes/static/css/landc.css @@ -0,0 +1,83 @@ +*{ + margin: 0; + padding: 0; +} +body{ + background-image: url("../images/bg2.jpg"); +} +#main{ + background-color: rgba(255, 255, 255, 0.9); + width: 400px; + height: 500px; + margin: 60px auto 0rem; + border-radius: 15px; +} +.lo{ + width: 350px; + height: 80px; + border-bottom: 1px solid black; + margin: 0 auto; +} +/* .lo::after{ + content: ""; + display: block; + clear: both; +} */ +#top{ + width: 100%; + height: 100px; + margin: 0 auto ; + background-color: rgba(120, 120, 120, 0.3); + color: aliceblue; + font-size: 30px; + text-align: center; + line-height: 100px; + } +.bg{ + width: 20px; + height: 20px; + background-image: url("../images/icon-login.png"); + float: left; + margin-top: 45px; +} +.inp{ + margin-top: 45px; + float: left; + background-color: transparent; + border: 0; + outline: none; +} +.t1{ + background-position:-52px 0; +} +.t2{ + background-position:-104px 0; +} +#xl{ + width: 350px; + height: 50px; + text-align: center; + + margin: 30px auto 0; + display: block; +} +#btn{ + width: 350px; + height: 50px; + text-align: center; + background-color: rgba(0, 20, 255, 0.9); + margin: 30px auto 0; + display: block; + /* border: 0; */ + color: white; + +} +#foot{ + margin-top: 50px; + color: white; + text-align: center; +} +#a1{ + color: white; + text-decoration: none; +} \ No newline at end of file diff --git a/device/target/classes/static/device.html b/device/target/classes/static/device.html new file mode 100644 index 0000000..a66a396 --- /dev/null +++ b/device/target/classes/static/device.html @@ -0,0 +1,293 @@ + + + + + + + + + + + + + + + + +
+ + + 查找 + 运行 + + + + + + + + + + + + + + + 取 消 + 确 定 + + + + + + + + + + + + 取 消 + 确 定 + + + +
+ + + + \ No newline at end of file diff --git a/device/target/classes/static/index.html b/device/target/classes/static/index.html new file mode 100644 index 0000000..1746eba --- /dev/null +++ b/device/target/classes/static/index.html @@ -0,0 +1,82 @@ + + + + + + + + + + + + + + + + +
+ + + + + + + 设备管理 + 维护管理 + + + + + 操作日志管理 + 报废记录管理 + 用户日志 + + + + + + 供应商管理 + + + + + + + + +
+ + + + + \ No newline at end of file diff --git a/device/target/classes/static/js/axios.min.js b/device/target/classes/static/js/axios.min.js new file mode 100644 index 0000000..2d03054 --- /dev/null +++ b/device/target/classes/static/js/axios.min.js @@ -0,0 +1,3 @@ +/* axios v0.20.0 | (c) 2020 by Matt Zabriskie */ +!function(e,t){"object"==typeof exports&&"object"==typeof module?module.exports=t():"function"==typeof define&&define.amd?define([],t):"object"==typeof exports?exports.axios=t():e.axios=t()}(this,function(){return function(e){function t(r){if(n[r])return n[r].exports;var o=n[r]={exports:{},id:r,loaded:!1};return e[r].call(o.exports,o,o.exports,t),o.loaded=!0,o.exports}var n={};return t.m=e,t.c=n,t.p="",t(0)}([function(e,t,n){e.exports=n(1)},function(e,t,n){"use strict";function r(e){var t=new s(e),n=i(s.prototype.request,t);return o.extend(n,s.prototype,t),o.extend(n,t),n}var o=n(2),i=n(3),s=n(4),a=n(22),u=n(10),c=r(u);c.Axios=s,c.create=function(e){return r(a(c.defaults,e))},c.Cancel=n(23),c.CancelToken=n(24),c.isCancel=n(9),c.all=function(e){return Promise.all(e)},c.spread=n(25),e.exports=c,e.exports.default=c},function(e,t,n){"use strict";function r(e){return"[object Array]"===R.call(e)}function o(e){return"undefined"==typeof e}function i(e){return null!==e&&!o(e)&&null!==e.constructor&&!o(e.constructor)&&"function"==typeof e.constructor.isBuffer&&e.constructor.isBuffer(e)}function s(e){return"[object ArrayBuffer]"===R.call(e)}function a(e){return"undefined"!=typeof FormData&&e instanceof FormData}function u(e){var t;return t="undefined"!=typeof ArrayBuffer&&ArrayBuffer.isView?ArrayBuffer.isView(e):e&&e.buffer&&e.buffer instanceof ArrayBuffer}function c(e){return"string"==typeof e}function f(e){return"number"==typeof e}function p(e){return null!==e&&"object"==typeof e}function d(e){if("[object Object]"!==R.call(e))return!1;var t=Object.getPrototypeOf(e);return null===t||t===Object.prototype}function l(e){return"[object Date]"===R.call(e)}function h(e){return"[object File]"===R.call(e)}function m(e){return"[object Blob]"===R.call(e)}function y(e){return"[object Function]"===R.call(e)}function g(e){return p(e)&&y(e.pipe)}function v(e){return"undefined"!=typeof URLSearchParams&&e instanceof URLSearchParams}function x(e){return e.replace(/^\s*/,"").replace(/\s*$/,"")}function w(){return("undefined"==typeof navigator||"ReactNative"!==navigator.product&&"NativeScript"!==navigator.product&&"NS"!==navigator.product)&&("undefined"!=typeof window&&"undefined"!=typeof document)}function b(e,t){if(null!==e&&"undefined"!=typeof e)if("object"!=typeof e&&(e=[e]),r(e))for(var n=0,o=e.length;n=200&&e<300}};u.headers={common:{Accept:"application/json, text/plain, */*"}},i.forEach(["delete","get","head"],function(e){u.headers[e]={}}),i.forEach(["post","put","patch"],function(e){u.headers[e]=i.merge(a)}),e.exports=u},function(e,t,n){"use strict";var r=n(2);e.exports=function(e,t){r.forEach(e,function(n,r){r!==t&&r.toUpperCase()===t.toUpperCase()&&(e[t]=n,delete e[r])})}},function(e,t,n){"use strict";var r=n(2),o=n(13),i=n(16),s=n(5),a=n(17),u=n(20),c=n(21),f=n(14);e.exports=function(e){return new Promise(function(t,n){var p=e.data,d=e.headers;r.isFormData(p)&&delete d["Content-Type"],(r.isBlob(p)||r.isFile(p))&&p.type&&delete d["Content-Type"];var l=new XMLHttpRequest;if(e.auth){var h=e.auth.username||"",m=unescape(encodeURIComponent(e.auth.password))||"";d.Authorization="Basic "+btoa(h+":"+m)}var y=a(e.baseURL,e.url);if(l.open(e.method.toUpperCase(),s(y,e.params,e.paramsSerializer),!0),l.timeout=e.timeout,l.onreadystatechange=function(){if(l&&4===l.readyState&&(0!==l.status||l.responseURL&&0===l.responseURL.indexOf("file:"))){var r="getAllResponseHeaders"in l?u(l.getAllResponseHeaders()):null,i=e.responseType&&"text"!==e.responseType?l.response:l.responseText,s={data:i,status:l.status,statusText:l.statusText,headers:r,config:e,request:l};o(t,n,s),l=null}},l.onabort=function(){l&&(n(f("Request aborted",e,"ECONNABORTED",l)),l=null)},l.onerror=function(){n(f("Network Error",e,null,l)),l=null},l.ontimeout=function(){var t="timeout of "+e.timeout+"ms exceeded";e.timeoutErrorMessage&&(t=e.timeoutErrorMessage),n(f(t,e,"ECONNABORTED",l)),l=null},r.isStandardBrowserEnv()){var g=(e.withCredentials||c(y))&&e.xsrfCookieName?i.read(e.xsrfCookieName):void 0;g&&(d[e.xsrfHeaderName]=g)}if("setRequestHeader"in l&&r.forEach(d,function(e,t){"undefined"==typeof p&&"content-type"===t.toLowerCase()?delete d[t]:l.setRequestHeader(t,e)}),r.isUndefined(e.withCredentials)||(l.withCredentials=!!e.withCredentials),e.responseType)try{l.responseType=e.responseType}catch(t){if("json"!==e.responseType)throw t}"function"==typeof e.onDownloadProgress&&l.addEventListener("progress",e.onDownloadProgress),"function"==typeof e.onUploadProgress&&l.upload&&l.upload.addEventListener("progress",e.onUploadProgress),e.cancelToken&&e.cancelToken.promise.then(function(e){l&&(l.abort(),n(e),l=null)}),p||(p=null),l.send(p)})}},function(e,t,n){"use strict";var r=n(14);e.exports=function(e,t,n){var o=n.config.validateStatus;n.status&&o&&!o(n.status)?t(r("Request failed with status code "+n.status,n.config,null,n.request,n)):e(n)}},function(e,t,n){"use strict";var r=n(15);e.exports=function(e,t,n,o,i){var s=new Error(e);return r(s,t,n,o,i)}},function(e,t){"use strict";e.exports=function(e,t,n,r,o){return e.config=t,n&&(e.code=n),e.request=r,e.response=o,e.isAxiosError=!0,e.toJSON=function(){return{message:this.message,name:this.name,description:this.description,number:this.number,fileName:this.fileName,lineNumber:this.lineNumber,columnNumber:this.columnNumber,stack:this.stack,config:this.config,code:this.code}},e}},function(e,t,n){"use strict";var r=n(2);e.exports=r.isStandardBrowserEnv()?function(){return{write:function(e,t,n,o,i,s){var a=[];a.push(e+"="+encodeURIComponent(t)),r.isNumber(n)&&a.push("expires="+new Date(n).toGMTString()),r.isString(o)&&a.push("path="+o),r.isString(i)&&a.push("domain="+i),s===!0&&a.push("secure"),document.cookie=a.join("; ")},read:function(e){var t=document.cookie.match(new RegExp("(^|;\\s*)("+e+")=([^;]*)"));return t?decodeURIComponent(t[3]):null},remove:function(e){this.write(e,"",Date.now()-864e5)}}}():function(){return{write:function(){},read:function(){return null},remove:function(){}}}()},function(e,t,n){"use strict";var r=n(18),o=n(19);e.exports=function(e,t){return e&&!r(t)?o(e,t):t}},function(e,t){"use strict";e.exports=function(e){return/^([a-z][a-z\d\+\-\.]*:)?\/\//i.test(e)}},function(e,t){"use strict";e.exports=function(e,t){return t?e.replace(/\/+$/,"")+"/"+t.replace(/^\/+/,""):e}},function(e,t,n){"use strict";var r=n(2),o=["age","authorization","content-length","content-type","etag","expires","from","host","if-modified-since","if-unmodified-since","last-modified","location","max-forwards","proxy-authorization","referer","retry-after","user-agent"];e.exports=function(e){var t,n,i,s={};return e?(r.forEach(e.split("\n"),function(e){if(i=e.indexOf(":"),t=r.trim(e.substr(0,i)).toLowerCase(),n=r.trim(e.substr(i+1)),t){if(s[t]&&o.indexOf(t)>=0)return;"set-cookie"===t?s[t]=(s[t]?s[t]:[]).concat([n]):s[t]=s[t]?s[t]+", "+n:n}}),s):s}},function(e,t,n){"use strict";var r=n(2);e.exports=r.isStandardBrowserEnv()?function(){function e(e){var t=e;return n&&(o.setAttribute("href",t),t=o.href),o.setAttribute("href",t),{href:o.href,protocol:o.protocol?o.protocol.replace(/:$/,""):"",host:o.host,search:o.search?o.search.replace(/^\?/,""):"",hash:o.hash?o.hash.replace(/^#/,""):"",hostname:o.hostname,port:o.port,pathname:"/"===o.pathname.charAt(0)?o.pathname:"/"+o.pathname}}var t,n=/(msie|trident)/i.test(navigator.userAgent),o=document.createElement("a");return t=e(window.location.href),function(n){var o=r.isString(n)?e(n):n;return o.protocol===t.protocol&&o.host===t.host}}():function(){return function(){return!0}}()},function(e,t,n){"use strict";var r=n(2);e.exports=function(e,t){function n(e,t){return r.isPlainObject(e)&&r.isPlainObject(t)?r.merge(e,t):r.isPlainObject(t)?r.merge({},t):r.isArray(t)?t.slice():t}function o(o){r.isUndefined(t[o])?r.isUndefined(e[o])||(i[o]=n(void 0,e[o])):i[o]=n(e[o],t[o])}t=t||{};var i={},s=["url","method","data"],a=["headers","auth","proxy","params"],u=["baseURL","transformRequest","transformResponse","paramsSerializer","timeout","timeoutMessage","withCredentials","adapter","responseType","xsrfCookieName","xsrfHeaderName","onUploadProgress","onDownloadProgress","decompress","maxContentLength","maxBodyLength","maxRedirects","transport","httpAgent","httpsAgent","cancelToken","socketPath","responseEncoding"],c=["validateStatus"];r.forEach(s,function(e){r.isUndefined(t[e])||(i[e]=n(void 0,t[e]))}),r.forEach(a,o),r.forEach(u,function(o){r.isUndefined(t[o])?r.isUndefined(e[o])||(i[o]=n(void 0,e[o])):i[o]=n(void 0,t[o])}),r.forEach(c,function(r){r in t?i[r]=n(e[r],t[r]):r in e&&(i[r]=n(void 0,e[r]))});var f=s.concat(a).concat(u).concat(c),p=Object.keys(e).concat(Object.keys(t)).filter(function(e){return f.indexOf(e)===-1});return r.forEach(p,o),i}},function(e,t){"use strict";function n(e){this.message=e}n.prototype.toString=function(){return"Cancel"+(this.message?": "+this.message:"")},n.prototype.__CANCEL__=!0,e.exports=n},function(e,t,n){"use strict";function r(e){if("function"!=typeof e)throw new TypeError("executor must be a function.");var t;this.promise=new Promise(function(e){t=e});var n=this;e(function(e){n.reason||(n.reason=new o(e),t(n.reason))})}var o=n(23);r.prototype.throwIfRequested=function(){if(this.reason)throw this.reason},r.source=function(){var e,t=new r(function(t){e=t});return{token:t,cancel:e}},e.exports=r},function(e,t){"use strict";e.exports=function(e){return function(t){return e.apply(null,t)}}}])}); +//# sourceMappingURL=axios.min.map \ No newline at end of file diff --git a/device/target/classes/static/js/element.js b/device/target/classes/static/js/element.js new file mode 100644 index 0000000..6d6592f --- /dev/null +++ b/device/target/classes/static/js/element.js @@ -0,0 +1 @@ +!function(e,t){"object"==typeof exports&&"object"==typeof module?module.exports=t(require("vue")):"function"==typeof define&&define.amd?define("ELEMENT",["vue"],t):"object"==typeof exports?exports.ELEMENT=t(require("vue")):e.ELEMENT=t(e.Vue)}("undefined"!=typeof self?self:this,function(e){return function(e){var t={};function n(i){if(t[i])return t[i].exports;var r=t[i]={i:i,l:!1,exports:{}};return e[i].call(r.exports,r,r.exports,n),r.l=!0,r.exports}return n.m=e,n.c=t,n.d=function(e,t,i){n.o(e,t)||Object.defineProperty(e,t,{enumerable:!0,get:i})},n.r=function(e){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},n.t=function(e,t){if(1&t&&(e=n(e)),8&t)return e;if(4&t&&"object"==typeof e&&e&&e.__esModule)return e;var i=Object.create(null);if(n.r(i),Object.defineProperty(i,"default",{enumerable:!0,value:e}),2&t&&"string"!=typeof e)for(var r in e)n.d(i,r,function(t){return e[t]}.bind(null,r));return i},n.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return n.d(t,"a",t),t},n.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},n.p="/dist/",n(n.s=51)}([function(t,n){t.exports=e},function(e,t,n){var i=n(4);e.exports=function(e,t,n){return void 0===n?i(e,t,!1):i(e,n,!1!==t)}},function(e,t,n){var i;!function(r){"use strict";var o={},s=/d{1,4}|M{1,4}|yy(?:yy)?|S{1,3}|Do|ZZ|([HhMsDm])\1?|[aA]|"[^"]*"|'[^']*'/g,a="[^\\s]+",l=/\[([^]*?)\]/gm,u=function(){};function c(e,t){for(var n=[],i=0,r=e.length;i3?0:(e-e%10!=10)*e%10]}};var g={D:function(e){return e.getDay()},DD:function(e){return d(e.getDay())},Do:function(e,t){return t.DoFn(e.getDate())},d:function(e){return e.getDate()},dd:function(e){return d(e.getDate())},ddd:function(e,t){return t.dayNamesShort[e.getDay()]},dddd:function(e,t){return t.dayNames[e.getDay()]},M:function(e){return e.getMonth()+1},MM:function(e){return d(e.getMonth()+1)},MMM:function(e,t){return t.monthNamesShort[e.getMonth()]},MMMM:function(e,t){return t.monthNames[e.getMonth()]},yy:function(e){return d(String(e.getFullYear()),4).substr(2)},yyyy:function(e){return d(e.getFullYear(),4)},h:function(e){return e.getHours()%12||12},hh:function(e){return d(e.getHours()%12||12)},H:function(e){return e.getHours()},HH:function(e){return d(e.getHours())},m:function(e){return e.getMinutes()},mm:function(e){return d(e.getMinutes())},s:function(e){return e.getSeconds()},ss:function(e){return d(e.getSeconds())},S:function(e){return Math.round(e.getMilliseconds()/100)},SS:function(e){return d(Math.round(e.getMilliseconds()/10),2)},SSS:function(e){return d(e.getMilliseconds(),3)},a:function(e,t){return e.getHours()<12?t.amPm[0]:t.amPm[1]},A:function(e,t){return e.getHours()<12?t.amPm[0].toUpperCase():t.amPm[1].toUpperCase()},ZZ:function(e){var t=e.getTimezoneOffset();return(t>0?"-":"+")+d(100*Math.floor(Math.abs(t)/60)+Math.abs(t)%60,4)}},y={d:["\\d\\d?",function(e,t){e.day=t}],Do:["\\d\\d?"+a,function(e,t){e.day=parseInt(t,10)}],M:["\\d\\d?",function(e,t){e.month=t-1}],yy:["\\d\\d?",function(e,t){var n=+(""+(new Date).getFullYear()).substr(0,2);e.year=""+(t>68?n-1:n)+t}],h:["\\d\\d?",function(e,t){e.hour=t}],m:["\\d\\d?",function(e,t){e.minute=t}],s:["\\d\\d?",function(e,t){e.second=t}],yyyy:["\\d{4}",function(e,t){e.year=t}],S:["\\d",function(e,t){e.millisecond=100*t}],SS:["\\d{2}",function(e,t){e.millisecond=10*t}],SSS:["\\d{3}",function(e,t){e.millisecond=t}],D:["\\d\\d?",u],ddd:[a,u],MMM:[a,h("monthNamesShort")],MMMM:[a,h("monthNames")],a:[a,function(e,t,n){var i=t.toLowerCase();i===n.amPm[0]?e.isPm=!1:i===n.amPm[1]&&(e.isPm=!0)}],ZZ:["[^\\s]*?[\\+\\-]\\d\\d:?\\d\\d|[^\\s]*?Z",function(e,t){var n,i=(t+"").match(/([+-]|\d\d)/gi);i&&(n=60*i[1]+parseInt(i[2],10),e.timezoneOffset="+"===i[0]?n:-n)}]};y.dd=y.d,y.dddd=y.ddd,y.DD=y.D,y.mm=y.m,y.hh=y.H=y.HH=y.h,y.MM=y.M,y.ss=y.s,y.A=y.a,o.masks={default:"ddd MMM dd yyyy HH:mm:ss",shortDate:"M/D/yy",mediumDate:"MMM d, yyyy",longDate:"MMMM d, yyyy",fullDate:"dddd, MMMM d, yyyy",shortTime:"HH:mm",mediumTime:"HH:mm:ss",longTime:"HH:mm:ss.SSS"},o.format=function(e,t,n){var i=n||o.i18n;if("number"==typeof e&&(e=new Date(e)),"[object Date]"!==Object.prototype.toString.call(e)||isNaN(e.getTime()))throw new Error("Invalid Date in fecha.format");t=o.masks[t]||t||o.masks.default;var r=[];return(t=(t=t.replace(l,function(e,t){return r.push(t),"@@@"})).replace(s,function(t){return t in g?g[t](e,i):t.slice(1,t.length-1)})).replace(/@@@/g,function(){return r.shift()})},o.parse=function(e,t,n){var i=n||o.i18n;if("string"!=typeof t)throw new Error("Invalid format in fecha.parse");if(t=o.masks[t]||t,e.length>1e3)return null;var r={},a=[],u=[];t=t.replace(l,function(e,t){return u.push(t),"@@@"});var c,h=(c=t,c.replace(/[|\\{()[^$+*?.-]/g,"\\$&")).replace(s,function(e){if(y[e]){var t=y[e];return a.push(t[1]),"("+t[0]+")"}return e});h=h.replace(/@@@/g,function(){return u.shift()});var d=e.match(new RegExp(h,"i"));if(!d)return null;for(var f=1;fe?u():!0!==t&&(r=setTimeout(i?function(){r=void 0}:u,void 0===i?e-a:e))}}},function(e,t){var n=e.exports="undefined"!=typeof window&&window.Math==Math?window:"undefined"!=typeof self&&self.Math==Math?self:Function("return this")();"number"==typeof __g&&(__g=n)},function(e,t){var n=/^(attrs|props|on|nativeOn|class|style|hook)$/;function i(e,t){return function(){e&&e.apply(this,arguments),t&&t.apply(this,arguments)}}e.exports=function(e){return e.reduce(function(e,t){var r,o,s,a,l;for(s in t)if(r=e[s],o=t[s],r&&n.test(s))if("class"===s&&("string"==typeof r&&(l=r,e[s]=r={},r[l]=!0),"string"==typeof o&&(l=o,t[s]=o={},o[l]=!0)),"on"===s||"nativeOn"===s||"hook"===s)for(a in o)r[a]=i(r[a],o[a]);else if(Array.isArray(r))e[s]=r.concat(o);else if(Array.isArray(o))e[s]=[r].concat(o);else for(a in o)r[a]=o[a];else e[s]=t[s];return e},{})}},function(e,t){var n={}.hasOwnProperty;e.exports=function(e,t){return n.call(e,t)}},function(e,t,n){"use strict";t.__esModule=!0;var i,r=n(57),o=(i=r)&&i.__esModule?i:{default:i};t.default=o.default||function(e){for(var t=1;t>>1,z=[["ary",k],["bind",g],["bindKey",y],["curry",_],["curryRight",w],["flip",D],["partial",x],["partialRight",C],["rearg",S]],R="[object Arguments]",H="[object Array]",j="[object AsyncFunction]",W="[object Boolean]",q="[object Date]",Y="[object DOMException]",K="[object Error]",U="[object Function]",G="[object GeneratorFunction]",X="[object Map]",Z="[object Number]",J="[object Null]",Q="[object Object]",ee="[object Proxy]",te="[object RegExp]",ne="[object Set]",ie="[object String]",re="[object Symbol]",oe="[object Undefined]",se="[object WeakMap]",ae="[object WeakSet]",le="[object ArrayBuffer]",ue="[object DataView]",ce="[object Float32Array]",he="[object Float64Array]",de="[object Int8Array]",fe="[object Int16Array]",pe="[object Int32Array]",me="[object Uint8Array]",ve="[object Uint8ClampedArray]",ge="[object Uint16Array]",ye="[object Uint32Array]",be=/\b__p \+= '';/g,_e=/\b(__p \+=) '' \+/g,we=/(__e\(.*?\)|\b__t\)) \+\n'';/g,xe=/&(?:amp|lt|gt|quot|#39);/g,Ce=/[&<>"']/g,ke=RegExp(xe.source),Se=RegExp(Ce.source),De=/<%-([\s\S]+?)%>/g,Ee=/<%([\s\S]+?)%>/g,$e=/<%=([\s\S]+?)%>/g,Te=/\.|\[(?:[^[\]]*|(["'])(?:(?!\1)[^\\]|\\.)*?\1)\]/,Me=/^\w*$/,Ne=/[^.[\]]+|\[(?:(-?\d+(?:\.\d+)?)|(["'])((?:(?!\2)[^\\]|\\.)*?)\2)\]|(?=(?:\.|\[\])(?:\.|\[\]|$))/g,Oe=/[\\^$.*+?()[\]{}|]/g,Pe=RegExp(Oe.source),Ie=/^\s+|\s+$/g,Ae=/^\s+/,Fe=/\s+$/,Le=/\{(?:\n\/\* \[wrapped with .+\] \*\/)?\n?/,Ve=/\{\n\/\* \[wrapped with (.+)\] \*/,Be=/,? & /,ze=/[^\x00-\x2f\x3a-\x40\x5b-\x60\x7b-\x7f]+/g,Re=/\\(\\)?/g,He=/\$\{([^\\}]*(?:\\.[^\\}]*)*)\}/g,je=/\w*$/,We=/^[-+]0x[0-9a-f]+$/i,qe=/^0b[01]+$/i,Ye=/^\[object .+?Constructor\]$/,Ke=/^0o[0-7]+$/i,Ue=/^(?:0|[1-9]\d*)$/,Ge=/[\xc0-\xd6\xd8-\xf6\xf8-\xff\u0100-\u017f]/g,Xe=/($^)/,Ze=/['\n\r\u2028\u2029\\]/g,Je="\\u0300-\\u036f\\ufe20-\\ufe2f\\u20d0-\\u20ff",Qe="\\xac\\xb1\\xd7\\xf7\\x00-\\x2f\\x3a-\\x40\\x5b-\\x60\\x7b-\\xbf\\u2000-\\u206f \\t\\x0b\\f\\xa0\\ufeff\\n\\r\\u2028\\u2029\\u1680\\u180e\\u2000\\u2001\\u2002\\u2003\\u2004\\u2005\\u2006\\u2007\\u2008\\u2009\\u200a\\u202f\\u205f\\u3000",et="[\\ud800-\\udfff]",tt="["+Qe+"]",nt="["+Je+"]",it="\\d+",rt="[\\u2700-\\u27bf]",ot="[a-z\\xdf-\\xf6\\xf8-\\xff]",st="[^\\ud800-\\udfff"+Qe+it+"\\u2700-\\u27bfa-z\\xdf-\\xf6\\xf8-\\xffA-Z\\xc0-\\xd6\\xd8-\\xde]",at="\\ud83c[\\udffb-\\udfff]",lt="[^\\ud800-\\udfff]",ut="(?:\\ud83c[\\udde6-\\uddff]){2}",ct="[\\ud800-\\udbff][\\udc00-\\udfff]",ht="[A-Z\\xc0-\\xd6\\xd8-\\xde]",dt="(?:"+ot+"|"+st+")",ft="(?:"+ht+"|"+st+")",pt="(?:"+nt+"|"+at+")"+"?",mt="[\\ufe0e\\ufe0f]?"+pt+("(?:\\u200d(?:"+[lt,ut,ct].join("|")+")[\\ufe0e\\ufe0f]?"+pt+")*"),vt="(?:"+[rt,ut,ct].join("|")+")"+mt,gt="(?:"+[lt+nt+"?",nt,ut,ct,et].join("|")+")",yt=RegExp("['’]","g"),bt=RegExp(nt,"g"),_t=RegExp(at+"(?="+at+")|"+gt+mt,"g"),wt=RegExp([ht+"?"+ot+"+(?:['’](?:d|ll|m|re|s|t|ve))?(?="+[tt,ht,"$"].join("|")+")",ft+"+(?:['’](?:D|LL|M|RE|S|T|VE))?(?="+[tt,ht+dt,"$"].join("|")+")",ht+"?"+dt+"+(?:['’](?:d|ll|m|re|s|t|ve))?",ht+"+(?:['’](?:D|LL|M|RE|S|T|VE))?","\\d*(?:1ST|2ND|3RD|(?![123])\\dTH)(?=\\b|[a-z_])","\\d*(?:1st|2nd|3rd|(?![123])\\dth)(?=\\b|[A-Z_])",it,vt].join("|"),"g"),xt=RegExp("[\\u200d\\ud800-\\udfff"+Je+"\\ufe0e\\ufe0f]"),Ct=/[a-z][A-Z]|[A-Z]{2,}[a-z]|[0-9][a-zA-Z]|[a-zA-Z][0-9]|[^a-zA-Z0-9 ]/,kt=["Array","Buffer","DataView","Date","Error","Float32Array","Float64Array","Function","Int8Array","Int16Array","Int32Array","Map","Math","Object","Promise","RegExp","Set","String","Symbol","TypeError","Uint8Array","Uint8ClampedArray","Uint16Array","Uint32Array","WeakMap","_","clearTimeout","isFinite","parseInt","setTimeout"],St=-1,Dt={};Dt[ce]=Dt[he]=Dt[de]=Dt[fe]=Dt[pe]=Dt[me]=Dt[ve]=Dt[ge]=Dt[ye]=!0,Dt[R]=Dt[H]=Dt[le]=Dt[W]=Dt[ue]=Dt[q]=Dt[K]=Dt[U]=Dt[X]=Dt[Z]=Dt[Q]=Dt[te]=Dt[ne]=Dt[ie]=Dt[se]=!1;var Et={};Et[R]=Et[H]=Et[le]=Et[ue]=Et[W]=Et[q]=Et[ce]=Et[he]=Et[de]=Et[fe]=Et[pe]=Et[X]=Et[Z]=Et[Q]=Et[te]=Et[ne]=Et[ie]=Et[re]=Et[me]=Et[ve]=Et[ge]=Et[ye]=!0,Et[K]=Et[U]=Et[se]=!1;var $t={"\\":"\\","'":"'","\n":"n","\r":"r","\u2028":"u2028","\u2029":"u2029"},Tt=parseFloat,Mt=parseInt,Nt="object"==typeof e&&e&&e.Object===Object&&e,Ot="object"==typeof self&&self&&self.Object===Object&&self,Pt=Nt||Ot||Function("return this")(),It=t&&!t.nodeType&&t,At=It&&"object"==typeof i&&i&&!i.nodeType&&i,Ft=At&&At.exports===It,Lt=Ft&&Nt.process,Vt=function(){try{var e=At&&At.require&&At.require("util").types;return e||Lt&&Lt.binding&&Lt.binding("util")}catch(e){}}(),Bt=Vt&&Vt.isArrayBuffer,zt=Vt&&Vt.isDate,Rt=Vt&&Vt.isMap,Ht=Vt&&Vt.isRegExp,jt=Vt&&Vt.isSet,Wt=Vt&&Vt.isTypedArray;function qt(e,t,n){switch(n.length){case 0:return e.call(t);case 1:return e.call(t,n[0]);case 2:return e.call(t,n[0],n[1]);case 3:return e.call(t,n[0],n[1],n[2])}return e.apply(t,n)}function Yt(e,t,n,i){for(var r=-1,o=null==e?0:e.length;++r-1}function Jt(e,t,n){for(var i=-1,r=null==e?0:e.length;++i-1;);return n}function wn(e,t){for(var n=e.length;n--&&ln(t,e[n],0)>-1;);return n}var xn=fn({"À":"A","Á":"A","Â":"A","Ã":"A","Ä":"A","Å":"A","à":"a","á":"a","â":"a","ã":"a","ä":"a","å":"a","Ç":"C","ç":"c","Ð":"D","ð":"d","È":"E","É":"E","Ê":"E","Ë":"E","è":"e","é":"e","ê":"e","ë":"e","Ì":"I","Í":"I","Î":"I","Ï":"I","ì":"i","í":"i","î":"i","ï":"i","Ñ":"N","ñ":"n","Ò":"O","Ó":"O","Ô":"O","Õ":"O","Ö":"O","Ø":"O","ò":"o","ó":"o","ô":"o","õ":"o","ö":"o","ø":"o","Ù":"U","Ú":"U","Û":"U","Ü":"U","ù":"u","ú":"u","û":"u","ü":"u","Ý":"Y","ý":"y","ÿ":"y","Æ":"Ae","æ":"ae","Þ":"Th","þ":"th","ß":"ss","Ā":"A","Ă":"A","Ą":"A","ā":"a","ă":"a","ą":"a","Ć":"C","Ĉ":"C","Ċ":"C","Č":"C","ć":"c","ĉ":"c","ċ":"c","č":"c","Ď":"D","Đ":"D","ď":"d","đ":"d","Ē":"E","Ĕ":"E","Ė":"E","Ę":"E","Ě":"E","ē":"e","ĕ":"e","ė":"e","ę":"e","ě":"e","Ĝ":"G","Ğ":"G","Ġ":"G","Ģ":"G","ĝ":"g","ğ":"g","ġ":"g","ģ":"g","Ĥ":"H","Ħ":"H","ĥ":"h","ħ":"h","Ĩ":"I","Ī":"I","Ĭ":"I","Į":"I","İ":"I","ĩ":"i","ī":"i","ĭ":"i","į":"i","ı":"i","Ĵ":"J","ĵ":"j","Ķ":"K","ķ":"k","ĸ":"k","Ĺ":"L","Ļ":"L","Ľ":"L","Ŀ":"L","Ł":"L","ĺ":"l","ļ":"l","ľ":"l","ŀ":"l","ł":"l","Ń":"N","Ņ":"N","Ň":"N","Ŋ":"N","ń":"n","ņ":"n","ň":"n","ŋ":"n","Ō":"O","Ŏ":"O","Ő":"O","ō":"o","ŏ":"o","ő":"o","Ŕ":"R","Ŗ":"R","Ř":"R","ŕ":"r","ŗ":"r","ř":"r","Ś":"S","Ŝ":"S","Ş":"S","Š":"S","ś":"s","ŝ":"s","ş":"s","š":"s","Ţ":"T","Ť":"T","Ŧ":"T","ţ":"t","ť":"t","ŧ":"t","Ũ":"U","Ū":"U","Ŭ":"U","Ů":"U","Ű":"U","Ų":"U","ũ":"u","ū":"u","ŭ":"u","ů":"u","ű":"u","ų":"u","Ŵ":"W","ŵ":"w","Ŷ":"Y","ŷ":"y","Ÿ":"Y","Ź":"Z","Ż":"Z","Ž":"Z","ź":"z","ż":"z","ž":"z","IJ":"IJ","ij":"ij","Œ":"Oe","œ":"oe","ʼn":"'n","ſ":"s"}),Cn=fn({"&":"&","<":"<",">":">",'"':""","'":"'"});function kn(e){return"\\"+$t[e]}function Sn(e){return xt.test(e)}function Dn(e){var t=-1,n=Array(e.size);return e.forEach(function(e,i){n[++t]=[i,e]}),n}function En(e,t){return function(n){return e(t(n))}}function $n(e,t){for(var n=-1,i=e.length,r=0,o=[];++n",""":'"',"'":"'"});var An=function e(t){var n,i=(t=null==t?Pt:An.defaults(Pt.Object(),t,An.pick(Pt,kt))).Array,r=t.Date,Je=t.Error,Qe=t.Function,et=t.Math,tt=t.Object,nt=t.RegExp,it=t.String,rt=t.TypeError,ot=i.prototype,st=Qe.prototype,at=tt.prototype,lt=t["__core-js_shared__"],ut=st.toString,ct=at.hasOwnProperty,ht=0,dt=(n=/[^.]+$/.exec(lt&<.keys&<.keys.IE_PROTO||""))?"Symbol(src)_1."+n:"",ft=at.toString,pt=ut.call(tt),mt=Pt._,vt=nt("^"+ut.call(ct).replace(Oe,"\\$&").replace(/hasOwnProperty|(function).*?(?=\\\()| for .+?(?=\\\])/g,"$1.*?")+"$"),gt=Ft?t.Buffer:o,_t=t.Symbol,xt=t.Uint8Array,$t=gt?gt.allocUnsafe:o,Nt=En(tt.getPrototypeOf,tt),Ot=tt.create,It=at.propertyIsEnumerable,At=ot.splice,Lt=_t?_t.isConcatSpreadable:o,Vt=_t?_t.iterator:o,on=_t?_t.toStringTag:o,fn=function(){try{var e=zo(tt,"defineProperty");return e({},"",{}),e}catch(e){}}(),Fn=t.clearTimeout!==Pt.clearTimeout&&t.clearTimeout,Ln=r&&r.now!==Pt.Date.now&&r.now,Vn=t.setTimeout!==Pt.setTimeout&&t.setTimeout,Bn=et.ceil,zn=et.floor,Rn=tt.getOwnPropertySymbols,Hn=gt?gt.isBuffer:o,jn=t.isFinite,Wn=ot.join,qn=En(tt.keys,tt),Yn=et.max,Kn=et.min,Un=r.now,Gn=t.parseInt,Xn=et.random,Zn=ot.reverse,Jn=zo(t,"DataView"),Qn=zo(t,"Map"),ei=zo(t,"Promise"),ti=zo(t,"Set"),ni=zo(t,"WeakMap"),ii=zo(tt,"create"),ri=ni&&new ni,oi={},si=hs(Jn),ai=hs(Qn),li=hs(ei),ui=hs(ti),ci=hs(ni),hi=_t?_t.prototype:o,di=hi?hi.valueOf:o,fi=hi?hi.toString:o;function pi(e){if($a(e)&&!ga(e)&&!(e instanceof yi)){if(e instanceof gi)return e;if(ct.call(e,"__wrapped__"))return ds(e)}return new gi(e)}var mi=function(){function e(){}return function(t){if(!Ea(t))return{};if(Ot)return Ot(t);e.prototype=t;var n=new e;return e.prototype=o,n}}();function vi(){}function gi(e,t){this.__wrapped__=e,this.__actions__=[],this.__chain__=!!t,this.__index__=0,this.__values__=o}function yi(e){this.__wrapped__=e,this.__actions__=[],this.__dir__=1,this.__filtered__=!1,this.__iteratees__=[],this.__takeCount__=L,this.__views__=[]}function bi(e){var t=-1,n=null==e?0:e.length;for(this.clear();++t=t?e:t)),e}function Fi(e,t,n,i,r,s){var a,l=t&d,u=t&f,c=t&p;if(n&&(a=r?n(e,i,r,s):n(e)),a!==o)return a;if(!Ea(e))return e;var h=ga(e);if(h){if(a=function(e){var t=e.length,n=new e.constructor(t);return t&&"string"==typeof e[0]&&ct.call(e,"index")&&(n.index=e.index,n.input=e.input),n}(e),!l)return io(e,a)}else{var m=jo(e),v=m==U||m==G;if(wa(e))return Zr(e,l);if(m==Q||m==R||v&&!r){if(a=u||v?{}:qo(e),!l)return u?function(e,t){return ro(e,Ho(e),t)}(e,function(e,t){return e&&ro(t,ol(t),e)}(a,e)):function(e,t){return ro(e,Ro(e),t)}(e,Oi(a,e))}else{if(!Et[m])return r?e:{};a=function(e,t,n){var i,r,o,s=e.constructor;switch(t){case le:return Jr(e);case W:case q:return new s(+e);case ue:return function(e,t){var n=t?Jr(e.buffer):e.buffer;return new e.constructor(n,e.byteOffset,e.byteLength)}(e,n);case ce:case he:case de:case fe:case pe:case me:case ve:case ge:case ye:return Qr(e,n);case X:return new s;case Z:case ie:return new s(e);case te:return(o=new(r=e).constructor(r.source,je.exec(r))).lastIndex=r.lastIndex,o;case ne:return new s;case re:return i=e,di?tt(di.call(i)):{}}}(e,m,l)}}s||(s=new Ci);var g=s.get(e);if(g)return g;if(s.set(e,a),Pa(e))return e.forEach(function(i){a.add(Fi(i,t,n,i,e,s))}),a;if(Ta(e))return e.forEach(function(i,r){a.set(r,Fi(i,t,n,r,e,s))}),a;var y=h?o:(c?u?Po:Oo:u?ol:rl)(e);return Kt(y||e,function(i,r){y&&(i=e[r=i]),Ti(a,r,Fi(i,t,n,r,e,s))}),a}function Li(e,t,n){var i=n.length;if(null==e)return!i;for(e=tt(e);i--;){var r=n[i],s=t[r],a=e[r];if(a===o&&!(r in e)||!s(a))return!1}return!0}function Vi(e,t,n){if("function"!=typeof e)throw new rt(l);return rs(function(){e.apply(o,n)},t)}function Bi(e,t,n,i){var r=-1,o=Zt,a=!0,l=e.length,u=[],c=t.length;if(!l)return u;n&&(t=Qt(t,gn(n))),i?(o=Jt,a=!1):t.length>=s&&(o=bn,a=!1,t=new xi(t));e:for(;++r-1},_i.prototype.set=function(e,t){var n=this.__data__,i=Mi(n,e);return i<0?(++this.size,n.push([e,t])):n[i][1]=t,this},wi.prototype.clear=function(){this.size=0,this.__data__={hash:new bi,map:new(Qn||_i),string:new bi}},wi.prototype.delete=function(e){var t=Vo(this,e).delete(e);return this.size-=t?1:0,t},wi.prototype.get=function(e){return Vo(this,e).get(e)},wi.prototype.has=function(e){return Vo(this,e).has(e)},wi.prototype.set=function(e,t){var n=Vo(this,e),i=n.size;return n.set(e,t),this.size+=n.size==i?0:1,this},xi.prototype.add=xi.prototype.push=function(e){return this.__data__.set(e,u),this},xi.prototype.has=function(e){return this.__data__.has(e)},Ci.prototype.clear=function(){this.__data__=new _i,this.size=0},Ci.prototype.delete=function(e){var t=this.__data__,n=t.delete(e);return this.size=t.size,n},Ci.prototype.get=function(e){return this.__data__.get(e)},Ci.prototype.has=function(e){return this.__data__.has(e)},Ci.prototype.set=function(e,t){var n=this.__data__;if(n instanceof _i){var i=n.__data__;if(!Qn||i.length0&&n(a)?t>1?qi(a,t-1,n,i,r):en(r,a):i||(r[r.length]=a)}return r}var Yi=lo(),Ki=lo(!0);function Ui(e,t){return e&&Yi(e,t,rl)}function Gi(e,t){return e&&Ki(e,t,rl)}function Xi(e,t){return Xt(t,function(t){return ka(e[t])})}function Zi(e,t){for(var n=0,i=(t=Kr(t,e)).length;null!=e&&nt}function tr(e,t){return null!=e&&ct.call(e,t)}function nr(e,t){return null!=e&&t in tt(e)}function ir(e,t,n){for(var r=n?Jt:Zt,s=e[0].length,a=e.length,l=a,u=i(a),c=1/0,h=[];l--;){var d=e[l];l&&t&&(d=Qt(d,gn(t))),c=Kn(d.length,c),u[l]=!n&&(t||s>=120&&d.length>=120)?new xi(l&&d):o}d=e[0];var f=-1,p=u[0];e:for(;++f=a)return l;var u=n[i];return l*("desc"==u?-1:1)}}return e.index-t.index}(e,t,n)})}function br(e,t,n){for(var i=-1,r=t.length,o={};++i-1;)a!==e&&At.call(a,l,1),At.call(e,l,1);return e}function wr(e,t){for(var n=e?t.length:0,i=n-1;n--;){var r=t[n];if(n==i||r!==o){var o=r;Ko(r)?At.call(e,r,1):Br(e,r)}}return e}function xr(e,t){return e+zn(Xn()*(t-e+1))}function Cr(e,t){var n="";if(!e||t<1||t>I)return n;do{t%2&&(n+=e),(t=zn(t/2))&&(e+=e)}while(t);return n}function kr(e,t){return os(ts(e,t,Ml),e+"")}function Sr(e){return Si(fl(e))}function Dr(e,t){var n=fl(e);return ls(n,Ai(t,0,n.length))}function Er(e,t,n,i){if(!Ea(e))return e;for(var r=-1,s=(t=Kr(t,e)).length,a=s-1,l=e;null!=l&&++ro?0:o+t),(n=n>o?o:n)<0&&(n+=o),o=t>n?0:n-t>>>0,t>>>=0;for(var s=i(o);++r>>1,s=e[o];null!==s&&!Aa(s)&&(n?s<=t:s=s){var c=t?null:ko(e);if(c)return Mn(c);a=!1,r=bn,u=new xi}else u=t?[]:l;e:for(;++i=i?e:Nr(e,t,n)}var Xr=Fn||function(e){return Pt.clearTimeout(e)};function Zr(e,t){if(t)return e.slice();var n=e.length,i=$t?$t(n):new e.constructor(n);return e.copy(i),i}function Jr(e){var t=new e.constructor(e.byteLength);return new xt(t).set(new xt(e)),t}function Qr(e,t){var n=t?Jr(e.buffer):e.buffer;return new e.constructor(n,e.byteOffset,e.length)}function eo(e,t){if(e!==t){var n=e!==o,i=null===e,r=e==e,s=Aa(e),a=t!==o,l=null===t,u=t==t,c=Aa(t);if(!l&&!c&&!s&&e>t||s&&a&&u&&!l&&!c||i&&a&&u||!n&&u||!r)return 1;if(!i&&!s&&!c&&e1?n[r-1]:o,a=r>2?n[2]:o;for(s=e.length>3&&"function"==typeof s?(r--,s):o,a&&Uo(n[0],n[1],a)&&(s=r<3?o:s,r=1),t=tt(t);++i-1?r[s?t[a]:a]:o}}function po(e){return No(function(t){var n=t.length,i=n,r=gi.prototype.thru;for(e&&t.reverse();i--;){var s=t[i];if("function"!=typeof s)throw new rt(l);if(r&&!a&&"wrapper"==Ao(s))var a=new gi([],!0)}for(i=a?i:n;++i1&&_.reverse(),d&&cl))return!1;var c=s.get(e);if(c&&s.get(t))return c==t;var h=-1,d=!0,f=n&v?new xi:o;for(s.set(e,t),s.set(t,e);++h-1&&e%1==0&&e1?"& ":"")+t[i],t=t.join(n>2?", ":" "),e.replace(Le,"{\n/* [wrapped with "+t+"] */\n")}(i,function(e,t){return Kt(z,function(n){var i="_."+n[0];t&n[1]&&!Zt(e,i)&&e.push(i)}),e.sort()}(function(e){var t=e.match(Ve);return t?t[1].split(Be):[]}(i),n)))}function as(e){var t=0,n=0;return function(){var i=Un(),r=M-(i-n);if(n=i,r>0){if(++t>=T)return arguments[0]}else t=0;return e.apply(o,arguments)}}function ls(e,t){var n=-1,i=e.length,r=i-1;for(t=t===o?i:t;++n1?e[t-1]:o;return n="function"==typeof n?(e.pop(),n):o,Os(e,n)});function Bs(e){var t=pi(e);return t.__chain__=!0,t}function zs(e,t){return t(e)}var Rs=No(function(e){var t=e.length,n=t?e[0]:0,i=this.__wrapped__,r=function(t){return Ii(t,e)};return!(t>1||this.__actions__.length)&&i instanceof yi&&Ko(n)?((i=i.slice(n,+n+(t?1:0))).__actions__.push({func:zs,args:[r],thisArg:o}),new gi(i,this.__chain__).thru(function(e){return t&&!e.length&&e.push(o),e})):this.thru(r)});var Hs=oo(function(e,t,n){ct.call(e,n)?++e[n]:Pi(e,n,1)});var js=fo(vs),Ws=fo(gs);function qs(e,t){return(ga(e)?Kt:zi)(e,Lo(t,3))}function Ys(e,t){return(ga(e)?Ut:Ri)(e,Lo(t,3))}var Ks=oo(function(e,t,n){ct.call(e,n)?e[n].push(t):Pi(e,n,[t])});var Us=kr(function(e,t,n){var r=-1,o="function"==typeof t,s=ba(e)?i(e.length):[];return zi(e,function(e){s[++r]=o?qt(t,e,n):rr(e,t,n)}),s}),Gs=oo(function(e,t,n){Pi(e,n,t)});function Xs(e,t){return(ga(e)?Qt:fr)(e,Lo(t,3))}var Zs=oo(function(e,t,n){e[n?0:1].push(t)},function(){return[[],[]]});var Js=kr(function(e,t){if(null==e)return[];var n=t.length;return n>1&&Uo(e,t[0],t[1])?t=[]:n>2&&Uo(t[0],t[1],t[2])&&(t=[t[0]]),yr(e,qi(t,1),[])}),Qs=Ln||function(){return Pt.Date.now()};function ea(e,t,n){return t=n?o:t,t=e&&null==t?e.length:t,Do(e,k,o,o,o,o,t)}function ta(e,t){var n;if("function"!=typeof t)throw new rt(l);return e=Ra(e),function(){return--e>0&&(n=t.apply(this,arguments)),e<=1&&(t=o),n}}var na=kr(function(e,t,n){var i=g;if(n.length){var r=$n(n,Fo(na));i|=x}return Do(e,i,t,n,r)}),ia=kr(function(e,t,n){var i=g|y;if(n.length){var r=$n(n,Fo(ia));i|=x}return Do(t,i,e,n,r)});function ra(e,t,n){var i,r,s,a,u,c,h=0,d=!1,f=!1,p=!0;if("function"!=typeof e)throw new rt(l);function m(t){var n=i,s=r;return i=r=o,h=t,a=e.apply(s,n)}function v(e){var n=e-c;return c===o||n>=t||n<0||f&&e-h>=s}function g(){var e=Qs();if(v(e))return y(e);u=rs(g,function(e){var n=t-(e-c);return f?Kn(n,s-(e-h)):n}(e))}function y(e){return u=o,p&&i?m(e):(i=r=o,a)}function b(){var e=Qs(),n=v(e);if(i=arguments,r=this,c=e,n){if(u===o)return function(e){return h=e,u=rs(g,t),d?m(e):a}(c);if(f)return u=rs(g,t),m(c)}return u===o&&(u=rs(g,t)),a}return t=ja(t)||0,Ea(n)&&(d=!!n.leading,s=(f="maxWait"in n)?Yn(ja(n.maxWait)||0,t):s,p="trailing"in n?!!n.trailing:p),b.cancel=function(){u!==o&&Xr(u),h=0,i=c=r=u=o},b.flush=function(){return u===o?a:y(Qs())},b}var oa=kr(function(e,t){return Vi(e,1,t)}),sa=kr(function(e,t,n){return Vi(e,ja(t)||0,n)});function aa(e,t){if("function"!=typeof e||null!=t&&"function"!=typeof t)throw new rt(l);var n=function(){var i=arguments,r=t?t.apply(this,i):i[0],o=n.cache;if(o.has(r))return o.get(r);var s=e.apply(this,i);return n.cache=o.set(r,s)||o,s};return n.cache=new(aa.Cache||wi),n}function la(e){if("function"!=typeof e)throw new rt(l);return function(){var t=arguments;switch(t.length){case 0:return!e.call(this);case 1:return!e.call(this,t[0]);case 2:return!e.call(this,t[0],t[1]);case 3:return!e.call(this,t[0],t[1],t[2])}return!e.apply(this,t)}}aa.Cache=wi;var ua=Ur(function(e,t){var n=(t=1==t.length&&ga(t[0])?Qt(t[0],gn(Lo())):Qt(qi(t,1),gn(Lo()))).length;return kr(function(i){for(var r=-1,o=Kn(i.length,n);++r=t}),va=or(function(){return arguments}())?or:function(e){return $a(e)&&ct.call(e,"callee")&&!It.call(e,"callee")},ga=i.isArray,ya=Bt?gn(Bt):function(e){return $a(e)&&Qi(e)==le};function ba(e){return null!=e&&Da(e.length)&&!ka(e)}function _a(e){return $a(e)&&ba(e)}var wa=Hn||jl,xa=zt?gn(zt):function(e){return $a(e)&&Qi(e)==q};function Ca(e){if(!$a(e))return!1;var t=Qi(e);return t==K||t==Y||"string"==typeof e.message&&"string"==typeof e.name&&!Na(e)}function ka(e){if(!Ea(e))return!1;var t=Qi(e);return t==U||t==G||t==j||t==ee}function Sa(e){return"number"==typeof e&&e==Ra(e)}function Da(e){return"number"==typeof e&&e>-1&&e%1==0&&e<=I}function Ea(e){var t=typeof e;return null!=e&&("object"==t||"function"==t)}function $a(e){return null!=e&&"object"==typeof e}var Ta=Rt?gn(Rt):function(e){return $a(e)&&jo(e)==X};function Ma(e){return"number"==typeof e||$a(e)&&Qi(e)==Z}function Na(e){if(!$a(e)||Qi(e)!=Q)return!1;var t=Nt(e);if(null===t)return!0;var n=ct.call(t,"constructor")&&t.constructor;return"function"==typeof n&&n instanceof n&&ut.call(n)==pt}var Oa=Ht?gn(Ht):function(e){return $a(e)&&Qi(e)==te};var Pa=jt?gn(jt):function(e){return $a(e)&&jo(e)==ne};function Ia(e){return"string"==typeof e||!ga(e)&&$a(e)&&Qi(e)==ie}function Aa(e){return"symbol"==typeof e||$a(e)&&Qi(e)==re}var Fa=Wt?gn(Wt):function(e){return $a(e)&&Da(e.length)&&!!Dt[Qi(e)]};var La=wo(dr),Va=wo(function(e,t){return e<=t});function Ba(e){if(!e)return[];if(ba(e))return Ia(e)?Pn(e):io(e);if(Vt&&e[Vt])return function(e){for(var t,n=[];!(t=e.next()).done;)n.push(t.value);return n}(e[Vt]());var t=jo(e);return(t==X?Dn:t==ne?Mn:fl)(e)}function za(e){return e?(e=ja(e))===P||e===-P?(e<0?-1:1)*A:e==e?e:0:0===e?e:0}function Ra(e){var t=za(e),n=t%1;return t==t?n?t-n:t:0}function Ha(e){return e?Ai(Ra(e),0,L):0}function ja(e){if("number"==typeof e)return e;if(Aa(e))return F;if(Ea(e)){var t="function"==typeof e.valueOf?e.valueOf():e;e=Ea(t)?t+"":t}if("string"!=typeof e)return 0===e?e:+e;e=e.replace(Ie,"");var n=qe.test(e);return n||Ke.test(e)?Mt(e.slice(2),n?2:8):We.test(e)?F:+e}function Wa(e){return ro(e,ol(e))}function qa(e){return null==e?"":Lr(e)}var Ya=so(function(e,t){if(Jo(t)||ba(t))ro(t,rl(t),e);else for(var n in t)ct.call(t,n)&&Ti(e,n,t[n])}),Ka=so(function(e,t){ro(t,ol(t),e)}),Ua=so(function(e,t,n,i){ro(t,ol(t),e,i)}),Ga=so(function(e,t,n,i){ro(t,rl(t),e,i)}),Xa=No(Ii);var Za=kr(function(e,t){e=tt(e);var n=-1,i=t.length,r=i>2?t[2]:o;for(r&&Uo(t[0],t[1],r)&&(i=1);++n1),t}),ro(e,Po(e),n),i&&(n=Fi(n,d|f|p,To));for(var r=t.length;r--;)Br(n,t[r]);return n});var ul=No(function(e,t){return null==e?{}:function(e,t){return br(e,t,function(t,n){return el(e,n)})}(e,t)});function cl(e,t){if(null==e)return{};var n=Qt(Po(e),function(e){return[e]});return t=Lo(t),br(e,n,function(e,n){return t(e,n[0])})}var hl=So(rl),dl=So(ol);function fl(e){return null==e?[]:yn(e,rl(e))}var pl=co(function(e,t,n){return t=t.toLowerCase(),e+(n?ml(t):t)});function ml(e){return Cl(qa(e).toLowerCase())}function vl(e){return(e=qa(e))&&e.replace(Ge,xn).replace(bt,"")}var gl=co(function(e,t,n){return e+(n?"-":"")+t.toLowerCase()}),yl=co(function(e,t,n){return e+(n?" ":"")+t.toLowerCase()}),bl=uo("toLowerCase");var _l=co(function(e,t,n){return e+(n?"_":"")+t.toLowerCase()});var wl=co(function(e,t,n){return e+(n?" ":"")+Cl(t)});var xl=co(function(e,t,n){return e+(n?" ":"")+t.toUpperCase()}),Cl=uo("toUpperCase");function kl(e,t,n){return e=qa(e),(t=n?o:t)===o?function(e){return Ct.test(e)}(e)?function(e){return e.match(wt)||[]}(e):function(e){return e.match(ze)||[]}(e):e.match(t)||[]}var Sl=kr(function(e,t){try{return qt(e,o,t)}catch(e){return Ca(e)?e:new Je(e)}}),Dl=No(function(e,t){return Kt(t,function(t){t=cs(t),Pi(e,t,na(e[t],e))}),e});function El(e){return function(){return e}}var $l=po(),Tl=po(!0);function Ml(e){return e}function Nl(e){return ur("function"==typeof e?e:Fi(e,d))}var Ol=kr(function(e,t){return function(n){return rr(n,e,t)}}),Pl=kr(function(e,t){return function(n){return rr(e,n,t)}});function Il(e,t,n){var i=rl(t),r=Xi(t,i);null!=n||Ea(t)&&(r.length||!i.length)||(n=t,t=e,e=this,r=Xi(t,rl(t)));var o=!(Ea(n)&&"chain"in n&&!n.chain),s=ka(e);return Kt(r,function(n){var i=t[n];e[n]=i,s&&(e.prototype[n]=function(){var t=this.__chain__;if(o||t){var n=e(this.__wrapped__);return(n.__actions__=io(this.__actions__)).push({func:i,args:arguments,thisArg:e}),n.__chain__=t,n}return i.apply(e,en([this.value()],arguments))})}),e}function Al(){}var Fl=yo(Qt),Ll=yo(Gt),Vl=yo(rn);function Bl(e){return Go(e)?dn(cs(e)):function(e){return function(t){return Zi(t,e)}}(e)}var zl=_o(),Rl=_o(!0);function Hl(){return[]}function jl(){return!1}var Wl=go(function(e,t){return e+t},0),ql=Co("ceil"),Yl=go(function(e,t){return e/t},1),Kl=Co("floor");var Ul,Gl=go(function(e,t){return e*t},1),Xl=Co("round"),Zl=go(function(e,t){return e-t},0);return pi.after=function(e,t){if("function"!=typeof t)throw new rt(l);return e=Ra(e),function(){if(--e<1)return t.apply(this,arguments)}},pi.ary=ea,pi.assign=Ya,pi.assignIn=Ka,pi.assignInWith=Ua,pi.assignWith=Ga,pi.at=Xa,pi.before=ta,pi.bind=na,pi.bindAll=Dl,pi.bindKey=ia,pi.castArray=function(){if(!arguments.length)return[];var e=arguments[0];return ga(e)?e:[e]},pi.chain=Bs,pi.chunk=function(e,t,n){t=(n?Uo(e,t,n):t===o)?1:Yn(Ra(t),0);var r=null==e?0:e.length;if(!r||t<1)return[];for(var s=0,a=0,l=i(Bn(r/t));sr?0:r+n),(i=i===o||i>r?r:Ra(i))<0&&(i+=r),i=n>i?0:Ha(i);n>>0)?(e=qa(e))&&("string"==typeof t||null!=t&&!Oa(t))&&!(t=Lr(t))&&Sn(e)?Gr(Pn(e),0,n):e.split(t,n):[]},pi.spread=function(e,t){if("function"!=typeof e)throw new rt(l);return t=null==t?0:Yn(Ra(t),0),kr(function(n){var i=n[t],r=Gr(n,0,t);return i&&en(r,i),qt(e,this,r)})},pi.tail=function(e){var t=null==e?0:e.length;return t?Nr(e,1,t):[]},pi.take=function(e,t,n){return e&&e.length?Nr(e,0,(t=n||t===o?1:Ra(t))<0?0:t):[]},pi.takeRight=function(e,t,n){var i=null==e?0:e.length;return i?Nr(e,(t=i-(t=n||t===o?1:Ra(t)))<0?0:t,i):[]},pi.takeRightWhile=function(e,t){return e&&e.length?Rr(e,Lo(t,3),!1,!0):[]},pi.takeWhile=function(e,t){return e&&e.length?Rr(e,Lo(t,3)):[]},pi.tap=function(e,t){return t(e),e},pi.throttle=function(e,t,n){var i=!0,r=!0;if("function"!=typeof e)throw new rt(l);return Ea(n)&&(i="leading"in n?!!n.leading:i,r="trailing"in n?!!n.trailing:r),ra(e,t,{leading:i,maxWait:t,trailing:r})},pi.thru=zs,pi.toArray=Ba,pi.toPairs=hl,pi.toPairsIn=dl,pi.toPath=function(e){return ga(e)?Qt(e,cs):Aa(e)?[e]:io(us(qa(e)))},pi.toPlainObject=Wa,pi.transform=function(e,t,n){var i=ga(e),r=i||wa(e)||Fa(e);if(t=Lo(t,4),null==n){var o=e&&e.constructor;n=r?i?new o:[]:Ea(e)&&ka(o)?mi(Nt(e)):{}}return(r?Kt:Ui)(e,function(e,i,r){return t(n,e,i,r)}),n},pi.unary=function(e){return ea(e,1)},pi.union=$s,pi.unionBy=Ts,pi.unionWith=Ms,pi.uniq=function(e){return e&&e.length?Vr(e):[]},pi.uniqBy=function(e,t){return e&&e.length?Vr(e,Lo(t,2)):[]},pi.uniqWith=function(e,t){return t="function"==typeof t?t:o,e&&e.length?Vr(e,o,t):[]},pi.unset=function(e,t){return null==e||Br(e,t)},pi.unzip=Ns,pi.unzipWith=Os,pi.update=function(e,t,n){return null==e?e:zr(e,t,Yr(n))},pi.updateWith=function(e,t,n,i){return i="function"==typeof i?i:o,null==e?e:zr(e,t,Yr(n),i)},pi.values=fl,pi.valuesIn=function(e){return null==e?[]:yn(e,ol(e))},pi.without=Ps,pi.words=kl,pi.wrap=function(e,t){return ca(Yr(t),e)},pi.xor=Is,pi.xorBy=As,pi.xorWith=Fs,pi.zip=Ls,pi.zipObject=function(e,t){return Wr(e||[],t||[],Ti)},pi.zipObjectDeep=function(e,t){return Wr(e||[],t||[],Er)},pi.zipWith=Vs,pi.entries=hl,pi.entriesIn=dl,pi.extend=Ka,pi.extendWith=Ua,Il(pi,pi),pi.add=Wl,pi.attempt=Sl,pi.camelCase=pl,pi.capitalize=ml,pi.ceil=ql,pi.clamp=function(e,t,n){return n===o&&(n=t,t=o),n!==o&&(n=(n=ja(n))==n?n:0),t!==o&&(t=(t=ja(t))==t?t:0),Ai(ja(e),t,n)},pi.clone=function(e){return Fi(e,p)},pi.cloneDeep=function(e){return Fi(e,d|p)},pi.cloneDeepWith=function(e,t){return Fi(e,d|p,t="function"==typeof t?t:o)},pi.cloneWith=function(e,t){return Fi(e,p,t="function"==typeof t?t:o)},pi.conformsTo=function(e,t){return null==t||Li(e,t,rl(t))},pi.deburr=vl,pi.defaultTo=function(e,t){return null==e||e!=e?t:e},pi.divide=Yl,pi.endsWith=function(e,t,n){e=qa(e),t=Lr(t);var i=e.length,r=n=n===o?i:Ai(Ra(n),0,i);return(n-=t.length)>=0&&e.slice(n,r)==t},pi.eq=fa,pi.escape=function(e){return(e=qa(e))&&Se.test(e)?e.replace(Ce,Cn):e},pi.escapeRegExp=function(e){return(e=qa(e))&&Pe.test(e)?e.replace(Oe,"\\$&"):e},pi.every=function(e,t,n){var i=ga(e)?Gt:Hi;return n&&Uo(e,t,n)&&(t=o),i(e,Lo(t,3))},pi.find=js,pi.findIndex=vs,pi.findKey=function(e,t){return sn(e,Lo(t,3),Ui)},pi.findLast=Ws,pi.findLastIndex=gs,pi.findLastKey=function(e,t){return sn(e,Lo(t,3),Gi)},pi.floor=Kl,pi.forEach=qs,pi.forEachRight=Ys,pi.forIn=function(e,t){return null==e?e:Yi(e,Lo(t,3),ol)},pi.forInRight=function(e,t){return null==e?e:Ki(e,Lo(t,3),ol)},pi.forOwn=function(e,t){return e&&Ui(e,Lo(t,3))},pi.forOwnRight=function(e,t){return e&&Gi(e,Lo(t,3))},pi.get=Qa,pi.gt=pa,pi.gte=ma,pi.has=function(e,t){return null!=e&&Wo(e,t,tr)},pi.hasIn=el,pi.head=bs,pi.identity=Ml,pi.includes=function(e,t,n,i){e=ba(e)?e:fl(e),n=n&&!i?Ra(n):0;var r=e.length;return n<0&&(n=Yn(r+n,0)),Ia(e)?n<=r&&e.indexOf(t,n)>-1:!!r&&ln(e,t,n)>-1},pi.indexOf=function(e,t,n){var i=null==e?0:e.length;if(!i)return-1;var r=null==n?0:Ra(n);return r<0&&(r=Yn(i+r,0)),ln(e,t,r)},pi.inRange=function(e,t,n){return t=za(t),n===o?(n=t,t=0):n=za(n),function(e,t,n){return e>=Kn(t,n)&&e=-I&&e<=I},pi.isSet=Pa,pi.isString=Ia,pi.isSymbol=Aa,pi.isTypedArray=Fa,pi.isUndefined=function(e){return e===o},pi.isWeakMap=function(e){return $a(e)&&jo(e)==se},pi.isWeakSet=function(e){return $a(e)&&Qi(e)==ae},pi.join=function(e,t){return null==e?"":Wn.call(e,t)},pi.kebabCase=gl,pi.last=Cs,pi.lastIndexOf=function(e,t,n){var i=null==e?0:e.length;if(!i)return-1;var r=i;return n!==o&&(r=(r=Ra(n))<0?Yn(i+r,0):Kn(r,i-1)),t==t?function(e,t,n){for(var i=n+1;i--;)if(e[i]===t)return i;return i}(e,t,r):an(e,cn,r,!0)},pi.lowerCase=yl,pi.lowerFirst=bl,pi.lt=La,pi.lte=Va,pi.max=function(e){return e&&e.length?ji(e,Ml,er):o},pi.maxBy=function(e,t){return e&&e.length?ji(e,Lo(t,2),er):o},pi.mean=function(e){return hn(e,Ml)},pi.meanBy=function(e,t){return hn(e,Lo(t,2))},pi.min=function(e){return e&&e.length?ji(e,Ml,dr):o},pi.minBy=function(e,t){return e&&e.length?ji(e,Lo(t,2),dr):o},pi.stubArray=Hl,pi.stubFalse=jl,pi.stubObject=function(){return{}},pi.stubString=function(){return""},pi.stubTrue=function(){return!0},pi.multiply=Gl,pi.nth=function(e,t){return e&&e.length?gr(e,Ra(t)):o},pi.noConflict=function(){return Pt._===this&&(Pt._=mt),this},pi.noop=Al,pi.now=Qs,pi.pad=function(e,t,n){e=qa(e);var i=(t=Ra(t))?On(e):0;if(!t||i>=t)return e;var r=(t-i)/2;return bo(zn(r),n)+e+bo(Bn(r),n)},pi.padEnd=function(e,t,n){e=qa(e);var i=(t=Ra(t))?On(e):0;return t&&it){var i=e;e=t,t=i}if(n||e%1||t%1){var r=Xn();return Kn(e+r*(t-e+Tt("1e-"+((r+"").length-1))),t)}return xr(e,t)},pi.reduce=function(e,t,n){var i=ga(e)?tn:pn,r=arguments.length<3;return i(e,Lo(t,4),n,r,zi)},pi.reduceRight=function(e,t,n){var i=ga(e)?nn:pn,r=arguments.length<3;return i(e,Lo(t,4),n,r,Ri)},pi.repeat=function(e,t,n){return t=(n?Uo(e,t,n):t===o)?1:Ra(t),Cr(qa(e),t)},pi.replace=function(){var e=arguments,t=qa(e[0]);return e.length<3?t:t.replace(e[1],e[2])},pi.result=function(e,t,n){var i=-1,r=(t=Kr(t,e)).length;for(r||(r=1,e=o);++iI)return[];var n=L,i=Kn(e,L);t=Lo(t),e-=L;for(var r=vn(i,t);++n=s)return e;var l=n-On(i);if(l<1)return i;var u=a?Gr(a,0,l).join(""):e.slice(0,l);if(r===o)return u+i;if(a&&(l+=u.length-l),Oa(r)){if(e.slice(l).search(r)){var c,h=u;for(r.global||(r=nt(r.source,qa(je.exec(r))+"g")),r.lastIndex=0;c=r.exec(h);)var d=c.index;u=u.slice(0,d===o?l:d)}}else if(e.indexOf(Lr(r),l)!=l){var f=u.lastIndexOf(r);f>-1&&(u=u.slice(0,f))}return u+i},pi.unescape=function(e){return(e=qa(e))&&ke.test(e)?e.replace(xe,In):e},pi.uniqueId=function(e){var t=++ht;return qa(e)+t},pi.upperCase=xl,pi.upperFirst=Cl,pi.each=qs,pi.eachRight=Ys,pi.first=bs,Il(pi,(Ul={},Ui(pi,function(e,t){ct.call(pi.prototype,t)||(Ul[t]=e)}),Ul),{chain:!1}),pi.VERSION="4.17.10",Kt(["bind","bindKey","curry","curryRight","partial","partialRight"],function(e){pi[e].placeholder=pi}),Kt(["drop","take"],function(e,t){yi.prototype[e]=function(n){n=n===o?1:Yn(Ra(n),0);var i=this.__filtered__&&!t?new yi(this):this.clone();return i.__filtered__?i.__takeCount__=Kn(n,i.__takeCount__):i.__views__.push({size:Kn(n,L),type:e+(i.__dir__<0?"Right":"")}),i},yi.prototype[e+"Right"]=function(t){return this.reverse()[e](t).reverse()}}),Kt(["filter","map","takeWhile"],function(e,t){var n=t+1,i=n==N||3==n;yi.prototype[e]=function(e){var t=this.clone();return t.__iteratees__.push({iteratee:Lo(e,3),type:n}),t.__filtered__=t.__filtered__||i,t}}),Kt(["head","last"],function(e,t){var n="take"+(t?"Right":"");yi.prototype[e]=function(){return this[n](1).value()[0]}}),Kt(["initial","tail"],function(e,t){var n="drop"+(t?"":"Right");yi.prototype[e]=function(){return this.__filtered__?new yi(this):this[n](1)}}),yi.prototype.compact=function(){return this.filter(Ml)},yi.prototype.find=function(e){return this.filter(e).head()},yi.prototype.findLast=function(e){return this.reverse().find(e)},yi.prototype.invokeMap=kr(function(e,t){return"function"==typeof e?new yi(this):this.map(function(n){return rr(n,e,t)})}),yi.prototype.reject=function(e){return this.filter(la(Lo(e)))},yi.prototype.slice=function(e,t){e=Ra(e);var n=this;return n.__filtered__&&(e>0||t<0)?new yi(n):(e<0?n=n.takeRight(-e):e&&(n=n.drop(e)),t!==o&&(n=(t=Ra(t))<0?n.dropRight(-t):n.take(t-e)),n)},yi.prototype.takeRightWhile=function(e){return this.reverse().takeWhile(e).reverse()},yi.prototype.toArray=function(){return this.take(L)},Ui(yi.prototype,function(e,t){var n=/^(?:filter|find|map|reject)|While$/.test(t),i=/^(?:head|last)$/.test(t),r=pi[i?"take"+("last"==t?"Right":""):t],s=i||/^find/.test(t);r&&(pi.prototype[t]=function(){var t=this.__wrapped__,a=i?[1]:arguments,l=t instanceof yi,u=a[0],c=l||ga(t),h=function(e){var t=r.apply(pi,en([e],a));return i&&d?t[0]:t};c&&n&&"function"==typeof u&&1!=u.length&&(l=c=!1);var d=this.__chain__,f=!!this.__actions__.length,p=s&&!d,m=l&&!f;if(!s&&c){t=m?t:new yi(this);var v=e.apply(t,a);return v.__actions__.push({func:zs,args:[h],thisArg:o}),new gi(v,d)}return p&&m?e.apply(this,a):(v=this.thru(h),p?i?v.value()[0]:v.value():v)})}),Kt(["pop","push","shift","sort","splice","unshift"],function(e){var t=ot[e],n=/^(?:push|sort|unshift)$/.test(e)?"tap":"thru",i=/^(?:pop|shift)$/.test(e);pi.prototype[e]=function(){var e=arguments;if(i&&!this.__chain__){var r=this.value();return t.apply(ga(r)?r:[],e)}return this[n](function(n){return t.apply(ga(n)?n:[],e)})}}),Ui(yi.prototype,function(e,t){var n=pi[t];if(n){var i=n.name+"";(oi[i]||(oi[i]=[])).push({name:t,func:n})}}),oi[mo(o,y).name]=[{name:"wrapper",func:o}],yi.prototype.clone=function(){var e=new yi(this.__wrapped__);return e.__actions__=io(this.__actions__),e.__dir__=this.__dir__,e.__filtered__=this.__filtered__,e.__iteratees__=io(this.__iteratees__),e.__takeCount__=this.__takeCount__,e.__views__=io(this.__views__),e},yi.prototype.reverse=function(){if(this.__filtered__){var e=new yi(this);e.__dir__=-1,e.__filtered__=!0}else(e=this.clone()).__dir__*=-1;return e},yi.prototype.value=function(){var e=this.__wrapped__.value(),t=this.__dir__,n=ga(e),i=t<0,r=n?e.length:0,o=function(e,t,n){for(var i=-1,r=n.length;++i=this.__values__.length;return{done:e,value:e?o:this.__values__[this.__index__++]}},pi.prototype.plant=function(e){for(var t,n=this;n instanceof vi;){var i=ds(n);i.__index__=0,i.__values__=o,t?r.__wrapped__=i:t=i;var r=i;n=n.__wrapped__}return r.__wrapped__=e,t},pi.prototype.reverse=function(){var e=this.__wrapped__;if(e instanceof yi){var t=e;return this.__actions__.length&&(t=new yi(this)),(t=t.reverse()).__actions__.push({func:zs,args:[Es],thisArg:o}),new gi(t,this.__chain__)}return this.thru(Es)},pi.prototype.toJSON=pi.prototype.valueOf=pi.prototype.value=function(){return Hr(this.__wrapped__,this.__actions__)},pi.prototype.first=pi.prototype.head,Vt&&(pi.prototype[Vt]=function(){return this}),pi}();Pt._=An,(r=function(){return An}.call(t,n,t,i))===o||(i.exports=r)}).call(this)}).call(this,n(37),n(89)(e))},function(e,t){var n=e.exports={version:"2.6.2"};"number"==typeof __e&&(__e=n)},function(e,t){e.exports=function(e){return"object"==typeof e?null!==e:"function"==typeof e}},function(e,t){e.exports=function(e){try{return!!e()}catch(e){return!0}}},function(e,t,n){var i=n(4),r=n(1);e.exports={throttle:i,debounce:r}},function(e,t,n){var i=n(16);e.exports=function(e){if(!i(e))throw TypeError(e+" is not an object!");return e}},function(e,t){e.exports=function(e,t){return{enumerable:!(1&e),configurable:!(2&e),writable:!(4&e),value:t}}},function(e,t,n){var i=n(40),r=n(31);e.exports=Object.keys||function(e){return i(e,r)}},function(e,t){e.exports=!0},function(e,t){var n=0,i=Math.random();e.exports=function(e){return"Symbol(".concat(void 0===e?"":e,")_",(++n+i).toString(36))}},function(e,t){t.f={}.propertyIsEnumerable},function(e,t,n){var i=n(5),r=n(15),o=n(60),s=n(9),a=n(7),l=function(e,t,n){var u,c,h,d=e&l.F,f=e&l.G,p=e&l.S,m=e&l.P,v=e&l.B,g=e&l.W,y=f?r:r[t]||(r[t]={}),b=y.prototype,_=f?i:p?i[t]:(i[t]||{}).prototype;for(u in f&&(n=t),n)(c=!d&&_&&void 0!==_[u])&&a(y,u)||(h=c?_[u]:n[u],y[u]=f&&"function"!=typeof _[u]?n[u]:v&&c?o(h,i):g&&_[u]==h?function(e){var t=function(t,n,i){if(this instanceof e){switch(arguments.length){case 0:return new e;case 1:return new e(t);case 2:return new e(t,n)}return new e(t,n,i)}return e.apply(this,arguments)};return t.prototype=e.prototype,t}(h):m&&"function"==typeof h?o(Function.call,h):h,m&&((y.virtual||(y.virtual={}))[u]=h,e&l.R&&b&&!b[u]&&s(b,u,h)))};l.F=1,l.G=2,l.S=4,l.P=8,l.B=16,l.W=32,l.U=64,l.R=128,e.exports=l},function(e,t,n){var i=n(16);e.exports=function(e,t){if(!i(e))return e;var n,r;if(t&&"function"==typeof(n=e.toString)&&!i(r=n.call(e)))return r;if("function"==typeof(n=e.valueOf)&&!i(r=n.call(e)))return r;if(!t&&"function"==typeof(n=e.toString)&&!i(r=n.call(e)))return r;throw TypeError("Can't convert object to primitive value")}},function(e,t){e.exports=function(e){if(null==e)throw TypeError("Can't call method on "+e);return e}},function(e,t){var n=Math.ceil,i=Math.floor;e.exports=function(e){return isNaN(e=+e)?0:(e>0?i:n)(e)}},function(e,t,n){var i=n(30)("keys"),r=n(23);e.exports=function(e){return i[e]||(i[e]=r(e))}},function(e,t,n){var i=n(15),r=n(5),o=r["__core-js_shared__"]||(r["__core-js_shared__"]={});(e.exports=function(e,t){return o[e]||(o[e]=void 0!==t?t:{})})("versions",[]).push({version:i.version,mode:n(22)?"pure":"global",copyright:"© 2019 Denis Pushkarev (zloirock.ru)"})},function(e,t){e.exports="constructor,hasOwnProperty,isPrototypeOf,propertyIsEnumerable,toLocaleString,toString,valueOf".split(",")},function(e,t){t.f=Object.getOwnPropertySymbols},function(e,t){e.exports={}},function(e,t,n){var i=n(10).f,r=n(7),o=n(13)("toStringTag");e.exports=function(e,t,n){e&&!r(e=n?e:e.prototype,o)&&i(e,o,{configurable:!0,value:t})}},function(e,t,n){t.f=n(13)},function(e,t,n){var i=n(5),r=n(15),o=n(22),s=n(35),a=n(10).f;e.exports=function(e){var t=r.Symbol||(r.Symbol=o?{}:i.Symbol||{});"_"==e.charAt(0)||e in t||a(t,e,{value:s.f(e)})}},function(e,t){var n;n=function(){return this}();try{n=n||new Function("return this")()}catch(e){"object"==typeof window&&(n=window)}e.exports=n},function(e,t,n){e.exports=!n(11)&&!n(17)(function(){return 7!=Object.defineProperty(n(39)("div"),"a",{get:function(){return 7}}).a})},function(e,t,n){var i=n(16),r=n(5).document,o=i(r)&&i(r.createElement);e.exports=function(e){return o?r.createElement(e):{}}},function(e,t,n){var i=n(7),r=n(12),o=n(63)(!1),s=n(29)("IE_PROTO");e.exports=function(e,t){var n,a=r(e),l=0,u=[];for(n in a)n!=s&&i(a,n)&&u.push(n);for(;t.length>l;)i(a,n=t[l++])&&(~o(u,n)||u.push(n));return u}},function(e,t,n){var i=n(42);e.exports=Object("z").propertyIsEnumerable(0)?Object:function(e){return"String"==i(e)?e.split(""):Object(e)}},function(e,t){var n={}.toString;e.exports=function(e){return n.call(e).slice(8,-1)}},function(e,t,n){var i=n(27);e.exports=function(e){return Object(i(e))}},function(e,t,n){"use strict";var i=n(22),r=n(25),o=n(45),s=n(9),a=n(33),l=n(70),u=n(34),c=n(73),h=n(13)("iterator"),d=!([].keys&&"next"in[].keys()),f=function(){return this};e.exports=function(e,t,n,p,m,v,g){l(n,t,p);var y,b,_,w=function(e){if(!d&&e in S)return S[e];switch(e){case"keys":case"values":return function(){return new n(this,e)}}return function(){return new n(this,e)}},x=t+" Iterator",C="values"==m,k=!1,S=e.prototype,D=S[h]||S["@@iterator"]||m&&S[m],E=D||w(m),$=m?C?w("entries"):E:void 0,T="Array"==t&&S.entries||D;if(T&&(_=c(T.call(new e)))!==Object.prototype&&_.next&&(u(_,x,!0),i||"function"==typeof _[h]||s(_,h,f)),C&&D&&"values"!==D.name&&(k=!0,E=function(){return D.call(this)}),i&&!g||!d&&!k&&S[h]||s(S,h,E),a[t]=E,a[x]=f,m)if(y={values:C?E:w("values"),keys:v?E:w("keys"),entries:$},g)for(b in y)b in S||o(S,b,y[b]);else r(r.P+r.F*(d||k),t,y);return y}},function(e,t,n){e.exports=n(9)},function(e,t,n){var i=n(19),r=n(71),o=n(31),s=n(29)("IE_PROTO"),a=function(){},l=function(){var e,t=n(39)("iframe"),i=o.length;for(t.style.display="none",n(72).appendChild(t),t.src="javascript:",(e=t.contentWindow.document).open(),e.write(" + + + + + + + +
+ + + + + + +
+
+
+ 设备管理系统 +
+
+
+ +
+
+
+ +
+
+ + +
+
+
+ +
+ + + + + \ No newline at end of file diff --git a/device/target/classes/static/maintenancerecord.html b/device/target/classes/static/maintenancerecord.html new file mode 100644 index 0000000..8f77ca7 --- /dev/null +++ b/device/target/classes/static/maintenancerecord.html @@ -0,0 +1,115 @@ + + + + + + + + + + + + + + + + +
+ + + + + + +
+ + + + \ No newline at end of file diff --git a/device/target/classes/static/operationlog.html b/device/target/classes/static/operationlog.html new file mode 100644 index 0000000..5e47b9a --- /dev/null +++ b/device/target/classes/static/operationlog.html @@ -0,0 +1,100 @@ + + + + + + + + + + + + + + + + +
+ + + + + + +
+ + + + \ No newline at end of file diff --git a/device/target/classes/static/scraprecord.html b/device/target/classes/static/scraprecord.html new file mode 100644 index 0000000..eae4165 --- /dev/null +++ b/device/target/classes/static/scraprecord.html @@ -0,0 +1,100 @@ + + + + + + + + + + + + + + + + +
+ + + + + + +
+ + + + \ No newline at end of file diff --git a/device/target/classes/static/supplier.html b/device/target/classes/static/supplier.html new file mode 100644 index 0000000..fbffddf --- /dev/null +++ b/device/target/classes/static/supplier.html @@ -0,0 +1,105 @@ + + + + + + + + + + + + + + + + +
+ + + + + + +
+ + + + \ No newline at end of file diff --git a/device/target/classes/static/usagerecord.html b/device/target/classes/static/usagerecord.html new file mode 100644 index 0000000..ab6f563 --- /dev/null +++ b/device/target/classes/static/usagerecord.html @@ -0,0 +1,105 @@ + + + + + + + + + + + + + + + + +
+ + + + + + +
+ + + + \ No newline at end of file diff --git a/device/target/maven-status/maven-compiler-plugin/compile/default-compile/createdFiles.lst b/device/target/maven-status/maven-compiler-plugin/compile/default-compile/createdFiles.lst new file mode 100644 index 0000000..e69de29 diff --git a/device/target/maven-status/maven-compiler-plugin/compile/default-compile/inputFiles.lst b/device/target/maven-status/maven-compiler-plugin/compile/default-compile/inputFiles.lst new file mode 100644 index 0000000..3b0d35e --- /dev/null +++ b/device/target/maven-status/maven-compiler-plugin/compile/default-compile/inputFiles.lst @@ -0,0 +1,56 @@ +C:\Users\13853\Desktop\device\src\main\java\com\controller\SupplierController.java +C:\Users\13853\Desktop\device\src\main\java\com\entity\Device.java +C:\Users\13853\Desktop\device\src\main\java\com\service\dto\devicePageDto.java +C:\Users\13853\Desktop\device\src\main\java\com\entity\Maintenancerecord.java +C:\Users\13853\Desktop\device\src\main\java\com\service\impl\UsagerecordServiceImpl.java +C:\Users\13853\Desktop\device\src\main\java\com\controller\LocationController.java +C:\Users\13853\Desktop\device\src\main\java\com\service\UserService.java +C:\Users\13853\Desktop\device\src\main\java\com\entity\Location.java +C:\Users\13853\Desktop\device\src\main\java\com\mapper\OperationlogMapper.java +C:\Users\13853\Desktop\device\src\main\java\com\mapper\DeviceMapper.java +C:\Users\13853\Desktop\device\src\main\java\com\entity\Role.java +C:\Users\13853\Desktop\device\src\main\java\com\service\impl\ScraprecordServiceImpl.java +C:\Users\13853\Desktop\device\src\main\java\com\entity\Scraprecord.java +C:\Users\13853\Desktop\device\src\main\java\com\mapper\SupplierMapper.java +C:\Users\13853\Desktop\device\src\main\java\com\controller\UserController.java +C:\Users\13853\Desktop\device\src\main\java\com\service\RoleService.java +C:\Users\13853\Desktop\device\src\main\java\com\entity\Operationlog.java +C:\Users\13853\Desktop\device\src\main\java\com\service\DevicecategoryService.java +C:\Users\13853\Desktop\device\src\main\java\com\controller\from\findDevicePageFrom.java +C:\Users\13853\Desktop\device\src\main\java\com\service\impl\LocationServiceImpl.java +C:\Users\13853\Desktop\device\src\main\java\com\service\impl\DeviceServiceImpl.java +C:\Users\13853\Desktop\device\src\main\java\com\service\UsagerecordService.java +C:\Users\13853\Desktop\device\src\main\java\com\CodeGenerator.java +C:\Users\13853\Desktop\device\src\main\java\com\service\SupplierService.java +C:\Users\13853\Desktop\device\src\main\java\com\mapper\LocationMapper.java +C:\Users\13853\Desktop\device\src\main\java\com\controller\RoleController.java +C:\Users\13853\Desktop\device\src\main\java\com\mapper\UsagerecordMapper.java +C:\Users\13853\Desktop\device\src\main\java\com\commons\MyBatisPlusConfig.java +C:\Users\13853\Desktop\device\src\main\java\com\controller\DeviceController.java +C:\Users\13853\Desktop\device\src\main\java\com\service\DeviceService.java +C:\Users\13853\Desktop\device\src\main\java\com\service\impl\SupplierServiceImpl.java +C:\Users\13853\Desktop\device\src\main\java\com\controller\ScraprecordController.java +C:\Users\13853\Desktop\device\src\main\java\com\service\impl\OperationlogServiceImpl.java +C:\Users\13853\Desktop\device\src\main\java\com\service\OperationlogService.java +C:\Users\13853\Desktop\device\src\main\java\com\commons\Result.java +C:\Users\13853\Desktop\device\src\main\java\com\service\impl\RoleServiceImpl.java +C:\Users\13853\Desktop\device\src\main\java\com\service\LocationService.java +C:\Users\13853\Desktop\device\src\main\java\com\entity\Devicecategory.java +C:\Users\13853\Desktop\device\src\main\java\com\controller\DevicecategoryController.java +C:\Users\13853\Desktop\device\src\main\java\com\entity\Usagerecord.java +C:\Users\13853\Desktop\device\src\main\java\com\entity\Supplier.java +C:\Users\13853\Desktop\device\src\main\java\com\entity\User.java +C:\Users\13853\Desktop\device\src\main\java\com\controller\MaintenancerecordController.java +C:\Users\13853\Desktop\device\src\main\java\com\service\ScraprecordService.java +C:\Users\13853\Desktop\device\src\main\java\com\DeviceApplication.java +C:\Users\13853\Desktop\device\src\main\java\com\service\impl\UserServiceImpl.java +C:\Users\13853\Desktop\device\src\main\java\com\service\MaintenancerecordService.java +C:\Users\13853\Desktop\device\src\main\java\com\mapper\MaintenancerecordMapper.java +C:\Users\13853\Desktop\device\src\main\java\com\service\impl\DevicecategoryServiceImpl.java +C:\Users\13853\Desktop\device\src\main\java\com\mapper\UserMapper.java +C:\Users\13853\Desktop\device\src\main\java\com\service\impl\MaintenancerecordServiceImpl.java +C:\Users\13853\Desktop\device\src\main\java\com\controller\UsagerecordController.java +C:\Users\13853\Desktop\device\src\main\java\com\mapper\ScraprecordMapper.java +C:\Users\13853\Desktop\device\src\main\java\com\mapper\DevicecategoryMapper.java +C:\Users\13853\Desktop\device\src\main\java\com\controller\OperationlogController.java +C:\Users\13853\Desktop\device\src\main\java\com\mapper\RoleMapper.java diff --git a/device/target/maven-status/maven-compiler-plugin/testCompile/default-testCompile/createdFiles.lst b/device/target/maven-status/maven-compiler-plugin/testCompile/default-testCompile/createdFiles.lst new file mode 100644 index 0000000..e69de29 diff --git a/device/target/maven-status/maven-compiler-plugin/testCompile/default-testCompile/inputFiles.lst b/device/target/maven-status/maven-compiler-plugin/testCompile/default-testCompile/inputFiles.lst new file mode 100644 index 0000000..e69de29 diff --git a/数据库脚本/a.sql b/数据库脚本/a.sql new file mode 100644 index 0000000..4982663 --- /dev/null +++ b/数据库脚本/a.sql @@ -0,0 +1,324 @@ +/* + Navicat Premium Dump SQL + + Source Server : work + Source Server Type : MySQL + Source Server Version : 80040 (8.0.40) + Source Host : localhost:3306 + Source Schema : a + + Target Server Type : MySQL + Target Server Version : 80040 (8.0.40) + File Encoding : 65001 + + Date: 29/12/2024 13:42:11 +*/ + +SET NAMES utf8mb4; +SET FOREIGN_KEY_CHECKS = 0; + +-- ---------------------------- +-- Table structure for device +-- ---------------------------- +DROP TABLE IF EXISTS `device`; +CREATE TABLE `device` ( + `DeviceID` int NOT NULL AUTO_INCREMENT, + `DeviceName` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL, + `DeviceType` int NOT NULL, + `Model` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL, + `PurchaseDate` date NOT NULL, + `Status` varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT '0', + `Location` int NOT NULL, + PRIMARY KEY (`DeviceID`) USING BTREE, + INDEX `fk_device_category`(`DeviceType` ASC) USING BTREE, + INDEX `fk_device_location`(`Location` ASC) USING BTREE, + CONSTRAINT `fk_device_category` FOREIGN KEY (`DeviceType`) REFERENCES `devicecategory` (`CategoryID`) ON DELETE CASCADE ON UPDATE RESTRICT, + CONSTRAINT `fk_device_location` FOREIGN KEY (`Location`) REFERENCES `location` (`LocationID`) ON DELETE CASCADE ON UPDATE RESTRICT +) ENGINE = InnoDB AUTO_INCREMENT = 18 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_0900_ai_ci ROW_FORMAT = DYNAMIC; + +-- ---------------------------- +-- Records of device +-- ---------------------------- +INSERT INTO `device` VALUES (1, '切割机1', 3, 'QG800', '2024-12-28', '0', 1); +INSERT INTO `device` VALUES (2, '水冷切割1', 4, 'T6113', '2024-12-28', '0', 1); +INSERT INTO `device` VALUES (3, '切割机3', 1, 'CAK6140', '2024-12-28', '0', 1); +INSERT INTO `device` VALUES (4, '切割机4', 4, 'CAK6141', '2024-12-28', '0', 7); +INSERT INTO `device` VALUES (5, '切割机34', 4, 'JH21-80', '2024-12-28', '1', 7); +INSERT INTO `device` VALUES (6, '切割机6', 4, 'JH21-80', '2024-12-28', '0', 7); +INSERT INTO `device` VALUES (7, '服务器A1', 9, 'HUAWEI RH2288 V3', '2023-01-15', '正常', 9); +INSERT INTO `device` VALUES (8, '服务器A1', 9, 'HUAWEI RH2288 V3', '2023-01-15', '正常', 9); +INSERT INTO `device` VALUES (9, '交换机B2', 10, 'Cisco Catalyst 9300', '2023-03-10', '正常', 10); +INSERT INTO `device` VALUES (10, '磁盘阵列C3', 11, 'Lenovo ThinkSystem DM5000F', '2023-04-20', '正常', 11); +INSERT INTO `device` VALUES (11, '防火墙D4', 12, 'FortiGate 60E', '2023-05-15', '正常', 12); +INSERT INTO `device` VALUES (12, '打印机E5', 16, 'HP LaserJet Pro MFP M28w', '2023-06-05', '正常', 15); +INSERT INTO `device` VALUES (13, '笔记本电脑F6', 17, 'Apple MacBook Air M1', '2023-07-25', '正常', 16); +INSERT INTO `device` VALUES (14, '路由器G7', 10, 'Microsoft Azure Stack Edge', '2023-08-10', '正常', 17); +INSERT INTO `device` VALUES (15, '摄像头H8', 15, 'Hikvision DS-2CD2T86G1-LU', '2023-09-20', '正常', 18); +INSERT INTO `device` VALUES (16, '扫描仪I9', 13, 'Canon imageFORMULA DR-C225W', '2023-10-15', '正常', 12); +INSERT INTO `device` VALUES (17, '手机J10', 17, 'Huawei P40 Pro', '2023-11-05', '正常', 15); + +-- ---------------------------- +-- Table structure for devicecategory +-- ---------------------------- +DROP TABLE IF EXISTS `devicecategory`; +CREATE TABLE `devicecategory` ( + `CategoryID` int NOT NULL AUTO_INCREMENT, + `CategoryName` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL, + PRIMARY KEY (`CategoryID`) USING BTREE +) ENGINE = InnoDB AUTO_INCREMENT = 19 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_0900_ai_ci ROW_FORMAT = DYNAMIC; + +-- ---------------------------- +-- Records of devicecategory +-- ---------------------------- +INSERT INTO `devicecategory` VALUES (1, '手持式切割机'); +INSERT INTO `devicecategory` VALUES (2, '台式切割机'); +INSERT INTO `devicecategory` VALUES (3, '火焰切割机'); +INSERT INTO `devicecategory` VALUES (4, '等离子切割机'); +INSERT INTO `devicecategory` VALUES (5, 'X7150'); +INSERT INTO `devicecategory` VALUES (6, 'T6113'); +INSERT INTO `devicecategory` VALUES (7, 'JH21-80'); +INSERT INTO `devicecategory` VALUES (8, 'ZX7-400'); +INSERT INTO `devicecategory` VALUES (9, '服务器'); +INSERT INTO `devicecategory` VALUES (10, '网络设备'); +INSERT INTO `devicecategory` VALUES (11, '存储设备'); +INSERT INTO `devicecategory` VALUES (12, '安全设备'); +INSERT INTO `devicecategory` VALUES (13, '办公设备'); +INSERT INTO `devicecategory` VALUES (14, '测试设备'); +INSERT INTO `devicecategory` VALUES (15, '监控设备'); +INSERT INTO `devicecategory` VALUES (16, '打印设备'); +INSERT INTO `devicecategory` VALUES (17, '移动设备'); +INSERT INTO `devicecategory` VALUES (18, '其他'); + +-- ---------------------------- +-- Table structure for location +-- ---------------------------- +DROP TABLE IF EXISTS `location`; +CREATE TABLE `location` ( + `LocationID` int NOT NULL AUTO_INCREMENT, + `LocationName` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL, + `LocationDescription` text CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL, + PRIMARY KEY (`LocationID`) USING BTREE +) ENGINE = InnoDB AUTO_INCREMENT = 19 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_0900_ai_ci ROW_FORMAT = DYNAMIC; + +-- ---------------------------- +-- Records of location +-- ---------------------------- +INSERT INTO `location` VALUES (1, 'A1-b1', '无'); +INSERT INTO `location` VALUES (2, 'A1-b2', '无'); +INSERT INTO `location` VALUES (3, 'A1-c1', '无'); +INSERT INTO `location` VALUES (4, 'A1-c2', '无'); +INSERT INTO `location` VALUES (5, 'B1-b1', '无'); +INSERT INTO `location` VALUES (6, 'B1-b2', '无'); +INSERT INTO `location` VALUES (7, 'C1-b1', '无'); +INSERT INTO `location` VALUES (8, 'C1-b2', '无'); +INSERT INTO `location` VALUES (9, '数据中心A区', NULL); +INSERT INTO `location` VALUES (10, '数据中心B区', NULL); +INSERT INTO `location` VALUES (11, '办公楼一层', NULL); +INSERT INTO `location` VALUES (12, '办公楼二层', NULL); +INSERT INTO `location` VALUES (13, '实验室', NULL); +INSERT INTO `location` VALUES (14, '仓库', NULL); +INSERT INTO `location` VALUES (15, '前台', NULL); +INSERT INTO `location` VALUES (16, '会议室', NULL); +INSERT INTO `location` VALUES (17, '研发部', NULL); +INSERT INTO `location` VALUES (18, '测试间', NULL); + +-- ---------------------------- +-- Table structure for maintenancerecord +-- ---------------------------- +DROP TABLE IF EXISTS `maintenancerecord`; +CREATE TABLE `maintenancerecord` ( + `MaintenanceID` int NOT NULL AUTO_INCREMENT, + `DeviceID` int NOT NULL, + `MaintenanceType` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL, + `MaintenanceDate` date NOT NULL, + `Technician` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL, + `MaintenanceDetails` text CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL, + `MaintenanceCost` decimal(10, 2) NULL DEFAULT NULL, + `NextMaintenanceDate` date NULL DEFAULT NULL, + PRIMARY KEY (`MaintenanceID`) USING BTREE, + INDEX `fk_maintenance_device`(`DeviceID` ASC) USING BTREE, + CONSTRAINT `fk_maintenance_device` FOREIGN KEY (`DeviceID`) REFERENCES `device` (`DeviceID`) ON DELETE CASCADE ON UPDATE RESTRICT +) ENGINE = InnoDB AUTO_INCREMENT = 16 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_0900_ai_ci ROW_FORMAT = DYNAMIC; + +-- ---------------------------- +-- Records of maintenancerecord +-- ---------------------------- +INSERT INTO `maintenancerecord` VALUES (1, 1, '日常维护', '2024-12-28', 'admin', '成功', 100.00, '2025-01-28'); +INSERT INTO `maintenancerecord` VALUES (2, 2, '日常维护', '2024-12-28', 'admin', '成功', 100.00, '2025-01-28'); +INSERT INTO `maintenancerecord` VALUES (3, 2, '日常维护', '2024-12-28', 'admin', '成功', 100.00, '2025-01-28'); +INSERT INTO `maintenancerecord` VALUES (4, 2, '日常维护', '2024-12-28', 'admin', '成功', 100.00, '2025-01-28'); +INSERT INTO `maintenancerecord` VALUES (5, 5, '日常维护', '2024-12-28', 'admin', '成功', 100.00, '2025-01-28'); +INSERT INTO `maintenancerecord` VALUES (6, 4, '定期检查', '2023-06-15', '张伟', '成功', 500.00, '2024-06-15'); +INSERT INTO `maintenancerecord` VALUES (7, 5, '紧急维修', '2023-07-10', '李华', '成功', 800.00, '2024-07-10'); +INSERT INTO `maintenancerecord` VALUES (8, 6, '硬件更换', '2023-08-20', '王强', '成功', 1200.00, '2024-08-20'); +INSERT INTO `maintenancerecord` VALUES (9, 4, '软件升级', '2023-09-15', '赵敏', '成功', 300.00, '2024-09-15'); +INSERT INTO `maintenancerecord` VALUES (10, 5, '耗材更换', '2023-10-05', '孙丽', '成功', 150.00, '2024-10-05'); +INSERT INTO `maintenancerecord` VALUES (11, 5, '清洁保养', '2023-11-25', '周杰', '成功', 100.00, '2024-11-25'); +INSERT INTO `maintenancerecord` VALUES (12, 7, '固件更新', '2023-12-10', '吴芳', '成功', 200.00, '2024-12-10'); +INSERT INTO `maintenancerecord` VALUES (13, 8, '镜头校准', '2024-01-20', '郑浩', '成功', 250.00, '2025-01-20'); +INSERT INTO `maintenancerecord` VALUES (14, 5, '滚轮更换', '2024-02-15', '陈静', '成功', 120.00, '2025-02-15'); +INSERT INTO `maintenancerecord` VALUES (15, 7, '电池更换', '2024-03-05', '黄勇', '成功', 80.00, '2025-03-05'); + +-- ---------------------------- +-- Table structure for operationlog +-- ---------------------------- +DROP TABLE IF EXISTS `operationlog`; +CREATE TABLE `operationlog` ( + `LogID` int NOT NULL AUTO_INCREMENT, + `OperationType` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL, + `OperationTime` date NOT NULL, + `OperationDescription` text CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL, + PRIMARY KEY (`LogID`) USING BTREE +) ENGINE = InnoDB AUTO_INCREMENT = 4 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_0900_ai_ci ROW_FORMAT = DYNAMIC; + +-- ---------------------------- +-- Records of operationlog +-- ---------------------------- +INSERT INTO `operationlog` VALUES (1, '运行', '2024-12-28', '成功'); +INSERT INTO `operationlog` VALUES (2, '运行', '2024-12-28', '成功'); +INSERT INTO `operationlog` VALUES (3, '运行', '2024-12-28', '成功'); + +-- ---------------------------- +-- Table structure for role +-- ---------------------------- +DROP TABLE IF EXISTS `role`; +CREATE TABLE `role` ( + `RoleID` int NOT NULL AUTO_INCREMENT, + `RoleName` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL, + `PermissionDescription` text CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL, + PRIMARY KEY (`RoleID`) USING BTREE +) ENGINE = InnoDB AUTO_INCREMENT = 13 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_0900_ai_ci ROW_FORMAT = DYNAMIC; + +-- ---------------------------- +-- Records of role +-- ---------------------------- +INSERT INTO `role` VALUES (1, '普通用户', NULL); +INSERT INTO `role` VALUES (2, '维修工', NULL); +INSERT INTO `role` VALUES (3, '管理员', '拥有所有权限'); +INSERT INTO `role` VALUES (4, '维护人员', '可以进行设备维护和状态更新'); +INSERT INTO `role` VALUES (5, '普通用户', '仅能查看设备状态和历史记录'); +INSERT INTO `role` VALUES (6, '采购员', '负责设备采购和供应商管理'); +INSERT INTO `role` VALUES (7, '技术支持', '处理技术问题和支持请求'); +INSERT INTO `role` VALUES (8, '财务人员', '管理预算和成本'); +INSERT INTO `role` VALUES (9, 'HR', '人力资源管理'); +INSERT INTO `role` VALUES (10, '项目经理', '项目进度和资源调配'); +INSERT INTO `role` VALUES (11, '质量保证', '确保设备符合标准'); +INSERT INTO `role` VALUES (12, '访客', '临时访问权限'); + +-- ---------------------------- +-- Table structure for scraprecord +-- ---------------------------- +DROP TABLE IF EXISTS `scraprecord`; +CREATE TABLE `scraprecord` ( + `ScrapID` int NOT NULL AUTO_INCREMENT, + `DeviceID` int NOT NULL, + `ScrapDate` date NOT NULL, + `ScrapReason` text CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL, + `DisposalMethod` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL, + PRIMARY KEY (`ScrapID`) USING BTREE, + UNIQUE INDEX `DeviceID`(`DeviceID` ASC) USING BTREE, + CONSTRAINT `fk_scrap_device` FOREIGN KEY (`DeviceID`) REFERENCES `device` (`DeviceID`) ON DELETE CASCADE ON UPDATE RESTRICT +) ENGINE = InnoDB AUTO_INCREMENT = 3 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_0900_ai_ci ROW_FORMAT = DYNAMIC; + +-- ---------------------------- +-- Records of scraprecord +-- ---------------------------- +INSERT INTO `scraprecord` VALUES (1, 5, '2024-12-28', '日常报废', '设备到期'); +INSERT INTO `scraprecord` VALUES (2, 7, '2024-01-15', '硬件老化,性能不满足需求', '回收利用'); + +-- ---------------------------- +-- Table structure for supplier +-- ---------------------------- +DROP TABLE IF EXISTS `supplier`; +CREATE TABLE `supplier` ( + `SupplierID` int NOT NULL AUTO_INCREMENT, + `SupplierName` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL, + `ContactPerson` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL, + `ContactPhone` varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL, + `Address` varchar(200) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL, + PRIMARY KEY (`SupplierID`) USING BTREE +) ENGINE = InnoDB AUTO_INCREMENT = 13 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_0900_ai_ci ROW_FORMAT = DYNAMIC; + +-- ---------------------------- +-- Records of supplier +-- ---------------------------- +INSERT INTO `supplier` VALUES (1, '供应商1', '张先生', '110', '上海'); +INSERT INTO `supplier` VALUES (2, '供应商2', '李女士', '120', '深圳'); +INSERT INTO `supplier` VALUES (3, '华为科技有限公司', '李华', '+86-755-12345678', '深圳市南山区科技路'); +INSERT INTO `supplier` VALUES (4, '思科系统(中国)有限公司', '张伟', '+86-10-87654321', '北京市朝阳区建国门外大街'); +INSERT INTO `supplier` VALUES (5, '联想集团', '王强', '+86-10-98765432', '北京市海淀区上地西路'); +INSERT INTO `supplier` VALUES (6, '戴尔科技公司', '赵敏', '+86-21-54321876', '上海市浦东新区世纪大道'); +INSERT INTO `supplier` VALUES (7, '惠普发展公司', '孙丽', '+86-21-65432109', '上海市徐汇区漕溪北路'); +INSERT INTO `supplier` VALUES (8, '苹果贸易(上海)有限公司', '周杰', '+86-21-12345678', '上海市陆家嘴环路'); +INSERT INTO `supplier` VALUES (9, '微软(中国)有限公司', '吴芳', '+86-10-87654321', '北京市朝阳区东三环中路'); +INSERT INTO `supplier` VALUES (10, '甲骨文中国', '郑浩', '+86-10-12345678', '北京市海淀区知春路'); +INSERT INTO `supplier` VALUES (11, 'IBM中国有限公司', '陈静', '+86-10-98765432', '北京市朝阳区光华东里'); +INSERT INTO `supplier` VALUES (12, '阿里巴巴集团', '黄勇', '+86-10-12345678', '杭州市滨江区网商路'); + +-- ---------------------------- +-- Table structure for usagerecord +-- ---------------------------- +DROP TABLE IF EXISTS `usagerecord`; +CREATE TABLE `usagerecord` ( + `UsageID` int NOT NULL AUTO_INCREMENT, + `DeviceID` int NULL DEFAULT NULL, + `UserID` int NULL DEFAULT NULL, + `UsageDate` date NULL DEFAULT NULL, + `UsageTime` time NULL DEFAULT NULL, + `UsageType` enum('Reading','Writing','Other') CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL, + `UsageDesc` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL, + PRIMARY KEY (`UsageID`) USING BTREE +) ENGINE = InnoDB AUTO_INCREMENT = 16 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_0900_ai_ci ROW_FORMAT = Dynamic; + +-- ---------------------------- +-- Records of usagerecord +-- ---------------------------- +INSERT INTO `usagerecord` VALUES (1, NULL, 1, '2024-12-29', '16:36:41', NULL, '登录失败'); +INSERT INTO `usagerecord` VALUES (2, NULL, 1, '2024-12-29', '16:36:49', NULL, '登录成功'); +INSERT INTO `usagerecord` VALUES (3, NULL, 2, '2024-12-29', '16:41:19', NULL, '登录成功'); +INSERT INTO `usagerecord` VALUES (4, NULL, 1, '2024-12-29', '16:41:44', NULL, '登录成功'); +INSERT INTO `usagerecord` VALUES (5, NULL, 2, '2024-12-29', '16:42:05', NULL, '登录成功'); +INSERT INTO `usagerecord` VALUES (6, NULL, 1, '2024-12-29', '16:45:04', NULL, '登录成功'); +INSERT INTO `usagerecord` VALUES (7, NULL, 1, '2024-12-29', '16:48:00', NULL, '登录成功'); +INSERT INTO `usagerecord` VALUES (8, NULL, 2, '2024-12-29', '16:48:14', NULL, '登录成功'); +INSERT INTO `usagerecord` VALUES (9, NULL, 1, '2024-12-29', '01:15:06', NULL, '登录成功'); +INSERT INTO `usagerecord` VALUES (10, NULL, 1, '2024-12-29', '03:53:58', NULL, '登录成功'); +INSERT INTO `usagerecord` VALUES (11, NULL, 1, '2024-01-01', '08:30:00', NULL, '登录成功'); +INSERT INTO `usagerecord` VALUES (12, NULL, 25, '2024-01-01', '09:00:00', NULL, '登录成功'); +INSERT INTO `usagerecord` VALUES (13, NULL, 27, '2024-01-01', '10:00:00', NULL, '登录成功'); +INSERT INTO `usagerecord` VALUES (14, NULL, 2, '2024-01-01', '08:45:00', NULL, '登录成功'); +INSERT INTO `usagerecord` VALUES (15, NULL, 31, '2024-01-01', '14:00:00', NULL, '登录成功'); + +-- ---------------------------- +-- Table structure for user +-- ---------------------------- +DROP TABLE IF EXISTS `user`; +CREATE TABLE `user` ( + `UserID` int NOT NULL AUTO_INCREMENT, + `UserName` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL, + `Password` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL, + `Role` int NOT NULL, + PRIMARY KEY (`UserID`) USING BTREE, + UNIQUE INDEX `UserName`(`UserName` ASC) USING BTREE, + INDEX `fk_user_role`(`Role` ASC) USING BTREE, + CONSTRAINT `fk_user_role` FOREIGN KEY (`Role`) REFERENCES `role` (`RoleID`) ON DELETE CASCADE ON UPDATE RESTRICT +) ENGINE = InnoDB AUTO_INCREMENT = 34 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_0900_ai_ci ROW_FORMAT = DYNAMIC; + +-- ---------------------------- +-- Records of user +-- ---------------------------- +INSERT INTO `user` VALUES (1, 'admin', '123', 2); +INSERT INTO `user` VALUES (2, 'user1', '123', 1); +INSERT INTO `user` VALUES (3, 'user2', '123', 1); +INSERT INTO `user` VALUES (24, 'admin1', 'admin123', 1); +INSERT INTO `user` VALUES (25, 'maintainer1', 'maintainer123', 2); +INSERT INTO `user` VALUES (26, 'maintainer2', 'maintainer123', 2); +INSERT INTO `user` VALUES (27, 'techsupport1', 'tech123', 5); +INSERT INTO `user` VALUES (28, 'techsupport2', 'tech123', 5); +INSERT INTO `user` VALUES (29, 'user3', 'user123', 3); +INSERT INTO `user` VALUES (30, 'user4', 'user123', 3); +INSERT INTO `user` VALUES (31, 'buyer', 'buyer123', 4); +INSERT INTO `user` VALUES (32, 'finance', 'finance123', 6); +INSERT INTO `user` VALUES (33, 'hr', 'hr123', 7); + +SET FOREIGN_KEY_CHECKS = 1; diff --git a/数据库脚本/其他脚本.txt b/数据库脚本/其他脚本.txt new file mode 100644 index 0000000..754f965 --- /dev/null +++ b/数据库脚本/其他脚本.txt @@ -0,0 +1,611 @@ +1.设备表 (Device): +CREATE TABLE Device ( + DeviceID SERIAL PRIMARY KEY, + DeviceName VARCHAR(100) NOT NULL, + DeviceType INT NOT NULL REFERENCES DeviceCategory(CategoryID), + Model VARCHAR(50) NOT NULL, + PurchaseDate DATE NOT NULL, + Status VARCHAR(20) DEFAULT '正常', + Location INT NOT NULL REFERENCES Location(LocationID) +); +2.供应商表 (Supplier): +CREATE TABLE Supplier ( + SupplierID SERIAL PRIMARY KEY, + SupplierName VARCHAR(100) NOT NULL, + ContactPerson VARCHAR(50), + ContactPhone VARCHAR(20), + Address VARCHAR(200) +); +3.设备维护记录表 (MaintenanceRecord): +CREATE TABLE MaintenanceRecord ( + MaintenanceID SERIAL PRIMARY KEY, + DeviceID INT NOT NULL REFERENCES Device(DeviceID), + MaintenanceType VARCHAR(50) NOT NULL, + MaintenanceDate DATE NOT NULL, + Technician VARCHAR(50) NOT NULL, + MaintenanceDetails TEXT, + MaintenanceCost DECIMAL(10, 2), + NextMaintenanceDate DATE +); +4.设备报废记录表 (ScrapRecord): +CREATE TABLE ScrapRecord ( + ScrapID SERIAL PRIMARY KEY, + DeviceID INT NOT NULL UNIQUE REFERENCES Device(DeviceID), + ScrapDate DATE NOT NULL, + ScrapReason TEXT NOT NULL, + DisposalMethod VARCHAR(100) NOT NULL +); +5.登录记录表 (LoginRecord): +CREATE TABLE LoginRecord ( +UsageID SERIAL PRIMARY KEY, +UserID VARCHAR(50) NOT NULL, +UsageDate DATE NOT NULL, +UsageTime TIME NOT NULL, +UsageDesc TEXT, +LoginDuration INT GENERATED ALWAYS AS ( + CASE +WHEN LogoutTime IS NOT NULL THEN EXTRACT(EPOCH FROM ((UsageDate || ' ' || LogoutTime)::TIMESTAMP - (UsageDate || ' ' || UsageTime)::TIMESTAMP)) / 60 +ELSE NULL +END +); +6.库存位置表 (Location): +CREATE TABLE Location ( + LocationID SERIAL PRIMARY KEY, + LocationName VARCHAR(100) NOT NULL, + LocationDescription TEXT +); +7.用户表 (User): +CREATE TABLE User ( + UserID SERIAL PRIMARY KEY, + UserName VARCHAR(50) NOT NULL UNIQUE, + Password VARCHAR(255) NOT NULL, + Role INT NOT NULL REFERENCES Role(RoleID) +); +8.角色表 (Role): +CREATE TABLE Role ( + RoleID SERIAL PRIMARY KEY, + RoleName VARCHAR(50) NOT NULL, + PermissionDescription TEXT +); +9.设备类别表 (DeviceCategory): +CREATE TABLE DeviceCategory ( + CategoryID SERIAL PRIMARY KEY, + CategoryName VARCHAR(50) NOT NULL +); +10.操作日志表 (OperationLog): +CREATE TABLE OperationLog ( + LogID SERIAL PRIMARY KEY, + OperationType VARCHAR(50) NOT NULL, + OperationTime TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP, + OperationDescription TEXT +); + +索引设计 +根据常用查询条件创建索引: +CREATE INDEX idx_device_status ON Device(Status); +CREATE INDEX idx_device_location ON Device(Location); +CREATE INDEX idx_maintenance_date ON MaintenanceRecord(MaintenanceDate); +CREATE INDEX idx_usage_device ON UsageRecord(DeviceID); +CREATE INDEX idx_usage_starttime ON UsageRecord(StartTime); + +视图创建脚本 +1.查询设备状态视图: +CREATE VIEW DeviceStatusView AS +SELECT + d.DeviceID, + d.DeviceName, + d.Status, + l.LocationName +FROM + Device d +JOIN + Location l ON d.Location = l.LocationID; +2.维护记录视图: +CREATE VIEW MaintenanceSummary AS +SELECT + m.MaintenanceID, + d.DeviceName, + m.MaintenanceType, + m.MaintenanceDate, + m.Technician, + m.MaintenanceCost +FROM + MaintenanceRecord m +JOIN + Device d ON m.DeviceID = d.DeviceID; +3.设备使用详情视图: +CREATE VIEW DeviceUsageDetails AS +SELECT + u.UsageID, + d.DeviceName, + u.User, + u.StartTime, + u.EndTime, + u.UsageDuration +FROM + UsageRecord u +JOIN + Device d ON u.DeviceID = d.DeviceID; +4.报废设备视图: +CREATE VIEW ScrapDeviceView AS +SELECT + s.ScrapID, + d.DeviceName, + s.ScrapDate, + s.ScrapReason, + s.DisposalMethod +FROM + ScrapRecord s +JOIN + Device d ON s.DeviceID = d.DeviceID; +5.设备与供应商关联视图: +CREATE VIEW DeviceSupplierView AS +SELECT + d.DeviceID, + d.DeviceName, + s.SupplierName, + s.ContactPerson, + s.ContactPhone +FROM + Device d +JOIN + Supplier s ON d.DeviceType = s.SupplierID; + +存储过程: +1.添加新设备的存储过程: +CREATE OR REPLACE PROCEDURE AddDevice( + p_DeviceName VARCHAR, + p_DeviceType INT, + p_Model VARCHAR, + p_PurchaseDate DATE, + p_Location INT +) +AS $$ +BEGIN + INSERT INTO Device(DeviceName, DeviceType, Model, PurchaseDate, Location) + VALUES (p_DeviceName, p_DeviceType, p_Model, p_PurchaseDate, p_Location); +END; +$$ LANGUAGE plpgsql; +2.生成设备维护提醒: +CREATE OR REPLACE PROCEDURE MaintenanceReminder() +AS $$ +BEGIN + INSERT INTO OperationLog(OperationType, OperationDescription) + SELECT + 'Reminder', + CONCAT('设备ID ', DeviceID, ' 需要进行维护,计划日期: ', NextMaintenanceDate) + FROM + MaintenanceRecord + WHERE + NextMaintenanceDate <= CURRENT_DATE; +END; +$$ LANGUAGE plpgsql; +3.批量更新设备状态为报废: +CREATE OR REPLACE PROCEDURE BatchScrapDevices() +AS $$ +BEGIN + UPDATE Device + SET Status = '已报废' + WHERE Status = '正常' AND DeviceID IN ( + SELECT DeviceID FROM ScrapRecord + ); +END; +$$ LANGUAGE plpgsql; +4.统计设备使用时长: +CREATE OR REPLACE FUNCTION CalculateUsageTime(p_DeviceID INT) +RETURNS INT AS $$ +DECLARE + total_usage INT; +BEGIN + SELECT SUM(UsageDuration) INTO total_usage + FROM UsageRecord + WHERE DeviceID = p_DeviceID; + RETURN COALESCE(total_usage, 0); +END; +5.$$ LANGUAGE plpgsql;删除设备和关联记录: +CREATE OR REPLACE PROCEDURE DeleteDevice(p_DeviceID INT) +AS $$ +BEGIN + DELETE FROM MaintenanceRecord WHERE DeviceID = p_DeviceID; + DELETE FROM ScrapRecord WHERE DeviceID = p_DeviceID; + DELETE FROM UsageRecord WHERE DeviceID = p_DeviceID; + DELETE FROM Device WHERE DeviceID = p_DeviceID; +END; +$$ LANGUAGE plpgsql; + + +SELECT * FROM Device WHERE Status = '正常'; + +SELECT * FROM Device WHERE SupplierID = 1; + +SELECT * FROM Device WHERE Status IN ('正常', '维护中'); + +SELECT * FROM Device WHERE Location NOT IN (SELECT LocationID FROM Location WHERE LocationName = '仓库'); + +SELECT * FROM Device WHERE PurchaseDate BETWEEN '2024-01-01' AND '2024-06-30'; + +SELECT * FROM MaintenanceRecord WHERE MaintenanceCost BETWEEN 1000 AND 5000; + +SELECT * FROM Device WHERE DeviceName LIKE '%空压机%'; + +SELECT * FROM Device WHERE Model LIKE 'ModelA%'; + +CREATE VIEW LatestMaintenance AS +SELECT d.DeviceID, d.DeviceName, m.MaintenanceID, m.MaintenanceDate, m.MaintenanceDetails +FROM Device d +LEFT JOIN ( + SELECT DeviceID, MAX(MaintenanceDate) AS LastMaintenanceDate + FROM MaintenanceRecord + GROUP BY DeviceID +) lm ON d.DeviceID = lm.DeviceID +LEFT JOIN MaintenanceRecord m ON lm.DeviceID = m.DeviceID AND lm.LastMaintenanceDate = m.MaintenanceDate; + +SELECT * FROM LatestMaintenance; + +SELECT d.DeviceID, d.DeviceName, s.SupplierName +FROM Device d +JOIN Supplier s ON d.SupplierID = s.SupplierID; + +SELECT * FROM Device WHERE DeviceID IN (SELECT DeviceID FROM MaintenanceRecord); + +SELECT * FROM Device WHERE DeviceID NOT IN (SELECT DeviceID FROM MaintenanceRecord); + +SELECT * FROM Device WHERE EXISTS (SELECT 1 FROM ScrapRecord WHERE ScrapRecord.DeviceID = Device.DeviceID); + +SELECT * FROM Device WHERE NOT EXISTS (SELECT 1 FROM ScrapRecord WHERE ScrapRecord.DeviceID = Device.DeviceID); + +SELECT d.* FROM Device d +WHERE Status = '正常' AND EXISTS ( + SELECT 1 FROM MaintenanceRecord m + WHERE m.DeviceID = d.DeviceID AND m.MaintenanceDate >= DATE_SUB(CURRENT_DATE, INTERVAL '1 YEAR') +); + +SELECT DISTINCT UserID FROM LoginRecord +WHERE UsageDate >= DATE_SUB(CURRENT_DATE, INTERVAL '1 MONTH'); + +SELECT DeviceType, COUNT(*) FROM Device GROUP BY DeviceType; + +SELECT SupplierID, COUNT(*) FROM Device GROUP BY SupplierID; + +SELECT DeviceID, SUM(MaintenanceCost) AS TotalCost FROM MaintenanceRecord GROUP BY DeviceID; + +SELECT DATE_TRUNC('month', PurchaseDate) AS Month, COUNT(*) AS DeviceCount +FROM Device +GROUP BY DATE_TRUNC('month', PurchaseDate) +ORDER BY Month; + +UPDATE Device +SET DeviceName = '更新后的空压机-A01', + Model = 'NewModelA', + PurchaseDate = '2024-02-01', + Status = '维护中', + Location = 2 +WHERE DeviceID = 1; + +DELETE FROM MaintenanceRecord WHERE DeviceID = 1; + +DELETE FROM ScrapRecord WHERE DeviceID = 1; + +DELETE FROM Device WHERE DeviceID = 1; + +UPDATE MaintenanceRecord +SET MaintenanceType = '定期保养', + MaintenanceDate = '2024-03-01', + Technician = '李工程师', + MaintenanceDetails = '更换了过滤器', + NextMaintenanceDate = '2024-06-01' +WHERE MaintenanceID = 1; + +DELETE FROM MaintenanceRecord WHERE MaintenanceID = 1; + +UPDATE ScrapRecord +SET ScrapReason = '设备老化无法修复', + DisposalMethod = '出售' +WHERE ScrapID = 1; + +DELETE FROM ScrapRecord WHERE ScrapID = 1; +UPDATE ScrapRecord SET InvalidFlag = TRUE WHERE ScrapID = 1; + +UPDATE LoginRecord SET UsageDesc = '管理员例行检查' WHERE UsageID = 1; + +DELETE FROM LoginRecord WHERE UsageID = 1; + +UPDATE User SET Password = crypt('new_secure_password', gen_salt('bf')), Role = (SELECT RoleID FROM Role WHERE RoleName = '普通用户') WHERE UserName = 'admin_user'; + +DELETE FROM User WHERE UserName = 'read_only_user'; + +UPDATE Role SET PermissionDescription = '可以查看设备信息,但不能修改' WHERE RoleID = 2; + +DELETE FROM Role WHERE RoleID = 3; + +UPDATE OperationLog SET OperationDescription = '新增了一台空压机设备' WHERE LogID = 1; + +DELETE FROM OperationLog WHERE LogID = 1; + +UPDATE DeviceCategory SET CategoryName = '新型空压机' WHERE CategoryID = 1; + +DELETE FROM DeviceCategory WHERE CategoryID = 2; + +UPDATE Location SET LocationDescription = '主生产车间的主要设备存放区' WHERE LocationID = 1; + +DELETE FROM Location WHERE LocationID = 3; + +UPDATE Device SET Status = '已报废' WHERE Status = '正常' AND DeviceID IN ( SELECT DeviceID FROM ScrapRecord ); + +DELETE FROM Supplier WHERE SupplierID NOT IN (SELECT SupplierID FROM Device); + +CREATE VIEW DeviceStatusView AS +SELECT d.DeviceID, d.DeviceName, d.Status, l.LocationName +FROM Device d +JOIN Location l ON d.Location = l.LocationID; + +CREATE VIEW LatestMaintenanceView AS +SELECT d.DeviceID, d.DeviceName, m.MaintenanceID, m.MaintenanceType, m.MaintenanceDate, m.Technician, m.NextMaintenanceDate +FROM Device d +LEFT JOIN ( + SELECT DeviceID, MAX(MaintenanceDate) AS LastMaintenanceDate + FROM MaintenanceRecord + GROUP BY DeviceID +) lm ON d.DeviceID = lm.DeviceID +LEFT JOIN MaintenanceRecord m ON lm.DeviceID = m.DeviceID AND lm.LastMaintenanceDate = m.MaintenanceDate; + +CREATE VIEW ScrappedDevicesView AS +SELECT d.DeviceID, d.DeviceName, s.ScrapDate, s.ScrapReason, s.DisposalMethod +FROM Device d +JOIN ScrapRecord s ON d.DeviceID = s.DeviceID; + +CREATE VIEW DeviceUsageStatisticsView AS +SELECT d.DeviceID, d.DeviceName, COALESCE(SUM(u.UsageDuration), 0) AS TotalUsageTime +FROM Device d +LEFT JOIN LoginRecord u ON d.DeviceID = u.DeviceID +GROUP BY d.DeviceID, d.DeviceName; + +CREATE VIEW UserPermissionsView AS +SELECT u.UserID, u.UserName, r.RoleName, r.PermissionDescription +FROM User u +JOIN Role r ON u.Role = r.RoleID; + +CREATE VIEW MaintenanceCostStatisticsView AS +SELECT d.DeviceID, d.DeviceName, COALESCE(SUM(m.MaintenanceCost), 0) AS TotalMaintenanceCost +FROM Device d +LEFT JOIN MaintenanceRecord m ON d.DeviceID = m.DeviceID +GROUP BY d.DeviceID, d.DeviceName; + +CREATE VIEW DeviceSupplierAssociationView AS +SELECT d.DeviceID, d.DeviceName, s.SupplierName, s.ContactPerson, s.ContactPhone +FROM Device d +JOIN Supplier s ON d.SupplierID = s.SupplierID; + +CREATE VIEW OperationLogSummaryView AS +SELECT o.OperationType, COUNT(*) AS OperationCount +FROM OperationLog o +GROUP BY o.OperationType; + +CREATE VIEW DeviceCategoryStatisticsView AS +SELECT c.CategoryID, c.CategoryName, COUNT(d.DeviceID) AS DeviceCount +FROM DeviceCategory c +LEFT JOIN Device d ON c.CategoryID = d.DeviceType +GROUP BY c.CategoryID, c.CategoryName; + +CREATE VIEW LocationDeviceInventoryView AS +SELECT l.LocationID, l.LocationName, d.DeviceID, d.DeviceName +FROM Location l +JOIN Device d ON l.LocationID = d.Location +ORDER BY l.LocationName, d.DeviceName; + +CREATE INDEX idx_device_status ON Device(Status); + +CREATE INDEX idx_device_location ON Device(Location); + +CREATE INDEX idx_maintenance_deviceid ON MaintenanceRecord(DeviceID); + +CREATE INDEX idx_maintenance_date ON MaintenanceRecord(MaintenanceDate); + +CREATE UNIQUE INDEX idx_scrap_deviceid_unique ON ScrapRecord(DeviceID); + +CREATE INDEX idx_login_userid ON LoginRecord(UserID); + +CREATE INDEX idx_login_usage_time ON LoginRecord(UsageTime); + +CREATE INDEX idx_supplier_name ON Supplier(SupplierName); + +CREATE INDEX idx_operation_type ON OperationLog(OperationType); + +CREATE INDEX idx_role_name ON Role(RoleName); + +CREATE INDEX idx_category_name ON DeviceCategory(CategoryName); + +CREATE OR REPLACE PROCEDURE AddDevice( + p_DeviceName VARCHAR, + p_DeviceType INT, + p_Model VARCHAR, + p_PurchaseDate DATE, + p_Status VARCHAR, + p_Location INT, + p_SupplierID INT +) +AS $$ +BEGIN + INSERT INTO Device (DeviceName, DeviceType, Model, PurchaseDate, Status, Location, SupplierID) + VALUES (p_DeviceName, p_DeviceType, p_Model, p_PurchaseDate, p_Status, p_Location, p_SupplierID); +END; +$$ LANGUAGE plpgsql; + +CREATE OR REPLACE PROCEDURE UpdateDevice( + p_DeviceID INT, + p_DeviceName VARCHAR, + p_DeviceType INT, + p_Model VARCHAR, + p_PurchaseDate DATE, + p_Status VARCHAR, + p_Location INT, + p_SupplierID INT +) +AS $$ +BEGIN + UPDATE Device + SET DeviceName = p_DeviceName, + DeviceType = p_DeviceType, + Model = p_Model, + PurchaseDate = p_PurchaseDate, + Status = p_Status, + Location = p_Location, + SupplierID = p_SupplierID + WHERE DeviceID = p_DeviceID; +END; +$$ LANGUAGE plpgsql; + +CREATE OR REPLACE PROCEDURE DeleteDevice(p_DeviceID INT) +AS $$ +BEGIN + DELETE FROM MaintenanceRecord WHERE DeviceID = p_DeviceID; + DELETE FROM ScrapRecord WHERE DeviceID = p_DeviceID; + DELETE FROM LoginRecord WHERE DeviceID = p_DeviceID; + DELETE FROM Device WHERE DeviceID = p_DeviceID; +END; +$$ LANGUAGE plpgsql; + +CREATE OR REPLACE PROCEDURE BatchScrapDevices() +AS $$ +BEGIN + UPDATE Device + SET Status = '已报废' + WHERE Status = '正常' AND DeviceID IN ( + SELECT DeviceID FROM ScrapRecord + ); +END; +$$ LANGUAGE plpgsql; + +CREATE OR REPLACE PROCEDURE GenerateMaintenanceReminders() +AS $$ +BEGIN + INSERT INTO OperationLog(OperationType, OperationDescription) + SELECT 'Reminder', CONCAT('设备ID ', DeviceID, ' 需要进行维护,计划日期: ', NextMaintenanceDate) + FROM MaintenanceRecord + WHERE NextMaintenanceDate <= CURRENT_DATE; +END; +$$ LANGUAGE plpgsql; + +CREATE OR REPLACE FUNCTION CalculateTotalUsageTime(p_DeviceID INT) +RETURNS INT AS $$ +DECLARE + total_usage INT; +BEGIN + SELECT COALESCE(SUM(UsageDuration), 0) INTO total_usage + FROM LoginRecord + WHERE DeviceID = p_DeviceID; + RETURN total_usage; +END; +$$ LANGUAGE plpgsql; + +CREATE OR REPLACE FUNCTION update_device_status_on_maintenance() +RETURNS TRIGGER AS $$ +BEGIN + UPDATE Device SET Status = '维护中' WHERE DeviceID = NEW.DeviceID; + RETURN NEW; +END; +$$ LANGUAGE plpgsql; + +CREATE TRIGGER trg_update_device_status_on_maintenance +AFTER INSERT ON MaintenanceRecord +FOR EACH ROW +EXECUTE FUNCTION update_device_status_on_maintenance(); + +CREATE OR REPLACE FUNCTION reset_device_status_on_maintenance_delete() +RETURNS TRIGGER AS $$ +DECLARE + maintenance_count INT; +BEGIN + SELECT COUNT(*) INTO maintenance_count FROM MaintenanceRecord WHERE DeviceID = OLD.DeviceID; + IF maintenance_count = 0 THEN + UPDATE Device SET Status = '正常' WHERE DeviceID = OLD.DeviceID; + END IF; + RETURN OLD; +END; +$$ LANGUAGE plpgsql; + +CREATE TRIGGER trg_reset_device_status_on_maintenance_delete +AFTER DELETE ON MaintenanceRecord +FOR EACH ROW +EXECUTE FUNCTION reset_device_status_on_maintenance_delete(); + +CREATE OR REPLACE FUNCTION log_user_login() +RETURNS TRIGGER AS $$ +BEGIN + INSERT INTO OperationLog (OperationType, OperationDescription, UserID) + VALUES ('Login', CONCAT('用户 ', NEW.UserName, ' 登录'), NEW.UserID); + RETURN NEW; +END; +$$ LANGUAGE plpgsql; + +CREATE TRIGGER trg_log_user_login +AFTER INSERT ON User +FOR EACH ROW +EXECUTE FUNCTION log_user_login(); + +CREATE OR REPLACE FUNCTION log_device_purchase() +RETURNS TRIGGER AS $$ +BEGIN + INSERT INTO OperationLog (OperationType, OperationDescription) + VALUES ('Purchase', CONCAT('新设备 ', NEW.DeviceName, ' 已采购')); + RETURN NEW; +END; +$$ LANGUAGE plpgsql; + +CREATE TRIGGER trg_log_device_purchase +AFTER INSERT ON Device +FOR EACH ROW +EXECUTE FUNCTION log_device_purchase(); + +CREATE OR REPLACE FUNCTION log_device_location_change() +RETURNS TRIGGER AS $$ +BEGIN + IF OLD.Location <> NEW.Location THEN + INSERT INTO OperationLog (OperationType, OperationDescription) + VALUES ('LocationChange', CONCAT('设备 ', NEW.DeviceName, ' 的位置从 ', OLD.Location, ' 变更为 ', NEW.Location)); + END IF; + RETURN NEW; +END; +$$ LANGUAGE plpgsql; + +CREATE TRIGGER trg_log_device_location_change +AFTER UPDATE OF Location ON Device +FOR EACH ROW +EXECUTE FUNCTION log_device_location_change(); + +CREATE TABLE AuditTrail ( + LogID SERIAL PRIMARY KEY, + TableName VARCHAR NOT NULL, + RecordID INT NOT NULL, + Action CHAR(1) CHECK (Action IN ('I', 'U', 'D')), + ChangedFields JSONB, + ChangeTime TIMESTAMP DEFAULT CURRENT_TIMESTAMP +); + +CREATE OR REPLACE FUNCTION audit_trigger_function() +RETURNS TRIGGER AS $$ +BEGIN + IF TG_OP = 'INSERT' THEN + INSERT INTO AuditTrail (TableName, RecordID, Action, ChangedFields) + VALUES (TG_TABLE_NAME, NEW.DeviceID, 'I', row_to_json(NEW)); + RETURN NEW; + ELSIF TG_OP = 'UPDATE' THEN + INSERT INTO AuditTrail (TableName, RecordID, Action, ChangedFields) + VALUES (TG_TABLE_NAME, NEW.DeviceID, 'U', jsonb_build_object( + 'OldValues', row_to_json(OLD), + 'NewValues', row_to_json(NEW) + )); + RETURN NEW; + ELSIF TG_OP = 'DELETE' THEN + INSERT INTO AuditTrail (TableName, RecordID, Action, ChangedFields) + VALUES (TG_TABLE_NAME, OLD.DeviceID, 'D', row_to_json(OLD)); + RETURN OLD; + END IF; +END; +$$ LANGUAGE plpgsql; + +CREATE TRIGGER trg_audit_device +AFTER INSERT OR UPDATE OR DELETE ON Device +FOR EACH ROW +EXECUTE FUNCTION audit_trigger_function(); + diff --git a/数据库脚本/数据初始化脚本.txt b/数据库脚本/数据初始化脚本.txt new file mode 100644 index 0000000..b21012c --- /dev/null +++ b/数据库脚本/数据初始化脚本.txt @@ -0,0 +1,103 @@ +设备类别表 +INSERT INTO DeviceCategory (CategoryName) VALUES +('服务器'), +('网络设备'), +('存储设备'), +('安全设备'), +('办公设备'), +('测试设备'), +('监控设备'), +('打印设备'), +('移动设备'), +('其他'); +设备表 +INSERT INTO Device (DeviceName, DeviceType, Model, PurchaseDate, Status, Location) VALUES +('服务器A1', (SELECT CategoryID FROM DeviceCategory WHERE CategoryName = '服务器'), 'HUAWEI RH2288 V3', '2023-01-15', '正常', (SELECT LocationID FROM Location WHERE LocationName = '数据中心A区')), +('交换机B2', (SELECT CategoryID FROM DeviceCategory WHERE CategoryName = '网络设备'), 'Cisco Catalyst 9300', '2023-03-10', '正常', (SELECT LocationID FROM Location WHERE LocationName = '数据中心B区')), +('磁盘阵列C3', (SELECT CategoryID FROM DeviceCategory WHERE CategoryName = '存储设备'), 'Lenovo ThinkSystem DM5000F', '2023-04-20', '正常', (SELECT LocationID FROM Location WHERE LocationName = '办公楼一层')), +('防火墙D4', (SELECT CategoryID FROM DeviceCategory WHERE CategoryName = '安全设备'), 'FortiGate 60E', '2023-05-15', '正常', (SELECT LocationID FROM Location WHERE LocationName = '办公楼二层')), +('打印机E5', (SELECT CategoryID FROM DeviceCategory WHERE CategoryName = '打印设备'), 'HP LaserJet Pro MFP M28w', '2023-06-05', '正常', (SELECT LocationID FROM Location WHERE LocationName = '前台')), +('笔记本电脑F6', (SELECT CategoryID FROM DeviceCategory WHERE CategoryName = '移动设备'), 'Apple MacBook Air M1', '2023-07-25', '正常', (SELECT LocationID FROM Location WHERE LocationName = '会议室')), +('路由器G7', (SELECT CategoryID FROM DeviceCategory WHERE CategoryName = '网络设备'), 'Microsoft Azure Stack Edge', '2023-08-10', '正常', (SELECT LocationID FROM Location WHERE LocationName = '研发部')), +('摄像头H8', (SELECT CategoryID FROM DeviceCategory WHERE CategoryName = '监控设备'), 'Hikvision DS-2CD2T86G1-LU', '2023-09-20', '正常', (SELECT LocationID FROM Location WHERE LocationName = '测试间')), +('扫描仪I9', (SELECT CategoryID FROM DeviceCategory WHERE CategoryName = '办公设备'), 'Canon imageFORMULA DR-C225W', '2023-10-15', '正常', (SELECT LocationID FROM Location WHERE LocationName = '办公楼二层')), +('手机J10', (SELECT CategoryID FROM DeviceCategory WHERE CategoryName = '移动设备'), 'Huawei P40 Pro', '2023-11-05', '正常', (SELECT LocationID FROM Location WHERE LocationName = '前台')); +用户表 +INSERT INTO User (UserName, Password, Role) VALUES +('admin1', 'admin123', 1), -- 管理员 +('maintainer1', 'maintainer123', 2), -- 维护人员 +('maintainer2', 'maintainer123', 2), -- 维护人员 +('techsupport1', 'tech123', 5), -- 技术支持 +('techsupport2', 'tech123', 5), -- 技术支持 +('user3', 'user123', 3), -- 普通用户 +('user4', 'user123', 3), -- 普通用户 +('buyer', 'buyer123', 4), -- 采购员 +('finance', 'finance123', 6), -- 财务人员 +('hr', 'hr123', 7); -- HR +角色表 +INSERT INTO Role (RoleName, PermissionDescription) VALUES +('管理员', '拥有所有权限'), +('维护人员', '可以进行设备维护和状态更新'), +('普通用户', '仅能查看设备状态和历史记录'), +('采购员', '负责设备采购和供应商管理'), +('技术支持', '处理技术问题和支持请求'), +('财务人员', '管理预算和成本'), +('HR', '人力资源管理'), +('项目经理', '项目进度和资源调配'), +('质量保证', '确保设备符合标准'), +('访客', '临时访问权限'); +维护记录表 +INSERT INTO MaintenanceRecord (DeviceID, MaintenanceType, MaintenanceDate, Technician, NextMaintenanceDate, MaintenanceCost,MaintenanceDetails) VALUES +(4, '定期检查', '2023-06-15', '张伟', '2024-06-15', 500.00,'成功'), +(5, '紧急维修', '2023-07-10', '李华', '2024-07-10', 800.00,'成功'), +(6, '硬件更换', '2023-08-20', '王强', '2024-08-20', 1200.00,'成功'), +(4, '软件升级', '2023-09-15', '赵敏', '2024-09-15', 300.00,'成功'), +(5, '耗材更换', '2023-10-05', '孙丽', '2024-10-05', 150.00,'成功'), +(5, '清洁保养', '2023-11-25', '周杰', '2024-11-25', 100.00,'成功'), +(7, '固件更新', '2023-12-10', '吴芳', '2024-12-10', 200.00,'成功'), +(8, '镜头校准', '2024-01-20', '郑浩', '2025-01-20', 250.00,'成功'), +(5, '滚轮更换', '2024-02-15', '陈静', '2025-02-15', 120.00,'成功'), +(7, '电池更换', '2024-03-05', '黄勇', '2025-03-05', 80.00,'成功'); +报废记录表 +INSERT INTO ScrapRecord (DeviceID, ScrapDate, ScrapReason, DisposalMethod) VALUES +((SELECT DeviceID FROM Device WHERE DeviceName = '服务器A1' LIMIT 1), '2024-01-15', '硬件老化,性能不满足需求', '回收利用'), +((SELECT DeviceID FROM Device WHERE DeviceName = '交换机B2' LIMIT 1), '2024-03-10', '损坏无法修复', '专业销毁'), +((SELECT DeviceID FROM Device WHERE DeviceName = '磁盘阵列C3' LIMIT 1), '2024-05-20', '故障频发,维修成本过高', '回收利用'), +((SELECT DeviceID FROM Device WHERE DeviceName = '防火墙D4' LIMIT 1), '2024-07-15', '型号过时,无配件支持', '专业销毁'), +((SELECT DeviceID FROM Device WHERE DeviceName = '打印机E5' LIMIT 1), '2024-09-05', '墨盒泄露,污染严重', '环保处理'), +((SELECT DeviceID FROM Device WHERE DeviceName = '笔记本电脑F6' LIMIT 1), '2024-11-25', '屏幕破裂,维修价值低', '专业销毁'), +((SELECT DeviceID FROM Device WHERE DeviceName = '路由器G7' LIMIT 1), '2025-01-10', '性能不足,影响网络速度', '回收利用'), +((SELECT DeviceID FROM Device WHERE DeviceName = '摄像头H8' LIMIT 1), '2025-03-20', '视频质量差,画面模糊', '环保处理'), +((SELECT DeviceID FROM Device WHERE DeviceName = '扫描仪I9' LIMIT 1), '2025-05-15', '光学组件失效,图像失真', '专业销毁'), +((SELECT DeviceID FROM Device WHERE DeviceName = '手机J10' LIMIT 1), '2025-07-05', '电池膨胀,存在安全隐患', '环保处理'); +供应商表 +INSERT INTO Supplier (SupplierName, ContactPerson, ContactPhone, Address) VALUES +('华为科技有限公司', '李华', '+86-755-12345678', '深圳市南山区科技路'), +('思科系统(中国)有限公司', '张伟', '+86-10-87654321', '北京市朝阳区建国门外大街'), +('联想集团', '王强', '+86-10-98765432', '北京市海淀区上地西路'), +('戴尔科技公司', '赵敏', '+86-21-54321876', '上海市浦东新区世纪大道'), +('惠普发展公司', '孙丽', '+86-21-65432109', '上海市徐汇区漕溪北路'), +('苹果贸易(上海)有限公司', '周杰', '+86-21-12345678', '上海市陆家嘴环路'), +('微软(中国)有限公司', '吴芳', '+86-10-87654321', '北京市朝阳区东三环中路'), +('甲骨文中国', '郑浩', '+86-10-12345678', '北京市海淀区知春路'), +('IBM中国有限公司', '陈静', '+86-10-98765432', '北京市朝阳区光华东里'), +('阿里巴巴集团', '黄勇', '+86-10-12345678', '杭州市滨江区网商路'); +库存位置表  +INSERT INTO Location (LocationName) VALUES +('数据中心A区'), +('数据中心B区'), +('办公楼一层'), +('办公楼二层'), +('实验室'), +('仓库'), +('前台'), +('会议室'), +('研发部'), +('测试间'); +登录记录表 +INSERT INTO UsageRecord (UserID, UsageDate, UsageTime,UsageDesc) VALUES +((SELECT UserID FROM User WHERE UserName = 'admin' LIMIT 1), '2024-01-01', '08:30:00', '登录成功'), +((SELECT UserID FROM User WHERE UserName = 'maintainer1' LIMIT 1), '2024-01-01','09:00:00', '登录成功'), +((SELECT UserID FROM User WHERE UserName = 'techsupport1' LIMIT 1), '2024-01-01','10:00:00', '登录成功'), +((SELECT UserID FROM User WHERE UserName = 'user1' LIMIT 1), '2024-01-01','08:45:00', '登录成功'), +((SELECT UserID FROM User WHERE UserName = 'buyer' LIMIT 1), '2024-01-01','14:00:00', '登录成功'); \ No newline at end of file diff --git a/数据库脚本/数据库创建脚本.txt b/数据库脚本/数据库创建脚本.txt new file mode 100644 index 0000000..89801ee --- /dev/null +++ b/数据库脚本/数据库创建脚本.txt @@ -0,0 +1,92 @@ +-- 设备类别表 +CREATE TABLE DeviceCategory ( + CategoryID INT AUTO_INCREMENT PRIMARY KEY, + CategoryName VARCHAR(50) NOT NULL +); + +-- 库存位置表 +CREATE TABLE Location ( + LocationID INT AUTO_INCREMENT PRIMARY KEY, + LocationName VARCHAR(100) NOT NULL, + LocationDescription TEXT +); + +-- 设备表 +CREATE TABLE Device ( + DeviceID INT AUTO_INCREMENT PRIMARY KEY, + DeviceName VARCHAR(100) NOT NULL, + DeviceType INT NOT NULL, + Model VARCHAR(50) NOT NULL, + PurchaseDate DATE NOT NULL, + Status VARCHAR(20) DEFAULT '正常', + Location INT NOT NULL, + CONSTRAINT fk_device_category FOREIGN KEY (DeviceType) REFERENCES DeviceCategory(CategoryID) ON DELETE CASCADE, + CONSTRAINT fk_device_location FOREIGN KEY (Location) REFERENCES Location(LocationID) ON DELETE CASCADE +); + +-- 供应商表 +CREATE TABLE Supplier ( + SupplierID INT AUTO_INCREMENT PRIMARY KEY, + SupplierName VARCHAR(100) NOT NULL, + ContactPerson VARCHAR(50), + ContactPhone VARCHAR(20), + Address VARCHAR(200) +); + +-- 设备维护记录表 +CREATE TABLE MaintenanceRecord ( + MaintenanceID INT AUTO_INCREMENT PRIMARY KEY, + DeviceID INT NOT NULL, + MaintenanceType VARCHAR(50) NOT NULL, + MaintenanceDate DATE NOT NULL, + Technician VARCHAR(50) NOT NULL, + MaintenanceDetails TEXT, + MaintenanceCost DECIMAL(10, 2), + NextMaintenanceDate DATE, + CONSTRAINT fk_maintenance_device FOREIGN KEY (DeviceID) REFERENCES Device(DeviceID) ON DELETE CASCADE +); + +-- 设备报废记录表 +CREATE TABLE ScrapRecord ( + ScrapID INT AUTO_INCREMENT PRIMARY KEY, + DeviceID INT NOT NULL UNIQUE, + ScrapDate DATE NOT NULL, + ScrapReason TEXT NOT NULL, + DisposalMethod VARCHAR(100) NOT NULL, + CONSTRAINT fk_scrap_device FOREIGN KEY (DeviceID) REFERENCES Device(DeviceID) ON DELETE CASCADE +); + +-- 系统登录使用记录表 +CREATE TABLE UsageRecord ( + UsageID INT AUTO_INCREMENT PRIMARY KEY, + DeviceID INT NOT NULL, + User VARCHAR(50) NOT NULL, + StartTime DATETIME NOT NULL, + EndTime DATETIME NOT NULL, + UsageDuration INT GENERATED ALWAYS AS (TIMESTAMPDIFF(MINUTE, StartTime, EndTime)) STORED, + CONSTRAINT fk_usage_device FOREIGN KEY (DeviceID) REFERENCES Device(DeviceID) ON DELETE CASCADE +); + +-- 角色表 +CREATE TABLE Role ( + RoleID INT AUTO_INCREMENT PRIMARY KEY, + RoleName VARCHAR(50) NOT NULL, + PermissionDescription TEXT +); + +-- 用户表 +CREATE TABLE User ( + UserID INT AUTO_INCREMENT PRIMARY KEY, + UserName VARCHAR(50) NOT NULL UNIQUE, + Password VARCHAR(255) NOT NULL, + Role INT NOT NULL, + CONSTRAINT fk_user_role FOREIGN KEY (Role) REFERENCES Role(RoleID) ON DELETE CASCADE +); + +-- 操作日志表 +CREATE TABLE OperationLog ( + LogID INT AUTO_INCREMENT PRIMARY KEY, + OperationType VARCHAR(50) NOT NULL, + OperationTime TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP, + OperationDescription TEXT +);