😎调整字典相关对应

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)
})
.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();
foreach (var user in offlineUsers)
{

View File

@ -165,7 +165,7 @@
@:</template>
} else if(@column.EffectType == "DictSelector") {
@:<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>
} else if(@column.EffectType == "EnumSelector") {
@:<template #row_@(@column.LowerPropertyName)="{ row }">
@ -258,8 +258,8 @@ const userStore = useUserInfo();
@:const codeToName = userStore.codeToName;
}
@if(@Model.TableField.Any(x=>x.EffectType == "DictSelector") || @Model.TableField.Any(x=>x.EffectType == "EnumSelector")){
@:const dc = userStore.getDictItemByCode;
@:const dv = userStore.getDictLabelByVal;
@:const dc = userStore.getDictItemByValue;
@:const dv = userStore.getDictItemByLabel;
@:const dl = userStore.getDictDataByCode;
}

View File

@ -224,8 +224,6 @@ const userStore = useUserInfo();
@:const getConstType = userStore.getConstDataByTypeCode;
}
@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;
}

View File

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

View File

@ -2,7 +2,7 @@
"name": "admin.net.pro",
"type": "module",
"version": "2.4.33",
"lastBuildTime": "2025.02.18",
"lastBuildTime": "2025.02.20",
"description": "Admin.NET 站在巨人肩膀上的 .NET 通用权限开发框架",
"author": "zuohuaijun",
"license": "MIT",
@ -103,7 +103,7 @@
"sass": "^1.85.0",
"terser": "^5.39.0",
"typescript": "^5.7.3",
"vite": "^6.1.0",
"vite": "^6.1.1",
"vite-plugin-cdn-import": "^1.0.1",
"vite-plugin-compression2": "^1.3.3",
"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;
},
// 常量编码和名称转换
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) {
return this.dictList[dictTypeCode] || [];
},
// 根据字典类型和代码取字典项
getDictItemByCode(typePCode: string, code: string) {
if (code != undefined && code !== '') {
const _code = code.toString();
const ds = this.getDictDataByCode(typePCode);
// 根据字典类型和值获取取字典项
getDictItemByValue(dictTypeCode: string, value: string) {
if (value != undefined && value !== '') {
const _value = value.toString();
const ds = this.dictList[dictTypeCode] || [];
for (const element of ds) {
if (element.code == _code) {
if (element.value == _value) {
return element;
}
}
@ -158,30 +163,25 @@ export const useUserInfo = defineStore('userInfo', {
return {};
},
// 根据字典类型和值取描述
getDictLabelByVal(typePCode: string, val: string) {
if (val != undefined && val !== '') {
const _val = val.toString();
const ds = this.getDictDataByCode(typePCode);
// 根据字典类型和名称获取取字典项
getDictItemByLabel(dictTypeCode: string, label: string) {
if (label != undefined && label !== '') {
const _label = label.toString();
const ds = this.dictList[dictTypeCode] || [];
for (const element of ds) {
if (element.value == _val) {
if (element.label == _label) {
return element;
}
}
}
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) => {
dict.langMessage = `message.system.dictType.${dict.typeCode}.${dict.code}`;
const value = t(dict.langMessage);
dict.value = value !== dict.langMessage ? value : dict.value;
dict.langMessage = `message.dictType.${dict.typeCode}_${dict.value}`;
const text = t(dict.langMessage);
dict.label = text !== dict.langMessage ? text : dict.label;
};

View File

@ -10,7 +10,7 @@
</template>
<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-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-button v-if="row.effectType === 'ApiTreeSelector' || row.effectType === 'ForeignKey'" style="width: 30%" icon="vxe-icon-edit" @click="effectTypeChange(row, $index)">修改</vxe-button>
</template>
@ -43,7 +43,7 @@
</template>
<template #queryType="{ row }">
<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>
</template>
<template #verification="{ row }">

View File

@ -37,7 +37,7 @@
<el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24" class="mb20">
<el-form-item label="机构类型">
<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-form-item>
</el-col>

View File

@ -21,7 +21,7 @@
<el-col class="mb5" :xs="24" :sm="12" :md="8" :lg="6" :xl="6">
<el-form-item label="机构类型" prop="type">
<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-form-item>
</el-col>