Merge branch 'hi-ucs-dev' of http://124.222.94.39:3001/wuhongjian/hi-ucs into hi-ucs-dev

This commit is contained in:
guoyue 2022-06-30 10:39:16 +08:00
commit 6125962265
32 changed files with 1764 additions and 998 deletions

View File

@ -1,8 +1,8 @@
<!-- <!--
* @Author: hisense.wuhongjian * @Author: hisense.wuhongjian
* @Date: 2022-04-11 10:11:40 * @Date: 2022-04-11 10:11:40
* @LastEditors: hisense.liangjunhua * @LastEditors: hisense.wuhongjian
* @LastEditTime: 2022-06-23 18:30:45 * @LastEditTime: 2022-06-29 19:38:17
* @Description: 告诉大家这是什么 * @Description: 告诉大家这是什么
--> -->
<!DOCTYPE html> <!DOCTYPE html>
@ -42,8 +42,9 @@
<% if (process.env.VUE_APP_NODE_ENV === 'dev') { %> <% if (process.env.VUE_APP_NODE_ENV === 'dev') { %>
<script> <script>
// window.SITE_CONFIG['apiURL'] = 'http://15.2.21.166:8888/renren-admin'; // window.SITE_CONFIG['apiURL'] = 'http://15.2.21.166:8888/renren-admin';
window.SITE_CONFIG['apiURL'] = 'http://124.222.94.39:8888/renren-admin'; // window.SITE_CONFIG['apiURL'] = 'http://124.222.94.39:8888/renren-admin';
// window.SITE_CONFIG['apiURL'] = 'http://15.2.21.238:8888/renren-admin'; window.SITE_CONFIG['apiURL'] = 'http://15.2.21.238:8888/renren-admin';
window.SITE_CONFIG['previewUrl'] = 'http://15.2.21.238:9796/';
// window.SITE_CONFIG['apiURL'] = 'http://15.2.23.141:8000/renren-admin'; // window.SITE_CONFIG['apiURL'] = 'http://15.2.23.141:8000/renren-admin';
// WebSocket地址 // WebSocket地址
window.SITE_CONFIG['socketURL'] ='ws://localhost:8080/renren-admin/websocket'; window.SITE_CONFIG['socketURL'] ='ws://localhost:8080/renren-admin/websocket';

View File

@ -20,8 +20,8 @@
</el-form-item> </el-form-item>
</el-form> </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 prop="orderId" :label="$t('dataresources.resourcesName')" header-align="center" align="center"></el-table-column> <el-table-column prop="productName" :label="$t('dataresources.resourcesName')" header-align="center" align="center"></el-table-column>
<el-table-column prop="productName" :label="$t('dataresources.resourcesCode')" header-align="center" align="center"></el-table-column> <el-table-column prop="orderId" :label="$t('dataresources.resourcesCode')" header-align="center" align="center"></el-table-column>
<el-table-column prop="payAmount" :label="$t('dataresources.resourcesProvide')" header-align="center" align="center"></el-table-column> <el-table-column prop="payAmount" :label="$t('dataresources.resourcesProvide')" header-align="center" align="center"></el-table-column>
<el-table-column prop="status" :label="$t('dataresources.resourcesAbstract')" header-align="center" align="center"></el-table-column> <el-table-column prop="status" :label="$t('dataresources.resourcesAbstract')" header-align="center" align="center"></el-table-column>
<el-table-column prop="payAt" :label="$t('dataresources.putOnDate')" header-align="center" align="center"></el-table-column> <el-table-column prop="payAt" :label="$t('dataresources.putOnDate')" header-align="center" align="center"></el-table-column>
@ -50,8 +50,8 @@
<script> <script>
import mixinViewModule from '@/mixins/view-module' import mixinViewModule from '@/mixins/view-module'
// import AddOrUpdate from './order-add-or-update' // import AddOrUpdate from './order-add-or-update'
import {addDynamicRoute} from "@/router"; import { addDynamicRoute } from '@/router'
import RelateApplication from "./bsabilityai-relate-application.vue" import RelateApplication from './bsabilityai-relate-application.vue'
export default { export default {
mixins: [mixinViewModule], mixins: [mixinViewModule],
@ -79,31 +79,31 @@ export default {
}, },
components: { components: {
// AddOrUpdate, // AddOrUpdate,
RelateApplication, RelateApplication
}, },
methods: { methods: {
// //
resetDataList () { resetDataList () {
this.dataForm=this.noDataForm; this.dataForm = this.noDataForm
this.page=1; // this.page = 1 //
this.query(); this.query()
}, },
// //
showRelateApplication (row) { showRelateApplication (row) {
this.$http.get(`dataResourceRel/queryApplicationRelByResourceId?referenceId=${row.id}`).then(({ data: res }) => { this.$http.get(`dataResourceRel/queryApplicationRelByResourceId?referenceId=${row.id}`).then(({ data: res }) => {
if (res && res.data) { if (res && res.data) {
this.relateApplicationVisible = true; this.relateApplicationVisible = true
this.relateInfo = { this.relateInfo = {
id: row.id, id: row.id,
responseData: res.data, responseData: res.data,
linkType: '2' linkType: '2'
}; }
} }
}).catch(() => { }) }).catch(() => { })
}, },
// //
handleIsShowRelatePopup (type) { handleIsShowRelatePopup (type) {
this.relateApplicationVisible = type; this.relateApplicationVisible = type
} }
} }
} }

View File

@ -246,7 +246,7 @@ export default {
padding: 24px; padding: 24px;
h3 { h3 {
font-size: 16px; font-size: 16px;
color:#212121 color: #212121;
} }
p { p {
width: 78%; width: 78%;
@ -340,7 +340,6 @@ export default {
font-size: 18px; font-size: 18px;
padding-bottom: 0; padding-bottom: 0;
border-bottom: 0; border-bottom: 0;
} }
.title:before { .title:before {
content: ""; content: "";
@ -353,7 +352,6 @@ export default {
margin-right: 10px; margin-right: 10px;
margin-top: 6px; margin-top: 6px;
} }
} }
} }
::v-deep .agreeOr > div { ::v-deep .agreeOr > div {
@ -363,7 +361,6 @@ export default {
margin-right: 10px; margin-right: 10px;
margin-left: 32px; margin-left: 32px;
} }
} }
::v-deep .agreeOr > div:last-of-type { ::v-deep .agreeOr > div:last-of-type {
margin-top: 15px; margin-top: 15px;

View File

@ -2,7 +2,7 @@
* @Author: hisense.liangjunhua * @Author: hisense.liangjunhua
* @Date: 2022-06-27 11:27:22 * @Date: 2022-06-27 11:27:22
* @LastEditors: hisense.liangjunhua * @LastEditors: hisense.liangjunhua
* @LastEditTime: 2022-06-27 11:50:45 * @LastEditTime: 2022-06-29 16:31:26
* @Description: 能力申请 * @Description: 能力申请
--> -->
<template> <template>
@ -43,11 +43,7 @@
<el-table-column label="申请人" header-align="center" align="center"> <el-table-column label="申请人" header-align="center" align="center">
<template slot-scope="scope"> <template slot-scope="scope">
<span>{{ <span>{{
(scope.row.params && scope.row.params.user) || (scope.row.params && scope.row.params.tAbilityApplicationDTOList[0].user)
(scope.row.params && scope.row.params.applyUserName) ||
(scope.row.params && scope.row.params.userName) ||
(scope.row.params && scope.row.params.undercarriageUserName)||
(scope.row.params && scope.row.params.name)
}}</span> }}</span>
</template> </template>
</el-table-column> </el-table-column>
@ -58,13 +54,7 @@
> >
<template slot-scope="scope"> <template slot-scope="scope">
<span>{{ <span>{{
(scope.row.params && scope.row.params.system) || (scope.row.params && scope.row.params.tAbilityApplicationDTOList[0].title)
(scope.row.params && scope.row.params.demandSubject) ||
(scope.row.params &&
scope.row.params.resourceDTO &&
scope.row.params.resourceDTO.name) ||
(scope.row.params && scope.row.params.undercarriageReason)||
(scope.row.params && scope.row.params.comment)
}}</span> }}</span>
</template> </template>
</el-table-column> </el-table-column>
@ -104,12 +94,12 @@
@click="taskHandle(scope.row)" @click="taskHandle(scope.row)"
>{{ $t("manage") }}</el-button >{{ $t("manage") }}</el-button
> >
<el-button <!-- <el-button
type="text" type="text"
size="small" size="small"
@click="taskDetail(scope.row)" @click="taskDetail(scope.row)"
>{{ $t("process.viewFlowImage") }}</el-button >{{ $t("process.viewFlowImage") }}</el-button
> > -->
</template> </template>
</el-table-column> </el-table-column>
</el-table> </el-table>
@ -143,7 +133,8 @@ export default {
}, },
dataForm: { dataForm: {
taskName: '', taskName: '',
taskId: '' taskId: '',
processDefinitionKey: 'abilityprocess_v2'
}, },
processInstanceId: '' processInstanceId: ''
} }

View File

@ -0,0 +1,459 @@
<!--
* @Author: hisense.liangjunhua
* @Date: 2022-06-29 15:59:51
* @LastEditors: hisense.liangjunhua
* @LastEditTime: 2022-06-29 18:17:07
* @Description: 告诉大家这是什么
-->
<!-- 流程业务表单 -->
<template>
<el-card shadow="never" class="aui-card--fill" :key='showKey'>
<!-- 申请人详情 -->
<div>
<h3>申请人信息</h3>
<div class="big-BOX">
<p>
<span class="text">申请人<span> {{dataForm.content.user || '--'}}</span></span>
<span class="text">电话<span>{{dataForm.content.phone || '--'}}</span></span>
<span class="text">单位<span>{{dataForm.content.unit || '--'}}</span></span>
</p>
<p>
<span class="text"> 能力申请标题<span> {{dataForm.content.title|| '--'}}</span></span>
<span class="text">应用系统<span>{{dataForm.content.applicationSystem || '--'}}</span></span>
<span class="text">应用场景<span> {{dataForm.content.applicationSceneStr || '--'}}</span></span>
</p>
<p>
<span> 能力应用期望效果<span> {{dataForm.content.effectWish|| '--'}}</span></span>
</p>
<p v-if="dataForm.content.enclosure">
<span> 申请附件<span> {{dataForm.content.enclosure|| '--'}}<button @click="downloadFile2(dataForm.content.enclosure)">预览</button></span></span>
</p>
</div>
</div>
<!-- 申请能力 -->
<div class="AbilityApply">
<h3>申请能力</h3>
<ul v-for="item in dataList" :key="item.id">
<!-- <li class="title">{{item.address}}</li> -->
<li class="clearfix">
<img
src="~@/assets/img/imgLeft.png"
/>
<div>
<h2>{{item.name}}<span>{{item.type}}</span></h2>
<p>{{item.describe}}</p>
</div>
</li>
</ul>
</div>
<!-- 流程综合组件 -->
<!-- <ren-process-multiple
v-if="processVisible"
updateInstanceIdUrl="/processForm/tabilityapplication/updateInstanceId"
saveFormUrl="/processForm/tabilityapplication"
dataFormName="dataForm"
ref="renProcessMultiple"
></ren-process-multiple> -->
<!-- 审批 -->
<div class="agreeOr">
<h3>审批</h3>
<div>
<el-radio-group v-model="agreeOrList" style="width:230px;">
<el-radio-button label="同意" class="blueAll">同意</el-radio-button>
<el-radio-button label="退回" class="redAll">退回</el-radio-button>
</el-radio-group>
<el-input v-if="agreeOrList ==='同意' " v-model="inputAgree" placeholder="请输入同意意见"></el-input>
<el-input v-if="agreeOrList ==='退回'" v-model="inputNo" placeholder="请输入退回意见"></el-input>
<el-button class="inputBule" @click="agreeOrNot">提交</el-button>
</div>
</div>
<!-- 流程详情 -->
<ren-process-detail></ren-process-detail>
</el-card>
</template>
<script>
//
import processModule from '@/mixins/process-module'
import debounce from 'lodash/debounce'
import qs from 'qs'
import RenProcessDetail from '@/components/ren-process-detail/src/ren-process-detail'
export default {
//
mixins: [processModule],
data () {
return {
visible: true,
showKey: 0,
//
// fieldDisabled: false,
// dataForm: {
// id: '',
// user: '',
// phone: '',
// unit: '',
// area: '',
// system: '',
// scene: '',
// basis: ''
// }
dataForm: {
id: '',
content: {}
},
dataList: [],
inputAgree: '',
inputNo: '',
agreeOrList: '同意'
}
},
created () {
// KEY
console.log('params=================>', this.$route, this.$route.params)
this.dataForm.taskId = this.$route.params.taskId
this.init()
// //
var callbacks = {
startProcessSuccessCallback: this.closeCurrentTab,
startProcessErrorCallback: this.startProcessErrorCallback,
taskHandleSuccessCallback: this.closeCurrentTab,
taskHandleErrorCallback: this.taskHandleErrorCallback,
formSaveSuccessCallback: null,
formSaveErrorCallback: null
}
//
this.initProcessMultiple(callbacks)
},
computed: {
// dataRule () {
// return {
// inputAgree: [
// { required: true, message: this.$t('validate.required'), trigger: 'blur' }
// ],
// inputNo: [
// { required: true, message: this.$t('validate.required'), trigger: 'blur' }
// ]
// }
// }
},
components: {
RenProcessDetail
},
methods: {
init () {
// this.visible = true
this.$nextTick(() => {
// this.$refs.dataForm.resetFields()
if (this.dataForm.taskId) {
// KEY
// this.fieldDisabled = true
this.getInfo()
console.log(this.dataForm, 'init')
}
})
},
downloadFile2 (url) {
window.open(
window.SITE_CONFIG.previewUrl +
'hisense_office/onlinePreview?url=' +
btoa(encodeURI(url))
)
},
//
getInfo () {
this.$http
.get(`/act/task/getTaskVariables?taskId=${this.dataForm.taskId}&variableName=tAbilityApplicationDTOList`)
.then(({ data: res }) => {
if (res.code !== 0) {
console.log(res.data)
return this.$message.error(res.msg)
}
console.log(res.data, this.dataForm, 'elas============================')
if (res.data.tAbilityApplicationDTOList[0].applicationScene) {
res.data.tAbilityApplicationDTOList[0].applicationSceneStr = ''
res.data.tAbilityApplicationDTOList[0].applicationScene.map((val, index) => {
res.data.tAbilityApplicationDTOList[0].applicationSceneStr += val
if (index < res.data.tAbilityApplicationDTOList[0].applicationScene.length - 1) {
res.data.tAbilityApplicationDTOList[0].applicationSceneStr += '、'
}
})
}
this.dataForm.content = res.data.tAbilityApplicationDTOList[0]
res.data.tAbilityApplicationDTOList.map(val => {
this.$http.get('/resource/' + val.resourceId).then(res1 => {
console.log(res1.data.data, '1111111111111111111111111111111111')
this.dataList.push({
name: res1.data.data.name,
type: res1.data.data.type,
describe: res1.data.data.description
})
})
})
})
.catch(() => {})
},
//
applyData () {
this.$http
.get(`/resource/select/${this.dataForm.instanceId}`)
.then(({ data: res }) => {
if (res.code !== 0) {
console.log(res.data, 'hhhhh')
// return this.$message.error(res.msg)
}
// console.log(res.data, 'elas')
// this.dataForm.content = res.data
// console.log(this.dataForm, 'ela')
})
.catch(() => {})
},
// 退
agreeOrNot: debounce(function () {
if (this.agreeOrList === '同意') {
console.log('this.dataForm', this.dataForm)
const params = qs.stringify({
taskId: this.dataForm.taskId,
comment: this.inputAgree
})
console.log(params)
this.$http.post('/act/task/complete?' + params).then(({ data: res }) => {
if (res.code !== 0) {
this.$message.error(res.msg)
if (this.callbacks.taskHandleErrorCallback) {
this.callbacks.taskHandleErrorCallback(res)
}
return
}
this.$message({
message: this.$t('prompt.success'),
type: 'success',
duration: 500,
onClose: () => {
this.visible = false
if (this.callbacks.taskHandleSuccessCallback) {
this.callbacks.taskHandleSuccessCallback(res)
}
}
})
}).catch(() => {})
} else if (this.agreeOrList === '退回') {
const params = qs.stringify({
taskId: this.dataForm.taskId,
comment: this.inputNo
})
this.$http.post('/act/task/backToFirst?', params).then(({ data: res }) => {
if (res.code !== 0) {
this.$message.error(res.msg)
if (this.callbacks.taskHandleErrorCallback) {
this.callbacks.taskHandleErrorCallback(res)
}
return
}
this.$message({
message: this.$t('prompt.success'),
type: 'success',
duration: 500,
onClose: () => {
this.visible = false
if (this.callbacks.taskHandleSuccessCallback) {
this.callbacks.taskHandleSuccessCallback(res)
}
}
})
})
}
}, 1000, { leading: true, trailing: false }),
//
startProcessErrorCallback (data) {
console.log(data)
},
//
taskHandleErrorCallback (data) {}
},
mounted () {
// this.applyData()
}
}
</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;
}
}
p:last-of-type {
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;
}
</style>

View File

@ -2,7 +2,7 @@
* @Author: hisense.wuhongjian * @Author: hisense.wuhongjian
* @Date: 2022-03-29 16:45:25 * @Date: 2022-03-29 16:45:25
* @LastEditors: hisense.wuhongjian * @LastEditors: hisense.wuhongjian
* @LastEditTime: 2022-06-28 16:52:46 * @LastEditTime: 2022-06-29 19:38:31
* @Description: 告诉大家这是什么 * @Description: 告诉大家这是什么
--> -->
<!DOCTYPE html> <!DOCTYPE html>
@ -45,9 +45,9 @@
// window.SITE_CONFIG['apiURL'] = 'http://10.134.135.9:8888/renren-admin'; // window.SITE_CONFIG['apiURL'] = 'http://10.134.135.9:8888/renren-admin';
// 开发 // 开发
window.SITE_CONFIG['backUrl'] = 'http://15.2.21.238:9797'; window.SITE_CONFIG['backUrl'] = 'http://15.2.21.238:9797';
window.SITE_CONFIG['previewUrl'] = 'http://15.2.21.238:9796'; window.SITE_CONFIG['previewUrl'] = 'http://15.2.21.238:9796/';
window.SITE_CONFIG['frontUrl'] = 'http://15.2.21.238:9796/document/#/devModelFile/'; window.SITE_CONFIG['frontUrl'] = 'http://15.2.21.238:9796/document/#/devModelFile/';
window.SITE_CONFIG['apiURL'] = 'http://15.2.21.239:8888/renren-admin'; window.SITE_CONFIG['apiURL'] = 'http://15.2.21.238:8888/renren-admin';
window.SITE_CONFIG['POI_URL'] = 'http://15.2.21.238:8090/iserver/services/addressmatch-qingdaoPOI181015/restjsr/v1/address'; window.SITE_CONFIG['POI_URL'] = 'http://15.2.21.238:8090/iserver/services/addressmatch-qingdaoPOI181015/restjsr/v1/address';
// 穿透版本 // 穿透版本
// window.SITE_CONFIG['backUrl'] = 'http://124.222.94.39:9797'; // window.SITE_CONFIG['backUrl'] = 'http://124.222.94.39:9797';

View File

@ -1,8 +1,8 @@
/* /*
* @Author: hisense.wuhongjian * @Author: hisense.wuhongjian
* @Date: 2022-04-01 19:19:40 * @Date: 2022-04-01 19:19:40
* @LastEditors: hisense.wuhongjian * @LastEditors: hisense.liangjunhua
* @LastEditTime: 2022-06-22 18:59:03 * @LastEditTime: 2022-06-29 14:34:24
* @Description: 告诉大家这是什么 * @Description: 告诉大家这是什么
*/ */
import request from '@/utils/request' import request from '@/utils/request'
@ -114,7 +114,7 @@ export function lastestPage(params) {
// //
export function submitApply(data) { export function submitApply(data) {
return request({ return request({
url: '/ability/center/apply', url: '/ability/center/v2/apply',
method: 'post', method: 'post',
data, data,
}) })
@ -305,3 +305,12 @@ export function queryPartAppByKeyId(params) {
params, params,
}) })
} }
//
export function queryPartAppByKeyId2(params) {
return request({
url: 'dataResourceRel/queryApp4PartByKeyId',
method: 'get',
params,
})
}

View File

@ -150,6 +150,16 @@ export function nengliziyuanshangjiaapply(params) {
params, params,
}) })
} }
export function getTaskVariables(params) {
return request({
url:
'/act/task/getTaskVariables?taskId=' +
params.taskId +
'&variableName=tAbilityApplicationDTOList',
method: 'get',
params,
})
}
// //
export function undercarriage(data) { export function undercarriage(data) {
return request({ return request({

View File

@ -1726,6 +1726,9 @@ export function MapFun(mapObj) {
} }
}) })
} }
marker.on('click', e=>{
console.log('点位数据', e)
})
layers.addLayer(marker) layers.addLayer(marker)
} }
}) })

View File

@ -88,7 +88,7 @@
import AlgorithmCommonProblem from '@/views/detailsAll/components/Algorithm/AlgorithmCommonProblem' // import AlgorithmCommonProblem from '@/views/detailsAll/components/Algorithm/AlgorithmCommonProblem' //
import { ref, onMounted, onBeforeUnmount, reactive } from 'vue' import { ref, onMounted, onBeforeUnmount, reactive } from 'vue'
import { useRouter } from 'vue-router' import { useRouter } from 'vue-router'
import { updateVisits, selectOne, queryPartAppByKeyId } from '@/api/home' import { updateVisits, selectOne, queryPartAppByKeyId2 } from '@/api/home'
import mybus from '@/myplugins/mybus' import mybus from '@/myplugins/mybus'
const router = useRouter() const router = useRouter()
const scrollTop = ref(0) const scrollTop = ref(0)
@ -97,11 +97,7 @@
const dataList = reactive({ data: {} }) const dataList = reactive({ data: {} })
const id = router.currentRoute.value.query.id const id = router.currentRoute.value.query.id
const obj = JSON.parse(window.sessionStorage.getItem('preview')) const obj = JSON.parse(window.sessionStorage.getItem('preview'))
const associatedComponents = ref([ const associatedComponents = ref([{ type: '应用资源', dataList: [] }])
{ type: '应用资源', dataList: [] },
{ type: '数据资源', dataList: [] },
{ type: '基础设施', dataList: [] },
])
document.documentElement.style.transition = 'all 0.3s ease' document.documentElement.style.transition = 'all 0.3s ease'
document.documentElement.scrollTop = 0 document.documentElement.scrollTop = 0
document.body.style.transition = 'all 0.3s ease' document.body.style.transition = 'all 0.3s ease'
@ -163,9 +159,8 @@
associatedComponents.value.map((item, index) => { associatedComponents.value.map((item, index) => {
let queryPartAppByKeyIdParams = { let queryPartAppByKeyIdParams = {
keyId: id, keyId: id,
type: item.type,
} }
queryPartAppByKeyId(queryPartAppByKeyIdParams).then((res) => { queryPartAppByKeyId2(queryPartAppByKeyIdParams).then((res) => {
associatedComponents.value[index].dataList = res.data.data associatedComponents.value[index].dataList = res.data.data
}) })
}) })

View File

@ -2,7 +2,7 @@
* @Author: hisense.liangjunhua * @Author: hisense.liangjunhua
* @Date: 2022-06-08 11:32:22 * @Date: 2022-06-08 11:32:22
* @LastEditors: hisense.liangjunhua * @LastEditors: hisense.liangjunhua
* @LastEditTime: 2022-06-20 18:59:18 * @LastEditTime: 2022-06-30 10:22:31
* @Description: 应用详情页 * @Description: 应用详情页
--> -->
<template> <template>
@ -136,9 +136,13 @@
selectOne(id).then((res) => { selectOne(id).then((res) => {
// console.clear() // console.clear()
dataList.data = res.data.data dataList.data = res.data.data
console.log('初始化详情页=========================>', dataList.data)
const arrList = ref([]) const arrList = ref([])
arrList.value = JSON.parse(window.sessionStorage.getItem('visits')) arrList.value = JSON.parse(window.sessionStorage.getItem('visits'))
console.log(
'初始化详情页=========================>',
dataList.data,
arrList.value
)
if (arrList.value && arrList.value.indexOf(id) === -1) { if (arrList.value && arrList.value.indexOf(id) === -1) {
arrList.value.push(id) arrList.value.push(id)
updateVisits({ updateVisits({

View File

@ -71,7 +71,7 @@
import BusinessCommonProblem from '@/views/detailsAll/components/Business/BusinessCommonProblem' // import BusinessCommonProblem from '@/views/detailsAll/components/Business/BusinessCommonProblem' //
import { ref, onMounted, onBeforeUnmount, reactive } from 'vue' import { ref, onMounted, onBeforeUnmount, reactive } from 'vue'
import { useRouter } from 'vue-router' import { useRouter } from 'vue-router'
import { updateVisits, selectOne, queryPartAppByKeyId } from '@/api/home' import { updateVisits, selectOne, queryPartAppByKeyId2 } from '@/api/home'
import mybus from '@/myplugins/mybus' import mybus from '@/myplugins/mybus'
const router = useRouter() const router = useRouter()
const scrollTop = ref(0) const scrollTop = ref(0)
@ -80,11 +80,7 @@
const dataList = reactive({ data: {} }) const dataList = reactive({ data: {} })
const id = router.currentRoute.value.query.id const id = router.currentRoute.value.query.id
const obj = JSON.parse(window.sessionStorage.getItem('preview')) const obj = JSON.parse(window.sessionStorage.getItem('preview'))
const associatedComponents = ref([ const associatedComponents = ref([{ type: '应用资源', dataList: [] }])
{ type: '应用资源', dataList: [] },
{ type: '数据资源', dataList: [] },
{ type: '基础设施', dataList: [] },
])
document.documentElement.style.transition = 'all 0.3s ease' document.documentElement.style.transition = 'all 0.3s ease'
document.documentElement.scrollTop = 0 document.documentElement.scrollTop = 0
document.body.style.transition = 'all 0.3s ease' document.body.style.transition = 'all 0.3s ease'
@ -146,9 +142,8 @@
associatedComponents.value.map((item, index) => { associatedComponents.value.map((item, index) => {
let queryPartAppByKeyIdParams = { let queryPartAppByKeyIdParams = {
keyId: id, keyId: id,
type: item.type,
} }
queryPartAppByKeyId(queryPartAppByKeyIdParams).then((res) => { queryPartAppByKeyId2(queryPartAppByKeyIdParams).then((res) => {
associatedComponents.value[index].dataList = res.data.data associatedComponents.value[index].dataList = res.data.data
}) })
}) })

View File

@ -78,7 +78,7 @@
import DeveloperTrial from '@/views/detailsAll/components/Developer/DeveloperTrial' // import DeveloperTrial from '@/views/detailsAll/components/Developer/DeveloperTrial' //
import { ref, onMounted, onBeforeUnmount, reactive } from 'vue' import { ref, onMounted, onBeforeUnmount, reactive } from 'vue'
import { useRouter } from 'vue-router' import { useRouter } from 'vue-router'
import { updateVisits, selectOne, queryPartAppByKeyId } from '@/api/home' import { updateVisits, selectOne, queryPartAppByKeyId2 } from '@/api/home'
import mybus from '@/myplugins/mybus' import mybus from '@/myplugins/mybus'
const router = useRouter() const router = useRouter()
const scrollTop = ref(0) const scrollTop = ref(0)
@ -87,11 +87,7 @@
const dataList = reactive({ data: {} }) const dataList = reactive({ data: {} })
const id = router.currentRoute.value.query.id const id = router.currentRoute.value.query.id
const obj = JSON.parse(window.sessionStorage.getItem('preview')) const obj = JSON.parse(window.sessionStorage.getItem('preview'))
const associatedComponents = ref([ const associatedComponents = ref([{ type: '应用资源', dataList: [] }])
{ type: '应用资源', dataList: [] },
{ type: '数据资源', dataList: [] },
{ type: '基础设施', dataList: [] },
])
document.documentElement.style.transition = 'all 0.3s ease' document.documentElement.style.transition = 'all 0.3s ease'
document.documentElement.scrollTop = 0 document.documentElement.scrollTop = 0
document.body.style.transition = 'all 0.3s ease' document.body.style.transition = 'all 0.3s ease'
@ -153,9 +149,8 @@
associatedComponents.value.map((item, index) => { associatedComponents.value.map((item, index) => {
let queryPartAppByKeyIdParams = { let queryPartAppByKeyIdParams = {
keyId: id, keyId: id,
type: item.type,
} }
queryPartAppByKeyId(queryPartAppByKeyIdParams).then((res) => { queryPartAppByKeyId2(queryPartAppByKeyIdParams).then((res) => {
associatedComponents.value[index].dataList = res.data.data associatedComponents.value[index].dataList = res.data.data
}) })
}) })

View File

@ -80,7 +80,7 @@
import LayerServiceUsageMode from '@/views/detailsAll/components/LayerService/LayerServiceUsageMode.vue' //使 import LayerServiceUsageMode from '@/views/detailsAll/components/LayerService/LayerServiceUsageMode.vue' //使
import { ref, onMounted, onBeforeUnmount, reactive } from 'vue' import { ref, onMounted, onBeforeUnmount, reactive } from 'vue'
import { useRouter } from 'vue-router' import { useRouter } from 'vue-router'
import { updateVisits, selectOne, queryPartAppByKeyId } from '@/api/home' import { updateVisits, selectOne, queryPartAppByKeyId2 } from '@/api/home'
import mybus from '@/myplugins/mybus' import mybus from '@/myplugins/mybus'
const router = useRouter() const router = useRouter()
const scrollTop = ref(0) const scrollTop = ref(0)
@ -89,11 +89,7 @@
const dataList = reactive({ data: {} }) const dataList = reactive({ data: {} })
const id = router.currentRoute.value.query.id const id = router.currentRoute.value.query.id
const obj = JSON.parse(window.sessionStorage.getItem('preview')) const obj = JSON.parse(window.sessionStorage.getItem('preview'))
const associatedComponents = ref([ const associatedComponents = ref([{ type: '应用资源', dataList: [] }])
{ type: '应用资源', dataList: [] },
{ type: '数据资源', dataList: [] },
{ type: '基础设施', dataList: [] },
])
document.documentElement.style.transition = 'all 0.3s ease' document.documentElement.style.transition = 'all 0.3s ease'
document.documentElement.scrollTop = 0 document.documentElement.scrollTop = 0
document.body.style.transition = 'all 0.3s ease' document.body.style.transition = 'all 0.3s ease'
@ -155,9 +151,8 @@
associatedComponents.value.map((item, index) => { associatedComponents.value.map((item, index) => {
let queryPartAppByKeyIdParams = { let queryPartAppByKeyIdParams = {
keyId: id, keyId: id,
type: item.type,
} }
queryPartAppByKeyId(queryPartAppByKeyIdParams).then((res) => { queryPartAppByKeyId2(queryPartAppByKeyIdParams).then((res) => {
associatedComponents.value[index].dataList = res.data.data associatedComponents.value[index].dataList = res.data.data
}) })
}) })

View File

@ -4,22 +4,17 @@
<div class="application-associated-ability-main"> <div class="application-associated-ability-main">
<div <div
class="associated-ability-card" class="associated-ability-card"
v-for="(item, index) in dataFrom" v-for="(dataListitem, dataListindex) in dataFrom[0].dataList"
:key="item.type"
>
<div class="associated-ability-card-title">
{{ item.type }}
</div>
<div class="associated-ability-card-content">
<div
class="associated-ability-card-content-font"
v-for="(dataListitem, dataListindex) in item.dataList"
:key="dataListitem.id" :key="dataListitem.id"
@click="switchFunction(dataListitem.id)" @click="switchFunction(dataListitem.id)"
> >
<span>{{ dataListindex + 1 }}</span> <div class="associated-ability-card-title">
{{ dataListitem.name }} {{ dataListitem.name }}
</div> </div>
<div class="associated-ability-card-content">
<div class="associated-ability-card-content-font">
{{ dataListitem.description }}
</div>
</div> </div>
</div> </div>
</div> </div>
@ -85,11 +80,11 @@
align-items: center; align-items: center;
.application-associated-ability-main { .application-associated-ability-main {
margin-top: 0.4rem; margin-top: 0.4rem;
width: 13.14rem; width: 13.3rem;
display: flex; display: flex;
justify-content: space-between; justify-content: space-between;
.associated-ability-card { .associated-ability-card {
width: 4.28rem; width: 3.2rem;
display: flex; display: flex;
flex-direction: column; flex-direction: column;
align-items: center; align-items: center;
@ -112,9 +107,6 @@
margin-right: 0.15rem; margin-right: 0.15rem;
margin-top: 0.15rem; margin-top: 0.15rem;
} }
.associated-ability-card-content-font:hover {
color: #0058e1;
}
} }
} }
.associated-ability-card:hover { .associated-ability-card:hover {

View File

@ -4,22 +4,17 @@
<div class="application-associated-ability-main"> <div class="application-associated-ability-main">
<div <div
class="associated-ability-card" class="associated-ability-card"
v-for="(item, index) in dataFrom" v-for="(dataListitem, dataListindex) in dataFrom[0].dataList"
:key="item.type"
>
<div class="associated-ability-card-title">
{{ item.type }}
</div>
<div class="associated-ability-card-content">
<div
class="associated-ability-card-content-font"
v-for="(dataListitem, dataListindex) in item.dataList"
:key="dataListitem.id" :key="dataListitem.id"
@click="switchFunction(dataListitem.id)" @click="switchFunction(dataListitem.id)"
> >
<span>{{ dataListindex + 1 }}</span> <div class="associated-ability-card-title">
{{ dataListitem.name }} {{ dataListitem.name }}
</div> </div>
<div class="associated-ability-card-content">
<div class="associated-ability-card-content-font">
{{ dataListitem.description }}
</div>
</div> </div>
</div> </div>
</div> </div>
@ -85,11 +80,11 @@
align-items: center; align-items: center;
.application-associated-ability-main { .application-associated-ability-main {
margin-top: 0.4rem; margin-top: 0.4rem;
width: 13.14rem; width: 13.3rem;
display: flex; display: flex;
justify-content: space-between; justify-content: space-between;
.associated-ability-card { .associated-ability-card {
width: 4.28rem; width: 3.2rem;
display: flex; display: flex;
flex-direction: column; flex-direction: column;
align-items: center; align-items: center;
@ -112,9 +107,6 @@
margin-right: 0.15rem; margin-right: 0.15rem;
margin-top: 0.15rem; margin-top: 0.15rem;
} }
.associated-ability-card-content-font:hover {
color: #0058e1;
}
} }
} }
.associated-ability-card:hover { .associated-ability-card:hover {

View File

@ -57,7 +57,7 @@
selectNow: { type: String, default: '' }, selectNow: { type: String, default: '' },
dataList: { type: Object, default: null }, dataList: { type: Object, default: null },
}) })
const select = ref('algorithm-display') const select = ref('business-presentation')
const list = ref([]) const list = ref([])
const selectNav = (key) => { const selectNav = (key) => {
select.value = key select.value = key

View File

@ -4,22 +4,17 @@
<div class="application-associated-ability-main"> <div class="application-associated-ability-main">
<div <div
class="associated-ability-card" class="associated-ability-card"
v-for="(item, index) in dataFrom" v-for="dataListitem in dataFrom[0].dataList"
:key="item.type"
>
<div class="associated-ability-card-title">
{{ item.type }}
</div>
<div class="associated-ability-card-content">
<div
class="associated-ability-card-content-font"
v-for="(dataListitem, dataListindex) in item.dataList"
:key="dataListitem.id" :key="dataListitem.id"
@click="switchFunction(dataListitem.id)" @click="switchFunction(dataListitem.id)"
> >
<span>{{ dataListindex + 1 }}</span> <div class="associated-ability-card-title">
{{ dataListitem.name }} {{ dataListitem.name }}
</div> </div>
<div class="associated-ability-card-content">
<div class="associated-ability-card-content-font">
{{ dataListitem.description }}
</div>
</div> </div>
</div> </div>
</div> </div>
@ -67,7 +62,7 @@
) )
watch( watch(
() => router.currentRoute.value.query.id, () => router.currentRoute.value.query.id,
(newValue, oldValue) => { () => {
if (oldid != router.currentRoute.value.query.id) { if (oldid != router.currentRoute.value.query.id) {
window.location.reload() window.location.reload()
} }
@ -85,11 +80,11 @@
align-items: center; align-items: center;
.application-associated-ability-main { .application-associated-ability-main {
margin-top: 0.4rem; margin-top: 0.4rem;
width: 13.14rem; width: 13.3rem;
display: flex; display: flex;
justify-content: space-between; justify-content: space-between;
.associated-ability-card { .associated-ability-card {
width: 4.28rem; width: 3.2rem;
display: flex; display: flex;
flex-direction: column; flex-direction: column;
align-items: center; align-items: center;
@ -112,9 +107,6 @@
margin-right: 0.15rem; margin-right: 0.15rem;
margin-top: 0.15rem; margin-top: 0.15rem;
} }
.associated-ability-card-content-font:hover {
color: #0058e1;
}
} }
} }
.associated-ability-card:hover { .associated-ability-card:hover {

View File

@ -66,7 +66,6 @@
} }
} }
const clickLink = (link) => { const clickLink = (link) => {
debugger
window.open(link) window.open(link)
} }
// //

View File

@ -4,22 +4,17 @@
<div class="application-associated-ability-main"> <div class="application-associated-ability-main">
<div <div
class="associated-ability-card" class="associated-ability-card"
v-for="(item, index) in dataFrom" v-for="(dataListitem, dataListindex) in dataFrom[0].dataList"
:key="item.type"
>
<div class="associated-ability-card-title">
{{ item.type }}
</div>
<div class="associated-ability-card-content">
<div
class="associated-ability-card-content-font"
v-for="(dataListitem, dataListindex) in item.dataList"
:key="dataListitem.id" :key="dataListitem.id"
@click="switchFunction(dataListitem.id)" @click="switchFunction(dataListitem.id)"
> >
<span>{{ dataListindex + 1 }}</span> <div class="associated-ability-card-title">
{{ dataListitem.name }} {{ dataListitem.name }}
</div> </div>
<div class="associated-ability-card-content">
<div class="associated-ability-card-content-font">
{{ dataListitem.description }}
</div>
</div> </div>
</div> </div>
</div> </div>
@ -85,11 +80,11 @@
align-items: center; align-items: center;
.application-associated-ability-main { .application-associated-ability-main {
margin-top: 0.4rem; margin-top: 0.4rem;
width: 13.14rem; width: 13.3rem;
display: flex; display: flex;
justify-content: space-between; justify-content: space-between;
.associated-ability-card { .associated-ability-card {
width: 4.28rem; width: 3.2rem;
display: flex; display: flex;
flex-direction: column; flex-direction: column;
align-items: center; align-items: center;
@ -112,9 +107,6 @@
margin-right: 0.15rem; margin-right: 0.15rem;
margin-top: 0.15rem; margin-top: 0.15rem;
} }
.associated-ability-card-content-font:hover {
color: #0058e1;
}
} }
} }
.associated-ability-card:hover { .associated-ability-card:hover {

View File

@ -61,7 +61,7 @@
selectNow: { type: String, default: '' }, selectNow: { type: String, default: '' },
dataList: { type: Object, default: null }, dataList: { type: Object, default: null },
}) })
const select = ref('algorithm-display') const select = ref('service-presentation')
const list = ref([]) const list = ref([])
const selectNav = (key) => { const selectNav = (key) => {
select.value = key select.value = key
@ -197,8 +197,6 @@
} }
}) })
list.value.push('关联能力') list.value.push('关联能力')
list.value.push('图层信息')
list.value.push('使用方式')
navList.value.forEach((item) => { navList.value.forEach((item) => {
console.log(item) console.log(item)
if (list.value.indexOf(item.name) > -1) { if (list.value.indexOf(item.name) > -1) {

View File

@ -10,7 +10,7 @@
<span></span> <span></span>
{{ item.deptName }} {{ item.deptName }}
</div> </div>
<template v-for="val in item.children" :key="val.resourceId"> <template v-for="val in item.arr" :key="val.resourceId">
<div class="item"> <div class="item">
<div class="name"> <div class="name">
<span>{{ val.resourceName }}</span> <span>{{ val.resourceName }}</span>
@ -48,11 +48,9 @@
// //
const removeFunction = (data) => { const removeFunction = (data) => {
dataForm.value.map((val) => { dataForm.value.map((val) => {
val.children = val.children.filter( val.arr = val.arr.filter((item) => item.resourceId !== data.resourceId)
(item) => item.resourceId !== data.resourceId
)
}) })
dataForm.value = dataForm.value.filter((val) => val.children.length !== 0) dataForm.value = dataForm.value.filter((val) => val.arr.length !== 0)
} }
</script> </script>

View File

@ -2,7 +2,12 @@
<div class="bg"> <div class="bg">
<home-header></home-header> <home-header></home-header>
<div class="box-container"> <div class="box-container">
<a-spin size="large" v-if="loadingPage" class="loading-box" :spinning="loadingPage" /> <a-spin
size="large"
v-if="loadingPage"
class="loading-box"
:spinning="loadingPage"
/>
<div class="nav-box"> <div class="nav-box">
<a-breadcrumb> <a-breadcrumb>
<a-breadcrumb-item>能力集市</a-breadcrumb-item> <a-breadcrumb-item>能力集市</a-breadcrumb-item>
@ -10,9 +15,20 @@
</a-breadcrumb> </a-breadcrumb>
</div> </div>
<div class="content"> <div class="content">
<a-anchor :affix="false" class="left" :getContainer="getId" @click="handleClickTab"> <a-anchor
<a-anchor-link class="left-item" :href="`#${data}`" :title="data" v-for="(data, i) in leftNav" :affix="false"
:key="i" :data-title="data" /> class="left"
:getContainer="getId"
@click="handleClickTab"
>
<a-anchor-link
class="left-item"
:href="`#${data}`"
:title="data"
v-for="(data, i) in leftNav"
:key="i"
:data-title="data"
/>
</a-anchor> </a-anchor>
<div class="right"> <div class="right">
<div class="top no-border-right"> <div class="top no-border-right">
@ -22,30 +38,55 @@
</div> </div>
<div class="td" v-for="(item, k) in detailArray" :key="k"> <div class="td" v-for="(item, k) in detailArray" :key="k">
<span v-if="item">{{ item.name || '--' }}</span> <span v-if="item">{{ item.name || '--' }}</span>
<span v-if="item" @click="deleteList(k)" class="icon-delete"> <span
</span> v-if="item"
<span class="add-img" @click="addList" @click="deleteList(k)"
v-if="!item && k === detailArray.filter(v => v).length"> class="icon-delete"
</span> ></span>
<span
class="add-img"
@click="addList"
v-if="!item && k === detailArray.filter((v) => v).length"
></span>
</div> </div>
</div> </div>
<div class="bottom bottomRef" id="bottomRef" ref="bottomRef"> <div class="bottom bottomRef" id="bottomRef" ref="bottomRef">
<div class="bottom-item" v-for="(data, i) in tableData" :key="i"> <div class="bottom-item" v-for="(data, i) in tableData" :key="i">
<div class="title" :id="data.title" :title="data.title" :ref="data.title">{{ data.title }} <div
class="title"
:id="data.title"
:title="data.title"
:ref="data.title"
>
{{ data.title }}
</div> </div>
<!-- 算法优势 --> <!-- 算法优势 -->
<div class="group-data" v-if="data.groupName"> <div class="group-data" v-if="data.groupName">
<!-- <compare-group-view :dataList="data.groupList"></compare-group-view> --> <!-- <compare-group-view :dataList="data.groupList"></compare-group-view> -->
<div v-if="data.groupList.length > 0"> <div v-if="data.groupList.length > 0">
<div class="group-box" v-for="(data, i) in data.groupList" :key="i"> <div
<div class="flex-row-start row-tr" v-for="(item, j) in Object.keys(data)" class="group-box"
:key="j" :class="j == Object.keys(data).length - 1 ? 'border-bottom' : ''"> v-for="(data, i) in data.groupList"
:key="i"
>
<div
class="flex-row-start row-tr"
v-for="(item, j) in Object.keys(data)"
:key="j"
:class="
j == Object.keys(data).length - 1 ? 'border-bottom' : ''
"
>
<div class="td-name" :style="{ height: getHeight(item) }"> <div class="td-name" :style="{ height: getHeight(item) }">
<span class="td-text td-name-text">{{ item }}</span> <span class="td-text td-name-text">{{ item }}</span>
</div> </div>
<div class="flex-row-start"> <div class="flex-row-start">
<div class="td" :style="{ height: getHeight(item) }" <div
v-for="(d, k) in data[item]" :key="k"> class="td"
:style="{ height: getHeight(item) }"
v-for="(d, k) in data[item]"
:key="k"
>
<a-tooltip placement="top" :title="d"> <a-tooltip placement="top" :title="d">
<span class="td-text">{{ d }}</span> <span class="td-text">{{ d }}</span>
</a-tooltip> </a-tooltip>
@ -54,20 +95,39 @@
</div> </div>
</div> </div>
</div> </div>
<div v-if="data.groupList.length == 0" class="no-data">暂无数据</div> <div v-if="data.groupList.length == 0" class="no-data">
暂无数据
</div> </div>
<div class="flex-row-start row-tr" v-else v-for="(rowData, j) in data.list" :key="j" </div>
:class="j == data.list.length - 1 ? 'border-bottom' : ''"> <div
<div class="td-name" :style="{ height: getHeight(rowData.name) }"> class="flex-row-start row-tr"
v-else
v-for="(rowData, j) in data.list"
:key="j"
:class="j == data.list.length - 1 ? 'border-bottom' : ''"
>
<div
class="td-name"
:style="{ height: getHeight(rowData.name) }"
>
<span class="td-text td-name-text"> <span class="td-text td-name-text">
{{ rowData.name }} {{ rowData.name }}
</span> </span>
</div> </div>
<div class="flex-row-start"> <div class="flex-row-start">
<div class="td" v-for="(item, k) in rowData.infoList" :key="k" <div
:style="{ height: getHeight(rowData.name) }"> class="td"
<video v-if="showVideo(rowData.name) && item" width="240" height="180" controls> v-for="(item, k) in rowData.infoList"
<source :src="item" type="video/mp4"> :key="k"
:style="{ height: getHeight(rowData.name) }"
>
<video
v-if="showVideo(rowData.name) && item"
width="240"
height="180"
controls
>
<source :src="item" type="video/mp4" />
您的浏览器不支持 HTML5 video 标签 您的浏览器不支持 HTML5 video 标签
</video> </video>
<a-tooltip v-else placement="top" :title="item"> <a-tooltip v-else placement="top" :title="item">
@ -82,10 +142,20 @@
</div> </div>
</div> </div>
<a-modal class="modal-box" title="请选择" :visible="showAddModal" :onOk='handleOk' :onCancel='handleCancel'> <a-modal
<a-table :columns="columns" :data-source="dataList" style="height:610px;overflow-y:scroll" class="modal-box"
:row-selection="rowSelection" rowKey="id"> title="请选择"
</a-table> :visible="showAddModal"
:onOk="handleOk"
:onCancel="handleCancel"
>
<a-table
:columns="columns"
:data-source="dataList"
style="height: 610px; overflow-y: scroll"
:row-selection="rowSelection"
rowKey="id"
></a-table>
</a-modal> </a-modal>
<!-- <HomeFooter></HomeFooter> --> <!-- <HomeFooter></HomeFooter> -->
@ -97,14 +167,24 @@ import HomeFooter from '@/views/newHome/components/Footer'
import HomeHeader from '@/views/home/components/header' import HomeHeader from '@/views/home/components/header'
import CompareGroupView from '@/views/home/components/CompareGroupView' import CompareGroupView from '@/views/home/components/CompareGroupView'
import { pageWithAttrs } from '@/api/abilityStatistics' import { pageWithAttrs } from '@/api/abilityStatistics'
import { defineComponent, ref, onMounted, getCurrentInstance, computed, unref, reactive, nextTick, onCreated } from 'vue'; import {
defineComponent,
ref,
onMounted,
getCurrentInstance,
computed,
unref,
reactive,
nextTick,
onCreated,
} from 'vue'
import { selectOne } from '@/api/home' import { selectOne } from '@/api/home'
import { message, Tooltip, Table, Spin } from 'ant-design-vue' import { message, Tooltip, Table, Spin } from 'ant-design-vue'
import { useRouter } from 'vue-router'; import { useRouter } from 'vue-router'
const router = useRouter() const router = useRouter()
let queryId = router.currentRoute.value.query.id; let queryId = router.currentRoute.value.query.id
const ctx = getCurrentInstance(); const ctx = getCurrentInstance()
// 4 // 4
const pagination = ref([]) const pagination = ref([])
@ -123,9 +203,10 @@ const columns = ref([
const detailArray = ref(['', '', '', '']) const detailArray = ref(['', '', '', ''])
const titleInfoObj = { const titleInfoObj = {
'基本信息': [ 基本信息: [
{ {
text: '算法名称', key: 'name' text: '算法名称',
key: 'name',
}, },
{ {
text: '算法类别', text: '算法类别',
@ -134,38 +215,47 @@ const titleInfoObj = {
text: '部署位置', text: '部署位置',
}, },
{ {
text: '应用领域', key: '应用领域' text: '应用领域',
key: '应用领域',
}, },
{ {
text: '共享条件', key: 'shareCondition' text: '共享条件',
key: 'shareCondition',
}, },
{ {
text: '共享类型', key: 'shareType' text: '共享类型',
key: 'shareType',
}, },
{ {
text: '算法描述', key: 'description' text: '算法描述',
key: 'description',
}, },
{ {
text: '算法介绍视频', key: '算法介绍视频' text: '算法介绍视频',
key: '算法介绍视频',
}, },
], ],
'算法优势': [ 算法优势: [
{ {
text: '算法优势名称', key: 'name' text: '算法优势名称',
key: 'name',
}, },
{ {
text: '算法优势描述', key: 'desc' text: '算法优势描述',
key: 'desc',
}, },
], ],
'应用场景': [ 应用场景: [
{ {
text: '场景名称', key: '场景名称' text: '场景名称',
key: '场景名称',
}, },
{ {
text: '场景描述', key: '场景描述' text: '场景描述',
key: '场景描述',
}, },
], ],
'应用案例': [ 应用案例: [
{ {
text: '关联应用', text: '关联应用',
}, },
@ -176,7 +266,7 @@ const titleInfoObj = {
text: '算法应用期望达成效果', text: '算法应用期望达成效果',
}, },
], ],
'计费标准信息': [ 计费标准信息: [
{ {
text: '是否收费', text: '是否收费',
}, },
@ -190,27 +280,31 @@ const titleInfoObj = {
// text: '', key: '' // text: '', key: ''
// }, // },
], ],
'使用方式': [ 使用方式: [
{ {
text: '服务接口', text: '服务接口',
}, },
{ {
text: '接口请求方式', key: 'apiMethodType' text: '接口请求方式',
key: 'apiMethodType',
}, },
{ {
text: '技术文档', key: '' text: '技术文档',
key: '',
}, },
{ {
text: '是否支持试用', key: '' text: '是否支持试用',
key: '',
}, },
{ {
text: '试用描述', key: '' text: '试用描述',
key: '',
}, },
{ {
text: '试用地址', text: '试用地址',
}, },
], ],
'服务商': [ 服务商: [
{ {
text: '服务商名', text: '服务商名',
}, },
@ -221,48 +315,46 @@ const titleInfoObj = {
text: '服务商联系电话', text: '服务商联系电话',
}, },
], ],
'常见问题': [ 常见问题: [
{ {
text: '常见问题', text: '常见问题',
}, },
{ {
text: '回答', text: '回答',
}, },
] ],
} }
// //
const leftNav = ref([]) const leftNav = ref([])
Object.keys(titleInfoObj).map(v => leftNav.value.push(v)) Object.keys(titleInfoObj).map((v) => leftNav.value.push(v))
// //
const arrayStr = [ const arrayStr = ['算法优势', '应用场景', '计费标准信息', '常见问题']
'算法优势', '应用场景', '计费标准信息', '常见问题'
]
let textObj = { let textObj = {
'算法优势': { 算法优势: {
name: '算法优势名称', name: '算法优势名称',
desc: '算法优势描述' desc: '算法优势描述',
}, },
'应用场景': { 应用场景: {
name: '场景名称', name: '场景名称',
desc: '场景描述', desc: '场景描述',
}, },
'计费标准信息': { 计费标准信息: {
type: '计费方式', type: '计费方式',
price: '价格', price: '价格',
desc: '计费描述信息', desc: '计费描述信息',
'是否收费': '是否收费' 是否收费: '是否收费',
}, },
'常见问题': { 常见问题: {
question: '常见问题', question: '常见问题',
answer: '回答' answer: '回答',
}, },
} }
const showAddModal = ref(false) const showAddModal = ref(false)
const dataList = ref([]) const dataList = ref([])
const selectedRowKeys = ref([]); const selectedRowKeys = ref([])
let tableData = ref([]) let tableData = ref([])
const loadingPage = ref(false) const loadingPage = ref(false)
@ -272,10 +364,10 @@ const getId = () => {
const handleClickTab = (e, link) => { const handleClickTab = (e, link) => {
// //
e.preventDefault(); e.preventDefault()
if (link.href) { if (link.href) {
let ele = document.getElementById(link.href); let ele = document.getElementById(link.href)
ele && ele.scrollIntoView({ block: 'start', behavior: 'smooth' }); ele && ele.scrollIntoView({ block: 'start', behavior: 'smooth' })
} }
} }
@ -283,18 +375,18 @@ const handleClickTab = (e, link) => {
onMounted(() => { onMounted(() => {
selectedRowKeys.value.push(queryId) selectedRowKeys.value.push(queryId)
nextTick(() => { nextTick(() => {
getList().then(res => { getList().then((res) => {
initData() initData()
}) })
}) })
}) })
const initData = () => { const initData = () => {
loadingPage.value = true; loadingPage.value = true
// queryId // queryId
// //
Promise.all(selectedRowKeys.value.map(id => getDetail(id))).then(data => { Promise.all(selectedRowKeys.value.map((id) => getDetail(id)))
.then((data) => {
detailArray.value = [] detailArray.value = []
for (let index = 0; index < 4; index++) { for (let index = 0; index < 4; index++) {
if (data[index] == undefined) { if (data[index] == undefined) {
@ -310,7 +402,8 @@ const initData = () => {
}) })
loadingPage.value = false loadingPage.value = false
}).catch(err => { })
.catch((err) => {
loadingPage.value = false loadingPage.value = false
message.error(err || '获取算法详情失败,请重试!') message.error(err || '获取算法详情失败,请重试!')
}) })
@ -322,16 +415,16 @@ const getNewData = () => {
Object.keys(titleInfoObj).map((titleKey, i) => { Object.keys(titleInfoObj).map((titleKey, i) => {
// //
let _newObj = { let _newObj = {
'title': titleKey, title: titleKey,
} }
if (arrayStr.includes(titleKey)) { if (arrayStr.includes(titleKey)) {
_newObj.groupName = titleKey; _newObj.groupName = titleKey
_newObj.groupList = [] _newObj.groupList = []
} else { } else {
_newObj.list = [] _newObj.list = []
} }
let list = []; let list = []
titleInfoObj[titleKey].map(trName => { titleInfoObj[titleKey].map((trName) => {
let obj = { let obj = {
name: trName.text, name: trName.text,
} }
@ -343,7 +436,7 @@ const getNewData = () => {
} }
}) })
if (!arrayStr.includes(titleKey)) { if (!arrayStr.includes(titleKey)) {
_newObj.list = list; _newObj.list = list
} }
tableData.value.push(_newObj) tableData.value.push(_newObj)
}) })
@ -352,24 +445,24 @@ const getNewData = () => {
// //
const getInfoList = (rowItem) => { const getInfoList = (rowItem) => {
let arr = [] let arr = []
detailArray.value.map(item => { detailArray.value.map((item) => {
let val = undefined; let val = undefined
val = item[rowItem.key || rowItem.text] val = item[rowItem.key || rowItem.text]
arr.push(val) arr.push(val)
}) })
return arr; return arr
} }
// getGroupList // getGroupList
const getGroupList = (titleKey, trName) => { const getGroupList = (titleKey, trName) => {
let arr = [] let arr = []
detailArray.value.map(item => { detailArray.value.map((item) => {
if (arrayStr.includes(titleKey)) { if (arrayStr.includes(titleKey)) {
let groupItemObj = {} let groupItemObj = {}
let _list = item[titleKey] || []; let _list = item[titleKey] || []
let textInfo = textObj[titleKey] let textInfo = textObj[titleKey]
_list.map(v => { _list.map((v) => {
Object.keys(v).map(d => { Object.keys(v).map((d) => {
if (textInfo[d] !== undefined) { if (textInfo[d] !== undefined) {
groupItemObj[textInfo[d]] = v[d] groupItemObj[textInfo[d]] = v[d]
} }
@ -379,27 +472,27 @@ const getGroupList = (titleKey, trName) => {
} }
}) })
let _arr = translateArray(arr) let _arr = translateArray(arr)
return _arr; return _arr
} }
// //
const translateArray = (list) => { const translateArray = (list) => {
let arr = [] let arr = []
if (list.every(v => JSON.stringify(v) == '{}')) { if (list.every((v) => JSON.stringify(v) == '{}')) {
arr = [] arr = []
} else { } else {
let itemObj = list.find(v => JSON.stringify(v) !== '{}') let itemObj = list.find((v) => JSON.stringify(v) !== '{}')
let obj = {} let obj = {}
Object.keys(itemObj).map(v => { Object.keys(itemObj).map((v) => {
let arr2 = [] let arr2 = []
list.map(item => { list.map((item) => {
arr2.push(item[v] || '') arr2.push(item[v] || '')
}) })
obj[v] = arr2 obj[v] = arr2
}) })
arr.push(obj); arr.push(obj)
} }
return arr; return arr
} }
// //
@ -407,9 +500,7 @@ const getList = () => {
const data = { const data = {
deptIds: [], deptIds: [],
districtId: '', districtId: '',
infoList: [ infoList: [{ attrType: '组件类型', attrValue: '智能算法' }],
{ attrType: "组件类型", attrValue: "智能算法" }
],
name: '', name: '',
orderField: 'total', orderField: 'total',
orderType: 'DESC', orderType: 'DESC',
@ -419,7 +510,8 @@ const getList = () => {
type: '', type: '',
} }
return new Promise((resolve, reject) => { return new Promise((resolve, reject) => {
pageWithAttrs(data).then((res) => { pageWithAttrs(data)
.then((res) => {
dataList.value = res.data.data.records || [] dataList.value = res.data.data.records || []
nextTick(() => { nextTick(() => {
// //
@ -427,7 +519,8 @@ const getList = () => {
// selectedRowKeys.value.push(dataList.value[1].id) // selectedRowKeys.value.push(dataList.value[1].id)
}) })
resolve(res) resolve(res)
}).catch(err => { })
.catch((err) => {
reject(err) reject(err)
}) })
}) })
@ -452,9 +545,9 @@ const addList = () => {
} }
const handleOk = () => { const handleOk = () => {
if (selectedRowKeys.length > 4) { if (selectedRowKeys.value.length > 4) {
message.error('最多选择四个算法!') message.error('最多选择四个算法!')
return false; return false
} }
initData() initData()
showAddModal.value = false showAddModal.value = false
@ -467,20 +560,19 @@ const handleCancel = () => {
const rowSelection = computed(() => { const rowSelection = computed(() => {
return { return {
selectedRowKeys: unref(selectedRowKeys), selectedRowKeys: unref(selectedRowKeys),
onChange: changableRowKeys => { onChange: (changableRowKeys) => {
if (changableRowKeys.length > 4) { if (changableRowKeys.length > 4) {
message.error('最多选择四个算法!') message.error('最多选择四个算法!')
} else { } else {
selectedRowKeys.value = changableRowKeys; selectedRowKeys.value = changableRowKeys
} }
if (selectedRowKeys.value.length > 4) { if (selectedRowKeys.value.length > 4) {
selectedRowKeys.value = selectedRowKeys.value.splice(4) selectedRowKeys.value = selectedRowKeys.value.splice(4)
} }
}, },
hideDefaultSelections: true, hideDefaultSelections: true,
}; }
}); })
// //
const getHeight = (name) => { const getHeight = (name) => {
@ -497,16 +589,17 @@ const showVideo = (name) => {
if (name.indexOf('视频') !== -1) { if (name.indexOf('视频') !== -1) {
return true return true
} }
return false; return false
} }
// //
const getDetail = (id) => { const getDetail = (id) => {
return new Promise((resolve, reject) => { return new Promise((resolve, reject) => {
selectOne(id).then((res) => { selectOne(id)
.then((res) => {
resolve(res.data && res.data.data) resolve(res.data && res.data.data)
}).catch(err => { })
.catch((err) => {
reject(err) reject(err)
}) })
}) })
@ -519,7 +612,7 @@ const isJson = (str) => {
let obj = JSON.parse(str) let obj = JSON.parse(str)
return true return true
} catch (e) { } catch (e) {
return false; return false
} }
} }
} }
@ -527,16 +620,16 @@ const isJson = (str) => {
// infoList // infoList
const formatterData = (obj) => { const formatterData = (obj) => {
let _newObj = {} let _newObj = {}
obj.infoList.map(v => { obj.infoList.map((v) => {
_newObj[v.attrType] = isJson(v.attrValue) ? JSON.parse(v.attrValue) : v.attrValue; _newObj[v.attrType] = isJson(v.attrValue)
? JSON.parse(v.attrValue)
: v.attrValue
}) })
let _obj = Object.assign({}, obj, _newObj) let _obj = Object.assign({}, obj, _newObj)
return _obj return _obj
} }
</script> </script>
<style lang="less" scoped> <style lang="less" scoped>
.bg { .bg {
background: #fff; background: #fff;
@ -596,7 +689,6 @@ const formatterData = (obj) => {
padding-left: 10px; padding-left: 10px;
} }
.left { .left {
width: 200px; width: 200px;
height: 600px; height: 600px;
@ -653,7 +745,6 @@ const formatterData = (obj) => {
align-items: center; align-items: center;
} }
.icon-delete { .icon-delete {
position: absolute; position: absolute;
right: 10px; right: 10px;
@ -666,7 +757,6 @@ const formatterData = (obj) => {
} }
} }
.bottom { .bottom {
width: 100%; width: 100%;
overflow-y: auto; overflow-y: auto;
@ -695,7 +785,6 @@ const formatterData = (obj) => {
display: flex; display: flex;
align-items: center; align-items: center;
justify-content: center; justify-content: center;
} }
.td { .td {
@ -711,7 +800,6 @@ const formatterData = (obj) => {
table-layout: fixed; table-layout: fixed;
} }
.td-text { .td-text {
width: 290px; width: 290px;
font-size: 14px; font-size: 14px;
@ -726,7 +814,6 @@ const formatterData = (obj) => {
width: 200px; width: 200px;
} }
.row-tr { .row-tr {
border: 1px solid #dddee1; border: 1px solid #dddee1;
border-right: none; border-right: none;
@ -754,7 +841,6 @@ const formatterData = (obj) => {
.no-data { .no-data {
height: 100px; height: 100px;
width: 100%; width: 100%;
;
display: flex; display: flex;
align-items: center; align-items: center;
justify-content: center; justify-content: center;
@ -804,4 +890,7 @@ const formatterData = (obj) => {
color: #212121; color: #212121;
border-bottom: 1px solid #dddee1; border-bottom: 1px solid #dddee1;
} }
:deep(.ant-checkbox-indeterminate) {
display: none;
}
</style> </style>

View File

@ -20,6 +20,18 @@
labelAlign="left" labelAlign="left"
autocomplete="off" autocomplete="off"
> >
<div class="base-info">
<a-form-item
label="申请标题"
name="title"
:rules="[{ required: true, message: '请输入申请标题' }]"
>
<a-input
placeholder="请输入能力申请标题"
v-model:value="formName.title"
/>
</a-form-item>
</div>
<div class="base-info"> <div class="base-info">
<a-form-item <a-form-item
label="申请人信息" label="申请人信息"
@ -59,71 +71,71 @@
<a-input <a-input
placeholder="请输入单位" placeholder="请输入单位"
v-model:value="formName.unit" v-model:value="formName.unit"
disabled
/> />
</a-form-item> </a-form-item>
</div> </div>
<div class="base-info">
<a-form-item <a-form-item
style="margin-bottom: 10px" label="应用系统"
label="申请应用" name="applicationSystem"
name="system" :rules="[{ required: true, message: '请选择应用系统' }]"
:rules="[{ required: true, message: '请输入申请应用' }]"
> >
<!-- <a-tooltip placement="top"> --> <a-select
<!-- <template #title> v-model:value="formName.applicationSystem"
<span>{{ formName.formNameSystem }}</span> show-search
</template> --> placeholder="请选择应用系统"
<a-input style="width: 200px"
style="width: 350px; background-color: #f5f5f5" :options="systemOptions"
v-model:value="formName.formNameSystem" @focus="handleFocus"
:disabled="disabled" @blur="handleBlur"
/> @change="systemHandleChange"
<span style="width: 350px; background-color: #f5f5f5"></span> @search="systemHandleSearch"
<!-- </a-tooltip> --> ></a-select>
</a-form-item> </a-form-item>
<a-form-item <a-form-item
style="margin-bottom: 10px" class="applicationScene"
label="应用场景" label="应用场景"
name="scene" name="applicationScene"
:rules="[{ required: true, message: '请输入应用场景' }]" :rules="[{ required: true, message: '请选择应用场景' }]"
style="width: 6.93rem"
> >
<a-textarea <a-select
style=" v-model:value="formName.applicationScene"
width: 500px; :options="applicationSceneOpthion"
height: 150px; mode="tags"
font-size: 16px; :size="size"
line-height: 24px; placeholder="请选择应用场景"
color: #333; :filterOption="false"
border: 1px solid #e0e0e0; :searchValue="false"
resize: none; style="width: 5.87rem"
border-radius: 6px; ></a-select>
padding: 10px;
"
v-model:value="formName.scene"
/>
</a-form-item> </a-form-item>
</div>
<div>
<a-form-item <a-form-item
style="margin-bottom: 10px" label="应用背景"
label="申请依据" name="applicationBackground"
name="basis" :rules="[{ required: true, message: '请输入应用背景' }]"
:rules="[{ required: true, message: '请输入申请依据' }]"
> >
<a-textarea <a-input
style=" placeholder="请输入应用背景"
width: 500px; v-model:value="formName.applicationBackground"
height: 150px;
font-size: 16px;
line-height: 24px;
color: #333;
border: 1px solid #e0e0e0;
border-radius: 6px;
padding: 10px;
resize: none;
"
v-model:value="formName.basis"
/> />
</a-form-item> </a-form-item>
</div>
<div>
<a-form-item
label="期望效果"
name="effectWish"
:rules="[{ required: true, message: '请输入期望效果' }]"
>
<a-input
placeholder="请输入期望效果"
v-model:value="formName.effectWish"
/>
</a-form-item>
</div>
<a-form-item <a-form-item
style="color: #666; font-size: 16px" style="color: #666; font-size: 16px"
@ -206,11 +218,7 @@
<div> <div>
<img src="../../assets/home/success.png" alt="" /> <img src="../../assets/home/success.png" alt="" />
</div> </div>
<p> <p>您已成功申请能力,请耐心等待审批结果结果会第一时间通知您</p>
您已成功申请{{
formName.formNameSystem || ''
}},请耐心等待审批结果结果会第一时间通知您
</p>
</div> </div>
</div> </div>
</article> </article>
@ -238,8 +246,10 @@
relaunch, relaunch,
selectOne, selectOne,
} from '@/api/home' } from '@/api/home'
import { getCategoryTreePage } from '@/api/personalCenter'
import mybus from '@/myplugins/mybus' import mybus from '@/myplugins/mybus'
import { sgcDel, getApplyForm } from '@/api/personalCenter' import { sgcDel, getApplyForm } from '@/api/personalCenter'
import { pageWithAttrs } from '@/api/home'
// import { baseURL } from '@/config' // import { baseURL } from '@/config'
// import AsideMenu from './components/asideMenu.vue' // import AsideMenu from './components/asideMenu.vue'
@ -257,16 +267,18 @@
const disabled = ref(false) const disabled = ref(false)
const baseURL = window.SITE_CONFIG.apiURL const baseURL = window.SITE_CONFIG.apiURL
let record = ref('1') let record = ref('1')
const text = ref('')
const formName = reactive({ const formName = reactive({
title: '', //
applicationSystem: [], //
applicationScene: [], //
applicationBackground: '', //
effectWish: '', //
user: '', user: '',
userId: '', userId: '',
phone: '', phone: '',
unit: '', unit: '',
area: '',
system: [], system: [],
scene: '',
basis: '',
formNameSystem: '',
enclosure: '', // enclosure: '', //
}) })
const dataList = ref([]) const dataList = ref([])
@ -294,7 +306,21 @@
// console.log('================>', res, formName.phone) // console.log('================>', res, formName.phone)
}) })
} }
const applicationSceneOpthion = ref([])
getCategoryTreePage({
page: 1,
limit: 20,
dictTypeId: '1513712507692818433',
deFlage: 0,
}).then((res) => {
res.data.data.list.map((val) => {
applicationSceneOpthion.value.push({
value: val.dictLabel,
label: val.dictLabel,
})
})
// console.log('========>', applicationSceneOpthion.value)
})
// console.log(formName.system) // console.log(formName.system)
const formRef = ref() const formRef = ref()
const applySuccess = ref(true) const applySuccess = ref(true)
@ -350,6 +376,31 @@
if (!formName) { if (!formName) {
return message.error('请设置表单名称') return message.error('请设置表单名称')
} }
let ids = []
formName.system = []
list.value.map((val) => {
val.arr.map((item) => {
formName.system.push({
resourceId: item.resourceId,
resourceName: item.resourceName,
})
console.log(item.id)
ids.push(item.id)
})
})
console.log('提交数据==========================>', formName, ids)
submitApply(formName).then((res) => {
applySuccess.value = false
message.success('操作成功!')
console.log('能力申请================>', res)
if (ids) {
sgcDel({ ids: ids }).then((res) => {
if (res.data.msg === 'success') {
mybus.emit('getSgcNum')
}
})
}
})
// if (arr && arr.length !== 0) { // if (arr && arr.length !== 0) {
// console.log('') // console.log('')
// const obj = ref({}) // const obj = ref({})
@ -480,6 +531,7 @@
label: '交通运输局', label: '交通运输局',
}, },
]) ])
const systemOptions = ref([])
const handleChange = (info) => { const handleChange = (info) => {
if (info.file.status !== 'uploading') { if (info.file.status !== 'uploading') {
@ -538,6 +590,63 @@
// }) // })
// }) // })
// }) // })
//
const flag = ref(true)
const systemHandleChange = (value) => {
console.log(`selected ${value}`)
}
const systemHandleSearch = (value) => {
console.log(`search ${value}`)
text.value = value
systemOptions.value = []
window.setTimeout(() => {
if (flag.value && text.value == value && text.value !== '') {
console.log('1秒未输入~~~~~~~~~~~~~~~~~~~~~~~~~~')
pageWithAttrs({
pageNum: 99999,
pageSize: 5,
type: '应用资源',
name: text.value,
infoList: [],
}).then((res) => {
if (res.data.code == 0) {
if (res.data.data.records.length == 0) {
message.warning('该关键词,暂无应用资源!')
} else {
res.data.data.records.map((val) => {
systemOptions.value.push({
value: val.name,
label: val.name,
})
})
console.log(
'第一次获取===================>',
systemOptions.value
)
}
} else {
message.error('获取数据失败!')
}
})
}
}, 500)
}
const handleBlur = () => {
console.log('blur')
flag.value = false
}
const handleFocus = () => {
console.log('focus')
flag.value = true
systemOptions.value = []
}
// const filterOption = (input, option) => {
// return option.value.toLowerCase().indexOf(input.toLowerCase()) >= 0
// }
onBeforeUnmount(() => { onBeforeUnmount(() => {
mybus.off('reomveOldData') mybus.off('reomveOldData')
}) })
@ -561,6 +670,12 @@
baseURL, baseURL,
beforeUpload, beforeUpload,
dataList, dataList,
systemHandleChange,
systemHandleSearch,
handleBlur,
handleFocus,
systemOptions,
applicationSceneOpthion,
} }
}, },
} }
@ -599,6 +714,7 @@
} }
.base-info { .base-info {
display: flex; display: flex;
justify-content: space-between;
} }
:deep(.ant-form-item-label) { :deep(.ant-form-item-label) {
label { label {
@ -631,4 +747,12 @@
color: #000; color: #000;
} }
} }
.applicationScene {
:deep(.ant-select-selector) {
overflow-x: scroll;
}
:deep(.ant-select-selection-overflow) {
flex-wrap: nowrap;
}
}
</style> </style>

View File

@ -51,6 +51,7 @@
<script setup> <script setup>
import { ref, reactive, defineProps } from 'vue' import { ref, reactive, defineProps } from 'vue'
import mybus from '@/myplugins/mybus' import mybus from '@/myplugins/mybus'
import { updateVisits } from '@/api/home'
const props = defineProps({ const props = defineProps({
resourceList: { type: Array, default: null }, resourceList: { type: Array, default: null },
resourceTotal: { type: String, default: '' }, resourceTotal: { type: String, default: '' },
@ -63,6 +64,19 @@
}) })
const current = ref(1) const current = ref(1)
const openHref = (item) => { const openHref = (item) => {
console.log(item.id, 'wowowo')
console.log(item.visits, 'wowowo')
const arrList = ref([])
arrList.value = JSON.parse(window.sessionStorage.getItem('visits'))
if (arrList.value.indexOf(item.id) === -1) {
arrList.value.push(item.id)
updateVisits({
id: item.id,
visits: item.visits || '0',
}).then(() => {
window.sessionStorage.setItem('visits', JSON.stringify(arrList.value))
})
}
window.open(item.link) window.open(item.link)
// window.open( // window.open(
// window.SITE_CONFIG.previewUrl + // window.SITE_CONFIG.previewUrl +

View File

@ -11,10 +11,13 @@
:key="itemContent" :key="itemContent"
@click="tabClick(index, itemContent, itemContent)" @click="tabClick(index, itemContent, itemContent)"
:class=" :class="
clickList[index].content.indexOf(itemContent) != -1 ? 'down' : '' clickList[index].content.indexOf(itemContent.labelName) != -1 ||
clickList[index].content.indexOf(itemContent) != -1
? 'down'
: ''
" "
> >
{{ itemContent }} {{ itemContent.labelName || itemContent }}
</span> </span>
</div> </div>
</div> </div>
@ -43,11 +46,11 @@
<!-- 搜索@search="onSearch" --> <!-- 搜索@search="onSearch" -->
<div class="searchInput"> <div class="searchInput">
<a-input-search <a-input-search
v-model:value="name" v-model:value="mapSearchParam.cameraName"
placeholder="请输入关键词" placeholder="请输入关键词"
enter-button="搜索" enter-button="搜索"
size="large" size="large"
@change="onSearch" @change="getCamera"
/> />
<a-button <a-button
type="primary" type="primary"
@ -85,20 +88,70 @@
selectedRowKeys: selectedRowKeys, selectedRowKeys: selectedRowKeys,
onChange: onSelectChange, onChange: onSelectChange,
}" }"
></a-table> >
<template #bodyCell="{ column, record }">
<template v-if="column.dataIndex === 'operation'">
<a @click="openVideo(record.channelCode)">预览</a>
</template>
</template>
</a-table>
</div> </div>
<a-modal
v-model:visible="visible"
title="视频预览"
:width="750"
destroyOnClose
>
<template #footer></template>
<div style="width: 100%; display: flex; justify-content: center">
<div style="width: 100%; height: 100%">
<vue3VideoPlay v-bind="options" />
</div>
</div>
</a-modal>
</div> </div>
</template> </template>
<script setup> <script setup>
import VideoSurveillance from '@/views/home/videoSurveillance' import VideoSurveillance from '@/views/home/videoSurveillance'
import { getCategoryTreePage } from '@/api/personalCenter' import { getCategoryTreePage } from '@/api/personalCenter'
import { dataType } from 'element-plus/es/components/table-v2/src/common' import { dataType } from 'element-plus/es/components/table-v2/src/common'
import { ref, onMounted } from 'vue' import { ref, reactive, onMounted } from 'vue'
import { getCameraByParentId } from '@/api/videoSurveillance' import {
getCameraByParentId,
getStreamByChannelCode,
getCameraAllLabel,
} from '@/api/videoSurveillance'
import { sgcInsert } from '@/api/home' import { sgcInsert } from '@/api/home'
import { message } from 'ant-design-vue' import { message } from 'ant-design-vue'
import mybus from '@/myplugins/mybus' import mybus from '@/myplugins/mybus'
const options = reactive({
width: '700px', //
height: '400px', //
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',
], //,
})
let visible = ref(false)
const pagination = ref({ const pagination = ref({
total: 0, total: 0,
current: 1, current: 1,
@ -109,12 +162,14 @@
const mapSearchParam = ref({ const mapSearchParam = ref({
// //
parentId: '', parentId: '',
cameraName: '',
checkStatus: '1', checkStatus: '1',
pageNum: pagination.value.current, pageNum: pagination.value.current,
pageSize: pagination.value.pageSize, pageSize: pagination.value.pageSize,
gpsX: '', gpsX: '',
gpsY: '', gpsY: '',
radius: '', radius: '',
labelCodes: [],
}) })
const showMap = ref(true) const showMap = ref(true)
onMounted(() => { onMounted(() => {
@ -144,6 +199,17 @@
content: [], content: [],
}, },
]) ])
const openVideo = (id) => {
console.log('打开视频', id)
const param = {
channelCode: id,
}
getStreamByChannelCode(param).then((res) => {
console.log(res)
visible.value = true
options.value.src = res.data.data
})
}
// const dataTypeList = () => { // const dataTypeList = () => {
// if (tabList.value[0].content.indexOf('') != -1) { // if (tabList.value[0].content.indexOf('') != -1) {
// tabList.value[1].content = ['123344', '213124'] // tabList.value[1].content = ['123344', '213124']
@ -173,6 +239,7 @@
let tableHeight = ref('600') let tableHeight = ref('600')
//tab //tab
const tabClick = (indexFather, name) => { const tabClick = (indexFather, name) => {
debugger
if (clickList.value[indexFather].content.indexOf(name) != -1) { if (clickList.value[indexFather].content.indexOf(name) != -1) {
if (name == '视频资源') { if (name == '视频资源') {
tableHeight.value = 330 tableHeight.value = 330
@ -195,14 +262,12 @@
tabList.value[1].content = [] tabList.value[1].content = []
clickList.value[1].content = [] clickList.value[1].content = []
clickList.value[indexFather].content[0] = name clickList.value[indexFather].content[0] = name
const params = { getCameraAllLabel().then((res) => {
page: 1, res.data.data.forEach((val) => {
limit: 50, tabList.value[1].content.push({
dictTypeId: '1541336217898848257', labelCode: val.labelCode,
} labelName: val.labelName,
getCategoryTreePage(params).then((res) => { })
res.data.data.list.forEach((val) => {
tabList.value[1].content.push(val.dictLabel)
}) })
}) })
} else if (name == '云资源') { } else if (name == '云资源') {
@ -230,22 +295,26 @@
clickList.value[indexFather].content.push(name) clickList.value[indexFather].content.push(name)
} }
} }
console.log('clickList.value', clickList.value) // labelCode
mapSearchParam.value.labelCodes = []
clickList.value[1].content.map((item) => {
mapSearchParam.value.labelCodes.push(item.labelCode)
})
console.log('选中的标签code', mapSearchParam.value)
mapSearchParam.value.labelCodes = mapSearchParam.value.labelCodes + ''
getCamera()
} }
// //
const nullClick = () => { const nullClick = () => {
clickList.value[1].content = [] clickList.value[1].content = []
mapSearchParam.value.labelCodes = ''
getCamera()
console.log('hhhhhhhh') console.log('hhhhhhhh')
} }
const name = ref('')
//
const onSearch = (name) => {
name.value = name
console.log(name.value)
}
// //
const clean = () => { const clean = () => {
name.value = '' mapSearchParam.value.cameraName = ''
getCamera()
} }
// //
const apply = () => { const apply = () => {
@ -287,8 +356,15 @@
{ {
title: '归属', title: '归属',
dataIndex: 'nodeName', dataIndex: 'nodeName',
width: '60%',
key: 'nodeName', key: 'nodeName',
}, },
{
title: '操作',
dataIndex: 'operation',
width: '10%',
key: 'channelId',
},
]) ])
const allClick = ref([]) const allClick = ref([])
const onSelectChange = (selectedRowKeys, selectedRows) => { const onSelectChange = (selectedRowKeys, selectedRows) => {

View File

@ -139,6 +139,9 @@
this.addressMatchUrl = window.SITE_CONFIG.POI_URL; this.addressMatchUrl = window.SITE_CONFIG.POI_URL;
// //
this.initAddressMatchService() this.initAddressMatchService()
this.getCameraAllLabel()
//
// this.getCameraAllPage()
// this.getMapPoint() // this.getMapPoint()
// parentId // parentId
mybus.off('getCameraByParentId') mybus.off('getCameraByParentId')
@ -169,7 +172,7 @@
const type = e.layerType; const type = e.layerType;
const circleLayer = e.layer; const circleLayer = e.layer;
if (type === 'circle') { if (type === 'circle') {
const radius = (e.layer._mRadius).toFixed(2) const radius = (e.layer._mRadius)
if (radius > 5000) { if (radius > 5000) {
message.info('最大支持5km范围的圈选') message.info('最大支持5km范围的圈选')
} else { } else {
@ -177,8 +180,8 @@
this.hiMap.mapObj.featureGroup.addLayer(circlePloygonLayer); this.hiMap.mapObj.featureGroup.addLayer(circlePloygonLayer);
this.hiMap.mapObj.layerGroup.set('circlePloygonLayer', circlePloygonLayer); this.hiMap.mapObj.layerGroup.set('circlePloygonLayer', circlePloygonLayer);
console.log('查询图层为何发生了改变', e.layer); console.log('查询图层为何发生了改变', e.layer);
this.mapSearchParam.gpsX = e.layer._latlng.lng.toFixed(2) this.mapSearchParam.gpsX = e.layer._latlng.lng
this.mapSearchParam.gpsY = e.layer._latlng.lat.toFixed(2) this.mapSearchParam.gpsY = e.layer._latlng.lat
this.mapSearchParam.radius = radius this.mapSearchParam.radius = radius
const params = { const params = {
gpsX: this.mapSearchParam.gpsX, gpsX: this.mapSearchParam.gpsX,
@ -251,20 +254,23 @@
this.addressMatchService.code(geoCodeParam, match); this.addressMatchService.code(geoCodeParam, match);
} }
}, },
// getCameraAllPage(page) { getCameraAllPage(page) {
// let params = { let params = {
// name: '', name: '',
// page: page, page: page,
// pageSize: 20000, pageSize: 20000,
// } }
// selectByChannelName(params).then((res) => { getCameraAll(params).then((res) => {
// // let t1 = new Date().getTime(); // let t1 = new Date().getTime();
// this.cameraAllData = res.data.data // this.cameraAllData = res.data.data
// this.addResourceTomap('', res.data.data) this.addResourceTomap('videoMap', res.data)
// // let t2 = new Date().getTime(); // let t2 = new Date().getTime();
// // console.log("#############" + (t2 - t1)); // console.log("#############" + (t2 - t1));
// }) })
// }, },
getCameraAllLabel() {
},
tabChange(item) { tabChange(item) {
if (this.checkboxGroup.indexOf(item.labelName) !== -1) { if (this.checkboxGroup.indexOf(item.labelName) !== -1) {
if (item.labelName == '全部') { if (item.labelName == '全部') {

View File

@ -108,6 +108,7 @@
username: this.form.username, username: this.form.username,
}) })
window.sessionStorage.setItem('visits', JSON.stringify([])) window.sessionStorage.setItem('visits', JSON.stringify([]))
console.log('添加visits========================================>')
// console.log(this.handleRoute()) // console.log(this.handleRoute())
await this.$router.push('/home') await this.$router.push('/home')
} catch (error) { } catch (error) {

View File

@ -21,7 +21,10 @@
</template> </template>
<template #renderItem="{ item }"> <template #renderItem="{ item }">
<a-list-item key="item.title"> <a-list-item key="item.title">
<a-tooltip>
<template #title>{{ item.note1 || item.content }}</template>
<a-list-item-meta <a-list-item-meta
ellipsis="true"
:description=" :description="
item.note1 ? `摘要:${item.note1 || ''}` : item.content item.note1 ? `摘要:${item.note1 || ''}` : item.content
" "
@ -41,6 +44,7 @@
/> />
</template> </template>
</a-list-item-meta> </a-list-item-meta>
</a-tooltip>
<div class="pulish-time">发布时间{{ item.createDate }}</div> <div class="pulish-time">发布时间{{ item.createDate }}</div>
<!-- <template #extra> <!-- <template #extra>
<a-image <a-image

View File

@ -509,6 +509,7 @@
getTaskHandleDetailInfo, getTaskHandleDetailInfo,
getDemandForm, getDemandForm,
nengliziyuanshangjiaapply, nengliziyuanshangjiaapply,
getTaskVariables,
} from '@/api/personalCenter' } from '@/api/personalCenter'
import { selectOneDel } from '@/api/home' import { selectOneDel } from '@/api/home'
const downloadFile = (path, name) => { const downloadFile = (path, name) => {
@ -593,6 +594,12 @@
resourceId: { type: String, default: null }, resourceId: { type: String, default: null },
}) })
const getInfo = () => { const getInfo = () => {
console.log(props.processInstanceId, '============================')
if (props.processDefinitionName == '能力申请') {
getTaskVariables({ taskId: props.processInstanceId }).then((res) => {
console.log('获取数据====================>', res.data.data)
})
}
if (props.processDefinitionName == '能力申请流程') { if (props.processDefinitionName == '能力申请流程') {
getApplyForm(props.businessKey).then((res) => { getApplyForm(props.businessKey).then((res) => {
const { data } = res.data const { data } = res.data
@ -662,6 +669,7 @@
}) })
const getResourceURL = () => { const getResourceURL = () => {
console.log('111111111111111111111111111111', Cookies.get('token'))
const params = qs.stringify({ const params = qs.stringify({
token: Cookies.get('token'), token: Cookies.get('token'),
// processInstanceId: this.dataForm.processInstanceId // processInstanceId: this.dataForm.processInstanceId

View File

@ -60,7 +60,7 @@
<div class="content-body-content"> <div class="content-body-content">
<p class="content-body-content-son"> <p class="content-body-content-son">
审核结果{{ 审核结果{{
item.ended ? '审核完成' : item.backToFirst ? '被驳回' : '审核中' item.ended ? '审核完成' : item.backToFirst ? '被终止' : '审核中'
}} }}
</p> </p>
</div> </div>
@ -95,10 +95,16 @@
<div></div> <div></div>
</div> </div>
<div class="button-box"> <div class="button-box">
<div class="button" @click="showDetail(item)">查看流程</div> <div
<div class="button" @click="showAdd(item)" v-if="item.backToFirst"> class="button"
修改 @click="showDetail(item)"
v-if="!(item.processDefinitionName == '能力申请')"
>
查看流程
</div> </div>
<!-- <div class="button" @click="showAdd(item)" v-if="item.backToFirst">
修改
</div> -->
<div <div
v-if=" v-if="
!( !(
@ -107,7 +113,11 @@
item.ended == false item.ended == false
) )
" "
v-show="item.resourceStatusTip == '正常' && item.ended" v-show="
item.resourceStatusTip == '正常' &&
item.ended &&
item.processDefinitionName !== '能力申请'
"
class="button button-details" class="button button-details"
@click=" @click="
viewDetail( viewDetail(

View File

@ -95,7 +95,15 @@
<a-list-item> <a-list-item>
<a-skeleton avatar :title="false" :loading="item.loading" active> <a-skeleton avatar :title="false" :loading="item.loading" active>
<a-list-item-meta <a-list-item-meta
:description="item.description || '--'" :description="
item.description ||
(item.note1 &&
JSON.parse(item.note1)[0].channelName +
'等' +
JSON.parse(item.note1).length +
'个摄像头') ||
'--'
"
style="position: relative" style="position: relative"
> >
<template #title> <template #title>
@ -513,6 +521,8 @@
} }
val.checked = true val.checked = true
}) })
} else {
getListByDeptId(item)
} }
item.checkAll = true item.checkAll = true
checkedList.value.push(item.deptId) checkedList.value.push(item.deptId)
@ -665,11 +675,18 @@
// } // }
// } // }
// }) // })
if (checkedList.value.length == 0) { if (checkedListAbility.value.length == 0) {
message.error('请先选择需要申请的数据!') message.error('请先选择需要申请的数据!')
} else { } else {
// console.log('===================>', list.value) let arr = []
localStorage.setItem('applyList', JSON.stringify(list.value)) list.value.map((val) => {
val.arr = val.children.filter(
(item) => checkedListAbility.value.indexOf(item.resourceId) > -1
)
})
arr = list.value.filter((val) => val.arr.length !== 0)
console.log('一键申请===================>', arr)
localStorage.setItem('applyList', JSON.stringify(arr))
router.push({ router.push({
path: '/apply', path: '/apply',
}) })