😎1、优化字典获取 2、调整首页组件

This commit is contained in:
zuohuaijun 2024-07-16 18:02:51 +08:00
parent b943a7850b
commit 731950d699
5 changed files with 44 additions and 35 deletions

View File

@ -132,16 +132,12 @@ export const useUserInfo = defineStore('userInfo', {
// 根据字典类型和代码取字典项 // 根据字典类型和代码取字典项
getDictItemByCode(typePCode: string, val: string) { getDictItemByCode(typePCode: string, val: string) {
if (val != undefined) { if (val != undefined && val !== '') {
val = val.toString(); const _val = val.toString();
if (val) { const ds = this.getDictDatasByCode(typePCode);
const _val = val.toString(); for (const element of ds) {
const ds = this.getDictDatasByCode(typePCode); if (element.value === _val) {
for (let index = 0; index < ds.length; index++) { return element;
const element = ds[index];
if (element.code == _val) {
return element;
}
} }
} }
} }
@ -150,16 +146,12 @@ export const useUserInfo = defineStore('userInfo', {
// 根据字典类型和值取描述 // 根据字典类型和值取描述
getDictLabelByVal(typePCode: string, val: string) { getDictLabelByVal(typePCode: string, val: string) {
if (val != undefined) { if (val != undefined && val !== '') {
val = val.toString(); const _val = val.toString();
if (val) { const ds = this.getDictDatasByCode(typePCode);
const _val = val.toString(); for (const element of ds) {
const ds = this.getDictDatasByCode(typePCode); if (element.code === _val) {
for (let index = 0; index < ds.length; index++) { return element;
const element = ds[index];
if (element.value == _val) {
return element;
}
} }
} }
} }
@ -170,12 +162,12 @@ export const useUserInfo = defineStore('userInfo', {
getDictValByLabel(typePCode: string, label: string) { getDictValByLabel(typePCode: string, label: string) {
if (!label) return ''; if (!label) return '';
const ds = this.getDictDatasByCode(typePCode); const ds = this.getDictDatasByCode(typePCode);
for (let index = 0; index < ds.length; index++) { for (const element of ds) {
const element = ds[index]; if (element.name === label) {
if (element.name == label) {
return element; return element;
} }
} }
return ''; // 明确返回空字符串
}, },
// 根据字典类型获取字典数据 // 根据字典类型获取字典数据
@ -185,18 +177,20 @@ export const useUserInfo = defineStore('userInfo', {
// 根据字典类型获取字典数据(值转为数字类型) // 根据字典类型获取字典数据(值转为数字类型)
getDictIntDatasByCode(dictTypeCode: string) { getDictIntDatasByCode(dictTypeCode: string) {
var ds = this.dictListInt[dictTypeCode]; let ds = this.dictListInt[dictTypeCode];
if (ds) { if (ds) {
return ds; return ds;
} else { }
ds = this.dictList[dictTypeCode].map((element: { code: any }) => {
var d = { ...element }; const dictList = this.dictList[dictTypeCode];
d.code = element.code - 0; if (dictList) {
return d; ds = dictList.map((element: { code: any }) => {
return { ...element, code: Number(element.code) };
}); });
this.dictListInt[dictTypeCode] = ds; this.dictListInt[dictTypeCode] = ds;
return ds;
} }
return ds;
}, },
}, },
}); });

View File

@ -4,6 +4,9 @@ type Component = any;
const resultComps: Record<string, Component> = {}; const resultComps: Record<string, Component> = {};
// 要排除的组件名称数组
const excludeComponents = ['scheduleEdit'];
// 使用 import.meta.glob 动态导入当前目录中的所有 .vue 文件,急切导入 // 使用 import.meta.glob 动态导入当前目录中的所有 .vue 文件,急切导入
const requireComponent = import.meta.glob('./*.vue', { eager: true }); const requireComponent = import.meta.glob('./*.vue', { eager: true });
// console.log(requireComponent); // console.log(requireComponent);
@ -11,12 +14,18 @@ const requireComponent = import.meta.glob('./*.vue', { eager: true });
Object.keys(requireComponent).forEach((fileName: string) => { Object.keys(requireComponent).forEach((fileName: string) => {
// 处理文件名,去掉开头的 './' 和结尾的文件扩展名 // 处理文件名,去掉开头的 './' 和结尾的文件扩展名
const componentName = fileName.replace(/^\.\/(.*)\.\w+$/, '$1'); const componentName = fileName.replace(/^\.\/(.*)\.\w+$/, '$1');
// 如果组件名称在排除数组中,跳过导入
if (excludeComponents.includes(componentName)) {
return;
}
// 确保模块导出存在并且是默认导出 // 确保模块导出存在并且是默认导出
const componentModule = requireComponent[fileName] as { default: Component }; const componentModule = requireComponent[fileName] as { default: Component };
// 将组件添加到 resultComps 中,使用处理后的文件名作为键 // 将组件添加到 resultComps 中,使用处理后的文件名作为键
resultComps[componentName] = componentModule.default; resultComps[componentName] = componentModule.default;
}); });
// 动态的这里拿到title等东西是为了这里显示
// 标记 resultComps 为原始对象,避免其被设为响应式 // 标记 resultComps 为原始对象,避免其被设为响应式
export default markRaw(resultComps); export default markRaw(resultComps);

View File

@ -25,7 +25,14 @@
<div class="schedule-list"> <div class="schedule-list">
<div class="item" v-for="(item, index) in state.TodayScheduleData" :key="index" @click="openEditSchedule(item)"> <div class="item" v-for="(item, index) in state.TodayScheduleData" :key="index" @click="openEditSchedule(item)">
<el-icon style="display: inline; vertical-align: middle"> <ele-Calendar /> </el-icon> <el-icon style="display: inline; vertical-align: middle"> <ele-Calendar /> </el-icon>
<span class="content" style="padding-left: 10px">{{ item.content }}</span> <span class="content" style="padding-left: 10px">
<span>
{{ item.scheduleTime }}
</span>
<span style="padding-left: 15px; font-weight: 600; color: var(--el-color-primary)">
{{ item.content }}
</span>
</span>
</div> </div>
</div> </div>
@ -207,7 +214,6 @@ function FormatDate(date: any) {
// //
.schedule-list { .schedule-list {
padding: 0 20px 10px;
overflow-y: auto; overflow-y: auto;
height: 150px; height: 150px;
.item { .item {

View File

@ -11,7 +11,7 @@
<el-row :gutter="35"> <el-row :gutter="35">
<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="日程时间" prop="scheduleTime" :rules="[{ required: true, message: '日程时间不能为空', trigger: 'blur' }]"> <el-form-item label="日程时间" prop="scheduleTime" :rules="[{ required: true, message: '日程时间不能为空', trigger: 'blur' }]">
<el-date-picker v-model="state.ruleForm.scheduleTime" type="date" placeholder="请选择日程时间" format="YYYY-MM-DD" value-format="YYYY-MM-DD HH:mm:ss" class="w100" /> <el-date-picker v-model="state.ruleForm.scheduleTime" type="datetime" placeholder="请选择日程时间" format="YYYY-MM-DD HH:mm:ss" value-format="YYYY-MM-DD HH:mm:ss" class="w100" />
</el-form-item> </el-form-item>
</el-col> </el-col>
<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">

View File

@ -31,7 +31,7 @@
<component :is="allComps[element]"></component> <component :is="allComps[element]"></component>
<div v-if="customizing" class="customize-overlay"> <div v-if="customizing" class="customize-overlay">
<el-button class="close" type="danger" plain icon="ele-Close" @click="remove(element)"></el-button> <el-button class="close" type="danger" plain icon="ele-Close" @click="remove(element)"></el-button>
<label> <label v-if="allComps[element]">
<el-icon> <component :is="allComps[element].icon" /> </el-icon>{{ allComps[element].title }} <el-icon> <component :is="allComps[element].icon" /> </el-icon>{{ allComps[element].title }}
</label> </label>
</div> </div>