diff --git a/web/src/components/project/ProjectSettingsModal.tsx b/web/src/components/project/ProjectSettingsModal.tsx index 34ca41af..9231d22f 100644 --- a/web/src/components/project/ProjectSettingsModal.tsx +++ b/web/src/components/project/ProjectSettingsModal.tsx @@ -29,11 +29,12 @@ import { } from '../../lib/projectSettingsMode'; import { canToggleHumanApproval, - classifyClientDuty, clientDutyIssues, formatDutyIssues, locateDutyIssue, needsThreeMembersForDuties, + resolveClientDocTaskDuty, + toggleAuthorOnly, toggleHumanApproval, } from '../../lib/projectSettingsDuties'; import { ACTIVATION_UNMANAGED_FREEZE_HINT } from '../../lib/blockedGovernanceCopy'; @@ -502,7 +503,13 @@ export const ProjectSettingsModal: React.FC = ({
{st.stage_name || st.stage_key}
{st.doc_tasks.map((dt, ti) => { - const managed = classifyClientDuty(dt.duties) !== 'none' || requireApprovalKeys.includes(dt.task_key); + const resolved = resolveClientDocTaskDuty(dt); + const managed = + resolved.mode !== 'none' || + dt.duty_policy === 'author_only' || + requireApprovalKeys.includes(dt.task_key); + const authorOnly = dt.duty_policy === 'author_only'; + const authorOnlyAllowed = Boolean(settings?.author_only_policy?.allowed); const inline = locateDutyIssue(dutyIssues, dt.task_key); return (
@@ -530,7 +537,63 @@ export const ProjectSettingsModal: React.FC = ({ 纳入人工审批 )} + {dt.enabled && managed && ( + + )} {dt.enabled && (managed || !dt.approval_configurable) && ( + authorOnly ? ( +
+ + {dt.duties.author_user_id ? ( +
+ 审核、批准:同编制人(自动承担) +
+ ) : null} +
+ ) : (
{(['author', 'reviewer', 'approver'] as const).map((role) => ( ))}
+ ) )} {inline?.message && (
{inline.message}
@@ -587,6 +651,16 @@ export const ProjectSettingsModal: React.FC = ({ 纳入人工审批:{preview.summary.governed_doc_tasks ?? preview.summary.enabled_doc_tasks} · 不纳入:{preview.summary.unmanaged_doc_tasks ?? 0}
职责指派:{preview.summary.assigned_duties} 项
+ {(preview.summary.author_only_doc_tasks ?? 0) > 0 && ( +
+ 兼任审批:{preview.summary.author_only_doc_tasks} 份 + {(preview.summary.author_only_documents || []).length > 0 + ? `(${(preview.summary.author_only_documents || []) + .map((doc) => doc.title || doc.task_key) + .join('、')})` + : ''} +
+ )} {(preview.summary.unmanaged_documents || []).length > 0 && (
例外文档:{(preview.summary.unmanaged_documents || []).map((doc) => doc.title || doc.task_key).join('、')}