|
- const Base = require('../../base');
-
- module.exports = class extends Base {
- async indexAction() {
- this.assign('currentPage', 'sys-sms');
- this.assign('pageTitle', '短信记录');
- this.assign('breadcrumb', [
- { name: '系统管理', url: '/admin/system/user.html' },
- { name: '短信记录' }
- ]);
- return this.display();
- }
-
- async listAction() {
- const keyword = this.get('keyword') || '';
- const status = this.get('status');
- const bizType = this.get('bizType') || '';
- const startDate = this.get('startDate') || '';
- const endDate = this.get('endDate') || '';
- const page = this.get('page') || 1;
- const pageSize = this.get('pageSize') || 20;
-
- const model = this.model('sms_log');
- const where = {};
-
- if (keyword) {
- where.mobile = ['like', `%${keyword}%`];
- }
- if (status !== '' && status !== undefined) {
- where.status = parseInt(status);
- }
- if (bizType) {
- where.biz_type = bizType;
- }
- if (startDate && endDate) {
- where.create_time = ['between', [startDate + ' 00:00:00', endDate + ' 23:59:59']];
- } else if (startDate) {
- where.create_time = ['>=', startDate + ' 00:00:00'];
- } else if (endDate) {
- where.create_time = ['<=', endDate + ' 23:59:59'];
- }
-
- const list = await model.where(where)
- .order('id DESC')
- .page(page, pageSize)
- .countSelect();
-
- // 验证码脱敏:6位验证码中间4位替换为****
- const codeBizTypes = ['real_name_auth', 'login', 'change_phone'];
- if (list.data && list.data.length) {
- list.data.forEach(item => {
- if (item.code && codeBizTypes.includes(item.biz_type)) {
- item.code = item.code.slice(0, 1) + '****' + item.code.slice(-1);
- }
- });
- }
-
- return this.json({ code: 0, data: list });
- }
-
- // 清除短信发送限制(手机号或IP)
- async clearLimitAction() {
- const { type, value } = this.post();
- if (!type || !value) return this.fail('参数错误');
-
- const dayjs = require('dayjs');
- const today = dayjs().format('YYYY-MM-DD');
- let cleared = [];
-
- if (type === 'phone') {
- // 清除手机号相关的所有限制
- const bizTypes = ['real_name_auth', 'change_phone', 'login'];
- for (const biz of bizTypes) {
- await think.cache(`sms:rate_limit:${value}:${biz}`, null);
- await think.cache(`sms:daily:${value}:${today}`, null);
- await think.cache(`sms:code:${value}:${biz}`, null);
- }
- cleared = ['频率限制', '每日上限', '验证码缓存'];
- } else if (type === 'ip') {
- await think.cache(`sms:ip_hour:${value}`, null);
- await think.cache(`sms:ip_day:${value}:${today}`, null);
- cleared = ['IP小时限制', 'IP每日限制'];
- } else {
- return this.fail('类型错误');
- }
-
- await this.log('edit', '系统管理', `清除短信限制: ${type === 'phone' ? '手机号' : 'IP'} ${value} (${cleared.join('、')})`);
- return this.success();
- }
- };
|