# 公共属性
# 基础
# ID
ID作为控件的唯一标识符,系统会为每个控件在拖动到画布上的时候##自动产生##。ID在整个页面设计及运行的过程中保持不变,在页面运行过程中,或者代码控制页面的时候,用来寻找控件的最佳的属性。
# Text & Text ID
该项用来定义某个控件的显示标题信息。
Text用于显示标题,Text ID用于显示标题的国际化设定。在实际使用中,两者至少要设定一个,否则控件将没有标题。在同时设定的情况下,ID的优先级将高于Text。如果从ID中无法获取到标题,才会从Text中获取值。
# 主题变量
主题是CSS中定义的一些样式,会影响到控件的显示效果。
Meper会为每个控件提供一些标准的主题,供用户设定。用户也可以自己在CSS中自己书写主题,然后在这里进行设定。
每种控件所有的主题是不一样的,具体可以根据依次点击主题进行查看。
# 布局 & 外观 & 文本 & 图标
由于该部分属性比较常见,与大家常用的office组件的设定一致,所见即所得,并无特别之处,所以这里不再描述。
# 权限
权限主要用于在项目部署的时候,生成对应的按钮权限,所以该属性为按钮独有的。
系统共有两个设置权限的地方,一个是在按钮上,一个是在菜单编辑的地方。通过菜单按钮中“一键生成权限”, 系统会根据菜单的结构,自动扫描所有的页面设计,并生成权限对象,供用户在用户组或者角色中进行配置。
# 代码中如何定义某个组件参与权限管控
1.以按钮为例,平台定义了一个接口 IComponentHasPermission ,当某个组件需要加入权限的时候,首先需要实现此接口
LumosButton
public class LumosButton extends Button implements IHasData , IComponentHasPermission {
private static final long serialVersionUID = -2034119229329555787L;
private Object data = null;
@Override
public Object getData() {
return data;
}
@Override
public void setData(Object data) {
this.data = data;
}
}
2.另外,当给组件写Render的时候,还是以按钮为例,代码如下:
LumosButton
public class ButtonRender extends WidgetWithPermissionRender implements IInputWidgetRender, IDataLoadableWidgetRender {
private static final long serialVersionUID = -3834818069891154783L;
private Button com = new LumosButton();
}
可以看到上述代码中,继承了WidgetWithPermissionRender,WidgetWithPermissionRender的类图如下:
也就是说如下方代码所示,如需要实现权限管控,需要实现getComponentWithPermission()方法注册需要控制权限的组件
WidgetWithPermissionRender
public abstract class WidgetWithPermissionRender extends WidgetRender {
@Override
public void applyProperties() {
super.applyProperties();
Component component = getComponentWithPermission();
if (display.getWidgetRunningModel().equals(WidgetRunningModel.RUNNING)) {
WidgetPropertiesHolder property = widgetData.getProperty(WidgetPropertyNameConstant.BUTTON_PERMISSION);
if (property != null) {
String permissionName = (String) property.getValue();
if (!Strings.isNullOrEmpty(permissionName)) {
SecuredInfo securedInfo = new SecuredInfo();
securedInfo.setRequiredAuthentication(true);
securedInfo.setRequiredPermission(permissionName);
component.setVisible(SecuredUtils.isSecure(securedInfo));
}
}
}
}
/**
* 需要控制权限的具体组件
*
* @return
*/
protected abstract Component getComponentWithPermission();
}
# Java代码写的界面如何加入权限
- 继承BasePcView 或 BaseMobileView 并添加进二次开发的菜单中
- 还是继续沿用@Secured注解(注意:不能有循环依赖的情况)
# 属性扩展
除了内置的属性, 平台也提供了扩展。 如需扩展,创建一个enum并实现IWidgetProperty接口即可。
IWidgetProperty接口定义
public interface IWidgetProperty {
String getName();
String getNameKey();
default ComponentGroup getGroup() {
return ComponentGroup.EXTEND;
}
default int getOrder() {
return 100;
}
String getId();
}
以Mes中的Route添加“是否可读”属性为例:
继承IWidgetProperty:
public enum MesWidgetPropertyNameConstant implements IWidgetProperty {
ROUTE_WIDGET_READONLY("lumos.designer.basic.type.routegraph.readonly", "Readonly", ComponentGroup.COMPONENT, 1);
private String name;
private ComponentGroup group;
private String nameKey;
private int order;
MesWidgetPropertyNameConstant(String nameKey, String name, ComponentGroup group, int order) {
this.name = name;
this.nameKey = nameKey;
this.group = group;
this.order = order;
}
@Override
public String getName() {
return this.name;
}
@Override
public String getNameKey() {
return this.nameKey;
}
@Override
public ComponentGroup getGroup() {
return this.group;
}
@Override
public int getOrder() {
return this.order;
}
@Override
public String getId() {
return name();
}
}