在决策平台的管理系统下增加管理菜单。
package com.fr.fs.fun; import com.fr.fs.FSPlate; import com.fr.stable.fun.Level; /** * @author richie * @date 2015-04-14 * @since 8.0 */ public interface PlateProvider extends Level { String XML_TAG = "PlateProvider"; int CURRENT_LEVEL = 1; /** * 移动模块所对应的类 * @return 类 */ Class<? extends FSPlate> classForPlate(); /** * 模块标记字符串,该标记将会出现在FS.config.supportModules中(用于JS中调用) * @return 标记 */ String mark(); } |
package com.fr.fs; import com.fr.data.dao.FieldColumnMapper; import com.fr.data.dao.ObjectTableMapper; import com.fr.data.dao.RelationFCMapper; import com.fr.data.load.LazyExecutionJob; import com.fr.fs.base.entity.PlatformManageModule; import com.fr.fs.control.dao.tabledata.TableDataDAOControl.ColumnColumn; import com.fr.fs.dao.EntryDAO; import com.fr.stable.fun.Service; import java.util.List; /** * 数据决策平台的板块 */ public interface FSPlate extends LazyExecutionJob { /** * 初始化数据 */ void initData(); /** * 注册使用的需要service * * @return 所有需要注册的服务 */ Service[] service4Register(); /** * 注册getRelationClass对象的表结构 * * @return 所有需要注册的表结构 */ ObjectTableMapper[] mappers4Register(); /** * 获取对应的java obj的class * * @return java obj的class */ Class getRelationClass(); /** * 同步数据集验证时用到内置数据集表 * * @return 同步数据集验证时用到内置数据集表 */ ColumnColumn[] getTableDataColumns(); /** * 注册Company角色表权限关系映射到对象到company表的内容中 * * @return 模块和公司角色对应的权限关系 */ FieldColumnMapper[] columnMappers4Company(); /** * 注册Custom角色权限表关系映射到对象到custom表的内容中 * * @return 模块和自定义角色对应的权限关系 */ FieldColumnMapper[] columnMappers4Custom(); /** * 获取与自定义角色有关的数据库关系 * * @return 与自定义角色有关的数据库关系 */ RelationFCMapper getRelationFCMapper4Custom(); /** * 获取与部门角色有关的数据库关系 * * @return 与部门角色有关的数据库关系 */ RelationFCMapper getRelationFCMapper4Company(); /** * 创建id为 id的plate getRelationClass所对应的对象 * * @param id 对象的ID * @return 创建的对象(dao) */ Object createPrivilegeObject(long id); /** * 获取所有的plate对应对象的ID * * @return plate对应的所有对象的ID */ List<String> getAllPrivilegesID(); /** * 获取plate模块对应的所有Entry的数据库入口 * * @return plate对应对象的dao */ List<EntryDAO> getEntryDaoAccess(); /** * 目前主要做兼容的一些东西 */ void refreshManager(); /** * 释放一些东东 */ void release(); /** * 注册文件是否支持此模块 * * @return 产品是否支持此模块 */ boolean isSupport(); /** * 是否需要权限控制 * * @return 模块是否需要权限支持 */ boolean needPrivilege(); /** * 板块运行所需要的JS文件 * @return JS文件数组 */ String[] getPlateJavaScriptFiles4WebClient(); /** * 板块运行所需要的样式表文件 * @return 样式表文件数组 */ String[] getPlateStyleFiles4WebClient(); /** * 板块运行所需要的国际化文件 * @return 国际化文件路径 */ String[] getLocaleFile(); /** * 这个板块所需要支持的管理菜单,如果需要把菜单显示到中间位置,请设置这个板块菜单的优先级 * @return 管理菜单数组 */ PlatformManageModule[] supportPlatformManageModules(); } |
package com.fr.fs.base.entity; import com.fr.data.dao.DAOBean; import com.fr.fs.base.PriorityGenerator; import com.fr.general.ComparatorUtils; import com.fr.json.JSONException; import com.fr.json.JSONObject; public class PlatformManageModule extends DAOBean{ public static final String MARK_STRING = "PlatformManageModule"; private long parentId = -1; private String name; private String description; private int priority; private boolean appendToLast; public PlatformManageModule() { this.priority = PriorityGenerator.generate(); } public PlatformManageModule(long id) { this.id = id; } public PlatformManageModule(String name, String description, long id, long parentId) { this(name, description, id, parentId, PriorityGenerator.generate()); } /** * 管理菜单项 * @param name 名字,为了国际化,一般写成国际化的键 * @param description 描述,一般不用描述,简写为空字符串 * @param id 菜单的唯一标识符 * @param parentId 菜单所属的子菜单,一般来说为1 * @param priority 菜单的优先级,可以使用次参数将菜单提前 */ public PlatformManageModule(String name, String description, long id, long parentId, int priority) { this.name = name; this.description = description; this.id = id; this.parentId = parentId; this.priority = priority; } /** * 管理菜单项 * @param name 名字,为了国际化,一般写成国际化的键 * @param description 描述,一般不用描述,简写为空字符串 * @param id 菜单的唯一标识符 * @param parentId 菜单所属的子菜单,一般来说为1 * @param appendToLast 是否将菜单添加到最后 */ public PlatformManageModule(String name, String description, long id, long parentId, boolean appendToLast) { this.name = name; this.description = description; this.id = id; this.parentId = parentId; this.appendToLast = appendToLast; } public long getParentId() { return parentId; } public void setParentId(long parentId) { this.parentId = parentId; } public String getName() { return name; } public void setName(String name) { this.name = name; } public String getDescription() { return description; } public void setDescription(String description) { this.description = description; } public int getPriority() { return priority; } public void setPriority(int priority) { this.priority = priority; } public boolean isAppendToLast() { return appendToLast; } /** * 变成JSON格式 * @return JSON对象 * @throws JSONException 异常 */ public JSONObject createJSONConfig() throws JSONException { JSONObject jo = new JSONObject(); jo.put("id", id); jo.put("text", name); jo.put("key", name); jo.put("value", id); jo.put("description", description); return jo; } /** * 根据JSON数据生成对象 * @param jo JSON数据 * @throws JSONException 异常 */ public void parseJSON(JSONObject jo) throws JSONException { if (jo.has("id")) { this.setId(jo.getLong("id")); } if (jo.has("key")) { this.setName(jo.getString("key")); } if (jo.has("description")) { this.setDescription(jo.getString("description")); } } protected int hashCode4Properties() { final int prime = 31; int result = 1; result = prime * result + ((description == null) ? 0 : description.hashCode()); result = prime * result + (int) (id ^ (id >>> 32)); result = prime * result + ((name == null) ? 0 : name.hashCode()); result = prime * result + (int) (parentId ^ (parentId >>> 32)); return result; } /** * 2个对象的属性是否一致 * @param obj 要比较的对象 * @return 属性是否一致 */ public boolean equals4Properties(Object obj) { return obj instanceof PlatformManageModule && ((PlatformManageModule) obj).id == id && ((PlatformManageModule) obj).parentId == parentId && ComparatorUtils.equals(((PlatformManageModule) obj).name, name) && ComparatorUtils.equals(((PlatformManageModule) obj).description, description); } } |
在Modern主题下,需要有一个图片在包com/fr/fs/resources/images/frame/fsmodule{id}.png,其中{id}为PlatformManageModule的id。
Web端为了点击模块选项的时候打开对应的设置界面,需要FS.Design.op对象
$.extend(FS.Design.op, { {id}: function (designContainer) { FS.Plugin.DemoModule.init(designContainer); } }); |
其中{id}为PlatformManageModule的id。
<extra-platform> <PlateProvider class="com.fr.plugin.xxx.youclassname"/> </extra-platform> |
源码:http://cloud.finedevelop.com:2015/projects/fs/repos/plugins/browse/plugin-message