diff --git a/apps/web-antd/src/api/workflow/instance/index.ts b/apps/web-antd/src/api/workflow/instance/index.ts new file mode 100644 index 00000000..caf8abc8 --- /dev/null +++ b/apps/web-antd/src/api/workflow/instance/index.ts @@ -0,0 +1,14 @@ +import type { FlowInfoResponse } from './model'; + +import { requestClient } from '#/api/request'; + +/** + * 获取流程图,流程记录 + * @param businessId 业务标识 + * @returns 流程图,流程记录 + */ +export function flowInfo(businessId: string) { + return requestClient.get( + `/workflow/instance/flowImage/${businessId}`, + ); +} diff --git a/apps/web-antd/src/api/workflow/instance/model.d.ts b/apps/web-antd/src/api/workflow/instance/model.d.ts new file mode 100644 index 00000000..68134e1f --- /dev/null +++ b/apps/web-antd/src/api/workflow/instance/model.d.ts @@ -0,0 +1,41 @@ +export interface Flow { + id: string; + createTime: string; + updateTime: string; + tenantId: string; + delFlag: string; + definitionId: string; + flowName?: any; + instanceId: string; + taskId: string; + cooperateType: number; + cooperateTypeName: string; + businessId?: any; + nodeCode: string; + nodeName: string; + nodeType: number; + targetNodeCode: string; + targetNodeName: string; + approver: string; + approveName: string; + collaborator?: any; + permissionList?: any; + skipType: string; + flowStatus: string; + flowTaskStatus?: any; + flowStatusName?: any; + message: string; + ext?: any; + createBy?: any; + formCustom: string; + formPath: string; + flowCode?: any; + version?: any; + runDuration: string; + nickName?: any; +} + +export interface FlowInfoResponse { + image: string; + list: Flow[]; +} diff --git a/apps/web-antd/src/api/workflow/task/index.ts b/apps/web-antd/src/api/workflow/task/index.ts new file mode 100644 index 00000000..a48df0a1 --- /dev/null +++ b/apps/web-antd/src/api/workflow/task/index.ts @@ -0,0 +1,85 @@ +import type { TaskInfo } from './model'; + +import type { PageQuery, PageResult } from '#/api/common'; + +import { requestClient } from '#/api/request'; + +/** + * 启动任务 + * @param data + */ +export function startWorkFlow(data: any) { + return requestClient.postWithMsg('/workflow/task/startWorkFlow', data); +} + +/** + * 办理任务 + * @param data + */ +export function completeTask(data: any) { + return requestClient.postWithMsg('/workflow/task/completeTask', data); +} + +/** + * 查询当前用户的待办任务 + * @param params + */ +export function pageByTaskWait(params?: PageQuery) { + return requestClient.get>( + '/workflow/task/pageByTaskWait', + { params }, + ); +} + +/** + * 查询当前用户的已办任务 + * @param params + */ +export function pageByTaskFinish(params?: PageQuery) { + return requestClient.get>( + '/workflow/task/pageByTaskFinish', + { params }, + ); +} + +/** + * 查询所有待办任务 + * @param params + */ +export function pageByAllTaskWait(params?: PageQuery) { + return requestClient.get>( + '/workflow/task/pageByAllTaskWait', + { params }, + ); +} + +/** + * 查询已办任务 + * @param params + */ +export function pageByAllTaskFinish(params?: PageQuery) { + return requestClient.get>( + '/workflow/task/pageByAllTaskFinish', + { params }, + ); +} + +/** + * 查询当前用户的抄送 + * @param params + */ +export function pageByTaskCopy(params?: PageQuery) { + return requestClient.get>( + '/workflow/task/pageByTaskCopy', + { params }, + ); +} + +/** + * 根据taskId查询代表任务 + * @param taskId 任务id + * @returns info + */ +export function getTaskByTaskId(taskId: string) { + return requestClient.get(`/workflow/task/${taskId}`); +} diff --git a/apps/web-antd/src/api/workflow/task/model.d.ts b/apps/web-antd/src/api/workflow/task/model.d.ts new file mode 100644 index 00000000..4ee7a458 --- /dev/null +++ b/apps/web-antd/src/api/workflow/task/model.d.ts @@ -0,0 +1,27 @@ +export interface TaskInfo { + id: string; + createTime: string; + updateTime: string; + tenantId: string; + delFlag?: any; + definitionId: string; + instanceId: string; + flowName: string; + businessId: string; + nodeCode: string; + nodeName: string; + nodeType: number; + permissionList?: any; + userList?: any; + formCustom: string; + formPath: string; + flowCode: string; + version: string; + flowStatus: string; + flowStatusName: string; + transactorNames: string; + processedBy: string; + type: string; + nodeRatio?: any; + nickName: string; +} diff --git a/apps/web-antd/src/router/routes/local.ts b/apps/web-antd/src/router/routes/local.ts index 1fa950d4..2997efdf 100644 --- a/apps/web-antd/src/router/routes/local.ts +++ b/apps/web-antd/src/router/routes/local.ts @@ -129,6 +129,39 @@ const profileRoute: RouteRecordStringComponent[] = [ }, ], }, + { + component: 'BasicLayout', + meta: { + hideChildrenInMenu: true, + hideInMenu: true, + title: '请假申请', + }, + name: 'WorkflowLeave', + path: '/', + redirect: '/workflow/leave', + children: [ + { + component: 'workflow/leave/leave-form', + meta: { + icon: 'eos-icons:role-binding-outlined', + keepAlive: true, + title: '请假申请', + }, + name: 'WorkflowLeaveIndex', + path: '/workflow/leave', + }, + ], + }, + { + component: 'workflow/leave/leave-form', + meta: { + icon: 'eos-icons:role-binding-outlined', + keepAlive: true, + title: '请假申请', + }, + name: 'WorkflowLeaveInner', + path: '/workflow/leave-inner', + }, ]; /** diff --git a/apps/web-antd/src/views/workflow/components/approval-card.vue b/apps/web-antd/src/views/workflow/components/approval-card.vue index 1587f316..a8f5937b 100644 --- a/apps/web-antd/src/views/workflow/components/approval-card.vue +++ b/apps/web-antd/src/views/workflow/components/approval-card.vue @@ -1,13 +1,14 @@ @@ -24,10 +18,7 @@ const props = defineProps<{ -
-
发起人
-
疯狂的牛子Li
-
2022-01-01 12:00:00
-
- 这里是备注信息 +
+
{{ item.nodeName }}
+
{{ item.approveName }}
+
{{ item.updateTime }}
+
+ {{ item.message }}
diff --git a/apps/web-antd/src/views/workflow/components/rejection.png b/apps/web-antd/src/views/workflow/components/rejection.png deleted file mode 100644 index 7ed92204..00000000 Binary files a/apps/web-antd/src/views/workflow/components/rejection.png and /dev/null differ diff --git a/apps/web-antd/src/views/workflow/leave/api/index.ts b/apps/web-antd/src/views/workflow/leave/api/index.ts new file mode 100644 index 00000000..363c5238 --- /dev/null +++ b/apps/web-antd/src/views/workflow/leave/api/index.ts @@ -0,0 +1,62 @@ +import type { LeaveForm, LeaveQuery, LeaveVO } from './model'; + +import type { ID, IDS, PageResult } from '#/api/common'; + +import { commonExport } from '#/api/helper'; +import { requestClient } from '#/api/request'; + +/** + * 查询请假申请列表 + * @param params + * @returns 请假申请列表 + */ +export function leaveList(params?: LeaveQuery) { + return requestClient.get>('/workflow/leave/list', { + params, + }); +} + +/** + * 导出请假申请列表 + * @param params + * @returns 请假申请列表 + */ +export function leaveExport(params?: LeaveQuery) { + return commonExport('/workflow/leave/export', params ?? {}); +} + +/** + * 查询请假申请详情 + * @param id id + * @returns 请假申请详情 + */ +export function leaveInfo(id: ID) { + return requestClient.get(`/workflow/leave/${id}`); +} + +/** + * 新增请假申请 + * @param data + * @returns void + */ +export function leaveAdd(data: LeaveForm) { + return requestClient.postWithMsg('/workflow/leave', data); +} + +/** + * 更新请假申请 + * @param data + * @returns void + */ +export function leaveUpdate(data: LeaveForm) { + return requestClient.putWithMsg('/workflow/leave', data); +} + +/** + * 删除请假申请 + * @param id id + * @returns void + */ +export function leaveRemove(id: ID | IDS) { + return requestClient.deleteWithMsg(`/workflow/leave/${id}`); +} diff --git a/apps/web-antd/src/views/workflow/leave/api/model.d.ts b/apps/web-antd/src/views/workflow/leave/api/model.d.ts new file mode 100644 index 00000000..c1b0dbf7 --- /dev/null +++ b/apps/web-antd/src/views/workflow/leave/api/model.d.ts @@ -0,0 +1,107 @@ +import type { BaseEntity, PageQuery } from '#/api/common'; + +export interface LeaveVO { + /** + * 主键 + */ + id: number | string; + + /** + * 请假类型 + */ + leaveType: string; + + /** + * 开始时间 + */ + startDate: string; + + /** + * 结束时间 + */ + endDate: string; + + /** + * 请假天数 + */ + leaveDays: number; + + /** + * 请假原因 + */ + remark: string; + + /** + * + */ + status: string; +} + +export interface LeaveForm extends BaseEntity { + /** + * 主键 + */ + id?: number | string; + + /** + * 请假类型 + */ + leaveType?: string; + + /** + * 开始时间 + */ + startDate?: string; + + /** + * 结束时间 + */ + endDate?: string; + + /** + * 请假天数 + */ + leaveDays?: number; + + /** + * 请假原因 + */ + remark?: string; + + /** + * + */ + status?: string; +} + +export interface LeaveQuery extends PageQuery { + /** + * 请假类型 + */ + leaveType?: string; + + /** + * 开始时间 + */ + startDate?: string; + + /** + * 结束时间 + */ + endDate?: string; + + /** + * 请假天数 + */ + leaveDays?: number; + + /** + * + */ + status?: string; + + /** + * 日期范围参数 + */ + params?: any; +} diff --git a/apps/web-antd/src/views/workflow/leave/data.tsx b/apps/web-antd/src/views/workflow/leave/data.tsx new file mode 100644 index 00000000..0dd220df --- /dev/null +++ b/apps/web-antd/src/views/workflow/leave/data.tsx @@ -0,0 +1,135 @@ +import type { FormSchemaGetter } from '#/adapter/form'; +import type { VxeGridProps } from '#/adapter/vxe-table'; + +import { DictEnum } from '@vben/constants'; +import { getPopupContainer } from '@vben/utils'; + +import dayjs from 'dayjs'; + +import { OptionsTag } from '#/components/table'; +import { renderDict } from '#/utils/render'; + +const leaveTypeOptions = [ + { label: '病假', value: '1' }, + { label: '事假', value: '2' }, + { label: '年假', value: '3' }, + { label: '婚假', value: '4' }, + { label: '产假', value: '5' }, + { label: '其他', value: '7' }, +]; + +export const querySchema: FormSchemaGetter = () => [ + { + component: 'InputNumber', + componentProps: { + min: 1, + }, + fieldName: 'startLeaveDays', + label: '请假天数', + }, + { + component: 'InputNumber', + componentProps: { + min: 1, + }, + fieldName: 'endLeaveDays', + label: '至', + labelClass: 'justify-center', + }, +]; + +export const columns: VxeGridProps['columns'] = [ + { type: 'checkbox', width: 60 }, + { + title: '请假类型', + field: 'leaveType', + slots: { + default: ({ row }) => { + return ; + }, + }, + }, + { + title: '开始时间', + field: 'startDate', + formatter: ({ cellValue }) => dayjs(cellValue).format('YYYY-MM-DD'), + }, + { + title: '结束时间', + field: 'endDate', + formatter: ({ cellValue }) => dayjs(cellValue).format('YYYY-MM-DD'), + }, + { + title: '请假天数', + field: 'leaveDays', + formatter: ({ cellValue }) => `${cellValue}天`, + }, + { + title: '请假原因', + field: 'remark', + }, + { + title: '流程状态', + field: 'status', + slots: { + default: ({ row }) => { + return renderDict(row.status, DictEnum.WF_BUSINESS_STATUS); + }, + }, + }, + { + field: 'action', + fixed: 'right', + slots: { default: 'action' }, + title: '操作', + width: 180, + }, +]; + +export const modalSchema: FormSchemaGetter = () => [ + { + label: '主键', + fieldName: 'id', + component: 'Input', + dependencies: { + show: () => false, + triggerFields: [''], + }, + }, + { + label: '请假类型', + fieldName: 'leaveType', + component: 'Select', + componentProps: { + options: leaveTypeOptions, + getPopupContainer, + }, + rules: 'selectRequired', + }, + { + label: '开始时间', + fieldName: 'dateRange', + component: 'RangePicker', + componentProps: { + showTime: true, + format: 'YYYY-MM-DD', + valueFormat: 'YYYY-MM-DD HH:mm:ss', + }, + rules: 'required', + }, + { + label: '请假天数', + fieldName: 'leaveDays', + component: 'Input', + componentProps: { + disabled: true, + }, + rules: 'required', + }, + { + label: '请假原因', + fieldName: 'remark', + component: 'Textarea', + formItemClass: 'items-baseline', + }, +]; diff --git a/apps/web-antd/src/views/workflow/leave/index.vue b/apps/web-antd/src/views/workflow/leave/index.vue index 06372a15..67990263 100644 --- a/apps/web-antd/src/views/workflow/leave/index.vue +++ b/apps/web-antd/src/views/workflow/leave/index.vue @@ -1,9 +1,170 @@ diff --git a/apps/web-antd/src/views/workflow/leave/leave-form.vue b/apps/web-antd/src/views/workflow/leave/leave-form.vue new file mode 100644 index 00000000..d68b6c1a --- /dev/null +++ b/apps/web-antd/src/views/workflow/leave/leave-form.vue @@ -0,0 +1,56 @@ + + + diff --git a/apps/web-antd/src/views/workflow/leave/leave-modal.vue b/apps/web-antd/src/views/workflow/leave/leave-modal.vue new file mode 100644 index 00000000..98928a6f --- /dev/null +++ b/apps/web-antd/src/views/workflow/leave/leave-modal.vue @@ -0,0 +1,87 @@ + + + diff --git a/apps/web-antd/src/views/workflow/task/taskWaiting.vue b/apps/web-antd/src/views/workflow/task/taskWaiting.vue index e8d75ad0..11c370eb 100644 --- a/apps/web-antd/src/views/workflow/task/taskWaiting.vue +++ b/apps/web-antd/src/views/workflow/task/taskWaiting.vue @@ -1,25 +1,52 @@ diff --git a/packages/effects/common-ui/src/index.ts b/packages/effects/common-ui/src/index.ts index 27bd7186..ac4f4e4b 100644 --- a/packages/effects/common-ui/src/index.ts +++ b/packages/effects/common-ui/src/index.ts @@ -1,2 +1,3 @@ export * from './components'; export * from './ui'; +export { VbenAvatar } from '@vben-core/shadcn-ui';