feat(miniprogram): 温润东方风全面 UI 重设计

73 文件变更,覆盖全部 40 个页面 SCSS + TabBar 图标 + 组件样式。
统一赤陶主色 #C4623A + 暖米背景 + 衬线标题字体 + 12px 圆角体系。
This commit is contained in:
iven
2026-04-28 00:19:52 +08:00
parent fbb28e655d
commit 50eae8b809
97 changed files with 7633 additions and 2373 deletions

View File

@@ -0,0 +1,109 @@
/**
* 审计修复验证脚本
* 验证 F1: 今日体征概览 API 支持 patient_id 参数
*/
const http = require('http');
const BASE = 'http://localhost:3000/api/v1';
function request(method, path, body, token) {
return new Promise((resolve, reject) => {
const url = new URL(BASE + path);
const opts = {
hostname: url.hostname,
port: url.port,
path: url.pathname + url.search,
method,
headers: { 'Content-Type': 'application/json' },
timeout: 10000,
};
if (token) opts.headers['Authorization'] = `Bearer ${token}`;
const req = http.request(opts, (res) => {
const chunks = [];
res.on('data', (c) => chunks.push(c));
res.on('end', () => {
const raw = Buffer.concat(chunks).toString();
try {
resolve({ status: res.statusCode, data: JSON.parse(raw) });
} catch {
resolve({ status: res.statusCode, data: raw });
}
});
});
req.on('error', reject);
req.on('timeout', () => { req.destroy(); reject(new Error('timeout')); });
if (body) req.write(JSON.stringify(body));
req.end();
});
}
async function main() {
console.log('=== 审计修复验证 ===\n');
// 1. 登录
console.log('1. 登录...');
const loginRes = await request('POST', '/auth/login', {
username: 'admin',
password: 'Admin@2026',
});
const token = loginRes.data?.data?.access_token;
if (!token) {
console.error(' FAIL: 登录失败', JSON.stringify(loginRes.data).substring(0, 200));
process.exit(1);
}
console.log(' OK: token 长度', token.length);
// 2. 获取患者列表(找第一个患者 ID
console.log('\n2. 获取患者列表...');
const patientsRes = await request('GET', '/health/patients?page=1&page_size=5', null, token);
const patients = patientsRes.data?.data?.data || [];
console.log(' 患者数量:', patients.length);
const patientId = patients[0]?.id;
if (!patientId) {
console.log(' WARN: 无患者数据,跳过后续测试');
return;
}
console.log(' 使用患者 ID:', patientId);
// 3. F1 验证:今日体征概览 - 不带 patient_id
console.log('\n3. F1 验证: 今日体征概览(不带 patient_id...');
const todayRes1 = await request('GET', '/health/vital-signs/today', null, token);
console.log(' 状态:', todayRes1.status, todayRes1.data?.success ? 'OK' : 'FAIL');
// 4. F1 验证:今日体征概览 - 带 patient_id 参数
console.log('\n4. F1 验证: 今日体征概览(带 patient_id 参数)...');
const todayRes2 = await request('GET', `/health/vital-signs/today?patient_id=${patientId}`, null, token);
console.log(' 状态:', todayRes2.status, todayRes2.data?.success ? 'OK' : 'FAIL');
if (todayRes2.status === 200 && todayRes2.data?.success) {
console.log(' 返回数据:', JSON.stringify(todayRes2.data.data || {}).substring(0, 200));
} else {
console.log(' 响应:', JSON.stringify(todayRes2.data).substring(0, 300));
}
// 5. 验证趋势 API
console.log('\n5. 趋势 API 验证...');
const trendRes = await request('GET', '/health/vital-signs/trend?indicator=weight&range=7d', null, token);
console.log(' 状态:', trendRes.status, trendRes.data?.success ? 'OK' : 'FAIL');
// 6. 日常监测 API 验证
console.log('\n6. 日常监测 API 验证...');
const dmRes = await request('POST', '/health/daily-monitoring', {
patient_id: patientId,
record_date: new Date().toISOString().slice(0, 10),
weight: 999, // 超出合理范围,验证后端校验
}, token);
console.log(' 状态:', dmRes.status);
// 后端应该接受或拒绝(取决于后端校验强度)
if (dmRes.status >= 400) {
console.log(' 后端拒绝了请求(预期:应有范围校验):', JSON.stringify(dmRes.data).substring(0, 200));
} else {
console.log(' 后端接受了请求:', dmRes.data?.success ? 'OK' : 'FAIL');
}
console.log('\n=== 验证完成 ===');
}
main().catch((e) => {
console.error('验证失败:', e.message);
process.exit(1);
});