feat(wms): 新增部门管理模块并重构审批流程
- 新增部门管理模块,包括部门树形结构的增删改查功能 - 重构审批流程,使用任务审批模式替代原有简单审批 - 调整请假和外出申请页面,适配新的审批流程 - 移除不必要的审批部门显示和申请类型筛选 - 更新状态显示逻辑,支持多级审批状态展示
This commit is contained in:
@@ -8,10 +8,10 @@
|
||||
</template>
|
||||
<!-- 左侧是新增表单 -->
|
||||
<el-form ref="form" :model="form" :rules="rules" label-width="80px" v-loading="loading">
|
||||
<el-form-item label="审批部门" prop="applicantDeptName">
|
||||
<el-select v-model="form.applicantDeptName" placeholder="请选择审批部门" filterable @change="getDeptLeader">
|
||||
<el-form-item label="审批部门" prop="deptId">
|
||||
<el-select v-model="form.deptId" placeholder="请选择审批部门" filterable @change="getDeptLeader">
|
||||
<el-option v-for="item in deptOptions" :key="item.deptId"
|
||||
:label="item.deptName + '(' + (item.leader || '无负责人') + ')'" :value="item.deptName"></el-option>
|
||||
:label="item.deptName + '(' + (item.leaderNickName || '无负责人') + ')'" :value="item.deptId"></el-option>
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
<el-form-item label="请假类型" prop="leaveType">
|
||||
@@ -109,7 +109,15 @@
|
||||
<dict-tag :options="dict.type.hrm_leave_employee" :value="scope.row.applicantName" />
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="审批人" align="center" prop="approverName"></el-table-column>
|
||||
<el-table-column label="审批情况" align="center" prop="approverName">
|
||||
<template slot-scope="scope">
|
||||
<!-- 每行一个,不要出现换行,将英文映射成中文 -->
|
||||
<el-tag v-for="task in scope.row.tasks" :key="task.taskId" :type="getTaskStatusTagType(task.taskStatus)" style="margin-right: 8px;">
|
||||
<!-- taskStatus包括pending, approved, rejected, 根据状态设置不同的标签类型 -->
|
||||
{{ task.approverName }} {{ getTaskStatusText(task.taskStatus) }}
|
||||
</el-tag>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="开始时间" align="center" prop="startTime" width="120">
|
||||
<template slot-scope="scope">
|
||||
<span>{{ parseTime(scope.row.startTime, '{y}-{m}-{d} {h}') }}</span>
|
||||
@@ -130,7 +138,7 @@
|
||||
<el-table-column label="操作" align="center" width="160">
|
||||
<template slot-scope="scope" v-if="scope.row.approvalStatus === '待审批'">
|
||||
<el-button icon="el-icon-edit" size="mini" @click="handleEdit(scope.row)">修改</el-button>
|
||||
<el-button icon="el-icon-delete" size="mini" @click="handleWithdraw(scope.row)">撤回</el-button>
|
||||
<!-- <el-button icon="el-icon-delete" size="mini" @click="handleWithdraw(scope.row)">撤回</el-button> -->
|
||||
</template>
|
||||
</el-table-column>
|
||||
</el-table>
|
||||
@@ -145,7 +153,7 @@
|
||||
<script>
|
||||
import { getLeaveRequest, addLeaveRequest, updateLeaveRequest } from "@/api/wms/leaveRequest";
|
||||
import { listApproval, updateApproval } from "@/api/wms/approval"
|
||||
import { listDeptWithChildren } from "@/api/system/dept"
|
||||
import { listDept } from "@/api/wms/dept"
|
||||
import FileUpload from '@/components/FileUpload'
|
||||
import DictSelect from '@/components/DictSelect'
|
||||
|
||||
@@ -183,7 +191,7 @@ export default {
|
||||
rules: {
|
||||
leaveType: [{ required: true, message: '请假类型不能为空', trigger: 'change' }],
|
||||
applicantName: [{ required: true, message: '请假人姓名不能为空', trigger: 'change' }],
|
||||
applicantDeptName: [{ required: true, message: '审批部门不能为空', trigger: 'change' }],
|
||||
deptId: [{ required: true, message: '审批部门不能为空', trigger: 'change' }],
|
||||
attachmentUrls: [{ required: false }],
|
||||
remark: [{ required: false }],
|
||||
// 数组项的校验规则
|
||||
@@ -204,14 +212,14 @@ export default {
|
||||
},
|
||||
methods: {
|
||||
getDeptList() {
|
||||
listDeptWithChildren("2009923867307630594").then(response => {
|
||||
listDept().then(response => {
|
||||
this.deptOptions = response.data
|
||||
})
|
||||
},
|
||||
// 获取部门负责人
|
||||
getDeptLeader() {
|
||||
const selectedDept = this.deptOptions.find(item => item.deptName === this.form.applicantDeptName)
|
||||
const approverName = selectedDept.leader;
|
||||
const selectedDept = this.deptOptions.find(item => item.deptId === this.form.deptId)
|
||||
const approverName = selectedDept.leaderNickName;
|
||||
if (!approverName) {
|
||||
this.$message.warning('该部门无负责人,申请将无人审批');
|
||||
return;
|
||||
@@ -229,6 +237,7 @@ export default {
|
||||
approvalId: item.approval.approvalId,
|
||||
approvalType: item.approval.approvalType,
|
||||
approverName: item.approval.approverName,
|
||||
tasks: item.tasks,
|
||||
...item.detail,
|
||||
}
|
||||
});
|
||||
@@ -263,7 +272,7 @@ export default {
|
||||
leaveId: undefined,
|
||||
leaveType: undefined,
|
||||
applicantName: undefined,
|
||||
applicantDeptName: undefined,
|
||||
deptId: undefined,
|
||||
approverName: undefined,
|
||||
attachmentUrls: undefined,
|
||||
remark: undefined,
|
||||
@@ -329,7 +338,7 @@ export default {
|
||||
// 2. 循环处理每个时段,逐个发送请求
|
||||
for (let i = 0; i < list.length; i++) {
|
||||
const item = list[i];
|
||||
// 组装单个请求的数据(公共字段 + 当前时段字段)
|
||||
const approvalType = parseInt(item.leaveDays) > 3 ? 'multi' : 'single';
|
||||
const singleRequestData = {
|
||||
...commonFields,
|
||||
startTime: item.startTime,
|
||||
@@ -338,7 +347,8 @@ export default {
|
||||
leaveDays: item.leaveDays,
|
||||
leaveReason: item.leaveReason,
|
||||
// 生成单条记录的标题
|
||||
leaveTitle: `${commonFields.applicantName}-${commonFields.leaveType}-时段${i+1}-${item.startTime}-${item.leaveReason || ''}`
|
||||
leaveTitle: `${commonFields.applicantName}-${commonFields.leaveType}-时段${i+1}-${item.startTime}-${item.leaveReason || ''}`,
|
||||
approvalType: approvalType,
|
||||
};
|
||||
|
||||
try {
|
||||
@@ -418,6 +428,24 @@ export default {
|
||||
}
|
||||
return textMap[status] || '未知状态'
|
||||
},
|
||||
// 获取任务状态的中文文本
|
||||
getTaskStatusText(status) {
|
||||
const textMap = {
|
||||
'pending': '待审批',
|
||||
'approved': '已同意',
|
||||
'rejected': '已驳回'
|
||||
}
|
||||
return textMap[status] || status
|
||||
},
|
||||
// 获取任务状态的标签类型
|
||||
getTaskStatusTagType(status) {
|
||||
const typeMap = {
|
||||
'pending': 'warning',
|
||||
'approved': 'success',
|
||||
'rejected': 'danger'
|
||||
}
|
||||
return typeMap[status] || 'info'
|
||||
},
|
||||
// 计算指定行的请假天数
|
||||
calculateLeaveDays(index) {
|
||||
const item = this.form.list[index];
|
||||
|
||||
Reference in New Issue
Block a user