页面设计优化:首页5个统计展示模块要让用户能明显的清楚可“点击进入”(比如字下面加下划线或者鼠标移入时“小手“图标要明显等)

This commit is contained in:
851673013@qq.com 2022-09-29 11:37:08 +08:00
parent 3f4e27177c
commit 7918e07b6c
4 changed files with 966 additions and 847 deletions

File diff suppressed because it is too large Load Diff

View File

@ -2,46 +2,71 @@
<div class="capability-convergence"> <div class="capability-convergence">
<div class="main"> <div class="main">
<div class="top"> <div class="top">
能力汇聚 能力分类
<span class="line"></span> <span class="line"></span>
</div> </div>
<div class="bottom"> <div class="bottom">
<div class="item"> <div class="item">
<div class="zj">组件服务</div> <div class="zj">组件服务</div>
<div class="name" v-for="(item, index) in zjList" :key="item.id" :class="index == 4 ? 'name-last' : ''" <div
@click="selectOne(item.id)"> class="name"
v-for="(item, index) in zjList"
:key="item.id"
:class="index == 4 ? 'name-last' : ''"
@click="selectOne(item.id)"
>
{{ index + 1 }}-{{ item.name }} {{ index + 1 }}-{{ item.name }}
</div> </div>
<div class="btn" @click="jumpPage('组件服务')">查看更多</div> <div class="btn" @click="jumpPage('组件服务')">查看更多</div>
</div> </div>
<div class="item"> <div class="item">
<div class="yy">应用资源</div> <div class="yy">应用资源</div>
<div class="name" v-for="(item, index) in yyList" :key="item.id" :class="index == 4 ? 'name-last' : ''" <div
@click="selectOne(item.id)"> class="name"
v-for="(item, index) in yyList"
:key="item.id"
:class="index == 4 ? 'name-last' : ''"
@click="selectOne(item.id)"
>
{{ index + 1 }}-{{ item.name }} {{ index + 1 }}-{{ item.name }}
</div> </div>
<div class="btn" @click="jumpPage('应用资源')">查看更多</div> <div class="btn" @click="jumpPage('应用资源')">查看更多</div>
</div> </div>
<div class="item"> <div class="item">
<div class="jc">基础设施</div> <div class="jc">基础设施</div>
<div class="name" v-for="(item, index) in jcList" :key="item.name" :class="index == 2 ? 'name-last' : ''" <div
@click="selectOne2(item.name)"> class="name"
v-for="(item, index) in jcList"
:key="item.name"
:class="index == 2 ? 'name-last' : ''"
@click="selectOne2(item.name)"
>
{{ item.name + '-' + item.num + '项' }} {{ item.name + '-' + item.num + '项' }}
</div> </div>
<div class="btn" @click="jumpPage('基础设施')">查看更多</div> <div class="btn" @click="jumpPage('基础设施')">查看更多</div>
</div> </div>
<div class="item"> <div class="item">
<div class="sj">数据资源</div> <div class="sj">数据资源</div>
<div class="name" v-for="(item, index) in sjList" :key="item.id" :class="index == 4 ? 'name-last' : ''" <div
@click="selectOne3(item.name)"> class="name"
v-for="(item, index) in sjList"
:key="item.id"
:class="index == 4 ? 'name-last' : ''"
@click="selectOne3(item.name)"
>
{{ index + 1 }}-{{ item.name }} {{ index + 1 }}-{{ item.name }}
</div> </div>
<div class="btn" @click="jumpPage('数据资源')">查看更多</div> <div class="btn" @click="jumpPage('数据资源')">查看更多</div>
</div> </div>
<div class="item"> <div class="item">
<div class="zs">知识库</div> <div class="zs">知识库</div>
<div class="name" v-for="(item, index) in zsList" :key="item.id" :class="index == 4 ? 'name-last' : ''" <div
@click="openHref(item)"> class="name"
v-for="(item, index) in zsList"
:key="item.id"
:class="index == 4 ? 'name-last' : ''"
@click="openHref(item)"
>
{{ index + 1 }}-{{ item.name }} {{ index + 1 }}-{{ item.name }}
</div> </div>
<div class="btn" @click="jumpPage('知识库')">查看更多</div> <div class="btn" @click="jumpPage('知识库')">查看更多</div>
@ -51,390 +76,394 @@
</div> </div>
</template> </template>
<script setup> <script setup>
import { import {
pageWithAttrs, pageWithAttrs,
getDataResource, getDataResource,
selectInfrastructureList, selectInfrastructureList,
} from '@/api/home.js' } from '@/api/home.js'
import { ref, reactive } from 'vue' import { ref, reactive } from 'vue'
import { useRouter } from 'vue-router' import { useRouter } from 'vue-router'
import { useStore } from 'vuex' import { useStore } from 'vuex'
import { updateVisits, browsingInsert, getSoldierList } from '@/api/home' import { updateVisits, browsingInsert, getSoldierList } from '@/api/home'
import { message, Upload } from 'ant-design-vue' import { message, Upload } from 'ant-design-vue'
import mybus from '@/myplugins/mybus' import mybus from '@/myplugins/mybus'
const store = useStore() const store = useStore()
const router = useRouter() const router = useRouter()
const zjList = ref([]) const zjList = ref([])
const jcList = ref([]) const jcList = ref([])
const sjList = ref([]) const sjList = ref([])
const yyList = ref([]) const yyList = ref([])
// //
const zsList = ref([]) const zsList = ref([])
// const jcList = ref([]) // const jcList = ref([])
const paramsGetResources = { const paramsGetResources = {
districtId: '', districtId: '',
pageNum: 1, pageNum: 1,
pageSize: 5, pageSize: 5,
type: '', type: '',
name: '', name: '',
infoList: [], infoList: [],
orderField: 'total', // total visits 访 applyCount score collectCount orderField: 'total', // total visits 访 applyCount score collectCount
orderType: 'DESC', // ASC DESC orderType: 'DESC', // ASC DESC
} }
console.log('dataShowdev==========================>', whoShow) console.log('dataShowdev==========================>', whoShow)
// eslint-disable-next-line no-undef // eslint-disable-next-line no-undef
const whoShow1 = ref(whoShow) const whoShow1 = ref(whoShow)
const interfaceSuccess = ref(0) const interfaceSuccess = ref(0)
const object = reactive({ const object = reactive({
yyNum: '', yyNum: '',
zjNum: '', zjNum: '',
jcNum: '', jcNum: '',
sjNum: '', sjNum: '',
zsNum: '', zsNum: '',
}) })
const getAppResources = (type, obj) => { const getAppResources = (type, obj) => {
paramsGetResources.type = type paramsGetResources.type = type
if (type === '数据资源' && !whoShow1.value.itShowBaoTou) { if (type === '数据资源' && !whoShow1.value.itShowBaoTou) {
getDataResource({ getDataResource({
serviceName: paramsGetResources.name || '', // serviceName: paramsGetResources.name || '', //
orderField: whoShow1.value.itShowQingDao ? 'fbrq' : 'createTime', // orderField: whoShow1.value.itShowQingDao ? 'fbrq' : 'createTime', //
orderType: paramsGetResources.orderType.toLowerCase(), //descasc orderType: paramsGetResources.orderType.toLowerCase(), //descasc
pageNum: paramsGetResources.pageNum, // pageNum: paramsGetResources.pageNum, //
pageSize: paramsGetResources.pageSize, // pageSize: paramsGetResources.pageSize, //
}).then((res) => { }).then((res) => {
console.log('数据资源==================>', res.data.data) console.log('数据资源==================>', res.data.data)
if (whoShow1.value.itShowQingDao) { if (whoShow1.value.itShowQingDao) {
res.data.data.data.forEach((val) => { res.data.data.data.forEach((val) => {
val.id = val.guid // id val.id = val.guid // id
val.name = val.zyname // val.name = val.zyname //
val.sjlCount = val.sjcczl // val.sjlCount = val.sjcczl //
val.applyCount = val.syqk // val.applyCount = val.syqk //
val.deptName = val.TGBM // val.deptName = val.TGBM //
val.createDate = val.fbrq // val.createDate = val.fbrq //
val.description = val.xgxt // val.description = val.xgxt //
}) })
obj.value = res.data.data.data || [] obj.value = res.data.data.data || []
object.sjNum = res.data.data.rows object.sjNum = res.data.data.rows
// interfaceSuccess.value++ // interfaceSuccess.value++
// if (interfaceSuccess.value == 5) { // if (interfaceSuccess.value == 5) {
// mybus.emit('chagneNum', object) // mybus.emit('chagneNum', object)
// } // }
} else if (whoShow1.value.itShowXiHaiAn) { } else if (whoShow1.value.itShowXiHaiAn) {
res.data.data.list.forEach((val) => { res.data.data.list.forEach((val) => {
val.id = val.serviceId // id val.id = val.serviceId // id
val.name = val.serviceName // val.name = val.serviceName //
val.sjlCount = val.requestQuantity // val.sjlCount = val.requestQuantity //
val.applyCount = val.requestCount // val.applyCount = val.requestCount //
val.deptName = val.departmentName // val.deptName = val.departmentName //
val.createTime = val.createTime.split('.')[0] val.createTime = val.createTime.split('.')[0]
val.createDate = val.createTime // val.createDate = val.createTime //
}) })
obj.value = res.data.data.list || [] obj.value = res.data.data.list || []
object.sjNum = res.data.data.total object.sjNum = res.data.data.total
// interfaceSuccess.value++ // interfaceSuccess.value++
// if (interfaceSuccess.value == 5) { // if (interfaceSuccess.value == 5) {
// mybus.emit('chagneNum', object) // mybus.emit('chagneNum', object)
// } // }
} }
}) })
} else { } else {
let type = paramsGetResources.type let type = paramsGetResources.type
if (type == '基础设施') { if (type == '基础设施') {
jcList.value = [] jcList.value = []
selectInfrastructureList().then((res) => { selectInfrastructureList().then((res) => {
console.log('基础设施==========>', res.data.data) console.log('基础设施==========>', res.data.data)
for (const key in res.data.data) { for (const key in res.data.data) {
if (whoShow1.value.itShowXiHaiAn) { if (whoShow1.value.itShowXiHaiAn) {
if (key === '视频资源') { if (key === '视频资源') {
jcList.value.push({
name: key,
num: res.data.data[key],
})
}
} else {
jcList.value.push({ jcList.value.push({
name: key, name: key,
num: res.data.data[key], num: res.data.data[key],
}) })
} }
} else {
jcList.value.push({
name: key,
num: res.data.data[key],
})
} }
} // 西-
// 西- if (whoShow1.value.itShowXiHaiAn) {
if (whoShow1.value.itShowXiHaiAn) { getSoldierData('无人机')
getSoldierData('无人机').then(res => { .then((res) => {
let { total = 0 } = res.data.data; let { total = 0 } = res.data.data
jcList.value.push({ jcList.value.push({
name: '无人机', name: '无人机',
num: total, num: total,
}) })
}).catch(err => { })
console.log('err--无人机---------->', err); .catch((err) => {
console.log('err--无人机---------->', err)
}) })
getSoldierData('单兵设备').then(res => { getSoldierData('单兵设备')
let { total = 0 } = res.data.data; .then((res) => {
jcList.value.push({ let { total = 0 } = res.data.data
name: '单兵设备', jcList.value.push({
num: total, name: '单兵设备',
}) num: total,
}).catch(err => { })
console.log('err--单兵设备---------->', err); })
.catch((err) => {
}) console.log('err--单兵设备---------->', err)
} })
}) }
} else { })
pageWithAttrs(paramsGetResources).then((res) => { } else {
console.log('object个数======>', type) pageWithAttrs(paramsGetResources).then((res) => {
obj.value = res.data.data.records console.log('object个数======>', type)
switch (type) { obj.value = res.data.data.records
case '组件服务': switch (type) {
assignmentMethod('zjNum', res) case '组件服务':
break assignmentMethod('zjNum', res)
case '应用资源': break
assignmentMethod('yyNum', res) case '应用资源':
break assignmentMethod('yyNum', res)
case '基础设施': break
assignmentMethod('jcNum', res) case '基础设施':
break assignmentMethod('jcNum', res)
case '知识库': break
assignmentMethod('zsNum', res) case '知识库':
break assignmentMethod('zsNum', res)
} break
}) }
})
}
} }
} }
}
// todo // todo
const getSoldierData = (name) => { const getSoldierData = (name) => {
let _params = { let _params = {
type: name,
page: 1,
limit: 10,
}
return new Promise((resolve, reject) => {
getSoldierList(_params).then(res => {
resolve(res)
console.log('res---获取无人机、单兵设备--------->', res);
if (res.data.code !== 0) {
return message.error(res.data.msg)
}
}).catch(err => {
reject(err)
})
})
}
const openHref = (item) => {
console.log(item.id, 'wowowo')
console.log(item.visits, 'wowowo')
browsingInsert({ resourceId: item.id }).then((res) => {
// console.log(res)
})
const arrList = ref([])
arrList.value = JSON.parse(window.sessionStorage.getItem('visits'))
if (arrList.value.indexOf(item.id) === -1) {
arrList.value.push(item.id)
updateVisits({
id: item.id,
visits: item.visits || '0',
}).then(() => {
window.sessionStorage.setItem('visits', JSON.stringify(arrList.value))
})
}
window.open(item.link)
// window.open(
// window.SITE_CONFIG.previewUrl +
// 'hisense_office/onlinePreview?url=' +
// btoa(encodeURI(item.fileHref))
// )
}
const assignmentMethod = (type, res) => {
object[type] = res.data.data.total
// interfaceSuccess.value++
// console.log('object======>', object, interfaceSuccess.value, type)
// if (interfaceSuccess.value >= 4) {
// mybus.emit('chagneNum', object)
// }
}
getAppResources('组件服务', zjList)
getAppResources('应用资源', yyList)
getAppResources('基础设施', jcList)
getAppResources('数据资源', sjList)
getAppResources('知识库', zsList)
function jumpPage(type) {
// store
store.commit('home/selectCardsData', {
selectCardsnum: type,
})
console.log(
'选中===================>',
store.getters['home/selectCardsnum']
)
// router.push({ path: '/DetailsPageconetent' })
router.push({
path: '/DetailsPageconetent',
query: {
select: type,
},
})
}
const selectOne = (id) => {
console.log('点击===============》', id)
router.push({
path: '/details',
query: {
id: id,
},
})
}
const selectOne2 = (name) => {
console.log('点击===============》', name)
router.push({
path: '/DetailsPageconetent',
query: {
type: name, type: name,
select: '基础设施', page: 1,
}, limit: 10,
}) }
} return new Promise((resolve, reject) => {
const selectOne3 = (name) => { getSoldierList(_params)
console.log('点击===============》', name) .then((res) => {
router.push({ resolve(res)
path: '/DetailsPageconetent', console.log('res---获取无人机、单兵设备--------->', res)
query: { if (res.data.code !== 0) {
str: name, return message.error(res.data.msg)
select: '数据资源', }
}, })
}) .catch((err) => {
} reject(err)
})
})
}
const openHref = (item) => {
console.log(item.id, 'wowowo')
console.log(item.visits, 'wowowo')
browsingInsert({ resourceId: item.id }).then((res) => {
// console.log(res)
})
const arrList = ref([])
arrList.value = JSON.parse(window.sessionStorage.getItem('visits'))
if (arrList.value.indexOf(item.id) === -1) {
arrList.value.push(item.id)
updateVisits({
id: item.id,
visits: item.visits || '0',
}).then(() => {
window.sessionStorage.setItem('visits', JSON.stringify(arrList.value))
})
}
window.open(item.link)
// window.open(
// window.SITE_CONFIG.previewUrl +
// 'hisense_office/onlinePreview?url=' +
// btoa(encodeURI(item.fileHref))
// )
}
const assignmentMethod = (type, res) => {
object[type] = res.data.data.total
// interfaceSuccess.value++
// console.log('object======>', object, interfaceSuccess.value, type)
// if (interfaceSuccess.value >= 4) {
// mybus.emit('chagneNum', object)
// }
}
getAppResources('组件服务', zjList)
getAppResources('应用资源', yyList)
getAppResources('基础设施', jcList)
getAppResources('数据资源', sjList)
getAppResources('知识库', zsList)
function jumpPage(type) {
// store
store.commit('home/selectCardsData', {
selectCardsnum: type,
})
console.log(
'选中===================>',
store.getters['home/selectCardsnum']
)
// router.push({ path: '/DetailsPageconetent' })
router.push({
path: '/DetailsPageconetent',
query: {
select: type,
},
})
}
const selectOne = (id) => {
console.log('点击===============》', id)
router.push({
path: '/details',
query: {
id: id,
},
})
}
const selectOne2 = (name) => {
console.log('点击===============》', name)
router.push({
path: '/DetailsPageconetent',
query: {
type: name,
select: '基础设施',
},
})
}
const selectOne3 = (name) => {
console.log('点击===============》', name)
router.push({
path: '/DetailsPageconetent',
query: {
str: name,
select: '数据资源',
},
})
}
</script> </script>
<style lang="less" scoped> <style lang="less" scoped>
.capability-convergence { .capability-convergence {
height: 7.2rem; height: 7.2rem;
background: url('~@/assets/newHome/Convergence-bg.png') no-repeat; background: url('~@/assets/newHome/Convergence-bg.png') no-repeat;
background-size: 100%; background-size: 100%;
display: flex;
justify-content: center;
.main {
width: 13rem;
margin-top: 1.8rem;
display: flex; display: flex;
flex-direction: column; justify-content: center;
flex-wrap: wrap;
.top { .main {
font-size: 0.3rem; width: 13rem;
color: #212121; margin-top: 1.8rem;
text-align: center;
display: flex; display: flex;
flex-direction: column; flex-direction: column;
flex-wrap: wrap; flex-wrap: wrap;
justify-content: center;
align-items: center;
.line { .top {
width: 0.34rem; font-size: 0.3rem;
height: 0.03rem; color: #212121;
background-color: #0058e1; text-align: center;
margin-top: 0.08rem; display: flex;
flex-direction: column;
flex-wrap: wrap;
justify-content: center;
align-items: center;
.line {
width: 0.34rem;
height: 0.03rem;
background-color: #0058e1;
margin-top: 0.08rem;
}
} }
}
.bottom { .bottom {
display: flex; display: flex;
justify-content: space-between; justify-content: space-between;
margin-top: 0.4rem; margin-top: 0.4rem;
.item { .item {
width: 2.44rem; width: 2.44rem;
height: 3.91rem; height: 3.91rem;
font-size: 0.16rem; font-size: 0.16rem;
background-color: #fff; background-color: #fff;
border-radius: 0.02rem;
box-shadow: 0 0.05rem 0.2rem #ccc;
position: relative;
div:nth-of-type(1) {
height: 1.02rem;
line-height: 1.02rem;
font-size: 0.2rem;
color: #fff;
padding-left: 0.15rem;
background-size: 100%;
}
.jc {
background: url('~@/assets/newHome/Convergence-jc.png') no-repeat;
}
.sj {
background: url('~@/assets/newHome/Convergence-sj.png') no-repeat;
}
.zj {
background: url('~@/assets/newHome/Convergence-zj.png') no-repeat;
}
.yy {
background: url('~@/assets/newHome/Convergence-yy.png') no-repeat;
}
.zs {
background: url('~@/assets/newHome/Convergence-zs.png') no-repeat;
}
.name {
height: 0.47rem;
line-height: 0.47rem;
margin: 0 0.16rem;
border-bottom: 0.01rem solid #e9e9e9;
overflow: hidden;
text-overflow: ellipsis;
display: -webkit-box;
-webkit-line-clamp: 1;
-webkit-box-orient: vertical;
word-break: break-all;
}
.name:hover {
color: #0058e1;
cursor: pointer;
}
.name-last {
border-bottom: none;
}
.btn {
cursor: pointer;
width: 0.8rem;
height: 0.24rem;
border: 0.01rem solid #0058e1;
font-size: 0.14rem;
color: #0058e1;
border-radius: 0.02rem; border-radius: 0.02rem;
text-align: center; box-shadow: 0 0.05rem 0.2rem #ccc;
margin-top: 0.1rem; position: relative;
margin-left: 0.85rem;
position: absolute; div:nth-of-type(1) {
bottom: 0.2rem; height: 1.02rem;
line-height: 1.02rem;
font-size: 0.2rem;
color: #fff;
padding-left: 0.15rem;
background-size: 100%;
}
.jc {
background: url('~@/assets/newHome/Convergence-jc.png') no-repeat;
}
.sj {
background: url('~@/assets/newHome/Convergence-sj.png') no-repeat;
}
.zj {
background: url('~@/assets/newHome/Convergence-zj.png') no-repeat;
}
.yy {
background: url('~@/assets/newHome/Convergence-yy.png') no-repeat;
}
.zs {
background: url('~@/assets/newHome/Convergence-zs.png') no-repeat;
}
.name {
height: 0.47rem;
line-height: 0.47rem;
margin: 0 0.16rem;
border-bottom: 0.01rem solid #e9e9e9;
overflow: hidden;
text-overflow: ellipsis;
display: -webkit-box;
-webkit-line-clamp: 1;
-webkit-box-orient: vertical;
word-break: break-all;
}
.name:hover {
color: #0058e1;
cursor: pointer;
}
.name-last {
border-bottom: none;
}
.btn {
cursor: pointer;
width: 0.8rem;
height: 0.24rem;
border: 0.01rem solid #0058e1;
font-size: 0.14rem;
color: #0058e1;
border-radius: 0.02rem;
text-align: center;
margin-top: 0.1rem;
margin-left: 0.85rem;
position: absolute;
bottom: 0.2rem;
}
.btn:hover {
background: rgba(0, 88, 225, 0.3);
color: #000;
}
} }
.btn:hover { .item:hover {
background: rgba(0, 88, 225, 0.3); border-radius: 0.02rem;
color: #000; border: 0.01rem solid #0058e1;
box-shadow: 0rem 0.08rem 0.2rem rgba(0, 88, 225, 0.3);
} }
} }
.item:hover {
border-radius: 0.02rem;
border: 0.01rem solid #0058e1;
box-shadow: 0rem 0.08rem 0.2rem rgba(0, 88, 225, 0.3);
}
} }
} }
}
</style> </style>

View File

@ -1,45 +1,60 @@
<template> <template>
<div class="navigation2"> <div class="navigation2">
<div class="item" @click="jumpPage('组件服务')"> <a-tooltip>
<div class="img zj"></div> <template #title>点击进入组件服务</template>
<div class="name">组件服务</div> <div class="item" @click="jumpPage('组件服务')">
<div class="sl"> <div class="img zj"></div>
<span class="num">{{ zjNum || 0 }}</span> <div class="name">组件服务</div>
<div class="sl">
<span class="num">{{ zjNum || 0 }}</span>
</div>
</div> </div>
</div> </a-tooltip>
<div class="item" @click="jumpPage('应用资源')"> <a-tooltip>
<div class="img yy"></div> <template #title>点击进入应用资源</template>
<div class="name">应用资源</div> <div class="item" @click="jumpPage('应用资源')">
<div class="sl"> <div class="img yy"></div>
<span class="num">{{ yyNum || 0 }}</span> <div class="name">应用资源</div>
<div class="sl">
<span class="num">{{ yyNum || 0 }}</span>
</div>
</div> </div>
</div> </a-tooltip>
<div class="item" @click="jumpPage('基础设施')"> <a-tooltip>
<div class="img jc"></div> <template #title>点击进入基础设施</template>
<div class="name">基础设施</div> <div class="item" @click="jumpPage('基础设施')">
<div class="sl"> <div class="img jc"></div>
<span class="num">{{ jcNum || 0 }}</span> <div class="name">基础设施</div>
<div class="sl">
<span class="num">{{ jcNum || 0 }}</span>
</div>
</div> </div>
</div> </a-tooltip>
<div class="item" @click="jumpPage('数据资源')"> <a-tooltip>
<div class="img sj"></div> <template #title>点击进入数据资源</template>
<div class="name">数据资源</div> <div class="item" @click="jumpPage('数据资源')">
<div class="sl"> <div class="img sj"></div>
<span class="num">{{ sjNum || 0 }}</span> <div class="name">数据资源</div>
<div class="sl">
<span class="num">{{ sjNum || 0 }}</span>
</div>
</div> </div>
</div> </a-tooltip>
<div class="item" @click="jumpPage('知识库')"> <a-tooltip>
<div class="img zs"></div> <template #title>点击进入知识库</template>
<div class="name">知识库</div> <div class="item" @click="jumpPage('知识库')">
<div class="sl"> <div class="img zs"></div>
<span class="num">{{ zsNum || 0 }}</span> <div class="name">知识库</div>
<div class="sl">
<span class="num">{{ zsNum || 0 }}</span>
</div>
</div> </div>
</div> </a-tooltip>
</div> </div>
</template> </template>
<script setup> <script setup>

View File

@ -15,7 +15,7 @@
<latest-capabilities></latest-capabilities> <latest-capabilities></latest-capabilities>
<resource-aggregation></resource-aggregation> <resource-aggregation></resource-aggregation>
<recommendation-ability></recommendation-ability> <recommendation-ability></recommendation-ability>
<work-dynamics></work-dynamics> <!-- <work-dynamics></work-dynamics> -->
<home-footer></home-footer> <home-footer></home-footer>
</div> </div>
</template> </template>