|
|
|
|
@ -13,7 +13,7 @@
|
|
|
|
|
:mode="false"
|
|
|
|
|
/>
|
|
|
|
|
<el-form
|
|
|
|
|
ref="ProjectFormRef"
|
|
|
|
|
ref="projectFormRef"
|
|
|
|
|
:model="form"
|
|
|
|
|
:loading="buttonLoading"
|
|
|
|
|
:disabled="routeParams.type === 'view' || routeParams.type === 'approval'"
|
|
|
|
|
@ -169,7 +169,7 @@
|
|
|
|
|
:model="projectReportForm"
|
|
|
|
|
:loading="buttonLoading"
|
|
|
|
|
:disabled="routeParams.type === 'view' || routeParams.type === 'approval'"
|
|
|
|
|
:rules="rules"
|
|
|
|
|
:rules="reportRules"
|
|
|
|
|
label-width="120px"
|
|
|
|
|
v-if="routeParams.type == 'add' || routeParams.type === 'approval'"
|
|
|
|
|
>
|
|
|
|
|
@ -179,7 +179,7 @@
|
|
|
|
|
<el-input v-model="projectReportForm.reportId" placeholder="请输入项目周报ID" clearable @keyup.enter="console.log(1)" />
|
|
|
|
|
</el-form-item>
|
|
|
|
|
</el-col>
|
|
|
|
|
<el-col :span="12">
|
|
|
|
|
<el-col :span="12" v-show="false">
|
|
|
|
|
<el-form-item label="项目ID" prop="projectId">
|
|
|
|
|
<el-input v-model="projectReportForm.projectId" placeholder="请输入项目ID" clearable @keyup.enter="console.log(1)" />
|
|
|
|
|
</el-form-item>
|
|
|
|
|
@ -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<ElFormInstance>();
|
|
|
|
|
const projectFormRef = ref<ElFormInstance>();
|
|
|
|
|
|
|
|
|
|
// 审批相关组件引用
|
|
|
|
|
const submitVerifyRef = ref<InstanceType<typeof SubmitVerify>>();
|
|
|
|
|
@ -463,7 +464,14 @@ const data = reactive<PageData<ProjectReportForm, ProjectReportQuery>>({
|
|
|
|
|
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<FieldOption[]>([
|
|
|
|
|
{ key: 26, label: `更新时间`, visible: true }
|
|
|
|
|
]);
|
|
|
|
|
|
|
|
|
|
// 合同物料相关
|
|
|
|
|
// 项目周报明细表单引用
|
|
|
|
|
const projectReportFormRef = ref<ElFormInstance>();
|
|
|
|
|
|
|
|
|
|
// 合同物料表单数据
|
|
|
|
|
// 项目周报明细表单数据
|
|
|
|
|
const initprojectReportFormData: ProjectReportDetailFormEx = {
|
|
|
|
|
reportDetailId: undefined,
|
|
|
|
|
reportId: undefined,
|
|
|
|
|
@ -583,11 +591,11 @@ const initprojectReportFormData: ProjectReportDetailFormEx = {
|
|
|
|
|
|
|
|
|
|
const projectReportForm = ref<ProjectReportDetailFormEx>({ ...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 {
|
|
|
|
|
|