commonservice.js 17 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347
  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. msg.loading();
  140. ft.onprogress = function (progressEvent) {
  141. if (progressEvent.lengthComputable) {
  142. var per = (progressEvent.loaded / progressEvent.total) * 100;
  143. msg.text('上传:' + Math.floor(per) + '%');
  144. }
  145. };
  146. ft.upload(res, encodeURI(config.server + "api/attachment/upload"), function (sucess) {
  147. msg.hide();
  148. deferred.resolve(sucess);
  149. // alert('上传成功' + JSON.stringify(sucess));
  150. }, function (fail) {
  151. msg.hide();
  152. deferred.reject(fail);
  153. //alert('上传失败' + JSON.stringify(fail));
  154. }, uploadOptions);
  155. },
  156. function (erro) {
  157. deferred.reject(erro);
  158. },
  159. {
  160. fileUri: imageUri,
  161. outputFileName: videoFileName,
  162. outputFileType: VideoEditorOptions.OutputFileType.MPEG4,
  163. optimizeForNetworkUse: VideoEditorOptions.OptimizeForNetworkUse.YES,
  164. saveToLibrary: true,
  165. maintainAspectRatio: true,
  166. width: 1280,
  167. height: 720,
  168. fps: 30,
  169. videoBitrate: 2000000, // 1 megabit
  170. audioChannels: 2,
  171. audioSampleRate: 44100,
  172. audioBitrate: 128000, // 128 kilobits
  173. progress: function (info) {
  174. var f=parseFloat(info)*100;
  175. msg.text('压缩:'+Math.floor(f) + '%');
  176. }
  177. }
  178. );
  179. uploadOptions.fileKey = "video";
  180. uploadOptions.fileName = "video.mp4";
  181. uploadOptions.mimeType = "video/mpeg";
  182. uploadOptions.params = { tag: "video" };
  183. }
  184. if (type == 3) {//头像
  185. uploadOptions.fileKey = "avatar";
  186. uploadOptions.fileName = "avatar.jpg";
  187. uploadOptions.mimeType = "image/jpeg";
  188. uploadOptions.params = { tag: "avatar" };
  189. ft.upload(imageUri, encodeURI(config.server + "api/attachment/upload"), function (sucess) {
  190. deferred.resolve(sucess);
  191. }, function (fail) {
  192. deferred.reject(fail);
  193. }, uploadOptions);
  194. }
  195. } else {
  196. deferred.reject('图片未找到');
  197. }
  198. return deferred.promise;
  199. },
  200. deletefile:function (file) {
  201. return $http({
  202. url: config.server + 'api/attachment/delete/' + file,
  203. method: "get"
  204. })
  205. },
  206. setAvator: function () {//上传头像
  207. var deferred = $q.defer();
  208. var cameraOptions = {
  209. quality: 50,
  210. sourceType: 1,
  211. allowEdit: true,
  212. encodingType: 0,//0为jpg,1为png
  213. targetHeight: 200,
  214. targetWidth: 200
  215. };
  216. this.chooseImage(cameraOptions).then(function (imageUri) {
  217. msg.text('上传中');
  218. var uploadOptions = new FileUploadOptions();
  219. uploadOptions.fileKey = "avatar";
  220. uploadOptions.fileName = "avatar.jpg";
  221. uploadOptions.mimeType = "image/jpeg";
  222. uploadOptions.httpMethod = 'post';
  223. uploadOptions.chunkedMode = true;
  224. var token = 'Bearer ' + localStorage['token'];
  225. uploadOptions.headers = { "Authorization": token };
  226. var ft = new FileTransfer();
  227. ft.upload(imageUri, encodeURI(config.server + "api/auth/avatar"), function (sucess) {
  228. msg.hide();
  229. deferred.resolve(sucess);
  230. // alert('上传成功' + JSON.stringify(sucess));
  231. }, function (fail) {
  232. msg.hide();
  233. deferred.reject(fail);
  234. alert('上传失败' + JSON.stringify(fail));
  235. }, uploadOptions);
  236. });
  237. return deferred.promise;
  238. },
  239. continue_consume: function (data) {
  240. var deferred = $q.defer();
  241. $http({
  242. url: config.server + 'api/service/continue_consume',
  243. method: "post",
  244. data: data
  245. }).success(function (result) {
  246. console.log("result pay:"+JSON.stringify(result));
  247. var payInfo = result.data.orderString;
  248. if (data.pay_type == "alipay_app") {
  249. //支付宝
  250. console.log("result AliPay");
  251. cordova.plugins.AliPay.pay(payInfo, function success(e) {
  252. //e.resultStatus 状态代码 e.result 本次操作返回的结果数据 e.memo 提示信息
  253. //e.resultStatus 9000 订单支付成功 ;8000 正在处理中 调用function success
  254. //e.resultStatus 4000 订单支付失败 ;6001 用户中途取消 ;6002 网络连接出错 调用function error
  255. //当e.resultStatus为9000时,请去服务端验证支付结果
  256. // alert('状态码:' + e.resultStatus);
  257. if (e.resultStatus == '9000') {
  258. deferred.resolve(e.resultStatus);
  259. } else {
  260. deferred.reject(e);
  261. }
  262. }, function error(e) {
  263. deferred.reject(e);
  264. });
  265. }
  266. if (data.pay_type== "wechatpay_app") { //微信
  267. window.wxpay.payment({
  268. appid: payInfo.appid,
  269. noncestr: payInfo.noncestr,
  270. package: payInfo.package,
  271. partnerid: payInfo.partnerid,
  272. prepayid: payInfo.prepayid,
  273. timestamp: payInfo.timestamp,
  274. sign: payInfo.sign
  275. }, function success(msg) {
  276. console.log("wxpay success:"+JSON.stringify(msg));
  277. deferred.resolve(msg);
  278. }, function error(e) {
  279. console.log("wxpay error:"+JSON.stringify(e));
  280. deferred.reject(e);
  281. })
  282. }
  283. }).error(function (error) {
  284. // alert(JSON.stringify(error));
  285. deferred.reject(error);
  286. });
  287. return deferred.promise;
  288. },
  289. pay: function (data) {
  290. var deferred = $q.defer();
  291. $http({
  292. url: config.server + 'api/merchant/charge',
  293. method: "post",
  294. data: data
  295. }).success(function (result) {
  296. console.log("result pay:"+JSON.stringify(result));
  297. var payInfo = result.data.orderString;
  298. if (data.type == 1) {
  299. //支付宝
  300. cordova.plugins.AliPay.pay(payInfo, function success(e) {
  301. //e.resultStatus 状态代码 e.result 本次操作返回的结果数据 e.memo 提示信息
  302. //e.resultStatus 9000 订单支付成功 ;8000 正在处理中 调用function success
  303. //e.resultStatus 4000 订单支付失败 ;6001 用户中途取消 ;6002 网络连接出错 调用function error
  304. //当e.resultStatus为9000时,请去服务端验证支付结果
  305. // alert('状态码:' + e.resultStatus);
  306. if (e.resultStatus == '9000') {
  307. deferred.resolve(e.resultStatus);
  308. } else {
  309. deferred.reject(e);
  310. }
  311. }, function error(e) {
  312. deferred.reject(e);
  313. });
  314. }
  315. if (data.type==2) { //微信
  316. window.wxpay.payment({
  317. appid: payInfo.appid,
  318. noncestr: payInfo.noncestr,
  319. package: payInfo.package,
  320. partnerid: payInfo.partnerid,
  321. prepayid: payInfo.prepayid,
  322. timestamp: payInfo.timestamp,
  323. sign: payInfo.sign
  324. }, function success(msg) {
  325. console.log("wxpay success:"+JSON.stringify(msg));
  326. deferred.resolve(msg);
  327. }, function error(e) {
  328. console.log("wxpay error:"+JSON.stringify(e));
  329. deferred.reject(e);
  330. })
  331. }
  332. }).error(function (error) {
  333. // alert(JSON.stringify(error));
  334. deferred.reject(error);
  335. });
  336. return deferred.promise;
  337. }
  338. };
  339. }]);
  340. })(angular.module('app.services'));