index.js 3.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122
  1. // 定义不需要永久存储的目录,即下次APP启动数据会自动清空,值为在modules目录下的文件名
  2. let notSaveStateKeys = ['$error'];
  3. /* 以下代码请勿改动,除非你知道改动带来的效果 */
  4. const modules = {};
  5. let lifeData = uni.getStorageSync('lifeData') || {};
  6. // #ifdef VUE2
  7. const modulesFiles = require.context('./modules', true, /\.js$/);
  8. modulesFiles.keys().map((modulePath, index) => {
  9. let moduleName = modulePath.replace(/^\.\/(.*)\.\w+$/, '$1')
  10. modules[moduleName] = modulesFiles(modulePath).default;
  11. });
  12. // #endif
  13. // #ifdef VUE3
  14. const modulesFiles = import.meta.globEager('./modules/*.js');
  15. for (const modulePath in modulesFiles) {
  16. const moduleName = modulePath.replace(/^\.\/modules\/(.*)\.\w+$/, '$1')
  17. modules[moduleName] = modulesFiles[modulePath].default;
  18. }
  19. // #endif
  20. for(let moduleName in modules){
  21. if(notSaveStateKeys.indexOf(moduleName) === -1) {
  22. if(!lifeData[moduleName]) lifeData[moduleName] = {};
  23. }
  24. }
  25. uni.setStorageSync('lifeData', lifeData);
  26. // 保存变量到本地存储中
  27. const saveLifeData = function(key, value){
  28. // 判断变量名是否在需要存储的数组中
  29. if(notSaveStateKeys.indexOf(key) === -1) {
  30. // 获取本地存储的lifeData对象,将变量添加到对象中
  31. let tmp = uni.getStorageSync('lifeData');
  32. // 第一次打开APP,不存在lifeData变量,故放一个{}空对象
  33. tmp = tmp ? tmp : {};
  34. tmp[key] = value;
  35. // 执行这一步后,所有需要存储的变量,都挂载在本地的lifeData对象中
  36. uni.setStorageSync('lifeData', tmp);
  37. }
  38. }
  39. // #ifndef VUE3
  40. import Vue from 'vue'
  41. import Vuex from 'vuex'
  42. Vue.use(Vuex)
  43. const store = new Vuex.Store({
  44. modules,
  45. // 如果是开发环境,则开启严格模式
  46. strict: process.env.NODE_ENV === 'development',
  47. // 公共 mutations
  48. mutations: {
  49. updateStore(state, payload) {
  50. // 判断是否多层级调用,state中为对象存在的情况,诸如user.info.score = 1
  51. if(typeof payload.value === "undefined") payload.value = "";
  52. let nameArr = payload.name.split('.');
  53. let saveKey = '';
  54. let len = nameArr.length;
  55. if(len >= 2) {
  56. let obj = state[nameArr[0]];
  57. for(let i = 1; i < len - 1; i ++) {
  58. let keyName = nameArr[i];
  59. if(typeof obj[keyName] !== "object") obj[keyName] = {};
  60. obj = obj[keyName];
  61. }
  62. obj[nameArr[len - 1]] = JSON.parse(JSON.stringify(payload.value));
  63. saveKey = nameArr[0];
  64. } else {
  65. // 单层级变量,在state就是一个普通变量的情况
  66. state[payload.name] = JSON.parse(JSON.stringify(payload.value));
  67. saveKey = payload.name;
  68. }
  69. // 保存变量到本地,见顶部函数定义
  70. saveLifeData(saveKey, state[saveKey])
  71. }
  72. }
  73. })
  74. // #endif
  75. // #ifdef VUE3
  76. import { createStore } from 'vuex'
  77. const store = createStore({
  78. modules,
  79. // 如果是开发环境,则开启严格模式
  80. strict: process.env.NODE_ENV === 'development',
  81. // 公共 mutations
  82. mutations: {
  83. updateStore(state, payload) {
  84. // 判断是否多层级调用,state中为对象存在的情况,诸如user.info.score = 1
  85. if(typeof payload.value === "undefined") payload.value = "";
  86. let nameArr = payload.name.split('.');
  87. let saveKey = '';
  88. let len = nameArr.length;
  89. if(len >= 2) {
  90. let obj = state[nameArr[0]];
  91. for(let i = 1; i < len - 1; i ++) {
  92. let keyName = nameArr[i];
  93. if(typeof obj[keyName] !== "object") obj[keyName] = {};
  94. obj = obj[keyName];
  95. }
  96. obj[nameArr[len - 1]] = JSON.parse(JSON.stringify(payload.value));
  97. saveKey = nameArr[0];
  98. } else {
  99. // 单层级变量,在state就是一个普通变量的情况
  100. state[payload.name] = JSON.parse(JSON.stringify(payload.value));
  101. saveKey = payload.name;
  102. }
  103. // 保存变量到本地,见顶部函数定义
  104. saveLifeData(saveKey, state[saveKey])
  105. }
  106. }
  107. })
  108. // #endif
  109. export default store