    公共属性：
    id=唯一标识，必填
    name=表单名称，必填
    value=表单值
    isReadonly=是否只读

    下拉框&查找框 特有属性：
    code=元对象编码，必填
    field=元字段名称，必填
    multiple是否多选

    文本框框&文本域 特有属性：
    placeholder=框内友好提示信息

    文本域&编辑框&JSON框 特有属性：
    style=自定义CSS

    图片框&文件框 特有属性：
    filedir=自定义上传目录，必填

    其它：
    options=自定义高级属性，详情参见EovaUI源码！

EOVA控件

    // 文本框
    <#text id="txtInfo" name="info" value="一句话构建文本框" placeholder="请输入信息..." validator="" options="" isReadonly="" />
    // 下拉框
    <#combo id="" name="" code="" field="" value="" multiple="" isReadonly="" />
    // 查找框
    <#find id="" name="" code="" field="" value="" multiple="" isReadonly="" />
    // 时间框
    <#time id="" name="" value="" isReadonly="" options="format:'yyyy-MM-dd HH:mm:ss'" />
    // 日期框
    <#time id="" name="" value="" isReadonly="" options="format:'yyyy-MM-dd'"/>
    // 文本域
    <#texts id="" name="" value="" placeholder="" validator="" style="width:99.9%;height:20px;" isReadonly="" />
    // 编辑框
    <#edit id="" name="" value="" style="width: auto;height:250px;" isReadonly="" />
    // 布尔框
    <#bool id="" name="" value="" isReadonly="" />
    // 图片框
    <#img id="" name="" value="" filedir="" options="" />
    // 文件框
    <#file id="" name="" value="" isReadonly="" filedir="" />
    // 图标框
    <#icon id="" name="" value="" isReadonly="" />
    // JSON框
    <#json id="" name="" value="" style="margin-top: 3px;width:99.9%;height:200px;" isReadonly="" />

EOVA组件

    objectCode=元对象编码(给我一个对象编码，我就能给你一个宇宙)
    toolbar=绑定工具栏ID
    menuCode=当前菜单编码(会自动获取当前菜单的相关限制，比如过滤条件等)

    // 查询
    <#query id="" objectCode="" />
    // 表单
    <#form id="" objectCode="" />
    // 表格
    <#grid id="" objectCode="" toolbar="" menuCode="" />
    // 树表
    <#treegrid id="" objectCode="" toolbar="" menuCode="" treeField="以树方式展现的字段" />
    // 树
    <#tree id="" objectCode="" menuCode=""  idKey="" nameKey="" pidKey="" iconKey="" rootPid="" expandAll="true" />(故名思意，自解！)

格式化-红色加粗

    function(value, row, index, field) {
        if (value) {
            return '<b style="color: red">' + value + '</b>';
        }
        return value;
    }

格式化-图片

    function(value, row, index, field) {
        if (value) {
            return '<img src="http://图片域名/图片目录/' + value + '" height=25>'
        }
        return value
    }

格式化-链接

    function(value, row, index, field) {
        return '<a target="_blank" href="http://eova.cn" style="color:blue">' + value + ''
    }

格式化-进度条

    function(value, row, index, field) {
        if (value) {
            var s = '<div style="width:100%;border:1px solid #ccc">' + '<div style="width:' + value + '%;background:#cc0000;color:#fff">' + value + '%' + '</div></div>';
            return s;
        } else {
            return '';
        }
    }

格式化-新开关联页面 to 浏览器Tab

    function(value, row, index, field) {
        return '<a target="_blank" href="/single_grid/list/biz_demo_hotel_stock?query_hotel_id=' + row.id + '" style="color:blue">' + value + '</a>';
    }

格式化-新开关联页面 to Eova Tab

    function(value, row, index, field) {
        var url = '/single_grid/list/biz_demo_hotel_stock?query_hotel_id=' + row.id;
        var title = row.name + '库存';
        var icon = 'eova-icon1';
        return $.str.format('<a href="javascript:$.eovatab(parent, \'{0}\', \'{1}\', \'{2}\')" style="color:blue">{3}</a>', url, title, icon, value);
    }
    PS:JS是万能的，只有你想不到的，没有你做不到的！大胆猜测，小心验证！

查询来自eova库中的字典，构建下拉框

select value ID,name CN from eova_dict where object = '表名' and field = '字段名';ds=eova

查询来自main库中的字典，构建下拉框（默认为main库，不用写ds=main）

select value ID,name CN from dicts where object = '表名' and field = '字段'

查找表达式

    select id ID,name 酒店名 from hotel
    select id ID,name 酒店名,address 地址 from hotel

查找表达式-逻辑判断SQL条件（Beetl语法）

${exp1!}

    规则	参数	描述	例子
    required		必填项
    required        //不能为空
    required(xxx)   //满足xxx规则，才验证required
    required(not, xxx) //如果值为空，或者xxx也认为是空
    integer	可选，标识	整数
    integer         //请输入整数
    integer[*]      //请输入整数
    integer[+]      //请输入正整数
    integer[+0]     //请输入正整数或0
    integer[-]      //请输入负整数
    integer[-0]     //请输入负整数或0
    match	可选，标识
    必选, 另一字段名	与另一字段匹配，两种用法：

    match[name];
    用于验证两个字段的值必须相同

    match[condition, name];
    用于比较两个字段大小
    match[password]  //与password字段的值匹配
    match[lt, money]  //小于money字段的值
    match[lte, money] //小于等于money字段的值
    match[eq, money]  //等于money字段的值匹配
    match[neq, money]  //不能等于money字段的值
    match[gte, money] //大于等于money字段的值
    match[gt, money]  //大于money字段的值
    range	必选，范围值	数值范围
    range[0~99]      //0到99的整数
    range[~99]       //小于或等于99的整数
    range[0~]        //大于或等于0的整数
    length	必选，范围值
    可选，是否计算真实长度	验证字符长度
    length[6~16]       //6-16个字符
    length[6]          //6个字符
    length[~6]         //小于6个字符
    length[6~]         //大于6个字符

    length[~6, true]   //小于6个字符,全角字符计算双字符
    checked	可选，范围值	对于checkbox或radio
    必须要选中多少项
    checked             //必填，相当于required
    checked[3~5]        //请选择3到5项
    checked[3]          //请选择3项
    checked[~5]         //请选择少于5项
    checked[3~]         //请选择大于3项
    remote	必选，url地址
    可选，附带额外的字段	远程验证
    remote[path/to/server.php]
    remote[path/to/server.php, name1, name2, ..]

    // 自动刷新Eova组件(datagrid+treegrid)
    $.widgetReLoad($widget);

    // 自动获取组件选中行(datagrid+treegrid)
    $.getWidgetSelected($widget);