Toggle navigation
Wialon Playground
Add library
jQuery latest
Bootstrap 3.3.1
Wialon Javascript SDK
Run
Get code
Fork
Save
Examples
Login
Get units
Change unit icon
Get messages
Get sensors
Edit sensors
Commands
Monitoring notification
Track layer
Get resources
Resources and accounts
Account parameters
Do payment
Management Driver
Create notification
Get geofences
Geofence parameters
Create geofence
Gurtam map
Units on map
Unit trace
Create report template
Execute report
Execute custom report
Create driver
Bind driver to unit
Unit edit fields
Import fillings
Token login for site
Advanced authorization form
Token usage in app
Account hierarchy
Nearest units
<!DOCTYPE html> <html> <head> <meta charset="utf-8" /> <title>Система контроля за подвижными элементами</title> <script type="text/javascript" src="http://code.jquery.com/jquery-latest.min.js"></script> <script type="text/javascript" src="https://hst-api.wialon.com/wsdk/script/wialon.js"></script> </head> <body> <input id="login" type="button" value="Click to open login page" onclick="getToken()"/> <input id="logout" type="button" value="Click to logout" disabled onclick="logout()"/> <table id="form" style="display:none;"> <tr><td>Текущий пользователь</td><td id="user"></td></tr> <tr> <td>Выберите ресурс:</td> <td> <select id="res"></select> </td> </tr> <tr><td>Гос № ТС:</td> <td><input type = "text" id="unit"/></td></tr> <tr><td>От: (дата, время)</td> <td><input type="datetime-local" id = "from"/></td></tr> <td>До: (дата, время)</td> <td><input type="datetime-local" id = "to"/></td> <tr><td colspan="2" style="text-align:center;"><input type="button" value="Выполнить отчет" id="exec_btn"/></td></tr> </table> <div id="log"></div> </body> </html>
HTML
td, th{ border: 1px solid #c6c6c6; } .wrap{ max-height:150px; overflow-y: auto; } .odd, th{ background:#EEE; border: 1px solid #c6c6c6; } ul{ list-style: none; margin:0px; padding:0px; display:block;overflow-y: auto; max-height: 200px;width: 300px} label{ cursor:pointer; }
CSS
// Print message to log function msg(text) { $("#log").prepend(text + "<br/>"); } // Wialon site dns var dns = "http://hosting.wialon.com"; // Main function function getToken() { // construct login page URL var url = dns + "/login.html"; // your site DNS + "/login.html" url += "?client_id=" + "App"; // your application name url += "&access_type=" + 0x100; // access level, 0x100 = "Online tracking only" url += "&activation_time=" + 0; // activation time, 0 = immediately; you can pass any UNIX time value url += "&duration=" + 604800; // duration, 604800 = one week in seconds url += "&flags=" + 0x1; // options, 0x1 = add username in response url += "&redirect_uri=" + dns + "/post_token.html"; // if login succeed - redirect to this page // listen message with token from login page window window.addEventListener("message", tokenRecieved); // finally, open login page in new window window.open(url, "_blank", "width=760, height=500, top=300, left=500"); } // Help function function tokenRecieved(e) { // get message from login window var msg = e.data; if (typeof msg == "string" && msg.indexOf("access_token=") >= 0) { // get token var token = msg.replace("access_token=", ""); // now we can use token, e.g show it on page //document.getElementById("token").innerHTML = token; document.getElementById("login").setAttribute("disabled", ""); document.getElementById("logout").removeAttribute("disabled"); // or login to wialon using our token wialon.core.Session.getInstance().initSession("http://hst-api.wialon.com"); wialon.core.Session.getInstance().loginToken(token, "", function(code) { if (code) return; var user = wialon.core.Session.getInstance().getCurrUser().getName(); document.getElementById("user").innerHTML = user; document.getElementById("form").style.display = ''; init(); }); // remove "message" event listener window.removeEventListener("message", tokenRecieved); } } function logout() { var sess = wialon.core.Session.getInstance(); if (sess && sess.getId()) { sess.logout(function() { document.getElementById("logout").setAttribute("disabled", ""); document.getElementById("login").removeAttribute("disabled"); document.getElementById("user").innerHTML = ''; document.getElementById("res").innerHTML = ''; document.getElementById("form").style.display = 'none'; document.getElementById("log").innerHTML = ''; }); } } function init() { var res_flags = wialon.item.Item.dataFlag.base | wialon.item.Resource.dataFlag.reports; var flags = wialon.item.Item.dataFlag.base | wialon.item.Unit.dataFlag.lastMessage | wialon.item.Item.dataFlag.customFields; var sess = wialon.core.Session.getInstance(); // get instance of current Session // flags to specify what kind of data should be returned sess.loadLibrary("resourceReports"); // load Reports Library sess.loadLibrary("itemCustomFields"); sess.updateDataFlags( // load items to current session [ { type: "type", data: "avl_unit", flags: flags, mode: 0 }, { type: "type", data: "avl_resource", flags:res_flags , mode: 0 } // 'avl_resource's specification ], function (code) { // updateDataFlags callback if (code) { msg(wialon.core.Errors.getErrorText(code)); return; } // exit if error code var res = sess.getItems("avl_resource"); // get loaded 'avl_resource's items if (!res || !res.length){ msg("Resources not found"); return; } // check if resources found for (var i = 0; i< res.length; i++) // construct Select object using found resources $("#res").append("<option value='" + res[i].getId() + "'>" + res[i].getName() + "</option>"); } ); } function getUnitByVIN() { var val = $("#unit").val(); var sess = wialon.core.Session.getInstance(); // get loaded 'avl_unit's items var units = sess.getItems("avl_unit"); if (!units || !units.length){ msg("Units not found"); return; } // check if units found for (var i = 0; i < units.length; i++){ // construct Select object using found units var u = units[i]; // current unit in cycle var customFields = u.getCustomFields(); var firstCustomField = ""; for (var id in customFields) { firstCustomField = customFields[id].n + ": " + customFields[id].v; var nomer = customFields[id].n; if (val==nomer) var unitID = u.getId(); } } return unitID; } function executeReport() { // функция выполнения отчета // get data from corresponding fields var id_res=$("#res").val(); if(!id_res) { msg("Выберите ресурс"); return; } // exit if no resource selected var u = getUnitByVIN(); if(!u) { msg ("Автомобиль с данным номером не найден"); return; } var nomer = $("#unit").val(); var sess = wialon.core.Session.getInstance(); // get instance of current Session var res = sess.getItem(id_res); // get resource by id var from = Date.parse($("#from").val())/1000; var to = Date.parse($("#to").val())/1000; var units = sess.getItems("avl_unit"); if (!units || !units.length){ msg("Units not found"); return; } // проверяет найдены ли объекты var interval = { "from": from, "to": to, "flags": wialon.item.MReport.intervalFlag.absolute }; $("#exec_btn").prop("disabled", true); // disable button (to prevent multiclick while execute) var template = {// fill template object "id": 0, "n": "unit_stays", "ct": "avl_unit", "p": "", "tbl": [{ "n": "unit_stays", "l": "Стоянки", "c": "time_begin,time_end,duration,location", "cl": "Начало, Конец, Длительность, Местоположение", "s": "", "sl": "", "p": "", "sch": { "f1": 0, "f2": 0, "t1": 0, "t2": 0, "m": 0, "y": 0, "w": 0 }, "f": 0 }] }; res.execReport(template, u, 0, interval, // выполнить выбранный отчет function(code, data) { // execReport template $("#exec_btn").prop("disabled", false); // включить клавишу if (code) { msg(wialon.core.Errors.getErrorText(code)); return; } // выходит, если ошибочный код if (!data.getTables().length) { // выходит, если не найдено таблиц msg("<b>Нет данных для данного объекта</b>"); return; } else showReportResult(data, nomer); // показ результата отчета }); } function showReportResult(result, nomer){ // показ результата после выполнения отчета var tables = result.getTables(); // выдает таблицы отчета if (!tables) return; // выходит, если таблиц не обнаружено for(var i=0; i < tables.length; i++){ // цикл по таблицам // html включает информацию об одной таблице var html = "<b>"+ tables[i].label +"</b><div class='wrap'><table style='width:100%'>"; var headers = tables[i].header; // get table headers html += "<tr>"; // открытие заголовка строки html += "<th>Гос. номер</th>"; for (var j=0; j<headers.length; j++) // выбор заголовка html += "<th>" + headers[j] + "</th>"; var unitStopsLocations = []; html += "</tr>"; // закрытие заголовка строки result.getTableRows(i, 0, tables[i].rows, // выдать строки таблицы qx.lang.Function.bind( function(html, code, rows) { // getTableRows callback if (code) {msg(wialon.core.Errors.getErrorText(code)); return;} // exit if error code for(var j in rows) { // cycle on table rows if (typeof rows[j].c == "undefined") continue; // скрытие пустых строк html += "<tr"+(j%2==1?" class='odd' ":"")+">"; // открытие строки таблицы html += "<td>" + nomer + "</td>"; for (var k = 0; k < rows[j].c.length; k++) { // добавить ячейки в таблицу html += "<td>" + getTableValue(rows[j].c[k]) + "</td>"; if (k == rows[j].c.length-1) unitStopsLocations.push(getTableValue(rows[j].c[k])); } html += "</tr>";// закрытие строки таблицы } html += "</table>"; msg(html +"</div>"); }, this, html) ); } } function getTableValue(data) { // calculate ceil value if (typeof data == "object") if (typeof data.t == "string") return data.t; else return ""; else return data; } // выполняется, когда DOM готов $(document).ready(function () { getToken(); $("#exec_btn").click(executeReport); // привязать действие к кнопке });
JS
Result
Source code of example
Close ✕
×
Source code