diff --git a/src/components/custom/workflow-category-select.vue b/src/components/custom/workflow-category-select.vue index 42b46287..d75e43a7 100644 --- a/src/components/custom/workflow-category-select.vue +++ b/src/components/custom/workflow-category-select.vue @@ -20,8 +20,13 @@ const attrs: TreeSelectProps = useAttrs(); const { loading, startLoading, endLoading } = useLoading(); /** 转换为str,id可能是number类型或者String类型,导致回显失败 */ -const strValue = computed(() => { - return isNull(rawValue.value) ? null : rawValue.value?.toString(); +const strValue = computed({ + get() { + return isNull(rawValue.value) ? null : rawValue.value?.toString(); + }, + set(val) { + rawValue.value = val; + } }); async function getCategoryList() { diff --git a/src/constants/workflow.ts b/src/constants/workflow.ts index 05abae3d..41597fff 100644 --- a/src/constants/workflow.ts +++ b/src/constants/workflow.ts @@ -1,5 +1,15 @@ import { transformRecordToOption } from '@/utils/common'; +/** leave type */ +export const leaveTypeRecord: Record = { + '1': '事假', + '2': '调休', + '3': '病假', + '4': '婚假' +}; + +export const leaveTypeOptions = transformRecordToOption(leaveTypeRecord); + /** workflow publish status */ export const workflowPublishStatusRecord: Record = { '0': '未发布', diff --git a/src/locales/langs/en-us.ts b/src/locales/langs/en-us.ts index f4f7a4c0..acf2d6a4 100644 --- a/src/locales/langs/en-us.ts +++ b/src/locales/langs/en-us.ts @@ -219,7 +219,8 @@ const local: App.I18n.Schema = { exception_404: '404', exception_500: '500', 'workflow_process-definition': 'Process Definition', - 'workflow_process-instance': 'Process Instance' + 'workflow_process-instance': 'Process Instance', + workflow_leave: 'Leave Apply' }, page: { login: { diff --git a/src/locales/langs/zh-cn.ts b/src/locales/langs/zh-cn.ts index 2b1f5412..6faa420d 100644 --- a/src/locales/langs/zh-cn.ts +++ b/src/locales/langs/zh-cn.ts @@ -219,7 +219,8 @@ const local: App.I18n.Schema = { exception_404: '404', exception_500: '500', 'workflow_process-definition': '流程定义', - 'workflow_process-instance': '流程实例' + 'workflow_process-instance': '流程实例', + workflow_leave: '请假申请' }, page: { login: { diff --git a/src/router/elegant/imports.ts b/src/router/elegant/imports.ts index fb83a8ba..6e7b0b32 100644 --- a/src/router/elegant/imports.ts +++ b/src/router/elegant/imports.ts @@ -44,6 +44,7 @@ export const views: Record Promise import("@/views/system/user/index.vue"), tool_gen: () => import("@/views/tool/gen/index.vue"), workflow_category: () => import("@/views/workflow/category/index.vue"), + workflow_leave: () => import("@/views/workflow/leave/index.vue"), "workflow_process-definition": () => import("@/views/workflow/process-definition/index.vue"), "workflow_process-instance": () => import("@/views/workflow/process-instance/index.vue"), }; diff --git a/src/router/elegant/routes.ts b/src/router/elegant/routes.ts index 3472d9f6..b38619f8 100644 --- a/src/router/elegant/routes.ts +++ b/src/router/elegant/routes.ts @@ -350,6 +350,15 @@ export const generatedRoutes: GeneratedRoute[] = [ i18nKey: 'route.workflow_category' } }, + { + name: 'workflow_leave', + path: '/workflow/leave', + component: 'view.workflow_leave', + meta: { + title: 'workflow_leave', + i18nKey: 'route.workflow_leave' + } + }, { name: 'workflow_process-definition', path: '/workflow/process-definition', diff --git a/src/router/elegant/transform.ts b/src/router/elegant/transform.ts index 2ef1d565..2b3d39b6 100644 --- a/src/router/elegant/transform.ts +++ b/src/router/elegant/transform.ts @@ -201,6 +201,7 @@ const routeMap: RouteMap = { "user-center": "/user-center", "workflow": "/workflow", "workflow_category": "/workflow/category", + "workflow_leave": "/workflow/leave", "workflow_process-definition": "/workflow/process-definition", "workflow_process-instance": "/workflow/process-instance" }; diff --git a/src/service/api/workflow/index.ts b/src/service/api/workflow/index.ts index 901afeb2..5715d87f 100644 --- a/src/service/api/workflow/index.ts +++ b/src/service/api/workflow/index.ts @@ -1,2 +1,4 @@ export * from './category'; +export * from './leave'; +export * from './instance'; export * from './definition'; diff --git a/src/service/api/workflow/leave.ts b/src/service/api/workflow/leave.ts new file mode 100644 index 00000000..4ab48b4c --- /dev/null +++ b/src/service/api/workflow/leave.ts @@ -0,0 +1,36 @@ +import { request } from '@/service/request'; + +/** 获取请假申请列表 */ +export function fetchGetLeaveList(params?: Api.Workflow.LeaveSearchParams) { + return request({ + url: '/workflow/leave/list', + method: 'get', + params + }); +} + +/** 新增请假申请 */ +export function fetchCreateLeave(data: Api.Workflow.LeaveOperateParams) { + return request({ + url: '/workflow/leave', + method: 'post', + data + }); +} + +/** 修改请假申请 */ +export function fetchUpdateLeave(data: Api.Workflow.LeaveOperateParams) { + return request({ + url: '/workflow/leave', + method: 'put', + data + }); +} + +/** 批量删除请假申请 */ +export function fetchBatchDeleteLeave(ids: CommonType.IdType[]) { + return request({ + url: `/workflow/leave/${ids.join(',')}`, + method: 'delete' + }); +} diff --git a/src/typings/api/workflow.api.d.ts b/src/typings/api/workflow.api.d.ts index a289b65b..e1fd637d 100644 --- a/src/typings/api/workflow.api.d.ts +++ b/src/typings/api/workflow.api.d.ts @@ -10,6 +10,40 @@ declare namespace Api { * backend api module: "Workflow" */ namespace Workflow { + /** 请假状态 */ + type LeaveType = '1' | '2' | '3' | '4'; + /** leave */ + type Leave = Common.CommonRecord<{ + /** id */ + id: CommonType.IdType; + /** 租户编号 */ + tenantId: CommonType.IdType; + /** 请假类型 */ + leaveType: LeaveType; + /** 开始时间 */ + startDate: string; + /** 结束时间 */ + endDate: string; + /** 请假天数 */ + leaveDays: number; + /** 请假原因 */ + remark: string; + /** 状态 */ + status: string; + }>; + + /** leave search params */ + type LeaveSearchParams = CommonType.RecordNullable< + Pick & Api.Common.CommonSearchParams + >; + + /** leave operate params */ + type LeaveOperateParams = CommonType.RecordNullable< + Pick + >; + + /** leave list */ + type LeaveList = Api.Common.PaginatingQueryRecord; /** 工作流分类 */ type WorkflowCategory = Common.CommonRecord<{ /** 主键 */ diff --git a/src/typings/components.d.ts b/src/typings/components.d.ts index 9c620148..2549701d 100644 --- a/src/typings/components.d.ts +++ b/src/typings/components.d.ts @@ -92,6 +92,7 @@ declare module 'vue' { NInput: typeof import('naive-ui')['NInput'] NInputGroup: typeof import('naive-ui')['NInputGroup'] NInputGroupLabel: typeof import('naive-ui')['NInputGroupLabel'] + NInputNubmer: typeof import('naive-ui')['NInputNubmer'] NInputNumber: typeof import('naive-ui')['NInputNumber'] NLayout: typeof import('naive-ui')['NLayout'] NLayoutContent: typeof import('naive-ui')['NLayoutContent'] diff --git a/src/typings/elegant-router.d.ts b/src/typings/elegant-router.d.ts index daca6040..2fe6f29a 100644 --- a/src/typings/elegant-router.d.ts +++ b/src/typings/elegant-router.d.ts @@ -55,6 +55,7 @@ declare module "@elegant-router/types" { "user-center": "/user-center"; "workflow": "/workflow"; "workflow_category": "/workflow/category"; + "workflow_leave": "/workflow/leave"; "workflow_process-definition": "/workflow/process-definition"; "workflow_process-instance": "/workflow/process-instance"; }; @@ -151,6 +152,7 @@ declare module "@elegant-router/types" { | "system_user" | "tool_gen" | "workflow_category" + | "workflow_leave" | "workflow_process-definition" | "workflow_process-instance" >; diff --git a/src/views/workflow/leave/index.vue b/src/views/workflow/leave/index.vue new file mode 100644 index 00000000..c3e3668c --- /dev/null +++ b/src/views/workflow/leave/index.vue @@ -0,0 +1,221 @@ + + + + + diff --git a/src/views/workflow/leave/modules/leave-operate-drawer.vue b/src/views/workflow/leave/modules/leave-operate-drawer.vue new file mode 100644 index 00000000..fc3623c0 --- /dev/null +++ b/src/views/workflow/leave/modules/leave-operate-drawer.vue @@ -0,0 +1,139 @@ + + + + + diff --git a/src/views/workflow/leave/modules/leave-search.vue b/src/views/workflow/leave/modules/leave-search.vue new file mode 100644 index 00000000..417fb8f2 --- /dev/null +++ b/src/views/workflow/leave/modules/leave-search.vue @@ -0,0 +1,64 @@ + + + + +