Bläddra i källkod

feat: 增加全局系统字典组件

喵你个旺呀 1 år sedan
förälder
incheckning
b998907d1e
33 ändrade filer med 176 tillägg och 192 borttagningar
  1. 4 4
      Admin.NET/Admin.NET.Web.Entry/wwwroot/template/editDialog.vue.vm
  2. 8 7
      Admin.NET/Admin.NET.Web.Entry/wwwroot/template/index.vue.vm
  3. 79 0
      Web/src/components/sysDict/sysDict.vue
  4. 4 0
      Web/src/main.ts
  5. 16 0
      Web/src/types/global.d.ts
  6. 3 5
      Web/src/views/home/notice/index.vue
  7. 2 9
      Web/src/views/system/codeGen/component/editCodeGenDialog.vue
  8. 2 7
      Web/src/views/system/codeGen/component/genConfigDialog.vue
  9. 1 3
      Web/src/views/system/codeGen/index.vue
  10. 5 7
      Web/src/views/system/config/index.vue
  11. 1 5
      Web/src/views/system/database/component/genEntity.vue
  12. 5 7
      Web/src/views/system/dict/index.vue
  13. 1 6
      Web/src/views/system/job/component/editJobDetail.vue
  14. 4 6
      Web/src/views/system/job/index.vue
  15. 3 5
      Web/src/views/system/ldap/index.vue
  16. 1 6
      Web/src/views/system/menu/component/editMenu.vue
  17. 3 8
      Web/src/views/system/menu/index.vue
  18. 2 7
      Web/src/views/system/notice/component/editNotice.vue
  19. 5 11
      Web/src/views/system/notice/index.vue
  20. 1 9
      Web/src/views/system/openAccess/component/generateSign.vue
  21. 1 6
      Web/src/views/system/org/component/editOrg.vue
  22. 6 13
      Web/src/views/system/org/index.vue
  23. 1 3
      Web/src/views/system/plugin/index.vue
  24. 1 2
      Web/src/views/system/pos/index.vue
  25. 1 6
      Web/src/views/system/print/component/editPrint.vue
  26. 1 3
      Web/src/views/system/print/index.vue
  27. 1 6
      Web/src/views/system/role/component/grantData.vue
  28. 2 4
      Web/src/views/system/role/index.vue
  29. 1 6
      Web/src/views/system/tenant/component/editTenant.vue
  30. 1 3
      Web/src/views/system/tenant/index.vue
  31. 8 19
      Web/src/views/system/user/component/editUser.vue
  32. 1 6
      Web/src/views/system/user/index.vue
  33. 1 3
      Web/src/views/system/weChatUser/index.vue

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

@@ -9,7 +9,7 @@ import type { FormRules } from "element-plus";
 @:import { Plus } from "@@element-plus/icons-vue";
 @:import { UploadRequestOptions } from "element-plus";
 }
-@if(Model.HasDictField || Model.HasEnumField || Model.HasConstField) {
+@if(Model.HasConstField) {
 @:import { useUserInfo } from "/@@/stores/userInfo";
 }
 import { use@(Model.ClassName)Api } from '/@@/api/@(Model.PagePath)/@(Model.LowerClassName)';
@@ -24,7 +24,7 @@ const state = reactive({
 	loading: false,
 	showDialog: false,
 	ruleForm: {} as any,
-	stores: @(Model.HasDictField || Model.HasEnumField || Model.HasConstField ? "useUserInfo()" : "{}"),
+	stores: @(Model.HasConstField ? "useUserInfo()" : "{}"),
 	dropdownData: {} as any,
 });
 
@@ -120,14 +120,14 @@ defineExpose({ openDialog });
 									@:<span v-if="!node.isLeaf"> ({{ data.children.length }}) </span>
 								@:</template>
 							@:</el-cascader>
+							} else if (column.EffectType == "DictSelector" || column.EffectType == "EnumSelector") {
+							@:<g-sys-dict v-model="state.ruleForm.@(column.LowerPropertyName)" code="@(column.DictTypeCode)" render-as="select" placeholder="请选择@(column.ColumnComment)" clearable filterable />
 							} else {
 							@:<el-select clearable filterable v-model="state.ruleForm.@(column.LowerPropertyName)" placeholder="请选择@(column.ColumnComment)">
 								if (column.EffectType == "ForeignKey") {
 								@:<el-option v-for="(item,index) in state.dropdownData.@(column.LowerPropertyName)" :key="index" :value="item.value" :label="item.label" />
 								} else if (column.EffectType == "ConstSelector") {
 								@:<el-option v-for="(item, index) in state.stores.getConstDataByTypeCode('@column.DictTypeCode')" :key="index" :label="item.name" :value="item.code" />
-								} else if (column.EffectType == "DictSelector" || column.EffectType == "EnumSelector") {
-								@:<el-option :value="item.value" :label="`[${item.value}]${item.label}`" :disabled="item.status == 2" v-if="item.status == 1 || item.value == state.ruleForm.@(column.LowerPropertyName)" v-for="(item, index) in state.stores.getDictDataByCode('@(column.DictTypeCode)')" :key="index" />
 								}
 							@:</el-select>
 							}

+ 8 - 7
Admin.NET/Admin.NET.Web.Entry/wwwroot/template/index.vue.vm

@@ -12,9 +12,8 @@ import { downloadStreamFile } from "/@@/utils/download";
 @:import { formatDate } from '/@@/utils/formatTime';
 }
 import { use@(Model.ClassName)Api } from '/@@/api/@(Model.PagePath)/@(Model.LowerClassName)';
-@if(Model.HasDictField || Model.HasEnumField || Model.HasConstField) {
+@if(Model.HasConstField) {
 @:import { useUserInfo } from "/@@/stores/userInfo";
-@:import DictLabel from "/@@/components/table/dictLabel.vue";
 }
 import editDialog from '/@@/views/@(Model.PagePath)/@(Model.LowerClassName)/component/editDialog.vue'
 import printDialog from '/@@/views/system/print/component/hiprint/preview.vue'
@@ -32,7 +31,7 @@ const editDialogRef = ref();
 const state = reactive({
   exportLoading: false,
   tableLoading: false,
-  stores: @(Model.HasDictField || Model.HasEnumField || Model.HasConstField ? "useUserInfo()" : "{}"),
+  stores: @(Model.HasConstField ? "useUserInfo()" : "{}"),
   showAdvanceQueryUI: @(Model.HasLikeQuery ? "false" : "true"),
   dropdownData: {} as any,
   selectData: [] as any[],
@@ -117,7 +116,7 @@ const batchDel@(Model.ClassName) = () => {
 @:// 设置状态
 @:const change@(Model.ClassName)Status = async (row: any) => {
   @:await @(Model.LowerClassName)Api.setStatus({ @(Model.PrimaryKeysFormat(", ", "{0}: row.{0}", true)), status: row.status }).then(() => ElMessage.success('状态设置成功'));
-  @:};
+@:};
 }
 @if (Model.ImportFieldList.Count > 0) {
 @:
@@ -166,15 +165,17 @@ handleQuery();
             }else if(column.EffectType == "InputNumber"){
               @:<el-input-number v-model="state.tableQueryParams.@(column.LowerPropertyName)"  clearable placeholder="请输入@(column.ColumnComment)"/>
             }else if(column.IsSelectorEffectType || column.EffectType == "ForeignKey") {
+              if (column.EffectType == "DictSelector" || column.EffectType == "EnumSelector") {
+              @:<g-sys-dict v-model="state.tableQueryParams.@(column.LowerPropertyName)" code="@(column.DictTypeCode)" render-as="select" placeholder="请选择@(column.ColumnComment)" clearable filterable />
+              } else {
               @:<el-select clearable filterable v-model="state.tableQueryParams.@(column.LowerPropertyName)" placeholder="请选择@(column.ColumnComment)">
                 if (column.EffectType == "ForeignKey") {
                 @:<el-option v-for="(item,index) in state.dropdownData.@(column.LowerPropertyName) ?? []" :key="index" :value="item.value" :label="item.label" />
                 } else if (column.EffectType == "ConstSelector") {
                 @:<el-option v-for="(item, index) in state.stores.getConstDataByTypeCode('@column.DictTypeCode')" :key="index" :label="item.name" :value="item.code" />
-                } else {
-                @:<el-option :value="item.value" :label="`[${item.value}]${item.label}`" v-if="item.status == 1" :key="index" v-for="(item,index) in state.stores.getDictDataByCode('@(column.DictTypeCode)')" />
                 }
               @:</el-select>
+              }
             }else if(column.EffectType == "ApiTreeSelector"){
               @:<el-cascader
                 @::options="state.dropdownData.@(column.LowerPropertyName) ?? []"
@@ -269,7 +270,7 @@ handleQuery();
         } else if (Model.IsStatus(column)) {
             @:<el-switch v-model="scope.row.@column.LowerPropertyName" :active-value="1" :inactive-value="2" size="small" @@change="change@(Model.ClassName)Status(scope.row)" />
         } else {
-            @:<DictLabel :value="scope.row.@column.LowerPropertyName" code="@column.DictTypeCode" />
+            @:<g-sys-dict v-model="scope.row.@column.LowerPropertyName" code="@(column.DictTypeCode)" />
         }
           @:</template>
         @:</el-table-column>

+ 79 - 0
Web/src/components/sysDict/sysDict.vue

@@ -0,0 +1,79 @@
+<script setup lang="ts">
+import {reactive, watch} from "vue";
+import { DictItem } from "/@/types/global";
+import { useUserInfo } from "/@/stores/userInfo";
+
+const emit = defineEmits(['update:modelValue']);
+const dictList = useUserInfo().dictList;
+const props = defineProps({
+  modelValue: {
+    type: [String, Number, Boolean, null],
+    required: true
+  },
+  code: {
+    type: String,
+    required: true
+  },
+  propLabel: {
+    type: String,
+    default: 'label'
+  },
+  propValue: {
+    type: String,
+    default: 'value'
+  },
+  onItemFilter: {
+    type: Function,
+    default: (dict: any): boolean => dict
+  },
+  renderAs: {
+    type: String,
+    default: 'tag',
+    validator(value: string) {
+      return ['tag', 'select', 'radio', 'switch'].includes(value);
+    }
+  }
+});
+
+const state = reactive({
+  dict: {} as DictItem | undefined,
+  dictData: [] as DictItem[],
+  value: null as any,
+});
+
+const setDictValue = (value: any) => {
+  state.value = value;
+  state.dictData = dictList[props.code]?.filter(props.onItemFilter) ?? [];
+  state.dict = state.dictData.find((x: any) => x[props.propValue] == state.value);
+  if (state.dict && !["success", "warning", "info", "primary", "danger"].includes(state.dict.tagType ?? '')) state.dict.tagType = "primary";
+}
+
+watch(() => props.modelValue, (newValue) => setDictValue(newValue), { immediate: true });
+</script>
+
+<template>
+  <!-- 渲染标签 -->
+  <template v-if="props.renderAs === 'tag'">
+    <el-tag v-if="state.dict" v-bind="$attrs" :type="state.dict.tagType" :style="state.dict.styleSetting" :class="state.dict.classSetting">{{ state.dict[props.propLabel] }}</el-tag>
+    <span v-else>{{ state.value }}</span>
+  </template>
+  <!-- 渲染选择器 -->
+  <template v-if="props.renderAs === 'select'">
+    <el-select v-model="state.value" v-bind="$attrs" @change="(newValue: any) => emit('update:modelValue', newValue)">
+      <el-option :label="item[props.propLabel]" :value="item[props.propValue]" v-for="(item, index) in state.dictData" :key="index" />
+    </el-select>
+  </template>
+  <!-- 渲染单选框 -->
+  <template v-if="props.renderAs === 'radio'">
+    <el-radio-group v-model="state.value" v-bind="$attrs" @change="(newValue: any) => emit('update:modelValue', newValue)">
+      <el-radio :value="item[props.propValue]" v-for="(item, index) in state.dictData" :key="index">{{item[props.propLabel]}}</el-radio>
+    </el-radio-group>
+  </template>
+  <!-- 渲染开关 -->
+  <template v-if="props.renderAs === 'switch'">
+    <el-switch v-model="state.value" v-bind="$attrs" @change="(newValue: any) => emit('update:modelValue', newValue)" />
+  </template>
+</template>
+
+<style scoped lang="scss">
+</style>

+ 4 - 0
Web/src/main.ts

@@ -21,6 +21,7 @@ import VForm3 from 'vform3-builds';
 import 'vform3-builds/dist/designer.style.css';
 // 关闭自动打印
 import { disAutoConnect } from 'vue-plugin-hiprint';
+import sysDict from "/src/components/sysDict/sysDict.vue";
 disAutoConnect();
 
 const app = createApp(App);
@@ -28,4 +29,7 @@ const app = createApp(App);
 directive(app);
 other.elSvg(app);
 
+// 注册全局字典组件
+app.component('GSysDict', sysDict);
+
 app.use(pinia).use(router).use(ElementPlus).use(i18n).use(VueGridLayout).use(VForm3).use(VueSignaturePad).use(vue3TreeOrg).mount('#app');

+ 16 - 0
Web/src/types/global.d.ts

@@ -115,3 +115,19 @@ declare interface TableType<T = any> {
 		[key: string]: T;
 	};
 }
+
+// 字典数据结构
+export interface DictItem {
+	typeCode: string;
+	label: string;
+	value: string;
+	name: string;
+	status: string;
+	orderNo: number;
+	remark?: string;
+	tagType?: string;
+	extData?: string;
+	styleSetting?: string;
+	classSetting?: string;
+	[key: string]: any;
+}

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

@@ -29,13 +29,13 @@
 				</el-table-column>
 				<el-table-column prop="sysNotice.type" label="类型" width="100" align="center" show-overflow-tooltip>
 					<template #default="scope">
-            <DictLabel :value="scope.row.sysNotice.type" code="NoticeTypeEnum" />
+            <g-sys-dict v-model="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">
-            <DictLabel :value="scope.row.readStatus" code="NoticeUserStatusEnum" />
+            <g-sys-dict v-model="scope.row.readStatus" code="NoticeUserStatusEnum" />
 					</template>
 				</el-table-column>
 				<el-table-column prop="sysNotice.publicUserName" label="发布者" align="center" show-overflow-tooltip />
@@ -80,12 +80,10 @@
 <script setup lang="ts" name="notice">
 import '@wangeditor/editor/dist/css/style.css';
 import { onMounted, reactive } from 'vue';
-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";
+import commonFunction from '/@/utils/commonFunction';
 
 const { removeHtml } = commonFunction();
 const state = reactive({

+ 2 - 9
Web/src/views/system/codeGen/component/editCodeGenDialog.vue

@@ -117,16 +117,12 @@
 					</el-col>
 					<el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12" class="mb20">
 						<el-form-item label="生成方式" prop="generateType">
-							<el-select v-model="state.ruleForm.generateType" filterable class="w100">
-								<el-option v-for="item in getDictDataByCode('code_gen_create_type')" :key="item.value" :label="item.label" :value="item.value" />
-							</el-select>
+              <g-sys-dict v-model="state.ruleForm.generateType" code="code_gen_create_type" render-as="select" class="w100" filterable />
 						</el-form-item>
 					</el-col>
 					<el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12" class="mb20">
 						<el-form-item label="支持打印" prop="printType">
-							<el-select v-model="state.ruleForm.printType" filterable class="w100" @change="printTypeChanged">
-								<el-option v-for="item in getDictDataByCode('code_gen_print_type')" :key="item.value" :label="item.label" :value="item.value" />
-							</el-select>
+              <g-sys-dict v-model="state.ruleForm.printType" code="code_gen_print_type" render-as="select" @change="printTypeChanged" class="w100" filterable />
 						</el-form-item>
 					</el-col>
 					<el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12" class="mb20" v-if="state.ruleForm.printType == 'custom'">
@@ -181,13 +177,10 @@
 import { computed, onMounted, reactive, ref } from 'vue';
 import IconSelector from '/@/components/iconSelector/index.vue';
 import other from '/@/utils/other';
-
-import {useUserInfo} from "/@/stores/userInfo";
 import { getAPI } from '/@/utils/axios-utils';
 import { SysCodeGenApi, SysMenuApi, SysPrintApi } from '/@/api-services/api';
 import { UpdateCodeGenInput, AddCodeGenInput, SysMenu, SysPrint } from '/@/api-services/models';
 
-const getDictDataByCode = useUserInfo().getDictDataByCode;
 const props = defineProps({
 	title: String,
 	applicationNamespaces: Array<String>,

+ 2 - 7
Web/src/views/system/codeGen/component/genConfigDialog.vue

@@ -19,9 +19,7 @@
 				<el-table-column prop="effectType" label="作用类型" width="150" show-overflow-tooltip>
 					<template #default="scope">
 						<div class="effect-type-container">
-							<el-select v-model="scope.row.effectType" @change="effectTypeChange(scope.row, scope.$index)" :disabled="judgeColumns(scope.row)" class="m-2">
-								<el-option v-for="item in getDictDataByCode('code_gen_effect_type')" :key="item.value" :label="item.label" :value="item.value" />
-							</el-select>
+              <g-sys-dict v-model="scope.row.effectType" code="code_gen_effect_type" render-as="select" @change="effectTypeChange(scope.row, scope.$index)" :disabled="judgeColumns(scope.row)" class="m-2" />
               <el-button
                   v-if="['ApiTreeSelector','ForeignKey'].some(x => scope.row.effectType == x)"
                   @click="effectTypeChange(scope.row, scope.$index)"
@@ -74,9 +72,7 @@
 				</el-table-column>
 				<el-table-column prop="queryType" label="查询方式" width="110" align="center" show-overflow-tooltip>
 					<template #default="scope">
-						<el-select v-model="scope.row.queryType" class="m-2" placeholder="Select" :disabled="!scope.row.whetherQuery">
-							<el-option v-for="item in getDictDataByCode('code_gen_query_type')" :key="item.value" :label="item.label" :value="item.value" />
-						</el-select>
+            <g-sys-dict v-model="scope.row.queryType" code="code_gen_query_type" render-as="select" class="m-2" placeholder="Select" :disabled="!scope.row.whetherQuery" />
 					</template>
 				</el-table-column>
 				<el-table-column prop="orderNo" label="排序" width="80" show-overflow-tooltip>
@@ -105,7 +101,6 @@ import { getAPI } from '/@/utils/axios-utils';
 import { SysCodeGenConfigApi, SysDictTypeApi } from '/@/api-services/api';
 import JoinTableDialog from '/src/views/system/codeGen/component/joinTableDialog.vue';
 
-const getDictDataByCode = useUserInfo().getDictDataByCode;
 const emits = defineEmits(['handleQuery']);
 const joinTableDialogRef = ref();
 const state = reactive({

+ 1 - 3
Web/src/views/system/codeGen/index.vue

@@ -30,7 +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">
-            <DictLabel :value="scope.row.generateType" code="code_gen_create_type" />
+            <g-sys-dict v-model="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>
@@ -70,11 +70,9 @@ import { ElMessageBox, ElMessage } from 'element-plus';
 import EditCodeGenDialog from './component/editCodeGenDialog.vue';
 import CodeConfigDialog from './component/genConfigDialog.vue';
 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'));
 

+ 5 - 7
Web/src/views/system/config/index.vue

@@ -11,7 +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">
-          <DictLabel :value="scope.row.sysFlag" code="YesNoEnum" />
+          <g-sys-dict v-model="scope.row.sysFlag" code="YesNoEnum" />
 				</template>
 				<template #remark="scope">
 					<ModifyRecord :data="scope.row" />
@@ -28,15 +28,13 @@
 </template>
 
 <script lang="ts" setup name="sysConfig">
-import { onMounted, onUnmounted, reactive, ref, defineAsyncComponent, nextTick } from 'vue';
+import { onMounted, reactive, ref, defineAsyncComponent, nextTick } from 'vue';
 import { ElMessageBox, ElMessage } from 'element-plus';
-import EditConfig from '/@/views/system/config/component/editConfig.vue';
-import ModifyRecord from '/@/components/table/modifyRecord.vue';
-
+import { auth } from '/@/utils/authFunction';
 import { getAPI } from '/@/utils/axios-utils';
 import { SysConfigApi } from '/@/api-services/api';
-import { auth } from '/@/utils/authFunction';
-import DictLabel from "/@/components/table/dictLabel.vue";
+import ModifyRecord from '/@/components/table/modifyRecord.vue';
+import EditConfig from '/@/views/system/config/component/editConfig.vue';
 
 // 引入组件
 const Table = defineAsyncComponent(() => import('/@/components/table/index.vue'));

+ 1 - 5
Web/src/views/system/database/component/genEntity.vue

@@ -21,9 +21,7 @@
 					</el-col>
 					<el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24" class="mb20">
 						<el-form-item label="基类" prop="baseClassName">
-							<el-select v-model="state.ruleForm.baseClassName" clearable class="w100">
-								<el-option v-for="item in getDictDataByCode('code_gen_base_class')" :key="item.value" :label="item.label" :value="item.value" />
-							</el-select>
+              <g-sys-dict v-model="state.ruleForm.baseClassName" code="code_gen_base_class" render-as="select" clearable class="w100" />
 						</el-form-item>
 					</el-col>
 					<el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24" class="mb20">
@@ -50,11 +48,9 @@
 import { reactive, ref } from 'vue';
 import { ElMessage } from "element-plus";
 import { camelCase, upperFirst } from 'lodash-es';
-import {useUserInfo} from "/@/stores/userInfo";
 import { getAPI } from '/@/utils/axios-utils';
 import { SysDatabaseApi } from '/@/api-services/api';
 
-const getDictDataByCode = useUserInfo().getDictDataByCode;
 const emits = defineEmits(['handleQueryColumn']);
 const ruleFormRef = ref();
 const state = reactive({

+ 5 - 7
Web/src/views/system/dict/index.vue

@@ -30,7 +30,7 @@
 						<el-table-column prop="code" label="字典编码" min-width="140" header-align="center" show-overflow-tooltip />
 						<el-table-column prop="status" label="状态" width="70" align="center" show-overflow-tooltip>
 							<template #default="scope">
-                <DictLabel :value="scope.row.status" code="StatusEnum" />
+                <g-sys-dict v-model="scope.row.status" code="StatusEnum" />
 							</template>
 						</el-table-column>
 						<el-table-column prop="orderNo" label="排序" width="60" align="center" show-overflow-tooltip />
@@ -101,7 +101,7 @@
 						</el-table-column>
 						<el-table-column prop="status" label="状态" width="70" align="center" show-overflow-tooltip>
 							<template #default="scope">
-                <DictLabel :value="scope.row.status" code="StatusEnum" />
+                <g-sys-dict v-model="scope.row.status" code="StatusEnum" />
 							</template>
 						</el-table-column>
 						<el-table-column prop="orderNo" label="排序" width="60" align="center" show-overflow-tooltip />
@@ -147,15 +147,13 @@
 <script lang="ts" setup name="sysDict">
 import { onMounted, reactive, ref } from 'vue';
 import { ElMessageBox, ElMessage } from 'element-plus';
-import EditDictType from '/@/views/system/dict/component/editDictType.vue';
-import EditDictData from '/@/views/system/dict/component/editDictData.vue';
-import ModifyRecord from '/@/components/table/modifyRecord.vue';
-
 import { getAPI } from '/@/utils/axios-utils';
 import { useUserInfo } from '/@/stores/userInfo';
 import { SysDictTypeApi, SysDictDataApi } from '/@/api-services/api';
 import { SysDictType, SysDictData, UpdateDictDataInput } from '/@/api-services/models';
-import DictLabel from "/@/components/table/dictLabel.vue";
+import EditDictType from '/@/views/system/dict/component/editDictType.vue';
+import EditDictData from '/@/views/system/dict/component/editDictData.vue';
+import ModifyRecord from '/@/components/table/modifyRecord.vue';
 
 const editDictTypeRef = ref<InstanceType<typeof EditDictType>>();
 const editDictDataRef = ref<InstanceType<typeof EditDictData>>();

+ 1 - 6
Web/src/views/system/job/component/editJobDetail.vue

@@ -23,9 +23,7 @@
 							</el-col>
 							<el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24" class="mb20">
 								<el-form-item label="创建类型">
-									<el-radio-group v-model="state.ruleForm.createType" :disabled="isEdit">
-										<el-radio :value="item.value" v-show="item.code == JobCreateTypeEnum.NUMBER_0 ? isEdit : true" v-for="(item, index) in getDictDataByCode('JobCreateTypeEnum')" :key="index">{{item.label}}</el-radio>
-									</el-radio-group>
+                  <g-sys-dict v-model="state.ruleForm.createType" code="JobCreateTypeEnum" render-as="radio" :disabled="isEdit" />
 								</el-form-item>
 							</el-col>
 							<el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12" class="mb20">
@@ -103,13 +101,10 @@
 import { reactive, ref, computed } from 'vue';
 import * as monaco from 'monaco-editor';
 import { JobScriptCode } from './JobScriptCode';
-
-import {useUserInfo} from "/@/stores/userInfo";
 import { getAPI } from '/@/utils/axios-utils';
 import { SysJobApi } from '/@/api-services/api';
 import { JobCreateTypeEnum, UpdateJobDetailInput } from '/@/api-services/models';
 
-const getDictDataByCode = useUserInfo().getDictDataByCode;
 // HttpMethod 定义,来源后端 HttpMethod 对象的序列化
 // 下面定义内容【不要】加空格,否则 getHttpJobMessage 中 JSON.stringify(httpJobMessageNet.HttpMethod) 后无法匹配
 const httpMethodDef = {

+ 4 - 6
Web/src/views/system/job/index.vue

@@ -142,7 +142,7 @@
 				</el-table-column>
 				<el-table-column prop="jobDetail.createType" label="作业创建类型" width="110" align="center" show-overflow-tooltip>
 					<template #default="scope">
-            <DictLabel :value="(scope.row as JobDetailOutput).jobDetail?.createType ?? ''" code="JobCreateTypeEnum" />
+            <g-sys-dict v-model="scope.row.jobDetail?.createType" code="JobCreateTypeEnum" />
 					</template>
 				</el-table-column>
 				<!-- <el-table-column prop="jobDetail.includeAnnotations" label="扫描特性触发器" align="center" show-overflow-tooltip>
@@ -272,14 +272,12 @@ import { nextTick, onMounted, reactive, ref } from 'vue';
 import { ElMessageBox, ElMessage } from 'element-plus';
 import { useRouter } from 'vue-router';
 import { Timer } from '@element-plus/icons-vue';
-import EditJobDetail from '/@/views/system/job/component/editJobDetail.vue';
-import EditJobTrigger from '/@/views/system/job/component/editJobTrigger.vue';
-import JobCluster from '/@/views/system/job/component/jobCluster.vue';
-
 import { getAPI } from '/@/utils/axios-utils';
 import { SysJobApi } from '/@/api-services/api';
 import { JobCreateTypeEnum, JobDetailOutput, SysJobTrigger } from '/@/api-services/models';
-import DictLabel from "/@/components/table/dictLabel.vue";
+import EditJobDetail from '/@/views/system/job/component/editJobDetail.vue';
+import EditJobTrigger from '/@/views/system/job/component/editJobTrigger.vue';
+import JobCluster from '/@/views/system/job/component/jobCluster.vue';
 
 const router = useRouter();
 const editJobDetailRef = ref<InstanceType<typeof EditJobDetail>>();

+ 3 - 5
Web/src/views/system/ldap/index.vue

@@ -32,7 +32,7 @@
 				<el-table-column prop="version" label="Ldap版本" show-overflow-tooltip />
 				<el-table-column prop="status" label="状态" width="80" align="center" show-overflow-tooltip>
 					<template #default="scope">
-            <DictLabel :value="scope.row.status" code="StatusEnum" />
+            <g-sys-dict v-model="scope.row.status" code="StatusEnum" />
 					</template>
 				</el-table-column>
 				<el-table-column label="修改记录" width="100" align="center" show-overflow-tooltip>
@@ -70,12 +70,10 @@
 import { onMounted, reactive, ref } from 'vue';
 import { ElMessageBox, ElMessage } from 'element-plus';
 import { auth } from '/@/utils/authFunction';
-import ModifyRecord from '/@/components/table/modifyRecord.vue';
-import EditLdap from './component/editLdap.vue';
-
 import { getAPI } from '/@/utils/axios-utils';
 import { SysLdapApi } from '/@/api-services/api';
-import DictLabel from "/@/components/table/dictLabel.vue";
+import ModifyRecord from '/@/components/table/modifyRecord.vue';
+import EditLdap from './component/editLdap.vue';
 
 const editLdapRef = ref<InstanceType<typeof EditLdap>>();
 const state = reactive({

+ 1 - 6
Web/src/views/system/menu/component/editMenu.vue

@@ -21,9 +21,7 @@
 					</el-col>
 					<el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24" class="mb20">
 						<el-form-item label="菜单类型" prop="type" :rules="[{ required: true, message: '菜单类型不能为空', trigger: 'blur' }]">
-							<el-radio-group v-model="state.ruleForm.type">
-								<el-radio :value="item.value" v-for="(item, index) in getDictDataByCode('MenuTypeEnum')" :key="index">{{item.label}}</el-radio>
-							</el-radio-group>
+              <g-sys-dict v-model="state.ruleForm.type" code="MenuTypeEnum" render-as="radio" />
 						</el-form-item>
 					</el-col>
 					<el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12" class="mb20">
@@ -140,14 +138,11 @@
 <script lang="ts" setup name="sysEditMenu">
 import { computed, reactive, ref } from 'vue';
 import IconSelector from '/@/components/iconSelector/index.vue';
-
 import other from '/@/utils/other';
-import {useUserInfo} from "/@/stores/userInfo";
 import { getAPI } from '/@/utils/axios-utils';
 import { SysMenuApi } from '/@/api-services/api';
 import { SysMenu, UpdateMenuInput } from '/@/api-services/models';
 
-const getDictDataByCode = useUserInfo().getDictDataByCode;
 const props = defineProps({
 	title: String,
 	menuData: Array<SysMenu>,

+ 3 - 8
Web/src/views/system/menu/index.vue

@@ -6,9 +6,7 @@
 					<el-input v-model="state.queryParams.title" placeholder="菜单名称" clearable />
 				</el-form-item>
 				<el-form-item label="类型">
-					<el-select v-model="state.queryParams.type" placeholder="类型" clearable>
-            <el-option :value="item.value" :label="item.label" v-for="(item, index) in getDictDataByCode('MenuTypeEnum')" :key="index" />
-					</el-select>
+          <g-sys-dict v-model="state.queryParams.type" code="MenuTypeEnum" render-as="select" placeholder="类型" clearable />
 				</el-form-item>
 				<el-form-item>
 					<el-button-group>
@@ -32,7 +30,7 @@
 				</el-table-column>
 				<el-table-column label="类型" width="70" align="center" show-overflow-tooltip>
 					<template #default="scope">
-            <DictLabel :value="scope.row.type" code="MenuTypeEnum" />
+            <g-sys-dict v-model="scope.row.type" code="MenuTypeEnum" />
 					</template>
 				</el-table-column>
 				<el-table-column prop="path" label="路由路径" header-align="center" show-overflow-tooltip />
@@ -41,7 +39,7 @@
 				<el-table-column prop="orderNo" label="排序" width="70" align="center" show-overflow-tooltip />
 				<el-table-column label="状态" width="80" align="center" show-overflow-tooltip>
 					<template #default="scope">
-            <DictLabel :value="scope.row.status" code="StatusEnum" />
+            <g-sys-dict v-model="scope.row.status" code="StatusEnum" />
 					</template>
 				</el-table-column>
 				<el-table-column label="修改记录" width="100" align="center" show-overflow-tooltip>
@@ -72,10 +70,7 @@ import ModifyRecord from '/@/components/table/modifyRecord.vue';
 import { getAPI } from '/@/utils/axios-utils';
 import { SysMenuApi } from '/@/api-services/api';
 import { SysMenu, UpdateMenuInput } from '/@/api-services/models';
-import DictLabel from "/@/components/table/dictLabel.vue";
-import {useUserInfo} from "/@/stores/userInfo";
 
-const getDictDataByCode = useUserInfo().getDictDataByCode;
 const editMenuRef = ref<InstanceType<typeof EditMenu>>();
 const state = reactive({
 	loading: false,

+ 2 - 7
Web/src/views/system/notice/component/editNotice.vue

@@ -16,9 +16,7 @@
 					</el-col>
 					<el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12" class="mb20">
 						<el-form-item label="类型" prop="type" :rules="[{ required: true, message: '类型不能为空', trigger: 'blur' }]">
-							<el-select v-model="state.ruleForm.type" placeholder="类型" filterable allow-create default-first-option style="width: 100%">
-                <el-option :label="item.label" :value="item.value" v-for="(item, index) in getDictDataByCode('NoticeTypeEnum')" :key="index" />
-							</el-select>
+              <g-sys-dict v-model="state.ruleForm.type" code="NoticeTypeEnum" render-as="select" class="w100" filterable allow-create default-first-option />
 						</el-form-item>
 					</el-col>
 					<el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24" class="mb20">
@@ -40,14 +38,11 @@
 
 <script lang="ts" setup name="sysNoticeEdit">
 import { reactive, ref } from 'vue';
-import Editor from '/@/components/editor/index.vue';
-
-import {useUserInfo} from "/@/stores/userInfo";
 import { getAPI } from '/@/utils/axios-utils';
 import { SysNoticeApi } from '/@/api-services/api';
 import { UpdateNoticeInput } from '/@/api-services/models';
+import Editor from '/@/components/editor/index.vue';
 
-const getDictDataByCode = useUserInfo().getDictDataByCode;
 const props = defineProps({
 	title: String,
 });

+ 5 - 11
Web/src/views/system/notice/index.vue

@@ -6,9 +6,7 @@
 					<el-input v-model="state.queryParams.title" placeholder="标题" clearable />
 				</el-form-item>
 				<el-form-item label="类型">
-					<el-select v-model="state.queryParams.type" placeholder="类型" clearable>
-            <el-option :label="item.label" :value="item.value" v-for="(item, index) in getDictDataByCode('NoticeTypeEnum')" :key="index" />
-					</el-select>
+          <g-sys-dict v-model="state.queryParams.type" code="NoticeTypeEnum" render-as="select" clearable />
 				</el-form-item>
 				<el-form-item>
 					<el-button-group>
@@ -31,13 +29,13 @@
 				</el-table-column>
 				<el-table-column prop="type" label="类型" width="100" align="center" show-overflow-tooltip>
 					<template #default="scope">
-            <DictLabel :value="scope.row.type" code="NoticeTypeEnum" />
+            <g-sys-dict v-model="scope.row.type" code="NoticeTypeEnum" />
 					</template>
 				</el-table-column>
 				<el-table-column prop="createTime" label="创建时间" align="center" show-overflow-tooltip />
 				<el-table-column prop="status" label="状态" width="100" align="center" show-overflow-tooltip>
 					<template #default="scope">
-            <DictLabel :value="scope.row.status" code="NoticeStatusEnum" />
+            <g-sys-dict v-model="scope.row.status" code="NoticeStatusEnum" />
 					</template>
 				</el-table-column>
 				<el-table-column prop="publicUserName" label="发布者" align="center" show-overflow-tooltip />
@@ -70,16 +68,12 @@
 <script lang="ts" setup name="sysNotice">
 import { onMounted, reactive, ref } from 'vue';
 import { ElMessageBox, ElMessage } from 'element-plus';
-import commonFunction from '/@/utils/commonFunction';
-import EditNotice from '/@/views/system/notice/component/editNotice.vue';
-
-import {useUserInfo} from "/@/stores/userInfo";
 import { getAPI } from '/@/utils/axios-utils';
 import { SysNoticeApi } from '/@/api-services/api';
 import { SysNotice } from '/@/api-services/models';
-import DictLabel from "/@/components/table/dictLabel.vue";
+import commonFunction from '/@/utils/commonFunction';
+import EditNotice from '/@/views/system/notice/component/editNotice.vue';
 
-const getDictDataByCode = useUserInfo().getDictDataByCode;
 const editNoticeRef = ref<InstanceType<typeof EditNotice>>();
 const { removeHtml } = commonFunction();
 const state = reactive({

+ 1 - 9
Web/src/views/system/openAccess/component/generateSign.vue

@@ -23,9 +23,7 @@
 						<el-form-item label="接口请求地址" prop="url">
 							<el-input v-model="state.ruleForm.url" placeholder="接口请求地址" class="input-with-select" clearable>
 								<template #prepend>
-									<el-select v-model="state.ruleForm.method" placeholder="请求方法" style="width: 100px">
-                    <el-option :label="item.label" :value="item.value" v-for="(item, index) in getDictDataByCode('HttpMethodEnum')" :key="index" />
-									</el-select>
+                  <g-sys-dict v-model="state.ruleForm.method" code="HttpMethodEnum" render-as="select" placeholder="请求方法" style="width: 100px" />
 								</template>
 							</el-input>
 						</el-form-item>
@@ -61,16 +59,10 @@
 
 <script lang="ts" setup name="sysOpenAccessEdit">
 import { reactive, ref, watch } from 'vue';
-
-import {useUserInfo} from "/@/stores/userInfo";
 import { getAPI } from '/@/utils/axios-utils';
 import { SysOpenAccessApi } from '/@/api-services/api';
 import { GenerateSignatureInput, HttpMethodEnum } from '/@/api-services/models';
 
-const getDictDataByCode = useUserInfo().getDictDataByCode;
-const props = defineProps({
-	title: String,
-});
 const emits = defineEmits(['handleQuery']);
 const ruleFormRef = ref();
 const state = reactive({

+ 1 - 6
Web/src/views/system/org/component/editOrg.vue

@@ -36,9 +36,7 @@
 					</el-col>
 					<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 :label="item.label" :value="item.value" v-for="(item, index) in getDictDataByCode('org_type')" :key="index" />
-							</el-select>
+              <g-sys-dict v-model="state.ruleForm.type" code="org_type" render-as="select" class="w100" filterable clearable />
 						</el-form-item>
 					</el-col>
 					<el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12" class="mb20">
@@ -73,13 +71,10 @@
 
 <script lang="ts" setup name="sysEditOrg">
 import { reactive, ref } from 'vue';
-
-import {useUserInfo} from "/@/stores/userInfo";
 import { getAPI } from '/@/utils/axios-utils';
 import { SysOrgApi } from '/@/api-services/api';
 import { SysOrg, UpdateOrgInput } from '/@/api-services/models';
 
-const getDictDataByCode = useUserInfo().getDictDataByCode;
 const props = defineProps({
 	title: String,
 	orgData: Array<SysOrg>,

+ 6 - 13
Web/src/views/system/org/index.vue

@@ -14,9 +14,7 @@
 							<el-input v-model="state.queryParams.code" placeholder="机构编码" clearable />
 						</el-form-item> -->
 						<el-form-item label="机构类型">
-							<el-select v-model="state.queryParams.type" filterable clearable>
-                <el-option :label="item.label" :value="item.value" v-for="(item, index) in getDictDataByCode('org_type')" :key="index" />
-							</el-select>
+              <g-sys-dict v-model="state.queryParams.type" code="org_type" render-as="select" filterable clearable />
 						</el-form-item>
 						<el-form-item>
 							<el-button-group>
@@ -37,13 +35,13 @@
 						<el-table-column prop="level" label="级别" width="70" align="center" show-overflow-tooltip />
 						<el-table-column prop="type" label="机构类型" align="center" show-overflow-tooltip>
               <template #default="scope">
-                <DictLabel :value="scope.row.type" code="org_type" />
+                <g-sys-dict v-model="scope.row.type" code="org_type" />
               </template>
             </el-table-column>
 						<el-table-column prop="orderNo" label="排序" width="70" align="center" show-overflow-tooltip />
 						<el-table-column label="状态" width="70" align="center" show-overflow-tooltip>
 							<template #default="scope">
-                <DictLabel :value="scope.row.status" code="StatusEnum" />
+                <g-sys-dict v-model="scope.row.status" code="StatusEnum" />
 							</template>
 						</el-table-column>
 						<el-table-column label="修改记录" width="100" align="center" show-overflow-tooltip>
@@ -72,18 +70,13 @@ import { onMounted, reactive, ref } from 'vue';
 import { ElMessageBox, ElMessage } from 'element-plus';
 import { Splitpanes, Pane } from 'splitpanes';
 import 'splitpanes/dist/splitpanes.css';
-
-import OrgTree from '/@/views/system/org/component/orgTree.vue';
-import EditOrg from '/@/views/system/org/component/editOrg.vue';
-import ModifyRecord from '/@/components/table/modifyRecord.vue';
-
-import {useUserInfo} from "/@/stores/userInfo";
 import { getAPI } from '/@/utils/axios-utils';
 import { SysOrgApi } from '/@/api-services/api';
 import { SysOrg, UpdateOrgInput } from '/@/api-services/models';
-import DictLabel from "/@/components/table/dictLabel.vue";
+import OrgTree from '/@/views/system/org/component/orgTree.vue';
+import EditOrg from '/@/views/system/org/component/editOrg.vue';
+import ModifyRecord from '/@/components/table/modifyRecord.vue';
 
-const getDictDataByCode = useUserInfo().getDictDataByCode;
 const editOrgRef = ref<InstanceType<typeof EditOrg>>();
 const orgTreeRef = ref<InstanceType<typeof OrgTree>>();
 const state = reactive({

+ 1 - 3
Web/src/views/system/plugin/index.vue

@@ -25,7 +25,7 @@
 				<el-table-column prop="orderNo" label="排序" width="70" align="center" show-overflow-tooltip />
 				<el-table-column label="状态" width="70" align="center" show-overflow-tooltip>
 					<template #default="scope">
-            <DictLabel :value="scope.row.status" code="StatusEnum" />
+            <g-sys-dict v-model="scope.row.status" code="StatusEnum" />
 					</template>
 				</el-table-column>
 				<el-table-column label="修改记录" width="100" align="center" show-overflow-tooltip>
@@ -62,11 +62,9 @@ import { onMounted, reactive, ref } from 'vue';
 import { ElMessageBox, ElMessage } from 'element-plus';
 import EditPlugin from '/@/views/system/plugin/component/editPlugin.vue';
 import ModifyRecord from '/@/components/table/modifyRecord.vue';
-
 import { getAPI } from '/@/utils/axios-utils';
 import { SysPluginApi } from '/@/api-services/api';
 import { SysPlugin } from '/@/api-services/models';
-import DictLabel from "/@/components/table/dictLabel.vue";
 
 const editPluginRef = ref<InstanceType<typeof EditPlugin>>();
 const state = reactive({

+ 1 - 2
Web/src/views/system/pos/index.vue

@@ -28,7 +28,7 @@
 				<el-table-column prop="orderNo" label="排序" width="70" align="center" show-overflow-tooltip />
 				<el-table-column label="状态" width="70" align="center" show-overflow-tooltip>
 					<template #default="scope">
-            <DictLabel :value="scope.row.status" code="StatusEnum" />
+            <g-sys-dict v-model="scope.row.status" code="StatusEnum" />
 					</template>
 				</el-table-column>
 				<el-table-column label="修改记录" width="100" align="center" show-overflow-tooltip>
@@ -59,7 +59,6 @@ import ModifyRecord from '/@/components/table/modifyRecord.vue';
 import { getAPI } from '/@/utils/axios-utils';
 import { SysPosApi } from '/@/api-services/api';
 import { SysPos, UpdatePosInput } from '/@/api-services/models';
-import DictLabel from "/@/components/table/dictLabel.vue";
 
 const editPosRef = ref<InstanceType<typeof EditPos>>();
 const state = reactive({

+ 1 - 6
Web/src/views/system/print/component/editPrint.vue

@@ -50,9 +50,7 @@
 					</el-col>
 					<el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12" class="mb20">
 						<el-form-item label="打印类型">
-							<el-radio-group v-model="state.ruleForm.printType">
-                <el-radio :value="item.value" v-for="(item, index) in getDictDataByCode('PrintTypeEnum')" :key="index">{{item.label}}</el-radio>
-							</el-radio-group>
+              <g-sys-dict v-model="state.ruleForm.printType" code="PrintTypeEnum" render-as="radio" />
 						</el-form-item>
 					</el-col>
 					<el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24" class="mb20">
@@ -85,13 +83,10 @@
 <script lang="ts" setup name="sysEditPrint">
 import { onMounted, reactive, ref, nextTick } from 'vue';
 import HiprintDesign from '/@/views/system/print/component/hiprint/index.vue';
-
-import {useUserInfo} from "/@/stores/userInfo";
 import { getAPI } from '/@/utils/axios-utils';
 import { SysPrintApi } from '/@/api-services/api';
 import { UpdatePrintInput } from '/@/api-services/models';
 
-const getDictDataByCode = useUserInfo().getDictDataByCode;
 const hiprintDesignRef = ref<InstanceType<typeof HiprintDesign>>();
 const mode = ref(0);
 const props = defineProps({

+ 1 - 3
Web/src/views/system/print/index.vue

@@ -25,7 +25,7 @@
 				<el-table-column prop="orderNo" label="排序" align="center" show-overflow-tooltip />
 				<el-table-column label="状态" align="center" show-overflow-tooltip>
 					<template #default="scope">
-            <DictLabel :value="scope.row.status" code="StatusEnum" />
+            <g-sys-dict v-model="scope.row.status" code="StatusEnum" />
 					</template>
 				</el-table-column>
 				<el-table-column label="修改记录" width="100" align="center" show-overflow-tooltip>
@@ -62,11 +62,9 @@ import { onMounted, reactive, ref } from 'vue';
 import { ElMessageBox, ElMessage } from 'element-plus';
 import EditPrint from '/@/views/system/print/component/editPrint.vue';
 import ModifyRecord from '/@/components/table/modifyRecord.vue';
-
 import { getAPI } from '/@/utils/axios-utils';
 import { SysPrintApi } from '/@/api-services/api';
 import { SysPrint } from '/@/api-services/models';
-import DictLabel from "/@/components/table/dictLabel.vue";
 
 const editPrintRef = ref<InstanceType<typeof EditPrint>>();
 const state = reactive({

+ 1 - 6
Web/src/views/system/role/component/grantData.vue

@@ -11,9 +11,7 @@
 				<el-row :gutter="35">
 					<el-col :xs="24" :sm="24" :md="24" :lg="24" :xl1="24" class="mb20">
 						<el-form-item label="数据范围:">
-							<el-select v-model="state.ruleForm.dataScope" placeholder="数据范围" style="width: 100%">
-                <el-option :label="item.label" :value="item.value" v-for="(item, index) in getDictDataByCode('DataScopeEnum')" :key="index" />
-							</el-select>
+              <g-sys-dict v-model="state.ruleForm.dataScope" code="DataScopeEnum" render-as="select" placeholder="数据范围" class="w100" />
 						</el-form-item>
 					</el-col>
 					<el-col :xs="24" :sm="24" :md="24" :lg="24" :xl1="24" v-show="state.ruleForm.dataScope === 5">
@@ -36,13 +34,10 @@
 <script lang="ts" setup name="sysGrantData">
 import { reactive, ref } from 'vue';
 import OrgTree from '/@/views/system/org/component/orgTree.vue';
-
-import {useUserInfo} from "/@/stores/userInfo";
 import { getAPI } from '/@/utils/axios-utils';
 import { SysRoleApi } from '/@/api-services/api';
 import { RoleOrgInput } from '/@/api-services/models';
 
-const getDictDataByCode = useUserInfo().getDictDataByCode;
 const emits = defineEmits(['handleQuery']);
 const orgTreeRef = ref();
 const state = reactive({

+ 2 - 4
Web/src/views/system/role/index.vue

@@ -27,13 +27,13 @@
 				<el-table-column prop="code" label="角色编码" align="center" show-overflow-tooltip />
 				<el-table-column label="数据范围" align="center" show-overflow-tooltip>
 					<template #default="scope">
-            <DictLabel :value="scope.row.dataScope" code="DataScopeEnum" />
+            <g-sys-dict v-model="scope.row.dataScope" code="DataScopeEnum" />
 					</template>
 				</el-table-column>
 				<el-table-column prop="orderNo" label="排序" width="70" align="center" show-overflow-tooltip />
 				<el-table-column label="状态" width="70" align="center" show-overflow-tooltip>
 					<template #default="scope">
-            <DictLabel :value="scope.row.status" code="StatusEnum" />
+            <g-sys-dict v-model="scope.row.status" code="StatusEnum" />
 					</template>
 				</el-table-column>
 				<el-table-column label="修改记录" width="100" align="center" show-overflow-tooltip>
@@ -73,11 +73,9 @@ import { ElMessageBox, ElMessage } from 'element-plus';
 import EditRole from '/@/views/system/role/component/editRole.vue';
 import GrantData from '/@/views/system/role/component/grantData.vue';
 import ModifyRecord from '/@/components/table/modifyRecord.vue';
-
 import { getAPI } from '/@/utils/axios-utils';
 import { SysRoleApi } from '/@/api-services/api';
 import { SysRole } from '/@/api-services/models';
-import DictLabel from "/@/components/table/dictLabel.vue";
 
 const editRoleRef = ref<InstanceType<typeof EditRole>>();
 const grantDataRef = ref<InstanceType<typeof GrantData>>();

+ 1 - 6
Web/src/views/system/tenant/component/editTenant.vue

@@ -18,9 +18,7 @@
           </el-col>
 					<el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12" class="mb20">
 						<el-form-item label="租户类型" :rules="[{ required: true, message: '租户类型不能为空', trigger: 'blur' }]">
-							<el-radio-group v-model="state.ruleForm.tenantType" :disabled="state.ruleForm.id != undefined">
-                <el-radio :value="item.value" v-for="(item, index) in getDictDataByCode('TenantTypeEnum')" :key="index">{{item.label}}</el-radio>
-							</el-radio-group>
+              <g-sys-dict v-model="state.ruleForm.tenantType" code="TenantTypeEnum" render-as="radio" :disabled="state.ruleForm.id != undefined" />
 						</el-form-item>
 					</el-col>
 					<el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12" class="mb20">
@@ -124,13 +122,10 @@
 
 <script lang="ts" setup name="sysEditTenant">
 import { reactive, ref } from 'vue';
-
-import {useUserInfo} from "/@/stores/userInfo";
 import { getAPI } from '/@/utils/axios-utils';
 import {SysAppApi, SysTenantApi} from '/@/api-services/api';
 import { UpdateTenantInput } from '/@/api-services/models';
 
-const getDictDataByCode = useUserInfo().getDictDataByCode;
 const props = defineProps({
 	title: String,
 });

+ 1 - 3
Web/src/views/system/tenant/index.vue

@@ -31,7 +31,7 @@
 				<!-- <el-table-column prop="email" label="邮箱" show-overflow-tooltip /> -->
 				<el-table-column prop="tenantType" label="租户类型" width="100" align="center" show-overflow-tooltip>
 					<template #default="scope">
-            <DictLabel :value="scope.row.status" code="TenantTypeEnum" />
+            <g-sys-dict v-model="scope.row.status" code="TenantTypeEnum" />
 					</template>
 				</el-table-column>
 				<el-table-column label="状态" width="70" align="center" show-overflow-tooltip>
@@ -118,11 +118,9 @@ import { ElMessageBox, ElMessage } from 'element-plus';
 import EditTenant from '/@/views/system/tenant/component/editTenant.vue';
 import GrantMenu from '/@/views/system/tenant/component/grantMenu.vue';
 import ModifyRecord from '/@/components/table/modifyRecord.vue';
-
 import { getAPI } from '/@/utils/axios-utils';
 import { SysTenantApi } from '/@/api-services/api';
 import { TenantOutput } from '/@/api-services/models';
-import DictLabel from "/@/components/table/dictLabel.vue";
 
 const editTenantRef = ref<InstanceType<typeof EditTenant>>();
 const grantMenuRef = ref<InstanceType<typeof GrantMenu>>();

+ 8 - 19
Web/src/views/system/user/component/editUser.vue

@@ -40,14 +40,11 @@
 							</el-col>
 							<el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12" class="mb20">
 								<el-form-item label="账号类型" prop="accountType" :rules="[{ required: true, message: '账号类型不能为空', trigger: 'blur' }]">
-									<el-select v-model="state.ruleForm.accountType" placeholder="账号类型" collapse-tags collapse-tags-tooltip class="w100">
-                    <el-option
-                        v-for="(item, index) in getDictDataByCode('AccountTypeEnum').filter((x:any) => x.name != 'SuperAdmin')"
-                        :disabled="item.name == 'SysAdmin' && ![888, 999].some(x => x == userInfos.accountType)"
-                        :label="item.label"
-                        :value="item.value"
-                        :key="index" />
-									</el-select>
+                  <g-sys-dict
+                      v-model="state.ruleForm.accountType"
+                      :on-item-filter="(data: any) => data.name != 'SuperAdmin' && (data.name == 'SysAdmin' ? [888, 999].includes(userInfos.accountType) : true)"
+                      code="AccountTypeEnum"
+                      render-as="select" />
 								</el-form-item>
 							</el-col>
 							<el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12" class="mb20">
@@ -138,9 +135,7 @@
 						<el-row :gutter="35">
 							<el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12" class="mb20">
 								<el-form-item label="证件类型" prop="cardType">
-									<el-select v-model="state.ruleForm.cardType" placeholder="证件类型" class="w100">
-                    <el-option :label="item.label" :value="item.value" v-for="(item, index) in getDictDataByCode('CardTypeEnum')" :key="index" />
-									</el-select>
+                  <g-sys-dict v-model="state.ruleForm.cardType" code="CardTypeEnum" render-as="select" placeholder="证件类型" class="w100" />
 								</el-form-item>
 							</el-col>
 							<el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12" class="mb20">
@@ -155,9 +150,7 @@
 							</el-col>
 							<el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12" class="mb20">
 								<el-form-item label="性别">
-									<el-radio-group v-model="state.ruleForm.sex">
-                    <el-radio :value="item.value" v-for="(item, index) in getDictDataByCode('GenderEnum').sort((a: any, b: any) => a.label.length - b.label.length)" :key="index">{{item.label}}</el-radio>
-                  </el-radio-group>
+                  <g-sys-dict v-model="state.ruleForm.sex" code="GenderEnum" render-as="radio" />
 								</el-form-item>
 							</el-col>
 							<el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12" class="mb5">
@@ -182,9 +175,7 @@
 							</el-col>
 							<el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12" class="mb20">
 								<el-form-item label="文化程度">
-									<el-select v-model="state.ruleForm.cultureLevel" placeholder="文化程度" class="w100">
-                    <el-option :label="item.label" :value="item.value" v-for="(item, index) in getDictDataByCode('CultureLevelEnum')" :key="index" />
-									</el-select>
+                  <g-sys-dict v-model="state.ruleForm.cultureLevel" code="CultureLevelEnum" render-as="select" placeholder="文化程度" class="w100" />
 								</el-form-item>
 							</el-col>
 							<el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12" class="mb20">
@@ -235,12 +226,10 @@
 import { onMounted, reactive, ref } from 'vue';
 import { storeToRefs } from 'pinia';
 import { useUserInfo } from '/@/stores/userInfo';
-
 import { getAPI } from '/@/utils/axios-utils';
 import { SysPosApi, SysRoleApi, SysUserApi } from '/@/api-services/api';
 import { RoleOutput, SysOrg, SysPos, UpdateUserInput } from '/@/api-services/models';
 
-const getDictDataByCode = useUserInfo().getDictDataByCode;
 const props = defineProps({
 	title: String,
 	orgData: Array<SysOrg>,

+ 1 - 6
Web/src/views/system/user/index.vue

@@ -58,7 +58,7 @@
 						</el-table-column> -->
 						<el-table-column label="账号类型" width="110" align="center" show-overflow-tooltip>
 							<template #default="scope">
-                <DictLabel :value="scope.row.accountType" code="AccountTypeEnum" />
+                <g-sys-dict v-model="scope.row.accountType" code="AccountTypeEnum" />
 							</template>
 						</el-table-column>
 						<el-table-column prop="roleName" label="角色集合" min-width="150" align="center" show-overflow-tooltip />
@@ -113,19 +113,14 @@
 <script lang="ts" setup name="sysUser">
 import { onMounted, reactive, ref } from 'vue';
 import { ElMessageBox, ElMessage } from 'element-plus';
-// import { formatDate } from '/@/utils/formatTime';
-import { auth } from '/@/utils/authFunction';
 import OrgTree from '/@/views/system/org/component/orgTree.vue';
 import EditUser from '/@/views/system/user/component/editUser.vue';
 import ModifyRecord from '/@/components/table/modifyRecord.vue';
-
 import { Splitpanes, Pane } from 'splitpanes';
 import 'splitpanes/dist/splitpanes.css';
-
 import { getAPI } from '/@/utils/axios-utils';
 import { SysUserApi, SysOrgApi } from '/@/api-services/api';
 import { SysUser, SysOrg, UpdateUserInput } from '/@/api-services/models';
-import DictLabel from "/@/components/table/dictLabel.vue";
 
 const orgTreeRef = ref<InstanceType<typeof OrgTree>>();
 const editUserRef = ref<InstanceType<typeof EditUser>>();

+ 1 - 3
Web/src/views/system/weChatUser/index.vue

@@ -24,7 +24,7 @@
 				<el-table-column prop="unionId" label="UnionId" align="center" show-overflow-tooltip />
 				<el-table-column prop="platformType" label="平台类型" width="110" align="center" show-overflow-tooltip>
 					<template #default="scope">
-            <DictLabel :value="scope.row.platformType" code="PlatformTypeEnum" default-value="其他" />
+            <g-sys-dict v-model="scope.row.platformType" code="PlatformTypeEnum" default-value="其他" />
 					</template>
 				</el-table-column>
 				<el-table-column prop="nickName" label="昵称" align="center" show-overflow-tooltip />
@@ -71,11 +71,9 @@
 import { onMounted, reactive, ref } from 'vue';
 import { ElMessageBox, ElMessage } from 'element-plus';
 import EditWeChatUser from '/@/views/system/weChatUser/component/editWeChatUser.vue';
-
 import { getAPI } from '/@/utils/axios-utils';
 import { SysWechatUserApi } from '/@/api-services/api';
 import { SysWechatUser } from '/@/api-services/models';
-import DictLabel from "/@/components/table/dictLabel.vue";
 
 const editWeChatUserRef = ref<InstanceType<typeof EditWeChatUser>>();
 const state = reactive({