Files
yunzerwebsiteallinone/uniapp/api/oaDailyReport.js
T
2026-10-22 00:27:26 +08:00

158 lines
4.6 KiB
JavaScript

import { request } from '@/api/request.js'
import { getBaseURL } from '@/api/config.js'
import { getToken } from '@/utils/auth.js'
/**
* OA 工作日报接口封装,对应后端 /api/oa/dailyreport/*。
* 与后台 PC 端 /backend/oa/dailyreport/* 共用同一套数据与权限:
* 本人 / 部门主管 / 管理员三级可见,已提交日报支持评论与回复。
*/
/** 当前用户身份与可见范围 */
export function fetchDailyReportProfile() {
return request({ url: '/api/oa/dailyreport/profile' })
}
/**
* 我的日报列表
* @param {{page?:number,pageSize?:number,startDate?:string,endDate?:string}} params
* @returns {{list:Array,total:number,summary:Object}}
*/
export function fetchMyDailyReports(params = {}) {
return request({
url: '/api/oa/dailyreport/mine/list',
data: {
page: params.page || 1,
pageSize: params.pageSize || 20,
start_date: params.startDate || '',
end_date: params.endDate || ''
}
})
}
/**
* 我的日报近期热力图(默认含本月往前 3 个月)
* @param {{months?:number}} params
* @returns {{start_date:string,end_date:string,total:number,submitted:number,days:Array<{date:string,status:number,id:number}>}}
*/
export function fetchMyDailyReportCalendar(params = {}) {
return request({
url: '/api/oa/dailyreport/calendar',
data: { months: params.months || 3 }
})
}
/** 日报详情:{ report, comments, can_edit, can_delete, can_comment } */
export function fetchDailyReportDetail(id) {
return request({ url: `/api/oa/dailyreport/detail/${id}` })
}
/**
* 保存日报
* @param {{date:string,todayDone:string,tomorrowPlan:string,issues:string,attachments:Array,submit:boolean}} payload
*/
export function saveDailyReport(payload) {
return request({
url: '/api/oa/dailyreport/save',
method: 'POST',
data: {
date: payload.date,
today_done: payload.todayDone || '',
tomorrow_plan: payload.tomorrowPlan || '',
issues: payload.issues || '',
attachments: JSON.stringify(payload.attachments || []),
submit: Boolean(payload.submit)
}
})
}
export function deleteDailyReport(id) {
return request({ url: `/api/oa/dailyreport/delete/${id}`, method: 'DELETE' })
}
/** 撤销提交:已提交日报退回草稿,本次提交内容写入修改痕迹,需重新提交 */
export function withdrawDailyReport(id) {
return request({ url: `/api/oa/dailyreport/withdraw/${id}`, method: 'POST' })
}
/**
* 团队日报汇总
* @param {{date?:string,orgId?:number,keyword?:string,page?:number,pageSize?:number}} params
* @returns {{date:string,list:Array,total:number,stats:Object}}
*/
export function fetchTeamDailyReports(params = {}) {
return request({
url: '/api/oa/dailyreport/team/status',
data: {
date: params.date || '',
org_id: params.orgId || 0,
keyword: params.keyword || '',
page: params.page || 1,
pageSize: params.pageSize || 20
}
})
}
/** 团队筛选部门:{ list: [{id,parent_id,name,member_count}] } */
export function fetchTeamDailyReportOrgs() {
return request({ url: '/api/oa/dailyreport/team/orgs' })
}
/** 评论 / 回复:replyToId=0 表示直接评论 */
export function addDailyReportComment(reportId, content, replyToId = 0) {
return request({
url: '/api/oa/dailyreport/comment',
method: 'POST',
data: {
report_id: Number(reportId),
content,
reply_to_id: Number(replyToId) || 0
}
})
}
export function deleteDailyReportComment(id) {
return request({ url: `/api/oa/dailyreport/comment/${id}`, method: 'DELETE' })
}
/**
* 上传日报附件(multipart,字段名 file,单文件 ≤10MB)
* 返回 { id, url, name },与 Web 端上传结果结构一致。
*/
export function uploadDailyReportFile(filePath) {
return new Promise((resolve, reject) => {
uni.uploadFile({
url: `${getBaseURL().replace(/\/$/, '')}/api/oa/dailyreport/upload`,
filePath,
name: 'file',
header: { Authorization: `Bearer ${getToken()}` },
success(res) {
let body = {}
try {
body = JSON.parse(res.data || '{}')
} catch (e) {
// 非 JSON 响应按失败处理
}
if (res.statusCode >= 200 && res.statusCode < 300 && body.code === 200 && body.data) {
resolve(body.data)
} else {
const msg = body.msg || `上传失败(${res.statusCode})`
uni.showToast({ title: msg, icon: 'none' })
reject(new Error(msg))
}
},
fail(err) {
uni.showToast({ title: '网络异常,上传失败', icon: 'none' })
reject(err)
}
})
})
}
/** 今日 "YYYY-MM-DD"(与后端本地日期口径一致) */
export function todayString() {
const now = new Date()
const pad = (n) => String(n).padStart(2, '0')
return `${now.getFullYear()}-${pad(now.getMonth() + 1)}-${pad(now.getDate())}`
}