feat(web): AI 工作台多 task 串行推进与会话适配
- useWorkbenchAiApplicationPreviewFlow/useWorkbenchAiActionRouter/useWorkbenchAiCommandIntents 支持 task1 完成后自动推进 task2,确认按钮直接拉起申请预览,草稿/提交成功后继续推进下一 task - workbenchAiIntentPlannerModel/workbenchAiMessageModel/workbenchAiCommandIntentModel 适配多 task 意图规划与消息结构 - aiApplicationPreviewActions/aiApplicationPrecheckModel/aiExpenseDraftModel/aiWorkbenchConversationStore 草稿与会话存储适配 - PersonalWorkbenchAiMode 与样式适配,更新 preview-actions/expense-draft/conversation-store/fast-preview/action-router/command-intent/intent-planner 测试
This commit is contained in:
@@ -292,8 +292,20 @@ export function normalizeApplicationPreview(preview = {}) {
|
||||
...resolveApplicationValidationIssues(fields),
|
||||
...resolveApplicationSourceValidationIssues(preview?.sourceText, fields, preview)
|
||||
]
|
||||
const editableFields = Array.isArray(preview?.editableFields)
|
||||
? preview.editableFields
|
||||
: Array.isArray(preview?.editable_fields)
|
||||
? preview.editable_fields
|
||||
: null
|
||||
return {
|
||||
...preview,
|
||||
...(editableFields
|
||||
? {
|
||||
editableFields: editableFields
|
||||
.map((field) => String(field || '').trim())
|
||||
.filter(Boolean)
|
||||
}
|
||||
: {}),
|
||||
fields,
|
||||
missingFields,
|
||||
validationIssues,
|
||||
@@ -301,6 +313,37 @@ export function normalizeApplicationPreview(preview = {}) {
|
||||
}
|
||||
}
|
||||
|
||||
function resolveApplicationPreviewEditableFields(preview = {}) {
|
||||
const source = Array.isArray(preview?.editableFields)
|
||||
? preview.editableFields
|
||||
: Array.isArray(preview?.editable_fields)
|
||||
? preview.editable_fields
|
||||
: null
|
||||
if (!Array.isArray(source)) {
|
||||
return null
|
||||
}
|
||||
const fields = new Set(
|
||||
source
|
||||
.map((field) => String(field || '').trim())
|
||||
.filter(Boolean)
|
||||
)
|
||||
if (fields.has('time')) {
|
||||
fields.add('time_return')
|
||||
}
|
||||
return fields
|
||||
}
|
||||
|
||||
function isApplicationPreviewFieldEditable(preview = {}, item = {}, rowKey = '') {
|
||||
if (item.editable === false) {
|
||||
return false
|
||||
}
|
||||
const editableFields = resolveApplicationPreviewEditableFields(preview)
|
||||
if (!editableFields) {
|
||||
return true
|
||||
}
|
||||
return editableFields.has(rowKey)
|
||||
}
|
||||
|
||||
export function applyApplicationBusinessTimeContext(preview = {}, businessTimeContext = null) {
|
||||
if (!businessTimeContext || typeof businessTimeContext !== 'object') {
|
||||
return normalizeApplicationPreview(preview)
|
||||
@@ -394,7 +437,7 @@ export function buildApplicationPreviewRows(preview = {}) {
|
||||
...item,
|
||||
label: '出发时间',
|
||||
value: tripDates.startDate || '待补充',
|
||||
editable: item.editable !== false,
|
||||
editable: isApplicationPreviewFieldEditable(normalized, item, 'time'),
|
||||
highlight: Boolean(item.highlight),
|
||||
missing
|
||||
},
|
||||
@@ -402,7 +445,7 @@ export function buildApplicationPreviewRows(preview = {}) {
|
||||
key: 'time_return',
|
||||
label: '返回时间',
|
||||
value: tripDates.endDate || '待补充',
|
||||
editable: item.editable !== false,
|
||||
editable: isApplicationPreviewFieldEditable(normalized, item, 'time_return'),
|
||||
highlight: Boolean(item.highlight),
|
||||
missing
|
||||
}
|
||||
@@ -415,7 +458,7 @@ export function buildApplicationPreviewRows(preview = {}) {
|
||||
...item,
|
||||
label: resolveApplicationFieldLabel(item, fields),
|
||||
value,
|
||||
editable: item.editable !== false,
|
||||
editable: isApplicationPreviewFieldEditable(normalized, item, item.key),
|
||||
highlight: Boolean(item.highlight),
|
||||
missing: item.required !== false && !isApplicationPreviewValueProvided(rawValue)
|
||||
}]
|
||||
@@ -484,6 +527,10 @@ export function buildApplicationTemplatePreview(currentUser = {}) {
|
||||
export function buildLocalApplicationPreviewMessage(preview) {
|
||||
const normalized = normalizeApplicationPreview(preview)
|
||||
const modelReviewStatus = String(normalized.modelReviewStatus || '').trim()
|
||||
const editMode = Boolean(normalized.applicationEditMode || normalized.application_edit_mode)
|
||||
if (editMode) {
|
||||
return '我已载入原申请信息。请只修改事由、时间、地点和出行方式;职级、负责人、标准和费用会按规则带入或重新测算。'
|
||||
}
|
||||
return [
|
||||
modelReviewStatus === 'completed'
|
||||
? '我已完成模型复核,并整理成下方表格。请核查识别结果;点击对应行即可直接编辑。'
|
||||
|
||||
Reference in New Issue
Block a user