Phase 0 安全热修复 (CRITICAL): - 外部化微信 appid/secret 到 ERP__WECHAT__APPID/SECRET 环境变量 - 正确连接 HealthCrypto 到 ERP__HEALTH__AES_KEY/HMAC_KEY 环境变量 - 外部化小程序加密密钥到 TARO_APP_ENCRYPTION_KEY 环境变量 - 移除小程序 auth store 中的敏感信息 console.log Phase 1 安全加固: - 微信自动注册 display_name 添加 sanitize 防止 XSS - 测试数据库凭据改为从 TEST_DB_URL 环境变量读取 Phase 2 代码质量: - 提取 useThemeMode hook 消除 22 处重复暗色模式检测 - 提取共享健康常量到 constants/health.ts - 拆分 patient_service.rs 脱敏函数到 masking.rs - 移除未使用的 i18next/react-i18next 依赖 - 移除未使用的 api/errors.ts 和 erp-auth/anyhow 依赖 Phase 3 测试覆盖: - 新增 5 个患者模块集成测试 (CRUD/租户隔离/验证/软删除) Phase 4 跨平台一致性: - 统一小程序 Patient.birthday → birth_date 匹配后端 - 统一小程序 Appointment.time_slot → start_time/end_time 匹配后端 Phase 5 架构: - 微信登录添加多租户 TODO 注释 - 更新 wiki/infrastructure.md 环境变量文档
60 lines
1.8 KiB
TypeScript
60 lines
1.8 KiB
TypeScript
import { defineConfig } from '@tarojs/cli';
|
|
import path from 'path';
|
|
|
|
export default defineConfig(async (merge) => {
|
|
const baseConfig = {
|
|
projectName: 'hms-miniprogram',
|
|
date: '2026-4-23',
|
|
designWidth: 750,
|
|
deviceRatio: { 640: 2.34 / 2, 750: 1, 375: 2, 828: 1.81 / 2 },
|
|
sourceRoot: 'src',
|
|
outputRoot: 'dist',
|
|
plugins: [],
|
|
defineConstants: {
|
|
'process.env.NODE_ENV': JSON.stringify(process.env.NODE_ENV || 'development'),
|
|
'process.env.TARO_APP_API_URL': JSON.stringify(process.env.TARO_APP_API_URL || 'http://localhost:3000/api/v1'),
|
|
'process.env.TARO_APP_ENCRYPTION_KEY': JSON.stringify(process.env.TARO_APP_ENCRYPTION_KEY || ''),
|
|
},
|
|
copy: { patterns: [], options: {} },
|
|
framework: 'react',
|
|
compiler: 'webpack5',
|
|
alias: {
|
|
'@': path.resolve(__dirname, '..', 'src'),
|
|
},
|
|
sass: {
|
|
resource: ['src/styles/variables.scss'],
|
|
},
|
|
mini: {
|
|
compile: {
|
|
exclude: [],
|
|
},
|
|
postcss: {
|
|
pxtransform: { enable: true, config: {} },
|
|
cssModules: {
|
|
enable: false,
|
|
config: { namingPattern: 'module', generateScopedName: '[name]__[local]___[hash:base64:5]' },
|
|
},
|
|
},
|
|
},
|
|
h5: {
|
|
publicPath: '/',
|
|
staticDirectory: 'static',
|
|
postcss: {
|
|
autoprefixer: { enable: true, config: {} },
|
|
cssModules: {
|
|
enable: false,
|
|
config: { namingPattern: 'module', generateScopedName: '[name]__[local]___[hash:base64:5]' },
|
|
},
|
|
},
|
|
},
|
|
};
|
|
|
|
const devConfig = (await import('./dev')).default;
|
|
const prodConfig = (await import('./prod')).default;
|
|
|
|
if (process.env.NODE_ENV === 'production') {
|
|
return merge({}, baseConfig, prodConfig);
|
|
}
|
|
return merge({}, baseConfig, devConfig);
|
|
});
|