/** * 项目管理相关js * * @author CaiAoLin * @date 2017/8/22 * @version */ let Tree = null; let movetoZTree = null; let copytoZTree = null; let projectType = { folder: 'Folder', tender: 'Tender', project: 'Project', engineering: 'Engineering' }; let ProjTreeSetting = { tree: { id: 'ID', pid: 'ParentID', nid: 'NextSiblingID', btnColumn: 1, nullId: -1 }, columns: [ { head: '', data: '', width: '40', event: {} }, { head: '工程列表', data: 'name', width: '78%', event: { getText: function (html, node, text) { let className = ''; 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"; break; case projectType.engineering: className = "fa fa-cube"; break; } let icon = ''; html.push((node && node.data && node.data.projType === projectType.folder) ? ' ' : ''); html.push('', icon, ' ', text, ''); }, getIcon: function (html, node) { // html.push(''); // if (node.data.projType === 'Tender') { // html.push(''); // } }, tdBindEvent: function (td, node) { if (node.data.projType === projectType.tender) { $('a:eq(1)', td).bind('click', function () { BeforeOpenProject(node.id(), {'fullFolder': GetFullFolder(node.parent)}, function () { window.location.href = '/main?project=' + node.id(); }); return false; }); } } } }, { 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) { // 新建文件夹 是否可见 if (node.data.projType === projectType.tender) { $('#addFolderBtn').hide(); } else { $('#addFolderBtn').show(); } // 重命名可见 $('#renameBtn').show(); // 删除可见 $('#delBtn').show(); // 移动到、复制到、共享、协同 是否可见 if (node.data.projType === projectType.tender) { $('#movetoBtn').show(); $('#copytoBtn').show(); $('#shareBtn').show(); $('#cooperateBtn').show(); } else { $('#movetoBtn').hide(); $('#copytoBtn').hide(); $('#shareBtn').hide(); $('#cooperateBtn').hide(); } $('td:eq(0)', node.row).append($('')); } } }; $(document).ready(function() { init(); // 新增建设项目点击 $('#addProjBtn').click(function () { if (Tree) { $('#add-add-project-dialog').modal('show'); } }); // 新增建设项目操作 $('#addProjOk').click(function () { AddProject(); }); // 新增单项项目点击 $("#add-engineering-btn").click(function() { let selectedItem = Tree.selected(); try { if (selectedItem === null) { throw '请选择要添加到的项目工程'; } let selectedType = selectedItem.data !== undefined ? selectedItem.data.projType : ''; if (selectedType !== projectType.project) { throw '单项项目只能添加到建设项目中'; } $("#add-engineering-dialog").modal("show"); } catch (error) { alert(error); } }); // 新增单项工程操作 $("#add-engineering-confirm").click(function() { AddEngineering(); }); // 新增单位工程点击 $("#add-tender-btn").click(function() { let selectedItem = Tree.selected(); try { if (selectedItem === null) { throw '请选择要添加到的单项工程'; } let selectedType = selectedItem.data !== undefined ? selectedItem.data.projType : ''; if (selectedType !== projectType.engineering) { throw '单项项目只能添加到单项工程中'; } $("#add-tender-dialog").modal("show"); } catch (error) { alert(error); } }); // 新增单位工程 $("#add-tender-confirm").click(function() { AddTender(); }); }); /** * 初始化数据 * * @return {void} */ function init() { let table = $('#ProjTree'); $('thead', table).remove(); $('tbody', table).remove(); GetAllProjectData(function (data) { Tree = $.fn.treeTable.init(table, ProjTreeSetting, data); }); } /** * 新增建设项目 * * @return {boolean} */ function AddProject() { let name = $('#project-name').val(); if (name === '') { alert('请填写工程'); return false; } GetNewProjectId(function(IDs) { let typeInfo = { updateType: 'new', projectType: projectType.project }; let updateData = GetUpdateData(Tree._root, Tree.firstNode(), name, IDs.lowID, typeInfo); Tree.maxNodeId(IDs.lowID - 1); UpdateProjectData(updateData, function (datas) { datas.forEach(function (data) { let parent = null; let next = null; if (data.updateType === 'new') { parent = data.updateData.parentId === -1 ? Tree._root : Tree.findNode(data.updateData.parentId); next = data.updateData.nextId === -1 ? null : Tree.findNode(data.updateData.nextId); Tree.addNodeData(data.updateData, parent, next); } }); $('#add-project-dialog').modal('hide'); }); }); } /** * 新增同级元素 * * @param {String} name * @param {String} type * @param {function} callback * @return {void} */ function AddSiblingsItem(name, type, callback) { let parent = Tree.selected(); let next = Tree.selected().firstChild(); GetNewProjectId(function(IDs) { let typeInfo = { updateType: 'new', projectType: type }; let updateData = GetUpdateData(parent, next, name, 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); } }); callback(); }); }); } /** * 新增单项工程 * * @return {boolean} */ function AddEngineering() { let name = $('#engineering-name').val(); if (name === '') { alert('请填写单项工程名称'); return false; } AddSiblingsItem(name, projectType.engineering, function() { $("#add-engineering-dialog").modal("hide"); }); } /** * 新增单位工程 * * @return {boolean} */ function AddTender() { let name = $('#tender-name').val(); if (name === '') { alert('请填写单位工程名称'); return false; } AddSiblingsItem(name, projectType.tender, function() { $("#add-tender-dialog").modal("hide"); }); } /** * 组织更新数据 * * @param {Object} parent * @param {Object} next * @param {String} name * @param {Object} type * @return {Object} */ function GetUpdateData(parent, next, name, newId, type) { let data = []; let updateData = {}; updateData['updateType'] = type.updateType === undefined ? 'new' : type.updateType; updateData['updateData'] = {}; 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; updateData['updateData']['name'] = name; updateData['updateData']['projType'] = type.projectType !== undefined ? type.projectType : 'Tender'; data.push(updateData); return data; } /** * 获取需要更新的前节点 * * @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(callback) { CommonAjax.post('/pm/api/getNewProjectID', {count: 1}, function(data) { callback(data); }); }