diff --git a/app/panels/prj_help/img/211.png b/app/panels/prj_help/img/211.png new file mode 100644 index 0000000..6bcd808 Binary files /dev/null and b/app/panels/prj_help/img/211.png differ diff --git a/app/panels/prj_help/img/212.png b/app/panels/prj_help/img/212.png new file mode 100644 index 0000000..c1edef9 Binary files /dev/null and b/app/panels/prj_help/img/212.png differ diff --git a/app/panels/prj_help/img/213.png b/app/panels/prj_help/img/213.png new file mode 100644 index 0000000..8bc388d Binary files /dev/null and b/app/panels/prj_help/img/213.png differ diff --git a/app/panels/prj_help/img/214.png b/app/panels/prj_help/img/214.png new file mode 100644 index 0000000..172f5a8 Binary files /dev/null and b/app/panels/prj_help/img/214.png differ diff --git a/app/panels/prj_help/img/215.png b/app/panels/prj_help/img/215.png new file mode 100644 index 0000000..f71aa9c Binary files /dev/null and b/app/panels/prj_help/img/215.png differ diff --git a/app/panels/prj_help/img/221.png b/app/panels/prj_help/img/221.png new file mode 100644 index 0000000..94bff90 Binary files /dev/null and b/app/panels/prj_help/img/221.png differ diff --git a/app/panels/prj_help/img/222.png b/app/panels/prj_help/img/222.png new file mode 100644 index 0000000..77992f8 Binary files /dev/null and b/app/panels/prj_help/img/222.png differ diff --git a/app/panels/prj_help/img/223.png b/app/panels/prj_help/img/223.png new file mode 100644 index 0000000..4d940c0 Binary files /dev/null and b/app/panels/prj_help/img/223.png differ diff --git a/app/panels/prj_help/img/231.png b/app/panels/prj_help/img/231.png new file mode 100644 index 0000000..41de4e9 Binary files /dev/null and b/app/panels/prj_help/img/231.png differ diff --git a/app/panels/prj_help/img/232.png b/app/panels/prj_help/img/232.png new file mode 100644 index 0000000..98e32c5 Binary files /dev/null and b/app/panels/prj_help/img/232.png differ diff --git a/app/panels/prj_help/img/241.png b/app/panels/prj_help/img/241.png new file mode 100644 index 0000000..98f9ebd Binary files /dev/null and b/app/panels/prj_help/img/241.png differ diff --git a/app/panels/prj_help/img/242.png b/app/panels/prj_help/img/242.png new file mode 100644 index 0000000..aba22f6 Binary files /dev/null and b/app/panels/prj_help/img/242.png differ diff --git a/app/panels/prj_help/img/243.png b/app/panels/prj_help/img/243.png new file mode 100644 index 0000000..a3b4d7b Binary files /dev/null and b/app/panels/prj_help/img/243.png differ diff --git a/app/panels/prj_help/img/244.png b/app/panels/prj_help/img/244.png new file mode 100644 index 0000000..aebfab8 Binary files /dev/null and b/app/panels/prj_help/img/244.png differ diff --git a/app/panels/prj_help/img/245.png b/app/panels/prj_help/img/245.png new file mode 100644 index 0000000..7ee3feb Binary files /dev/null and b/app/panels/prj_help/img/245.png differ diff --git a/app/panels/prj_help/img/31.png b/app/panels/prj_help/img/31.png new file mode 100644 index 0000000..66af5c8 Binary files /dev/null and b/app/panels/prj_help/img/31.png differ diff --git a/app/panels/prj_help/img/32.png b/app/panels/prj_help/img/32.png new file mode 100644 index 0000000..293e62f Binary files /dev/null and b/app/panels/prj_help/img/32.png differ diff --git a/app/panels/prj_help/img/33.png b/app/panels/prj_help/img/33.png new file mode 100644 index 0000000..fbe6d43 Binary files /dev/null and b/app/panels/prj_help/img/33.png differ diff --git a/app/panels/prj_help/img/34.png b/app/panels/prj_help/img/34.png new file mode 100644 index 0000000..0bdf2a3 Binary files /dev/null and b/app/panels/prj_help/img/34.png differ diff --git a/app/panels/prj_help/img/35.png b/app/panels/prj_help/img/35.png new file mode 100644 index 0000000..f40ffdc Binary files /dev/null and b/app/panels/prj_help/img/35.png differ diff --git a/app/panels/prj_help/img/36.png b/app/panels/prj_help/img/36.png new file mode 100644 index 0000000..4485793 Binary files /dev/null and b/app/panels/prj_help/img/36.png differ diff --git a/app/panels/prj_help/index.js b/app/panels/prj_help/index.js new file mode 100644 index 0000000..78d0459 --- /dev/null +++ b/app/panels/prj_help/index.js @@ -0,0 +1,16 @@ +/* + Парус 8 - Панели мониторинга - ПУП - Работы проектов + Панель мониторинга: Описание макета (пользовательская инструкция) +*/ + +//--------------------- +//Подключение библиотек +//--------------------- + +import { PrjHelp } from "./prj_help"; //Корневая панель пользовательской инструкции + +//---------------- +//Интерфейс модуля +//---------------- + +export const RootClass = PrjHelp; diff --git a/app/panels/prj_help/prj_help.js b/app/panels/prj_help/prj_help.js new file mode 100644 index 0000000..bbbfb2d --- /dev/null +++ b/app/panels/prj_help/prj_help.js @@ -0,0 +1,491 @@ +/* + Парус 8 - Панели мониторинга - ПУП - Работы проектов + Панель мониторинга: Описание макета (пользовательская инструкция) +*/ + +//--------------------- +//Подключение библиотек +//--------------------- + +import React, { useContext } from "react"; //Классы React +import PropTypes from "prop-types"; //Контроль свойств компонента +import { + Box, + Grid, + Typography, + Link, + List, + ListItem, + ListItemButton, + ListItemText, + Divider, + Table, + TableHead, + TableRow, + TableCell, + TableBody +} from "@mui/material"; //Интерфейсные элементы +import { ApplicationСtx } from "../../context/application"; //Контекст приложения +import img211 from "./img/211.png"; //Изображение +import img212 from "./img/212.png"; //Изображение +import img213 from "./img/213.png"; //Изображение +import img214 from "./img/214.png"; //Изображение +import img215 from "./img/215.png"; //Изображение +import img221 from "./img/221.png"; //Изображение +import img222 from "./img/222.png"; //Изображение +import img223 from "./img/223.png"; //Изображение +import img231 from "./img/231.png"; //Изображение +import img232 from "./img/232.png"; //Изображение +import img241 from "./img/241.png"; //Изображение +import img242 from "./img/242.png"; //Изображение +import img243 from "./img/243.png"; //Изображение +import img244 from "./img/244.png"; //Изображение +import img245 from "./img/245.png"; //Изображение +import img31 from "./img/31.png"; //Изображение +import img32 from "./img/32.png"; //Изображение +import img33 from "./img/33.png"; //Изображение +import img34 from "./img/34.png"; //Изображение +import img35 from "./img/35.png"; //Изображение +import img36 from "./img/36.png"; //Изображение + +//--------- +//Константы +//--------- + +//Оглавление +const CONTENT = [ + { id: "prg1", caption: "1. Назначение документа" }, + { id: "prg2", caption: "2. Инициация проекта" }, + { id: "prg3", caption: "3. Планирование" }, + { id: "prg4", caption: "4. Исполнение" }, + { id: "prg5", caption: "5. Мониторинг и контроль" }, + { id: "prg6", caption: "6. Корректировка планов" }, + { id: "prg7", caption: "7. Завершение проекта" } +]; + +//Стили +const STYLES = { + IMG: { textAlign: "center", padding: "10px" }, + PRGF_TABLE: { paddingTop: "20px", paddingBottom: "20px", display: "flex", justifyContent: "center" }, + TABLE: { width: "80%" }, + TABLE_TITLE: { backgroundColor: "lightgray" }, + TABLE_SUBTITLE: { textAlign: "center", backgroundColor: "#f3eded", fontWeight: "bold" } +}; + +//-------------------------------- +//Вспомогательные функции и классы +//-------------------------------- + +//Заголовок первого уровня +const Hdr1 = ({ id, children }) => ( + + {children} + +); + +//Контроль свойств - Заголовок первого уровня +Hdr1.propTypes = { + id: PropTypes.string, + children: PropTypes.any +}; + +//Заголовок второго уровня +const Hdr2 = ({ id, children }) => ( + + {children} + +); + +//Контроль свойств - Заголовок второго уровня +Hdr2.propTypes = { + id: PropTypes.string, + children: PropTypes.any +}; + +//Заголовок третьего уровня +const Hdr3 = ({ id, children }) => ( + + {children} + +); + +//Контроль свойств - Заголовок третьего уровня +Hdr3.propTypes = { + id: PropTypes.string, + children: PropTypes.any +}; + +//Параграф +const Prgf = ({ style, children }) => ( + + {children} + +); + +//Контроль свойств - Параграф +Prgf.propTypes = { + style: PropTypes.object, + children: PropTypes.any +}; + +//Изображение +const Img = ({ src }) => ( +
+ +
+); + +//Контроль свойств - Изображение +Img.propTypes = { + src: PropTypes.string.isRequired +}; + +//Ссылка на раздел +const UnitLink = ({ unitCode, children }) => { + //Подключение к контексту приложения + const { pOnlineShowUnit } = useContext(ApplicationСtx); + + //Генерация содержимого + return ( + pOnlineShowUnit({ unitCode })}> + {children} + + ); +}; + +//Контроль свойств - Ссылка на раздел +UnitLink.propTypes = { + unitCode: PropTypes.string.isRequired, + children: PropTypes.any +}; + +//----------- +//Тело модуля +//----------- + +//Корневая панель работ проектов +const PrjHelp = () => { + //Генерация содержимого + return ( + + + + + Управление экономикой проектов + + + + {CONTENT.map((c, i) => ( + + { + document.getElementById(c.id).scrollIntoView(); + }} + > + + + + ))} + + + + + Управление экономикой проектов + 1. Назначение документа + + Документ предназначен для ответственного экономиста по проекту НИОКР и содержит описание порядка применения средств + автоматизации на базе ПП “ПАРУС-Предприятие 8” при исполнении процесса управления экономикой проектов НИОКР на каждых его + этапах: +

1) Инициация проекта

+

2) Планирование

+

3) Исполнение

+

4) Мониторинг и контроль

+

5) Корректировка планов

+

6) Завершение проекта

+
+ 2. Инициация проекта + 2.1. Регистрация информации о проекте + + В момент инициации проекта требуется зарегистрировать запись в соответствующем учетном регистре системы, доступ к которому + осуществляется из главного меню Учет > Проекты. + + + + Система визуализирует окно параметров отбора проектов. При необходимости можно установить нужные фильтры и нажать кнопку + ОК. + + + В открывшемся регистре требуется вызвать контекстное меню правой кнопкой мыши и выбрать пункт “Добавить”. + + Система визуализирует окно параметров действия. + + Требуется заполнить реквизиты проекта согласно правилам, приведенным ниже в таблице и нажать кнопку ОК. + + + + + № п/п + Наименование реквизита + Правила заполнения + + + + + + Проект + + + + 1 + Мнемокод + Внутренний код проекта (номер заказа, шифр работ) + + + 2 + Наименование + Полное наименование проекта + + + 3 + Условное наименование + Согласованный с заказчиком код проекта + + + 4 + Ожидаемые результаты + Заполнить при необходимости + + + 5 + Идентификатор государственного контракта + Выбрать из словаря ИГК в том случае, если проекта выполняется в рамках ГОЗ + + + 6 + Документ-основание + + Указать номер договора с заказчиком, номер внутриорганизационного приказа либо иного документа инициации + проекта + + + + 7 + Тип + Выбрать из словаря подходящий тип проекта + + + 8 + Внешний заказчик + Выбрать из словаря в том случае, если проект инициирован внешним заказчиком + + + 9 + Подразделение-заказчик + + Выбрать из словаря в том случае, если проект является внутренним (например, НИОКР для собственных нужд, + инвестиционные проекты …) + + + + 10 + Ответственный + Выбрать из словаря ответственного сотрудника за исполнение проектных работ + + + 11 + Подразделение-ответственный + Выбрать из словаря ответственное подразделение-исполнитель проектных работ + + + 12 + Дата начала план + Указать плановую дату начала выполнения проектных работ + + + 13 + Дата окончания план + Указать плановую дату окончания выполнения проектных работ + + + + Суммы, трудоемкость + + + + 14 + Стоимость + Задать плановую стоимость проекта + + + 15 + ЕИ трудоемкости + Выбрать из словаря единицу измерения трудоемкости проекта + + + + Настройки + + + + 16 + Схема калькуляции + Выбрать из словаря подходящую структуру плановой калькуляции по проекту + + +
+
+ + При начале выполнения проектных работ требуется перевести проект в состояние “Открыт” посредством соответствующего + действия контекстного меню раздела. + + + 2.2. Регистрация этапов проекта + Далее необходимо выполнить регистрацию этапов проекта. + + В подчиненной таблице “Этапы проекта” требуется вызвать контекстное меню правой кнопкой мыши и выбрать пункт “Добавить”. + + + Система визуализирует окно параметров действия. + + Требуется заполнить реквизиты этапа проекта согласно правилам, приведенным ниже в таблице и нажать кнопку ОК. + + + + + № п/п + Наименование реквизита + Правила заполнения + + + + + + Этап проекта + + + + 1 + Номер + Указать номер этапа проекта п/п + + + 2 + Наименование + Полное наименование этапа проекта + + + 3 + Ожидаемые результаты + Заполнить при необходимости + + + 4 + Дата начала план + Указать плановую дату начала выполнения этапа проектных работ + + + 5 + Дата окончания план + Указать плановую дату окончания выполнения этапа проектных работ + + + + Суммы, трудоемкость + + + + 6 + Стоимость этапа + Задать плановую стоимость этапа проекта + + +
+
+ + При начале выполнения проектных работ по этапу требуется перевести этап проекта проект в состояние “Открыт” посредством + соответствующего действия контекстного меню раздела. + + + 2.3. Формирование шифра затрат + + После регистрации этапа проекта требуется выделить запись этапа, вызвать правой кнопкой мыши контекстное меню и выбрать + пункт “ЦИТК. Указать шифр затрат”. + + + Система визуализирует окно параметров действия. + + + Номер шифра затрат система генерирует автоматически. При необходимости его можно исправить. Далее необходимо нажать копку + ОК. + + 2.4. Регистрация договора с заказчиком + + После заключения договора с заказчиком необходимо выделить законтрактованные этапы проекта, вызвать правой кнопкой мыши + контекстное меню и выбрать пункт Формирование > Договор с внешним заказчиком. + + + Система визуализирует окно параметров действия. + + Необходимо заполнить параметры действия и нажать кнопку ОК. + + Система сформирует договор с заказчиком в соответствующем регистре системы. + Договор связан с записью регистра “Проекты” посредством штатного механизма взаимосвязей документов. + + + + Запись в регистре “Договоры” может быть отредактирована посредством штатных действий “Исправить” контекстного меню + заголовка раздела. Также может быть отредактирован каждый этап договора. + + + В момент двустороннего подписания договора требуется перевести документ в состояние “Утвержден” посредством + соответствующего действия контекстного меню раздела. + + + + В момент перехода к двустороннему исполнению этапа договора требуется перевести этап в состояние “Открыт” посредством + соответствующего действия контекстного меню раздела. + + + 3. Планирование + + При получении плановой калькуляции по этапу от службы ценообразования требуется зарегистрировать данный документ в + соответствующем регистре системы. + + + Система визуализирует окно параметров действия. + + Необходимо заполнить реквизиты плановой калькуляции и нажать кнопку ОК. + + Далее необходимо сформировать перечень статей калькуляции посредством одноименного действия контекстного меню раздела. + + + + Далее необходимо указать плановые суммы прямых статей затрат посредством штатного действия “Исправить” контекстного меню. + + + Затем необходимо выполнить расчет косвенных статей затрат посредством одноименного действия контекстного меню раздела. + + + + В момент двустороннегго согласования плановой калькуляции необходимо утвердить документ посредством одноименного действия + контекстного меню раздела. + + + Затем документ необходимо пометить как действующий. + + 4. Исполнение + 5. Мониторинг и контроль + 6. Корректировка планов + 7. Завершение проекта +
+
+
+
+ ); +}; + +//---------------- +//Интерфейс модуля +//---------------- + +export { PrjHelp }; diff --git a/img/prj_help.jpg b/img/prj_help.jpg new file mode 100644 index 0000000..1b9005e Binary files /dev/null and b/img/prj_help.jpg differ diff --git a/package-lock.json b/package-lock.json index b442801..f1e68e8 100644 --- a/package-lock.json +++ b/package-lock.json @@ -21,6 +21,7 @@ "eslint-plugin-react": "^7.33.1", "eslint-plugin-react-hooks": "^4.6.0", "fast-xml-parser": "^4.2.7", + "file-loader": "^6.2.0", "query-string": "^8.1.0", "react": "^18.2.0", "react-dom": "^18.2.0", @@ -1589,6 +1590,14 @@ "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==" }, + "node_modules/big.js": { + "version": "5.2.2", + "resolved": "https://registry.npmjs.org/big.js/-/big.js-5.2.2.tgz", + "integrity": "sha512-vyL2OymJxmarO8gxMr0mhChsO9QGwhynfuu4+MHTAW6czfq9humCB7rKpUjDd9YUiDPU4mzpyupFSvOClAwbmQ==", + "engines": { + "node": "*" + } + }, "node_modules/brace-expansion": { "version": "1.1.11", "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", @@ -1871,6 +1880,14 @@ "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.488.tgz", "integrity": "sha512-Dv4sTjiW7t/UWGL+H8ZkgIjtUAVZDgb/PwGWvMsCT7jipzUV/u5skbLXPFKb6iV0tiddVi/bcS2/kUrczeWgIQ==" }, + "node_modules/emojis-list": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/emojis-list/-/emojis-list-3.0.0.tgz", + "integrity": "sha512-/kyM18EfinwXZbno9FyUGeFh87KC8HRQBQGildHZbEuRyWFOmv1U10o9BBp8XVZDVNNuQKyIGIu5ZYAAXJ0V2Q==", + "engines": { + "node": ">= 4" + } + }, "node_modules/enhanced-resolve": { "version": "5.15.0", "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.15.0.tgz", @@ -2483,6 +2500,25 @@ "node": "^10.12.0 || >=12.0.0" } }, + "node_modules/file-loader": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/file-loader/-/file-loader-6.2.0.tgz", + "integrity": "sha512-qo3glqyTa61Ytg4u73GultjHGjdRyig3tG6lPtyX/jOEJvHif9uB0/OCI2Kif6ctF3caQTW2G5gym21oAsI4pw==", + "dependencies": { + "loader-utils": "^2.0.0", + "schema-utils": "^3.0.0" + }, + "engines": { + "node": ">= 10.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "webpack": "^4.0.0 || ^5.0.0" + } + }, "node_modules/filter-obj": { "version": "5.1.0", "resolved": "https://registry.npmjs.org/filter-obj/-/filter-obj-5.1.0.tgz", @@ -3329,6 +3365,19 @@ "node": ">=6.11.5" } }, + "node_modules/loader-utils": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-2.0.4.tgz", + "integrity": "sha512-xXqpXoINfFhgua9xiqD8fPFHgkoq1mmmpE92WlDbm9rNRd/EbRb+Gqf908T2DMfuHjjJlksiK2RbHVOdD/MqSw==", + "dependencies": { + "big.js": "^5.2.2", + "emojis-list": "^3.0.0", + "json5": "^2.1.2" + }, + "engines": { + "node": ">=8.9.0" + } + }, "node_modules/locate-path": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", diff --git a/package.json b/package.json index e4dc471..94f3769 100644 --- a/package.json +++ b/package.json @@ -31,6 +31,7 @@ "eslint-plugin-react": "^7.33.1", "eslint-plugin-react-hooks": "^4.6.0", "fast-xml-parser": "^4.2.7", + "file-loader": "^6.2.0", "query-string": "^8.1.0", "react": "^18.2.0", "react-dom": "^18.2.0", diff --git a/webpack.config.js b/webpack.config.js index 0717bfa..a1e6f9c 100644 --- a/webpack.config.js +++ b/webpack.config.js @@ -1,3 +1,4 @@ +/* eslint-disable */ /* Парус 8 - Панели мониторинга Настройки упаковщика @@ -40,6 +41,13 @@ module.exports = { presets: ["@babel/preset-react"] } } + }, + { + test: /\.(jpg|png|svg)$/, + loader: "file-loader", + options: { + name: "[path][name].[hash].[ext]" + } } ] }