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

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 {
@ -142,6 +143,10 @@ export interface ProjectReportForm extends BaseEntity, extraInfo {
}
export interface ProjectReportQuery extends PageQuery, extraInfo {
/**
* ID
*/
reportId: string | number;
/**
* ID
*/

@ -1,6 +1,11 @@
import request from '@/utils/request';
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
});
}
/**
*
* @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
*/
@ -105,7 +106,7 @@ export interface ProjectReportDetailVO {
activeFlag: string;
}
export interface ProjectReportDetailForm extends BaseEntity {
export interface ProjectReportDetailForm extends BaseEntity, extraInfo {
/**
* ID
*/
@ -212,7 +213,7 @@ export interface ProjectReportDetailForm extends BaseEntity {
activeFlag?: string;
}
export interface ProjectReportDetailQuery extends PageQuery {
export interface ProjectReportDetailQuery extends PageQuery, extraInfo {
/**
* ID
*/
@ -313,3 +314,29 @@ export interface ProjectReportDetailQuery extends PageQuery {
*/
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 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-col :span="12">
<el-form-item label="有无合同" prop="contractFlag">
@ -169,7 +176,9 @@
<!-- 合同物料表格 -->
<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>
<el-table :data="contractMaterialList" v-loading="buttonLoading" border>
@ -436,14 +445,14 @@ const contractMaterialList = computed(() => {
/** 查询打印模板下拉框结构 */
const printTemplateList = ref([]);
const getPrintTemplateListSelect = async () => {
let res = await getBasePrintTemplateList(null);
const res = await getBasePrintTemplateList(null);
printTemplateList.value = res.data;
};
/** 查询单位信息下拉框结构 */
const unitInfoList = ref([]);
const getUnitInfoListSelect = async () => {
let res = await getBaseUnitInfoList(null);
const res = await getBaseUnitInfoList(null);
unitInfoList.value = res.data;
};
@ -451,14 +460,14 @@ const getUnitInfoListSelect = async () => {
const deptInfoList = ref([]);
const getDeptInfoListSelect = async () => {
const params = { deptCategory: '03' } as any;
let res = await allListDept(params);
const res = await allListDept(params);
deptInfoList.value = res.data;
};
/** 查询客户信息下拉框结构 */
const customerInfoList = ref([]);
const getCustomerInfoListSelect = async () => {
let res = await getCrmCustomerInfoList(null);
const res = await getCrmCustomerInfoList(null);
customerInfoList.value = res.data;
};
@ -537,7 +546,7 @@ const data = reactive<{ form: ContractInfoFormEx; rules: any }>({
contractFlag: [{ required: true, message: '有无合同不能为空', trigger: 'blur' }],
contractCode: [{ 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-col :span="12">
<el-form-item label="项目名称" prop="projectName">
<el-input v-model="queryParams.projectName" placeholder="请点击右侧图标选择项目">
<template #suffix>
<el-input v-model="queryParams.projectName" placeholder="请输入项目名称">
<!-- <template #suffix>
<el-icon style="cursor: pointer; margin-right: 4px; font-size: 14px" @click="openProjectSelect">
<Search />
</el-icon>
</template>
</template> -->
</el-input>
</el-form-item>
</el-col>
@ -45,6 +45,11 @@
<el-input v-model="queryParams.chargeName" placeholder="请输入部门负责人" clearable />
</el-form-item>
</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-form-item label="项目ID" prop="projectId">
<el-input v-model="queryParams.projectId" placeholder="请点击右侧图标选择项目" />
@ -109,13 +114,13 @@
</div>
</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">
<template #header>
<el-row :gutter="10" class="mb8">
<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 :span="1.5">
<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="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" 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">
<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-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 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>
</template>
</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" />
</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>
</template>
@ -213,6 +189,7 @@
import { ProjectReportVO, ProjectReportQuery, ProjectReportForm } from '@/api/oa/erp/projectReport/types';
import { listProjectReport, getProjectReport, delProjectReport, addProjectReport, updateProjectReport } from '@/api/oa/erp/projectReport';
import ProjectSelect from '@/components/ProjectSelect/index.vue';
import { report } from 'process';
const { proxy } = getCurrentInstance() as ComponentInternalInstance;
@ -286,6 +263,7 @@ const data = reactive<PageData<ProjectReportForm, ProjectReportQuery>>({
queryParams: {
pageNum: 1,
pageSize: 10,
reportId: undefined,
projectId: undefined,
projectName: undefined,
projectCode: undefined,
@ -326,7 +304,7 @@ const resetQuery = () => {
queryFormRef.value?.resetFields();
handleQuery();
};
/** 根据部门查询项目周报信息列表 */
/** 查询项目周报信息列表 */
const getList = async () => {
loading.value = true;
const res = await listProjectReport(queryParams.value);
@ -381,32 +359,50 @@ const handleSelectionChange = (selection: ProjectReportVO[]) => {
single.value = selection.length != 1;
multiple.value = !selection.length;
};
/** 新增按钮操作 */
const handleAdd = () => {
const handleAdd = (row?: ProjectReportVO) => {
reset();
proxy.$tab.closePage(route);
//
const routeParams = {
type: 'add',
projectId: queryParams.value.projectId,
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
reportData: null
};
if (row && Object.keys(row).length > 0) {
routeParams.reportData = encodeURIComponent(JSON.stringify(row));
}
router.push({
path: '/project/projectReport/edit',
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) => {
reset();
@ -417,23 +413,6 @@ const handleUpdate = async (row?: ProjectReportVO) => {
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 _reportIds = row?.reportId || ids.value;

Loading…
Cancel
Save