From bb047a95f419b9205dafbbc8b151f918058039c8 Mon Sep 17 00:00:00 2001 From: Veronika Tsygankova Date: Thu, 5 Nov 2026 09:49:58 +0300 Subject: [PATCH 1/4] =?UTF-8?q?[AURORA-1966]:=20=D0=A1=D0=BF=D1=80=D0=B0?= =?UTF-8?q?=D0=B2=D0=BE=D1=87=D0=BD=D0=B8=D0=BA=D0=B8=20=D0=93=D0=9A=20?= =?UTF-8?q?=D0=B8=20=D0=BE=D1=80=D0=B3=D0=B0=D0=BD=D0=B8=D0=B7=D0=B0=D1=86?= =?UTF-8?q?=D0=B8=D0=B9=20=D0=BF=D1=80=D0=B8=D0=B2=D0=B5=D0=B4=D0=B5=D0=BD?= =?UTF-8?q?=D0=B8=D0=B5=20=D0=BA=20=D0=BC=D0=B0=D0=BA=D0=B5=D1=82=D1=83?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- web/src/index.css | 5 ++ web/src/index.tsx | 2 +- .../CatalogueCompanyGroupTabs.css | 64 ++++++++++++++++++- .../CatalogueCompanyGroupTabs.tsx | 22 +++++-- .../CatalogueJur/CatalogueJurTable/config.tsx | 2 +- .../RelatedGroupForm/RelatedGroupForm.tsx | 2 +- 6 files changed, 86 insertions(+), 11 deletions(-) diff --git a/web/src/index.css b/web/src/index.css index f4fdb65..bd75d66 100644 --- a/web/src/index.css +++ b/web/src/index.css @@ -156,3 +156,8 @@ body { font-family: "Geist", "Gill Sans MT", Calibri, "Trebuchet MS", sans-serif; margin: 0px; } + +/* Подписи полей во всех формах полужирные */ +.ant-form-item-label > label { + font-weight: 600; +} diff --git a/web/src/index.tsx b/web/src/index.tsx index 83b74ef..ee73778 100644 --- a/web/src/index.tsx +++ b/web/src/index.tsx @@ -50,7 +50,7 @@ createRoot(rootElement).render( }, Form: { labelFontSize: 12, - labelColor: '#667085', + labelColor: '#101828', }, }, }}> diff --git a/web/src/widgets/CatalogueCompanyGroup/CatalogueCompanyGroupTabs/CatalogueCompanyGroupTabs.css b/web/src/widgets/CatalogueCompanyGroup/CatalogueCompanyGroupTabs/CatalogueCompanyGroupTabs.css index 6c551ff..75a25c7 100644 --- a/web/src/widgets/CatalogueCompanyGroup/CatalogueCompanyGroupTabs/CatalogueCompanyGroupTabs.css +++ b/web/src/widgets/CatalogueCompanyGroup/CatalogueCompanyGroupTabs/CatalogueCompanyGroupTabs.css @@ -1,9 +1,67 @@ -.ant-tabs-tab-active { - background-color: #ecfdf3 !important; +.catalogue-company-group-tabs { + padding-top: 8px; +} + +.ant-tabs-nav { + margin: 0 !important; +} + +.ant-tabs-nav-list { + gap: 8px; } .ant-tabs-tab { padding: 8px 12px !important; - margin: 10px 0 0 0 !important; + margin: 0 !important; border-radius: 8px !important; + display: flex; + align-items: center; } + +.ant-tabs-tab-active { + background-color: #ecfdf3 !important; +} + +.ant-tabs-tab-btn { + display: flex; + align-items: center; + font-size: 14px; + line-height: 1; + color: #667085 !important; +} + +.ant-tabs-tab-active .ant-tabs-tab-btn { + color: #166534 !important; + font-weight: 600; +} + +.ant-tabs-ink-bar { + display: none !important; +} + +.catalogue-company-group-tabs__label { + display: inline-flex; + align-items: center; + gap: 8px; +} + +.catalogue-company-group-tabs__count { + display: inline-flex; + align-items: center; + justify-content: center; + min-width: 20px; + height: 20px; + padding: 0 6px; + border-radius: 50%; + background-color: #f0f2f5; + color: #667085; + font-size: 12px; + line-height: 1; + font-weight: 500; +} + +.ant-tabs-tab-active .catalogue-company-group-tabs__count { + background-color: transparent; + color: #166534; + font-weight: 600; +} \ No newline at end of file diff --git a/web/src/widgets/CatalogueCompanyGroup/CatalogueCompanyGroupTabs/CatalogueCompanyGroupTabs.tsx b/web/src/widgets/CatalogueCompanyGroup/CatalogueCompanyGroupTabs/CatalogueCompanyGroupTabs.tsx index b6f770b..712d8c8 100644 --- a/web/src/widgets/CatalogueCompanyGroup/CatalogueCompanyGroupTabs/CatalogueCompanyGroupTabs.tsx +++ b/web/src/widgets/CatalogueCompanyGroup/CatalogueCompanyGroupTabs/CatalogueCompanyGroupTabs.tsx @@ -11,22 +11,34 @@ interface CatalogueCompanyGroupTabsI { export type CatalogueCompanyGroupTabKey = 'legal_entities' | 'gsk' | 'gsz'; +const TabLabel = ({ title, count }: { title: string; count: number }) => ( + + {title} + {count} + +); + export const CatalogueCompanyGroupTabs = ({ activeTab, setActiveTab, gskData, gszData }: CatalogueCompanyGroupTabsI) => { const activeCompanyGroup = useAppSelector((state) => state.catalogue_jur.activeCompanyGroup); return ( setActiveTab(key as CatalogueCompanyGroupTabKey)} - tabBarStyle={{ margin: 0, marginBottom: 0 }} - style={{ marginBottom: 0 }} items={[ { key: 'legal_entities', - label: `ЮЛ ${activeCompanyGroup?.legal_entities_count ?? 0}`, + label: , + }, + { + key: 'gsk', + label: , + }, + { + key: 'gsz', + label: , }, - { key: 'gsk', label: `ГСК ${gskData?.length ?? 0}` }, - { key: 'gsz', label: `ГСЗ ${gszData?.length ?? 0}` }, ]} /> ); diff --git a/web/src/widgets/CatalogueJur/CatalogueJurTable/config.tsx b/web/src/widgets/CatalogueJur/CatalogueJurTable/config.tsx index 7be6ee9..8197075 100644 --- a/web/src/widgets/CatalogueJur/CatalogueJurTable/config.tsx +++ b/web/src/widgets/CatalogueJur/CatalogueJurTable/config.tsx @@ -39,7 +39,7 @@ export const catalogueJurConfig: TableConfig = { title: 'Тип', features: { multiselect: true, sort: true }, render: (val) => { - const preset = val === 'ЮЛ' ? TAG_PRESETS.orange : TAG_PRESETS.purple; + const preset = val === 'ЮЛ' ? TAG_PRESETS.purple : TAG_PRESETS.orange; return ; }, }, diff --git a/web/src/widgets/RelatedGroup/RelatedGroupForm/RelatedGroupForm.tsx b/web/src/widgets/RelatedGroup/RelatedGroupForm/RelatedGroupForm.tsx index b796691..4e6bc39 100644 --- a/web/src/widgets/RelatedGroup/RelatedGroupForm/RelatedGroupForm.tsx +++ b/web/src/widgets/RelatedGroup/RelatedGroupForm/RelatedGroupForm.tsx @@ -111,7 +111,7 @@ export const RelatedGroupForm: React.FC = ({ open, onCancel, onOk, relate loading={initialDataLoading} confirmLoading={confirmLoading}>
- + From 1a3fed537fa9710e6e1e0e372ac288cec514fad8 Mon Sep 17 00:00:00 2001 From: Veronika Tsygankova Date: Thu, 5 Nov 2026 14:35:58 +0300 Subject: [PATCH 2/4] =?UTF-8?q?[AURORA-1970]:=20=D0=A1=D0=BF=D1=80=D0=B0?= =?UTF-8?q?=D0=B2=D0=BE=D1=87=D0=BD=D0=B8=D0=BA=D0=B8:=20=D1=81=D0=BE?= =?UTF-8?q?=D1=81=D1=82=D0=B0=D0=B2=20=D0=93=D0=A1=D0=9A/=D0=93=D0=A1?= =?UTF-8?q?=D0=97=20=D0=B8=20=D1=80=D0=B5=D0=B5=D1=81=D1=82=D1=80=20=C2=AB?= =?UTF-8?q?=D0=AE=D0=9B=20=D0=B2=D0=BD=D0=B5=20=D0=93=D0=9A=C2=BB?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- web/src/layouts/CatalogueJur.tsx | 1 + .../slices/catalogueJurSlice/catalogueJurSlice.ts | 6 +++++- .../CatalogueJur/CatalogueJurForm/CatalogueJurForm.tsx | 9 ++++++--- .../CatalogueJurTable/CatalogueJurTable.tsx | 10 ++++++++-- 4 files changed, 20 insertions(+), 6 deletions(-) diff --git a/web/src/layouts/CatalogueJur.tsx b/web/src/layouts/CatalogueJur.tsx index 537dd33..6c01029 100644 --- a/web/src/layouts/CatalogueJur.tsx +++ b/web/src/layouts/CatalogueJur.tsx @@ -45,6 +45,7 @@ export function CatalogueJur() { {createFormOpen && ( { setCreateFormOpen(false); }} diff --git a/web/src/store/slices/catalogueJurSlice/catalogueJurSlice.ts b/web/src/store/slices/catalogueJurSlice/catalogueJurSlice.ts index 7abf90b..2f8cb32 100644 --- a/web/src/store/slices/catalogueJurSlice/catalogueJurSlice.ts +++ b/web/src/store/slices/catalogueJurSlice/catalogueJurSlice.ts @@ -29,6 +29,10 @@ const catalogueJurSlice = createSlice({ state.activeCompanyGroup = action.payload; state.relatedGroupFilter = null; }, + resetRows(state) { + state.raw_rows = []; + state.total_groups = 0; + }, }, extraReducers: (builder) => { builder @@ -54,5 +58,5 @@ const catalogueJurSlice = createSlice({ }, }); -export const { setIsGettingArchive, setRelatedGroupFilter, setActiveCompanyGroup } = catalogueJurSlice.actions; +export const { setIsGettingArchive, setRelatedGroupFilter, setActiveCompanyGroup, resetRows } = catalogueJurSlice.actions; export default catalogueJurSlice.reducer; diff --git a/web/src/widgets/CatalogueJur/CatalogueJurForm/CatalogueJurForm.tsx b/web/src/widgets/CatalogueJur/CatalogueJurForm/CatalogueJurForm.tsx index afce0b8..9c338b6 100644 --- a/web/src/widgets/CatalogueJur/CatalogueJurForm/CatalogueJurForm.tsx +++ b/web/src/widgets/CatalogueJur/CatalogueJurForm/CatalogueJurForm.tsx @@ -16,6 +16,7 @@ type Props = { onCancel: () => void; onOk: (values: CatalogueJurFormProps) => void | Promise; jurId?: string; + outsideGroup?: boolean; }; // Ошибки сервера, относящиеся к одному полю, показываем у этого поля @@ -26,7 +27,7 @@ const FIELD_BY_ERROR_CODE: Record = { CRM_ID_EXISTS: 'crm_id', }; -export const CatalogueJurForm: React.FC = ({ open, onCancel, onOk, jurId }) => { +export const CatalogueJurForm: React.FC = ({ open, onCancel, onOk, jurId, outsideGroup = false }) => { const [form] = Form.useForm(); const notification = useNotificationApi(); const [initialDataLoading, setInitialDataLoading] = useState(false); @@ -67,7 +68,9 @@ export const CatalogueJurForm: React.FC = ({ open, onCancel, onOk, jurId } finally { setInitialDataLoading(false); } - } else { + } else if (!outsideGroup) { + // Создание из карточки ГК: подставляем выбранную ГК. В «ЮЛ вне ГК» не подставляем — + // выбранная ГК остаётся в сторе после ухода со страницы «ГК и организации». form.setFieldsValue({ company_group_id: activeCompanyGroup?.id ?? undefined, }); @@ -253,7 +256,7 @@ export const CatalogueJurForm: React.FC = ({ open, onCancel, onOk, jurId } - placeholder='Поиск по ГК, CRM ID или РФ' + placeholder='Поиск по ЮЛ или ИНН' value={rawQuery} onChange={(e) => setRawQuery(e.target.value)} style={{ maxWidth: 320 }} From 2f8f4138af4d4ddcf83d8fe16c9f85235cead2e0 Mon Sep 17 00:00:00 2001 From: Veronika Tsygankova Date: Tue, 10 Nov 2026 17:51:53 +0300 Subject: [PATCH 3/4] =?UTF-8?q?[AURORA-1970]=20-=20=D0=B4=D0=BE=D0=B1?= =?UTF-8?q?=D0=B0=D0=B2=D0=BB=D0=B5=D0=BD=D0=B0=20=D0=BF=D0=B5=D1=80=D0=B5?= =?UTF-8?q?=D0=B4=D0=B0=D1=87=D0=B0=20requestId?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../slices/catalogueJurSlice/catalogueJurSlice.ts | 11 ++++++++++- web/src/store/slices/catalogueJurSlice/types.ts | 1 + 2 files changed, 11 insertions(+), 1 deletion(-) diff --git a/web/src/store/slices/catalogueJurSlice/catalogueJurSlice.ts b/web/src/store/slices/catalogueJurSlice/catalogueJurSlice.ts index 2f8cb32..e863b79 100644 --- a/web/src/store/slices/catalogueJurSlice/catalogueJurSlice.ts +++ b/web/src/store/slices/catalogueJurSlice/catalogueJurSlice.ts @@ -10,6 +10,7 @@ const initialState: CatalogueJurSliceType = { total_groups: 0, loading: false, error: null, + currentRequestId: null, isGettingArchive: false, relatedGroupFilter: null, activeCompanyGroup: null, @@ -32,22 +33,30 @@ const catalogueJurSlice = createSlice({ resetRows(state) { state.raw_rows = []; state.total_groups = 0; + // Запрос, начатый до сброса, больше не нужен: его ответ отбросится в fulfilled/rejected + state.currentRequestId = null; + state.loading = false; }, }, extraReducers: (builder) => { builder - .addCase(getCatalogueJurThunk.pending, (state, _) => { + .addCase(getCatalogueJurThunk.pending, (state, action) => { + state.currentRequestId = action.meta.requestId; state.loading = true; state.error = null; }) .addCase(getCatalogueJurThunk.fulfilled, (state, action) => { + if (action.meta.requestId !== state.currentRequestId) return; state.raw_rows = action.payload.items; state.total_groups = action.payload.total; state.loading = false; + state.currentRequestId = null; }) .addCase(getCatalogueJurThunk.rejected, (state, action) => { + if (action.meta.requestId !== state.currentRequestId) return; state.error = action.payload ?? 'Неизвестная ошибка'; state.loading = false; + state.currentRequestId = null; }) // Выбранная ГК — копия строки списка ГК: после перезагрузки списка берём свежую (счётчик ЮЛ в шапке и вкладке) .addCase(getCompanyGroupsThunk.fulfilled, (state, action) => { diff --git a/web/src/store/slices/catalogueJurSlice/types.ts b/web/src/store/slices/catalogueJurSlice/types.ts index 7227c33..9048d8a 100644 --- a/web/src/store/slices/catalogueJurSlice/types.ts +++ b/web/src/store/slices/catalogueJurSlice/types.ts @@ -7,6 +7,7 @@ export interface CatalogueJurSliceType { raw_rows: ICatalogueJur[]; loading: boolean; error: string | null; + currentRequestId: string | null; isGettingArchive: boolean; relatedGroupFilter?: RelatedGroupOut | null; activeCompanyGroup?: ICompanyGroup | null; From 24fe82cddf4fbf69e5e910233436745bcda85318 Mon Sep 17 00:00:00 2001 From: Veronika Tsygankova Date: Tue, 10 Nov 2026 18:07:17 +0300 Subject: [PATCH 4/4] =?UTF-8?q?[AURORA-1966]=20=D0=BF=D0=BE=D0=BF=D1=80?= =?UTF-8?q?=D0=B0=D0=B2=D0=BB=D0=B5=D0=BD=D1=8B=20=D0=BD=D0=B0=D0=B7=D0=B2?= =?UTF-8?q?=D0=B0=D0=BD=D0=B8=D1=8F=20=D0=BA=D0=BB=D0=B0=D1=81=D1=81=D0=BE?= =?UTF-8?q?=D0=B2?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../CatalogueCompanyGroupTabs.css | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/web/src/widgets/CatalogueCompanyGroup/CatalogueCompanyGroupTabs/CatalogueCompanyGroupTabs.css b/web/src/widgets/CatalogueCompanyGroup/CatalogueCompanyGroupTabs/CatalogueCompanyGroupTabs.css index 75a25c7..fb2568b 100644 --- a/web/src/widgets/CatalogueCompanyGroup/CatalogueCompanyGroupTabs/CatalogueCompanyGroupTabs.css +++ b/web/src/widgets/CatalogueCompanyGroup/CatalogueCompanyGroupTabs/CatalogueCompanyGroupTabs.css @@ -2,15 +2,15 @@ padding-top: 8px; } -.ant-tabs-nav { +.catalogue-company-group-tabs .ant-tabs-nav { margin: 0 !important; } -.ant-tabs-nav-list { +.catalogue-company-group-tabs .ant-tabs-nav-list { gap: 8px; } -.ant-tabs-tab { +.catalogue-company-group-tabs .ant-tabs-tab { padding: 8px 12px !important; margin: 0 !important; border-radius: 8px !important; @@ -18,11 +18,11 @@ align-items: center; } -.ant-tabs-tab-active { +.catalogue-company-group-tabs .ant-tabs-tab-active { background-color: #ecfdf3 !important; } -.ant-tabs-tab-btn { +.catalogue-company-group-tabs .ant-tabs-tab-btn { display: flex; align-items: center; font-size: 14px; @@ -30,12 +30,12 @@ color: #667085 !important; } -.ant-tabs-tab-active .ant-tabs-tab-btn { +.catalogue-company-group-tabs .ant-tabs-tab-active .ant-tabs-tab-btn { color: #166534 !important; font-weight: 600; } -.ant-tabs-ink-bar { +.catalogue-company-group-tabs .ant-tabs-ink-bar { display: none !important; } @@ -52,7 +52,7 @@ min-width: 20px; height: 20px; padding: 0 6px; - border-radius: 50%; + border-radius: 10px; background-color: #f0f2f5; color: #667085; font-size: 12px; @@ -60,7 +60,7 @@ font-weight: 500; } -.ant-tabs-tab-active .catalogue-company-group-tabs__count { +.catalogue-company-group-tabs .ant-tabs-tab-active .catalogue-company-group-tabs__count { background-color: transparent; color: #166534; font-weight: 600;