init equipment & change-status

This commit is contained in:
MaKarin
2026-04-03 21:45:13 -07:00
parent c89c23fd1d
commit cec42f08d0
87 changed files with 19086 additions and 86 deletions

View File

@@ -0,0 +1,30 @@
import {
AutocompleteInput,
Create,
DateInput,
ReferenceInput,
SelectInput,
SimpleForm,
TextInput as RaTextInput,
} from 'react-admin';
import { equipmentStatusChoices, equipmentOptionText } from '../equipment/shared';
export function ChangeEquipmentStatusCreate() {
return (
<Create>
<SimpleForm>
<ReferenceInput source="equipmentId" reference="equipment">
<AutocompleteInput
label="Оборудование"
optionText={equipmentOptionText}
filterToQuery={(searchText) => ({ q: searchText })}
/>
</ReferenceInput>
<SelectInput source="newStatus" label="Новый статус" choices={equipmentStatusChoices} required />
<DateInput source="date" label="Дата" required />
<RaTextInput source="number" label="Номер" />
<RaTextInput source="responsible" label="Ответственный" />
</SimpleForm>
</Create>
);
}

View File

@@ -0,0 +1,30 @@
import {
AutocompleteInput,
DateInput,
Edit,
ReferenceInput,
SelectInput,
SimpleForm,
TextInput as RaTextInput,
} from 'react-admin';
import { equipmentStatusChoices, equipmentOptionText } from '../equipment/shared';
export function ChangeEquipmentStatusEdit() {
return (
<Edit>
<SimpleForm>
<ReferenceInput source="equipmentId" reference="equipment">
<AutocompleteInput
label="Оборудование"
optionText={equipmentOptionText}
filterToQuery={(searchText) => ({ q: searchText })}
/>
</ReferenceInput>
<SelectInput source="newStatus" label="Новый статус" choices={equipmentStatusChoices} />
<DateInput source="date" label="Дата" />
<RaTextInput source="number" label="Номер" />
<RaTextInput source="responsible" label="Ответственный" />
</SimpleForm>
</Edit>
);
}

View File

@@ -0,0 +1,42 @@
import {
Datagrid,
DateField,
FilterButton,
List,
ReferenceField,
SelectArrayInput,
SelectField,
TextField,
TextInput,
TopToolbar,
} from 'react-admin';
import { equipmentStatusChoices } from '../equipment/shared';
const statusFilters = [
<TextInput key="q" source="q" label="Поиск" alwaysOn />,
<TextInput key="equipmentId" source="equipmentId" label="Оборудование" />,
<SelectArrayInput key="newStatus" source="newStatus" label="Новый статус" choices={equipmentStatusChoices} />,
];
const ListActions = () => (
<TopToolbar>
<FilterButton />
</TopToolbar>
);
export function ChangeEquipmentStatusList() {
return (
<List filters={statusFilters} actions={<ListActions />} sort={{ field: 'date', order: 'DESC' }}>
<Datagrid rowClick="show">
<TextField source="id" />
<ReferenceField source="equipmentId" reference="equipment" link="show">
<TextField source="name" />
</ReferenceField>
<SelectField source="newStatus" choices={equipmentStatusChoices} />
<TextField source="number" />
<DateField source="date" />
<TextField source="responsible" />
</Datagrid>
</List>
);
}

View File

@@ -0,0 +1,19 @@
import { DateField, ReferenceField, SelectField, Show, SimpleShowLayout, TextField } from 'react-admin';
import { equipmentStatusChoices } from '../equipment/shared';
export function ChangeEquipmentStatusShow() {
return (
<Show>
<SimpleShowLayout>
<TextField source="id" />
<ReferenceField source="equipmentId" reference="equipment" link="show">
<TextField source="name" />
</ReferenceField>
<SelectField source="newStatus" choices={equipmentStatusChoices} />
<TextField source="number" />
<DateField source="date" />
<TextField source="responsible" />
</SimpleShowLayout>
</Show>
);
}

View File

@@ -0,0 +1 @@
export { ChangeEquipmentStatusCreate as EquipmentStatusChangeCreate } from '../change-equipment-status/ChangeEquipmentStatusCreate';

View File

@@ -0,0 +1 @@
export { ChangeEquipmentStatusEdit as EquipmentStatusChangeEdit } from '../change-equipment-status/ChangeEquipmentStatusEdit';

View File

@@ -0,0 +1 @@
export { ChangeEquipmentStatusList as EquipmentStatusChangeList } from '../change-equipment-status/ChangeEquipmentStatusList';

View File

@@ -0,0 +1 @@
export { ChangeEquipmentStatusShow as EquipmentStatusChangeShow } from '../change-equipment-status/ChangeEquipmentStatusShow';

View File

@@ -0,0 +1,24 @@
import { Create, DateInput, SelectInput, SimpleForm, TextInput as RaTextInput } from 'react-admin';
import { equipmentStatusChoices } from './shared';
const equipmentLabels = {
dateOfInspection: 'Дата поверки',
commissionedAt: 'Дата изготовления',
name: 'Название',
serialNumber: 'Серийный номер',
status: 'Статус',
};
export function EquipmentCreate() {
return (
<Create>
<SimpleForm>
<DateInput source="dateOfInspection" label={equipmentLabels.dateOfInspection} />
<DateInput source="commissionedAt" label={equipmentLabels.commissionedAt} />
<RaTextInput source="name" label={equipmentLabels.name} required />
<RaTextInput source="serialNumber" label={equipmentLabels.serialNumber} required />
<SelectInput source="status" label={equipmentLabels.status} choices={equipmentStatusChoices} required />
</SimpleForm>
</Create>
);
}

View File

@@ -0,0 +1,24 @@
import { DateInput, Edit, SelectInput, SimpleForm, TextInput as RaTextInput } from 'react-admin';
import { equipmentStatusChoices } from './shared';
const equipmentLabels = {
dateOfInspection: 'Дата поверки',
commissionedAt: 'Дата изготовления',
name: 'Название',
serialNumber: 'Серийный номер',
status: 'Статус',
};
export function EquipmentEdit() {
return (
<Edit>
<SimpleForm>
<DateInput source="dateOfInspection" label={equipmentLabels.dateOfInspection} />
<DateInput source="commissionedAt" label={equipmentLabels.commissionedAt} />
<RaTextInput source="name" label={equipmentLabels.name} />
<RaTextInput source="serialNumber" label={equipmentLabels.serialNumber} />
<SelectInput source="status" label={equipmentLabels.status} choices={equipmentStatusChoices} />
</SimpleForm>
</Edit>
);
}

View File

@@ -0,0 +1,38 @@
import {
Datagrid,
DateField,
FilterButton,
List,
SelectArrayInput,
SelectField,
TextField,
TextInput,
TopToolbar,
} from 'react-admin';
import { equipmentStatusChoices } from './shared';
const equipmentFilters = [
<TextInput key="q" source="q" label="Поиск" alwaysOn />,
<SelectArrayInput key="status" source="status" label="Статус" choices={equipmentStatusChoices} />,
];
const ListActions = () => (
<TopToolbar>
<FilterButton />
</TopToolbar>
);
export function EquipmentList() {
return (
<List filters={equipmentFilters} actions={<ListActions />} sort={{ field: 'name', order: 'ASC' }}>
<Datagrid rowClick="show">
<TextField source="id" />
<TextField source="name" />
<TextField source="serialNumber" />
<DateField source="dateOfInspection" />
<DateField source="commissionedAt" />
<SelectField source="status" choices={equipmentStatusChoices} />
</Datagrid>
</List>
);
}

View File

@@ -0,0 +1,17 @@
import { DateField, SelectField, Show, SimpleShowLayout, TextField } from 'react-admin';
import { equipmentStatusChoices } from './shared';
export function EquipmentShow() {
return (
<Show>
<SimpleShowLayout>
<TextField source="id" />
<TextField source="name" />
<TextField source="serialNumber" />
<DateField source="dateOfInspection" />
<DateField source="commissionedAt" />
<SelectField source="status" choices={equipmentStatusChoices} />
</SimpleShowLayout>
</Show>
);
}

View File

@@ -0,0 +1,18 @@
export const equipmentStatusChoices = [
{ id: 'Active', name: 'В эксплуатации' },
{ id: 'Repair', name: 'В ремонте' },
{ id: 'Reserve', name: 'В резерве' },
{ id: 'WriteOff', name: 'Списано' },
];
export const equipmentOptionText = (record?: {
name?: string;
serialNumber?: string;
id?: string;
}) => {
if (!record) {
return '';
}
return record.name ?? record.serialNumber ?? record.id ?? '';
};