store.js 10 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331
  1. import Vue from 'vue' //引入 Vue
  2. import Vuex from 'vuex' //引入 Vuex
  3. import ajax from './common/js/ajax.js' //引入封装好的 request 方法
  4. import { //引入 api
  5. api_onLaunch,
  6. SaveUserInfo
  7. } from './api.js'
  8. Vue.use(Vuex) //套路
  9. const store = new Vuex.Store({
  10. state: { //状态
  11. N401: 0,
  12. code: '',
  13. gotLocation: false,
  14. id: uni.getStorageSync('id'),
  15. openid: uni.getStorageSync('openid'),
  16. networkType: '', //网络状态信息
  17. userWeixinInfo: {}, //用户微信信息,包括微信名,微信头像等
  18. userServerInfo: {}, //用户服务器信息,包括 token,用户名,等级等
  19. // showVerify: false, //是否显示手机短信验证弹窗
  20. showWarn: false, //是否显示警告用户弹窗
  21. showGetUserInfoButton: false, //是否显示获取用户信息button,
  22. showphoneBtn: false, //是否跳转用户手机号授权,
  23. courseList: [],
  24. // userId:'' //用户id用于跳转小程序使用
  25. // sex: uni.getStorageSync('sex')
  26. },
  27. mutations: {
  28. // GRUSERTID(state, userId){ //用户id用于跳转小程序使用
  29. // state.userId = userId
  30. // },
  31. CHANGECOURSELIST(state, courseList) {
  32. state.courseList = courseList
  33. },
  34. CHANGENETWORKSTATUS(state, payload) { //修改网络类型
  35. state.networkType = payload
  36. },
  37. GETUSERWEIXININFO(state, payload) { //获取到用户微信信息之后的操作
  38. console.log('微信信息', payload)
  39. state.userWeixinInfo = payload
  40. },
  41. GETUSERSERVERINFO(state, payload) { //获取到用户服务器信息之后的操作
  42. if (!state.openid) {
  43. uni.setStorageSync('openid', payload.openid)
  44. state.openid = payload.openid
  45. }
  46. if (!state.id) {
  47. uni.setStorageSync('id', payload.id)
  48. state.id = payload.id
  49. }
  50. // payload.cha_nickname = 'TEST1211313123'
  51. // payload.signuped = true
  52. // payload.score =1300
  53. // payload.max_score=1800
  54. // payload.type = 2
  55. // payload.level_name = '批发商'
  56. // payload.money = 1
  57. // payload.status = 3
  58. state.userServerInfo = payload //把获取到的用户服务器信息,保存到 vuex 中
  59. },
  60. HIDEVERIFY(state) { // 关闭手机号码验证弹窗
  61. state.showVerify = false
  62. },
  63. SHOWVERIFY(state) { // 打开手机号码验证弹窗
  64. state.showVerify = true
  65. },
  66. HIDEWARN(state) { // 关闭警告用户弹窗
  67. state.showWarn = false
  68. },
  69. SHOWWARN(state) { // 打开警告用户弹窗
  70. state.showWarn = true
  71. },
  72. SHOWGETUSERINFOBUTTON(state) { //显示获取用户信息按钮
  73. state.showGetUserInfoButton = true
  74. },
  75. HIDEGETUSERINFOBUTTON(state) { //隐藏获取用户信息按钮
  76. state.showGetUserInfoButton = false
  77. },
  78. SHOWPHONE(state) {
  79. state.showphoneBtn = true
  80. },
  81. HIDEPHONE(state) {
  82. state.showphoneBtn = false
  83. },
  84. SIGNUP(state) { // 用户报名成功改变状态
  85. state.userServerInfo.signuped = true
  86. },
  87. GETLOCALTION(state) { // 获取位置信息
  88. state.gotLocation = true
  89. },
  90. READCHALLENGE(state) { // 已读挑战消息
  91. state.userServerInfo.cha_nickname = ''
  92. }
  93. },
  94. actions: {
  95. // 登录接口 进入首页初始化
  96. newLogin({
  97. commit,
  98. state,
  99. dispatch
  100. }) {
  101. return new Promise(async (resolve, reject) => {
  102. let CODE = '123'
  103. if (!state.openid) { //登录状态过期,重新获取 code,并将code 连同用户头像/昵称/openid一同发给后台
  104. const [, {
  105. code
  106. }] = await uni.login()
  107. CODE = code
  108. }
  109. uni.hideLoading() // 异步操作结束,停止 loading
  110. const latitude = uni.getStorageSync('latitude')
  111. const longitude = uni.getStorageSync('longitude')
  112. const nickName = uni.getStorageSync('nickName')
  113. const avatar = uni.getStorageSync('avatar')
  114. const sex = uni.getStorageSync('sex') //后台没有用到
  115. this.$ajax.get(
  116. `${api_onLaunch}?id=${state.id}&sex=${sex}&latitude=${latitude}&longitude=${longitude}&code=${CODE}&avatar=${avatar}&openid=${state.openid ? state.openid : '123'}&nickname=${nickName}`
  117. ).then(([, {
  118. data: res
  119. }]) => {
  120. // res.code = 300
  121. if (res.code === 200) { //当前微信用户已经绑定手机号了
  122. // user_status为1,销售员不能进入系统
  123. if (res.data.user_status == 1) {
  124. uni.reLaunch({
  125. url: "../index/jurisdiction?phone=" + res.data.phone
  126. })
  127. return false
  128. }
  129. state.N401 = 0
  130. commit('GETUSERSERVERINFO', res.data)
  131. // if (res.data.name != '微信用户') {
  132. // uni.setStorageSync('nickName', res.data.name)
  133. // uni.setStorageSync('avatar', res.data.avatar)
  134. // }
  135. uni.hideLoading() //异步操作结束,停止 loading
  136. this.$ajax.get('/user/account_status').then(([, {
  137. data: res
  138. }]) => {
  139. if (res.code === 200) {
  140. if (res.data.status === 1) {
  141. uni.reLaunch({
  142. url: "../loginOutTip/loginOutTip"
  143. })
  144. return false
  145. }
  146. uni.getSetting({
  147. success(res) {
  148. dispatch('getLocation')
  149. // if (!uni.getStorageSync(
  150. // 'nickName') || !uni
  151. // .getStorageSync('avatar')) {
  152. // commit('SHOWGETUSERINFOBUTTON')
  153. // } else {
  154. // dispatch('getLocation')
  155. // }
  156. },
  157. fail() {}
  158. })
  159. }
  160. resolve()
  161. }).catch(() => {
  162. resolve()
  163. })
  164. // } else if (res.code === 20013) { //当前微用户没有绑定手机号,弹出验证码框 // 401 表示 code 过期/失效 openid 获取不到等
  165. // uni.hideLoading() //异步操作结束,停止 loadin
  166. // commit('SHOWVERIFY')
  167. // uni.navigateTo({ url: '../boundPhone/boundPhone' })
  168. // resolve()
  169. // }else{ //其他边界情况,提示用户下拉刷新
  170. // uni.hideLoading() // 异步操作结束,停止 loading
  171. // uni.showModal({
  172. // content: res.msg,
  173. // showCancel: false
  174. // })
  175. // reject(500)
  176. // }
  177. } else if (res.code ===
  178. 300) { //当前微信用户没有绑定手机号,弹出验证码框 // 401 表示 code 过期/失效 openid 获取不到等
  179. uni.hideLoading() //异步操作结束,停止 loadin
  180. // uni.navigateTo({ url: '../boundPhone/boundPhone' })
  181. commit('SHOWPHONE')
  182. // console.log('store里', state.showphoneBtn)
  183. // uni.showModal({
  184. // title: '提示',
  185. // showCancel: false,
  186. // content: '请使用代理商系统的账号密码登录',
  187. // success: function (res) {
  188. // if (res.confirm) {
  189. // uni.navigateTo({ url: '../boundPhone/boundPhone' })
  190. // resolve()
  191. // }
  192. // }
  193. // });
  194. } else if (res.code === 401) {
  195. uni.hideLoading() // 异步操作结束,停止 loading
  196. reject(500)
  197. } else { //其他边界情况,提示用户下拉刷新
  198. uni.hideLoading() // 异步操作结束,停止 loading
  199. reject(500)
  200. }
  201. })
  202. })
  203. },
  204. // 位置信息授权
  205. getLocation({
  206. commit,
  207. state,
  208. dispatch
  209. }) {
  210. return new Promise(async (resolve, reject) => {
  211. const location = await uni.getLocation({
  212. type: 'gcj02'
  213. }) // 获取地理位置信息
  214. // 位置信息授权失败,重新授权
  215. const checkLocation = async () => {
  216. if (!state.gotLocation) {
  217. const [, {
  218. cancel,
  219. confirm
  220. }] = await uni.showModal({
  221. title: '提示',
  222. content: '获取您的位置信息失败,会导致您无法上传图片',
  223. // showCancel: false,
  224. confirmText: '重新获取'
  225. })
  226. if (confirm) {
  227. const settings = await new Promise(resolve => wx.openSetting({
  228. success(res) {
  229. resolve(res.authSetting)
  230. }
  231. }))
  232. if (settings['scope.userLocation']) {
  233. commit('GETLOCALTION')
  234. dispatch('newLogin')
  235. } else {
  236. checkLocation()
  237. }
  238. } else {
  239. commit('GETLOCALTION')
  240. // checkLocation()
  241. }
  242. }
  243. }
  244. if (location.length == 2) {
  245. uni.setStorageSync('latitude', location[1].latitude)
  246. uni.setStorageSync('longitude', location[1].longitude)
  247. commit('GETLOCALTION')
  248. } else {
  249. checkLocation()
  250. }
  251. })
  252. },
  253. // 用户信息
  254. // getUserInfo({
  255. // commit,
  256. // state,
  257. // dispatch
  258. // }) {
  259. // return new Promise(async (resolve, reject) => {
  260. // uni.getUserProfile({
  261. // desc: "获取你的昵称、头像、地区及性别",
  262. // success: (res) => {
  263. // console.log("所有",res)
  264. // },
  265. // fail:(err)=> {
  266. // uni.getUserProfile({})
  267. // }
  268. // })
  269. // return
  270. // const [getUserWeixinInfoErr, userWeixinInfo] = await uni.getUserProfile({
  271. // desc: 'Wexin'
  272. // }) // 获取用户信息
  273. // if (getUserWeixinInfoErr) { //获取用户微信信息失败后,重新获取授权
  274. // uni.hideLoading() //取消loading
  275. // uni.showModal({
  276. // title: '提示',
  277. // showCancel: false,
  278. // content: '不授权将无法获取到您的用户信息,请开启授权',
  279. // success: function(res) {
  280. // if (res.confirm) {
  281. // commit('SHOWGETUSERINFOBUTTON')
  282. // }
  283. // }
  284. // })
  285. // } else { // 用户信息授权成功
  286. // let that = this
  287. // commit('GETUSERWEIXININFO', userWeixinInfo.userInfo) //将获取到的用户微信信息存在 store 里
  288. // uni.setStorageSync('nickName', userWeixinInfo.userInfo.nickName)
  289. // uni.setStorageSync('avatar', userWeixinInfo.userInfo.avatarUrl)
  290. // uni.setStorageSync('sex', userWeixinInfo.userInfo.gender)
  291. // that.$ajax.get(
  292. // `${SaveUserInfo}?nickname=${ userWeixinInfo.userInfo.nickName}&avatar=${ userWeixinInfo.userInfo.avatarUrl}`
  293. // ).then(([, {
  294. // data: res
  295. // }]) => {
  296. // if (res.code == 200) {
  297. // dispatch('newLogin')
  298. // }
  299. // })
  300. // }
  301. // })
  302. // }
  303. //用户信息
  304. // getUserInfo({
  305. // commit,
  306. // state,
  307. // dispatch
  308. // }) {
  309. // return new Promise(async (resolve, reject) => {
  310. // console.log(uni.getStorageSync('nickName'), uni.getStorageSync('avatar'))
  311. // if (!uni.getStorageSync('nickName') || !uni.getStorageSync('avatar')) {
  312. // uni.showModal({
  313. // content: '为了更好的体验该程序,我们将获取您的昵称和头像',
  314. // success: res => {
  315. // if (res.confirm) {
  316. // uni.navigateTo({
  317. // url: '../information/information'
  318. // })
  319. // }
  320. // }
  321. // })
  322. // }
  323. // })
  324. // }
  325. }
  326. })
  327. Vuex.Store.prototype.$ajax = ajax(store)
  328. export default store