|
@ -4,13 +4,21 @@ |
|
|
<a-col :span="12"> |
|
|
<a-col :span="12"> |
|
|
<a-card title="项目总进度" :body-style="{ padding: 0, overflow: 'hidden' }"> |
|
|
<a-card title="项目总进度" :body-style="{ padding: 0, overflow: 'hidden' }"> |
|
|
<a-row> |
|
|
<a-row> |
|
|
<a-col :span="12" class="flex justify-center items-center h-58"> |
|
|
<a-col :span="10" class="flex justify-center items-center h-58"> |
|
|
<el-progress type="dashboard" :stroke-width="18" :percentage="Number(data.totalProgress.progress)*100>0?Number(data.totalProgress.progress)*100:0" :width="200"> |
|
|
<el-progress |
|
|
|
|
|
type="dashboard" |
|
|
|
|
|
:stroke-width="18" |
|
|
|
|
|
:percentage=" |
|
|
|
|
|
Number(data.totalProgress.progress) * 100 > 0 |
|
|
|
|
|
? Number(data.totalProgress.progress) * 100 |
|
|
|
|
|
: 0 |
|
|
|
|
|
" |
|
|
|
|
|
:width="200" |
|
|
|
|
|
> |
|
|
<template #default="{ percentage }"> |
|
|
<template #default="{ percentage }"> |
|
|
<div class="flex flex-col ..."> |
|
|
<div class="flex flex-col ..."> |
|
|
<div>总进度</div> |
|
|
<div>总进度</div> |
|
|
<div class="mt-4 text-sky-400"> {{ percentage }}%</div> |
|
|
<div class="mt-4 text-sky-400"> {{ percentage }}%</div> |
|
|
|
|
|
|
|
|
</div> |
|
|
</div> |
|
|
</template> |
|
|
</template> |
|
|
</el-progress> |
|
|
</el-progress> |
|
@ -53,13 +61,21 @@ |
|
|
</a-col> |
|
|
</a-col> |
|
|
</a-row> |
|
|
</a-row> |
|
|
</a-card> |
|
|
</a-card> |
|
|
|
|
|
|
|
|
</a-col> |
|
|
</a-col> |
|
|
<a-col :span="12"> |
|
|
<a-col :span="12"> |
|
|
<a-card title="资金支付情况" :body-style="{ padding: 0, overflow: 'hidden' }"> |
|
|
<a-card title="资金支付情况" :body-style="{ padding: 0, overflow: 'hidden' }"> |
|
|
<a-row> |
|
|
<a-row> |
|
|
<a-col :span="8" class="flex justify-center items-center h-58"> |
|
|
<a-col :span="8" class="flex justify-center items-center h-58"> |
|
|
<el-progress type="dashboard" :stroke-width="18" :percentage="Number(data.countFundByFundType.paymentExecutionRate)*100>0?Number(data.countFundByFundType.paymentExecutionRate)*100:0" :width="200"> |
|
|
<el-progress |
|
|
|
|
|
type="dashboard" |
|
|
|
|
|
:stroke-width="18" |
|
|
|
|
|
:percentage=" |
|
|
|
|
|
Number(data.countFundByFundType.paymentExecutionRate) * 100 > 0 |
|
|
|
|
|
? Number(data.countFundByFundType.paymentExecutionRate) * 100 |
|
|
|
|
|
: 0 |
|
|
|
|
|
" |
|
|
|
|
|
:width="200" |
|
|
|
|
|
> |
|
|
<template #default="{ percentage }"> |
|
|
<template #default="{ percentage }"> |
|
|
<div class="flex flex-col ..."> |
|
|
<div class="flex flex-col ..."> |
|
|
<div>合同总金额</div> |
|
|
<div>合同总金额</div> |
|
@ -74,8 +90,17 @@ |
|
|
<div> |
|
|
<div> |
|
|
<div class="flex flex-wrap"> |
|
|
<div class="flex flex-wrap"> |
|
|
<div class="mr-2">中央资金</div> |
|
|
<div class="mr-2">中央资金</div> |
|
|
<div class="mr-2"><el-progress class="w-65" :text-inside="true" :stroke-width="18" |
|
|
<div class="mr-2" |
|
|
:percentage="Number(data.countFundByFundType.payCentralExecutionRate)*100>0?Number(data.countFundByFundType.payCentralExecutionRate)*100:0" /> |
|
|
><el-progress |
|
|
|
|
|
class="w-65" |
|
|
|
|
|
:text-inside="true" |
|
|
|
|
|
:stroke-width="18" |
|
|
|
|
|
:percentage=" |
|
|
|
|
|
Number(data.countFundByFundType.payCentralExecutionRate) * 100 > 0 |
|
|
|
|
|
? Number(data.countFundByFundType.payCentralExecutionRate) * 100 |
|
|
|
|
|
: 0 |
|
|
|
|
|
" |
|
|
|
|
|
/> |
|
|
</div> |
|
|
</div> |
|
|
<div>{{ data.countFundByFundType.totalCentral }}</div> |
|
|
<div>{{ data.countFundByFundType.totalCentral }}</div> |
|
|
</div> |
|
|
</div> |
|
@ -83,8 +108,17 @@ |
|
|
<div class="mt-4"> |
|
|
<div class="mt-4"> |
|
|
<div class="flex flex-wrap"> |
|
|
<div class="flex flex-wrap"> |
|
|
<div class="mr-2">省级资金</div> |
|
|
<div class="mr-2">省级资金</div> |
|
|
<div class="mr-2"><el-progress class="w-65" :text-inside="true" :stroke-width="18" |
|
|
<div class="mr-2" |
|
|
:percentage="Number(data.countFundByFundType.payProvincialExecutionRate)*100>0?Number(data.countFundByFundType.payProvincialExecutionRate)*100:0" /> |
|
|
><el-progress |
|
|
|
|
|
class="w-65" |
|
|
|
|
|
:text-inside="true" |
|
|
|
|
|
:stroke-width="18" |
|
|
|
|
|
:percentage=" |
|
|
|
|
|
Number(data.countFundByFundType.payProvincialExecutionRate) * 100 > 0 |
|
|
|
|
|
? Number(data.countFundByFundType.payProvincialExecutionRate) * 100 |
|
|
|
|
|
: 0 |
|
|
|
|
|
" |
|
|
|
|
|
/> |
|
|
</div> |
|
|
</div> |
|
|
<div>{{ data.countFundByFundType.totalProvincial }}</div> |
|
|
<div>{{ data.countFundByFundType.totalProvincial }}</div> |
|
|
</div> |
|
|
</div> |
|
@ -92,8 +126,17 @@ |
|
|
<div class="mt-4"> |
|
|
<div class="mt-4"> |
|
|
<div class="flex flex-wrap"> |
|
|
<div class="flex flex-wrap"> |
|
|
<div class="mr-2">市级资金</div> |
|
|
<div class="mr-2">市级资金</div> |
|
|
<div class="mr-2"><el-progress class="w-65" :text-inside="true" :stroke-width="18" |
|
|
<div class="mr-2" |
|
|
:percentage="Number(data.countFundByFundType.payCityExecutionRate)*100>0?Number(data.countFundByFundType.payCityExecutionRate)*100:0" /> |
|
|
><el-progress |
|
|
|
|
|
class="w-65" |
|
|
|
|
|
:text-inside="true" |
|
|
|
|
|
:stroke-width="18" |
|
|
|
|
|
:percentage=" |
|
|
|
|
|
Number(data.countFundByFundType.payCityExecutionRate) * 100 > 0 |
|
|
|
|
|
? Number(data.countFundByFundType.payCityExecutionRate) * 100 |
|
|
|
|
|
: 0 |
|
|
|
|
|
" |
|
|
|
|
|
/> |
|
|
</div> |
|
|
</div> |
|
|
<div>{{ data.countFundByFundType.totalCity }}</div> |
|
|
<div>{{ data.countFundByFundType.totalCity }}</div> |
|
|
</div> |
|
|
</div> |
|
@ -101,16 +144,34 @@ |
|
|
<div class="mt-4"> |
|
|
<div class="mt-4"> |
|
|
<div class="flex flex-wrap"> |
|
|
<div class="flex flex-wrap"> |
|
|
<div class="mr-2">区县资金</div> |
|
|
<div class="mr-2">区县资金</div> |
|
|
<div class="mr-2"><el-progress class="w-65" :text-inside="true" :stroke-width="18" |
|
|
<div class="mr-2" |
|
|
:percentage="Number(data.countFundByFundType.payCountyExecutionRate)*100>0?Number(data.countFundByFundType.payCountyExecutionRate)*100:0" /> |
|
|
><el-progress |
|
|
|
|
|
class="w-65" |
|
|
|
|
|
:text-inside="true" |
|
|
|
|
|
:stroke-width="18" |
|
|
|
|
|
:percentage=" |
|
|
|
|
|
Number(data.countFundByFundType.payCountyExecutionRate) * 100 > 0 |
|
|
|
|
|
? Number(data.countFundByFundType.payCountyExecutionRate) * 100 |
|
|
|
|
|
: 0 |
|
|
|
|
|
" |
|
|
|
|
|
/> |
|
|
</div> |
|
|
</div> |
|
|
<div>{{ data.countFundByFundType.totalCounty }}</div> |
|
|
<div>{{ data.countFundByFundType.totalCounty }}</div> |
|
|
</div> |
|
|
</div> |
|
|
<div class="mt-4"> |
|
|
<div class="mt-4"> |
|
|
<div class="flex flex-wrap"> |
|
|
<div class="flex flex-wrap"> |
|
|
<div class="mr-2">自筹资金</div> |
|
|
<div class="mr-2">自筹资金</div> |
|
|
<div class="mr-2"><el-progress class="w-65" :text-inside="true" :stroke-width="18" |
|
|
<div class="mr-2" |
|
|
:percentage="Number(data.countFundByFundType.paySelfExecutionRate)*100>0?Number(data.countFundByFundType.paySelfExecutionRate)*100:0" /> |
|
|
><el-progress |
|
|
|
|
|
class="w-65" |
|
|
|
|
|
:text-inside="true" |
|
|
|
|
|
:stroke-width="18" |
|
|
|
|
|
:percentage=" |
|
|
|
|
|
Number(data.countFundByFundType.paySelfExecutionRate) * 100 > 0 |
|
|
|
|
|
? Number(data.countFundByFundType.paySelfExecutionRate) * 100 |
|
|
|
|
|
: 0 |
|
|
|
|
|
" |
|
|
|
|
|
/> |
|
|
</div> |
|
|
</div> |
|
|
<div>{{ data.countFundByFundType.totalSelf }}</div> |
|
|
<div>{{ data.countFundByFundType.totalSelf }}</div> |
|
|
</div> |
|
|
</div> |
|
@ -118,38 +179,83 @@ |
|
|
</div> |
|
|
</div> |
|
|
</div> |
|
|
</div> |
|
|
</a-col> |
|
|
</a-col> |
|
|
|
|
|
|
|
|
</a-row> |
|
|
</a-row> |
|
|
</a-card> |
|
|
</a-card> |
|
|
</a-col> |
|
|
</a-col> |
|
|
|
|
|
|
|
|
</a-row> |
|
|
</a-row> |
|
|
<a-row :gutter="16" class="mt-4"> |
|
|
<a-row :gutter="16" class="mt-4"> |
|
|
<a-col :span="12"> |
|
|
<a-col :span="12"> |
|
|
<a-card :body-style="{ padding: 0, overflow: 'hidden' }" class="h-104"> |
|
|
<a-card title="总进度" :body-style="{ padding: 0, overflow: 'hidden' }" class="h-104"> |
|
|
<bas_bar title="总进度" :data="bas_barData"/> |
|
|
<bas_bar title="" :data="bas_barData" /> |
|
|
|
|
|
|
|
|
</a-card> |
|
|
</a-card> |
|
|
</a-col> |
|
|
</a-col> |
|
|
<a-col :span="12"> |
|
|
<a-col :span="12"> |
|
|
<a-card :body-style="{ padding: 0, overflow: 'hidden' }" class="h-104"> |
|
|
<a-card title="资金支付情况" :body-style="{ padding: 0, overflow: 'hidden' }" class="h-104"> |
|
|
<bar title="资金支付情况" :data="barData" /> |
|
|
<bar title="" :data="barData" v-if="showBar"/> |
|
|
|
|
|
<template #extra> |
|
|
|
|
|
<div class="grid grid-cols-4 w-full flex justify-end"> |
|
|
|
|
|
<div class="flex items-center justify-center col-span-3">资金支付执行率</div> |
|
|
|
|
|
<div class="w-1/12"> |
|
|
|
|
|
<a-button |
|
|
|
|
|
style="width: 15px; height: 15px" |
|
|
|
|
|
type="text" |
|
|
|
|
|
size="small" |
|
|
|
|
|
@click="handleAscendClick" |
|
|
|
|
|
> |
|
|
|
|
|
<template #icon> <CaretUpOutlined /> </template |
|
|
|
|
|
></a-button> |
|
|
|
|
|
<a-button |
|
|
|
|
|
style="width: 15px; height: 15px" |
|
|
|
|
|
type="text" |
|
|
|
|
|
size="small" |
|
|
|
|
|
@click="handlerDescendClick" |
|
|
|
|
|
> |
|
|
|
|
|
<template #icon> <CaretDownOutlined /> </template |
|
|
|
|
|
></a-button> |
|
|
|
|
|
</div> |
|
|
|
|
|
|
|
|
|
|
|
<div class="flex items-center justify-center col-span-3">上级资金支付执行率</div> |
|
|
|
|
|
<div class="w-1/12"> |
|
|
|
|
|
<a-button |
|
|
|
|
|
style="width: 15px; height: 15px" |
|
|
|
|
|
type="text" |
|
|
|
|
|
size="small" |
|
|
|
|
|
@click="handleSuperiorAscendClick" |
|
|
|
|
|
> |
|
|
|
|
|
<template #icon> <CaretUpOutlined /> </template |
|
|
|
|
|
></a-button> |
|
|
|
|
|
<a-button |
|
|
|
|
|
style="width: 15px; height: 15px" |
|
|
|
|
|
type="text" |
|
|
|
|
|
size="small" |
|
|
|
|
|
@click="handleSuperiorDescendClick" |
|
|
|
|
|
> |
|
|
|
|
|
<template #icon> <CaretDownOutlined /> </template |
|
|
|
|
|
></a-button> |
|
|
|
|
|
</div> |
|
|
|
|
|
</div> |
|
|
|
|
|
</template> |
|
|
</a-card> |
|
|
</a-card> |
|
|
</a-col> |
|
|
</a-col> |
|
|
</a-row> |
|
|
</a-row> |
|
|
</div> |
|
|
</div> |
|
|
</template> |
|
|
</template> |
|
|
<script lang="ts"> |
|
|
<script lang="ts"> |
|
|
import bas_bar from './bas_bar.vue' |
|
|
import {CaretUpOutlined,CaretDownOutlined} from '@ant-design/icons-vue'; |
|
|
import bar from './bar.vue' |
|
|
|
|
|
import { showCountBoardByReformName} from './childBoard.api' |
|
|
import bas_bar from './bas_bar.vue'; |
|
|
|
|
|
import bar from './bar.vue'; |
|
|
|
|
|
import { showCountBoardByReformName } from './childBoard.api'; |
|
|
export default { |
|
|
export default { |
|
|
components: { |
|
|
components: { |
|
|
bas_bar, |
|
|
bas_bar, |
|
|
bar, |
|
|
bar, |
|
|
|
|
|
CaretUpOutlined, |
|
|
|
|
|
CaretDownOutlined |
|
|
}, |
|
|
}, |
|
|
data() { |
|
|
data() { |
|
|
return { |
|
|
return { |
|
|
|
|
|
showBar:true, |
|
|
data: { |
|
|
data: { |
|
|
total: '0', |
|
|
total: '0', |
|
|
rkNum: '0', |
|
|
rkNum: '0', |
|
@ -181,35 +287,131 @@ export default { |
|
|
paySelfExecutionRate: '0.00', |
|
|
paySelfExecutionRate: '0.00', |
|
|
}, |
|
|
}, |
|
|
countFundByCondition: [], |
|
|
countFundByCondition: [], |
|
|
progress:[] |
|
|
progress: [], |
|
|
}, |
|
|
}, |
|
|
bas_barData: { |
|
|
bas_barData: { |
|
|
names: [], |
|
|
names: [], |
|
|
values:[] |
|
|
values: [], |
|
|
}, |
|
|
}, |
|
|
barData: { |
|
|
barData: { |
|
|
names: [], |
|
|
names: [], |
|
|
paymentExecutionRates: [], |
|
|
paymentExecutionRates: [], |
|
|
superiorFundExecutionRates: [], |
|
|
superiorFundExecutionRates: [], |
|
|
totalMoneys: [], |
|
|
totalMoneys: [], |
|
|
} |
|
|
}, |
|
|
}; |
|
|
}; |
|
|
}, |
|
|
}, |
|
|
async created() { |
|
|
async created() { |
|
|
this.data = await showCountBoardByReformName() |
|
|
this.data = await showCountBoardByReformName(); |
|
|
this.data.progress.forEach(item => { |
|
|
this.data.progress.forEach((item) => { |
|
|
this.bas_barData.names.push(item.name) |
|
|
this.bas_barData.names.push(item.name); |
|
|
this.bas_barData.values.push(item.projectProgress) |
|
|
this.bas_barData.values.push(item.projectProgress); |
|
|
}) |
|
|
}); |
|
|
this.data.countFundByCondition.forEach(item => { |
|
|
this.data.countFundByCondition.forEach((item) => { |
|
|
this.barData.names.push(item.name) |
|
|
this.barData.names.push(item.name); |
|
|
this.barData.paymentExecutionRates.push(item.paymentExecutionRate) |
|
|
this.barData.paymentExecutionRates.push(item.paymentExecutionRate); |
|
|
this.barData.superiorFundExecutionRates.push(item.superiorFundExecutionRate) |
|
|
this.barData.superiorFundExecutionRates.push(item.superiorFundExecutionRate); |
|
|
this.barData.totalMoneys.push(item.totalMoney) |
|
|
this.barData.totalMoneys.push(item.totalMoney); |
|
|
}) |
|
|
}); |
|
|
}, |
|
|
}, |
|
|
methods: {}, |
|
|
methods: { |
|
|
}; |
|
|
async handleSuperiorAscendClick() { |
|
|
|
|
|
let newbarData={ |
|
|
|
|
|
names: [], |
|
|
|
|
|
paymentExecutionRates: [], |
|
|
|
|
|
superiorFundExecutionRates: [], |
|
|
|
|
|
totalMoneys: [], |
|
|
|
|
|
} |
|
|
|
|
|
this.showBar=false |
|
|
|
|
|
console.log(this.barData) |
|
|
|
|
|
this.data = await showCountBoardByReformName({ |
|
|
|
|
|
sortField: 'superiorFundExecutionRate', |
|
|
|
|
|
sortOrder: 'ascend', |
|
|
|
|
|
}); |
|
|
|
|
|
|
|
|
|
|
|
this.data.countFundByCondition.forEach((item) => { |
|
|
|
|
|
newbarData.names.push(item.name); |
|
|
|
|
|
newbarData.paymentExecutionRates.push(item.paymentExecutionRate); |
|
|
|
|
|
newbarData.superiorFundExecutionRates.push(item.superiorFundExecutionRate); |
|
|
|
|
|
newbarData.totalMoneys.push(item.totalMoney); |
|
|
|
|
|
}); |
|
|
|
|
|
this.barData=newbarData |
|
|
|
|
|
this.showBar=true |
|
|
|
|
|
}, |
|
|
|
|
|
async handleSuperiorDescendClick() { |
|
|
|
|
|
let newbarData={ |
|
|
|
|
|
names: [], |
|
|
|
|
|
paymentExecutionRates: [], |
|
|
|
|
|
superiorFundExecutionRates: [], |
|
|
|
|
|
totalMoneys: [], |
|
|
|
|
|
} |
|
|
|
|
|
console.log(this.barData) |
|
|
|
|
|
this.showBar=false |
|
|
|
|
|
this.data = await showCountBoardByReformName({ |
|
|
|
|
|
sortField: 'superiorFundExecutionRate', |
|
|
|
|
|
sortOrder: 'descend', |
|
|
|
|
|
}); |
|
|
|
|
|
|
|
|
|
|
|
this.data.countFundByCondition.forEach((item) => { |
|
|
|
|
|
newbarData.names.push(item.name); |
|
|
|
|
|
newbarData.paymentExecutionRates.push(item.paymentExecutionRate); |
|
|
|
|
|
newbarData.superiorFundExecutionRates.push(item.superiorFundExecutionRate); |
|
|
|
|
|
newbarData.totalMoneys.push(item.totalMoney); |
|
|
|
|
|
}); |
|
|
|
|
|
this.showBar=true |
|
|
|
|
|
this.barData=newbarData |
|
|
|
|
|
console.log(this.barData) |
|
|
|
|
|
|
|
|
|
|
|
}, |
|
|
|
|
|
async handleAscendClick() { |
|
|
|
|
|
let newbarData={ |
|
|
|
|
|
names: [], |
|
|
|
|
|
paymentExecutionRates: [], |
|
|
|
|
|
superiorFundExecutionRates: [], |
|
|
|
|
|
totalMoneys: [], |
|
|
|
|
|
} |
|
|
|
|
|
console.log(this.barData) |
|
|
|
|
|
this.showBar=false |
|
|
|
|
|
this.data = await showCountBoardByReformName({ |
|
|
|
|
|
sortField: 'paymentExecutionRate', |
|
|
|
|
|
sortOrder: 'ascend', |
|
|
|
|
|
}); |
|
|
|
|
|
|
|
|
|
|
|
this.data.countFundByCondition.forEach((item) => { |
|
|
|
|
|
newbarData.names.push(item.name); |
|
|
|
|
|
newbarData.paymentExecutionRates.push(item.paymentExecutionRate); |
|
|
|
|
|
newbarData.superiorFundExecutionRates.push(item.superiorFundExecutionRate); |
|
|
|
|
|
newbarData.totalMoneys.push(item.totalMoney); |
|
|
|
|
|
}); |
|
|
|
|
|
this.showBar=true |
|
|
|
|
|
this.barData=newbarData |
|
|
|
|
|
console.log(this.barData) |
|
|
|
|
|
}, |
|
|
|
|
|
async handlerDescendClick() { |
|
|
|
|
|
let newbarData={ |
|
|
|
|
|
names: [], |
|
|
|
|
|
paymentExecutionRates: [], |
|
|
|
|
|
superiorFundExecutionRates: [], |
|
|
|
|
|
totalMoneys: [], |
|
|
|
|
|
} |
|
|
|
|
|
console.log(this.barData) |
|
|
|
|
|
this.showBar=false |
|
|
|
|
|
this.data = await showCountBoardByReformName({ |
|
|
|
|
|
sortField: 'paymentExecutionRate', |
|
|
|
|
|
sortOrder: 'descend', |
|
|
|
|
|
}); |
|
|
|
|
|
|
|
|
|
|
|
this.data.countFundByCondition.forEach((item) => { |
|
|
|
|
|
newbarData.names.push(item.name); |
|
|
|
|
|
newbarData.paymentExecutionRates.push(item.paymentExecutionRate); |
|
|
|
|
|
newbarData.superiorFundExecutionRates.push(item.superiorFundExecutionRate); |
|
|
|
|
|
newbarData.totalMoneys.push(item.totalMoney); |
|
|
|
|
|
}); |
|
|
|
|
|
this.showBar=true |
|
|
|
|
|
this.barData=newbarData |
|
|
|
|
|
console.log(this.barData) |
|
|
|
|
|
|
|
|
|
|
|
}, |
|
|
|
|
|
}, |
|
|
|
|
|
}; |
|
|
</script> |
|
|
</script> |
|
|