|
|
hai 1 ano | |
|---|---|---|
| .. | ||
| README-dict.md | hai 1 ano | |
| config.js | hai 1 ano | |
| crypto.js | hai 1 ano | |
| dict-usage-example.js | hai 1 ano | |
| dict.js | hai 1 ano | |
| request.d.ts | hai 1 ano | |
| request.js | hai 1 ano | |
| storage.js | hai 1 ano | |
| uview-theme.scss | hai 1 ano | |
| workflow-api.js | hai 1 ano | |
为移动端(Vue 2.6.14 + uni-app 2.x)提供完整的字典数据获取和管理功能,与web端保持一致的API设计。
import { useDict, getDict, getDictLabel } from '@/common/dict.js'
export default {
data() {
return {
dictionaries: {},
userInfo: {
gender: '0',
status: '1'
}
}
},
created() {
this.loadDictionaries()
},
methods: {
async loadDictionaries() {
// 批量加载字典
const dictManager = useDict('sys_user_sex', 'sys_normal_disable')
// Vue 2响应式更新(必须设置)
dictManager.setUpdateCallback((dictType, data) => {
this.$set(this.dictionaries, dictType, data)
})
},
// 获取字典标签显示
getDictText(dictType, value) {
const dictData = this.dictionaries[dictType] || []
return getDictLabel(dictData, value)
}
}
}
<template>
<view>
<!-- 显示用户性别 -->
<text>性别: {{ getDictText('sys_user_sex', userInfo.gender) }}</text>
<!-- 显示用户状态 -->
<text>状态: {{ getDictText('sys_normal_disable', userInfo.status) }}</text>
</view>
</template>
| 功能 | 方法 | 说明 |
|---|---|---|
| 批量字典管理 | useDict(...types) |
推荐使用,支持多字典并发加载 |
| 单个字典获取 | getDict(type, cache?) |
获取单个字典数据 |
| 字典标签获取 | getDictLabel(data, value) |
根据值获取标签 |
| 字典值获取 | getDictValue(data, label) |
根据标签获取值 |
| 值存在检查 | hasDictValue(data, value) |
检查值是否存在 |
| 缓存刷新 | refreshDict(types) |
刷新指定字典缓存 |
// radio-group
<u-radio-group v-model="form.gender">
<u-radio
v-for="item in dictionaries.sys_user_sex"
:key="item.value"
:name="item.value"
>
{{ item.label }}
</u-radio>
</u-radio-group>
// select组件
computed: {
selectOptions() {
return (this.dictionaries.sys_user_sex || []).map(item => ({
value: item.value,
label: item.label
}))
}
}
computed: {
processedData() {
return this.tableData.map(row => ({
...row,
genderText: getDictLabel(this.dictionaries.sys_user_sex || [], row.gender),
statusText: getDictLabel(this.dictionaries.sys_normal_disable || [], row.status)
}))
}
}
async methods: {
async loadSingleDict() {
try {
const genderDict = await getDict('sys_user_sex')
console.log('性别字典:', genderDict)
} catch (error) {
console.error('加载失败:', error)
}
}
}
import { dictCache, refreshDict } from '@/common/dict.js'
// 清除指定缓存
dictCache.remove('sys_user_sex')
// 清除所有缓存
dictCache.clear()
// 刷新缓存
await refreshDict(['sys_user_sex', 'sys_normal_disable'])
// 安全的字典获取(带默认值)
safeDictLabel(dictType, value, defaultLabel = '-') {
try {
const dictData = this.dictionaries[dictType] || []
const label = getDictLabel(dictData, value)
return label || defaultLabel
} catch (error) {
console.error(`获取字典失败 ${dictType}:${value}`, error)
return defaultLabel
}
}
/mobile/src/common/dict.js/mobile/src/common/dict-usage-example.js/docs/变更管理/code-adjust-record-2025-01-27-移动端字典工具实现.md// 错误:直接赋值不会触发响应式更新
this.dictionaries = dictManager.data
// 正确:使用回调确保响应式更新 ✅
dictManager.setUpdateCallback((dictType, data) => {
this.$set(this.dictionaries, dictType, data)
})
useCache=false✨ 完成时间: 2025-01-27 20:15:00
👨💻 开发者: wuzilong
📱 适用版本: Vue 2.6.14 + uni-app 2.x