Files
Public/apps/api/prisma/oa-json.ts
T
daiyongkang 76f266645d Initial commit: 风影 OA 全栈源码(API/Web/Flutter/IM)
含 Phase 1.1 IM seq 排序、断线重连、多端已读同步与微信式语音转文字 UI。
排除 node_modules、构建产物、安装包与 .env 密钥。

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-09-02 10:04:03 +00:00

24 lines
1.1 KiB
TypeScript
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
import * as fs from 'fs';
/** OA 雪花 ID 超过 Number.MAX_SAFE_INTEGERJSON.parse 会丢精度导致报销明细串单。 */
export function parseOaJson<T = Record<string, unknown>>(file: string): T {
const text = fs.readFileSync(file, 'utf8');
const safe = text.replace(
/"(id|reimbursement_id|project_id|employee_id|payer_id|created_by|updated_by|department_id|cc_user_id|offset_advance_id|current_approver_id|user_id|post_id|dept_id|apply_id|tender_id|contract_id)"\s*:\s*(-?\d+)/g,
'"$1":"$2"',
);
return JSON.parse(safe) as T;
}
export function mapExpenseLineKind(itemType: string, remark = '') {
const t = `${itemType}${remark}`;
if (t.includes('机票') || t.includes('航班')) return 'AIR';
if (t.includes('高铁')) return 'HSR';
if (t.includes('火车') || t.includes('卧铺')) return 'TRAIN';
if (t.includes('出租') || t.includes('打车') || t.includes('交通') || t.includes('高速')) return 'TAXI';
if (t.includes('住宿') || t.includes('酒店')) return 'HOTEL';
if (t.includes('餐')) return 'MEAL';
if (t.includes('办公') || t.includes('胶装')) return 'OFFICE';
return 'OTHER';
}