Files
yunzerwebsiteallinone/uniapp/api/oaAttendance.js
T

69 lines
2.0 KiB
JavaScript

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