|
|
@@ -109,7 +109,7 @@
|
|
|
<body>
|
|
|
<div class="container">
|
|
|
<h1>智价云(药店版) - 活动模块API验收测试工具</h1>
|
|
|
- <h2>覆盖签到有礼 + 邀请有礼 + 签到送会员 + 比价抽奖 用户端 & 运营端 全量API | 独立登录管理 | 开发环境验证码固定 123456</h2>
|
|
|
+ <h2>覆盖签到有礼(周期制) + 邀请有礼 + 比价抽奖 用户端 & 运营端 全量API | 独立登录管理 | 开发环境验证码固定 123456</h2>
|
|
|
|
|
|
<!-- 用户侧/运营侧 切换器 -->
|
|
|
<div class="side-switcher">
|
|
|
@@ -464,16 +464,27 @@ const FIELD_DESC = {
|
|
|
],
|
|
|
'checkinStatus': [
|
|
|
['data.checkedToday', 'Boolean', '今日是否已签到'],
|
|
|
- ['data.continuousDays', 'Integer', '当前连续签到天数(今日未签到时为若签到将达成的天数-1)'],
|
|
|
- ['data.todayReward', 'Integer', '今日签到可获会员天数'],
|
|
|
- ['data.nextCheckinDate', 'Date', '下一次可签到日期(今日未签到=今天)'],
|
|
|
- ['data.enabled', 'Boolean', '签到功能是否启用']
|
|
|
+ ['data.continuousDays', 'Integer', '当前连续签到天数'],
|
|
|
+ ['data.nextCheckinDate', 'Date', '下一次可签到日期'],
|
|
|
+ ['data.enabled', 'Boolean', '签到功能是否启用'],
|
|
|
+ ['data.currentPeriodId', 'Long', '当前周期ID(无周期时为null)'],
|
|
|
+ ['data.cycleMode', 'String', '周期模式(FRI_THU/MON_SUN)'],
|
|
|
+ ['data.periodStartDate', 'Date', '当前周期起始日'],
|
|
|
+ ['data.periodEndDate', 'Date', '当前周期截止日'],
|
|
|
+ ['data.periodRequiredDays', 'Integer', '周期需签到天数'],
|
|
|
+ ['data.rewardMode', 'String', '达标模式:CUMULATIVE-累计/CONSECUTIVE-连续'],
|
|
|
+ ['data.periodCheckinCount', 'Integer', '当前周期已签到天数'],
|
|
|
+ ['data.periodReachedTarget', 'Boolean', '当前周期是否已达标'],
|
|
|
+ ['data.periodRewardDays', 'Integer', '达标可获会员天数'],
|
|
|
+ ['data.rewardedCount', 'Long', '累计已领取奖励次数'],
|
|
|
+ ['data.maxRewardCount', 'Integer', '活动期间最多可领取次数'],
|
|
|
+ ['data.remainingCount', 'Long', '剩余可领取次数']
|
|
|
],
|
|
|
'checkinResult': [
|
|
|
['data.id', 'Long', '签到记录ID'],
|
|
|
['data.checkinDate', 'Date', '签到日期'],
|
|
|
['data.continuousDays', 'Integer', '签到时连续天数'],
|
|
|
- ['data.rewardAmount', 'Integer', '本次奖励会员天数'],
|
|
|
+ ['data.rewardAmount', 'Integer', '本次奖励(统一0,周期达标后才发奖)'],
|
|
|
['data.rewardType', 'String', '奖励类型(MEMBERSHIP)'],
|
|
|
['data.createTime', 'DateTime', '签到时间']
|
|
|
],
|
|
|
@@ -487,15 +498,32 @@ const FIELD_DESC = {
|
|
|
'checkinConfig': [
|
|
|
['data.id', 'Long', '配置ID(固定1)'],
|
|
|
['data.enabled', 'Integer', '是否启用:0-停用 1-启用'],
|
|
|
+ ['data.startTime', 'DateTime', '活动开始时间'],
|
|
|
+ ['data.endTime', 'DateTime', '活动结束时间'],
|
|
|
['data.rewardType', 'String', '奖励类型(MEMBERSHIP-会员天数)'],
|
|
|
- ['data.baseReward', 'Integer', '基础会员天数(每日)'],
|
|
|
- ['data.continuousReward', 'Integer', '连续签到额外会员天数'],
|
|
|
- ['data.continuousThreshold', 'Integer', '连续额外触发阈值(天)'],
|
|
|
- ['data.continuousCap', 'Integer', '连续额外累计上限(天)'],
|
|
|
+ ['data.rewardLevel', 'String', '奖励会员等级(PRO/ULTRA)'],
|
|
|
+ ['data.cycleMode', 'String', '周期模式默认值(FRI_THU/MON_SUN)'],
|
|
|
+ ['data.requiredDays', 'Integer', '周期需签到天数默认值'],
|
|
|
+ ['data.rewardMode', 'String', '达标模式默认值:CUMULATIVE-累计/CONSECUTIVE-连续'],
|
|
|
+ ['data.rewardDays', 'Integer', '周期达标奖励天数默认值'],
|
|
|
+ ['data.maxRewardCount', 'Integer', '活动期间每用户最多领取次数'],
|
|
|
['data.remark', 'String', '备注'],
|
|
|
['data.createTime', 'DateTime', '创建时间'],
|
|
|
['data.updateTime', 'DateTime', '更新时间']
|
|
|
],
|
|
|
+ 'checkinPeriod': [
|
|
|
+ ['data[].id', 'Long', '周期ID'],
|
|
|
+ ['data[].periodName', 'String', '周期名称'],
|
|
|
+ ['data[].cycleMode', 'String', '周期模式(FRI_THU/MON_SUN)'],
|
|
|
+ ['data[].startDate', 'Date', '周期起始日'],
|
|
|
+ ['data[].endDate', 'Date', '周期截止日'],
|
|
|
+ ['data[].requiredDays', 'Integer', '需签到天数'],
|
|
|
+ ['data[].rewardMode', 'String', '达标模式:CUMULATIVE/CONSECUTIVE'],
|
|
|
+ ['data[].rewardDays', 'Integer', '奖励会员天数'],
|
|
|
+ ['data[].rewardLevel', 'String', '奖励会员等级'],
|
|
|
+ ['data[].status', 'String', 'PENDING-待开始/ACTIVE-进行中/CLOSED-已结束'],
|
|
|
+ ['data[].sort', 'Integer', '排序']
|
|
|
+ ],
|
|
|
'checkinStats': [
|
|
|
['data.todayCheckinCount', 'Long', '今日签到人数'],
|
|
|
['data.yesterdayCheckinCount', 'Long', '昨日签到人数'],
|
|
|
@@ -748,9 +776,9 @@ function renderCheckinModule() {
|
|
|
<div class="batch-buttons">
|
|
|
<button class="btn btn-warning btn-sm" onclick="runCheckinTests()">运行全部签到测试</button>
|
|
|
</div>
|
|
|
- ${testSection('checkin-status', '今日签到状态', 'GET', 'get', '/api/checkin/status', '需认证', 'auth-required', null, true, 'checkinStatus', '获取当前用户今日签到状态、连续天数、可获会员天数')}
|
|
|
+ ${testSection('checkin-status', '今日签到状态+周期进度', 'GET', 'get', '/api/checkin/status', '需认证', 'auth-required', null, true, 'checkinStatus', '获取当前用户今日签到状态、连续天数、当前周期信息(起止日/需签到天数/达标模式/已签到天数/是否达标/可获奖励)、累计领取统计')}
|
|
|
${testSection('checkin-do', '执行签到', 'POST', 'post', '/api/checkin', '需认证', 'auth-required',
|
|
|
- [{label:'签到端(clientSource,可选)', name:'clientSource', placeholder:'WINDOWS/ANDROID/MINIAPP', default:'WINDOWS'}], true, 'checkinResult', '执行当日签到,发放高级会员天数奖励。每个自然日仅可签到一次')}
|
|
|
+ [{label:'签到端(clientSource,可选)', name:'clientSource', placeholder:'WINDOWS/ANDROID/MINIAPP', default:'WINDOWS'}], true, 'checkinResult', '执行当日签到(仅记录,不立即发奖)。自动关联当前进行中周期,签到后触发上一周期达标奖励检查。每个自然日仅可签到一次')}
|
|
|
${testSection('checkin-calendar', '当月签到日历', 'GET', 'get', '/api/checkin/calendar?year=2026&month=7', '需认证', 'auth-required',
|
|
|
[{label:'年份(year,可选)', name:'year', placeholder:'2026', default:'2026'},
|
|
|
{label:'月份(month,可选)', name:'month', placeholder:'7', default:'7'}], true, 'checkinCalendar', '获取指定月份的签到日历,不传默认当月')}
|
|
|
@@ -767,13 +795,13 @@ function renderActivityInviteModule() {
|
|
|
${testSection('activity-invite-status', '邀请有礼活动状态', 'GET', 'get', '/api/activity/invite/status', '需认证', 'auth-required', null, true, 'activityInviteStatus', '查询当前邀请有礼活动状态:是否开启、奖励模式、已获/剩余次数')}`;
|
|
|
}
|
|
|
|
|
|
-// ==================== 用户端:签到送会员模块 ====================
|
|
|
+// ==================== 用户端:签到送会员模块(旧版独立接口,周期信息已整合到签到状态接口) ====================
|
|
|
function renderActivityCheckinModule() {
|
|
|
return `
|
|
|
<div class="batch-buttons">
|
|
|
<button class="btn btn-warning btn-sm" onclick="runActivityCheckinTests()">运行全部签到送会员测试</button>
|
|
|
</div>
|
|
|
- ${testSection('activity-checkin-status', '签到送会员周期状态', 'GET', 'get', '/api/activity/checkin-cycle/status', '需认证', 'auth-required', null, true, 'activityCheckinStatus', '查询当前周期签到进度、是否达标、累计领取次数')}`;
|
|
|
+ ${testSection('activity-checkin-status', '签到送会员周期状态(旧版)', 'GET', 'get', '/api/activity/checkin-cycle/status', '需认证', 'auth-required', null, true, 'activityCheckinStatus', '【旧版】查询当前周期签到进度。新版签到状态已整合周期信息到 /api/checkin/status')}`;
|
|
|
}
|
|
|
|
|
|
// ==================== 用户端:比价抽奖模块 ====================
|
|
|
@@ -795,16 +823,48 @@ function renderAdminCheckinModule() {
|
|
|
<div class="batch-buttons">
|
|
|
<button class="btn btn-warning btn-sm" onclick="runAdminCheckinTests()">运行全部签到管理测试</button>
|
|
|
</div>
|
|
|
- ${testSection('admin-checkin-config', '签到配置查询', 'GET', 'get', '/api/admin/checkin/config', '需认证', 'auth-required', null, true, 'checkinConfig', '获取当前签到配置(全局唯一)')}
|
|
|
- ${testSection('admin-checkin-config-update', '更新签到配置', 'PUT', 'put', '/api/admin/checkin/config', '需认证', 'auth-required',
|
|
|
+ ${testSection('admin-checkin-config', '签到全局配置查询', 'GET', 'get', '/api/admin/checkin/config', '需认证', 'auth-required', null, true, 'checkinConfig', '获取签到全局配置:活动时间窗、周期默认值、奖励规则')}
|
|
|
+ ${testSection('admin-checkin-config-update', '更新签到全局配置', 'PUT', 'put', '/api/admin/checkin/config', '需认证', 'auth-required',
|
|
|
[
|
|
|
{label:'启用(enabled)', name:'enabled', placeholder:'0停用/1启用', default:'1'},
|
|
|
- {label:'基础会员天数(baseReward)', name:'baseReward', placeholder:'1', default:'1'},
|
|
|
- {label:'连续额外天数(continuousReward)', name:'continuousReward', placeholder:'1', default:'1'},
|
|
|
- {label:'连续阈值(continuousThreshold)', name:'continuousThreshold', placeholder:'7', default:'7'},
|
|
|
- {label:'连续额外上限(continuousCap)', name:'continuousCap', placeholder:'30', default:'30'},
|
|
|
- {label:'备注(remark)', name:'remark', placeholder:'默认签到配置', default:'默认签到配置:每日1天高级会员,连续7天起每日额外+1天'}
|
|
|
- ], true, 'checkinConfig', '更新签到规则配置。连续签到满阈值后每日额外发放 continuousReward 天,累计不超过 continuousCap 天')}
|
|
|
+ {label:'开始时间(startTime)', name:'startTime', placeholder:'2026-07-10 00:00:00', default:'2026-07-10 00:00:00'},
|
|
|
+ {label:'结束时间(endTime)', name:'endTime', placeholder:'2026-07-31 23:59:59', default:'2026-07-31 23:59:59'},
|
|
|
+ {label:'会员等级(rewardLevel)', name:'rewardLevel', placeholder:'PRO/ULTRA', default:'PRO'},
|
|
|
+ {label:'周期模式(cycleMode)', name:'cycleMode', placeholder:'FRI_THU/MON_SUN', default:'FRI_THU'},
|
|
|
+ {label:'需签到天数(requiredDays)', name:'requiredDays', placeholder:'4', default:'4'},
|
|
|
+ {label:'达标模式(rewardMode)', name:'rewardMode', placeholder:'CUMULATIVE/CONSECUTIVE', default:'CUMULATIVE'},
|
|
|
+ {label:'奖励天数(rewardDays)', name:'rewardDays', placeholder:'7', default:'7'},
|
|
|
+ {label:'最多领取次数(maxRewardCount)', name:'maxRewardCount', placeholder:'3', default:'3'},
|
|
|
+ {label:'备注(remark)', name:'remark', placeholder:'签到送会员', default:'签到送会员:每周期累计签到达标后发放奖励'}
|
|
|
+ ], true, 'checkinConfig', '更新签到全局配置。rewardMode: CUMULATIVE-周期内累计签到N天 / CONSECUTIVE-周期内连续签到N天')}
|
|
|
+ ${testSection('admin-checkin-periods', '周期列表', 'GET', 'get', '/api/admin/checkin/periods', '需认证', 'auth-required', null, true, 'checkinPeriod', '获取所有签到周期,每个周期可独立配置起止日期、需签到天数、达标模式、奖励')}
|
|
|
+ ${testSection('admin-checkin-period-create', '创建周期', 'POST', 'post', '/api/admin/checkin/periods', '需认证', 'auth-required',
|
|
|
+ [
|
|
|
+ {label:'周期名称(periodName)', name:'periodName', placeholder:'第N周', default:'测试周期'},
|
|
|
+ {label:'周期模式(cycleMode)', name:'cycleMode', placeholder:'FRI_THU', default:'FRI_THU'},
|
|
|
+ {label:'起始日(startDate)', name:'startDate', placeholder:'2026-07-10', default:'2026-07-10'},
|
|
|
+ {label:'截止日(endDate)', name:'endDate', placeholder:'2026-07-16', default:'2026-07-16'},
|
|
|
+ {label:'需签到天数(requiredDays)', name:'requiredDays', placeholder:'4', default:'4'},
|
|
|
+ {label:'达标模式(rewardMode)', name:'rewardMode', placeholder:'CUMULATIVE/CONSECUTIVE', default:'CUMULATIVE'},
|
|
|
+ {label:'奖励天数(rewardDays)', name:'rewardDays', placeholder:'7', default:'7'},
|
|
|
+ {label:'奖励等级(rewardLevel)', name:'rewardLevel', placeholder:'PRO', default:'PRO'},
|
|
|
+ {label:'排序(sort)', name:'sort', placeholder:'0', default:'99'}
|
|
|
+ ], true, 'checkinPeriod', '创建一个签到周期。rewardMode: CUMULATIVE累计/CONSECUTIVE连续')}
|
|
|
+ ${testSection('admin-checkin-period-update', '更新周期', 'PUT', 'put', '/api/admin/checkin/periods/{id}', '需认证', 'auth-required',
|
|
|
+ [
|
|
|
+ {label:'周期ID(id)', name:'id', placeholder:'1', default:''},
|
|
|
+ {label:'周期名称(periodName)', name:'periodName', placeholder:'第N周', default:''},
|
|
|
+ {label:'周期模式(cycleMode)', name:'cycleMode', placeholder:'FRI_THU', default:''},
|
|
|
+ {label:'起始日(startDate)', name:'startDate', placeholder:'2026-07-10', default:''},
|
|
|
+ {label:'截止日(endDate)', name:'endDate', placeholder:'2026-07-16', default:''},
|
|
|
+ {label:'需签到天数(requiredDays)', name:'requiredDays', placeholder:'4', default:''},
|
|
|
+ {label:'达标模式(rewardMode)', name:'rewardMode', placeholder:'CUMULATIVE/CONSECUTIVE', default:''},
|
|
|
+ {label:'奖励天数(rewardDays)', name:'rewardDays', placeholder:'7', default:''},
|
|
|
+ {label:'奖励等级(rewardLevel)', name:'rewardLevel', placeholder:'PRO', default:''},
|
|
|
+ {label:'排序(sort)', name:'sort', placeholder:'0', default:''}
|
|
|
+ ], true, 'checkinPeriod', '更新签到周期配置')}
|
|
|
+ ${testSection('admin-checkin-period-delete', '删除周期', 'DELETE', 'delete', '/api/admin/checkin/periods/{id}', '需认证', 'auth-required',
|
|
|
+ [{label:'周期ID(id)', name:'id', placeholder:'需删除的周期ID', default:''}], true, null, '删除指定签到周期')}
|
|
|
${testSection('admin-checkin-stats', '签到统计概览', 'GET', 'get', '/api/admin/checkin/stats', '需认证', 'auth-required', null, true, 'checkinStats', '签到数据统计:今日/昨日/近7天/近30天签到人数、累计签到次数与用户数、累计发放奖励')}
|
|
|
${testSection('admin-checkin-records', '签到记录分页查询', 'GET', 'get', '/api/admin/checkin/records?page=1&size=10&userId=1&startDate=2026-07-01&endDate=2026-07-07&clientSource=WINDOWS', '需认证', 'auth-required',
|
|
|
[{label:'页码(page)', name:'page', placeholder:'1', default:'1'},
|
|
|
@@ -843,14 +903,14 @@ function renderAdminActivityInviteModule() {
|
|
|
], true, 'adminActivityInviteRevoke', '反作弊:根据被邀请人ID撤销其对应的邀请奖励,标记为已撤销状态')}`;
|
|
|
}
|
|
|
|
|
|
-// ==================== 运营端:签到送会员管理模块 ====================
|
|
|
+// ==================== 运营端:签到送会员管理模块(旧版独立配置,已被签到全局配置+周期表替代,保留兼容) ====================
|
|
|
function renderAdminActivityCheckinModule() {
|
|
|
return `
|
|
|
<div class="batch-buttons">
|
|
|
<button class="btn btn-warning btn-sm" onclick="runAdminActivityCheckinTests()">运行全部签到送会员管理测试</button>
|
|
|
</div>
|
|
|
- ${testSection('admin-activity-checkin-config', '签到送会员配置查询', 'GET', 'get', '/api/admin/activity/checkin-cycle/config', '需认证', 'auth-required', null, true, 'adminActivityCheckinConfig', '获取当前签到送会员活动配置:周期模式、需签到天数、奖励天数、最多领取次数')}
|
|
|
- ${testSection('admin-activity-checkin-config-update', '更新签到送会员配置', 'PUT', 'put', '/api/admin/activity/checkin-cycle/config', '需认证', 'auth-required',
|
|
|
+ ${testSection('admin-activity-checkin-config', '签到送会员旧版配置查询', 'GET', 'get', '/api/admin/activity/checkin-cycle/config', '需认证', 'auth-required', null, true, 'adminActivityCheckinConfig', '【旧版】获取签到送会员活动独立配置。新版签到体系使用 /api/admin/checkin/config + 周期表管理')}
|
|
|
+ ${testSection('admin-activity-checkin-config-update', '更新签到送会员旧版配置', 'PUT', 'put', '/api/admin/activity/checkin-cycle/config', '需认证', 'auth-required',
|
|
|
[
|
|
|
{label:'启用(enabled)', name:'enabled', placeholder:'0停用/1启用', default:'1'},
|
|
|
{label:'开始时间(startTime)', name:'startTime', placeholder:'2026-07-10 00:00:00', default:'2026-07-10 00:00:00'},
|
|
|
@@ -860,7 +920,7 @@ function renderAdminActivityCheckinModule() {
|
|
|
{label:'奖励天数(rewardDays)', name:'rewardDays', placeholder:'7', default:'7'},
|
|
|
{label:'最多领取次数(maxRewardCount)', name:'maxRewardCount', placeholder:'3', default:'3'},
|
|
|
{label:'备注(remark)', name:'remark', placeholder:'签到送会员', default:'每周五至下周四为一周期,累计4天签到得7天高级会员,最多3次'}
|
|
|
- ], true, 'adminActivityCheckinConfig', '更新签到送会员活动规则。周期结束后第一天自动发放奖励')}`;
|
|
|
+ ], true, 'adminActivityCheckinConfig', '【旧版】更新签到送会员活动独立配置。新版请使用签到管理面板的全局配置+周期表')}`;
|
|
|
}
|
|
|
|
|
|
// ==================== 运营端:比价抽奖管理模块 ====================
|
|
|
@@ -1021,6 +1081,10 @@ function validate_checkinCalendar(result) { return result.data?.code === 200 &&
|
|
|
function validate_checkinRecords(result) { return result.data?.code === 200 && Array.isArray(result.data?.data); }
|
|
|
function validate_adminCheckinConfig(result) { return result.data?.code === 200 && result.data?.data?.id; }
|
|
|
function validate_adminCheckinConfigUpdate(result) { return result.data?.code === 200 && result.data?.data?.id; }
|
|
|
+function validate_adminCheckinPeriods(result) { return result.data?.code === 200 && Array.isArray(result.data?.data); }
|
|
|
+function validate_adminCheckinPeriodCreate(result) { return result.data?.code === 200 && result.data?.data?.id; }
|
|
|
+function validate_adminCheckinPeriodUpdate(result) { return result.data?.code === 200 && result.data?.data?.id; }
|
|
|
+function validate_adminCheckinPeriodDelete(result) { return result.data?.code === 200; }
|
|
|
function validate_adminCheckinStats(result) { return result.data?.code === 200 && result.data?.data?.todayCheckinCount !== undefined; }
|
|
|
function validate_adminCheckinRecords(result) { return result.data?.code === 200 && result.data?.data?.records !== undefined; }
|
|
|
function validate_adminCheckinUserRecords(result) { return result.data?.code === 200 && Array.isArray(result.data?.data); }
|
|
|
@@ -1035,6 +1099,9 @@ function validate_adminActivityInviteRevoke(result) { return result.data?.code =
|
|
|
function validate_adminActivityCheckinConfig(result) { return result.data?.code === 200 && result.data?.data?.id; }
|
|
|
function validate_adminActivityLotteryConfig(result) { return result.data?.code === 200 && result.data?.data?.id; }
|
|
|
function validate_adminActivityLotteryPrize(result) { return result.data?.code === 200 && result.data?.data?.id; }
|
|
|
+function validate_adminActivityLotteryPrizeCreate(result) { return result.data?.code === 200 && result.data?.data?.id; }
|
|
|
+function validate_adminActivityLotteryPrizeUpdate(result) { return result.data?.code === 200 && result.data?.data?.id; }
|
|
|
+function validate_adminActivityLotteryPrizeDelete(result) { return result.data?.code === 200; }
|
|
|
|
|
|
// ===================== 初始化 =====================
|
|
|
window.addEventListener('DOMContentLoaded', () => {
|