Compare commits
3 Commits
3a8d10a7f5
...
abe7cdbbc3
| Author | SHA1 | Date | |
|---|---|---|---|
| abe7cdbbc3 | |||
| e50eca4fd4 | |||
| fa47373d57 |
+8
-8
@@ -135,14 +135,14 @@
|
||||
border-top: 3px solid $ok !important;
|
||||
}
|
||||
.thSupplierRec {
|
||||
background: $accent-bg !important;
|
||||
color: $accent-dark;
|
||||
border-top: 3px solid $accent !important;
|
||||
background: $ok-bg !important;
|
||||
color: $ok;
|
||||
border-top: 3px solid $ok !important;
|
||||
}
|
||||
.thSupplierSel {
|
||||
background: rgba($gold-500, 0.02) !important;
|
||||
background: rgba($ok, 0.05) !important;
|
||||
color: $text;
|
||||
border-top: 5px solid $accent !important;
|
||||
border-top: 5px solid $ok !important;
|
||||
}
|
||||
|
||||
.supplierHeaderCell {
|
||||
@@ -162,7 +162,7 @@
|
||||
.recBadge {
|
||||
font-size: 10px;
|
||||
font-weight: 600;
|
||||
background: $accent;
|
||||
background: $ok;
|
||||
color: $surface;
|
||||
border-radius: 10px;
|
||||
padding: 1px 6px;
|
||||
@@ -205,7 +205,7 @@
|
||||
font-size: 11px;
|
||||
padding: 2px 10px;
|
||||
border-radius: 3px;
|
||||
background: $accent;
|
||||
background: $ok;
|
||||
color: $surface;
|
||||
font-weight: 500;
|
||||
white-space: nowrap;
|
||||
@@ -214,7 +214,7 @@
|
||||
.selBadge {
|
||||
font-size: 10px;
|
||||
font-weight: 600;
|
||||
background: $accent;
|
||||
background: $ok;
|
||||
color: $surface;
|
||||
border-radius: 10px;
|
||||
padding: 1px 6px;
|
||||
|
||||
+8
@@ -198,6 +198,14 @@
|
||||
overflow-y: auto;
|
||||
}
|
||||
|
||||
// Модификатор для списка внутри диалога (замена согласующего): absolute-подсказки
|
||||
// обрезались телом диалога (overflow-y: auto). В потоке список раздвигает диалог,
|
||||
// а при длинном списке скроллится внутри него.
|
||||
.suggestionsInline {
|
||||
position: static;
|
||||
box-shadow: none;
|
||||
}
|
||||
|
||||
.suggestionItem {
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
|
||||
@@ -301,7 +301,7 @@ export const Step4Approval: React.FC<Props> = (props) => {
|
||||
/>
|
||||
</FormField>
|
||||
{a.replaceDialog.suggestions.length > 0 && !a.replaceDialog.selected && (
|
||||
<ul className={styles.suggestions}>
|
||||
<ul className={`${styles.suggestions} ${styles.suggestionsInline}`}>
|
||||
{a.replaceDialog.suggestions.map((s) => (
|
||||
<li
|
||||
key={s.spId}
|
||||
|
||||
@@ -248,6 +248,24 @@ export function useStep4Approval(args: UseStep4ApprovalArgs) {
|
||||
setChain(updatedChain);
|
||||
onSave({ approvalChain: updatedChain });
|
||||
|
||||
const allDone = updatedChain.every(
|
||||
(m) =>
|
||||
m.status === "approved" ||
|
||||
m.status === "skipped" ||
|
||||
m.status === "recommends"
|
||||
);
|
||||
|
||||
if (allDone) {
|
||||
// Финал: сначала статус «Согласовано», потом оповещение — иначе поток прочитает
|
||||
// «На согласовании» и не отправит «Согласована» (а раньше на финале вообще ничего
|
||||
// не слал, т.к. nextPending уже нет). Порядок как в ветке отклонения.
|
||||
await service.updateOIDStatus(oid!.id, "approved");
|
||||
onSave({ oid: { ...oid!, status: "approved" }, approvalChain: updatedChain });
|
||||
if (currentMember.spApprovalId) {
|
||||
await notify(currentMember.spApprovalId);
|
||||
}
|
||||
onStepComplete(4);
|
||||
} else {
|
||||
const nextPending = updatedChain.find((m) => m.status === "pending");
|
||||
if (nextPending) {
|
||||
if (currentMember.spApprovalId) {
|
||||
@@ -257,17 +275,6 @@ export function useStep4Approval(args: UseStep4ApprovalArgs) {
|
||||
await notify(nextPending.spApprovalId);
|
||||
}
|
||||
}
|
||||
|
||||
const allDone = updatedChain.every(
|
||||
(m) =>
|
||||
m.status === "approved" ||
|
||||
m.status === "skipped" ||
|
||||
m.status === "recommends"
|
||||
);
|
||||
if (allDone) {
|
||||
await service.updateOIDStatus(oid!.id, "approved");
|
||||
onSave({ oid: { ...oid!, status: "approved" }, approvalChain: updatedChain });
|
||||
onStepComplete(4);
|
||||
}
|
||||
} else {
|
||||
const othersToDelete = chain.filter(
|
||||
|
||||
Reference in New Issue
Block a user