|
@@ -213,6 +213,61 @@
|
|
|
</el-col>
|
|
|
</el-col>
|
|
|
</el-col>
|
|
|
+ <el-col :span="24" class="one">
|
|
|
+ <el-col :span="24" class="one_1">
|
|
|
+ <el-col :span="12" class="left">汇聚各类优质的成果</el-col>
|
|
|
+ <el-col :span="12" class="right" @click="selectMenu('achievement')"
|
|
|
+ >查看更多成果</el-col
|
|
|
+ >
|
|
|
+ </el-col>
|
|
|
+ <el-col :span="24" class="one_6">
|
|
|
+ <el-col :span="10" class="left">
|
|
|
+ <vue3-seamless-scroll
|
|
|
+ :list="achievementList"
|
|
|
+ :hover="true"
|
|
|
+ :step="0.5"
|
|
|
+ :wheel="true"
|
|
|
+ :isWatch="true"
|
|
|
+ >
|
|
|
+ <el-col
|
|
|
+ :span="24"
|
|
|
+ class="list"
|
|
|
+ v-for="(item, index) in achievementList"
|
|
|
+ :key="index"
|
|
|
+ @click="toView(item, '4')"
|
|
|
+ >
|
|
|
+ <el-col :span="1">
|
|
|
+ <div class="i"></div>
|
|
|
+ </el-col>
|
|
|
+ <el-col :span="16" class="content textOver">
|
|
|
+ <el-tooltip effect="dark" :content="item.name" placement="top">
|
|
|
+ {{ item.name || '暂无名称' }}
|
|
|
+ </el-tooltip>
|
|
|
+ </el-col>
|
|
|
+ <el-col :span="7" class="other textOver">
|
|
|
+ {{ getDict(item.field || '暂无技术领域', 'field') }}
|
|
|
+ </el-col>
|
|
|
+ </el-col>
|
|
|
+ </vue3-seamless-scroll>
|
|
|
+ </el-col>
|
|
|
+ <el-col :span="14" class="right">
|
|
|
+ <el-col :span="24" class="right_1">
|
|
|
+ <BuildTwoTone /> <span>热门技术领域</span>
|
|
|
+ </el-col>
|
|
|
+ <div class="right_2">
|
|
|
+ <div
|
|
|
+ class="list"
|
|
|
+ v-for="(item, index) in fieldList"
|
|
|
+ :key="index"
|
|
|
+ @click="selectMenu('achievement')"
|
|
|
+ >
|
|
|
+ <RocketTwoTone />
|
|
|
+ <span class="textOver">{{ item.label }}</span>
|
|
|
+ </div>
|
|
|
+ </div>
|
|
|
+ </el-col>
|
|
|
+ </el-col>
|
|
|
+ </el-col>
|
|
|
</div>
|
|
|
</el-col>
|
|
|
</el-row>
|
|
@@ -224,14 +279,16 @@ import moment from 'moment'
|
|
|
const $checkRes = inject('$checkRes')
|
|
|
import { get } from 'lodash-es'
|
|
|
const selectMenu = inject('selectMenu')
|
|
|
-import { SearchOutlined } from '@ant-design/icons-vue'
|
|
|
+import { SearchOutlined, RocketTwoTone, BuildTwoTone } from '@ant-design/icons-vue'
|
|
|
// 接口
|
|
|
import { DictDataStore } from '@/store/api/system/dictData'
|
|
|
import { ProjectStore } from '@/store/api/platform/project'
|
|
|
+import { AchievementStore } from '@/store/api/platform/achievement'
|
|
|
import { NewsStore } from '@/store/api/platform/news'
|
|
|
const newsStore = NewsStore()
|
|
|
const store = ProjectStore()
|
|
|
const dictDataStore = DictDataStore()
|
|
|
+const achievementStore = AchievementStore()
|
|
|
// 路由
|
|
|
const router = useRouter()
|
|
|
// 图片引入
|
|
@@ -275,7 +332,9 @@ const projectList = ref([])
|
|
|
const maturityList = ref([])
|
|
|
const industryList = ref([])
|
|
|
const statusList = ref([])
|
|
|
-
|
|
|
+const fieldList = ref([])
|
|
|
+// 成果
|
|
|
+const achievementList = ref([])
|
|
|
// 专家
|
|
|
const exportList = ref([
|
|
|
{
|
|
@@ -481,6 +540,7 @@ onMounted(async () => {
|
|
|
await searchOther()
|
|
|
await search(active.value)
|
|
|
await searchNews()
|
|
|
+ await searchAchieve()
|
|
|
loading.value = false
|
|
|
})
|
|
|
const searchOther = async () => {
|
|
@@ -497,6 +557,9 @@ const searchOther = async () => {
|
|
|
// 企业状态
|
|
|
result = await dictDataStore.query({ code: 'companyStatus', is_use: '0' })
|
|
|
if ($checkRes(result)) statusList.value = result.data
|
|
|
+ // 技术领域
|
|
|
+ result = await dictDataStore.query({ code: 'field', is_use: '0' })
|
|
|
+ if ($checkRes(result)) fieldList.value = result.data
|
|
|
}
|
|
|
const search = async (active) => {
|
|
|
const info = {
|
|
@@ -509,17 +572,26 @@ const search = async (active) => {
|
|
|
const res = await store.query(info)
|
|
|
if (res.errcode == '0') list.value = res.data
|
|
|
}
|
|
|
-const searchNews = async (active) => {
|
|
|
+const searchNews = async () => {
|
|
|
const info = {
|
|
|
skip: 0,
|
|
|
limit: 6,
|
|
|
is_use: '0',
|
|
|
status: '1'
|
|
|
}
|
|
|
- if (active) info.type = active
|
|
|
const res = await newsStore.query(info)
|
|
|
if (res.errcode == '0') newsList.value = res.data
|
|
|
}
|
|
|
+const searchAchieve = async () => {
|
|
|
+ const info = {
|
|
|
+ skip: 0,
|
|
|
+ limit: 10,
|
|
|
+ is_use: '0',
|
|
|
+ status: '1'
|
|
|
+ }
|
|
|
+ const res = await achievementStore.query(info)
|
|
|
+ if (res.errcode == '0') achievementList.value = res.data
|
|
|
+}
|
|
|
// 字典数据转换
|
|
|
const getDict = (data, model) => {
|
|
|
let res
|
|
@@ -527,6 +599,7 @@ const getDict = (data, model) => {
|
|
|
else if (model == 'maturity') res = maturityList.value.find((f) => f.value == data)
|
|
|
else if (model == 'type') res = industryList.value.find((f) => f.value == data)
|
|
|
else if (model == 'status') res = statusList.value.find((f) => f.value == data)
|
|
|
+ else if (model == 'field') res = fieldList.value.find((f) => f.value == data)
|
|
|
return get(res, 'label')
|
|
|
}
|
|
|
// 地区显示
|
|
@@ -539,6 +612,8 @@ const toView = (item, type) => {
|
|
|
else if (type == '1') router.push({ path: '/expert/detail', query: { id: item.id || item._id } })
|
|
|
else if (type == '2') router.push({ path: '/company/detail', query: { id: item.id || item._id } })
|
|
|
else if (type == '3') router.push({ path: '/news/detail', query: { id: item.id || item._id } })
|
|
|
+ else if (type == '4')
|
|
|
+ router.push({ path: '/achievement/detail', query: { id: item.id || item._id } })
|
|
|
}
|
|
|
// 类型
|
|
|
const mouseOver = async (item) => {
|
|
@@ -904,6 +979,66 @@ const toChat = (item) => {
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
+ .one_6 {
|
|
|
+ display: flex;
|
|
|
+ padding: 20px 22px;
|
|
|
+ background-color: #fbfcfd;
|
|
|
+ .left {
|
|
|
+ max-height: 300px;
|
|
|
+ overflow: hidden;
|
|
|
+ .list {
|
|
|
+ display: flex;
|
|
|
+ align-items: center;
|
|
|
+ height: 34px;
|
|
|
+ font-size: 14px;
|
|
|
+ .i {
|
|
|
+ display: inline-block;
|
|
|
+ vertical-align: middle;
|
|
|
+ margin-right: 10px;
|
|
|
+ width: 6px;
|
|
|
+ height: 6px;
|
|
|
+ background-color: #8ab7f1;
|
|
|
+ border-radius: 50%;
|
|
|
+ }
|
|
|
+ .other {
|
|
|
+ color: #145ca4;
|
|
|
+ text-align: center;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ .right {
|
|
|
+ font-size: 16px;
|
|
|
+ .right_1 {
|
|
|
+ padding: 10px 30px;
|
|
|
+ span {
|
|
|
+ margin: 0 5px 0 0;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ .right_2 {
|
|
|
+ display: flex;
|
|
|
+ justify-content: center;
|
|
|
+ flex-wrap: wrap;
|
|
|
+ margin: 10px 0 0 0;
|
|
|
+ .list {
|
|
|
+ display: flex;
|
|
|
+ align-items: center;
|
|
|
+ margin: 0 0 10px 10px;
|
|
|
+ padding-left: 15px;
|
|
|
+ width: 200px;
|
|
|
+ height: 50px;
|
|
|
+ line-height: 53px;
|
|
|
+ background-color: #eaeff7;
|
|
|
+ span {
|
|
|
+ margin: 0 5px 0 0;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ .list:hover {
|
|
|
+ color: #2e70f1;
|
|
|
+ box-shadow: 0 0 10px 0 rgba(0, 69, 183, 0.3);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
}
|
|
|
}
|
|
|
</style>
|