feat: 数字民警开发

ocr_2.1
xiangcongshuai 5 months ago
parent f0d82b768c
commit ea32db9f9c

Binary file not shown.

After

Width:  |  Height:  |  Size: 174 KiB

@ -5,7 +5,7 @@ const network = {
// 默认的接口地址 如果是开发环境和生产环境走vab-mock-server当然你也可以选择自己配置成需要的接口地址
baseURL:
process.env.NODE_ENV === 'development'
? 'http://192.168.10.138: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',

@ -80,6 +80,10 @@ export default {
})
},
async delCaseList(list) {
const hasValue = list.indexOf(this.selectId) !== -1
if (hasValue) {
this.$emit('addNew')
}
const res = await conversationDelete(list)
if (res.code === 200) {
this.$baseMessage.success('删除成功!')
@ -88,7 +92,7 @@ export default {
},
//
onBtnClicked() {
this.$emit('addNew')
},
//
async getList() {

@ -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;

Loading…
Cancel
Save