feat: approval, carbon copy unique record (#1349)
Reviewed-on: daoyoucloud/tachybase#1349 Co-authored-by: bai.zixv <bai.zixv@foxmail.com> Co-committed-by: bai.zixv <bai.zixv@foxmail.com>
This commit is contained in:
parent
bb82ade8cf
commit
e9912a00d8
@ -3,6 +3,7 @@ import { Op } from '@tachybase/database';
|
|||||||
|
|
||||||
import { COLLECTION_WORKFLOWS_NAME } from '../../common/constants';
|
import { COLLECTION_WORKFLOWS_NAME } from '../../common/constants';
|
||||||
import { APPROVAL_STATUS } from '../constants';
|
import { APPROVAL_STATUS } from '../constants';
|
||||||
|
import { findUniqueObjects } from '../utils';
|
||||||
|
|
||||||
export const approvalCarbonCopy = {
|
export const approvalCarbonCopy = {
|
||||||
async listCentralized(context, next) {
|
async listCentralized(context, next) {
|
||||||
@ -26,11 +27,14 @@ export const approvalCarbonCopy = {
|
|||||||
|
|
||||||
await actions.list(context, next);
|
await actions.list(context, next);
|
||||||
|
|
||||||
// context.body = actions.list(context, next);
|
// NOTE: 进一步筛选, 筛选出同个用户下相同的approvalid, 只保留最新的一份.
|
||||||
|
if (context.body.rows) {
|
||||||
// context.body
|
context.body.rows = findUniqueObjects(
|
||||||
// actions.list(context, next);
|
context.body.rows,
|
||||||
// return
|
['userId', 'approvalId'],
|
||||||
// context.body = userJob;
|
'createdAt',
|
||||||
|
(a: string, b: string) => new Date(a).getTime() - new Date(b).getTime(),
|
||||||
|
);
|
||||||
|
}
|
||||||
},
|
},
|
||||||
};
|
};
|
||||||
|
@ -18,3 +18,28 @@ export async function jsonParse(expression, scope): Promise<any[]> {
|
|||||||
return [result];
|
return [result];
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// 根据一系列唯一性字段, 去重对象数组
|
||||||
|
// result = [{id:1,name,2,weight:10, time:1}]
|
||||||
|
// 用法示例: findUniquifyObjects(result, ['name', 'weight'], 'time', (a, b) => a - b);
|
||||||
|
export function findUniqueObjects(
|
||||||
|
sourceArray = [],
|
||||||
|
uniqueByArray: string[],
|
||||||
|
compareByKey = '',
|
||||||
|
compareByFunc = (a, b) => a - b,
|
||||||
|
): any[] {
|
||||||
|
const uniqueMap = {};
|
||||||
|
let result = [];
|
||||||
|
sourceArray.forEach((obj) => {
|
||||||
|
const uniqueKey = uniqueByArray.map((field) => obj[field]).join('|');
|
||||||
|
const existingObj = uniqueMap[uniqueKey];
|
||||||
|
|
||||||
|
if (!existingObj || compareByFunc(obj[compareByKey], existingObj[compareByKey]) > 0) {
|
||||||
|
uniqueMap[uniqueKey] = obj;
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
result = [...Object.values(uniqueMap)];
|
||||||
|
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user