function.js 8.58 KB
define("op/function", ['openPlatform', 'modal', "components/common", 'jquery'], function (op, modal, common) {
    var template = '\
{@each data as classify}\
<section class="p-classify" data-category="${classify.categoryName}">\
    <label><span>${classify.categoryText}</span></label>\
    <ul>\
        {@each classify.items as fun}\
        <li data-id="${fun.id}" class="p-row">\
            <div class="function-desc">\
                <span class="sign ellipsis">${fun.sign}</span>\
                <span class="desc">${fun.desc}</span>\
            </div>\
        </li>\
        {@/each}\
    </ul>\
</section>\
{@/each}\
';
    var listData = null;

    return {
        list: {
            initialized: false,
            module: "function",
            action: "list",
            activeDataId: "",
            template: template,
            afterRender: function ($panel, data) {
                var l = this;

                listData = data;
                $panel.off("click", ".p-row");
                $panel.on("click", ".p-row", function (e) {
                    var $fn = $(this);
                    var category = $fn.parents(".p-classify").attr("data-category");
                    var mode = op.DEV_MODE;
                    var activeMode = op.RUN_MODE; // 默认系统函数只有运行模式 自定义函数只有开发模式
                    var actionName = "getFunctionDemoHtml";
                    var isCustom = category == "custom";

			        window.location.hash = op_changeURLHash('refId', $fn.attr("data-id"));
                    if (isCustom) {
                        mode = op.RUN_MODE;
                        activeMode = op.DEV_MODE;
                        actionName = "getFunctionHtml";
                    }

                    l.activeDataId = $fn.attr("data-id");
                    
                    op.toggleMode(mode, false);
                    op.toggleSaveIcon(isCustom);
                    op.toggleDelIcon(isCustom);

                    $(".p-row", e.delegateTarget).removeClass("active");
                    $fn.addClass("active");
                    
                    op.callOpApi(actionName, { "id": l.activeDataId }, function (res) {
                        var data = res.data;
                        var cfg = {
                            page: {
                                html: { code: data.html },
                                css: {
                                    external: [
                                        "/mobilemode/mobile/dist/css/main-default.css",
                                    ],
                                    code: data.css
                                },
                                javascript: {
                                    external: [
                                        "/mobilemode/mobile/dist/js/lib/require/require.min_wev8.js?v" + new Date().getTime(),
                                        "/mobilemode/mobile/dist/js/main_demo/main.js?v" + new Date().getTime()
                                    ],
                                    code: data.script
                                }
                            },
                            layout: {
                                editor: {
                                    onresize: maximization
                                }
                            }
                        };

                        if (activeMode === op.DEV_MODE) {
                            cfg.layout.editor.max = "javascript";
                        } else {
                            cfg.layout.editor.min = "css";
                        }

                        op.initEditor(activeMode, cfg);
                    });
                });
            }
        },
        creator: {
            initialized: false,
            getPanel: function () {
                return $("#function-create-panel");
            },
            init: function () {
                var $panel = this.getPanel();
                
                $panel.find("input").on("change", function (e) {
                    var file = this.files[0] || {};
                    var $filename = $(".file-name", $panel);
                    var filename = file.name;
                        
                    $filename.html(filename).toggle(!!filename);
                });
            },
            onOpen: function () {},
            onClose: function () {
                var $panel = this.getPanel();

                $panel.find("input").val("").trigger("change");
            },
            onOk: function () {
                var $panel = this.getPanel();
                var files = $panel.find("input")[0].files;
                var file = files[0];
                var formdata;

                if (!file) {
                    modal.warn(SystemEnv.getHtmlNoteName(6368), 2000);
                    return false;
                }

                formdata = new FormData();
                formdata.append("file", file, file.name);

                return common.api("function", {
                    action: "import",
                    type: "post",
                    data: formdata,
                    processData: false,
                    contentType: false
                });
            },
            onConfirm: function () {
                var $panel = this.getPanel();
                var files = $panel.find("input")[0].files;
                var file = files[0];
                var formdata;

                if (!file) {
                    modal.warn(SystemEnv.getHtmlNoteName(6368), 2000);
                    return false;
                }

                formdata = new FormData();
                formdata.append("file", file, file.name);
                return common.api("function", {
                    action: "import?action=cover",
                    type: "post",
                    data: formdata,
                    processData: false,
                    contentType: false,
                    notification: { success: SystemEnv.getHtmlNoteName(5340) }//导入成功
                });
            },
            onCancel: function () {
                $(".layui-layer-btn").find("a").toggleClass("disabled", false);
            }
        },
        action: {
            onSave: function (id, settings) {
                var data = {
                    id: id,
                    dev: {
                        javascript: op.getEditor("javascript").getValue()
                    }
                };
                settings.action = "modifyFunction";
                settings.data = {data: JSON.stringify(data)};

                return common.api("op", settings);
            },
            onDel: function (fid) {
                var deferred = $.Deferred();

                modal.confirm(SystemEnv.getHtmlNoteName(5480), function (index) {
                    op.callOpApi({
                        action: "deleteFunction", 
                        data: { id: fid }, 
                        type: "get",
                        notification: { success: SystemEnv.getHtmlNoteName(5345) }//删除成功
                    }, function () {
                        op.toggleDelIcon(false);
                        op.toggleSaveIcon(false);
                        op.initEditor(op.DEV_MODE, op.getEditorDefCfg());
                    }).then(function () {
                        modal.close(index);
                        deferred.resolve();
                    });
                });

                return deferred;
            },
            onSearch: function (val, $panel) {
                if (!listData) return;

                var categories = listData.data;
                var _toggle = function (isshow) {
                    isshow = !!isshow;
                    $panel.find("[data-id]").toggle(isshow);
                    $panel.find("[data-category]").toggle(isshow);
                };

                if (!val) return _toggle(true);

                _toggle(false);
                categories.forEach(function (category) {
                    var items = category.items.filter(function (item) {
                        var itemId = item.id.toLowerCase();
                        var desc = item.desc.toLowerCase();
                        var ismatch = ~itemId.indexOf(val) || ~desc.indexOf(val);

                        return ismatch;
                    });

                    if (!items.length) return;

                    items.forEach(function (item) {
                        $panel.find("[data-id='" + item.id + "']").show();
                    });

                    $panel.find("[data-category='" + category.categoryName + "']").show();
                });
            }
        }
    };
});