define("sim_abnormal","jquery knockout service set main opmode".split(" "), | |
function ($, ko, service, config, home, opmode) { | |
function init() { | |
var container = $('#container')[0]; | |
ko.cleanNode(container); | |
var vm = new simViewMode(); | |
ko.applyBindings(vm, container); | |
$('#frmPUK').validate({ | |
submitHandler: function () { | |
vm.enterPUK(); | |
}, | |
rules: { | |
txtNewPIN: "pin_check", | |
txtConfirmPIN: { | |
equalToPin: "#txtNewPIN" | |
}, | |
txtPUK: "puk_check" | |
} | |
}); | |
$('#frmPIN').validate({ | |
submitHandler: function () { | |
vm.enterPIN(); | |
}, | |
rules: { | |
txtPIN: "pin_check" | |
} | |
}); | |
} | |
function simViewMode() { | |
var target = this; | |
var staInfo = service.getStatusInfo(); | |
var curCableMode = "PPPOE" == staInfo.blc_wan_mode || "AUTO_PPPOE" == staInfo.blc_wan_mode; | |
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) { | |
var wifiInfo = service.getWifiBasic(); | |
target.showQRCode = config.WIFI_SUPPORT_QR_CODE && wifiInfo.show_qrcode_flag; | |
} else { | |
target.showQRCode = config.WIFI_SUPPORT_QR_CODE; | |
} | |
target.qrcodeSrc = './pic/qrcode_ssid_wifikey.png?_=' + $.now(); | |
target.hasParentalControl = ko.observable(config.HAS_PARENTAL_CONTROL && curCableMode); | |
target.pageState = { | |
NO_SIM: 0, | |
WAIT_PIN: 1, | |
WAIT_PUK: 2, | |
PUK_LOCKED: 3, | |
LOADING: 4 | |
}; | |
target.isHomePage = ko.observable(false); | |
if (window.location.hash == "#main") { | |
target.isHomePage(true); | |
} | |
var info = service.getLoginData(); | |
target.PIN = ko.observable(); | |
target.newPIN = ko.observable(); | |
target.confirmPIN = ko.observable(); | |
target.PUK = ko.observable(); | |
target.pinNumber = ko.observable(info.pinnumber); | |
target.pukNumber = ko.observable(info.puknumber); | |
var state = computePageState(info); | |
target.page = ko.observable(state); | |
if (state == target.pageState.LOADING) { | |
addTimeout(refreshPage, 500); | |
} | |
target.showOpModeWindow = function () { | |
showSettingWindow("change_mode", "opmode_popup", "opmode_popup", 400, 300, function () {}); | |
}; | |
target.isLoggedIn = ko.observable(false); | |
target.enableFlag = ko.observable(false); | |
//更新当前工作模式状态信息 | |
target.refreshOpmodeInfo = function () { | |
var staInfo = service.getStatusInfo(); | |
target.isLoggedIn(staInfo.isLoggedIn); | |
if (!curCableMode && checkCableMode(staInfo.blc_wan_mode)) { //如果有线,则重新加载 | |
if (target.page() == target.pageState.NO_SIM || target.page() == target.pageState.WAIT_PIN || target.page() == target.pageState.WAIT_PUK || target.page() == target.pageState.PUK_LOCKED) { | |
window.location.reload(); | |
} | |
} | |
curCableMode = checkCableMode(staInfo.blc_wan_mode); | |
target.hasParentalControl(config.HAS_PARENTAL_CONTROL && curCableMode); | |
if (curCableMode && staInfo.ethWanMode.toUpperCase() == "DHCP") { | |
target.enableFlag(true); | |
} else if ((!curCableMode && staInfo.connectStatus != "ppp_disconnected") || (curCableMode && staInfo.rj45ConnectStatus != "idle" && staInfo.rj45ConnectStatus != "dead")) { | |
target.enableFlag(false); | |
} else { | |
target.enableFlag(true); | |
} | |
var mode = (staInfo.blc_wan_mode == "AUTO_PPP" || staInfo.blc_wan_mode == "AUTO_PPPOE") ? "AUTO" : staInfo.blc_wan_mode; | |
var currentOpMode = ""; | |
switch (mode) { | |
case "PPP": | |
currentOpMode = "opmode_gateway"; | |
break; | |
case "PPPOE": | |
currentOpMode = "opmode_cable"; | |
break; | |
case "AUTO": | |
currentOpMode = "opmode_auto"; | |
break; | |
default: | |
break; | |
} | |
$("#opmode").attr("data-trans", currentOpMode).text($.i18n.prop(currentOpMode)); | |
} | |
//刷新页面状态 | |
function refreshPage() { | |
var data = service.getLoginData(); | |
var state = computePageState(data); | |
if (state == target.pageState.LOADING) { | |
addTimeout(refreshPage, 500); | |
} else { | |
target.page(state); | |
target.pinNumber(data.pinnumber); | |
target.pukNumber(data.puknumber); | |
} | |
} | |
//输入PUK设置新PIN事件处理 | |
target.enterPUK = function () { | |
showLoading(); | |
target.page(target.pageState.LOADING); | |
var newPIN = target.newPIN(); | |
var confirmPIN = target.confirmPIN(); | |
var params = {}; | |
params.PinNumber = newPIN; | |
params.PUKNumber = target.PUK(); | |
service.enterPUK(params, function (data) { | |
if (!data.result) { | |
hideLoading(); | |
if (target.pukNumber() == 2) { | |
showAlert("last_enter_puk", function () { | |
refreshPage(); | |
}); | |
} else { | |
showAlert("puk_error", function () { | |
refreshPage(); | |
if (target.page() == target.pageState.PUK_LOCKED) { | |
hideLoading(); | |
} | |
}); | |
} | |
target.PUK(''); | |
target.newPIN(''); | |
target.confirmPIN(''); | |
} else { | |
refreshPage(); | |
if (target.page() == target.pageState.PUK_LOCKED) { | |
hideLoading(); | |
} | |
} | |
}); | |
}; | |
//验证输入PIN事件处理 | |
target.enterPIN = function () { | |
showLoading(); | |
target.page(target.pageState.LOADING); | |
var pin = target.PIN(); | |
service.enterPIN({ | |
PinNumber: pin | |
}, function (data) { | |
if (!data.result) { | |
hideLoading(); | |
if (target.pinNumber() == 2) { | |
showAlert("last_enter_pin", function () { | |
refreshPage(); | |
}); | |
} else { | |
showAlert("pin_error", function () { | |
refreshPage(); | |
}); | |
} | |
target.PIN(''); | |
} | |
refreshPage(); | |
if (target.page() == target.pageState.WAIT_PUK) { | |
hideLoading(); | |
} | |
}); | |
}; | |
if (target.hasRj45) { | |
target.refreshOpmodeInfo(); | |
addInterval(function () { | |
target.refreshOpmodeInfo(); | |
}, 1000); | |
} | |
//根据登录状态和SIM卡状态设置页面状态 | |
function computePageState(data) { | |
var state = data.modem_main_state; | |
if (state == "modem_undetected" || state == "modem_sim_undetected" || state == "modem_sim_destroy") { | |
return target.pageState.NO_SIM; | |
} else if (state == "modem_waitpin") { | |
return target.pageState.WAIT_PIN; | |
} else if ((state == "modem_waitpuk" || data.pinnumber == 0) && (data.puknumber != 0)) { | |
return target.pageState.WAIT_PUK; | |
} else if ((data.puknumber == 0 || state == "modem_sim_destroy") && state != "modem_sim_undetected" && state != "modem_undetected") { | |
return target.pageState.PUK_LOCKED; | |
} else if ($.inArray(state, config.TEMPORARY_MODEM_MAIN_STATE) != -1) { | |
return target.pageState.LOADING; | |
} else { | |
location.reload(); | |
} | |
} | |
} | |
return { | |
init: init | |
}; | |
}); | |
define("ota_update", "jquery jq_fileinput service knockout set statusBar".split(" "), | |
function ($, fileinput, service, ko, config, status) { | |
function FotaUpdateViewModel() { | |
var target = this; | |
var setting = service.getOTAUpdateSetting(); | |
target.allowRoamingUpdate = ko.observable(setting.allowRoamingUpdate); | |
target.hasDdns = config.DDNS_SUPPORT; | |
target.hasUpdateCheck = config.HAS_UPDATE_CHECK; | |
target.hasUssd = config.HAS_USSD; | |
target.isDataCard = config.PRODUCT_TYPE == 'DATACARD'; | |
target.lastCheckTime = ko.observable(''); | |
target.updateIntervalDay = ko.observable(setting.updateIntervalDay); | |
target.updateMode = ko.observable(setting.updateMode); | |
target.updateType = ko.observable(service.getUpdateType().update_type); | |
// 自动检测设置按钮事件 | |
target.apply = function () { | |
var updateSettingInfo = { | |
updateMode: target.updateMode(), | |
updateIntervalDay: target.updateIntervalDay(), | |
allowRoamingUpdate: target.allowRoamingUpdate() | |
}; | |
showLoading(); | |
service.setOTAUpdateSetting(updateSettingInfo, function (settingInfo) { | |
if (settingInfo && settingInfo.result == "success") { | |
setting.allowRoamingUpdate = target.allowRoamingUpdate(); | |
successOverlay(); | |
} else { | |
errorOverlay(); | |
} | |
}); | |
}; | |
// 按钮【检测】点击事件处理接口 | |
target.checkNewVersion = function () { | |
var newVersionState = service.getNewVersionState(); | |
if(newVersionState.fota_package_already_download == "yes"){ | |
showAlert("fota_package_already_download"); | |
return; | |
} | |
if(config.UPGRADE_TYPE=="FOTA"){ | |
var checkingState = ["checking"]; | |
if ($.inArray(newVersionState.fota_current_upgrade_state, checkingState) != -1) { | |
showAlert("ota_update_running"); | |
return; | |
} | |
} | |
// FOTA开始下载前,判断当前是否已经在下载过程中,防止错误清空fota_new_version_state状态 | |
var statusInfo = service.getStatusInfo(); | |
if (newVersionState.fota_current_upgrade_state == "prepare_install") { | |
showInfo('ota_download_success'); | |
return; | |
} | |
var upgradingState = ["downloading", "confirm_dowmload"]; | |
if ($.inArray(newVersionState.fota_current_upgrade_state, upgradingState) != -1) { | |
status.showOTAAlert(); | |
return; | |
} | |
if (statusInfo.roamingStatus) { | |
showConfirm("ota_check_roaming_confirm", function () { | |
checkNewVersion(); | |
}); | |
} else { | |
checkNewVersion(); | |
} | |
// 检测是否有新版本 | |
function checkNewVersion() { | |
showLoading("ota_new_version_checking"); | |
function checkNewVersionResult() { | |
var result = service.getNewVersionState(); | |
if (result.hasNewVersion) { | |
if(result.fota_new_version_state == "already_has_pkg"&&result.fota_current_upgrade_state !="prepare_install"&&result.fota_current_upgrade_state !="low_battery") | |
{ | |
addTimeout(checkNewVersionResult, 1000); | |
} | |
else | |
{ | |
status.showOTAAlert(); | |
} | |
} else if (result.fota_new_version_state == "no_new_version") { | |
showAlert("ota_no_new_version"); | |
}else if (result.fota_new_version_state == "check_failed" ) { | |
errorOverlay("ota_check_fail"); | |
} else if ( result.fota_new_version_state == "bad_network"){ | |
errorOverlay("ota_connect_server_failed"); | |
}else { | |
addTimeout(checkNewVersionResult, 1000); | |
} | |
} | |
service.setUpgradeSelectOp({selectOp: 'check'}, function (result) { | |
if (result.result == "success") { | |
checkNewVersionResult(); | |
} else { | |
errorOverlay(); | |
} | |
}); | |
} | |
}; | |
// 确认按钮状态:可用/灰化 | |
target.fixPageEnable = function () { | |
var connectStatusInfo = service.getStatusInfo(); | |
var opModeData = service.getOpMode(); | |
if (checkConnectedStatus(connectStatusInfo.connectStatus, opModeData.rj45_state, connectStatusInfo.connectWifiStatus)) { | |
enableBtn($("#btnCheckNewVersion")); | |
} else { | |
disableBtn($("#btnCheckNewVersion")); | |
} | |
}; | |
target.clickAllowRoamingUpdate = function () { | |
var checkedbox = $("#chkUpdateRoamPermission:checked"); | |
if (checkedbox && checkedbox.length == 0) { | |
target.allowRoamingUpdate("1"); | |
} else { | |
target.allowRoamingUpdate("0"); | |
} | |
}; | |
service.getOTAlastCheckTime({}, function(info){ | |
target.lastCheckTime(info.dm_last_check_time); | |
}); | |
} | |
// 获取升级文件大小 | |
function getFileSize(object){ | |
var fileLenth = 0; | |
var isIE = /msie/i.test(navigator.userAgent) && !window.opera; | |
if (isIE) { //如果是ie | |
var objectValue = object.value; | |
try { | |
var fso = new ActiveXObject("Scripting.FileSystemObject"); | |
fileLenth = parseInt(fso.GetFile(objectValue).size); | |
} catch (e) { | |
fileLenth = 1; | |
} | |
}else{ //对于非IE获得要上传文件的大小 | |
try{ | |
fileLenth = parseInt(object.files[0].size); | |
}catch (e) { | |
fileLenth = 1; //获取不到取-1 | |
} | |
} | |
return fileLenth/1024/1024; | |
} | |
function init() { | |
var container = $('#container')[0]; | |
ko.cleanNode(container); | |
var fwVm = new FotaUpdateViewModel(); | |
ko.applyBindings(fwVm, container); | |
if(fwVm.updateType() == "mifi_fota"){ | |
fwVm.fixPageEnable(); | |
addInterval(function () { | |
fwVm.fixPageEnable(); | |
}, 1000); | |
}else{ | |
if ($(".customfile").length == 0) { | |
$("#fileField").customFileInput(); | |
} | |
} | |
$('#frmOTAUpdate').validate({ | |
submitHandler: function () { | |
fwVm.apply(); | |
} | |
}); | |
} | |
return { | |
init: init | |
}; | |
}); | |
// SD卡 模块 | |
define("sd", "jquery set service knockout".split(" ") , function($, config, service, ko) { | |
// 基目录。感觉此根目录不显示给用户会更友好 | |
var basePath = config.SD_BASE_PATH; | |
function SDCardViewModel() { | |
var target = this; | |
var SDConfiguration = service.getSDConfiguration(); | |
target.selectedMode = ko.observable(SDConfiguration.sd_mode); | |
target.orignalMode = ko.observable(SDConfiguration.sd_mode); | |
target.sdStatus = ko.observable(SDConfiguration.sd_status); | |
target.orignalSdStatus = ko.observable(SDConfiguration.sd_status); | |
target.sdStatusInfo = ko.observable("sd_card_status_info_" + SDConfiguration.sd_status); | |
target.selectedShareEnable = ko.observable(SDConfiguration.share_status); | |
target.selectedFileToShare = ko.observable(SDConfiguration.file_to_share); | |
target.selectedAccessType = ko.observable(SDConfiguration.share_auth); | |
var path = SDConfiguration.share_file.substring(basePath.length); | |
target.pathToShare = ko.observable(path); | |
target.isInvalidPath = ko.observable(false); | |
target.checkEnable = ko.observable(true); | |
addInterval(function(){ | |
target.refreshSimStatus(); | |
}, 3000); | |
// 检查共享路径是否有效 | |
target.checkPathIsValid = ko.computed(function () { | |
if (target.orignalMode() == 0 && target.selectedShareEnable() == '1' && target.selectedFileToShare() == '0' | |
&& target.pathToShare() != '' && target.pathToShare() != '/') { | |
service.checkFileExists({ | |
"path": basePath + target.pathToShare() | |
}, function (info) { | |
if (info.status != "exist") { | |
target.isInvalidPath(true); | |
} else { | |
target.isInvalidPath(false); | |
} | |
}); | |
} else { | |
target.isInvalidPath(false); | |
} | |
}); | |
target.disableApplyBtn = ko.computed(function(){ | |
return target.selectedMode() == target.orignalMode() && target.selectedMode() == '1'; | |
}); | |
// 文件共享方式radio点击事件 | |
target.fileToShareClickHandle = function(){ | |
if(target.selectedFileToShare() == "1"){ | |
target.pathToShare("/"); | |
} | |
return true; | |
}; | |
// T卡热插拔时状态监控,拔插卡重刷界面 | |
target.refreshSimStatus = function(){ | |
if(target.checkEnable()){ | |
var SDConfiguration = service.getSDConfiguration(); | |
if(SDConfiguration.sd_status && (SDConfiguration.sd_status != target.orignalSdStatus())){ | |
if(SDConfiguration.sd_status != '1'){ | |
target.sdStatusInfo("sd_card_status_info_" + SDConfiguration.sd_status); | |
target.sdStatus(SDConfiguration.sd_status); | |
target.orignalSdStatus(SDConfiguration.sd_status); | |
$("#sd_card_status_info").translate(); | |
}else{ | |
clearTimer(); | |
clearValidateMsg(); | |
init(); | |
} | |
} | |
} | |
} | |
// 表单submit事件处理 | |
target.save = function(){ | |
showLoading('waiting'); | |
target.checkEnable(false); | |
if(target.orignalMode() == target.selectedMode()){ | |
showAlert("setting_no_change"); | |
} else { | |
service.setSdCardMode({ | |
mode : target.selectedMode() | |
}, function(info) { | |
if(info.result){ | |
target.orignalMode(target.selectedMode()); | |
if(info.result == "processing"){ | |
errorOverlay("sd_usb_forbidden"); | |
}else{ | |
successOverlay(); | |
} | |
} else { | |
if (target.selectedMode() == "0") { | |
errorOverlay("sd_not_support"); | |
} else { | |
errorOverlay(); | |
} | |
} | |
}, function(error) { | |
if (target.selectedMode() == "0") { | |
errorOverlay("sd_not_support"); | |
} else { | |
errorOverlay(); | |
} | |
}); | |
} | |
target.checkEnable(true); | |
return true; | |
}; | |
// 保存详细配置信息 | |
target.saveShareDetailConfig = function() { | |
showLoading('waiting'); | |
target.checkEnable(false); | |
var param = { | |
share_status : target.selectedShareEnable(), | |
share_auth : target.selectedAccessType(), | |
share_file : basePath + target.pathToShare() | |
}; | |
if (target.selectedShareEnable() == "0") { | |
setSdCardSharing(param); | |
} else { | |
service.checkFileExists({ | |
"path" : param.share_file | |
}, function(info) { | |
if (info.status != "exist" && info.status != "processing") { | |
errorOverlay("sd_card_share_setting_" + info.status); | |
} else { | |
setSdCardSharing(param); | |
} | |
}, function(){ | |
errorOverlay(); | |
}); | |
} | |
target.checkEnable(true); | |
return true; | |
} | |
// 设置SD卡共享信息 | |
function setSdCardSharing(param){ | |
service.setSdCardSharing(param, function(result) { | |
if (isErrorObject(result)) { | |
if (result.errorType == "no_sdcard") { | |
errorOverlay("sd_card_share_setting_no_sdcard"); | |
} else { | |
errorOverlay(); | |
} | |
} else { | |
successOverlay(); | |
} | |
}); | |
} | |
} | |
// 将配置的option项转换成Option数组 | |
// {Array} configItem [{name: "name1", value: "val1"},{name: "name2", value: "val2"}] | |
function getOptionArray(configItem) { | |
var arr = []; | |
for ( var i = 0; i < configItem.length; i++) { | |
arr.push(new Option(configItem.name, configItem.value)); | |
} | |
return arr; | |
} | |
function init() { | |
var container = $('#container')[0]; | |
ko.cleanNode(container); | |
var fwVm = new SDCardViewModel(); | |
ko.applyBindings(fwVm, container); | |
$("#sd_card_status_info").translate(); | |
$('#sdmode_form').validate({ | |
submitHandler : function() { | |
fwVm.save(); | |
} | |
}); | |
$('#httpshare_form').validate({ | |
submitHandler : function() { | |
fwVm.saveShareDetailConfig(); | |
}, | |
rules : { | |
path_to_share : "check_file_path" | |
} | |
}); | |
} | |
return { | |
init : init | |
}; | |
}); | |
// SD卡 HttpShare模块 | |
define("sd_httpshare","jquery underscore jq_fileinput set service knockout".split(" ") , | |
function($, _, fileinput, config, service, ko) { | |
// 每页记录条数 | |
// 不能够设置每页数据个数,默认:10 | |
// 默认值不可修改 | |
var perPage = 10; | |
// 当前页 | |
var activePage = 1; | |
// 当前目录,默认根目录"" | |
var currentPath = ""; | |
// 基目录。是否需要显示给用户?用户友好度 | |
var basePath = config.SD_BASE_PATH; | |
// 前置路径,发现有的设备会将sd卡数据显示在web目录 | |
// prePath = "/usr/conf/web"; | |
var prePath = ""; | |
// 是否隐藏重命名按钮 | |
var readwrite = true; | |
// 文件列表模板 | |
var sdFileItemTmpl = null; | |
// 分页模板 | |
var pagerTmpl = null; | |
// 配置信息原始状态 | |
var originalStatus = null; | |
var zoneOffsetSeconds = new Date().getTimezoneOffset() * 60; | |
var shareFilePath = ''; | |
var sdIsUploading = false;//SD卡是否正在上传文件 | |
// 生成分页数据数组 | |
// @method generatePager | |
// @param {Integer} totalSize 总记录数 | |
// @param {Integer} perPageNum 每页记录条数 | |
// @param {Integer} currentPage 当前页 | |
// @return {Array} 分页数据数组 | |
function generatePager(totalSize, perPageNum, currentPage) { | |
if (totalSize == 0) { | |
return []; | |
} | |
var pagersArr = []; | |
var totalPages = getTotalPages(totalSize, perPageNum); | |
pagersArr.push({ | |
pageNum: currentPage - 1, | |
isActive: false, | |
isPrev: true, | |
isNext: false, | |
isDot: false | |
}); | |
if (currentPage == 6) { | |
pagersArr.push({ | |
pageNum: 1, | |
isActive: false, | |
isPrev: false, | |
isNext: false, | |
isDot: false | |
}); | |
} else if (currentPage > 5) { | |
pagersArr.push({ | |
pageNum: 1, | |
isActive: false, | |
isPrev: false, | |
isNext: false, | |
isDot: false | |
}); | |
pagersArr.push({ | |
pageNum: 0, | |
isPrev: false, | |
isNext: false, | |
isActive: false, | |
isDot: true | |
}); | |
} | |
var i; | |
var startPage = currentPage - 4 > 0 ? currentPage - 4 : 1; | |
var endPage = currentPage + 4; | |
for (i = startPage; i <= endPage && i <= totalPages; i++) { | |
pagersArr.push({ | |
pageNum: i, | |
isActive: i == currentPage, | |
isPrev: false, | |
isNext: false, | |
isDot: false | |
}); | |
} | |
if (currentPage + 5 == totalPages) { | |
pagersArr.push({ | |
pageNum: totalPages, | |
isPrev: false, | |
isNext: false, | |
isActive: false, | |
isDot: false | |
}); | |
} else if (currentPage + 3 <= totalPages && i - 1 != totalPages) { | |
pagersArr.push({ | |
pageNum: 0, | |
isPrev: false, | |
isNext: false, | |
isActive: false, | |
isDot: true | |
}); | |
pagersArr.push({ | |
pageNum: totalPages, | |
isPrev: false, | |
isNext: false, | |
isActive: false, | |
isDot: false | |
}); | |
} | |
pagersArr.push({ | |
pageNum: parseInt(currentPage, 10) + 1, | |
isPrev: false, | |
isNext: true, | |
isActive: false, | |
isDot: false | |
}); | |
return pagersArr; | |
} | |
function getTotalPages(total, perPage){ | |
var totalPages = Math.floor(total / perPage); | |
if (total % perPage != 0) { | |
totalPages++; | |
} | |
return totalPages; | |
} | |
// 整理文件列表数据,并用模板显示 | |
function showFileSet(files) { | |
var i = 0; | |
var shownFiles = $.map(files, function(n) { | |
var obj = { | |
fileName : HTMLEncode(n.fileName), | |
fileType : n.attribute == 'document' ? 'folder' : getFileType(n.fileName), | |
fileSize : getDisplayVolume(n.size, false), | |
filePath : basePath + getCurrentPath() + "/" + n.fileName, | |
lastUpdateTime : transUnixTime((parseInt(n.lastUpdateTime, 10) + zoneOffsetSeconds) * 1000), | |
trClass : i % 2 == 0 ? "even" : "", | |
readwrite : readwrite | |
}; | |
i++; | |
return obj; | |
}); | |
if(sdFileItemTmpl == null){ | |
sdFileItemTmpl = $.template("sdFileItemTmpl", $("#sdFileItemTmpl")); | |
} | |
$("#fileList_container").html($.tmpl("sdFileItemTmpl", {data: shownFiles})); | |
} | |
// HttpShareViewModel | |
function HttpShareViewModel() { | |
var isGuest = false; | |
if(window.location.hash == "#httpshare_guest"){ | |
isGuest = true; | |
} | |
readwrite = true; | |
activePage = 1; | |
setCurrentPath(''); | |
basePath = config.SD_BASE_PATH; | |
showLoading('waiting'); | |
service.getSDConfiguration({}, function(data){ | |
originalStatus = data; | |
shareFilePath = data.share_file; | |
if(shareFilePath.charAt(shareFilePath.length - 1) == '/'){//如果路径中有/,则去掉 | |
shareFilePath = shareFilePath.substring(0, shareFilePath.length - 1); | |
} | |
if(data.sd_status == '1' && data.sd_mode == '0'){ //共享 | |
if(isGuest && data.share_status == '1'){// guest and share | |
basePath = shareFilePath; | |
if(data.share_auth == '0'){ // readonly | |
readwrite = false; | |
$("#uploadSection, #delete_file_button, .sd_guest_hide_th", "#httpshare_form").hide(); | |
}else{ | |
$("#uploadSection, #delete_file_button, .sd_guest_hide_th", "#httpshare_form").show(); | |
} | |
$("#go_to_login_button").removeClass("hide"); | |
$('#sd_menu').hide(); | |
$('.form-note').hide(); | |
if ($(".customfile").length == 0) { | |
$("#fileField").customFileInput(); | |
} | |
pagerItemClickHandler(1); | |
} else if(isGuest && data.share_status == '0'){ // guest not share | |
$(".form-body .content", "#httpshare_form").hide().remove(); | |
$(".form-title", "#httpshare_form").attr("data-trans", "httpshare").html($.i18n.prop("httpshare")); | |
$(".form-note", "#httpshare_form").attr("data-trans", "note_http_share_cannot_access").html($.i18n.prop("note_http_share_cannot_access")); | |
hideLoading(); | |
} else { | |
if ($(".customfile").length == 0) { | |
$("#fileField").customFileInput(); | |
} | |
pagerItemClickHandler(1); | |
} | |
} else { // usb | |
$(".form-body .content", "#httpshare_form").hide().remove(); | |
$(".form-title", "#httpshare_form").attr("data-trans", "httpshare").html($.i18n.prop("httpshare")); | |
$(".form-note", "#httpshare_form").attr("data-trans", "note_http_share_usb_access").html($.i18n.prop("note_http_share_usb_access")); | |
$(".form-note", "#httpshare_form").addClass("margintop10"); | |
hideLoading(); | |
} | |
}, function(){ | |
errorOverlay(); | |
$(".form-body .content", "#httpshare_form").hide().remove(); | |
$(".form-title", "#httpshare_form").attr("data-trans", "httpshare").html($.i18n.prop("httpshare")); | |
$(".form-note", "#httpshare_form").attr("data-trans", "note_http_share_cannot_access").html($.i18n.prop("note_http_share_cannot_access")); | |
}); | |
addInterval(function(){ | |
!sdIsUploading && self.checkSdStatus(); | |
}, 3000); | |
// T卡热插拔时状态监控,拔插卡重刷界面 | |
self.checkSdStatus = function(){ | |
var data = service.getSDConfiguration(); | |
if(data.sd_status && (data.sd_status != originalStatus.sd_status)){ | |
if(data.sd_status == '1'){ | |
window.location.reload(); | |
}else{ | |
clearTimer(); | |
clearValidateMsg(); | |
init(); | |
} | |
} | |
} | |
} | |
// 页码点击事件处理 | |
pagerItemClickHandler = function(num) { | |
activePage = num; | |
refreshFileList(getCurrentPath(), activePage); | |
}; | |
function checkConfiguration(){ | |
var data = service.getSDConfiguration(); | |
if(!_.isEqual(originalStatus, data)){ | |
showAlert('sd_config_changed_reload', function(){ | |
init(); | |
}); | |
return false; | |
} | |
return true; | |
} | |
//检查操作路径是否为共享路径,如果是共享路径,给用户提示 | |
function inSharePath(path, wording) { | |
var tmpShareFilePath = shareFilePath + '/'; | |
var tmpPath = path + '/'; | |
if (originalStatus.share_status == '1' && shareFilePath != '' && shareFilePath != '/' && tmpShareFilePath.indexOf(tmpPath) != -1) { | |
showAlert(wording); | |
return true; | |
} | |
return false; | |
} | |
// 进入文件夹 | |
enterFolder = function(name) { | |
if(!checkConfiguration()){ | |
return false; | |
} | |
var path; | |
if (name == "") { | |
path = ""; | |
} else { | |
path = getCurrentPath() + '/' + name; | |
} | |
refreshFileList(path, 1); | |
return true; | |
}; | |
// 回到上一级目录 | |
backFolder = function() { | |
if(!checkConfiguration()){ | |
return false; | |
} | |
var path = getCurrentPath().substring(0, getCurrentPath().lastIndexOf("/")); | |
refreshFileList(path, 1); | |
return true; | |
}; | |
// 更新按钮状态 | |
refreshBtnsStatus = function() { | |
if (getCurrentPath() == "") { | |
$("#rootBtnLi, #backBtnLi").hide(); | |
} else { | |
$("#rootBtnLi, #backBtnLi").show(); | |
} | |
if (readwrite) { | |
$("#createNewFolderLi").hide(); | |
$("#createNewFolderLi").find(".error").hide(); | |
$("#newFolderBtnLi").show(); | |
$("#newFolderName").val(''); | |
$("#createNewFolderErrorLabel").removeAttr('data-trans').text(''); | |
} else { | |
$("#newFolderBtnLi, #createNewFolderLi").hide().remove(); | |
} | |
checkDeleteBtnStatus(); | |
}; | |
// 刷新文件列表 | |
refreshFileList = function(path, index, alertShown) { | |
if(!alertShown){ | |
showLoading('waiting'); | |
} | |
service.getFileList({ | |
path : prePath + basePath + path, | |
index : index | |
}, function(data) { | |
if (isErrorObject(data)) { | |
showAlert(data.errorType); | |
return; | |
} | |
setCurrentPath(path); | |
$("#sd_path").val(path); | |
activePage = index; | |
totalSize = data.totalRecord; | |
showFileSet(data.details); | |
pagination(totalSize); //测试分页时可以将此处totalSize调大 | |
refreshBtnsStatus(); | |
updateSdMemorySizes(); | |
if(!alertShown){ | |
hideLoading(); | |
} | |
}); | |
}; | |
// 显示新建文件夹按钮点击事件 | |
openCreateNewFolderClickHandler = function() { | |
$("#newFolderBtnLi").hide(); | |
$("#newFolderName").show(); | |
$("#createNewFolderLi").show(); | |
}; | |
// 取消显示新建文件夹按钮点击事件 | |
cancelCreateNewFolderClickHandler = function() { | |
$("#createNewFolderLi").hide(); | |
$("#newFolderName").val(''); | |
$("#newFolderBtnLi").show(); | |
$("#createNewFolderLi").find(".error").hide(); | |
}; | |
// 新建文件夹按钮点击事件 | |
createNewFolderClickHandler = function() { | |
if(!checkConfiguration()){ | |
return false; | |
} | |
var newFolderName = $.trim($("#newFolderName").val()); | |
var newPath = prePath + basePath + getCurrentPath() + "/" + newFolderName; | |
showLoading('creating'); | |
service.checkFileExists({ | |
path : newPath | |
}, function(data1) { | |
if (data1.status == "noexist" || data1.status == "processing") { | |
service.createFolder({ | |
path : newPath | |
}, function(data) { | |
if (isErrorObject(data)) { | |
showAlert(data.errorType); | |
return false; | |
} else { | |
successOverlay(); | |
refreshFileList(getCurrentPath(), 1); | |
} | |
}); | |
} else if (data1.status == "no_sdcard") { | |
showAlert("no_sdcard", function(){ | |
window.location.reload(); | |
}); | |
} else if (data1.status == "exist") { | |
$("#createNewFolderErrorLabel").attr('data-trans', 'sd_card_share_setting_exist').text($.i18n.prop("sd_card_share_setting_exist")); | |
hideLoading(); | |
} | |
}, function(){ | |
errorOverlay(); | |
}); | |
return true; | |
}; | |
// 重命名按钮点击事件 | |
renameBtnClickHandler = function(oldName) { | |
var oldPath = prePath + basePath + getCurrentPath() + "/" + oldName; | |
if(inSharePath(oldPath, 'sd_share_path_cant_rename')){ | |
return false; | |
} | |
showPrompt("sd_card_folder_name_is_null", function() { | |
renamePromptCallback(oldName); | |
}, 160, oldName, checkPromptInput); | |
}; | |
function renamePromptCallback(oldName){ | |
if(!checkConfiguration()){ | |
return false; | |
} | |
var promptInput = $("div#confirm div.promptDiv input#promptInput"); | |
var newFolderName = $.trim(promptInput.val()); | |
var newPath = prePath + basePath + getCurrentPath() + "/" + newFolderName; | |
service.checkFileExists({ | |
path : newPath | |
}, function(data1) { | |
if (data1.status == "noexist" || data1.status == "processing") { | |
hideLoadingButtons(); | |
var oldPath = prePath + basePath + getCurrentPath() + "/" + oldName; | |
service.fileRename({ | |
oldPath : oldPath, | |
newPath : newPath, | |
path : prePath + basePath + getCurrentPath() | |
}, function(data) { | |
if (isErrorObject(data)) { | |
showAlert($.i18n.prop(data.errorType)); | |
if(data.errorType == "no_exist"){ | |
var alertShown = true; | |
refreshFileList(getCurrentPath(), 1, alertShown); | |
} else if(data.errorType == "processing"){ | |
// | |
} | |
} else { | |
refreshFileList(getCurrentPath(), 1); | |
successOverlay(); | |
} | |
showLoadingButtons(); | |
return true; | |
}); | |
} else if (data1.status == "no_sdcard") { | |
showAlert("no_sdcard", function(){ | |
window.location.reload(); | |
}); | |
return false; | |
} else if (data1.status == "exist") { | |
$(".promptErrorLabel").text($.i18n.prop("sd_card_share_setting_exist")); | |
return false; | |
} | |
return true; | |
}, function(){ | |
errorOverlay(); | |
}); | |
return false; | |
} | |
// Prompt弹出框INPUT校验函数 | |
function checkPromptInput(){ | |
var promptInput = $("div#confirm div.promptDiv input#promptInput"); | |
var newFileName = $.trim(promptInput.val()); | |
var newPath = (prePath + basePath + getCurrentPath() + "/" + newFileName).replace("//", "/"); | |
var checkResult = checkFileNameAndPath(newFileName, newPath); | |
if (1 == checkResult) { | |
$(".promptErrorLabel").text($.i18n.prop("sd_upload_rename_null"));//tip filena is null | |
return false; | |
}else if (2 == checkResult) { | |
$(".promptErrorLabel").text($.i18n.prop("sd_card_path_too_long")); | |
return false; | |
}else if (3 == checkResult) { | |
$(".promptErrorLabel").text($.i18n.prop("check_file_path")); | |
return false; | |
}else{ | |
$(".promptErrorLabel").text(""); | |
return true; | |
} | |
return true;; | |
} | |
hideLoadingButtons = function () { | |
$(".buttons", "#confirm").hide(); | |
}; | |
showLoadingButtons = function () { | |
$(".buttons", "#confirm").show(); | |
}; | |
// 删除按钮点击事件 | |
deleteBtnClickHandler = function() { | |
if(!checkConfiguration()){ | |
return false; | |
} | |
var files = $("input:checkbox:checked", "#fileList_container"); | |
var fileNames = ""; | |
if (!files || files.length == 0) { | |
return false; | |
} | |
var hasSharePath = false; | |
$.each(files, function (i, n) { | |
var theFile = $(n).val(); | |
if (inSharePath(prePath + basePath + getCurrentPath() + "/" + theFile, {msg: 'sd_share_path_cant_delete', params: [theFile]})) { | |
hasSharePath = true; | |
return false; | |
} | |
return true; | |
}); | |
if (hasSharePath) { | |
return false; | |
} | |
showConfirm("confirm_data_delete", function(){ | |
$.each(files, function(i, n) { | |
fileNames += $(n).val() + "*"; | |
}); | |
var thePath = prePath + basePath + getCurrentPath(); | |
service.deleteFilesAndFolders({ | |
path : thePath, | |
names : fileNames | |
}, function(data) { | |
if (data.status == "failure") { | |
showAlert("delete_folder_failure"); | |
} | |
else if(data.status == "no_sdcard"){ | |
showAlert("no_sdcard"); | |
} | |
else if(data.status == "processing"){ | |
showAlert("sd_file_processing_cant_delete"); | |
} | |
else if(data.status == "success"){ | |
successOverlay(); | |
} | |
refreshFileList(getCurrentPath(), 1); | |
}, function(){ | |
errorOverlay(); | |
}); | |
}); | |
return true; | |
}; | |
// 文件上传按钮点击事件 | |
fileUploadSubmitClickHandler = function(ifReName) { | |
if(ifReName){ | |
var fileName = $.trim($("div#confirm div.promptDiv input#promptInput").val()); | |
}else{ | |
var fileName = $(".customfile").attr('title'); | |
} | |
var newPath = (basePath + getCurrentPath() + "/" + fileName).replace("//", "/"); | |
var fileSize = getFileSize($("#fileField")[0]); | |
if(!checkuploadFileNameAndPath(fileName, newPath, fileSize)){ | |
return false; | |
} | |
doCheckAndUpload(fileName, newPath, fileSize); | |
}; | |
function doCheckAndUpload(fileName, newPath, fileSize){ | |
service.getSdMemorySizes({}, function(data) { | |
if (isErrorObject(data)) { | |
showAlert(data.errorType); | |
return false; | |
} | |
if (data.availableMemorySize < fileSize) { | |
showAlert("sd_upload_space_not_enough"); | |
return false; | |
} | |
$.modal.close(); | |
showLoading('uploading', '<span data-trans="note_uploading_not_refresh">' + $.i18n.prop('note_uploading_not_refresh') + '</span>'); | |
service.checkFileExists({ | |
path : newPath | |
}, function(data1) { | |
if (data1.status == "noexist") { | |
$("#fileUploadForm").attr("action", "/cgi-bin/httpshare/" + URLEncodeComponent(fileName)); | |
var currentTime = new Date().getTime(); | |
$("#path_SD_CARD_time").val(transUnixTime(currentTime)); | |
$("#path_SD_CARD_time_unix").val(Math.round((currentTime - zoneOffsetSeconds * 1000) / 1e3)); | |
if(!iframeLoadBinded){ | |
bindIframeLoad(); | |
} | |
sdIsUploading = true; | |
$("#fileUploadForm").submit(); | |
} else if (data1.status == "no_sdcard") { | |
showAlert("no_sdcard", function(){ | |
window.location.reload(); | |
}); | |
} else if (data1.status == "processing") { | |
showAlert("sd_upload_file_is_downloading");//("system is downloading,try later!"); | |
}else if (data1.status == "exist") { | |
showPrompt("sd_upload_rename",function(){ | |
fileUploadSubmitClickHandler(true); | |
},160, fileName, checkPromptInput, clearUploadInput); | |
} | |
}, function(){ | |
errorOverlay(); | |
}); | |
return true; | |
}); | |
} | |
var iframeLoadBinded = false; | |
function bindIframeLoad(){ | |
iframeLoadBinded = true; | |
$('#fileUploadIframe').load(function() { | |
sdIsUploading = false; | |
var txt = $('#fileUploadIframe').contents().find("body").html().toLowerCase(); | |
var alertShown = false; | |
if (txt.indexOf('success') != -1) { | |
successOverlay(); | |
} else if (txt.indexOf('space_not_enough') != -1) { | |
alertShown = true; | |
showAlert('sd_upload_space_not_enough'); | |
} else if (txt.indexOf('data_lost') != -1) { | |
alertShown = true; | |
showAlert('sd_upload_data_lost'); | |
} else { | |
errorOverlay(); | |
} | |
clearUploadInput(); | |
refreshFileList(getCurrentPath(), 1, alertShown); | |
}); | |
} | |
// 更新SD卡容量显示数据 | |
updateSdMemorySizes = function() { | |
service.getSdMemorySizes({}, function(data) { | |
if (isErrorObject(data)) { | |
showAlert(data.errorType); | |
return false; | |
} | |
var total = getDisplayVolume(data.totalMemorySize, false); | |
var used = getDisplayVolume(data.totalMemorySize - data.availableMemorySize, false); | |
$("#sd_volumn_used").text(used); | |
$("#sd_volumn_total").text(total); | |
return true; | |
}); | |
}; | |
// 翻页 | |
pagination = function(fileTotalSize) { | |
var pagers = generatePager(fileTotalSize, perPage, parseInt(activePage, 10)); | |
if(pagerTmpl == null){ | |
pagerTmpl = $.template("pagerTmpl", $("#pagerTmpl")); | |
} | |
$(".pager", "#fileListButtonSection").html($.tmpl("pagerTmpl", {data: {pagers : pagers, total : getTotalPages(fileTotalSize, perPage)}})); | |
renderCheckbox(); | |
$(".content", "#httpshare_form").translate(); | |
}; | |
// 下载文件是检查文件路径是否包含特殊字符 | |
checkFilePathForDownload = function(path){ | |
if(!checkConfiguration()){ | |
return false; | |
} | |
var idx = path.lastIndexOf('/'); | |
var prePath = path.substring(0, idx+1); | |
var name = path.substring(idx+1, path.length); | |
if(checkFileNameChars(prePath, true) && checkFileNameChars(name, false)){ | |
return true; | |
} | |
showAlert('sd_card_invalid_chars_cant_download'); | |
return false; | |
}; | |
gotoLogin = function(){ | |
window.location.href="#entry"; | |
}; | |
// 事件绑定 | |
function bindEvent(){ | |
$('#createNewFolderForm').validate({ | |
submitHandler : function() { | |
createNewFolderClickHandler(); | |
}, | |
rules : { | |
newFolderName : {sd_card_path_too_long:true,check_filefold_name: true} | |
} | |
}); | |
$("p.checkbox", "#httpshare_form").die().live('click', function () { | |
addTimeout(function () { | |
checkDeleteBtnStatus(); | |
}, 100); | |
}); | |
$(".icon-download", "#httpshare_form").die().live("click", function () { | |
return checkFilePathForDownload($(this).attr("filelocal")); | |
}); | |
$(".folderTd", "#httpshare_form").die().live("click", function () { | |
return enterFolder($(this).attr("filename")); | |
}); | |
$(".fileRename", "#httpshare_form").die().live("click", function () { | |
return renameBtnClickHandler($(this).attr("filename")); | |
}); | |
iframeLoadBinded = false; | |
} | |
// 刷新删除按钮状态 | |
function checkDeleteBtnStatus(){ | |
var checkedItem = $("p.checkbox.checkbox_selected", '#fileListSection'); | |
if(checkedItem.length > 0){ | |
enableBtn($('#delete_file_button')); | |
} else { | |
disableBtn($('#delete_file_button')); | |
} | |
} | |
// 文件名和路径检查 | |
function checkFileNameAndPath(filename, path) { | |
if (filename == "" || filename.length > 25) { | |
return 1; | |
} | |
if (path.length >= 200) { | |
return 2; | |
} | |
if (!checkFileNameChars(filename, false)) { | |
return 3; | |
} | |
} | |
// 文件名特殊字符检查 | |
function checkFileNameChars(filename, isIncludePath) { | |
var ASCStringInvalid = '+/:*?<>\"\'\\|#&`~'; | |
if(isIncludePath){ | |
ASCStringInvalid = '+:*?<>\"\'\\|#&`~'; | |
} | |
var flag = false; | |
var dotFlag = false; | |
var reg = /^\.+$/; | |
for ( var filenamelen = 0; filenamelen < filename.length; filenamelen++) { | |
for ( var ACSlen = 0; ACSlen < ASCStringInvalid.length; ACSlen++) { | |
if (filename.charAt(filenamelen) == ASCStringInvalid.charAt(ACSlen)) { | |
flag = true; | |
break; | |
} | |
} | |
if (reg.test(filename)) { | |
dotFlag = true; | |
} | |
if (flag || dotFlag) { | |
return false; | |
} | |
} | |
return true; | |
} | |
function checkuploadFileNameAndPath(fileName, newPath, fileSize){ | |
if(!checkConfiguration()){ | |
return false; | |
} | |
if (typeof fileName == "undefined" || fileName == '' || fileName == $.i18n.prop("no_file_selected")) { | |
showAlert("sd_no_file_selected"); | |
return false; | |
} | |
if (newPath.length >= 200) { | |
showAlert("sd_card_path_too_long"); | |
return false; | |
} | |
if (fileSize/1024/1024/1024 > 2){ //no more than 2G | |
showAlert("sd_file_size_too_big"); | |
return false; | |
} | |
if (fileName.indexOf('*') >= 0){ //no * | |
showAlert("sd_file_name_invalid"); | |
return false; | |
} | |
return true; | |
} | |
//清空上传控件 | |
function clearUploadInput(){ | |
$("#fileField").closest('.customfile').before('<input id="fileField" name="filename" maxlength="200" type="file" dir="ltr"/>').remove(); | |
addTimeout(function(){ | |
$("#fileField").customFileInput(); | |
}, 0); | |
$("#uploadBtn", "#uploadSection").attr("data-trans", "browse_btn").html($.i18n.prop('browse_btn')); | |
$(".customfile", "#uploadSection").removeAttr("title"); | |
$(".customfile span.customfile-feedback", "#uploadSection") | |
.html('<span data-trans="no_file_selected">'+$.i18n.prop('no_file_selected')+'</span>') | |
.attr('class', 'customfile-feedback'); | |
} | |
function getCurrentPath(){ | |
return currentPath; | |
} | |
function setCurrentPath(path){ | |
if(path.lastIndexOf("/") == path.length - 1){ | |
currentPath = path.substring(0, path.length - 1); | |
} else { | |
currentPath = path; | |
} | |
} | |
function getFileSize(object){ | |
var isIE = /msie/i.test(navigator.userAgent) && !window.opera; | |
if (isIE) { //如果是ie | |
var objValue = object.value; | |
try { | |
var fileSysObj = new ActiveXObject("Scripting.FileSystemObject"); | |
fileLenth = parseInt(fileSysObj.GetFile(objValue).size); | |
} catch (e) { //('IE内核取不到长度'); | |
fileLenth = 1; | |
} | |
}else{ //其他 | |
try{//对于非IE获得要上传文件的大小 | |
fileLenth = parseInt(object.files[0].size); | |
}catch (e) { | |
fileLenth=1; //获取不到取-1 | |
} | |
} | |
return fileLenth; | |
} | |
function init() { | |
var container = $('#container')[0]; | |
ko.cleanNode(container); | |
var fwVm = new HttpShareViewModel(); | |
ko.applyBindings(fwVm, container); | |
bindEvent(); | |
} | |
jQuery.validator.addMethod("check_filefold_name", function(value, element, param) { | |
var result = checkFileNameChars(value, false); | |
return this.optional(element) || result; | |
}); | |
jQuery.validator.addMethod("sd_card_path_too_long", function(value, element, param) { | |
var newFolderName = $.trim($("#newFolderName").val()); | |
var newPath = prePath + basePath + getCurrentPath() + "/" + newFolderName; | |
var result = true; | |
if (newPath.length >= 200) { | |
result = false; | |
} | |
return this.optional(element) || result; | |
}); | |
return { | |
init : init | |
}; | |
}); | |
define("ussd","set service knockout jquery".split(" "), function (set, fnc, libko, libjq) { | |
var time_interval = 0; | |
var initFlg = true; | |
var numTimeout = 0; | |
var replyFlg = false; | |
var ussd_action = 1; | |
function init() { | |
var container = libjq('#container')[0]; | |
libko.cleanNode(container); | |
var vm = new vmUSSD(); | |
libko.applyBindings(vm, container); | |
} | |
var USSDLocation = { | |
SEND: 0, | |
REPLY: 1 | |
}; | |
function vmUSSD() { | |
var target = this; | |
target.hasUpdateCheck = set.HAS_UPDATE_CHECK; | |
target.ussd_action = libko.observable(ussd_action); | |
target.USSDLocation = libko.observable(USSDLocation.SEND); | |
target.USSDReply = libko.observable(""); | |
target.USSDSend = libko.observable(""); | |
target.hasDdns = set.DDNS_SUPPORT; | |
function checkTimeout() { | |
if (replyFlg) { | |
replyFlg = true; | |
window.clearInterval(time_interval); | |
numTimeout = 0; | |
} else { | |
if (numTimeout > 28) { | |
replyFlg = true; | |
window.clearInterval(time_interval); | |
showAlert("ussd_operation_timeout"); | |
target.USSDReply(""); | |
target.USSDSend(""); | |
target.USSDLocation(USSDLocation.SEND); | |
numTimeout = 0; | |
} else { | |
numTimeout++; | |
} | |
} | |
}; | |
target.sendToNet = function () { | |
numTimeout = 0; | |
window.clearInterval(time_interval); | |
var command = target.USSDSend(); | |
var idx_t = 0; | |
var indexChar; | |
for (idx_t = 0; idx_t < command.length; ) { //corem0418, delte left blanks and right blanks | |
indexChar = command.charAt(idx_t); | |
if (indexChar == ' ') { | |
if (command.length > 1) { | |
command = command.substr(idx_t + 1); | |
} else { | |
command = ''; // string is filled with blank | |
break; | |
} | |
} else { | |
break; | |
} | |
} | |
for (idx_t = command.length - 1; idx_t >= 0 && command.length > 0; --idx_t) { | |
indexChar = command.charAt(idx_t); | |
if (indexChar == ' ') { | |
if (command.length > 1) { | |
command = command.substr(0, idx_t); | |
} else { | |
command = ''; // string is filled with blank | |
break; | |
} | |
} else { | |
break; | |
} | |
} | |
if (('string' != typeof(command)) || ('' == command)) { | |
showAlert("ussd_error_input"); | |
return; | |
} | |
showLoading('waiting'); | |
var tmp = {}; | |
tmp.operator = "ussd_send"; | |
tmp.strUSSDCommand = command; | |
tmp.sendOrReply = "send"; | |
fnc.getUSSDResponse(tmp, function (result, content) { | |
hideLoading(); | |
if (result) { | |
USSD_reset(); | |
target.USSDLocation(USSDLocation.REPLY); | |
target.ussd_action(content.ussd_action); | |
libjq("#USSD_Content").val(decodeMessage(content.data, true)); | |
replyFlg = false; | |
numTimeout = 0; | |
} else { | |
showAlert(content); | |
} | |
}); | |
}; | |
target.replyToNet = function () { | |
numTimeout = 0; | |
window.clearInterval(time_interval); | |
var command = target.USSDReply(); | |
var idx_t = 0; | |
var indexChar; | |
for (idx_t = 0; idx_t < command.length; ) { //corem0418, delte left blanks and right blanks | |
indexChar = command.charAt(idx_t); | |
if (indexChar == ' ') { | |
if (command.length > 1) { | |
command = command.substr(idx_t + 1); | |
} else { | |
command = ''; // string is filled with blank | |
break; | |
} | |
} else { | |
break; | |
} | |
} | |
for (idx_t = command.length - 1; idx_t >= 0 && command.length > 0; --idx_t) { | |
indexChar = command.charAt(idx_t); | |
if (indexChar == ' ') { | |
if (command.length > 1) { | |
command = command.substr(0, idx_t); | |
} else { | |
command = ''; // string is filled with blank | |
break; | |
} | |
} else { | |
break; | |
} | |
} | |
if (('string' != typeof(command)) || ('' == command)) { | |
showAlert("ussd_error_input"); | |
return; | |
} | |
showLoading('waiting'); | |
var tmp = {}; | |
tmp.operator = "ussd_reply"; | |
tmp.strUSSDCommand = command; | |
tmp.sendOrReply = "reply"; | |
fnc.getUSSDResponse(tmp, function (result, content) { | |
hideLoading(); | |
if (result) { | |
target.ussd_action(content.ussd_action); | |
libjq("#USSD_Content").val(decodeMessage(content.data, true)); | |
replyFlg = false; | |
USSD_reset(); | |
numTimeout = 0; | |
} else { | |
showAlert(content); | |
} | |
}); | |
}; | |
USSD_reset = function () { | |
target.USSDReply(""); | |
target.USSDSend(""); | |
}; | |
USSD_cancel = function () { | |
fnc.USSDReplyCancel(function (result) {}); | |
}; | |
target.noReplyCancel = function () { | |
numTimeout = 0; | |
replyFlg = true; | |
window.clearInterval(time_interval); | |
fnc.USSDReplyCancel(function (result) { | |
if (result) { | |
USSD_reset(); | |
target.USSDLocation(USSDLocation.SEND); | |
} else { | |
showAlert("ussd_fail"); | |
} | |
}); | |
}; | |
//如果首次进入USSD菜单,先发送USSD取消命令,进行初始化 | |
if (initFlg) { | |
USSD_cancel(); | |
initFlg = false; | |
} | |
} | |
return { | |
init: init | |
}; | |
}); | |
define("phonebook","underscore jquery knockout set service jq_chosen".split(" "), | |
function (_, $, ko, config, service, chosen) { | |
var locationValue = { | |
SIM: "0", | |
DEVICE: "1" | |
}; | |
var pageState = { | |
LIST: 0, | |
NEW: 1, | |
EDIT: 2, | |
VIEW: 3, | |
SEND_MSM: 4 | |
}; | |
//存储位置选项 | |
var saveLocationOpts = function (hasSIMCard) { | |
var opts = []; | |
opts.push(new Option($.i18n.prop("device_book"), locationValue.DEVICE)); | |
if (hasSIMCard) { | |
opts.push(new Option($.i18n.prop("sim_book"), locationValue.SIM)); | |
} | |
return opts; | |
}; | |
function getCurrentGroup() { | |
return $("#selectedFilterGroup").val(); | |
} | |
//列表模板对应的Columns | |
var templateColumns = { | |
cardColumns: [{ | |
rowText: "index", | |
display: false | |
}, { | |
rowText: "name" | |
}, { | |
rowText: "mobile_phone_number" | |
}, { | |
rowText: "home_phone_number" | |
} | |
], | |
listColumns: [{ | |
columnType: "checkbox", | |
headerTextTrans: "number", | |
rowText: "index", | |
width: "10%" | |
}, { | |
headerTextTrans: "name", | |
rowText: "name", | |
width: "25%", | |
sortable: true | |
}, { | |
columnType: "image", | |
headerTextTrans: "save_location", | |
rowText: "imgLocation", | |
width: "20%", | |
sortable: true | |
}, { | |
headerTextTrans: "mobile_phone_number", | |
rowText: "mobile_phone_number", | |
width: "30%", | |
sortable: true | |
}, { | |
headerTextTrans: "group", | |
rowText: "transGroup", | |
width: "15%", | |
sortable: true, | |
needTrans: true | |
} | |
] | |
}; | |
//分组选项 | |
var groupOpts = function () { | |
var opts = []; | |
opts.push(new Option($.i18n.prop("common"), "common")); | |
opts.push(new Option($.i18n.prop("family"), "family")); | |
opts.push(new Option($.i18n.prop("friend"), "friend")); | |
opts.push(new Option($.i18n.prop("colleague"), "colleague")); | |
return opts; | |
}; | |
var _phoneBookStopSMSSending = false; | |
function pbViewMode() { | |
var target = this; | |
//property for common | |
target.pageState = ko.observable(pageState.LIST); | |
target.initFail = ko.observable(true); | |
target.hasSms = ko.observable(config.HAS_SMS); | |
var smsHasCapability = true; | |
var smsLeftCount = 0; | |
//property for list | |
var capacity = { | |
simMaxNameLen: 0, | |
simMaxNumberLen: 0, | |
IsSimCardFull: true, | |
IsDeviceFull: true, | |
Used: 0, | |
Capacity: 0, | |
Ratio: "(0/0)" | |
}; | |
target.capacity = ko.observable(capacity); | |
target.phoneBookCapacity = ko.observable(capacity.Ratio); | |
target.books = ko.observableArray(); | |
//列表模板创建 | |
target.gridTemplate = new ko.simpleGrid.viewModel({ | |
tableClass: "table-fixed", | |
data: target.books(), | |
idName: "index", | |
columns: templateColumns.listColumns, | |
defaultSortField: "name", | |
defaultSortDirection: "ASC", | |
pageSize: 10, | |
tmplType: 'list', | |
searchColumns: ["name", "mobile_phone_number"], | |
primaryColumn: "mobile_phone_number", | |
showPager: true, | |
rowClickHandler: function (dataId) { | |
target.editBooks(dataId, 'view'); | |
}, | |
deleteHandler: function (dataId) { | |
target.deleteOneBook(dataId); | |
}, | |
changeTemplateHandler: function () { | |
target.changeTemplate(); | |
} | |
}); | |
//property for edit or new | |
target.locations = ko.observableArray(); | |
target.originLocation = ""; | |
target.selectedLocation = ko.observable(locationValue.DEVICE); | |
target.locationTrans = ko.observable(); | |
target.locationTransText = ko.observable(); | |
target.index = ko.observable(-1); | |
target.name = ko.observable(""); | |
target.nameMaxLength = ko.computed(function () { | |
var max = getNameMaxLength(); | |
var name = target.name().substring(0, max); | |
target.name(name); | |
return getNameMaxLength(); | |
}); | |
function getNameMaxLength() { | |
var max = 22; | |
if (target.selectedLocation() == locationValue.DEVICE) { | |
var encodeType = getEncodeType(target.name()); | |
if ("UNICODE" == encodeType.encodeType || encodeType.extendLen > 0) { | |
max = 11; | |
} else { | |
max = 22; | |
} | |
//max = 22; | |
} else { | |
//对"^"需要按照2个字符处理 | |
var encodeType = getEncodeType(target.name()); | |
if ("UNICODE" == encodeType.encodeType || encodeType.extendLen > 0) { | |
max = (target.capacity().simMaxNameLen / 2) - 1; | |
} else { | |
max = target.capacity().simMaxNameLen; | |
} | |
} | |
return max; | |
} | |
target.mobile_phone_number = ko.observable(""); | |
target.mobileMaxLength = ko.computed(function () { | |
var max = getMobileMaxLength(); | |
var mobileNumber = target.mobile_phone_number().substring(0, max); | |
target.mobile_phone_number(mobileNumber); | |
return getMobileMaxLength(); | |
}); | |
function getMobileMaxLength() { | |
var max = 40; | |
if (target.selectedLocation() == locationValue.DEVICE) { | |
max = 40; | |
} else { | |
max = target.capacity().simMaxNumberLen; | |
} | |
return max; | |
} | |
target.home_phone_number = ko.observable(""); | |
target.office_phone_number = ko.observable(""); | |
target.mail = ko.observable(""); | |
target.transEditAreaTitle = ko.dependentObservable(function () { | |
var state = target.pageState(); | |
if (state == pageState.EDIT) { | |
return "edit"; | |
} else if (state == pageState.NEW) { | |
return "new"; | |
} else if (state == pageState.VIEW) { | |
return "view"; | |
} | |
}); | |
var groups = groupOpts(); | |
target.groups = ko.observableArray(groups); | |
target.selectedGroup = ko.observable(); | |
target.groupTrans = ko.observable(); | |
target.groupTransText = ko.observable(); | |
target.selectedFilterGroup = ko.observable('all'); | |
target.selectedFilterGroupChangeHandler = function () { | |
target.selectedFilterGroup($("#selectedFilterGroup").val()); | |
getPhoneBookReady(); | |
}; | |
//property for sendMessage | |
target.showErrorInfo = ko.observable(false); | |
target.messageContent = ko.observable(""); | |
target.messageCount = ko.computed(function () { | |
var msgInput = $("#txtSmsContent", "#sendMessage"); | |
var msgInputDom = msgInput[0]; | |
target.messageContent(); | |
var strValue = msgInput.val(); | |
var encodeType = getEncodeType(strValue); | |
var maxLength = encodeType.encodeType == 'UNICODE' ? 335 : 765; | |
if (strValue.length + encodeType.extendLen > maxLength) { | |
var scrollTop = msgInputDom.scrollTop; | |
var insertPos = getInsertPos(msgInputDom); | |
var moreLen = strValue.length + encodeType.extendLen - maxLength; | |
var insertPart = strValue.substr(insertPos - moreLen > 0 ? insertPos - moreLen : 0, moreLen); | |
var reversed = insertPart.split('').reverse(); | |
var checkMore = 0; | |
var cutNum = 0; | |
for (var i = 0; i < reversed.length; i++) { | |
if (getEncodeType(reversed[i]).extendLen > 0) { | |
checkMore += 2; | |
} else { | |
checkMore++; | |
} | |
if (checkMore >= moreLen) { | |
cutNum = i + 1; | |
break; | |
} | |
} | |
var iInsertToStartLength = insertPos - cutNum; | |
target.messageContent(strValue.substr(0, iInsertToStartLength) + strValue.substr(insertPos)); | |
if (target.messageContent().length > maxLength) { | |
target.messageContent(target.messageContent().substr(0, maxLength)); | |
} | |
setInsertPos(msgInputDom, iInsertToStartLength); | |
msgInputDom.scrollTop = scrollTop; | |
} | |
pbDraftListener(); | |
var newValue = $(msgInputDom).val(); | |
var newEncodeType = getEncodeType(newValue); | |
var newMaxLength = newEncodeType.encodeType == 'UNICODE' ? 335 : 765; | |
if (newValue.length + newEncodeType.extendLen >= newMaxLength) { | |
$("#msgCount").addClass("colorRed"); | |
} else { | |
$("#msgCount").removeClass("colorRed"); | |
} | |
return "(" + (newValue.length + newEncodeType.extendLen) + "/" + newMaxLength + ")" + "(" + getSmsCount(newValue) + "/5)"; | |
}); | |
target.clear = function (isNeedInit) { | |
if (target.pageState() == pageState.SEND_MSM) { | |
smsPageCheckDraft(clearPhonebookForm, isNeedInit); | |
} else { | |
clearPhonebookForm(isNeedInit); | |
} | |
config.resetContentModifyValue(); | |
}; | |
//通过按钮返回列表状态事件处理 | |
target.btnClear = function (isNeedInit) { | |
if (target.pageState() == pageState.SEND_MSM) { | |
smsPageCheckDraft(clearPhonebookForm, isNeedInit); | |
config.resetContentModifyValue(); | |
} else if ((target.pageState() == pageState.NEW || target.pageState() == pageState.EDIT) && (target.preContent.location != target.selectedLocation() | |
|| target.preContent.name != target.name() | |
|| target.preContent.mobile_phone_number != target.mobile_phone_number() | |
|| target.preContent.home_phone_number != target.home_phone_number() | |
|| target.preContent.office_phone_number != target.office_phone_number() | |
|| target.preContent.mail != target.mail() | |
|| target.preContent.group != target.selectedGroup())) { | |
showConfirm("leave_page_info", { | |
ok: function () { | |
clearPhonebookForm(isNeedInit); | |
config.resetContentModifyValue(); | |
}, | |
no: function () { | |
return false; | |
} | |
}); | |
} else { | |
clearPhonebookForm(isNeedInit); | |
config.resetContentModifyValue(); | |
} | |
}; | |
function clearPhonebookForm(isNeedInit) { | |
$("#frmPhoneBook").hide(); | |
target.pageState(pageState.LIST); | |
target.index(-1); | |
target.name(""); | |
target.mobile_phone_number(""); | |
target.home_phone_number(""); | |
target.office_phone_number(""); | |
target.mail(""); | |
target.messageContent(""); | |
if (true == isNeedInit) { | |
refreshPage(); | |
} | |
target.gridTemplate.clearAllChecked(); | |
clearValidateMsg(); | |
$("#books ").translate(); | |
$("#frmPhoneBook").show(); | |
} | |
//检查SIM卡状态 | |
target.checkHasSIMCard = function (showMsg) { | |
var status = service.getStatusInfo(); | |
if (status.simStatus != "modem_init_complete") { | |
if (showMsg) { | |
showAlert("sim_removed", function () { | |
target.pageState(pageState.LIST); | |
target.clear(true); | |
}); | |
} | |
return false; | |
} | |
return true; | |
}; | |
//保存电话本事件 | |
target.save = function () { | |
var saveBook = function (index) { | |
var isSaveInSIM = (location == locationValue.SIM); | |
if (isSaveInSIM) { | |
if (!target.checkHasSIMCard(true)) { | |
return; | |
} | |
} | |
if (target.pageState() == pageState.NEW || (target.pageState() == pageState.EDIT && location != target.originLocation)) { | |
if (isSaveInSIM) { | |
if (target.capacity().IsSimCardFull) { | |
showAlert("sim_full"); | |
return; | |
} | |
} else { | |
if (target.capacity().IsDeviceFull) { | |
showAlert("device_full"); | |
return; | |
} | |
} | |
} | |
var name = target.name(); | |
var mobile_phone_number = target.mobile_phone_number(); | |
if ($.trim(name) == "" || $.trim(mobile_phone_number) == "") { | |
return; | |
} | |
showLoading('saving'); | |
var params = {}; | |
params.location = location; | |
params.index = index; | |
params.name = name; | |
params.mobile_phone_number = mobile_phone_number; | |
if (!isSaveInSIM) { | |
params.home_phone_number = target.home_phone_number(); | |
params.office_phone_number = target.office_phone_number(); | |
params.mail = target.mail(); | |
params.group = target.selectedGroup(); | |
} | |
if (target.selectedLocation() != target.originLocation) { | |
params.delId = target.index(); | |
} | |
service.savePhoneBook(params, target.callback); | |
} | |
var location = target.selectedLocation(); | |
var editIndex = (location == target.originLocation) ? target.index() : -1; | |
if (location == locationValue.SIM && target.originLocation == locationValue.DEVICE) { | |
showConfirm("change_device_to_sim_confirm", function () { | |
saveBook(editIndex); | |
}); | |
} else { | |
saveBook(editIndex); | |
} | |
}; | |
//打开添加电话本记录页面事件 | |
target.openNewPage = function () { | |
if (target.pageState() == pageState.SEND_MSM) { | |
pbDraftListener(); | |
smsPageCheckDraft(openNewPageAct, false); | |
} else if (target.pageState() == pageState.EDIT && (target.preContent.location != target.selectedLocation() | |
|| target.preContent.name != target.name() | |
|| target.preContent.mobile_phone_number != target.mobile_phone_number() | |
|| target.preContent.home_phone_number != target.home_phone_number() | |
|| target.preContent.office_phone_number != target.office_phone_number() | |
|| target.preContent.mail != target.mail() | |
|| target.preContent.group != target.selectedGroup())) { | |
showConfirm("leave_page_info", { | |
ok: function () { | |
openNewPageAct(false); | |
}, | |
no: function () { | |
return false; | |
} | |
}); | |
} else { | |
openNewPageAct(false); | |
} | |
}; | |
function openNewPageAct(isNeedInit) { | |
target.pageState(pageState.NEW); | |
target.selectedLocation(locationValue.DEVICE); | |
target.originLocation = ""; | |
if (target.checkHasSIMCard(false)) { | |
target.locations(saveLocationOpts(true)); | |
} else { | |
target.locations(saveLocationOpts(false)); | |
} | |
var group = getCurrentGroup(); | |
if (group != "all") { | |
target.selectedGroup(group); | |
} else { | |
target.selectedGroup("common"); | |
} | |
target.name(""); | |
target.mobile_phone_number(""); | |
target.home_phone_number(""); | |
target.office_phone_number(""); | |
target.mail(""); | |
target.index(-1); | |
target.dynamicTranslate(); | |
preOpenEditPage(); | |
} | |
//打开添加电话本记录编辑页面事件 | |
target.openPage = function (option) { | |
var index; | |
if (target.pageState() == pageState.LIST) { | |
var result = target.checkSelect(option); | |
if (!result.isCorrectData) | |
return; | |
index = result.selectedIds[0]; | |
} else { | |
index = target.index(); | |
} | |
target.editBooks(index, option); | |
}; | |
//打开添加电话本记录查看页面事件 | |
target.openViewPage = function () { | |
target.openPage("view"); | |
}; | |
//打开添加电话本记录查看页面事件 | |
target.openEditPage = function () { | |
target.openPage("edit"); | |
if ($.browser.mozilla) { | |
$("#txtName, #txtMobile").removeAttr('maxlength'); | |
} | |
preOpenEditPage(); | |
}; | |
//编辑电话本事件处理 | |
target.editBooks = function (selectedId, option) { | |
if (!selectedId) | |
return; | |
if (target.checkHasSIMCard(false)) { | |
target.locations(saveLocationOpts(true)); | |
} else { | |
target.locations(saveLocationOpts(false)); | |
} | |
var data = target.books(); | |
for (var i = 0; i < data.length; i++) { | |
var n = data[i]; | |
if (n.index == selectedId) { | |
target.index(n.index); | |
target.selectedLocation(n.location); | |
target.originLocation = n.location; | |
var trans = (n.location == locationValue.DEVICE) ? "device" : "sim"; | |
target.locationTrans(trans); | |
var transText = $.i18n.prop("trans"); | |
target.locationTransText(transText); | |
target.name(n.name); | |
target.mobile_phone_number(n.mobile_phone_number); | |
target.home_phone_number(n.home_phone_number); | |
target.office_phone_number(n.office_phone_number); | |
target.mail(n.mail); | |
target.selectedGroup(n.group); | |
target.groupTrans("group_" + n.group); | |
target.groupTransText($.i18n.prop(target.groupTrans())); | |
if (option == "edit") { | |
target.pageState(pageState.EDIT); | |
} else { | |
target.pageState(pageState.VIEW); | |
} | |
break; | |
} | |
} | |
target.dynamicTranslate(); | |
if (target.selectedLocation() == locationValue.SIM) { | |
target.checkHasSIMCard(true) | |
} | |
}; | |
//翻译编辑区域 | |
target.dynamicTranslate = function () { | |
$("#container").translate(); | |
}; | |
//删除一条电话本事件处理(card模式使用) | |
target.deleteOneBook = function (index) { | |
showConfirm("confirm_pb_delete", function () { | |
showLoading('deleting'); | |
var params = {}; | |
params.indexs = [String(index)]; | |
service.deletePhoneBooks(params, target.callback); | |
}); | |
return false; | |
}; | |
//删除一条电话本事件处理 | |
target.deleteBook = function () { | |
target.deleteOneBook(target.index()); | |
}; | |
//删除一条或多条电话本事件处理 | |
target.deleteBooks = function () { | |
var result = target.checkSelect("delete"); | |
if (!result.isCorrectData) | |
return; | |
showConfirm("confirm_pb_delete", function () { | |
showLoading('deleting'); | |
var params = {}; | |
params.indexs = result.selectedIds; | |
service.deletePhoneBooks(params, target.callback); | |
}); | |
}; | |
//判断电话本选中 | |
target.checkSelect = function (pState) { | |
var ids; | |
if ("send" == pState) { | |
ids = target.gridTemplate.selectedPrimaryValue(); | |
} else { | |
ids = target.gridTemplate.selectedIds(); | |
} | |
var isCorrectData = true; | |
if (ids.length == 0) { | |
showAlert("no_data_selected"); | |
isCorrectData = false; | |
} else if ("edit" == pState || "view" == pState) { | |
if (ids.length > 1) { | |
showAlert("too_many_data_selected"); | |
isCorrectData = false; | |
} | |
} else if ("send" == pState) { | |
if (ids.length > 5) { | |
showAlert("max_send_number"); | |
isCorrectData = false; | |
} | |
} | |
return { | |
selectedIds: ids, | |
isCorrectData: isCorrectData | |
}; | |
}; | |
//全部删除电话本事件处理 | |
target.deleteAllBooks = function () { | |
showConfirm("confirm_data_delete", function () { | |
showLoading('deleting'); | |
var group = getCurrentGroup(); | |
var params = {}; | |
if (group == "all") { | |
params.location = 2; | |
service.deleteAllPhoneBooks(params, target.callback); | |
} else { | |
params.location = 3; | |
params.group = group; | |
service.deleteAllPhoneBooksByGroup(params, target.callback); | |
} | |
}); | |
}; | |
target.callback = function (data) { | |
if (data && data.result == "success") { | |
target.clear(true); | |
$("#books ").translate(); | |
renderCheckbox(); | |
successOverlay(null, true); | |
} else { | |
errorOverlay(); | |
} | |
}; | |
//变换显示方式事件处理 | |
target.changeTemplate = function () { | |
if (target.gridTemplate.tmplType == "card") { | |
target.gridTemplate.tmplType = "list"; | |
target.gridTemplate.pageSize = 10; | |
target.gridTemplate.columns = templateColumns.listColumns; | |
} else { | |
target.gridTemplate.tmplType = "card"; | |
target.gridTemplate.pageSize = 10; | |
target.gridTemplate.columns = templateColumns.cardColumns; | |
} | |
refreshPage(); | |
$("#books ").translate(); | |
}; | |
//显示发送短信页面 | |
target.openSendMessagePage = function () { | |
if (pageState.SEND_MSM == target.pageState()) { | |
return; | |
} | |
if ((target.pageState() == pageState.EDIT || pageState.NEW == target.pageState()) && (target.preContent.location != target.selectedLocation() | |
|| target.preContent.name != target.name() | |
|| target.preContent.mobile_phone_number != target.mobile_phone_number() | |
|| target.preContent.home_phone_number != target.home_phone_number() | |
|| target.preContent.office_phone_number != target.office_phone_number() | |
|| target.preContent.mail != target.mail() | |
|| target.preContent.group != target.selectedGroup())) { | |
showConfirm("leave_page_info", { | |
ok: function () { | |
openSendMessagePageAct(); | |
}, | |
no: function () { | |
return false; | |
} | |
}); | |
} else { | |
openSendMessagePageAct(); | |
} | |
}; | |
function openSendMessagePageAct() { | |
if (pageState.NEW == target.pageState()) { | |
target.pageState(pageState.SEND_MSM); | |
showAlert("no_data_selected"); | |
target.clear(); | |
return; | |
} | |
var selectedNumber = null; | |
if (pageState.LIST == target.pageState()) { | |
var result = target.checkSelect("send"); | |
if (!result.isCorrectData) | |
return; | |
selectedNumber = result.selectedIds; | |
} else { | |
selectedNumber = target.mobile_phone_number(); | |
} | |
var select = $("#chosenUserList .chosen-select-deselect"); | |
select.empty(); | |
var options = []; | |
var tmp = []; | |
for (var j = 0; j < config.phonebook.length; j++) { | |
var book = config.phonebook[j]; | |
if ($.inArray(book.pbm_number, tmp) == -1) { | |
options.push(new Option(book.pbm_name + "/" + book.pbm_number, book.pbm_number, false, true)); | |
tmp.push(book.pbm_number); | |
} else { | |
for (var i = 0; i < options.length; i++) { | |
if (options[i].value == book.pbm_number) { | |
options[i].text = book.pbm_name + "/" + book.pbm_number; | |
break; | |
} | |
} | |
} | |
} | |
var opts = ""; | |
$.each(options, function (i, e) { | |
opts += "<option value='" + HTMLEncode(e.value) + "'>" + HTMLEncode(e.text) + "</option>"; | |
}); | |
select.append(opts); | |
select.chosen({ | |
max_selected_options: 5, | |
search_contains: true, | |
width: '545px' | |
}); | |
$("#chosenUserSelect").val(selectedNumber); | |
$("#chosenUserSelect").trigger("chosen:updated.chosen"); | |
config.resetContentModifyValue(); | |
pbDraftListener(); | |
target.pageState(pageState.SEND_MSM); | |
} | |
//发送短信 | |
target.sendMessage = function () { | |
service.getSmsCapability({}, function (capability) { | |
var hasCapability = capability.nvUsed < capability.nvTotal; | |
if (!hasCapability) { | |
showAlert("sms_capacity_is_full_for_send"); | |
return false; | |
} | |
var numbers = syncSelectAndChosen($("select#chosenUserSelect"), $('.search-choice', '#chosenUserSelect_chosen')); | |
if (numbers.length + capability.nvUsed > capability.nvTotal) { | |
showAlert({ | |
msg: "sms_capacity_will_full_just", | |
params: [capability.nvTotal - capability.nvUsed] | |
}); | |
return false; | |
} | |
target.sendMessageAction(); | |
return true; | |
}); | |
}; | |
target.sendMessageAction = function () { | |
var numbers = syncSelectAndChosen($("select#chosenUserSelect"), $('.search-choice', '#chosenUserSelect_chosen')); | |
if (!numbers || numbers.length == 0) { | |
target.showErrorInfo(true); | |
var timer = addTimeout(function () { | |
target.showErrorInfo(false); | |
window.clearTimeout(timer); | |
}, 5000); | |
return; | |
} | |
var content = target.messageContent(); | |
var sentCount = 0; | |
var failCount = 0; | |
if (numbers.length > 1) { | |
showLoading("sending", "<button id='btnStopSending' onclick='phoneBookStopSMSSending();' class='btn btn-primary'>" | |
+ $.i18n.prop("sms_stop_sending") | |
+ "</button>"); | |
} else { | |
showLoading('sending'); | |
} | |
var callback = function (data) { | |
sentCount++; | |
if (sentCount == numbers.length) { | |
$("#chosenUserSelect").val(""); | |
target.messageContent(""); | |
config.CONTENT_MODIFIED.modified = false; | |
if (failCount == 0) { | |
successOverlay(); | |
location.hash = "#msg_list"; | |
} else { | |
var msg = $.i18n.prop("success_info") + $.i18n.prop("colon") + (sentCount - failCount) | |
+ "<br/>" + $.i18n.prop("error_info") + $.i18n.prop("colon") + (failCount); | |
showAlert(msg, function () { | |
location.hash = "#msg_list"; | |
}); | |
} | |
} else { | |
sendSMS(); | |
} | |
} | |
_phoneBookStopSMSSending = false; | |
var sendSMS = function () { | |
if (_phoneBookStopSMSSending) { | |
hideLoading(); | |
return; | |
} | |
if ((sentCount + 1) == numbers.length) { | |
$("#loading #loading_container").html(""); | |
} | |
service.sendSMS({ | |
number: numbers[sentCount], | |
message: content, | |
id: -1 | |
}, function (data) { | |
callback(data); | |
}, function (data) { | |
failCount++; | |
callback(data); | |
}); | |
}; | |
sendSMS(); | |
}; | |
//清除搜索关键字事件 | |
target.clearSearchKey = function () { | |
target.gridTemplate.searchInitStatus(true); | |
target.gridTemplate.searchKey($.i18n.prop("search")); | |
$("#ko_grid_search_txt").addClass("ko-grid-search-txt-default").attr("data-trans", "search"); | |
}; | |
//点击搜索输入框事件 | |
target.searchTextClick = function () { | |
var searchText = $("#ko_grid_search_txt"); | |
if (searchText.hasClass("ko-grid-search-txt-default")) { | |
target.gridTemplate.searchKey(""); | |
target.gridTemplate.searchInitStatus(false); | |
searchText.removeClass("ko-grid-search-txt-default").removeAttr("data-trans"); | |
} | |
}; | |
//离开搜索输入框事件 | |
target.searchTextBlur = function () { | |
var txt = $.trim(target.gridTemplate.searchKey()).toLowerCase(); | |
if (txt == "") { | |
target.clearSearchKey(); | |
} | |
}; | |
//当前表格是否有数据 | |
target.hasData = ko.computed(function () { | |
return target.gridTemplate.afterSearchData().length > 0; | |
}); | |
//当前表格是否有选中的数据 | |
target.hasChecked = ko.computed(function () { | |
return target.gridTemplate.checkedCount() > 0; | |
}); | |
//是否可以点击发送按钮 | |
target.canSend = ko.computed(function () { | |
var checked = target.gridTemplate.checkedCount(); | |
if (!target.checkHasSIMCard(false)) { | |
return false; | |
} | |
return (checked > 0 && checked <= 5); | |
}); | |
//发送短信时,选择用户变化的监控事件 | |
target.draftListenerEvent = function () { | |
pbDraftListener(); | |
}; | |
//文档内容监听,判断是否修改过 | |
function pbDraftListener() { | |
var smsHasCapability = true; | |
if (smsHasCapability) { | |
var content = target.messageContent(); | |
var hasContent = false; | |
var numbers = getSelectValFromChosen($('.search-choice', '#chosenUserSelect_chosen')); | |
var noContactSelected = !(numbers && numbers.length > 0); | |
if (typeof content == "undefined" || content == '') { | |
config.resetContentModifyValue(); | |
return false; | |
} else { | |
hasContent = true; | |
} | |
if (hasContent && !noContactSelected) { | |
config.CONTENT_MODIFIED.modified = true; | |
config.CONTENT_MODIFIED.message = 'sms_to_save_draft'; | |
config.CONTENT_MODIFIED.callback.ok = saveDraftAction; | |
config.CONTENT_MODIFIED.callback.no = $.noop; | |
config.CONTENT_MODIFIED.data = { | |
content: content, | |
numbers: numbers | |
}; | |
return false; | |
} | |
if (hasContent && noContactSelected) { | |
config.CONTENT_MODIFIED.modified = true; | |
config.CONTENT_MODIFIED.message = 'sms_no_recipient'; | |
config.CONTENT_MODIFIED.callback.ok = $.noop; | |
config.CONTENT_MODIFIED.callback.no = function () { | |
// 返回true,页面保持原状 | |
return true; | |
}; | |
return false; | |
} | |
} | |
/*else { cov_2 | |
config.resetContentModifyValue(); | |
}*/ | |
} | |
function saveDraftAction(data) { | |
var datetime = new Date(); | |
var params = { | |
index: -1, | |
currentTimeString: getCurrentTimeString(datetime), | |
groupId: data.numbers.length > 1 ? datetime.getTime() : '', | |
message: data.content, | |
numbers: data.numbers | |
}; | |
service.saveSMS(params, function () { | |
successOverlay('sms_save_draft_success'); | |
}, function () { | |
errorOverlay("sms_save_draft_failed") | |
}); | |
} | |
function smsPageCheckDraft(clearCallback, isNeedInit) { | |
if (config.CONTENT_MODIFIED.message != 'sms_to_save_draft') { | |
if (config.CONTENT_MODIFIED.modified) { | |
showConfirm(config.CONTENT_MODIFIED.message, { | |
ok: function () { | |
config.CONTENT_MODIFIED.callback.ok(config.CONTENT_MODIFIED.data); | |
clearCallback(isNeedInit); | |
}, | |
no: function () { | |
if (config.CONTENT_MODIFIED.message == 'sms_to_save_draft') { | |
clearCallback(isNeedInit); | |
} | |
return false; | |
} | |
}); | |
return false; | |
} else { | |
clearCallback(isNeedInit); | |
} | |
} else { | |
config.CONTENT_MODIFIED.callback.ok(config.CONTENT_MODIFIED.data); | |
clearCallback(isNeedInit); | |
} | |
} | |
//重新获取页面数据并显示 | |
function getPhoneBookReady() { | |
service.getPhoneBookReady({}, function (data) { | |
if (data.pbm_init_flag == "6") { | |
target.initFail(true); | |
hideLoading(); | |
showAlert("phonebook_init_fail"); | |
} else if (data.pbm_init_flag != "0") { | |
addTimeout(getPhoneBookReady, 1000); | |
} else { | |
target.initFail(false); | |
var capacity = getCapacity(); | |
target.capacity(capacity); | |
target.phoneBookCapacity(capacity.Ratio); | |
var phoneBooks = getBooks(capacity.Used); | |
target.books(phoneBooks); | |
target.gridTemplate.data(phoneBooks); | |
$('#books').find('tbody').translate(); | |
hideLoading(); | |
} | |
}); | |
} | |
showLoading('waiting'); | |
addTimeout(getPhoneBookReady, 200); | |
//重新获取页面数据并显示 | |
function refreshPage() { | |
showLoading(); | |
var capacity = getCapacity(); | |
target.phoneBookCapacity(capacity.Ratio); | |
target.capacity(capacity); | |
var books = getBooks(capacity.Used); | |
target.books(books); | |
target.gridTemplate.data(books); | |
hideLoading(); | |
} | |
target.preContent = {}; | |
//保存编辑前的内容 | |
function setPreContent() { | |
target.preContent.location = target.selectedLocation(); | |
target.preContent.name = target.name(); | |
target.preContent.mobile_phone_number = target.mobile_phone_number(); | |
target.preContent.home_phone_number = target.home_phone_number(); | |
target.preContent.office_phone_number = target.office_phone_number(); | |
target.preContent.mail = target.mail(); | |
target.preContent.group = target.selectedGroup(); | |
} | |
//检测数据是否改变 | |
function checkContentChang() { | |
var changed = (target.preContent.location != target.selectedLocation() | |
|| target.preContent.name != target.name() | |
|| target.preContent.mobile_phone_number != target.mobile_phone_number() | |
|| target.preContent.home_phone_number != target.home_phone_number() | |
|| target.preContent.office_phone_number != target.office_phone_number() | |
|| target.preContent.mail != target.mail() | |
|| target.preContent.group != target.selectedGroup()); | |
config.CONTENT_MODIFIED.modified = changed; | |
} | |
function preOpenEditPage() { | |
config.resetContentModifyValue(); | |
setPreContent(); | |
config.CONTENT_MODIFIED.checkChangMethod = checkContentChang; | |
} | |
} | |
//设置停止发送标志为true | |
phoneBookStopSMSSending = function () { | |
_phoneBookStopSMSSending = true; | |
$("#loading #loading_container").html($.i18n.prop("sms_cancel_sending")); | |
} | |
//获取电话本 | |
function getBooks(capacity) { | |
var para = {}; | |
para.page = 0; | |
para.data_per_page = capacity; | |
para.orderBy = "name"; | |
para.isAsc = true; | |
var books = []; | |
var group = getCurrentGroup(); | |
if (config.HAS_SMS) { | |
books = service.getPhoneBooks(para); | |
config.phonebook = books.pbm_data; | |
if (group != "all") { | |
books = { | |
"pbm_data": _.filter(books.pbm_data, function (item) { | |
return item.pbm_group == group; | |
}) | |
}; | |
} | |
} else { | |
if (group != "all") { | |
para.group = group; | |
books = service.getPhoneBooksByGroup(para); | |
} else { | |
books = service.getPhoneBooks(para); | |
} | |
} | |
return translateData(books.pbm_data); | |
} | |
//获取电话本容量信息 | |
function getCapacity() { | |
var sim = service.getSIMPhoneBookCapacity(); | |
var device = service.getDevicePhoneBookCapacity(); | |
return { | |
simUsed: sim.simPbmUsedCapacity, | |
deviceUsed: device.pcPbmUsedCapacity, | |
simCapacity: sim.simPbmTotalCapacity, | |
deviceCapacity: device.pcPbmTotalCapacity, | |
simMaxNameLen: sim.maxNameLen, | |
simMaxNumberLen: sim.maxNumberLen, | |
IsSimCardFull: (sim.simPbmUsedCapacity == sim.simPbmTotalCapacity), | |
IsDeviceFull: (device.pcPbmUsedCapacity == device.pcPbmTotalCapacity), | |
Used: sim.simPbmUsedCapacity + device.pcPbmUsedCapacity, | |
Capacity: sim.simPbmTotalCapacity + device.pcPbmTotalCapacity, | |
Ratio: "(" + (sim.simPbmUsedCapacity + device.pcPbmUsedCapacity) + "/" + (sim.simPbmTotalCapacity + device.pcPbmTotalCapacity) + ")" | |
}; | |
} | |
function translateData(books) { | |
var ret = []; | |
var group = getCurrentGroup(); | |
var hasFilter = (group != "all"); | |
if (books) { | |
for (var i = 0; i < books.length; i++) { | |
if (hasFilter) { | |
var currentGroup = books[i].pbm_group; | |
if (books[i].pbm_location == locationValue.SIM || currentGroup != group) { | |
continue; | |
} | |
} | |
var temp = { | |
index: books[i].pbm_id, | |
location: books[i].pbm_location, | |
imgLocation: books[i].pbm_location == locationValue.SIM ? "pic/simcard.png" : "pic/res_device.png", | |
name: books[i].pbm_name, | |
mobile_phone_number: books[i].pbm_number, | |
home_phone_number: books[i].pbm_anr, | |
office_phone_number: books[i].pbm_anr1, | |
mail: books[i].pbm_email, | |
group: books[i].pbm_group, | |
transGroup: (!books[i].pbm_group) ? "group_null" : "group_" + books[i].pbm_group | |
}; | |
ret.push(temp); | |
} | |
} | |
return ret; | |
} | |
//初始化ViewModel并进行绑定 | |
function init() { | |
var container = $('#container'); | |
ko.cleanNode(container[0]); | |
var vm = new pbViewMode(); | |
ko.applyBindings(vm, container[0]); | |
$("#txtSmsContent").die().live("contextmenu", function () { | |
return false; | |
}); | |
$('#frmPhoneBook').validate({ | |
submitHandler: function () { | |
vm.save(); | |
}, | |
rules: { | |
txtMail: "email_check", | |
txtName: "name_check", | |
txtMobile: "phonenumber_check", | |
txtHomeNumber: "phonenumber_check", | |
txtOfficeNumber: "phonenumber_check" | |
} | |
}); | |
} | |
return { | |
init: init | |
}; | |
}); | |
define("sms_list","underscore jquery knockout set service jq_chosen".split(" "), | |
function (_, $, ko, config, service, chosen) { | |
var currentPage = 1; | |
//数据是否加载完成 | |
var ready = false, | |
//聊天室信息正在加载中 | |
chatRoomInLoading = false; | |
//快速添加联系人模板 | |
var addPhonebookTmpl = null, | |
//短消息模板 | |
smsTableTmpl = null, | |
//接收短消息模板 | |
smsOtherTmpl = null, | |
//发送短消息模板 | |
smsMeTmpl = null, | |
//群聊草稿 | |
groupDrafts = [], | |
//短消息列表显示群聊草稿 | |
groupDraftItems = [], | |
//短消息列表显示群聊草稿及其草稿群聊细节 | |
groupedDraftsObject = {}, | |
//短消息容量信息 | |
smsCapability = {}, | |
//短消息是否还有存储空间 | |
hasCapability = true; | |
//获取全部短消息,并将短信通过回调函数getPhoneBooks,与电话本进行关联 | |
function getSMSMessages(callback) { | |
return service.getSMSMessages({ | |
page: 0, | |
smsCount: 500, | |
nMessageStoreType: 1, | |
tags: 10, | |
orderBy: "order by id desc" | |
}, function (data) { | |
tryToDisableCheckAll($("#smslist-checkAll", "#smsListForm"), data.messages.length); | |
config.dbMsgs = data.messages; | |
config.listMsgs = groupSms(config.dbMsgs); | |
callback(); | |
}, function () { | |
tryToDisableCheckAll($("#smslist-checkAll", "#smsListForm"), 0); | |
config.dbMsgs = []; | |
config.listMsgs = []; | |
cleanSmsList(); | |
}); | |
} | |
//清楚短消息列表内容 | |
cleanSmsList = function () { | |
$("#smslist-table").empty(); | |
}; | |
//关联后的短消息根据电话号码进行分组 | |
function groupSms(messages) { | |
var peoples = {}, | |
theSortedPeoples = []; | |
config.listMsgs = []; | |
groupDrafts = []; | |
$.each(messages, function (i, e) { | |
if (e.tag == '4' && e.groupId != '') { // 群聊草稿 | |
groupDrafts.push(e); | |
return; | |
} | |
e.target = e.number; | |
if (parseInt(e.id, 10) > config.smsMaxId) { | |
config.smsMaxId = e.id; | |
} | |
var last8 = getLastNumber(e.number, config.SMS_MATCH_LENGTH); | |
if (last8 in peoples) { | |
peoples[last8].push(e); | |
} else { | |
peoples[last8] = [e]; | |
theSortedPeoples.push(e); | |
} | |
}); | |
theSortedPeoples = _.sortBy(theSortedPeoples, function (ele) { | |
return 0 - parseInt(ele.id + "", 10); | |
}); | |
$.each(theSortedPeoples, function (s_i, sp) { | |
var people = getLastNumber(sp.number, config.SMS_MATCH_LENGTH); | |
var newCount = 0; | |
var hasDraft = false; | |
for (var i = 0; i < peoples[people].length; i++) { | |
if (peoples[people][i].isNew) { | |
newCount++; | |
} | |
if (peoples[people][i].tag == '4' && peoples[people][i].groupId == '') { // 单条草稿 | |
hasDraft = true; | |
} | |
} | |
config.listMsgs.push({ | |
id: peoples[people][0].id, | |
name: "", | |
number: peoples[people][0].number, | |
latestId: peoples[people][0].id, | |
totalCount: peoples[people].length, | |
newCount: newCount, | |
latestSms: peoples[people][0].content, | |
latestTime: peoples[people][0].time, | |
checked: false, | |
itemId: getLastNumber(people, config.SMS_MATCH_LENGTH), | |
groupId: peoples[people][0].groupId, | |
hasDraft: hasDraft | |
}); | |
}); | |
return config.listMsgs; | |
} | |
//获取电话本信息,并与短消息关联 | |
function getPhoneBooks() { | |
var books = service.getPhoneBooks({ | |
page: 0, | |
data_per_page: 2000, | |
orderBy: "name", | |
isAsc: true | |
}); | |
if ($.isArray(books.pbm_data) && books.pbm_data.length > 0) { | |
config.phonebook = books.pbm_data; | |
} | |
dealPhoneBooks(); | |
} | |
//双异步获取设备侧和sim卡侧的短信息,并将其合并 | |
function dealPhoneBooks() { | |
var select = $("#chosenUserList .chosen-select-deselect"); | |
select.empty(); | |
var options = []; | |
var tmp = []; | |
var pbTmp = []; | |
for (var j = 0; j < config.phonebook.length; j++) { | |
var book = config.phonebook[j]; | |
var last8Num = getLastNumber(book.pbm_number, config.SMS_MATCH_LENGTH); | |
if (last8Num && $.inArray(last8Num, pbTmp) == -1) { | |
options.push(new Option(book.pbm_name + "/" + book.pbm_number, last8Num, false, true)); | |
if ($.inArray(last8Num, tmp) == -1) { | |
tmp.push(last8Num); | |
} | |
pbTmp.push(last8Num); | |
} else { | |
for (var i = 0; i < options.length; i++) { | |
if (options[i].value == last8Num) { | |
options[i].text = book.pbm_name + "/" + book.pbm_number; | |
break; | |
} | |
} | |
} | |
} | |
var groupIds = []; | |
for (var k = 0; k < groupDrafts.length; k++) { // 将草稿做对象Map封装,供草稿组点击后的草稿分解 | |
if ($.inArray(groupDrafts[k].groupId, groupIds) == -1) { | |
groupIds.push(groupDrafts[k].groupId); | |
var draft = groupDrafts[k]; | |
groupedDraftsObject[groupDrafts[k].groupId] = [draft]; | |
} else { | |
var draft = groupDrafts[k]; | |
groupedDraftsObject[groupDrafts[k].groupId].push(draft); | |
} | |
var itemId = getLastNumber(groupDrafts[k].number, config.SMS_MATCH_LENGTH); | |
if ($.inArray(itemId, tmp) == -1) { | |
options.push(new Option(groupDrafts[k].number, itemId)); | |
tmp.push(itemId); | |
} | |
} | |
for (var g in groupedDraftsObject) { // 处理列表显示的草稿信息 | |
var drafts = groupedDraftsObject[g]; | |
var draftItem = drafts[drafts.length - 1]; | |
draftItem.draftShowName = ''; | |
draftItem.draftShowNameTitle = ''; | |
$.each(drafts, function (i, n) { | |
var showName = getShowNameByNumber(n.number); | |
draftItem.draftShowName += (i == 0 ? '' : ';') + showName; | |
draftItem.draftShowNameTitle += (i == 0 ? '' : ';') + showName; | |
}); | |
var len = 10; | |
if (getEncodeType(draftItem.draftShowName).encodeType == "UNICODE") { | |
len = 10; | |
} | |
draftItem.draftShowName = draftItem.draftShowName.length > len ? draftItem.draftShowName.substring(0, len) + "..." : draftItem.draftShowName; | |
draftItem.totalCount = drafts.length; | |
draftItem.hasDraft = true; | |
draftItem.latestTime = draftItem.time; | |
groupDraftItems.push(draftItem); | |
} | |
for (var i = 0; i < config.listMsgs.length; i++) { | |
var smsItem = config.listMsgs[i]; | |
for (var j = config.phonebook.length; j > 0; j--) { | |
var book = config.phonebook[j - 1]; | |
var last8Num = getLastNumber(book.pbm_number, config.SMS_MATCH_LENGTH); | |
if (smsItem.itemId == last8Num) { | |
smsItem.name = book.pbm_name; | |
for (var k = 0; k < options.length; k++) { | |
if (last8Num == options[k].value) { | |
options[k].value = getLastNumber(smsItem.number, config.SMS_MATCH_LENGTH); | |
options[k].text = book.pbm_name + '/' + smsItem.number; | |
break; | |
} | |
} | |
break; | |
} | |
} | |
if ($.inArray(smsItem.itemId, tmp) == -1) { | |
options.push(new Option(smsItem.number, getLastNumber(smsItem.number, config.SMS_MATCH_LENGTH))); | |
tmp.push(smsItem.itemId); | |
} | |
} | |
var opts = ""; | |
$.each(options, function (i, e) { | |
opts += "<option value='" + HTMLEncode(e.value) + "'>" + HTMLEncode(e.text) + "</option>"; | |
}); | |
select.append(opts); | |
select.chosen({ | |
max_selected_options: 5, | |
search_contains: true, | |
width: '740px' | |
}); | |
showSmsListData(); | |
showMultiDraftListData(); | |
//changeShownMsgs(); | |
ready = true; | |
} | |
function showSmsListData() { | |
if (smsTableTmpl == null) { | |
smsTableTmpl = $.template("smsTableTmpl", $("#smsTableTmpl")); | |
} | |
cleanSmsList(); | |
$.tmpl("smsTableTmpl", { | |
data: config.listMsgs | |
}).translate().appendTo("#smslist-table"); | |
if (config.HAS_PHONEBOOK) { | |
$(".sms-add-contact-icon").removeClass("hide"); | |
} else { | |
$(".sms-add-contact-icon").addClass("hide"); | |
} | |
} | |
//群组草稿列表显示 | |
function showMultiDraftListData() { | |
if (groupDraftItems.length == 0) { | |
return false; | |
} | |
if (smsTableTmpl == null) { | |
smsTableTmpl = $.template("smsTableTmpl", $("#smsTableTmpl")); | |
} | |
$.tmpl("smsTableTmpl", { | |
data: groupDraftItems | |
}).translate().prependTo("#smslist-table"); | |
} | |
// 页面发生滚动后,改变页面显示的短消息 | |
function changeShownMsgs() { | |
var shownMsgsTmp = []; | |
var range = _.range((currentPage - 1) * 5, currentPage * 5); | |
$.each(range, function (i, e) { | |
if (config.listMsgs[e]) { | |
shownMsgsTmp.push(config.listMsgs[e]); | |
} | |
}); | |
//shownMsgsTmp = config.listMsgs; | |
currentPage++; | |
if (smsTableTmpl == null) { | |
smsTableTmpl = $.template("smsTableTmpl", $("#smsTableTmpl")); | |
} | |
$.tmpl("smsTableTmpl", { | |
data: shownMsgsTmp | |
}).translate().appendTo("#smslist-table"); | |
renderCheckbox(); | |
if (shownMsgsTmp.length == 0) { | |
disableBtn($("#smslist-delete-all")); | |
tryToDisableCheckAll($("#smslist-checkAll", "#smsListForm"), 0); | |
} else { | |
enableBtn($("#smslist-delete-all")); | |
tryToDisableCheckAll($("#smslist-checkAll", "#smsListForm"), 1); | |
} | |
if (currentPage == 2 && window.innerHeight == $("body").height()) { | |
changeShownMsgs(); | |
} | |
return shownMsgsTmp; | |
} | |
//将被checked的条目添加到self.checkedItem中,用于在滚动还原checkbox | |
checkboxClickHandler = function (id) { | |
checkDeleteBtnStatus(); | |
}; | |
//获取已选择的条目 | |
getSelectedItem = function () { | |
var selected = []; | |
var checkedItem = $("#smslist-table input:checkbox:checked"); | |
checkedItem.each(function (i, e) { | |
selected.push($(e).val()); | |
}); | |
return selected; | |
}; | |
//删除按钮是否禁用 | |
checkDeleteBtnStatus = function () { | |
var size = getSelectedItem().length; | |
if (size == 0) { | |
disableBtn($("#smslist-delete")); | |
} else { | |
enableBtn($("#smslist-delete")); | |
} | |
}; | |
//刷新短消息列表 | |
refreshClickHandler = function () { | |
$("#smslist-table").empty(); | |
disableBtn($("#smslist-delete")); | |
disableCheckbox($("#smslist-checkAll", "#smsListForm")); | |
init(); | |
renderCheckbox(); | |
}; | |
//删除全部短消息 | |
deleteAllClickHandler = function () { | |
showConfirm("confirm_data_delete", function () { | |
showLoading('deleting'); | |
service.deleteAllMessages({ | |
location: "native_inbox" | |
}, function (data) { | |
cleanSmsList(); | |
tryToDisableCheckAll($("#smslist-checkAll", "#smsListForm"), 0); | |
successOverlay(); | |
}, function (error) { | |
errorOverlay(error.errorText); | |
}); | |
}); | |
}; | |
//删除选中的短消息 | |
deleteSelectClickHandler = function () { | |
showConfirm("confirm_sms_delete", function () { | |
showLoading('deleting'); | |
var items = getIdsBySelectedIds(); | |
service.deleteMessage({ | |
ids: items.ids | |
}, function (data) { | |
renderAfterDelete(items); | |
disableBtn($("#smslist-delete")); | |
$("#checkbox-all").removeAttr("checked"); | |
renderCheckbox(); | |
successOverlay(); | |
}, function (error) { | |
errorOverlay(error.errorText); | |
}); | |
}); | |
function renderAfterDelete(items) { | |
var ids = items.ids; | |
var nums = []; | |
$.each(config.dbMsgs, function (i, e) { | |
if ($.inArray(e.id, items.normalIds) != -1) { | |
nums.push(e.number); | |
} | |
}); | |
nums = _.uniq(nums); | |
$.each(nums, function (i, e) { | |
$("#smslist-item-" + getLastNumber(e, config.SMS_MATCH_LENGTH)).hide().remove(); | |
}); | |
$.each(items.groups, function (i, e) { | |
$("#smslist-item-" + e).hide().remove(); | |
}); | |
synchSmsList(nums, ids); | |
} | |
function getIdsBySelectedIds() { | |
var nums = []; | |
var resultIds = []; | |
var normalIds = []; | |
var groups = []; | |
var selectedItem = getSelectedItem(); | |
$.each(selectedItem, function (i, e) { | |
var checkbox = $("#checkbox" + e); | |
if (checkbox.attr("groupid")) { | |
groups.push(checkbox.attr("groupid")); | |
} else { | |
nums.push(getLastNumber(checkbox.attr("number"), config.SMS_MATCH_LENGTH)); | |
} | |
}); | |
$.each(config.dbMsgs, function (i, e) { | |
if ($.inArray(getLastNumber(e.number, config.SMS_MATCH_LENGTH), nums) != -1 && (typeof e.groupId == "undefined" || _.isEmpty(e.groupId + ''))) { | |
resultIds.push(e.id); | |
normalIds.push(e.id); | |
} else if ($.inArray(e.groupId + '', groups) != -1) { //删除草稿组 | |
resultIds.push(e.id); | |
} | |
}); | |
resultIds = _.uniq(resultIds); | |
return { | |
ids: resultIds, | |
groups: groups, | |
normalIds: normalIds | |
}; | |
} | |
}; | |
//新短信按钮点击 | |
newMessageClickHandler = function () { | |
$("#chosenUser1", "#smsChatRoom").addClass("hide"); | |
$("#chosenUser", "#smsChatRoom").show(); | |
cleanChatInput(); | |
checkSmsCapacityAndAlert(); | |
$("select.chosen-select-deselect").val("").trigger("chosen:updated.chosen"); | |
switchPage('chat'); | |
gotoBottom(); | |
clearChatList(); | |
}; | |
//返回聊天室列表 | |
chatCancelClickHandler = function () { | |
if (config.CONTENT_MODIFIED.modified) { | |
var confirmMessage = 'sms_to_save_draft'; | |
var selectedContact = syncSelectAndChosen($("select#chosenUserSelect"), $('.search-choice', '#chosenUserSelect_chosen')); | |
var noContactSelected = !selectedContact || selectedContact.length == 0; | |
if (noContactSelected) { | |
confirmMessage = 'sms_no_recipient'; | |
} | |
if (noContactSelected) { | |
showConfirm(confirmMessage, { | |
ok: function () { | |
if (!noContactSelected) { | |
saveDraftAction({ | |
content: $("#chat-input", "#smsChatRoom").val(), | |
numbers: selectedContact, | |
isFromBack: true | |
}); | |
} | |
config.resetContentModifyValue(); | |
backToSmsListMainPage(); | |
}, | |
no: function () { | |
if (noContactSelected) { | |
return true; | |
} | |
config.resetContentModifyValue(); | |
backToSmsListMainPage(); | |
} | |
}); | |
} else { | |
saveDraftAction({ | |
content: $("#chat-input", "#smsChatRoom").val(), | |
numbers: selectedContact, | |
isFromBack: true | |
}); | |
config.resetContentModifyValue(); | |
backToSmsListMainPage(); | |
} | |
return false; | |
} | |
backToSmsListMainPage(); | |
}; | |
//跳转页面至SIM卡侧、设置界面 | |
toOtherClickHandler = function (href) { | |
config.CONTENT_MODIFIED.checkChangMethod(); | |
if (config.CONTENT_MODIFIED.modified) { | |
draftListener(); | |
if (config.CONTENT_MODIFIED.message == 'sms_to_save_draft') { | |
config.CONTENT_MODIFIED.callback.ok(config.CONTENT_MODIFIED.data); | |
config.resetContentModifyValue(); | |
window.location.hash = href; | |
} else { | |
showConfirm(config.CONTENT_MODIFIED.message, { | |
ok: function () { | |
config.CONTENT_MODIFIED.callback.ok(config.CONTENT_MODIFIED.data); | |
config.resetContentModifyValue(); | |
window.location.hash = href; | |
}, | |
no: function () { | |
var result = config.CONTENT_MODIFIED.callback.no(config.CONTENT_MODIFIED.data); | |
if (!result) { | |
window.location.hash = href; | |
config.resetContentModifyValue(); | |
} | |
} | |
}); | |
} | |
return false; | |
} else { | |
window.location.hash = href; | |
} | |
}; | |
function backToSmsListMainPage() { | |
$("select.chosen-select-deselect").val("").trigger("chosen:updated.chosen"); | |
config.currentChatObject = null; | |
$(".smslist-btns", "#smslist-main").removeClass('smsListFloatButs'); | |
switchPage('list'); | |
} | |
function switchPage(page) { | |
if (page == 'chat') { | |
$("#smslist-main").hide(); | |
$("#smsChatRoom").show(); | |
} else { | |
$("#smsChatRoom").hide(); | |
$("#smslist-main").show(); | |
} | |
} | |
var sendSmsErrorTimer = null; | |
//添加发送错误消息 | |
addSendSmsError = function (msg) { | |
if (sendSmsErrorTimer) { | |
window.clearTimeout(sendSmsErrorTimer); | |
sendSmsErrorTimer = null; | |
} | |
$("#sendSmsErrorLi").text($.i18n.prop(msg)); | |
sendSmsErrorTimer = addTimeout(function () { | |
$("#sendSmsErrorLi").text(""); | |
}, 5000); | |
}; | |
//发送短消息 | |
sendSmsClickHandler = function () { | |
if (!hasCapability) { | |
showAlert("sms_capacity_is_full_for_send"); | |
return; | |
} | |
var inputVal = $("#chat-input", "#smsChatRoom"); | |
var msgContent = inputVal.val(); | |
if (msgContent == $.i18n.prop("chat_input_placehoder")) { | |
inputVal.val(""); | |
msgContent = ""; | |
} | |
var nums = syncSelectAndChosen($("select#chosenUserSelect"), $('.search-choice', '#chosenUserSelect_chosen')); | |
if ($.isArray(nums)) { | |
nums = $.grep(nums, function (n, i) { | |
return !_.isEmpty(n); | |
}); | |
} | |
if (!nums || nums.length == 0) { | |
addSendSmsError("sms_contact_required"); | |
return; | |
} | |
if (nums.length + smsCapability.nvUsed > smsCapability.nvTotal) { | |
showAlert({ | |
msg: "sms_capacity_will_full_just", | |
params: [smsCapability.nvTotal - smsCapability.nvUsed] | |
}); | |
return; | |
} | |
if (nums.length == 1) { | |
config.currentChatObject = getLastNumber(nums[0], config.SMS_MATCH_LENGTH); | |
showLoading('sending'); | |
} else if (nums.length > 1) { | |
showLoading("sending", "<button id='sms_cancel_sending' onclick='cancelSending()' class='btn btn-primary'>" | |
+ $.i18n.prop("sms_stop_sending") | |
+ "</button>"); | |
config.currentChatObject = null; | |
} | |
var i = 0; | |
var leftNum = nums.length; | |
couldSend = true; | |
disableBtn($("#btn-send", "#inputpanel")); | |
sendSms = function () { | |
if (!couldSend) { | |
hideLoading(); | |
return; | |
} | |
var newMsg = { | |
id: -1, | |
number: nums[i], | |
content: msgContent, | |
isNew: false | |
}; | |
if (leftNum == 1) { | |
$("#loading #loading_container").html(""); | |
} | |
leftNum--; | |
service.sendSMS({ | |
number: newMsg.number, | |
message: newMsg.content, | |
id: -1 | |
}, function (data) { | |
var latestMsg = getLatestMessage() || { | |
id: parseInt(config.smsMaxId, 10) + 1, | |
time: transUnixTime($.now()), | |
number: newMsg.number | |
}; | |
config.smsMaxId = latestMsg.id; | |
newMsg.id = config.smsMaxId; | |
newMsg.time = latestMsg.time; | |
newMsg.tag = 2; | |
newMsg.hasDraft = false; | |
if (nums.length > 1) { | |
newMsg.targetName = getNameOrNumberByNumber(newMsg.number); | |
} | |
addSendMessage(newMsg, i + 1 != nums.length); | |
updateDBMsg(newMsg); | |
updateMsgList(newMsg); | |
tryToDisableCheckAll($("#smslist-checkAll", "#smsListForm"), $(".smslist-item", "#smslist-table").length); | |
gotoBottom(); | |
if (i + 1 == nums.length) { | |
updateChatInputWordLength(); | |
enableBtn($("#btn-send", "#inputpanel")); | |
hideLoading(); | |
return; | |
} | |
i++; | |
sendSms(); | |
}, function (error) { | |
var latestMsg = getLatestMessage() || { | |
id: parseInt(config.smsMaxId, 10) + 1, | |
time: transUnixTime($.now()), | |
number: newMsg.number | |
}; | |
config.smsMaxId = latestMsg.id; | |
newMsg.id = config.smsMaxId; | |
newMsg.time = latestMsg.time; | |
newMsg.errorText = $.i18n.prop(error.errorText); | |
newMsg.tag = 3; | |
newMsg.target = newMsg.number; | |
newMsg.hasDraft = false; | |
if (nums.length > 1) { | |
newMsg.targetName = getNameOrNumberByNumber(newMsg.number); | |
} | |
addSendMessage(newMsg, i + 1 != nums.length); | |
updateDBMsg(newMsg); | |
updateMsgList(newMsg); | |
tryToDisableCheckAll($("#smslist-checkAll", "#smsListForm"), $(".smslist-item", "#smslist-table").length); | |
gotoBottom(); | |
if (i + 1 == nums.length) { | |
updateChatInputWordLength(); | |
enableBtn($("#btn-send", "#inputpanel")); | |
hideLoading(); | |
return; | |
} | |
i++; | |
sendSms(); | |
}); | |
}; | |
sendSms(); | |
}; | |
var couldSend = true; | |
//取消剩余短信发送操作 | |
cancelSending = function () { | |
couldSend = false; | |
$("#loading #loading_container").html($.i18n.prop('sms_cancel_sending')); | |
}; | |
//获取最新的短消息 | |
getLatestMessage = function () { | |
var data = service.getSMSMessages({ | |
page: 0, | |
smsCount: 5, | |
nMessageStoreType: 1, | |
tags: 10, | |
orderBy: "order by id desc" | |
}); | |
if (data.messages.length > 0) { | |
for (var i = 0; i < data.messages.length; i++) { | |
if (data.messages[i].tag == '2' || data.messages[i].tag == '3') { | |
return data.messages[i]; | |
} | |
} | |
return null; | |
} else { | |
return null; | |
} | |
}; | |
//发送短信后,更新短信数据对象 | |
function updateDBMsg(msg) { | |
if (config.dbMsgs.length == 0) { | |
config.dbMsgs = [msg]; | |
} else { | |
/* cov_2 | |
for(var j = 0; j < config.dbMsgs.length; j++){ | |
if(config.dbMsgs[j].id == msg.id){ | |
config.dbMsgs[j] = msg; | |
return; | |
} else { | |
var newMsg = [msg]; | |
$.merge(newMsg, config.dbMsgs); | |
config.dbMsgs = newMsg; | |
return; | |
} | |
} | |
*/ | |
if (config.dbMsgs[0].id == msg.id) { | |
config.dbMsgs[0] = msg; | |
return; | |
} else { | |
var newMsg = [msg]; | |
$.merge(newMsg, config.dbMsgs); | |
config.dbMsgs = newMsg; | |
return; | |
} | |
} | |
} | |
//发送短信后,更新短信列表, number不为空做删除处理,为空做增加处理 | |
function updateMsgList(msg, number, counter) { | |
if ((!msg || !msg.number) && !number) { | |
return; | |
} | |
var itemId = ''; | |
if (msg && typeof msg.groupId != "undefined" && msg.groupId != '') { | |
itemId = msg.groupId; | |
} else { | |
itemId = getLastNumber((number || msg.number), config.SMS_MATCH_LENGTH); | |
} | |
var item = $("#smslist-item-" + itemId); | |
if (item && item.length > 0) { | |
var totalCountItem = item.find(".smslist-item-total-count"); | |
var count = totalCountItem.text(); | |
count = Number(count.substring(1, count.length - 1)); | |
if (number) { | |
if (count == 1 || msg == null) { | |
item.hide().remove(); | |
return; | |
} else { | |
totalCountItem.text("(" + (count - (counter || 1)) + ")"); | |
item.find(".smslist-item-draft-flag").addClass('hide'); | |
} | |
} else { | |
totalCountItem.text("(" + (count + 1) + ")"); | |
if (msg.tag == '4') { | |
item.find(".smslist-item-draft-flag").removeClass('hide'); | |
} | |
} | |
item.find(".smslist-item-checkbox p.checkbox").attr("id", msg.id); | |
item.find(".smslist-item-checkbox input:checkbox").val(msg.id).attr("id", "checkbox" + msg.id); | |
var contentHtml = msg.content; | |
var msgContent; | |
if (msg.tag == '4') { | |
//contentHtml = '<span class="smslist-item-draft-flag colorRed" data-trans="draft"></span>: ' + contentHtml; | |
msgContent = item.find(".smslist-item-msg").html('<span class="smslist-item-draft-flag colorRed" data-trans="draft"></span>: ' + HTMLEncode(contentHtml)); //.addClass("font-weight-bold"); | |
} else { | |
msgContent = item.find(".smslist-item-msg").html(HTMLEncode(contentHtml)); //.addClass("font-weight-bold"); | |
} | |
//var msgContent = item.find(".smslist-item-msg").html(HTMLEncode(contentHtml)); //.addClass("font-weight-bold"); | |
msgContent.closest('td').prop('title', msg.content); | |
item.find(".smslist-item-repeat span").die().click(function () { | |
forwardClickHandler(msg.id); | |
}); | |
item.find("span.clock-time").text(msg.time); | |
var tmpItem = item; | |
item.hide().remove(); | |
$("#smslist-table").prepend(tmpItem.show()); | |
} else { | |
if (smsTableTmpl == null) { | |
smsTableTmpl = $.template("smsTableTmpl", $("#smsTableTmpl")); | |
} | |
msg.checked = false; | |
msg.newCount = 0; | |
msg.latestId = msg.id; | |
msg.latestSms = msg.content; | |
msg.latestTime = msg.time; | |
if (msg.groupId == '' || typeof msg.groupId == "undefined") { | |
msg.totalCount = 1; | |
} | |
if (!msg.hasDraft) { | |
msg.hasDraft = false; | |
} | |
msg.itemId = itemId; | |
msg.name = getNameByNumber(msg.number); | |
$.tmpl("smsTableTmpl", { | |
data: [msg] | |
}).translate().prependTo("#smslist-table"); | |
} | |
if (config.HAS_PHONEBOOK) { | |
$(".sms-add-contact-icon").removeClass("hide"); | |
} else { | |
$(".sms-add-contact-icon").addClass("hide"); | |
} | |
$("#smslist-table").translate(); | |
renderCheckbox(); | |
} | |
//增加发送内容到聊天室, notCleanChatInput 是否清除输入框内容 | |
addSendMessage = function (sms, notCleanChatInput) { | |
if (smsMeTmpl == null) { | |
smsMeTmpl = $.template("smsMeTmpl", $("#smsMeTmpl")); | |
} | |
$.tmpl("smsMeTmpl", sms).appendTo("#chatlist"); | |
$("#chatlist").translate(); | |
if (!notCleanChatInput) { | |
cleanChatInput(); | |
} | |
clearMySmsErrorMessage(sms.id); | |
}; | |
//清楚错误消息,避免翻译问题 | |
clearMySmsErrorMessage = function (id) { | |
addTimeout(function () { | |
$("div.error", "#talk-item-" + id).text(""); | |
}, 3000); | |
}; | |
//快速添加联系人overlay是否打开 | |
var isPoped = false; | |
//关闭快速添加联系人overlay | |
hidePopup = function () { | |
$(".tagPopup").remove(); | |
isPoped = false; | |
}; | |
//清空聊天室内容 | |
clearChatList = function () { | |
$("#chatlist").empty(); | |
updateChatInputWordLength(); | |
}; | |
//过滤短消息内容 | |
dealContent = function (content) { | |
if (config.HAS_PHONEBOOK) { | |
return HTMLEncode(content).replace(/(\d{3,})/g, function (word) { | |
var r = (new Date().getTime() + '').substring(6) + (getRandomInt(1000) + 1000); | |
return "<a id='aNumber" + r + "' href='javascript:openPhoneBook(\"" + r + "\", \"" + word + "\")'>" + word + "</a>"; | |
}); | |
} else { | |
return HTMLEncode(content); | |
} | |
}; | |
//打开快速添加联系人overlay | |
openPhoneBook = function (id, num) { | |
var target = null; | |
var outContainer = ""; | |
var itemsContainer = null; | |
var isChatRoom = false; | |
if (!id) { | |
target = $("#listNumber" + getLastNumber(num, config.SMS_MATCH_LENGTH)); | |
outContainer = ".smslist-item"; | |
itemsContainer = $("#addPhonebookContainer"); | |
} else { | |
target = $("#aNumber" + id); | |
outContainer = ".msg_container"; | |
itemsContainer = $("#chatlist"); | |
isChatRoom = true; | |
} | |
if (isPoped) { | |
hidePopup(); | |
} | |
isPoped = true; | |
$("#tagPopup").remove(); | |
if (addPhonebookTmpl == null) { | |
addPhonebookTmpl = $.template("addPhonebookTmpl", $("#addPhonebookTmpl")); | |
} | |
$.tmpl("addPhonebookTmpl", { | |
number: num | |
}).appendTo(itemsContainer); | |
var p = target.position(); | |
var msgContainer = target.closest(outContainer); | |
var msgP = msgContainer.position(); | |
var _left = 0, | |
_top = 0; | |
if (isChatRoom) { | |
var containerWidth = itemsContainer.width(); | |
var containerHeight = itemsContainer.height(); | |
var pop = $("#innerTagPopup"); | |
_left = msgP.left + p.left; | |
_top = msgP.top + p.top + 20; | |
if (pop.width() + _left > containerWidth) { | |
_left = containerWidth - pop.width() - 20; | |
} | |
if (containerHeight > 100 && pop.height() + _top > containerHeight) { | |
_top = containerHeight - pop.height() - 5; | |
} | |
} else { | |
_left = p.left; | |
_top = p.top; | |
} | |
$("#innerTagPopup").css({ | |
top: _top + "px", | |
left: _left + "px" | |
}); | |
$('#quickSaveContactForm').translate().validate({ | |
submitHandler: function () { | |
quickSaveContact(isChatRoom); | |
}, | |
rules: { | |
name: "name_check", | |
number: "phonenumber_check" | |
} | |
}); | |
}; | |
//快速添加联系人 | |
quickSaveContact = function () { | |
var name = $(".tagPopup #innerTagPopup #name").val(); | |
var number = $(".tagPopup #innerTagPopup #number").val(); | |
var newContact = { | |
index: -1, | |
location: 1, | |
name: name, | |
mobile_phone_number: number, | |
home_phone_number: "", | |
office_phone_number: "", | |
mail: "" | |
}; | |
var device = service.getDevicePhoneBookCapacity(); | |
if (device.pcPbmUsedCapacity >= device.pcPbmTotalCapacity) { | |
showAlert("device_full"); | |
return false; | |
} | |
showLoading('waiting'); | |
service.savePhoneBook(newContact, function (data) { | |
if (data.result == "success") { | |
config.phonebook.push({ | |
pbm_name: name, | |
pbm_number: number | |
}); | |
updateItemShowName(name, number); | |
hidePopup(); | |
successOverlay(); | |
} else { | |
errorOverlay(); | |
} | |
}, function (data) { | |
errorOverlay(); | |
}); | |
}; | |
function updateItemShowName(name, number) { | |
var lastNum = getLastNumber(number, config.SMS_MATCH_LENGTH); | |
$("span.smslist-item-name2", "#smslist-item-" + lastNum).text(name); | |
$("#listNumber" + lastNum).hide(); | |
} | |
//聊天室删除单条消息 | |
deleteSingleItemClickHandler = function (id, resendCallback) { | |
if (resendCallback) { | |
deleteTheSingleItem(id); | |
} else { | |
showConfirm("confirm_sms_delete", function () { | |
showLoading('deleting'); | |
deleteTheSingleItem(id); | |
}); | |
} | |
function deleteTheSingleItem(id) { | |
service.deleteMessage({ | |
ids: [id] | |
}, function (data) { | |
var target = $(".smslist-item-delete", "#talk-item-" + id).attr("target"); | |
$("#talk-item-" + id).hide().remove(); | |
synchSmsList(null, [id]); | |
updateMsgList(getPeopleLatestMsg(target), target); | |
if (resendCallback) { | |
resendCallback(); | |
} else { | |
hideLoading(); | |
} | |
tryToDisableCheckAll($("#smslist-checkAll", "#smsListForm"), $(".smslist-item", "#smslist-table").length); | |
}, function (error) { | |
if (resendCallback) { | |
resendCallback(); | |
} else { | |
hideLoading(); | |
} | |
}); | |
} | |
}; | |
//删除草稿 | |
function deleteDraftSms(ids, numbers) { | |
stopNavigation(); | |
service.deleteMessage({ | |
ids: ids | |
}, function (data) { | |
updateSmsCapabilityStatus(null, function () { | |
draftListener(); | |
restoreNavigation(); | |
}); | |
for (var i = 0; i < numbers.length; i++) { | |
updateMsgList(getPeopleLatestMsg(numbers[i]), numbers[i], ids.length); | |
} | |
synchSmsList(null, ids); | |
tryToDisableCheckAll($("#smslist-checkAll", "#smsListForm"), $(".smslist-item", "#smslist-table").length); | |
}, function (error) { | |
restoreNavigation(); | |
// Do nothing | |
}); | |
} | |
//删除群聊草稿草稿 | |
function deleteMultiDraftSms(ids, groupId) { | |
service.deleteMessage({ | |
ids: ids | |
}, function (data) { | |
synchSmsList(null, ids); | |
$("#smslist-item-" + groupId).hide().remove(); | |
checkSmsCapacityAndAlert(); | |
tryToDisableCheckAll($("#smslist-checkAll", "#smsListForm"), $(".smslist-item", "#smslist-table").length); | |
}, function (error) { | |
// Do nothing | |
}); | |
} | |
getCurrentChatObject = function () { | |
var nums = $("select.chosen-select-deselect").val(); | |
if (!nums) { | |
config.currentChatObject = null; | |
} else if (nums.length == 1) { | |
config.currentChatObject = getLastNumber(nums, config.SMS_MATCH_LENGTH); | |
} else if (nums.length > 1) { | |
config.currentChatObject = null; | |
} | |
return config.currentChatObject; | |
}; | |
//获取当前聊天对象最新的短消息 | |
getPeopleLatestMsg = function (number) { | |
for (var j = 0; j < config.dbMsgs.length; j++) { | |
if (!config.dbMsgs[j].groupId && getLastNumber(config.dbMsgs[j].number, config.SMS_MATCH_LENGTH) == getLastNumber(number, config.SMS_MATCH_LENGTH)) { | |
return config.dbMsgs[j]; | |
} | |
} | |
return null; | |
}; | |
//重新发送,复制消息到发送框 | |
resendClickHandler = function (id) { | |
if (!hasCapability) { | |
showAlert("sms_capacity_is_full_for_send"); | |
return; | |
} | |
showLoading('sending'); | |
$("div.error", "#talk-item-" + id).text($.i18n.prop("sms_resending")); | |
var targetNumber = $("div.smslist-item-resend", "#talk-item-" + id).attr("target"); | |
var content = $("div.J_content", "#talk-item-" + id).text(); | |
for (var j = 0; j < config.dbMsgs.length; j++) { | |
if (config.dbMsgs[j].id == id) { | |
content = config.dbMsgs[j].content; | |
} | |
} | |
disableBtn($("#btn-send", "#inputpanel")); | |
var newMsg = { | |
id: -1, | |
number: targetNumber, | |
content: content, | |
isNew: false | |
}; | |
service.sendSMS({ | |
number: newMsg.number, | |
message: newMsg.content, | |
id: -1 | |
}, function (data) { | |
var latestMsg = getLatestMessage() || { | |
id: parseInt(config.smsMaxId, 10) + 1, | |
time: transUnixTime($.now()), | |
number: newMsg.number | |
}; | |
config.smsMaxId = latestMsg.id; | |
newMsg.id = config.smsMaxId; | |
newMsg.time = latestMsg.time; | |
newMsg.tag = 2; | |
newMsg.target = latestMsg.number; | |
newMsg.targetName = getNameOrNumberByNumber(targetNumber); | |
updateDBMsg(newMsg); | |
updateMsgList(newMsg); | |
deleteSingleItemClickHandler(id, function () { | |
addSendMessage(newMsg, true); | |
updateChatInputWordLength(); | |
enableBtn($("#btn-send", "#inputpanel")); | |
hideLoading(); | |
gotoBottom(); | |
}); | |
}, function (error) { | |
var latestMsg = getLatestMessage() || { | |
id: parseInt(config.smsMaxId, 10) + 1, | |
time: transUnixTime($.now()), | |
number: newMsg.number | |
}; | |
config.smsMaxId = latestMsg.id; | |
newMsg.id = config.smsMaxId; | |
newMsg.time = latestMsg.time; | |
newMsg.errorText = $.i18n.prop("sms_resend_fail"); | |
newMsg.tag = 3; | |
newMsg.target = latestMsg.number; | |
newMsg.targetName = getNameOrNumberByNumber(targetNumber); | |
updateDBMsg(newMsg); | |
updateMsgList(newMsg); | |
deleteSingleItemClickHandler(id, function () { | |
addSendMessage(newMsg, true); | |
updateChatInputWordLength(); | |
enableBtn($("#btn-send", "#inputpanel")); | |
hideLoading(); | |
gotoBottom(); | |
}); | |
}); | |
}; | |
//滚动到底部 | |
gotoBottom = function () { | |
$("#chatpanel .clear-container").animate({ | |
scrollTop: $("#chatlist").height() | |
}); | |
}; | |
//最后一条短消息距离顶部的距离 | |
var lastItemOffsetTop = 0; | |
//页面是否处于滚动中 | |
var scrolling = false; | |
//初始化页面状态信息 | |
function initStatus() { | |
currentPage = 1; | |
ready = false; | |
shownMsgs = []; | |
scrolling = false; | |
lastItemOffsetTop = 0; | |
groupDrafts = groupDraftItems = []; | |
groupedDraftsObject = {}; | |
config.dbMsgs = []; | |
config.listMsgs = null; | |
config.smsMaxId = 0; | |
config.phonebook = []; | |
} | |
function getReadyStatus() { | |
showLoading('waiting'); | |
config.currentChatObject = null; | |
var getSMSReady = function () { | |
service.getSMSReady({}, function (data) { | |
if (data.sms_cmd_status_result == "2") { | |
$("input:button", "#smsListForm .smslist-btns").attr("disabled", "disabled"); | |
hideLoading(); | |
showAlert("sms_init_fail"); | |
} else if (data.sms_cmd_status_result == "1") { | |
addTimeout(getSMSReady, 1000); | |
} else { | |
if (config.HAS_PHONEBOOK) { | |
getPhoneBookReady(); | |
} else { | |
initSMSList(false); | |
} | |
} | |
}); | |
}; | |
var getPhoneBookReady = function () { | |
service.getPhoneBookReady({}, function (data) { | |
if (data.pbm_init_flag == "6") { | |
initSMSList(false); | |
} else if (data.pbm_init_flag != "0") { | |
addTimeout(getPhoneBookReady, 1000); | |
} else { | |
initSMSList(true); | |
} | |
}); | |
}; | |
var initSMSList = function (isPbmInitOK) { | |
initStatus(); | |
if (isPbmInitOK) { | |
getSMSMessages(function () { | |
getPhoneBooks(); | |
hideLoading(); | |
}); | |
} else { | |
getSMSMessages(function () { | |
config.phonebook = []; | |
//if(config.HAS_PHONEBOOK){ | |
dealPhoneBooks(); | |
//} | |
hideLoading(); | |
}); | |
} | |
bindingEvents(); | |
fixScrollTop(); | |
window.scrollTo(0, 0); | |
initSmsCapability(); | |
}; | |
getSMSReady(); | |
} | |
//初始化短信容量状态 | |
function initSmsCapability() { | |
var capabilityContainer = $("#smsCapability"); | |
updateSmsCapabilityStatus(capabilityContainer); | |
checkSimStatusForSend(); | |
addInterval(function () { | |
updateSmsCapabilityStatus(capabilityContainer); | |
checkSimStatusForSend(); | |
}, 5000); | |
} | |
//SIM卡未准备好时,禁用发送按钮 | |
function checkSimStatusForSend() { | |
var data = service.getStatusInfo(); | |
if (data.simStatus != 'modem_init_complete') { | |
disableBtn($("#btn-send")); | |
$("#sendSmsErrorLi").html('<span data-trans="no_sim_card_message">' + $.i18n.prop('no_sim_card_message') + '</span>'); | |
$("#chatpanel .smslist-item-resend:visible").hide(); | |
} else { | |
enableBtn($("#btn-send")); | |
$("#chatpanel .smslist-item-resend:hidden").show(); | |
} | |
} | |
//更新短信容量状态 | |
function updateSmsCapabilityStatus(capabilityContainer, callback) { | |
service.getSmsCapability({}, function (capability) { | |
if (capabilityContainer != null) { | |
capabilityContainer.text("(" + (capability.nvUsed > capability.nvTotal ? capability.nvTotal : capability.nvUsed) + "/" + capability.nvTotal + ")"); | |
} | |
hasCapability = capability.nvUsed < capability.nvTotal; | |
smsCapability = capability; | |
if ($.isFunction(callback)) { | |
callback(); | |
} | |
}); | |
} | |
//初始化页面及VM | |
function init() { | |
getReadyStatus(); | |
} | |
//事件绑定 | |
bindingEvents = function () { | |
var $win = $(window); | |
var $smsListBtns = $("#smslist-main .smslist-btns"); | |
var offsetTop = $("#mainContainer").offset().top; | |
$win.unbind("scroll").scroll(function () { | |
if ($win.scrollTop() > offsetTop) { | |
$smsListBtns.addClass("smsListFloatButs marginnone"); | |
} else { | |
$smsListBtns.removeClass("smsListFloatButs marginnone"); | |
} | |
//loadData(); //由于目前数据显示是全显示,不做动态加载,因此暂时注释掉 | |
}); | |
$("#smslist-table p.checkbox").die().live("click", function () { | |
checkboxClickHandler($(this).attr("id")); | |
}); | |
$("#smslist-checkAll", "#smsListForm").die().live("click", function () { | |
checkDeleteBtnStatus(); | |
}); | |
$("#chat-input", "#smsChatRoom").die().live("drop", function () { | |
$("#inputpanel .chatform").addClass("chatformfocus"); | |
var $this = $(this); | |
$this.removeAttr("data-trans"); | |
if ($this.val() == $.i18n.prop("chat_input_placehoder")) { | |
$this.val(""); | |
} | |
updateChatInputWordLength(); | |
}).live("focusin", function () { | |
$("#inputpanel .chatform").addClass("chatformfocus"); | |
var $this = $(this); | |
$this.removeAttr("data-trans"); | |
if ($this.val() == $.i18n.prop("chat_input_placehoder")) { | |
$this.val(""); | |
} | |
updateChatInputWordLength(); | |
}).live("focusout", function () { | |
$("#inputpanel .chatform").removeClass("chatformfocus"); | |
var $this = $(this); | |
if ($this.val() == "" || $this.val() == $.i18n.prop("chat_input_placehoder")) { | |
$this.val($.i18n.prop("chat_input_placehoder")).attr("data-trans", "chat_input_placehoder"); | |
} | |
updateChatInputWordLength(); | |
}).live("keyup", function () { | |
updateChatInputWordLength(); | |
}).live("paste", function () { | |
window.setTimeout(function () { | |
updateChatInputWordLength(); | |
}, 0); | |
}).live("cut", function () { | |
window.setTimeout(function () { | |
updateChatInputWordLength(); | |
}, 0); | |
}).live("drop", function () { | |
window.setTimeout(function () { | |
updateChatInputWordLength(); | |
}, 0); | |
}).live("contextmenu", function () { | |
return false; | |
}); | |
$("#name").die().live("drop", function () { | |
updateNameInputWordLength(); | |
}).live("focusin", function () { | |
updateNameInputWordLength(); | |
}).live("focusout", function () { | |
updateNameInputWordLength(); | |
}).live("keyup", function () { | |
updateNameInputWordLength(); | |
}).live("paste", function () { | |
updateNameInputWordLength(); | |
}).live("cut", function () { | |
updateNameInputWordLength(); | |
}).live("dragend", function () { | |
updateNameInputWordLength(); | |
}).live("contextmenu", function () { | |
return false; | |
}); | |
$("select.chosen-select-deselect", "#smsChatRoom").die().live('change', function () { | |
draftListener(); | |
}); | |
$("#searchInput").die().live('blur', function () { | |
searchTextBlur(); | |
}).live('keyup', function () { | |
updateSearchValue($("#searchInput").val()); | |
}); | |
}; | |
//更新剩余字数 | |
updateNameInputWordLength = function () { | |
var msgInput = $("#name", "#quickSaveContactForm"); | |
var msgInputDom = msgInput[0]; | |
var strValue = msgInput.val(); | |
var encodeType = getEncodeType(strValue); | |
var maxLength = encodeType.encodeType == 'UNICODE' ? 11 : 22; | |
while (strValue.length + encodeType.extendLen > maxLength) { | |
strValue = strValue.substring(0, strValue.length - 1); | |
msgInputDom.value = strValue; | |
encodeType = getEncodeType(strValue); | |
maxLength = encodeType.encodeType == 'UNICODE' ? 11 : 22; | |
} | |
}; | |
//获取聊天对象的名字 | |
getNameByNumber = function (num) { | |
for (var i = config.phonebook.length; i > 0; i--) { | |
if (getLastNumber(config.phonebook[i - 1].pbm_number, config.SMS_MATCH_LENGTH) == getLastNumber(num, config.SMS_MATCH_LENGTH)) { | |
return config.phonebook[i - 1].pbm_name; | |
} | |
} | |
return ""; | |
}; | |
//获取聊天对象的名字和号码 | |
getShowNameByNumber = function (num) { | |
for (var i = config.phonebook.length; i > 0; i--) { | |
if (getLastNumber(config.phonebook[i - 1].pbm_number, config.SMS_MATCH_LENGTH) == getLastNumber(num, config.SMS_MATCH_LENGTH)) { | |
return config.phonebook[i - 1].pbm_name /* + "/" + num*/; | |
} | |
} | |
return num; | |
}; | |
//获取聊天对象的名字,如果没有名字,则显示号码 | |
getNameOrNumberByNumber = function (num) { | |
for (var i = config.phonebook.length; i > 0; i--) { | |
if (config.phonebook[i - 1].pbm_number == num) { | |
return config.phonebook[i - 1].pbm_name; | |
} | |
} | |
for (var i = config.phonebook.length; i > 0; i--) { | |
if (getLastNumber(config.phonebook[i - 1].pbm_number, config.SMS_MATCH_LENGTH) == getLastNumber(num, config.SMS_MATCH_LENGTH)) { | |
return config.phonebook[i - 1].pbm_name; | |
} | |
} | |
return num; | |
}; | |
//点击短信列表条目,进入聊天室页面 | |
smsItemClickHandler = function (num) { | |
if (chatRoomInLoading) { | |
return false; | |
} | |
chatRoomInLoading = true; | |
if (smsOtherTmpl == null) { | |
smsOtherTmpl = $.template("smsOtherTmpl", $("#smsOtherTmpl")); | |
} | |
if (smsMeTmpl == null) { | |
smsMeTmpl = $.template("smsMeTmpl", $("#smsMeTmpl")); | |
} | |
var name = getShowNameByNumber(num); | |
$("#chosenUser", "#smsChatRoom").hide(); | |
$("#chosenUser1", "#smsChatRoom").addClass("hide"); | |
config.currentChatObject = getLastNumber(num, config.SMS_MATCH_LENGTH); | |
setAsRead(num); | |
cleanChatInput(); | |
clearChatList(); | |
var userSelect = $("select.chosen-select-deselect", "#smsChatRoom"); | |
var ops = $("option", userSelect); | |
var numberExist = false; | |
for (var i = 0; i < ops.length; i++) { | |
var n = ops[i]; | |
if (getLastNumber(n.value, config.SMS_MATCH_LENGTH) == config.currentChatObject) { | |
num = n.value; | |
numberExist = true; | |
break; | |
} | |
} | |
if (!numberExist) { | |
userSelect.append("<option value='" + HTMLEncode(num) + "' selected='selected'>" + HTMLEncode(num) + "</option>"); | |
} | |
$("select.chosen-select-deselect").val(num).trigger("chosen:updated.chosen"); | |
switchPage('chat'); | |
config.dbMsgs = _.sortBy(config.dbMsgs, function (e) { | |
return 0 - e.id; | |
}); | |
var draftIds = []; | |
var dbMsgsTmp = []; | |
var dbMsgsTmpIds = []; | |
var chatHasDraft = false; | |
for (var i = config.dbMsgs.length - 1; i >= 0; i--) { | |
var e = config.dbMsgs[i]; | |
if (_.indexOf(dbMsgsTmpIds, e.id) != -1) { | |
continue; | |
} | |
if (getLastNumber(e.number, config.SMS_MATCH_LENGTH) == config.currentChatObject && _.isEmpty(e.groupId)) { | |
e.isNew = false; | |
e.errorText = ''; | |
e.targetName = ''; | |
if (e.tag == "0" || e.tag == "1") { | |
$.tmpl("smsOtherTmpl", e).appendTo("#chatlist"); | |
dbMsgsTmpIds.push(e.id); | |
dbMsgsTmp.push(e); | |
} else if (e.tag == "2" || e.tag == "3") { | |
$.tmpl("smsMeTmpl", e).appendTo("#chatlist"); | |
dbMsgsTmpIds.push(e.id); | |
dbMsgsTmp.push(e); | |
} else if (e.tag == "4") { | |
draftIds.push(e.id); | |
$("#chat-input", "#smsChatRoom").val(e.content).removeAttr('data-trans'); | |
updateChatInputWordLength(); | |
chatHasDraft = true; | |
} | |
} else { | |
dbMsgsTmpIds.push(e.id); | |
dbMsgsTmp.push(e); | |
} | |
} | |
$("#chatlist").translate(); | |
if (chatHasDraft) { | |
$("#chosenUser", "#smsChatRoom").show(); | |
$("#chosenUser1", "#smsChatRoom").addClass("hide"); | |
} else { | |
$("#chosenUser", "#smsChatRoom").hide(); | |
$("#chosenUser1", "#smsChatRoom").removeClass("hide").html(HTMLEncode(name)); | |
} | |
config.dbMsgs = dbMsgsTmp.reverse(); | |
if (draftIds.length > 0) { | |
deleteDraftSms(draftIds, [num]); | |
} else { | |
checkSmsCapacityAndAlert(); | |
} | |
checkSimStatusForSend(); | |
gotoBottom(); | |
chatRoomInLoading = false; | |
}; | |
function checkSmsCapacityAndAlert() { | |
var capabilityContainer = $("#smsCapability"); | |
updateSmsCapabilityStatus(capabilityContainer); | |
addTimeout(function () { | |
if (!hasCapability) { | |
showAlert("sms_capacity_is_full_for_send"); | |
} | |
}, 2000); | |
} | |
cleanChatInput = function () { | |
$("#chat-input", "#smsChatRoom").val($.i18n.prop("chat_input_placehoder")).attr("data-trans", "chat_input_placehoder"); | |
}; | |
//设置为已读 | |
setAsRead = function (num) { | |
var ids = []; | |
$.each(config.dbMsgs, function (i, e) { | |
if (getLastNumber(e.number, config.SMS_MATCH_LENGTH) == getLastNumber(num, config.SMS_MATCH_LENGTH) && e.isNew) { | |
ids.push(e.id); | |
e.isNew = false; | |
} | |
}); | |
if (ids.length > 0) { | |
service.setSmsRead({ | |
ids: ids | |
}, function (data) { | |
if (data.result) { | |
$("#smslist-item-" + getLastNumber(num, config.SMS_MATCH_LENGTH) + " .smslist-item-new-count").text("").addClass("hide"); | |
$("#smslist-item-" + getLastNumber(num, config.SMS_MATCH_LENGTH)).removeClass("font-weight-bold"); | |
$("#smslist-item-" + getLastNumber(num, config.SMS_MATCH_LENGTH) + " td:nth-child(2)").removeClass("font-weight-bold"); | |
} | |
$.each(config.listMsgs, function (i, e) { | |
if (e.number == num && e.newCount > 0) { | |
e.newCount = 0; | |
} | |
}); | |
}); | |
} | |
}; | |
//转发按钮点击事件 | |
forwardClickHandler = function (id) { | |
var selectedContact = syncSelectAndChosen($("select#chosenUserSelect"), $('.search-choice', '#chosenUserSelect_chosen')); | |
var content = $("#chat-input", "#smsChatRoom").val(); | |
var hasContent = typeof content != "undefined" && content != '' && content != $.i18n.prop('chat_input_placehoder'); | |
if (hasContent) { | |
saveDraftAction({ | |
content: content, | |
numbers: selectedContact, | |
isFromBack: true, | |
noLoading: true | |
}); | |
} | |
clearChatList(); | |
config.currentChatObject = null; | |
$("#chosenUser1", "#smsChatRoom").addClass("hide"); | |
$("#chosenUser", "#smsChatRoom").show(); | |
for (var j = 0; j < config.dbMsgs.length; j++) { | |
if (config.dbMsgs[j].id == id) { | |
var theChatInput = $("#chat-input", "#smsChatRoom"); | |
theChatInput.val(config.dbMsgs[j].content); | |
setInsertPos(theChatInput[0], config.dbMsgs[j].content.length); | |
} | |
} | |
updateChatInputWordLength(); | |
$("select.chosen-select-deselect").val("").trigger("chosen:updated.chosen"); | |
addTimeout(function () { | |
$("#chosen-search-field-input").focus(); | |
}, 300); | |
switchPage('chat'); | |
gotoBottom(); | |
}; | |
//更新剩余字数 | |
updateChatInputWordLength = function () { | |
var msgInput = $("#chat-input", "#smsChatRoom"); | |
var msgInputDom = msgInput[0]; | |
var strValue = msgInput.val(); | |
var encodeType = getEncodeType(strValue); | |
var maxLength = encodeType.encodeType == 'UNICODE' ? 335 : 765; | |
if (strValue.length + encodeType.extendLen > maxLength) { | |
var scrollTop = msgInputDom.scrollTop; | |
var insertPos = getInsertPos(msgInputDom); | |
var moreLen = strValue.length + encodeType.extendLen - maxLength; | |
var insertPart = strValue.substr(insertPos - moreLen > 0 ? insertPos - moreLen : 0, moreLen); | |
var reversed = insertPart.split('').reverse(); | |
var checkMore = 0; | |
var cutNum = 0; | |
for (var i = 0; i < reversed.length; i++) { | |
if (getEncodeType(reversed[i]).extendLen > 0) { | |
checkMore += 2; | |
} else { | |
checkMore++; | |
} | |
if (checkMore >= moreLen) { | |
cutNum = i + 1; | |
break; | |
} | |
} | |
var iInsertToStartLength = insertPos - cutNum; | |
msgInputDom.value = strValue.substr(0, iInsertToStartLength) + strValue.substr(insertPos); | |
if (msgInputDom.value.length > maxLength) { | |
msgInputDom.value = msgInputDom.value.substr(0, maxLength); | |
} | |
setInsertPos(msgInputDom, iInsertToStartLength); | |
msgInputDom.scrollTop = scrollTop; | |
} | |
var textLength = 0; | |
var newValue = $(msgInputDom).val(); | |
var newEncodeType = { | |
encodeType: 'GSM7_default', | |
extendLen: 0 | |
}; | |
if (newValue != $.i18n.prop('chat_input_placehoder')) { | |
newEncodeType = getEncodeType(newValue); | |
} | |
var newMaxLength = newEncodeType.encodeType == 'UNICODE' ? 335 : 765; | |
var $inputCount = $("#inputcount", "#inputpanel"); | |
var $inputItemCount = $("#inputItemCount", "#inputpanel"); | |
if (newValue.length + newEncodeType.extendLen >= newMaxLength) { | |
$inputCount.addClass("colorRed"); | |
$inputItemCount.addClass("colorRed"); | |
} else { | |
$("#inputcount", "#inputpanel").removeClass("colorRed"); | |
$("#inputItemCount", "#inputpanel").removeClass("colorRed"); | |
} | |
if ("" != newValue && $.i18n.prop('chat_input_placehoder') != newValue) { | |
textLength = newValue.length + newEncodeType.extendLen; | |
} | |
$inputCount.html("(" + textLength + "/" + newMaxLength + ")"); | |
$inputItemCount.html("(" + getSmsCount(newValue) + "/5)"); | |
draftListener(); | |
}; | |
//文档内容监听,判断是否修改过 | |
function draftListener() { | |
var content = $("#chat-input", "#smsChatRoom").val(); | |
if (hasCapability) { | |
var selectedContact = getSelectValFromChosen($('.search-choice', '#chosenUserSelect_chosen')); | |
var noContactSelected = !selectedContact || selectedContact.length == 0; | |
var hasContent = typeof content != "undefined" && content != '' && content != $.i18n.prop('chat_input_placehoder'); | |
if (!hasContent) { | |
config.resetContentModifyValue(); | |
return; | |
} | |
if (hasContent && !noContactSelected) { | |
config.CONTENT_MODIFIED.modified = true; | |
config.CONTENT_MODIFIED.message = 'sms_to_save_draft'; | |
config.CONTENT_MODIFIED.callback.ok = saveDraftAction; | |
config.CONTENT_MODIFIED.callback.no = $.noop; | |
config.CONTENT_MODIFIED.data = { | |
content: $("#chat-input", "#smsChatRoom").val(), | |
numbers: selectedContact | |
}; | |
return; | |
} | |
if (hasContent && noContactSelected) { | |
config.CONTENT_MODIFIED.modified = true; | |
config.CONTENT_MODIFIED.message = 'sms_no_recipient'; | |
config.CONTENT_MODIFIED.callback.ok = $.noop; | |
config.CONTENT_MODIFIED.callback.no = function () { | |
// 返回true,页面保持原状 | |
return true; | |
}; //$.noop; | |
return; | |
} | |
} else { | |
config.resetContentModifyValue(); | |
} | |
} | |
//保存草稿回调动作 | |
function saveDraftAction(data) { | |
var datetime = new Date(); | |
var params = { | |
index: -1, | |
currentTimeString: getCurrentTimeString(datetime), | |
groupId: data.numbers.length > 1 ? datetime.getTime() : '', | |
message: data.content, | |
numbers: data.numbers | |
}; | |
!data.noLoading && showLoading('waiting'); | |
service.saveSMS(params, function () { | |
if (data.isFromBack) { | |
getLatestDraftSms(data.numbers); | |
!data.noLoading && successOverlay('sms_save_draft_success'); | |
} else { | |
!data.noLoading && successOverlay('sms_save_draft_success'); | |
} | |
}, function () { | |
!data.noLoading && errorOverlay("sms_save_draft_failed") | |
}); | |
//获取最新的草稿信息 | |
function getLatestDraftSms(numbers) { | |
service.getSMSMessages({ | |
page: 0, | |
smsCount: 5, | |
nMessageStoreType: 1, | |
tags: 4, | |
orderBy: "order by id desc" | |
}, function (data) { | |
if (data.messages && data.messages.length > 0) { | |
var theGroupId = '', | |
draftShowName = '', | |
draftShowNameTitle = '', | |
i = 0, | |
drafts = []; | |
for (; i < data.messages.length; i++) { | |
var msg = data.messages[i]; | |
for (var k = 0; k < numbers.length; k++) { | |
var num = numbers[k]; | |
if (getLastNumber(num, config.SMS_MATCH_LENGTH) == getLastNumber(msg.number, config.SMS_MATCH_LENGTH)) { //if (num.indexOf(msg.number) == 0) { | |
msg.number = num; | |
} | |
} | |
if (theGroupId != '' && theGroupId != msg.groupId) { | |
break; | |
} | |
updateDBMsg(msg); | |
if (msg.groupId == '') { // 单条草稿 | |
break; | |
} else { // 多条草稿 | |
theGroupId = msg.groupId; | |
var showName = getShowNameByNumber(msg.number); | |
draftShowName += (i == 0 ? '' : ';') + showName; | |
draftShowNameTitle += (i == 0 ? '' : ';') + showName; | |
} | |
drafts.push(msg); | |
} | |
if (theGroupId == '') { // 单条草稿 | |
var msg = data.messages[0]; | |
msg.hasDraft = true; | |
updateMsgList(msg); | |
} else { // 多条草稿 | |
var msg = data.messages[0]; | |
var len = 10; | |
if (getEncodeType(draftShowName).encodeType == "UNICODE") { | |
len = 10; | |
} | |
msg.draftShowNameTitle = draftShowNameTitle; | |
msg.draftShowName = draftShowName.length > len ? draftShowName.substring(0, len) + "..." : draftShowName; | |
msg.hasDraft = true; | |
msg.totalCount = i; | |
groupedDraftsObject[theGroupId] = drafts; | |
updateMsgList(msg); | |
} | |
tryToDisableCheckAll($("#smslist-checkAll", "#smsListForm"), $(".smslist-item", "#smslist-table").length); | |
} | |
}, function () { | |
// do nothing | |
}); | |
} | |
} | |
//点击群聊草稿进入草稿发送页面 在进入的过程中会先删掉草稿 | |
draftSmsItemClickHandler = function (groupId) { | |
if (chatRoomInLoading) { | |
return false; | |
} | |
chatRoomInLoading = true; | |
var msgs = groupedDraftsObject[groupId]; | |
var numbers = []; | |
var ids = []; | |
for (var i = 0; msgs && i < msgs.length; i++) { | |
numbers.push(getLastNumber(msgs[i].number, config.SMS_MATCH_LENGTH)); | |
ids.push(msgs[i].id + ''); | |
} | |
$("#chosenUser", "#smsChatRoom").show(); | |
$("#chosenUser1", "#smsChatRoom").addClass("hide").html(''); | |
$("select.chosen-select-deselect").val(numbers).trigger("chosen:updated.chosen"); | |
$("#chat-input", "#smsChatRoom").val(msgs[0].content); | |
updateChatInputWordLength(); | |
clearChatList(); | |
switchPage('chat'); | |
draftListener(); | |
gotoBottom(); | |
chatRoomInLoading = false; | |
deleteMultiDraftSms(ids, groupId); | |
}; | |
//按列表条目删除短消息 | |
deletePhoneMessageClickHandler = function (num) { | |
showConfirm("confirm_sms_delete", function () { | |
showLoading('deleting'); | |
var ids = []; | |
$.each(config.dbMsgs, function (i, e) { | |
if (e.number == num) { | |
ids.push(e.id); | |
} | |
}); | |
service.deleteMessage({ | |
ids: ids | |
}, function (data) { | |
$("#smslist-item-" + getLastNumber(num, config.SMS_MATCH_LENGTH)).hide().remove(); | |
synchSmsList([num], ids); | |
successOverlay(); | |
tryToDisableCheckAll($("#smslist-checkAll", "#smsListForm"), $(".smslist-item", "#smslist-table").length); | |
}, function (error) { | |
errorOverlay(error.errorText); | |
}); | |
}); | |
}; | |
//同步短信列表数据 | |
synchSmsList = function (nums, ids) { | |
if (nums && nums.length > 0) { | |
config.listMsgs = $.grep(config.listMsgs, function (n, i) { | |
return $.inArray(n.number, nums) == -1; | |
}); | |
} | |
if (ids && ids.length > 0) { | |
var dbMsgsTmp = []; | |
$.each(config.dbMsgs, function (i, e) { | |
if ($.inArray(e.id, ids) == -1) { | |
dbMsgsTmp.push(e); | |
} | |
}); | |
config.dbMsgs = dbMsgsTmp; | |
} | |
}; | |
//确定最后一条短消息距离顶部的距离 | |
function fixScrollTop() { | |
var items = $(".smslist-item"); | |
var lastOne; | |
if (items.length > 0) { | |
lastOne = items[items.length - 1]; | |
} else { | |
lastOne = items[0]; | |
} | |
lastItemOffsetTop = lastOne ? lastOne.offsetTop : 600; | |
} | |
function loadData() { | |
if (ready && !scrolling && lastItemOffsetTop < ($(window).scrollTop() + $(window).height()) | |
&& $(".smslist-item").length != config.listMsgs.length) { | |
scrolling = true; | |
addTimeout(function () { | |
removeChecked("smslist-checkAll"); | |
changeShownMsgs(); | |
fixScrollTop(); | |
scrolling = false; | |
}, 100); | |
} | |
} | |
function stopNavigation() { | |
disableBtn($('#btn-back')); | |
$('a', '#left').bind("click", function () { | |
return false; | |
}); | |
$('a', '#list-nav').bind("click", function () { | |
return false; | |
}); | |
} | |
function restoreNavigation() { | |
enableBtn($('#btn-back')); | |
$('a', '#left').unbind("click"); | |
$('a', '#list-nav').unbind("click"); | |
} | |
function searchTable(key) { | |
key = $.trim(key); | |
var $trs = $('tr', '#smslist-table'), | |
trLength = $trs.length; | |
if (key == '') { | |
$trs.show(); | |
return false; | |
} | |
$trs.hide(); | |
while (trLength) { | |
var $tr = $($trs[trLength - 1]), | |
$tds = $('td', $tr), | |
tdLength = $tds.length; | |
while (tdLength - 1) { | |
var $td = $($tds[tdLength - 1]); | |
if ($td.text().toLowerCase().indexOf(key.toLowerCase()) != -1) { | |
$tr.show(); | |
break; | |
} | |
tdLength--; | |
} | |
trLength--; | |
} | |
addTimeout(function () { | |
$(":checkbox:checked", "#addPhonebookContainer").removeAttr('checked'); | |
vm.selectedItemIds([]); | |
vm.freshStatus($.now()); | |
renderCheckbox(); | |
}, 300); | |
return true; | |
} | |
updateSearchValue = function (key) { | |
if (key == "" || key == $.i18n.prop("search")) { | |
return true; | |
} | |
searchTable(key); | |
}; | |
//清除搜索关键字事件 | |
clearSearchKey = function () { | |
updateSearchValue($.i18n.prop("search")); | |
$("#searchInput").addClass("ko-grid-search-txt-default").attr("data-trans", "search"); | |
}; | |
//点击搜索输入框事件 | |
searchTextClick = function () { | |
var searchText = $("#searchInput"); | |
if (searchText.hasClass("ko-grid-search-txt-default")) { | |
updateSearchValue(""); | |
searchText.val(""); | |
searchText.removeClass("ko-grid-search-txt-default").removeAttr("data-trans"); | |
} | |
}; | |
//离开搜索输入框事件 | |
searchTextBlur = function () { | |
var txt = $.trim($("#searchInput").val()).toLowerCase(); | |
if (txt == "") { | |
clearSearchKey(); | |
} | |
}; | |
window.smsUtil = { | |
changeLocationHandler: function (ele) { | |
if ($(ele).val() == 'sim') { | |
window.location.hash = '#msg_sim'; | |
} else { | |
window.location.hash = '#msg_main'; | |
} | |
} | |
}; | |
return { | |
init: init | |
}; | |
}); | |
define("sms_set","underscore jquery knockout set service".split(" "), | |
function (_, $, ko, config, service) { | |
var validityModes = _.map(config.SMS_VALIDITY, function (item) { | |
return new Option(item.name, item.value); | |
}); | |
function SmsSetViewMode() { | |
var target = this; | |
var setting = getSmsSetting(); | |
target.modes = ko.observableArray(validityModes); | |
target.selectedMode = ko.observable(setting.validity); | |
target.centerNumber = ko.observable(setting.centerNumber); | |
target.deliveryReport = ko.observable(setting.deliveryReport); | |
target.clear = function () { | |
init(); | |
clearValidateMsg(); | |
}; | |
target.save = function () { | |
showLoading('waiting'); | |
var params = {}; | |
params.validity = target.selectedMode(); | |
params.centerNumber = target.centerNumber(); | |
params.deliveryReport = target.deliveryReport(); | |
service.setSmsSetting(params, function (result) { | |
if (result.result == "success") { | |
successOverlay(); | |
} else { | |
errorOverlay(); | |
} | |
}); | |
}; | |
} | |
//获取短信设置参数 | |
function getSmsSetting() { | |
return service.getSmsSetting(); | |
} | |
function init() { | |
var container = $('#container'); | |
ko.cleanNode(container[0]); | |
var vm = new SmsSetViewMode(); | |
ko.applyBindings(vm, container[0]); | |
$('#smsSettingForm').validate({ | |
submitHandler: function () { | |
vm.save(); | |
}, | |
rules: { | |
txtCenterNumber: "sms_service_center_check" | |
} | |
}); | |
} | |
return { | |
init: init | |
}; | |
}); | |
define("sms_sim_messages","jquery knockout set service".split(" "), | |
function ($, ko, config, service) { | |
var simMsgListTmpl = null; | |
//每页记录条数 | |
var perPage = 200; | |
//获取短信分页记录 | |
function getSMSMessages() { | |
return service.getSMSMessages({ | |
page: 0, | |
smsCount: perPage, | |
nMessageStoreType: 0, | |
tags: 10, | |
orderBy: "order by id desc" | |
}, function (data) { | |
tryToDisableCheckAll($("#simMsgList-checkAll"), data.messages.length); | |
dealPhoneBooks(data.messages); | |
}, function (data) { | |
dealPhoneBooks([]); | |
}); | |
} | |
//短信显示联系人名字,并将结果显示在UI | |
function dealPhoneBooks(messages) { | |
$.each(messages, function (j, n) { | |
n.itemId = getLastNumber(n.number, config.SMS_MATCH_LENGTH); | |
for (var i = 0; i < config.phonebook.length; i++) { | |
var person = config.phonebook[i]; | |
if (n.itemId == getLastNumber(person.pbm_number, config.SMS_MATCH_LENGTH)) { | |
n.name = person.pbm_name; | |
break; | |
} | |
} | |
}); | |
renderSimMessageList(messages); | |
} | |
//清楚短信列表内容 | |
cleanSimSmsList = function () { | |
$("#simMsgList_container").empty(); | |
}; | |
//将短信显示结果显示在UI | |
function renderSimMessageList(messages) { | |
if (simMsgListTmpl == null) { | |
simMsgListTmpl = $.template("simMsgListTmpl", $("#simMsgListTmpl")); | |
} | |
cleanSimSmsList(); | |
$("#simMsgList_container").html($.tmpl("simMsgListTmpl", { | |
data: messages | |
})); | |
hideLoading(); | |
} | |
//初始化电话本信息 | |
function initPhoneBooks(cb) { | |
service.getPhoneBooks({ | |
page: 0, | |
data_per_page: 2000, | |
orderBy: "name", | |
isAsc: true | |
}, function (books) { | |
if ($.isArray(books.pbm_data) && books.pbm_data.length > 0) { | |
config.phonebook = books.pbm_data; | |
} else { | |
config.phonebook = []; | |
} | |
cb(); | |
}, function () { | |
errorOverlay(); | |
}); | |
} | |
function simSmsViewMode() { | |
var self = this; | |
start(); | |
} | |
//短信删除事件处理 | |
deleteSelectedSimMsgClickHandler = function () { | |
var checkbox = $("input[name=msgId]:checked", "#simMsgList_container"); | |
var msgIds = []; | |
for (var i = 0; i < checkbox.length; i++) { | |
msgIds.push($(checkbox[i]).val()); | |
} | |
if (msgIds.length == 0) { | |
return false; | |
} | |
showConfirm("confirm_sms_delete", function () { | |
showLoading('deleting'); | |
service.deleteMessage({ | |
ids: msgIds | |
}, function (data) { | |
removeChecked("simMsgList-checkAll"); | |
disableBtn($("#simMsgList-delete")); | |
var idsForDelete = ""; | |
checkbox.each(function (i, n) { | |
idsForDelete += ".simMsgList-item-class-" + $(n).val() + ","; | |
}); | |
if (idsForDelete.length > 0) { | |
$(idsForDelete.substring(0, idsForDelete.length - 1)).hide().remove(); | |
} | |
tryToDisableCheckAll($("#simMsgList-checkAll"), $(".smslist-item", "#simMsgList_container").length); | |
successOverlay(); | |
}, function (error) { | |
errorOverlay(error.errorText); | |
}); | |
//删除短信后需要刷新列表 | |
updateSimSmsCapabilityStatus($("#simSmsCapability")); | |
}); | |
}; | |
//将被checked的条目添加到self.checkedItem中,用于在滚动还原checkbox | |
function checkboxClickHandler() { | |
if (getSelectedItemSize() == 0) { | |
disableBtn($("#simMsgList-delete")); | |
} else { | |
enableBtn($("#simMsgList-delete")); | |
} | |
} | |
//获取已选择的条目 | |
function getSelectedItemSize() { | |
return $("input:checkbox:checked", '#simMsgList_container').length; | |
} | |
//模块开始,检查电话本及短信状态并加装页码数据 | |
function start() { | |
showLoading('waiting'); | |
var getSMSReady = function () { | |
service.getSMSReady({}, function (data) { | |
if (data.sms_cmd_status_result == "2") { | |
hideLoading(); | |
showAlert("sms_init_fail"); | |
} else if (data.sms_cmd_status_result == "1") { | |
addTimeout(function () { | |
getSMSReady(); | |
}, 1000); | |
} else { | |
if (!config.HAS_PHONEBOOK) { | |
initSMSList(config.HAS_PHONEBOOK); | |
} else { | |
getPhoneBookReady(); | |
} | |
} | |
}); | |
}; | |
var getPhoneBookReady = function () { | |
service.getPhoneBookReady({}, function (data) { | |
if (data.pbm_init_flag == "6") { | |
initSMSList(false); | |
} else if (data.pbm_init_flag != "0") { | |
addTimeout(function () { | |
getPhoneBookReady(); | |
}, 1000); | |
} else { | |
initSMSList(config.HAS_PHONEBOOK); | |
} | |
}); | |
}; | |
var initSMSList = function (isPbmInitOK) { | |
if (isPbmInitOK) { | |
initPhoneBooks(function () { | |
getSMSMessages(); | |
}); | |
} else { | |
config.phonebook = []; | |
getSMSMessages(); | |
} | |
}; | |
getSMSReady(); | |
initSimSmsCapability(); | |
} | |
//初始化短信容量状态 | |
function initSimSmsCapability() { | |
var capabilityContainer = $("#simSmsCapability"); | |
updateSimSmsCapabilityStatus(capabilityContainer); | |
addInterval(function () { | |
updateSimSmsCapabilityStatus(capabilityContainer); | |
}, 5000); | |
} | |
//更新短信容量状态 | |
function updateSimSmsCapabilityStatus(capabilityContainer) { | |
service.getSmsCapability({}, function (capability) { | |
if (capabilityContainer != null) { | |
capabilityContainer.text("(" + capability.simUsed + "/" + capability.simTotal + ")"); | |
} | |
}); | |
} | |
//清除搜索关键字事件 | |
clearSearchKey = function () { | |
updateSearchValue($.i18n.prop("search")); | |
$("#searchInput").addClass("ko-grid-search-txt-default").attr("data-trans", "search"); | |
}; | |
//点击搜索输入框事件 | |
searchTextClick = function () { | |
var searchText = $("#searchInput"); | |
if (searchText.hasClass("ko-grid-search-txt-default")) { | |
updateSearchValue(""); | |
searchText.val(""); | |
searchText.removeClass("ko-grid-search-txt-default").removeAttr("data-trans"); | |
} | |
}; | |
//离开搜索输入框事件 | |
searchTextBlur = function () { | |
var txt = $.trim($("#searchInput").val()).toLowerCase(); | |
if (txt == "") { | |
clearSearchKey(); | |
} | |
}; | |
updateSearchValue = function (key) { | |
if (key == "" || key == $.i18n.prop("search")) { | |
return true; | |
} | |
searchTable(key); | |
} | |
function searchTable(key) { | |
key = $.trim(key); | |
var $trs = $('tr', '#smslist-table'), | |
trLength = $trs.length; | |
if (key == '') { | |
$trs.show(); | |
return false; | |
} | |
$trs.hide(); | |
while (trLength) { | |
var $tr = $($trs[trLength - 1]), | |
$tds = $('td', $tr), | |
tdLength = $tds.length; | |
while (tdLength - 1) { | |
var $td = $($tds[tdLength - 1]); | |
if ($td.text().toLowerCase().indexOf(key.toLowerCase()) != -1) { | |
$tr.show(); | |
break; | |
} | |
tdLength--; | |
} | |
trLength--; | |
} | |
addTimeout(function () { | |
$(":checkbox:checked", "#addPhonebookContainer").removeAttr('checked'); | |
vm.selectedItemIds([]); | |
vm.freshStatus($.now()); | |
renderCheckbox(); | |
}, 300); | |
return true; | |
} | |
//点击短信列表条目 | |
simsmsItemClickHandler = function (tag, id, num) { | |
if (tag == "1") { | |
var ids = []; | |
ids.push(id); | |
service.setSmsRead({ | |
ids: ids | |
}, function (data) { | |
if (data.result) { | |
$(".simMsgList-item-class-" + id, "#simMsgTableContainer").removeClass('font-weight-bold'); | |
} | |
}); | |
} | |
} | |
//页面事件绑定 | |
function initEventBind() { | |
$(".smslist-item-msg", "#simMsgTableContainer").die().live("click", function () { | |
var $this = $(this).addClass('showFullHeight'); | |
$('.smslist-item-msg.showFullHeight', '#simMsgTableContainer').not($this).removeClass('showFullHeight'); | |
}); | |
$("#simMsgList_container p.checkbox, #simMsgListForm #simMsgList-checkAll").die().live("click", function () { | |
checkboxClickHandler(); | |
}); | |
$("#searchInput").die().live('blur', function () { | |
searchTextBlur(); | |
}).live('keyup', function () { | |
updateSearchValue($("#searchInput").val()); | |
}); | |
} | |
//模块初始化开始 | |
function init() { | |
var container = $('#container'); | |
ko.cleanNode(container[0]); | |
var vm = new simSmsViewMode(); | |
ko.applyBindings(vm, container[0]); | |
initEventBind(); | |
} | |
window.smsUtil = { | |
changeLocationHandler: function (ele) { | |
if ($(ele).val() == 'sim') { | |
window.location.hash = '#msg_sim'; | |
} else { | |
window.location.hash = '#msg_main'; | |
} | |
} | |
}; | |
return { | |
init: init | |
}; | |
}); |