Compare commits

...

143 Commits

Author SHA1 Message Date
guoyue c4ae6d603a 西海岸购物车等功能 2022-10-09 13:52:28 +08:00
guoyue d6c971ab23 西海岸顶部导航提示正在建设中 2022-10-08 19:20:18 +08:00
guoyue b2c2958fdb 删除无用代码 2022-10-08 18:01:53 +08:00
guoyue 7d513edafc 配置环境 2022-10-08 16:00:37 +08:00
guoyue c71784567c 西海岸-购物车收藏功能 2022-10-08 16:00:26 +08:00
guoyue f727efbdcd 顶部导航除基础设施外,禁止切换且提示正在建设中 2022-10-08 14:58:01 +08:00
guoyue d549a7f73d 能力云图:适配西海岸和市局 2022-10-02 11:08:42 +08:00
guoyue c183ee883d 代码找回 (详情按钮,西海岸智能算法支持,融合服务详情,西海岸登录默认基础设施) 【2022-09-30:修改文件 】 2022-09-30 16:07:15 +08:00
851673013@qq.com 1bff4a6f85 代码修改 2022-09-30 11:07:15 +08:00
851673013@qq.com cce81f9ece bug申请能力应用系统选项下方加提示:如选项没有系统请新增 2022-09-30 10:51:03 +08:00
851673013@qq.com a906b433f2 区市站点隐藏掉 2022-09-30 10:40:05 +08:00
851673013@qq.com cba2a5c089 bug修改 2022-09-30 10:31:14 +08:00
851673013@qq.com a3c6162592 修改文件 2022-09-30 10:27:57 +08:00
guoyue 166e5e119e 西海岸:能力集市点击非基础设施提示正在建设中 2022-09-29 18:35:14 +08:00
于秀圆 3dcb9b8778 接口传参方式修改 2022-09-29 18:27:32 +08:00
于秀圆 bcbafaf9f0 不规则框选 2022-09-29 18:19:24 +08:00
guoyue 057b926183 Merge branch 'hi-ucs-dev' of http://124.222.94.39:3000/wuhongjian/hi-ucs into hi-ucs-dev 2022-09-29 17:28:06 +08:00
guoyue 39547f16e4 西海岸:登录重定向到能力集市页面 2022-09-29 17:27:45 +08:00
guoyue f0df682cc6 响应拦截器,错误信息增加msg取值 2022-09-29 17:26:58 +08:00
guoyue 98f0c360d4 西海岸:基础设施--一键申请增加数量限制 2022-09-29 17:26:08 +08:00
guoyue bafe53bc67 西海岸:能力集市--默认选中基础设施 2022-09-29 17:21:54 +08:00
guoyue 48bfe71c6f 西海岸:基础设施--一键申请增加最大数量限制 2022-09-29 17:21:02 +08:00
851673013@qq.com e477b3f90e 我的申请——能力评价位置往最后面放 2022-09-29 14:24:07 +08:00
851673013@qq.com 9e5bd33650 首页“能力汇聚”改为“能力分类”;“工作动态”隐掉; 2022-09-29 11:48:59 +08:00
851673013@qq.com 7918e07b6c 页面设计优化:首页5个统计展示模块要让用户能明显的清楚可“点击进入”(比如字下面加下划线或者鼠标移入时“小手“图标要明显等) 2022-09-29 11:37:08 +08:00
guoyue 3f4e27177c fix:重定向白屏需强刷bug 2022-09-29 11:02:23 +08:00
guoyue a7d7431c75 fix:基础设施-申请报错 2022-09-29 09:24:02 +08:00
guoyue a7da8b013e Merge branches 'hi-ucs-dev' and 'hi-ucs-dev' of http://124.222.94.39:3000/wuhongjian/hi-ucs into hi-ucs-dev 2022-09-28 17:33:59 +08:00
guoyue f86d40feda 西海岸:基础设施-视频预览,增加在线离线状态显示,点击预览,提示离线 2022-09-28 17:31:57 +08:00
于秀圆 a4259cf2d9 视频资源表格和地图选中联动 2022-09-28 16:42:35 +08:00
guoyue f79b43d261 西海岸:基础设施--默认选中视频资源 2022-09-28 14:05:12 +08:00
guoyue 9c93864e38 Merge branch 'hi-ucs-dev' of http://124.222.94.39:3000/wuhongjian/hi-ucs into hi-ucs-dev 2022-09-27 18:49:40 +08:00
guoyue 9023a44715 西海岸:已办--增加单兵无人机设备历史记录 2022-09-27 18:49:26 +08:00
guoyue 787ceeef3f 西海岸:基础设施--批量申请--增加参数 2022-09-27 18:04:07 +08:00
a0049873 55da389003 隐藏趋势站点,能力云图 2022-09-27 16:49:10 +08:00
a0049873 1066a00154 按钮名字修改 2022-09-27 16:04:13 +08:00
a0049873 7952f20beb Merge branch 'hi-ucs-dev' of http://192.168.124.50:3000/wuhongjian/hi-ucs into hi-ucs-dev 2022-09-27 14:17:55 +08:00
a0049873 a02926006a 删除 数字校验 2022-09-27 14:17:31 +08:00
guoyue fc8f43b94c Merge branch 'hi-ucs-dev' of http://124.222.94.39:3000/wuhongjian/hi-ucs into hi-ucs-dev 2022-09-27 14:07:25 +08:00
guoyue 2df958d69e 西海岸:能力申请--过期给出提示 2022-09-27 14:06:57 +08:00
guoyue cf7d85060c 西海岸:基础设施-申请增加过期时间 2022-09-27 11:53:10 +08:00
a0049873 18f911bd16 基础设施修改 2022-09-27 10:37:08 +08:00
guoyue f071abfcf7 Merge branch 'hi-ucs-dev' of http://124.222.94.39:3000/wuhongjian/hi-ucs into hi-ucs-dev 2022-09-27 09:49:35 +08:00
guoyue 0b401f5741 我的申请增加水印 2022-09-27 09:49:30 +08:00
a0049873 ccbb53093f Merge branch 'hi-ucs-dev' of http://192.168.124.50:3000/wuhongjian/hi-ucs into hi-ucs-dev 2022-09-27 09:43:44 +08:00
a0049873 8782498104 管理端bug修改 门户修改右侧图标 2022-09-27 09:42:13 +08:00
guoyue 2f752de364 西海岸:基础设施--视频预览增加水印 2022-09-27 09:28:03 +08:00
guoyue ae5978f408 add: 西海岸 测试环境 2022-09-26 17:26:06 +08:00
guoyue 479c2791f3 合并 2022-09-26 17:25:30 +08:00
guoyue 653559e727 格式化代码 2022-09-26 16:55:51 +08:00
guoyue cecba03c6e 西海岸:视频播放 离线(status不是1)提示当前视频离线 2022-09-26 16:41:09 +08:00
guoyue 5c6d90d912 西海岸:我的申请中-视频预览 增加离线提示 2022-09-26 16:40:54 +08:00
guoyue 076d84bd0a 西海岸:视频播放 离线(status不是1)提示当前视频离线 2022-09-26 16:29:32 +08:00
guoyue eab0eb374a 西海岸:去掉拼接的status=1 2022-09-26 16:28:50 +08:00
guoyue 4e3fa20984 西海岸:登录默认 跳转到能力集市-基础设施 2022-09-26 15:55:31 +08:00
a0049873 432ba890f6 基础设施初始化BUG修改 2022-09-26 11:32:14 +08:00
unknown 186184c14f new button 2022-09-26 09:41:43 +08:00
a0049873 67e009d110 BUG修改 2022-09-26 09:26:17 +08:00
guoyue 2688b764e5 后台管理:公共scss文件 更改弹框最大高度,以及树形组件最大高度 2022-09-23 17:35:08 +08:00
guoyue 5e31517f1d fix:控制台--地图报错 2022-09-23 13:33:41 +08:00
guoyue 5e2b32f62a 西海岸:应用资源-部署与安全,去掉服务地址 2022-09-23 11:36:02 +08:00
guoyue 4dc1525520 fix:基础设施-地图搜索 改回最初 2022-09-23 11:15:14 +08:00
guoyue f26afc84c7 西海岸:顶部导航去掉技术文档 2022-09-23 10:37:21 +08:00
guoyue 1d61355bc6 西海岸:能力云图-基础设施-单兵设备,无人机前端写死 2022-09-23 10:36:52 +08:00
guoyue 4a28789464 西海岸:我的申请,增加设备申请 2022-09-22 19:07:54 +08:00
guoyue 10fdc587a2 西海岸:单兵无人机 申请按钮,更改为未申请状态才可申请 2022-09-22 16:04:24 +08:00
guoyue fe3eb0aa68 西海岸--基础设施:去掉视频标签 2022-09-22 15:08:02 +08:00
guoyue 05d2ad1a45 西海岸:我的申请增加设备申请 2022-09-22 14:28:29 +08:00
guoyue 7594c9cb51 西海岸:能力集市基础设施-左侧列表拼接status=1 2022-09-22 14:14:13 +08:00
guoyue 85b515acf8 fix: 我的角色-报错页面空白 2022-09-22 13:37:18 +08:00
guoyue b1f17ca5bb 优化我的申请js,删除多余注释代码 2022-09-22 13:31:36 +08:00
guoyue 4296677fcd 西海岸:批量预览视频增加提示,去申请才能查看 2022-09-22 13:30:53 +08:00
guoyue 2d32d735a5 西海岸:获取摄像头,拼接status=1 2022-09-22 13:29:47 +08:00
guoyue 6f6ec109e4 fix-首页:获取单兵设备无人机报错 2022-09-22 09:24:17 +08:00
guoyue c55eedc5b4 单兵和无人机:列表增加详情 2022-09-21 23:31:56 +08:00
guoyue e906d9adc5 fix:修复能力下架不选文件报错bug 2022-09-21 22:46:48 +08:00
guoyue e077a04c08 西海岸:应用详情:增加 审批通过可以查看马赛克内容 逻辑 2022-09-21 22:33:35 +08:00
guoyue a5df439fd0 pk 算法对比,修复弹框没有确定按钮bug 2022-09-21 22:31:56 +08:00
guoyue cce7cb3be9 去掉城市云脑会客厅 2022-09-21 22:27:49 +08:00
guoyue 495ed477f8 门户首页-能力汇聚:基础设施,保留视频资源,单兵,无人机 2022-09-21 22:26:56 +08:00
guoyue 8f56c1680d 无人机单兵设备,表单重置 2022-09-21 21:13:32 +08:00
guoyue 14978ef490 算法对比,弹框增加确定取消按钮 2022-09-21 21:12:29 +08:00
guoyue 44525afeb8 无人机申请,去掉用户id 2022-09-21 21:12:00 +08:00
guoyue f1de06b5ad 无人机申请增加用户id 2022-09-21 19:59:02 +08:00
guoyue cc330f2b60 Merge branch 'hi-ucs-dev' of http://124.222.94.39:3000/wuhongjian/hi-ucs into hi-ucs-dev 2022-09-21 18:48:57 +08:00
guoyue f6b6c4713d 西海岸-去掉融合服务和CIM 2022-09-21 18:48:35 +08:00
guoyue b8eda12e43 无人机单兵设备增加设备审批 2022-09-21 18:48:19 +08:00
lizhicheng2 83eb319d28 西海岸-能力详情模糊 2022-09-21 17:56:11 +08:00
guoyue bcef134cf9 无人机申请,增加参数 2022-09-21 17:23:51 +08:00
guoyue 7ea1bc972b 无人机、单兵申请更改参数名 2022-09-21 16:18:02 +08:00
guoyue b17f4a3056 无人机单兵设备申请,参数更改 2022-09-21 15:55:43 +08:00
guoyue 560e6af900 西海岸:服务地址改成申请才能看(跟市局一样) 2022-09-21 15:54:15 +08:00
guoyue e7a5a21430 Merge branch 'hi-ucs-dev' of http://124.222.94.39:3000/wuhongjian/hi-ucs into hi-ucs-dev 2022-09-21 15:44:08 +08:00
guoyue 11f4c3fe25 西海岸--单兵设备和无人机:列表/申请接口联调 2022-09-21 15:43:55 +08:00
yuhan_jiang 6827b2ebe5 fix:解决单点无法登出 2022-09-21 11:09:25 +08:00
guoyue b3b35d21b3 删除多余console 2022-09-20 19:28:24 +08:00
guoyue 21adcb62c8 fix:一键申请--融合服务特殊处理 2022-09-20 19:28:13 +08:00
guoyue 5387d6a7a3 西海岸:获取摄像头拼接status为1 2022-09-20 19:08:21 +08:00
guoyue 8b9e11b0a0 我的申请-已申请:新增基础设施-视频预览 2022-09-20 19:07:59 +08:00
guoyue 8cb2f83fb5 西海岸-响应拦截器-去掉reload 2022-09-20 17:39:28 +08:00
guoyue 3e6f875728 西海岸-视频预览--禁止点击播放,给出提示 2022-09-20 16:37:59 +08:00
guoyue 856cf3e41f 西海岸-智能算法:容错处理 2022-09-20 15:15:17 +08:00
guoyue 7f884528e9 西海岸-支持组件服务-算法分类 2022-09-20 13:31:56 +08:00
guoyue 07fff52e43 去掉基础设施--云资源 2022-09-20 10:32:03 +08:00
guoyue c35398209b 视频播放-关闭自动播放功能 2022-09-20 10:24:12 +08:00
guoyue bff2aa9f97 Merge branch 'hi-ucs-dev' of http://124.222.94.39:3000/wuhongjian/hi-ucs into hi-ucs-dev 2022-09-19 19:24:02 +08:00
guoyue 1455e2e0d7 一键申请:融合服务特殊处理 2022-09-19 19:23:41 +08:00
guoyue 47871e8a02 后台-角色管理,新增重置功能 2022-09-19 19:22:06 +08:00
guoyue c6d456055e 后台-岗位管理,新增重置功能 2022-09-19 19:21:46 +08:00
guoyue 18578c1a58 我的待办:西海岸改成v2 2022-09-19 19:20:22 +08:00
guoyue b2abd5f16e 新增研发展厅环境 2022-09-19 19:19:13 +08:00
guoyue 253b9f511a 能力集市-组件服务:智能算法支持类型选择 2022-09-19 19:18:49 +08:00
lizhicheng2 576790ad9d bug fix:视频流url拼写错误 2022-09-19 18:28:44 +08:00
lizhicheng2 f3973fe28d bug fix:单点登录登出问题 2022-09-19 13:04:27 +08:00
a0049873 6ef87c3c79 广场新增删选条件 2022-09-19 10:19:31 +08:00
guoyue de605dd446 Merge branch 'hi-ucs-dev' of http://124.222.94.39:3000/wuhongjian/hi-ucs into hi-ucs-dev 2022-09-16 16:45:53 +08:00
guoyue 1b26210e01 去掉能力集市-浏览量排序 2022-09-16 16:44:26 +08:00
851673013@qq.com f2e68d0105 能力申请单位 2022-09-16 15:15:03 +08:00
guoyue dfba732000 展厅dev环境 2022-09-13 18:04:46 +08:00
guoyue 0661a53d79 强制使用谷歌或者火狐浏览器 2022-09-13 18:04:33 +08:00
guoyue fb0a5e1f38 退出登录,移除本地查询条件 2022-09-13 18:04:12 +08:00
guoyue 31a809f9d9 赋能场景存储查询条件 2022-09-13 18:03:55 +08:00
guoyue 90a3aa8e37 能力云图增加返回按钮 2022-09-13 14:59:44 +08:00
guoyue 1cba78f8e1 融合服务,能力集市详情返回 2022-09-13 09:38:26 +08:00
guoyue 7996d8a701 强制使用谷歌浏览器 2022-09-13 09:38:00 +08:00
guoyue 1e06abbf11 融合服务更新api 2022-09-08 15:46:21 +08:00
guoyue 59abe1614c 融合服务 CIM 技术文档 包头市局西海岸都支持 2022-09-08 15:46:08 +08:00
guoyue 59cc6d93fc 部门联系人和电话改为手动填写 2022-09-08 14:37:15 +08:00
guoyue 9df17910ee fix基础设施控制台报错 2022-09-08 14:22:07 +08:00
guoyue 715792aa7d 应用资源和组件服务调换位置 2022-09-08 14:21:42 +08:00
guoyue 510e72f35e 能力集市列表 隐藏浏览量 2022-09-08 13:15:51 +08:00
guoyue 43aec16d92 融合服务支持收藏量 2022-09-08 13:12:40 +08:00
guoyue 5eefd4d306 消息列表:已读消息更改 2022-09-08 09:44:12 +08:00
guoyue 7f3c5c0921 研发开发环境 2022-09-07 14:30:00 +08:00
guoyue 84e3f220dd 开发环境 2022-09-07 14:29:06 +08:00
guoyue 2e17b5cf80 技术文档:使用手册下载 2022-09-07 14:28:52 +08:00
zhangzhuliang 205cb756be 会议室审核加下载附件按钮和输入框报错 2022-09-02 11:06:11 +08:00
gaoyuanwei c3bc043228 提示语 2022-09-01 17:56:20 +08:00
a0049873 3b09661496 v3 流程 2022-09-01 16:12:44 +08:00
gaoyuanwei 619fc10627 后台审批----附件下载 2022-09-01 14:28:09 +08:00
gaoyuanwei 2ff89ea6e4 前后台-- -- 上传附件 2022-09-01 13:50:42 +08:00
zhangzhuliang 7ff222761c 会议室增加自定义状态码 2022-09-01 09:05:28 +08:00
zhangzhuliang c1643e3cb0 会议室bug提交 2022-08-31 18:26:06 +08:00
95 changed files with 10665 additions and 8871 deletions

View File

@ -7,8 +7,8 @@
*/
var _global = {}
var CONFIGITEM = {
version: 'qingdao', // 青岛
// version: 'xihaian', // 西海岸
// version: 'qingdao', // 青岛
version: 'xihaian', // 西海岸
// version: 'test', // 测试
// version: 'frp', // 内网穿透
// version: 'dev', // 开发
@ -23,7 +23,8 @@ var CONFIGITEM = {
// 西海岸大数据局
xihaian: {
previewUrl: 'http://10.134.135.9:9796/',
apiURL: 'http://10.134.135.9:8888/renren-admin',
// apiURL: 'http://10.134.135.9:8888/renren-admin',
apiURL: 'http://10.16.5.35:8888/renren-admin', // 李志成
websocketURL: 'ws://10.134.135.9:8888/renren-admin/websocket'
},
// 测试

View File

@ -715,3 +715,14 @@ img {
.aui-navbar__header {
width: 268px;
}
// 统一更改弹框高度树形控件高度
.el-dialog__body {
max-height: 600px;
overflow-y: auto;
}
.el-tree {
max-height: 450px;
overflow-y: auto;
}

View File

@ -1,12 +1,13 @@
/*
* @Author: hisense.liangjunhua
* @Date: 2022-08-23 10:30:11
* @LastEditors: hisense.wuhongjian
* @LastEditTime: 2022-08-25 21:05:18
* @LastEditors: hisense.liangjunhua
* @LastEditTime: 2022-09-01 16:06:05
* @Description: 告诉大家这是什么
*/
const returnLocationStr = () => {
return 'qingdao1'
// return 'qingdao'
return 'xihaian'
}
export default returnLocationStr

View File

@ -293,7 +293,7 @@ export default {
})
this.allData = JSON.parse(JSON.stringify(this.transferData))
}).catch(err => {
this.$message.error(err)
this.$message.error('未搜索到相关数据资源')
})
}
},
@ -316,6 +316,7 @@ export default {
title: this.type,
list: this.selectedArray
})
console.log(this.selectedArray, this.displayList, 'this.displayList')
},
getDisplay (displayList) {
this.displayList = []

View File

@ -1,6 +1,6 @@
<template>
<div>
<div class='container'>
<div class="container">
<!-- <div class='container-left' v-if='homeIsShow'>
<div class='left-search'>
<div>
@ -22,90 +22,166 @@
</span>
</el-tree>
</div> -->
<el-card shadow="never" class="aui-card--fill" v-if='homeIsShow'>
<el-form :inline="true">
<!--起始日期 @keyup.enter.native="getDataList()"-->
<el-form-item>
<el-date-picker
v-model="value1"
type="datetimerange"
range-separator="至"
start-placeholder="开始日期"
end-placeholder="结束日期"
format="yyyy-MM-dd HH:mm:ss"
value-format="yyyy-MM-dd HH:mm:ss"
>
</el-date-picker>
</el-form-item>
<!--审核状态-->
<el-form-item>
<el-select
v-model="examineStatus"
placeholder="请选审核状态"
clearable
>
<el-option label="审核完成" value="1"></el-option>
<el-option label="审核中" value="0"></el-option>
</el-select>
</el-form-item>
<!--部门-->
<el-form-item>
<el-select
v-model="abilityDepartment"
placeholder="请选择部门"
clearable
>
<el-option label="全部" value=""></el-option>
<el-option
v-for="item in departmentSelects"
:key="item.label"
v-bind="item"
></el-option>
</el-select>
</el-form-item>
<!--类型-->
<el-form-item>
<el-select v-model="abilityType" placeholder="请选择类型" clearable>
<el-option label="全部" value=""></el-option>
<el-option
v-for="item in typeOptions"
:key="item.name"
:label="item.name"
:value="item.name"
v-bind="item"
></el-option>
</el-select>
</el-form-item>
<!--操作按钮查询-->
<el-form-item>
<el-button @click="getDataList()">{{ $t('query') }}</el-button>
</el-form-item>
<!--操作按钮重置-->
<el-form-item>
<el-button type="primary" @click="resetDataList()">{{
$t('reset')
}}</el-button>
</el-form-item>
</el-form>
<el-card shadow="never" class="aui-card--fill" v-if="homeIsShow">
<div class="mod-demand__bsdemand">
<div class='top-box'>
<!-- <div class='top-box'>
<span class='title'>能力统计</span>
<div class='title-list-style'>
<div v-for="(item,index) in titleList" :key='index' class='title-single' :class="{'choseStyle':choseId=== index}" @click="choseBtn(index)">
<span class='box-style'>{{item.name}}</span>
</div>
</div>
</div>
<div class='second-title'>
<span style='margin-right:30px' :class="[departmentId===1?'departmentStyle':'']" @click="handleChose(1)">
部门发布情况
</div> -->
<div class="second-title">
<span
style="margin-right: 30px"
:class="[
departmentId === 1 || departmentId === 3
? 'departmentStyle'
: ''
]"
@click="handleChose(1)"
>
能力上架统计
</span>
<span v-if='this.choseId===0' :class="[departmentId===2?'departmentStyle':'']" @click="handleChose(2)">
部门使用情况
<span
:class="[
departmentId === 2 || departmentId === 4
? 'departmentStyle'
: ''
]"
@click="handleChose(2)"
>
能力使用统计
</span>
<!-- <span v-if='this.choseId===0' :class="[departmentId===3?'departmentStyle':'']" @click="handleChose(3)">
能力上架明细
</span>
<span v-if='this.choseId===0' :class="[departmentId===4?'departmentStyle':'']" @click="handleChose(4)">
能力使用明细
</span> -->
<span v-if="detailFlag" class="detail-button" @click="goToDetail()">
明细
</span>
<span v-else class="detail-button" @click="goToBack()"> 返回 </span>
</div>
<div class='line-style'></div>
<div class="line-style"></div>
<!--统计表-->
<el-table
:data="tableData"
:header-cell-style="{ textAlign: 'center' }"
:cell-style="{ textAlign: 'center' }"
border
style="width: 100%">
<el-table-column
prop="deptName"
label="部门名称"
min-width="100%">
style="width: 100%"
v-show="this.departmentId === 1 || this.departmentId === 2"
>
<el-table-column prop="name" label="部门名称" min-width="100%">
</el-table-column>
<el-table-column v-if='this.departmentId===1'
prop="resourceNum"
label="发布总数"
min-width="100%">
<el-table-column label="组件">
<el-table-column prop="znsf" label="智能算法" min-width="100%">
</el-table-column>
<el-table-column v-if="this.choseId===0 && this.departmentId===1 "
prop="resourceCarNum"
label="被申请总数"
min-width="100%">
</el-table-column>
<el-table-column v-if="this.departmentId===1"
prop="resourceBrowseNum"
label="浏览总量"
min-width="100%">
</el-table-column>
<el-table-column v-if="this.departmentId===1"
prop="resourceCollectionNum"
label="收藏量"
min-width="100%">
</el-table-column>
<el-table-column v-if="this.choseId===0 && this.departmentId===1 "
prop="resourceVisits"
label="被调用总数"
min-width="100%">
</el-table-column>
<el-table-column v-if="this.choseId===0 && this.departmentId===1 "
prop="resourceRelNum"
label="被应用总数"
min-width="100%">
</el-table-column>
<el-table-column v-if="this.choseId===0 && this.departmentId===1 "
prop="resourceShareNum"
label="需申请数量"
min-width="100%">
</el-table-column>
<el-table-column v-if="this.choseId===0 && this.departmentId===1 "
prop="resourceShareNonNum"
label="免批数量"
min-width="100%">
</el-table-column>
<el-table-column v-if="this.departmentId===2"
prop="resourceUseNum"
label="使用总数"
min-width="100%">
</el-table-column>
<el-table-column v-if="this.departmentId===2"
prop="resourceCallNum"
label="申请总数"
min-width="100%">
<el-table-column prop="tcfw" label="图层服务" min-width="100%">
</el-table-column>
<el-table-column
label="操作"
min-width="92%">
<template slot-scope="scope">
<el-button @click="handleClick(scope.row)" type="text" size="small">查看详情</el-button>
</template>
prop="kfzj"
label="通用开发组件"
min-width="100%"
>
</el-table-column>
<el-table-column
prop="ywzj"
label="业务能力组件"
min-width="100%"
>
</el-table-column>
</el-table-column>
<el-table-column prop="yyzy" label="应用资源" min-width="100%">
</el-table-column>
<el-table-column prop="zj" label="总计" min-width="100%">
</el-table-column>
</el-table>
<!--明细表-->
<el-table
:data="tableData"
style="width: 100%"
v-show="this.departmentId === 3 || this.departmentId === 4"
>
<el-table-column prop="deptName" label="部门" width="180">
</el-table-column>
<el-table-column prop="resourceName" label="资源名称" width="180">
</el-table-column>
<el-table-column prop="type" label="类型"> </el-table-column>
<el-table-column prop="createDate" label="日期"> </el-table-column>
<el-table-column prop="approveStatus" label="状态">
</el-table-column>
</el-table>
<div class="block">
@ -121,15 +197,31 @@
</div>
</el-card>
</div>
<component-used v-if='UsedIsShow' :tableId='tableId' :fatherId='fatherId' @closeChild2='closeChild2'></component-used>
<component-services v-if='servicesIsShow' :tableId='tableId' :fatherId='fatherId' @closeChild='closeChild'></component-services>
<application-resources v-if='resourcesIsShow' :tableId='tableId' :fatherId='fatherId' @closeApplication='closeApplication'></application-resources>
<component-used
v-if="UsedIsShow"
:tableId="tableId"
:fatherId="fatherId"
@closeChild2="closeChild2"
></component-used>
<component-services
v-if="servicesIsShow"
:tableId="tableId"
:fatherId="fatherId"
@closeChild="closeChild"
></component-services>
<application-resources
v-if="resourcesIsShow"
:tableId="tableId"
:fatherId="fatherId"
@closeApplication="closeApplication"
></application-resources>
</div>
</template>
<script>
import componentServices from './componentServices.vue'
import applicationResources from './applicationResources.vue'
import ComponentUsed from './componentUsed.vue'
import { mapState } from 'vuex'
export default {
components: { componentServices, applicationResources, ComponentUsed },
data () {
@ -137,41 +229,63 @@ export default {
inputTxt: '',
tableId: '',
fatherId: '',
treeData: [{
treeData: [
{
label: '一级 1',
children: [{
children: [
{
label: '二级 1-1',
children: [{
children: [
{
label: '三级 1-1-1'
}]
}]
}, {
}
]
}
]
},
{
label: '一级 2',
children: [{
children: [
{
label: '二级 2-1',
children: [{
children: [
{
label: '三级 2-1-1'
}]
}, {
}
]
},
{
label: '二级 2-2',
children: [{
children: [
{
label: '三级 2-2-1'
}]
}]
}, {
}
]
}
]
},
{
label: '一级 3',
children: [{
children: [
{
label: '二级 3-1',
children: [{
children: [
{
label: '三级 3-1-1'
}]
}, {
}
]
},
{
label: '二级 3-2',
children: [{
children: [
{
label: '三级 3-2-1'
}]
}]
}],
}
]
}
]
}
],
total: null,
defaultProps: {
children: 'children',
@ -185,17 +299,60 @@ export default {
resourcesIsShow: false,
UsedIsShow: false,
titleList: [
{ name: '组件服务', key: 1 }, { name: '应用资源', key: 2 }, { name: '基础设施', key: 3 }, { name: '数据资源', key: 3 }, { name: '知识库', key: 3 }
{ name: '组件服务', key: 1 },
{ name: '应用资源', key: 2 },
{ name: '基础设施', key: 3 },
{ name: '数据资源', key: 3 },
{ name: '知识库', key: 3 }
],
tableData: [{ deptName: '部门', resourceNum: 222 }]
tableData: [{ deptName: '部门', resourceNum: 222 }],
tableData2: [
{
approveStatus: '',
createDate: '',
deptName: '',
resourceName: '',
type: ''
}
],
examineStatus: '0', //
value1: [], //
abilityDepartment: '', //
abilityType: '', //
beginTime: '', //
endTime: '', //
typeOptions: [
{ name: '智能算法', value: 1 },
{ name: '图层服务', value: 2 },
{ name: '通用开发组件', value: 3 },
{ name: '页面开发组件', value: 4 },
{ name: '应用资源', value: 5 }
], //
detailFlag: true, //
startDate: '', //
endDate: '' //
}
},
created () {
//
const d = new Date()
let year1, month1, day1
;[year1, month1, day1] = [d.getFullYear(), d.getMonth(), d.getDate()]
const date1 = new Date(year1, month1, day1, 7)
this.value1.push(date1)
//
let year2, month2, day2
d.setTime(d.getTime() - 24 * 60 * 60 * 1000)
;[year2, month2, day2] = [d.getFullYear(), d.getMonth(), d.getDate()]
const date2 = new Date(year2, month2, day2, 7)
this.value1.unshift(date2)
},
mounted () {
this.getFirstTree()
},
computed: {
...mapState(['departmentSelects'])
},
methods: {
//
// searchBtn(){
@ -215,14 +372,16 @@ export default {
}
},
getTreeName (data) {
this.$http.get('/census/center/v3/treeList/', {
this.$http
.get('/census/center/v3/treeList/', {
params: {
keywords: data.name,
deptId: '1067246875800000066'
// pageNo: pageNo || 1,
// pageSize: 20
}
}).then(res => {
})
.then((res) => {
this.tableData = res.data.data
})
},
@ -241,57 +400,196 @@ export default {
// })
// },
//
// --
getFirstTree (page) {
this.$http.get('/census/center/v3/resourceReleaseDetails/', {
this.$http
.get('/census/center/selectDeptDetailTypeCountList/', {
params: {
page: page || 1,
limit: 5,
// id:'1067246875800000066',
resourceType: '组件服务'
approveStatus: this.examineStatus,
deptId: this.abilityDepartment,
params: '',
startDate: this.startDate,
endDate: this.endDate
}
}).then(res => {
this.tableData = res.data.data.list
})
.then((res) => {
const result = res.data.data
for (let i = 0; i < result.length; i++) {
if (!result[i].hasOwnProperty('yyzy')) {
result[i].yyzy = 0
}
if (!result[i].hasOwnProperty('kfzj')) {
result[i].kfzj = 0
}
if (!result[i].hasOwnProperty('znsf')) {
result[i].znsf = 0
}
if (!result[i].hasOwnProperty('tcfw')) {
result[i].tcfw = 0
}
if (!result[i].hasOwnProperty('ywzj')) {
result[i].ywzj = 0
}
result[i].zj =
parseInt(result[i].yyzy) +
parseInt(result[i].kfzj) +
parseInt(result[i].znsf) +
parseInt(result[i].ywzj) +
parseInt(result[i].tcfw)
}
this.tableData = res.data.data
this.total = res.data.data.total
})
},
// 使
// 使-使
getSecondTree () {
this.$http.get('/census/center/v3/resourceUsedDetails/', {
this.$http
.get('/census/center/selectApplyDeptDetailTypeCountList', {
params: {
limit: 5,
page: 1,
// id:'1067246875800000064',
resourceType: '组件服务'
// page: page || 1,
// limit: 5,
approveStatus: this.examineStatus,
deptId: this.abilityDepartment,
params: '',
startDate: this.startDate,
endDate: this.endDate
}
}).then(res => {
this.tableData = res.data.data.list
})
.then((res) => {
const result = res.data.data
for (let i = 0; i < result.length; i++) {
if (!result[i].hasOwnProperty('yyzy')) {
result[i].yyzy = 0
}
if (!result[i].hasOwnProperty('kfzj')) {
result[i].kfzj = 0
}
if (!result[i].hasOwnProperty('znsf')) {
result[i].znsf = 0
}
if (!result[i].hasOwnProperty('tcfw')) {
result[i].tcfw = 0
}
if (!result[i].hasOwnProperty('ywzj')) {
result[i].ywzj = 0
}
result[i].zj =
parseInt(result[i].yyzy) +
parseInt(result[i].kfzj) +
parseInt(result[i].znsf) +
parseInt(result[i].ywzj) +
parseInt(result[i].tcfw)
}
this.tableData = res.data.data
this.total = res.data.data.total
})
},
//
getOneDetail (page) {
var passAndReview = '' // ""
if (this.examineStatus === '审核完成') {
passAndReview = '通过'
} else {
passAndReview = this.examineStatus
}
this.$http
.get('/census/center/selectCensusResourceTable', {
params: {
// limit: 5,
// page: page || 1,
approveStatus: passAndReview,
deptId: this.abilityDepartment,
type: '',
startDate: this.startDate,
endDate: this.endDate
}
})
.then((res) => {
console.log('111111', this.tableData, res.data.data)
this.tableData = res.data.data
this.total = res.data.data.total
})
},
// 使
getTwoDetail (page) {
var passAndReview = '' // ""
if (this.examineStatus === '审核完成') {
passAndReview = '通过'
} else {
passAndReview = this.examineStatus
}
this.$http
.get('/census/center/selectCensusApplyTable', {
params: {
// limit: 5,
// page: page || 1,
approveStatus: this.examineStatus,
deptId: this.abilityDepartment,
type: '',
startDate: this.startDate,
endDate: this.endDate
}
})
.then((res) => {
this.tableData = res.data.data
this.total = res.data.data.total
})
},
//
getReleaseTree (page) {
this.$http.get('/census/center/v3/resourceReleaseDetails/', {
this.$http
.get('/census/center/selectApplyDeptDetailTypeCountList/', {
params: {
limit: 5,
page: page || 1,
// id:'1067246875800000066',
resourceType: '应用资源'
// page: page || 1,
approveStatus: '',
deptId: '',
params: '',
startDate: ''
}
}).then(res => {
this.tableData = res.data.data.list
})
.then((res) => {
const result = res.data.data
for (let i = 0; i < result.length; i++) {
if (!result[i].hasOwnProperty('yyzy')) {
result[i].yyzy = 0
}
if (!result[i].hasOwnProperty('kfzj')) {
result[i].kfzj = 0
}
if (!result[i].hasOwnProperty('znsf')) {
result[i].znsf = 0
}
if (!result[i].hasOwnProperty('tcfw')) {
result[i].tcfw = 0
}
if (!result[i].hasOwnProperty('ywzj')) {
result[i].ywzj = 0
}
result[i].zj =
parseInt(result[i].yyzy) +
parseInt(result[i].kfzj) +
parseInt(result[i].znsf) +
parseInt(result[i].ywzj) +
parseInt(result[i].tcfw)
}
this.tableData = res.data.data
this.total = res.data.data.total
})
},
// 使
getUsedTree () {
this.$http.get('/census/center/v3/resourceReleaseDetails/', {
this.$http
.get('/census/center/v3/resourceReleaseDetails/', {
params: {
limit: 5,
page: 1,
// id:'1067246875800000066',
resourceType: '应用资源'
}
}).then(res => {
})
.then((res) => {
this.tableData = res.data.data.list
})
},
@ -336,15 +634,33 @@ export default {
this.departmentId = index
if (index === 1) {
if (this.choseId === 0) {
if (!this.detailFlag) {
this.detailFlag = !this.detailFlag
}
this.getFirstTree()
} else if (this.choseId === 1) {
this.getReleaseTree()
// this.getReleaseTree()
}
} else if (index === 2) {
if (this.choseId === 0) {
if (!this.detailFlag) {
this.detailFlag = !this.detailFlag
}
this.getSecondTree()
} else {
this.getUsedTree()
// this.getUsedTree()
}
} else if (index === 3) {
if (this.choseId === 0) {
this.getOneDetail()
} else {
// this.getUsedTree()
}
} else if (index === 4) {
if (this.choseId === 0) {
this.getTwoDetail()
} else {
// this.getUsedTree()
}
}
},
@ -366,14 +682,152 @@ export default {
this.homeIsShow = true
this.resourcesIsShow = false
this.handleCurrentChange(1)
},
// //////////
goToDetail () {
this.detailFlag = !this.detailFlag
if (this.departmentId === 1) {
this.handleChose(3)
// this.departmentId = 1;
} else if (this.departmentId === 2) {
this.handleChose(4)
// this.departmentId = 2;
} else {
}
},
//
goToBack () {
// departmentId 13 24
this.detailFlag = !this.detailFlag
if (this.departmentId === 3) {
this.handleChose(1)
// this.departmentId = 1;
} else if (this.departmentId === 4) {
this.handleChose(2)
// this.departmentId = 2;
} else {
}
},
//
getDataList () {
if (this.value1.length > 0) {
this.startDate = this.handleTime(this.value1[0], 'yyyy-MM-dd HH:mm:ss')
this.endDate = this.handleTime(this.value1[1], 'yyyy-MM-dd HH:mm:ss')
}
if (this.examineStatus == 0) {
this.examineStatus = '审核中'
} else {
this.examineStatus = '审核完成'
}
if (this.abilityDepartment) {
this.abilityDepartment = this.abilityDepartment
} else {
this.abilityDepartment = ''
}
if (this.abilityType) {
this.abilityType = this.abilityType
} else {
this.abilityType = ''
}
console.log('查询参数开始时间1', this.startDate)
console.log('查询参数结束时间2', this.endDate)
console.log('查询参数审核状态', this.examineStatus)
console.log('查询参数部门', this.abilityDepartment)
console.log('查询参数类型', this.abilityType)
if (this.departmentId === 1) {
if (this.detailFlag) {
this.handleChose(3)
this.detailFlag = !this.detailFlag
} else {
this.handleChose(1)
this.detailFlag = !this.detailFlag
}
// this.departmentId = 1;
} else if (this.departmentId === 2) {
if (this.detailFlag) {
this.handleChose(4)
this.detailFlag = !this.detailFlag
} else {
this.handleChose(2)
this.detailFlag = !this.detailFlag
}
} else if (this.departmentId === 3) {
this.handleChose(3)
} else {
this.handleChose(4)
}
},
//
resetDataList () {
this.startDate = ''
this.endDate = ''
this.examineStatus = '审核中'
this.abilityDepartment = ''
this.abilityType = ''
if (this.departmentId === 1) {
if (this.detailFlag) {
this.handleChose(3)
this.detailFlag = !this.detailFlag
} else {
this.handleChose(1)
this.detailFlag = !this.detailFlag
}
// this.departmentId = 1;
} else if (this.departmentId === 2) {
if (this.detailFlag) {
this.handleChose(4)
this.detailFlag = !this.detailFlag
} else {
this.handleChose(2)
this.detailFlag = !this.detailFlag
}
} else if (this.departmentId === 3) {
this.handleChose(3)
} else {
this.handleChose(4)
}
},
//
handleTime (time, format) {
if (time == null || time == undefined || time == '') {
return ''
}
var t = new Date(time)
var tf = function (i) {
return (i < 10 ? '0' : '') + i
}
return format.replace(/yyyy|MM|dd|HH|mm|ss/g, function (a) {
switch (a) {
case 'yyyy':
return tf(t.getFullYear())
break
case 'MM':
return tf(t.getMonth() + 1)
break
case 'mm':
return tf(t.getMinutes())
break
case 'dd':
return tf(t.getDate())
break
case 'HH':
return tf(t.getHours())
break
case 'ss':
return tf(t.getSeconds())
break
}
})
}
}
}
</script>
<style lang="scss" scoped>
.container {
display: flex;
flex-direction: column;
}
.container-left {
width: 250px;
@ -464,6 +918,18 @@ input::placeholder {
font-size: 14px;
color: #979eb9;
cursor: pointer;
.detail-button {
width: 60px;
height: 30px;
right: 60px;
background-color: #0058e1;
position: absolute;
text-align: center;
line-height: 30px;
margin-top: -20px;
border-radius: 2px;
color: #fff;
}
}
.line-style {
width: 100%;

View File

@ -2,7 +2,7 @@
<el-card shadow="never" class="roomBox">
<div class="roomExamineSearch">
<el-input
v-model="roomName"
v-model="roomNameA"
style="width: 160px"
placeholder="请输入会议室名称"
></el-input>
@ -195,6 +195,17 @@
<el-input type="textarea" v-model="desc"></el-input>
</el-col>
</el-row>
<el-row style="display: flex; margin-top: 20px">
<el-col :span="2">附件</el-col>
<el-col :span="16">
<el-button
v-if="file != ''"
size="mini"
@click="downloadTemplate(file)"
>下载</el-button
>
</el-col>
</el-row>
<div slot="footer" class="dialog-footer">
<el-button @click="No"> </el-button>
<el-button type="primary" @click="ok"> </el-button>
@ -232,6 +243,9 @@ export default {
id: '',
num: '',
file: '',
name: '',
creator: '',
roomNameA: '',
}
},
mounted() {
@ -241,10 +255,9 @@ export default {
getSerach() {
this.$http
.get(
`/bookMeeting/auditPage?page=${this.page}&limit=${this.limit}&roomName=${this.roomName}&state=${this.value}`
`/bookMeeting/auditPage?page=${this.page}&limit=${this.limit}&roomName=${this.roomNameA}&state=${this.value}`
)
.then(({ data: res }) => {
console.log(res, 7777777)
this.tableData = res.data.list
this.total = res.data.total
})
@ -268,13 +281,15 @@ export default {
if (num == '1') {
this.dialogVisibleChuli = true
this.id = item.id
this.name = item.name
this.roomName = item.roomName
this.creator = item.creator
} else {
this.dialogVisible = true
}
this.$http.get(`bookMeeting/${item.id}`).then(({ data: res }) => {
console.log(55555555)
this.file = res.data.file
})
}
this.lookData = item
},
@ -283,6 +298,9 @@ export default {
auditViem: this.desc,
state: this.radio,
id: this.id,
name: this.name,
roomName: this.roomName,
creator: this.creator,
}
this.$http.put('/bookMeeting', query).then(({ data: res }) => {
this.dialogVisibleChuli = false

View File

@ -0,0 +1,171 @@
<!--
* @Author: hisense.guoyue
* @LastEditors: hisense.guoyue
* @LastEditTime: 2022-09-27 14:23:29
* @Description: 设备审批
-->
<template>
<el-card shadow="never" class="aui-card--fill" style="position:relative">
<el-form :inline="true" :model="dataForm" @keyup.enter.native="getDataList()">
<el-form-item>
<el-input v-model="dataForm.deviceName" :placeholder="$t('process.name')" clearable></el-input>
</el-form-item>
<el-select v-model="dataForm.state" placeholder="请选择" style="margin-right: 10px">
<el-option v-for="item in stateOptions" :key="item.value" :label="item.label" :value="item.value">
</el-option>
</el-select>
<el-form-item>
<el-button type="primary" @click="getDataList()">{{
$t('query')
}}</el-button>
</el-form-item>
</el-form>
<div class="mod-activiti__process">
<el-table v-loading="dataListLoading" :data="dataList" border style="width: 100%">
<el-table-column prop="title" label="申请标题" header-align="center" align="center"></el-table-column>
<el-table-column prop="name" label="申请人信息" header-align="center" align="center"></el-table-column>
<el-table-column label="设备名称" header-align="center" align="center">
<template slot-scope="scope">
<span class="demand-text">{{
(scope.row && scope.row.tbDeviceDTO && scope.row.tbDeviceDTO.name)
}}</span>
</template>
</el-table-column>
<el-table-column prop="state" label="审批状态" header-align="center" align="center">
<template slot-scope="scope">
<span>{{wrjStateObj[scope.row.state]}}</span>
</template>
</el-table-column>
<el-table-column label="应用领域" header-align="center" align="center">
<template slot-scope="scope" v-if="scope.row.applicationArea">
<span class="area-text" v-for="(x,i) in JSON.parse(scope.row.applicationArea)"
:key="i">{{x}}</span>
</template>
</el-table-column>
<el-table-column label="需求依据" header-align="center" align="center" width="200">
<template slot-scope="scope">
<el-tooltip placement="top-start">
<div class="tooltip-box" slot="content">{{(scope.row && scope.row.demand)}}</div>
<span class="demand-text">{{
(scope.row && scope.row.demand)
}}</span>
</el-tooltip>
</template>
</el-table-column>
<el-table-column :label="$t('handle')" fixed="right" header-align="center" align="center" width="150">
<template slot-scope="scope">
<el-button type="text" size="small" @click="showDetail(scope.row)">详情</el-button>
</template>
</el-table-column>
</el-table>
<el-pagination :current-page="page" :page-sizes="[10, 20, 50, 100]" :page-size="limit" :total="total"
layout="total, sizes, prev, pager, next, jumper" @size-change="pageSizeChangeHandle"
@current-change="pageCurrentChangeHandle">
</el-pagination>
</div>
<el-dialog title="审批" :visible.sync="centerDialogVisible" width="30%" center>
<el-form ref="form" :model="form" label-width="80px">
<el-form-item label="审批意见">
<el-input type="textarea" v-model="form.auditViem" placeholder="请输入审批意见"></el-input>
</el-form-item>
</el-form>
<span slot="footer" class="dialog-footer">
<el-button @click="through(3)">不通过</el-button>
<el-button type="primary" @click="through(2)">通过</el-button>
</span>
</el-dialog>
</el-card>
</template>
<script>
import bus from '@/views/bus.js'
import mixinViewModule from '@/mixins/view-module'
import processModule from '@/mixins/process-module'
import { addDynamicRoute } from '@/router'
export default {
mixins: [mixinViewModule, processModule],
data() {
return {
mixinViewModuleOptions: {
getDataListURL: '/deviceApply/myDonePage',
getDataListIsPage: true,
activatedIsNeed: true,
deleteIsBatch: true,
deleteIsBatchKey: 'deploymentId'
},
centerDialogVisible: false,
form: {
auditViem: ''
},
dataForm: {
state: '',
deviceName: null
},
wrjStateObj: {
0: '待审批',
1: '未申请',
2: '通过',
3: '未通过'
},
//
detailInfo: {},
//
deviceDetailInfo: {}
}
},
computed: {
stateOptions() {
let arr = []
Object.keys(this.wrjStateObj).map(v => {
arr.push({
label: this.wrjStateObj[v],
value: v,
})
})
return arr
},
},
methods: {
showDetail(row) {
this.forwardDetail(row)
},
//
forwardDetail(data) {
console.log('data------------>', data);
console.log('this.$route------------>', this.$route);
var routeParams = {
routeName: `${this.$route.name}__detail_${data.id}`,
menuId: `${this.$route.meta.menuId}`,
title: `${this.$route.meta.title} - 详情`,
path: 'hasToDoTasks/deviceApprovalDetail',
params: {
params: data,
id: data.id,
}
}
console.log('routeParams------------>', routeParams);
addDynamicRoute(routeParams, this.$router)
},
},
}
</script>
<style scoped>
.demand-text {
overflow: hidden;
text-overflow: ellipsis;
white-space: nowrap;
}
.area-text {
padding: 0 4px;
}
.tooltip-box {
width: 400px;
}
</style>

View File

@ -0,0 +1,319 @@
<!--
* @Author: hisense.guoyue
* @Date: 2022-06-29 15:59:51
* @LastEditors: hisense.guoyue
* @LastEditTime: 2022-09-27 18:08:00
* @Description: 设备审批详情
-->
<!-- 设备审批详情 -->
<template>
<el-card shadow="never" class="aui-card--fill">
<!-- 申请人详情 -->
<div>
<h3>申请人信息</h3>
<div class="big-BOX">
<p>
<span class="text">申请人<span> {{ detailInfo.name || '--' }}</span></span>
<span class="text">电话<span>{{ detailInfo.phone || '--' }}</span></span>
<span class="text">部门<span>{{ detailInfo.dept || '--' }}</span></span>
</p>
<p>
<span class="text">
能力申请标题<span>
{{ detailInfo.title || '--' }}</span></span>
<span class="text" v-if="detailInfo.applicationSystem">应用系统<span>{{
detailInfo.applicationSystem || '--'
}}</span></span>
<span class="text"></span>
</p>
<p>
<span v-if="detailInfo.applicationArea">
应用领域
<span class="area-item" v-for="(area, i) in JSON.parse(detailInfo.applicationArea)" :key="i">{{ area || '--'
}}</span>
</span>
</p>
<p>
<span>
需求依据<span>
{{ detailInfo.demand || '--' }}</span></span>
</p>
</div>
</div>
<!-- 申请能力 -->
<div class="AbilityApply">
<h3>申请能力</h3>
</div>
<el-card shadow="never" class="aui-card--fill">
<h4>{{ $t('process.circulation') }}</h4>
<el-table :data="dataList" border style="width: 100%;">
<!-- 任务名称 -->
<el-table-column prop="activityName" :label="$t('process.taskName')" header-align="center" align="center">
</el-table-column>
<!-- 处理人 -->
<el-table-column prop="assigneeName" :label="$t('process.assignee')" header-align="center" align="center">
</el-table-column>
<!-- 流程开始时间 -->
<el-table-column prop="startTime" :label="$t('task.startTime')" header-align="center" align="center">
</el-table-column>
<!-- 流程结束时间 -->
<el-table-column prop="endTime" :label="$t('task.endTime')" header-align="center" align="center">
</el-table-column>
<!-- 审核意见 -->
<el-table-column prop="comment" :label="$t('process.comment')" header-align="center" align="center">
</el-table-column>
<!-- 任务时长 -->
<el-table-column prop="durationInSeconds" :label="$t('task.durationInSeconds')" header-align="center"
align="center" width="180"></el-table-column>
</el-table>
</el-card>
</el-card>
</template>
<script>
import * as moment from 'moment';
export default {
data() {
return {
//
detailInfo: {},
dataList: [],
}
},
created() {
this.detailInfo = this.$route.params.params || {};
console.log('this.detailInfo------------>', this.detailInfo);
//
let durationInSeconds = ''
if (this.detailInfo.auditTime && this.detailInfo.auditTime) {
durationInSeconds = moment(this.detailInfo.auditTime).diff(moment(this.detailInfo.createDate), 'seconds')
}
let _obj = {
activityName: this.detailInfo.title || '',
assigneeName: this.detailInfo.auditorName || '',
startTime: this.detailInfo.createDate || '',
endTime: this.detailInfo.auditTime,
comment: this.detailInfo.auditViem,
durationInSeconds: durationInSeconds,
}
this.dataList.push(_obj)
}
}
</script>
<style scoped lang="scss">
::v-deep .big-BOX {
background: rgba(244, 245, 248, 0.8);
padding: 24px;
h3 {
font-size: 16px;
color: #212121;
}
p {
width: 100%;
display: flex;
justify-content: space-between;
color: #212121;
font-size: 14px;
span {
display: inline-block;
margin-left: 8px;
line-height: 32px;
span {
font-weight: bold;
}
}
.text {
width: 500px;
}
}
.lastP {
margin-top: 16px;
width: 100%;
span {
display: flex;
span {
padding: 0 12px;
height: 32px;
background: rgba(232, 234, 239, 1);
border-radius: 2px;
button {
background: unset;
border: 0;
color: #0558e1;
font-size: 14px;
}
}
}
}
}
::v-deep .AbilityApply {
margin-top: 32px;
h3 {
font-size: 16px;
color: #212121;
border-bottom: 1px solid #dddee1;
padding-bottom: 10px;
}
ul {
padding-left: 0px;
li {
list-style: none;
padding: 30px 0;
border-bottom: 1px solid #dddee1;
display: flex;
img {
width: 100px;
height: 100px;
}
div {
margin-left: 16px;
display: flex;
flex-direction: column;
justify-content: center;
h2 {
margin-bottom: 20px;
font-size: 20px;
color: #000;
display: flex;
span {
display: block;
font-size: 14px;
color: #ffffff;
margin-left: 8px;
background: rgba(0, 184, 230, 0.8);
display: flex;
align-items: center;
padding: 0 5px;
border-radius: 4px;
}
}
p {
margin-bottom: 0;
}
}
}
.clearfix:after {
display: block;
content: "";
clear: both;
}
.title {
color: #0558e1;
font-size: 18px;
padding-bottom: 0;
border-bottom: 0;
}
.title:before {
content: "";
width: 6px;
height: 6px;
display: inline-block;
border-radius: 50%;
background: #0558e1;
vertical-align: middle;
margin-right: 10px;
margin-top: 6px;
}
}
}
::v-deep .agreeOr>div {
display: flex;
align-items: center;
.el-input {
margin-right: 10px;
margin-left: 32px;
}
}
::v-deep .agreeOr>div:last-of-type {
margin-top: 15px;
}
.blueAll {
::v-deep .el-radio-button__inner {
width: 80px;
height: 32px;
line-height: 32px;
padding: 0;
border-radius: 2px;
background: #ffffff;
color: #0558e1;
border: 1px solid #0558e1;
}
::v-deep .el-radio-button__orig-radio:checked+.el-radio-button__inner {
box-shadow: unset !important;
background: #0558e1;
color: #ffffff;
}
}
.inputBule {
width: 55px;
height: 32px;
line-height: 32px;
padding: 0;
border-radius: 2px;
background: #0558e1;
color: #ffffff;
border: 1px solid #0558e1;
}
.redAll {
margin-left: 10px;
::v-deep .el-radio-button__inner {
width: 80px;
height: 32px;
line-height: 32px;
padding: 0;
border-radius: 2px;
border: 1px solid #e83a48;
background: #ffffff;
color: #e83a48;
margin-left: 10px;
}
::v-deep .el-radio-button__orig-radio:checked+.el-radio-button__inner {
box-shadow: unset !important;
color: #ffffff;
background: #e83a48;
}
}
.blueInput {
width: 55px;
}
.area-item {
padding-right: 10px;
}
</style>

View File

@ -228,10 +228,10 @@ export default {
ruleForm: {
name: '',
num: '',
area: '',
area: 0,
capacity: '',
pic: '',
id: '',
id: ''
},
limit: 10,
page: 1,
@ -242,11 +242,11 @@ export default {
rules: {
name: [
{ required: true, message: '请输入会议室名称', trigger: 'blur' },
{ min: 1, trigger: 'blur' },
{ min: 1, trigger: 'blur' }
],
area: [
{ required: true, message: '请输入会议室面积', trigger: 'blur' },
{ min: 1, type: 'number', trigger: 'blur' },
{ required: true, message: '请输入会议室面积', trigger: 'blur' }
// { min: 1, message: '', type: 'number', trigger: 'blur' }
],
description: [
{ required: true, message: '请填写描述内容', trigger: 'blur' },
@ -254,14 +254,14 @@ export default {
min: 1,
max: 500,
message: '长度在 1 到 500 个字符',
trigger: 'blur',
},
],
trigger: 'blur'
}
]
},
formLabelWidth: '120px',
checkImgSuccess: true,
dialogVisible: false,
flge: '',
flge: ''
}
},
mounted () {
@ -337,9 +337,9 @@ export default {
})
} else if (i === 'edit') {
this.dialogFormVisible = false
this.$http.put(`/meeting`, this.ruleForm).then(({ data: res }) => {
this.$http.put('/meeting', this.ruleForm).then(({ data: res }) => {
this.ruleForm = res.data
let imgUrl = { name: res.data.name, url: res.data.pic }
const imgUrl = { name: res.data.name, url: res.data.pic }
this.fileList.push(imgUrl)
})
}
@ -373,7 +373,7 @@ export default {
this.flge = 'edit'
this.ruleForm = row
if (row.pic != null) {
let imgUrl = { name: row.name, url: row.pic }
const imgUrl = { name: row.name, url: row.pic }
this.fileList.push(imgUrl)
} else {
this.fileList = []
@ -384,27 +384,27 @@ export default {
this.$confirm('此操作将永久删除该会议室, 是否继续?', '提示', {
confirmButtonText: '确定',
cancelButtonText: '取消',
type: 'warning',
type: 'warning'
})
.then(() => {
this.$http.put(`/meeting`, { delFlag: 1, id: row.id }).then(() => {
this.$http.put('/meeting', { delFlag: 1, id: row.id }).then(() => {
this.queryData()
this.$message({
type: 'success',
message: '删除成功!',
message: '删除成功!'
})
})
})
.catch(() => {
this.$message({
type: 'info',
message: '已取消删除',
message: '已取消删除'
})
})
},
//
outDialog() {},
},
outDialog () {}
}
}
</script>
<style scoped lang="scss">

View File

@ -0,0 +1,149 @@
<!--
* @Author: hisense.guoyue
* @LastEditors: hisense.guoyue
* @LastEditTime: 2022-09-21 10:37:29
* @Description: 设备审批
-->
<template>
<!-- @selection-change="dataListSelectionChangeHandle" -->
<!-- @sort-change="dataListSortChangeHandle" -->
<el-card shadow="never" class="aui-card--fill" style="position:relative">
<div class="mod-activiti__process">
<el-table v-loading="dataListLoading" :data="dataList" border style="width: 100%">
<el-table-column prop="title" label="申请标题" header-align="center" align="center"></el-table-column>
<el-table-column prop="name" label="申请人信息" header-align="center" align="center"></el-table-column>
<el-table-column prop="state" label="审批状态" header-align="center" align="center">
<template slot-scope="scope">
<span>{{wrjStateObj[scope.row.state]}}</span>
</template>
</el-table-column>
<el-table-column prop="phone" label="电话" header-align="center" align="center"></el-table-column>
<el-table-column prop="dept" label="单位" header-align="center" align="center"></el-table-column>
<el-table-column prop="applicationSystem" label="应用系统" header-align="center" align="center">
</el-table-column>
<el-table-column label="应用领域" header-align="center" align="center">
<template slot-scope="scope" v-if="scope.row.applicationArea">
<span class="area-text" v-for="(x,i) in JSON.parse(scope.row.applicationArea)"
:key="i">{{x}}</span>
</template>
</el-table-column>
<el-table-column label="需求依据" header-align="center" align="center" width="200">
<template slot-scope="scope">
<el-tooltip placement="top-start">
<div class="tooltip-box" slot="content">{{(scope.row && scope.row.demand)}}</div>
<span class="demand-text">{{
(scope.row && scope.row.demand)
}}</span>
</el-tooltip>
</template>
</el-table-column>
<el-table-column :label="$t('handle')" fixed="right" header-align="center" align="center" width="150">
<template slot-scope="scope">
<el-button type="text" size="small" @click="taskHandle(scope.row)">审批</el-button>
</template>
</el-table-column>
</el-table>
<el-pagination :current-page="page" :page-sizes="[10, 20, 50, 100]" :page-size="limit" :total="total"
layout="total, sizes, prev, pager, next, jumper" @size-change="pageSizeChangeHandle"
@current-change="pageCurrentChangeHandle">
</el-pagination>
</div>
<el-dialog title="审批" :visible.sync="centerDialogVisible" width="30%" center>
<el-form ref="form" :model="form" label-width="80px">
<el-form-item label="审批意见">
<el-input type="textarea" v-model="form.auditViem" placeholder="请输入审批意见"></el-input>
</el-form-item>
</el-form>
<span slot="footer" class="dialog-footer">
<el-button @click="through(3)">不通过</el-button>
<el-button type="primary" @click="through(2)">通过</el-button>
</span>
</el-dialog>
</el-card>
</template>
<script>
import bus from '@/views/bus.js'
import mixinViewModule from '@/mixins/view-module'
import processModule from '@/mixins/process-module'
export default {
mixins: [mixinViewModule, processModule],
data() {
return {
mixinViewModuleOptions: {
getDataListURL: '/deviceApply/auditPage',
getDataListIsPage: true,
activatedIsNeed: true,
deleteIsBatch: true,
deleteIsBatchKey: 'deploymentId'
},
centerDialogVisible: false,
form: {
auditViem: ''
},
dataForm: {
state: 0
},
rowData: {},
wrjStateObj: {
0: '待审批',
1: '未申请',
2: '通过',
3: '未通过'
}
}
},
methods: {
taskHandle(row) {
this.form.auditViem = '';
this.rowData = row;
this.centerDialogVisible = true
},
through(state) {
// 2- 3-
this.handlePut(state)
},
handlePut(state) {
this.$http.put(`/deviceApply`, {
...this.rowData,
state: state,
...this.form
}).then(({ data: res }) => {
console.log('res------------>', res);
if (res.code !== 0) {
return this.$message.error(res.msg)
}
this.centerDialogVisible = false
this.$message({
message: this.$t('prompt.success'),
type: 'success',
duration: 500,
onClose: () => {
this.query()
}
})
}).catch((err) => {
console.log('err------------>', err);
})
}
},
}
</script>
<style scoped>
.demand-text {
overflow: hidden;
text-overflow: ellipsis;
white-space: nowrap;
}
.area-text {
padding: 0 4px;
}
.tooltip-box {
width: 400px;
}
</style>

View File

@ -38,6 +38,15 @@
@click="videoAndImg(itemsonson.note1)"
>
浏览
</div>
<div
class="videoAndImgCss"
v-if="
itemsonson.name === '上传附件'
"
@click="videoAndImg(itemsonson.note1)"
>
下载
</div>
<div
v-else-if="itemsonson.type === ' multipleAdditions'"
@ -510,7 +519,7 @@ export default {
color: #333333;
font-size: 22px;
margin-bottom: 20px;
background: url('~@/assets/img/sj-jx.png') no-repeat;
background: url("~@/assets/img/sj-jx.png") no-repeat;
background-position-x: 15px;
}
.multipleAdditionsClass {

View File

@ -36,8 +36,10 @@
tip="支持文件类型大小不超过100M"></upload>
<upload @changeInfoList='changeInfoList' :title='item.name' accept='.mp4' :list="item" v-else-if="item.type == 'video'" type="视频" btnName="上传视频" :maxCount="1" :dataList="item"
tip="支持视频类型大小不超过100M"></upload>
<upload @changeInfoList='changeInfoList' :title='item.name' accept='.zip' :list="item" v-else-if="item.type == 'package'" type="安装包" btnName="上传安装包" :maxCount="1" :dataList="item"
<upload @changeInfoList='changeInfoList' :title='item.name' accept='.zip' :list="item" v-else-if="item.type == 'package' &&item.name != '上传附件'" type="安装包" btnName="上传安装包" :maxCount="1" :dataList="item"
tip="支持.zip类型大小不超过100M"></upload>
<upload @changeInfoList='changeInfoList' :title='item.name' accept='.pdf,.ppt,.xlsx,.doc,.docx,.zip' :list="item" v-else-if="item.name == '上传附件'" type="附件" btnName="上传附件" :maxCount="1" :dataList="item"
tip="支持.doc,.docx,.zip,.ppt,.pdf类型大小不超过100M"></upload>
<input-select-checkbox :changeField='changeField' :list="[]" v-else-if="item.type == 'AbilityType'" type="disabled" :data="item" :name="item.name" :value="typeInput"></input-select-checkbox>
<input-select-checkbox :changeField='changeField' :list="[]" v-else-if="item.type == 'ComponentType'" type="disabled" :data="item" :name="item.name" :value="type"></input-select-checkbox>
<input-select-checkbox :changeField='changeField' :list="[]" v-else-if="item.type == 'input'" type="input" :data="item" :name="item.name"></input-select-checkbox>

View File

@ -15,16 +15,25 @@
<el-button @click="getDataList()">{{ $t('query') }}</el-button>
</el-form-item>
<el-form-item>
<el-button v-if="$hasPermission('sys:post:save')" type="primary" @click="addOrUpdateHandle()">{{ $t('add') }}</el-button>
<el-button v-if="$hasPermission('sys:post:save')" type="primary" @click="addOrUpdateHandle()">{{ $t('add') }}
</el-button>
</el-form-item>
<el-form-item>
<el-button v-if="$hasPermission('sys:post:delete')" type="danger" @click="deleteHandle()">{{ $t('deleteBatch') }}</el-button>
<el-button v-if="$hasPermission('sys:post:delete')" type="danger" @click="deleteHandle()">{{ $t('deleteBatch')
}}</el-button>
</el-form-item>
<el-form-item>
<el-button v-if="$hasPermission('sys:post:reset')" type="primary" @click="resetHandle()">{{ $t('reset') }}
</el-button>
</el-form-item>
</el-form>
<el-table v-loading="dataListLoading" :data="dataList" border @selection-change="dataListSelectionChangeHandle" style="width: 100%;">
<el-table v-loading="dataListLoading" :data="dataList" border @selection-change="dataListSelectionChangeHandle"
style="width: 100%;">
<el-table-column type="selection" header-align="center" align="center" width="50"></el-table-column>
<el-table-column prop="postCode" :label="$t('post.postCode')" header-align="center" align="center"></el-table-column>
<el-table-column prop="postName" :label="$t('post.postName')" header-align="center" align="center"></el-table-column>
<el-table-column prop="postCode" :label="$t('post.postCode')" header-align="center" align="center">
</el-table-column>
<el-table-column prop="postName" :label="$t('post.postName')" header-align="center" align="center">
</el-table-column>
<el-table-column prop="sort" :label="$t('post.sort')" header-align="center" align="center"></el-table-column>
<el-table-column prop="status" :label="$t('post.status')" header-align="center" align="center">
<template slot-scope="scope">
@ -33,18 +42,15 @@
</el-table-column>
<el-table-column :label="$t('handle')" fixed="right" header-align="center" align="center" width="150">
<template slot-scope="scope">
<el-button v-if="$hasPermission('sys:post:update')" type="text" size="small" @click="addOrUpdateHandle(scope.row.id)">{{ $t('update') }}</el-button>
<el-button v-if="$hasPermission('sys:post:delete')" type="text" size="small" @click="deleteHandle(scope.row.id)">{{ $t('delete') }}</el-button>
<el-button v-if="$hasPermission('sys:post:update')" type="text" size="small"
@click="addOrUpdateHandle(scope.row.id)">{{ $t('update') }}</el-button>
<el-button v-if="$hasPermission('sys:post:delete')" type="text" size="small"
@click="deleteHandle(scope.row.id)">{{ $t('delete') }}</el-button>
</template>
</el-table-column>
</el-table>
<el-pagination
:current-page="page"
:page-sizes="[10, 20, 50, 100]"
:page-size="limit"
:total="total"
layout="total, sizes, prev, pager, next, jumper"
@size-change="pageSizeChangeHandle"
<el-pagination :current-page="page" :page-sizes="[10, 20, 50, 100]" :page-size="limit" :total="total"
layout="total, sizes, prev, pager, next, jumper" @size-change="pageSizeChangeHandle"
@current-change="pageCurrentChangeHandle">
</el-pagination>
<!-- 弹窗, 新增 / 修改 -->
@ -77,6 +83,14 @@ export default {
},
components: {
AddOrUpdate
},
methods: {
resetHandle() {
Object.keys(this.dataForm).map(v => this.dataForm[v] = '')
this.$nextTick(() => {
this.getDataList()
})
},
}
}
</script>

View File

@ -14,6 +14,9 @@
<el-form-item>
<el-button v-if="$hasPermission('sys:role:delete')" type="danger" @click="deleteHandle()">{{ $t('deleteBatch') }}</el-button>
</el-form-item>
<el-form-item>
<el-button v-if="$hasPermission('sys:role:reset')" type="primary" @click="resetHandle()">{{ $t('reset') }}</el-button>
</el-form-item>
</el-form>
<el-table
v-loading="dataListLoading"
@ -68,6 +71,14 @@ export default {
},
components: {
AddOrUpdate
},
methods: {
resetHandle() {
this.dataForm.name = '';
this.$nextTick(() => {
this.getDataList()
})
},
}
}
</script>

View File

@ -1,15 +1,16 @@
/*
* @Author: hisense.wuhongjian
* @Date: 2020-07-07 16:03:23
* @LastEditors: hisense.wuhongjian
* @LastEditTime: 2022-08-27 14:25:54
* @LastEditors: hisense.liangjunhua
* @LastEditTime: 2022-09-19 09:36:49
* @Description: 系统静态参数配置
*/
var _global = {}
var CONFIGITEM = {
version: 'qingdao', //
//version: 'xihaian', // 西
// version: 'qingdao', //
version: 'xihaian', // 西
// version: 'dev', //
// version: 'zhanTingDev', // dev (2022-09-13:)
//version: 'test', //
//version: 'frp', // 穿
vNum: 'v0.8.7.2',
@ -31,6 +32,25 @@ var CONFIGITEM = {
POI_URL:
'http://15.72.178.129:8090/iserver/services/addressmatch-qingdaoPOI181015/restjsr/v1/address',
},
//
zhanTingDev: {
loginInfo: {
//
loginIp: '10.132.191.3',
loginPort: '8320',
userName: 'ynszdz',
userPwd: 'Admin@123',
},
backUrl: 'http://15.72.183.90:8001',
previewUrl: 'http://15.72.183.90:7008/',
//frontUrl: 'http://15.72.183.90:7008/document/#/devModelFile/',
//apiURL: 'http://15.72.183.90:8000/renren-admin',
// websocketURL: '10.16.5.146:8888/renren-admin', //
websocketURL: '10.18.1.99:8889/renren-admin',
// websocketURL: '10.16.5.35:8888/renren-admin',
POI_URL:
'http://15.72.178.129:8090/iserver/services/addressmatch-qingdaoPOI181015/restjsr/v1/address',
},
// 西
xihaian: {
loginInfo: {
@ -42,7 +62,10 @@ var CONFIGITEM = {
},
backUrl: 'http://10.134.135.9:9797',
previewUrl: 'http://10.134.135.9:9796/',
websocketURL: '10.134.135.9:8888/renren-admin',
// websocketURL: '10.134.135.9:8888/renren-admin', //
// websocketURL: '10.134.135.92:8888/renren-admin', //
websocketURL: '192.168.124.254:8888/renren-admin', // -
// websocketURL: '10.18.1.99:8889/renren-admin', //
POI_URL:
'http://15.72.178.129:8090/iserver/services/addressmatch-qingdaoPOI181015/restjsr/v1/address',
},
@ -58,6 +81,7 @@ var CONFIGITEM = {
backUrl: 'http://localhost:8001',
previewUrl: 'http://192.168.124.236:9796/',
websocketURL: '192.168.124.236:8888/renren-admin',
// websocketURL: '10.18.1.99:8889/renren-admin',
POI_URL:
'http://15.72.178.129:8090/iserver/services/addressmatch-qingdaoPOI181015/restjsr/v1/address',
},

View File

@ -2,7 +2,7 @@
* @Author: hisense.wuhongjian
* @Date: 2020-07-07 16:03:23
* @LastEditors: hisense.wuhongjian
* @LastEditTime: 2022-08-25 18:47:08
* @LastEditTime: 2022-08-29 09:55:56
* @Description: 数据资源参数配置
*/
// eslint-disable-next-line no-undef
@ -34,10 +34,10 @@ if (newLocation !== 'baotou' && newLocation !== 'xihaian') {
{ name: '能力云图', key: 'capabilityCloud' },
{ name: '能力统计', key: 'abilityStatistics' },
// { name: '', key: 'developmentGuide' },
{ name: '技术文档', key: 'instructionManual' },
{ name: '新手指南', key: 'instructionManual' },
{ name: '需求中心', key: 'demandCenter' },
// { name: '', key: 'personalCenter' },
{ name: '区市站点', key: 'mapTest' },
// { name: '', key: 'mapTest' },
// { name: '', key: 'houtaiguanli' },
// { name: '', key: 'assignCase' },
{ name: '融合服务', key: 'integrationServices' },

Binary file not shown.

View File

@ -20,14 +20,6 @@
import mybus from '@/myplugins/mybus'
const router = useRouter()
// export default {
// name: 'App',
// data() {
// return {
// ,
// }
// },
// }
const locale = zhCN
const token = Cookies.get('ucsToken')
console.log('token=================>', token)
@ -60,6 +52,7 @@
</script>
<style lang="less">
@import '~@/vab/styles/vab.less';
#vue-admin-beautiful {
max-width: 1920px;
// max-height: 1080px;
@ -68,6 +61,7 @@
position: relative;
background-color: #fff;
}
body {
font-size: 0.14rem;
}

View File

@ -99,17 +99,11 @@ export function getHls(params) {
}
//-
export function getCameraInfoByAreaId(params) {
return axios.get(
'http://10.134.135.92:9537/data_service/getCamera/getCameraInfoByAreaId?areaId=' +
params.areaId,
return axios.get(`http://10.134.135.92:9537/data_service/getCamera/getCameraInfoByAreaId?areaId=${params.areaId}`,
config2
)
}
//-
export function getCameraByCondition(params) {
return axios.get(
'http://10.134.135.92:9537/data_service/getCamera/getCameraByCondition?' +
params,
config2
)
return axios.post('http://10.134.135.92:9537/data_service/getCamera/getCameraByCondition', params, config2)
}

View File

@ -74,7 +74,8 @@ export function getHls(params) {
//
export function sgcInsert(data) {
return request({
url: '/resourcecar/insert',
// url: '/resourcecar/insert',
url: '/resourcecar/batchInsert', // 西-
method: 'post',
data,
})
@ -368,6 +369,16 @@ export function getIntegrationServicesList(params) {
params,
})
}
// --
export function updateIntegrationServices(data) {
return request({
url: '/fuse',
method: 'put',
data,
})
}
//
export function getCountByFuzzyQuery(params) {
return request({
@ -434,3 +445,26 @@ export function selectAppList(params) {
params,
})
}
// 西-
export function getSoldierList(params) {
return request({
url: '/device/page',
method: 'get',
params,
})
}
// 西-
export function soldierApply(data) {
return request({
url: '/deviceApply',
method: 'post',
data,
})
}
// 西--
export function getMaxApplyNum(number) {
return request({
url: '/processForm/tabilityapplication/canApply/' + number,
method: 'get',
})
}

View File

@ -284,3 +284,20 @@ export function endProcess(params) {
params,
})
}
// 西--
export function deviceApplylist(params) {
return request({
url: '/deviceApply/page',
method: 'get',
params,
})
}
// 西----
export function getDeviceDetail(deviceId) {
return request({
url: `/device/${deviceId}`,
method: 'get',
})
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 293 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.5 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 859 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 987 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 931 B

View File

@ -505,3 +505,7 @@ export const RECOURCE_G_ICON = {
resourceProtection:
'/src/assets/resourceManageMap/pic/point-resettlement-circle.png',
}
// -tab
// 西-
export const DETAIL_PAGE_CONTENT_DEFAULT_TAB = whoShow.itShowXiHaiAn ? '基础设施' : '应用资源'

View File

@ -85,7 +85,7 @@ export const constantRoutes = [
{
path: '/',
component: Layout,
redirect: '/home',
redirect: whoShow.itShowXiHaiAn ? '/DetailsPageconetent' : '/home',
meta: {
title: '能力管理平台编目',
icon: 'apps-line',
@ -495,7 +495,7 @@ export const constantRoutes = [
name: 'instructionManual',
component: () => import('@/views/instructionManual/index'),
meta: {
title: '技术文档',
title: '新手指南',
icon: 'error-warning-line',
},
},

View File

@ -60,7 +60,7 @@ export function MapFun(mapObj) {
/**
* 定义地物编辑服务
*/
const featureService = L.supermap.featureService(
const featureService = L.supermap && L.supermap.featureService && L.supermap.featureService(
_mapConfig.config.EDITORDATA_URL
)
@ -1657,14 +1657,16 @@ export function MapFun(mapObj) {
features,
url,
layerName,
createPopupFun
createPopupFun,
url2
) {
console.log(
'_addResourceOnMapWithoutSuperMapCluster===============>',
features,
url,
layerName,
createPopupFun
createPopupFun,
url2
)
// 0
// if (features.length < 1) {
@ -1685,14 +1687,19 @@ export function MapFun(mapObj) {
let layers = null
//
layers = createMarkerClusterLayer()
const icon = createDefaultFeatureStyle({
const icon1 = createDefaultFeatureStyle({
img: url,
iconSize: [36, 36],
iconSize: [33, 33],
})
const icon2 = createDefaultFeatureStyle({
img: url2,
iconSize: [33, 33],
})
features.map((feature) => {
var bounds = map.getBounds()
// console.log("",feature.latLng);
if ( feature.hasOwnProperty('latLng')) {
let icon = feature.active?icon2:icon1
const marker = L.marker(feature.latLng, { icon })
if (createPopupFun !== null) {
marker.uuid = feature.uuid || ''
@ -1728,6 +1735,8 @@ export function MapFun(mapObj) {
}
marker.on('click', e=>{
console.log('点位数据', e)
mybus.emit('pointMarkerClick', feature)
})
layers.addLayer(marker)
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.7 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.0 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.0 KiB

View File

@ -123,7 +123,7 @@ export function HieimpMap() {
// debugger;
//
L.supermap
L.supermap && L.supermap.layerInfoService && L.supermap
.layerInfoService(_mapConfig.config.QUERY_URL)
.getLayersInfo(function (result) {
// doSomething

View File

@ -1,14 +1,14 @@
/*
* @Author: hisense.liangjunhua
* @Date: 2022-08-22 18:22:16
* @LastEditors: hisense.wuhongjian
* @LastEditTime: 2022-08-25 21:05:32
* @LastEditors: hisense.liangjunhua
* @LastEditTime: 2022-09-01 16:05:31
* @Description: 告诉大家这是什么
*/
const returnLocationStr = () => {
// eslint-disable-next-line no-undef
return CONFIGITEM.version === 'xihaian' ? 'xihaian' : 'qingdao1'
return CONFIGITEM.version === 'xihaian' ? 'xihaian' : 'qingdao'
}
export default returnLocationStr

View File

@ -11,8 +11,14 @@ import store from '@/store'
import qs from 'qs'
import router from '@/router'
// import { isArray } from '@/utils/validate'
import { message } from 'ant-design-vue'
import { getAccessToken, setAccessToken } from '@/utils/accessToken'
import {
message
} from 'ant-design-vue'
import {
getAccessToken,
setAccessToken
} from '@/utils/accessToken'
let loadingInstance
@ -26,14 +32,20 @@ const handleCode = (code, msg, res) => {
// debugger
switch (code) {
case 401:
debugger
store.dispatch('user/resetAll').catch(() => { })
break
case 403:
router.push({ path: '/401' }).catch(() => {})
router.push({
path: '/401'
}).catch(() => { })
break
case 500:
message.error(msg || '接口异常')
break
case 505:
message.error(msg || '该时段已被预约')
break
case 302:
// window.location.href = redirect
break
@ -91,16 +103,22 @@ instance.interceptors.response.use(
console.log('接口返回headers', response.headers)
console.log('接口返回REDIRECT', response.headers.redirect)
response['Access-Control-Expose-Headers'] = 'redirect'
const { code, message } = response.data
const {
code,
message
} = response.data
if (response.headers.token) {
setAccessToken(response.headers.token)
}
if (response.headers.redirect) {
const _old_href = window.location.href.split('#')[0];
const _new_href = response.headers.redirect.split('#')[0];
window.location.replace(response.headers.redirect)
// setTimeout(() => {
// url
if (_old_href === _new_href) {
location.reload()
// }, 1000)
}
return response
}
if (response.headers.redirect === '/#/login') {
@ -126,7 +144,7 @@ instance.interceptors.response.use(
location.reload()
}, 1000)
}
handleCode(code, message, response.headers)
handleCode(code, message || response.data.msg, response.headers)
if (loadingInstance) loadingInstance.close()
// const { data, config } = response
// const { code, msg } = data
@ -150,7 +168,10 @@ instance.interceptors.response.use(
console.log('接口error', error)
if (loadingInstance) loadingInstance.close()
const { response, message } = error
const {
response,
message
} = error
if (error.response) {
console.log('接口返回', response)
console.log('接口返回headers', response.headers)
@ -162,12 +183,17 @@ instance.interceptors.response.use(
window.location.replace(response.headers.redirect)
return Promise.resolve()
}
const { status, data } = response
const {
status,
data
} = response
handleCode(status, data.msg || message, response.headers.redirect)
return Promise.reject(error)
} else {
let { message } = error
let {
message
} = error
if (message === 'Network Error') {
message = '后端接口连接异常'
}

View File

@ -11,28 +11,18 @@
<span class="title">基础设施</span>
</div>
<div class="infrastructure-content">
<div
class="infrastructure-content-son"
v-for="(item, index) in myDataList"
:key="index"
>
<div
class="num-class"
:style="`background:url(${item.img}) no-repeat;background-position:top left;background-size:40%`"
>
<div class="infrastructure-content-son" v-for="(item, index) in myDataList" :key="index">
<div class="num-class"
:style="`background:url(${item.img}) no-repeat;background-position:top left;background-size:40%`">
<div>{{ item.title }}</div>
<div>{{ item.snum }}</div>
</div>
<div class="health-degree">
<div class="health-degree-title">健康度</div>
<a-progress
:stroke-color="{
<a-progress :stroke-color="{
'0%': '#108ee9',
'100%': '#87d068',
}"
:percent="item.percentage"
:show-info="false"
/>
}" :percent="item.percentage" :show-info="false" />
</div>
<div class="percentage" :style="fontFormat(item.title)">
{{ item.percentage }}%
@ -44,6 +34,8 @@
<script setup>
import { ref } from 'vue'
import { infrastructureInfo } from '@/api/capabilityCloud'
const itShowXiHaiAn = whoShow.itShowXiHaiAn
let myDataList = ref([
{
title: '视频资源数量',
@ -52,15 +44,15 @@
img: require('../../../assets/capabilityCloud/infrastructure_sz.png'),
},
{
title: '云资源',
snum: '0',
percentage: '0',
title: itShowXiHaiAn ? '单兵设备' : '云资源',
snum: itShowXiHaiAn ? '2' : 0,
percentage: itShowXiHaiAn ? '100' : '0',
img: require('../../../assets/capabilityCloud/infrastructure_yz.png'),
},
{
title: '感知资源',
snum: '0',
percentage: '0',
title: itShowXiHaiAn ? '无人机' : '感知资源',
snum: itShowXiHaiAn ? '2' : 0,
percentage: itShowXiHaiAn ? '100' : '0',
img: require('../../../assets/capabilityCloud/infrastructure_gz.png'),
},
])
@ -69,10 +61,10 @@
case '视频资源数量':
return 'color: #32ff91;'
break
case '云资源':
case itShowXiHaiAn ? '单兵设备' : '云资源':
return 'color: #f4fd25;'
break
case '感知资源':
case itShowXiHaiAn ? '无人机' : '感知资源':
return 'color: #ff1d18;'
break
}
@ -95,6 +87,8 @@
val.snum = obj.amount
}
})
}).catch(err => {
console.log('err------------>', err);
})
</script>
<style lang="less" scoped>
@ -112,24 +106,27 @@
-webkit-transition: all 100ms ease-out;
-moz-transition: all 100ms ease-out;
transition: all 100ms ease-out;
.infrastructure-top {
width: 4.4rem;
height: 0.44rem;
position: absolute;
top: 0;
background: url('~@/assets/capabilityCloud/infrastructure_title.png')
no-repeat;
background: url('~@/assets/capabilityCloud/infrastructure_title.png') no-repeat;
background-size: cover;
background-position: center;
line-height: 0.44rem;
text-align: center;
.title {
font-size: 0.24rem;
}
}
.infrastructure-content {
width: 4rem;
margin-top: 0.62rem;
.infrastructure-content-son {
display: flex;
width: 4rem;
@ -139,11 +136,13 @@
margin-bottom: 0.14rem;
padding-left: 0.1rem;
}
.num-class {
width: 1.5rem;
height: 1rem;
text-align: center;
margin-right: 0.2rem;
&>div:first-child {
font-size: 0.18rem;
color: #ffffff;
@ -151,32 +150,39 @@
line-height: 0.18rem;
margin-top: 0.3rem;
}
&>div:last-child {
font-size: 0.36rem;
line-height: 0.36rem;
color: #1ce2e5;
}
}
.health-degree {
width: 1.35rem;
.health-degree-title {
font-size: 0.14rem;
color: rgba(255, 255, 255, 0.6);
margin-bottom: 0.08rem;
}
:deep(.ant-progress-outer) {
height: 0.27rem;
}
:deep(.ant-progress-inner) {
height: 0.27rem;
border-radius: 0.14rem;
border: 0.01rem solid rgba(8, 153, 231, 0.6);
background: rgba(21, 65, 123, 0.6);
div {
height: 0.27rem !important;
}
}
}
// .health-degree:
.percentage {
height: 0.57rem;
@ -189,23 +195,29 @@
}
}
}
.infrastructure:hover {
border: 2px solid;
animation: turn 5s linear infinite;
}
@keyframes turn {
0% {
border-image: linear-gradient(to right, #003194, #00ffea) 1;
}
25% {
border-image: linear-gradient(to bottom, #003194, #00ffea) 1;
}
50% {
border-image: linear-gradient(to left, #003194, #00ffea) 1;
}
75% {
border-image: linear-gradient(to top, #003194, #00ffea) 1;
}
100% {
border-image: linear-gradient(to right, #003194, #00ffea) 1;
}

View File

@ -0,0 +1,34 @@
<template>
<div class="detail-back" @click="previousPage" :style="{ color: textColor }">
返回
</div>
</template>
<script setup>
import { reactive, ref, watch, defineProps } from 'vue'
import { useRouter } from 'vue-router'
const router = useRouter()
const props = defineProps({
textColor: { type: String, default: '' },
})
const previousPage = () => {
window.history.go(-1)
}
</script>
<style scoped lang="less">
.detail-back {
position: absolute;
opacity: 0.7;
top: 0.5rem;
left: 100px;
font-size: 0.20rem;
cursor: pointer;
background: -webkit-linear-gradient(90deg, #99a8d0, #fff);
font-weight: 600;
-webkit-background-clip: text;
-webkit-text-fill-color: transparent;
}
</style>

View File

@ -7,6 +7,7 @@
-->
<template>
<div class="capability-cloud">
<capability-cloud-back></capability-cloud-back>
<div class="header">
<span class="title" @click="goHome">数字能力超市</span>
</div>
@ -29,6 +30,7 @@
import Infrastructure from '@/views/capabilityCloud/components/Infrastructure.vue'
import DataResources from '@/views/capabilityCloud/components/DataResources.vue'
import KnowledgeBase from '@/views/capabilityCloud/components/KnowledgeBase.vue'
import capabilityCloudBack from '@/views/capabilityCloud/components/capabilityCloudBack.vue'
import { useRouter } from 'vue-router'
const router = useRouter()
const goHome = () => {

View File

@ -69,6 +69,7 @@
:dataFrom="dataFrom"
:fileList="fileList"
:packageList="packageList"
:accessoryList="accessoryList"
:imgList="imgList"
:externalField="['接口服务', '接口请求方式']"
:configure="bs"
@ -370,6 +371,7 @@
const navList2 = ref([])
const fileList = ref({})
const packageList = ref({})
const accessoryList = ref({})
const imgList = ref({})
const videoList = ref({})
const data = ref({})
@ -787,6 +789,9 @@
mybus.on('chagePackageList', (obj) => {
packageList.value = obj
})
mybus.on('chageAccessory', (obj) => {
accessoryList.value = obj
})
mybus.on('chageImgList', (obj) => {
imgList.value = obj
})
@ -836,6 +841,7 @@
mybus.off('chageDataFromDwon')
mybus.off('chageVideoList')
mybus.off('chagePackageList')
mybus.off('chageAccessory')
})
</script>
<style lang="less" scoped>

View File

@ -69,6 +69,7 @@
:dataFrom="dataFrom"
:fileList="fileList"
:fileList2="fileList2"
:accessoryList="accessoryList"
:imgList="imgList"
:configure="bs"
@submit="submit()"
@ -339,6 +340,7 @@
const navList2 = ref([])
const fileList = ref({})
const fileList2 = ref({})
const accessoryList = ref({})
const imgList = ref({})
const videoList = ref({})
const data = ref({})
@ -751,6 +753,9 @@
mybus.on('chageVideoList', (obj) => {
videoList.value = obj
})
mybus.on('chageAccessory', (obj) => {
accessoryList.value = obj
})
//datafrom
mybus.on('chageDataFromDwon', (obj) => {
switch (obj.attrType) {
@ -793,6 +798,7 @@
mybus.off('chageFileList2')
mybus.off('chageImgList')
mybus.off('chageDataFromDwon')
mybus.off('chageAccessory')
})
</script>
<style lang="less" scoped>

View File

@ -69,6 +69,7 @@
:dataFrom="dataFrom"
:fileList="fileList"
:fileList2="fileList2"
:accessoryList="accessoryList"
:configure="bs"
@submit="submit()"
@back="back()"
@ -338,6 +339,7 @@
const navList2 = ref([])
const fileList = ref({})
const fileList2 = ref({})
const accessoryList = ref({})
const imgList = ref({})
const videoList = ref({})
const data = ref({})
@ -748,6 +750,9 @@
mybus.on('chageVideoList', (obj) => {
videoList.value = obj
})
mybus.on('chageAccessory', (obj) => {
accessoryList.value = obj
})
//datafrom
mybus.on('chageDataFromDwon', (obj) => {
switch (obj.attrType) {
@ -790,6 +795,7 @@
mybus.off('chageFileList2')
mybus.off('chageImgList')
mybus.off('chageDataFromDwon')
mybus.off('chageAccessory')
})
</script>
<style lang="less" scoped>

View File

@ -66,6 +66,7 @@
:dataFrom="dataFrom"
:fileList="fileList"
:fileList2="fileList2"
:accessoryList="accessoryList"
:configure="bs"
@submit="submit()"
@back="back()"
@ -237,6 +238,7 @@
const navList2 = ref([])
const fileList = ref({})
const fileList2 = ref({})
const accessoryList = ref({})
const imgList = ref({})
const videoList = ref({})
const data = ref({})
@ -618,6 +620,9 @@
mybus.on('chageVideoList', (obj) => {
videoList.value = obj
})
mybus.on('chageAccessory', (obj) => {
accessoryList.value = obj
})
//datafrom
mybus.on('chageDataFromDwon', (obj) => {
switch (obj.attrType) {
@ -660,6 +665,7 @@
mybus.off('chageFileList2')
mybus.off('chageImgList')
mybus.off('chageDataFromDwon')
mybus.off('chageAccessory')
})
</script>
<style lang="less" scoped>

View File

@ -301,6 +301,16 @@
:list="props.fileList2"
tip="支持文件类型大小不超过100M"
></upload>
<upload
v-else-if="item.type == 'package' && item.name == '上传附件'"
type="附件"
btnName="上传附件"
:maxCount="1"
:data="item"
:busType="2"
:list="props.fileList2"
tip="支持.doc,.docx,.zip,.ppt,.pdf类型大小不超过100M"
></upload>
<upload
v-else-if="item.type == 'package'"
type="压缩包"
@ -682,27 +692,29 @@
data.value.list.push(item)
}
})
} else if (item.name === '部门联系人') {
if (!item.note1) {
getUserInfo().then(({ data: res1 }) => {
console.log(res1.data)
item.note1 = res1.data.realName || ''
})
data.value.list.push(item)
} else {
data.value.list.push(item)
}
} else if (item.name === '部门联系人电话') {
if (!item.note1) {
getUserInfo().then(({ data: res1 }) => {
console.log(res1.data)
item.note1 = res1.data.mobile || ''
})
data.value.list.push(item)
} else {
data.value.list.push(item)
}
} else if (item.name === '来源应用') {
// else if (item.name === '') {
// if (!item.note1) {
// getUserInfo().then(({ data: res1 }) => {
// console.log(res1.data)
// item.note1 = res1.data.realName || ''
// })
// data.value.list.push(item)
// } else {
// data.value.list.push(item)
// }
// } else if (item.name === '') {
// if (!item.note1) {
// getUserInfo().then(({ data: res1 }) => {
// console.log(res1.data)
// item.note1 = res1.data.mobile || ''
// })
// data.value.list.push(item)
// } else {
// data.value.list.push(item)
// }
// }
else if (item.name === '来源应用') {
queryApplicationRelByResourceId({
referenceId: 0,
}).then((res) => {

View File

@ -1,6 +1,18 @@
<!-- 智能算法 -->
<template>
<div class="algorithm">
<div class="select">
<div class="top" @click="selectFlag2 = true">
{{ typeName2 }}
<div class="light"></div>
</div>
<div class="bottom" v-show="selectFlag2">
<span class="light"></span>
<div v-for="val in dictList" :key="val" @click="getList2(val)">
{{ val }}
</div>
</div>
</div>
<div class="algorithm-class">
<div
v-for="(item, index) in dataList"
@ -27,9 +39,25 @@
</div>
</template>
<script setup>
import { getCategoryTreePage } from '@/api/personalCenter'
import { pageWithAttrs } from '@/api/abilityStatistics'
import { ref, onMounted, onBeforeUnmount } from 'vue'
const typeName2 = ref('全部')
const dictList = ref([])
const dataList = ref([])
const selectFlag2 = ref(false)
getCategoryTreePage({
page: 1,
limit: 99,
dictTypeId: '1513712507692818433',
}).then((res) => {
dictList.value = ['全部']
res.data.data.list.map((val) => {
if (val.dictLabel !== '其他') {
dictList.value.push(val.dictLabel)
}
})
})
const params = {
deptIds: [],
districtId: '',
@ -40,6 +68,19 @@
pageSize: 9,
type: '组件服务',
}
const getList2 = (val) => {
typeName2.value = val
if (val == '全部') {
params.infoList = [{ attrType: '组件类型', attrValue: '智能算法' }]
} else {
params.infoList = [
{ attrType: '组件类型', attrValue: '智能算法' },
{ attrType: '应用领域', attrValue: val },
]
}
selectFlag2.value = false
pageWithAttrsFunction()
}
let algorithmclass = null
const imgSrc = ref(require('@/assets/capacitySquare/algorithm-photo.jpg'))
const dataLength = ref(true)
@ -109,9 +150,67 @@
<style lang="less" scoped>
.algorithm {
.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;
}
}
}
.algorithm-class {
margin-top: 0.6rem;
margin-bottom: 0.59rem;
// margin-top: 0.6rem;
margin-bottom: 0.18rem;
display: grid;
grid-template-columns: repeat(3, 33%);
height: 8.8rem;

View File

@ -2,11 +2,12 @@
* @Author: hisense.liangjunhua
* @Date: 2022-08-09 09:31:25
* @LastEditors: hisense.liangjunhua
* @LastEditTime: 2022-08-10 14:29:05
* @LastEditTime: 2022-09-19 10:19:02
* @Description: 应用资源
-->
<template>
<div class="application">
<div style="display: flex">
<div class="select">
<div class="top" @click="selectFlag = true">
{{ typeName }}
@ -20,6 +21,19 @@
<div @click="getList('企业')">企业</div>
</div>
</div>
<div class="select">
<div class="top" @click="selectFlag2 = true">
{{ typeName2 }}
<div class="light"></div>
</div>
<div class="bottom" v-show="selectFlag2">
<span class="light"></span>
<div v-for="val in dictList" :key="val" @click="getList2(val)">
{{ val }}
</div>
</div>
</div>
</div>
<div class="item-box">
<div class="item" v-for="item in data.list" :key="item.id">
<a-image
@ -38,6 +52,7 @@
</div>
</template>
<script setup>
import { getCategoryTreePage } from '@/api/personalCenter'
import { onMounted, reactive, onBeforeUnmount, ref, nextTick } from 'vue'
import { selectAppList } from '@/api/home'
import { useRouter } from 'vue-router'
@ -45,9 +60,25 @@
const pageNum = ref(1)
const flag = ref(true)
const type = ref(null)
const area = ref(null)
const typeName = ref('全市')
const typeName2 = ref('全部')
const dictList = ref([])
const data = reactive({ list: [] })
const selectFlag = ref(false)
const selectFlag2 = ref(false)
getCategoryTreePage({
page: 1,
limit: 99,
dictTypeId: '1513712507692818433',
}).then((res) => {
dictList.value = ['全部']
res.data.data.list.map((val) => {
if (val.dictLabel !== '其他') {
dictList.value.push(val.dictLabel)
}
})
})
let dom = null
const goToView = (id) => {
const newpage = router.resolve({
@ -82,7 +113,14 @@
pageNum.value = 1
data.list = []
}
selectAppList({ pageNum: pageNum.value, type: type.value }).then((res) => {
getData(str)
}
const getData = (str) => {
selectAppList({
pageNum: pageNum.value,
type: type.value,
area: area.value,
}).then((res) => {
if (res.data.data.length < 9) {
dom.removeEventListener('scroll', viewMonitor, true)
}
@ -122,6 +160,20 @@
}
}
}
const getList2 = (val) => {
dom.scrollTop = 0
typeName2.value = val
pageNum.value = 1
data.list = []
if (val == '全部') {
area.value = null
getData()
} else {
area.value = val
getData()
}
selectFlag2.value = false
}
onMounted(() => {
dom = document.querySelector('.item-box')
console.log('box============', dom)

View File

@ -1,6 +1,18 @@
<!-- 图层服务 -->
<template>
<div class="algorithm">
<div class="select">
<div class="top" @click="selectFlag2 = true">
{{ typeName2 }}
<div class="light"></div>
</div>
<div class="bottom" v-show="selectFlag2">
<span class="light"></span>
<div v-for="val in dictList" :key="val" @click="getList2(val)">
{{ val }}
</div>
</div>
</div>
<div class="algorithm-class">
<div
v-for="(item, index) in dataList"
@ -27,10 +39,25 @@
</div>
</template>
<script setup>
import { getCategoryTreePage } from '@/api/personalCenter'
import { pageWithAttrs } from '@/api/abilityStatistics'
import { ref, onMounted, onBeforeUnmount } from 'vue'
const typeName2 = ref('全部')
const dictList = ref([])
const dataList = ref([])
let algorithmclass = null
const selectFlag2 = ref(false)
getCategoryTreePage({
page: 1,
limit: 99,
dictTypeId: '1513712507692818433',
}).then((res) => {
dictList.value = ['全部']
res.data.data.list.map((val) => {
if (val.dictLabel !== '其他') {
dictList.value.push(val.dictLabel)
}
})
})
const params = {
deptIds: [],
districtId: '',
@ -41,6 +68,20 @@
pageSize: 9,
type: '组件服务',
}
const getList2 = (val) => {
typeName2.value = val
if (val == '全部') {
params.infoList = [{ attrType: '组件类型', attrValue: '图层服务' }]
} else {
params.infoList = [
{ attrType: '组件类型', attrValue: '图层服务' },
{ attrType: '应用领域', attrValue: val },
]
}
selectFlag2.value = false
pageWithAttrsFunction()
}
let algorithmclass = null
const imgSrc = ref(require('@/assets/capacitySquare/algorithm-photo2.jpg'))
const dataLength = ref(true)
const isNoMore = ref(false)
@ -103,9 +144,67 @@
<style lang="less" scoped>
.algorithm {
.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;
}
}
}
.algorithm-class {
margin-top: 0.6rem;
margin-bottom: 0.59rem;
// margin-top: 0.6rem;
margin-bottom: 0.18rem;
display: grid;
grid-template-columns: repeat(3, 33%);
height: 8.8rem;

View File

@ -26,6 +26,8 @@
import layer from './components/layer.vue'
import application from './components/application.vue'
import { useRouter } from 'vue-router'
import { DETAIL_PAGE_CONTENT_DEFAULT_TAB } from '@/global/GlobalConfig.js'
const router = useRouter()
const abilityToType = router.currentRoute.value.query.abilityToType
const show = ref('algorithm')
@ -47,7 +49,8 @@
const newpage = router.resolve({
path: '/DetailsPageconetent',
query: {
select: '组件服务',
// select: '',
select: DETAIL_PAGE_CONTENT_DEFAULT_TAB
},
})
window.location.href = newpage.href

View File

@ -78,6 +78,13 @@
'application/vnd.openxmlformats-officedocument.wordprocessingml.document'
} else if (props.type === '压缩包') {
flag = file.type === 'application/x-zip-compressed'
} else if (props.type === '附件') {
flag =
file.type === 'application/pdf' ||
file.type === 'application/msword' ||
file.type ===
'application/vnd.openxmlformats-officedocument.wordprocessingml.document' ||
file.type === 'application/x-zip-compressed'
}
console.log(flag)
if (!flag) {
@ -131,6 +138,8 @@
}
} else if (props.type === '压缩包') {
mybus.emit('chagePackageList', fileList.value)
} else if (props.type === '附件') {
mybus.emit('chageAccessory', fileList.value)
} else if (props.type === '视频') {
console.log(fileList.value)
mybus.emit('chageVideoList', fileList.value)

View File

@ -8,9 +8,7 @@
></DetalsTitle>
</div>
<!-- 青岛市局 -->
<div
v-if="whoShow1 && whoShow1.itShowQingDao"
style="width: 100%; display: flex; justify-content: center"
<div style="width: 100%; display: flex; justify-content: center"
>
<div class="content" v-for="item in dataFrom.content" :key="item.title">
<div class="content-left" v-if="item.titleType === '调用接口'">
@ -162,127 +160,6 @@
</div>
</div> -->
</div>
<!-- 其他 -->
<div v-else>
<div class="content" v-for="item in dataFrom.content" :key="item.title">
<div class="content-left" v-if="item.titleType === '调用接口'">
<div class="left">
<div class="content-left-title">
<span>{{ item.title }}{{ item.titleType }}</span>
</div>
<div class="content-left-content">
<p>
<span>{{ item.link.name }}</span>
<a-tooltip>
<template #title>{{ item.link.value }}</template>
<span>{{ item.link.value }}</span>
</a-tooltip>
</p>
<p>
<span>{{ item.postMethod.name }}</span>
<span>{{ item.postMethod.value }}</span>
</p>
</div>
</div>
<div class="right">
<div @click="technical()">技术文档</div>
<!-- <div @click="technicalNew()">新手指引</div> -->
<!-- <div @click="SDKClick()">SDK安装包</div> -->
</div>
</div>
<div class="content-left" v-else-if="item.titleType === '平台对接'">
<div class="left">
<div class="content-left-title">
<span>{{ item.title }}{{ item.titleType }}</span>
</div>
<div class="content-left-content">
<p>
<span>{{ item.linkPlatform.name }}</span>
<a-tooltip v-if="approveStatus == '通过'">
<template #title>{{ item.linkPlatform.value }}</template>
<span>{{ item.linkPlatform.value }}</span>
</a-tooltip>
<a-tooltip v-else>
<template #title>请申请后查看平台地址</template>
<span>****************</span>
</a-tooltip>
</p>
</div>
</div>
<div class="right">
<div @click="technical()">技术文档</div>
<!-- <div @click="technicalNew()">新手指引</div> -->
<!-- <div @click="SDKClick()">SDK安装包</div> -->
</div>
</div>
<div class="content-left" v-else-if="item.titleType === 'SDK'">
<div class="left">
<div class="content-left-title">
<span>{{ item.title }}{{ item.titleType }}</span>
</div>
</div>
<div class="right">
<div @click="technical()">技术文档</div>
<!-- <div @click="technicalNew()">新手指引</div> -->
<div @click="SDKClick()">SDK安装包</div>
</div>
</div>
<div class="content-right">
<div class="content-right-left">
<div class="content-right-title">{{ item.contact }}</div>
<div class="content-right-content">
<p>
<span>{{ item.facilitator.name }}</span>
<a-tooltip>
<template #title>{{ item.facilitator.value }}</template>
<span>{{ item.facilitator.value }}</span>
</a-tooltip>
</p>
<p>
<span>{{ item.people.name }}</span>
<a-tooltip>
<template #title>{{ item.people.value }}</template>
<span>{{ item.people.value }}</span>
</a-tooltip>
</p>
<p>
<span>{{ item.phone.name }}</span>
<a-tooltip>
<template #title>{{ item.phone.value }}</template>
<span>{{ item.phone.value }}</span>
</a-tooltip>
</p>
</div>
</div>
<div class="content-right-right">
<div class="content-right-title">{{ item.contact2 }}</div>
<div class="content-right-content">
<p>
<span>{{ item.facilitator2.name }}</span>
<a-tooltip>
<template #title>{{ item.facilitator2.value }}</template>
<span>{{ item.facilitator2.value }}</span>
</a-tooltip>
</p>
<p>
<span>{{ item.people2.name }}</span>
<a-tooltip>
<template #title>{{ item.people2.value }}</template>
<span>{{ item.people2.value }}</span>
</a-tooltip>
</p>
<p>
<span>{{ item.phone2.name }}</span>
<a-tooltip>
<template #title>{{ item.phone2.value }}</template>
<span>{{ item.phone2.value }}</span>
</a-tooltip>
</p>
</div>
</div>
</div>
</div>
</div>
</div>
</template>

View File

@ -11,51 +11,38 @@
<div class="main">
<div class="main-left">
<p>{{ dataFrom.linkName }}</p>
<a-tooltip v-if="flag">
<template #title>{{ dataFrom.link }}</template>
<p style="cursor: pointer" @click="clickLink(dataFrom.link)">
{{ dataFrom.link || '暂无' }}
</p>
</a-tooltip>
<a-tooltip v-else>
<a-tooltip>
<template #title>请申请后查看</template>
<p style="cursor: pointer; filter: blur(4px)">
<!-- <p style="cursor: pointer; filter: blur(4px)">
{{ dataFrom.link }}
</p> -->
<p style="cursor: pointer;"
:class="{ 'blur-word': approveStatus == '通过' && whoShow1.itShowXiHaiAn ? false : true}">
{{ dataFrom.link }}
</p>
</a-tooltip>
</div>
<div class="main-center">
<p>{{ dataFrom.numberName }}</p>
<a-tooltip v-if="flag">
<template #title>{{ dataFrom.number }}</template>
<p>{{ dataFrom.number || '暂无' }}</p>
</a-tooltip>
<a-tooltip v-else>
<a-tooltip>
<template #title>请申请后查看</template>
<p style="filter: blur(4px)">{{ dataFrom.number }}</p>
<!-- <p style="filter: blur(4px)">{{ dataFrom.number }}</p> -->
<p :class="{ 'blur-word': approveStatus == '通过' && whoShow1.itShowXiHaiAn ? false : true}">{{ dataFrom.number
}}</p>
</a-tooltip>
<div
@click="copyFunction(dataFrom.number, '复制账号')"
v-if="dataFrom.number != '' && flag"
>
<div @click="copyFunction(dataFrom.number, '复制账号')" v-if="dataFrom.number != '' && flag">
复制账号
</div>
<!-- <div v-else id="zanwu">暂无</div> -->
</div>
<div class="main-right">
<p>{{ dataFrom.passwordName }}</p>
<a-tooltip v-if="flag">
<template #title>{{ dataFrom.password }}</template>
<p>{{ dataFrom.password || '暂无' }}</p>
</a-tooltip>
<a-tooltip v-else>
<a-tooltip>
<template #title>请申请后查看</template>
<p style="filter: blur(4px)">{{ dataFrom.password }}</p>
<p style="filter: blur(4px)" :class="{ 'blur-word': approveStatus == '通过' && whoShow1.itShowXiHaiAn ? false : true}">{{ dataFrom.password }}</p>
</a-tooltip>
<div
@click="copyFunction(dataFrom.password2, '复制密码')"
v-if="dataFrom.password2 != '' && flag"
>
<div @click="copyFunction(dataFrom.password2, '复制密码')" v-if="dataFrom.password2 != '' && flag">
复制密码
</div>
<!-- <div v-else id="zanwu">暂无</div> -->
@ -82,8 +69,12 @@
password: '**************************',
password2: '',
})
console.log('props.dataList------------>', props.dataList);
const approveStatus = ref('')
if (props.dataList.infoList) {
let obj = props.dataList.approveStatus
let obj = props.dataList.approveStatus;
approveStatus.value = props.dataList.approveStatus
if (obj !== '通过' && whoShow1.value.itShowQingDao) {
flag.value = false
}
@ -134,6 +125,7 @@
(val) => {
if (val) {
let obj = props.dataList.approveStatus
approveStatus.value = props.dataList.approveStatus
if (obj !== '通过' && whoShow1.value.itShowQingDao) {
flag.value = false
}
@ -158,6 +150,7 @@
display: flex;
flex-direction: column;
align-items: center;
.main {
margin-top: 0.3rem;
width: 13rem;
@ -166,10 +159,12 @@
display: grid;
grid-template-columns: 33.33% 33.33% 33.33%;
align-items: center;
.main-left {
border-right: 0.01rem #ffffff solid;
padding-left: 0.7rem;
padding-right: 1rem;
&>p {
overflow: hidden;
text-overflow: ellipsis;
@ -179,28 +174,34 @@
-webkit-box-orient: vertical;
}
}
.main-center {
padding-left: 1rem;
padding-right: 1rem;
}
.main-right {
padding-right: 0.7rem;
}
&>div>p:first-child {
font-size: 0.26rem;
color: #ffffff;
font-weight: bold;
}
&>div>p:nth-child(2) {
font-size: 0.22rem;
color: #ffffff;
line-height: 0.34rem;
}
&>div:first-child>p:last-child {
text-decoration: underline;
word-wrap: break-word;
word-break: normal;
}
&>div>div:last-child {
height: 0.34rem;
width: 1.1rem;
@ -213,6 +214,7 @@
line-height: 0.34rem;
}
}
#zanwu {
height: 0.34rem;
width: 1.1rem;
@ -221,6 +223,10 @@
border: 0;
}
}
.blur-word {
filter: blur(4px);
}
</style>
<style>
.custom-class {

View File

@ -41,6 +41,8 @@
<script setup>
import DetalsTitle from '@/views/detailsAll/components/DetalsTitle'
import { ref, defineProps, watch } from 'vue'
const itShowXiHaiAn = whoShow.itShowXiHaiAn
console.log('2222', itShowXiHaiAn)
let dataFrom = ref({
title: '部署与安全',
@ -62,7 +64,7 @@
dataList: { type: Object, default: null },
})
if (props.dataList.infoList) {
if (!whoShow1.value.itShowQingDao) {
if (!whoShow1.value.itShowQingDao && !whoShow1.value.itShowXiHaiAn) {
let obj = {
attrType: '访问地址',
attrValue: props.dataList.link || '------',
@ -119,7 +121,7 @@
if (val) {
dataFrom.value.content[0].childrenContent = []
dataFrom.value.content[1].childrenContent = []
if (!whoShow1.value.itShowQingDao) {
if (!whoShow1.value.itShowQingDao && !itShowXiHaiAn) {
let obj = {
attrType: '访问地址',
attrValue: props.dataList.link || '------',

View File

@ -8,9 +8,7 @@
></DetalsTitle>
</div>
<!-- 青岛市局 -->
<div
v-if="whoShow1 && whoShow1.itShowQingDao"
style="width: 100%; display: flex; justify-content: center"
<div style="width: 100%; display: flex; justify-content: center"
>
<div class="content">
<div
@ -50,29 +48,6 @@
</div>
</div> -->
</div>
<!-- 其他 -->
<div v-else>
<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 style="display: flex">
<span>{{ carditem.attrType }}</span>
<a-tooltip>
<template #title>{{ carditem.attrValue }}</template>
<span>{{ carditem.attrValue }}</span>
</a-tooltip>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</template>

View File

@ -7,9 +7,7 @@
:type="dataFrom.englishTitle"
></DetalsTitle>
</div>
<div
v-if="whoShow1 && whoShow1.itShowQingDao"
style="width: 100%; display: flex; justify-content: center"
<div style="width: 100%; display: flex; justify-content: center"
>
<div class="content" v-for="item in dataFrom.content" :key="item.title">
<div class="content-left">
@ -117,84 +115,6 @@
</div>
</div> -->
</div>
<div v-else>
<div class="content" v-for="item in dataFrom.content" :key="item.title">
<div class="content-left">
<div class="left">
<div class="content-left-title">
<span>{{ item.title }}</span>
</div>
<div class="content-left-content">
<p>
<span>{{ item.link.name }}</span>
<a-tooltip>
<template #title>{{ item.linkValue }}</template>
<span>{{ item.linkValue }}</span>
</a-tooltip>
</p>
</div>
</div>
<div class="right">
<div @click="technical()">技术文档</div>
<div @click="technicalNew()">新手指引</div>
</div>
</div>
<div class="content-right">
<div class="content-right-left">
<div class="content-right-title">{{ item.contact }}</div>
<div class="content-right-content">
<p>
<span>{{ item.facilitator.name }}</span>
<a-tooltip>
<template #title>{{ item.facilitator.value }}</template>
<span>{{ item.facilitator.value }}</span>
</a-tooltip>
</p>
<p>
<span>{{ item.people.name }}</span>
<a-tooltip>
<template #title>{{ item.people.value }}</template>
<span>{{ item.people.value }}</span>
</a-tooltip>
</p>
<p>
<span>{{ item.phone.name }}</span>
<a-tooltip>
<template #title>{{ item.phone.value }}</template>
<span>{{ item.phone.value }}</span>
</a-tooltip>
</p>
</div>
</div>
<div class="content-right-right">
<div class="content-right-title">{{ item.contact2 }}</div>
<div class="content-right-content">
<p>
<span>{{ item.facilitator2.name }}</span>
<a-tooltip>
<template #title>{{ item.facilitator2.value }}</template>
<span>{{ item.facilitator2.value }}</span>
</a-tooltip>
</p>
<p>
<span>{{ item.people2.name }}</span>
<a-tooltip>
<template #title>{{ item.people2.value }}</template>
<span>{{ item.people2.value }}</span>
</a-tooltip>
</p>
<p>
<span>{{ item.phone2.name }}</span>
<a-tooltip>
<template #title>{{ item.phone2.value }}</template>
<span>{{ item.phone2.value }}</span>
</a-tooltip>
</p>
</div>
</div>
</div>
</div>
</div>
</div>
</template>

View File

@ -7,9 +7,7 @@
:type="dataFrom.englishTitle"
></DetalsTitle>
</div>
<div
v-if="whoShow1 && whoShow1.itShowQingDao"
style="width: 100%; display: flex; justify-content: center"
<div style="width: 100%; display: flex; justify-content: center"
>
<div class="content">
<div class="content-card">
@ -73,41 +71,6 @@
</div>
</div> -->
</div>
<div v-else>
<div class="content">
<div class="content-card">
<div class="left">
<p>{{ dataFrom.linkName }}</p>
<a-tooltip>
<template #title>{{ dataFrom.link }}</template>
<p>{{ dataFrom.link }}</p>
</a-tooltip>
</div>
<div class="right">
<div @click="technical()">技术文档</div>
<div @click="technicaltow()">新手指引</div>
</div>
</div>
<div class="content-card">
<div v-for="(item, index) in dataFrom.content" :key="index">
<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>
</div>
</div>
</template>

View File

@ -116,6 +116,11 @@
// dataFrom.value.content[0].facilitator.value = props.dataList.deptContacts
console.log('dataList', props.dataList)
props.dataList.infoList.map((item) => {
handleInfoList(item)
})
}
}
const handleInfoList = (item) => {
if (item.attrType === '服务类型') {
dataFromLeft.value.content[0].values = item.attrValue || '123'
} else if (item.attrType === '覆盖区域') {
@ -133,9 +138,9 @@
} else if (item.attrType === '图层类型') {
dataFromRight.value.content[1].values = item.attrValue || '--'
} else if (item.attrType === '最大级别') {
if (dataFromRight.value.content && dataFromRight.value.content[2]) {
dataFromRight.value.content[2].values = item.attrValue || '--'
}
})
}
}
watch(
@ -157,29 +162,30 @@
if (!obj) {
flag.value = false
} else {
// dataFrom.value.content[0].link.value = val.apiUrl
// dataFrom.value.content[0].facilitator.value = val.deptContacts
console.log('dataList', val)
val.infoList.map((item) => {
if (item.attrType === '服务类型') {
dataFromLeft.value.content[0].values = item.attrValue || '123'
} else if (item.attrType === '覆盖区域') {
dataFromLeft.value.content[1].values = item.attrValue || '--'
} else if (item.attrType === '切片策略') {
dataFromLeft.value.content[2].values = item.attrValue || '--'
} else if (item.attrType === '坐标系') {
dataFromCenter.value.content[0].values = item.attrValue || '--'
} else if (item.attrType === '切片尺寸') {
dataFromCenter.value.content[1].values = item.attrValue || '--'
} else if (item.attrType === '最小级别') {
dataFromCenter.value.content[2].values = item.attrValue || '--'
} else if (item.attrType === '数据范围') {
dataFromRight.value.content[0].values = item.attrValue || '--'
} else if (item.attrType === '图层类型') {
dataFromRight.value.content[1].values = item.attrValue || '--'
} else if (item.attrType === '最大级别') {
dataFromRight.value.content[2].values = item.attrValue || '--'
}
handleInfoList(item)
// if (item.attrType === '') {
// dataFromLeft.value.content[0].values = item.attrValue || '123'
// } else if (item.attrType === '') {
// dataFromLeft.value.content[1].values = item.attrValue || '--'
// } else if (item.attrType === '') {
// dataFromLeft.value.content[2].values = item.attrValue || '--'
// } else if (item.attrType === '') {
// dataFromCenter.value.content[0].values = item.attrValue || '--'
// } else if (item.attrType === '') {
// dataFromCenter.value.content[1].values = item.attrValue || '--'
// } else if (item.attrType === '') {
// dataFromCenter.value.content[2].values = item.attrValue || '--'
// } else if (item.attrType === '') {
// dataFromRight.value.content[0].values = item.attrValue || '--'
// } else if (item.attrType === '') {
// dataFromRight.value.content[1].values = item.attrValue || '--'
// } else if (item.attrType === '') {
// if (dataFromRight.value.content && dataFromRight.value.content[2]) {
// dataFromRight.value.content[2].values = item.attrValue || '--'
// }
// }
})
}
}
@ -193,9 +199,11 @@
flex-direction: column;
align-items: center;
padding: 0.8rem 0;
.content {
margin-top: 0.3rem;
display: flex;
.content-left {
height: 2.8rem;
width: 13rem;
@ -216,10 +224,12 @@
display: flex;
justify-content: space-between;
align-items: center;
ul {
padding: 0;
margin: 0;
}
ul li {
list-style: none;
display: flex;
@ -227,11 +237,13 @@
margin-bottom: 0.3rem;
line-height: 0.25rem;
}
img {
margin: 0 0.2rem 0 0;
width: 0.15rem;
height: 0.15rem;
}
span {
font-size: 0.2rem;
color: #666666;
@ -239,6 +251,7 @@
margin-right: 0.5rem;
width: 120px;
}
p {
width: 2rem;
margin-bottom: 0;

View File

@ -7,9 +7,7 @@
:type="dataFrom.englishTitle"
></DetalsTitle>
</div>
<div
v-if="whoShow1 && whoShow1.itShowQingDao"
style="width: 100%; display: flex; justify-content: center"
<div style="width: 100%; display: flex; justify-content: center"
>
<div class="content" v-for="item in dataFrom.content" :key="item.title">
<div class="content-left">
@ -128,86 +126,6 @@
</div>
</div> -->
</div>
<div v-else>
<div class="content" v-for="item in dataFrom.content" :key="item.title">
<div class="content-left">
<div class="left">
<a-tooltip>
<template #title>{{ item.linkValue }}</template>
<p @click="ServiceAddressFunction(item.linkValue)">
服务地址
{{ item.linkValue }}
</p>
</a-tooltip>
<a-tooltip>
<template #title>{{ item.csslinkValue }}</template>
<p @click="ServiceAddressFunction(item.csslinkValue)">
样式服务地址
{{ item.csslinkValue }}
</p>
</a-tooltip>
</div>
<div class="right">
<div @click="technical()">技术文档</div>
<div @click="technicalNew()">新手指引</div>
</div>
</div>
<div class="content-right">
<div class="content-right-left">
<div class="content-right-title">{{ item.contact }}</div>
<div class="content-right-content">
<p>
<span>{{ item.facilitator.name }}</span>
<a-tooltip>
<template #title>{{ item.facilitator.value }}</template>
<span>{{ item.facilitator.value }}</span>
</a-tooltip>
</p>
<p>
<span>{{ item.people.name }}</span>
<a-tooltip>
<template #title>{{ item.people.value }}</template>
<span>{{ item.people.value }}</span>
</a-tooltip>
</p>
<p>
<span>{{ item.phone.name }}</span>
<a-tooltip>
<template #title>{{ item.phone.value }}</template>
<span>{{ item.phone.value }}</span>
</a-tooltip>
</p>
</div>
</div>
<div class="content-right-right">
<div class="content-right-title">{{ item.contact2 }}</div>
<div class="content-right-content">
<p>
<span>{{ item.facilitator2.name }}</span>
<a-tooltip>
<template #title>{{ item.facilitator2.value }}</template>
<span>{{ item.facilitator2.value }}</span>
</a-tooltip>
</p>
<p>
<span>{{ item.people2.name }}</span>
<a-tooltip>
<template #title>{{ item.people2.value }}</template>
<span>{{ item.people2.value }}</span>
</a-tooltip>
</p>
<p>
<span>{{ item.phone2.name }}</span>
<a-tooltip>
<template #title>{{ item.phone2.value }}</template>
<span>{{ item.phone2.value }}</span>
</a-tooltip>
</p>
</div>
</div>
</div>
</div>
</div>
</div>
</template>

View File

@ -89,11 +89,15 @@
</span>
<span>{{ val.type }}</span>
</div>
<!-- (item.note1 && JSON.parse(item.note1) &&
JSON.parse(item.note1)[0] &&
JSON.parse(item.note1)[0].channelName -->
<div class="description">
{{
val.description ||
((val.note1 || '') &&
(JSON.parse(val.note1)[0].channelName || '--') +
(JSON.parse(val.note1) && JSON.parse(val.note1)[0] && JSON.parse(val.note1)[0].channelName || '--') +
'等' +
JSON.parse(val.note1).length +
'个摄像头') ||

File diff suppressed because it is too large Load Diff

View File

@ -156,8 +156,11 @@
class="modal-box"
title="请选择"
:visible="showAddModal"
:onOk="handleOk"
:onCancel="handleCancel"
ok-text="确认"
cancel-text="取消"
@ok="handleOk"
@cancel="handleCancel"
>
<a-table
:columns="columns"
@ -652,7 +655,14 @@
}
</script>
<style>
.ant-modal-footer {
display: block;
}
</style>
<style lang="less" scoped>
.bg {
background: #fff;
height: 100vh;

File diff suppressed because it is too large Load Diff

View File

@ -1,19 +1,11 @@
<template>
<div class="box">
<div class="CanCase">
<div
class="caseBox"
v-for="(item, index) in caseList"
:key="index"
@click="toView(item)"
>
<a-image
:preview="false"
:src="
<div class="caseBox" v-for="(item, index) in caseList" :key="index" @click="toView(item)">
<a-image :preview="false" :src="
item.fuseAttrList.filter((val) => val.attrType == '服务图片')[0]
.attrValue
"
/>
" />
<h3>{{ item.name }}</h3>
<p>发布时间 {{ item.updateDate }}</p>
</div>
@ -21,8 +13,7 @@
</div>
</template>
<script setup>
import { ref, onMounted, onBeforeUnmount } from 'vue'
import { defineProps } from 'vue'
import { ref, onMounted, onBeforeUnmount, watch, defineProps, defineEmits } from 'vue'
import { useRouter } from 'vue-router'
const router = useRouter()
@ -36,14 +27,17 @@
default: '组件服务',
},
})
const emits = defineEmits(['saveSearchCodition'])
const caseList = ref([])
onMounted(() => {
caseList.value = props.resourceList.data
console.log(caseList.value, 'caseList.value')
console.log('caseList.value------------>', caseList.value);
})
onBeforeUnmount(() => { })
function toView(item) {
emits('saveSearchCodition', 1)
router.push({
path: '/integrationServicesDetails',
query: {
@ -51,6 +45,15 @@
},
})
}
watch(
() => props.resourceList.data,
(val) => {
if (val) {
caseList.value = val
}
}
)
</script>
<style lang="less" scoped>
.box {
@ -60,6 +63,7 @@
grid-template-columns: 33.33% 33.33% 33.33%;
align-items: center;
justify-items: center;
.caseBox {
width: 3.5rem;
height: 3rem;
@ -69,15 +73,18 @@
padding: 0.2rem;
margin-bottom: 0.2rem;
cursor: pointer;
img {
width: 3rem;
height: 1.8rem;
}
h3 {
font-size: 0.18rem;
font-weight: bold;
margin-top: 0.1rem;
}
p {
font-size: 0.16rem;
color: #797979;

View File

@ -0,0 +1,46 @@
<template>
<div class="tag-box">
<div class="tag-item" v-for="(item, index) in tagList" :key="index">
{{item}}
</div>
</div>
</template>
<script setup>
import { ref, onMounted, onBeforeUnmount, watch, defineProps, defineEmits } from 'vue'
import { useRouter } from 'vue-router'
const router = useRouter()
const props = defineProps({
componentServiceTagList: {
type: Object,
default: () => { },
},
})
const tagList = ref([])
onMounted(() => {
tagList.value = props.componentServiceTagList
})
watch(
() => props.componentServiceTagList,
(val) => {
if (val) {
tagList.value = val
}
}
)
</script>
<style lang="less" scoped>
.tag-item {
font-family: 'Alibaba PuHuiTi';
font-weight: 400;
border-radius: 0.12rem;
margin: 0 10px;
padding: 2px 8px;
font-size: 12px;
color: #0087ff;
background: rgba(0, 88, 225, 0.1);
}
</style>

View File

@ -23,8 +23,8 @@
>
{{ item.name }}
</div>
<a-badge :count="sgcNum">
<!-- 购物车 -->
<!-- <a-badge :count="sgcNum">
<svg
t="1650455446850"
class="icon"
@ -42,8 +42,7 @@
p-id="2070"
></path>
</svg>
<!-- <a-avatar shape="square" size="large" /> -->
</a-badge>
</a-badge> -->
<a-badge :count="mynoticeNum" style="margin-left: 0.2rem">
<!-- 消息提醒 -->
<svg
@ -131,21 +130,13 @@
import { getSgcTotal } from '@/api/home'
import Cookies from 'js-cookie'
import mybus from '@/myplugins/mybus'
import { DETAIL_PAGE_CONTENT_DEFAULT_TAB } from '@/global/GlobalConfig.js'
import { message } from 'ant-design-vue'
const store = useStore()
const router = useRouter()
const route = useRoute()
// const navListManagement = ref([
// { name: '', key: 'home' },
// { name: '', key: 'DetailsPageconetent' },
// { name: '', key: 'capabilityCloud' },
// { name: '', key: 'abilityStatistics' },
// { name: '', key: 'developmentGuide' },
// { name: '', key: 'demandCenter' },
// // { name: '', key: 'personalCenter' },
// { name: '', key: 'mapTest' },
// // { name: '', key: 'houtaiguanli' },
// { name: '', key: 'assignCase' },
// ])
const whoShow1 = whoShow
const user = ref({
username: store.getters['user/username'],
@ -190,6 +181,10 @@
}
//
const jumpPage = (item) => {
let _arr = ['共享门户', '能力云图', '能力统计', '需求中心', '赋能案例']
if(_arr.includes(item.name)) {
return message.warn('正在建设中!')
}
// console.log(item)
select.value = item.key
switch (item.name) {
@ -208,7 +203,7 @@
router.push({
path: '/DetailsPageconetent',
query: {
select: '组件服务',
select: DETAIL_PAGE_CONTENT_DEFAULT_TAB
},
})
break
@ -222,7 +217,7 @@
// path: '/developmentGuide',
// })
// break
case '技术文档':
case '新手指南':
router.push({
path: '/instructionManual',
})
@ -255,10 +250,6 @@
case '融合服务':
router.push({
path: '/integrationServices',
// path: '/DetailsPageconetent',
query: {
select: '融合服务',
},
})
break
case 'CIM专区':

View File

@ -0,0 +1,100 @@
<template>
<ul class="integrationServiceOrder">
<li v-for="(item, i) in integrationOrderList" :key="i" @click="
changeOrder(i, item.value, item.orderType == 'DESC' ? 'ASC' : 'DESC')
">
{{ item.name }}
<span class="arrow" :class="
integrationOrder.orderType == 'ASC' &&
integrationOrder.orderField == item.value
? 'down'
: ''
"></span>
</li>
</ul>
</template>
<script setup>
import { ref, reactive, nextTick, defineExpose } from 'vue'
import mybus from '@/myplugins/mybus'
const orderList = [
{
value: 'apply_count',
name: '申请量',
orderType: 'DESC',
},
{
value: 'collectCount',
name: '收藏量',
orderType: 'DESC',
},
{
value: 'create_date',
name: '发布时间',
orderType: 'DESC',
},
{
value: 'update_date',
name: '更新时间',
orderType: 'DESC',
},
]
const integrationOrderList = ref(JSON.parse(JSON.stringify(orderList)))
const integrationOrder = reactive({
orderField: '',
orderType: '',
})
// --
const changeOrder = (i, val, type) => {
console.log('i, val, type------------>', i, val, type);
integrationOrder.orderField = val
integrationOrder.orderType = type;
// 0 apply_count ASC
let _index = integrationOrderList.value.findIndex(x => x.value = val)
if (_index > -1) {
integrationOrderList.value[_index].orderType = type
}
mybus.emit('changeCondition', {
orderField: val,
orderType: type,
})
}
const reset = () => {
integrationOrderList.value = JSON.parse(JSON.stringify(orderList))
integrationOrder.orderField = ''
integrationOrder.orderType = ''
}
defineExpose({
reset,
})
</script>
<style lang="less" scoped>
.integrationServiceOrder {
display: flex;
li {
width: 90px;
height: 12px;
text-align: center;
cursor: pointer;
display: flex;
justify-content: center;
align-items: center;
.arrow {
display: inline-block;
width: 12px;
height: 12px;
background: url('~@/assets/newHome/arrow.png');
margin-left: 10px;
}
.down {
background: url('~@/assets/newHome/down.png');
margin-top: 6px;
}
}
}
</style>

View File

@ -10,89 +10,51 @@
}}
</div>
<div class="condition" :key="showKey">
<ul
v-if="
<IntegrationServiceOrder ref="integrationServiceOrderDom" v-if="
selectCardsname === '融合服务' || selectCardsname === '赋能场景'
"
>
<li
v-for="(item, i) in orderList"
:key="item.value"
@click="changeOrder(i, item.value, item.orderType)"
>
{{ item.name }}
<span
class="arrow"
:class="item.orderType == 'ASC' ? 'down' : ''"
></span>
</li>
</ul>
"></IntegrationServiceOrder>
<ul v-else>
<li
v-for="item in selList"
:key="item.value"
@click="changeCondition(item.value)"
v-show="
<li v-for="(item, i) in selList" :key="i" @click="changeCondition(item)" v-show="
item.show &&
item.name !== '评分' &&
selectCardsname !== '数据资源'
"
>
">
{{ item.name }}
<span
class="arrow"
:class="item.value == selData ? 'down' : ''"
></span>
<span class="arrow" :class="
orderObj.orderType == 'ASC' &&
orderObj.orderField == item.value
? 'down'
: ''
"></span>
</li>
</ul>
</div>
</div>
<div
class="result-list"
v-for="(item, index) in resourceList.data"
:key="item.index"
>
<div class="result-list" v-for="(item, index) in resourceList.data" :key="item.index">
<div class="item" :key="showKey">
<div
class="left"
style="display: flex; align-items: center"
v-if="
<div class="left" style="display: flex; align-items: center" v-if="
item.type === '应用资源' &&
item.infoList &&
item.infoList.filter((val) => val.attrType == '应用图片')[0]
"
>
<a-image
:width="106"
:preview="false"
:src="
">
<a-image :width="106" :preview="false" :src="
item.infoList.filter((val) => val.attrType == '应用图片')[0]
.attrValue
"
/>
" />
</div>
<div
class="left"
style="display: flex; align-items: center"
v-else-if="
<div class="left" style="display: flex; align-items: center" v-else-if="
(selectCardsname === '融合服务' ||
selectCardsname === '赋能场景') &&
item.fuseAttrList &&
item.fuseAttrList.filter((val) => val.attrType == '服务图片')[0]
"
>
<a-image
:width="106"
:preview="false"
:src="
">
<a-image :width="106" :preview="false" :src="
item.fuseAttrList.filter((val) => val.attrType == '服务图片')[0]
.attrValue
"
/>
" />
</div>
<div
class="left"
:class="
<div class="left" :class="
item.type == '应用资源'
? 'yyzy'
: !item.type
@ -117,55 +79,33 @@
.attrValue == '业务组件'
? 'ywzj'
: ''
"
@click="toView('details', item)"
v-else-if="
" @click="toView('details', item)" v-else-if="
selectCardsname !== '基础设施' &&
selectCardsname !== '融合服务' &&
selectCardsname !== '赋能场景'
"
></div>
"></div>
<div class="left jcss" v-else-if="selectCardsname === '基础设施'"></div>
<div
class="left rhfw"
v-else-if="
<div class="left rhfw" v-else-if="
selectCardsname === '融合服务' || selectCardsname === '赋能场景'
"
></div>
"></div>
<div class="right" @click="toView('details', item)">
<div class="header">
<span style="display: flex; align-items: center; width: 680px">
{{ item.name }}
<!-- 已申请--通过 -->
<svg
t="1652322568870"
class="icon"
viewBox="0 0 3072 1024"
version="1.1"
xmlns="http://www.w3.org/2000/svg"
p-id="3062"
width="40"
height="40"
v-if="
<svg t="1652322568870" class="icon" viewBox="0 0 3072 1024" version="1.1"
xmlns="http://www.w3.org/2000/svg" p-id="3062" width="40" height="40" v-if="
item.applyState == '已申请' && item.approveStatus == '通过'
"
style="margin-left: 10px; min-width: 40px"
>
" style="margin-left: 10px; min-width: 40px">
<path
d="M2958.222222 0a113.777778 113.777778 0 0 1 113.777778 113.777778v796.444444a113.777778 113.777778 0 0 1-113.777778 113.777778H500.053333a113.777778 113.777778 0 0 1-85.617777-38.798222L32.824889 549.432889a56.888889 56.888889 0 0 1 0-74.922667L414.435556 38.798222A113.777778 113.777778 0 0 1 499.996444 0H2958.222222z m0 56.888889H500.053333a56.888889 56.888889 0 0 0-42.837333 19.399111L75.605333 512l381.610667 435.712a56.888889 56.888889 0 0 0 42.780444 19.399111H2958.222222a56.888889 56.888889 0 0 0 56.888889-56.888889V113.777778a56.888889 56.888889 0 0 0-56.888889-56.888889z"
fill="#d81e06"
p-id="3063"
></path>
fill="#d81e06" p-id="3063"></path>
<path
d="M398.222222 398.222222a113.777778 113.777778 0 1 1 0 227.555556 113.777778 113.777778 0 0 1 0-227.555556z m0 56.888889a56.888889 56.888889 0 1 0 0 113.777778 56.888889 56.888889 0 0 0 0-113.777778z"
fill="#d81e06"
p-id="3064"
></path>
fill="#d81e06" p-id="3064"></path>
<path
d="M1309.582222 491.064889v-273.066667h-505.173333v47.786667h455.338667v178.176h-378.88V342.926222h-49.152v358.4c0 55.978667 27.306667 84.650667 82.602666 84.650667h370.005334c28.672-1.365333 51.2-8.874667 66.218666-23.210667 16.384-17.749333 27.989333-68.266667 34.816-152.917333l-47.786666-15.018667-1.706667 26.737778c-4.664889 58.766222-12.970667 93.582222-24.917333 104.334222-10.24 8.192-23.893333 12.288-40.277334 12.288h-342.698666c-31.402667 0-47.104-15.701333-47.104-45.738666v-201.386667h428.714666z m430.08-307.2v102.4h-219.136v386.389333h48.469334v-46.421333h170.666666v178.858667h50.517334v-178.858667h167.936v41.642667h48.469333V286.264889h-216.405333v-102.4h-50.517334z m-170.666666 395.946667v-102.4h170.666666v102.4h-170.666666z m221.184 0v-102.4h167.936v102.4h-167.936z m-221.184-146.773334V332.003556h170.666666v101.034666h-170.666666z m221.184 0V332.003556h167.936v101.034666h-167.936z m733.866666-251.221333v44.373333h-165.205333v40.277334h165.205333v45.738666h-137.898666v39.594667h137.898666V398.222222h-184.32v40.96h417.792V398.222222h-186.368v-46.421333h144.725334v-39.594667h-144.725334v-45.738666h169.301334v-40.277334h-169.301334v-44.373333h-47.104z m-85.333333 429.397333h220.501333v49.834667h-220.501333v-49.834667z m220.501333-38.229333h-220.501333v-50.517333h220.501333v50.517333z m-220.501333 126.293333h220.501333v38.912c0 15.701333-8.874667 23.893333-25.258666 23.893334l-54.613334-2.048 11.605334 43.690666h57.344c38.229333 0 58.026667-18.432 58.026666-55.296v-266.24H2391.608889V807.822222h47.104v-108.544z m-222.549333-509.952l-34.816 33.450667c49.152 36.864 88.064 71.68 116.736 104.448l33.450666-34.133333a795.079111 795.079111 0 0 0-115.370666-103.765334z m-82.602667 201.386667h144.725333v299.690667c20.48-19.114667 41.642667-40.277333 64.853334-64.170667l12.970666 51.882667a923.932444 923.932444 0 0 1-121.514666 105.813333l-19.114667-43.690667c10.24-9.557333 15.701333-19.797333 15.701333-31.402666V437.816889h-97.621333v-47.104z"
fill="#d81e06"
p-id="3065"
></path>
fill="#d81e06" p-id="3065"></path>
</svg>
<!-- 审核中 -->
<!-- <svg
@ -211,28 +151,19 @@
</span> -->
</span>
<div class="header-right">
<div
v-if="
<div v-if="
selectCardsname === '融合服务' ||
selectCardsname === '赋能场景'
"
class="label-content"
>
<template
v-if="
" class="label-content">
<template v-if="
item.fuseAttrList &&
item.fuseAttrList.filter(
(val) => val.attrType == '应用领域'
)[0]
"
>
<span
class="label"
v-for="(data, index) in item.fuseAttrList
">
<span class="label" v-for="(data, index) in item.fuseAttrList
.filter((val) => val.attrType == '应用领域')[0]
.attrValue.split(';')"
:key="index"
>
.attrValue.split(';')" :key="index">
{{ data }}
</span>
</template>
@ -250,21 +181,15 @@
</div>
</div>
<div class="dec">
<div
v-if="
<div v-if="
selectCardsname !== '融合服务' &&
selectCardsname !== '赋能场景' &&
selectCardsname !== '基础设施'
"
>
">
<span>{{ item.deptName || '--' }}</span>
</div>
</div>
<div
v-if="selectCardsname !== '基础设施'"
style="margin-top: 0.1rem"
class="description"
>
<div v-if="selectCardsname !== '基础设施'" style="margin-top: 0.1rem" class="description">
<a-tooltip>
<template #title>{{ item.description }}</template>
{{ item.description || '--' }}
@ -273,32 +198,26 @@
<div class="btn">
<div class="bottom" v-if="selectCardsname !== '基础设施'">
<div>
<div
v-if="
<div v-if="
selectCardsname !== '数据资源' &&
selectCardsname !== '融合服务' &&
selectCardsname !== '赋能场景'
"
>
">
浏览量{{ item.visits || 0 }}
</div>
<div
v-if="
<div v-if="
selectCardsname !== '数据资源' &&
selectCardsname !== '融合服务' &&
selectCardsname !== '赋能场景' &&
(selectCardsname !== '应用资源' || whoShow1.itShowQingDao)
"
>
">
申请量{{ item.applyCount || 0 }}
</div>
<div
v-if="
<div v-if="
selectCardsname === '数据资源' &&
selectCardsname !== '融合服务' &&
selectCardsname !== '赋能场景'
"
>
">
数据量{{ item.sjlCount || 0 }}
</div>
<div v-if="selectCardsname !== '数据资源'">
@ -308,75 +227,39 @@
</div>
<div class="right" v-if="selectCardsname !== '基础设施'">
<div class="shopping" :key="shoppingKey">
<template
v-if="
<template v-if="
(selectCardsname == '组件服务' &&
item.infoList.filter(
(val) => val.attrType == '外部服务地址'
).length === 0) ||
(selectCardsname == '应用资源' && whoShow1.itShowQingDao)
"
>
<span
class="shopping-down"
v-if="item.isInShoppingCart"
></span>
<span
class="shopping-on"
v-else
@click.stop="addShoppingCart(item, index)"
></span>
">
<span class="shopping-down" v-if="item.isInShoppingCart"></span>
<span class="shopping-on" v-else @click.stop="addShoppingCart(item, index)"></span>
</template>
</div>
<div class="sc">
<span
class="sc-down"
v-if="item.isCollect == 'false'"
@click.stop="addCollect(item)"
></span>
<span
class="sc-on"
v-if="item.isCollect == 'true'"
@click.stop="addCollect(item)"
></span>
<span class="sc-down" v-if="item.isCollect == 'false'" @click.stop="addCollect(item)"></span>
<span class="sc-on" v-if="item.isCollect == 'true'" @click.stop="addCollect(item)"></span>
</div>
<div
class="shopping pk"
:key="pk"
v-show="
<div class="shopping pk" :key="pk" v-show="
cardType == '组件服务' && findComponentName(item, '智能算法')
"
>
<span
class="pk-on"
@click.stop="goComparePk(item, index)"
></span>
">
<span class="pk-on" @click.stop="goComparePk(item, index)"></span>
</div>
<a-button
type="primary"
@click.stop="toView('details', item)"
v-if="!whoShow1.itShowBaoTou"
>
<a-button type="primary" @click.stop="toView('details', item)" v-if="!whoShow1.itShowBaoTou">
查看详情
</a-button>
<a-button
style="margin-left: 10px"
v-show="
<a-button style="margin-left: 10px" v-show="
selectCardsname === '融合服务' ||
selectCardsname === '赋能场景'
"
@click.stop="handleAKeyApplication(item)"
>
" @click.stop="handleAKeyApplication(item)">
一键申请
</a-button>
<a-button
type="primary"
@click.stop="toView('apply', item)"
v-show="
<a-button type="primary" @click.stop="toView('apply', item)" v-show="
cardType == '组件服务' ||
(cardType == '应用资源' && whoShow1.itShowQingDao)
"
>
">
{{
item.shareCondition == '免批申请' ? '免批申请' : '立即申请'
}}
@ -391,12 +274,7 @@
</div>
</div>
</div>
<a-modal
v-model:visible="visible"
title="视频预览"
:width="750"
destroyOnClose
>
<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%">
@ -414,9 +292,10 @@
import { scInsert, scDel } from '@/api/personalCenter'
import mybus from '@/myplugins/mybus'
import { getHls } from '@/api/home.js'
import IntegrationServiceOrder from './integrationServiceOrder.vue';
import ComponentServiceTag from './ComponentServiceTag.vue';
export default {
name: '',
// props: ['resourceList', 'resourceTotal', 'selectCardsname'],
props: {
resourceList: {
type: Object,
@ -428,116 +307,22 @@
},
selectCardsname: {
type: String,
default: '组件服务',
default: '应用资源',
},
},
computed: {
dataList() {
const newArr = []
for (let i = 0; i < this.resourceList.data.length; i++) {
let arr = [
{
name: '应用名称',
value: '',
components: {
IntegrationServiceOrder,
ComponentServiceTag,
},
{
name: '应用ID',
value: '',
dataResourceId: '',
},
{
name: '应用领域',
value: '',
},
{
name: '组件类型',
value: '',
},
{
name: '技术领域',
value: '',
},
{
name: '共享类型',
value: '',
},
{
name: '共享条件',
value: '',
},
]
arr.map((item) => {
if (item.name === '应用名称') {
item.value = this.resourceList.data[i].name
}
if (item.name === '应用ID') {
item.value = this.resourceList.data[i].id
item.dataResourceId =
this.resourceList.data[i].infoList[0].dataResourceId
}
if (item.name === '应用领域') {
this.resourceList.data[i].infoList.map((aa) => {
aa.attrType === '应用领域' ? (item.value = aa.attrValue) : ''
})
}
if (item.name === '组件类型') {
this.resourceList.data[i].infoList.map((aa) => {
aa.attrType === '组件类型' ? (item.value = aa.attrValue) : ''
})
}
if (item.name === '技术领域') {
this.resourceList.data[i].infoList.map((aa) => {
aa.attrType === '技术领域' ? (item.value = aa.attrValue) : ''
})
}
if (item.name === '共享类型') {
this.resourceList.data[i].infoList.map((aa) => {
aa.attrType === '共享类型' ? (item.value = aa.attrValue) : ''
})
}
if (item.name === '共享条件') {
this.resourceList.data[i].infoList.map((aa) => {
aa.attrType === '共享条件' ? (item.value = aa.attrValue) : ''
})
}
})
newArr.push(arr)
}
console.log(
'dataList======================>',
newArr,
this.resourceList
)
return newArr
},
isShoppingCartOrNot() {
return ''
},
},
components: {},
setup(props) {
// eslint-disable-next-line no-undef
setup(props, context) {
const whoShow1 = whoShow
const showKey = ref(0)
let shoppingKey = ref(1)
//
const orderList = ref([
{
value: 'collectCount',
name: '收藏量',
orderType: 'DESC',
},
{
value: 'create_date',
name: '发布时间',
orderType: 'DESC',
},
{
value: 'update_date',
name: '更新时间',
orderType: 'DESC',
},
])
let orderObj = reactive({
orderField: '',
orderType: '',
})
const integrationServiceOrderDom = ref(null)
// id
const selList = ref([
{ name: '发布时间', value: 'tdr.create_date', show: true },
@ -546,6 +331,10 @@
{ name: '收藏量', value: 'collectCount', show: true },
{ name: '评分', value: 'score', show: true },
])
// 西-
if (whoShow1.itShowXiHaiAn) {
selList.value = selList.value.filter(v => v.name !== '浏览量')
}
if (props.selectCardsname === '基础设施') {
selList.value.map((val) => (val.show = false))
} else if (props.selectCardsname === '数据资源') {
@ -562,6 +351,14 @@
})
}
}
// 西----
const showTagArray = ['已落地', '需要计算支持']
const getTagList = (item) => {
let _arr = item.infoList.filter((x) => showTagArray.includes(x.attrValue)) || []
let tagArray = _arr.map(v => v.attrValue)
return tagArray
}
console.log('this.resourceList', props.resourceList.data)
props.resourceList.data.map((val) => {
if (val.infoList) {
@ -604,7 +401,6 @@
console.log('or use this.value', searchValue.value)
}
function toView(type, item) {
debugger
if (props.selectCardsname == '数据资源') {
if (whoShow1.itShowQingDao) {
window.open(
@ -617,6 +413,7 @@
)
}
} else if (props.selectCardsname === '融合服务') {
context.emit('saveSearchCodition')
//
router.push({
path: '/packagingDetails',
@ -683,11 +480,7 @@
})
}
} else {
console.log(
'111111111111111111===========>',
router,
props.selectCardsname
)
context.emit('saveSearchCodition')
router.push({
path: '/details',
query: {
@ -749,29 +542,28 @@
}
}
}
//
const changeCondition = (val) => {
selData.value = selData.value == val ? 'total' : val
const orderType = selData.value == val ? 'ASC' : 'DESC'
mybus.emit('changeCondition', {
orderField: val,
orderType: orderType,
})
console.log('选择===========》', val, selData.value)
}
// --
const changeOrder = (i, val, type) => {
let newType = type === 'DESC' ? 'ASC' : 'DESC'
orderList.value[i].orderType = newType
mybus.emit('changeCondition', {
orderField: val,
orderType: newType,
})
/**
* val: 排序字段值
* isFromFather: 是否来自父组件传值
*/
const changeCondition = (item, isFromFather = false) => {
console.log('item, isFromFather------------>', item, isFromFather);
let newType = item.orderType == 'DESC' ? 'ASC' : 'DESC';
if (isFromFather) {
newType = item.orderType;
}
orderObj.orderField = item.value;
orderObj.orderType = newType;
let _index = selList.value.findIndex(x => x.value == item.value)
if (_index > -1) {
selList.value[_index].orderType = newType
}
selList.value = selList.value.splice(0);
mybus.emit('changeCondition', orderObj)
}
// --
//
const handleAKeyApplication = (item) => {
let _applyList = []
let fuseResourceList = item.fuseResourceList || []
@ -802,7 +594,6 @@
}
otherArray.map((v) => {
let resource = v.resource || {}
console.log('resource------------>', resource)
let obj = {
arr: [
{
@ -823,64 +614,25 @@
localStorage.setItem('applyList', JSON.stringify(_applyList))
router.push({
path: '/apply',
query: {
integrationServicesId: item.id,
},
})
}
// const handleAKeyApplication = (item) => {
// let _applyList = []
// ; (item.fuseResourceList || []).map((v) => {
// let resource = v.resource || {}
// let obj = {
// arr: [
// {
// delFlag: resource.delFlag,
// description: resource.description,
// resourceId: resource.id,
// resourceName: resource.name,
// time: resource.createDate,
// type: resource.type,
// },
// ],
// deptId: resource.deptId,
// deptName: resource.deptName,
// }
// _applyList.push(obj)
// })
// localStorage.setItem('applyList', JSON.stringify(_applyList))
// router.push({
// path: '/apply',
// })
// }
mybus.on('chongzhi', (typeObj) => {
console.log('typeObj------------>', typeObj)
if (!typeObj) {
selData.value = 'total'
}
if (
typeObj &&
(typeObj.type === '融合服务' || typeObj.type === '赋能场景')
(typeObj.type === '融合服务' || typeObj.type === '打包模式')
) {
orderList.value = [
{
value: 'collectCount',
name: '收藏量',
orderType: 'DESC',
},
{
value: 'create_date',
name: '发布时间',
orderType: 'DESC',
},
{
value: 'update_date',
name: '更新时间',
orderType: 'DESC',
},
]
integrationServiceOrderDom.value.reset &&
integrationServiceOrderDom.value.reset()
}
})
let videoUrl = ref('')
const options = reactive({
width: '700px', //
@ -951,9 +703,10 @@
goComparePk,
whoShow1,
showKey,
orderList,
handleAKeyApplication,
changeOrder,
integrationServiceOrderDom,
orderObj,
getTagList,
}
},
beforeUnmount() {

View File

@ -1,12 +1,12 @@
export const titleNameArray = [
{
photo: require('@/assets/newHome/banner-zj.png'),
name: '组件服务',
},
{
photo: require('@/assets/newHome/banner-yy.png'),
name: '应用资源',
},
{
photo: require('@/assets/newHome/banner-zj.png'),
name: '组件服务',
},
{
photo: require('@/assets/newHome/banner-jc.png'),
name: '基础设施',

View File

@ -0,0 +1,34 @@
<template>
<div class="detail-back" @click="previousPage" :style="{ color: textColor }">
</div>
</template>
<script setup>
import { reactive, ref, watch, defineProps } from 'vue'
import { useRouter } from 'vue-router'
const router = useRouter()
console.log('router------------>', router)
const props = defineProps({
textColor: { type: String, default: '' },
})
const previousPage = () => {
window.history.go(-1)
}
</script>
<style scoped lang="less">
.detail-back {
position: absolute;
top: 0.85rem;
left: 100px;
font-size: 0.18rem;
color: #fff;
cursor: pointer;
width: 50px;
height: 50px;
background-image: url('~@/assets/detailsAll/back.png');
background-size: 100% 100%;
}
</style>

View File

@ -9,6 +9,7 @@
<div>
<div id="apply-container">
<home-header :showView="showView"></home-header>
<detail-back></detail-back>
<details-view v-if="showView === 'details-view'"></details-view>
<algorithm-details
v-else-if="showView === 'algorithm-details'"
@ -38,6 +39,7 @@
import DeveloperComponents from '@/views/detailsAll/DeveloperComponents'
import BusinessDetails from '@/views/detailsAll/BusinessDetails'
import LayerService from '@/views/detailsAll/LayerService'
import detailBack from '@/views/home/detailBack.vue'
import { selectOne } from '@/api/home'
import { useRouter } from 'vue-router'
export default defineComponent({
@ -52,6 +54,7 @@
DeveloperComponents,
BusinessDetails,
LayerService,
detailBack
},
setup() {
const formState = reactive({
@ -163,6 +166,7 @@
}
}
init()
return {
formState,
options,

View File

@ -100,6 +100,8 @@
import mybus from '@/myplugins/mybus'
import { useRouter } from 'vue-router'
import { UpOutlined, DownOutlined } from '@ant-design/icons-vue'
import { DETAIL_PAGE_CONTENT_DEFAULT_TAB } from '@/global/GlobalConfig.js'
export default defineComponent({
setup() {
const selectedKeys = ref([])
@ -118,7 +120,7 @@
'router.currentRoute.value.query.select',
router.currentRoute.value.query.select
)
let select = router.currentRoute.value.query.select
let select = router.currentRoute.value.query.select || DETAIL_PAGE_CONTENT_DEFAULT_TAB
if (select === '123') {
select = ''
}

File diff suppressed because it is too large Load Diff

View File

@ -5,13 +5,8 @@
<div class="top">
<div class="top-title">
全部
<div
v-for="(item, index) in titleName"
:key="index"
class="tabAll"
@click="changeCards(index)"
:class="{ sel: index == number }"
>
<div v-for="(item, index) in titleName" :key="index" class="tabAll" @click="changeCards(index)"
:class="{ sel: index == number }">
<span>
{{ item.name === '赋能场景' ? '典型赋能场景' : '打包模式' }}
</span>
@ -20,54 +15,26 @@
<div class="resultListSearchInput-father" v-if="number === 0">
<div class="resultListSearchInput-son">
模糊搜索
<a-input-search
v-model:value="searchValue"
placeholder="请输入关键词"
enter-button="搜索"
size="large"
@search="getAppResources"
@change="onSearch"
class="resultListSearchInput"
/>
<button class="button-reset" @click="chongzhi()">重置</button>
<a-input-search v-model:value="searchValue" placeholder="请输入关键词" enter-button="搜索" size="large"
@search="getIntegrationList" @change="onSearch" class="resultListSearchInput" />
<button class="button-reset" @click="resetAction()">重置</button>
<div class="hengxian"></div>
</div>
</div>
<div v-loading="loadingData">
<searchResultList
v-if="number === 0"
v-show="resourceList.data && resourceList.data.length > 0"
:key="listKey2"
:resourceList="resourceList"
:resourceTotal="resourceTotal"
:selectCardsname="number == 0 ? '融合服务' : '赋能场景'"
/>
<CanAssignCase
v-else
v-show="resourceList.data && resourceList.data.length > 0"
:key="listKey2"
:resourceList="resourceList"
:resourceTotal="resourceTotal"
:selectCardsname="number == 0 ? '融合服务' : '赋能场景'"
/>
<searchResultList v-if="number === 0" v-show="resourceList.data && resourceList.data.length > 0"
:resourceList="resourceList" :resourceTotal="resourceTotal" @saveSearchCodition="saveSearchCodition"
ref="searchResultListDom" :selectCardsname="number == 0 ? '融合服务' : '赋能场景'" />
<CanAssignCase v-else v-show="resourceList.data && resourceList.data.length > 0" :resourceList="resourceList"
@saveSearchCodition="saveSearchCodition" :resourceTotal="resourceTotal"
:selectCardsname="number == 0 ? '融合服务' : '赋能场景'" />
<div class="pagination">
<a-pagination
v-if="resourceList.data && resourceList.data.length > 0"
v-model:current="currentPage"
v-model:pageSize="currentPageSize"
show-size-changer
show-less-items
show-quick-jumper
:total="resourceTotal"
:page-size-options="pageSizeOptions"
@change="pageChange"
@showSizeChange="onShowSizeChange"
/>
<a-pagination v-if="resourceList.data && resourceList.data.length > 0" v-model:current="currentPage"
v-model:pageSize="currentPageSize" show-size-changer show-less-items show-quick-jumper
:total="resourceTotal" :page-size-options="pageSizeOptions" @change="pageChange"
@showSizeChange="onShowSizeChange" />
</div>
<div
v-if="resourceList.data && resourceList.data.length <= 0"
style="margin-top: 2rem"
>
<div v-if="resourceList.data && resourceList.data.length <= 0" style="margin-top: 2rem">
<a-empty />
</div>
</div>
@ -78,8 +45,7 @@
<script>
import HomeFooter from '@/views/newHome/components/Footer'
import mybus from '@/myplugins/mybus'
import { defineComponent, reactive, ref, toRefs, onMounted, watch } from 'vue'
import { defineComponent, reactive, ref, toRefs, onMounted, nextTick } from 'vue'
import { getIntegrationServicesList } from '@/api/home.js'
import { useRouter } from 'vue-router'
import HomeHeader from '@/views/home/components/header'
@ -88,19 +54,27 @@
import { message } from 'ant-design-vue'
export default defineComponent({
beforeRouteLeave(to, from, next) {
console.log('to---integrationServices--beforeRouteLeave------->', to)
console.log('from---integrationServices--beforeRouteLeave------->', from)
console.log('next---integrationServices--beforeRouteLeave------->', next)
if (to.name !== 'packagingDetails' && to.name !== 'integrationServicesDetails') {
localStorage.removeItem('integrationServices')
}
next()
},
setup() {
//
const loading = ref(true)
const currentPage = ref(1)
const currentPageSize = ref(5)
const pageSizeOptions = ref(['5', '10', '20', '50'])
const pageSizeOptions = ref(['2', '5', '10', '20', '50'])
const router = useRouter()
const select = router.currentRoute.value.query.select
const searchValue = ref('')
const Cardsname = ref(select)
const resourceList = reactive({ data: [] })
const resourceTotal = ref(0)
const current = ref(1)
const loadingData = ref(false)
//
const titleName = ref([
@ -111,80 +85,84 @@
name: '赋能场景',
},
])
const number = ref(0)
//
let listKey = ref(0)
//
const listKey2 = ref(0)
//
const paramsGetResources = {
pageNum: 1,
pageSize: currentPageSize.value,
page: currentPage.value,
limit: currentPageSize.value,
type: titleName.value[number.value].name,
name: '',
orderField: 'create_date', // total visits 访 applyCount score collectCount
name: searchValue.value,
orderField: 'create_date',
orderType: 'DESC', // ASC DESC
}
const searchResultListDom = ref(null)
const storageSearchInfo = JSON.parse(localStorage.getItem('integrationServices'))
//
const handleSetSearchData = () => {
if (storageSearchInfo) {
number.value = storageSearchInfo.type == '打包模式' ? 0 : 1;
//
searchValue.value = storageSearchInfo.name;
currentPage.value = storageSearchInfo.page;
currentPageSize.value = storageSearchInfo.limit;
paramsGetResources.limit = storageSearchInfo.limit;
paramsGetResources.page = storageSearchInfo.page;
paramsGetResources.type = storageSearchInfo.type;
// 使
nextTick(() => {
searchResultListDom.value && searchResultListDom.value.changeCondition && searchResultListDom.value.changeCondition({
value: storageSearchInfo.orderField,
orderType: storageSearchInfo.orderType,
}, true)
})
getIntegrationList()
}
}
const changeCards = (val) => {
console.log(val)
number.value = val
chongzhi()
//
number.value = val;
paramsGetResources.type = titleName.value[number.value].name;
resetAction()
}
//
const onSearch = () => {
loading.value = true
currentPage.value = 1
getIntegrationList()
}
//
const chongzhi = () => {
loading.value = true
const resetAction = () => {
//
searchValue.value = ''
//
currentPage.value = 1
currentPageSize.value = 5
//
paramsGetResources.pageNum = 1
paramsGetResources.pageSize = 5
paramsGetResources.page = 1
paramsGetResources.limit = 5
paramsGetResources.orderField = 'create_date'
paramsGetResources.orderType = 'DESC'
mybus.emit('chongzhi', {
mybus.emit('resetAction', {
type: titleName.value[number.value].name,
})
getAppResources()
}
const getAppResources = () => {
getIntegrationList()
}
//
const getIntegrationList = () => {
loadingData.value = true
console.log('获取融合服务列表------------>')
let postData = {
limit: currentPageSize.value,
page: currentPage.value,
orderField: paramsGetResources.orderField,
orderType: paramsGetResources.orderType,
name: searchValue.value,
type: titleName.value[number.value].name,
}
getIntegrationServicesList(postData).then(
paramsGetResources.name = searchValue.value;
console.log('paramsGetResources------参数下发------>', paramsGetResources);
getIntegrationServicesList(paramsGetResources).then(
(res) => {
loadingData.value = false
if (res.data.code !== 0) {
return message.error(res.data.msg)
}
console.log('res.data------------>', res.data)
resourceList.data = res.data.data.list || []
resourceTotal.value = res.data.data.total || 0
listKey2.value++
},
(err) => {
loadingData.value = false
@ -199,75 +177,81 @@
} else {
delete paramsGetResources.deptIds
}
getAppResources()
console.log('paramsGetResources', paramsGetResources)
getIntegrationList()
})
mybus.on('changePage', (page) => {
paramsGetResources.pageNum = page
getAppResources('分页查询')
paramsGetResources.page = page
getIntegrationList()
})
mybus.on('changeSelcted', () => {
getAppResources()
getIntegrationList()
})
mybus.on('refresh', () => {
paramsGetResources.pageNum = 1
paramsGetResources.page = 1
currentPage.value = 1
getAppResources()
getIntegrationList()
})
mybus.on('changeCondition', (condition) => {
paramsGetResources.orderField = condition.orderField
paramsGetResources.orderType = condition.orderType
getAppResources()
getIntegrationList()
})
const pageChange = (val) => {
console.log(val)
loading.value = true
currentPage.value = val
paramsGetResources.pageNum = val
let params = '分页查询' //
getAppResources(params)
paramsGetResources.page = val
getIntegrationList() //
}
onMounted(() => {
console.log('222----onMounted-------->', 222)
listKey2.value++
getAppResources()
})
//
const onShowSizeChange = (current, pageSize) => {
currentPage.value = current
currentPageSize.value = pageSize
paramsGetResources.pageNum = current
paramsGetResources.pageSize = pageSize
getAppResources()
paramsGetResources.page = current
paramsGetResources.limit = pageSize
getIntegrationList()
}
//
const saveSearchCodition = (n) => {
console.log('融合服务-----存储查询条件到本地------->', paramsGetResources);
localStorage.setItem(
'integrationServices',
JSON.stringify(paramsGetResources)
)
}
onMounted(() => {
if (storageSearchInfo) {
handleSetSearchData()
} else {
getIntegrationList()
}
watch(currentPageSize, () => {
console.log('pageSize', currentPageSize.value)
})
return {
listKey,
searchValue,
currentPage,
resourceList,
resourceTotal,
pageChange,
listKey2,
Cardsname,
getAppResources,
chongzhi,
getIntegrationList,
resetAction,
onSearch,
currentPageSize,
pageSizeOptions,
current,
loading,
titleName,
changeCards,
number,
loadingData,
onShowSizeChange,
saveSearchCodition,
searchResultListDom,
}
},
components: {
@ -289,8 +273,6 @@
background: #f3f5f9;
padding: 0.2rem;
// padding-left: 0.2rem;
// padding-top: 0.2rem;
.resultListSearchInput-son {
background: #fff;
padding: 0.2rem 0.2rem 0rem 0.3rem;

View File

@ -2,21 +2,15 @@
<template>
<div class="IntegrationServicesDetails" :class="{ fixed2: scrollTop >= 600 }">
<home-header></home-header>
<detail-back></detail-back>
<!-- 头部基本信息 -->
<application-top-details
:dataList="detailInfoObj"
:navList="navList"
></application-top-details>
<application-top-details :dataList="detailInfoObj" :navList="navList"></application-top-details>
<!-- 导航 -->
<div :class="{ fixed: scrollTop >= 600 }">
<div class="application-navigation">
<template v-for="nav in navList" :key="nav.key">
<div
class="nav"
:class="{ selectNow: nav.key == selectNow }"
@click="selectNav(nav.key)"
>
<div class="nav" :class="{ selectNow: nav.key == selectNow }" @click="selectNav(nav.key)">
{{ nav.name }}
<span class="line"></span>
</div>
@ -30,19 +24,16 @@
<DetalsTitle title="场景痛点" type="PAIN POINT"></DetalsTitle>
</div>
<div class="flex-row-center">
<div class="bg cjtd"><a-image :preview="false" :src="bgImg" /></div>
<div class="bg cjtd">
<a-image :preview="false" :src="bgImg" />
</div>
<div class="content" style="margin-left: 0.5rem">
<div
class="content-item"
v-for="(item, i) in painPoint"
:key="i"
style="
<div class="content-item" v-for="(item, i) in painPoint" :key="i" style="
margin-bottom: 0.2rem;
font-size: 0.18rem;
line-height: 0.3rem;
"
>
">
{{ i + 1 + '、' + item.description }}
</div>
</div>
@ -50,26 +41,17 @@
</div>
<!-- 解决方案 -->
<div
id="integration-solution"
class="solution scrollBox"
style="background: #eee"
>
<div id="integration-solution" class="solution scrollBox" style="background: #eee">
<div class="title-1">
<DetalsTitle title="解决方案" type="SOLUTION"></DetalsTitle>
</div>
<div class="flex-row-center">
<div class="content" style="background: #fff; margin-top: 0.2rem">
<div
class="content-item"
v-for="(item, i) in solution"
:key="i"
style="
<div class="content-item" v-for="(item, i) in solution" :key="i" style="
margin-bottom: 0.2rem;
font-size: 0.18rem;
line-height: 0.3rem;
"
>
">
{{ i + 1 + '、' + item.description }}
</div>
</div>
@ -81,48 +63,20 @@
<div class="title-1">
<DetalsTitle title="使用能力" type="ABILITY"></DetalsTitle>
</div>
<div
class="flex-row-center combine-content"
v-for="(item, i) in combineList"
:key="i"
style="display: block"
>
<div
class="top"
style="font-size: 0.24rem; text-align: center; margin-bottom: 0.3rem"
>
<div class="flex-row-center combine-content" v-for="(item, i) in combineList" :key="i" style="display: block">
<div class="top" style="font-size: 0.24rem; text-align: center; margin-bottom: 0.3rem">
{{ i == 0 ? '基础设施' : i == 1 ? '组件服务' : '数据资源' }}
</div>
<div class="bottom" style="display: flex; align-items: flex-start">
<div class="title" :class="'title' + i"></div>
<div>
<el-table
class="table"
:data="item.list"
stripe
:header-cell-style="{ 'text-align': 'center' }"
>
<el-table-column
prop="name"
label="数据"
align="center"
width="200"
show-overflow-tooltip="true"
></el-table-column>
<el-table-column
prop="dept"
label="能力来源"
align="center"
width="300"
show-overflow-tooltip="true"
></el-table-column>
<el-table-column
prop="platform"
label="申请平台"
align="center"
width="100"
show-overflow-tooltip="true"
></el-table-column>
<div class="table-box">
<el-table class="table" :data="item.list" stripe :header-cell-style="{ 'text-align': 'center' }">
<el-table-column prop="name" label="数据" align="center" width="200" show-overflow-tooltip="true">
</el-table-column>
<el-table-column prop="dept" label="能力来源" align="center" width="300" show-overflow-tooltip="true">
</el-table-column>
<el-table-column prop="platform" label="申请平台" align="center" width="100" show-overflow-tooltip="true">
</el-table-column>
</el-table>
</div>
</div>
@ -136,12 +90,7 @@
</div>
<div class="flex-row-center step-content">
<el-steps direction="vertical" :space="150" :active="step.length">
<el-step
v-for="(item, i) in step"
:key="i"
:title="item.question"
:description="item.answer"
></el-step>
<el-step v-for="(item, i) in step" :key="i" :title="item.question" :description="item.answer"></el-step>
</el-steps>
</div>
</div>
@ -155,6 +104,7 @@
import ApplicationCommonProblem from '@/views/detailsAll/components/Application/ApplicationCommonProblem' //
import HomeFooter from '@/views/newHome/components/Footer'
import HomeHeader from '@/views/home/components/header'
import detailBack from '@/views/home/detailBack.vue'
import { ref, onMounted, onBeforeUnmount } from 'vue'
import { useRouter } from 'vue-router'
import { getIntegrationDetail } from '@/api/home'
@ -265,6 +215,14 @@
mybus.emit('flyToView', selectNow.value)
}
const getAttrValue = (fuseAttrList, data, text) => {
let _obj = fuseAttrList.find((v) => v.attrType === text) || {};
data =
JSON.parse(
_obj.attrValue || '[]'
) || []
}
// --
const getIntegrationServicesDeatil = (id) => {
getIntegrationDetail(id).then(
@ -283,18 +241,9 @@
attrType: '常见问题',
attrValue: questionValue.attrValue || '[]',
}
painPoint.value =
JSON.parse(
fuseAttrList.find((v) => v.attrType === '场景痛点').attrValue
) || []
solution.value =
JSON.parse(
fuseAttrList.find((v) => v.attrType === '解决方案').attrValue
) || []
step.value =
JSON.parse(
fuseAttrList.find((v) => v.attrType === '使用步骤').attrValue
) || []
getAttrValue(fuseAttrList, painPoint.value, '场景痛点');
getAttrValue(fuseAttrList, solution.value, '解决方案');
getAttrValue(fuseAttrList, step.value, '使用步骤');
bgImg.value =
fuseAttrList.find((v) => v.attrType === '服务图片').attrValue || ''
let areaObj = {
@ -498,11 +447,9 @@
height: 1.5rem;
width: 6.2rem;
border-radius: 0.2rem;
background: linear-gradient(
to right,
background: linear-gradient(to right,
rgba(113, 132, 252, 0.4),
rgba(148, 163, 252, 0.4)
);
rgba(148, 163, 252, 0.4));
padding: 0 0.3rem;
display: flex;
justify-content: center;
@ -538,6 +485,7 @@
.pain-point {
padding: 0.8rem 0;
background: rgb(247, 248, 250);
.bg {
height: 3rem;
width: 3rem;
@ -545,17 +493,20 @@
// background-size: 100%;
margin-top: 0.3rem;
}
.cjtd {
width: 5.75rem;
height: 3.4rem;
background: url('~@/assets/home/fn/cjtd.png') no-repeat;
background-size: 100%;
}
.content {
overflow: auto;
height: 3rem;
width: 7rem;
margin-top: 0.3rem;
.content-item {
font-size: 16px;
margin: 0rem 0rem 0.1rem 0.1rem;
@ -566,8 +517,10 @@
.solution {
padding: 0.8rem 0;
background: rgb(247, 248, 250);
.content {
width: 11rem;
.content-item {
font-size: 16px;
margin: 0.3rem;
@ -578,18 +531,22 @@
.step {
padding: 0.8rem 0;
background: rgb(247, 248, 250);
.step-content {
margin: 0.3rem 4.5rem;
padding: 0.3rem;
background: #fff;
:deep(.el-step__description.is-finish) {
color: #333;
line-height: 0.24rem;
margin-top: 0.05rem;
}
/deep/ .el-step__title {
font-size: 18px;
}
/deep/ .el-step__description {
font-size: 14px;
}
@ -608,38 +565,49 @@
margin-top: 0.3rem;
align-items: flex-start;
border-bottom: 1px solid #ccc;
margin: 0.2rem 4rem 0;
margin: 0.2rem 3.5rem 0;
padding: 0.2rem 0;
.title {
height: 3rem;
width: 3rem;
margin-right: 0.5rem;
margin-right: 0.4rem;
background: url('~@/assets/home/rhfw_square.png') no-repeat;
background-size: 100%;
background-size: 100% 100%;
}
.title0 {
width: 5.6rem;
height: 3.45rem;
background: url('~@/assets/home/fn/jcss.png') no-repeat;
background-size: 100%;
background-size: 100% 100%;
}
.title1 {
width: 5.6rem;
height: 3.45rem;
background: url('~@/assets/home/fn/zjfw.png') no-repeat;
background-size: 100%;
background-size: 100% 100%;
}
.title2 {
width: 5.6rem;
height: 3.45rem;
background: url('~@/assets/home/fn/sjzy.png') no-repeat;
background-size: 100%;
background-size: 100% 100%;
}
.table-box {
height: 3.45rem;
flex: 1;
overflow-y: auto;
}
.table {
width: 100%;
// width: 100%;
font-size: 16px;
}
}
.name-box {
display: flex;
flex-direction: row;

View File

@ -35,6 +35,8 @@
import { useRouter } from 'vue-router'
import { ref } from 'vue'
import { selectNewest } from '@/api/home'
import { DETAIL_PAGE_CONTENT_DEFAULT_TAB } from '@/global/GlobalConfig.js'
export default {
name: 'latestAbility',
components: {},
@ -45,7 +47,8 @@
router.push({
path: '/DetailsPageconetent',
query: {
select: '组件服务',
// select: '',
select: DETAIL_PAGE_CONTENT_DEFAULT_TAB
},
})
}

View File

@ -2,6 +2,7 @@
<!-- 青岛 -->
<div class="details-pageconetent">
<home-header></home-header>
<detail-back></detail-back>
<div class="content-box" v-loading="loadingPage">
<div class="package-title">打包模式</div>
<div class="basic-info">
@ -70,6 +71,7 @@ import { message } from 'ant-design-vue'
import { getIntegrationDetail } from '@/api/home'
import HomeHeader from '@/views/home/components/header'
import { scInsert, scDel } from '@/api/personalCenter'
import detailBack from '@/views/home/detailBack.vue'
const router = useRouter()
const id = router.currentRoute.value.query.id
@ -110,7 +112,6 @@ const getIntegrationServicesDeatil = (id) => {
}
detailInfoObj.value = res.data.data || {}
console.log('detailInfoObj------------>', detailInfoObj);
let fuseResourceList = detailInfoObj.value.fuseResourceList || []
abilityList.value.map(v => {
let list = fuseResourceList.filter(x => x.type == v.name) || [];
@ -197,7 +198,6 @@ const addCollect = () => {
}
})
.catch(err => {
console.log('err------------>', err);
message.success(err)
})
} else {
@ -216,16 +216,13 @@ const addCollect = () => {
}
})
.catch(err => {
console.log('err------------>', err);
message.success(err)
})
}
}
}
getIntegrationServicesDeatil(id)
</script>
<style lang="less" scoped>
.flex-row-start {

View File

@ -65,6 +65,8 @@
data-spm-anchor-id="a313x.7781069.0.i0"
></path>
</svg>
<img class="icon-poylon" @click="areaMode()" src="~@/supermap/image/icon-poylon.png">
</div>
<video-play
v-if="openVideo"
@ -92,6 +94,7 @@
} from '@/api/videoSurveillance'
import { getCameraByCondition } from '@/api/file'
import mybus from '@/myplugins/mybus'
import * as turf from '@turf/turf';
export default {
data() {
@ -112,6 +115,7 @@
openVideo: false,
channelCode: [],
circleModeFlag: false,
areaModeFlag: false,
addressMatchUrl: '',
address: '',
whoShow1: whoShow,
@ -124,7 +128,10 @@
gpsX: '',
gpsY: '',
radius: '',
borderPolygonList: [],
type: 0, //012
},
pointAllData:[],
}
},
components: {
@ -158,6 +165,20 @@
this.mapSearchParam.parentId = parentId
this.getCameraByParentId()
})
//
mybus.off('selectTablePoint')
mybus.on('selectTablePoint', (pointlist) => {
console.log("mounted -> pointlist", pointlist);
for(let i=0;i<this.pointAllData.length;i++){
this.pointAllData[i].active = false
for(let j=0;j<pointlist.length;j++){
if(this.pointAllData[i].channelCode == pointlist[j].channelCode){
this.pointAllData[i].active = true
}
}
}
this.addResourceTomap('videoMap', this.pointAllData);
})
},
methods: {
selectedAddress(item, index) {
@ -169,6 +190,46 @@
}
this.hiMapFun.mapFlyTo(latLng)
},
//
areaSelectResource(){
//
L.drawLocal.draw.handlers.polygon.tooltip.start = '单击开始绘制形状'
L.drawLocal.draw.handlers.polygon.tooltip.cont = '单击继续绘制形状'
L.drawLocal.draw.handlers.polygon.tooltip.end =
'单击继续绘制形状,双击结束绘制'
this.hiMap.mapObj.map.off('draw:created')
this.hiMap.mapObj.drawPolygon.enable()
this.hiMap.mapObj.map.once('draw:created', (e) => {
const type = e.layerType
const circleLayer = e.layer
console.log('查询图层draw:created', e)
if (type === 'polygon') {
const polygonLayer = e.layer;
this.hiMap.mapObj.featureGroup.addLayer(polygonLayer);
this.hiMap.mapObj.layerGroup.set('rectangleSelectLayer', polygonLayer);
const arr = [];
const latlngs = []; //
polygonLayer._latlngs[0].map(item => {
// const bdLonLat = wgs84LL2bdLL();
arr.push(turf.point([item.lng, item.lat]));
latlngs.push([item.lat,item.lng])
});
const points = turf.featureCollection(arr);
const rect = turf.convex(points);
this.mapSearchParam.borderPolygonList = latlngs
this.mapSearchParam.type = 2
const params = {
borderPolygonList: latlngs,
type: this.mapSearchParam.type,
}
// mybus.emit('getListByMap', params);
this.getCameraByParentId('map');
console.log("areaSelectResource -> latlngs", latlngs)
}
})
},
//
circleSelectResource() {
L.drawLocal.draw.handlers.circle.tooltip.start = '请圈选区域'
@ -196,18 +257,20 @@
this.mapSearchParam.gpsX = e.layer._latlng.lng
this.mapSearchParam.gpsY = e.layer._latlng.lat
this.mapSearchParam.radius = radius
this.mapSearchParam.type = 1
const params = {
gpsX: this.mapSearchParam.gpsX,
gpsY: this.mapSearchParam.gpsY,
radius: radius,
type: this.mapSearchParam.type,
}
mybus.emit('getListByMap', params)
this.getCameraByParentId()
// mybus.emit('getListByMap', params)
this.getCameraByParentId('map')
}
}
})
},
getCameraByParentId() {
getCameraByParentId(type) {
if (!this.whoShow1.itShowXiHaiAn) {
debugger
getCameraByParentId(this.mapSearchParam).then((res) => {
@ -221,12 +284,13 @@
this.mapSearchParam.parentId ||
'70be8c5b664f4bcf869d82f2e8335051',
pageNum: this.mapSearchParam.pageNum,
pageSize: this.mapSearchParam.pageSize,
pageSize: this.mapSearchParam.type!=0?this.mapSearchParam.pageSize:10,
name: this.mapSearchParam.cameraName || '',
longitude: this.mapSearchParam.gpsX || '',
latitude: this.mapSearchParam.gpsY || '',
radius: this.mapSearchParam.radius || '',
status: 1,
type: this.mapSearchParam.type,
borderPolygonList: this.mapSearchParam.borderPolygonList || [],
}
let paramsFather = ''
let i = 1
@ -243,9 +307,19 @@
}
}
}
getCameraByCondition(paramsFather).then((res) => {
getCameraByCondition(params).then((res) => {
console.log('根据parent查询摄像头', res.data.data)
if(type=='map'){
let params = this.mapSearchParam;
params.dataSource = res.data.data||0;
params.total = res.data.count||0;
mybus.emit('getListByMap', params);
}
this.pointAllData = res.data.data;
if(this.mapSearchParam.type!=0)
this.addResourceTomap('videoMap', res.data.data)
else
this.addResourceTomap('videoMap', []) //
})
}
},
@ -256,27 +330,65 @@
this.addressMatchUrl
)
},
areaMode(){
//
if(this.circleModeFlag){
this.resetCircle();
this.circleModeFlag = false;
}
this.areaModeFlag = !this.areaModeFlag;
if (this.areaModeFlag) {
//
this.areaSelectResource()
} else {
this.resetArea();
}
},
circleMode() {
if(this.areaModeFlag){
this.resetArea();
this.areaModeFlag = false;
}
//
this.circleModeFlag = !this.circleModeFlag
if (this.circleModeFlag) {
//
this.circleSelectResource()
} else {
this.resetCircle();
}
},
resetCircle(){
//
this.hiMapFun.removeLayerByLayerName('circlePloygonLayer')
//
this.mapSearchParam.gpsX = ''
this.mapSearchParam.gpsY = ''
this.mapSearchParam.radius = ''
this.getCameraByParentId()
this.mapSearchParam.type = 0;
const params = {
gpsX: this.mapSearchParam.gpsX,
gpsY: this.mapSearchParam.gpsY,
radius: this.mapSearchParam.radius,
type: this.mapSearchParam.type
}
mybus.emit('getListByMap', params)
this.getCameraByParentId('map')
// mybus.emit('getListByMap', params);
},
resetArea(){
//
this.hiMapFun.removeLayerByLayerName('rectangleSelectLayer');
//
this.mapSearchParam.borderPolygonList = [];
this.mapSearchParam.type = 0;
const params = {
borderPolygonList: this.mapSearchParam.borderPolygonList,
type: this.mapSearchParam.type
}
this.getCameraByParentId('map')
// mybus.emit('getListByMap', params);
},
//
async searchAddressByKeyWord(queryString, cb, indexX) {
@ -352,18 +464,21 @@
addResourceTomap(type, data) {
const dataEvent = []
if(data&&data.length>0){
data.forEach((item) => {
const arr = [0, 0.0, '', '0', '0.0']
if (arr.indexOf(item.gpsX) == -1) {
dataEvent.push({
latLng: { lat: Number(item.gpsY), lng: Number(item.gpsX) },
data: item,
active: item.active,
type: 'videoSurveillance',
})
}
})
}
console.log('上图数据', dataEvent)
this.getMapPoint(dataEvent, 'videoSurveillance.png', type)
this.getMapPoint(dataEvent, 'icon_camare.png', type)
},
getMapPoint(data, img, type) {
// this.hiMapFun.clearAllLayers();
@ -373,7 +488,8 @@
features,
img,
type,
createCameraDetailsPop
createCameraDetailsPop,
'icon_camare_active.png'
)
},
@ -543,13 +659,17 @@
.leaflet-control-attribution {
display: none;
}
svg {
svg,.icon-poylon {
position: absolute;
bottom: 0.1rem;
right: 0.1rem;
z-index: 1001;
z-index: 988;
cursor: pointer;
}
.icon-poylon {
width: 0.46rem;
bottom: 0.6rem;
}
.address-auto-complete-input {
width: 2.4rem;
}

View File

@ -26,7 +26,7 @@ import {
ref,
watch,
defineProps,
nextTick,
defineEmits,
} from 'vue'
import { getDevelopDocTree } from '@/api/home'
import { message } from 'ant-design-vue'

View File

@ -118,6 +118,7 @@
import TheOverallProcess from './TheOverallProcess.vue'
import { useRouter } from 'vue-router'
import { message } from 'ant-design-vue'
import { DETAIL_PAGE_CONTENT_DEFAULT_TAB } from '@/global/GlobalConfig.js'
const router = useRouter()
const seviceList = ref([
{
@ -255,7 +256,8 @@
const newpage = router.resolve({
path: '/DetailsPageconetent',
query: {
select: '组件服务',
// select: '',
select: DETAIL_PAGE_CONTENT_DEFAULT_TAB
},
})
window.location.href = newpage.href

View File

@ -2,18 +2,19 @@
<home-header></home-header>
<div class="menu-container">
<div id="container" class="content-menu">
<div class="left">
<!-- <div class="left">
<div class="first-title-text doc" :style="{ color: '技术文档' === titleData.name ? '#0058e1' : '' }"
@click="changeName({ name: '技术文档' })">
技术文档
</div>
<abilityDocTree style="max-height:320px;overflow-y:auto" :dataList="treeArray" @treeClick="treeClick"
:clickData="clickData"></abilityDocTree>
</div>
</div> -->
<div class="first-title-text new-guide-box" :style="{ color: '使用手册' === titleData.name ? '#0058e1' : '' }"
@click="changeName({ name: '使用手册' })">
<div class="guide-text">使用手册</div>
<img src="@/assets/developmentGuide/download.png" @click="downloadDoc('/static/doc/userbook.docx', '通用能力服务平台USC用户手册')" alt="" />
</div>
<!-- 技术文档 -->
@ -133,7 +134,12 @@ const getFirstData = (firstObj = {}) => {
clickData.value = firstObj
}
}
const downloadDoc = (path, name) => {
const a = document.createElement('a')
a.href = path
a.download =name
a.click()
}
onMounted(() => {
getTreeData()
})
@ -192,7 +198,7 @@ onMounted(() => {
top: 300px;
right: 205px;
width: 74px;
height: 136px;
height: 150px;
background: url('~@/assets/menu/new-bg.png') no-repeat;
background-size: 100% 100%;
display: flex;

View File

@ -15,22 +15,16 @@
</a-input>
</a-form-item>
<a-form-item>
<a-input
v-model:value="form.password"
type="password"
placeholder="Password"
>
<a-input v-model:value="form.password" type="password" placeholder="Password">
<template v-slot:prefix>
<LockOutlined style="color: rgba(0, 0, 0, 0.25)" />
</template>
</a-input>
</a-form-item>
<a-form-item>
<a-button
type="primary"
html-type="submit"
:disabled="form.username === '' || form.password === ''"
>
<!-- IE Chrome || judgeAgent() !== 'Chrome'-->
<a-button type="primary" html-type="submit"
:disabled="form.username === '' || form.password === '' || !canOpen.includes(judgeAgent())">
登录
</a-button>
</a-form-item>
@ -46,7 +40,10 @@
import { mapActions, mapGetters } from 'vuex'
import { Encrypt } from '@/utils/crypto'
import { UserOutlined, LockOutlined } from '@ant-design/icons-vue'
import { message } from 'ant-design-vue'
import { message, Modal } from 'ant-design-vue'
// 西
const isXiHaiAn = whoShow.itShowXiHaiAn
export default {
name: 'Login',
@ -63,6 +60,9 @@
redirect: undefined,
dependencies: dependencies,
devDependencies: devDependencies,
is360: false,
isIE: false,
canOpen: ['FF', 'Chrome']
}
},
computed: {
@ -82,14 +82,52 @@
mounted() {
this.form.username = ''
this.form.password = ''
/* setTimeout(() => {
this.handleSubmit()
}, 3000) */
if (!this.canOpen.includes(this.judgeAgent())) {
Modal.warning({
title: '提示',
content: '请使用谷歌或火狐浏览器!',
});
}
},
methods: {
...mapActions({
login: 'user/login',
}),
//
judgeAgent() {
let userAgent = navigator.userAgent // userAgent
console.log('userAgent------------>', userAgent);
let isOpera = userAgent.indexOf('Opera') > -1
//Opera
if (isOpera) {
return 'Opera'
}
//Firefox
if (userAgent.indexOf('Firefox') > -1) {
return 'FF'
}
//chorme
if (userAgent.indexOf('Chrome') > -1) {
return 'Chrome'
}
//Safari
if (userAgent.indexOf('Safari') > -1) {
return 'Safari'
}
//IE
if (
userAgent.indexOf('compatible') > -1 &&
userAgent.indexOf('MSIE') > -1 &&
!isOpera
) {
return 'IE'
}
//Edge
if (userAgent.indexOf('Trident') > -1) {
return 'Edge'
}
},
handleRoute() {
return this.redirect === '/404' || this.redirect === '/403'
? '/home'
@ -110,7 +148,19 @@
window.sessionStorage.setItem('visits', JSON.stringify([]))
console.log('添加visits========================================>')
// console.log(this.handleRoute())
// 西
if (isXiHaiAn) {
await this.$router.push({
path: '/DetailsPageconetent',
query: {
select: '基础设施',
tecHnosphere: '',
appLiCation: ''
}
})
} else {
await this.$router.push('/home')
}
} catch (error) {
message.error('登陆失败,用户名或密码错误!')
}
@ -124,6 +174,7 @@
height: 100vh;
background: url('~@/assets/login_images/login_background.png');
background-size: cover;
&-form {
width: calc(100% - 40px);
height: 380px;
@ -136,15 +187,18 @@
border-radius: 10px;
box-shadow: 0 2px 8px 0 rgba(7, 17, 27, 0.06);
}
&-hello {
font-size: 32px;
color: #fff;
}
&-title {
margin-bottom: 30px;
font-size: 20px;
color: #fff;
}
&-tips {
position: fixed;
bottom: @vab-margin;
@ -153,13 +207,16 @@
color: rgba(255, 255, 255, 0.856);
text-align: center;
}
.ant-col {
width: 100%;
padding: 0 10px 0 10px;
}
.ant-input {
height: 35px;
}
.ant-btn {
width: 100%;
height: 45px;

View File

@ -227,7 +227,12 @@
if (item) {
mynoticeRead(item.id).then((res) => {
if (res.data.code == 0 ) {
message.success('操作成功!')
message.success('通知已读!')
// if(item.readStatus == 1){
// message.success('')
// } if(item.readStatus == 0){
// message.success('')
// }
mybus.emit('getMynotice')
init()
} else {

View File

@ -2,7 +2,7 @@
<div class="capability-convergence">
<div class="main">
<div class="top">
能力汇聚
能力分类
<span class="line"></span>
</div>
<div class="bottom">
@ -84,7 +84,8 @@
import { ref, reactive } from 'vue'
import { useRouter } from 'vue-router'
import { useStore } from 'vuex'
import { updateVisits, browsingInsert } from '@/api/home'
import { updateVisits, browsingInsert, getSoldierList } from '@/api/home'
import { message, Upload } from 'ant-design-vue'
import mybus from '@/myplugins/mybus'
const store = useStore()
const router = useRouter()
@ -164,22 +165,47 @@
} else {
let type = paramsGetResources.type
if (type == '基础设施') {
jcList.value = []
selectInfrastructureList().then((res) => {
console.log('基础设施==========>', res.data.data)
for (const key in res.data.data) {
if (whoShow1.value.itShowXiHaiAn) {
if (key === '视频资源') {
jcList.value.push({
name: key,
num: res.data.data[key],
})
}
if (uavAndIndividualSoldier.num) {
} else {
jcList.value.push({
name: key,
num: res.data.data[key],
})
}
}
// 西-
if (whoShow1.value.itShowXiHaiAn) {
getSoldierData('无人机')
.then((res) => {
let { total = 0 } = res.data.data
jcList.value.push({
name: '无人机',
num: uavAndIndividualSoldier.uavList.length,
num: total,
})
})
.catch((err) => {
console.log('err--无人机---------->', err)
})
getSoldierData('单兵设备')
.then((res) => {
let { total = 0 } = res.data.data
jcList.value.push({
name: '单兵设备',
num: uavAndIndividualSoldier.individualSoldier.length,
num: total,
})
})
.catch((err) => {
console.log('err--单兵设备---------->', err)
})
}
})
@ -206,6 +232,28 @@
}
}
// todo
const getSoldierData = (name) => {
let _params = {
type: name,
page: 1,
limit: 10,
}
return new Promise((resolve, reject) => {
getSoldierList(_params)
.then((res) => {
resolve(res)
console.log('res---获取无人机、单兵设备--------->', res)
if (res.data.code !== 0) {
return message.error(res.data.msg)
}
})
.catch((err) => {
reject(err)
})
})
}
const openHref = (item) => {
console.log(item.id, 'wowowo')
console.log(item.visits, 'wowowo')
@ -298,12 +346,14 @@
background-size: 100%;
display: flex;
justify-content: center;
.main {
width: 13rem;
margin-top: 1.8rem;
display: flex;
flex-direction: column;
flex-wrap: wrap;
.top {
font-size: 0.3rem;
color: #212121;
@ -313,6 +363,7 @@
flex-wrap: wrap;
justify-content: center;
align-items: center;
.line {
width: 0.34rem;
height: 0.03rem;
@ -320,10 +371,12 @@
margin-top: 0.08rem;
}
}
.bottom {
display: flex;
justify-content: space-between;
margin-top: 0.4rem;
.item {
width: 2.44rem;
height: 3.91rem;
@ -332,6 +385,7 @@
border-radius: 0.02rem;
box-shadow: 0 0.05rem 0.2rem #ccc;
position: relative;
div:nth-of-type(1) {
height: 1.02rem;
line-height: 1.02rem;
@ -340,21 +394,27 @@
padding-left: 0.15rem;
background-size: 100%;
}
.jc {
background: url('~@/assets/newHome/Convergence-jc.png') no-repeat;
}
.sj {
background: url('~@/assets/newHome/Convergence-sj.png') no-repeat;
}
.zj {
background: url('~@/assets/newHome/Convergence-zj.png') no-repeat;
}
.yy {
background: url('~@/assets/newHome/Convergence-yy.png') no-repeat;
}
.zs {
background: url('~@/assets/newHome/Convergence-zs.png') no-repeat;
}
.name {
height: 0.47rem;
line-height: 0.47rem;
@ -367,13 +427,16 @@
-webkit-box-orient: vertical;
word-break: break-all;
}
.name:hover {
color: #0058e1;
cursor: pointer;
}
.name-last {
border-bottom: none;
}
.btn {
cursor: pointer;
width: 0.8rem;
@ -388,11 +451,13 @@
position: absolute;
bottom: 0.2rem;
}
.btn:hover {
background: rgba(0, 88, 225, 0.3);
color: #000;
}
}
.item:hover {
border-radius: 0.02rem;
border: 0.01rem solid #0058e1;

View File

@ -32,6 +32,7 @@
import { ref } from 'vue'
import { useRouter } from 'vue-router'
import { useStore } from 'vuex'
import { DETAIL_PAGE_CONTENT_DEFAULT_TAB } from '@/global/GlobalConfig.js'
const store = useStore()
const router = useRouter()
const productServiceData = ref([])
@ -76,7 +77,8 @@
router.push({
path: '/DetailsPageconetent',
query: {
select: '组件服务',
// select: '',
select: DETAIL_PAGE_CONTENT_DEFAULT_TAB
},
})
}

View File

@ -1,5 +1,7 @@
<template>
<div class="navigation2">
<a-tooltip>
<template #title>点击进入组件服务</template>
<div class="item" @click="jumpPage('组件服务')">
<div class="img zj"></div>
<div class="name">组件服务</div>
@ -8,6 +10,9 @@
</div>
</div>
</a-tooltip>
<a-tooltip>
<template #title>点击进入应用资源</template>
<div class="item" @click="jumpPage('应用资源')">
<div class="img yy"></div>
<div class="name">应用资源</div>
@ -16,6 +21,9 @@
</div>
</div>
</a-tooltip>
<a-tooltip>
<template #title>点击进入基础设施</template>
<div class="item" @click="jumpPage('基础设施')">
<div class="img jc"></div>
<div class="name">基础设施</div>
@ -24,6 +32,9 @@
</div>
</div>
</a-tooltip>
<a-tooltip>
<template #title>点击进入数据资源</template>
<div class="item" @click="jumpPage('数据资源')">
<div class="img sj"></div>
<div class="name">数据资源</div>
@ -32,6 +43,9 @@
</div>
</div>
</a-tooltip>
<a-tooltip>
<template #title>点击进入知识库</template>
<div class="item" @click="jumpPage('知识库')">
<div class="img zs"></div>
<div class="name">知识库</div>
@ -40,6 +54,7 @@
</div>
</div>
</a-tooltip>
</div>
</template>
<script setup>

View File

@ -61,6 +61,7 @@
import { pageWithAttrs } from '@/api/home.js'
import { useRouter } from 'vue-router'
import { useStore } from 'vuex'
import { DETAIL_PAGE_CONTENT_DEFAULT_TAB } from '@/global/GlobalConfig.js'
const store = useStore()
const router = useRouter()
const select = ref('浏览量')
@ -134,11 +135,11 @@
'选中===================>',
store.getters['home/selectCardsnum']
)
// router.push({ path: '/DetailsPageconetent' })
router.push({
path: '/DetailsPageconetent',
query: {
select: '组件服务',
// select: '',
select: DETAIL_PAGE_CONTENT_DEFAULT_TAB
},
})
}

View File

@ -47,6 +47,7 @@
import { selectRecommend } from '@/api/home.js'
import { useRouter } from 'vue-router'
import { useStore } from 'vuex'
import { DETAIL_PAGE_CONTENT_DEFAULT_TAB } from '@/global/GlobalConfig.js'
const store = useStore()
const router = useRouter()
let dataList = ref([])
@ -94,7 +95,7 @@
router.push({
path: '/DetailsPageconetent',
query: {
select: '组件服务',
select: DETAIL_PAGE_CONTENT_DEFAULT_TAB
},
})
}

View File

@ -1,6 +1,6 @@
<template>
<div class="work-dynamics">
<div class="title">
<!-- <div class="title">
<div>工作动态</div>
<div class="title-son"></div>
</div>
@ -51,11 +51,15 @@
<div class="bottom" @click="jumpPage()">
查看更多
<span class="gengduo"></span>
</div>
</div> -->
<div class="fixedmount">
<div @click="applyResource()">
<p></p>
<p>资源申请</p>
</div>
<div @click="toView()">
<p></p>
<p>需求申请</p>
<p>需求</p>
</div>
<div @click="showModal">
<p></p>
@ -311,6 +315,15 @@
function handlecancelAbilitySquare() {
abilitySquareFunctionData.value = '智能算法'
}
const applyResource = () => {
console.log('点击===============》')
router.push({
path: '/DetailsPageconetent',
query: {
select: '基础设施',
},
})
}
</script>
<style lang="less">
.shangjia-class {
@ -419,8 +432,8 @@
display: flex;
flex-direction: column;
align-items: center;
padding-bottom: 0.8rem;
padding-top: 0.78rem;
// padding-bottom: 0.8rem;
// padding-top: 0.78rem;
.title {
font-size: 0.3rem;
font-family: 'convergence-typeface';
@ -579,11 +592,11 @@
}
.fixedmount {
height: 1.5rem;
height: 3rem;
display: flex;
position: fixed;
bottom: 2.56rem;
right: 1.9rem;
bottom: 1.56rem;
right: 0rem;
z-index: 10;
flex-direction: column;
justify-content: space-between;
@ -591,49 +604,52 @@
}
.fixedmount div {
width: 0.7rem;
height: 0.7rem;
border-radius: 0.04rem;
border: 0.01rem #94aac9 solid;
width: 0.96rem;
height: 0.96rem;
// border-radius: 0.04rem;
// border: 0.01rem #94aac9 solid;
display: flex;
flex-direction: column;
// justify-content: center;
align-items: center;
padding-top: 0.13rem;
padding-top: 0.16rem;
margin-bottom: 2px;
position: relative;
cursor: pointer;
background: #e3edfc;
// background: #e3edfc;
background: url('~@/assets/home/bg-right.png');
}
.fixedmount div p:nth-child(2) {
position: absolute;
bottom: 0rem;
height: 0.14rem;
font-size: 0.14rem;
line-height: 0.14rem;
color: #000000;
height: 0.2rem;
font-size: 0.2rem;
line-height: 0.2rem;
color: #fff;
// 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;
height: 0.32rem;
width: 0.32rem;
//background: url('~@/assets/home/shenqing.png') no-repeat;
background: url('~@/assets/home/sq.png') no-repeat;
background-size: contain;
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;
height: 0.32rem;
width: 0.32rem;
background: url('~@/assets/home/xq.png') no-repeat;
background-size: contain;
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;
height: 0.32rem;
width: 0.32rem;
background: url('~@/assets/home/sj.png') no-repeat;
background-size: 140% 126%;
background-position: center;
}

View File

@ -52,30 +52,18 @@
<span class="img"></span>
<span>{{ item.name }}</span>
</div>
<div
style="
<div style="
display: flex;
justify-content: space-between;
align-items: center;
"
>
">
<div class="oddNumbers">子单号{{ item.instanceId }}</div>
<div style="display: flex; align-items: center">
<a-button
type="primary"
@click="modify(props.refObj.id, item)"
v-if="item.backToFirst"
>
<a-button type="primary" @click="modify(props.refObj.id, item)" v-if="item.backToFirst">
修改
</a-button>
<a-popconfirm
v-if="!item.ended"
title="是否终止此流程?"
ok-text="是"
cancel-text="否"
@confirm="endThis(item.instanceId)"
@cancel="cancel"
>
<a-popconfirm v-if="!item.ended" title="是否终止此流程?" ok-text="" cancel-text=""
@confirm="endThis(item.instanceId)" @cancel="cancel">
<a-button type="primary" danger style="margin-left: 10px">
流程终止
</a-button>
@ -84,10 +72,9 @@
</div>
<div class="box" v-if="item.list.length > 0">
<div class="ability" v-for="val in item.list" :key="val.id">
<div
class="left"
:class="
<div class="ability" v-for="val in item.list" :key="val.id"
:class="item.approveStatus === '通过' ? 'clickCursor' : ''">
<div class="left" :class="
val.type == '应用资源'
? 'yyzy'
: val.infoList.filter(
@ -107,8 +94,7 @@
)[0].attrValue == '业务组件'
? 'ywzj'
: 'yyzy'
"
></div>
"></div>
<div class="right">
<div class="ability-top">
<div class="name">
@ -148,6 +134,17 @@
申请结果{{
item.ended ? item.approveStatus || '审核完成' : '审核中'
}}
<a-button v-if="
item.approveStatus === '通过' &&
val.infoList.filter(
(item) => item.attrType == '上传附件'
)[0]
" @click.stop="downloadFile(item, '附件下载')" class="DownloadAttachment">
附件下载
</a-button>
<a-button v-if="item.approveStatus === '通过'" @click.stop="switchFunction(item)">
查看详情
</a-button>
</div>
</div>
</div>
@ -162,6 +159,11 @@
<span class="channelName">{{ val.channelName }}</span>
<span class="type">基础设施</span>
</div>
<a-button type="primary" v-if="item.approveStatus == '通过' && whoShow1.itShowXiHaiAn"
@click.stop="openVideo(val)">
视频预览
</a-button>
</div>
<div class="ability-bottom">
<div class="dec2">位置{{ val.nodeName }}</div>
@ -174,7 +176,7 @@
';' +
'视频流地址:' +
backUrl +
'resource/hls/getHls/?channelId=' +
'resource/hls/getHls/?key=' +
val.channelId
}}
</div>
@ -184,19 +186,71 @@
</div>
</div>
</div>
<!-- 单个预览弹窗 -->
<a-modal wrapClassName="single-preview-modal" v-model:visible="visible" title="视频预览" :width="960" destroyOnClose>
<template #footer></template>
<div style="width: 100%; display: flex; justify-content: center">
<div style="width: 100%; height: 100%;position: relative">
<!-- 预览视频--遮罩 -->
<div class="waterMark waterMark-left-top">{{userInfo.usernameShow}}</div>
<div class="waterMark waterMark-right-top">{{userInfo.realNameShow}}</div>
<div class="waterMark waterMark-left-bottom">{{userInfo.usernameShow}}</div>
<div class="waterMark waterMark-right-bottom">{{userInfo.realNameShow}}</div>
<vue3VideoPlay v-bind="options" />
</div>
</div>
</a-modal>
</div>
</template>
<script setup>
import { ref, defineProps, reactive } from 'vue'
import { ref, defineProps, reactive, onMounted } from 'vue'
import mybus from '@/myplugins/mybus'
import { message } from 'ant-design-vue'
import { endProcess, getApplyForm } from '@/api/personalCenter.js'
import { useRouter } from 'vue-router'
import {
getStreamByChannelCode,
} from '@/api/videoSurveillance'
import {
getUser,
} from '@/api/home'
const router = useRouter()
const backUrl = ref(window.SITE_CONFIG.apiURL + '/')
const props = defineProps({
refObj: { type: Object, default: null },
})
const whoShow1 = ref(whoShow)
let visible = ref(false)
const options = reactive({
width: '912px', //
height: '513px', //
color: '#409eff', //
title: '', //
src: '', //
type: 'm3u8', //
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 dept = reactive({})
// eslint-disable-next-line no-undef
if (infrastructure) {
@ -313,6 +367,91 @@
}
}
}
const switchFunction = (data) => {
if (data.approveStatus === '通过') {
let id = data.list[0].id
const applypage = router.resolve({
path: '/details', //
query: {
id: id,
},
})
window.open(applypage.href, '_blank')
}
}
const downloadFile = (data, name) => {
let path = data.list[0].infoList.filter(
(item) => item.attrType === '上传附件'
)[0].attrValue
console.log(path, 'obj')
const xhr = new XMLHttpRequest()
xhr.open('get', path)
xhr.responseType = 'blob'
xhr.send()
xhr.onload = function () {
if (this.status === 200 || this.status === 304) {
// IE10downloadmsSaveOrOpenBlobIE10msSaveOrOpenBlob
if ('msSaveOrOpenBlob' in navigator) {
navigator.msSaveOrOpenBlob(this.response, name)
return
}
// const blob = new Blob([this.response], { type: xhr.getResponseHeader('Content-Type') });
// const url = URL.createObjectURL(blob);
const url = URL.createObjectURL(this.response)
const a = document.createElement('a')
a.style.display = 'none'
a.href = url
a.download = name
document.body.appendChild(a)
a.click()
document.body.removeChild(a)
URL.revokeObjectURL(url)
}
}
}
//
const openVideo = (item) => {
console.log('打开视频', item)
if (item && item.status != 1) {
return message.error('当前视频离线不可预览!')
}
const param = {
key: item.cameraId,
}
getStreamByChannelCode(param).then((res) => {
console.log('视频预览------------>', res);
console.log(res)
visible.value = true
options.src = res.data.data || ''
}).catch(err => {
message.error(err)
})
// --
// visible.value = true
// options.src = 'http://playertest.longtailvideo.com/adaptive/bipbop/gear4/prog_index.m3u8'
}
onMounted(() => {
handleUser()
})
//
const userInfo = ref(null)
const handleUser = () => {
getUser().then(res => {
console.log('res-----获取用户信息------->', res);
if (res.data.code != 0) {
return message.warning(res.data.msg)
}
userInfo.value = res.data.data || {}
userInfo.value.usernameShow = '西海岸能力超市' + (userInfo.value.deptName || '') + (userInfo.value.username || '');
userInfo.value.realNameShow = '西海岸能力超市' + (userInfo.value.deptName || '') + (userInfo.value.realName || '');
}).catch(err => {
message.warning(err)
})
}
</script>
<style lang="less" scoped>
.title {
@ -323,17 +462,22 @@
padding-left: 0.1rem;
border-left: 0.06rem #0058e1 solid;
}
.top {
margin-bottom: 0.1rem;
.main {
background: #eee;
padding: 0.2rem 0.2rem 0.1rem;
p {
display: flex;
justify-content: space-between;
&>span {
width: 100%;
}
.enclosure {
width: 95%;
padding: 0.05rem 0.1rem;
@ -342,11 +486,13 @@
justify-content: space-between;
margin-top: 0.05rem;
}
.btn:hover {
color: #0058e1;
cursor: pointer;
}
}
.item {
span {
width: 2.5rem;
@ -354,16 +500,19 @@
}
}
}
.bottom {
.main {
.item {
border-top: 1px #eee solid;
.deptName {
color: #0058e1;
font-size: 0.16rem;
margin-top: 0.1rem;
display: flex;
align-items: center;
.img {
width: 0.05rem;
height: 0.05rem;
@ -372,16 +521,20 @@
margin-right: 0.1rem;
}
}
.oddNumbers {
margin: 0.1rem 0 0 0.15rem;
}
.box {
margin-left: 0.1rem;
.ability {
height: 1.3rem;
display: flex;
border-bottom: 1px #eee solid;
padding: 0.1rem 0;
.left {
display: inline-block;
width: 1.1rem;
@ -395,6 +548,7 @@
background: url('~@/assets/home/sxt_square.png') no-repeat;
background-size: 100%;
}
.yyzy {
background: url('~@/assets/home/yyzy_square.png') no-repeat;
background-size: 100%;
@ -419,6 +573,7 @@
background: url('~@/assets/home/ywzj_square.png') no-repeat;
background-size: 100%;
}
.btn {
cursor: pointer;
color: #0087ff;
@ -427,18 +582,22 @@
border: 1px #0087ff solid;
border-radius: 0.2rem;
}
.right {
flex: 1;
margin-left: 0.15rem;
.ability-top {
width: 100%;
display: flex;
justify-content: space-between;
align-items: center;
.name {
width: 6rem;
height: 0.2rem;
display: flex;
.channelName {
max-width: 5rem;
height: 0.2rem;
@ -449,6 +608,7 @@
-webkit-box-orient: vertical;
word-break: break-all;
}
.type {
background: #0087ff;
color: #fff;
@ -459,8 +619,10 @@
}
}
}
.ability-bottom {
margin-top: 0.15rem;
// display: flex;
// justify-content: space-between;
.dec {
@ -473,6 +635,7 @@
-webkit-box-orient: vertical;
word-break: break-all;
}
.dec2 {
width: 7rem;
height: 0.22rem;
@ -483,15 +646,92 @@
-webkit-box-orient: vertical;
word-break: break-all;
}
// .result:hover {
// color: #0058e1;
// cursor: pointer;
// }
.result {
position: relative;
}
}
}
.DownloadAttachment {
position: absolute;
right: 10px;
top: -150px;
}
.DownloadAttachment2 {
position: absolute;
right: 10px;
top: -110px;
}
}
.clickCursor {
cursor: pointer;
}
}
}
}
}
.single-preview-modal {
.ant-modal-header {
background: url(~@/assets/home/video-background.png) no-repeat;
background-size: cover;
}
.ant-modal-title {
font-size: 0.16rem;
font-weight: 500;
color: #ffffff;
}
.anticon {
color: #ffffff;
}
}
//
.waterMark-left-top {
left: 50px;
top: 100px;
text-align: left;
}
//
.waterMark-right-top {
right: 50px;
top: 100px;
text-align: right;
}
//
.waterMark-left-bottom {
left: 50px;
bottom: 100px;
text-align: left;
}
//
.waterMark-right-bottom {
right: 50px;
bottom: 100px;
text-align: right;
}
.waterMark {
position: absolute;
z-index: 99999999;
color: #0058e1;
font-size: 22px;
font-weight: bold;
opacity: 0.4;
transform: rotate(-25deg);
width: 470px
}
</style>

View File

@ -1,24 +1,12 @@
<template>
<div class="form-container">
<AbilityApplication
:refObj="refObj"
v-if="showType === '能力申请'"
></AbilityApplication>
<PutOnTheShelf
:refObj="refObj"
v-else-if="showType === '能力上架'"
></PutOnTheShelf>
<OffTheShelf
:refObj="refObj"
v-else-if="showType === '能力下架'"
></OffTheShelf>
<DeviceApplyDetail v-if="showType === '设备申请'" :refObj="refObj"></DeviceApplyDetail>
<div class="form-container" v-else>
<AbilityApplication :refObj="refObj" v-if="showType === '能力申请'"></AbilityApplication>
<PutOnTheShelf :refObj="refObj" v-else-if="showType === '能力上架'"></PutOnTheShelf>
<OffTheShelf :refObj="refObj" v-else-if="showType === '能力下架'"></OffTheShelf>
<Demand :refObj="refObj" v-else-if="showType === '能力需求'"></Demand>
<Comment :refObj="refObj" v-else-if="showType === '需求评论'"></Comment>
<OtherApplications :refObj="refObj" v-else></OtherApplications>
<!-- <div class="title">流程图</div>
<div>
<img :src="getResourceURL()" alt="" />
</div> -->
<div>
<div class="title">审批详情</div>
<template v-for="item in dataSource.data" :key="item">
@ -40,6 +28,7 @@
import OffTheShelf from './OffTheShelf.vue'
import Demand from './Demand.vue'
import Comment from './Comment.vue'
import DeviceApplyDetail from './DeviceApplyDetail.vue'
import OtherApplications from '@/views/personalCenter/components/OtherApplications '
import { onMounted, reactive, defineProps, ref } from 'vue'
import Cookies from 'js-cookie'
@ -69,6 +58,8 @@
showType.value = props.showType
//
const dataSource = reactive({ data: [] })
console.log('refObj------------>', refObj);
// console.log(props.refObj, '---------------------------------------')
const downloadFile = (path, name) => {
@ -255,6 +246,7 @@
height: 6rem;
overflow-y: scroll;
padding: 20px 20px 30px 20px;
.title {
font-size: 18px;
color: #000;
@ -265,6 +257,7 @@
border-left: 6px #0058e1 solid;
}
}
:deep(.ant-table-thead)>tr>.ant-table-cell {
background: #0087ff;
color: #fff;
@ -272,6 +265,7 @@
text-align: center;
font-size: 16px;
}
:deep(.ant-table-tbody)>tr>.ant-table-cell:nth-child(5) {
// width: 110px;
// display: inline-block;
@ -279,6 +273,7 @@
// overflow: hidden;
// text-overflow: ellipsis;
}
.oddNumbers {
margin-bottom: 0.05rem;
}

View File

@ -0,0 +1,43 @@
<!--
* @Description: 我的申请 设备申请 查看详情
-->
<template>
<div class="device-detail-box">
<div v-for="(db, key) in wrjData" :key="key">
<template v-if="typeof db == 'object'">
<div style="
font-size: 20px;
font-weight: 600;
margin: 10px 0;
text-align: center;
">
{{ db.attrType || '--' }}
</div>
<template v-if="db.attrValue">
<div style="padding: 0 30px" v-for="(value, key2) in JSON.parse(db.attrValue)" :key="value">
{{ key2 + '' + value }}
</div>
</template>
</template>
</div>
</div>
</template>
<script setup>
import { ref, defineProps, watch } from 'vue'
const props = defineProps({
refObj: { type: Object, default: null },
})
const wrjData = ref([])
wrjData.value = props.refObj.deviceAttrDTOList || []
watch(() => props.refObj, (val) => {
wrjData.value = val.deviceAttrDTOList || []
}, { immediate: true, deep: true })
</script>
<style lang="less" scoped>
.device-detail-box {
height: 6rem;
overflow-y: auto;
}
</style>

View File

@ -1,23 +1,6 @@
<template>
<div class="on-the-right-side-of-the-list">
<div class="title" style="margin-bottom: 0.2rem">我的申请</div>
<!-- <div class="sousuokuang">
<a-input-search
v-model:value="name"
placeholder="请输入关键词"
enter-button="搜索"
size="large"
@change="onSearch"
@search="getApplyList(name)"
/>
<a-button
type="primary"
style="width: 90px; height: 36px; margin-left: 10px"
@click="replacement"
>
重置
</a-button>
</div> -->
<div class="tab" style="margin-bottom: 0.1rem">
<span>类型</span>
<div
@ -33,7 +16,7 @@
<span>申请状态</span>
<div
:class="tabIndex == index ? 'tabclass' : ' '"
@click="tabqiehuan(item, index)"
@click="changeApplyState(item, index)"
v-for="(item, index) in tabList"
:key="index"
>
@ -64,140 +47,36 @@
{{ item.cameraList ? item.system : item.title }}
</template>
<div class="content-body-title">
<!-- <span
v-if="item.cameraList && item.ended"
@click="showVideoList(item)"
>
名称{{ item.cameraList ? item.system : item.title }}
</span> -->
<span>
名称{{ item.cameraList ? item.system : item.title }}
</span>
<div></div>
</div>
</a-tooltip>
<!-- <div class="content-body-content">
<p class="content-body-content-son">
流程类型{{ item.processDefinitionName }}
</p>
</div> -->
<div class="content-body-content">
<p class="content-body-content-son">
<p class="content-body-content-son" v-if="typeName !== '设备申请'">
审核结果{{ item.ended ? '审核完成' : '审核中' }}
</p>
<p class="content-body-content-son" v-else>
审核结果{{ item.state === 0 ? '审核中' : '审核完成' }}
</p>
</div>
<!-- <div class="content-body-content" v-if="item.currentTaskList">
<p class="content-body-content-son" v-if="!item.backToFirst">
当前节点{{ item.currentTaskList[0].taskName }}
</p>
</div> -->
<!-- <div>
<p
class="content-body-content-son"
v-if="item.name === '申请摄像头列表'"
>
<span>
申请结果{{
'列表地址:' +
backUrl +
'resource/getApplyCameraList/' +
item.processInstanceId +
';' +
'视频流地址:' +
backUrl +
'/resource/hls/getHls/?channelId='
}}
</span>
<a-button
type="primary"
size="small"
@click="
copyComment(
'列表地址:' +
backUrl +
'resource/getApplyCameraList/' +
item.processInstanceId +
';' +
'视频流地址:' +
backUrl +
'/resource/hls/getHls/?channelId='
)
"
>
复制
</a-button>
</p>
<template v-else>
<p
class="content-body-content-son"
v-if="item.approveStatus == '通过'"
>
<span>申请结果{{ item.comment || '暂无' }}</span>
<a-button
v-if="item.comment"
type="primary"
size="small"
@click="copyComment(item.comment)"
>
复制
</a-button>
</p>
</template>
</div> -->
<!-- <div class="content-body-title"></div>
<div class="content-body-content">
<p class="content-body-content-son"></p>
<div></div>
</div> -->
<!-- <div class="content-body-bottom" v-if="item.currentTaskList">
<div>申请日期{{ item.currentTaskList[0].createTime }}</div>
<div>审批人{{ item.currentTaskList[0].assigneeName }}</div>
</div> -->
<div class="content-body-bottom">
<div>申请日期{{ item.createDate || item.startTime }}</div>
<div></div>
</div>
<div class="button-box">
<div
class="button"
v-if="typeName == '设备申请' && phoneSate.includes(item.state)"
@click="showPhoneModal(item)"
>
联系方式
</div>
<div class="button" @click="showDetail(item)">查看详情</div>
<div class="button" @click="showAdd(item)" v-if="item.backToFirst">
修改
</div>
<!-- <div
v-if="
!(
(item.processDefinitionName == '能力需求申请' ||
item.processDefinitionName == '能力资源上架') &&
item.ended == false
)
"
v-show="
item.resourceStatusTip == '正常' &&
item.ended &&
item.processDefinitionName !== '能力申请'
"
class="button button-details"
@click="
viewDetail(
item.processDefinitionName,
item.resourceId,
item.ended,
item.businessKey
)
"
>
查看详情
</div> -->
<!-- <div
class="button button-state"
:class="{
buttonAgree: item.ended,
backToFirst: item.backToFirst,
}"
>
{{
item.ended ? '审核完成' : item.backToFirst ? '被驳回' : '审核中'
}}
</div> -->
<svg
t="1652233950228"
class="icon"
@ -300,20 +179,29 @@
</a-table>
</a-modal>
</div>
<!-- 联系方式弹框 -->
<a-modal
v-model:visible="phoneVisible"
title="提示"
@ok="phoneVisible = false"
>
<!-- 工业信息化局那个号电话配这个号199 6399 0996 -->
<p>请联系工业信息化局电话199 6399 0996</p>
</a-modal>
</template>
<script setup>
// import qs from 'qs'
import { onMounted, reactive, ref, onBeforeUnmount } from 'vue'
import { onMounted, reactive, ref, onBeforeUnmount, h } from 'vue'
import {
getMyProcessInstancePage,
// getTaskHandleDetailInfo,
getTabilityapplication,
getByApplyFlag,
nengliziyuanshangjiaapply,
getDemandForm,
demandComment,
// getProcDefBizRoute,
deviceApplylist,
getDeviceDetail,
} from '@/api/personalCenter'
import {
updateRes,
@ -326,21 +214,36 @@
import { message } from 'ant-design-vue'
import ApplyDetails from '@/views/personalCenter/components/ApplyDetails'
import mybus from '@/myplugins/mybus'
import * as moment from 'moment'
const router = useRouter()
let typeList = ref([
'能力申请',
'能力评价',
'能力上架',
'能力下架',
'能力需求',
'需求评论',
'能力评价',
])
// 西-
let isXiHaiAn = whoShow.itShowXiHaiAn
const phoneSate = ref([2, 3])
if (isXiHaiAn) {
typeList.value.push('设备申请')
}
const typeStrObj = {
能力上架: 'resourcemountapply',
能力下架: 'resourcundercarriageapply',
能力需求: 'abilitydemandapply',
需求评论: 'comment_review',
}
let tabList = ref(['全部', '审核中', '审核完成'])
const contentList = reactive({ data: [] })
// const contentListClone = reactive({ data: [] })
// let contentListLength = contentList.length
let tabIndex = ref(0)
let typeIndex = ref(0)
let typeName = ref(typeList.value[0])
const videoVisible = ref(false)
const numFlag = ref(true)
const columns = ref([
@ -350,8 +253,9 @@
},
])
const xVideoList = ref([])
function tabqiehuan(item, index) {
// debugger
//
function changeApplyState(item, index) {
tabIndex.value = index
switch (item) {
case '审核中':
@ -373,14 +277,15 @@
}
//
const changeType = (item, index) => {
console.log('item, index-----选择类型------->', item, index)
numFlag.value = true
num.value = []
showType.value = ''
console.log(item, index)
tabIndex.value = 0
ended.value = ''
page.value = 1
typeIndex.value = index
typeName.value = item
getApplyList()
}
let name = ref('')
@ -396,13 +301,22 @@
const taskId = ref('')
const backUrl = ref(window.SITE_CONFIG.apiURL + '/')
const refObj = ref({})
const showDetail = (item) => {
console.log('showDetail', item)
// getProcDefBizRoute(item.processDefinitionId)
if (typeIndex.value == 0 && item.applyFlag) {
// 西-
if (isXiHaiAn) {
if (item.expireDate) {
let diff = moment().diff(moment(item.expireDate), 'seconds')
if (diff > 0) {
return message.error('当前申请已过期!')
}
}
}
if (typeName.value == '能力申请' && item.applyFlag) {
getByApplyFlag(item.applyFlag).then((res) => {
if (res.data.code == 0) {
refObj.value = res.data.data
detailsVisible.value = true
processDefinitionName.value = item.processDefinitionName
businessKey.value = item.businessKey
@ -412,7 +326,23 @@
message.error('数据请求失败!')
}
})
} else if (typeIndex.value !== 1) {
} else if (typeName.value == '设备申请') {
getDeviceDetailInfo(item.deviceId)
.then((res) => {
if (res.data.code == 0) {
refObj.value = res.data.data
detailsVisible.value = true
processDefinitionName.value = item.processDefinitionName
// businessKey.value = item.businessKey
// processInstanceId.value = item.processInstanceId
// resourceId.value = item.resourceId
}
})
.catch((err) => {})
} else if (
Object.keys(typeStrObj).includes(typeName.value) ||
typeName.value == '能力评价'
) {
refObj.value = item
detailsVisible.value = true
processDefinitionName.value = item.processDefinitionName
@ -446,10 +376,6 @@
oInput.remove()
}
const showAdd = (item) => {
// resourcemountapply
// resourcundercarriageapply
// abilitydemandapply
// abilityprocess
if (item.processDefinitionKey == 'resourcemountapply') {
const data = {
id: item.resourceId,
@ -582,7 +508,7 @@
if (ended.value === '') {
delete params.ended
}
if (typeIndex.value == 0) {
if (typeName.value == '能力申请') {
getTabilityapplication(params).then((res) => {
contentList.data = []
console.log('获取我的申请===============>', res.data.data)
@ -591,25 +517,32 @@
showType.value = '能力申请'
initNum2()
})
} else if (typeIndex.value !== 1) {
switch (typeIndex.value) {
case 2:
params.processDefinitionKey = 'resourcemountapply'
processDefinitionKey.value = 'resourcemountapply'
break
case 3:
params.processDefinitionKey = 'resourcundercarriageapply'
processDefinitionKey.value = 'resourcundercarriageapply'
break
case 4:
params.processDefinitionKey = 'abilitydemandapply'
processDefinitionKey.value = 'abilitydemandapply'
break
case 5:
params.processDefinitionKey = 'comment_review'
processDefinitionKey.value = 'comment_review'
break
} else if (typeName.value == '能力评价') {
contentList.data = []
num.value = []
showType.value = ''
} else if (typeName.value == '设备申请') {
let _state =
ended.value === ''
? '全部'
: ended.value === true
? '审核完成'
: '审核中'
getDeviceApply(_state)
.then((res) => {
if (res.data.code == 0) {
contentList.data = []
contentList.data = res.data.data.list || []
total.value = res.data.data.total
showType.value = '设备申请'
//
getDeviceNum()
}
})
.catch((err) => {})
} else if (Object.keys(typeStrObj).includes(typeName.value)) {
processDefinitionKey.value = typeStrObj[typeName.value]
params.processDefinitionKey = processDefinitionKey.value
getMyProcessInstancePage(params).then((res) => {
contentList.data = []
// initNum(name.value)
@ -637,7 +570,6 @@
showType.value = '能力下架'
})
})
// params.processDefinitionKey = 'resourcundercarriageapply'
break
case 4:
contentList.data.map((val) => {
@ -649,7 +581,6 @@
showType.value = '能力需求'
})
})
// params.processDefinitionKey = 'abilitydemandapply'
break
case 5:
contentList.data.map((val) => {
@ -661,31 +592,8 @@
showType.value = '需求评论'
})
})
// params.processDefinitionKey = 'comment_review'
break
}
// if (contentList.data && contentList.data.length > 0) {
// contentList.data.map((item) => {
// const param = {
// page: 1,
// limit: 4,
// processInstanceId: item.processInstanceId,
// }
// getTaskHandleDetailInfo(qs.stringify(param)).then((res) => {
// console.log('', res.data.data, res.data.data[0].comment)
// const result = res.data.data
// if (result && result.length > 2) {
// item.comment =
// result[0].comment.length > result[1].comment.length
// ? result[0].comment
// : result[1].comment
// } else {
// item.comment = result[0].comment
// }
// })
// return item
// })
// }
})
} else {
contentList.data = []
@ -756,6 +664,67 @@
}
})
}
// 西 todo
const getDeviceApply = (state) => {
return new Promise((resolve, reject) => {
let _data = {
page: page.value,
limit: 4,
state,
}
deviceApplylist(_data)
.then((res) => {
resolve(res)
console.log('res----设备申请-------->', res)
})
.catch((err) => {
reject(err)
console.log('err------------>', err)
})
})
}
// 西--
const getDeviceDetailInfo = (deviceId) => {
return new Promise((resolve, reject) => {
getDeviceDetail(deviceId)
.then((res) => {
resolve(res)
console.log('res----查询详情-------->', res)
})
.catch((err) => {
reject(err)
console.log('err------------>', err)
})
})
}
// 西-,
const getDeviceNum = () => {
if (!numFlag.value) {
return
}
num.value = []
Promise.all([getDeviceApply('审核中'), getDeviceApply('审核完成')])
.then((res) => {
console.log('res-----数量------->', res)
let unfinished = res[0] && res[0].data && res[0].data.data
let finished = res[1] && res[1].data && res[1].data.data
num.value.unfinished = unfinished.total || ''
num.value.finished = finished.total || ''
numFlag.value = false
})
.catch((err) => {
console.log('err------------>', err)
})
}
const phoneVisible = ref(false)
const showPhoneModal = () => {
phoneVisible.value = true
}
mybus.on('closeModal', (obj) => {
detailsVisible.value = false
changeType(obj.type, obj.index)
@ -781,17 +750,21 @@
flex-direction: column;
font-size: 16px;
justify-content: left;
.title {
font-size: 20px;
color: #000000;
font-family: 'Alibaba PuHuiTi';
font-weight: 500;
}
.sousuokuang {
margin: 20px 0px 21px 0px;
.ant-input-search {
max-width: 490px;
}
:deep(.ant-input) {
width: 400px;
height: 36px;
@ -799,9 +772,11 @@
color: #b2b2b2;
background: #f5f5f5;
}
:deep(.ant-input-group-addon) {
display: inline-block;
margin-left: 10px;
.ant-input-search-button {
width: 80px;
height: 36px;
@ -810,10 +785,12 @@
}
}
}
.tab {
display: flex;
font-size: 14px;
color: #999999;
div {
// width: 70px;
padding: 5px 10px;
@ -826,14 +803,17 @@
color: #666666;
cursor: pointer;
}
.tabclass {
border: 1px solid #0087ff;
color: #0087ff;
}
}
.content {
padding-right: 10px;
height: 510px;
.content-body {
padding-bottom: 20px;
padding-top: 20px;
@ -841,6 +821,7 @@
height: 150px;
border-bottom: #cccccc 1px solid;
position: relative;
.content-body-title {
min-width: 100px;
max-width: 900px;
@ -853,6 +834,7 @@
text-overflow: ellipsis;
white-space: nowrap;
}
.content-body-content {
margin-top: 10px;
margin-bottom: 10px;
@ -860,6 +842,7 @@
/* width: 720px; */
display: inline-block;
}
.content-body-content-son {
line-height: 16px;
font-size: 12px;
@ -872,6 +855,7 @@
// -webkit-box-orient: vertical;
display: flex;
color: #999999;
span {
overflow: hidden;
text-overflow: ellipsis;
@ -883,16 +867,19 @@
word-break: break-all;
}
}
.content-body-bottom {
display: flex;
color: #cccccc;
font-size: 12px;
div:first-child {
margin-right: 30px;
}
}
}
}
.bottom {
position: absolute;
bottom: 30px;
@ -919,13 +906,16 @@
line-height: 30px;
cursor: pointer;
}
.buttonAgree {
background-color: #49c988;
}
.backToFirst {
background-color: rgb(214, 91, 91);
}
}
:deep(.ant-badge-count) {
top: -5px;
right: -10px;

View File

@ -2,58 +2,32 @@
<div class="on-the-right-side-of-the-list">
<div class="title">我的发布</div>
<div class="sousuokuang">
<a-input-search
v-model:value="name"
placeholder="请输入关键词"
enter-button="搜索"
size="large"
@change="onSearch"
@search="getApplyList(tabname)"
/>
<a-button
type="primary"
style="width: 0.9rem; height: 0.36rem; margin-left: 0.1rem"
@click="showModal2"
>
<a-input-search v-model:value="name" placeholder="请输入关键词" enter-button="搜索" size="large" @change="onSearch"
@search="getApplyList(tabname)" />
<a-button type="primary" style="width: 0.9rem; height: 0.36rem; margin-left: 0.1rem" @click="showModal2">
能力上架
</a-button>
<a-button
type="primary"
style="width: 0.9rem; height: 0.36rem; margin-left: 0.1rem"
@click="replacement"
>
<a-button type="primary" style="width: 0.9rem; height: 0.36rem; margin-left: 0.1rem" @click="replacement">
重置
</a-button>
</div>
<div class="tab">
<span>能力类型</span>
<div
:class="tabIndex == index ? 'tabclass' : ' '"
@click="tabqiehuan(item, index)"
v-for="(item, index) in tabList"
:key="index"
>
<div :class="tabIndex == index ? 'tabclass' : ' '" @click="tabqiehuan(item, index)"
v-for="(item, index) in tabList" :key="index">
{{ item }}
</div>
</div>
<div class="tab" style="margin-top: 0.1rem">
<span>能力状态</span>
<div
:class="tabIndex2 == index ? 'tabclass' : ' '"
@click="tabqiehuan2(item, index)"
v-for="(item, index) in tabList2"
:key="index"
>
<div :class="tabIndex2 == index ? 'tabclass' : ' '" @click="tabqiehuan2(item, index)"
v-for="(item, index) in tabList2" :key="index">
{{ item }}
</div>
</div>
<div v-if="dataList.data.length > 0">
<div class="content">
<div
class="content-body"
v-for="item in dataList.data"
:key="item.index"
>
<div class="content-body" v-for="item in dataList.data" :key="item.index">
<div class="content-body-title" v-if="item.currentTaskList">
<!-- {{ item.currentTaskList[0].taskName }} -->
</div>
@ -71,57 +45,27 @@
<!-- <div></div> -->
</div>
<div class="button">
<div
@click="showModal(item)"
v-if="item.delFlag != 2"
:class="item.delFlag != 0 ? 'del' : ''"
>
<div @click="showModal(item)" v-if="item.delFlag != 2" :class="item.delFlag != 0 ? 'del' : ''">
能力下架
</div>
<div
@click="showDetail(item)"
v-if="item.delFlag != 2"
:class="item.delFlag != 0 ? 'del' : ''"
>
<div @click="showDetail(item)" v-if="item.delFlag != 2" :class="item.delFlag != 0 ? 'del' : ''">
查看详情
</div>
<svg
t="1652233950228"
class="icon"
viewBox="0 0 1024 1024"
version="1.1"
xmlns="http://www.w3.org/2000/svg"
p-id="5970"
data-spm-anchor-id="a313x.7781069.0.i8"
width="80"
height="80"
v-if="item.delFlag == 4 || item.delFlag == 5"
style="position: absolute; top: 0.2rem; left: 0.1rem"
>
<svg t="1652233950228" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg"
p-id="5970" data-spm-anchor-id="a313x.7781069.0.i8" width="80" height="80"
v-if="item.delFlag == 4 || item.delFlag == 5" 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"
fill="#515151"
opacity=".5"
p-id="5971"
></path>
fill="#515151" opacity=".5" p-id="5971"></path>
<path
d="M898.12053 289.2C775.02053 76 502.42053 2.9 289.22053 126 76.02053 249.1 3.02053 521.6 126.02053 734.8 249.12053 948 521.62053 1021.1 734.82053 898 947.92053 774.9 1021.02053 502.4 898.12053 289.2zM731.62053 892.8C521.32053 1014.3 252.42053 942.2 131.02053 731.9 9.52053 521.6 81.62053 252.7 291.92053 131.3 502.12053 9.9 771.02053 81.8 892.42053 292c121.5 210.3 49.5 479.3-160.8 600.8z"
fill="#515151"
opacity=".5"
p-id="5972"
></path>
fill="#515151" opacity=".5" p-id="5972"></path>
<path
d="M323.62053 176.8c3.6-2 6 0.8 8.8 2.8 6 4.4 12.4 8.8 18.8 12.8 7.2-2.4 14.4-5.1 21.6-7.7 3.6-1.2 6-2.8 8.8 0.4 2.4 2.8 0.4 6.4-0.4 8.8-2 6.8-3.6 13.6-5.6 20.8 4.8 6 10 11.6 15.2 17.6 2.4 2.8 4.4 5.6 2.8 8.4-1.2 2.8-5.6 2.4-7.7 2.4l-22.4 0.8c-4.4 6.8-8.4 13.6-12.8 20-1.6 2.4-4 5.1-7.2 4-2.4-1.9-3.9-4.7-4.4-7.7l-7.2-20.5-25.2-6.4c-2.3-1.2-3.6-3.8-3.2-6.4 1.3-1.8 2.9-3.3 4.8-4.4 4-3.2 7.7-6.8 11.6-10 1.9-1.3 3.6-2.7 5.1-4.4-0.4-6.8-1.2-13.6-1.6-20.5-0.7-2.9-0.9-5.9-0.4-8.8-0.7-0.8-0.3-1.6 0.6-2zM200.72053 289.2c3.6-2 6 0.8 8.8 2.8 6.4 4.4 12.4 8.4 18.8 12.8 7.2-2.4 14.4-5.1 21.6-7.7 3.6-1.2 6-2.8 8.8 0.4 2.4 2.8 0.4 6.4-0.4 8.8-2 6.8-3.6 13.6-5.6 20.8 4.8 6 10 11.6 14.8 17.6 2.4 2.8 4.4 5.6 2.8 8.4-1.2 2.4-5.6 2.4-7.7 2.4l-22.4 0.8c-4.4 6.8-8.8 13.6-12.8 20-1.6 2.4-4 5.1-7.2 4-2.2-2-3.8-4.7-4.4-7.7l-7.2-20.5c-8.4-2-16.8-4.4-25.2-6.4-2.3-1.2-3.6-3.8-3.2-6.4 1.3-1.8 2.9-3.3 4.8-4.4 3.6-3.2 7.7-6.8 11.6-10 1.9-1.3 3.6-2.7 5.1-4.4-0.4-6.8-1.2-13.6-1.6-20.5-0.7-2.9-0.9-5.9-0.4-8.8-0.4-1.2 0-1.6 0.8-2.4l0.2 0.4z m276.6-159.6c3.6-2 6 0.8 8.8 2.8 6.4 4.4 12.4 8.4 18.8 12.8 7.2-2.4 14.4-5.1 21.6-7.7 3.6-1.2 6-2.8 8.8 0.4 2.4 2.8 0.4 6.4-0.4 8.8-2 6.8-3.6 14-5.6 20.8 4.8 6 10 12 15.2 17.6 2.4 2.8 4.4 5.6 2.8 8.4-1.2 2.8-5.6 2.4-7.7 2.4l-22.4 0.8c-4.4 6.8-8.8 13.6-12.8 20-1.6 2.4-4 5.1-7.2 4-2.2-2-3.8-4.7-4.4-7.7l-7.2-20.5-25.2-6.4c-2.3-1.2-3.6-3.8-3.2-6.4 1.3-1.8 2.9-3.3 4.8-4.4 4-3.2 7.7-6.8 11.6-10 1.9-1.3 3.6-2.7 5.1-4.4-0.4-6.8-1.2-13.6-1.6-20.5-0.7-2.9-0.9-5.9-0.4-8.8-0.8-1.2-0.4-1.6 0.4-2.4l0.2 0.4z m141.9 29.6c3.6-2 6 0.8 8.8 2.8l18.8 12.8c7.2-2.4 14.4-5.1 21.6-7.7 3.6-1.2 6-2.8 8.8 0.4 2.4 2.8 0.4 6.4-0.4 8.8-2 6.8-3.6 14-5.6 20.8 4.8 6 10 12 15.2 17.6 2.4 2.8 4.4 5.6 2.8 8.4-1.2 2.8-5.6 2.4-7.7 2.4-7.7 0.4-15.2 0.8-22.4 0.8-4.4 6.8-8.4 13.2-12.8 20-1.6 2.4-4 5.1-7.2 4-2.4-1.9-3.9-4.7-4.4-7.7l-7.2-20.5c-8.4-2-16.8-4.4-25.2-6.4-2.3-1.2-3.6-3.8-3.2-6.4 1.3-1.8 2.9-3.3 4.8-4.4 4-3.2 7.7-6.8 11.6-10 1.9-1.3 3.6-2.7 5.1-4.4-0.4-6.8-1.2-13.6-1.6-20.5-0.7-2.9-0.9-5.9-0.4-8.8-0.5-1.2 0.2-1.6 0.6-2zM150.02053 430c3.6-2 6 0.8 8.8 2.8 6.4 4.4 12.4 8.4 18.8 12.8 7.2-2.4 14.4-5.1 21.6-7.7 3.6-1.2 6-2.8 8.8 0.4 2.4 2.8 0.4 6.4-0.4 8.8-2 6.8-4 14-5.6 20.8 4.8 6 10 11.6 15.2 17.6 2.4 2.8 4.4 5.6 2.8 8.4-1.2 2.8-5.6 2.4-7.7 2.4l-22.4 0.8c-4.4 6.8-8.8 13.6-12.8 20-1.6 2.4-4 5.1-7.2 4-2.2-2-3.8-4.7-4.4-7.7l-7.2-20.5-25.2-6.4c-2.3-1.2-3.6-3.8-3.2-6.4 1.3-1.8 2.9-3.3 4.8-4.4 3.6-3.2 7.7-6.8 11.6-10 1.9-1.3 3.6-2.7 5.1-4.4-0.4-6.8-1.2-13.6-1.6-20.5-0.7-2.9-0.9-5.9-0.4-8.8-0.7-0.8-0.3-1.5 0.6-2z m558.9 414.4c3.6-2.4 2.4-5.6 2-8.8l-1.6-22.4 17.2-14.8c2.8-2.4 5.1-4 4-7.7-1.2-3.2-5.6-3.6-7.7-4-6.8-2-14-3.6-20.8-5.6-2.8-7.2-5.1-14.4-7.7-21.6-1.2-3.6-2.8-6.4-5.6-6.8-2.8-0.4-4.8 3.6-5.6 5.1l-12 19.2-24 1.2c-2.8 0-6.8 0.8-6.8 4.4 0.5 3 2 5.7 4.4 7.7 4.8 5.6 9.2 11.2 14 16.4l-7.2 25.2c-0.3 2.7 1.4 5.2 4 6 2.2-0.1 4.4-0.7 6.4-1.6l14.4-4.8c2.1-0.8 4.2-1.5 6.4-2 5.6 4 11.2 7.7 16.8 11.6 2.2 2.1 4.8 3.6 7.7 4.4 0.5-1.1 0.8-1.1 1.6-1.1h0.1z m-158.8 50c3.6-2.4 2.4-5.6 2-8.8l-1.6-22.4 17.2-14.8c2.8-2.4 5.1-4 4-7.7-1.1-3.7-5.6-3.6-7.7-4-6.8-1.6-14-3.6-20.8-5.6l-7.7-22c-1.2-3.6-2.8-6.4-5.6-6.8-2.8-0.4-4.8 3.6-5.6 5.1l-12 19.2-24 1.2c-2.8 0-6.8 0.8-6.8 4.4 0.5 3 2 5.7 4.4 7.7 4.8 5.6 9.2 11.2 14 16.4l-7.2 25.2c-0.3 2.7 1.4 5.2 4 6 2.2-0.3 4.3-0.9 6.4-1.6l14.4-4.8c2-1 4.2-1.7 6.4-2 5.6 4 11.2 7.7 16.8 11.6 2.2 2.1 4.8 3.6 7.7 4.4 0.4-0.8 0.8-0.8 1.7-0.7z m276.5-159.6c3.6-2.4 2.4-5.6 2-8.8l-1.6-22.4 17.2-14.8c2.8-2.4 5.1-4 4-7.7-1.2-3.2-5.6-3.6-7.7-4-6.8-2-14-3.6-20.8-5.6-2.8-7.2-5.1-14.4-7.7-21.6-1.2-3.6-2.8-6.4-5.6-6.8s-4.8 3.6-5.6 5.1l-12 19.2-24 1.2c-2.8 0-6.8 0.8-6.8 4.4 0.5 3 2 5.7 4.4 7.7 4.8 5.6 9.2 11.2 14 16.4l-7.2 25.2c-0.3 2.7 1.4 5.2 4 6 2.2-0.2 4.4-0.7 6.4-1.6l14.4-4.8c2.1-0.8 4.2-1.5 6.4-2 5.6 4 11.2 7.7 16.8 11.6 2.2 2.1 4.8 3.6 7.7 4.4 0-0.8 0.8-1.2 1.6-1.2l0.1 0.1z m45.6-137.6c3.6-2.4 2.4-5.6 2-8.8l-1.6-22.4 17.2-14.8c2.8-2.4 5.1-4 4-7.7-1.2-3.2-5.6-3.6-7.7-4-6.8-1.6-14-3.6-20.8-5.6l-7.7-22c-1.2-3.6-2.8-6.4-5.6-6.8-2.8-0.4-4.8 3.6-5.6 5.1l-12 19.2-24 1.2c-2.8 0-6.8 0.8-6.8 4.4 0.5 3 2 5.7 4.4 7.7 4.8 5.6 9.2 11.2 14 16.4l-7.2 25.2c-0.3 2.7 1.4 5.2 4 6 2.2-0.3 4.3-0.9 6.4-1.6l14.4-4.8c2.1-0.8 4.2-1.5 6.4-2 5.6 4 11.2 7.7 16.8 11.6 2.2 2.1 4.8 3.6 7.7 4.4 0.2-0.7 0.6-0.7 1.4-0.7h0.3zM402.72053 868c3.6-2.4 2.4-5.6 2-8.8l-1.6-22.4 17.2-14.8c2.8-2.4 5.1-4 4-7.7-1.2-3.2-5.6-3.6-7.7-4-6.8-2-14-3.6-20.8-5.6-2.8-7.2-5.1-14.4-7.7-21.6-1.2-3.6-2.8-6.4-5.6-6.8-2.8-0.4-4.8 3.6-5.6 5.1l-12 19.2-24 1.2c-2.8 0-6.8 0.8-6.8 4.4 0.5 3 2 5.7 4.4 7.7 4.8 5.6 9.2 11.2 14 16.4l-7.2 25.2c-0.3 2.7 1.4 5.2 4 6 2.2-0.3 4.3-0.9 6.4-1.6l14.4-4.8c2.1-0.8 4.2-1.5 6.4-2 5.6 4 11.2 7.7 16.8 11.6 2.2 2.1 4.8 3.6 7.7 4.4 0.5-0.8 1-1.1 1.7-1.1z"
fill="#515151"
opacity=".5"
p-id="5973"
></path>
fill="#515151" opacity=".5" p-id="5973"></path>
<path
d="M386.42053 590.4l-43.8-75.9L207.02053 592.7l10.2 17.7L334.02053 543l23.4 40.4-90.5 52.2-13.5-23.4-18.7 10.8 53.1 92c9.1 15.8 21.2 19.5 36.4 10.7l98.8-57c6.2-3.6 11-9.3 13.4-16.1-1.4-15.9-6.2-31.2-14.2-45l-21.4 4.8c6.7 10.3 11 21.9 12.8 34-1 3.3-3.2 6-6.1 7.8l-88.3 51c-6.2 3.6-11.1 2.1-14.8-4.3l-27.3-47.4 109.3-63.1z m2.9-103.2l10.4 18.1 65.6-37.9 79.9 138.4 18.6-10.8-55.9-96.9c18.8-0.9 43.2-0.6 73 0.7l1.5-23.1c-29.8-0.3-58.4 0.4-86 2.6l-12.5-21.6 74.9-43.2-10.4-18.1-159.1 91.8zM669.52053 329l38.2 66.2 61.4-35.4-38.1-66.1-61.5 35.3z m72.4 24.2l-26.3 15.2-19-33 26.3-15.2 19 33zM599.02053 356.7l7.9 13.7-23.3 13.5 9.8 17 21.8-12.6c7.5 18.7 6.6 39.6-2.5 57.6l20.7 4.4c10.3-23.1 10.3-49.4 0-72.5l18.8-10.9c6 9.2 10.7 19.2 14.2 29.7 0.3 5-2.6 9.7-7.2 11.7-2.9 1.2-6.4 2.8-10.9 4.9l14.1 14.1c3.7-1.3 7.3-2.9 10.7-4.8 8.6-3.9 14.4-12.2 15.2-21.6-5.4-22.1-14.6-43-27.4-61.8l-36.1 20.8-7.9-13.7-17.9 10.5z m29.9 108.1l10 17.4 53.2-30.7c-7.8 23.7-20.6 45.4-37.5 63.6l20.6 11.1c18.6-24.2 30-53.1 33-83.4l29.8 51.5 18.4-10.7-29.8-51.5c27.4 11.5 57.2 16.3 86.9 14.1l3.5-23.5c-24.7 5.1-50.1 5-74.8-0.1l53.5-30.9-10-17.3-69.3 40-7.3-12.6-18.4 10.7L698.02053 425l-69.1 39.8z"
fill="#515151"
opacity=".5"
p-id="5974"
></path>
fill="#515151" opacity=".5" p-id="5974"></path>
</svg>
<!-- <div v-if="item.delFlag == 0" class="button-son">审核通过</div>
<div v-if="item.delFlag != 0">未审核</div> -->
@ -132,56 +76,24 @@
</div>
</div>
<div class="bottom">
<a-pagination
size="small"
:total="total"
show-size-changer
show-quick-jumper
@change="handleCurrentChange"
@showSizeChange="handlePageSizeChange"
/>
<a-pagination size="small" :total="total" show-size-changer show-quick-jumper @change="handleCurrentChange"
@showSizeChange="handlePageSizeChange" />
</div>
</div>
<a-empty v-else />
<a-modal
v-model:visible="detailsVisible"
:title="tabname"
style="width: 9rem"
:footer="null"
destroyOnClose="true"
:maskClosable="false"
>
<publish-details
:businessKey="businessKey"
:processInstanceId="processInstanceId"
></publish-details>
<a-modal v-model:visible="detailsVisible" :title="tabname" style="width: 9rem" :footer="null" destroyOnClose="true"
:maskClosable="false">
<publish-details :businessKey="businessKey" :processInstanceId="processInstanceId"></publish-details>
</a-modal>
<a-modal
v-model:visible="increasedVisible"
:title="tabname"
style="width: 9rem"
:footer="null"
destroyOnClose="true"
:maskClosable="false"
>
<a-modal v-model:visible="increasedVisible" :title="tabname" style="width: 9rem" :footer="null"
destroyOnClose="true" :maskClosable="false">
<the-new-release></the-new-release>
</a-modal>
<a-modal
v-model:visible="visible"
width="12.1rem"
@ok="del()"
@cancel="reason = ''"
footer=""
>
<a-modal v-model:visible="visible" width="12.1rem" @ok="del()" @cancel="reason = ''" footer="">
<TheShelvesAbility v-if="visible" :delObj="delObj"></TheShelvesAbility>
<!-- <a-input v-model:value="reason" placeholder="请输入下架原因" /> -->
</a-modal>
<a-modal
v-model:visible="visible2"
@ok="handleOk"
class="shangjia-class"
@cancel="handlecancel"
>
<a-modal v-model:visible="visible2" @ok="handleOk" class="shangjia-class" @cancel="handlecancel">
<div class="ant-modal-title" id="vcDialogTitle1">
<div class="showBg"></div>
能力上架申请
@ -189,22 +101,14 @@
<div class="ability-to-type">
<div class="title">能力类型选择</div>
<div class="content">
<div
v-for="item in abilityToType"
:key="item"
@click="abilityToTypeFunction(item)"
:class="
<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="component-type" v-if="abilityToTypeFunctionData == '组件服务'">
<div class="title">组件类型选择</div>
<div class="content">
<!-- <a-checkbox-group
@ -213,12 +117,7 @@
:options="componentType"
/> -->
<a-radio-group v-model:value="componentTypeValue">
<a-radio
@click="componentTypeValueFunction(item)"
v-for="item in componentType"
:key="item"
:value="item"
>
<a-radio @click="componentTypeValueFunction(item)" v-for="item in componentType" :key="item" :value="item">
{{ item }}
</a-radio>
</a-radio-group>
@ -456,12 +355,13 @@
//
const del = () => {
console.log('下架================》', delObj.value)
let fileObj = delObj2.value.fileList && delObj2.value.fileList[0] || {}
undercarriage({
reason: delObj2.value.reason,
title: delObj2.value.title,
phone: delObj2.value.phone,
enclosure: delObj2.value.fileList[0].response.data,
enclosureName: delObj2.value.fileList[0].name,
enclosure: fileObj.response && fileObj.response.data,
enclosureName: fileObj.name,
resource: [
{ resourceId: delObj.value.id, resourceName: delObj.value.name },
],
@ -519,17 +419,21 @@
flex-direction: column;
font-size: 0.16rem;
justify-content: left;
.title {
font-size: 0.2rem;
color: #000000;
font-family: 'Alibaba PuHuiTi';
font-weight: 500;
}
.sousuokuang {
margin: 0.2rem 0rem 0.21rem 0rem;
.ant-input-search {
max-width: 4.9rem;
}
:deep(.ant-input) {
width: 4rem;
height: 0.36rem;
@ -537,9 +441,11 @@
color: #b2b2b2;
background: #f5f5f5;
}
:deep(.ant-input-group-addon) {
display: inline-block;
margin-left: 0.1rem;
.ant-input-search-button {
width: 0.8rem;
height: 0.36rem;
@ -548,10 +454,12 @@
}
}
}
.tab {
display: flex;
font-size: 0.14rem;
color: #999999;
div {
width: 0.7rem;
height: 0.24rem;
@ -562,15 +470,18 @@
color: #666666;
cursor: pointer;
}
.tabclass {
border: 0.01rem solid #0087ff;
color: #0087ff;
}
}
.content {
padding-right: 0.1rem;
height: 5.1rem;
overflow: auto;
.content-body {
padding-bottom: 0.2rem;
padding-top: 0.2rem;
@ -578,16 +489,19 @@
// height: 1.20rem;
border-bottom: #cccccc 0.01rem solid;
position: relative;
.content-body-title {
font-size: 0.14rem;
color: #333333;
font-family: 'Alibaba PuHuiTi';
font-weight: 500;
}
.content-body-content {
margin-top: 0.1rem;
margin-bottom: 0.1rem;
width: 7.2rem;
.content-body-content-son {
line-height: 0.16rem;
font-size: 0.12rem;
@ -602,16 +516,19 @@
color: #999999;
}
}
.content-body-bottom {
display: flex;
color: #cccccc;
font-size: 0.12rem;
div:first-child {
margin-right: 0.3rem;
}
}
}
}
.bottom {
position: absolute;
bottom: 0.3rem;
@ -625,6 +542,7 @@
width: 0.96rem;
// background: #0087ff;
cursor: pointer;
div {
margin-top: 0.2rem;
height: 0.3rem;
@ -635,16 +553,20 @@
text-align: center;
line-height: 0.3rem;
}
.del {
background: #ccc;
}
.button-son {
background: #49c988;
}
}
.button-state {
top: 0.6rem;
}
.buttonAgree {
background-color: #49c988;
}
@ -660,22 +582,27 @@
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;
@ -683,8 +610,10 @@
align-items: center;
height: 0.26rem;
}
.content {
width: 100%;
.ant-radio-group {
display: grid;
grid-template-columns: 1fr 1fr 1fr;
@ -692,10 +621,12 @@
}
}
}
.ability-to-type {
.content {
display: grid;
grid-template-columns: 1fr 1fr 1fr;
div {
margin-right: 0.15rem;
cursor: pointer;
@ -711,6 +642,7 @@
align-items: center;
font-weight: 500;
}
.ability-to-type-down {
background: #0087ff;
color: #fff;
@ -718,19 +650,23 @@
}
}
}
.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;

View File

@ -93,7 +93,10 @@
:checked="val.checked"
@click.stop="checkedDept(val)"
></a-checkbox>
<span style="margin-left: 0.2rem">
<span style="margin-left: 0.2rem" v-if="itShowXiHaiAn">
{{ val.deptName}}
</span>
<span style="margin-left: 0.2rem" v-else>
{{ val.deptName + '(' + val.count + ')' }}
</span>
</div>
@ -113,13 +116,13 @@
<a-list-item-meta
:description="
item.description ||
(JSON.parse(item.note1) &&
(item.note1 && JSON.parse(item.note1) &&
JSON.parse(item.note1)[0] &&
JSON.parse(item.note1)[0].channelName +
'等' +
JSON.parse(item.note1).length +
'个摄像头') ||
'--'
''
"
style="position: relative"
>
@ -144,8 +147,9 @@
</a-tooltip>
<span class="type">{{ item.type }}</span>
</div>
<!-- // todo -->
<span class="time">
加购时间:{{ item.time }}
<span v-if="!itShowXiHaiAn">加购时间:{{ item.time }}</span>
<a-popconfirm
title="是否删除该记录?"
ok-text="是"
@ -318,6 +322,7 @@
const name = ref('')
const type = ref('')
const list = ref([])
const itShowXiHaiAn = whoShow.itShowXiHaiAn;
//
onMounted(() => {
getList('init')
@ -498,6 +503,8 @@
pageSize: pageSize.value,
name: name.value,
}).then((res) => {
console.log('res---获取信息--------->', res);
let statistics = 0
res.data.data.list.map((val) => {
val.initLoading = true
@ -524,30 +531,13 @@
}
// console.log('===============>', load.value)
//
debugger
list.value = res.data.data.list
if (index || index === 0) {
debugger
list.value[index].show = true
// console.log('1111', list.value[index])
showNew(list.value[index])
// showBottom()
}
// list.value = res.data.data.list
console.log(
'重新请求值',
index,
// res.data.data.list[index].show,
list.value
)
total.value = res.data.data.deptCount
console.log(
'重新请求值2',
index,
// res.data.data.list[index].show,
list.value
)
showKey.value++
if (type == 'init' || type == 'changePage') {
getListByDeptId(list.value[0])
@ -558,12 +548,18 @@
const getListByDeptId = (item) => {
console.log(item, 'item')
if (item.children.length == 0) {
selectResourceListByDept({
let _obj = {
pageNum: item.pageNum,
pageSize: item.pageSize,
deptId: item.deptId,
deptId: item.deptId || '',
name: name.value,
}).then((res) => {
}
// 西 todo
if(whoShow.itShowXiHaiAn) {
_obj.key = item.deptName
}
selectResourceListByDept(_obj).then((res) => {
console.log('res----根据部门查询-------->', res);
// console.log(
// '=============>',
// item,
@ -641,16 +637,17 @@
}
//
const checkedDept = (item) => {
// console.log(
// '==================>',
// item,
// checkedList.value,
// checkAll.value
// )
console.log(
'点击部门多选框==================>',
item,
checkedList.value,
checkAll.value
)
item.checked = !item.checked
if (item.checked) {
if (item.children.length > 0) {
item.children.map((val) => {
console.log('val.id------------>', val.id);
if (checkedListAbility.value.indexOf(val.id) == -1) {
checkedListAbility.value.push(val.id)
item.checkedList.push(val.id)
@ -838,8 +835,15 @@
} else {
let arr = []
let delArr = []
console.log('list.value------------>', list.value);
list.value.map((val) => {
val.arr = val.children.filter((item) => {
if(whoShow.itShowXiHaiAn) {
item.type = '基础设施';
item.resourceName = '摄像头列表';
item.resourceId = '1522550195055828996';
}
console.log('选择的数据=============>', item)
if (checkedListAbility.value.indexOf(item.id) > -1) {
if (item.delFlag == 0) {
@ -857,6 +861,7 @@
if (arr.length > 0) {
console.log('一键申请===================>', arr)
localStorage.setItem('applyList', JSON.stringify(arr))
return;
router.push({
path: '/apply',
})

View File

@ -1,45 +1,31 @@
<template>
<div id="aside-menu-container">
<a-menu
id="aside-menu"
v-model:openKeys="openKeys"
v-model:selectedKeys="selectedKeys"
mode="inline"
>
<a-menu-item
class="aside-menu-item"
v-for="item in menuList"
:key="item.key"
@click="handleClick(item)"
>
<i
class="icon"
:style="{
<a-menu id="aside-menu" v-model:openKeys="openKeys" v-model:selectedKeys="selectedKeys" mode="inline">
<a-menu-item class="aside-menu-item" v-for="item in menuList" :key="item.key" @click="handleClick(item)">
<i class="icon" :style="{
backgroundImage:
selectedKeys == item.key
? 'url(' + item.imgActive + ')'
: 'url(' + item.img + ')',
}"
></i>
}"></i>
<span>{{ item.title }}</span>
</a-menu-item>
</a-menu>
</div>
</template>
<script>
import { defineComponent, ref } from 'vue'
import { defineComponent, ref, onMounted } from 'vue'
import mybus from '@/myplugins/mybus'
export default defineComponent({
components: {},
setup() {
const menuList = [
{
title: '申购车',
img: require('@/assets/personalCenter/demand.png'),
imgActive: require('@/assets/personalCenter/demandactive.png'),
key: 'PurchaseVehicle',
},
// {
// title: '',
// img: require('@/assets/personalCenter/demand.png'),
// imgActive: require('@/assets/personalCenter/demandactive.png'),
// key: 'PurchaseVehicle',
// },
{
title: '我的发布',
img: require('@/assets/personalCenter/push.png'),
@ -52,12 +38,12 @@
imgActive: require('@/assets/personalCenter/applyactive.png'),
key: 'apply',
},
{
title: '我的收藏',
img: require('@/assets/personalCenter/collect.png'),
imgActive: require('@/assets/personalCenter/collectactive.png'),
key: 'collect',
},
// {
// title: '',
// img: require('@/assets/personalCenter/collect.png'),
// imgActive: require('@/assets/personalCenter/collectactive.png'),
// key: 'collect',
// },
{
title: '我的浏览',
img: require('@/assets/personalCenter/recent.png'),
@ -77,7 +63,12 @@
key: 'remark',
},
]
const selectedKeys = ref(['PurchaseVehicle'])
// 西
// if() {
// }
const selectedKeys = ref(['apply'])
const type = JSON.parse(window.sessionStorage.getItem('type'))
if (type) {
selectedKeys.value = [type]
@ -87,6 +78,10 @@
mybus.emit('tabsChange', item)
}
onMounted(() => {
handleClick(menuList[1])
})
return {
menuList,
selectedKeys,
@ -106,14 +101,17 @@
height: 60px;
font-size: 16px;
color: #333;
&:hover {
color: #0087ff;
background-color: #edf4fc;
}
}
:deep(.ant-menu-title-content) {
display: flex;
align-items: center;
.icon {
display: block;
width: 24px;
@ -122,14 +120,17 @@
margin-right: 30px;
}
}
:deep(.ant-menu-item-selected) {
background-color: #edf4fc;
color: #0087ff;
&::after {
display: none;
}
}
}
#aside-menu-container::-webkit-scrollbar {
width: 0 !important;
}