From 5a776434963509b15e3e73299896ca61666478ec Mon Sep 17 00:00:00 2001 From: lh Date: Thu, 4 Dec 2025 17:04:19 +0800 Subject: [PATCH] =?UTF-8?q?=E9=A1=B9=E7=9B=AE=E5=91=A8=E6=8A=A5=E5=B7=A5?= =?UTF-8?q?=E4=BD=9C=E6=B5=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/api/oa/erp/projectReport/types.ts | 2 +- src/enums/OAEnum.ts | 4 +- src/views/oa/erp/projectReport/edit.vue | 218 +++++++---------------- src/views/oa/erp/projectReport/index.vue | 15 +- 4 files changed, 74 insertions(+), 165 deletions(-) diff --git a/src/api/oa/erp/projectReport/types.ts b/src/api/oa/erp/projectReport/types.ts index 9f10faf..6e5be0d 100644 --- a/src/api/oa/erp/projectReport/types.ts +++ b/src/api/oa/erp/projectReport/types.ts @@ -1,4 +1,4 @@ -export interface ProjectReportVO extends extraInfo { +export interface ProjectReportVO extends BaseEntity, extraInfo { /** * 项目周报ID */ diff --git a/src/enums/OAEnum.ts b/src/enums/OAEnum.ts index b8d2326..26057ec 100644 --- a/src/enums/OAEnum.ts +++ b/src/enums/OAEnum.ts @@ -20,7 +20,9 @@ export enum CodeRuleEnum { /** * 项目售后编号规则 */ - AFTER_SALES = '1012' + AFTER_SALES = '1012', + + PROJECT_REPORT = '1011' } /** diff --git a/src/views/oa/erp/projectReport/edit.vue b/src/views/oa/erp/projectReport/edit.vue index 40c8bc1..d1a4708 100644 --- a/src/views/oa/erp/projectReport/edit.vue +++ b/src/views/oa/erp/projectReport/edit.vue @@ -13,7 +13,7 @@ :mode="false" /> @@ -179,7 +179,7 @@ - + @@ -369,6 +369,7 @@ import { getBasePrintTemplateList } from '@/api/oa/base/printTemplate'; import { CodeRuleEnum, FlowCodeEnum } from '@/enums/OAEnum'; import { getInfo } from '@/api/login'; import { ProjectReportVO, ProjectReportQuery, ProjectReportForm } from '@/api/oa/erp/projectReport/types'; +import { listProjectReport, getProjectReport, delProjectReport, addProjectReport, updateProjectReport } from '@/api/oa/erp/projectReport'; import { listProjectReportDetail, getProjectReportDetail, @@ -396,7 +397,7 @@ const { contract_category, business_direction, contract_flag, contract_type, con ); const buttonLoading = ref(false); -const ProjectFormRef = ref(); +const projectFormRef = ref(); // 审批相关组件引用 const submitVerifyRef = ref>(); @@ -463,7 +464,14 @@ const data = reactive>({ deputyName: undefined, params: {} }, - rules: {} + rules: { + projectName: [{ required: true, message: '项目名称不能为空', trigger: 'blur' }], + projectCode: [{ required: true, message: '项目编号不能为空', trigger: 'blur' }], + deptName: [{ required: true, message: '部门名称不能为空', trigger: 'blur' }], + managerName: [{ required: true, message: '项目经理不能为空', trigger: 'blur' }], + chargeName: [{ required: true, message: '部门负责人不能为空', trigger: 'blur' }], + deputyName: [{ required: true, message: '分管副总不能为空', trigger: 'blur' }] + } }); const { form, queryParams, rules } = toRefs(data); @@ -550,10 +558,10 @@ const columns = ref([ { key: 26, label: `更新时间`, visible: true } ]); -// 合同物料相关 +// 项目周报明细表单引用 const projectReportFormRef = ref(); -// 合同物料表单数据 +// 项目周报明细表单数据 const initprojectReportFormData: ProjectReportDetailFormEx = { reportDetailId: undefined, reportId: undefined, @@ -583,11 +591,11 @@ const initprojectReportFormData: ProjectReportDetailFormEx = { const projectReportForm = ref({ ...initprojectReportFormData }); -// 合同物料表单验证规则 +// 项目周报明细表单规则验证 const reportRules = { - productName: [{ required: true, message: '产品名称不能为空', trigger: 'blur' }], - amount: [{ required: true, message: '数量不能为空', trigger: 'blur' }], - taxRate: [{ required: true, message: '税率不能为空', trigger: 'blur' }] + tasksCompleted: [{ required: true, message: '本周完成工作不能为空', trigger: 'blur' }], + nextPlan: [{ required: true, message: '下周计划不能为空', trigger: 'blur' }], + riskResolution: [{ required: true, message: '风险及解决措施不能为空', trigger: 'blur' }] }; // 新增周报明细 @@ -675,165 +683,49 @@ onMounted(async () => { nextTick(async () => { // 获取路由参数 routeParams.value = route.query; - // 判断是否是从项目周报查看跳转过来的 - if ((routeParams.value.type === 'update' || routeParams.value.type === 'view') && routeParams.value.reportData) { - // 从项目周报查看跳转过来,使用传递的数据填充表单 - try { - const reportDataStr = routeParams.value.reportData as string; - const reportData = JSON.parse(decodeURIComponent(reportDataStr)); - // 根据ProjectReportVO接口提取参数填充表单 - if (reportData.reportId) { - form.value.reportId = reportData.reportId; - queryParams.value.reportId = reportData.reportId; - buttonLoading.value = true; - const res = await listProjectReportDetail(queryParams.value); - projectReportDetailList.value = res.rows; - total.value = res.total; - buttonLoading.value = false; - } - if (reportData.projectId) form.value.projectId = reportData.projectId; - if (reportData.projectName) form.value.projectName = reportData.projectName; - if (reportData.projectCode) form.value.projectCode = reportData.projectCode; - if (reportData.milestonePlan) form.value.milestonePlan = reportData.milestonePlan; - if (reportData.managerId) form.value.managerId = reportData.managerId; - if (reportData.deptId) form.value.deptId = reportData.deptId; - if (reportData.chargeId) form.value.chargeId = reportData.chargeId; - if (reportData.deputyId) form.value.deputyId = reportData.deputyId; - if (reportData.informationNote) form.value.informationNote = reportData.informationNote; - if (reportData.remark) form.value.remark = reportData.remark; - if (reportData.managerName) form.value.managerName = reportData.managerName; - if (reportData.deptName) form.value.deptName = reportData.deptName; - if (reportData.chargeName) form.value.chargeName = reportData.chargeName; - if (reportData.deputyName) form.value.deputyName = reportData.deputyName; - if (reportData.sortOrder !== undefined) form.value.sortOrder = reportData.sortOrder; - if (reportData.ossId) form.value.ossId = reportData.ossId; - if (reportData.activeFlag) form.value.activeFlag = reportData.activeFlag; - } catch (error) { - console.error('解析项目周报数据失败:', error); - proxy?.$modal.msgError('加载项目周报数据失败'); - } + // 是否为查看或更新 + const reportDataStr = routeParams.value.reportData as string; + if (reportDataStr && (routeParams.value.type === 'update' || routeParams.value.type === 'view' || routeParams.value.type === 'add')) { + proxy?.$modal.loading('正在加载数据,请稍后...'); + const reportData = JSON.parse(decodeURIComponent(reportDataStr)); + Object.assign(form.value, reportData); + Object.assign(projectReportForm.value, reportData); + // console.log(form.value); + // console.log(projectReportForm.value); + proxy?.$modal.closeLoading(); } else if (routeParams.value.type === 'add') { - // 新增模式:如果传递了项目信息,则填充表单 - if (routeParams.value.reportData) { - const reportDataStr = routeParams.value.reportData as string; - const reportData = JSON.parse(decodeURIComponent(reportDataStr)); - // 根据ProjectReportVO接口提取参数填充表单 - if (reportData.projectId) { - form.value.projectId = reportData.projectId; - projectReportForm.value.projectId = reportData.projectId; - } - if (reportData.reportId) { - form.value.reportId = reportData.reportId; - projectReportForm.value.reportId = reportData.reportId; - } - if (reportData.ossId) form.value.ossId = reportData.ossId; - if (reportData.projectName) form.value.projectName = reportData.projectName; - if (reportData.projectCode) form.value.projectCode = reportData.projectCode; - if (reportData.milestonePlan) form.value.milestonePlan = reportData.milestonePlan; - if (reportData.managerId) form.value.managerId = reportData.managerId; - if (reportData.deptId) form.value.deptId = reportData.deptId; - if (reportData.chargeId) form.value.chargeId = reportData.chargeId; - if (reportData.deputyId) form.value.deputyId = reportData.deputyId; - if (reportData.informationNote) form.value.informationNote = reportData.informationNote; - if (reportData.remark) form.value.remark = reportData.remark; - if (reportData.managerName) form.value.managerName = reportData.managerName; - if (reportData.deptName) form.value.deptName = reportData.deptName; - if (reportData.chargeName) form.value.chargeName = reportData.chargeName; - if (reportData.deputyName) form.value.deputyName = reportData.deputyName; - if (reportData.sortOrder !== undefined) form.value.sortOrder = reportData.sortOrder; - if (reportData.activeFlag) form.value.activeFlag = reportData.activeFlag; - } else { - } - } else if (routeParams.value.type === 'approval') { + } else if (routeParams.value.type === 'approval' || routeParams.value.type === 'view') { // 编辑或审批模式:从接口获取数据 - const id = routeParams.value.id; - if (id) { + const projectDetailReportId = routeParams.value.id; + if (projectDetailReportId) { proxy?.$modal.loading('正在加载数据,请稍后...'); - const res = await getContractInfo(id); - Object.assign(form.value, res.data); + const reportDetailRes = await getProjectReportDetail(projectDetailReportId); + const reportId = reportDetailRes.data.reportId; + if (reportId && routeParams.value.type === 'view') { + const reportRes = await getProjectReport(reportId); + Object.assign(form.value, reportRes.data); + Object.assign(projectReportForm.value, reportDetailRes.data); + projectReportDetailList.value = [reportDetailRes.data]; + } + if (reportId && routeParams.value.type === 'approval') { + const reportRes = await getProjectReport(reportId); + Object.assign(form.value, reportRes.data); + Object.assign(projectReportForm.value, reportDetailRes.data); + } proxy?.$modal.closeLoading(); } } }); }); -// onMounted(async () => { -// nextTick(async () => { -// // // 获取路由参数 -// // routeParams.value = route.query; -// // loadSelectOptions(); -// // const id = routeParams.value.id as string | number; -// // if (id && (routeParams.value.type === 'update' || routeParams.value.type === 'view' || routeParams.value.type === 'approval')) { -// // proxy?.$modal.loading('正在加载数据,请稍后...'); -// // const res = await getContractInfo(id); -// // Object.assign(form.value, res.data); -// // proxy?.$modal.closeLoading(); -// // // 编辑模式:如果已有合同编号,禁用生成按钮 -// // if (form.value.contractCode) { -// // isCodeGenerated.value = true; -// // } else if (form.value.contractFlag === '1') { -// // // 如果有合同但没有编号,允许生成 -// // isCodeGenerated.value = false; -// // } -// // } else { -// // // 新增模式:获取登录用户部门ID并自动赋值 -// // try { -// // const userInfoRes = await getInfo(); -// // if (userInfoRes.data?.user?.deptId && !form.value.contractDeptId) { -// // form.value.contractDeptId = userInfoRes.data.user.deptId; -// // } -// // } catch (error) { -// // console.error('获取用户信息失败:', error); -// // } -// // // 新增模式:如果已有合同编号,禁用生成按钮 -// // if (form.value.contractCode) { -// // isCodeGenerated.value = true; -// // } else if (form.value.contractFlag === '1') { -// // // 如果有合同但没有编号,允许生成 -// // isCodeGenerated.value = false; -// // } -// // } -// // 获取路由参数 -// routeParams.value = route.query; -// loadSelectOptions(); -// // 如果是新增且传递了项目信息,则填充表单 -// if (routeParams.value.type === 'add') { -// // 从路由参数中获取项目信息并赋值给表单 -// if (routeParams.value.projectId) { -// form.value.projectId = routeParams.value.projectId; -// form.value.projectName = routeParams.value.projectName; -// form.value.projectCode = routeParams.value.projectCode; -// form.value.managerId = routeParams.value.managerId; -// form.value.managerName = routeParams.value.managerName; -// form.value.deptId = routeParams.value.deptId; -// form.value.deptName = routeParams.value.deptName; -// form.value.chargeId = routeParams.value.chargeId; -// form.value.chargeName = routeParams.value.chargeName; -// form.value.deputyId = routeParams.value.deputyId; -// form.value.deputyName = routeParams.value.deputyName; -// } -// } -// // 如果是编辑模式,从接口获取数据(保持原有逻辑) -// if (routeParams.value.type === 'update' || routeParams.value.type === 'approval') { -// const id = routeParams.value.id; -// if (id) { -// proxy?.$modal.loading('正在加载数据,请稍后...'); -// const res = await getContractInfo(id); -// Object.assign(form.value, res.data); -// proxy?.$modal.closeLoading(); -// } -// } -// }); -// }); - // 审批记录 const handleApprovalRecord = () => { - approvalRecordRef.value.init(form.value.contractId); + approvalRecordRef.value.init(projectReportForm.value.reportDetailId); }; // 提交回调 const submitCallback = async () => { - await proxy.$tab.closePage(proxy.$route); + await proxy.$tab.closePage(route); router.go(-1); }; @@ -849,16 +741,30 @@ watch( (val) => { if (!dialog.visible) { ossFileModel.value = val as any; + projectReportForm.value.ossId = val as any; } } ); +const isCodeGenerated = ref(false); // 生成更规范的唯一标识 const generateUniqueId = () => { const timestamp = Date.now().toString(36); const randomStr = Math.random().toString(36).substr(2, 9); return `XMZB-${timestamp}-${randomStr}`; }; - +// 生成项目周报编号 +const generateCode = async () => { + if (isCodeGenerated.value) return; // 如果已经生成过,直接返回 + try { + const params = { codeRuleCode: CodeRuleEnum.PROJECT_REPORT } as any; + const res = await getRuleGenerateCode(params); + isCodeGenerated.value = true; // 标记为已生成 + return res.msg; + } catch (error) { + console.error('生成业务编号失败:', error); + proxy?.$modal.msgError('生成业务编号失败'); + } +}; /** 提交按钮 */ const submitForm = async (status: string, mode: boolean) => { try { diff --git a/src/views/oa/erp/projectReport/index.vue b/src/views/oa/erp/projectReport/index.vue index 5ed9386..268d134 100644 --- a/src/views/oa/erp/projectReport/index.vue +++ b/src/views/oa/erp/projectReport/index.vue @@ -147,7 +147,7 @@ - + @@ -155,7 +155,8 @@ - + +