import { request } from '@/api/request.js' /** * OA 考勤打卡接口封装,对应后端 /api/oa/attendance/*。 * * 打卡联动工作排班:今日排班由后端匹配,匹配不上时 today.warning 非空, * 但 can_clock_in / can_clock_out 仍为 true(提醒后仍可签到)。 */ /** 今日打卡状态:{date, employee, entry, record, matched, warning, can_clock_in, can_clock_out, recent, stats} */ export function fetchAttendanceToday(days = 7) { return request({ url: '/api/oa/attendance/today', data: { days } }) } /** * 签到 / 签退 * @param {'in'|'out'} type * @param {{location?:string,remark?:string}} extra * @returns {Promise<{record:object,warning:string,duplicated:boolean,message:string}>} */ export function clockAttendance(type, extra = {}) { return request({ url: '/api/oa/attendance/clock', method: 'POST', data: { type, location: extra.location || '', remark: extra.remark || '' } }) } /** * 我的考勤记录(默认本月) * @param {{page?:number,pageSize?:number,startDate?:string,endDate?:string}} params * @returns {Promise<{list:Array,total:number,stats:object}>} */ export function fetchMyAttendanceRecords(params = {}) { return request({ url: '/api/oa/attendance/records', data: { page: params.page || 1, pageSize: params.pageSize || 20, start_date: params.startDate || '', end_date: params.endDate || '' } }) } /** * 个人考勤卡:按 月 / 季 / 年 聚合 * @param {'month'|'quarter'|'year'} period * @param {string} date 锚点日期 "YYYY-MM-DD",默认今天 * @returns {Promise<{period:string,label:string,start_date:string,end_date:string,stats:object}>} */ export function fetchAttendanceStats(period = 'month', date = '') { return request({ url: '/api/oa/attendance/stats', data: { period, date } }) } /** 今日 "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())}` }