guide.js 83 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105110611071108110911101111111211131114111511161117111811191120112111221123112411251126112711281129113011311132113311341135113611371138113911401141114211431144114511461147114811491150115111521153115411551156115711581159116011611162116311641165116611671168116911701171117211731174117511761177117811791180118111821183118411851186118711881189119011911192119311941195119611971198119912001201120212031204120512061207120812091210121112121213121412151216121712181219122012211222122312241225122612271228122912301231123212331234123512361237123812391240124112421243124412451246124712481249125012511252125312541255125612571258125912601261126212631264126512661267126812691270127112721273127412751276127712781279128012811282128312841285128612871288128912901291129212931294129512961297129812991300130113021303130413051306130713081309131013111312131313141315131613171318131913201321132213231324132513261327132813291330133113321333133413351336133713381339134013411342134313441345134613471348134913501351135213531354135513561357135813591360136113621363136413651366136713681369137013711372137313741375137613771378137913801381138213831384138513861387138813891390139113921393139413951396139713981399140014011402140314041405140614071408140914101411141214131414141514161417141814191420142114221423142414251426142714281429143014311432143314341435143614371438143914401441144214431444144514461447144814491450145114521453145414551456145714581459146014611462146314641465146614671468146914701471147214731474147514761477147814791480148114821483148414851486148714881489149014911492149314941495149614971498149915001501150215031504150515061507150815091510151115121513151415151516151715181519152015211522152315241525152615271528152915301531153215331534153515361537153815391540154115421543154415451546154715481549155015511552155315541555155615571558155915601561156215631564156515661567156815691570157115721573157415751576157715781579158015811582158315841585158615871588158915901591159215931594159515961597159815991600160116021603160416051606160716081609161016111612161316141615161616171618161916201621162216231624162516261627162816291630163116321633163416351636163716381639164016411642164316441645164616471648164916501651165216531654165516561657165816591660166116621663166416651666166716681669167016711672167316741675167616771678167916801681168216831684168516861687168816891690169116921693169416951696169716981699170017011702170317041705170617071708170917101711171217131714171517161717171817191720172117221723172417251726172717281729173017311732173317341735173617371738173917401741174217431744174517461747174817491750175117521753175417551756175717581759176017611762176317641765176617671768176917701771177217731774177517761777177817791780178117821783178417851786178717881789179017911792179317941795179617971798179918001801180218031804180518061807180818091810181118121813181418151816181718181819182018211822182318241825182618271828182918301831183218331834183518361837183818391840184118421843184418451846184718481849185018511852185318541855185618571858185918601861186218631864186518661867186818691870187118721873187418751876187718781879188018811882188318841885188618871888188918901891189218931894189518961897189818991900190119021903190419051906190719081909191019111912191319141915191619171918191919201921192219231924192519261927192819291930193119321933193419351936193719381939194019411942194319441945194619471948194919501951195219531954195519561957195819591960196119621963196419651966196719681969197019711972197319741975197619771978197919801981198219831984198519861987198819891990199119921993199419951996199719981999200020012002200320042005200620072008200920102011201220132014201520162017201820192020202120222023202420252026202720282029203020312032203320342035203620372038203920402041204220432044204520462047204820492050205120522053205420552056205720582059206020612062206320642065206620672068206920702071207220732074207520762077207820792080208120822083208420852086208720882089209020912092209320942095209620972098209921002101210221032104210521062107210821092110211121122113211421152116211721182119212021212122212321242125212621272128212921302131213221332134213521362137213821392140214121422143214421452146214721482149215021512152
  1. const preStepIndex = 0;
  2. const curStepIndex = 1;
  3. const nextStepIndex = 2;
  4. var DeployStepChain = {
  5. Begin : [DEPLOY.DeployStep_Begin, DEPLOY.DeployStep_Begin, DEPLOY.DeployStep_3rdParty_FontInstall],
  6. FontInstall : [DEPLOY.DeployStep_Begin, DEPLOY.DeployStep_3rdParty_FontInstall,DEPLOY.DeployStep_3rdParty_SogouInstall],
  7. SogouInstall : [DEPLOY.DeployStep_3rdParty_FontInstall, DEPLOY.DeployStep_3rdParty_SogouInstall,DEPLOY.DeployStep_GetTerminalInfo],
  8. GetTerminalInfo : [DEPLOY.DeployStep_3rdParty_SogouInstall, DEPLOY.DeployStep_GetTerminalInfo,DEPLOY.DeployStep_AdapterConfig],
  9. AdapterConfig : [DEPLOY.DeployStep_GetTerminalInfo, DEPLOY.DeployStep_AdapterConfig,DEPLOY.DeployStep_MediaConfig],
  10. MediaConfig : [DEPLOY.DeployStep_AdapterConfig, DEPLOY.DeployStep_MediaConfig,DEPLOY.DeployStep_FetchCenterSettings],
  11. FetchCenterSettings : [DEPLOY.DeployStep_MediaConfig, DEPLOY.DeployStep_FetchCenterSettings,DEPLOY.DeployStep_AccessAuthorize],
  12. AccessAuthorize : [DEPLOY.DeployStep_FetchCenterSettings, DEPLOY.DeployStep_AccessAuthorize,DEPLOY.DeployStep_Finished],
  13. Finished : [DEPLOY.DeployStep_Finished, DEPLOY.DeployStep_Finished,DEPLOY.DeployStep_Finished],
  14. }
  15. var SETCTION = {
  16. BEGIN:'start',
  17. GETTERMINAL_INFO:'init_param',
  18. CENTERSETTINGS:'sync_centersetting',
  19. ACCESS_AUTHORIZE:'access_authorize',
  20. MEDIA_CONFIG:'media_config',
  21. FINSHED:'finish',
  22. };
  23. var MEDIA_TYPE = {
  24. CAMERA : 1,
  25. MICROPHONE : 2,
  26. LOUNDSPEAKER:4
  27. }
  28. var MEDIA_DETAIL_TYPE = {
  29. MediaDev_OutSpeaker:1,
  30. MediaDev_InSpeaker:2,
  31. MediaDev_OutMicrophone:3,
  32. MediaDev_InMicrophone:4
  33. }
  34. var VENDOR = ['KEBA','CW','GRG','NANTIAN','*'];
  35. var VENDOR_ZHCN = ['中钞科堡','恒银金融','广电运通','云南南天','全部'];
  36. var VENDOR_MACHINE_TYPE = [
  37. ['E1080-L'],['CASH35AG-JR10(G)'],['DT-7000I64A'],['VTM-6200B17FQ']
  38. ];
  39. var DEBRANCH_URL = {
  40. DEV : 'https://rvcgateway.paas.cmbchina.cn',
  41. ST : 'https://rvcgateway.paasst.cmbchina.cn',
  42. UAT : 'https://rvcgateway.paasuat.cmbchina.cn',
  43. PRD : 'https://rvcgateway.paas.cmbchina.cn'
  44. };
  45. var CENTERSETTING_URL = {
  46. DEV : '',
  47. ST : 'http://centerconfig.paasst.cmbchina.cn',
  48. UAT : '',
  49. PRD : 'https://centerconfig.paas.cmbchina.com'
  50. }
  51. function DisplayVendorFriendName(abbr)
  52. {
  53. for(var n=0; n < VENDOR.length; ++n) {
  54. if(abbr === VENDOR[n]) {
  55. return VENDOR_ZHCN[n];
  56. }
  57. }
  58. return '';
  59. }
  60. var globalFinishedFlag = false;
  61. var globalInterestRootFlag = false;
  62. var globalAdapterFileNameList = [];
  63. var globalAdapterFileNameStatus = [];
  64. var globalAdapterOpenParamPort = [];
  65. var globalAdapterOpenParamBaudrate = [];
  66. var globalLastRemberAdapterName = '';
  67. var globalLastRemberAdapterConfigState = false;
  68. var globalTerminalNo = '';
  69. var globalSelectVendorType = '';
  70. var globalServerUsingHeadOffice = true;
  71. var adapterTestFailedCount = 0;
  72. var apdaterTestAllBefore = 0;
  73. function clearAdapterSelectedValue()
  74. {
  75. $('#gui_adapter_config_adapter').empty();
  76. $('#gui_adapter_config_adapter').attr("value", '');
  77. $('#guide_adapter_config_port_input').val('');
  78. $('#guide_adapter_config_baudrate_input').val('');
  79. }
  80. function generateAdapterSelect(devices, status, select_id) {
  81. var deviceLength = 0;
  82. if ((devices) instanceof Array) {
  83. deviceLength = devices.length;
  84. } else {
  85. deviceLength = 1
  86. }
  87. var devicesHtml = '';
  88. var selectid = select_id;
  89. $('#' + selectid).empty();
  90. for (var loop = 0; loop < deviceLength; loop++) {
  91. var cur = devices[loop];
  92. var deviceTemplateData = {
  93. loop: loop,
  94. deviceName : cur,
  95. type: selectid
  96. };
  97. var pushHtml = '';
  98. pushHtml = '<div id="{{type}}_item_{{loop}}" option="{{deviceName}}" class="select_medium hide_with_ellipsis"'
  99. if(!(status[loop] & 0x1)) {
  100. pushHtml += ' style="color:#C0C0C0;"'
  101. } else {
  102. pushHtml += ' onclick="AdapterSelectChange(\'{{deviceName}}\')"'
  103. }
  104. //root.ini 配置
  105. if((status[loop] & 0x2)) {
  106. pushHtml += '>{{deviceName}}&nbsp;(当前配置)</div>'
  107. } else {
  108. pushHtml += '>{{deviceName}}</div>'
  109. }
  110. $('#' + selectid).secureAppend(pushHtml, deviceTemplateData);
  111. }
  112. }
  113. function InitTerminalRegistInfoUrl()
  114. {
  115. $('#guide_server_ip').val(DEBRANCH_URL.PRD);
  116. let req = new Request();
  117. req.configType = 4; //Config_Shell
  118. req.section = "TerminalRegistInfoUrl";
  119. req.option = false;
  120. req.key = "LAN";
  121. req.reserved1 = 1;
  122. req.reserved2 = 0;
  123. req.reserved3 = '';
  124. req.reserved4 = '';
  125. RVC.DeviceControlEntityCtrl.ReadConfigValue(req, function(ret) {
  126. if (ret.errorCode === 0) {
  127. let result = JSON.parse(ret[RVC.EntityController.sigResponseUUID])
  128. if(result.value !== '') {
  129. $('#guide_server_ip').val(result.value);
  130. }
  131. }
  132. });
  133. }
  134. function FulfillDevAdapterFileList(device, vendor, root_or_not, flag)
  135. {
  136. let req = new Request();
  137. req.root = root_or_not;
  138. req.adapter=device;
  139. req.vendor=vendor;
  140. req.version="";
  141. req.batch="";
  142. globalAdapterFileNameList = [];
  143. globalAdapterFileNameStatus = [];
  144. globalAdapterOpenParamPort = [];
  145. globalAdapterOpenParamBaudrate = [];
  146. RVC.DeviceControlEntityCtrl.GetVendorFileList(req, function(ret) {
  147. if(ret.errorCode === 0) {
  148. let result = JSON.parse(ret[RVC.EntityController.sigResponseUUID])
  149. if(result.result == 0) {
  150. console.log('=============================');
  151. for (var n = 0; n < result.filenames.length; n++) {
  152. console.log(result.filenames[n] + ' ' + result.status[n] + ' ' + result.port[n] + ' ' + result.baudrate[n]);
  153. globalAdapterFileNameList.push(result.filenames[n]);
  154. globalAdapterFileNameStatus.push(result.status[n]);
  155. globalAdapterOpenParamPort.push(result.port[n]);
  156. globalAdapterOpenParamBaudrate.push(result.baudrate[n]);
  157. if(globalLastRemberAdapterName !== '' && globalLastRemberAdapterName === globalAdapterFileNameList[n]) {
  158. globalLastRemberAdapterConfigState = (globalAdapterFileNameStatus[n] & 0x2);
  159. }
  160. }
  161. clearAdapterSelectedValue();
  162. generateAdapterSelect(globalAdapterFileNameList, globalAdapterFileNameStatus, 'gui_adapter_config_adapter_list');
  163. if(typeof flag !== 'undefined') {
  164. if(flag === true) {
  165. if(root_or_not) {
  166. utilShowToast("已刷新!适配器列表仅显示 root.ini 配置的硬件适配器信息", 5000);
  167. } else {
  168. utilShowToast("已刷新!适配器列表将显示当前所有能找到的厂商硬件适配器文件", 6000);
  169. }
  170. } else {
  171. utilShowToast('已刷新!');
  172. }
  173. }
  174. //test
  175. if(result.filenames.length == 1 && root_or_not && device !== '' && device != '*') {
  176. FulfillAdapterCurrentSelect(globalAdapterFileNameList[0], (globalAdapterFileNameStatus[0] & 0x2));
  177. } else if(globalLastRemberAdapterName !== '') {
  178. FulfillAdapterCurrentSelect(globalLastRemberAdapterName, globalLastRemberAdapterConfigState);
  179. }
  180. //test_end
  181. } else if(typeof flag !== 'undefined') {
  182. utilStartAlertDialog("操作失败:[" + result.result + "] " + result.msg);
  183. } else {
  184. console.error("操作失败:[" + result.result + "] " + result.msg);
  185. }
  186. } else if(typeof flag !== 'undefined') {
  187. RVC.DeviceControlEntityCtrl.commErrorCallback(ret);
  188. } else {
  189. console.error("操作失败! ErrorCode: " + ErrorCodeStringfy(ret.errorCode));
  190. }
  191. });
  192. }
  193. function LoadDeviceAdaptersWithEvent(flag)
  194. {
  195. var deviceName = $('#gui_adapter_config_device').attr('value');
  196. var vendorName = $('#gui_adapter_config_vendor').attr('value').toLowerCase();
  197. FulfillDevAdapterFileList(deviceName, vendorName, globalInterestRootFlag, flag);
  198. }
  199. function AdapterSelectChange(name)
  200. {
  201. $('#guide_adapter_config_port_input').val('');
  202. $('#guide_adapter_config_baudrate_input').val('');
  203. for(var n=0; n < globalAdapterFileNameList.length; n++) {
  204. if(globalAdapterFileNameList[n] === name) {
  205. if((globalAdapterFileNameStatus[n] & 0x2) /**root.ini 配置 */) {
  206. $('#guide_adapter_config_port_input').val('' + globalAdapterOpenParamPort[n]);
  207. $('#guide_adapter_config_baudrate_input').val('' + globalAdapterOpenParamBaudrate[n]);
  208. }
  209. setSaveBtnStatus(!(globalAdapterFileNameStatus[n] & 0x2));
  210. break;
  211. }
  212. }
  213. }
  214. function FulfillAdapterCurrentSelect(value, configed)
  215. {
  216. if(value === '') {
  217. clearAdapterSelectedValue();
  218. } else {
  219. if(configed) {
  220. $('#gui_adapter_config_adapter').html(value + '&nbsp;(当前配置)');
  221. } else {
  222. $('#gui_adapter_config_adapter').html(value);
  223. }
  224. $('#gui_adapter_config_adapter').attr('value', value);
  225. AdapterSelectChange(value);
  226. }
  227. }
  228. function generateDeviceTypeSelect(devices, select_id) {
  229. var deviceLength = 0;
  230. if ((devices) instanceof Array) {
  231. deviceLength = devices.length;
  232. } else {
  233. deviceLength = 1
  234. }
  235. var devicesHtml = '';
  236. var selectid = select_id;
  237. $('#' + selectid).empty();
  238. for (var loop = 0; loop < deviceLength; loop++) {
  239. var cur = devices[loop];
  240. var deviceTemplateData = {
  241. loop: loop,
  242. deviceName : cur,
  243. type: selectid
  244. };
  245. var pushHtml = '';
  246. pushHtml = '<div id="{{type}}_item_{{loop}}" option="{{deviceName}}" class="select_medium hide_with_ellipsis">'
  247. pushHtml += '{{deviceName}}</div>'
  248. $('#' + selectid).secureAppend(pushHtml, deviceTemplateData);
  249. }
  250. }
  251. function VendorSelectChangedAtInit(name)
  252. {
  253. var vendorName = name.toLowerCase();
  254. $('#gui_init_param_device_model').empty();
  255. $('#gui_init_param_device_model').attr("value", '');
  256. for(var n=0; n < VENDOR.length; ++n) {
  257. if(name === VENDOR[n]) {
  258. var deviceTypes = VENDOR_MACHINE_TYPE[n];
  259. generateDeviceTypeSelect(deviceTypes, 'gui_init_param_device_model_list');
  260. if(deviceTypes.length > 0) {
  261. $('#gui_init_param_device_model').text(deviceTypes[0]);
  262. $('#gui_init_param_device_model').attr("value", deviceTypes[0]);
  263. }
  264. }
  265. }
  266. }
  267. function BranchTypeSelectChange(widget)
  268. {
  269. var switchon = false;
  270. var classlist = $(widget).attr('class');
  271. if (classlist.indexOf('switch_on_disable') >= 0 || classlist.indexOf('switch_off_disable') >= 0) {
  272. return;
  273. }
  274. if (classlist.indexOf('switch_on') >= 0) {
  275. switchon = true;
  276. }
  277. if(switchon) {
  278. $('#guide_init_param_server_ip_name').html('总行微服务&nbsp;URL');
  279. InitTerminalRegistInfoUrl();
  280. } else {
  281. $('#guide_init_param_server_ip_name').html('分行服务&nbsp;IP');
  282. $('#guide_server_ip').val("");
  283. }
  284. }
  285. //正式环境该参数不可选
  286. function VendorSelectChanged(name)
  287. {
  288. var deviceName = $('#gui_adapter_config_device').attr('value');
  289. var vendorName = name.toLowerCase();
  290. FulfillDevAdapterFileList(deviceName, vendorName, globalInterestRootFlag, false);
  291. }
  292. function DeviceSelectChange(name)
  293. {
  294. var vendorName = $('#gui_adapter_config_vendor').attr('value').toLowerCase();
  295. FulfillDevAdapterFileList(name, vendorName, globalInterestRootFlag, false);
  296. }
  297. function setInputTextStatus(err, classID)
  298. {
  299. if (err && $('#' + classID).hasClass('input_normal')) {
  300. $('#' + classID).removeClass('input_normal');
  301. $('#' + classID).addClass('input_normal_error');
  302. } else if(!err && !$('#' + classID).hasClass('input_normal')) {
  303. $('#' + classID).removeClass('input_normal_error');
  304. $('#' + classID).addClass('input_normal');
  305. }
  306. }
  307. function setSelectInputStatus(err, classID)
  308. {
  309. if (err && $('#' + classID).hasClass('select_on_normal')) {
  310. $('#' + classID).removeClass('select_on_normal');
  311. $('#' + classID).addClass('select_on_normal_error');
  312. } else if(!err && !$('#' + classID).hasClass('select_on_normal')) {
  313. $('#' + classID).removeClass('select_on_normal_error');
  314. $('#' + classID).addClass('select_on_normal');
  315. }
  316. }
  317. var flickInvaliInterval = 0;
  318. function adapeterNameInputFlick()
  319. {
  320. var flag = ((flickInvaliInterval % 2) == 0);
  321. flickInvaliInterval += 1;
  322. setSelectInputStatus(flag, 'gui_adapter_config_adapter');
  323. setInputTextStatus(flag, 'guide_adapter_config_port_input_div');
  324. setInputTextStatus(flag, 'guide_adapter_config_baudrate_input_div');
  325. }
  326. function invalidFilck() {
  327. flickInvaliInterval = 0;
  328. let clock = 6
  329. let timer = setInterval(function () {
  330. clock--
  331. adapeterNameInputFlick();
  332. if (clock == 0) {
  333. clearInterval(timer);
  334. }
  335. }, 240)
  336. }
  337. function rebindBtnClick(classID, callback)
  338. {
  339. $('#' + classID).prop("onclick",null).off("click");;
  340. $('#' + classID).unbind('click');
  341. if(callback) {
  342. $('#' + '#' + classID).bind('click', callback);
  343. }
  344. }
  345. function setTestAllBtnStatus(enable) {
  346. setBtnStatus(enable, 'guide_adapter_config_test')
  347. }
  348. function setTestBtnStatus(enable) {
  349. setBtnStatus(enable, 'gui_adapter_config_adapter_check_btn')
  350. }
  351. function setSaveBtnStatus(enable) {
  352. setBtnStatus(enable, 'guide_adapter_config_save')
  353. }
  354. function setNextBtnStatus(enable) {
  355. setBtnStatus(enable, 'guide_adapter_config_next')
  356. }
  357. function InterestRootSwitch(flag)
  358. {
  359. if ($('#gui_adapter_config_root_interest_switch').hasClass('switch_on')) {
  360. globalInterestRootFlag = true;
  361. } else {
  362. globalInterestRootFlag = false;
  363. }
  364. setSaveBtnStatus(!globalInterestRootFlag);
  365. if(typeof flag == 'undefined')
  366. LoadDeviceAdaptersWithEvent(true);
  367. else
  368. LoadDeviceAdaptersWithEvent();
  369. //setTestAllBtnStatus(globalInterestRootFlag);
  370. }
  371. function MediaDeviceSelectChange(evt)
  372. {
  373. var obj = evt.parentElement.parentElement;
  374. var value = evt.textContent;
  375. var obj_id = obj.id;
  376. if(obj_id === 'gui_media_config_audio_output_outfree_list') {
  377. var loundspeakers_in_value = $('#gui_media_config_audio_output_infree').attr('value');
  378. if(loundspeakers_in_value !== '' && value === loundspeakers_in_value) {
  379. utilShowToast('该设备已在话筒扬声器中被选择!');
  380. }
  381. } else if(obj_id === 'gui_media_config_audio_output_infree_list') {
  382. var loundspeakers_out_value = $('#gui_media_config_audio_output_outfree').attr('value');
  383. if(loundspeakers_out_value !== '' && value === loundspeakers_out_value) {
  384. utilShowToast('该设备已在外部扬声器中被选择!');
  385. }
  386. }else if(obj_id === 'gui_media_config_audio_input_outfree_list') {
  387. var microphones_in_value = $('#gui_media_config_audio_input_infree').attr('value');
  388. if(microphones_in_value !== '' && value === microphones_in_value) {
  389. utilShowToast('该设备已在话筒麦克风中被选择!');
  390. }
  391. }else if(obj_id === 'gui_media_config_audio_input_infree_list') {
  392. var microphones_out_value = $('#gui_media_config_audio_input_outfree').attr('value');
  393. if(microphones_out_value !== '' && value === microphones_out_value) {
  394. utilShowToast('该设备已在外部麦克风中被选择!');
  395. }
  396. }
  397. }
  398. $(function () {
  399. function StartBasicHardwareEntity(entityName, sucCallback, failCallback)
  400. {
  401. let req = new Request();
  402. req.option = 1; //启动实体
  403. req.additional = 0;
  404. req.devId = 0;
  405. req.entityName = entityName;
  406. req.force = true;
  407. req.param = '';
  408. req.reserved1 = 0;
  409. req.reserved2 = '';
  410. req.timeout = 60000;
  411. RVC.HealthmanagerEntityCtrl.ControlEntityLife(req, function(ret) {
  412. if(ret.errorCode === 0) {
  413. let result = JSON.parse(ret[RVC.EntityController.sigResponseUUID])
  414. if(result.result == 0) {
  415. if(sucCallback) {
  416. utilShowToast("启动模块" + entityName + "成功!", 3000);
  417. sucCallback();
  418. }
  419. } else {
  420. utilShowToast("启动模块" + entityName + "失败:[" + result.result + "] " + result.msg, 5000);
  421. if(failCallback) {
  422. failCallback();
  423. }
  424. }
  425. } else {
  426. utilShowToast("请求失败:" + ErrorCodeStringfy(ret.errorCode));
  427. if(failCallback) {
  428. failCallback();
  429. }
  430. }
  431. });
  432. }
  433. function AbortDeployConfig(finished) {
  434. RVC.HealthmanagerEntityCtrl.QuitApp(true);
  435. RVC.GuideController.hideAllPage();
  436. RVC.GuideController.hideAllRebootTipElem();
  437. $('#guide_quit_loading').show();
  438. $('#guide_reboot_page').show();
  439. }
  440. function ResetDeployConfig() {
  441. let req = new Request();
  442. req.preStep = DeployStepChain.Begin[preStepIndex];
  443. req.currStep = DeployStepChain.Begin[curStepIndex];
  444. req.nextStep = DeployStepChain.Begin[nextStepIndex];
  445. req.param1 = 0;
  446. req.param2 = 0;
  447. req.param3 = '';
  448. req.param4 = '';
  449. req.param5 = '';
  450. req.array1 = [0];
  451. req.array2 = [''];
  452. req.additional = 0;
  453. req.options = 1;//重置标识
  454. req.restartApp = true;
  455. req.restartPC = false;
  456. if(req.restartApp) {
  457. utilStartSubmitDialog("重置成功将会自动重启应用,请耐心等候...");
  458. } else {
  459. utilStartSubmitDialog();
  460. }
  461. RVC.HealthmanagerEntityCtrl.DeployTerminal(req, function(ret) {
  462. utilStopSubmitDialog();
  463. if(ret.errorCode === 0) {
  464. let result = JSON.parse(ret[RVC.EntityController.sigResponseUUID])
  465. if(result.result == 0) {
  466. if(req.restartApp || req.restartPC) {
  467. RVC.GuideController.hideAllPage();
  468. RVC.GuideController.hideAllRebootTipElem();
  469. if(req.restartApp) {
  470. $('#guide_restart_loading').show();
  471. } else if(req.reboot_pagrestartPC) {
  472. $('#guide_reboot_loading').show();
  473. }
  474. $('#guide_reboot_page').show();
  475. }
  476. } else {
  477. utilStartAlertDialog("操作失败:[" + result.result + "] " + result.additionalMsg);
  478. }
  479. } else {
  480. RVC.HealthmanagerEntityCtrl.commErrorCallback(ret);
  481. }
  482. });
  483. }
  484. function UrlConnectableTest(url, err_tip_id, check_btn_id)
  485. {
  486. let req = new Request();
  487. req.protocol = 4; //Http Probe
  488. req.ip = url;
  489. req.port = 0;
  490. req.reserved1 = 0;
  491. req.reserved2 = '';
  492. function showErrTips(val) {
  493. setTimeout(function () {
  494. $('#' + err_tip_id).addClass('hide');
  495. }, 2000);
  496. $('#' + err_tip_id).removeClass('hide')
  497. .removeClass('guide_input_descript').addClass('guide_error').html(val);
  498. }
  499. function showSuccTips(val) {
  500. setTimeout(function () {
  501. $('#' + err_tip_id).addClass('hide');
  502. }, 2000);
  503. $('#'+ err_tip_id).removeClass('hide')
  504. .removeClass('guide_error').addClass('guide_input_descript').html(val);
  505. }
  506. if(!checkUrl(url)) {
  507. showErrTips('无效URL格式');
  508. return;
  509. }
  510. showSuccTips('正在连接验证...');
  511. setBtnStatus(false, check_btn_id);
  512. RVC.DeviceControlEntityCtrl.TestConnectivity(req, function(ret) {
  513. setBtnStatus(true, check_btn_id);
  514. if(ret.errorCode === 0) {
  515. let result = JSON.parse(ret[RVC.EntityController.sigResponseUUID])
  516. if(result.result >= 0) {
  517. showSuccTips('可正常连接: ' + result.result);
  518. } else {
  519. console.log(result.additionalMsg);
  520. showErrTips('连接失败:' + result.result + ", " + result.additionalMsg);
  521. }
  522. } else {
  523. let tips = url + ' 测试失败:' + ErrorCodeStringfy(ret.errorCode);
  524. showErrTips(tips);
  525. }
  526. });
  527. }
  528. function IPConnectableTest(ip)
  529. {
  530. let req = new Request();
  531. req.protocol = 1; //Ping
  532. req.ip = ip;
  533. req.port = 0;
  534. req.reserved1 = 0;
  535. req.reserved2 = '';
  536. function showErrTips(val) {
  537. setTimeout(function () {
  538. $('#text_guide_init_param_ip_tips').addClass('hide');
  539. }, 2000);
  540. $('#text_guide_init_param_ip_tips').removeClass('hide')
  541. .removeClass('guide_input_descript').addClass('guide_error').html(val);
  542. }
  543. function showSuccTips(val) {
  544. setTimeout(function () {
  545. $('#text_guide_init_param_ip_tips').addClass('hide');
  546. }, 2000);
  547. $('#text_guide_init_param_ip_tips').removeClass('hide')
  548. .removeClass('guide_error').addClass('guide_input_descript').html(val);
  549. }
  550. if(!isValidIpAddress(ip)) {
  551. showErrTips('无效IP格式');
  552. return;
  553. }
  554. RVC.DeviceControlEntityCtrl.TestConnectivity(req, function(ret) {
  555. if(ret.errorCode === 0) {
  556. let result = JSON.parse(ret[RVC.EntityController.sigResponseUUID])
  557. if(result.result == 0) {
  558. showSuccTips('可正常连接');
  559. } else {
  560. console.log(result.additionalMsg);
  561. showErrTips('连接失败:' + result.additionalMsg);
  562. }
  563. } else {
  564. let tips = ip + ' 测试失败:' + ErrorCodeStringfy(ret.errorCode);
  565. showErrTips(tips);
  566. }
  567. });
  568. }
  569. function InitCenterSettingsDownloadUrl()
  570. {
  571. $('#guide_sync_centersetting_server_ip_content').val(CENTERSETTING_URL.PRD);
  572. let req = new Request();
  573. req.configType = 4; //Config_Shell
  574. req.section = "CenterSettingsDownloadUrl";
  575. req.option = false;
  576. req.key = "LAN";
  577. req.reserved1 = 1;
  578. req.reserved2 = 0;
  579. req.reserved3 = '';
  580. req.reserved4 = '';
  581. RVC.DeviceControlEntityCtrl.ReadConfigValue(req, function(ret) {
  582. if (ret.errorCode === 0) {
  583. let result = JSON.parse(ret[RVC.EntityController.sigResponseUUID])
  584. if(result.value !== '') {
  585. $('#guide_sync_centersetting_server_ip_content').val(result.value);
  586. }
  587. }
  588. });
  589. }
  590. function GetTerminalBaseInfo(callback, flag)
  591. {
  592. let req = new Request();
  593. req.preStep = DeployStepChain.GetTerminalInfo[curStepIndex];
  594. req.currStep = DeployStepChain.GetTerminalInfo[curStepIndex];
  595. req.nextStep = DeployStepChain.GetTerminalInfo[curStepIndex];
  596. req.param1 = 0;
  597. req.param2 = 0;
  598. req.param3 = '';
  599. req.param4 = '';
  600. req.param5 = '';
  601. req.array1 = [0];
  602. req.array2 = [''];
  603. req.options = 1; //获取缓存基本信息
  604. req.additional = 0;
  605. req.restartApp = false;
  606. req.restartPC = false;
  607. globalTerminalNo = '';
  608. globalSelectVendorType = '';
  609. RVC.HealthmanagerEntityCtrl.DeployTerminal(req, function(ret) {
  610. if(ret.errorCode === 0) {
  611. let result = JSON.parse(ret[RVC.EntityController.sigResponseUUID])
  612. if(result.result == 0) {
  613. if(result.array2.length === 3) {
  614. globalTerminalNo = result.array2[0];
  615. globalSelectVendorType = result.array2[1];
  616. if(callback) {
  617. callback();
  618. }
  619. }
  620. } else {
  621. if(typeof type !== 'undefined') {
  622. utilStartAlertDialog("操作失败:[" + result.result + "] " + result.additionalMsg);
  623. } else {
  624. utilShowToast("操作失败:[" + result.result + "] " + result.additionalMsg);
  625. }
  626. }
  627. } else {
  628. if(typeof type !== 'undefined') {
  629. utilStartAlertDialog("操作失败! ErrorCode: " + ErrorCodeStringfy(ret.errorCode));
  630. } else {
  631. utilShowToast("操作失败! ErrorCode: " + ErrorCodeStringfy(ret.errorCode));
  632. }
  633. }
  634. });
  635. }
  636. //暂时不使用,不进行切换逻辑,直接走总行下载集中配置
  637. function InitCenterSettingInputParamSetBranchIP()
  638. {
  639. // if(checkUrl(globalServerIP)) {
  640. // $('#guide_sync_centersetting_server_ip_content').attr('value', CENTERSETTING_URL.PRD);
  641. // $('#sync_centersetting_content_ip_label').html('总行微服务&nbsp;URL');
  642. // $('#guide_sync_centersetting_port_text').hide();
  643. // $('#guide_sync_centersetting_port_tips').hide();
  644. // } else if(isValidIpAddress(globalServerIP)) {
  645. // $('#sync_centersetting_content_ip_label').html('分行服务&nbsp;IP');
  646. // $('#guide_sync_centersetting_port_text').show();
  647. // $('#guide_sync_centersetting_port_tips').hide();
  648. // }
  649. }
  650. function InitCenterSettingInputParam()
  651. {
  652. $('#guide_sync_centersetting_server_ip_content').attr('value', CENTERSETTING_URL.PRD);
  653. $('#sync_centersetting_content_ip_label').html('集中配置总行下载&nbsp;URL');
  654. $('#guide_sync_centersetting_port_text').hide();
  655. $('#guide_sync_centersetting_port_tips').hide();
  656. InitCenterSettingsDownloadUrl();
  657. }
  658. function TestAllAdapterAvailableOrNot()
  659. {
  660. let req = new Request();
  661. req.filename= '';
  662. req.type = 1;
  663. req.options = 1; //遇到一个硬件报错立即返回
  664. req.port = 0;
  665. req.baudrate = 0;
  666. req.param1 = 0;
  667. req.param2 = 0;
  668. req.param3 = "";
  669. req.param4 = "";
  670. apdaterTestAllBefore = 1;
  671. if(req.options == 0) {
  672. req.timeout = 120000;
  673. utilStartSubmitDialog('涉及到多个硬件模块,此操作将花费较长的时间,请耐心等候...', 'btnCancelAdapterTest', '中断');
  674. $(document).on('click', '#btnCancelAdapterTest', function() {
  675. utilStopSubmitDialog();
  676. });
  677. } else {
  678. req.timeout = 60000;
  679. utilStartSubmitDialog('将逐一加载硬件适配器文件并尝试打开硬件设备,此操作可能需花费较长时间,请耐心等候...');
  680. }
  681. EventEmitter.subscribe('AdapterTestResult','TestAllAdapterAvailableOrNot', (evt)=> {
  682. let result = JSON.parse(evt[RVC.EntityController.sigResponseUUID]);
  683. console.log(result.result + ";" + result.adapterInfo + ";" + result.errMsg);
  684. if(0 == result.result) {
  685. utilShowToast(result.adapterInfo + '验证成功!');
  686. } else {
  687. utilShowToast(result.adapterInfo + '验证失败:' + result.errMsg);
  688. apdaterTestAllBefore = 1;
  689. }
  690. });
  691. RVC.DeviceControlEntityCtrl.TestAdapterFileAvailable(req, function(ret) {
  692. utilStopSubmitDialog();
  693. EventEmitter.unsubscribe('AdapterTestResult','TestAllAdapterAvailableOrNot');
  694. if(ret.errorCode === 0) {
  695. let result = JSON.parse(ret[RVC.EntityController.sigResponseUUID])
  696. if(result.status == 0) {
  697. apdaterTestAllBefore = 2;
  698. utilStartConfirmDialog('所有硬件配置验证通过!点击确认进入下一步,取消则不进行任何操作(后续可通过页面上的[跳过]菜单进入下一步)', function() {
  699. FinshedDevAdapterConfig();
  700. });
  701. } else {
  702. var errmsg = '';
  703. var firstAdapterName = '';
  704. for (var n = 0; n < result.reserved1.length; n++) {
  705. console.log(result.reserved2[n] + ': ' + result.reserved3[n]);
  706. if(errmsg !== '') errmsg += '<br>';
  707. errmsg += '<strong>' + result.reserved2[n] + '</strong>: ' + result.reserved3[n];
  708. if(firstAdapterName === '') firstAdapterName = result.reserved2[n];
  709. }
  710. if(firstAdapterName !== '') {
  711. for(var n=0; n < globalAdapterFileNameList.length; n++) {
  712. if(globalAdapterFileNameList[n] === firstAdapterName) {
  713. globalLastRemberAdapterName = globalAdapterFileNameList[n];
  714. globalLastRemberAdapterConfigState = (globalAdapterFileNameStatus[n] & 0x2);
  715. FulfillAdapterCurrentSelect(globalLastRemberAdapterName, globalLastRemberAdapterConfigState);
  716. break;
  717. }
  718. }
  719. }
  720. var tips = "检测失败!请修改硬件配置或检查硬件是否可用:<br><br><span style='color:red'>" + errmsg + "</span>";
  721. utilStartAlertDialog(tips, function() {
  722. invalidFilck();
  723. });
  724. }
  725. } else {
  726. if(parseInt(ret.errorCode, 10) == ErrorCodeEnum.Error_NetBroken) {
  727. utilStartAlertDialog("请求失败:" + ErrorCodeStringfy(ret.errorCode) + "<br>猜测是验证硬件模块时引起实体进程异常退出,请检查配置或硬件再重试!");
  728. setTimeout(function () {
  729. StartBasicHardwareEntity("DeviceControl");
  730. }, 300);
  731. } else {
  732. utilStartAlertDialog("请求失败:" + ErrorCodeStringfy(ret.errorCode));
  733. }
  734. }
  735. });
  736. }
  737. function InitCurrentVendorSelect()
  738. {
  739. if(globalSelectVendorType === '') {
  740. GetTerminalBaseInfo(function() {
  741. const vendorZhCnName = DisplayVendorFriendName(globalSelectVendorType);
  742. $('#gui_adapter_config_vendor').attr('value', globalSelectVendorType);
  743. $('#gui_adapter_config_vendor').html(vendorZhCnName);
  744. });
  745. } else {
  746. const vendorZhCnName = DisplayVendorFriendName(globalSelectVendorType);
  747. $('#gui_adapter_config_vendor').attr('value', globalSelectVendorType);
  748. $('#gui_adapter_config_vendor').html(vendorZhCnName);
  749. }
  750. }
  751. function InitTemrinalAbout(server_ip, new_terminalno, terminalType, vendorName, deviceModel, deviceSN, headBranchOrNot)
  752. {
  753. let req = new Request();
  754. req.preStep = DeployStepChain.GetTerminalInfo[preStepIndex];
  755. req.currStep = DeployStepChain.GetTerminalInfo[curStepIndex];
  756. req.nextStep = DeployStepChain.GetTerminalInfo[nextStepIndex];
  757. if(headBranchOrNot) req.param1 = 1;
  758. else req.param1 = 0;
  759. req.param2 = 0;
  760. req.param3 = server_ip;
  761. req.param4 = new_terminalno + '|' + terminalType;
  762. req.param5 = '';
  763. req.array1 = [0,0,0];
  764. req.array2 = [vendorName, deviceModel, deviceSN];
  765. req.options = 0;
  766. req.additional = 1; //重命名root.ini
  767. req.restartApp = true;
  768. req.restartPC = false;
  769. req.timeout = 60000; //网络连接,延长时间,让实体自身反馈报错
  770. if(req.restartApp) {
  771. utilStartSubmitDialog("正在请求,处理成功将会自动执行应用重启,请耐心等候...");
  772. } else {
  773. utilStartSubmitDialog();
  774. }
  775. RVC.HealthmanagerEntityCtrl.DeployTerminal(req, function(ret) {
  776. utilStopSubmitDialog();
  777. if(ret.errorCode === 0) {
  778. let result = JSON.parse(ret[RVC.EntityController.sigResponseUUID])
  779. if(result.result == 0) {
  780. if(req.restartApp || req.restartPC) {
  781. RVC.GuideController.hideAllPage();
  782. RVC.GuideController.hideAllRebootTipElem();
  783. if(req.restartApp) {
  784. $('#guide_restart_loading').show();
  785. } else if(req.restartPC) {
  786. $('#guide_reboot_loading').show();
  787. }
  788. $('#guide_reboot_page').show();
  789. } else {
  790. utilStartAlertDialog("信息录入成功,即将进入下一步", function() {
  791. RVC.GuideController.gotoPage(result.nextStep, false);
  792. });
  793. }
  794. } else {
  795. utilStartAlertDialog("操作失败:[" + result.result + "] -- " + result.additionalMsg);
  796. }
  797. } else {
  798. RVC.HealthmanagerEntityCtrl.commErrorCallback(ret);
  799. }
  800. });
  801. }
  802. function DownloadCenterSetting(ip, port)
  803. {
  804. let req = new Request();
  805. req.preStep = DeployStepChain.FetchCenterSettings[preStepIndex];
  806. req.currStep = DeployStepChain.FetchCenterSettings[curStepIndex];
  807. req.nextStep = DeployStepChain.FetchCenterSettings[nextStepIndex];
  808. req.param1 = 0;
  809. req.param2 = 0;
  810. if(typeof port !== 'undefined') {
  811. req.param1 = parseInt(port, 10);
  812. } else {
  813. req.param2 = 1;
  814. }
  815. req.param3 = ip;
  816. req.options = 0;
  817. req.additional = 0;
  818. req.restartApp = false;
  819. req.restartPC = false;
  820. req.param4 = '';
  821. req.param5 = '';
  822. req.array1 = [0];
  823. req.array2 = [''];
  824. utilStartSubmitDialog();
  825. RVC.HealthmanagerEntityCtrl.DeployTerminal(req, function(ret) {
  826. utilStopSubmitDialog();
  827. if(ret.errorCode === 0) {
  828. let result = JSON.parse(ret[RVC.EntityController.sigResponseUUID])
  829. if(result.result == 0) {
  830. utilStartAlertDialog("操作成功,即将进入下一步", function() {
  831. RVC.GuideController.gotoPage(result.nextStep, false);
  832. });
  833. } else {
  834. utilStartAlertDialog("操作失败:[" + result.result + "] " + result.additionalMsg);
  835. }
  836. } else {
  837. RVC.HealthmanagerEntityCtrl.commErrorCallback(ret);
  838. }
  839. });
  840. }
  841. function InitAccessAuthParam()
  842. {
  843. let req = new Request();
  844. req.entityName = 'AccessAuthorization'
  845. req.key = 'Server'
  846. $('#guide_access_authorize_server_ip_content').val('');
  847. $('#guide_access_authorize_port_content').val('');
  848. RVC.DeviceControlEntityCtrl.ReadCenterConfigStr(req, function(ret){
  849. if(ret.errorCode === 0) {
  850. console.log('fetch auth addr from centersettins succ.');
  851. let result = JSON.parse(ret[RVC.EntityController.sigResponseUUID])
  852. const addr = result.value.split(' ')[0]
  853. const port = result.value.split(' ')[1]
  854. if(checkIpv4(addr) && check_port(port)) {
  855. $('#guide_access_authorize_server_ip_content').val(addr);
  856. $('#guide_access_authorize_port_content').val(port);
  857. var serveraddr = addr + ':' + port;
  858. console.log(serveraddr);
  859. } else {
  860. utilShowToast("获取准入配置信息有误,请检查集中配置文件!", 5000);
  861. }
  862. } else {
  863. utilShowToast("获取准入配置信息失败! ErrorCode: " + ErrorCodeStringfy(ret.errorCode));
  864. }
  865. });
  866. }
  867. function AuthorizeTerminal(ip, port, username, password)
  868. {
  869. let req = new Request();
  870. req.preStep = DeployStepChain.AccessAuthorize[preStepIndex];
  871. req.currStep = DeployStepChain.AccessAuthorize[curStepIndex];
  872. req.nextStep = DeployStepChain.AccessAuthorize[nextStepIndex];
  873. req.param1 = parseInt(port, 10);
  874. req.param2 = 0;
  875. req.param3 = ip;
  876. req.param4 = '';
  877. req.options = 0;
  878. req.additional = 0;
  879. req.restartApp = false;
  880. req.restartPC = false;
  881. req.param5 = '';
  882. req.array1 = [0,0];
  883. req.array2 = [username, password];
  884. req.timeout = 65000;
  885. utilStartSubmitDialog();
  886. RVC.HealthmanagerEntityCtrl.DeployTerminal(req, function(ret) {
  887. utilStopSubmitDialog();
  888. if(ret.errorCode === 0) {
  889. let result = JSON.parse(ret[RVC.EntityController.sigResponseUUID])
  890. if(result.result == 0) {
  891. utilStartAlertDialog("操作成功,即将进入下一步", function() {
  892. RVC.GuideController.gotoPage(result.nextStep, false);
  893. });
  894. } else {
  895. utilStartAlertDialog("操作失败:[0x" + result.result.toString(16) + "] " + result.additionalMsg);
  896. }
  897. } else {
  898. RVC.HealthmanagerEntityCtrl.commErrorCallback(ret);
  899. }
  900. });
  901. }
  902. function generateMediaDeviceSelect(devices, select_id) {
  903. var deviceLength = 0;
  904. if ((devices) instanceof Array) {
  905. deviceLength = devices.length;
  906. } else {
  907. deviceLength = 1
  908. }
  909. var devicesHtml = '';
  910. var selectid = select_id;
  911. $('#' + selectid).empty();
  912. for (var loop = 0; loop < deviceLength; loop++) {
  913. var cur = devices[loop];
  914. var deviceTemplateData = {
  915. loop: loop,
  916. deviceName : cur,
  917. type: selectid
  918. };
  919. var pushHtml = '';
  920. pushHtml = '<div id="{{type}}_item_{{loop}}" option="{{deviceName}}" class="select_medium hide_with_ellipsis" onclick=MediaDeviceSelectChange(this)>'
  921. pushHtml += '{{deviceName}}</div>'
  922. $('#' + selectid).secureAppend(pushHtml, deviceTemplateData);
  923. }
  924. }
  925. function FulfillMediaDeviceList(flag)
  926. {
  927. let req = new Request();
  928. req.type = 6; //1,2,4不需要摄像头配置
  929. req.interest = 0;
  930. req.reserverd1 = 0;
  931. req.reserverd2 = '';
  932. req.reserverd2 = '';
  933. RVC.CameraConfigEntity.GetMediaAvailableList(req, function(ret) {
  934. if(ret.errorCode === 0) {
  935. let result = JSON.parse(ret[RVC.EntityController.sigResponseUUID])
  936. console.log('device count: ' + result.result);
  937. var microphones = [];
  938. var loundspeakers = [];
  939. var cameras = [];
  940. const inner_deault = '内置音频';
  941. var microphones_in_value = $('#gui_media_config_audio_input_infree').attr('value');
  942. var microphones_in_exist = false;
  943. var microphones_inner_exist = false;
  944. var microphones_out_value = $('#gui_media_config_audio_input_outfree').attr('value');
  945. var microphones_out_exist = false;
  946. var loundspeakers_in_value = $('#gui_media_config_audio_output_infree').attr('value');
  947. var loundspeakers_in_exist = false;
  948. var loundspeakers_inner_exist = false;
  949. var loundspeakers_out_value = $('#gui_media_config_audio_output_outfree').attr('value');
  950. var loundspeakers_out_exist = false;
  951. for (var n = 0; n < result.AvailableList.length; n++) {
  952. console.log(result.AvailableList[n] + ' ' + result.ListItemType[n] + ' ' + result.ListItemStatus[n]);
  953. if(result.ListItemType[n] == MEDIA_TYPE.MICROPHONE) {
  954. microphones.push(result.AvailableList[n]);
  955. if(microphones_in_value !== '' && microphones_in_value === result.AvailableList[n]){
  956. microphones_in_exist = true;
  957. }
  958. if(microphones_out_value !== '' && microphones_out_value === result.AvailableList[n]){
  959. microphones_out_exist = true;
  960. }
  961. if(inner_deault === result.AvailableList[n]) {
  962. microphones_inner_exist = true;
  963. }
  964. } else if(result.ListItemType[n] == MEDIA_TYPE.LOUNDSPEAKER) {
  965. loundspeakers.push(result.AvailableList[n]);
  966. if(loundspeakers_out_value !== '' && loundspeakers_out_value === result.AvailableList[n]){
  967. loundspeakers_out_exist = true;
  968. }
  969. if(loundspeakers_in_value !== '' && loundspeakers_in_value === result.AvailableList[n]){
  970. loundspeakers_in_exist = true;
  971. }
  972. if(inner_deault === result.AvailableList[n]) {
  973. loundspeakers_inner_exist = true;
  974. }
  975. } else if(result.ListItemType[n] == MEDIA_TYPE.CAMERA) {
  976. cameras.push(result.AvailableList[n]);
  977. }
  978. }
  979. generateMediaDeviceSelect(loundspeakers, 'gui_media_config_audio_output_outfree_list');
  980. generateMediaDeviceSelect(loundspeakers, 'gui_media_config_audio_output_infree_list');
  981. generateMediaDeviceSelect(microphones, 'gui_media_config_audio_input_outfree_list');
  982. generateMediaDeviceSelect(microphones, 'gui_media_config_audio_input_infree_list');
  983. if(typeof flag !== 'undefined') {
  984. if(!microphones_in_exist) {
  985. $('#gui_media_config_audio_input_infree').empty();
  986. $('#gui_media_config_audio_input_infree').attr('value', '');
  987. }
  988. if(!microphones_out_exist){
  989. $('#gui_media_config_audio_input_outfree').empty();
  990. $('#gui_media_config_audio_input_outfree').attr('value', '');
  991. }
  992. if(!loundspeakers_in_exist){
  993. $('#gui_media_config_audio_output_infree').empty();
  994. $('#gui_media_config_audio_output_infree').attr('value', '');
  995. }
  996. if(!loundspeakers_out_exist) {
  997. $('#gui_media_config_audio_output_outfree').empty();
  998. $('#gui_media_config_audio_output_outfree').attr('value', '');
  999. }
  1000. utilShowToast("已刷新");
  1001. } else {
  1002. if(microphones_inner_exist) {
  1003. $('#gui_media_config_audio_input_infree').text(inner_deault);
  1004. $('#gui_media_config_audio_input_infree').attr('value', inner_deault);
  1005. }
  1006. if(loundspeakers_inner_exist) {
  1007. $('#gui_media_config_audio_output_infree').text(inner_deault);
  1008. $('#gui_media_config_audio_output_infree').attr('value', inner_deault);
  1009. }
  1010. }
  1011. } else if(typeof flag !== 'undefined'){
  1012. RVC.CameraConfigEntity.commErrorCallback(ret);
  1013. }
  1014. });
  1015. }
  1016. function SaveMediaDeviceConfig()
  1017. {
  1018. //话筒扬声器
  1019. var output_infree = $('#gui_media_config_audio_output_infree').attr('value');
  1020. //外部扬声器
  1021. var output_outfree = $('#gui_media_config_audio_output_outfree').attr('value');
  1022. //话筒麦克风
  1023. var input_infree = $('#gui_media_config_audio_input_infree').attr('value');
  1024. //外部麦克风
  1025. var input_outfree = $('#gui_media_config_audio_input_outfree').attr('value');
  1026. if(output_outfree === '') {
  1027. utilStartAlertDialog('请选择外部扬声器');
  1028. return;
  1029. }
  1030. if(output_infree === '') {
  1031. utilStartAlertDialog('请选择话筒扬声器');
  1032. return;
  1033. }
  1034. if(input_outfree === '') {
  1035. utilStartAlertDialog('请选择外部麦克风');
  1036. return;
  1037. }
  1038. if(input_infree === '') {
  1039. utilStartAlertDialog('请选择话筒麦克风');
  1040. return;
  1041. }
  1042. if(output_infree == output_outfree) {
  1043. utilStartAlertDialog('扬声器选取冲突,请重新选择');
  1044. return;
  1045. }
  1046. if(input_infree == input_outfree) {
  1047. utilStartAlertDialog('麦克风选取冲突,请重新选择');
  1048. return;
  1049. }
  1050. let req = new Request();
  1051. req.preStep = DeployStepChain.MediaConfig[preStepIndex];
  1052. req.currStep = DeployStepChain.MediaConfig[curStepIndex];
  1053. req.nextStep = DeployStepChain.MediaConfig[nextStepIndex];
  1054. req.additional = 0;
  1055. req.options = 1; //0:保存在临时文件,1:保存在root.ini
  1056. req.restartApp = false;
  1057. req.restartPC = false;
  1058. req.param1 = 0;
  1059. req.param2 = 0;
  1060. req.param3 = '';
  1061. req.param4 = '';
  1062. req.param5 = '';
  1063. req.array1 = [MEDIA_DETAIL_TYPE.MediaDev_OutSpeaker, MEDIA_DETAIL_TYPE.MediaDev_InSpeaker, MEDIA_DETAIL_TYPE.MediaDev_OutMicrophone, MEDIA_DETAIL_TYPE.MediaDev_InMicrophone];
  1064. req.array2 = [output_outfree, output_infree, input_outfree, input_infree];
  1065. utilStartSubmitDialog();
  1066. RVC.HealthmanagerEntityCtrl.DeployTerminal(req, function(ret) {
  1067. utilStopSubmitDialog();
  1068. if(ret.errorCode === 0) {
  1069. let result = JSON.parse(ret[RVC.EntityController.sigResponseUUID])
  1070. if(result.result == 0) {
  1071. if(req.restartApp || req.restartPC) {
  1072. RVC.GuideController.hideAllPage();
  1073. RVC.GuideController.hideAllRebootTipElem();
  1074. if(req.restartApp) {
  1075. $('#guide_restart_loading').show();
  1076. } else if(req.restartPC) {
  1077. $('#guide_reboot_loading').show();
  1078. }
  1079. $('#guide_reboot_page').show();
  1080. } else {
  1081. utilStartAlertDialog("操作成功,即将进入下一步", function() {
  1082. RVC.GuideController.gotoPage(result.nextStep, false);
  1083. });
  1084. }
  1085. } else {
  1086. utilStartAlertDialog("操作失败:[" + result.result + "] " + result.additionalMsg);
  1087. }
  1088. } else {
  1089. RVC.HealthmanagerEntityCtrl.commErrorCallback(ret);
  1090. }
  1091. });
  1092. }
  1093. //硬件测试接口
  1094. function CheckDevAdapterAvailable(adapter, port, baudrate)
  1095. {
  1096. let req = new Request();
  1097. req.filename= adapter;
  1098. req.type = 0;
  1099. req.options = 0;
  1100. req.port = parseInt(port, 10);
  1101. req.baudrate = parseInt(baudrate, 10);
  1102. req.param1 = 0;
  1103. req.param2 = 0;
  1104. req.param3 = "";
  1105. req.param4 = "";
  1106. req.timeout = 60000;
  1107. console.log("check adapter: " + adapter + " " + port + " " + baudrate);
  1108. utilStartSubmitDialog();
  1109. RVC.DeviceControlEntityCtrl.TestAdapterFileAvailable(req, function(ret) {
  1110. utilStopSubmitDialog();
  1111. if(ret.errorCode === 0) {
  1112. if(adapterTestFailedCount != 0) {
  1113. adapterTestFailedCount = 0;
  1114. }
  1115. let result = JSON.parse(ret[RVC.EntityController.sigResponseUUID])
  1116. if(result.status == 0) {
  1117. utilShowToast("适配器文件成功加载;尝试打开设备成功!", 1500);
  1118. } else {
  1119. utilStartAlertDialog("验证失败:[" + result.status + "] " + result.msg);
  1120. }
  1121. } else {
  1122. if(parseInt(ret.errorCode, 10) == ErrorCodeEnum.Error_NetBroken) {
  1123. adapterTestFailedCount++;
  1124. if(adapterTestFailedCount >= 3) {
  1125. utilStartAlertDialog("检测到多次调用测试通道失败,将尝试重启关联模块", function() {
  1126. utilShowToast('尝试重启关联模块,请稍后', 5000);
  1127. setTestBtnStatus(false);
  1128. StartBasicHardwareEntity("DeviceControl", function(){
  1129. setTestBtnStatus(true);
  1130. adapterTestFailedCount = 0;
  1131. },function(){
  1132. setTestBtnStatus(true);
  1133. });
  1134. });
  1135. } else {
  1136. utilStartAlertDialog("请求失败:" + ErrorCodeStringfy(ret.errorCode));
  1137. }
  1138. } else {
  1139. utilStartAlertDialog("请求失败:" + ErrorCodeStringfy(ret.errorCode));
  1140. }
  1141. }
  1142. });
  1143. }
  1144. function SaveDevAdapterInfo(adapter, port, baudrate)
  1145. {
  1146. let req = new Request();
  1147. req.preStep = DeployStepChain.AdapterConfig[curStepIndex];
  1148. req.currStep = DeployStepChain.AdapterConfig[curStepIndex];
  1149. req.nextStep = DeployStepChain.AdapterConfig[curStepIndex];
  1150. req.param1 = parseInt(port, 10);
  1151. req.param2 = parseInt(baudrate, 10);
  1152. req.param3 = adapter;
  1153. req.param4 = '';
  1154. req.param5 = '';
  1155. req.array1 = [0];
  1156. req.array2 = [''];
  1157. req.options = 0x2; //0x1:更新到临时的root.ini; 0x2:更新到root.ini
  1158. req.additional = 0;
  1159. req.restartApp = false;
  1160. req.restartPC = false;
  1161. setSaveBtnStatus(false);
  1162. RVC.HealthmanagerEntityCtrl.DeployTerminal(req, function(ret) {
  1163. setSaveBtnStatus(true);
  1164. if(ret.errorCode === 0) {
  1165. let result = JSON.parse(ret[RVC.EntityController.sigResponseUUID])
  1166. if(result.result == 0) {
  1167. globalLastRemberAdapterName = adapter;
  1168. console.log('save adapter info');
  1169. utilShowToast('已保存,将重新刷新', 1000, function() {
  1170. LoadDeviceAdaptersWithEvent(false);
  1171. });
  1172. } else {
  1173. utilStartAlertDialog("保存失败:[" + result.result + "] " + result.additionalMsg);
  1174. }
  1175. } else {
  1176. RVC.HealthmanagerEntityCtrl.commErrorCallback(ret);
  1177. }
  1178. });
  1179. }
  1180. /**
  1181. * 结束基本硬件配置后的操作
  1182. */
  1183. function FinshedDevAdapterConfig()
  1184. {
  1185. let req = new Request();
  1186. req.preStep = DeployStepChain.AdapterConfig[preStepIndex];
  1187. req.currStep = DeployStepChain.AdapterConfig[curStepIndex];
  1188. req.nextStep = DeployStepChain.AdapterConfig[nextStepIndex];
  1189. req.param1 = 1; //Start
  1190. req.param2 = 1; //Force
  1191. req.param3 = 'PinPad';
  1192. req.param4 = ''; //Start param
  1193. req.param5 = '';
  1194. req.array1 = [0];
  1195. req.array2 = [''];
  1196. req.options = 0x4; //ControlEntity
  1197. req.additional = 0;
  1198. req.restartApp = false;
  1199. req.restartPC = false;
  1200. utilStartSubmitDialog();
  1201. RVC.HealthmanagerEntityCtrl.DeployTerminal(req, function(ret) {
  1202. utilStopSubmitDialog();
  1203. if(ret.errorCode === 0) {
  1204. let result = JSON.parse(ret[RVC.EntityController.sigResponseUUID])
  1205. if(result.result == 0) {
  1206. RVC.GuideController.gotoPage(result.nextStep, false);
  1207. // utilStartAlertDialog("操作成功,即将进入下一步", function() {
  1208. // });
  1209. } else {
  1210. utilStartAlertDialog("操作失败:[" + result.result + "] " + result.additionalMsg);
  1211. }
  1212. } else {
  1213. RVC.HealthmanagerEntityCtrl.commErrorCallback(ret);
  1214. }
  1215. });
  1216. }
  1217. function FinshedDeploy()
  1218. {
  1219. //RVC.HealthmanagerEntityCtrl.ControlTerminalLifeNo(1);
  1220. let req = new Request();
  1221. req.preStep = DeployStepChain.Finished[preStepIndex];
  1222. req.currStep = DeployStepChain.Finished[curStepIndex];
  1223. req.nextStep = DeployStepChain.Finished[nextStepIndex];
  1224. req.param1 = 0;
  1225. req.param2 = 0;
  1226. req.param3 = '';
  1227. req.param4 = '';
  1228. req.param5 = '';
  1229. req.array1 = [0];
  1230. req.array2 = [''];
  1231. req.additional = 0;
  1232. req.options = 0;
  1233. req.restartApp = true;
  1234. req.restartPC = false;
  1235. if(req.restartApp) {
  1236. utilStartSubmitDialog("请求重启应用,请稍后...");
  1237. } else {
  1238. utilStartSubmitDialog();
  1239. }
  1240. RVC.HealthmanagerEntityCtrl.DeployTerminal(req, function(ret) {
  1241. utilStopSubmitDialog();
  1242. if(ret.errorCode === 0) {
  1243. let result = JSON.parse(ret[RVC.EntityController.sigResponseUUID])
  1244. if(result.result == 0) {
  1245. if(req.restartApp || req.restartPC) {
  1246. RVC.GuideController.hideAllPage();
  1247. RVC.GuideController.hideAllRebootTipElem();
  1248. if(req.restartApp) {
  1249. $('#guide_restart_loading').show();
  1250. } else if(req.restartPC) {
  1251. $('#guide_reboot_loading').show();
  1252. }
  1253. $('#guide_reboot_page').show();
  1254. }
  1255. } else {
  1256. utilStartAlertDialog("操作失败:[" + result.result + "] " + result.additionalMsg);
  1257. }
  1258. } else {
  1259. RVC.HealthmanagerEntityCtrl.commErrorCallback(ret);
  1260. }
  1261. });
  1262. }
  1263. function FontInstallStateSwitch(installState)
  1264. {
  1265. if(installState === 0) {
  1266. $('#guide_font_installed_div').hide();
  1267. $('#guide_font_installed_sample_div').hide();
  1268. $('#guide_font_noinstall_div').show();
  1269. $('#guide_font_confirm_next').hide();
  1270. $('#guide_font_confirm_install').show();
  1271. } else if(installState === 1) {
  1272. var tip = '检测到字体已安装';
  1273. $('#guide_font_installed_content').html(tip);
  1274. $('#guide_font_noinstall_div').hide();
  1275. $('#guide_font_installed_div').show();
  1276. $('#guide_font_installed_sample_div').show();
  1277. $('#guide_font_confirm_install').hide();
  1278. $('#guide_font_confirm_next').show();
  1279. } else if(installState === 2) {
  1280. var tip = '字体安装成功!';
  1281. $('#guide_font_installed_content').html(tip);
  1282. $('#guide_font_noinstall_div').hide();
  1283. $('#guide_font_installed_div').hide();
  1284. $('#guide_font_installed_sample_div').hide();
  1285. $('#guide_font_confirm_install').hide();
  1286. $('#guide_font_confirm_next').show();
  1287. $('#guide_font_install_finished_div').show();
  1288. }
  1289. }
  1290. function SogouInstallStateSwitch(installState)
  1291. {
  1292. if(installState === 0) {
  1293. $('#guide_sogou_installed_div').hide();
  1294. $('#guide_sogou_noinstall_div').show();
  1295. $('#guide_sogou_install_next').hide();
  1296. $('#guide_sogou_install_start').show();
  1297. } else if(installState === 1) {
  1298. $('#guide_sogou_noinstall_div').hide();
  1299. $('#guide_sogou_installed_div').show();
  1300. $('#guide_sogou_install_start').hide();
  1301. $('#guide_sogou_install_next').show();
  1302. } else if(installState === 2) {
  1303. $('#guide_sogou_noinstall_div').hide();
  1304. $('#guide_sogou_installed_div').hide();
  1305. $('#guide_sogou_install_start').hide();
  1306. $('#guide_sogou_install_next').show();
  1307. $('#guide_sogou_install_finished_div').show();
  1308. }
  1309. }
  1310. function InstallSpecifiesFont()
  1311. {
  1312. let req = new Request();
  1313. req.preStep = DeployStepChain.FontInstall[preStepIndex];
  1314. req.currStep = DeployStepChain.FontInstall[curStepIndex];
  1315. req.nextStep = DeployStepChain.FontInstall[nextStepIndex];
  1316. req.param1 = 0;
  1317. req.param2 = 0;
  1318. req.param3 = '';
  1319. req.param4 = '';
  1320. req.param5 = '';
  1321. req.array1 = [0];
  1322. req.array2 = [''];
  1323. req.options = 2;
  1324. req.additional = 0;
  1325. req.restartApp = false;
  1326. req.restartPC = false;
  1327. req.timeout = 60000;
  1328. utilStartSubmitDialog();
  1329. RVC.HealthmanagerEntityCtrl.DeployTerminal(req, function(ret) {
  1330. utilStopSubmitDialog();
  1331. if(ret.errorCode === 0) {
  1332. let result = JSON.parse(ret[RVC.EntityController.sigResponseUUID])
  1333. if(result.result == 0) {
  1334. FontInstallStateSwitch(2);
  1335. } else {
  1336. utilStartAlertDialog("安装失败:[" + result.result + "] " + result.additionalMsg);
  1337. }
  1338. } else {
  1339. RVC.HealthmanagerEntityCtrl.commErrorCallback(ret);
  1340. }
  1341. });
  1342. }
  1343. function InstallSogouInput()
  1344. {
  1345. let req = new Request();
  1346. req.preStep = DeployStepChain.SogouInstall[preStepIndex];
  1347. req.currStep = DeployStepChain.SogouInstall[curStepIndex];
  1348. req.nextStep = DeployStepChain.SogouInstall[nextStepIndex];
  1349. req.param1 = 0;
  1350. req.param2 = 0;
  1351. req.param3 = '';
  1352. req.param4 = '';
  1353. req.param5 = '';
  1354. req.array1 = [0];
  1355. req.array2 = [''];
  1356. req.options = 2; //安装搜狗输入法
  1357. req.additional = 0;
  1358. req.restartApp = false;
  1359. req.restartPC = false;
  1360. req.timeout = 60000;
  1361. utilStartSubmitDialog();
  1362. RVC.HealthmanagerEntityCtrl.DeployTerminal(req, function(ret) {
  1363. utilStopSubmitDialog();
  1364. if(ret.errorCode === 0) {
  1365. let result = JSON.parse(ret[RVC.EntityController.sigResponseUUID])
  1366. if(result.result == 0) {
  1367. SogouInstallStateSwitch(2);
  1368. var tip = '安装成功!';
  1369. if(result.array2.length === 3) {
  1370. tip += '<br><br>版本:<strong>' + result.array2[0] + '</strong>';
  1371. tip += '<br>安装时间:<strong>' + result.array2[2] + '</strong>';
  1372. }
  1373. $('#guide_sogou_install_finished_content').html(tip);
  1374. } else {
  1375. utilStartAlertDialog("安装失败:[" + result.result + "] " + result.additionalMsg);
  1376. }
  1377. } else {
  1378. RVC.HealthmanagerEntityCtrl.commErrorCallback(ret);
  1379. }
  1380. });
  1381. }
  1382. function DisplayFontInstallState()
  1383. {
  1384. let req = new Request();
  1385. req.preStep = DeployStepChain.FontInstall[curStepIndex];
  1386. req.currStep = DeployStepChain.FontInstall[curStepIndex];
  1387. req.nextStep = DeployStepChain.FontInstall[curStepIndex];
  1388. req.param1 = 0;
  1389. req.param2 = 0;
  1390. req.param3 = '';
  1391. req.param4 = '';
  1392. req.param5 = '';
  1393. req.array1 = [0];
  1394. req.array2 = [''];
  1395. req.options = 1; //检测字体的安装状态
  1396. req.additional = 0;
  1397. req.restartApp = false;
  1398. req.restartPC = false;
  1399. RVC.HealthmanagerEntityCtrl.DeployTerminal(req, function(ret) {
  1400. if(ret.errorCode === 0) {
  1401. let result = JSON.parse(ret[RVC.EntityController.sigResponseUUID])
  1402. if(result.result == 0) {
  1403. if(result.param1 === 1) {
  1404. FontInstallStateSwitch(1);
  1405. } else {
  1406. FontInstallStateSwitch(0);
  1407. }
  1408. } else {
  1409. utilStartAlertDialog("查询失败:[" + result.result + "] " + result.additionalMsg);
  1410. }
  1411. } else {
  1412. RVC.HealthmanagerEntityCtrl.commErrorCallback(ret);
  1413. }
  1414. });
  1415. }
  1416. function DisplaySogouInstallState()
  1417. {
  1418. let req = new Request();
  1419. req.preStep = DeployStepChain.SogouInstall[curStepIndex];
  1420. req.currStep = DeployStepChain.SogouInstall[curStepIndex];
  1421. req.nextStep = DeployStepChain.SogouInstall[curStepIndex];
  1422. req.param1 = 0;
  1423. req.param2 = 0;
  1424. req.param3 = '';
  1425. req.param4 = '';
  1426. req.param5 = '';
  1427. req.array1 = [0];
  1428. req.array2 = [''];
  1429. req.options = 1; //检测输入法的安装状态
  1430. req.additional = 0;
  1431. req.restartApp = false;
  1432. req.restartPC = false;
  1433. RVC.HealthmanagerEntityCtrl.DeployTerminal(req, function(ret) {
  1434. if(ret.errorCode === 0) {
  1435. let result = JSON.parse(ret[RVC.EntityController.sigResponseUUID])
  1436. if(result.result == 0) {
  1437. if(result.param1 === 1) {
  1438. SogouInstallStateSwitch(1);
  1439. var tip = '检测到输入法已安装!';
  1440. if(result.array2.length === 3) {
  1441. tip += '<br><br>版本:<strong>' + result.array2[0] + '</strong>';
  1442. tip += '<br>安装时间:<strong>' + result.array2[2] + '</strong>';
  1443. }
  1444. $('#guide_sogou_installed_content').html(tip);
  1445. console.log(tip);
  1446. } else {
  1447. SogouInstallStateSwitch(0);
  1448. }
  1449. } else {
  1450. utilStartAlertDialog("查询失败:[" + result.result + "] " + result.additionalMsg);
  1451. }
  1452. } else {
  1453. RVC.HealthmanagerEntityCtrl.commErrorCallback(ret);
  1454. }
  1455. });
  1456. }
  1457. function FulfillTerminalBasicInfo(val) {
  1458. let req = new Request();
  1459. RVC.DeviceControlEntityCtrl.QueryHardwareInfo(req, function(ret){
  1460. if (ret.errorCode === 0) {
  1461. let result = JSON.parse(ret[RVC.EntityController.sigResponseUUID])
  1462. if(result.terminalNo === '') {
  1463. $('#page_footer #termina_no_td').hide();
  1464. } else {
  1465. $('#page_footer #termina_no_td').show();
  1466. $('#page_footer #terminal_no').html('终端号:' + result.terminalNo);
  1467. }
  1468. //$('#machineType span').html(result.machineType);
  1469. //$('#deploySite span').html(result.site);
  1470. $('#page_footer #app_version').html('应用版本:' + result.termVersion);
  1471. $('#page_footer #footer_local_ip').html('IP:' + result.ip[0]);
  1472. $('#page_footer #footer_local_mac').html('MAC:' + result.mac[0]);
  1473. $('#page_footer').show();
  1474. } else {
  1475. $('#page_footer').hide();
  1476. utilShowToast("获取终端信息失败:" + ErrorCodeStringfy(ret.errorCode));
  1477. }
  1478. });
  1479. }
  1480. RVC.GuideController = RVC.Object.extend({
  1481. hideAllPage: function () {
  1482. $('#guide_start_page').hide();
  1483. $('#guide_font_confirm_page').hide();
  1484. $('#guide_sogou_install_page').hide();
  1485. $('#guide_init_param_page').hide();
  1486. $('#guide_adapter_config_page').hide();
  1487. $('#guide_media_config_page').hide();
  1488. $('#guide_sync_centersetting_page').hide();
  1489. $('#guide_access_authorize_page').hide();
  1490. $('#guide_finish_page').hide();
  1491. $('#guide_reboot_page').hide();
  1492. },
  1493. hideAllRebootTipElem: function() {
  1494. $('#reboot_operate').hide();
  1495. $('#guide_rebootinfo').hide();
  1496. $('#guide_rebootinfo_need_restart').hide();
  1497. $('#guide_rebootinfo_need_reboot').hide();
  1498. $('#guide_reboot_application_button').hide();
  1499. $('#guide_reboot_device_button').hide();
  1500. $('#guide_finished_button').hide();
  1501. $('#guide_finish_device_button').hide();
  1502. $('#guide_save_loading').hide();
  1503. $('#guide_reboot_loading').hide();
  1504. $('#guide_restart_loading').hide();
  1505. },
  1506. resizeWindow: function () {
  1507. var winHei = $(window).height();
  1508. var popHeight = 480;
  1509. var adjustHeight = 0;
  1510. var blueBackgroundHeight = 0;
  1511. if (winHei < 860) {
  1512. winHei = 860;
  1513. }
  1514. blueBackgroundHeight = winHei - $('.headcontainer').height() - $('#page_footer').height();
  1515. $('#guide_height').height(blueBackgroundHeight);
  1516. adjustHeight = (blueBackgroundHeight - popHeight) * 0.5;
  1517. $('#guide_start_page').css('padding-top', (adjustHeight + 100) + 'px');
  1518. var domWidth = $('body').width();
  1519. var winWidth = $('window').width();
  1520. if (domWidth > winWidth) {
  1521. setTimeout(function () {
  1522. $('body').scrollTop($('.headcontainer').height() + adjustHeight);
  1523. $('body').scrollLeft(($('body').width() - $(window).width()) / 2);
  1524. }, 1000)
  1525. }
  1526. $('#guide_init_param_page').css('padding-top', adjustHeight + 'px');
  1527. $('#guide_font_confirm_page').css('padding-top', adjustHeight + 'px');
  1528. $('#guide_sogou_install_page').css('padding-top', adjustHeight + 'px');
  1529. $('#guide_media_config_page').css('padding-top', adjustHeight + 'px');
  1530. $('#guide_adapter_config_page').css('padding-top', adjustHeight + 'px');
  1531. $('#guide_sync_centersetting_page').css('padding-top', adjustHeight + 'px');
  1532. $('#guide_access_authorize_page').css('padding-top', adjustHeight + 'px');
  1533. $('#guide_finish_page,#guide_reboot_page').css('padding-top', adjustHeight + 'px');
  1534. },
  1535. beginInstall: function() {
  1536. this.gotoPage(DEPLOY.DeployStep_3rdParty_FontInstall, true);
  1537. },
  1538. getPage: function(step) {
  1539. var select_page = '';
  1540. switch(step) {
  1541. case DEPLOY.DeployStep_Begin:
  1542. select_page = 'guide_start_page';
  1543. break;
  1544. case DEPLOY.DeployStep_GetTerminalInfo :
  1545. select_page = 'guide_init_param_page';
  1546. break;
  1547. case DEPLOY.DeployStep_FetchCenterSettings:
  1548. select_page = 'guide_sync_centersetting_page';
  1549. break;
  1550. case DEPLOY.DeployStep_AccessAuthorize :
  1551. select_page = 'guide_access_authorize_page';
  1552. break;
  1553. case DEPLOY.DeployStep_MediaConfig :
  1554. select_page = 'guide_media_config_page';
  1555. break;
  1556. case DEPLOY.DeployStep_AdapterConfig :
  1557. select_page = 'guide_adapter_config_page';
  1558. break;
  1559. case DEPLOY.DeployStep_Finished :
  1560. select_page = 'guide_finish_page';
  1561. break
  1562. case DEPLOY.DeployStep_3rdParty_SogouInstall:
  1563. select_page = 'guide_sogou_install_page';
  1564. break;
  1565. case DEPLOY.DeployStep_3rdParty_FontInstall:
  1566. select_page = 'guide_font_confirm_page';
  1567. break;
  1568. default:
  1569. break;
  1570. }
  1571. return select_page;
  1572. },
  1573. checkPageAvailable: function(step) {
  1574. const select_page = this.getPage(step);
  1575. if(select_page !== '') {
  1576. return true;
  1577. } else {
  1578. return false;
  1579. }
  1580. },
  1581. preLoadPage: async function(step, firstRun) {
  1582. this.hideAllPage();
  1583. switch(step) {
  1584. case DEPLOY.DeployStep_MediaConfig:
  1585. FulfillMediaDeviceList();
  1586. break;
  1587. case DEPLOY.DeployStep_AdapterConfig:
  1588. adapterTestFailedCount = 0;
  1589. InitCurrentVendorSelect();
  1590. break;
  1591. case DEPLOY.DeployStep_FetchCenterSettings:
  1592. InitCenterSettingInputParam();
  1593. break;
  1594. case DEPLOY.DeployStep_AccessAuthorize:
  1595. //因为无集中配置的原因,导致不能及时走灰度去分行化,所以这里要重启初始化实体
  1596. if(!firstRun) {
  1597. StartBasicHardwareEntity("Initializer", function(){
  1598. utilShowToast("初始化模块成功!", 2000);
  1599. },function(){
  1600. utilStartAlertDialog("初始化下一步模块失败,需重启应用尝试,点击确认将重启应用(进度仍保存)", function(){
  1601. RVC.HealthmanagerEntityCtrl.RestartApp(true);
  1602. RVC.GuideController.hideAllPage();
  1603. RVC.GuideController.hideAllRebootTipElem();
  1604. $('#guide_restart_loading').show();
  1605. $('#guide_reboot_page').show();
  1606. }, "重启应用");
  1607. });
  1608. await SleepMs(2000);
  1609. }
  1610. break;
  1611. case DEPLOY.DeployStep_3rdParty_SogouInstall:
  1612. DisplaySogouInstallState();
  1613. break;
  1614. case DEPLOY.DeployStep_3rdParty_FontInstall:
  1615. DisplayFontInstallState();
  1616. break;
  1617. default:
  1618. break;
  1619. }
  1620. },
  1621. postLoadPage: function(step, firstRun) {
  1622. switch(step) {
  1623. case DEPLOY.DeployStep_Finished:
  1624. globalFinishedFlag = true;
  1625. break;
  1626. case DEPLOY.DeployStep_GetTerminalInfo:
  1627. InitTerminalRegistInfoUrl();
  1628. break;
  1629. case DEPLOY.DeployStep_AdapterConfig:
  1630. InterestRootSwitch(true);
  1631. $(document).off('keyup change', '#guide_adapter_config_baudrate_input,#guide_adapter_config_port_input');
  1632. $(document).on('keyup change', '#guide_adapter_config_baudrate_input,#guide_adapter_config_port_input', function () {
  1633. setSaveBtnStatus(true);
  1634. });
  1635. apdaterTestAllBefore = 0;
  1636. break;
  1637. case DEPLOY.DeployStep_AccessAuthorize:
  1638. InitAccessAuthParam();
  1639. break;
  1640. default:
  1641. break;
  1642. }
  1643. },
  1644. gotoPage: function(nextStep, firstRun) {
  1645. var select_page = this.getPage(nextStep);
  1646. if(select_page !== '') {
  1647. this.preLoadPage(nextStep, firstRun);
  1648. $('#' + select_page).show();
  1649. this.postLoadPage(nextStep, firstRun);
  1650. } else {
  1651. utilShowToast('不支持步骤!无法识别:' + nextStep, 5000);
  1652. }
  1653. },
  1654. sectOverPass: function() {
  1655. },
  1656. sectNext: function() {
  1657. },
  1658. setNavigaBtnAble: function(enable) {
  1659. }
  1660. });
  1661. $(document).on('click', '#guide_init_param_ip_check #ip_connect_check', function(){
  1662. if(!isButtonEnable('ip_connect_check')) {
  1663. return;
  1664. }
  1665. var ip = $('#guide_server_ip').val();
  1666. console.log('ip: ' + ip);
  1667. if(swtichStateIsOn('guide_server_type_switch')) {
  1668. UrlConnectableTest(ip,'text_guide_init_param_ip_tips', 'ip_connect_check')
  1669. } else {
  1670. IPConnectableTest(ip);
  1671. }
  1672. });
  1673. $(document).on('click', '#guide_sync_centersetting_server_ip_test', function(){
  1674. if(!isButtonEnable('guide_sync_centersetting_server_ip_test')) {
  1675. return;
  1676. }
  1677. var url = $('#guide_sync_centersetting_server_ip_content').val();
  1678. console.log('url: ' + url);
  1679. UrlConnectableTest(url, 'text_guide_sync_centersetting_ip_tips', 'guide_sync_centersetting_server_ip_test');
  1680. });
  1681. $(document).on('click', '#guide_init_param_next', function() {
  1682. const debranchOn = swtichStateIsOn('guide_server_type_switch');
  1683. const ip = $('#guide_server_ip').val();
  1684. if(!debranchOn && !isValidIpAddress(ip)) {
  1685. utilStartAlertDialog("无效 IP 格式");
  1686. return;
  1687. } else if(debranchOn && !checkUrl(ip)) {
  1688. utilStartAlertDialog("无效 URL 格式");
  1689. return;
  1690. }
  1691. const terminalType = $('#gui_init_param_machine_type').attr('value');
  1692. if(terminalType === '' || terminalType === 'None') {
  1693. utilStartAlertDialog("请选择所属终端机型");
  1694. return;
  1695. }
  1696. const vendorType = $('#gui_init_param_vendor').attr('value');
  1697. if(vendorType === '' || vendorType === 'None') {
  1698. utilStartAlertDialog("请选择设备厂商");
  1699. return;
  1700. }
  1701. const deviceModel = $('#gui_init_param_device_model').attr('value');
  1702. if(deviceModel === '' || deviceModel === 'None') {
  1703. utilStartAlertDialog("请选择设备型号");
  1704. return;
  1705. }
  1706. var tmp = $('#guide_init_param_device_sn').val();
  1707. const deviceSN = tmp.replace(/^\s*|\s*$/g,"");
  1708. if(deviceSN === '') {
  1709. utilStartAlertDialog("请输入设备序列号");
  1710. return;
  1711. }
  1712. const terminalno = $('#guide_init_param_terminalno').val();
  1713. if(!IsDigital(terminalno)) {
  1714. utilStartAlertDialog("无效终端号格式");
  1715. return;
  1716. }
  1717. utilStartConfirmDialog("<span>基本信息录入后将不可更改,如需重新配置可通过点击页面右上角菜单</span><span><img src=\"./images/clear.png\" style=\"width:20px;height:20px;padding: 0px 2px;\"></span><span>进行重置,请确认是否提交?</span>", function() {
  1718. InitTemrinalAbout(ip, terminalno, terminalType, vendorType, deviceModel, deviceSN, debranchOn);
  1719. });
  1720. });
  1721. $(document).on('click', '#gui_adapter_config_adapter_check_btn', function() {
  1722. var adapterName = $('#gui_adapter_config_adapter').attr('value');
  1723. var paramPort = $('#guide_adapter_config_port_input').val();
  1724. var paramBaudrate = $('#guide_adapter_config_baudrate_input').val();
  1725. CheckDevAdapterAvailable(adapterName, paramPort, paramBaudrate);
  1726. });
  1727. $(document).on('click', '#guide_adapter_config_test', function() {
  1728. TestAllAdapterAvailableOrNot();
  1729. });
  1730. $(document).on('click', '#guide_adapter_config_save', function() {
  1731. var adapterName = $('#gui_adapter_config_adapter').attr('value');
  1732. var paramPort = $('#guide_adapter_config_port_input').val();
  1733. var paramBaudrate = $('#guide_adapter_config_baudrate_input').val();
  1734. SaveDevAdapterInfo(adapterName, paramPort, paramBaudrate);
  1735. });
  1736. $(document).on('click', '#guide_adapter_config_next', function() {
  1737. var tips = '';
  1738. if(apdaterTestAllBefore === 0) {
  1739. tips = '还未进行过【配置有效性检测】,请确认是否要跳过?(首次安装强烈建议至少执行一次配置有效性检测)';
  1740. } else if(apdaterTestAllBefore === 1) {
  1741. tips = '之前检测存在模块未通过验证,请确认是否要跳过?(强烈建议所有模块检测通过后再进入下一步)';
  1742. }
  1743. if(tips !== '') {
  1744. utilStartConfirmDialog(tips, function() {
  1745. FinshedDevAdapterConfig();
  1746. });
  1747. } else {
  1748. FinshedDevAdapterConfig();
  1749. }
  1750. });
  1751. $(document).on('click', '#guide_sync_centersetting_next', function() {
  1752. const ip = $('#guide_sync_centersetting_server_ip_content').val();
  1753. if(!globalServerUsingHeadOffice && !isValidIpAddress(ip)) {
  1754. utilStartAlertDialog("无效IP格式");
  1755. return;
  1756. } else if(globalServerUsingHeadOffice && !checkUrl(ip)) {
  1757. utilStartAlertDialog("无效URL格式");
  1758. return;
  1759. }
  1760. if(!globalServerUsingHeadOffice) {
  1761. const port = $('#guide_sync_centersetting_port_content').val();
  1762. if(!check_port(port)) {
  1763. utilStartAlertDialog("无效端口号");
  1764. return;
  1765. }
  1766. DownloadCenterSetting(ip, port);
  1767. } else {
  1768. DownloadCenterSetting(ip);
  1769. }
  1770. });
  1771. $(document).on('click', '#guide_access_authorize_next', function() {
  1772. const ip = $('#guide_access_authorize_server_ip_content').val();
  1773. const port = $('#guide_access_authorize_port_content').val();
  1774. const username = $('#guide_access_authorize_username_content').val();
  1775. const psw = $('#guide_access_authorize_password_content').val();
  1776. if(!isValidIpAddress(ip)) {
  1777. utilStartAlertDialog("无效IP格式");
  1778. return;
  1779. }
  1780. if(!check_port(port)) {
  1781. utilStartAlertDialog("无效端口号");
  1782. return;
  1783. }
  1784. if(username === '') {
  1785. utilStartAlertDialog("请输入用户名");
  1786. return;
  1787. }
  1788. if(psw === '') {
  1789. utilStartAlertDialog("请输入密码");
  1790. return;
  1791. }
  1792. AuthorizeTerminal(ip, port, username, psw);
  1793. });
  1794. $(document).on('click', '#guide_media_config_refresh', function() {
  1795. FulfillMediaDeviceList(true);
  1796. });
  1797. $(document).on('click', '#guide_media_config_next', function() {
  1798. SaveMediaDeviceConfig();
  1799. });
  1800. $(document).on('click', '#guide_sogou_install_next', function() {
  1801. RVC.GuideController.gotoPage(DEPLOY.DeployStep_GetTerminalInfo);
  1802. });
  1803. $(document).on('click', '#guide_sogou_install_start', function() {
  1804. InstallSogouInput();
  1805. });
  1806. //字体安装按钮
  1807. $(document).on('click', '#guide_font_confirm_install', function() {
  1808. InstallSpecifiesFont();
  1809. });
  1810. //字体安装页面下一步按钮
  1811. $(document).on('click', '#guide_font_confirm_next', function() {
  1812. RVC.GuideController.gotoPage(DEPLOY.DeployStep_3rdParty_SogouInstall);
  1813. });
  1814. $(document).on('click', '#guide_finish_restart_btn', function() {
  1815. FinshedDeploy();
  1816. });
  1817. $(document).on('click', '#reset_btn', function() {
  1818. utilStartConfirmDialog("确认要重置当前终端的配置?(操作不可撤销)", function() {
  1819. ResetDeployConfig();
  1820. });
  1821. });
  1822. $('#header_right #quitpage_btn_div').bind('click', function() {
  1823. if(!globalFinishedFlag) {
  1824. utilStartConfirmDialog("配置还未完成,确定要退出当前配置吗?(应用也将退出)", function() {
  1825. AbortDeployConfig();
  1826. });
  1827. } else {
  1828. AbortDeployConfig(true);
  1829. }
  1830. });
  1831. $('#header_right #rebootapp_btn_div').bind('click', function() {
  1832. if(!globalFinishedFlag) {
  1833. utilStartConfirmDialog("配置还未完成,确定要重启应用吗?", function() {
  1834. RVC.HealthmanagerEntityCtrl.RestartApp(true);
  1835. RVC.GuideController.hideAllPage();
  1836. RVC.GuideController.hideAllRebootTipElem();
  1837. $('#guide_restart_loading').show();
  1838. $('#guide_reboot_page').show();
  1839. });
  1840. } else {
  1841. RVC.HealthmanagerEntityCtrl.RestartApp(true);
  1842. RVC.GuideController.hideAllPage();
  1843. RVC.GuideController.hideAllRebootTipElem();
  1844. $('#guide_restart_loading').show();
  1845. $('#guide_reboot_page').show();
  1846. }
  1847. });
  1848. $('#header_right #restartpc_btn_div').bind('click', function() {
  1849. if(!globalFinishedFlag) {
  1850. utilStartConfirmDialog("配置还未完成,确定要重启设备吗?", function() {
  1851. RVC.HealthmanagerEntityCtrl.RestartPC(true);
  1852. RVC.GuideController.hideAllPage();
  1853. RVC.GuideController.hideAllRebootTipElem();
  1854. $('#guide_reboot_loading').show();
  1855. $('#guide_reboot_page').show();
  1856. });
  1857. } else {
  1858. RVC.HealthmanagerEntityCtrl.RestartPC(true);
  1859. RVC.GuideController.hideAllPage();
  1860. RVC.GuideController.hideAllRebootTipElem();
  1861. $('#guide_reboot_loading').show();
  1862. $('#guide_reboot_page').show();
  1863. }
  1864. });
  1865. if (window.addEventListener) {
  1866. window.addEventListener('resize', RVC.GuideController.resizeWindow, false);
  1867. } else {
  1868. window.attachEvent('resize', RVC.GuideController.resizeWindow);
  1869. }
  1870. RVC.CameraConfigEntity.init();
  1871. if (window.location.href.indexOf('guide.html') !== -1) {
  1872. RVC.GuideController.resizeWindow();
  1873. RVC.Scroll.initScroll('#init_param_content');
  1874. $('#header_right #header_help_info_div').bind('click', function() {
  1875. //reloadThisPage();
  1876. //RVC.HealthmanagerEntityCtrl.OpenLocalMaintainPage();
  1877. utilStartAlertDialog('功能暂未实现!');
  1878. });
  1879. //console.log("href:" + window.location.href);
  1880. //console.log("search:" + window.location.search);
  1881. var pageIdx = getQueryStringByName('page');
  1882. var terminalNo = getQueryStringByName('terminalno');
  1883. var vendorAbbr = getQueryStringByName('vendor');
  1884. var serverIP = getQueryStringByName('ip');
  1885. if(terminalNo !== null && terminalNo.length > 0 && terminalNo !== 'null') {
  1886. globalTerminalNo = terminalNo;
  1887. }
  1888. if(vendorAbbr !== null && vendorAbbr.length > 0 && vendorAbbr !== 'null') {
  1889. globalSelectVendorType = vendorAbbr;
  1890. }
  1891. if(pageIdx !== null && pageIdx.length > 0 && pageIdx !== 'null' && IsDigital(pageIdx)) {
  1892. var step = parseInt(pageIdx, 10);
  1893. if(RVC.GuideController.checkPageAvailable(step)) {
  1894. utilStartAlertDialog('请点击确认按钮继续进行上次未完成的配置', function() {
  1895. RVC.GuideController.gotoPage(step, true);
  1896. });
  1897. }
  1898. } else {
  1899. /**
  1900. DeployStep_Begin : 0,
  1901. DeployStep_3rdParty_FontInstall : 1,
  1902. DeployStep_3rdParty_SogouInstall :2,
  1903. DeployStep_GetTerminalInfo : 3,
  1904. DeployStep_AdapterConfig : 4,
  1905. DeployStep_MediaConfig : 5,
  1906. DeployStep_FetchCenterSettings : 6,
  1907. DeployStep_AccessAuthorize : 7,
  1908. DeployStep_Finished : 8
  1909. *
  1910. */
  1911. RVC.GuideController.gotoPage(DEPLOY.DeployStep_Begin, true);
  1912. }
  1913. FulfillTerminalBasicInfo();
  1914. }
  1915. setTimeout(RVC.GuideController.resizeWindow, 200);
  1916. });