Co-authored-by: gorbenko.pavel <gorbenko.pavel@tansu.kz> Reviewed-on: http://git.tnsu.kz/gorbenko.pavel/tnsu-approval-route/pulls/6
This commit was merged in pull request #6.
This commit is contained in:
@@ -4,19 +4,13 @@
|
||||
//
|
||||
// Строки с подстановкой оформлены функциями, чтобы шаблон и данные не разъезжались.
|
||||
|
||||
import { HeadType, ProjectRole, RouteStepStatus, RouteType } from './models';
|
||||
import { ComparisonOperator, HeadType, ProjectRole, RouteStepStatus } from './models';
|
||||
import { pluralRu } from './utils/plural';
|
||||
|
||||
// ---- Подписи enum'ов ----
|
||||
// Record<enum, string> гарантирует, что при добавлении значения в enum
|
||||
// компилятор потребует и подпись к нему.
|
||||
|
||||
export const routeTypeLabels: Record<RouteType, string> = {
|
||||
[RouteType.None]: 'Не задан',
|
||||
[RouteType.Parallel]: 'Параллельный',
|
||||
[RouteType.Sequential]: 'Последовательный'
|
||||
};
|
||||
|
||||
export const routeStepStatusLabels: Record<RouteStepStatus, string> = {
|
||||
[RouteStepStatus.None]: 'Не задан',
|
||||
[RouteStepStatus.Approval]: 'Согласование',
|
||||
@@ -38,6 +32,20 @@ export const headTypeLabels: Record<HeadType, string> = {
|
||||
[HeadType.DirectorTansu]: 'Директор Tansu'
|
||||
};
|
||||
|
||||
export const comparisonOperatorLabels: Record<ComparisonOperator, string> = {
|
||||
[ComparisonOperator.None]: '—',
|
||||
[ComparisonOperator.GreaterThan]: 'Больше (>)',
|
||||
[ComparisonOperator.LessThan]: 'Меньше (<)',
|
||||
[ComparisonOperator.Equal]: 'Равно (=)'
|
||||
};
|
||||
|
||||
export const comparisonOperatorSymbols: Record<ComparisonOperator, string> = {
|
||||
[ComparisonOperator.None]: '',
|
||||
[ComparisonOperator.GreaterThan]: '>',
|
||||
[ComparisonOperator.LessThan]: '<',
|
||||
[ComparisonOperator.Equal]: '='
|
||||
};
|
||||
|
||||
export const texts = {
|
||||
common: {
|
||||
home: 'Главная',
|
||||
@@ -55,8 +63,6 @@ export const texts = {
|
||||
},
|
||||
|
||||
nav: {
|
||||
/** Буква в золотом квадрате логотипа — не зависит от заголовка панели. */
|
||||
markLetter: 'T',
|
||||
title: 'Панель настройки маршрутов',
|
||||
dashboard: 'Дашборд',
|
||||
requestTypes: 'Типы заявок',
|
||||
@@ -96,6 +102,9 @@ export const texts = {
|
||||
emptyList: 'Типов заявок пока нет.',
|
||||
columnName: 'Название',
|
||||
columnPageUrl: 'Url страницы',
|
||||
columnSection: 'Раздел',
|
||||
columnListName: 'Список SharePoint',
|
||||
columnSiteUrl: 'Сайт SharePoint',
|
||||
createTitle: 'Новый тип заявки',
|
||||
editTitle: 'Редактировать тип заявки',
|
||||
nameLabel: 'Название',
|
||||
@@ -103,7 +112,20 @@ export const texts = {
|
||||
pageUrlLabel: 'Url страницы',
|
||||
pageUrlHint: 'Страница формы заявки на портале.',
|
||||
pageUrlPlaceholder: '/pages/business-trip',
|
||||
validationRequired: 'Заполните имя и Url страницы.',
|
||||
sectionLabel: 'Раздел',
|
||||
sectionPlaceholder: 'Например, Кадры',
|
||||
siteUrlLabel: 'Сайт SharePoint',
|
||||
siteUrlHint: 'Сайт, где живёт список — например, https://tnsukz.sharepoint.com/sites/hrm.',
|
||||
siteUrlPlaceholder: 'https://tnsukz.sharepoint.com/sites/hrm',
|
||||
siteUrlSearchPlaceholder: 'Поиск сайта по названию...',
|
||||
listNameLabel: 'Список SharePoint',
|
||||
listNameHint: 'Источник полей (field_name) для условий в шагах маршрута.',
|
||||
listNamePlaceholder: 'Сначала укажите сайт SharePoint',
|
||||
listNameLoading: 'Загрузка списков сайта...',
|
||||
listNameEmpty: 'На этом сайте нет доступных списков',
|
||||
listNameError: (message: string): string => `Не удалось получить списки сайта: ${message}`,
|
||||
validationRequired: 'Заполните имя, Url страницы и раздел.',
|
||||
validationListReference: 'Сайт SharePoint и список должны быть заполнены оба вместе или не заполнены вовсе.',
|
||||
deleteTitle: 'Удалить тип заявки?',
|
||||
deleteText: (name: string): string =>
|
||||
`Тип «${name}» будет удалён безвозвратно. Связанные маршруты могут перестать разрешаться.`
|
||||
@@ -119,7 +141,6 @@ export const texts = {
|
||||
dictionaryFailed: (message: string): string => `Справочник компаний и отделов недоступен: ${message}`,
|
||||
emptyList: 'Маршрутов пока нет.',
|
||||
columnRequestType: 'Тип заявки',
|
||||
columnRouteType: 'Тип маршрута',
|
||||
columnCompany: 'Компания',
|
||||
columnDepartment: 'Отдел',
|
||||
columnByProject: 'По проекту',
|
||||
@@ -130,11 +151,11 @@ export const texts = {
|
||||
editTitle: (routeId: number): string => `Маршрут #${routeId}`,
|
||||
requestTypeLabel: 'Тип заявки',
|
||||
requestTypePlaceholder: 'Выберите тип заявки',
|
||||
routeTypeLabel: 'Тип маршрута',
|
||||
companyLabel: 'Компания',
|
||||
companyHint: 'Справочник 1С (api.tnsu.kz).',
|
||||
companyPlaceholder: 'Выберите компанию',
|
||||
companyHint: 'Необязательно — пусто означает запасной маршрут, если для компании инициатора своего маршрута нет.',
|
||||
companyPlaceholder: 'Без компании (запасной маршрут)',
|
||||
companySearchPlaceholder: 'Поиск по названию компании...',
|
||||
companyClear: 'Без компании (запасной маршрут)',
|
||||
departmentLabel: 'Отдел',
|
||||
departmentHint: 'Необязательно — пусто означает маршрут «по умолчанию» для всей компании.',
|
||||
departmentHintNoCompany: 'Сначала выберите компанию.',
|
||||
@@ -146,7 +167,6 @@ export const texts = {
|
||||
controlLabel: 'Контроль',
|
||||
controlCheckbox: 'Требуется отдельный контроль исполнения',
|
||||
validationRequestType: 'Выберите тип заявки.',
|
||||
validationCompany: 'Компания обязательна (Guid из справочника api.tnsu.kz).',
|
||||
deleteTitle: 'Удалить маршрут?',
|
||||
deleteText: (routeId: number): string =>
|
||||
`Маршрут #${routeId} и все его шаги будут удалены безвозвратно.`
|
||||
@@ -155,8 +175,7 @@ export const texts = {
|
||||
routeSteps: {
|
||||
breadcrumb: (routeId: number): string => `Шаги маршрута #${routeId}`,
|
||||
title: (routeId: number): string => `Маршрут #${routeId}`,
|
||||
subtitle: (requestTypeName: string, routeTypeLabel: string): string =>
|
||||
`${requestTypeName} · ${routeTypeLabel}`,
|
||||
subtitle: (requestTypeName: string): string => requestTypeName,
|
||||
back: 'К маршрутам',
|
||||
add: 'Добавить шаг',
|
||||
emptyList: 'Шагов пока нет — добавьте первый.',
|
||||
@@ -164,6 +183,7 @@ export const texts = {
|
||||
columnExecutor: 'Исполнитель',
|
||||
columnStatus: 'Статус',
|
||||
columnReassign: 'Переназначение',
|
||||
columnCondition: 'Условие',
|
||||
reassignAllowed: 'Разрешено',
|
||||
executorRole: (roleLabel: string): string => `Роль: ${roleLabel}`,
|
||||
executorHead: (headLabel: string): string => `Руководитель: ${headLabel}`,
|
||||
@@ -187,9 +207,22 @@ export const texts = {
|
||||
headTypeLabel: 'Тип руководителя',
|
||||
reassignLabel: 'Переназначение',
|
||||
reassignCheckbox: 'Разрешить переназначать другим согласующим',
|
||||
conditionLabel: 'Условие видимости шага',
|
||||
conditionCheckbox: 'Показывать шаг только при выполнении условия',
|
||||
conditionDisabledHint: 'Недоступно: у типа заявки не указан список SharePoint (list_name).',
|
||||
conditionFieldNameLabel: 'Поле списка',
|
||||
conditionFieldNamePlaceholder: 'Выберите столбец списка',
|
||||
conditionFieldNameLoading: 'Загрузка столбцов списка...',
|
||||
conditionFieldNameEmpty: 'В списке нет доступных столбцов',
|
||||
conditionFieldNameError: (message: string): string => `Не удалось получить столбцы списка: ${message}`,
|
||||
conditionOperationLabel: 'Оператор сравнения',
|
||||
conditionValueLabel: 'Значение',
|
||||
conditionValuePlaceholder: 'Например, 1000',
|
||||
validationOrderNo: 'Порядковый номер шага обязателен.',
|
||||
validationExecutor: 'Выберите сотрудника-исполнителя.',
|
||||
validationPosition: 'Укажите должность.',
|
||||
validationCondition: 'Заполните поле списка, оператор и значение условия.',
|
||||
validationConditionNumber: 'Выбранное поле числовое — значение условия должно быть числом.',
|
||||
deleteTitle: 'Удалить шаг?',
|
||||
deleteText: (orderNo: number): string => `Шаг #${orderNo} будет удалён безвозвратно.`
|
||||
},
|
||||
@@ -213,11 +246,18 @@ export const texts = {
|
||||
projectClear: 'Без проекта',
|
||||
projectDictionaryLoading: 'Справочник проектов ещё загружается.',
|
||||
statusLabel: 'Статус',
|
||||
conditionsLabel: 'Условия (значения полей заявки)',
|
||||
conditionsDisabledHint: 'Недоступно: у выбранного типа заявки не указан список SharePoint (list_name).',
|
||||
conditionFieldPlaceholder: 'Выберите столбец списка',
|
||||
conditionFieldLoading: 'Загрузка столбцов списка...',
|
||||
conditionValuePlaceholder: 'Значение для проверки',
|
||||
conditionAdd: 'Добавить условие',
|
||||
run: 'Проверить',
|
||||
running: 'Проверка...',
|
||||
validationRequestType: 'Выберите тип заявки.',
|
||||
summary: (routeId: number, routeTypeLabel: string, requiresControl: boolean): string =>
|
||||
`Маршрут #${routeId} · ${routeTypeLabel}${requiresControl ? ' · требуется контроль исполнения' : ''}`,
|
||||
validationConditionField: 'В каждом условии заполните и поле, и значение.',
|
||||
summary: (routeId: number, requiresControl: boolean): string =>
|
||||
`Маршрут #${routeId}${requiresControl ? ' · требуется контроль исполнения' : ''}`,
|
||||
unresolved: (count: number): string =>
|
||||
`Исполнитель не определён: ${count} ${pluralRu(count, ['шаг', 'шага', 'шагов'])} — причина указана в строке.`,
|
||||
positionMissing: 'Должность не указана в карточке сотрудника.',
|
||||
|
||||
Reference in New Issue
Block a user