|
@@ -9,7 +9,7 @@
|
|
<HcIcon name="calendar-todo"/>
|
|
<HcIcon name="calendar-todo"/>
|
|
</div>
|
|
</div>
|
|
<div class="item-sub-content">
|
|
<div class="item-sub-content">
|
|
- <div class="num">36条</div>
|
|
|
|
|
|
+ <div class="num">{{planOverview.totalPlan ?? 0}}条</div>
|
|
<div class="title">您的任务总计划</div>
|
|
<div class="title">您的任务总计划</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
@@ -22,7 +22,7 @@
|
|
<HcIcon name="calendar-check"/>
|
|
<HcIcon name="calendar-check"/>
|
|
</div>
|
|
</div>
|
|
<div class="item-sub-content">
|
|
<div class="item-sub-content">
|
|
- <div class="num">53条</div>
|
|
|
|
|
|
+ <div class="num">{{planOverview.finishedPlan ?? 0}}条</div>
|
|
<div class="title">已完成计划</div>
|
|
<div class="title">已完成计划</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
@@ -35,7 +35,7 @@
|
|
<HcIcon name="alert" fill/>
|
|
<HcIcon name="alert" fill/>
|
|
</div>
|
|
</div>
|
|
<div class="item-sub-content">
|
|
<div class="item-sub-content">
|
|
- <div class="num">14条</div>
|
|
|
|
|
|
+ <div class="num">{{planOverview.riskPlan ?? 0}}条</div>
|
|
<div class="title">风险计划</div>
|
|
<div class="title">风险计划</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
@@ -48,7 +48,7 @@
|
|
<HcIcon name="time"/>
|
|
<HcIcon name="time"/>
|
|
</div>
|
|
</div>
|
|
<div class="item-sub-content">
|
|
<div class="item-sub-content">
|
|
- <div class="num">22条</div>
|
|
|
|
|
|
+ <div class="num">{{planOverview.postponePlan ?? 0}}条</div>
|
|
<div class="title">延期计划</div>
|
|
<div class="title">延期计划</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
@@ -74,25 +74,9 @@
|
|
</template>
|
|
</template>
|
|
<div class="hac-card-item-table">
|
|
<div class="hac-card-item-table">
|
|
<el-scrollbar>
|
|
<el-scrollbar>
|
|
- <div class="hac-home-notice-item">
|
|
|
|
- <div class="line-clamp-2 title">
|
|
|
|
- 《任务名称xxxxxx》中其中【任务描述】已被【代潘】变更为已完成状态,
|
|
|
|
- xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx,
|
|
|
|
- xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
|
|
|
|
- </div>
|
|
|
|
- <div class="time">2022-10-25</div>
|
|
|
|
- </div>
|
|
|
|
- <div class="hac-home-notice-item">
|
|
|
|
- <div class="line-clamp-2 title">《任务名称xxxxxx》您有一条新任务待执行,xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx</div>
|
|
|
|
- <div class="time">2022-10-25</div>
|
|
|
|
- </div>
|
|
|
|
- <div class="hac-home-notice-item">
|
|
|
|
- <div class="line-clamp-2 title">《任务名称xxxxxx》您有一条新任务待执行,xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx</div>
|
|
|
|
- <div class="time">2022-10-25</div>
|
|
|
|
- </div>
|
|
|
|
- <div class="hac-home-notice-item">
|
|
|
|
- <div class="line-clamp-2 title">《任务名称xxxxxx》您有一条新任务待执行,xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx</div>
|
|
|
|
- <div class="time">2022-10-25</div>
|
|
|
|
|
|
+ <div v-for="item in userInformData" class="hac-home-notice-item">
|
|
|
|
+ <div class="line-clamp-2 title">{{item.informDetails}}</div>
|
|
|
|
+ <div class="time">{{item.informDate}}</div>
|
|
</div>
|
|
</div>
|
|
</el-scrollbar>
|
|
</el-scrollbar>
|
|
</div>
|
|
</div>
|
|
@@ -105,43 +89,43 @@
|
|
<div class="hac-card-title">任务统计</div>
|
|
<div class="hac-card-title">任务统计</div>
|
|
</template>
|
|
</template>
|
|
<template #extra>
|
|
<template #extra>
|
|
- <HcDropdown :cur="planTime" :datas="itemData"/>
|
|
|
|
|
|
+ <el-date-picker type="month" v-model="planTime" format="YYYY-MM" value-format="YYYY-MM" style="width: 130px;" @change="planTimeChange"/>
|
|
</template>
|
|
</template>
|
|
<div class="hac-card-item-body">
|
|
<div class="hac-card-item-body">
|
|
<el-row :gutter="14">
|
|
<el-row :gutter="14">
|
|
<el-col :span="4">
|
|
<el-col :span="4">
|
|
<div class="hac-row-total-item">
|
|
<div class="hac-row-total-item">
|
|
- <div class="num">96</div>
|
|
|
|
|
|
+ <div class="num">{{monthPlan.totalPlan ?? 0}}</div>
|
|
<div class="text">累计任务总数</div>
|
|
<div class="text">累计任务总数</div>
|
|
</div>
|
|
</div>
|
|
</el-col>
|
|
</el-col>
|
|
<el-col :span="4">
|
|
<el-col :span="4">
|
|
<div class="hac-row-total-item">
|
|
<div class="hac-row-total-item">
|
|
- <div class="num">33</div>
|
|
|
|
|
|
+ <div class="num">{{monthPlan.unfinishedPlan ?? 0}}</div>
|
|
<div class="text">累计未完成任务</div>
|
|
<div class="text">累计未完成任务</div>
|
|
</div>
|
|
</div>
|
|
</el-col>
|
|
</el-col>
|
|
<el-col :span="4">
|
|
<el-col :span="4">
|
|
<div class="hac-row-total-item">
|
|
<div class="hac-row-total-item">
|
|
- <div class="num">3</div>
|
|
|
|
|
|
+ <div class="num">{{monthPlan.cancelPlan ?? 0}}</div>
|
|
<div class="text">累计取消任务</div>
|
|
<div class="text">累计取消任务</div>
|
|
</div>
|
|
</div>
|
|
</el-col>
|
|
</el-col>
|
|
<el-col :span="4">
|
|
<el-col :span="4">
|
|
<div class="hac-row-total-item">
|
|
<div class="hac-row-total-item">
|
|
- <div class="num">6</div>
|
|
|
|
|
|
+ <div class="num">{{monthPlan.postponePlan ?? 0}}</div>
|
|
<div class="text">累计延期任务</div>
|
|
<div class="text">累计延期任务</div>
|
|
</div>
|
|
</div>
|
|
</el-col>
|
|
</el-col>
|
|
<el-col :span="4">
|
|
<el-col :span="4">
|
|
<div class="hac-row-total-item">
|
|
<div class="hac-row-total-item">
|
|
- <div class="num">6</div>
|
|
|
|
|
|
+ <div class="num">{{monthPlan.transferPlan ?? 0}}</div>
|
|
<div class="text">累计转移任务</div>
|
|
<div class="text">累计转移任务</div>
|
|
</div>
|
|
</div>
|
|
</el-col>
|
|
</el-col>
|
|
<el-col :span="4">
|
|
<el-col :span="4">
|
|
<div class="hac-row-total-item">
|
|
<div class="hac-row-total-item">
|
|
- <div class="num">1</div>
|
|
|
|
|
|
+ <div class="num">{{monthPlan.notFilledLog ?? 0}}</div>
|
|
<div class="text">累计未填写日志</div>
|
|
<div class="text">累计未填写日志</div>
|
|
</div>
|
|
</div>
|
|
</el-col>
|
|
</el-col>
|
|
@@ -164,45 +148,128 @@
|
|
</template>
|
|
</template>
|
|
|
|
|
|
<script setup>
|
|
<script setup>
|
|
-import {onMounted, ref} from "vue";
|
|
|
|
|
|
+import {onActivated, onMounted, ref} from "vue";
|
|
|
|
+import mainApi from "~api/home/index";
|
|
import BarLabelRotation from "~com/echarts/BarLabelRotation.vue";
|
|
import BarLabelRotation from "~com/echarts/BarLabelRotation.vue";
|
|
|
|
+import {getArrValue, getObjValue} from "js-fast-way";
|
|
|
|
+
|
|
|
|
+//时间类
|
|
|
|
+import dayjs from "dayjs"
|
|
|
|
+import 'dayjs/locale/zh-cn'
|
|
|
|
+dayjs.locale('zh-cn')
|
|
|
|
+
|
|
|
|
+//获取当前年月
|
|
|
|
+onMounted(() => {
|
|
|
|
+ planTime.value = dayjs().format('YYYY-MM')
|
|
|
|
+})
|
|
|
|
+
|
|
|
|
+//缓存页面被激活时
|
|
|
|
+onActivated(() => {
|
|
|
|
+ getApi()
|
|
|
|
+})
|
|
|
|
|
|
|
|
+const getApi = () => {
|
|
|
|
+ getPlanOverview()
|
|
|
|
+ getTableData()
|
|
|
|
+ getUserInform()
|
|
|
|
+ getMonthPlanOverview()
|
|
|
|
+ getMonthOfYearPlanOverview()
|
|
|
|
+}
|
|
|
|
+
|
|
|
|
+//项目类型
|
|
|
|
+const planOverview = ref({})
|
|
|
|
+const getPlanOverview = async () => {
|
|
|
|
+ const {error, code, data} = await mainApi.planOverview()
|
|
|
|
+ //判断状态
|
|
|
|
+ if (!error && code === 200) {
|
|
|
|
+ planOverview.value = getObjValue(data)
|
|
|
|
+ } else {
|
|
|
|
+ planOverview.value = {}
|
|
|
|
+ }
|
|
|
|
+}
|
|
|
|
+
|
|
|
|
+//最新预警信息
|
|
const tableColumn = [
|
|
const tableColumn = [
|
|
- {key: 'name', name: '任务名称', align: 'left'},
|
|
|
|
- {key: 'text', name: '关联项目', align: 'left'},
|
|
|
|
- {key: 'time', name: '完成时间', align: 'left'}
|
|
|
|
|
|
+ {key: 'planTaskDesc', name: '任务名称', align: 'left'},
|
|
|
|
+ {key: 'projectName', name: '关联项目', align: 'left'},
|
|
|
|
+ {key: 'practicalFinishTime', name: '完成时间', align: 'left'}
|
|
]
|
|
]
|
|
-const tableData = ref([
|
|
|
|
- {name: '名称1', text: '奉建路', time: '2023-03-20'},
|
|
|
|
- {name: '名称2', text: '奉建路', time: '2023-03-21'},
|
|
|
|
- {name: '名称3', text: '奉建路', time: '2023-03-22'},
|
|
|
|
- {name: '名称4', text: '奉建路', time: '2023-03-20'},
|
|
|
|
- {name: '名称5', text: '奉建路', time: '2023-03-21'},
|
|
|
|
- {name: '名称6', text: '奉建路', time: '2023-03-22'},
|
|
|
|
- {name: '名称7', text: '奉建路', time: '2023-03-20'},
|
|
|
|
- {name: '名称8', text: '奉建路', time: '2023-03-21'},
|
|
|
|
- {name: '名称9', text: '奉建路', time: '2023-03-22'}
|
|
|
|
-])
|
|
|
|
|
|
+const tableData = ref([])
|
|
|
|
+const getTableData = async () => {
|
|
|
|
+ const {error, code, data} = await mainApi.postponePlan()
|
|
|
|
+ //判断状态
|
|
|
|
+ if (!error && code === 200) {
|
|
|
|
+ tableData.value = getArrValue(data)
|
|
|
|
+ } else {
|
|
|
|
+ tableData.value = []
|
|
|
|
+ }
|
|
|
|
+}
|
|
|
|
+
|
|
|
|
+//通知数据
|
|
|
|
+const userInformData = ref([])
|
|
|
|
+const getUserInform = async () => {
|
|
|
|
+ const {error, code, data} = await mainApi.getUserInform()
|
|
|
|
+ //判断状态
|
|
|
|
+ if (!error && code === 200) {
|
|
|
|
+ userInformData.value = getArrValue(data)
|
|
|
|
+ } else {
|
|
|
|
+ userInformData.value = []
|
|
|
|
+ }
|
|
|
|
+}
|
|
|
|
|
|
//选择日期时间
|
|
//选择日期时间
|
|
-const planTime = ref('2023年02月')
|
|
|
|
-const itemData = ref([{name: '2023年02月'}, {name: '2023年03月'}, {name: '2023年04月'}, {name: '2023年05月'}])
|
|
|
|
|
|
+const planTime = ref('2023-02')
|
|
|
|
+const planTimeChange = () => {
|
|
|
|
+ getMonthPlanOverview()
|
|
|
|
+}
|
|
|
|
+
|
|
|
|
+//门户普通权限单月计划统计
|
|
|
|
+const monthPlan = ref({})
|
|
|
|
+const getMonthPlanOverview = async () => {
|
|
|
|
+ const {error, code, data} = await mainApi.monthPlanOverview({
|
|
|
|
+ planDate: planTime.value
|
|
|
|
+ })
|
|
|
|
+ //判断状态
|
|
|
|
+ if (!error && code === 200) {
|
|
|
|
+ monthPlan.value = getObjValue(data)
|
|
|
|
+ } else {
|
|
|
|
+ monthPlan.value = {}
|
|
|
|
+ }
|
|
|
|
+}
|
|
|
|
|
|
//计划统计图
|
|
//计划统计图
|
|
|
|
+const initPlanData = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
|
|
const planDatas = ref([
|
|
const planDatas = ref([
|
|
- {
|
|
|
|
- name: '总计划',
|
|
|
|
- value: [120, 132, 101, 134, 90, 230, 210, 210, 210, 210, 132, 101]
|
|
|
|
- },
|
|
|
|
- {
|
|
|
|
- name: '已完成',
|
|
|
|
- value: [120, 132, 101, 134, 90, 230, 210, 210, 210, 210, 132, 101]
|
|
|
|
- },
|
|
|
|
- {
|
|
|
|
- name: '未完成',
|
|
|
|
- value: [120, 132, 101, 134, 90, 230, 210, 210, 210, 210, 132, 101]
|
|
|
|
- },
|
|
|
|
|
|
+ {name: '总计划', value: initPlanData},
|
|
|
|
+ {name: '已完成', value: initPlanData},
|
|
|
|
+ {name: '未完成', value: initPlanData},
|
|
])
|
|
])
|
|
|
|
+const getMonthOfYearPlanOverview = async () => {
|
|
|
|
+ const {error, code, data} = await mainApi.monthOfYearPlanOverview()
|
|
|
|
+ //判断状态
|
|
|
|
+ if (!error && code === 200) {
|
|
|
|
+ planDatas.value = [] //先清空数据
|
|
|
|
+ const arr = getArrValue(data)
|
|
|
|
+ //判断是否存在数据
|
|
|
|
+ if (arr.length > 0) {
|
|
|
|
+ planDatas.value = arr
|
|
|
|
+ } else {
|
|
|
|
+ //接口没有返回数据,显示全部默认为0的数据
|
|
|
|
+ planDatas.value = [
|
|
|
|
+ {name: '总计划', value: initPlanData},
|
|
|
|
+ {name: '已完成', value: initPlanData},
|
|
|
|
+ {name: '未完成', value: initPlanData},
|
|
|
|
+ ]
|
|
|
|
+ }
|
|
|
|
+ } else {
|
|
|
|
+ //接口没有返回数据(报错或异常时),显示全部默认为0的数据
|
|
|
|
+ planDatas.value = [
|
|
|
|
+ {name: '总计划', value: initPlanData},
|
|
|
|
+ {name: '已完成', value: initPlanData},
|
|
|
|
+ {name: '未完成', value: initPlanData},
|
|
|
|
+ ]
|
|
|
|
+ }
|
|
|
|
+}
|
|
</script>
|
|
</script>
|
|
|
|
|
|
<style lang="scss" scoped>
|
|
<style lang="scss" scoped>
|