wx_api.js 5.6 KB

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