zhaohe 1 year ago
parent
commit
de7fdb4d48
  1. 247
      src/main/java/a8k/hardware/controler/Controler.java
  2. 69
      src/main/java/a8k/service/db/dao/SamplesPreProcessModuleCtrlParamsService.java
  3. 4
      src/main/java/a8k/service/hardware/HbotControlService.java
  4. 2
      src/main/java/a8k/service/hardware/ModuleRegConfigMgrService.java
  5. 2
      src/main/java/a8k/service/hardware/ReactionPlatesTransmitCtrlService.java
  6. 20
      src/main/java/a8k/service/hardware/SamplesPreProcessModuleCtrlService.java
  7. 10
      src/main/java/a8k/utils/HardwareService.java
  8. 11
      src/main/java/a8k/utils/HardwareServiceAction.java
  9. 11
      src/main/java/a8k/utils/HardwareServiceActionParam.java
  10. 11
      src/main/java/a8k/utils/HardwareServiceParam.java
  11. 10
      src/main/java/a8k/utils/HardwareServiceParams.java
  12. 12
      src/main/java/a8k/utils/HardwareServiceStatus.java
  13. 2
      src/main/resources/static/test/css/app.904d7563.css
  14. 2
      src/main/resources/static/test/index.html
  15. 2
      src/main/resources/static/test/js/app.0f059b0e.js
  16. 1
      src/main/resources/static/test/js/app.0f059b0e.js.map
  17. 2
      src/main/resources/static/test/js/app.e8dec210.js
  18. 1
      src/main/resources/static/test/js/app.e8dec210.js.map
  19. 33
      src/main/resources/static/test/js/chunk-vendors.c938f438.js
  20. 1
      src/main/resources/static/test/js/chunk-vendors.c938f438.js.map
  21. 33
      src/main/resources/static/test/js/chunk-vendors.feed1d4c.js
  22. 1
      src/main/resources/static/test/js/chunk-vendors.feed1d4c.js.map

247
src/main/java/a8k/hardware/controler/Controler.java

@ -1,4 +1,249 @@
package a8k.hardware.controler;
import a8k.appbean.ecode.AppRet;
import a8k.service.db.entity.HardwareServiceSetting;
import a8k.utils.*;
import com.iflytop.uf.UfApplication;
import com.iflytop.uf.util.UfClassHelper;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.ResponseBody;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
@Controller
public class Controler {
@PostMapping("/api/service-config/service-list")
@ResponseBody
public AppRet<Object> services() {
List<Map<String, Object>> services = new ArrayList<>();
var classes = UfClassHelper.getAllClassesInPackage("a8k");
for (var clazz : classes) {
var hardwareServiceAnnotation = clazz.getAnnotation(HardwareService.class);
if (null == hardwareServiceAnnotation) {
continue ;
}
Map<String,Object> service = new HashMap<>();
service.put("key", clazz.getSimpleName());
service.put("name", hardwareServiceAnnotation.name());
services.add(service);
}
return AppRet.success(services);
}
@PostMapping("/api/service-config/service-params-list")
@ResponseBody
public AppRet<Object> serviceParams( @RequestBody Map<String, Object> params )
throws InvocationTargetException, IllegalAccessException {
String serviceKey = (String)params.get("serviceKey");
Class<?> paramClass = null;
var classes = UfClassHelper.getAllClassesInPackage("a8k");
for (var clazz : classes) {
var hardwareServiceParamsAnnotation = clazz.getAnnotation(HardwareServiceParams.class);
if (null == hardwareServiceParamsAnnotation) {
continue ;
}
var serviceClass = hardwareServiceParamsAnnotation.service();
if (!serviceClass.getSimpleName().equals(serviceKey)) {
continue ;
}
paramClass = clazz;
break;
}
List<Map<String,Object>> list = new ArrayList<>();
if ( null == paramClass ) {
return AppRet.success(list);
}
var paramService = UfApplication.getContext().getBean(paramClass);
var methods = paramClass.getMethods();
for ( var method : methods ) {
var methodName = method.getName();
if ( !methodName.startsWith("get") ) {
continue;
}
var paramAnnotation = method.getAnnotation(HardwareServiceParam.class);
if (null == paramAnnotation) {
continue ;
}
Map<String,Object> param = new HashMap<>();
param.put("key", methodName.substring(3));
param.put("type", method.getReturnType().getSimpleName());
param.put("group", paramAnnotation.group());
param.put("name",paramAnnotation.name());
param.put("value", method.invoke(paramService));
list.add(param);
}
return AppRet.success(list);
}
@PostMapping("/api/service-config/service-params-update")
@ResponseBody
public AppRet<Object> serviceParamsUpdate( @RequestBody Map<String, Object> params ) throws Exception {
String serviceKey = (String)params.get("serviceKey");
Map<String,Object> newParams = (Map<String,Object>)params.get("params");
for ( var param : newParams.entrySet() ) {
var name = param.getKey();
var value = param.getValue();
var options = HardwareServiceSetting.getOption(serviceKey, name);
options.setValue(value);
options.save();
}
return AppRet.success();
}
@PostMapping("/api/service-config/service-status-list")
@ResponseBody
public AppRet<Object> serviceStatus( @RequestBody Map<String, Object> params ) throws InvocationTargetException, IllegalAccessException {
String serviceKey = (String)params.get("serviceKey");
Class<?> serviceClass = null;
var classes = UfClassHelper.getAllClassesInPackage("a8k");
for (var clazz : classes) {
var hardwareServiceAnnotation = clazz.getAnnotation(HardwareService.class);
if (null == hardwareServiceAnnotation || !clazz.getSimpleName().equals(serviceKey)) {
continue ;
}
serviceClass = clazz;
break;
}
List<Map<String,Object>> statusList = new ArrayList<>();
if ( null == serviceClass ) {
return AppRet.success(statusList);
}
var service = UfApplication.getContext().getBean(serviceClass);
var methods = serviceClass.getMethods();
for ( var method : methods ) {
var statusAnnotation = method.getAnnotation(HardwareServiceStatus.class);
if ( null == statusAnnotation ) {
continue;
}
var status = new HashMap<String,Object>();
status.put("name", statusAnnotation.name());
var value = method.invoke(service);
status.put("value", value);
statusList.add(status);
}
return AppRet.success(statusList);
}
@PostMapping("/api/service-config/service-action-list")
@ResponseBody
public AppRet<Object> serviceActionList( @RequestBody Map<String, Object> params ) throws Exception {
String serviceKey = (String)params.get("serviceKey");
Class<?> serviceClass = null;
var classes = UfClassHelper.getAllClassesInPackage("a8k");
for (var clazz : classes) {
var hardwareServiceAnnotation = clazz.getAnnotation(HardwareService.class);
if (null == hardwareServiceAnnotation || !clazz.getSimpleName().equals(serviceKey)) {
continue ;
}
serviceClass = clazz;
break;
}
List<Map<String,Object>> actions = new ArrayList<>();
if ( null == serviceClass ) {
return AppRet.success(actions);
}
var methodList = serviceClass.getMethods();
for ( var method : methodList ) {
var actionAnnotation = method.getAnnotation(HardwareServiceAction.class);
if ( null == actionAnnotation ) {
continue ;
}
var action = new HashMap<String,Object>();
action.put("key", method.getName());
action.put("name", actionAnnotation.name());
action.put("group", actionAnnotation.group());
var actionParams = new ArrayList<Map<String,Object>>();
var actionParamList = method.getParameters();
for ( var param : actionParamList ) {
var actionParam = new HashMap<String, Object>();
actionParam.put("key", param.getName());
actionParam.put("type", param.getType().getName());
if ( param.getType().isEnum() ) {
actionParam.put("type", "Enum");
actionParam.put("typeEnum", param.getType().getName());
var paramOptions = new ArrayList<Map<String,Object>>();
var values = param.getType().getEnumConstants();
for ( var value : values ) {
var str = value.toString();
var paramOption = new HashMap<String, Object>();
paramOption.put("name", str);
paramOption.put("value", str);
paramOptions.add(paramOption);
}
actionParam.put("options", paramOptions);
}
actionParam.put("name", param.getName());
var annotation = param.getAnnotation(HardwareServiceActionParam.class);
if ( null != annotation ) {
actionParam.put("name", annotation.name());
}
actionParams.add(actionParam);
}
action.put("params", actionParams);
actions.add(action);
}
return AppRet.success(actions);
}
@PostMapping("/api/service-config/service-action-exec")
@ResponseBody
public AppRet<Object> serviceActionExecute( @RequestBody Map<String, Object> params ) throws Exception {
String serviceKey = (String)params.get("serviceKey");
Class<?> serviceClass = null;
var classes = UfClassHelper.getAllClassesInPackage("a8k");
for (var clazz : classes) {
var hardwareServiceAnnotation = clazz.getAnnotation(HardwareService.class);
if (null == hardwareServiceAnnotation || !clazz.getSimpleName().equals(serviceKey)) {
continue ;
}
serviceClass = clazz;
break;
}
if ( null == serviceClass ) {
return AppRet.success();
}
var actionName = (String)params.get("action");
var actionParams = (List<Object>)params.get("params");
var actionParamTypes = (List<String>)params.get("paramTypes");
Class<?>[] parameterTypes = new Class[actionParams.size()];
for(int i = 0; i < actionParams.size(); ++i) {
var name = actionParamTypes.get(i);
parameterTypes[i] = Class.forName(name);
}
Method method = serviceClass.getMethod(actionName, parameterTypes);
var parameters = method.getParameters();
for ( int i=0; i<parameters.length; i++ ) {
var parameter = parameters[i];
if ( parameter.getType().isEnum() ) {
var methodValueOf = parameter.getType().getMethod("valueOf", String.class);
var value = methodValueOf.invoke(null, actionParams.get(i));
actionParams.set(i, value);
}
}
var service = UfApplication.getContext().getBean(serviceClass);
Object actionResult = null;
if ( method.getReturnType().equals(Void.TYPE) ) {
method.invoke(service, actionParams.toArray());
} else {
actionResult = method.invoke(service, actionParams.toArray());
}
return AppRet.success(actionResult);
}
}

69
src/main/java/a8k/service/db/dao/SamplesPreProcessModuleCtrlParamsService.java

@ -1,16 +1,18 @@
package a8k.service.db.dao;
import a8k.service.db.entity.HardwareServiceSetting;
import a8k.service.hardware.SamplesPreProcessModuleCtrlService;
import a8k.utils.HardwareServiceParam;
import a8k.utils.HardwareServiceParams;
import com.iflytop.uf.UfActiveRecord;
import org.springframework.stereotype.Component;
import java.util.List;
import java.util.Map;
/**
* 样本预处理相关参数访问
*/
@Component
@HardwareServiceParams(service=SamplesPreProcessModuleCtrlService.class)
public class SamplesPreProcessModuleCtrlParamsService {
/**
@ -19,130 +21,109 @@ public class SamplesPreProcessModuleCtrlParamsService {
*/
public final String serviceName = "SamplesPreProcessModuleCtrlService";
// 回零超时时间
@HardwareServiceParam(name="回零超时时间")
public int getMoveToZeroOvertime() {
// 索引为 "SamplesPreProcessModuleCtrlService" "MoveToZeroOvertime"
return HardwareServiceSetting.getInteger(this.serviceName, "MoveToZeroOvertime", 0);
}
// 执行动作的超时时间该超时时间适用于当前模块在当前产品中所有动作的最大时间
@HardwareServiceParam(name="执行动作的超时时间")
public int getActionOvertime() {
// 索引为 "SamplesPreProcessModuleCtrlService" "MoveToZeroOvertime"
return HardwareServiceSetting.getInteger(this.serviceName, "ActionOvertime", 0);
}
/**
* 升降电机相关位置
*/
@HardwareServiceParam(name="5ML全血试管取试管位置", group="升降电机")
public int getZMotor_HighBloodTakeTubeHeight() {
return HardwareServiceSetting.getInteger(this.serviceName, "ZMotor_HighBloodTakeTubeHeight", 0);
}
@HardwareServiceParam(name="3ML全血试管取试管位置", group="升降电机")
public int getZMotor_ShortBloodTakeTubeHeight() {
return HardwareServiceSetting.getInteger(this.serviceName, "ZMotor_ShortBloodTakeTubeHeight", 0);
}
// 高全血试管取帽位置
@HardwareServiceParam(name="5ML全血试管取帽位置", group="升降电机")
public int getZMotor_HighBloodTakeCapHeight() {
return HardwareServiceSetting.getInteger(this.serviceName, "ZMotor_HighBloodTakeCapHeight", 0);
}
// 矮全血试管取帽位置
@HardwareServiceParam(name="3ML全血试管取帽位置", group="升降电机")
public int getZMotor_ShortBloodTakeCapHeight() {
return HardwareServiceSetting.getInteger(this.serviceName, "ZMotor_ShortBloodTakeCapHeight", 0);
}
// 高试管帽子判断位置
@HardwareServiceParam(name="5ML全血试管帽子判断位置", group="升降电机")
public int getZMotor_HighBloodCapJudgeHeight() {
return HardwareServiceSetting.getInteger(this.serviceName, "ZMotor_HighBloodCapJudgeHeight", 0);
}
// 矮全血试管帽子判断位置
@HardwareServiceParam(name="3ML全血试管帽子判断位置", group="升降电机")
public int getZMotor_ShortBloodCapJudgeHeight() {
return HardwareServiceSetting.getInteger(this.serviceName, "ZMotor_ShortBloodCapJudgeHeight", 0);
}
// 摇匀位放置高度
@HardwareServiceParam(name="摇匀位放置高度", group="升降电机")
public int getZMotor_placeShakeHeight() {
return HardwareServiceSetting.getInteger(this.serviceName, "ZMotor_placeShakeHeight", 0);
}
/*
* 平移电机相关参数
*/
// 水平移动电机待机位置
@HardwareServiceParam(name="待机位置", group="水平移动电机")
public int getHorizontalMotor_standbyPos() {
return HardwareServiceSetting.getInteger(this.serviceName, "HorizontalMotor_standbyPos", 0);
}
// 水平移动电机取帽位置
@HardwareServiceParam(name="取帽位置", group="水平移动电机")
public int getHorizontalMotor_takeCapPos() {
return HardwareServiceSetting.getInteger(this.serviceName, "HorizontalMotor_takeCapPos", 0);
}
// 水平移动电机放帽位置
@HardwareServiceParam(name="放帽位置", group="水平移动电机")
public int getHorizontalMotor_takePushCapPos() {
return HardwareServiceSetting.getInteger(this.serviceName, "HorizontalMotor_takePushCapPos", 0);
}
/*
* 抓手
*/
// 抓手舵机待机位置
@HardwareServiceParam(name="待机位置", group="抓手舵机")
public int getGripperServo_standbyPos() {
return HardwareServiceSetting.getInteger(this.serviceName, "GripperServo_standbyPos", 0);
}
// 抓手舵机取帽扭矩
@HardwareServiceParam(name="取帽扭矩", group="抓手舵机")
public int getGripperServo_takeCapTorque() {
return HardwareServiceSetting.getInteger(this.serviceName, "GripperServo_takeCapTorque", 0);
}
// 抓手舵机取试管位置
@HardwareServiceParam(name="取试管位置", group="抓手舵机")
public int getGripperServo_takeTubePos() {
return HardwareServiceSetting.getInteger(this.serviceName, "GripperServo_takeTubePos", 0);
}
// 判断是否有帽子的位置阈值
@HardwareServiceParam(name="判断是否有帽子的位置阈值", group="抓手舵机")
public int getGripperServo_hatDeterminesPosThres() {
return HardwareServiceSetting.getInteger(this.serviceName, "GripperServo_hatDeterminesPosThres", 0);
}
/*
* 摇匀电机
*/
// 摇匀电机待机位置
@HardwareServiceParam(name="待机位置", group="摇匀电机")
public int getShakeMotor_standbyPos() {
return HardwareServiceSetting.getInteger(this.serviceName, "ShakeMotor_standbyPos", 0);
}
// 摇匀电机摇匀角度
@HardwareServiceParam(name="摇匀角度", group="摇匀电机")
public int getShakeMotor_shakeDegree() {
return HardwareServiceSetting.getInteger(this.serviceName, "ShakeMotor_shakeDegree", 0);
}
/*
* 夹紧电机
*/
// 试管夹紧电机待机位置
@HardwareServiceParam(name="待机位置", group="试管夹紧电机")
public int getTubeClampMotor_standbyPos() {
return HardwareServiceSetting.getInteger(this.serviceName, "TubeClampMotor_standbyPos", 0);
}
// 试管夹紧电机夹紧位置
@HardwareServiceParam(name="夹紧位置", group="试管夹紧电机")
public int getTubeClampMotor_ClampPos() {
return HardwareServiceSetting.getInteger(this.serviceName, "TubeClampMotor_ClampPos", 0);
}
/*
* 气溶胶风扇控制参数
*/
// 气溶胶风扇风力大小(0->100)
@HardwareServiceParam(name="气溶胶风扇风力大小")
public int getAerosolFanLevel() {
return HardwareServiceSetting.getInteger(this.serviceName, "AerosolFanLevel", 100);
}

4
src/main/java/a8k/service/hardware/HbotControlService.java

@ -1,10 +1,14 @@
package a8k.service.hardware;
import a8k.a8k_can_protocol.A8kEcode;
import a8k.utils.HardwareService;
import org.springframework.stereotype.Component;
/**
* Hbot控制服务
*/
@Component
@HardwareService(name="Hbot控制")
public class HbotControlService {
/**

2
src/main/java/a8k/service/hardware/ModuleRegConfigMgrService.java

@ -1,9 +1,11 @@
package a8k.service.hardware;
import a8k.service.db.entity.ModuleRegConfigIterm;
import a8k.utils.HardwareService;
import org.springframework.stereotype.Component;
@Component
@HardwareService(name="模块配置")
public class ModuleRegConfigMgrService {

2
src/main/java/a8k/service/hardware/ReactionPlatesTransmitCtrlService.java

@ -7,6 +7,7 @@ import a8k.appbean.HardwareException;
import a8k.appbean.ecode.AppRet;
import a8k.base_hardware.A8kCanBusService;
import a8k.service.db.dao.ReactionPlatesTransmitCtrlParamDao;
import a8k.utils.HardwareService;
import jakarta.annotation.Resource;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@ -14,6 +15,7 @@ import org.springframework.stereotype.Component;
@Component
@HardwareService(name="反应板")
public class ReactionPlatesTransmitCtrlService {
static Logger logger = LoggerFactory.getLogger(ReactionPlatesTransmitCtrlService.class);

20
src/main/java/a8k/service/hardware/SamplesPreProcessModuleCtrlService.java

@ -47,11 +47,7 @@ public class SamplesPreProcessModuleCtrlService implements HardwareCtrlModule {
}
public Integer getGripperTakeCapPos() {
return 50;//垂直张开
}
public Integer getGripperTakeTubePos() {
return 300;//
return 60;//
}
public Integer getGripperTakeTubeYPos() {
@ -68,11 +64,11 @@ public class SamplesPreProcessModuleCtrlService implements HardwareCtrlModule {
// TakeTubeZ
public Integer getGripperTakeHTubeZPos() {
return 739 - 20;
return 739;
}
public Integer getGripperTakeSTubeZPos() {
return 980 - 20;
return 977;
}
//JudgeTubeCapZ
@ -86,7 +82,7 @@ public class SamplesPreProcessModuleCtrlService implements HardwareCtrlModule {
//ShakeTubeZ
public Integer getGripperShakeTubeZPos() {
return 835 - 20;
return 835;
}
//TakeCapZ
@ -235,7 +231,7 @@ public class SamplesPreProcessModuleCtrlService implements HardwareCtrlModule {
//试管夹紧移动到终点位置
logger.info("试管夹紧移动到终点位置");
canBus.stepMotorEasyMoveTo(MId.ShakeModClampingM, 60);
canBus.stepMotorEasyMoveTo(MId.ShakeModClampingM, 70);
canBus.waitForMod(MId.ShakeModClampingM, getActionOvertime());
actionDelay();
@ -292,8 +288,8 @@ public class SamplesPreProcessModuleCtrlService implements HardwareCtrlModule {
//夹爪夹紧
logger.info("夹爪夹紧");
canBus.miniServoRotateWithTorque(MId.ShakeModGripperSV, -getGripperTakeTubeTorque());
canBus.miniServoWaitIsNotMove(MId.ShakeModGripperSV, getActionOvertime());
canBus.miniServoMoveTo(MId.ShakeModGripperSV, getGripperTakeCapPos());
canBus.waitForMod(MId.ShakeModGripperSV, getActionOvertime());
actionDelay();
@ -374,7 +370,7 @@ public class SamplesPreProcessModuleCtrlService implements HardwareCtrlModule {
//Z下移动到取试管帽位置
logger.info("Z下移动到取试管帽位置");
canBus.stepMotorEasyMoveTo(MId.ShakeModGripperZM, getGripperTakeHTubeZPos());
canBus.stepMotorEasyMoveTo(MId.ShakeModGripperZM, getGripperTakeCapZPos() + 10);
canBus.waitForMod(MId.ShakeModGripperZM, getActionOvertime());
actionDelay();

10
src/main/java/a8k/utils/HardwareService.java

@ -0,0 +1,10 @@
package a8k.utils;
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
@Retention(RetentionPolicy.RUNTIME)
@Target({ElementType.TYPE})
public @interface HardwareService {
String name();
}

11
src/main/java/a8k/utils/HardwareServiceAction.java

@ -0,0 +1,11 @@
package a8k.utils;
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
@Retention(RetentionPolicy.RUNTIME)
@Target({ElementType.METHOD})
public @interface HardwareServiceAction {
String name();
String group() default "";
}

11
src/main/java/a8k/utils/HardwareServiceActionParam.java

@ -0,0 +1,11 @@
package a8k.utils;
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
@Retention(RetentionPolicy.RUNTIME)
@Target({ElementType.PARAMETER})
public @interface HardwareServiceActionParam {
String name();
}

11
src/main/java/a8k/utils/HardwareServiceParam.java

@ -0,0 +1,11 @@
package a8k.utils;
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
@Retention(RetentionPolicy.RUNTIME)
@Target({ElementType.METHOD})
public @interface HardwareServiceParam {
String name();
String group() default "";
}

10
src/main/java/a8k/utils/HardwareServiceParams.java

@ -0,0 +1,10 @@
package a8k.utils;
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
@Retention(RetentionPolicy.RUNTIME)
@Target({ElementType.TYPE})
public @interface HardwareServiceParams {
Class<?> service();
}

12
src/main/java/a8k/utils/HardwareServiceStatus.java

@ -0,0 +1,12 @@
package a8k.utils;
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
@Retention(RetentionPolicy.RUNTIME)
@Target({ElementType.METHOD})
public @interface HardwareServiceStatus {
String name();
String group() default "";
}

2
src/main/resources/static/test/css/app.904d7563.css
File diff suppressed because it is too large
View File

2
src/main/resources/static/test/index.html

@ -1 +1 @@
<!doctype html><html lang=""><head><meta charset="utf-8"><meta http-equiv="X-UA-Compatible" content="IE=edge"><meta name="viewport" content="width=device-width,initial-scale=1"><link rel="icon" href="favicon.ico"><title>a8k_webui</title><script defer="defer" src="js/chunk-vendors.c938f438.js"></script><script defer="defer" src="js/app.0f059b0e.js"></script><link href="css/app.570d7f4b.css" rel="stylesheet"></head><body><noscript><strong>We're sorry but a8k_webui doesn't work properly without JavaScript enabled. Please enable it to continue.</strong></noscript><div id="app"></div></body></html>
<!doctype html><html lang=""><head><meta charset="utf-8"><meta http-equiv="X-UA-Compatible" content="IE=edge"><meta name="viewport" content="width=device-width,initial-scale=1"><link rel="icon" href="favicon.ico"><title>a8k_webui</title><script defer="defer" src="js/chunk-vendors.feed1d4c.js"></script><script defer="defer" src="js/app.e8dec210.js"></script><link href="css/app.904d7563.css" rel="stylesheet"></head><body><noscript><strong>We're sorry but a8k_webui doesn't work properly without JavaScript enabled. Please enable it to continue.</strong></noscript><div id="app"></div></body></html>

2
src/main/resources/static/test/js/app.0f059b0e.js
File diff suppressed because it is too large
View File

1
src/main/resources/static/test/js/app.0f059b0e.js.map
File diff suppressed because it is too large
View File

2
src/main/resources/static/test/js/app.e8dec210.js
File diff suppressed because it is too large
View File

1
src/main/resources/static/test/js/app.e8dec210.js.map
File diff suppressed because it is too large
View File

33
src/main/resources/static/test/js/chunk-vendors.c938f438.js
File diff suppressed because it is too large
View File

1
src/main/resources/static/test/js/chunk-vendors.c938f438.js.map
File diff suppressed because it is too large
View File

33
src/main/resources/static/test/js/chunk-vendors.feed1d4c.js
File diff suppressed because it is too large
View File

1
src/main/resources/static/test/js/chunk-vendors.feed1d4c.js.map
File diff suppressed because it is too large
View File

Loading…
Cancel
Save