123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143 |
- const cacheManager = (function() {
- const STORAGE_PREFIX = 'App_cache_';
- function set(key, value) {
- const fullKey = STORAGE_PREFIX + key;
- if (typeof value === 'object' && value !== null) {
- // 如果是对象,则将其转换为字符串存储
- uni.setStorageSync(fullKey, JSON.stringify(value));
- } else {
- uni.setStorageSync(fullKey, value);
- }
- }
- // 获取缓存
- function get(key) {
- const fullKey = STORAGE_PREFIX + key;
- const value = uni.getStorageSync(fullKey);
- try {
- return JSON.parse(value);
- } catch (e) {
- return value;
- }
- }
- // 删除缓存
- function remove(key) {
- const fullKey = STORAGE_PREFIX + key;
- uni.removeStorageSync(fullKey);
- }
- //例子: cacheManager.updateObject('user', { www: undefined }); //删除
- function updateObject(key, updates) {
- let obj = get(key) || {};
- // 合并更新到对象中
- //Object.assign(obj, updates);
- for (let [keyToUpdate, value] of Object.entries(updates)) {
- if (value === null || value === undefined) {
- // 如果值为 null 或 undefined,则删除属性
- delete obj[keyToUpdate];
- } else {
- obj[keyToUpdate] = value;
- }
- }
- set(key, obj);
- }
- // 用于视频已经看完 修改状态
- function updateJieStatus(key, index, currentJieId) {
- let obj = get(key) || {};
- for (let jie of obj.zhangList[index].jieList) {
- if (jie.jieId == currentJieId) {
- // console.log('jie',jie);
- jie.studyFlag = 1
- break
- }
- }
- set(key, obj);
- }
- // 更新会员
- function updateVipStatus(key, cardId) {
- let obj = get(key) || {};
- if (!obj.cardList.includes(cardId)) {
- obj.cardList.push(Number(cardId));
- }
- set(key, obj);
- }
- // 获得当前jie参数
- function getCurrentJieData(key, index, currentJieId) {
- let obj = get(key) || {};
- for (let jie of obj.zhangList[index].jieList) {
- if (jie.jieId == currentJieId) {
- return jie
- break
- }
- }
- }
- function clearAll() {
- const keys = uni.getStorageInfoSync().keys;
- keys.forEach(key => {
- if (key.startsWith(STORAGE_PREFIX)) {
- uni.removeStorageSync(key);
- }
- });
- }
- // 增量修改对象中的数组,支持添加、更新和删除元素
- function updateArrayInObject(key, arrayPath, updateFn) {
- let obj = get(key) || {};
- // 根据arrayPath找到需要修改的数组
- const targetArray = findArrayInObject(obj, arrayPath);
- if (Array.isArray(targetArray)) {
- // 应用更新函数到目标数组上
- updateFn(targetArray);
- // 重新设置缓存
- set(key, obj);
- } else {
- console.error(`${arrayPath}不指向对象中的数组。`);
- }
- }
- // 例子
- // cacheManager.updateArrayInObject('user', 'hobbies', (hobbies) => {
- // hobbies.push('reading');
- // hobbies = 'coding';
- // hobbies.pop();
- // });
- // 在对象中根据路径找到数组
- function findArrayInObject(obj, path) {
- return path.split('.').reduce((acc, curr) => {
- if (acc && acc[curr] !== undefined) {
- return acc[curr];
- } else {
- return undefined;
- }
- }, obj);
- }
- return {
- set,
- get,
- remove,
- updateJieStatus,
- getCurrentJieData,
- updateObject,
- updateVipStatus,
- findArrayInObject,
- clearAll
- };
- })();
- export default cacheManager;
- // 单元测试 引导大鹅提示 缓存Key
- export const SHOW_UNIT_TEST_TISHI = 'SHOW_UNIT_TEST_TISHI';
- // 单元测试大鹅提示缓存
- export function useUnitTestTishi() {
- return {
- updateTishi: () => cacheManager.set(SHOW_UNIT_TEST_TISHI, 'has'),
- getTishi: () => cacheManager.get(SHOW_UNIT_TEST_TISHI)
- }
- }
|