diff --git a/src/router/index.js b/src/router/index.js index a1615e9..e1025d1 100644 --- a/src/router/index.js +++ b/src/router/index.js @@ -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', diff --git a/src/views/caseDetails/components/AddEvidence/AddFolder.vue b/src/views/caseDetails/components/AddEvidence/AddFolder.vue new file mode 100644 index 0000000..fbfe2a0 --- /dev/null +++ b/src/views/caseDetails/components/AddEvidence/AddFolder.vue @@ -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> diff --git a/src/views/caseDetails/components/CaseEvidence.vue b/src/views/caseDetails/components/CaseEvidence.vue index e730b2c..aa9d699 100644 --- a/src/views/caseDetails/components/CaseEvidence.vue +++ b/src/views/caseDetails/components/CaseEvidence.vue @@ -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> diff --git a/src/views/promptManagement/PromptConfig/add/index.vue b/src/views/promptManagement/PromptConfig/add/index.vue new file mode 100644 index 0000000..837012b --- /dev/null +++ b/src/views/promptManagement/PromptConfig/add/index.vue @@ -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> diff --git a/src/views/promptManagement/PromptConfig/index.vue b/src/views/promptManagement/PromptConfig/index.vue new file mode 100644 index 0000000..1922638 --- /dev/null +++ b/src/views/promptManagement/PromptConfig/index.vue @@ -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> diff --git a/src/views/ruleEngine/atomicIndex/components/EditAtomic.vue b/src/views/ruleEngine/atomicIndex/components/EditAtomic.vue index a365117..95e6a85 100644 --- a/src/views/ruleEngine/atomicIndex/components/EditAtomic.vue +++ b/src/views/ruleEngine/atomicIndex/components/EditAtomic.vue @@ -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: { diff --git a/src/views/ruleEngine/atomicIndex/components/SelectSql.vue b/src/views/ruleEngine/atomicIndex/components/SelectSql.vue new file mode 100644 index 0000000..412286c --- /dev/null +++ b/src/views/ruleEngine/atomicIndex/components/SelectSql.vue @@ -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> diff --git a/src/views/ruleEngine/indexRule/components/CustomLogic.vue b/src/views/ruleEngine/indexRule/components/CustomLogic.vue index 510fd9b..73bb002 100644 --- a/src/views/ruleEngine/indexRule/components/CustomLogic.vue +++ b/src/views/ruleEngine/indexRule/components/CustomLogic.vue @@ -163,7 +163,7 @@ export default { this.logicData.map((item) => { item.atomicData.map((subItem) => { if (!this.getListValueFlag(subItem.atomicIndex)) { - subItem.atomicIndex = "" + subItem.atomicIndex = '' } }) })