Установка
Вариант 1 (показан в example.html):
npm install git+https://gitflic.ru/project/rososmotr/websdk.git
import { VaConstructor, App as VaApp } from 'rososmotr-web-sdk';
VaConstructor(VaApp);
Вариант 2 (показан в example2.html):
<script src="rososmotr-web-sdk.umd.js"></script>
<script>
RososmotrWebSDK.VaConstructor(RososmotrWebSDK.App);
</script>
В обоих вариантах нужно также подключить стили:
<link rel="stylesheet" href="style.css">
и создать контейнер (id строго “vaapp”)
<div id="vaapp"></div>
Общий принцип использования на хост-странице
Основные договорённости и принципы решения:
SDK кэширует данные в локальной БД. Получает данные от сервера, сохраняет, добавляет к ним то, что пользователь отредактировал или осмотрел.
SDK выдаёт данные host-странице и строит свои экраны всегда по локальной БД. Даже при наличии интернета, запросы к серверу НЕ синхронные.
Методы обращения к данным, доступные host-странице, всегда отдают наиболее свежие данные непосредственно, однако реализован механизм подписки на события изменения данных.
Host-приложение должно проектироваться таким образом, чтобы обрабатывать изменения данных, на которые подписывается. Не единожды, а до тех пор, пока подписка не будет отменена. К примеру, метод
eventBus.on('inspectionsList', listener)
единожды вызванный, организует подписку и будет вызывать указанный listener каждый раз, когда данные будут меняться.
Доступные методы
Инициализация (Логин):
const myApp = window.va_app_instance.VAWebSDK();
Возвращает объект WebSDK для последующего использования в host-приложении.
myApp.init({ token: 'someToken', userId: 123, serverUri: 'someURI', apikey: 'myKey' });
token
– (string) токен открытой сессии текущего пользователя, например"904822.ffb34b6110abca4df25f63fd9ba333fc"
;userId
– (int) идентификатор текущего пользователя из БД viewapp, например904822
;serverUri
– (string) адрес сервера для обмена данными, который будет использоваться как префикc для всех запросов, например"https://web.rososmotr.ru"
. Адрес должен быть без завершающего слэша.apikey
– (string) ключ копии SDK, по которому определяется принадлежность к компании (должен быть выдан вам Рососмотром), например"sdk.cmp15"
;
Метод принимает токен, идентификатор авторизованного пользователя и вспомогательные параметры для связи с серверами. Идентификатор пользователя определяет локальную БД, поэтому важно, чтобы
userId
был задан корректно.Получить токен и идентификатор пользователя необходимо через серверное
взаимодействие методом /sdk/sdk_login.
Прервать сессию пользователя в дельнейшем можно методом /sdk/sdk_logout.
Для пробного запуска приложения без логина и без связи с сервером можно использовать
myApp.testInit({ token: 'someToken', userId: 123, serverUri: 'someURI', apikey: 'myKey' });
с произвольными параметрами.
Подписки, работа с ними и доступные события:
myApp.eventBus.on('eventName', listener); // добавление постоянной подписки myApp.eventBus.once('eventName', listener); // добавление разовой подписки (использовать с осторожностью) myApp.eventBus.off('eventName', listener); // удаление подписки
События и что они возвращают:
sending
: true, если отправка данных началась, false если закончиласьreceiving
: true, если получение данных началось, false если закончилосьinspectionList
: возвращает массив осмотров, структура указана нижеinspection
: возвращает детальные данные осмотра, структура указана нижеuser
: возвращает данные пользователя, структура указана нижеrouteChanged
: возвращает внутреннее навание страницы, куда перешёл пользователь внутри WebSDK. может быть полезно для взаимодействия с кнопками “назад”-“вперёд” как браузерными, так хост-страницы.
Методы получения данных:
myApp.getUser()
: возвращает пользователя текущей сессии// UserModel { "id": 17901, "lastName": "Иванов", "firstName": "Иван", "middleName": "Иванович", "phone": "+71234567890", "role": "agent", "language": "ru" }
myApp.getInspectionList()
: возвращает массив доступных осмотров// InspectionInListModel { "id": 142369, "objectName": "Полное наименование объекта", "serviceName": "Наименование схемы осмотра", "image": "https://", "status": { "alias": "contract", "name": "Заявление принято", "message": "Проверка фотографий прошла успешно", "date": "2021-10-12 18:53:17" } }
myApp.getInspection(inspectionId)
: возвращает данные осмотра для детального экрана// InspectionDetailsModel { "id": 142369, "objectName": "KASKO Lexus UX I", "serviceName": "Automobile loss settlement", "status": { "alias": "draft", "name": "The inspection is incomplete", "message": "You have not completed the inspection...", "date": "2021-03-23 21:37:42" }, "statusList": [ { "alias": "draft", "ord": 1, "short": "осмотр не завершён", "description": "Вы не завершили осмотр или...", "datetime": "2019-06-03 06:04:16", "isPassed": false, "isCurrent": true }, { "alias": "expertise", "ord": 3, "short": "экспертиза", "description": "Сделанные вами фотографии переданы на проверку", "datetime": null, "isPassed": false, "isCurrent": false } ], "isChecklist": false, "stages": [ // InspectionStageModel { "type": "multiShooting", "key": "1903", "ord": 4, "icon": "https://", "title": "Equipment", "subTitle": "Repeat shooting", "state": "todo" }, { "type": "repeatShooting", "key": "1902", "ord": 3, "icon": "https://", "title": "Tools", "subTitle": "Multi shooting", "state": "todo" } ], "allowedActions": [ "sendToReview", "makeAgreement" ], "extraButtons": [ { "isDoc": true, "icon": "https://web.rososmotr.ru/img/extra_buttons/pdf.png", "text": "Акт об осмотре", "subText": "PDF", "size": "0,73 Мб", "url": "https://web.rososmotr.ru/pdf/inspection_test_4222b902d.pdf", "ord": 1 } ] }
- поля
status
иstatusList
связаны между собой: status
– текущий статус осмотра по данным из локальной БД;statusList
– список статусов, через которые осмотр проходил или будет проходить — помогает добавить наглядности для пользователя.statusList.isPassed
– (bool) флаг: считается ли данный статус пройденным для текущего осмотра;statusList.isCurrent
– (bool) флаг: является ли данный статус текущим статусом осмотра.
Один и тот же статус может многократно повторяться в осмотре, так как предусмотрен возврат на доработку и повторная экспертиза (можно много раз).
extraButtons
– массив дополнительных материалов или действий — в него, в том числе, выдаётся ссылка на документ до и после подписания (файл НЕ кэшируется SDK и должен быть загружен host-приложением, при необходимости).
- поля
InspectionStageModel
- поле с изображением
icon
в текущей версии SDK выдаёт ссылку на файл в интернете, либо пустую строку, когда изображения нет (кэшировать картинку в текущий момент host-приложению необходимо самостоятельно); state
– состояние готовности этапа, может иметь один из вариантов заполнения:"todo"
– этап ещё не заполнялся, пользователь начнёт делать его впервые;"alarm"
– пользователь начинал выполнять этап, но не завершил; или эксперты вернули этап на доработку;"done"
– минимально необходимые, но достаточные операции по этапу выполнены.
- поле с изображением
Синхронизация:
myApp.forceSync();
: заставляет WebSDK попробовать синхронизироваться с сервером прямо сейчас.Навигация:
myApp.setRoute(route, force);
: заставляет WebSDK осуществить переход к указанной странице. Если параметрforce
равенtrue
, то WebSDK перейдёт на страницу даже тогда, когда уходить с текущей страницы нельзя или не предусмотрен прямой штатный переход к страницеroute
.Завершение работы:
myApp.close();
: завершает работу объекта WebSDK, для повторной работы необходимо начинать сconst myApp = window.va_app_instance.VAWebSDK();