湖州项目前端
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

554 lines
19 KiB

<template>
<!-- 自定义表单 -->
<el-divider content-position="left"
>项目阶段名称 {{ stageName
}}<a-button type="link" @click="hdDetail">详情</a-button></el-divider
>
<el-divider content-position="left">项目名称 {{ dataTo.record.projectName }} </el-divider>
<BasicForm @register="registerApprovalMoneyForm" v-if="taskName == '立项审批'" />
<div v-if="showMoneyForm">
<el-divider content-position="left">计划金额</el-divider>
<ContractPay
:projectid="pjid"
:taskName="taskName"
:isModify="false"
:isEdit="false"
:isJiHua="true"
v-if="pjid"
ref="contractRef1"
/>
<el-divider content-position="left">实际金额</el-divider>
</div>
<BasicForm @register="registerContractMoneyForm" v-if="taskName == '合同签订'" />
<div v-if="showMoneyForm || taskName == '合同签订'">
<ContractPay
:projectid="pjid"
:taskName="taskName"
:isModify="resButton.isEdit"
:isEdit="resButton.isEdit"
:isJiHua="taskName == '合同签订'?true:false"
v-if="pjid"
ref="contractRef"
/>
</div>
<el-divider content-position="left">项目计划详情</el-divider>
<BasicTable @register="registerplaninfoTable"> </BasicTable>
<el-divider content-position="left">项目计划资料详情</el-divider>
<PlanFileDetail :planinfoid="planinfoid" :stage="1" :key="planFileDetailKey" />
<el-divider content-position="left">项目计划审批文件列表</el-divider>
<PlanFileDetail :planinfoid="planinfoid" :stage="2" />
<ApprovalDetails :processInstanceId="processInstanceId" />
<ApprovalFromPage
:showApprovalForm="showApprovalForm"
:buttons="resButton.buttons"
ref="ApprovalFromPageRef"
:rowData="dataTo.record"
@submit="handleSubmit"
@exit="exit"
>
<div>
<el-divider content-position="left" v-if="resButton.isEdit">重新上传项目计划资料</el-divider>
<div
v-if="resButton.isEdit"
style="display: flex; justify-content: center; align-items: center; height: 100px"
>
<el-form ref="importFormRef">
<el-form-item
v-for="(item, index) in tableDataFiles"
: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>
</div>
<div
v-if="taskName == '首付支付' && resButton.isEdit"
style="display: flex; justify-content: center; align-items: center; height: 100px"
>
<el-form ref="importFormRef">
<el-form-item v-for="(item, index) in tableDataFiles" :key="index" label-width="auto">
<el-upload
class="upload-demo"
ref="upload"
action
:http-request="httpRequest"
:before-upload="
(file) => {
return beforeUpload(file, 'all');
}
"
:on-exceed="handleExceed"
:limit="50"
:on-remove="removeFile"
>
<el-button slot="trigger" size="small" type="primary">选取文件</el-button>
<div slot="tip" class="el-upload__tip">上传其他文件且不超过500M</div>
</el-upload>
</el-form-item>
</el-form>
</div>
<div v-if="procesType == '0' && !resButton.isEdit">
<el-divider content-position="left">上传意见文件</el-divider>
<div style="display: flex; justify-content: center; align-items: center; height: 100px">
<el-upload
class="upload-demo"
ref="upload"
action
:http-request="httpRequestadvice"
:before-upload="beforeAdviceUpload"
:on-exceed="handleExceed"
:limit="5"
:on-remove="removeFile"
>
<el-button slot="trigger" size="small" type="primary">选取文件</el-button>
<div slot="tip" class="el-upload__tip">文件大小且不超过500M</div>
</el-upload>
</div>
</div>
</div>
</ApprovalFromPage>
<BasicModal
@register="registerProjectPlan"
title="发起项目计划审批"
width="1200px"
:showOkBtn="false"
:showCancelBtn="false"
>
<showtu :res="showtuList" />
</BasicModal>
</template>
<script lang="ts" name="planFileApproval" setup>
import { onMounted, ref, reactive, h } from 'vue';
import { useModal, BasicModal } from '@/components/Modal';
import { BasicTable, ActionItem, TableAction, useTable } from '@/components/Table';
import { approvePlanFile, getActionParam } from '../myWork/inComplete/inComplete.api';
import {
PlaninfoFiletableColumns,
PlaninfoColumn,
} from '@/views/projectLib/projectPlan/projectPlan.data';
import {
planFilePageList,
getplaninfoByid,
} from '@/views/projectLib/projectPlan/projectPlan.api';
import { downloadFile } from '../../api/common/api';
import { message } from 'ant-design-vue';
import ContractPay from '@/views/projectLib/projectContract/ContractPay.vue';
import ApprovalDetails from '../ProcessApprovalSubPage/component/ApprovalDetails.vue';
import ApprovalFromPage from '../ProcessApprovalSubPage/component/ApprovalFromPage.vue';
import PlanFileDetail from '@/views/ProcessApprovalSubPage/component/PlanFileDetail.vue';
import { queryProjectInfoById } from '@/views/projectLib/projectInfo/projectInfo.api';
import showtu from '@/views/projectLib/projectPlan/showtu.vue';
import { useForm, BasicForm } from '@/components/Form';
import {
getProjectinfoMoneyInfo,
queryPlanInfoMainTimeline,
getContractinfoByTaskName,
} from '@/views/projectLib/projectPlan/projectPlan.api';
import {
ApprovalMoneyFormSchemas,
ContractMoneyFormSchemas,
} from '@/views/projectLib/projectPlan/projectPlan.data';
const [registerProjectPlan, { openModal: openProjectPlan }] = useModal(); //发起计划审批的
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']);
const emit = defineEmits(['close']);
console.log('routerouterouteroute', dataTo.record);
let procesType = dataTo.record.procesType;
let planinfoid = dataTo.record.projectId as string;
let processInstanceId = dataTo.record.processInstanceId;
let taskid = dataTo.record.taskId as string;
let showApprovalForm = ref();
let ApprovalFromPageRef = ref();
let tableDataFiles = ref();
let planFileDetailKey = ref(0);
let stageName = ref('');
let contractRef = ref();
let showtuList = ref<Array<Object>>();
let resButton = reactive({
showApprovalForm: false,
isEdit: false,
buttons: [],
});
let fileList = reactive<Array<any>>([]);
let fileAdviceList = reactive<Array<any>>([]);
let taskName = ref('');
let pjid = ref('');
const showMoneyForm = ref(false);
onMounted(async () => {
resButton = await getActionParam({
processInstanceId: processInstanceId,
taskId: taskid,
procesType: dataTo.record.procesType,
});
showApprovalForm.value = resButton.showApprovalForm;
planFileDetailKey.value += 1;
let resList = await getplaninfoByid({ planinfoid: planinfoid });
let taskLevel = resList[0].taskLevel.split('.')[0];
console.log('taskLevel', taskLevel, resList);
let res2 = await queryPlanInfoMainTimeline({ projectid: resList[0].projectId });
for (let i = 0; i < res2.length; i++) {
if (res2[i].taskLevel == taskLevel) {
stageName.value = res2[i].taskName;
}
}
showtuList.value = res2;
});
const [registerplaninfoTable, { getDataSource }] = useTable({
size: 'small', //紧凑型表格
title: '项目计划详情',
api: getplaninfoByid,
columns: PlaninfoColumn,
// showActionColumn: false,
useSearchForm: false,
beforeFetch(params) {
params.planinfoid = planinfoid;
},
afterFetch: async function (data) {
if (data[0].taskFile.indexOf(',') == -1) {
tableDataFiles.value = data[0].taskFile.split(',');
} else {
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('《项目建议书》');
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 });
}
let contract = await getContractinfoByTaskName({
taskName: taskName.value,
projectId: pjid.value,
});
if (contract.realList != null && contract.realList.length > 0) {
showMoneyForm.value = true;
setContractMoneyProps({ disabled: resButton.isEdit == true ? false : true });
}
},
});
//项目资料table
const [registerResourceTable] = useTable({
size: 'small', //紧凑型表格
title: '项目计划资料详情',
api: planFilePageList,
columns: PlaninfoFiletableColumns,
useSearchForm: false,
actionColumn: {
width: 140,
title: '操作',
dataIndex: 'action',
slots: { customRender: 'action' },
},
beforeFetch(params) {
params.planinfoid = planinfoid;
params.stage = '1';
},
});
function hdDetail() {
openProjectPlan();
}
function getTableAction(record): ActionItem[] {
return [
{
label: '下载',
ifShow: true,
onClick: handleDetailpage.bind(null, record),
},
];
}
function handleDetailpage(record) {
console.log('我这一行的数据是', record);
let param = {
path: record.documentPath,
fileName: record.documentName,
};
//
console.log('我这一行的数据是', param);
downloadFile('/huzhouUploadfileinfo/downloadfile', record.documentName, param);
}
function removeFile(option) {
for (let i = 0; i < fileList.length; i++) {
if (fileList[i].file.name == option.name) {
fileList.splice(i, 1);
}
}
for (let i = 0; i < fileAdviceList.length; i++) {
if (fileAdviceList[i].file.name == option.name) {
fileAdviceList.splice(i, 1);
}
}
}
function httpRequest(option) {
fileList.push(option);
}
function httpRequestadvice(option) {
fileAdviceList.push(option);
}
// 上传前处理
async function beforeUpload(file, item) {
console.log('file,item', file, item);
let fileSize = file.size;
const FIVE_M = 500 * 1024 * 1024;
//大于5M,不允许上传
if (fileSize > FIVE_M) {
message.error('最大上传500M');
return false;
}
//不做检测'
if (item == 'all') {
return true;
}
let geShi = ['xlx', 'xlsx', 'docx', 'doc', 'pdf'] as Array<string>;
if (geShi.indexOf(file.name.substring(file.name.lastIndexOf('.') + 1)) == -1) {
message.error('文件格式错误!仅支持' + 'xlx,xlsx, docx, doc, pdf');
console.log('文件格式错误!仅支持' + 'xlsx', 'docx', 'doc', 'pdf');
return false;
}
let dataSource = await getDataSource();
if (
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('文件上传成功');
return true;
}
// 文件数量过多时提醒
function handleExceed() {
message.warning('最多只能上传一个文件');
}
function beforeAdviceUpload(file) {
console.log('file,item', file);
let fileSize = file.size;
const FIVE_M = 500 * 1024 * 1024;
//大于5M,不允许上传
if (fileSize > FIVE_M) {
message.error('最大上传500M');
return false;
}
let geShi = ['xlx', 'xlsx', 'docx', 'doc', 'pdf'] as Array<string>;
if (geShi.indexOf(file.name.substring(file.name.indexOf('.') + 1)) == -1) {
message.error('文件格式错误!仅支持' + 'xlx,xlsx, docx, doc, pdf');
console.log('文件格式错误!仅支持' + 'xlsx', 'docx', 'doc', 'pdf');
return false;
}
console.log('文件上传成功');
return true;
}
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;
}
let fromdate = await contractRef.value.getFieldsValuetoRef();
params.append('contractinfoList', JSON.stringify(fromdate));
}else if(showMoneyForm.value){
let fromdate = await contractRef.value.getFieldsValuetoRef();
params.append('contractinfoList', JSON.stringify(fromdate));
}
if (resButton.isEdit) {
if (fileList.length == 0) {
message.error('未选择任何文件,无法上传!');
return;
}
// type ==0新增,type ==1 是修改
let dataSource = await getDataSource();
if (
dataSource[0].taskName.indexOf('可研技术审查报告确认') == -1 &&
dataSource[0].taskName.indexOf('可研报告初稿编制') == -1 &&
dataSource[0].taskName.indexOf('可研报告送审稿编制') == -1
) {
if (fileList.length != tableDataFiles.value.length && taskName.value != '首付支付') {
message.error('上传的文件数量与项目计划资料数量不一致,请检查');
return;
}
}
}
let approvalform = await ApprovalFromPageRef.value.getFieldsValueApprovalForm();
params.append('flag', approvalform.flag);
params.append('planinfoid', planinfoid);
params.append('comment', approvalform.comment);
if (approvalform.modifyNum) {
params.append('modifyNum', approvalform.modifyNum);
}
params.append('taskId', taskid);
if (fileList.length > 0) {
fileList.forEach((x) => {
params.append('file', x.file);
});
}
if (fileAdviceList.length > 0) {
fileAdviceList.forEach((x) => {
params.append('adviceFile', x.file);
});
}
console.log('param', params, 'approvalform', approvalform);
if (await ApprovalFromPageRef.value.validateApprovalForm()) {
let res = await approvePlanFile(params);
console.log('提交成功!', res);
emit('close');
}
}
async function exit() {
emit('close');
}
</script>
<style></style>