package com.emergencyrepair.system.service; import lombok.AllArgsConstructor; import lombok.Data; import org.springframework.stereotype.Component; import java.util.ArrayList; import java.util.Collections; import java.util.LinkedHashMap; import java.util.List; import java.util.Map; /** * Declarative catalog of the operation buttons each page exposes. * Menu management uses it to create MENU_TYPE=2 entries automatically. */ @Component public class ButtonPermissionCatalog { @Data @AllArgsConstructor public static class ButtonDefinition { private String code; private String name; } private static final Map> CATALOG = new LinkedHashMap<>(); static { put("/dashboard", def("dashboard:query", "\u67e5\u8be2")); put("/fault/report", def("fault:report:query", "\u67e5\u8be2"), def("fault:report:add", "\u65b0\u589e"), def("fault:report:edit", "\u4fee\u6539"), def("fault:report:delete", "\u5220\u9664"), def("fault:report:export", "\u5bfc\u51fa"), def("fault:report:report", "\u4e0a\u62a5")); put("/fault/review", def("fault:review:query", "\u67e5\u8be2"), def("fault:review:audit", "\u5ba1\u6838"), def("fault:review:edit", "\u4fee\u6539"), def("fault:review:cancel", "\u9500\u9879")); put("/fault/approval/cmb", def("fault:approval:query", "\u67e5\u8be2"), def("fault:approval:approve", "\u5ba1\u6279")); put("/fault/approval/jcc-assistant", def("fault:approval:query", "\u67e5\u8be2"), def("fault:approval:approve", "\u5ba1\u6279")); put("/fault/approval/jcc-director", def("fault:approval:query", "\u67e5\u8be2"), def("fault:approval:approve", "\u5ba1\u6279")); put("/fault/dispatch", def("fault:dispatch:query", "\u67e5\u8be2"), def("fault:dispatch:dispatch", "\u4e00\u952e\u6d3e\u5355")); put("/fault/completion", def("fault:completion:query", "\u67e5\u8be2"), def("fault:completion:status", "\u5b8c\u5de5\u72b6\u6001\u8bbe\u7f6e"), def("fault:completion:score", "rk_T\u5458\u8bc4\u5206")); put("/completion/report", def("completion:report:save", "\u4fdd\u5b58"), def("completion:report:submit", "\u63d0\u4ea4")); put("/completion/query", def("completion:query:query", "\u67e5\u8be2")); put("/acceptance/application", def("acceptance:application:query", "\u67e5\u8be2"), def("acceptance:application:apply", "\u7533\u8bf7")); put("/acceptance/inspector", def("acceptance:inspector:query", "\u67e5\u8be2"), def("acceptance:inspector:pass", "\u901a\u8fc7"), def("acceptance:inspector:reject", "\u6253\u56de")); put("/acceptance/leader", def("acceptance:leader:query", "\u67e5\u8be2"), def("acceptance:leader:pass", "\u901a\u8fc7"), def("acceptance:leader:reject", "\u6253\u56de")); put("/acceptance/print", def("acceptance:print:query", "\u67e5\u8be2"), def("acceptance:print:print", "\u6253\u5370")); put("/acceptance/rating", def("acceptance:rating:query", "\u67e5\u8be2"), def("acceptance:rating:grade", "\u8bc4\u7ea7")); put("/reports/overview", def("report:common:query", "\u67e5\u8be2"), def("report:common:export", "\u5bfc\u51fa")); put("/reports/top-equipment", def("report:common:query", "\u67e5\u8be2"), def("report:common:export", "\u5bfc\u51fa")); put("/reports/by-team", def("report:common:query", "\u67e5\u8be2"), def("report:common:export", "\u5bfc\u51fa")); put("/reports/contractors", def("report:common:query", "\u67e5\u8be2"), def("report:common:export", "\u5bfc\u51fa")); put("/reports/trend", def("report:common:query", "\u67e5\u8be2"), def("report:common:export", "\u5bfc\u51fa")); put("/system/product-tree", def("system:tree:add", "\u65b0\u589e"), def("system:tree:edit", "\u7f16\u8f91"), def("system:tree:delete", "\u5220\u9664")); put("/system/organization", def("system:organization:query", "\u67e5\u8be2"), def("system:organization:ext", "\u6269\u5c55\u5c5e\u6027\u8bbe\u7f6e")); put("/system/base-equipment", def("system:tree:add", "\u65b0\u589e"), def("system:tree:edit", "\u7f16\u8f91"), def("system:tree:delete", "\u5220\u9664")); put("/system/engineering-majors", def("system:major:add", "\u65b0\u589e"), def("system:major:edit", "\u7f16\u8f91"), def("system:major:delete", "\u5220\u9664")); put("/system/team-majors", def("system:major:add", "\u65b0\u589e"), def("system:major:edit", "\u7f16\u8f91"), def("system:major:delete", "\u5220\u9664")); put("/system/users", def("system:users:query", "\u67e5\u8be2"), def("system:users:assign", "\u89d2\u8272\u6388\u6743"), def("system:users:ext", "\u6269\u5c55\u5c5e\u6027\u8bbe\u7f6e")); put("/system/roles", def("system:roles:add", "\u65b0\u589e"), def("system:roles:edit", "\u7f16\u8f91"), def("system:roles:delete", "\u5220\u9664"), def("system:roles:assign", "\u7528\u6237\u8bbe\u7f6e"), def("system:roles:permission", "\u6743\u9650\u8bbe\u7f6e")); put("/system/menus", def("system:menus:add", "\u65b0\u589e"), def("system:menus:edit", "\u7f16\u8f91"), def("system:menus:delete", "\u5220\u9664"), def("system:menus:buttons", "\u83dc\u5355\u6309\u94ae\u540c\u6b65")); put("/system/login-logs", def("system:login-logs:query", "\u67e5\u8be2"), def("system:login-logs:export", "\u5bfc\u51fa")); put("/system/operation-logs", def("system:operation-logs:query", "\u67e5\u8be2"), def("system:operation-logs:export", "\u5bfc\u51fa")); put("/system/error-logs", def("system:error-logs:query", "\u67e5\u8be2"), def("system:error-logs:detail", "\u8be6\u60c5")); } private static void put(String url, ButtonDefinition... definitions) { List list = new ArrayList<>(); Collections.addAll(list, definitions); CATALOG.put(url, Collections.unmodifiableList(list)); } private static ButtonDefinition def(String code, String name) { return new ButtonDefinition(code, name); } public List buttonsFor(String url) { if (url == null) { return Collections.emptyList(); } return CATALOG.getOrDefault(url, Collections.emptyList()); } public Map> catalog() { return CATALOG; } }