轻量级HTML编辑器组件

复制代码
Ext.define("vapp.view.DFormForm", {
    extend: 'Ext.form.Panel',
    defaultType: "textfield",
    xtype:"DFormForm",
    params: {},
    waitMsgTarget: true,  // 默认使用Ext.MessageBox.wait作为等待消息的显示。
    itemId: "editform",
    defaults: {
        columnWidth: .5,
        margin: "5",
        msgTarget: "side"
    },
    initComponent: function () {
        var me = this;
        Ext.apply(me,
            {
                items: [{
                    xtype: "hidden",
                    value: newGuid(),
                    itemId: "FormID",
                    name: "FormID"
                }, {
                    fieldLabel: "表单名称",
                    anchor: '100%',
                    name: "FormName"
                },
             {
                 fieldLabel: "备注",
                 anchor: '100%',
                 name: "Description"
             }, 
   
      {
        fieldLabel: "表单模板",
        columnWidth: 1,
        xtype: 'htmleditor',  // 提供一个轻量的HTML编辑器组件
        value: '<br>', //设置默认值,解决视图编辑模式下内容为空时,自动添加 ? 问题  
        anchor: '100% -70',
        fontFamilies: ['宋体', '隶书', '黑体', '楷体'], // 字体列表   fontFamilies 可用字体数组
        name: "ContentText",
        getDocMarkup: function () {   //当编辑器用HTML内容初始化iframe时调用。
            var me = this,
                h = me.iframeEl.getHeight() - me.iframePad * 2,
                oldIE = Ext.isIE8m;           
            return Ext.String.format(
                (oldIE ? '' : '<!DOCTYPE html>')
                + '<html><head><style type="text/css">'
                + (Ext.isOpera ? 'p{margin:0}' : '')
                + 'body{border:0;margin:0;padding:{0}px;direction:' + (me.rtl ? 'rtl;' : 'ltr;')
                + (oldIE ? Ext.emptyString : 'min-')
                + 'height:{1}px;box-sizing:border-box;-moz-box-sizing:border-box;-webkit-box-sizing:border-box;cursor:text;background-color:white;'
                + (Ext.isIE ? '' : 'font-size:12px;font-family:{2}')
                + '}</style>'
                + '<link href="/Content/css/docTrace.css" rel="stylesheet" type="text/css" />'
                + '</head><body></body></html>'
                , me.iframePad, h, me.defaultFont);
        }
    }]
  });
        me.callParent(arguments);
    },
    //保存
    doSubmit: function (successFun,failureFun) {
        var me = this;
        var form = me.getForm();
        if (!form.isValid()) {
            return;
        }
        var editor = me.down("htmleditor");
        var els = Ext.query("*[fldtype]",true, editor.iframeEl.dom.contentDocument);  //对编辑器内部的dom进行组件查询,
        var fields = [];
        //将最新版本的值付给表单元素。
        for (j = 0; j < els.length; j++) {
           // for (k = 0; k < fields.length; j++) {
            for (k = 0; k < fields.length; k++)
            {
                if (fields[k].FieldName == els[j].getAttribute("name") && els[j].getAttribute("name") != "")
                {
                    ShowMsg('系统提示','['+fields[k].FieldName+ ']表单项重名,保存失败!');
                    return;
                }
            }
            fields.push({
                FieldName: els[j].getAttribute("name"), fldtype: els[j].getAttribute("fldtype"),
                TagName: els[j].tagName,
                IsKeyField: els[j].attributes["iskeyfield"]== null ? "N" : els[j].attributes["iskeyfield"].value
            });
       }
 
        form.submit({
            waitMsg: "保存中...",
            clientValidation: false,  //决定是否在提交之前调用isValid对Form的表单项进行校验。 在Form的提交选项中传递false可以阻止此操作。
            url: getAjaxUrl("update_CORE_WorkForm", {}),
            params: {
                Category: me.Category,
                fields: Ext.JSON.encode(fields)
            },
            success: function (form, action) {
                form.reset();
                if (successFun) successFun();
            },
            failure: function (form, action) {
                ShowMsg('系统提示', '数据保存失败!');
                if (failureFun) failureFun();
            }
        });
    }
});
复制代码

 

posted @   小小叶弯  阅读(589)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 三行代码完成国际化适配,妙~啊~
· .NET Core 中如何实现缓存的预热?
点击右上角即可分享
微信分享提示