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())}` }