|
@@ -1,10 +1,139 @@
|
|
<template>
|
|
<template>
|
|
- <div>
|
|
|
|
- 内业资料进度
|
|
|
|
|
|
+ <div class="hc-layout-box">
|
|
|
|
+ <div class="hc-round-chart">
|
|
|
|
+ <el-row :gutter="30">
|
|
|
|
+ <el-col :span="6" v-for="item in processMaterialList">
|
|
|
|
+ <div class="hc-round-chart-card-box">
|
|
|
|
+ <div class="hc-card-content-box">
|
|
|
|
+ <div class="card-title">{{item['title']}}</div>
|
|
|
|
+ <div class="card-ratio-box">
|
|
|
|
+ <div class="ratio-num">{{item['ratio']}}</div>
|
|
|
|
+ <div class="ratio-text">
|
|
|
|
+ <div class="unit">%</div>
|
|
|
|
+ <div class="text">完成率</div>
|
|
|
|
+ </div>
|
|
|
|
+ </div>
|
|
|
|
+ <div class="card-amount-box">
|
|
|
|
+ <div class="amount-item">
|
|
|
|
+ <div class="text">应填(份)</div>
|
|
|
|
+ <div class="num">{{item['amount']}}</div>
|
|
|
|
+ </div>
|
|
|
|
+ <div class="amount-divider"/>
|
|
|
|
+ <div class="amount-item">
|
|
|
|
+ <div class="text">已填(份)</div>
|
|
|
|
+ <div class="num">{{item['successAmount']}}</div>
|
|
|
|
+ </div>
|
|
|
|
+ </div>
|
|
|
|
+ </div>
|
|
|
|
+ <div class="hc-card-chart-box">
|
|
|
|
+ <RoundChart :ratio="item.ratio"/>
|
|
|
|
+ <div class="text-num">{{item['ratio']}}%</div>
|
|
|
|
+ </div>
|
|
|
|
+ </div>
|
|
|
|
+ </el-col>
|
|
|
|
+ </el-row>
|
|
|
|
+ </div>
|
|
|
|
+ <div class="hc-chart-flex">
|
|
|
|
+ <el-row :gutter="30">
|
|
|
|
+ <el-col :span="18">
|
|
|
|
+ 1
|
|
|
|
+ </el-col>
|
|
|
|
+ <el-col :span="6">
|
|
|
|
+ 2
|
|
|
|
+ </el-col>
|
|
|
|
+ </el-row>
|
|
|
|
+ </div>
|
|
</div>
|
|
</div>
|
|
</template>
|
|
</template>
|
|
|
|
|
|
<script setup>
|
|
<script setup>
|
|
|
|
+import {ref, watch, onMounted} from 'vue'
|
|
|
|
+import {useRouter} from 'vue-router'
|
|
|
|
+import {useAppStore} from "~src/store";
|
|
|
|
+import RoundChart from "./components/echarts/RoundChart.vue"
|
|
|
|
+import ReportChart from "./components/echarts/ReportChart.vue"
|
|
|
|
+import MediaChart from "./components/echarts/MediaChart.vue"
|
|
|
|
+import {getArrValue} from "vue-utils-plus"
|
|
|
|
+import DataApi from "~api/schedule/data"
|
|
|
|
+
|
|
|
|
+//变量
|
|
|
|
+const router = useRouter()
|
|
|
|
+const useAppState = useAppStore()
|
|
|
|
+const projectId = ref(useAppState.getProjectId);
|
|
|
|
+const contractId = ref(useAppState.getContractId);
|
|
|
|
+const isCollapse = ref(useAppState.getCollapse)
|
|
|
|
+
|
|
|
|
+//渲染完成
|
|
|
|
+onMounted(() => {
|
|
|
|
+ queryMaterialProgress()
|
|
|
|
+ queryMaterialProgressStatus()
|
|
|
|
+ queryImageClassification()
|
|
|
|
+})
|
|
|
|
+
|
|
|
|
+
|
|
|
|
+//查询内业资料进度
|
|
|
|
+const isProcessLoading = ref(false)
|
|
|
|
+const processMaterialList = ref([])
|
|
|
|
+const queryMaterialProgress = async () => {
|
|
|
|
+ isProcessLoading.value = true
|
|
|
|
+ const { error, code, data } = await DataApi.queryMaterialProgress({
|
|
|
|
+ projectId: projectId.value,
|
|
|
|
+ contractId: contractId.value
|
|
|
|
+ });
|
|
|
|
+ //处理数据
|
|
|
|
+ isProcessLoading.value = false
|
|
|
|
+ if (!error && code === 200) {
|
|
|
|
+ processMaterialList.value = getArrValue(data?.processMaterialList);
|
|
|
|
+ } else {
|
|
|
|
+ processMaterialList.value = [];
|
|
|
|
+ }
|
|
|
|
+}
|
|
|
|
+
|
|
|
|
+
|
|
|
|
+//报表资料审批统计
|
|
|
|
+const materialList = ref(0)
|
|
|
|
+const isMaterialLoading = ref(false)
|
|
|
|
+const processMaterialStatusList = ref([])
|
|
|
|
+const queryMaterialProgressStatus = async () => {
|
|
|
|
+ isMaterialLoading.value = true
|
|
|
|
+ const { error, code, data } = await DataApi.queryMaterialProgressStatus({
|
|
|
|
+ projectId: projectId.value,
|
|
|
|
+ contractId: contractId.value
|
|
|
|
+ });
|
|
|
|
+ //处理数据
|
|
|
|
+ isMaterialLoading.value = false
|
|
|
|
+ if (!error && code === 200) {
|
|
|
|
+ let num = 0;
|
|
|
|
+ const listData = getArrValue(data?.processMaterialStatusList);
|
|
|
|
+ for (let i = 0; i < listData.length; i++) {
|
|
|
|
+ const Amount = listData[i]?.approvalAmount || 0
|
|
|
|
+ num += Amount
|
|
|
|
+ }
|
|
|
|
+ materialList.value = num
|
|
|
|
+ processMaterialStatusList.value = listData
|
|
|
|
+ } else {
|
|
|
|
+ materialList.value = 0
|
|
|
|
+ processMaterialStatusList.value = [];
|
|
|
|
+ }
|
|
|
|
+}
|
|
|
|
+
|
|
|
|
+//声像媒体资料统计
|
|
|
|
+const isImageClassLoading = ref(false)
|
|
|
|
+const contractImageClassificationList = ref([])
|
|
|
|
+const queryImageClassification = async () => {
|
|
|
|
+ isImageClassLoading.value = true
|
|
|
|
+ const { error, code, data } = await DataApi.queryImageClassification({
|
|
|
|
+ projectId: projectId.value,
|
|
|
|
+ contractId: contractId.value
|
|
|
|
+ });
|
|
|
|
+ //处理数据
|
|
|
|
+ isImageClassLoading.value = false
|
|
|
|
+ if (!error && code === 200) {
|
|
|
|
+ contractImageClassificationList.value = getArrValue(data?.contractImageClassificationList);
|
|
|
|
+ } else {
|
|
|
|
+ contractImageClassificationList.value = [];
|
|
|
|
+ }
|
|
|
|
+}
|
|
|
|
|
|
</script>
|
|
</script>
|
|
|
|
|