скрипты. подсказка Скрипты. Скрипт подготовки анкеты перед запуском
Скачать 20.1 Kb.
|
Скрипт подготовки анкеты перед запуском for (let q of questions.getAll()) { let tmp = q.outputColumnTemplate; if (q.flags & QuestionFlags.SkipExport) continue; if (tmp === undefined) tmp = getTemplate(q.type, 'Q' + q.number); let text = q.plainText.replace(/\s/g, '_').replace(/[^A-ZА-Я\d_]/gi, '').slice(0,250); q.outputColumnTemplate = tmp + '_' + text; } function getTemplate(qType, tmp, oV) { switch (qType) { case QuestionTypeIds.SingleChoice: tmp += oV === undefined ? '' : '_{1}' + oV; break; case QuestionTypeIds.MultipleChoice: tmp += oV === undefined ? '_{1}' : '_{1}' + oV; break; case QuestionTypeIds.Table_Text: case QuestionTypeIds.Table_Numeric: tmp += oV === undefined ? '_{2}' : '_{2}' + oV; break; case QuestionTypeIds.Table_SingleChoice: tmp += oV === undefined ? '_{2}' : '_{2}_{1}' + oV; break; case QuestionTypeIds.Table_MultipleChoice: tmp += oV === undefined ? '_{2}_{1}' : '_{2}_{1}' + oV; break; } return tmp; } Скрипт обработки перед сохранением интервью // скрипт обработки в глобальных анкеты if (isQuotaReached()) { lockKey(V.idKey); } CSS стили для анкеты /* Добавление нестандартного шрифта */ @import url('https://fonts.googleapis.com/css?family=PT+Serif'); /*стиль кнопок*/ .btn { font-size: 14px } /* Блок текста вопроса */ div.question-text { font-style: italic !important; color:#ffff; padding-top: 0.2em; padding-bottom: 0.2em; padding-left: 0.3em; background-image: linear-gradient(to top, rgb(8, 76, 153), rgb(18, 84, 162), rgb(28, 92, 171), rgb(39, 100, 179), rgb(49, 108, 188), rgb(59, 116, 197), rgb(69, 125, 206), rgb(79, 133, 215), rgb(89, 141, 224), rgb(100, 149, 232), rgb(110, 157, 241), rgb(120, 165, 250)); } /* Установка шрифта в качестве основного и изменение цвета фона анкеты */ body { font-family: 'PT+Serif'; background-color: #f4f9fd; font-size: 16px; } /* Скрытие нижнего блока с именем клиента и логотипом */ .ss-footer { display: none; } /* Цвет таблицы*/ .table-striped>tbody>tr:nth-of-type(odd) { background-color: #cee5f3;/* фон нечетных строк */ } .table-striped>tbody>tr:nth-of-type(even) { background-color: #f3fbff;/* фон четных строк */ } /* расположение календаря .col-sm-1, .col-sm-10, .col-sm-11, .col-sm-12, .col-sm-2, .col-sm-3, .col-sm-4, .col-sm-5, .col-sm-6, .col-sm-7, .col-sm-8, .col-sm-9 { left: 7em; } */ /ЗАКОДИРУЙТЕ/ выбор возрастной группы let age = Q908.openValueInt; Q[1].checked = age < 20; Q[2].checked = age >= 20 && age <= 24; Q[3].checked = age >= 25 && age <= 34; Q[4].checked = age >= 35 && age <= 44; Q[5].checked = age >= 45 && age <= 54; Q[6].checked = age >= 55 && age <= 64; Q[7].checked = age > 64; return answered; Не требовать обязательного ответа на вопрос (проверка ответа скриптами) (Есть список ответа и список строк) let rFlags = AnswerFlags.CustomRowValidation | AnswerFlags.OpenValueTxt; for (let row of Q.rows.getVisible()) { if (row.isChecked(1) && row[1].openValueTxt === undefined) { return error('Пожалуйста, заполните выбранный ответ в строке ' + row.code); }; if ((row.flags & rFlags) == rFlags) { if (row.openValueTxt && row.getCheckedCodes().length == 0) { return error('Необходимо выбрать ответ в строке Другое'); }; if (row[1].openValueTxt && row.openValueTxt === undefined) { return error('Пожалуйста, укажите что именно Другое'); }; }; } let min = 1; // количество строк с ответом let count = 0; if (min > Q.rows.visibleCount) min = Q.rows.visibleCount; for (let row of Q.rows.getVisible()) { switch (Q.type) { case QuestionTypeIds.Table_Text: if (row.answer.openValueTxt !== undefined) count++; break; case QuestionTypeIds.Table_Numeric: if (row.answer.openValueNum !== undefined) count++; break; case QuestionTypeIds.Table_SingleChoice: case QuestionTypeIds.Table_MultipleChoice: if (row.getCheckedCodes().length > 0) count++; break; } if (count >= min) return ok; } return error('Требуется заполнить не менее ' + min + ' строки'); Список строк с открытыми вариантами ответа рядом let num1 = Q.rows[1].answer.openValueInt; let num2 = Q.rows[2].answer.openValueInt; let num3 = Q.rows[3].answer.openValueInt; let num4 = Q.rows[4].answer.openValueInt; if (num2<=num1) { return error('цена во второй строке не может быть меньше или равна предыдущей'); } if (num3<=num2) { return error('цена в третьей строке не может быть меньше или равна предыдущей'); } if (num4<=num3) { return error('цена в четвертой строке не может быть меньше или равна предыдущей'); } Скрипт после ответа на вопрос про телефон if (isTesting() || isPostProcessing() || isValidation()) return ok; let phone = Q.openValueNum; if (phone < 70000000000 || phone > 79999999999) { return error('Телефон должен начинаться с 7 и содержать 11 цифр.'); } Скрипт перед показом вопроса КОД В АНКЕТЕ {номер} if (Q2.isAnswered) { V['номер'] = Q2.getChecked()[0].text; } else { V['номер'] = '!ОШИБКА!'; } Скрипт после последнего вопроса. ПЕРЕД ПОКАЗОМ! if (isPostProcessing() || isValidation()) return exit(); lockKey(V.idKey); return exit(); Цена. let num1 = Q.rows[1].answer.openValueInt; let num2 = Q.rows[2].answer.openValueInt; let num3 = Q.rows[3].answer.openValueInt; let num4 = Q.rows[4].answer.openValueInt; if (num2<=num1) { return error('цена во второй строке не может быть меньше или равна предыдущей'); } if (num3<=num2) { return error('цена в третьей строке не может быть меньше или равна предыдущей'); } if (num4<=num3) { return error('цена в четвертой строке не может быть меньше или равна предыдущей'); } let num1 = Q.rows[1].answer.openValueInt; let num2 = Q.rows[2].answer.openValueInt; let num3 = Q.rows[3].answer.openValueInt; let num4 = Q.rows[4].answer.openValueInt; if (num2>=num1) { return error('цена во второй строке не может быть больше или равна предыдущей'); } if (num3>=num2) { return error('цена в третьей строке не может быть больше или равна предыдущей'); } if (num4>=num3) { return error('цена в четвертой строке не может быть больше или равна предыдущей'); _____________________________________________________________________________________ Q and not Q (code = 7 or code = 10 or code = 14) |