添加jwt验证,添加交叉评查首页加载对接接口,评查任务文档列表对接接口,意见列表对接接口
This commit is contained in:
@@ -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,
|
||||
|
||||
Reference in New Issue
Block a user