minxing-tools-core
Version:
615 lines (511 loc) • 17.5 kB
JavaScript
angular.module('starter.services', [])
.factory('CreateService', function () {
return {};
})
.factory('HistoryService', function () {
return {};
})
.factory('$transactionPassword', ['$rootScope', '$ionicModal', '$q',
function ($rootScope, $ionicModal, $q) {
return function (_option) {
var deferred = $q.defer();
var option = _option || {};
option.scope = (option.scope || $rootScope).$new();
var passwordUnits = [];
option.scope.__passwordUnitCount = 0;
option.scope.__closePasswordModal = function () {
option.scope.transactionPasswordModal.hide();
deferred.reject({data: passwordUnits.join(''), type: 'CLOSE'});
};
option.scope.__inputPassword = function (_value) {
if (passwordUnits.length < 6) {
passwordUnits.push(_value);
option.scope.__passwordUnitCount = passwordUnits.length;
deferred.notify({data: _value, type: "INPUT"});
if (passwordUnits.length === 6) {
option.scope.transactionPasswordModal.hide();
deferred.resolve(passwordUnits.join(''));
}
}
};
option.scope.__deletePassword = function () {
if (passwordUnits.length > 0) {
var deleteValue = passwordUnits.pop();
option.scope.__passwordUnitCount = passwordUnits.length;
deferred.notify({data: deleteValue, type: 'DELETE'});
}
};
$ionicModal.fromTemplateUrl('templates/service/transactionPasswordModal.html', {
animation: "slide-in-up",
scope: option.scope,
}).then(function (modal) {
option.scope.transactionPasswordModal = modal;
option.scope.transactionPasswordModal.show();
option.scope.$on('$destroy', function () {
option.scope.transactionPasswordModal.remove();
});
});
return deferred.promise;
};
}])
.factory('$selectConversationUser', ['$rootScope', '$ionicModal', '$q',
function ($rootScope, $ionicModal, $q) {
function initViewPersons(persons, selectPersons) {
var initPersons = persons.map(function (person) {
person.isChecked = false;
if (selectPersons) {
for (var i = 0, n = selectPersons.length; i < n; i++) {
if (person.login_name == selectPersons[i].login_name) {
person.isChecked = true;
break;
}
}
}
return person;
});
return initPersons;
};
return function (_option) {
var deferred = $q.defer();
var option = _option || {};
option.scope = (option.scope || $rootScope).$new();
option.scope.selectPersons = _option.selectPersons || [];
option.scope.persons = initViewPersons(_option.persons || [], _option.selectPersons || []);
option.scope.isSingle = _option.isSingle || false;
option.scope.cssClass = _option.cssClass || 'assertive';
$ionicModal.fromTemplateUrl('templates/service/selectConversationUserModal.html', {
animation: "slide-in-right",
scope: option.scope,
}).then(function (modal) {
option.scope.modal = modal;
option.scope.modal.show();
option.scope.$on('$destroy', function () {
option.scope.modal.remove();
});
option.scope.closeModal = function () {
option.scope.modal.hide();
};
option.scope.confirm = function () {
deferred.resolve(option.scope.selectPersons);
option.scope.closeModal();
};
option.scope.change = function (person) {
if (option.scope.isSingle) {
initViewPersons(option.scope.persons);
person.isChecked = true;
}
option.scope.selectPersons = option.scope.persons.filter(function (person) {
return person.isChecked;
});
}
});
return deferred.promise;
};
}])
.factory("RestfulResourcesAddressService", ['RestfulResourceAddress', 'RestfulResources',
function (RestfulResourceAddress, RestfulResources) {
var restfulResourceAddress = RestfulResourceAddress;
return {
setRestfulResourceAddress: function (address) {
restfulResourceAddress = address;
},
getRestfulResourceAddress: function () {
return restfulResourceAddress;
}
};
}])
.factory("$HttpResource", ['$q', '$timeout', '$http', '$httpParamSerializerJQLike', '$ionicLoading',
'MXAPP', 'MXCommonService', 'AppStatus',
function ($q, $timeout, $http, $httpParamSerializerJQLike, $ionicLoading, MXAPP, MXCommonService, AppStatus) {
function httpResource(type, url, params, isShowLoading) {
var defered = $q.defer();
if (null == isShowLoading) {
isShowLoading = true;
}
isShowLoading = isShowLoading && true;
if (isShowLoading) {
$ionicLoading.show({
template: '<ion-spinner class="spinner-panda"></ion-spinner><div class="text-center"><span>正在加载</span></div>',
duration: 60000
});
}
AppStatus.check().then(
function (response) {
MXCommonService.MXCommon.getSsoToken().then(
function (ssoToken) {
$http.defaults.headers.common.Authorization = 'bearer.minxing.' + MXAPP.CLIENT_FLAG + ' ' + ssoToken;
$http({
url: url,
method: type,
data: $httpParamSerializerJQLike(params),
headers: {
'Content-Type': 'application/x-www-form-urlencoded; charset=UTF-8'
}
}).success(function (data) {
$timeout(function () {
if (data && data.code == '00') {
defered.resolve(data.context);
} else {
defered.reject({message: data.message});
}
});
}).error(function (error) {
$timeout(function () {
defered.reject({message: "服务繁忙,请稍候重试!"});
});
}).finally(function () {
$timeout(function () {
if (isShowLoading) {
$ionicLoading.hide();
}
});
});
},
function () {
$ionicLoading.hide();
defered.reject();
}
);
},
function (response) {
$ionicLoading.hide();
defered.reject(response);
}
);
return defered.promise;
}
return {
get: function (url, data, isShowLoading) {
return httpResource("GET", url, data, isShowLoading);
},
post: function (url, data, isShowLoading) {
return httpResource("POST", url, data, isShowLoading);
},
httpResource: httpResource
};
}])
.factory("UserInteractiveService", ['$ionicPopup', '$ionicLoading', '$q',
function ($ionicPopup, $ionicLoading, $q) {
function toast(message) {
return ionicPopupAlert({template: message});
}
function ionicPopupAlert(parameters) {
var option = {
title: "提示信息",
template: '',
okText: '知道了',
okType: 'button-assertive'
};
option = angular.extend({}, option, parameters);
return $ionicPopup.alert(option);
}
function ionicLoadingShow(message) {
var loadingConfig = {
duration: 60000,
template: '<ion-spinner class="spinner-panda"></ion-spinner><div class="text-center"><span>' + message || '正在加载' + '</span></div>'
};
return $ionicLoading.show(loadingConfig);
}
function ionicLoadingHide() {
$ionicLoading.hide();
}
function confirmPopup(parameters) {
var deferred = $q.defer();
var option = {
title: '确认提醒',
template: '您确定此操作么?',
cancelText: '取消',
cancelType: 'button-assertive button-outline',
okText: '确定',
okType: 'button-assertive'
};
option = angular.extend({}, option, parameters);
$ionicPopup.confirm(option)
.then(function (res) {
if (res) {
deferred.resolve();
} else {
deferred.reject();
}
});
return deferred.promise;
}
return {
toast: toast,
alert: ionicPopupAlert,
loading: {
show: ionicLoadingShow,
hide: ionicLoadingHide
},
confirm: confirmPopup
}
}])
.factory("MXCommonService", ['$q', 'AppStatus', 'MXAPP', function ($q, AppStatus, MXAPP) {
var currentUser = null;
var serverUrl = null;
var ssoToken = null;
function getCurrentUser() {
var deferred = $q.defer();
try {
if (currentUser) {
console.log("----------------------");
console.log(currentUser);
console.log("----------------------");
deferred.resolve(currentUser);
} else {
AppStatus.check().then(
function (response) {
MXCommon.getCurrentUser(
function (result) {
console.log("----------------------");
console.log(result);
console.log("----------------------");
currentUser = result;
deferred.resolve(currentUser);
}, function () {
deferred.reject();
}
);
},
function (response) {
deferred.reject(response);
}
);
}
} catch (e) {
deferred.resolve();
}
return deferred.promise;
}
function shareToChatAuto(_options) {
var options = angular.extend({}, {
'title': '', //分享标题
'image_url': '', //缩略图url
'url': '', //分享url
'app_url': '', //app_url,原生的页面。如果是分享的html页面,该字段设置为空
'description': '', //分享描述
'source_id': '', //资源id,比如应用商店中的应用的id,或者公众号的id
'source_type': '', // 值为ocu或app,资源类型
'conversation_id': '' // 群聊的conversation_id
}, _options);
var deferred = $q.defer();
try {
AppStatus.check().then(
function (response) {
MXShare.shareToChatAuto(options
, function () {
deferred.resolve();
}, function () {
deferred.reject();
}
);
},
function (response) {
deferred.reject(response);
}
);
} catch (error) {
deferred.reject();
}
return deferred.promise;
}
function sendRedpackageMessage(_options, conversationID) {
var deferred = $q.defer();
try {
var options = angular.extend({}, {
"data": {
"launch_url": "",
"red_packet_bg_normal_url": "",
"red_packet_bg_selected_url": "",
"red_packet_description": "查看红包",
"red_packet_icon_url": "red pocket",
"red_packet_title": "恭喜发财,大吉大利!",
"red_packet_trademark": "红包"
},
"key": "red_packet"
}, _options);
AppStatus.check().then(
function (response) {
MXChat.sendPluginMessage([options, conversationID]
, function (result) {
deferred.resolve(result);
}, function (result) {
deferred.reject(result);
}
);
},
function (response) {
deferred.reject(response);
}
);
} catch (error) {
deferred.reject(error);
}
return deferred.promise;
}
function getConversationByID(conversation_id) {
var deferred = $q.defer();
try {
AppStatus.check().then(
function (response) {
MXChat.getConversationByID(conversation_id,
function (result) {
console.log("----------------------");
console.log(typeof result);
console.log(result);
console.log("----------------------");
deferred.resolve(JSON.parse(result));
}, function (error) {
deferred.reject("获取当前聊天人错误" + JSON.stringify(error));
});
},
function (response) {
deferred.reject(response);
}
);
} catch (e) {
deferred.reject(e.name + ":" + e.message);
}
return deferred.promise;
}
function getServerUrl() {
var deferred = $q.defer();
try {
if (serverUrl) {
deferred.resolve(serverUrl);
} else {
AppStatus.check().then(
function (response) {
MXCommon.getServerUrl(
function (url) {
serverUrl = url;
deferred.resolve(serverUrl);
}, function () {
deferred.reject();
}
);
},
function (response) {
deferred.reject(response);
}
);
}
} catch (e) {
deferred.resolve("http://im.zsmarter.com");
}
return deferred.promise;
}
function getSsoToken() {
var deferred = $q.defer();
try {
if (ssoToken) {
deferred.resolve(ssoToken);
} else {
AppStatus.check().then(
function (response) {
MXCommon.getSSOToken(MXAPP.ID,
function (ssoTokenP) {
ssoToken = ssoTokenP;
deferred.resolve(ssoToken);
}, function () {
deferred.reject();
}
);
},
function (response) {
deferred.reject(response);
}
);
}
} catch (e) {
deferred.resolve();
}
return deferred.promise;
}
return {
MXCommon: {
getCurrentUser: getCurrentUser,
getServerUrl: getServerUrl,
getSsoToken: getSsoToken
},
MXShare: {
shareToChatAuto: shareToChatAuto
},
MXChat: {
getConversationByID: getConversationByID,
sendRedpackageMessage:sendRedpackageMessage
}
}
}])
.service('AppStatus', ['$q', 'APP_STATUS', function ($q, APP_STATUS) {
this.check = function () {
var delay = $q.defer();
var startTime = new Date().getTime();
if (APP_STATUS.ready) {
delay.resolve('ready');
} else {
APP_STATUS.MIN_XING_READY.then(function (response) {
delay.resolve('ready');
},
function (response) {
delay.reject('应用启动超时请重新进入应用,或联系管理员!');
});
}
return delay.promise;
}
}])
.service('AppStatus', ['$q', 'APP_STATUS', function ($q, APP_STATUS) {
this.check = function () {
var delay = $q.defer();
var startTime = new Date().getTime();
if (APP_STATUS.ready) {
delay.resolve('ready');
} else {
APP_STATUS.MIN_XING_READY.then(function (response) {
delay.resolve('ready');
},
function (response) {
delay.reject('应用启动超时请重新进入应用,或联系管理员!');
});
}
return delay.promise;
}
}])
.run(function ($ionicPlatform, $http, $rootScope, $location, $ionicHistory, $q,
GetNative, APP_STATUS) {
var delay = $q.defer();
APP_STATUS.MIN_XING_READY = delay.promise;
//当进入页面时就获取ssoToken以及服务器地址
function onDeviceReady() {
//APP.AppRuntimeInfo =
GetNative(delay);
}
document.addEventListener("deviceready", onDeviceReady, false);
})
.factory('GetNative', function ($http, $rootScope, MXAPP, APP_STATUS) {
return function (delay) {
getSSOToken(MXAPP.ID);
function tokenCallBack(result) {
//将获取到的token数据放到header中的authorization字段中
$http.defaults.headers.common['authorization'] = 'bearer.minxing.' + MXAPP.CLIENT_FLAG + ' ' + result;
APP_STATUS.ready = true;
delay.resolve({ready: true});
}
function getSSOToken(appID) {
try { //通过appID获取ssoToken方法
MXCommon.getSSOToken(
appID,
tokenCallBack
);
} catch (error) {
APP_STATUS.ready = false;
delay.resolve({ready: false});
}
}
};
})
.constant('APP_STATUS', {
ready: false,
MIN_XING_READY: null
}
);