<template> <div ref="htmlContent" class="content"> <cs-search title="提示词检索" :data="searchData" :span="6" direction="row" @onSearch="onSearch" @getData="onSearch" /> <div class="index-content"> <div class="header"> <el-radio-group v-model="type" size="large" @change="handleChange"> <el-radio-button label="">全部</el-radio-button> <el-radio-button v-for="(item,index) in promptType" :key="index" :label="item.value">{{ item.label }}</el-radio-button> <!-- <el-radio-button label="2">已分析</el-radio-button> --> </el-radio-group> <el-button type="primary" icon="el-icon-circle-plus-outline" style="position: absolute;right: 24px;top: 12px;" @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> <template #type="{row}"> <span>{{ getTypeName(row.type) }}</span> </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 { queryPromptList, delPrompt } from '@/api/promptManagement' export default { name: 'PromptConfig', mixins: [mixin], data() { return { // 筛选数据 searchData: [ { label: '提示词名称', model: 'name', type: 'input' } // { label: '提示词类型', model: 'type', type: 'select', option: JSON.parse(sessionStorage.getItem('prompt_type')) } ], promptType: JSON.parse(sessionStorage.getItem('prompt_type')), type: '', // 表格配置 gridOptions: { ...mixin.data().gridOptions, columns: [ { title: '序号', type: 'seq', width: 80 }, { title: '提示词名称', field: 'name', width: '300px' }, { title: '提示词类型', field: 'type', slots: { default: 'type' }, width: '200px' }, { title: '匹配值', field: 'matchNum', width: '200px' }, { title: '提示词', field: 'prompt' }, { title: '操作', slots: { default: 'operate' }, width: '150px' } ], data: [] } } }, activated() { this.fetchData() }, mounted() { this.tableHeight(390) }, methods: { // 数据查询 fetchData() { queryPromptList({ ...this.searchFormData, type: this.type, page: this.queryForm.page, size: this.queryForm.size }).then(res => { this.gridOptions.data = res.data.records this.queryForm.total = res.data.total }) }, // 切换tab handleChange(val) { this.type = val this.queryForm.page = 1 this.fetchData() }, getTypeName(val) { for (const item of this.promptType) { if (item.value === val) { return item.label } } }, // 新增 handleAdd() { this.$router.push({ path: `/add-prompt` }) }, // 编辑 handleEdit(row) { this.$router.push({ path: `/edit-prompt/${row.id}` }) }, // 删除 handleDel(row) { this.$baseConfirm('确定要删除吗?', null, async() => { const { code, msg } = await delPrompt({ id: 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; } .header { position: relative; } } ::v-deep { .text-blue { color: #005AA8; } .header-blue { background: #F2F6FA; } } </style>