mirror of
https://github.com/ZZZure/ZZZ-Plugin.git
synced 2025-12-16 13:17:32 +00:00
feat: 月报(菲林统计)
This commit is contained in:
parent
90f7957559
commit
c4d6d8a988
20 changed files with 768 additions and 28 deletions
158
model/monthly.js
Normal file
158
model/monthly.js
Normal file
|
|
@ -0,0 +1,158 @@
|
|||
/**
|
||||
* @typedef {'PolychromesData'|'MatserTapeData'|'BooponsData'} DataType
|
||||
*/
|
||||
|
||||
/**
|
||||
* @typedef {'daily_activity_rewards'|'growth_rewards'|'event_rewards'|'hollow_rewards'|'shiyu_rewards'|'mail_rewards'|'other_rewards'} IncomeAction
|
||||
*/
|
||||
|
||||
/**
|
||||
* @typedef {Object} ListData
|
||||
* @property {DataType} data_type
|
||||
* @property {number} count
|
||||
* @property {string} data_name
|
||||
*/
|
||||
|
||||
/**
|
||||
* @typedef {Object} IncomeComponents
|
||||
* @property {IncomeAction} action
|
||||
* @property {number} num
|
||||
* @property {number} percent
|
||||
*/
|
||||
|
||||
/**
|
||||
* @typedef {Object} MonthData
|
||||
* @property {ListData[]} list
|
||||
* @property {IncomeComponents[]} income_components
|
||||
*/
|
||||
|
||||
/**
|
||||
* @typedef {Object} Monthly
|
||||
* @property {string} uid
|
||||
* @property {string} region
|
||||
* @property {string} current_month
|
||||
* @property {string} data_month
|
||||
* @property {MonthData} month_data
|
||||
* @property {string[]} optional_month
|
||||
*/
|
||||
|
||||
/**
|
||||
* @class ListData
|
||||
*/
|
||||
class ListData {
|
||||
/** @type {DataType} */
|
||||
data_type;
|
||||
/** @type {number} */
|
||||
count;
|
||||
/** @type {string} */
|
||||
data_name;
|
||||
|
||||
constructor(data) {
|
||||
this.data_type = data.data_type;
|
||||
this.count = data.count;
|
||||
this.data_name = data.data_name;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* @class IncomeComponents
|
||||
*/
|
||||
class IncomeComponents {
|
||||
/** @type {IncomeAction} */
|
||||
action;
|
||||
/** @type {number} */
|
||||
num;
|
||||
/** @type {number} */
|
||||
percent;
|
||||
|
||||
constructor(data) {
|
||||
this.action = data.action;
|
||||
this.num = data.num;
|
||||
this.percent = data.percent;
|
||||
}
|
||||
|
||||
/** @type {string} */
|
||||
get name() {
|
||||
switch (this.action) {
|
||||
case 'daily_activity_rewards':
|
||||
return '日常活跃奖励';
|
||||
case 'growth_rewards':
|
||||
return '成长奖励';
|
||||
case 'event_rewards':
|
||||
return '活动奖励';
|
||||
case 'hollow_rewards':
|
||||
return '零号空洞奖励';
|
||||
case 'shiyu_rewards':
|
||||
return '式舆防卫战奖励';
|
||||
case 'mail_rewards':
|
||||
return '邮件奖励';
|
||||
case 'other_rewards':
|
||||
return '其他奖励';
|
||||
default:
|
||||
return '未知奖励';
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* @class MonthData
|
||||
*/
|
||||
class MonthData {
|
||||
/** @type {ListData[]} */
|
||||
list;
|
||||
/** @type {IncomeComponents[]} */
|
||||
income_components;
|
||||
|
||||
constructor(data) {
|
||||
this.list = data.list.map(item => new ListData(item));
|
||||
this.income_components = data.income_components.map(
|
||||
item => new IncomeComponents(item)
|
||||
);
|
||||
}
|
||||
|
||||
/** @type {{poly: number, tape: number, boopon: number}} */
|
||||
get overview() {
|
||||
return {
|
||||
poly:
|
||||
this.list.find(item => item.data_type === 'PolychromesData')?.count ||
|
||||
0,
|
||||
tape:
|
||||
this.list.find(item => item.data_type === 'MatserTapeData')?.count || 0,
|
||||
boopon:
|
||||
this.list.find(item => item.data_type === 'BooponsData')?.count || 0,
|
||||
};
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* @class Monthly
|
||||
*
|
||||
*/
|
||||
export class Monthly {
|
||||
/** @type {string} */
|
||||
uid;
|
||||
/** @type {string} */
|
||||
region;
|
||||
/** @type {string} */
|
||||
current_month;
|
||||
/** @type {string} */
|
||||
data_month;
|
||||
/** @type {MonthData} */
|
||||
month_data;
|
||||
/** @type {string[]} */
|
||||
optional_month;
|
||||
|
||||
constructor(data) {
|
||||
this.uid = data.uid;
|
||||
this.region = data.region;
|
||||
this.current_month = data.current_month;
|
||||
this.data_month = data.data_month;
|
||||
this.month_data = new MonthData(data.month_data);
|
||||
this.optional_month = data.optional_month;
|
||||
}
|
||||
|
||||
get query_month() {
|
||||
const month = +this.data_month.slice(-2);
|
||||
return `${month}月`;
|
||||
}
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue