Browse Source

新增需求1127

master
zhouhaibin 3 months ago
parent
commit
3a5df24811
  1. 65
      src/views/dashboard/workbench/components/ProjectCard.vue
  2. 5
      src/views/dashboard/workbench/index.vue
  3. 4
      src/views/myWork/inComplete/inComplete.api.ts
  4. 15
      src/views/projectLib/projectInfo/Detailpage.vue
  5. 1
      src/views/projectLib/projectInfo/index.vue
  6. 10
      src/views/projectLib/projectInfo/projectInfo.api.ts
  7. 140
      src/views/projectLib/projectInfo/projectInfo.data.ts
  8. 300
      src/views/projectLib/projectInfo/projectMoneyDetail.vue
  9. 26
      src/views/projectLib/projectPlan/projectPlan.data.ts
  10. 54
      src/views/projectLib/projectPlan/viewPlanDetail.vue
  11. 1
      src/views/projectSummary/planSummary/ShowDetailPage.vue
  12. 2
      src/views/projectSummary/planSummary/index.vue
  13. 52
      src/views/projectSummary/planSummary/planSummary.data.ts
  14. 82
      src/views/projectSummary/planSummary/projectContactSummary.vue

65
src/views/dashboard/workbench/components/ProjectCard.vue

@ -4,62 +4,89 @@
<a-button type="link" size="small">更多</a-button> <a-button type="link" size="small">更多</a-button>
</template> </template>
<CardGrid v-for="item in items" :key="item" class="!md:w-1/3 !w-full h-25" @click="updateFun(item)"> <CardGrid
v-for="item in items"
:key="item"
class="!md:w-1/3 !w-full h-25"
@click="updateFun(item)"
>
<a-badge :count="item.count"> <a-badge :count="item.count">
<span class="flex"> <span class="flex">
<Icon :icon="item.icon" :color="item.color" size="30" /> <Icon :icon="item.icon" :color="item.color" size="30" />
<span class="text-lg ml-4">{{ item.title }}</span> <span class="text-lg ml-4">{{ item.title }}</span>
</span> </span>
</a-badge> </a-badge>
<!-- <div class="flex mt-2 h-10 text-secondary">{{ item.desc }}</div> --> <!-- <div class="flex mt-2 h-10 text-secondary">{{ item.desc }}</div> -->
<div class="grid grid-cols-2 gap-2">
<div>
<div
v-if="
isShowByRoles(
'中医处,妇幼处,医政处,财审处,体改处,组织人事处,机关党委,规信处,市财政局,市发展改革委,市数据局,市委网信办,市公安局,市密码管理局',
) && item.title === '待办任务'
"
>
<div class="text-xs text-orange-500"> 3天未审批流程数:{{ outday['3days'] }} </div>
<div class="text-xs text-red-600"> 超过5天未审批流程数:{{ outday['5days'] }} </div>
</div>
</div>
<div class="flex justify-end text-secondary"> <div class="flex justify-end text-secondary">
<!-- <span>{{ item.group }}</span> -->
<span>{{ item.date }}</span> <span>{{ item.date }}</span>
</div> </div>
</div>
</CardGrid> </CardGrid>
</Card> </Card>
</template> </template>
<script lang="ts"> <script lang="ts">
import { defineComponent } from 'vue'; import { defineComponent, ref } from 'vue';
import { Card } from 'ant-design-vue'; import { Card } from 'ant-design-vue';
import { Icon } from '@/components/Icon'; import { Icon } from '@/components/Icon';
import { groupItems } from './data'; import { groupItems } from './data';
import { getWorkcountNumber } from '@/views/myWork/inComplete/inComplete.api' import { getWorkcountNumber } from '@/views/myWork/inComplete/inComplete.api';
import { useRouter } from 'vue-router'; // useRouter import { useRouter } from 'vue-router'; // useRouter
import { isShowByRoles } from '@/views/projectLib/projectInfo/projectInfo.api';
import { getOutDay } from '@/views/myWork/inComplete/inComplete.api';
export default defineComponent({ export default defineComponent({
components: { Card, CardGrid: Card.Grid, Icon }, components: { Card, CardGrid: Card.Grid, Icon },
setup() { setup() {
// //
const router = useRouter() const router = useRouter();
const outday = ref();
const updateFun = (item) => { const updateFun = (item) => {
console.log("item", item); console.log('item', item);
if (item.title === '待签任务') { if (item.title === '待签任务') {
router.push({ // push router.push({
// push
path: '/activiti/task/claim-list', // path: '/activiti/task/claim-list', //
}) });
} else if (item.title === '待办任务') { } else if (item.title === '待办任务') {
router.push({ // push router.push({
// push
path: '/myWork/inComplete/index', // path: '/myWork/inComplete/index', //
}) });
} else if (item.title === '已办任务') { } else if (item.title === '已办任务') {
router.push({ // push router.push({
// push
path: '/myWork/completed/index', // path: '/myWork/completed/index', //
}) });
}
} }
getWorkcountNumber().then(res => { };
getWorkcountNumber().then((res) => {
console.log(res); console.log(res);
groupItems[0].count = res.daiqian; groupItems[0].count = res.daiqian;
groupItems[1].count = res.daiban; groupItems[1].count = res.daiban;
console.log("groupItems", groupItems); console.log('groupItems', groupItems);
}); });
// //
// //
console.log("groupItems111", groupItems); console.log('groupItems111', groupItems);
getOutDay().then((res) => {
return { items: groupItems, updateFun }; outday.value = res;
});
return { items: groupItems, updateFun, isShowByRoles, outday };
}, },
}); });
</script> </script>

5
src/views/dashboard/workbench/index.vue

@ -8,6 +8,7 @@
<!-- <DynamicInfo :loading="loading" class="!my-4 enter-y" /> --> <!-- <DynamicInfo :loading="loading" class="!my-4 enter-y" /> -->
</div> </div>
<div v-if="isShowByRoles('中医处,妇幼处,医政处,财审处,体改处,组织人事处,机关党委,规信处')"> <div v-if="isShowByRoles('中医处,妇幼处,医政处,财审处,体改处,组织人事处,机关党委,规信处')">
<div class="card-container"> <div class="card-container">
<projectDetail></projectDetail> <projectDetail></projectDetail>
@ -16,6 +17,9 @@
<planSummary /> <planSummary />
</div> </div>
</div> </div>
<div v-else-if="isShowByRoles('projectContact')">
<projectContactSummary></projectContactSummary>
</div>
<div class="card-container" v-else> <div class="card-container" v-else>
<planSummary1></planSummary1> <planSummary1></planSummary1>
</div> </div>
@ -31,6 +35,7 @@
import planSummary1 from '@/views/projectSummary/planSummary/indeForDashboard.vue'; import planSummary1 from '@/views/projectSummary/planSummary/indeForDashboard.vue';
import projectDetail from '@/views/dashboard/workbench/components/projectDetail.vue'; import projectDetail from '@/views/dashboard/workbench/components/projectDetail.vue';
import planSummary from '@/views/projectSummary/planSummary/shouyeindex.vue'; import planSummary from '@/views/projectSummary/planSummary/shouyeindex.vue';
import projectContactSummary from '@/views/projectSummary/planSummary/projectContactSummary.vue'
import { isShowByRoles } from '@/views/projectLib/projectInfo/projectInfo.api'; import { isShowByRoles } from '@/views/projectLib/projectInfo/projectInfo.api';
const loading = ref(true); const loading = ref(true);

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

@ -15,12 +15,14 @@ export enum Api {
approveURTFile="/huzhouUploadfileinfo/approveURTFile", approveURTFile="/huzhouUploadfileinfo/approveURTFile",
approvalMergeProject="/huzhouMergesplitinfo/approvalMergeProject", approvalMergeProject="/huzhouMergesplitinfo/approvalMergeProject",
approvalSplitProject="/huzhouMergesplitinfo/approvalSplitProject", approvalSplitProject="/huzhouMergesplitinfo/approvalSplitProject",
getOutDay='/workflow/getOutDay',
} }
/** /**
* *
*/ */
export const getOutDay = (params?) => defHttp.get({ url: Api.getOutDay, params });
export const queryProcessInfo = (params?) => defHttp.get({ url: Api.queryProcessInfo, params }); export const queryProcessInfo = (params?) => defHttp.get({ url: Api.queryProcessInfo, params });
export const getProcessInstanceIdByProid = (params?) => defHttp.get({ url: Api.getProcessInstanceIdByProid, params }); export const getProcessInstanceIdByProid = (params?) => defHttp.get({ url: Api.getProcessInstanceIdByProid, params });
export const getWorkcountNumber = (params?) => defHttp.get({ url: Api.getWorkcountNumber, params }); export const getWorkcountNumber = (params?) => defHttp.get({ url: Api.getWorkcountNumber, params });

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

@ -7,24 +7,28 @@
<ApprovalDetails :projectid="projectid" :stage="'creatProjectinfo'" v-if="showApprovalDetails==true"/> <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" >
<projectMoneyDetail :projectid="projectid" />
</el-tab-pane>
<el-tab-pane label="项目资料详情" name="3" v-if="showUploadfileDetail">
<el-divider content-position="left">项目资料详情</el-divider> <el-divider content-position="left">项目资料详情</el-divider>
<UploadfileDetail :projectid="projectid" :stage="1" /> <UploadfileDetail :projectid="projectid" :stage="1" />
<el-divider content-position="left">意见文件</el-divider> <el-divider content-position="left">意见文件</el-divider>
<UploadfileDetail :projectid="projectid" :stage="2" /> <UploadfileDetail :projectid="projectid" :stage="2" />
</el-tab-pane> </el-tab-pane>
<el-tab-pane label="项目变更信息详情" name="3" v-if="fieldChangeDetailList?.length > 0"> <el-tab-pane label="项目变更信息详情" name="4" v-if="fieldChangeDetailList?.length > 0">
<fieldChangeDetail v-for=" (item, index) in fieldChangeDetailList" :fieldChangeGroupid="item.groupId" :isEdit="false" /> <fieldChangeDetail v-for=" (item, index) in fieldChangeDetailList" :fieldChangeGroupid="item.groupId" :isEdit="false" />
</el-tab-pane> </el-tab-pane>
<el-tab-pane label="由以下项目合并" name="4" v-if="mergeDetailList?.length > 0"> <el-tab-pane label="由以下项目合并" name="5" v-if="mergeDetailList?.length > 0">
<ProjectTable :row="mergeDetailList"/> <ProjectTable :row="mergeDetailList"/>
</el-tab-pane> </el-tab-pane>
<el-tab-pane label="由以下项目拆分" name="5" v-if="splitDetailList?.length > 0"> <el-tab-pane label="由以下项目拆分" name="6" 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"> <el-tab-pane label="项目计划详情" name="7" v-if="showtuList?.length > 0">
<showtu :res="showtuList" /> <showtu :res="showtuList" />
</el-tab-pane> </el-tab-pane>
</el-tabs> </el-tabs>
</template> </template>
@ -41,6 +45,7 @@ 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 projectMoneyDetail from "@/views/projectLib/projectInfo/projectMoneyDetail.vue"
import showtu from "@/views/projectLib/projectPlan/showtu.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>>()

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

@ -8,7 +8,6 @@
<!-- <TableAction :actions="getTableAction(record)" /> --> <!-- <TableAction :actions="getTableAction(record)" /> -->
<TableAction <TableAction
:actions="getTableAction(record)" :actions="getTableAction(record)"
:dropDownActions="getDropDownAction(record)"
/> />
</template> </template>

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

@ -1,4 +1,4 @@
import { downloadResource } from '@/api/common/api'; import { downloadFile } from '@/api/common/api';
import { defHttp } from '@/utils/http/axios'; import { defHttp } from '@/utils/http/axios';
import { useUserStore } from '@/store/modules/user'; import { useUserStore } from '@/store/modules/user';
@ -26,6 +26,8 @@ export enum Api {
getRemainingMoneyinfo = '/huzhouSubProjectinfo/getRemainingMoneyinfo', getRemainingMoneyinfo = '/huzhouSubProjectinfo/getRemainingMoneyinfo',
count = '/huzhouProject/count', count = '/huzhouProject/count',
queryMoneyDetail = '/huzhouProject/queryMoneyDetail',
submitMergeProject = '/huzhouMergesplitinfo/submitMergeProject', submitMergeProject = '/huzhouMergesplitinfo/submitMergeProject',
submitSplitProject = '/huzhouMergesplitinfo/submitSplitProject', submitSplitProject = '/huzhouMergesplitinfo/submitSplitProject',
@ -33,6 +35,7 @@ export enum Api {
getSplitDetailList = '/huzhouMergesplitinfo/getSplitDetailList', getSplitDetailList = '/huzhouMergesplitinfo/getSplitDetailList',
getFromDataFromMerge='/huzhouMergesplitinfo/getFromDataFromMerge', getFromDataFromMerge='/huzhouMergesplitinfo/getFromDataFromMerge',
getFromDataFromSplit='/huzhouMergesplitinfo/getFromDataFromSplit', getFromDataFromSplit='/huzhouMergesplitinfo/getFromDataFromSplit',
projectContactShouYe='/huzhouProject/projectContactShouYe'
} }
/** /**
* *
@ -103,7 +106,7 @@ export const batchImportProjects = (params?) =>
}); });
export const batchdownloadProject = (params?) => export const batchdownloadProject = (params?) =>
downloadResource(Api.batchdownloadProject, '项目申报数据.xlsx', params); downloadFile(Api.batchdownloadProject, '项目申报数据.xlsx', params);
export const isShowByRoles = (roles: string) => { export const isShowByRoles = (roles: string) => {
const roleList = userStore.getUserInfo.roleList; const roleList = userStore.getUserInfo.roleList;
@ -125,3 +128,6 @@ export const submitMergeProject = (params?) =>
defHttp.post({ url: Api.submitMergeProject, params }); defHttp.post({ url: Api.submitMergeProject, params });
export const submitSplitProject = (params?) => export const submitSplitProject = (params?) =>
defHttp.post({ url: Api.submitSplitProject, params }); defHttp.post({ url: Api.submitSplitProject, params });
export const queryMoneyDetail = (params?) =>
defHttp.get({ url: Api.queryMoneyDetail, params });
export const projectContactShouYe = (params?) => defHttp.get({ url: Api.projectContactShouYe, params });

140
src/views/projectLib/projectInfo/projectInfo.data.ts

@ -963,3 +963,143 @@ export const resourcetableColumns: BasicColumn[] = [
}, },
} }
] ]
export const MoneyFormSchemas: FormSchema[]=[
{
//标题名称
label: '总投资(元)',
//字段
field: 'totalMoney',
labelWidth: 'auto',
//组件 支持组件详见 components/Form/src/types/index.ts 中的 ComponentType
component: 'InputNumber',
componentProps: {
//带标签的 input,设置后置标签
//数值精度
precision: 2,
//步数
step: 1,
min: 0,
style: { width: '100%' },
},
//一列占比总共24,比如一行显示2列
colProps: { span: 8 },
required: true,
},
{
//标题名称
label: '中央资金(元)',
//字段
field: 'centralMoney',
labelWidth: 'auto',
//组件 支持组件详见 components/Form/src/types/index.ts 中的 ComponentType
component: 'InputNumber',
componentProps: {
//带标签的 input,设置后置标签
//数值精度
precision: 2,
//步数
step: 1,
min: 0,
style: { width: '100%' },
},
//一列占比总共24,比如一行显示2列
colProps: { span: 8 },
required: true,
},
{
//标题名称
label: '省级资金(元)',
//字段
field: 'provincialMoney',
labelWidth: 'auto',
//组件 支持组件详见 components/Form/src/types/index.ts 中的 ComponentType
component: 'InputNumber',
componentProps: {
//带标签的 input,设置后置标签
//数值精度
precision: 2,
//步数
step: 1,
min: 0,
style: { width: '100%' },
},
//一列占比总共24,比如一行显示2列
colProps: { span: 8 },
required: true,
},
{
//标题名称
label: '市级资金(元)',
//字段
field: 'cityMoney',
labelWidth: 'auto',
//组件 支持组件详见 components/Form/src/types/index.ts 中的 ComponentType
component: 'InputNumber',
componentProps: {
//带标签的 input,设置后置标签
//数值精度
precision: 2,
//步数
step: 1,
min: 0,
style: { width: '100%' },
},
//一列占比总共24,比如一行显示2列
colProps: { span: 8 },
required: true,
},
{
//标题名称
label: '区县级资金(元)',
//字段
field: 'countyMoney',
labelWidth: 'auto',
//组件 支持组件详见 components/Form/src/types/index.ts 中的 ComponentType
component: 'InputNumber',
componentProps: {
//带标签的 input,设置后置标签
//数值精度
precision: 2,
//步数
step: 1,
min: 0,
style: { width: '100%' },
},
//一列占比总共24,比如一行显示2列
colProps: { span: 8 },
required: true,
},
{
//标题名称
label: '自筹资金(元)',
//字段
field: 'selfMoney',
labelWidth: 'auto',
//组件 支持组件详见 components/Form/src/types/index.ts 中的 ComponentType
component: 'InputNumber',
componentProps: {
//带标签的 input,设置后置标签
//数值精度
precision: 2,
//步数
step: 1,
min: 0,
style: { width: '100%' },
},
//一列占比总共24,比如一行显示2列
colProps: { span: 8 },
required: true,
},
]

300
src/views/projectLib/projectInfo/projectMoneyDetail.vue

@ -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>

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

@ -276,7 +276,7 @@ export const EstimateAmountFormSchemas: FormSchema[] = [
export const ApprovalMoneyFormSchemas: FormSchema[] = [ export const ApprovalMoneyFormSchemas: FormSchema[] = [
{ {
//标题名称 //标题名称
label: '项总金额(元)', label: '项总金额(元)',
//字段 //字段
field: 'approvalTotalMoney', field: 'approvalTotalMoney',
labelWidth: 'auto', labelWidth: 'auto',
@ -285,7 +285,7 @@ export const ApprovalMoneyFormSchemas: FormSchema[] = [
precision:2, precision:2,
style: { width: '100%' }, style: { width: '100%' },
}, },
colProps: { span: 6 }, colProps: { span: 8 },
dynamicDisabled:true, dynamicDisabled:true,
defaultValue:2000 defaultValue:2000
}, },
@ -302,7 +302,7 @@ export const ApprovalMoneyFormSchemas: FormSchema[] = [
}, },
required: true, required: true,
component: 'InputNumber', component: 'InputNumber',
colProps: { span: 6 }, colProps: { span: 8},
}, },
{ {
//标题名称 //标题名称
@ -317,7 +317,7 @@ export const ApprovalMoneyFormSchemas: FormSchema[] = [
style: { width: '100%' }, style: { width: '100%' },
}, },
component: 'InputNumber', component: 'InputNumber',
colProps: { span: 6 }, colProps: { span: 8},
}, },
{ {
//标题名称 //标题名称
@ -332,7 +332,7 @@ export const ApprovalMoneyFormSchemas: FormSchema[] = [
style: { width: '100%' }, style: { width: '100%' },
}, },
component: 'InputNumber', component: 'InputNumber',
colProps: { span: 6 }, colProps: { span: 8 },
}, },
{ {
//标题名称 //标题名称
@ -348,7 +348,7 @@ export const ApprovalMoneyFormSchemas: FormSchema[] = [
}, },
//组件 支持组件详见 components/Form/src/types/index.ts 中的 ComponentType //组件 支持组件详见 components/Form/src/types/index.ts 中的 ComponentType
component: 'InputNumber', component: 'InputNumber',
colProps: { span: 6 }, colProps: { span: 8 },
}, },
{ {
@ -365,7 +365,7 @@ export const ApprovalMoneyFormSchemas: FormSchema[] = [
}, },
//组件 支持组件详见 components/Form/src/types/index.ts 中的 ComponentType //组件 支持组件详见 components/Form/src/types/index.ts 中的 ComponentType
component: 'InputNumber', component: 'InputNumber',
colProps: { span: 6 }, colProps: { span: 8 },
}, },
] ]
@ -382,7 +382,7 @@ export const ContractMoneyFormSchemas: FormSchema[] = [
min:0, min:0,
style: { width: '100%' }, style: { width: '100%' },
}, },
colProps: { span: 6 }, colProps: { span: 8 },
required:true, required:true,
defaultValue:0 defaultValue:0
}, },
@ -399,7 +399,7 @@ export const ContractMoneyFormSchemas: FormSchema[] = [
}, },
required: true, required: true,
component: 'InputNumber', component: 'InputNumber',
colProps: { span: 6 }, colProps: { span: 8 },
}, },
{ {
//标题名称 //标题名称
@ -414,7 +414,7 @@ export const ContractMoneyFormSchemas: FormSchema[] = [
style: { width: '100%' }, style: { width: '100%' },
}, },
component: 'InputNumber', component: 'InputNumber',
colProps: { span: 6 }, colProps: { span: 8 },
}, },
{ {
//标题名称 //标题名称
@ -429,7 +429,7 @@ export const ContractMoneyFormSchemas: FormSchema[] = [
style: { width: '100%' }, style: { width: '100%' },
}, },
component: 'InputNumber', component: 'InputNumber',
colProps: { span: 6 }, colProps: { span: 8 },
}, },
{ {
//标题名称 //标题名称
@ -445,7 +445,7 @@ export const ContractMoneyFormSchemas: FormSchema[] = [
}, },
//组件 支持组件详见 components/Form/src/types/index.ts 中的 ComponentType //组件 支持组件详见 components/Form/src/types/index.ts 中的 ComponentType
component: 'InputNumber', component: 'InputNumber',
colProps: { span: 6 }, colProps: { span: 8 },
}, },
{ {
@ -462,7 +462,7 @@ export const ContractMoneyFormSchemas: FormSchema[] = [
}, },
//组件 支持组件详见 components/Form/src/types/index.ts 中的 ComponentType //组件 支持组件详见 components/Form/src/types/index.ts 中的 ComponentType
component: 'InputNumber', component: 'InputNumber',
colProps: { span: 6 }, colProps: { span: 8 },
}, },
] ]

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

@ -307,33 +307,33 @@
let tableData = await getDataSource(); let tableData = await getDataSource();
console.log('tableData', tableData); console.log('tableData', tableData);
// //
// for (let x = 1; x < tableData.length; x++) { for (let x = 1; x < tableData.length; x++) {
// for (let i = 0; i < tableData[x].children.length; i++) { for (let i = 0; i < tableData[x].children.length; i++) {
// let child = tableData[x].children[i]; let child = tableData[x].children[i];
// //, //,
// if (i >= 1) { if (i >= 1) {
// if (child.id == record.id) { if (child.id == record.id) {
// // //
// let pre = tableData[x].children[i - 1]; let pre = tableData[x].children[i - 1];
// if (pre.isfinish != 2) { if (pre.isfinish != 2) {
// message.error('' + pre.taskName + ''); message.error('请先完成【' + pre.taskName + '】');
// return; return;
// } }
// } }
// } else { } else {
// // //
// if (child.id == record.id) { if (child.id == record.id) {
// // //
// let preLength = tableData[x - 1].children.length; // let preLength = tableData[x - 1].children.length; //
// let pre = tableData[x - 1].children[preLength - 1]; let pre = tableData[x - 1].children[preLength - 1];
// if (pre.isfinish != 2) { if (pre.isfinish != 2) {
// message.error('' + pre.taskName + ''); message.error('请先完成【' + pre.taskName + '】');
// return; return;
// } }
// } }
// } }
// } }
// } }
if (record.taskName.indexOf('联合技术审查') >= 0) { if (record.taskName.indexOf('联合技术审查') >= 0) {
UnitedTechnicalReviewmode.value = record.id; UnitedTechnicalReviewmode.value = record.id;
messageInfo.value = '如项目涉及申报资金变更的,请先进行资金变更流程'; messageInfo.value = '如项目涉及申报资金变更的,请先进行资金变更流程';

1
src/views/projectSummary/planSummary/ShowDetailPage.vue

@ -16,6 +16,7 @@
<div class="text-base font-bold">单位万元</div> <div class="text-base font-bold">单位万元</div>
</template> </template>
<template #headerTop> <template #headerTop>
项目当前所处阶段
<div class="container mx-auto mt-4 mb-4 h-20"> <div class="container mx-auto mt-4 mb-4 h-20">
<div class="grid grid-cols-5 gap-4 h-full"> <div class="grid grid-cols-5 gap-4 h-full">
<div class="bg-[#1890FF] opacity-100 h-full"> <div class="bg-[#1890FF] opacity-100 h-full">

2
src/views/projectSummary/planSummary/index.vue

@ -152,7 +152,7 @@
api: getProjectSummaryPage, api: getProjectSummaryPage,
title: '入库项目汇总', title: '入库项目汇总',
columns: cengjiColumn, columns: cengjiColumn,
rowKey: 'projectName', rowKey: 'dutyWorkplace',
showIndexColumn: false, showIndexColumn: false,
useSearchForm: false, useSearchForm: false,
showSummary: true, showSummary: true,

52
src/views/projectSummary/planSummary/planSummary.data.ts

@ -111,12 +111,32 @@ export const renwuSummaryDetailColumn: BasicColumn[] = [
}, },
sorter: true, sorter: true,
}, },
// {
// title: "联审估算资金",
// dataIndex: "estimateMoney",
// customRender: ({ record }) => {
// let money: number = record.estimateMoney / 10000
// return money.toFixed(2)
// },
// sorter: true,
// },
{ {
title: "联审估算资金", title: "立项审批资金",
dataIndex: "estimateMoney", dataIndex: "approvalTotalMoney",
customRender: ({ record }) => { customRender: ({ record }) => {
let money: number = record.estimateMoney / 10000 let money: number = record.approvalTotalMoney / 10000
return money.toFixed(2)
},
sorter: true,
},
{
title: "立项审批中央资金",
dataIndex: "approvalCentralMoney",
customRender: ({ record }) => {
let money: number = record.approvalCentralMoney / 10000
return money.toFixed(2) return money.toFixed(2)
}, },
sorter: true, sorter: true,
@ -225,12 +245,32 @@ export const cengjiSummaryDetailColumn: BasicColumn[] = [
}, },
sorter: true, sorter: true,
}, },
// {
// title: "联审估算资金",
// dataIndex: "estimateMoney",
// customRender: ({ record }) => {
// let money: number = record.estimateMoney / 10000
// return money.toFixed(2)
// },
// sorter: true,
// },
{ {
title: "联审估算资金", title: "立项审批资金",
dataIndex: "estimateMoney", dataIndex: "approvalTotalMoney",
customRender: ({ record }) => { customRender: ({ record }) => {
let money: number = record.estimateMoney / 10000 let money: number = record.approvalTotalMoney / 10000
return money.toFixed(2)
},
sorter: true,
},
{
title: "立项审批中央资金",
dataIndex: "approvalCentralMoney",
customRender: ({ record }) => {
let money: number = record.approvalCentralMoney / 10000
return money.toFixed(2) return money.toFixed(2)
}, },
sorter: true, sorter: true,

82
src/views/projectSummary/planSummary/projectContactSummary.vue

@ -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…
Cancel
Save