fix(marketplace): ttn_number varchar(32)→64 + UX подготовки отгрузки
- ttn_number в shipment/apl_reception: 32→64. Номер ТТН COOPNAME-TTN-<cycle8>-<ku6>-<suffix8> ≈ 36–42 символов переполнял varchar(32) → «value too long» при формировании партии экспедитора. Требует рестарта контроллера (synchronize применит ALTER, увеличение длины безопасно). - CreateShipmentDialog: maximized для удобной работы с dual-list. - OperatorBranchBar: при выборе из нескольких участков убран дублирующий крупный заголовок (название КУ повторялось в селекте «Участок-Участок»); селектор стал основным идентификатором, адрес — под ним. Один участок — по-прежнему текстом. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
+2
-1
@@ -61,7 +61,8 @@ export class MarketplaceAplReceptionEntity {
|
||||
@Column({ type: 'jsonb' })
|
||||
public fact_quantity_per_order!: MarketplaceAplReceptionFactQuantityEntry[];
|
||||
|
||||
@Column({ type: 'varchar', length: 32, nullable: true })
|
||||
// length=64 — копируется из shipment.ttn_number (см. marketplace-shipment.entity).
|
||||
@Column({ type: 'varchar', length: 64, nullable: true })
|
||||
public ttn_number!: string | null;
|
||||
|
||||
@Column({ type: 'jsonb', nullable: true })
|
||||
|
||||
+3
-1
@@ -56,7 +56,9 @@ export class MarketplaceShipmentEntity {
|
||||
@Column({ type: 'numeric', precision: 24, scale: 4 })
|
||||
public total_amount!: string;
|
||||
|
||||
@Column({ type: 'varchar', length: 32, nullable: true })
|
||||
// length=64: номер ТТН = COOPNAME-TTN-<cycle8>-<ku6>-<suffix8> + дефисы ≈ 36–42
|
||||
// символов (varchar(32) переполнялся при формировании партии экспедитора).
|
||||
@Column({ type: 'varchar', length: 64, nullable: true })
|
||||
public ttn_number!: string | null;
|
||||
|
||||
@Column({ type: 'jsonb', nullable: true })
|
||||
|
||||
@@ -34,16 +34,20 @@ const options = computed<BaseSelectOption[]>(() =>
|
||||
<template lang="pug">
|
||||
.op-branch-bar(v-if='store.isOperator')
|
||||
q-icon.op-branch-bar__icon(name='storefront', size='24px')
|
||||
.op-branch-bar__info
|
||||
//- Несколько участков: селектор — основной идентификатор, адрес под ним.
|
||||
//- Крупный заголовок не показываем — название КУ дублировалось бы в селекте.
|
||||
.op-branch-bar__info(v-if='store.hasMultiple')
|
||||
BaseSelect.op-branch-bar__select(
|
||||
:model-value='store.activeBraname',
|
||||
:options='options',
|
||||
label='Участок',
|
||||
@update:model-value='store.setActive(String($event))'
|
||||
)
|
||||
.op-branch-bar__sub(v-if='subtitle') {{ subtitle }}
|
||||
//- Один участок: выбора нет — показываем текстом.
|
||||
.op-branch-bar__info(v-else)
|
||||
.op-branch-bar__title {{ title }}
|
||||
.op-branch-bar__sub(v-if='subtitle') {{ subtitle }}
|
||||
BaseSelect.op-branch-bar__select(
|
||||
v-if='store.hasMultiple',
|
||||
:model-value='store.activeBraname',
|
||||
:options='options',
|
||||
label='Участок',
|
||||
@update:model-value='store.setActive(String($event))'
|
||||
)
|
||||
BaseBadge(:variant='status.variant') {{ status.label }}
|
||||
</template>
|
||||
|
||||
@@ -66,6 +70,9 @@ const options = computed<BaseSelectOption[]>(() =>
|
||||
&__info {
|
||||
flex: 1 1 auto;
|
||||
min-width: 0;
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
gap: var(--p-1, 4px);
|
||||
}
|
||||
|
||||
&__title {
|
||||
@@ -81,7 +88,7 @@ const options = computed<BaseSelectOption[]>(() =>
|
||||
|
||||
&__select {
|
||||
min-width: 220px;
|
||||
flex-shrink: 0;
|
||||
max-width: 360px;
|
||||
}
|
||||
}
|
||||
</style>
|
||||
|
||||
+1
-1
@@ -194,7 +194,7 @@ async function submit(): Promise<void> {
|
||||
BaseDialog(
|
||||
:model-value='modelValue',
|
||||
title='Сформировать партию',
|
||||
size='lg',
|
||||
maximized,
|
||||
@update:model-value='emit("update:modelValue", $event)'
|
||||
)
|
||||
.create-shipment(v-if='buckets.length')
|
||||
|
||||
Reference in New Issue
Block a user