readme.md

    Установка

    Вариант 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>	
    

    Общий принцип использования на хост-странице

    Основные договорённости и принципы решения:

    1. SDK кэширует данные в локальной БД. Получает данные от сервера, сохраняет, добавляет к ним то, что пользователь отредактировал или осмотрел.

    2. SDK выдаёт данные host-странице и строит свои экраны всегда по локальной БД. Даже при наличии интернета, запросы к серверу НЕ синхронные.

    3. Методы обращения к данным, доступные host-странице, всегда отдают наиболее свежие данные непосредственно, однако реализован механизм подписки на события изменения данных.

    4. Host-приложение должно проектироваться таким образом, чтобы обрабатывать изменения данных, на которые подписывается. Не единожды, а до тех пор, пока подписка не будет отменена. К примеру, метод eventBus.on('inspectionsList', listener) единожды вызванный, организует подписку и будет вызывать указанный listener каждый раз, когда данные будут меняться.

    Доступные методы

    1. Инициализация (Логин):

      	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' });
      

      с произвольными параметрами.

    2. Подписки, работа с ними и доступные события:

      	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. может быть полезно для взаимодействия с кнопками “назад”-“вперёд” как браузерными, так хост-страницы.
    3. Методы получения данных:

      • 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" – минимально необходимые, но достаточные операции по этапу выполнены.
    4. Синхронизация: myApp.forceSync();: заставляет WebSDK попробовать синхронизироваться с сервером прямо сейчас.

    5. Навигация: myApp.setRoute(route, force);: заставляет WebSDK осуществить переход к указанной странице. Если параметр force равен true, то WebSDK перейдёт на страницу даже тогда, когда уходить с текущей страницы нельзя или не предусмотрен прямой штатный переход к странице route.

    6. Завершение работы:

      myApp.close();: завершает работу объекта WebSDK, для повторной работы необходимо начинать с const myApp = window.va_app_instance.VAWebSDK();

    Описание

    РОСОСМОТР // SDK для WEB

    Конвейеры
    0 успешных
    0 с ошибкой