Files
dvcp_v2_webapp/project/biaopin/AppWorkOrder/components/settingDetail.vue
2024-08-13 09:07:34 +08:00

158 lines
6.2 KiB
Vue

<template>
<ai-detail class="settingDetail">
<ai-title slot="title" title="设置事件" isShowBack isShowBottomBorder @back="back"/>
<template #content>
<el-form size="small" ref="FeatureForm" :model="form" :rules="rules" label-width="80px">
<ai-card title="基本信息">
<div class="grid">
<el-form-item label="特征词" prop="keywords">
<el-input v-model.trim="form.keywords" type="textarea" :rows="2" placeholder="多个特征词以,隔开"/>
</el-form-item>
<el-form-item label="最小长度" prop="minLength">
<el-input v-model.trim="form.minLength" type="textarea" :rows="2" placeholder="进行特征分析最小的文本长度"/>
</el-form-item>
<el-form-item label="事件类型" prop="eventType">
<ai-select v-model="form.eventType" :instance="instance" action="/app/appsessionarchivefeaturelibrary/list"
:prop="{value:'eventType',label:'eventType'}" allow-create
placeholder="可以选择已有的事件类型,也可以创建新的"/>
</el-form-item>
<el-form-item label="相似度" prop="l2">
<el-input type="number" v-model="form.l2" placeholder="建设值设置在150-180之间,默认180"/>
</el-form-item>
</div>
</ai-card>
<ai-card title="事件信息" panel>
<template #right>
<el-button type="text" @click="form.features.push({})">添加</el-button>
</template>
<el-form-item prop="features" label-width="0">
<el-table :data="form.features" size="mini" stripe border header-cell-class-name="ai-table__header">
<table-input-column label="属性" prop="field" width="120px"/>
<table-input-column label="属性名" prop="label" width="160px"/>
<table-input-column label="属性别名" prop="alias" width="120px"/>
<table-input-column label="描述" prop="description"/>
<el-table-column label="操作" align="center" width="80px">
<template slot-scope="{row,$index}">
<el-button type="text" @click="handleDelete('是否要删除属性?',form.features,$index)">删除</el-button>
</template>
</el-table-column>
</el-table>
</el-form-item>
</ai-card>
<el-form-item prop="features" label-width="0">
<ai-card title="样例" v-if="!isEmpty(form.features)" panel class="mar-t20">
<template #right>
<el-button type="text" @click="form.examples.push({content:'样例会话',extraction:{}})">添加</el-button>
</template>
<el-table :data="form.examples" size="mini" stripe border header-cell-class-name="ai-table__header">
<table-input-column label="会话内容" prop="content"/>
<el-table-column label="事件抓取信息" min-width="200px">
<template slot-scope="{row}">
<el-descriptions :column="2" size="mini" border>
<el-descriptions-item v-for="item in form.features" :key="item.field" :label="item.label">
<el-input v-model="row.extraction[item.field]" clearable placeholder="请输入"/>
</el-descriptions-item>
</el-descriptions>
</template>
</el-table-column>
<el-table-column label="操作" align="center" width="80px">
<template slot-scope="{row,$index}">
<el-button type="text" @click="handleDelete('是否要删除该样例?',form.examples,$index)">删除
</el-button>
</template>
</el-table-column>
</el-table>
</ai-card>
</el-form-item>
</el-form>
</template>
<template #footer>
<el-button @click="back">取消</el-button>
<el-button type="primary" @click="submit">提交</el-button>
</template>
</ai-detail>
</template>
<script>
import TableInputColumn from "./TableInputColumn.vue";
export default {
name: "settingDetail",
components: {TableInputColumn},
props: {
instance: Function,
dict: Object,
},
data() {
return {
form: {
// keywords: ["丢", "找", "不见", "看见", "看到", "掉"].toString(),
// eventType: "失物招领",
features: [],
examples: []
},
rules: {
keywords: [{required: true, message: '请输入特征词', trigger: 'blur'}],
eventType: [{required: true, message: '请选择事件类型', trigger: 'blur'}],
features: [{required: true, message: '请设置事件信息'}],
}
}
},
methods: {
back() {
this.$router.push({hash: "#Setting"})
},
submit() {
this.$refs.FeatureForm.validate().then(() => {
let {features = null, examples = null} = this.form
features = JSON.stringify(features)
examples = JSON.stringify(examples)
this.instance.post("/app/appsessionarchivefeaturelibrary/addOrUpdate", {
...this.form,
features,
examples
}).then(res => {
if (res?.code == 0) {
this.$message.success("保存成功!")
this.back()
}
})
})
},
getDetail() {
const {id} = this.$route.query
id && this.instance.post("/app/appsessionarchivefeaturelibrary/queryDetailById", null, {params: {id}}).then(res => {
if (res?.data) {
let {features = null, examples = null} = res.data
features = JSON.parse(features) || []
examples = JSON.parse(examples) || []
this.form = {...res.data, features, examples}
}
})
},
isEmpty(list = []) {
return Object.keys(list).length <= 0
},
handleDelete(msg, table = [], i) {
this.$confirm(msg).then(() => {
table.splice(i, 1)
})
},
transformer() {
}
},
created() {
this.getDetail()
}
}
</script>
<style lang="scss" scoped>
.settingDetail {
:deep(.ai-table__header) {
border-bottom: none;
background: #F3F4F5;
line-height: normal;
}
}
</style>