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

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

<!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>