|
@@ -555,34 +555,54 @@ const projTreeObj = {
|
|
|
if (nodeSelections.length > 1 || nodeSelections[0].rowCount > 1) {
|
|
if (nodeSelections.length > 1 || nodeSelections[0].rowCount > 1) {
|
|
|
// 多选情况
|
|
// 多选情况
|
|
|
// a. 收集所有顶节点(即建设项目)的row序号
|
|
// a. 收集所有顶节点(即建设项目)的row序号
|
|
|
- const rootRows = [0];
|
|
|
|
|
|
|
+ const rootRows = [];
|
|
|
const prjSelections = [];
|
|
const prjSelections = [];
|
|
|
- let cnt = 0;
|
|
|
|
|
|
|
+ let prjIdx = 0;
|
|
|
|
|
+ const prjSet = [];
|
|
|
|
|
+ const chkAndSetProjectIndex = (parentNode) => {
|
|
|
|
|
+ if (parentNode.data.projType === 'Project') {
|
|
|
|
|
+ rootRows.push(prjIdx); // 记录建设项目所在的行index
|
|
|
|
|
+ prjSet.push(parentNode);
|
|
|
|
|
+ }
|
|
|
|
|
+ prjIdx++; // 注意:此计数器是必须+1,无论是不是建设项目类型
|
|
|
|
|
+ if (parentNode.children && parentNode.children.length > 0) {
|
|
|
|
|
+ for (const subNode of parentNode.children) {
|
|
|
|
|
+ chkAndSetProjectIndex(subNode);
|
|
|
|
|
+ }
|
|
|
|
|
+ }
|
|
|
|
|
+ };
|
|
|
for (let nIdx = 0; nIdx < projTreeObj.tree._root.children.length; nIdx++) {
|
|
for (let nIdx = 0; nIdx < projTreeObj.tree._root.children.length; nIdx++) {
|
|
|
const rNode = projTreeObj.tree._root.children[nIdx];
|
|
const rNode = projTreeObj.tree._root.children[nIdx];
|
|
|
- cnt += rNode.children.length + 1; // 要加上顶节点
|
|
|
|
|
- rootRows.push(cnt);
|
|
|
|
|
|
|
+ chkAndSetProjectIndex(rNode); // 考虑到有文件夹类型,得换一种方式处理
|
|
|
}
|
|
}
|
|
|
// b. 判断所选节点所属建设项目并记录
|
|
// b. 判断所选节点所属建设项目并记录
|
|
|
for (let nsIdx = 0; nsIdx < nodeSelections.length; nsIdx++) {
|
|
for (let nsIdx = 0; nsIdx < nodeSelections.length; nsIdx++) {
|
|
|
const selection = nodeSelections[nsIdx];
|
|
const selection = nodeSelections[nsIdx];
|
|
|
- for (let idx = 0; idx < rootRows.length - 1; idx++) {
|
|
|
|
|
- // 还要考虑rowCount(连续选择情况)
|
|
|
|
|
- for (let rIdx = 0; rIdx < selection.rowCount; rIdx++) {
|
|
|
|
|
- if (selection.row + rIdx === rootRows[idx]) {
|
|
|
|
|
- if (!prjSelections.includes(projTreeObj.tree._root.children[idx])) {
|
|
|
|
|
- prjSelections.push(projTreeObj.tree._root.children[idx]);
|
|
|
|
|
- }
|
|
|
|
|
- break;
|
|
|
|
|
- } else if (selection.row + rIdx > rootRows[idx] && selection.row + rIdx < rootRows[idx + 1]) {
|
|
|
|
|
- if (!prjSelections.includes(projTreeObj.tree._root.children[idx])) {
|
|
|
|
|
- prjSelections.push(projTreeObj.tree._root.children[idx]);
|
|
|
|
|
- }
|
|
|
|
|
- break;
|
|
|
|
|
|
|
+ for (let rIdx = 0; rIdx < selection.rowCount; rIdx++) {
|
|
|
|
|
+ const rowIdx = rootRows.indexOf(selection.row + rIdx);
|
|
|
|
|
+ if (rowIdx >= 0) {
|
|
|
|
|
+ if (!prjSelections.includes(prjSet[rowIdx])) {
|
|
|
|
|
+ prjSelections.push(prjSet[rowIdx]);
|
|
|
}
|
|
}
|
|
|
- //
|
|
|
|
|
}
|
|
}
|
|
|
}
|
|
}
|
|
|
|
|
+ // for (let idx = 0; idx < rootRows.length - 1; idx++) {
|
|
|
|
|
+ // // 还要考虑rowCount(连续选择情况)
|
|
|
|
|
+ // for (let rIdx = 0; rIdx < selection.rowCount; rIdx++) {
|
|
|
|
|
+ // if (selection.row + rIdx === rootRows[idx]) {
|
|
|
|
|
+ // if (!prjSelections.includes(projTreeObj.tree._root.children[idx])) {
|
|
|
|
|
+ // prjSelections.push(projTreeObj.tree._root.children[idx]);
|
|
|
|
|
+ // }
|
|
|
|
|
+ // break;
|
|
|
|
|
+ // } else if (selection.row + rIdx > rootRows[idx] && selection.row + rIdx < rootRows[idx + 1]) {
|
|
|
|
|
+ // if (!prjSelections.includes(projTreeObj.tree._root.children[idx])) {
|
|
|
|
|
+ // prjSelections.push(projTreeObj.tree._root.children[idx]);
|
|
|
|
|
+ // }
|
|
|
|
|
+ // break;
|
|
|
|
|
+ // }
|
|
|
|
|
+ // //
|
|
|
|
|
+ // }
|
|
|
|
|
+ // }
|
|
|
}
|
|
}
|
|
|
// 间歇(2秒)并发导出
|
|
// 间歇(2秒)并发导出
|
|
|
const allSelectCnt = prjSelections.length;
|
|
const allSelectCnt = prjSelections.length;
|
|
@@ -591,7 +611,7 @@ const projTreeObj = {
|
|
|
setTimeout(function () {
|
|
setTimeout(function () {
|
|
|
const pSelection = prjSelections[curIdx];
|
|
const pSelection = prjSelections[curIdx];
|
|
|
curIdx++;
|
|
curIdx++;
|
|
|
- projTreeObj.exportProject(pSelection.data.ID, pSelection.data.name);
|
|
|
|
|
|
|
+ projTreeObj.exportProject(pSelection.data.ID, pSelection.data.name, curIdx !== 1);
|
|
|
if (curIdx < allSelectCnt) {
|
|
if (curIdx < allSelectCnt) {
|
|
|
exportPrjFunc(2000);
|
|
exportPrjFunc(2000);
|
|
|
}
|
|
}
|
|
@@ -2286,8 +2306,8 @@ const projTreeObj = {
|
|
|
//在一次的修改中,同一个建设下,单价文件、费率文件才有共用的情况,而refreshProjectData是传入单位工程ID,刷新整个建设项目,所以,只要传入修改的单位工程ID,刷新建设项目即可
|
|
//在一次的修改中,同一个建设下,单价文件、费率文件才有共用的情况,而refreshProjectData是传入单位工程ID,刷新整个建设项目,所以,只要传入修改的单位工程ID,刷新建设项目即可
|
|
|
this.refreshProjectData(projectID);
|
|
this.refreshProjectData(projectID);
|
|
|
},
|
|
},
|
|
|
- exportProject: async function (projectID, projectName) {
|
|
|
|
|
- $.bootstrapLoading.progressStart();
|
|
|
|
|
|
|
+ exportProject: async function (projectID, projectName, disableProgress = false) {
|
|
|
|
|
+ if (!disableProgress) $.bootstrapLoading.progressStart();
|
|
|
let spString = "|----|";
|
|
let spString = "|----|";
|
|
|
try {
|
|
try {
|
|
|
let sumString = "";
|
|
let sumString = "";
|
|
@@ -2325,7 +2345,7 @@ const projTreeObj = {
|
|
|
console.log(e);
|
|
console.log(e);
|
|
|
} finally {
|
|
} finally {
|
|
|
await setTimeoutSync(null, 500); //设置间隔
|
|
await setTimeoutSync(null, 500); //设置间隔
|
|
|
- $.bootstrapLoading.progressEnd();
|
|
|
|
|
|
|
+ if (!disableProgress) $.bootstrapLoading.progressEnd();
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
async function getProjectInfo(data) {
|
|
async function getProjectInfo(data) {
|