feat: AI判赔预测表单UI优化 - 卡片布局/左右分栏/Word导出

- 结构化判赔预测表单改为卡片式布局(员工信息/争议事实/制度合规)
- 左右分栏:左栏表单(2/5),右栏AI结果(3/5),结果区固定高度可滚动
- 系统带出字段用Database图标替代文字标注
- 移除违纪记录摘要重复内容
- 三期信息整合到员工信息卡片内
- 新增AI分析结果导出Word文档功能(docx库)
- 后端roster API返回三期字段,修复特殊状态拼接逻辑
- 修复markdown渲染样式冲突(移除index.css中h1/h2/h3覆盖)
This commit is contained in:
selfrelease
2026-07-26 23:03:25 +08:00
parent d79e3baa34
commit 71e2bb2412
10 changed files with 1771 additions and 121 deletions
+114 -1
View File
@@ -224,7 +224,120 @@ ${orgContext}`
{ role: 'user', content: prompt },
],
temperature: 0.5,
max_tokens: 2000,
max_tokens: 8000,
stream: true,
})
for await (const chunk of stream) {
const delta = chunk.choices[0]?.delta?.content
if (delta) yield delta
}
}
/** 12 类争议场景中文映射 */
const SCENARIO_LABELS: Record<string, string> = {
discipline: '违纪解除',
incompetence: '不胜任解除',
probation: '试用期解除',
layoff: '经济性裁员',
expiry: '合同到期不续签',
negotiated: '协商解除',
transfer: '调岗调薪争议',
overtime: '加班费争议',
injury: '工伤待遇争议',
noncompete: '竞业限制争议',
confidentiality: '保密协议争议',
social_insurance: '社保公积金争议',
}
/**
* 结构化判赔预测流式输出
* @param scenarioType 争议场景类型
* @param keyFacts HR 填写的关键事实
* @param orgContext 企业上下文(员工信息等)
*/
export async function* predictStructuredStream(
scenarioType: string,
keyFacts: {
employeeName?: string
violationFact?: string
region?: string
monthlySalary?: string
democracyStatus?: string
disciplinaryRecord?: string
extraInfo?: string
},
orgContext: string,
) {
const scenarioLabel = SCENARIO_LABELS[scenarioType] || scenarioType
const factsText = [
keyFacts.employeeName ? `- 涉及员工:${keyFacts.employeeName}` : '',
keyFacts.violationFact ? `- 违纪/争议事实:${keyFacts.violationFact}` : '',
keyFacts.region ? `- 所在地区:${keyFacts.region}` : '',
keyFacts.monthlySalary ? `- 员工月薪:${keyFacts.monthlySalary}` : '',
keyFacts.democracyStatus ? `- 制度民主公示状态:${keyFacts.democracyStatus}` : '',
keyFacts.disciplinaryRecord ? `- 违纪记录留痕情况:${keyFacts.disciplinaryRecord}` : '',
keyFacts.extraInfo ? `- 补充信息:${keyFacts.extraInfo}` : '',
].filter(Boolean).join('\n')
const prompt = `你是一位资深劳动法律师,请基于以下争议场景和企业数据,进行专业的判赔风险分析。
## 争议场景
${scenarioLabel}
## 关键事实(由 HR 提供)
${factsText}
## 企业数据
${orgContext}
请使用 Markdown 格式输出,包含以下部分:
## 风险分析
分析企业在当前场景下的主要法律风险点,引用具体法律条文。
## 预估赔偿范围
根据员工月薪、工龄、地区裁判口径,给出经济补偿/赔偿金的预估范围(注意:此为参考值,实际以仲裁裁决为准):
| 项目 | 金额范围(元) | 计算依据 |
|------|--------------|----------|
## 建议方案
给出 2-3 个可行方案,按推荐度排序:
### 方案一(推荐)
- **操作步骤**...
- **预估成本**...
- **风险等级**:低/中/高
- **法律依据**...
### 方案二
- **操作步骤**...
- **预估成本**...
- **风险等级**:低/中/高
- **法律依据**...
## 关键注意事项
列出操作中必须注意的法律细节和证据要求。
> ⚠️ 以上分析基于当前提供的信息,仅供参考。实际仲裁结果受具体事实、证据、地区裁判口径等因素影响,建议在操作前咨询专业律师。`
const stream = await client.chat.completions.create({
model: 'qwen-plus',
messages: [
{
role: 'system',
content: '你是劳动用工法律风险评估专家,精通中国劳动法、劳动合同法及相关司法解释。请基于企业提供的事实和数据,给出专业、客观的风险分析和方案建议。请使用 Markdown 格式输出,善用表格、加粗、列表等格式。所有金额预估必须注明"仅供参考"。',
},
{ role: 'user', content: prompt },
],
temperature: 0.5,
max_tokens: 8000,
stream: true,
})
+1
View File
@@ -141,6 +141,7 @@ export async function getEmployees(orgId: string, params: { page?: number; pageS
isPregnant: emp.isPregnant,
isInMedicalPeriod: emp.isInMedicalPeriod,
isWorkInjured: emp.isWorkInjured,
city: emp.city,
}
})