소스 검색

fixup! chore: 优化字典数据渲染逻辑

喵你个旺呀 1 년 전
부모
커밋
6e5650d37d

+ 13 - 14
Admin.NET/Admin.NET.Web.Entry/wwwroot/template/editDialog.vue.vm

@@ -1,4 +1,5 @@
 @{
+	var hasDictData = Model.TableField.Any(x => x.EffectType == "ConstSelector" || x.EffectType == "DictSelector" || x.EffectType == "EnumSelector");
 	bool IsStatusEnum(dynamic column) => column.NetType == "StatusEnum" && column.PropertyName == "Status";
 	string LowerFirstLetter(string text) => text.ToString()[..1].ToLower() + text[1..];
 	var definedObjects = new Dictionary<string, int>();
@@ -78,7 +79,7 @@
 							@:<el-switch v-model="ruleForm.@column.LowerPropertyName" :active-value="1" :inactive-value="2" size="small" />
 							} else {
 							@:<el-select clearable filterable v-model="ruleForm.@(column.LowerPropertyName)" placeholder="请选择@(column.ColumnComment)">
-								@:<el-option v-for="(item, index) in dl('@(column.DictTypeCode)')"  :key="index" :value="@(column.NetType.StartsWith("string") ? "item.code" : "Number(item.code)")" :label="`[${item.code}] ${item.value}`"></el-option>
+								@:<el-option v-for="(item, index) in getDictDataByCode('@(column.DictTypeCode)')"  :key="index" :value="item.code" :label="`[${item.code}]${item.value}`"></el-option>
 							@:</el-select>
 							}
 						</el-form-item>
@@ -87,7 +88,7 @@
 					@:<el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12" class="mb20">
 						@:<el-form-item label="@column.ColumnComment" prop="@(column.LowerPropertyName)">
 							@:<el-select clearable filterable v-model="ruleForm.@(column.LowerPropertyName)" placeholder="请选择@(column.ColumnComment)">
-								@:<el-option v-for="(item,index) in getConstType('@column.DictTypeCode')" :key="index" :label="item.name" :value="@(column.NetType.StartsWith("string") ? "item.code" : "Number(item.code)")">{{ item.name }}</el-option>
+								@:<el-option v-for="(item, index) in getConstDataByType('@column.DictTypeCode')" :key="index" :label="item.name" :value="item.code">{{ item.name }}</el-option>
 							</el-select>
 						</el-form-item>
 					</el-col>
@@ -144,14 +145,8 @@
 	import { ref,onMounted } from "vue";
 	import { ElMessage } from "element-plus";
 	import type { FormRules } from "element-plus";
-@if(Model.TableField.Any(x=>x.EffectType == "ConstSelector")){
-	@:import { getConstType } from "/@@/utils/constHelper";
-} 
-@if(Model.TableField.Any(x=>x.EffectType == "DictSelector") || @Model.TableField.Any(x=>x.EffectType == "EnumSelector")){
-	@:import { getDictDataItem as di, getDictDataList as dl } from '/@@/utils/dict-utils';
-}
-@if(Model.TableField.Any(x=>x.EffectType == "EnumSelector")){
-	@:import { getDictLabelByVal as dv } from '/@@/utils/dict-utils';
+@if(hasDictData) {
+	@:import { useUserInfo } from "/@@/stores/userInfo";
 }
 @if(Model.TableField.Any(x=>x.EffectType == "DatePicker")){
   	@:import { formatDate } from '/@@/utils/formatTime';
@@ -159,13 +154,12 @@
 @if(Model.TableField.Any(x=>x.EffectType == "Upload")){
     @:import { Plus } from "@@element-plus/icons-vue";
     @:import { UploadRequestOptions } from "element-plus";
-}
-@if(Model.TableField.Any(x=>x.EffectType == "EnumSelector")){
-	@:import { getAPI } from '/@@/utils/axios-utils';
-	@:import { SysEnumApi } from '/@@/api-services/api';
 }
 	import { use@(Model.ClassName)Api } from '/@@/api/@(Model.PagePath)/@(Model.LowerClassName)';
 
+@if(hasDictData) {
+	@:const getDictDataByCode = useUserInfo().getDictDataByCode;
+}
 	//父级传递来的参数
 	var props = defineProps({
 		title: {
@@ -197,6 +191,11 @@
 
 	});
 
+	@if(Model.TableField.Any(x=>x.EffectType == "ConstSelector")){
+	@:// 获取根据常量类型获取常量数据列表
+	@:const getConstDataByType = (type: string) => useUserInfo().constList?.find(x => x.code == type)?.data?.result ?? [];
+	}
+
 	// 打开弹窗
 	const openDialog = async (row: any) => {
 		// ruleForm.value = JSON.parse(JSON.stringify(row));

+ 5 - 3
Admin.NET/Admin.NET.Web.Entry/wwwroot/template/index.vue.vm

@@ -52,7 +52,7 @@
             }else if(column.EffectType == "DictSelector" || column.EffectType == "EnumSelector"){
             @:<el-form-item label="@column.ColumnComment">
               @:<el-select clearable filterable v-model="queryParams.@(column.LowerPropertyName)" placeholder="请选择@(column.ColumnComment)">
-                @:<el-option v-for="(item,index) in dl('@(column.DictTypeCode)')" :key="index" :value="item.code" :label="`[${item.code}]${item.value}`" />
+                @:<el-option v-for="(item,index) in getDictDataByCode('code_gen_create_type')('@(column.DictTypeCode)')" :key="index" :value="item.code" :label="`[${item.code}]${item.value}`" />
               @:</el-select>
             @:</el-form-item>
             }else if(column.EffectType == "ApiTreeSelector"){
@@ -221,7 +221,7 @@
   @:import { codeToName, getConstType } from '/@@/utils/constHelper';
   }
   @if(Model.TableField.Any(x => x.EffectType == "DictSelector" || x.EffectType == "EnumSelector")) {
-  @:import { getDictDataList as dl } from '/@@/utils/dict-utils';
+  @:import { useUserInfo } from "/@@/stores/userInfo";
   }
   @if(Model.PrintType == "custom") {
   @:// 推荐设置操作 width 为 200
@@ -239,7 +239,9 @@
   import printDialog from '/@@/views/system/print/component/hiprint/preview.vue'
   import ModifyRecord from '/@@/components/table/modifyRecord.vue';
   import { use@(Model.ClassName)Api} from '/@@/api/@(Model.PagePath)/@(Model.LowerClassName)';
-  
+  @if(Model.TableField.Any(x => x.EffectType == "DictSelector" || x.EffectType == "EnumSelector")) {
+  @:const getDictDataByCode = useUserInfo().getDictDataByCode;
+  }
   const showAdvanceQueryUI = ref(@(haveLikeCdt ? "false" : "true"));
   const @(Model.LowerClassName)Api = use@(Model.ClassName)Api();
   const printDialogRef = ref();

+ 3 - 4
Web/src/views/home/notice/index.vue

@@ -29,15 +29,13 @@
 				</el-table-column>
 				<el-table-column prop="sysNotice.type" label="类型" width="100" align="center" show-overflow-tooltip>
 					<template #default="scope">
-						<el-tag v-if="scope.row.sysNotice.type === 1"> 通知 </el-tag>
-						<el-tag type="warning" v-else> 公告 </el-tag>
+            <DictLabel :value="scope.row.sysNotice.type" code="NoticeTypeEnum" />
 					</template>
 				</el-table-column>
 				<el-table-column prop="sysNotice.createTime" label="创建时间" align="center" show-overflow-tooltip />
 				<el-table-column prop="readStatus" label="阅读状态" width="100" align="center" show-overflow-tooltip>
 					<template #default="scope">
-						<el-tag type="info" v-if="scope.row.readStatus === 1"> 已读 </el-tag>
-						<el-tag type="danger" v-else> 未读 </el-tag>
+            <DictLabel :value="scope.row.readStatus" code="NoticeUserStatusEnum" />
 					</template>
 				</el-table-column>
 				<el-table-column prop="sysNotice.publicUserName" label="发布者" align="center" show-overflow-tooltip />
@@ -87,6 +85,7 @@ import commonFunction from '/@/utils/commonFunction';
 import { getAPI } from '/@/utils/axios-utils';
 import { SysNoticeApi } from '/@/api-services/api';
 import { SysNoticeUser } from '/@/api-services/models';
+import DictLabel from "/@/components/table/dictLabel.vue";
 
 const { removeHtml } = commonFunction();
 const state = reactive({

+ 2 - 6
Web/src/views/system/codeGen/index.vue

@@ -30,12 +30,7 @@
 				<el-table-column prop="authorName" label="作者姓名" align="center" show-overflow-tooltip />
 				<el-table-column prop="generateType" label="生成方式" align="center" show-overflow-tooltip>
 					<template #default="scope">
-						<el-tag v-if="scope.row.generateType == 100"> 下载压缩包 </el-tag>
-						<el-tag v-else-if="scope.row.generateType == 111"> 下载压缩包(前端) </el-tag>
-						<el-tag v-else-if="scope.row.generateType == 121"> 下载压缩包(后端) </el-tag>
-						<el-tag v-else-if="scope.row.generateType == 211"> 生成到本项目(前端) </el-tag>
-						<el-tag v-else-if="scope.row.generateType == 221"> 生成到本项目(后端) </el-tag>
-						<el-tag type="danger" v-else> 生成到本项目 </el-tag>
+            <DictLabel :value="scope.row.generateType" code="code_gen_create_type" />
 					</template>
 				</el-table-column>
 				<el-table-column label="操作" width="280" fixed="right" align="center" show-overflow-tooltip>
@@ -79,6 +74,7 @@ import { downloadByUrl } from '/@/utils/download';
 import { getAPI } from '/@/utils/axios-utils';
 import { SysCodeGenApi } from '/@/api-services/api';
 import { SysCodeGen } from '/@/api-services/models';
+import DictLabel from "/@/components/table/dictLabel.vue";
 
 const PreviewDialog = defineAsyncComponent(() => import('./component/previewDialog.vue'));
 

+ 2 - 2
Web/src/views/system/config/index.vue

@@ -11,8 +11,7 @@
 					<el-button v-if="state.selectlist.length > 0" type="danger" icon="ele-Delete" @click="bacthDelete" v-auth="'sysConfig:batchDelete'"> 批量删除 </el-button>
 				</template>
 				<template #sysFlag="scope">
-					<el-tag v-if="scope.row.sysFlag === 1"> 是 </el-tag>
-					<el-tag type="danger" v-else> 否 </el-tag>
+          <DictLabel :value="scope.row.sysFlag" code="YesNoEnum" />
 				</template>
 				<template #remark="scope">
 					<ModifyRecord :data="scope.row" />
@@ -37,6 +36,7 @@ import ModifyRecord from '/@/components/table/modifyRecord.vue';
 import { getAPI } from '/@/utils/axios-utils';
 import { SysConfigApi } from '/@/api-services/api';
 import { auth } from '/@/utils/authFunction';
+import DictLabel from "/@/components/table/dictLabel.vue";
 
 // 引入组件
 const Table = defineAsyncComponent(() => import('/@/components/table/index.vue'));