feat: 数字民警开发

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

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

@ -1,12 +1,12 @@
<template> <template>
<div class="PoliceAi"> <div class="PoliceAi">
<HistoricalRecords @getDetail="getDetail" /> <HistoricalRecords ref="HistoricalRecordsRef" @getDetail="getDetail" @addNew="addNew" />
<div class="PoliceAi-main"> <div class="PoliceAi-main">
<div class="case-title"> <div class="case-title">
<div class="case-item"> <div class="case-item">
<span>案件名称</span> <span>案件名称</span>
<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-option v-for="item in caseOptions" :key="item.id" :label="item.caseName" :value="item.id" />
</el-select> </el-select>
@ -50,89 +50,95 @@
<img src="../../assets/police/robot.png" alt=""> <img src="../../assets/police/robot.png" alt="">
<span>数字民警</span> <span>数字民警</span>
</div> </div>
<div v-if="message.type === '3'"> <div v-if="index !== conversationList.length -1 || !loading">
<div>您好您是要查询案件名称的分析结果吗</div> <!-- 案件分析结果 -->
<div class="btns"> <div v-if="message.intentType === '1'" class="robot-item">
<div class="btn-item"></div> <span>您好<span>{{ message.caseName }}</span> 的综合得分为<span :class="['score', message.totalScore >= 70 ? 'success' : 'warning']">{{ `${message.commonScore}+${message.specificCrimeScore}=${message.totalScore}` }}</span>
<div class="btn-item"></div> , 认定<span :class="['score', message.totalScore >= 70 ? 'success' : 'warning']">{{ message.scoreDesc }}</span>
</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>
</span> </span>
<span class="index-item"> <span class="robot-message-item">
<span class="label">指标名称</span> <span class="point" />
<span class="value">{{ message.indexName }}</span> <span>{{ `${message.commonIndexCount}个共性证据指标占${message.commonIndexHitCount}` }}</span>
</span> </span>
<span class="index-item"> <span class="robot-message-item">
<span class="label">分析结果</span> <span class="point" />
<span class="value">{{ message.result }}</span> <span>{{ `${message.specificCrimeIndexCount}${message.specificCrime}${message.specificCrimeIndexHitCount}` }}</span>
</span> </span>
</div> </div>
<div v-if="message.qaSplitList.length > 0 || message.evidenceNames.length > 0" class="collapse" @click="changeShowFlag(message)"> <!-- 案件概述 案件证据指引 -->
<span>相关笔录及证据</span> <div v-if="message.intentType === '2' || message.intentType === '3'" class="robot-item">
<i class="el-icon-arrow-down" /> <span class="robot-message-item">
{{ message.text }}
</span>
</div> </div>
<div v-if="message.showFlag" class="collapse-content"> <!-- 指标回答 -->
<div v-if="message.qaSplitList.length > 0" class="title"></div> <div v-if="message.intentType === '0'">
<div v-for="(item, index) in message.qaSplitList" :key="index" class="record-item"> <div class="robot-item index-content">
<span class="file-name">{{ item.noteRecordName }}</span> <span class="index-item">
<span>{{ item.answer }}</span> <span class="label">指标类型</span>
<span>{{ item.question }}</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>
<div v-if="message.evidenceNames.length > 0" class="title"></div> <div v-if="message.qaSplitList.length > 0 || message.evidenceNames.length > 0" class="collapse" @click="changeShowFlag(message)">
<div class="evidence-list"> <span>相关笔录及证据</span>
<div v-for="(item, index) in message.evidenceNames" :key="index" class="evidence-item"> <i class="el-icon-arrow-down" />
<span class="file-name" @click="downloadEvidence(item)">{{ item.evidenceName }}</span>
</div>
</div> </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>
</div>
<!-- dify回答 --> <!-- dify回答 -->
<div v-if="message.type === '0'"> <div v-if="message.type === '0'">
<div class="robot-item"> <div class="robot-item">
<span class="robot-message-item"> <span class="robot-message-item">
{{ message.answer }} {{ message.answer }}
</span> </span>
</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 class="el-icon-arrow-down" /> <i class="el-icon-arrow-down" />
</div> </div>
<div v-if="message.segmentVOList.length > 0" 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>{{ item.name }}</span> <span>{{ item.name }}</span>
<span v-html="item.snippet" /> <span v-html="item.snippet" />
</div>
</div> </div>
</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> </div>
</transition> </transition>
@ -193,6 +199,7 @@ export default {
navListFlag: true, navListFlag: true,
sendText: '', sendText: '',
indexFlag: false, indexFlag: false,
loading: false,
conversationId: '', conversationId: '',
conversationList: [], conversationList: [],
indexTypeList: [ indexTypeList: [
@ -275,9 +282,18 @@ export default {
text: item.question text: item.question
}) })
this.getAnswerContent(item) this.getAnswerContent(item)
this.navListFlag = false
} }
} }
}, },
//
addNew() {
this.caseId = ''
this.conversationId = ''
this.caseActorName = ''
this.conversationList = []
this.navListFlag = true
},
// //
fetchData() { fetchData() {
queryCaseList({}, 1, 99999).then(res => { queryCaseList({}, 1, 99999).then(res => {
@ -316,7 +332,7 @@ export default {
this.chat({ this.chat({
caseId: this.caseId, caseId: this.caseId,
conversationId: this.conversationId, conversationId: this.conversationId,
query: '', query: item.name,
type: '1', type: '1',
intentType: item.type intentType: item.type
}) })
@ -354,8 +370,12 @@ export default {
}) })
}, },
chat(obj) { chat(obj) {
this.loading = true
robotChat(obj).then(res => { robotChat(obj).then(res => {
if (res.code === 200) { if (res.code === 200) {
if (this.conversationId !== res.data.conversationId) {
this.$refs.HistoricalRecordsRef.getList()
}
this.conversationId = res.data.conversationId this.conversationId = res.data.conversationId
this.getAnswerContent(res.data) this.getAnswerContent(res.data)
} }
@ -401,6 +421,10 @@ export default {
}) })
} }
this.$nextTick(() => { this.$nextTick(() => {
setTimeout(() => {
this.loading = false
}, 3000)
this.scrollToBottom() this.scrollToBottom()
}) })
}, },
@ -528,6 +552,21 @@ export default {
color: #3763FF; 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 { .robot-item {
background: #F5F7FF; background: #F5F7FF;

Loading…
Cancel
Save