fix: 🐛 不能在computed里修改data

This commit is contained in:
jqtmviyu 2025-04-01 12:15:39 +08:00
parent 53f887d0d6
commit c212f628c5

View File

@ -166,7 +166,10 @@ export default {
workHourStatistics: {}
},
quarterData: {},
idChildrenMap: {}
teamTreeData: {
options: [],
idChildrenMap: {}
}
};
},
computed:{
@ -190,10 +193,8 @@ export default {
// return res
return moment(this.quarterStartTime).subtract(1, 'quarters').valueOf();
},
options(){
const idChildrenMap = {};
const options = this.listToTreeData(this.teamList,{id:0},'parentTeamId',idChildrenMap);
return options;
options() {
return this.teamTreeData.options;
}
},
watch:{
@ -202,8 +203,11 @@ export default {
// this.getTeamList();
this.getTeamOverview();
},
teamList(){
this.idChildrenMap = {}
teamList: {
immediate: true,
handler(newTeamList) {
this.updateTeamTree(newTeamList);
}
}
},
created(){
@ -216,32 +220,80 @@ export default {
...mapActions({
getTeamList: 'teamResource/getTeamList',
}),
listToTreeData(list, parent, pid, map) {
const res = []
map[parent.id]=[]
parent.visible = false
if(parent.teamType===0){
parent.visible = true
map[parent.id].push({id: parent.id, teamName:parent.teamName })
}else{
list.forEach(item => {
if (item[pid] === parent.id) {
// ,
// item.id pid
const children = this.listToTreeData(list, item, pid, map)
// ,
if (children.length > 0) {
item.children = children
}
if(item.visible){
parent.visible = true
res.push(item)
map[parent.id].push({id: item.id, teamName:item.teamName })
}
/**
* 将扁平的团队列表转换为树形结构
* @param {Array} list - 原始团队列表数据
*/
updateTeamTree(list) {
//
// key: IDvalue:
const parentChildMap = {};
// key: IDvalue:
const idChildrenMap = {};
//
list.forEach(item => {
// ID0
const pid = item.parentTeamId || 0;
//
if (!parentChildMap[pid]) {
parentChildMap[pid] = [];
}
//
parentChildMap[pid].push(item);
});
/**
* 递归构建树形结构
* @param {number} parentId - 父团队ID
* @returns {Array} - 返回构建好的树形结构数组
*/
const buildTree = (parentId = 0) => {
//
const children = parentChildMap[parentId] || [];
//
idChildrenMap[parentId] = [];
// 使reduceacc
return children.reduce((acc, node) => {
// 0
if (node.teamType === 0) {
//
idChildrenMap[parentId].push({
id: node.id,
teamName: node.teamName
});
//
acc.push(node);
return acc;
}
})
}
return res
//
//
const subTree = buildTree(node.id);
//
if (subTree.length > 0) {
//
node.children = subTree;
//
acc.push(node);
//
idChildrenMap[parentId].push({
id: node.id,
teamName: node.teamName
});
}
return acc;
}, []);
};
//
// options:
// idChildrenMap:
this.teamTreeData = {
options: buildTree(),
idChildrenMap
};
},
async getQuarterStatistics(){
const { data } = await getQuarterStatistics({
@ -252,17 +304,28 @@ export default {
this.quarterData = data;
}
},
async getTeamOverview(teamId){
// const { quarterStartTime, quarterEndTime } = quarter2Timestamp(this.quarter);
// const lastQuarterStartTime = moment(quarterStartTime).subtract(1, 'quarters').valueOf();
// const aQuarterAgo = moment(quarterStartTime).subtract(1, 'quarters').valueOf();
// const { quarterStartTime:lastQuarterStartTime, quarterEndTime:lastQuarterEndTime } = quarter2Timestamp(timestamp2Quarter(aQuarterAgo));
const { data } = await getTeamOverview({ lastQuarterStartTime: this.lastQuarterStartTime, quarterStartTime: this.quarterStartTime, teamId });
if(data){
// this.teamProfiles = data;
const ids = data.map(team=>team.teamId);
const needFillChildren = this.idChildrenMap[teamId??0].filter(child=>!ids.includes(child.id));
const filledChildren = needFillChildren.map(child=>({
async getTeamOverview(teamId) {
const { data } = await getTeamOverview({
lastQuarterStartTime: this.lastQuarterStartTime,
quarterStartTime: this.quarterStartTime,
teamId
});
if(data) {
// ID使0
const currentTeamId = teamId ?? 0;
// idChildrenMap
const teamChildren = this.teamTreeData.idChildrenMap[currentTeamId] || [];
// ID
const ids = data.map(team => team.teamId);
//
const needFillChildren = teamChildren.filter(child => !ids.includes(child.id));
//
const filledChildren = needFillChildren.map(child => ({
teamType: 0,
disabled: true,
teamId: child.id,
@ -278,7 +341,12 @@ export default {
deliveredStoryCompareLast: null,
projectCurrentQuarter: []
}));
this.teamProfiles = [ ...data, ...filledChildren ];
//
this.teamProfiles = [...data, ...filledChildren];
} else {
//
this.teamProfiles = [];
}
},
async getYearStatistics(){