dev
xiangcongshuai 3 months ago
parent bd2a588df8
commit 115ddfb490

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.9 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.0 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.9 KiB

@ -119,7 +119,7 @@ export default {
}
::v-deep .el-dialog__header {
padding: 10px;
border-bottom: 1px solid #5B8BFF;
border-bottom: 1px solid #E9E9E9;
}
::v-deep .el-dialog__body {
padding: 10px 0 0;
@ -131,12 +131,12 @@ export default {
::v-deep .dialog-footer {
//background-color: #eff4f9;
text-align: center;
padding: 10px;
padding: 24px;
display: block;
border-top: 1px solid #dcdfe6;
}
::v-deep .el-dialog {
background: linear-gradient(to bottom, #E1ECFE, #FFFFFF);
// background: linear-gradient(to bottom, #E1ECFE, #FFFFFF);
}
.el-dialog__wrapper {
height: 1000px;

@ -15,6 +15,7 @@ const resetMessage = (options) => {
}
}
options.type = type
options.showClose = true
return resetMessage(options)
}
})

@ -176,7 +176,7 @@ export const asyncRoutes = [
name: 'HandleCases',
permission: 'p_handleCases',
component: () => import('@/views/operationManagement/HandleCases/index.vue'),
meta: { title: '案件批量处理', affix: false }
meta: { title: '案件批量分析', affix: false }
}
]
},

@ -70,7 +70,7 @@ export default {
padding: 0 !important;
}
::v-deep .el-dialog {
background: linear-gradient(to bottom, #E1ECFE, #FFFFFF);
// background: linear-gradient(to bottom, #E1ECFE, #FFFFFF);
}
.del-folder {
padding: 24px;

@ -64,7 +64,17 @@
<img v-if="item.type === 1" src="@/assets/file/type1.png" alt="">
<svg-icon v-if="item.type === 3" class="svg-img" icon-class="docx" />
<svg-icon v-if="item.type === 4" class="svg-img" icon-class="pdf" />
<img v-if="item.type === 2" class="file-img" :src="getImgUrl(item.fileId)" alt="">
<!-- <img :src="getImgUrl(item.fileId)" alt=""> -->
<el-image
v-if="item.type === 2"
class="file-img"
:src="getImgUrl(item.fileId)"
:zoom-rate="1.2"
:max-scale="7"
:min-scale="0.2"
:preview-src-list="[getImgUrl(item.fileId)]"
fit="cover"
/>
</div>
<el-input v-if="item.type === 1" v-model="item.fileName" class="footer folder-input" @blur="((val) => changeFolder(val,index) )" />

@ -43,7 +43,7 @@
</el-col>
<el-col :span="24">
<el-form-item label="供述材料" prop="confessionMaterial">
<el-input v-model="recordForm['confessionMaterial']" placeholder="请输入供述材料" />
<el-input v-model="recordForm['confessionMaterial']" placeholder="例如,第1次询问笔录" />
</el-form-item>
</el-col>
<el-col :span="24">
@ -69,7 +69,7 @@
<!--新增用户-->
<add-case-user ref="add" @reloadData="getUserList" />
</div>
</template>
</template>
<script>
import AddCaseUser from '@/views/caseDetails/components/edit/AddCaseUser.vue'
import { queryUserList } from '@/api/caseDetails'
@ -97,6 +97,7 @@ export default {
rules: {
personId: [{ required: true, message: '姓名不能为空!', trigger: 'blur' }],
lawAsker: [{ required: true, message: '询问人不能为空!', trigger: 'blur' }],
confessionMaterial: [{ required: true, message: '供述材料不能为空!', trigger: 'blur' }],
confessionTime: [{ required: true, message: '供述时间不能为空!', trigger: 'blur' }]
},
//

@ -3,9 +3,9 @@
<FormInfo ref="formInfoRef" :is-edit="true" />
<div class="analysis-main">
<div class="content">
<span class="title">笔录上传成功</span>
<span class="title">已发送提取</span>
<!-- <span class="desc">系统正在处理笔录信息可稍后在笔录列表中提交[笔录分析]以免超载</span> -->
<span class="btn" @click="closed"></span>
<span class="btn" @click="closed"></span>
</div>
</div>
@ -14,7 +14,7 @@
</template>
<script>
import FormInfo from './FormInfo.vue'
import { submitTask } from '@/api/caseDetails/ocr'
export default {
name: 'RecordAnalysis',
components: { FormInfo },
@ -25,15 +25,11 @@ export default {
},
methods: {
closed() {
submitTask({ recordId: this.$route.query.recordId }).then(res => {
if (res.code === 200) {
this.$store.dispatch(
'tabsBar/delRoute',
this.$route
)
this.$router.push({ path: `/case-details/${this.$route.params.id}/${this.$route.query.caseName}`, query: { isEdit: 1, caseNo: this.$route.query.caseNo }})
}
})
this.$store.dispatch(
'tabsBar/delRoute',
this.$route
)
this.$router.push({ path: `/case-details/${this.$route.params.id}/${this.$route.query.caseName}`, query: { isEdit: 1, caseNo: this.$route.query.caseNo }})
}
}
}
@ -41,10 +37,11 @@ export default {
<style lang="scss" scoped>
.RecordAnalysis {
display: flex;
flex-direction: row-reverse;
padding: 0 24px;
.analysis-main {
flex: 1;
margin-left: 16px;
margin-right: 16px;
// border: 1px dashed #3763FF;
border: 1px dashed transparent;
background: linear-gradient(#fff,#fff) padding-box,

@ -24,20 +24,23 @@
<div class="btn-list">
<!-- <img src="@/assets/record/reset_identify.png" alt=""> -->
<!-- <img src="@/assets/record/view_detail.png" alt=""> -->
<el-image
style="width: 16px; height: 16px;margin-right: 16px;"
:src="detailImg"
:preview-src-list="getImgUrlList(row)"
fit="cover"
@click="openDeatils(row)"
/>
<img src="@/assets/record/del.png" alt="" @click="del(row,rowIndex )">
<el-tooltip class="item" effect="dark" content="详情" placement="top-start">
<el-image
style="width: 16px; height: 16px;margin-right: 16px;"
:src="detailImg"
:preview-src-list="getImgUrlList(row)"
fit="cover"
/>
</el-tooltip>
<el-tooltip class="item" effect="dark" content="删除" placement="top-start">
<img src="@/assets/record/del.png" alt="" @click="del(row,rowIndex )">
</el-tooltip>
</div>
</template>
</vxe-grid>
<div class="footer-btns">
<div class="btn" @click="back"></div>
<div class="btn" @click="next"></div>
<div class="btn" @click="next"></div>
</div>
</div>
@ -147,9 +150,10 @@ export default {
.RecordIdentify {
display: flex;
padding: 0 24px;
flex-direction: row-reverse;
.record_table {
flex: 1;
margin-left: 18px;
margin-right: 18px;
}
.status {
display: flex;

@ -33,8 +33,8 @@
</div>
<div class="footer-btns">
<div class="reset_btn" @click="reset"></div>
<div class="btn" @click="save"></div>
<div class="btn" @click="submit"></div>
<div class="btn" @click="save"></div>
<div class="btn" @click="submit"></div>
</div>
</div>
@ -44,7 +44,8 @@ import * as vuedraggable from 'vuedraggable'
import FormInfo from './FormInfo.vue'
import { baseURL } from '@/config'
import { commonDownloadFile } from '@/api/config/uploadApi'
import { reviseOcrText, queryFileList } from '@/api/caseDetails/ocr'
import { reviseOcrText, queryFileList, submitTask } from '@/api/caseDetails/ocr'
export default {
name: 'RecordProofread',
components: { vuedraggable, FormInfo },
@ -90,11 +91,32 @@ export default {
reviseOcrText(list).then(res => {
if (res.code === 200) {
this.$baseMessage.success(res.msg || '保存成功!')
this.$store.dispatch(
'tabsBar/delRoute',
this.$route
)
this.$router.push({ path: `/case-details/${this.$route.params.id}/${this.$route.query.caseName}`, query: { isEdit: 1, caseNo: this.$route.query.caseNo }})
}
})
},
submit() {
this.save()
async submit() {
const list = []
this.dataList.forEach(e => {
list.push({
ocrId: e.ocrId,
reviseText: e.reviseText
})
})
reviseOcrText(list).then(res => {
if (res.code === 200) {
submitTask({ recordId: this.$route.query.recordId }).then(res => {
if (res.code === 200) {
this.$baseMessage.success(res.msg || '保存成功!')
}
})
}
})
this.$emit('submit')
}
}
@ -104,12 +126,13 @@ export default {
.RecordProofread {
display: flex;
padding: 0 24px;
flex-direction: row-reverse;
:deep(.el-scrollbar__wrap) {
overflow-x: hidden;
}
.proofread-content {
flex: 1;
margin-left: 18px;
margin-right: 18px;
display: flex;
.left {
width: 55%;

@ -180,9 +180,10 @@ export default {
.UploadRecord {
display: flex;
padding: 0 24px;
flex-direction: row-reverse;
.main-content {
flex: 1;
margin-left: 18px;
margin-right: 18px;
display: flex;
flex-direction: column;
.tips {

@ -26,8 +26,8 @@
class="input-item"
size="lager"
placeholder="请输入"
@keyup.enter.native="search"
clearable
@keyup.enter.native="search"
/>
<div class="btn" @click="search"></div>
</div>
@ -72,7 +72,6 @@ export default {
}
},
mounted() {
this.caseAtlasOption.toolbox = {
//
show: true,
@ -237,7 +236,8 @@ export default {
}
}
.right {
width: calc(100vw - 700px);
// width: calc(100vw - 700px);
flex: 1;
display: flex;
flex-direction: column;
background: radial-gradient(circle, rgba(255, 255, 255, 0.05), rgba(66, 135, 255, 0.05));

@ -20,7 +20,7 @@
<el-option v-for="item in indexSourceList" :key="item.value" :label="item.label" :value="item.value" />
</el-select>
<el-input v-model="atomicName" placeholder="原子指标名称" clearable style="width: 200px;margin-left: 16px;" />
<vxe-grid v-if="gridOptions.data.length > 0" :row-config="{isHover: true}" v-bind="gridOptions" style="margin-top: 10px">
<vxe-grid :row-config="{isHover: true}" v-bind="gridOptions" style="margin-top: 10px">
<template #operate="{row}">
<div class="btn-item">
<span>{{ row.record }}</span>
@ -97,7 +97,7 @@ export default {
{ title: '分析结果', width: '200px', field: 'indexResult', slots: { default: 'result' }},
// { title: '', width: '200px', slots: { default: 'operate' }, align: 'center' },
{ title: '指标名称', field: 'indexName', slots: { default: 'detail' }, align: 'left' },
{ title: '分值', field: 'score', width: '50px' }
{ title: '分值', field: 'score', width: '200px' }
// { title: '', field: 'indexSource', width: '200px', formatter: ({ cellValue }) => {
// return cellValue ? this.indexSourceList.find(item => item.value === cellValue).label : ''
// } }

@ -20,7 +20,7 @@
<el-option v-for="item in indexSourceList" :key="item.value" :label="item.label" :value="item.value" />
</el-select>
<el-input v-model="atomicName" placeholder="原子指标名称" clearable style="width: 200px;margin-left: 16px;" />
<vxe-grid v-if="gridOptions.data.length > 0" :row-config="{isHover: true}" v-bind="gridOptions" style="margin-top: 10px">
<vxe-grid :row-config="{isHover: true}" v-bind="gridOptions" style="margin-top: 10px">
<template #operate="{row}">
<div class="btn-item">
<span>{{ row.record }}</span>

@ -20,7 +20,7 @@
<el-option v-for="item in indexSourceList" :key="item.value" :label="item.label" :value="item.value" />
</el-select>
<el-input v-model="atomicName" placeholder="原子指标名称" clearable style="width: 200px;margin-left: 16px;" />
<vxe-grid :row-config="{isHover: true}" v-if="gridOptions.data.length > 0" v-bind="gridOptions" style="margin-top: 10px">
<vxe-grid :row-config="{isHover: true}" v-bind="gridOptions" style="margin-top: 10px">
<template #operate="{row}">
<div class="btn-item">
<span>{{ row.record }}</span>

@ -238,11 +238,11 @@ export default {
display: flex;
background: #FFFFFF;
height: 750px;
width: 1240px;
// width: 1240px;
.left {
width: 100%;
border-right: 1px solid #EAEAEA;
padding-right: 30px;
// border-right: 1px solid #EAEAEA;
// padding-right: 30px;
.search {
display: flex;
margin: 32px 32px 16px 32px;

@ -160,7 +160,7 @@ export default {
roleCode: [{ required: true, message: '角色不能为空!', trigger: 'blur' }],
lawAsker: [{ required: true, message: '询问人不能为空!', trigger: 'blur' }],
confessionTime: [{ required: true, message: '供述时间不能为空!', trigger: 'blur' }],
confessionMaterial: [{ required: true, message: '供述材料不能为空!', trigger: 'blur' }],
// confessionMaterial: [{ required: true, message: '!', trigger: 'blur' }],
fileIdList: [{ required: true, message: '上传材料不能为空!', trigger: 'blur' }]
},
//

@ -77,7 +77,7 @@
</div>
<div v-else class="flex-row pick-up-info">
<div class="flex-row left-title" style="align-items: center">
<span>综合得分</span>
<span style="margin-left: 6px;">综合得分</span>
<span :style="commonStyle" style="font-size: 30px;">{{ caseData.totalScore }}</span>
<div v-if="isEdit" class="model" @click="handleAnalysis"></div>
</div>
@ -576,7 +576,7 @@ export default {
display: flex;
position: absolute;
right: 48px;
top: 4px;
top: 8px;
}
.btns {
padding: 0 20px;
@ -590,8 +590,8 @@ export default {
justify-content: center;
align-items: center;
margin-right: 24px;
height: 38px;
line-height: 38px;
height: 34px;
line-height: 34px;
cursor: pointer;
span {
line-height: unset !important;
@ -622,7 +622,7 @@ export default {
>div {
height: 100%;
background: #FFFFFF;
padding: 20px;
padding: 24px;
box-sizing: border-box;
border-radius: 8px;
}
@ -633,7 +633,7 @@ export default {
}
.info-right {
// flex: 1;
width: calc(100% - 250px);
width: calc(100% - 256px);
margin-left: 10px;
>div {
margin-top: 10px;

@ -78,6 +78,8 @@
<div class="flex-column">
<div class="flex-row" style="align-items: center;margin-bottom: 5px">
<i v-if="item.isAnalysing" class="el-icon-loading" style="margin-right: 5px" />
<img v-if="item.totalScore && !item.isAnalysing" class="status_img" src="../../assets/record/success.png" alt="">
<span v-if="!item.totalScore && !item.isAnalysing" class="circle" />
<span class="status-title">{{ formatterStatusName(item) }}</span>
</div>
<span class="subtitle">{{ item.caseAnalysisSuccessTime }}</span>
@ -432,6 +434,19 @@ export default {
color: #999999;
}
}
.status_img {
width: 20px;
height: 20px;
margin-right: 16px;
}
.circle {
width: 17px; /* 圆的直径 */
height: 17px; /* 圆的直径 */
border: 3px solid #3763FF; /* 边框颜色和宽度 */
border-radius: 50%; /* 使其成为圆形 */
background-color: transparent; /* 背景透明 */
margin-right: 16px;
}
.status-title {
color: #333333;
font-weight: 500;

@ -1,8 +1,8 @@
<template>
<div class="content">
<cs-search title="案件批量处理" :data="searchData" :span="6" direction="row" @onSearch="onSearch" @getData="onSearch" />
<div class="index-content">
<cs-search title="案件批量分析" :data="searchData" :span="6" direction="row" @onSearch="onSearch" @getData="onSearch" />
<div v-loading="loading" element-loading-text="分析中..." class="index-content">
<div class="header">
<el-button type="primary" icon="el-icon-video-play" @click="handleAnalysisAll"></el-button>
</div>
@ -46,6 +46,7 @@ export default {
{ label: '认定结果', model: 'identifyResult', type: 'selectMultiple', option: JSON.parse(sessionStorage.getItem('identify_result')) },
{ label: '分析状态', model: 'analysisStatus', type: 'selectMultiple', option: JSON.parse(sessionStorage.getItem('case_analysis_status')) }
],
loading: false,
//
gridOptions: {
...mixin.data().gridOptions,
@ -74,6 +75,14 @@ export default {
queryCaseList({ ...this.searchFormData }, this.queryForm.page, this.queryForm.size).then(res => {
this.gridOptions.data = res.data.records
this.queryForm.total = res.data.total
for (const item of this.gridOptions.data) {
if (item.analysisStatus === '1') {
setTimeout(() => {
this.fetchData()
}, 5000)
return
}
}
})
},
@ -84,6 +93,7 @@ export default {
} else {
return true
}
setTimeout
},
handleAnalysisAll() {
const item = this.$refs.modelTable.getCheckboxRecords()
@ -95,6 +105,7 @@ export default {
for (const items of item) {
list.push(items.caseId)
}
this.loading = true
this.handlecaseAnalysis(list)
},
getTypeName(val, type) {
@ -105,9 +116,10 @@ export default {
}
},
async handlecaseAnalysis(list) {
const loading = this.$baseLoading(1, '执行中...')
// const loading = this.$baseLoading(1, '...')
const res = await caseAnalysis(list)
loading.close()
// loading.close()
this.loading = false
if (res.code === 200) {
this.$baseMessage.success('分析成功')
this.fetchData()

@ -47,10 +47,12 @@ export default {
{ title: '序号', type: 'seq', width: '50px' },
{ title: '任务名称', field: 'taskName' },
{ title: '案件名称', field: 'caseName' },
{ title: '提示词名称', field: 'promptName' },
{ title: '任务状态', field: 'taskStatus', slots: { default: 'taskStatus' }},
{ title: '操作人', field: 'createUserName' },
{ title: '任务创建时间', field: 'createTime' },
{ title: '任务取消时间', field: 'cancelTime' },
{ title: '任务创建时间', field: 'createTime', sortable: true },
{ title: '任务完成时间', field: 'finishTime', sortable: true },
{ title: '任务取消时间', field: 'cancelTime', sortable: true },
{ title: '操作', slots: { default: 'operate' }, fixed: 'right', width: '150px' }
],
data: []

@ -17,19 +17,22 @@
<el-radio :label="0">全部案件</el-radio>
<el-radio :label="1">指定案件</el-radio>
<el-radio :disabled="dataInfo.type === '1'" :label="2">指定笔录</el-radio>
<el-radio :disabled="dataInfo.type === '2'" :label="3">指定证据</el-radio>
<el-radio :disabled="dataInfo.type === '2'" :label="3">指定证据</el-radio>
</el-radio-group>
</el-form-item>
<el-form-item v-show="ruleForm.type === 1" label="案件名称" :prop="ruleForm.type === 1?'caseIdList':''">
<el-select v-model="ruleForm.caseIdList" filterable multiple style="width: 100%;" placeholder="请选择案件名称">
<el-option
v-for="item in caseOptions"
:key="item.id"
:label="item.caseName"
:value="item.id"
/>
</el-select>
</el-form-item>
<div v-if="ruleForm.type === 1">
<el-form-item label="案件名称" prop="caseIdList">
<el-select v-model="ruleForm.caseIdList" filterable multiple style="width: 100%;" placeholder="请选择案件名称">
<el-option
v-for="item in caseOptions"
:key="item.id"
:label="item.caseName"
:value="item.id"
/>
</el-select>
</el-form-item>
</div>
<el-form-item v-if="ruleForm.type === 2 || ruleForm.type === 3 " label="案件名称" prop="caseId">
<el-select v-model="ruleForm.caseId" style="width: 100%;" filterable placeholder="请选择案件名称" @change="selectCase">
<el-option
@ -165,6 +168,8 @@ export default {
console.log('11111', this.ruleForm)
},
selectCase() {
this.ruleForm.recordIdList = []
this.ruleForm.evidenceIdList = []
this.getRecordData()
this.getEvidenceData()
},
@ -189,7 +194,7 @@ export default {
loading.close()
if (res.code === 200) {
this.drawerOption.show = false
this.$baseMessage.success('提取成功')
this.$baseMessage.success('数据提取任务已成功发起')
}
}).catch(() => { loading.close() })
}

@ -66,7 +66,7 @@ export default {
}
}
},
mounted() {
activated() {
this.fetchData()
this.tableHeight(390)
},

@ -13,10 +13,30 @@
@onSubmit="handleSubmit"
>
<div slot="content">
<el-steps :active="activeStep" align-center>
<!-- <el-steps :active="activeStep" align-center>
<el-step title="指标基础信息" description="设置指标名称及原子指标项目" />
<el-step title="指标规则" description="模型按规则分析案件指标" />
</el-steps>
</el-steps> -->
<div class="step_list">
<div class="step_item">
<div class="header">
<img src="../../../../assets/common/step1.png" alt="">
<span class="act_title">指标基础信息</span>
</div>
<div class="desc">设置指标名称及原子指标项目</div>
</div>
<div :class="[activeStep > 0 ?'act-step-line':'step-line']">
<span>>></span>
</div>
<div class="step_item">
<div class="header">
<img v-if="activeStep===0" src="../../../../assets/common/step2.png" alt="">
<img v-if="activeStep===1" src="../../../../assets/common/act_step2.png" alt="">
<span :class="[activeStep > 0 ?'act_title':'title']">指标规则</span>
</div>
<div class="desc">模型按规则分析案件指标</div>
</div>
</div>
<el-form
v-if="activeStep === 0"
ref="form"
@ -275,6 +295,67 @@ export default {
width: 100%;
}
}
.step_list {
display: flex;
justify-content: center;
align-items: center;
.step_item {
display: flex;
flex-direction: column;
margin-right: 8px;
.header {
display: flex;
margin-bottom: 8px;
.act_title {
font-size: 20px;
color: #333333;
}
.title {
color: #999999;
font-size: 20px;
}
}
.desc {
font-size: 14px;
color: #999999;
}
img {
width: 24px;
height: 24px;
margin-right: 8px;
}
}
.step-line {
width: 137px;
height: 2px;
border-top: 2px dashed #999999;
display: flex;
position: relative;
margin-right: 42px;
span {
position: absolute;
right: -24px;
top: -11px;
color: #999999;
font-size: 16px;
}
}
.act-step-line {
width: 137px;
height: 2px;
border-top: 2px dashed #3763FF;
display: flex;
position: relative;
margin-right: 42px;
span {
position: absolute;
right: -24px;
top: -11px;
color: #3763FF;
font-size: 16px;
}
}
}
.select_list {
display: flex;
flex-direction: column;

@ -117,9 +117,10 @@ export default {
margin-bottom: 16px;
}
.desc {
font-size: 16px;
font-size: 14px;
color: #666666;
word-break: keep-all;
line-height: 32px;
}
}
.card_table {

Loading…
Cancel
Save