Compare commits

...

60 Commits

Author SHA1 Message Date
wuhongjian c852f77bee bug修复 2022-06-16 13:59:02 +08:00
851673013@qq.com 13c10ce1ae 区市站点 2022-06-16 12:27:15 +08:00
gaoyuanwei 1cd13ca346 能力集市左侧最大高度修改 2022-06-16 12:11:58 +08:00
851673013@qq.com 466c70e5d6 区市站点-样式修改 2022-06-16 12:06:11 +08:00
gaoyuanwei b7896bcfe3 头部、首页、赋能样式修改 2022-06-16 10:52:07 +08:00
851673013@qq.com 71f6ff0790 计费标准修改 2022-06-16 10:29:32 +08:00
wuhongjian 94f5ab6acd bug修复 2022-06-15 20:49:47 +08:00
a0049873 f02ed50650 BUG 2022-06-15 20:45:29 +08:00
a0049873 4087d54c40 BUG修改 2022-06-15 20:45:10 +08:00
851673013@qq.com 2218e034bd 赋能案例bug修改 2022-06-15 20:36:01 +08:00
a0049873 96ef90a216 eslint格式 2022-06-15 20:14:27 +08:00
851673013@qq.com 35770f4956 上架详情页标题修改 2022-06-15 19:19:32 +08:00
a0049873 86458f70fd 功能新增 BUG修改 2022-06-15 18:33:28 +08:00
gaoyuanwei 4ca50ddd7c 查询页修改 2022-06-15 18:24:10 +08:00
851673013@qq.com fb6107d461 应用资源详情样式修改 2022-06-15 18:11:20 +08:00
a0049873 7fc167b7df 动态获取接口请求方式 2022-06-15 17:13:19 +08:00
a0049873 99cdec5f8e 更改字段 2022-06-15 16:54:52 +08:00
a0049873 65f08c1ba5 Merge branch 'hi-ucs-dev' of http://15.2.21.221:3000/wuhongjian/hi-ucs into hi-ucs-dev 2022-06-15 16:29:14 +08:00
a0049873 011a68190d 新加点击功能 2022-06-15 16:28:55 +08:00
851673013@qq.com ec2dfaa755 赋能案例-详情页路由 2022-06-15 16:19:42 +08:00
a0049873 4a0516fe11 去除 西海岸和崂山区以外的 箭头动画 2022-06-15 15:53:37 +08:00
gaoyuanwei cdf9298f58 跳转 2022-06-15 15:31:56 +08:00
851673013@qq.com 34c38d80db 赋能案例路由 2022-06-15 15:28:19 +08:00
a0049873 e84e336d3a 西海岸镜像 添加头部路由 线头双向 2022-06-15 15:26:39 +08:00
851673013@qq.com 5f69279437 赋能案例详情 2022-06-15 15:22:26 +08:00
gaoyuanwei dace70ec6b 赋能案例查询页 2022-06-15 15:20:10 +08:00
a0049873 904332259f 尺寸更改 2022-06-15 15:02:03 +08:00
a0049873 f0fdad3db0 echarts 演示地图开发 2022-06-15 15:00:28 +08:00
wuhongjian 272c38a78f 配置文件更新 2022-06-15 12:26:21 +08:00
851673013@qq.com 2402c128a7 赋能案例图片 2022-06-15 10:00:54 +08:00
gaoyuanwei ce79e3c7de 赋能案例初始 2022-06-15 09:34:16 +08:00
wuhongjian c69e323a77 wuhongjian 2022-06-15 09:27:16 +08:00
851673013@qq.com 9706fd18b3 详情页面切换 2022-06-14 19:35:48 +08:00
851673013@qq.com ea9f61ede8 首页-能力上架弹窗bug修改 2022-06-14 17:27:08 +08:00
851673013@qq.com 3d6df3e3f4 能力上架样式修改 2022-06-14 16:36:17 +08:00
wuhongjian 4399b2ddc8 ui 2022-06-14 16:31:34 +08:00
851673013@qq.com 8b092e05e5 详情样式修改 2022-06-14 16:29:56 +08:00
851673013@qq.com a3d77f3557 应用资源详情bug修改 2022-06-14 16:25:15 +08:00
851673013@qq.com ddd1d13333 应用资源详情bug 2022-06-14 16:11:52 +08:00
851673013@qq.com 0bc59716ad 应用资源bug修改 2022-06-14 15:54:57 +08:00
851673013@qq.com 3bd8e574bb 应用资源详情bug修改 2022-06-14 15:39:04 +08:00
a0049873 904aecc6da 详情页BUG修改,应用资源详情页开发 2022-06-14 14:49:38 +08:00
851673013@qq.com 161eaddef3 应用资源详情 2022-06-14 14:33:30 +08:00
wuhongjian d61593f666 bug 2022-06-14 14:03:46 +08:00
wuhongjian 8058b17c08 Merge branch 'hi-ucs-dev' of http://15.2.21.221:3000/wuhongjian/hi-ucs into hi-ucs-dev 2022-06-14 13:59:37 +08:00
wuhongjian 85d714d7eb 格式处理 2022-06-14 13:57:04 +08:00
a0049873 efad411cf9 修改我的收藏显示BUG 2022-06-14 12:03:39 +08:00
a0049873 27e9aa34b5 修改申购车筛选显示BUG 2022-06-14 12:02:01 +08:00
a0049873 e74c6ded3e 代码格式修改 2022-06-14 11:57:19 +08:00
a0049873 8b48a62f9c 格式 2022-06-14 11:52:16 +08:00
a0049873 3b3459206d Merge branch 'hi-ucs-dev' of http://15.2.21.221:3000/wuhongjian/hi-ucs into hi-ucs-dev 2022-06-14 11:50:33 +08:00
a0049873 0f1a9d56e0 新增跳转逻辑判断 2022-06-14 11:49:37 +08:00
wuhongjian b5e820c639 分辨率适配 2022-06-14 11:47:57 +08:00
a0049873 f64f44172e 跳转挂载前 新增分支选择 2022-06-14 11:32:25 +08:00
a0049873 1deb802d87 应用展示显示BUG修改 2022-06-14 11:14:06 +08:00
a0049873 680d8d63ba 成功后退出 2022-06-14 11:11:24 +08:00
a0049873 c5bd98c8fc 挂载添加deptid 2022-06-14 11:06:32 +08:00
a0049873 cfded4f558 应用详情开发 2022-06-14 10:45:59 +08:00
a0049873 1275b4b992 应用详情 2022-06-14 10:21:06 +08:00
a0049873 ea9fffad7f 应用详情页 2022-06-14 10:10:51 +08:00
97 changed files with 21221 additions and 772 deletions

1
.gitignore vendored Normal file
View File

@ -0,0 +1 @@
back/dist-西海岸-后台管理.zip

16388
back/package-lock.json generated Normal file

File diff suppressed because it is too large Load Diff

View File

@ -29,6 +29,7 @@
"image-webpack-loader": "^8.1.0",
"imagemin-gifsicle": "^7.0.0",
"imagemin-mozjpeg": "^10.0.0",
"jquery": "^3.6.0",
"js-cookie": "^3.0.0-rc.3",
"md-editor-v3": "^1.11.10",
"mitt": "^3.0.0",

View File

@ -2,7 +2,7 @@
* @Author: hisense.wuhongjian
* @Date: 2022-03-29 16:45:25
* @LastEditors: hisense.wuhongjian
* @LastEditTime: 2022-06-09 10:30:15
* @LastEditTime: 2022-06-16 12:46:36
* @Description: 告诉大家这是什么
-->
<!DOCTYPE html>
@ -28,21 +28,21 @@
<!-- 站点配置 -->
<script>
window.SITE_CONFIG = {};
window.SITE_CONFIG['backUrl'] = 'http://15.72.183.90:8001';
window.SITE_CONFIG['previewUrl'] = 'http://15.72.183.90:7008/';
window.SITE_CONFIG['frontUrl'] = 'http://15.72.183.90:7008/document/#/devModelFile/';
window.SITE_CONFIG['apiURL'] = 'http://15.72.183.90:8000/renren-admin';
// window.SITE_CONFIG['backUrl'] = 'http://15.72.183.90:8001';
// window.SITE_CONFIG['previewUrl'] = 'http://15.72.183.90:7008/';
// window.SITE_CONFIG['frontUrl'] = 'http://15.72.183.90:7008/document/#/devModelFile/';
// window.SITE_CONFIG['apiURL'] = 'http://15.72.183.90:8000/renren-admin';
// window.SITE_CONFIG['backUrl'] = 'http://localhost:8001';
// window.SITE_CONFIG['previewUrl'] = 'http://15.72.183.90:7008/';
// window.SITE_CONFIG['frontUrl'] = 'http://15.72.183.90:7008/document/#/devModelFile/';
// window.SITE_CONFIG['apiURL'] = 'http://15.72.183.90:8000/renren-admin';
window.SITE_CONFIG['backUrl'] = 'http://15.2.21.238:9797';
window.SITE_CONFIG['previewUrl'] = 'http://localhost:8080/';
window.SITE_CONFIG['frontUrl'] = 'http://15.2.21.238:9796/document/#/devModelFile/';
window.SITE_CONFIG['apiURL'] = 'http://15.2.21.238:8888/renren-admin';
// window.SITE_CONFIG['backUrl'] = 'http://15.2.21.238:9797';
// window.SITE_CONFIG['previewUrl'] = 'http://localhost:8080/';
// window.SITE_CONFIG['frontUrl'] = 'http://15.2.21.238:9796/document/#/devModelFile/';
// window.SITE_CONFIG['apiURL'] = 'http://15.2.21.238:8888/renren-admin';
// 穿透版本
// window.SITE_CONFIG['backUrl'] = 'http://124.222.94.39:9797';
// window.SITE_CONFIG['previewUrl'] = 'http://124.222.94.39:9796/';

File diff suppressed because one or more lines are too long

View File

@ -0,0 +1,32 @@
{
"type": "FeatureCollection",
"features": [{
"type": "Feature",
"properties": {
"adcode": 110000,
"name": "中国",
"center": [116.405285, 39.904989],
"centroid": [116.41995, 40.18994],
"childrenNum": 16,
"level": "province",
"parent": {
"adcode": 100000
},
"subFeatureIndex": 0,
"acroutes": [100000]
},
"geometry": {
"type": "MultiPolygon",
"coordinates": [
[
[
[135.08,53.56],
[135.08,3.86],
[73.51,3.86],
[73.51,53.56]
]
]
]
}
}]
}

File diff suppressed because one or more lines are too long

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.6 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 648 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.0 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 323 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 825 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 305 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 8.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 273 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.0 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.0 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 323 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.0 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.7 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.9 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 42 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 99 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 112 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 110 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.7 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 111 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 111 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 112 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 112 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 111 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 110 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 112 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.5 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.9 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 112 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.6 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 261 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.7 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.5 KiB

View File

@ -2,7 +2,7 @@
* @Author: hisense.wuhongjian
* @Date: 2022-03-29 17:48:03
* @LastEditors: hisense.wuhongjian
* @LastEditTime: 2022-06-06 12:57:06
* @LastEditTime: 2022-06-15 19:40:28
* @Description: 告诉大家这是什么
*/
/**
@ -23,10 +23,7 @@ const setting = {
// baseURL: 'mock-server',
//
//
baseURL:
process.env.NODE_ENV === 'development'
? 'http://15.2.21.238:8888/renren-admin'
: '',
baseURL: 'http://15.72.183.90:8000/renren-admin',
// : 'http://15.2.21.238:8888/renren-admin/',
// 'http://15.72.183.90:8000/renren-admin',
//

View File

@ -64,6 +64,15 @@ export const constantRoutes = [
icon: 'error-warning-line',
},
},
{
path: '/mapTest',
name: 'mapTest',
component: () => import('@/views/home/mapTest'),
meta: {
title: '地图测试',
icon: 'error-warning-line',
},
},
{
path: '/',
component: Layout,
@ -214,7 +223,9 @@ export const constantRoutes = [
path: '/PictureCharacterRecognition',
name: 'PictureCharacterRecognition',
component: () =>
import('@/views/detailsAll/components/PictureCharacterRecognition'),
import(
'@/views/detailsAll/components/Algorithm/PictureCharacterRecognition'
),
meta: {
title: '图片文字识别',
icon: 'error-warning-line',
@ -223,7 +234,8 @@ export const constantRoutes = [
{
path: '/TestOfWords',
name: 'TestOfWords',
component: () => import('@/views/detailsAll/components/TestOfWords'),
component: () =>
import('@/views/detailsAll/components/Algorithm/TestOfWords'),
meta: {
title: '文字检验',
icon: 'error-warning-line',
@ -354,6 +366,27 @@ export const constantRoutes = [
icon: 'error-warning-line',
},
},
//
{
path: '/assignCase',
name: 'assignCase',
component: () => import('@/views/assignCase/index'),
meta: {
title: '赋能案例',
icon: 'error-warning-line',
},
},
//
{
path: '/AssignCaseDetailPage',
name: 'AssignCaseDetailPage',
component: () =>
import('@/views/assignCase/components/AssignCaseDetailPage'),
meta: {
title: '赋能案例详情',
icon: 'error-warning-line',
},
},
{
path: '/nenglishangjia',
name: 'TheNewRelease',

View File

@ -0,0 +1,480 @@
<!--
* @Author: hisense.zhangfeihu
* @Date: 2022-06-13 10:22:27
* @LastEditors: hisense.zhangfeihu
* @LastEditTime: 2022-06-13 14:31:19
* @Description: 赋能案例-详情页
-->
<template>
<home-header></home-header>
<div class="assign-case-detail-page">
<!--详情页头部-->
<div class="assign-case-detail-page-header">
<div class="assign-case-detail-page-header-son">
<div
class="assign-case-detail-page-header-son-left"
:style="`background:url(${pictureFormat(dataFrom.name)})`"
></div>
<div class="assign-case-detail-page-header-son-right">
<div class="assign-case-detail-page-header-son-right-title">
{{ dataFrom.name }}
</div>
<div
class="assign-case-detail-page-header-son-right-click"
@click="clickToView(dataFrom.name)"
>
<span>点击查看</span>
<span></span>
</div>
</div>
</div>
</div>
<div class="assign-case-detail-page-content">
<div class="assign-case-detail-page-content-son">
<div class="assign-case-detail-page-content-left">
<div
class="assign-case-detail-page-content-left-border"
id="assign-case-detail-page-content-left-border-id"
>
<div
v-for="(item, index) in dataFrom.content"
:key="index"
@click="tabSwitch(item, index)"
:class="
tabName == item.title
? 'assign-case-detail-page-content-left-border-click'
: ''
"
>
{{ item.title }}
</div>
</div>
</div>
<div class="assign-case-detail-page-content-center">
<div
class="assign-case-detail-page-content-center-card"
v-for="(item, index) in dataFrom.content"
:key="index"
:id="'assign-case-detail-page-content-center-card' + index"
>
<div class="assign-case-detail-page-content-center-card-title">
{{ item.title }}
</div>
<div
class="assign-case-detail-page-content-center-card-description"
>
{{ item.description }}
<div v-if="item.descriptions">
<p
v-for="(
itemDescriptions, indexDescriptions
) in item.descriptions"
:key="indexDescriptions"
>
{{ itemDescriptions }}
</p>
</div>
</div>
</div>
</div>
<div class="assign-case-detail-page-content-right">
<div class="assign-case-detail-page-content-right-card">
<div class="assign-case-detail-page-content-right-card-title">
<span></span>
<span>其他案例</span>
</div>
<div class="assign-case-detail-page-content-right-card-content">
<div
class="assign-case-detail-page-content-right-card-content-card"
@click="routerClick(dataFrom.else.name)"
>
<p>{{ dataFrom.else.name }}</p>
<p>{{ dataFrom.else.time }}</p>
</div>
</div>
<div class="no-data">暂无更多</div>
</div>
</div>
</div>
</div>
<home-footer></home-footer>
</div>
</template>
<script setup>
import { ref, watch, onMounted } from 'vue'
import HomeHeader from '@/views/home/components/header'
import HomeFooter from '@/views/newHome/components/Footer'
import { useRouter } from 'vue-router'
const router = useRouter()
let val = router.currentRoute.value.query.val
const scrollTop = ref(0)
let dataFrom = ref({})
const domArr = ref([])
const selectNow = ref('')
let tabName = ref('案例背景')
console.log('val', val)
//
function pictureFormat(name) {
if (name == '道路保洁监管场景') {
return require('@/assets/assignCase/road.png')
} else {
return require('@/assets/assignCase/city.png')
}
}
//
const routerClick = (name) => {
val = name
router.push({ path: 'AssignCaseDetailPage', query: { val } })
}
const init = () => {
val = router.currentRoute.value.query.val
tabName.value = '案例背景'
if (val == '道路保洁监管场景') {
dataFrom.value = {
name: '道路保洁监管场景',
content: [
{
title: '案例背景',
description:
'融合市生态环境局出租车走航大气检测数据、城管局渣土车及环卫作业数据、住建局建筑工地数据、城市云脑视频监控等数据,结合时空大数据分析、预测预警分析等手段,对全市道路污染重点路段进行线索分析、作业辅导',
},
{
title: '业务挑战',
description:
'目前城市道路污染情况缺少主动发现手段,对渣土车及污染投诉事件,缺乏可参考线索等辅助执法手段',
},
{
title: '解决方案',
description:
'当道路发生污染(PM10数值>200)时,触发道路污染事件,并通过时空算法模型智能分析污染线索,如建筑工地扬尘外溢、渣土车遗撒、环卫作业问题等。',
descriptions: [
'系统实现预警事件与地图图层数据关联展示,当用户点击预警事件后,中间地图也会展示预警事件发生时段内的污染路段名称、污染状态,以及路段周边的工地、渣土车、环卫车轨迹及监控摄像头位置。同时屏幕右侧显示对应的工地、渣土车、摄像头列表信息。',
],
},
{
title: '案例成效',
description:
'实现城市运行智能监测,自动告警预警问题路段。为城管局渣土车执法提供线索,也可以快速定位疑似问题工地和渣土车。',
descriptions: [
'根据道路污染情况,对环卫作业进行调度部署、辅助决策,实现环卫作业调度智能化。',
],
},
],
else: {
name: '文明创城案例',
time: '2022-01-01 12:00',
},
}
} else {
dataFrom.value = {
name: '文明创城场景',
content: [
{
title: '案例背景',
description:
'通过融合视频共享平台、标准地址库、运营商手机信令等数据结合道路不洁、占道经营、沿街晾晒、违章停放、违规广告等视频AI算法打造文明创城专题场景。',
},
{
title: '业务挑战',
description:
'1)城管工作人员日常通过视频监控巡检创城工作时,需要一个一个查找视频,无法快速调取重点区域视频监控,工作效率较低。',
descriptions: [
'2)事件发生时,想要查看事件附近的视频监控进行核查时,要通过放大和拖拉拽地图查找事发地,无法快速定位。',
'3)由于破坏市容市貌事件类型多样,且需监测点位较多,工作人员有限,人工巡检不能做到及时发现。',
'4)城管重点关注人流密集的区域,但目前缺乏高效的监控手段。',
],
},
{
title: '解决方案',
description:
'1)通过对接自规局标准地址库,实现按地址搜索的功能,通过快速定位,可以让用户很快找到定位位置周边的视频监控。',
descriptions: [
'2)实现视频标签功能,给视频监控打标签后,用户通过在页面选择兴趣标签,地图显示相关视频。',
'3)结合运营商手机信令数据,实现人流热力图,辅助用户监控人流量密集的区域。',
'4)依托视频监控平台结合视频AI算法智能发现环境卫生、沿街晾晒、违章停放、占道经营、违规广告等破坏市容市貌的事件推送到城管案件系统中辅助城管局创城工作开展。',
],
},
{
title: '案例成效',
description:
'1)智能发现不文明事件,并快速定位附近的视频监控,辅助城管、环保等各单位开展创城工作;',
descriptions: [
'2)显示实时人流热力图,城市管理部门可快速定位人群密集区域,并通过查看周边摄像头进行实时监控;',
'3)通过视频定时截图功能,可截取便民摊点营业时间外的视频画面并智能分析,辅助城管执法单位及时发现问题进行处置,同时该功能也可以在工地及景区监管中发挥作用。',
],
},
],
else: {
name: '道路保洁监管场景',
time: '2022-01-01 12:00',
},
}
}
}
init()
//
watch(
() => router.currentRoute.value.query.val,
() => {
init()
},
{ immediate: true }
)
//tab
const tabSwitch = (item, index) => {
tabName.value = item.title
if (index != 0 && index != 3) {
let top =
document.querySelector(
'#assign-case-detail-page-content-center-card' + index
).offsetTop -
document.querySelector(
'#assign-case-detail-page-content-center-card' + (index - 1)
).offsetHeight
let view = document.getElementById(
'assign-case-detail-page-content-left-border-id'
)
view.style.top =
document.querySelector(
'#assign-case-detail-page-content-center-card' + (index - 1)
).offsetHeight + 'px'
console.log('view.style.top', view.style.top)
document.documentElement.scrollTop = top
document.body.scrollTop = top
} else if (index == 0) {
let top = 0
let view = document.getElementById(
'assign-case-detail-page-content-left-border-id'
)
document.documentElement.scrollTop = top
document.body.scrollTop = top
view.style.top = '490px'
} else if (index == 3) {
let top = document.querySelector(
'#assign-case-detail-page-content-center-card' + index
).offsetTop
let view = document.getElementById(
'assign-case-detail-page-content-left-border-id'
)
document.documentElement.scrollTop = top
document.body.scrollTop = top
view.style.top = '220px'
}
}
onMounted(() => {
// console.clear()
window.addEventListener('scroll', () => {
domArr.value = document.querySelectorAll(
'.assign-case-detail-page-content-center-card'
)
scrollTop.value =
document.documentElement.scrollTop || document.body.scrollTop
for (let i = 0; i < domArr.value.length; i++) {
if (i === 0) {
if (scrollTop.value <= domArr.value[i + 1].offsetTop - 50) {
selectNow.value = domArr.value[i].id
}
} else if (i == domArr.value.length - 1) {
if (scrollTop.value >= domArr.value[i].offsetTop - 50) {
selectNow.value = domArr.value[i].id
}
} else {
if (
scrollTop.value > domArr.value[i].offsetTop - 50 &&
scrollTop.value < domArr.value[i + 1].offsetTop - 50
) {
selectNow.value = domArr.value[i].id
}
}
}
})
})
//
const clickToView = (name) => {
if (name == '道路保洁监管场景') {
window.open('http://15.72.183.90:7001/#/road')
} else {
window.open('http://15.72.183.90:7001/#/city')
}
}
</script>
<style lang="less" scoped>
.assign-case-detail-page {
position: relative;
top: 0.64rem;
.assign-case-detail-page-header {
height: 3.7rem;
background: url('~@/assets/assignCase/assignCase_bg2.png') no-repeat;
background-position: center;
background-size: cover;
padding-top: 1.2rem;
.assign-case-detail-page-header-son {
width: 9rem;
height: 2.5rem;
border-radius: 0.01rem;
background: #fff;
margin: auto;
box-shadow: 5px 5px 20px #f2f3fb;
display: flex;
align-items: center;
padding: 0.2rem;
.assign-case-detail-page-header-son-left {
height: 2rem;
width: 2.9rem;
background-repeat: no-repeat;
background-position: center;
background-size: cover;
margin-right: 0.3rem;
}
.assign-case-detail-page-header-son-right {
.assign-case-detail-page-header-son-right-title {
color: #000000;
font-size: 0.36rem;
line-height: 0.36rem;
margin-bottom: 0.4rem;
}
.assign-case-detail-page-header-son-right-click {
color: #526aff;
font-size: 0.2rem;
line-height: 0.2rem;
cursor: pointer;
span {
display: inline-block;
}
span:first-child {
margin-right: 10px;
}
span:last-child {
width: 0.2rem;
height: 10px;
background: url('~@/assets/assignCase/assignCase_click.png')
no-repeat;
background-position: center;
background-size: cover;
}
}
}
}
}
.assign-case-detail-page-content {
padding-top: 0.6rem;
display: flex;
justify-content: center;
.assign-case-detail-page-content-son {
width: 13rem;
display: flex;
}
.assign-case-detail-page-content-left {
width: 1.67rem;
.assign-case-detail-page-content-left-border {
border-right: 1px #e5e5e5 solid;
padding-top: 5px;
padding-bottom: 5px;
position: fixed;
top: 4.9rem;
div {
height: 0.3rem;
padding-right: 0.7rem;
margin-bottom: 0.3rem;
font-size: 24px;
color: #666666;
line-height: 0.3rem;
cursor: pointer;
}
div:last-child {
margin-bottom: 0px;
}
.assign-case-detail-page-content-left-border-click {
padding-right: 0.66rem;
border-right: 4px #526aff solid;
color: #526aff;
}
}
}
.assign-case-detail-page-content-center {
width: 8.45rem;
padding: 0 0.4rem 1rem 0.35rem;
.assign-case-detail-page-content-center-card {
margin-bottom: 0.6rem;
.assign-case-detail-page-content-center-card-title {
font-size: 0.28rem;
color: #000000;
font-weight: bold;
line-height: 0.28rem;
margin-bottom: 0.35rem;
}
.assign-case-detail-page-content-center-card-description {
color: #333333;
font-size: 0.2rem;
line-height: 0.34rem;
}
}
}
.assign-case-detail-page-content-right {
width: 2.7rem;
height: 2.6rem;
display: inline-block;
.assign-case-detail-page-content-right-card {
width: 2.7rem;
height: 2.6rem;
border: 1px #e5e5e5 solid;
position: relative;
.assign-case-detail-page-content-right-card-title {
padding-left: 15px;
background: linear-gradient(
to right,
rgba(113, 132, 252, 0.8),
rgba(148, 163, 252, 0.8)
);
height: 0.64rem;
color: #fff;
font-size: 24px;
line-height: 0.64rem;
margin-bottom: 30px;
border-radius: 10px 10px 0 0;
span:first-child {
display: inline-block;
width: 15px;
height: 15px;
background: url('~@/assets/assignCase/assignCase_else.png')
no-repeat;
background-position: center;
background-size: cover;
margin-right: 15px;
}
}
.assign-case-detail-page-content-right-card-content {
padding: 0 20px;
border-radius: 0px 0px 10px 10px;
.assign-case-detail-page-content-right-card-content-card {
cursor: pointer;
border-bottom: 1px solid #ebebeb;
p:first-child {
font-size: 20px;
line-height: 20px;
margin-bottom: 20px;
color: #333;
}
p:last-child {
font-size: 18px;
line-height: 18px;
margin-bottom: 30px;
color: #999;
}
}
}
.no-data {
position: absolute;
bottom: 0.2rem;
font-size: 0.18rem;
color: #cccccc;
width: 2.3rem;
text-align: center;
}
}
}
}
}
</style>

View File

@ -0,0 +1,424 @@
<template>
<div class="box">
<div id="container">
<div class="banner"></div>
<div class="mainBox">
<div class="top">
<h1>赋能案例</h1>
<div></div>
<!-- <h3>Enabling Cases</h3> -->
</div>
<div class="navigation">
<div class="navigationMain">
<div class="top-title">
<div
v-for="(item, index) in titleName"
:key="index"
class="tabAll"
@click="changeCards(index)"
:class="{ tabAllActive: index == number }"
>
<span>{{ item.name }}</span>
</div>
</div>
<div class="tabClickRight" v-if="tabClickShow">
<div
class="tabClick"
:ref="txttype"
:class="hidetext == true ? 'hidetext' : ''"
>
<span v-for="(item, index) in tabClickData" :key="index">
{{ item.name }}
</span>
</div>
<a class="more" @click="lookmore(hidetext)">
{{ moretext }}
</a>
<i
class="moreLogo"
:class="hidetext == true ? 'moreLogoActive' : ''"
></i>
</div>
</div>
</div>
<main>
<div class="content">
<div
class="contenBox"
v-for="(item, index) in contenBox"
:key="index"
>
<img :src="item.photo || ''" alt="" />
<h3>{{ item.name }}</h3>
<p>
发布时间
<span>{{ item.time }}</span>
</p>
<div class="look" @click="lookContent(item.name)">查看详情</div>
</div>
<div class="contenBox contenBoxImg" v-if="contenBox.length < 3">
<img :src="hopeing" alt="" class="hopeingImg" />
<p>正在研发中...</p>
</div>
</div>
<div class="pagination">
<!-- 分页 -->
<span>{{ resourceTotal }}</span>
<a-pagination
v-model:current="currentPage"
v-model:pageSize="currentPageSize"
show-quick-jumper
:total="resourceTotal"
@change="pageChange"
/>
</div>
</main>
</div>
</div>
</div>
</template>
<script setup>
import { ref, onMounted } from 'vue'
// import { useStore } from 'vuex'
import { useRouter } from 'vue-router'
// import { pinyin } from 'pinyin-pro'
// import { Empty } from 'ant-design-vue'
const router = useRouter()
const contenBox = ref([
{
photo: require('@/assets/assignCase/road.png'),
name: '道路保洁监管场景',
time: '2022-01-01 12:00',
},
{
photo: require('@/assets/assignCase/city.png'),
name: '文明创城场景',
time: '2022-01-01 12:00',
},
{
photo: require('@/assets/assignCase/important.png'),
name: '重点区域监控平台',
time: '2022-01-01 12:00',
},
])
const hopeing = require('@/assets/assignCase/hopeing.png')
//
const resourceTotal = contenBox.value.length
// const resourceTotal = ref(15)
const currentPage = ref(1)
const currentPageSize = ref(3)
const pageChange = (val) => {
console.log(val)
currentPage.value = val
}
//
const titleName = ref([
{
name: '全部',
},
{
name: '按应用领域',
},
])
const tabClickData = ref([
{
name: '社会治安',
},
{
name: '城市管理',
},
{
name: '疫情防控',
},
{
name: '危化品管理',
},
{
name: '交通运输',
},
{
name: '森林防火',
},
{
name: '防汛抗旱',
},
{
name: '文化旅游',
},
{
name: '非煤矿山',
},
{
name: '医疗卫生',
},
{
name: '安全生产',
},
{
name: '生态环境',
},
{
name: '农村农业',
},
{
name: '市场监管',
},
{
name: '政务服务',
},
{
name: '其他',
},
])
const tabClickShow = ref(false)
const number = ref(0)
const changeCards = (val) => {
console.log(val)
number.value = val
if (val == 1) {
tabClickShow.value = true
} else {
tabClickShow.value = false
}
}
const moretext = ref('展开')
const hidetext = ref(false)
const lookmore = (val) => {
console.log(val)
if (val) {
hidetext.value = false
moretext.value = '展开'
} else {
hidetext.value = true
moretext.value = '收起'
}
}
onMounted(() => {})
//
const lookContent = (val) => {
router.push({ path: 'AssignCaseDetailPage', query: { val } })
}
</script>
<style scoped lang="less">
.box {
// overflow: hidden;
height: 100%;
}
#container {
position: relative;
.banner {
position: absolute;
width: 100%;
height: 400px;
background: url(../../../assets/assignCase/bg.png) no-repeat center;
}
.mainBox {
width: 100%;
// margin: 0 auto;
background: #f7f8fa;
}
.top {
width: 1350px;
margin: 0 auto;
height: 400px;
padding-top: 80px;
position: relative;
margin-top: 64px;
h1 {
font-size: 40px;
font-weight: 300;
line-height: 50px;
color: #ffffff;
}
div {
width: 76px;
height: 4px;
background: #ff8b55;
margin: 20px 0;
}
h3 {
font-weight: 300;
font-size: 26px;
color: #ffffff;
}
}
.navigation {
width: 100%;
// height: 80px;
line-height: 80px;
background: #ffffff;
.navigationMain {
width: 1350px;
margin: 0 auto;
display: flex;
.top-title {
display: flex;
.tabAll {
font-size: 22px;
color: #526aff;
margin-right: 35px;
cursor: pointer;
}
.tabAll:nth-child(2) {
margin-left: 35px;
margin-right: 60px;
}
.tabAllActive {
color: #999999;
}
}
.tabClickRight {
display: flex;
.more {
font-size: 22px;
color: #526aff;
}
.moreLogo {
display: inline-block;
width: 20px;
height: 20px;
background: url(../../../assets/assignCase/left.png) no-repeat
center;
margin-top: 30px;
transform: rotate(-90deg);
}
.moreLogoActive {
background: url(../../../assets/assignCase/left.png) no-repeat
center;
transform: rotate(90deg);
}
}
.tabClick {
height: 80px;
line-height: 80px;
width: 1000px;
overflow: hidden;
span {
font-size: 22px;
color: #333333;
margin-right: 30px;
cursor: pointer;
}
span:nth-of-type(8n) {
margin-right: 50px;
}
}
.hidetext {
height: unset;
overflow: unset;
line-height: 80px;
}
}
}
main {
position: relative;
z-index: 5;
// width: 1350px;
height: 100%;
margin: 0 auto;
.content {
width: 100%;
display: flex;
justify-content: center;
padding-top: 40px;
overflow: hidden;
.contenBox {
// width: 430px;
padding: 30px;
border: 1px solid #e4e6f5;
margin-right: 30px;
background: #ffffff;
border-radius: 6px;
box-shadow: 5px 5px 20px 0 #f2f3fb;
img {
// width: 370px;
height: 200px;
border-radius: 6px;
}
h3 {
margin: 30px 0 20px;
font-size: 28px;
color: #000000;
}
p {
font-size: 18px;
color: #999999;
}
.look {
width: 100px;
height: 36px;
line-height: 36px;
border: 1px solid #526aff;
color: #526aff;
border-radius: 6px;
font-size: 18px;
text-align: center;
cursor: pointer;
}
}
.contenBox:last-of-type {
margin-right: 0px;
}
.contenBoxImg {
display: flex;
flex-direction: column;
justify-content: center;
align-items: center;
.hopeingImg {
width: 178px;
height: 130px;
margin-bottom: 40px;
}
h3 {
font-size: 22px;
color: #999999;
}
}
}
.pagination {
padding: 60px 0 40px;
display: flex;
justify-content: center;
align-items: center;
span {
font-size: 18px;
color: #999999;
margin-right: 20px;
}
.ant-pagination {
margin-top: 0;
}
:deep(.ant-pagination-item) {
border-radius: 4px;
border: 1px solid #b2b2b2;
a {
color: #b2b2b2;
}
}
:deep(.ant-pagination-item:hover) {
background: #526aff;
border-color: #526aff;
a {
color: #ffffff;
}
}
:deep(.ant-pagination-item-active) {
background: #526aff;
border: 1px solid #526aff;
border-radius: 4px;
a {
color: #ffffff;
}
}
:deep(.ant-pagination-options-quick-jumper input) {
width: 32px;
}
}
}
}
</style>

View File

@ -0,0 +1,25 @@
<template>
<div>
<home-header></home-header>
<query-page></query-page>
<home-footer></home-footer>
</div>
</template>
<script>
import HomeHeader from '@/views/home/components/header'
import HomeFooter from '@/views/newHome/components/Footer'
import QueryPage from '@/views/assignCase/components/queryPage'
export default {
setup() {
return {}
},
components: {
HomeHeader,
HomeFooter,
QueryPage,
},
}
</script>
<style lang="scss" scoped></style>

View File

@ -2,7 +2,7 @@
* @Author: hisense.liangjunhua
* @Date: 2022-06-13 10:22:27
* @LastEditors: hisense.liangjunhua
* @LastEditTime: 2022-06-13 17:44:04
* @LastEditTime: 2022-06-14 11:06:06
* @Description: 算法上架
-->
<template>
@ -78,7 +78,15 @@
const data = ref({})
const refData = ref({})
const submitFlag = ref(true)
const dataFrom = ref({ infoList: [], delFlag: 0, type: '组件服务' })
const dataFrom = ref({
infoList: [],
delFlag: 0,
type: '组件服务',
deptId: '',
})
getUser().then((res) => {
dataFrom.value.deptId = res.data.data.deptId
})
const back = () => {
navList.value.forEach((val, index) => {
if (val.key === showView.value && index > 0) {

View File

@ -2,7 +2,7 @@
* @Author: hisense.liangjunhua
* @Date: 2022-06-13 10:22:27
* @LastEditors: hisense.liangjunhua
* @LastEditTime: 2022-06-13 17:44:41
* @LastEditTime: 2022-06-15 17:55:02
* @Description: 应用上架
-->
<template>
@ -34,6 +34,11 @@
:refData="refData"
:dataFrom="dataFrom"
></application-function-introduction>
<application-associated-components
v-else-if="showView === '关联组件'"
:refData="refData"
:dataFrom="dataFrom"
></application-associated-components>
<application-deployment-use
v-else-if="showView === '部署与应用'"
:refData="refData"
@ -55,6 +60,7 @@
<script setup>
import ApplicationEssentialInformation from '@/views/capacityOnTheShelf/components/ApplicationEssentialInformation.vue'
import ApplicationFunctionIntroduction from '@/views/capacityOnTheShelf/components/ApplicationFunctionIntroduction.vue'
import ApplicationAssociatedComponents from '@/views/capacityOnTheShelf/components/ApplicationAssociatedComponents.vue'
import ApplicationDeploymentUse from '@/views/capacityOnTheShelf/components/ApplicationDeploymentUse.vue'
import { ref, onBeforeUnmount } from 'vue'
import { useRouter } from 'vue-router'
@ -73,7 +79,15 @@
const data = ref({})
const refData = ref({})
const submitFlag = ref(true)
const dataFrom = ref({ infoList: [], delFlag: 0, type: '应用资源' })
const dataFrom = ref({
infoList: [],
delFlag: 0,
type: '应用资源',
deptId: '',
})
getUser().then((res) => {
dataFrom.value.deptId = res.data.data.deptId
})
const back = () => {
navList.value.forEach((val, index) => {
if (val.key === showView.value && index > 0) {
@ -280,7 +294,7 @@
}
.line {
margin-left: 10px;
width: 280px;
width: 140px;
height: 1px;
background: #999;
}

View File

@ -18,9 +18,7 @@
<a-radio-group
v-else-if="item.type == 'radio'"
v-model:value="item.note1"
:options="
item.name === '接口请求方式' ? plainOptions2 : plainOptions3
"
:options="item.options"
/>
<a-textarea
v-else-if="item.type == 'textArea'"
@ -48,86 +46,6 @@
tip="支持文件类型大小不超过100M"
></upload>
</div>
<!-- <div class="form">
<span>接口请求方式</span>
<a-radio-group
v-model:value="data.interfaceRequestMode"
:options="plainOptions2"
/>
</div>
<div class="form">
<span>是否支持试用</span>
<a-radio-group
v-model:value="data.supportTrial"
:options="plainOptions3"
/>
</div>
<div class="form">
<span>试用地址</span>
<a-input
v-model:value="data.trialAddress"
placeholder="请输入试用地址"
/>
</div>
<div class="form">
<span>试用描述</span>
<a-textarea
v-model:value="data.trialDescription"
:showCount="true"
:maxlength="200"
placeholder="请输入试用描述"
/>
</div> -->
<!-- <div class="form">
<span>技术文档</span>
<a-upload
v-model:file-list="fileList"
:action="`${baseURL}/upload`"
list-type="picture"
class="upload-list-inline"
:before-upload="beforeUpload"
>
<a-button>
<upload-outlined></upload-outlined>
上传文档
</a-button>
<span
style="
display: inline-block;
margin-left: 10px;
color: #999999;
font-size: 14px;
"
>
支持MP3 类型文件大小不超过100M
</span>
</a-upload>
</div>
<div class="form">
<span>试用效果图</span>
<a-upload
v-model:file-list="fileList2"
:action="`${baseURL}/upload`"
list-type="picture"
class="upload-list-inline"
:before-upload="beforeUpload"
>
<a-button>
<upload-outlined></upload-outlined>
图片上传
</a-button>
<span
style="
display: inline-block;
margin-left: 10px;
color: #999999;
font-size: 14px;
"
>
支持MP3 类型文件大小不超过100M
</span>
</a-upload>
</div> -->
</div>
</template>
<template v-else-if="title.name == '计费标准信息'">
@ -167,12 +85,14 @@
</div>
<div class="form">
<span>计费标准</span>
<!-- :formatter="limitNumber"
:parser="limitNumber" -->
<a-input-number
v-model:value="price"
:min="0"
:max="9999"
:formatter="limitNumber"
:parser="limitNumber"
:step="0.01"
string-mode
placeholder="请填写计费标准,单位为元"
/>
</div>
@ -248,6 +168,7 @@
import mybus from '@/myplugins/mybus'
import upload from '@/views/components/upload'
import { message } from 'ant-design-vue'
import { getCategoryTreePage } from '@/api/personalCenter'
// import { baseURL } from '@/config'
const props = defineProps({
refData: { type: Object, default: null },
@ -256,11 +177,32 @@
imgList: { type: Array, default: null },
})
const data = ref({
list: props.refData.children.filter((item) => item.name === '使用方式')[0]
.children,
list: [],
freightBasis: [],
commonProblem: [],
})
let arr = props.refData.children.filter((item) => item.name !== '常见问题')
data.value.list = []
arr.forEach((val) => {
val.children.forEach((item) => {
if (item.isLinkToDic === 'true' && item.linkValue) {
getCategoryTreePage({
page: 1,
limit: 20,
dictTypeId: item.linkValue,
deFlage: 0,
}).then((res) => {
// console.log(res.data.data)
if (item.type === 'radio') {
item.options = res.data.data.list.map((radio) => radio.dictLabel)
}
data.value.list.push(item)
})
} else {
data.value.list.push(item)
}
})
})
if (props.dataFrom) {
console.log(props.dataFrom, data.value.list)
props.dataFrom.infoList.forEach((item) => {
@ -277,17 +219,15 @@
const question = ref('')
const answer = ref('')
const plainOptions = ['一次性买断', '按调用次数', '按并发路数', '按年计费']
const plainOptions2 = ['GET', 'POST']
const plainOptions3 = ['是', '否']
const limitNumber = (value) => {
if (typeof value === 'string') {
return !isNaN(Number(value)) ? value.replace(/\./g, '') : 0
} else if (typeof value === 'number') {
return !isNaN(value) ? String(value).replace(/\./g, '') : 0
} else {
return 0
}
}
// const limitNumber = (value) => {
// if (typeof value === 'string') {
// return !isNaN(Number(value)) ? value.replace(/\./g, '') : 0
// } else if (typeof value === 'number') {
// return !isNaN(value) ? String(value).replace(/\./g, '') : 0
// } else {
// return 0
// }
// }
const add = () => {
if (type.value.length > 0 && price.value > 0 && desc.value.length > 0) {
data.value.freightBasis.push({

View File

@ -10,7 +10,7 @@
<div
v-for="(item, index) in dataList"
:key="item.attrType"
:style="styleFunction(item.type)"
:style="styleFunction(item.type, item.attrType)"
>
<a-form-item :label="item.attrType" v-if="item.type == 'input'">
<a-input
@ -140,9 +140,17 @@
let applicationDataList = ref([])
let indexSwitch = ref()
//
function styleFunction(type) {
function styleFunction(type, attrType) {
if (type == 'select' || type == 'radio') {
return 'display: inline-block;width: 50%;'
if (attrType == '服务商' || attrType == '服务商联系人') {
if (attrType == '服务商联系人') {
return 'display: inline-block;width: 45%;margin-left: 30px;'
} else {
return 'display: inline-block;width: 45%;'
}
} else {
return 'display: inline-block;width: 50%;'
}
}
}
const props = defineProps({

View File

@ -32,7 +32,7 @@
</div>
</div>
</div>
<div class="add">添加更多算法优势</div>
<div class="add">添加更多应用场景</div>
<div class="name">
<span>应用场景名称</span>
<a-input
@ -47,7 +47,7 @@
v-model:value="value2"
:showCount="true"
:maxlength="200"
placeholder="请填写应用场景名称+应用场景场景+应用场景点+应用场景作用"
placeholder="请填写应用场景名称+应用场景场景+应用场景点+应用场景作用"
/>
</div>
<div class="dec upload" :key="showKey">

View File

@ -0,0 +1,247 @@
<template>
<div class="application-associated-components">
<div class="title">
<div></div>
<div>{{ props.refData.name }}</div>
<div></div>
</div>
<div class="main">
<div class="items" v-show="data.length > 0">
<div class="item" v-for="(val, index) in data" :key="index">
<p>
<span>关联组件-{{ index + 1 }}</span>
<span></span>
</p>
<p>
<span>关联组件名称</span>
<span>{{ val.name }}</span>
</p>
<p>
<span>关联组件描述</span>
<span>{{ val.desc }}</span>
</p>
<p>
<span>关联组件地址</span>
<span>{{ val.url }}</span>
</p>
<div class="del">
<i class="delImg" @click="del(index)"></i>
<div @click="del(index)">删除</div>
</div>
</div>
</div>
<div class="add">添加更多关联组件</div>
<div class="name">
<span>关联组件名称</span>
<a-input
v-model:value="value"
:maxlength="24"
placeholder="请填写关联组件名称_关联组件描述热词,不超过24个字符"
/>
</div>
<div class="dec">
<span>关联组件描述</span>
<a-textarea
v-model:value="value2"
:showCount="true"
:maxlength="200"
placeholder="请填写关联组件名称+关联组件场景+关联组件亮点+关联组件作用"
/>
</div>
<div class="dec upload" :key="showKey">
<span>关联组件地址</span>
<a-input
v-model:value="value3"
:maxlength="50"
placeholder="请填写关联组件地址,不超过50个字符"
/>
</div>
<div class="submit">
<a-button type="primary" @click="add()">提交</a-button>
</div>
</div>
</div>
</template>
<script setup>
import { ref, defineProps } from 'vue'
import mybus from '@/myplugins/mybus'
import { message } from 'ant-design-vue'
const props = defineProps({
refData: { type: Object, default: null },
dataFrom: { type: Array, default: null },
})
const value = ref('')
const value2 = ref('')
const value3 = ref('')
const data = ref([])
const showKey = ref(0)
// const fileList = ref([])
if (props.dataFrom) {
console.log(props.dataFrom)
props.dataFrom.infoList.forEach((item) => {
if (item.attrType === props.refData.name) {
data.value = JSON.parse(item.attrValue)
}
})
}
const add = () => {
if (
value.value.length > 0 &&
value2.value.length > 0 &&
value3.value.length > 0
) {
data.value.push({
name: value.value,
desc: value2.value,
url: value3.value,
})
mybus.emit('chageDataFrom', {
attrType: props.refData.name,
attrValue: JSON.stringify(data.value),
delFlag: 0,
})
value.value = ''
value2.value = ''
value3.value = ''
showKey.value++
} else {
message.warning('请填写完整')
}
}
const del = (index) => {
data.value.splice(index, 1)
mybus.emit('chageDataFrom', {
attrType: props.refData.name,
attrValue: JSON.stringify(data.value),
delFlag: 0,
})
}
</script>
<style lang="less" scoped>
.application-associated-components {
height: 680px;
overflow: scroll;
display: flex;
flex-direction: column;
align-items: center;
padding: 50px 100px 25px;
& > div {
width: 100%;
}
.title {
color: #333333;
font-size: 22px;
display: flex;
align-items: center;
margin-bottom: 25px;
div:first-child,
div:last-child {
width: 265px;
height: 1px;
background: #f0f0f0;
}
div:nth-child(2) {
margin: 0 30px;
}
}
.main {
margin-top: 25px;
.items {
background: #fafafa;
padding: 10px;
p {
display: flex;
justify-content: space-between;
span:nth-of-type(1) {
width: 200px;
}
span:nth-of-type(2) {
width: 100%;
font-weight: 600;
}
}
p:nth-of-type(1) > span:nth-of-type(1) {
font-size: 18px;
font-weight: 600;
}
.del {
display: flex;
justify-content: flex-end;
align-items: center;
.delImg {
cursor: pointer;
display: inline-block;
width: 16px;
height: 18px;
background: url(~@/assets/home/sf_del.png) no-repeat;
margin-right: 5px;
}
div {
cursor: pointer;
}
}
}
.add {
margin-top: 10px;
font-size: 16px;
color: #007efb;
}
.name,
.dec {
margin-top: 20px;
display: flex;
justify-content: flex-start;
span {
width: 120px;
}
:deep(.ant-input) {
resize: none;
width: 570px;
}
:deep(.ant-input-textarea) {
width: 570px;
}
:deep(.ant-radio-group) {
width: 570px;
}
:deep(.ant-input-number) {
width: 200px;
}
.ant-btn {
width: 100px;
height: 30px;
text-align: center;
background: #d9ebff;
color: #0087ff;
border: 1px solid #0087ff;
border-radius: 6px;
}
}
.upload span:nth-of-type(2) {
width: unset;
}
.submit {
margin-top: 40px;
display: flex;
justify-content: flex-end;
.ant-btn {
width: 80px;
height: 28px;
text-align: center;
background: #d9ebff;
color: #0087ff;
border: 1px solid #0087ff;
border-radius: 6px;
}
}
}
}
:deep(.ant-image-img) {
width: 100%;
height: 100%;
object-fit: contain;
}
// .application-associated-components::-webkit-scrollbar {
// display: none;
// }
</style>

View File

@ -151,8 +151,16 @@
let plainOptions = ref([])
//
function styleFunction(type, attrType) {
if (type == 'select' || type == 'radio' || attrType == '部门联系人电话') {
return 'display: inline-block;width: 45%;'
if (type == 'select' || type == 'radio') {
if (attrType == '部门联系人' || attrType == '归属部门') {
if (attrType == '部门联系人') {
return 'display: inline-block;width: 45%;margin-left: 30px;'
} else {
return 'display: inline-block;width: 45%;'
}
} else {
return 'display: inline-block;width: 50%;'
}
}
}
const props = defineProps({

View File

@ -47,7 +47,7 @@
v-model:value="value2"
:showCount="true"
:maxlength="200"
placeholder="请填写功能名称+功能场景+功能点+功能作用"
placeholder="请填写功能名称+功能场景+功能点+功能作用"
/>
</div>
<div class="dec upload" :key="showKey">

View File

@ -2,7 +2,7 @@
* @Author: hisense.liangjunhua
* @Date: 2022-06-08 11:32:22
* @LastEditors: hisense.liangjunhua
* @LastEditTime: 2022-06-13 12:01:31
* @LastEditTime: 2022-06-14 10:39:37
* @Description: 算法详情页
-->
<template>
@ -69,16 +69,16 @@
</div>
</template>
<script setup>
import AlgorithmTopDetails from '@/views/detailsAll/components/AlgorithmTopDetails.vue'
import AlgorithmNavigation from '@/views/detailsAll/components/AlgorithmNavigation.vue'
import AlgorithmDisplay from '@/views/detailsAll/components/AlgorithmDisplay.vue'
import AlgorithmAdvantage from '@/views/detailsAll/components/AlgorithmAdvantage.vue'
import AlgorithmOnTrial from '@/views/detailsAll/components/AlgorithmOnTrial.vue'
import AlgorithmApplicationScenarios from '@/views/detailsAll/components/AlgorithmApplicationScenarios'
import AlgorithmApplicationCase from '@/views/detailsAll/components/AlgorithmApplicationCase'
import AlgorithmUsageMode from '@/views/detailsAll/components/AlgorithmUsageMode' //使
import AlgorithmChargingStandard from '@/views/detailsAll/components/AlgorithmChargingStandard' //
import AlgorithmCommonProblem from '@/views/detailsAll/components/AlgorithmCommonProblem' //
import AlgorithmTopDetails from '@/views/detailsAll/components/Algorithm/AlgorithmTopDetails.vue'
import AlgorithmNavigation from '@/views/detailsAll/components/Algorithm/AlgorithmNavigation.vue'
import AlgorithmDisplay from '@/views/detailsAll/components/Algorithm/AlgorithmDisplay.vue'
import AlgorithmAdvantage from '@/views/detailsAll/components/Algorithm/AlgorithmAdvantage.vue'
import AlgorithmOnTrial from '@/views/detailsAll/components/Algorithm/AlgorithmOnTrial.vue'
import AlgorithmApplicationScenarios from '@/views/detailsAll/components/Algorithm/AlgorithmApplicationScenarios'
import AlgorithmApplicationCase from '@/views/detailsAll/components/Algorithm/AlgorithmApplicationCase'
import AlgorithmUsageMode from '@/views/detailsAll/components/Algorithm/AlgorithmUsageMode' //使
import AlgorithmChargingStandard from '@/views/detailsAll/components/Algorithm/AlgorithmChargingStandard' //
import AlgorithmCommonProblem from '@/views/detailsAll/components/Algorithm/AlgorithmCommonProblem' //
import { ref, onMounted, onBeforeUnmount, reactive } from 'vue'
import { useRouter } from 'vue-router'
import { updateVisits, selectOne } from '@/api/home'
@ -166,6 +166,6 @@
left: 0;
}
.fixed2 > div:nth-of-type(3) {
margin-top: 84px;
margin-top: 0.84rem;
}
</style>

View File

@ -0,0 +1,163 @@
<!--
* @Author: hisense.liangjunhua
* @Date: 2022-06-08 11:32:22
* @LastEditors: hisense.liangjunhua
* @LastEditTime: 2022-06-15 18:10:36
* @Description: 应用详情页
-->
<template>
<div class="application-details" :class="{ fixed2: scrollTop >= 600 }">
<!-- 头部基本信息 -->
<application-top-details
:dataList="dataList.data"
></application-top-details>
<!-- 导航 -->
<application-navigation
:dataList="dataList.data"
:class="{ fixed: scrollTop >= 600 }"
:selectNow="selectNow"
></application-navigation>
<!-- 应用展示 视频 -->
<application-presentation
:dataList="dataList.data"
id="application-presentation"
class="scrollBox"
></application-presentation>
<!-- 关联组件 -->
<application-associated-components
:dataList="dataList.data"
id="application-associated-components"
class="scrollBox"
></application-associated-components>
<!-- 功能介绍-->
<application-function-intorduction
:dataList="dataList.data"
id="function-introduction"
class="scrollBox"
></application-function-intorduction>
<!-- 使用能力 -->
<application-ability-toise
:dataList="dataList.data"
id="ability-to-use"
class="scrollBox"
></application-ability-toise>
<!-- 部署与安全-->
<application-deployment-and-security
:dataList="dataList.data"
id="deployment-and-security"
class="scrollBox"
></application-deployment-and-security>
<!-- 归属部门与服务商-->
<application-owning-department-and-service-provider
:dataList="dataList.data"
id="department-and-service-provider"
class="scrollBox"
></application-owning-department-and-service-provider>
<!-- 常见问题-->
<application-common-problem
:dataList="dataList.data"
id="common-problem"
class="scrollBox"
></application-common-problem>
</div>
</template>
<script setup>
import ApplicationAbilityToise from '@/views/detailsAll/components/Application/ApplicationAbilityToise.vue'
import ApplicationAssociatedComponents from '@/views/detailsAll/components/Application/ApplicationAssociatedComponents.vue'
import ApplicationOwningDepartmentAndServiceProvider from '@/views/detailsAll/components/Application/ApplicationOwningDepartmentAndServiceProvider.vue'
import ApplicationFunctionIntorduction from '@/views/detailsAll/components/Application/ApplicationFunctionIntorduction.vue'
import ApplicationDeploymentAndSecurity from '@/views/detailsAll/components/Application/ApplicationDeploymentAndSecurity.vue'
import ApplicationTopDetails from '@/views/detailsAll/components/Application/ApplicationTopDetails.vue'
import ApplicationNavigation from '@/views/detailsAll/components/Application/ApplicationNavigation.vue'
import ApplicationPresentation from '@/views/detailsAll/components/Application/ApplicationPresentation.vue'
import ApplicationCommonProblem from '@/views/detailsAll/components/Application/ApplicationCommonProblem' //
import { ref, onMounted, onBeforeUnmount, reactive } from 'vue'
import { useRouter } from 'vue-router'
import { updateVisits, selectOne } from '@/api/home'
import mybus from '@/myplugins/mybus'
const router = useRouter()
const scrollTop = ref(0)
const domArr = ref([])
const selectNow = ref('')
const dataList = reactive({ data: {} })
const id = router.currentRoute.value.query.id
const obj = JSON.parse(window.sessionStorage.getItem('preview'))
document.documentElement.style.transition = 'all 0.3s ease'
document.documentElement.scrollTop = 0
document.body.style.transition = 'all 0.3s ease'
document.body.scrollTop = 0
mybus.on('flyToView', (id) => {
let top = document.querySelector('#' + id).offsetTop - 50
// console.log(top, document.querySelector('#' + id).offsetTop)
document.documentElement.scrollTop = top
document.body.scrollTop = top
})
onMounted(() => {
// console.clear()
window.addEventListener('scroll', () => {
domArr.value = document.querySelectorAll('.scrollBox')
scrollTop.value =
document.documentElement.scrollTop || document.body.scrollTop
for (let i = 0; i < domArr.value.length; i++) {
if (i === 0) {
if (scrollTop.value <= domArr.value[i + 1].offsetTop - 50) {
selectNow.value = domArr.value[i].id
}
} else if (i == domArr.value.length - 1) {
if (scrollTop.value >= domArr.value[i].offsetTop - 50) {
selectNow.value = domArr.value[i].id
}
} else {
if (
scrollTop.value > domArr.value[i].offsetTop - 50 &&
scrollTop.value < domArr.value[i + 1].offsetTop - 50
) {
selectNow.value = domArr.value[i].id
}
}
}
})
})
const init = (id) => {
if (id) {
selectOne(id).then((res) => {
// console.clear()
dataList.data = res.data.data
console.log('初始化详情页=========================>', dataList.data)
const arrList = ref([])
arrList.value = JSON.parse(window.sessionStorage.getItem('visits'))
if (arrList.value && arrList.value.indexOf(id) === -1) {
arrList.value.push(id)
updateVisits({
id: res.data.data.id,
visits: res.data.data.visits || '0',
}).then(() => {
window.sessionStorage.setItem(
'visits',
JSON.stringify(arrList.value)
)
})
}
})
} else if (obj) {
dataList.data = obj
console.log('预览==============', obj)
}
}
init(id)
onBeforeUnmount(() => {
mybus.off('flyToView')
})
</script>
<style lang="less" scoped>
.fixed {
position: fixed;
z-index: 2000;
top: 0;
left: 0;
}
.fixed2 > div:nth-of-type(3) {
margin-top: 0.84rem;
}
</style>

View File

@ -60,12 +60,45 @@
obj.attrValue = JSON.parse(obj.attrValue)
// dataFrom.value = obj
obj.attrValue.map((item) => {
let params = {
title: item.type,
content: item.desc,
value: item.price,
time: '/年起',
unit: '¥',
let params = {}
switch (item.type) {
case '一次性买断':
params = {
title: item.type,
content: item.desc,
value: item.price,
time: '/元',
unit: '¥',
}
break
case '按调用次数':
params = {
title: item.type,
content: item.desc,
value: item.price,
time: '/次',
unit: '¥',
}
break
case '按并发路数':
params = {
title: item.type,
content: item.desc,
value: item.price,
time: '/路',
unit: '¥',
}
break
case '按年计费':
params = {
title: item.type,
content: item.desc,
value: item.price,
time: '/年',
unit: '¥',
}
break
}
dataFrom.value.push(params)
})

View File

@ -2,7 +2,7 @@
* @Author: hisense.liangjunhua
* @Date: 2022-06-08 14:54:01
* @LastEditors: hisense.liangjunhua
* @LastEditTime: 2022-06-13 15:26:56
* @LastEditTime: 2022-06-15 18:32:23
* @Description: 算法详情页导航
-->
<template>
@ -93,6 +93,10 @@
item.show = true
}
})
console.log(
'props.dataList.infoList==============>',
navList.value.filter((item) => item.name === list.value[0])
)
select.value = navList.value.filter(
(item) => item.name === list.value[0]
)[0].key
@ -133,9 +137,11 @@
item.show = true
}
})
select.value = navList.value.filter(
(item) => item.name === list.value[0]
)[0].key
if (list.value.length > 0) {
select.value = navList.value.filter(
(item) => item.name === list.value[0]
)[0].key
}
console.log('11111111111111111111111111', list.value, navList.value)
}
}

View File

@ -10,9 +10,13 @@
<div class="left">
<div class="top">
<span class="name">{{ props.dataList.name }}</span>
<span class="label">{{ props.dataList.type }}</span>
<span class="label">{{ props.dataList.shareType }}</span>
<span class="label">{{ props.dataList.shareCondition }}</span>
<div class="label-content">
<p class="lable-father">
<span class="label">{{ props.dataList.type }}</span>
<span class="label">{{ props.dataList.shareType }}</span>
<span class="label">{{ props.dataList.shareCondition }}</span>
</p>
</div>
<!-- <span class="label">免费</span> -->
</div>
<div class="main">
@ -49,7 +53,7 @@
})
const router = useRouter()
const applicationArea = ref('')
//
//
const addShoppingCart = () => {
console.log('加入申购车==================>', props.dataList)
sgcInsert({
@ -62,7 +66,7 @@
mybus.emit('getSgcNum')
})
}
//
//
function toView() {
// window.open(newpage.href, '_blank')
router.push({
@ -106,8 +110,9 @@
display: flex;
justify-content: center;
.left {
width: 700px;
width: 7.2rem;
color: #fff;
margin-right: 0.8rem;
.top {
display: flex;
align-items: center;
@ -115,13 +120,22 @@
font-size: 14px;
}
.name {
max-width: 330px;
overflow: hidden;
text-overflow: ellipsis;
// max-width: 330px;
// overflow: hidden;
// text-overflow: ellipsis;
white-space: nowrap;
font-size: 40px;
margin-right: 20px;
}
.label-content {
position: relative;
}
.lable-father {
position: absolute;
min-width: 2.5rem;
right: -2.5rem;
top: 0;
}
.label {
padding: 1px 10px;
margin-right: 10px;

View File

@ -62,6 +62,7 @@
<script setup>
import DetalsTitle from '@/views/detailsAll/components/DetalsTitle'
import { pinyin } from 'pinyin-pro'
import { ref, defineProps, watch } from 'vue'
let dataFrom = ref({
title: '使用方式',
@ -151,12 +152,20 @@
}
)
function technical() {
console.log('dataFrom.value.link', dataFrom.value.link)
window.open(
window.SITE_CONFIG.previewUrl +
'hisense_office/onlinePreview?url=' +
btoa(encodeURI(dataFrom.value.link))
)
//
const type = pinyin(props.dataList.type, {
pattern: 'initial',
}).replace(/\s*/g, '')
//
const id = props.dataList.id
window.open(window.SITE_CONFIG.frontUrl + type + '/' + id + '.md', '_blank')
// console.log('dataFrom.value.link', dataFrom.value.link)
// window.open(
// window.SITE_CONFIG.previewUrl +
// 'hisense_office/onlinePreview?url=' +
// btoa(encodeURI(dataFrom.value.link))
// )
}
</script>

View File

@ -9,7 +9,7 @@
<a-image
:width="510"
:height="340"
src="https://zos.alipayobjects.com/rmsportal/jkjgkEfvpUPVyRjUImniVslZfWPnJuuZ.png"
:src="responseUrl"
/>
<a-upload
v-model:file-list="fileList"
@ -76,43 +76,63 @@
</div>
</template>
<script setup>
import { ref } from 'vue'
// import { paddleocr } from '@/api/file'
import { ref, onMounted } from 'vue'
import { paddleocr } from '@/api/file'
import { message } from 'ant-design-vue'
const uploadUrl = window.SITE_CONFIG.apiURL + '/upload'
let fileList = ref([])
// const responseUrl = ref('')
const imageResult = ref('')
const imageResult0 = ref('')
const imageResult1 = ref('')
const menuOpenKeys2 = ref(['全文还原'])
// const checkImage = () => {
// getUrlBase64(responseUrl.value, 'png', (base64) => {
// console.log('1111111', base64)
// const param = {
// img: base64.split('base64,')[1],
// }
// paddleocr(param).then((res) => {
// // wordValue.value = res.data
// console.log('1111', res.data)
// // imageResult.value = res.data.output
// // imageResult0.value = res.data.output
// // imageResult1.value = res.data.output
// })
// })
// }
// const getUrlBase64 = (url, ext, callback) => {
// var canvas = document.createElement('canvas') //canvas DOM
// var ctx = canvas.getContext('2d')
// var img = new Image()
// img.crossOrigin = 'Anonymous'
// img.src = url
// img.onload = function () {
// canvas.height = img.height //,
// canvas.width = img.width //
// ctx.drawImage(img, 0, 0, img.width, img.height) //
// var dataURL = canvas.toDataURL('image/' + ext)
// callback.call(this, dataURL) //Base64
// canvas = null
// }
// }
let responseUrl = ref('static/image/test.jpg')
const handleChange = (info) => {
debugger;
if (info.file.status !== 'uploading') {
console.log(info.file, info.fileList)
}
if (info.file.status === 'done') {
message.success(`${info.file.name} file uploaded successfully`)
responseUrl.value = info.file.response.data
checkImage()
} else if (info.file.status === 'error') {
message.error(`${info.file.name} file upload failed.`)
}
}
const checkImage = () => {
getUrlBase64(responseUrl.value, 'jpg', (base64) => {
console.log('1111111', base64)
const param = {
img: base64.split('base64,')[1],
}
paddleocr(param).then((res) => {
// wordValue.value = res.data
console.log('1111', res.data)
imageResult.value = res.data.output
imageResult0.value = res.data.output
imageResult1.value = res.data.output
})
})
}
const getUrlBase64 = (url, ext, callback) => {
var canvas = document.createElement('canvas') //canvas DOM
var ctx = canvas.getContext('2d')
var img = new Image()
img.crossOrigin = 'Anonymous'
img.src = url
img.onload = function () {
canvas.height = img.height //,
canvas.width = img.width //
ctx.drawImage(img, 0, 0, img.width, img.height) //
var dataURL = canvas.toDataURL('image/' + ext)
callback.call(this, dataURL) //Base64
canvas = null
}
}
onMounted(() => {
checkImage()
})
</script>
<style lang="less" scoped>
.evaluate3 {

View File

@ -0,0 +1,136 @@
<!--使用能力-->
<template>
<div class="application-ability-toise" v-if="flase">
<div class="title">
<DetalsTitle
:title="dataFrom.title"
:type="dataFrom.englishTitle"
></DetalsTitle>
</div>
<div class="content">
<div v-for="(item, index) in dataFrom.content" :key="index" class="card">
<div class="card-title">{{ item.title }}</div>
<div class="card-content">
<div
v-for="(cardContentItem, cardContentIndex) in item.children"
:key="cardContentIndex"
class="card-content-bottom"
>
<span></span>
{{ cardContentItem }}
</div>
</div>
</div>
</div>
</div>
</template>
<script setup>
import { ref } from 'vue'
import DetalsTitle from '@/views/detailsAll/components/DetalsTitle'
let dataFrom = ref({
title: '使用能力',
englishTitle: 'ABILITY',
content: [
{
title: '组件服务',
children: [
'能力名称一',
'能力名称二',
'能力名称三',
'能力名称四',
'能力名称一',
'能力名称一',
'能力名称一',
'能力名称八',
],
},
{
title: '数据资源',
children: [
'能力名称一',
'能力名称二',
'能力名称三',
'能力名称四',
'能力名称一',
'能力名称一',
'能力名称一',
'能力名称八',
],
},
{
title: '基础设施',
children: [
'能力名称一',
'能力名称二',
'能力名称三',
'能力名称四',
'能力名称一',
'能力名称一',
'能力名称一',
'能力名称八',
],
},
],
})
</script>
<style lang="less" scoped>
.application-ability-toise {
padding: 1.4rem 0 1rem;
display: flex;
flex-direction: column;
align-items: center;
background: #f7f8fa;
.title {
margin-bottom: 0.4rem;
}
.content {
display: flex;
width: 13rem;
.card {
display: flex;
flex-direction: column;
width: 4.2rem;
align-items: space-between;
padding: 0.3rem 0.35rem 0.3rem 0.35rem;
background: #ffffff;
margin-right: 0.2rem;
border: 0.01rem #e4e6f5 solid;
border-radius: 0.1rem;
.card-title {
margin: auto;
width: 1.3rem;
height: 0.45rem;
font-size: 0.22rem;
color: #917567;
background: url('~@/assets/detailsAll/yy_bg1.png') no-repeat;
background-size: 100%;
text-align: center;
line-height: 0.45rem;
}
.card-content {
display: grid;
grid-template-columns: 1fr 1fr;
.card-content-bottom {
text-align: center;
margin-top: 0.3rem;
color: #666;
font-size: 0.18rem;
span {
display: inline-block;
width: 0.12rem;
height: 0.12rem;
margin-right: 0.1rem;
background: url('~@/assets/detailsAll/yy_dian.png') no-repeat;
background-size: 100%;
}
}
}
}
.card:nth-child(3n + 3) {
margin-right: 0;
}
}
}
</style>

View File

@ -0,0 +1,150 @@
<!--
* @Author: hisense.liangjunhua
* @Date: 2022-06-08 16:06:10
* @LastEditors: hisense.liangjunhua
* @LastEditTime: 2022-06-15 20:44:47
* @Description: 关联组件
-->
<template>
<div class="application-associated-components" v-if="flag">
<detals-title title="关联组件" type="RELEVANCE"></detals-title>
<div class="main">
<div class="top">
<div v-for="val in data" :key="val.id" class="item">
<div class="icon" :class="val.icon"></div>
<div class="title" @click="goToView(val.url)">{{ val.title }}</div>
<a-tooltip>
<template #title>{{ val.text }}</template>
<div class="text">{{ val.text }}</div>
</a-tooltip>
</div>
</div>
<div class="bottom"></div>
</div>
</div>
</template>
<script setup>
import { ref, defineProps, watch } from 'vue'
import DetalsTitle from '@/views/detailsAll/components/DetalsTitle.vue'
const data = ref([])
const props = defineProps({
dataList: { type: Object, default: null },
})
const flag = ref(true)
const goToView = (url) => {
if (url) {
console.log(url)
window.open(url, '_blank')
}
}
if (props.dataList.infoList) {
let obj = props.dataList.infoList.filter(
(item) => item.attrType === '关联组件'
)[0]
if (!obj) {
flag.value = false
} else {
data.value = []
let arr = JSON.parse(obj.attrValue)
if (arr.length > 3) {
//
arr = arr.splice(0, 3)
}
arr.forEach((item, index) => {
data.value.push({
title: item.name,
text: item.desc,
url: item.url,
icon: 'icon1',
id: index,
})
})
}
}
watch(
() => props.dataList,
(val) => {
if (val) {
let obj = val.infoList.filter((item) => item.attrType === '关联组件')[0]
if (!obj) {
flag.value = false
} else {
data.value = []
let arr = JSON.parse(obj.attrValue)
if (arr.length > 3) {
//
arr = arr.splice(0, 3)
}
arr.forEach((item, index) => {
data.value.push({
title: item.name,
text: item.desc,
url: item.url,
icon: 'icon1',
id: index,
})
})
}
}
}
)
</script>
<style lang="less" scoped>
.application-associated-components {
padding: 100px 300px 60px;
.main {
margin-top: 40px;
.top {
display: flex;
justify-content: space-around;
align-items: center;
.item {
width: 424px;
padding: 35px;
display: flex;
flex-direction: column;
align-items: center;
border: 1px solid #e4e6f5;
border-radius: 10px;
margin-left: 20px;
.icon {
width: 82px;
height: 82px;
}
.icon1 {
background: url('~@/assets/detailsAll/sf_icon1.png') no-repeat;
background-size: 100%;
}
.icon2 {
background: url('~@/assets/detailsAll/sf_icon2.png') no-repeat;
background-size: 100%;
}
.icon3 {
background: url('~@/assets/detailsAll/sf_icon3.png') no-repeat;
background-size: 100%;
}
.title {
font-size: 22px;
margin-top: 25px;
text-align: center;
}
.text {
height: 78px;
font-size: 18px;
line-height: 26px;
margin-top: 15px;
color: #999;
overflow: hidden;
text-overflow: ellipsis;
display: -webkit-box;
-webkit-line-clamp: 3;
-webkit-box-orient: vertical;
}
}
.item:nth-of-type(1) {
margin-left: 0;
}
}
}
}
</style>

View File

@ -0,0 +1,123 @@
<template>
<!-- 常见问题 -->
<div class="cpmmon-problem" v-if="flag">
<div class="title">
<DetalsTitle title="常见问题" type="Q&A"></DetalsTitle>
</div>
<div class="content">
<div v-for="(item, index) in dataFrom" :key="index" class="content-son">
<div class="content-top">
<div class="top-img"></div>
<div>{{ item.title }}</div>
</div>
<div class="content-bottom">
<div class="bottom-img"></div>
<div>{{ item.answer }}</div>
</div>
</div>
</div>
</div>
</template>
<script setup>
import DetalsTitle from '@/views/detailsAll/components/DetalsTitle'
import { ref, defineProps, watch } from 'vue'
const flag = ref(true)
let dataFrom = ref([])
const props = defineProps({
dataList: { type: Object, default: null },
})
if (props.dataList.infoList) {
let obj = props.dataList.infoList.filter(
(item) => item.attrType === '常见问题'
)[0]
if (!obj) {
flag.value = false
} else {
obj.attrValue = JSON.parse(obj.attrValue)
obj.attrValue.map((item) => {
let params = {
title: item.question,
answer: item.answer,
}
dataFrom.value.push(params)
})
}
}
watch(
() => props.dataList,
(val) => {
if (val) {
let obj = val.infoList.filter((item) => item.attrType === '常见问题')[0]
if (!obj) {
flag.value = false
} else {
obj.attrValue = JSON.parse(obj.attrValue)
obj.attrValue.map((item) => {
let params = {
title: item.question,
answer: item.answer,
}
dataFrom.value.push(params)
})
}
}
}
)
</script>
<style lang="less" scoped>
.cpmmon-problem {
display: flex;
flex-direction: column;
align-items: center;
padding-top: 80px;
background: #f7f8fa;
.content {
width: 1300px;
margin: 20px 0px;
background: #ffffff;
padding: 40px;
.content-son {
font-size: 20px;
margin-bottom: 60px;
.content-top {
display: flex;
align-items: center;
margin-bottom: 20px;
line-height: 20px;
}
.content-bottom {
display: flex;
line-height: 34px;
color: #666666;
}
.content-top,
.content-bottom {
div:last-child {
width: calc(100% - 54px);
}
}
.top-img {
width: 34px;
height: 30px;
background: url('~@/assets/detailsAll/sf_top_img.png') no-repeat;
background-position: center;
background-size: cover;
margin-right: 20px;
}
.bottom-img {
width: 34px;
height: 30px;
background: url('~@/assets/detailsAll/sf_bottom_img.png') no-repeat;
ackground-size: cover;
background-position: center;
margin-right: 20px;
}
}
.content-son:last-child {
margin-bottom: 0px;
}
}
}
</style>

View File

@ -0,0 +1,190 @@
<!--部署与安全-->
<template>
<div class="application-deployment-and-security">
<div class="title">
<DetalsTitle
:title="dataFrom.title"
:type="dataFrom.englishTitle"
></DetalsTitle>
</div>
<div class="content">
<div
v-for="(item, index) in dataFrom.content"
:key="index"
class="content-card"
>
<div class="card-title">{{ item.childrenTitle }}</div>
<div class="card-content">
<div v-for="carditem in item.childrenContent" :key="carditem">
<span>{{ carditem.attrType }}</span>
<a-tooltip>
<template #title>{{ carditem.attrValue }}</template>
<span>{{ carditem.attrValue }}</span>
</a-tooltip>
</div>
</div>
</div>
</div>
</div>
</template>
<script setup>
import DetalsTitle from '@/views/detailsAll/components/DetalsTitle'
import { ref, defineProps, watch } from 'vue'
let dataFrom = ref({
title: '部署与安全',
englishTitle: 'DEPLOY&SAFE',
content: [
{
childrenTitle: '部署',
childrenContent: [],
},
{
childrenTitle: '安全',
childrenContent: [],
},
],
})
//
const props = defineProps({
dataList: { type: Object, default: null },
})
if (props.dataList.infoList) {
props.dataList.infoList.map((item) => {
if (
item.attrType === '部署区域' ||
item.attrType === '是否统一登录' ||
item.attrType === '部署位置'
) {
dataFrom.value.content[0].childrenContent.push(item)
} else if (
item.attrType === '是否等保备案' ||
item.attrType === '等保定级'
) {
dataFrom.value.content[1].childrenContent.push(item)
}
})
if (dataFrom.value.content[1].childrenContent.length <= 0) {
let data = [
{
attrType: '是否等保备案',
attrValue: '------',
},
{
attrType: '等保定级',
attrValue: '------',
},
]
data.map((itemContent) => {
dataFrom.value.content[1].childrenContent.push(itemContent)
})
}
let obj = {
attrType: '访问地址',
attrValue: props.dataList.link || '------',
}
dataFrom.value.content[0].childrenContent.push(obj)
}
watch(
() => props.dataList,
(val) => {
if (val) {
dataFrom.value.content[0].childrenContent = []
dataFrom.value.content[1].childrenContent = []
props.dataList.infoList.map((item) => {
if (
item.attrType === '部署区域' ||
item.attrType === '是否统一登录' ||
item.attrType === '部署位置'
) {
dataFrom.value.content[0].childrenContent.push(item)
} else if (
item.attrType === '是否等保备案' ||
item.attrType === '等保定级'
) {
dataFrom.value.content[1].childrenContent.push(item)
}
})
if (dataFrom.value.content[1].childrenContent.length <= 0) {
let data = [
{
attrType: '是否等保备案',
attrValue: '------',
},
{
attrType: '等保定级',
attrValue: '------',
},
]
data.map((itemContent) => {
dataFrom.value.content[1].childrenContent.push(itemContent)
})
}
let obj = {
attrType: '访问地址',
attrValue: props.dataList.link || '------',
}
dataFrom.value.content[0].childrenContent.push(obj)
}
}
)
</script>
<style lang="less" scoped>
.application-deployment-and-security {
padding: 0.8rem 0;
display: flex;
flex-direction: column;
align-items: center;
.title {
margin-bottom: 0.3rem;
}
.content {
display: flex;
width: 13rem;
justify-content: space-between;
.content-card {
height: 1.5rem;
width: 6.2rem;
border-radius: 0.2rem;
background: linear-gradient(
to right,
rgba(113, 132, 252, 0.4),
rgba(148, 163, 252, 0.4)
);
padding: 0 0.3rem;
display: flex;
flex-direction: column;
justify-content: center;
.card-title {
font-size: 0.26rem;
line-height: 0.26rem;
color: #212956;
margin-bottom: 0.2rem;
}
.card-content {
div {
display: inline-block;
margin-right: 0.7rem;
color: rgba(33, 41, 86, 0.8);
font-size: 0.2rem;
line-height: 0.2rem;
max-width: 5.84rem;
overflow: hidden; /*超出的隐藏*/
white-space: nowrap;
text-overflow: ellipsis; /*超出的设置为省略号*/
span {
display: inline-block;
max-width: 4rem;
overflow: hidden; /*超出的隐藏*/
white-space: nowrap;
text-overflow: ellipsis; /*超出的设置为省略号*/
}
}
}
}
}
}
</style>

View File

@ -0,0 +1,253 @@
<!--功能介绍-->
<template>
<div class="function-intorduction" v-if="flag">
<div class="application-scenarios-and-case-son">
<!-- {{ dataFrom.attrType }} -->
<div class="title">
<DetalsTitle :title="dataFrom.attrType" type="INTRODUCE"></DetalsTitle>
</div>
<div class="tab">
<div
v-for="(itemSonTitle, indexSonTitle) in dataFrom.attrValue"
:key="itemSonTitle.name"
@click="tabSwitch(itemSonTitle.name)"
class="tab-son"
:class="
tabIndexClass(indexSonTitle, dataFrom.name, dataFrom.attrValue)
"
>
<a-tooltip>
<template #title>{{ itemSonTitle.name }}</template>
<div
class="tab-top"
:class="
tabInitialize() == itemSonTitle.name ? 'tab-top-down' : ''
"
>
{{ itemSonTitle.name }}
</div>
</a-tooltip>
<div
class="tab-bottom"
v-if="tabInitialize() == itemSonTitle.name"
></div>
</div>
</div>
<template v-for="itemSonTitle in dataFrom.attrValue" :key="itemSonTitle">
<div class="content" v-if="tabindex == itemSonTitle.name">
<div class="content-left">
<div class="content-left-scene" v-if="!itemSonTitle.img"></div>
<a-image
:width="635"
:height="340"
:src="itemSonTitle.img"
v-if="itemSonTitle.img"
></a-image>
</div>
<div class="content-right">
<div class="content-right-scene">
<div class="content-top">{{ itemSonTitle.name }}</div>
<a-tooltip>
<template #title>{{ itemSonTitle.desc }}</template>
<div class="content-bottom">{{ itemSonTitle.desc }}</div>
</a-tooltip>
</div>
</div>
</div>
</template>
</div>
</div>
</template>
<script setup>
import DetalsTitle from '@/views/detailsAll/components/DetalsTitle'
import { ref, defineProps, watch } from 'vue'
const flag = ref(true)
let dataFrom = ref([])
// tab
let tabindex = ref('场景说明一')
//
const props = defineProps({
dataList: { type: Object, default: null },
})
if (props.dataList.infoList) {
let obj = props.dataList.infoList.filter(
(item) => item.attrType === '功能介绍'
)[0]
if (!obj) {
flag.value = false
} else {
obj.attrValue = JSON.parse(obj.attrValue)
dataFrom.value = obj
tabindex.value = dataFrom.value.attrValue[0].name
}
}
watch(
() => props.dataList,
(val) => {
if (val) {
let obj = val.infoList.filter((item) => item.attrType === '功能介绍')[0]
if (!obj) {
flag.value = false
} else {
obj.attrValue = JSON.parse(obj.attrValue)
dataFrom.value = obj
tabindex.value = dataFrom.value.attrValue[0].name
}
}
}
)
//
function tabIndexClass(index, title, content) {
if (title == '功能介绍' && index == 0 && content.length > 6) {
return 'tab-son-class'
}
}
//tab
function tabInitialize() {
return tabindex.value
}
//tab
function tabSwitch(name) {
tabindex.value = name
return tabindex.value
}
</script>
<style lang="less" scoped>
.function-intorduction {
width: 100%;
background: #f7f8fa;
display: flex;
flex-direction: column;
align-items: center;
overflow-x: unset;
.application-scenarios-and-case-son {
padding-top: 0.8rem;
padding-bottom: 0.8rem;
display: flex;
flex-direction: column;
align-items: center;
overflow: unset;
.tab {
max-width: 13rem;
overflow-x: auto;
display: flex;
justify-content: center;
color: #808080;
border-bottom: 0.01rem #e4e6f5 solid;
margin-top: 0.45rem;
margin-bottom: 0.4rem;
cursor: pointer;
padding-left: 0.4rem;
padding-right: 0.4rem;
.tab-son {
display: flex;
flex-direction: column;
align-items: center;
margin-right: 1rem;
.tab-top {
min-width: 1.2rem;
font-size: 0.24rem;
line-height: 0.24rem;
margin-bottom: 0.2rem;
max-width: 2rem;
height: 0.24rem;
display: -webkit-box;
overflow: hidden;
-webkit-line-clamp: 1;
-webkit-box-orient: vertical;
}
.tab-top-down {
min-width: 1.2rem;
color: #526aff;
margin-bottom: 0.16rem;
}
.tab-bottom {
height: 0.04rem;
width: 0.6rem;
background: #526aff;
}
}
.tab-son-class {
margin-left: 4.3rem;
margin-bottom: 0.02rem;
}
.tab-son-class-two {
margin-left: 2.3rem;
margin-bottom: 0.02rem;
}
.tab-son:last-child {
margin-right: 0rem;
}
}
.tab::-webkit-scrollbar-thumb {
background: rgba(82, 106, 255, 0.4);
}
.content {
display: flex;
position: relative;
width: 100%;
min-width: 13rem;
height: 3.4rem;
.content-left {
position: absolute;
left: 0;
min-width: 6.2rem;
:deep(.ant-image-img) {
width: 100%;
height: 100%;
object-fit: contain;
}
// text-align: center;
.content-top {
text-align: left;
}
}
.content-right {
width: 6.2rem;
height: 3.4rem;
position: absolute;
right: 0;
display: flex;
justify-content: center;
}
.content-right-scene,
.content-right-case {
width: 6.2rem;
height: 3.4rem;
display: flex;
flex-direction: column;
justify-content: center;
}
.content-left-scene,
.content-left-case {
height: 3.4rem;
width: 6.35rem;
border-radius: 0.1rem;
background: url('~@/assets/detailsAll/sf_tupianceshi.png') no-repeat;
background-position: center;
background-size: 6.35rem 3.4rem;
}
.content-top {
font-size: 0.22rem;
line-height: 0.22rem;
color: #000000;
margin-bottom: 0.35rem;
}
.content-bottom {
font-size: 0.18rem;
color: #999999;
line-height: 0.26rem;
display: -webkit-box;
overflow: hidden;
-webkit-line-clamp: 6;
-webkit-box-orient: vertical;
}
}
}
.application-scenarios-and-case-son:first-child {
padding-top: 1rem;
}
}
</style>

View File

@ -0,0 +1,163 @@
<!--
* @Author: hisense.liangjunhua
* @Date: 2022-06-08 14:54:01
* @LastEditors: hisense.liangjunhua
* @LastEditTime: 2022-06-15 18:24:39
* @Description: 应用详情页导航
-->
<template>
<div class="application-navigation" v-if="navList.length > 0">
<template v-for="nav in navList" :key="nav.key">
<div
class="nav"
:class="{ select: nav.key == select }"
v-if="nav.show"
@click="selectNav(nav.key)"
>
{{ nav.name }}
<span class="line"></span>
</div>
</template>
</div>
</template>
<script setup>
import { ref, defineProps, watch } from 'vue'
import mybus from '@/myplugins/mybus'
const navList = ref([
{
name: '应用展示',
key: 'application-presentation',
},
{
name: '功能介绍',
key: 'function-introduction',
},
{
name: '关联组件',
key: 'application-associated-components',
},
{
name: '使用能力',
key: 'ability-to-use',
},
{
name: '部署与安全',
key: 'deployment-and-security',
},
{
name: '归属部门与服务商',
key: 'department-and-service-provider',
},
{
name: '常见问题',
key: 'common-problem',
},
])
const props = defineProps({
selectNow: { type: String, default: '' },
dataList: { type: Object, default: null },
})
const select = ref('algorithm-display')
const list = ref([])
const selectNav = (key) => {
select.value = key
mybus.emit('flyToView', select.value)
}
if (props.dataList.infoList) {
list.value = []
props.dataList.infoList.map((item) => {
if (
item.attrType === '算法优势' ||
item.attrType === '常见问题' ||
item.attrType === '使用能力' ||
item.attrType === '关联组件'
) {
list.value.push(item.attrType)
} else if (item.attrType === '应用展示视频') {
list.value.push('应用展示')
}
})
navList.value.forEach((item) => {
console.log(item)
if (list.value.indexOf(item.name) > -1) {
item.show = true
}
})
select.value = navList.value.filter(
(item) => item.name === list.value[0]
)[0].key
console.log('11111111111111111111111111', list.value, navList.value)
}
watch(
() => props.selectNow,
(newValue) => {
select.value = newValue
}
)
watch(
() => props.dataList,
(val) => {
if (val) {
list.value = []
val.infoList.map((item) => {
if (
item.attrType === '功能介绍' ||
item.attrType === '常见问题' ||
item.attrType === '使用能力' ||
item.attrType === '关联组件'
) {
list.value.push(item.attrType)
} else if (item.attrType === '应用展示视频') {
list.value.push('应用展示')
}
})
list.value.push('部署与安全')
list.value.push('归属部门与服务商')
navList.value.forEach((item) => {
console.log(item)
if (list.value.indexOf(item.name) > -1) {
item.show = true
}
})
if (list.value.length > 0) {
select.value = navList.value.filter(
(item) => item.name === list.value[0]
)[0].key
}
console.log('11111111111111111111111111', list.value, navList.value)
}
}
)
</script>
<style lang="less" scoped>
.application-navigation {
width: 19.12rem;
height: 0.84rem;
line-height: 0.8rem;
display: flex;
justify-content: space-around;
font-size: 0.24rem;
color: #666;
background: #fff;
padding: 0 3rem;
box-shadow: 0rem 0.05rem 0.1rem #f2f3fb;
position: relative;
.nav {
cursor: pointer;
display: flex;
flex-direction: column;
justify-content: space-between;
align-items: center;
.line {
width: 0.4rem;
height: 0.04rem;
}
}
.select {
color: #526aff;
.line {
background: #526aff;
}
}
}
</style>

View File

@ -0,0 +1,215 @@
<!--归属部门与服务商-->
<template>
<div class="application-deployment-and-security">
<div class="title">
<DetalsTitle
:title="dataFrom.title"
:type="dataFrom.englishTitle"
></DetalsTitle>
</div>
<div class="content">
<div
v-for="(item, index) in dataFrom.content"
:key="index"
class="content-card"
>
<div class="card-title">{{ item.childrenTitle }}</div>
<div class="card-content">
<div v-for="carditem in item.childrenContent" :key="carditem">
<div>
<span>{{ carditem.attrType }}</span>
<a-tooltip>
<template #title>{{ carditem.attrValue }}</template>
<span>{{ carditem.attrValue }}</span>
</a-tooltip>
</div>
</div>
</div>
</div>
</div>
</div>
</template>
<script setup>
import DetalsTitle from '@/views/detailsAll/components/DetalsTitle'
import { ref, defineProps, watch } from 'vue'
let dataFrom = ref({
title: '归属部门与服务商',
englishTitle: 'DEPARTMENT&ERVICE',
content: [
{
childrenTitle: '归属部门信息',
childrenContent: [],
},
{
childrenTitle: '服务商信息',
childrenContent: [],
},
],
})
console.log(dataFrom.value)
//
const props = defineProps({
dataList: { type: Object, default: null },
})
if (props.dataList.infoList) {
let obj = {
attrType: '部门名称',
attrValue: props.dataList.deptName || '------',
}
dataFrom.value.content[0].childrenContent[0] = obj
let deptContacts = {
attrType: '部门联系人',
attrValue: props.dataList.deptContacts || '------',
}
dataFrom.value.content[0].childrenContent[1] = deptContacts
let deptPhone = {
attrType: '部门联系人',
attrValue: props.dataList.deptPhone || '------',
}
dataFrom.value.content[0].childrenContent[2] = deptPhone
props.dataList.infoList.map((item) => {
if (
item.attrType === '服务商' ||
item.attrType === '服务商联系人' ||
item.attrType === '服务商联系电话' ||
item.attrType === '服务商名'
) {
if (item.attrType === '服务商' || item.attrType === '服务商名') {
dataFrom.value.content[1].childrenContent[0] = item
if (dataFrom.value.content[1].childrenContent[0].attrValue == '') {
dataFrom.value.content[1].childrenContent[0].attrValue = '------'
}
} else if (item.attrType === '服务商联系人') {
dataFrom.value.content[1].childrenContent[1] = item
if (dataFrom.value.content[1].childrenContent[1].attrValue == '') {
dataFrom.value.content[1].childrenContent[1].attrValue = '------'
}
} else if (item.attrType === '服务商联系电话') {
dataFrom.value.content[1].childrenContent[2] = item
if (dataFrom.value.content[1].childrenContent[2].attrValue == '') {
dataFrom.value.content[1].childrenContent[2].attrValue = '------'
}
}
}
})
console.log('obj', dataFrom.value)
}
watch(
() => props.dataList,
(val) => {
if (val) {
// dataFrom.value.content[0].childrenContent = []
// dataFrom.value.content[1].childrenContent = []
let obj = {
attrType: '部门名称',
attrValue: props.dataList.deptName || '------',
}
dataFrom.value.content[0].childrenContent[0] = obj
let deptContacts = {
attrType: '部门联系人',
attrValue: props.dataList.deptContacts || '------',
}
dataFrom.value.content[0].childrenContent[1] = deptContacts
let deptPhone = {
attrType: '部门联系人',
attrValue: props.dataList.deptPhone || '------',
}
dataFrom.value.content[0].childrenContent[2] = deptPhone
props.dataList.infoList.map((item) => {
if (
item.attrType === '服务商' ||
item.attrType === '服务商联系人' ||
item.attrType === '服务商联系电话' ||
item.attrType === '服务商名'
) {
if (item.attrType === '服务商' || item.attrType === '服务商名') {
dataFrom.value.content[1].childrenContent.push(item)
if (
dataFrom.value.content[1].childrenContent[0].attrValue == ''
) {
dataFrom.value.content[1].childrenContent[0].attrValue =
'------'
}
} else if (item.attrType === '服务商联系人') {
dataFrom.value.content[1].childrenContent[1] = item
if (
dataFrom.value.content[1].childrenContent[1].attrValue == ''
) {
dataFrom.value.content[1].childrenContent[1].attrValue =
'------'
}
} else if (item.attrType === '服务商联系电话') {
dataFrom.value.content[1].childrenContent[2] = item
if (
dataFrom.value.content[1].childrenContent[2].attrValue == ''
) {
dataFrom.value.content[1].childrenContent[2].attrValue =
'------'
}
}
}
})
console.log('obj', dataFrom.value)
}
}
)
</script>
<style lang="less" scoped>
.application-deployment-and-security {
padding: 0.8rem 0;
display: flex;
flex-direction: column;
align-items: center;
.title {
margin-bottom: 0.3rem;
}
.content {
display: flex;
width: 13rem;
justify-content: space-between;
.content-card {
height: 1.5rem;
width: 6.2rem;
border-radius: 0.2rem;
background: linear-gradient(
to right,
rgba(113, 132, 252, 0.4),
rgba(148, 163, 252, 0.4)
);
padding: 0 0.3rem;
display: flex;
flex-direction: column;
justify-content: center;
.card-title {
font-size: 0.26rem;
color: #212956;
margin-bottom: 0.2rem;
line-height: 0.26rem;
}
.card-content {
white-space: nowrap;
div {
display: inline-block;
margin-right: 0.2rem;
color: rgba(33, 41, 86, 0.8);
font-size: 0.2rem;
max-width: 2.8rem;
div {
max-width: 2.8rem;
overflow: hidden;
text-overflow: ellipsis;
display: -webkit-box;
-webkit-box-orient: vertical;
-webkit-line-clamp: 1;
}
}
div:first-child {
display: block;
}
}
}
}
}
</style>

View File

@ -0,0 +1,116 @@
<!--
* @Author: hisense.liangjunhua
* @Date: 2022-06-08 15:25:33
* @LastEditors: hisense.liangjunhua
* @LastEditTime: 2022-06-14 11:30:52
* @Description: 应用展示 视频播放
-->
<template>
<div class="application-presentation" v-if="flag">
<detals-title title="应用展示" type="IMAGE&VIDEO"></detals-title>
<div class="main">
<div class="play" @click="showModal"></div>
</div>
<a-modal
v-model:visible="visible"
title="视频预览"
:width="750"
destroyOnClose
>
<template #footer></template>
<div style="width: 100%; display: flex; justify-content: center">
<div style="width: 100%; height: 100%">
<vue3VideoPlay v-bind="options" />
</div>
</div>
</a-modal>
</div>
</template>
<script setup>
import { ref, reactive, defineProps, watch } from 'vue'
import DetalsTitle from '@/views/detailsAll/components/DetalsTitle.vue'
const visible = ref(false)
const options = reactive({
width: '7.00rem', //
height: '4.00rem', //
color: '#409eff', //
title: '', //
src: '', //
muted: false, //
webFullScreen: false,
speedRate: ['0.75', '1.0', '1.25', '1.5', '2.0'], //
autoPlay: true, //
loop: false, //
mirror: false, //
ligthOff: false, //
volume: 0.3, //
control: true, //
controlBtns: [
'audioTrack',
'quality',
'speedRate',
'volume',
'setting',
'pip',
'pageFullScreen',
'fullScreen',
], //,
})
const showModal = () => {
visible.value = true
}
const props = defineProps({
dataList: { type: Object, default: null },
})
const flag = ref(true)
console.log('111111111111111111111,', props.dataList)
if (props.dataList.infoList) {
let obj = props.dataList.infoList.filter(
(item) => item.attrType === '应用展示视频'
)[0]
console.log('视频==============>', obj)
if (!obj) {
flag.value = false
} else {
options.src = obj.attrValue
}
}
watch(
() => props.dataList,
(val) => {
if (val) {
let obj = val.infoList.filter(
(item) => item.attrType === '应用展示视频'
)[0]
console.log('视频==============>', obj)
if (!obj) {
flag.value = false
} else {
options.src = obj.attrValue
}
}
}
)
</script>
<style lang="less" scoped>
.application-presentation {
padding: 0.8rem 3rem 0;
.main {
height: 3.4rem;
border-radius: 0.1rem;
background: url('~@/assets/detailsAll/sf_video_bg.png') no-repeat;
background-size: 100%;
margin-top: 0.4rem;
display: flex;
justify-content: center;
align-items: center;
.play {
width: 0.96rem;
height: 0.96rem;
background: url('~@/assets/detailsAll/sf_video_play.png') no-repeat;
background-size: 100%;
cursor: pointer;
}
}
}
</style>

View File

@ -0,0 +1,199 @@
<!--
* @Author: hisense.liangjunhua
* @Date: 2022-06-08 11:56:28
* @LastEditors: hisense.liangjunhua
* @LastEditTime: 2022-06-14 11:31:12
* @Description: 算法详情页头部
-->
<template>
<div class="algorithm-top-details">
<div class="left">
<div class="top">
<span class="name">{{ props.dataList.name }}</span>
<div class="label-content">
<p class="lable-father">
<span class="label">{{ props.dataList.type }}</span>
<span class="label">{{ props.dataList.shareType }}</span>
<span class="label">{{ props.dataList.shareCondition }}</span>
</p>
</div>
<!-- <span class="label">免费</span> -->
</div>
<div class="main">
<div>应用领域{{ applicationArea }}</div>
<div>
{{ props.dataList.description }}
</div>
</div>
<div class="bottom" v-if="props.dataList.id">
<!-- <a-button type="primary" @click="toView()">
<template #icon><form-outlined /></template>
申请使用
</a-button>
<a-button type="primary" @click="addShoppingCart()">
<template #icon><shopping-cart-outlined /></template>
加入购物车
</a-button> -->
<a-button type="primary" @click="goTOCollection()">收藏</a-button>
</div>
</div>
<div class="right"></div>
</div>
</template>
<script setup>
// import { ShoppingCartOutlined } from '@ant-design/icons-vue'
import { defineProps, ref, watch } from 'vue'
import { scInsert } from '@/api/personalCenter'
// import { sgcInsert } from '@/api/home'
// import { useRouter } from 'vue-router'
// import mybus from '@/myplugins/mybus'
import { message } from 'ant-design-vue'
const props = defineProps({
dataList: { type: Object, default: null },
})
// const router = useRouter()
const applicationArea = ref('')
// //
// const addShoppingCart = () => {
// console.log('==================>', props.dataList)
// sgcInsert({
// delFlag: '0',
// resourceId: props.dataList.id,
// // userId: userId.value,
// }).then((res) => {
// console.log(res)
// message.success('')
// mybus.emit('getSgcNum')
// })
// }
// //
// function toView() {
// // window.open(newpage.href, '_blank')
// router.push({
// path: '/apply',
// query: {
// name: props.dataList.name,
// resourceId: [props.dataList.id],
// },
// })
// }
//
const goTOCollection = () => {
console.log('收藏===================》', props.dataList)
scInsert([{ resourceId: props.dataList.id }]).then((res) => {
console.log(res)
message.success('收藏成功')
})
}
if (props.dataList.infoList) {
applicationArea.value = props.dataList.infoList.filter(
(val) => val.attrType === '应用领域'
)[0].attrValue
}
watch(
() => props.dataList,
(val) => {
if (val) {
applicationArea.value = props.dataList.infoList.filter(
(val) => val.attrType === '应用领域'
)[0].attrValue
}
}
)
</script>
<style lang="less" scoped>
.algorithm-top-details {
height: 6rem;
padding: 1.8rem 0 0;
background: url('~@/assets/detailsAll/sf_top_bg.png') no-repeat;
background-size: 100%;
display: flex;
justify-content: center;
.left {
max-width: 7.2rem;
color: #fff;
margin-right: 0.8rem;
.top {
display: flex;
align-items: center;
span {
font-size: 0.14rem;
}
.name {
// max-width: 3.3rem;
// overflow: hidden;
// text-overflow: ellipsis;
white-space: nowrap;
font-size: 0.4rem;
margin-right: 0.2rem;
}
.label-content {
position: relative;
}
.lable-father {
position: absolute;
min-width: 2.5rem;
right: -2.5rem;
top: 0;
}
.label {
padding: 0.01rem 0.1rem;
margin-right: 0.1rem;
border-radius: 0.13rem;
background: rgba(255, 255, 255, 0.4);
}
}
.main {
margin-top: 0.2rem;
font-size: 0.18rem;
line-height: 0.34rem;
& > div:nth-of-type(1) {
overflow: hidden;
text-overflow: ellipsis;
white-space: nowrap;
}
& > div:nth-of-type(2) {
max-height: 1rem;
overflow: hidden;
text-overflow: ellipsis;
display: -webkit-box;
-webkit-line-clamp: 3;
-webkit-box-orient: vertical;
}
}
.bottom {
margin-top: 0.4rem;
display: flex;
.ant-btn {
height: 0.5rem;
margin-right: 0.2rem;
background: #ff8b55;
border-radius: 0.06rem;
font-size: 0.2rem;
display: flex;
justify-content: center;
align-items: center;
}
.ant-btn:nth-of-type(1) {
width: 1.8rem;
}
.ant-btn:nth-of-type(2) {
width: 2.2rem;
}
.ant-btn:nth-of-type(3) {
width: 1.45rem;
background: #fff;
color: #526aff;
}
}
}
.right {
width: 5.8rem;
height: 4rem;
background: url('~@/assets/detailsAll/sf_right_bg.png') no-repeat;
background-size: 100%;
margin-top: -0.4rem;
}
}
</style>

View File

@ -16,6 +16,7 @@
class="photo"
:style="{
backgroundImage: `url(${item.photo}) `,
backgroundSize: 'cover',
}"
></span>
<span>{{ item.name }}</span>
@ -180,7 +181,7 @@
<div class="top-content-father">
<div class="top-content-son">
<div class="top-content">
<span class="top-content-title" :style="{ marginRight: '8px' }">
<span class="top-content-title" :style="{ marginRight: '.08rem' }">
标签
</span>
<div
@ -191,7 +192,7 @@
<a-checkable-tag
:checked="selBqTags.indexOf(tag) > -1"
@change="(checked) => handleChangeBqTags(tag, checked)"
style="width: 100px"
style="width: 1rem"
>
{{ tag }}
</a-checkable-tag>
@ -199,7 +200,7 @@
</div>
</div>
<div class="top-content">
<span class="top-content-title" :style="{ marginRight: '8px' }">
<span class="top-content-title" :style="{ marginRight: '.08rem' }">
在线状态
</span>
<div class="leixingsumfather leixingsumfather2">
@ -207,7 +208,7 @@
<a-checkable-tag
:checked="selStateTags.indexOf(tag) > -1"
@change="(checked) => handleChangeStateTag(tag, checked)"
style="width: 100px"
style="width: 1rem"
>
{{ tag }}
</a-checkable-tag>
@ -226,7 +227,7 @@
class="resultListSearchInput"
/>
<button class="button-reset" @click="chongzhi()">重置</button>
<div class="itemList" style="margin-top: 20px">
<div class="itemList" style="margin-top: .2rem">
<a-card :loading="loading">
<a-card-grid
style="width: 20%; text-align: center"
@ -279,7 +280,7 @@
</div>
</div>
</div>
<div v-if="resourceList.data?.length <= 0" style="margin-top: 200px">
<div v-if="resourceList.data?.length <= 0" style="margin-top: 2rem">
<a-empty
v-if="!(Cardsname == '基础设施') && !(Cardsname == '数据资源')"
/>
@ -297,6 +298,7 @@
class="photo"
:style="{
backgroundImage: `url(${item.photo}) `,
backgroundSize: 'cover',
}"
></span>
<span>{{ item.name }}</span>
@ -962,38 +964,38 @@
<style lang="less" scoped>
.resultListSearchInput-father {
background: #f3f5f9;
padding-left: 20px;
padding-top: 20px;
padding-left: 0.2rem;
padding-top: 0.2rem;
.resultListSearchInput-son {
background: #fff;
padding: 20px 20px 0px 30px;
margin-right: 20px;
padding: 0.2rem 0.2rem 0rem 0.3rem;
margin-right: 0.2rem;
.hengxian {
width: 100%;
height: 1px;
height: 0.01rem;
background: rgba(150, 144, 144, 0.3);
margin-top: 20px;
margin-top: 0.2rem;
}
}
}
.resultListSearchInput {
margin-left: 10px;
margin-left: 0.1rem;
:deep(.ant-input) {
width: 400px;
height: 36px;
width: 4rem;
height: 0.36rem;
background: #fff;
border-radius: 4px;
border-radius: 0.04rem;
}
:deep(.ant-input-search-button) {
width: 80px;
height: 36px;
width: 0.8rem;
height: 0.36rem;
background: #0087ff;
border-radius: 4px !important;
font-size: 14px;
border-radius: 0.04rem !important;
font-size: 0.14rem;
font-weight: 400;
color: #fff;
line-height: 34px;
margin-left: 10px;
line-height: 0.34rem;
margin-left: 0.1rem;
}
:deep(.ant-input-group-addon) {
left: 0 !important;
@ -1002,15 +1004,15 @@
.button-reset {
border: 0;
outline: none;
width: 80px;
height: 36px;
width: 0.8rem;
height: 0.36rem;
background: #e1edfa;
border-radius: 4px;
font-size: 14px;
border-radius: 0.04rem;
font-size: 0.14rem;
font-weight: 400;
color: #0087ff;
line-height: 34px;
margin-left: 250px;
line-height: 0.34rem;
margin-left: 2.5rem;
cursor: pointer;
}
.details-pageconetent {
@ -1020,59 +1022,59 @@
// flex-direction: column;
justify-content: center;
align-items: center;
margin-top: 67px;
margin-top: 0.67rem;
position: relative;
background: rgba(245, 243, 243, 0.3);
.details-pageconetent-left {
max-height: 790px;
max-height: 6.9rem;
position: absolute;
width: 250px;
top: 17px;
left: 250px;
margin-right: 17px;
width: 2.5rem;
top: 0.17rem;
left: 2.5rem;
margin-right: 0.17rem;
overflow: auto;
}
.top {
min-height: 720px;
min-height: 7.2rem;
position: relative;
width: 1087px;
width: 10.87rem;
display: flex;
padding-top: 20px;
padding-top: 0.2rem;
flex-direction: column;
// align-items: center;
font-size: 16px;
font-size: 0.16rem;
justify-content: left;
margin-left: 250px;
margin-left: 2.5rem;
.pagination {
background: #f3f5f9;
padding-bottom: 60px;
padding-bottom: 0.6rem;
}
.jichusheshi {
// display: flex;
// flex-direction: column;
// justify-content: center;
// padding-top: 40px;
height: 445px;
// padding-top: .4rem;
height: 4.45rem;
// overflow: hidden;
.yunziyuan {
width: 100%;
position: relative;
.shuoming {
position: absolute;
right: 20px;
top: 15px;
font-size: 12px;
right: 0.2rem;
top: 0.15rem;
font-size: 0.12rem;
}
.yunziyuan-title {
display: flex;
align-items: center;
.tupian {
// width: 89px;
// height: 74px;
// width: .89rem;
// height: .74rem;
// background: url('~@/assets/home/yunziyuan.png');
}
.title {
margin-left: 10px;
margin-left: 0.1rem;
font-weight: 600;
text-decoration: underline;
cursor: pointer;
@ -1080,15 +1082,15 @@
}
.fenlei {
display: flex;
margin-left: 20px;
margin-right: 30px;
margin-left: 0.2rem;
margin-right: 0.3rem;
justify-content: space-between;
}
.keyongziyuan {
display: flex;
justify-content: space-between;
margin-left: 30px;
margin-right: 30px;
margin-left: 0.3rem;
margin-right: 0.3rem;
div {
display: flex;
div:last-child {
@ -1098,7 +1100,7 @@
}
}
.yunziyuan > div {
margin-bottom: 10px;
margin-bottom: 0.1rem;
}
.shipin {
width: 100%;
@ -1106,12 +1108,12 @@
display: flex;
align-items: center;
.tupian {
// width: 56px;
// height: 50px;
// width: .56rem;
// height: .5rem;
// background: url('~@/assets/home/shipin.png');
}
.title {
margin-left: 10px;
margin-left: 0.1rem;
font-weight: 600;
text-decoration: underline;
cursor: pointer;
@ -1119,9 +1121,9 @@
}
.fenlei {
display: flex;
margin-left: 20px;
margin-left: 0.2rem;
div {
margin-right: 60px;
margin-right: 0.6rem;
}
.shuzi {
font-weight: 600;
@ -1129,41 +1131,41 @@
}
}
.shipin > div {
margin-bottom: 10px;
margin-bottom: 0.1rem;
}
}
.jichusheshi > div {
// background: #eaf4ff;
padding-top: 10px;
border-radius: 4px;
margin-bottom: 20px;
padding-bottom: 40px;
padding-top: 0.1rem;
border-radius: 0.04rem;
margin-bottom: 0.2rem;
padding-bottom: 0.4rem;
}
.shujuziyuan {
display: flex;
flex-direction: column;
justify-content: center;
padding-top: 40px;
padding-top: 0.4rem;
.yunziyuan {
width: 100%;
position: relative;
.shuoming {
position: absolute;
right: 20px;
top: 15px;
font-size: 12px;
right: 0.2rem;
top: 0.15rem;
font-size: 0.12rem;
}
.yunziyuan-title {
display: flex;
align-items: center;
margin-left: 20px;
margin-left: 0.2rem;
.tupian {
// width: 51px;
// height: 50px;
// width: .51rem;
// height: .5rem;
// background: url('~@/assets/home/shujuziyuan.png');
}
.title {
margin-left: 10px;
margin-left: 0.1rem;
font-weight: 600;
text-decoration: underline;
cursor: pointer;
@ -1171,15 +1173,15 @@
}
.fenlei {
display: flex;
margin-left: 20px;
margin-right: 30px;
margin-left: 0.2rem;
margin-right: 0.3rem;
justify-content: space-between;
}
.keyongziyuan {
display: flex;
justify-content: space-between;
margin-left: 30px;
margin-right: 30px;
margin-left: 0.3rem;
margin-right: 0.3rem;
div {
display: flex;
div:last-child {
@ -1189,33 +1191,33 @@
}
}
.yunziyuan > div {
margin-bottom: 10px;
margin-bottom: 0.1rem;
}
}
.shujuziyuan > div {
background: #eaf4ff;
padding-top: 10px;
border-radius: 4px;
margin-bottom: 20px;
padding-bottom: 40px;
padding-top: 0.1rem;
border-radius: 0.04rem;
margin-bottom: 0.2rem;
padding-bottom: 0.4rem;
}
.top-title {
display: flex;
justify-content: space-between;
align-items: center;
font-size: 20px;
font-size: 0.2rem;
font-family: 'Alibaba PuHuiTi';
color: #000000;
line-height: 34px;
line-height: 0.34rem;
.photo {
display: inline-block;
height: 44px;
width: 44px;
margin-right: 10px;
height: 0.44rem;
width: 0.44rem;
margin-right: 0.1rem;
}
div {
margin: 0 20px;
padding: 0 10px;
margin: 0 0.2rem;
padding: 0 0.1rem;
cursor: pointer;
display: flex;
align-items: center;
@ -1226,82 +1228,82 @@
.sel {
font-weight: 600;
color: #0087ff;
border-bottom: 2px solid #0087ff;
border-bottom: 0.02rem solid #0087ff;
}
}
.top-content-father {
width: 1087px;
padding-left: 20px;
// margin-bottom: 20px;
width: 10.87rem;
padding-left: 0.2rem;
// margin-bottom: .2rem;
background: #f3f5f9;
.top-content-son {
background: #fff;
margin: 0px 20px 20px 0px;
padding-top: 20px;
padding-bottom: 20px;
margin: 0rem 0.2rem 0.2rem 0rem;
padding-top: 0.2rem;
padding-bottom: 0.2rem;
}
.top-content {
display: flex;
margin-top: 0px;
margin-top: 0rem;
span:nth-child(1) {
display: inline-block;
position: relative;
// width: 70px;
line-height: 36.14px;
// width: .7rem;
line-height: 0.3614rem;
white-space: normal;
text-align: center;
vertical-align: middle;
}
// .top-content-title {
// top: -20px;
// top: -0.2rem;
// }
.leixingsumfather {
width: 810px;
width: 8.1rem;
display: inline-block;
height: 30.14px;
height: 0.3014rem;
overflow: hidden;
// width: 718px;
// width: 7.18rem;
}
.leixingsumfather2 {
width: 920px;
width: 9.2rem;
}
.leixingsum {
display: inline-block;
cursor: pointer;
text-align: center;
margin-top: 5px;
// margin-bottom: 10px;
margin-top: 0.05rem;
// margin-bottom: .1rem;
.ant-tag-checkable {
width: 83px;
height: 25px;
width: 0.83rem;
height: 0.25rem;
display: flex;
justify-content: center;
align-items: center;
padding-left: 5px;
padding-right: 5px;
padding-left: 0.05rem;
padding-right: 0.05rem;
float: left;
margin: 0 15px;
margin: 0 0.15rem;
font-family: 'AlibabaPuHuiTiR';
font-size: 14px;
font-size: 0.14rem;
color: #333333;
font-weight: 500;
text-align: center;
line-height: 14px;
line-height: 0.14rem;
}
:deep(.ant-tag-checkable-checked) {
// width: 67px;
margin-left: 15px;
margin-right: 15px;
// width: .67rem;
margin-left: 0.15rem;
margin-right: 0.15rem;
text-align: center;
}
.ant-tag-checkable:active,
.ant-tag-checkable-checked {
width: 85px;
width: 0.85rem;
font-family: 'Alibaba PuHuiTi';
font-weight: 500;
background-color: #0087ff;
color: #ffffff;
border-radius: 16px;
border-radius: 0.16rem;
}
}
.active {
@ -1312,17 +1314,17 @@
}
}
.top-content:nth-child(1) {
margin-top: 0px !important;
margin-top: 0rem !important;
}
}
}
}
.shrinkTag {
width: 50px;
width: 0.5rem;
display: flex;
justify-content: center;
align-items: flex-end;
margin-bottom: 5px;
margin-bottom: 0.05rem;
span {
cursor: pointer;
}
@ -1333,84 +1335,84 @@
}
.talk-monitor {
position: fixed;
bottom: 50px;
right: 10px;
bottom: 0.5rem;
right: 0.1rem;
z-index: 9999;
cursor: pointer;
i {
width: 64px;
height: 64px;
width: 0.64rem;
height: 0.64rem;
display: inline-block;
background: url('~@/assets/home/icon-talk.png');
background-size: cover;
}
}
.top-content-father {
width: 1087px;
padding-left: 20px;
// margin-bottom: 20px;
width: 10.87rem;
padding-left: 0.2rem;
// margin-bottom: .2rem;
.top-content {
display: flex;
margin-top: 23px;
margin-top: 0.23rem;
span:nth-child(1) {
display: inline-block;
position: relative;
width: 68px;
width: 0.68rem;
font-weight: 600;
white-space: normal;
text-align: center;
vertical-align: middle;
font-size: 16px;
margin-left: 30px;
font-size: 0.16rem;
margin-left: 0.3rem;
}
// .top-content-title {
// top: -20px;
// top: -0.2rem;
// }
.leixingsumfather {
width: 770px;
width: 7.7rem;
display: inline-block;
height: 30.14px;
height: 0.3014rem;
overflow: hidden;
// width: 718px;
// width: 7.18rem;
}
.leixingsum {
width: 93px;
width: 0.93rem;
display: inline-block;
cursor: pointer;
text-align: center;
margin-top: 5px;
// margin-bottom: 10px;
margin-top: 0.05rem;
// margin-bottom: .1rem;
.ant-tag-checkable {
width: 85px;
height: 25px;
width: 0.85rem;
height: 0.25rem;
display: flex;
justify-content: center;
align-items: center;
padding-left: 5px;
padding-right: 5px;
padding-left: 0.05rem;
padding-right: 0.05rem;
float: left;
margin: 0 15px;
margin: 0 0.15rem;
font-family: 'AlibabaPuHuiTiR';
font-size: 14px;
font-size: 0.14rem;
color: #333333;
font-weight: 500;
text-align: center;
line-height: 14px;
line-height: 0.14rem;
}
:deep(.ant-tag-checkable-checked) {
// width: 67px;
margin-left: 15px;
margin-right: 15px;
// width: .67rem;
margin-left: 0.15rem;
margin-right: 0.15rem;
text-align: center;
}
.ant-tag-checkable:active,
.ant-tag-checkable-checked {
width: 85px;
width: 0.85rem;
font-family: 'Alibaba PuHuiTi';
font-weight: 500;
background-color: #0087ff;
color: #ffffff;
border-radius: 16px;
border-radius: 0.16rem;
}
}
.active {
@ -1421,7 +1423,7 @@
}
}
.top-content:nth-child(1) {
margin-top: 41px !important;
margin-top: 0.41rem !important;
}
}
:deep(.ant-card-grid) {

View File

@ -24,8 +24,8 @@
version="1.1"
xmlns="http://www.w3.org/2000/svg"
p-id="2069"
width="40"
height="40"
width="0.4rem"
height="0.4rem"
@click="goToSgc"
>
<path
@ -36,7 +36,7 @@
</svg>
<!-- <a-avatar shape="square" size="large" /> -->
</a-badge>
<a-badge :count="mynoticeNum" style="margin-left: 20px">
<a-badge :count="mynoticeNum" style="margin-left: 0.2rem">
<svg
t="1654051054113"
class="icon2"
@ -44,8 +44,8 @@
version="1.1"
xmlns="http://www.w3.org/2000/svg"
p-id="2187"
width="35"
height="35"
width="0.35rem"
height="0.35rem"
>
<path
d="M544 161.536a330.666667 330.666667 0 0 1 298.666667 329.130667h-0.341334c0.213333 1.493333 0.341333 2.986667 0.341334 4.565333v219.434667h39.68a32 32 0 0 1 0 64h-212.053334a160 160 0 0 1-316.586666 0H141.909333a32 32 0 1 1 0-64h39.424v-219.434667c0-1.578667 0.128-3.072 0.341334-4.565333H181.333333a330.666667 330.666667 0 0 1 298.666667-329.130667V128a32 32 0 1 1 64 0v33.536z m-298.666667 553.130667h533.333334v-219.434667c0-1.578667 0.128-3.072 0.341333-4.565333h-0.341333a266.666667 266.666667 0 1 0-533.333334 0h-0.341333c0.213333 1.493333 0.341333 2.986667 0.341333 4.565333v219.434667z m359.765334 64H418.901333a96 96 0 0 0 186.197334 0z"
@ -80,9 +80,32 @@
<template #title>
<span>{{ user.username }}</span>
</template>
<span class="name">{{ user.username }}</span>
<span
class="name"
@click="jumpPage({ name: '个人中心', key: 'personalCenter' })"
>
{{ user.username }}
</span>
</a-tooltip>
<span @click="logout" class="out">退出</span>
<svg
t="1655286092324"
class="icon"
viewBox="0 0 1024 1024"
version="1.1"
xmlns="http://www.w3.org/2000/svg"
p-id="2160"
width="20"
height="20"
style="margin-top: 0.05rem"
@click="jumpPage({ name: '后台管理', key: 'houtaiguanli' })"
>
<path
d="M1016.832 606.208q2.048 12.288-1.024 29.696t-10.24 35.328-17.408 32.256-22.528 20.48-21.504 6.144-20.48-4.096q-10.24-3.072-25.6-5.632t-31.232-1.024-31.744 6.656-27.136 17.408q-24.576 25.6-28.672 58.368t9.216 62.464q10.24 20.48-3.072 40.96-6.144 8.192-19.456 16.896t-29.184 15.872-33.28 11.264-30.72 4.096q-9.216 0-17.408-7.168t-11.264-15.36l-1.024 0q-11.264-31.744-38.4-54.784t-62.976-23.04q-34.816 0-62.976 23.04t-39.424 53.76q-5.12 12.288-15.36 17.92t-22.528 5.632q-14.336 0-32.256-5.12t-35.84-12.8-32.256-17.92-21.504-20.48q-5.12-7.168-5.632-16.896t7.68-27.136q11.264-23.552 8.704-53.76t-26.112-55.808q-14.336-15.36-34.816-19.968t-38.912-3.584q-21.504 1.024-44.032 8.192-14.336 4.096-28.672-2.048-11.264-4.096-20.992-18.944t-17.408-32.768-11.776-36.864-2.048-31.232q3.072-22.528 20.48-28.672 30.72-12.288 55.296-40.448t24.576-62.976q0-35.84-24.576-62.464t-55.296-38.912q-9.216-3.072-15.36-14.848t-6.144-24.064q0-13.312 4.096-29.696t10.752-31.744 15.36-28.16 18.944-18.944q8.192-5.12 15.872-4.096t16.896 4.096q30.72 12.288 64 7.68t58.88-29.184q12.288-12.288 17.92-30.208t7.168-35.328 0-31.744-2.56-20.48q-2.048-6.144-3.584-14.336t1.536-14.336q6.144-14.336 22.016-25.088t34.304-17.92 35.84-10.752 27.648-3.584q13.312 0 20.992 8.704t10.752 17.92q11.264 27.648 36.864 48.64t60.416 20.992q35.84 0 63.488-19.968t38.912-50.688q4.096-8.192 12.8-16.896t17.92-8.704q14.336 0 31.232 4.096t33.28 11.264 30.208 18.432 22.016 24.576q5.12 8.192 3.072 17.92t-4.096 13.824q-13.312 29.696-8.192 62.464t29.696 57.344 60.416 27.136 66.56-11.776q8.192-5.12 19.968-4.096t19.968 9.216q15.36 14.336 27.136 43.52t15.872 58.88q2.048 17.408-5.632 27.136t-15.872 12.8q-31.744 11.264-54.272 39.424t-22.528 64q0 34.816 18.944 60.928t49.664 37.376q7.168 4.096 12.288 8.192 11.264 9.216 15.36 23.552zM540.672 698.368q46.08 0 87.04-17.408t71.168-48.128 47.616-71.168 17.408-86.528-17.408-86.528-47.616-70.656-71.168-47.616-87.04-17.408-86.528 17.408-70.656 47.616-47.616 70.656-17.408 86.528 17.408 86.528 47.616 71.168 70.656 48.128 86.528 17.408z"
p-id="2161"
fill="#bfbfbf"
></path>
</svg>
</div>
</div>
</template>
@ -103,8 +126,10 @@
{ name: '能力统计', key: 'abilityStatistics' },
{ name: '开发指南', key: 'developmentGuide' },
{ name: '需求中心', key: 'demandCenter' },
{ name: '个人中心', key: 'personalCenter' },
{ name: '后台管理', key: 'houtaiguanli' },
// { name: '', key: 'personalCenter' },
{ name: '区市站点', key: 'mapTest' },
// { name: '', key: 'houtaiguanli' },
{ name: '赋能案例', key: 'assignCase' },
])
const user = ref({})
const select = ref(router.currentRoute.value.name)
@ -163,10 +188,20 @@
path: '/demandCenter',
})
break
case '区市站点':
router.push({
path: '/mapTest',
})
break
case '后台管理':
window.open(window.SITE_CONFIG.backUrl + '/#/bscatalogue-bscatalogue')
window.reload('http://15.2.21.238:9797')
break
case '赋能案例':
router.push({
path: '/assignCase',
})
break
default:
router.push('/home')
break
@ -253,29 +288,29 @@
src: url('~@/assets/newHome/font/header-typeface.ttf');
}
.home-header {
height: 64px;
height: 0.64rem;
width: 100%;
display: flex;
justify-content: center;
align-items: center;
padding: 0 190px;
padding: 0 1rem;
background-color: rgba(0, 0, 25, 0.7);
position: fixed;
z-index: 1000;
top: 0;
div {
color: #fff;
font-size: 16px;
font-size: 0.16rem;
}
.name {
font-size: 22px;
font-size: 0.22rem;
font-family: header-typeface;
margin-right: 20px;
margin-right: 0.2rem;
}
.nav {
width: 120px;
height: 64px;
line-height: 64px;
width: 1.2rem;
height: 0.64rem;
line-height: 0.64rem;
text-align: center;
}
.nav:hover {
@ -288,32 +323,33 @@
color: #fff !important;
}
.info {
width: 200px;
margin-left: 20px;
width: 2rem;
margin-left: 0.2rem;
display: flex;
justify-content: center;
.img {
width: 30px;
height: 30px;
border-radius: 10px;
width: 0.3rem;
height: 0.3rem;
border-radius: 0.1rem;
background: url('~@/assets/newHome/user.png') no-repeat;
background-size: 100%;
}
span {
height: 30px;
line-height: 30px;
margin-left: 8px;
margin-right: 6px;
font-size: 16px;
height: 0.3rem;
line-height: 0.3rem;
margin-left: 0.08rem;
margin-right: 0.06rem;
font-size: 0.16rem;
}
.name {
max-width: 75px;
max-width: 0.75rem;
overflow: hidden;
}
.out {
cursor: pointer;
padding: 0 16px;
border-left: 1px solid #666;
// padding: 0 0.16rem;
padding: 0 0.04rem 0 0.1rem;
border-left: 0.01rem solid #666;
}
}
}
@ -355,41 +391,41 @@
}
}
.mynotice {
width: 250px;
height: 300px;
width: 2.5rem;
height: 3rem;
background: #eee;
border-radius: 5px;
border-radius: 0.05rem;
position: absolute;
top: 45px;
right: 310px;
top: 0.45rem;
right: 3.1rem;
overflow-y: scroll;
}
.mynotice::-webkit-scrollbar {
display: none;
}
:deep(.ant-list-item) {
border-bottom: 1px solid #ccc;
border-bottom: 0.01rem solid #ccc;
}
:deep(.ant-list-item-meta-title) {
display: flex;
justify-content: space-around;
align-items: center;
padding: 0 5px;
padding: 0 0.05rem;
a {
width: 150px;
width: 1.5rem;
// ...
overflow: hidden;
text-overflow: ellipsis;
white-space: nowrap;
}
button {
width: 70px;
height: 25px;
width: 0.7rem;
height: 0.25rem;
display: flex;
justify-content: center;
align-items: center;
span {
font-size: 10px;
font-size: 0.1rem;
}
}
}

View File

@ -306,6 +306,7 @@
}
function toView(type, item) {
debugger
if (type === 'apply') {
// window.open(newpage.href, '_blank')
router.push({

View File

@ -267,6 +267,7 @@
}
function toView(type, id, name, dataResourceId) {
debugger
if (type === 'apply') {
// window.open(newpage.href, '_blank')
router.push({

View File

@ -1,3 +1,10 @@
<!--
* @Author: hisense.liangjunhua
* @Date: 2022-06-14 09:43:49
* @LastEditors: hisense.liangjunhua
* @LastEditTime: 2022-06-15 18:19:22
* @Description: 告诉大家这是什么
-->
<template>
<div>
<div id="apply-container">
@ -6,6 +13,9 @@
<algorithm-details
v-else-if="showView === 'algorithm-details'"
></algorithm-details>
<application-details
v-else-if="showView === 'application-details'"
></application-details>
<ability-to-recommend-bottom></ability-to-recommend-bottom>
</div>
</div>
@ -17,7 +27,9 @@
import DetailsView from './components/DetailsView.vue'
import AbilityToRecommendBottom from '@/views/home/components/AbilityToRecommendBottom'
import AlgorithmDetails from '@/views/detailsAll/AlgorithmDetails'
import ApplicationDetails from '@/views/detailsAll/ApplicationDetails'
import { selectOne } from '@/api/home'
import { useRouter } from 'vue-router'
export default defineComponent({
name: '',
props: {},
@ -26,6 +38,7 @@
DetailsView,
AbilityToRecommendBottom,
AlgorithmDetails,
ApplicationDetails,
},
setup() {
const formState = reactive({
@ -62,11 +75,36 @@
label: '交通运输局',
},
])
const showView = ref('algorithm-details')
const router = useRouter()
const id = router.currentRoute.value.query.id
const obj = JSON.parse(window.sessionStorage.getItem('preview'))
let showView = ref('algorithm-details')
const init = () => {
if (id) {
selectOne(id).then((res) => {
if (res.data.data.type == '组件服务') {
showView.value = 'algorithm-details'
} else {
showView.value = 'application-details'
}
})
} else if (obj) {
console.log('obj============>', obj)
if (obj.type == '组件服务') {
showView.value = 'algorithm-details'
} else {
showView.value = 'application-details'
}
}
}
init()
return {
formState,
options,
showView,
init,
router,
id,
}
},
})

View File

@ -29,8 +29,8 @@
version="1.1"
xmlns="http://www.w3.org/2000/svg"
p-id="2156"
width="25"
height="25"
width="0.25rem"
height="0.25rem"
v-show="selectId == val.key"
>
<path
@ -65,8 +65,8 @@
version="1.1"
xmlns="http://www.w3.org/2000/svg"
p-id="2156"
width="25"
height="25"
width="0.25rem"
height="0.25rem"
v-show="selectId == child.key"
>
<path
@ -343,48 +343,48 @@
// .wrapper {
// height: 100%;
// width: 100%;
// padding: 20px;
// padding: .2rem;
// .wrapper-title {
// height: 28px;
// height: .28rem;
// width: 100%;
// margin-bottom: 25px;
// margin-bottom: .25rem;
// .wrapper-title-name {
// width: 100%;
// height: 17px;
// font-size: 18px;
// height: .17rem;
// font-size: .18rem;
// font-family: 'AlibabaPuHuiTiR';
// font-weight: 400;
// color: #0058e1;
// line-height: 34px;
// line-height: .34rem;
// }
// .wrapper-title-yangshi {
// width: 40px;
// height: 3px;
// width: .4rem;
// height: .03rem;
// background: #0058e1;
// border-radius: 2px;
// margin-top: 20px;
// margin-left: 15px;
// border-radius: .02rem;
// margin-top: .2rem;
// margin-left: .15rem;
// }
// }
// .wrapper-title-left-tree {
// overflow-y: auto;
// height: 80%;
// width: 210px;
// width: 2.1rem;
// }
// .wrapper-title-left-tree::-webkit-scrollbar {
// width: 5px;
// height: 5px;
// width: .05rem;
// height: .05rem;
// }
// .wrapper-title-left-tree::-webkit-scrollbar-thumb {
// border-radius: 5px;
// border-radius: .05rem;
// background-color: #0058e1;
// }
// .wrapper-title-left-tree::-webkit-scrollbar-track {
// background-color: transparent;
// }
// :deep(.ant-tree-treenode) {
// margin-top: 10px;
// height: 23px;
// margin-top: .1rem;
// height: .23rem;
// overflow: hidden;
// text-overflow: ellipsis;
// display: -webkit-box;
@ -395,13 +395,13 @@
.primaryNode {
.top {
width: 100%;
height: 40px;
height: .4rem;
background: rgba(0, 135, 225, 0.1);
display: flex;
justify-content: space-between;
align-items: center;
padding: 0 10px;
margin-top: 8px;
padding: 0 .1rem;
margin-top: .08rem;
}
.top:hover {
cursor: pointer;
@ -422,16 +422,16 @@
.bottom {
width: 100%;
background: rgba(244, 245, 248, 0.8);
padding: 0 10px;
// margin-bottom: 8px;
padding: 0 .1rem;
// margin-bottom: .08rem;
.up {
cursor: pointer;
height: 40px;
height: .4rem;
display: flex;
justify-content: space-between;
align-items: center;
border-top: 1px solid #ccc;
padding: 0 10px;
border-top: .01rem solid #ccc;
padding: 0 .1rem;
& > div {
display: flex;
justify-content: flex-start;
@ -455,9 +455,9 @@
}
}
.select {
padding: 0 10px 0 0;
padding: 0 .1rem 0 0;
.name {
width: 170px;
width: 1.7rem;
color: #0058e1;
font-weight: 600;
}
@ -473,11 +473,11 @@
width: 100%;
.child {
cursor: pointer;
height: 40px;
height: .4rem;
display: flex;
justify-content: space-between;
align-items: center;
padding: 0 10px;
padding: 0 .1rem;
& > div {
display: flex;
justify-content: flex-start;
@ -502,7 +502,7 @@
}
.select2 {
.name {
width: 170px;
width: 1.7rem;
color: #0058e1;
font-weight: 600;
}
@ -510,7 +510,7 @@
color: #0058e1;
font-weight: 600;
}
padding: 0 10px 0 0;
padding: 0 .1rem 0 0;
}
}
}

View File

@ -0,0 +1,730 @@
<template>
<home-header></home-header>
<div class="survey-left" @click="hidePop()">
<div ref="cityMap" class="city-map-content-echarts"></div>
<div class="box xha" v-show="xhaFlag">
<div class="top">
<span>西海岸</span>
<span>
跳转至该站点
<i></i>
</span>
</div>
<div class="bottom">
<div class="item">
<span>基础设施</span>
<i></i>
<span>35282</span>
</div>
<div class="item">
<span>数据资源</span>
<i></i>
<span>11</span>
</div>
<div class="item">
<span>应用资源</span>
<i></i>
<span>23</span>
</div>
<div class="item">
<span>组件服务</span>
<i></i>
<span>8</span>
</div>
</div>
<div class="zx"></div>
</div>
<div class="box lsq" v-show="lsqFlag">
<div class="top">
<span>崂山区</span>
<span>
跳转至该站点
<i></i>
</span>
</div>
<div class="bottom">
<div class="item">
<span>基础设施</span>
<i></i>
<span>20135</span>
</div>
<div class="item">
<span>数据资源</span>
<i></i>
<span>857</span>
</div>
<div class="item">
<span>应用资源</span>
<i></i>
<span>28</span>
</div>
</div>
<div class="zx"></div>
</div>
</div>
<ability-to-recommend-bottom></ability-to-recommend-bottom>
</template>
<script setup>
import { ref, onMounted } from 'vue'
import HomeHeader from '@/views/home/components/header'
import AbilityToRecommendBottom from '@/views/home/components/AbilityToRecommendBottom'
import geoJson from '/public/static/echartsMapJson/qingdao.json'
// const loadedDataUrl = '/public/static/echartsMapJson/qingdao.json'
const echarts = require('echarts')
const xhaFlag = ref(false)
const lsqFlag = ref(false)
const areaMenuList = ref([
//
// {
// name: '',
// code: 'shinan',
// className: 'classsn',
// value: 0,
// },
{
name: '市北区',
code: 'shibei',
className: 'classsb',
value: 0,
},
{
name: '西海岸',
code: 'xihaian',
className: 'classxha',
value: 0.2,
},
{
name: '崂山区',
code: 'laoshan',
className: 'classls',
value: 0.2,
},
{
name: '李沧区',
code: 'licang',
className: 'classlc',
value: 0,
},
{
name: '城阳区',
code: 'chengyang',
className: 'classcy',
value: 0,
},
{
name: '即墨区',
code: 'jimo',
className: 'classjm',
value: 0,
},
{
name: '胶州市',
code: 'jiaozhou',
className: 'classjz',
value: 0,
},
{
name: '平度市',
code: 'pingdu',
className: 'classpd',
value: 0,
},
{
name: '莱西市',
code: 'laixi',
className: 'classlx',
value: 0,
},
])
let option = {}
let myChart = {}
//
const initMap = () => {
const center = geoJson.features.map((item) => {
const geoAreaName = item.properties.name // geo
return {
name: geoAreaName,
coord: item.properties.centroid,
}
})
// map
var geoCoordMap = {}
center.forEach((val) => {
geoCoordMap[val.name] = [val.coord[0], val.coord[1]]
if (val.name === '西海岸') {
geoCoordMap[val.name] = [
val.coord[0] - 0.057495,
val.coord[1] - 0.119879,
]
} else if (val.name === '市北区') {
geoCoordMap[val.name] = [val.coord[0], val.coord[1]]
} else if (val.name === '市南区') {
geoCoordMap[val.name] = [120.364482, 36.065671]
}
})
console.log('所有坐标===============>', geoCoordMap)
//
var customerBatteryCityData = []
areaMenuList.value.forEach((val) => {
customerBatteryCityData.push({ name: val.name, value: val.num })
})
myChart = echarts.init(
document.querySelectorAll('.city-map-content-echarts')[0]
)
echarts.registerMap('qingdao', geoJson)
const img = new Image()
img.src = '/src/assets/home/map-piece.png'
const imgActive = new Image()
imgActive.src = '/src/assets/home/map-piece-active.png'
option = {
visualMap: {
//
min: 0,
max: 1,
calculable: true,
show: false,
color: ['#f44336', '#fc9700', '#ffde00', '#fff'],
textStyle: {
color: '#fff',
},
},
geo: [
{
map: 'qingdao',
roam: false, //
aspectScale: 0.8,
zoom: 1.1, //
top: 50,
itemStyle: {
borderColor: '#72ccff',
borderWidth: 2,
areaColor: {
image: img,
repeat: 'repeat',
},
},
emphasis: {
itemStyle: {
areaColor: {
image: imgActive,
repeat: 'repeat',
},
borderWidth: 2,
},
label: {
color: '#fff',
},
},
regions: [
{
name: '市南区',
itemStyle: {
areaColor: {
image: imgActive,
repeat: 'repeat',
},
},
},
],
z: 2,
silent: true,
},
],
series: [
{
type: 'scatter',
coordinateSystem: 'geo',
z: 5,
symbolSize: [0.1, 0.1],
data: [
// {
// city: '',
// value: [120.364482, 36.065671],
// },
],
},
//
{
type: 'map',
mapType: 'qingdao',
geoIndex: -1,
aspectScale: 0.8,
zoom: 1.1, //
top: 55,
z: 1,
itemStyle: {
areaColor: '#1e7dc0',
borderColor: '#72ccff',
borderWidth: 2,
},
silent: true,
tooltip: {
show: false,
},
},
{
geoIndex: 0,
// coordinateSystem: 'geo',
showLegendSymbol: true,
type: 'map',
roam: true,
label: {
normal: {
show: false,
textStyle: {
color: '#fff',
},
},
emphasis: {
show: false,
textStyle: {
color: '#fff',
},
},
},
itemStyle: {
normal: {
borderColor: '#2ab8ff',
borderWidth: 1.5,
areaColor: '#12235c',
},
emphasis: {
areaColor: '#2AB8FF',
borderWidth: 0,
color: 'red',
},
},
map: 'qingdao', // 使
data: customerBatteryCityData,
// data: this.difficultData //
},
],
}
const convertData = function (data) {
let res = []
for (let i = 0; i < data.length; i++) {
let dataItem = data[i]
if (dataItem.name === '西海岸' || dataItem.name === '崂山区') {
let fromCoord = geoCoordMap[dataItem.name]
let toCoord = [120.364482, 36.065671]
if (fromCoord && toCoord) {
res.push([
{
coord: fromCoord,
value: dataItem.value,
},
{
coord: toCoord,
},
])
}
}
}
return res
}
const convertData2 = function (data) {
let res = []
for (let i = 0; i < data.length; i++) {
let dataItem = data[i]
if (dataItem.name === '西海岸' || dataItem.name === '崂山区') {
let fromCoord = [120.364482, 36.065671]
let toCoord = geoCoordMap[dataItem.name]
if (fromCoord && toCoord) {
res.push([
{
coord: fromCoord,
value: dataItem.value,
},
{
coord: toCoord,
},
])
}
}
}
return res
}
const notShowData = function (data) {
let res = []
for (let i = 0; i < data.length; i++) {
let dataItem = data[i]
if (dataItem.name !== '西海岸' && dataItem.name !== '崂山区') {
let fromCoord = [120.364482, 36.065671]
let toCoord = geoCoordMap[dataItem.name]
if (fromCoord && toCoord) {
res.push([
{
coord: fromCoord,
value: dataItem.value,
},
{
coord: toCoord,
},
])
}
}
}
return res
}
;[['市南区', areaMenuList.value]].forEach(function (item) {
option.series.push(
//
{
type: 'lines',
zlevel: 2,
effect: {
show: true,
period: 4, //
trailLength: 0.02, //[0,1]
symbol: 'arrow', //
symbolSize: 5, //
},
lineStyle: {
normal: {
width: 1, //线
opacity: 1, //线
curveness: 0.3, //线
},
},
data: convertData(item[1]),
},
{
type: 'lines',
zlevel: 2,
effect: {
show: true,
period: 4, //
trailLength: 0.02, //[0,1]
symbol: 'arrow', //
symbolSize: 5, //
},
lineStyle: {
normal: {
width: 1, //线
opacity: 1, //线
curveness: -0.3, //线
},
},
data: convertData2(item[1]),
},
//
{
type: 'lines',
zlevel: 2,
effect: {
show: false,
period: 4, //
trailLength: 0.02, //[0,1]
symbol: 'arrow', //
symbolSize: 5, //
},
lineStyle: {
normal: {
width: 1, //线
opacity: 1, //线
curveness: -0.3, //线
},
},
data: notShowData(item[1]),
},
{
type: 'effectScatter',
coordinateSystem: 'geo',
zlevel: 2,
rippleEffect: {
//
period: 3, //
brushType: 'stroke', // stroke, fill
scale: 8, //
},
label: {
normal: {
show: false,
position: 'right', //
offset: [5, 0], //
formatter: function (params) {
//
return params.data.name
},
fontSize: 13,
},
emphasis: {
show: true,
},
},
symbol: 'circle',
symbolSize: function (val) {
return 5 + val[2] * 5 //
},
itemStyle: {
normal: {
show: false,
color: '#f00',
},
},
data: item[1].map(function (dataItem) {
return {
name: dataItem.name,
value: geoCoordMap[dataItem.name].concat([dataItem.value]),
}
}),
},
//
{
type: 'scatter',
coordinateSystem: 'geo',
zlevel: 2,
rippleEffect: {
period: 4,
brushType: 'stroke',
scale: 4,
},
label: {
normal: {
show: true,
position: 'bottom',
//offset:[5, 0],
color: '#6b5858',
formatter: '{b}',
textStyle: {
color: '#6b5858',
fontSize: 18,
fontWeight: 600,
},
},
emphasis: {
show: true,
color: '#f60',
},
},
symbol: 'image://' + require('@/assets/home/rb.png'),
symbolSize: 40,
symbolOffset: [0, -25],
data: [
{
name: '',
value: geoCoordMap[item[0]].concat([10]),
},
],
},
//
{
type: 'scatter',
coordinateSystem: 'geo',
zlevel: 2,
rippleEffect: {
period: 4,
brushType: 'stroke',
scale: 4,
},
label: {
normal: {
show: true,
position: 'bottom',
//offset:[5, 0],
color: '#fbd500',
formatter: '{b}',
textStyle: {
color: '#fbd500',
fontSize: 18,
fontWeight: 600,
},
},
emphasis: {
show: true,
color: '#f60',
},
},
symbol: 'image://' + require('@/assets/home/yb.png'),
symbolSize: 40,
symbolOffset: [0, -20],
data: [
{
name: '西海岸',
value: geoCoordMap['西海岸'].concat([10]),
},
],
},
{
type: 'scatter',
coordinateSystem: 'geo',
zlevel: 2,
rippleEffect: {
period: 4,
brushType: 'stroke',
scale: 4,
},
label: {
normal: {
show: true,
position: 'bottom',
//offset:[5, 0],
color: '#fbd500',
formatter: '{b}',
textStyle: {
color: '#fbd500',
fontSize: 18,
fontWeight: 600,
},
},
emphasis: {
show: true,
color: '#f60',
},
},
symbol: 'image://' + require('@/assets/home/yb.png'),
symbolSize: 40,
symbolOffset: [0, -20],
data: [
{
name: '崂山区',
value: geoCoordMap['崂山区'].concat([10]),
},
],
}
)
})
console.log('echarts配置==================>', option)
myChart.setOption(option)
}
const hidePop = () => {
console.log('取消弹窗')
xhaFlag.value = false
lsqFlag.value = false
}
onMounted(() => {
initMap()
myChart.on('mouseover', function () {
myChart.dispatchAction({
type: 'downplay',
})
})
myChart.on('click', function (params) {
console.log(params)
params.event.event.stopPropagation()
switch (params.name) {
case '西海岸':
xhaFlag.value = !xhaFlag.value
lsqFlag.value = false
break
case '崂山区':
lsqFlag.value = !lsqFlag.value
xhaFlag.value = false
break
default:
break
}
})
})
</script>
<style lang="less" scoped>
.survey-left {
margin-top: 0.64rem;
width: 19.2rem;
height: 7.5rem;
display: flex;
flex-direction: column;
position: relative;
background: url('~@/assets/home/echarts_bg.png') no-repeat;
background-size: 100%;
.city-map-content-echarts {
width: 11rem;
height: 7rem;
margin: 0rem auto;
}
.box {
position: absolute;
width: 5.18rem;
height: 2.26rem;
padding: 0.1rem 0.35rem 0;
background: url('~@/assets/home/box_bg.png') no-repeat;
background-size: 100%;
.top {
display: flex;
justify-content: space-between;
align-items: center;
border-bottom: 1px solid rgba(161, 160, 161, 0.637);
font-size: 0.22rem;
font-weight: 800;
span:nth-of-type(1) {
font-size: 0.22rem;
font-weight: 800;
}
span:nth-of-type(2) {
cursor: pointer;
i {
display: inline-block;
width: 0.14rem;
height: 0.14rem;
background: url('~@/assets/home/tz.png') no-repeat;
background-size: 100%;
}
}
}
.bottom {
display: flex;
justify-content: space-around;
margin-top: 0.1rem;
font-size: 0.22rem;
font-weight: 800;
.item {
display: flex;
flex-direction: column;
justify-content: center;
align-items: center;
i {
display: inline-block;
width: 0.28rem;
height: 0.28rem;
margin: 0.05rem 0;
}
}
.item:nth-of-type(1) > i {
background: url('~@/assets/home/map_jcss.png') no-repeat center;
background-size: contain;
}
.item:nth-of-type(2) > i {
background: url('~@/assets/home/map_sjzy.png') no-repeat center;
background-size: contain;
}
.item:nth-of-type(3) > i {
background: url('~@/assets/home/map_yyzy.png') no-repeat center;
background-size: contain;
}
.item:nth-of-type(4) > i {
background: url('~@/assets/home/map_zjfw.png') no-repeat center;
background-size: contain;
}
}
.zx {
width: 1.5rem;
height: 0.66rem;
background: url('~@/assets/home/zx.png') no-repeat;
background-size: 100%;
position: relative;
top: -0.9rem;
left: -1.84rem;
}
}
.xha {
top: 5.05rem;
left: 2.5rem;
background: url('~@/assets/home/box_bg2.png') no-repeat;
background-size: 100%;
.zx {
background: url('~@/assets/home/zx2.png') no-repeat;
top: -0.9rem;
left: 2.82rem;
}
}
.lsq {
top: 3.7rem;
left: 11.95rem;
}
}
</style>

View File

@ -116,28 +116,28 @@
src: url('~@/assets/newHome/font/header-typeface.ttf');
}
.home-header {
height: 64px;
height: 0.64rem;
width: 100%;
display: flex;
justify-content: center;
align-items: center;
padding: 0 210px;
padding: 0 2.1rem;
background-color: rgba(0, 0, 25, 0.7);
position: fixed;
z-index: 1000;
div {
color: #fff;
font-size: 16px;
font-size: 0.16rem;
}
.name {
font-size: 22px;
font-size: 0.22rem;
font-family: header-typeface;
margin-right: 20px;
margin-right: 0.2rem;
}
.nav {
width: 144px;
height: 64px;
line-height: 64px;
width: 1.44rem;
height: 0.64rem;
line-height: 0.64rem;
text-align: center;
}
.nav:hover {
@ -150,32 +150,32 @@
color: #fff !important;
}
.info {
width: 200px;
margin-left: 20px;
width: 2rem;
margin-left: 0.2rem;
display: flex;
justify-content: center;
.img {
width: 30px;
height: 30px;
border-radius: 10px;
width: 0.3rem;
height: 0.3rem;
border-radius: 0.1rem;
background: url('~@/assets/newHome/user.png') no-repeat;
background-size: 100%;
}
span {
height: 30px;
line-height: 30px;
margin-left: 8px;
margin-right: 6px;
font-size: 16px;
height: 0.3rem;
line-height: 0.3rem;
margin-left: 0.08rem;
margin-right: 0.06rem;
font-size: 0.16rem;
}
.name {
max-width: 75px;
max-width: 0.75rem;
overflow: hidden;
}
.out {
cursor: pointer;
padding: 0 16px;
border-left: 1px solid #666;
padding: 0 0.16rem;
border-left: 0.01rem solid #666;
}
}
}

View File

@ -114,7 +114,7 @@
display: flex;
justify-content: center;
background: url('~@/assets/newHome/recommendation-ability-bg.png') no-repeat;
background-size: contain;
background-size: cover;
.recommendation-ability-son {
width: 13rem;
left: 50%;

View File

@ -73,7 +73,7 @@
</div>
<div class="ability-to-type">
<div class="title">能力类型选择</div>
<div class="content">
<div class="ability-to-type-content">
<div
v-for="item in abilityToType"
:key="item"
@ -93,7 +93,7 @@
v-if="abilityToTypeFunctionData == '组件服务'"
>
<div class="title">组件类型选择</div>
<div class="content">
<div class="component-type-content">
<!-- <a-checkbox-group
v-model:value="value1"
name="checkboxgroup"
@ -118,6 +118,7 @@
</template>
<script setup>
import { gongZuoZhuangTai } from '@/api/home.js'
import { message } from 'ant-design-vue'
import { ref, watch } from 'vue'
import { useRouter } from 'vue-router'
import { useStore } from 'vuex'
@ -155,7 +156,6 @@
}
let componentTypeValueOld = ref('')
function componentTypeValueFunction(item) {
debugger
if (componentTypeValueOld.value != item) {
componentTypeValue.value = item
componentTypeValueOld.value = item
@ -167,9 +167,17 @@
const handleOk = (e) => {
let snum = ref({})
if (abilityToTypeFunctionData.value == '组件服务') {
snum.value = {
abilityToType: abilityToTypeFunctionData.value,
componentTypeValue: componentTypeValue.value,
if (!componentTypeValue.value || componentTypeValue.value == '') {
message.error('请选择组件类型!')
return
} else if (componentTypeValue.value !== '智能算法') {
message.error('功能开发中!')
return
} else {
snum.value = {
abilityToType: abilityToTypeFunctionData.value,
componentTypeValue: componentTypeValue.value,
}
}
} else {
snum.value = {
@ -245,13 +253,14 @@
position: fixed;
left: 50%;
top: 50%;
margin-left: -260px;
margin-top: -144px;
font-size: 14px;
margin-left: -2.6rem;
margin-top: -1.44rem;
font-size: 0.14rem;
font-weight: 500;
.ant-radio-inner {
height: 16px;
width: 16px;
height: 0.16rem;
width: 0.16rem;
}
.ant-radio-inner::after {
background-color: unset;
@ -260,46 +269,54 @@
background-position: center;
}
.ant-modal-content {
border-radius: 10px;
border-radius: 0.1rem;
.ability-to-type,
.component-type {
display: flex;
margin-top: 20px;
margin-top: 0.2rem;
.title {
white-space: nowrap;
margin-right: 20px;
margin-right: 0.2rem;
display: flex;
align-items: center;
height: 26px;
height: 0.26rem;
}
.content {
.component-type-content {
width: 100%;
height: unset;
border: unset;
background: unset;
.ant-radio-group {
display: grid;
grid-template-columns: 1fr 1fr 1fr;
grid-gap: 15px;
grid-gap: 0.15rem;
}
}
}
.ability-to-type {
.content {
.ability-to-type-content {
display: grid;
grid-template-columns: 1fr 1fr 1fr;
height: unset;
border: unset;
background: unset;
div {
margin-right: 15px;
margin-right: 0.15rem;
cursor: pointer;
font-size: 14px;
width: 90px;
height: 26px;
border-radius: 13px;
font-size: 0.14rem;
width: 0.9rem;
height: 0.26rem;
border-radius: 0.13rem;
color: #333333;
background: #f5f5f5;
border: 1px #cccccc solid;
border: 0.01rem #cccccc solid;
display: flex;
justify-content: center;
align-items: center;
font-weight: 500;
}
.ability-to-type-down {
background: #0087ff;
color: #fff;
@ -307,26 +324,29 @@
}
}
}
.ant-modal-title {
display: flex;
align-items: center;
}
.ant-modal-footer {
border: 0;
text-align: center;
padding-bottom: 20px;
padding-bottom: 0.2rem;
button {
margin-right: 20px;
border-radius: 8px;
margin-right: 0.2rem;
border-radius: 0.08rem;
}
}
.showBg {
height: 24px;
width: 24px;
height: 0.24rem;
width: 0.24rem;
background: url('~@/assets/home/shenqing.png') no-repeat;
background-size: cover;
background-position: center;
margin-right: 10px;
margin-right: 0.1rem;
}
}
</style>
@ -335,200 +355,213 @@
display: flex;
flex-direction: column;
align-items: center;
padding-bottom: 80px;
padding-top: 78px;
padding-bottom: 0.8rem;
padding-top: 0.78rem;
.title {
font-size: 30px;
font-size: 0.3rem;
font-family: 'convergence-typeface';
display: flex;
flex-direction: column;
align-items: center;
margin-bottom: 32px;
.title-son {
width: 34px;
height: 3px;
background: #0058e1;
border-radius: 1px;
margin-top: 18px;
}
}
.content {
width: 1300px;
height: 480px;
display: flex;
padding-left: 20px;
.content-empty {
height: 220px;
padding-top: 49px;
}
}
.content > div {
background: #f3f5f9;
border: #eaedf2 1px solid;
}
.content > div:hover {
border-radius: 2px;
border: 1px solid #0058e1;
box-shadow: 0px 8px 20px rgba(0, 88, 225, 0.3);
}
.content-miaoshui {
display: flex;
flex-direction: column;
padding-top: 20px;
align-items: center;
padding-bottom: 10px;
.content-miaoshui-title {
padding-left: 5px;
padding-right: 5px;
font-size: 18px;
font-weight: bold;
height: 30px;
overflow: hidden;
text-overflow: ellipsis;
display: -webkit-box;
-webkit-line-clamp: 1;
-webkit-box-orient: vertical;
margin-bottom: 12px;
word-break: break-all;
}
.content-miaoshui-content {
height: 120px;
width: 298px;
margin: 12px 10px 10px 10px;
font-family: text-typeface;
font-size: 14px;
line-height: 20px;
overflow: hidden;
text-overflow: ellipsis;
display: -webkit-box;
-webkit-line-clamp: 6;
-webkit-box-orient: vertical;
margin-bottom: 12px;
word-break: break-all;
cursor: pointer;
}
}
.shijain {
width: 100%;
display: flex;
justify-content: space-between;
align-items: bottom;
margin-right: 16px;
margin-left: 16px;
div:first-child {
margin-left: 16px;
}
}
.shijain-content-bootom {
margin-right: 16px;
width: 80px;
height: 24px;
text-align: center;
border: 1px solid #0058e1;
cursor: pointer;
color: #0058e1;
}
.shijain-content-bootom:hover {
background: rgba(0, 88, 225, 0.3);
}
.content > div > div {
height: 240px;
width: 100%;
}
.one {
height: 240px;
display: flex;
flex-direction: column;
justify-content: center;
align-items: center;
background-size: 100%;
padding-top: 15px;
.shijain {
margin-top: 20px;
}
:deep(.ant-imag) {
text-align: center;
}
:deep(.ant-image-img) {
height: 210px;
text-align: center;
justify-content: center;
align-items: center;
width: 100%;
max-width: 298px;
}
}
.bottom {
height: 24px;
font-size: 16px;
width: 100px;
margin-top: 40px;
cursor: pointer;
text-align: center;
color: #000000;
.gengduo {
display: inline-block;
margin-left: 4px;
width: 10px;
height: 10px;
background: url('~@/assets/newHome/gd2.png') no-repeat;
background-position: center;
}
}
.bottom:hover {
border-radius: 2px;
background-color: rgba(1, 102, 255, 0.1);
}
.content > div {
height: 480px;
width: 310px;
margin-right: 20px;
}
.fixedmount {
height: 150px;
display: flex;
position: fixed;
bottom: 256px;
right: 190px;
z-index: 10;
flex-direction: column;
justify-content: space-between;
align-items: center;
}
.fixedmount div {
width: 70px;
height: 70px;
border-radius: 4px;
border: 1px #94aac9 solid;
display: flex;
flex-direction: column;
// justify-content: center;
align-items: center;
padding-top: 13px;
position: relative;
cursor: pointer;
background: #e3edfc;
}
.fixedmount div p:nth-child(2) {
position: absolute;
bottom: 0px;
height: 14px;
font-size: 14px;
line-height: 14px;
color: #000000;
// margin-top: 8px;
}
.fixedmount div:nth-child(1) p:nth-child(1) {
height: 24px;
width: 24px;
background: url('~@/assets/home/shenqing.png') no-repeat;
background-size: cover;
background-position: center;
}
.fixedmount div:nth-child(2) p:nth-child(1) {
height: 24px;
width: 24px;
background: url('~@/assets/home/shangjia.png') no-repeat;
margin-bottom: 0.32rem;
// width: 0.34rem;
border-radius: 0.01rem;
margin-top: 0.18rem;
}
}
.content {
width: 13rem;
height: 4.8rem;
display: flex;
// padding-left: 0.2rem;
.content-empty {
height: 2.2rem;
padding-top: 0.49rem;
}
background: #f3f5f9;
border: #eaedf2 0.01rem solid;
}
.content > div:hover {
border-radius: 0.02rem;
border: 0.01rem solid #0058e1;
box-shadow: 0rem 0.08rem 0.2rem rgba(0, 88, 225, 0.3);
}
.content-miaoshui {
display: flex;
flex-direction: column;
padding-top: 0.2rem;
align-items: center;
padding-bottom: 0.1rem;
.content-miaoshui-title {
padding-left: 0.05rem;
padding-right: 0.05rem;
font-size: 0.18rem;
font-weight: bold;
height: 0.3rem;
overflow: hidden;
text-overflow: ellipsis;
display: -webkit-box;
-webkit-line-clamp: 1;
-webkit-box-orient: vertical;
margin-bottom: 0.12rem;
word-break: break-all;
}
.content-miaoshui-content {
height: 1.2rem;
width: 2.98rem;
margin: 0.12rem 0.1rem 0.1rem 0.1rem;
font-family: text-typeface;
font-size: 0.14rem;
line-height: 0.2rem;
overflow: hidden;
text-overflow: ellipsis;
display: -webkit-box;
-webkit-line-clamp: 6;
-webkit-box-orient: vertical;
margin-bottom: 0.12rem;
word-break: break-all;
cursor: pointer;
}
}
.shijain {
width: 100%;
display: flex;
justify-content: space-between;
align-items: bottom;
margin-right: 0.16rem;
margin-left: 0.16rem;
div:first-child {
margin-left: 0.16rem;
}
}
.shijain-content-bootom {
margin-right: 0.16rem;
width: 0.8rem;
height: 0.24rem;
text-align: center;
border: 0.01rem solid #0058e1;
cursor: pointer;
color: #0058e1;
}
.shijain-content-bootom:hover {
background: rgba(0, 88, 225, 0.3);
}
.content > div > div {
height: 2.4rem;
width: 100%;
}
.one {
height: 2.4rem;
display: flex;
flex-direction: column;
justify-content: center;
align-items: center;
background-size: 100%;
padding-top: 0.15rem;
.shijain {
margin-top: 0.2rem;
}
:deep(.ant-imag) {
text-align: center;
}
:deep(.ant-image-img) {
height: 2.1rem;
text-align: center;
justify-content: center;
align-items: center;
width: 100%;
max-width: 2.98rem;
}
}
.bottom {
height: 0.24rem;
font-size: 0.16rem;
width: 1rem;
margin-top: 0.4rem;
cursor: pointer;
text-align: center;
color: #000000;
.gengduo {
display: inline-block;
margin-left: 0.04rem;
width: 0.1rem;
height: 0.1rem;
background: url('~@/assets/newHome/gd2.png') no-repeat;
background-position: center;
}
}
.bottom:hover {
border-radius: 0.02rem;
background-color: rgba(1, 102, 255, 0.1);
}
.content > div {
height: 4.8rem;
width: 3.1rem;
margin-right: 0.2rem;
}
.fixedmount {
height: 1.5rem;
display: flex;
position: fixed;
bottom: 2.56rem;
right: 1.9rem;
z-index: 10;
flex-direction: column;
justify-content: space-between;
align-items: center;
}
.fixedmount div {
width: 0.7rem;
height: 0.7rem;
border-radius: 0.04rem;
border: 0.01rem #94aac9 solid;
display: flex;
flex-direction: column;
// justify-content: center;
align-items: center;
padding-top: 0.13rem;
position: relative;
cursor: pointer;
background: #e3edfc;
}
.fixedmount div p:nth-child(2) {
position: absolute;
bottom: 0rem;
height: 0.14rem;
font-size: 0.14rem;
line-height: 0.14rem;
color: #000000;
// margin-top: .08rem;
}
.fixedmount div:nth-child(1) p:nth-child(1) {
height: 0.24rem;
width: 0.24rem;
background: url('~@/assets/home/shenqing.png') no-repeat;
background-size: cover;
background-position: center;
}
.fixedmount div:nth-child(2) p:nth-child(1) {
height: 0.24rem;
width: 0.24rem;
background: url('~@/assets/home/shangjia.png') no-repeat;
}
</style>

View File

@ -170,7 +170,10 @@
getTopCategory().then((res) => {
console.log('编目一级=============>', res.data)
res.data.data.forEach((val) => {
tabList.value.push(val.name)
// tabList.value.push(val.name)
if (val.name == '应用资源' || val.name == '组件服务') {
tabList.value.push(val.name)
}
})
})
}

View File

@ -12,14 +12,14 @@
/>
<a-button
type="primary"
style="width: 90px; height: 36px; margin-left: 10px"
@click="nenglishangjia"
style="width: 0.9rem; height: 0.36rem; margin-left: 0.1rem"
@click="showModal2"
>
能力上架
</a-button>
<a-button
type="primary"
style="width: 90px; height: 36px; margin-left: 10px"
style="width: 0.9rem; height: 0.36rem; margin-left: 0.1rem"
@click="replacement"
>
重置
@ -36,7 +36,7 @@
{{ item }}
</div>
</div>
<div class="tab" style="margin-top: 10px">
<div class="tab" style="margin-top: 0.1rem">
<span>能力状态</span>
<div
:class="tabIndex2 == index ? 'tabclass' : ' '"
@ -96,7 +96,7 @@
width="80"
height="80"
v-if="item.delFlag == 4 || item.delFlag == 5"
style="position: absolute; top: 20px; left: 10px"
style="position: absolute; top: 0.2rem; left: 0.1rem"
>
<path
d="M955.22053 256C813.82053 11.2 500.72053-72.6 255.92053 68.8S-72.67947 523.2 68.72053 768 523.22053 1096.6 768.02053 955.2c244.7-141.2 328.6-454.1 187.4-698.8 0-0.1-0.1-0.3-0.2-0.4zM762.02053 944.7c-239 138.1-544.8 56.2-682.9-182.8S22.92053 217.1 261.92053 79.1s544.8-56.2 682.9 182.8c137.9 239 56.1 544.6-182.8 682.8z"
@ -146,7 +146,7 @@
<a-modal
v-model:visible="detailsVisible"
:title="tabname"
style="width: 900px"
style="width: 9rem"
:footer="null"
destroyOnClose="true"
:maskClosable="false"
@ -159,7 +159,7 @@
<a-modal
v-model:visible="increasedVisible"
:title="tabname"
style="width: 900px"
style="width: 9rem"
:footer="null"
destroyOnClose="true"
:maskClosable="false"
@ -174,12 +174,62 @@
>
<a-input v-model:value="reason" placeholder="请输入下架原因" />
</a-modal>
<a-modal
v-model:visible="visible2"
@ok="handleOk"
class="shangjia-class"
@cancel="handlecancel"
>
<div class="ant-modal-title" id="vcDialogTitle1">
<div class="showBg"></div>
能力上架申请
</div>
<div class="ability-to-type">
<div class="title">能力类型选择</div>
<div class="content">
<div
v-for="item in abilityToType"
:key="item"
@click="abilityToTypeFunction(item)"
:class="
abilityToTypeFunctionData == item ? 'ability-to-type-down' : ''
"
>
{{ item }}
</div>
</div>
</div>
<div
class="component-type"
v-if="abilityToTypeFunctionData == '组件服务'"
>
<div class="title">组件类型选择</div>
<div class="content">
<!-- <a-checkbox-group
v-model:value="value1"
name="checkboxgroup"
:options="componentType"
/> -->
<a-radio-group v-model:value="componentTypeValue">
<a-radio
@click="componentTypeValueFunction(item)"
v-for="item in componentType"
:key="item"
:value="item"
>
{{ item }}
</a-radio>
</a-radio-group>
</div>
</div>
</a-modal>
</div>
</template>
<script setup>
import { onMounted, reactive, ref } from 'vue'
import { useRouter } from 'vue-router'
import { message } from 'ant-design-vue'
// , reactive
import { wodepage, undercarriage } from '@/api/personalCenter'
import { getUserInfo } from '@/api/user'
@ -215,6 +265,58 @@
let name = ref('')
let tabIndex = ref(0)
let tabIndex2 = ref(-1)
const visible2 = ref(false)
const showModal2 = () => {
visible2.value = true
}
let componentTypeValue = ref('')
let abilityToTypeFunctionData = ref('组件服务')
function handlecancel() {
abilityToTypeFunctionData.value = '组件服务'
componentTypeValue.value = ''
}
function abilityToTypeFunction(item) {
abilityToTypeFunctionData.value = item
}
const handleOk = (e) => {
let snum = ref({})
if (abilityToTypeFunctionData.value == '组件服务') {
if (!componentTypeValue.value || componentTypeValue.value == '') {
message.error('请选择组件类型!')
return
} else if (componentTypeValue.value !== '智能算法') {
message.error('功能开发中!')
return
} else {
snum.value = {
abilityToType: abilityToTypeFunctionData.value,
componentTypeValue: componentTypeValue.value,
}
}
} else {
snum.value = {
abilityToType: abilityToTypeFunctionData.value,
}
}
const applypage = router.resolve({
path: '/nenglishangjia', //
query: snum.value,
})
window.open(applypage.href, '_blank')
visible.value = false
abilityToTypeFunctionData.value = '组件服务'
componentTypeValue.value = ''
console.log(e)
}
let abilityToType = ref(['组件服务', '应用资源'])
let componentType = ref([
'智能算法',
'GIS图层',
'开发组件',
'办公组件',
'业务组件',
'其他',
])
let tabname = ref('组件服务')
function tabqiehuan(item, index) {
// debugger
@ -333,11 +435,11 @@
const newpage = router.resolve({
path: '/nenglishangjia', //
})
const nenglishangjia = () => {
// debugger
window.open(newpage.href, '_blank')
// router.resolve('/nenglishangjia')
}
// const nenglishangjia = () => {
// // debugger
// window.open(newpage.href, '_blank')
// // router.resolve('/nenglishangjia')
// }
const handlePageSizeChange = (current, size) => {
page.value = current
limt.value = size
@ -377,88 +479,88 @@
<style scoped lang="less">
.on-the-right-side-of-the-list {
background: #ffffff;
padding: 20px 0px 30px 20px;
padding: 0.2rem 0rem 0.3rem 0.2rem;
position: absolute;
width: 1087px;
height: 810px;
top: 0px;
width: 10.87rem;
height: 8.1rem;
top: 0rem;
display: flex;
margin-top: 20px;
margin-top: 0.2rem;
flex-direction: column;
font-size: 16px;
font-size: 0.16rem;
justify-content: left;
.title {
font-size: 20px;
font-size: 0.2rem;
color: #000000;
font-family: 'Alibaba PuHuiTi';
font-weight: 500;
}
.sousuokuang {
margin: 20px 0px 21px 0px;
margin: 0.2rem 0rem 0.21rem 0rem;
.ant-input-search {
max-width: 490px;
max-width: 4.9rem;
}
:deep(.ant-input) {
width: 400px;
height: 36px;
font-size: 14px;
width: 4rem;
height: 0.36rem;
font-size: 0.14rem;
color: #b2b2b2;
background: #f5f5f5;
}
:deep(.ant-input-group-addon) {
display: inline-block;
margin-left: 10px;
margin-left: 0.1rem;
.ant-input-search-button {
width: 80px;
height: 36px;
border-radius: 4px;
font-size: 14px;
width: 0.8rem;
height: 0.36rem;
border-radius: 0.04rem;
font-size: 0.14rem;
}
}
}
.tab {
display: flex;
font-size: 14px;
font-size: 0.14rem;
color: #999999;
div {
width: 70px;
height: 24px;
border: 1px solid #cccccc;
border-radius: 12px;
margin-left: 10px;
width: 0.7rem;
height: 0.24rem;
border: 0.01rem solid #cccccc;
border-radius: 0.12rem;
margin-left: 0.1rem;
text-align: center;
color: #666666;
cursor: pointer;
}
.tabclass {
border: 1px solid #0087ff;
border: 0.01rem solid #0087ff;
color: #0087ff;
}
}
.content {
padding-right: 10px;
height: 510px;
padding-right: 0.1rem;
height: 5.1rem;
overflow: auto;
.content-body {
padding-bottom: 20px;
padding-top: 20px;
margin-right: 10px;
// height: 120px;
border-bottom: #cccccc 1px solid;
padding-bottom: 0.2rem;
padding-top: 0.2rem;
margin-right: 0.1rem;
// height: 1.20rem;
border-bottom: #cccccc 0.01rem solid;
position: relative;
.content-body-title {
font-size: 14px;
font-size: 0.14rem;
color: #333333;
font-family: 'Alibaba PuHuiTi';
font-weight: 500;
}
.content-body-content {
margin-top: 10px;
margin-bottom: 10px;
width: 720px;
margin-top: 0.1rem;
margin-bottom: 0.1rem;
width: 7.2rem;
.content-body-content-son {
line-height: 16px;
font-size: 12px;
line-height: 0.16rem;
font-size: 0.12rem;
width: 100%;
text-overflow: -o-ellipsis-lastline;
overflow: hidden;
@ -472,35 +574,35 @@
.content-body-bottom {
display: flex;
color: #cccccc;
font-size: 12px;
font-size: 0.12rem;
div:first-child {
margin-right: 30px;
margin-right: 0.3rem;
}
}
}
}
.bottom {
position: absolute;
bottom: 30px;
right: 20px;
bottom: 0.3rem;
right: 0.2rem;
}
.button {
position: absolute;
right: 20px;
top: 0px;
width: 96px;
right: 0.2rem;
top: 0rem;
width: 0.96rem;
// background: #0087ff;
cursor: pointer;
div {
margin-top: 20px;
height: 30px;
margin-top: 0.2rem;
height: 0.3rem;
background: #0087ff;
font-size: 14px;
font-size: 0.14rem;
color: #fff;
border-radius: 4px;
border-radius: 0.04rem;
text-align: center;
line-height: 30px;
line-height: 0.3rem;
}
.del {
background: #ccc;
@ -510,10 +612,101 @@
}
}
.button-state {
top: 60px;
top: 0.6rem;
}
.buttonAgree {
background-color: #49c988;
}
}
</style>
<style lang="less">
.shangjia-class {
position: fixed;
left: 50%;
top: 50%;
margin-left: -2.6rem;
margin-top: -1.44rem;
font-size: 0.14rem;
font-weight: 500;
.ant-radio-inner {
height: 0.16rem;
width: 0.16rem;
}
.ant-radio-inner::after {
background-color: unset;
background: url('~@/assets/personalCenter/xuanzhong.png') no-repeat;
background-size: cover;
background-position: center;
}
.ant-modal-content {
border-radius: 0.1rem;
.ability-to-type,
.component-type {
display: flex;
margin-top: 0.2rem;
.title {
white-space: nowrap;
margin-right: 0.2rem;
display: flex;
align-items: center;
height: 0.26rem;
}
.content {
width: 100%;
.ant-radio-group {
display: grid;
grid-template-columns: 1fr 1fr 1fr;
grid-gap: 0.15rem;
}
}
}
.ability-to-type {
.content {
display: grid;
grid-template-columns: 1fr 1fr 1fr;
div {
margin-right: 0.15rem;
cursor: pointer;
font-size: 0.14rem;
width: 0.9rem;
height: 0.26rem;
border-radius: 0.13rem;
color: #333333;
background: #f5f5f5;
border: 0.01rem #cccccc solid;
display: flex;
justify-content: center;
align-items: center;
font-weight: 500;
}
.ability-to-type-down {
background: #0087ff;
color: #fff;
}
}
}
}
.ant-modal-title {
display: flex;
align-items: center;
}
.ant-modal-footer {
border: 0;
text-align: center;
padding-bottom: 0.2rem;
button {
margin-right: 0.2rem;
border-radius: 0.08rem;
}
}
.showBg {
height: 0.24rem;
width: 0.24rem;
background: url('~@/assets/home/shenqing.png') no-repeat;
background-size: cover;
background-position: center;
margin-right: 0.1rem;
}
}
</style>

View File

@ -11,7 +11,7 @@
/>
<a-button
type="primary"
style="width: 80px; height: 36px; margin-left: 10px"
style="width: 0.8rem; height: 0.36rem; margin-left: 0.1rem"
@click="clean"
>
重置
@ -62,7 +62,7 @@
width="50"
height="50"
v-if="item.delFlag == 4 || item.delFlag == 5"
style="position: absolute; top: 0; left: 100px"
style="position: absolute; top: 0; left: 1rem"
>
<path
d="M955.22053 256C813.82053 11.2 500.72053-72.6 255.92053 68.8S-72.67947 523.2 68.72053 768 523.22053 1096.6 768.02053 955.2c244.7-141.2 328.6-454.1 187.4-698.8 0-0.1-0.1-0.3-0.2-0.4zM762.02053 944.7c-239 138.1-544.8 56.2-682.9-182.8S22.92053 217.1 261.92053 79.1s544.8-56.2 682.9 182.8c137.9 239 56.1 544.6-182.8 682.8z"
@ -130,14 +130,14 @@
>
<a-button
type="primary"
style="width: 70px; height: 32px; margin-left: 10px"
style="width: 0.7rem; height: 0.32rem; margin-left: 0.1rem"
>
删除
</a-button>
</a-popconfirm>
<a-button
type="primary"
style="width: 70px; height: 32px; margin-left: 10px"
style="width: 0.7rem; height: 0.32rem; margin-left: 0.1rem"
@click="collection"
>
收藏
@ -151,7 +151,7 @@
</p>
<a-button
type="primary"
style="width: 100px; height: 32px; margin-left: 30px"
style="width: 1rem; height: 0.32rem; margin-left: 0.3rem"
@click="apply"
>
一键申请
@ -227,7 +227,9 @@
getTopCategory().then((res) => {
console.log('编目一级=============>', res.data)
res.data.data.forEach((val) => {
tabList.value.push(val.name)
if (val.name == '应用资源' || val.name == '组件服务') {
tabList.value.push(val.name)
}
})
})
}
@ -431,23 +433,23 @@
</script>
<style lang="less" scoped>
.ant-list {
height: 540px;
height: 5.4rem;
overflow-y: scroll;
.ant-list-item-meta {
align-items: center;
:deep(.ant-list-item-meta-avatar) {
padding-left: 20px;
margin-right: 30px;
padding-left: 0.2rem;
margin-right: 0.3rem;
}
.time {
margin-left: 30px;
font-size: 12px;
margin-left: 0.3rem;
font-size: 0.12rem;
color: #ccc;
}
:deep(.ant-list-item-meta-description) {
max-height: 44px;
max-height: 0.44rem;
overflow: hidden;
margin-right: 10px;
margin-right: 0.1rem;
}
}
}
@ -455,12 +457,12 @@
width: 0 !important;
}
.bottom {
margin: 10px;
margin: 0.1rem;
display: flex;
justify-content: space-between;
align-items: center;
.left span {
margin-left: 10px;
margin-left: 0.1rem;
}
.right {
display: flex;
@ -469,63 +471,63 @@
color: #0087ff;
}
.num {
font-size: 20px;
font-size: 0.2rem;
}
button {
margin-bottom: 10px;
margin-bottom: 0.1rem;
}
}
}
.title {
font-size: 20px;
font-size: 0.2rem;
color: #000000;
font-family: 'Alibaba PuHuiTi';
font-weight: 500;
margin-top: 20px;
margin-left: 20px;
margin-top: 0.2rem;
margin-left: 0.2rem;
}
.sousuokuang {
margin: 10px 0px 21px 20px;
margin: 0.1rem 0rem 0.21rem 0.2rem;
.ant-input-search {
max-width: 490px;
max-width: 4.9rem;
}
:deep(.ant-input) {
width: 400px;
height: 36px;
font-size: 14px;
width: 4rem;
height: 0.36rem;
font-size: 0.14rem;
color: #b2b2b2;
background: #f5f5f5;
}
:deep(.ant-input-group-addon) {
display: inline-block;
margin-left: 10px;
margin-left: 0.1rem;
.ant-input-search-button {
width: 80px;
height: 36px;
border-radius: 4px;
font-size: 14px;
width: 0.8rem;
height: 0.36rem;
border-radius: 0.04rem;
font-size: 0.14rem;
}
}
}
.tab {
margin-top: 10px;
margin-left: 20px;
margin-bottom: 10px;
margin-top: 0.1rem;
margin-left: 0.2rem;
margin-bottom: 0.1rem;
display: flex;
font-size: 14px;
font-size: 0.14rem;
color: #999999;
div {
width: 70px;
height: 24px;
border: 1px solid #cccccc;
border-radius: 12px;
margin-left: 10px;
width: 0.7rem;
height: 0.24rem;
border: 0.01rem solid #cccccc;
border-radius: 0.12rem;
margin-left: 0.1rem;
text-align: center;
color: #666666;
cursor: pointer;
}
.tabclass {
border: 1px solid #0087ff;
border: 0.01rem solid #0087ff;
color: #0087ff;
}
}

View File

@ -2,7 +2,7 @@
* @Author: hisense.liangjunhua
* @Date: 2022-06-01 17:49:38
* @LastEditors: hisense.liangjunhua
* @LastEditTime: 2022-06-13 14:55:22
* @LastEditTime: 2022-06-14 11:30:30
* @Description: 能力上架
-->
<template>
@ -16,13 +16,25 @@
import HomeHeader from '@/views/home/components/header'
import Algorithm from '@/views/capacityOnTheShelf/Algorithm'
import Application from '@/views/capacityOnTheShelf/Application'
import { useRouter } from 'vue-router'
import { ref } from 'vue'
const type = ref('algorithm')
const router = useRouter()
const type = ref('')
const abilityToType = router.currentRoute.value.query.abilityToType
if (abilityToType === '应用资源') {
type.value = 'application'
} else {
const componentTypeValue =
router.currentRoute.value.query.componentTypeValue
if (componentTypeValue === '智能算法') {
type.value = 'algorithm'
}
}
window.sessionStorage.setItem('preview', JSON.stringify({}))
</script>
<style scoped lang="less">
.the-new-release {
background: #f5f7fa;
height: 1080px;
height: 10.8rem;
}
</style>