You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

481 lines
21 KiB
Plaintext

11 months ago
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title>驰骋工作流</title>
<script language="JavaScript" src="../../Comm/JScript.js" type="text/javascript"></script>
<script type="text/javascript" src="../../Scripts/bootstrap/js/jquery.min.js"></script>
<script src="../../Scripts/QueryString.js" type="text/javascript"></script>
<!--<link href="../../../DataUser/Style/table0.css" rel="stylesheet" type="text/css" />-->
<!--layui的引用-->
<link href="../../Scripts/easyUI/themes/icon.css" rel="stylesheet" type="text/css" />
<link href="../../Scripts/layui/layui/css/layui.css" rel="stylesheet" />
<script src="../../Scripts/layui/layui/layui.js" type="text/javascript"></script>
<!-- end -->
<!-- 引用通用的js文件. -->
<script type="text/javascript" src="../../Scripts/config.js"></script>
<script type="text/javascript" src="../../Scripts/PinYin.js"></script>
<script type="text/javascript" src="../../Comm/Gener.js"></script>
<script src="../../Scripts/layui/treeTable.js"></script>
<script type="text/javascript" language="javascript">
var maxIndx = 0; //定义新增之后的最大序号
var fk_sftable = GetQueryString("FK_SFTable");
var QueryType = GetQueryString("QueryType");
var ens;//获取的字典表的数据
var data = [];//表格的数据
var table;//表格
var NoGenerModel;//编号生成规则
var currenNo;
var oldData;
var isSave = true;
layui.use(['tree', 'jquery', 'laypage', 'treeTable', 'table', 'layer', 'dropdown'], function () {
var treeTable = layui.treeTable;
var dropdown = layui.dropdown;
$(function () {
InitPage();
table.expandAll();
});
//初始化页面
function InitPage() {
const sfTable = new Entity("BP.Sys.SFTable", fk_sftable);
NoGenerModel = sfTable.NoGenerModel;
data = [];
ens = new Entities("BP.Sys.SFTableDtls");
ens.Retrieve("FK_SFTable", fk_sftable);
if (ens.toString().indexOf("err@") != -1) {
alert(ens);
return;
}
//ens对象变为数组
var keys = Object.keys(ens);
keys.forEach((key, index) => {
if (!isNaN(parseInt(key))) {
var node = {
...ens[key],
id: ens[key].BH,
index: index,
tool:"toolbar"
}
data.push(node);
}
});
console.log("树形表格数据:", data, ens);
oldData = data;
maxIndx = ens.length-1;
//渲染表格
tableRender();
//外键是sql形式的时候只能查看
if (QueryType == "Sql") {
$(".layui-card-header").hide();
$(".droplist").hide();
}
};
//渲染表格方法
function tableRender() {
table = treeTable.render({
elem: '#treeTable',
data: data,
id: 'treeTable',
tree: {
treeSpid: '0', //最上级的父级id
iconIndex: 1,
isPidData: true,
idName: 'BH',//父ID
pidName: 'ParentNo',//子ID
openName: 'open',// 是否默认展开的字段名
},
cols: [[
{ type: 'numbers', fixed: 'left' ,title:"#"}
, { field: 'BH', title: '编号', width: 300, templet: "<span name='TB_BH_{{ d.index }}' id='TB_BH_{{ d.index }}'>{{d.BH}}<span>" }
, { field: 'Name', title: '名称', templet: "<div><input class='layui-input' name='TB_Name_{{d.index}}' id='TB_Name_{{d.index}}' type='text' value='{{d.Name}}' style='width:98%;'/></div>" }
, { width: 100, align: 'center', title: '操作', toolbar: "#tool", fixed: 'right' }
]],
style: 'margin-top:0;',
done: function (res, curr, count) {
dropdown.render({
elem: ".droplist",
data: [{
id: "0",
title: "addBro",
templet: "<div>新建同级<div>"
},
{
id: "1",
title: "addChild",
templet: "<div>新建下级<div>"
},
{
id: "2",
title: "levelUp",
templet: "<div>升级<div>"
},
{
id: "3",
title: "levelDown",
templet: "<div>降级<div>"
},
{
id: "4",
title: "delete",
templet: "<div>删除<div>"
}
],
click: function (data, othis) {
var elem = $(this.elem)
, rowId = elem.data('id'); //表格列表的预埋数据
console.log(elem);
if (data.title === "addBro") {
addBro(rowId);
} else if (data.title === "addChild") {
addChild(rowId);
} else if (data.title === "delete") {
Delete(rowId, res);
} else if (data.title === "levelUp") {
levelUp(rowId);
} else if (data.title === "levelDown") {
levelDown(rowId,res);
};
}
});
}
});
}
//新建同级 id:本条数据的id
function addBro(id) {
//获取本条数据
var thisRow = data.filter((item) => item.BH == id)[0];
if (thisRow.ParentNo === "0") {
layer.msg('只能有一个根节点', { icon: 7 });
return;
};
maxIndx++;
var newNo = '';
if (NoGenerModel === 4) {
var sfTable = new Entity("BP.Sys.SFTable", fk_sftable);
newNo = sfTable.DoMethodReturnString("GenerSFTableNewNo");
} else if (NoGenerModel === 1) {
if (isSave == true) {
var sfTable = new Entity("BP.Sys.SFTable", fk_sftable);
newNo = sfTable.DoMethodReturnString("GenerSFTableNewNo");
currenNo = newNo;
} else {
let num = parseInt(currenNo) + 1;
if (num < 10) newNo = '00' + num.toString();
else if (num >= 10 && num < 100) newNo = '0' + num.toString();
else newNo = num.toString();
currenNo = newNo.toString();
}
isSave = false;
} else if (NoGenerModel === 0) {
newNo = prompt('请输入编号', '') || '';
if (newNo === '') {
alert('编号不能为空');
return;
}
}
var newNode = {
FK_SFTable: fk_sftable,
ParentNo: thisRow.ParentNo,
BH: newNo,
Name:'',
id: newNo,
index: maxIndx,
};
data.push(newNode);
tableRender();
table.expandAll();
};
//新建下级
function addChild(id) {
//获取本条数据
var thisRow = data.filter((item) => item.BH === id)[0];
if (thisRow.id == "" || thisRow.id == undefined || thisRow.id == null) {
layer.msg('当前节点尚未生成编号,请保存', { icon: 7 });
return;
};
maxIndx++;
var newNo = '';
if (NoGenerModel === 4) {
var sfTable = new Entity("BP.Sys.SFTable", fk_sftable);
newNo = sfTable.DoMethodReturnString("GenerSFTableNewNo");
} else if (NoGenerModel === 1) {
if (isSave) {
var sfTable = new Entity("BP.Sys.SFTable", fk_sftable);
newNo = sfTable.DoMethodReturnString("GenerSFTableNewNo");
currenNo = newNo;
} else {
let num = parseInt(currenNo) + 1;
if (num < 10) newNo = '00' + num.toString();
else if (num >= 10 && num < 100) newNo = '0' + num.toString();
else newNo = num.toString();
currenNo = newNo.toString();
}
isSave = false;
} else if (NoGenerModel === 0) {
newNo = prompt('请输入编号', '') || '';
if (newNo === '') {
alert('编号不能为空');
return;
}
}
var newNode = {
FK_SFTable: fk_sftable,
ParentNo: thisRow.BH,
BH: newNo,
Name: '',
id: newNo,
index: maxIndx,
};
data.push(newNode);
tableRender();
table.expandAll();
};
//升级
function levelUp(id) {
//获取本条数据
var thisRow = data.filter((item) => item.BH === id)[0];
if (thisRow.ParentNo === "0") {
layer.msg('当前节点已经是根节点,不能升级', { icon: 7 });
return;
}
//获取父亲节点,如果父亲节点是根节点不能升级
var thisRowParent = data.filter((item) => item.BH === thisRow.ParentNo && item.ParentNo != "0")[0];
if (!thisRowParent) {
layer.msg('只能有一个根节点', { icon: 7 });
return;
}
var en = new Entity("BP.Sys.SFTableDtl");
var { id, index, children, ...item } = thisRow;
en.CopyJSON(item);
en.SetValByKey("ParentNo", thisRowParent.ParentNo);
en.SetPKVal(item.MyPK);
en.Update();
InitPage();
table.expandAll();
};
//降级 成为相邻兄弟的孩子,没有兄弟不能降级
function levelDown(id, list) {
//获取本条数据
var thisRow = data.filter((item) => item.BH === id)[0];
//获取本节点的父节点结构,判断是否有兄弟
var parentNode = findNode(thisRow.ParentNo, list);
if (!parentNode || !parentNode.children || parentNode.children.length <= 1) {
layer.msg('当前节点不可降级', { icon: 7 });
return;
}
var thisIndex;
parentNode.children.forEach((item, index) => {
if (item.BH === thisRow.BH) {
thisIndex = index;
}
});
thisIndex = thisIndex == 0 ? thisIndex + 1 : thisIndex - 1;
var { id, index, children, ...item } = thisRow;
var en = new Entity("BP.Sys.SFTableDtl");
en.CopyJSON(item);
en.SetValByKey("ParentNo", parentNode.children[thisIndex].BH);
en.SetPKVal(item.MyPK);
en.Update();
InitPage();
table.expandAll();
}
//监听保存
$("#save").click(function () {
Save();
});
//保存.
function Save() {
var saves = [];
data.forEach((item, index) => {
newName = $("#TB_Name_" + index).val();
if (item.MyPK == null || item.MyPK == undefined) {
if (newName) {
if (NoGenerModel === 1 || NoGenerModel === 4 || NoGenerModel === 0) {
var en = new Entity("BP.Sys.SFTableDtl");
en.SetPKVal(fk_sftable + "_" + item.BH);
en.SetValByKey("FK_SFTable", fk_sftable);
en.SetValByKey("Name", newName);
en.SetValByKey("BH", item.BH);
en.SetValByKey("ParentNo", item.ParentNo);
saves.push(en.Insert());
}
else if (NoGenerModel === 2) {
//全拼编号
const no = ParsePinYin(newName, true);
var en = new Entity("BP.Sys.SFTableDtl");
en.SetPKVal(fk_sftable + "_" + no);
en.SetValByKey("FK_SFTable", fk_sftable);
en.SetValByKey("Name", newName);
en.SetValByKey("BH", no);
en.SetValByKey("ParentNo", item.ParentNo);
saves.push(en.Insert());
} else if (NoGenerModel === 3) {
//简拼编号
const no = ParsePinYin(newName, false);
var en = new Entity("BP.Sys.SFTableDtl");
en.SetPKVal(fk_sftable + "_" + no);
en.SetValByKey("FK_SFTable", fk_sftable);
en.SetValByKey("Name", newName);
en.SetValByKey("BH", no);
en.SetValByKey("ParentNo", item.ParentNo);
saves.push(en.Insert());
}
}
} else if (newName != oldData[index].Name) {
saves.push(en.DoMethodReturnString('UpdateData', item.BH, newName, fk_sftable));
}
});
Promise.all(saves).then(() => {
isSave = true;
InitPage();
table.expandAll();
});
}
//删除 id:本行的idlist:树形数组
function Delete(id, list) {
//if (window.confirm('将会删除所有子节点,您确定要删除吗?') == false)
// return;
var thisNode = findNode(id, list);
deleteAllSon(thisNode);
InitPage(); //刷新.
table.expandAll();
};
//递归寻找当前节点 返回当前节点 及其孩子结构
function findNode(id, list) {
for (var i = 0; i < list.length; i++) {
if (list[i].id === id) {
return list[i];
};
if (list[i].children && list[i].children.length > 0) {
var findRes = findNode(id, list[i].children);
if (findRes != null)
return findRes;
}
};
return null;
};
//递归删除本节点及所有后代节点
function deleteAllSon(node) {
if (node.children != undefined && node.children != null && node.children.length > 0) {
for (var i = 0; i < node.children.length; i++) {
var haveChild = deleteAllSon(node.children[i]);
if (haveChild === "noChild") {
var en = new Entity("BP.Sys.SFTableDtl");
en.SetValByKey("FK_SFTable", fk_sftable);
en.SetPKVal(node.MyPK);
en.Delete();
}
return "noChild";
}
} else {
var en = new Entity("BP.Sys.SFTableDtl");
en.SetValByKey("FK_SFTable", fk_sftable);
en.SetPKVal(node.MyPK);
en.Delete();
return "noChild";
}
};
//生成拼音编号
const ParsePinYin = (str, model) => {
let pinYin;
const handler = new HttpHandler('BP.WF.HttpHandler.WF_Admin_FoolFormDesigner');
handler.AddPara('name', str);
handler.AddPara('flag', model);
pinYin = handler.DoMethodReturnString('ParseStringToPinyin');
return pinYin;
};
//展开全部
$("#expandAll").click(function () {
table.expandAll();
});
//折叠全部
$("#foldAll").click(function () {
table.foldAll();
});
});
</script>
<style>
#divCCForm {
padding: 20px;
box-sizing: border-box;
overflow: hidden;
}
td[data-field="tool"] .ew-tree-table-cell.single-line .ew-tree-table-cell-content {
overflow: visible;
}
.ew-tree-table .ew-tree-table-box {
height: calc(100vh - 88px);
}
.layui-table-body {
height: calc(100vh - 77px);
}
</style>
</head>
<body>
<div class="layui-fluid">
<div class="layui-row layui-col-space15">
<div class="layui-col-md12">
<div class="layui-card">
<div class="layui-card-header" style="align-items: center;display: flex; justify-content: flex-end;">
<button id="expandAll" class="layui-btn layui-btn-sm layui-btn-primary">
展开全部
</button>
<button id="foldAll" class="layui-btn layui-btn-sm layui-btn-primary">
折叠全部
</button>
<button id="save" class="layui-btn layui-btn-sm layui-btn-primary">
<i class="layui-icon layui-icon-file"></i>保存
</button>
</div>
<div class="layui-card-body layui-table-body layui-table-main">
<table class="layui-hide" id="treeTable" lay-filter="treeTable"></table>
</div>
<!-- 表格操作列---start -->
<script id="tool" type="text/html">
<button class="layui-btn layui-btn-xs droplist" data-id={{d.id}}>
<span>操作</span>
<i class="layui-icon layui-icon-triangle-d"></i>
</button>
</script>
<script id="toolbar_content" type="text/html">
<ul class="layui-dropdown-menu lay_menu">
<li lay-event="addBro">新建同级</li>
<li lay-event="addChild">新建下级</li>
<li lay-event="delete">新建删除级</li>
</ul>
</script>
<!-- 表格操作列---end -->
</div>
</div>
</div>
</div>
</body>
</html>