|
@@ -234,7 +234,7 @@
|
|
|
<div class="module-tab" data-module="crawler">2.爬虫配额</div>
|
|
<div class="module-tab" data-module="crawler">2.爬虫配额</div>
|
|
|
<div class="module-tab" data-module="invite">3.邀请系统</div>
|
|
<div class="module-tab" data-module="invite">3.邀请系统</div>
|
|
|
<div class="module-tab" data-module="coupon">4.优惠券</div>
|
|
<div class="module-tab" data-module="coupon">4.优惠券</div>
|
|
|
- <div class="module-tab" data-module="membership">5.会员体系</div>
|
|
|
|
|
|
|
+ <div class="module-tab" data-module="membership">5.会员等级</div>
|
|
|
<div class="module-tab" data-module="payment">6.支付模块</div>
|
|
<div class="module-tab" data-module="payment">6.支付模块</div>
|
|
|
<div class="module-tab" data-module="upload">7.文件上传</div>
|
|
<div class="module-tab" data-module="upload">7.文件上传</div>
|
|
|
<div class="module-tab" data-module="search">8.搜索查询</div>
|
|
<div class="module-tab" data-module="search">8.搜索查询</div>
|
|
@@ -625,6 +625,8 @@ function renderModule(module) {
|
|
|
case 'coupon': html = renderCouponModule(); break;
|
|
case 'coupon': html = renderCouponModule(); break;
|
|
|
case 'membership': html = renderMembershipModule(); break;
|
|
case 'membership': html = renderMembershipModule(); break;
|
|
|
case 'payment': html = renderPaymentModule(); break;
|
|
case 'payment': html = renderPaymentModule(); break;
|
|
|
|
|
+ case 'watchlist': html = renderWatchlistModule(); break;
|
|
|
|
|
+ case 'trial-quota': html = renderTrialQuotaModule(); break;
|
|
|
case 'upload': html = renderUploadModule(); break;
|
|
case 'upload': html = renderUploadModule(); break;
|
|
|
case 'search': html = renderSearchModule(); break;
|
|
case 'search': html = renderSearchModule(); break;
|
|
|
case 'platform-account': html = renderPlatformAccountModule(); break;
|
|
case 'platform-account': html = renderPlatformAccountModule(); break;
|
|
@@ -729,11 +731,14 @@ const FIELD_DESC = {
|
|
|
['levelInfo.pricingPlans[].originalPrice', 'BigDecimal', '原价(元,如19.90)'],
|
|
['levelInfo.pricingPlans[].originalPrice', 'BigDecimal', '原价(元,如19.90)'],
|
|
|
['levelInfo.pricingPlans[].durationDays', 'Integer', '会员有效天数(30/365)'],
|
|
['levelInfo.pricingPlans[].durationDays', 'Integer', '会员有效天数(30/365)'],
|
|
|
['levelInfo.pricingPlans[].description', 'String', '方案描述'],
|
|
['levelInfo.pricingPlans[].description', 'String', '方案描述'],
|
|
|
- ['membershipLevel', 'String', '会员等级(PLUS/PRO/ULTRA,可能为null)'],
|
|
|
|
|
- ['membershipLevelName', 'String', '会员等级中文名(普通会员/高级会员/超级会员)'],
|
|
|
|
|
|
|
+ ['membershipLevel', 'String', '会员等级(PLUS/PRO/ULTRA)'],
|
|
|
|
|
+ ['membershipLevelName', 'String', '会员等级中文名'],
|
|
|
|
|
+ ['inviterId', 'Long', '邀请人ID(null=未被邀请)'],
|
|
|
|
|
+ ['inviterNickname', 'String', '邀请人昵称(null=未被邀请)'],
|
|
|
|
|
+ ['hasBoundInviteCode', 'Boolean', '是否已绑定邀请码'],
|
|
|
['createTime', 'DateTime', '注册时间'],
|
|
['createTime', 'DateTime', '注册时间'],
|
|
|
- ['loginSource', 'String', '登录来源(SMS/PASSWORD/WECHAT,可能为null)'],
|
|
|
|
|
- ['levelCode', 'String', '等级编码(冗余字段,来自levelInfo,如:PLUS)']
|
|
|
|
|
|
|
+ ['loginSource', 'String', '登录来源(SMS/PASSWORD/WECHAT)'],
|
|
|
|
|
+ ['levelCode', 'String', '等级编码(来自levelInfo)']
|
|
|
],
|
|
],
|
|
|
'crawlerStatus': [
|
|
'crawlerStatus': [
|
|
|
['levelName', 'String', '等级名称(如:普通用户)'],
|
|
['levelName', 'String', '等级名称(如:普通用户)'],
|
|
@@ -803,7 +808,9 @@ const FIELD_DESC = {
|
|
|
['summaryText', 'String', '摘要文本'],
|
|
['summaryText', 'String', '摘要文本'],
|
|
|
['todayInvited', 'Integer', '今日已邀请人数'],
|
|
['todayInvited', 'Integer', '今日已邀请人数'],
|
|
|
['todayRemaining', 'Integer', '今日剩余可邀次数'],
|
|
['todayRemaining', 'Integer', '今日剩余可邀次数'],
|
|
|
- ['rewardPerInvite', 'Integer', '每次邀请奖励会员月数']
|
|
|
|
|
|
|
+ ['rewardPerInvite', 'Integer', '每次邀请奖励会员月数'],
|
|
|
|
|
+ ['crawlerTodayRemaining', 'Integer', '今日爬虫剩余配额(与爬虫状态页一致)'],
|
|
|
|
|
+ ['crawlerQuotaFromInvites', 'Integer', '邀请贡献的额外爬虫配额']
|
|
|
],
|
|
],
|
|
|
'inviteReward': [
|
|
'inviteReward': [
|
|
|
['inviterId', 'Long', '邀请人ID'],
|
|
['inviterId', 'Long', '邀请人ID'],
|
|
@@ -981,9 +988,20 @@ const FIELD_DESC = {
|
|
|
['wechatRedirectUrl', 'String', '微信跳转URL'],
|
|
['wechatRedirectUrl', 'String', '微信跳转URL'],
|
|
|
['dingtalkAppId', 'String', '钉钉AppID'],
|
|
['dingtalkAppId', 'String', '钉钉AppID'],
|
|
|
['feishuAppId', 'String', '飞书AppID'],
|
|
['feishuAppId', 'String', '飞书AppID'],
|
|
|
- ['landingTitle', 'String', '落地页标题'],
|
|
|
|
|
|
|
+ ['landingTitle', 'String', '落地页标题(支持{inviter}{pharmacy}占位符)'],
|
|
|
['landingDesc', 'String', '落地页描述'],
|
|
['landingDesc', 'String', '落地页描述'],
|
|
|
['appName', 'String', '应用名称'],
|
|
['appName', 'String', '应用名称'],
|
|
|
|
|
+ ['shareTitleTemplate', 'String', '分享标题模板(支持{inviter}{appName})'],
|
|
|
|
|
+ ['copyTextTemplate', 'String', '一键复制文案模板(支持{inviter}{appName}{inviteLink}{code})'],
|
|
|
|
|
+ ['rewardDescription', 'String', '奖励说明文案(支持{rewardMonths})'],
|
|
|
|
|
+ ['summaryTextTemplate', 'String', '统计摘要模板(支持{totalInvited}{registeredCount}{totalReward})'],
|
|
|
|
|
+ ['instructionWindows', 'String', 'Windows渠道提示文案(支持{code})'],
|
|
|
|
|
+ ['instructionApp', 'String', 'App渠道提示文案(支持{code})'],
|
|
|
|
|
+ ['instructionMiniapp', 'String', '小程序渠道提示文案(支持{code})'],
|
|
|
|
|
+ ['instructionWechat', 'String', '微信渠道提示文案(支持{code})'],
|
|
|
|
|
+ ['instructionDingtalk', 'String', '钉钉渠道提示文案(支持{code}{appName})'],
|
|
|
|
|
+ ['instructionFeishu', 'String', '飞书渠道提示文案(支持{code}{appName})'],
|
|
|
|
|
+ ['instructionDefault', 'String', '默认渠道提示文案(支持{code})'],
|
|
|
['status', 'String', '状态(ACTIVE/INACTIVE)'],
|
|
['status', 'String', '状态(ACTIVE/INACTIVE)'],
|
|
|
['remark', 'String', '备注'],
|
|
['remark', 'String', '备注'],
|
|
|
['createTime', 'DateTime', '创建时间'],
|
|
['createTime', 'DateTime', '创建时间'],
|
|
@@ -1119,7 +1137,7 @@ function renderFieldDesc(descKey) {
|
|
|
function testSection(id, title, method, methodClass, path, authTag, authClass, fields, hasValidator, descKey, desc) {
|
|
function testSection(id, title, method, methodClass, path, authTag, authClass, fields, hasValidator, descKey, desc) {
|
|
|
const authLabel = authTag === '需认证' ? '需认证' : '公开';
|
|
const authLabel = authTag === '需认证' ? '需认证' : '公开';
|
|
|
const ac = authTag === '需认证' ? 'auth-required' : 'auth-public';
|
|
const ac = authTag === '需认证' ? 'auth-required' : 'auth-public';
|
|
|
- const side = (path.includes('/api/admin') || path === '/api/coupon/issue' || path.includes('/api/level/user/')) ? 'admin' : 'user';
|
|
|
|
|
|
|
+ const side = (path.includes('/api/admin') || path === '/api/coupon/issue') ? 'admin' : 'user';
|
|
|
const sideClass = side === 'admin' ? 'side-admin' : 'side-user';
|
|
const sideClass = side === 'admin' ? 'side-admin' : 'side-user';
|
|
|
const sideLabel = side === 'admin' ? '运营侧' : '用户侧';
|
|
const sideLabel = side === 'admin' ? '运营侧' : '用户侧';
|
|
|
let fieldsHtml = '';
|
|
let fieldsHtml = '';
|
|
@@ -1267,6 +1285,7 @@ function renderInviteModule() {
|
|
|
${testSection('invite-stats', '邀请统计', 'GET', 'get', '/api/invite/stats', '需认证', 'auth-required', null, true, 'inviteStats', '获取邀请人数、注册人数、累计奖励等统计')}
|
|
${testSection('invite-stats', '邀请统计', 'GET', 'get', '/api/invite/stats', '需认证', 'auth-required', null, true, 'inviteStats', '获取邀请人数、注册人数、累计奖励等统计')}
|
|
|
${testSection('invite-rewards', '邀请记录', 'GET', 'get', '/api/invite/rewards', '需认证', 'auth-required', null, true, 'inviteReward', '获取邀请记录列表,含被邀请人注册状态')}
|
|
${testSection('invite-rewards', '邀请记录', 'GET', 'get', '/api/invite/rewards', '需认证', 'auth-required', null, true, 'inviteReward', '获取邀请记录列表,含被邀请人注册状态')}
|
|
|
${testSection('invite-extra-quota', '额外配额', 'GET', 'get', '/api/invite/extra-quota', '需认证', 'auth-required', null, false, null, '获取可用额外爬虫次数(邀请奖励+运营发放),返回Integer数值')}
|
|
${testSection('invite-extra-quota', '额外配额', 'GET', 'get', '/api/invite/extra-quota', '需认证', 'auth-required', null, false, null, '获取可用额外爬虫次数(邀请奖励+运营发放),返回Integer数值')}
|
|
|
|
|
+ ${testSection('invite-my-inviter', '我的邀请人', 'GET', 'get', '/api/invite/my-inviter', '需认证', 'auth-required', null, true, 'myInviter', '查询是谁邀请了我(被邀请人视角),未被邀请返回invited=false')}
|
|
|
${testSection('invite-bind', '补填邀请码', 'POST', 'post', '/api/invite/bind', '需认证', 'auth-required',
|
|
${testSection('invite-bind', '补填邀请码', 'POST', 'post', '/api/invite/bind', '需认证', 'auth-required',
|
|
|
[{label:'邀请码/链接(inviteCode)', name:'inviteCode', placeholder:'A3K7M9P2 或 https://app.zhijiayun.com/invite/A3K7M9P2', default:''}], true, null, '注册时未填邀请码,注册后30天内可补填。补填后邀请人获赠1个月高级会员时长')}
|
|
[{label:'邀请码/链接(inviteCode)', name:'inviteCode', placeholder:'A3K7M9P2 或 https://app.zhijiayun.com/invite/A3K7M9P2', default:''}], true, null, '注册时未填邀请码,注册后30天内可补填。补填后邀请人获赠1个月高级会员时长')}
|
|
|
${testSection('invite-page', '落地页', 'GET', 'get', '/api/invite/page/{code}?channel=windows', '公开', 'auth-public',
|
|
${testSection('invite-page', '落地页', 'GET', 'get', '/api/invite/page/{code}?channel=windows', '公开', 'auth-public',
|
|
@@ -1292,11 +1311,37 @@ function renderCouponModule() {
|
|
|
function renderMembershipModule() {
|
|
function renderMembershipModule() {
|
|
|
return `
|
|
return `
|
|
|
<div class="batch-buttons">
|
|
<div class="batch-buttons">
|
|
|
- <button class="btn btn-warning btn-sm" onclick="runMembershipTests()">运行全部会员体系测试</button>
|
|
|
|
|
|
|
+ <button class="btn btn-warning btn-sm" onclick="runMembershipTests()">运行全部会员等级测试</button>
|
|
|
</div>
|
|
</div>
|
|
|
- ${testSection('membership-my', '我的会员', 'GET', 'get', '/api/membership/my', '需认证', 'auth-required', null, true, 'membership', '获取当前登录用户的会员等级与有效期')}
|
|
|
|
|
|
|
+ ${testSection('membership-my', '我的会员', 'GET', 'get', '/api/membership/my', '需认证', 'auth-required', null, true, 'membership', '获取当前登录用户的会员等级、有效期与配额信息')}
|
|
|
${testSection('membership-benefits', '会员权益', 'GET', 'get', '/api/membership/benefits?level=PLUS', '需认证', 'auth-required',
|
|
${testSection('membership-benefits', '会员权益', 'GET', 'get', '/api/membership/benefits?level=PLUS', '需认证', 'auth-required',
|
|
|
- [{label:'等级(level)', name:'level', placeholder:'PLUS/PRO/ULTRA', default:'PLUS'}], true, 'membershipBenefit', '查询指定会员等级的权益列表')}`;
|
|
|
|
|
|
|
+ [{label:'等级(level)', name:'level', placeholder:'PLUS/PRO/ULTRA', default:'PLUS'}], true, 'membershipBenefit', '查询指定会员等级的权益列表')}
|
|
|
|
|
+ ${testSection('membership-levels', '等级列表(公开)', 'GET', 'get', '/api/membership/levels', '公开', 'auth-public', null, true, 'levelResponse', '获取所有会员等级列表(PLUS/PRO/ULTRA),含定价方案pricingPlans')}
|
|
|
|
|
+ ${testSection('membership-level-detail', '等级详情(公开)', 'GET', 'get', '/api/membership/levels/{id}', '公开', 'auth-public',
|
|
|
|
|
+ [{label:'等级ID(id)', name:'id', placeholder:'1', default:'1'}], true, 'levelResponse', '获取指定等级详情,含定价方案与配额')}`;
|
|
|
|
|
+}
|
|
|
|
|
+
|
|
|
|
|
+function renderWatchlistModule() {
|
|
|
|
|
+ return `
|
|
|
|
|
+ <div class="batch-buttons">
|
|
|
|
|
+ <button class="btn btn-warning btn-sm" onclick="runWatchlistTests()">运行全部关注列表测试</button>
|
|
|
|
|
+ </div>
|
|
|
|
|
+ ${testSection('watchlist-add', '添加关注', 'POST', 'post', '/api/watchlist', '需认证', 'auth-required',
|
|
|
|
|
+ [{label:'药品名称(drugName)', name:'drugName', placeholder:'阿莫西林胶囊', default:'阿莫西林胶囊'},
|
|
|
|
|
+ {label:'规格(spec)', name:'spec', placeholder:'0.25g×24片', default:''},
|
|
|
|
|
+ {label:'厂家(manufacturer)', name:'manufacturer', placeholder:'石药集团', default:''}], true, null, '添加药品到关注列表')}
|
|
|
|
|
+ ${testSection('watchlist-list', '关注列表', 'GET', 'get', '/api/watchlist', '需认证', 'auth-required', null, true, null, '获取当前用户所有关注的药品列表')}
|
|
|
|
|
+ ${testSection('watchlist-delete', '取消关注', 'DELETE', 'delete', '/api/watchlist/{id}', '需认证', 'auth-required',
|
|
|
|
|
+ [{label:'关注ID(id)', name:'id', placeholder:'1', default:'1'}], false, null, '从关注列表中删除')}
|
|
|
|
|
+ ${testSection('watchlist-stats', '关注统计', 'GET', 'get', '/api/watchlist/stats', '需认证', 'auth-required', null, true, null, '获取关注统计信息')}`;
|
|
|
|
|
+}
|
|
|
|
|
+
|
|
|
|
|
+function renderTrialQuotaModule() {
|
|
|
|
|
+ return `
|
|
|
|
|
+ <div class="batch-buttons">
|
|
|
|
|
+ <button class="btn btn-warning btn-sm" onclick="runTrialQuotaTests()">运行全部体验配额测试</button>
|
|
|
|
|
+ </div>
|
|
|
|
|
+ ${testSection('trial-quota-active', '生效中的体验配额', 'GET', 'get', '/api/trial-quota/active', '公开', 'auth-public', null, true, 'trialQuotaConfig', '查询当前生效的体验配额配置')}`;
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
@@ -1487,13 +1532,34 @@ function renderAdminInviteModule() {
|
|
|
${testSection('admin-invite-config', '邀请配置查询', 'GET', 'get', '/api/admin/invite/config', '需认证', 'auth-required', null, true, 'inviteConfig', '获取当前激活的邀请配置')}
|
|
${testSection('admin-invite-config', '邀请配置查询', 'GET', 'get', '/api/admin/invite/config', '需认证', 'auth-required', null, true, 'inviteConfig', '获取当前激活的邀请配置')}
|
|
|
${testSection('admin-invite-configs', '全部邀请配置', 'GET', 'get', '/api/admin/invite/configs', '需认证', 'auth-required', null, true, 'inviteConfig', '获取所有邀请配置历史记录')}
|
|
${testSection('admin-invite-configs', '全部邀请配置', 'GET', 'get', '/api/admin/invite/configs', '需认证', 'auth-required', null, true, 'inviteConfig', '获取所有邀请配置历史记录')}
|
|
|
${testSection('admin-invite-config-update', '更新邀请配置', 'PUT', 'put', '/api/admin/invite/config', '需认证', 'auth-required',
|
|
${testSection('admin-invite-config-update', '更新邀请配置', 'PUT', 'put', '/api/admin/invite/config', '需认证', 'auth-required',
|
|
|
- [{label:'奖励月数(rewardMonths)', name:'rewardMonths', placeholder:'1', default:'1'},
|
|
|
|
|
|
|
+ [
|
|
|
|
|
+ {label:'奖励月数(rewardMonths)', name:'rewardMonths', placeholder:'1', default:'1'},
|
|
|
{label:'总邀请上限(maxTotalInvites)', name:'maxTotalInvites', placeholder:'30', default:'30'},
|
|
{label:'总邀请上限(maxTotalInvites)', name:'maxTotalInvites', placeholder:'30', default:'30'},
|
|
|
{label:'日奖励上限(maxDailyReward)', name:'maxDailyReward', placeholder:'50', default:'50'},
|
|
{label:'日奖励上限(maxDailyReward)', name:'maxDailyReward', placeholder:'50', default:'50'},
|
|
|
{label:'邀请码过期天(inviteCodeExpireDays)', name:'inviteCodeExpireDays', placeholder:'30', default:'30'},
|
|
{label:'邀请码过期天(inviteCodeExpireDays)', name:'inviteCodeExpireDays', placeholder:'30', default:'30'},
|
|
|
{label:'日邀请上限(maxInvitePerDay)', name:'maxInvitePerDay', placeholder:'10', default:'10'},
|
|
{label:'日邀请上限(maxInvitePerDay)', name:'maxInvitePerDay', placeholder:'10', default:'10'},
|
|
|
{label:'APP下载URL(appDownloadUrl)', name:'appDownloadUrl', placeholder:'https://...', default:'https://download.example.com/app.exe'},
|
|
{label:'APP下载URL(appDownloadUrl)', name:'appDownloadUrl', placeholder:'https://...', default:'https://download.example.com/app.exe'},
|
|
|
- {label:'落地页标题(landingTitle)', name:'landingTitle', placeholder:'标题', default:'邀请你加入药易采药店'}], false, 'inviteConfig', '更新邀请配置参数,rewardMonths=邀请人每次获赠高级会员月数,maxTotalInvites=单个账号总邀请上限')}
|
|
|
|
|
|
|
+ {label:'小程序路径(miniappPath)', name:'miniappPath', placeholder:'/pages/download/index', default:''},
|
|
|
|
|
+ {label:'小程序AppID(miniappAppId)', name:'miniappAppId', placeholder:'wx...', default:''},
|
|
|
|
|
+ {label:'微信跳转URL(wechatRedirectUrl)', name:'wechatRedirectUrl', placeholder:'https://...', default:''},
|
|
|
|
|
+ {label:'钉钉AppID(dingtalkAppId)', name:'dingtalkAppId', placeholder:'', default:''},
|
|
|
|
|
+ {label:'飞书AppID(feishuAppId)', name:'feishuAppId', placeholder:'', default:''},
|
|
|
|
|
+ {label:'落地页标题(landingTitle)', name:'landingTitle', placeholder:'邀请你加入药易采', default:'邀请你加入药易采'},
|
|
|
|
|
+ {label:'落地页描述(landingDesc)', name:'landingDesc', placeholder:'登录药易采平台,聚合比价查低价', default:''},
|
|
|
|
|
+ {label:'应用名称(appName)', name:'appName', placeholder:'药易采', default:'药易采'},
|
|
|
|
|
+ {label:'分享标题模板(shareTitleTemplate)', name:'shareTitleTemplate', placeholder:'{inviter} 邀请你加入{appName}', default:'{inviter} 邀请你加入{appName}'},
|
|
|
|
|
+ {label:'复制文案模板(copyTextTemplate)', name:'copyTextTemplate', placeholder:'我是{inviter},在这里发现了一个药店采购神器...', default:'我是{inviter},在这里发现了一个药店采购神器——{appName}!它聚合比价功能特别方便,能快速查到最低价,帮你节省采购成本。下载链接{inviteLink}填我的邀请码 {code} 完成注册,你也会获得会员权益!'},
|
|
|
|
|
+ {label:'奖励说明(rewardDescription)', name:'rewardDescription', placeholder:'邀请人每成功邀请1家药店注册...', default:'邀请人每成功邀请1家药店注册,赠送1个月高级会员时长'},
|
|
|
|
|
+ {label:'统计摘要模板(summaryTextTemplate)', name:'summaryTextTemplate', placeholder:'已邀请{totalInvited}家药店...', default:'已邀请{totalInvited}家药店,{registeredCount}家注册,累计获得{totalReward}个月高级会员'},
|
|
|
|
|
+ {label:'Windows提示文案(instructionWindows)', name:'instructionWindows', placeholder:'下载安装Windows客户端后...', default:'下载安装Windows客户端后,在注册页面输入邀请码:{code} 或点击链接自动填入'},
|
|
|
|
|
+ {label:'App提示文案(instructionApp)', name:'instructionApp', placeholder:'下载安装客户端后...', default:'下载安装客户端后,在注册页面输入邀请码:{code} 或点击链接自动填入'},
|
|
|
|
|
+ {label:'小程序提示文案(instructionMiniapp)', name:'instructionMiniapp', placeholder:'点击按钮打开小程序...', default:'点击按钮打开小程序,邀请码已自动填入'},
|
|
|
|
|
+ {label:'微信提示文案(instructionWechat)', name:'instructionWechat', placeholder:'关注公众号后...', default:'关注公众号后,在菜单中输入邀请码:{code} 完成注册'},
|
|
|
|
|
+ {label:'钉钉提示文案(instructionDingtalk)', name:'instructionDingtalk', placeholder:'打开钉钉应用...', default:'打开钉钉应用,搜索"{appName}"并输入邀请码:{code}'},
|
|
|
|
|
+ {label:'飞书提示文案(instructionFeishu)', name:'instructionFeishu', placeholder:'打开飞书应用...', default:'打开飞书应用,搜索"{appName}"并输入邀请码:{code}'},
|
|
|
|
|
+ {label:'默认提示文案(instructionDefault)', name:'instructionDefault', placeholder:'下载客户端后...', default:'下载客户端后,在注册页面输入邀请码:{code} 即可享受奖励'},
|
|
|
|
|
+ {label:'状态(status)', name:'status', placeholder:'0停用/1启用', default:'1'}
|
|
|
|
|
+ ], false, 'inviteConfig', '更新邀请配置参数。文案模板支持占位符:{inviter}邀请人昵称、{appName}应用名称、{inviteLink}邀请链接、{code}邀请码、{rewardMonths}奖励月数、{totalInvited}总邀请数、{registeredCount}注册数、{totalReward}总奖励')}
|
|
|
${testSection('admin-invite-rewards', '邀请记录查询', 'GET', 'get', '/api/admin/invite/rewards?userId=1', '需认证', 'auth-required', null, true, 'inviteReward', '查看指定用户的邀请奖励记录')}
|
|
${testSection('admin-invite-rewards', '邀请记录查询', 'GET', 'get', '/api/admin/invite/rewards?userId=1', '需认证', 'auth-required', null, true, 'inviteReward', '查看指定用户的邀请奖励记录')}
|
|
|
${testSection('admin-invite-conversion', '邀请转化统计', 'GET', 'get', '/api/admin/invite/conversion-stats?userId=1', '需认证', 'auth-required', null, true, 'conversionStats', '查看用户邀请点击-注册转化率')}`;
|
|
${testSection('admin-invite-conversion', '邀请转化统计', 'GET', 'get', '/api/admin/invite/conversion-stats?userId=1', '需认证', 'auth-required', null, true, 'conversionStats', '查看用户邀请点击-注册转化率')}`;
|
|
|
}
|
|
}
|
|
@@ -1621,7 +1687,7 @@ function getSectionsInModule(modulePrefix) {
|
|
|
});
|
|
});
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
-const USER_MODULES = ['auth','crawler','invite','coupon','membership','payment','upload','search','platform-account','business-license','platform-config'];
|
|
|
|
|
|
|
+const USER_MODULES = ['auth','crawler','invite','coupon','membership','payment','upload','search','platform-account','business-license','platform-config','search-record','platform-session','watchlist','trial-quota'];
|
|
|
const ADMIN_MODULES = ['admin-membership','admin-invite','admin-crawler','admin-coupon','admin-license','admin-payment','admin-anxin','admin-trial-quota','admin-user','admin-audit','upload'];
|
|
const ADMIN_MODULES = ['admin-membership','admin-invite','admin-crawler','admin-coupon','admin-license','admin-payment','admin-anxin','admin-trial-quota','admin-user','admin-audit','upload'];
|
|
|
|
|
|
|
|
function countTestsInCurrentPanel() {
|
|
function countTestsInCurrentPanel() {
|
|
@@ -1797,7 +1863,8 @@ function runPlatformAccountTests() { runBatchTests('pa'); }
|
|
|
function runBusinessLicenseTests() { runBatchTests('bl'); }
|
|
function runBusinessLicenseTests() { runBatchTests('bl'); }
|
|
|
function runPlatformConfigTests() { runBatchTests('pc'); }
|
|
function runPlatformConfigTests() { runBatchTests('pc'); }
|
|
|
function runSearchRecordTests() { runBatchTests('sr'); }
|
|
function runSearchRecordTests() { runBatchTests('sr'); }
|
|
|
-function runPlatformSessionTests() { runBatchTests('ps'); }
|
|
|
|
|
|
|
+function runPlatformSessionTests() { runBatchTests('ps'); }function runWatchlistTests() { runBatchTests('watchlist'); }
|
|
|
|
|
+function runTrialQuotaTests() { runBatchTests('trial-quota'); }
|
|
|
// 运营侧快捷批量运行
|
|
// 运营侧快捷批量运行
|
|
|
function runAdminMembershipTests() { runBatchTests('admin-membership'); }
|
|
function runAdminMembershipTests() { runBatchTests('admin-membership'); }
|
|
|
function runAdminInviteTests() { runBatchTests('admin-invite'); }
|
|
function runAdminInviteTests() { runBatchTests('admin-invite'); }
|