/** * 项目管理相关js * * @author CaiAoLin * @date 2017/8/22 * @version */ let Tree = null;// let movetoZTree = null; let copytoZTree = null; let engineering = []; let feeRateData = []; let isSaving = false; let projectProperty = []; let fileDelObj = null; let projectType = { folder: 'Folder', tender: 'Tender', project: 'Project', engineering: 'Engineering' }; let fileType = { unitPriceFile: 'UnitPriceFile', feeRateFile: 'FeeRateFile' }; let ProjTreeSetting = { tree: { id: 'ID', pid: 'ParentID', nid: 'NextSiblingID', btnColumn: 1, nullId: -1 }, columns: [ { head: '', data: '', width: '40', event: {} }, { head: '工程列表', data: 'name', width: '48%', event: { getText: function (html, node, text) { let className = ''; let aClassName = ''; switch (node.data.projType) { case projectType.folder: className = "fa fa-folder-open-o"; break; case projectType.tender: className = "fa fa-sticky-note-o"; break; case projectType.project: className = "fa fa-cubes"; aClassName = "open-sidebar"; break; case projectType.engineering: className = "fa fa-cube"; aClassName = "open-sidebar"; break; } let icon = ''; html.push((node && node.data && node.data.projType === projectType.folder) ? ' ' : ''); html.push('', icon, ' ', text, ''); }, getIcon: function (html, node) { if (node.data.projType === projectType.tender) { html.push('└'); } }, tdBindEvent: function (td, node) { if (node.data.projType === projectType.tender) { $('a:eq(1)', td).bind('click', function () { let newTab = window.open('about:blank'); BeforeOpenProject(node.id(), {'fullFolder': GetFullFolder(node.parent)}, function () { let mainUrl = '/main?project=' + node.id(); CommonAjax.get(mainUrl, [], function () { newTab.location.href = mainUrl; }); }); return false; }); } } } }, { head: '工程造价', data: 'valuationType', width: '10%', event: { getText: function (html, node, text) { if(node.data.projType === projectType.tender){ // let engineeringCostText = node.data.engineeringCost ? node.data.engineeringCost : 0; let engineeringCostText = node.data.summaryFees ? node.data.summaryFees.totalFee : 0; html.push(engineeringCostText); } } } }, { head: '单价文件', data: 'unitPriceFile', width: '15%', event: { getText: function (html, node, text) { if(node.data.projType === projectType.tender){ let unitPriceText = node.data.property.unitPriceFile ? node.data.property.unitPriceFile.name : ''; html.push(unitPriceText); } } } }, { head: '费率文件', data: 'feeFile', width: '15%', event: { getText: function (html, node, text) { if(node.data.projType === projectType.tender){ let feeFileText = node.data.property.feeFile ? node.data.property.feeFile.name : ''; html.push(feeFileText); } } } }, /*{ head: '最近使用', data: 'lastDateTime', width: '10%', event: { getText: function (html, node, text) { if (node.data.projType === projectType.tender) { html.push(text ? new Date(text).Format('yyyy-MM-dd') : ''); } } } },*/ { head: '创建日期', data: 'createDateTime', width: '10%', event: { getText: function (html, node, text) { if (node.data.projType === projectType.tender) { html.push(text ? new Date(text).Format('yyyy-MM-dd') : ''); } } } } ], viewEvent: { beforeSelect: function (node) { if (node && node.row) { $('td:eq(0)', node.row).children().remove(); } }, onSelectNode: function (node) { $(".tools-btn > a").not(".disabled").addClass("disabled"); $("#add-engineering-btn").addClass("disabled"); $('#add-tender-btn').removeClass('disabled'); switch(node.data.projType) { case projectType.project: $("#del-btn").removeClass("disabled"); $("#add-engineering-btn").removeClass("disabled"); break; case projectType.folder: if(!node.children || node.children.length === 0){ $("#del-btn").removeClass("disabled"); } break; case projectType.engineering: $("#del-btn").removeClass("disabled"); $("#add-engineering-btn").removeClass("disabled"); break; case projectType.tender: $("#add-engineering-btn").removeClass("disabled"); $("#move-to-btn").removeClass("disabled"); $("#copy-to-btn").removeClass("disabled"); $("#share-btn").removeClass("disabled"); $("#cooperate-btn").removeClass("disabled"); $("#del-btn").removeClass("disabled"); break; } $("#rename-btn").removeClass("disabled"); $('td:eq(0)', node.row).append($('')); } } }; $(document).ready(function() { init(); Tree = null; $('#tab_pm_all').on('show.bs.tab', function () { gcTree = null; init(); }); // 侧滑数据 $(".poj-list").on('click', ".open-sidebar", function() { setDataToSideBar(); $(".slide-sidebar").animate({width:"800"}).addClass("open"); }); //单价、费率文件删除确认 $('#fileDelConfirm').click(function () { if(fileDelObj && fileDelObj.id){ let updateObj = Object.create(null); updateObj.updateType = 'delete'; updateObj.updateData = Object.create(null); if(fileDelObj.fileType === fileType.unitPriceFile){ updateObj.updateData.id = fileDelObj.id; } else if(fileDelObj.fileType === fileType.feeRateFile){ updateObj.updateData.ID = fileDelObj.id; } updateObj.fileType = fileDelObj.fileType; console.log(updateObj); a_updateFiles([updateObj], function () { fileDelObj = null; $('#fileDelCancel').click(); //refresh front? }); } }); // 新增建设项目点击 $('#add-project-btn').click(function () { let selectedItem = Tree.selected(); $('#add-project-dialog').modal('show'); }); // 新增建设项目操作 $('#addProjOk').click(function () { AddProject(); }); // 选择计价方式 $("input[name='valuation_type']").click(function() { let type = $(this).val(); let targetData = type === 'bill' ? JSON.parse(billValuation) : JSON.parse(rationValuation); let html = '请选择计价规则'; for(let valuation of targetData) { if (valuation === null) { continue; } html += ''+ valuation.name +''; } $("#valuation").html(html); $("#tender-engineering").html('请选择对应的工程专业'); }); //选择计价规则 $("#valuation").change(function () { let engineeringList = getEngineeringList(); let engineeringHtml = getEngineeringHtml(engineeringList); $("#tender-engineering").html(engineeringHtml); }); // 新增单项项目点击 $("#add-engineering-btn").click(function() { let selectedItem = Tree.selected(); try { if(selectedItem !== null && selectedItem.data.projType !== projectType.folder){ $("#add-engineering-dialog").modal("show"); } } catch (error) { alert(error); } }); // 新增单项工程操作 $("#add-engineering-confirm").click(function() { AddEngineering(); }); // 新增单位工程点击 $("#add-tender-btn").click(function() { let selectedItem = Tree.selected(); $("#add-tender-dialog").modal("show"); }); //新建单位工程-建设项目提示 $('#poj-name').change(function () { let pojName = $('#poj-name').val().trim(); let nameList = getNameList($('#poj-name-list').children()); let isExist = hasListName(nameList, pojName); if(!isExist){ $('#poj-name-info').text('新建 “' + pojName + '”'); $('#poj-name-info').show(); //清空单项工程下拉和文件下拉 setEngOptions(null); setFileOptions(null); } else { $('#poj-name-info').hide(); } }); //新建单位工程-单项工程提示 $('#eng-name').change(function () { let engName = $('#eng-name').val().trim(); let nameList = getNameList($('#eng-name-list').children()); let isExist = hasListName(nameList, engName); if(!isExist){ $('#eng-name-info').text('新建 “' + engName + '”'); $('#eng-name-info').show(); } else { $('#eng-name-info').hide(); } }); //新建单位工程-单位工程提示 $('#tender-name').change(function () { let selected = Tree.selected(); let pojName = $('#poj-name').val().trim(); let engName = $('#eng-name').val().trim(); let tenderName = $('#tender-name').val().trim(); let isExist = hasTender(selected, pojName, engName, tenderName); if(isExist){ $('#tender-name-info').text('已存在 “' + tenderName + '”'); $('#tender-name-info').show(); } else { $('#tender-name-info').hide(); } }); //下拉是否含有输入的名字 function hasListName(nameList, name){ for(let i = 0, len = nameList.length; i < len; i++){ if(nameList[i] === name){ return true; } } return false; } function getNameList(list){ let rst = []; for(let i = 0, len = list.length; i < len; i++){ rst.push($(list[i]).text()); } return rst; } // 新增单位工程弹层改变 $('#add-tender-dialog').on('show.bs.modal', function() { //clear info $('#poj-name-info').hide(); $('#eng-name-info').hide(); $('#tender-name-info').hide(); $('#tender-name').val(''); //获取建设项目 let selected = Tree.selected(); let projs = getProjs(selected); setProjOptions(projs); $($("input[name='valuation_type']")[0]).click(); }); // 新增单位工程 $("#add-tender-confirm").click(function() { AddTender(); }); // 新增文件夹按钮点击 $("#add-folder-btn").click(function() { $("#add-folder-dialog").modal("show"); }); // 新增文件夹操作 $("#add-folder-confirm").click(function() { AddFolder(); }); // 删除按钮点击 $('#del-btn').click(function() { if (Tree && Tree.selected()) { $('#del').modal('show'); } }); // 删除时文字替换 $('#del').on('show.bs.modal', function() { let hasTenderChild = function (children) { for (let i = 0; i < children.length; i++) { if (children[i].children.length === 0) { if (children[i].data.projType === 'Tender') { return true; } } else if (hasTenderChild(children[i].children)) { return true; } } return false; }; // 显示内容 let tenderHintElement = $('#tenderHint'); let folderHintElement = $('#folderHint'); if (Tree.selected().children.length === 0) { tenderHintElement.show(); tenderHintElement.text('删除 "' + Tree.selected().data.name +'" ?'); folderHintElement.hide(); } else { tenderHintElement.hide(); folderHintElement.show(); folderHintElement.text('删除 "'+ Tree.selected().data.name +'" 以及它包含的子项?'); } // 显示是否可以找回 if (hasTenderChild([Tree.selected()])) { $('#restoreHint').show(); } else { $('#restoreHint').hide(); } }); // 删除操作 $('#delete-confirm').click(function () { let updateData = null; let dialog = $('#del'); if (Tree) { updateData = GetDeleteUpdateData(Tree.selected()); console.log(updateData); UpdateProjectData(updateData, function () { dialog.modal('hide'); Tree.removeNode(Tree.selected()); }); } }); // 重命名按钮点击 $('#rename-btn').click(function() { if (!Tree) { return false; } if (!Tree.selected()) { alert('请选择需要重命名的数据'); return false; } $('#rename-dialog').modal('show'); }); // 重命名操作 $("#rename-confirm").click(function() { let select = Tree.selected(); let newName = $('#rename-name').val(); let dialog = $('#rename-dialog'); if (newName === '') { alert('请输入重命名的名称'); return false; } if (newName === select.data.name) { dialog.modal('hide'); return false; } RenameProject(select.id(), newName, select.data.ParentID, function () { dialog.modal('hide'); select.data.name = newName; Tree.refreshNodesDom([select]); }); }); // 移动到按钮点击 $('#move-to-btn').click(function () { if (Tree && Tree.selected()) { $('#move-to-dialog').modal('show'); } }); // 移动到窗口内容重组 $('#move-to-dialog').on('show.bs.modal', function () { movetoZTree = ConvertTreeToZtree(Tree, $('#treeDemo'), Tree.selected()); }); // 移动到操作 $('#move-to-confirm').click(function () { console.log(111); let updateData = null; let dialog = $('#move-to-dialog'); let target = GetTargetTreeNode($.fn.zTree.getZTreeObj('treeDemo')); let cur = Tree.selected(); if (!target) { dialog.modal('hide'); return false; } if (target.data.projType !== projectType.engineering) { alert("请移动到单项工程中!"); return false; } // 判断同级是否有同名 if (target.children.length > 0) { for (let tmp in target.children) { if (tmp === 0) { continue; } if (target.children[tmp].data.name === cur.data.name) { alert("对应单项工程中存在同名数据!"); return false; } } } let parent = target; let next = target.firstChild(); if (parent !== cur.parent || (next !== cur && next !== cur.nextSibling)){ let typeInfo = { updateType: 'update', projectType: null }; updateData = GetUpdateData(null, parent, next, '', null, Tree.selected().id(), typeInfo); UpdateProjectData(updateData, function (data) { dialog.modal('hide'); Tree.move(Tree.selected(), parent, next); }); } else { dialog.modal('hide'); } }); // 复制到按钮点击 $('#copy-to-btn').click(function () { let selectedItem = Tree.selected(); try { let selectedType = selectedItem !== null && selectedItem.data !== undefined ? selectedItem.data.projType : ''; if (selectedType !== projectType.tender) { throw '请选择单位工程进行复制'; } } catch (error) { alert(error); return false; } $('#copy-to-dialog').modal('show'); }); // 复制到弹层替换 $('#copy-to-dialog').on('show.bs.modal', function () { copytoZTree = ConvertTreeToZtree(Tree, $('#treeDemo2'), null); }); // 复制到操作 $("#copy-to-confirm").click(function() { let dialog = $('#copy-to-dialog'); let target = GetTargetTreeNode($.fn.zTree.getZTreeObj('treeDemo2')); let parent = null; let next = null; let pre = null; let cur = Tree.selected(); if (!target) { return false; } if (target.data.projType !== projectType.engineering) { alert("请移动到单项工程中!"); return false; } if (target.data.projType !== projectType.tender && target.children.length !== 0 && target.firstChild().data.projType !== projectType.tender) { dialog.modal('hide'); } // 判断同级是否有同名 if (target.children.length > 0) { for (let tmp in target.children) { if (tmp === 0) { continue; } if (target.children[tmp].data.name === cur.data.name) { alert("对应单项工程中存在同名数据!"); return false; } } } if (target.data.projType === projectType.tender) { parent = target.parent; next = target.nextSibling; } else { parent = target; next = target.firstChild(); } if (parent !== cur.parent || (next !== cur && next !== cur.nextSibling)){ CommonAjax.post('/pm/api/getNewProjectID', {count: 1, user_id: userID}, function (IDs) { let typeInfo = { updateType: 'copy', projType: cur.data.projectType }; let updateData = GetUpdateData(null, parent, next, cur.data.name, cur.data.property, IDs.lowID, typeInfo); updateData.forEach(function (data) { if (data.updateType === 'copy') { data['srcProjectId'] = cur.id(); } }); pre = GetNeedUpdatePreNode(parent, next); if (pre) { updateData = {}; updateData['updateType'] = 'update'; updateData['updateData'] = {}; updateData['updateData'][Tree.setting.tree.id] = pre.id(); updateData['updateData'][Tree.setting.tree.nid] = node.tree.maxNodeId() + 1; } Tree.maxNodeId(IDs.lowID - 1); CommonAjax.post('/pm/api/copyProjects', {updateData: updateData, user_id: userID}, function (data) { dialog.modal('hide'); data.forEach(function (nodeData) { if (nodeData.updateType === 'copy') { Tree.addNodeData(nodeData.updateData, parent, next); } }); }, function () { dialog.modal('hide'); }); }); } }); // 选择工程专业后动态更改费率文件等数据 $("#tender-engineering").change(function() { let engineeringList = getEngineeringList(); if(engineeringList.length === 0){ return false; } let selectedEngineering = $(this).val(); selectedEngineering = parseInt(selectedEngineering); let currentLib = {}; for(let engineering of engineeringList) { if (engineering.engineering === selectedEngineering) { currentLib = engineering.lib; } } if (Object.keys(currentLib).length <= 0) { return false; } // 输出数据到页面 if (currentLib.fee_lib !== undefined && currentLib.fee_lib.length > 0) { $("#tender-fee-rate").children("option").first().val("newFeeRate-"+currentLib.fee_lib[0].id); } $(this).parent().siblings('.hidden-area').slideDown('fast'); }); }); /** * 初始化数据 * * @return {void} */ function init() { billValuation = billValuation.replace(/\n/g, '\\n'); rationValuation = rationValuation.replace(/\n/g, '\\n'); let table = $('#ProjTree'); $('thead', table).remove(); $('tbody', table).remove(); GetAllProjectData(function (data) { Tree = $.fn.treeTable.init(table, ProjTreeSetting, data); }); // 显示默认两个可选菜单 $(".tools-btn > a").not(".disabled").addClass("disabled"); $("#add-tender-btn").removeClass("disabled"); engineering = engineeringList !== null && engineeringList !== undefined ? JSON.parse(engineeringList) : []; } /** * 新增建设项目 * * @return {boolean} */ function AddProject() { let name = $('#project-name').val().trim(); if (name === '') { alert('请填写建设项目名称'); return false; } let callback = function() { $("#add-project-dialog").modal("hide"); $("#project-name").val(''); }; let selectedItem = Tree.selected(); /* * (1)、当前没有焦点行,新建建设项目为第一个节点。 (2)、当前定位在文件夹,新建建设项目为文件夹的最后一个子节点。 (3)、当前定位在建设项目,新建建设项目为其后兄弟。 (4)、当前定位在单项工程或单位工程,新建项目为当前所属建设项目的后兄弟。 * */ if(!selectedItem){ AddSiblingsItem(selectedItem, name, null, projectType.project, callback); } else { if(selectedItem.data.projType === projectType.project){ AddSiblingsItem(selectedItem, name, null, projectType.project, callback); } else if(selectedItem.data.projType === projectType.engineering || selectedItem.data.projType === projectType.tender){ let proj = selectedItem.parent.data.projType === projectType.project ? selectedItem.parent : selectedItem.parent.parent; AddSiblingsItem(proj, name, null, projectType.project, callback); } else if(selectedItem.data.projType === projectType.folder){ AddChildrenItem(selectedItem, name, null, projectType.project, callback); } } } function AddTenderItems(selected, projName, engName, tenderName, property, callback){ const addPath = {p_e_t: 'p_e_t', e_t: 'e_t', t: 't'}; let path, updateDatas = []; let tempProjs = getProjs(selected); let tempProj = getNodeByName(projName, tempProjs); let tempEng; if(tempProj){ tempEng = getNodeByName(engName, tempProj.children); if(tempEng){ path = addPath.t; } else { path = addPath.e_t } } else { path = addPath.p_e_t; } if(path === addPath.p_e_t){ let parent, pre, next; GetNewProjectId(3, function (IDs) { let projID = IDs.lowID, engID = IDs.lowID + 1, tenderID = IDs.lowID + 2; if(!selected || selected && selected.data.projType === projectType.project){ parent = selected ? selected.parent : Tree._root; pre = selected; next = selected ? selected.nextSibling : Tree.firstNode(); } else if(selected.data.projType === projectType.folder){ parent = selected ? selected : Tree._root; pre = selected ? selected.lastChild() : Tree.firstNode(); next = null; } else if(selected.data.projType === projectType.engineering || selected.data.projType === projectType.tender){ let selectedProj = selected.parent.data.projType === projectType.project ? selected.parent : selected.parent.parent; parent = selectedProj ? selectedProj.parent : Tree._root; pre = selectedProj; next = selectedProj ? selectedProj.nextSibling : Tree.firstNode(); } let updateProjs = GetUpdateData(pre, parent, next, projName, null, projID, {updateType: 'new', projectType: projectType.project}); let updateEng = {updateType: 'new', updateData: {ID: engID, ParentID: projID, NextSiblingID: -1, name: engName, projType: projectType.engineering}}; property.rootProjectID = projID; let updateTender = {updateType: 'new', updateData: {ID: tenderID, ParentID: engID, NextSiblingID: -1, name: tenderName, projType: projectType.tender, property: property}}; updateDatas = updateDatas.concat(updateProjs); updateDatas.push(updateEng); updateDatas.push(updateTender); UpdateProjectData(updateDatas, function(datas){ let projData, engData, tenderData; datas.forEach(function (data) { if (data.updateType === 'new') { if(data.updateData.projType === projectType.project){ projData = data.updateData; } else if(data.updateData.projType === projectType.engineering){ engData = data.updateData; } else if(data.updateData.projType === projectType.tender){ tenderData = data.updateData; } } }); let pojNode = Tree.addNodeData(projData, parent, pre && pre.nextSibling ? pre.nextSibling : null); let engNode = Tree.addNodeData(engData, pojNode, null); Tree.addNodeData(tenderData, engNode, null); callback(); }); }); } else if(path === addPath.e_t){ GetNewProjectId(2, function (IDs) { let engID = IDs.lowID, tenderID = IDs.lowID + 1; let pre = tempProj.lastChild(); let next = null; let updateEng = {updateType: 'new', updateData: {ID: engID, ParentID: tempProj.data.ID, NextSiblingID: -1, name: engName, projType: projectType.engineering}}; property.rootProjectID = tempProj.data.ID; let updateTender = {updateType: 'new', updateData: {ID: tenderID, ParentID: engID, NextSiblingID: -1, name: tenderName, projType: projectType.tender, property: property}}; if(selected && selected.data.projType === projectType.engineering && selected.parent === tempProj){ pre = selected; next = selected.nextSibling; updateEng.updateData.NextSiblingID = pre.data.NextSiblingID; } updateDatas.push(updateEng); updateDatas.push(updateTender); if(pre){ updateDatas.push({updateType: 'update', updateData: {ID: pre.id(), NextSiblingID: engID}}); } UpdateProjectData(updateDatas, function (datas) { let engData, tenderData; datas.forEach(function (data) { if (data.updateType === 'new') { if(data.updateData.projType === projectType.engineering){ engData = data.updateData; } else if(data.updateData.projType === projectType.tender){ tenderData = data.updateData; } } }); let engNode = Tree.addNodeData(engData, tempProj, next); Tree.addNodeData(tenderData, engNode, null); callback(); }); }); } else if(path === addPath.t){ GetNewProjectId(1, function (IDs) { let tenderID = IDs.lowID; let pre = tempEng.lastChild(); property.rootProjectID = tempProj.data.ID; let updateTender = {updateType: 'new', updateData: {ID: tenderID, ParentID: tempEng.id(), NextSiblingID: -1, name: tenderName, projType: projectType.tender, property: property}}; updateDatas.push(updateTender); if(pre){ updateDatas.push({updateType: 'update', updateData: {ID: pre.id(), NextSiblingID: tenderID}}); } UpdateProjectData(updateDatas, function (datas) { datas.forEach(function (data) { if(data.updateType === 'new') { Tree.addNodeData(data.updateData, tempEng, null); } }); callback(); }) }); } } /** * 新增子元素 * * @param {String} name * @param {String} type * @param {function} callback * @return {void} */ function AddChildrenItem(selected, name, property, type, callback) { if(!selected){ selected = Tree.selected(); } let parent = selected ? selected : Tree._root; let pre = selected ? selected.lastChild() : Tree.firstNode(); if(existName(name, parent.children)){ alert('同级目录已存在相同名称数据.'); callback(); } else { GetNewProjectId(1, function(IDs) { let typeInfo = { updateType: 'new', projectType: type }; let updateData = GetUpdateData(pre, parent, null, name, property, IDs.lowID, typeInfo); Tree.maxNodeId(IDs.lowID - 1); UpdateProjectData(updateData, function(datas){ datas.forEach(function (data) { if (data.updateType === 'new') { Tree.addNodeData(data.updateData, parent, null); } }); callback(); }); }); } } /** * 新增同级元素 * * @param {String} name * @param {String} type * @param {function} callback * @return {void} */ function AddSiblingsItem(selected, name, property, type, callback) { if(!selected){ selected = Tree.selected(); } let parent = selected ? selected.parent : Tree._root; let next = selected ? selected.nextSibling : Tree.firstNode(); if(existName(name, parent.children)){ alert('同级目录已存在相同名称数据.'); callback(); } else { GetNewProjectId(1, function(IDs) { let typeInfo = { updateType: 'new', projectType: type }; let updateData = GetUpdateData(selected, parent, next, name, property, IDs.lowID, typeInfo); Tree.maxNodeId(IDs.lowID - 1); UpdateProjectData(updateData, function(datas){ datas.forEach(function (data) { if (data.updateType === 'new') { Tree.addNodeData(data.updateData, parent, next); console.log(selected); } }); callback(); }); }); } } function getEngineeringList(){ let valuation = $("#valuation").val(); let valuationType = $("input[name='valuation_type']:checked").val(); let valuationData = valuationType === 'bill' ? JSON.parse(billValuation) : JSON.parse(rationValuation); let engineeringList = []; for(let tmp of valuationData) { if (tmp._id === valuation) { engineeringList = tmp.engineering_list; break; } } return engineeringList; } function getNodeByName(name, nodes){ for(let i = 0, len = nodes.length; i < len; i++){ if(name === nodes[i].data.name){ return nodes[i]; } } return null; } //同级是否重名 function existName(name , nodes){ for(let i = 0, len = nodes.length; i < len; i++){ if(name === nodes[i].data.name){ return true; } } return false; } //获取新建单位工程时的建设项目数据 function getProjs(selected){ let rst = []; let temp; let firstNode; if(!selected){ temp = Tree._root.children; firstNode = temp[0]; } else if(selected.data.projType === projectType.folder){ temp = selected.children; firstNode = temp[0]; } else if(selected.data.projType === projectType.project){ temp = selected.parent.children; firstNode = temp[0]; } else if(selected.data.projType === projectType.engineering || selected.data.projType === projectType.tender){ let proj = selected.parent.data.projType === projectType.project ? selected.parent : selected.parent.parent; temp = proj.parent.children; firstNode = proj; } for(let i = 0, len = temp.length; i < len; i++){ if(temp[i].data.projType === projectType.project){ rst.push(temp[i]); } } //firstNode to first place let index = null; for(let i = 0, len = rst.length; i < len; i++){ if(rst[i].data.ID === firstNode.data.ID){ index = i; break; } } if(index){ rst.splice(index, 1); rst.splice(0, 0, firstNode); } return rst; } function setFileOptions(projID){ // 获取单价文件数据 if(!projID){ $("#unit-price").children("option:not(':first')").remove(); let first = $("#tender-fee-rate").children("option").first(); $("#tender-fee-rate").empty(); $("#tender-fee-rate").append(first); } else { getUnitFile(projID, function (response) { $("#unit-price").children("option:not(':first')").remove(); if (response.data.length <= 0) { return false; } let unitFileHtml = ''; for(let tmp of response.data) { unitFileHtml += ''+ tmp.name +''; } $("#unit-price").children("option").first().after(unitFileHtml); }); // 获取费率文件数据 getFeeRateFile(projID, function (response) { let first = $("#tender-fee-rate").children("option").first(); $("#tender-fee-rate").empty(); $("#tender-fee-rate").append(first); if (response.data.length <= 0) { return false; } for(let tmp of response.data) { let option = $("").val(tmp.ID).text(tmp.name); $("#tender-fee-rate").append(option); } }); } } //建设项目下拉框 function setProjOptions(projs){ $("#poj-name-list").empty(); $("#poj-name").val(""); if(projs.length > 0){ $("#poj-name").val(projs[0].data.name); setFileOptions(projs[0].data.ID); setEngOptions(projs[0].data.ID); for(let i = 0, len = projs.length; i < len; i++){ let proj = $("").val(projs[i].data.ID).text(projs[i].data.name); proj.addClass("dropdown-item"); proj.attr("type", "button"); proj.click(function () { $("#poj-name").val(projs[i].data.name); setFileOptions(projs[i].data.ID); setEngOptions(projs[i].data.ID); }); $("#poj-name-list").append(proj); } } else { setFileOptions(null); setEngOptions(null); } } //单项工程下拉框 function setEngOptions(projID){ let proj = Tree.findNode(projID) || null; $("#eng-name-list").empty(); $("#eng-name").val(""); if(proj){ let engineerings = proj.children; //set selected engineering to first place let selected = Tree.selected(); let firstNode = null; if(selected && (selected.data.projType === projectType.engineering || selected.data.projType === projectType.tender)){ firstNode = selected.data.projType === projectType.engineering ? selected : selected.parent; } if(firstNode){ let index = null; for(let i = 0, len = engineerings.length; i < len; i++){ if(firstNode.data.ID === engineerings[i].data.ID){ index = i; } } if(index){ engineerings.splice(index, 1); engineerings.splice(0, 0, firstNode); } } if(engineerings.length > 0){ $("#eng-name").val(engineerings[0].data.name); for(let i = 0, len = engineerings.length; i < len; i++){ let eng = $("").val(engineerings[i].data.ID).text(engineerings[i].data.name); eng.addClass("dropdown-item"); eng.attr("type", "button"); eng.click(function () { $("#eng-name").val(engineerings[i].data.name); }); $("#eng-name-list").append(eng); } } } } function hasTender(selected, pojName, engName, tenderName){ let isExist = false; let tempProjs = getProjs(selected); if(pojName !== ''){ let tempProj = getNodeByName(pojName, tempProjs); if(tempProj){ if(engName !== ''){ let tempEng = getNodeByName(engName, tempProj.children); if(tempEng){ let tempTender = getNodeByName(tenderName, tempEng.children); if(tempTender){ isExist = true; } } } } } return isExist; } /** * 新增单项工程 * * @return {boolean} */ function AddEngineering() { let name = $('#engineering-name').val().trim(); if (name === '') { alert('请填写单项工程名称'); return false; } let callback = function() { $("#add-engineering-dialog").modal("hide"); $("#engineering-name").val(''); }; let selectedItem = Tree.selected(); // 如果选择的是单项工程则新增同级数据 if(selectedItem){ if(selectedItem.data.projType === projectType.project){ AddChildrenItem(selectedItem, name, null, projectType.engineering, callback); } else if(selectedItem.data.projType === projectType.engineering){ AddSiblingsItem(selectedItem, name, null, projectType.engineering, callback); } else if(selectedItem.data.projType === projectType.tender){ let proj = selectedItem.parent; AddSiblingsItem(proj, name, null, projectType.engineering, callback); } } } /** * 新增单位工程 * * @return {boolean} */ function AddTender() { try { let projName = $("#poj-name").val().trim(); if(projName === ''){ throw '请填写建设项目名称'; } let engName = $("#eng-name").val().trim(); if(engName === ''){ throw '请填写单项工程名称'; } let tenderName = $('#tender-name').val(); if (tenderName === '') { throw '请填写单位工程名称'; } if(hasTender(Tree.selected(), projName, engName, tenderName)){ throw '已存在单位工程'; } let unitPriceFile = $("#unit-price").val(); let unitPriceName = unitPriceFile !== '' ? $("#unit-price").children("option:selected").text() : tenderName; let feeFile = $("#tender-fee-rate").val(); /* if (feeFile === '') { throw '请选择费率文件'; }*/ let feeFileName = $("#tender-fee-rate").children("option:selected").text(); let valuation = $("#valuation").val(); if(valuation === ''){ throw '请选择计价规则' } let engineering = $("#tender-engineering").val(); if (engineering === '') { throw '请选择工程专业'; } let valuationName = $("#valuation").children("option:selected").text(); let valuationType = $("input[name='valuation_type']:checked").val(); let engineering_id = undefined; let valuationData = valuationType === 'bill' ? JSON.parse(billValuation) : JSON.parse(rationValuation); let engineeringList = []; for(let tmp of valuationData) { if (tmp._id === valuation) { engineeringList = tmp.engineering_list; break; } } let libs = null; for(let tmp of engineeringList) { if (tmp.engineering == engineering) { engineering_id = tmp.engineering_id; libs = tmp.lib; break; } } // 一个项目里面,这两个文件必须得有,而界面又没有像费率、单价文件那样给出可选项。所以这里给出提示。 if (!libs.artificial_lib) throw '编办没有绑定人工系数标准文件'; if (!libs.program_lib) throw '编办没有绑定计算程序标准文件'; let engineeringName = $('#tender-engineering').children("option:selected").text(); let callback = function() { $("#add-tender-dialog").modal("hide"); $('#tender-name').val(''); $("#tender-fee-rate").children("option").removeAttr("selected"); $("#tender-engineering").children("option").removeAttr("selected"); $("#poj-name").val(''); $("#poj-name-info").hide(); $("#eng-name").val(''); $("#eng-name-info").hide(); }; let selectedItem = Tree.selected(); let tenderInfo = { valuation: valuation, valuationType: valuationType, valuationName: valuationName, engineering: engineering, engineering_id: engineering_id, engineeringName: engineeringName, unitPriceFile: {name: unitPriceName, id: unitPriceFile}, feeFile: {name: feeFileName, id: feeFile} }; AddTenderItems(selectedItem, projName, engName, tenderName, tenderInfo, callback); } catch (error) { alert(error); } } /** * 新增文件夹 * * @return {boolean} */ function AddFolder() { let name = $('#folder-name').val().trim(); if (name === '') { alert('请填写文件夹名称'); return false; } let selectedItem = Tree.selected(); let callback = function() { $("#add-folder-dialog").modal("hide"); $("#folder-name").val(''); }; if (selectedItem !== null) { // 判断是否超过3层 if(!withinTreble(selectedItem)){ alert("文件夹不能超过3层"); return false; } if(selectedItem.data.projType === projectType.folder || selectedItem.data.projType === projectType.project){ AddSiblingsItem(null, name, null, projectType.folder, callback); } else if(selectedItem.data.projType === projectType.engineering || selectedItem.data.projType === projectType.tender){ let proj = selectedItem.parent.data.projType === projectType.project ? selectedItem.parent : selectedItem.parent.parent; AddSiblingsItem(proj, name, null, projectType.folder, callback); } } else { AddSiblingsItem(null, name, null, projectType.folder, callback); } } //判断是否是三层文件夹以内 function withinTreble(selectedItem){ let rst; if(selectedItem.data.projType === projectType.engineering || selectedItem.data.projType === projectType.tender){ selectedItem = selectedItem.parent.data.projType === projectType.project ? selectedItem.parent : selectedItem.parent.parent; } if(selectedItem.parent.parent && hasFolder(selectedItem.parent.parent.children) && selectedItem.parent.parent.parent && hasFolder(selectedItem.parent.parent.parent.children) && selectedItem.parent.parent.parent.parent && hasFolder(selectedItem.parent.parent.parent.parent.children)){ return false; } return true; function hasFolder(items){ for(let i = 0, len = items.length; i < len; i++){ if(items[i].data.projType === projectType.folder){ return true; } } return false; } } /** * 组织更新数据 * * @param {Object} parent * @param {Object} next * @param {String} name * @param {Object} type * @return {Object} */ function GetUpdateData(pre, parent, next, name, property, newId, type) { let data = []; let updateData = {}; let rootProjectID = -1; if(type.projectType === projectType.tender){ let rootProject = parent ? parent.parent : Tree._root; rootProjectID = rootProject ? rootProject.id() : -1; if(property){ property.rootProjectID=rootProjectID; } } updateData['updateType'] = type.updateType === undefined ? 'new' : type.updateType; updateData['updateData'] = {}; if (newId !== '') { updateData['updateData'][Tree.setting.tree.id] = newId; } updateData['updateData'][Tree.setting.tree.pid] = parent ? parent.id() : -1; updateData['updateData'][Tree.setting.tree.nid] = next ? next.id() : -1; if (name !== '') { updateData['updateData']['name'] = name; } if (property !== null && property !== undefined) { updateData['updateData']['property'] = property; } if (type !== null && type.projectType !== null) { updateData['updateData']['projType'] = type.projectType !== undefined ? type.projectType : 'Tender'; } if(pre){//维护preNode let updateObj = Object.create(null); updateObj.updateData = Object.create(null); updateObj.updateType = 'update'; updateObj.updateData.ID = pre.id(); updateObj.updateData.NextSiblingID = newId; data.push(updateObj); } data.push(updateData); return data; } /** * 获取删除数据 * * @return {Object} node * @return {Object} */ function GetDeleteUpdateData(node) { let datas = [], updateData, pre = node.preSibling(), deleteNodeData = function (node) { var data = Object.create(null); data['updateType'] = 'delete'; //data['NextSiblingID'] = node.data.NextSiblingID; data['updateData'] = Object.create(null); data['updateData'][Tree.setting.tree.id] = node.id(); data['updateData']['projType'] = node.data.projType; if (node.data.projType === 'Tender') { data['updateData']['FullFolder'] = GetFullFolder(node.parent); } return data; }, addDeleteChildren = function (children) { children.forEach(function(child){ datas.push(deleteNodeData(child)); addDeleteChildren(child.children); }); }; if (pre && pre.id() !== -1) { updateData = {}; updateData['updateType'] = 'update'; updateData['updateData'] = {}; updateData['updateData'][Tree.setting.tree.id] = pre.id(); updateData['updateData'][Tree.setting.tree.nid] = node ? node.nid() : -1; datas.push(updateData); } datas.push(deleteNodeData(node)); addDeleteChildren(node.children); return datas; }; /** * 获取父级所有名称 * * @return {Array} */ function GetFullFolder (node) { let fullFolder = []; let cur = node; while (cur && cur.data) { fullFolder.unshift(cur.data.name); cur = cur.parent; } return fullFolder; } /** * 获取需要更新的前节点 * * @param {Object} parent * @param {Object} next * @return {Object} */ function GetNeedUpdatePreNode(parent, next) { if (next) { return next.preSibling(); } else if (parent) { return parent.firstChild(); } else { return null; } } /** * 获取最新id * * @param {function} callback * @return {void} */ function GetNewProjectId(count, callback) { CommonAjax.post('/pm/api/getNewProjectID', {count: count}, function(data) { callback(data); }); } /** * 重命名项目 * * @param {Number} projectId * @param {String} newName * @param {Number} parentID * @param {function} callback * @return {void} */ function RenameProject(projectId, newName, parentID, callback) { $.ajax({ type: "POST", url: '/pm/api/renameProject', data: {'data': JSON.stringify({"user_id": userID, "id": projectId, "newName": newName, "parentID": parentID})}, dataType: 'json', cache: false, timeout: 5000, success: function(result){ if (result.error === 0) { callback(); } else { alert('error' + result.message); } }, error: function(iqXHR, textStatus, errorThrown){ alert('error ' + textStatus + " " + errorThrown) } }); } /** * 转换当前树结构为zTree结构 * * @param {Object} Tree * @param {Object} zTreeObj * @param {Object} filterNode * @return {Mixed} */ function ConvertTreeToZtree(Tree, zTreeObj, filterNode) { let setting = { data: { simpleData: { enable:true, idKey: "id", pIdKey: "pId", rootPId: "-1" } }}; let zTreeData = [], exportNodesData = function (nodes) { nodes.forEach(function (node) { if (node !== filterNode) { var data = {}; data['id'] = node.data[Tree.setting.tree.id]; data['pId'] = node.pid(); data['name'] = node.data['name']; data['isParent'] = node.data.projType === 'Folder';//(node.data.projType === 'Folder' && node.children.length === 0); data['open'] = node.data.projType === 'Folder';//node.children.length !== 0; zTreeData.push(data); exportNodesData(node.children); } }) }; exportNodesData(Tree._root.children); return $.fn.zTree.init(zTreeObj, setting, zTreeData); } /** * 获取指定zTree节点 * * @param {Object} zTreeObj * @return {object} */ function GetTargetTreeNode(zTreeObj) { if (!zTreeObj || !Tree) { return null; } let ztree_selected = zTreeObj.getSelectedNodes().length === 0 ? null : zTreeObj.getSelectedNodes()[0]; return ztree_selected ? Tree.findNode(ztree_selected.id) : null; } /** * 根据指定id获取对应的工程专业 * * @param {Array} engineeringList * @return {String} */ function getEngineeringHtml(engineeringList) { let result = '请选择对应的工程专业'; if (engineeringList.length <= 0) { return result; } let engineeringObject = {}; for(let tmp of engineering) { engineeringObject[tmp.value] = tmp.name; } for(let tmp of engineeringList) { if (engineeringObject[tmp.engineering] !== undefined) { result += ''+ engineeringObject[tmp.engineering] +''; } } return result; } /** * 远程获取项目属性数据 * * @param {Object} projectInfo * @return {void} */ function getProperty(projectInfo) { if (projectInfo.property === undefined) { return; } projectProperty = projectInfo.property; // 写入专业工程相关 let engineeringHtml = getEngineeringHtml(projectProperty.engineeringList); $("#tender-engineering").html(engineeringHtml); // 填入计价规则 let valuationHtml = ''+ projectProperty.valuationName +''; $("#tender-valuation").html(valuationHtml); // 选中计价方式 $("input[name='tender_valuation_type']").attr('disabled', 'disabled').removeAttr('checked', 'checked'); $("input[name='tender_valuation_type'][value='"+ projectProperty.valuationType +"']") .attr("checked", "checked").removeAttr('disabled', 'disabled'); } /** * 获取单价文件 * * @param {Number} parentID * @return {void} */ function getUnitFile(parentID, callback) { parentID = parseInt(parentID); if (isNaN(parentID) && parentID <= 0) { return; } $.ajax({ url: '/pm/api/getUnitFile', type: 'post', data: {'data': JSON.stringify({"user_id": userID, "parentID": parentID})}, dataType: 'json', error: function() { alert('数据传输错误!'); }, beforeSend: function() { }, success: function(response) { if (response.error === 1) { alert('获取失败!'); } else { if(callback){ callback(response); } } } }); } /** * 获取费率文件 * * @param {Number} parentID * @return {void} */ function getFeeRateFile(parentID, callback) { parentID = parseInt(parentID); if (isNaN(parentID) && parentID <= 0) { return; } $.ajax({ url: '/pm/api/getFeeRateFile', type: 'post', data: {'data': JSON.stringify({"user_id": userID, "parentID": parentID})}, dataType: 'json', error: function() { alert('数据传输错误!'); }, beforeSend: function() { }, success: function(response) { if (response.error === 1) { alert('获取失败!'); } else { if(callback){ callback(response); } } } }); } /** * 加载数据到侧边栏 * * @return {void} */ function setDataToSideBar() { // 获取当前点击的数据 let selectedItem = Tree.selected(); let name = selectedItem.data.name; let target = selectedItem.data.projType === projectType.project ? '#summary-project' : '#summary-engineering'; $(".side-content .p-3").hide(); $(target).show(); $(target + '-name').html(name); /*if (selectedItem.children.length <= 0) { return; }*/ if(selectedItem.children.length > 0){ // CSL, 2018-01-11 汇总单项工程、建设项目。 function calcNode(node){ if (node.data.projType == projectType.project || node.data.projType == projectType.engineering){ node.data.summaryFees = {totalFee: 0.00, estimateFee: 0.00, safetyFee: 0.00, chargeFee: 0.00}; for (let child of node.children){ calcNode(child); node.data.summaryFees.totalFee = (parseFloat(node.data.summaryFees.totalFee) + parseFloat(child.data.summaryFees.totalFee)).toFixed(2); node.data.summaryFees.estimateFee = (parseFloat(node.data.summaryFees.estimateFee) + parseFloat(child.data.summaryFees.estimateFee)).toFixed(2); node.data.summaryFees.safetyFee = (parseFloat(node.data.summaryFees.safetyFee) + parseFloat(child.data.summaryFees.safetyFee)).toFixed(2); node.data.summaryFees.chargeFee = (parseFloat(node.data.summaryFees.chargeFee) + parseFloat(child.data.summaryFees.chargeFee)).toFixed(2); }; }else{ if (!node.data.summaryFees) node.data.summaryFees = {totalFee: 0.00, estimateFee: 0.00, safetyFee: 0.00, chargeFee: 0.00} else{ node.data.summaryFees.totalFee = parseFloat(node.data.summaryFees.totalFee).toFixed(2); node.data.summaryFees.estimateFee = parseFloat(node.data.summaryFees.estimateFee).toFixed(2); node.data.summaryFees.safetyFee = parseFloat(node.data.summaryFees.safetyFee).toFixed(2); node.data.summaryFees.chargeFee = parseFloat(node.data.summaryFees.chargeFee).toFixed(2); } }; }; // 建设项目相关 let counter = 1; let html = ''; calcNode(selectedItem); for(let tmp of selectedItem.children) { html += '' + ''+ counter +'' + ''+ counter +'' + ''+ tmp.data.name +'' + ''+ tmp.data.summaryFees.totalFee + '' + ''+ tmp.data.summaryFees.estimateFee + '' + ''+ tmp.data.summaryFees.safetyFee + '' + ''+ tmp.data.summaryFees.chargeFee + '' + ''; } html += '' + ''+ (counter + 1) +'' + ' ' + '合计' + ''+ selectedItem.data.summaryFees.totalFee + '' + ''+ selectedItem.data.summaryFees.estimateFee + '' + ''+ selectedItem.data.summaryFees.safetyFee + '' + ''+ selectedItem.data.summaryFees.chargeFee + '' + ''; $(target + '-table tbody').html(html); } // 加载单价文件与费率文件 if (selectedItem.data.projType === projectType.project) { let engineeringData = selectedItem.children !== null && selectedItem.children.children !== null ? selectedItem.children : []; /*if (engineeringData.length <= 0) { return; }*/ let unitPriceFileList = []; let feeFileList = []; let poj_tenders = getProjTenders(selectedItem); getUnitFile(selectedItem.data.ID, function (response) { unitPriceFileList = unitPriceFileList.concat(response.data); $(target + '-unit-price-table tbody').empty(); set_file_table(target, poj_tenders, unitPriceFileList, fileType.unitPriceFile); }); getFeeRateFile(selectedItem.data.ID, function (response) { feeFileList = feeFileList.concat(response.data); $(target + '-fee-table tbody').empty(); set_file_table(target, poj_tenders, feeFileList, fileType.feeRateFile); }); } } //获取建设项目的全部单位工程 function getProjTenders(proj) { let rst = []; let engineerings = proj.children || null; if (engineerings) { for (let i = 0, len = engineerings.length; i < len; i++) { let e_tenders = engineerings[i].children || null; if (e_tenders && e_tenders.length > 0) { rst = rst.concat(e_tenders); } } } return rst; } //单价、费率文件汇总信息的使用次数、使用该文件的单位工程 function getUsedObj(tenders, fileId, type){ let rst = Object.create(null), usedCount = 0, usedInfo = ''; rst.usedCount = 0; rst.usedInfo = null; for(let i = 0, len = tenders.length; i < len; i++){ if(tenders[i].data.property){ let theFile = type === fileType.unitPriceFile ? tenders[i].data.property.unitPriceFile || null : tenders[i].data.property.feeFile || null; if(theFile && theFile.id == fileId){ usedCount ++; usedInfo += tenders[i].data.name + ''; } } } if(usedCount > 0){ usedInfo = usedInfo.slice(0, usedInfo.length - 4); rst.usedCount = usedCount; rst.usedInfo = usedInfo; } return rst; } //单价、费率文件汇总界面交互 function bindEvents_file_table(jqS, usedObj, targetBody, type){ //悬浮显示删除和重命名按钮 $(jqS).hover(function(){ $('p',this).show(); },function(){ $('p', this).hide(); }); //删除 if(usedObj.usedCount > 0){//不可删除 $(jqS + ' p a:eq(0)').addClass('disabled'); $(jqS + ' p a:eq(0)').removeAttr('data-target'); } else { $(jqS + ' p a:eq(0)').on('click', function () { let dispName = $(jqS + ' div:eq(0)')[0].childNodes[0].textContent; //刷新删除弹出框内容 let delData = '删除"' + dispName + '"?'; $('#del-wj .modal-body h5').text(delData); let attrId = $(jqS).attr('id'); let id = attrId.slice(5, attrId.length); if(type === fileType.unitPriceFile){ id = parseInt(id); } let obj = Object.create(null); obj.fileType = type; obj.id = id; fileDelObj = obj; }); } //重命名 $(jqS + ' p a:eq(1)').on('click', function () { let fileObjs = getFileObj(targetBody, type); let orgDispName = $(jqS + ' div:eq(0)')[0].childNodes[0].textContent; let postFix = orgDispName.slice(orgDispName.length - 4, orgDispName.length); let orgName = orgDispName.slice(0, orgDispName.length - 4); $(jqS + ' input').val(orgName); $(jqS + ' div:eq(0)').hide(); $(jqS + ' div:eq(1)').show(); //确认重命名 $(jqS + ' .btn-success').on('click', function () { let attrId = $(jqS).attr('id'); let id = attrId.slice(5, attrId.length); let newName = $(jqS + ' input').val().trim(); if(newName !== orgName){ if(hasThisFileName(fileObjs, newName)){ alert('本建设项目已存在该文件名,请重新输入!'); $(jqS + ' input').val(orgName); return; } if(newName.trim().length === 0){ alert('文件名不可为空!'); $(jqS + ' input').val(orgName); return; } //ajax let updateObj = Object.create(null); updateObj.fileType = type; updateObj.updateType = 'update'; updateObj.updateData = Object.create(null); if(type === fileType.unitPriceFile){ updateObj.updateData.id = parseInt(id); //updateObj.updateData.id = id; } else if(type === fileType.feeRateFile){ updateObj.updateData.ID = id; } updateObj.updateData.name = newName; a_updateFiles([updateObj], function () { let newDispName = newName + postFix; $(jqS + ' div:eq(0)')[0].childNodes[0].textContent = newDispName; $(jqS + ' div:eq(0)').show(); $(jqS + ' div:eq(1)').hide(); }); console.log(updateObj); } let newDispName = newName + postFix; $(jqS + ' div:eq(0)')[0].childNodes[0].textContent = newDispName; $(jqS + ' div:eq(0)').show(); $(jqS + ' div:eq(1)').hide(); }); //取消重命名 $(jqS + ' .btn-secondary').on('click', function () { $(jqS + ' div:eq(0)').show(); $(jqS + ' div:eq(1)').hide(); }); }); //悬浮框显示使用该文件的单位工程 $($(jqS)[0].nextSibling).popover({ placement:"bottom", html:true, trigger:"hover", //| focus content: usedObj.usedInfo ? usedObj.usedInfo : '' } ); } //更新单价、费率文件(删除、重命名) function a_updateFiles(updateDatas, callback){ $.ajax({ type: 'post', url: '/pm/api/updateFiles', data: {data: JSON.stringify({user_id: userID, updateDatas: updateDatas})}, dataType: 'json', success: function (result){ if(!result.error && callback){ callback(); } } }) } function set_file_table(target, poj_tenders, fileList, type){ let fileCounter = 1; for(let i = 0, len = fileList.length; i < len; i++){ let fileId = type === fileType.unitPriceFile ? fileList[i].id : fileList[i].ID; let usedObj = getUsedObj(poj_tenders, fileId, type); let usedHtml = usedObj.usedCount > 0 ? '' + usedObj.usedCount + '' : '' + usedObj.usedCount + ''; let hoverHtml = '删除重命名'; let renHtml = '' + '' + '' + '' + '' + '' + '' + '' + ''; let fileTypeStr = type === fileType.unitPriceFile ? '单价文件' : '费率文件'; let fileHtml = '' + fileCounter + '' + fileList[i].name + fileTypeStr + hoverHtml + renHtml + usedHtml + ''; fileCounter++; let targetBody = type === fileType.unitPriceFile ? target + '-unit-price-table tbody' : target + '-fee-table tbody'; $(targetBody).append(fileHtml); let jqS = '#file_' + fileId; bindEvents_file_table(jqS, usedObj, targetBody, type); } } function getFileObj(jqS, type){ let rst = []; let trs = $('tr', jqS); for(let i = 0, len = trs.length; i < len; i++){ let td = $('td:eq(1)', trs[i])[0]; let dispName = td.childNodes[0].childNodes[0].textContent; let name = dispName.slice(0, dispName.length - 4); let attrId = $(td).attr('id'); let id = attrId.slice(5, attrId.length); if(type === fileType.unitPriceFile){ id = parseInt(id); } let obj = Object.create(null); obj.id = id; obj.name = name; rst.push(obj); } return rst; //let orgDispName = $(jqS + ' div:eq(0)')[0].childNodes[0].textContent; } function hasThisFileName(fileObjs, name){ for(let i = 0, len = fileObjs.length; i < len; i++){ if(fileObjs[i].name === name){ return true; } } return false; }
删除重命名