|
@@ -108,8 +108,8 @@
|
|
|
</head>
|
|
</head>
|
|
|
<body>
|
|
<body>
|
|
|
<div class="container">
|
|
<div class="container">
|
|
|
- <h1>智价云(药店版) - 活动模块API验收测试工具</h1>
|
|
|
|
|
- <h2>覆盖签到有礼(周期制) + 邀请有礼 + 比价抽奖 用户端 & 运营端 全量API | 独立登录管理 | 开发环境验证码固定 123456</h2>
|
|
|
|
|
|
|
+ <h1>智价云(药店版) - 入驻信息提交API测试工具</h1>
|
|
|
|
|
+ <h2>覆盖入驻信息提交(营业执照、药品经营许可证、医疗器械备案)| 店铺信息 + 资质图片 | 开发环境验证码固定 123456</h2>
|
|
|
|
|
|
|
|
<!-- 用户侧/运营侧 切换器 -->
|
|
<!-- 用户侧/运营侧 切换器 -->
|
|
|
<div class="side-switcher">
|
|
<div class="side-switcher">
|
|
@@ -188,7 +188,7 @@
|
|
|
<div class="module-tab active" data-module="checkin">1.签到有礼</div>
|
|
<div class="module-tab active" data-module="checkin">1.签到有礼</div>
|
|
|
<div class="module-tab" data-module="activity-invite">2.邀请有礼</div>
|
|
<div class="module-tab" data-module="activity-invite">2.邀请有礼</div>
|
|
|
<div class="module-tab" data-module="activity-lottery">3.比价抽奖</div>
|
|
<div class="module-tab" data-module="activity-lottery">3.比价抽奖</div>
|
|
|
- <div class="module-tab" data-module="business-license">4.营业执照管理</div>
|
|
|
|
|
|
|
+ <div class="module-tab" data-module="business-license">4.入驻信息提交</div>
|
|
|
<div class="module-tab" data-module="activity-available">5.我可参加的活动</div>
|
|
<div class="module-tab" data-module="activity-available">5.我可参加的活动</div>
|
|
|
<div class="module-tab" data-module="activity-rewards-tab">6.各种活动奖励</div>
|
|
<div class="module-tab" data-module="activity-rewards-tab">6.各种活动奖励</div>
|
|
|
</div>
|
|
</div>
|
|
@@ -199,6 +199,7 @@
|
|
|
<div class="module-tab" data-module="admin-activity-invite">2.邀请有礼管理</div>
|
|
<div class="module-tab" data-module="admin-activity-invite">2.邀请有礼管理</div>
|
|
|
<div class="module-tab" data-module="admin-activity-checkin">3.签到送会员管理</div>
|
|
<div class="module-tab" data-module="admin-activity-checkin">3.签到送会员管理</div>
|
|
|
<div class="module-tab" data-module="admin-activity-lottery">4.比价抽奖管理</div>
|
|
<div class="module-tab" data-module="admin-activity-lottery">4.比价抽奖管理</div>
|
|
|
|
|
+ <div class="module-tab" data-module="admin-license">5.入驻信息审核</div>
|
|
|
</div>
|
|
</div>
|
|
|
|
|
|
|
|
<div id="panels"></div>
|
|
<div id="panels"></div>
|
|
@@ -217,7 +218,7 @@ const SMS_CODE = () => document.getElementById('smsCode')?.value || '123456';
|
|
|
let stats = { pass: 0, fail: 0, pending: 0, total: 0 };
|
|
let stats = { pass: 0, fail: 0, pending: 0, total: 0 };
|
|
|
|
|
|
|
|
const USER_MODULES = ['checkin', 'activity-invite', 'activity-lottery', 'business-license', 'activity-available', 'activity-rewards-tab'];
|
|
const USER_MODULES = ['checkin', 'activity-invite', 'activity-lottery', 'business-license', 'activity-available', 'activity-rewards-tab'];
|
|
|
-const ADMIN_MODULES = ['admin-checkin', 'admin-activity-invite', 'admin-activity-checkin', 'admin-activity-lottery'];
|
|
|
|
|
|
|
+const ADMIN_MODULES = ['admin-checkin', 'admin-activity-invite', 'admin-activity-checkin', 'admin-activity-lottery', 'admin-license'];
|
|
|
|
|
|
|
|
// ===================== 大整数安全JSON解析 =====================
|
|
// ===================== 大整数安全JSON解析 =====================
|
|
|
function safeJsonParse(text) {
|
|
function safeJsonParse(text) {
|
|
@@ -441,6 +442,7 @@ function renderModule(module) {
|
|
|
case 'admin-activity-invite': html = renderAdminActivityInviteModule(); break;
|
|
case 'admin-activity-invite': html = renderAdminActivityInviteModule(); break;
|
|
|
case 'admin-activity-checkin': html = renderAdminActivityCheckinModule(); break;
|
|
case 'admin-activity-checkin': html = renderAdminActivityCheckinModule(); break;
|
|
|
case 'admin-activity-lottery': html = renderAdminActivityLotteryModule(); break;
|
|
case 'admin-activity-lottery': html = renderAdminActivityLotteryModule(); break;
|
|
|
|
|
+ case 'admin-license': html = renderAdminLicenseModule(); break;
|
|
|
}
|
|
}
|
|
|
panels.innerHTML = html;
|
|
panels.innerHTML = html;
|
|
|
panels.querySelectorAll('input[data-raw]').forEach(input => {
|
|
panels.querySelectorAll('input[data-raw]').forEach(input => {
|
|
@@ -744,10 +746,19 @@ const FIELD_DESC = {
|
|
|
'businessLicenseInfo': [
|
|
'businessLicenseInfo': [
|
|
|
['data.id', 'Long', '执照ID(null=未上传)'],
|
|
['data.id', 'Long', '执照ID(null=未上传)'],
|
|
|
['data.userId', 'Long', '用户ID'],
|
|
['data.userId', 'Long', '用户ID'],
|
|
|
- ['data.licenseImageUrl', 'String', '执照图片URL'],
|
|
|
|
|
|
|
+ ['data.storeName', 'String', '店铺名称'],
|
|
|
|
|
+ ['data.terminalType', 'String', '终端类型:SINGLE-单店/CHAIN-连锁/CLINIC-诊所/COMMUNITY_HEALTH-社康'],
|
|
|
|
|
+ ['data.province', 'String', '省'],
|
|
|
|
|
+ ['data.city', 'String', '市'],
|
|
|
|
|
+ ['data.district', 'String', '区'],
|
|
|
|
|
+ ['data.storeAddress', 'String', '店铺详细地址'],
|
|
|
|
|
+ ['data.contactPerson', 'String', '联系人姓名'],
|
|
|
|
|
+ ['data.contactPhone', 'String', '联系电话'],
|
|
|
|
|
+ ['data.licenseImageUrl', 'String', '营业执照图片URL'],
|
|
|
|
|
+ ['data.drugLicenseUrl', 'String', '药品经营许可证图片URL'],
|
|
|
|
|
+ ['data.medicalDeviceClass2Url', 'String', '二类医疗器械备案图片URL'],
|
|
|
|
|
+ ['data.medicalDeviceClass3Url', 'String', '三类医疗器械备案图片URL'],
|
|
|
['data.creditCode', 'String', '统一社会信用代码'],
|
|
['data.creditCode', 'String', '统一社会信用代码'],
|
|
|
- ['data.pharmacyName', 'String', '药店名称'],
|
|
|
|
|
- ['data.legalPerson', 'String', '法定代表人'],
|
|
|
|
|
['data.reviewStatus', 'String', '审核状态:PENDING/APPROVED/REJECTED'],
|
|
['data.reviewStatus', 'String', '审核状态:PENDING/APPROVED/REJECTED'],
|
|
|
['data.showVerifiedBadge', 'Boolean', '是否显示认证标识'],
|
|
['data.showVerifiedBadge', 'Boolean', '是否显示认证标识'],
|
|
|
['data.reviewRemark', 'String', '审核备注'],
|
|
['data.reviewRemark', 'String', '审核备注'],
|
|
@@ -913,20 +924,29 @@ function renderActivityLotteryModule() {
|
|
|
[{label:'条数(limit,可选)', name:'limit', placeholder:'20', default:'20'}], true, 'activityLotteryRecords', '获取当前用户的抽奖历史记录,包含奖品名称、奖励类型、会员天数、是否中奖等完整中奖信息')}`;
|
|
[{label:'条数(limit,可选)', name:'limit', placeholder:'20', default:'20'}], true, 'activityLotteryRecords', '获取当前用户的抽奖历史记录,包含奖品名称、奖励类型、会员天数、是否中奖等完整中奖信息')}`;
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
-// ==================== 用户端:营业执照管理(公用模块) ====================
|
|
|
|
|
|
|
+// ==================== 用户端:入驻信息提交模块 ====================
|
|
|
function renderBusinessLicenseModule() {
|
|
function renderBusinessLicenseModule() {
|
|
|
return `
|
|
return `
|
|
|
<div class="batch-buttons">
|
|
<div class="batch-buttons">
|
|
|
- <button class="btn btn-warning btn-sm" onclick="runBusinessLicenseTests()">运行营业执照测试</button>
|
|
|
|
|
|
|
+ <button class="btn btn-warning btn-sm" onclick="runBusinessLicenseTests()">运行入驻信息提交测试</button>
|
|
|
</div>
|
|
</div>
|
|
|
- ${testSection('business-license-info', '我的营业执照信息', 'GET', 'get', '/api/business-license/info', '需认证', 'auth-required', null, true, 'businessLicenseInfo', '查询当前用户的营业执照提交状态和审核结果。审核通过后可在多种活动中获得权益:比价抽奖额外机会、邀请有礼资格认定等')}
|
|
|
|
|
- ${testSection('business-license-upload', '提交营业执照(JSON)', 'POST', 'post', '/api/business-license/upload', '需认证', 'auth-required',
|
|
|
|
|
|
|
+ ${testSection('business-license-info', '我的入驻信息', 'GET', 'get', '/api/business-license/info', '需认证', 'auth-required', null, true, 'businessLicenseInfo', '查询当前用户的入驻信息提交状态和审核结果:店铺名称、终端类型、地址、联系人、营业执照、药品经营许可证、医疗器械备案等信息')}
|
|
|
|
|
+ ${testSection('business-license-upload', '提交入驻信息(JSON)', 'POST', 'post', '/api/business-license/upload', '需认证', 'auth-required',
|
|
|
[
|
|
[
|
|
|
- {label:'执照图片URL(licenseImageUrl)', name:'licenseImageUrl', placeholder:'https://example.com/license.jpg', default:''},
|
|
|
|
|
- {label:'统一社会信用代码(creditCode)', name:'creditCode', placeholder:'91110000XXXXXXXXXX', default:''},
|
|
|
|
|
- {label:'药店名称(pharmacyName)', name:'pharmacyName', placeholder:'XX大药房', default:''},
|
|
|
|
|
- {label:'法定代表人(legalPerson,可选)', name:'legalPerson', placeholder:'张三', default:''}
|
|
|
|
|
- ], true, 'businessLicenseInfo', '上传营业执照参与资质审核。审核通过后可获认证标识、解锁邀请有礼奖励、获取比价抽奖资格')}
|
|
|
|
|
|
|
+ {label:'店铺名称(storeName) *', name:'storeName', placeholder:'XX大药房', default:''},
|
|
|
|
|
+ {label:'终端类型(terminalType) *', name:'terminalType', placeholder:'SINGLE/CHAIN/CLINIC/COMMUNITY_HEALTH', default:'SINGLE'},
|
|
|
|
|
+ {label:'省(province) *', name:'province', placeholder:'广东省', default:''},
|
|
|
|
|
+ {label:'市(city) *', name:'city', placeholder:'深圳市', default:''},
|
|
|
|
|
+ {label:'区(district) *', name:'district', placeholder:'南山区', default:''},
|
|
|
|
|
+ {label:'店铺地址(storeAddress) *', name:'storeAddress', placeholder:'科技园路1号', default:''},
|
|
|
|
|
+ {label:'联系人(contactPerson) *', name:'contactPerson', placeholder:'张三', default:''},
|
|
|
|
|
+ {label:'电话(contactPhone) *', name:'contactPhone', placeholder:'13800138000', default:''},
|
|
|
|
|
+ {label:'营业执照URL(businessLicenseUrl) *', name:'businessLicenseUrl', placeholder:'https://example.com/yyzz.jpg', default:''},
|
|
|
|
|
+ {label:'药品经营许可证URL(drugLicenseUrl) *', name:'drugLicenseUrl', placeholder:'https://example.com/ypjy.jpg', default:''},
|
|
|
|
|
+ {label:'信用代码(creditCode)', name:'creditCode', placeholder:'91440300XXXXXXXXXX', default:''},
|
|
|
|
|
+ {label:'二类医疗器械备案(medicalDeviceClass2Url)', name:'medicalDeviceClass2Url', placeholder:'https://example.com/elqx.jpg', default:''},
|
|
|
|
|
+ {label:'三类医疗器械备案(medicalDeviceClass3Url)', name:'medicalDeviceClass3Url', placeholder:'https://example.com/slqx.jpg', default:''}
|
|
|
|
|
+ ], true, 'businessLicenseInfo', '提交入驻信息参与审核,10个必填字段:店铺名称、终端类型、省市区、地址、联系人、电话、营业执照、药品经营许可证;3个选填:信用代码、二类/三类医疗器械备案')}
|
|
|
<div class="test-section">
|
|
<div class="test-section">
|
|
|
<div class="section-title">
|
|
<div class="section-title">
|
|
|
<span class="method method-post">POST</span>
|
|
<span class="method method-post">POST</span>
|
|
@@ -934,29 +954,18 @@ function renderBusinessLicenseModule() {
|
|
|
<span class="side-tag side-user">用户侧</span>
|
|
<span class="side-tag side-user">用户侧</span>
|
|
|
<span class="auth-required auth-tag">需认证</span>
|
|
<span class="auth-required auth-tag">需认证</span>
|
|
|
</div>
|
|
</div>
|
|
|
- <div class="section-desc">选择营业执照图片文件上传至阿里云OSS,返回可公开访问的URL。仅需选择文件即可上传成功,信用代码和药店名称为可选填项。支持 JPG/PNG 格式</div>
|
|
|
|
|
|
|
+ <div class="section-desc">选择资质文件上传至阿里云OSS,返回可公开访问的URL。每会话最多10次。仅需选择文件即可上传,返回URL后填入上方资质URL字段提交</div>
|
|
|
<details class="field-desc-details">
|
|
<details class="field-desc-details">
|
|
|
<summary class="field-desc-summary">📞 cURL 调用示例</summary>
|
|
<summary class="field-desc-summary">📞 cURL 调用示例</summary>
|
|
|
- <pre class="curl-example"># 最简上传(仅图片):
|
|
|
|
|
-curl -X POST "\${BASE_URL}/api/business-license/upload-file" \\
|
|
|
|
|
- -H "Authorization: Bearer \${TOKEN}" \\
|
|
|
|
|
- -F "file=@/path/to/license.jpg"
|
|
|
|
|
-
|
|
|
|
|
-# 完整上传(含执照信息):
|
|
|
|
|
-curl -X POST "\${BASE_URL}/api/business-license/upload-file" \\
|
|
|
|
|
- -H "Authorization: Bearer \${TOKEN}" \\
|
|
|
|
|
- -F "file=@/path/to/license.jpg" \\
|
|
|
|
|
- -F "creditCode=91110000XXXXXXXXXX" \\
|
|
|
|
|
- -F "pharmacyName=XX大药房" \\
|
|
|
|
|
- -F "legalPerson=张三"</pre>
|
|
|
|
|
|
|
+ <pre class="curl-example"># 上传资质文件:
|
|
|
|
|
+curl -X POST "${BASE_URL}/api/business-license/upload-file" \\
|
|
|
|
|
+ -H "Authorization: Bearer ${TOKEN}" \\
|
|
|
|
|
+ -F "file=@/path/to/license.jpg"</pre>
|
|
|
</details>
|
|
</details>
|
|
|
<div class="form-grid">
|
|
<div class="form-grid">
|
|
|
- <div class="form-group"><label>执照图片文件(file) *</label><input type="file" id="business-license-upload-file-file" accept="image/*"></div>
|
|
|
|
|
- <div class="form-group"><label>统一社会信用代码(creditCode,可选)</label><input type="text" id="business-license-upload-file-creditCode" placeholder="91110000XXXXXXXXXX"></div>
|
|
|
|
|
- <div class="form-group"><label>药店名称(pharmacyName,可选)</label><input type="text" id="business-license-upload-file-pharmacyName" placeholder="XX大药房"></div>
|
|
|
|
|
- <div class="form-group"><label>法定代表人(legalPerson,可选)</label><input type="text" id="business-license-upload-file-legalPerson" placeholder="张三"></div>
|
|
|
|
|
|
|
+ <div class="form-group"><label>资质文件(file) *</label><input type="file" id="business-license-upload-file-file" accept="image/*"></div>
|
|
|
</div>
|
|
</div>
|
|
|
- <button class="btn btn-primary" onclick="runBusinessLicenseFileUpload('business-license-upload-file')">执行测试</button>
|
|
|
|
|
|
|
+ <button class="btn btn-primary" onclick="runBusinessLicenseFileUpload('business-license-upload-file')">上传文件</button>
|
|
|
<div class="response-box" id="business-license-upload-file-box" style="display:none;">
|
|
<div class="response-box" id="business-license-upload-file-box" style="display:none;">
|
|
|
<div class="response-header">
|
|
<div class="response-header">
|
|
|
<span class="response-title">响应 <span id="business-license-upload-file-duration" style="color:#999;font-weight:400;"></span></span>
|
|
<span class="response-title">响应 <span id="business-license-upload-file-duration" style="color:#999;font-weight:400;"></span></span>
|
|
@@ -1067,8 +1076,8 @@ function renderAdminActivityInviteModule() {
|
|
|
{label:'邀请人最多奖励次数(maxInviterReward)', name:'maxInviterReward', placeholder:'30', default:'30'},
|
|
{label:'邀请人最多奖励次数(maxInviterReward)', name:'maxInviterReward', placeholder:'30', default:'30'},
|
|
|
{label:'奖励触发模式(rewardTrigger)', name:'rewardTrigger', placeholder:'REGISTRATION/LICENSE_APPROVED', default:'LICENSE_APPROVED'},
|
|
{label:'奖励触发模式(rewardTrigger)', name:'rewardTrigger', placeholder:'REGISTRATION/LICENSE_APPROVED', default:'LICENSE_APPROVED'},
|
|
|
{label:'要求小程序用户(requireMiniappInviter)', name:'requireMiniappInviter', placeholder:'0不要求/1要求', default:'1'},
|
|
{label:'要求小程序用户(requireMiniappInviter)', name:'requireMiniappInviter', placeholder:'0不要求/1要求', default:'1'},
|
|
|
- {label:'备注(remark)', name:'remark', placeholder:'邀请有礼活动', default:'邀请有礼:被邀请人资质审核通过后双方各得30天高级会员'}
|
|
|
|
|
- ], true, 'adminActivityInviteConfig', '更新邀请有礼活动规则。rewardTrigger=REGISTRATION注册即发,LICENSE_APPROVED资质审核通过后发')}
|
|
|
|
|
|
|
+ {label:'备注(remark)', name:'remark', placeholder:'邀请有礼活动', default:'邀请有礼:被邀请人入驻审核通过后双方各得30天高级会员'}
|
|
|
|
|
+ ], true, 'adminActivityInviteConfig', '更新邀请有礼活动规则。rewardTrigger=REGISTRATION注册即发,LICENSE_APPROVED入驻审核通过后发')}
|
|
|
${testSection('admin-activity-invite-revoke', '撤销邀请奖励(反作弊)', 'POST', 'post', '/api/admin/activity/invite/revoke', '需认证', 'auth-required',
|
|
${testSection('admin-activity-invite-revoke', '撤销邀请奖励(反作弊)', 'POST', 'post', '/api/admin/activity/invite/revoke', '需认证', 'auth-required',
|
|
|
[
|
|
[
|
|
|
{label:'被邀请人ID(inviteeId)', name:'inviteeId', placeholder:'作弊者用户ID', default:''},
|
|
{label:'被邀请人ID(inviteeId)', name:'inviteeId', placeholder:'作弊者用户ID', default:''},
|
|
@@ -1153,6 +1162,28 @@ function renderAdminActivityLotteryModule() {
|
|
|
], true, 'adminActivityRewards', '按活动类型统一查询三种活动的中奖/奖励记录。type: INVITE-邀请有礼 / CHECKIN-签到有礼 / LOTTERY-比价抽奖')}`;
|
|
], true, 'adminActivityRewards', '按活动类型统一查询三种活动的中奖/奖励记录。type: INVITE-邀请有礼 / CHECKIN-签到有礼 / LOTTERY-比价抽奖')}`;
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
|
|
+// ==================== 运营端:入驻信息审核模块 ====================
|
|
|
|
|
+function renderAdminLicenseModule() {
|
|
|
|
|
+ return `
|
|
|
|
|
+ <div class="batch-buttons">
|
|
|
|
|
+ <button class="btn btn-warning btn-sm" onclick="runAdminLicenseTests()">运行入驻信息审核测试</button>
|
|
|
|
|
+ </div>
|
|
|
|
|
+ ${testSection('admin-license-list', '待审核列表', 'GET', 'get', '/api/admin/license/review?reviewStatus=PENDING', '需认证', 'auth-required',
|
|
|
|
|
+ [{label:'审核状态(reviewStatus,可选)', name:'reviewStatus', placeholder:'PENDING/APPROVED/REJECTED', default:'PENDING'}],
|
|
|
|
|
+ true, null, '查询入驻信息审核列表。status: PENDING-待审核, APPROVED-已通过, REJECTED-已拒绝')}
|
|
|
|
|
+ ${testSection('admin-license-approve', '审核通过', 'POST', 'post', '/api/admin/license/review', '需认证', 'auth-required',
|
|
|
|
|
+ [
|
|
|
|
|
+ {label:'资质ID(licenseId) *', name:'licenseId', placeholder:'1', default:'1'},
|
|
|
|
|
+ {label:'审核动作(action)', name:'action', placeholder:'APPROVED', default:'APPROVED'}
|
|
|
|
|
+ ], true, null, '审核通过入驻信息。通过后设置认证标识、首次通过赠送30天高级会员')}
|
|
|
|
|
+ ${testSection('admin-license-reject', '审核拒绝', 'POST', 'post', '/api/admin/license/review', '需认证', 'auth-required',
|
|
|
|
|
+ [
|
|
|
|
|
+ {label:'资质ID(licenseId) *', name:'licenseId', placeholder:'1', default:'1'},
|
|
|
|
|
+ {label:'审核动作(action)', name:'action', placeholder:'REJECTED', default:'REJECTED'},
|
|
|
|
|
+ {label:'拒绝原因(rejectReason)', name:'rejectReason', placeholder:'图片不清晰', default:''}
|
|
|
|
|
+ ], true, null, '拒绝入驻信息申请,需填写拒绝原因供申请人查看')}`;
|
|
|
|
|
+}
|
|
|
|
|
+
|
|
|
// ===================== 批量测试 ====================
|
|
// ===================== 批量测试 ====================
|
|
|
function getSectionsInModule(modulePrefix) {
|
|
function getSectionsInModule(modulePrefix) {
|
|
|
return Array.from(document.querySelectorAll('.test-section')).filter(s => {
|
|
return Array.from(document.querySelectorAll('.test-section')).filter(s => {
|
|
@@ -1261,17 +1292,10 @@ function runActivityAvailableTests() { runBatchTests('activity-available'); }
|
|
|
async function runBusinessLicenseFileUpload(sectionId) {
|
|
async function runBusinessLicenseFileUpload(sectionId) {
|
|
|
const fileInput = document.getElementById(sectionId + '-file');
|
|
const fileInput = document.getElementById(sectionId + '-file');
|
|
|
const file = fileInput?.files[0];
|
|
const file = fileInput?.files[0];
|
|
|
- if (!file) { alert('请先选择营业执照图片文件'); return; }
|
|
|
|
|
-
|
|
|
|
|
- const creditCode = document.getElementById(sectionId + '-creditCode')?.value?.trim() || '';
|
|
|
|
|
- const pharmacyName = document.getElementById(sectionId + '-pharmacyName')?.value?.trim() || '';
|
|
|
|
|
- const legalPerson = document.getElementById(sectionId + '-legalPerson')?.value?.trim() || '';
|
|
|
|
|
|
|
+ if (!file) { alert('请先选择资质文件'); return; }
|
|
|
|
|
|
|
|
const formData = new FormData();
|
|
const formData = new FormData();
|
|
|
formData.append('file', file);
|
|
formData.append('file', file);
|
|
|
- formData.append('creditCode', creditCode);
|
|
|
|
|
- formData.append('pharmacyName', pharmacyName);
|
|
|
|
|
- if (legalPerson) formData.append('legalPerson', legalPerson);
|
|
|
|
|
|
|
|
|
|
const box = document.getElementById(sectionId + '-box');
|
|
const box = document.getElementById(sectionId + '-box');
|
|
|
const statusEl = document.getElementById(sectionId + '-status');
|
|
const statusEl = document.getElementById(sectionId + '-status');
|
|
@@ -1324,6 +1348,7 @@ function runAdminCheckinTests() { runBatchTests('admin-checkin'); }
|
|
|
function runAdminActivityInviteTests() { runBatchTests('admin-activity-invite'); }
|
|
function runAdminActivityInviteTests() { runBatchTests('admin-activity-invite'); }
|
|
|
function runAdminActivityCheckinTests() { runBatchTests('admin-activity-checkin'); }
|
|
function runAdminActivityCheckinTests() { runBatchTests('admin-activity-checkin'); }
|
|
|
function runAdminActivityLotteryTests() { runBatchTests('admin-activity-lottery'); }
|
|
function runAdminActivityLotteryTests() { runBatchTests('admin-activity-lottery'); }
|
|
|
|
|
+function runAdminLicenseTests() { runBatchTests('admin-license'); }
|
|
|
|
|
|
|
|
// ===================== 验证器 =====================
|
|
// ===================== 验证器 =====================
|
|
|
function validate_checkinStatus(result) { return result.data?.code === 200 && result.data?.data?.checkedToday !== undefined; }
|
|
function validate_checkinStatus(result) { return result.data?.code === 200 && result.data?.data?.checkedToday !== undefined; }
|
|
@@ -1364,6 +1389,9 @@ function validate_adminActivityRewards(result) { return result.data?.code === 20
|
|
|
function validate_businessLicenseInfo(result) { return result.data?.code === 200 && result.data?.data !== undefined; }
|
|
function validate_businessLicenseInfo(result) { return result.data?.code === 200 && result.data?.data !== undefined; }
|
|
|
function validate_businessLicenseUpload(result) { return result.data?.code === 200; }
|
|
function validate_businessLicenseUpload(result) { return result.data?.code === 200; }
|
|
|
function validate_businessLicenseUploadFile(result) { return result.data?.code === 200 && typeof result.data?.data === 'string'; }
|
|
function validate_businessLicenseUploadFile(result) { return result.data?.code === 200 && typeof result.data?.data === 'string'; }
|
|
|
|
|
+function validate_adminLicenseList(result) { return result.data?.code === 200 && Array.isArray(result.data?.data); }
|
|
|
|
|
+function validate_adminLicenseApprove(result) { return result.data?.code === 200; }
|
|
|
|
|
+function validate_adminLicenseReject(result) { return result.data?.code === 200; }
|
|
|
|
|
|
|
|
// ===================== 初始化 =====================
|
|
// ===================== 初始化 =====================
|
|
|
window.addEventListener('DOMContentLoaded', () => {
|
|
window.addEventListener('DOMContentLoaded', () => {
|