图书馆小程序
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

58 lines
1.4 KiB

2 weeks ago
  1. const STORAGE_KEY = 'search-list';
  2. const HISTORY_MAX = 10;
  3. export default {
  4. // 独立命名空间
  5. namespaced: true,
  6. // 通过 state 声明数据
  7. state: () => ({
  8. // 优先从 storage 中读取
  9. searchData: uni.getStorageSync(STORAGE_KEY) || []
  10. }),
  11. // 更改 state 数据的唯一方式是:提交 mutations
  12. mutations: {
  13. /**
  14. * 保存数据到 storage
  15. */
  16. saveToStorage(state) {
  17. uni.setStorage({
  18. key: STORAGE_KEY,
  19. data: state.searchData
  20. });
  21. },
  22. /**
  23. * 添加数据
  24. */
  25. addSearchData(state, val) {
  26. if (!val) return;
  27. const index = state.searchData.findIndex((item) => item === val);
  28. if (index !== -1) {
  29. state.searchData.splice(index, 1);
  30. }
  31. // 判断是否超过了最大缓存数量
  32. if (state.searchData.length > HISTORY_MAX) {
  33. state.searchData.splice(HISTORY_MAX - 1, state.searchData.length - HISTORY_MAX - 1);
  34. }
  35. state.searchData.unshift(val);
  36. // 调用 saveToStorage
  37. this.commit('search/saveToStorage');
  38. },
  39. /**
  40. * 删除指定数据
  41. */
  42. removeSearchData(state, index) {
  43. state.searchData.splice(index, 1);
  44. // 调用 saveToStorage
  45. this.commit('search/saveToStorage');
  46. },
  47. /**
  48. * 删除所有数据
  49. */
  50. removeAllSearchData(state) {
  51. state.searchData = [];
  52. // 调用 saveToStorage
  53. this.commit('search/saveToStorage');
  54. }
  55. }
  56. };