|
|
@@ -13,7 +13,6 @@
|
|
|
<UploadFiles
|
|
|
v-if="!isViewMode"
|
|
|
label="上传文件"
|
|
|
- :maxCount="1"
|
|
|
:file-list="attachmentFileList"
|
|
|
:disabled="isViewMode"
|
|
|
:allow-all-file-types="true"
|
|
|
@@ -73,28 +72,94 @@
|
|
|
</el-button>
|
|
|
<el-button v-if="isApproveMode" type="primary" @click="handleApproveClick">审核</el-button>
|
|
|
</footer>
|
|
|
+
|
|
|
+ <BasicDialog ref="basicDialogRef" title="提交审批" @refresh="closeDialog">
|
|
|
+ <template #form>
|
|
|
+ <div class="form">
|
|
|
+ <el-form ref="approvalFormRef" :model="approvalForm">
|
|
|
+ <!-- <el-form-item label="审批描述:" label-position="top">
|
|
|
+ <el-input v-model="approvalForm.description" placeholder="请输入审批描述" type="textarea" />
|
|
|
+ </el-form-item> -->
|
|
|
+ <div class="form-item">
|
|
|
+ <span>审批流程:</span>
|
|
|
+ <template v-for="item in approvalNodeList" :key="item.id">
|
|
|
+ <el-form-item
|
|
|
+ :label="`第${item.approvalOrder}步:${item.nodeDescription}(${APPROVAL_TYPE_MAP[item.approvalType]})`"
|
|
|
+ label-position="top"
|
|
|
+ :prop="item.approverType !== APPROVER_TYPE.FIX ? `approvers.${item.id}` : ''"
|
|
|
+ :rules="{ required: true, message: '请选择审批人员', trigger: 'change' }"
|
|
|
+ >
|
|
|
+ <el-input
|
|
|
+ v-if="item.approverType === APPROVER_TYPE.FIX"
|
|
|
+ :model-value="item.approverInfoList.map((info) => info.approverName).join(',')"
|
|
|
+ disabled
|
|
|
+ ></el-input>
|
|
|
+ <el-select
|
|
|
+ v-else
|
|
|
+ v-model="approvalForm.approvers[item.id]"
|
|
|
+ placeholder="请选择审批人员"
|
|
|
+ value-key="id"
|
|
|
+ filterable
|
|
|
+ remote
|
|
|
+ collapse-tags
|
|
|
+ collapse-tags-tooltip
|
|
|
+ :max-collapse-tags="2"
|
|
|
+ :remote-method="remoteMethod"
|
|
|
+ :loading="loading"
|
|
|
+ multiple
|
|
|
+ >
|
|
|
+ <el-option
|
|
|
+ v-for="option in userOptions"
|
|
|
+ :key="option.id"
|
|
|
+ :label="`${option.realname}(${option.username})${option.deptName}`"
|
|
|
+ :value="option.id"
|
|
|
+ />
|
|
|
+ </el-select>
|
|
|
+ </el-form-item>
|
|
|
+ </template>
|
|
|
+ </div>
|
|
|
+ </el-form>
|
|
|
+ </div>
|
|
|
+ </template>
|
|
|
+ <template #footer>
|
|
|
+ <el-button type="primary" @click="handleSubmitApproval">提交</el-button>
|
|
|
+ <el-button @click="basicDialogRef.closeDialog">取消</el-button>
|
|
|
+ </template>
|
|
|
+ </BasicDialog>
|
|
|
</template>
|
|
|
|
|
|
<script setup lang="ts">
|
|
|
- import { computed, onMounted, ref } from 'vue';
|
|
|
+ import { computed, onMounted, ref, reactive } from 'vue';
|
|
|
import { useRoute, useRouter } from 'vue-router';
|
|
|
import { ElMessage } from 'element-plus';
|
|
|
import BasicForm from '@/components/BasicForm.vue';
|
|
|
import UploadFiles from '@/components/UploadFiles/UploadFiles.vue';
|
|
|
import type { FileItem } from '@/components/UploadFiles/types';
|
|
|
+ import type { ApprovalNodeInstanceType } from '@/views/system/approval/types';
|
|
|
import { formatAttachmentList } from '@/components/UploadFiles/utils';
|
|
|
import { useFormConfigHook } from '@/hooks/useFormConfigHook';
|
|
|
+ import { useEmergencySuppliesHook } from '@/views/emergency/emergency-supplies/src/hook';
|
|
|
import { ACADEMY_FILE_FORM_CONFIG, ACADEMY_FILE_FORM_DATA, ACADEMY_FILE_FORM_RULES } from '../configs/form';
|
|
|
import {
|
|
|
queryHiddenDangerById,
|
|
|
approveEmployeeHazardReport,
|
|
|
saveEmployeeHazardReport,
|
|
|
updateEmployeeHazardReport,
|
|
|
+ queryTemplateID,
|
|
|
type ApproveEmployeeHazardReportReq,
|
|
|
} from '@/api/production-safety';
|
|
|
+ import {
|
|
|
+ type PersonalProtectiveEquipmentPurchaseApply,
|
|
|
+ type PurchaseApplyItem,
|
|
|
+ type PpePurchaseApplyDetail,
|
|
|
+ type SavePpePurchaseApplyReq,
|
|
|
+ type ApprovalInfoItem,
|
|
|
+ } from '@/api/production-safety/personal-protective-equipment-purchase-apply';
|
|
|
+ import { APPROVAL_TYPE_MAP, APPROVER_TYPE } from '../configs/constant';
|
|
|
import PreviewOnline from '@/views/disaster/components/PreviewOnline.vue';
|
|
|
import { downloadFile } from '@/views/disaster/utils';
|
|
|
-
|
|
|
+ import BasicDialog from '@/components/BasicDialog.vue';
|
|
|
+ import { getApprovalNodeInstanceList } from '@/api/approval/approval';
|
|
|
const router = useRouter();
|
|
|
const route = useRoute();
|
|
|
|
|
|
@@ -123,6 +188,7 @@
|
|
|
ACADEMY_FILE_FORM_DATA,
|
|
|
ACADEMY_FILE_FORM_RULES,
|
|
|
);
|
|
|
+ const { userOptions, loading, remoteMethod } = useEmergencySuppliesHook();
|
|
|
|
|
|
const formConfig = computed(() =>
|
|
|
isCreateOrEditMode.value
|
|
|
@@ -132,10 +198,19 @@
|
|
|
}))
|
|
|
: ruleFormConfig.value,
|
|
|
);
|
|
|
-
|
|
|
+ const approvalNodeList = ref<ApprovalNodeInstanceType[]>([]);
|
|
|
+ const basicDialogRef = ref();
|
|
|
+ const approvalFormRef = ref();
|
|
|
const basicFormRef = ref<InstanceType<typeof BasicForm>>();
|
|
|
const previewOnlineRef = ref<InstanceType<typeof PreviewOnline>>();
|
|
|
|
|
|
+ const approvalForm = reactive({
|
|
|
+ description: '',
|
|
|
+ approvers: {} as Record<number, any[]>,
|
|
|
+ });
|
|
|
+ const closeDialog = () => {
|
|
|
+ basicDialogRef.value.closeDialog();
|
|
|
+ };
|
|
|
/** 上报时间格式化为 YYYY-MM-DD(详情展示用) */
|
|
|
function formatReportTimeToDate(reportTime: string | undefined): string {
|
|
|
if (!reportTime || !String(reportTime).trim()) return '';
|
|
|
@@ -164,7 +239,10 @@
|
|
|
return [];
|
|
|
}
|
|
|
}
|
|
|
-
|
|
|
+ const getApprovalNode = async (id: number) => {
|
|
|
+ const res = await getApprovalNodeInstanceList(id);
|
|
|
+ approvalNodeList.value = res.approvalNodeInfoList || [];
|
|
|
+ };
|
|
|
const attachmentFileList = computed(() => convertAttachmentJsonToFileItems(ruleFormData.attachment || ''));
|
|
|
|
|
|
async function handleAttachmentUploadSuccess(files: FileItem[]) {
|
|
|
@@ -181,7 +259,7 @@
|
|
|
}))
|
|
|
.filter((x) => x.url);
|
|
|
ruleFormData.attachment = JSON.stringify(jsonArr);
|
|
|
- } catch (e) {
|
|
|
+ } catch (e:any) {
|
|
|
console.error('附件上传失败:', e);
|
|
|
ElMessage.error(e?.message || e?.data || '附件上传失败,请重试');
|
|
|
}
|
|
|
@@ -214,13 +292,14 @@
|
|
|
ruleFormData.reporterJobNo = res.reporterJobNo || '';
|
|
|
ruleFormData.reporterMobile = res.reporterMobile || '';
|
|
|
ruleFormData.attachment = res.attachment || '';
|
|
|
- ruleFormData.reportTime = res.reportTime || '';
|
|
|
+ // ruleFormData.reportTime = res.reportTime || '';
|
|
|
+ console.log(ruleFormData.reportTime)
|
|
|
// 设置审核表单的隐患ID
|
|
|
approveForm.value.hazardId = res.id;
|
|
|
approveForm.value.approvalOrder = res.approvalOrder ?? 0;
|
|
|
}
|
|
|
cloneRuleFormData();
|
|
|
- } catch (e) {
|
|
|
+ } catch (e:any) {
|
|
|
console.error('获取隐患上报详情失败:', e);
|
|
|
ElMessage.error(e?.message || e?.data || '获取详情失败');
|
|
|
}
|
|
|
@@ -263,58 +342,130 @@
|
|
|
ElMessage.success('审核成功');
|
|
|
approveDialogVisible.value = false;
|
|
|
router.back();
|
|
|
- } catch (e) {
|
|
|
+ } catch (e: any) {
|
|
|
console.error('审核失败:', e);
|
|
|
ElMessage.error(e?.message || e?.data || '审核失败,请重试');
|
|
|
}
|
|
|
};
|
|
|
-
|
|
|
+ // 获取TemplateID
|
|
|
+ const templateInfo = ref()
|
|
|
+ const fetchTemplateID = async ()=>{
|
|
|
+ templateInfo.value = await queryTemplateID()
|
|
|
+ }
|
|
|
const handleValidate = async () => {
|
|
|
if (!basicFormRef.value) return false;
|
|
|
return await basicFormRef.value.validateForm();
|
|
|
};
|
|
|
-
|
|
|
+ const params = ref()
|
|
|
const handleSubmit = async () => {
|
|
|
- const ok = await handleValidate();
|
|
|
- if (!ok) return;
|
|
|
+ // const ok = await handleValidate();
|
|
|
+ // if (!ok) return;
|
|
|
try {
|
|
|
- const payload = {
|
|
|
+ console.log(ruleFormData, '提交参数')
|
|
|
+ params.value = {
|
|
|
categoryId: ruleFormData.categoryId ?? 0,
|
|
|
hazardDesc: ruleFormData.hazardDesc || '',
|
|
|
location: ruleFormData.location || '',
|
|
|
reportTime: ruleFormData.reportTime || '',
|
|
|
- sourceType: ruleFormData.sourceType ?? 1,
|
|
|
+ sourceTypeName: ruleFormData.sourceTypeName,
|
|
|
+ sourceType: Number(ruleFormData.sourceTypeName) ?? 1,
|
|
|
taskSource: ruleFormData.taskSource || '',
|
|
|
reporterName: ruleFormData.reporterName || '',
|
|
|
reporterJobNo: ruleFormData.reporterJobNo || '',
|
|
|
reporterMobile: ruleFormData.reporterMobile || '',
|
|
|
attachment: ruleFormData.attachment ? JSON.parse(ruleFormData.attachment) : '',
|
|
|
};
|
|
|
- if (
|
|
|
- operate.value === 'employee-report-hidden-trouble-create' ||
|
|
|
- operate.value === 'hidden-trouble-review-create'
|
|
|
- ) {
|
|
|
- await saveEmployeeHazardReport(payload);
|
|
|
- ElMessage.success('提交成功');
|
|
|
- } else if (currentId.value) {
|
|
|
- await updateEmployeeHazardReport({ id: currentId.value, ...payload });
|
|
|
- ElMessage.success('保存成功');
|
|
|
- }
|
|
|
- router.back();
|
|
|
- } catch (e) {
|
|
|
+ basicDialogRef.value.openDialog();
|
|
|
+ await getApprovalNode(templateInfo.value);
|
|
|
+ // if (
|
|
|
+ // operate.value === 'employee-report-hidden-trouble-create' ||
|
|
|
+ // operate.value === 'hidden-trouble-review-create'
|
|
|
+ // ) {
|
|
|
+ // await saveEmployeeHazardReport(payload);
|
|
|
+ // ElMessage.success('提交成功');
|
|
|
+ // } else if (currentId.value) {
|
|
|
+ // await updateEmployeeHazardReport({ id: currentId.value, ...payload });
|
|
|
+ // ElMessage.success('保存成功');
|
|
|
+ // }
|
|
|
+ // router.back();
|
|
|
+ } catch (e:any) {
|
|
|
console.error('提交失败:', e);
|
|
|
ElMessage.error(e?.message || e?.data || '提交失败,请重试');
|
|
|
}
|
|
|
};
|
|
|
|
|
|
+ // 提交流程
|
|
|
+
|
|
|
+ const handleSubmitApproval = () => {
|
|
|
+
|
|
|
+ approvalFormRef.value.validate(async (valid: boolean) => {
|
|
|
+ if (valid) {
|
|
|
+ const approvalInfoList: ApprovalInfoItem[] = approvalNodeList.value.map((node) => {
|
|
|
+ let approverIds: number[] = [];
|
|
|
+ if (node.approverType === APPROVER_TYPE.FIX) {
|
|
|
+ approverIds = node.approverInfoList.map((info) => info.approverId);
|
|
|
+ } else {
|
|
|
+ approverIds = approvalForm.approvers[node.id] || [];
|
|
|
+ }
|
|
|
+ return {
|
|
|
+ approvalOrder: node.approvalOrder,
|
|
|
+ approverIdList: approverIds,
|
|
|
+ };
|
|
|
+ });
|
|
|
+
|
|
|
+ const payload = {
|
|
|
+ templateId: templateInfo.value,
|
|
|
+ approvalDescription: approvalForm.description,
|
|
|
+ approvalInfoList,
|
|
|
+ ...params.value,
|
|
|
+ };
|
|
|
+ console.log(payload)
|
|
|
+ await saveEmployeeHazardReport(payload);
|
|
|
+ ElMessage.success('提交成功');
|
|
|
+ // if(isCreateMode.value){
|
|
|
+
|
|
|
+ // }else{
|
|
|
+ // const payload = buildSubmitPayload({
|
|
|
+ // approvalInfoList,
|
|
|
+ // approvalDescription: '',
|
|
|
+ // templateId: form.approvalTemplateId,
|
|
|
+ // });
|
|
|
+ // await doSubmit(payload);
|
|
|
+ // }
|
|
|
+ basicDialogRef.value.closeDialog();
|
|
|
+ router.back();
|
|
|
+ }
|
|
|
+ });
|
|
|
+ };
|
|
|
+
|
|
|
+// const handleSubmitApproval = async ()=>{
|
|
|
+// try {
|
|
|
+// if (
|
|
|
+// operate.value === 'employee-report-hidden-trouble-create' ||
|
|
|
+// operate.value === 'hidden-trouble-review-create'
|
|
|
+// ) {
|
|
|
+// await saveEmployeeHazardReport(params.value);
|
|
|
+// ElMessage.success('提交成功');
|
|
|
+// } else if (currentId.value) {
|
|
|
+// await updateEmployeeHazardReport({ id: currentId.value, ...params.value });
|
|
|
+// ElMessage.success('保存成功');
|
|
|
+// }
|
|
|
+// router.back();
|
|
|
+// } catch (e:any) {
|
|
|
+// console.error('提交失败:', e);
|
|
|
+// ElMessage.error(e?.message || e?.data || '提交失败,请重试');
|
|
|
+// }
|
|
|
+// }
|
|
|
+
|
|
|
const previewOnline = (url: string | undefined, type) => {
|
|
|
if (url) {
|
|
|
- previewOnlineRef.value?.open(url, type);
|
|
|
+ previewOnlineRef.value?.open(url, 'image/*');
|
|
|
}
|
|
|
};
|
|
|
|
|
|
onMounted(() => {
|
|
|
cloneRuleFormData();
|
|
|
+ fetchTemplateID()
|
|
|
if (currentId.value) {
|
|
|
getDetail();
|
|
|
}
|