项目周报查询,项目周报提交

dev
lh 2 weeks ago
parent 196b845e18
commit fd5569a5a7

@ -67,6 +67,7 @@ export interface ProjectReportVO extends extraInfo {
/** /**
* *
*/ */
projectCode?: string;
} }
export interface ProjectReportForm extends BaseEntity, extraInfo { export interface ProjectReportForm extends BaseEntity, extraInfo {
@ -142,6 +143,10 @@ export interface ProjectReportForm extends BaseEntity, extraInfo {
} }
export interface ProjectReportQuery extends PageQuery, extraInfo { export interface ProjectReportQuery extends PageQuery, extraInfo {
/**
* ID
*/
reportId: string | number;
/** /**
* ID * ID
*/ */

@ -1,6 +1,11 @@
import request from '@/utils/request'; import request from '@/utils/request';
import { AxiosPromise } from 'axios'; import { AxiosPromise } from 'axios';
import { ProjectReportDetailVO, ProjectReportDetailForm, ProjectReportDetailQuery } from '@/api/oa/erp/projectReportDetail/types'; import {
ProjectReportDetailVO,
ProjectReportDetailForm,
ProjectReportDetailQuery,
ProjectReportAndDetailWrapper
} from '@/api/oa/erp/projectReportDetail/types';
/** /**
* *
@ -74,3 +79,15 @@ export function getErpProjectReportDetailList(query) {
params: query params: query
}); });
} }
/**
*
* @param data
*/
export const projectReportSubmitAndFlowStart = (data: ProjectReportAndDetailWrapper): AxiosPromise<ProjectReportDetailVO> => {
return request({
url: '/oa/erp/projectReportDetail/projectReportSubmitAndFlowStart',
method: 'post',
data: data
});
};

@ -1,4 +1,5 @@
export interface ProjectReportDetailVO { import { ProjectReportVO, ProjectReportForm, ProjectReportQuery } from '@/api/oa/erp/projectReport/types';
export interface ProjectReportDetailVO extends extraInfo {
/** /**
* ID * ID
*/ */
@ -105,7 +106,7 @@ export interface ProjectReportDetailVO {
activeFlag: string; activeFlag: string;
} }
export interface ProjectReportDetailForm extends BaseEntity { export interface ProjectReportDetailForm extends BaseEntity, extraInfo {
/** /**
* ID * ID
*/ */
@ -212,7 +213,7 @@ export interface ProjectReportDetailForm extends BaseEntity {
activeFlag?: string; activeFlag?: string;
} }
export interface ProjectReportDetailQuery extends PageQuery { export interface ProjectReportDetailQuery extends PageQuery, extraInfo {
/** /**
* ID * ID
*/ */
@ -313,3 +314,29 @@ export interface ProjectReportDetailQuery extends PageQuery {
*/ */
params?: any; params?: any;
} }
export interface extraInfo {
deptName?: string;
managerName?: string;
chargeName?: string;
deputyName?: string;
}
// 扩展的项目周报明细表单类型(包含流程相关字段)
export type ProjectReportDetailFormEx = ProjectReportDetailForm & {
flowCode?: string;
variables?: Record<string, any>;
bizExt?: Record<string, any>;
flowStatus?: string;
projectReportStatus?: string;
file?: any;
};
// 项目周报和明细包装类类型
export type ProjectReportAndDetailWrapper = {
projectReport: ProjectReportForm;
projectDetailReport: ProjectReportDetailFormEx;
};

@ -17,7 +17,14 @@
/> />
</el-card> </el-card>
<el-card shadow="never" style="margin-top: 0"> <el-card shadow="never" style="margin-top: 0">
<el-form ref="contractInfoFormRef" :model="form" :loading="buttonLoading" :disabled="routeParams.type === 'view' || routeParams.type === 'approval'" :rules="rules" label-width="120px"> <el-form
ref="contractInfoFormRef"
:model="form"
:loading="buttonLoading"
:disabled="routeParams.type === 'view' || routeParams.type === 'approval'"
:rules="rules"
label-width="120px"
>
<el-row :gutter="20"> <el-row :gutter="20">
<el-col :span="12"> <el-col :span="12">
<el-form-item label="有无合同" prop="contractFlag"> <el-form-item label="有无合同" prop="contractFlag">
@ -169,7 +176,9 @@
<!-- 合同物料表格 --> <!-- 合同物料表格 -->
<div style="margin-bottom: 16px"> <div style="margin-bottom: 16px">
<el-button type="primary" icon="Plus" v-if="routeParams.type !== 'view' && routeParams.type != 'approval'" @click="handleAddMaterial"> </el-button> <el-button type="primary" icon="Plus" v-if="routeParams.type !== 'view' && routeParams.type != 'approval'" @click="handleAddMaterial"
>新增物料
</el-button>
</div> </div>
<el-table :data="contractMaterialList" v-loading="buttonLoading" border> <el-table :data="contractMaterialList" v-loading="buttonLoading" border>
@ -436,14 +445,14 @@ const contractMaterialList = computed(() => {
/** 查询打印模板下拉框结构 */ /** 查询打印模板下拉框结构 */
const printTemplateList = ref([]); const printTemplateList = ref([]);
const getPrintTemplateListSelect = async () => { const getPrintTemplateListSelect = async () => {
let res = await getBasePrintTemplateList(null); const res = await getBasePrintTemplateList(null);
printTemplateList.value = res.data; printTemplateList.value = res.data;
}; };
/** 查询单位信息下拉框结构 */ /** 查询单位信息下拉框结构 */
const unitInfoList = ref([]); const unitInfoList = ref([]);
const getUnitInfoListSelect = async () => { const getUnitInfoListSelect = async () => {
let res = await getBaseUnitInfoList(null); const res = await getBaseUnitInfoList(null);
unitInfoList.value = res.data; unitInfoList.value = res.data;
}; };
@ -451,14 +460,14 @@ const getUnitInfoListSelect = async () => {
const deptInfoList = ref([]); const deptInfoList = ref([]);
const getDeptInfoListSelect = async () => { const getDeptInfoListSelect = async () => {
const params = { deptCategory: '03' } as any; const params = { deptCategory: '03' } as any;
let res = await allListDept(params); const res = await allListDept(params);
deptInfoList.value = res.data; deptInfoList.value = res.data;
}; };
/** 查询客户信息下拉框结构 */ /** 查询客户信息下拉框结构 */
const customerInfoList = ref([]); const customerInfoList = ref([]);
const getCustomerInfoListSelect = async () => { const getCustomerInfoListSelect = async () => {
let res = await getCrmCustomerInfoList(null); const res = await getCrmCustomerInfoList(null);
customerInfoList.value = res.data; customerInfoList.value = res.data;
}; };
@ -537,7 +546,7 @@ const data = reactive<{ form: ContractInfoFormEx; rules: any }>({
contractFlag: [{ required: true, message: '有无合同不能为空', trigger: 'blur' }], contractFlag: [{ required: true, message: '有无合同不能为空', trigger: 'blur' }],
contractCode: [{ required: true, message: '合同编号不能为空', trigger: 'blur' }], contractCode: [{ required: true, message: '合同编号不能为空', trigger: 'blur' }],
contractName: [{ required: true, message: '合同名称不能为空', trigger: 'blur' }], contractName: [{ required: true, message: '合同名称不能为空', trigger: 'blur' }],
paymentMethod: [{ required: true, message: '付款方式不能为空', trigger: 'blur' }], paymentMethod: [{ required: true, message: '付款方式不能为空', trigger: 'blur' }]
} }
}); });

File diff suppressed because it is too large Load Diff

@ -7,12 +7,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="queryParams.projectName" placeholder="请点击右侧图标选择项目"> <el-input v-model="queryParams.projectName" placeholder="请输入项目名称">
<template #suffix> <!-- <template #suffix>
<el-icon style="cursor: pointer; margin-right: 4px; font-size: 14px" @click="openProjectSelect"> <el-icon style="cursor: pointer; margin-right: 4px; font-size: 14px" @click="openProjectSelect">
<Search /> <Search />
</el-icon> </el-icon>
</template> </template> -->
</el-input> </el-input>
</el-form-item> </el-form-item>
</el-col> </el-col>
@ -45,6 +45,11 @@
<el-input v-model="queryParams.chargeName" placeholder="请输入部门负责人" clearable /> <el-input v-model="queryParams.chargeName" placeholder="请输入部门负责人" clearable />
</el-form-item> </el-form-item>
</el-col> </el-col>
<el-col :span="12" v-show="false">
<el-form-item label="周报ID" prop="reportId">
<el-input v-model="queryParams.reportId" 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="queryParams.projectId" placeholder="请点击右侧图标选择项目" /> <el-input v-model="queryParams.projectId" placeholder="请点击右侧图标选择项目" />
@ -109,13 +114,13 @@
</div> </div>
</transition> </transition>
<ProjectSelect ref="projectSelectRef" :multiple="false" @confirm-call-back="projectInfoSelectCallBack"></ProjectSelect> <!-- <ProjectSelect ref="projectSelectRef" :multiple="false" @confirm-call-back="projectInfoSelectCallBack"></ProjectSelect> -->
<el-card shadow="never"> <el-card shadow="never">
<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" v-hasPermi="['oa/erp:projectReport:add']"></el-button> <el-button type="primary" plain icon="Plus" @click="handleAdd(null)" 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']"
@ -151,13 +156,25 @@
<el-table-column label="备注" align="center" prop="remark" v-if="columns[12].visible" /> <el-table-column label="备注" align="center" prop="remark" v-if="columns[12].visible" />
<el-table-column label="激活标识" align="center" prop="activeFlag" v-if="columns[13].visible" /> <el-table-column label="激活标识" align="center" prop="activeFlag" v-if="columns[13].visible" />
<!-- <el-table-column label="创建时间" align="center" prop="createTime" v-if="columns[20].visible" /> --> <!-- <el-table-column label="创建时间" align="center" prop="createTime" v-if="columns[20].visible" /> -->
<el-table-column label="操作" align="center" fixed="right" class-name="small-padding fixed-width"> <el-table-column label="操作" align="center" width="150" fixed="right" class-name="small-padding fixed-width">
<template #default="scope"> <template #default="scope">
<el-tooltip content="新增" placement="top">
<el-button link type="primary" icon="Plus" @click="handleAdd(scope.row)" v-hasPermi="['oa/erp:projectReport:add']"></el-button>
</el-tooltip>
<el-tooltip content="查看详情" placement="top">
<el-button link type="info" icon="DocumentChecked" @click="handleView(scope.row)"></el-button>
</el-tooltip>
<el-tooltip content="修改" placement="top"> <el-tooltip content="修改" placement="top">
<el-button link type="primary" icon="Edit" @click="handleUpdate(scope.row)" v-hasPermi="['oa:projectReport:edit']"></el-button> <el-button
link
type="primary"
icon="Edit"
@click="handleUpdateReport(scope.row)"
v-hasPermi="['oa/erp:projectReport:edit']"
></el-button>
</el-tooltip> </el-tooltip>
<el-tooltip content="删除" placement="top"> <el-tooltip content="删除" placement="top">
<el-button link type="primary" icon="Delete" @click="handleDelete(scope.row)" v-hasPermi="['oa:projectReport:remove']"></el-button> <el-button link type="primary" icon="Delete" @click="handleDelete(scope.row)" v-hasPermi="['oa/erp:projectReport:remove']"></el-button>
</el-tooltip> </el-tooltip>
</template> </template>
</el-table-column> </el-table-column>
@ -165,47 +182,6 @@
<pagination v-show="total > 0" :total="total" v-model:page="queryParams.pageNum" v-model:limit="queryParams.pageSize" @pagination="getList" /> <pagination v-show="total > 0" :total="total" v-model:page="queryParams.pageNum" v-model:limit="queryParams.pageSize" @pagination="getList" />
</el-card> </el-card>
<!-- 添加或修改项目周报信息对话框 -->
<el-dialog :title="dialog.title" v-model="dialog.visible" width="500px" append-to-body>
<el-form ref="projectReportFormRef" :model="form" :rules="rules" label-width="120px">
<el-form-item label="项目名称" prop="projectName">
<el-input v-model="form.projectName" placeholder="请输入项目名称" />
</el-form-item>
<el-form-item label="项目编号" prop="projectCode">
<el-input v-model="form.projectCode" placeholder="请输入项目编号" />
</el-form-item>
<el-form-item label="当前里程碑" prop="milestonePlan">
<el-input v-model="form.milestonePlan" placeholder="请输入当前里程碑" />
</el-form-item>
<el-form-item label="项目经理" prop="managerId">
<el-input v-model="form.managerId" placeholder="请输入项目经理" />
</el-form-item>
<el-form-item label="部门ID" prop="deptId">
<el-input v-model="form.deptId" placeholder="请输入部门ID" />
</el-form-item>
<el-form-item label="部门负责人" prop="chargeId">
<el-input v-model="form.chargeId" placeholder="请输入部门负责人" />
</el-form-item>
<el-form-item label="分管副总" prop="deputyId">
<el-input v-model="form.deputyId" placeholder="请输入分管副总" />
</el-form-item>
<el-form-item label="周报情况说明" prop="informationNote">
<el-input v-model="form.informationNote" type="textarea" placeholder="请输入内容" />
</el-form-item>
<el-form-item label="附件ID" prop="ossId">
<el-input v-model="form.ossId" placeholder="请输入附件ID" />
</el-form-item>
<el-form-item label="备注" prop="remark">
<el-input v-model="form.remark" placeholder="请输入备注" />
</el-form-item>
</el-form>
<template #footer>
<div class="dialog-footer">
<el-button :loading="buttonLoading" type="primary" @click="submitForm"> </el-button>
<el-button @click="cancel"> </el-button>
</div>
</template>
</el-dialog>
</div> </div>
</template> </template>
@ -213,6 +189,7 @@
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 ProjectSelect from '@/components/ProjectSelect/index.vue'; import ProjectSelect from '@/components/ProjectSelect/index.vue';
import { report } from 'process';
const { proxy } = getCurrentInstance() as ComponentInternalInstance; const { proxy } = getCurrentInstance() as ComponentInternalInstance;
@ -286,6 +263,7 @@ const data = reactive<PageData<ProjectReportForm, ProjectReportQuery>>({
queryParams: { queryParams: {
pageNum: 1, pageNum: 1,
pageSize: 10, pageSize: 10,
reportId: undefined,
projectId: undefined, projectId: undefined,
projectName: undefined, projectName: undefined,
projectCode: undefined, projectCode: undefined,
@ -326,7 +304,7 @@ const resetQuery = () => {
queryFormRef.value?.resetFields(); queryFormRef.value?.resetFields();
handleQuery(); handleQuery();
}; };
/** 根据部门查询项目周报信息列表 */ /** 查询项目周报信息列表 */
const getList = async () => { const getList = async () => {
loading.value = true; loading.value = true;
const res = await listProjectReport(queryParams.value); const res = await listProjectReport(queryParams.value);
@ -381,32 +359,50 @@ const handleSelectionChange = (selection: ProjectReportVO[]) => {
single.value = selection.length != 1; single.value = selection.length != 1;
multiple.value = !selection.length; multiple.value = !selection.length;
}; };
/** 新增按钮操作 */ /** 新增按钮操作 */
const handleAdd = () => { const handleAdd = (row?: ProjectReportVO) => {
reset(); reset();
proxy.$tab.closePage(route); proxy.$tab.closePage(route);
//
const routeParams = { const routeParams = {
type: 'add', type: 'add',
projectId: queryParams.value.projectId, reportData: null
projectName: queryParams.value.projectName,
projectCode: queryParams.value.projectCode,
managerId: queryParams.value.managerId,
managerName: queryParams.value.managerName,
deptId: queryParams.value.deptId,
deptName: queryParams.value.deptName,
chargeId: queryParams.value.chargeId,
chargeName: queryParams.value.chargeName,
deputyId: queryParams.value.deputyId,
deputyName: queryParams.value.deputyName
}; };
if (row && Object.keys(row).length > 0) {
routeParams.reportData = encodeURIComponent(JSON.stringify(row));
}
router.push({ router.push({
path: '/project/projectReport/edit', path: '/project/projectReport/edit',
query: routeParams query: routeParams
}); });
}; };
/** 查看按钮操作 */
const handleView = (row?: ProjectReportVO) => {
reset();
proxy.$tab.closePage(route);
router.push({
path: '/project/projectReport/edit',
query: {
type: 'view',
// 便使
reportData: encodeURIComponent(JSON.stringify(row))
}
});
};
/** 修改按钮操作 */
const handleUpdateReport = (row?: ProjectReportVO) => {
reset();
const _projectId = row?.projectId;
proxy.$tab.closePage(route);
router.push({
path: '/project/projectReport/edit',
query: {
id: _projectId,
type: 'update',
// 便使
reportData: encodeURIComponent(JSON.stringify(row))
}
});
};
/** 修改按钮操作 */ /** 修改按钮操作 */
const handleUpdate = async (row?: ProjectReportVO) => { const handleUpdate = async (row?: ProjectReportVO) => {
reset(); reset();
@ -417,23 +413,6 @@ const handleUpdate = async (row?: ProjectReportVO) => {
dialog.title = '修改项目周报信息'; dialog.title = '修改项目周报信息';
}; };
/** 提交按钮 */
const submitForm = () => {
projectReportFormRef.value?.validate(async (valid: boolean) => {
if (valid) {
buttonLoading.value = true;
if (form.value.reportId) {
await updateProjectReport(form.value).finally(() => (buttonLoading.value = false));
} else {
await addProjectReport(form.value).finally(() => (buttonLoading.value = false));
}
proxy?.$modal.msgSuccess('操作成功');
dialog.visible = false;
await getList();
}
});
};
/** 删除按钮操作 */ /** 删除按钮操作 */
const handleDelete = async (row?: ProjectReportVO) => { const handleDelete = async (row?: ProjectReportVO) => {
const _reportIds = row?.reportId || ids.value; const _reportIds = row?.reportId || ids.value;

Loading…
Cancel
Save