fix: 优化首页审核功能的类型安全和错误处理

**类型安全优化**:
- 为 handleAuditFailure 函数添加完整的 Record<AuditConclusion, string> 类型
- 添加 AuditConclusion.PASS 枚举项以保持类型完整性
- 使用可选链操作符安全访问 auditResult.conclusion

**错误处理优化**:
- 改进 loadingState 类型检查,使用 typeof 确保类型安全
- 优化错误信息的条件判断逻辑

**文档更新**:
- 添加 hooks 和 sdk 相关的 prompt.md 文档文件
This commit is contained in:
imeepos 2025-09-08 16:22:45 +08:00
parent 2495f40eea
commit d91274a6dd
3 changed files with 128 additions and 5 deletions

40
src/hooks/prompt.md Normal file
View File

@ -0,0 +1,40 @@
baseUrl: /api/v1/content-moderation
接口:图片内容审核
地址::platform/audit-image
返回:{taskId}
平台:
export enum PlatformType {
WECHAT = 'wechat', // 微信小程序 - 腾讯微信生态
ALIPAY = 'alipay', // 支付宝小程序 - 蚂蚁金服生态
BAIDU = 'baidu', // 百度智能小程序 - 百度生态
BYTEDANCE = 'bytedance', // 字节跳动小程序 - 抖音、今日头条等
JD = 'jd', // 京东小程序 - 京东购物生态
QQ = 'qq', // QQ小程序 - 腾讯QQ生态
FEISHU = 'feishu', // 飞书小程序 - 企业办公生态
KUAISHOU = 'kuaishou', // 快手小程序 - 快手短视频生态
H5 = 'h5', // H5网页版 - 浏览器端应用
RN = 'rn', // React Native应用 - 原生移动应用
}
接口:查询审核结果
地址::platform/result/:taskId
返回:{status: AuditStatus conclusion: AuditConclusion;}
export enum AuditStatus {
PENDING = 'pending', // 待审核
PROCESSING = 'processing', // 审核中
COMPLETED = 'completed', // 审核完成
FAILED = 'failed', // 审核失败
TIMEOUT = 'timeout', // 审核超时
}
export enum AuditConclusion {
PASS = 'pass', // 通过
REJECT = 'reject', // 拒绝
REVIEW = 'review', // 人工复审
UNCERTAIN = 'uncertain', // 不确定
}

View File

@ -76,13 +76,14 @@ export default function Home() {
// 处理审核失败
const handleAuditFailure = (auditResult: ImageAuditResult) => {
const messages = {
const messages: Record<AuditConclusion, string> = {
[AuditConclusion.REJECT]: '图片内容不符合规范,请重新选择符合规范的图片',
[AuditConclusion.REVIEW]: '图片需要人工审核,请稍后重试或更换其他图片',
[AuditConclusion.UNCERTAIN]: '图片审核结果不确定,请重新选择图片'
[AuditConclusion.UNCERTAIN]: '图片审核结果不确定,请重新选择图片',
[AuditConclusion.PASS]: '图片审核通过' // 虽然不会用到,但为了类型完整性
}
const message = messages[auditResult.conclusion!] || '图片审核失败,请重新选择图片'
const message = auditResult.conclusion ? messages[auditResult.conclusion] : '图片审核失败,请重新选择图片'
Taro.showModal({
title: '图片审核未通过',
@ -201,13 +202,13 @@ export default function Home() {
// 统一错误处理
Taro.hideLoading()
if (loadingState === 'uploading') {
if (typeof loadingState === 'string' && loadingState === 'uploading') {
Taro.showToast({
title: '图片上传失败,请重试',
icon: 'error',
duration: 2000
})
} else if (loadingState === 'auditing') {
} else if (typeof loadingState === 'string' && loadingState === 'auditing') {
Taro.showToast({
title: '图片审核失败,请重试',
icon: 'error',

82
src/sdk/prompt.md Normal file
View File

@ -0,0 +1,82 @@
请求地址:
const baseUrl = 'https://bowongai-test--text-video-agent-fastapi-app.modal.run';
const url = `${baseUrl}/api/file/upload/s3`;
```实例代码
async upload(params: UploadParams): Promise<string> {
const { filePath, name, type, onProgress } = params;
const url = `${this.baseUrl}/api/file/upload/s3`;
try {
// 获取文件信息
const fileInfo = await Taro.getFileInfo({ filePath });
if (!isGetFileInfoSuccessCallbackResult(fileInfo)) {
throw new Error(fileInfo.errMsg)
}
// 自动生成文件名(如果未提供)
const fileName = name || `upload_${Date.now()}.${this._getFileExtension(filePath)}`;
// 自动判断文件类型(如果未提供)
const fileType = type || this._getMimeType(filePath);
console.log('开始上传文件:', {
fileName,
fileSize: fileInfo.size,
fileType
});
// 使用 Taro.uploadFile 进行文件上传
const response = await new Promise<Taro.uploadFile.SuccessCallbackResult>((resolve, reject) => {
const uploadTask = Taro.uploadFile({
url,
filePath,
name: 'file', // 服务端接收的字段名
header: {
'Accept': 'application/json'
},
formData: {
filename: fileName,
type: fileType
},
success: resolve,
fail: reject
});
// 监听上传进度
if (onProgress) {
uploadTask.progress((res) => {
const progress = Math.round((res.totalBytesSent / res.totalBytesExpectedToSend) * 100);
onProgress(progress);
});
}
});
// 检查 HTTP 状态码
if (response.statusCode !== 200) {
throw new Error(`HTTP ${response.statusCode}: 文件上传失败`);
}
// 解析响应数据
let result: ApiResponse<string>;
try {
result = JSON.parse(response.data) as ApiResponse<string>;
} catch (parseError) {
throw new Error('服务器响应格式错误');
}
// 检查业务状态码
if (!result.status) {
throw new Error(result.msg || '文件上传失败');
}
console.log('文件上传成功:', result.data);
return result.data;
} catch (error) {
console.error('文件上传失败:', error);
throw error;
}
}
```