new Vue({ el: '#method', data: { flowNodes: [], expandAll: false, loadingDialog: false }, watch: { expandAll(val) { this.expandMenus(val); } }, methods: { expandMenus: function (status) { for (var i = 0; i < this.flowNodes.length; i++) { this.flowNodes[i].open = status } }, bindMenu: function () { var _this = this layui.use('dropdown', function () { var dropdown = layui.dropdown var topNodeItems = [ { title: ' 新建组件(方法)', id: "NewMethodByGroup" }, { title: ' 目录属性', id: "EditSort" }, { title: ' 新建目录', id: "NewSort" }, { title: ' 修改名称', id: "EditSortName" }, { title: ' 删除目录', id: "DeleteSort" } ] var tRenderOptions = [{ elem: '.item-top-dp', trigger: 'contextmenu', data: topNodeItems, click: function (data, oThis) { var obj = $(this.elem)[0].dataset; console.log(obj); _this.topNodeOption(data.id, obj.no, obj.name, obj.idx); } }, { elem: '.t-btn', trigger: 'click', data: topNodeItems, click: function (data, oThis) { var obj = $(this.elem)[0].dataset; console.log(obj); _this.topNodeOption(data.id, obj.no, obj.name, obj.idx); } }] dropdown.render(tRenderOptions[0]); dropdown.render(tRenderOptions[1]); var childNodeMenuItems = [ { title: ' 方法属性', id: "Attr" }, // { title: ' 新建方法', id: "NewMethod" }, /* { title: ' 设计方法', id: "Designer" },*/ /* { title: ' 复制方法', id: "Copy" },*/ { title: ' 修改名称', id: "EditMethodName" }, { title: ' 删除方法', id: "Delete" } ] var cRenderOptions = [{ elem: '.item-name-dp', trigger: 'contextmenu', data: childNodeMenuItems, click: function (data, othis) { var obj = $(this.elem)[0].dataset; console.log(obj); _this.childNodeOption(data.id, $(this.elem)[0].dataset.no, $(this.elem)[0].dataset.name, $(this.elem)[0].dataset.pidx, $(this.elem)[0].dataset.idx) } }, { elem: '.c-btn', trigger: 'click', data: childNodeMenuItems, click: function (data, othis) { var obj = $(this.elem)[0].dataset; var no = obj.No; if (no == undefined) no = obj.no; var idx = obj.idx; //console.log(obj); _this.childNodeOption(data.id, no, $(this.elem)[0].dataset.name, $(this.elem)[0].dataset.pidx, idx) } }] dropdown.render(cRenderOptions[0]); dropdown.render(cRenderOptions[1]); }) }, //如果w=0 则是100%的宽度. openLayer: function (uri, name, w, h) { //console.log(uri, name); if (w == 0) w = window.innerWidth; if (w == undefined) w = window.innerWidth / 2; if (h == undefined) h = window.innerHeight; layer.open({ type: 2, title: name, content: [uri, 'no'], area: [w + 'px', h + 'px'], offset: 'rb', shadeClose: true }) }, MethodAttr: function (no) { console.log(en); var en = new Entity("BP.CCBill.Template.Method", no); var enName = "BP.CCBill.Template.Method"; if (en.MethodModel == "Func") enName = "BP.CCBill.Template.MethodFunc"; if (en.MethodModel == "Link") enName = "BP.CCBill.Template.MethodLink"; if (en.MethodModel == "QRCode") enName = "BP.CCBill.Template.MethodQRCode"; if (en.MethodModel == "FlowBaseData") enName = "BP.CCBill.Template.MethodFlowBaseData"; if (en.MethodModel == "FlowNewEntity") enName = "BP.CCBill.Template.FlowNewEntity"; if (en.MethodModel === "SingleDictGenerWorkFlows" || en.MethodModel === "SingleDictGenerWorkFlow") enName = "BP.CCBill.Template.MethodSingleDictGenerWorkFlow"; if (en.MethodModel == "FlowEtc") enName = "BP.CCBill.Template.MethodFlowEtc"; var url = "../../Comm/En.htm?EnName=" + enName + "&MyPK=" + en.No + "&From=Ver2021"; OpenLayuiDialog(url, "", 100000, 0, null, false); }, EditSort: function (no, name) { var url = "../../Comm/En.htm?EnName=BP.CCBill.Template.GroupMethod&No=" + no; // alert(url); OpenLayuiDialog(url, "", 0, 0, null, true); //this.openLayer(url, "目录:" + name); }, testFlow: function (no, name) { var url = "../Admin/TestingContainer/TestFlow2020.htm?FK_Flow=" + no; window.top.vm.fullScreenOpen(url, name); // this.openLayer(url, name); }, flowAttr: function (no, name) { var url = "../Comm/En.htm?EnName=BP.WF.Template.FlowExt&No=" + no; window.top.vm.openTab(name, url); //this.openLayer(url, name,900); }, CopyMethod: function (no) { if (window.confirm("确定要执行方法复制吗?") == false) return; var flow = new Entity("BP.WF.Flow", no); var data = flow.DoMethodReturnString("DoCopy"); layer.msg(data); setTimeout(function () { window.location.reload(); }, 800); }, DeleteMethon: function (no, pidx, idx) { var msg = "提示: 确定要删除【" + no + "】方法吗?"; msg += "\t\n1.如果该方法下有实例,您不能删除。"; msg += "\t\n2.该方法为子方法的时候,被引用也不能删除."; if (window.confirm(msg) == false) return; var load = layer.msg("正在处理,请稍候...", { icon: 16, anim: 5 }) //开始执行删除. var flow = new Entity("BP.CCBill.Template.Method", no); flow.Delete(); // var data = flow.DoMethodReturnString("DoDelete"); // layer.msg(data); // if (data.indexOf("err@") == 0) // return; layer.close(load) this.flowNodes[pidx].children.splice(idx, 1) var leaveItems = this.flowNodes[pidx].children this.$set(this.flowNodes[pidx], 'children', leaveItems) }, childNodeOption: function (key, methodNo, name, pidx, idx) { // key=菜单标记, data 行的主键, name = 行的名称, pIdx=父级的编号, idx=当前的idx. switch (key) { case "Attr": //方法的属性. this.MethodAttr(methodNo); break; case "Designer": this.Designer(methodNo, name); break; case "NewMethod": var enMethod = new Entity("BP.CCBill.Template.Method", methodNo); // NewFlow(dat) this.NewMethodByGroup(enMethod.GroupID); break; case "Copy": this.CopyMethod(methodNo); break; case "EditMethodName": this.EditMethodName(methodNo, name, pidx, idx); break; case "Delete": this.DeleteMethon(methodNo, pidx, idx); break; } }, //分组上的事件. topNodeOption: function (key, groupID, name, idx) { switch (key) { case "EditSort": this.EditSort(groupID, name); break; case "EditSortName": this.EditSortName(groupID, name, idx); //修改名字. break; case "ImpFlowTemplate": this.ImpFlowTemplate(groupID); break; case "NewSort": this.NewSort(groupID, true); break; case "DeleteSort": this.DeleteSort(groupID); break; case "NewMethodByGroup": //新建方法. this.NewMethodByGroup(groupID, name); break; default: alert("没有判断的命令" + key); break; } }, EditSortName(id, name, idx) { var val = prompt("新名称", name); if (val == null || val == undefined) return; var en = new Entity("BP.CCBill.Template.GroupMethod", id); en.Name = val; en.Update(); //修改名称. this.flowNodes[idx].Name = val; layer.msg("目录修改成功."); }, NewMethodByGroup: function (groupID, name) { var moduleNo = GetQueryString("ModuleNo"); var frmID = GetQueryString("FrmID"); url = "./Method/Func.htm?GroupID=" + groupID + "&FrmID=" + frmID + "&ModuleNo=" + moduleNo + "&s=" + Math.random(); //新建方法. OpenLayuiDialog(url, '', 9000, 0, null, true); }, EditMethodName(id, name, pidx, idx) { var en = new Entity("BP.CCBill.Template.Method", id); //Todo: wanglu , 这里没有获取到名字,name的参数,也没有更新到数据。 var val = prompt("新名称:", en.Name); if (val == null || val == undefined) return; en.Name = val; en.Update(); // console.log(this.flowNodes[pidx].children[idx]) this.flowNodes[pidx].children[idx].Name = val; // this.$set(this.flowNodes[pidx].children[idx],'Name',val) //Todo:wanglu , 修改名称. // $("#" + id).val(val); // var ctl = $("#" + id); layer.msg("修改成功."); }, ImpFlowTemplate: function (data) { var fk_flow = data; url = "./../Admin/AttrFlow/Imp.htm?FK_Flow=" + fk_flow + "&Lang=CH"; addTab("ImpFlowTemplate", "导入方法模版", url); }, DeleteSort: function (no) { if (window.confirm("确定要删除吗?") == false) return; var en = new Entity("BP.CCBill.Template.GroupMethod", no); var data = en.Delete(); layer.msg(data); //如果有错误. if (data.indexOf("err@") == 0) return; setTimeout(function () { window.location.reload() }, 2000) }, NewSort: function (currentElem, sameLevel) { //只能创建同级. sameLevel = true; //例子2 layer.prompt({ value: '', title: '新建目录', }, function (value, index, elem) { layer.close(index); var en = new Entity("BP.CCBill.Template.GroupMethod"); en.FrmID = GetQueryString("FrmID"); en.MethodType = "Self"; en.MethodID = "Self"; en.Icon = "icon-folder"; en.Name = value; en.Insert(); layer.msg("创建成功"); //this.EditSort(data, "编辑"); //return; setTimeout(function () { window.location.reload(); }, 800); }); }, updateSort(rootNo, sortNos) { console.log("sortNo:" + sortNos); // 目录排序.. var handler = new HttpHandler("BP.CCBill.WF_CCBill_Admin"); handler.AddPara("FrmID", GetQueryString("FrmID")); handler.AddPara("GroupIDs", sortNos); var data = handler.DoMethodReturnString("Method_MoverGroup"); layer.msg(data) }, updateFlow(pastNodeArrStr, pastNodeId, currentNodeArrStr, currentNodeId) { // todo 需要重新实现接口 if (currentNodeId == undefined) { alert("没有获得当前分组的ID"); return; } // 方法排序.. var handler = new HttpHandler("BP.CCBill.WF_CCBill_Admin"); handler.AddPara("GroupID", currentNodeId); handler.AddPara("MethodIDs", currentNodeArrStr); var data = handler.DoMethodReturnString("Method_MoverMethod"); layer.msg(data) }, initSortArea: function () { var _this = this this.$nextTick(function () { var sortContainer = this.$refs['sort-main'] new Sortable(sortContainer, { animation: 150, dataIdAttr: 'data-id', ghostClass: 'blue-background-class', onStart: function ( /**Event*/ evt) { _this.loadingDialog = layer.msg('正在移动目录...', { timeout: 900 * 1000 }) }, onEnd: function (evt) { layer.close(_this.loadingDialog); var arr = this.toArray(); // console.log(arr); // 一级菜单的排序,默认为1 _this.updateSort('1', arr.join(',')); } }); var childSortableContainers = this.$refs['child-row'] console.log(childSortableContainers) for (var i = 0; i < childSortableContainers.length; i++) { var csc = childSortableContainers[i] new Sortable(csc, { group: { name: 'shared' }, animation: 150, dataIdAttr: 'data-id', ghostClass: 'blue-background-class', onStart: function ( /**Event*/ evt) { _this.loadingDialog = layer.msg('正在移动...', { timeout: 900 * 1000 }) }, onEnd: function (evt) { /** * 这里区分两种情况,一种是跨列移动,一种非跨列移动 * 如果跨列移动,可以利用以下四个参数来实现 * * @param pastNodeArrStr 被移出的列的子节点排序 * @param pastNodeId 被移出的列的节点id * @param currentNodeArrStr 移入的列的子节点排序 * @param currentNodeId 移入的列的节点id * * 假如非跨列,此时被移出的和移入的为同一个,使用前两个参数或者后两个参数都可以实现 */ layer.close(_this.loadingDialog) var pastNodeArrStr = Array.from(evt.from.querySelectorAll('div[data-id]')).map(function (item) { return item.dataset.id }).join(',') var pastNodeId = evt.from.dataset.id var currentNodeArrStr = Array.from(evt.to.querySelectorAll('div[data-id]')).map(function (item) { return item.dataset.id }).join(',') var currentNodeId = evt.to.dataset.id // 二级菜单的排序 _this.updateFlow(pastNodeArrStr, pastNodeId, currentNodeArrStr, currentNodeId) } }) } }) }, // 是否启用 changeMethodEnableStatus(method, ctrl) { // 当前启用状态 var en = new Entity("BP.CCBill.Template.Method", method.No); if (en.IsEnable == 0) en.IsEnable = 1; // method.IsEnable; else en.IsEnable = 0; // method.IsEnable; en.Update(); console.log("更新成功.."); }, // 是否启用 changeMethodListEnableStatus(method, ctrl) { // 当前启用状态 var en = new Entity("BP.CCBill.Template.Method", method.No); if (en.IsList == 0) en.IsList = 1; // method.IsEnable; else en.IsList = 0; // method.IsEnable; en.Update(); console.log("更新成功.."); } }, mounted: function () { // fix firefox bug document.body.ondrop = function (event) { event.preventDefault(); event.stopPropagation(); } //获得数据源. var handler = new HttpHandler("BP.CCBill.WF_CCBill_Admin"); handler.AddUrlData(); var ds = handler.DoMethodReturnJSON("Method_Init"); var groups = ds["Groups"]; var methods = ds["Methods"]; console.log(groups); var nodes = groups; var btnStyle = "class='layui-btn layui-btn-primary layui-border-blue layui-btn-xs'"; for (var i = 0; i < nodes.length; i++) { var fs = nodes[i]; fs.open = false; fs.children = []; if (fs.Icon == "") fs.Icon = "icon-folder"; for (var j = 0; j < methods.length; j++) { var method = methods[j]; if (fs.No !== method.GroupID) continue; //生成方法内容. var doc = ""; if (method.MethodModel == MethodModel.Link) doc = method.Tag1; if (method.MethodModel == MethodModel.QRCode) doc = "手机扫描一下,就可以看到该表单信息."; if (method.MethodModel === MethodModel.DictLog) doc = "操作轨迹日志"; if (method.MethodModel === MethodModel.FrmBBS) doc = "日志-日常记录-评论"; if (method.MethodModel === MethodModel.DataVer) doc = "数据版本控制-数据快照"; if (method.MethodModel == MethodModel.Func) { doc = "功能属性"; var url = "./MethodDoc/Default.htm?No=" + method.No; doc += "编写脚本"; } //修改实体资料流程. if (method.MethodModel == MethodModel.FlowBaseData) { method.MethodModel = "流程:" + method.FlowNo; doc = "设计流程 "; //if (method.Mark === "StartFlow") { // method.MethodModel = "发起流程:" + method.FlowNo; // doc = "设计流程 "; //} //if (method.Mark === "Search") { // method.MethodModel = "流程数据查询:" + method.FlowNo; // doc = "设计流程 "; // // doc = " 设置查询内容"; // //doc += "方法"; //} //if (method.Mark === "Group") { // method.MethodModel = "流程数据分析:" + + method.FlowNo; // // doc = "设置分析内容"; //} } // 流程汇总 if (method.MethodModel == MethodModel.SingleDictGenerWorkFlows) { method.MethodModel = "流程汇总"; if (method.Icon == "") method.Icon = "icon-layers"; doc = "所有启动的流程进行列表汇总."; } //实体新建流程. if (method.MethodModel == MethodModel.FlowNewEntity) { method.MethodModel = "新建实体流程"; doc = "设计流程 "; } //实体其他业务流程. if (method.MethodModel == MethodModel.FlowEtc) { method.MethodModel = "其他业务流程:" + method.FlowNo; doc = "设计流程 "; } //如果是单据. if (method.MethodModel == MethodModel.Bill) { method.MethodModel = "单据"; var html = ""; // if (method.Mark === "BillDictSearch") { html += "单据属性"; html += "表单设计"; //} doc = html; } //方法内容. method.Docs = doc; var url = "./PowerCenter.htm?CtrlObj=Menu&CtrlPKVal=" + method.No + "&CtrlGroup=Menu"; method.methodCtrlWayText = "权限"; if (method.Icon == "") method.Icon = "icon-drop"; fs.children.push(method); } var fsurl = "./PowerCenter.htm?CtrlObj=Menu&CtrlPKVal=" + fs.No + "&CtrlGroup=Menu"; fs.groupCtrlWayText = "权限"; } this.flowNodes = nodes; console.log(this.flowNodes); this.bindMenu(); this.initSortArea(); layui.use('form', function () { var form = layui.form; form.render() // form.on("switch(enable)", function (e) { // console.log(e) // }) }); var _this = this setTimeout(function () { _this.expandAll = true }, 300) } }) //属性. function AttrFrm(enName, title, pkVal) { var url = "../../Comm/En.htm?EnName=" + enName + "&No=" + pkVal; title = ""; OpenLayuiDialog(url, title, 5000, 0, null, false); return; } function DesignerFlow(no, name) { var sid = GetQueryString("Token"); var webUser = new WebUser(); var url = basePath +"/WF/Admin/CCBPMDesigner/Designer.htm?FK_Flow=" + no + "&UserNo=" + webUser.No + "&Token=" + sid + "&OrgNo=" + webUser.OrgNo + "&From=Ver2021"; window.top.vm.openTab(name, url); } function addTab(no, name, url) { window.top.vm.openTab(name, url); } /** * 分组-右键操作方法 &&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& * */ //新建:分组. function NewGroup() { var val = promptGener("请输入分组名", "基本信息"); if (!val) return null; var en = new Entity("BP.CCBill.Template.GroupMethod"); en.Name = val; en.FrmID = frmID; en.Insert(); return val; // 更新单元格label,不要用户刷新了. } //修改:分组名. function EditGroupName(groupID) { var en = new Entity("BP.CCBill.Template.GroupMethod", groupID); var val = promptGener("请输入分组名", en.Name); if (!val) return null; en.Name = val; en.Update(); return val; // 更新单元格label,不要用户刷新了. } /** * 方法的-右键操作方法 &&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& * */ //新建:方法. function NewMethod(groupID) { var url = "./Method/Func.htm?FrmID=" + frmID + "&GroupID=" + groupID; window.open(url); } //修改:方法名. function EditMethodName(methodID) { var en = new Entity("BP.CCBill.Template.Method", groupID); var val = promptGener("请输入方法名", en.Name); if (!val) return null; en.Name = val; en.Update(); return val; // 更新单元格 label,不要用户刷新了. } /** * 移动方法 $$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$ * @param {any} groupIDs */ /** * 移动分组 * @param {分组的IDs, 用逗号分开的.} groupIDs */ function MoverGroup(groupIDs) { // 目录排序.. var handler = new HttpHandler("BP.CCBill.WF_CCBill_Admin"); handler.AddPara("GroupIDs", groupIDs); var data = handler.DoMethodReturnString("Method_MoverGroup"); layer.msg(data) } /** * 移动方法 * @param {移动到的分组ID} groupID * @param {改组内的方法s, 用逗号分开的.} methodIDs */ function MoverMethod(groupID, methodIDs) { // 目录排序.. var handler = new HttpHandler("BP.CCBill.WF_CCBill_Admin"); handler.AddPara("GroupID", groupID); handler.AddPara("MethodIDs", methodIDs); var data = handler.DoMethodReturnString("Method_MoverMethod"); layer.msg(data); }