feat: 代码提交

dev_1.0.0
xiangcongshuai 9 months ago
parent d23c55fb49
commit 2106516ab2

@ -98,3 +98,52 @@ export function queryIndexDetail(data, page, size) {
params: data params: data
}) })
} }
/** 查询证据列表 */
export function queryEvidenceList(data) {
return request({
url: `/caseEvidence/pageListEvidence`,
method: 'get',
params: data
})
}
/** 新增案件证据 */
export function saveEvidence(data) {
return request({
url: `/caseEvidence/saveEvidence`,
method: 'post',
data
})
}
/** 编辑案件证据 */
export function updateEvidence(data) {
return request({
url: `/caseEvidence/updateEvidence`,
method: 'post',
data
})
}
/** 删除案件证据 */
export function deleteEvidence(data) {
return request({
url: `/caseEvidence/deleteEvidence`,
method: 'delete',
data
})
}
/** 查询案件原子列表 */
export function listCaseAtomicIndex(data) {
return request({
url: `/modelIndex/listCaseAtomicIndex`,
method: 'get',
params: data
})
}
/** 保存案件原子指标结果 */
export function saveCaseAtomicResult(data) {
return request({
url: `/modelIndex/saveCaseAtomicResult`,
method: 'post',
data
})
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.7 MiB

@ -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.1.2:8080' ? 'http://192.168.10.25: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',

@ -27,7 +27,7 @@
/> />
</div> </div>
<!--编辑/新增证据--> <!--编辑/新增证据-->
<edit-evidence ref="edit" /> <edit-evidence @onClose="fetchData" ref="edit" />
</div> </div>
</template> </template>
@ -35,7 +35,7 @@
import mixin from '@/views/mixin' import mixin from '@/views/mixin'
import EditEvidence from '@/views/caseDetails/components/edit/EditEvidence.vue' import EditEvidence from '@/views/caseDetails/components/edit/EditEvidence.vue'
import { queryEvidenceList, deleteEvidence } from '@/api/caseDetails'
export default { export default {
name: 'CaseEvidence', name: 'CaseEvidence',
components: { EditEvidence }, components: { EditEvidence },
@ -58,11 +58,11 @@ export default {
gridOptions: { gridOptions: {
...mixin.data().gridOptions, ...mixin.data().gridOptions,
columns: [ columns: [
{ title: '序号', type: 'seq' }, { title: '序号', type: 'seq',width:80 },
{ title: '证据名称', field: 'name' }, { title: '证据名称', field: 'evidenceName' },
{ title: '证件类型', field: 'roleName' }, { title: '证据类型', field: 'evidenceTypeDesc' },
{ title: '证件文件', field: 'confessionMaterial' }, // { title: '', field: 'confessionMaterial' },
{ title: '最新时间', field: 'newDate' }, { title: '最新时间', field: 'updateTime' },
{ title: '操作', slots: { default: 'opera' }, fixed: 'right', width: '100px' } { title: '操作', slots: { default: 'opera' }, fixed: 'right', width: '100px' }
], ],
data: [{}] data: [{}]
@ -79,10 +79,25 @@ export default {
immediate: true immediate: true
} }
}, },
mounted() {
this.caseId = this.$route.params.id
this.$nextTick(() => {
this.tableHeight(this.isExpand ? (this.isEdit ? 550 : 500) : (this.isEdit ? 380 : 330))
})
this.fetchData()
},
methods: { methods: {
// //
fetchData() { fetchData() {
const params = {
caseId: this.caseId,
page: this.queryForm.page,
size: this.queryForm.size
}
queryEvidenceList(params).then(res => {
this.gridOptions.data = res.data.records
this.queryForm.total = res.data.total
})
}, },
// //
handleAdd() { handleAdd() {
@ -95,7 +110,11 @@ export default {
// //
handleDel(row) { handleDel(row) {
this.$baseConfirm('你确定要删除当前项吗', null, async() => { this.$baseConfirm('你确定要删除当前项吗', null, async() => {
const { code, msg } = await deleteEvidence({
evidenceId: row.id
})
code === 200 ? this.$baseMessage.success(msg || '删除成功!') : this.$baseMessage.error(msg || '删除成功!')
this.fetchData()
}) })
} }
} }

@ -23,20 +23,20 @@
v-for="item in evidenceTypeList" v-for="item in evidenceTypeList"
:key="item.value" :key="item.value"
:value="item.value" :value="item.value"
:label:="item.label" :label="item.label"
/> />
</el-select> </el-select>
</el-form-item> </el-form-item>
<el-form-item label="提供人" prop="provider"> <el-form-item label="提供人" prop="provider">
<el-input v-model="evidenceForm['provider']" placeholder="请输入提供人" /> <el-input v-model="evidenceForm['provider']" placeholder="请输入提供人" />
</el-form-item> </el-form-item>
<el-form-item label="甲方" prop="firstParty"> <el-form-item label="甲方" prop="partyA">
<el-input v-model="evidenceForm['firstParty']" placeholder="请输入甲方" /> <el-input v-model="evidenceForm['partyA']" placeholder="请输入甲方" />
</el-form-item> </el-form-item>
<el-form-item label="乙方" prop="partyB"> <el-form-item label="乙方" prop="partyB">
<el-input v-model="evidenceForm['partyB']" placeholder="请输入乙方" /> <el-input v-model="evidenceForm['partyB']" placeholder="请输入乙方" />
</el-form-item> </el-form-item>
<el-form-item label="上传材料" prop="file"> <el-form-item label="上传材料" prop="fileIdList">
<el-upload <el-upload
class="upload-demo" class="upload-demo"
:action="uploadOption.action" :action="uploadOption.action"
@ -44,6 +44,7 @@
:on-preview="handlePreview" :on-preview="handlePreview"
:on-remove="handleRemove" :on-remove="handleRemove"
:before-remove="beforeRemove" :before-remove="beforeRemove"
:on-success="handleSuccess"
multiple multiple
:on-exceed="handleExceed" :on-exceed="handleExceed"
:file-list="fileList" :file-list="fileList"
@ -58,38 +59,54 @@
</template> </template>
<script> <script>
import { baseURL } from '@/config/net.config'
import { saveEvidence, updateEvidence } from '@/api/caseDetails'
export default { export default {
name: 'EditEvidence', name: 'EditEvidence',
data() { data() {
return { return {
drawerOption: { drawerOption: {
show: false, show: false,
title: '添加笔录' title: '添加证据'
}, },
// //
evidenceForm: {}, evidenceForm: {
fileIdList: []
},
rules: { rules: {
evidenceName: [{ required: true, message: '证据名称不能为空!', trigger: 'blur' }], evidenceName: [{ required: true, message: '证据名称不能为空!', trigger: 'blur' }],
evidenceType: [{ required: true, message: '证据类型不能为空!', trigger: 'blur' }], evidenceType: [{ required: true, message: '证据类型不能为空!', trigger: 'change' }],
provider: [{ required: true, message: '提供人不能为空!', trigger: 'blur' }], provider: [{ required: true, message: '提供人不能为空!', trigger: 'blur' }],
file: [{ required: true, message: '上传材料不能为空!', trigger: 'blur' }] fileIdList: [{ required: true, message: '上传材料不能为空!', trigger: 'change' }]
}, },
// //
evidenceTypeList: [], evidenceTypeList: JSON.parse(sessionStorage.getItem('evidence_type')),
// //
fileList: [], fileList: [],
// //
uploadOption: { uploadOption: {
action: '', action: `${baseURL}/minio/uploadFile`,
accept: '.docx,.bmp,.jpg,.png' accept: '.docx,.bmp,.jpg,.png'
}, },
isEdit: false isEdit: false
} }
}, },
methods: { methods: {
show(data, isEdit) { show(data, isEdit) {
this.isEdit = isEdit this.isEdit = isEdit
this.evidenceForm = isEdit ? data : {} this.fileList = []
this.evidenceForm = isEdit ? data : { fileIdList: [] }
if (isEdit) {
const list = []
data.fileList.forEach(e => {
list.push(e.fileId)
this.fileList.push({
name: e.fileName
})
})
this.evidenceForm.fileIdList = list
}
this.drawerOption.title = isEdit ? '编辑证据' : '添加证据' this.drawerOption.title = isEdit ? '编辑证据' : '添加证据'
this.drawerOption.show = true this.drawerOption.show = true
}, },
@ -106,11 +123,37 @@ export default {
// //
handleSubmit() { handleSubmit() {
this.$refs.form.validate(valid => { this.$refs.form.validate(valid => {
if (valid) { this.drawerOption.show = false } if (valid) {
const params = {
...this.evidenceForm,
caseId: this.$route.params.id
}
if (this.isEdit) {
updateEvidence(params).then(res => {
if (res.code === 200) {
this.$baseMessage.success('提交成功')
this.drawerOption.show = false
this.$emit('onClose')
}
})
} else {
saveEvidence(params).then(res => {
if (res.code === 200) {
this.$baseMessage.success('提交成功')
this.drawerOption.show = false
this.$emit('onClose')
}
})
}
}
}) })
}, },
handleRemove(file, fileList) { handleRemove(file, uploadFiles) {
console.log(file, fileList) const list = []
for (const item of uploadFiles) {
list.push(item.response.data)
}
this.evidenceForm.fileIdList = list
}, },
handlePreview(file) { handlePreview(file) {
console.log(file) console.log(file)
@ -120,6 +163,11 @@ export default {
}, },
beforeRemove(file, fileList) { beforeRemove(file, fileList) {
return this.$confirm(`确定移除 ${file.name}`) return this.$confirm(`确定移除 ${file.name}`)
},
handleSuccess(response) {
if (response.code === 200) {
this.evidenceForm.fileIdList.push(response.data)
}
} }
} }
} }

@ -207,6 +207,7 @@ export default {
} }
}, },
mounted() { mounted() {
this.caseId = this.$route.params.id
this.getUserList() this.getUserList()
}, },
methods: { methods: {
@ -232,7 +233,7 @@ export default {
}, },
// //
getUserList() { getUserList() {
queryUserList({ caseId: this.caseId }).then(res => { queryUserList({ caseId: this.$route.params.id }).then(res => {
this.userList = res.data this.userList = res.data
}) })
}, },

@ -53,7 +53,7 @@
{{ caseData.caseDetail }} {{ caseData.caseDetail }}
</div> </div>
</el-descriptions-item> </el-descriptions-item>
<el-descriptions-item label="行为人">{{ caseData.lawActor }}</el-descriptions-item> <el-descriptions-item label="行为人">{{ caseData.lawActorName }}</el-descriptions-item>
<el-descriptions-item label="当事人">{{ caseData.lawParty }}</el-descriptions-item> <el-descriptions-item label="当事人">{{ caseData.lawParty }}</el-descriptions-item>
</el-descriptions> </el-descriptions>
</div> </div>
@ -174,7 +174,15 @@ export default {
fetchData() { fetchData() {
queryCaseList({ id: this.$route.params['id'] }, 1, 1).then(res => { queryCaseList({ id: this.$route.params['id'] }, 1, 1).then(res => {
if (res.code === 200) { if (res.code === 200) {
this.caseData = res.data.result[0] this.caseData = res.data.records[0]
if (this.caseData.lawPartyList) {
const list = []
this.caseData.lawPartyList.forEach(e => {
list.push(e.name)
})
this.caseData.lawParty = list.join(',')
}
// //
this.scoreOption.series[0].data = [{ value: this.caseData.totalScore }] this.scoreOption.series[0].data = [{ value: this.caseData.totalScore }]
// //
@ -216,7 +224,7 @@ export default {
this.$set(this.caseData, 'isAnalysing', true) this.$set(this.caseData, 'isAnalysing', true)
const params = { const params = {
caseId: this.$route.params['id'], caseId: this.$route.params['id'],
lawActor: this.caseData.lawActor, lawActorName: this.caseData.lawActorName,
lawParty: this.caseData.lawParty lawParty: this.caseData.lawParty
} }
executeModelAnalyse(params).then(res => { executeModelAnalyse(params).then(res => {

@ -17,7 +17,7 @@
<el-col :span="12"> <el-col :span="12">
<el-form-item label="行为人"> <el-form-item label="行为人">
<div class="flex-row"> <div class="flex-row">
<el-input v-model="caseData['lawActor']" :disabled="!doreEdit" /> <el-input v-model="caseData['lawActorName']" :disabled="!doreEdit" />
<el-button v-show="false" :plain="!doreEdit" type="primary" style="margin-left: 10px" @click="handelDore">{{ doreEdit ? '' : '' }}</el-button> <el-button v-show="false" :plain="!doreEdit" type="primary" style="margin-left: 10px" @click="handelDore">{{ doreEdit ? '' : '' }}</el-button>
</div> </div>
</el-form-item> </el-form-item>
@ -35,7 +35,7 @@
<h4>原子指标人工判别项</h4> <h4>原子指标人工判别项</h4>
<vxe-grid ref="xTable" v-bind="gridOptions"> <vxe-grid ref="xTable" v-bind="gridOptions">
<template #result_edit="{row}"> <template #result_edit="{row}">
<el-select v-model="row['result']" placeholder="请选择"> <el-select v-model="row['atomicResult']" placeholder="请选择">
<el-option <el-option
v-for="item in resultOptions" v-for="item in resultOptions"
:key="item.value" :key="item.value"
@ -44,6 +44,9 @@
/> />
</el-select> </el-select>
</template> </template>
<template #remark_edit="{row}">
<el-input v-model="row['remark']" placeholder="请输入" />
</template>
</vxe-grid> </vxe-grid>
<div style="text-align: center;margin-top: 10px"> <div style="text-align: center;margin-top: 10px">
<el-button type="primary" plain style="width: 80px" @click="() => { dialogOption.show = false }">取消</el-button> <el-button type="primary" plain style="width: 80px" @click="() => { dialogOption.show = false }">取消</el-button>
@ -56,7 +59,7 @@
<script> <script>
import mixin from '@/views/mixin' import mixin from '@/views/mixin'
import { listCaseAtomicIndex, saveCaseAtomicResult } from '@/api/caseDetails'
export default { export default {
name: 'ModelAnalysis', name: 'ModelAnalysis',
mixins: [mixin], mixins: [mixin],
@ -89,10 +92,13 @@ export default {
columns: [ columns: [
{ title: '序号', type: 'seq', width: '50px' }, { title: '序号', type: 'seq', width: '50px' },
{ title: '指标名称', field: 'indexName' }, { title: '指标名称', field: 'indexName' },
{ title: '原子指标', field: 'atomicIndexName' }, { title: '原子指标', field: 'automicIndexName' },
{ title: '判断结果', field: 'result', formatter: ({ cellValue }) => { { title: '判断结果', field: 'atomicResult', formatter: ({ cellValue }) => {
return cellValue ? this.resultOptions.find(item => item.value === cellValue).label : '' return cellValue ? this.resultOptions.find(item => item.value === cellValue).label : ''
}, editRender: {}, slots: { edit: 'result_edit' }} }, editRender: {}, slots: { edit: 'result_edit' }},
{ title: '备注', field: 'remark', formatter: ({ cellValue }) => {
return cellValue || ''
}, editRender: {}, slots: { edit: 'remark_edit' }}
], ],
data: [] data: []
}, },
@ -104,6 +110,7 @@ export default {
show(data) { show(data) {
this.dialogOption.show = true this.dialogOption.show = true
this.caseData = data this.caseData = data
this.fetchData()
}, },
// / // /
handelDore() { handelDore() {
@ -117,11 +124,32 @@ export default {
async handelSave() { async handelSave() {
const error = await this.$refs.xTable.validate(true) const error = await this.$refs.xTable.validate(true)
console.log(error, 666) console.log(error, 666)
this.save()
},
async save() {
const res = await saveCaseAtomicResult({
caseAtomicIndexList: this.gridOptions.data,
caseId: this.$route.params.id
})
if (res.code === 200) {
this.$baseMessage.success('保存成功')
this.dialogOption.show = false
}
}, },
// //
handleExecute() { async handleExecute() {
await this.save()
this.$emit('confirm', this.caseData) this.$emit('confirm', this.caseData)
this.dialogOption.show = false this.dialogOption.show = false
},
//
fetchData() {
const params = {
caseId: this.$route.params.id
}
listCaseAtomicIndex(params).then(res => {
this.gridOptions.data = res.data
})
} }
} }
} }

@ -20,7 +20,7 @@
</div> </div>
<el-row :gutter="20" type="flex" class="list-content"> <el-row :gutter="20" type="flex" class="list-content">
<vuedraggable v-model="caseList" animation="400" handle=".mover" style="width: 100%"> <vuedraggable v-model="caseList" animation="400" handle=".mover" style="width: 100%">
<transition-group> <transition-group class="list-span">
<el-col v-for="item in caseList" :key="item.id" :span="6"> <el-col v-for="item in caseList" :key="item.id" :span="6">
<div class="list-item" @click="handleClick(item)"> <div class="list-item" @click="handleClick(item)">
<div class="flex-row item-header"> <div class="flex-row item-header">
@ -42,14 +42,14 @@
<div class="item-body"> <div class="item-body">
<el-row :gutter="10" style="padding: 10px;"> <el-row :gutter="10" style="padding: 10px;">
<el-col :span="8"> <el-col :span="8">
<span class="item-body-top etc">{{ `行为人:${item['lawActor'] ? item['lawActor'] : '-'}` }}</span> <span class="item-body-top etc">{{ `行为人:${item['lawActorName'] ? item['lawActorName'] : '-'}` }}</span>
</el-col> </el-col>
<el-col :span="8"> <el-col :span="8">
<span class="item-body-top etc">{{ `案件编号:${item.caseNo}` }}</span> <span class="item-body-top etc">{{ `案件编号:${item.caseNo}` }}</span>
</el-col> </el-col>
<!-- <el-col :span="8">--> <!-- <el-col :span="8">-->
<!-- <span class="item-body-top etc">{{ `证据数量:${item.evidenceNum}` }}</span>--> <!-- <span class="item-body-top etc">{{ `证据数量:${item.evidenceNum}` }}</span>-->
<!-- </el-col>--> <!-- </el-col>-->
<el-col :span="24" style="margin-top: 10px"> <el-col :span="24" style="margin-top: 10px">
<span class="item-body-top etc">{{ `当事人:${item.lawParty}` }}</span> <span class="item-body-top etc">{{ `当事人:${item.lawParty}` }}</span>
</el-col> </el-col>
@ -114,7 +114,7 @@ export default {
{ label: '案件编号', model: 'caseNo', type: 'input' }, { label: '案件编号', model: 'caseNo', type: 'input' },
{ label: '案件名称', model: 'caseName', type: 'input' }, { label: '案件名称', model: 'caseName', type: 'input' },
{ label: '认定结果', model: 'identifyResult', type: 'select', option: JSON.parse(sessionStorage.getItem('identify_result')) }, { label: '认定结果', model: 'identifyResult', type: 'select', option: JSON.parse(sessionStorage.getItem('identify_result')) },
{ label: '行为人', model: 'lawActor', type: 'input' }, { label: '行为人', model: 'lawActorName', type: 'input' },
{ label: '当事人', model: 'lawParty', type: 'input' }, { label: '当事人', model: 'lawParty', type: 'input' },
{ label: '最新时间', model: 'updateTime', type: 'datetimerange' } { label: '最新时间', model: 'updateTime', type: 'datetimerange' }
], ],
@ -136,7 +136,14 @@ export default {
} }
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 => {
this.caseList = res.data.result this.caseList = res.data.records
this.caseList.forEach(e => {
const list = []
for (const item of e.lawPartyList) {
list.push(item.name)
}
e.lawParty = list.join(',')
})
this.queryForm.total = res.data.total this.queryForm.total = res.data.total
}) })
}, },
@ -199,7 +206,7 @@ export default {
this.$set(item, 'isAnalysing', true) this.$set(item, 'isAnalysing', true)
const params = { const params = {
caseId: item.id, caseId: item.id,
lawActor: item.lawActor, lawActorName: item.lawActorName,
lawParty: item.lawParty lawParty: item.lawParty
} }
executeModelAnalyse(params).then(res => { executeModelAnalyse(params).then(res => {
@ -256,6 +263,10 @@ export default {
overflow-y: auto; overflow-y: auto;
height: calc(100% - 32px - 32px - 20px); height: calc(100% - 32px - 32px - 20px);
flex-wrap: wrap; flex-wrap: wrap;
.list-span {
display: flex;
flex-wrap: wrap;
}
.list-item { .list-item {
background: #F2F5F9; background: #F2F5F9;
border: 1px solid #CADFFF; border: 1px solid #CADFFF;

@ -138,42 +138,46 @@ export default {
align-items: center; align-items: center;
width: 100vw; width: 100vw;
height: 100vh; height: 100vh;
background-image: url(../../assets/login/bg.png);
background-size: 100% 100%;
.login-left { .login-left {
font-weight: 700; font-weight: bold;
font-size: 20px; font-size: 50px;
margin-left: 160px;
color: #FFFFFF; color: #FFFFFF;
margin-left: 260px;
span:nth-child(1) { span:nth-child(1) {
font-size: 30px; font-size: 50px;
letter-spacing: 3px; letter-spacing: 3px;
} }
span:nth-child(2) { span:nth-child(2) {
font-size: 50px; font-size: 80px;
line-height: 100px;
letter-spacing: 13px; letter-spacing: 13px;
margin-top: 14px;
} }
span:nth-child(3) { span:nth-child(3) {
font-size: 27px; font-size: 40px;
margin-top: 24px;
} }
} }
.login-form { .login-form {
position: absolute; position: absolute;
background: #FFFFFF; background: #FFFFFF;
border-radius: 8px; border-radius: 8px;
right: 160px; right: 260px;
width: 380px; width: 500px;
min-height: 400px; min-height: 520px;
align-items: center; align-items: center;
padding: 0 30px; padding: 0 30px;
box-sizing: border-box; box-sizing: border-box;
.form-header { .form-header {
align-items: center; align-items: center;
padding: 30px 0; padding: 65px 0;
font-size: 24px;
color: #333333; color: #333333;
font-weight: 600;
span:nth-child(2) { span:nth-child(2) {
color: #666666; color: #666666;
margin-top: 5px; margin-top: 10px;
} }
} }
.login-item { .login-item {

Loading…
Cancel
Save