😎调整字典相关对应

This commit is contained in:
zuohuaijun 2025-02-20 03:42:45 +08:00
parent 8adfd623d4
commit efeb9f843e
9 changed files with 35 additions and 36 deletions

View File

@ -127,9 +127,10 @@ public class SysOnlineUserService : IDynamicApiController, ITransient
Id = SqlFunc.AggregateMax(u.Id) Id = SqlFunc.AggregateMax(u.Id)
}) })
.ToListAsync(); .ToListAsync();
var onlineUserIds = onlineUsers.Select(u => u.Id).ToList(); if (onlineUsers.Count < 1) return;
// 无效登录用户集合 // 无效登录用户集合
var onlineUserIds = onlineUsers.Select(u => u.Id).ToList();
var offlineUsers = await _sysOnlineUerRep.AsQueryable().Where(u => !onlineUserIds.Contains(u.Id)).ToListAsync(); var offlineUsers = await _sysOnlineUerRep.AsQueryable().Where(u => !onlineUserIds.Contains(u.Id)).ToListAsync();
foreach (var user in offlineUsers) foreach (var user in offlineUsers)
{ {

View File

@ -165,7 +165,7 @@
@:</template> @:</template>
} else if(@column.EffectType == "DictSelector") { } else if(@column.EffectType == "DictSelector") {
@:<template #row_@(@column.LowerPropertyName)="{ row }"> @:<template #row_@(@column.LowerPropertyName)="{ row }">
@:<el-tag v-if="row.@(@column.LowerPropertyName)" :type="dc('@(@column.DictTypeCode)', row.@(@column.LowerPropertyName))?.tagType"> {{dc('@(@column.DictTypeCode)', row.@column.LowerPropertyName)?.value}}</el-tag> @:<el-tag v-if="row.@(@column.LowerPropertyName)" :type="dc('@(@column.DictTypeCode)', row.@(@column.LowerPropertyName))?.tagType"> {{dc('@(@column.DictTypeCode)', row.@column.LowerPropertyName)?.label}}</el-tag>
@:</template> @:</template>
} else if(@column.EffectType == "EnumSelector") { } else if(@column.EffectType == "EnumSelector") {
@:<template #row_@(@column.LowerPropertyName)="{ row }"> @:<template #row_@(@column.LowerPropertyName)="{ row }">
@ -258,8 +258,8 @@ const userStore = useUserInfo();
@:const codeToName = userStore.codeToName; @:const codeToName = userStore.codeToName;
} }
@if(@Model.TableField.Any(x=>x.EffectType == "DictSelector") || @Model.TableField.Any(x=>x.EffectType == "EnumSelector")){ @if(@Model.TableField.Any(x=>x.EffectType == "DictSelector") || @Model.TableField.Any(x=>x.EffectType == "EnumSelector")){
@:const dc = userStore.getDictItemByCode; @:const dc = userStore.getDictItemByValue;
@:const dv = userStore.getDictLabelByVal; @:const dv = userStore.getDictItemByLabel;
@:const dl = userStore.getDictDataByCode; @:const dl = userStore.getDictDataByCode;
} }

View File

@ -224,8 +224,6 @@ const userStore = useUserInfo();
@:const getConstType = userStore.getConstDataByTypeCode; @:const getConstType = userStore.getConstDataByTypeCode;
} }
@if(@Model.TableField.Any(x=>x.EffectType == "DictSelector") || @Model.TableField.Any(x=>x.EffectType == "EnumSelector")){ @if(@Model.TableField.Any(x=>x.EffectType == "DictSelector") || @Model.TableField.Any(x=>x.EffectType == "EnumSelector")){
//@:const dc = userStore.getDictItemByCode;
//@:const dv = userStore.getDictLabelByVal;
@:const dl = userStore.getDictDataByCode; @:const dl = userStore.getDictDataByCode;
} }

View File

@ -158,7 +158,7 @@
else if(@column.EffectType == "DictSelector"){ else if(@column.EffectType == "DictSelector"){
@:<el-table-column prop="@column.LowerPropertyName" label="@column.ColumnComment" @(column.WhetherSortable == "Y" ? "sortable='custom'" : "") show-overflow-tooltip="" > @:<el-table-column prop="@column.LowerPropertyName" label="@column.ColumnComment" @(column.WhetherSortable == "Y" ? "sortable='custom'" : "") show-overflow-tooltip="" >
@:<template #default="scope"> @:<template #default="scope">
@:<el-tag :type="dc('@(@column.DictTypeCode)', scope.row.@(@column.LowerPropertyName))?.tagType"> {{dc("@(@column.DictTypeCode)", scope.row.@(@column.LowerPropertyName))?.value}} </el-tag> @:<el-tag :type="dc('@(@column.DictTypeCode)', scope.row.@(@column.LowerPropertyName))?.tagType"> {{dc("@(@column.DictTypeCode)", scope.row.@(@column.LowerPropertyName))?.label}} </el-tag>
@:</template> @:</template>
@:</el-table-column> @:</el-table-column>
} }
@ -251,8 +251,8 @@
@:const codeToName = userStore.codeToName; @:const codeToName = userStore.codeToName;
} }
@if(@Model.TableField.Any(x=>x.EffectType == "DictSelector") || @Model.TableField.Any(x=>x.EffectType == "EnumSelector")){ @if(@Model.TableField.Any(x=>x.EffectType == "DictSelector") || @Model.TableField.Any(x=>x.EffectType == "EnumSelector")){
@:const dc = userStore.getDictItemByCode; @:const dc = userStore.getDictItemByValue;
@:const dv = userStore.getDictLabelByVal; @:const dv = userStore.getDictItemByLabel;
@:const dl = userStore.getDictDataByCode; @:const dl = userStore.getDictDataByCode;
} }

View File

@ -2,7 +2,7 @@
"name": "admin.net.pro", "name": "admin.net.pro",
"type": "module", "type": "module",
"version": "2.4.33", "version": "2.4.33",
"lastBuildTime": "2025.02.18", "lastBuildTime": "2025.02.20",
"description": "Admin.NET 站在巨人肩膀上的 .NET 通用权限开发框架", "description": "Admin.NET 站在巨人肩膀上的 .NET 通用权限开发框架",
"author": "zuohuaijun", "author": "zuohuaijun",
"license": "MIT", "license": "MIT",
@ -103,7 +103,7 @@
"sass": "^1.85.0", "sass": "^1.85.0",
"terser": "^5.39.0", "terser": "^5.39.0",
"typescript": "^5.7.3", "typescript": "^5.7.3",
"vite": "^6.1.0", "vite": "^6.1.1",
"vite-plugin-cdn-import": "^1.0.1", "vite-plugin-cdn-import": "^1.0.1",
"vite-plugin-compression2": "^1.3.3", "vite-plugin-compression2": "^1.3.3",
"vite-plugin-vue-setup-extend": "^0.4.0", "vite-plugin-vue-setup-extend": "^0.4.0",

View File

@ -139,18 +139,23 @@ export const useUserInfo = defineStore('userInfo', {
return data.find((item: any) => item.code === itemCode)?.name; return data.find((item: any) => item.code === itemCode)?.name;
}, },
// 常量编码和名称转换
codeToName(code: any, type: any) {
return this.constList.find((x: any) => x.code === type).data.result.find((x: any) => x.code === code)?.name;
},
// 根据字典类型获取字典数据 // 根据字典类型获取字典数据
getDictDataByCode(dictTypeCode: string) { getDictDataByCode(dictTypeCode: string) {
return this.dictList[dictTypeCode] || []; return this.dictList[dictTypeCode] || [];
}, },
// 根据字典类型和代码取字典项 // 根据字典类型和值获取取字典项
getDictItemByCode(typePCode: string, code: string) { getDictItemByValue(dictTypeCode: string, value: string) {
if (code != undefined && code !== '') { if (value != undefined && value !== '') {
const _code = code.toString(); const _value = value.toString();
const ds = this.getDictDataByCode(typePCode); const ds = this.dictList[dictTypeCode] || [];
for (const element of ds) { for (const element of ds) {
if (element.code == _code) { if (element.value == _value) {
return element; return element;
} }
} }
@ -158,30 +163,25 @@ export const useUserInfo = defineStore('userInfo', {
return {}; return {};
}, },
// 根据字典类型和值取描述 // 根据字典类型和名称获取取字典项
getDictLabelByVal(typePCode: string, val: string) { getDictItemByLabel(dictTypeCode: string, label: string) {
if (val != undefined && val !== '') { if (label != undefined && label !== '') {
const _val = val.toString(); const _label = label.toString();
const ds = this.getDictDataByCode(typePCode); const ds = this.dictList[dictTypeCode] || [];
for (const element of ds) { for (const element of ds) {
if (element.value == _val) { if (element.label == _label) {
return element; return element;
} }
} }
} }
return {}; return {};
}, },
// 常量编码和名称转换
codeToName(code: any, type: any) {
return this.constList.find((x: any) => x.code === type).data.result.find((x: any) => x.code === code)?.name;
},
}, },
}); });
// 处理字典国际化, 默认显示字典中的value // 处理字典国际化, 默认显示字典中的label值
const setDictLangMessageAsync = async (dict: any) => { const setDictLangMessageAsync = async (dict: any) => {
dict.langMessage = `message.system.dictType.${dict.typeCode}.${dict.code}`; dict.langMessage = `message.dictType.${dict.typeCode}_${dict.value}`;
const value = t(dict.langMessage); const text = t(dict.langMessage);
dict.value = value !== dict.langMessage ? value : dict.value; dict.label = text !== dict.langMessage ? text : dict.label;
}; };

View File

@ -10,7 +10,7 @@
</template> </template>
<template #effectType="{ row, $index }"> <template #effectType="{ row, $index }">
<vxe-select v-model="row.effectType" class="m-2" style="width: 70%" placeholder="Select" transfer :disabled="judgeColumns(row)" @change="effectTypeChange(row, $index)" filterable> <vxe-select v-model="row.effectType" class="m-2" style="width: 70%" placeholder="Select" transfer :disabled="judgeColumns(row)" @change="effectTypeChange(row, $index)" filterable>
<vxe-option v-for="item in state.effectTypeList" :key="item.code" :label="item.value" :value="item.code" /> <vxe-option v-for="item in state.effectTypeList" :key="item.value" :label="item.label" :value="item.value" />
</vxe-select> </vxe-select>
<vxe-button v-if="row.effectType === 'ApiTreeSelector' || row.effectType === 'ForeignKey'" style="width: 30%" icon="vxe-icon-edit" @click="effectTypeChange(row, $index)">修改</vxe-button> <vxe-button v-if="row.effectType === 'ApiTreeSelector' || row.effectType === 'ForeignKey'" style="width: 30%" icon="vxe-icon-edit" @click="effectTypeChange(row, $index)">修改</vxe-button>
</template> </template>
@ -43,7 +43,7 @@
</template> </template>
<template #queryType="{ row }"> <template #queryType="{ row }">
<vxe-select v-model="row.queryType" class="m-2" placeholder="Select" :disabled="!row.queryWhether" filterable transfer> <vxe-select v-model="row.queryType" class="m-2" placeholder="Select" :disabled="!row.queryWhether" filterable transfer>
<vxe-option v-for="item in state.queryTypeList" :key="item.code" :label="item.value" :value="item.code" /> <vxe-option v-for="item in state.queryTypeList" :key="item.value" :label="item.label" :value="item.value" />
</vxe-select> </vxe-select>
</template> </template>
<template #verification="{ row }"> <template #verification="{ row }">

View File

@ -37,7 +37,7 @@
<el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24" class="mb20"> <el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24" class="mb20">
<el-form-item label="机构类型"> <el-form-item label="机构类型">
<el-select v-model="state.ruleForm.type" filterable clearable class="w100"> <el-select v-model="state.ruleForm.type" filterable clearable class="w100">
<el-option v-for="item in state.orgTypeList" :key="item.value" :label="item.value" :value="item.code" /> <el-option v-for="item in state.orgTypeList" :key="item.value" :label="item.label" :value="item.value" />
</el-select> </el-select>
</el-form-item> </el-form-item>
</el-col> </el-col>

View File

@ -21,7 +21,7 @@
<el-col class="mb5" :xs="24" :sm="12" :md="8" :lg="6" :xl="6"> <el-col class="mb5" :xs="24" :sm="12" :md="8" :lg="6" :xl="6">
<el-form-item label="机构类型" prop="type"> <el-form-item label="机构类型" prop="type">
<el-select v-model="state.queryParams.type" filterable clearable class="w100" @clear="state.queryParams.type = undefined"> <el-select v-model="state.queryParams.type" filterable clearable class="w100" @clear="state.queryParams.type = undefined">
<el-option v-for="item in state.orgTypeList" :key="item.value" :label="item.value" :value="item.code" /> <el-option v-for="item in state.orgTypeList" :key="item.value" :label="item.label" :value="item.value" />
</el-select> </el-select>
</el-form-item> </el-form-item>
</el-col> </el-col>