fix: 修复多项后端缺陷并加固安全与限流

- 修正 AI 会话表初始化及异步数据库 URI 处理
- 新增全局 API 与 WS 聊天限流,健康检查豁免
- 修复忘记密码接口防用户枚举与参数校验
- 修复 SSE 推送数据重复编码问题
- 修复 Cron 表达式 Quartz 问号兼容
- 修复存储模块权限标识前缀
- 新增过期日志清理与任务错误中文提示
This commit is contained in:
zhangtao
2026-09-07 00:08:00 +08:00
parent 30dfc7097b
commit a8d29d4ab4
59 changed files with 989 additions and 891 deletions
@@ -6,7 +6,9 @@
<el-link type="primary" :href="modelValue" target="_blank" :underline="false">
{{ fileName }}
</el-link>
<el-icon class="file-item-action" title="移除" @click="handleRemove"><CircleCloseFilled /></el-icon>
<el-icon class="file-item-action" title="移除" @click="handleRemove"
><CircleCloseFilled
/></el-icon>
</div>
<el-button v-else type="primary" plain :loading="uploading" @click="fileInputRef?.click()">
<el-icon class="mr-1"><UploadFilled /></el-icon>
@@ -115,20 +117,20 @@ const doUpload = async (file: File) => {
.fa-file-upload .file-item {
display: flex;
align-items: center;
gap: 6px;
align-items: center;
min-width: 0;
}
.fa-file-upload .file-item-icon {
color: var(--el-color-primary);
flex-shrink: 0;
color: var(--el-color-primary);
}
.fa-file-upload .file-item-action {
cursor: pointer;
color: var(--el-text-color-secondary);
flex-shrink: 0;
color: var(--el-text-color-secondary);
cursor: pointer;
}
.fa-file-upload .file-item-action:hover {
@@ -138,7 +140,7 @@ const doUpload = async (file: File) => {
.fa-file-upload .file-tip {
margin-top: 4px;
font-size: 12px;
color: var(--el-text-color-secondary);
line-height: 1.4;
color: var(--el-text-color-secondary);
}
</style>
@@ -22,11 +22,12 @@
>
<ElFormItem
:prop="item.key"
:label="typeof item.label === 'string' ? item.label : undefined"
:label-width="item.label ? item.labelWidth || labelWidth : undefined"
>
<template #label v-if="item.label">
<component v-if="typeof item.label !== 'string'" :is="item.label" />
<span v-else>{{ item.label }}</span>
<!-- 字符串 label 走 ElFormItem 默认渲染使 label-suffix 生效;组件 label 保留插槽 -->
<template v-if="item.label && typeof item.label !== 'string'" #label>
<component :is="item.label" />
</template>
<slot :name="item.key" :item="item" :modelValue="modelValue">
<component
@@ -119,11 +120,12 @@
>
<ElFormItem
:prop="item.key"
:label="typeof item.label === 'string' ? item.label : undefined"
:label-width="item.label ? item.labelWidth || labelWidth : undefined"
>
<template #label v-if="item.label">
<component v-if="typeof item.label !== 'string'" :is="item.label" />
<span v-else>{{ item.label }}</span>
<!-- 字符串 label 走 ElFormItem 默认渲染使 label-suffix 生效;组件 label 保留插槽 -->
<template v-if="item.label && typeof item.label !== 'string'" #label>
<component :is="item.label" />
</template>
<slot :name="item.key" :item="item" :modelValue="modelValue">
<component