index.js 4.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137
  1. import Vue from 'vue'
  2. import Vuex from 'vuex'
  3. Vue.use(Vuex)
  4. let lifeData = {};
  5. try {
  6. // 尝试获取本地是否存在lifeData变量,第一次启动APP时是不存在的
  7. lifeData = uni.getStorageSync('lifeData');
  8. } catch (e) {
  9. }
  10. // 需要永久存储,且下次APP启动需要取出的,在state中的变量名
  11. let saveStateKeys = [
  12. 'vuex_user',
  13. 'vuex_token',
  14. 'vuex_setting',
  15. 'vuex_openid',
  16. 'vuex_signin',
  17. 'vuex_webs',
  18. 'vuex_lasturl',
  19. 'vuex_theme',
  20. 'vuex_invite_id',
  21. 'vuex_history_keyword'
  22. ];
  23. // 保存变量到本地存储中
  24. const saveLifeData = function(key, value) {
  25. // 判断变量名是否在需要存储的数组中
  26. if (saveStateKeys.indexOf(key) != -1) {
  27. // 获取本地存储的lifeData对象,将变量添加到对象中
  28. let tmp = uni.getStorageSync('lifeData');
  29. // 第一次打开APP,不存在lifeData变量,故放一个{}空对象
  30. tmp = tmp ? tmp : {};
  31. tmp[key] = value;
  32. // 执行这一步后,所有需要存储的变量,都挂载在本地的lifeData对象中
  33. uni.setStorageSync('lifeData', tmp);
  34. }
  35. }
  36. const store = new Vuex.Store({
  37. state: {
  38. // 如果上面从本地获取的lifeData对象下有对应的属性,就赋值给state中对应的变量
  39. // 加上vuex_前缀,是防止变量名冲突,也让人一目了然
  40. vuex_user: lifeData.vuex_user ? lifeData.vuex_user : {},
  41. vuex_history_keyword: lifeData.vuex_history_keyword ? lifeData.vuex_history_keyword : [],
  42. vuex_token: lifeData.vuex_token ? lifeData.vuex_token : '',
  43. vuex_openid: lifeData.vuex_openid ? lifeData.vuex_openid : '',
  44. vuex_invite_id: '',
  45. vuex_config: {},
  46. vuex_setting: lifeData.vuex_setting ? lifeData.vuex_setting : {},
  47. vuex_theme: lifeData.vuex_theme ? lifeData.vuex_theme : {},
  48. vuex_lasturl: lifeData.vuex_lasturl ? lifeData.vuex_lasturl : '/pages/index/index',
  49. vuex_address: {},
  50. vuex__token__: '',
  51. vuex_third: {},
  52. vuex_cart: [],//暂存购物车选择的
  53. vuex_current: 0,
  54. vuex_signin: {},
  55. vuex_webs: {},
  56. vuex_parse_style: {
  57. // 字符串的形式
  58. h1: 'padding:20rpx 0;',
  59. h2: 'padding:10rpx 0;',
  60. h3: 'padding:10rpx 0;',
  61. h4: 'padding:10rpx 0;',
  62. h5: 'padding:5rpx 0;',
  63. h6: 'padding:5rpx 0;',
  64. ul: 'margin-bottom:20rpx;padding-left:30rpx;',
  65. ol: 'margin-bottom:20rpx;padding-left:30rpx;',
  66. code: 'background-color: #f6f6f6;margin: 0 5rpx;padding: 6rpx 8rpx;border-radius: 6rpx;text-align:center;',
  67. pre: 'white-space: pre;overflow: auto;background: #f6f6f6;border-radius: 8rpx;border: none;color: #1a1a1a;margin-bottom: 20rpx;padding:20rpx;',
  68. 'pre code': 'margin:0;padding:0;',
  69. blockquote: 'padding: 15rpx;margin:0 0 20rpx 0;border-radius: 6rpx;',
  70. table: 'width:100%;margin-bottom:20rpx;border-collapse: collapse;',
  71. th: 'background-color: whitesmoke;border: 1px solid #e6e6e6;padding:10rpx;',
  72. td: 'border: 1px solid #e6e6e6;padding:10rpx;',
  73. img:'vertical-align: middle;'
  74. },
  75. //备胎导航
  76. vuex_tabbar: {
  77. "color": "#999",
  78. "selectColor": "#000",
  79. "bgColor": "#FFFFFF",
  80. "borderStyle": "black",
  81. "list": [{
  82. "path": "pages/index/index",
  83. "image": "static/tabbar/home.png",
  84. "selectedImage": "static/tabbar/home-hl.png",
  85. "text": "首页"
  86. },
  87. {
  88. "path": "pages/category/index",
  89. "image": "static/tabbar/category.png",
  90. "selectedImage": "static/tabbar/category-hl.png",
  91. "text": "分类"
  92. },
  93. {
  94. "path": "pages/cart/cart",
  95. "image": "static/tabbar/cart.png",
  96. "selectedImage": "static/tabbar/cart-hl.png",
  97. "text": "购物车"
  98. },
  99. {
  100. "path": "pages/my/my",
  101. "image": "static/tabbar/my.png",
  102. "selectedImage": "static/tabbar/my-hl.png",
  103. "text": "我的"
  104. }
  105. ]
  106. }
  107. },
  108. mutations: {
  109. $uStore(state, payload) {
  110. // 判断是否多层级调用,state中为对象存在的情况,诸如user.info.score = 1
  111. let nameArr = payload.name.split('.');
  112. let saveKey = '';
  113. let len = nameArr.length;
  114. if (len >= 2) {
  115. let obj = state[nameArr[0]];
  116. for (let i = 1; i < len - 1; i++) {
  117. obj = obj[nameArr[i]];
  118. }
  119. obj[nameArr[len - 1]] = payload.value;
  120. saveKey = nameArr[0];
  121. } else {
  122. // 单层级变量,在state就是一个普通变量的情况
  123. state[payload.name] = payload.value;
  124. saveKey = payload.name;
  125. }
  126. // 保存变量到本地,见顶部函数定义
  127. saveLifeData(saveKey, state[saveKey])
  128. }
  129. }
  130. })
  131. export default store