zhangyanpeng
2024-08-25 9253a1b75603488a1a50b4198170e20051ea5ae2
调整
5个文件已修改
4个文件已添加
2001 ■■■■■ 已修改文件
js/config.js 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
js/myelement.js 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
module/config/page/sys_menu_add.html 85 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
module/config/page/sys_menu_add_report.html 465 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
module/config/page/sys_menu_edit.html 823 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
module/model/model_iframe.html 172 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
module/model/page/table_simple.html 426 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
module/system/page/main.html 22 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
module/tool/page/popup_iconfont.html 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
js/config.js
@@ -14,7 +14,7 @@
config = {
    jscssversion: "2024081902", //.js/.css文件的版本号,去除前端缓存的一种机制
    jscssversion: "2024082502", //.js/.css文件的版本号,去除前端缓存的一种机制
    isupgrading: false, //是否升级中
    appName: "TPP",
    title: "营销一体化运营平台",
js/myelement.js
@@ -5550,9 +5550,9 @@
                            ' :disabled = "typeof (fieldObj.disabled) != \'undefined\' ? fieldObj.disabled : (disabled ? true : false)" '+
                            ' :value="formData[fieldObj.field] && formData[fieldObj.field].length == fieldObj.options.length ? true : false" @change="handleCheckAllChange($event, fieldObj, formData)">全选</el-checkbox>'+
                            
                            '<el-checkbox-group  v-model="formData[fieldObj.field]" class="h_form_checkboxgroup" '+
                            '<el-checkbox-group  v-model="formData[fieldObj.field]" class="h_form_checkboxgroup aaa" '+
                            ' :disabled = "typeof (fieldObj.disabled) != \'undefined\' ? fieldObj.disabled : (disabled ? true : false)" @change="formchange($event, fieldObj)"> '+
                                '<el-checkbox v-for="(o, k) in fieldObj.options" :key="k" :label="o.code"><div :style="{width: fieldObj.valuewidth ? fieldObj.valuewidth : \'100%\'}">{{o.value}}</div></el-checkbox> '+
                                '<el-checkbox v-for="(o, k) in fieldObj.options" :key="\'f_checkboxobj\' + k" :label="o.code"><div :style="{width: fieldObj.valuewidth ? fieldObj.valuewidth : \'100%\'}">{{o.value}}</div></el-checkbox> '+
                            '</el-checkbox-group> '+
                        '</div>'+
                        '<div v-else>'+ 
module/config/page/sys_menu_add.html
@@ -32,7 +32,9 @@
                            //id: uuid_short(),
                            // code: createCode("BA"),
                        },
                        formData: {},
                        formData: {
                            title: "",
                        },
                        
                        dataRequest: [
                            {
@@ -63,6 +65,9 @@
                        
                        pageid: "", // 新页面id
                        parent_menuobj: {}, // 父级菜单
                        isAddMenu: false, // 仅添加一个菜单
                        treeoptions: []
                    },
                    created() {
                        this.popupParames = clone(Root.popupParames);
@@ -72,13 +77,41 @@
                        // }
                        if (this.popupParames.data) {
                            this.parent_menuobj = this.popupParames.data;
                            if (this.popupParames.sceneCode) {
                                if (this.popupParames.sceneCode == 'add') {
                                    this.pageid = createCode("R_");
                                if (this.popupParames.sceneCode == 'addmenu') {
                                    this.isAddMenu = true;
                                    this.parent_menuobj = this.popupParames.data;
                                    if (this.parent_menuobj && this.parent_menuobj.id) {
                                        this.formData.parent_id = this.parent_menuobj.id
                                    }
                                }
                                else if (this.popupParames.sceneCode == 'add') {
                                    this.parent_menuobj = this.popupParames.data;
                                    this.pageid = createCode("M_P");
                                    this.formData.parent_id = this.popupParames.data.id;
                                } else if (this.popupParames.sceneCode == 'edit') {
                                }
                                else if (this.popupParames.sceneCode == 'edit') {
                                    this.pageid = this.popupParames.data.page_id;
                                    this.parent_menuobj = {
                                        id: this.popupParames.data.parent_id,
                                        type_code: this.popupParames.data.type_code
                                    };
                                    if (this.popupParames.data.url &&  this.popupParames.data.url.indexOf("viewlet=") > 0) {
                                        var url_ = this.popupParames.data.url.split("viewlet=")
                                        var url_parame_ = url_[1].split("&")
                                        if (url_parame_[1] && url_parame_[1] == "op=write") {
                                            this.popupParames.data.reporttype = "write"
                                        }
                                        else if (url_parame_[1] && url_parame_[1] == "op=view") {
                                            this.popupParames.data.reporttype = "view"
                                        }
                                        else {
                                            this.popupParames.data.reporttype = ""
                                        }
                                        this.popupParames.data.url = url_parame_[0]
                                    }
                                    this.formData = clone(this.popupParames.data);
                                }
                            }
@@ -157,8 +190,13 @@
                                        }
                                        formFields_.push(clone(f));
                                    })
                                    var page_url = {isshow: "T", field: "url", name: "路径", type: "input", required: true}
                                    formFields_.push(clone(page_url));
                                    // if (!me.isAddMenu) {
                                    //     var page_url = {isshow: "T", field: "url", name: "路径", type: "input", required: true, placeholder: "如:patch_report/DMS_index_mysql.frm", appendix: "报表中的参数包含actor(角色类型Org/Business/Sales/Customer/Admin)、target_id(销售岗位ID/DMS开户ID)、company_id、bu_id", isvalexplain_br: true}
                                    //     var page_reporttype = {isshow: "T", field: "reporttype", name: "类型", type: "radio", options: [{code: "", value: "预览"}, {code: "write", value: "填报"},{code: "view", value: "分析"}]}
                                    //     formFields_.push(clone(page_url));
                                    //     formFields_.push(clone(page_reporttype));
                                    // }
                                    if (!me.formFields || (me.formFields && me.formFields.length == 0)) {
                                        me.formFields = clone(formFields_);
                                        
@@ -269,11 +307,12 @@
                            var me = this;
                            if (this.pageid) {
                                var entity_ = clone(this.formData);
                                var entity = {
                                    id: this.pageid,
                                    code: this.pageid,
                                    title: entity_.title,
                                    url: "module/report/page/report_iframe.html?viewlet=" + entity_.url,
                                    url: entity_.url ? entity_.url : "module/model/model_iframe.html",
                                    is_active: "T"
                                };
                                
@@ -298,12 +337,13 @@
                            var me = this;
                            var entity_ = clone(this.formData);
                            var entity = {
                                parent_id: this.parent_menuobj.id,
                                type_code: this.parent_menuobj.type_code,
                                page_id: this.pageid,
                                parent_id: this.parent_menuobj.id || null,
                                type_code: this.parent_menuobj.type_code || "Z",
                                open_type: "arrange",
                                page_id: this.pageid || null,
                                title: entity_.title,
                                icon: entity_.icon,
                                order_no: this.parent_menuobj.children.length + 1,
                                order_no: entity_.order_no ? entity_.order_no : (this.parent_menuobj.children ? this.parent_menuobj.children.length + 1 : 1),
                            };
                            
                            if (entity_.id) {
@@ -317,6 +357,26 @@
                            param.data[this.dataname] = entity;
                            Server.call("root/data/saveEntity", param, function(result) {
                                console.log(result);
                                if (me.pageid) {
                                    me.onRefreshCacheByPageId(me.pageid);
                                }
                                else {
                                    Root.message({
                                        type: 'success',
                                        message: '保存成功'
                                    });
                                    me.saveAfter();
                                }
                            });
                        },
                        // 刷新缓存
                        onRefreshCacheByPageId(PageId) {
                            var me = this;
                            let param_ = {
                                page_id: PageId
                            }
                            Server.call("root/system/reloadMenuByPage", param_, function(result) {
                                if (result.success) {
                                    let param_ = {
                                        dataname: "sys_menu",
@@ -334,7 +394,6 @@
                                }
                            });
                        },
                        
                    }
                });
module/config/page/sys_menu_add_report.html
New file
@@ -0,0 +1,465 @@
<!doctype html>
<html>
    <head>
        <meta charset="utf-8"><meta http-equiv="Expires" content="0"><meta http-equiv="Pragma" content="no-cache"><meta http-equiv="Cache-control" content="no-cache"><meta http-equiv="Cache" content="no-cache">
        <title>新增菜单</title>
        <script type="text/javascript">
            var pageVue = null;
            function loadJsCss(callback) {
                var jscss_urls = [];
                window.top.initJsCss(document, jscss_urls, callback);
            };
            function initVue() {
                new FormVue({
                    el: "#vbody",
                    data: {
                        dataname: "sys_menu",
                        title: "新增菜单",
                        formAttr: {
                            istitle: false,
                            title: "",
                            columnnumber: 1,
                            labelwidth: "70px",
                            labelposition: "left",
                            size: "medium",
                            border: "10px solid #c6c6c600"
                        },
                        formFields: [],
                        newformData: {
                            //id: uuid_short(),
                            // code: createCode("BA"),
                        },
                        formData: {
                            title: "",
                        },
                        dataRequest: [
                            {
                                name: "sys_menunotpage",
                                dataname: "sys_menu",
                                filter: " page_id is null",
                                isnotoption: false, //true:不是选项
                                code:"id",//是下拉选项时设置
                                label:"name",//是下拉选项时设置
                            },
                        ],
                        dataRequestObj: {},
                        options_menumap: {},
                        options_menutree: [],
                        //按键权限设置
                        isedit: false,//提交前编辑,保存/提交
                        isrefuseedit: false,//拒绝后编辑,保存/再次提交
                        isapproval: false,//审批,同意/拒绝/转办/退回
                        iscommit: false,//提交标记
                        //弹窗参数
                        popupParames: {},
                        //字段设置
                        tablefieldClick: {},
                        formfieldClick: {},
                        pageid: "", // 新页面id
                        parent_menuobj: {}, // 父级菜单
                        isAddMenu: false, // 仅添加一个菜单
                        treeoptions: []
                    },
                    created() {
                        this.popupParames = clone(Root.popupParames);
                        this.title = this.popupParames.title || this.popupParames.text
                        // if (this.popupParames.data) {
                        //     this.formData = clone(this.popupParames.data);
                        // }
                        if (this.popupParames.data) {
                            if (this.popupParames.sceneCode) {
                                if (this.popupParames.sceneCode == 'addmenu') {
                                    this.isAddMenu = true;
                                    this.parent_menuobj = this.popupParames.data;
                                    if (this.parent_menuobj && this.parent_menuobj.id) {
                                        this.formData.parent_id = this.parent_menuobj.id
                                    }
                                }
                                else if (this.popupParames.sceneCode == 'add') {
                                    this.parent_menuobj = this.popupParames.data;
                                    this.pageid = createCode("R_");
                                    this.formData.parent_id = this.popupParames.data.id;
                                }
                                else if (this.popupParames.sceneCode == 'edit') {
                                    this.pageid = this.popupParames.data.page_id;
                                    this.parent_menuobj = {
                                        id: this.popupParames.data.parent_id,
                                        type_code: this.popupParames.data.type_code
                                    };
                                    if (this.popupParames.data.url &&  this.popupParames.data.url.indexOf("viewlet=") > 0) {
                                        var url_ = this.popupParames.data.url.split("viewlet=")
                                        var url_parame_ = url_[1].split("&")
                                        if (url_parame_[1] && url_parame_[1] == "op=write") {
                                            this.popupParames.data.reporttype = "write"
                                        }
                                        else if (url_parame_[1] && url_parame_[1] == "op=view") {
                                            this.popupParames.data.reporttype = "view"
                                        }
                                        else {
                                            this.popupParames.data.reporttype = ""
                                        }
                                        this.popupParames.data.url = url_parame_[0]
                                    }
                                    this.formData = clone(this.popupParames.data);
                                }
                            }
                        }
                    },
                    mounted() {
                        var me = this;
                        //预加载数据
                        if (this.dataRequest && this.dataRequest.length) {
                            var result = {};
                            this.loadRequestData(this.dataRequest, result, function(data) {
                                me.dataRequestObj = data;
                                //预加载数据后给哪些字段设置options或formatterjson
                                var sys_menunotpage_ = clone(data.sys_menunotpage);
                                sys_menunotpage_.map(m=>{
                                    me.options_menumap[m.id] = m;
                                })
                                var sys_menunotpagetree = ArrayToTree(clone(sys_menunotpage_), "title", "parent_id");
                                me.options_menutree = clone(sys_menunotpagetree);
                                me.initData();
                            });
                        }
                        else {
                            this.initData();
                        }
                    },
                    methods:{
                        //关闭弹窗
                        closeDialog() {
                            var me = this;
                            if (me.popupParames.totab){
                                Root.tab.removeItem(Root.tab.selected);
                                Root.tab.open(me.popupParames.parentOption, false);
                            }
                            else {
                                Root.hidePopup();
                            }
                        },
                        //关闭前调回调
                        saveAfter() {
                            var me = this;
                            if(this.popupParames.callback) {
                                let obj = {
                                    options: this.treeoptions,
                                }
                                this.popupParames.callback(obj, function() {
                                    me.closeDialog();
                                });
                            }
                            else {
                                me.closeDialog();
                            }
                        },
                        initData() {
                            let me = this;
                            var id_ = null;
                            if (this.formData.id) {
                                id_ = this.formData.id;
                            }
                            this.getRowDataById(id_, function(result) { //查询后的回调,用于获取字段的
                                if (result.meta && result.meta[me.dataname] && result.meta[me.dataname].fields) {
                                    var metas = clone(result.meta[me.dataname].fields);
                                    var formFields_ = [];
                                    metas.map(f=>{
                                        f.isshow = "T";
                                        if (f.field == "parent_id") {
                                            // f.notshowalllevels = true;
                                            f.props = {value: "id", label: "title", checkStrictly: true};
                                            f.options = me.options_menutree;
                                        }
                                        formFields_.push(clone(f));
                                    })
                                    if (!me.isAddMenu) {
                                        var page_url = {isshow: "T", field: "url", name: "路径", type: "input", required: true, placeholder: "如:patch_report/DMS_index_mysql.frm", appendix: "报表中的参数包含actor(角色类型Org/Business/Sales/Customer/Admin)、target_id(销售岗位ID/DMS开户ID)、company_id、bu_id", isvalexplain_br: true}
                                        var page_reporttype = {isshow: "T", field: "reporttype", name: "类型", type: "radio", options: [{code: "", value: "预览"}, {code: "write", value: "填报"},{code: "view", value: "分析"}]}
                                        formFields_.push(clone(page_url));
                                        formFields_.push(clone(page_reporttype));
                                    }
                                    if (!me.formFields || (me.formFields && me.formFields.length == 0)) {
                                        me.formFields = clone(formFields_);
                                        //设置字段事件
                                        me.tableFieldClick();
                                        // 以服务的方式调用的 Loading 需要异步关闭
                                        me.$nextTick(() => {
                                            hideLoading();
                                            //重新设置弹窗宽高
                                            me.$nextTick(function(){
                                                let w_ = me.$refs.popup_body.offsetWidth + "px";
                                                w_ = "900px";
                                                let h_ = me.$refs.popup_body.offsetHeight + "px";
                                                Root.setPopupWH(w_, h_);
                                            })
                                        });
                                    }
                                }
                            })
                        },
                        tableFieldClick() {
                            var me = this;
                            //表单字段事件设置
                            this.formfieldClick = {
                                icon: {
                                    popup: {
                                        onclick: function(obj) {//弹窗点击事件
                                            //打开
                                            me.open_iconlist()
                                        }
                                    },
                                },
                                page_id: {
                                    popup: {
                                        onclick: function(obj) {//弹窗点击事件
                                            //打开
                                            me.open_pagelist()
                                        }
                                    },
                                },
                            };
                        },
                        open_iconlist() {
                            var me = this;
                            var config = {
                                totab: false, //true: 以Tab导航的方式打开
                                width: "900px",
                                height: "900px",
                                icon: "icon-product",
                                text: "图标选择弹窗",
                                id: "popup_iconfont",//totab: true时需设置,用于判断是否已打开此页面
                                url: "module/tool/page/popup_iconfont.html",
                                data: {},
                                delta: {pageobj: me.selectTabObj},
                                sceneCode: "add",//"refuseedit",//"approval", //"add"//"browse",
                                callback: function(obj, callback) {
                                    let formData_ = clone(me.formData);
                                    formData_.icon = obj.icon;
                                    me.formData = formData_;
                                    if (callback) {
                                        callback();
                                    }
                                }
                            };
                            me.doPopupByPublic(config);
                        },
                        open_pagelist() {
                            var me = this;
                            var config = {
                                totab: false, //true: 以Tab导航的方式打开
                                width: "900px",
                                height: "900px",
                                icon: "icon-product",
                                text: "对应页面信息",
                                id: "popup_page",//totab: true时需设置,用于判断是否已打开此页面
                                url: "module/config/page/popup_page.html",
                                data: {},
                                delta: {},
                                sceneCode: "add",//"refuseedit",//"approval", //"add"//"browse",
                                callback: function(obj, callback) {
                                    let formData_ = clone(me.formData);
                                    formData_.page_id = obj.row.id;
                                    me.formData = formData_;
                                    if (callback) {
                                        callback();
                                    }
                                }
                            };
                            me.doPopupByPublic(config);
                        },
                        //提交
                        submitRowTable() {
                            this.iscommit = true;
                            this.saveRowTable();
                        },
                        // 保存页面
                        saveRowTable() {
                            var me = this;
                            if (this.pageid) {
                                var entity_ = clone(this.formData);
                                if (entity_.reporttype && entity_.reporttype == "write") {
                                    entity_.url += "&op=write"
                                }
                                else if (entity_.reporttype && entity_.reporttype == "view") {
                                    entity_.url += "&op=view"
                                }
                                var entity = {
                                    id: this.pageid,
                                    code: this.pageid,
                                    title: entity_.title,
                                    url: "module/report/page/report_iframe.html?viewlet=" + entity_.url,
                                    is_active: "T"
                                };
                                let param = {
                                    dataname: "sys_page",
                                    data: {},
                                }
                                param.data["sys_page"] = entity;
                                Server.call("root/data/saveEntity", param, function(result) {
                                    console.log(result);
                                    if (result.success) {
                                        me.doSaveRowTable();
                                    }
                                })
                            }
                            else {
                                this.doSaveRowTable()
                            }
                        },
                        //保存菜单
                        doSaveRowTable() {
                            var me = this;
                            var entity_ = clone(this.formData);
                            var entity = {
                                parent_id: this.parent_menuobj.id || null,
                                type_code: this.parent_menuobj.type_code || "Z",
                                page_id: this.pageid || null,
                                title: entity_.title,
                                icon: entity_.icon,
                                order_no: entity_.order_no ? entity_.order_no : (this.parent_menuobj.children ? this.parent_menuobj.children.length + 1 : 1),
                            };
                            if (entity_.id) {
                                entity.id = entity_.id
                            }
                            let param = {
                                dataname: this.dataname,
                                data: {},
                            }
                            param.data[this.dataname] = entity;
                            Server.call("root/data/saveEntity", param, function(result) {
                                console.log(result);
                                if (me.pageid) {
                                    me.onRefreshCacheByPageId(me.pageid);
                                }
                                else {
                                    Root.message({
                                        type: 'success',
                                        message: '保存成功'
                                    });
                                    me.saveAfter();
                                }
                            });
                        },
                        // 刷新缓存
                        onRefreshCacheByPageId(PageId) {
                            var me = this;
                            let param_ = {
                                page_id: PageId
                            }
                            Server.call("root/system/reloadMenuByPage", param_, function(result) {
                                if (result.success) {
                                    let param_ = {
                                        dataname: "sys_menu",
                                        filter: "page_id is null",
                                    }
                                    Server.call("root/data/getEntitySet", param_, function(result2){
                                        let agm_category_ = ArrayToTree(clone(result2.data.entityset), "title", "parent_id");
                                        me.options_menutree = agm_category_;
                                        Root.message({
                                            type: 'success',
                                            message: '保存成功'
                                        });
                                        me.saveAfter();
                                    });
                                }
                            });
                        },
                    }
                });
            };
            loadJsCss(function () {
                initVue();
            });
        </script>
        <style>
            /*  在vue.js中 v-cloak 这个指令是防止页面加载时出现 vuejs 的变量名而设计的 */
            [v-cloak] {
                display: none !important;
            }
        </style>
    </head>
    <body style="margin: 0px;">
        <div v-cloak id="vbody">
            <div id="page_root">
                <div ref="popup_body" style="padding: 0 20px;">
                    <div class="popup_el-dialog__header">
                        <div class="dialog-title">
                          <i class="iconfont icon-customermanagement"></i>
                          <span> {{title}}</span>
                        </div>
                    </div>
                    <div style="overflow-y: auto;">
                        <div class="el-dialog__body">
                            <h-form
                                ref="form1"
                                :form-attr="formAttr"
                                :table-fields="formFields"
                                :form-data="formData"
                                :table-field-click="formfieldClick"
                            >
                            </h-form>
                        </div>
                    </div>
                    <div class="el-dialog__footer">
                        <el-button size="small" type="default" @click="closeDialog">取 消</el-button>
                        <el-button size="small" type="primary" @click="saveRowTable":icon="buttonsconfig.save.icon">{{buttonsconfig.save.name}}</el-button>
                        <!-- <el-button size="small" v-if="isedit" type="success" @click="submitRowTable":icon="buttonsconfig.submit.icon">{{buttonsconfig.submit.name}}</el-button> -->
                        <!-- <el-button size="small" v-if="isrefuseedit" type="success" @click="">再次提交</el-button>
                        <el-button size="small" v-if="isapproval" type="primary" @click="">通 过</el-button>
                        <el-button size="small" v-if="isapproval" type="success" @click="">拒 绝</el-button>
                        <el-button size="small" v-if="isapproval" type="primary" @click="">转 办</el-button>
                        <el-button size="small" v-if="isapproval" type="success" @click="">退 回</el-button> -->
                    </div>
                </div>
            </div>
        </div>
        <div id="page_loading" style="position: absolute; top:0px; width: 100vw; height: 50vh;">
            <div class="spinner">
              <div class="cube1"></div>
              <div class="cube2"></div>
            </div>
        </div>
    </body>
</html>
module/config/page/sys_menu_edit.html
New file
@@ -0,0 +1,823 @@
<!doctype html>
<html>
    <head>
        <meta charset="utf-8"><meta http-equiv="Expires" content="0"><meta http-equiv="Pragma" content="no-cache"><meta http-equiv="Cache-control" content="no-cache"><meta http-equiv="Cache" content="no-cache">
        <title>菜单</title>
        <script type="text/javascript">
            var pageVue = null;
            function loadJsCss(callback) {
                var jscss_urls = [];
                window.top.initJsCss(document, jscss_urls, callback);
            };
            function initVue() {
                new TreeVue({
                    el: "#vbody",
                    data: {
                        dataname: "sys_menu",
                        title: "菜单管理",
                        tree_title: "菜单管理",
                        treeTxtFormatter: "{title}",
                        isTreeReadonly: false,
                        form_dataname: "sys_menu",
                        // formAttr: {},
                        formFields: [],
                        formData: {
                            parent_id: []
                        },
                        formfieldClick: {},
                        defaultexpandedkeys: [],
                        currentnodekey: "",
                        dataRequest: [
                            {
                                name: "sys_menunotpage",
                                dataname: "sys_menu",
                                filter: " page_id is null",
                                isnotoption: false, //true:不是选项
                                code:"id",//是下拉选项时设置
                                label:"name",//是下拉选项时设置
                            },
                            {
                                name: "sys_model",
                                dataname: "sys_model",
                                filter: "",
                                isnotoption: false, //true:不是选项
                                code:"id",//是下拉选项时设置
                                label:"name",//是下拉选项时设置
                            },
                        ],
                        dataRequestObj: {},
                        options_menutree: [],
                        options_menumap: {},
                        options_model: [],
                        options_buttons: [],
                        pagebuttonmap: {},
                        pagesize_p: 10,
                        pagenum_p: 1,
                        total_p: 0,
                        tableData_p: [],
                        isRefresh_p: true,
                        tableHeight_p: 100,
                        selectNodeData: {},
                        page_metas: [
                            {isshow: "T", field: "parent_id", labelchinese: "菜单路径", inputtype: "cascader", optionsgroup: "", group_name: "菜单信息"},
                            {isshow: "T", field: "title", labelchinese: "菜单名称", inputtype: "", optionsgroup: "", group_name: "菜单信息"},
                            {isshow: "T", field: "icon", labelchinese: "菜单图标", inputtype: "popup", optionsgroup: "", group_name: "菜单信息"},
                            {isshow: "T", field: "url", labelchinese: "地址", inputtype: "", optionsgroup: "", group_name: "菜单信息"},
                            {isshow: "T", field: "model_id", labelchinese: "模型选择", inputtype: "select", optionsgroup: "", colspan: 2, group_name: "页面配置"},
                            {isshow: "T", field: "page_title", labelchinese: "页面标题", inputtype: "", optionsgroup: "", group_name: "页面配置"},
                            {isshow: "T", field: "dataname", labelchinese: "数据对象", inputtype: "", optionsgroup: "", group_name: "页面配置"},
                            {isshow: "T", field: "buttons", labelchinese: "选择功能", inputtype: "checkboxobj", optionsgroup: "", group_name: "页面配置"},
                        ],
                        tableFields_table: [
                            {isshow: "T", field: "field", labelchinese: "字段", width: "130", isfixed: "left", align: "left"},
                            {isshow: "T", field: "labelchinese", labelchinese: "中文名称",inputtype: "input", width: "130", isfixed: "left"},
                            {isshow: "T", field: "is_list", labelchinese: "是否显示",inputtype: "ischeckbox"},
                            {isshow: "T", field: "isfilter", labelchinese: "是否查询",inputtype: "ischeckbox"},
                            {isshow: "T", field: "list_order_no", labelchinese: "顺序",inputtype: "number"},
                            {isshow: "T", field: "width", labelchinese: "宽度",inputtype: "input"},
                            {isshow: "T", field: "isminwidth", labelchinese: "是否最小宽度",inputtype: "ischeckbox", width: "100"},
                            {isshow: "T", field: "formatter", labelchinese: "格式化",inputtype: "select", optionsgroup: "formatterEvent", width: "150"},
                            {isshow: "T", field: "formatpattern", labelchinese: "格式化参数",inputtype: "input", width: "150"},
                            {isshow: "T", field: "align", labelchinese: "对齐方式",inputtype: "select", optionsgroup: "dataAlign", width: "150"},
                            {isshow: "F", field: "last_update_time", labelchinese: "更新时间"},
                            {isshow: "T", field: "tablegroupname", labelchinese: "表头分组名",inputtype: "input"},
                        ],
                        tableFields_form: [
                            {isshow: "T", field: "field", labelchinese: "字段", width: "130", isfixed: "left", align: "left"},
                            {isshow: "T", field: "labelchinese", labelchinese: "中文名称",inputtype: "input", width: "130", isfixed: "left"},
                            {isshow: "T", field: "is_form", labelchinese: "是否显示", inputtype: "ischeckbox"},
                            {isshow: "T", field: "inputtype", labelchinese: "输入类型", inputtype: "select", optionsgroup: "inputType", width: "150"},
                            {isshow: "T", field: "optionsgroup", labelchinese: "选项字典", inputtype: "select", optionsgroup: "dictionary"},
                            {isshow: "T", field: "list_order_no", labelchinese: "顺序",inputtype: "number"},
                            {isshow: "T", field: "required", labelchinese: "是否必填",inputtype: "ischeckbox"},
                            {isshow: "T", field: "colspan", labelchinese: "合并列数",inputtype: "input"},
                            {isshow: "T", field: "formatter", labelchinese: "格式化",inputtype: "select", optionsgroup: "formatterEvent", width: "150"},
                            {isshow: "T", field: "formatpattern", labelchinese: "格式化参数",inputtype: "input", width: "150"},
                            {isshow: "F", field: "last_update_time", labelchinese: "更新时间"},
                            {isshow: "T", field: "group_name", labelchinese: "表头分组名"},
                        ],
                        tableFields: [],
                        tableData: [],
                        tableHeight: 500,
                        tablefieldClick: {},
                        tablebuttonClick: [],
                        tableloading: false,
                        scene_type: ""
                    },
                    created() {
                        let clientHeight = document.documentElement.clientHeight;
                        this.tableHeight = clientHeight - 250 - 32;
                    },
                    mounted() {
                        var me = this;
                        //预加载数据
                        if (this.dataRequest.length) {
                            var result = {};
                            this.loadRequestData(this.dataRequest, result, function(data) {
                                me.dataRequestObj = data;
                                //预加载数据后给哪些字段设置options或formatterjson
                                if (me.dataRequestObj.sys_menunotpage) {
                                    var sys_menunotpage_ = clone(me.dataRequestObj.sys_menunotpage);
                                    sys_menunotpage_.map(m=>{
                                        me.options_menumap[m.id] = m;
                                    })
                                    var sys_menunotpagetree = ArrayToTree(clone(sys_menunotpage_), "title", "parent_id");
                                    me.options_menutree = clone(sys_menunotpagetree);
                                }
                                if (me.dataRequestObj.sys_model) {
                                    var sys_model_ = clone(me.dataRequestObj.sys_model);
                                    me.options_model = clone(sys_model_);
                                }
                                me.initData();
                            });
                        }
                        else {
                            this.initData();
                        }
                        this.$nextTick(() => { // 以服务的方式调用的 Loading 需要异步关闭
                            hideLoading();
                            this.treeHeight = document.documentElement.clientHeight - 20;
                        });
                    },
                    methods:{
                        initData() {
                            var me = this;
                            this.getMenuAll();
                            this.getPageMeta();
                        },
                        //拿到左边树
                        getMenuAll() {
                            var me = this;
                            var param_ = {}
                            me.treeData = [];
                            Server.call("root/client/getMenuTreeAll", param_, function(result) {
                                //遍历树数据,将根节点的page_id设置为id
                                var menus_tree = clone(result.data.menus);
                                // var menus_tree2 = clone(result.data.menus);
                                me.menuToPageTree(menus_tree);
                                me.treeData = clone(menus_tree);
                                var row = me.treeData[0];
                                // me.$refs.table1.setCurrentRow(row)
                                me.selectNodeData = clone(row);
                                me.formData = row;
                                me.isRefresh = false;
                                me.$nextTick(() => { // 以服务的方式调用的 Loading 需要异步关闭
                                    me.defaultexpandedkeys = [me.formData.id];
                                    me.currentnodekey = me.formData.id;
                                    me.isRefresh = true
                                });
                            })
                        },
                        menuToPageTree(oldmenus) {
                            var me = this;
                            oldmenus.map(om=>{
                                if (om.id && om.open_type && om.open_type == "arrange") {
                                    om.isnot_nodeadd = true; // 节点不可新增
                                }
                                else if (om.id && !om.page_id) {
                                    // om.isnot_nodeadd = true; // 节点不可新增
                                    om.isnot_nodeedit = true; // 节点不可改
                                    om.isnot_nodedel = true; // 节点不可删
                                }
                                else {
                                    om.isnotnode_edit = true; // 节点不可增删改
                                }
                                if (om.children) {
                                    me.menuToPageTree(om.children);
                                }
                                else if (om.menu_id) {
                                    om.id = om.menu_id
                                }
                            })
                        },
                        //拿到右边的字段
                        getPageMeta() {
                            var me = this;
                            var metas = clone(me.page_metas);
                            var formFields_ = [];
                            /*
                            page_metas: [
                                {isshow: "T", field: "title", labelchinese: "菜单名称", inputtype: "", optionsgroup: "", group_name: "菜单信息"},
                                {isshow: "T", field: "url", labelchinese: "路径", inputtype: "", optionsgroup: "", group_name: "菜单信息"},
                                {isshow: "T", field: "model_id", labelchinese: "模型选择", inputtype: "select", optionsgroup: "", colspan: 2, group_name: "页面配置"},
                                {isshow: "T", field: "page_title", labelchinese: "页面标题", inputtype: "", optionsgroup: "", group_name: "页面配置"},
                                {isshow: "T", field: "dataname", labelchinese: "数据对象", inputtype: "", optionsgroup: "", group_name: "页面配置"},
                                {isshow: "T", field: "buttons", labelchinese: "选择功能", inputtype: "checkbox", optionsgroup: "", group_name: "页面配置"},
                            ]
                            */
                            metas.map(f=>{
                                f.isshow = "T";
                                if (f.field == "parent_id") {
                                    f.props = {value: "id", label: "title", checkStrictly: true};
                                    f.options = me.options_menutree;
                                }
                                if (f.field == "model_id") {
                                    // f.props = {value: "id", label: "title", checkStrictly: true};
                                    f.options = me.options_model;
                                }
                                if (f.field == "buttons") {
                                    f.options = clone(me.options_buttons);
                                }
                                formFields_.push(clone(f));
                            })
                            // if (!me.formFields || (me.formFields && me.formFields.length == 0)) {
                            me.formFields = clone(formFields_);
                            // }
                            me.formFieldClick();
                        },
                        getPageData(page_id) {
                            var me = this;
                            // 获取页面对应模型
                            this.getPageData_model(page_id, function(pagemodel) {
                                if (pagemodel && pagemodel.model_id) {
                                    var formData_ = clone(me.formData);
                                    formData_.model_id = pagemodel.model_id
                                    formData_.page_title = pagemodel.title
                                    formData_.dataname = pagemodel.dataname
                                    formData_.buttons = []
                                    me.formData = clone(formData_);
                                    me.scene_type = pagemodel.sys_model__scene_type;
                                    // 获取页面dataname对应字段
                                    me.getModelButtons(formData_.model_id, function(modelbuttons){
                                        me.options_buttons = clone(modelbuttons)
                                        me.getPageMeta();
                                    });
                                    if (formData_.dataname) {
                                        me.getTableData(formData_.dataname, pagemodel.sys_model__scene_type);
                                    }
                                    else {
                                        me.tableFields = [];
                                        me.tableData = [];
                                    }
                                }
                                else {
                                    var formData_ = clone(me.formData);
                                    formData_.model_id = ""
                                    formData_.page_title = ""
                                    formData_.dataname = ""
                                    formData_.buttons = []
                                    me.formData = clone(formData_);
                                    me.options_buttons = []
                                    me.getPageMeta();
                                    me.tableFields = [];
                                    me.tableData = [];
                                }
                            });
                            // 获取页面按键
                            me.getPageButtons(page_id);
                        },
                        getPageButtons(page_id) {
                            var me = this;
                            let param_ = {
                                dataname: "sys_page_button",//获取经销商对应收货地址
                                filter:"sys_page_button.page_id='" + page_id + "'",
                            }
                            Server.call("root/data/getEntitySet", param_, function(result) {
                                var pagebuttons = []
                                var pagebuttonmap = {}
                                if (result && result.data && result.data.entityset && result.data.entityset.length) {
                                    result.data.entityset.map(r=>{
                                        if (!pagebuttonmap[page_id]) {
                                            pagebuttonmap[page_id] = {}
                                        }
                                        pagebuttonmap[page_id][r.code] = r.id;
                                        pagebuttons.push(r.code)
                                    })
                                    me.pagebuttonmap = clone(pagebuttonmap);
                                    var formData_ = clone(me.formData)
                                    formData_.buttons = pagebuttons
                                    me.formData = clone(formData_);
                                }
                            });
                        },
                        getPageData_model(page_id, callback) {
                            var me = this;
                            let param_ = {
                                dataname: "sys_page_model",//获取经销商对应收货地址
                                filter:"sys_page_model.page_id='" + page_id + "'",
                            }
                            Server.call("root/data/getEntitySet", param_, function(result) {
                                var pagemodel = {}
                                if (result && result.data && result.data.entityset && result.data.entityset.length) {
                                    pagemodel = result.data.entityset[0]
                                }
                                callback(pagemodel);
                            });
                        },
                        getModelButtons(model_id, callback) {
                            var me = this;
                            let param_ = {
                                dataname: "sys_model_parameter",//获取经销商对应收货地址
                                filter:"model_id='" + model_id + "' and parameter_type='button'",
                            }
                            Server.call("root/data/getEntitySet", param_, function(result) {
                                var modelbuttons = []
                                if (result && result.data && result.data.entityset && result.data.entityset.length) {
                                    result.data.entityset.map(r=>{
                                        let b_ = {
                                            code: r.parameter_code,
                                            value: r.parameter_name,
                                        }
                                        modelbuttons.push(b_)
                                    })
                                }
                                callback(modelbuttons);
                            });
                        },
                        getTableData(dataname, scene_type) {
                            var me = this;
                            var interface_ = "getEntitySet"
                            if (scene_type == "table") {
                                interface_ = "getEntitySet"
                                this.tableFields = clone(this.tableFields_table)
                            }
                            else {
                                interface_ = "getEntity"
                                this.tableFields = clone(this.tableFields_form)
                            }
                            let param_ = {
                                attachMeta: true,
                                dataname: dataname,//获取经销商对应收货地址
                                filter: "1<>1",
                            }
                            this.tableloading = true;
                            Server.call("root/data/" + interface_, param_, function(result) {
                                me.tableloading = false;
                                var tableData = [];
                                if (result.meta[dataname] && result.meta[dataname].fields) {
                                    tableData = result.meta[dataname].fields
                                }
                                me.tableData = clone(tableData)
                            });
                        },
                        //节点点击,给右边赋值
                        onNodeClick(obj) {
                            var data = obj.data, node = obj.node, el = obj.el;
                            var data_ = clone(data);
                            this.selectNodeData = clone(data);
                            if (data_.parent_id) {
                                var parent_ids_ = [];
                                var parent_ids = this.getParents(data_.parent_id, this.options_menumap, parent_ids_);
                                data_.parent_id = parent_ids
                            }
                            this.formData = data_;
                            this.options_buttons = []
                            if (data_.open_type == "arrange" && this.selectNodeData.page_id) {
                                this.getPageData(this.selectNodeData.page_id);
                            }
                            else {
                                this.getPageMeta();
                            }
                        },
                        //拿到所有的父节点id
                        getParents(id, treemap, list) {
                            list.unshift(id);
                            if (treemap[id].parent_id) {
                                this.getParents(treemap[id].parent_id, treemap, list)
                            }
                            else {
                                return list;
                            }
                        },
                        //新增节点
                        onAddNode(obj) {
                            var data = obj.data, node = obj.node;
                            let me = this;
                            var config = {
                                totab: false, //true: 以Tab导航的方式打开
                                width: "900px",
                                height: "340px",
                                icon: "icon-product",
                                text: "菜单新增",
                                id: "sys_menu_add",//totab: true时需设置,用于判断是否已打开此页面
                                url: "module/config/page/sys_menu_add.html",
                                data: data,
                                delta: {},
                                sceneCode: "add",//"refuseedit",//"approval", //"add"//"browse",
                                callback: function(obj, callback) {
                                    me.getMenuAll();
                                    if (callback) {
                                        callback();
                                    }
                                }
                            };
                            me.doPopupByPublic(config);
                        },
                        //编辑节点
                        onEditNode(obj) {
                            var data = obj.data, node = obj.node;
                            var me = this;
                            Root.showPopup({
                                url: "module/config/page/sys_menu_add.html",
                                width: "900px",
                                height: "340px",
                                text: "菜单编辑",
                                data: data,
                                sceneCode: "edit",
                                callback: function(options_obj, callback) {
                                    me.getMenuAll();
                                    if (callback) {
                                        callback();
                                    }
                                }
                            });
                        },
                        //删除节点
                        onDelNode(obj) {
                            var data = obj.data, node = obj.node;
                            let me = this;
                            Root.confirm('确定删除-' + data.title + '-吗?', '删除提示', {
                              confirmButtonText: '删除',
                              cancelButtonText: '取消',
                              type: 'warning'
                            }).then(() => {
                                me.dodeldata(data, node, "sys_menu");
                            }).catch(() => {
                                Root.message({
                                    type: 'info',
                                    message: '已取消删除'
                                });
                            });
                        },
                        dodeldata(row, node, tablename) {
                            var me = this;
                            if (row.id) {
                                let param = {
                                    dataname: tablename,
                                    id: row.id
                                }
                                Server.call("root/data/deleteEntity", param, function(result) {
                                    console.log(result);
                                    if (result && result.data) {
                                        const parent = node.parent;
                                        const children = parent.data.children || parent.data;
                                        const index = children.findIndex(d => d.id === row.id);
                                        children.splice(index, 1);
                                        let param_ = {
                                            dataname: "sys_menu",
                                            filter: "page_id is null",
                                        }
                                        Server.call("root/data/getEntitySet", param_, function(result2){
                                            let agm_category_ = ArrayToTree(clone(result2.data.entityset), "title", "parent_id");
                                            me.treeData = agm_category_;
                                            me.getMenuAll();
                                            Root.message({
                                                type: 'success',
                                                message: '删除成功!'
                                            });
                                        });
                                    }
                                });
                            }
                        },
                        formFieldClick() {
                            var me = this;
                            //表单字段事件设置
                            this.formfieldClick = {
                                icon: {
                                    popup: {
                                        onclick: function(obj) {//弹窗点击事件
                                            //打开
                                            me.open_iconlist()
                                        }
                                    },
                                },
                                page_id: {
                                    popup: {
                                        onclick: function(obj) {//弹窗点击事件
                                            //打开
                                            me.open_pagelist()
                                        }
                                    },
                                },
                                model_id: {
                                    select: {
                                        onchange: function(obj,refreshCallback) {//下拉展开事件
                                            console.log("model_id 选择");
                                            var value = obj.selectoption.value;
                                            me.scene_type = obj.selectoption.scene_type;
                                            var formData_ = clone(me.formData);
                                            me.formData = clone(formData_);
                                            if (me.formData.model_id) {
                                                me.getModelButtons(me.formData.model_id, function(modelbuttons){
                                                    me.options_buttons = clone(modelbuttons)
                                                    me.getPageMeta();
                                                });
                                                if (me.formData.dataname && me.scene_type) {
                                                    me.getTableData(me.formData.dataname, me.scene_type);
                                                }
                                            }
                                            else {
                                                me.options_buttons = []
                                                me.getPageMeta();
                                            }
                                        },
                                    }
                                },
                                dataname: {
                                    input: {
                                        onchange: function(obj,refreshCallback) {//下拉展开事件
                                            if (me.formData.dataname && me.scene_type) {
                                                me.getTableData(me.formData.dataname, me.scene_type);
                                            }
                                            else {
                                                me.tableFields = [];
                                                me.tableData = [];
                                            }
                                        },
                                    }
                                }
                            };
                        },
                        open_iconlist() {
                            var me = this;
                            var config = {
                                totab: false, //true: 以Tab导航的方式打开
                                width: "900px",
                                height: "900px",
                                icon: "icon-product",
                                text: "图标",
                                id: "popup_iconfont",//totab: true时需设置,用于判断是否已打开此页面
                                url: "module/tool/page/popup_iconfont.html",
                                data: {},
                                delta: {pageobj: me.selectTabObj},
                                sceneCode: "add",//"refuseedit",//"approval", //"add"//"browse",
                                callback: function(obj, callback) {
                                    let formData_ = clone(me.formData);
                                    formData_.icon = obj.icon;
                                    me.formData = formData_;
                                    if (callback) {
                                        callback();
                                    }
                                }
                            };
                            me.doPopupByPublic(config);
                        },
                        open_pagelist() {
                            var me = this;
                            var config = {
                                totab: false, //true: 以Tab导航的方式打开
                                width: "900px",
                                height: "900px",
                                icon: "icon-product",
                                text: "页面详情",
                                id: "popup_page",//totab: true时需设置,用于判断是否已打开此页面
                                url: "module/config/page/popup_page.html",
                                data: {},
                                delta: {},
                                sceneCode: "add",//"refuseedit",//"approval", //"add"//"browse",
                                callback: function(obj, callback) {
                                    let formData_ = clone(me.formData);
                                    formData_.page_id = obj.row.id;
                                    me.formData = formData_;
                                    if (callback) {
                                        callback();
                                    }
                                }
                            };
                            me.doPopupByPublic(config);
                        },
                        //新增菜单,没懂和新增节点有什么区别
                        onAddData() {
                            var data = clone(this.selectNodeData);
                            var me = this;
                            var config = {
                                totab: false, //true: 以Tab导航的方式打开
                                width: "900px",
                                height: "340px",
                                icon: "icon-product",
                                text: "菜单新增",
                                id: "sys_menu_add",//totab: true时需设置,用于判断是否已打开此页面
                                url: "module/config/page/sys_menu_add.html",
                                data: data,
                                delta: {},
                                sceneCode: "addmenu",//"refuseedit",//"approval", //"add"//"browse",
                                callback: function(obj, callback) {
                                    me.getMenuAll();
                                    if (callback) {
                                        callback();
                                    }
                                }
                            };
                            me.doPopupByPublic(config);
                        },
                        saveRowTable() {
                            var me = this;
                            var operator_ = "save";//保存
                            var entity_ = clone(this.formData);
                            var entity = {};
                            for (var r in entity_) {
                                if (r == "parent_id") {
                                    if (entity_[r] && entity_[r].length) {
                                        entity[r] = entity_[r][entity_[r].length - 1];
                                    }
                                    else {
                                        entity[r] = null;
                                    }
                                }
                                else if (entity_[r] || entity_[r] ==  "" || entity_[r] == false || entity_[r] == 0) {
                                    entity[r] = entity_[r];
                                }
                            }
                            let param = {
                                dataname: this.dataname,
                                // operator: operator_,
                                data: {},
                            }
                            param.data[this.dataname] = entity;
                            Server.call("root/data/saveEntity", param, function(result) {
                                console.log(result);
                                if (result.success) {
                                    if (me.iscommit) {
                                        me.iscommit = false;
                                        Root.message({
                                            type: 'success',
                                            message: '提交成功'
                                        });
                                    }
                                    else {
                                        Root.message({
                                            type: 'success',
                                            message: '保存成功'
                                        });
                                    }
                                }
                                me.getMenuAll();
                            });
                        },
                        node_isShow(data, isShow) {
                            if (this.$refs[data.id]) {
                                this.$refs[data.id].style.display = isShow ? '' : 'none';
                            }
                        },
                    }
                });
            };
            loadJsCss(function () {
                initVue();
            });
        </script>
        <style>
            /*  在vue.js中 v-cloak 这个指令是防止页面加载时出现 vuejs 的变量名而设计的 */
            [v-cloak] {
                display: none !important;
            }
            .el-tabs__nav-scroll {
                overflow: hidden;
                position: relative;
                padding-left: 20px;
            }
        </style>
    </head>
    <body style="margin: 0px; position: absolute; top: 0px; bottom: 0px; width: 100%;">
        <div v-cloak id="vbody" style="height: 100%; width: 100%;">
            <div id="page_root" style="height: 100%; width: 100%;">
                <div class="h_dialog__body" style="height: 100%; width: 100%;">
                    <div :style="{position: 'absolute', top: '10px', left: '10px', width: '320px', height: treeHeight + 'px', border: '1px solid #ccc'}">
                        <div style="height: 32px;line-height: 32px;border-bottom: 1px solid #ccc ;">
                            <span style="font-size: 14px;margin-left: 20px;">{{tree_title}}</span>
                            <!-- 工具栏 -->
                            <div style="float: right; margin-right: 18px">
                                <el-button-group style="margin-left: 3px">
                                    <el-button @click="addData">添加菜单</el-button>
                                </el-button-group>
                            </div>
                        </div>
                        <div :style="{padding: '10px 0', height: treeHeight - 60 + 'px', overflow: 'auto'}">
                            <h-tree
                                v-if="isRefresh"
                                :tree-data="treeData"
                                :tree-txt-formatter="treeTxtFormatter"
                                :is-readonly="isTreeReadonly"
                                :default-expanded-keys="defaultexpandedkeys"
                                :currentnodekey="currentnodekey"
                                :default-expand-all="false"
                                @node-click="onNodeClick"
                                @add-node="onAddNode"
                                @edit-node="onEditNode"
                                @del-node="onDelNode"
                            >
                            </h-tree>
                        </div>
                    </div>
                    <div :style="{position: 'absolute', top: '10px', left: '340px', right: '10px', height: treeHeight + 'px', border: '1px solid #ccc'}">
                        <div>
                            <div style="height: 32px;line-height: 32px;border-bottom: 1px solid #ccc ;">
                                <span style="font-size: 14px;margin-left: 20px;">页面详情</span>
                                <!-- 工具栏 -->
                                <div style="float: right; margin-right: 18px">
                                    <el-button-group style="margin-left: 3px">
                                        <el-button @click="saveRowTable":icon="buttonsconfig.save.icon">{{buttonsconfig.save.name}}</el-button>
                                    </el-button-group>
                                </div>
                            </div>
                            <div style="margin: 16px;">
                                <h-form
                                    ref="form1"
                                    :form-attr="formAttr"
                                    :table-fields="formFields"
                                    :form-data="formData"
                                    :table-field-click="formfieldClick"
                                >
                                </h-form>
                                <h-table
                                    v-if="isRefresh && tableFields.length"
                                    ref="table1"
                                    :table-fields="tableFields"
                                    :table-data="tableData"
                                    :table-height="tableHeight"
                                    :table-field-click="tablefieldClick"
                                    :table-buttons-click="tablebuttonClick"
                                    :is-highlight-row="true"
                                    :tableloading="tableloading"
                                    :is-pagination="false"
                                    :is-within-edit-table-data="true"
                                    :isshowtool="false"
                                    :isfilterfield="false"
                                    :istablebuttons="false"
                                    :isbasicfilterfields="false"
                                    :isdraggableorder="false"
                                    >
                                </h-table>
                            </div>
                        </div>
                    </div>
                </div>
            </div>
        </div>
        <div id="page_loading" style="position: absolute; top:0px; width: 100vw; height: 50vh;">
            <div class="spinner">
              <div class="cube1"></div>
              <div class="cube2"></div>
            </div>
        </div>
    </body>
</html>
module/model/model_iframe.html
New file
@@ -0,0 +1,172 @@
<!doctype html>
<html>
    <head>
        <meta charset="utf-8"><meta http-equiv="Expires" content="0"><meta http-equiv="Pragma" content="no-cache"><meta http-equiv="Cache-control" content="no-cache"><meta http-equiv="Cache" content="no-cache">
        <title>模型容器</title>
        <script type="text/javascript">
            var vue_ = null;
            var pageVue = null;
            function loadJsCss(callback) {
                var jscss_urls = [];
                window.top.initJsCss(document, jscss_urls, callback);
            };
            function initVue() {
                vue_ = new FormVue({
                    el: "#vbody",
                    data: {
                        title: "模型容器",
                        iframe_url: "",
                        reporturl: "",
                        dataRequest: [
                            {
                                name: "sys_model",
                                dataname: "sys_model",
                                filter: "",
                                isnotoption: false, //true:不是选项
                                code:"id",//是下拉选项时设置
                                label:"url",//是下拉选项时设置
                            },
                        ],
                        dataRequestObj: {},
                        sys_model_map: {},
                        sys_page_model: {},
                    },
                    created() {
                        if (window.top.tab.selected.option.page_id) {
                            let page_id = window.top.tab.selected.option.page_id;
                            var sys_page_model = {
                                name: "sys_page_model", // 页面对应的模型
                                dataname: "sys_page_model",
                                // url: "root/data/getEntitySet",
                                // paramsobj: {dataname: "sys_page_model", filter:"sys_page_model.page_id='" + page_id + "'"},
                                isnotoption: true, //true:不是选项
                                filter: "sys_page_model.page_id='" + page_id + "'"
                            }
                            this.dataRequest.push(sys_page_model);
                        }
                    },
                    mounted() {
                        var me = this;
                        if (this.dataRequest && this.dataRequest.length) {
                            var result = {};
                            this.loadRequestData(this.dataRequest, result, function(data) {
                                me.dataRequestObj = data;
                                //预加载数据后给哪些字段设置options或formatterjson
                                if (me.dataRequestObj.sys_model) {
                                    me.sys_model_map = me.dataRequestObj.sys_model.map.sys_model;
                                }
                                if (me.dataRequestObj.sys_page_model) {
                                    me.sys_page_model = me.dataRequestObj.sys_page_model[0];
                                }
                                me.initData();
                                // 以服务的方式调用的 Loading 需要异步关闭
                                me.$nextTick(() => {
                                    hideLoading();
                                });
                            });
                        }
                        else {
                            // 以服务的方式调用的 Loading 需要异步关闭
                            this.$nextTick(() => {
                                hideLoading();
                                me.initData();
                            });
                        }
                    },
                    methods:{
                        initData() {
                            if (this.sys_page_model.sys_model__url.substring(0, 18) == "module/model/page/") {
                                this.iframe_url = "./page/" + this.sys_page_model.sys_model__url.substring(18);
                            }
                            else {
                                this.iframe_url = this.sys_page_model.sys_model__url
                            }
                        },
                        getReportToken() {
                            var me = this;
                            var param_ = "";
                            if (window.top.vue.userinfo.currentactor.actor_type == "Customer") { // 经销商
                                param_ = "&actor=" + window.top.vue.userinfo.currentactor.actor_type + "&accountId=" + window.top.vue.userinfo.currentactor.target_id
                            }
                            else if (window.top.vue.userinfo.currentactor.actor_type == "Sales") { // 销售
                                param_ = "&actor=" + window.top.vue.userinfo.currentactor.actor_type + "&positionID=" + window.top.vue.userinfo.currentactor.target_id + "&level=" + window.top.vue.userinfo.position_level_field
                            }
                            else if (window.top.vue.userinfo.currentactor.actor_type == "Business" || window.top.vue.userinfo.currentactor.actor_type == "Org") { // 商务、运营
                                param_ = "&actor=" + window.top.vue.userinfo.currentactor.actor_type //+ "&positionID=" + window.top.vue.userinfo.currentactor.target_id
                            }
                            else if (window.top.vue.userinfo.currentactor.actor_type == "Admin") { // Admin
                                param_ = "&actor=" + window.top.vue.userinfo.currentactor.actor_type
                            }
                            if (param_) {
                                this.reporturl += param_
                            }
                            else {
                                this.$message({
                                    message: '该角色没有报表页面权限',
                                    type: 'warning'
                                });
                                return;
                            }
                            var param = {
                                type: "get",
                            }
                            Server.call("rootreport/login/cross/domain?fine_username="+window.top.config.report_user.name+"&fine_password="+window.top.config.report_user.password+"&validity=-2", param, function(result) {
                                // 以服务的方式调用的 Loading 需要异步关闭
                                me.$nextTick(() => {
                                    hideLoading();
                                });
                                me.iframe_url = window.top.config.url_root + "rootreport/view/form?" + me.reporturl;
                                me.iframe_url = me.sys_page_model.sys_model__url
                                // me.iframe_url = window.top.config.url_report + "/view/form?" + me.reporturl;
                            });
                        }
                    }
                });
            };
            loadJsCss(function () {
                initVue();
            });
        </script>
        <style>
            /*  在vue.js中 v-cloak 这个指令是防止页面加载时出现 vuejs 的变量名而设计的 */
            [v-cloak] {
                display: none !important;
            }
        </style>
    </head>
    <body style="position: absolute; top: 0; bottom: 0; left: 0; right: 0;">
        <div v-cloak id="vbody">
            <div id="page_root">
                <div>aaa</div>
                <div style="position: absolute; top: 0px; bottom: 5px; left: 0; right: 0;">
                    <iframe :src="iframe_url" style="width: 100%; height: 100%;" frameborder="0"></iframe>
                </div>
            </div>
            <div id="page_loading" style="position: absolute; top:0px; width: 100vw; height: 50vh;">
                <div class="spinner">
                  <div class="cube1"></div>
                  <div class="cube2"></div>
                </div>
            </div>
        </div>
    </body>
</html>
module/model/page/table_simple.html
New file
@@ -0,0 +1,426 @@
    <!doctype html>
<html>
    <head>
        <meta charset="utf-8"><meta http-equiv="Expires" content="0"><meta http-equiv="Pragma" content="no-cache"><meta http-equiv="Cache-control" content="no-cache"><meta http-equiv="Cache" content="no-cache">
        <title>简单列表模型</title>
        <script type="text/javascript">
            var pageVue = null;
            function loadJsCss(callback) {
                var jscss_urls = [];
                window.top.initJsCss(document, jscss_urls, callback);
            };
            function initVue() {
                new ListVue({
                    el: "#vbody",
                    data: {
                        dataname: "",
                        title: "简单列表模型",
                        orderby: "",
                        filterfieldClick: {},
                        tablefieldClick: {},
                        formfieldClick: {},
                        dataRequest: [],
                        dataRequestObj:{},
                        filterFields: [],
                        tableFields: [],
                        cbuttons_r: {}, // 权限按键
                        ctabs_r: {},
                        isbasicfilterfields: true, // 存在查询
                    },
                    created() {
                        if (window.top.tab.selected.option.page_id) {
                            let page_id = window.top.tab.selected.option.page_id;
                            var sys_page_model = {
                                name: "sys_page_model", // 页面对应的模型
                                dataname: "sys_page_model",
                                // url: "root/data/getEntitySet",
                                // paramsobj: {dataname: "sys_page_model", filter:"sys_page_model.page_id='" + page_id + "'"},
                                isnotoption: true, //true:不是选项
                                filter: "sys_page_model.page_id='" + page_id + "'"
                            }
                            this.dataRequest.push(sys_page_model);
                        }
                    },
                    mounted() {
                        var me = this;
                        if (window.top.tab.selected.option.page_id) {
                            this.title = window.top.tab.selected.option.menutitle
                            getPageByPageId(window.top.tab.selected.option.page_id, function(result){
                                me.cbuttons_r = result.buttons_r;
                                //预加载数据
                                if (me.dataRequest && me.dataRequest.length) {
                                    var result = {};
                                    me.loadRequestData(me.dataRequest, result, function(data) {
                                        me.dataRequestObj = data;
                                        //预加载数据后给哪些字段设置options或formatterjson
                                        if (me.dataRequestObj.sys_page_model) {
                                            var sys_page_model = me.dataRequestObj.sys_page_model[0];
                                            me.dataname = sys_page_model.dataname
                                            me.title = sys_page_model.title
                                        }
                                        me.initData();
                                    });
                                }
                                else {
                                    me.initData();
                                }
                                me.$nextTick(() => { // 以服务的方式调用的 Loading 需要异步关闭
                                    hideLoading();
                                });
                            })
                        }
                    },
                    methods:{
                        initData() {
                            var me = this;
                            this.onQuery(function(result, callback) {//查询后的回调,用于获取字段的
                                if (result.meta && result.meta[me.dataname] && result.meta[me.dataname].fields) {
                                    var metas = clone(result.meta[me.dataname].fields);
                                    var filterFields_ = [];
                                    var tableFields_ = [];
                                    metas.map(f=>{
                                        f.isshow = "T";
                                        if (f.isfilter) {
                                            filterFields_.push(clone(f));
                                        }
                                        else {
                                            var filter_f = clone(f);
                                            filter_f.isshow = "F";
                                            filterFields_.push(filter_f);
                                        }
                                        tableFields_.push(clone(f));
                                    })
                                    if (!me.filterFields || (me.filterFields && me.filterFields.length == 0)) {
                                        me.filterFields = clone(filterFields_);
                                        me.tableFields = clone(tableFields_);
                                        //字段数组转字段obj,目的为了筛选时获取字段属性
                                        me.fieldsToFieldsObj();
                                        //设置字段事件
                                        me.tableFieldClick();
                                    }
                                }
                                if (callback) {
                                    callback();
                                }
                            });
                        },
                        tableFieldClick() {
                            var me = this;
                            //表格字段事件设置
                            this.tablefieldClick = {
                                state_name: {//状态
                                    val: {//有值时的点击事件
                                        notclick_val: ["草稿","录入"],//不可点击的值,1、是数组["11","22"];2、以“;”分隔的字符串"111;222"
                                        notclick_bindfield: [],
                                        onclick: function(obj) {
                                            var config = {
                                                totab: false,
                                                width: "1100px",
                                                height: "520px",
                                                icon: "icon-product",
                                                text: "流程步骤",
                                                id: "popup_workflow_step_user" + obj.row.id,
                                                url: "module/tool/page/popup_workflow_step_user.html?v=2023020703",
                                                data: obj.row,
                                                delta: {},//{machine_code: "Org_Account_Open"},
                                                sceneCode: "browse",//"refuseedit",//"approval", //"add"//"browse",
                                                callback: function(obj, callback) {
                                                    if (callback) {
                                                        callback();
                                                    }
                                                }
                                            };
                                            me.doPopupByPublic(config);
                                        },
                                    },
                                },
                                code: {//字段事件设置
                                    val: {//有值时的点击事件
                                        notclick_val: "",//不可点击的值,1、是数组["11","22"];2、以“;”分隔的字符串"111;222"
                                        notclick_bindfield: [],//当该字段值等于指定字段值时不可点击["filterfield": "111"]
                                        onclick: function(obj) {//数据值点击事件
                                            var sceneCode_ = "browse";
                                            //如果是创建人且是录入状态或退回状态则是编辑状态
                                            if (obj.row.creator_id == window.top.vue.userinfo.id && (obj.row.state_code == "Input" || obj.row.state_code == "input" || obj.row.state_code == "Rejected")) {
                                                sceneCode_ = "edit";
                                            }
                                            me.editData(sceneCode_, obj.row);
                                        },
                                    },
                                },
                            };
                            this.tablebuttonclick = [
                                { // 详情
                                    isbuttonshow:  me.cbuttons_r.FormDetail ? me.cbuttons_r.FormDetail : false, type: "primary",
                                    code: "formdetail", isselected: true, classname:"",
                                    onclick: function(obj) {
                                        me.editData("browse", obj.selectedList[0])
                                    }
                                },
                                { // 新增
                                    isbuttonshow: me.cbuttons_r.Add ? me.cbuttons_r.Add : false,type:"primary",
                                    code: "add",isselected: false,classname: "",
                                    onclick: function(obj) {
                                        me.editData("add", {})
                                    }
                                },
                                { // 编辑
                                    isbuttonshow:  me.cbuttons_r.Edit ? me.cbuttons_r.Edit : false,type:"primary",
                                    code: "edit",isselected: true,classname: "",
                                    disabled: function(selectRowList) {
                                        var bo_ = true;
                                        if (selectRowList[0] && (!selectRowList[0].state_code || (selectRowList[0].state_code && selectRowList[0].state_code == 'Input'))) {
                                            bo_ = false;
                                        }
                                        return bo_
                                    },
                                    onclick: function(obj) {
                                        me.editData('edit', obj.selectedList[0])
                                    }
                                },
                                { // 删除
                                    isbuttonshow:  me.cbuttons_r.Delete ? me.cbuttons_r.Delete : false, type: "danger",
                                    code: "delete", isselected: true, classname:"",
                                    disabled: function(selectRowList) {
                                        var bo_ = true ;
                                        if (selectRowList[0] && (!selectRowList[0].state_code || (selectRowList[0].state_code && selectRowList[0].state_code == 'Input'))) {
                                            bo_ = false
                                        }
                                        return bo_;
                                    },
                                    onclick: function(obj) {
                                        me.delData(obj, obj.selectedList[0])
                                    }
                                }
                            ]
                        },
                        rowClick(obj) {
                            var me = this;
                            me.selectedrow = obj.row;
                        },
                        editData(sceneCode, row) {
                            var me = this;
                            var config = {
                                totab: true, //true: 以Tab导航的方式打开
                                width: "900px",
                                height: "500px",
                                icon: "icon-product",
                                text: me.title + "详情",
                                id: "form_simple" + sceneCode + row.id,//totab: true时需设置,用于判断是否已打开此页面
                                url: "module/model/page/form_simple.html",
                                dataname: me.dataname,
                                data: row,
                                delta: {},
                                sceneCode: sceneCode,//"refuseedit",//"approval", //"add"//"browse",
                                callback: function(obj, callback) {
                                    me.onQuery();
                                    if (callback) {
                                        callback();
                                    }
                                }
                            };
                            me.doPopupByPublic(config);
                        },
                        delData(obj, row) {
                            let me = this;
                            let name_ = "该数据";
                            if (!row.id) {
                                Root.message({
                                    type: 'warning',
                                    message: '请选择删除数据'
                                });
                                return
                            }
                            if (row.name) {
                                name_ = "【" + row.name + "】";
                            }
                            Root.confirm('确定删除' + name_ + '吗?', '删除提示', {
                              confirmButtonText: '删除',
                              cancelButtonText: '取消',
                              type: 'warning'
                            }).then(() => {
                                let param = {
                                    id: row.id,
                                    dataname: me.dataname,
                                }
                                Server.call("root/data/deleteEntity", param, function(result) {
                                    Root.message({
                                        type: 'success',
                                        message: '删除成功!'
                                    });
                                    me.onQuery();
                                });
                            }).catch(() => {
                                Root.message({
                                    type: 'info',
                                    message: '已取消删除'
                                });
                            });
                        },
                        DownloadTemplate() {
                            var pathurl = "";
                            if (this.selectTabObj.code == "amt_detail") {
                                pathurl = "template/1.导入模板/折扣明细导入-折扣.xlsx";
                            }
                            else if (this.selectTabObj.code == "qty_detail") {
                                pathurl = "template/1.导入模板/折扣明细导入-买赠 .xlsx";
                            }
                            handleDownload(pathurl);
                        },
                        onPopupByUploadFile() {
                            var me = this;
                            var ioname_ = ""
                            if (this.selectTabObj.code == 'amt_detail') {
                                ioname_ = "import_rebate_amt";
                            }
                            else if (this.selectTabObj.code == "qty_detail") {
                                ioname_ = "import_rebate_qty";
                            }
                            var delta_ = {
                                filetypelist: [],
                                isToDB: true,
                                dataname: this.selectTabObj.dataname,
                                tableFields: this.selectTabObj.tableFields,
                                otherSave: "salesBizLogic/saveDealerTargetByImport",
                            }
                            var config = {
                                totab: false,
                                width: "500px",
                                icon: "icon-product",
                                text: "数据文件上传",
                                id: "popup_uploadFileToDB",
                                url: "module/tool/page/popup_uploadFileToDB.html",
                                data: {
                                    uploadType: "dealertarget",
                                    tempTable: "temp_target_dealer",
                                    operate_type: "dealertarget",
                                    userid: me.userid,
                                    ioname:ioname_,
                                    // position_id: me.position_id,
                                },
                                delta: delta_,
                                callback: function(obj, callback) {
                                    me.$message({
                                        showClose: true,
                                        message: '上传成功!',
                                        type: 'success'
                                    });
                                    me.onQuery();
                                    if (callback) {
                                        callback();
                                    }
                                }
                            };
                            this.doPopupByPublic(config);
                        },
                        onDownload() {
                            let me = this;
                            var ioname = "";
                            var sign = "";
                            var filename = '折扣明细导出' + String(new Date().getTime());
                            var filter_ = "1 = 1";
                            filter_ = this.getFilterData(filter_);
                            if (me.selectTabObj.code == "qty_detail") {
                                ioname = "export_rebate_qty_detail"
                                sign = "rebate_qty_detail"
                                filename = '买赠明细导出' + String(new Date().getTime());
                            }
                            else if (me.selectTabObj.code == "amt_detail") {
                                ioname = "export_rebate_amt_detail"
                                sign = "rebate_amt_detail"
                            }
                            let param = {
                                sign: sign,
                                filename: filename,
                                filter: filter_,
                                ioname:ioname,
                                orderby: "",
                                token: Root.getToken()
                            }
                            window.top.vue.textdownloadForm(param);
                        },
                    }
                });
            };
            loadJsCss(function () {
                initVue();
            });
        </script>
    </head>
    <body style="margin: 0px;" >
        <div v-cloak id="vbody">
            <div id="page_root">
                <div class="topbar">
                    <span :class="page_title == 'right' ? 'h_page_title_right' : 'h_page_title_left'"><span class="h_page_title_txt">{{title}}</span></span>
                    <div :class="page_title == 'right' ? 'h_page_button_left' : 'h_page_button_right'">
                        <el-button-group style="margin-left: 3px">
                            <el-button v-show="cbuttons_r.Import" @click="DownloadTemplate">模板下载</el-button>
                            <el-button v-show="cbuttons_r.Import" @click="onPopupByUploadFile":icon="buttonsconfig.import.icon">{{buttonsconfig.import.name}}</el-button>
                            <el-button v-show="cbuttons_r.Export" @click="onDownload" :icon="buttonsconfig.export.icon">{{buttonsconfig.export.name}}</el-button>
                        </el-button-group>
                    </div>
                </div>
                <div class="h_dialog__body">
                    <h-table
                        v-if="isRefresh"
                        ref="table1"
                        :table-fields="tableFields"
                        :table-data="tableData"
                        :table-field-click="tablefieldClick"
                        :pagesize="pagesize"
                        :pagenum="pagenum"
                        :total="total"
                        :table-height="tableHeight"
                        :is-highlight-row="true"
                        :isdraggableorder="cbuttons_r.Set"
                        :table-buttons-click="tablebuttonclick"
                        :filtersobj="filterObj"
                        :isbasicfilterfields="isbasicfilterfields"
                        :basicfilterfieldslength="5"
                        v-on:get-data="getData"
                        v-on:row-click="rowClick"
                        v-on:order-fields="orderTableFields"
                    >
                    </h-table>
                </div>
            </div>
        </div>
        <div id="page_loading" style="position: absolute; top:0px; width: 100vw; height: 50vh;">
            <div class="spinner">
              <div class="cube1"></div>
              <div class="cube2"></div>
            </div>
        </div>
        <style>
            [v-cloak] {
                display: none !important;
            }
        </style>
    </body>
</html>
module/system/page/main.html
@@ -6,28 +6,28 @@
    <meta http-equiv="Pragma" content="no-cache">
    <meta http-equiv="Cache-control" content="no-cache">
    <meta http-equiv="Cache" content="no-cache">
    <title>终端推广平台</title>
    <link href="../css/main.css?v=2024081902" rel="stylesheet">
    <link href="../../../css/control.css?v=2024081902" rel="stylesheet">
    <link href="../../../css/page.css?v=2024081902" rel="stylesheet">
    <link href="../../../css/icon/iconfont.css?v=2024081902" rel="stylesheet">
    <title>营销一体化运营平台</title>
    <link href="../css/main.css?v=2024082502" rel="stylesheet">
    <link href="../../../css/control.css?v=2024082502" rel="stylesheet">
    <link href="../../../css/page.css?v=2024082502" rel="stylesheet">
    <link href="../../../css/icon/iconfont.css?v=2024082502" rel="stylesheet">
    <link href="../../../js/vue/element-ui/lib/theme-chalk/index.css" rel="stylesheet">
    <link href="../../../img/org/head.png" rel="shortcut icon" type="image/x-icon">
    <link href="../../../css/myelement.css?v=2024081902" rel="stylesheet">
    <link href="../../../css/myelement.css?v=2024082502" rel="stylesheet">
    
    <script src="../../../js/jquery-3.5.1.min.js"></script>
    <script src="../../../js/vue/vue.js"></script>
    
    <script src="../../../js/config.js?v=2024081902"></script>
    <script src="../../../js/config.js?v=2024082502"></script>
    <script src="../../../data/data.js"></script>
    <script src="../../../js/vue/elementDefault.js"></script>
    <script src="../../../js/vue/element-ui/lib/index.js"></script>
    <script src="../../../js/Sortable.js"></script>
    <script src="../../../js/vue/page.js?v=2024081902"></script>
    <script src="../../../js/foundation.js?v=2024081902"></script>
    <script src="../../../js/control.js?v=2024081902"></script>
    <script src="../../../js/vue/page.js?v=2024082502"></script>
    <script src="../../../js/foundation.js?v=2024082502"></script>
    <script src="../../../js/control.js?v=2024082502"></script>
    <script src="../../../js/loadJsCss.js"></script>
    <script src="../../../js/myelement.js?v=2024081902"></script>
    <script src="../../../js/myelement.js?v=2024082502"></script>
    
</head>
    
module/tool/page/popup_iconfont.html
@@ -38,7 +38,7 @@
                            this.$nextTick(function(){
                                //let w_ = this.$refs.popup_body.offsetWidth + "px";
                                let w_ = "900px";
                                let h_ = this.$refs.popup_body.offsetHeight + "px";
                                let h_ = (this.$refs.popup_body.offsetHeight + 10) + "px";
                                Root.setPopupWH(w_, h_);
                            })
                        });