feat: 编辑指标修改

dev_1.0.0
xiangcongshuai 9 months ago
parent 2106516ab2
commit 904a772533

@ -19,6 +19,7 @@
"element-ui": "2.15.13",
"exceljs": "4.3.0",
"file-saver": "2.0.5",
"html2canvas": "^1.4.1",
"js-md5": "0.7.3",
"jszip": "3.10.1",
"moment": "2.29.4",

@ -38,6 +38,9 @@ dependencies:
file-saver:
specifier: 2.0.5
version: 2.0.5
html2canvas:
specifier: ^1.4.1
version: 1.4.1
js-md5:
specifier: 0.7.3
version: 0.7.3
@ -3090,6 +3093,11 @@ packages:
/balanced-match@1.0.2:
resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==}
/base64-arraybuffer@1.0.2:
resolution: {integrity: sha512-I3yl4r9QB5ZRY3XuJVEPfc2XhZO6YweFPI+UovAzn+8/hb3oJ6lnysaFcjVpkCPfVWFUDvoZ8kmVDP7WyRtYtQ==}
engines: {node: '>= 0.6.0'}
dev: false
/base64-js@1.5.1:
resolution: {integrity: sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==}
@ -4192,6 +4200,12 @@ packages:
postcss: 8.4.39
dev: true
/css-line-break@2.1.0:
resolution: {integrity: sha512-FHcKFCZcAha3LwfVBhCQbW2nCNbkZXn7KVUJcsT5/P8YmfsVja0FMPJr0B903j/E69HUphKiV9iQArX8SDYA4w==}
dependencies:
utrie: 1.0.2
dev: false
/css-loader@6.11.0(webpack@5.93.0):
resolution: {integrity: sha512-CTJ+AEQJjq5NzLga5pE39qdiSV56F8ywCIsqNIRF0r7BDgWsN25aazToqAFg7ZrtA/U016xudB3ffgweORxX7g==}
engines: {node: '>= 12.13.0'}
@ -6049,6 +6063,7 @@ packages:
/get-stream@4.1.0:
resolution: {integrity: sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w==}
engines: {node: '>=6'}
requiresBuild: true
dependencies:
pump: 3.0.0
dev: true
@ -6065,6 +6080,7 @@ packages:
/get-stream@6.0.1:
resolution: {integrity: sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==}
engines: {node: '>=10'}
requiresBuild: true
dev: true
/get-symbol-description@1.0.2:
@ -6446,6 +6462,14 @@ packages:
webpack: 5.93.0(webpack-cli@5.0.2)
dev: true
/html2canvas@1.4.1:
resolution: {integrity: sha512-fPU6BHNpsyIhr8yyMpTLLxAbkaK8ArIBcmZIRiBLiDhjeqvXolaEmDGmELFuX9I4xDcaKKcJl+TKZLqruBbmWA==}
engines: {node: '>=8.0.0'}
dependencies:
css-line-break: 2.1.0
text-segmentation: 1.0.3
dev: false
/htmlparser2@3.10.1:
resolution: {integrity: sha512-IgieNijUMbkDovyoKObU1DUhm1iwNYE/fuifEoEHfd1oZKZDaONBSkal7Y01shxsM49R4XaMdGez3WnF9UfiCQ==}
dependencies:
@ -6545,6 +6569,7 @@ packages:
/human-signals@2.1.0:
resolution: {integrity: sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==}
engines: {node: '>=10.17.0'}
requiresBuild: true
dev: true
/iconv-lite@0.4.24:
@ -7080,6 +7105,7 @@ packages:
/is-stream@2.0.1:
resolution: {integrity: sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==}
engines: {node: '>=8'}
requiresBuild: true
dev: true
/is-string@1.0.7:
@ -7696,6 +7722,7 @@ packages:
/mimic-fn@2.1.0:
resolution: {integrity: sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==}
engines: {node: '>=6'}
requiresBuild: true
dev: true
/mimic-response@1.0.1:
@ -7987,6 +8014,7 @@ packages:
/npm-run-path@4.0.1:
resolution: {integrity: sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==}
engines: {node: '>=8'}
requiresBuild: true
dependencies:
path-key: 3.1.1
dev: true
@ -9015,6 +9043,7 @@ packages:
/pseudomap@1.0.2:
resolution: {integrity: sha512-b/YwNhb8lk1Zz2+bXXpS/LK9OisiZZ1SNsSLxN1x2OXVEhW2Ckr/7mWE5vrC1ZTiJlD9g19jWszTmJsB+oEpFQ==}
requiresBuild: true
dev: true
/public-encrypt@4.0.3:
@ -9030,6 +9059,7 @@ packages:
/pump@3.0.0:
resolution: {integrity: sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==}
requiresBuild: true
dependencies:
end-of-stream: 1.4.4
once: 1.4.0
@ -10113,6 +10143,7 @@ packages:
/strip-final-newline@2.0.0:
resolution: {integrity: sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==}
engines: {node: '>=6'}
requiresBuild: true
dev: true
/strip-indent@2.0.0:
@ -10346,6 +10377,12 @@ packages:
commander: 2.20.3
source-map-support: 0.5.21
/text-segmentation@1.0.3:
resolution: {integrity: sha512-iOiPUo/BGnZ6+54OsWxZidGCsdU8YbE4PSpdPinp7DeMtUJNJBoJ/ouUSTJjHkh1KntHaltHl/gDs2FC4i5+Nw==}
dependencies:
utrie: 1.0.2
dev: false
/text-table@0.2.0:
resolution: {integrity: sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==}
dev: true
@ -10807,6 +10844,12 @@ packages:
engines: {node: '>= 0.4.0'}
dev: true
/utrie@1.0.2:
resolution: {integrity: sha512-1MLa5ouZiOmQzUbjbu9VmjLzn1QLXBhwpUa7kdLUQK+KQ5KA9I1vk5U4YHe/X2Ch7PYnJfWuWT+VbuxbGwljhw==}
dependencies:
base64-arraybuffer: 1.0.2
dev: false
/uuid@3.4.0:
resolution: {integrity: sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A==}
deprecated: Please upgrade to version 7 or higher. Older versions may use Math.random() in certain circumstances, which is known to be problematic. See https://v8.dev/blog/math-random for details.
@ -11493,6 +11536,7 @@ packages:
/yallist@2.1.2:
resolution: {integrity: sha512-ncTzHV7NvsQZkYe1DW7cbDLm0YpzHmZF5r/iyP3ZnQtMiJ+pjzisCiMNI+Sj+xQF5pXhSHxSB3uDbsBTzY/c2A==}
requiresBuild: true
dev: true
/yallist@3.1.1:

@ -5,7 +5,7 @@ const network = {
// 默认的接口地址 如果是开发环境和生产环境走vab-mock-server当然你也可以选择自己配置成需要的接口地址
baseURL:
process.env.NODE_ENV === 'development'
? 'http://192.168.10.25:8097/fu-hsi-server'
? 'http://192.168.10.27:8097/fu-hsi-server'
: '/fuHsiApi',
// 配后端数据的接收方式application/json;charset=UTF-8或者application/x-www-form-urlencoded;charset=UTF-8
contentType: 'application/json;charset=UTF-8',

@ -21,6 +21,7 @@
<span :style="commonStyle">{{ caseData['totalScore'] }}</span>
<span :style="commonStyle">{{ caseData['identifyResultName'] }}</span>
<span>{{ `最新时间:${caseData['updateTime']}` }}</span>
<span v-if="isEdit" class="model" @click="handleAnalysis"></span>
</div>
<div
v-else
@ -36,7 +37,7 @@
<div>
<el-button type="info" plain icon="el-icon-download" @click="handleDownload"></el-button>
<el-button v-if="isEdit" type="primary" plain icon="el-icon-edit" @click="handleEdit"></el-button>
<el-button v-if="isEdit" type="primary" :icon="caseData.isAnalysing ? 'el-icon-loading' : 'el-icon-refresh'" @click="handleAnalysis"></el-button>
<!-- <el-button v-if="isEdit" type="primary" :icon="caseData.isAnalysing ? 'el-icon-loading' : 'el-icon-refresh'" @click="handleAnalysis"></el-button> -->
<el-button type="text" icon="el-icon-arrow-up" style="color: #666666" @click="expand = false">收起</el-button>
</div>
</div>
@ -285,6 +286,17 @@ export default {
span:nth-last-child(1) {
font-size: 12px;
}
.model {
width: 200px;
height: 52px;
background: #3763FF;
border-radius: 26px 26px 26px 26px;
text-align: center;
font-size: 18px !important;
color: #FFFFFF;
line-height: 52px;
cursor: pointer;
}
}
.empty-score {
justify-content: center;

@ -40,7 +40,7 @@
</template>
<script>
import {addCaseInfo, checkCaseNo} from '@/api/caseManagement'
import { addCaseInfo, checkCaseNo } from '@/api/caseManagement'
export default {
name: 'EditCaseInfo',

@ -79,6 +79,7 @@ export default {
//
victimEdit: false,
caseData: {},
caseId:"",
//
gridOptions: {
...mixin.data().gridOptions,
@ -108,6 +109,8 @@ export default {
methods: {
//
show(data) {
debugger
this.caseId = data.id
this.dialogOption.show = true
this.caseData = data
this.fetchData()
@ -129,7 +132,7 @@ export default {
async save() {
const res = await saveCaseAtomicResult({
caseAtomicIndexList: this.gridOptions.data,
caseId: this.$route.params.id
caseId: this.caseId
})
if (res.code === 200) {
this.$baseMessage.success('保存成功')
@ -145,7 +148,7 @@ export default {
//
fetchData() {
const params = {
caseId: this.$route.params.id
caseId: this.caseId
}
listCaseAtomicIndex(params).then(res => {
this.gridOptions.data = res.data

@ -7,7 +7,7 @@
-->
<template>
<div class="content">
<div ref="htmlContent" class="content">
<cs-search title="案件检索" :data="searchData" :span="8" @onSearch="onSearch" @getData="onSearch" />
<div class="case-content">
<div class="flex-row header">
@ -88,6 +88,9 @@
@pagination="fetchData"
/>
</div>
<div ref="cutImageBox">
<img id="imgId" src="" alt="">
</div>
</div>
<!--编辑/新增弹窗-->
<edit-case-info ref="edit" @reloadData="fetchData" />
@ -104,6 +107,7 @@ import * as vuedraggable from 'vuedraggable'
import EditCaseInfo from '@/views/caseManagement/components/EditCaseInfo.vue'
import ModelAnalysis from '@/views/caseManagement/components/ModelAnalysis.vue'
import { queryCaseList, delCaseInfo, uploadCase, executeModelAnalyse } from '@/api/caseManagement'
// import html2canvas from 'html2canvas'
export default {
name: 'Index',
components: { ModelAnalysis, EditCaseInfo, vuedraggable },
@ -153,6 +157,24 @@ export default {
},
//
handleAdd() {
// ,,
// html2canvas(this.$refs.cutImageBox, {
// backgroundColor: null, // ,null
// useCORS: true, //
// scale: 1 //
// }).then((canvas) => {
// // base64,线
// const url = canvas.toDataURL('image/png') // toDataURL: base64
// this.imgUrl = url
// //
// console.log(url, 67)
// const a = document.createElement('a') // a
// const event = new MouseEvent('click') //
// a.download = name || '' //
// a.href = this.imgUrl // URLa.href
// a.dispatchEvent(event) // a
// })
this.$refs.edit.show()
},
//

@ -15,7 +15,7 @@
<template slot="content">
<el-form ref="form" :model="ruleForm" :rules="rules" label-width="120px">
<el-form-item label="指标算法" prop="indexSource">
<el-radio-group v-model="ruleForm['indexSource']" :disabled="isView">
<el-radio-group v-model="ruleForm['indexSource']" :disabled="isView" @change="changeType">
<el-radio
v-for="item in sourceOptions"
:key="item.value"
@ -23,14 +23,14 @@
>
{{ item.label }}
</el-radio>
<!-- <el-radio label="1">人工指定</el-radio>-->
<!-- <el-radio label="2">数据库查询</el-radio>-->
<!-- <el-radio label="3">图谱生成</el-radio>-->
<!-- <el-radio label="4">大模型</el-radio>-->
<!-- <el-radio label="1">人工指定</el-radio>-->
<!-- <el-radio label="2">数据库查询</el-radio>-->
<!-- <el-radio label="3">图谱生成</el-radio>-->
<!-- <el-radio label="4">大模型</el-radio>-->
</el-radio-group>
</el-form-item>
<el-form-item label="案件类型" prop="caseType">
<el-select v-model="ruleForm['caseType']" :disabled="isView" placeholder="请选择案件类型" style="width: 100%">
<el-select v-model="ruleForm.caseType" :disabled="isView" placeholder="请选择案件类型" style="width: 100%">
<el-option
v-for="item in caseTypeOptions"
:key="item.value"
@ -51,7 +51,7 @@
</el-form-item>
<el-form-item v-if="ruleForm['indexSource'] === '4'" label="prompt内容" prop="prompt">
<el-input
v-model="ruleForm['prompt']"
v-model="ruleForm.prompt"
:disabled="isView"
type="textarea"
:rows="5"
@ -69,24 +69,24 @@
</el-form-item>
<el-form-item label="原子指标名称" prop="name">
<el-input
v-model="ruleForm['name']"
v-model="ruleForm.name"
:disabled="isView"
placeholder="请输入原子指标名称"
/>
</el-form-item>
<!-- <el-form-item label="判断结果" prop="judgeResult">-->
<!-- <el-select v-model="ruleForm['judgeResult']" :disabled="isView" placeholder="请选择判断结果" style="width: 100%">-->
<!-- <el-option-->
<!-- v-for="item in resultOptions"-->
<!-- :key="item.value"-->
<!-- :label="item.label"-->
<!-- :value="item.value"-->
<!-- />-->
<!-- </el-select>-->
<!-- </el-form-item>-->
<!-- <el-form-item label="判断结果" prop="judgeResult">-->
<!-- <el-select v-model="ruleForm['judgeResult']" :disabled="isView" placeholder="请选择判断结果" style="width: 100%">-->
<!-- <el-option-->
<!-- v-for="item in resultOptions"-->
<!-- :key="item.value"-->
<!-- :label="item.label"-->
<!-- :value="item.value"-->
<!-- />-->
<!-- </el-select>-->
<!-- </el-form-item>-->
<el-form-item label="原子指标说明" prop="remark">
<el-input
v-model="ruleForm['remark']"
v-model="ruleForm.remark"
:disabled="isView"
type="textarea"
:rows="5"
@ -120,7 +120,13 @@ export default {
resultOptions: JSON.parse(sessionStorage.getItem('judge_result')),
//
ruleForm: {
indexSource: '1'
indexSource: '1',
caseType: '',
recordType: '',
prompt: '',
queryLang: '',
name: '',
remark: ''
},
rules: {
indexSource: [{ required: true, message: '指标算法不能为空!', trigger: 'blur' }],
@ -141,15 +147,19 @@ export default {
//
show(data, isEdit) {
this.isEdit = isEdit
this.isView = data && !isEdit
this.ruleForm = this.isView ? data : (isEdit ? data : { indexSource: '1' })
this.drawerOption.hiddenFooter = this.isView
this.drawerOption.show = true
this.$nextTick(() => {
const _this = this
const formData = JSON.parse(JSON.stringify(data))
_this.isView = formData && !isEdit
_this.ruleForm = _this.isView ? formData : (isEdit ? formData : { indexSource: '1' })
_this.drawerOption.hiddenFooter = _this.isView
})
},
//
handleReset() {
this.$refs.form.resetFields()
this.$refs.form.clearValidate()
this.$refs['form'].resetFields()
// this.$refs.form.clearValidate()
},
//
handleSubmit() {
@ -161,6 +171,11 @@ export default {
this.$emit('reloadData')
}
})
},
//
changeType(val) {
this.$refs['form'].resetFields()
this.ruleForm['indexSource'] = val
}
}
}

@ -117,7 +117,12 @@ export default {
type: Array,
required: true,
defaultValue: []
}
},
judgeLogic: {
type: String,
required: true,
defaultValue: ""
},
},
data() {
return {
@ -131,6 +136,10 @@ export default {
symbolOptions: JSON.parse(sessionStorage.getItem('judge_result'))
}
},
mounted() {
if(!this.judgeLogic) return
this.logicData = JSON.parse(this.judgeLogic)
},
methods: {
//
handleAdd() {

@ -107,7 +107,7 @@
</el-form>
<div v-if="activeStep === 1">
<p>{{ `[${indexTypeName}] ${ruleForm['name']}` }}</p>
<custom-logic ref="custom" :atomic-index-data="ruleForm['atomicIndexList']" />
<custom-logic ref="custom" :atomic-index-data="ruleForm['atomicIndexList']" :judge-logic="ruleForm['judgeLogic']" />
</div>
<!--原子指标选择-->
<select-atomic ref="select" @submit="handleAtomicSubmit" />
@ -160,7 +160,11 @@ export default {
name: [{ required: true, message: '指标名称不能为空!', trigger: 'blur' }],
caseType: [{ required: true, message: '案件类型不能为空!', trigger: 'blur' }],
indexType: [{ required: true, message: '指标类型不能为空!', trigger: 'blur' }],
indexScore: [{ required: true, message: '指标分数不能为空!', trigger: 'blur' }],
indexScore: [{ required: true, message: '指标分数不能为空!', trigger: 'blur' }, {
pattern: /^-?\d+(\.\d+)?$/,
message: '请输入正确格式',
trigger: 'change'
}],
// indexRules: [{ required: true, message: '!', trigger: 'blur' }],
atomicIndex: [{ required: true, message: '原子指标不能为空!', trigger: 'blur' }],
judgeLogic: [{ required: true, message: '指标说明不能为空!', trigger: 'blur' }]
@ -173,14 +177,18 @@ export default {
//
show(data, isEdit) {
this.isEdit = isEdit
this.ruleForm = isEdit ? data : {}
if (isEdit && this.$baseLodash.isString(this.ruleForm['caseType'])) {
this.ruleForm.caseType = this.ruleForm.caseType.split(',')
}
if (this.isEdit) {
this.indexTypeName = this.ruleForm.indexTypeName
}
this.drawerOption.show = true
this.$nextTick(() => {
const _this = this
_this.ruleForm = isEdit ? JSON.parse(JSON.stringify(data)) : {}
if (isEdit && _this.$baseLodash.isString(_this.ruleForm['caseType'])) {
_this.ruleForm.caseType = _this.ruleForm.caseType.split(',')
}
if (_this.isEdit) {
_this.indexTypeName = _this.ruleForm.indexTypeName
}
})
},
//
handleChange(val) {

@ -37,14 +37,14 @@
</el-row>
</el-form>
<vxe-grid ref="xTable" v-bind="gridOptions" style="margin-top: 10px" />
<div style="text-align: center">
<!-- <div style="text-align: center">
<cs-page
:page.sync="queryForm.page"
:limit.sync="queryForm.size"
:total="queryForm.total"
@pagination="fetchData"
/>
</div>
</div> -->
</template>
</cs-dialog>
</template>
@ -74,7 +74,7 @@ export default {
...mixin.data().gridOptions,
height: '320px',
columns: [
{ type: 'checkbox', width: '40px' },
{ type: 'checkbox', width: '80px' },
{ title: '原子指标名称', field: 'name' },
{ title: '指标来源', field: 'indexSourceName' },
{ title: '指标说明', field: 'remark' }
@ -94,7 +94,7 @@ export default {
},
//
fetchData() {
queryAtomicIndex(this.searchForm, this.queryForm.page, this.queryForm.size).then(res => {
queryAtomicIndex(this.searchForm, 1, 99999).then(res => {
this.gridOptions.data = res.data.result
this.queryForm.total = res.data.total
if (this.selectedData && this.selectedData.length > 0) {

@ -119,7 +119,7 @@ export default {
},
//
handleAdd() {
this.$refs.edit.show()
this.$refs.edit.show(undefined, false)
},
//
handleChange() {

Loading…
Cancel
Save