Files
zkxw/mobile-h5/utils/oa-api.js
T
zlwu 0e64b413ce feat(oa): add permission-controlled shared finance remarks to done center
Share one finance remark per approval instance across Web and mobile. Require the explicit permission and the current tenant user's own done task for every read and write; keep general instance responses free of financial remarks.

Add idempotent MySQL migration without automatic role grants, cross-end editors, isolated backend and frontend tests, and rollout requirements. Refs #7; platform validation and target database migration remain pending.
2026-10-30 20:42:05 +08:00

177 lines
4.4 KiB
JavaScript

import { get, post, request } from './request.js'
import { getToken } from './auth.js'
function authHeader() {
const token = getToken()
return token ? { Authorization: 'Bearer ' + token } : {}
}
/** 小程序侧无 URLSearchParams 时用手写 query */
function buildQuery(params) {
const parts = []
Object.keys(params || {}).forEach((k) => {
const v = params[k]
if (v == null || v === '') return
parts.push(encodeURIComponent(k) + '=' + encodeURIComponent(String(v)))
})
return parts.join('&')
}
function withQuery(path, params) {
const qs = buildQuery(params)
return qs ? path + '?' + qs : path
}
export function fetchOaGroupList() {
return get('/web/admin/oa-approval/groups', authHeader())
}
export function fetchOaTemplates() {
return get('/web/admin/oa-approval/templates', authHeader())
}
export function fetchOaTemplateDetail(appId) {
return get(
'/web/admin/oa-approval/templates/' + encodeURIComponent(appId),
authHeader()
)
}
// —— drafts ——
export function fetchOaInstanceDraftList(params) {
const p = params || {}
return get(
withQuery('/web/admin/oa-approval/drafts', {
keyword: p.keyword,
groupId: p.groupId,
updateTimeFrom: p.updateTimeFrom,
updateTimeTo: p.updateTimeTo,
page: p.page != null ? p.page : 1,
pageSize: p.pageSize != null ? p.pageSize : 20
}),
authHeader()
)
}
export function fetchOaInstanceDraftCount() {
return get('/web/admin/oa-approval/drafts/count', authHeader())
}
export function fetchDeleteOaInstanceDraft(id) {
return request({
url: '/web/admin/oa-approval/drafts/' + encodeURIComponent(id),
method: 'DELETE',
header: authHeader()
})
}
export function fetchBatchDeleteOaInstanceDrafts(ids) {
return post(
'/web/admin/oa-approval/drafts/batch-delete',
{ ids: ids || [] },
authHeader()
)
}
export function fetchSubmitOaInstanceDraft(id, data) {
return post(
'/web/admin/oa-approval/drafts/' + encodeURIComponent(id) + '/submit',
data || {},
authHeader()
)
}
// —— tasks ——
export function fetchOaTasks(kind, params) {
const p = params || {}
const keyword = (p.keyword || '').trim()
const appName = (p.appName || '').trim()
const initiatorName = (p.initiatorName || '').trim()
const query = {
page: p.page != null ? p.page : 1,
pageSize: p.pageSize != null ? p.pageSize : 20
}
if (kind === 'cc') {
query.readStatus = p.readStatus != null && p.readStatus !== '' ? p.readStatus : 'unread'
}
if (keyword) query.keyword = keyword
if (appName) query.appName = appName
if (initiatorName) query.initiatorName = initiatorName
return get(
withQuery('/web/admin/oa-approval/tasks/' + encodeURIComponent(kind), query),
authHeader()
)
}
export function fetchOaPendingTaskCount() {
return get('/web/admin/oa-approval/tasks/pending/count', authHeader())
}
export function fetchOaCcUnreadCount() {
return get('/web/admin/oa-approval/tasks/cc/unread-count', authHeader())
}
export function fetchOaMentionUnreadCount() {
return get('/web/admin/oa-approval/mentions/unread-count', authHeader())
}
export function fetchMarkOaMentionRead(instanceId) {
return post(
'/web/admin/oa-approval/mentions/' +
encodeURIComponent(instanceId) +
'/read',
{},
authHeader()
)
}
export function fetchMarkOaCcTaskRead(taskId) {
return post(
'/web/admin/oa-approval/tasks/' + encodeURIComponent(taskId) + '/read',
{},
authHeader()
)
}
export function fetchBatchMarkOaCcTasksRead(ids) {
return post(
'/web/admin/oa-approval/tasks/cc/read-batch',
{ ids: ids || [] },
authHeader()
)
}
export function fetchApproveOaTask(taskId, comment) {
return post(
'/web/admin/oa-approval/tasks/' + encodeURIComponent(taskId) + '/approve',
{ comment: comment || undefined },
authHeader()
)
}
export function fetchReturnOaTask(taskId, comment) {
return post(
'/web/admin/oa-approval/tasks/' + encodeURIComponent(taskId) + '/return',
{ comment: comment || undefined },
authHeader()
)
}
export function fetchOaFinanceRemark(instanceId) {
return get(
'/web/admin/oa-approval/instances/' + encodeURIComponent(instanceId) + '/finance-remark',
authHeader()
)
}
export function fetchUpdateOaFinanceRemark(instanceId, financeRemark) {
return request({
url: '/web/admin/oa-approval/instances/' + encodeURIComponent(instanceId) + '/finance-remark',
method: 'PUT',
data: { financeRemark },
header: authHeader()
})
}