|
|
@@ -18,6 +18,65 @@ import dayjs from 'dayjs';
|
|
|
import { h, ref, computed ,inject,defineAsyncComponent, Ref} from "vue";
|
|
|
// import ItemsList from './ItemsList/index.vue';
|
|
|
|
|
|
+// 审批状态处理工具函数
|
|
|
+const getApprovalStatusText = (adminApproverInfo: any) => {
|
|
|
+ if (!adminApproverInfo) return '无审批流程';
|
|
|
+
|
|
|
+ const { approval_status, current_step, total_steps, is_approved, is_rejected, is_pending } = adminApproverInfo;
|
|
|
+
|
|
|
+ // 优先使用布尔状态标识
|
|
|
+ if (is_approved) return '审批通过';
|
|
|
+ if (is_rejected) return '审批拒绝';
|
|
|
+ if (is_pending) return '审批中';
|
|
|
+
|
|
|
+ // 回退到文本状态
|
|
|
+ let statusText = approval_status || '未知状态';
|
|
|
+
|
|
|
+ // 添加进度信息
|
|
|
+ if (current_step && total_steps) {
|
|
|
+ statusText += ` (${current_step.step_order}/${total_steps})`;
|
|
|
+ }
|
|
|
+
|
|
|
+ // 添加当前审批人信息
|
|
|
+ if (current_step && current_step.approver_name) {
|
|
|
+ statusText += ` - 待${current_step.approver_name}审批`;
|
|
|
+ }
|
|
|
+
|
|
|
+ return statusText;
|
|
|
+};
|
|
|
+
|
|
|
+// 审批进度详情处理函数
|
|
|
+const getApprovalProgressText = (adminApproverInfo: any) => {
|
|
|
+ if (!adminApproverInfo || !adminApproverInfo.approval_records) {
|
|
|
+ return '无审批记录';
|
|
|
+ }
|
|
|
+
|
|
|
+ const records = adminApproverInfo.approval_records;
|
|
|
+
|
|
|
+ // 按审批人分组,只保留每个审批人的最新状态
|
|
|
+ const approverMap = new Map();
|
|
|
+
|
|
|
+ records.forEach((record: any) => {
|
|
|
+ const approverName = record.approver_name;
|
|
|
+ const existingRecord = approverMap.get(approverName);
|
|
|
+
|
|
|
+ // 如果没有记录,或者当前记录更新(按创建时间或审批时间)
|
|
|
+ if (!existingRecord ||
|
|
|
+ (record.approve_time && (!existingRecord.approve_time ||
|
|
|
+ new Date(record.approve_time) > new Date(existingRecord.approve_time)))) {
|
|
|
+ approverMap.set(approverName, record);
|
|
|
+ }
|
|
|
+ });
|
|
|
+
|
|
|
+ // 转换为显示文本${timeText}
|
|
|
+ return Array.from(approverMap.values()).map((record: any) => {
|
|
|
+ const statusIcon = record.status === 1 ? '✓' : record.status === 0 ? '⏳' : '✗';
|
|
|
+ const statusText = record.status_label || (record.status === 1 ? '已通过' : record.status === 0 ? '待审核' : '已拒绝');
|
|
|
+ const timeText = record.approve_time ? ` (${dayjs(record.approve_time).format('MM-DD HH:mm')})` : '';
|
|
|
+ return `${statusIcon} ${record.approver_name} (${statusText})`;
|
|
|
+ }).join(' | ');
|
|
|
+};
|
|
|
+
|
|
|
export const createCrudOptions = function ({ crudExpose ,context, showRejectDialog, rejectReason, currentFormId,expose, showWarehouseDialog, currentApprovalFormId }: CreateCrudOptionsProps& {
|
|
|
showRejectDialog: Ref<boolean>,
|
|
|
rejectReason: Ref<string>,
|
|
|
@@ -26,7 +85,7 @@ export const createCrudOptions = function ({ crudExpose ,context, showRejectDial
|
|
|
currentApprovalFormId: Ref<number | null>
|
|
|
}): CreateCrudOptionsRet {
|
|
|
|
|
|
-
|
|
|
+/* ${statusIcon} ${record.step_name}: */
|
|
|
|
|
|
|
|
|
|
|
|
@@ -89,9 +148,30 @@ export const createCrudOptions = function ({ crudExpose ,context, showRejectDial
|
|
|
ElMessage.success("续借审批通过");
|
|
|
crudExpose.doRefresh();
|
|
|
} else {
|
|
|
- // 普通审批需要选择仓库
|
|
|
- currentApprovalFormId.value = ctx.form.id;
|
|
|
- showWarehouseDialog.value = true;
|
|
|
+ // 检查审批流程状态
|
|
|
+ const adminApproverInfo = ctx.form.admin_approver_info;
|
|
|
+ if (adminApproverInfo && adminApproverInfo.current_step) {
|
|
|
+ // 显示当前审批步骤信息
|
|
|
+ const currentStep = adminApproverInfo.current_step;
|
|
|
+ const stepInfo = `当前步骤:${currentStep.step_name} (${currentStep.step_order}/${adminApproverInfo.total_steps})`;
|
|
|
+ console.log(stepInfo);
|
|
|
+
|
|
|
+ // 检查是否还有后续审批步骤
|
|
|
+ if (currentStep.step_order < adminApproverInfo.total_steps) {
|
|
|
+ // 还有后续步骤,需要选择仓库
|
|
|
+ currentApprovalFormId.value = ctx.form.id;
|
|
|
+ showWarehouseDialog.value = true;
|
|
|
+ } else {
|
|
|
+ // 最后一步审批,直接通过
|
|
|
+ await BorrowingReview(ctx.form.id, "approve", "同意申请");
|
|
|
+ ElMessage.success("审批通过");
|
|
|
+ crudExpose.doRefresh();
|
|
|
+ }
|
|
|
+ } else {
|
|
|
+ // 没有审批流程信息,按原逻辑处理
|
|
|
+ currentApprovalFormId.value = ctx.form.id;
|
|
|
+ showWarehouseDialog.value = true;
|
|
|
+ }
|
|
|
}
|
|
|
ctx.close();
|
|
|
}
|
|
|
@@ -359,13 +439,46 @@ export const createCrudOptions = function ({ crudExpose ,context, showRejectDial
|
|
|
title: '当前审批人',
|
|
|
search: { show: true },
|
|
|
type: 'input',
|
|
|
- column: { minWidth: 120 },
|
|
|
+ column: {
|
|
|
+ minWidth: 120,
|
|
|
+ formatter: ({ row }: any) => {
|
|
|
+ // 优先从 admin_approver_info 获取当前待审批人
|
|
|
+ if (row.admin_approver_info && row.admin_approver_info.current_step) {
|
|
|
+ return row.admin_approver_info.current_step.approver_name || '未知审批人';
|
|
|
+ }
|
|
|
+
|
|
|
+ // 回退到原有的 approver_name 字段
|
|
|
+ return row.approver_name || '无审批人';
|
|
|
+ }
|
|
|
+ },
|
|
|
form: {
|
|
|
show: false,
|
|
|
component: { placeholder: '请输入审批人' },
|
|
|
rules: [{ required: false, message: '' }],
|
|
|
},
|
|
|
},
|
|
|
+ // 审批流程状态显示
|
|
|
+ /* admin_approver_info: {
|
|
|
+ title: '审批状态',
|
|
|
+ search: { show: false },
|
|
|
+ type: 'input',
|
|
|
+ column: {
|
|
|
+ minWidth: 200,
|
|
|
+ formatter: ({ value }: any) => getApprovalStatusText(value)
|
|
|
+ },
|
|
|
+ form: { show: false }
|
|
|
+ }, */
|
|
|
+ // 审批进度详情
|
|
|
+ approval_progress: {
|
|
|
+ title: '审批进度',
|
|
|
+ search: { show: false },
|
|
|
+ type: 'input',
|
|
|
+ column: {
|
|
|
+ minWidth: 300,
|
|
|
+ formatter: ({ row }: any) => getApprovalProgressText(row.admin_approver_info)
|
|
|
+ },
|
|
|
+ form: { show: false }
|
|
|
+ },
|
|
|
"items[0].device_category_name": {
|
|
|
title: '设备分类',
|
|
|
search: { show: false },
|