feat :ocr2.0

ocr_2.0
xiangcongshuai 7 months ago
parent bf1f806a03
commit a501d22021

@ -201,6 +201,20 @@ export const asyncRoutes = [
component: Layout,
meta: { title: '提示工程' },
children: [
{
path: '/prompt-config',
name: 'PromptConfig',
permission: 'p_promptManagement',
component: () => import('@/views/promptManagement/PromptConfig/index.vue'),
meta: { title: '提示词配置', affix: false }
},
{
path: '/add-prompt',
name: 'AddPrompt',
permission: 'p_promptManagement',
component: () => import('@/views/promptManagement/PromptConfig/add/index.vue'),
meta: { title: '新增提示词', affix: false }
},
{
path: '/prompt-management',
name: 'PromptManagement',

@ -0,0 +1,70 @@
<template>
<cs-dialog
:dialog="dialogOptions"
>
<template slot="content">
<div>
<el-form ref="form" :model="addInfo" :rules="rules" label-width="90px">
<el-form-item label="选择目录" prop="caseType">
<el-select v-model="dataInfo['caseType']" clearable placeholder="请选择案件类型">
<el-option v-for="item in caseTypeOptions" :key="item.value" :label="item.label" :value="item.value" />
</el-select>
</el-form-item>
<el-form-item label="提供人" prop="caseNo">
<el-select v-model="dataInfo['caseType']" clearable placeholder="请选择案件类型">
<el-option v-for="item in caseTypeOptions" :key="item.value" :label="item.label" :value="item.value" />
</el-select>
</el-form-item>
<el-form-item label="模版类型" prop="caseNo">
<el-input v-model="dataInfo['name']" clearable placeholder="请输入指令名称" />
</el-form-item>
<el-form-item label="备注" prop="caseNo">
<el-input v-model="dataInfo['name']" clearable placeholder="请输入指令名称" />
</el-form-item>
</el-form>
</div>
</template>
</cs-dialog>
</template>
<script>
export default {
name: 'AddFolder',
data() {
return {
dialogOptions: {
show: false,
width: '930px',
title: {
title: '新建文件夹'
},
hiddenFooter: true,
appendToBody: true
},
addInfo:{
}
}
},
mounted() {
},
methods: {
//
show() {
this.dialogOptions.show = true
},
handleSelect(val) {
this.$emit('selectOk', val)
this.dialogOptions.show = false
}
}
}
</script>
<style scoped lang="scss">
</style>

@ -1,35 +1,38 @@
<!--
* @description: 案件证据
* @fileName: CaseEvidence
* @author: 17076
* @date: 2024/6/26-下午3:09
* @version: V1.0.0
-->
<template>
<div class="evidence-content">
<div v-if="isEdit" class="flex-row" style="align-items: center; justify-content: space-between">
<el-button type="primary" icon="el-icon-circle-plus-outline" @click="handleAdd"></el-button>
<el-input v-model="searchName" placeholder="搜索名称" style="width: 300px" />
<div class="evidence-tree">
11
</div>
<vxe-grid v-bind="gridOptions" style="margin-top: 10px">
<template #opera="{row}">
<el-button type="text" @click="handelEdit(row)"></el-button>
<el-button type="text" style="color: red" @click="handleDel(row)"></el-button>
</template>
</vxe-grid>
<div style="text-align: center">
<cs-page
:page.sync="queryForm.page"
:limit.sync="queryForm.size"
:total="queryForm.total"
@pagination="fetchData"
/>
<div class="evidence-main">
<div v-if="isEdit" class="flex-row" style="align-items: center; justify-content: space-between">
<div>
<el-button type="primary" icon="el-icon-folder-add" @click="addFolder"></el-button>
<el-button type="primary" icon="el-icon-circle-plus-outline" @click="handleAdd"></el-button>
</div>
<el-input v-model="searchName" placeholder="搜索名称" style="width: 300px" />
</div>
<vxe-grid v-bind="gridOptions" style="margin-top: 10px">
<template #opera="{row}">
<el-button type="text" @click="handelEdit(row)"></el-button>
<el-button type="text" style="color: red" @click="handleDel(row)"></el-button>
</template>
</vxe-grid>
<div style="text-align: center">
<cs-page
:page.sync="queryForm.page"
:limit.sync="queryForm.size"
:total="queryForm.total"
@pagination="fetchData"
/>
</div>
</div>
<!--编辑/新增证据-->
<edit-evidence ref="edit" @onClose="fetchData" />
<!-- <edit-evidence ref="edit" @onClose="fetchData" /> -->
<!--选择上传笔录方式-->
<SelectUploadType ref="SelectUploadTypeRef" @selectOk="handleSelect" />
<!-- <SelectUploadType ref="SelectUploadTypeRef" @selectOk="handleSelect" /> -->
</div>
</template>
@ -98,6 +101,9 @@ export default {
debounceSearch: debounce((_this) => {
_this.fetchData()
}),
addFolder() {
},
//
fetchData() {
const params = {
@ -143,6 +149,12 @@ export default {
<style scoped lang="scss">
.evidence-content {
display: flex;
.evidence-tree {
width: 200px;
}
.evidence-main {
flex: 1;
}
}
</style>

@ -0,0 +1,62 @@
<template>
<div class="add-prompt">
<div class="left">
<div class="title">基础配置</div>
<el-form ref="form" :model="dataInfo" :rules="rules" label-width="90px">
<el-form-item label="案件类型" prop="caseType">
<el-select v-model="dataInfo['caseType']" clearable placeholder="请选择案件类型">
<el-option v-for="item in caseTypeOptions" :key="item.value" :label="item.label" :value="item.value" />
</el-select>
</el-form-item>
<el-form-item label="指令类型" prop="caseNo">
<el-select v-model="dataInfo['caseType']" clearable placeholder="请选择案件类型">
<el-option v-for="item in caseTypeOptions" :key="item.value" :label="item.label" :value="item.value" />
</el-select>
</el-form-item>
<el-form-item label="指令类型" prop="caseNo">
<el-input v-model="dataInfo['name']" clearable placeholder="请输入指令名称" />
</el-form-item>
<el-form-item label="关键词" prop="caseNo">
<el-input v-model="dataInfo['name']" clearable placeholder="请输入指令名称" />
</el-form-item>
<el-form-item label="选择目录" prop="caseType">
<el-select v-model="dataInfo['caseType']" clearable placeholder="请选择案件类型">
<el-option v-for="item in caseTypeOptions" :key="item.value" :label="item.label" :value="item.value" />
</el-select>
</el-form-item>
</el-form>
</div>
<div class="right">
<div class="right-header">
<span>提示词配置</span>
<div class="btn-list">11</div>
</div>
<div class="content">222</div>
</div>
</div>
</template>
<script>
export default {
data() {
return {
dataInfo: {
caseType: ''
},
//
caseTypeOptions: JSON.parse(sessionStorage.getItem('case_type'))
}
},
mounted() {
},
methods: {
}
}
</script>
<style lang="scss" scoped>
.add-prompt {
}
</style>

@ -0,0 +1,130 @@
<template>
<div class="content">
<cs-search title="提示词检索" :data="searchData" :span="6" direction="row" @onSearch="onSearch" @getData="onSearch" />
<div class="index-content">
<div class="header">
<el-button type="primary" icon="el-icon-circle-plus-outline" @click="handleAdd"></el-button>
<vxe-grid v-bind="gridOptions" style="margin-top: 20px">
<template #operate="{row}">
<el-button type="text" @click="handleEdit(row)"></el-button>
<el-button type="text" style="color: red" @click="handleDel(row)"></el-button>
</template>
</vxe-grid>
<div style="text-align: center">
<cs-page
:page.sync="queryForm.page"
:limit.sync="queryForm.size"
:total="queryForm.total"
@pagination="fetchData"
/>
</div>
</div>
</div>
</div>
</template>
<script>
import mixin from '@/views/mixin'
import { queryIndexData, deleteModelIndex } from '@/api/indexRule'
export default {
name: 'Index',
mixins: [mixin],
data() {
return {
//
searchData: [
{ label: '指标名称', model: 'name', type: 'input' },
{ label: '指标类别', model: 'indexType', type: 'select', option: JSON.parse(sessionStorage.getItem('index_type')) },
// { label: '', model: 'doer', type: 'input' },
{ label: '案件类型', model: 'caseType', type: 'select', option: JSON.parse(sessionStorage.getItem('case_type')) },
{ label: '原子指标', model: 'atomicIndexName', type: 'input' }
],
//
gridOptions: {
...mixin.data().gridOptions,
//
cellClassName: ({ column }) => {
if (column.field === 'indexName') {
return 'text-blue'
}
return null
},
//
expandConfig: {
iconClose: 'vxe-icon-square-plus',
iconOpen: 'vxe-icon-square-minus'
},
columns: [
{ title: '序号', type: 'seq', width: '50px' },
{ title: '指标名称', field: 'name', align: 'left' },
{ title: '指标类别', field: 'indexTypeName', width: '150px' },
{ title: '指标分数', field: 'indexScore', width: '150px', sortable: true },
{ title: '原子指标数量', field: 'atomicIndexNum', width: '150px' },
{ title: '最新时间', field: 'updateTime', width: '150px' },
{ title: '操作', slots: { default: 'operate' }, fixed: 'right', width: '150px' }
],
data: []
}
}
},
mounted() {
this.tableHeight(390)
},
methods: {
//
fetchData() {
queryIndexData({ ...this.searchFormData }, this.queryForm.page, this.queryForm.size).then(res => {
this.gridOptions.data = res.data.result
this.queryForm.total = res.data.total
})
},
//
handleAdd() {
},
//
handleDel(row) {
this.$baseConfirm('确定要删除吗?', null, async() => {
const { code, msg } = await deleteModelIndex(row.id)
code === 200 ? this.$baseMessage.success(msg || '删除成功!') : this.$baseMessage.error(msg || '删除失败!')
this.fetchData()
})
},
//
onSearch(data, callback) {
this.searchFormData = Object.assign({}, data)
this.queryForm.page = 1
this.fetchData()
if (callback) callback(true)
}
}
}
</script>
<style scoped lang="scss">
.content {
height: 100%;
.index-content {
border-radius: 8px;
background: white;
padding: 20px;
box-sizing: border-box;
margin-top: 10px;
height: calc(100% - 120px);
}
.expand-details {
background: #F6F6F6;
padding: 8px 20px;
box-sizing: border-box;
}
}
::v-deep {
.text-blue {
color: #005AA8;
}
.header-blue {
background: #F2F6FA;
}
}
</style>

@ -14,6 +14,23 @@
>
<template slot="content">
<el-form ref="form" :model="ruleForm" :rules="rules" label-width="120px">
<el-form-item label="案件类型" prop="caseType">
<el-select v-model="ruleForm.caseType" :disabled="isView" placeholder="请选择案件类型" style="width: 100%">
<el-option
v-for="item in caseTypeOptions"
:key="item.value"
:label="item.label"
:value="item.value"
/>
</el-select>
</el-form-item>
<el-form-item label="原子指标名称" prop="name">
<el-input
v-model="ruleForm.name"
:disabled="isView"
placeholder="请输入原子指标名称"
/>
</el-form-item>
<el-form-item label="指标算法" prop="indexSource">
<el-radio-group v-model="ruleForm['indexSource']" :disabled="isView" @change="changeType">
<el-radio
@ -29,16 +46,7 @@
<!-- <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-option
v-for="item in caseTypeOptions"
:key="item.value"
:label="item.label"
:value="item.value"
/>
</el-select>
</el-form-item>
<el-form-item v-if="ruleForm['indexSource'] === '4'" label="prompt标签" prop="recordType">
<el-select v-model="ruleForm['recordType']" :disabled="isView" placeholder="请选择prompt标签" style="width: 100%">
<el-option
@ -67,13 +75,7 @@
placeholder="请输入查询语句"
/>
</el-form-item>
<el-form-item label="原子指标名称" prop="name">
<el-input
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-->
@ -95,14 +97,18 @@
</el-form-item>
</el-form>
</template>
<SelectSql ref="SelectSqlRef" />
</cs-drawer>
</template>
<script>
import { addOrUpdAtomicIndex } from '@/api/atomicIndex'
import SelectSql from './SelectSql.vue'
export default {
name: 'EditAtomic',
components: {
SelectSql
},
data() {
return {
drawerOption: {

@ -0,0 +1,184 @@
<template>
<cs-dialog
:dialog="dialogOption"
class="SelectSql"
@onSubmit="handleSubmit"
>
<template slot="content">
<el-form v-model="searchForm" label-width="120px">
<el-row :gutter="10">
<el-col :span="10">
<el-form-item label="指令名称" prop="name">
<el-input v-model="searchForm['name']" clearable placeholder="请选择原子指标名称" />
</el-form-item>
</el-col>
<el-col :span="10">
<el-form-item label="指令类型" prop="indexSource">
<el-select v-model="searchForm['indexSource']" clearable placeholder="请选择指标算法">
<el-option
v-for="item in indexAlgorithmOptions"
:key="item.value"
:label="item.label"
:value="item.value"
/>
</el-select>
</el-form-item>
</el-col>
<el-col :span="4">
<el-button type="primary" @click="handleSearch"></el-button>
</el-col>
</el-row>
</el-form>
<div class="main">
<vxe-grid
ref="xTable"
row-id="id"
v-bind="gridOptions"
style="margin-top: 10px"
:checkbox-config="{ labelField: '', highlight: true, trigger: 'row', reserve: true , range: true}"
@checkbox-change="selectChangeEvent"
/>
<div class="main-right">
111
</div>
</div>
<!-- <div style="text-align: center">
<cs-page
:page.sync="queryForm.page"
:limit.sync="queryForm.size"
:total="queryForm.total"
@pagination="fetchData"
/>
</div> -->
</template>
</cs-dialog>
</template>
<script>
import mixin from '@/views/mixin'
import { queryAtomicIndex } from '@/api/atomicIndex'
export default {
name: 'SelectSql',
mixins: [mixin],
data() {
return {
dialogOption: {
show: false,
appendToBody: true,
title: {
title: '选择原子指标查询语句'
}
},
//
searchForm: {
name: '',
indexSource: ''
},
//
indexAlgorithmOptions: JSON.parse(sessionStorage.getItem('index_source')),
//
gridOptions: {
...mixin.data().gridOptions,
height: '320px',
columns: [
{ type: 'checkbox', width: '80px' },
{ title: '原子指标名称', field: 'name', align: 'left' },
{ title: '指标来源', field: 'indexSourceName' },
{ title: '指标说明', field: 'remark' }
],
data: []
},
//
selectionRows: []
}
},
methods: {
//
show(data) {
this.dialogOption.show = true
this.selectionRows = data
this.searchForm['name'] = ''
this.fetchData()
},
//
fetchData() {
queryAtomicIndex(this.searchForm, 1, 99999).then(res => {
this.gridOptions.data = res.data.result
this.queryForm.total = res.data.total
// this.$refs.xTable.clearCheckboxRow()
if (this.selectionRows && this.selectionRows.length > 0) {
//
const _this = this
_this.$nextTick(() => {
_this.gridOptions.data.map(column => {
_this.selectionRows.map(item => {
if (item.id === column.id) {
_this.$refs.xTable.setCheckboxRow(column, true)
}
})
})
})
}
})
},
// ()
selectChangeEvent({ checked, records, reserves, row }) {
//
if (checked) {
//
if (reserves.length == 0) {
this.selectedRowKeys = records.map(v => v.id)
this.selectionRows = records
} else {
// id,
this.selectedRowKeys = [...reserves.map(v => v.id), ...records.map(v => v.id)]
// ,
this.selectionRows = [...reserves, ...records]
}
} else {
//
const idIndex = this.selectedRowKeys.indexOf(row.id)
if (idIndex > -1) {
// id
this.$delete(this.selectedRowKeys, idIndex)
}
let dataIndex = null
for (let i = 0; i < this.selectionRows.length; i++) {
if (this.selectionRows[i].id === row.id) {
dataIndex = i
break
}
}
//
this.$delete(this.selectionRows, dataIndex)
}
},
//
handleSearch() {
this.fetchData()
},
//
handleSubmit() {
const list = this.selectionRows
if (list.length === 0) {
this.$baseMessage.error('请至少选择一项!')
return
}
this.$emit('submit', list)
this.dialogOption.show = false
}
}
}
</script>
<style lang="scss">
.SelectSql .el-dialog {
background: #fff;
}
</style>

@ -163,7 +163,7 @@ export default {
this.logicData.map((item) => {
item.atomicData.map((subItem) => {
if (!this.getListValueFlag(subItem.atomicIndex)) {
subItem.atomicIndex = ""
subItem.atomicIndex = ''
}
})
})

Loading…
Cancel
Save