|
@@ -0,0 +1,314 @@
|
|
|
+<template>
|
|
|
+ <div id="path">
|
|
|
+ <el-row>
|
|
|
+ <el-col :span="24" class="main animate__animated animate__backInRight">
|
|
|
+ <div class="top">
|
|
|
+ <div class="content top_1">
|
|
|
+ <div class="title">
|
|
|
+ <span>统计数量</span>
|
|
|
+ <p></p>
|
|
|
+ </div>
|
|
|
+ <div class="boxnav">
|
|
|
+ <echarts1></echarts1>
|
|
|
+ </div>
|
|
|
+ </div>
|
|
|
+ <div class="content top_2">
|
|
|
+ <div class="title">
|
|
|
+ <span>成果来源</span>
|
|
|
+ <p></p>
|
|
|
+ </div>
|
|
|
+ <div class="boxnav">
|
|
|
+ <echarts2></echarts2>
|
|
|
+ </div>
|
|
|
+ </div>
|
|
|
+ <div class="content top_3">
|
|
|
+ <div class="title">
|
|
|
+ <span>行业领域</span>
|
|
|
+ <p></p>
|
|
|
+ </div>
|
|
|
+ <div class="boxnav">
|
|
|
+ <echarts3></echarts3>
|
|
|
+ </div>
|
|
|
+ </div>
|
|
|
+ </div>
|
|
|
+ <div class="bottom">
|
|
|
+ <div class="content bottom_1">
|
|
|
+ <div class="title">
|
|
|
+ <span>地区分布情况</span>
|
|
|
+ <p></p>
|
|
|
+ </div>
|
|
|
+ <div class="boxnav">
|
|
|
+ <echarts4></echarts4>
|
|
|
+ </div>
|
|
|
+ </div>
|
|
|
+ <div class="content bottom_2">
|
|
|
+ <div class="title">
|
|
|
+ <span>成果列表</span>
|
|
|
+ <p></p>
|
|
|
+ </div>
|
|
|
+ <div class="boxnav">
|
|
|
+ <table class="table" width="100%" border="0" cellspacing="0" cellpadding="0">
|
|
|
+ <tbody>
|
|
|
+ <tr>
|
|
|
+ <th>成果名称</th>
|
|
|
+ <th>地区</th>
|
|
|
+ <th>行业领域</th>
|
|
|
+ <th>状态</th>
|
|
|
+ </tr>
|
|
|
+ <tr v-for="(item, index) in list" :key="index">
|
|
|
+ <td class="name">{{ item.name || '暂无成果名称' }}</td>
|
|
|
+ <td>
|
|
|
+ <span class="text-w">{{ getArea(item.area) || '暂无' }}</span>
|
|
|
+ </td>
|
|
|
+ <td>
|
|
|
+ <span class="text-b">{{ item.field || '暂无' }}</span>
|
|
|
+ </td>
|
|
|
+ <td>
|
|
|
+ <div class="text-d">{{ getDict(item.status, 'status') || '暂无' }}</div>
|
|
|
+ </td>
|
|
|
+ </tr>
|
|
|
+ </tbody>
|
|
|
+ </table>
|
|
|
+ <div class="total">
|
|
|
+ <el-pagination background layout="prev, pager, next" :total="total" :page-size="limit" v-model:current-page="currentPage" @current-change="changePage" @size-change="sizeChange" />
|
|
|
+ </div>
|
|
|
+ </div>
|
|
|
+ </div>
|
|
|
+ <div class="content bottom_3">
|
|
|
+ <div class="title">
|
|
|
+ <span>成果来源排名</span>
|
|
|
+ <p></p>
|
|
|
+ </div>
|
|
|
+ <div class="boxnav">
|
|
|
+ <echarts6></echarts6>
|
|
|
+ </div>
|
|
|
+ </div>
|
|
|
+ </div>
|
|
|
+ </el-col>
|
|
|
+ </el-row>
|
|
|
+ </div>
|
|
|
+</template>
|
|
|
+
|
|
|
+<script setup>
|
|
|
+// 组件
|
|
|
+import echarts1 from './echarts/echarts1.vue'
|
|
|
+import echarts2 from './echarts/echarts2.vue'
|
|
|
+import echarts3 from './echarts/echarts3.vue'
|
|
|
+import echarts4 from './echarts/echarts4.vue'
|
|
|
+import echarts6 from './echarts/echarts6.vue'
|
|
|
+provide('type', 'achievement')
|
|
|
+import { get } from 'lodash-es'
|
|
|
+// 成果
|
|
|
+import { AchievementStore } from '@/store/api/platform/achievement'
|
|
|
+import { DictDataStore } from '@/store/api/system/dictData'
|
|
|
+const dictDataStore = DictDataStore()
|
|
|
+const store = AchievementStore()
|
|
|
+const $checkRes = inject('$checkRes')
|
|
|
+// 列表
|
|
|
+const list = ref([])
|
|
|
+let skip = 0
|
|
|
+let limit = 5
|
|
|
+const total = ref(0)
|
|
|
+const currentPage = ref(1)
|
|
|
+onMounted(async () => {
|
|
|
+ await searchOther()
|
|
|
+ await search({ skip, limit })
|
|
|
+})
|
|
|
+// #region 字典表
|
|
|
+const examStatusList = ref([])
|
|
|
+const searchOther = async () => {
|
|
|
+ let result
|
|
|
+ result = await dictDataStore.query({ code: 'examStatus', is_use: '0' })
|
|
|
+ if ($checkRes(result)) examStatusList.value = result.data
|
|
|
+ result = await dictDataStore.query({ code: 'isUse', is_use: '0' })
|
|
|
+}
|
|
|
+const search = async (query = { skip, limit }) => {
|
|
|
+ const nq = { skip: get(query, 'skip'), limit: get(query, 'limit') }
|
|
|
+ const res = await store.query(nq)
|
|
|
+ if ($checkRes(res)) {
|
|
|
+ list.value = get(res, 'data', [])
|
|
|
+ total.value = get(res, 'total', 0)
|
|
|
+ }
|
|
|
+}
|
|
|
+// 地区
|
|
|
+const getArea = (data) => {
|
|
|
+ if (data) return data.join('-')
|
|
|
+ else return '暂无地区'
|
|
|
+}
|
|
|
+// 字典表
|
|
|
+const getDict = (data, type) => {
|
|
|
+ let list
|
|
|
+ let result
|
|
|
+ switch (type) {
|
|
|
+ case 'status':
|
|
|
+ list = examStatusList.value
|
|
|
+ break
|
|
|
+ default:
|
|
|
+ break
|
|
|
+ }
|
|
|
+ if (!list) return result
|
|
|
+ const i = list.find((f) => f.value === data)
|
|
|
+ if (!i) return result
|
|
|
+ return get(i, 'label')
|
|
|
+}
|
|
|
+// 分页
|
|
|
+const changePage = (page = currentPage.value) => {
|
|
|
+ search({ skip: (page - 1) * limit, limit: limit })
|
|
|
+}
|
|
|
+const sizeChange = (limits) => {
|
|
|
+ limit = limits
|
|
|
+ currentPage.value = 1
|
|
|
+ search({ skip: 0, limit: limit })
|
|
|
+}
|
|
|
+</script>
|
|
|
+<style scoped lang="scss">
|
|
|
+.main {
|
|
|
+ width: 100%;
|
|
|
+ min-height: 74vh;
|
|
|
+ color: #fff;
|
|
|
+ font-size: 16px;
|
|
|
+ background: #033c76 url('/images/bg.png') no-repeat center bottom;
|
|
|
+ .top {
|
|
|
+ display: flex;
|
|
|
+ justify-content: space-between;
|
|
|
+ width: 100%;
|
|
|
+ min-height: 45%;
|
|
|
+ padding: 20px 0 0 0;
|
|
|
+ .top_1 {
|
|
|
+ width: 25%;
|
|
|
+ margin: 0 20px;
|
|
|
+ }
|
|
|
+ .top_2 {
|
|
|
+ width: 50%;
|
|
|
+ }
|
|
|
+ .top_3 {
|
|
|
+ width: 25%;
|
|
|
+ margin: 0 20px;
|
|
|
+ }
|
|
|
+ .content {
|
|
|
+ .title {
|
|
|
+ display: flex;
|
|
|
+ align-items: flex-end;
|
|
|
+ span {
|
|
|
+ background: url('/images/line1.png') no-repeat bottom right;
|
|
|
+ font-size: 20px;
|
|
|
+ white-space: nowrap;
|
|
|
+ padding-bottom: 10px;
|
|
|
+ padding-right: 20px;
|
|
|
+ }
|
|
|
+ p {
|
|
|
+ background: url('/images/line2.png') no-repeat bottom right;
|
|
|
+ width: 100%;
|
|
|
+ height: 13px;
|
|
|
+ margin-bottom: 5px;
|
|
|
+ opacity: 0.5;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ .bottom {
|
|
|
+ display: flex;
|
|
|
+ justify-content: space-between;
|
|
|
+ width: 100%;
|
|
|
+ min-height: 45%;
|
|
|
+ padding: 20px 0;
|
|
|
+ .bottom_1 {
|
|
|
+ width: 25%;
|
|
|
+ margin: 0 20px;
|
|
|
+ }
|
|
|
+ .bottom_2 {
|
|
|
+ width: 50%;
|
|
|
+ }
|
|
|
+ .bottom_3 {
|
|
|
+ width: 25%;
|
|
|
+ margin: 0 20px;
|
|
|
+ }
|
|
|
+ .content {
|
|
|
+ .title {
|
|
|
+ display: flex;
|
|
|
+ align-items: flex-end;
|
|
|
+ span {
|
|
|
+ background: url('/images/line1.png') no-repeat bottom right;
|
|
|
+ font-size: 20px;
|
|
|
+ white-space: nowrap;
|
|
|
+ padding-bottom: 10px;
|
|
|
+ padding-right: 20px;
|
|
|
+ }
|
|
|
+ p {
|
|
|
+ background: url('/images/line2.png') no-repeat bottom right;
|
|
|
+ width: 100%;
|
|
|
+ height: 13px;
|
|
|
+ margin-bottom: 5px;
|
|
|
+ opacity: 0.5;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ .boxnav {
|
|
|
+ .table {
|
|
|
+ height: 26vh;
|
|
|
+ th {
|
|
|
+ border-bottom: 1px solid #407abd;
|
|
|
+ font-size: 14px;
|
|
|
+ text-align: center;
|
|
|
+ padding: 6px 0;
|
|
|
+ color: rgba(255, 255, 255, 0.8);
|
|
|
+ }
|
|
|
+ td {
|
|
|
+ border-bottom: 1px dotted#407abd;
|
|
|
+ font-size: 12px;
|
|
|
+ padding: 6px 0;
|
|
|
+ text-align: center;
|
|
|
+ color: rgba(255, 255, 255, 0.6);
|
|
|
+ }
|
|
|
+ .name {
|
|
|
+ max-width: 200px;
|
|
|
+ }
|
|
|
+ tr:last-child td {
|
|
|
+ border: none;
|
|
|
+ }
|
|
|
+ .text-w {
|
|
|
+ color: #ffe400;
|
|
|
+ }
|
|
|
+ .text-d {
|
|
|
+ color: #ff6316;
|
|
|
+ }
|
|
|
+ .text-s {
|
|
|
+ color: #14e144;
|
|
|
+ }
|
|
|
+ .text-b {
|
|
|
+ color: #07e5ff;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ .total {
|
|
|
+ margin: 5px 0 0 0;
|
|
|
+ display: flex;
|
|
|
+ justify-content: center;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+}
|
|
|
+:deep(.el-pagination.is-background .btn-prev:disabled) {
|
|
|
+ background-color: rgba($color: #ffffff, $alpha: 0.1) !important;
|
|
|
+ color: #ffffff !important;
|
|
|
+}
|
|
|
+:deep(.el-pagination.is-background .btn-next:disabled) {
|
|
|
+ background-color: rgba($color: #ffffff, $alpha: 0.1) !important;
|
|
|
+ color: #ffffff !important;
|
|
|
+}
|
|
|
+:deep(.el-pagination.is-background .btn-prev) {
|
|
|
+ background-color: rgba($color: #ffffff, $alpha: 0.1) !important;
|
|
|
+ color: #ffffff !important;
|
|
|
+}
|
|
|
+:deep(.el-pagination.is-background .btn-next) {
|
|
|
+ background-color: rgba($color: #ffffff, $alpha: 0.1) !important;
|
|
|
+ color: #ffffff !important;
|
|
|
+}
|
|
|
+:deep(.el-pagination.is-background .el-pager li.is-active) {
|
|
|
+ background-color: #4d5b87 !important;
|
|
|
+ color: #ffffff !important;
|
|
|
+}
|
|
|
+:deep(.el-pagination.is-background .el-pager li) {
|
|
|
+ background-color: rgba($color: #ffffff, $alpha: 0.1) !important;
|
|
|
+ color: #ffffff !important;
|
|
|
+}
|
|
|
+</style>
|