|
@@ -537,12 +537,6 @@ function isOptionNode(node) {
|
|
|
return list;
|
|
|
}
|
|
|
|
|
|
- //获取定额数据
|
|
|
- // requireRationData必套定额对象
|
|
|
- // optionalRationData 选逃定额对象
|
|
|
- // classGroups classCode文字和id键值对
|
|
|
- // classCodeList 各个classCode的pID和ID的关系
|
|
|
- // prefixID为上一个必填项的选项ID
|
|
|
function getItemData(nodes, requireRationData={}, optionalRationData={}, classGroups={}, prefixID = '', prefixSonID = '',IDData={}) {
|
|
|
const processNodes = nodes.filter(node => isProcessNode(node));
|
|
|
// const classGroups = []; // 同层必填选项的数组(二维数组)
|
|
@@ -584,7 +578,7 @@ function isOptionNode(node) {
|
|
|
if (!requireRationData[subOptionNode.parent.data.ID]) requireRationData[subOptionNode.parent.data.ID] = [];
|
|
|
requireRationData[subOptionNode.parent.data.ID].push(getOptionalData(subOptionNode));
|
|
|
} else {
|
|
|
- if (!optionalRationData[subOptionNode.parent.data.ID]) optionalRationData[subOptionNode.data.ID] = [];
|
|
|
+ if (!optionalRationData[subOptionNode.parent.data.ID]) optionalRationData[subOptionNode.parent.data.ID] = [];
|
|
|
optionalRationData[subOptionNode.parent.data.ID].push(...getOptionalData(subOptionNode));
|
|
|
}
|
|
|
})
|
|
@@ -741,11 +735,13 @@ function getOptionalRationIDs(optionalRationData) {
|
|
|
}
|
|
|
|
|
|
//把classcode和必套选套定额结合在一起
|
|
|
-function combineData(codeData,requireRationData,classGroups,IDData){
|
|
|
+function combineData(codeData,requireRationData,optionalRationData,classGroups,IDData){
|
|
|
//这里需要把绑定在子节点的定额更新到必填的白色选项中(classcode的值)
|
|
|
const requireCombineData={};
|
|
|
+ const optionCombineData={};
|
|
|
Object.keys(IDData).forEach(key=>{
|
|
|
if(!requireCombineData[IDData[key]])requireCombineData[IDData[key]]=new Set();
|
|
|
+ if(!optionCombineData[IDData[key]])optionCombineData[IDData[key]]=new Set();
|
|
|
if(requireRationData[key]){
|
|
|
requireRationData[key].forEach(subData=>{
|
|
|
subData.forEach(subItem=>{
|
|
@@ -753,6 +749,13 @@ function combineData(codeData,requireRationData,classGroups,IDData){
|
|
|
})
|
|
|
})
|
|
|
}
|
|
|
+ if(optionalRationData[key]){
|
|
|
+ optionalRationData[key].forEach(subData=>{
|
|
|
+ optionCombineData[IDData[key]].add(subData);
|
|
|
+
|
|
|
+ })
|
|
|
+ }
|
|
|
+
|
|
|
})
|
|
|
|
|
|
return codeData.map(classCodeData=>{
|
|
@@ -768,18 +771,31 @@ function combineData(codeData,requireRationData,classGroups,IDData){
|
|
|
}else{
|
|
|
name=classGroups[classCodeID]
|
|
|
};
|
|
|
+ // 一组的必套定额,先去重
|
|
|
const unitRation=[];
|
|
|
requireRationData[classCodeID].forEach(subItem=>{
|
|
|
unitRation.push(...new Set(subItem));
|
|
|
})
|
|
|
+ // 这里是必填选项下绑定必套定额
|
|
|
if(requireRationData[classCodeID]&&requireRationData[classCodeID].length) {
|
|
|
requiredRationIDs.push(unitRation);
|
|
|
}
|
|
|
+ //这里是必填选项下绑定在蓝色节点下的必套定额
|
|
|
if(requireCombineData[classCodeID]&&requireCombineData[classCodeID].size){
|
|
|
requiredRationIDs.push([...requireCombineData[classCodeID]]);
|
|
|
}
|
|
|
+
|
|
|
+ // 这里是必填选项下绑定选套定额
|
|
|
+ if(optionalRationData[classCodeID]&&optionalRationData[classCodeID].length) {
|
|
|
+ optionalRationIDs.push(...optionalRationData[classCodeID]);
|
|
|
+ }
|
|
|
+ //这里是必填选项下绑定在蓝色节点下的选套定额,下同
|
|
|
+ if(optionCombineData[classCodeID]&&optionCombineData[classCodeID].size){
|
|
|
+ optionalRationIDs.push(...requireCombineData[classCodeID]);
|
|
|
+ }
|
|
|
+
|
|
|
})
|
|
|
- return {name,requiredRationIDs,optionalRationIDs,errorRationIDs}
|
|
|
+ return {name,requiredRationIDs,optionalRationIDs:[...new Set(optionalRationIDs)],errorRationIDs}
|
|
|
}else{
|
|
|
const unitRation=[];
|
|
|
requireRationData[classCodeIDs].forEach(subItem=>{
|
|
@@ -788,7 +804,15 @@ function combineData(codeData,requireRationData,classGroups,IDData){
|
|
|
name=classGroups[classCodeIDs];
|
|
|
if(requireRationData[classCodeIDs]&&requireRationData[classCodeIDs].length) requiredRationIDs.push(unitRation);
|
|
|
if(requireCombineData[classCodeIDs]&&requireCombineData[classCodeIDs].size) requiredRationIDs.push([...requireCombineData[classCodeIDs]]);
|
|
|
- return {name,requiredRationIDs,optionalRationIDs,errorRationIDs}
|
|
|
+
|
|
|
+ if(optionalRationData[classCodeIDs]&&optionalRationData[classCodeIDs].length) {
|
|
|
+ optionalRationIDs.push(...optionalRationData[classCodeIDs]);
|
|
|
+ }
|
|
|
+ if(optionCombineData[classCodeIDs]&&optionCombineData[classCodeIDs].size){
|
|
|
+ optionalRationIDs.push(...requireCombineData[classCodeIDs]);
|
|
|
+ }
|
|
|
+
|
|
|
+ return {name,requiredRationIDs,optionalRationIDs:[...new Set(optionalRationIDs)],errorRationIDs}
|
|
|
}
|
|
|
})
|
|
|
}
|
|
@@ -825,16 +849,15 @@ async function generateClassData(libID) {
|
|
|
//console.log('getItemClassData start',billNode.data.name,billNode.data.code,billNode.data.ID);
|
|
|
const classCodeData = getItemClassData(guidanceTree.roots); // 必套定额在这个方法内就获取了,避免重复执行递归方法
|
|
|
const {requireRationData,optionalRationData,classGroups,IDData} = getItemData(guidanceTree.roots);
|
|
|
- const itemClassData= combineData(classCodeData,requireRationData,classGroups,IDData);
|
|
|
- //因为所有的选套都是一样的,所以这里就直接赋值了
|
|
|
- const optionalRationIDs = getOptionalRationIDs(optionalRationData);
|
|
|
+ const itemClassData= combineData(classCodeData,requireRationData,optionalRationData,classGroups,IDData);
|
|
|
+
|
|
|
const allRationIDs = guidanceTree.items.filter(node => !!node.data.rationID).map(node => node.data.rationID);
|
|
|
// 选套定额ID
|
|
|
- // const optionalRationIDs = getOptionalRationIDs(itemClassData, allRationIDs);
|
|
|
+ const optionalRationIDs = getOptionalRationIDs(itemClassData, allRationIDs);
|
|
|
//if(itemClassData.length > 1000) console.log('getItemClassData end',billNode.data.name,billNode.data.code,billNode.data.ID,itemClassData.length)
|
|
|
itemClassData.forEach(item => {
|
|
|
// 错套定额
|
|
|
- const errorRationIDs = getErrorRationIDs(item.requiredRationIDs, optionalRationIDs, allRationIDs);
|
|
|
+ const errorRationIDs = getErrorRationIDs(item.requiredRationIDs, item.optionalRationIDs, allRationIDs);
|
|
|
if(billNode.data.ID == '1d32fa34-0a9b-11ea-a33d-5388f9783b09') console.log(item.name)
|
|
|
billClassData.push({
|
|
|
itemCharacter: item.name,
|
|
@@ -844,16 +867,18 @@ async function generateClassData(libID) {
|
|
|
name: billNode.data.name,
|
|
|
code: billNode.data.code,
|
|
|
requiredRationIDs: item.requiredRationIDs || [],
|
|
|
- optionalRationIDs:optionalRationIDs || [],
|
|
|
+ optionalRationIDs:item.optionalRationIDs || [],
|
|
|
errorRationIDs,
|
|
|
});
|
|
|
});
|
|
|
//新增无必填时的情况
|
|
|
if(itemClassData.length===0){
|
|
|
// console.log({requireRationData,optionalRationData,classGroups,IDData});
|
|
|
- Object.values(requireRationData).forEach((dataList)=>{
|
|
|
- dataList.forEach(data=>{
|
|
|
- optionalRationIDs.push(...data);
|
|
|
+ // console.log('===+++++++++==');
|
|
|
+ // console.log(optionalRationIDs);
|
|
|
+ Object.keys(requireRationData).forEach((key)=>{
|
|
|
+ requireRationData[key].forEach(data=>{
|
|
|
+ if(data.length) optionalRationIDs.push(...data);
|
|
|
})
|
|
|
})
|
|
|
const errorRationIDs = getErrorRationIDs([], optionalRationIDs, allRationIDs);
|