项目周报完善

dev
lh 1 week ago
parent e3c3c9bc9d
commit d4aa14cc21

@ -78,6 +78,11 @@
<el-input v-model="form.informationNote" type="textarea" placeholder="请说明情况" /> <el-input v-model="form.informationNote" type="textarea" placeholder="请说明情况" />
</el-form-item> </el-form-item>
</el-col> </el-col>
<el-col :span="12">
<el-form-item label="备注" prop="remark">
<el-input v-model="form.remark" type="textarea" placeholder="请输入备注" />
</el-form-item>
</el-col>
<el-col :span="12" v-show="false"> <el-col :span="12" v-show="false">
<el-form-item label="项目ID" prop="projectId"> <el-form-item label="项目ID" prop="projectId">
<el-input v-model="form.projectId" placeholder="请点击右侧图标选择项目" /> <el-input v-model="form.projectId" placeholder="请点击右侧图标选择项目" />
@ -134,16 +139,67 @@
<template #header> <template #header>
<div style="text-align: left; font-weight: bold; font-size: 18px">项目周报具体信息</div> <div style="text-align: left; font-weight: bold; font-size: 18px">项目周报具体信息</div>
</template> </template>
<el-card shadow="never">
<template #header>
<el-row :gutter="10" class="mb8">
<el-col :span="1.5">
<el-button
type="success"
plain
icon="Edit"
:disabled="single"
@click="handleUpdate()"
v-if="routeParams.type === 'view' && routeParams.reportData"
v-hasPermi="['oa/erp:projectReportDetail:edit']"
>修改</el-button
>
</el-col>
<el-col :span="1.5">
<el-button
type="danger"
plain
icon="Delete"
:disabled="multiple"
@click="handleDelete()"
v-if="routeParams.type === 'view' && routeParams.reportData"
v-hasPermi="['oa/erp:projectReportDetail:remove']"
>删除</el-button
>
</el-col>
<el-col :span="1.5">
<el-button
type="warning"
plain
icon="Download"
@click="handleExport"
v-hasPermi="['oa/erp:projectReportDetail:export']"
v-if="routeParams.type === 'view'"
>导出</el-button
>
</el-col>
<right-toolbar v-model:showSearch="showSearch" :columns="columns" :search="false" @queryTable="getProjectDetail"></right-toolbar>
</el-row>
</template>
<!-- 项目周报具体信息表格 --> <!-- 项目周报具体信息表格 -->
<div style="margin-bottom: 16px"> <!-- <div style="margin-bottom: 16px">
<el-button
type="success"
plain
icon="Edit"
:disabled="single"
@click="handleUpdate()"
v-if="routeParams.type === 'view' && routeParams.reportData"
v-hasPermi="['oa/erp:projectReportDetail:edit']"
>修改</el-button
>
<el-button <el-button
type="danger" type="danger"
plain plain
icon="Delete" icon="Delete"
:disabled="multiple" :disabled="multiple"
@click="handleDelete()" @click="handleDelete()"
v-if="routeParams.type === 'view'" v-if="routeParams.type === 'view' && routeParams.reportData"
v-hasPermi="['oa/erp:projectReportDetail:remove']" v-hasPermi="['oa/erp:projectReportDetail:remove']"
>删除</el-button >删除</el-button
> >
@ -156,62 +212,63 @@
v-if="routeParams.type === 'view'" v-if="routeParams.type === 'view'"
>导出</el-button >导出</el-button
> >
</div> </div> -->
<el-table <el-table
v-loading="buttonLoading" v-loading="loading"
border border
:data="projectReportDetailList" :data="projectReportDetailList"
v-if="routeParams.type !== 'add' && routeParams.type !== 'approval'" v-if="routeParams.type !== 'add' && routeParams.type !== 'approval'"
@selection-change="handleSelectionChange" @selection-change="handleSelectionChange"
> >
<el-table-column type="selection" width="55" align="center" /> <el-table-column type="selection" width="55" align="center" />
<el-table-column label="项目周报明细ID" align="center" prop="reportDetailId" v-if="columns[0].visible" /> <el-table-column label="项目周报明细ID" align="center" prop="reportDetailId" v-if="columns[0].visible" />
<el-table-column label="项目周报ID" align="center" prop="reportId" v-if="columns[1].visible" /> <el-table-column label="项目周报ID" align="center" prop="reportId" v-if="columns[1].visible" />
<el-table-column label="项目ID" align="center" prop="projectId" v-if="columns[2].visible" /> <el-table-column label="项目ID" align="center" prop="projectId" v-if="columns[2].visible" />
<el-table-column label="填写日期" align="center" prop="fillTime" width="180" v-if="columns[3].visible"> <el-table-column label="填写日期" align="center" prop="fillTime" width="180" v-if="columns[3].visible">
<template #default="scope"> <template #default="scope">
<span>{{ parseTime(scope.row.fillTime, '{y}-{m}-{d} {h}:{i}:{s}') }}</span> <span>{{ parseTime(scope.row.fillTime, '{y}-{m}-{d} {h}:{i}:{s}') }}</span>
</template> </template>
</el-table-column> </el-table-column>
<el-table-column label="所在的工作周" align="center" prop="currentWorkWeek" v-if="columns[4].visible" /> <el-table-column label="所在的工作周" align="center" prop="currentWorkWeek" v-if="columns[4].visible" />
<el-table-column label="所属里程碑" align="center" prop="milestonePlan" v-if="columns[5].visible" /> <el-table-column label="所属里程碑" align="center" prop="milestonePlan" v-if="columns[5].visible" />
<el-table-column label="二级进度阶段" align="center" prop="secondaryPhase" v-if="columns[6].visible" /> <el-table-column label="二级进度阶段" align="center" prop="secondaryPhase" v-if="columns[6].visible" />
<el-table-column label="本周完成工作" align="center" prop="tasksCompleted" v-if="columns[7].visible" /> <el-table-column label="本周完成工作" align="center" prop="tasksCompleted" v-if="columns[7].visible" />
<el-table-column label="下周计划" align="center" prop="nextPlan" v-if="columns[8].visible" /> <el-table-column label="下周计划" align="center" prop="nextPlan" v-if="columns[8].visible" />
<el-table-column label="风险及解决措施" align="center" prop="riskResolution" v-if="columns[9].visible" /> <el-table-column label="风险及解决措施" align="center" prop="riskResolution" v-if="columns[9].visible" />
<el-table-column label="项目状态" align="center" prop="scheduleStatus" v-if="columns[12].visible"> <el-table-column label="项目状态" align="center" prop="scheduleStatus" v-if="columns[12].visible">
<template #default="scope"> <template #default="scope">
<dict-tag :options="project_risk_status" :value="scope.row.scheduleStatus" /> <dict-tag :options="project_risk_status" :value="scope.row.scheduleStatus" />
</template> </template>
</el-table-column> </el-table-column>
<el-table-column label="计划完成率" align="center" prop="plannedCompletionRate" v-if="columns[10].visible" /> <el-table-column label="计划完成率" align="center" prop="plannedCompletionRate" v-if="columns[10].visible" />
<el-table-column label="周报情况说明" align="center" prop="informationNote" v-if="columns[11].visible" /> <el-table-column label="周报情况说明" align="center" prop="informationNote" v-if="columns[11].visible" />
<el-table-column label="周报状态(1暂存 2审批中 3可用)" align="center" prop="projectReportStatus" v-if="columns[13].visible"> <el-table-column label="周报状态(1暂存 2审批中 3可用)" align="center" prop="projectReportStatus" v-if="columns[13].visible">
<template #default="scope"> <template #default="scope">
<dict-tag :options="project_report_status" :value="scope.row.projectReportStatus" /> <dict-tag :options="project_report_status" :value="scope.row.projectReportStatus" />
</template> </template>
</el-table-column> </el-table-column>
<el-table-column label="流程状态" align="center" prop="flowStatus" v-if="columns[14].visible" /> <el-table-column label="流程状态" align="center" prop="flowStatus" v-if="columns[14].visible" />
<el-table-column label="排序号" align="center" prop="sortOrder" v-if="columns[15].visible" /> <el-table-column label="排序号" align="center" prop="sortOrder" v-if="columns[15].visible" />
<el-table-column label="项目阶段(预留)" align="center" prop="projectPhases" v-if="columns[16].visible" /> <el-table-column label="项目阶段(预留)" align="center" prop="projectPhases" v-if="columns[16].visible" />
<el-table-column label="合同ID(预留)" align="center" prop="contractId" v-if="columns[17].visible" /> <el-table-column label="合同ID(预留)" align="center" prop="contractId" v-if="columns[17].visible" />
<el-table-column label="附件ID" align="center" prop="ossId" v-if="columns[18].visible" /> <el-table-column label="附件ID" align="center" prop="ossId" v-if="columns[18].visible" />
<el-table-column label="备注" align="center" prop="remark" v-if="columns[19].visible" /> <el-table-column label="备注" align="center" prop="remark" v-if="columns[19].visible" />
<el-table-column label="激活标识" align="center" prop="activeFlag" v-if="columns[20].visible" /> <el-table-column label="激活标识" align="center" prop="activeFlag" v-if="columns[20].visible" />
<el-table-column label="操作" align="center" fixed="right" width="150" v-if="routeParams.type !== 'view' && routeParams.type != 'approval'"> <el-table-column label="操作" align="center" fixed="right" width="150" v-if="routeParams.type !== 'view' && routeParams.type != 'approval'">
<template #default="scope"> <!-- <template #default="scope">
<el-button link type="primary" icon="Edit" @click="handleEditMaterial(scope.row)"></el-button> <el-button link type="primary" icon="Edit" @click="handleEditMaterial(scope.row)"></el-button>
<el-button link type="danger" icon="Delete" @click="handleDeleteMaterial(scope.row)"></el-button> <el-button link type="danger" icon="Delete" @click="handleDeleteMaterial(scope.row)"></el-button>
</template> </template> -->
</el-table-column> </el-table-column>
</el-table> </el-table>
<pagination <pagination
v-show="total > 0 && routeParams.type === 'view'" v-show="total > 0 && routeParams.type === 'view'"
:total="total" :total="total"
v-model:page="projectReportFormQuery.pageNum" v-model:page="projectReportFormQuery.pageNum"
v-model:limit="projectReportFormQuery.pageSize" v-model:limit="projectReportFormQuery.pageSize"
@pagination="getProjectDetail" @pagination="getProjectDetail"
/> />
</el-card>
<el-form <el-form
ref="projectReportDetailFormRef" ref="projectReportDetailFormRef"
:model="projectReportForm" :model="projectReportForm"
@ -224,12 +281,12 @@
<el-row :gutter="20"> <el-row :gutter="20">
<el-col :span="12" v-show="false"> <el-col :span="12" v-show="false">
<el-form-item label="项目周报ID" prop="reportId"> <el-form-item label="项目周报ID" prop="reportId">
<el-input v-model="projectReportForm.reportId" placeholder="请输入项目周报ID" clearable @keyup.enter="console.log(1)" /> <el-input v-model="projectReportForm.reportId" placeholder="请输入项目周报ID" clearable />
</el-form-item> </el-form-item>
</el-col> </el-col>
<el-col :span="12" v-show="false"> <el-col :span="12" v-show="false">
<el-form-item label="项目ID" prop="projectId"> <el-form-item label="项目ID" prop="projectId">
<el-input v-model="projectReportForm.projectId" placeholder="请输入项目ID" clearable @keyup.enter="console.log(1)" /> <el-input v-model="projectReportForm.projectId" placeholder="请输入项目ID" clearable />
</el-form-item> </el-form-item>
</el-col> </el-col>
<el-col :span="12"> <el-col :span="12">
@ -328,66 +385,157 @@
</el-card> </el-card>
<!-- 添加或修改项目周报明细对话框 --> <!-- 添加或修改项目周报明细对话框 -->
<el-dialog :title="ReportDialog.title" v-model="ReportDialog.visible" width="500px" append-to-body> <el-dialog :title="ReportDialog.title" v-model="ReportDialog.visible" width="800px" append-to-body>
<el-form ref="projectReportDetailFormRef" :model="projectReportForm" :rules="rules" label-width="120px"> <el-form ref="projectReportDetailDialogFormRef" :model="detailForm" :rules="rules" label-width="120px">
<el-form-item label="项目周报ID" prop="reportId"> <el-row :gutter="10" class="form-row">
<el-input v-model="projectReportForm.reportId" placeholder="请输入项目周报ID" /> <el-col :span="12">
</el-form-item> <el-form-item label="项目周报ID" prop="reportId">
<el-form-item label="项目ID" prop="projectId"> <el-input v-model="detailForm.reportId" placeholder="请输入项目周报ID" :disabled="true" />
<el-input v-model="projectReportForm.projectId" placeholder="请输入项目ID" /> </el-form-item>
</el-form-item> </el-col>
<el-form-item label="填写日期" prop="fillTime"> <el-col :span="12">
<el-date-picker <el-form-item label="项目ID" prop="projectId">
clearable <el-input v-model="detailForm.projectId" placeholder="请输入项目ID" :disabled="true" />
v-model="projectReportForm.fillTime" </el-form-item>
type="datetime" </el-col>
value-format="YYYY-MM-DD HH:mm:ss" </el-row>
placeholder="请选择填写日期" <el-row :gutter="10" class="form-row">
> <el-col :span="12">
</el-date-picker> <el-form-item label="填写日期" prop="fillTime">
</el-form-item> <el-date-picker
<el-form-item label="所在的工作周" prop="currentWorkWeek"> clearable
<el-input v-model="projectReportForm.currentWorkWeek" placeholder="请输入所在的工作周" /> v-model="detailForm.fillTime"
</el-form-item> type="datetime"
<el-form-item label="所属里程碑" prop="milestonePlan"> value-format="YYYY-MM-DD HH:mm:ss"
<el-input v-model="projectReportForm.milestonePlan" placeholder="请输入所属里程碑" /> placeholder="请选择填写日期"
</el-form-item> style="width: 100%"
<el-form-item label="二级进度阶段" prop="secondaryPhase"> />
<el-input v-model="projectReportForm.secondaryPhase" placeholder="请输入二级进度阶段" /> </el-form-item>
</el-form-item> </el-col>
<el-form-item label="本周完成工作" prop="tasksCompleted"> <el-col :span="12">
<el-input v-model="projectReportForm.tasksCompleted" type="textarea" placeholder="请输入内容" /> <el-form-item label="所在的工作周" prop="currentWorkWeek">
</el-form-item> <el-input v-model="detailForm.currentWorkWeek" placeholder="请输入所在的工作周" />
<el-form-item label="下周计划" prop="nextPlan"> </el-form-item>
<el-input v-model="projectReportForm.nextPlan" type="textarea" placeholder="请输入内容" /> </el-col>
</el-form-item> </el-row>
<el-form-item label="风险及解决措施" prop="riskResolution"> <el-row :gutter="10" class="form-row">
<el-input v-model="projectReportForm.riskResolution" type="textarea" placeholder="请输入内容" /> <el-col :span="12">
</el-form-item> <el-form-item label="所属里程碑" prop="milestonePlan">
<el-form-item label="计划完成率" prop="plannedCompletionRate"> <el-input v-model="detailForm.milestonePlan" placeholder="请输入所属里程碑" />
<el-input v-model="projectReportForm.plannedCompletionRate" placeholder="请输入计划完成率" /> </el-form-item>
</el-form-item> </el-col>
<el-form-item label="周报情况说明" prop="informationNote"> <el-col :span="12">
<el-input v-model="projectReportForm.informationNote" type="textarea" placeholder="请输入内容" /> <el-form-item label="二级进度阶段" prop="secondaryPhase">
</el-form-item> <el-input v-model="detailForm.secondaryPhase" placeholder="请输入二级进度阶段" />
<el-form-item label="排序号" prop="sortOrder"> </el-form-item>
<el-input v-model="projectReportForm.sortOrder" placeholder="请输入排序号" /> </el-col>
</el-form-item> </el-row>
<el-form-item label="项目阶段(预留)" prop="projectPhases">
<el-input v-model="projectReportForm.projectPhases" placeholder="请输入项目阶段(预留)" /> <el-row :gutter="10" class="form-row">
</el-form-item> <el-col :span="24">
<el-form-item label="合同ID(预留)" prop="contractId"> <el-form-item label="本周完成工作" prop="tasksCompleted">
<el-input v-model="projectReportForm.contractId" placeholder="请输入合同ID(预留)" /> <el-input v-model="detailForm.tasksCompleted" type="textarea" placeholder="请输入内容" :rows="4" />
</el-form-item> </el-form-item>
<el-form-item label="附件ID" prop="ossId"> </el-col>
<el-input v-model="projectReportForm.ossId" placeholder="请输入附件ID" /> </el-row>
</el-form-item>
<el-form-item label="备注" prop="remark"> <el-row :gutter="10" class="form-row">
<el-input v-model="projectReportForm.remark" placeholder="请输入备注" /> <el-col :span="24">
</el-form-item> <el-form-item label="下周计划" prop="nextPlan">
<el-form-item label="激活标识" prop="activeFlag"> <el-input v-model="detailForm.nextPlan" type="textarea" placeholder="请输入内容" :rows="4" />
<el-input v-model="projectReportForm.activeFlag" placeholder="请输入激活标识" /> </el-form-item>
</el-form-item> </el-col>
</el-row>
<el-row :gutter="10" class="form-row">
<el-col :span="24">
<el-form-item label="风险及解决措施" prop="riskResolution">
<el-input v-model="detailForm.riskResolution" type="textarea" placeholder="请输入内容" :rows="4" />
</el-form-item>
</el-col>
</el-row>
<el-row :gutter="10" class="form-row">
<el-col :span="12">
<el-form-item label="计划完成率" prop="plannedCompletionRate">
<el-input v-model="detailForm.plannedCompletionRate" placeholder="请输入计划完成率">
<template #append>%</template>
</el-input>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="项目状态" prop="scheduleStatus">
<el-select v-model="detailForm.scheduleStatus" placeholder="请选择项目状态">
<el-option label="正常" value="1" />
<el-option label="拖期风险" value="2" />
<el-option label="已拖期" value="3" />
</el-select>
</el-form-item>
</el-col>
</el-row>
<el-row :gutter="10" class="form-row">
<el-col :span="12">
<el-form-item label="周报状态" prop="projectReportStatus">
<el-select v-model="detailForm.projectReportStatus" placeholder="请选择周报状态" :disabled="true">
<el-option label="暂存" value="1" />
<el-option label="审批中" value="2" />
<el-option label="可用" value="3" />
</el-select>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="流程状态" prop="flowStatus">
<el-input v-model="detailForm.flowStatus" placeholder="流程状态" :disabled="true" />
</el-form-item>
</el-col>
</el-row>
<el-row :gutter="10" class="form-row">
<el-col :span="12">
<el-form-item label="项目阶段" prop="projectPhases">
<el-input v-model="detailForm.projectPhases" placeholder="请输入项目阶段(预留)" />
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="合同ID" prop="contractId">
<el-input v-model="detailForm.contractId" placeholder="请输入合同ID(预留)" />
</el-form-item>
</el-col>
</el-row>
<el-row :gutter="10" class="form-row">
<el-col :span="12">
<el-form-item label="排序号" prop="sortOrder">
<el-input v-model="detailForm.sortOrder" placeholder="请输入排序号" />
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="附件" prop="ossId">
<el-button type="primary" plain icon="Upload" @click="handleFile"></el-button>
<span v-if="detailForm.ossId" style="margin-left: 10px; color: #409eff"></span>
</el-form-item>
</el-col>
</el-row>
<el-row :gutter="10" class="form-row">
<el-col :span="24">
<el-form-item label="周报情况说明" prop="informationNote">
<el-input v-model="detailForm.informationNote" type="textarea" placeholder="请输入内容" :rows="3" />
</el-form-item>
</el-col>
</el-row>
<el-row :gutter="10" class="form-row">
<el-col :span="24">
<el-form-item label="备注" prop="remark">
<el-input v-model="detailForm.remark" type="textarea" placeholder="请输入备注" :rows="3" />
</el-form-item>
</el-col>
</el-row>
<!-- 隐藏字段 -->
<el-row :gutter="10" class="form-row" v-show="false">
<el-col :span="12">
<el-form-item label="激活标识" prop="activeFlag">
<el-input v-model="detailForm.activeFlag" placeholder="请输入激活标识" />
</el-form-item>
</el-col>
</el-row>
</el-form> </el-form>
<template #footer> <template #footer>
<div class="dialog-footer"> <div class="dialog-footer">
@ -421,20 +569,12 @@
</template> </template>
<script setup name="ProjectReportEdit" lang="ts"> <script setup name="ProjectReportEdit" lang="ts">
import { ContractMaterialVO, ContractprojectReportForm } from '@/api/oa/erp/contractMaterial/types';
import { getBaseUnitInfoList } from '@/api/oa/base/unitInfo';
import { getRuleGenerateCode } from '@/api/system/codeRule'; import { getRuleGenerateCode } from '@/api/system/codeRule';
import { startWorkFlow } from '@/api/workflow/task';
import { StartProcessBo } from '@/api/workflow/workflowCommon/types'; import { StartProcessBo } from '@/api/workflow/workflowCommon/types';
import SubmitVerify from '@/components/Process/submitVerify.vue'; import SubmitVerify from '@/components/Process/submitVerify.vue';
import ApprovalRecord from '@/components/Process/approvalRecord.vue'; import ApprovalRecord from '@/components/Process/approvalRecord.vue';
import ApprovalButton from '@/components/Process/approvalButton.vue';
import { ref } from 'vue'; import { ref } from 'vue';
import { allListDept, listDept } from '@/api/system/dept';
import { getCrmCustomerInfoList } from '@/api/oa/crm/customerInfo';
import { getBasePrintTemplateList } from '@/api/oa/base/printTemplate';
import { CodeRuleEnum, FlowCodeEnum } from '@/enums/OAEnum'; import { CodeRuleEnum, FlowCodeEnum } from '@/enums/OAEnum';
import { getInfo } from '@/api/login';
import { ProjectReportVO, ProjectReportQuery, ProjectReportForm } from '@/api/oa/erp/projectReport/types'; import { ProjectReportVO, ProjectReportQuery, ProjectReportForm } from '@/api/oa/erp/projectReport/types';
import { listProjectReport, getProjectReport, delProjectReport, addProjectReport, updateProjectReport } from '@/api/oa/erp/projectReport'; import { listProjectReport, getProjectReport, delProjectReport, addProjectReport, updateProjectReport } from '@/api/oa/erp/projectReport';
import { import {
@ -451,7 +591,6 @@ import {
ProjectReportDetailForm, ProjectReportDetailForm,
ProjectReportDetailFormEx ProjectReportDetailFormEx
} from '@/api/oa/erp/projectReportDetail/types'; } from '@/api/oa/erp/projectReportDetail/types';
import { fa, tr } from 'element-plus/es/locale/index.mjs';
import ProjectSelect from '@/components/ProjectSelect/index.vue'; import ProjectSelect from '@/components/ProjectSelect/index.vue';
const { proxy } = getCurrentInstance() as ComponentInternalInstance; const { proxy } = getCurrentInstance() as ComponentInternalInstance;
@ -485,7 +624,7 @@ const flowInstanceBizExtBo = ref<Record<string, any>>({});
const type = ref(0); const type = ref(0);
const total = ref(0); const total = ref(0);
const loading = ref(false);
// //
const CACHE_KEYS = { const CACHE_KEYS = {
PROJECT_REPORT_DRAFT: 'project_report_draft_data', PROJECT_REPORT_DRAFT: 'project_report_draft_data',
@ -550,6 +689,61 @@ const data = reactive<PageData<ProjectReportForm, ProjectReportQuery>>({
const { form, queryParams, rules } = toRefs(data); const { form, queryParams, rules } = toRefs(data);
const initProjectReportDetailFormData: ProjectReportDetailForm = {
reportDetailId: undefined,
reportId: undefined,
projectId: undefined,
fillTime: undefined,
currentWorkWeek: undefined,
milestonePlan: undefined,
secondaryPhase: undefined,
tasksCompleted: undefined,
nextPlan: undefined,
riskResolution: undefined,
plannedCompletionRate: undefined,
informationNote: undefined,
scheduleStatus: undefined,
projectReportStatus: undefined,
flowStatus: undefined,
sortOrder: undefined,
projectPhases: undefined,
contractId: undefined,
ossId: undefined,
remark: undefined,
activeFlag: undefined
};
const projectReportDetailData = reactive<PageData<ProjectReportDetailForm, ProjectReportDetailQuery>>({
form: { ...initProjectReportDetailFormData },
queryParams: {
pageNum: 1,
pageSize: 10,
reportId: undefined,
projectId: undefined,
fillTime: undefined,
currentWorkWeek: undefined,
milestonePlan: undefined,
secondaryPhase: undefined,
tasksCompleted: undefined,
nextPlan: undefined,
riskResolution: undefined,
plannedCompletionRate: undefined,
informationNote: undefined,
scheduleStatus: undefined,
projectReportStatus: undefined,
flowStatus: undefined,
sortOrder: undefined,
projectPhases: undefined,
contractId: undefined,
ossId: undefined,
activeFlag: undefined,
params: {}
},
rules: {}
});
//
const { form: detailForm, queryParams: detailQueryParams, rules: detailRules } = toRefs(projectReportDetailData);
// OSS // OSS
const dialog = reactive<DialogOption>({ const dialog = reactive<DialogOption>({
visible: false, visible: false,
@ -562,45 +756,20 @@ const projectReportList = ref<ProjectReportVO[]>([]);
const openProjectSelect = () => { const openProjectSelect = () => {
projectSelectRef.value.open(); projectSelectRef.value.open();
}; };
/** 查询项目周报信息列表 */
const getList = async () => {
// loading.value = true;
const res = await listProjectReport(queryParams.value);
projectReportList.value = res.rows;
// loading.value = false;
};
// //
const projectInfoSelectCallBack = (data: any) => { const projectInfoSelectCallBack = (data: any) => {
if (data.length > 0) { if (data.length > 0) {
setFromProjectInfo(data); Object.assign(form.value, data[0]);
getList();
} else { } else {
projectFormRef.value?.resetFields(); projectFormRef.value?.resetFields();
proxy?.$modal.msgWarning('请选择项目信息'); proxy?.$modal.msgWarning('请选择项目信息');
getList();
} }
}; };
//
const setFromProjectInfo = (data: any) => {
const projectInfoList = data;
form.value.projectId = projectInfoList[0].projectId;
form.value.projectName = projectInfoList[0].projectName;
form.value.projectCode = projectInfoList[0].projectCode;
form.value.managerId = projectInfoList[0].managerId;
form.value.milestonePlan = projectInfoList[0].milestonePlan;
form.value.deptId = projectInfoList[0].deptId;
form.value.chargeId = projectInfoList[0].chargeId;
form.value.deputyId = projectInfoList[0].deputyId;
form.value.managerName = projectInfoList[0].managerName;
form.value.deptName = projectInfoList[0].deptName;
form.value.chargeName = projectInfoList[0].chargeName;
form.value.deputyName = projectInfoList[0].deputyName;
};
/** 文件按钮操作 */ /** 文件按钮操作 */
const handleFile = () => { const handleFile = () => {
type.value = 0; type.value = 0;
dialog.visible = true; dialog.visible = true;
dialog.title = '上传合同附件'; dialog.title = '上传周报附件';
// //
ossFileModel.value = form.value.ossId as any; ossFileModel.value = form.value.ossId as any;
}; };
@ -634,21 +803,6 @@ const handleSelectionChange = (selection: ProjectReportDetailVO[]) => {
single.value = selection.length != 1; single.value = selection.length != 1;
multiple.value = !selection.length; multiple.value = !selection.length;
}; };
//
const hasReportDetails = computed(() => {
return (
projectReportDetailList.value &&
projectReportDetailList.value.length > 0 &&
projectReportDetailList.value[0] &&
Object.keys(projectReportDetailList.value[0]).some(
(key) =>
projectReportDetailList.value[0][key] !== null &&
projectReportDetailList.value[0][key] !== undefined &&
projectReportDetailList.value[0][key] !== ''
)
);
});
// //
const columns = ref<FieldOption[]>([ const columns = ref<FieldOption[]>([
{ key: 0, label: `项目周报明细ID`, visible: false }, { key: 0, label: `项目周报明细ID`, visible: false },
@ -682,9 +836,10 @@ const columns = ref<FieldOption[]>([
// //
const projectReportFormRef = ref<ElFormInstance>(); const projectReportFormRef = ref<ElFormInstance>();
const projectReportDetailDialogFormRef = ref<ElFormInstance>();
// //
const initprojectReportFormData: ProjectReportDetailFormEx = { const initProjectReportFormData: ProjectReportDetailFormEx = {
reportDetailId: undefined, reportDetailId: undefined,
reportId: undefined, reportId: undefined,
projectId: undefined, projectId: undefined,
@ -711,7 +866,8 @@ const initprojectReportFormData: ProjectReportDetailFormEx = {
variables: undefined variables: undefined
} as any; } as any;
const projectReportForm = ref<ProjectReportDetailFormEx>({ ...initprojectReportFormData }); const projectReportForm = ref<ProjectReportDetailFormEx>({ ...initProjectReportFormData });
const projectReportFormQuery = ref<ProjectReportDetailQuery>({ const projectReportFormQuery = ref<ProjectReportDetailQuery>({
pageNum: 1, pageNum: 1,
pageSize: 10, pageSize: 10,
@ -809,7 +965,20 @@ const formattedPlannedCompletionRate = computed(() => {
// 2 // 2
return `${(value * 100).toFixed(2)}%`; return `${(value * 100).toFixed(2)}%`;
}); });
/** 表单重置 */
const reset = () => {
detailForm.value = { ...initProjectReportDetailFormData };
projectReportDetailDialogFormRef.value?.resetFields();
};
/** 修改按钮操作 */
const handleUpdate = async (row?: ProjectReportDetailVO) => {
reset();
const _reportDetailId = row?.reportDetailId || ids.value[0];
const res = await getProjectReportDetail(_reportDetailId);
Object.assign(detailForm.value, res.data);
ReportDialog.visible = true;
ReportDialog.title = '修改项目周报明细';
};
/** 删除按钮操作 */ /** 删除按钮操作 */
const handleDelete = async (row?: ProjectReportDetailVO) => { const handleDelete = async (row?: ProjectReportDetailVO) => {
const _reportDetailIds = row?.reportDetailId || ids.value; const _reportDetailIds = row?.reportDetailId || ids.value;
@ -819,48 +988,20 @@ const handleDelete = async (row?: ProjectReportDetailVO) => {
await getProjectDetail(); await getProjectDetail();
}; };
//
const handleEditMaterial = (row: ContractMaterialVO) => {
resetProjectReportForm();
projectReportForm.value = { ...row };
ReportDialog.visible = true;
ReportDialog.title = '编辑合同物料';
};
//
const handleDeleteMaterial = async (row: ContractMaterialVO) => {
await proxy?.$modal.confirm('是否确认删除该合同物料?');
try {
// contractMaterialList
if (!(form.value as any).contractMaterialList) {
(form.value as any).contractMaterialList = [];
}
//
const index = (form.value as any).contractMaterialList.findIndex((item: any) => item.contractMaterialId === row.contractMaterialId);
if (index !== -1) {
(form.value as any).contractMaterialList.splice(index, 1);
}
proxy?.$modal.msgSuccess('删除成功');
} catch (error) {
console.error('删除合同物料失败:', error);
}
};
/** 导出按钮操作 */ /** 导出按钮操作 */
const handleExport = () => { const handleExport = () => {
proxy?.download( proxy?.download(
'oa/erp/projectReportDetail/export', 'oa/erp/projectReportDetail/export',
{ {
...queryParams.value reportId: form.value.reportId
}, },
`projectReportDetail_${new Date().getTime()}.xlsx` `projectReportDetail_${new Date().getTime()}.xlsx`
); );
}; };
// //
const resetProjectReportForm = () => { const resetProjectReportForm = () => {
projectReportForm.value = { ...initprojectReportFormData }; detailForm.value = { ...initProjectReportDetailFormData };
projectReportFormRef.value?.resetFields(); projectReportDetailDialogFormRef.value?.resetFields();
}; };
// //
@ -869,34 +1010,18 @@ const cancelProjectReportForm = () => {
ReportDialog.visible = false; ReportDialog.visible = false;
}; };
// - /** 提交按钮 */
const submitProjectReportForm = () => { const submitProjectReportForm = () => {
projectReportFormRef.value?.validate((valid: boolean) => { projectReportDetailDialogFormRef.value?.validate(async (valid: boolean) => {
if (valid) { if (valid) {
// contractMaterialList if (detailForm.value.reportDetailId) {
if (!(form.value as any).contractMaterialList) { await updateProjectReportDetail(detailForm.value).finally(() => (buttonLoading.value = false));
(form.value as any).contractMaterialList = [];
}
if (projectReportForm.value.contractMaterialId) {
//
const index = (form.value as any).contractMaterialList.findIndex(
(item: any) => item.contractMaterialId === projectReportForm.value.contractMaterialId
);
if (index !== -1) {
(form.value as any).contractMaterialList[index] = { ...projectReportForm.value };
}
} else { } else {
// await addProjectReportDetail(detailForm.value).finally(() => (buttonLoading.value = false));
const newMaterial = {
...projectReportForm.value,
contractMaterialId: Date.now() // ID
};
(form.value as any).contractMaterialList.push(newMaterial);
} }
proxy?.$modal.msgSuccess('操作成功'); proxy?.$modal.msgSuccess('操作成功');
ReportDialog.visible = false; ReportDialog.visible = false;
await getProjectDetail();
} }
}); });
}; };
@ -1071,8 +1196,6 @@ const saveToDraftCache = () => {
// //
proxy?.$cache.local.setJSON(CACHE_KEYS.PROJECT_REPORT_DETAIL_DRAFT, projectReportForm.value); proxy?.$cache.local.setJSON(CACHE_KEYS.PROJECT_REPORT_DETAIL_DRAFT, projectReportForm.value);
console.log('草稿数据已保存到缓存');
} catch (error) { } catch (error) {
console.error('保存草稿到缓存失败:', error); console.error('保存草稿到缓存失败:', error);
} }
@ -1113,7 +1236,6 @@ const clearDraftCache = () => {
try { try {
proxy?.$cache.local.remove(CACHE_KEYS.PROJECT_REPORT_DRAFT); proxy?.$cache.local.remove(CACHE_KEYS.PROJECT_REPORT_DRAFT);
proxy?.$cache.local.remove(CACHE_KEYS.PROJECT_REPORT_DETAIL_DRAFT); proxy?.$cache.local.remove(CACHE_KEYS.PROJECT_REPORT_DETAIL_DRAFT);
console.log('草稿缓存已清除');
} catch (error) { } catch (error) {
console.error('清除草稿缓存失败:', error); console.error('清除草稿缓存失败:', error);
} }
@ -1130,11 +1252,11 @@ const handleClearDraft = () => {
initDefaultDate(); initDefaultDate();
}; };
const getProjectDetail = async () => { const getProjectDetail = async () => {
const res = await listProjectReportDetail(projectReportFormQuery.value); loading.value = true;
buttonLoading.value = true; const res = await listProjectReportDetail({ pageNum: 1, pageSize: 10, reportId: form.value.reportId });
projectReportDetailList.value = res.rows; projectReportDetailList.value = res.rows;
total.value = res.total; total.value = res.total;
buttonLoading.value = false; loading.value = false;
}; };
/** 提交按钮 */ /** 提交按钮 */
const submitForm = async (status: string, mode: boolean) => { const submitForm = async (status: string, mode: boolean) => {
@ -1188,8 +1310,7 @@ const submitForm = async (status: string, mode: boolean) => {
const msg = await generateCode(); const msg = await generateCode();
// //
projectReportForm.value.variables = { projectReportForm.value.variables = {
projectId: projectReportForm.value.projectId, projectId: form.value.projectId
reportId: projectReportForm.value.reportId
}; };
// //
projectReportForm.value.bizExt = { projectReportForm.value.bizExt = {
@ -1197,6 +1318,7 @@ const submitForm = async (status: string, mode: boolean) => {
businessCode: msg businessCode: msg
}; };
// 使 // 使
projectReportForm.value.projectId = form.value.projectId;
const requestData = { const requestData = {
projectReport: form.value, // projectReport: form.value, //
projectDetailReport: projectReportForm.value // projectDetailReport: projectReportForm.value //
@ -1246,12 +1368,7 @@ onMounted(async () => {
Object.assign(projectReportForm.value, reportData); Object.assign(projectReportForm.value, reportData);
projectReportForm.value.informationNote = ''; projectReportForm.value.informationNote = '';
} else if (routeParams.value.type === 'view') { } else if (routeParams.value.type === 'view') {
Object.assign(projectReportFormQuery.value, reportData.reportId); await getProjectDetail();
const res = await listProjectReportDetail(projectReportFormQuery.value);
buttonLoading.value = true;
projectReportDetailList.value = res.rows;
total.value = res.total;
buttonLoading.value = false;
} }
proxy?.$modal.closeLoading(); proxy?.$modal.closeLoading();
} else if (routeParams.value.type === 'add') { } else if (routeParams.value.type === 'add') {

@ -113,7 +113,7 @@
<template #header> <template #header>
<el-row :gutter="10" class="mb8"> <el-row :gutter="10" class="mb8">
<el-col :span="1.5"> <el-col :span="1.5">
<el-button type="primary" plain icon="Plus" @click="handleAdd(null)" v-hasPermi="['oa/erp:projectReport:add']"></el-button> <el-button type="primary" plain icon="Plus" @click="handleAdd" v-hasPermi="['oa/erp:projectReport:add']"></el-button>
</el-col> </el-col>
<el-col :span="1.5"> <el-col :span="1.5">
<el-button type="success" plain icon="Edit" :disabled="single" @click="handleUpdate()" v-hasPermi="['oa/erp:projectReport:edit']" <el-button type="success" plain icon="Edit" :disabled="single" @click="handleUpdate()" v-hasPermi="['oa/erp:projectReport:edit']"
@ -182,12 +182,12 @@
<el-row :gutter="10" class="form-row"> <el-row :gutter="10" class="form-row">
<el-col :span="12"> <el-col :span="12">
<el-form-item label="项目名称" prop="projectName"> <el-form-item label="项目名称" prop="projectName">
<el-input v-model="form.projectName" placeholder="请输入项目名称" /> <el-input v-model="form.projectName" placeholder="请输入项目名称" :disabled="true" />
</el-form-item> </el-form-item>
</el-col> </el-col>
<el-col :span="12"> <el-col :span="12">
<el-form-item label="项目编码" prop="projectCode"> <el-form-item label="项目编码" prop="projectCode">
<el-input v-model="form.projectCode" placeholder="请输入项目编码" /> <el-input v-model="form.projectCode" placeholder="请输入项目编码" :disabled="true" />
</el-form-item> </el-form-item>
</el-col> </el-col>
</el-row> </el-row>
@ -199,7 +199,15 @@
</el-col> </el-col>
<el-col :span="12"> <el-col :span="12">
<el-form-item label="部门" prop="deptId"> <el-form-item label="部门" prop="deptId">
<el-select v-model="form.deptId" placeholder="请选择部门" clearable filterable :loading="loadingUsers" @change="handleDeptChange"> <el-select
v-model="form.deptId"
placeholder="请选择部门"
clearable
filterable
:loading="loadingUsers"
@change="handleDeptChange"
:disabled="true"
>
<el-option v-for="item in deptList" :key="item.deptId" :label="item.deptName" :value="item.deptId" /> <el-option v-for="item in deptList" :key="item.deptId" :label="item.deptName" :value="item.deptId" />
</el-select> </el-select>
</el-form-item> </el-form-item>
@ -213,7 +221,7 @@
placeholder="请选择项目经理" placeholder="请选择项目经理"
clearable clearable
filterable filterable
:disabled="!form.deptId" :disabled="true || !form.deptId"
@change="handleManagerChange" @change="handleManagerChange"
> >
<el-option v-for="user in managerList" :key="user.nickName" :label="user.nickName" :value="user.userId" /> <el-option v-for="user in managerList" :key="user.nickName" :label="user.nickName" :value="user.userId" />
@ -227,7 +235,7 @@
placeholder="请选择部门负责人" placeholder="请选择部门负责人"
clearable clearable
filterable filterable
:disabled="!form.deptId" :disabled="true || !form.deptId"
@change="handleChargeChange" @change="handleChargeChange"
> >
<el-option v-for="user in chargeList" :key="user.nickName" :label="user.nickName" :value="user.userId" /> <el-option v-for="user in chargeList" :key="user.nickName" :label="user.nickName" :value="user.userId" />
@ -243,16 +251,16 @@
placeholder="请选择分管副总" placeholder="请选择分管副总"
clearable clearable
filterable filterable
:disabled="!form.deptId" :disabled="true || !form.deptId"
@change="handleDeputyChange" @change="handleDeputyChange"
> >
<el-option v-for="user in deputyList" :key="user.nickName" :label="user.nickName" :value="user.userId" /> <el-option v-for="user in deputyList" :key="user.nickName" :label="user.nickName" :value="user.userId" />
</el-select> </el-select>
</el-form-item> </el-form-item>
</el-col> </el-col>
<el-col :span="12" v-show="false"> <el-col :span="12">
<el-form-item label="附件ID" prop="ossId"> <el-form-item label="附件" prop="ossId">
<el-input v-model="form.ossId" placeholder="请输入附件ID" /> <el-button type="primary" plain icon="Upload" @click="handleFile"></el-button>
</el-form-item> </el-form-item>
</el-col> </el-col>
</el-row> </el-row>
@ -300,6 +308,22 @@
</div> </div>
</template> </template>
</el-dialog> </el-dialog>
<!-- 添加或修改OSS对象存储对话框 -->
<el-dialog v-model="dialogOSS.visible" :title="dialogOSS.title" width="500px" append-to-body>
<el-form ref="ossFormRef" :model="form" :rules="rules" label-width="80px">
<el-form-item label="文件名">
<fileUpload v-if="type === 0" v-model="ossFileModel" />
<imageUpload v-if="type === 1" v-model="ossFileModel" />
</el-form-item>
</el-form>
<template #footer>
<div class="dialog-footer">
<el-button type="primary" @click="submitOss"> </el-button>
<el-button @click="cancelOss"> </el-button>
</div>
</template>
</el-dialog>
</el-card> </el-card>
</div> </div>
</template> </template>
@ -312,6 +336,7 @@ import { report } from 'process';
import { fa } from 'element-plus/es/locale/index.mjs'; import { fa } from 'element-plus/es/locale/index.mjs';
import { allListDept, listDept } from '@/api/system/dept'; import { allListDept, listDept } from '@/api/system/dept';
import { listUserByDeptAndRole, listUserByDeptId } from '@/api/system/user'; import { listUserByDeptAndRole, listUserByDeptId } from '@/api/system/user';
import { delProjectReportDetailByReportId } from '@/api/oa/erp/projectReportDetail/index';
const { proxy } = getCurrentInstance() as ComponentInternalInstance; const { proxy } = getCurrentInstance() as ComponentInternalInstance;
@ -336,6 +361,7 @@ const dialog = reactive<DialogOption>({
visible: false, visible: false,
title: '' title: ''
}); });
// //
const columns = ref<FieldOption[]>([ const columns = ref<FieldOption[]>([
{ key: 0, label: `项目周报ID`, visible: false }, { key: 0, label: `项目周报ID`, visible: false },
@ -350,7 +376,7 @@ const columns = ref<FieldOption[]>([
{ key: 9, label: `周报情况说明`, visible: true }, { key: 9, label: `周报情况说明`, visible: true },
{ key: 10, label: `排序号`, visible: false }, { key: 10, label: `排序号`, visible: false },
{ key: 11, label: `附件ID`, visible: true }, { key: 11, label: `附件ID`, visible: true },
{ key: 12, label: `备注`, visible: false }, { key: 12, label: `备注`, visible: true },
{ key: 13, label: `激活标识`, visible: false }, { key: 13, label: `激活标识`, visible: false },
{ key: 14, label: `删除标志`, visible: false }, { key: 14, label: `删除标志`, visible: false },
{ key: 15, label: `创建部门`, visible: true }, { key: 15, label: `创建部门`, visible: true },
@ -412,6 +438,45 @@ const data = reactive<PageData<ProjectReportForm, ProjectReportQuery>>({
const { queryParams, form, rules } = toRefs(data); const { queryParams, form, rules } = toRefs(data);
const type = ref(0);
// OSS
const dialogOSS = reactive<DialogOption>({
visible: false,
title: ''
});
/** 文件按钮操作 */
const handleFile = () => {
type.value = 0;
dialogOSS.visible = true;
dialogOSS.title = '上传周报附件';
//
ossFileModel.value = form.value.ossId as any;
};
// OSS v-model form
const ossFileModel = ref<string | string[] | undefined>(undefined);
// v-model ossId
const submitOss = () => {
// ossId
form.value.ossId = ossFileModel.value as any;
dialogOSS.visible = false;
proxy?.$modal.msgSuccess('附件已更新');
};
function cancelOss() {
dialogOSS.visible = false;
}
// ossId
//
watch(
() => form.value.ossId,
(val) => {
if (!dialog.visible) {
ossFileModel.value = val as any;
// form.value.ossId = val as any;
}
}
);
const deptList = ref<any[]>([]); const deptList = ref<any[]>([]);
const managerList = ref<any[]>([]); const managerList = ref<any[]>([]);
const chargeList = ref<any[]>([]); const chargeList = ref<any[]>([]);
@ -451,7 +516,6 @@ const getUsersByDept = async (deptId: number | string) => {
// //
managerList.value = currentDeptUsers.data || []; managerList.value = currentDeptUsers.data || [];
chargeList.value = currentDeptUsers.data || []; chargeList.value = currentDeptUsers.data || [];
// //
if (currentDept.parentId && currentDept.parentId !== '0') { if (currentDept.parentId && currentDept.parentId !== '0') {
const parentDeptUsers = await listUserByDeptId(currentDept.parentId); const parentDeptUsers = await listUserByDeptId(currentDept.parentId);
@ -512,10 +576,6 @@ const handleDeputyChange = (userId: number | string) => {
form.value.deputyName = selectedUser.nickName || selectedUser.label; form.value.deputyName = selectedUser.nickName || selectedUser.label;
} }
}; };
//
const openProjectSelect = () => {
projectSelectRef.value.open();
};
/** 搜索按钮操作 */ /** 搜索按钮操作 */
const handleQuery = () => { const handleQuery = () => {
queryParams.value.pageNum = 1; queryParams.value.pageNum = 1;
@ -535,46 +595,16 @@ const getList = async () => {
total.value = res.total; total.value = res.total;
loading.value = false; loading.value = false;
}; };
/** 对话框表单重置 */
//
const projectInfoSelectCallBack = (data: any) => {
if (data.length > 0) {
setFromProjectInfo(data);
getList();
} else {
queryFormRef.value?.resetFields();
proxy?.$modal.msgWarning('请选择项目信息');
getList();
}
};
//
const setFromProjectInfo = (data: any) => {
const projectInfoList = data;
queryParams.value.projectId = projectInfoList[0].projectId;
queryParams.value.projectName = projectInfoList[0].projectName;
queryParams.value.projectCode = projectInfoList[0].projectCode;
queryParams.value.managerId = projectInfoList[0].managerId;
queryParams.value.milestonePlan = projectInfoList[0].milestonePlan;
queryParams.value.deptId = projectInfoList[0].deptId;
queryParams.value.chargeId = projectInfoList[0].chargeId;
queryParams.value.deputyId = projectInfoList[0].deputyId;
queryParams.value.managerName = projectInfoList[0].managerName;
queryParams.value.deptName = projectInfoList[0].deptName;
queryParams.value.chargeName = projectInfoList[0].chargeName;
queryParams.value.deputyName = projectInfoList[0].deputyName;
};
/** 取消按钮 */
const cancel = () => {
reset();
dialog.visible = false;
};
/** 所有表单重置 */
const reset = () => { const reset = () => {
form.value = { ...initFormData }; form.value = { ...initFormData };
projectReportFormRef.value?.resetFields(); projectReportFormRef.value?.resetFields();
}; };
/** 对话框取消按钮 */
const cancel = () => {
reset();
dialog.visible = false;
};
/** 多选框选中数据 */ /** 多选框选中数据 */
const handleSelectionChange = (selection: ProjectReportVO[]) => { const handleSelectionChange = (selection: ProjectReportVO[]) => {
@ -645,6 +675,9 @@ const handleUpdateReport = (row?: ProjectReportVO) => {
/** 修改按钮操作 */ /** 修改按钮操作 */
const handleUpdate = async (row?: ProjectReportVO) => { const handleUpdate = async (row?: ProjectReportVO) => {
reset(); reset();
//
proxy?.$modal.loading('正在导出数据,请稍后...');
const _reportId = row?.reportId || ids.value[0]; const _reportId = row?.reportId || ids.value[0];
const res = await getProjectReport(_reportId); const res = await getProjectReport(_reportId);
@ -655,14 +688,9 @@ const handleUpdate = async (row?: ProjectReportVO) => {
// //
if (form.value.deptId) { if (form.value.deptId) {
await getUsersByDept(form.value.deptId); await getUsersByDept(form.value.deptId);
const a = listUserByDeptId(form.value.deptId);
console.log(a);
//
console.log('项目经理列表:', managerList.value);
console.log('部门负责人列表:', chargeList.value);
console.log('分管副总列表:', deputyList.value);
} }
//
proxy?.$modal.closeLoading();
dialog.visible = true; dialog.visible = true;
dialog.title = '修改项目周报信息'; dialog.title = '修改项目周报信息';
}; };

@ -80,7 +80,7 @@
<el-col :span="1.5"> <el-col :span="1.5">
<el-button type="warning" plain icon="Download" @click="handleExport" v-hasPermi="['oa:projectReportDetail:export']"></el-button> <el-button type="warning" plain icon="Download" @click="handleExport" v-hasPermi="['oa:projectReportDetail:export']"></el-button>
</el-col> </el-col>
<right-toolbar v-model:showSearch="showSearch" :columns="columns" :search="true" @queryTable="getList"></right-toolbar> <right-toolbar :columns="columns" @queryTable="getList"></right-toolbar>
</el-row> </el-row>
</template> </template>

Loading…
Cancel
Save