Compare commits

..

No commits in common. 'e45baeec2675ef6da65f65846ca89e8da68fbe2e' and '4440104bfde8cb65881090060dcea4a53771b146' have entirely different histories.

Binary file not shown.

Before

Width:  |  Height:  |  Size: 17 KiB

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

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

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

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

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

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

Loading…
Cancel
Save