From 4fad375676220994162840c43fc4e9230aca3a54 Mon Sep 17 00:00:00 2001 From: DongZeLiang <2746733890@qq.com> Date: Mon, 10 Jun 2024 21:26:43 +0800 Subject: [PATCH] =?UTF-8?q?feat():=20=E5=A2=9E=E5=8A=A0=E8=B4=9F=E8=BD=BD?= =?UTF-8?q?=E6=9C=8D=E5=8A=A1=E9=85=8D=E7=BD=AE=E9=A1=B5=E9=9D=A2?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../com/muyu/vehicle/api/ClientAdmin.java | 16 +++-- .../com/muyu/web/config/ForsetConfig.java | 32 +++++++++ .../com/muyu/web/config/LoadServerConfig.java | 35 ++++++++++ .../properties/ServiceConfigProperties.java | 66 ++++++++++++++++++ .../controller/ServerConfigController.java | 37 ++++++++++ .../muyu/web/controller/VerifyController.java | 15 ++-- .../com/muyu/web/domain/ServerConfig.java | 65 +++++++++++++++++ .../web/domain/model/ServerConfigModel.java | 69 +++++++++++++++++++ .../web/domain/req/ServerConfigEditReq.java | 45 ++++++++++++ .../web/domain/resp/ServerConfigResp.java | 58 ++++++++++++++++ .../muyu/web/mapper/PositionRouteMapper.java | 2 + .../muyu/web/mapper/ServerConfigMapper.java | 15 ++++ .../com/muyu/web/mapper/VehicleMapper.java | 2 + .../muyu/web/service/ServerConfigService.java | 26 +++++++ .../service/impl/ServerConfigServiceImpl.java | 49 +++++++++++++ .../impl/VehicleInstanceServiceImpl.java | 7 +- src/main/resources/application.yml | 18 ++--- src/main/resources/data.sql | 4 ++ src/main/resources/schema.sql | 10 +++ .../static/css/chunk-e4980b30.27dfab27.css | 1 + src/main/resources/static/index.html | 2 +- .../js/{app.4b247cb1.js => app.a7bceb97.js} | 2 +- .../static/js/chunk-e4980b30.83907799.js | 1 + src/test/java/com/AdminTest.java | 4 +- 24 files changed, 548 insertions(+), 33 deletions(-) create mode 100644 src/main/java/com/muyu/web/config/ForsetConfig.java create mode 100644 src/main/java/com/muyu/web/config/LoadServerConfig.java create mode 100644 src/main/java/com/muyu/web/config/properties/ServiceConfigProperties.java create mode 100644 src/main/java/com/muyu/web/controller/ServerConfigController.java create mode 100644 src/main/java/com/muyu/web/domain/ServerConfig.java create mode 100644 src/main/java/com/muyu/web/domain/model/ServerConfigModel.java create mode 100644 src/main/java/com/muyu/web/domain/req/ServerConfigEditReq.java create mode 100644 src/main/java/com/muyu/web/domain/resp/ServerConfigResp.java create mode 100644 src/main/java/com/muyu/web/mapper/ServerConfigMapper.java create mode 100644 src/main/java/com/muyu/web/service/ServerConfigService.java create mode 100644 src/main/java/com/muyu/web/service/impl/ServerConfigServiceImpl.java create mode 100644 src/main/resources/static/css/chunk-e4980b30.27dfab27.css rename src/main/resources/static/js/{app.4b247cb1.js => app.a7bceb97.js} (65%) create mode 100644 src/main/resources/static/js/chunk-e4980b30.83907799.js diff --git a/src/main/java/com/muyu/vehicle/api/ClientAdmin.java b/src/main/java/com/muyu/vehicle/api/ClientAdmin.java index e6daf2c..616e20d 100644 --- a/src/main/java/com/muyu/vehicle/api/ClientAdmin.java +++ b/src/main/java/com/muyu/vehicle/api/ClientAdmin.java @@ -4,6 +4,7 @@ import com.dtflys.forest.annotation.BaseRequest; import com.dtflys.forest.annotation.JSONBody; import com.dtflys.forest.annotation.Post; import com.muyu.web.common.Result; +import com.muyu.web.config.properties.ServiceConfigProperties; import com.muyu.web.domain.model.MqttServerModel; import com.muyu.vehicle.api.req.VehicleConnectionReq; @@ -12,11 +13,16 @@ import com.muyu.vehicle.api.req.VehicleConnectionReq; * @description: 客户端的管理 * @Date 2023-11-28 上午 10:20 */ -@BaseRequest( - baseURL = "${adminHost}" -) public interface ClientAdmin { - @Post("${adminTopicUri}") - public Result vehicleConnection(@JSONBody VehicleConnectionReq vehicleConnectionReq); + /** + * 获取车辆负载地址 + * @param serviceConfigProperties 负载配置 + * @param vehicleConnectionReq 请求信息 + * @return 响应结果 + */ + @Post( + url = "{vehicleLoadUrl}" + ) + public Result getVehicleLoadAddr (ServiceConfigProperties serviceConfigProperties, @JSONBody VehicleConnectionReq vehicleConnectionReq); } diff --git a/src/main/java/com/muyu/web/config/ForsetConfig.java b/src/main/java/com/muyu/web/config/ForsetConfig.java new file mode 100644 index 0000000..5e6e522 --- /dev/null +++ b/src/main/java/com/muyu/web/config/ForsetConfig.java @@ -0,0 +1,32 @@ +package com.muyu.web.config; + +import com.dtflys.forest.annotation.BindingVar; +import com.dtflys.forest.reflection.ForestMethod; +import com.muyu.web.config.properties.ServiceConfigProperties; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.context.annotation.Configuration; +import org.springframework.stereotype.Service; + +/** + * @Author: DongZeLiang + * @date: 2024/6/10 + * @Description: Forest配置类 + * @Version: 1.0 + */ +@Service("forsetConfig") +public class ForsetConfig { + + @Autowired + private ServiceConfigProperties serviceConfigProperties; + + /** + * 使用 @BindingVar 注解 + * 将变量名 baseUrl 和一段方法代码绑定 + * 该方法可以有一个 ForestMethod 类型的参数 + */ + @BindingVar("vehicleLoadUrl") + public String getBaseUrl() { + return serviceConfigProperties.getLoadReqUrl(); + } + +} diff --git a/src/main/java/com/muyu/web/config/LoadServerConfig.java b/src/main/java/com/muyu/web/config/LoadServerConfig.java new file mode 100644 index 0000000..49d5a0e --- /dev/null +++ b/src/main/java/com/muyu/web/config/LoadServerConfig.java @@ -0,0 +1,35 @@ +package com.muyu.web.config; + +import com.muyu.web.config.properties.ServiceConfigProperties; +import com.muyu.web.domain.ServerConfig; +import com.muyu.web.domain.model.ServerConfigModel; +import com.muyu.web.service.ServerConfigService; +import lombok.AllArgsConstructor; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.context.properties.ConfigurationProperties; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; + +/** + * @Author: DongZeLiang + * @date: 2024/6/10 + * @Description: 负载服务器配置 + * @Version: 1.0 + */ +@Configuration +public class LoadServerConfig { + + /** + * 静态引入,解决循环依赖的问题 + */ + private static final ServiceConfigProperties serviceConfigProperties = new ServiceConfigProperties(); + + @Bean + public ServiceConfigProperties serverConfig(ServerConfigService serverConfigService) { + return serviceConfigProperties.modelToProperties(serverConfigService.get()); + } + + public static void modelToProperties(ServerConfigModel serverConfigModel){ + serviceConfigProperties.modelToProperties(serverConfigModel); + } +} diff --git a/src/main/java/com/muyu/web/config/properties/ServiceConfigProperties.java b/src/main/java/com/muyu/web/config/properties/ServiceConfigProperties.java new file mode 100644 index 0000000..7dc977e --- /dev/null +++ b/src/main/java/com/muyu/web/config/properties/ServiceConfigProperties.java @@ -0,0 +1,66 @@ +package com.muyu.web.config.properties; + +import com.muyu.web.domain.model.ServerConfigModel; +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + +/** + * @Author: DongZeLiang + * @date: 2024/6/10 + * @Description: 服务器配置类 + * @Version: 1.0 + */ +@Data +@Builder +@NoArgsConstructor +@AllArgsConstructor +public class ServiceConfigProperties { + + /** + * 主机地址 + */ + private String host; + /** + * 端口号 + */ + private String port; + /** + * 负载地址 + */ + private String loadUrl; + /** + * 负载请求格式化地址 + */ + private String loadReqUrl; + /** + * 默认MQTT地址 + */ + private String mqttAddr; + /** + * 默认MQTT主题 + */ + private String mqttTopic; + /** + * 默认MQTT交付级别 + */ + private Integer mqttQos; + + /** + * 模型构建配置 + * @param serverConfigModel 配置模型对象 + * @return 配置对象 + */ + public ServiceConfigProperties modelToProperties(ServerConfigModel serverConfigModel) { + this.host = serverConfigModel.getHost(); + this.port = serverConfigModel.getPort(); + this.loadUrl = serverConfigModel.getLoadUrl(); + this.mqttAddr = serverConfigModel.getDefaultMqttAddr(); + this.mqttTopic = serverConfigModel.getDefaultMqttTopic(); + this.mqttQos = serverConfigModel.getDefaultMqttQos(); + this.loadReqUrl = String.format("http://%s:%s%s", host, port, loadUrl.startsWith("/") ? loadUrl : "/" + loadUrl); + return this; + } + +} diff --git a/src/main/java/com/muyu/web/controller/ServerConfigController.java b/src/main/java/com/muyu/web/controller/ServerConfigController.java new file mode 100644 index 0000000..089796f --- /dev/null +++ b/src/main/java/com/muyu/web/controller/ServerConfigController.java @@ -0,0 +1,37 @@ +package com.muyu.web.controller; + +import com.muyu.web.common.Result; +import com.muyu.web.domain.model.ServerConfigModel; +import com.muyu.web.domain.req.ServerConfigEditReq; +import com.muyu.web.domain.resp.ServerConfigResp; +import com.muyu.web.service.ServerConfigService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.*; + +/** + * @Author: DongZeLiang + * @date: 2024/6/10 + * @Description: 服务器配置控制层 + * @Version: 1.0 + */ +@RestController +@RequestMapping("/vehicle/server/config") +public class ServerConfigController { + + @Autowired + private ServerConfigService serverConfigService; + + @GetMapping + public Result get() { + ServerConfigModel serverConfigModel = serverConfigService.get(); + return Result.success(ServerConfigResp.modelBuild(serverConfigModel)); + } + + @PutMapping + public Result edit(@RequestBody ServerConfigEditReq serverConfigReq) { + serverConfigService.edit( + ServerConfigModel.editReqBuild(serverConfigReq) + ); + return Result.success(); + } +} diff --git a/src/main/java/com/muyu/web/controller/VerifyController.java b/src/main/java/com/muyu/web/controller/VerifyController.java index 23e3d79..dc42ea5 100644 --- a/src/main/java/com/muyu/web/controller/VerifyController.java +++ b/src/main/java/com/muyu/web/controller/VerifyController.java @@ -1,8 +1,9 @@ package com.muyu.web.controller; import com.muyu.web.common.Result; +import com.muyu.web.config.properties.ServiceConfigProperties; import com.muyu.web.domain.model.MqttServerModel; -import org.springframework.beans.factory.annotation.Value; +import lombok.AllArgsConstructor; import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; @@ -14,14 +15,10 @@ import org.springframework.web.bind.annotation.RestController; */ @RestController @RequestMapping("/verify") +@AllArgsConstructor public class VerifyController { - - @Value("${mqtt.server.host}") - private String broker; - - @Value("${mqtt.server.topic}") - private String topic; + private final ServiceConfigProperties serviceConfigProperties; /** @@ -32,8 +29,8 @@ public class VerifyController { public Result vehicleConnection(){ return Result.success( MqttServerModel.builder() - .broker(broker) - .topic(topic) + .broker(serviceConfigProperties.getMqttAddr()) + .topic(serviceConfigProperties.getMqttTopic()) .build() ); } diff --git a/src/main/java/com/muyu/web/domain/ServerConfig.java b/src/main/java/com/muyu/web/domain/ServerConfig.java new file mode 100644 index 0000000..c8734da --- /dev/null +++ b/src/main/java/com/muyu/web/domain/ServerConfig.java @@ -0,0 +1,65 @@ +package com.muyu.web.domain; + +import com.baomidou.mybatisplus.annotation.TableName; +import com.muyu.web.domain.model.ServerConfigModel; +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + +import java.util.function.Supplier; + +/** + * @Author: DongZeLiang + * @date: 2024/6/10 + * @Description: 服务器配置 + * @Version: 1.0 + */ +@Data +@Builder +@NoArgsConstructor +@AllArgsConstructor +@TableName(value = "server_config") +public class ServerConfig { + + /** + * 主键 + */ + private Integer id; + /** + * 主机地址 + */ + private String host; + /** + * 端口号 + */ + private String port; + /** + * 负载地址 + */ + private String loadUrl; + /** + * 默认MQTT地址 + */ + private String defaultMqttAddr; + /** + * 默认MQTT主题 + */ + private String defaultMqttTopic; + /** + * 默认MQTT交付级别 + */ + private Integer defaultMqttQos; + + public static ServerConfig modeBuild (ServerConfigModel serverConfigModel, Supplier idKey) { + return builder() + .id(idKey.get()) + .host(serverConfigModel.getHost()) + .port(serverConfigModel.getPort()) + .loadUrl(serverConfigModel.getLoadUrl()) + .defaultMqttAddr(serverConfigModel.getDefaultMqttAddr()) + .defaultMqttTopic(serverConfigModel.getDefaultMqttTopic()) + .defaultMqttQos(serverConfigModel.getDefaultMqttQos()) + .build(); + } +} diff --git a/src/main/java/com/muyu/web/domain/model/ServerConfigModel.java b/src/main/java/com/muyu/web/domain/model/ServerConfigModel.java new file mode 100644 index 0000000..6c5f274 --- /dev/null +++ b/src/main/java/com/muyu/web/domain/model/ServerConfigModel.java @@ -0,0 +1,69 @@ +package com.muyu.web.domain.model; + +import com.baomidou.mybatisplus.annotation.TableName; +import com.muyu.web.domain.ServerConfig; +import com.muyu.web.domain.req.ServerConfigEditReq; +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + +/** + * @Author: DongZeLiang + * @date: 2024/6/10 + * @Description: 服务器配置业务模型 + * @Version: 1.0 + */ +@Data +@Builder +@NoArgsConstructor +@AllArgsConstructor +public class ServerConfigModel { + + /** + * 主机地址 + */ + private String host; + /** + * 端口号 + */ + private String port; + /** + * 负载地址 + */ + private String loadUrl; + /** + * 默认MQTT地址 + */ + private String defaultMqttAddr; + /** + * 默认MQTT主题 + */ + private String defaultMqttTopic; + /** + * 默认MQTT交付级别 + */ + private Integer defaultMqttQos; + + public static ServerConfigModel serverConfigBuild (ServerConfig serverConfig) { + return builder() + .host(serverConfig.getHost().trim()) + .port(serverConfig.getPort()) + .loadUrl(serverConfig.getLoadUrl().trim()) + .defaultMqttAddr(serverConfig.getDefaultMqttAddr().trim()) + .defaultMqttTopic(serverConfig.getDefaultMqttTopic().trim()) + .defaultMqttQos(serverConfig.getDefaultMqttQos()) + .build(); + } + + public static ServerConfigModel editReqBuild (ServerConfigEditReq serverConfigReq) { + return builder() + .host(serverConfigReq.getHost().trim()) + .port(serverConfigReq.getPort()) + .loadUrl(serverConfigReq.getLoadUrl().trim()) + .defaultMqttAddr(serverConfigReq.getDefaultMqttAddr().trim()) + .defaultMqttTopic(serverConfigReq.getDefaultMqttTopic().trim()) + .defaultMqttQos(serverConfigReq.getDefaultMqttQos()) + .build(); + } +} diff --git a/src/main/java/com/muyu/web/domain/req/ServerConfigEditReq.java b/src/main/java/com/muyu/web/domain/req/ServerConfigEditReq.java new file mode 100644 index 0000000..ecf4268 --- /dev/null +++ b/src/main/java/com/muyu/web/domain/req/ServerConfigEditReq.java @@ -0,0 +1,45 @@ +package com.muyu.web.domain.req; + +import com.muyu.web.domain.model.ServerConfigModel; +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + +/** + * @Author: DongZeLiang + * @date: 2024/6/10 + * @Description: 修改服务器配置请求对象 + * @Version: 1.0 + */ +@Data +@Builder +@NoArgsConstructor +@AllArgsConstructor +public class ServerConfigEditReq { + + /** + * 主机地址 + */ + private String host; + /** + * 端口号 + */ + private String port; + /** + * 负载地址 + */ + private String loadUrl; + /** + * 默认MQTT地址 + */ + private String defaultMqttAddr; + /** + * 默认MQTT主题 + */ + private String defaultMqttTopic; + /** + * 默认MQTT交付级别 + */ + private Integer defaultMqttQos; +} diff --git a/src/main/java/com/muyu/web/domain/resp/ServerConfigResp.java b/src/main/java/com/muyu/web/domain/resp/ServerConfigResp.java new file mode 100644 index 0000000..1a98ccc --- /dev/null +++ b/src/main/java/com/muyu/web/domain/resp/ServerConfigResp.java @@ -0,0 +1,58 @@ +package com.muyu.web.domain.resp; + +import com.baomidou.mybatisplus.annotation.TableName; +import com.muyu.web.domain.model.ServerConfigModel; +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + +/** + * @Author: DongZeLiang + * @date: 2024/6/10 + * @Description: 服务器配置返回值 + * @Version: 1.0 + */ +@Data +@Builder +@NoArgsConstructor +@AllArgsConstructor +public class ServerConfigResp { + + /** + * 主机地址 + */ + private String host; + /** + * 端口号 + */ + private String port; + /** + * 负载地址 + */ + private String loadUrl; + /** + * 默认MQTT地址 + */ + private String defaultMqttAddr; + /** + * 默认MQTT主题 + */ + private String defaultMqttTopic; + /** + * 默认MQTT交付级别 + */ + private Integer defaultMqttQos; + + + public static ServerConfigResp modelBuild(ServerConfigModel serverConfigModel){ + return builder() + .host(serverConfigModel.getHost()) + .port(serverConfigModel.getPort()) + .loadUrl(serverConfigModel.getLoadUrl()) + .defaultMqttAddr(serverConfigModel.getDefaultMqttAddr()) + .defaultMqttTopic(serverConfigModel.getDefaultMqttTopic()) + .defaultMqttQos(serverConfigModel.getDefaultMqttQos()) + .build(); + } +} diff --git a/src/main/java/com/muyu/web/mapper/PositionRouteMapper.java b/src/main/java/com/muyu/web/mapper/PositionRouteMapper.java index 1128545..80be0a6 100644 --- a/src/main/java/com/muyu/web/mapper/PositionRouteMapper.java +++ b/src/main/java/com/muyu/web/mapper/PositionRouteMapper.java @@ -2,11 +2,13 @@ package com.muyu.web.mapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.muyu.web.domain.PositionRouteInfo; +import org.apache.ibatis.annotations.Mapper; /** * @author DongZl * @description: 轨迹路径 mapper * @Date 2023-11-20 上午 09:32 */ +@Mapper public interface PositionRouteMapper extends BaseMapper { } diff --git a/src/main/java/com/muyu/web/mapper/ServerConfigMapper.java b/src/main/java/com/muyu/web/mapper/ServerConfigMapper.java new file mode 100644 index 0000000..b66943d --- /dev/null +++ b/src/main/java/com/muyu/web/mapper/ServerConfigMapper.java @@ -0,0 +1,15 @@ +package com.muyu.web.mapper; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.muyu.web.domain.ServerConfig; +import org.apache.ibatis.annotations.Mapper; + +/** + * @Author: DongZeLiang + * @date: 2024/6/10 + * @Description: 服务器配置Mapper + * @Version: 1.0 + */ +@Mapper +public interface ServerConfigMapper extends BaseMapper { +} diff --git a/src/main/java/com/muyu/web/mapper/VehicleMapper.java b/src/main/java/com/muyu/web/mapper/VehicleMapper.java index 307b395..c393170 100644 --- a/src/main/java/com/muyu/web/mapper/VehicleMapper.java +++ b/src/main/java/com/muyu/web/mapper/VehicleMapper.java @@ -2,6 +2,7 @@ package com.muyu.web.mapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.muyu.web.domain.Vehicle; +import org.apache.ibatis.annotations.Mapper; /** *

@@ -11,6 +12,7 @@ import com.muyu.web.domain.Vehicle; * @author DongZeLiang * @since 2022-07-05 */ +@Mapper public interface VehicleMapper extends BaseMapper { } diff --git a/src/main/java/com/muyu/web/service/ServerConfigService.java b/src/main/java/com/muyu/web/service/ServerConfigService.java new file mode 100644 index 0000000..46e8beb --- /dev/null +++ b/src/main/java/com/muyu/web/service/ServerConfigService.java @@ -0,0 +1,26 @@ +package com.muyu.web.service; + +import com.baomidou.mybatisplus.extension.service.IService; +import com.muyu.web.domain.ServerConfig; +import com.muyu.web.domain.model.ServerConfigModel; + +/** + * @Author: DongZeLiang + * @date: 2024/6/10 + * @Description: 服务器配置业务层 + * @Version: 1.0 + */ +public interface ServerConfigService extends IService { + + /** + * 获取配置模型 + * @return 配置模型 + */ + ServerConfigModel get (); + + /** + * 修改配置 + * @param serverConfigModel 配置模型 + */ + void edit (ServerConfigModel serverConfigModel); +} diff --git a/src/main/java/com/muyu/web/service/impl/ServerConfigServiceImpl.java b/src/main/java/com/muyu/web/service/impl/ServerConfigServiceImpl.java new file mode 100644 index 0000000..d59d4ee --- /dev/null +++ b/src/main/java/com/muyu/web/service/impl/ServerConfigServiceImpl.java @@ -0,0 +1,49 @@ +package com.muyu.web.service.impl; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.muyu.web.config.LoadServerConfig; +import com.muyu.web.config.properties.ServiceConfigProperties; +import com.muyu.web.domain.ServerConfig; +import com.muyu.web.domain.model.ServerConfigModel; +import com.muyu.web.service.ServerConfigService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +/** + * @Author: DongZeLiang + * @date: 2024/6/10 + * @Description: 服务器配置业务实现层 + * @Version: 1.0 + */ +@Service +public class ServerConfigServiceImpl extends ServiceImpl, ServerConfig> implements ServerConfigService { + + /** + * 配置Key + */ + private final Integer key = 1; + + /** + * 获取配置模型 + * + * @return 配置模型 + */ + @Override + public ServerConfigModel get () { + ServerConfig serverConfig = getById(key); + return ServerConfigModel.serverConfigBuild(serverConfig); + } + + /** + * 修改配置 + * + * @param serverConfigModel 配置模型 + */ + @Override + public void edit (ServerConfigModel serverConfigModel) { + ServerConfig serverConfig = ServerConfig.modeBuild(serverConfigModel, () -> key); + updateById(serverConfig); + LoadServerConfig.modelToProperties(serverConfigModel); + } +} diff --git a/src/main/java/com/muyu/web/service/impl/VehicleInstanceServiceImpl.java b/src/main/java/com/muyu/web/service/impl/VehicleInstanceServiceImpl.java index e3a5bf2..ec9ee59 100644 --- a/src/main/java/com/muyu/web/service/impl/VehicleInstanceServiceImpl.java +++ b/src/main/java/com/muyu/web/service/impl/VehicleInstanceServiceImpl.java @@ -2,6 +2,7 @@ package com.muyu.web.service.impl; import com.muyu.web.common.PageList; import com.muyu.web.common.Result; +import com.muyu.web.config.properties.ServiceConfigProperties; import com.muyu.web.domain.Vehicle; import com.muyu.web.domain.model.MqttServerModel; import com.muyu.web.domain.model.PositionModel; @@ -46,6 +47,9 @@ public class VehicleInstanceServiceImpl implements VehicleInstanceService { @Autowired private ClientAdmin clientAdmin; + @Autowired + private ServiceConfigProperties serviceConfigProperties; + /** * 根据车辆生成车辆实例 * @@ -111,7 +115,8 @@ public class VehicleInstanceServiceImpl implements VehicleInstanceService { .userName(MD5Util.encrypted(vin+timestamp)) .nonce(MD5Util.encrypted(UUID.randomUUID().toString().replace("-", ""))) .build(); - Result result = clientAdmin.vehicleConnection(connectionReq); + // 从负载均衡服务器获取配置信息 + Result result = clientAdmin.getVehicleLoadAddr(serviceConfigProperties, connectionReq); if (result.getCode() != 200){ log.error("车辆:[{}],申请上线异常:[{}]", vin, result.getMsg()); throw new RuntimeException("远程服务器没有【"+vin+"】车辆"); diff --git a/src/main/resources/application.yml b/src/main/resources/application.yml index f99f5b8..008f7da 100644 --- a/src/main/resources/application.yml +++ b/src/main/resources/application.yml @@ -1,6 +1,8 @@ server: port: 81 spring: + main: + allow-circular-references: true mvc: static-path-pattern: /static/** @@ -17,7 +19,7 @@ spring: enabled: true settings: # 开启h2 console 跟踪 方便调试 默认 false - trace: true + trace: false # 允许console 远程访问 默认false web-allow-others: true # h2 访问路径上下文 @@ -78,16 +80,4 @@ forest: max-connections: 1000 # 连接池最大连接数 connect-timeout: 3000 # 连接超时时间,单位为毫秒 read-timeout: 3000 # 数据读取超时时间,单位为毫秒 - variables: - adminHost: ${mqtt.admin.host} - adminTopicUri: ${mqtt.admin.topic-uri} - log-enabled: false - -# 服务器配置 -mqtt: - server: - host: tcp://fluxmq.muyu.icu:1883 - topic: test1 - admin: - host: http://127.0.0.1:${server.port} - topic-uri: /verify/vehicleConnection + log-enabled: true diff --git a/src/main/resources/data.sql b/src/main/resources/data.sql index 3058df6..547eba0 100644 --- a/src/main/resources/data.sql +++ b/src/main/resources/data.sql @@ -7,3 +7,7 @@ insert into route_info (id, name, data, create_time) values (0, '路径1', '["116.664053,39.531791","116.66438,39.53199","116.665067,39.532478","116.66556,39.532879","116.66607,39.533219","116.666268,39.53343","116.666789,39.533794","116.668,39.5347","116.669202,39.535577","116.669964,39.536214","116.670248,39.536293","116.670656,39.536289","116.67087,39.536541","116.670799,39.536898","116.670568,39.537064","116.67038,39.537432","116.670327,39.538086","116.670235,39.538996","116.670152,39.539968","116.670152,39.539968","116.670169,39.540365","116.670093,39.541209","116.670045,39.541697","116.669949,39.542748","116.669911,39.542963","116.669884,39.543542","116.669857,39.54377","116.669841,39.544039","116.669811,39.54439","116.669789,39.544621","116.669741,39.545126","116.669714,39.545593","116.669698,39.545804","116.669656,39.546451","116.66964,39.546662","116.669527,39.547166","116.669626,39.547133","116.670103,39.547179","116.670484,39.547216","116.670994,39.547257","116.671809,39.547315","116.67263,39.547386","116.673089,39.547415","116.673373,39.547498","116.674065,39.547547","116.675176,39.547643","116.675961,39.547703","116.676583,39.547757","116.677393,39.547828","116.678005,39.547881","116.67859,39.547914","116.679089,39.547931","116.679228,39.54791","116.679829,39.547964","116.680703,39.548039","116.681186,39.54808","116.681637,39.548113","116.682216,39.548163","116.682935,39.548221","116.683402,39.548262","116.683627,39.548324","116.684132,39.548379","116.685092,39.548454","116.686444,39.548582","116.686809,39.548611","116.687739,39.548685","116.688726,39.548785","116.689536,39.548843","116.689927,39.548863","116.690206,39.548888","116.690732,39.548934","116.691455,39.549","116.692249,39.54907","116.692651,39.549091","116.693086,39.549128","116.693665,39.549194","116.69389,39.549219","116.694598,39.549273","116.695784,39.549397","116.696245,39.549376","116.69698,39.549446","116.697189,39.549459","116.697619,39.549521","116.697983,39.549525","116.69874,39.549579","116.698911,39.549653","116.699426,39.54967","116.699673,39.549711","116.700462,39.549786","116.700923,39.54981","116.701277,39.549852","116.701695,39.549889","116.702157,39.549914","116.702543,39.549963","116.702881,39.549988","116.703423,39.550021","116.704013,39.550083","116.704624,39.550112","116.704603,39.549992","116.704614,39.549798","116.704651,39.549463","116.704704,39.549051","116.704768,39.548761","116.704795,39.548298","116.704913,39.547417","116.704972,39.546953","116.705095,39.545857","116.705229,39.544898","116.705235,39.544658","116.70531,39.544062","116.705422,39.543483","116.70546,39.542966","116.705503,39.542486","116.705658,39.541373","116.705707,39.540992","116.70576,39.54057","116.705793,39.540302","116.705857,39.53983","116.705905,39.539334","116.705948,39.538978","116.70598,39.538667","116.70605,39.538183","116.706098,39.537828","116.706136,39.537546","116.706195,39.537071","116.706291,39.536272","116.706383,39.535763","116.706426,39.535308","116.706458,39.53506","116.706533,39.534506","116.706565,39.53422","116.706672,39.533355","116.70671,39.533029","116.706747,39.532664","116.706817,39.532234","116.706876,39.531696","116.706958,39.531083","116.707011,39.530512","116.707049,39.530239","116.707103,39.529871","116.707156,39.529321","116.707215,39.528957","116.707247,39.528717","116.70729,39.528427","116.707344,39.528022","116.707382,39.527604","116.707419,39.527413","116.70743,39.52724","116.707451,39.527066","116.707489,39.526784","116.707542,39.52635","116.707607,39.525804","116.707628,39.525688","116.707671,39.525245","116.707666,39.525307","116.707671,39.525278","116.707741,39.524786","116.707781,39.524421","116.707797,39.524214","116.70784,39.523887","116.707867,39.523734","116.707902,39.523415","116.707961,39.52308","116.707993,39.522645","116.708047,39.522261","116.708084,39.521954","116.708138,39.521553","116.708159,39.521387","116.708202,39.521023","116.708245,39.520725","116.708288,39.520407","116.708326,39.520022","116.708422,39.5195","116.708449,39.519045","116.708508,39.518607","116.708556,39.518259","116.708615,39.517589","116.708663,39.517328","116.708706,39.517017","116.708749,39.516682","116.708819,39.516322","116.708835,39.516086","116.708905,39.515569","116.708937,39.51547","116.708567,39.515474","116.708175,39.515482","116.707703,39.515486","116.707414,39.515482","116.706797,39.515495","116.706303,39.515482","116.7053,39.515507","116.704613,39.515515","116.704369,39.515242","116.704095,39.514969","116.703849,39.514708","116.703811,39.5147","116.703559,39.514431","116.703232,39.514083","116.702904,39.513727","116.702593,39.513425","116.702298,39.513119","116.70203,39.512834","116.701628,39.512519","116.70129,39.512349","116.701102,39.512411","116.700635,39.512457","116.700201,39.512486","116.699965,39.512511","116.699428,39.512565","116.699101,39.512602","116.698709,39.512631","116.698034,39.512709","116.6968,39.512807","116.695663,39.51294","116.694193,39.513047","116.693013,39.513188","116.692734,39.513221","116.691833,39.513263","116.690739,39.513329","116.690277,39.513279","116.689773,39.513329","116.688732,39.513296","116.687828,39.51328","116.687308,39.513255","116.686991,39.513242","116.686149,39.513205","116.685554,39.51318","116.685103,39.513193","116.684626,39.51316","116.684164,39.513156","116.683306,39.513118","116.682748,39.513081","116.681793,39.513065","116.6813,39.513048","116.68049,39.513015","116.679074,39.512957","116.678478,39.512903","116.67799,39.512878","116.677352,39.512858","116.676831,39.512816","116.676204,39.512783","116.67556,39.51275","116.675088,39.512738","116.674772,39.512696","116.67446,39.512684","116.674017,39.512672","116.673818,39.512663","116.67326,39.512618","116.673013,39.512601","116.672434,39.512585","116.672032,39.512556","116.671291,39.51251","116.670685,39.512473","116.67031,39.512473","116.66994,39.512436","116.669398,39.512432","116.668877,39.512403","116.66855,39.512353","116.668207,39.51234","116.667746,39.512316","116.667086,39.512274","116.666592,39.512225","116.666378,39.512249","116.666313,39.512502","116.666286,39.512738","116.666244,39.512982","116.666227,39.513156","116.666217,39.513379","116.666125,39.513942","116.666072,39.514381","116.666034,39.514579","116.666024,39.514815","116.665965,39.5152","116.665889,39.51573","116.665841,39.51609","116.665761,39.51664","116.665739,39.516897","116.665682,39.517227","116.665671,39.517318","116.66566,39.517463","116.665607,39.517802","116.665574,39.518063","116.665526,39.51851","116.665478,39.5188","116.665435,39.519015","116.665419,39.519201","116.665378,39.519652","116.665335,39.519917","116.665314,39.520128","116.66526,39.5205","116.665223,39.520707","116.665115,39.521585","116.665083,39.521775","116.665035,39.522081","116.665013,39.522251","116.664992,39.522458","116.664951,39.52279","116.664892,39.523175","116.664844,39.52358","116.664737,39.524362","116.664673,39.524714","116.664646,39.52502","116.66464,39.525181","116.664576,39.525508","116.664538,39.525802","116.664479,39.52622","116.664463,39.52639","116.664426,39.526688","116.664378,39.527058","116.664319,39.527455","116.664319,39.527455","116.664248,39.527948","116.664189,39.528312","116.664136,39.528788","116.664114,39.529036","116.664071,39.529276","116.664023,39.529619","116.66398,39.529934","116.663913,39.530326","116.663865,39.530674","116.663817,39.531071","116.663817,39.531071","116.663994,39.531687","116.664069,39.531778","116.664069,39.531778","116.664069,39.531778","116.664069,39.531778","116.664069,39.531778","116.664069,39.531778","116.664069,39.531778","116.664069,39.531778","116.664069,39.531778","116.664069,39.531778","116.664069,39.531778","116.664069,39.531778","116.664069,39.531778","116.664069,39.531778","116.664069,39.531778","116.664069,39.531778","116.664069,39.531778","116.664069,39.531778","116.664069,39.531778","116.664069,39.531778","116.664069,39.531778","116.664069,39.531778","116.664069,39.531778","116.664069,39.531778","116.664069,39.531778","116.664069,39.531778","116.664069,39.531778","116.664069,39.531778","116.664069,39.531778","116.664069,39.531778","116.664069,39.531778","116.664069,39.531778","116.664069,39.531778","116.664069,39.531778","116.664069,39.531778","116.664069,39.531778","116.664069,39.531778","116.664069,39.531778"]', CURRENT_TIMESTAMP()), (1, '路径2', '["116.655091,39.52091","116.65558,39.520922","116.655987,39.520951","116.656373,39.520997","116.657178,39.521063","116.657629,39.521121","116.658181,39.521146","116.658478,39.521163","116.658977,39.521209","116.659444,39.521254","116.66005,39.521292","116.660699,39.521345","116.660908,39.521391","116.661107,39.521378","116.661327,39.521407","116.662099,39.521467","116.662887,39.521521","116.663318,39.521562","116.664193,39.521637","116.664836,39.52167","116.665062,39.521732","116.665357,39.521765","116.66585,39.521798","116.666397,39.521835","116.667014,39.521889","116.667513,39.521918","116.668173,39.521964","116.668479,39.521997","116.669047,39.522042","116.669439,39.522075","116.6699,39.522121","116.67019,39.522129","116.670606,39.522187","116.671382,39.522247","116.671876,39.522267","116.672117,39.522226","116.672595,39.522271","116.673019,39.522321","116.673373,39.522334","116.673662,39.522363","116.674054,39.5224","116.674421,39.52242","116.67507,39.522474","116.675569,39.522524","116.675934,39.522557","116.67661,39.522615","116.67706,39.522644","116.677827,39.522706","116.678466,39.522764","116.67889,39.522793","116.679887,39.522867","116.680172,39.522904","116.680263,39.52295","116.680553,39.522962","116.680891,39.523008","116.681159,39.523016","116.681604,39.523053","116.682135,39.523107","116.682419,39.523107","116.682983,39.523095","116.683385,39.523012","116.6836,39.522967","116.6839,39.522892","116.684066,39.522847","116.68434,39.522797","116.684522,39.522751","116.684833,39.522681","116.685225,39.522615","116.685499,39.522532","116.685965,39.522499","116.686421,39.522557","116.686888,39.522727","116.687162,39.522875","116.687162,39.522875","116.688342,39.523513","116.689028,39.523856","116.689259,39.523984","116.690176,39.52458","116.690546,39.524874","116.691206,39.525453","116.691582,39.525755","116.691684,39.525863","116.691898,39.525747","116.692113,39.525909","116.692129,39.526128","116.692424,39.526149","116.692783,39.526194","116.693207,39.526231","116.693745,39.52626","116.694619,39.526343","116.695027,39.52638","116.695397,39.526397","116.695671,39.526409","116.695848,39.526434","116.696406,39.526471","116.697022,39.526537","116.698138,39.526641","116.698476,39.526657","116.698728,39.526678","116.699319,39.526741","116.700076,39.526799","116.700526,39.526828","116.700918,39.526861","116.701401,39.526907","116.702071,39.526956","116.702908,39.527031","116.703359,39.527068","116.704072,39.527109","116.704571,39.527155","116.705118,39.527192","116.705698,39.52725","116.706196,39.527287","116.706899,39.527345","116.707339,39.527378","116.707607,39.527416","116.708085,39.527457","116.708594,39.527503","116.708916,39.527536","116.709125,39.527565","116.709528,39.527606","116.70986,39.527639","116.710059,39.527635","116.710322,39.52766","116.71059,39.527689","116.711153,39.527738","116.711813,39.527784","116.712269,39.527821","116.712843,39.527858","116.713406,39.52791","116.713991,39.527939","116.714447,39.528017","116.715144,39.528071","116.715445,39.528104","116.715911,39.52817","116.716292,39.528212","116.716673,39.528257","116.717194,39.52834","116.717692,39.52839","116.717891,39.528406","116.718272,39.52846","116.718604,39.528497","116.718878,39.52853","116.719663,39.528619","116.720114,39.528648","116.720656,39.528701","116.720951,39.52871","116.721181,39.528735","116.721417,39.528743","116.722099,39.528797","116.722474,39.528792","116.722936,39.528855","116.723429,39.528871","116.723783,39.528892","116.724255,39.528925","116.724975,39.528979","116.725426,39.529008","116.726032,39.529049","116.726692,39.529107","116.727078,39.529165","116.72762,39.529214","116.727893,39.529247","116.728478,39.52926","116.729304,39.529318","116.730254,39.529388","116.73072,39.529425","116.731112,39.529463","116.731563,39.529487","116.732185,39.529545","116.732872,39.529591","116.733483,39.529653","116.733907,39.529678","116.734481,39.529715","116.734873,39.529752","116.734873,39.529752","116.735385,39.529765","116.736613,39.529844","116.737772,39.529902","116.738426,39.529935","116.738823,39.529955","116.739167,39.529976","116.739564,39.530013","116.740159,39.5301","116.740909,39.530197","116.741252,39.530239","116.741649,39.530313","116.742319,39.530404","116.742775,39.530466","116.743038,39.530495","116.743559,39.530582","116.744301,39.530681","116.744779,39.530759","116.745467,39.530845","116.745848,39.530903","116.746207,39.530965","116.746728,39.531027","116.74706,39.531077","116.747693,39.531159","116.748085,39.531217","116.748616,39.531292","116.749422,39.531407","116.75028,39.531531","116.751364,39.531618","116.752088,39.531684","116.752807,39.531754","116.755339,39.531982","116.756022,39.532033","116.756505,39.532096","116.757176,39.532129","116.757573,39.532162","116.75842,39.532236","116.758898,39.532265","116.760303,39.532381","116.760917,39.53244","116.761872,39.532531","116.762693,39.532593","116.763175,39.532617","116.763283,39.532634","116.764549,39.532725","116.764812,39.532758","116.766121,39.532874","116.76648,39.532882","116.767017,39.532946","116.767827,39.533016","116.768336,39.533086","116.768942,39.533107","116.769473,39.53319","116.769903,39.533235","116.770525,39.533306","116.772129,39.533467","116.77355,39.5336","116.774514,39.533703","116.77599,39.53384","116.777191,39.533981","116.778033,39.534055","116.778688,39.534109","116.779455,39.534204","116.779943,39.53427","116.780517,39.534307","116.781697,39.534423","116.781724,39.534705","116.781638,39.534978","116.781563,39.53528","116.781547,39.535313","116.781418,39.535846","116.781257,39.536368","116.781123,39.536893","116.78101,39.537332","116.78101,39.537332","116.780843,39.537994","116.780725,39.538416","116.780629,39.538829","116.780527,39.539094","116.78035,39.539748","116.780165,39.540429","116.779988,39.54102","116.779854,39.541508","116.779768,39.541885","116.779644,39.542294","116.77951,39.542766","116.779344,39.543382","116.779226,39.543821","116.779006,39.544607","116.778834,39.545194","116.778748,39.545533","116.778588,39.546162","116.778384,39.546882","116.778287,39.547304","116.778148,39.547726","116.777997,39.548305","116.777949,39.548533","116.777885,39.548783","116.777713,39.5494","116.777606,39.54976","116.777595,39.549751","116.777467,39.550239","116.777316,39.550806","116.777225,39.551191","116.777102,39.551571","116.777005,39.552001","116.776832,39.55259","116.776596,39.553434","116.776468,39.553914","116.776312,39.554431","116.77628,39.554588","116.776114,39.55513","116.775985,39.555638","116.775819,39.556304","116.775674,39.556829","116.775599,39.557152","116.775481,39.557661","116.775352,39.558074","116.775228,39.558525","116.775127,39.55893","116.775041,39.559199","116.774939,39.559617","116.77474,39.560279","116.774628,39.560725","116.774526,39.561077","116.774437,39.56142","116.774271,39.56197","116.77412,39.562532","116.774024,39.562909","116.773868,39.563355","116.773793,39.563752","116.773739,39.563947","116.773605,39.564397","116.773474,39.564889","116.773367,39.565298","116.773265,39.565642","116.773206,39.565861","116.773131,39.566146","116.773034,39.566473","116.772761,39.566485","116.772187,39.566374","116.771747,39.566316","116.771382,39.566254","116.770776,39.566134","116.770052,39.566039","116.76943,39.565915","116.769102,39.565882","116.768872,39.565811","116.768276,39.565762","116.76775,39.565675","116.767037,39.565526","116.766388,39.56541","116.765755,39.565298","116.765192,39.565228","116.764569,39.565121","116.763905,39.565011","116.763041,39.564854","116.762713,39.564894","116.761635,39.564704","116.761351,39.564658","116.761276,39.564911","116.761131,39.565494","116.76105,39.565775","116.760922,39.566209","116.760766,39.566842","116.760616,39.567346","116.760525,39.567681","116.760525,39.567681","116.760414,39.568107","116.760317,39.568426","116.760285,39.568599","116.760194,39.568897","116.760129,39.569207","116.76007,39.569422","116.760011,39.569649","116.759941,39.569881","116.759914,39.569984","116.759861,39.570216","116.759791,39.570423","116.759693,39.570812","116.759505,39.571498","116.759441,39.571788","116.759376,39.572007","116.759296,39.572284","116.759194,39.572689","116.759194,39.572689","116.758924,39.573637","116.75886,39.573943","116.759047,39.573976","116.759557,39.574046","116.759977,39.574124","116.760439,39.574194","116.760766,39.574256","116.761324,39.574343","116.761581,39.574413","116.762187,39.574521","116.762616,39.574566","116.762901,39.574607","116.76465,39.57488","116.765412,39.574996"]', CURRENT_TIMESTAMP()); + +insert into server_config(`id`,`host`,`port`,`load_url`,`default_mqtt_addr`,`default_mqtt_topic`,`default_mqtt_qos`) + values +(1,'127.0.0.1',81,'/verify/vehicleConnection','tcp://fluxmq.muyu.icu:1883','test', 0) diff --git a/src/main/resources/schema.sql b/src/main/resources/schema.sql index a8c0802..7574981 100644 --- a/src/main/resources/schema.sql +++ b/src/main/resources/schema.sql @@ -12,3 +12,13 @@ create table if not exists route_info ( `data` CLOB not null, `create_time` datetime not null ) ; + +create table if not exists server_config ( + `id` int primary key not null, + `host` char(17) not null, + `port` int not null, + `load_url` char(128) not null, + `default_mqtt_addr` char(128) not null, + `default_mqtt_topic` char(128) not null, + `default_mqtt_qos` int not null +); diff --git a/src/main/resources/static/css/chunk-e4980b30.27dfab27.css b/src/main/resources/static/css/chunk-e4980b30.27dfab27.css new file mode 100644 index 0000000..fcb0ae7 --- /dev/null +++ b/src/main/resources/static/css/chunk-e4980b30.27dfab27.css @@ -0,0 +1 @@ +.el-col[data-v-1fac6224]{margin-top:20px} \ No newline at end of file diff --git a/src/main/resources/static/index.html b/src/main/resources/static/index.html index 1497bab..de6171b 100644 --- a/src/main/resources/static/index.html +++ b/src/main/resources/static/index.html @@ -1 +1 @@ -车辆

\ No newline at end of file +车辆
\ No newline at end of file diff --git a/src/main/resources/static/js/app.4b247cb1.js b/src/main/resources/static/js/app.a7bceb97.js similarity index 65% rename from src/main/resources/static/js/app.4b247cb1.js rename to src/main/resources/static/js/app.a7bceb97.js index 2904016..184190d 100644 --- a/src/main/resources/static/js/app.4b247cb1.js +++ b/src/main/resources/static/js/app.a7bceb97.js @@ -1 +1 @@ -(window["webpackJsonp"]=window["webpackJsonp"]||[]).push([["app"],{0:function(e,t,n){e.exports=n("56d7")},"0ae2d":function(e,t,n){"use strict";n("cbd7")},"18f0":function(e,t,n){"use strict";n.r(t);var a=n("e017"),i=n.n(a),o=n("21a1"),s=n.n(o),r=new i.a({id:"icon-link",use:"icon-link-usage",viewBox:"0 0 128 128",content:''});s.a.add(r);t["default"]=r},2224:function(e,t,n){"use strict";n("5031")},"279e":function(e,t,n){},"2a3d":function(e,t,n){"use strict";n.r(t);var a=n("e017"),i=n.n(a),o=n("21a1"),s=n.n(o),r=new i.a({id:"icon-password",use:"icon-password-usage",viewBox:"0 0 128 128",content:''});s.a.add(r);t["default"]=r},"2b29":function(e,t,n){"use strict";n("f6c3")},"30c3":function(e,t,n){"use strict";n.r(t);var a=n("e017"),i=n.n(a),o=n("21a1"),s=n.n(o),r=new i.a({id:"icon-example",use:"icon-example-usage",viewBox:"0 0 128 128",content:''});s.a.add(r);t["default"]=r},"3e9a":function(e,t,n){"use strict";n("72e6")},4360:function(e,t,n){"use strict";var a=n("2b0e"),i=n("2f62"),o=(n("b0c0"),{sidebar:function(e){return e.app.sidebar},device:function(e){return e.app.device},token:function(e){return e.user.token},avatar:function(e){return e.user.avatar},name:function(e){return e.user.name}}),s=o,r=n("a78e"),c=n.n(r),u={sidebar:{opened:!c.a.get("sidebarStatus")||!!+c.a.get("sidebarStatus"),withoutAnimation:!1},device:"desktop"},l={TOGGLE_SIDEBAR:function(e){e.sidebar.opened=!e.sidebar.opened,e.sidebar.withoutAnimation=!1,e.sidebar.opened?c.a.set("sidebarStatus",1):c.a.set("sidebarStatus",0)},CLOSE_SIDEBAR:function(e,t){c.a.set("sidebarStatus",0),e.sidebar.opened=!1,e.sidebar.withoutAnimation=t},TOGGLE_DEVICE:function(e,t){e.device=t}},d={toggleSideBar:function(e){var t=e.commit;t("TOGGLE_SIDEBAR")},closeSideBar:function(e,t){var n=e.commit,a=t.withoutAnimation;n("CLOSE_SIDEBAR",a)},toggleDevice:function(e,t){var n=e.commit;n("TOGGLE_DEVICE",t)}},h={namespaced:!0,state:u,mutations:l,actions:d},m=n("83d6"),f=n.n(m),p=f.a.showSettings,v=f.a.fixedHeader,b=f.a.sidebarLogo,g={showSettings:p,fixedHeader:v,sidebarLogo:b},w={CHANGE_SETTING:function(e,t){var n=t.key,a=t.value;e.hasOwnProperty(n)&&(e[n]=a)}},x={changeSetting:function(e,t){var n=e.commit;n("CHANGE_SETTING",t)}},k={namespaced:!0,state:g,mutations:w,actions:x},y=(n("d3b7"),n("5f87")),_=n("a18c"),C=function(){return{token:Object(y["a"])(),name:"",avatar:""}},O=C(),z={RESET_STATE:function(e){Object.assign(e,C())},SET_TOKEN:function(e,t){e.token=t},SET_NAME:function(e,t){e.name=t},SET_AVATAR:function(e,t){e.avatar=t}},E={login:function(e,t){var n=e.commit;return new Promise((function(e,t){n("SET_TOKEN","token"),Object(y["c"])("token"),e()}))},getInfo:function(e){var t=e.commit;e.state;return new Promise((function(e,n){var a={name:"今天你努力了吗",avatar:"https://wpimg.wallstcn.com/f778738c-e4f8-4870-b634-56703b4acafe.gif"},i=a.name,o=a.avatar;t("SET_NAME",i),t("SET_AVATAR",o),e(a)}))},logout:function(e){var t=e.commit;e.state;return new Promise((function(e,n){Object(y["b"])(),Object(_["b"])(),t("RESET_STATE"),e()}))},resetToken:function(e){var t=e.commit;return new Promise((function(e){Object(y["b"])(),t("RESET_STATE"),e()}))}},S={namespaced:!0,state:O,mutations:z,actions:E};a["default"].use(i["a"]);var H=new i["a"].Store({modules:{app:h,settings:k,user:S},getters:s});t["a"]=H},"47f1":function(e,t,n){"use strict";n.r(t);var a=n("e017"),i=n.n(a),o=n("21a1"),s=n.n(o),r=new i.a({id:"icon-table",use:"icon-table-usage",viewBox:"0 0 128 128",content:''});s.a.add(r);t["default"]=r},"4df5":function(e,t,n){"use strict";n.r(t);var a=n("e017"),i=n.n(a),o=n("21a1"),s=n.n(o),r=new i.a({id:"icon-eye",use:"icon-eye-usage",viewBox:"0 0 128 64",content:''});s.a.add(r);t["default"]=r},5031:function(e,t,n){},"51ff":function(e,t,n){var a={"./dashboard.svg":"f782","./example.svg":"30c3","./eye-open.svg":"d7ec","./eye.svg":"4df5","./form.svg":"eb1b","./link.svg":"18f0","./nested.svg":"dcf8","./password.svg":"2a3d","./table.svg":"47f1","./tree.svg":"93cd","./user.svg":"b3b5"};function i(e){var t=o(e);return n(t)}function o(e){if(!n.o(a,e)){var t=new Error("Cannot find module '"+e+"'");throw t.code="MODULE_NOT_FOUND",t}return a[e]}i.keys=function(){return Object.keys(a)},i.resolve=o,e.exports=i,i.id="51ff"},"56d7":function(e,t,n){"use strict";n.r(t);n("e260"),n("e6cf"),n("cca6"),n("a79d");var a=n("2b0e"),i=(n("f5df1"),n("5c96")),o=n.n(i),s=(n("0fae"),n("f0d9")),r=n.n(s),c=(n("b20f"),function(){var e=this,t=e.$createElement,n=e._self._c||t;return n("div",{attrs:{id:"app"}},[n("router-view")],1)}),u=[],l={name:"App"},d=l,h=n("2877"),m=Object(h["a"])(d,c,u,!1,null,null,null),f=m.exports,p=n("4360"),v=n("a18c"),b=(n("d81d"),n("d3b7"),n("ddb0"),function(){var e=this,t=e.$createElement,n=e._self._c||t;return e.isExternal?n("div",e._g({staticClass:"svg-external-icon svg-icon",style:e.styleExternalIcon},e.$listeners)):n("svg",e._g({class:e.svgClass,attrs:{"aria-hidden":"true"}},e.$listeners),[n("use",{attrs:{"xlink:href":e.iconName}})])}),g=[],w=n("61f7"),x={name:"SvgIcon",props:{iconClass:{type:String,required:!0},className:{type:String,default:""}},computed:{isExternal:function(){return Object(w["a"])(this.iconClass)},iconName:function(){return"#icon-".concat(this.iconClass)},svgClass:function(){return this.className?"svg-icon "+this.className:"svg-icon"},styleExternalIcon:function(){return{mask:"url(".concat(this.iconClass,") no-repeat 50% 50%"),"-webkit-mask":"url(".concat(this.iconClass,") no-repeat 50% 50%")}}}},k=x,y=(n("2b29"),Object(h["a"])(k,b,g,!1,null,"f9f7fefc",null)),_=y.exports;a["default"].component("svg-icon",_);var C=n("51ff"),O=function(e){return e.keys().map(e)};O(C);var z=n("c7eb"),E=n("1da1"),S=(n("b0c0"),n("323e")),H=n.n(S),M=(n("a5d8"),n("5f87")),B=(n("99af"),n("83d6")),T=n.n(B),j=T.a.title||"Vue Admin Template";function A(e){return e?"".concat(e," - ").concat(j):"".concat(j)}H.a.configure({showSpinner:!1});var V=["/login"];v["a"].beforeEach(function(){var e=Object(E["a"])(Object(z["a"])().mark((function e(t,n,a){var o,s;return Object(z["a"])().wrap((function(e){while(1)switch(e.prev=e.next){case 0:if(H.a.start(),document.title=A(t.meta.title),o=Object(M["a"])(),!o){e.next=29;break}if("/login"!==t.path){e.next=9;break}a({path:"/"}),H.a.done(),e.next=27;break;case 9:if(s=p["a"].getters.name,!s){e.next=14;break}a(),e.next=27;break;case 14:return e.prev=14,e.next=17,p["a"].dispatch("user/getInfo");case 17:a(),e.next=27;break;case 20:return e.prev=20,e.t0=e["catch"](14),e.next=24,p["a"].dispatch("user/resetToken");case 24:i["Message"].error(e.t0||"Has Error"),a("/login?redirect=".concat(t.path)),H.a.done();case 27:e.next=30;break;case 29:-1!==V.indexOf(t.path)?a():(a("/login?redirect=".concat(t.path)),H.a.done());case 30:case"end":return e.stop()}}),e,null,[[14,20]])})));return function(t,n,a){return e.apply(this,arguments)}}()),v["a"].afterEach((function(){H.a.done()})),a["default"].use(o.a,{locale:r.a}),a["default"].config.productionTip=!1,new a["default"]({el:"#app",router:v["a"],store:p["a"],render:function(e){return e(f)}})},"5f87":function(e,t,n){"use strict";n.d(t,"a",(function(){return s})),n.d(t,"c",(function(){return r})),n.d(t,"b",(function(){return c}));var a=n("a78e"),i=n.n(a),o="vue_admin_template_token";function s(){return i.a.get(o)}function r(e){return i.a.set(o,e)}function c(){return i.a.remove(o)}},"61f7":function(e,t,n){"use strict";n.d(t,"a",(function(){return a}));n("ac1f"),n("00b4"),n("498a");function a(e){return/^(https?:|mailto:|tel:)/.test(e)}},"6c02":function(e,t,n){},"71a0":function(e,t,n){"use strict";n("6c02")},"72e6":function(e,t,n){},"83d6":function(e,t){e.exports={title:"车辆",fixedHeader:!1,sidebarLogo:!1}},"88a1":function(e,t,n){},"8d0b":function(e,t,n){},"8dd0":function(e,t,n){"use strict";n("c459")},9353:function(e,t,n){"use strict";n("8d0b")},"93cd":function(e,t,n){"use strict";n.r(t);var a=n("e017"),i=n.n(a),o=n("21a1"),s=n.n(o),r=new i.a({id:"icon-tree",use:"icon-tree-usage",viewBox:"0 0 128 128",content:''});s.a.add(r);t["default"]=r},a18c:function(e,t,n){"use strict";n.d(t,"b",(function(){return Te}));n("d3b7"),n("3ca3"),n("ddb0");var a,i,o=n("2b0e"),s=n("8c4f"),r=function(){var e=this,t=e.$createElement,n=e._self._c||t;return n("div",{staticClass:"app-wrapper",class:e.classObj},["mobile"===e.device&&e.sidebar.opened?n("div",{staticClass:"drawer-bg",on:{click:e.handleClickOutside}}):e._e(),n("sidebar",{staticClass:"sidebar-container"}),n("div",{staticClass:"main-container"},[n("div",{class:{"fixed-header":e.fixedHeader}},[n("navbar")],1),n("app-main")],1)],1)},c=[],u=function(){var e=this,t=e.$createElement,n=e._self._c||t;return n("div",{staticClass:"navbar"},[n("hamburger",{staticClass:"hamburger-container",attrs:{"is-active":e.sidebar.opened},on:{toggleClick:e.toggleSideBar}}),n("breadcrumb",{staticClass:"breadcrumb-container"}),n("div",{staticClass:"right-menu"},[n("el-dropdown",{staticClass:"avatar-container",attrs:{trigger:"click"}},[n("div",{staticClass:"avatar-wrapper"},[n("img",{staticClass:"user-avatar",attrs:{src:e.avatar+"?imageView2/1/w/80/h/80"}}),n("i",{staticClass:"el-icon-caret-bottom"})]),n("el-dropdown-menu",{staticClass:"user-dropdown",attrs:{slot:"dropdown"},slot:"dropdown"},[n("router-link",{attrs:{to:"/"}},[n("el-dropdown-item",[e._v(" Home ")])],1),n("a",{attrs:{target:"_blank",href:"https://github.com/PanJiaChen/vue-admin-template/"}},[n("el-dropdown-item",[e._v("Github")])],1),n("a",{attrs:{target:"_blank",href:"https://panjiachen.github.io/vue-element-admin-site/#/"}},[n("el-dropdown-item",[e._v("Docs")])],1),n("el-dropdown-item",{attrs:{divided:""},nativeOn:{click:function(t){return e.logout(t)}}},[n("span",{staticStyle:{display:"block"}},[e._v("Log Out")])])],1)],1)],1)],1)},l=[],d=n("c7eb"),h=n("1da1"),m=n("5530"),f=n("2f62"),p=function(){var e=this,t=e.$createElement,n=e._self._c||t;return n("el-breadcrumb",{staticClass:"app-breadcrumb",attrs:{separator:"/"}},[n("transition-group",{attrs:{name:"breadcrumb"}},e._l(e.levelList,(function(t,a){return n("el-breadcrumb-item",{key:t.path},["noRedirect"===t.redirect||a===e.levelList.length-1?n("span",{staticClass:"no-redirect"},[e._v(e._s(t.meta.title))]):n("a",{on:{click:function(n){return n.preventDefault(),e.handleLink(t)}}},[e._v(e._s(t.meta.title))])])})),1)],1)},v=[],b=(n("4de4"),n("99af"),n("b0c0"),n("498a"),n("bd11")),g=n.n(b),w={data:function(){return{levelList:null}},watch:{$route:function(){this.getBreadcrumb()}},created:function(){this.getBreadcrumb()},methods:{getBreadcrumb:function(){var e=this.$route.matched.filter((function(e){return e.meta&&e.meta.title})),t=e[0];e=this.isDashboard(t)?[{path:"/dashboard",meta:{title:"首页"}}]:[{path:"/dashboard",meta:{title:"首页"}}].concat(e),this.levelList=e.filter((function(e){return e.meta&&e.meta.title&&!1!==e.meta.breadcrumb}))},isDashboard:function(e){var t=e&&e.name;return!!t&&"首页"===t.trim()},pathCompile:function(e){var t=this.$route.params,n=g.a.compile(e);return n(t)},handleLink:function(e){var t=e.redirect,n=e.path;t?this.$router.push(t):this.$router.push(this.pathCompile(n))}}},x=w,k=(n("d633"),n("2877")),y=Object(k["a"])(x,p,v,!1,null,"43342757",null),_=y.exports,C=function(){var e=this,t=e.$createElement,n=e._self._c||t;return n("div",{staticStyle:{padding:"0 15px"},on:{click:e.toggleClick}},[n("svg",{staticClass:"hamburger",class:{"is-active":e.isActive},attrs:{viewBox:"0 0 1024 1024",xmlns:"http://www.w3.org/2000/svg",width:"64",height:"64"}},[n("path",{attrs:{d:"M408 442h480c4.4 0 8-3.6 8-8v-56c0-4.4-3.6-8-8-8H408c-4.4 0-8 3.6-8 8v56c0 4.4 3.6 8 8 8zm-8 204c0 4.4 3.6 8 8 8h480c4.4 0 8-3.6 8-8v-56c0-4.4-3.6-8-8-8H408c-4.4 0-8 3.6-8 8v56zm504-486H120c-4.4 0-8 3.6-8 8v56c0 4.4 3.6 8 8 8h784c4.4 0 8-3.6 8-8v-56c0-4.4-3.6-8-8-8zm0 632H120c-4.4 0-8 3.6-8 8v56c0 4.4 3.6 8 8 8h784c4.4 0 8-3.6 8-8v-56c0-4.4-3.6-8-8-8zM142.4 642.1L298.7 519a8.84 8.84 0 0 0 0-13.9L142.4 381.9c-5.8-4.6-14.4-.5-14.4 6.9v246.3a8.9 8.9 0 0 0 14.4 7z"}})])])},O=[],z={name:"Hamburger",props:{isActive:{type:Boolean,default:!1}},methods:{toggleClick:function(){this.$emit("toggleClick")}}},E=z,S=(n("8dd0"),Object(k["a"])(E,C,O,!1,null,"49e15297",null)),H=S.exports,M={components:{Breadcrumb:_,Hamburger:H},computed:Object(m["a"])({},Object(f["b"])(["sidebar","avatar"])),methods:{toggleSideBar:function(){this.$store.dispatch("app/toggleSideBar")},logout:function(){var e=this;return Object(h["a"])(Object(d["a"])().mark((function t(){return Object(d["a"])().wrap((function(t){while(1)switch(t.prev=t.next){case 0:return t.next=2,e.$store.dispatch("user/logout");case 2:e.$router.push("/login?redirect=".concat(e.$route.fullPath));case 3:case"end":return t.stop()}}),t)})))()}}},B=M,T=(n("3e9a"),Object(k["a"])(B,u,l,!1,null,"050d8c75",null)),j=T.exports,A=function(){var e=this,t=e.$createElement,n=e._self._c||t;return n("div",{class:{"has-logo":e.showLogo}},[e.showLogo?n("logo",{attrs:{collapse:e.isCollapse}}):e._e(),n("el-scrollbar",{attrs:{"wrap-class":"scrollbar-wrapper"}},[n("el-menu",{attrs:{"default-active":e.activeMenu,collapse:e.isCollapse,"background-color":e.variables.menuBg,"text-color":e.variables.menuText,"unique-opened":!1,"active-text-color":e.variables.menuActiveText,"collapse-transition":!1,mode:"vertical"}},e._l(e.routes,(function(e){return n("sidebar-item",{key:e.path,attrs:{item:e,"base-path":e.path}})})),1)],1)],1)},V=[],$=function(){var e=this,t=e.$createElement,n=e._self._c||t;return n("div",{staticClass:"sidebar-logo-container",class:{collapse:e.collapse}},[n("transition",{attrs:{name:"sidebarLogoFade"}},[e.collapse?n("router-link",{key:"collapse",staticClass:"sidebar-logo-link",attrs:{to:"/"}},[e.logo?n("img",{staticClass:"sidebar-logo",attrs:{src:e.logo}}):n("h1",{staticClass:"sidebar-title"},[e._v(e._s(e.title)+" ")])]):n("router-link",{key:"expand",staticClass:"sidebar-logo-link",attrs:{to:"/"}},[e.logo?n("img",{staticClass:"sidebar-logo",attrs:{src:e.logo}}):e._e(),n("h1",{staticClass:"sidebar-title"},[e._v(e._s(e.title)+" ")])])],1)],1)},L=[],I={name:"SidebarLogo",props:{collapse:{type:Boolean,required:!0}},data:function(){return{title:"Vue Admin Template",logo:"https://wpimg.wallstcn.com/69a1c46c-eb1c-4b46-8bd4-e9e686ef5251.png"}}},P=I,N=(n("71a0"),Object(k["a"])(P,$,L,!1,null,"5bb1c0e2",null)),D=N.exports,q=function(){var e=this,t=e.$createElement,n=e._self._c||t;return e.item.hidden?e._e():n("div",[!e.hasOneShowingChild(e.item.children,e.item)||e.onlyOneChild.children&&!e.onlyOneChild.noShowingChildren||e.item.alwaysShow?n("el-submenu",{ref:"subMenu",attrs:{index:e.resolvePath(e.item.path),"popper-append-to-body":""}},[n("template",{slot:"title"},[e.item.meta?n("item",{attrs:{icon:e.item.meta&&e.item.meta.icon,title:e.item.meta.title}}):e._e()],1),e._l(e.item.children,(function(t){return n("sidebar-item",{key:t.path,staticClass:"nest-menu",attrs:{"is-nest":!0,item:t,"base-path":e.resolvePath(t.path)}})}))],2):[e.onlyOneChild.meta?n("app-link",{attrs:{to:e.resolvePath(e.onlyOneChild.path)}},[n("el-menu-item",{class:{"submenu-title-noDropdown":!e.isNest},attrs:{index:e.resolvePath(e.onlyOneChild.path)}},[n("item",{attrs:{icon:e.onlyOneChild.meta.icon||e.item.meta&&e.item.meta.icon,title:e.onlyOneChild.meta.title}})],1)],1):e._e()]],2)},G=[],R=n("df7c"),J=n.n(R),U=n("61f7"),F=(n("caad"),n("2532"),{name:"MenuItem",functional:!0,props:{icon:{type:String,default:""},title:{type:String,default:""}},render:function(e,t){var n=t.props,a=n.icon,i=n.title,o=[];return a&&(a.includes("el-icon")?o.push(e("i",{class:[a,"sub-el-icon"]})):o.push(e("svg-icon",{attrs:{"icon-class":a}}))),i&&o.push(e("span",{slot:"title"},[i])),o}}),K=F,W=(n("f87e"),Object(k["a"])(K,a,i,!1,null,"18eeea00",null)),Q=W.exports,X=function(){var e=this,t=e.$createElement,n=e._self._c||t;return n(e.type,e._b({tag:"component"},"component",e.linkProps(e.to),!1),[e._t("default")],2)},Y=[],Z={props:{to:{type:String,required:!0}},computed:{isExternal:function(){return Object(U["a"])(this.to)},type:function(){return this.isExternal?"a":"router-link"}},methods:{linkProps:function(e){return this.isExternal?{href:e,target:"_blank",rel:"noopener"}:{to:e}}}},ee=Z,te=Object(k["a"])(ee,X,Y,!1,null,null,null),ne=te.exports,ae={computed:{device:function(){return this.$store.state.app.device}},mounted:function(){this.fixBugIniOS()},methods:{fixBugIniOS:function(){var e=this,t=this.$refs.subMenu;if(t){var n=t.handleMouseleave;t.handleMouseleave=function(t){"mobile"!==e.device&&n(t)}}}}},ie={name:"SidebarItem",components:{Item:Q,AppLink:ne},mixins:[ae],props:{item:{type:Object,required:!0},isNest:{type:Boolean,default:!1},basePath:{type:String,default:""}},data:function(){return this.onlyOneChild=null,{}},methods:{hasOneShowingChild:function(){var e=this,t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:[],n=arguments.length>1?arguments[1]:void 0,a=t.filter((function(t){return!t.hidden&&(e.onlyOneChild=t,!0)}));return 1===a.length||0===a.length&&(this.onlyOneChild=Object(m["a"])(Object(m["a"])({},n),{},{path:"",noShowingChildren:!0}),!0)},resolvePath:function(e){return Object(U["a"])(e)?e:Object(U["a"])(this.basePath)?this.basePath:J.a.resolve(this.basePath,e)}}},oe=ie,se=Object(k["a"])(oe,q,G,!1,null,null,null),re=se.exports,ce=n("cf1e"),ue=n.n(ce),le={components:{SidebarItem:re,Logo:D},computed:Object(m["a"])(Object(m["a"])({},Object(f["b"])(["sidebar"])),{},{routes:function(){return this.$router.options.routes},activeMenu:function(){var e=this.$route,t=e.meta,n=e.path;return t.activeMenu?t.activeMenu:n},showLogo:function(){return this.$store.state.settings.sidebarLogo},variables:function(){return ue.a},isCollapse:function(){return!this.sidebar.opened}})},de=le,he=Object(k["a"])(de,A,V,!1,null,null,null),me=he.exports,fe=function(){var e=this,t=e.$createElement,n=e._self._c||t;return n("section",{staticClass:"app-main"},[n("transition",{attrs:{name:"fade-transform",mode:"out-in"}},[n("router-view",{key:e.key})],1)],1)},pe=[],ve={name:"AppMain",computed:{key:function(){return this.$route.path}}},be=ve,ge=(n("2224"),n("0ae2d"),Object(k["a"])(be,fe,pe,!1,null,"64cf4d83",null)),we=ge.exports,xe=n("4360"),ke=document,ye=ke.body,_e=992,Ce={watch:{$route:function(e){"mobile"===this.device&&this.sidebar.opened&&xe["a"].dispatch("app/closeSideBar",{withoutAnimation:!1})}},beforeMount:function(){window.addEventListener("resize",this.$_resizeHandler)},beforeDestroy:function(){window.removeEventListener("resize",this.$_resizeHandler)},mounted:function(){var e=this.$_isMobile();e&&(xe["a"].dispatch("app/toggleDevice","mobile"),xe["a"].dispatch("app/closeSideBar",{withoutAnimation:!0}))},methods:{$_isMobile:function(){var e=ye.getBoundingClientRect();return e.width-1<_e},$_resizeHandler:function(){if(!document.hidden){var e=this.$_isMobile();xe["a"].dispatch("app/toggleDevice",e?"mobile":"desktop"),e&&xe["a"].dispatch("app/closeSideBar",{withoutAnimation:!0})}}}},Oe={name:"Layout",components:{Navbar:j,Sidebar:me,AppMain:we},mixins:[Ce],computed:{sidebar:function(){return this.$store.state.app.sidebar},device:function(){return this.$store.state.app.device},fixedHeader:function(){return this.$store.state.settings.fixedHeader},classObj:function(){return{hideSidebar:!this.sidebar.opened,openSidebar:this.sidebar.opened,withoutAnimation:this.sidebar.withoutAnimation,mobile:"mobile"===this.device}}},methods:{handleClickOutside:function(){this.$store.dispatch("app/closeSideBar",{withoutAnimation:!1})}}},ze=Oe,Ee=(n("9353"),Object(k["a"])(ze,r,c,!1,null,"4f739cf0",null)),Se=Ee.exports;o["default"].use(s["a"]);var He=[{path:"/login",component:function(){return n.e("chunk-510f32e7").then(n.bind(null,"9ed6"))},hidden:!0},{path:"/404",component:function(){return n.e("chunk-22cea610").then(n.bind(null,"8cdb"))},hidden:!0},{path:"/",component:Se,redirect:"/dashboard",children:[{path:"dashboard",name:"首页",component:function(){return Promise.all([n.e("chunk-019c66da"),n.e("chunk-6f60c8f1"),n.e("chunk-4a014042")]).then(n.bind(null,"9406"))},meta:{title:"首页",icon:"dashboard"}}]},{path:"/form",component:Se,children:[{path:"index",name:"数据模拟",component:function(){return Promise.all([n.e("chunk-019c66da"),n.e("chunk-cd3ab578")]).then(n.bind(null,"ba75"))},meta:{title:"数据模拟",icon:"form"}}]},{path:"*",redirect:"/404",hidden:!0}],Me=function(){return new s["a"]({scrollBehavior:function(){return{y:0}},routes:He})},Be=Me();function Te(){var e=Me();Be.matcher=e.matcher}t["a"]=Be},b20f:function(e,t,n){e.exports={menuText:"#bfcbd9",menuActiveText:"#409eff",subMenuActiveText:"#f4f4f5",menuBg:"#304156",menuHover:"#263445",subMenuBg:"#1f2d3d",subMenuHover:"#001528",sideBarWidth:"210px"}},b3b5:function(e,t,n){"use strict";n.r(t);var a=n("e017"),i=n.n(a),o=n("21a1"),s=n.n(o),r=new i.a({id:"icon-user",use:"icon-user-usage",viewBox:"0 0 130 130",content:''});s.a.add(r);t["default"]=r},c459:function(e,t,n){},cbd7:function(e,t,n){},cf1e:function(e,t,n){e.exports={menuText:"#bfcbd9",menuActiveText:"#409eff",subMenuActiveText:"#f4f4f5",menuBg:"#304156",menuHover:"#263445",subMenuBg:"#1f2d3d",subMenuHover:"#001528",sideBarWidth:"210px"}},d633:function(e,t,n){"use strict";n("88a1")},d7ec:function(e,t,n){"use strict";n.r(t);var a=n("e017"),i=n.n(a),o=n("21a1"),s=n.n(o),r=new i.a({id:"icon-eye-open",use:"icon-eye-open-usage",viewBox:"0 0 1024 1024",content:''});s.a.add(r);t["default"]=r},dcf8:function(e,t,n){"use strict";n.r(t);var a=n("e017"),i=n.n(a),o=n("21a1"),s=n.n(o),r=new i.a({id:"icon-nested",use:"icon-nested-usage",viewBox:"0 0 128 128",content:''});s.a.add(r);t["default"]=r},eb1b:function(e,t,n){"use strict";n.r(t);var a=n("e017"),i=n.n(a),o=n("21a1"),s=n.n(o),r=new i.a({id:"icon-form",use:"icon-form-usage",viewBox:"0 0 128 128",content:''});s.a.add(r);t["default"]=r},f6c3:function(e,t,n){},f782:function(e,t,n){"use strict";n.r(t);var a=n("e017"),i=n.n(a),o=n("21a1"),s=n.n(o),r=new i.a({id:"icon-dashboard",use:"icon-dashboard-usage",viewBox:"0 0 128 100",content:''});s.a.add(r);t["default"]=r},f87e:function(e,t,n){"use strict";n("279e")}},[[0,"runtime","chunk-elementUI","chunk-libs"]]]); \ No newline at end of file +(window["webpackJsonp"]=window["webpackJsonp"]||[]).push([["app"],{0:function(e,t,n){e.exports=n("56d7")},"0ae2d":function(e,t,n){"use strict";n("cbd7")},"18f0":function(e,t,n){"use strict";n.r(t);var a=n("e017"),i=n.n(a),o=n("21a1"),s=n.n(o),c=new i.a({id:"icon-link",use:"icon-link-usage",viewBox:"0 0 128 128",content:''});s.a.add(c);t["default"]=c},2224:function(e,t,n){"use strict";n("5031")},"279e":function(e,t,n){},"2a3d":function(e,t,n){"use strict";n.r(t);var a=n("e017"),i=n.n(a),o=n("21a1"),s=n.n(o),c=new i.a({id:"icon-password",use:"icon-password-usage",viewBox:"0 0 128 128",content:''});s.a.add(c);t["default"]=c},"2b29":function(e,t,n){"use strict";n("f6c3")},"30c3":function(e,t,n){"use strict";n.r(t);var a=n("e017"),i=n.n(a),o=n("21a1"),s=n.n(o),c=new i.a({id:"icon-example",use:"icon-example-usage",viewBox:"0 0 128 128",content:''});s.a.add(c);t["default"]=c},"3e9a":function(e,t,n){"use strict";n("72e6")},4360:function(e,t,n){"use strict";var a=n("2b0e"),i=n("2f62"),o=(n("b0c0"),{sidebar:function(e){return e.app.sidebar},device:function(e){return e.app.device},token:function(e){return e.user.token},avatar:function(e){return e.user.avatar},name:function(e){return e.user.name}}),s=o,c=n("a78e"),r=n.n(c),u={sidebar:{opened:!r.a.get("sidebarStatus")||!!+r.a.get("sidebarStatus"),withoutAnimation:!1},device:"desktop"},l={TOGGLE_SIDEBAR:function(e){e.sidebar.opened=!e.sidebar.opened,e.sidebar.withoutAnimation=!1,e.sidebar.opened?r.a.set("sidebarStatus",1):r.a.set("sidebarStatus",0)},CLOSE_SIDEBAR:function(e,t){r.a.set("sidebarStatus",0),e.sidebar.opened=!1,e.sidebar.withoutAnimation=t},TOGGLE_DEVICE:function(e,t){e.device=t}},d={toggleSideBar:function(e){var t=e.commit;t("TOGGLE_SIDEBAR")},closeSideBar:function(e,t){var n=e.commit,a=t.withoutAnimation;n("CLOSE_SIDEBAR",a)},toggleDevice:function(e,t){var n=e.commit;n("TOGGLE_DEVICE",t)}},h={namespaced:!0,state:u,mutations:l,actions:d},m=n("83d6"),f=n.n(m),p=f.a.showSettings,v=f.a.fixedHeader,b=f.a.sidebarLogo,g={showSettings:p,fixedHeader:v,sidebarLogo:b},w={CHANGE_SETTING:function(e,t){var n=t.key,a=t.value;e.hasOwnProperty(n)&&(e[n]=a)}},x={changeSetting:function(e,t){var n=e.commit;n("CHANGE_SETTING",t)}},k={namespaced:!0,state:g,mutations:w,actions:x},y=(n("d3b7"),n("5f87")),_=n("a18c"),C=function(){return{token:Object(y["a"])(),name:"",avatar:""}},O=C(),z={RESET_STATE:function(e){Object.assign(e,C())},SET_TOKEN:function(e,t){e.token=t},SET_NAME:function(e,t){e.name=t},SET_AVATAR:function(e,t){e.avatar=t}},E={login:function(e,t){var n=e.commit;return new Promise((function(e,t){n("SET_TOKEN","token"),Object(y["c"])("token"),e()}))},getInfo:function(e){var t=e.commit;e.state;return new Promise((function(e,n){var a={name:"今天你努力了吗",avatar:"https://wpimg.wallstcn.com/f778738c-e4f8-4870-b634-56703b4acafe.gif"},i=a.name,o=a.avatar;t("SET_NAME",i),t("SET_AVATAR",o),e(a)}))},logout:function(e){var t=e.commit;e.state;return new Promise((function(e,n){Object(y["b"])(),Object(_["b"])(),t("RESET_STATE"),e()}))},resetToken:function(e){var t=e.commit;return new Promise((function(e){Object(y["b"])(),t("RESET_STATE"),e()}))}},S={namespaced:!0,state:O,mutations:z,actions:E};a["default"].use(i["a"]);var H=new i["a"].Store({modules:{app:h,settings:k,user:S},getters:s});t["a"]=H},"47f1":function(e,t,n){"use strict";n.r(t);var a=n("e017"),i=n.n(a),o=n("21a1"),s=n.n(o),c=new i.a({id:"icon-table",use:"icon-table-usage",viewBox:"0 0 128 128",content:''});s.a.add(c);t["default"]=c},"4df5":function(e,t,n){"use strict";n.r(t);var a=n("e017"),i=n.n(a),o=n("21a1"),s=n.n(o),c=new i.a({id:"icon-eye",use:"icon-eye-usage",viewBox:"0 0 128 64",content:''});s.a.add(c);t["default"]=c},5031:function(e,t,n){},"51ff":function(e,t,n){var a={"./dashboard.svg":"f782","./example.svg":"30c3","./eye-open.svg":"d7ec","./eye.svg":"4df5","./form.svg":"eb1b","./link.svg":"18f0","./nested.svg":"dcf8","./password.svg":"2a3d","./table.svg":"47f1","./tree.svg":"93cd","./user.svg":"b3b5"};function i(e){var t=o(e);return n(t)}function o(e){if(!n.o(a,e)){var t=new Error("Cannot find module '"+e+"'");throw t.code="MODULE_NOT_FOUND",t}return a[e]}i.keys=function(){return Object.keys(a)},i.resolve=o,e.exports=i,i.id="51ff"},"56d7":function(e,t,n){"use strict";n.r(t);n("e260"),n("e6cf"),n("cca6"),n("a79d");var a=n("2b0e"),i=(n("f5df1"),n("5c96")),o=n.n(i),s=(n("0fae"),n("f0d9")),c=n.n(s),r=(n("b20f"),function(){var e=this,t=e.$createElement,n=e._self._c||t;return n("div",{attrs:{id:"app"}},[n("router-view")],1)}),u=[],l={name:"App"},d=l,h=n("2877"),m=Object(h["a"])(d,r,u,!1,null,null,null),f=m.exports,p=n("4360"),v=n("a18c"),b=(n("d81d"),n("d3b7"),n("ddb0"),function(){var e=this,t=e.$createElement,n=e._self._c||t;return e.isExternal?n("div",e._g({staticClass:"svg-external-icon svg-icon",style:e.styleExternalIcon},e.$listeners)):n("svg",e._g({class:e.svgClass,attrs:{"aria-hidden":"true"}},e.$listeners),[n("use",{attrs:{"xlink:href":e.iconName}})])}),g=[],w=n("61f7"),x={name:"SvgIcon",props:{iconClass:{type:String,required:!0},className:{type:String,default:""}},computed:{isExternal:function(){return Object(w["a"])(this.iconClass)},iconName:function(){return"#icon-".concat(this.iconClass)},svgClass:function(){return this.className?"svg-icon "+this.className:"svg-icon"},styleExternalIcon:function(){return{mask:"url(".concat(this.iconClass,") no-repeat 50% 50%"),"-webkit-mask":"url(".concat(this.iconClass,") no-repeat 50% 50%")}}}},k=x,y=(n("2b29"),Object(h["a"])(k,b,g,!1,null,"f9f7fefc",null)),_=y.exports;a["default"].component("svg-icon",_);var C=n("51ff"),O=function(e){return e.keys().map(e)};O(C);var z=n("c7eb"),E=n("1da1"),S=(n("b0c0"),n("323e")),H=n.n(S),M=(n("a5d8"),n("5f87")),B=(n("99af"),n("83d6")),T=n.n(B),j=T.a.title||"Vue Admin Template";function A(e){return e?"".concat(e," - ").concat(j):"".concat(j)}H.a.configure({showSpinner:!1});var V=["/login"];v["a"].beforeEach(function(){var e=Object(E["a"])(Object(z["a"])().mark((function e(t,n,a){var o,s;return Object(z["a"])().wrap((function(e){while(1)switch(e.prev=e.next){case 0:if(H.a.start(),document.title=A(t.meta.title),o=Object(M["a"])(),!o){e.next=29;break}if("/login"!==t.path){e.next=9;break}a({path:"/"}),H.a.done(),e.next=27;break;case 9:if(s=p["a"].getters.name,!s){e.next=14;break}a(),e.next=27;break;case 14:return e.prev=14,e.next=17,p["a"].dispatch("user/getInfo");case 17:a(),e.next=27;break;case 20:return e.prev=20,e.t0=e["catch"](14),e.next=24,p["a"].dispatch("user/resetToken");case 24:i["Message"].error(e.t0||"Has Error"),a("/login?redirect=".concat(t.path)),H.a.done();case 27:e.next=30;break;case 29:-1!==V.indexOf(t.path)?a():(a("/login?redirect=".concat(t.path)),H.a.done());case 30:case"end":return e.stop()}}),e,null,[[14,20]])})));return function(t,n,a){return e.apply(this,arguments)}}()),v["a"].afterEach((function(){H.a.done()})),a["default"].use(o.a,{locale:c.a}),a["default"].config.productionTip=!1,new a["default"]({el:"#app",router:v["a"],store:p["a"],render:function(e){return e(f)}})},"5f87":function(e,t,n){"use strict";n.d(t,"a",(function(){return s})),n.d(t,"c",(function(){return c})),n.d(t,"b",(function(){return r}));var a=n("a78e"),i=n.n(a),o="vue_admin_template_token";function s(){return i.a.get(o)}function c(e){return i.a.set(o,e)}function r(){return i.a.remove(o)}},"61f7":function(e,t,n){"use strict";n.d(t,"a",(function(){return a}));n("ac1f"),n("00b4"),n("498a");function a(e){return/^(https?:|mailto:|tel:)/.test(e)}},"6c02":function(e,t,n){},"71a0":function(e,t,n){"use strict";n("6c02")},"72e6":function(e,t,n){},"83d6":function(e,t){e.exports={title:"车辆",fixedHeader:!1,sidebarLogo:!1}},"88a1":function(e,t,n){},"8d0b":function(e,t,n){},"8dd0":function(e,t,n){"use strict";n("c459")},9353:function(e,t,n){"use strict";n("8d0b")},"93cd":function(e,t,n){"use strict";n.r(t);var a=n("e017"),i=n.n(a),o=n("21a1"),s=n.n(o),c=new i.a({id:"icon-tree",use:"icon-tree-usage",viewBox:"0 0 128 128",content:''});s.a.add(c);t["default"]=c},a18c:function(e,t,n){"use strict";n.d(t,"b",(function(){return Te}));n("d3b7"),n("3ca3"),n("ddb0");var a,i,o=n("2b0e"),s=n("8c4f"),c=function(){var e=this,t=e.$createElement,n=e._self._c||t;return n("div",{staticClass:"app-wrapper",class:e.classObj},["mobile"===e.device&&e.sidebar.opened?n("div",{staticClass:"drawer-bg",on:{click:e.handleClickOutside}}):e._e(),n("sidebar",{staticClass:"sidebar-container"}),n("div",{staticClass:"main-container"},[n("div",{class:{"fixed-header":e.fixedHeader}},[n("navbar")],1),n("app-main")],1)],1)},r=[],u=function(){var e=this,t=e.$createElement,n=e._self._c||t;return n("div",{staticClass:"navbar"},[n("hamburger",{staticClass:"hamburger-container",attrs:{"is-active":e.sidebar.opened},on:{toggleClick:e.toggleSideBar}}),n("breadcrumb",{staticClass:"breadcrumb-container"}),n("div",{staticClass:"right-menu"},[n("el-dropdown",{staticClass:"avatar-container",attrs:{trigger:"click"}},[n("div",{staticClass:"avatar-wrapper"},[n("img",{staticClass:"user-avatar",attrs:{src:e.avatar+"?imageView2/1/w/80/h/80"}}),n("i",{staticClass:"el-icon-caret-bottom"})]),n("el-dropdown-menu",{staticClass:"user-dropdown",attrs:{slot:"dropdown"},slot:"dropdown"},[n("router-link",{attrs:{to:"/"}},[n("el-dropdown-item",[e._v(" Home ")])],1),n("a",{attrs:{target:"_blank",href:"https://github.com/PanJiaChen/vue-admin-template/"}},[n("el-dropdown-item",[e._v("Github")])],1),n("a",{attrs:{target:"_blank",href:"https://panjiachen.github.io/vue-element-admin-site/#/"}},[n("el-dropdown-item",[e._v("Docs")])],1),n("el-dropdown-item",{attrs:{divided:""},nativeOn:{click:function(t){return e.logout(t)}}},[n("span",{staticStyle:{display:"block"}},[e._v("Log Out")])])],1)],1)],1)],1)},l=[],d=n("c7eb"),h=n("1da1"),m=n("5530"),f=n("2f62"),p=function(){var e=this,t=e.$createElement,n=e._self._c||t;return n("el-breadcrumb",{staticClass:"app-breadcrumb",attrs:{separator:"/"}},[n("transition-group",{attrs:{name:"breadcrumb"}},e._l(e.levelList,(function(t,a){return n("el-breadcrumb-item",{key:t.path},["noRedirect"===t.redirect||a===e.levelList.length-1?n("span",{staticClass:"no-redirect"},[e._v(e._s(t.meta.title))]):n("a",{on:{click:function(n){return n.preventDefault(),e.handleLink(t)}}},[e._v(e._s(t.meta.title))])])})),1)],1)},v=[],b=(n("4de4"),n("99af"),n("b0c0"),n("498a"),n("bd11")),g=n.n(b),w={data:function(){return{levelList:null}},watch:{$route:function(){this.getBreadcrumb()}},created:function(){this.getBreadcrumb()},methods:{getBreadcrumb:function(){var e=this.$route.matched.filter((function(e){return e.meta&&e.meta.title})),t=e[0];e=this.isDashboard(t)?[{path:"/dashboard",meta:{title:"首页"}}]:[{path:"/dashboard",meta:{title:"首页"}}].concat(e),this.levelList=e.filter((function(e){return e.meta&&e.meta.title&&!1!==e.meta.breadcrumb}))},isDashboard:function(e){var t=e&&e.name;return!!t&&"首页"===t.trim()},pathCompile:function(e){var t=this.$route.params,n=g.a.compile(e);return n(t)},handleLink:function(e){var t=e.redirect,n=e.path;t?this.$router.push(t):this.$router.push(this.pathCompile(n))}}},x=w,k=(n("d633"),n("2877")),y=Object(k["a"])(x,p,v,!1,null,"43342757",null),_=y.exports,C=function(){var e=this,t=e.$createElement,n=e._self._c||t;return n("div",{staticStyle:{padding:"0 15px"},on:{click:e.toggleClick}},[n("svg",{staticClass:"hamburger",class:{"is-active":e.isActive},attrs:{viewBox:"0 0 1024 1024",xmlns:"http://www.w3.org/2000/svg",width:"64",height:"64"}},[n("path",{attrs:{d:"M408 442h480c4.4 0 8-3.6 8-8v-56c0-4.4-3.6-8-8-8H408c-4.4 0-8 3.6-8 8v56c0 4.4 3.6 8 8 8zm-8 204c0 4.4 3.6 8 8 8h480c4.4 0 8-3.6 8-8v-56c0-4.4-3.6-8-8-8H408c-4.4 0-8 3.6-8 8v56zm504-486H120c-4.4 0-8 3.6-8 8v56c0 4.4 3.6 8 8 8h784c4.4 0 8-3.6 8-8v-56c0-4.4-3.6-8-8-8zm0 632H120c-4.4 0-8 3.6-8 8v56c0 4.4 3.6 8 8 8h784c4.4 0 8-3.6 8-8v-56c0-4.4-3.6-8-8-8zM142.4 642.1L298.7 519a8.84 8.84 0 0 0 0-13.9L142.4 381.9c-5.8-4.6-14.4-.5-14.4 6.9v246.3a8.9 8.9 0 0 0 14.4 7z"}})])])},O=[],z={name:"Hamburger",props:{isActive:{type:Boolean,default:!1}},methods:{toggleClick:function(){this.$emit("toggleClick")}}},E=z,S=(n("8dd0"),Object(k["a"])(E,C,O,!1,null,"49e15297",null)),H=S.exports,M={components:{Breadcrumb:_,Hamburger:H},computed:Object(m["a"])({},Object(f["b"])(["sidebar","avatar"])),methods:{toggleSideBar:function(){this.$store.dispatch("app/toggleSideBar")},logout:function(){var e=this;return Object(h["a"])(Object(d["a"])().mark((function t(){return Object(d["a"])().wrap((function(t){while(1)switch(t.prev=t.next){case 0:return t.next=2,e.$store.dispatch("user/logout");case 2:e.$router.push("/login?redirect=".concat(e.$route.fullPath));case 3:case"end":return t.stop()}}),t)})))()}}},B=M,T=(n("3e9a"),Object(k["a"])(B,u,l,!1,null,"050d8c75",null)),j=T.exports,A=function(){var e=this,t=e.$createElement,n=e._self._c||t;return n("div",{class:{"has-logo":e.showLogo}},[e.showLogo?n("logo",{attrs:{collapse:e.isCollapse}}):e._e(),n("el-scrollbar",{attrs:{"wrap-class":"scrollbar-wrapper"}},[n("el-menu",{attrs:{"default-active":e.activeMenu,collapse:e.isCollapse,"background-color":e.variables.menuBg,"text-color":e.variables.menuText,"unique-opened":!1,"active-text-color":e.variables.menuActiveText,"collapse-transition":!1,mode:"vertical"}},e._l(e.routes,(function(e){return n("sidebar-item",{key:e.path,attrs:{item:e,"base-path":e.path}})})),1)],1)],1)},V=[],$=function(){var e=this,t=e.$createElement,n=e._self._c||t;return n("div",{staticClass:"sidebar-logo-container",class:{collapse:e.collapse}},[n("transition",{attrs:{name:"sidebarLogoFade"}},[e.collapse?n("router-link",{key:"collapse",staticClass:"sidebar-logo-link",attrs:{to:"/"}},[e.logo?n("img",{staticClass:"sidebar-logo",attrs:{src:e.logo}}):n("h1",{staticClass:"sidebar-title"},[e._v(e._s(e.title)+" ")])]):n("router-link",{key:"expand",staticClass:"sidebar-logo-link",attrs:{to:"/"}},[e.logo?n("img",{staticClass:"sidebar-logo",attrs:{src:e.logo}}):e._e(),n("h1",{staticClass:"sidebar-title"},[e._v(e._s(e.title)+" ")])])],1)],1)},L=[],P={name:"SidebarLogo",props:{collapse:{type:Boolean,required:!0}},data:function(){return{title:"Vue Admin Template",logo:"https://wpimg.wallstcn.com/69a1c46c-eb1c-4b46-8bd4-e9e686ef5251.png"}}},I=P,N=(n("71a0"),Object(k["a"])(I,$,L,!1,null,"5bb1c0e2",null)),D=N.exports,q=function(){var e=this,t=e.$createElement,n=e._self._c||t;return e.item.hidden?e._e():n("div",[!e.hasOneShowingChild(e.item.children,e.item)||e.onlyOneChild.children&&!e.onlyOneChild.noShowingChildren||e.item.alwaysShow?n("el-submenu",{ref:"subMenu",attrs:{index:e.resolvePath(e.item.path),"popper-append-to-body":""}},[n("template",{slot:"title"},[e.item.meta?n("item",{attrs:{icon:e.item.meta&&e.item.meta.icon,title:e.item.meta.title}}):e._e()],1),e._l(e.item.children,(function(t){return n("sidebar-item",{key:t.path,staticClass:"nest-menu",attrs:{"is-nest":!0,item:t,"base-path":e.resolvePath(t.path)}})}))],2):[e.onlyOneChild.meta?n("app-link",{attrs:{to:e.resolvePath(e.onlyOneChild.path)}},[n("el-menu-item",{class:{"submenu-title-noDropdown":!e.isNest},attrs:{index:e.resolvePath(e.onlyOneChild.path)}},[n("item",{attrs:{icon:e.onlyOneChild.meta.icon||e.item.meta&&e.item.meta.icon,title:e.onlyOneChild.meta.title}})],1)],1):e._e()]],2)},G=[],R=n("df7c"),J=n.n(R),U=n("61f7"),F=(n("caad"),n("2532"),{name:"MenuItem",functional:!0,props:{icon:{type:String,default:""},title:{type:String,default:""}},render:function(e,t){var n=t.props,a=n.icon,i=n.title,o=[];return a&&(a.includes("el-icon")?o.push(e("i",{class:[a,"sub-el-icon"]})):o.push(e("svg-icon",{attrs:{"icon-class":a}}))),i&&o.push(e("span",{slot:"title"},[i])),o}}),K=F,W=(n("f87e"),Object(k["a"])(K,a,i,!1,null,"18eeea00",null)),Q=W.exports,X=function(){var e=this,t=e.$createElement,n=e._self._c||t;return n(e.type,e._b({tag:"component"},"component",e.linkProps(e.to),!1),[e._t("default")],2)},Y=[],Z={props:{to:{type:String,required:!0}},computed:{isExternal:function(){return Object(U["a"])(this.to)},type:function(){return this.isExternal?"a":"router-link"}},methods:{linkProps:function(e){return this.isExternal?{href:e,target:"_blank",rel:"noopener"}:{to:e}}}},ee=Z,te=Object(k["a"])(ee,X,Y,!1,null,null,null),ne=te.exports,ae={computed:{device:function(){return this.$store.state.app.device}},mounted:function(){this.fixBugIniOS()},methods:{fixBugIniOS:function(){var e=this,t=this.$refs.subMenu;if(t){var n=t.handleMouseleave;t.handleMouseleave=function(t){"mobile"!==e.device&&n(t)}}}}},ie={name:"SidebarItem",components:{Item:Q,AppLink:ne},mixins:[ae],props:{item:{type:Object,required:!0},isNest:{type:Boolean,default:!1},basePath:{type:String,default:""}},data:function(){return this.onlyOneChild=null,{}},methods:{hasOneShowingChild:function(){var e=this,t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:[],n=arguments.length>1?arguments[1]:void 0,a=t.filter((function(t){return!t.hidden&&(e.onlyOneChild=t,!0)}));return 1===a.length||0===a.length&&(this.onlyOneChild=Object(m["a"])(Object(m["a"])({},n),{},{path:"",noShowingChildren:!0}),!0)},resolvePath:function(e){return Object(U["a"])(e)?e:Object(U["a"])(this.basePath)?this.basePath:J.a.resolve(this.basePath,e)}}},oe=ie,se=Object(k["a"])(oe,q,G,!1,null,null,null),ce=se.exports,re=n("cf1e"),ue=n.n(re),le={components:{SidebarItem:ce,Logo:D},computed:Object(m["a"])(Object(m["a"])({},Object(f["b"])(["sidebar"])),{},{routes:function(){return this.$router.options.routes},activeMenu:function(){var e=this.$route,t=e.meta,n=e.path;return t.activeMenu?t.activeMenu:n},showLogo:function(){return this.$store.state.settings.sidebarLogo},variables:function(){return ue.a},isCollapse:function(){return!this.sidebar.opened}})},de=le,he=Object(k["a"])(de,A,V,!1,null,null,null),me=he.exports,fe=function(){var e=this,t=e.$createElement,n=e._self._c||t;return n("section",{staticClass:"app-main"},[n("transition",{attrs:{name:"fade-transform",mode:"out-in"}},[n("router-view",{key:e.key})],1)],1)},pe=[],ve={name:"AppMain",computed:{key:function(){return this.$route.path}}},be=ve,ge=(n("2224"),n("0ae2d"),Object(k["a"])(be,fe,pe,!1,null,"64cf4d83",null)),we=ge.exports,xe=n("4360"),ke=document,ye=ke.body,_e=992,Ce={watch:{$route:function(e){"mobile"===this.device&&this.sidebar.opened&&xe["a"].dispatch("app/closeSideBar",{withoutAnimation:!1})}},beforeMount:function(){window.addEventListener("resize",this.$_resizeHandler)},beforeDestroy:function(){window.removeEventListener("resize",this.$_resizeHandler)},mounted:function(){var e=this.$_isMobile();e&&(xe["a"].dispatch("app/toggleDevice","mobile"),xe["a"].dispatch("app/closeSideBar",{withoutAnimation:!0}))},methods:{$_isMobile:function(){var e=ye.getBoundingClientRect();return e.width-1<_e},$_resizeHandler:function(){if(!document.hidden){var e=this.$_isMobile();xe["a"].dispatch("app/toggleDevice",e?"mobile":"desktop"),e&&xe["a"].dispatch("app/closeSideBar",{withoutAnimation:!0})}}}},Oe={name:"Layout",components:{Navbar:j,Sidebar:me,AppMain:we},mixins:[Ce],computed:{sidebar:function(){return this.$store.state.app.sidebar},device:function(){return this.$store.state.app.device},fixedHeader:function(){return this.$store.state.settings.fixedHeader},classObj:function(){return{hideSidebar:!this.sidebar.opened,openSidebar:this.sidebar.opened,withoutAnimation:this.sidebar.withoutAnimation,mobile:"mobile"===this.device}}},methods:{handleClickOutside:function(){this.$store.dispatch("app/closeSideBar",{withoutAnimation:!1})}}},ze=Oe,Ee=(n("9353"),Object(k["a"])(ze,c,r,!1,null,"4f739cf0",null)),Se=Ee.exports;o["default"].use(s["a"]);var He=[{path:"/login",component:function(){return n.e("chunk-510f32e7").then(n.bind(null,"9ed6"))},hidden:!0},{path:"/404",component:function(){return n.e("chunk-22cea610").then(n.bind(null,"8cdb"))},hidden:!0},{path:"/",component:Se,redirect:"/dashboard",children:[{path:"dashboard",name:"首页",component:function(){return Promise.all([n.e("chunk-019c66da"),n.e("chunk-6f60c8f1"),n.e("chunk-4a014042")]).then(n.bind(null,"9406"))},meta:{title:"首页",icon:"dashboard"}}]},{path:"/server",component:Se,children:[{path:"config",name:"服务配置",component:function(){return Promise.all([n.e("chunk-019c66da"),n.e("chunk-e4980b30")]).then(n.bind(null,"88aa"))},meta:{title:"服务配置",icon:"example"}}]},{path:"/vehicle",component:Se,children:[{path:"instance",name:"数据模拟",component:function(){return Promise.all([n.e("chunk-019c66da"),n.e("chunk-cd3ab578")]).then(n.bind(null,"ba75"))},meta:{title:"数据模拟",icon:"form"}}]},{path:"*",redirect:"/404",hidden:!0}],Me=function(){return new s["a"]({scrollBehavior:function(){return{y:0}},routes:He})},Be=Me();function Te(){var e=Me();Be.matcher=e.matcher}t["a"]=Be},b20f:function(e,t,n){e.exports={menuText:"#bfcbd9",menuActiveText:"#409eff",subMenuActiveText:"#f4f4f5",menuBg:"#304156",menuHover:"#263445",subMenuBg:"#1f2d3d",subMenuHover:"#001528",sideBarWidth:"210px"}},b3b5:function(e,t,n){"use strict";n.r(t);var a=n("e017"),i=n.n(a),o=n("21a1"),s=n.n(o),c=new i.a({id:"icon-user",use:"icon-user-usage",viewBox:"0 0 130 130",content:''});s.a.add(c);t["default"]=c},c459:function(e,t,n){},cbd7:function(e,t,n){},cf1e:function(e,t,n){e.exports={menuText:"#bfcbd9",menuActiveText:"#409eff",subMenuActiveText:"#f4f4f5",menuBg:"#304156",menuHover:"#263445",subMenuBg:"#1f2d3d",subMenuHover:"#001528",sideBarWidth:"210px"}},d633:function(e,t,n){"use strict";n("88a1")},d7ec:function(e,t,n){"use strict";n.r(t);var a=n("e017"),i=n.n(a),o=n("21a1"),s=n.n(o),c=new i.a({id:"icon-eye-open",use:"icon-eye-open-usage",viewBox:"0 0 1024 1024",content:''});s.a.add(c);t["default"]=c},dcf8:function(e,t,n){"use strict";n.r(t);var a=n("e017"),i=n.n(a),o=n("21a1"),s=n.n(o),c=new i.a({id:"icon-nested",use:"icon-nested-usage",viewBox:"0 0 128 128",content:''});s.a.add(c);t["default"]=c},eb1b:function(e,t,n){"use strict";n.r(t);var a=n("e017"),i=n.n(a),o=n("21a1"),s=n.n(o),c=new i.a({id:"icon-form",use:"icon-form-usage",viewBox:"0 0 128 128",content:''});s.a.add(c);t["default"]=c},f6c3:function(e,t,n){},f782:function(e,t,n){"use strict";n.r(t);var a=n("e017"),i=n.n(a),o=n("21a1"),s=n.n(o),c=new i.a({id:"icon-dashboard",use:"icon-dashboard-usage",viewBox:"0 0 128 100",content:''});s.a.add(c);t["default"]=c},f87e:function(e,t,n){"use strict";n("279e")}},[[0,"runtime","chunk-elementUI","chunk-libs"]]]); \ No newline at end of file diff --git a/src/main/resources/static/js/chunk-e4980b30.83907799.js b/src/main/resources/static/js/chunk-e4980b30.83907799.js new file mode 100644 index 0000000..76e9077 --- /dev/null +++ b/src/main/resources/static/js/chunk-e4980b30.83907799.js @@ -0,0 +1 @@ +(window["webpackJsonp"]=window["webpackJsonp"]||[]).push([["chunk-e4980b30"],{"88aa":function(e,t,r){"use strict";r.r(t);var s=function(){var e=this,t=e.$createElement,r=e._self._c||t;return r("div",{staticStyle:{margin:"10px"}},[r("el-row",{attrs:{gutter:20}},[r("el-col",{attrs:{span:24}},[r("el-switch",{staticStyle:{float:"left",margin:"10px 20px"},attrs:{"active-color":"#13ce66","inactive-color":"#ff4949","active-text":"开启修改","inactive-text":"只查看"},model:{value:e.isUpdate,callback:function(t){e.isUpdate=t},expression:"isUpdate"}}),e.isUpdate?r("el-button",{staticStyle:{float:"left"},on:{click:e.editServerConfig}},[e._v("提交并刷新配置")]):e._e()],1),r("el-col",{attrs:{xs:24,md:12}},[r("el-card",{staticClass:"box-card"},[r("div",{staticClass:"clearfix",attrs:{slot:"header"},slot:"header"},[r("span",[e._v("负载均衡服务器配置")])]),r("div",{staticClass:"text item"},[r("el-form",{ref:"form",attrs:{model:e.serverConfig,"label-width":"120px"}},[r("el-form-item",{attrs:{label:"负载服务地址"}},[r("el-input",{attrs:{disabled:!e.isUpdate},model:{value:e.serverConfig.host,callback:function(t){e.$set(e.serverConfig,"host",t)},expression:"serverConfig.host"}})],1),r("el-form-item",{attrs:{label:"负载服务端口"}},[r("el-input",{attrs:{disabled:!e.isUpdate},model:{value:e.serverConfig.port,callback:function(t){e.$set(e.serverConfig,"port",t)},expression:"serverConfig.port"}})],1),r("el-form-item",{attrs:{label:"负载服务API地址"}},[r("el-input",{attrs:{disabled:!e.isUpdate},model:{value:e.serverConfig.loadUrl,callback:function(t){e.$set(e.serverConfig,"loadUrl",t)},expression:"serverConfig.loadUrl"}})],1)],1)],1)])],1),r("el-col",{attrs:{xs:24,md:12}},[r("el-card",{staticClass:"box-card"},[r("div",{staticClass:"clearfix",attrs:{slot:"header"},slot:"header"},[r("span",[e._v("默认MQTT配置")])]),r("div",{staticClass:"text item"},[r("el-form",{ref:"form",attrs:{model:e.serverConfig,"label-width":"120px"}},[r("el-form-item",{attrs:{label:"MQTT默认地址"}},[r("el-input",{attrs:{disabled:!e.isUpdate},model:{value:e.serverConfig.defaultMqttAddr,callback:function(t){e.$set(e.serverConfig,"defaultMqttAddr",t)},expression:"serverConfig.defaultMqttAddr"}})],1),r("el-form-item",{attrs:{label:"MQTT默认主题"}},[r("el-input",{attrs:{disabled:!e.isUpdate},model:{value:e.serverConfig.defaultMqttTopic,callback:function(t){e.$set(e.serverConfig,"defaultMqttTopic",t)},expression:"serverConfig.defaultMqttTopic"}})],1),r("el-form-item",{attrs:{label:"MQTT交付级别"}},[r("el-input",{attrs:{disabled:!e.isUpdate},model:{value:e.serverConfig.defaultMqttQos,callback:function(t){e.$set(e.serverConfig,"defaultMqttQos",t)},expression:"serverConfig.defaultMqttQos"}})],1)],1)],1)])],1)],1)],1)},o=[],a=r("b775");function i(){return Object(a["a"])({url:"/vehicle/server/config",method:"get"})}function n(e){return Object(a["a"])({url:"/vehicle/server/config",method:"PUT",data:e})}var l={name:"ServerConfig",data:function(){return{isUpdate:!1,serverConfig:{host:null,port:null,loadUrl:null,defaultMqttAddr:null,defaultMqttTopic:null,defaultMqttQos:null}}},created:function(){this.getServerConfig()},methods:{getServerConfig:function(){var e=this;i().then((function(t){e.serverConfig=t.data}))},editServerConfig:function(){var e=this;n(this.serverConfig).then((function(t){e.$notify({title:"操作提示",message:t.msg,type:200===t.code?"success":"error"}),200===t.code&&(e.isUpdate=!1)}))}}},c=l,d=(r("8bce"),r("2877")),f=Object(d["a"])(c,s,o,!1,null,"1fac6224",null);t["default"]=f.exports},"8bce":function(e,t,r){"use strict";r("f557")},b775:function(e,t,r){"use strict";r("d3b7");var s=r("bc3a"),o=r.n(s),a=r("5c96"),i=r("4360"),n=r("5f87"),l=o.a.create({baseURL:"/",timeout:5e3});l.interceptors.request.use((function(e){return i["a"].getters.token&&(e.headers["X-Token"]=Object(n["a"])()),e}),(function(e){return console.log(e),Promise.reject(e)})),l.interceptors.response.use((function(e){var t=e.data;return 200!==t.code?(Object(a["Message"])({message:t.msg||"Error",type:"error",duration:5e3}),50008!==t.code&&50012!==t.code&&50014!==t.code||a["MessageBox"].confirm("You have been logged out, you can cancel to stay on this page, or log in again","Confirm logout",{confirmButtonText:"Re-Login",cancelButtonText:"Cancel",type:"warning"}).then((function(){i["a"].dispatch("user/resetToken").then((function(){location.reload()}))})),Promise.reject(new Error(t.msg||"Error"))):t}),(function(e){return console.log("err"+e),Object(a["Message"])({message:e.message,type:"error",duration:5e3}),Promise.reject(e)})),t["a"]=l},f557:function(e,t,r){}}]); \ No newline at end of file diff --git a/src/test/java/com/AdminTest.java b/src/test/java/com/AdminTest.java index efd978d..b3fb277 100644 --- a/src/test/java/com/AdminTest.java +++ b/src/test/java/com/AdminTest.java @@ -21,8 +21,8 @@ public class AdminTest { @Test public void vehicleConnTest(){ - Result result = clientAdmin.vehicleConnection( - VehicleConnectionReq.builder() + Result result = clientAdmin.getVehicleLoadAddr( + serviceConfigProperties, VehicleConnectionReq.builder() .vin("VIN1234567894") .timestamp(String.valueOf(System.currentTimeMillis())) .userName("156841600")