92 lines
2.2 KiB
JavaScript
92 lines
2.2 KiB
JavaScript
|
const presetCondition = {
|
|||
|
// 预设条件:全部
|
|||
|
all: {},
|
|||
|
// 预设条件:7天未登录用户
|
|||
|
'7-day-offline-users': () => ({
|
|||
|
last_login_date: {
|
|||
|
type: 'lt',
|
|||
|
value: Date.now() - (7 * 24 * 60 * 60 * 1000)
|
|||
|
}
|
|||
|
}),
|
|||
|
// 预设条件:15天未登录用户
|
|||
|
'15-day-offline-users': () => ({
|
|||
|
last_login_date: {
|
|||
|
type: 'lt',
|
|||
|
value: Date.now() - (15 * 24 * 60 * 60 * 1000)
|
|||
|
}
|
|||
|
}),
|
|||
|
// 预设条件:30天未登录用户
|
|||
|
'30-day-offline-users': () => ({
|
|||
|
last_login_date: {
|
|||
|
type: 'lt',
|
|||
|
value: Date.now() - (30 * 24 * 60 * 60 * 1000)
|
|||
|
}
|
|||
|
})
|
|||
|
};
|
|||
|
|
|||
|
function conditionConvert(condition, command) {
|
|||
|
const newCondition = {};
|
|||
|
|
|||
|
for (const key in condition) {
|
|||
|
const field = condition[key];
|
|||
|
|
|||
|
switch (field.type) {
|
|||
|
case 'search':
|
|||
|
// 搜索条件
|
|||
|
newCondition[key] = new RegExp(field.value);
|
|||
|
break;
|
|||
|
case 'select':
|
|||
|
// 选择条件
|
|||
|
if (field.value.length) {
|
|||
|
newCondition[key] = command.or(
|
|||
|
field.value.map(value => command.eq(value))
|
|||
|
);
|
|||
|
}
|
|||
|
break;
|
|||
|
case 'range':
|
|||
|
// 范围条件
|
|||
|
if (field.value.length) {
|
|||
|
const [gt, lt] = field.value;
|
|||
|
newCondition[key] = command.and([
|
|||
|
command.gte(gt),
|
|||
|
command.lte(lt)
|
|||
|
]);
|
|||
|
}
|
|||
|
break;
|
|||
|
case 'date':
|
|||
|
// 日期条件
|
|||
|
if (field.value.length) {
|
|||
|
const [startTimestamp, endTimestamp] = field.value;
|
|||
|
const startDate = new Date(startTimestamp);
|
|||
|
const endDate = new Date(endTimestamp);
|
|||
|
|
|||
|
newCondition[key] = command.and([
|
|||
|
command.gte(startDate),
|
|||
|
command.lte(endDate)
|
|||
|
]);
|
|||
|
}
|
|||
|
break;
|
|||
|
case 'timestamp':
|
|||
|
// 时间戳条件
|
|||
|
if (field.value.length) {
|
|||
|
const [startDate, endDate] = field.value;
|
|||
|
|
|||
|
newCondition[key] = command.and([
|
|||
|
command.gte(startDate),
|
|||
|
command.lte(endDate)
|
|||
|
]);
|
|||
|
}
|
|||
|
break;
|
|||
|
case 'lt':
|
|||
|
// 小于条件
|
|||
|
newCondition[key] = command.lt(field.value);
|
|||
|
break;
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
return newCondition;
|
|||
|
}
|
|||
|
|
|||
|
module.exports.presetCondition = presetCondition;
|
|||
|
module.exports.conditionConvert = conditionConvert;
|