feat: 完成分享、单会话与发布审批改造

- 增加工作流协作分享与知识库卡片分享入口,统一低版本浏览器复制反馈

- Web 新登录替换旧会话,并保持 API Key 会话隔离

- 发布审批增加必填说明并在审批详情展示

- 账号重置与导入改用可配置默认强密码
This commit is contained in:
2026-07-23 16:09:31 +08:00
parent caa1f07b66
commit 5a42826d44
71 changed files with 3191 additions and 132 deletions

View File

@@ -23,6 +23,24 @@ import { useAuthStore } from '#/store';
import { refreshTokenApi } from './core';
const { apiURL } = useAppConfig(import.meta.env, import.meta.env.PROD);
const ERROR_MESSAGE_DEDUP_WINDOW = 800;
let lastErrorMessage = '';
let lastErrorTimestamp = 0;
function showErrorOnce(message?: string) {
const nextMessage = String(message || '').trim();
if (!nextMessage) return;
const now = Date.now();
if (
nextMessage === lastErrorMessage &&
now - lastErrorTimestamp < ERROR_MESSAGE_DEDUP_WINDOW
) {
return;
}
lastErrorMessage = nextMessage;
lastErrorTimestamp = now;
ElMessage.error(nextMessage);
}
function createRequestClient(baseURL: string, options?: RequestClientOptions) {
const client = new RequestClient({
@@ -80,7 +98,7 @@ function createRequestClient(baseURL: string, options?: RequestClientOptions) {
codeField: 'errorCode',
dataField: 'data',
showErrorMessage: (message) => {
ElMessage.error(message);
showErrorOnce(message);
},
successCode: 0,
}),
@@ -105,7 +123,7 @@ function createRequestClient(baseURL: string, options?: RequestClientOptions) {
const responseData = error?.response?.data ?? {};
const errorMessage = responseData?.error ?? responseData?.message ?? '';
// 如果没有错误信息,则会根据状态码进行提示
ElMessage.error(errorMessage || msg);
showErrorOnce(errorMessage || msg);
}),
);