添加jwt验证,添加交叉评查首页加载对接接口,评查任务文档列表对接接口,意见列表对接接口

This commit is contained in:
2025-07-22 14:37:37 +08:00
parent de953283e3
commit 47664fc0e8
19 changed files with 1988 additions and 557 deletions
+64 -6
View File
@@ -65,15 +65,29 @@ export interface ApiResponse<T> {
status?: number;
}
/**
* 安全获取JWT token
* @param jwtToken JWT token字符串
* @returns JWT token字符串
*/
async function safeGetJWT(jwtToken?: string): Promise<string> {
return jwtToken || '';
}
/**
* 提交交叉评查意见
* @param opinionData 意见数据
* @param jwtToken JWT token
* @returns 提交结果
*/
export async function submitCrossCheckingOpinion(
opinionData: SubmitOpinionRequest
opinionData: SubmitOpinionRequest,
jwtToken?: string
): Promise<ApiResponse<SubmitOpinionResponse>> {
try {
// 获取JWT token
const token = await safeGetJWT(jwtToken);
const requestData = {
proposer_user_id: 1,
evaluation_result_id: opinionData.reviewPointResultId,
@@ -87,7 +101,8 @@ export async function submitCrossCheckingOpinion(
const response = await fetch(`${API_BASE_URL}/admin/cross_review/proposals`, {
method: 'POST',
headers: {
'Content-Type': 'application/json'
'Content-Type': 'application/json',
'Authorization': `Bearer ${token}`
},
body: JSON.stringify(requestData)
});
@@ -119,6 +134,8 @@ export async function submitCrossCheckingOpinion(
* @param documentId 文档ID
* @param page 页码
* @param pageSize 每页大小
* @param userId 用户ID,可选,便于后端接口对接
* @param jwtToken JWT token
* @returns 意见列表和总数
*/
import { API_BASE_URL } from '../../config/api-config';
@@ -127,9 +144,13 @@ export async function getCrossCheckingOpinions(
documentId: string | number,
page: number = 1,
pageSize: number = 10,
userId?: number // 可选,便于后端接口对接
userId?: number, // 可选,便于后端接口对接
jwtToken?: string // 改为jwtToken参数
): Promise<ApiResponse<{ opinions: CrossCheckingOpinion[], total: number }>> {
try {
// 获取JWT token
const token = await safeGetJWT(jwtToken);
// 如果没传userId,默认用1
const realUserId = userId ?? 1;
// 实际后端API调用,拼接API_BASE_URL
@@ -137,6 +158,7 @@ export async function getCrossCheckingOpinions(
method: 'POST',
headers: {
'Content-Type': 'application/json',
'Authorization': `Bearer ${token}`
},
body: JSON.stringify({
user_id: realUserId,
@@ -226,6 +248,13 @@ export async function getCrossCheckingOpinions(
*/
export type OpinionActionType = 'agree' | 'disagree' | 'withdraw_vote' | 'withdraw_opinion';
/**
* 投票请求参数接口
*/
export interface OpinionVoteCreate {
vote_type: 'agree' | 'disagree';
}
/**
* 意见操作请求参数
*/
@@ -237,33 +266,62 @@ export interface OpinionActionRequest {
/**
* 执行意见操作(赞同、反对、撤销投票、撤销意见)
* @param actionData 操作数据
* @param jwtToken JWT token
* @returns 操作结果
*/
export async function performOpinionAction(
actionData: OpinionActionRequest
actionData: OpinionActionRequest,
jwtToken?: string
): Promise<ApiResponse<{ success: boolean; message: string }>> {
try {
// 模拟API调用延迟
await new Promise(resolve => setTimeout(resolve, 500));
const token = await safeGetJWT(jwtToken);
let message = '';
let endpoint = '';
let requestBody: Record<string, unknown> = {};
switch (actionData.action) {
case 'agree':
message = '已赞同该意见';
endpoint = `${API_BASE_URL}/admin/cross_review/proposals/${actionData.opinionId}/votes`;
requestBody = { vote_type: 'agree' };
break;
case 'disagree':
message = '已反对该意见';
endpoint = `${API_BASE_URL}/admin/cross_review/proposals/${actionData.opinionId}/votes`;
requestBody = { vote_type: 'disagree' };
break;
case 'withdraw_vote':
message = '已撤销投票';
// 撤销投票的接口,根据实际API调整
endpoint = `${API_BASE_URL}/admin/cross_review/proposals/${actionData.opinionId}/votes/withdraw`;
requestBody = {};
break;
case 'withdraw_opinion':
message = '已撤销意见';
// 撤销意见的接口,根据实际API调整
endpoint = `${API_BASE_URL}/admin/cross_review/proposals/${actionData.opinionId}/withdraw`;
requestBody = {};
break;
default:
throw new Error('无效的操作类型');
}
const response = await fetch(endpoint, {
method: 'POST',
headers: {
'Content-Type': 'application/json',
'Authorization': `Bearer ${token}`
},
body: JSON.stringify(requestBody)
});
const data = await response.json();
if (!response.ok) {
throw new Error(data.message || data.error || '操作失败');
}
return {
data: {
success: true,