56 lines
1.3 KiB
JavaScript
56 lines
1.3 KiB
JavaScript
/**
|
|
* 动作基类
|
|
*/
|
|
class BaseAction {
|
|
constructor(context, config) {
|
|
this.context = context;
|
|
this.config = config;
|
|
this.page = context.page;
|
|
this.logger = context.logger;
|
|
}
|
|
|
|
/**
|
|
* 执行动作(子类必须实现)
|
|
*/
|
|
async execute() {
|
|
throw new Error('子类必须实现 execute 方法');
|
|
}
|
|
|
|
/**
|
|
* 替换配置中的变量
|
|
* @param {string} value - 包含变量的字符串 (如 "{{account.email}}")
|
|
* @returns {string} - 替换后的值
|
|
*/
|
|
replaceVariables(value) {
|
|
if (typeof value !== 'string') return value;
|
|
|
|
return value.replace(/\{\{(.+?)\}\}/g, (match, path) => {
|
|
const keys = path.trim().split('.');
|
|
let result = this.context.data;
|
|
|
|
for (const key of keys) {
|
|
if (result && typeof result === 'object') {
|
|
result = result[key];
|
|
} else {
|
|
return match; // 无法解析,返回原始值
|
|
}
|
|
}
|
|
|
|
return result !== undefined ? result : match;
|
|
});
|
|
}
|
|
|
|
/**
|
|
* 记录日志
|
|
*/
|
|
log(level, message) {
|
|
if (this.logger && this.logger[level]) {
|
|
this.logger[level](this.context.siteName || 'Automation', message);
|
|
} else {
|
|
console.log(`[${level.toUpperCase()}] ${message}`);
|
|
}
|
|
}
|
|
}
|
|
|
|
module.exports = BaseAction;
|