[T106][ZXW-22]7520V3SCV2.01.01.02P42U09_VEC_V0.8_AP_VEC origin source commit
Change-Id: Ic6e05d89ecd62fc34f82b23dcf306c93764aec4b
diff --git a/ap/app/zte_webui_min/js/net.js b/ap/app/zte_webui_min/js/net.js
new file mode 100755
index 0000000..f245f41
--- /dev/null
+++ b/ap/app/zte_webui_min/js/net.js
@@ -0,0 +1,4175 @@
+
+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
+ };
+});
\ No newline at end of file