mpi.js 5.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306
  1. let mpi = {}
  2. const tips = (title) => {
  3. uni.showToast({
  4. title,
  5. icon: "none"
  6. });
  7. }
  8. const getScopeDesc = (name) => {
  9. let title = ''
  10. switch (name) {
  11. case 'userInfo':
  12. title = '用户信息'
  13. break;
  14. case 'userLocation':
  15. title = '地理位置'
  16. break;
  17. case 'userLocationBackground':
  18. title = "后台定位"
  19. break;
  20. case 'address':
  21. title = "通讯地址"
  22. break;
  23. case 'record':
  24. title = "录音功能"
  25. break;
  26. case 'writePhotosAlbum':
  27. title = "添加到相册"
  28. break;
  29. case 'camera':
  30. title = "摄像头"
  31. break;
  32. case 'invoice':
  33. title = "获取发票"
  34. break;
  35. case 'invoiceTitle':
  36. title = "发票抬头"
  37. break;
  38. case 'werun':
  39. title = "微信运动步数"
  40. break;
  41. default:
  42. break;
  43. }
  44. return title
  45. }
  46. //打开设置
  47. const openSetting = (authName) => {
  48. return new Promise((resolve, reject) => {
  49. const scopeDesc = getScopeDesc(authName)
  50. let content = `请先在设置页面打开“${scopeDesc}”使用权限`
  51. authName = `scope.${authName}`
  52. uni.getSetting({
  53. success: (res) => {
  54. console.log(res.authSetting);
  55. if (res.authSetting[authName]) {
  56. resolve(res)
  57. } else {
  58. uni.showModal({
  59. title: '提示',
  60. content,
  61. confirmText: '去设置',
  62. cancelText: '暂不设置',
  63. confirmColor: '#EF9944',
  64. success: data => {
  65. if (data.confirm) {
  66. uni.openSetting();
  67. }
  68. }
  69. });
  70. }
  71. }
  72. })
  73. })
  74. }
  75. // 微信登陆
  76. mpi.wxLogin = () => {
  77. return new Promise((resolve, reject) => {
  78. uni.login({
  79. success: function(res) {
  80. resolve(res)
  81. },
  82. fail: function(err) {
  83. console.warn(err)
  84. reject(err)
  85. }
  86. })
  87. })
  88. }
  89. //选择图片 res.tempFilePaths[0]
  90. mpi.chooseImage = (count = 1, size = 2) => {
  91. return new Promise((resolve, reject) => {
  92. uni.chooseImage({
  93. count,
  94. //最多可以选择的图片张数,默认9
  95. sourceType: ['album', 'camera'],
  96. sizeType: ['compressed'],
  97. //可选择原图或压缩后的图片
  98. success: res => {
  99. if (res.tempFiles[0].size > size * 1024 * 1024) {
  100. uni.showToast({
  101. title: `上传的照片不能超过${size}m`,
  102. icon: "none"
  103. })
  104. return
  105. }
  106. resolve(res.tempFilePaths)
  107. },
  108. fail(err) {
  109. reject(err)
  110. }
  111. });
  112. })
  113. }
  114. mpi.downloadFile = (url) => {
  115. return new Promise((resolve, reject) => {
  116. uni.downloadFile({
  117. url, //仅为示例,并非真实的资源
  118. success: (res) => {
  119. if (res.statusCode === 200) {
  120. resolve(res.tempFilePath)
  121. } else {
  122. reject(res)
  123. }
  124. },
  125. fail: function(err) {
  126. reject(err)
  127. }
  128. });
  129. })
  130. }
  131. mpi.saveImg = (filePath) => {
  132. return new Promise((resolve, reject) => {
  133. openSetting('writePhotosAlbum').then(() => {
  134. uni.saveImageToPhotosAlbum({
  135. filePath,
  136. success: function(res) {
  137. uni.showToast({
  138. title: "保存成功",
  139. icon: "none"
  140. });
  141. resolve(res)
  142. },
  143. fail: function(err) {
  144. tips('保存失败,请稍后重试')
  145. reject(err)
  146. }
  147. });
  148. })
  149. })
  150. }
  151. mpi.chooseLocation = () => {
  152. return new Promise((resolve, reject) => {
  153. openSetting('userLocation').then(() => {
  154. uni.chooseLocation({
  155. success(res) {
  156. resolve(res)
  157. },
  158. fail(err) {
  159. reject(err)
  160. }
  161. })
  162. })
  163. })
  164. }
  165. mpi.getLocation = () => {
  166. return new Promise((resolve, reject) => {
  167. uni.getLocation({
  168. type: 'gcj02',
  169. success: function(res) {
  170. resolve(res)
  171. },
  172. fail: function(err) {
  173. reject(err)
  174. }
  175. });
  176. })
  177. }
  178. mpi.getConnectedWifi = () => {
  179. return new Promise((resolve, reject) => {
  180. uni.startWifi({
  181. success: function(res) {
  182. wx.getConnectedWifi({
  183. success: res => {
  184. resolve(res)
  185. },
  186. fail: err => {
  187. reject(err)
  188. }
  189. })
  190. },
  191. fail: function(err) {
  192. reject(err)
  193. }
  194. });
  195. })
  196. }
  197. /**
  198. * 订阅认证信息
  199. */
  200. mpi.subscribe = (tmplIds) => {
  201. return new Promise((resolve, reject) => {
  202. uni.requestSubscribeMessage({
  203. tmplIds,
  204. success(res) {
  205. console.log(res);
  206. resolve(res)
  207. },
  208. fail(err) {
  209. console.log(err);
  210. reject(err)
  211. }
  212. })
  213. })
  214. },
  215. // 获取用户信息
  216. mpi.wxGetUserInfo = () => {
  217. return new Promise((resolve, reject) => {
  218. uni.getUserInfo({
  219. withCredentials: true,
  220. success: function(res) {
  221. resolve(res)
  222. },
  223. fail: function(err) {
  224. reject(err)
  225. },
  226. })
  227. })
  228. }
  229. //新版本的获取用户信息
  230. mpi.getUserProfile = () => {
  231. return new Promise((resolve, reject) => {
  232. uni.getUserProfile({
  233. desc: '用于完善会员资料', // 声明获取用户个人信息后的用途,后续会展示在弹窗中,请谨慎填写
  234. success: (res) => {
  235. resolve(res)
  236. },
  237. fail: (err) => {
  238. reject(err)
  239. }
  240. })
  241. })
  242. }
  243. let compareVersion = (v1, v2) => {
  244. v1 = v1.split('.')
  245. v2 = v2.split('.')
  246. const len = Math.max(v1.length, v2.length)
  247. while (v1.length < len) {
  248. v1.push('0')
  249. }
  250. while (v2.length < len) {
  251. v2.push('0')
  252. }
  253. for (let i = 0; i < len; i++) {
  254. const num1 = parseInt(v1[i])
  255. const num2 = parseInt(v2[i])
  256. if (num1 > num2) {
  257. return 1
  258. } else if (num1 < num2) {
  259. return -1
  260. }
  261. }
  262. return 0
  263. }
  264. mpi.versioning = (minVersion) => {
  265. const version = wx.getSystemInfoSync().SDKVersion
  266. return new Promise((resolve, reject) => {
  267. if (compareVersion(version, minVersion) >= 0) {
  268. resolve()
  269. } else {
  270. uni.showModal({
  271. content: "当前微信版本过低,无法使用该功能,请升级到最新微信版本后重试。"
  272. })
  273. }
  274. })
  275. }
  276. export default mpi