![]() |
Мобильная Торговля
|
Версия
|
function doAction() { var conf = { "isNeedCheckUnsoldAssortment": false } api.result.setConfig(conf); }
{ "uri": "stmobile://action/<ДОКУМЕНТ>/preopen", "type": "action", "datascript": { "script_file": "preopen.js" } }Где <ДОКУМЕНТ> - название документа, например preorder.
var newAttr = api.form.newRowsAttribute('columnNameHere'); // Добавление колонки newAttr.title = "Название колонки"; // Установка заголовкаБолее подробно о доступных полях: Attribute
{ "uri": "stmobile://action/<ДОКУМЕНТ>/iteminit", "type": "action", "datascript": { "script_file": "iteminit.js" } }И создайте data-скрипт iteminit.js.
var currAttr = api.form.rowAttribute('columnNameHere', api.context.rowItemId); currAttr.value = 42; // установка значенияДля обмена данными между двумя скриптами используйте кэш.
function mtcall_mechanicsFormConfig() { var config = { conditionsPanelVisible: true, // отображение блока "Условие акции" conditionsPanelEnabled: false, // редактирование блока "Условие акции" bonusPanelVisible: true, // отображение блока "Бонус" bonusPanelEnabled: false // редактирование блока "Бонус" } api.result.setConfig(config) }api.result.setConfig принимает в качестве параметра объект и устанавливает конфигурацию формы.
function mtcall_editAnswerConfig() { var config = { isAllowedBarcodeManualEdit: true, // включить редактирование штрихкода } api.result.setConfig(config) }api.result.setConfig принимает в качестве параметра объект и устанавливает конфигурацию формы.
{ bonusItemsList: [ { skuId: ID // идентификатор товара к которому применяется бонус value: number // количество бонусов }, ... , ], bonusPoint: number // количество бонусных балов переданных на сохранение, не доступно к изменению }На выход скрипта надо передать точно такую же структуру, она подменит текущую переданную на сохранение.
api.result.setData("bonusItemsList" , {...}); api.result.setData("bonusPoint" , 1);stmobile://tma/bonus/postregistration
{ "uri": "stmobile://document/survey/customanswers", "type": "action", "datascript": { "script_file": "customAnswers.js" } }Содержимое файла customAnswers.js:
function doAction() { const { distributorId, templateId } = api.context; const topics = api.survey.service.topics(templateId).value; const answers = []; topics.forEach((topic) => { const questions = api.survey.service.questions(templateId, topic.id, distributorId).value; questions.forEach((question) => { const { possibleValues } = question.answerValuesRange; const answer = { topicId: topic.id, questionId: question.id, values: [], }; switch (question.answerType) { case 'DataTypeInteger': answer.values.push(357); break; case 'DataTypeReal': answer.values.push(111.111); break; case 'DataTypeYesNo': answer.values.push(1); break; case 'DataTypeYesNoUnknown': answer.values.push(2); break; case 'DataTypeSingle': answer.values.push(possibleValues[1].value); break; case 'DataTypeMultiple': answer.values.push(possibleValues[1].value); break; case 'DataTypeText': answer.values.push('text'); break; case 'DataTypeBarCode': answer.values.push('1q2w3e4r5t'); break; case 'DataTypeDate': answer.values.push(new Date(2019, 3, 25)); break; case 'DataTypeTime': answer.values.push(new Date(1900, 0, 1, 2, 30)); break; case 'DataTypeDateTime': answer.values.push(new Date(2019, 3, 25, 14, 40)); break; default: answer.values.push('-'); } answers.push(answer); }); }); api.result.setParams("customAnswers", answers); }
var reasons = api.visit.reasonModel(); var ret = api.interactive.selectSingleValue("Результат посещения", reasons, reasons[0].value); if (!ret.success) { // нажали "Отмена" ... } else { var reasonId = ret.value; api.result.setData("reasonId", reasonId); }
1. last_visits - Последние визиты 2. limits - Лимиты 3. matched_outlets - Сопоставленные точки 4. outlet_photos - Фотографии точки 5. properties - Общая информация 6. visits_calendar - Календарь визитов
{ ... "config": { "settingsKey": "myreport_open_modules", "modules": [ { "name": "my_module", // имя подключенного модуля (обязат.) "position": 1, // порядок сортировки (обязат.) "uiName": "qsTr(My module)", // заголовок, который будет отображен в интерфейсе (обязат.) "visibilityCheck": true, // проверка отображения модуля "reloadCheck": "self", // проверка необходимости перезагрузки модуля "isDisabled": false // отключение загрузки модуля } ] } ... }
function doAction() { var attributes = api.context.config, attributesLength = attributes.length; for (var i = 0; i < attributesLength; i++) { // Структура атрибута: // { // isReadonly: bool, (только для чтения) // isRequired: bool, (обязательный для заполнения) // defValue: string, (значение по умолчанию, используется только при создании новой ТТ) // isShared: bool, (разделяемый или нет) // distributorId: id, (задано, если атрибут разделяемый) // isUsed: bool, (признак использования атрибута) // isVisible: bool, (признак отображения на форме. Атрибут может существовать в невидимом виде. // Если при этом атрибуту назначено значение по умолчанию, то оно сохранится при записи) // param: string (параметр атрибута, обычно указывает на классификатор, например, "ClassifierTT1") // title: string (заголовок атрибута) // type: string (внутреннее название атрибута, см. структуру AttributeType) // valueHint: string (подсказка-placeholder для текстовых полей) // } attributes[i].isRequired = true; } // Установка новых значений параметров api.result.setConfig(attributes); }
// Скрываем колонку const rest = api.form.rowAttribute('NameRestStore'); rest.force = true; rest.view = false;
// Было ... for (var i = 0; i <= length; i++) { var reg = /(привет)?/g; var match = reg.exec(data[i]); if (match[1]) result.push(match[1]); } ... // Надо ... var reg = /(привет)?/g; for (var i = 0; i <= length; i++) { var match = reg.exec(data[i]); if (match[1]) result.push(match[1]); reg.lastIndex = 0; } ...
<ul> {% range 5 as num %} <li>{{ num }}</li> {% endrange %} </ul>Получится:
<ul> {% range 5 10 as num %} <li>{{ num }}</li> {% endrange %} </ul>Получится:
<ul> {% range 5 30 5 as num %} <li>{{ num }}</li> {% endrange %} </ul>Получится:
... mapper.rating = 4; ...
{% range rating %} * {% endrange %}Получится:
<meta name="snapshot" content="EnablePixelCopy" />
// Примерный текст ошибки Can not call method of undefinedПри этом линтер не подчеркнет некорректные символы, а внешне они будут выглядеть одинаково.
function doAction() { var defaultItems = api.context.config; var userDefinedItems = [ { "name": "Summary", "icon": "globalmenu/dashboard", "title": "Summary", "uri": "stmobile://dashboard" }, { "name": "route", "icon": "globalmenu/route", "title": "Supervisor Routes", "uri": "stmobile://route", "subtitle": "Ленинградский р-н" } ]; for (var i = 0; i < userDefinedItems.length; i++) { var isFound = false; for(var j = 0; j < defaultItems.length; j++) { var userObject = userDefinedItems[i]; var defaultObject = defaultItems[j]; if (defaultObject.hasOwnProperty["name"] && defaultObject["name"].toLowerCase() === userObject["name"].toLowerCase()) { defaultObject["title"] = userObject["title"]; defaultObject["icon"] = userObject["icon"]; defaultObject["uri"] = userObject["uri"]; defaultObject["subtitle"] = userObject["subtitle"]; isFound = true; } } if (!isFound) defaultItems.push(userObject); } api.result.setConfig(defaultItems); api.result.type = "ok"; }