Browse Source

优化项目合并和拆分

master
zhouhaibin 2 months ago
parent
commit
f695994809
  1. 97
      src/views/ProcessApprovalSubPage/MergeProjectApprova.vue
  2. 97
      src/views/ProcessApprovalSubPage/SplitProjectApprova.vue
  3. 6
      src/views/ProcessApprovalSubPage/component/ApprovalPageModel.vue
  4. 59
      src/views/ProcessApprovalSubPage/component/MergeProjectDetail.vue
  5. 75
      src/views/ProcessApprovalSubPage/component/SplitProjectDetail.vue
  6. 14
      src/views/ProcessApprovalSubPage/projectPlanApproval.vue
  7. 7
      src/views/myWork/inComplete/inComplete.api.ts
  8. 2
      src/views/projectLib/projectInfo/Detailpage.vue
  9. 4
      src/views/projectLib/projectInfo/index.vue
  10. 6
      src/views/projectLib/projectInfo/projectInfo.api.ts

97
src/views/ProcessApprovalSubPage/MergeProjectApprova.vue

@ -0,0 +1,97 @@
<template>
<!-- 自定义表单 -->
<MergeProjectDetail :row="mergeDetailList" :form="fromData" v-if="fromData"/>
<ApprovalDetails :processInstanceId="processInstanceId" />
<ApprovalFromPage :showApprovalForm="showApprovalForm" :buttons="resButton.buttons" ref="ApprovalFromPageRef"
@submit="handleSubmit" @exit="exit" />
</template>
<script lang="ts" name="fieldChangeApproval" setup>
import { onMounted, ref, reactive } from 'vue'
import { approvalMergeProject, getActionParam } from '../myWork/inComplete/inComplete.api';
import { ElMessage } from 'element-plus'
import { getMergeDetailList,getSplitDetailList,getFromDataFromMerge} from '../projectLib/projectInfo/projectInfo.api'
import MergeProjectDetail from "../ProcessApprovalSubPage/component/MergeProjectDetail.vue"
import ApprovalDetails from "../ProcessApprovalSubPage/component/ApprovalDetails.vue";
import ApprovalFromPage from "../ProcessApprovalSubPage/component/ApprovalFromPage.vue"
let dataTo = defineProps(["record"])
const emit = defineEmits(['close']);
let mergeDetailList = ref()
let projectId = dataTo.record.projectId as string
let processInstanceId = dataTo.record.processInstanceId
let taskid = dataTo.record.taskId as string
let fromData = ref()
let showApprovalForm = ref()
let ApprovalFromPageRef = ref()
let resButton = reactive({
showApprovalForm: false,
isEdit: false,
buttons: []
})
let fileList = reactive<Array<any>>([]);
onMounted(async () => {
resButton = await getActionParam({ processInstanceId: processInstanceId, taskId: taskid, procesType: dataTo.record.procesType })
showApprovalForm.value = resButton.showApprovalForm
mergeDetailList.value=await getMergeDetailList({ projectid: projectId})
let template=await getFromDataFromMerge({ projectid: projectId})
fromData.value=template[0]
})
function removeFile(option) {
for (let i = 0; i < fileList.length; i++) {
if (fileList[i].file.name == option.name) {
fileList.splice(i, 1)
}
}
}
function httpRequest(option) {
fileList.push(option)
}
//
async function beforeUpload(file) {
let fileSize = file.size
const FIVE_M = 500 * 1024 * 1024;
//5M
if (fileSize > FIVE_M) {
ElMessage.error("最大上传500M")
return false
}
return true
}
//
function handleExceed() {
ElMessage.warning("最多只能上传一个文件")
}
async function handleSubmit() {
let approvalform = await ApprovalFromPageRef.value.getFieldsValueApprovalForm();
const params = new FormData()
params.append("flag", approvalform.flag)
params.append("projectid", projectId)
params.append("comment", approvalform.comment)
params.append("taskId", taskid)
if (fileList.length > 0) {
fileList.forEach((x) => {
params.append("file", x.file)
});
}
console.log("param", params, "approvalform", approvalform)
if (await ApprovalFromPageRef.value.validateApprovalForm()) {
let res = await approvalMergeProject(params)
console.log("提交成功!", res)
emit("close")
}
}
async function exit() {
emit("close")
}
</script>
<style></style>

97
src/views/ProcessApprovalSubPage/SplitProjectApprova.vue

@ -0,0 +1,97 @@
<template>
<!-- 自定义表单 -->
<SplitProjectDetail :row="splitDetailList" :form="fromData" v-if="fromData"/>
<ApprovalDetails :processInstanceId="processInstanceId" />
<ApprovalFromPage :showApprovalForm="showApprovalForm" :buttons="resButton.buttons" ref="ApprovalFromPageRef"
@submit="handleSubmit" @exit="exit" />
</template>
<script lang="ts" name="fieldChangeApproval" setup>
import { onMounted, ref, reactive } from 'vue'
import { approvalSplitProject, getActionParam } from '../myWork/inComplete/inComplete.api';
import { ElMessage } from 'element-plus'
import { approvalFieldchange ,getSplitDetailList,getFromDataFromSplit} from '../projectLib/projectInfo/projectInfo.api'
import SplitProjectDetail from "../ProcessApprovalSubPage/component/SplitProjectDetail.vue"
import ApprovalDetails from "../ProcessApprovalSubPage/component/ApprovalDetails.vue";
import ApprovalFromPage from "../ProcessApprovalSubPage/component/ApprovalFromPage.vue"
let dataTo = defineProps(["record"])
const emit = defineEmits(['close']);
let splitDetailList = ref()
let projectId = dataTo.record.projectId as string
let processInstanceId = dataTo.record.processInstanceId
let taskid = dataTo.record.taskId as string
let fromData = ref()
let showApprovalForm = ref()
let ApprovalFromPageRef = ref()
let resButton = reactive({
showApprovalForm: false,
isEdit: false,
buttons: []
})
let fileList = reactive<Array<any>>([]);
onMounted(async () => {
resButton = await getActionParam({ processInstanceId: processInstanceId, taskId: taskid, procesType: dataTo.record.procesType })
showApprovalForm.value = resButton.showApprovalForm
splitDetailList.value=await getSplitDetailList({ projectid: projectId})
let template=await getFromDataFromSplit({ projectid: projectId})
fromData.value=template
})
function removeFile(option) {
for (let i = 0; i < fileList.length; i++) {
if (fileList[i].file.name == option.name) {
fileList.splice(i, 1)
}
}
}
function httpRequest(option) {
fileList.push(option)
}
//
async function beforeUpload(file) {
let fileSize = file.size
const FIVE_M = 500 * 1024 * 1024;
//5M
if (fileSize > FIVE_M) {
ElMessage.error("最大上传500M")
return false
}
return true
}
//
function handleExceed() {
ElMessage.warning("最多只能上传一个文件")
}
async function handleSubmit() {
let approvalform = await ApprovalFromPageRef.value.getFieldsValueApprovalForm();
const params = new FormData()
params.append("flag", approvalform.flag)
params.append("projectid", projectId)
params.append("comment", approvalform.comment)
params.append("taskId", taskid)
if (fileList.length > 0) {
fileList.forEach((x) => {
params.append("file", x.file)
});
}
console.log("param", params, "approvalform", approvalform)
if (await ApprovalFromPageRef.value.validateApprovalForm() ) {
let res = await approvalSplitProject(params)
console.log("提交成功!", res)
emit("close")
}
}
async function exit() {
emit("close")
}
</script>
<style></style>

6
src/views/ProcessApprovalSubPage/component/ApprovalPageModel.vue

@ -1,11 +1,14 @@
<template> <template>
<BasicModal v-bind="$attrs" @register="registerModal" width="1200px" :showOkBtn="false" :title="processName"> <BasicModal v-bind="$attrs" @register="registerModal" width="1200px" :showOkBtn="false" :title="processName">
<initiatesProjectsApproval :record="record" @close="exit" v-if="record.stage=='creatProjectinfo'"/>
<uploadfileApproval :record="record" @close="exit" v-if="record.stage=='supervisionFile'"/> <uploadfileApproval :record="record" @close="exit" v-if="record.stage=='supervisionFile'"/>
<projectPlanApproval :record="record" @close="exit" v-if="record.stage=='createPlaninfo'"/> <projectPlanApproval :record="record" @close="exit" v-if="record.stage=='createPlaninfo'"/>
<planFileApproval :record="record" @close="exit" v-if="planfileNames.includes(record.stage)"/> <planFileApproval :record="record" @close="exit" v-if="planfileNames.includes(record.stage)"/>
<fieldChangeApproval :record="record" @close="exit" v-if="record.stage=='fieldChange'"/> <fieldChangeApproval :record="record" @close="exit" v-if="record.stage=='fieldChange'"/>
<contractApproval :record="record" @close="exit" v-if="record.stage=='createContract'"/> <contractApproval :record="record" @close="exit" v-if="record.stage=='createContract'"/>
<uploadURTfileApproval :record="record" @close="exit" v-if="record.stage=='createURT'"/> <uploadURTfileApproval :record="record" @close="exit" v-if="record.stage=='createURT'"/>
<MergeProjectApprova :record="record" @close="exit" v-if="record.stage=='MergeProject'"/>
<SplitProjectApprova :record="record" @close="exit" v-if="record.stage=='SplitProject'"/>
</BasicModal> </BasicModal>
</template> </template>
<script lang="ts" name="ApprovalPageModel" setup> <script lang="ts" name="ApprovalPageModel" setup>
@ -19,6 +22,9 @@ import projectPlanApproval from '../projectPlanApproval.vue'
import fieldChangeApproval from '../fieldChangeApproval.vue' import fieldChangeApproval from '../fieldChangeApproval.vue'
import contractApproval from '../contractApproval.vue' import contractApproval from '../contractApproval.vue'
import uploadURTfileApproval from '../uploadURTfileApproval.vue' import uploadURTfileApproval from '../uploadURTfileApproval.vue'
import MergeProjectApprova from '../MergeProjectApprova.vue'
import SplitProjectApprova from '../SplitProjectApprova.vue'
const planfileNames = ["feasibilityReportPreparation","jointTechnicalReview","centralizedCheck","createPlaninfoFile","bidDocumentsPreparation"] const planfileNames = ["feasibilityReportPreparation","jointTechnicalReview","centralizedCheck","createPlaninfoFile","bidDocumentsPreparation"]
const [registerModal, { closeModal }] = useModalInner(init); const [registerModal, { closeModal }] = useModalInner(init);
defineProps(["record"]) defineProps(["record"])

59
src/views/ProcessApprovalSubPage/component/MergeProjectDetail.vue

@ -0,0 +1,59 @@
<template>
<!-- <BasicTable @register="registerTable">
</BasicTable> -->
<ProjectTable :row="dataTo.row"/>
<el-divider content-position="left">合并项目</el-divider>
<BasicForm @register="registerchangeFieldForm" />
</template>
<script lang="ts" name="MergeProjectDetail" setup>
import { defineProps, onMounted, ref, reactive } from 'vue';
import { useForm, BasicForm } from '@/components/Form';
import { formSchemas } from '@/views/projectLib/projectInfo/projectInfo.data';
import { cloneDeep } from 'lodash-es';
import ProjectTable from "@/views/ProcessApprovalSubPage/component/ProjectTable.vue"
let dataTo = defineProps(['row', 'form']);
let emit = defineEmits(['close']);
console.log('dataTo11111', dataTo);
onMounted(async () => {
let formSchemasTemp = cloneDeep(formSchemas);
let schemas = [
'projectName',
'adminDivision',
'dutyWorkplace',
'workplaceProperties',
'reformName',
'superLeader',
];
let SchemaList = [];
schemas.forEach((schemasitem) => {
formSchemasTemp.forEach((item) => {
if (item.field == schemasitem) {
item.dynamicDisabled = true;
SchemaList.push(item);
}
});
});
resetSchema(SchemaList);
setFieldsValue(dataTo.form);
});
//
const [
registerchangeFieldForm,
{ setFieldsValue, resetSchema },
] = useForm({
resetButtonOptions: { text: '取消' },
submitButtonOptions: { text: '提交' },
// 24 0-24
actionColOptions: { span: 14 },
showResetButton:false,
showSubmitButton:false,
labelCol: { style: { width: '120px' } },
wrapperCol: { style: { width: 'auto' } },
// disabled:true
});
</script>
<style></style>

75
src/views/ProcessApprovalSubPage/component/SplitProjectDetail.vue

@ -0,0 +1,75 @@
<template>
<!-- <BasicTable @register="registerTable">
</BasicTable> -->
<ProjectTable :row="dataTo.row"/>
<el-divider content-position="left">拆分为第一个项目</el-divider>
<BasicForm @register="registerchangeFieldForm1" />
<el-divider content-position="left">拆分为第二个项目</el-divider>
<BasicForm @register="registerchangeFieldForm2" />
</template>
<script lang="ts" name="SplitProject" setup>
import { defineProps, onMounted, ref, reactive } from 'vue';
import { useForm, BasicForm } from '@/components/Form';
import { formSchemas } from '@/views/projectLib/projectInfo/projectInfo.data';
import { cloneDeep } from 'lodash-es';
import ProjectTable from "@/views/ProcessApprovalSubPage/component/ProjectTable.vue"
let dataTo = defineProps(['row', 'form']);
let emit = defineEmits(['close']);
console.log('dataTo11111', dataTo);
onMounted(async () => {
let formSchemasTemp = cloneDeep(formSchemas);
let schemas = [
'projectName',
'adminDivision',
'dutyWorkplace',
'workplaceProperties',
'reformName',
'superLeader',
];
let SchemaList = [];
schemas.forEach((schemasitem) => {
formSchemasTemp.forEach((item) => {
if (item.field == schemasitem) {
item.dynamicDisabled = true;
SchemaList.push(item);
}
});
});
resetSchema1(SchemaList);
resetSchema2(SchemaList);
setFieldsValue1(dataTo.form[0]);
setFieldsValue2(dataTo.form[1]);
});
//
const [
registerchangeFieldForm1,
{ setFieldsValue: setFieldsValue1, resetSchema:resetSchema1 },
] = useForm({
// 24 0-24
actionColOptions: { span: 14 },
showResetButton:false,
showSubmitButton:false,
labelCol: { style: { width: '120px' } },
wrapperCol: { style: { width: 'auto' } },
// disabled:true
});
const [
registerchangeFieldForm2,
{ setFieldsValue: setFieldsValue2, resetSchema:resetSchema2 },
] = useForm({
resetButtonOptions: { text: '取消' },
submitButtonOptions: { text: '提交' },
// 24 0-24
actionColOptions: { span: 14 },
showResetButton:false,
showSubmitButton:false,
labelCol: { style: { width: '120px' } },
wrapperCol: { style: { width: 'auto' } },
// disabled:true
});
</script>
<style></style>

14
src/views/ProcessApprovalSubPage/projectPlanApproval.vue

@ -1,5 +1,9 @@
<template> <template>
<!-- 自定义表单 --> <!-- 自定义表单 -->
<el-divider content-position="left" v-if="resButton.isEdit">模板表格文件下载</el-divider>
<div style="padding-left: 40px;" v-if="resButton.isEdit">
<el-button slot="trigger" type="primary" @click="downexcel">下载模板</el-button>
</div>
<PlaninfoDetails :projectid="projectId" :showActionColumn="false" /> <PlaninfoDetails :projectid="projectId" :showActionColumn="false" />
<ApprovalDetails :processInstanceId="processInstanceId" /> <ApprovalDetails :processInstanceId="processInstanceId" />
@ -26,6 +30,8 @@ import { ElMessage } from 'element-plus'
import ApprovalDetails from "../ProcessApprovalSubPage/component/ApprovalDetails.vue"; import ApprovalDetails from "../ProcessApprovalSubPage/component/ApprovalDetails.vue";
import ApprovalFromPage from "../ProcessApprovalSubPage/component/ApprovalFromPage.vue" import ApprovalFromPage from "../ProcessApprovalSubPage/component/ApprovalFromPage.vue"
import PlaninfoDetails from "../ProcessApprovalSubPage/component/PlaninfoDetails.vue" import PlaninfoDetails from "../ProcessApprovalSubPage/component/PlaninfoDetails.vue"
import { downloadFile } from "@/api/common/api"
let dataTo = defineProps(["record"]) let dataTo = defineProps(["record"])
const emit = defineEmits(['close']); const emit = defineEmits(['close']);
let processInstanceId = dataTo.record.processInstanceId let processInstanceId = dataTo.record.processInstanceId
@ -47,8 +53,16 @@ onMounted(async () => {
}) })
function downexcel() {
let param = {
path: "Resources/项目计划模板.xlsx",
fileName: "项目计划模板.xlsx"
}
downloadFile("/huzhouUploadfileinfo/downloadfile", "项目计划模板.xlsx", param)
}
async function handleSubmit() { async function handleSubmit() {
let approvalform = await ApprovalFromPageRef.value.getFieldsValueApprovalForm(); let approvalform = await ApprovalFromPageRef.value.getFieldsValueApprovalForm();

7
src/views/myWork/inComplete/inComplete.api.ts

@ -12,7 +12,10 @@ export enum Api {
queryProcessInfo = '/workflow/getprocessInfo', queryProcessInfo = '/workflow/getprocessInfo',
getProcessInstanceIdByProid = "/workflow/getProcessInstanceIdByProid", getProcessInstanceIdByProid = "/workflow/getProcessInstanceIdByProid",
getWorkcountNumber="/workflow/getWorkcountNumber", getWorkcountNumber="/workflow/getWorkcountNumber",
approveURTFile="/huzhouUploadfileinfo/approveURTFile" approveURTFile="/huzhouUploadfileinfo/approveURTFile",
approvalMergeProject="huzhouMergesplitinfo/approvalMergeProject",
approvalSplitProject="huzhouMergesplitinfo/approvalSplitProject",
} }
/** /**
@ -31,6 +34,8 @@ export const modifyProjectInfo = (params) => defHttp.post({ url: Api.modifyProje
export const approvePlanFile = (params) => defHttp.post({ url: Api.approvePlanFile, headers: { "Content-Type": "multipart/form-data" }, params }) export const approvePlanFile = (params) => defHttp.post({ url: Api.approvePlanFile, headers: { "Content-Type": "multipart/form-data" }, params })
export const approveURTFile = (params) => defHttp.post({ url: Api.approveURTFile, headers: { "Content-Type": "multipart/form-data" }, params }) export const approveURTFile = (params) => defHttp.post({ url: Api.approveURTFile, headers: { "Content-Type": "multipart/form-data" }, params })
export const approvalMergeProject = (params) => defHttp.post({ url: Api.approvalMergeProject, headers: { "Content-Type": "multipart/form-data" }, params })
export const approvalSplitProject = (params) => defHttp.post({ url: Api.approvalSplitProject, headers: { "Content-Type": "multipart/form-data" }, params })
export const openApprovePage = (record,router) => { export const openApprovePage = (record,router) => {
if (record.stage == 1) { if (record.stage == 1) {

2
src/views/projectLib/projectInfo/Detailpage.vue

@ -34,7 +34,7 @@ import ProjectDetails from "../../ProcessApprovalSubPage/component/ProjectDetail
import ApprovalDetails from "../../ProcessApprovalSubPage/component/ApprovalDetails.vue" import ApprovalDetails from "../../ProcessApprovalSubPage/component/ApprovalDetails.vue"
import UploadfileDetail from '../../ProcessApprovalSubPage/component/UploadfileDetail.vue' import UploadfileDetail from '../../ProcessApprovalSubPage/component/UploadfileDetail.vue'
import fieldChangeDetail from '../../ProcessApprovalSubPage/component/fieldChangeDetail.vue' import fieldChangeDetail from '../../ProcessApprovalSubPage/component/fieldChangeDetail.vue'
import ProjectTable from "@/views/ProcessApprovalSubPage/component/projectTable.vue" import ProjectTable from "@/views/ProcessApprovalSubPage/component/ProjectTable.vue"
let dataTo = defineProps(["projectid", "stage", "IsModify","showUploadfileDetail","showApprovalDetails"]) let dataTo = defineProps(["projectid", "stage", "IsModify","showUploadfileDetail","showApprovalDetails"])
let fieldChangeDetailList = ref<Array<Object>>() let fieldChangeDetailList = ref<Array<Object>>()
let mergeDetailList = ref<Array<Object>>() let mergeDetailList = ref<Array<Object>>()

4
src/views/projectLib/projectInfo/index.vue

@ -39,7 +39,7 @@
<el-button type="primary" round @click="handleBatchdownload"> 导出项目</el-button> <el-button type="primary" round @click="handleBatchdownload"> 导出项目</el-button>
</template> </template>
<template #toolbar> <template #toolbar>
<el-button <!-- <el-button
style="background-color: #ff7f24; color: aliceblue" style="background-color: #ff7f24; color: aliceblue"
round round
@click="handlesplitinfo()" @click="handlesplitinfo()"
@ -54,7 +54,7 @@
v-if="isShowByRoles('projectContact')" v-if="isShowByRoles('projectContact')"
> >
合并项目</el-button 合并项目</el-button
> > -->
<el-button <el-button
type="primary" type="primary"
round round

6
src/views/projectLib/projectInfo/projectInfo.api.ts

@ -31,6 +31,8 @@ export enum Api {
submitSplitProject = '/huzhouMergesplitinfo/submitSplitProject', submitSplitProject = '/huzhouMergesplitinfo/submitSplitProject',
getMergeDetailList = '/huzhouMergesplitinfo/getMergeDetailList', getMergeDetailList = '/huzhouMergesplitinfo/getMergeDetailList',
getSplitDetailList = '/huzhouMergesplitinfo/getSplitDetailList', getSplitDetailList = '/huzhouMergesplitinfo/getSplitDetailList',
getFromDataFromMerge='/huzhouMergesplitinfo/getFromDataFromMerge',
getFromDataFromSplit='/huzhouMergesplitinfo/getFromDataFromSplit',
} }
/** /**
* *
@ -55,6 +57,10 @@ export const getMergeDetailList = (params?) =>
defHttp.get({ url: Api.getMergeDetailList, params }); defHttp.get({ url: Api.getMergeDetailList, params });
export const getSplitDetailList = (params?) => export const getSplitDetailList = (params?) =>
defHttp.get({ url: Api.getSplitDetailList, params }); defHttp.get({ url: Api.getSplitDetailList, params });
export const getFromDataFromMerge = (params?) =>
defHttp.get({ url: Api.getFromDataFromMerge, params });
export const getFromDataFromSplit = (params?) =>
defHttp.get({ url: Api.getFromDataFromSplit, params });
/** /**
* list * list

Loading…
Cancel
Save