From 0a464bebf95303c84f79b2c250069ab5bab08be7 Mon Sep 17 00:00:00 2001 From: zhaohe Date: Sat, 8 Feb 2025 20:12:38 +0800 Subject: [PATCH] update --- .../app/extui/zextui/ExtUIPageMenuRegister.java | 28 ++ .../extui/zextui/page/SubDeviceDriverTestPage.java | 25 ++ .../service/backgroud/SensorReportPreAnalysis.java | 13 +- .../iflytop/app/utils/CoordinateCalculator.java | 38 ++- .../zeui/controler/EngineerRootPageControler.java | 29 ++ .../java/iflytop/zeui/service/RootMgrService.java | 37 +++ src/main/java/iflytop/zeui/type/EngineerPage.java | 7 + src/main/java/iflytop/zeui/type/display/Icon.java | 11 + .../java/iflytop/zeui/type/display/Remark.java | 17 ++ .../iflytop/zeui/type/features/ActionButton.java | 30 ++ .../iflytop/zeui/type/features/DropDownButton.java | 25 ++ src/main/java/iflytop/zeui/type/features/Nav.java | 71 +++++ .../zeui/type/features/ServiceContainer.java | 27 ++ src/main/java/iflytop/zeui/type/form/Form.java | 66 +++++ src/main/java/iflytop/zeui/type/form/FormItem.java | 48 ++++ .../java/iflytop/zeui/type/form/InputNumber.java | 12 + .../java/iflytop/zeui/type/form/InputText.java | 13 + src/main/java/iflytop/zeui/type/form/Select.java | 19 ++ src/main/java/iflytop/zeui/type/layout/Flex.java | 23 ++ src/main/java/iflytop/zeui/type/layout/Page.java | 36 +++ src/main/java/iflytop/zeui/type/layout/Tabs.java | 53 ++++ src/main/java/iflytop/zeui/type/options/Align.java | 5 + .../java/iflytop/zeui/type/options/Position.java | 5 + src/main/java/iflytop/zeui/type/options/Shape.java | 5 + src/main/java/iflytop/zeui/type/options/Size.java | 5 + .../java/iflytop/zeui/type/options/Trigger.java | 5 + .../iflytop/zextui/controler/ExtApiControler.java | 288 +++++++++++++++++++ .../zextui/controler/ExtApiControllerAdvice.java | 21 ++ .../iflytop/zextui/mgr/ExtApiPageGroupCfgMgr.java | 65 +++++ .../java/iflytop/zextui/mgr/ExtApiPageMgr.java | 29 ++ src/main/java/iflytop/zextui/type/ExApiPage.java | 5 + .../java/iflytop/zextui/type/ExUIFunction.java | 110 ++++++++ src/main/java/iflytop/zextui/type/ExUIParam.java | 11 + .../zextui/type/ExUIParamGetInitValFnType1.java | 6 + .../zextui/type/ExUIParamGetInitValFnType2.java | 6 + src/main/java/iflytop/zextui/type/ExtApiFn.java | 16 ++ src/main/java/iflytop/zextui/type/ExtApiStatu.java | 14 + .../java/iflytop/zextui/type/ExtUIPageCfg.java | 204 ++++++++++++++ src/main/java/iflytop/zextui/type/ExtUITab.java | 11 + src/main/java/iflytop/zextui/type/ExtUiTable.java | 109 ++++++++ src/main/java/iflytop/zextui/type/TabCfg.java | 19 ++ .../java/iflytop/zextui/type/param/ExtUIFile.java | 12 + .../iflytop/zextui/type/ret/EngineerUIRet.java | 39 +++ .../java/iflytop/zextui/type/ret/ExtApiCurve.java | 16 ++ .../zextui/type/ret/ExtUIDownloadTasks.java | 8 + .../iflytop/zextui/type/ret/FileToBeDownload.java | 9 + src/main/java/iflytop/zextui/utils/FieldUtils.java | 69 +++++ .../controler/EngineerRootPageControler.java | 30 -- .../iflytoplib/amiseui/service/RootMgrService.java | 37 --- .../java/iflytoplib/amiseui/type/EngineerPage.java | 7 - .../java/iflytoplib/amiseui/type/display/Icon.java | 11 - .../iflytoplib/amiseui/type/display/Remark.java | 20 -- .../amiseui/type/features/ActionButton.java | 30 -- .../amiseui/type/features/DropDownButton.java | 25 -- .../java/iflytoplib/amiseui/type/features/Nav.java | 71 ----- .../amiseui/type/features/ServiceContainer.java | 27 -- .../java/iflytoplib/amiseui/type/form/Form.java | 66 ----- .../iflytoplib/amiseui/type/form/FormItem.java | 48 ---- .../iflytoplib/amiseui/type/form/InputNumber.java | 12 - .../iflytoplib/amiseui/type/form/InputText.java | 13 - .../java/iflytoplib/amiseui/type/form/Select.java | 19 -- .../java/iflytoplib/amiseui/type/layout/Flex.java | 23 -- .../java/iflytoplib/amiseui/type/layout/Page.java | 38 --- .../java/iflytoplib/amiseui/type/layout/Tabs.java | 55 ---- .../iflytoplib/amiseui/type/options/Align.java | 5 - .../iflytoplib/amiseui/type/options/Position.java | 5 - .../iflytoplib/amiseui/type/options/Shape.java | 5 - .../java/iflytoplib/amiseui/type/options/Size.java | 5 - .../iflytoplib/amiseui/type/options/Trigger.java | 5 - .../zextui/controler/ExtApiControler.java | 305 --------------------- .../zextui/controler/ExtApiControllerAdvice.java | 21 -- .../zextui/mgr/ExtApiPageGroupCfgMgr.java | 69 ----- .../java/iflytoplib/zextui/mgr/ExtApiPageMgr.java | 29 -- .../java/iflytoplib/zextui/type/ExApiPage.java | 5 - .../java/iflytoplib/zextui/type/ExUIFunction.java | 110 -------- .../java/iflytoplib/zextui/type/ExUIParam.java | 11 - .../zextui/type/ExUIParamGetInitValFnType1.java | 6 - .../zextui/type/ExUIParamGetInitValFnType2.java | 6 - src/main/java/iflytoplib/zextui/type/ExtApiFn.java | 16 -- .../java/iflytoplib/zextui/type/ExtApiStatu.java | 14 - .../java/iflytoplib/zextui/type/ExtUIPageCfg.java | 204 -------------- src/main/java/iflytoplib/zextui/type/ExtUITab.java | 11 - .../java/iflytoplib/zextui/type/ExtUiTable.java | 109 -------- src/main/java/iflytoplib/zextui/type/TabCfg.java | 19 -- .../iflytoplib/zextui/type/param/ExtUIFile.java | 12 - .../iflytoplib/zextui/type/ret/EngineerUIRet.java | 39 --- .../iflytoplib/zextui/type/ret/ExtApiCurve.java | 16 -- .../zextui/type/ret/ExtUIDownloadTasks.java | 8 - .../zextui/type/ret/FileToBeDownload.java | 9 - .../java/iflytoplib/zextui/utils/FieldUtils.java | 69 ----- ui/zextui/src/App.vue | 70 ----- 91 files changed, 1705 insertions(+), 1730 deletions(-) create mode 100644 src/main/java/iflytop/app/extui/zextui/ExtUIPageMenuRegister.java create mode 100644 src/main/java/iflytop/app/extui/zextui/page/SubDeviceDriverTestPage.java create mode 100644 src/main/java/iflytop/zeui/controler/EngineerRootPageControler.java create mode 100644 src/main/java/iflytop/zeui/service/RootMgrService.java create mode 100644 src/main/java/iflytop/zeui/type/EngineerPage.java create mode 100644 src/main/java/iflytop/zeui/type/display/Icon.java create mode 100644 src/main/java/iflytop/zeui/type/display/Remark.java create mode 100644 src/main/java/iflytop/zeui/type/features/ActionButton.java create mode 100644 src/main/java/iflytop/zeui/type/features/DropDownButton.java create mode 100644 src/main/java/iflytop/zeui/type/features/Nav.java create mode 100644 src/main/java/iflytop/zeui/type/features/ServiceContainer.java create mode 100644 src/main/java/iflytop/zeui/type/form/Form.java create mode 100644 src/main/java/iflytop/zeui/type/form/FormItem.java create mode 100644 src/main/java/iflytop/zeui/type/form/InputNumber.java create mode 100644 src/main/java/iflytop/zeui/type/form/InputText.java create mode 100644 src/main/java/iflytop/zeui/type/form/Select.java create mode 100644 src/main/java/iflytop/zeui/type/layout/Flex.java create mode 100644 src/main/java/iflytop/zeui/type/layout/Page.java create mode 100644 src/main/java/iflytop/zeui/type/layout/Tabs.java create mode 100644 src/main/java/iflytop/zeui/type/options/Align.java create mode 100644 src/main/java/iflytop/zeui/type/options/Position.java create mode 100644 src/main/java/iflytop/zeui/type/options/Shape.java create mode 100644 src/main/java/iflytop/zeui/type/options/Size.java create mode 100644 src/main/java/iflytop/zeui/type/options/Trigger.java create mode 100644 src/main/java/iflytop/zextui/controler/ExtApiControler.java create mode 100644 src/main/java/iflytop/zextui/controler/ExtApiControllerAdvice.java create mode 100644 src/main/java/iflytop/zextui/mgr/ExtApiPageGroupCfgMgr.java create mode 100644 src/main/java/iflytop/zextui/mgr/ExtApiPageMgr.java create mode 100644 src/main/java/iflytop/zextui/type/ExApiPage.java create mode 100644 src/main/java/iflytop/zextui/type/ExUIFunction.java create mode 100644 src/main/java/iflytop/zextui/type/ExUIParam.java create mode 100644 src/main/java/iflytop/zextui/type/ExUIParamGetInitValFnType1.java create mode 100644 src/main/java/iflytop/zextui/type/ExUIParamGetInitValFnType2.java create mode 100644 src/main/java/iflytop/zextui/type/ExtApiFn.java create mode 100644 src/main/java/iflytop/zextui/type/ExtApiStatu.java create mode 100644 src/main/java/iflytop/zextui/type/ExtUIPageCfg.java create mode 100644 src/main/java/iflytop/zextui/type/ExtUITab.java create mode 100644 src/main/java/iflytop/zextui/type/ExtUiTable.java create mode 100644 src/main/java/iflytop/zextui/type/TabCfg.java create mode 100644 src/main/java/iflytop/zextui/type/param/ExtUIFile.java create mode 100644 src/main/java/iflytop/zextui/type/ret/EngineerUIRet.java create mode 100644 src/main/java/iflytop/zextui/type/ret/ExtApiCurve.java create mode 100644 src/main/java/iflytop/zextui/type/ret/ExtUIDownloadTasks.java create mode 100644 src/main/java/iflytop/zextui/type/ret/FileToBeDownload.java create mode 100644 src/main/java/iflytop/zextui/utils/FieldUtils.java delete mode 100644 src/main/java/iflytoplib/amiseui/controler/EngineerRootPageControler.java delete mode 100644 src/main/java/iflytoplib/amiseui/service/RootMgrService.java delete mode 100644 src/main/java/iflytoplib/amiseui/type/EngineerPage.java delete mode 100644 src/main/java/iflytoplib/amiseui/type/display/Icon.java delete mode 100644 src/main/java/iflytoplib/amiseui/type/display/Remark.java delete mode 100644 src/main/java/iflytoplib/amiseui/type/features/ActionButton.java delete mode 100644 src/main/java/iflytoplib/amiseui/type/features/DropDownButton.java delete mode 100644 src/main/java/iflytoplib/amiseui/type/features/Nav.java delete mode 100644 src/main/java/iflytoplib/amiseui/type/features/ServiceContainer.java delete mode 100644 src/main/java/iflytoplib/amiseui/type/form/Form.java delete mode 100644 src/main/java/iflytoplib/amiseui/type/form/FormItem.java delete mode 100644 src/main/java/iflytoplib/amiseui/type/form/InputNumber.java delete mode 100644 src/main/java/iflytoplib/amiseui/type/form/InputText.java delete mode 100644 src/main/java/iflytoplib/amiseui/type/form/Select.java delete mode 100644 src/main/java/iflytoplib/amiseui/type/layout/Flex.java delete mode 100644 src/main/java/iflytoplib/amiseui/type/layout/Page.java delete mode 100644 src/main/java/iflytoplib/amiseui/type/layout/Tabs.java delete mode 100644 src/main/java/iflytoplib/amiseui/type/options/Align.java delete mode 100644 src/main/java/iflytoplib/amiseui/type/options/Position.java delete mode 100644 src/main/java/iflytoplib/amiseui/type/options/Shape.java delete mode 100644 src/main/java/iflytoplib/amiseui/type/options/Size.java delete mode 100644 src/main/java/iflytoplib/amiseui/type/options/Trigger.java delete mode 100644 src/main/java/iflytoplib/zextui/controler/ExtApiControler.java delete mode 100644 src/main/java/iflytoplib/zextui/controler/ExtApiControllerAdvice.java delete mode 100644 src/main/java/iflytoplib/zextui/mgr/ExtApiPageGroupCfgMgr.java delete mode 100644 src/main/java/iflytoplib/zextui/mgr/ExtApiPageMgr.java delete mode 100644 src/main/java/iflytoplib/zextui/type/ExApiPage.java delete mode 100644 src/main/java/iflytoplib/zextui/type/ExUIFunction.java delete mode 100644 src/main/java/iflytoplib/zextui/type/ExUIParam.java delete mode 100644 src/main/java/iflytoplib/zextui/type/ExUIParamGetInitValFnType1.java delete mode 100644 src/main/java/iflytoplib/zextui/type/ExUIParamGetInitValFnType2.java delete mode 100644 src/main/java/iflytoplib/zextui/type/ExtApiFn.java delete mode 100644 src/main/java/iflytoplib/zextui/type/ExtApiStatu.java delete mode 100644 src/main/java/iflytoplib/zextui/type/ExtUIPageCfg.java delete mode 100644 src/main/java/iflytoplib/zextui/type/ExtUITab.java delete mode 100644 src/main/java/iflytoplib/zextui/type/ExtUiTable.java delete mode 100644 src/main/java/iflytoplib/zextui/type/TabCfg.java delete mode 100644 src/main/java/iflytoplib/zextui/type/param/ExtUIFile.java delete mode 100644 src/main/java/iflytoplib/zextui/type/ret/EngineerUIRet.java delete mode 100644 src/main/java/iflytoplib/zextui/type/ret/ExtApiCurve.java delete mode 100644 src/main/java/iflytoplib/zextui/type/ret/ExtUIDownloadTasks.java delete mode 100644 src/main/java/iflytoplib/zextui/type/ret/FileToBeDownload.java delete mode 100644 src/main/java/iflytoplib/zextui/utils/FieldUtils.java diff --git a/src/main/java/iflytop/app/extui/zextui/ExtUIPageMenuRegister.java b/src/main/java/iflytop/app/extui/zextui/ExtUIPageMenuRegister.java new file mode 100644 index 0000000..b516172 --- /dev/null +++ b/src/main/java/iflytop/app/extui/zextui/ExtUIPageMenuRegister.java @@ -0,0 +1,28 @@ +package iflytop.app.extui.zextui; + +import iflytop.app.extui.zextui.page.SubDeviceDriverTestPage; +import iflytop.app.utils.ZList; +import iflytop.zextui.mgr.ExtApiPageGroupCfgMgr.*; +import iflytop.zextui.mgr.ExtApiPageGroupCfgMgr; +import jakarta.annotation.PostConstruct; +import jakarta.annotation.Resource; +import org.springframework.stereotype.Component; + +@Component +public class ExtUIPageMenuRegister { + @Resource + ExtApiPageGroupCfgMgr groupCfgMgr; + + + public void pushMenu(Menu label) { + groupCfgMgr.pushMenu(label); + } + + @PostConstruct + void init() { + pushMenu(new Menu("硬件测试", ZList.of( + new Menu(SubDeviceDriverTestPage.class, "串口通道测试") + ))); + + } +} diff --git a/src/main/java/iflytop/app/extui/zextui/page/SubDeviceDriverTestPage.java b/src/main/java/iflytop/app/extui/zextui/page/SubDeviceDriverTestPage.java new file mode 100644 index 0000000..ab90456 --- /dev/null +++ b/src/main/java/iflytop/app/extui/zextui/page/SubDeviceDriverTestPage.java @@ -0,0 +1,25 @@ +package iflytop.app.extui.zextui.page; + +import iflytop.zextui.mgr.ExtApiPageMgr; +import jakarta.annotation.PostConstruct; +import jakarta.annotation.Resource; +import org.springframework.stereotype.Component; + +@Component +public class SubDeviceDriverTestPage { + @Resource + ExtApiPageMgr extApiPageMgr; + + public void start() { + + } + + @PostConstruct + public void init() { + var page = extApiPageMgr.newPage(this); + page.newGroup("设备控制"); + page.addFunction("开始", this::start); + extApiPageMgr.addPage(page); + } + +} diff --git a/src/main/java/iflytop/app/service/backgroud/SensorReportPreAnalysis.java b/src/main/java/iflytop/app/service/backgroud/SensorReportPreAnalysis.java index af823c7..7e8ad2a 100644 --- a/src/main/java/iflytop/app/service/backgroud/SensorReportPreAnalysis.java +++ b/src/main/java/iflytop/app/service/backgroud/SensorReportPreAnalysis.java @@ -1,9 +1,11 @@ package iflytop.app.service.backgroud; +import iflytop.app.config.AppConstantConfig; import iflytop.app.driver.SubDeviceDriver; import iflytop.app.type.XYPoint; import iflytop.app.type.protocol.TPMIPacket; import iflytop.app.type.protocol.TPMISensorValReport; +import iflytop.app.utils.CoordinateCalculator; import iflytop.app.utils.ZList; import jakarta.annotation.PostConstruct; import jakarta.annotation.Resource; @@ -34,9 +36,18 @@ public class SensorReportPreAnalysis { if (report == null) return; - log.info("report: {}", report); + Integer arm0Angle = report.getArm0Angle(); + Integer arm1Angle = report.getArm1Angle(); + + Double arm0rad = arm0Angle * 1.0 / AppConstantConfig.ENCODER_ACCURACY * 2 * Math.PI; + Double arm1rad = arm1Angle * 1.0 / AppConstantConfig.ENCODER_ACCURACY * 2 * Math.PI; + + + var xypoint = CoordinateCalculator.calculator(AppConstantConfig.SENSOR_ARM0_LENGTH_MM, arm0rad, AppConstantConfig.SENSOR_ARM1_LENGTH_MM, arm1rad); + + // xyPoints.add(new XYPoint(report.x, report.y)); } diff --git a/src/main/java/iflytop/app/utils/CoordinateCalculator.java b/src/main/java/iflytop/app/utils/CoordinateCalculator.java index c589e5f..aee75fa 100644 --- a/src/main/java/iflytop/app/utils/CoordinateCalculator.java +++ b/src/main/java/iflytop/app/utils/CoordinateCalculator.java @@ -1,6 +1,8 @@ package iflytop.app.utils; +import iflytop.app.config.AppConstantConfig; import iflytop.app.type.XYPoint; +import iflytop.app.type.protocol.TPMISensorValReport; import lombok.extern.slf4j.Slf4j; import org.springframework.util.Assert; @@ -10,6 +12,24 @@ import static java.lang.Math.abs; @Slf4j public class CoordinateCalculator { + + static public XYPoint calculator(Double arm0Length, Double arm0Rad, Double arm1Length, Double arm1Rad) { + XYPoint xyPoint = new XYPoint(); double lval = calculateThirdSide(arm0Length, arm1Length, Math.PI - arm1Rad); if (lval < 0.000001) { + xyPoint.x = 0.0; xyPoint.y = 0.0; + } else { + double rad0 = calculateAngle(arm0Length, lval, arm1Length); double lrad = 0.0; if (arm1Rad > 0) { + lrad = arm0Rad + rad0; + } else { + lrad = arm0Rad - rad0; + } xyPoint.x = lval * Math.sin(lrad); xyPoint.y = lval * Math.cos(lrad); + } return xyPoint; + } + + + // + // PRIVATE + // + public static double calculateThirdSide(double a, double b, double angleInRadians) { // 计算第三条边的平方 double cSquared = a * a + b * b - 2 * a * b * Math.cos(angleInRadians); @@ -38,18 +58,9 @@ public class CoordinateCalculator { } return ret; } - - static public XYPoint calculator(Double arm0Length, Double arm0Rad, Double arm1Length, Double arm1Rad) { - XYPoint xyPoint = new XYPoint(); double lval = calculateThirdSide(arm0Length, arm1Length, Math.PI - arm1Rad); if (lval < 0.000001) { - xyPoint.x = 0.0; xyPoint.y = 0.0; - } else { - double rad0 = calculateAngle(arm0Length, lval, arm1Length); double lrad = 0.0; if (arm1Rad > 0) { - lrad = arm0Rad + rad0; - } else { - lrad = arm0Rad - rad0; - } xyPoint.x = lval * Math.sin(lrad); xyPoint.y = lval * Math.cos(lrad); - } return xyPoint; - } + // + // TEST + // static void testCalculateThirdSide(double a, double b, double angleInRadians, double expected) { double c = calculateThirdSide(a, b, angleInRadians); @@ -62,7 +73,6 @@ public class CoordinateCalculator { String.format("testcalculateAngle: side1=%+.4f,side2=%+.4f,oppositeSide=%+.4f --> angle=%+.4f(%+.4f)", side1, side2, oppositeSide, angle, Math.toDegrees(angle))); } - static void testCalculator(double arm0Length, double arm0Rad, double arm1Length, double arm1Rad, double expectedX, double expectedY) { XYPoint xyPoint = calculator(arm0Length, arm0Rad, arm1Length, arm1Rad); Assert.isTrue(abs(xyPoint.x - expectedX) < 0.0001 && abs(xyPoint.y - expectedY) < 0.0001, @@ -70,7 +80,7 @@ public class CoordinateCalculator { } public static void main(String[] args) { - CoordinateCalculator.testCalculateThirdSide(1, 1, 0,0.0); + CoordinateCalculator.testCalculateThirdSide(1, 1, 0, 0.0); CoordinateCalculator.testCalculateThirdSide(1, 1, Math.PI / 4, 0.7654); CoordinateCalculator.testCalculateThirdSide(1, 1, Math.PI / 2, 1.4142); CoordinateCalculator.testCalculateThirdSide(1, 1, Math.PI * 3 / 4, 1.8478); diff --git a/src/main/java/iflytop/zeui/controler/EngineerRootPageControler.java b/src/main/java/iflytop/zeui/controler/EngineerRootPageControler.java new file mode 100644 index 0000000..75f2efe --- /dev/null +++ b/src/main/java/iflytop/zeui/controler/EngineerRootPageControler.java @@ -0,0 +1,29 @@ +package iflytop.zeui.controler; + +import iflytop.app.type.exception.AppException; +import iflytop.zeui.service.RootMgrService; +import io.swagger.v3.oas.annotations.Operation; +import io.swagger.v3.oas.annotations.tags.Tag; +import jakarta.annotation.Resource; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Controller; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.ResponseBody; + +@Tag(name = "工程师页面根页面配置", description = "") +@Slf4j +@Controller +@RequestMapping(value = "/engineer/root/") +@ResponseBody +public class EngineerRootPageControler { + @Resource + RootMgrService rootMgrService; + + @Operation(summary = "获取AMIS-ROOT-CONFIG") + @PostMapping("getAmisRoot") + public Object getAmisRootConfig() throws AppException { + return rootMgrService.getRootPage("pageId"); + } + +} diff --git a/src/main/java/iflytop/zeui/service/RootMgrService.java b/src/main/java/iflytop/zeui/service/RootMgrService.java new file mode 100644 index 0000000..2f8b815 --- /dev/null +++ b/src/main/java/iflytop/zeui/service/RootMgrService.java @@ -0,0 +1,37 @@ +package iflytop.zeui.service; + +import iflytop.zeui.type.EngineerPage; +import iflytop.zeui.type.features.Nav; +import iflytop.zeui.type.layout.Page; +import org.springframework.stereotype.Component; + +import java.util.ArrayList; +import java.util.List; +import java.util.Map; + +@Component +public class RootMgrService { + Map> pageMap; + + void regPage(EngineerPage page) {} + + public Object getRootPage(String pageId) { + /* + * PAGE + * NAV + * CONTENT + * STATUS + * FUNCTION(support) + */ + + Nav nav = new Nav(); + nav.links = new ArrayList<>(); + nav.links.add(new Nav.Link("页面1", "page1")); + nav.links.add(new Nav.Link("页面2", "page2")); + + Page page = new Page(); + page.aside = nav; + return page; + } + +} diff --git a/src/main/java/iflytop/zeui/type/EngineerPage.java b/src/main/java/iflytop/zeui/type/EngineerPage.java new file mode 100644 index 0000000..fb59022 --- /dev/null +++ b/src/main/java/iflytop/zeui/type/EngineerPage.java @@ -0,0 +1,7 @@ +package iflytop.zeui.type; + +public class EngineerPage { + public String groupName; + public String pageName; + +} diff --git a/src/main/java/iflytop/zeui/type/display/Icon.java b/src/main/java/iflytop/zeui/type/display/Icon.java new file mode 100644 index 0000000..f09af2c --- /dev/null +++ b/src/main/java/iflytop/zeui/type/display/Icon.java @@ -0,0 +1,11 @@ +package iflytop.zeui.type.display; + +import com.fasterxml.jackson.annotation.JsonInclude; + +@JsonInclude(JsonInclude.Include.NON_NULL) +public class Icon { + public String type = "icon"; // icon 指定组件类型 + public String className; // 外层 CSS 类名 + public Object icon; // 模板 icon 名称,支持 fontawesome v4 或 通过 registerIcon 注册的 icon、或使用 url + public String vendor; // icon 类型,默认为fa, 表示 fontawesome v4。也支持 iconfont, 如果是 fontawesome v5 以上版本或者其他框架可以设置为空字符串 +} diff --git a/src/main/java/iflytop/zeui/type/display/Remark.java b/src/main/java/iflytop/zeui/type/display/Remark.java new file mode 100644 index 0000000..cc24b36 --- /dev/null +++ b/src/main/java/iflytop/zeui/type/display/Remark.java @@ -0,0 +1,17 @@ +package iflytop.zeui.type.display; + +import com.fasterxml.jackson.annotation.JsonInclude; +import iflytop.zeui.type.options.Position; +import iflytop.zeui.type.options.Shape; +import iflytop.zeui.type.options.Trigger; + +@JsonInclude(JsonInclude.Include.NON_NULL) +public class Remark { + public String type = "remark"; // string remark + public String className; // string 外层 CSS 类名 + public String content; // string 提示文本 + public Position placement; // ['top', 'right', 'bottom', 'left'] 弹出位置 + public Trigger trigger; // ['hover', 'focus'] 触发条件 + public String icon; // string fa fa-question-circle 图标 + public Shape shape; // 'circle' | 'square' 图标形状 +} diff --git a/src/main/java/iflytop/zeui/type/features/ActionButton.java b/src/main/java/iflytop/zeui/type/features/ActionButton.java new file mode 100644 index 0000000..a10b6ee --- /dev/null +++ b/src/main/java/iflytop/zeui/type/features/ActionButton.java @@ -0,0 +1,30 @@ +package iflytop.zeui.type.features; + +import com.fasterxml.jackson.annotation.JsonInclude; + +import java.util.List; + +@JsonInclude(JsonInclude.Include.NON_NULL) +public class ActionButton { + public String type = "action";// string action 指定为 Page 渲染器。 + public String actionType;// string - 【必填】这是 action 最核心的配置,来指定该 action 的作用类型,支持:ajax、link、url、drawer、dialog、confirm、cancel、prev、next、copy、close。 + public String label;// string - 按钮文本。可用 ${xxx} 取值。 + public String level;// string default 按钮样式,支持:link、primary、secondary、info、success、warning、danger、light、dark、default。 + public String size;// string - 按钮大小,支持:xs、sm、md、lg。 + public String icon;// string - 设置图标,例如fa fa-plus。 + public String iconClassName;// string - 给图标上添加类名。 + public String rightIcon;// string - 在按钮文本右侧设置图标,例如fa fa-plus。 + public String rightIconClassName;// string - 给右侧图标上添加类名。 + public Boolean active;// boolean - 按钮是否高亮。 + public String activeLevel;// string - 按钮高亮时的样式,配置支持同level。 + public String activeClassName;// string is-active 给按钮高亮添加类名。 + public Boolean block;// boolean - 用display:"block"来显示按钮。 + public String confirmText;// 模板 - 当设置后,操作在开始前会询问用户。可用 ${xxx} 取值。 + public String confirmTitle;// 模板 - 确认框标题,前提是 confirmText 有内容,支持模版语法 + public String reload;// string - 指定此次操作完后,需要刷新的目标组件名字(组件的name值,自己配置的),多个请用 , 号隔开。 + public String tooltip;// string - 鼠标停留时弹出该段文字,也可以配置对象类型:字段为title和content。可用 ${xxx} 取值。 + public String disabledTip;// 'string' | 'TooltipObject' - 被禁用后鼠标停留时弹出该段文字,也可以配置对象类型:字段为title和content。可用 ${xxx} 取值。 + public String tooltipPlacement;// string top 如果配置了tooltip或者disabledTip,指定提示信息位置,可配置top、bottom、left、right。 + public Boolean close;// boolean or string - 当action配置在dialog或drawer的actions中时,配置为true指定此次操作完后关闭当前dialog或drawer。当值为字符串,并且是祖先层弹框的名字的时候,会把祖先弹框关闭掉。 + public List required;// Array - 配置字符串数组,指定在form中进行操作之前,需要指定的字段名的表单项通过验证 +} diff --git a/src/main/java/iflytop/zeui/type/features/DropDownButton.java b/src/main/java/iflytop/zeui/type/features/DropDownButton.java new file mode 100644 index 0000000..c7ecc34 --- /dev/null +++ b/src/main/java/iflytop/zeui/type/features/DropDownButton.java @@ -0,0 +1,25 @@ +package iflytop.zeui.type.features; + +import com.fasterxml.jackson.annotation.JsonInclude; +import iflytop.zeui.type.options.Trigger; + +import java.util.List; + +@JsonInclude(JsonInclude.Include.NON_NULL) +public class DropDownButton { + public String type = "dropdown-button";// string dropdown-button 类型 + public String label;// string 按钮文本 + public String className;// string 外层 CSS 类名 + public String btnClassName;// string 按钮 CSS 类名 + public String menuClassName;// string 下拉菜单 CSS 类名 + public Boolean block;// boolean 块状样式 + public String size;// string 尺寸,支持'xs'、'sm'、'md' 、'lg' + public String align;// string 位置,可选'left'或'right' + public List buttons;// Array 配置下拉按钮 + public Boolean iconOnly;// boolean 只显示 icon + public Boolean defaultIsOpened;// boolean 默认是否打开 + public Boolean closeOnOutside;// boolean true 点击外侧区域是否收起 + public Boolean closeOnClick;// boolean false 点击按钮后自动关闭下拉菜单 + public Trigger trigger;// click 或 hover click 触发方式 + public Boolean hideCaret;// boolean false 隐藏下拉图标 +} diff --git a/src/main/java/iflytop/zeui/type/features/Nav.java b/src/main/java/iflytop/zeui/type/features/Nav.java new file mode 100644 index 0000000..aedc6da --- /dev/null +++ b/src/main/java/iflytop/zeui/type/features/Nav.java @@ -0,0 +1,71 @@ +package iflytop.zeui.type.features; + +import com.fasterxml.jackson.annotation.JsonInclude; + +import java.util.List; + +@JsonInclude(JsonInclude.Include.NON_NULL) +public class Nav { + public static class Link { + public String label;// string 名称 + public String to;// 模板 链接地址 + public String target;// string 链接关系 + public String icon;// string 图标 + public List children;// Array 子链接 + public Boolean unfolded;// boolean 初始是否展开 + public Boolean active;// boolean 是否高亮 + public String activeOn;// 表达式 是否高亮的条件,留空将自动分析链接地址 + public Boolean defer;// boolean 标记是否为懒加载项 + public String deferApi;// API 可以不配置,如果配置优先级更高 + public Boolean disabled;// boolean 是否禁用 + public String disabledTip;// string 禁用提示信息 + public String className;// string 菜单项自定义样式 + public String mode;// string 菜菜单项模式,分组模式:"group"、分割线:"divider" + + public Link() { + } + + public Link(String label, String to) { + this.label = label; + this.to = to; + } + } + + public static class Overflow { + public Boolean enable;// boolean false 是否开启响应式收纳 + public String overflowLabel;// string | SchemaObject 菜单触发按钮的文字 + public Object overflowIndicator;// SchemaIcon "fa fa-ellipsis" 菜单触发按钮的图标 + public Number maxVisibleCount;// number 开启响应式收纳后导航最大可显示数量,超出此数量的导航将被收纳到下拉菜单中,默认为自动计算 + public String wrapperComponent;// string 包裹导航的外层标签名,可以使用其他标签渲染 + public String style;// React.CSSProperties 自定义样式 + public String overflowClassName;// string "" 菜单按钮 CSS 类名 + public String overflowPopoverClassName;// string "" Popover 浮层 CSS 类名 + } + + + public String type = "nav"; // string "nav" 指定为 Nav 渲染器 + public String mode; // string "inline" 导航模式,悬浮或者内联,默认内联模式 + public Boolean collapsed; // boolean 控制导航是否缩起 + public Number indentSize; // number 16 层级缩进值,仅内联模式下生效 + public Number level; // number 控制导航最大展示层级数 + public Number defaultOpenLevel; // number 控制导航最大默认展开层级 + public String className; // string 外层 Dom 的类名 + public String popupClassName; // string 当为悬浮模式时,可自定义悬浮层样式 + public String expandIcon; // string | SchemaObject 自定义展开按钮 + public String expandPosition; // string 展开按钮位置,"before"或者"after",不设置默认在前面 + public Boolean stacked; // boolean true 设置成 false 可以以 tabs 的形式展示 + public Boolean accordion; // boolean 是否开启手风琴模式 + public String source; // string 或 API 可以通过变量或 API 接口动态创建导航 + public String deferApi; // API 用来延时加载选项详情的接口,可以不配置,不配置公用 source 接口。 + public Object itemActions; // SchemaNode 更多操作相关配置 + public Boolean draggable; // boolean 是否支持拖拽排序 + public Boolean dragOnSameLevel; // boolean 仅允许同层级内拖拽 + public String saveOrderApi; // string 或 API 保存排序的 api + // public BadgeSchema itemBadge; // BadgeSchema 角标 + + + public Boolean searchable; // boolean false 是否开启搜索 3.5.0 + public Overflow overflow; + public List links; + +} diff --git a/src/main/java/iflytop/zeui/type/features/ServiceContainer.java b/src/main/java/iflytop/zeui/type/features/ServiceContainer.java new file mode 100644 index 0000000..7f8f122 --- /dev/null +++ b/src/main/java/iflytop/zeui/type/features/ServiceContainer.java @@ -0,0 +1,27 @@ +package iflytop.zeui.type.features; + + +import com.fasterxml.jackson.annotation.JsonInclude; + +@JsonInclude(JsonInclude.Include.NON_NULL) +public class ServiceContainer { + static public class Message { + public String fetchSuccess; // string 接口请求成功时的 toast 提示文字 + public String fetchFailed; // string "初始化失败" 接口请求失败时 toast 提示文字 + } + + public String type; // string "service" 指定为 service 渲染器 + public String className; // string 外层 Dom 的类名 + public Object body; // SchemaNode 内容容器 + public String api; // API 初始化数据域接口地址 + public String ws; // string WebScocket 地址 + public String dataProvider; // string | Record<"inited" | "onApiFetched" | "onSchemaApiFetched" | "onWsFetched", string> 数据获取函数 + public Boolean initFetch; // boolean 是否默认拉取 + public String schemaApi; // API 用来获取远程 Schema 接口地址 + public Boolean initFetchSchema; // boolean 是否默认拉取 Schema + public Message messages; // Object 消息提示覆写,默认消息读取的是接口返回的 toast 提示文字,但是在此可以覆写它。 + public Number interval; // number 轮询时间间隔,单位 ms(最低 1000) + public Boolean silentPolling; // boolean false 配置轮询时是否显示加载动画 + public String stopAutoRefreshWhen; // 表达式 配置停止轮询的条件 + public Boolean showErrorMsg; // boolean true 是否以 Alert 的形式显示 api 接口响应的错误信息,默认展示 2.8.1 +} diff --git a/src/main/java/iflytop/zeui/type/form/Form.java b/src/main/java/iflytop/zeui/type/form/Form.java new file mode 100644 index 0000000..722cee0 --- /dev/null +++ b/src/main/java/iflytop/zeui/type/form/Form.java @@ -0,0 +1,66 @@ +package iflytop.zeui.type.form; + +import com.fasterxml.jackson.annotation.JsonInclude; +import iflytop.zeui.type.options.Align; + +@JsonInclude(JsonInclude.Include.NON_NULL) +public class Form { + + static public class Message { + public String fetchSuccess; // string 接口请求成功时的 toast 提示文字 + public String fetchFailed; // string "初始化失败" 接口请求失败时 toast 提示文字 + public String saveSuccess; + public String SaveFailed; + } + + public String type;// string "form" 指定为 Form 渲染器 + public String name;// string 设置一个名字后,方便其他组件与其通信 + public String mode;// string normal 表单展示方式,可以是:normal、horizontal 或者 inline + public Object horizontal;// Object {"left":2, "right":10, "justify": false} 当 mode 为 horizontal 时有用,用来控制 label 的展示占比 + public Align labelAlign;// "right" | "left" "right" 表单项标签对齐方式,默认右对齐,仅在 mode为horizontal 时生效 + public Number labelWidth;// number | string 表单项标签自定义宽度 + public String title;// string "表单" Form 的标题 + public String submitText;// String "提交" 默认的提交按钮名称,如果设置成空,则可以把默认按钮去掉。 + public String className;// string 外层 Dom 的类名 + public Object body;// Array<表单项 or SchemaNode > Form 表单项集合 + public Object actions;// Array<行为按钮> Form 提交按钮,成员为 Action + public Message messages;//.fetchSuccess string 获取成功时提示 + + public Boolean wrapWithPanel;// boolean true 是否让 Form 用 panel 包起来,设置为 false 后,actions 将无效。 + public String panelClassName;// string 外层 panel 的类名 + public String api;// API Form 用来保存数据的 api。 + public String initApi;// API Form 用来获取初始数据的 api。 + public String rules;// Array<{rule:string;message:string;name?: string[]}> 表单组合校验规则 + public Number interval;// number 3000 刷新时间(最低 3000) + public Boolean silentPolling;// boolean false 配置刷新时是否显示加载动画 + public String stopAutoRefreshWhen;// string "" 通过表达式 来配置停止刷新的条件 + public String initAsyncApi;// API Form 用来获取初始数据的 api,与 initApi 不同的是,会一直轮询请求该接口,直到返回 finished 属性为 true 才 结束。 + public Boolean initFetch;// boolean true 设置了 initApi 或者 initAsyncApi 后,默认会开始就发请求,设置为 false 后就不会起始就请求接口 + public String initFetchOn;// string 用表达式来配置 + public String initFinishedField;// string finished 设置了 initAsyncApi 后,默认会从返回数据的 data.finished 来判断是否完成,也可以设置成其他的 xxx,就会从 data.xxx 中获取 + public Number initCheckInterval;// number 3000 设置了 initAsyncApi 以后,默认拉取的时间间隔 + public String asyncApi;// API 设置此属性后,表单提交发送保存接口后,还会继续轮询请求该接口,直到返回 finished 属性为 true 才 结束。 + public Number checkInterval;// number 3000 轮询请求的时间间隔,默认为 3 秒。设置 asyncApi 才有效 + public String finishedField;// string "finished" 如果决定结束的字段名不是 finished 请设置此属性,比如 is_success + public Boolean submitOnChange;// boolean false 表单修改即提交 + public Boolean submitOnInit;// boolean false 初始就提交一次 + public Boolean resetAfterSubmit;// boolean false 提交后是否重置表单 + public String primaryField;// string "id" 设置主键 id, 当设置后,检测表单是否完成时(asyncApi),只会携带此数据。 + public String target;// string 默认表单提交自己会通过发送 api 保存数据,但是也可以设定另外一个 form 的 name 值,或者另外一个 CRUD 模型的 name 值。 如果 target 目标是一个 Form ,则目标 Form 会重新触发 initApi,api 可以拿到当前 form 数据。如果目标是一个 CRUD 模型,则目标模型会重新触发搜索,参数为当前 Form 数据。当目标是 window 时,会把当前表单的数据附带到页面地址上。 + public String redirect;// string 设置此属性后,Form 保存成功后,自动跳转到指定页面。支持相对地址,和绝对地址(相对于组内的)。 + public String reload;// string 操作完后刷新目标对象。请填写目标组件设置的 name 值,如果填写为 window 则让当前页面整体刷新。 + public Boolean autoFocus;// boolean false 是否自动聚焦。 + public Boolean canAccessSuperData;// boolean true 指定是否可以自动获取上层的数据并映射到表单项上 + public String persistData;// string "" 指定一个唯一的 key,来配置当前表单是否开启本地缓存 + public String persistDataKeys;// string[] "" 指指定只有哪些 key 缓存 + public Boolean clearPersistDataAfterSubmit;// boolean true 指定表单提交成功后是否清除本地缓存 + public Boolean preventEnterSubmit;// boolean false 禁用回车提交表单 + public Boolean trimValues;// boolean false trim 当前表单项的每一个值 + public Boolean promptPageLeave;// boolean false form 还没保存,即将离开页面前是否弹框确认。 + public Number columnCount;// number 0 表单项显示为几列 + public Boolean inheritData;// boolean true 默认表单是采用数据链的形式创建个自己的数据域,表单提交的时候只会发送自己这个数据域的数据,如果希望共用上层数据域可以设置这个属性为 false,这样上层数据域的数据不需要在表单中用隐藏域或者显式映射才能发送了。 + + // public Boolean static;// boolean 2.4.0 整个表单静态方式展示,详情请查看示例页 + // public String staticClassName;// string 2.4.0 表单静态展示时使用的类名 + public Boolean closeDialogOnSubmit;// boolean 提交的时候是否关闭弹窗。当 form 里面有且只有一个弹窗的时候,本身提交会触发弹窗关闭,此属性可以关闭此行为 +} diff --git a/src/main/java/iflytop/zeui/type/form/FormItem.java b/src/main/java/iflytop/zeui/type/form/FormItem.java new file mode 100644 index 0000000..8c9048b --- /dev/null +++ b/src/main/java/iflytop/zeui/type/form/FormItem.java @@ -0,0 +1,48 @@ +package iflytop.zeui.type.form; + +import com.fasterxml.jackson.annotation.JsonInclude; +import iflytop.zeui.type.options.Align; + +import java.util.List; + +@JsonInclude(JsonInclude.Include.NON_NULL) +public class FormItem { + static public class AutoFill { + public Boolean showSuggestion;//boolean true 为参照录入,false 自动填充 + public String api;//表达式 自动填充接口/参照录入筛选 CRUD 请求配置 + public Boolean silent;//boolean 是否展示数据格式错误提示,默认为 true + public Object fillMappinng;//SchemaNode 自动填充/参照录入数据映射配置,键值对形式,值支持变量获取及表达式 + public String trigger;//string showSuggestion 为 true 时,参照录入支持的触发方式,目前支持 change「值变化」| focus 「表单项聚焦」 + public String mode;//string showSuggestion 为 true 时,参照弹出方式 dialog, drawer, popOver + public String labelField;//string showSuggestion 为 true 时,设置弹出 dialog,drawer,popOver 中 picker 的 labelField + public String position;//string showSuggestion 为 true 时,参照录入 mode 为 popOver 时,可配置弹出位置 + public String size;//string showSuggestion 为 true 时,参照录入 mode 为 dialog 时,可设置大小 + public List columns;//Array showSuggestion 为 true 时,数据展示列配置 + public Object filter;//SchemaNode showSuggestion 为 true 时,数据查询过滤条件 + + } + + public String type; // string 指定表单项类型 + public String className; // string 表单最外层类名 + public String inputClassName; // string 表单控制器类名 + public String labelClassName; // string label 的类名 + public String name; // string 字段名,指定该表单项提交时的 key + public String value; // string 表单默认值 + public String label; // 模板 或 false 表单项标签 + public Align labelAlign; // "right" | "left" "right" 表单项标签对齐方式,默认右对齐,仅在 mode为horizontal 时生效 + public String labelRemark; // Remark 表单项标签描述 + public String description; // 模板 表单项描述 + public String placeholder; // string 表单项描述 + public Boolean inline; // boolean 是否为 内联 模式 + public Boolean strictMode; // boolean 通过配置 false 可以及时获取所有表单里面的数据,否则可能会有不同步 + public Boolean submitOnChange; // boolean 是否该表单项值发生变化时就提交当前表单。 + public Boolean disabled; // boolean 当前表单项是否是禁用状态 + public String disabledOn; // 表达式 当前表单项是否禁用的条件 + public String visible; // 表达式 当前表单项是否禁用的条件 + public String visibleOn; // 表达式 当前表单项是否禁用的条件 + public Boolean required; // boolean 是否为必填。 + public String requiredOn; // 表达式 通过表达式来配置当前表单项是否为必填。 + public String validations; // 表达式 表单项值格式验证,支持设置多个,多个规则用英文逗号隔开。 + public String validateApi; // 表达式 表单校验接口 + public Object autoFill; // SchemaNode 数据录入配置,自动填充或者参照录入 +} diff --git a/src/main/java/iflytop/zeui/type/form/InputNumber.java b/src/main/java/iflytop/zeui/type/form/InputNumber.java new file mode 100644 index 0000000..293b7a0 --- /dev/null +++ b/src/main/java/iflytop/zeui/type/form/InputNumber.java @@ -0,0 +1,12 @@ +package iflytop.zeui.type.form; + +import com.fasterxml.jackson.annotation.JsonInclude; + +@JsonInclude(JsonInclude.Include.NON_NULL) +public class InputNumber extends FormItem { + + public InputNumber() { + type = "input-number"; + } + +} diff --git a/src/main/java/iflytop/zeui/type/form/InputText.java b/src/main/java/iflytop/zeui/type/form/InputText.java new file mode 100644 index 0000000..0cb8dba --- /dev/null +++ b/src/main/java/iflytop/zeui/type/form/InputText.java @@ -0,0 +1,13 @@ +package iflytop.zeui.type.form; + + +import com.fasterxml.jackson.annotation.JsonInclude; + +@JsonInclude(JsonInclude.Include.NON_NULL) +public class InputText extends FormItem { + + public InputText() { + type = "input-text"; + } + +} diff --git a/src/main/java/iflytop/zeui/type/form/Select.java b/src/main/java/iflytop/zeui/type/form/Select.java new file mode 100644 index 0000000..f9c415b --- /dev/null +++ b/src/main/java/iflytop/zeui/type/form/Select.java @@ -0,0 +1,19 @@ +package iflytop.zeui.type.form; + +import com.fasterxml.jackson.annotation.JsonInclude; + +import java.util.List; + +@JsonInclude(JsonInclude.Include.NON_NULL) +public class Select extends FormItem { + static public class Option { + public String value; + public String label; + } + + Select() { + type = "select"; + } + + List