Files
yunzerwebsiteallinone/uniapp/api/oa.js
T

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' })
}