| define("firewall_url_filter","underscore jquery knockout set service".split(" "), | |
| function (_, $, ko, config, service) { | |
| //system url filter setting VM | |
| function UrlFilterSettingVM() { | |
| var target = this; | |
| var urlFltInfo = service.getUrlFilterList(); | |
| var columnsTmpl = [{ | |
| columnType: "checkbox", | |
| rowText: "index", | |
| width: "30%" | |
| }, { | |
| headerTextTrans: "url", | |
| rowText: "url", | |
| width: "70%" | |
| } | |
| ]; | |
| target.rules = ko.observableArray(urlFltInfo.urlFilterRules); | |
| target.gridTemplate = new ko.simpleGrid.viewModel({ | |
| data: target.rules(), | |
| idName: "index", | |
| columns: columnsTmpl, | |
| tmplType: 'list', | |
| pageSize: 10 | |
| }); | |
| target.clear = clearFunc; | |
| target.callback = callbackFunc; | |
| //删除规则 | |
| target.deleteRule = deleteRuleFunc; | |
| //添加规则 | |
| target.addRule = addRuleFunc; | |
| function callbackFunc(elem) { | |
| if (elem.result != "success") { | |
| errorOverlay(); | |
| } else { | |
| target.clear(); | |
| initialize(target); | |
| successOverlay(); | |
| $("#urlFilters").translate(); | |
| } | |
| } | |
| //添加规则 | |
| function addRuleFunc() { | |
| if (target.rules().length >= config.urlFilterMax) { | |
| showAlert({ | |
| msg: "url_filter_max", | |
| params: config.urlFilterMax | |
| }); | |
| return false; | |
| } | |
| var tmpArr = []; | |
| for (var idx = 0; idx < target.rules().length; idx++) { | |
| tmpArr.push(target.rules()[idx].url); | |
| } | |
| if ($.inArray($("#addURLFilter").val(), tmpArr) != -1) { | |
| showAlert("url_repeated"); | |
| return false; | |
| } | |
| showLoading(); | |
| var urlFltParams = { | |
| goformId: "URL_FILTER_ADD", | |
| addURLFilter: $("#addURLFilter").val() | |
| }; | |
| service.addUrlFilterRule(urlFltParams, target.callback); | |
| } | |
| //删除规则 | |
| function deleteRuleFunc() { | |
| showConfirm('confirm_data_delete', function () { | |
| showLoading(); | |
| var urlFltParams = { | |
| goformId: "URL_FILTER_DELETE", | |
| url_filter_delete_id: target.gridTemplate.selectedIds().join(";") + ";" | |
| }; | |
| service.deleteSelectedRules(urlFltParams, target.callback); | |
| }); | |
| } | |
| } | |
| function clearFunc() { | |
| $("#addURLFilter").val(""); | |
| } | |
| //页面初始化 | |
| function initialize() { | |
| var vm = new UrlFilterSettingVM(); | |
| bindContainer(vm); | |
| } | |
| function bindContainer(vm){ | |
| var container = $('#container'); | |
| ko.cleanNode(container[0]); | |
| ko.applyBindings(vm, container[0]); | |
| $('#urlFilterForm').validate({ | |
| submitHandler: function () { | |
| vm.addRule(); | |
| }, | |
| rules: { | |
| addURLFilter: 'url_filter_check' | |
| } | |
| }); | |
| $("#urlFilterListForm").validate({ | |
| submitHandler: function () { | |
| vm.deleteRule(); | |
| } | |
| }); | |
| } | |
| return { | |
| init: initialize | |
| }; | |
| }); | |
| define("firewall_upnp_set","underscore jquery knockout set service".split(" "), | |
| function (_, $, ko, config, service) { | |
| //system upnp setting VM | |
| function UpnpSettingVM() { | |
| var target = this; | |
| var upnpInfo = getUpnpSetting(); | |
| target.upnpSetting = ko.observable(upnpInfo.upnpSetting); | |
| target.save = saveFunc; | |
| function saveFunc() { | |
| showLoading(); | |
| var upnpParams = {}; | |
| upnpParams.upnpSetting = target.upnpSetting(); | |
| service.setUpnpSetting(upnpParams, function (rlt) { | |
| if (rlt.result == "success") { | |
| successOverlay(); | |
| } else { | |
| errorOverlay(); | |
| } | |
| }); | |
| } | |
| } | |
| //获取upnp 信息 | |
| function getUpnpSetting() { | |
| return service.getUpnpSetting(); | |
| } | |
| //初始化UpnpSettingVM model | |
| function initialize() { | |
| var vm = new UpnpSettingVM(); | |
| bindContainer(vm); | |
| } | |
| function bindContainer(vm) { | |
| var container = $('#container'); | |
| ko.cleanNode(container[0]); | |
| ko.applyBindings(vm, container[0]); | |
| $('#upnpSettingForm').validate({ | |
| submitHandler: function () { | |
| vm.save(); | |
| } | |
| }); | |
| } | |
| return { | |
| init: initialize | |
| }; | |
| }); | |
| //端口映射 | |
| define("firewall_port_map","underscore jquery knockout set service".split(" "), | |
| function (_, $, ko, config, service) { | |
| var protocolModes = _.map(config.MAP_PROTOCOL_MODES, function (ele) { | |
| return new Option(ele.name, ele.value); | |
| }); | |
| var columnsTmpl = [{ | |
| columnType: "checkbox", | |
| rowText: "index", | |
| width: "8%" | |
| }, { | |
| headerTextTrans: "source_port", | |
| rowText: "sourcePort", | |
| width: "20%" | |
| }, { | |
| headerTextTrans: "dest_ip_address", | |
| rowText: "destIpAddress", | |
| width: "20%" | |
| }, { | |
| headerTextTrans: "dest_port", | |
| rowText: "destPort", | |
| width: "20%" | |
| }, { | |
| headerTextTrans: "protocol", | |
| rowText: "protocol", | |
| width: "12%" | |
| }, { | |
| headerTextTrans: "comment", | |
| rowText: "comment", | |
| width: "20%" | |
| } | |
| ]; | |
| //prot_map VM | |
| function PortMapVM() { | |
| var target = this; | |
| var mapInfo = getPortMap(); | |
| target.oriPortMapEnable = ko.observable(mapInfo.portMapEnable); | |
| target.rules = ko.observableArray(mapInfo.portMapRules); | |
| target.portMapEnable = ko.observable(mapInfo.portMapEnable); | |
| target.comment = ko.observable(''); | |
| target.selectedMode = ko.observable('TCP&UDP'); | |
| target.modes = ko.observableArray(protocolModes); | |
| target.destPort = ko.observable(''); | |
| target.destIpAddress = ko.observable(''); | |
| target.sourcePort = ko.observable(''); | |
| target.gridTemplate = new ko.simpleGrid.viewModel({ | |
| data: target.rules(), | |
| idName: "index", | |
| columns: columnsTmpl, | |
| tmplType: 'list', | |
| pageSize: 10 | |
| }); | |
| //设定,新增,删除回调函数 | |
| target.callback = callbackFunc; | |
| //删除规则 | |
| target.deleteMapRules = deleteMapRulesFunc; | |
| //检查新增规则是否已经存在 | |
| target.checkExist = checkExistFunc; | |
| //设定端口映射 | |
| target.enablePortMap = enablePortMapFunc; | |
| //保存规则 | |
| target.save = saveFunc; | |
| //保存规则 | |
| function saveFunc() { | |
| if (target.rules().length >= config.portForwardMax) { | |
| showAlert({ | |
| msg: "rules_max", | |
| params: config.portForwardMax | |
| }); | |
| return; | |
| } | |
| if (target.checkExist()) { | |
| showAlert("rule_exist"); | |
| return; | |
| } | |
| showLoading(); | |
| var mapParams = {}; | |
| mapParams.portMapEnable = target.portMapEnable(); | |
| mapParams.sourcePort = target.sourcePort(); | |
| mapParams.destIpAddress = target.destIpAddress(); | |
| mapParams.destPort = target.destPort(); | |
| mapParams.protocol = target.selectedMode(); | |
| mapParams.comment = target.comment(); | |
| service.setPortMap(mapParams, target.callback); | |
| } | |
| //检查新增规则是否已经存在 | |
| function checkExistFunc() { | |
| var newMapRule = { | |
| sourcePort: target.sourcePort(), | |
| destIpAddress: target.destIpAddress(), | |
| destPort: target.destPort(), | |
| protocol: transProtocolValue(target.selectedMode()) | |
| }; | |
| var oldMapRule; | |
| var mapRules = target.rules(); | |
| for (var idx = 0; idx < mapRules.length; idx++) { | |
| oldMapRule = { | |
| sourcePort: mapRules[idx].sourcePort, | |
| destIpAddress: mapRules[idx].destIpAddress, | |
| destPort: mapRules[idx].destPort, | |
| protocol: mapRules[idx].protocol | |
| }; | |
| if (_.isEqual(newMapRule, oldMapRule)) { | |
| return true; | |
| } | |
| } | |
| return false; | |
| } | |
| //设定端口映射 | |
| function enablePortMapFunc() { | |
| showLoading(); | |
| var mapParams = {}; | |
| mapParams.portMapEnable = target.portMapEnable(); | |
| service.enablePortMap(mapParams, target.callback); | |
| } | |
| //删除规则 | |
| function deleteMapRulesFunc() { | |
| var ids = target.gridTemplate.selectedIds(); | |
| if (ids.length == 0) { | |
| showAlert("no_data_selected"); | |
| return; | |
| } | |
| showConfirm("confirm_data_delete", function () { | |
| showLoading(); | |
| var mapParams = {}; | |
| mapParams.indexs = ids; | |
| service.deleteMapRules(mapParams, target.callback); | |
| }); | |
| } | |
| //设定,新增,删除回调函数 | |
| function callbackFunc(ret) { | |
| if (ret.result == "success") { | |
| clear(); | |
| initialize(target); | |
| successOverlay(); | |
| } else { | |
| errorOverlay(); | |
| } | |
| } | |
| //情况添加规则输入 | |
| function clear() { | |
| target.sourcePort(''); | |
| target.destIpAddress(''); | |
| target.destPort(''); | |
| target.selectedMode('TCP&UDP'); | |
| target.comment(''); | |
| } | |
| } | |
| //获取port map信息 | |
| function getPortMap() { | |
| return service.getPortMap(); | |
| } | |
| function bindingContainer(vm){ | |
| var container = $('#container'); | |
| ko.cleanNode(container[0]); | |
| ko.applyBindings(vm, container[0]); | |
| } | |
| //初始化port map view model | |
| function initialize(viewModel) { | |
| var vm; | |
| if (viewModel) { | |
| vm = viewModel; | |
| var mapInfo = getPortMap(); | |
| vm.portMapEnable(mapInfo.portMapEnable); | |
| vm.oriPortMapEnable(mapInfo.portMapEnable); | |
| vm.rules(mapInfo.portMapRules); | |
| vm.gridTemplate.clearAllChecked(); | |
| vm.gridTemplate.data(mapInfo.portMapRules); | |
| refreshTableHeight(); | |
| renderCheckbox(); | |
| return; | |
| } | |
| vm = new PortMapVM(); | |
| bindingContainer(vm); | |
| fixTableHeight(); | |
| $('#mapBasicForm').validate({ | |
| submitHandler: function () { | |
| vm.enablePortMap(); | |
| } | |
| }); | |
| $('#portMapListForm').validate({ | |
| submitHandler: function () { | |
| vm.deleteMapRules(); | |
| } | |
| }); | |
| $('#portMapForm').validate({ | |
| submitHandler: function () { | |
| vm.save(); | |
| }, | |
| rules: { | |
| txtDestIpAddress: { | |
| ip_check: true | |
| }, | |
| txtSourcePort: { | |
| digits: true, | |
| range_except: [1, 65000] | |
| }, | |
| txtDestPort: { | |
| digits: true, | |
| range_except: [1, 65000] | |
| }, | |
| txtComment: { | |
| comment_check: true | |
| } | |
| }, | |
| errorPlacement: function (error, element) { | |
| if (element.attr("name") == "txtDestIpAddress") { | |
| error.appendTo("#txtDestIpAddressErrorDiv"); | |
| } else if (element.attr("name") == "txtSourcePort") { | |
| error.appendTo("#txtSourcePortErrorDiv"); | |
| } else if (element.attr("name") == "txtDestPort") { | |
| error.appendTo("#txtDestPortErrorDiv"); | |
| } else | |
| error.insertAfter(element); | |
| } | |
| }); | |
| } | |
| return { | |
| init: initialize | |
| }; | |
| }); | |
| //端口转发 | |
| define("firewall_port_forward","underscore jquery knockout set service".split(" "), | |
| function (_, $, ko, config, service) { | |
| var protocolModes = _.map(config.FORWARD_PROTOCOL_MODES, function (ele) { | |
| return new Option(ele.name, ele.value); | |
| }); | |
| //列表模板的columns项 | |
| var columnsTmpl = [{ | |
| columnType: "checkbox", | |
| rowText: "index", | |
| width: "8%" | |
| }, { | |
| headerTextTrans: "ip_address", | |
| rowText: "ipAddress", | |
| width: "23%" | |
| }, { | |
| headerTextTrans: "port_range", | |
| rowText: "portRange", | |
| width: "23%" | |
| }, { | |
| headerTextTrans: "protocol", | |
| rowText: "protocol", | |
| width: "23%" | |
| }, { | |
| headerTextTrans: "comment", | |
| rowText: "comment", | |
| width: "23%" | |
| } | |
| ]; | |
| //prot_forward VM | |
| function PortForwardVM() { | |
| var target = this; | |
| var fwdinfo = getPortForward(); | |
| target.portForwardEnable = ko.observable(fwdinfo.portForwardEnable); | |
| target.oriPortForwardEnable = ko.observable(fwdinfo.portForwardEnable); | |
| target.portEnd = ko.observable(''); | |
| target.portStart = ko.observable(''); | |
| target.ipAddress = ko.observable(''); | |
| target.comment = ko.observable(''); | |
| target.selectedMode = ko.observable('3'); | |
| target.modes = ko.observableArray(protocolModes); | |
| target.rules = ko.observableArray(fwdinfo.portForwardRules); | |
| //设定,新增,删除回调函数 | |
| target.callback = callbackFunc; | |
| //创建列表模板 | |
| target.gridTemplate = new ko.simpleGrid.viewModel({ | |
| data: target.rules(), | |
| idName: "index", | |
| columns: columnsTmpl, | |
| tmplType: 'list', | |
| pageSize: 10 | |
| }); | |
| //检查新增规则是否已经存在 | |
| target.checkExist = checkExistFunc; | |
| //保存规则 | |
| target.save = saveFunc; | |
| //删除规则 | |
| target.deleteForwardRules = deleteForwardRulesFunc; | |
| //设定虚拟服务器 | |
| target.enableVirtualServer = enableVirtualServerFunc; | |
| //设定虚拟服务器 | |
| function enableVirtualServerFunc() { | |
| showLoading(); | |
| var fwdParams = {}; | |
| fwdParams.portForwardEnable = target.portForwardEnable(); | |
| service.enableVirtualServer(fwdParams, target.callback); | |
| } | |
| //删除规则 | |
| function deleteForwardRulesFunc() { | |
| var ids = target.gridTemplate.selectedIds(); | |
| if (ids.length == 0) { | |
| showAlert("no_data_selected"); | |
| return; | |
| } | |
| showConfirm("confirm_data_delete", function () { | |
| showLoading('deleting'); | |
| var fwdParams = {}; | |
| fwdParams.indexs = ids; | |
| service.deleteForwardRules(fwdParams, target.callback); | |
| }); | |
| } | |
| //保存规则 | |
| function saveFunc() { | |
| if (target.rules().length >= config.portForwardMax) { | |
| showAlert({ | |
| msg: "rules_max", | |
| params: config.portForwardMax | |
| }); | |
| return; | |
| } | |
| if (target.checkExist()) { | |
| showAlert("rule_exist"); | |
| return; | |
| } | |
| showLoading(); | |
| var fwdParams = {}; | |
| fwdParams.comment = target.comment(); | |
| fwdParams.protocol = target.selectedMode(); | |
| fwdParams.portEnd = target.portEnd(); | |
| fwdParams.portStart = target.portStart(); | |
| fwdParams.ipAddress = target.ipAddress(); | |
| service.setPortForward(fwdParams, target.callback); | |
| } | |
| //情况添加规则输入 | |
| function clear() { | |
| target.ipAddress(''); | |
| target.portStart(''); | |
| target.portEnd(''); | |
| target.selectedMode('TCP&UDP'); | |
| target.comment(''); | |
| } | |
| //设定,新增,删除回调函数 | |
| function callbackFunc(ret) { | |
| if (ret.result == "success") { | |
| clear(); | |
| initialize(target); | |
| successOverlay(); | |
| } else { | |
| errorOverlay(); | |
| } | |
| } | |
| //检查新增规则是否已经存在 | |
| function checkExistFunc() { | |
| var newRule = { | |
| ipAddress: target.ipAddress(), | |
| portRange: target.portStart() + ' - ' + target.portEnd(), | |
| protocol: transProtocolValue(target.selectedMode()) | |
| }; | |
| var oldRule; | |
| var fwdrules = target.rules(); | |
| for (var ki = 0; ki < fwdrules.length; ki++) { | |
| oldRule = { | |
| ipAddress: fwdrules[ki].ipAddress, | |
| portRange: fwdrules[ki].portRange, | |
| protocol: fwdrules[ki].protocol | |
| }; | |
| if (_.isEqual(newRule, oldRule)) { | |
| return true; | |
| } | |
| } | |
| return false; | |
| } | |
| } | |
| //获取port forward信息 | |
| function getPortForward() { | |
| return service.getPortForward(); | |
| } | |
| //初始化port forward view model | |
| function initialize(viewModel) { | |
| var vm; | |
| if (viewModel) { | |
| vm = viewModel; | |
| var fwdinfo = getPortForward(); | |
| vm.gridTemplate.clearAllChecked(); | |
| vm.gridTemplate.data(fwdinfo.portForwardRules); | |
| vm.rules(fwdinfo.portForwardRules); | |
| vm.portForwardEnable(fwdinfo.portForwardEnable); | |
| vm.oriPortForwardEnable(fwdinfo.portForwardEnable); | |
| refreshTableHeight(); | |
| return; | |
| } | |
| vm = new PortForwardVM(); | |
| bindContainer(vm); | |
| fixTableHeight(); | |
| renderCheckbox(); | |
| $('#virtualServerForm').validate({ | |
| submitHandler: function () { | |
| vm.enableVirtualServer(); | |
| } | |
| }); | |
| $('#portForwardListForm').validate({ | |
| submitHandler: function () { | |
| vm.deleteForwardRules(); | |
| } | |
| }); | |
| $('#portForwardForm').validate({ | |
| submitHandler: function () { | |
| vm.save(); | |
| }, | |
| rules: { | |
| txtIpAddress: { | |
| ip_check: true | |
| }, | |
| txtPortStart: { | |
| digits: true, | |
| range: [1, 65535], | |
| portCompare: "#txtPortEnd" | |
| }, | |
| txtPortEnd: { | |
| digits: true, | |
| range: [1, 65535], | |
| portCompare: "#txtPortStart" | |
| }, | |
| txtComment: { | |
| comment_check: true | |
| } | |
| }, | |
| groups: { | |
| range: "txtPortStart txtPortEnd" | |
| }, | |
| errorPlacement: function (error, element) { | |
| if (element.attr("name") == "txtIpAddress") { | |
| error.appendTo("#ipErrorDiv"); | |
| } else if (element.attr("name") == "txtPortStart" || element.attr("name") == "txtPortEnd") { | |
| error.appendTo("#portRangeErrorDiv"); | |
| } else | |
| error.insertAfter(element); | |
| } | |
| }); | |
| } | |
| function bindContainer(vm){ | |
| var container = $('#container'); | |
| ko.cleanNode(container[0]); | |
| ko.applyBindings(vm, container[0]); | |
| } | |
| return { | |
| init: initialize | |
| }; | |
| }); | |
| define("firewall_port_filter","underscore jquery knockout set service".split(" "), | |
| function (_, $, ko, config, service) { | |
| var PROTOCOLS = { | |
| ICMP: 'ICMP', | |
| NONE: 'None' | |
| }; | |
| var columnsTmpl = [{ | |
| columnType: "checkbox", | |
| rowText: "index", | |
| width: "4%" | |
| }, { | |
| headerTextTrans: "mac_address", | |
| rowText: "macAddress", | |
| width: "12%" | |
| }, { | |
| headerTextTrans: "ip_type", | |
| rowText: "ipType", | |
| width: "5%", | |
| display: config.IPV6_SUPPORT | |
| }, { | |
| headerTextTrans: "source_ip_address", | |
| rowText: "sourceIpAddress", | |
| width: "12%" | |
| }, { | |
| headerTextTrans: "dest_ip_address", | |
| rowText: "destIpAddress", | |
| width: "12%" | |
| }, { | |
| headerTextTrans: "protocol", | |
| rowText: "protocol", | |
| width: "12%", | |
| needTrans: true | |
| }, { | |
| headerTextTrans: "source_port_range", | |
| rowText: "sourcePortRange", | |
| width: "12%" | |
| }, { | |
| headerTextTrans: "dest_port_range", | |
| rowText: "destPortRange", | |
| width: "12%" | |
| }, { | |
| headerTextTrans: "port_filter_action", | |
| rowText: "action", | |
| width: "12%", | |
| needTrans: true | |
| }, { | |
| headerTextTrans: "comment", | |
| rowText: "comment", | |
| width: "12%" | |
| } | |
| ]; | |
| var protocolModes = _.map(config.FILTER_PROTOCOL_MODES, function (elem) { | |
| return new Option(elem.name, elem.value); | |
| }); | |
| //prot_filter VM | |
| function PortFilterVM() { | |
| var target = this; | |
| var info = getPortFilter(); | |
| target.oriDefaultPolicy = ko.observable(info.defaultPolicy); | |
| target.defaultPolicy = ko.observable(info.defaultPolicy); | |
| target.oriPortFilterEnable = ko.observable(info.portFilterEnable); | |
| target.portFilterEnable = ko.observable(info.portFilterEnable); | |
| target.rules = ko.observableArray(info.portFilterRules); | |
| target.ipv6Support = ko.observable(config.IPV6_SUPPORT); | |
| target.comment = ko.observable(''); | |
| target.selectedMode = ko.observable('5'); | |
| target.modes = ko.observableArray(protocolModes); | |
| target.sourcePortEnd = ko.observable(''); | |
| target.sourcePortStart = ko.observable(''); | |
| target.destPortEnd = ko.observable(''); | |
| target.destPortStart = ko.observable(''); | |
| target.destIpv6Address = ko.observable(''); | |
| target.sourceIpv6Address = ko.observable(''); | |
| target.sourceIpAddress = ko.observable(''); | |
| target.destIpAddress = ko.observable(''); | |
| target.macAddress = ko.observable(''); | |
| target.portFilterAction = ko.observable(''); | |
| target.ipType = ko.observable('ipv4'); | |
| //设定,新增,删除回调函数 | |
| target.callback = callbackFunc; | |
| //创建列表模板 | |
| target.gridTemplate = new ko.simpleGrid.viewModel({ | |
| data: target.rules(), | |
| idName: "index", | |
| columns: columnsTmpl, | |
| tmplType: 'list', | |
| pageSize: 20 | |
| }); | |
| //default policy change handler | |
| target.policyChangeHandler = policyChangeHandlerFunc; | |
| //保存规则 | |
| target.save = saveFunc; | |
| //设定过滤基本信息 | |
| target.setPortFilterBasic = setPortFilterBasicFunc; | |
| //清空添加规则输入 | |
| target.clear = clearFunc; | |
| //检查新增规则是否已经存在 | |
| target.checkExist = checkExistFunc; | |
| //ip类型变化事件监听 | |
| target.ipTypeChangeHandler = ipTypeChangeHandlerFunc; | |
| //协议变化事件监听 | |
| target.protocolChangeHandler = protocolChangeHandlerFunc; | |
| //删除规则 | |
| target.deleteFilterRules = deleteFilterRulesFunc; | |
| //init to call | |
| target.policyChangeHandler(); | |
| //设定,新增,删除回调函数 | |
| function callbackFunc(ret) { | |
| if (ret.result != "success") { | |
| errorOverlay(); | |
| } else { | |
| target.clear(); | |
| initialize(target); | |
| successOverlay(); | |
| } | |
| } | |
| //default policy change handler | |
| function policyChangeHandlerFunc() { | |
| var action = target.defaultPolicy() != "1" ? "Drop" : "Accept"; | |
| target.portFilterAction(action); | |
| return true; | |
| } | |
| //保存规则 | |
| function saveFunc() { | |
| target.sourceIpAddress(target.sourceIpAddress().replace(/\s+/g, '')); | |
| target.destIpAddress(target.destIpAddress().replace(/\s+/g, '')); | |
| target.sourceIpv6Address(target.sourceIpv6Address().replace(/\s+/g, '')); | |
| target.destIpv6Address(target.destIpv6Address().replace(/\s+/g, '')); | |
| target.macAddress(target.macAddress().replace(/\s+/g, '')); | |
| if (target.ipv6Support() == false) { | |
| if (target.rules().length >= config.portForwardMax) { | |
| showAlert({ | |
| msg: "rules_max", | |
| params: config.portForwardMax | |
| }); | |
| return; | |
| } | |
| if (target.checkExist()) { | |
| showAlert("rule_exist"); | |
| return; | |
| } | |
| } else { | |
| var type = target.ipType() == "ipv4" ? "IPv4" : "IPv6"; | |
| var oldRules = _.filter(target.rules(), function (item) { | |
| return item.ipType == type; | |
| }); | |
| if (oldRules.length >= config.portForwardMax) { | |
| showAlert({ | |
| msg: "rules_max_v4v6", | |
| params: [type, config.portForwardMax] | |
| }); | |
| return; | |
| } | |
| if (target.checkExist()) { | |
| showAlert({ | |
| msg: "rule_exist_v4v6", | |
| params: type | |
| }); | |
| return; | |
| } | |
| } | |
| showConfirm("confirm_data_effect", function () { | |
| showLoading(); | |
| var fltParams = {}; | |
| fltParams.macAddress = target.macAddress(); | |
| if (target.ipv6Support() && target.ipType() != 'ipv6') { | |
| fltParams.destIpAddress = target.destIpAddress(); | |
| fltParams.sourceIpAddress = target.sourceIpAddress(); | |
| } else { | |
| fltParams.destIpAddress = target.destIpv6Address(); | |
| fltParams.sourceIpAddress = target.sourceIpv6Address(); | |
| } | |
| fltParams.ipType = target.ipType(); | |
| fltParams.comment = target.comment(); | |
| fltParams.protocol = target.selectedMode(); | |
| fltParams.action = target.portFilterAction(); | |
| fltParams.sourcePortEnd = target.sourcePortEnd(); | |
| fltParams.sourcePortStart = target.sourcePortStart(); | |
| fltParams.destPortEnd = target.destPortEnd(); | |
| fltParams.destPortStart = target.destPortStart(); | |
| service.setPortFilter(fltParams, target.callback); | |
| }); | |
| } | |
| //设定过滤基本信息 | |
| function setPortFilterBasicFunc() { | |
| showLoading(); | |
| var elems = {}; | |
| elems.defaultPolicy = target.defaultPolicy(); | |
| elems.portFilterEnable = target.portFilterEnable(); | |
| service.setPortFilterBasic(elems, target.callback); | |
| } | |
| //清空添加规则输入 | |
| function clearFunc() { | |
| target.comment(''); | |
| target.selectedMode('None'); | |
| target.sourcePortEnd('0'); | |
| target.sourcePortStart('0'); | |
| target.destPortEnd('0'); | |
| target.destPortStart('0'); | |
| target.sourceIpv6Address(''); | |
| target.sourceIpAddress(''); | |
| target.destIpv6Address(''); | |
| target.destIpAddress(''); | |
| target.macAddress(''); | |
| clearValidateMsg(); | |
| } | |
| //检查新增规则是否已经存在 | |
| function checkExistFunc() { | |
| target.macAddress(target.macAddress().toUpperCase()); | |
| var currIpType = target.ipType().toUpperCase(); | |
| var newRule = { | |
| macAddress: target.macAddress(), | |
| destIpAddress: currIpType == "IPV4" ? target.destIpAddress() : target.destIpv6Address(), | |
| sourceIpAddress: currIpType == "IPV4" ? target.sourceIpAddress() : target.sourceIpv6Address(), | |
| destPortRange: target.destPortStart() == '0' ? '' : target.destPortStart() + ' - ' + target.destPortEnd(), | |
| sourcePortRange: target.sourcePortStart() == '0' ? '' : target.sourcePortStart() + ' - ' + target.sourcePortEnd(), | |
| action: target.portFilterAction() == "Drop" ? "filter_drop" : "filter_accept", | |
| protocol: transProtocolValue(target.selectedMode()), | |
| ipType: currIpType | |
| }; | |
| var oldRule; | |
| var rules = target.rules(); | |
| for (var ki = 0; ki < rules.length; ki++) { | |
| oldRule = { | |
| macAddress: rules[ki].macAddress, | |
| destIpAddress: rules[ki].destIpAddress, | |
| sourceIpAddress: rules[ki].sourceIpAddress, | |
| destPortRange: rules[ki].destPortRange, | |
| sourcePortRange: rules[ki].sourcePortRange, | |
| action: rules[ki].action, | |
| protocol: rules[ki].protocol, | |
| ipType: rules[ki].ipType.toUpperCase() | |
| }; | |
| if (_.isEqual(newRule, oldRule)) { | |
| return true; | |
| } | |
| } | |
| return false; | |
| } | |
| //协议变化事件监听 | |
| function protocolChangeHandlerFunc() { | |
| if (target.selectedMode() == PROTOCOLS.ICMP || target.selectedMode() == PROTOCOLS.NONE) { | |
| target.sourcePortEnd('0'); | |
| target.sourcePortStart('0'); | |
| target.destPortEnd('0'); | |
| target.destPortStart('0'); | |
| clearValidateMsg('#portRangeArea'); | |
| } else { | |
| target.sourcePortEnd('65535'); | |
| target.sourcePortStart('1'); | |
| target.destPortEnd('65535'); | |
| target.destPortStart('1'); | |
| } | |
| return true; | |
| } | |
| //删除规则 | |
| function deleteFilterRulesFunc() { | |
| var ids = target.gridTemplate.selectedIds(); | |
| if (ids.length == 0) { | |
| showAlert("no_data_selected"); | |
| return; | |
| } | |
| showConfirm("confirm_data_effect", function () { | |
| showLoading('deleting'); | |
| var rules = {}; | |
| rules.indexs = ids; | |
| service.deleteFilterRules(rules, target.callback); | |
| }); | |
| } | |
| } | |
| //获取port filter信息 | |
| function getPortFilter() { | |
| return service.getPortFilter(); | |
| } | |
| //ip类型变化事件监听 | |
| function ipTypeChangeHandlerFunc() { | |
| clearValidateMsg(); | |
| return true; | |
| } | |
| //初始化port filter view model | |
| function initialize(viewModel) { | |
| var vm; | |
| if (viewModel) { | |
| vm = viewModel; | |
| var fltinfo = getPortFilter(); | |
| vm.gridTemplate.clearAllChecked(); | |
| vm.gridTemplate.data(fltinfo.portFilterRules); | |
| vm.defaultPolicy(fltinfo.defaultPolicy); | |
| vm.oriDefaultPolicy(fltinfo.defaultPolicy); | |
| vm.portFilterEnable(fltinfo.portFilterEnable); | |
| vm.oriPortFilterEnable(fltinfo.portFilterEnable); | |
| vm.rules(fltinfo.portFilterRules); | |
| refreshTableHeight(); | |
| $('#portFilters').find('tbody').translate(); | |
| renderCheckbox(); | |
| $('.notes-content').translate(); | |
| return; | |
| } | |
| vm = new PortFilterVM(); | |
| var container = $('#container'); | |
| ko.cleanNode(container[0]); | |
| ko.applyBindings(vm, container[0]); | |
| fixTableHeight(); | |
| $('#filterBasicForm').validate({ | |
| submitHandler: function () { | |
| showConfirm("confirm_data_effect", function () { | |
| vm.setPortFilterBasic(); | |
| }); | |
| } | |
| }); | |
| $('#portFilterListForm').validate({ | |
| submitHandler: function () { | |
| vm.deleteFilterRules(); | |
| } | |
| }); | |
| $('#portFilterForm').validate({ | |
| submitHandler: function () { | |
| vm.save(); | |
| }, | |
| rules: { | |
| txtMacAddress: { | |
| filter_optional: true, | |
| mac_check: true | |
| }, | |
| txtDestIpAddress: { | |
| ip_check: true | |
| }, | |
| txtSourceIpAddress: { | |
| ip_check: true | |
| }, | |
| txtSourceIpv6Address: { | |
| ipv6: true | |
| }, | |
| txtDestIpv6Address: { | |
| ipv6: true | |
| }, | |
| txtDestPortStart: { | |
| digits: true, | |
| range: [1, 65535], | |
| portCompare: "#txtDestPortEnd" | |
| }, | |
| txtDestPortEnd: { | |
| digits: true, | |
| range: [1, 65535], | |
| portCompare: "#txtDestPortStart" | |
| }, | |
| txtSourcePortStart: { | |
| digits: true, | |
| range: [1, 65535], | |
| portCompare: "#txtSourcePortEnd" | |
| }, | |
| txtSourcePortEnd: { | |
| digits: true, | |
| range: [1, 65535], | |
| portCompare: "#txtSourcePortStart" | |
| }, | |
| txtComment: { | |
| comment_check: true | |
| } | |
| }, | |
| groups: { | |
| destPort: "txtDestPortStart txtDestPortEnd", | |
| sourcePort: "txtSourcePortStart txtSourcePortEnd" | |
| }, | |
| errorPlacement: function (error, element) { | |
| if (element.attr("name") == "txtMacAddress") { | |
| error.appendTo("#macErrorDiv"); | |
| } else if (element.attr("name") == "txtDestPortStart" || element.attr("name") == "txtDestPortEnd") { | |
| error.appendTo("#destPortErrorDiv"); | |
| } else if (element.attr("name") == "txtSourcePortStart" || element.attr("name") == "txtSourcePortEnd") { | |
| error.appendTo("#sourcePortErrorDiv"); | |
| } else | |
| error.insertAfter(element); | |
| } | |
| }); | |
| } | |
| $.validator.addMethod("filter_optional", function (value, element, param) { | |
| var result = _.any(['#txtMacAddress', '#txtDestIpAddress', '#txtSourceIpAddress', '#txtSourceIpv6Address', '#txtDestIpv6Address'], | |
| function (item) { | |
| var tmp = $(item).val().replace(/\s+/g, ''); | |
| return $(item + ':visible').length > 0 && tmp != ''; | |
| }); | |
| var portResult = _.any(['#txtDestPortStart', '#txtDestPortEnd', '#txtSourcePortStart', '#txtSourcePortEnd'], | |
| function (item) { | |
| return $(item).val() != '0'; | |
| }); | |
| return result || portResult; | |
| }); | |
| return { | |
| init: initialize | |
| }; | |
| }); | |
| //家长控制 | |
| define("firewall_parental_control","underscore jquery knockout set service".split(" "), | |
| function (_, $, ko, config, service) { | |
| var maxItem = 10; | |
| var pcVm = null; | |
| var PAGES = { | |
| MAIN: 0, | |
| MANAGE: 1, | |
| RULE: 2 | |
| }; | |
| function ParentalControlVM() { | |
| var target = this; | |
| var hostNameList = service.getHostNameList({}).devices; | |
| target.currentPage = ko.observable(PAGES.MAIN); | |
| target.pages = PAGES; | |
| target.childGroupList = ko.observable([]); | |
| target.childGroupMac = ko.computed(function () { | |
| return _.map(target.childGroupList(), function (data) { | |
| return data.mac; | |
| }); | |
| }); | |
| target.currentUserInChildGroup = ko.observable(true); | |
| //获取儿童组设备列表 | |
| target.fetchChildGroupList = fetchChildGroupListFunc; | |
| target.fetchChildGroupList(); | |
| target.manageHandler = manageHandlerFunc; | |
| function manageHandlerFunc() { | |
| target.currentPage(PAGES.MANAGE); | |
| target.fetchAttachedDevices(); | |
| } | |
| target.attachedDevices = ko.observable([]); | |
| //获取已连接设备列表 | |
| target.fetchAttachedDevices = fetchAttachedDevicesFunc; | |
| //儿童组设备 标签按钮事件 | |
| target.backToMainHandler = backToMainHandlerFunc; | |
| ko.computed(function () { | |
| target.attachedDevices(); | |
| target.childGroupList(); | |
| $("#pc_children_group_form").translate(); | |
| }).extend({ | |
| notify: 'always', | |
| throttle: 300 | |
| }); | |
| //添加至儿童组 | |
| function addChildGroupFun(flag, eleData) { | |
| showLoading(); | |
| service.addChildGroup(eleData, function (data) { | |
| target.fetchChildGroupList(function () { | |
| target.fetchAttachedDevices(function () { | |
| hideLoading(); | |
| if (flag) { | |
| service.logout({}, function () { | |
| window.location = 'index.html'; | |
| }); | |
| } | |
| }); | |
| }); | |
| }, function (data) { | |
| errorOverlay(); | |
| }); | |
| } | |
| //移除按钮事件 | |
| target.removeChildGroupHandler = removeChildGroupHandlerFunc; | |
| //添加按钮事件 | |
| target.addChildGroupHandler = addChildGroupHandlerFunc; | |
| target.dealElement = dealElementFunc; | |
| //取消编辑主机名按钮事件 | |
| target.cancelEditHostNameHandler = cancelEditHostNameHandlerFunc; | |
| //主机名编辑保存按钮事件 | |
| target.saveHostNameHandler = saveHostNameHandlerFunc; | |
| //主机名编辑按钮事件 | |
| target.editHostNameHandler = editHostNameHandlerFunc; | |
| target.selectedIds = ko.observableArray([]); | |
| target.siteList = ko.observable([]); | |
| ///////////////////////////////////////////////////////////////// | |
| target.disableAdd = ko.computed(function () { | |
| return target.siteList().length == maxItem; | |
| }); | |
| ko.computed(function () { | |
| target.siteList(); | |
| target.selectedIds(); | |
| setTimeout(function () { | |
| renderCheckbox(); | |
| }, 100); | |
| $("#pc_site_white_list_form").translate(); | |
| }); | |
| //网站白名单添加按钮事件 | |
| target.openAddSitePopoverHandler = openAddSitePopoverHandlerFunc; | |
| //网站白名单列表选择框点击事件 | |
| target.checkboxClickHandler = checkboxClickHandlerFunc; | |
| //获取网站白名单列表 | |
| target.fetchSiteWhiteList = fetchSiteWhiteListFunc; | |
| //网站白名单删除函数 | |
| function removeSiteWhiteItem(ids) { | |
| showConfirm('confirm_data_delete', function () { | |
| showLoading(); | |
| service.removeSiteWhite({ | |
| ids: ids | |
| }, function (data) { | |
| target.fetchSiteWhiteList(function () { | |
| successOverlay(); | |
| }); | |
| }, function (data) { | |
| target.fetchSiteWhiteList(function () { | |
| errorOverlay(); | |
| }); | |
| }); | |
| }); | |
| } | |
| //网站白名单删除所有按钮事件 | |
| target.removeAllWhiteSite = removeAllWhiteSiteFunc; | |
| //网站白名单删除按钮事件 | |
| target.removeSelectedWhiteSite = removeSelectedWhiteSiteFunc; | |
| //网站白名单移除按钮事件 | |
| target.removeWhiteSite = removeWhiteSiteFunc; | |
| //网站白名单添加框保存按钮事件 | |
| target.saveSiteWhite = saveSiteWhiteFunc; | |
| ////////////////////////////////////////////////////////////////// | |
| target.notSave = ko.observable(false); | |
| //获取时间限制信息 | |
| target.fetchTimeLimited = fetchTimeLimitedFunc; | |
| //上网时间设置时间表格事件绑定 | |
| target.bindEvent = bindEventFunc; | |
| //上网时间设置保存按钮事件 | |
| target.saveTimeLimitedHandler = saveTimeLimitedHandlerFunc; | |
| ////////////////////////////////////////////////////////////////// | |
| var isBinded = false; | |
| //上网规则标签点击事件 | |
| target.openRulePage = openRulePageFunc; | |
| function openRulePageFunc() { | |
| if (target.currentPage() == PAGES.RULE) { | |
| return; | |
| } | |
| target.currentPage(PAGES.RULE); | |
| target.currentUserInChildGroup(service.checkCurrentUserInChildGroup().result); | |
| initTableData(); | |
| if (!isBinded) { | |
| if (!target.currentUserInChildGroup()) { | |
| target.bindEvent(); | |
| } | |
| isBinded = true; | |
| } | |
| showLoading(); | |
| target.fetchTimeLimited(); | |
| target.fetchSiteWhiteList(function () { | |
| hideLoading(); | |
| }); | |
| } | |
| //获取儿童组设备列表 | |
| function fetchChildGroupListFunc(cb) { | |
| service.childGroupList({}, function (data) { | |
| target.currentUserInChildGroup(service.checkCurrentUserInChildGroup(data.devices).result); | |
| target.childGroupList([]); | |
| _.map(data.devices, function (elem, idx) { | |
| elem.idx = idx; | |
| elem.hostname = pcUtil.getHostName(elem.hostname, elem.mac, hostNameList); | |
| }); | |
| target.childGroupList(data.devices); | |
| if (_.isFunction(cb)) { | |
| cb.apply(this); | |
| } | |
| }); | |
| } | |
| //获取已连接设备列表 | |
| function fetchAttachedDevicesFunc(cb) { | |
| target.attachedDevices([]); | |
| var counter = 0; | |
| var currDevices = []; | |
| //RJ45 已连接设备 | |
| service.getAttachedCableDevices({}, function (data) { | |
| counter++; | |
| var devs = _.map(data.attachedDevices, function (elem) { | |
| elem.idx = _.uniqueId('wireless_'); | |
| elem.hostName = pcUtil.getHostName(elem.hostName, elem.macAddress, hostNameList); | |
| elem.inChildGroup = _.contains(target.childGroupMac(), elem.macAddress); | |
| return elem; | |
| }); | |
| if (counter != 1) { | |
| target.attachedDevices(_.flatten([currDevices, devs])); | |
| if (_.isFunction(cb)) { | |
| cb.apply(this); | |
| } | |
| } else { | |
| currDevices = devs; | |
| } | |
| }); | |
| //wifi 已连接设备 | |
| service.getCurrentlyAttachedDevicesInfo({}, function (data) { | |
| counter++; | |
| var devs = _.map(data.attachedDevices, function (elem) { | |
| elem.idx = _.uniqueId('wireless_'); | |
| elem.hostName = pcUtil.getHostName(elem.hostName, elem.macAddress, hostNameList); | |
| elem.inChildGroup = _.contains(target.childGroupMac(), elem.macAddress); | |
| return elem; | |
| }); | |
| if (counter != 1) { | |
| target.attachedDevices(_.flatten([currDevices, devs])); | |
| if (_.isFunction(cb)) { | |
| cb.apply(this); | |
| } | |
| } else { | |
| currDevices = devs; | |
| } | |
| }); | |
| } | |
| //儿童组设备 标签按钮事件 | |
| function backToMainHandlerFunc() { | |
| target.currentPage(PAGES.MAIN); | |
| } | |
| //移除按钮事件 | |
| function removeChildGroupHandlerFunc(ele) { | |
| showLoading(); | |
| service.removeChildGroup(ele, function (data) { | |
| target.fetchChildGroupList(function () { | |
| target.fetchAttachedDevices(function () { | |
| hideLoading(); | |
| }); | |
| }); | |
| }, function (data) { | |
| errorOverlay(); | |
| }); | |
| } | |
| //添加按钮事件 | |
| function addChildGroupHandlerFunc(data) { | |
| var uMacAddr = service.getCurretnMAC(); | |
| if (uMacAddr != data.macAddress) { | |
| addChildGroupFun(false, data); | |
| } else { | |
| showConfirm("parental_add_self", function () { | |
| addChildGroupFun(true, data); | |
| }) | |
| } | |
| } | |
| //取消编辑主机名按钮事件 | |
| function cancelEditHostNameHandlerFunc(eleData) { | |
| target.dealElement(false, eleData.idx); | |
| } | |
| //主机名编辑保存按钮事件 | |
| function saveHostNameHandlerFunc(ele) { | |
| var $hostInput = $("#hostname_input_" + ele.idx); | |
| var hostname = $.trim($hostInput.val()); | |
| if (hostname.indexOf(" ") == 0 || hostname.lastIndexOf(" ") == (hostname.length - 1) || /[\*\+\$\[&:,;<>'"\\`\]¥]{1,32}/.test(hostname)) { | |
| showAlert('modify_hostname_invalid'); | |
| return false; | |
| }else if (hostname == '') { | |
| $(".promptErrorLabel", "#confirm-message-container").text($.i18n.prop("required")); | |
| var $closestTD = $hostInput.closest('td').addClass('has-error'); | |
| addTimeout(function () { | |
| $closestTD.removeClass('has-error'); | |
| }, 5000); | |
| showAlert('required'); | |
| return false; | |
| } | |
| showLoading(); | |
| ele.hostname = hostname; | |
| service.editHostName(ele, function () { | |
| service.getHostNameList({}, function (hostNameData) { | |
| hostNameList = hostNameData.devices; | |
| target.fetchChildGroupList(function () { | |
| hideLoading(); | |
| }); | |
| target.fetchAttachedDevices(); | |
| }); | |
| }, function () { | |
| errorOverlay(); | |
| }); | |
| } | |
| //主机名编辑按钮事件 | |
| function editHostNameHandlerFunc(ele) { | |
| $("#hostname_input_" + ele.idx).val(ele.hostname); | |
| target.dealElement(true, ele.idx); | |
| return false; | |
| } | |
| //网站白名单添加按钮事件 | |
| function openAddSitePopoverHandlerFunc() { | |
| var addNewSiteTmpl = $("#addNewSiteTmpl").html(); | |
| popover.open({ | |
| target: $("#openAddSiteBtn"), | |
| html: addNewSiteTmpl, | |
| width: "300px", | |
| validation: addValidation | |
| }); | |
| } | |
| //网站白名单列表选择框点击事件 | |
| function checkboxClickHandlerFunc(eleData, evt) { | |
| addTimeout(function () { | |
| target.selectedIds(getSelectedValues()); | |
| }, 100); | |
| } | |
| //获取网站白名单列表 | |
| function fetchSiteWhiteListFunc(cb) { | |
| service.getSiteWhiteList({}, function (eledata) { | |
| target.selectedIds([]); | |
| target.siteList(eledata.siteList); | |
| _.isFunction(cb) && cb.apply(this); | |
| }, function () { | |
| target.siteList([]); | |
| _.isFunction(cb) && cb.apply(this); | |
| }); | |
| } | |
| //网站白名单删除所有按钮事件 | |
| function removeAllWhiteSiteFunc() { | |
| removeSiteWhiteItem(getAllCheckboxValues()); | |
| } | |
| //网站白名单删除按钮事件 | |
| function removeSelectedWhiteSiteFunc() { | |
| removeSiteWhiteItem(getSelectedValues()); | |
| } | |
| //网站白名单移除按钮事件 | |
| function removeWhiteSiteFunc(ele, evt) { | |
| removeSiteWhiteItem([ele.id]); | |
| } | |
| //网站白名单添加框保存按钮事件 | |
| function saveSiteWhiteFunc(name, site) { | |
| popover.hide(); | |
| var matched = _.find(target.siteList(), function (one) { | |
| return one.site == site; | |
| }); | |
| if (matched) { | |
| showAlert("pc_link_exist", function () { | |
| setTimeout(function () { | |
| popover.show(); | |
| }, 200); | |
| }); | |
| return false; | |
| } | |
| showLoading(); | |
| service.saveSiteWhite({ | |
| name: name, | |
| site: site | |
| }, function () { | |
| target.fetchSiteWhiteList(function () { | |
| popover.close(); | |
| successOverlay(); | |
| }); | |
| }, function () { | |
| target.fetchSiteWhiteList(function () { | |
| errorOverlay(); | |
| popover.show(); | |
| }); | |
| }); | |
| } | |
| //上网时间设置时间表格事件绑定 | |
| function bindEventFunc() { | |
| $("td:not('.col-head')", "#pc_time_limited_tbody").addClass('cursorhand').die().click(function () { | |
| target.notSave(true); | |
| $(this).toggleClass('active'); | |
| }).hover(function () { | |
| var $this = $(this); | |
| var w = $this.data('week'); | |
| var h = $this.data('hour'); | |
| $("tr:nth-child(" + (w + 1) + ") td:first-child", "#pc_time_limited_tbody").addClass('time_td_hover'); | |
| $("#col_" + h).addClass('time_td_hover'); | |
| if ($this.not('.active')) { | |
| $this.addClass('time_td_hover'); | |
| } | |
| }, function () { | |
| var $this = $(this); | |
| var w = $this.data('week'); | |
| var h = $this.data('hour'); | |
| $("tr:nth-child(" + (w + 1) + ") td:first-child", "#pc_time_limited_tbody").removeClass('time_td_hover'); | |
| $("#col_" + h).removeClass('time_td_hover'); | |
| $this.removeClass('time_td_hover'); | |
| }); | |
| } | |
| //上网时间设置保存按钮事件 | |
| function saveTimeLimitedHandlerFunc() { | |
| showLoading(); | |
| var tds = getSelectedTds(); | |
| var timeStr = getSavedData(tds); | |
| service.saveTimeLimited({ | |
| time: timeStr | |
| }, function () { | |
| target.notSave(false); | |
| successOverlay(); | |
| }, function () { | |
| errorOverlay(); | |
| }); | |
| } | |
| } | |
| function dealElementFunc(flag, idx) { | |
| if (flag == false) { | |
| $("#edit_btn_" + idx + ",#hostname_txt_" + idx).show(); | |
| $("#save_btn_" + idx + ",#cancel_btn_" + idx + ",#hostname_input_" + idx).hide(); | |
| } else { | |
| $("#edit_btn_" + idx + ",#hostname_txt_" + idx).hide(); | |
| $("#save_btn_" + idx + ",#cancel_btn_" + idx + ",#hostname_input_" + idx).show(); | |
| } | |
| } | |
| //获取时间限制信息 | |
| function fetchTimeLimitedFunc() { | |
| service.getTimeLimited({}, function (ele) { | |
| for (var ki in ele) { | |
| for (var idx = 0; idx < ele[ki].length; idx++) { | |
| var id = 'td_' + ki + '_' + ele[ki][idx]; | |
| $("#" + id).addClass('active'); | |
| } | |
| } | |
| }, function () {}); | |
| } | |
| var pcUtil = { | |
| getHostName: function (hostName, mac, hostNameList) { | |
| var ele = _.find(hostNameList, function (ele) { | |
| return ele.mac == mac; | |
| }); | |
| return ele ? ele.hostname : hostName; | |
| } | |
| }; | |
| function getCheckboxValues(flag) { | |
| var selectedValues = []; | |
| $(":checkbox" + (flag ? ":checked" : ""), "#pb_white_list").each(function (i, n) { | |
| selectedValues.push(n.value) | |
| }); | |
| return selectedValues; | |
| } | |
| //获取列表中被选中项的value值 | |
| function getSelectedValues() { | |
| return getCheckboxValues(true); | |
| } | |
| function getAllCheckboxValues() { | |
| return getCheckboxValues(false); | |
| } | |
| //增加网站白名单表单提交函数绑定和校验规则设置 | |
| function addValidation() { | |
| $('#whiteSiteAddForm').validate({ | |
| submitHandler: function () { | |
| var name = $("#siteName").val(); | |
| var site = $("#siteLink").val(); | |
| pcVm.saveSiteWhite(name, site); | |
| }, | |
| rules: { | |
| siteName: 'siteName_check', | |
| siteLink: 'siteLink_check' | |
| } | |
| }); | |
| } | |
| function getSavedData(timeDatas) { | |
| var ret = ''; | |
| for (var ki in timeDatas) { | |
| var hours = _.sortBy(timeDatas[ki], function (n) { | |
| return n; | |
| }); | |
| if (timeDatas[ki].length) { | |
| ret += ki + '+'; | |
| ret += hours.join(','); | |
| ret += ';' | |
| } | |
| } | |
| return ret.substring(0, ret.length - 1); | |
| } | |
| //获取时间表格选中的时间 | |
| function getSelectedTds() { | |
| var defaultValue = { | |
| '0': [], | |
| '1': [], | |
| '2': [], | |
| '3': [], | |
| '4': [], | |
| '5': [], | |
| '6': [] | |
| }; | |
| $("td.active", "#pc_time_limited_tbody").each(function (i, n) { | |
| var $this = $(n); | |
| var week = $this.data('week'); | |
| var hour = $this.data('hour'); | |
| defaultValue[week].push(hour); | |
| }); | |
| return defaultValue; | |
| } | |
| function convertHour(hour) { | |
| if (hour <= 16) { | |
| return hour + 7; | |
| } else { | |
| return hour - 17; | |
| } | |
| } | |
| //初始化时间表格 | |
| function initTableData() { | |
| $("tr", "#pc_time_limited_tbody").each(function (idx, n) { | |
| var $tr = $(n); | |
| $("td:not(:first)", $tr).each(function (j, m) { | |
| var $td = $(m); | |
| var hour = convertHour(j); | |
| $td.attr({ | |
| id: 'td_' + idx + '_' + hour | |
| }).data({ | |
| week: idx, | |
| hour: hour | |
| }); | |
| }); | |
| }); | |
| $("td.active", "#pc_time_limited_tbody").removeClass("active"); | |
| $("thead td:not(:first)", "#pc_time_limited_form").each(function (idx, n) { | |
| var hour = convertHour(idx); | |
| $(n).attr({ | |
| id: 'col_' + hour | |
| }); | |
| }); | |
| pcVm.notSave(false); | |
| } | |
| //页面初始化 | |
| function initialize() { | |
| pcVm = new ParentalControlVM(); | |
| bindContainer(pcVm); | |
| } | |
| function bindContainer(pcVm) | |
| { | |
| var container = $('#container'); | |
| ko.cleanNode(container[0]); | |
| ko.applyBindings(pcVm, container[0]); | |
| } | |
| return { | |
| init: initialize | |
| }; | |
| }); | |
| define("firewall_dmz_set","underscore jquery knockout set service".split(" "), | |
| function ( _, $, ko, config, service) { | |
| //system dmz setting VM | |
| function DmzSettingVM() { | |
| var target = this; | |
| var dmzInfo = getDmzSetting(); | |
| target.dmzSetting = ko.observable(dmzInfo.dmzSetting); | |
| target.ipAddress = ko.observable(dmzInfo.ipAddress); | |
| target.isDataCard = config.PRODUCT_TYPE == 'DATACARD'; | |
| target.clear = clearFunc; | |
| //应用按钮事件 | |
| target.save = saveFunc; | |
| function saveFunc() { | |
| showLoading(); | |
| var params = {}; | |
| params.dmzSetting = target.dmzSetting(); | |
| params.ipAddress = target.ipAddress(); | |
| service.setDmzSetting(params, function (result) { | |
| if (result.result != "success") { | |
| errorOverlay(); | |
| } else { | |
| target.clear(); | |
| successOverlay(); | |
| } | |
| }); | |
| } | |
| } | |
| function clearFunc() { | |
| initialize(); | |
| } | |
| //获取dmz 信息 | |
| function getDmzSetting() { | |
| return service.getDmzSetting(); | |
| } | |
| //初始化DmzSettingVM model | |
| function initialize() { | |
| var dmzVm = new DmzSettingVM(); | |
| bindContainer(dmzVm); | |
| } | |
| function bindContainer(dmzVm){ | |
| var container = $('#container'); | |
| ko.cleanNode(container[0]); | |
| ko.applyBindings(dmzVm, container[0]); | |
| $('#dmzSettingForm').validate({ | |
| submitHandler: function () { | |
| dmzVm.save(); | |
| }, | |
| rules: { | |
| txtIpAddress: 'dmz_ip_check' | |
| } | |
| }); | |
| } | |
| return { | |
| init: initialize | |
| }; | |
| }); | |
| define("firewall","underscore jquery knockout set service".split(" "), | |
| function(_, $, ko, config, service) { | |
| function FirewallVM() { | |
| var target = this; | |
| target.hasDdns = config.DDNS_SUPPORT; | |
| target.hasUpdateCheck = config.HAS_UPDATE_CHECK; | |
| target.hasUrlFilter = config.HAS_URL; | |
| target.hasUssd = config.HAS_USSD; | |
| target.hasUpnp = config.HAS_UPNP; | |
| } | |
| function initialize() { | |
| var fwVm = new FirewallVM(); | |
| bindingContainer(fwVm); | |
| } | |
| function bindingContainer(fwVm) | |
| { | |
| var container = $('#container'); | |
| ko.cleanNode(container[0]); | |
| ko.applyBindings(fwVm, container[0]); | |
| } | |
| return { | |
| init : initialize | |
| }; | |
| }); | |
| define("ddns","underscore jquery knockout set service".split(" "), function (_, $, ko, config, service) { | |
| var ddnsSetModes = _.map(config.DDNSSetMode, newOption); | |
| var ddnsProviderList = _.map(config.DDNSDDP, newOption); | |
| var ddns_mode_select = _.map(config.ddns_Modeselect, newOption); | |
| function newOption(optItem) { | |
| return new Option(optItem.name, optItem.value); | |
| } | |
| function DdnsViewModel() { | |
| var target = this; | |
| target.hasUssd = config.HAS_USSD; | |
| target.hasUpdateCheck = config.HAS_UPDATE_CHECK; | |
| var data = service.getDdnsParams(); | |
| target.ddnsSetModes = ko.observableArray(ddnsSetModes); | |
| target.ddnsProviderList = ko.observableArray(ddnsProviderList); | |
| target.ddns_mode_select = ko.observableArray(ddns_mode_select); | |
| target.currentMode = ko.observable(data.DDNS_Enable); | |
| target.currentModeselect = ko.observable(data.DDNS_Mode); | |
| target.currentProviderList = ko.observable("dyndns.org"); | |
| $.each(config.DDNSDDP, function (i, n) { | |
| if (data.DDNSProvider == n.value) { | |
| target.currentProviderList(data.DDNSProvider); | |
| } | |
| }); | |
| target.DDNSaccount = ko.observable(data.DDNSAccount); | |
| target.DDNSpasswd = ko.observable(data.DDNSPassword); | |
| target.DDNSname = ko.observable(data.DDNS); | |
| target.DDNS_HashValue = ko.observable(data.DDNS_Hash_Value); | |
| target.isddnsStatusTrans = ko.observable(); | |
| target.isEnableSet = ko.observable(); | |
| target.isHashValue = ko.observable(); | |
| target.isddnsaccount = ko.observable(); | |
| target.isddnspasswd = ko.observable(); | |
| target.isDDNSStatus = ko.observable(); | |
| target.isddnsdomainName = ko.observable(); | |
| target.isNone = ko.observable(); | |
| target.onStates = ko.observable(); | |
| target.showPassword_ddns = ko.observable(false); | |
| target.showPasswordHandler_ddns = showPasswordHandler_ddns; | |
| changeddnsProviderList(); | |
| target.changeDdnsProvider = changeDdnsProviderFunc; | |
| changeSetDdnsMode(); | |
| target.changeSetDdnsMode = changeSetDdnsModeFunc; | |
| updateScanDdnsStatus(); | |
| target.apply = applyFunc; | |
| function updateScanDdnsStatus() { | |
| var trans = ""; | |
| $.getJSON("/reqproc/proc_get", { | |
| cmd: "getddns_status", | |
| "_": new Date().getTime() | |
| }, function (data) { | |
| if (data.getddns_status == "0") { | |
| trans = "register successful"; | |
| target.onStates(true); | |
| } else if (data.getddns_status == "1") { | |
| trans = "login error"; | |
| target.onStates(true); | |
| } else if (data.getddns_status == "2") { | |
| trans = "network error"; | |
| target.onStates(true); | |
| } else if (data.getddns_status == "3") { | |
| trans = "registering"; | |
| target.onStates(true); | |
| } else if (data.getddns_status == "4") { | |
| trans = "not registered"; | |
| target.onStates(true); | |
| } else if (data.getddns_status == "5") { | |
| trans = "error registering"; | |
| target.onStates(true); | |
| } else if (data.getddns_status == "-1") { | |
| trans = ""; | |
| target.onStates(true); | |
| } | |
| target.isddnsStatusTrans($.i18n.prop(trans)); | |
| addTimeout(updateScanDdnsStatus, 2000); | |
| }); | |
| } | |
| function changeSetDdnsMode() { | |
| if (target.currentMode() != "1") { | |
| target.isEnableSet(false); | |
| } else { | |
| target.isEnableSet(true); | |
| } | |
| return true; | |
| } | |
| function changeSetDdnsModeFunc() { | |
| changeSetDdnsMode(); | |
| } | |
| function showPasswordHandler_ddns() { | |
| $("#ddns_secretcode_input").parent().find(".error").hide(); | |
| var checkbox = $("#showPassword_ddns:checked"); | |
| if (checkbox && checkbox.length == 0) { | |
| target.showPassword_ddns(true); | |
| } else { | |
| target.showPassword_ddns(false); | |
| } | |
| } | |
| function changeDdnsProviderFunc() { | |
| if (data.DDNSProvider != target.currentProviderList()) { | |
| target.DDNSaccount(""); | |
| target.DDNSpasswd(""); | |
| target.DDNSname(""); | |
| } else { | |
| target.DDNSaccount(data.DDNSAccount); | |
| target.DDNSpasswd(data.DDNSPassword); | |
| target.DDNSname(data.DDNS); | |
| } | |
| changeddnsProviderList(); | |
| } | |
| function changeddnsProviderList() { | |
| if (target.currentProviderList() != "none") { | |
| target.isddnsaccount(true); | |
| target.isddnspasswd(true); | |
| target.isddnsdomainName(true); | |
| target.isHashValue(true); | |
| target.isDDNSStatus(true); | |
| } else { | |
| target.isddnsaccount(false); | |
| target.isddnspasswd(false); | |
| target.isddnsdomainName(false); | |
| target.isHashValue(false); | |
| target.isDDNSStatus(false); | |
| } | |
| if (target.currentProviderList() != "freedns.afraid.org") { | |
| target.isHashValue(false); | |
| } else { | |
| target.isHashValue(true); | |
| } | |
| return true; | |
| } | |
| function applyFunc() { | |
| showLoading(); | |
| var params = {}; | |
| params.goformId = "DDNS"; | |
| params.DDNS_Enable = target.currentMode(); | |
| if (target.currentMode() == "1") { | |
| params.DDNS_Mode = target.currentModeselect(); | |
| params.DDNSProvider = target.currentProviderList(); | |
| if (target.currentProviderList() != "none") { | |
| params.DDNS = target.DDNSname(); | |
| params.DDNSPassword = target.DDNSpasswd(); | |
| params.DDNSAccount = target.DDNSaccount(); | |
| } | |
| if (target.currentProviderList() == "freedns.afraid.org") { | |
| params.DDNS_Hash_Value = target.DDNS_HashValue(); | |
| } | |
| } | |
| service.setDDNSForward(params, function (result) { | |
| if (result.result == "success") { | |
| successOverlay(); | |
| data = service.getDdnsParams(); | |
| } else { | |
| errorOverlay(); | |
| } | |
| }); | |
| } | |
| } | |
| function initialize() { | |
| var container = $('#container'); | |
| ko.cleanNode(container[0]); | |
| var vm = new DdnsViewModel(); | |
| ko.applyBindings(vm, container[0]); | |
| $("#ddnsForm").validate({ | |
| submitHandler: function () { | |
| vm.apply(); | |
| }, | |
| rules: { | |
| ddns_secretcode_input: "secretcode_check", | |
| DDNS_Hash_Value: "ddns_hashvalue_check", | |
| ddns_secretcode_inputshow: "secretcode_check" | |
| }, | |
| errorPlacement: function (error, element) { | |
| var id = element.attr("id"); | |
| if (id == "ddns_secretcode_input" || id == "ddns_secretcode_inputshow") { | |
| error.insertAfter("#lblShowPassword"); | |
| } else { | |
| error.insertAfter(element); | |
| } | |
| } | |
| }); | |
| } | |
| return { | |
| init: initialize | |
| }; | |
| }); | |
| //选网模块 | |
| define("network_net_select","underscore jquery knockout set service".split(" "), | |
| function (_, $, ko, config, service) { | |
| var selectModes = _.map(config.AUTO_MODES, function (item) { | |
| return new Option(item.name, item.value); | |
| }); | |
| //选网功能view model | |
| function NetSelectVM() { | |
| var target = this; | |
| target.networkList = ko.observableArray([]); | |
| target.selectNetwork = ko.observable(''); | |
| target.enableFlag = ko.observable(true); | |
| target.types = ko.observableArray(selectModes); | |
| target.selectedType = ko.observable(); | |
| target.selectMode = ko.observable(); | |
| target.networkText = networkTextFunc; | |
| target.networkStatusId = networkStatusIdFunc; | |
| target.networkStatus = networkStatusFunc; | |
| target.subnetworkType = subnetworkTypeFunc; | |
| target.networkType = networkTypeFunc; | |
| target.operatorName = operatorNameFunc; | |
| target.networkValue = networkValueFunc; | |
| target.networkTypeId = networkTypeIdFunc; | |
| target.subnetTypeId = subnetTypeIdFunc; | |
| //手动搜网. | |
| target.search = searchFunc; | |
| //自动选网时设置网络模式. | |
| target.save = saveFunc; | |
| target.checkEnable = checkEnableFunc; | |
| //注册选择的网络. | |
| target.register = registerFunc; | |
| //init data | |
| target.checkEnable(); | |
| var info = getNetSelectInfo(); | |
| if ("manual_select" == info.net_select_mode || "manual_select" == info.m_netselect_save) { | |
| target.selectMode("manual_select"); | |
| } else { | |
| target.selectMode("auto_select"); | |
| } | |
| target.selectedType(info.net_select); | |
| //注册选择的网络. | |
| function registerFunc() { | |
| showLoading('registering_net'); | |
| var networkToSet = target.selectNetwork().split(','); | |
| service.setNetwork(networkToSet[0], parseInt(networkToSet[1]), parseInt(networkToSet[2]), function (result) { | |
| if (result) { | |
| target.networkList([]); | |
| var autoType = getNetSelectInfo(); | |
| target.selectedType(autoType.net_select); | |
| successOverlay(); | |
| } else { | |
| errorOverlay(); | |
| } | |
| }); | |
| } | |
| function checkEnableFunc() { | |
| var status = service.getStatusInfo(); | |
| if (status.connectStatus == "ppp_connected" || status.connectStatus == "ppp_connecting") { | |
| target.enableFlag(false); | |
| } else { | |
| target.enableFlag(true); | |
| } | |
| } | |
| //自动选网时设置网络模式. | |
| function saveFunc() { | |
| showLoading(); | |
| //AutoSelect call SetBearerPreference | |
| var params = {}; | |
| params.strBearerPreference = target.selectedType(); | |
| service.setBearerPreference(params, function (result) { | |
| if (result.result == "success") { | |
| target.networkList([]); | |
| successOverlay(); | |
| } else { | |
| errorOverlay(); | |
| } | |
| }); | |
| } | |
| //手动搜网. | |
| function searchFunc() { | |
| showLoading('searching_net'); | |
| service.scanForNetwork(function (result, networkList) { | |
| hideLoading(); | |
| if (result) { | |
| target.networkList(networkList); | |
| for (var i = 0; i < networkList.length; i++) { | |
| var n = networkList[i]; | |
| if (n.nState == '2') { | |
| target.selectNetwork(n.strNumeric + ',' + n.nRat + ',' + n.SubAct); | |
| return; | |
| } | |
| } | |
| } else { | |
| target.networkList([]); | |
| } | |
| }); | |
| } | |
| function subnetTypeIdFunc(data) { | |
| return getSubNetworkTypeTog(data.nRat, data.SubAct); | |
| } | |
| function networkTypeIdFunc(data) { | |
| return getNetworkType(data.nRat); | |
| } | |
| function networkValueFunc(data) { | |
| var result = []; | |
| result.push(data.strNumeric); //strNumeric | |
| result.push(data.nRat); //nRat | |
| result.push(data.SubAct); | |
| return result.join(','); | |
| } | |
| function operatorNameFunc(data) { | |
| return data.strShortName; | |
| } | |
| function networkTypeFunc(data) { | |
| var result = getNetworkType(data.nRat); | |
| if (result == "auto") | |
| result = $.i18n.prop("auto"); | |
| return result; | |
| } | |
| function subnetworkTypeFunc(data) { | |
| var result = getSubNetworkTypeTog(data.nRat, data.SubAct); | |
| return result; | |
| } | |
| function networkStatusFunc(data) { | |
| return $.i18n.prop(getNetworkStatusTog(data.nState)); | |
| } | |
| function networkStatusIdFunc(data) { | |
| return getNetworkStatusTog(data.nState); | |
| } | |
| function networkTextFunc(data) { | |
| return data.strNumeric; | |
| } | |
| } | |
| //获取网络选择信息. | |
| function getNetSelectInfo() { | |
| return service.getNetSelectInfo(); | |
| } | |
| //搜网结果中的状态转换为对应的语言项. | |
| function getNetworkStatusTog(status) { | |
| if ("3" == status) { | |
| return "forbidden"; | |
| } else if ("2" == status) { | |
| return "current"; | |
| } else if ("1" == status) { | |
| return "available"; | |
| }else if ("0" == status) { | |
| return "unknown"; | |
| } | |
| } | |
| //子网络类型转换. | |
| function getSubNetworkTypeTog(type, subtype) { | |
| var type_3g = [2, 4, 5, 6, 8]; | |
| if ("1" == subtype) { | |
| if ("7" == type) { | |
| subtype = "FDD-LTE"; | |
| } else if ($.inArray(type, type_3g) != -1) { | |
| subtype = "WCDMA"; | |
| }else { | |
| subtype = "GSM"; | |
| } | |
| } else if ("0" == subtype) { | |
| if ("7" == type) { | |
| subtype = "TD-LTE"; | |
| } else if ($.inArray(type, type_3g) != -1) { | |
| subtype = "TD-SCDMA"; | |
| } else { | |
| subtype = "GSM"; | |
| } | |
| } else { | |
| subtype = ""; | |
| } | |
| return subtype; | |
| } | |
| //网络类型转换. | |
| function getNetworkType(type) { | |
| if ("7" == type) { | |
| return "4G"; | |
| } else if ("2" == type) { | |
| return "3G"; | |
| } else if ("0" == type) { | |
| return "2G"; | |
| } else { | |
| return "auto"; | |
| } | |
| } | |
| function bindContainer(vm){ | |
| var container = $('#container'); | |
| ko.cleanNode(container[0]); | |
| ko.applyBindings(vm, container[0]); | |
| } | |
| //初始化选网功能view model. | |
| function initialize() { | |
| var vm = new NetSelectVM(); | |
| bindContainer(vm); | |
| addInterval(vm.checkEnable, 1000); | |
| } | |
| return { | |
| init: initialize | |
| }; | |
| }); | |
| define("locknet","jquery knockout service jquery set main".split(" "), | |
| function ($, ko, service, config, home) { | |
| function initialize() { | |
| var container = $('#container')[0]; | |
| ko.cleanNode(container); | |
| var vm = new locknetViewMode(); | |
| ko.applyBindings(vm, container); | |
| $("#frmNetworkLock").validate({ | |
| submitHandler: function () { | |
| vm.unlock(); | |
| }, | |
| rules: { | |
| txtLockNumber: "unlock_code_check" | |
| } | |
| }); | |
| } | |
| function locknetViewMode() { | |
| var target = this; | |
| var curCableMode = false; | |
| target.isCPE = config.PRODUCT_TYPE == 'CPE'; | |
| target.hasRj45 = config.RJ45_SUPPORT; | |
| target.hasSms = config.HAS_SMS; | |
| target.hasPhonebook = config.HAS_PHONEBOOK; | |
| target.isSupportSD = config.SD_CARD_SUPPORT; | |
| if (config.WIFI_SUPPORT_QR_SWITCH == false) { | |
| target.showQRCode = config.WIFI_SUPPORT_QR_CODE; | |
| } else { | |
| var wifiInfo = service.getWifiBasic(); | |
| target.showQRCode = config.WIFI_SUPPORT_QR_CODE && wifiInfo.show_qrcode_flag; | |
| } | |
| if(config.WIFI_SUPPORT_QR_CODE){ | |
| target.qrcodeSrc = './pic/qrcode_ssid_wifikey.png?_=' + $.now(); | |
| } else { | |
| target.qrcodeSrc = './pic/res_blacktrans.png'; | |
| } | |
| target.hasParentalControl = ko.observable(config.HAS_PARENTAL_CONTROL && curCableMode); | |
| target.deviceInfo = ko.observable([]); | |
| target.isHomePage = ko.observable(false); | |
| if (window.location.hash == "#main") { | |
| target.isHomePage(true); | |
| } | |
| target.supportUnlock = config.NETWORK_UNLOCK_SUPPORT; | |
| target.unlockCode = ko.observable(); | |
| var info = service.getNetworkUnlockTimes(); | |
| target.times = ko.observable(info.unlock_nck_time); | |
| //显示工作模式设置窗口 | |
| target.showOpModeWindow = showOpModeWindowFunc; | |
| target.isLoggedIn = ko.observable(false); | |
| target.enableFlag = ko.observable(false); | |
| //解锁 | |
| target.unlock = unlockFunc; | |
| //更新工作模式状态 | |
| target.refreshOpmodeInfo = refreshOpmodeInfoFunc; | |
| //定时检查工作模式状态 | |
| if (target.hasRj45) { | |
| target.refreshOpmodeInfo(); | |
| addInterval(function () { | |
| target.refreshOpmodeInfo(); | |
| }, 1000); | |
| } | |
| //更新工作模式状态 | |
| function refreshOpmodeInfoFunc() { | |
| var obj = service.getStatusInfo(); | |
| target.isLoggedIn(obj.isLoggedIn); | |
| if (!curCableMode && checkCableMode(obj.blc_wan_mode)) { //如果有线,则重新加载 | |
| window.location.reload(); | |
| return; | |
| } | |
| curCableMode = checkCableMode(obj.blc_wan_mode); | |
| target.hasParentalControl(config.HAS_PARENTAL_CONTROL && curCableMode); | |
| if (curCableMode && obj.ethWanMode.toUpperCase() == "DHCP") { | |
| target.enableFlag(true); | |
| } else if ((!curCableMode && obj.connectStatus != "ppp_disconnected") || (curCableMode && obj.rj45ConnectStatus != "idle" && obj.rj45ConnectStatus != "dead")) { | |
| target.enableFlag(false); | |
| } else { | |
| target.enableFlag(true); | |
| } | |
| var getMode = (obj.blc_wan_mode == "AUTO_PPP" || obj.blc_wan_mode == "AUTO_PPPOE") ? "AUTO" : obj.blc_wan_mode; | |
| var currMode = ""; | |
| switch (getMode) { | |
| case "PPP": | |
| currMode = "opmode_gateway"; | |
| break; | |
| case "PPPOE": | |
| currMode = "opmode_cable"; | |
| break; | |
| case "AUTO": | |
| currMode = "opmode_auto"; | |
| break; | |
| default: | |
| break; | |
| } | |
| $("#opmode").attr("data-trans", currMode).text($.i18n.prop(currMode)); | |
| } | |
| //解锁 | |
| function unlockFunc() { | |
| showLoading(); | |
| service.unlockNetwork({ | |
| unlock_network_code: target.unlockCode() | |
| }, function (data) { | |
| target.unlockCode(""); | |
| if (data && data.result == "success") { | |
| successOverlay(); | |
| if (window.location.hash == "#main") { | |
| setTimeout(function () { | |
| window.location.reload(); | |
| }, 500); | |
| } else { | |
| window.location.hash = "#main"; | |
| } | |
| } else { | |
| var info = service.getNetworkUnlockTimes(); | |
| target.times(info.unlock_nck_time); | |
| errorOverlay(); | |
| } | |
| }) | |
| } | |
| //显示工作模式设置窗口 | |
| function showOpModeWindowFunc() { | |
| showSettingWindow("change_mode", "opmode_popup", "opmode_popup", 400, 300, function () {}); | |
| } | |
| } | |
| return { | |
| init: initialize | |
| }; | |
| }); | |
| // RJ45联网设置模块 | |
| define("network_dial_set_cpe","underscore jquery knockout set service".split(" "), | |
| function(_, $, ko, config, service) { | |
| var dialActions = _.map(config.dialActions, function(elem){ | |
| return new Option(elem.name, elem.value); | |
| }); | |
| var dialModes = _.map(config.pppoeModes, function(elem) { | |
| return new Option(elem.name, elem.value); | |
| }); | |
| var checkStatusTimer = 0; | |
| var checkConCounter = 0; | |
| var timeoutTipShowed = false; | |
| // 联网设置view model. | |
| function PPPoEViewModel() { | |
| var pppObj = service.getPppoeParams(); | |
| var ethParams = pppObj; | |
| var target = this; | |
| target.staticNoticeShow = ko.observable(); | |
| target.dhcpNoticeShow = ko.observable(); | |
| target.pppoeNoticeShow = ko.observable(); | |
| target.autoNoticeShow = ko.observable(); | |
| target.staticNotice = ko.observable(); | |
| target.dhcpNotice = ko.observable(); | |
| target.pppoeNotice = ko.observable(); | |
| target.autoNotice = ko.observable(); | |
| target.dhcpNoticeText = ko.observable(); | |
| target.staticNoticeText = ko.observable(); | |
| target.pppoeNoticeText = ko.observable(); | |
| target.autoNoticeText = ko.observable(); | |
| target.currentMode = ko.observable(pppObj.ethwan_mode);//auto dhcp pppoe static | |
| target.showPassword = ko.observable(false); | |
| target.modes = ko.observableArray(dialModes); | |
| target.isPppoeMode = ko.observable(false); | |
| target.isStaticMode = ko.observable(false); | |
| target.isAutoMode = ko.observable(false); | |
| target.action = ko.observable(); | |
| target.btnTrans = ko.observable(); | |
| target.enableFlag = ko.observable(); | |
| target.isShowDisbtn = ko.observable(); | |
| target.isShowCancelbtn = ko.observable(); | |
| if(pppObj.rj45_state == "dead"){ | |
| checkRj45DeadTip(); | |
| } else if(pppObj.rj45_state == "connect"){ | |
| timeoutTipShowed = true; | |
| setRj45CheckTimer("connect"); | |
| } else if(pppObj.rj45_state == "working"){ | |
| setRj45WorkingTip(); | |
| } | |
| target.user = ko.observable(pppObj.pppoe_username); | |
| target.password = ko.observable(pppObj.pppoe_cc); | |
| target.autoUser = ko.observable(pppObj.pppoe_username); | |
| target.autoPassword = ko.observable(pppObj.pppoe_cc); | |
| target.pppMode = ko.observable(pppObj.ethwan_dialmode); | |
| initContronler(); | |
| //下拉框选择改变下面DIV模块 | |
| target.changeModeDiv = changeModeDivFunc; | |
| target.radioHandler = radioHandlerFunc; | |
| target.primaryDNS = ko.observable(pppObj.static_wan_primary_dns); | |
| target.secondaryDNS = ko.observable(pppObj.static_wan_secondary_dns); | |
| target.ipAddress = ko.observable(pppObj.static_wan_ipaddr); | |
| target.subnetMask = ko.observable(pppObj.static_wan_netmask); | |
| target.defaultGateway = ko.observable(pppObj.static_wan_gateway); | |
| addInterval(function(){ | |
| ethParams = service.getPppoeParams(); | |
| pppObj.rj45_state = ethParams.rj45_state; | |
| initContronler(); | |
| }, 1000); | |
| // 取消连接按钮事件. | |
| target.cancelConnect = cancelConnectFunc; | |
| // 应用按钮事件. | |
| target.save = saveFunc; | |
| //密码显示事件 | |
| target.showPasswordHandler = function () { | |
| var checkbox = $("#showPassword:checked"); | |
| if (checkbox && checkbox.length == 0) { | |
| target.showPassword(true); | |
| } else { | |
| target.showPassword(false); | |
| } | |
| }; | |
| // 更新当前界面状态、按钮、提示语等. | |
| function initContronler() { | |
| checkRj45DeadTip(); | |
| if(target.currentMode() == "PPPOE"){ | |
| target.isPppoeMode(true); | |
| target.isStaticMode(false); | |
| target.isAutoMode(false); | |
| target.staticNoticeShow(false); | |
| target.dhcpNoticeShow(false); | |
| target.autoNoticeShow(false); | |
| } else if(target.currentMode() == "AUTO"){ | |
| target.isStaticMode(false); | |
| target.isPppoeMode(false); | |
| target.isAutoMode(true); | |
| target.dhcpNoticeShow(false); | |
| target.pppoeNoticeShow(false); | |
| target.staticNoticeShow(false); | |
| } else if(target.currentMode() == "STATIC"){ | |
| target.isStaticMode(true); | |
| target.isPppoeMode(false); | |
| target.isAutoMode(false); | |
| target.dhcpNoticeShow(false); | |
| target.pppoeNoticeShow(false); | |
| target.autoNoticeShow(false); | |
| } else{ | |
| target.isStaticMode(false); | |
| target.isPppoeMode(false); | |
| target.isAutoMode(false); | |
| target.staticNoticeShow(false); | |
| target.pppoeNoticeShow(false); | |
| target.autoNoticeShow(false); | |
| } | |
| if(ethParams.ethwan_dialmode != "auto_dial" && (pppObj.rj45_state == "working" || pppObj.rj45_state =="connect") ){ | |
| target.enableFlag(false); | |
| } else { | |
| target.enableFlag(true); | |
| } | |
| if(pppObj.rj45_state == "connect"){ | |
| if(target.pppMode() == "auto_dial"){ | |
| target.action("connect"); | |
| }else{ | |
| target.action("disconnect"); | |
| } | |
| } else if(pppObj.rj45_state == "working"){ | |
| target.action("disconnect"); | |
| }else{ | |
| target.action("connect"); | |
| } | |
| //应用/连接按钮 | |
| if(target.pppMode() != "auto_dial" && target.currentMode() == ethParams.ethwan_mode){ | |
| target.btnTrans("connect"); | |
| } else{ | |
| target.btnTrans("apply"); | |
| } | |
| if(pppObj.rj45_state != "idle"){ | |
| $("#pppoeApply").attr("disabled", true); | |
| }else { | |
| $("#pppoeApply").attr("disabled", false); | |
| } | |
| //取消/断开按钮 | |
| target.isShowDisbtn(target.pppMode() != "auto_dial" && pppObj.rj45_state == "working"); | |
| target.isShowCancelbtn(target.pppMode() != "auto_dial" && pppObj.rj45_state == "connect"); | |
| $("#pppoeApply").translate(); | |
| } | |
| // 设置后通过定时检查rj45_state状态,判断连接或断开操作结果. | |
| function setRj45CheckTimer(action){ | |
| checkStatusTimer && window.clearInterval(checkStatusTimer); | |
| if("connect" != action){ | |
| checkStatusTimer = addInterval(function () { | |
| checkDisconnectStatus(); | |
| }, 2000); | |
| }else{ | |
| if(target.currentMode() == "PPPOE"){ | |
| target.pppoeNoticeShow(true); | |
| target.pppoeNotice("pppoe_processing"); | |
| target.pppoeNoticeText($.i18n.prop("pppoe_processing")); | |
| } else if(target.currentMode() == "STATIC"){ | |
| target.staticNoticeShow(true); | |
| target.staticNotice("static_processing"); | |
| target.staticNoticeText($.i18n.prop("static_processing")); | |
| } else if(target.currentMode() == "DHCP"){ | |
| target.dhcpNoticeShow(true); | |
| target.dhcpNotice("dyn_processing"); | |
| target.dhcpNoticeText($.i18n.prop("dyn_processing")); | |
| }else{ | |
| target.autoNoticeShow(true); | |
| target.autoNotice("auto_processing"); | |
| target.autoNoticeText($.i18n.prop("auto_processing")); | |
| } | |
| checkStatusTimer = addInterval(function () { | |
| checkConnectionStatus(); | |
| }, 2000); | |
| } | |
| } | |
| // 设置后通过定时检查rj45_state状态,判断连接操作结果. | |
| function checkConnectionStatus(){ | |
| if(checkConCounter < 1){ | |
| checkConCounter++; | |
| return; | |
| } | |
| if(pppObj.rj45_state == "connect"){ | |
| if(target.currentMode() != ethParams.ethwan_mode){ | |
| if(target.currentMode() == "AUTO"){ | |
| target.autoNoticeShow(true); | |
| }else if(target.currentMode() == "PPPOE"){ | |
| target.pppoeNoticeShow(true); | |
| }else if(target.currentMode() == "STATIC"){ | |
| target.staticNoticeShow(true); | |
| }else if(target.currentMode() == "DHCP"){ | |
| target.dhcpNoticeShow(true); | |
| } | |
| } | |
| if(checkConCounter > 6){ | |
| if(timeoutTipShowed == false){ | |
| timeoutTipShowed = true; | |
| showAlert("ussd_operation_timeout"); | |
| } | |
| } | |
| checkConCounter++; | |
| } else if (pppObj.rj45_state == "working") { | |
| hideLoading(); | |
| setRj45WorkingTip(); | |
| window.clearInterval(checkStatusTimer); | |
| } else if (pppObj.rj45_state == "dead") { | |
| hideLoading(); | |
| checkRj45DeadTip(); | |
| window.clearInterval(checkStatusTimer); | |
| } else if(pppObj.rj45_state == "idle"){ | |
| hideLoading(); | |
| if(target.currentMode() == "DHCP" && ethParams.ethwan_mode == "DHCP") { | |
| timeoutTipShowed == false && target.dhcpNoticeShow(true); | |
| target.dhcpNotice("dyn_fail"); | |
| target.dhcpNoticeText($.i18n.prop("dyn_fail")); | |
| } | |
| if(target.currentMode() == "STATIC" && ethParams.ethwan_mode == "STATIC") { | |
| timeoutTipShowed == false && target.staticNoticeShow(true); | |
| target.staticNotice("static_fail"); | |
| target.staticNoticeText($.i18n.prop("static_fail")); | |
| } | |
| if(target.currentMode() == "PPPOE" && ethParams.ethwan_mode == "PPPOE") { | |
| timeoutTipShowed == false && target.pppoeNoticeShow(true); | |
| target.pppoeNotice("pppoe_fail"); | |
| target.pppoeNoticeText($.i18n.prop("pppoe_fail")); | |
| } | |
| if(target.currentMode() == "AUTO" && ethParams.ethwan_mode == "AUTO") { | |
| timeoutTipShowed == false && target.autoNoticeShow(true); | |
| target.autoNotice("auto_fail"); | |
| target.autoNoticeText($.i18n.prop("auto_fail")); | |
| } | |
| window.clearInterval(checkStatusTimer); | |
| } else{ | |
| hideLoading(); | |
| window.clearInterval(checkStatusTimer); | |
| } | |
| } | |
| // 设置连接成功时提示语状态. | |
| function setRj45WorkingTip(){ | |
| if(target.currentMode() == ethParams.ethwan_mode){ | |
| if(target.currentMode() == "AUTO") { | |
| target.autoNoticeShow(true); | |
| target.autoNotice("auto_success"); | |
| target.autoNoticeText($.i18n.prop("auto_success")); | |
| }else if(target.currentMode() == "PPPOE") { | |
| target.pppoeNoticeShow(true); | |
| target.pppoeNotice("pppoe_success"); | |
| target.pppoeNoticeText($.i18n.prop("pppoe_success")); | |
| }else if(target.currentMode() == "STATIC") { | |
| target.staticNoticeShow(true); | |
| target.staticNotice("static_success"); | |
| target.staticNoticeText($.i18n.prop("static_success")); | |
| }else if(target.currentMode() == "DHCP" ) { | |
| target.dhcpNoticeShow(true); | |
| target.dhcpNotice("dyn_success"); | |
| target.dhcpNoticeText($.i18n.prop("dyn_success")); | |
| } | |
| } | |
| } | |
| // 设置网线断开提示语状态. | |
| function checkRj45DeadTip(){ | |
| if(pppObj.rj45_state != "dead"){ | |
| if(target.currentMode() == "AUTO" && target.autoNotice() == "pppoe_msg") { | |
| target.autoNoticeShow(false); | |
| }else if(target.currentMode() == "PPPOE" && target.pppoeNotice() == "pppoe_msg") { | |
| target.pppoeNoticeShow(false); | |
| }else if(target.currentMode() == "STATIC" && target.staticNotice() == "pppoe_msg") { | |
| target.staticNoticeShow(false); | |
| }else if(target.currentMode() == "DHCP" && target.dhcpNotice() == "pppoe_msg") { | |
| target.dhcpNoticeShow(false); | |
| } | |
| } else{ | |
| target.dhcpNotice("pppoe_msg"); | |
| target.dhcpNoticeText($.i18n.prop("pppoe_msg")); | |
| target.staticNotice("pppoe_msg"); | |
| target.staticNoticeText($.i18n.prop("pppoe_msg")); | |
| target.pppoeNotice("pppoe_msg"); | |
| target.pppoeNoticeText($.i18n.prop("pppoe_msg")); | |
| target.autoNotice("pppoe_msg"); | |
| target.autoNoticeText($.i18n.prop("pppoe_msg")); | |
| if(target.currentMode() == "AUTO") { | |
| target.autoNoticeShow(true); | |
| }else if(target.currentMode() == "PPPOE") { | |
| target.pppoeNoticeShow(true); | |
| }else if(target.currentMode() == "STATIC") { | |
| target.staticNoticeShow(true); | |
| }else if(target.currentMode() == "DHCP") { | |
| target.dhcpNoticeShow(true); | |
| } | |
| } | |
| } | |
| // 设置后通过定时检查rj45_state状态,判断断开操作结果. | |
| function checkDisconnectStatus(){ | |
| if(checkConCounter < 1){ | |
| checkConCounter++; | |
| } else if (pppObj.rj45_state != "working" && pppObj.rj45_state != "connect") { | |
| target.dhcpNoticeShow(false); | |
| target.staticNoticeShow(false); | |
| target.pppoeNoticeShow(false); | |
| target.autoNoticeShow(false); | |
| window.clearInterval(checkStatusTimer); | |
| successOverlay(); | |
| } else if(checkConCounter > 6){ | |
| if(timeoutTipShowed == false){ | |
| timeoutTipShowed = true; | |
| showAlert("ussd_operation_timeout"); | |
| } | |
| window.clearInterval(checkStatusTimer); | |
| } else if(checkConCounter < 7) { | |
| checkConCounter++; | |
| } else { | |
| hideLoading(); | |
| window.clearInterval(checkStatusTimer); | |
| } | |
| } | |
| //应用按钮事件. | |
| function saveFunc(){ | |
| target.dhcpNoticeShow(false); | |
| target.staticNoticeShow(false); | |
| target.pppoeNoticeShow(false); | |
| target.autoNoticeShow(false); | |
| if(pppObj.rj45_state == "dead"){ | |
| showAlert("pppoe_msg"); | |
| return; | |
| } | |
| var requestParams = {}; | |
| if($("#pppoe_mode").val() == "PPPOE") { | |
| requestParams = $.extend({}, { | |
| goformId: "WAN_GATEWAYMODE_PPPOE", | |
| pppoe_username: target.user(), | |
| pppoe_cc: target.password() | |
| }); | |
| } else if($("#pppoe_mode").val() == "AUTO") { | |
| requestParams = $.extend({}, { | |
| goformId: "WAN_GATEWAYMODE_AUTO", | |
| pppoe_username: target.autoUser(), | |
| pppoe_cc: target.autoPassword() | |
| }); | |
| } else if($("#pppoe_mode").val() == "STATIC") { | |
| if(target.ipAddress() == target.defaultGateway()){ | |
| showAlert("ip_gate_not_same"); | |
| return; | |
| } | |
| if(isStaticIPValid(target.ipAddress(), pppObj.lan_ipaddr, pppObj.lan_netmask)){ | |
| showAlert("ip_innergate_not_same"); | |
| return; | |
| } | |
| requestParams = $.extend({}, { | |
| goformId: "WAN_GATEWAYMODE_STATIC", | |
| static_wan_ipaddr: target.ipAddress(), | |
| static_wan_netmask: target.subnetMask(), | |
| static_wan_gateway: target.defaultGateway(), | |
| static_wan_primary_dns: target.primaryDNS(), | |
| static_wan_secondary_dns: target.secondaryDNS(), | |
| WAN_MODE: "STATIC" | |
| }); | |
| } else { | |
| requestParams = $.extend({}, { | |
| goformId: "WAN_GATEWAYMODE_DHCP" | |
| }); | |
| } | |
| requestParams.action_link = "connect"; | |
| requestParams.dial_mode = target.pppMode(); | |
| showLoading("waiting"); | |
| service.setPppoeDialMode(requestParams, function(data){ | |
| if(data.result){ | |
| target.currentMode($("#pppoe_mode").val()); | |
| pppObj = service.getPppoeParams(); | |
| checkConCounter = 0; | |
| timeoutTipShowed = false; | |
| setRj45CheckTimer("connect"); | |
| $("#pppoeApply").translate(); | |
| } else { | |
| errorOverlay("pppoe_message_send_fail"); | |
| } | |
| }); | |
| } | |
| //取消连接按钮事件. | |
| function cancelConnectFunc(){ | |
| target.dhcpNoticeShow(false); | |
| target.staticNoticeShow(false); | |
| target.pppoeNoticeShow(false); | |
| target.autoNoticeShow(false); | |
| if(pppObj.rj45_state == "dead"){ | |
| showAlert("pppoe_msg"); | |
| return; | |
| } | |
| var requestParams = { | |
| dial_mode: target.pppMode(), | |
| action_link: "disconnect" | |
| }; | |
| if(pppObj.ethwan_mode == "PPPOE") { | |
| requestParams = $.extend(requestParams, { | |
| goformId: "WAN_GATEWAYMODE_PPPOE", | |
| pppoe_username: pppObj.pppoe_username, | |
| pppoe_cc: pppObj.pppoe_cc | |
| }); | |
| }else if(pppObj.ethwan_mode == "AUTO") { | |
| requestParams = $.extend(requestParams, { | |
| goformId: "WAN_GATEWAYMODE_AUTO", | |
| pppoe_username: pppObj.pppoe_username, | |
| pppoe_cc: pppObj.pppoe_cc | |
| }); | |
| }else if(pppObj.ethwan_mode == "STATIC") { | |
| requestParams = $.extend(requestParams, { | |
| goformId: "WAN_GATEWAYMODE_STATIC", | |
| static_wan_ipaddr: pppObj.static_wan_ipaddr, | |
| static_wan_netmask: pppObj.static_wan_netmask, | |
| static_wan_gateway: pppObj.static_wan_gateway, | |
| static_wan_primary_dns: pppObj.static_wan_primary_dns, | |
| static_wan_secondary_dns: pppObj.static_wan_secondary_dns, | |
| WAN_MODE: "STATIC" | |
| }); | |
| }else { | |
| requestParams = $.extend(requestParams, { | |
| goformId: "WAN_GATEWAYMODE_DHCP" | |
| }); | |
| } | |
| showLoading("waiting"); | |
| service.setPppoeDialMode(requestParams, function(data){ | |
| if(data.result){ | |
| checkConCounter = 0; | |
| timeoutTipShowed = false; | |
| setRj45CheckTimer("disconnect"); | |
| $("#pppoeApply").translate(); | |
| } else { | |
| errorOverlay("pppoe_message_send_fail"); | |
| } | |
| }); | |
| } | |
| function radioHandlerFunc(){ | |
| initContronler(); | |
| return true; | |
| } | |
| function changeModeDivFunc(){ | |
| initContronler(); | |
| } | |
| } | |
| function bindContainer(vm){ | |
| var container = $('#container'); | |
| ko.cleanNode(container[0]); | |
| ko.applyBindings(vm, container[0]); | |
| } | |
| // 联网设置初始化. | |
| function initialize() { | |
| var vm = new PPPoEViewModel(); | |
| bindContainer(vm); | |
| $("#pppoeApply").translate(); | |
| $('#pppoeForm').validate({ | |
| submitHandler : function() { | |
| vm.save(); | |
| }, | |
| rules: { | |
| txtPin: "wps_pin_check", | |
| txtIpAddress: "dmz_ip_check", | |
| txtSubnetMask: { | |
| ipv4: true, | |
| subnetmask_check: true | |
| }, | |
| txtDefaultGateway: { | |
| ipv4: true, | |
| gateway_check: true | |
| }, | |
| txtPrimaryDNS: { | |
| ipv4: true, | |
| dns_check:true | |
| }, | |
| txtSecondaryDNS: { | |
| ipv4: true, | |
| dns_check:true | |
| } | |
| } | |
| }); | |
| } | |
| //from 4.0 | |
| // 有效DNS检查. | |
| function validateDns(dns){ | |
| if ( "0.0.0.0" == dns || "255.255.255.255" == dns) { | |
| return false; | |
| } | |
| return true; | |
| } | |
| // 联网设置初始化. | |
| function isStaticIPValid(ip, lanip, lanmask){ | |
| if(!ip || !lanip || !lanmask){//各参数不能为空 | |
| return false; | |
| } | |
| if(ip == lanip){// 与内网IP相等 | |
| return true; | |
| } | |
| var res1 = [], res2 = [], mask = []; | |
| addr1 = ip.split("."); | |
| addr2 = lanip.split("."); | |
| mask = lanmask.split("."); | |
| for(var i = 0; i < addr1.length; i += 1){ | |
| res1.push(parseInt(addr1[i]) & parseInt(mask[i])); | |
| res2.push(parseInt(addr2[i]) & parseInt(mask[i])); | |
| } | |
| if(res1.join(".") == res2.join(".")){//在同一个网段 | |
| return true; | |
| }else{//不在同一个网段 | |
| return false; | |
| } | |
| } | |
| // 有效子网掩码验证. | |
| function isNetmaskIPValid(ip) { | |
| if (ip == 255 || ip == 254 || ip == 252 || ip == 248 | |
| || ip == 240 || ip == 224 || ip == 192 || ip == 128 || ip == 0) | |
| { | |
| return true; | |
| } | |
| else | |
| { | |
| return false; | |
| } | |
| } | |
| // 有效子网掩码检查. | |
| function validateNetmask(netmask) { | |
| var array = new Array(); | |
| array = netmask.split("."); | |
| if (array.length != 4) { | |
| return false; | |
| } | |
| array[0] = parseInt(array[0]); | |
| array[1] = parseInt(array[1]); | |
| array[2] = parseInt(array[2]); | |
| array[3] = parseInt(array[3]); | |
| if (array[3] != 0) { | |
| if (array[2] != 255 || array[1] != 255 || array[0] != 255) { | |
| return false; | |
| } else { | |
| if (!isNetmaskIPValid(array[3])) { | |
| return false; | |
| } | |
| } | |
| } | |
| if (array[2] != 0) { | |
| if (array[1] != 255 || array[0] != 255) { | |
| return false; | |
| } else { | |
| if (!isNetmaskIPValid(array[2])) { | |
| return false; | |
| } | |
| } | |
| } | |
| if (array[1] != 0) { | |
| if (array[0] != 255) { | |
| return false; | |
| } else{ | |
| if (!isNetmaskIPValid(array[1])) { | |
| return false; | |
| } | |
| } | |
| } | |
| if(array[0]!=255) { | |
| return false; | |
| } | |
| if ( "0.0.0.0" == netmask || "255.255.255.255" == netmask) { | |
| return false; | |
| } | |
| return true; | |
| } | |
| // subnetmask_check校验规则 | |
| jQuery.validator.addMethod("subnetmask_check", function (value, element, param) { | |
| var result = validateNetmask(value); | |
| return this.optional(element) || result; | |
| }); | |
| // dns_check校验规则 | |
| jQuery.validator.addMethod("dns_check", function (value, element, param) { | |
| var result = validateDns(value); | |
| return this.optional(element) || result; | |
| }); | |
| // 有效网关检查. | |
| function validateGateway(wanIp, netmaskIp, gatewayIp) { | |
| if(myConcat(wanIp,netmaskIp) == myConcat(netmaskIp, gatewayIp)) { | |
| return true; | |
| } else { | |
| return false; | |
| } | |
| } | |
| // IP和子网掩码转换成数组形式并相与,返回相与后的IP. | |
| function myConcat(ip1,ip2){ | |
| var result = []; | |
| var iplArr = ip1.split("."); | |
| var ip2Arr = ip2.split("."); | |
| for(var i = 0; i < iplArr.length;i++){ | |
| result[i] = (iplArr[i] & ip2Arr[i]); | |
| } | |
| return result.join("."); | |
| } | |
| // gateway_check校验规则 | |
| jQuery.validator.addMethod("gateway_check", function (value, element, param) { | |
| var result = validateGateway($('#txtIpAddress').val(), $('#txtSubnetMask').val(), $("#txtDefaultGateway").val()); | |
| return this.optional(element) || result; | |
| }); | |
| return { | |
| init: initialize | |
| }; | |
| }); | |
| //联网设置模块 | |
| define("network_dial_set","underscore jquery knockout set service".split(" "), | |
| function(_, $, ko, config, service) { | |
| //联网设置view model | |
| function DialVM() { | |
| var dialMode = service.getConnectionMode(); | |
| var target = this; | |
| target.selectMode = ko.observable(dialMode.connectionMode); | |
| target.enableFlag = ko.observable(true); | |
| target.isAllowedRoaming = ko.observable(dialMode.isAllowedRoaming); | |
| var originalRoaming = dialMode.isAllowedRoaming; | |
| target.setAllowedRoaming = setAllowedRoamingFunc; | |
| var checkboxFlag = $(".checkboxToggle"); | |
| target.checkEnable = checkEnableFunc; | |
| //修改联网模式 | |
| target.save = saveFunc; | |
| function saveFunc() { | |
| showLoading(); | |
| var connMode = target.selectMode(); | |
| //当选择自动时,下发原先的勾选状态 | |
| if (connMode == 'auto_dial') { | |
| originalRoaming = target.isAllowedRoaming(); | |
| } else { | |
| target.isAllowedRoaming(originalRoaming); | |
| } | |
| service.setConnectionMode({ | |
| connectionMode: connMode, | |
| isAllowedRoaming: target.isAllowedRoaming() | |
| }, function (result) { | |
| if (result.result == "success") { | |
| successOverlay(); | |
| } else { | |
| errorOverlay(); | |
| } | |
| }); | |
| } | |
| function setAllowedRoamingFunc() { | |
| if(!$("#roamBtn").hasClass("disable")){ | |
| var checkbox = $("#isAllowedRoaming:checked"); | |
| if(checkbox && checkbox.length == 0 ){ | |
| target.isAllowedRoaming("on"); | |
| }else{ | |
| target.isAllowedRoaming("off"); | |
| } | |
| } | |
| } | |
| function checkEnableFunc() { | |
| var status = service.getStatusInfo(); | |
| if (status.connectStatus == "ppp_connected" || status.connectStatus == "ppp_connecting") { | |
| target.enableFlag(false); | |
| disableCheckbox(checkboxFlag); | |
| } | |
| else { | |
| target.enableFlag(true); | |
| enableCheckbox(checkboxFlag); | |
| } | |
| } | |
| } | |
| //联网设置初始化. | |
| function initialize() { | |
| var vm = new DialVM(); | |
| bindContainer(vm); | |
| vm.checkEnable(); | |
| addInterval( vm.checkEnable, 1000); | |
| } | |
| function bindContainer(vm){ | |
| var container = $('#container'); | |
| ko.cleanNode(container[0]); | |
| ko.applyBindings(vm, container[0]); | |
| } | |
| return { | |
| init: initialize | |
| }; | |
| }); | |
| // APN Setting 模块 | |
| define("network_apn_set","underscore jquery knockout set service".split(" "), | |
| function (_, $, ko, config, service) { | |
| //获取鉴权方式 | |
| function getAuthModes() { | |
| return _.map(config.APN_AUTH_MODES, function (item) { | |
| return new Option(item.name, item.value); | |
| }); | |
| } | |
| function getApnPdpTypes() { | |
| var pdpTypesArray = [new Option('IPv4', 'IP')]; | |
| if (config.IPV6_SUPPORT) { | |
| pdpTypesArray.push(new Option('IPv6', 'IPv6')); | |
| if (config.IPV4V6_SUPPORT) { | |
| pdpTypesArray.push(new Option('IPv4v6', 'IPv4v6')); | |
| } | |
| if (config.IPV4_AND_V6_SUPPORT) { | |
| pdpTypesArray.push(new Option('IPv4 & IPv6', 'IPv4v6')); | |
| } | |
| } | |
| return pdpTypesArray; | |
| } | |
| //获取apn相关信息 | |
| function getApnSet() { | |
| var apnInfo = service.getApnSettings(); | |
| apnInfo.ipv6ApnConfigs = getApnConfigs(apnInfo.ipv6APNs, true); | |
| apnInfo.apnConfigs = getApnConfigs(apnInfo.APNs, false); | |
| apnInfo.autoApnConfigs = getAutoApnsConfig(apnInfo.autoApns, apnInfo.autoApnsV6); | |
| return apnInfo; | |
| } | |
| var apnConfigs = {}; | |
| var ipv6ApnConfigs = {}; | |
| var autoApnConfigs = {}; | |
| //解析自动apn信息 | |
| function getAutoApnsConfig(autoApnV4, autoApnV6) { | |
| var autoApnsV4 = []; | |
| var autoApnsV6 = []; | |
| if (autoApnV4 && autoApnV4.length > 5) { | |
| var apnArr = autoApnV4.split("||"); | |
| for (var ki = 0; ki < apnArr.length; ki++) { | |
| if (apnArr[ki] != "") { | |
| var apnItem = parseApnItem(apnArr[ki], false); | |
| autoApnsV4.push(apnItem); | |
| } | |
| } | |
| } | |
| if (autoApnV6 && autoApnV6.length > 5) { | |
| var apnArr = autoApnV6.split("||"); | |
| for (var ki = 0; ki < apnArr.length; ki++) { | |
| if (apnArr[ki] != "") { | |
| var apnItem = parseApnItem(apnArr[ki], false); | |
| autoApnsV6.push(apnItem); | |
| } | |
| } | |
| } | |
| return dealAutoApnsV4V6(autoApnsV4, autoApnsV6); | |
| } | |
| //解析apn信息 | |
| function getApnConfigs(apnsStr, isIpv6) { | |
| var apnCfgs = []; | |
| var theApnConfigs = {}; | |
| if (apnsStr && apnsStr.length > 10) { | |
| var apnArr = apnsStr.split("||"); | |
| for (var ki = 0; ki < apnArr.length; ki++) { | |
| if (apnArr[ki] != "") { | |
| var apnItem = parseApnItem(apnArr[ki], isIpv6); | |
| apnCfgs.push(apnItem); | |
| theApnConfigs[apnItem.profileName] = apnItem; | |
| } | |
| } | |
| } | |
| if (isIpv6 == false) { | |
| apnConfigs = theApnConfigs; | |
| } else { | |
| ipv6ApnConfigs = theApnConfigs; | |
| } | |
| return apnCfgs; | |
| } | |
| //解析单条apn信息 | |
| function parseApnItem(apnStr, isIpv6) { | |
| var apnItem = {}; | |
| var items = apnStr.split("($)"); | |
| for (var ki = 0; ki < items.length; ki++) { | |
| apnItem.profileName = items[0]; | |
| apnItem.pdpType = items[7]; | |
| if (isIpv6 == false) { | |
| apnItem.dnsMode = items[10]; | |
| apnItem.dns1 = items[11]; | |
| apnItem.dns2 = items[12]; | |
| apnItem.wanApn = items[1]; | |
| apnItem.authMode = items[4].toLowerCase(); | |
| apnItem.username = items[5]; | |
| apnItem.password = items[6]; | |
| } else { | |
| apnItem.dnsModeV6 = items[10]; | |
| apnItem.dns1V6 = items[11]; | |
| apnItem.dns2V6 = items[12]; | |
| apnItem.wanApnV6 = items[1]; | |
| apnItem.authModeV6 = items[4].toLowerCase(); | |
| apnItem.usernameV6 = items[5]; | |
| apnItem.passwordV6 = items[6]; | |
| } | |
| } | |
| return apnItem; | |
| } | |
| //合并V4\V6自动apn信息 | |
| function dealAutoApnsV4V6(v4, v6) { | |
| autoApnConfigs = {}; | |
| var autoApns = []; | |
| for (var ki = 0; ki < v4.length; ki++) { | |
| var apnElem = v4[ki]; | |
| var itemsV6 = v6[ki]; | |
| if (itemsV6 && (itemsV6.pdpType == 'IPv6' || itemsV6.pdpType == 'IPv4v6')) { | |
| apnElem.usernameV6 = itemsV6.username; | |
| apnElem.passwordV6 = itemsV6.password; | |
| apnElem.dns1V6 = itemsV6.dns1; | |
| apnElem.dns2V6 = itemsV6.dns2; | |
| apnElem.wanApnV6 = itemsV6.wanApn; | |
| apnElem.authModeV6 = itemsV6.authMode; | |
| apnElem.dnsModeV6 = itemsV6.dnsMode; | |
| } | |
| autoApns.push(apnElem); | |
| autoApnConfigs[apnElem.profileName] = apnElem; | |
| } | |
| return autoApns; | |
| } | |
| function getProfileOptions(apns) { | |
| return _.map(apns, function (item) { | |
| return new Option(item.profileName, item.profileName); | |
| }); | |
| } | |
| //APNViewModel | |
| function APNViewModel() { | |
| var target = this; | |
| var apnSettings = getApnSet(); | |
| if (apnSettings.apnNumPreset) { | |
| config.maxApnNumber = apnSettings.apnNumPreset; | |
| } | |
| target.defApn = ko.observable(apnSettings.profileName); //当前默认APN | |
| target.apnMode = ko.observable(apnSettings.apnMode); | |
| target.autoProfiles = ko.observableArray(getProfileOptions(apnSettings.autoApnConfigs)); | |
| target.profiles = ko.observableArray(getProfileOptions(apnSettings.apnConfigs)); | |
| target.wanDial = ko.observable(apnSettings.wanDial); | |
| target.showApnDns = ko.observable(config.SHOW_APN_DNS); | |
| target.index = ko.observable(apnSettings.currIndex); | |
| target.supportIPv6 = ko.observable(config.IPV6_SUPPORT); | |
| target.supportIpv4AndIpv6 = ko.observable(config.IPV4_AND_V6_SUPPORT); | |
| target.apn = ko.observable(apnSettings.wanApn); | |
| target.dnsMode = ko.observable(apnSettings.dnsMode == 'manual' ? 'manual' : 'auto'); | |
| target.dns1 = ko.observable(apnSettings.dns1); | |
| target.dns2 = ko.observable(apnSettings.dns2); | |
| target.authModes = ko.observableArray(getAuthModes()); | |
| target.username = ko.observable(apnSettings.username); | |
| target.password = ko.observable(apnSettings.password); | |
| target.pdpTypes = ko.observableArray(getApnPdpTypes()); | |
| target.selectedPdpType = ko.observable(apnSettings.pdpType); | |
| target.selectedPdpTypeTmp = ko.observable(apnSettings.pdpType); //the PdpType select's value before chang | |
| target.profileName = ko.observable(apnSettings.profileName); //当前编辑框中的 | |
| target.selectedProfile = ko.observable(apnSettings.profileName); //当前下拉框选择的APN | |
| target.showPassword = ko.observable(false); | |
| target.apnV6 = ko.observable(apnSettings.wanApnV6); | |
| target.dnsModeV6 = ko.observable(apnSettings.dnsModeV6 == 'manual' ? 'manual' : 'auto'); | |
| target.dns1V6 = ko.observable(apnSettings.dns1V6); | |
| target.dns2V6 = ko.observable(apnSettings.dns2V6); | |
| target.authModesV6 = ko.observableArray(getAuthModes()); | |
| target.usernameV6 = ko.observable(apnSettings.usernameV6); | |
| target.passwordV6 = ko.observable(apnSettings.passwordV6); | |
| target.pdpTypeNote = ko.observable(true); | |
| if (apnSettings.autoApnConfigs && apnSettings.autoApnConfigs.length > 0) { | |
| target.selectedAutoProfile = ko.observable(apnSettings.autoApnConfigs[0].profileName); | |
| } else { | |
| target.selectedAutoProfile = ko.observable(); | |
| } | |
| if (config.EMPTY_APN_SUPPORT == false) { | |
| $("#apn_ipv4_apn").addClass("required"); | |
| $("#apn_ipv6_apn").addClass("required"); | |
| } else { | |
| $("#apn_ipv4_apn").removeClass("required"); | |
| $("#apn_ipv6_apn").removeClass("required"); | |
| } | |
| target.disableProfile = ko.observable(false); //表示处于新增页面 | |
| target.addApnHide = ko.observable(true); | |
| target.defaultCfg = ko.observable(true); //当前选中的是默认APN | |
| target.predeterminedCfg = ko.observable(true); //当前选中的是预置的APN | |
| target.selectedAuthentication = ko.observable(apnSettings.authMode); | |
| target.selectedAuthenticationV6 = ko.observable(apnSettings.authModeV6); | |
| target.transApnV6 = ko.observable('apn'); | |
| target.transDnsModeV6 = ko.observable('apn_dns_mode'); | |
| target.transDns1V6 = ko.observable('apn_dns1'); | |
| target.transDns2V6 = ko.observable('apn_dns2'); | |
| target.transAuthV6 = ko.observable('apn_authentication'); | |
| target.transUserNameV6 = ko.observable('apn_user_name'); | |
| target.transPasswordV6 = ko.observable('apn_password'); | |
| target.transApn = ko.observable(config.IPV4_AND_V6_SUPPORT ? 'apn_ipv4_apn' : 'apn'); | |
| target.transDnsMode = ko.observable(config.IPV4_AND_V6_SUPPORT ? 'apn_dns_mode_ipv4' : 'apn_dns_mode'); | |
| target.transDns1 = ko.observable(config.IPV4_AND_V6_SUPPORT ? 'apn_dns1_ipv4' : 'apn_dns1'); | |
| target.transDns2 = ko.observable(config.IPV4_AND_V6_SUPPORT ? 'apn_dns2_ipv4' : 'apn_dns2'); | |
| target.transAuth = ko.observable(config.IPV4_AND_V6_SUPPORT ? 'apn_authentication_ipv4' : 'apn_authentication'); | |
| target.transUserName = ko.observable(config.IPV4_AND_V6_SUPPORT ? 'apn_user_name_ipv4' : 'apn_user_name'); | |
| target.transPassword = ko.observable(config.IPV4_AND_V6_SUPPORT ? 'apn_password_ipv4' : 'apn_password'); | |
| target.setDefaultVisible = ko.observable(!isConnectedNetWork()); | |
| target.tmp1 = ko.computed(function () { | |
| if (target.selectedPdpType() == "IPv6") { | |
| target.transApnV6('apn'); | |
| target.transDnsModeV6('apn_dns_mode'); | |
| target.transDns1V6('apn_dns1'); | |
| target.transDns2V6('apn_dns2'); | |
| target.transAuthV6('apn_authentication'); | |
| target.transUserNameV6('apn_user_name'); | |
| target.transPasswordV6('apn_password'); | |
| } else if (config.IPV4_AND_V6_SUPPORT && target.selectedPdpType() == 'IPv4v6') { | |
| target.transApn('apn_ipv4_apn'); | |
| target.transDnsMode('apn_dns_mode_ipv4'); | |
| target.transDns1('apn_dns1_ipv4'); | |
| target.transDns2('apn_dns2_ipv4'); | |
| target.transAuth('apn_authentication_ipv4'); | |
| target.transUserName('apn_user_name_ipv4'); | |
| target.transPassword('apn_password_ipv4'); | |
| target.transApnV6('apn_ipv6_apn'); | |
| target.transDnsModeV6('apn_dns_mode_ipv6'); | |
| target.transDns1V6('apn_dns1_ipv6'); | |
| target.transDns2V6('apn_dns2_ipv6'); | |
| target.transAuthV6('apn_authentication_ipv6'); | |
| target.transUserNameV6('apn_user_name_ipv6'); | |
| target.transPasswordV6('apn_password_ipv6'); | |
| } else if (target.selectedPdpType() == "IP" || target.selectedPdpType() == "IPv4") { | |
| target.transApn('apn'); | |
| target.transDnsMode('apn_dns_mode'); | |
| target.transDns1('apn_dns1'); | |
| target.transDns2('apn_dns2'); | |
| target.transAuth('apn_authentication'); | |
| target.transUserName('apn_user_name'); | |
| target.transPassword('apn_password'); | |
| } else { //config.IPV4V6_SUPPORT && target.selectedPdpType() == 'IPv4v6' | |
| target.transApn('apn'); | |
| target.transDnsMode('apn_dns_mode'); | |
| target.transDns1('apn_dns1'); | |
| target.transDns2('apn_dns2'); | |
| target.transAuth('apn_authentication'); | |
| target.transUserName('apn_user_name'); | |
| target.transPassword('apn_password'); | |
| } | |
| $("#apn_setting_form").translate(); | |
| }); | |
| target.autoApnChecked = ko.computed(function () { | |
| return target.apnMode() == "auto"; | |
| }); | |
| target.hasCapacity = ko.computed(function () { | |
| if (target.profiles().length < config.maxApnNumber) { | |
| return true; | |
| } else { | |
| return false; | |
| } | |
| }); | |
| target.showDnsV6 = ko.computed(function () { | |
| return target.dnsModeV6() == "manual"; | |
| }); | |
| target.showDns = ko.computed(function () { | |
| return target.dnsMode() == "manual"; | |
| }); | |
| checkDefaultProfileStatus(); | |
| target.checkInputDisable = ko.computed(function () { | |
| if (target.apnMode() != "auto" && (target.predeterminedCfg() == false && target.defaultCfg() == true) && !isConnectedNetWork()) { | |
| return false; | |
| } | |
| if (((target.apnMode() != "auto" && (target.predeterminedCfg() || target.defaultCfg()) && !target.disableProfile())) || target.apnMode() == "auto") { | |
| return true; | |
| } | |
| if ((!target.disableProfile() || !(target.predeterminedCfg() || target.defaultCfg())) && target.apnMode() != "auto") { | |
| return false; | |
| } | |
| return false; | |
| }); | |
| var data = service.getDeviceInfo(); | |
| target.pdpTypeChangeAlert = pdpTypeChangeAlertFunc; | |
| target.showAutoApnDetail = ko.computed(function () { | |
| if (target.apnMode() != "auto") { | |
| return true; | |
| } else { | |
| return target.autoProfiles().length > 0; | |
| } | |
| }); | |
| //密码显示事件 | |
| target.showPasswordHandler = function () { | |
| var checkbox = $("#showPassword:checked"); | |
| if (checkbox && checkbox.length == 0) { | |
| target.showPassword(true); | |
| } else { | |
| target.showPassword(false); | |
| } | |
| }; | |
| //auto apn profile change 事件处理 | |
| target.autoProfileChangeHandler = autoProfileChangeHandlerFunc; | |
| //profile change 事件处理 | |
| target.profileChangeHandler = profileChangeHandlerFunc; | |
| //切换profile时重置下面的显示项 | |
| target.setUIData = setUIDataFunc; | |
| //设置默认apn状态 | |
| function checkDefaultProfileStatus() { | |
| var index = getApnIndex(); | |
| //默认apn不允许编辑 | |
| if (target.apnMode() != "auto") { //当前选中与实际不一致的话 | |
| if (target.selectedProfile() != target.defApn()) { | |
| target.defaultCfg(false); | |
| } else { | |
| target.defaultCfg(true); //默认APN | |
| } | |
| } else { | |
| if (target.selectedAutoProfile() != target.defApn()) { | |
| target.defaultCfg(false); | |
| } else { | |
| target.defaultCfg(true); //默认APN | |
| } | |
| } | |
| if (index >= config.defaultApnSize) { | |
| target.predeterminedCfg(false); | |
| } else { | |
| target.predeterminedCfg(true); //预置APN | |
| } | |
| } | |
| //设置为默认apn | |
| target.setDefaultAct = setDefaultActFunc; | |
| //APN mode change 事件处理 | |
| target.apnModeChangeHandler = apnModeChangeHandlerFunc; | |
| function doSetDefaultAct() { | |
| var index = 0; | |
| if (target.apnMode() != 'auto') { | |
| index = getApnIndex(); | |
| target.selectedProfile($("#profile").val()); | |
| } else { | |
| index = getAutoApnIndex(); | |
| target.selectedAutoProfile($("#autoProfile").val()); | |
| } | |
| var selectedProfileDetail = target.getSelectedManualProfile(); | |
| service.setDefaultApn({ | |
| index: index, | |
| apnMode: target.apnMode(), | |
| pdpType: selectedProfileDetail.pdpType, | |
| profileName: selectedProfileDetail.profileName, | |
| wanApn: selectedProfileDetail.wanApn, | |
| authMode: selectedProfileDetail.authMode, | |
| username: selectedProfileDetail.username, | |
| password: selectedProfileDetail.password, | |
| dnsMode: config.SHOW_APN_DNS ? selectedProfileDetail.dnsMode : 'auto', | |
| dns1: config.SHOW_APN_DNS ? selectedProfileDetail.dns1 : '', | |
| dns2: config.SHOW_APN_DNS ? selectedProfileDetail.dns2 : '' | |
| }, function (data) { | |
| if (data.result) { | |
| //showLoading("apn_alert_restart"); | |
| //restartDevice(service); | |
| addTimeout(function () { | |
| initialize(true); | |
| target.apnModeChangeHandler(); | |
| successOverlay(); | |
| }, 500); | |
| } else { | |
| errorOverlay(); | |
| } | |
| }, function (data) { | |
| errorOverlay(); | |
| }); | |
| } | |
| target.getSelectedManualProfile = getSelectedManualProfileFunc; | |
| //获取自动apn索引 | |
| function getAutoApnIndex() { | |
| var configs = $("#autoProfile option"); | |
| for (var ki = 0; ki < configs.length; ki++) { | |
| if (configs[ki].value == target.selectedAutoProfile()) { | |
| return ki; | |
| } | |
| } | |
| return configs.length - 1; | |
| } | |
| //获取apn索引 | |
| function getApnIndex() { | |
| var configs = $("#profile option"); | |
| if (configs.length == 0) { | |
| configs = target.profiles(); | |
| } | |
| var ki = 0; | |
| for (; ki < configs.length; ki++) { | |
| if (configs[ki].value == target.selectedProfile()) { | |
| break; | |
| } | |
| } | |
| return ki; | |
| } | |
| //保存APN设置信息 | |
| target.saveAct = saveActFunc; | |
| //编辑APN信息 | |
| function editApnSetting(preAct) { //默认设置按钮触发为TRUE | |
| showLoading(); | |
| var apnIndex = getApnIndex(); | |
| var sameInfo = false; | |
| if (config.IPV4V6_SUPPORT && target.selectedPdpType() == 'IPv4v6') { | |
| sameInfo = true; | |
| } | |
| var needDoDefault = false; | |
| if (preAct || (target.predeterminedCfg() || target.defaultCfg())) { | |
| needDoDefault = true; | |
| } | |
| service.addOrEditApn({ | |
| profileName: target.profileName(), | |
| pdpType: target.selectedPdpType(), | |
| index: apnIndex, | |
| wanApn: target.apn(), | |
| authMode: target.selectedAuthentication(), | |
| username: target.username(), | |
| password: target.password(), | |
| dnsMode: config.SHOW_APN_DNS ? target.dnsMode() : 'auto', | |
| dns1: config.SHOW_APN_DNS ? target.dns1() : '', | |
| dns2: config.SHOW_APN_DNS ? target.dns2() : '', | |
| wanApnV6: sameInfo ? target.apn() : target.apnV6(), | |
| authModeV6: sameInfo ? target.selectedAuthentication() : target.selectedAuthenticationV6(), | |
| usernameV6: sameInfo ? target.username() : target.usernameV6(), | |
| passwordV6: sameInfo ? target.password() : target.passwordV6(), | |
| dnsModeV6: config.SHOW_APN_DNS ? (sameInfo ? target.dnsMode() : target.dnsModeV6()) : 'auto', | |
| dns1V6: config.SHOW_APN_DNS ? (sameInfo ? target.dns1() : target.dns1V6()) : '', | |
| dns2V6: config.SHOW_APN_DNS ? (sameInfo ? target.dns2() : target.dns2V6()) : '' | |
| }, function (data) { | |
| if (data.result) { | |
| apnSettings = getApnSet(); | |
| if (target.profileName() != target.selectedProfile()) { | |
| var newProfileName = target.profileName(); | |
| target.profiles(getProfileOptions(apnSettings.apnConfigs)); | |
| $('#profile').val(newProfileName).trigger('change'); | |
| } | |
| if (needDoDefault == false) { | |
| successOverlay(); | |
| } else { | |
| doSetDefaultAct(); | |
| } | |
| } else { | |
| errorOverlay(); | |
| } | |
| }, function (data) { | |
| errorOverlay(); | |
| }); | |
| } | |
| //新增APN信息 | |
| function addNewApnSetting() { | |
| showLoading("waiting"); | |
| var optionLen = $("option", "#profile").length; | |
| if (optionLen < config.defaultApnSize) { | |
| errorOverlay(); | |
| return; | |
| } | |
| // 支持IPv4v6,并且选择IPv4v6时,IPv4 与 IPv6下发相同的信息 | |
| // 支持IPv4 & v6,并且选择IPv4v6时,IPv4 与 IPv6下发各自的信息 | |
| var sameInfo = false; | |
| if (config.IPV4V6_SUPPORT && target.selectedPdpType() == 'IPv4v6') { | |
| sameInfo = true; | |
| } | |
| service.addOrEditApn({ | |
| profileName: target.profileName(), | |
| pdpType: target.selectedPdpType(), | |
| index: optionLen, | |
| wanApn: target.apn(), | |
| authMode: target.selectedAuthentication(), | |
| username: target.username(), | |
| password: target.password(), | |
| dnsMode: config.SHOW_APN_DNS ? target.dnsMode() : 'auto', | |
| dns1: config.SHOW_APN_DNS ? target.dns1() : '', | |
| dns2: config.SHOW_APN_DNS ? target.dns2() : '', | |
| wanApnV6: sameInfo ? target.apn() : target.apnV6(), | |
| authModeV6: sameInfo ? target.selectedAuthentication() : target.selectedAuthenticationV6(), | |
| usernameV6: sameInfo ? target.username() : target.usernameV6(), | |
| passwordV6: sameInfo ? target.password() : target.passwordV6(), | |
| dnsModeV6: config.SHOW_APN_DNS ? (sameInfo ? target.dnsMode() : target.dnsModeV6()) : 'auto', | |
| dns1V6: config.SHOW_APN_DNS ? (sameInfo ? target.dns1() : target.dns1V6()) : '', | |
| dns2V6: config.SHOW_APN_DNS ? (sameInfo ? target.dns2() : target.dns2V6()) : '' | |
| }, function (data) { | |
| if (data.result) { | |
| apnSettings = getApnSet(); | |
| if (target.profileName() != target.selectedProfile()) { | |
| var newProfileName = target.profileName(); | |
| target.profiles(getProfileOptions(apnSettings.apnConfigs)); | |
| $('#profile').val(newProfileName).trigger('change'); | |
| } | |
| doSetDefaultAct(); | |
| } else { | |
| errorOverlay(); | |
| } | |
| }, function (data) { | |
| errorOverlay(); | |
| }); | |
| } | |
| var tempApn = {}; | |
| //删除APN | |
| target.deleteAct = deleteActFunc; | |
| //取消新增APN | |
| target.cancelAddAct = cancelAddActFunc; | |
| //进入新增APN页面 | |
| target.addAct = addActFunc; | |
| //进入新增APN页面 | |
| function addActFunc() { | |
| clearValidateMsg('#apn_setting_form'); | |
| target.pdpTypeNote(true); | |
| target.disableProfile(true); | |
| target.addApnHide(true); | |
| tempApn = { | |
| profileName: target.profileName(), | |
| selectedPdpType: target.selectedPdpType(), | |
| wanApnV6: target.apnV6(), | |
| dnsModeV6: config.SHOW_APN_DNS ? target.dnsModeV6() : 'auto', | |
| dns1V6: config.SHOW_APN_DNS ? target.dns1V6() : '', | |
| dns2V6: config.SHOW_APN_DNS ? target.dns2V6() : '', | |
| authModeV6: target.selectedAuthenticationV6(), | |
| usernameV6: target.usernameV6(), | |
| passwordV6: target.passwordV6(), | |
| wanApn: target.apn(), | |
| dnsMode: config.SHOW_APN_DNS ? target.dnsMode() : 'auto', | |
| dns1: config.SHOW_APN_DNS ? target.dns1() : '', | |
| dns2: config.SHOW_APN_DNS ? target.dns2() : '', | |
| authMode: target.selectedAuthentication(), | |
| username: target.username(), | |
| password: target.password(), | |
| }; | |
| target.profileName(""); | |
| target.selectedPdpType("IP"); | |
| target.selectedPdpTypeTmp("IP"); | |
| target.apnV6(""); | |
| target.dnsModeV6("auto"); | |
| target.dns1V6(""); | |
| target.dns2V6(""); | |
| target.selectedAuthenticationV6("none"); | |
| target.usernameV6(""); | |
| target.passwordV6(""); | |
| target.apn(""); | |
| target.dnsMode("auto"); | |
| target.dns1(""); | |
| target.dns2(""); | |
| target.selectedAuthentication("none"); | |
| target.username(""); | |
| target.password(""); | |
| } | |
| //取消新增APN | |
| function cancelAddActFunc() { | |
| clearValidateMsg('#apn_setting_form'); | |
| target.pdpTypeNote(false); | |
| target.disableProfile(false); | |
| target.addApnHide(false); | |
| target.profileName(tempApn.profileName); | |
| target.selectedPdpType(tempApn.selectedPdpType); | |
| target.selectedPdpTypeTmp(tempApn.selectedPdpType); | |
| target.apnV6(tempApn.wanApnV6); | |
| target.dnsModeV6(tempApn.dnsModeV6); | |
| target.dns1V6(tempApn.dns1V6); | |
| target.dns2V6(tempApn.dns2V6); | |
| target.selectedAuthenticationV6(tempApn.authModeV6); | |
| target.usernameV6(tempApn.usernameV6); | |
| target.passwordV6(tempApn.passwordV6); | |
| target.apn(tempApn.wanApn); | |
| target.dnsMode(tempApn.dnsMode); | |
| target.dns1(tempApn.dns1); | |
| target.dns2(tempApn.dns2); | |
| target.selectedAuthentication(tempApn.authMode); | |
| target.username(tempApn.username); | |
| target.password(tempApn.password); | |
| } | |
| //删除APN | |
| function deleteActFunc() { | |
| if (!target.selectedProfile()) { | |
| showAlert("apn_no_select_alert"); | |
| return false; | |
| } | |
| if (target.predeterminedCfg()) { //预置的apn不允许删除 | |
| errorOverlay("apn_delete_cant_delete_default"); | |
| return false; | |
| } | |
| if (getApnSet().profileName == target.profileName()) { | |
| errorOverlay("apn_cant_delete_current"); | |
| return false; | |
| } | |
| showConfirm("apn_delete_confirm", function () { | |
| showLoading('deleting'); | |
| service.deleteApn({ | |
| index: getApnIndex() | |
| }, function (data) { | |
| if (data.result) { | |
| target.profiles(getProfileOptions(getApnSet().apnConfigs)); | |
| target.selectedProfile(target.defApn()); | |
| target.profileChangeHandler(); | |
| successOverlay(); | |
| } else { | |
| errorOverlay(); | |
| } | |
| }, function (data) { | |
| errorOverlay(); | |
| }); | |
| }); | |
| } | |
| //保存APN设置信息 | |
| function saveActFunc() { | |
| if (!$('#apn_setting_form').valid()) { | |
| return false; | |
| } | |
| if (!target.selectedProfile() && !target.disableProfile()) { //不是增加时的设置需要判断是否选择了Profile | |
| showAlert("apn_no_select_alert"); | |
| return false; | |
| } | |
| var exist = false; | |
| $.each(target.profiles(), function (i, e) { | |
| if (e.value == target.profileName()) { | |
| exist = true; | |
| } | |
| }); | |
| if (target.disableProfile() == false) { | |
| if (exist && target.selectedProfile() != target.profileName()) { | |
| showInfo("apn_save_profile_exist"); | |
| return false; | |
| } | |
| if (target.predeterminedCfg()) { //预置的APN不可以修改 | |
| errorOverlay(); | |
| return false; | |
| } | |
| if (target.predeterminedCfg() || target.defaultCfg()) { | |
| //showConfirm("apn_alert", function () { | |
| editApnSetting(false); | |
| //}); | |
| } else { | |
| editApnSetting(false); | |
| } | |
| } else { | |
| if ($("#profile option").length >= config.maxApnNumber) { | |
| showInfo({ | |
| msg: "apn_profile_full", | |
| params: [config.maxApnNumber] | |
| }); | |
| return false; | |
| } | |
| if (exist) { | |
| showInfo("apn_save_profile_exist"); | |
| return false; | |
| } | |
| var info = service.getStatusInfo(); | |
| if (info.connectStatus != "ppp_connected") { | |
| //showConfirm("apn_alert", function () { | |
| addNewApnSetting(); | |
| //}); | |
| } else { | |
| showConfirm("apn_diconneted_network_confirm", function () { | |
| showLoading('disconnecting'); | |
| service.disconnect({}, function (data) { | |
| if (data.result) { | |
| config.connect_flag = true; | |
| addNewApnSetting(); | |
| } else { | |
| errorOverlay(); | |
| } | |
| }); | |
| }); | |
| } | |
| } | |
| } | |
| function getSelectedManualProfileFunc() { | |
| var cfg = {}; | |
| var profileVal = $("#profile").val(); | |
| if (typeof target.selectedProfile() == 'undefined') { | |
| target.selectedProfile(profileVal); | |
| } | |
| var cfgV4 = apnConfigs[profileVal]; | |
| var cfgV6 = ipv6ApnConfigs[profileVal]; | |
| if (cfgV4 && !cfgV6) { | |
| $.extend(cfg, cfgV4); | |
| } else if (cfgV4 && cfgV6) { | |
| if (!!cfgV4.pdpType) { | |
| $.extend(cfg, cfgV6); | |
| $.extend(cfg, cfgV4); | |
| } else { | |
| $.extend(cfg, cfgV4); | |
| $.extend(cfg, cfgV6); | |
| } | |
| } | |
| return cfg; | |
| } | |
| //APN mode change 事件处理 | |
| function apnModeChangeHandlerFunc(data, event) { | |
| if (target.apnMode() != 'auto') { | |
| target.profileChangeHandler(); | |
| } else { | |
| if (target.showAutoApnDetail()) { | |
| target.autoProfileChangeHandler(); | |
| } | |
| } | |
| return true; | |
| } | |
| //设置为默认apn | |
| function setDefaultActFunc() { | |
| if (!target.selectedProfile()) { | |
| showAlert("apn_no_select_alert"); | |
| return false; | |
| } | |
| var connectStatus = service.getConnectionInfo().connectStatus; | |
| if (connectStatus == "ppp_connecting") { | |
| showAlert({ | |
| msg: "apn_cant_modify_status", | |
| params: [$.i18n.prop("connecting").toLowerCase()] | |
| }); | |
| return false; | |
| } else if (connectStatus == "ppp_disconnecting") { | |
| showAlert({ | |
| msg: "apn_cant_modify_status", | |
| params: [$.i18n.prop("disconnecting").toLowerCase()] | |
| }); | |
| return false; | |
| } else if (connectStatus == "ppp_connected") { | |
| showAlert({ | |
| msg: "apn_cant_modify_status", | |
| params: [$.i18n.prop("connected").toLowerCase()] | |
| }); | |
| return false; | |
| } | |
| if (target.apnMode() == 'auto' || target.predeterminedCfg()) { | |
| //showConfirm("apn_alert", function () { | |
| showLoading("waiting"); | |
| doSetDefaultAct(); | |
| //}); | |
| } else { | |
| if ($('#apn_setting_form').valid() == false) { | |
| $(".error:first", "#apn_setting_form").focus(); | |
| } else { | |
| var exist = false; | |
| $.each(target.profiles(), function (i, e) { | |
| if (e.value == target.profileName()) { | |
| exist = true; | |
| } | |
| }); | |
| if (exist && target.selectedProfile() != target.profileName()) { | |
| showInfo("apn_save_profile_exist"); | |
| return false; | |
| } | |
| //showLoading("waiting"); | |
| //showConfirm("apn_alert", function () { | |
| editApnSetting(true); | |
| //}); | |
| } | |
| } | |
| } | |
| //切换profile时重置下面的显示项 | |
| function setUIDataFunc(data) { | |
| clearValidateMsg('#apn_setting_form'); | |
| if (!data) { | |
| return; | |
| } | |
| target.selectedPdpType(data.pdpType || 'IP'); | |
| target.selectedPdpTypeTmp(data.pdpType || 'IP'); | |
| target.profileName(data.profileName); | |
| target.apn(data.wanApn); | |
| target.dnsMode(data.dnsMode != 'manual' ? 'auto' : 'manual'); | |
| target.dns1(data.dns1); | |
| target.dns2(data.dns2); | |
| target.username(data.username); | |
| target.password(data.password); | |
| target.selectedAuthentication(data.authMode || 'none'); | |
| target.apnV6(data.wanApnV6); | |
| target.dnsModeV6(data.dnsModeV6 != 'manual' ? 'auto' : 'manual'); | |
| target.dns1V6(data.dns1V6); | |
| target.dns2V6(data.dns2V6); | |
| target.usernameV6(data.usernameV6); | |
| target.passwordV6(data.passwordV6); | |
| target.selectedAuthenticationV6(data.authModeV6 || 'none'); | |
| } | |
| //profile change 事件处理 | |
| function profileChangeHandlerFunc(data, event) { | |
| target.pdpTypeNote(true); | |
| if (target.apnMode() != 'manual') { | |
| return true; | |
| } | |
| var cfg = target.getSelectedManualProfile(); | |
| target.setUIData(cfg); | |
| checkDefaultProfileStatus(); | |
| return true; | |
| } | |
| //auto apn profile change 事件处理 | |
| function autoProfileChangeHandlerFunc(data, event) { | |
| if (target.apnMode() != 'auto') { | |
| return true; | |
| } | |
| var cfg = autoApnConfigs[target.selectedAutoProfile()]; | |
| target.setUIData(cfg); | |
| checkDefaultProfileStatus(); | |
| return true; | |
| } | |
| function pdpTypeChangeAlertFunc() { | |
| if (target.pdpTypeNote()) { | |
| showAlert({ | |
| msg: "apn_pdptype_change_note", | |
| params: [data.lanDomain, data.ipAddress] | |
| }); | |
| } | |
| if (target.apnMode() != "auto" && !target.disableProfile()) { //如果是手动非ADD状态,切换PDP类型时,不改变界面显示的各项值 | |
| if ((config.IPV4_AND_V6_SUPPORT && target.selectedPdpTypeTmp() != 'IPv4v6' && target.selectedPdpType() != 'IPv4v6') || !config.IPV4_AND_V6_SUPPORT) { // | |
| if (target.selectedPdpTypeTmp() == 'IPv6') { //V6 -> V4 / V4V6 | |
| target.apn(target.apnV6()); | |
| target.dnsMode(target.dnsModeV6()); | |
| target.dns1(target.dns1V6()); | |
| target.dns2(target.dns2V6()); | |
| target.username(target.usernameV6()); | |
| target.password(target.passwordV6()); | |
| target.selectedAuthentication(target.selectedAuthenticationV6()); | |
| } else if (target.selectedPdpType() == 'IPv6') { //V4 / V4V6 -> V6 | |
| target.apnV6(target.apn()); | |
| target.dnsModeV6(target.dnsMode()); | |
| target.dns1V6(target.dns1()); | |
| target.dns2V6(target.dns2()); | |
| target.usernameV6(target.username()); | |
| target.passwordV6(target.password()); | |
| target.selectedAuthenticationV6(target.selectedAuthentication()); | |
| } | |
| } | |
| } | |
| target.selectedPdpTypeTmp(target.selectedPdpType()); | |
| } | |
| } | |
| //是否已联网 | |
| function isConnectedNetWork() { | |
| var info = service.getConnectionInfo(); | |
| return info.connectStatus == "ppp_connected"; | |
| } | |
| function initVar() { | |
| apnConfigs = {}; | |
| ipv6ApnConfigs = {}; | |
| autoApnConfigs = {}; | |
| } | |
| function bindContainer(vm){ | |
| var container = $('#container'); | |
| ko.cleanNode(container[0]); | |
| ko.applyBindings(vm, container[0]); | |
| } | |
| //初始化ViewModel | |
| function initialize(formInit) { | |
| initVar(); | |
| var vm = new APNViewModel(); | |
| bindContainer(vm); | |
| if (!formInit) { | |
| addInterval(function () { | |
| vm.setDefaultVisible(!isConnectedNetWork()); | |
| }, 1000); | |
| } | |
| $('#apn_setting_form').validate({ | |
| submitHandler: function () { | |
| vm.saveAct(); | |
| }, | |
| rules: { | |
| profile_name: 'apn_profile_name_check', | |
| apn_ipv4_apn: 'apn_check', | |
| apn_dns1_ipv4: "ipv4", | |
| apn_dns2_ipv4: "ipv4", | |
| apn_ipv6_apn: 'apn_check', | |
| apn_dns1_ipv6: "ipv6", | |
| apn_dns2_ipv6: "ipv6", | |
| apn_user_name_ipv4: 'ppp_username_check', | |
| apn_secretcode_ipv4: 'ppp_secretcode_check', | |
| apn_user_name_ipv6: 'ppp_username_check', | |
| apn_secretcode_ipv6: 'ppp_secretcode_check' | |
| } | |
| }); | |
| } | |
| return { | |
| init: initialize | |
| }; | |
| }); |