158 lines
4.6 KiB
JavaScript
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())}`
|
|
}
|