пошаговое руководство — не более 15 минут!
Всех с Новым годом! Давайте начнем 2023 год с 10-минутного мини-учебника, показывающего, как создать небольшое приложение для планирования ресурсов, используя React.js и Гипербиблиотеку диаграмм Ганта для JavaScript от DlhSoft, которая, конечно же, поставляется с также простые в использовании расширения React.
Первым делом — настройка среды разработки. Мы предполагаем, что вы уже установили npm и, следовательно, npx в своей системе (хороший способ получить их — использовать nvm — этот метод не требует sudo, кстати) и что у вас есть текстовый редактор для редактирования исходного кода — будь то Visual Studio Code, vim или даже Xcode или TextEdit и, конечно же, браузер, доступный для запуска локальных вещей в реальном времени.
Начните с создания нового приложения React (в настоящее время версии 18.2) в выбранной вами папке проектов. На Mac мы предпочитаем сами использовать старомодную папку Developer. Запустите эти команды в Терминале:
cd Developer npx create-react-app schedule-react-app
Это может занять минуту или две, может вызвать некоторые предупреждения (к которым вы можете вернуться позже), но все должно пройти успешно: будет создана папка с указанным именем и включающая всю структуру, необходимую для разработки хорошего приложения React:
cd schedule-react-app ls README.md package-lock.json public node_modules package.json src
Вы можете запустить приложение, если хотите, просто чтобы проверить, все ли работает хорошо, выполнив эту команду, которая создаст проект, запустит локальное размещение веб-приложения, а затем также откроет его в браузере:
npm start
Давайте продолжим, выполнив то, что подсказывает нам приложение: мы можем отредактировать файл src/App.js и подготовиться к отображению там компонента Schedule chart, а не логотипа React.
return ( <div> <h1>Scheduler</h1> <ScheduleChartView items={resources} settings={settings} license={license} change={onItemChanged}> … </ScheduleChartView> </div> );
Конечно, этот код не будет работать как есть. Нам нужно получить и импортировать правильный модуль, чтобы иметь возможность использовать ScheduleChartView (и создать его резервную копию с помощью JavaScript, на котором он основан), и нам нужно определить элементы, настройки и т. д. Давайте сделаем эти вещи одну за другой — не волнуйтесь, ни одна из них не займет слишком много времени.
Вернувшись в окно Терминал, запустите эту команду, чтобы загрузить пакет гипербиблиотеки диаграмм Ганта DlhSoft (обратите внимание, что подробное руководство по этой части доступно здесь, в разделе Получить компоненты DlhSoft раздел):
npm install http://DlhSoft.com/Packages/DlhSoft.GanttChartHyperLibrary.tar
Это поместит набор JavaScript и связанных файлов в подпапку node_modules/DlhSoft.GanttChartHyperLibrary. Вам нужно скопировать некоторые из них оттуда в папки src и public, как указано ниже:
cp node_modules/DlhSoft.GanttChartHyperLibrary/*.HTML.Controls.js public cp node_modules/DlhSoft.GanttChartHyperLibrary/*.React.Components.jsx src
В частности, модули расширения компонента React должны быть помещены в папку src, чтобы их можно было использовать во время сборки проекта, в то время как основные функции JavaScript должны быть просто доступны в папке размещения на стороне сервера, общедоступно.
Конечно, общедоступный код JavaScript должен быть каким-то образом загружен, чтобы он был доступен во время выполнения. Это можно сделать «классически», добавив следующие ссылки на скрипты в public/index.html в разделе ‹html›/‹head›:
<script src="DlhSoft.Data.HTML.Controls.js"></script> <script src="DlhSoft.ProjectData.GanttChart.HTML.Controls.js"></script>
А для части React вам просто нужно импортировать соответствующие модули прямо в начало src/App.js:
import { ScheduleChartView } from './DlhSoft.ProjectData.GanttChart.React.Components';
Теперь вернемся к экземпляру ScheduleChartView. Давайте определим некоторые значения-заполнители для элементов — связанные с resourcesvariable, settings, лицензией и onItemChanged (функция) необходимые аргументы. Непосредственно над оператором return в App.js добавьте следующие строки кода:
let resource1 = { content: 'Resource 1' }; let resource2 = { content: 'Resource 2' }; let resources = [ resource1, resource2 ]; let settings = { }; let license = '…'; function onItemChanged(resource, propertyName, isDirect, isFinal) { console.log(propertyName + ' changed for ' + resource.content + '.'); }
Конечно, это выше показывает только две строки в диаграмме расписания, а столбцов диаграммы Ганта вообще нет. Пришло время загрузить данные из базы данных или просто сгенерировать несколько фиктивных значений, как мы сделаем ниже, и соответствующим образом настроить параметры.
Мы предполагаем, что наши ресурсы на самом деле представлены командой разработчиков, и что их работа должна быть выполнена в январе 2023 года. Элементы диаграммы Ганта для представления в приложении — также могут перемещаться между разработчиками (например, для обеспечения соблюдения сроков). и навыки правильно сбалансированы) — это задачи по программированию в проекте. Некоторые из них также имеют определенные ограничения зависимостей:
let resource1 = { content: 'Diane' }; let resource2 = { content: 'John' }; … let resources = [resource1, resource2, …]; let task1_1 = { content: 'Web-Based To-Do List App', start: new Date(2023, 1-1, 2, 8), finish: new Date(2023, 1-1, 3, 16) }; let task1_2 = { content: 'Restaurant Review Forum', start: new Date(2023, 1-1, 5, 8), finish: new Date(2023, 1-1, 6, 16) }; let task1_3 = { content: 'Real-Time Chat Room', start: new Date(2023, 1-1, 10, 8), finish: new Date(2023, 1-1, 12, 16) }; let task2_1 = { content: 'E-Commerce Site for Handmade Goods', start: new Date(2023, 1-1, 4, 8), finish: new Date(2023, 1-1, 6, 16) }; let task2_2 = { content: 'Online Course Platform', start: new Date(2023, 1-1, 9, 8), finish: new Date(2023, 1-1, 12, 16) }; … resource1.ganttChartItems = [ task1_1, task1_2, task1_3 ]; resource2.ganttChartItems = [ task2_1, task2_2 ]; … task1_2.predecessors = [ { item: task1_1 } ]; task2_2.predecessors = [ { item: task1_2 }, { item: task2_1 } ]; … let settings = { gridWidth: '120px', timelineStart: new Date(2023, 1-1, 1), timelineFinish: new Date(2023, 2-1, 1), currentTime: new Date(2023, 1-1, 1, 12), itemHeight: 32, hourWidth: 7.5, isTaskCompletionReadOnly: true, areStandardTaskLabelsVisible: true, standardBarStyle: 'fill: #d9d2e980; stroke: #005c9e;', standardLabelStyle: 'color: #333; background: #d9d2e9;', areTaskPredecessorsReadOnly: true, areTaskDependenciesVisible: true, areTaskDependencyConstraintsEnabled: true, isMouseWheelZoomEnabled: false, alternativeItemStyle: 'background-color: #f0f0f080', alternativeChartItemStyle: 'fill: #f4f4f480' };
Наконец, давайте также обновим src/App.css, удалив исходные стили App, и вместо этого просто добавим поле для тела документа:
body { margin: 10px; }
И, если хотите, вы можете улучшить пользовательский интерфейс, используя отдельную тему, которую вы можете скачать из нашего демо-приложения:
mkdir temp cd temp curl https://dlhsoft.com/GanttChartHyperLibrary/Demos/Samples/JavaScript/GanttChartView/MainFeatures.zip -o MainFeatures.zip unzip MainFeatures.zip MainFeatures/themes.js cp MainFeatures/themes.js ../public cd .. rm -rd temp
… и снова отредактируйте public/index.html, чтобы добавить ссылку на themes.js:
<script src="themes.js"></script>
… затем вызовите initializeGanttChartTheme в коде src/App.js непосредственно перед возвратом вывода. Обратите внимание на вызов адресации окна, который позволяет обойти правила React и получить доступ к внешнему вызову JavaScript:
window['initializeGanttChartTheme'](settings, 'Generic-blue');
И вот, мы действительно готовы к работе!
Кстати, конечный пользователь может переназначить задачи, чтобы они начинались в разные дни или в другое время, перетаскивая их по горизонтали, и назначать их разным ресурсам, перетаскивая их вертикально после наведения курсора на их нижнюю часть панели.
Для справки, вот весь репозиторий git. Не стесняйтесь копировать и адаптировать код в свое собственное приложение и наслаждайтесь!