fix: 语句调试

ocr_2.1
xiangcongshuai 5 months ago
parent d82e842bc2
commit 3f0d1d675c

@ -30,3 +30,12 @@ export function addOrUpdAtomicIndex(data) {
data
})
}
/** 图谱推理调试 */
export function atomicDebug(data) {
return request({
url: `/modelIndex/atomic/debug/graph`,
method: 'post',
data
})
}

@ -183,4 +183,21 @@ export function batchDeleteEvidence(data) {
method: 'delete',
data
})
}
/** 根据案件查询节点和关系列表 */
export function getNodeAndRelationListByCaseId(data) {
return request({
url: `/neo4j/getNodeAndRelationListByCaseId`,
method: 'get',
params: data
})
}
/** 案件图谱查询 */
export function getCaseGraph(data) {
return request({
url: `/neo4j/getCaseGraph`,
method: 'post',
data
})
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 583 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 680 B

@ -9,7 +9,7 @@
<template>
<el-dialog
:visible.sync="dialogVisible"
width="1300px"
width="1200px"
append-to-body
:before-close="handleClose"
>
@ -34,8 +34,41 @@
</div>
</template>
<div class="conversation-content">
<el-row>
<el-col :span="16">
<div v-if="firstEnter" class="conversation-item-left">
<p class="title">案件助手</p>
<p>可通过对话咨询方式查询案件笔录证据材料以及模型指标分析结果</p>
</div>
<div
v-for="(message, index) in conversationList"
:id="'message' + index"
:key="index"
class="conversation-item"
>
<div v-if="message.type === 'user'" class="flex-row user-message">
<span>{{ message['text'] }}</span>
</div>
<div v-if="message.type === 'robot'" class="robot-message">
<div v-loading="!message.text">
<span class="robot-message-item">
<span class="label">指标名称</span>
<span class="value">{{ message.name }}</span>
</span>
<span class="robot-message-item">
<span class="label">指标结果</span>
<span class="value">{{ message.name }}</span>
</span>
<span class="robot-message-item">
<span class="point" />
<span class="label">笔录</span>
<span class="value">{{ message.name }}</span>
</span>
</div>
</div>
</div>
<!-- <el-row>
<el-col :span="24">
<div class="content-left">
<div ref="message" class="left-top" :style="{ height: height + 'px' }">
<div v-if="firstEnter" class="conversation-item">
@ -67,7 +100,7 @@
</el-collapse-item>
</el-collapse>
</span>
<!-- <span>
<span>
<p>{{ `指标名称:${message['indexName']}` }}</p>
<p>{{ `笔录结果:${message['recordResult']}` }}</p>
<p>{{ `笔录信息:${message['recordInfo']}` }}</p>
@ -81,7 +114,7 @@
{{ item.fileName }}
</a>
</div>
</span> -->
</span>
</div>
</div>
</div>
@ -119,17 +152,33 @@
:key="subItem.key"
class="index-item"
>
<!-- <el-tooltip placement="top" :content="subItem.shortName"> -->
<el-tooltip placement="top" :content="subItem.shortName">
<span :title="subItem.shortName" class="etc">{{ subItem.shortName }}</span>
<!-- </el-tooltip> -->
<!-- <div v-if="caseIndex !== ''|| baseForm.caseId" class="ask-button" @click="handelAsk(subItem)"></div> -->
</el-tooltip>
<div v-if="caseIndex !== ''|| baseForm.caseId" class="ask-button" @click="handelAsk(subItem)"></div>
</div>
</div>
</el-tab-pane>
</el-tabs>
</div>
</el-col>
</el-row>
</el-row> -->
</div>
<div class="send-bottom">
<el-input
v-model="caseIndex"
placeholder="请输入咨询的案件指标......"
@keyup.enter.native="handleSend"
/>
<el-button
type="primary"
icon="el-icon-s-promotion"
:disabled="caseIndex === ''|| !baseForm.caseId"
@click="handleSend"
>
发送
</el-button>
</div>
</el-dialog>
</template>
@ -331,115 +380,177 @@ export default {
}
}
.conversation-content {
.content-left {
.left-top {
overflow-y: auto;
overflow-x: hidden;
padding: 20px;
box-sizing: border-box;
.conversation-item {
margin-bottom: 20px;
.case-assistant {
font-weight: 700;
color: $base-color-default;
margin-bottom: 0;
}
}
.conversation-item>div>img {
width: 30px;
height: 30px;
border-radius: 15px;
}
.conversation-item>div>span {
margin-left: 10px;
flex: 1;
line-height: 30px;
}
.user-message {
height: calc(100vh - 500px);
.flex-row {
display: flex;
}
.conversation-item {
position: relative;
padding: 0 24px;
margin-bottom: 24px;
.user-message {
display: flex;
flex-direction: row-reverse;
span {
max-width: 646px;
padding: 16px;
background: #ECF0FF;
border-radius: 16px 0px 16px 16px;font-size: 16px;
color: #333333;
}
.robot-message {
color: #333333;
>span {
background: #F2F8FF;
border-radius: 8px;
display: inline-block;
padding: 10px;
p:nth-child(1) {
margin-top: 0;
}
p:nth-child(5) {
margin-bottom: 8px;
}
}
.robot-message {
.robot-message-item {
display: flex;
.point {
width: 5px;
height: 5px;
background-color: black;
border-radius: 50%;
}
.label {
font-weight: bold;
font-size: 16px;
color: #333333;
}
.value {
font-weight: 400;
font-size: 16px;
color: #333333;
}
}
}
.left-bottom {
border-top: 1px solid rgba(0, 0, 0, 0.15);
}
.conversation-item-left {
font-size: 16px;
color: #333333;
margin: 12px 24px;
.title {
font-size: 20px;
color: #3763FF;
}
}
// .content-left {
// .left-top {
// overflow-y: auto;
// overflow-x: hidden;
// padding: 20px;
// box-sizing: border-box;
// .conversation-item {
// margin-bottom: 20px;
// .case-assistant {
// font-weight: 700;
// color: $base-color-default;
// margin-bottom: 0;
// }
// }
// .conversation-item>div>img {
// width: 30px;
// height: 30px;
// border-radius: 15px;
// }
// .conversation-item>div>span {
// margin-left: 10px;
// flex: 1;
// line-height: 30px;
// }
// .user-message {
// color: #333333;
// }
// .robot-message {
// color: #333333;
// >span {
// background: #F2F8FF;
// border-radius: 8px;
// display: inline-block;
// padding: 10px;
// p:nth-child(1) {
// margin-top: 0;
// }
// p:nth-child(5) {
// margin-bottom: 8px;
// }
// }
// }
// }
// .left-bottom {
// border-top: 1px solid rgba(0, 0, 0, 0.15);
// height: 100px;
// position: relative;
// .el-button {
// position: absolute;
// bottom: 0;
// right: 20px;
// }
// }
// }
// .content-right {
// border-left: 1px solid rgba(0, 0, 0, 0.15);
// padding: 20px;
// box-sizing: border-box;
// .right-title {
// font-weight: bold;
// color: #333333;
// }
// .index-content {
// overflow-y: auto;
// overflow-x: hidden;
// .index-item {
// position: relative;
// height: 40px;
// line-height: 40px;
// cursor: pointer;
// padding: 0 8px;
// box-sizing: border-box;
// border-radius: 5px;
// width: 380px;
// >span {
// display: inline-block;
// width: 100%;
// overflow: hidden;
// text-overflow: ellipsis;
// white-space: nowrap;
// vertical-align: middle;
// }
// &:hover {
// background: #F2F6FD;
// .ask-button {
// display: inline-block;
// }
// }
// .ask-button {
// position: absolute;
// right: 8px;
// bottom: 8px;
// top: 8px;
// line-height: 24px;
// border: 1px solid #999999;
// color: #999999;
// border-radius: 5px;
// padding: 0 10px;
// text-align: center;
// z-index: 99;
// box-shadow: -10px 0 #F2F6FD;
// background: #ffffff;
// display: none;
// cursor: pointer;
// }
// }
// }
// }
}
.send-bottom {
border-top: 1px solid rgba(0, 0, 0, 0.15);
display: flex;
height: 100px;
position: relative;
.el-button {
position: absolute;
bottom: 0;
right: 20px;
}
}
}
.content-right {
border-left: 1px solid rgba(0, 0, 0, 0.15);
padding: 20px;
box-sizing: border-box;
.right-title {
font-weight: bold;
color: #333333;
}
.index-content {
overflow-y: auto;
overflow-x: hidden;
.index-item {
position: relative;
height: 40px;
line-height: 40px;
cursor: pointer;
padding: 0 8px;
box-sizing: border-box;
border-radius: 5px;
width: 380px;
>span {
display: inline-block;
width: 100%;
overflow: hidden;
text-overflow: ellipsis;
white-space: nowrap;
vertical-align: middle;
}
&:hover {
background: #F2F6FD;
.ask-button {
display: inline-block;
}
}
.ask-button {
position: absolute;
right: 8px;
bottom: 8px;
top: 8px;
line-height: 24px;
border: 1px solid #999999;
color: #999999;
border-radius: 5px;
padding: 0 10px;
text-align: center;
z-index: 99;
box-shadow: -10px 0 #F2F6FD;
background: #ffffff;
display: none;
cursor: pointer;
}
bottom: 24px;
right: 24px;
}
}
}
}
::v-deep {
.el-dialog__header {

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

@ -7,15 +7,44 @@
-->
<template>
<div>
<vue-charts autoresize :style="{ width: '100%', height: '100%' }" :option="caseAtlasOption" />
<div class="CaseAtlas">
<div class="left">
<div class="title">{{ `实体(${nodeLabels.length})` }}</div>
<div class="node-list">
<span v-for="(item,index) in nodeLabels" :key="index" :class="[item.selected === true?'actived':'']" class="node-item" @click="selectItem(item)">{{ item.name }}</span>
</div>
<div class="title">{{ `关系(${relTypes.length})` }}</div>
<div class="node-list">
<span v-for="(item,index) in relTypes" :key="index" :class="[item.selected=== true?'actived':'']" class="node-item" @click="selectItem(item)">{{ item.name }}</span>
</div>
</div>
<div class="right">
<div class="right-top">
<div class="input-search">
<el-input
v-model="searchName"
class="input-item"
size="lager"
placeholder="支持按模型指标查询"
clearable
/>
<div class="btn" @click="search"></div>
</div>
</div>
<vue-charts id="chartsMax" autoresize :style="{ width: '100%', height: '100%' }" :option="caseAtlasOption" />
<!-- <div class="full_screen" id="fullScreen" v-if="isFullScreen">
</div> -->
</div>
</div>
</template>
<script>
import VueCharts from '@/plugins/echarts'
import caseAtlasConfig from '@/views/caseDetails/js/caseAtlasConfig'
import { queryAtlasInfo } from '@/api/caseDetails'
import clear from '../../../assets/common/clear.png'
import full from '../../../assets/common/full.png'
import { queryAtlasInfo, getNodeAndRelationListByCaseId, getCaseGraph } from '@/api/caseDetails'
export default {
name: 'CaseAtlas',
components: { VueCharts },
@ -33,11 +62,68 @@ export default {
},
data() {
return {
caseAtlasOption: caseAtlasConfig
caseAtlasOption: caseAtlasConfig,
entityNum: 10,
searchName: '',
nodeLabels: [],
fullFlag: false,
relTypes: []
}
},
mounted() {
this.fetchData()
this.queryCaseGraph()
this.caseAtlasOption.toolbox = {
//
show: true,
feature: {
myFull: {
show: true,
title: this.fullFlag ? '退出全屏' : '全屏显示',
icon: `image://${full}`,
onclick: () => {
this.fullFlag = true
const element = document.getElementById('chartsMax')
//
if (element.requestFullScreen) {
// HTML W3C
element.requestFullScreen()
} else if (element.msRequestFullscreen) {
// IE11
element.msRequestFullScreen()
} else if (element.webkitRequestFullScreen) {
// Webkit (works in Safari5.1 and Chrome 15)
element.webkitRequestFullScreen()
} else if (element.mozRequestFullScreen) {
// Firefox (works in nightly)
element.mozRequestFullScreen()
}
// 退
if (element.requestFullScreen) {
document.exitFullscreen()
} else if (element.msRequestFullScreen) {
document.msExitFullscreen()
} else if (element.webkitRequestFullScreen) {
document.webkitCancelFullScreen()
} else if (element.mozRequestFullScreen) {
document.mozCancelFullScreen()
}
}
},
myTool2: {
show: true,
title: '清空',
icon: `image://${clear}`,
onclick: () => {
this.searchName = ''
this.search()
}
}
}
}
this.getLeftData()
},
methods: {
//
@ -48,11 +134,146 @@ export default {
this.caseAtlasOption.series[0].data = res.data.nodes
}
})
},
filterByValue(arr, key, value) {
return arr.filter(obj => obj[key] === value)
},
extractKeyToArray(arr, key) {
return arr.map(obj => obj[key])
},
//
queryCaseGraph() {
const nodeLabels = this.extractKeyToArray(this.filterByValue(this.nodeLabels, 'selected', true), 'name')
const relTypes = this.extractKeyToArray(this.filterByValue(this.relTypes, 'selected', true), 'name')
getCaseGraph({
picType: '1', caseId: this.$route.params['id'],
queryStr: this.searchName,
nodeLabels,
relTypes
}).then(res => {
if (res['code'] === 200) {
this.caseAtlasOption.series[0].links = res.data.list
this.caseAtlasOption.series[0].data = res.data.nodes
}
})
},
//
async getLeftData() {
const res = await getNodeAndRelationListByCaseId({
caseId: this.$route.params.id,
picType: 1
})
if (res.code === 200) {
res.data.nodeLabels.forEach(e => {
this.nodeLabels.push({
name: e,
selected: false
})
})
res.data.relTypes.forEach(e => {
this.relTypes.push({
name: e,
selected: false
})
})
}
},
search() {
this.nodeLabels.forEach(e => {
e.selected = false
})
this.relTypes.forEach(e => {
e.selected = false
})
this.queryCaseGraph()
},
selectItem(item) {
this.searchName = ''
this.$set(item, 'selected', !item.selected)
this.queryCaseGraph()
}
}
}
</script>
<style scoped lang="scss">
.CaseAtlas {
display: flex;background: #FFFFFF;
border-radius: 8px 8px 8px 8px;
.left {
width: 300px;
overflow: auto;
.title {
font-size: 18px;
color: #333333;
margin-bottom: 16px;
}
.node-list {
display: flex;
flex-wrap: wrap;
margin-bottom: 24px;
.node-item {
background: #999999;
border-radius: 4px 4px 4px 4px;
margin:0 8px 8px 0;
padding: 8px 16px;font-size: 16px;
color: #FFFFFF;
cursor: pointer;
}
.actived {
background: #3763FF;
}
}
}
.right {
flex: 1;
display: flex;
flex-direction: column;
background: radial-gradient(circle, rgba(255, 255, 255, 0.05), rgba(66, 135, 255, 0.05));
box-shadow: inset 0px 0px 10px 0px rgba(0,0,0,0.02);
padding: 24px;
.right-top {
.input-search {
display: flex;
// width: 550px;
.input-item {
width: 500px;
}
.btn {
width: 100px;
background: #3763FF;
border-radius: 0px 8px 8px 0px;font-size: 20px;
color: #FFFFFF;
display: flex;
align-items: center;
justify-content: center;
cursor: pointer;
}
}
}
}
}
.CaseAtlas :-webkit-full-screen{
background-color: white!important;
width: 100%;
height: 100%;
// padding-top: 100px;
// padding-left: 100px;
}
// .CaseAtlas :-moz-full-screen{
// background-color: white!important;
// }
// .CaseAtlas :-ms-full-screen{
// background-color: white!important;
// }
// .CaseAtlas :fullscreen{
// background-color: white!important;
// }
// .CaseAtlas .dialog_wrapper .el-checkbox-group {
// width: 100%!important;
// }
</style>

@ -81,14 +81,15 @@
placeholder="请输入prompt内容"
/>
</el-form-item> -->
<el-form-item v-if="['2','3'].includes(ruleForm['indexSource'])" label="查询语句" prop="queryLang">
<el-form-item v-if="['2','3'].includes(ruleForm['indexSource'])" style="position: relative;" label="查询语句" prop="queryLang">
<el-input
v-model="ruleForm['queryLang']"
:disabled="isView"
type="textarea"
:rows="5"
:rows="8"
placeholder="请输入查询语句"
/>
<div v-if="ruleForm.indexSource ==='3'" class="sql_btn" @click="handleDebug"></div>
</el-form-item>
<!-- <el-form-item label="判断结果" prop="judgeResult">-->
@ -113,6 +114,7 @@
</el-form>
</div>
<SelectSql ref="SelectSqlRef" @submit="selectOk" />
<GraphDebug ref="GraphDebugRef" />
</template>
</cs-drawer>
@ -122,10 +124,12 @@
import { addOrUpdAtomicIndex } from '@/api/atomicIndex'
import SelectSql from './SelectSql.vue'
import { getCaseEvidenceTree } from '@/api/caseDetails/evidence'
import GraphDebug from './GraphDebug.vue'
export default {
name: 'EditAtomic',
components: {
SelectSql
SelectSql,
GraphDebug
},
data() {
return {
@ -222,6 +226,14 @@ export default {
// this.$refs.form.clearValidate()
},
//
handleDebug() {
this.$refs.form.validate(async valid => {
if (valid) {
this.$refs.GraphDebugRef.show(this.ruleForm)
}
})
},
selectSql() {
this.$refs.SelectSqlRef.show(this.ruleForm.indexSource, this.selectInfo)
},
@ -290,6 +302,20 @@ export default {
margin-top: 8px;font-size: 16px;
color: #333333
}
.sql_btn {
position: absolute;
right: 16px;
bottom: 16px;width: 112px;
height: 42px;
background: #FFFFFF;
border-radius: 6px 6px 6px 6px;
border: 1px solid #3763FF;
font-size: 16px;
color: #3763FF;
text-align: center;
line-height: 42px;
cursor: pointer;
}
.select-model-list {
display: flex;
margin-top: 16px;

@ -0,0 +1,288 @@
<template>
<cs-dialog
:dialog="dialogOption"
class="GraphDebug"
@onSubmit="handleSubmit"
>
<template slot="content">
<div class="main-content">
<el-form ref="searchForm" :model="searchForm" :rules="rules" class="main-content-left" label-width="100px">
<el-form-item label="案件名称" prop="caseId">
<el-select v-model="searchForm.caseId" filterable placeholder="请选择案件" style="width: 100%" @change="selectId">
<el-option
v-for="item in caseOptions"
:key="item.id"
:label="item.caseName"
:value="item.id"
/>
</el-select>
</el-form-item>
<el-form-item label="原子指标名称" prop="name">
<el-input v-model="searchForm['name']" readonly placeholder="请输入提示词名称" />
</el-form-item>
<el-form-item style="position: relative;" label="查询语句" prop="queryLang">
<el-input
v-model="searchForm['queryLang']"
type="textarea"
:rows="16"
placeholder="请输入查询语句"
/>
<div class="sql_btn" @click="getData"></div>
</el-form-item>
</el-form>
<div class="main-content-right">
<div class="title">查询结果</div>
<div class="content">
<div class="content-top">
<div class="nav-item" :class="[type ==='1'? 'actived':'']" @click="changeType('1')"></div>
<div class="nav-item" :class="[type ==='2'? 'actived':'']" @click="changeType('2')"></div>
</div>
<div v-if="nodeLabels.length === 0" class="empty">
暂无数据
</div>
<div v-if="type==='1' && nodeLabels.length > 0" class="graph">
<div class="graph-main">
<vue-charts autoresize :style="{ width: '100%', height: '100%' }" :option="caseAtlasOption" />
</div>
<div class="desc">
<div class="desc-title">实体</div>
<div class="node-list">
<span v-for="(item,index) in nodeLabels" :key="index" class="node-item">{{ item.name }}</span>
</div>
<div class="desc-title">关系</div>
<div class="node-list">
<span v-for="(item,index) in relTypes" :key="index" class="node-item">{{ `${item.name}(${item.count})` }}</span>
</div>
</div>
</div>
<div v-if="type==='2' && nodeLabels.length > 0" class="model-content">
<vxe-grid
ref="xTable"
style="margin-top: 10px;width: 850px"
row-id="id"
v-bind="gridOptions"
/></div>
</div>
</div>
</div>
</template>
</cs-dialog>
</template>
<script>
import mixin from '@/views/mixin'
import VueCharts from '@/plugins/echarts'
import caseAtlasConfig from '@/views/caseDetails/js/caseAtlasConfig'
import { atomicDebug } from '@/api/atomicIndex/index'
import { queryCaseList } from '@/api/caseManagement'
export default {
name: 'SelectSql',
components: { VueCharts },
mixins: [mixin],
data() {
return {
dialogOption: {
show: false,
appendToBody: true,
width: '1400px',
// height: '800px',
title: {
title: '图谱推理调试'
}
},
rules: {
caseId: [{ required: true, message: '案件名称不能为空!', trigger: 'change' }],
queryLang: [{ required: true, message: '查询语句不能为空!', trigger: 'change' }]
},
nodeLabels: [],
relTypes: [],
caseAtlasOption: caseAtlasConfig,
type: '1',
searchForm: {
caseId: '',
queryLang: '',
name: ''
},
caseOptions: [],
//
gridOptions: {
height: '450px',
columns: [
{ title: '序号', field: 'serialNumber' }
],
data: []
}
}
},
methods: {
//
show(data) {
this.$nextTick(() => {
const { name, queryLang } = data
this.searchForm.name = name
this.searchForm.queryLang = queryLang
this.dialogOption.show = true
this.getCaseList()
this.getData()
})
},
selectId() {
this.getData()
},
changeType(val) {
this.type = val
},
getCaseList() {
queryCaseList({}, 1, 9999).then(res => {
if (res.code === 200) {
this.caseOptions = res.data.records
}
})
},
//
async getData() {
this.$refs.searchForm.validate(async valid => {
if (valid) {
const res = await atomicDebug({
caseId: this.searchForm.caseId,
queryLang: this.searchForm.queryLang
})
if (res.code === 200) {
if (!res.data.graphNodeList) return
this.caseAtlasOption.series[0].links = res.data.graphRelList
this.relTypes = res.data.graphReCountList
this.nodeLabels = res.data.graphNodeList
this.caseAtlasOption.series[0].data = res.data.graphNodeList
const list = []
res.data.recordTitleList.forEach(e => {
list.push({
title: e, field: e
})
})
this.gridOptions.columns = list
this.gridOptions.columns.unshift({ title: '序号', type: 'seq', width: '80px' })
this.gridOptions.data = res.data.recordList
this.gridOptions.data.forEach(obj => {
for (const key in obj) {
obj[key] = JSON.stringify(obj[key])
}
})
}
}
})
},
//
handleSubmit() {
this.dialogOption.show = false
}
}
}
</script>
<style lang="scss" scoped>
.GraphDebug {
.main-content {
display: flex;
padding: 32px;
.main-content-left {
width: 400px;
.sql_btn {
position: absolute;
right: 16px;
bottom: 16px;
height: 16px;width: 112px;
height: 42px;
background: #FFFFFF;
border-radius: 6px 6px 6px 6px;
border: 1px solid #3763FF;
text-align: center;
line-height: 42px;font-size: 16px;
color: #3763FF;
cursor: pointer;
}
}
.main-content-right {
flex: 1;
// margin-left: 32px;
.title {
font-size: 16px;
color: #333333;
margin-bottom: 16px;
}
.content {
background: #FFFFFF;
border-radius: 6px 6px 6px 6px;
border: 1px solid #D9D9D9;
.content-top {
display: flex;
height: 60px;
border-bottom: 1px solid #D9D9D9;
align-items: center;
padding-left: 24px;
.nav-item {
font-size: 16px;
color: #999999;
margin-right: 32px;
padding-bottom: 16px;position: relative;
top: 12px;
cursor: pointer;
}
.actived {
border-bottom: 3px solid #3763FF;
}
}
.empty {
height: 500px;
display: flex;
justify-content: center;
align-items: center;
}
.graph {
height: 500px;
display: flex;
.graph-main {
width: 580px;
}
.desc {
flex: 1;
background: #FFFFFF;
box-shadow: -2px 4px 12px 0px rgba(0,0,0,0.05);
border-radius: 0px 0px 6px 0px;
padding: 24px;
overflow-y: auto;
.desc-title {
font-size: 16px;
color: #333333;
margin-bottom: 16px;
}
.node-list {
display: flex;
flex-wrap: wrap;
margin-bottom: 24px;
.node-item {
background: #999999;
border-radius: 4px 4px 4px 4px;
margin:0 8px 8px 0;
padding: 8px 16px;font-size: 16px;
color: #FFFFFF;
cursor: pointer;
}
}
}
}
}
}
}
}
</style>
<style lang="scss">
.el-dialog {
background: #fff !important;
}
</style>

@ -7,7 +7,7 @@
>
<template slot="content">
<el-form v-model="searchForm" label-width="120px">
<el-form :model="searchForm" label-width="120px">
<el-row :gutter="10">
<el-col :span="10">
<el-form-item label="提示词名称" prop="name">

Loading…
Cancel
Save