From f8312b1487c801236905c39395a95514df75e004 Mon Sep 17 00:00:00 2001
From: dongyukun <1208714201@qq.com>
Date: 星期三, 04 六月 2025 11:12:30 +0800
Subject: [PATCH] 问题模版配置

---
 src/api/ai/questiontemplate/index.ts         |   99 ++++++++++++------------
 src/views/ai/model/template/index.vue        |   60 ++++++++++-----
 src/views/ai/model/template/templateForm.vue |   79 ++++++++++++++++---
 3 files changed, 156 insertions(+), 82 deletions(-)

diff --git a/src/api/ai/questiontemplate/index.ts b/src/api/ai/questiontemplate/index.ts
index 398cc46..251acb0 100644
--- a/src/api/ai/questiontemplate/index.ts
+++ b/src/api/ai/questiontemplate/index.ts
@@ -1,49 +1,50 @@
-import request from '@/config/axios'
-
-// 大模型问题模板 VO
-export interface QuestionTemplateVO {
-  id: string // id
-  modelId: string // 模型id
-  questionCode: string // 问题编号
-  questionName: string // 问题名称
-  questionContent: string // 问题内容
-  dataLength: number // 输入个数
-  isEnable: number // 是否启用(0禁用 1启用)
-  remark: string // 备注
-  createDate: Date // 创建时间
-  updator: number // 更新者
-  updateDate: Date // 更新时间
-}
-
-// 大模型问题模板 API
-export const QuestionTemplateApi = {
-  // 查询大模型问题模板分页
-  getQuestionTemplatePage: async (params: any) => {
-    return await request.get({ url: `/ai/question-template/page`, params })
-  },
-
-  // 查询大模型问题模板详情
-  getQuestionTemplate: async (id: number) => {
-    return await request.get({ url: `/ai/question-template/get?id=` + id })
-  },
-
-  // 新增大模型问题模板
-  createQuestionTemplate: async (data: QuestionTemplateVO) => {
-    return await request.post({ url: `/ai/question-template/create`, data })
-  },
-
-  // 修改大模型问题模板
-  updateQuestionTemplate: async (data: QuestionTemplateVO) => {
-    return await request.put({ url: `/ai/question-template/update`, data })
-  },
-
-  // 删除大模型问题模板
-  deleteQuestionTemplate: async (id: number) => {
-    return await request.delete({ url: `/ai/question-template/delete?id=` + id })
-  },
-
-  // 导出大模型问题模板 Excel
-  exportQuestionTemplate: async (params) => {
-    return await request.download({ url: `/ai/question-template/export-excel`, params })
-  },
-}
\ No newline at end of file
+import request from '@/config/axios'
+
+// 大模型问题模板 VO
+export interface QuestionTemplateVO {
+  id: string // id
+  modelId: string // 模型id
+  questionCode: string // 问题编号
+  questionName: string // 问题名称
+  questionContent: string // 问题内容
+  dataLength: number // 输入个数
+  isEnable: number // 是否启用(0禁用 1启用)
+  remark: string // 备注
+  createDate: Date // 创建时间
+  updator: number // 更新者
+  updateDate: Date // 更新时间
+  settingList:[]//配置列表
+}
+
+// 大模型问题模板 API
+export const QuestionTemplateApi = {
+  // 查询大模型问题模板分页
+  getQuestionTemplatePage: async (params: any) => {
+    return await request.get({ url: `/ai/question-template/page`, params })
+  },
+
+  // 查询大模型问题模板详情
+  getQuestionTemplate: async (id: number) => {
+    return await request.get({ url: `/ai/question-template/get?id=` + id })
+  },
+
+  // 新增大模型问题模板
+  createQuestionTemplate: async (data: QuestionTemplateVO) => {
+    return await request.post({ url: `/ai/question-template/create`, data })
+  },
+
+  // 修改大模型问题模板
+  updateQuestionTemplate: async (data: QuestionTemplateVO) => {
+    return await request.put({ url: `/ai/question-template/update`, data })
+  },
+
+  // 删除大模型问题模板
+  deleteQuestionTemplate: async (id: number) => {
+    return await request.delete({ url: `/ai/question-template/delete?id=` + id })
+  },
+
+  // 导出大模型问题模板 Excel
+  exportQuestionTemplate: async (params) => {
+    return await request.download({ url: `/ai/question-template/export-excel`, params })
+  },
+}
diff --git a/src/views/ai/model/template/index.vue b/src/views/ai/model/template/index.vue
index 9d3f2c3..b0b4aa6 100644
--- a/src/views/ai/model/template/index.vue
+++ b/src/views/ai/model/template/index.vue
@@ -8,31 +8,44 @@
       :inline="true"
       label-width="68px"
     >
-      <el-form-item label="模型编号" prop="modelCode">
+      <el-form-item label="问题编号" prop="questionCode">
         <el-input
-          v-model="queryParams.modelCode"
-          placeholder="请输入模型编号"
+          v-model="queryParams.questionCode"
+          placeholder="请输入问题编号"
           clearable
           @keyup.enter="handleQuery"
           class="!w-240px"
         />
       </el-form-item>
-      <el-form-item label="模型名称" prop="modelName">
+      <el-form-item label="问题名称" prop="questionName">
         <el-input
-          v-model="queryParams.modelName"
-          placeholder="请输入模型名称"
+          v-model="queryParams.questionName"
+          placeholder="请输入问题名称"
           clearable
           @keyup.enter="handleQuery"
           class="!w-240px"
         />
+      </el-form-item>
+      <el-form-item label="模型名称" prop="modelId">
+        <el-select v-model="queryParams.modelId"
+                   clearable
+                   filterable
+                   :fit-input-width="false" placeholder="请选择模型">
+          <el-option
+            v-for="item in scheduleModelList"
+            :key="item.id"
+            :label="item.modelName"
+            :value="item.id"
+          />
+        </el-select>
       </el-form-item>
       <el-form-item>
         <el-button @click="handleQuery">
-          <Icon icon="ep:search" class="mr-5px" />
+          <Icon icon="ep:search" class="mr-5px"/>
           搜索
         </el-button>
         <el-button @click="resetQuery">
-          <Icon icon="ep:refresh" class="mr-5px" />
+          <Icon icon="ep:refresh" class="mr-5px"/>
           重置
         </el-button>
         <el-button
@@ -41,7 +54,7 @@
           @click="openForm('create')"
           v-hasPermi="['ai:question-template:create']"
         >
-          <Icon icon="ep:plus" class="mr-5px" />
+          <Icon icon="ep:plus" class="mr-5px"/>
           新增
         </el-button>
       </el-form-item>
@@ -51,13 +64,16 @@
   <!-- 列表 -->
   <ContentWrap>
     <el-table v-loading="loading" :data="list">
-      <el-table-column label="模型id" align="center" prop="modelId" min-width="100"/>
-      <el-table-column label="问题编号" header-align="center" align="left" prop="questionCode" min-width="100"/>
-      <el-table-column label="问题内容" align="center" prop="questionName" min-width="100"/>
-      <el-table-column label="问题名称" header-align="center" align="left" prop="questionContent" min-width="200"/>
-      <el-table-column label="输入个数" align="center" prop="isEnable" min-width="100"/>
-      <el-table-column label="是否启用" align="center" prop="portLength" min-width="100"/>
-      <el-table-column label="备注" header-align="center" align="left" prop="remark" min-width="200" />
+      <el-table-column label="模型名称" align="center" prop="modelName" min-width="100"/>
+      <el-table-column label="问题编号" align="center" prop="questionCode" min-width="100"/>
+      <el-table-column label="问题名称" align="center" prop="questionName" min-width="100"/>
+      <el-table-column label="输入个数" align="center" prop="dataLength" min-width="100"/>
+      <el-table-column label="是否启用" align="center" prop="isEnable" min-width="100">
+        <template #default="scope">
+          <dict-tag :type="DICT_TYPE.COM_IS_INT" :value="scope.row.isEnable"/>
+        </template>
+      </el-table-column>
+      <el-table-column label="备注" align="center" prop="remark" min-width="200"/>
       <el-table-column label="操作" align="center" min-width="100" fixed="right">
         <template #default="scope">
           <el-button
@@ -89,7 +105,7 @@
   </ContentWrap>
 
   <!-- 表单弹窗:添加/修改 -->
-  <TemplateForm ref="formRef" @success="getList" />
+  <TemplateForm ref="formRef" @success="getList"/>
 
 </template>
 <script lang="ts" setup>
@@ -98,6 +114,8 @@
   import download from '@/utils/download'
   import * as AiQuestionTemplateApi from '@/api/ai/questiontemplate'
   import TemplateForm from './templateForm.vue'
+  import * as AiModelApi from "@/api/ai/model/model";
+  import * as ScheduleModelApi from "@/api/model/sche/model";
 
   defineOptions({name: 'AiTemplate'})
 
@@ -110,16 +128,18 @@
   const queryParams = reactive({
     pageNo: 1,
     pageSize: 10,
-    modelCode: undefined,
-    modelName: undefined
+    questionCode: undefined,
+    questionName: undefined,
+    modelId: undefined,
   })
   const queryFormRef = ref() // 搜索的表单
   const exportLoading = ref(false) // 导出的加载中
-
   /** 查询列表 */
   const getList = async () => {
     loading.value = true
     try {
+      const scheduleModelList = ref([] as ScheduleModelApi.ScheduleModelVO[])
+      scheduleModelList.value = await ScheduleModelApi.getScheduleModelList()
       const page = await AiQuestionTemplateApi.QuestionTemplateApi.getQuestionTemplatePage(queryParams)
       list.value = page.list
       total.value = page.total
diff --git a/src/views/ai/model/template/templateForm.vue b/src/views/ai/model/template/templateForm.vue
index 5262d4c..4c6ace4 100644
--- a/src/views/ai/model/template/templateForm.vue
+++ b/src/views/ai/model/template/templateForm.vue
@@ -11,12 +11,12 @@
       <el-row>
         <el-col :span="12">
           <el-form-item label="问题编号" prop="questionCode">
-            <el-input v-model="formData.questionCode" placeholder="请输入问题编号" />
+            <el-input v-model="formData.questionCode" placeholder="请输入问题编号"/>
           </el-form-item>
         </el-col>
         <el-col :span="12">
           <el-form-item label="问题名称" prop="questionName">
-            <el-input v-model="formData.questionName" placeholder="请输入问题名称" />
+            <el-input v-model="formData.questionName" placeholder="请输入问题名称"/>
           </el-form-item>
         </el-col>
       </el-row>
@@ -26,9 +26,47 @@
             <el-input v-model="formData.dataLength" placeholder="请输入输入个数"/>
           </el-form-item>
         </el-col>
+        <el-col :span="12">
+          <el-form-item label="模型名称" prop="modelId">
+            <el-select v-model="formData.modelId"
+                       clearable
+                       filterable
+                       :fit-input-width="false" placeholder="请选择模型">
+              <el-option
+                v-for="item in aiModelList"
+                :key="item.id"
+                :label="item.modelName"
+                :value="item.id"
+              />
+            </el-select>
+          </el-form-item>
+        </el-col>
       </el-row>
       <el-row>
         <el-col :span="12">
+          <el-form-item label="是否启用" prop="isEnable">
+            <el-select
+              v-model="formData.isEnable"
+              clearable
+              placeholder="请选择是否启用"
+            >
+              <el-option
+                v-for="dict in getIntDictOptions(DICT_TYPE.COM_IS_INT)"
+                :key="dict.value"
+                :label="dict.label"
+                :value="dict.value"
+              />
+            </el-select>
+          </el-form-item>
+        </el-col>
+        <el-col :span="12">
+          <el-form-item label="备注" prop="remark">
+            <el-input v-model="formData.remark" placeholder="请输入备注"/>
+          </el-form-item>
+        </el-col>
+      </el-row>
+      <el-row>
+        <el-col :span="20">
           <el-form-item label="问题内容" prop="questionContent">
             <el-input
               type="textarea"
@@ -105,14 +143,15 @@
 </template>
 
 <script lang="ts" setup>
-  import { DICT_TYPE, getStrDictOptions } from '@/utils/dict'
+  import {DICT_TYPE, getIntDictOptions} from '@/utils/dict'
   import * as AiQuestionTemplateApi from '@/api/ai/questiontemplate'
-  import { CommonStatusEnum } from '@/utils/constants'
-  import { ElMessage } from 'element-plus'
+  import {CommonStatusEnum} from '@/utils/constants'
+  import {ElMessage} from 'element-plus'
+  import * as AiModelApi from "@/api/ai/model/model";
+  const aiModelList = ref([] as AiModelApi.ModelVO[])
+  defineOptions({name: 'AiTemplateForm'})
 
-  defineOptions({ name: 'AiTemplateForm' })
-
-  const { t } = useI18n()
+  const {t} = useI18n()
   const message = useMessage()
   const dialogVisible = ref(false)
   const dialogTitle = ref('')
@@ -120,10 +159,12 @@
   const formType = ref('')
   const formData = ref({
     id: undefined,
+    modelId: undefined,
     questionCode: undefined,
     questionName: undefined,
     dataLength: undefined,
     questionContent: undefined,
+    isEnable: 1,
     settingList: [{
       settingKey: '',
       settingName: '',
@@ -131,10 +172,11 @@
     }]
   })
   const formRules = reactive({
-    questionCode: [{ required: true, message: '问题编号不能为空', trigger: 'blur' }],
-    questionName: [{ required: true, message: '问题名称不能为空', trigger: 'blur' }],
-    dataLength: [{ required: true, message: '输入个数不能为空', trigger: 'blur' }],
-    questionContent: [{ required: true, message: '问题内容不能为空', trigger: 'blur' }]
+    modelId: [{required: true, message: '模型名称不能为空', trigger: 'blur'}],
+    questionCode: [{required: true, message: '问题编号不能为空', trigger: 'blur'}],
+    questionName: [{required: true, message: '问题名称不能为空', trigger: 'blur'}],
+    dataLength: [{required: true, message: '输入个数不能为空', trigger: 'blur'}],
+    questionContent: [{required: true, message: '问题内容不能为空', trigger: 'blur'}]
   })
   const formRef = ref()
 
@@ -159,6 +201,8 @@
     dialogTitle.value = t('action.' + type)
     formType.value = type
     resetForm()
+    // 加载调度模型列表
+    aiModelList.value = await AiModelApi.ModelApi.getModelSimpleList(1)
     if (id) {
       formLoading.value = true
       try {
@@ -168,7 +212,7 @@
       }
     }
   }
-  defineExpose({ open })
+  defineExpose({open})
 
   const emit = defineEmits(['success'])
   const submitForm = async () => {
@@ -179,6 +223,13 @@
     formLoading.value = true
     try {
       const data = formData.value
+      if (data.settingList == [{
+        settingKey: '',
+        settingName: '',
+        settingValue: '',
+      }]) {
+        data.settingList = null
+      }
       if (formType.value === 'create') {
         await AiQuestionTemplateApi.QuestionTemplateApi.createQuestionTemplate(data)
         message.success(t('common.createSuccess'))
@@ -196,10 +247,12 @@
   const resetForm = () => {
     formData.value = {
       id: undefined,
+      modelId: undefined,
       questionCode: undefined,
       questionName: undefined,
       dataLength: undefined,
       questionContent: undefined,
+      isEnable: 1,
       settingList: [{
         settingKey: '',
         settingName: '',

--
Gitblit v1.9.3