diff --git a/src/components/custom/leave-edit/index.vue b/src/components/custom/leave-edit/index.vue deleted file mode 100644 index e69de29b..00000000 diff --git a/src/views/workflow/leave/modules/leave-operate-drawer.vue b/src/components/custom/work-flow/leave-edit/index.vue similarity index 51% rename from src/views/workflow/leave/modules/leave-operate-drawer.vue rename to src/components/custom/work-flow/leave-edit/index.vue index b23c2fa4..4b26b2c0 100644 --- a/src/views/workflow/leave/modules/leave-operate-drawer.vue +++ b/src/components/custom/work-flow/leave-edit/index.vue @@ -2,23 +2,30 @@ import { computed, reactive, ref, watch } from 'vue'; import dayjs from 'dayjs'; import { useBoolean } from '@sa/hooks'; -import { flowCodeTypeOptions, leaveTypeOptions } from '@/constants/workflow'; -import { fetchCreateLeave, fetchStartWorkflow, fetchUpdateLeave } from '@/service/api/workflow'; +import { flowCodeTypeOptions, flowCodeTypeRecord, leaveTypeOptions, leaveTypeRecord } from '@/constants/workflow'; +import { fetchCreateLeave, fetchGetLeaveDetail, fetchStartWorkflow, fetchUpdateLeave } from '@/service/api/workflow'; import { useFormRules, useNaiveForm } from '@/hooks/common/form'; +import { useDict } from '@/hooks/business/dict'; import { $t } from '@/locales'; defineOptions({ - name: 'LeaveOperateDrawer' + name: 'LeaveEdit' }); +useDict('wf_task_status'); + interface Props { - /** the type of operation */ - operateType: NaiveUI.TableOperateType; + operateType: CommonType.WorkflowTableOperateType; + /** 业务ID */ + businessId?: CommonType.IdType; /** the edit row data */ rowData?: Api.Workflow.Leave | null; } -const props = defineProps(); +const props = withDefaults(defineProps(), { + rowData: null, + businessId: undefined +}); interface Emits { (e: 'submitted'): void; @@ -34,12 +41,17 @@ const { formRef, validate, restoreValidation } = useNaiveForm(); const { createRequiredRule } = useFormRules(); const title = computed(() => { - const titles: Record = { + const titles: Record = { add: '新增请假申请', - edit: '编辑请假申请' + edit: '编辑请假申请', + detail: '查看请假申请', + approval: '审批请假申请' }; return titles[props.operateType]; }); +const readonly = computed(() => { + return props.operateType === 'detail' || props.operateType === 'approval'; +}); const respLeave = ref(); const startWorkflowResult = ref(); @@ -47,12 +59,9 @@ const startWorkflowResult = ref(); type Model = Api.Workflow.LeaveOperateParams & { flowCode: Api.Workflow.FlowCodeType; }; -type StartWorkflowModel = Api.Workflow.StartWorkflowOperateParams; const model: Model = reactive(createDefaultModel()); -const startWorkflowModel: StartWorkflowModel = reactive(createDefaultStartWorkflowModel()); - function createDefaultModel(): Model { return { flowCode: 'leave1', @@ -64,6 +73,29 @@ function createDefaultModel(): Model { }; } +type ModelDetail = Api.Workflow.LeaveDetail & { + flowCode: Api.Workflow.FlowCodeType; +}; + +const modelDetail: ModelDetail = reactive(createDefaultModelDetail()); + +function createDefaultModelDetail(): ModelDetail { + return { + flowCode: 'leave1', + status: null, + id: null, + leaveType: null, + startDate: null, + endDate: null, + leaveDays: null, + remark: '' + }; +} + +type StartWorkflowModel = Api.Workflow.StartWorkflowOperateParams; + +const startWorkflowModel: StartWorkflowModel = reactive(createDefaultStartWorkflowModel()); + function createDefaultStartWorkflowModel(): StartWorkflowModel { return { flowCode: null, @@ -81,7 +113,7 @@ const dateRange = computed<[string, string] | null>({ if (value) { model.startDate = value[0]; model.endDate = value[1]; - // Calculate leave days when date range changes + // 计算请假天数 const start = dayjs(value[0]); const end = dayjs(value[1]); model.leaveDays = end.diff(start, 'day') + 1; @@ -104,14 +136,21 @@ const rules: Record = { leaveDays: createRequiredRule('请假天数不能为空') }; -function handleUpdateModelWhenEdit() { +async function handleUpdateModelWhenEdit() { if (props.operateType === 'add') { Object.assign(model, createDefaultModel()); return; } - if (props.operateType === 'edit' && props.rowData) { + if (props.operateType === 'edit' || props.operateType === 'detail') { Object.assign(model, props.rowData); + } else { + const { error, data } = await fetchGetLeaveDetail(props.businessId!); + if (error) { + window.$message?.error(error.message); + return; + } + Object.assign(modelDetail, data); } } @@ -178,40 +217,72 @@ watch(visible, () => {