feat(user): 支持修改当前用户资料接口并更新个人中心调用
- 新增 updateSelfUser 方法,用于修改当前登录用户的个人资料 - 个人中心调用接口由原 updateUser 切换为 updateSelfUser,避免学生账号权限不足导致的保存失败 - 更新了头像保存、个人信息保存等相关调用代码,添加异常捕获和提示 - 修正环境变量 .env.development 中 API URL 配置为生产地址 - 优化审核记录排序逻辑,新增获取最新审核记录和编辑入口显示判断函数 - 调整审核状态标签使用统一排序规则,防止显示和编辑状态不一致 - 新增社团活动、社团编辑、志愿时长录入、学分记录编辑、社会实践学分申报、青马学员编辑等多个新增组件及表单功能 - 各新增功能支持表单验证、操作反馈和数据加载优化
This commit is contained in:
@@ -0,0 +1,392 @@
|
||||
import type { PageParam, PageResult } from '@/api';
|
||||
import request from '@/utils/request';
|
||||
import type { ApiResult } from '@/api';
|
||||
import { MODULES_API_URL } from '@/config/setting';
|
||||
|
||||
/** 社团 */
|
||||
export interface Club {
|
||||
id?: number;
|
||||
clubCode?: string;
|
||||
clubName?: string;
|
||||
category?: string;
|
||||
collegeId?: number;
|
||||
organizationId?: number;
|
||||
advisorUserId?: number;
|
||||
advisorName?: string;
|
||||
presidentUserId?: number;
|
||||
presidentName?: string;
|
||||
presidentPhone?: string;
|
||||
memberCount?: number;
|
||||
level?: string;
|
||||
foundedDate?: string;
|
||||
intro?: string;
|
||||
cover?: string;
|
||||
status?: number;
|
||||
sortNumber?: number;
|
||||
collegeName?: string;
|
||||
members?: ClubMember[];
|
||||
}
|
||||
|
||||
/** 社团成员 */
|
||||
export interface ClubMember {
|
||||
id?: number;
|
||||
clubId?: number;
|
||||
userId?: number;
|
||||
studentNo?: string;
|
||||
studentName?: string;
|
||||
collegeId?: number;
|
||||
classId?: number;
|
||||
roleName?: string;
|
||||
joinTime?: string;
|
||||
quitTime?: string;
|
||||
status?: number;
|
||||
}
|
||||
|
||||
/** 社团活动 */
|
||||
export interface ClubActivity {
|
||||
id?: number;
|
||||
clubId?: number;
|
||||
clubName?: string;
|
||||
title?: string;
|
||||
category?: string;
|
||||
startTime?: string;
|
||||
endTime?: string;
|
||||
place?: string;
|
||||
scale?: number;
|
||||
budget?: number;
|
||||
content?: string;
|
||||
attachments?: string;
|
||||
ocrStatus?: number;
|
||||
ocrOrg?: string;
|
||||
status?: number;
|
||||
userId?: number;
|
||||
createTime?: string;
|
||||
}
|
||||
|
||||
export interface ClubParam extends PageParam {
|
||||
clubName?: string;
|
||||
category?: string;
|
||||
collegeId?: number;
|
||||
advisorUserId?: number;
|
||||
status?: number;
|
||||
}
|
||||
|
||||
export interface ClubActivityParam extends PageParam {
|
||||
clubId?: number;
|
||||
title?: string;
|
||||
category?: string;
|
||||
status?: number;
|
||||
userId?: number;
|
||||
startTimeStart?: string;
|
||||
startTimeEnd?: string;
|
||||
}
|
||||
|
||||
/** 场地 */
|
||||
export interface Venue {
|
||||
id?: number;
|
||||
venueName?: string;
|
||||
building?: string;
|
||||
roomNo?: string;
|
||||
capacity?: number;
|
||||
facilities?: string;
|
||||
openStartTime?: string;
|
||||
openEndTime?: string;
|
||||
openWeekdays?: string;
|
||||
managerUserId?: number;
|
||||
managerName?: string;
|
||||
adminOrgId?: number;
|
||||
status?: number;
|
||||
remark?: string;
|
||||
cover?: string;
|
||||
sortNumber?: number;
|
||||
}
|
||||
|
||||
/** 场地预约 */
|
||||
export interface VenueBooking {
|
||||
id?: number;
|
||||
venueId?: number;
|
||||
venueName?: string;
|
||||
userId?: number;
|
||||
applicantName?: string;
|
||||
applicantPhone?: string;
|
||||
clubId?: number;
|
||||
clubName?: string;
|
||||
bookingDate?: string;
|
||||
startTime?: string;
|
||||
endTime?: string;
|
||||
purpose?: string;
|
||||
attendeeCount?: number;
|
||||
status?: number;
|
||||
reviewRemark?: string;
|
||||
createTime?: string;
|
||||
}
|
||||
|
||||
export interface VenueBookingParam extends PageParam {
|
||||
venueId?: number;
|
||||
userId?: number;
|
||||
clubId?: number;
|
||||
status?: number;
|
||||
bookingDate?: string;
|
||||
bookingDateStart?: string;
|
||||
bookingDateEnd?: string;
|
||||
}
|
||||
|
||||
// ---------------- 社团 ----------------
|
||||
|
||||
export async function pageClubs(params: ClubParam) {
|
||||
const res = await request.get<ApiResult<PageResult<Club>>>(
|
||||
MODULES_API_URL + '/gxmu/club/page',
|
||||
{ params }
|
||||
);
|
||||
if (res.data.code === 0) {
|
||||
return res.data.data;
|
||||
}
|
||||
return Promise.reject(new Error(res.data.message));
|
||||
}
|
||||
|
||||
export async function listClubs(params?: ClubParam) {
|
||||
const res = await request.get<ApiResult<Club[]>>(
|
||||
MODULES_API_URL + '/gxmu/club',
|
||||
{ params }
|
||||
);
|
||||
if (res.data.code === 0 && res.data.data) {
|
||||
return res.data.data;
|
||||
}
|
||||
return Promise.reject(new Error(res.data.message));
|
||||
}
|
||||
|
||||
export async function getClub(id: number) {
|
||||
const res = await request.get<ApiResult<Club>>(
|
||||
MODULES_API_URL + '/gxmu/club/' + id
|
||||
);
|
||||
if (res.data.code === 0 && res.data.data) {
|
||||
return res.data.data;
|
||||
}
|
||||
return Promise.reject(new Error(res.data.message));
|
||||
}
|
||||
|
||||
export async function addClub(data: Club) {
|
||||
const res = await request.post<ApiResult<unknown>>(
|
||||
MODULES_API_URL + '/gxmu/club',
|
||||
data
|
||||
);
|
||||
if (res.data.code === 0) {
|
||||
return res.data.message;
|
||||
}
|
||||
return Promise.reject(new Error(res.data.message));
|
||||
}
|
||||
|
||||
export async function updateClub(data: Club) {
|
||||
const res = await request.put<ApiResult<unknown>>(
|
||||
MODULES_API_URL + '/gxmu/club',
|
||||
data
|
||||
);
|
||||
if (res.data.code === 0) {
|
||||
return res.data.message;
|
||||
}
|
||||
return Promise.reject(new Error(res.data.message));
|
||||
}
|
||||
|
||||
export async function removeClub(id: number) {
|
||||
const res = await request.delete<ApiResult<unknown>>(
|
||||
MODULES_API_URL + '/gxmu/club/' + id
|
||||
);
|
||||
if (res.data.code === 0) {
|
||||
return res.data.message;
|
||||
}
|
||||
return Promise.reject(new Error(res.data.message));
|
||||
}
|
||||
|
||||
export async function listClubMembers(clubId: number, status?: number) {
|
||||
const res = await request.get<ApiResult<ClubMember[]>>(
|
||||
MODULES_API_URL + `/gxmu/club/${clubId}/member`,
|
||||
{ params: { status } }
|
||||
);
|
||||
if (res.data.code === 0 && res.data.data) {
|
||||
return res.data.data;
|
||||
}
|
||||
return Promise.reject(new Error(res.data.message));
|
||||
}
|
||||
|
||||
export async function addClubMember(data: ClubMember) {
|
||||
const res = await request.post<ApiResult<unknown>>(
|
||||
MODULES_API_URL + '/gxmu/club/member',
|
||||
data
|
||||
);
|
||||
if (res.data.code === 0) {
|
||||
return res.data.message;
|
||||
}
|
||||
return Promise.reject(new Error(res.data.message));
|
||||
}
|
||||
|
||||
export async function removeClubMember(id: number) {
|
||||
const res = await request.delete<ApiResult<unknown>>(
|
||||
MODULES_API_URL + '/gxmu/club/member/' + id
|
||||
);
|
||||
if (res.data.code === 0) {
|
||||
return res.data.message;
|
||||
}
|
||||
return Promise.reject(new Error(res.data.message));
|
||||
}
|
||||
|
||||
export async function pageClubActivities(params: ClubActivityParam) {
|
||||
const res = await request.get<ApiResult<PageResult<ClubActivity>>>(
|
||||
MODULES_API_URL + '/gxmu/club/activity/page',
|
||||
{ params }
|
||||
);
|
||||
if (res.data.code === 0) {
|
||||
return res.data.data;
|
||||
}
|
||||
return Promise.reject(new Error(res.data.message));
|
||||
}
|
||||
|
||||
export async function submitClubActivity(data: ClubActivity) {
|
||||
const res = await request.post<ApiResult<unknown>>(
|
||||
MODULES_API_URL + '/gxmu/club/activity',
|
||||
data
|
||||
);
|
||||
if (res.data.code === 0) {
|
||||
return res.data.message;
|
||||
}
|
||||
return Promise.reject(new Error(res.data.message));
|
||||
}
|
||||
|
||||
export async function reviewClubActivity(data: ClubActivity) {
|
||||
const res = await request.put<ApiResult<unknown>>(
|
||||
MODULES_API_URL + '/gxmu/club/activity/review',
|
||||
data
|
||||
);
|
||||
if (res.data.code === 0) {
|
||||
return res.data.message;
|
||||
}
|
||||
return Promise.reject(new Error(res.data.message));
|
||||
}
|
||||
|
||||
export async function removeClubActivity(id: number) {
|
||||
const res = await request.delete<ApiResult<unknown>>(
|
||||
MODULES_API_URL + '/gxmu/club/activity/' + id
|
||||
);
|
||||
if (res.data.code === 0) {
|
||||
return res.data.message;
|
||||
}
|
||||
return Promise.reject(new Error(res.data.message));
|
||||
}
|
||||
|
||||
export async function listMyClubs() {
|
||||
const res = await request.get<ApiResult<Club[]>>(
|
||||
MODULES_API_URL + '/gxmu/club/my'
|
||||
);
|
||||
if (res.data.code === 0 && res.data.data) {
|
||||
return res.data.data;
|
||||
}
|
||||
return Promise.reject(new Error(res.data.message));
|
||||
}
|
||||
|
||||
// ---------------- 场地 ----------------
|
||||
|
||||
export async function pageVenues(params: { page?: number; limit?: number; venueName?: string; building?: string; status?: number }) {
|
||||
const res = await request.get<ApiResult<PageResult<Venue>>>(
|
||||
MODULES_API_URL + '/gxmu/venue/page',
|
||||
{ params }
|
||||
);
|
||||
if (res.data.code === 0) {
|
||||
return res.data.data;
|
||||
}
|
||||
return Promise.reject(new Error(res.data.message));
|
||||
}
|
||||
|
||||
export async function listVenues() {
|
||||
const res = await request.get<ApiResult<Venue[]>>(
|
||||
MODULES_API_URL + '/gxmu/venue'
|
||||
);
|
||||
if (res.data.code === 0 && res.data.data) {
|
||||
return res.data.data;
|
||||
}
|
||||
return Promise.reject(new Error(res.data.message));
|
||||
}
|
||||
|
||||
export async function addVenue(data: Venue) {
|
||||
const res = await request.post<ApiResult<unknown>>(
|
||||
MODULES_API_URL + '/gxmu/venue',
|
||||
data
|
||||
);
|
||||
if (res.data.code === 0) {
|
||||
return res.data.message;
|
||||
}
|
||||
return Promise.reject(new Error(res.data.message));
|
||||
}
|
||||
|
||||
export async function updateVenue(data: Venue) {
|
||||
const res = await request.put<ApiResult<unknown>>(
|
||||
MODULES_API_URL + '/gxmu/venue',
|
||||
data
|
||||
);
|
||||
if (res.data.code === 0) {
|
||||
return res.data.message;
|
||||
}
|
||||
return Promise.reject(new Error(res.data.message));
|
||||
}
|
||||
|
||||
export async function removeVenue(id: number) {
|
||||
const res = await request.delete<ApiResult<unknown>>(
|
||||
MODULES_API_URL + '/gxmu/venue/' + id
|
||||
);
|
||||
if (res.data.code === 0) {
|
||||
return res.data.message;
|
||||
}
|
||||
return Promise.reject(new Error(res.data.message));
|
||||
}
|
||||
|
||||
export async function pageVenueBookings(params: VenueBookingParam) {
|
||||
const res = await request.get<ApiResult<PageResult<VenueBooking>>>(
|
||||
MODULES_API_URL + '/gxmu/venue/booking/page',
|
||||
{ params }
|
||||
);
|
||||
if (res.data.code === 0) {
|
||||
return res.data.data;
|
||||
}
|
||||
return Promise.reject(new Error(res.data.message));
|
||||
}
|
||||
|
||||
export async function createVenueBooking(data: VenueBooking) {
|
||||
const res = await request.post<ApiResult<unknown>>(
|
||||
MODULES_API_URL + '/gxmu/venue/booking',
|
||||
data
|
||||
);
|
||||
if (res.data.code === 0) {
|
||||
return res.data.message;
|
||||
}
|
||||
return Promise.reject(new Error(res.data.message));
|
||||
}
|
||||
|
||||
export async function reviewVenueBooking(data: VenueBooking) {
|
||||
const res = await request.put<ApiResult<unknown>>(
|
||||
MODULES_API_URL + '/gxmu/venue/booking/review',
|
||||
data
|
||||
);
|
||||
if (res.data.code === 0) {
|
||||
return res.data.message;
|
||||
}
|
||||
return Promise.reject(new Error(res.data.message));
|
||||
}
|
||||
|
||||
export async function cancelVenueBooking(id: number) {
|
||||
const res = await request.put<ApiResult<unknown>>(
|
||||
MODULES_API_URL + '/gxmu/venue/booking/cancel/' + id
|
||||
);
|
||||
if (res.data.code === 0) {
|
||||
return res.data.message;
|
||||
}
|
||||
return Promise.reject(new Error(res.data.message));
|
||||
}
|
||||
|
||||
export async function getVenueSchedule(venueId: number, date: string) {
|
||||
const res = await request.get<ApiResult<Record<string, any>[]>>(
|
||||
MODULES_API_URL + '/gxmu/venue/booking/schedule',
|
||||
{ params: { venueId, date } }
|
||||
);
|
||||
if (res.data.code === 0 && res.data.data) {
|
||||
return res.data.data;
|
||||
}
|
||||
return Promise.reject(new Error(res.data.message));
|
||||
}
|
||||
@@ -0,0 +1,224 @@
|
||||
import type { PageParam, PageResult } from '@/api';
|
||||
import request from '@/utils/request';
|
||||
import type { ApiResult } from '@/api';
|
||||
import { MODULES_API_URL } from '@/config/setting';
|
||||
|
||||
/** 学分分类汇总 */
|
||||
export interface CategorySummary {
|
||||
category: string;
|
||||
earned: number;
|
||||
required: number;
|
||||
gap: number;
|
||||
rate: number;
|
||||
count: number;
|
||||
}
|
||||
|
||||
/** 学分汇总 */
|
||||
export interface CreditSummary {
|
||||
userId: number;
|
||||
studentName?: string;
|
||||
studentNo?: string;
|
||||
totalEarned: number;
|
||||
totalRequired: number;
|
||||
totalGap: number;
|
||||
completionRate: number;
|
||||
categories: CategorySummary[];
|
||||
}
|
||||
|
||||
/** 学分记录 */
|
||||
export interface CreditRecord {
|
||||
id?: number;
|
||||
userId?: number;
|
||||
studentNo?: string;
|
||||
studentName?: string;
|
||||
collegeId?: number;
|
||||
classId?: number;
|
||||
category?: string;
|
||||
itemName?: string;
|
||||
score?: number;
|
||||
acquireTime?: string;
|
||||
source?: string;
|
||||
externalId?: string;
|
||||
evidence?: string;
|
||||
status?: number;
|
||||
remark?: string;
|
||||
createTime?: string;
|
||||
updateTime?: string;
|
||||
}
|
||||
|
||||
export interface CreditRecordParam extends PageParam {
|
||||
userId?: number;
|
||||
studentNo?: string;
|
||||
studentName?: string;
|
||||
collegeId?: number;
|
||||
classId?: number;
|
||||
category?: string;
|
||||
source?: string;
|
||||
status?: number;
|
||||
acquireTimeStart?: string;
|
||||
acquireTimeEnd?: string;
|
||||
backendAccess?: boolean;
|
||||
}
|
||||
|
||||
/** 学分规则 */
|
||||
export interface CreditRule {
|
||||
id?: number;
|
||||
category?: string;
|
||||
itemName?: string;
|
||||
score?: number;
|
||||
source?: string;
|
||||
gradeScope?: string;
|
||||
collegeScope?: string;
|
||||
status?: number;
|
||||
remark?: string;
|
||||
}
|
||||
|
||||
/** 毕业学分要求 */
|
||||
export interface GraduateRequirement {
|
||||
id?: number;
|
||||
year?: number;
|
||||
collegeId?: number;
|
||||
major?: string;
|
||||
category?: string;
|
||||
requiredScore?: number;
|
||||
sortNumber?: number;
|
||||
remark?: string;
|
||||
}
|
||||
|
||||
/** 分页查询学分记录 */
|
||||
export async function pageCreditRecords(params: CreditRecordParam) {
|
||||
const res = await request.get<ApiResult<PageResult<CreditRecord>>>(
|
||||
MODULES_API_URL + '/gxmu/credit/page',
|
||||
{ params }
|
||||
);
|
||||
if (res.data.code === 0) {
|
||||
return res.data.data;
|
||||
}
|
||||
return Promise.reject(new Error(res.data.message));
|
||||
}
|
||||
|
||||
/** 新增学分记录 */
|
||||
export async function addCreditRecord(data: CreditRecord) {
|
||||
const res = await request.post<ApiResult<unknown>>(
|
||||
MODULES_API_URL + '/gxmu/credit',
|
||||
data
|
||||
);
|
||||
if (res.data.code === 0) {
|
||||
return res.data.message;
|
||||
}
|
||||
return Promise.reject(new Error(res.data.message));
|
||||
}
|
||||
|
||||
/** 修改学分记录 */
|
||||
export async function updateCreditRecord(data: CreditRecord) {
|
||||
const res = await request.put<ApiResult<unknown>>(
|
||||
MODULES_API_URL + '/gxmu/credit',
|
||||
data
|
||||
);
|
||||
if (res.data.code === 0) {
|
||||
return res.data.message;
|
||||
}
|
||||
return Promise.reject(new Error(res.data.message));
|
||||
}
|
||||
|
||||
/** 删除学分记录 */
|
||||
export async function removeCreditRecord(id: number) {
|
||||
const res = await request.delete<ApiResult<unknown>>(
|
||||
MODULES_API_URL + '/gxmu/credit/' + id
|
||||
);
|
||||
if (res.data.code === 0) {
|
||||
return res.data.message;
|
||||
}
|
||||
return Promise.reject(new Error(res.data.message));
|
||||
}
|
||||
|
||||
/** 导入一条学分记录 */
|
||||
export async function importCreditRecord(data: CreditRecord) {
|
||||
const res = await request.post<ApiResult<unknown>>(
|
||||
MODULES_API_URL + '/gxmu/credit/import',
|
||||
data
|
||||
);
|
||||
if (res.data.code === 0) {
|
||||
return res.data.message;
|
||||
}
|
||||
return Promise.reject(new Error(res.data.message));
|
||||
}
|
||||
|
||||
/** 我的学分汇总 */
|
||||
export async function getMyCreditSummary() {
|
||||
const res = await request.get<ApiResult<CreditSummary>>(
|
||||
MODULES_API_URL + '/gxmu/credit/my/summary'
|
||||
);
|
||||
if (res.data.code === 0) {
|
||||
return res.data.data;
|
||||
}
|
||||
return Promise.reject(new Error(res.data.message));
|
||||
}
|
||||
|
||||
/** 我的应修学分要求 */
|
||||
export async function getMyCreditRequirements() {
|
||||
const res = await request.get<ApiResult<Record<string, number>>>(
|
||||
MODULES_API_URL + '/gxmu/credit/my/requirements'
|
||||
);
|
||||
if (res.data.code === 0) {
|
||||
return res.data.data;
|
||||
}
|
||||
return Promise.reject(new Error(res.data.message));
|
||||
}
|
||||
|
||||
/** 学分规则列表 */
|
||||
export async function listCreditRules() {
|
||||
const res = await request.get<ApiResult<CreditRule[]>>(
|
||||
MODULES_API_URL + '/gxmu/credit/rule'
|
||||
);
|
||||
if (res.data.code === 0 && res.data.data) {
|
||||
return res.data.data;
|
||||
}
|
||||
return Promise.reject(new Error(res.data.message));
|
||||
}
|
||||
|
||||
/** 毕业要求列表 */
|
||||
export async function listGraduateRequirements() {
|
||||
const res = await request.get<ApiResult<GraduateRequirement[]>>(
|
||||
MODULES_API_URL + '/gxmu/credit/requirement'
|
||||
);
|
||||
if (res.data.code === 0 && res.data.data) {
|
||||
return res.data.data;
|
||||
}
|
||||
return Promise.reject(new Error(res.data.message));
|
||||
}
|
||||
|
||||
/** 新增毕业要求 */
|
||||
export async function addGraduateRequirement(data: GraduateRequirement) {
|
||||
const res = await request.post<ApiResult<unknown>>(
|
||||
MODULES_API_URL + '/gxmu/credit/requirement',
|
||||
data
|
||||
);
|
||||
if (res.data.code === 0) {
|
||||
return res.data.message;
|
||||
}
|
||||
return Promise.reject(new Error(res.data.message));
|
||||
}
|
||||
|
||||
/** 修改毕业要求 */
|
||||
export async function updateGraduateRequirement(data: GraduateRequirement) {
|
||||
const res = await request.put<ApiResult<unknown>>(
|
||||
MODULES_API_URL + '/gxmu/credit/requirement',
|
||||
data
|
||||
);
|
||||
if (res.data.code === 0) {
|
||||
return res.data.message;
|
||||
}
|
||||
return Promise.reject(new Error(res.data.message));
|
||||
}
|
||||
|
||||
/** 删除毕业要求 */
|
||||
export async function removeGraduateRequirement(id: number) {
|
||||
const res = await request.delete<ApiResult<unknown>>(
|
||||
MODULES_API_URL + '/gxmu/credit/requirement/' + id
|
||||
);
|
||||
if (res.data.code === 0) {
|
||||
return res.data.message;
|
||||
}
|
||||
return Promise.reject(new Error(res.data.message));
|
||||
}
|
||||
@@ -0,0 +1,65 @@
|
||||
import type { PageParam, PageResult } from '@/api';
|
||||
import request from '@/utils/request';
|
||||
import type { ApiResult } from '@/api';
|
||||
import { MODULES_API_URL } from '@/config/setting';
|
||||
|
||||
/** 学生成长主页 */
|
||||
export interface GrowthHome {
|
||||
basic?: {
|
||||
userId?: number;
|
||||
name?: string;
|
||||
studentNo?: string;
|
||||
avatar?: string;
|
||||
gender?: string;
|
||||
collegeName?: string;
|
||||
className?: string;
|
||||
major?: string;
|
||||
grade?: string;
|
||||
phone?: string;
|
||||
leaguePosition?: string;
|
||||
joinMonth?: string;
|
||||
politics?: string;
|
||||
profileCompletion?: number;
|
||||
};
|
||||
credit?: {
|
||||
totalEarned?: number;
|
||||
totalRequired?: number;
|
||||
totalGap?: number;
|
||||
completionRate?: number;
|
||||
categories?: {
|
||||
category: string;
|
||||
earned: number;
|
||||
required: number;
|
||||
gap: number;
|
||||
rate: number;
|
||||
count: number;
|
||||
}[];
|
||||
};
|
||||
volunteer?: Record<string, any>;
|
||||
activity?: Record<string, any>;
|
||||
declarations?: Record<string, any>[];
|
||||
qmgc?: Record<string, any> | null;
|
||||
}
|
||||
|
||||
/** 我的成长主页 */
|
||||
export async function getMyGrowthHome() {
|
||||
const res = await request.get<ApiResult<GrowthHome>>(
|
||||
MODULES_API_URL + '/gxmu/growth/my'
|
||||
);
|
||||
if (res.data.code === 0 && res.data.data) {
|
||||
return res.data.data;
|
||||
}
|
||||
return Promise.reject(new Error(res.data.message));
|
||||
}
|
||||
|
||||
/** 指定学生的成长主页 */
|
||||
export async function getGrowthHome(userId: number) {
|
||||
const res = await request.get<ApiResult<GrowthHome>>(
|
||||
MODULES_API_URL + '/gxmu/growth/home',
|
||||
{ params: { userId } }
|
||||
);
|
||||
if (res.data.code === 0 && res.data.data) {
|
||||
return res.data.data;
|
||||
}
|
||||
return Promise.reject(new Error(res.data.message));
|
||||
}
|
||||
@@ -0,0 +1,132 @@
|
||||
import type { PageParam, PageResult } from '@/api';
|
||||
import request from '@/utils/request';
|
||||
import type { ApiResult } from '@/api';
|
||||
import { MODULES_API_URL } from '@/config/setting';
|
||||
|
||||
/** 社会实践学分申报 */
|
||||
export interface PracticeCreditApply {
|
||||
id?: number;
|
||||
userId?: number;
|
||||
studentNo?: string;
|
||||
studentName?: string;
|
||||
collegeId?: number;
|
||||
classId?: number;
|
||||
schoolYear?: string;
|
||||
activityName?: string;
|
||||
activityType?: string;
|
||||
startDate?: string;
|
||||
endDate?: string;
|
||||
roleName?: string;
|
||||
content?: string;
|
||||
score?: number;
|
||||
approvedScore?: number;
|
||||
attachments?: string;
|
||||
status?: number;
|
||||
remark?: string;
|
||||
createTime?: string;
|
||||
updateTime?: string;
|
||||
}
|
||||
|
||||
export interface PracticeCreditParam extends PageParam {
|
||||
userId?: number;
|
||||
studentNo?: string;
|
||||
studentName?: string;
|
||||
collegeId?: number;
|
||||
classId?: number;
|
||||
schoolYear?: string;
|
||||
activityType?: string;
|
||||
status?: number;
|
||||
backendAccess?: boolean;
|
||||
}
|
||||
|
||||
export const PRACTICE_STATUS_OPTIONS = [
|
||||
{ label: '草稿', value: 0 },
|
||||
{ label: '待审核', value: 1 },
|
||||
{ label: '通过', value: 2 },
|
||||
{ label: '驳回', value: 3 },
|
||||
{ label: '作废', value: 4 }
|
||||
];
|
||||
|
||||
export const PRACTICE_TYPE_OPTIONS = [
|
||||
{ label: '寒暑假社会实践', value: '寒暑假社会实践' },
|
||||
{ label: '志愿服务', value: '志愿服务' },
|
||||
{ label: '社会调研', value: '社会调研' },
|
||||
{ label: '实习实训', value: '实习实训' },
|
||||
{ label: '其他', value: '其他' }
|
||||
];
|
||||
|
||||
export async function pagePracticeCredits(params: PracticeCreditParam) {
|
||||
const res = await request.get<ApiResult<PageResult<PracticeCreditApply>>>(
|
||||
MODULES_API_URL + '/gxmu/practice-credit/page',
|
||||
{ params }
|
||||
);
|
||||
if (res.data.code === 0) {
|
||||
return res.data.data;
|
||||
}
|
||||
return Promise.reject(new Error(res.data.message));
|
||||
}
|
||||
|
||||
export async function submitPracticeCredit(data: PracticeCreditApply) {
|
||||
const res = await request.post<ApiResult<unknown>>(
|
||||
MODULES_API_URL + '/gxmu/practice-credit/my',
|
||||
data
|
||||
);
|
||||
if (res.data.code === 0) {
|
||||
return res.data.message;
|
||||
}
|
||||
return Promise.reject(new Error(res.data.message));
|
||||
}
|
||||
|
||||
export async function withdrawPracticeCredit(id: number) {
|
||||
const res = await request.put<ApiResult<unknown>>(
|
||||
MODULES_API_URL + `/gxmu/practice-credit/${id}/withdraw`
|
||||
);
|
||||
if (res.data.code === 0) {
|
||||
return res.data.message;
|
||||
}
|
||||
return Promise.reject(new Error(res.data.message));
|
||||
}
|
||||
|
||||
export async function voidPracticeCredit(id: number, reason?: string) {
|
||||
const res = await request.put<ApiResult<unknown>>(
|
||||
MODULES_API_URL + `/gxmu/practice-credit/${id}/void`,
|
||||
null,
|
||||
{ params: { reason } }
|
||||
);
|
||||
if (res.data.code === 0) {
|
||||
return res.data.message;
|
||||
}
|
||||
return Promise.reject(new Error(res.data.message));
|
||||
}
|
||||
|
||||
export async function removePracticeCredit(id: number) {
|
||||
const res = await request.delete<ApiResult<unknown>>(
|
||||
MODULES_API_URL + '/gxmu/practice-credit/' + id
|
||||
);
|
||||
if (res.data.code === 0) {
|
||||
return res.data.message;
|
||||
}
|
||||
return Promise.reject(new Error(res.data.message));
|
||||
}
|
||||
|
||||
export async function getMyPracticeSummary() {
|
||||
const res = await request.get<ApiResult<Record<string, any>>>(
|
||||
MODULES_API_URL + '/gxmu/practice-credit/my/summary'
|
||||
);
|
||||
if (res.data.code === 0 && res.data.data) {
|
||||
return res.data.data;
|
||||
}
|
||||
return Promise.reject(new Error(res.data.message));
|
||||
}
|
||||
|
||||
/** 导出教务处模板数据表 */
|
||||
export async function exportPracticeCredit(params: PracticeCreditParam) {
|
||||
const res = await request.post<ApiResult<Record<string, any>>>(
|
||||
MODULES_API_URL + '/gxmu/practice-credit/export',
|
||||
params
|
||||
);
|
||||
if (res.data.code === 0 && res.data.data) {
|
||||
return res.data.data;
|
||||
}
|
||||
return Promise.reject(new Error(res.data.message));
|
||||
}
|
||||
@@ -0,0 +1,289 @@
|
||||
import type { PageParam, PageResult } from '@/api';
|
||||
import request from '@/utils/request';
|
||||
import type { ApiResult } from '@/api';
|
||||
import { MODULES_API_URL } from '@/config/setting';
|
||||
|
||||
/** 青马学员 */
|
||||
export interface QmgcStudent {
|
||||
id?: number;
|
||||
userId?: number;
|
||||
formId?: number;
|
||||
studentNo?: string;
|
||||
studentName?: string;
|
||||
gender?: string;
|
||||
phone?: string;
|
||||
collegeId?: number;
|
||||
collegeName?: string;
|
||||
classId?: number;
|
||||
className?: string;
|
||||
batch?: string;
|
||||
year?: number;
|
||||
candidateNo?: string;
|
||||
stage?: string;
|
||||
stageName?: string;
|
||||
result?: string;
|
||||
totalScore?: number;
|
||||
remark?: string;
|
||||
status?: number;
|
||||
createTime?: string;
|
||||
}
|
||||
|
||||
/** 青马培养材料 */
|
||||
export interface QmgcMaterial {
|
||||
id?: number;
|
||||
studentId?: number;
|
||||
stage?: string;
|
||||
type?: string;
|
||||
title?: string;
|
||||
content?: string;
|
||||
fileId?: number;
|
||||
fileUrl?: string;
|
||||
submitTime?: string;
|
||||
score?: number;
|
||||
scorerId?: number;
|
||||
scoreComment?: string;
|
||||
status?: number;
|
||||
}
|
||||
|
||||
/** 青马培养任务 */
|
||||
export interface QmgcTask {
|
||||
id?: number;
|
||||
batch?: string;
|
||||
stage?: string;
|
||||
title?: string;
|
||||
type?: string;
|
||||
linkPath?: string;
|
||||
content?: string;
|
||||
mustDo?: number;
|
||||
score?: number;
|
||||
deadline?: string;
|
||||
sortNumber?: number;
|
||||
status?: number;
|
||||
}
|
||||
|
||||
/** 青马考核评分 */
|
||||
export interface QmgcScore {
|
||||
id?: number;
|
||||
studentId?: number;
|
||||
dimension?: string;
|
||||
item?: string;
|
||||
score?: number;
|
||||
maxScore?: number;
|
||||
scorerId?: number;
|
||||
scorerName?: string;
|
||||
comment?: string;
|
||||
scoredTime?: string;
|
||||
}
|
||||
|
||||
export interface QmgcStudentParam extends PageParam {
|
||||
userId?: number;
|
||||
formId?: number;
|
||||
studentNo?: string;
|
||||
studentName?: string;
|
||||
collegeId?: number;
|
||||
batch?: string;
|
||||
year?: number;
|
||||
stage?: string;
|
||||
status?: number;
|
||||
}
|
||||
|
||||
export interface QmgcTaskParam extends PageParam {
|
||||
batch?: string;
|
||||
stage?: string;
|
||||
type?: string;
|
||||
status?: number;
|
||||
}
|
||||
|
||||
export async function pageQmgcStudents(params: QmgcStudentParam) {
|
||||
const res = await request.get<ApiResult<PageResult<QmgcStudent>>>(
|
||||
MODULES_API_URL + '/gxmu/qmgc-student/page',
|
||||
{ params }
|
||||
);
|
||||
if (res.data.code === 0) {
|
||||
return res.data.data;
|
||||
}
|
||||
return Promise.reject(new Error(res.data.message));
|
||||
}
|
||||
|
||||
export async function getQmgcStudentDetail(id: number) {
|
||||
const res = await request.get<ApiResult<Record<string, any>>>(
|
||||
MODULES_API_URL + '/gxmu/qmgc-student/' + id
|
||||
);
|
||||
if (res.data.code === 0 && res.data.data) {
|
||||
return res.data.data;
|
||||
}
|
||||
return Promise.reject(new Error(res.data.message));
|
||||
}
|
||||
|
||||
export async function addQmgcStudent(data: QmgcStudent) {
|
||||
const res = await request.post<ApiResult<unknown>>(
|
||||
MODULES_API_URL + '/gxmu/qmgc-student',
|
||||
data
|
||||
);
|
||||
if (res.data.code === 0) {
|
||||
return res.data.message;
|
||||
}
|
||||
return Promise.reject(new Error(res.data.message));
|
||||
}
|
||||
|
||||
export async function updateQmgcStudent(data: QmgcStudent) {
|
||||
const res = await request.put<ApiResult<unknown>>(
|
||||
MODULES_API_URL + '/gxmu/qmgc-student',
|
||||
data
|
||||
);
|
||||
if (res.data.code === 0) {
|
||||
return res.data.message;
|
||||
}
|
||||
return Promise.reject(new Error(res.data.message));
|
||||
}
|
||||
|
||||
export async function removeQmgcStudent(id: number) {
|
||||
const res = await request.delete<ApiResult<unknown>>(
|
||||
MODULES_API_URL + '/gxmu/qmgc-student/' + id
|
||||
);
|
||||
if (res.data.code === 0) {
|
||||
return res.data.message;
|
||||
}
|
||||
return Promise.reject(new Error(res.data.message));
|
||||
}
|
||||
|
||||
export async function getMyQmgc() {
|
||||
const res = await request.get<ApiResult<Record<string, any> | null>>(
|
||||
MODULES_API_URL + '/gxmu/qmgc-student/my'
|
||||
);
|
||||
if (res.data.code === 0) {
|
||||
return res.data.data;
|
||||
}
|
||||
return Promise.reject(new Error(res.data.message));
|
||||
}
|
||||
|
||||
export async function listQmgcMaterials(studentId: number) {
|
||||
const res = await request.get<ApiResult<QmgcMaterial[]>>(
|
||||
MODULES_API_URL + `/gxmu/qmgc-student/${studentId}/material`
|
||||
);
|
||||
if (res.data.code === 0 && res.data.data) {
|
||||
return res.data.data;
|
||||
}
|
||||
return Promise.reject(new Error(res.data.message));
|
||||
}
|
||||
|
||||
export async function submitQmgcMaterial(data: QmgcMaterial) {
|
||||
const res = await request.post<ApiResult<QmgcMaterial>>(
|
||||
MODULES_API_URL + '/gxmu/qmgc-student/material',
|
||||
data
|
||||
);
|
||||
if (res.data.code === 0) {
|
||||
return res.data.data;
|
||||
}
|
||||
return Promise.reject(new Error(res.data.message));
|
||||
}
|
||||
|
||||
export async function scoreQmgcMaterial(id: number, score: number, comment?: string) {
|
||||
const res = await request.post<ApiResult<unknown>>(
|
||||
MODULES_API_URL + `/gxmu/qmgc-student/material/${id}/score`,
|
||||
null,
|
||||
{ params: { score, comment } }
|
||||
);
|
||||
if (res.data.code === 0) {
|
||||
return res.data.message;
|
||||
}
|
||||
return Promise.reject(new Error(res.data.message));
|
||||
}
|
||||
|
||||
export async function listQmgcStudentTasks(studentId: number) {
|
||||
const res = await request.get<ApiResult<Record<string, any>[]>>(
|
||||
MODULES_API_URL + `/gxmu/qmgc-student/${studentId}/task`
|
||||
);
|
||||
if (res.data.code === 0 && res.data.data) {
|
||||
return res.data.data;
|
||||
}
|
||||
return Promise.reject(new Error(res.data.message));
|
||||
}
|
||||
|
||||
export async function completeQmgcTask(studentId: number, taskId: number, proofFiles?: string) {
|
||||
const res = await request.post<ApiResult<unknown>>(
|
||||
MODULES_API_URL + `/gxmu/qmgc-student/${studentId}/task/${taskId}/complete`,
|
||||
null,
|
||||
{ params: { proofFiles } }
|
||||
);
|
||||
if (res.data.code === 0) {
|
||||
return res.data.message;
|
||||
}
|
||||
return Promise.reject(new Error(res.data.message));
|
||||
}
|
||||
|
||||
export async function assignQmgcTasks(studentId: number, batch?: string) {
|
||||
const res = await request.post<ApiResult<unknown>>(
|
||||
MODULES_API_URL + `/gxmu/qmgc-student/${studentId}/task/assign`,
|
||||
null,
|
||||
{ params: { batch } }
|
||||
);
|
||||
if (res.data.code === 0) {
|
||||
return res.data.message;
|
||||
}
|
||||
return Promise.reject(new Error(res.data.message));
|
||||
}
|
||||
|
||||
export async function pageQmgcTasks(params: QmgcTaskParam) {
|
||||
const res = await request.get<ApiResult<PageResult<QmgcTask>>>(
|
||||
MODULES_API_URL + '/gxmu/qmgc-student/task/page',
|
||||
{ params }
|
||||
);
|
||||
if (res.data.code === 0) {
|
||||
return res.data.data;
|
||||
}
|
||||
return Promise.reject(new Error(res.data.message));
|
||||
}
|
||||
|
||||
export async function addQmgcTask(data: QmgcTask) {
|
||||
const res = await request.post<ApiResult<unknown>>(
|
||||
MODULES_API_URL + '/gxmu/qmgc-student/task',
|
||||
data
|
||||
);
|
||||
if (res.data.code === 0) {
|
||||
return res.data.message;
|
||||
}
|
||||
return Promise.reject(new Error(res.data.message));
|
||||
}
|
||||
|
||||
export async function updateQmgcTask(data: QmgcTask) {
|
||||
const res = await request.put<ApiResult<unknown>>(
|
||||
MODULES_API_URL + '/gxmu/qmgc-student/task',
|
||||
data
|
||||
);
|
||||
if (res.data.code === 0) {
|
||||
return res.data.message;
|
||||
}
|
||||
return Promise.reject(new Error(res.data.message));
|
||||
}
|
||||
|
||||
export async function removeQmgcTask(id: number) {
|
||||
const res = await request.delete<ApiResult<unknown>>(
|
||||
MODULES_API_URL + '/gxmu/qmgc-student/task/' + id
|
||||
);
|
||||
if (res.data.code === 0) {
|
||||
return res.data.message;
|
||||
}
|
||||
return Promise.reject(new Error(res.data.message));
|
||||
}
|
||||
|
||||
export async function listQmgcScores(studentId: number) {
|
||||
const res = await request.get<ApiResult<QmgcScore[]>>(
|
||||
MODULES_API_URL + `/gxmu/qmgc-student/${studentId}/score`
|
||||
);
|
||||
if (res.data.code === 0 && res.data.data) {
|
||||
return res.data.data;
|
||||
}
|
||||
return Promise.reject(new Error(res.data.message));
|
||||
}
|
||||
|
||||
export async function saveQmgcScore(data: QmgcScore) {
|
||||
const res = await request.post<ApiResult<QmgcScore>>(
|
||||
MODULES_API_URL + '/gxmu/qmgc-student/score',
|
||||
data
|
||||
);
|
||||
if (res.data.code === 0) {
|
||||
return res.data.data;
|
||||
}
|
||||
return Promise.reject(new Error(res.data.message));
|
||||
}
|
||||
@@ -0,0 +1,102 @@
|
||||
import type { PageParam, PageResult } from '@/api';
|
||||
import request from '@/utils/request';
|
||||
import type { ApiResult } from '@/api';
|
||||
import { MODULES_API_URL } from '@/config/setting';
|
||||
|
||||
/** 主题团课资源 */
|
||||
export interface ThematicCourse {
|
||||
id?: number;
|
||||
title?: string;
|
||||
type?: string;
|
||||
sourceSite?: string;
|
||||
sourceUrl?: string;
|
||||
sourceKey?: string;
|
||||
cover?: string;
|
||||
summary?: string;
|
||||
content?: string;
|
||||
fileId?: number;
|
||||
fileUrl?: string;
|
||||
tags?: string;
|
||||
heat?: number;
|
||||
publishTime?: string;
|
||||
status?: number;
|
||||
lastSyncTime?: string;
|
||||
createTime?: string;
|
||||
}
|
||||
|
||||
export interface ThematicCourseParam extends PageParam {
|
||||
type?: string;
|
||||
tags?: string;
|
||||
status?: number;
|
||||
}
|
||||
|
||||
export const THEMATIC_TYPE_OPTIONS = [
|
||||
{ label: '课件', value: 'courseware' },
|
||||
{ label: '讲稿', value: 'script' },
|
||||
{ label: '视频', value: 'video' },
|
||||
{ label: '案例', value: 'case' },
|
||||
{ label: '活动方案', value: 'activity' }
|
||||
];
|
||||
|
||||
export async function pageThematicCourses(params: ThematicCourseParam) {
|
||||
const res = await request.get<ApiResult<PageResult<ThematicCourse>>>(
|
||||
MODULES_API_URL + '/gxmu/thematic-course/page',
|
||||
{ params }
|
||||
);
|
||||
if (res.data.code === 0) {
|
||||
return res.data.data;
|
||||
}
|
||||
return Promise.reject(new Error(res.data.message));
|
||||
}
|
||||
|
||||
export async function getThematicCourse(id: number) {
|
||||
const res = await request.get<ApiResult<ThematicCourse>>(
|
||||
MODULES_API_URL + '/gxmu/thematic-course/' + id
|
||||
);
|
||||
if (res.data.code === 0 && res.data.data) {
|
||||
return res.data.data;
|
||||
}
|
||||
return Promise.reject(new Error(res.data.message));
|
||||
}
|
||||
|
||||
export async function addThematicCourse(data: ThematicCourse) {
|
||||
const res = await request.post<ApiResult<unknown>>(
|
||||
MODULES_API_URL + '/gxmu/thematic-course',
|
||||
data
|
||||
);
|
||||
if (res.data.code === 0) {
|
||||
return res.data.message;
|
||||
}
|
||||
return Promise.reject(new Error(res.data.message));
|
||||
}
|
||||
|
||||
export async function updateThematicCourse(data: ThematicCourse) {
|
||||
const res = await request.put<ApiResult<unknown>>(
|
||||
MODULES_API_URL + '/gxmu/thematic-course',
|
||||
data
|
||||
);
|
||||
if (res.data.code === 0) {
|
||||
return res.data.message;
|
||||
}
|
||||
return Promise.reject(new Error(res.data.message));
|
||||
}
|
||||
|
||||
export async function removeThematicCourse(id: number) {
|
||||
const res = await request.delete<ApiResult<unknown>>(
|
||||
MODULES_API_URL + '/gxmu/thematic-course/' + id
|
||||
);
|
||||
if (res.data.code === 0) {
|
||||
return res.data.message;
|
||||
}
|
||||
return Promise.reject(new Error(res.data.message));
|
||||
}
|
||||
|
||||
export async function syncThematicCourses() {
|
||||
const res = await request.post<ApiResult<unknown>>(
|
||||
MODULES_API_URL + '/gxmu/thematic-course/sync'
|
||||
);
|
||||
if (res.data.code === 0) {
|
||||
return res.data.message;
|
||||
}
|
||||
return Promise.reject(new Error(res.data.message));
|
||||
}
|
||||
@@ -0,0 +1,136 @@
|
||||
import type { PageParam, PageResult } from '@/api';
|
||||
import request from '@/utils/request';
|
||||
import type { ApiResult } from '@/api';
|
||||
import { MODULES_API_URL } from '@/config/setting';
|
||||
|
||||
/** 志愿服务时长记录 */
|
||||
export interface VolunteerRecord {
|
||||
id?: number;
|
||||
userId?: number;
|
||||
studentNo?: string;
|
||||
studentName?: string;
|
||||
collegeId?: number;
|
||||
classId?: number;
|
||||
source?: string;
|
||||
externalId?: string;
|
||||
projectName?: string;
|
||||
orgName?: string;
|
||||
hours?: number;
|
||||
serviceDate?: string;
|
||||
serviceEndDate?: string;
|
||||
content?: string;
|
||||
proofFiles?: string;
|
||||
status?: number;
|
||||
reviewRemark?: string;
|
||||
reviewerId?: number;
|
||||
reviewTime?: string;
|
||||
createTime?: string;
|
||||
updateTime?: string;
|
||||
}
|
||||
|
||||
export interface VolunteerRecordParam extends PageParam {
|
||||
userId?: number;
|
||||
studentNo?: string;
|
||||
studentName?: string;
|
||||
collegeId?: number;
|
||||
classId?: number;
|
||||
source?: string;
|
||||
status?: number;
|
||||
serviceDateStart?: string;
|
||||
serviceDateEnd?: string;
|
||||
backendAccess?: boolean;
|
||||
}
|
||||
|
||||
/** 分页查询志愿时长 */
|
||||
export async function pageVolunteerRecords(params: VolunteerRecordParam) {
|
||||
const res = await request.get<ApiResult<PageResult<VolunteerRecord>>>(
|
||||
MODULES_API_URL + '/gxmu/volunteer/page',
|
||||
{ params }
|
||||
);
|
||||
if (res.data.code === 0) {
|
||||
return res.data.data;
|
||||
}
|
||||
return Promise.reject(new Error(res.data.message));
|
||||
}
|
||||
|
||||
/** 个人录入志愿时长 */
|
||||
export async function submitVolunteerRecord(data: VolunteerRecord) {
|
||||
const res = await request.post<ApiResult<unknown>>(
|
||||
MODULES_API_URL + '/gxmu/volunteer/my',
|
||||
data
|
||||
);
|
||||
if (res.data.code === 0) {
|
||||
return res.data.message;
|
||||
}
|
||||
return Promise.reject(new Error(res.data.message));
|
||||
}
|
||||
|
||||
/** 导入志愿时长 */
|
||||
export async function importVolunteerRecord(data: VolunteerRecord) {
|
||||
const res = await request.post<ApiResult<unknown>>(
|
||||
MODULES_API_URL + '/gxmu/volunteer/import',
|
||||
data
|
||||
);
|
||||
if (res.data.code === 0) {
|
||||
return res.data.message;
|
||||
}
|
||||
return Promise.reject(new Error(res.data.message));
|
||||
}
|
||||
|
||||
/** 审核志愿时长 */
|
||||
export async function reviewVolunteerRecord(data: VolunteerRecord) {
|
||||
const res = await request.put<ApiResult<unknown>>(
|
||||
MODULES_API_URL + '/gxmu/volunteer/review',
|
||||
data
|
||||
);
|
||||
if (res.data.code === 0) {
|
||||
return res.data.message;
|
||||
}
|
||||
return Promise.reject(new Error(res.data.message));
|
||||
}
|
||||
|
||||
/** 删除志愿时长 */
|
||||
export async function removeVolunteerRecord(id: number) {
|
||||
const res = await request.delete<ApiResult<unknown>>(
|
||||
MODULES_API_URL + '/gxmu/volunteer/' + id
|
||||
);
|
||||
if (res.data.code === 0) {
|
||||
return res.data.message;
|
||||
}
|
||||
return Promise.reject(new Error(res.data.message));
|
||||
}
|
||||
|
||||
/** 我的累计志愿时长 */
|
||||
export async function getMyVolunteerTotal(year?: number) {
|
||||
const res = await request.get<ApiResult<number>>(
|
||||
MODULES_API_URL + '/gxmu/volunteer/my/total',
|
||||
{ params: { year } }
|
||||
);
|
||||
if (res.data.code === 0) {
|
||||
return res.data.data;
|
||||
}
|
||||
return Promise.reject(new Error(res.data.message));
|
||||
}
|
||||
|
||||
/** 我的志愿时长年度汇总 */
|
||||
export async function getMyVolunteerSummary() {
|
||||
const res = await request.get<ApiResult<Record<string, any>>>(
|
||||
MODULES_API_URL + '/gxmu/volunteer/my/summary'
|
||||
);
|
||||
if (res.data.code === 0) {
|
||||
return res.data.data;
|
||||
}
|
||||
return Promise.reject(new Error(res.data.message));
|
||||
}
|
||||
|
||||
/** 我的志愿项目分组统计 */
|
||||
export async function getMyVolunteerProjectStats(year?: number) {
|
||||
const res = await request.get<ApiResult<Record<string, any>[]>>(
|
||||
MODULES_API_URL + '/gxmu/volunteer/my/project',
|
||||
{ params: { year } }
|
||||
);
|
||||
if (res.data.code === 0 && res.data.data) {
|
||||
return res.data.data;
|
||||
}
|
||||
return Promise.reject(new Error(res.data.message));
|
||||
}
|
||||
@@ -0,0 +1,91 @@
|
||||
import request from '@/utils/request';
|
||||
import type { ApiResult } from '@/api';
|
||||
import { MODULES_API_URL } from '@/config/setting';
|
||||
|
||||
/** 学分类警 */
|
||||
export interface CreditWarning {
|
||||
id?: number;
|
||||
userId?: number;
|
||||
category?: string;
|
||||
requiredScore?: number;
|
||||
earnedScore?: number;
|
||||
gap?: number;
|
||||
level?: string;
|
||||
hitTime?: string;
|
||||
notified?: number;
|
||||
notifyMonth?: string;
|
||||
studentName?: string;
|
||||
studentNo?: string;
|
||||
}
|
||||
|
||||
export interface CreditWarningParam {
|
||||
userId?: number;
|
||||
category?: string;
|
||||
level?: string;
|
||||
notified?: number;
|
||||
backendAccess?: boolean;
|
||||
}
|
||||
|
||||
export const WARNING_LEVEL_OPTIONS = [
|
||||
{ label: '正常', value: 'normal' },
|
||||
{ label: '注意', value: 'warn' },
|
||||
{ label: '严重', value: 'danger' }
|
||||
];
|
||||
|
||||
/** 查询预警列表 */
|
||||
export async function listCreditWarnings(params: CreditWarningParam) {
|
||||
const res = await request.get<ApiResult<CreditWarning[]>>(
|
||||
MODULES_API_URL + '/gxmu/credit-warning',
|
||||
{ params }
|
||||
);
|
||||
if (res.data.code === 0 && res.data.data) {
|
||||
return res.data.data;
|
||||
}
|
||||
return Promise.reject(new Error(res.data.message));
|
||||
}
|
||||
|
||||
/** 预警汇总 */
|
||||
export async function getCreditWarningSummary() {
|
||||
const res = await request.get<ApiResult<Record<string, any>>>(
|
||||
MODULES_API_URL + '/gxmu/credit-warning/summary'
|
||||
);
|
||||
if (res.data.code === 0 && res.data.data) {
|
||||
return res.data.data;
|
||||
}
|
||||
return Promise.reject(new Error(res.data.message));
|
||||
}
|
||||
|
||||
/** 重算我的预警 */
|
||||
export async function recalcMyWarnings() {
|
||||
const res = await request.post<ApiResult<unknown>>(
|
||||
MODULES_API_URL + '/gxmu/credit-warning/my/recalculate'
|
||||
);
|
||||
if (res.data.code === 0) {
|
||||
return res.data.message;
|
||||
}
|
||||
return Promise.reject(new Error(res.data.message));
|
||||
}
|
||||
|
||||
/** 全量重算 */
|
||||
export async function recalcAllWarnings() {
|
||||
const res = await request.post<ApiResult<unknown>>(
|
||||
MODULES_API_URL + '/gxmu/credit-warning/recalculate'
|
||||
);
|
||||
if (res.data.code === 0) {
|
||||
return res.data.message;
|
||||
}
|
||||
return Promise.reject(new Error(res.data.message));
|
||||
}
|
||||
|
||||
/** 发送预警提醒 */
|
||||
export async function notifyCreditWarning(userId?: number) {
|
||||
const res = await request.post<ApiResult<unknown>>(
|
||||
MODULES_API_URL + '/gxmu/credit-warning/notify',
|
||||
null,
|
||||
{ params: { userId } }
|
||||
);
|
||||
if (res.data.code === 0) {
|
||||
return res.data.message;
|
||||
}
|
||||
return Promise.reject(new Error(res.data.message));
|
||||
}
|
||||
Reference in New Issue
Block a user