184 lines
5.3 KiB
JavaScript
184 lines
5.3 KiB
JavaScript
/**
|
|
* OA 协同办公(移动端)接口封装。
|
|
* 对应后端 go/controllers/app_oa.go 的 /app/oa/* 只读接口。
|
|
*/
|
|
import { request } from '@/api/request.js'
|
|
|
|
/** 公告类型:0-通知 1-公告 2-活动 */
|
|
export const NOTICE_TYPE_OPTIONS = [
|
|
{ value: 0, label: '通知' },
|
|
{ value: 1, label: '公告' },
|
|
{ value: 2, label: '活动' }
|
|
]
|
|
|
|
/** 公告级别:0-普通 1-重要 2-紧急 */
|
|
export const NOTICE_LEVEL_OPTIONS = [
|
|
{ value: 0, label: '普通' },
|
|
{ value: 1, label: '重要' },
|
|
{ value: 2, label: '紧急' }
|
|
]
|
|
|
|
/** 文档类型:与 models.DocType* 常量一致 */
|
|
export const DOC_TYPE_OPTIONS = [
|
|
{ value: 0, label: '其他', icon: 'file' },
|
|
{ value: 1, label: '文档', icon: 'file-lines' },
|
|
{ value: 2, label: '表格', icon: 'file-excel' },
|
|
{ value: 3, label: '演示', icon: 'file-powerpoint' },
|
|
{ value: 4, label: 'PDF', icon: 'file-pdf' },
|
|
{ value: 5, label: '图片', icon: 'file-image' },
|
|
{ value: 6, label: '压缩包', icon: 'file-zipper' },
|
|
{ value: 7, label: '视频', icon: 'file-video' },
|
|
{ value: 8, label: '音频', icon: 'file-audio' }
|
|
]
|
|
|
|
/** 薪资单状态:0-草稿 1-已确认 2-已发放 3-已归档 */
|
|
export const PAYROLL_STATUS_OPTIONS = [
|
|
{ value: 0, label: '草稿' },
|
|
{ value: 1, label: '已确认' },
|
|
{ value: 2, label: '已发放' },
|
|
{ value: 3, label: '已归档' }
|
|
]
|
|
|
|
/** 在职状态:1-试用 2-正式 3-离职 */
|
|
export const EMPLOYMENT_STATUS_OPTIONS = [
|
|
{ value: 1, label: '试用' },
|
|
{ value: 2, label: '正式' },
|
|
{ value: 3, label: '离职' }
|
|
]
|
|
|
|
/** 婚姻状况:0-未填 1-未婚 2-已婚 3-离异 4-丧偶 */
|
|
export const MARITAL_STATUS_OPTIONS = [
|
|
{ value: 0, label: '未填' },
|
|
{ value: 1, label: '未婚' },
|
|
{ value: 2, label: '已婚' },
|
|
{ value: 3, label: '离异' },
|
|
{ value: 4, label: '丧偶' }
|
|
]
|
|
|
|
/** 档案子记录类型:1-教育经历 2-工作经历 3-合同信息 4-证照附件 */
|
|
export const FILE_RECORD_TYPE_OPTIONS = [
|
|
{ value: 1, label: '教育经历' },
|
|
{ value: 2, label: '工作经历' },
|
|
{ value: 3, label: '合同信息' },
|
|
{ value: 4, label: '证照附件' }
|
|
]
|
|
|
|
function labelOf(options, value, fallback = '') {
|
|
const hit = options.find(item => item.value === Number(value))
|
|
return hit ? hit.label : fallback
|
|
}
|
|
|
|
export function getNoticeTypeLabel(value) {
|
|
return labelOf(NOTICE_TYPE_OPTIONS, value, '通知')
|
|
}
|
|
|
|
export function getNoticeLevelLabel(value) {
|
|
return labelOf(NOTICE_LEVEL_OPTIONS, value, '普通')
|
|
}
|
|
|
|
export function getPayrollStatusLabel(value) {
|
|
return labelOf(PAYROLL_STATUS_OPTIONS, value, '草稿')
|
|
}
|
|
|
|
export function getEmploymentStatusLabel(value) {
|
|
return labelOf(EMPLOYMENT_STATUS_OPTIONS, value, '在职')
|
|
}
|
|
|
|
export function getMaritalStatusLabel(value) {
|
|
return labelOf(MARITAL_STATUS_OPTIONS, value, '未填')
|
|
}
|
|
|
|
export function getFileRecordTypeLabel(value) {
|
|
return labelOf(FILE_RECORD_TYPE_OPTIONS, value, '记录')
|
|
}
|
|
|
|
export function getDocTypeMeta(value) {
|
|
return DOC_TYPE_OPTIONS.find(item => item.value === Number(value)) || DOC_TYPE_OPTIONS[0]
|
|
}
|
|
|
|
/** 文件大小人性化展示 */
|
|
export function formatFileSize(size) {
|
|
const bytes = Number(size) || 0
|
|
if (bytes <= 0) return ''
|
|
if (bytes < 1024) return bytes + ' B'
|
|
if (bytes < 1024 * 1024) return (bytes / 1024).toFixed(1) + ' KB'
|
|
if (bytes < 1024 * 1024 * 1024) return (bytes / 1024 / 1024).toFixed(1) + ' MB'
|
|
return (bytes / 1024 / 1024 / 1024).toFixed(2) + ' GB'
|
|
}
|
|
|
|
// ---------------- 通知公告 ----------------
|
|
|
|
export async function fetchNotices(params = {}) {
|
|
const data = await request({
|
|
url: '/app/oa/notice/list',
|
|
data: {
|
|
page: params.page || 1,
|
|
pageSize: params.pageSize || 20,
|
|
keyword: params.keyword || ''
|
|
}
|
|
})
|
|
return { list: (data && data.list) || [], total: (data && data.total) || 0 }
|
|
}
|
|
|
|
export function getNotice(id) {
|
|
return request({ url: `/app/oa/notice/${id}` })
|
|
}
|
|
|
|
// ---------------- 文档库 ----------------
|
|
|
|
export function fetchDocCategories(scope = 'shared') {
|
|
return request({ url: '/app/oa/document/categories', data: { scope } })
|
|
}
|
|
|
|
export async function fetchDocs(params = {}) {
|
|
const data = await request({
|
|
url: '/app/oa/document/list',
|
|
data: {
|
|
scope: params.scope || 'shared',
|
|
keyword: params.keyword || '',
|
|
category_id: params.categoryId || 0,
|
|
uncategorized: params.uncategorized ? 1 : 0,
|
|
mine: params.mine ? 1 : 0,
|
|
star: params.star ? 1 : -1,
|
|
page: params.page || 1,
|
|
pageSize: params.pageSize || 20
|
|
}
|
|
})
|
|
return { list: (data && data.list) || [], total: (data && data.total) || 0 }
|
|
}
|
|
|
|
export function getDoc(id) {
|
|
return request({ url: `/app/oa/document/${id}` })
|
|
}
|
|
|
|
export function downloadDoc(id) {
|
|
return request({ url: `/app/oa/document/download/${id}` })
|
|
}
|
|
|
|
export function toggleDocStar(id) {
|
|
return request({ url: `/app/oa/document/${id}/star`, method: 'POST' })
|
|
}
|
|
|
|
// ---------------- 薪酬工资单(仅本人) ----------------
|
|
|
|
export async function fetchPayrolls(params = {}) {
|
|
const data = await request({
|
|
url: '/app/oa/compensation/payrolls',
|
|
data: {
|
|
payroll_month: params.payrollMonth || '',
|
|
page: params.page || 1,
|
|
pageSize: params.pageSize || 20
|
|
}
|
|
})
|
|
return { list: (data && data.list) || [], total: (data && data.total) || 0 }
|
|
}
|
|
|
|
export function getPayroll(id) {
|
|
return request({ url: `/app/oa/compensation/payrolls/${id}` })
|
|
}
|
|
|
|
// ---------------- 员工档案(仅本人) ----------------
|
|
|
|
export function getMyEmployeeFile() {
|
|
return request({ url: '/app/oa/employee-file' })
|
|
} |