做双端审批流

This commit is contained in:
hero920103 committed 2026-10-07 13:46:32 +08:00
1 parent 5b4dbb2b46
commit ffaadc26ae
69 files changed
+6662 -1071

No files matched your search

+14 -14
View File
@@ -1,12 +1,12 @@
/**
* 移动端认证接口 — 对接 Go /app/*
* 移动端认证接口 — 对接 Go /api/*
*/
import { request, requestRaw } from '@/api/request.js'
/** 账号密码登录(旧:租户端直登) */
export function login(data) {
return request({
url: '/app/login',
url: '/api/login',
method: 'POST',
data
})
@@ -157,7 +157,7 @@ export function revokeUAC(data = {}) {
/** 发送登录验证码(账号二次校验用,需后台开启验证) */
export function sendLoginCode(data) {
return request({
url: '/app/sendLoginCode',
url: '/api/sendLoginCode',
method: 'POST',
data
})
@@ -166,7 +166,7 @@ export function sendLoginCode(data) {
/** 手机号验证码登录 */
export function loginBySms(data) {
return request({
url: '/app/loginBySms',
url: '/api/loginBySms',
method: 'POST',
data
})
@@ -175,7 +175,7 @@ export function loginBySms(data) {
/** 退出登录(后端无状态,失败可忽略;短超时避免卡住) */
export function logoutApi(data = {}) {
return request({
url: '/app/logout',
url: '/api/logout',
method: 'POST',
data,
silent: true,
@@ -186,7 +186,7 @@ export function logoutApi(data = {}) {
/** 当前用户信息 */
export function getCurrentUser() {
return request({
url: '/app/currentUser',
url: '/api/currentUser',
method: 'GET'
})
}
@@ -194,7 +194,7 @@ export function getCurrentUser() {
/** 是否开启登录人机/验证码校验 */
export function getOpenVerify() {
return request({
url: '/app/login/getOpenVerify',
url: '/api/login/getOpenVerify',
method: 'GET',
silent: true,
timeout: 8000
@@ -204,7 +204,7 @@ export function getOpenVerify() {
/** 极验 3 配置 */
export function getGeetest3Infos() {
return request({
url: '/app/login/getGeetest3Infos',
url: '/api/login/getGeetest3Infos',
method: 'GET',
silent: true
})
@@ -213,7 +213,7 @@ export function getGeetest3Infos() {
/** 极验 4 配置 */
export function getGeetest4Infos() {
return request({
url: '/app/login/getGeetest4Infos',
url: '/api/login/getGeetest4Infos',
method: 'GET',
silent: true,
timeout: 8000
@@ -223,7 +223,7 @@ export function getGeetest4Infos() {
/** 注册 */
export function register(data) {
return request({
url: '/app/register',
url: '/api/register',
method: 'POST',
data
})
@@ -232,7 +232,7 @@ export function register(data) {
/** 发送注册验证码 */
export function sendRegisterCode(data) {
return request({
url: '/app/sendRegisterCode',
url: '/api/sendRegisterCode',
method: 'POST',
data
})
@@ -241,7 +241,7 @@ export function sendRegisterCode(data) {
/** 重置密码 */
export function resetPassword(data) {
return request({
url: '/app/resetPassword',
url: '/api/resetPassword',
method: 'POST',
data
})
@@ -250,7 +250,7 @@ export function resetPassword(data) {
/** 验证租户和账号(找回密码第一步) */
export function verifyAccount(data) {
return request({
url: '/app/verifyAccount',
url: '/api/verifyAccount',
method: 'POST',
data
})
@@ -259,7 +259,7 @@ export function verifyAccount(data) {
/** 发送找回密码验证码(找回密码第二步) */
export function sendResetCode(data) {
return request({
url: '/app/sendResetCode',
url: '/api/sendResetCode',
method: 'POST',
data
})
+4 -4
View File
@@ -1,6 +1,6 @@
/**
* 通讯录(移动端)接口封装。
* 对应后端 go/controllers/app_contact.go 的 /app/oa/contact/* 只读接口。
* 对应后端 go/controllers/app_contact.go 的 /api/oa/contact/* 只读接口。
*/
import { request } from '@/api/request.js'
@@ -48,7 +48,7 @@ export function primaryPhone(contact) {
/** 分页查询通讯录 */
export async function fetchContacts(params = {}) {
const data = await request({
url: '/app/oa/contact/list',
url: '/api/oa/contact/list',
data: {
page: params.page || 1,
pageSize: params.pageSize || 20,
@@ -62,10 +62,10 @@ export async function fetchContacts(params = {}) {
/** 组织架构树(含各部门内部联系人数量) */
export function fetchContactOrgTree() {
return request({ url: '/app/oa/contact/org-tree' })
return request({ url: '/api/oa/contact/org-tree' })
}
/** 联系人详情 */
export function getContact(id) {
return request({ url: `/app/oa/contact/${id}` })
return request({ url: `/api/oa/contact/${id}` })
}
+6 -6
View File
@@ -5,7 +5,7 @@ import { request } from '@/api/request.js'
*/
export async function fetchNotes(params = {}) {
const data = await request({
url: '/app/notebook/list',
url: '/api/notebook/list',
data: {
keyword: params.keyword || ''
}
@@ -23,7 +23,7 @@ export async function fetchNotes(params = {}) {
* 获取单条笔记
*/
export async function getNote(id) {
const data = await request({ url: `/app/notebook/${id}` })
const data = await request({ url: `/api/notebook/${id}` })
if (!data) return null
return {
...data,
@@ -38,7 +38,7 @@ export async function getNote(id) {
*/
export async function createNote(data) {
const res = await request({
url: '/app/notebook',
url: '/api/notebook',
method: 'POST',
data: {
title: data.title || '',
@@ -54,7 +54,7 @@ export async function createNote(data) {
*/
export async function updateNote(id, data) {
const res = await request({
url: `/app/notebook/${id}`,
url: `/api/notebook/${id}`,
method: 'PUT',
data: {
title: data.title || '',
@@ -69,7 +69,7 @@ export async function updateNote(id, data) {
* 删除笔记
*/
export async function deleteNote(id) {
await request({ url: `/app/notebook/${id}`, method: 'DELETE' })
await request({ url: `/api/notebook/${id}`, method: 'DELETE' })
return true
}
@@ -78,7 +78,7 @@ export async function deleteNote(id) {
*/
export async function toggleNotePin(id) {
const res = await request({
url: `/app/notebook/${id}/togglePin`,
url: `/api/notebook/${id}/togglePin`,
method: 'POST'
})
return res
+39 -12
View File
@@ -1,6 +1,6 @@
/**
* OA 协同办公(移动端)接口封装。
* 对应后端 go/controllers/app_oa.go 的 /app/oa/* 只读接口。
* 对应后端 go/controllers/app_oa.go 的 /api/oa/* 只读接口。
*/
import { request } from '@/api/request.js'
@@ -110,7 +110,7 @@ export function formatFileSize(size) {
export async function fetchNotices(params = {}) {
const data = await request({
url: '/app/oa/notice/list',
url: '/api/oa/notice/list',
data: {
page: params.page || 1,
pageSize: params.pageSize || 20,
@@ -121,18 +121,18 @@ export async function fetchNotices(params = {}) {
}
export function getNotice(id) {
return request({ url: `/app/oa/notice/${id}` })
return request({ url: `/api/oa/notice/${id}` })
}
// ---------------- 文档库 ----------------
export function fetchDocCategories(scope = 'shared') {
return request({ url: '/app/oa/document/categories', data: { scope } })
return request({ url: '/api/oa/document/categories', data: { scope } })
}
export async function fetchDocs(params = {}) {
const data = await request({
url: '/app/oa/document/list',
url: '/api/oa/document/list',
data: {
scope: params.scope || 'shared',
keyword: params.keyword || '',
@@ -148,22 +148,22 @@ export async function fetchDocs(params = {}) {
}
export function getDoc(id) {
return request({ url: `/app/oa/document/${id}` })
return request({ url: `/api/oa/document/${id}` })
}
export function downloadDoc(id) {
return request({ url: `/app/oa/document/download/${id}` })
return request({ url: `/api/oa/document/download/${id}` })
}
export function toggleDocStar(id) {
return request({ url: `/app/oa/document/${id}/star`, method: 'POST' })
return request({ url: `/api/oa/document/${id}/star`, method: 'POST' })
}
// ---------------- 薪酬工资单(仅本人) ----------------
export async function fetchPayrolls(params = {}) {
const data = await request({
url: '/app/oa/compensation/payrolls',
url: '/api/oa/compensation/payrolls',
data: {
payroll_month: params.payrollMonth || '',
page: params.page || 1,
@@ -174,11 +174,38 @@ export async function fetchPayrolls(params = {}) {
}
export function getPayroll(id) {
return request({ url: `/app/oa/compensation/payrolls/${id}` })
return request({ url: `/api/oa/compensation/payrolls/${id}` })
}
// ---------------- 员工档案(仅本人) ----------------
// ---------------- 员工档案 ----------------
/** 当前用户是否具备 HR 视角(可见全公司档案)。角色里勾了「员工档案」菜单即为 HR。 */
export async function getEmployeeFileAccess() {
const data = await request({ url: '/api/oa/employee-file/access' })
return !!(data && data.can_view_all)
}
/** 全公司档案分页列表(HR),支持 keyword / status / org_id */
export async function fetchEmployeeFiles(params = {}) {
const data = await request({
url: '/api/oa/employee-file/list',
data: {
keyword: params.keyword || '',
status: params.status || 0,
org_id: params.orgId || 0,
page: params.page || 1,
pageSize: params.pageSize || 20
}
})
return { list: (data && data.list) || [], total: (data && data.total) || 0 }
}
/** 指定员工档案详情(含教育/工作/合同/证照子记录) */
export function getEmployeeFileDetail(id) {
return request({ url: `/api/oa/employee-file/detail/${id}` })
}
/** 本人档案(无 HR 权限时的兜底视图) */
export function getMyEmployeeFile() {
return request({ url: '/app/oa/employee-file' })
return request({ url: '/api/oa/employee-file' })
}
+6 -6
View File
@@ -61,7 +61,7 @@ export function normalizeSchedule(item) {
*/
export async function fetchSchedules(params = {}) {
const data = await request({
url: '/app/schedule/list',
url: '/api/schedule/list',
data: {
page: params.page || 1,
pageSize: params.pageSize || 50,
@@ -77,7 +77,7 @@ export async function fetchSchedules(params = {}) {
* 获取单条日程
*/
export async function getSchedule(id) {
const data = await request({ url: `/app/schedule/${id}` })
const data = await request({ url: `/api/schedule/${id}` })
return data ? normalizeSchedule(data) : null
}
@@ -90,7 +90,7 @@ export async function createSchedule(data) {
return ch.toUpperCase()
})
const res = await request({
url: '/app/schedule',
url: '/api/schedule',
method: 'POST',
data: {
content: data.content,
@@ -113,7 +113,7 @@ export async function updateSchedule(id, data) {
return ch.toUpperCase()
})
await request({
url: `/app/schedule/${id}`,
url: `/api/schedule/${id}`,
method: 'PUT',
data: {
content: data.content,
@@ -130,7 +130,7 @@ export async function updateSchedule(id, data) {
* 删除日程
*/
export async function deleteSchedule(id) {
await request({ url: `/app/schedule/${id}`, method: 'DELETE' })
await request({ url: `/api/schedule/${id}`, method: 'DELETE' })
return true
}
@@ -139,7 +139,7 @@ export async function deleteSchedule(id) {
*/
export async function toggleScheduleComplete(id) {
const res = await request({
url: `/app/schedule/${id}/toggle`,
url: `/api/schedule/${id}/toggle`,
method: 'POST'
})
return {
+2 -2
View File
@@ -1,7 +1,7 @@
/**
* 移动端「工作台」接口
*
* /app/home 一次返回首屏所需的全部数据(应用模块卡片 + 可见菜单 + KPI),
* /api/home 一次返回首屏所需的全部数据(应用模块卡片 + 可见菜单 + KPI),
* 避免移动端首屏多次往返。
*/
import { request } from '@/api/request.js'
@@ -18,7 +18,7 @@ let cacheAt = 0
export async function fetchHome(force = false) {
if (!force && cache && Date.now() - cacheAt < CACHE_TTL) return cache
const data = await request({
url: '/app/home',
url: '/api/home',
method: 'GET',
silent: true,
timeout: 15000