Compare commits

...

6 Commits

Binary file not shown.

After

Width:  |  Height:  |  Size: 17 KiB

@ -5,7 +5,7 @@ const network = {
// 默认的接口地址 如果是开发环境和生产环境走vab-mock-server当然你也可以选择自己配置成需要的接口地址
baseURL:
process.env.NODE_ENV === 'development'
? 'http://192.168.10.25:8097/fu-hsi-server'
? 'http://192.168.10.142:8097/fu-hsi-server'
: '/fuHsiApi',
// 配后端数据的接收方式application/json;charset=UTF-8或者application/x-www-form-urlencoded;charset=UTF-8
contentType: 'application/json;charset=UTF-8',

@ -7,7 +7,7 @@
-->
<template>
<div class="HoverButton" @click="getList">
<div v-if="!isActived" class="HoverButton" @click="getList">
<el-popover
placement="left"
width="240"
@ -24,7 +24,7 @@
<!-- <i class="el-icon-arrow-down el-icon--right" /> -->
</div>
<div class="case-list">
<span v-for="(item,index) in caseList" :key="index" class="case-item" @click="openPage(item)">{{ item.caseName }}</span>
<span :title="item.caseName " v-for="(item,index) in caseList" :key="index" class="case-item" @click="openPage(item)">{{ item.caseName }}</span>
</div>
</div>
<div
@ -50,6 +50,12 @@ export default {
]
}
},
computed: {
isActived() {
return this.$route.path === '/policeAi'
}
},
mounted() {
this.getList()
},
@ -140,6 +146,10 @@ export default {
padding-left: 45px;
line-height: 34px;
cursor: pointer;
width: 200px;
overflow: hidden;
text-overflow: ellipsis;
white-space: nowrap;
}
.case-item:hover {
background: #F5F5F5;

@ -100,6 +100,7 @@ export default {
//
onBtnClicked() {
this.$emit('addNew')
this.selectId = ''
},
//
async getList() {

@ -89,12 +89,13 @@
</div>
<div v-if="message.qaSplitList.length > 0 || message.evidenceNames.length > 0" class="collapse" @click="changeShowFlag(message)">
<span>相关笔录及证据</span>
<i class="el-icon-arrow-down" />
<i v-if="!message.showFlag" class="el-icon-arrow-down" />
<i v-if="message.showFlag" class="el-icon-arrow-up" />
</div>
<div v-if="message.showFlag" class="collapse-content">
<div v-if="message.qaSplitList.length > 0" class="title"></div>
<div v-for="(item, index) in message.qaSplitList" :key="index" class="record-item">
<span class="file-name">{{ item.noteRecordName }}</span>
<span class="file-name" @click="downloadRecord(item)">{{ item.noteName }}</span>
<span>{{ item.answer }}</span>
<span>{{ item.question }}</span>
</div>
@ -117,12 +118,13 @@
</div>
<div v-if="message.segmentVOList.length > 0" class="collapse">
<span>相关知识内容</span>
<i class="el-icon-arrow-down" />
<i v-if="!message.showFlag" class="el-icon-arrow-down" />
<i v-if="message.showFlag" class="el-icon-arrow-up" />
</div>
<div v-if="message.segmentVOList.length > 0" class="collapse-content">
<div v-if="message.segmentVOList.length > 0 && message.showFlag" class="collapse-content">
<div class="title">涉及文件</div>
<div v-for="(item, index) in message.segmentVOList" :key="index" class="record-item">
<span>{{ item.name }}</span>
<span class="file-name ">{{ item.name }}</span>
<span v-html="item.snippet" />
</div>
</div>
@ -149,10 +151,11 @@
<div class="send-bottom">
<el-input
v-model="sendText"
placeholder="可咨询案件内容、输入@或# 可选择查询指标结果"
placeholder="可咨询案件内容、输入@可选择查询指标结果"
@keyup.enter.native="handleSend"
/>
<img src="@/assets/police/send.png" alt="" @click="handleSend">
<img v-if="!loading" src="@/assets/police/send.png" alt="" @click="handleSend">
<img v-if="loading" src="@/assets/police/pause.png" alt="">
<div v-if="indexFlag" class="select_index">
<div class="top">
<span v-for="(item, index) in indexTypeList" :key="index" :class="[item.type === activedIndex?'actived':'']" @click="changeType(item)">
@ -162,6 +165,7 @@
</div>
<el-input
v-model="searchName"
maxlength="50"
class="top-input"
placeholder="请输入内容"
>
@ -184,7 +188,7 @@ import { queryCaseList, robotChat, conversationInfoList } from '@/api/caseManage
import { queryIndexData } from '@/api/indexRule'
import HistoricalRecords from './HistoricalRecords.vue'
import { baseURL } from '@/config'
import { downloadEvidence } from '@/api/config/uploadApi'
import { downloadEvidence, commonDownloadFile } from '@/api/config/uploadApi'
export default {
name: 'PoliceAi',
components: {
@ -266,6 +270,7 @@ export default {
methods: {
//
async getDetail(id, caseId) {
this.loading = false
this.caseId = caseId
this.selectCase(this.caseId)
this.conversationList = []
@ -320,6 +325,7 @@ export default {
this.caseActorName = obj.caseActorName
},
selectCaseType(item) {
if (this.loading) return
if (!this.caseId) {
this.$baseMessage.error('请选择案件!')
return
@ -353,8 +359,14 @@ export default {
downloadEvidence(item) {
this.downloadFile(`${baseURL}${downloadEvidence}${item.evidenceId}`, item.evidenceName)
},
//
downloadRecord(item) {
// const fileId = item.fileIds.split(',')[0]
this.downloadFile(`${baseURL}${commonDownloadFile}${item.noteFileId}`, item.noteName)
},
//
selectIndex(item) {
if (this.loading) return
this.indexFlag = false
this.searchName = ''
this.conversationList.push({
@ -451,6 +463,7 @@ export default {
}
},
handleSend() {
if (this.loading) return
if (!this.caseId) {
this.$baseMessage.error('请选择案件!')
return
@ -459,7 +472,7 @@ export default {
this.$baseMessage.error('请输入内容!')
return
}
this.sendText = ''
this.conversationList.push({
role: 'user',
text: this.sendText
@ -472,6 +485,7 @@ export default {
type: '0',
intentType: ''
})
this.sendText = ''
}
}
}
@ -536,8 +550,9 @@ export default {
overflow-y: auto;
width: 1154px;
position: relative;
// padding-right: 16px;
.robot {
.robot-top {
display: flex;
align-items: center;
@ -574,6 +589,7 @@ export default {
line-height: 28px;font-size: 16px;
color: #333333;
padding: 16px;
width: 90%;
margin-bottom: 16px;
display: flex;
flex-direction: column;
@ -665,6 +681,7 @@ export default {
margin: 24px 0;
text-align: right;font-size: 16px;
color: #333333;
padding-right: 16px;
}
.nav-list {
display: flex;

@ -11,7 +11,7 @@
<div class="left" :style="{margin:fullFlag?'24px 0 0 24px':''}">
<div class="title">{{ `实体(${nodeLabels.length})` }}</div>
<div class="node-list">
<span v-for="(item,index) in nodeLabels" :key="index" :class="[item.selected === true?'actived':'']" class="node-item" @click="selectItem(item)">{{ item.name }}</span>
<span v-for="(item,index) in nodeLabels" :key="index" :style="{ background: item.selected === true? item.color: item.lightColor }" class="node-item" @click="selectItem(item)">{{ item.name }}</span>
</div>
<div class="title">{{ `关系(${relTypes.length})` }}</div>
<div class="node-list">
@ -26,6 +26,7 @@
class="input-item"
size="lager"
placeholder="请输入"
@keyup.enter.native="search"
clearable
/>
<div class="btn" @click="search"></div>
@ -71,7 +72,7 @@ export default {
}
},
mounted() {
this.queryCaseGraph()
this.caseAtlasOption.toolbox = {
//
show: true,
@ -153,7 +154,8 @@ export default {
picType: '1', caseId: this.$route.params['id'],
queryStr: this.searchName,
nodeLabels,
relTypes
relTypes,
nodeLabelColorMap: this.nodeLabels
}).then(res => {
if (res['code'] === 200) {
this.caseAtlasOption.series[0].links = res.data.list
@ -170,7 +172,9 @@ export default {
if (res.code === 200) {
res.data.nodeLabels.forEach(e => {
this.nodeLabels.push({
name: e,
name: e.name,
color: e.itemStyle.color,
lightColor: e.itemStyle.lightColor,
selected: false
})
})
@ -180,6 +184,7 @@ export default {
selected: false
})
})
this.queryCaseGraph()
}
},
search() {
@ -194,6 +199,7 @@ export default {
selectItem(item) {
this.searchName = ''
this.$set(item, 'selected', !item.selected)
this.$forceUpdate()
this.queryCaseGraph()
}
}

@ -72,9 +72,9 @@ const caseAtlasConfig = {
}
},
force: {
repulsion: 200, // 节点之间的斥力因子。支持数组表达斥力范围,值越大斥力越大。
gravity: 0.01, // 节点受到的向中心的引力因子。该值越大节点越往中心点靠拢。
edgeLength: 400, // 边的两个节点之间的距离,这个距离也会受 repulsion影响 。值越大则长度越长
repulsion: 2500, // 节点之间的斥力因子。支持数组表达斥力范围,值越大斥力越大。
gravity: 0.05, // 节点受到的向中心的引力因子。该值越大节点越往中心点靠拢。
edgeLength: 500, // 边的两个节点之间的距离,这个距离也会受 repulsion影响 。值越大则长度越长
layoutAnimation: true // 因为力引导布局会在多次迭代后才会稳定,这个参数决定是否显示布局的迭代动画
// 在浏览器端节点数据较多(>100的时候不建议关闭布局过程会造成浏览器假死。
},

Loading…
Cancel
Save