|
|
|
@ -1,12 +1,12 @@
|
|
|
|
|
<template>
|
|
|
|
|
<div class="PoliceAi">
|
|
|
|
|
<HistoricalRecords @getDetail="getDetail" />
|
|
|
|
|
<HistoricalRecords ref="HistoricalRecordsRef" @getDetail="getDetail" @addNew="addNew" />
|
|
|
|
|
<div class="PoliceAi-main">
|
|
|
|
|
<div class="case-title">
|
|
|
|
|
<div class="case-item">
|
|
|
|
|
<span>案件名称</span>
|
|
|
|
|
<span>|</span>
|
|
|
|
|
<el-select v-model="caseId" style="width: 200px;" clearable placeholder="请选择案件" @change="selectCase">
|
|
|
|
|
<el-select v-model="caseId" :disabled="conversationId !==''" style="width: 200px;" clearable placeholder="请选择案件" @change="selectCase">
|
|
|
|
|
<el-option v-for="item in caseOptions" :key="item.id" :label="item.caseName" :value="item.id" />
|
|
|
|
|
</el-select>
|
|
|
|
|
|
|
|
|
@ -50,89 +50,95 @@
|
|
|
|
|
<img src="../../assets/police/robot.png" alt="">
|
|
|
|
|
<span>数字民警</span>
|
|
|
|
|
</div>
|
|
|
|
|
<div v-if="message.type === '3'">
|
|
|
|
|
<div>您好,您是要查询【案件名称】的分析结果吗?</div>
|
|
|
|
|
<div class="btns">
|
|
|
|
|
<div class="btn-item">是</div>
|
|
|
|
|
<div class="btn-item">否</div>
|
|
|
|
|
</div>
|
|
|
|
|
</div>
|
|
|
|
|
<!-- 案件分析结果 -->
|
|
|
|
|
<div v-if="message.intentType === '1'" class="robot-item">
|
|
|
|
|
<span>您好,【<span>{{ message.caseName }}</span> 】的综合得分为<span :class="['score', message.totalScore >= 70 ? 'success' : 'warning']">{{ `${message.commonScore}+${message.specificCrimeScore}=${message.totalScore}` }}</span>
|
|
|
|
|
分, 认定<span :class="['score', message.totalScore >= 70 ? 'success' : 'warning']">{{ message.scoreDesc }}</span>
|
|
|
|
|
</span>
|
|
|
|
|
<span class="robot-message-item">
|
|
|
|
|
<span class="point" />
|
|
|
|
|
<span>{{ `${message.commonIndexCount}个共性证据指标占${message.commonIndexHitCount}个` }}</span>
|
|
|
|
|
</span>
|
|
|
|
|
<span class="robot-message-item">
|
|
|
|
|
<span class="point" />
|
|
|
|
|
<span>{{ `${message.specificCrimeIndexCount}个${message.specificCrime}占${message.specificCrimeIndexHitCount}个` }}</span>
|
|
|
|
|
</span>
|
|
|
|
|
</div>
|
|
|
|
|
<!-- 案件概述 案件证据指引 -->
|
|
|
|
|
<div v-if="message.intentType === '2' || message.intentType === '3'" class="robot-item">
|
|
|
|
|
<span class="robot-message-item">
|
|
|
|
|
{{ message.text }}
|
|
|
|
|
</span>
|
|
|
|
|
</div>
|
|
|
|
|
<!-- 指标回答 -->
|
|
|
|
|
<div v-if="message.intentType === '0'">
|
|
|
|
|
<div class="robot-item index-content">
|
|
|
|
|
<span class="index-item">
|
|
|
|
|
<span class="label">指标类型:</span>
|
|
|
|
|
<span class="value">{{ getIndexType(message.indexType) }}</span>
|
|
|
|
|
<div v-if="index !== conversationList.length -1 || !loading">
|
|
|
|
|
<!-- 案件分析结果 -->
|
|
|
|
|
<div v-if="message.intentType === '1'" class="robot-item">
|
|
|
|
|
<span>您好,【<span>{{ message.caseName }}</span> 】的综合得分为<span :class="['score', message.totalScore >= 70 ? 'success' : 'warning']">{{ `${message.commonScore}+${message.specificCrimeScore}=${message.totalScore}` }}</span>
|
|
|
|
|
分, 认定<span :class="['score', message.totalScore >= 70 ? 'success' : 'warning']">{{ message.scoreDesc }}</span>
|
|
|
|
|
</span>
|
|
|
|
|
<span class="index-item">
|
|
|
|
|
<span class="label">指标名称:</span>
|
|
|
|
|
<span class="value">{{ message.indexName }}</span>
|
|
|
|
|
<span class="robot-message-item">
|
|
|
|
|
<span class="point" />
|
|
|
|
|
<span>{{ `${message.commonIndexCount}个共性证据指标占${message.commonIndexHitCount}个` }}</span>
|
|
|
|
|
</span>
|
|
|
|
|
<span class="index-item">
|
|
|
|
|
<span class="label">分析结果:</span>
|
|
|
|
|
<span class="value">{{ message.result }}</span>
|
|
|
|
|
<span class="robot-message-item">
|
|
|
|
|
<span class="point" />
|
|
|
|
|
<span>{{ `${message.specificCrimeIndexCount}个${message.specificCrime}占${message.specificCrimeIndexHitCount}个` }}</span>
|
|
|
|
|
</span>
|
|
|
|
|
</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" />
|
|
|
|
|
<!-- 案件概述 案件证据指引 -->
|
|
|
|
|
<div v-if="message.intentType === '2' || message.intentType === '3'" class="robot-item">
|
|
|
|
|
<span class="robot-message-item">
|
|
|
|
|
{{ message.text }}
|
|
|
|
|
</span>
|
|
|
|
|
</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>{{ item.answer }}</span>
|
|
|
|
|
<span>{{ item.question }}</span>
|
|
|
|
|
<!-- 指标回答 -->
|
|
|
|
|
<div v-if="message.intentType === '0'">
|
|
|
|
|
<div class="robot-item index-content">
|
|
|
|
|
<span class="index-item">
|
|
|
|
|
<span class="label">指标类型:</span>
|
|
|
|
|
<span class="value">{{ getIndexType(message.indexType) }}</span>
|
|
|
|
|
</span>
|
|
|
|
|
<span class="index-item">
|
|
|
|
|
<span class="label">指标名称:</span>
|
|
|
|
|
<span class="value">{{ message.indexName }}</span>
|
|
|
|
|
</span>
|
|
|
|
|
<span class="index-item">
|
|
|
|
|
<span class="label">分析结果:</span>
|
|
|
|
|
<span class="value">{{ message.result }}</span>
|
|
|
|
|
</span>
|
|
|
|
|
</div>
|
|
|
|
|
<div v-if="message.evidenceNames.length > 0" class="title">证据:</div>
|
|
|
|
|
<div class="evidence-list">
|
|
|
|
|
<div v-for="(item, index) in message.evidenceNames" :key="index" class="evidence-item">
|
|
|
|
|
<span class="file-name" @click="downloadEvidence(item)">{{ item.evidenceName }}</span>
|
|
|
|
|
</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" />
|
|
|
|
|
</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>{{ item.answer }}</span>
|
|
|
|
|
<span>{{ item.question }}</span>
|
|
|
|
|
</div>
|
|
|
|
|
<div v-if="message.evidenceNames.length > 0" class="title">证据:</div>
|
|
|
|
|
<div class="evidence-list">
|
|
|
|
|
<div v-for="(item, index) in message.evidenceNames" :key="index" class="evidence-item">
|
|
|
|
|
<span class="file-name" @click="downloadEvidence(item)">{{ item.evidenceName }}</span>
|
|
|
|
|
</div>
|
|
|
|
|
</div>
|
|
|
|
|
|
|
|
|
|
</div>
|
|
|
|
|
</div>
|
|
|
|
|
</div>
|
|
|
|
|
|
|
|
|
|
<!-- dify回答 -->
|
|
|
|
|
<div v-if="message.type === '0'">
|
|
|
|
|
<div class="robot-item">
|
|
|
|
|
<span class="robot-message-item">
|
|
|
|
|
{{ message.answer }}
|
|
|
|
|
</span>
|
|
|
|
|
</div>
|
|
|
|
|
<div v-if="message.segmentVOList.length > 0" class="collapse">
|
|
|
|
|
<span>相关知识内容</span>
|
|
|
|
|
<i class="el-icon-arrow-down" />
|
|
|
|
|
</div>
|
|
|
|
|
<div v-if="message.segmentVOList.length > 0" 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 v-html="item.snippet" />
|
|
|
|
|
<!-- dify回答 -->
|
|
|
|
|
<div v-if="message.type === '0'">
|
|
|
|
|
<div class="robot-item">
|
|
|
|
|
<span class="robot-message-item">
|
|
|
|
|
{{ message.answer }}
|
|
|
|
|
</span>
|
|
|
|
|
</div>
|
|
|
|
|
<div v-if="message.segmentVOList.length > 0" class="collapse">
|
|
|
|
|
<span>相关知识内容</span>
|
|
|
|
|
<i class="el-icon-arrow-down" />
|
|
|
|
|
</div>
|
|
|
|
|
<div v-if="message.segmentVOList.length > 0" 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 v-html="item.snippet" />
|
|
|
|
|
</div>
|
|
|
|
|
</div>
|
|
|
|
|
</div>
|
|
|
|
|
</div>
|
|
|
|
|
<div v-else class="loading">
|
|
|
|
|
<img src="../../assets/common/loading.gif" alt="">
|
|
|
|
|
<span>模型正在生成结果....</span>
|
|
|
|
|
</div>
|
|
|
|
|
<!-- <div v-if="message.type === '3'">
|
|
|
|
|
<div>您好,您是要查询【案件名称】的分析结果吗?</div>
|
|
|
|
|
<div class="btns">
|
|
|
|
|
<div class="btn-item">是</div>
|
|
|
|
|
<div class="btn-item">否</div>
|
|
|
|
|
</div>
|
|
|
|
|
</div> -->
|
|
|
|
|
|
|
|
|
|
</div>
|
|
|
|
|
</transition>
|
|
|
|
@ -193,6 +199,7 @@ export default {
|
|
|
|
|
navListFlag: true,
|
|
|
|
|
sendText: '',
|
|
|
|
|
indexFlag: false,
|
|
|
|
|
loading: false,
|
|
|
|
|
conversationId: '',
|
|
|
|
|
conversationList: [],
|
|
|
|
|
indexTypeList: [
|
|
|
|
@ -275,9 +282,18 @@ export default {
|
|
|
|
|
text: item.question
|
|
|
|
|
})
|
|
|
|
|
this.getAnswerContent(item)
|
|
|
|
|
this.navListFlag = false
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
},
|
|
|
|
|
// 开启新对话
|
|
|
|
|
addNew() {
|
|
|
|
|
this.caseId = ''
|
|
|
|
|
this.conversationId = ''
|
|
|
|
|
this.caseActorName = ''
|
|
|
|
|
this.conversationList = []
|
|
|
|
|
this.navListFlag = true
|
|
|
|
|
},
|
|
|
|
|
// 请求接口数据
|
|
|
|
|
fetchData() {
|
|
|
|
|
queryCaseList({}, 1, 99999).then(res => {
|
|
|
|
@ -316,7 +332,7 @@ export default {
|
|
|
|
|
this.chat({
|
|
|
|
|
caseId: this.caseId,
|
|
|
|
|
conversationId: this.conversationId,
|
|
|
|
|
query: '',
|
|
|
|
|
query: item.name,
|
|
|
|
|
type: '1',
|
|
|
|
|
intentType: item.type
|
|
|
|
|
})
|
|
|
|
@ -354,8 +370,12 @@ export default {
|
|
|
|
|
})
|
|
|
|
|
},
|
|
|
|
|
chat(obj) {
|
|
|
|
|
this.loading = true
|
|
|
|
|
robotChat(obj).then(res => {
|
|
|
|
|
if (res.code === 200) {
|
|
|
|
|
if (this.conversationId !== res.data.conversationId) {
|
|
|
|
|
this.$refs.HistoricalRecordsRef.getList()
|
|
|
|
|
}
|
|
|
|
|
this.conversationId = res.data.conversationId
|
|
|
|
|
this.getAnswerContent(res.data)
|
|
|
|
|
}
|
|
|
|
@ -401,6 +421,10 @@ export default {
|
|
|
|
|
})
|
|
|
|
|
}
|
|
|
|
|
this.$nextTick(() => {
|
|
|
|
|
setTimeout(() => {
|
|
|
|
|
this.loading = false
|
|
|
|
|
}, 3000)
|
|
|
|
|
|
|
|
|
|
this.scrollToBottom()
|
|
|
|
|
})
|
|
|
|
|
},
|
|
|
|
@ -528,6 +552,21 @@ export default {
|
|
|
|
|
color: #3763FF;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
.loading {
|
|
|
|
|
display: flex;
|
|
|
|
|
background: #F5F7FF;
|
|
|
|
|
border-radius: 16px 0px 16px 16px;
|
|
|
|
|
line-height: 28px;font-size: 16px;
|
|
|
|
|
color: #333333;
|
|
|
|
|
padding: 16px;
|
|
|
|
|
margin-bottom: 16px;
|
|
|
|
|
align-items: center;
|
|
|
|
|
img {
|
|
|
|
|
width: 38px;
|
|
|
|
|
height: 38px;
|
|
|
|
|
margin-right: 8px;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
.robot-item {
|
|
|
|
|
|
|
|
|
|
background: #F5F7FF;
|
|
|
|
|