Merge branch 'hi-ucs-dev' of http://192.168.124.50:3000/wuhongjian/hi-ucs into hi-ucs-dev

This commit is contained in:
wuhongjian 2022-08-09 17:10:48 +08:00
commit e026c97a73
28 changed files with 894 additions and 93 deletions

View File

@ -53,10 +53,8 @@
<div class="title"> <div class="title">
组合能力 组合能力
</div> </div>
<!-- <combine-ability v-model="dataForm" :dataForm="dataForm" @update="updateDataForm" type="基础设施" ref="jcssDom"
:getDataParams="getListParams['基础设施']"></combine-ability> -->
<InfrastructureModal v-model="dataForm" :dataForm="dataForm" @update="updateDataForm" type="基础设施" <InfrastructureModal v-model="dataForm" :dataForm="dataForm" @update="updateDataForm" type="基础设施"
ref="jcssDom"></InfrastructureModal> :modalType="modalType" ref="jcssDom"></InfrastructureModal>
<combine-ability v-model="dataForm" :dataForm="dataForm" @update="updateDataForm" type="数据资源" ref="sjzyDom" <combine-ability v-model="dataForm" :dataForm="dataForm" @update="updateDataForm" type="数据资源" ref="sjzyDom"
:getDataParams="getListParams['数据资源']"></combine-ability> :getDataParams="getListParams['数据资源']"></combine-ability>
<combine-ability v-model="dataForm" :dataForm="dataForm" @update="updateDataForm" type="组件服务" ref="zjfwDom" <combine-ability v-model="dataForm" :dataForm="dataForm" @update="updateDataForm" type="组件服务" ref="zjfwDom"
@ -298,14 +296,10 @@ export default {
file.type === 'image/jpeg' || file.type === 'image/jpeg' ||
file.type === 'image/jpg' || file.type === 'image/jpg' ||
file.type === 'image/png' file.type === 'image/png'
// const isLt2M = file.size / 1024 / 1024 < 2
if (!isImage) { if (!isImage) {
this.$message.error('上传头像图片只能是 jpg/png 格式!') this.$message.error('上传头像图片只能是 jpg/png 格式!')
} }
// if (!isLt2M) {
// this.$message.error(' 2MB!')
// }
return isImage return isImage
}, },
addUploadRemoveFile(file, fileList) { addUploadRemoveFile(file, fileList) {
@ -317,14 +311,9 @@ export default {
file.type === 'image/jpeg' || file.type === 'image/jpeg' ||
file.type === 'image/jpg' || file.type === 'image/jpg' ||
file.type === 'image/png' file.type === 'image/png'
// const isLt2M = file.size / 1024 / 1024 < 2
if (!isImage) { if (!isImage) {
this.$message.error('上传头像图片只能是 jpg/png 格式!') this.$message.error('上传头像图片只能是 jpg/png 格式!')
} }
// if (!isLt2M) {
// this.$message.error(' 2MB!')
// }
return isImage return isImage
}, },
editUploadRemoveFile(file, fileList) { editUploadRemoveFile(file, fileList) {

View File

@ -62,7 +62,7 @@
组合能力 组合能力
</div> </div>
<InfrastructureModal v-model="dataForm" :dataForm="dataForm" @update="updateDataForm" type="基础设施" <InfrastructureModal v-model="dataForm" :dataForm="dataForm" @update="updateDataForm" type="基础设施"
ref="jcssDom"></InfrastructureModal> :modalType="modalType" ref="jcssDom"></InfrastructureModal>
<combine-ability v-model="dataForm" :dataForm="dataForm" @update="updateDataForm" type="数据资源" ref="sjzyDom" <combine-ability v-model="dataForm" :dataForm="dataForm" @update="updateDataForm" type="数据资源" ref="sjzyDom"
:getDataParams="getListParams['数据资源']"></combine-ability> :getDataParams="getListParams['数据资源']"></combine-ability>
<combine-ability v-model="dataForm" :dataForm="dataForm" @update="updateDataForm" type="组件服务" ref="zjfwDom" <combine-ability v-model="dataForm" :dataForm="dataForm" @update="updateDataForm" type="组件服务" ref="zjfwDom"
@ -269,6 +269,7 @@ export default {
handler(newVal) { handler(newVal) {
this.addOrUpdateVisibleCopy = newVal; this.addOrUpdateVisibleCopy = newVal;
if (this.modalType == 'add' && newVal) { if (this.modalType == 'add' && newVal) {
localStorage.setItem('InfrastructureSearchData', JSON.stringify({}))
this.getDetail(this.dataForm) this.getDetail(this.dataForm)
} }
}, },
@ -361,6 +362,7 @@ export default {
), ),
// //
getDetail(data) { getDetail(data) {
console.log('data---详情--------->', data);
this.dataForm = data; this.dataForm = data;
this.$nextTick(() => { this.$nextTick(() => {
for (const key in this.refsParseArray) { for (const key in this.refsParseArray) {
@ -369,7 +371,7 @@ export default {
let _imgObj = data.fuseAttrList.find(v => v.attrType == '服务图片') || {}; let _imgObj = data.fuseAttrList.find(v => v.attrType == '服务图片') || {};
this.imageUrl = _imgObj.attrValue; this.imageUrl = _imgObj.attrValue;
// // --
Object.keys(this.getListParams).map(k => { Object.keys(this.getListParams).map(k => {
let arr = data.fuseResourceList.filter(v => v.type == k); let arr = data.fuseResourceList.filter(v => v.type == k);
let arr2 = []; let arr2 = [];
@ -391,14 +393,9 @@ export default {
file.type === 'image/jpeg' || file.type === 'image/jpeg' ||
file.type === 'image/jpg' || file.type === 'image/jpg' ||
file.type === 'image/png' file.type === 'image/png'
// const isLt2M = file.size / 1024 / 1024 < 2
if (!isImage) { if (!isImage) {
this.$message.error('上传头像图片只能是 jpg/png 格式!') this.$message.error('上传头像图片只能是 jpg/png 格式!')
} }
// if (!isLt2M) {
// this.$message.error(' 2MB!')
// }
return isImage return isImage
}, },
addUploadRemoveFile(file, fileList) { addUploadRemoveFile(file, fileList) {
@ -410,14 +407,10 @@ export default {
file.type === 'image/jpeg' || file.type === 'image/jpeg' ||
file.type === 'image/jpg' || file.type === 'image/jpg' ||
file.type === 'image/png' file.type === 'image/png'
// const isLt2M = file.size / 1024 / 1024 < 2
if (!isImage) { if (!isImage) {
this.$message.error('上传头像图片只能是 jpg/png 格式!') this.$message.error('上传头像图片只能是 jpg/png 格式!')
} }
// if (!isLt2M) {
// this.$message.error(' 2MB!')
// }
return isImage return isImage
}, },
editUploadRemoveFile(file, fileList) { editUploadRemoveFile(file, fileList) {
@ -429,7 +422,6 @@ export default {
return this.$message.error(res.msg) return this.$message.error(res.msg)
} }
this.imageUrl = res.data this.imageUrl = res.data
// this.imageUrl = URL.createObjectURL(file.raw);
}, },
}, },
beforeDestroy() { beforeDestroy() {

View File

@ -2,7 +2,8 @@
<div> <div>
<div class="top flex-row-start"> <div class="top flex-row-start">
<div class="type">{{ type }}</div> <div class="type">{{ type }}</div>
<el-button type="primary" size="small" @click="showModal = true">添加</el-button> <el-button type="primary" size="small" @click="showModal = true">{{ modalType == 'add' ? '添加' : '编辑' }}
</el-button>
</div> </div>
<el-dialog class="modal-box" :visible.sync="showModal" title="请选择" @close="close" :close-on-click-modal="false" <el-dialog class="modal-box" :visible.sync="showModal" title="请选择" @close="close" :close-on-click-modal="false"
:close-on-press-escape="false" :key="showKey" append-to-body> :close-on-press-escape="false" :key="showKey" append-to-body>
@ -34,8 +35,8 @@
</div> </div>
<div class="flex-row-start" style="margin-bottom:10px;align-items: flex-start;"> <div class="flex-row-start" style="margin-bottom:10px;align-items: flex-start;">
<div class="left-text" style="margin-top: 10px;">关键词</div> <div class="left-text" style="margin-top: 10px;">关键词</div>
<el-input style="margin-left:10px;width: 200px;" v-model="cameraName" placeholder="名称" <el-input style="margin-left:10px;width: 200px;" v-model="searchData.cameraName"
clearable> placeholder="名称" clearable>
</el-input> </el-input>
<el-button type="primary" style="margin-left:10px;margin-top:4px" size="small" @click="getData"> <el-button type="primary" style="margin-left:10px;margin-top:4px" size="small" @click="getData">
搜索 搜索
@ -59,8 +60,8 @@
<el-table-column prop="nodeName" label="归属" header-align="center" align="center"> <el-table-column prop="nodeName" label="归属" header-align="center" align="center">
</el-table-column> </el-table-column>
</el-table> </el-table>
<el-pagination style="justify-content: center;display: flex;" :current-page="pageData.page" <el-pagination style="justify-content: center;display: flex;" :current-page="searchData.pageNum"
:page-sizes="[10, 20, 50, 100]" :page-size="pageData.limit" :total="pageData.total" :page-sizes="[10, 20, 50, 100]" :page-size="searchData.pageSize" :total="pageData.total"
layout="total, sizes, prev, pager, next, jumper" @size-change="pageSizeChangeHandle" layout="total, sizes, prev, pager, next, jumper" @size-change="pageSizeChangeHandle"
@current-change="pageCurrentChangeHandle"> @current-change="pageCurrentChangeHandle">
</el-pagination> </el-pagination>
@ -75,7 +76,7 @@
</template> </template>
</el-dialog> </el-dialog>
<DisplayList :displayList="displayList"></DisplayList> <DisplayList :displayList="displayList" showKey="channelName"></DisplayList>
</div> </div>
</template> </template>
@ -98,6 +99,10 @@ export default {
type: String, type: String,
default: "基础设施" default: "基础设施"
}, },
modalType: {
type: String,
default: 'add'
}
}, },
data() { data() {
const getYunList = () => { const getYunList = () => {
@ -109,9 +114,7 @@ export default {
return { return {
showKey: 0, showKey: 0,
showModal: false, showModal: false,
transferData: [], // 穿
selectedArray: [], // id selectedArray: [], // id
allData: [],
displayList: [], // list displayList: [], // list
btnList: ['视频资源', '云资源', '感知资源'], btnList: ['视频资源', '云资源', '感知资源'],
showText: { showText: {
@ -133,35 +136,41 @@ export default {
list: [] list: []
}, },
], ],
activeBtn: '视频资源',
checkList: [],
currentList: [], currentList: [],
dataListLoading: false, dataListLoading: false,
dataList: [], dataList: [],
pageData: { pageData: {
limit: 10,
page: 1,
total: 0, total: 0,
}, },
cameraName: '', cameraName: '',
postData: {},
activeBtn: '视频资源',
checkList: [],
searchData: {
cameraName: '',
pageSize: 10,
pageNum: 1,
parentId: ''
},
dataFormCopy: {}
} }
}, },
watch: { watch: {
async showModal(newVal) { async showModal(newVal) {
if (newVal) { if (newVal) {
await this.getData();
// //
this.$nextTick(() => { this.$nextTick(() => {
this.selectCheckbox() this.selectCheckbox()
}) })
if (this.modalType == 'add') {
this.clear()
}
} }
} }
}, },
mounted() { mounted() {
// //
this.getVideoBtn() this.getVideoBtn()
//
this.getData()
}, },
methods: { methods: {
selectCheckbox() { selectCheckbox() {
@ -176,24 +185,24 @@ export default {
}) })
if (list.length) { if (list.length) {
list.forEach((row) => { list.forEach((row) => {
this.$refs.dataTable.toggleRowSelection(row, true) this.$refs.dataTable && this.$refs.dataTable.toggleRowSelection(row, true)
}) })
} }
} }
}, },
showAction() {
this.showModal = true;
},
//
async getDataInfo(dataForm) { async getDataInfo(dataForm) {
this.modalType == 'edit'
this.dataFormCopy = dataForm;
await this.getVideoBtn(); await this.getVideoBtn();
await this.getData();
let arr = []; let arr = [];
let attrValue = dataForm.fuseResourceList.filter(v => v.type == this.type); let attrValue = dataForm.fuseResourceList.filter(v => v.type == this.type);
if (attrValue.length > 0) { if (attrValue.length > 0) {
attrValue.map(val => { attrValue.map(val => {
let item = this.dataList.find(v => v.idtCameraChannel == val.resourceId) || {}; let _obj = Object.assign({}, val, val.resource)
let _obj = {
type: val.type,
idtCameraChannel: val.resourceId,
name: item.channelName
};
arr.push(_obj); arr.push(_obj);
}); });
} }
@ -201,28 +210,31 @@ export default {
this.displayList = JSON.parse(JSON.stringify(arr)); this.displayList = JSON.parse(JSON.stringify(arr));
// //
this.selectedArray = arr.map(v => v.idtCameraChannel); this.selectedArray = arr.map(v => v.idtCameraChannel);
}, this.dataList = JSON.parse(JSON.stringify(arr));
handleShowModal() { this.pageData.total = arr.length;
this.showModal = true; //
this.$nextTick(() => {
this.selectCheckbox()
})
}, },
// //
dataListSelectionChangeHandle(data) { dataListSelectionChangeHandle(data) {
this.selectedArray = data; this.selectedArray = data;
}, },
pageCurrentChangeHandle(page) { pageCurrentChangeHandle(pageNum) {
this.pageData.page = page; this.searchData.pageNum = pageNum;
this.getData() this.getData()
}, },
pageSizeChangeHandle(limit) { pageSizeChangeHandle(pageSize) {
this.pageData.limit = limit; this.searchData.pageSize = pageSize;
this.getData() this.getData()
}, },
changeBtn(btn) { changeBtn(btn) {
this.activeBtn = btn; this.activeBtn = btn;
this.currentList = this.tabData.find(v => v.tabName == btn).list || [];
this.checkList = []; this.checkList = [];
this.cameraName = ''; this.searchData.cameraName = '';
this.getData() this.getData()
this.currentList = this.tabData.find(v => v.tabName == btn).list || []
}, },
// //
getVideoBtn() { getVideoBtn() {
@ -234,7 +246,12 @@ export default {
} }
this.tabData[0].list = res.data.data || []; this.tabData[0].list = res.data.data || [];
this.changeBtn(this.activeBtn) this.$nextTick(() => {
this.currentList = this.tabData.find(v => v.tabName == this.activeBtn).list || [];
if (this.modalType == 'add') {
this.clear()
}
})
}).catch(err => { }).catch(err => {
reject(err) reject(err)
this.$message.error(err); this.$message.error(err);
@ -255,23 +272,19 @@ export default {
} else { } else {
this.checkList.push(item.labelCode) this.checkList.push(item.labelCode)
} }
console.log('this.checkList------------>', this.checkList); this.$nextTick(() => {
this.getData() this.getData()
})
}, },
// //
getData(parentId = '') { getData() {
this.allData = []; let postData = Object.assign({}, {
let postData = {
parentId: parentId,
cameraName: this.cameraName,
checkStatus: 1, checkStatus: 1,
pageNum: this.pageData.page,
pageSize: this.pageData.limit,
gpsX: '', gpsX: '',
gpsY: '', gpsY: '',
radius: '', radius: '',
labelCodes: this.checkList.join(), labelCodes: this.checkList.join(),
} }, this.searchData);
return new Promise((resolve, reject) => { return new Promise((resolve, reject) => {
this.$http.get('/api/project/selectByParentIdNew', { params: postData }).then(res => { this.$http.get('/api/project/selectByParentIdNew', { params: postData }).then(res => {
resolve(res) resolve(res)
@ -285,10 +298,9 @@ export default {
this.$message.error(err); this.$message.error(err);
}) })
}) })
}, },
changeParentId(parentId) { changeParentId(parentId) {
console.log('parentId------------>', parentId); this.searchData.parentId = parentId;
this.getData(parentId) this.getData(parentId)
}, },
confirmSubmitHandle() { confirmSubmitHandle() {
@ -301,7 +313,7 @@ export default {
this.dataList.map(v => { this.dataList.map(v => {
if (idtCameraChannelArray.includes(v.idtCameraChannel)) { if (idtCameraChannelArray.includes(v.idtCameraChannel)) {
this.displayList.push({ this.displayList.push({
name: v.channelName channelName: v.channelName
}) })
} }
}) })
@ -312,16 +324,12 @@ export default {
}, },
close() { close() {
this.showModal = false; this.showModal = false;
this.cameraName = '' this.searchData.cameraName = ''
this.selectedArray = []; this.selectedArray = [];
this.allData = [];
this.transferData = [];
this.$emit('closeModal'); this.$emit('closeModal');
}, },
clear() { clear() {
this.cameraName = '' this.changeBtn('视频资源')
this.selectedArray = [];
this.getData()
}, },
} }

View File

@ -167,7 +167,8 @@ export default {
.dynamic-box { .dynamic-box {
width: 770px; width: 770px;
height: 335px; height: 285px;
position: relative;
} }
.dynamicView { .dynamicView {
@ -223,6 +224,9 @@ export default {
width: 100%; width: 100%;
color: #2b2b2b; color: #2b2b2b;
font-size: 14px; font-size: 14px;
position: absolute;
right: 15px;
bottom: 10px;
} }
.recommendView { .recommendView {

View File

@ -1,8 +1,8 @@
<!-- <!--
* @Author: hisense.wuhongjian * @Author: hisense.wuhongjian
* @Date: 2022-03-29 16:45:25 * @Date: 2022-03-29 16:45:25
* @LastEditors: hisense.wuhongjian * @LastEditors: hisense.liangjunhua
* @LastEditTime: 2022-08-09 11:47:38 * @LastEditTime: 2022-08-09 09:24:43
* @Description: 告诉大家这是什么 * @Description: 告诉大家这是什么
--> -->
<!DOCTYPE html> <!DOCTYPE html>
@ -48,18 +48,17 @@
// window.SITE_CONFIG['websocketURL'] = '15.2.21.243:8888/renren-admin'; // window.SITE_CONFIG['websocketURL'] = '15.2.21.243:8888/renren-admin';
// window.SITE_CONFIG['POI_URL'] = 'http://15.2.21.238:8090/iserver/services/addressmatch-qingdaoPOI181015/restjsr/v1/address'; // window.SITE_CONFIG['POI_URL'] = 'http://15.2.21.238:8090/iserver/services/addressmatch-qingdaoPOI181015/restjsr/v1/address';
// 西海岸版本 // 西海岸版本
// window.SITE_CONFIG['backUrl'] = 'http://10.134.135.9:9797'; window.SITE_CONFIG['backUrl'] = 'http://10.134.135.9:9797';
// window.SITE_CONFIG['previewUrl'] = 'http://10.134.135.9:9796/'; window.SITE_CONFIG['previewUrl'] = 'http://10.134.135.9:9796/';
// window.SITE_CONFIG['frontUrl'] = 'http://10.134.135.9:9796/document/#/devModelFile/'; window.SITE_CONFIG['frontUrl'] = 'http://10.134.135.9:9796/document/#/devModelFile/';
// window.SITE_CONFIG['websocketURL'] = '10.134.135.9:8888/renren-admin'; window.SITE_CONFIG['apiURL'] = 'http://10.134.135.9:8888/renren-admin';
// window.SITE_CONFIG['apiURL'] = 'http://10.134.135.9:8888/renren-admin';
// 开发 // 开发
window.SITE_CONFIG['backUrl'] = 'http://15.2.21.238:9797'; // window.SITE_CONFIG['backUrl'] = 'http://15.2.21.238:9797';
window.SITE_CONFIG['backUrl'] = 'http://localhost:8001'; // window.SITE_CONFIG['backUrl'] = 'http://localhost:8001';
window.SITE_CONFIG['previewUrl'] = 'http://192.168.124.236:9796/'; // window.SITE_CONFIG['previewUrl'] = 'http://192.168.124.236:9796/';
window.SITE_CONFIG['frontUrl'] = 'http://192.168.124.236:9796/document/#/devModelFile/'; // window.SITE_CONFIG['frontUrl'] = 'http://192.168.124.236:9796/document/#/devModelFile/';
window.SITE_CONFIG['apiURL'] = 'http://192.168.124.236:8888/renren-admin'; // window.SITE_CONFIG['apiURL'] = 'http://192.168.124.236:8888/renren-admin';
window.SITE_CONFIG['websocketURL'] = '192.168.124.236:8888/renren-admin'; // window.SITE_CONFIG['websocketURL'] = '192.168.124.236:8888/renren-admin';
// window.SITE_CONFIG['POI_URL'] = 'http://192.168.124.236:8090/iserver/services/addressmatch-qingdaoPOI181015/restjsr/v1/address'; // window.SITE_CONFIG['POI_URL'] = 'http://192.168.124.236:8090/iserver/services/addressmatch-qingdaoPOI181015/restjsr/v1/address';
// 穿透版本 // 穿透版本
// window.SITE_CONFIG['backUrl'] = 'http://124.222.94.39:9797'; // window.SITE_CONFIG['backUrl'] = 'http://124.222.94.39:9797';

View File

@ -2,7 +2,7 @@
* @Author: hisense.wuhongjian * @Author: hisense.wuhongjian
* @Date: 2020-07-07 16:03:23 * @Date: 2020-07-07 16:03:23
* @LastEditors: hisense.wuhongjian * @LastEditors: hisense.wuhongjian
* @LastEditTime: 2022-08-09 11:46:27 * @LastEditTime: 2022-08-06 10:43:53
* @Description: 数据资源参数配置 * @Description: 数据资源参数配置
*/ */
const newLocation = 'qingdao' const newLocation = 'qingdao'

View File

@ -2,7 +2,7 @@
* @Author: hisense.wuhongjian * @Author: hisense.wuhongjian
* @Date: 2022-04-01 19:19:40 * @Date: 2022-04-01 19:19:40
* @LastEditors: hisense.liangjunhua * @LastEditors: hisense.liangjunhua
* @LastEditTime: 2022-07-18 16:24:44 * @LastEditTime: 2022-08-09 10:37:31
* @Description: 告诉大家这是什么 * @Description: 告诉大家这是什么
*/ */
import request from '@/utils/request' import request from '@/utils/request'
@ -370,3 +370,11 @@ export function getDevelopDocTree(params) {
params, params,
}) })
} }
// 广
export function selectAppList(params) {
return request({
url: '/resource/selectAppList',
method: 'get',
params,
})
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 110 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 394 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 346 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 641 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 379 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.3 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 641 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.9 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 60 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 14 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 263 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 536 B

Binary file not shown.

Binary file not shown.

After

Width:  |  Height:  |  Size: 471 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 898 B

View File

@ -64,6 +64,15 @@ export const constantRoutes = [
icon: 'error-warning-line', icon: 'error-warning-line',
}, },
}, },
{
path: '/capacitySquare',
name: 'capacitySquare',
component: () => import('@/views/capacitySquare'),
meta: {
title: '能力广场',
icon: 'error-warning-line',
},
},
{ {
path: '/mapTest', path: '/mapTest',
name: 'mapTest', name: 'mapTest',

View File

@ -0,0 +1,172 @@
<!-- 智能算法 -->
<template>
<div class="algorithm">
<div class="algorithm-class">
<div
v-for="(item, index) in dataList"
:key="`algorithm-${index}`"
class="algorithm-card"
>
<a-image
:src="algorithmCardPhoto(item.infoList)"
:width="525"
:height="275"
:fallback="imgSrc"
:preview="false"
></a-image>
<a-tooltip>
<template #title>{{ item.name }}</template>
<div class="algorithm-card-title" @click="detailFunction(item.id)">
<span>{{ item.name }}</span>
<span>{{ item.deptName }}</span>
</div>
</a-tooltip>
</div>
</div>
</div>
</template>
<script setup>
import { pageWithAttrs } from '@/api/abilityStatistics'
import { ref, onMounted } from 'vue'
const dataList = ref([])
const params = {
deptIds: [],
districtId: '',
infoList: [{ attrType: '组件类型', attrValue: '智能算法' }],
orderField: 'visits',
orderType: 'DESC',
pageNum: 1,
pageSize: 9,
type: '组件服务',
}
const imgSrc = ref(require('@/assets/capacitySquare/algorithm-photo.jpg'))
const dataLength = ref(true)
const isNoMore = ref(false)
let url = ref('')
const pageWithAttrsFunction = () => {
pageWithAttrs(params).then((res) => {
dataList.value = res.data.data.records
if (res.data.data.records.length < 9) {
dataLength.value = false
}
})
}
pageWithAttrsFunction()
//
const algorithmCardPhoto = (List) => {
List.map((item) => {
if (item.attrType === '图层缩略图') {
url.value = item.attrValue
}
})
return url.value
}
//
const detailFunction = (id) => {
window.open(window.SITE_CONFIG.previewUrl + `#/details?id=${id}`)
}
onMounted(() => {
const algorithmclass = document.querySelector('.algorithm-class')
if (dataLength.value) {
//
algorithmclass.addEventListener('scroll', (e) => {
var scrollTop = e.currentTarget.scrollTop
var windowHeight = e.currentTarget.clientHeight
var scrollHeight = e.currentTarget.scrollHeight
console.log(scrollTop, windowHeight, scrollHeight, '123')
if (scrollTop + windowHeight == scrollHeight) {
//
isNoMore.value = true
params.pageNum++
pageWithAttrs(params).then((res) => {
dataList.value.push(...res.data.data.records)
if (res.data.data.records.length < 9) {
dataLength.value = false
}
})
} else {
isNoMore.value = false
}
})
}
})
</script>
<style lang="less" scoped>
.algorithm {
.algorithm-class {
margin-top: 0.6rem;
margin-bottom: 0.59rem;
display: grid;
grid-template-columns: repeat(3, 33%);
height: 8.8rem;
overflow: auto;
margin-left: 1.15rem;
margin-right: 0.15rem;
.algorithm-card {
height: 2.75rem;
width: 5.25rem;
background: url('~@/assets/capacitySquare/algorithm-bg.png') no-repeat;
background-size: 100%;
margin-bottom: 0.3rem;
margin-right: 0.65rem;
position: relative;
:deep(.ant-image) {
img {
margin-top: 0.15rem;
height: 2.6rem;
width: 5.05rem;
margin-left: 0.1rem;
}
}
.algorithm-card-photo {
height: 100%;
width: 100%;
background: url('~@/assets/capacitySquare/algorithm-photo.jpg')
no-repeat;
background-size: 100%;
}
.algorithm-card-title {
position: absolute;
height: 0.6rem;
width: 100%;
color: #ffffff;
font-size: 0.22rem;
font-family: alibaba;
bottom: 0;
padding-left: 0.22rem;
background: url('~@/assets/capacitySquare/algorithm-title-bg.png')
no-repeat;
background-size: 100%;
display: flex;
flex-direction: column;
justify-content: center;
span {
line-height: 0.24rem;
overflow: hidden;
text-overflow: ellipsis;
white-space: nowrap;
cursor: pointer;
}
span:last-child {
font-size: 0.14rem;
}
}
}
}
.algorithm-class::-webkit-scrollbar-track-piece {
background: #a5bcdb;
border-radius: 0.08rem;
}
.algorithm-class::-webkit-scrollbar-thumb {
height: 3.2rem;
background: linear-gradient(to bottom, #47d7f5, #3dc6e3);
}
.algorithm-class::-webkit-scrollbar {
height: 8.8rem;
width: 0.08rem;
border-radius: 0.08rem;
}
}
</style>

View File

@ -0,0 +1,264 @@
<!--
* @Author: hisense.liangjunhua
* @Date: 2022-08-09 09:31:25
* @LastEditors: hisense.liangjunhua
* @LastEditTime: 2022-08-09 16:53:01
* @Description: 应用资源
-->
<template>
<div class="application">
<div class="select">
<div class="top" @click="selectFlag = true">
{{ typeName }}
<div class="light"></div>
</div>
<div class="bottom" v-show="selectFlag">
<span class="light"></span>
<div @click="getList('全市')">全市</div>
<div @click="getList('市级')">市级</div>
<div @click="getList('区级')">区级</div>
<div @click="getList('企业')">企业</div>
</div>
</div>
<div class="item-box">
<div class="item" v-for="item in data.list" :key="item.id">
<a-image
:width="527"
:height="270"
:preview="false"
:src="item.pic"
:fallback="item.pic2"
/>
<div class="bottom" @click="goToView(item.id)">
<div class="name">{{ item.name }}</div>
<div class="dept">{{ item.deptName || '--' }}</div>
</div>
</div>
</div>
</div>
</template>
<script setup>
import { onMounted, reactive, onBeforeUnmount, ref, nextTick } from 'vue'
import { selectAppList } from '@/api/home'
import { useRouter } from 'vue-router'
const router = useRouter()
const pageNum = ref(1)
const flag = ref(true)
const type = ref(null)
const typeName = ref('全市')
const data = reactive({ list: [] })
const selectFlag = ref(false)
let dom = null
const goToView = (id) => {
router.push({
path: '/details',
query: {
id: id,
},
})
}
const getList = (str) => {
if (str) {
dom.scrollTop = 0
switch (str) {
case '全市':
type.value = null
typeName.value = '全 市'
break
case '市级':
type.value = 2
typeName.value = '市 级'
break
case '区级':
type.value = 3
typeName.value = '区 级'
break
case '企业':
type.value = 4
typeName.value = '企 业'
break
}
pageNum.value = 1
data.list = []
}
selectAppList({ pageNum: pageNum.value, type: type.value }).then((res) => {
if (res.data.data.length < 9) {
dom.removeEventListener('scroll', viewMonitor, true)
}
res.data.data.map((val) => {
if (!val.pic) {
val.pic = require('@/assets/capacitySquare/yyzy.jpg')
}
val.pic2 = require('@/assets/capacitySquare/yyzy.jpg')
})
data.list.push(...res.data.data)
selectFlag.value = false
nextTick(() => {
dom = document.querySelector('.item-box')
flag.value = true
if (str) {
dom.removeEventListener('scroll', viewMonitor, true)
dom.addEventListener('scroll', viewMonitor, true)
}
})
})
}
getList()
const viewMonitor = () => {
const clientHeight = dom.clientHeight
const scrollTop = dom.scrollTop
const scrollHeight = dom.scrollHeight
// console.log('', clientHeight, scrollTop, scrollHeight, dom)
if (clientHeight + scrollTop === scrollHeight) {
console.log('竖向滚动条已经滚动到底部')
if (flag.value) {
flag.value = false
pageNum.value++
getList()
}
}
}
onMounted(() => {
dom = document.querySelector('.item-box')
console.log('box============', dom)
dom.addEventListener('scroll', viewMonitor, true)
})
onBeforeUnmount(() => {
dom.removeEventListener('scroll', viewMonitor, true)
})
</script>
<style lang="less" scoped>
@font-face {
font-family: 'webfont';
src: url('~@/assets/capacitySquare/webfont.ttf');
}
.application {
padding: 0 0.15rem;
.select {
margin: 0.1rem 0 0.1rem 0.2rem;
color: #fff;
font-size: 0.2rem;
font-family: webfont;
position: relative;
.top {
cursor: pointer;
width: 3.61rem;
height: 0.85rem;
font-weight: 600;
text-align: center;
padding-top: 0.1rem;
background: url('~@/assets/capacitySquare/select-bg.png') no-repeat;
background-size: 100%;
position: relative;
.light {
width: 0.56rem;
height: 3px;
position: absolute;
top: 0.4rem;
left: 1.52rem;
background: url('~@/assets/capacitySquare/select-light1.png')
no-repeat;
background-size: 100%;
}
}
.bottom {
cursor: pointer;
position: absolute;
top: 0.5rem;
left: 0.9rem;
z-index: 1000;
background: rgba(57, 134, 239, 0.68);
border: 1px solid #aed5ff;
.light {
display: inline-block;
width: 2.39rem;
height: 5px;
position: absolute;
top: -0.08rem;
left: -0.3rem;
background: url('~@/assets/capacitySquare/select-light2.png')
no-repeat;
background-size: 100%;
}
& > div {
width: 1.8rem;
height: 0.4rem;
line-height: 0.4rem;
text-align: center;
border-top: 1px solid #aed5ff;
}
& > div:nth-of-type(1) {
border: none;
}
}
}
.item-box {
margin-bottom: 0.15rem;
height: 8.8rem;
padding: 0 0.9rem 0 1rem;
overflow-y: scroll;
display: flex;
justify-content: space-around;
flex-wrap: wrap;
.item {
width: 5.25rem;
height: 2.75rem;
margin-bottom: 0.3rem;
position: relative;
background: url('~@/assets/capacitySquare/algorithm-bg.png') no-repeat;
background-size: 100%;
background-position: center;
display: flex;
justify-content: center;
align-items: center;
:deep(.ant-image-img) {
width: 100%;
height: 100%;
object-fit: contain;
}
.bottom {
cursor: pointer;
width: 100%;
height: 0.6rem;
padding-left: 0.3rem;
background: url('~@/assets/capacitySquare/bt-bg.png') no-repeat;
background-size: 100%;
color: #fff;
font-family: webfont;
position: absolute;
bottom: 0;
left: 0;
.name {
height: 0.44rem;
line-height: 0.44rem;
font-size: 0.22rem;
overflow: hidden;
white-space: nowrap;
text-overflow: ellipsis;
-o-text-overflow: ellipsis;
word-break: break-all;
}
.dept {
height: 0.12rem;
line-height: 0.04rem;
font-size: 0.12rem;
color: #bbb;
}
}
}
}
}
.item-box::-webkit-scrollbar-track-piece {
background: #a5bcdb;
border-radius: 0.08rem;
}
.item-box::-webkit-scrollbar-thumb {
height: 3.2rem;
background: linear-gradient(to bottom, #47d7f5, #3dc6e3);
}
.item-box::-webkit-scrollbar {
height: 8.8rem;
width: 0.08rem;
border-radius: 0.08rem;
}
</style>

View File

@ -0,0 +1,172 @@
<!-- 图层服务 -->
<template>
<div class="algorithm">
<div class="algorithm-class">
<div
v-for="(item, index) in dataList"
:key="`algorithm-${index}`"
class="algorithm-card"
>
<a-image
:src="algorithmCardPhoto(item.infoList)"
:width="525"
:height="275"
:fallback="imgSrc"
:preview="false"
></a-image>
<a-tooltip>
<template #title>{{ item.name }}</template>
<div class="algorithm-card-title" @click="detailFunction(item.id)">
<span>{{ item.name }}</span>
<span>{{ item.deptName }}</span>
</div>
</a-tooltip>
</div>
</div>
</div>
</template>
<script setup>
import { pageWithAttrs } from '@/api/abilityStatistics'
import { ref, onMounted } from 'vue'
const dataList = ref([])
const params = {
deptIds: [],
districtId: '',
infoList: [{ attrType: '组件类型', attrValue: '图层服务' }],
orderField: 'visits',
orderType: 'DESC',
pageNum: 1,
pageSize: 9,
type: '组件服务',
}
const imgSrc = ref(require('@/assets/capacitySquare/algorithm-photo2.jpg'))
const dataLength = ref(true)
const isNoMore = ref(false)
let url = ref('')
const pageWithAttrsFunction = () => {
pageWithAttrs(params).then((res) => {
dataList.value = res.data.data.records
if (res.data.data.records.length < 9) {
dataLength.value = false
}
})
}
pageWithAttrsFunction()
//
const algorithmCardPhoto = (List) => {
List.map((item) => {
if (item.attrType === '图层缩略图') {
url.value = item.attrValue
}
})
return url.value
}
//
const detailFunction = (id) => {
window.open(window.SITE_CONFIG.previewUrl + `#/details?id=${id}`)
}
onMounted(() => {
const algorithmclass = document.querySelector('.algorithm-class')
if (dataLength.value) {
//
algorithmclass.addEventListener('scroll', (e) => {
var scrollTop = e.currentTarget.scrollTop
var windowHeight = e.currentTarget.clientHeight
var scrollHeight = e.currentTarget.scrollHeight
console.log(scrollTop, windowHeight, scrollHeight, '123')
if (scrollTop + windowHeight == scrollHeight) {
//
isNoMore.value = true
params.pageNum++
pageWithAttrs(params).then((res) => {
dataList.value.push(...res.data.data.records)
if (res.data.data.records.length < 9) {
dataLength.value = false
}
})
} else {
isNoMore.value = false
}
})
}
})
</script>
<style lang="less" scoped>
.algorithm {
.algorithm-class {
margin-top: 0.6rem;
margin-bottom: 0.59rem;
display: grid;
grid-template-columns: repeat(3, 33%);
height: 8.8rem;
overflow: auto;
margin-left: 1.15rem;
margin-right: 0.15rem;
.algorithm-card {
height: 2.75rem;
width: 5.23rem;
background: url('~@/assets/capacitySquare/algorithm-bg.png') no-repeat;
background-size: 100%;
margin-bottom: 0.3rem;
margin-right: 0.65rem;
position: relative;
:deep(.ant-image) {
img {
margin-top: 0.15rem;
height: 2.6rem;
width: 5.05rem;
margin-left: 0.1rem;
}
}
.algorithm-card-photo {
height: 100%;
width: 100%;
background: url('~@/assets/capacitySquare/algorithm-photo.jpg')
no-repeat;
background-size: 100%;
}
.algorithm-card-title {
position: absolute;
height: 0.6rem;
width: 100%;
color: #ffffff;
font-size: 0.22rem;
font-family: alibaba;
bottom: 0;
padding-left: 0.22rem;
background: url('~@/assets/capacitySquare/algorithm-title-bg.png')
no-repeat;
background-size: 100%;
display: flex;
flex-direction: column;
justify-content: center;
span {
line-height: 0.24rem;
overflow: hidden;
text-overflow: ellipsis;
white-space: nowrap;
cursor: pointer;
}
span:last-child {
font-size: 0.14rem;
}
}
}
}
.algorithm-class::-webkit-scrollbar-track-piece {
background: #a5bcdb;
border-radius: 0.08rem;
}
.algorithm-class::-webkit-scrollbar-thumb {
height: 3.2rem;
background: linear-gradient(to bottom, #47d7f5, #3dc6e3);
}
.algorithm-class::-webkit-scrollbar {
height: 8.8rem;
width: 0.08rem;
border-radius: 0.08rem;
}
}
</style>

View File

@ -0,0 +1,118 @@
<!--
* @Author: hisense.liangjunhua
* @Date: 2022-08-09 11:32:47
* @LastEditors: hisense.liangjunhua
* @LastEditTime: 2022-08-09 15:26:57
* @Description: 告诉大家这是什么
-->
<template>
<div class="capacitySquare">
<div class="header">
<div class="left">城市云脑通用能力服务平台(UCS)</div>
{{ squareType }}
<div class="right" @click="backClick">返回集市</div>
</div>
<div class="light"></div>
<div class="box">
<algorithm v-if="show === 'algorithm'"></algorithm>
<layer v-else-if="show === 'layer'"></layer>
<application v-else-if="show === 'application'"></application>
</div>
</div>
</template>
<script setup>
import { ref } from 'vue'
import algorithm from './components/algorithm.vue'
import layer from './components/layer.vue'
import application from './components/application.vue'
import { useRouter } from 'vue-router'
const router = useRouter()
const abilityToType = router.currentRoute.value.query.abilityToType
const show = ref('algorithm')
const squareType = ref('应用广场')
if (abilityToType === '应用资源') {
show.value = 'application'
squareType.value = '应用广场'
} else if (abilityToType === '图层服务') {
show.value = 'layer'
squareType.value = '图层广场'
} else if (abilityToType === '智能算法') {
show.value = 'algorithm'
squareType.value = '算法广场'
} else {
console.log('no')
}
//
const backClick = () => {
const newpage = router.resolve({
path: '/DetailsPageconetent',
query: {
select: '组件服务',
},
})
window.location.href = newpage.href
}
</script>
<style lang="less" scoped>
@font-face {
font-family: 'webfont';
src: url('~@/assets/capacitySquare/webfont.ttf');
}
.capacitySquare {
width: 100%;
height: 100%;
background: url('~@/assets/capacitySquare/bg.png') no-repeat;
background-size: 100%;
display: flex;
flex-direction: column;
position: relative;
.header {
width: 100%;
height: 0.8rem;
background: url('~@/assets/capacitySquare/header-bg.png') no-repeat;
background-size: 100%;
color: #fff;
text-align: center;
font-family: webfont;
font-size: 0.5rem;
font-weight: 600;
.left {
position: absolute;
top: 0.05rem;
left: 1.5rem;
font-size: 0.18rem;
font-weight: 500;
}
.right {
width: 1rem;
height: 0.3rem;
line-height: 0.3rem;
position: absolute;
top: 0.05rem;
right: 0.2rem;
font-size: 0.14rem;
font-weight: 500;
background: url('~@/assets/capacitySquare/backShop.png') no-repeat;
background-size: 100% 100%;
cursor: pointer;
}
}
.light {
position: absolute;
top: 0.25rem;
left: 6.25rem;
z-index: 10;
width: 6.64rem;
height: 1.64rem;
background: url('~@/assets/capacitySquare/header-light.png') no-repeat;
background-size: 100%;
background-position: center;
}
.box {
flex: 1;
// padding: 0.5rem 0;
font-family: alibaba;
src: url('~@/assets/capacitySquare/webfont.ttf');
}
}
</style>

View File

@ -113,6 +113,37 @@
</div> </div>
</a-modal> </a-modal>
</div> </div>
<div @click="showAbilitySquare">
<p></p>
<p>能力广场</p>
<a-modal
v-model:visible="visibleAbilitySquare"
@ok="handleOkAbilitySquare"
class="shangjia-class"
@cancel="handlecancelAbilitySquare"
>
<div class="ant-modal-title" id="vcDialogTitle1">
<div class="showBg"></div>
能力广场目录
</div>
<div class="ability-to-type">
<div class="ability-to-type-content">
<div
v-for="item in abilitySquare"
:key="item"
@click="abilitySquareFunction(item)"
:class="
abilitySquareFunctionData == item
? 'ability-to-type-down'
: ''
"
>
{{ item }}
</div>
</div>
</div>
</a-modal>
</div>
</div> </div>
</div> </div>
</template> </template>
@ -142,6 +173,7 @@
abilityToTypeFunctionData.value = item abilityToTypeFunctionData.value = item
} }
let abilityToType = ref(['组件服务', '应用资源']) let abilityToType = ref(['组件服务', '应用资源'])
let abilitySquare = ref(['智能算法', '图层服务', '应用资源'])
let componentType = ref([ let componentType = ref([
'智能算法', '智能算法',
'图层服务', '图层服务',
@ -154,6 +186,11 @@
const showModal = () => { const showModal = () => {
visible.value = true visible.value = true
} }
// 广
const visibleAbilitySquare = ref(false)
const showAbilitySquare = () => {
visibleAbilitySquare.value = true
}
let componentTypeValueOld = ref('') let componentTypeValueOld = ref('')
function componentTypeValueFunction(item) { function componentTypeValueFunction(item) {
if (componentTypeValueOld.value != item) { if (componentTypeValueOld.value != item) {
@ -252,6 +289,28 @@
watch(abilityToTypeFunctionData, () => { watch(abilityToTypeFunctionData, () => {
componentTypeValue.value = '' componentTypeValue.value = ''
}) })
// 广
const handleOkAbilitySquare = (e) => {
let snumSquare = ref({})
snumSquare.value = {
abilityToType: abilitySquareFunctionData.value,
}
const applypage = router.resolve({
path: '/capacitySquare', //
query: snumSquare.value,
})
window.open(applypage.href, '_blank')
console.log(e, abilitySquareFunctionData.value, 'hahhaha')
visibleAbilitySquare.value = false
abilitySquareFunctionData.value = '智能算法'
}
let abilitySquareFunctionData = ref('智能算法')
function abilitySquareFunction(item) {
abilitySquareFunctionData.value = item
}
function handlecancelAbilitySquare() {
abilitySquareFunctionData.value = '智能算法'
}
</script> </script>
<style lang="less"> <style lang="less">
.shangjia-class { .shangjia-class {
@ -520,7 +579,7 @@
} }
.fixedmount { .fixedmount {
height: 1.5rem; height: 2.3rem;
display: flex; display: flex;
position: fixed; position: fixed;
bottom: 2.56rem; bottom: 2.56rem;
@ -571,4 +630,11 @@
background-size: contain; background-size: contain;
background-position: center; background-position: center;
} }
.fixedmount div:nth-child(3) p:nth-child(1) {
height: 0.24rem;
width: 0.24rem;
background: url('~@/assets/home/abilitysquare.png') no-repeat;
background-size: 140% 126%;
background-position: center;
}
</style> </style>