14 changed files with 710 additions and 103 deletions
@ -0,0 +1,300 @@ |
|||||
|
<template> |
||||
|
<!-- 自定义表单 --> |
||||
|
<el-divider content-position="left">项目申报金额</el-divider> |
||||
|
<BasicForm @register="registerMoneyFormSchemas" /> |
||||
|
|
||||
|
<el-divider content-position="left" |
||||
|
>造价建议金额 <a-button type="link" @click="costButton">详情</a-button></el-divider |
||||
|
> |
||||
|
|
||||
|
<a-form :label-col="{ span: 2 }" :wrapper-col="{ span: 6 }" disabled> |
||||
|
<a-form-item label="总投资(元)" name="urtEstimatedAmount"> |
||||
|
<a-input v-model:value="suggestedCostAmount" /> |
||||
|
<span class="text-green-400">{{ suggestedCostAmountDiff }}</span> |
||||
|
</a-form-item> |
||||
|
</a-form> |
||||
|
|
||||
|
<el-divider content-position="left" |
||||
|
>项目联审资金 <a-button type="link" @click="urtEstimatedButton">详情</a-button></el-divider |
||||
|
> |
||||
|
<a-form :label-col="{ span: 2 }" :wrapper-col="{ span: 6 }" disabled> |
||||
|
<a-form-item label="总投资(元)" name="urtEstimatedAmount"> |
||||
|
<a-input v-model:value="urtEstimatedAmount" /> |
||||
|
<span class="text-green-400">{{ urtEstimatedAmountDiff }}</span> |
||||
|
</a-form-item> |
||||
|
</a-form> |
||||
|
<el-divider content-position="left" |
||||
|
>立项审批资金 <a-button type="link" @click="approvalButton">详情</a-button></el-divider |
||||
|
> |
||||
|
<BasicForm @register="registerApprovalMoneyForm"> |
||||
|
<template #approvalTotalMoneySlot> |
||||
|
<a-input v-model:value="res.approvalTotalMoney" /> |
||||
|
<span class="text-green-400">{{ approvalTotalMoneyDiff }}</span> |
||||
|
</template> |
||||
|
<template #approvalCentralMoneySlot> |
||||
|
<a-input v-model:value="res.approvalCentralMoney" /> |
||||
|
<span class="text-green-400">{{ approvalCentralMoneyDiff }}</span> |
||||
|
</template> |
||||
|
</BasicForm> |
||||
|
|
||||
|
<el-divider content-position="left" |
||||
|
>合同签订资金 <a-button type="link" @click="contractButton">详情</a-button></el-divider |
||||
|
> |
||||
|
<BasicForm @register="registerContractMoneyForm"> |
||||
|
<template #contractTotalMoneySlot> |
||||
|
<a-input v-model:value="res.contractTotalMoney" /> |
||||
|
<span class="text-green-400">{{ contractTotalMoneyDiff }}</span> |
||||
|
</template> |
||||
|
<template #contractCentralMoneySlot> |
||||
|
<a-input v-model:value="res.contractCentralMoney" /> |
||||
|
<span class="text-green-400">{{ contractCentralMoneyDiff }}</span> |
||||
|
</template> |
||||
|
</BasicForm> |
||||
|
<planinfoFileDetail @register="registerFileInfo"></planinfoFileDetail> |
||||
|
</template> |
||||
|
<script lang="ts" name="uploadFile" setup> |
||||
|
import { ref, defineProps, watchEffect, onMounted } from 'vue'; |
||||
|
import { MoneyFormSchemas } from '@/views/projectLib/projectInfo/projectInfo.data'; |
||||
|
import { queryMoneyDetail } from '@/views/projectLib/projectInfo/projectInfo.api'; |
||||
|
import { |
||||
|
ApprovalMoneyFormSchemas, |
||||
|
ContractMoneyFormSchemas, |
||||
|
} from '@/views/projectLib/projectPlan/projectPlan.data'; |
||||
|
import { queryPlanInfoMainTimeline } from '@/views/projectLib/projectPlan/projectPlan.api'; |
||||
|
import { useForm, BasicForm } from '@/components/Form'; |
||||
|
import planinfoFileDetail from '../projectPlan/planinfoFileDetail.vue'; |
||||
|
import { useModal } from '@/components/Modal'; |
||||
|
|
||||
|
const [registerFileInfo, { openModal: openFileInfo }] = useModal(); //文件上传和查看 |
||||
|
|
||||
|
const [ |
||||
|
registerApprovalMoneyForm, |
||||
|
{ |
||||
|
validate: validateApprovalMoneyForm, |
||||
|
getFieldsValue: getApprovalMoneyFieldsValue, |
||||
|
setFieldsValue: setApprovalMoneyFieldsValue, |
||||
|
updateSchema: updateApprovalMoneySchema, |
||||
|
}, |
||||
|
] = useForm({ |
||||
|
//注册表单列 |
||||
|
schemas: ApprovalMoneyFormSchemas, |
||||
|
showActionButtonGroup: false, |
||||
|
disabled: true, |
||||
|
wrapperCol: { style: { width: 'auto' } }, |
||||
|
}); |
||||
|
const [ |
||||
|
registerContractMoneyForm, |
||||
|
{ |
||||
|
validate: validateContractMoneyForm, |
||||
|
getFieldsValue: getContractMoneyFieldsValue, |
||||
|
setFieldsValue: setContractMoneyFieldsValue, |
||||
|
updateSchema: updateContractMoneySchema, |
||||
|
}, |
||||
|
] = useForm({ |
||||
|
//注册表单列 |
||||
|
schemas: ContractMoneyFormSchemas, |
||||
|
showActionButtonGroup: false, |
||||
|
disabled: true, |
||||
|
wrapperCol: { style: { width: 'auto' } }, |
||||
|
}); |
||||
|
const [ |
||||
|
registerMoneyFormSchemas, |
||||
|
{ |
||||
|
validate: validateMoneyFormForm, |
||||
|
getFieldsValue: getMoneyFormFieldsValue, |
||||
|
setFieldsValue: setMoneyFormFieldsValue, |
||||
|
updateSchema: updateMoneyFormSchema, |
||||
|
}, |
||||
|
] = useForm({ |
||||
|
//注册表单列 |
||||
|
schemas: MoneyFormSchemas, |
||||
|
showActionButtonGroup: false, |
||||
|
disabled: true, |
||||
|
wrapperCol: { style: { width: 'auto' } }, |
||||
|
}); |
||||
|
let dataTo = defineProps(['projectid', 'type']); |
||||
|
const res = ref(); |
||||
|
const urtEstimatedAmount = ref<number>(0); |
||||
|
const suggestedCostAmount = ref<number>(0); |
||||
|
const urtEstimatedAmountDiff = ref(); |
||||
|
const suggestedCostAmountDiff = ref(); |
||||
|
const contractTotalMoneyDiff = ref(); |
||||
|
const approvalTotalMoneyDiff = ref(); |
||||
|
const approvalCentralMoneyDiff = ref(); |
||||
|
const contractCentralMoneyDiff = ref(); |
||||
|
const getdata = ref(); |
||||
|
onMounted(async () => { |
||||
|
let param: any = { |
||||
|
projectid: dataTo.projectid, |
||||
|
}; |
||||
|
res.value = await queryMoneyDetail(param); |
||||
|
setApprovalMoneyFieldsValue(res.value); |
||||
|
setContractMoneyFieldsValue(res.value); |
||||
|
setMoneyFormFieldsValue(res.value); |
||||
|
urtEstimatedAmount.value = res.value.urtEstimatedAmount; |
||||
|
suggestedCostAmount.value = res.value.suggestedCostAmount; |
||||
|
if (suggestedCostAmount.value) { |
||||
|
suggestedCostAmountDiff.value = |
||||
|
'总投资比项目申报资金核减' + |
||||
|
(res.value.totalMoney - suggestedCostAmount.value) + |
||||
|
'元(' + |
||||
|
(((res.value.totalMoney - suggestedCostAmount.value) / res.value.totalMoney) * 100).toFixed( |
||||
|
2, |
||||
|
) + |
||||
|
'%)'; |
||||
|
} |
||||
|
|
||||
|
if (urtEstimatedAmount.value) { |
||||
|
urtEstimatedAmountDiff.value = |
||||
|
'总投资比项目申报资金核减' + |
||||
|
(res.value.totalMoney - urtEstimatedAmount.value) + |
||||
|
'元(' + |
||||
|
(((res.value.totalMoney - urtEstimatedAmount.value) / res.value.totalMoney) * 100).toFixed( |
||||
|
2, |
||||
|
) + |
||||
|
'%)'; |
||||
|
} |
||||
|
if (res.value.approvalTotalMoney) { |
||||
|
approvalTotalMoneyDiff.value = |
||||
|
'总投资比项目申报资金核减' + |
||||
|
(res.value.totalMoney - res.value.approvalTotalMoney) + |
||||
|
'元(' + |
||||
|
( |
||||
|
((res.value.totalMoney - res.value.approvalTotalMoney) / res.value.totalMoney) * |
||||
|
100 |
||||
|
).toFixed(2) + |
||||
|
'%)'; |
||||
|
approvalCentralMoneyDiff.value = |
||||
|
'中央资金比项目申报资金核减' + |
||||
|
(res.value.centralMoney - res.value.approvalCentralMoney) + |
||||
|
'元(' + |
||||
|
( |
||||
|
((res.value.centralMoney - res.value.approvalCentralMoney) / res.value.centralMoney) * |
||||
|
100 |
||||
|
).toFixed(2) + |
||||
|
'%)'; |
||||
|
updateApprovalMoneySchema({ |
||||
|
//标题名称 |
||||
|
label: '立项总金额(元)', |
||||
|
//字段 |
||||
|
field: 'approvalTotalMoney', |
||||
|
labelWidth: 'auto', |
||||
|
componentProps: { |
||||
|
precision: 2, |
||||
|
style: { width: '100%' }, |
||||
|
}, |
||||
|
colProps: { span: 8 }, |
||||
|
dynamicDisabled: true, |
||||
|
slot: 'approvalTotalMoneySlot', |
||||
|
}); |
||||
|
updateApprovalMoneySchema({ |
||||
|
//标题名称 |
||||
|
label: '中央资金(元)', |
||||
|
//字段 |
||||
|
field: 'approvalCentralMoney', |
||||
|
labelWidth: 'auto', |
||||
|
componentProps: { |
||||
|
precision: 2, |
||||
|
min: 0, |
||||
|
style: { width: '100%' }, |
||||
|
}, |
||||
|
colProps: { span: 8 }, |
||||
|
dynamicDisabled: true, |
||||
|
slot: 'approvalCentralMoneySlot', |
||||
|
}); |
||||
|
} |
||||
|
if (res.value.contractTotalMoney) { |
||||
|
contractTotalMoneyDiff.value = |
||||
|
'总投资比立项审批资金核减' + |
||||
|
(res.value.approvalTotalMoney - res.value.contractTotalMoney) + |
||||
|
'元(' + |
||||
|
( |
||||
|
((res.value.approvalTotalMoney - res.value.contractTotalMoney) / |
||||
|
res.value.approvalTotalMoney) * |
||||
|
100 |
||||
|
).toFixed(2) + |
||||
|
'%)'; |
||||
|
contractCentralMoneyDiff.value = |
||||
|
'中央资金比立项审批资金核减' + |
||||
|
(res.value.approvalCentralMoney - res.value.contractCentralMoney) + |
||||
|
'元(' + |
||||
|
( |
||||
|
((res.value.approvalCentralMoney - res.value.contractCentralMoney) / |
||||
|
res.value.approvalCentralMoney) * |
||||
|
100 |
||||
|
).toFixed(2) + |
||||
|
'%)'; |
||||
|
updateContractMoneySchema({ |
||||
|
//标题名称 |
||||
|
label: '合同总金额(元)', |
||||
|
//字段 |
||||
|
field: 'contractTotalMoney', |
||||
|
labelWidth: 'auto', |
||||
|
componentProps: { |
||||
|
precision: 2, |
||||
|
style: { width: '100%' }, |
||||
|
}, |
||||
|
colProps: { span: 8 }, |
||||
|
dynamicDisabled: true, |
||||
|
slot: 'contractTotalMoneySlot', |
||||
|
}); |
||||
|
updateContractMoneySchema({ |
||||
|
//标题名称 |
||||
|
label: '中央资金(元)', |
||||
|
//字段 |
||||
|
field: 'contractCentralMoney', |
||||
|
labelWidth: 'auto', |
||||
|
componentProps: { |
||||
|
precision: 2, |
||||
|
min: 0, |
||||
|
style: { width: '100%' }, |
||||
|
}, |
||||
|
colProps: { span: 8 }, |
||||
|
dynamicDisabled: true, |
||||
|
slot: 'contractCentralMoneySlot', |
||||
|
}); |
||||
|
} |
||||
|
getdata.value = await queryPlanInfoMainTimeline({ projectid: dataTo.projectid }); |
||||
|
}); |
||||
|
async function costButton() { |
||||
|
if (getdata.value[0].children[3].isfinish != 0) { |
||||
|
openFileInfo(true, { |
||||
|
planinfoid: getdata.value[0].children[3].id, |
||||
|
taskName: getdata.value[0].children[3].taskName, |
||||
|
isfinish: getdata.value[0].children[3].isfinish, |
||||
|
projectid: dataTo.projectid, |
||||
|
}); |
||||
|
} |
||||
|
} |
||||
|
function urtEstimatedButton() { |
||||
|
if (getdata.value[0].children[4].isfinish != 0) { |
||||
|
openFileInfo(true, { |
||||
|
planinfoid: getdata.value[0].children[4].id, |
||||
|
taskName: getdata.value[0].children[4].taskName, |
||||
|
isfinish: getdata.value[0].children[4].isfinish, |
||||
|
projectid: dataTo.projectid, |
||||
|
}); |
||||
|
} |
||||
|
} |
||||
|
function approvalButton() { |
||||
|
if (getdata.value[0].children[4].isfinish != 0) { |
||||
|
openFileInfo(true, { |
||||
|
planinfoid: getdata.value[0].children[6].id, |
||||
|
taskName: getdata.value[0].children[6].taskName, |
||||
|
isfinish: getdata.value[0].children[6].isfinish, |
||||
|
projectid: dataTo.projectid, |
||||
|
}); |
||||
|
} |
||||
|
} |
||||
|
function contractButton() { |
||||
|
if (getdata.value[1].children[2].isfinish != 0) { |
||||
|
openFileInfo(true, { |
||||
|
planinfoid: getdata.value[1].children[2].id, |
||||
|
taskName: getdata.value[1].children[2].taskName, |
||||
|
isfinish: getdata.value[1].children[2].isfinish, |
||||
|
projectid: dataTo.projectid, |
||||
|
}); |
||||
|
} |
||||
|
} |
||||
|
</script> |
||||
|
<style></style> |
@ -0,0 +1,82 @@ |
|||||
|
<template> |
||||
|
<div> |
||||
|
<a-spin :spinning="loading" /> |
||||
|
|
||||
|
<a-tabs v-model:activeKey="activeKey" type="card" @change="handleTabChange"> |
||||
|
<a-tab-pane v-for="(tab, index) in list" :key="index + 1" :tab="tab.projectName"> |
||||
|
<div> |
||||
|
<div class="grid grid-cols-2 gap-2"> |
||||
|
<div id="1"> |
||||
|
<a-card :title="'项目名称:' + tab.projectName" :bordered="false"> |
||||
|
<div class="font-semibold"> 项目进度 </div> |
||||
|
<Progress :percent="tab.projectTotalProgress" /> |
||||
|
</a-card> |
||||
|
</div> |
||||
|
<div id="2"> |
||||
|
<a-card :bordered="false"> |
||||
|
<div class="font-semibold"> 资金支付情况 </div> |
||||
|
<Progress :percent="69" /> |
||||
|
<div class="font-semibold"> 中央资金支付情况 </div> |
||||
|
<Progress :percent="42" strokeColor="#2E54A1" /> |
||||
|
</a-card> |
||||
|
</div> |
||||
|
</div> |
||||
|
<div class="mt-1"> |
||||
|
<a-card :bordered="false"> |
||||
|
<el-steps finish-status="success" :active="tab.projectProgressDetail.status"> |
||||
|
<el-step |
||||
|
v-for="(item, index) in tab.projectProgressDetail" |
||||
|
:key="index" |
||||
|
:status="item.isfinish == 2 ? 'success' : 'wait'" |
||||
|
> |
||||
|
<template #title> |
||||
|
<div> |
||||
|
{{ item.taskName }} |
||||
|
</div> |
||||
|
<div v-if="item.taskName != '项目申报阶段'"> |
||||
|
{{ 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> |
||||
|
</a-card> |
||||
|
</div> |
||||
|
</div> |
||||
|
</a-tab-pane> |
||||
|
</a-tabs> |
||||
|
</div> |
||||
|
</template> |
||||
|
|
||||
|
<script lang="ts" name="system-user" setup> |
||||
|
//ts语法 |
||||
|
import { ref, onMounted } from 'vue'; |
||||
|
import { ActionItem, BasicTable, TableAction, useTable } from '@/components/Table'; |
||||
|
import { useModal, BasicModal } from '@/components/Modal'; |
||||
|
import { Progress } from 'ant-design-vue'; |
||||
|
import elstepchild from '@/views/projectLib/projectPlan/elstepchild.vue'; |
||||
|
|
||||
|
import { projectContactShouYe } from '@/views/projectLib/projectInfo/projectInfo.api'; |
||||
|
const list = ref([]); |
||||
|
const activeKey = ref(1); |
||||
|
const loading = ref(true); |
||||
|
onMounted(async () => { |
||||
|
list.value = await projectContactShouYe(); |
||||
|
loading.value = false; |
||||
|
}); |
||||
|
function handleTabChange(key) { |
||||
|
console.log(key, typeof key); |
||||
|
} |
||||
|
</script> |
||||
|
|
||||
|
<style scoped></style> |
Loading…
Reference in new issue