commonservice.js 16 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337
  1. (function (app) {
  2. //公共服务
  3. app.factory('common', ['$http', 'config', '$q', 'msg', function ($http, config, $q, msg) {
  4. return {
  5. //经营范围
  6. getSetting: function (category) {
  7. return $http({
  8. url: config.server + 'api/setting/get/' + category,
  9. method: "get"
  10. })
  11. },
  12. //选择图片
  13. chooseImage: function (cameraOptions) {
  14. var deferred = $q.defer();
  15. var defaultCameraOptions = {
  16. quality: 80,
  17. sourceType: Camera.PictureSourceType.CAMERA,
  18. allowEdit: true,
  19. encodingType: 0,//0为jpg,1为png
  20. targetHeight: 400,
  21. targetWidth: 400,
  22. correctOrientation: true,
  23. };
  24. var options = angular.extend(defaultCameraOptions, cameraOptions);
  25. // console.log(JSON.stringify(options))
  26. var sheetOptions = {
  27. title: '选择图片方式',
  28. buttonLabels: ['拍摄照片', '从相册选择'],
  29. addCancelButtonWithLabel: '取消',
  30. androidEnableCancelButton: true
  31. };
  32. window.plugins.actionsheet.show(sheetOptions, function (index) {
  33. switch (index) {
  34. case 1: //拍摄图片
  35. options.sourceType = 1;
  36. break;
  37. case 2://从图库选择
  38. options.sourceType = 2;
  39. break;
  40. default:
  41. return;
  42. deferred.resolve();
  43. break;
  44. }
  45. navigator.camera.getPicture(function (imageUri) {
  46. if (imageUri) {
  47. deferred.resolve(imageUri);
  48. } else {
  49. deferred.reject('图片未找到');
  50. }
  51. }, function (error) {
  52. deferred.reject(error);
  53. }, options);
  54. });
  55. return deferred.promise;
  56. },
  57. //选择视频
  58. chooseVideo: function () {
  59. var deferred = $q.defer();
  60. var sheetOptions = {
  61. title: '选择视频方式',
  62. buttonLabels: ['拍摄视频', '从相册选择'],
  63. addCancelButtonWithLabel: '取消',
  64. androidEnableCancelButton: true
  65. };
  66. window.plugins.actionsheet.show(sheetOptions, function (index) {
  67. switch (index) {
  68. case 1: //拍摄视频
  69. var options1 = { limit: 1, duration:20};
  70. navigator.device.capture.captureVideo(function (videos) {
  71. if (videos[0]) {
  72. deferred.resolve(videos[0].fullPath);
  73. } else {
  74. deferred.reject("视频未找到");
  75. }
  76. }, function (error) {
  77. deferred.reject(error);
  78. }, options1);
  79. break;
  80. case 2://从相册选择
  81. var options2 = {
  82. quality:100,
  83. sourceType: 0,
  84. mediaType: 1
  85. };
  86. navigator.camera.getPicture(function (imageUri) {
  87. if (imageUri) {
  88. deferred.resolve(imageUri);
  89. } else {
  90. deferred.reject('视频未找到');
  91. }
  92. }, function (error) {
  93. deferred.reject(error);
  94. }, options2);
  95. break;
  96. default:
  97. deferred.resolve();
  98. break;
  99. }
  100. });
  101. return deferred.promise;
  102. },
  103. uploadFiles: function (imageUri,type) {//通用上传,type:1图片,2视频
  104. var deferred = $q.defer();
  105. function guid() {
  106. function s4() {
  107. return Math.floor((1 + Math.random()) * 0x10000)
  108. .toString(16)
  109. .substring(1);
  110. }
  111. return s4() + s4() + '-' + s4() + '-' + s4() + '-' +
  112. s4() + '-' + s4() + s4() + s4();
  113. }
  114. if (imageUri) {
  115. var uploadOptions = new FileUploadOptions();
  116. uploadOptions.httpMethod = 'post';
  117. uploadOptions.chunkedMode = true;
  118. var token = 'Bearer ' + localStorage['token'];
  119. uploadOptions.headers = { "Authorization": token };
  120. var ft = new FileTransfer();
  121. if (type==1) {//图片
  122. uploadOptions.fileKey = "picture";
  123. uploadOptions.fileName = "picture.jpg";
  124. uploadOptions.mimeType = "image/jpeg";
  125. uploadOptions.params = { tag: "dream" };
  126. ft.upload(imageUri, encodeURI(config.server + "api/attachment/upload"), function (sucess) {
  127. deferred.resolve(sucess);
  128. }, function (fail) {
  129. deferred.reject(fail);
  130. }, uploadOptions);
  131. }
  132. if (type == 2) {//视频
  133. var videoFileName = guid();
  134. if (imageUri.indexOf('file://')==-1) {
  135. imageUri='file:/' + imageUri;
  136. }
  137. VideoEditor.transcodeVideo(
  138. function (res) {
  139. ft.upload(res, encodeURI(config.server + "api/attachment/upload"), function (sucess) {
  140. deferred.resolve(sucess);
  141. // alert('上传成功' + JSON.stringify(sucess));
  142. }, function (fail) {
  143. deferred.reject(fail);
  144. //alert('上传失败' + JSON.stringify(fail));
  145. }, uploadOptions);
  146. },
  147. function (erro) {
  148. deferred.reject(erro);
  149. },
  150. {
  151. fileUri: imageUri,
  152. outputFileName: videoFileName,
  153. outputFileType: VideoEditorOptions.OutputFileType.MPEG4,
  154. optimizeForNetworkUse: VideoEditorOptions.OptimizeForNetworkUse.YES,
  155. saveToLibrary: true,
  156. maintainAspectRatio: true,
  157. width: 1280,
  158. height: 720,
  159. fps: 30,
  160. videoBitrate: 1000000, // 1 megabit
  161. audioChannels: 2,
  162. audioSampleRate: 44100,
  163. audioBitrate: 128000, // 128 kilobits
  164. progress: function (info) {
  165. }
  166. }
  167. );
  168. uploadOptions.fileKey = "video";
  169. uploadOptions.fileName = "video.mp4";
  170. uploadOptions.mimeType = "video/mpeg";
  171. uploadOptions.params = { tag: "video" };
  172. }
  173. if (type == 3) {//头像
  174. uploadOptions.fileKey = "avatar";
  175. uploadOptions.fileName = "avatar.jpg";
  176. uploadOptions.mimeType = "image/jpeg";
  177. uploadOptions.params = { tag: "avatar" };
  178. ft.upload(imageUri, encodeURI(config.server + "api/attachment/upload"), function (sucess) {
  179. deferred.resolve(sucess);
  180. }, function (fail) {
  181. deferred.reject(fail);
  182. }, uploadOptions);
  183. }
  184. } else {
  185. deferred.reject('图片未找到');
  186. }
  187. return deferred.promise;
  188. },
  189. deletefile:function (file) {
  190. return $http({
  191. url: config.server + 'api/attachment/delete/' + file,
  192. method: "get"
  193. })
  194. },
  195. setAvator: function () {//上传头像
  196. var deferred = $q.defer();
  197. var cameraOptions = {
  198. quality: 50,
  199. sourceType: 1,
  200. allowEdit: true,
  201. encodingType: 0,//0为jpg,1为png
  202. targetHeight: 200,
  203. targetWidth: 200
  204. };
  205. this.chooseImage(cameraOptions).then(function (imageUri) {
  206. msg.text('上传中');
  207. var uploadOptions = new FileUploadOptions();
  208. uploadOptions.fileKey = "avatar";
  209. uploadOptions.fileName = "avatar.jpg";
  210. uploadOptions.mimeType = "image/jpeg";
  211. uploadOptions.httpMethod = 'post';
  212. uploadOptions.chunkedMode = true;
  213. var token = 'Bearer ' + localStorage['token'];
  214. uploadOptions.headers = { "Authorization": token };
  215. var ft = new FileTransfer();
  216. ft.upload(imageUri, encodeURI(config.server + "api/auth/avatar"), function (sucess) {
  217. msg.hide();
  218. deferred.resolve(sucess);
  219. // alert('上传成功' + JSON.stringify(sucess));
  220. }, function (fail) {
  221. msg.hide();
  222. deferred.reject(fail);
  223. alert('上传失败' + JSON.stringify(fail));
  224. }, uploadOptions);
  225. });
  226. return deferred.promise;
  227. },
  228. continue_consume: function (data) {
  229. var deferred = $q.defer();
  230. $http({
  231. url: config.server + 'api/service/continue_consume',
  232. method: "post",
  233. data: data
  234. }).success(function (result) {
  235. console.log("result pay:"+JSON.stringify(result));
  236. var payInfo = result.data.orderString;
  237. if (data.pay_type == "alipay_app") {
  238. //支付宝
  239. console.log("result AliPay");
  240. cordova.plugins.AliPay.pay(payInfo, function success(e) {
  241. //e.resultStatus 状态代码 e.result 本次操作返回的结果数据 e.memo 提示信息
  242. //e.resultStatus 9000 订单支付成功 ;8000 正在处理中 调用function success
  243. //e.resultStatus 4000 订单支付失败 ;6001 用户中途取消 ;6002 网络连接出错 调用function error
  244. //当e.resultStatus为9000时,请去服务端验证支付结果
  245. // alert('状态码:' + e.resultStatus);
  246. if (e.resultStatus == '9000') {
  247. deferred.resolve(e.resultStatus);
  248. } else {
  249. deferred.reject(e);
  250. }
  251. }, function error(e) {
  252. deferred.reject(e);
  253. });
  254. }
  255. if (data.pay_type== "wechatpay_app") { //微信
  256. window.wxpay.payment({
  257. appid: payInfo.appid,
  258. noncestr: payInfo.noncestr,
  259. package: payInfo.package,
  260. partnerid: payInfo.partnerid,
  261. prepayid: payInfo.prepayid,
  262. timestamp: payInfo.timestamp,
  263. sign: payInfo.sign
  264. }, function success(msg) {
  265. console.log("wxpay success:"+JSON.stringify(msg));
  266. deferred.resolve(msg);
  267. }, function error(e) {
  268. console.log("wxpay error:"+JSON.stringify(e));
  269. deferred.reject(e);
  270. })
  271. }
  272. }).error(function (error) {
  273. // alert(JSON.stringify(error));
  274. deferred.reject(error);
  275. });
  276. return deferred.promise;
  277. },
  278. pay: function (data) {
  279. var deferred = $q.defer();
  280. $http({
  281. url: config.server + 'api/merchant/charge',
  282. method: "post",
  283. data: data
  284. }).success(function (result) {
  285. console.log("result pay:"+JSON.stringify(result));
  286. var payInfo = result.data.orderString;
  287. if (data.type == 1) {
  288. //支付宝
  289. cordova.plugins.AliPay.pay(payInfo, function success(e) {
  290. //e.resultStatus 状态代码 e.result 本次操作返回的结果数据 e.memo 提示信息
  291. //e.resultStatus 9000 订单支付成功 ;8000 正在处理中 调用function success
  292. //e.resultStatus 4000 订单支付失败 ;6001 用户中途取消 ;6002 网络连接出错 调用function error
  293. //当e.resultStatus为9000时,请去服务端验证支付结果
  294. // alert('状态码:' + e.resultStatus);
  295. if (e.resultStatus == '9000') {
  296. deferred.resolve(e.resultStatus);
  297. } else {
  298. deferred.reject(e);
  299. }
  300. }, function error(e) {
  301. deferred.reject(e);
  302. });
  303. }
  304. if (data.type==2) { //微信
  305. window.wxpay.payment({
  306. appid: payInfo.appid,
  307. noncestr: payInfo.noncestr,
  308. package: payInfo.package,
  309. partnerid: payInfo.partnerid,
  310. prepayid: payInfo.prepayid,
  311. timestamp: payInfo.timestamp,
  312. sign: payInfo.sign
  313. }, function success(msg) {
  314. console.log("wxpay success:"+JSON.stringify(msg));
  315. deferred.resolve(msg);
  316. }, function error(e) {
  317. console.log("wxpay error:"+JSON.stringify(e));
  318. deferred.reject(e);
  319. })
  320. }
  321. }).error(function (error) {
  322. // alert(JSON.stringify(error));
  323. deferred.reject(error);
  324. });
  325. return deferred.promise;
  326. }
  327. };
  328. }]);
  329. })(angular.module('app.services'));