当前位置: 首页 > news >正文

小程序缓存数据字典

import { getDict } from '@/api/profile';

const CACHE_KEY = 'DICT_CACHE';

let dictCache = new Map();

// 初始化时加载缓存

const loadCache = () => {

  const cache = uni.getStorageSync(CACHE_KEY);

  if (cache) {

    dictCache = new Map(JSON.parse(cache));

  }

};

// 保存缓存到Storage

const saveCache = () => {

  uni.setStorageSync(CACHE_KEY, JSON.stringify([...dictCache]));

};

/**

 * 获取字典数据(支持多字段、缓存)

 * @param {string} dictCodes - 字典编码,支持逗号拼接,如 'VISIT_REASON,VISITOR_TYPE'

 * @param {string} url - 请求 URL

 * @returns {Promise<Object>} 返回包含所有字典的 map 对象,如 { VISIT_REASON: { ... }, VISITOR_TYPE: { ... } }

 */

// 获取字典数据(带缓存和持久化)

export const dictWithUrl = async(dictCodes) => {

  loadCache(); // 每次调用先加载缓存

  const codes = typeof dictCodes === 'string' ? dictCodes.split(',').map(code => code.trim()) : dictCodes;

  // 检查缓存

  const cachedData = {};

  const uncachedCodes = codes.filter(code => {

    if (dictCache.has(code)) {

      cachedData[code] = dictCache.get(code);

      return false;

    }

    return true;

  });

  // 全部命中缓存

  if (!uncachedCodes.length) {

    return { data: cachedData };

  }

  // 请求未缓存数据

  const res = await getDict(uncachedCodes.join(','));

  // 成功后合并更新缓存

  Object.entries(res.data).forEach(([code, data]) => {

    dictCache.set(code, data);

    cachedData[code] = data;

  });

  saveCache(); // 保存最新缓存

  return { data: cachedData };

};

// 清空缓存(可选)

export const clearDictCache = () => {

  dictCache.clear();

  uni.removeStorageSync(CACHE_KEY);

};

export const getDictLabel = (dictOptions, dictKey, value, defaultValue = '') => {

  if (!dictKey) return value || defaultValue;

  if (dictOptions[dictKey]) {

    return dictOptions[dictKey][value] || value || defaultValue;

  }

};

http://www.xdnf.cn/news/1451989.html

相关文章:

  • Android 项目:画图白板APP开发(三)——笔锋(多 Path 叠加)
  • 当液态玻璃计划遭遇反叛者:一场 iOS 26 界面的暗战
  • 用 Rust + Actix-Web 打造“Hello, WebSocket!”——从握手到回声,只需 50 行代码
  • Energy期刊论文学习——基于集成学习模型的多源域迁移学习方法用于小样本实车数据锂离子电池SOC估计
  • 邮件如何防泄密?这10个电子邮件安全解决方案真的好用,快收藏
  • Windows+Docker一键部署CozeStudio私有化,保姆级
  • 15、Docker构建前端镜像并运行
  • 计算机大数据毕业设计推荐:基于Spark的新能源汽车保有量可视化分析系统
  • 配置阿里云 YUM 源指南
  • IPV6之DHCPv6服务器和中继代理和前缀代理服务器客户端
  • 高并发商城 商品为了防止超卖,都做了哪些努力?
  • PostgreSQL18-FDW连接的 SCRAM 直通身份验证
  • 当便捷遇上复杂,低代码的路该怎么走?
  • Linux 基础IO-从 “一切皆文件” 到自定义 libc 缓冲区
  • fastmcp2.0的传输方式
  • DFT:从RL的视角修正SFT损失的权重
  • 【高分论文密码】大尺度空间模拟预测与数字制图
  • Django事务
  • Leetcode 240. 搜索二维矩阵 II 矩阵 / 二分
  • 垃圾回收,几种GC算法及GC机制
  • 数据库中事务、指令、写法解读
  • 搭建基于 Solon AI 的 Streamable MCP 服务并部署至阿里云百炼
  • 【多线程初阶】线程安全问题 死锁产生 何如避免死锁
  • 前端vue常见标签属性及作用解析
  • 零售消费企业的数字化增长实践,2025新版下载
  • 在 Debian 系统上清理缓存的方式和具体操作方法
  • Grafana - 监控磁盘使用率Variables使用
  • 卫星互联网安全风险及关键技术探索
  • 【深度学习】P1 引言(待完成)
  • Conda 常用命令大全