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

This commit is contained in:
unknown 2022-10-13 10:47:48 +08:00
commit bff7f51467
22 changed files with 3175 additions and 2967 deletions

View File

@ -2,16 +2,16 @@
* @Author: hisense.wuhongjian
* @Date: 2022-08-25 14:37:49
* @LastEditors: hisense.wuhongjian
* @LastEditTime: 2022-08-27 14:25:39
* @LastEditTime: 2022-10-12 15:25:01
* @Description: 告诉大家这是什么
*/
var _global = {}
var CONFIGITEM = {
version: 'qingdao', // 青岛
// version: 'qingdao', // 青岛
// version: 'xihaian', // 西海岸
// version: 'test', // 测试
// version: 'frp', // 内网穿透
// version: 'dev', // 开发
version: 'xihaian', // 开发
vNum: 'v0.8.7.2',
configData: {
// 青岛市大数据局
@ -24,7 +24,9 @@ var CONFIGITEM = {
xihaian: {
previewUrl: 'http://10.134.135.9:9796/',
// apiURL: 'http://10.134.135.9:8888/renren-admin',
apiURL: 'http://10.16.5.35:8888/renren-admin', // 李志成
// apiURL: 'http://10.16.5.35:8888/renren-admin', // 李志成-研发
apiURL: 'http://192.168.124.236:8888/renren-admin',
// apiURL: 'http://192.168.124.254:8888/renren-admin', // 李志成-远雄
websocketURL: 'ws://10.134.135.9:8888/renren-admin/websocket'
},
// 测试

View File

@ -9,6 +9,7 @@
<use :xlink:href="`#${menu.icon}`"></use>
</svg>
<span class="first-level-text">{{ menu.name }}</span>
<span class="tabNum" v-if="menu.total && menu.total !==0">{{menu.total}}</span>
</template>
<sub-menu
v-for="item in menu.children"
@ -32,6 +33,7 @@
<use :xlink:href="`#${menu.icon}`"></use>
</svg>
<span>{{ menu.name }}</span>
<span class="tabNum" v-if="menu.total && menu.total !==0 ">{{menu.total}}</span>
</a>
</el-menu-item>
</template>
@ -110,6 +112,13 @@ export default {
</script>
<style lang="scss">
.tabNum{
color: #ffffff;
margin-left: 5px;
background: red;
padding:1px 4px;
border-radius:5px;
}
.aui-sidebar__menu {
.first-level-text {
font-size: 16px;

View File

@ -18,29 +18,81 @@
:collapseTransition="false"
class="aui-sidebar__menu"
>
<div >
<sub-menu
v-for="menu in $store.state.sidebarMenuList"
v-for="menu in $store.state.sidebarMenuList"
:key="menu.id"
:menu="menu"
/>
>
<span>sdddd</span>
</sub-menu>
</div>
</el-menu>
</div>
</aside>
</template>
<script>
import http from '@/utils/request'
import SubMenu from "./main-sidebar-sub-menu";
export default {
data() {
return {};
return {
numObject:{}
};
},
components: {
SubMenu,
},
created() {
this.$store.state.sidebarMenuList = window.SITE_CONFIG["menuList"];
this.getNum()
//this.$store.state.sidebarMenuList = window.SITE_CONFIG["menuList"];
},
};
methods: {
getNum(){
http.get('/act/task/myToDoTaskNum').then(({ data: res }) => {
this.numObject=res.data
console.log("this.numObject========",this.numObject)
let menuList= window.SITE_CONFIG["menuList"];
for(var i=0;i<menuList.length;i++){
let menu=menuList[i];
// menu.total=0;
if(menu.id=='1541261628388888578'){//
let daibanNum=0
for(let j=0;j<menu.children.length;j++){
let children=menu.children[j]
if(children.id=="1541261780432408577"){// v3
children.total=Number(this.numObject.abilityprocess_v3)
daibanNum=Number(daibanNum)+Number(children.total)
} if(children.id=="1559376285703081986"){//
children.total=Number(this.numObject.meetingroom_book)
daibanNum=Number(daibanNum)+Number(children.total)
}if(children.id=="1545292602084827138"){//
children.total=Number(this.numObject.resourcemountapply)
daibanNum=Number(daibanNum)+Number(children.total)
}if(children.id=="1545312045695377410"){//
children.total=Number(this.numObject.abilitydemandapply)
daibanNum=Number(daibanNum)+Number(children.total)
}if(children.id=="1545313018614521857"){//
children.total=Number(this.numObject.resourcundercarriageapply)
daibanNum=Number(daibanNum)+Number(children.total)
}if(children.id=="1545313754106699777"){//
children.total=Number(this.numObject.comment_review)
daibanNum=Number(daibanNum)+Number(children.total)
}if(children.id=="1554294862931562498"){//
children.total=0
daibanNum=Number(daibanNum)+Number(children.total)
}
}
menu.total=daibanNum
}
}
this.$store.state.sidebarMenuList=menuList
})
}
}};
</script>
<style scoped lang="scss">
.aui-sidebar {

View File

@ -33,9 +33,13 @@
<el-form-item prop="sort" :label="$t('menu.sort')">
<el-input-number v-model="dataForm.sort" controls-position="right" :min="0" :label="$t('menu.sort')"></el-input-number>
</el-form-item>
<!-- 授权标识 -->
<el-form-item prop="permissions" :label="$t('menu.permissions')">
<el-input v-model="dataForm.permissions" :placeholder="$t('menu.permissionsTips')"></el-input>
</el-form-item>
<el-form-item prop="site" label="站点标识">
<el-input v-model="dataForm.site" placeholder="请输入站点标识(1为共享门户,0为后台管理)"></el-input>
</el-form-item>
<el-form-item v-if="dataForm.type === 0" prop="icon" :label="$t('menu.icon')" class="icon-list">
<el-popover v-model="iconListVisible" ref="iconListPopover" placement="bottom-start" trigger="click" popper-class="mod-sys__menu-icon-popover">
<div class="mod-sys__menu-icon-inner">
@ -77,6 +81,7 @@ export default {
name: '',
pid: '0',
parentName: '',
site: 0,
url: '',
permissions: '',
sort: 0,
@ -98,14 +103,14 @@ export default {
},
watch: {
'dataForm.type' (val) {
this.$refs['dataForm'].clearValidate()
this.$refs.dataForm.clearValidate()
}
},
methods: {
init () {
this.visible = true
this.$nextTick(() => {
this.$refs['dataForm'].resetFields()
this.$refs.dataForm.resetFields()
this.iconList = getIconList()
console.log('iconList', this.iconList)
this.dataForm.parentName = this.$t('menu.parentNameDefault')
@ -159,7 +164,7 @@ export default {
},
//
dataFormSubmitHandle: debounce(function () {
this.$refs['dataForm'].validate((valid) => {
this.$refs.dataForm.validate((valid) => {
if (!valid) {
return false
}
@ -178,7 +183,7 @@ export default {
})
}).catch(() => {})
})
}, 1000, { 'leading': true, 'trailing': false })
}, 1000, { leading: true, trailing: false })
}
}
</script>

View File

@ -1,15 +1,15 @@
/*
* @Author: hisense.wuhongjian
* @Date: 2020-07-07 16:03:23
* @LastEditors: hisense.liangjunhua
* @LastEditTime: 2022-09-19 09:36:49
* @LastEditors: hisense.wuhongjian
* @LastEditTime: 2022-10-12 15:29:29
* @Description: 系统静态参数配置
*/
var _global = {}
var CONFIGITEM = {
// version: 'qingdao', //
version: 'xihaian', // 西
// version: 'dev', //
// version: 'xihaian', // 西
version: 'dev', //
// version: 'zhanTingDev', // dev (2022-09-13:)
//version: 'test', //
//version: 'frp', // 穿
@ -61,6 +61,11 @@ var CONFIGITEM = {
userName: '',
userPwd: '',
},
//
camreaInfo: {
// cameraUrl: '10.134.135.92:9537', //
cameraUrl: '10.134.135.9:9537', //
},
backUrl: 'http://10.134.135.9:9797',
previewUrl: 'http://10.134.135.9:9796/',
// websocketURL: '10.134.135.9:8888/renren-admin', //

View File

@ -97,13 +97,16 @@ export function getHls(params) {
config2
)
}
// 西-- (10.134.135.92:9537)
let _cameraUrl = _global && _global.config && _global.config.camreaInfo && _global.config.camreaInfo.cameraUrl || '10.134.135.92:9537';
//-
export function getCameraInfoByAreaId(params) {
return axios.get(`http://10.134.135.92:9537/data_service/getCamera/getCameraInfoByAreaId?areaId=${params.areaId}`,
return axios.get(`http://${_cameraUrl}/data_service/getCamera/getCameraInfoByAreaId?areaId=${params.areaId}`,
config2
)
}
//-
export function getCameraByCondition(params) {
return axios.post('http://10.134.135.92:9537/data_service/getCamera/getCameraByCondition', params, config2)
return axios.post(`http://${_cameraUrl}/data_service/getCamera/getCameraByCondition`, params, config2)
}

View File

@ -74,7 +74,15 @@ export function getHls(params) {
//
export function sgcInsert(data) {
return request({
// url: '/resourcecar/insert',
url: '/resourcecar/insert',
method: 'post',
data,
})
}
// 西--
export function xhaAddCart(data) {
return request({
url: '/resourcecar/batchInsert', // 西-
method: 'post',
data,

View File

@ -53,7 +53,7 @@ const mutations = {
* @param {*} state
* @param {*} username
*/
setRealname(state, realName) {
setRealname(state, realName) {
state.realName = realName
},
//
@ -126,16 +126,16 @@ const actions = {
* @returns
*/
async getUserInfo({ commit }) {
const { data } = await getUserInfo()
if (!data) {
const res = await getUserInfo()
if (!res || !res.data) {
message.error(`验证失败,请重新登录...`)
return false
}
// debugger
commit('setUsername', data.data.username)
commit('setRealname', data.data.realName)
commit('setRole', data.data.roleIdList.length)
commit('setUserId', data.data.id)
commit('setUsername', res.data.data.username)
commit('setRealname', res.data.data.realName)
commit('setRole', res.data.data.roleIdList.length)
commit('setUserId', res.data.data.id)
// TODO
// let { username, avatar, roles, ability } = data
// if (username && roles && Array.isArray(roles)) {
@ -168,6 +168,7 @@ const actions = {
* @param {*} { commit, dispatch }
*/
async resetAll({ dispatch }) {
debugger
await dispatch('setAccessToken', '')
await dispatch('acl/setFull', false, {
root: true,

View File

@ -11,14 +11,8 @@ 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
@ -33,12 +27,14 @@ const handleCode = (code, msg, res) => {
switch (code) {
case 401:
debugger
store.dispatch('user/resetAll').catch(() => { })
store.dispatch('user/resetAll').catch(() => {})
break
case 403:
router.push({
path: '/401'
}).catch(() => { })
router
.push({
path: '/401',
})
.catch(() => {})
break
case 500:
message.error(msg || '接口异常')
@ -76,7 +72,7 @@ instance.interceptors.request.use(
if (
config.data &&
config.headers['Content-Type'] ===
'application/x-www-form-urlencoded;charset=UTF-8'
'application/x-www-form-urlencoded;charset=UTF-8'
)
config.data = qs.stringify(config.data)
if (debounce.some((item) => config.url.includes(item))) {
@ -103,17 +99,14 @@ 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];
const _old_href = window.location.href.split('#')[0]
const _new_href = response.headers.redirect.split('#')[0]
window.location.replace(response.headers.redirect)
// url
if (_old_href === _new_href) {
@ -124,7 +117,7 @@ instance.interceptors.response.use(
if (response.headers.redirect === '/#/login') {
var keys = document.cookie.match(/[^ =;]+(?=\=)/g)
if (keys) {
for (var i = keys.length; i--;) {
for (var i = keys.length; i--; ) {
document.cookie =
keys[i] + '=0;path=/;expires=' + new Date(0).toUTCString() //,m.kevis.com
document.cookie =
@ -168,14 +161,14 @@ 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)
console.log('接口返回REDIRECT', response.headers.redirect)
const { status, data } = response
handleCode(status, data.msg || message, response.headers.redirect)
if (response.headers.token) {
setAccessToken(response.headers.token)
}
@ -183,17 +176,10 @@ instance.interceptors.response.use(
window.location.replace(response.headers.redirect)
return Promise.resolve()
}
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

@ -1,8 +1,8 @@
/*
* @Author: hisense.wuhongjian
* @Date: 2022-04-01 17:23:11
* @LastEditors: Light
* @LastEditTime: 2022-10-10 16:43:58
* @LastEditors: hisense.wuhongjian
* @LastEditTime: 2022-10-11 13:59:18
* @Description: 告诉大家这是什么
*/
/**
@ -26,7 +26,7 @@ router.beforeEach(async (to, from, next) => {
// if (SSOTOKEN) {
// setAccessToken(SSOTOKEN)
// }
console.log('验证白名单', routesWhiteList)
const token = getAccessToken()
console.log('token', token)
let hasToken = token
@ -45,6 +45,7 @@ router.beforeEach(async (to, from, next) => {
router.addRoute(item)
})
if (routesWhiteList.indexOf(to.path) !== -1) {
debugger
next()
} else {
//

View File

@ -1085,7 +1085,7 @@ export default defineComponent({
// -
const getQingDao = (res) => {
; ((res.data && res.data.data && res.data.data.data) || []).forEach(
((res.data && res.data.data && res.data.data.data) || []).forEach(
(val) => {
val.id = val.guid // id
val.name = val.zyname //
@ -1101,7 +1101,7 @@ export default defineComponent({
}
// -西
const getXiHaiAn = (res) => {
; ((res.data && res.data.data && res.data.data.list) || []).forEach(
((res.data && res.data.data && res.data.data.list) || []).forEach(
(val) => {
val.id = val.serviceId // id
val.name = val.serviceName //

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@ -330,7 +330,6 @@
<a-input v-model:value="formState.name" style="width: 72%" />
</a-form-item>
</a-col>
<!-- v-bind="validateInfos.phone" -->
<a-col :span="8">
<a-form-item
name="phone"
@ -416,7 +415,6 @@
<span>{{ pagination.total || 0 }}</span>
</p>
<!-- <i class="boundary"></i> -->
<p>
已选
<span>{{ selectedRowKeys.length }}</span>
@ -425,7 +423,6 @@
</div>
<!-- 右侧 -->
<div class="contentRight">
<!-- 搜索@search="onSearch" -->
<div class="searchInput" v-if="isXiHaiAn">
<a-input-search
v-model:value="mapSearchParam.cameraName"
@ -490,10 +487,10 @@
@change="handleTableChange"
:row-selection="{
selectedRowKeys: selectedRowKeys,
// onChange: onSelectChange,
onSelect: onSelectChange,
onSelectAll: onSelectAll,
}"
:loading="loadingCamera"
>
<template #bodyCell="{ column, record }">
<template v-if="isXiHaiAn && column.dataIndex === 'status'">
@ -512,18 +509,6 @@
>
预览
</a>
<!-- <a
v-else
@click="
openPicture(
record.channelCode ||
record.channelId ||
record.channelCode.channelId
)
"
>
预览
</a> -->
</template>
</template>
</a-table>
@ -566,19 +551,19 @@
>
<template #footer></template>
<div style="width: 100%; display: flex; justify-content: center">
<div style="width: 100%; height: 100%; position: relative">
<div style="width: 100%; height: 100%; position: relative" v-show="isXiHaiAn">
<!-- 西海岸--预览视频--遮罩 todo-->
<div class="video-cover" @click="videoShowMsg" v-show="isXiHaiAn"></div>
<div class="waterMark waterMark-left-top" v-show="isXiHaiAn">
<div class="video-cover" @click="videoShowMsg"></div>
<div class="waterMark waterMark-left-top">
{{ userInfo.usernameShow }}
</div>
<div class="waterMark waterMark-right-top" v-show="isXiHaiAn">
<div class="waterMark waterMark-right-top">
{{ userInfo.realNameShow }}
</div>
<div class="waterMark waterMark-left-bottom" v-show="isXiHaiAn">
<div class="waterMark waterMark-left-bottom">
{{ userInfo.usernameShow }}
</div>
<div class="waterMark waterMark-right-bottom" v-show="isXiHaiAn">
<div class="waterMark waterMark-right-bottom">
{{ userInfo.realNameShow }}
</div>
<vue3VideoPlay v-bind="options" />
@ -684,6 +669,7 @@
:title="wrjName + '详情'"
@ok="wrjVisible = false"
>
<template #footer></template>
<div v-for="(db, key) in wrjData" :key="key">
<template v-if="typeof db == 'object'">
<div
@ -736,6 +722,7 @@
import { getCameraByCondition } from '@/api/file'
import {
sgcInsert,
xhaAddCart,
getRoomSearch,
getDate,
setSubmit,
@ -843,13 +830,6 @@
},
],
matter: [{ min: 1, max: 500, required: true, message: '可输入500字内容' }],
// phone: [
// {
// required: true,
// pattern: /^1[3|4|5|7|8|9][0-9]\d{8}$/,
// message: '',
// },
// ],
dept: [
{
required: true,
@ -948,7 +928,6 @@
dataSource.value = param.dataSource
pagination.value.total = param.total
// getCamera()
})
//
mybus.off('pointMarkerClick')
@ -1004,10 +983,6 @@
{
arr: [
{
// description:
// '便',
// resourceId: 'dbsb',
// type: '',
description: data.description,
resourceId: data.id,
resourceName: data.wrjName,
@ -1423,7 +1398,6 @@
}
selectType.value = '视频资源'
console.log('444------------>', 444);
} else if (name == '政务云资源') {
room.value = true
tableHeight.value = 600
@ -1444,14 +1418,6 @@
pagination.value.total = 0
selectType.value = '感知资源'
} else if (name == '城市云脑会客厅') {
// room.value = false
// wrjFlag.value = true
// showMap.value = false
// roomYuyue.value = true
// roomResult.value = false
// tabList.value[1] = []
// emits('add', 6)
// searchData()
}
clickList.value[indexFather].content.splice(
clickList.value[indexFather].content.indexOf(name),
@ -1491,12 +1457,10 @@
mapSearchParam.value.labelCodes.push(item.labelCode)
})
}
// todo
mapSearchParam.value.gpsX = ''
mapSearchParam.value.gpsY = ''
mapSearchParam.value.radius = ''
mapSearchParam.value.type = ''
console.log('mapSearchParam----->查询条件', mapSearchParam.value)
mapSearchParam.value.labelCodes = mapSearchParam.value.labelCodes + ''
emits('add', 1)
getCamera()
@ -1615,6 +1579,8 @@
clickList.value[1].content = []
}
clickList.value[indexFather].content[0] = name
console.log('clickList.value[indexFather].content[0]------------>', clickList.value[indexFather].content[0]);
if (tabList.value[1]) {
tabList.value[1].title = ''
tabList.value[1].content = []
@ -1717,7 +1683,6 @@
videoList.value.push(ob)
})
}
console.log('验证数据的准确性', videoList)
batchVisible.value = true
} else {
message.error('请选择需要预览的数据')
@ -1750,7 +1715,6 @@
videoList.value.push(ob)
})
}
console.log('验证数据的准确性', videoList)
batchPicVisible.value = true
} else {
message.error('请选择需要预览的数据')
@ -1778,8 +1742,6 @@
}
const videoClean = () => {
//
// selectedList.value = []
// selectedRowKeys.value = []
videoList.value = []
current.value = 1
}
@ -1787,11 +1749,8 @@
const changePage = (page) => {}
//
const dept = reactive({})
// eslint-disable-next-line no-undef
if (infrastructure) {
// eslint-disable-next-line no-undef
dept.deptId = infrastructure.deptId || ''
// eslint-disable-next-line no-undef
dept.deptName = infrastructure.deptName || ''
}
@ -1809,7 +1768,6 @@
}
const apply = async () => {
console.log('一键申请', selectedList.value)
if (selectedRowKeys.value.length != 0) {
//
let maxNumRes = await judegNumber()
@ -1831,6 +1789,7 @@
deptName: dept.deptName,
},
]
console.log('一键申请', arr)
localStorage.setItem('applyList', JSON.stringify(arr))
router.push({
path: '/apply',
@ -1851,30 +1810,27 @@
break
}
}
// //
// const addShopCar = () => {
// console.log('')
// }
const wrjFlag = ref(false)
// 西-loading
const loadingCamera = ref(false)
const getCamera = (flag, str) => {
console.log(
'mapSearchParam.value.cameraName------------>',
mapSearchParam.value.cameraName
)
loadingCamera.value = true;
if (flag) {
mapSearchParam.value.cameraName = str
console.log('赋值===============》', str, mapSearchParam.value)
}
console.log('初始化调用')
console.log('不选左侧树的时候不调用接口', mapSearchParam.value)
if (!whoShow1.value.itShowXiHaiAn) {
getCameraByParentId(mapSearchParam.value).then((res) => {
console.log('RRRRRRRRRR', res.data.data)
console.log('res--查询摄像头---------->', res);
loadingCamera.value = false;
dataSource.value = res.data.data
pagination.value.total = res.data.count
}).catch(err => {
loadingCamera.value = false;
message.error(err)
})
} else {
console.log('mapSearchParam------------>', mapSearchParam)
let params = {
regionId:
mapSearchParam.value.parentId || '70be8c5b664f4bcf869d82f2e8335051',
@ -1911,9 +1867,13 @@
}
}
getCameraByCondition(params).then((res) => {
console.log('res--查询摄像头---------->', res);
loadingCamera.value = false;
dataSource.value = res.data.data
pagination.value.total = res.data.count
console.log('根据parent查询摄像头', res.data.data)
}).catch(err => {
loadingCamera.value = false;
message.error(err)
})
}
}
@ -1931,9 +1891,7 @@
note1: [v],
})
})
console.log('_arr------------>', _arr);
sgcInsert(_arr).then((res) => {
console.log('res------申购车------>', res);
xhaAddCart(_arr).then((res) => {
if(res.data.code !== 0) {
return message.error(res.data.msg)
}
@ -2001,7 +1959,6 @@
align: 'center',
},
])
// const allClick = ref([])
const onSelectChange = (
record,
selected,
@ -2009,7 +1966,6 @@
nativeEvent,
type
) => {
console.log('hahhahah', record, selected, selectedRows, nativeEvent)
record = JSON.parse(JSON.stringify(record))
if (selected) {
if (selectedRowKeys.value.length == 1000) {
@ -2041,9 +1997,6 @@
if (selectedRowKeys.value.length > 1000) {
message.warning('最多只能添加1000个摄像头')
changeRows.map((val) => {
// selectedList.value = selectedList.value.filter(
// (item) => item.idtCameraChannel !== val.idtCameraChannel
// )
selectedList.value.forEach((ele, index) => {
if (ele.channelCode == record.channelCode) {
selectedList.value.splice(index, 1)

File diff suppressed because it is too large Load Diff

View File

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

View File

@ -7,7 +7,7 @@
<div class="name">组件服务</div>
<div class="sl">
<span class="num">{{ zjNum || 0 }}</span>
</div>
</div>
</a-tooltip>
@ -18,7 +18,7 @@
<div class="name">应用资源</div>
<div class="sl">
<span class="num">{{ yyNum || 0 }}</span>
</div>
</div>
</a-tooltip>
@ -29,7 +29,7 @@
<div class="name">基础设施</div>
<div class="sl">
<span class="num">{{ jcNum || 0 }}</span>
</div>
</div>
</a-tooltip>
@ -51,7 +51,7 @@
<div class="name">知识库</div>
<div class="sl">
<span class="num">{{ zsNum || 0 }}</span>
</div>
</div>
</a-tooltip>

View File

@ -32,9 +32,9 @@
<div class="img" :class="item.imgType"></div>
</div>
<div class="item-right">
<div class="fw" v-if="select == '浏览量'">
<!-- <div class="fw" v-if="select == '浏览量'">
{{ select }}:{{ item.visits }}
</div>
</div> -->
<div class="fw" v-if="select == '申请量'">
{{ select }}:{{ item.applyCount }}
</div>
@ -139,7 +139,7 @@
path: '/DetailsPageconetent',
query: {
// select: '',
select: DETAIL_PAGE_CONTENT_DEFAULT_TAB
select: DETAIL_PAGE_CONTENT_DEFAULT_TAB,
},
})
}

View File

@ -65,7 +65,7 @@
<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>
</a-popconfirm>
</div>
@ -271,10 +271,10 @@ console.log(props.refObj, '=====================================')
const endThis = (instanceId) => {
endProcess({ instanceId: instanceId }).then((res) => {
if (res.data.code == 0) {
message.success('流程终止成功!')
message.success('撤回申请成功!')
mybus.emit('closeModal', { type: '能力申请', index: 0 })
} else {
message.warning('流程终止失败!')
message.warning('撤回申请失败!')
}
})
}

View File

@ -643,7 +643,7 @@ const delList = () => {
}
//ceshiFunction
const ceshiFunction = () => {
debugger
// debugger
if (checkedListAbility.value.length == 0) {
message.warning('请先选择需要操作的数据!')
}
@ -660,7 +660,7 @@ const handleDelete = (item, index) => {
if (checkedListAbility.value.length == 0) {
return message.warning('请先选择需要操作的数据!')
} else {
delArr = checkedListAbility.value
delArr = checkedListAbility.value.map(v=>v.id)
}
}
sgcDel({

View File

@ -19,7 +19,7 @@
@confirm="endThis"
@cancel="cancel"
>
<a-button type="primary" danger>流程终止</a-button>
<a-button type="primary" danger>撤回申请</a-button>
</a-popconfirm>
<div v-else></div>
</div>
@ -54,10 +54,10 @@
const endThis = () => {
endProcess({ instanceId: props.refObj.processInstanceId }).then((res) => {
if (res.data.code == 0) {
message.success('流程终止成功!')
message.success('撤回申请成功!')
mybus.emit('closeModal', { type: '能力上架', index: 2 })
} else {
message.warning('流程终止失败!')
message.warning('撤回申请失败!')
}
})
}