Browse Source

新增优化需求

master
zhouhaibin 3 weeks ago
parent
commit
fcab20a543
  1. 152
      src/views/ProcessApprovalSubPage/component/ApprovalDetails.vue
  2. 2
      src/views/ProcessApprovalSubPage/component/ApprovalPageModel.vue
  3. 201
      src/views/ProcessApprovalSubPage/planFileApproval.vue
  4. 1
      src/views/ProcessApprovalSubPage/projectPlanApproval.vue
  5. 47
      src/views/ProcessApprovalSubPage/uploadURTfileApproval.vue
  6. 5
      src/views/myWork/inComplete/inComplete.data.ts
  7. 2
      src/views/projectBoard/childBoard/gaiGeRenWu.vue
  8. 2
      src/views/projectBoard/childBoard/xingZhengQuHua.vue
  9. 2
      src/views/projectBoard/totalProjectBoard/ProjectCard.vue
  10. 11
      src/views/projectLib/projectInfo/Detailpage.vue
  11. 356
      src/views/projectLib/projectPlan/addPlanFile.vue
  12. 4
      src/views/projectLib/projectPlan/index.vue
  13. 134
      src/views/projectLib/projectPlan/planinfoFileDetail.vue
  14. 9
      src/views/projectLib/projectPlan/projectPlan.api.ts
  15. 258
      src/views/projectLib/projectPlan/projectPlan.data.ts
  16. 126
      src/views/projectLib/projectPlan/showtu.vue
  17. 85
      src/views/projectLib/projectPlan/uploadURTfile.vue
  18. 91
      src/views/projectLib/projectPlan/viewPlanDetail.vue

152
src/views/ProcessApprovalSubPage/component/ApprovalDetails.vue

@ -26,70 +26,110 @@
</a-timeline> </a-timeline>
</el-tab-pane> --> </el-tab-pane> -->
</el-tabs> </el-tabs>
</template> </template>
<script lang="ts" name="ApprovalDetails" setup> <script lang="ts" name="ApprovalDetails" setup>
//ts //ts
import { defineProps, ref, onMounted } from 'vue'; import { defineProps, ref, onMounted } from 'vue';
import { BasicTable, useTable } from '@/components/Table'; import { BasicTable, useTable } from '@/components/Table';
import { approveStartProcessColumns } from "../../myWork/inComplete/inComplete.data"; import { approveStartProcessColumns } from '../../myWork/inComplete/inComplete.data';
import { queryProcessInfo, getProcessInstanceIdByProid } from '../../myWork/inComplete/inComplete.api'; import {
import { useGlobSetting } from '@/hooks/setting'; queryProcessInfo,
import { Icon } from '@/components/Icon'; getProcessInstanceIdByProid,
import { ActivitiTask } from '@/api/activiti/model/activitiTaskModel'; } from '../../myWork/inComplete/inComplete.api';
import { selectHistoric } from '@/api/activiti/activitiHistoric'; import { useGlobSetting } from '@/hooks/setting';
import { formatToNow } from '@/utils/dateUtil'; import { Icon } from '@/components/Icon';
import { useUserStore } from '@/store/modules/user'; import { ActivitiTask } from '@/api/activiti/model/activitiTaskModel';
import { selectHistoric } from '@/api/activiti/activitiHistoric';
const userStore = useUserStore(); import { formatToNow } from '@/utils/dateUtil';
const globSetting = useGlobSetting(); import { useUserStore } from '@/store/modules/user';
let processInstanceId = ref()
// url: `${globSetting.apiUrl}/api/activiti/process/trace/process/progress/image/${processInstanceId}`,
const imgSrc = ref<string>();
const activitiTaskList = ref<ActivitiTask[]>([]);
const activeName = ref('1')
let dataTo = defineProps(["processInstanceId", "stage", "projectid"])
onMounted(async () => {
let url = ""
if (!dataTo.stage) {
processInstanceId.value = dataTo.processInstanceId const userStore = useUserStore();
url = globSetting.apiUrl + "/api/activiti/process/trace/process/progress/image/" + processInstanceId.value const globSetting = useGlobSetting();
} else { let processInstanceId = ref();
processInstanceId.value = await getProcessInstanceIdByProid({ projectid: dataTo.projectid, stage: dataTo.stage })
url = globSetting.apiUrl + "/api/activiti/process/trace/process/progress/image/" + processInstanceId.value
} // url: `${globSetting.apiUrl}/api/activiti/process/trace/process/progress/image/${processInstanceId}`,
imgSrc.value = `${url}?t=${new Date().getTime()}`; const imgSrc = ref<string>();
selectHistoric(processInstanceId.value).then((res) => { const activitiTaskList = ref<ActivitiTask[]>([]);
activitiTaskList.value = res; const activeName = ref('1');
});
})
userStore
console.log("1111userStore1111",userStore.getUserInfo)
// let dataTo = defineProps(['processInstanceId', 'stage', 'projectid']);
const [registerTable] = useTable({ onMounted(async () => {
size: 'small',// let url = '';
title: '流程审批情况', if (!dataTo.stage) {
api: queryProcessInfo, processInstanceId.value = dataTo.processInstanceId;
columns: approveStartProcessColumns, url =
// showActionColumn: false, globSetting.apiUrl +
useSearchForm: false, '/api/activiti/process/trace/process/progress/image/' +
beforeFetch(params) { processInstanceId.value;
if (dataTo.stage) {
params.stage = dataTo.stage
params.projectid = dataTo.projectid
} else { } else {
params.processInstanceId = dataTo.processInstanceId processInstanceId.value = await getProcessInstanceIdByProid({
projectid: dataTo.projectid,
stage: dataTo.stage,
});
url =
globSetting.apiUrl +
'/api/activiti/process/trace/process/progress/image/' +
processInstanceId.value;
} }
}, imgSrc.value = `${url}?t=${new Date().getTime()}`;
}); selectHistoric(processInstanceId.value).then((res) => {
activitiTaskList.value = res;
});
});
userStore;
console.log('1111userStore1111', userStore.getUserInfo);
//
const [registerTable, { setColumns }] = useTable({
size: 'small', //
title: '流程审批情况',
api: queryProcessInfo,
columns: approveStartProcessColumns,
// showActionColumn: false,
useSearchForm: false,
beforeFetch(params) {
if (dataTo.stage) {
params.stage = dataTo.stage;
params.projectid = dataTo.projectid;
} else {
params.processInstanceId = dataTo.processInstanceId;
}
},
afterFetch(res) {
if (res[0].operatorPhone == '') {
setColumns([
{
title: '节点名称',
dataIndex: 'taskName',
width: 120,
},
{
title: '处理人',
dataIndex: 'operator',
width: 100,
},
{
title: '处理时间',
dataIndex: 'operateDate',
width: 100,
},
{
title: '审批状态',
dataIndex: 'approvalStatue',
width: 100,
format: 'dict|approvalResult',
filters: 'dict|approvalResult',
},
{
title: '审批意见',
dataIndex: 'comment',
width: 400,
},
]);
}
},
});
</script> </script>
<style scoped></style> <style scoped></style>

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

@ -6,7 +6,7 @@
<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'||record.stage=='createURT2'"/>
<MergeProjectApprova :record="record" @close="exit" v-if="record.stage=='MergeProject'"/> <MergeProjectApprova :record="record" @close="exit" v-if="record.stage=='MergeProject'"/>
<SplitProjectApprova :record="record" @close="exit" v-if="record.stage=='SplitProject'"/> <SplitProjectApprova :record="record" @close="exit" v-if="record.stage=='SplitProject'"/>
</BasicModal> </BasicModal>

201
src/views/ProcessApprovalSubPage/planFileApproval.vue

@ -1,5 +1,8 @@
<template> <template>
<!-- 自定义表单 --> <!-- 自定义表单 -->
<el-divider content-position="left">项目名称 {{ dataTo.record.projectName }} </el-divider>
<BasicForm @register="registerApprovalMoneyForm" v-if="taskName == '立项审批'" />
<BasicForm @register="registerContractMoneyForm" v-if="taskName == '合同签订'" />
<el-divider content-position="left">项目计划详情</el-divider> <el-divider content-position="left">项目计划详情</el-divider>
<BasicTable @register="registerplaninfoTable"> </BasicTable> <BasicTable @register="registerplaninfoTable"> </BasicTable>
<el-divider content-position="left">项目计划资料详情</el-divider> <el-divider content-position="left">项目计划资料详情</el-divider>
@ -82,11 +85,69 @@
getplaninfoByid, getplaninfoByid,
} from '@/views/projectLib/projectPlan/projectPlan.api'; } from '@/views/projectLib/projectPlan/projectPlan.api';
import { downloadFile } from '../../api/common/api'; import { downloadFile } from '../../api/common/api';
import { ElMessage } from 'element-plus'; import { message } from 'ant-design-vue';
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 PlanFileDetail from '@/views/ProcessApprovalSubPage/component/PlanFileDetail.vue'; import PlanFileDetail from '@/views/ProcessApprovalSubPage/component/PlanFileDetail.vue';
import { queryProjectInfoById } from '@/views/projectLib/projectInfo/projectInfo.api';
import { useForm, BasicForm } from '@/components/Form';
import { getProjectinfoMoneyInfo } from '@/views/projectLib/projectPlan/projectPlan.api';
import {
ApprovalMoneyFormSchemas,
ContractMoneyFormSchemas,
} from '@/views/projectLib/projectPlan/projectPlan.data';
const [
registerApprovalMoneyForm,
{
setFieldsValue: setApprovalMoneyFieldsValue,
setProps: setApprovalMoneyProps,
validate: validateApprovalMoneyForm,
getFieldsValue: getApprovalMoneyFieldsValue,
},
] = useForm({
//
schemas: ApprovalMoneyFormSchemas,
showActionButtonGroup: false,
//
// autoSubmitOnEnter: true,
// //
// showResetButton: false,
//
// submitButtonOptions: { text: '', preIcon: '' },
// 24 0-24
// actionColOptions: { span: 17 },
// size: "small",
// labelCol: { style: { width: '120px' } },
disabled: true,
wrapperCol: { style: { width: 'auto' } },
});
const [
registerContractMoneyForm,
{
setProps: setContractMoneyProps,
validate: validateContractMoneyForm,
getFieldsValue: getContractMoneyFieldsValue,
setFieldsValue: setContractMoneyFieldsValue,
updateSchema: updateContractMoneySchema,
},
] = useForm({
//
schemas: ContractMoneyFormSchemas,
showActionButtonGroup: false,
//
// autoSubmitOnEnter: true,
// //
// showResetButton: false,
//
// submitButtonOptions: { text: '', preIcon: '' },
// 24 0-24
// actionColOptions: { span: 17 },
// size: "small",
// labelCol: { style: { width: '120px' } },
disabled: true,
wrapperCol: { style: { width: 'auto' } },
});
let dataTo = defineProps(['record']); let dataTo = defineProps(['record']);
const emit = defineEmits(['close']); const emit = defineEmits(['close']);
console.log('routerouterouteroute', dataTo.record); console.log('routerouterouteroute', dataTo.record);
@ -104,6 +165,8 @@
}); });
let fileList = reactive<Array<any>>([]); let fileList = reactive<Array<any>>([]);
let fileAdviceList = reactive<Array<any>>([]); let fileAdviceList = reactive<Array<any>>([]);
let taskName = ref('');
let pjid = ref('');
onMounted(async () => { onMounted(async () => {
resButton = await getActionParam({ resButton = await getActionParam({
processInstanceId: processInstanceId, processInstanceId: processInstanceId,
@ -123,12 +186,31 @@
beforeFetch(params) { beforeFetch(params) {
params.planinfoid = planinfoid; params.planinfoid = planinfoid;
}, },
afterFetch(data) { afterFetch: async function (data) {
if(data[0].taskFile.indexOf(',') == -1){ if (data[0].taskFile.indexOf(',') == -1) {
tableDataFiles.value = data[0].taskFile.split(','); tableDataFiles.value = data[0].taskFile.split(',');
}else{ } else {
tableDataFiles.value = data[0].taskFile.split(','); tableDataFiles.value = data[0].taskFile.split(',');
}
if (data[0].taskName.indexOf('可研报告初稿编制') >= 0) {
tableDataFiles.value.push('《项目建议书》');
} else if (data[0].taskName.indexOf('可研报告终稿编制') >= 0) {
tableDataFiles.value.push('《项目建议书》');
}
taskName.value = data[0].taskName;
pjid.value = data[0].projectId;
if (taskName.value == '立项审批') {
let res = await getProjectinfoMoneyInfo({
projectid: pjid.value,
});
setApprovalMoneyFieldsValue(res);
setApprovalMoneyProps({ disabled: resButton.isEdit == true ? false : true });
} else if (taskName.value == '合同签订') {
let res = await getProjectinfoMoneyInfo({
projectid: pjid.value,
});
setContractMoneyFieldsValue(res);
setContractMoneyProps({ disabled: resButton.isEdit == true ? false : true });
} }
}, },
}); });
@ -197,26 +279,33 @@
const FIVE_M = 500 * 1024 * 1024; const FIVE_M = 500 * 1024 * 1024;
//5M //5M
if (fileSize > FIVE_M) { if (fileSize > FIVE_M) {
ElMessage.error('最大上传500M'); message.error('最大上传500M');
return false; return false;
} }
let geShi = ['xlx', 'xlsx', 'docx', 'doc', 'pdf'] as Array<string>; let geShi = ['xlx', 'xlsx', 'docx', 'doc', 'pdf'] as Array<string>;
if (geShi.indexOf(file.name.substring(file.name.lastIndexOf('.') + 1)) == -1) { if (geShi.indexOf(file.name.substring(file.name.lastIndexOf('.') + 1)) == -1) {
ElMessage.error('文件格式错误!仅支持' + 'xlx,xlsx, docx, doc, pdf'); message.error('文件格式错误!仅支持' + 'xlx,xlsx, docx, doc, pdf');
console.log('文件格式错误!仅支持' + 'xlsx', 'docx', 'doc', 'pdf'); console.log('文件格式错误!仅支持' + 'xlsx', 'docx', 'doc', 'pdf');
return false; return false;
} }
if (item.indexOf(file.name.substring(0, file.name.indexOf('.'))) == -1) { let dataSource = await getDataSource();
ElMessage.error('请上传文件:' + item); if (
return false; dataSource[0].taskName.indexOf('可研技术审查报告确认') == -1 &&
dataSource[0].taskName.indexOf('造价评估报告确认') == -1
) {
if (item.indexOf(file.name.substring(0, file.name.indexOf('.'))) == -1) {
message.error('请上传文件:' + item);
return false;
}
} }
console.log('文件上传成功'); console.log('文件上传成功');
return true; return true;
} }
// //
function handleExceed() { function handleExceed() {
ElMessage.warning('最多只能上传一个文件'); message.warning('最多只能上传一个文件');
} }
function beforeAdviceUpload(file) { function beforeAdviceUpload(file) {
console.log('file,item', file); console.log('file,item', file);
@ -224,12 +313,12 @@
const FIVE_M = 500 * 1024 * 1024; const FIVE_M = 500 * 1024 * 1024;
//5M //5M
if (fileSize > FIVE_M) { if (fileSize > FIVE_M) {
ElMessage.error('最大上传500M'); message.error('最大上传500M');
return false; return false;
} }
let geShi = ['xlx', 'xlsx', 'docx', 'doc', 'pdf'] as Array<string>; let geShi = ['xlx', 'xlsx', 'docx', 'doc', 'pdf'] as Array<string>;
if (geShi.indexOf(file.name.substring(file.name.indexOf('.') + 1)) == -1) { if (geShi.indexOf(file.name.substring(file.name.indexOf('.') + 1)) == -1) {
ElMessage.error('文件格式错误!仅支持' + 'xlx,xlsx, docx, doc, pdf'); message.error('文件格式错误!仅支持' + 'xlx,xlsx, docx, doc, pdf');
console.log('文件格式错误!仅支持' + 'xlsx', 'docx', 'doc', 'pdf'); console.log('文件格式错误!仅支持' + 'xlsx', 'docx', 'doc', 'pdf');
return false; return false;
} }
@ -239,26 +328,90 @@
} }
async function handleSubmit() { async function handleSubmit() {
const params = new FormData();
if (taskName.value == '立项审批') {
if (await validateApprovalMoneyForm()) {
const approvalMoneyFieldsValue = getApprovalMoneyFieldsValue();
const {
approvalTotalMoney,
approvalCentralMoney,
approvalProvincialMoney,
approvalCityMoney,
approvalCountyMoney,
approvalSelfMoney,
} = approvalMoneyFieldsValue;
//
const sumOfOtherAmounts =
approvalCentralMoney +
approvalProvincialMoney +
approvalCityMoney +
approvalCountyMoney +
approvalSelfMoney;
//
if (Math.abs(approvalTotalMoney - sumOfOtherAmounts) < Number.EPSILON) {
approvalMoneyFieldsValue['id'] = pjid.value;
params.append('approvalMoneyFieldsValue', JSON.stringify(approvalMoneyFieldsValue));
} else {
message.error('总金额与其他金额之和不相等,请重新输入!');
return;
}
} else {
return;
}
} else if (taskName.value == '合同签订') {
if (await validateContractMoneyForm()) {
const contractMoneyFieldsValue = getContractMoneyFieldsValue();
const {
contractTotalMoney,
contractCentralMoney,
contractProvincialMoney,
contractCityMoney,
contractCountyMoney,
contractSelfMoney,
} = contractMoneyFieldsValue;
//
const sumOfOtherAmounts =
contractCentralMoney +
contractProvincialMoney +
contractCityMoney +
contractCountyMoney +
contractSelfMoney;
// 使Number.EPSILON
if (Math.abs(contractTotalMoney - sumOfOtherAmounts) < Number.EPSILON) {
contractMoneyFieldsValue['id'] = pjid.value;
params.append('contractMoneyFieldsValue', JSON.stringify(contractMoneyFieldsValue));
} else {
message.error('总金额与其他金额之和不相等,请重新输入!');
return;
}
} else {
return;
}
}
if (resButton.isEdit) { if (resButton.isEdit) {
if (fileList.length == 0) { if (fileList.length == 0) {
ElMessage({ message.error('未选择任何文件,无法上传!');
message: '未选择任何文件,无法上传!',
type: 'error',
});
return; return;
} }
// type ==0type ==1 // type ==0type ==1
if (fileList.length != tableDataFiles.value.length) { let dataSource = await getDataSource();
ElMessage({ if (
message: '上传的文件不符合要求请检查', dataSource[0].taskName.indexOf('可研技术审查报告确认') == -1 ||
type: 'error', dataSource[0].taskName.indexOf('可研报告初稿编制') == -1 ||
}); dataSource[0].taskName.indexOf('可研报告终稿编制') == -1
return; ) {
if (fileList.length != tableDataFiles.value.length) {
message.error('上传的文件不符合要求请检查');
return;
}
} }
} }
let approvalform = await ApprovalFromPageRef.value.getFieldsValueApprovalForm(); let approvalform = await ApprovalFromPageRef.value.getFieldsValueApprovalForm();
const params = new FormData();
params.append('flag', approvalform.flag); params.append('flag', approvalform.flag);
params.append('planinfoid', planinfoid); params.append('planinfoid', planinfoid);
params.append('comment', approvalform.comment); params.append('comment', approvalform.comment);

1
src/views/ProcessApprovalSubPage/projectPlanApproval.vue

@ -1,5 +1,6 @@
<template> <template>
<!-- 自定义表单 --> <!-- 自定义表单 -->
<el-divider content-position="left">项目名称 {{ dataTo.record.projectName }} </el-divider>
<el-divider content-position="left" v-if="resButton.isEdit">模板表格文件下载</el-divider> <el-divider content-position="left" v-if="resButton.isEdit">模板表格文件下载</el-divider>
<div style="padding-left: 40px;" v-if="resButton.isEdit"> <div style="padding-left: 40px;" v-if="resButton.isEdit">
<el-button slot="trigger" type="primary" @click="downexcel">下载模板</el-button> <el-button slot="trigger" type="primary" @click="downexcel">下载模板</el-button>

47
src/views/ProcessApprovalSubPage/uploadURTfileApproval.vue

@ -1,12 +1,14 @@
<template> <template>
<div> <div>
<el-divider content-position="left">项目名称 {{ dataTo.record.projectName }} </el-divider>
<BasicForm @register="registerMoneyForm" />
<el-divider content-position="left">联合技术审查文件详情</el-divider> <el-divider content-position="left">联合技术审查文件详情</el-divider>
<PlanFileDetail :planinfoid="projectId" :stage="1" /> <PlanFileDetail :planinfoid="projectId" :stage="1" />
</div> </div>
<div> <!-- <div>
<el-divider content-position="left">联合技术审查审批文件详情</el-divider> <el-divider content-position="left">联合技术审查审批文件详情</el-divider>
<PlanFileDetail :planinfoid="projectId" :stage="2" /> <PlanFileDetail :planinfoid="projectId" :stage="2" />
</div> </div> -->
<ApprovalDetails :processInstanceId="processInstanceId" /> <ApprovalDetails :processInstanceId="processInstanceId" />
<!-- --> <!-- -->
<ApprovalFromPage <ApprovalFromPage
@ -17,7 +19,7 @@
@exit="exit" @exit="exit"
> >
<div> <div>
<div v-if="procesType == '0' && !resButton.isEdit"> <!-- <div v-if="procesType == '0' && !resButton.isEdit">
<el-divider content-position="left">上传意见文件</el-divider> <el-divider content-position="left">上传意见文件</el-divider>
<div style="display: flex; justify-content: center; align-items: center; height: 100px"> <div style="display: flex; justify-content: center; align-items: center; height: 100px">
<el-upload <el-upload
@ -34,7 +36,7 @@
<div slot="tip" class="el-upload__tip">文件大小且不超过500M</div> <div slot="tip" class="el-upload__tip">文件大小且不超过500M</div>
</el-upload> </el-upload>
</div> </div>
</div> </div> -->
<el-divider content-position="left" v-if="resButton.isEdit">重新上传项目资料</el-divider> <el-divider content-position="left" v-if="resButton.isEdit">重新上传项目资料</el-divider>
<div <div
v-if="resButton.isEdit" v-if="resButton.isEdit"
@ -63,7 +65,11 @@
import { ElMessage } from 'element-plus'; import { ElMessage } from 'element-plus';
import ApprovalDetails from '@/views/ProcessApprovalSubPage/component/ApprovalDetails.vue'; import ApprovalDetails from '@/views/ProcessApprovalSubPage/component/ApprovalDetails.vue';
import ApprovalFromPage from '@/views/ProcessApprovalSubPage/component/ApprovalFromPage.vue'; import ApprovalFromPage from '@/views/ProcessApprovalSubPage/component/ApprovalFromPage.vue';
import PlanFileDetail from "@/views/ProcessApprovalSubPage/component/PlanFileDetail.vue"; import PlanFileDetail from '@/views/ProcessApprovalSubPage/component/PlanFileDetail.vue';
import { EstimateAmountFormSchemas } from '@/views/projectLib/projectPlan/projectPlan.data';
import { queryProjectInfoById } from '@/views/projectLib/projectInfo/projectInfo.api';
import {getplaninfoByid} from '@/views/projectLib/projectPlan/projectPlan.api';
import { useForm, BasicForm } from '@/components/Form';
let dataTo = defineProps(['record']); let dataTo = defineProps(['record']);
console.log('routerouterouteroute', dataTo.record); console.log('routerouterouteroute', dataTo.record);
@ -81,6 +87,27 @@
}); });
let fileList = reactive<Array<any>>([]); let fileList = reactive<Array<any>>([]);
let fileAdviceList = reactive<Array<any>>([]); let fileAdviceList = reactive<Array<any>>([]);
const [
registerMoneyForm,
{ getFieldsValue: getMoneyFieldsValue, setFieldsValue: setMoneyFieldsValue, setProps},
] = useForm({
//
schemas: EstimateAmountFormSchemas,
showActionButtonGroup: false,
//
// autoSubmitOnEnter: true,
// //
// showResetButton: false,
//
// submitButtonOptions: { text: '', preIcon: '' },
// 24 0-24
// actionColOptions: { span: 17 },
// size: "small",
disabled: resButton.isEdit == true ? false : true,
// labelCol: { style: { width: '120px' } },
wrapperCol: { style: { width: 'auto' } },
});
onMounted(async () => { onMounted(async () => {
resButton = await getActionParam({ resButton = await getActionParam({
processInstanceId: processInstanceId, processInstanceId: processInstanceId,
@ -88,6 +115,13 @@
procesType: dataTo.record.procesType, procesType: dataTo.record.procesType,
}); });
showApprovalForm.value = resButton.showApprovalForm; showApprovalForm.value = resButton.showApprovalForm;
let resList=await getplaninfoByid({planinfoid:projectId})
let param: any = {
projectid: resList[0].projectId
};
let res = await queryProjectInfoById(param);
setMoneyFieldsValue(res);
setProps({disabled: resButton.isEdit == true ? false : true})
}); });
function removeFile(option) { function removeFile(option) {
@ -128,10 +162,13 @@
async function handleSubmit() { async function handleSubmit() {
let approvalform = await ApprovalFromPageRef.value.getFieldsValueApprovalForm(); let approvalform = await ApprovalFromPageRef.value.getFieldsValueApprovalForm();
const params = new FormData(); const params = new FormData();
let moneydata = await getMoneyFieldsValue();
params.append('urtEstimatedAmount', moneydata.urtEstimatedAmount);
params.append('flag', approvalform.flag); params.append('flag', approvalform.flag);
params.append('projectid', projectId); params.append('projectid', projectId);
params.append('comment', approvalform.comment); params.append('comment', approvalform.comment);
params.append('taskId', taskid); params.append('taskId', taskid);
params.append('processInstanceId', processInstanceId);
if (fileList.length > 0) { if (fileList.length > 0) {
fileList.forEach((x) => { fileList.forEach((x) => {
params.append('file', x.file); params.append('file', x.file);

5
src/views/myWork/inComplete/inComplete.data.ts

@ -20,6 +20,11 @@ export const approveStartProcessColumns: BasicColumn[] = [
dataIndex: 'operator', dataIndex: 'operator',
width: 100, width: 100,
}, },
{
title: '处理人手机号',
dataIndex: 'operatorPhone',
width: 100,
},
{ {
title: '处理时间', title: '处理时间',
dataIndex: 'operateDate', dataIndex: 'operateDate',

2
src/views/projectBoard/childBoard/gaiGeRenWu.vue

@ -10,7 +10,7 @@
:stroke-width="18" :stroke-width="18"
:percentage=" :percentage="
Number(data.totalProgress.progress) * 100 > 0 Number(data.totalProgress.progress) * 100 > 0
? Number(data.totalProgress.progress) * 100 ? Math.floor(Number(data.totalProgress.progress) * 100)
: 0 : 0
" "
:width="200" :width="200"

2
src/views/projectBoard/childBoard/xingZhengQuHua.vue

@ -10,7 +10,7 @@
:stroke-width="18" :stroke-width="18"
:percentage=" :percentage="
Number(data.totalProgress.progress) * 100 > 0 Number(data.totalProgress.progress) * 100 > 0
? Number(data.totalProgress.progress) * 100 ? Math.floor(Number(data.totalProgress.progress) * 100)
: 0 : 0
" "
:width="200" :width="200"

2
src/views/projectBoard/totalProjectBoard/ProjectCard.vue

@ -88,7 +88,7 @@
:stroke-width="18" :stroke-width="18"
:percentage=" :percentage="
Number(data.totalProgress.progress) * 100 > 0 Number(data.totalProgress.progress) * 100 > 0
? Number(data.totalProgress.progress) * 100 ? Math.floor(Number(data.totalProgress.progress) * 100)
: 0 : 0
" "
:width="200" :width="200"

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

@ -4,6 +4,8 @@
<ProjectDetails :isEdit="false" :projectid="projectid" /> <ProjectDetails :isEdit="false" :projectid="projectid" />
<el-divider content-position="left">资金承诺函</el-divider> <el-divider content-position="left">资金承诺函</el-divider>
<UploadfileDetail :projectid="projectid" :stage="5" /> <UploadfileDetail :projectid="projectid" :stage="5" />
<ApprovalDetails :projectid="projectid" :stage="'creatProjectinfo'" v-if="showApprovalDetails==true"/>
</el-tab-pane> </el-tab-pane>
<el-tab-pane label="项目资料详情" name="2" v-if="showUploadfileDetail"> <el-tab-pane label="项目资料详情" name="2" v-if="showUploadfileDetail">
<el-divider content-position="left">项目资料详情</el-divider> <el-divider content-position="left">项目资料详情</el-divider>
@ -20,14 +22,18 @@
<el-tab-pane label="由以下项目拆分" name="5" v-if="splitDetailList?.length > 0"> <el-tab-pane label="由以下项目拆分" name="5" v-if="splitDetailList?.length > 0">
<ProjectTable :row="splitDetailList"/> <ProjectTable :row="splitDetailList"/>
</el-tab-pane> </el-tab-pane>
<el-tab-pane label="项目计划详情" name="6" v-if="showtuList?.length > 0">
<showtu :res="showtuList" />
</el-tab-pane>
</el-tabs> </el-tabs>
<ApprovalDetails :projectid="projectid" :stage="'creatProjectinfo'" v-if="showApprovalDetails==true"/>
</template> </template>
<script lang="ts" name="Detailpage" setup> <script lang="ts" name="Detailpage" setup>
import { defineProps, ref, onMounted } from 'vue' import { defineProps, ref, onMounted } from 'vue'
import { resourcetableColumns } from './projectInfo.data'; import { resourcetableColumns } from './projectInfo.data';
import { uploacFilePageList, getFieldchangeListByprojectid,getMergeDetailList,getSplitDetailList } from './projectInfo.api' import { uploacFilePageList, getFieldchangeListByprojectid,getMergeDetailList,getSplitDetailList } from './projectInfo.api'
import { queryPlanInfoMainTimeline } from '@/views/projectLib/projectPlan/projectPlan.api'
import { ActionItem, BasicTable, TableAction, useTable } from '@/components/Table'; import { ActionItem, BasicTable, TableAction, useTable } from '@/components/Table';
import { downloadFile } from "@/api/common/api" import { downloadFile } from "@/api/common/api"
import ProjectDetails from "../../ProcessApprovalSubPage/component/ProjectDetails.vue" import ProjectDetails from "../../ProcessApprovalSubPage/component/ProjectDetails.vue"
@ -35,16 +41,19 @@ import ApprovalDetails from "../../ProcessApprovalSubPage/component/ApprovalDeta
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"
import showtu from "@/views/projectLib/projectPlan/showtu.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>>()
let splitDetailList = ref<Array<Object>>() let splitDetailList = ref<Array<Object>>()
let showtuList = ref<Array<Object>>()
console.log("dataTodataTodataTo", dataTo) console.log("dataTodataTodataTo", dataTo)
onMounted(async () => { onMounted(async () => {
fieldChangeDetailList.value = await getFieldchangeListByprojectid({ projectid: dataTo.projectid }) fieldChangeDetailList.value = await getFieldchangeListByprojectid({ projectid: dataTo.projectid })
mergeDetailList.value=await getMergeDetailList({ projectid: dataTo.projectid }) mergeDetailList.value=await getMergeDetailList({ projectid: dataTo.projectid })
splitDetailList.value=await getSplitDetailList({ projectid: dataTo.projectid }) splitDetailList.value=await getSplitDetailList({ projectid: dataTo.projectid })
showtuList.value =await queryPlanInfoMainTimeline({ projectid: dataTo.projectid })
}) })
let activeName = ref("1") let activeName = ref("1")
function getTableAction(record): ActionItem[] { function getTableAction(record): ActionItem[] {

356
src/views/projectLib/projectPlan/addPlanFile.vue

@ -1,122 +1,300 @@
<template> <template>
<!-- 自定义表单 --> <!-- 自定义表单 -->
<!-- <el-divider content-position="left">模板表格文件下载</el-divider> <!-- <el-divider content-position="left">模板表格文件下载</el-divider>
<div style="padding-left: 40px;"> <div style="padding-left: 40px;">
<el-button slot="trigger" type="primary">下载模板</el-button> <el-button slot="trigger" type="primary">下载模板</el-button>
</div> --> </div> -->
<el-divider content-position="left">上传文件</el-divider> <BasicForm @register="registerApprovalMoneyForm" v-if="dataTo.taskName == '立项审批'" />
<el-form ref="importFormRef" > <BasicForm @register="registerContractMoneyForm" v-if="dataTo.taskName == '合同签订'" />
<el-form-item v-for=" (item, index) in dataTo.files" :key="index" :label="item" label-width="auto">
<el-upload class="upload-demo" ref="upload" action :http-request="httpRequest"
:before-upload="(file) => { return beforeUpload(file, item) }" :on-exceed="handleExceed" :limit="1"
:on-remove="removeFile">
<el-button slot="trigger" size="small" type="primary">选取文件</el-button>
<div slot="tip" class="el-upload__tip">只能上传{{ item }}且不超过500M</div>
</el-upload>
</el-form-item>
<el-form-item>
<el-button type="primary" @click="submitImportForm">开始导入</el-button>
<el-button type="info" @click="dialogVisible">关闭窗口</el-button>
</el-form-item>
</el-form>
</template>
<script lang="ts" name="uploadFile" setup> <el-divider content-position="left">上传文件</el-divider>
import { reactive, defineProps, onMounted } from 'vue' <el-divider content-position="left" v-if="dataTo.taskName.indexOf('可研报告初稿编制') >= 0 ||
import { planUploadFile, planUploadModifyFile } from './projectPlan.api'; dataTo.taskName.indexOf('可研报告终稿编制') >= 0" >支持上传文件数量为1-2</el-divider>
import { ElMessage } from 'element-plus'
<el-form ref="importFormRef">
<el-form-item
v-for="(item, index) in dataTo.files"
:key="index"
:label="item"
label-width="auto"
>
<el-upload
class="upload-demo"
ref="upload"
action
:http-request="httpRequest"
:before-upload="
(file) => {
return beforeUpload(file, item);
}
"
:on-exceed="handleExceed"
:limit="1"
:on-remove="removeFile"
>
<el-button slot="trigger" size="small" type="primary">选取文件</el-button>
<div slot="tip" class="el-upload__tip">只能上传{{ item }}且不超过500M</div>
</el-upload>
</el-form-item>
<el-form-item>
<el-button type="primary" @click="submitImportForm" :disabled="isSubmitting"
>开始导入</el-button
>
<el-button type="info" @click="dialogVisible">关闭窗口</el-button>
</el-form-item>
</el-form>
</template>
let fileList = reactive<Array<any>>([]); <script lang="ts" name="uploadFile" setup>
let dataTo = defineProps(["type", "files", "planinfoid"]) import { reactive, defineProps, onMounted, ref } from 'vue';
const emit = defineEmits(['close']); import { planUploadFile, planUploadModifyFile,planREUploadFile } from './projectPlan.api';
// import { message } from 'ant-design-vue';
onMounted(async () => { import { queryProjectInfoById } from '@/views/projectLib/projectInfo/projectInfo.api';
console.log("dataTo", dataTo) import { getplaninfoByid } from '@/views/projectLib/projectPlan/projectPlan.api';
}) import {
ApprovalMoneyFormSchemas,
ContractMoneyFormSchemas,
} from '@/views/projectLib/projectPlan/projectPlan.data';
import { useForm, BasicForm } from '@/components/Form';
const [
registerApprovalMoneyForm,
{
validate: validateApprovalMoneyForm,
getFieldsValue: getApprovalMoneyFieldsValue,
setFieldsValue: setApprovalMoneyFieldsValue,
},
] = useForm({
//
schemas: ApprovalMoneyFormSchemas,
showActionButtonGroup: false,
//
// autoSubmitOnEnter: true,
// //
// showResetButton: false,
//
// submitButtonOptions: { text: '', preIcon: '' },
// 24 0-24
// actionColOptions: { span: 17 },
// size: "small",
// labelCol: { style: { width: '120px' } },
wrapperCol: { style: { width: 'auto' } },
});
const [
registerContractMoneyForm,
{
validate: validateContractMoneyForm,
getFieldsValue: getContractMoneyFieldsValue,
setFieldsValue: setContractMoneyFieldsValue,
updateSchema: updateContractMoneySchema,
},
] = useForm({
//
schemas: ContractMoneyFormSchemas,
showActionButtonGroup: false,
//
// autoSubmitOnEnter: true,
// //
// showResetButton: false,
//
// submitButtonOptions: { text: '', preIcon: '' },
// 24 0-24
// actionColOptions: { span: 17 },
// size: "small",
// labelCol: { style: { width: '120px' } },
wrapperCol: { style: { width: 'auto' } },
});
let fileList = reactive<Array<any>>([]);
let projectId = ref('');
let isSubmitting = ref(false);
let dataTo = defineProps(['type', 'files', 'planinfoid', 'taskName']);
const emit = defineEmits(['close']);
//
onMounted(async () => {
console.log('dataTo', dataTo);
let resList = await getplaninfoByid({ planinfoid: dataTo.planinfoid });
let param: any = {
projectid: resList[0].projectId,
};
projectId.value = resList[0].projectId;
let res = await queryProjectInfoById(param);
if (dataTo.taskName == '立项审批') {
setApprovalMoneyFieldsValue({ approvalTotalMoney: res.urtEstimatedAmount });
}
if (dataTo.taskName == '合同签订') {
updateContractMoneySchema({
field: 'contractTotalMoney',
componentProps: {
precision: 2,
min: 0,
style: { width: '100%' },
max: res.urtEstimatedAmount,
},
});
}
});
function httpRequest(option) { function httpRequest(option) {
fileList.push(option) fileList.push(option);
console.log(fileList, option) console.log(fileList, option);
} }
function removeFile(option) { function removeFile(option) {
for (let i = 0; i < fileList.length; i++) { for (let i = 0; i < fileList.length; i++) {
if (fileList[i].file.name == option.name) { if (fileList[i].file.name == option.name) {
fileList.splice(i, 1) fileList.splice(i, 1);
} }
} }
console.log(fileList, option) console.log(fileList, option);
}
} //
// function beforeUpload(file, item) {
function beforeUpload(file, item) { console.log('file,item', file, item);
console.log("file,item", file, item) let fileSize = file.size;
let fileSize = file.size
const FIVE_M = 500 * 1024 * 1024; const FIVE_M = 500 * 1024 * 1024;
//5M //5M
if (fileSize > FIVE_M) { if (fileSize > FIVE_M) {
ElMessage.error("最大上传500M") message.error('最大上传500M');
return false return false;
} }
let geShi = ["xlx","xlsx", "docx", "doc", "pdf"] as Array<string> let geShi = ['xlx', 'xlsx', 'docx', 'doc', 'pdf'] as Array<string>;
if (geShi.indexOf(file.name.substring(file.name.lastIndexOf(".") + 1)) == -1) { if (geShi.indexOf(file.name.substring(file.name.lastIndexOf('.') + 1)) == -1) {
ElMessage.error('文件格式错误!仅支持' + "xlx,xlsx, docx, doc, pdf"); message.error('文件格式错误!仅支持' + 'xlx,xlsx, docx, doc, pdf');
console.log('文件格式错误!仅支持' + "xlsx", "docx", "doc", "pdf") console.log('文件格式错误!仅支持' + 'xlsx', 'docx', 'doc', 'pdf');
return false; return false;
} }
if (item.indexOf(file.name.substring(0,file.name.indexOf(".")))==-1) { if (item.indexOf(file.name.substring(0, file.name.indexOf('.'))) == -1) {
ElMessage.error('请上传文件:' + item); message.error('请上传文件:' + item);
return false; return false;
} }
console.log('文件上传成功') console.log('文件上传成功');
return true return true;
} }
// //
function handleExceed() { function handleExceed() {
ElMessage.warning("最多只能上传一个文件") message.warning('最多只能上传一个文件');
} }
//Excel //Excel
async function submitImportForm() { async function submitImportForm() {
if (fileList.length == 0) { if (fileList.length == 0) {
ElMessage({ message.error('未选择任何文件,无法上传!');
message: "未选择任何文件,无法上传!", return;
type: "error"
})
return
} }
// type ==0type ==1 // type ==0type ==1
if (fileList.length != dataTo.files.length && dataTo.type == 0) { //稿稿1-2
ElMessage({ if (
message: "上传的文件不符合要求请检查", dataTo.taskName.indexOf('可研报告初稿编制') >= 0 ||
type: "error" dataTo.taskName.indexOf('可研报告终稿编制') >= 0
}) ) {
return //
} else {
if (fileList.length != dataTo.files.length && dataTo.type == 0) {
message.error('上传的文件不符合要求请检查');
return;
}
} }
// // 使form // // 使form
const params = new FormData() const params = new FormData();
if (dataTo.taskName == '立项审批') {
if (await validateApprovalMoneyForm()) {
const approvalMoneyFieldsValue = getApprovalMoneyFieldsValue();
const {
approvalTotalMoney,
approvalCentralMoney,
approvalProvincialMoney,
approvalCityMoney,
approvalCountyMoney,
approvalSelfMoney,
} = approvalMoneyFieldsValue;
//
const sumOfOtherAmounts =
approvalCentralMoney +
approvalProvincialMoney +
approvalCityMoney +
approvalCountyMoney +
approvalSelfMoney;
//
if (Math.abs(approvalTotalMoney - sumOfOtherAmounts) < Number.EPSILON) {
approvalMoneyFieldsValue['id'] = projectId.value;
params.append('approvalMoneyFieldsValue', JSON.stringify(approvalMoneyFieldsValue));
} else {
message.error('总金额与其他金额之和不相等,请重新输入!');
return;
}
} else {
return;
}
} else if (dataTo.taskName == '合同签订') {
if (await validateContractMoneyForm()) {
const contractMoneyFieldsValue = getContractMoneyFieldsValue();
const {
contractTotalMoney,
contractCentralMoney,
contractProvincialMoney,
contractCityMoney,
contractCountyMoney,
contractSelfMoney,
} = contractMoneyFieldsValue;
//
const sumOfOtherAmounts =
contractCentralMoney +
contractProvincialMoney +
contractCityMoney +
contractCountyMoney +
contractSelfMoney;
// 使Number.EPSILON
if (Math.abs(contractTotalMoney - sumOfOtherAmounts) < Number.EPSILON) {
contractMoneyFieldsValue['id'] = projectId.value;
params.append('contractMoneyFieldsValue', JSON.stringify(contractMoneyFieldsValue));
} else {
message.error('总金额与其他金额之和不相等,请重新输入!');
return;
}
} else {
return;
}
}
// paramsData // paramsData
fileList.forEach((x) => { fileList.forEach((x) => {
console.log("xxxxxxxxxx", x, x.file) console.log('xxxxxxxxxx', x, x.file);
params.append('file', x.file) params.append('file', x.file);
}); });
params.append("planinfoid", dataTo.planinfoid) params.append('planinfoid', dataTo.planinfoid);
isSubmitting.value = true;
if (dataTo.type == 0) { if (dataTo.type == 0) {
planUploadFile(params).then(() => { planUploadFile(params)
emit("close") .then(() => {
emit('close');
}) })
} else { .catch(() => {
planUploadModifyFile(params).then(() => { isSubmitting.value = false;
emit("close") });
} else if(dataTo.type == 1){
planUploadModifyFile(params)
.then(() => {
emit('close');
}) })
.catch(() => {
isSubmitting.value = false;
});
}else{
planREUploadFile(params)
.then(() => {
emit('close');
})
.catch(() => {
isSubmitting.value = false;
});
} }
}
} function dialogVisible() {
function dialogVisible() { emit('close');
emit("close") }
}
</script> </script>
<style></style> <style></style>

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

@ -35,8 +35,8 @@ import viewPlanDetail from "@/views/projectLib/projectPlan/viewPlanDetail.vue";
import { isShowByRoles } from '@/views/projectLib/projectInfo/projectInfo.api'; import { isShowByRoles } from '@/views/projectLib/projectInfo/projectInfo.api';
import { columns } from '@/views/projectLib/projectInfo/projectInfo.data'; import { columns } from '@/views/projectLib/projectInfo/projectInfo.data';
import { searchFormSchema ,unitedTechnicalRevieColumns} from '@/views/projectLib/projectPlan/projectPlan.data'; import { searchFormSchema } from '@/views/projectLib/projectInfo/projectInfo.data';
import { projectPlanPageList,getUnitedTechnicalReviewList } from '@/views/projectLib/projectPlan/projectPlan.api'; import { projectPlanPageList } from '@/views/projectLib/projectPlan/projectPlan.api';
import { useRouter } from 'vue-router'; // useRouter import { useRouter } from 'vue-router'; // useRouter
const router = useRouter(); const router = useRouter();

134
src/views/projectLib/projectPlan/planinfoFileDetail.vue

@ -1,11 +1,22 @@
<template> <template>
<BasicModal v-bind="$attrs" @register="registerModal" title="文件详情" width="1200px" :showOkBtn="false"> <BasicModal
v-bind="$attrs"
@register="registerModal"
title="文件详情"
width="1200px"
:showOkBtn="false"
>
<el-divider content-position="left">{{ taskName }}</el-divider> <el-divider content-position="left">{{ taskName }}</el-divider>
<div> <div>
<BasicForm @register="registerMoneyForm" v-if="taskName == '联合技术审查'" />
<BasicForm @register="registerApprovalMoneyForm" v-if="taskName == '立项审批'" />
<BasicForm @register="registerContractMoneyForm" v-if="taskName == '合同签订'" />
<el-divider content-position="left">项目计划资料详情</el-divider> <el-divider content-position="left">项目计划资料详情</el-divider>
<PlanFileDetail :planinfoid="planinfoid" :stage="1" /> <PlanFileDetail :planinfoid="planinfoid" :stage="1" />
<el-divider content-position="left">项目计划审批文件列表</el-divider> <el-divider content-position="left" v-if="taskName != '联合技术审查'"
<PlanFileDetail :planinfoid="planinfoid" :stage="2" /> >项目计划审批文件列表</el-divider
>
<PlanFileDetail :planinfoid="planinfoid" :stage="2" v-if="taskName != '联合技术审查'" />
<div v-if="isfinish == 1"> <div v-if="isfinish == 1">
<ApprovalDetails :projectid="planinfoid" :stage="processName" /> <ApprovalDetails :projectid="planinfoid" :stage="processName" />
</div> </div>
@ -13,28 +24,101 @@
</BasicModal> </BasicModal>
</template> </template>
<script lang="ts" name="Detailpage" setup> <script lang="ts" name="Detailpage" setup>
import { ref, onMounted } from 'vue' import { ref, onMounted } from 'vue';
import { BasicModal, useModalInner } from '@/components/Modal'; import { BasicModal, useModalInner } from '@/components/Modal';
import {getProcessName} from "./projectPlan.api" import { getProcessName } from './projectPlan.api';
import ApprovalDetails from "../../ProcessApprovalSubPage/component/ApprovalDetails.vue" import ApprovalDetails from '../../ProcessApprovalSubPage/component/ApprovalDetails.vue';
import PlanFileDetail from "@/views/ProcessApprovalSubPage/component/PlanFileDetail.vue"; import PlanFileDetail from '@/views/ProcessApprovalSubPage/component/PlanFileDetail.vue';
import { EstimateAmountFormSchemas } from '@/views/projectLib/projectPlan/projectPlan.data';
const [registerModal, { closeModal }] = useModalInner(init); import { queryProjectInfoById } from '@/views/projectLib/projectInfo/projectInfo.api';
let processName = ref("")
let planinfoid = ref()
let taskName=ref()
let isfinish=ref(0)
onMounted(async () => {
// processName.value =await getProcessName(dataTo.planinfoid)
})
async function init(data) {
processName.value =await getProcessName({pid:data.planinfoid})
planinfoid.value = data.planinfoid
taskName.value = data.taskName
isfinish.value = data.isfinish
}
import { useForm, BasicForm } from '@/components/Form';
const [registerMoneyForm, { setFieldsValue: setMoneyFieldsValue }] = useForm({
//
schemas: EstimateAmountFormSchemas,
showActionButtonGroup: false,
//
// autoSubmitOnEnter: true,
// //
// showResetButton: false,
//
// submitButtonOptions: { text: '', preIcon: '' },
// 24 0-24
// actionColOptions: { span: 17 },
disabled: true,
// size: "small",
// labelCol: { style: { width: '120px' } },
wrapperCol: { style: { width: 'auto' } },
});
import { getProjectinfoMoneyInfo } from '@/views/projectLib/projectPlan/projectPlan.api';
import {
ApprovalMoneyFormSchemas,
ContractMoneyFormSchemas,
} from '@/views/projectLib/projectPlan/projectPlan.data';
const [registerApprovalMoneyForm, { setFieldsValue: setApprovalMoneyFieldsValue }] = useForm({
//
schemas: ApprovalMoneyFormSchemas,
showActionButtonGroup: false,
//
// autoSubmitOnEnter: true,
// //
// showResetButton: false,
//
// submitButtonOptions: { text: '', preIcon: '' },
// 24 0-24
// actionColOptions: { span: 17 },
// size: "small",
// labelCol: { style: { width: '120px' } },
disabled: true,
wrapperCol: { style: { width: 'auto' } },
});
const [registerContractMoneyForm, { setFieldsValue: setContractMoneyFieldsValue }] = useForm({
//
schemas: ContractMoneyFormSchemas,
showActionButtonGroup: false,
//
// autoSubmitOnEnter: true,
// //
// showResetButton: false,
//
// submitButtonOptions: { text: '', preIcon: '' },
// 24 0-24
// actionColOptions: { span: 17 },
// size: "small",
// labelCol: { style: { width: '120px' } },
disabled: true,
wrapperCol: { style: { width: 'auto' } },
});
const [registerModal, { closeModal }] = useModalInner(init);
let processName = ref('');
let planinfoid = ref();
let taskName = ref();
let isfinish = ref(0);
onMounted(async () => {
// processName.value =await getProcessName(dataTo.planinfoid)
});
async function init(data) {
processName.value = await getProcessName({ pid: data.planinfoid });
planinfoid.value = data.planinfoid;
taskName.value = data.taskName;
isfinish.value = data.isfinish;
if (taskName.value == '立项审批') {
let res = await getProjectinfoMoneyInfo({
projectid: data.projectid,
});
setApprovalMoneyFieldsValue(res);
} else if (taskName.value == '合同签订') {
let res = await getProjectinfoMoneyInfo({
projectid: data.projectid,
});
setContractMoneyFieldsValue(res);
} else if (taskName.value == '联合技术审查') {
let param: any = {
projectid: data.projectid,
};
let res = await queryProjectInfoById(param);
setMoneyFieldsValue(res);
}
}
</script> </script>
<style></style> <style></style>

9
src/views/projectLib/projectPlan/projectPlan.api.ts

@ -22,11 +22,16 @@ export enum Api {
getPlanFileApprovalInfoByPlaninfoId="/huzhouPlaninfofile/getPlanFileApprovalInfoByPlaninfoId", getPlanFileApprovalInfoByPlaninfoId="/huzhouPlaninfofile/getPlanFileApprovalInfoByPlaninfoId",
downloadPlanInfo="/huzhouPlan/downloadPlanInfo", downloadPlanInfo="/huzhouPlan/downloadPlanInfo",
getUnitedTechnicalReviewList='/huzhouProject/getUnitedTechnicalReviewList', getUnitedTechnicalReviewList='/huzhouProject/getUnitedTechnicalReviewList',
uploadURTFile='/huzhouUploadfileinfo/uploadURTFile' uploadURTFile='/huzhouUploadfileinfo/uploadURTFile',
getProjectinfoMoneyInfo="/huzhouProjectinfoMoney/getProjectinfoMoneyInfo",
planREUploadFile="/huzhouPlaninfofile/planREUploadFile",
} }
/** /**
* *
*/ */
export const getProjectinfoMoneyInfo = (params) => defHttp.get({ url: Api.getProjectinfoMoneyInfo, params })
export const projectPlanPageList = (params) => defHttp.get({ url: Api.projectPlanPageList, params }) export const projectPlanPageList = (params) => defHttp.get({ url: Api.projectPlanPageList, params })
export const getProcessName = (params) => defHttp.get({ url: Api.getProcessName, params }) export const getProcessName = (params) => defHttp.get({ url: Api.getProcessName, params })
@ -41,6 +46,8 @@ export const queryProjectPlan = (params) => defHttp.get({ url: Api.queryProjectP
export const submitplaninfoUploadFile = (params?) =>defHttp.post({ url: Api.submitplaninfoUploadFile,headers:{ "Content-Type": "multipart/form-data" }, params }) export const submitplaninfoUploadFile = (params?) =>defHttp.post({ url: Api.submitplaninfoUploadFile,headers:{ "Content-Type": "multipart/form-data" }, params })
export const queryPlanInfoMainTimeline = (params) => defHttp.get({ url: Api.queryPlanInfoMainTimeline, params }) export const queryPlanInfoMainTimeline = (params) => defHttp.get({ url: Api.queryPlanInfoMainTimeline, params })
export const planUploadFile = (params?) =>defHttp.post({ url: Api.planUploadFile,headers:{ "Content-Type": "multipart/form-data" }, params }) export const planUploadFile = (params?) =>defHttp.post({ url: Api.planUploadFile,headers:{ "Content-Type": "multipart/form-data" }, params })
export const planREUploadFile = (params?) =>defHttp.post({ url: Api.planREUploadFile,headers:{ "Content-Type": "multipart/form-data" }, params })
export const queryPlaninfoFilePageByid = (params) => defHttp.get({ url: Api.queryPlaninfoFilePageByid, params }) export const queryPlaninfoFilePageByid = (params) => defHttp.get({ url: Api.queryPlaninfoFilePageByid, params })
export const planUploadModifyFile = (params?) =>defHttp.post({ url: Api.planUploadModifyFile,headers:{ "Content-Type": "multipart/form-data" }, params }) export const planUploadModifyFile = (params?) =>defHttp.post({ url: Api.planUploadModifyFile,headers:{ "Content-Type": "multipart/form-data" }, params })
export const modifyPlaninfo = (params?) =>defHttp.post({ url: Api.modifyPlaninfo,headers:{ "Content-Type": "multipart/form-data" }, params }) export const modifyPlaninfo = (params?) =>defHttp.post({ url: Api.modifyPlaninfo,headers:{ "Content-Type": "multipart/form-data" }, params })

258
src/views/projectLib/projectPlan/projectPlan.data.ts

@ -1,8 +1,5 @@
import { BasicColumn } from '@/components/Table'; import { BasicColumn } from '@/components/Table';
import { FormSchema } from '@/components/Form';
export const PlaninfoColumn: BasicColumn[] = [ export const PlaninfoColumn: BasicColumn[] = [
@ -216,3 +213,256 @@ export const unitedTechnicalRevieColumns: BasicColumn[] = [
}, },
}, },
]; ];
export const EstimateAmountFormSchemas: FormSchema[] = [
{
//标题名称
label: '项目申报金额(元)',
//字段
field: 'totalMoney',
labelWidth: 'auto',
component: 'Input',
componentProps:{
precision:2,
},
colProps: { span: 6 },
dynamicDisabled:true,
defaultValue:2000
},
{
//标题名称
label: '联合审查估算金额(元)',
//字段
field: 'urtEstimatedAmount',
labelWidth: 'auto',
component: "InputNumber",
required: true,
componentProps: ({ formModel, formActionType }) => {
return {
//
style: { width: '100%' },
min:0,
precision:2,
max:formModel.totalMoney,
onChange: async (value, option) => {
let hejian = formModel.totalMoney-value
// formModel.manageContactor = undefined; // reset city value
const { updateSchema, setFieldsValue } = formActionType;
if (value >= 0) {
updateSchema({
field: 'hejian',
suffix: String(((hejian/formModel.totalMoney)*100).toFixed(2))+'%',
});
setFieldsValue({ hejian: hejian })
}
},
};
},
colProps: { span: 8 },
},
{
//标题名称
label: '核减金额(元)',
//字段
field: 'hejian',
component: 'Input',
dynamicDisabled:true,
componentProps:{
precision:2,
},
colProps: { span: 6 },
},
]
export const ApprovalMoneyFormSchemas: FormSchema[] = [
{
//标题名称
label: '项目总金额(元)',
//字段
field: 'approvalTotalMoney',
labelWidth: 'auto',
component: 'InputNumber',
componentProps:{
precision:2,
style: { width: '100%' },
},
colProps: { span: 6 },
dynamicDisabled:true,
defaultValue:2000
},
{
//标题名称
label: '中央资金(元)',
//字段
field: 'approvalCentralMoney',
labelWidth: 'auto',
componentProps:{
precision:2,
min:0,
style: { width: '100%' },
},
required: true,
component: 'InputNumber',
colProps: { span: 6 },
},
{
//标题名称
label: '省级资金(元)',
//字段
field: 'approvalProvincialMoney',
labelWidth: 'auto',
required: true,
componentProps:{
precision:2,
min:0,
style: { width: '100%' },
},
component: 'InputNumber',
colProps: { span: 6 },
},
{
//标题名称
label: '市级资金(元)',
//字段
field: 'approvalCityMoney',
labelWidth: 'auto',
required: true,
componentProps:{
precision:2,
min:0,
style: { width: '100%' },
},
component: 'InputNumber',
colProps: { span: 6 },
},
{
//标题名称
label: '区县级资金(元)',
//字段
field: 'approvalCountyMoney',
labelWidth: 'auto',
required: true,
componentProps:{
precision:2,
min:0,
style: { width: '100%' },
},
//组件 支持组件详见 components/Form/src/types/index.ts 中的 ComponentType
component: 'InputNumber',
colProps: { span: 6 },
},
{
//标题名称
label: '自筹资金(元)',
//字段
field: 'approvalSelfMoney',
labelWidth: 'auto',
required: true,
componentProps:{
precision:2,
min:0,
style: { width: '100%' },
},
//组件 支持组件详见 components/Form/src/types/index.ts 中的 ComponentType
component: 'InputNumber',
colProps: { span: 6 },
},
]
export const ContractMoneyFormSchemas: FormSchema[] = [
{
//标题名称
label: '合同总金额(元)',
//字段
field: 'contractTotalMoney',
labelWidth: 'auto',
component: 'InputNumber',
componentProps:{
precision:2,
min:0,
style: { width: '100%' },
},
colProps: { span: 6 },
required:true,
defaultValue:0
},
{
//标题名称
label: '中央资金(元)',
//字段
field: 'contractCentralMoney',
labelWidth: 'auto',
componentProps:{
precision:2,
min:0,
style: { width: '100%' },
},
required: true,
component: 'InputNumber',
colProps: { span: 6 },
},
{
//标题名称
label: '省级资金(元)',
//字段
field: 'contractProvincialMoney',
labelWidth: 'auto',
required: true,
componentProps:{
precision:2,
min:0,
style: { width: '100%' },
},
component: 'InputNumber',
colProps: { span: 6 },
},
{
//标题名称
label: '市级资金(元)',
//字段
field: 'contractCityMoney',
labelWidth: 'auto',
required: true,
componentProps:{
precision:2,
min:0,
style: { width: '100%' },
},
component: 'InputNumber',
colProps: { span: 6 },
},
{
//标题名称
label: '区县级资金(元)',
//字段
field: 'contractCountyMoney',
labelWidth: 'auto',
required: true,
componentProps:{
precision:2,
min:0,
style: { width: '100%' },
},
//组件 支持组件详见 components/Form/src/types/index.ts 中的 ComponentType
component: 'InputNumber',
colProps: { span: 6 },
},
{
//标题名称
label: '自筹资金(元)',
//字段
field: 'contractSelfMoney',
labelWidth: 'auto',
required: true,
componentProps:{
precision:2,
min:0,
style: { width: '100%' },
},
//组件 支持组件详见 components/Form/src/types/index.ts 中的 ComponentType
component: 'InputNumber',
colProps: { span: 6 },
},
]

126
src/views/projectLib/projectPlan/showtu.vue

@ -0,0 +1,126 @@
<template>
<div>
<el-row>
<el-col :span="24">
项目进度<Progress :size="15" :percent="activities[0]?.totalPercent"></Progress>
</el-col>
</el-row>
<el-row>
<el-col :span="24">
<el-steps finish-status="success" :active="activities.status">
<el-step
v-for="(item, index) in activities"
:key="index"
:status="item.isfinish == 2 ? 'success' : 'wait'"
>
<template #title>
<div>
{{ item.taskName }}
</div>
<div>
{{ item.scheduledStartTime + '--' + item.scheduledEndTime }}
</div>
</template>
<template #description>
<elstepchild v-if="item.children != null" :child="item.children"></elstepchild>
</template>
<template #icon>
<Progress
type="circle"
:percent="item.percent"
:size="40"
:status="item.progressStatus"
></Progress>
</template>
</el-step>
</el-steps>
</el-col>
</el-row>
</div>
</template>
<script lang="ts" name="viewPlanDetail" setup>
import { ref, onMounted } from 'vue';
import elstepchild from './elstepchild.vue';
import { Progress, message } from 'ant-design-vue';
let dataTo = defineProps(["res"]);
let activities = ref([]);
onMounted(() => {
activities.value=dataTo.res
});
</script>
<style scoped>
.timeline {
display: flex;
width: 100%;
margin-bottom: 100px;
.lineitem {
transform: translateX(50%);
width: 25%;
}
}
:deep(.el-timeline-item__tail) {
border-left: none;
border-top: 2px solid #e4e7ed;
width: 100%;
position: absolute;
top: 9px;
}
:deep(.el-timeline-item__wrapper) {
padding-left: 0;
position: absolute;
top: 20px;
transform: translateX(-50%);
text-align: center;
}
:deep(.el-timeline-item__timestamp) {
font-size: 14px;
}
.el-row {
margin-bottom: 25px;
margin-top: 25px;
}
.componentA {
position: absolute;
z-index: 1;
/* 设置较低的z-index值 */
/* 其他样式 */
}
.componentB {
position: absolute;
z-index: 2;
/* 设置较高的z-index值 */
/* 其他样式 */
}
.custom-content {
position: absolute;
top: 0;
transform: translateX(-50%);
transition: left 0.3s;
z-index: 3;
margin-top: 20px;
}
.italicize {
/* transform: skew(15deg); 使用 transform 属性进行倾斜 */
transform: rotate(-45deg);
display: inline-block;
/* 需要将元素设为块级元素才能应用transform属性 */
z-index: 4;
margin-top: -20px;
color: #ea1212;
font-size: large;
}
</style>

85
src/views/projectLib/projectPlan/uploadURTfile.vue

@ -8,6 +8,8 @@
:showOkBtn="false" :showOkBtn="false"
:showCancelBtn="false" :showCancelBtn="false"
> >
<BasicForm @register="registerMoneyForm" />
<el-divider content-position="left">上传部门联审意见</el-divider> <el-divider content-position="left">上传部门联审意见</el-divider>
<el-form ref="importFormRef"> <el-form ref="importFormRef">
@ -48,7 +50,7 @@
</el-form-item> </el-form-item>
<el-form-item> <el-form-item>
<el-button type="primary" @click="submitImportForm">开始导入</el-button> <el-button type="primary" @click="submitImportForm" :disabled="isSubmitting">开始导入</el-button>
<el-button type="info" @click="dialogVisible">关闭窗口</el-button> <el-button type="info" @click="dialogVisible">关闭窗口</el-button>
</el-form-item> </el-form-item>
</el-form> </el-form>
@ -56,17 +58,50 @@
</template> </template>
<script lang="ts" name="setProjectWorkReport" setup> <script lang="ts" name="setProjectWorkReport" setup>
import { reactive, defineEmits, onMounted, ref } from 'vue'; import { reactive, defineEmits, onMounted, ref } from 'vue';
import { ElMessage } from 'element-plus'; import { message } from 'ant-design-vue';
import { useModalInner, BasicModal } from '@/components/Modal'; import { useModalInner, BasicModal } from '@/components/Modal';
import { uploadURTFile } from '@/views/projectLib/projectPlan/projectPlan.api'; import { uploadURTFile } from '@/views/projectLib/projectPlan/projectPlan.api';
import { queryProjectInfoById } from '@/views/projectLib/projectInfo/projectInfo.api'; import { queryProjectInfoById } from '@/views/projectLib/projectInfo/projectInfo.api';
import { EstimateAmountFormSchemas } from '@/views/projectLib/projectPlan/projectPlan.data';
const [registerModal, { closeModal }] = useModalInner(init); const [registerModal, { closeModal }] = useModalInner(init);
import { useForm, BasicForm } from '@/components/Form';
let projectid = ref('');
const [
registerMoneyForm,
{
validate: validateMoneyForm,
getFieldsValue: getMoneyFieldsValue,
setFieldsValue: setMoneyFieldsValue,
},
] = useForm({
//
schemas: EstimateAmountFormSchemas,
showActionButtonGroup: false,
//
// autoSubmitOnEnter: true,
// //
// showResetButton: false,
//
// submitButtonOptions: { text: '', preIcon: '' },
// 24 0-24
// actionColOptions: { span: 17 },
// size: "small",
// labelCol: { style: { width: '120px' } },
wrapperCol: { style: { width: 'auto' } },
});
let fileList = reactive<Array<any>>([]); let fileList = reactive<Array<any>>([]);
let planinfoid = ref(''); let planinfoid = ref('');
let isSubmitting = ref(false);
async function init(data) { async function init(data) {
console.log('datadatadata', data); console.log('datadatadata', data);
planinfoid.value = data.planinfoid; planinfoid.value = data.planinfoid;
projectid.value = data.projectid;
let param: any = {
projectid: projectid.value,
};
let res = await queryProjectInfoById(param);
setMoneyFieldsValue(res);
} }
const emit = defineEmits(['close']); const emit = defineEmits(['close']);
@ -92,17 +127,17 @@
const FIVE_M = 500 * 1024 * 1024; const FIVE_M = 500 * 1024 * 1024;
//5M //5M
if (fileSize > FIVE_M) { if (fileSize > FIVE_M) {
ElMessage.error('最大上传500M'); message.error('最大上传500M');
return false; return false;
} }
// let geShi = ['xlx', 'xlsx', 'docx', 'doc', 'pdf'] as Array<string>; // let geShi = ['xlx', 'xlsx', 'docx', 'doc', 'pdf'] as Array<string>;
// if (geShi.indexOf(file.name.substring(file.name.indexOf('.') + 1)) == -1) { // if (geShi.indexOf(file.name.substring(file.name.indexOf('.') + 1)) == -1) {
// ElMessage.error('' + 'xlx,xlsx, docx, doc, pdf'); // message.error('' + 'xlx,xlsx, docx, doc, pdf');
// console.log('' + 'xlsx', 'docx', 'doc', 'pdf'); // console.log('' + 'xlsx', 'docx', 'doc', 'pdf');
// return false; // return false;
// } // }
// if (item.indexOf(file.name.substring(0, file.name.indexOf('.'))) == -1) { // if (item.indexOf(file.name.substring(0, file.name.indexOf('.'))) == -1) {
// ElMessage.error(':' + item); // message.error(':' + item);
// return false; // return false;
// } // }
console.log('文件上传成功'); console.log('文件上传成功');
@ -111,15 +146,12 @@
} }
// //
function handleExceed() { function handleExceed() {
ElMessage.warning('最多只能上传十个文件'); message.warning('最多只能上传十个文件');
} }
//Excel //Excel
async function submitImportForm() { async function submitImportForm() {
if (fileList.length == 0) { if (fileList.length == 0) {
ElMessage({ message.error('未选择任何文件,无法上传!');
message: '未选择任何文件,无法上传!',
type: 'error',
});
return; return;
} }
let cunzai = false; let cunzai = false;
@ -130,20 +162,29 @@
} }
}); });
if (!cunzai) { if (!cunzai) {
ElMessage.error('请上传《部门联审意见》'); message.error('请上传《部门联审意见》');
return; return;
} }
// // 使form if (await validateMoneyForm()) {
const params = new FormData(); let moneydata = await getMoneyFieldsValue();
// paramsData // // 使form
fileList.forEach((x) => { const params = new FormData();
console.log('xxxxxxxxxx', x, x.file); // paramsData
params.append('file', x.file); fileList.forEach((x) => {
}); console.log('xxxxxxxxxx', x, x.file);
params.append('planinfoid', planinfoid.value); params.append('file', x.file);
uploadURTFile(params).then(() => { });
emit('close'); params.append('urtEstimatedAmount', moneydata.urtEstimatedAmount);
}); params.append('planinfoid', planinfoid.value);
isSubmitting.value = true;
uploadURTFile(params).then(() => {
emit('close');
}).catch(() => {
isSubmitting.value = false;
});
} else {
message.error('请正确填写联合审查估算金额');
}
} }
function dialogVisible() { function dialogVisible() {
emit('close'); emit('close');

91
src/views/projectLib/projectPlan/viewPlanDetail.vue

@ -89,6 +89,7 @@
:type="type" :type="type"
:planinfoid="planinfoid" :planinfoid="planinfoid"
:files="fileArr" :files="fileArr"
:taskName="taskName"
@close="closePlanFileModal()" @close="closePlanFileModal()"
/> />
</BasicModal> </BasicModal>
@ -103,6 +104,15 @@
<planFileApproval :record="recordData" @close="closeplanFile" /> <planFileApproval :record="recordData" @close="closeplanFile" />
</BasicModal> </BasicModal>
<uploadURTfile @register="registerUnitedTechnicalReview" @close="closePlanFileModal" /> <uploadURTfile @register="registerUnitedTechnicalReview" @close="closePlanFileModal" />
<BasicModal
@register="registerMessageInfo"
title="提示信息"
:showOkBtn="true"
:showCancelBtn="true"
@ok="okMessageInfo"
>
<h1>{{ messageInfo }}</h1>
</BasicModal>
</template> </template>
<script lang="ts" name="viewPlanDetail" setup> <script lang="ts" name="viewPlanDetail" setup>
import { ref, onMounted } from 'vue'; import { ref, onMounted } from 'vue';
@ -133,6 +143,8 @@
let fileArr = ref([]); let fileArr = ref([]);
let planinfoid = ref(); let planinfoid = ref();
let taskName = ref(); let taskName = ref();
let UnitedTechnicalReviewmode = ref('');
let messageInfo = ref('');
let recordData = ref({}); let recordData = ref({});
const [registeruploadFile, { openModal: openPlanFile, closeModal: closePlanFile }] = useModal(); // const [registeruploadFile, { openModal: openPlanFile, closeModal: closePlanFile }] = useModal(); //
const [ const [
@ -144,6 +156,8 @@
registerUnitedTechnicalReview, registerUnitedTechnicalReview,
{ openModal: openUnitedTechnicalReviewmode, closeModal: closeUnitedTechnicalReviewmode }, { openModal: openUnitedTechnicalReviewmode, closeModal: closeUnitedTechnicalReviewmode },
] = useModal(); // ] = useModal(); //
const [registerMessageInfo, { openModal: openMessageInfo, closeModal: closeMessageInfo }] =
useModal(); //
onMounted(() => { onMounted(() => {
queryPlanInfoMainTimeline({ queryPlanInfoMainTimeline({
@ -227,6 +241,24 @@
confirm: handlefinish.bind(null, record), confirm: handlefinish.bind(null, record),
}, },
}, },
{
label: '重新上传',
ifShow: () => {
if (
record.isfinish ==2 &&
record.taskFile?.length > 0 &&(
record.taskName == '可研报告初稿编制' ||
record.taskName == '可研报告终稿编制')
) {
if (isShowByRoles('projectContact')) {
return true;
}
return false;
}
return false;
},
onClick: handleREuploadfile.bind(null, record),
},
]; ];
} }
@ -235,18 +267,45 @@
planinfoid: record.id, planinfoid: record.id,
taskName: record.taskName, taskName: record.taskName,
isfinish: record.isfinish, isfinish: record.isfinish,
projectid: dataTo.projectId,
}); });
} }
async function handleREuploadfile(record) {
//
taskName.value = record.taskName;
type.value = record.isfinish;
if (record.taskFile.includes(',')) {
fileArr.value = record.taskFile.split(',');
} else {
fileArr.value = record.taskFile.split(',');
}
if (record.taskName.indexOf('可研报告初稿编制') >= 0) {
fileArr.value.push("《项目建议书》");
}else if (record.taskName.indexOf('可研报告终稿编制') >= 0) {
fileArr.value.push("《项目建议书》");
}
planinfoid.value = record.id;
openPlanFile();
}
async function handleuploadfile(record) { async function handleuploadfile(record) {
taskName.value = record.taskName;
type.value = record.isfinish; type.value = record.isfinish;
if(record.taskFile.includes(',')){ if (record.taskFile.includes(',')) {
fileArr.value = record.taskFile.split(','); fileArr.value = record.taskFile.split(',');
}else{ } else {
fileArr.value = record.taskFile.split(','); fileArr.value = record.taskFile.split(',');
} }
if (record.taskName.indexOf('可研报告初稿编制') >= 0) {
fileArr.value.push("《项目建议书》");
}else if (record.taskName.indexOf('可研报告终稿编制') >= 0) {
fileArr.value.push("《项目建议书》");
}
fileArr.value.push()
planinfoid.value = record.id; planinfoid.value = record.id;
let tableData = await getDataSource(); // let tableData = await getDataSource();
console.log('tableData', tableData); // console.log('tableData', tableData);
// //
// for (let i = 0; i < tableData[0].children.length; i++) { // for (let i = 0; i < tableData[0].children.length; i++) {
// let child = tableData[0].children[i]; // let child = tableData[0].children[i];
@ -260,8 +319,28 @@
// } // }
// } // }
// } // }
if (record.taskName == '联合技术审查') { if (record.taskName.indexOf('联合技术审查') >= 0) {
openUnitedTechnicalReviewmode(true, { planinfoid: record.id }); UnitedTechnicalReviewmode.value = record.id;
messageInfo.value = '如项目涉及申报资金变更的,请先进行资金变更流程';
openMessageInfo();
//
} else {
if (record.taskName.indexOf('招标文件编制') >= 0) {
messageInfo.value = '要求在招标文件公示前请线下与任务牵头处室进行交流,在公示后再进行上传';
openMessageInfo();
} else {
openPlanFile();
}
}
}
async function okMessageInfo() {
closeMessageInfo();
if (taskName.value.indexOf('联合技术审查') >= 0) {
openUnitedTechnicalReviewmode(true, {
planinfoid: UnitedTechnicalReviewmode.value,
projectid: dataTo.projectId,
});
} else { } else {
openPlanFile(); openPlanFile();
} }

Loading…
Cancel
Save