guide.js 34 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960
  1. var CONST = {
  2. DeployStep_Begin : 0,
  3. DeployStep_GetTerminalInfo : 1,
  4. DeployStep_FetchCenterSettings : 2,
  5. DeployStep_AccessAuthorize : 3,
  6. DeployStep_MediaConfig : 4,
  7. DeployStep_Finished : 5,
  8. DeployStep_AdapterConfig : 6
  9. };
  10. var SETCTION = {
  11. BEGIN:'start',
  12. GETTERMINAL_INFO:'init_param',
  13. CENTERSETTINGS:'sync_centersetting',
  14. ACCESS_AUTHORIZE:'access_authorize',
  15. MEDIA_CONFIG:'media_config',
  16. FINSHED:'finish',
  17. };
  18. var MEDIA_TYPE = {
  19. CAMERA : 1,
  20. MICROPHONE : 2,
  21. LOUNDSPEAKER:4
  22. }
  23. var MEDIA_DETAIL_TYPE = {
  24. MediaDev_OutSpeaker:1,
  25. MediaDev_InSpeaker:2,
  26. MediaDev_OutMicrophone:3,
  27. MediaDev_InMicrophone:4
  28. }
  29. var VENDOR = {
  30. KEBA : 'KEBA',
  31. CW : 'CW',
  32. GRG : 'GRG',
  33. NANTIAN : 'NANTIAN',
  34. GWI : 'GWI'
  35. };
  36. var globalFinishedFlag = false;
  37. var globalInterestRootFlag = false;
  38. var globalAdapterFileNameList = [];
  39. var globalAdapterFileNameStatus = [];
  40. var globalAdapterOpenParamPort = [];
  41. var globalAdapterOpenParamBaudrate = [];
  42. var globalLastRemberAdapterName = '';
  43. var globalLastRemberAdapterConfigState = false;
  44. function clearAdapterSelectedValue()
  45. {
  46. $('#gui_adapter_config_adapter').empty();
  47. $('#gui_adapter_config_adapter').attr("value", '');
  48. $('#guide_adapter_config_port_input').val('');
  49. $('#guide_adapter_config_baudrate_input').val('');
  50. }
  51. function generateAdapterSelect(devices, status, select_id) {
  52. var deviceLength = 0;
  53. if ((devices) instanceof Array) {
  54. deviceLength = devices.length;
  55. } else {
  56. deviceLength = 1
  57. }
  58. var devicesHtml = '';
  59. var selectid = select_id;
  60. $('#' + selectid).empty();
  61. for (var loop = 0; loop < deviceLength; loop++) {
  62. var cur = devices[loop];
  63. var deviceTemplateData = {
  64. loop: loop,
  65. deviceName : cur,
  66. type: selectid
  67. };
  68. var pushHtml = '';
  69. pushHtml = '<div id="{{type}}_item_{{loop}}" option="{{deviceName}}" class="select_medium hide_with_ellipsis"'
  70. if(!(status[loop] & 0x1)) {
  71. pushHtml += ' style="color:#C0C0C0;"'
  72. } else {
  73. pushHtml += ' onclick="AdapterSelectChange(\'{{deviceName}}\')"'
  74. }
  75. //root.ini 配置
  76. if((status[loop] & 0x2)) {
  77. pushHtml += '>{{deviceName}}&nbsp;(当前配置)</div>'
  78. } else {
  79. pushHtml += '>{{deviceName}}</div>'
  80. }
  81. $('#' + selectid).secureAppend(pushHtml, deviceTemplateData);
  82. }
  83. }
  84. function FulfillDevAdapterFileList(device, vendor, root_or_not, flag)
  85. {
  86. let req = new Request();
  87. req.root = root_or_not;
  88. req.adapter=device;
  89. req.vendor=vendor;
  90. req.version="";
  91. req.batch="";
  92. globalAdapterFileNameList = [];
  93. globalAdapterFileNameStatus = [];
  94. globalAdapterOpenParamPort = [];
  95. globalAdapterOpenParamBaudrate = [];
  96. RVC.DeviceControlEntityCtrl.GetVendorFileList(req, function(ret) {
  97. if(ret.errorCode === 0) {
  98. let result = JSON.parse(ret[RVC.EntityController.sigResponseUUID])
  99. if(result.result == 0) {
  100. console.log('=============================');
  101. for (var n = 0; n < result.filenames.length; n++) {
  102. console.log(result.filenames[n] + ' ' + result.status[n] + ' ' + result.port[n] + ' ' + result.baudrate[n]);
  103. globalAdapterFileNameList.push(result.filenames[n]);
  104. globalAdapterFileNameStatus.push(result.status[n]);
  105. globalAdapterOpenParamPort.push(result.port[n]);
  106. globalAdapterOpenParamBaudrate.push(result.baudrate[n]);
  107. if(globalLastRemberAdapterName !== '' && globalLastRemberAdapterName === globalAdapterFileNameList[n]) {
  108. globalLastRemberAdapterConfigState = (globalAdapterFileNameStatus[n] & 0x2);
  109. }
  110. }
  111. clearAdapterSelectedValue();
  112. generateAdapterSelect(globalAdapterFileNameList, globalAdapterFileNameStatus, 'gui_adapter_config_adapter_list');
  113. if(typeof flag !== 'undefined') {
  114. utilShowToast("已刷新");
  115. }
  116. //test
  117. if(result.filenames.length == 1 && globalInterestRootFlag && device !== '' && device != '*') {
  118. FulfillAdapterCurrentSelect(globalAdapterFileNameList[0], (globalAdapterFileNameStatus[0] & 0x2));
  119. } else if(globalLastRemberAdapterName !== '') {
  120. FulfillAdapterCurrentSelect(globalLastRemberAdapterName, globalLastRemberAdapterConfigState);
  121. }
  122. //test_end
  123. } else if(typeof flag !== 'undefined') {
  124. utilStartAlertDialog("操作失败:[" + result.result + "] " + result.msg);
  125. } else {
  126. console.error("操作失败:[" + result.result + "] " + result.msg);
  127. }
  128. } else if(typeof flag !== 'undefined') {
  129. RVC.DeviceControlEntityCtrl.commErrorCallback(ret);
  130. } else {
  131. console.error("操作失败! ErrorCode: " + ErrorCodeStringfy(ret.errorCode));
  132. }
  133. });
  134. }
  135. function LoadDeviceAdaptersWithEvent(flag)
  136. {
  137. var deviceName = $('#gui_adapter_config_device').attr('value');
  138. var vendorName = $('#gui_adapter_config_vendor').attr('value').toLowerCase();
  139. FulfillDevAdapterFileList(deviceName, vendorName, globalInterestRootFlag, flag);
  140. }
  141. function AdapterSelectChange(name)
  142. {
  143. $('#guide_adapter_config_port_input').val('');
  144. $('#guide_adapter_config_baudrate_input').val('');
  145. for(var n=0; n < globalAdapterFileNameList.length; n++) {
  146. if(globalAdapterFileNameList[n] === name) {
  147. if((globalAdapterFileNameStatus[n] & 0x2) /**root.ini 配置 */) {
  148. $('#guide_adapter_config_port_input').val('' + globalAdapterOpenParamPort[n]);
  149. $('#guide_adapter_config_baudrate_input').val('' + globalAdapterOpenParamBaudrate[n]);
  150. }
  151. setSaveBtnStatus(!(globalAdapterFileNameStatus[n] & 0x2));
  152. break;
  153. }
  154. }
  155. }
  156. function FulfillAdapterCurrentSelect(value, configed)
  157. {
  158. if(value === '') {
  159. clearAdapterSelectedValue();
  160. } else {
  161. if(configed) {
  162. $('#gui_adapter_config_adapter').html(value + '&nbsp;(当前配置)');
  163. } else {
  164. $('#gui_adapter_config_adapter').html(value);
  165. }
  166. $('#gui_adapter_config_adapter').attr('value', value);
  167. AdapterSelectChange(value);
  168. }
  169. }
  170. //正式环境该参数不可选
  171. function VendorSelectChanged(name)
  172. {
  173. var deviceName = $('#gui_adapter_config_device').attr('value');
  174. var vendorName = name.toLowerCase();
  175. FulfillDevAdapterFileList(deviceName, vendorName, globalInterestRootFlag, true);
  176. }
  177. function DeviceSelectChange(name)
  178. {
  179. var vendorName = $('#gui_adapter_config_vendor').attr('value').toLowerCase();
  180. FulfillDevAdapterFileList(name, vendorName, globalInterestRootFlag, true);
  181. }
  182. function setBtnStatus(enable, classID)
  183. {
  184. if (enable && $('#' + classID).hasClass('btn_disabled')) {
  185. $('#' + classID).attr('disabled', false);
  186. $('#' + classID).removeClass('btn_disabled');
  187. } else if(!enable && !$('#' + classID).hasClass('btn_disabled')) {
  188. $('#' + classID).attr('disabled', true);
  189. $('#' + classID).addClass('btn_disabled');
  190. }
  191. }
  192. function setTestBtnStatus(enable) {
  193. setBtnStatus(enable, 'guide_adapter_config_test')
  194. }
  195. function setSaveBtnStatus(enable) {
  196. setBtnStatus(enable, 'guide_adapter_config_save')
  197. }
  198. function InterestRootSwitch(flag)
  199. {
  200. if ($('#gui_adapter_config_root_interest_switch').hasClass('switch_on')) {
  201. globalInterestRootFlag = true;
  202. } else {
  203. globalInterestRootFlag = false;
  204. }
  205. setSaveBtnStatus(!globalInterestRootFlag);
  206. if(typeof flag == 'undefined')
  207. LoadDeviceAdaptersWithEvent(true);
  208. else
  209. LoadDeviceAdaptersWithEvent();
  210. }
  211. $(function () {
  212. function ResetDeployConfig() {
  213. let req = new Request();
  214. req.preStep = CONST.DeployStep_Begin;
  215. req.currStep = CONST.DeployStep_Begin;
  216. req.nextStep = CONST.DeployStep_Begin;
  217. req.param1 = 1; //重置标识
  218. req.param2 = 0;
  219. req.param3 = '';
  220. req.param4 = '';
  221. req.param5 = '';
  222. req.array1 = [0];
  223. req.array2 = [''];
  224. req.additional = 0;
  225. req.options = 0;
  226. req.restartApp = true;
  227. req.restartPC = false;
  228. utilStartSubmitDialog();
  229. RVC.HealthmanagerEntityCtrl.DeployTerminal(req, function(ret) {
  230. utilStopSubmitDialog();
  231. if(ret.errorCode === 0) {
  232. let result = JSON.parse(ret[RVC.EntityController.sigResponseUUID])
  233. if(result.result == 0) {
  234. if(req.restartApp || req.restartPC) {
  235. RVC.GuideController.hideAllPage();
  236. RVC.GuideController.hideAllRebootTipElem();
  237. if(req.restartApp) {
  238. $('#guide_restart_loading').show();
  239. } else if(req.restartPC) {
  240. $('#guide_reboot_loading').show();
  241. }
  242. $('#guide_reboot_page').show();
  243. }
  244. } else {
  245. utilStartAlertDialog("操作失败:[" + result.result + "] " + result.additionalMsg);
  246. }
  247. } else {
  248. RVC.HealthmanagerEntityCtrl.commErrorCallback(ret);
  249. }
  250. });
  251. }
  252. function IPConnectableTest(ip)
  253. {
  254. let req = new Request();
  255. req.protocol = 1; //Ping
  256. req.ip = ip;
  257. req.port = 0;
  258. req.reserved1 = 0;
  259. req.reserved2 = '';
  260. function showErrTips(val) {
  261. setTimeout(function () {
  262. $('#text_guide_init_param_ip_tips').addClass('hide');
  263. }, 3000);
  264. $('#text_guide_init_param_ip_tips').removeClass('hide')
  265. .removeClass('guide_input_descript').addClass('guide_error').html(val);
  266. }
  267. function showSuccTips(val) {
  268. setTimeout(function () {
  269. $('#text_guide_init_param_ip_tips').addClass('hide');
  270. }, 3000);
  271. $('#text_guide_init_param_ip_tips').removeClass('hide')
  272. .removeClass('guide_error').addClass('guide_input_descript').html(val);
  273. }
  274. if(!isValidIpAddress(ip)) {
  275. showErrTips('无效IP格式');
  276. return;
  277. }
  278. RVC.DeviceControlEntityCtrl.TestConnectivity(req, function(ret) {
  279. if(ret.errorCode === 0) {
  280. let result = JSON.parse(ret[RVC.EntityController.sigResponseUUID])
  281. if(result.result == 0) {
  282. showSuccTips('可正常连通');
  283. } else {
  284. console.log(result.additionalMsg);
  285. showErrTips(result.additionalMsg);
  286. }
  287. } else {
  288. let tips = ip + ' 测试连接失败:' + ErrorCodeStringfy(ret.errorCode);
  289. showErrTips(tips);
  290. }
  291. });
  292. }
  293. function DeployTerminalWithIPAndPort(server_ip, port, access_flag)
  294. {
  295. let req = new Request();
  296. if(!access_flag) {//下载集中配置
  297. req.preStep = CONST.DeployStep_MediaConfig;
  298. req.currStep = CONST.DeployStep_FetchCenterSettings;
  299. req.nextStep = CONST.DeployStep_AccessAuthorize;
  300. } else { //准入验证
  301. req.preStep = CONST.DeployStep_FetchCenterSettings;
  302. req.currStep = CONST.DeployStep_AccessAuthorize;
  303. req.nextStep = CONST.DeployStep_Finished;
  304. }
  305. req.param1 = parseInt(port, 10);
  306. req.param2 = 0;
  307. req.param3 = server_ip;
  308. req.options = 0;
  309. req.additional = 0;
  310. req.restartApp = false;
  311. req.restartPC = false;
  312. req.param4 = '';
  313. req.param5 = '';
  314. req.array1 = [0];
  315. req.array2 = [''];
  316. utilStartSubmitDialog();
  317. RVC.HealthmanagerEntityCtrl.DeployTerminal(req, function(ret) {
  318. utilStopSubmitDialog();
  319. if(ret.errorCode === 0) {
  320. let result = JSON.parse(ret[RVC.EntityController.sigResponseUUID])
  321. if(result.result == 0) {
  322. utilStartAlertDialog("操作成功,进入下一步", function() {
  323. RVC.GuideController.gotoPage(result.nextStep);
  324. });
  325. } else {
  326. utilStartAlertDialog("操作失败:[" + result.result + "] " + result.additionalMsg);
  327. }
  328. } else {
  329. RVC.HealthmanagerEntityCtrl.commErrorCallback(ret);
  330. }
  331. });
  332. }
  333. function InitTemrinalAbout(server_ip, new_terminalno, vendorName)
  334. {
  335. let req = new Request();
  336. req.preStep = CONST.DeployStep_Begin;
  337. req.currStep = CONST.DeployStep_GetTerminalInfo;
  338. req.nextStep = CONST.DeployStep_MediaConfig;
  339. req.param1 = 0;
  340. req.param2 = 0;
  341. req.param3 = server_ip;
  342. req.param4 = new_terminalno + '|' + vendorName;
  343. req.param5 = '';
  344. req.array1 = [0];
  345. req.array2 = [''];
  346. req.options = 0;
  347. req.additional = 0;
  348. req.restartApp = false;
  349. req.restartPC = false;
  350. utilStartSubmitDialog();
  351. RVC.HealthmanagerEntityCtrl.DeployTerminal(req, function(ret) {
  352. utilStopSubmitDialog();
  353. if(ret.errorCode === 0) {
  354. let result = JSON.parse(ret[RVC.EntityController.sigResponseUUID])
  355. if(result.result == 0) {
  356. utilStartAlertDialog("操作成功,进入下一步", function() {
  357. RVC.GuideController.gotoPage(result.nextStep);
  358. });
  359. } else {
  360. utilStartAlertDialog("操作失败:[" + result.result + "] " + result.additionalMsg);
  361. }
  362. } else {
  363. RVC.HealthmanagerEntityCtrl.commErrorCallback(ret);
  364. }
  365. });
  366. }
  367. function PreDeployTerminalWithIPAndPort(server_ip, port, access_flag)
  368. {
  369. if(!isValidIpAddress(server_ip)) {
  370. utilStartAlertDialog("无效IP格式");
  371. return;
  372. }
  373. if(!check_port(port)) {
  374. utilStartAlertDialog("无效端口号");
  375. return;
  376. }
  377. DeployTerminalWithIPAndPort(server_ip, port, access_flag);
  378. }
  379. function DownloadCenterSetting(ip, port)
  380. {
  381. PreDeployTerminalWithIPAndPort(ip, port, false);
  382. }
  383. function AuthorizeTerminal(ip, port)
  384. {
  385. PreDeployTerminalWithIPAndPort(ip, port, true);
  386. }
  387. function generateMediaDeviceSelect(devices, select_id) {
  388. var deviceLength = 0;
  389. if ((devices) instanceof Array) {
  390. deviceLength = devices.length;
  391. } else {
  392. deviceLength = 1
  393. }
  394. var devicesHtml = '';
  395. var selectid = select_id;
  396. $('#' + selectid).empty();
  397. for (var loop = 0; loop < deviceLength; loop++) {
  398. var cur = devices[loop];
  399. var deviceTemplateData = {
  400. loop: loop,
  401. deviceName : cur,
  402. type: selectid
  403. };
  404. var pushHtml = '';
  405. pushHtml = '<div id="{{type}}_item_{{loop}}" option="{{deviceName}}" class="select_medium hide_with_ellipsis">'
  406. pushHtml += '{{deviceName}}</div>'
  407. $('#' + selectid).secureAppend(pushHtml, deviceTemplateData);
  408. }
  409. }
  410. function FulfillMediaDeviceList(flag)
  411. {
  412. let req = new Request();
  413. req.type = 6; //1,2,4不需要摄像头配置
  414. req.interest = 0;
  415. req.reserverd1 = 0;
  416. req.reserverd2 = '';
  417. req.reserverd2 = '';
  418. RVC.CameraConfigEntity.GetMediaAvailableList(req, function(ret) {
  419. if(ret.errorCode === 0) {
  420. let result = JSON.parse(ret[RVC.EntityController.sigResponseUUID])
  421. console.log('device count: ' + result.result);
  422. var microphones = [];
  423. var loundspeakers = [];
  424. var cameras = [];
  425. for (var n = 0; n < result.AvailableList.length; n++) {
  426. console.log(result.AvailableList[n] + ' ' + result.ListItemType[n] + ' ' + result.ListItemStatus[n]);
  427. if(result.ListItemType[n] == MEDIA_TYPE.MICROPHONE) {
  428. microphones.push(result.AvailableList[n]);
  429. } else if(result.ListItemType[n] == MEDIA_TYPE.LOUNDSPEAKER) {
  430. loundspeakers.push(result.AvailableList[n]);
  431. } else if(result.ListItemType[n] == MEDIA_TYPE.CAMERA) {
  432. cameras.push(result.AvailableList[n]);
  433. }
  434. }
  435. generateMediaDeviceSelect(loundspeakers, 'gui_media_config_audio_output_outfree_list');
  436. generateMediaDeviceSelect(loundspeakers, 'gui_media_config_audio_output_infree_list');
  437. generateMediaDeviceSelect(microphones, 'gui_media_config_audio_input_outfree_list');
  438. generateMediaDeviceSelect(microphones, 'gui_media_config_audio_input_infree_list');
  439. if(typeof flag !== 'undefined') {
  440. $('#gui_media_config_audio_input_infree').empty();
  441. $('#gui_media_config_audio_input_infree').attr('value', '');
  442. $('#gui_media_config_audio_input_outfree').empty();
  443. $('#gui_media_config_audio_input_outfree').attr('value', '');
  444. $('#gui_media_config_audio_output_infree').empty();
  445. $('#gui_media_config_audio_output_infree').attr('value', '');
  446. $('#gui_media_config_audio_output_outfree').empty();
  447. $('#gui_media_config_audio_output_outfree').attr('value', '');
  448. utilShowToast("已刷新");
  449. }
  450. } else if(typeof flag !== 'undefined'){
  451. RVC.CameraConfigEntity.commErrorCallback(ret);
  452. }
  453. });
  454. }
  455. function SaveMediaDeviceConfig()
  456. {
  457. //话筒扬声器
  458. var output_infree = $('#gui_media_config_audio_output_infree').attr('value');
  459. //外部扬声器
  460. var output_outfree = $('#gui_media_config_audio_output_outfree').attr('value');
  461. //话筒麦克风
  462. var input_infree = $('#gui_media_config_audio_input_infree').attr('value');
  463. //外部麦克风
  464. var input_outfree = $('#gui_media_config_audio_input_outfree').attr('value');
  465. if(output_outfree === '') {
  466. utilStartAlertDialog('请选择外部扬声器');
  467. return;
  468. }
  469. if(output_infree === '') {
  470. utilStartAlertDialog('请选择话筒扬声器');
  471. return;
  472. }
  473. if(input_outfree === '') {
  474. utilStartAlertDialog('请选择外部麦克风');
  475. return;
  476. }
  477. if(input_infree === '') {
  478. utilStartAlertDialog('请选择话筒麦克风');
  479. return;
  480. }
  481. // if(output_infree == output_outfree) {
  482. // utilStartAlertDialog('扬声器选取冲突,请重新选择');
  483. // return;
  484. // }
  485. // if(input_infree == input_outfree) {
  486. // utilStartAlertDialog('麦克风选取冲突,请重新选择');
  487. // return;
  488. // }
  489. let req = new Request();
  490. req.preStep = CONST.DeployStep_GetTerminalInfo;
  491. req.currStep = CONST.DeployStep_MediaConfig;
  492. req.nextStep = CONST.DeployStep_FetchCenterSettings;
  493. req.additional = 1; //重命名root.ini
  494. req.options = 0;
  495. req.restartApp = true;
  496. req.restartPC = false;
  497. req.param1 = 0;
  498. req.param2 = 0;
  499. req.param3 = '';
  500. req.param4 = '';
  501. req.param5 = '';
  502. req.array1 = [MEDIA_DETAIL_TYPE.MediaDev_OutSpeaker, MEDIA_DETAIL_TYPE.MediaDev_InSpeaker, MEDIA_DETAIL_TYPE.MediaDev_OutMicrophone, MEDIA_DETAIL_TYPE.MediaDev_InMicrophone];
  503. req.array2 = [output_outfree, output_infree, input_outfree, input_infree];
  504. utilStartSubmitDialog();
  505. RVC.HealthmanagerEntityCtrl.DeployTerminal(req, function(ret) {
  506. utilStopSubmitDialog();
  507. if(ret.errorCode === 0) {
  508. let result = JSON.parse(ret[RVC.EntityController.sigResponseUUID])
  509. if(result.result == 0) {
  510. if(req.restartApp || req.restartPC) {
  511. RVC.GuideController.hideAllPage();
  512. RVC.GuideController.hideAllRebootTipElem();
  513. if(req.restartApp) {
  514. $('#guide_restart_loading').show();
  515. } else if(req.restartPC) {
  516. $('#guide_reboot_loading').show();
  517. }
  518. $('#guide_reboot_page').show();
  519. } else {
  520. utilStartAlertDialog("操作成功,进入下一步", function() {
  521. RVC.GuideController.gotoPage(result.nextStep);
  522. });
  523. }
  524. } else {
  525. utilStartAlertDialog("操作失败:[" + result.result + "] " + result.additionalMsg);
  526. }
  527. } else {
  528. RVC.HealthmanagerEntityCtrl.commErrorCallback(ret);
  529. }
  530. });
  531. }
  532. function CheckDevAdapterAvailable(adapter, port, baudrate)
  533. {
  534. let req = new Request();
  535. req.filename= adapter;
  536. req.type = 0;
  537. req.options = 0;
  538. req.port = parseInt(port, 10);
  539. req.baudrate = parseInt(baudrate, 10);
  540. req.param1 = 0;
  541. req.param2 = 0;
  542. req.param3 = "";
  543. req.param4 = "";
  544. console.log("check adapter: " + adapter + " " + port + " " + baudrate);
  545. setTestBtnStatus(false);
  546. RVC.DeviceControlEntityCtrl.TestAdapterFileAvailable(req, function(ret) {
  547. setTestBtnStatus(true);
  548. if(ret.errorCode === 0) {
  549. let result = JSON.parse(ret[RVC.EntityController.sigResponseUUID])
  550. if(result.status == 0) {
  551. utilStartAlertDialog("指定适配器文件成功加载,且尝试打开设备成功!");
  552. } else {
  553. utilStartAlertDialog("验证失败:[" + result.status + "] " + result.msg);
  554. }
  555. } else {
  556. RVC.DeviceControlEntityCtrl.commErrorCallback(ret);
  557. }
  558. });
  559. }
  560. function SaveDevAdapterInfo(adapter, port, baudrate)
  561. {
  562. let req = new Request();
  563. req.preStep = CONST.DeployStep_AdapterConfig;
  564. req.currStep = CONST.DeployStep_AdapterConfig;
  565. req.nextStep = CONST.DeployStep_AdapterConfig;
  566. req.param1 = parseInt(port, 10);
  567. req.param2 = parseInt(baudrate, 10);
  568. req.param3 = adapter;
  569. req.param4 = '';
  570. req.param5 = '';
  571. req.array1 = [0];
  572. req.array2 = [''];
  573. req.options = 0x2;
  574. req.additional = 0;
  575. req.restartApp = false;
  576. req.restartPC = false;
  577. setSaveBtnStatus(false);
  578. RVC.HealthmanagerEntityCtrl.DeployTerminal(req, function(ret) {
  579. setSaveBtnStatus(true);
  580. if(ret.errorCode === 0) {
  581. let result = JSON.parse(ret[RVC.EntityController.sigResponseUUID])
  582. if(result.result == 0) {
  583. globalLastRemberAdapterName = adapter;
  584. utilShowToast('已保存,将重新刷新', 1000, function() {
  585. LoadDeviceAdaptersWithEvent(true);
  586. });
  587. } else {
  588. utilStartAlertDialog("操作失败:[" + result.result + "] " + result.additionalMsg);
  589. }
  590. } else {
  591. RVC.HealthmanagerEntityCtrl.commErrorCallback(ret);
  592. }
  593. });
  594. }
  595. function FinshedDevAdapterConfig()
  596. {
  597. let req = new Request();
  598. req.preStep = CONST.DeployStep_AdapterConfig;
  599. req.currStep = CONST.DeployStep_AdapterConfig;
  600. req.nextStep = CONST.DeployStep_AdapterConfig;
  601. req.param1 = parseInt(port, 10);
  602. req.param2 = parseInt(baudrate, 10);
  603. req.param3 = adapter;
  604. req.param4 = '';
  605. req.param5 = '';
  606. req.array1 = [0];
  607. req.array2 = [''];
  608. req.options = 0;
  609. req.additional = 0;
  610. req.restartApp = false;
  611. req.restartPC = false;
  612. setSaveBtnStatus(false);
  613. RVC.HealthmanagerEntityCtrl.DeployTerminal(req, function(ret) {
  614. setSaveBtnStatus(true);
  615. if(ret.errorCode === 0) {
  616. let result = JSON.parse(ret[RVC.EntityController.sigResponseUUID])
  617. if(result.result == 0) {
  618. globalLastRemberAdapterName = adapter;
  619. utilShowToast('已保存,将重新刷新', 1000, function() {
  620. LoadDeviceAdaptersWithEvent(true);
  621. });
  622. } else {
  623. utilStartAlertDialog("操作失败:[" + result.result + "] " + result.additionalMsg);
  624. }
  625. } else {
  626. RVC.HealthmanagerEntityCtrl.commErrorCallback(ret);
  627. }
  628. });
  629. }
  630. RVC.GuideController = RVC.Object.extend({
  631. hideAllPage: function () {
  632. $('#guide_start_page').hide();
  633. $('#guide_init_param_page').hide();
  634. $('#guide_sync_centersetting_page').hide();
  635. $('#guide_access_authorize_page').hide();
  636. $('#guide_media_config_page').hide();
  637. $('#guide_finish_page').hide();
  638. $('#guide_reboot_page').hide();
  639. },
  640. hideAllRebootTipElem: function() {
  641. $('#reboot_operate').hide();
  642. $('#guide_rebootinfo').hide();
  643. $('#guide_rebootinfo_need_restart').hide();
  644. $('#guide_rebootinfo_need_reboot').hide();
  645. $('#guide_reboot_application_button').hide();
  646. $('#guide_reboot_device_button').hide();
  647. $('#guide_finished_button').hide();
  648. $('#guide_finish_device_button').hide();
  649. $('#guide_save_loading').hide();
  650. $('#guide_reboot_loading').hide();
  651. $('#guide_restart_loading').hide();
  652. },
  653. resizeWindow: function () {
  654. var winHei = $(window).height();
  655. var popHeight = 480;
  656. var adjustHeight = 0;
  657. var blueBackgroundHeight = 0;
  658. if (winHei < 860) {
  659. winHei = 860;
  660. }
  661. blueBackgroundHeight = winHei - $('.headcontainer').height() - $('#page_footer').height();
  662. $('#guide_height').height(blueBackgroundHeight);
  663. adjustHeight = (blueBackgroundHeight - popHeight) * 0.5;
  664. $('#guide_start_page').css('padding-top', (adjustHeight + 100) + 'px');
  665. var domWidth = $('body').width();
  666. var winWidth = $('window').width();
  667. if (domWidth > winWidth) {
  668. setTimeout(function () {
  669. $('body').scrollTop($('.headcontainer').height() + adjustHeight);
  670. $('body').scrollLeft(($('body').width() - $(window).width()) / 2);
  671. }, 1000)
  672. }
  673. $('#guide_init_param_page').css('padding-top', adjustHeight + 'px');
  674. },
  675. beginInstall: function() {
  676. this.gotoPage(CONST.DeployStep_GetTerminalInfo);
  677. },
  678. getPage: function(step) {
  679. var select_page = '';
  680. switch(step) {
  681. case CONST.DeployStep_Begin:
  682. select_page = 'guide_start_page';
  683. break;
  684. case CONST.DeployStep_GetTerminalInfo :
  685. select_page = 'guide_init_param_page';
  686. break;
  687. case CONST.DeployStep_FetchCenterSettings:
  688. select_page = 'guide_sync_centersetting_page';
  689. break;
  690. case CONST.DeployStep_AccessAuthorize :
  691. select_page = 'guide_access_authorize_page';
  692. break;
  693. case CONST.DeployStep_MediaConfig :
  694. select_page = 'guide_media_config_page';
  695. break;
  696. case CONST.DeployStep_AdapterConfig :
  697. select_page = 'guide_adapter_config_page';
  698. break;
  699. case CONST.DeployStep_Finished :
  700. select_page = 'guide_finish_page';
  701. break;
  702. default:
  703. break;
  704. }
  705. return select_page;
  706. },
  707. checkPageAvailable: function(step) {
  708. const select_page = this.getPage(step);
  709. if(select_page !== '') {
  710. return true;
  711. } else {
  712. return false;
  713. }
  714. },
  715. preLoadPage: function(step) {
  716. this.hideAllPage();
  717. switch(step) {
  718. case CONST.DeployStep_MediaConfig:
  719. FulfillMediaDeviceList();
  720. break;
  721. case CONST.DeployStep_AdapterConfig:
  722. InterestRootSwitch(true);
  723. break;
  724. default:
  725. break;
  726. }
  727. },
  728. postLoadPage: function(step) {
  729. switch(step) {
  730. case CONST.DeployStep_Finished:
  731. globalFinishedFlag = true;
  732. break;
  733. default:
  734. break;
  735. }
  736. },
  737. gotoPage: function(nextStep) {
  738. var select_page = this.getPage(nextStep);
  739. if(select_page !== '') {
  740. this.preLoadPage(nextStep);
  741. $('#' + select_page).show();
  742. this.postLoadPage(nextStep);
  743. } else {
  744. utilShowToast('无法识别步骤标识:' + nextStep, 3000);
  745. }
  746. },
  747. sectOverPass: function() {
  748. },
  749. sectNext: function() {
  750. },
  751. setNavigaBtnAble: function(enable) {
  752. }
  753. });
  754. $(document).on('click', '#guide_init_param_ip_check #ip_connect_check', function(){
  755. var ip = $('#guide_server_ip').val();
  756. console.log('ip: ' + ip);
  757. IPConnectableTest(ip);
  758. });
  759. $(document).on('click', '#guide_init_param_next', function() {
  760. const ip = $('#guide_server_ip').val();
  761. const terminalno = $('#guide_init_param_terminalno').val();
  762. if(!isValidIpAddress(ip)) {
  763. utilStartAlertDialog("无效IP格式");
  764. return;
  765. }
  766. if(!IsDigital(terminalno)) {
  767. utilStartAlertDialog("无效终端号格式");
  768. return;
  769. }
  770. var vendorType = $('#gui_init_param_vendor').attr('value');
  771. if(vendorType === '' || vendorType === 'None') {
  772. utilStartAlertDialog("请选择设备厂商");
  773. return;
  774. }
  775. InitTemrinalAbout(ip, terminalno, vendorType);
  776. });
  777. $(document).on('click', '#guide_adapter_config_test', function() {
  778. var adapterName = $('#gui_adapter_config_adapter').attr('value');
  779. var paramPort = $('#guide_adapter_config_port_input').val();
  780. var paramBaudrate = $('#guide_adapter_config_baudrate_input').val();
  781. CheckDevAdapterAvailable(adapterName, paramPort, paramBaudrate);
  782. });
  783. $(document).on('click', '#guide_adapter_config_save', function() {
  784. var adapterName = $('#gui_adapter_config_adapter').attr('value');
  785. var paramPort = $('#guide_adapter_config_port_input').val();
  786. var paramBaudrate = $('#guide_adapter_config_baudrate_input').val();
  787. SaveDevAdapterInfo(adapterName, paramPort, paramBaudrate);
  788. });
  789. $(document).on('click', '#guide_adapter_config_next', function() {
  790. utilStartConfirmDialog("后续步骤依赖【密码键盘】,请确认配置正确且该硬件调用正常! 确认要进入下一步?", function() {
  791. });
  792. });
  793. $(document).on('click', '#guide_sync_centersetting_next', function() {
  794. const ip = $('#guide_sync_centersetting_server_ip_content').val();
  795. var port = $('#guide_sync_centersetting_port_content').val();
  796. DownloadCenterSetting(ip, port);
  797. });
  798. $(document).on('click', '#guide_access_authorize_next', function() {
  799. const ip = $('#guide_access_authorize_server_ip_content').val();
  800. var port = $('#guide_access_authorize_port_content').val();
  801. AuthorizeTerminal(ip, port);
  802. });
  803. $(document).on('click', '#guide_media_config_refresh', function() {
  804. FulfillMediaDeviceList(true);
  805. });
  806. $(document).on('click', '#guide_media_config_next', function() {
  807. SaveMediaDeviceConfig();
  808. });
  809. $(document).on('click', '#reset_btn', function() {
  810. utilStartConfirmDialog("确认要重置当前终端的配置?(操作不可撤销,请慎重!)", function() {
  811. ResetDeployConfig();
  812. });
  813. });
  814. if (window.addEventListener) {
  815. window.addEventListener('resize', RVC.GuideController.resizeWindow, false);
  816. } else {
  817. window.attachEvent('resize', RVC.GuideController.resizeWindow);
  818. }
  819. RVC.CameraConfigEntity.init();
  820. if (window.location.href.indexOf('guide.html') !== -1) {
  821. RVC.GuideController.resizeWindow();
  822. RVC.Scroll.initScroll('#init_param_content');
  823. $('#header_right #quitpage_btn_div').prop("onclick",null).off("click");;
  824. $('#header_right #quitpage_btn_div').unbind('click');
  825. $('#header_right #quitpage_btn_div').bind('click', function() {
  826. if(!globalFinishedFlag) {
  827. utilStartConfirmDialog("配置还未完成,确定要退出页面吗?", function() {
  828. quitThisPage();
  829. });
  830. } else {
  831. quitThisPage();
  832. }
  833. });
  834. var hash = window.location.href.split('#')[1];
  835. if(hash && IsDigital(hash)) {
  836. var step = parseInt(hash, 10);
  837. if(RVC.GuideController.checkPageAvailable(step)) {
  838. utilStartAlertDialog('点击<确认>以继续上次的配置', function() {
  839. RVC.GuideController.gotoPage(step);
  840. });
  841. }
  842. } else {
  843. RVC.GuideController.gotoPage(CONST.DeployStep_Begin);
  844. }
  845. }
  846. setTimeout(RVC.GuideController.resizeWindow, 200);
  847. });