diff --git a/src/api/approval/directory/index.ts b/src/api/approval/directory/index.ts new file mode 100644 index 0000000..b7a2e8a --- /dev/null +++ b/src/api/approval/directory/index.ts @@ -0,0 +1,34 @@ +import request from '@/utils/request'; +import type { ApiResult } from '@/api'; +import type { ApprovalOrganization, ApprovalUser } from '../instance/model'; +import { THINK_API_URL } from '@/config/setting'; + +/** + * 启用组织(审批管理下拉) + */ +export async function listApprovalOrganizations() { + const res = await request.get>( + THINK_API_URL + '/approval/directory/organizations' + ); + if (res.data.code === 0 && res.data.data) { + return res.data.data; + } + return Promise.reject(new Error(res.data.message)); +} + +/** + * 启用用户远程搜索(审批管理下拉) + */ +export async function searchApprovalUsers(params?: { + keywords?: string; + organizationId?: number; +}) { + const res = await request.get>( + THINK_API_URL + '/approval/directory/users', + { params } + ); + if (res.data.code === 0 && res.data.data) { + return res.data.data; + } + return Promise.reject(new Error(res.data.message)); +} diff --git a/src/api/approval/instance/index.ts b/src/api/approval/instance/index.ts index 53cad4c..10d566b 100644 --- a/src/api/approval/instance/index.ts +++ b/src/api/approval/instance/index.ts @@ -1,36 +1,49 @@ import request from '@/utils/request'; import type { ApiResult, PageResult } from '@/api'; -import { THINK_API_URL } from '@/config/setting'; import type { ApprovalInstance, ApprovalItem, - ApprovalItemParam -} from '../model'; + ApprovalQueryParam, + ApprovalTodoParam +} from './model'; +import { THINK_API_URL } from '@/config/setting'; + +/** + * 单据查询分页 + */ +export async function pageInstances(params: ApprovalQueryParam) { + const res = await request.get>>( + THINK_API_URL + '/approval/instance/page', + { params } + ); + if (res.data.code === 0) { + return res.data.data; + } + return Promise.reject(new Error(res.data.message)); +} /** * 我的待办分页 */ -export async function pageApprovalTodo(params: ApprovalItemParam) { +export async function pageApprovalTodo(params: ApprovalTodoParam) { const res = await request.get>>( THINK_API_URL + '/approval/todo/page', - { - params - } + { params } ); - if (res.data.code === 0 && res.data.data) { + if (res.data.code === 0) { return res.data.data; } return Promise.reject(new Error(res.data.message)); } /** - * 审批单据详情 + * 单据详情(只读) */ -export async function getApprovalInstance(id: number) { +export async function getInstance(id: number) { const res = await request.get>( THINK_API_URL + '/approval/instance/' + id ); - if (res.data.code === 0 && res.data.data) { + if (res.data.code === 0) { return res.data.data; } return Promise.reject(new Error(res.data.message)); diff --git a/src/api/approval/model/index.ts b/src/api/approval/instance/model/index.ts similarity index 68% rename from src/api/approval/model/index.ts rename to src/api/approval/instance/model/index.ts index 06ee4c3..d67b989 100644 --- a/src/api/approval/model/index.ts +++ b/src/api/approval/instance/model/index.ts @@ -1,48 +1,56 @@ import type { PageParam } from '@/api'; /** - * 审批单据列表项 + * 单据查询条件 + */ +export interface ApprovalQueryParam extends PageParam { + // 单据类型 completion/coordination + docType?: string; + // 单号 + bizNo?: string; + // 关键词:单号、名称或标题、实施单位 + keyword?: string; + // 报送部门id + reportOrgId?: number; + // 受理部门id + acceptOrgId?: number; + // 发起人id + reporterId?: number; + // 单据状态 + status?: string; + // 提交时间起 + submitTimeStart?: string; + // 提交时间止 + submitTimeEnd?: string; + // 归档时间起 + archiveTimeStart?: string; + // 归档时间止 + archiveTimeEnd?: string; +} + +/** + * 单据列表行 */ export interface ApprovalItem { id?: number; - // 单号 bizNo?: string; - // 单据类型:completion / coordination docType?: string; - // 单据类型名称 docTypeName?: string; - // 状态 status?: string; - // 状态名称 statusName?: string; - // 标题或名称 + // 名称或标题 title?: string; - // 提交时间 submitTime?: string; - // 当前节点名称 currentNodeName?: string; - // 发起人 reporterId?: number; reporterName?: string; - // 报送部门 reportOrgName?: string; - // 受理部门 acceptOrgName?: string; - // 归档时间 archiveTime?: string; } /** - * 待办/已办查询条件 - */ -export interface ApprovalItemParam extends PageParam { - status?: string; - docType?: string; - keywords?: string; -} - -/** - * 审批附件 + * 附件 */ export interface ApprovalAttachment { id?: number; @@ -75,7 +83,7 @@ export interface ApprovalRecord { } /** - * 当前轮存档确认人 + * 当前轮存档确认 */ export interface ApprovalConfirm { userId?: number; @@ -86,7 +94,7 @@ export interface ApprovalConfirm { } /** - * 当前用户的待办任务 + * 我的待处理任务 */ export interface ApprovalMyTask { id?: number; @@ -96,22 +104,7 @@ export interface ApprovalMyTask { } /** - * 详情动作权限 - */ -export interface ApprovalPermissions { - canEdit?: boolean; - canSubmit?: boolean; - canWithdraw?: boolean; - canApprove?: boolean; - canReject?: boolean; - canConfirm?: boolean; - canArchive?: boolean; - canDispatch?: boolean; - canAssign?: boolean; -} - -/** - * 审批单据详情 + * 单据详情 */ export interface ApprovalInstance { id?: number; @@ -136,12 +129,12 @@ export interface ApprovalInstance { archiveTime?: string; archivistId?: number; archivistName?: string; - // 业务完成确认单字段 + // 业务完成确认单 name?: string; implementOrg?: string; fee?: number; serviceContent?: string; - // 内部协调单字段 + // 内部协调单 title?: string; content?: string; remark?: string; @@ -151,11 +144,23 @@ export interface ApprovalInstance { records?: ApprovalRecord[]; confirms?: ApprovalConfirm[]; myTask?: ApprovalMyTask | null; - permissions?: ApprovalPermissions; + permissions?: Record; } /** - * 改派候选用户 + * 审批目录组织 + */ +export interface ApprovalOrganization { + organizationId?: number; + parentId?: number; + organizationName?: string; + organizationFullName?: string; + organizationCode?: string; + leaderId?: number; +} + +/** + * 审批目录用户 */ export interface ApprovalUser { userId?: number; @@ -167,10 +172,24 @@ export interface ApprovalUser { } /** - * 改派参数 + * 待办/已办查询条件 + */ +export interface ApprovalTodoParam extends PageParam { + // 单据状态 + status?: string; + // 单据类型 + docType?: string; + // 关键词:单号、名称或标题、实施单位 + keywords?: string; +} + +/** + * 待办改派参数 */ export interface ApprovalAssignParam { + // 改派对象用户id targetUserId: number; + // 改派原因 reason: string; } diff --git a/src/api/approval/task/index.ts b/src/api/approval/task/index.ts index 2a6b4d3..1bb21a6 100644 --- a/src/api/approval/task/index.ts +++ b/src/api/approval/task/index.ts @@ -3,9 +3,8 @@ import type { ApiResult } from '@/api'; import { THINK_API_URL } from '@/config/setting'; import type { ApprovalAssignParam, - ApprovalAssignResult, - ApprovalUser -} from '../model'; + ApprovalAssignResult +} from '../instance/model'; /** * 通过任务 @@ -77,19 +76,3 @@ export async function assignApprovalTask( } return Promise.reject(new Error(res.data.message)); } - -/** - * 改派候选用户:同租户启用用户,最多 50 条 - */ -export async function searchApprovalUsers(keywords?: string) { - const res = await request.get>( - THINK_API_URL + '/approval/directory/users', - { - params: { keywords } - } - ); - if (res.data.code === 0 && res.data.data) { - return res.data.data; - } - return Promise.reject(new Error(res.data.message)); -} diff --git a/src/views/approval/instance/components/detail.vue b/src/views/approval/instance/components/detail.vue new file mode 100644 index 0000000..d8a3da3 --- /dev/null +++ b/src/views/approval/instance/components/detail.vue @@ -0,0 +1,280 @@ + + + + + + diff --git a/src/views/approval/instance/components/search.vue b/src/views/approval/instance/components/search.vue new file mode 100644 index 0000000..17b4fd2 --- /dev/null +++ b/src/views/approval/instance/components/search.vue @@ -0,0 +1,254 @@ + + + + diff --git a/src/views/approval/instance/index.vue b/src/views/approval/instance/index.vue new file mode 100644 index 0000000..b392c7d --- /dev/null +++ b/src/views/approval/instance/index.vue @@ -0,0 +1,188 @@ + + + + + + diff --git a/src/views/approval/todo/components/detail-drawer.vue b/src/views/approval/todo/components/detail-drawer.vue index b095ee7..09a882c 100644 --- a/src/views/approval/todo/components/detail-drawer.vue +++ b/src/views/approval/todo/components/detail-drawer.vue @@ -268,15 +268,15 @@ import type { ApprovalAttachment, ApprovalInstance - } from '@/api/approval/model'; - import { getApprovalInstance } from '@/api/approval/instance'; + } from '@/api/approval/instance/model'; + import { getInstance } from '@/api/approval/instance'; + import { searchApprovalUsers } from '@/api/approval/directory'; import { approveApprovalTask, archiveApprovalTask, assignApprovalTask, confirmApprovalTask, - rejectApprovalTask, - searchApprovalUsers + rejectApprovalTask } from '@/api/approval/task'; import { approvalStatusColor, @@ -317,7 +317,7 @@ } loading.value = true; try { - detail.value = await getApprovalInstance(props.instanceId); + detail.value = await getInstance(props.instanceId); } catch (e: any) { detail.value = null; message.error(e.message); @@ -456,7 +456,9 @@ const doSearchUsers = async (keywords?: string) => { userLoading.value = true; try { - const users = await searchApprovalUsers(keywords?.trim() || undefined); + const users = await searchApprovalUsers({ + keywords: keywords?.trim() || undefined + }); userOptions.value = users.map((user) => ({ value: user.userId as number, label: diff --git a/src/views/approval/todo/index.vue b/src/views/approval/todo/index.vue index 947be00..dd5eb33 100644 --- a/src/views/approval/todo/index.vue +++ b/src/views/approval/todo/index.vue @@ -68,7 +68,10 @@ ColumnItem } from 'ele-admin-pro/es/ele-pro-table/types'; import useSearch from '@/utils/use-search'; - import type { ApprovalItem, ApprovalItemParam } from '@/api/approval/model'; + import type { + ApprovalItem, + ApprovalTodoParam + } from '@/api/approval/instance/model'; import { pageApprovalTodo } from '@/api/approval/instance'; import { approvalStatusColor, formatApprovalTime } from './format'; import DetailDrawer from './components/detail-drawer.vue'; @@ -81,7 +84,7 @@ const currentId = ref(null); // 搜索条件 - const { where, resetFields } = useSearch({ + const { where, resetFields } = useSearch({ status: undefined, keywords: undefined });