feat: added status next in que and changed forms state machine

This commit is contained in:
Тимур Городецкий
2026-08-05 13:53:26 +05:00
parent 5bc80df11c
commit 571614c031
18 changed files with 373 additions and 68 deletions
@@ -3,6 +3,7 @@ import styles from './approval.module.scss';
import { Icon } from '../../ui';
import { IUseMatrixEditor } from '../useMatrixEditor';
import { ISiteUser } from '../models/ISiteUser';
import { StatusBadge } from './StatusBadge';
import { UserPicker } from './UserPicker';
export interface IApprovalMatrixProps {
@@ -53,7 +54,7 @@ export const ApprovalMatrix: React.FC<IApprovalMatrixProps> = ({
<tr key={i}>
<td>{r.who}</td>
<td>{r.position}</td>
<td>{r.status}</td>
<td>{r.status && r.status !== '—' ? <StatusBadge status={r.status} /> : '—'}</td>
<td>{r.date}</td>
{editable && (
<td className={styles.matrixActions}>
@@ -74,8 +74,10 @@ export const DecisionPanel: React.FC<IDecisionPanelProps> = ({ service, requestI
const isExecution = phase === APPROVAL_PHASE.execution;
if (checking) {
return <div className={styles.state}>Проверяем вашу очередь…</div>;
// Пока проверяем очередь или если действий нет (не твоя очередь / заявка
// обработана / тебя нет в маршруте) — панель не показываем вовсе.
if (checking || rowId === undefined) {
return null;
}
if (resultStatus) {
@@ -89,14 +91,6 @@ export const DecisionPanel: React.FC<IDecisionPanelProps> = ({ service, requestI
);
}
if (rowId === undefined) {
return (
<div className={styles.panel}>
<Alert variant="warn">Сейчас не ваша очередь, либо заявка уже обработана.</Alert>
</div>
);
}
// Фаза исполнения: одно действие «Выполнено» (без обязательного комментария),
// строка помечается как «Согласовано» → computeRequestStatus переведёт заявку в
// «Выполнение»/«Закрыта».
@@ -114,7 +108,7 @@ export const DecisionPanel: React.FC<IDecisionPanelProps> = ({ service, requestI
/>
</FormField>
<div className={styles.actions}>
<Button variant="accent" disabled={submitting} onClick={() => decide('approve')}>
<Button variant="accent" disabled={submitting} onClick={() => decide('execute')}>
<Icon name="check" size="sm" />
Выполнено
</Button>
@@ -17,6 +17,11 @@
color: $gray-700;
}
.queued {
background: $gray-100;
color: $gray-500;
}
.onApproval {
background: $blue-50;
color: $blue-600;
@@ -5,8 +5,11 @@ import { REQUEST_STATUS } from '../models/statuses';
// Цвет бейджа по статусу заявки. Неизвестный статус → нейтральный (как черновик).
const VARIANT: Record<string, string> = {
[REQUEST_STATUS.draft]: styles.draft,
[REQUEST_STATUS.queued]: styles.queued,
[REQUEST_STATUS.onApproval]: styles.onApproval,
[REQUEST_STATUS.onExecution]: styles.onApproval, // активный шаг — как «на согласовании»
[REQUEST_STATUS.approved]: styles.approved,
[REQUEST_STATUS.executed]: styles.approved, // выполнено — как «согласовано» (зелёный)
[REQUEST_STATUS.rejected]: styles.rejected,
[REQUEST_STATUS.returned]: styles.returned,
[REQUEST_STATUS.execution]: styles.execution,