😎同步更新(1、table增加动态列功能 2、优化更新记录时间 3、优化dict特性)

This commit is contained in:
zuohuaijun 2024-06-24 13:39:24 +08:00
parent 01274ae603
commit 143c4992ff
4 changed files with 27 additions and 23 deletions

View File

@ -40,19 +40,13 @@ public class DictAttribute : ValidationAttribute, ITransient
// 是否忽略空字符串 // 是否忽略空字符串
if (AllowEmptyStrings && string.IsNullOrEmpty(valueAsString)) return ValidationResult.Success; if (AllowEmptyStrings && string.IsNullOrEmpty(valueAsString)) return ValidationResult.Success;
// 查询缓存中是否存在
var cacheServiceProvider = validationContext.GetRequiredService<SysCacheService>();
var sysDictDataServiceProvider = validationContext.GetRequiredService<SysDictDataService>(); var sysDictDataServiceProvider = validationContext.GetRequiredService<SysDictDataService>();
var dictDataList = sysDictDataServiceProvider.GetDataList(DictTypeCode).Result;
string cacheKey = $"{CacheConst.KeyDict}{DictTypeCode}"; // 使用HashSet来提高查找效率
var dictDataList = cacheServiceProvider.Get<HashSet<SysDictData>>(cacheKey); var dictCodes = new HashSet<string>(dictDataList.Select(u => u.Code));
if (dictDataList == null)
{
dictDataList = sysDictDataServiceProvider.GetDataList(DictTypeCode).Result.ToHashSet();
cacheServiceProvider.Set(cacheKey, dictDataList);
}
if (!dictDataList.Select(u => u.Code).ToHashSet().Contains(valueAsString)) if (!dictCodes.Contains(valueAsString))
return new ValidationResult($"提示:{ErrorMessage}|字典【{DictTypeCode}】不包含【{valueAsString}】!"); return new ValidationResult($"提示:{ErrorMessage}|字典【{DictTypeCode}】不包含【{valueAsString}】!");
else else
return ValidationResult.Success; return ValidationResult.Success;

View File

@ -173,11 +173,17 @@ public class SysDictDataService : IDynamicApiController, ITransient
[DisplayName("根据字典类型编码获取字典值集合")] [DisplayName("根据字典类型编码获取字典值集合")]
public async Task<List<SysDictData>> GetDataList(string code) public async Task<List<SysDictData>> GetDataList(string code)
{ {
return await _sysDictDataRep.Context.Queryable<SysDictType>() var dictDataList = _sysCacheService.Get<List<SysDictData>>($"{CacheConst.KeyDict}{code}");
.LeftJoin<SysDictData>((u, a) => u.Id == a.DictTypeId) if (dictDataList == null)
.Where((u, a) => u.Code == code && u.Status == StatusEnum.Enable && a.Status == StatusEnum.Enable) {
.OrderBy((u, a) => new { a.OrderNo, a.Code }) dictDataList = await _sysDictDataRep.Context.Queryable<SysDictType>()
.Select((u, a) => a).ToListAsync(); .LeftJoin<SysDictData>((u, a) => u.Id == a.DictTypeId)
.Where((u, a) => u.Code == code && u.Status == StatusEnum.Enable && a.Status == StatusEnum.Enable)
.OrderBy((u, a) => new { a.OrderNo, a.Code })
.Select((u, a) => a).ToListAsync();
_sysCacheService.Set($"{CacheConst.KeyDict}{code}", dictDataList);
}
return dictDataList;
} }
/// <summary> /// <summary>

View File

@ -447,12 +447,7 @@ const switchFixed = () => {
} }
}; };
onMounted(() => { const refreshColumns = () => {
if (props.defaultSort) {
state.page.field = props.defaultSort.prop;
state.page.order = props.defaultSort.order;
}
state.page.pageSize = props.config.pageSize ?? 10;
state.oldColumns = JSON.parse(JSON.stringify(props.columns)); state.oldColumns = JSON.parse(JSON.stringify(props.columns));
state.columns = props.columns; state.columns = props.columns;
for (let item of state.columns) { for (let item of state.columns) {
@ -465,6 +460,15 @@ onMounted(() => {
} }
} }
} }
};
onMounted(() => {
if (props.defaultSort) {
state.page.field = props.defaultSort.prop;
state.page.order = props.defaultSort.order;
}
state.page.pageSize = props.config.pageSize ?? 10;
refreshColumns();
handleList(); handleList();
}); });
@ -475,7 +479,7 @@ defineExpose({
toggleSelection, toggleSelection,
getTableData, getTableData,
setTableData, setTableData,
switchFixed, refreshColumns,
}); });
</script> </script>

View File

@ -6,7 +6,7 @@
</template> </template>
<div class="commit"> <div class="commit">
<el-timeline style="max-width: 600px" v-if="state.list.length > 0"> <el-timeline style="max-width: 600px" v-if="state.list.length > 0">
<el-timeline-item v-for="(item, index) in state.list" :key="index" :timestamp="item.commit.committer.date"> <el-timeline-item v-for="(item, index) in state.list" :key="index" :timestamp="item.commit.committer.date.replace(/[T+]/g, ' ')">
<el-link :href="item.html_url" target="_blank"> {{ item.commit.message }}</el-link> <el-link :href="item.html_url" target="_blank"> {{ item.commit.message }}</el-link>
</el-timeline-item> </el-timeline-item>
</el-timeline> </el-timeline>