Терминал - рабочее пространство с окнами и вкладками

Терминалы позволяют организовать работу пользователя таким образом, что:

  1. Он будет работать в основном на одной странице с различными виджетами.
  2. Пользователь сам определяет состав своего рабочего пространства, организует расположение блоков.

Терминал это рабочее пространство, поделенное на области/панели (areas).

На каждой области пользователь может разместить некие виджеты (widget) с компонентами управления: формы, таблицы, дашборды.

Пользователь может:

  • перемещать виджеты по панели,
  • сворачивать виджеты,
  • менять размер виджетов,
  • добавлять новые виджеты на панель и удалять с панели
  • добавление/удаление панелей терминала.
  • переключаться между панелями терминала
  • переименовывать панели терминала  

При изменении параметров виджетов они сохраняются в базе данных(перемещение, изменение размеров) - при последующих заходах на терминал выводятся ранее сохраненные настройки элементов терминала.

Как добавить терминал на страницу 

Сниппет терминала:

<div class="as-terminal" data-code="terminal1" data-itemid="123"></div>

В разделе /terminals создаем терминал с указанным кодом и осуществляем его настройку.

Как настроить терминал

Управление терминалами - /terminals

Создаем новый тип терминала - устанавливаем код, название и список ролей, которые могут к нему обращаться.

Процедура настройки  терминала getOptions

Прописываем процедуру getOptions. Данная процедура определяет первичные настройки при загрузке терминала пользователя. Пример: 

CREATE PROCEDURE [dbo].[term_developer_getOptions]
    @code nvarchar(64),    -- terminalType
	@itemID nvarchar(128),	  -- terminalItemID	
	@parameters ExtendedDictionaryParameter readonly,	  -- for future parameters
	@username nvarchar(256)  -- current user
AS
BEGIN	
	-- SELECT 1
	select 1 Result, '' Msg
    --'{"title": "111", "text": "222", "type": "warning", "icon": "fa fa-bars"}' NoTerminal 
    
    -- SELECT 2 Available widgets
    select 'Управление таблицами' name, 'cat2' catCode, 'fa fa-bars' icon, 'table' controlType, 'tables' controlCode, ''  defaultItemID, 0 canChangeItemID
    union 
    select 'Управление формами' name, 'cat2' catCode, 'fa fa-bars' icon,  'table' controlType, 'forms' controlCode, ''  defaultItemID, 0 canChangeItemID
    union 
    select 'Управление страницами' name, 'cat1' catCode, 'fa fa-bars' icon,  'table' controlType, 'pages' controlCode, ''  defaultItemID, 0 canChangeItemID
    union 
    select 'Редактирование таблицы' name, 'cat1' catCode, 'fa fa-bars' icon,  'form' controlType, 'editTable' controlCode, '0'  defaultItemID, 1 canChangeItemID
    union
    select 'Редактирование формы' name, 'cat1' catCode, 'fa fa-bars' icon,  'form' controlType, 'editForm' controlCode, '0'  defaultItemID, 1 canChangeItemID
    union
    select 'Управление настройкой' name, 'cat1' catCode, 'fa fa-bars' icon,  'form' controlType, 'editSetting' controlCode, 'globalCSS'  defaultItemID, 0 canChangeItemID
    union
    select 'Дашборд админа' name, 'cat1' catCode, 'fa fa-bars' icon,  'dashboard' controlType, 'forAdmin' controlCode, ''  defaultItemID, 0 canChangeItemID
     union
    select 'Редактирование хранимки' name, 'cat1' catCode, 'fa fa-database' icon,  'sp' controlType, 'falcon_search' controlCode, ''  defaultItemID, 1 canChangeItemID
          
    -- select 3 AvailableWidget catetories
    select 'Cat 1' name, 'cat1' code, 1 ord  
    union 
    select 'Cat 2' name, 'cat2' code, 2 ord  
    union 
    select 'Cat 3' name, 'cat3' code, 3  ord  
    union 
    select 'Cat 4' name, 'cat4' code, 4 ord  
    order by ord
END

Входные параметры:

  • code - код терминала
  • itemID - переданный itemID (этот параметр нужен для того, чтобы использовать один и тот же тип терминала для пользователя по разному на разных страницах).
  • parameter - для будущих параметров
  • username - текущий пользователь 

Выходные результаты:

SELECT 1 Общие настройки

  • Result - если 0, то будет вывод результата ошибки в Msg
  • Msg - сообщение
  • NoTerminal - JSON строка с полями title, text, type. Если задано - выводит в терминале сообщение (например, что нет прав на использование терминала). 

SELECT 2 Список доступных виджетов, которые может добавлять пользователь

  • name - название виджета (будет отражаться в заголовке виджета на панели).
  • catCode - код категории из SELECT 3 (служит для организации списков доступных виджетов по категориям в окне добавления виджета)
  • icon - иконка виджета
  • controlType - какой компонент будет грузить - form, table, dashboard
  • controlCode - code компонента (например, таблицы или формы).
  • defaultItemID - какой itemID будет по умолчанию загружаться в компонент
  • canChangeItemID - если 1, то пользователь в виджете имеет возможность выбрать через поиск itemID (в заголовке виджета).  

Процедура выдачи доступных itemID для смены itemID в виджете терминала

Процедура search позволяет выдать список itemID при выполнении поиска значений в виджете.

Например, в виджете выводится карточка клиента с itemID = 5. Пользователь хочет посмотреть другого клиента - в верху через поиск выбирает нужного клиента.

Как раз для генерации этого списка доступных клиентов и используется эта процедура.

CREATE PROCEDURE [dbo].[term_developer_search]
	@q nvarchar(64),
    @parameters ExtendedDictionaryParameter readonly,	  -- terminalCode, terminalItemID
	@controlType nvarchar(64),    -- form, table
	@controlCode nvarchar(128),	  -- table code, form code
	@username nvarchar(256)  -- current user  
AS
BEGIN	
	if(@controlType='form' and @controlCode='editForm') begin 
    	-- SELECT 1
    	select id Value, isnull(title, '') + ' - ' + code Text
        from as_forms where code like '%'+@q+'%' or title like '%'+@q+'%' 
        return 
    end 
	if(@controlType='form' and @controlCode='editTable') begin 
    	-- SELECT 1
    	select id Value, isnull(title, '') + ' - ' + code Text
        from as_crud_tables where code like '%'+@q+'%' or title like '%'+@q+'%' 
        return
    end 
	-- SELECT 1
	select 1 Value, 'Invalid control type or code' Text 
	
END

Входные параметры:

  • q - что набрал в поиске пользователь
  • parameters - содержит terminalCode, terminalItemID
  • controlType - тип компонента (from, table, dashboard)
  • controlCode - код компонента (например, код формы)
  • username - текущий пользователь 

Выходные параметры

SELECT 1

  • Value - значение itemID
  • Text - выводимый текст для пользователя (например, ФИО клиента)

Загрузка виджета по ссылке

Вы можете разместить ссылку в произвольном месте страницы (на которой есть терминал) для добавления конкретного виджета, доступного для загрузки на данном терминале. 

Для этого указываем ссылку следующего вида: 

<a href="#" class="as-term-widgetLink" data-type="form" data-code="editSetting" data-itemid="globalJS">LINK</a>
  • data-type - тип загружаемого компонента
  • data-code - код компонента (например, код формы)
  • data-itemID - itemID, который передается в компонент. Если здесь пустая строка, то передается defaultItemID от начального элемента в списке доступных виджетов

Системные элементы

В базе данных терминалы хранятся в таблицах с префикcом as_term_: 

  • as_term_types - типы терминалов
  • as_term_terminals - терминалы конкретных пользователей
  • as_term_areas - панели терминалов
  • as_term_widgets - виджеты, добавляемые на панели терминалов
  • as_term_log - лог действий пользователей с терминалами

Для переноса компонента необходимо перенести все хранимые процедуры с префиксом as_term_ и term_example и таблицы с префиксом as_term_.

При разработке таблиц и форм, предназначенных для терминалов стоит учитывать, что все взаимодействие происходит по возможности без переходов на другие страницы: 

  • вместо перехода на отдельные страницы - открываем модальные окна, подтаблицы, таблицы/формы по ссылке. 
  • вместо обновления страницы через полную перезагрузку - используем обновление области страницы через refreshContainer (например, обновление конкретного виджета). 

Falcon Space - функциональная веб-платформа разработки на узком стеке MS SQL/Bootstrap. Вводная по Falcon Space
Насколько полезной была статья?

Google поиск по нашей документации

Выгода от использования Falcon Space

В 2-3 раза экономнее и быстрее, чем заказная разработка
Более гибкая, чем коробочные решения и облачные сервисы
Используйте готовые решения и изменяйте под свои потребности
Нужна бесплатная консультация?
Планируете делать веб-проект?
Сайт использует Cookie. Правила конфиденциальности OK