feat:经侦模型页面修改,测试问题修改

dev_1.0.0
xiangcongshuai 1 year ago
parent d7994b7538
commit 9ca4c9ae79

@ -25,11 +25,11 @@ export function login(data) {
} }
/** 管理员用户修改密码 */ /** 管理员用户修改密码 */
export function changePassword(params) { export function changePassword(data) {
return request({ return request({
url: `${routes.auth}/api/user/admin/pass`, url: `/user/changePassWord`,
method: 'post', method: 'post',
params data
}) })
} }

@ -117,7 +117,7 @@ export function deleteDictionary(data) {
/** 新增字典数据*/ /** 新增字典数据*/
export function addDictionary(data) { export function addDictionary(data) {
return request({ return request({
url: `${routes.comDictionary}/add`, url: `${routes.comDictionary}/save`,
method: 'post', method: 'post',
data data
}) })
@ -125,7 +125,7 @@ export function addDictionary(data) {
/** 修改字典数据*/ /** 修改字典数据*/
export function updateDictionary(data) { export function updateDictionary(data) {
return request({ return request({
url: `${routes.comDictionary}/upd`, url: `${routes.comDictionary}/update`,
method: 'post', method: 'post',
data data
}) })

Binary file not shown.

After

Width:  |  Height:  |  Size: 915 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 127 KiB

@ -127,12 +127,12 @@
:disabled="item.disabled" :disabled="item.disabled"
clearable clearable
style="width: 100%" style="width: 100%"
value-format="yyyy-MM-dd HH:mm" value-format="yyyy-MM-dd HH:mm:ss"
format="yyyy-MM-dd HH:mm" format="yyyy-MM-dd HH:mm:ss"
type="datetimerange" type="datetimerange"
range-separator="至" range-separator="至"
start-placeholder="开始日期" start-placeholder="开始时间"
end-placeholder="结束日期" end-placeholder="结束时间"
/> />
<template v-else-if="item.type==='radio'"> <template v-else-if="item.type==='radio'">
<el-radio v-model="SearchformInline[index]" :label="item.option[0].value">{{ item.option[0].label }}</el-radio> <el-radio v-model="SearchformInline[index]" :label="item.option[0].value">{{ item.option[0].label }}</el-radio>

@ -44,14 +44,6 @@
size="small" size="small"
label-position="right" label-position="right"
> >
<el-form-item label="旧密码" prop="oldPassword">
<el-input
v-model="dataForm.oldPassword"
placeholder="请输入旧密码"
auto-complete="off"
show-password
/>
</el-form-item>
<el-form-item label="新密码" prop="newPassword"> <el-form-item label="新密码" prop="newPassword">
<el-input <el-input
v-model="dataForm.newPassword" v-model="dataForm.newPassword"
@ -108,13 +100,9 @@ export default {
manIcon: Man, manIcon: Man,
// //
dataForm: { dataForm: {
oldPassword: '',
newPassword: '' newPassword: ''
}, },
dataFormRules: { dataFormRules: {
oldPassword: [
{ required: true, message: '请输入旧密码', trigger: 'blur' }
],
newPassword: [ newPassword: [
{ required: true, message: '请输入新密码', trigger: 'blur' }, { required: true, message: '请输入新密码', trigger: 'blur' },
{ {
@ -172,12 +160,9 @@ export default {
break break
} }
}, },
personalCenter() {
this.$router.push('/personalCenter/personalCenter')
},
logout() { logout() {
this.$baseConfirm( this.$baseConfirm(
'您确定要退出' + this.$baseTitle + '吗?', '您确定要退出吗?',
null, null,
async() => { async() => {
await this.$store.dispatch('user/logout') await this.$store.dispatch('user/logout')
@ -188,7 +173,9 @@ export default {
const _this = this const _this = this
this.$refs.dataForm.validate(async(valid) => { this.$refs.dataForm.validate(async(valid) => {
if (valid) { if (valid) {
await changePassword(this.dataForm) await changePassword({
password: this.dataForm.newPassword
})
_this.$baseMessage.success('修改成功!请重新登录') _this.$baseMessage.success('修改成功!请重新登录')
await _this.$store.dispatch('user/logout') await _this.$store.dispatch('user/logout')
callback(true) callback(true)

@ -284,4 +284,8 @@ export default {
::v-deep .el-tabs__item:last-child{ ::v-deep .el-tabs__item:last-child{
margin-right:20px margin-right:20px
} }
::v-deep .el-tabs__nav-wrap {
display: flex;
align-items: center;
}
</style> </style>

@ -288,8 +288,8 @@ export default {
::v-deep { ::v-deep {
.el-tabs__nav-next, .el-tabs__nav-next,
.el-tabs__nav-prev { .el-tabs__nav-prev {
height: $base-tag-item-height; height: 40px;
line-height: $base-tag-item-height; line-height: 40px;
} }
.el-tabs__header { .el-tabs__header {
border-bottom: 0; border-bottom: 0;

@ -76,7 +76,7 @@ export const asyncRoutes = [
name: 'Rule', name: 'Rule',
permission: 'p_rule', permission: 'p_rule',
component: Layout, component: Layout,
meta: { title: '规则配置' }, meta: { title: '模型规则' },
children: [ children: [
{ {
path: '/index-rule', path: '/index-rule',
@ -90,7 +90,7 @@ export const asyncRoutes = [
name: 'ModelRule', name: 'ModelRule',
permission: 'p_modelRule', permission: 'p_modelRule',
component: () => import('@/views/ruleEngine/modelRule/index.vue'), component: () => import('@/views/ruleEngine/modelRule/index.vue'),
meta: { title: '模型规则', affix: false, subtitle: '平台大模型已具备的分析多类型案件能力' } meta: { title: '经侦模型', affix: false, subtitle: '平台大模型已具备的分析多类型案件能力' }
}, },
{ {
path: '/atomic-rule', path: '/atomic-rule',

@ -63,7 +63,7 @@ export default {
{ title: '证据名称', field: 'evidenceName' }, { title: '证据名称', field: 'evidenceName' },
{ title: '证据类型', field: 'evidenceTypeDesc' }, { title: '证据类型', field: 'evidenceTypeDesc' },
// { title: '', field: 'confessionMaterial' }, // { title: '', field: 'confessionMaterial' },
{ title: '最新时间', field: 'updateTime' }, { title: '最新时间', field: 'createTime' },
{ title: '操作', slots: { default: 'opera' }, fixed: 'right', width: '100px' } { title: '操作', slots: { default: 'opera' }, fixed: 'right', width: '100px' }
], ],
data: [{}] data: [{}]

@ -85,9 +85,10 @@ export default {
{ title: '角色', field: 'role' }, { title: '角色', field: 'role' },
{ title: '供述材料', field: 'confessionMaterial' }, { title: '供述材料', field: 'confessionMaterial' },
{ title: '询问人', field: 'lawAsker' }, { title: '询问人', field: 'lawAsker' },
{ title: '进度', field: 'percentage' },
{ title: '供述开始时间', field: 'confessionStartTime' }, { title: '供述开始时间', field: 'confessionStartTime' },
{ title: '供述结束时间', field: 'confessionEndTime' }, { title: '供述结束时间', field: 'confessionEndTime' },
{ title: '最新时间', field: 'updateTime' }, { title: '最新时间', field: 'createTime' },
{ title: '操作', slots: { default: 'opera' }, fixed: 'right', width: '200px' } { title: '操作', slots: { default: 'opera' }, fixed: 'right', width: '200px' }
], ],
data: [{ name: '裴金禄', '笔录序号': '1', roleName: '被害人', confessionMaterial: '3', questioner: '1', startTime: '2024/6/26', newDate: '2024/6/26', endTime: '2024/6/26' }] data: [{ name: '裴金禄', '笔录序号': '1', roleName: '被害人', confessionMaterial: '3', questioner: '1', startTime: '2024/6/26', newDate: '2024/6/26', endTime: '2024/6/26' }]

@ -14,7 +14,12 @@
<el-button type="text" icon="el-icon-close" @click="handleDel(row)" /> <el-button type="text" icon="el-icon-close" @click="handleDel(row)" />
</template> </template>
<template #result="{row}"> <template #result="{row}">
<el-tag :type="row.indexResult === 'true' ? 'success' : 'error'">{{ row.indexResult?row.indexResult=== 'true' ? '符合' : '不符合': '未评估' }}</el-tag> <div v-if="row.newFlag" style="padding: 10px 0;">
<el-badge value="new" class="item">
<el-tag :type="row.indexResult === 'true' ? 'success' : 'error'">{{ row.indexResult?row.indexResult=== 'true' ? '符合' : '不符合': '未评估' }}</el-tag>
</el-badge>
</div>
<el-tag v-else :type="row.indexResult === 'true' ? 'success' : 'error'">{{ row.indexResult?row.indexResult=== 'true' ? '符合' : '不符合': '未评估' }}</el-tag>
</template> </template>
</vxe-grid> </vxe-grid>
<div style="text-align: center"> <div style="text-align: center">
@ -57,6 +62,9 @@ export default {
{ title: '序号', type: 'seq', width: '50px' }, { title: '序号', type: 'seq', width: '50px' },
{ title: '指标名称', field: 'indexName' }, { title: '指标名称', field: 'indexName' },
{ title: '分值', field: 'score' }, { title: '分值', field: 'score' },
{ title: '数据来源', field: 'indexSource', formatter: ({ cellValue }) => {
return cellValue ? this.indexSourceList.find(item => item.value === cellValue).label : ''
} },
{ title: '笔录结果', field: 'record' }, { title: '笔录结果', field: 'record' },
{ title: '分析结果', field: 'indexResult', slots: { default: 'result' }} { title: '分析结果', field: 'indexResult', slots: { default: 'result' }}
// { title: '', field: 'atomicIndex' } // { title: '', field: 'atomicIndex' }
@ -65,7 +73,8 @@ export default {
// { title: '', slots: { default: 'opera' }, fixed: 'right', width: '100px' } // { title: '', slots: { default: 'opera' }, fixed: 'right', width: '100px' }
], ],
data: [] data: []
} },
indexSourceList: JSON.parse(sessionStorage.getItem('index_source'))
} }
}, },
watch: { watch: {
@ -103,6 +112,6 @@ export default {
} }
</script> </script>
<style scoped lang="scss"> <style lang="scss" scoped>
</style> </style>

@ -14,9 +14,15 @@
<el-button type="text" icon="el-icon-close" @click="handleDel(row)" /> <el-button type="text" icon="el-icon-close" @click="handleDel(row)" />
</template> </template>
<template #result="{row}"> <template #result="{row}">
<el-tag :type="row.indexResult === 'true' ? 'success' : 'error'">{{ row.indexResult?row.indexResult=== 'true' ? '符合' : '不符合': '未评估' }}</el-tag> <div v-if="row.newFlag" style="padding: 10px 0;">
<el-badge value="new" class="item">
<el-tag :type="row.indexResult === 'true' ? 'success' : 'error'">{{ row.indexResult?row.indexResult=== 'true' ? '符合' : '不符合': '未评估' }}</el-tag>
</el-badge>
</div>
</template> <el-tag v-else :type="row.indexResult === 'true' ? 'success' : 'error'">{{ row.indexResult?row.indexResult=== 'true' ? '符合' : '不符合': '未评估' }}</el-tag>
</template>
</vxe-grid> </vxe-grid>
<div style="text-align: center"> <div style="text-align: center">
<cs-page <cs-page
@ -60,6 +66,9 @@ export default {
{ title: '序号', type: 'seq', width: '50px' }, { title: '序号', type: 'seq', width: '50px' },
{ title: '指标名称', field: 'indexName' }, { title: '指标名称', field: 'indexName' },
{ title: '分值', field: 'score' }, { title: '分值', field: 'score' },
{ title: '数据来源', field: 'indexSource', formatter: ({ cellValue }) => {
return cellValue ? this.indexSourceList.find(item => item.value === cellValue).label : ''
} },
{ title: '笔录结果', field: 'record' }, { title: '笔录结果', field: 'record' },
{ title: '分析结果', field: 'indexResult', slots: { default: 'result' }} { title: '分析结果', field: 'indexResult', slots: { default: 'result' }}
// { title: '', field: 'atomicIndex' } // { title: '', field: 'atomicIndex' }
@ -68,7 +77,8 @@ export default {
// { title: '', slots: { default: 'opera' }, fixed: 'right', width: '100px' }, // { title: '', slots: { default: 'opera' }, fixed: 'right', width: '100px' },
], ],
data: [] data: []
} },
indexSourceList: JSON.parse(sessionStorage.getItem('index_source'))
} }
}, },
watch: { watch: {

@ -14,7 +14,14 @@
<el-button type="text" icon="el-icon-close" @click="handleDel(row)" /> <el-button type="text" icon="el-icon-close" @click="handleDel(row)" />
</template> </template>
<template #result="{row}"> <template #result="{row}">
<el-tag :type="row.indexResult === 'true' ? 'success' : 'error'">{{ row.indexResult?row.indexResult=== 'true' ? '符合' : '不符合': '未评估' }}</el-tag> <div v-if="row.newFlag" style="padding: 10px 0;">
<el-badge value="new" class="item">
<el-tag :type="row.indexResult === 'true' ? 'success' : 'error'">{{ row.indexResult?row.indexResult=== 'true' ? '符合' : '不符合': '未评估' }}</el-tag>
</el-badge>
</div>
<el-tag v-else :type="row.indexResult === 'true' ? 'success' : 'error'">{{ row.indexResult?row.indexResult=== 'true' ? '符合' : '不符合': '未评估' }}</el-tag>
</template> </template>
</vxe-grid> </vxe-grid>
<div style="text-align: center"> <div style="text-align: center">
@ -57,6 +64,9 @@ export default {
{ title: '序号', type: 'seq', width: '50px' }, { title: '序号', type: 'seq', width: '50px' },
{ title: '指标名称', field: 'indexName' }, { title: '指标名称', field: 'indexName' },
{ title: '分值', field: 'score' }, { title: '分值', field: 'score' },
{ title: '数据来源', field: 'indexSource', formatter: ({ cellValue }) => {
return cellValue ? this.indexSourceList.find(item => item.value === cellValue).label : ''
} },
{ title: '笔录结果', field: 'record' }, { title: '笔录结果', field: 'record' },
{ title: '分析结果', field: 'indexResult', slots: { default: 'result' }} { title: '分析结果', field: 'indexResult', slots: { default: 'result' }}
// { title: '', field: 'atomicIndex' } // { title: '', field: 'atomicIndex' }
@ -65,7 +75,9 @@ export default {
// { title: '', slots: { default: 'opera' }, fixed: 'right', width: '100px' }, // { title: '', slots: { default: 'opera' }, fixed: 'right', width: '100px' },
], ],
data: [] data: []
}
},
indexSourceList: JSON.parse(sessionStorage.getItem('index_source'))
} }
}, },
watch: { watch: {

@ -39,6 +39,9 @@
<el-form-item label="上传材料" prop="fileIdList"> <el-form-item label="上传材料" prop="fileIdList">
<el-upload <el-upload
class="upload-demo" class="upload-demo"
:headers="{
token: token
}"
:action="uploadOption.action" :action="uploadOption.action"
:accept="uploadOption.accept" :accept="uploadOption.accept"
:on-preview="handlePreview" :on-preview="handlePreview"
@ -61,6 +64,7 @@
<script> <script>
import { baseURL } from '@/config/net.config' import { baseURL } from '@/config/net.config'
import { saveEvidence, updateEvidence } from '@/api/caseDetails' import { saveEvidence, updateEvidence } from '@/api/caseDetails'
import { getAccessToken } from '@/utils/accessToken'
export default { export default {
name: 'EditEvidence', name: 'EditEvidence',
data() { data() {
@ -69,6 +73,7 @@ export default {
show: false, show: false,
title: '添加证据' title: '添加证据'
}, },
token: getAccessToken(),
// //
evidenceForm: { evidenceForm: {
fileIdList: [] fileIdList: []

@ -94,6 +94,9 @@
</el-form-item> --> </el-form-item> -->
<el-form-item label="上传材料" prop="fileIdList"> <el-form-item label="上传材料" prop="fileIdList">
<el-upload <el-upload
:headers="{
token: token
}"
class="upload-demo" class="upload-demo"
:action="uploadOption.action" :action="uploadOption.action"
:accept="uploadOption.accept" :accept="uploadOption.accept"
@ -132,6 +135,7 @@ import { addOrUpdRecords, queryUserList } from '@/api/caseDetails'
import { commonDownloadFile } from '@/api/config/uploadApi' import { commonDownloadFile } from '@/api/config/uploadApi'
import FileViewer from '@/components/FileViewer/index.vue' import FileViewer from '@/components/FileViewer/index.vue'
import { baseURL } from '@/config' import { baseURL } from '@/config'
import { getAccessToken } from '@/utils/accessToken'
export default { export default {
name: 'EditRecord', name: 'EditRecord',
components: { FileViewer, AddCaseUser }, components: { FileViewer, AddCaseUser },
@ -151,6 +155,7 @@ export default {
}, },
// //
showFileViewer: false, showFileViewer: false,
token: getAccessToken(),
// //
recordForm: { recordForm: {
fileIdList: [] fileIdList: []

@ -49,16 +49,17 @@
<el-descriptions-item label="案件名称">{{ caseData['caseName'] }}</el-descriptions-item> <el-descriptions-item label="案件名称">{{ caseData['caseName'] }}</el-descriptions-item>
<el-descriptions-item label="案件类型" span="2">{{ caseData.caseTypeName }}</el-descriptions-item> <el-descriptions-item label="案件类型" span="2">{{ caseData.caseTypeName }}</el-descriptions-item>
<el-descriptions-item label="案件状态">{{ caseData.caseStatusName }}</el-descriptions-item> <el-descriptions-item label="案件状态">{{ caseData.caseStatusName }}</el-descriptions-item>
<el-descriptions-item label="作案方式">{{ caseData.crimeModeName }}</el-descriptions-item> <el-descriptions-item label="到案方式">{{ caseData.crimeModeName }}</el-descriptions-item>
<el-descriptions-item label="立案时间">{{ caseData.registerTime }}</el-descriptions-item> <!-- <el-descriptions-item label="立案时间">{{ caseData.registerTime || '暂未添加,上传笔录后自动生成' }}</el-descriptions-item>
<el-descriptions-item label="受理时间">{{ caseData.acceptTime }}</el-descriptions-item> <el-descriptions-item label="受理时间">{{ caseData.acceptTime || '暂未添加,上传笔录后自动生成' }}</el-descriptions-item> -->
<el-descriptions-item label="案件概述" span="4">
<el-descriptions-item label="行为人">{{ caseData.lawActorName || '暂未添加,上传笔录后自动生成' }}</el-descriptions-item>
<el-descriptions-item label="当事人">{{ caseData.lawParty || '暂未添加,上传笔录后自动生成' }}</el-descriptions-item>
<el-descriptions-item label="案件概述" span="24">
<div slot="default" class="case-summarize"> <div slot="default" class="case-summarize">
{{ caseData.caseDetail }} {{ caseData.caseDetail }}
</div> </div>
</el-descriptions-item> </el-descriptions-item>
<el-descriptions-item label="行为人">{{ caseData.lawActorName }}</el-descriptions-item>
<el-descriptions-item label="当事人">{{ caseData.lawParty }}</el-descriptions-item>
</el-descriptions> </el-descriptions>
</div> </div>
</div> </div>
@ -97,7 +98,7 @@
</div> </div>
</div> </div>
<!--编辑/新增弹窗--> <!--编辑/新增弹窗-->
<edit-case-info @reloadData="fetchData" ref="edit" /> <edit-case-info ref="edit" @reloadData="fetchData" />
<!--模型分析--> <!--模型分析-->
<model-analysis ref="analysis" @confirm="handleConfirmAnalysis" /> <model-analysis ref="analysis" @confirm="handleConfirmAnalysis" />
<!--案件分析详情--> <!--案件分析详情-->

@ -14,7 +14,7 @@
<el-input v-model="caseForm['caseNo']" :disabled="isEdit" placeholder="请输入案件编号" /> <el-input v-model="caseForm['caseNo']" :disabled="isEdit" placeholder="请输入案件编号" />
</el-form-item> </el-form-item>
<el-form-item label="案件名称" prop="caseName"> <el-form-item label="案件名称" prop="caseName">
<el-input v-model="caseForm['caseName']" placeholder="请输入案件名称" /> <el-input v-model="caseForm['caseName']" maxlength="20" placeholder="请输入案件名称" />
</el-form-item> </el-form-item>
<el-form-item label="案件类型" prop="caseType"> <el-form-item label="案件类型" prop="caseType">
<el-select v-model="caseForm['caseType']" clearable placeholder="请选择案件类型"> <el-select v-model="caseForm['caseType']" clearable placeholder="请选择案件类型">
@ -26,8 +26,8 @@
<el-option v-for="item in caseStatusOptions" :key="item.value" :label="item.label" :value="item.value" /> <el-option v-for="item in caseStatusOptions" :key="item.value" :label="item.label" :value="item.value" />
</el-select> </el-select>
</el-form-item> </el-form-item>
<el-form-item label="案方式" prop="crimeMode"> <el-form-item label="案方式" prop="crimeMode">
<el-select v-model="caseForm['crimeMode']" clearable placeholder="请选择案方式"> <el-select v-model="caseForm['crimeMode']" clearable placeholder="请选择案方式">
<el-option v-for="item in crimeModeOptions" :key="item.value" :label="item.label" :value="item.value" /> <el-option v-for="item in crimeModeOptions" :key="item.value" :label="item.label" :value="item.value" />
</el-select> </el-select>
</el-form-item> </el-form-item>
@ -69,7 +69,7 @@ export default {
caseTypeOptions: JSON.parse(sessionStorage.getItem('case_type')), caseTypeOptions: JSON.parse(sessionStorage.getItem('case_type')),
// //
caseStatusOptions: JSON.parse(sessionStorage.getItem('case_status')), caseStatusOptions: JSON.parse(sessionStorage.getItem('case_status')),
// //
crimeModeOptions: JSON.parse(sessionStorage.getItem('crime_mode')), crimeModeOptions: JSON.parse(sessionStorage.getItem('crime_mode')),
// //
caseForm: { caseForm: {
@ -89,7 +89,7 @@ export default {
caseName: [{ required: true, message: '案件名称不能为空!', trigger: 'blur' }], caseName: [{ required: true, message: '案件名称不能为空!', trigger: 'blur' }],
caseType: [{ required: true, message: '案件类型不能为空!', trigger: 'blur' }], caseType: [{ required: true, message: '案件类型不能为空!', trigger: 'blur' }],
caseStatus: [{ required: false, message: '案件状态不能为空!', trigger: 'blur' }], caseStatus: [{ required: false, message: '案件状态不能为空!', trigger: 'blur' }],
crimeMode: [{ required: true, message: '案方式不能为空!', trigger: 'blur' }], crimeMode: [{ required: true, message: '案方式不能为空!', trigger: 'blur' }],
caseDetail: [{ required: true, message: '案件概述不能为空!', trigger: 'blur' }] caseDetail: [{ required: true, message: '案件概述不能为空!', trigger: 'blur' }]
}, },
// //

@ -135,8 +135,8 @@ export default {
// //
const params = JSON.parse(JSON.stringify(this.searchFormData)) const params = JSON.parse(JSON.stringify(this.searchFormData))
if (params['updateTime']) { if (params['updateTime']) {
this.$set(params, 'updateTimeStart', this.searchFormData['updateTime'][0]) this.$set(params, 'updateStartTime', this.searchFormData['updateTime'][0])
this.$set(params, 'updateTimeEnd', this.searchFormData['updateTime'][1]) this.$set(params, 'updateEndTime', this.searchFormData['updateTime'][1])
} }
delete params['updateTime'] delete params['updateTime']
queryCaseList(params, this.queryForm.page, this.queryForm.size).then(res => { queryCaseList(params, this.queryForm.page, this.queryForm.size).then(res => {

@ -50,9 +50,9 @@ export default {
// //
searchData: [ searchData: [
{ label: '原子指标', model: 'name', type: 'input' }, { label: '原子指标', model: 'name', type: 'input' },
{ label: '指标分类', model: 'indexType', type: 'select', option: JSON.parse(sessionStorage.getItem('index_type')) }, // { label: '', model: 'indexType', type: 'select', option: JSON.parse(sessionStorage.getItem('index_type')) },
{ label: '指标来源', model: 'indexSource', type: 'select', option: JSON.parse(sessionStorage.getItem('index_source')) }, { label: '指标来源', model: 'indexSource', type: 'select', option: JSON.parse(sessionStorage.getItem('index_source')) },
{ label: '最新时间', model: 'updateTime', type: 'daterange' } { label: '最新时间', model: 'updateTime', type: 'datetimerange' }
], ],
// //
gridOptions: { gridOptions: {

@ -21,7 +21,7 @@
</template> </template>
<template #content="{row}"> <template #content="{row}">
<div class="expand-details"> <div class="expand-details">
<p>{{ `指标说明:${row['remark']}` }}</p> <p>{{ `指标说明:${row['remark']||''}` }}</p>
<p> <p>
<span>{{ `指标简称:${row['shortName']}` }}</span> <span>{{ `指标简称:${row['shortName']}` }}</span>
<!-- <span style="margin-left: 20px">{{ `必要证据:${row['necessaryEvidenceContent']}` }}</span>--> <!-- <span style="margin-left: 20px">{{ `必要证据:${row['necessaryEvidenceContent']}` }}</span>-->
@ -75,6 +75,7 @@ export default {
{ label: '指标类别', model: 'indexType', type: 'select', option: JSON.parse(sessionStorage.getItem('index_type')) }, { label: '指标类别', model: 'indexType', type: 'select', option: JSON.parse(sessionStorage.getItem('index_type')) },
// { label: '', model: 'doer', type: 'input' }, // { label: '', model: 'doer', type: 'input' },
{ label: '案件类型', model: 'caseType', type: 'select', option: JSON.parse(sessionStorage.getItem('case_type')) } { label: '案件类型', model: 'caseType', type: 'select', option: JSON.parse(sessionStorage.getItem('case_type')) }
// { label: '', model: 'name', type: 'input' },
], ],
// //
gridOptions: { gridOptions: {

@ -0,0 +1,56 @@
<template>
<div>
<vxe-grid v-bind="gridOptions" style="margin-top: 20px;" auto-resize />
<div style="text-align: center">
<cs-page
:page.sync="queryForm.page"
:limit.sync="queryForm.size"
:total="queryForm.total"
@pagination="fetchData"
/>
</div>
</div>
</template>
<script>
import mixin from '@/views/mixin'
import { queryIndexData } from '@/api/indexRule'
export default {
name: 'CardTable',
mixins: [mixin],
props: { //
indexType: { type: String, default: '' }
},
data() {
return {
//
gridOptions: {
...mixin.data().gridOptions,
columns: [
{ title: '序号', type: 'seq', width: '50px' },
{ title: '指标名称', field: 'name' },
{ title: '指标类别', field: 'indexTypeName', width: '150px' },
{ title: '指标分数', field: 'indexScore', width: '150px', sortable: true },
{ title: '原子指标数量', field: 'atomicIndexNum', width: '150px' },
{ title: '最新时间', field: 'updateTime', width: '150px' }
],
data: []
}
}
},
mounted() {
this.fetchData()
this.tableHeight(540)
},
methods: {
fetchData() {
queryIndexData({
indexType: this.indexType
}, this.queryForm.page, this.queryForm.size).then(res => {
this.gridOptions.data = res.data.result
this.queryForm.total = res.data.total
})
}
}
}
</script>

@ -7,135 +7,129 @@
--> -->
<template> <template>
<div class="content"> <div class="modelRule">
<h4>规则预设</h4> <div class="left">
<el-row :gutter="10"> <div class="left_title">经侦模型</div>
<el-col v-for="(item, index) in rulesList" :key="index" :span="5"> <div class="left_item">
<div class="rule-item"> <div class="left_item_header"><img src="~@/assets/common/checked.png" alt="">
<div class="item-content"> <span>工程类合同诈骗案规则</span>
<div class="flex-row" style="align-items: center;justify-content: space-between">
<el-tooltip :content="item.name" placement="top">
<span class="etc title" style="flex: 1">{{ item.name }}</span>
</el-tooltip>
<el-switch
v-model="item.value"
active-value="1"
inactive-value="0"
active-color="#00975E"
/>
</div>
<div class="subtitle">{{ item.describe }}</div>
</div>
<div class="item-bottom">
<i class="el-icon-view" @click="handleDefault(item)" />
<i v-if="item.value === '0'" class="el-icon-delete" @click="handleDel(item)" />
</div>
</div> </div>
</el-col> <div class="desc">模型采取赋分制的方法来综合判定工程类合同诈骗案证据充分与否</div>
</el-row> </div>
<!--规则预设--> <img src="~@/assets/common/more.png" alt="">
<rule-default ref="default" /> </div>
<div class="right">
<div class="right_card">
<div class="title">模型说明</div>
<div class="desc" style="margin-bottom: 24px;">针对工程类合同诈骗案高发态势以及办理合同诈骗案存在的诸多问题和困难宁夏总队在梳理近年来侦办的百余起合同诈骗案基础上分析了有罪无罪判决绝对不起诉存疑不起诉案件的取证情况证据证明力断案依据等搭建了宁夏工程类合同诈骗案取证智能分析模型</div>
<div class="title">模型指标设置及赋分规则</div>
<div class="desc">模型采取赋分制的方法来综合判定案件证据充分与否分为三个模块第一模块是共性证据指标赋30分第二模块是有罪证据指标赋70分第三模块是无罪证据指标赋70分采取共性指标+入罪指标共性指标+出罪指标的计算方式评定综合得分综合得分70分以上判定证据较充分司法机关对案件形成一致认定意见的概率较大综合得分50分至70分判定案件事实不清证据不足司法机关认定意见不一致的概率较大综合得分50分以下判定证据不充分司法机关会作出绝对不起诉或存疑不起诉的决定</div>
</div>
<div class="card_table">
<el-tabs v-model="activeName" type="card">
<el-tab-pane label="共性证据指标" name="1">
<card-table index-type="1" />
</el-tab-pane>
<el-tab-pane label="入罪证据指标" name="2">
<card-table index-type="2" />
</el-tab-pane>
<el-tab-pane label="出罪证据指标" name="3">
<card-table index-type="3" />
</el-tab-pane>
</el-tabs>
</div>
</div>
</div> </div>
</template> </template>
<script> <script>
import RuleDefault from '@/views/ruleEngine/modelRule/components/RuleDefault.vue' import CardTable from './components/CardTable.vue'
export default { export default {
name: 'Index', name: 'Index',
components: { RuleDefault }, components: {
CardTable
},
data() { data() {
return { return {
// activeName: '1'
rulesList: [
{ id: 0, name: '工程类合同诈骗案规则', describe: '模型采取赋分制的方法来综合判定工程类合同诈骗案证据充分与否。', value: '1' },
{ id: 1, name: '工程类合同诈骗案规则', describe: '模型采取赋分制的方法来综合判定工程类合同诈骗案证据充分与否。', value: '0' }
]
} }
}, },
methods: { methods: {
//
handleDefault(item) {
this.$refs.default.show(item)
},
//
handleDel(item) {
this.$baseConfirm('确定要删除吗?', null, async() => {
})
}
} }
} }
</script> </script>
<style scoped lang="scss"> <style scoped lang="scss">
.content { .modelRule {
height: 100%; display: flex;
background: #FFFFFF; overflow: auto;
border-radius: 8px; .left {
padding: 20px; width: 362px;
box-sizing: border-box; background: #FFFFFF;
overflow: hidden; border-radius: 8px 8px 8px 8px;
overflow-y: auto; padding: 24px;
h4 { img {
margin-top: 0; width: 346px;
} height: 109px;
.rule-item { margin-top: 24px;
background: #F6F8FB; }
border-radius: 8px; .left_title {
padding: 5px; font-weight: bold;
box-sizing: border-box; font-size: 18px;
color: #999999; color: #333333;
margin-bottom: 10px; margin-bottom: 24px;
.item-content { }
background: #FFFFFF; .left_item {
padding: 15px; width: 314px;
box-sizing: border-box; background: #EEF7FF;
border-top-left-radius: 8px; border-radius: 8px 8px 8px 8px;
border-top-right-radius: 8px; padding: 16px;
.title { .left_item_header {
color: #333333; margin-bottom: 16px;
font-weight: 600; img {
} width: 18px;
.subtitle { height: 18px;
font-size: 13px; margin-right: 8px;
color: #999999; }
margin-top: 10px; font-size: 18px;
} color: #333333;
} }
.item-bottom { .desc {
text-align: right; font-size: 14px;
margin-top: 15px; color: #999999;
margin-bottom: 10px; }
padding: 0 10px; }
box-sizing: border-box; }
i { .right {
cursor: pointer; flex: 1;
margin-left: 10px; // height: calc(100vh - 200px);
} margin-left: 16px;
} .right_card {
} width: 100%;
} background: #FFFFFF;
@media screen and (min-width: 769px){ border-radius: 8px 8px 8px 8px;
.el-col-5 { padding: 24px;
max-width: 20%; .title {
width: 20%; font-weight: bold;
flex: 0 0 20%; font-size: 16px;
} color: #333333;
} margin-bottom: 16px;
@media screen and (min-width: 569px) and (max-width: 768px) { }
.el-col-5 { .desc {
max-width: 50%; font-size: 16px;
width: 50%; color: #666666;
flex: 0 0 50%; word-break: keep-all;
} }
} }
@media only screen and (max-width: 568px){ .card_table {
.el-col-5 { margin-top: 16px;
max-width: 100%; background: #FFFFFF;
width: 100%; border-radius: 8px 8px 8px 8px;
flex: 0 0 100%; height: calc(100vh - 350px);
} padding: 24px;
}
}
} }
</style> </style>

@ -8,7 +8,7 @@
<template> <template>
<div class="account-content"> <div class="account-content">
<cs-search :data="searchData" :span="8" direction="row" @getData="onSearch" /> <cs-search :data="searchData" :span="8" direction="row" @getData="onSearch" />
<div class="content-info"> <div class="content-info">
<el-button type="primary" icon="el-icon-circle-plus-outline" @click="handleAdd"></el-button> <el-button type="primary" icon="el-icon-circle-plus-outline" @click="handleAdd"></el-button>
<vxe-grid v-bind="gridOptions" style="margin-top: 20px"> <vxe-grid v-bind="gridOptions" style="margin-top: 20px">
@ -43,7 +43,7 @@
<script> <script>
import mixin from '@/views/mixin' import mixin from '@/views/mixin'
import EditAccount from '@/views/system/accountManagement/components/EditAccount.vue' import EditAccount from '@/views/system/accountManagement/components/EditAccount.vue'
import { getUserList, deleteUserInfo, updateUserStatus } from '@/api/system/user.js' import { getUserList, deleteUserInfo, updateUserStatus, getRoleList } from '@/api/system/user.js'
export default { export default {
name: 'AccountManagement', name: 'AccountManagement',
components: { EditAccount }, components: { EditAccount },
@ -52,8 +52,9 @@ export default {
return { return {
searchData: [ searchData: [
{ label: '用户名', model: 'userName', type: 'input' }, { label: '用户名', model: 'userName', type: 'input' },
{ label: '角色', model: 'roleName', type: 'input' } { label: '角色', model: 'roleId', type: 'select', option: [] }
], ],
roleList: [],
gridOptions: { gridOptions: {
...mixin.data().gridOptions, ...mixin.data().gridOptions,
columns: [ columns: [
@ -73,12 +74,13 @@ export default {
}, },
mounted() { mounted() {
this.tableHeight(400) this.tableHeight(400)
this.queryRoleList()
}, },
methods: { methods: {
// //
fetchData() { fetchData() {
getUserList({ getUserList({
userName: this.searchFormData.userName, ...this.searchFormData,
pageNumber: this.queryForm.page, pageNumber: this.queryForm.page,
pageSize: this.queryForm.size pageSize: this.queryForm.size
}).then(res => { }).then(res => {
@ -86,6 +88,22 @@ export default {
this.queryForm.total = res.data.total this.queryForm.total = res.data.total
}) })
}, },
queryRoleList() {
getRoleList({
pageNumber: 1,
pageSize: 999
}).then(res => {
const list = []
for (const item of res.data.records) {
list.push({
value: item.id,
label: item.roleName
})
}
this.roleList = list
this.$set(this.searchData[1], 'option', list)
})
},
// //
handleAdd() { handleAdd() {
this.$refs.edit.show() this.$refs.edit.show()

@ -17,6 +17,9 @@
<el-form-item label="头像" prop="headPicId"> <el-form-item label="头像" prop="headPicId">
<el-upload <el-upload
class="avatar-uploader" class="avatar-uploader"
:headers="{
token: token
}"
:action="uploadCofig.action" :action="uploadCofig.action"
:show-file-list="false" :show-file-list="false"
:on-success="handleAvatarSuccess" :on-success="handleAvatarSuccess"
@ -55,6 +58,7 @@ import { validPhone } from '@/utils/validate'
import { baseURL } from '@/config' import { baseURL } from '@/config'
import { commonDownloadFile } from '@/api/config/uploadApi' import { commonDownloadFile } from '@/api/config/uploadApi'
import { getRoleList, saveUserInfo, updateUserInfo } from '@/api/system/user' import { getRoleList, saveUserInfo, updateUserInfo } from '@/api/system/user'
import { getAccessToken } from '@/utils/accessToken'
export default { export default {
name: 'EditAccount', name: 'EditAccount',
data() { data() {
@ -67,6 +71,7 @@ export default {
roleOptions: [], roleOptions: [],
// //
departmentOptions: [], departmentOptions: [],
token: getAccessToken(),
// //
userForm: { userForm: {
headPicId: '', headPicId: '',

@ -78,12 +78,14 @@ export default {
this.$refs.form.validate(async valid => { this.$refs.form.validate(async valid => {
if (valid) { if (valid) {
if (this.isEdit) { if (this.isEdit) {
const { code, msg } = await updateDictionary(this.dicForm) const { code, msg } = await updateDictionary(this.dicData)
code === 200 ? this.$baseMessage(msg, '修改成功!') : this.$baseMessage(msg, '修改失败!') code === 200 ? this.$baseMessage(msg, '修改成功!') : this.$baseMessage(msg, '修改失败!')
} else { } else {
const { code, msg } = await addDictionary(this.dicForm) const { code, msg } = await addDictionary(this.dicData)
code === 200 ? this.$baseMessage(msg, '保存成功!') : this.$baseMessage(msg, '保存失败!') code === 200 ? this.$baseMessage(msg, '保存成功!') : this.$baseMessage(msg, '保存失败!')
} }
this.drawerOption.show = false
this.$emit('update')
} }
}) })
} }

@ -45,7 +45,7 @@
<span class="dic-info">{{ dicData['label'] }}</span> <span class="dic-info">{{ dicData['label'] }}</span>
</el-descriptions-item> </el-descriptions-item>
<el-descriptions-item label="字典编码"> <el-descriptions-item label="字典编码">
<span class="dic-info">{{ dicData['value'] }}</span> <span class="dic-info">{{ dicData['type'] }}</span>
</el-descriptions-item> </el-descriptions-item>
<el-descriptions-item label="字典状态"> <el-descriptions-item label="字典状态">
<el-switch v-model="dicData['status']" disabled active-value="1" inactive-value="0" /> <el-switch v-model="dicData['status']" disabled active-value="1" inactive-value="0" />
@ -73,7 +73,7 @@
<!--编辑字典类型信息--> <!--编辑字典类型信息-->
<edit-dic-data ref="editDrawer" /> <edit-dic-data ref="editDrawer" />
<!--编辑字典信息--> <!--编辑字典信息-->
<edit-dic-info ref="edit" /> <edit-dic-info @update="fetchData" ref="edit" />
</div> </div>
</template> </template>

Loading…
Cancel
Save