fix:添加模型配置页面
This commit is contained in:
parent
dfff5b4dbf
commit
17121c94f1
28
src/api/tc/model.js
Normal file
28
src/api/tc/model.js
Normal file
@ -0,0 +1,28 @@
|
||||
import request from '@/utils/request'
|
||||
|
||||
/** 模型列表*/
|
||||
export function modelList() {
|
||||
return request({
|
||||
url: `/model/config/modelList`,
|
||||
method: 'get'
|
||||
})
|
||||
}
|
||||
|
||||
/** 模型配置列表*/
|
||||
export function modelConfigList(data) {
|
||||
return request({
|
||||
url: '/model/config/list',
|
||||
method: 'post',
|
||||
data: data
|
||||
})
|
||||
}
|
||||
|
||||
|
||||
/** 模型配置保存*/
|
||||
export function modelConfigUpdate(data) {
|
||||
return request({
|
||||
url: '/model/config/update',
|
||||
method: 'post',
|
||||
data: data
|
||||
})
|
||||
}
|
||||
@ -84,7 +84,7 @@ service.interceptors.response.use(res => {
|
||||
if (code === 401) {
|
||||
if (!isRelogin.show) {
|
||||
isRelogin.show = true
|
||||
ElMessageBox.confirm('登录状态已过期,您可以继续留在该页面,或者重新登录', '系统提示', { confirmButtonText: '重新登录', cancelButtonText: '取消', type: 'warning' }).then(() => {
|
||||
ElMessageBox.confirm('登录状态已过期,您可以继续留在该页面,或者重新登录', '系统提示', { confirmButtonText: '重新登录', cancelButtonText: '取消', type: 'warning', closeOnClickModal: false }).then(() => {
|
||||
isRelogin.show = false
|
||||
useUserStore().logOut().then(() => {
|
||||
location.href = '/'
|
||||
|
||||
@ -2,8 +2,8 @@
|
||||
<div class="app-container">
|
||||
<!-- 搜索区域 -->
|
||||
<el-form :model="queryParams" ref="queryRef" v-show="showSearch" :inline="true" label-width="80px">
|
||||
<el-form-item label="名称" prop="matchNumStr">
|
||||
<el-input v-model="queryParams.matchNumStr" placeholder="请输入名称" clearable style="width: 240px"
|
||||
<el-form-item label="模型名称" prop="useCase">
|
||||
<el-input v-model="queryParams.useCase" placeholder="请输入名称" clearable style="width: 240px"
|
||||
@keyup.enter="handleQuery" />
|
||||
</el-form-item>
|
||||
<el-form-item>
|
||||
@ -12,36 +12,21 @@
|
||||
</el-form-item>
|
||||
</el-form>
|
||||
|
||||
<el-row :gutter="10" class="mb8">
|
||||
<el-col :span="1.5">
|
||||
<el-button type="primary" plain icon="Plus" @click="openDialog('add')">新增</el-button>
|
||||
</el-col>
|
||||
<right-toolbar v-model:showSearch="showSearch" @queryTable="getList" :columns="columns"></right-toolbar>
|
||||
</el-row>
|
||||
|
||||
<!--loading-->
|
||||
<div v-if="loading" v-loading="loading" class="loading-page" element-loading-text="正在加载..."
|
||||
style="width: 100%; height: calc(100vh - 250px)"></div>
|
||||
<div v-else-if="pageList.length && !loading">
|
||||
<!-- 表格数据 -->
|
||||
<el-table v-loading="loading" :data="pageList">
|
||||
<el-table-column label="名称" prop="matchNumStr" />
|
||||
<el-table-column label="类型" prop="leagueAllName" :show-overflow-tooltip="true" />
|
||||
<el-table-column label="模型" prop="homeTeamAllName" :show-overflow-tooltip="true" />
|
||||
<el-table-column label="状态" align="center" prop="reportSatus">
|
||||
<template #default="scope">
|
||||
<el-switch
|
||||
v-model="scope.row.reportSatus"
|
||||
:active-value="0"
|
||||
:inactive-value="1"
|
||||
@change="handleStatusChange(scope.row)"
|
||||
></el-switch>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="模型名称" prop="useCase" />
|
||||
<el-table-column label="模型类型" prop="modelType" />
|
||||
<el-table-column label="模型" prop="modelName" />
|
||||
<el-table-column label="API密钥" prop="apiKey" :show-overflow-tooltip="true" />
|
||||
<el-table-column label="操作" align="center" class-name="small-padding fixed-width">
|
||||
<template #default="scope">
|
||||
<el-tooltip content="编辑" placement="top" v-if="scope.row.reportSatus === 1">
|
||||
<el-button link type="primary" icon="Edit" @click="openDialog('edit', scope.row)">编辑</el-button>
|
||||
<el-tooltip content="编辑" placement="top">
|
||||
<el-button link type="primary" icon="Edit"
|
||||
@click="openDialog('edit', scope.row)">编辑</el-button>
|
||||
</el-tooltip>
|
||||
</template>
|
||||
</el-table-column>
|
||||
@ -57,51 +42,38 @@
|
||||
|
||||
|
||||
<!-- 添加或修改对话框 -->
|
||||
<el-dialog :title="dialogTitle" v-model="dialogOpen" width="600px" append-to-body :close-on-click-modal="false" @close="cancel">
|
||||
<el-dialog :title="dialogTitle" v-model="dialogOpen" width="600px" append-to-body :close-on-click-modal="false"
|
||||
@close="cancel">
|
||||
<el-form :model="dialogForm" :rules="dialogRules" ref="configModelsRef" label-width="80px">
|
||||
<el-row>
|
||||
<el-col :span="24">
|
||||
<el-form-item label="名称" prop="nickName">
|
||||
<el-input v-model="dialogForm.nickName" placeholder="请输入名称" maxlength="30" />
|
||||
<el-form-item label="模型名称" prop="useCase">
|
||||
<el-input v-model="dialogForm.useCase" disabled="true" />
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
</el-row>
|
||||
<el-row>
|
||||
<el-col :span="24">
|
||||
<el-form-item label="类型" prop="types">
|
||||
<el-select v-model="dialogForm.types" placeholder="请选择">
|
||||
<el-option key="zuqiu" label="足球(竞彩)" value="zuqiu" />
|
||||
<el-option key="lanqiu" label="篮球(竞彩)" value="lanqiu" />
|
||||
<el-option key="zuqiuremen" label="足球(热门)" value="zuqiuremen" />
|
||||
<el-option key="yingxiao" label="营销专用" value="yingxiao" />
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
</el-row>
|
||||
<el-row>
|
||||
<el-col :span="24">
|
||||
<el-form-item label="模型" prop="models">
|
||||
<el-select v-model="dialogForm.models">
|
||||
<template #label="{ value }">
|
||||
<div class="flex align-center">
|
||||
<span v-html="modelToIcon" style="width: 13px;" class="mr-8 flex align-center"></span>
|
||||
{{ modelToName }}
|
||||
</div>
|
||||
</template>
|
||||
<el-option v-for="model in EnumsModels" :key="model.name" :value="model.key" :label="model.name">
|
||||
<div class="flex align-center">
|
||||
<span v-html="model.icon" style="width: 13px;" class="mr-8 flex align-center"></span>
|
||||
{{ model.name }}
|
||||
</div>
|
||||
</el-option>
|
||||
<el-form-item label="模型" prop="modelId">
|
||||
<el-select v-model="dialogForm.modelId" placeholder="请选择模型" @change="handleModelChange">
|
||||
<el-option v-for="item in modelsOptions" :key="item.id" :label="item.modelName" :value="item.id" />
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
</el-row>
|
||||
<el-row>
|
||||
<el-col :span="24">
|
||||
<el-form-item label="提示词" prop="remark">
|
||||
<el-input v-model="dialogForm.remark" type="textarea" placeholder="请输入内容" rows="12"></el-input>
|
||||
<el-form-item label="API密钥" prop="apiKey">
|
||||
<el-input v-model="dialogForm.apiKey" type="textarea" placeholder="请输入API密钥"
|
||||
rows="4"></el-input>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
</el-row>
|
||||
<el-row>
|
||||
<el-col :span="24">
|
||||
<el-form-item label="提示词" prop="modelPrompt">
|
||||
<el-input v-model="dialogForm.modelPrompt" type="textarea" placeholder="请输入内容"
|
||||
:rows="12"></el-input>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
</el-row>
|
||||
@ -117,74 +89,86 @@
|
||||
</template>
|
||||
|
||||
<script setup name="configModels">
|
||||
import { Info, infoSelectDistinctLeagueAbbNames } from "@/api/tc/eventAnalysisReport"
|
||||
import { jumpLink, processMatchResults } from "@/utils/tc"
|
||||
import { EnumsModels } from "@/enums/tc"
|
||||
|
||||
import { modelList, modelConfigList, modelConfigUpdate } from "@/api/tc/model"
|
||||
import { ref } from "vue"
|
||||
|
||||
const router = useRouter()
|
||||
const { proxy } = getCurrentInstance()
|
||||
|
||||
|
||||
const pageList = ref([])
|
||||
const loading = ref(false)
|
||||
const showSearch = ref(true)
|
||||
const total = ref(0)
|
||||
const dateRange = ref([])
|
||||
const modelsOptions = ref([])
|
||||
|
||||
/** 配置模型表单引用 */
|
||||
const configModelsRef = ref(null)
|
||||
const dialogOpen = ref(false)
|
||||
const dialogTitle = ref('新增')
|
||||
const dialogForm = ref({
|
||||
nickName: '',
|
||||
models: '',
|
||||
remark: '',
|
||||
types: '',
|
||||
useCase: '',
|
||||
modelId: '',
|
||||
modelName: '',
|
||||
modelPrompt: '',
|
||||
apiKey: '',
|
||||
})
|
||||
const dialogRules = ref({
|
||||
nickName: [{ required: true, message: '请输入名称', trigger: ['blur'] }],
|
||||
types: [{ required: true, message: '请选择类型', trigger: ['change'] }],
|
||||
models: [{ required: true, message: '请选择模型', trigger: ['change'] }],
|
||||
remark: [{ required: true, message: '请输入提示词', trigger: ['blur'] }],
|
||||
modelId: [{ required: true, message: '请选择模型', trigger: ['change'] }],
|
||||
modelPrompt: [{ required: true, message: '请输入提示词', trigger: ['blur'] }],
|
||||
apiKey: [{ required: true, message: '请输入API密钥', trigger: ['blur'] }],
|
||||
})
|
||||
|
||||
/** 数据范围选项*/
|
||||
const dataScopeOptions = ref([])
|
||||
|
||||
const data = reactive({
|
||||
form: {},
|
||||
queryParams: {
|
||||
pageNum: 1,
|
||||
pageSize: 10,
|
||||
matchNumStr: undefined,
|
||||
leagueAbbName: undefined,
|
||||
useCase: undefined,
|
||||
},
|
||||
rules: {},
|
||||
})
|
||||
|
||||
const { queryParams } = toRefs(data)
|
||||
|
||||
/** 查询模型列表 */
|
||||
function getModelList() {
|
||||
modelList().then(res => {
|
||||
modelsOptions.value = res.rows
|
||||
})
|
||||
}
|
||||
|
||||
/** 解析模型icon图标 */
|
||||
const modelToIcon = computed(() => {
|
||||
return EnumsModels.find((item) => item.key === dialogForm.value.models).icon
|
||||
})
|
||||
|
||||
/** 解析模型名称 */
|
||||
const modelToName = computed(() => {
|
||||
return EnumsModels.find((item) => item.key === dialogForm.value.models).name
|
||||
})
|
||||
/** 模型选择 */
|
||||
function handleModelChange() {
|
||||
dialogForm.value.modelName = modelsOptions.value.find(item => item.id === dialogForm.value.modelId)?.modelName || ''
|
||||
}
|
||||
|
||||
/** 提交表单 */
|
||||
function submitForm() {
|
||||
// const data = configModelsRef.value.getFormData()
|
||||
// reportUpdate(data).then(response => {
|
||||
// proxy.$message.success(response.msg)
|
||||
// getList()
|
||||
// }).finally(() => {
|
||||
// dialogOpen.value = false
|
||||
// })
|
||||
reset()
|
||||
// 验证表单
|
||||
configModelsRef.value.validate((valid) => {
|
||||
if (valid) {
|
||||
const data = { ...dialogForm.value }; // 获取表单数据
|
||||
console.log(data);
|
||||
const params = {
|
||||
id: data.id,
|
||||
modelId: data.modelId,
|
||||
modelName: data.modelName,
|
||||
modelPrompt: data.modelPrompt,
|
||||
apiKey: data.apiKey,
|
||||
}
|
||||
|
||||
// 调用更新接口
|
||||
modelConfigUpdate(params).then(response => {
|
||||
proxy.$message.success(response.msg);
|
||||
getList(); // 更新列表
|
||||
}).finally(() => {
|
||||
dialogOpen.value = false; // 关闭对话框
|
||||
reset()
|
||||
});
|
||||
} else {
|
||||
console.log('表单验证失败');
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
/** 取消按钮 */
|
||||
@ -195,12 +179,14 @@ function cancel() {
|
||||
|
||||
/** 重置操作表单 */
|
||||
function reset() {
|
||||
dialogForm.value = {
|
||||
nickName: undefined,
|
||||
models: undefined,
|
||||
remark: undefined
|
||||
}
|
||||
proxy.resetForm("configModelsRef")
|
||||
dialogForm.value = {
|
||||
useCase: '',
|
||||
modelId: '',
|
||||
modelName: '',
|
||||
modelPrompt: '',
|
||||
apiKey: '',
|
||||
}
|
||||
proxy.resetForm("configModelsRef")
|
||||
}
|
||||
|
||||
/** 打开新增/编辑弹窗 */
|
||||
@ -213,61 +199,12 @@ function openDialog(type = 'add', row = {}) {
|
||||
}
|
||||
dialogOpen.value = true
|
||||
}
|
||||
|
||||
/** 状态修改 */
|
||||
function handleStatusChange(row) {
|
||||
let text = row.reportSatus === 0 ? "启用" : "停用"
|
||||
proxy.$modal.confirm('确认要"' + text + '"吗?').then(function () {
|
||||
return true
|
||||
}).then(() => {
|
||||
proxy.$modal.msgSuccess(text + "成功")
|
||||
}).catch(function () {
|
||||
row.status = row.status === 0 ? 1 : 0
|
||||
})
|
||||
}
|
||||
|
||||
/** 获取联赛类型 */
|
||||
function getLeagueAbbNames() {
|
||||
infoSelectDistinctLeagueAbbNames().then(response => {
|
||||
dataScopeOptions.value = response.rows ? response.rows.map(item => ({ value: item, label: item })) : []
|
||||
})
|
||||
}
|
||||
|
||||
/** 跳转链接 */
|
||||
// function handleJumpLink(row) {
|
||||
// jumpLink(row.matchId, 1)
|
||||
// }
|
||||
|
||||
// /** 查看详情 */
|
||||
// function handleView(row) {
|
||||
// if (row.reportSatus != 1) {
|
||||
// return
|
||||
// }
|
||||
// // window.open(window.location.origin + '/#/tc/eventAnalysisReport/detail?id=' + row.matchId)
|
||||
// router.push({
|
||||
// path: '/tc/eventAnalysisReport/detail',
|
||||
// query: {
|
||||
// id: row.matchId
|
||||
// }
|
||||
// })
|
||||
// }
|
||||
|
||||
/** 查询列表 */
|
||||
function getList() {
|
||||
loading.value = true
|
||||
const data = { ...queryParams.value }
|
||||
if (dateRange.value && dateRange.value[0] && dateRange.value[1]) {
|
||||
data.beginTime = dateRange.value[0]
|
||||
data.endTime = dateRange.value[1]
|
||||
} else {
|
||||
data.beginTime = undefined
|
||||
data.endTime = undefined
|
||||
}
|
||||
Info(data).then(response => {
|
||||
const res = response.rows.map(item => ({
|
||||
...item,
|
||||
matchResults: item.matchResults ? processMatchResults(item.matchResults) : null
|
||||
}));
|
||||
modelConfigList(data).then(response => {
|
||||
const res = response.rows;
|
||||
pageList.value = res
|
||||
total.value = response.total
|
||||
}).finally(() => {
|
||||
@ -283,14 +220,13 @@ function handleQuery() {
|
||||
|
||||
/** 重置按钮操作 */
|
||||
function resetQuery() {
|
||||
dateRange.value = []
|
||||
proxy.resetForm("queryRef")
|
||||
handleQuery()
|
||||
}
|
||||
|
||||
onMounted(() => {
|
||||
// 联赛类型
|
||||
getLeagueAbbNames()
|
||||
// 模型列表
|
||||
getModelList()
|
||||
// 列表查询
|
||||
getList()
|
||||
})
|
||||
|
||||
@ -56,10 +56,14 @@
|
||||
</el-table-column>
|
||||
<el-table-column label="操作" align="center" class-name="small-padding fixed-width">
|
||||
<template #default="scope">
|
||||
<span :class="['flex-row cursor-pointer tc-view-time', scope.row.reportSatus != 1 && 'tc-view-time-disabled']" @click="handleView(scope.row)">
|
||||
<span :class="['flex-row cursor-pointer tc-view-time mr-8', scope.row.reportSatus != 1 && 'tc-view-time-disabled']" @click="handleView(scope.row)">
|
||||
脚本结果<br/>
|
||||
{{ scope.row.reportSatus === 1? timerToStr(scope.row.reportTime, 'HH:mm') : '待' }}更新
|
||||
</span>
|
||||
<span :class="['flex-row cursor-pointer tc-view-time', scope.row.reportSatus != 1 && 'tc-view-time-disabled']" @click="handleView(scope.row)">
|
||||
营销文案<br/>
|
||||
{{ scope.row.reportSatus === 1? timerToStr(scope.row.reportTime, 'HH:mm') : '待' }}更新
|
||||
</span>
|
||||
<!-- <el-tooltip content="查看" placement="top" v-if="scope.row.roleId !== 1">
|
||||
<el-button link type="primary" icon="view" @click="handleView(scope.row)"></el-button>
|
||||
</el-tooltip> -->
|
||||
|
||||
@ -59,10 +59,15 @@
|
||||
</el-table-column>
|
||||
<el-table-column label="操作" align="center" class-name="small-padding fixed-width">
|
||||
<template #default="scope">
|
||||
<span :class="['flex-row cursor-pointer tc-view-time', scope.row.reportSatus != 1 && 'tc-view-time-disabled']" @click="handleView(scope.row)">
|
||||
<span :class="['flex-row cursor-pointer tc-view-time mr-8', scope.row.reportSatus != 1 && 'tc-view-time-disabled']" @click="handleView(scope.row)">
|
||||
脚本结果<br/>
|
||||
{{ scope.row.reportSatus === 1? timerToStr(scope.row.reportTime, 'HH:mm') : '待' }}更新
|
||||
</span>
|
||||
<span :class="['flex-row cursor-pointer tc-view-time', scope.row.reportSatus != 1 && 'tc-view-time-disabled']" @click="handleView(scope.row)">
|
||||
营销文案<br/>
|
||||
{{ scope.row.reportSatus === 1? timerToStr(scope.row.reportTime, 'HH:mm') : '待' }}更新
|
||||
</span>
|
||||
|
||||
<!-- <el-tooltip content="查看" placement="top" v-if="scope.row.roleId !== 1">
|
||||
<el-button link type="primary" icon="view" @click="handleView(scope.row)"></el-button>
|
||||
</el-tooltip> -->
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user