From b9d0c0b5aa43658da4b66e4d66c9a9ede0b1fa08 Mon Sep 17 00:00:00 2001
From: dongyukun <1208714201@qq.com>
Date: 星期五, 06 六月 2025 10:05:33 +0800
Subject: [PATCH] Merge remote-tracking branch 'origin/master'

---
 src/views/model/sche/suggest/suggestOperationRecord.vue |   12 -
 /dev/null                                               |  274 ---------------------------------------
 src/views/model/sche/suggest/index.vue                  |   43 ++++-
 src/api/model/sche/model/index.ts                       |   29 +++
 src/views/model/sche/suggest/suggestSnapshot.vue        |   33 +++
 src/api/model/sche/suggest/suggestSnapshotRecord.ts     |    4 
 src/views/model/sche/snapshotConf/det/configDetForm.vue |   10 
 7 files changed, 95 insertions(+), 310 deletions(-)

diff --git a/src/api/model/sche/model/index.ts b/src/api/model/sche/model/index.ts
index 92d9b8a..7a2609b 100644
--- a/src/api/model/sche/model/index.ts
+++ b/src/api/model/sche/model/index.ts
@@ -94,8 +94,32 @@
   predictItemList.value = await PredictItemApi.getMmPredictItemList({
     status: CommonEnabled.ENABLE
   })
+  predictItemList.value = predictItemList.value.filter(e => e.outPuts && e.outPuts.length > 0);
+
+  const allPredictItemList = []
+  const predictAllItemList = predictItemList.value;
+  if (predictAllItemList && predictAllItemList.length > 0) {
+    // 过滤掉本身
+    predictAllItemList.filter(e => e.id !== id).forEach(item => {
+      allPredictItemList.push(
+        {
+          value: item.id,
+          label:  item.itemname,
+          predictlength: item.predictlength,
+          moduleid: item.moduleid,
+          children: item.outPuts?.map(e => {
+            return {
+              value: e.id,
+              label: e.resultName
+            }
+          })
+        }
+      )
+    })
+  }
+
   const normalItemList = []
-  const predictNormalItemList = predictItemList.value.filter(e => e.itemtypename === 'NormalItem' && e.outPuts && e.outPuts.length > 0);
+  const predictNormalItemList = predictItemList.value.filter(e => e.itemtypename === 'NormalItem');
   if (predictNormalItemList && predictNormalItemList.length > 0) {
     // 过滤掉本身
     predictNormalItemList.filter(e => e.id !== id).forEach(item => {
@@ -132,7 +156,7 @@
     })
   }
 
-  const predictMergeItemList = predictItemList.value.filter(e => e.itemtypename === 'MergeItem' && e.outPuts && e.outPuts.length > 0);
+  const predictMergeItemList = predictItemList.value.filter(e => e.itemtypename === 'MergeItem');
   const mergeItemList = []
   if (predictMergeItemList && predictMergeItemList.length > 0) {
     // 过滤掉本身
@@ -165,6 +189,7 @@
     'DATAPOINT':pointList,
     'NormalItem': normalItemList,
     'MergeItem': mergeItemList,
+    'allPredictItemList': allPredictItemList,
     'PLAN': planList,
     'IND': indList,
     'IND_ASCII': indList,
diff --git a/src/api/model/sche/suggest/suggestSnapshotRecord.ts b/src/api/model/sche/suggest/suggestSnapshotRecord.ts
index 382ba52..f235670 100644
--- a/src/api/model/sche/suggest/suggestSnapshotRecord.ts
+++ b/src/api/model/sche/suggest/suggestSnapshotRecord.ts
@@ -2,8 +2,8 @@
 import request from "@/config/axios";
 
 // 列表
-export const getList = (id) => {
-  return request.get({ url: '/model/suggest/snapshot/record/list?operationId=' + id })
+export const getList = (suggestId) => {
+  return request.get({ url: '/model/suggest/snapshot/record/list?suggestId=' + suggestId })
 }
 
 // 图表
diff --git a/src/views/ai/questionparamsetting/QuestionParamSettingForm.vue b/src/views/ai/questionparamsetting/QuestionParamSettingForm.vue
deleted file mode 100644
index 85a7c90..0000000
--- a/src/views/ai/questionparamsetting/QuestionParamSettingForm.vue
+++ /dev/null
@@ -1,112 +0,0 @@
-<template>
-  <Dialog :title="dialogTitle" v-model="dialogVisible">
-    <el-form
-      ref="formRef"
-      :model="formData"
-      :rules="formRules"
-      label-width="100px"
-      v-loading="formLoading"
-    >
-      <el-form-item label="问题模板id" prop="templateId">
-        <el-input v-model="formData.templateId" placeholder="请输入问题模板id" />
-      </el-form-item>
-      <el-form-item label="key" prop="settingKey">
-        <el-input v-model="formData.settingKey" placeholder="请输入key" />
-      </el-form-item>
-      <el-form-item label="参数名称" prop="settingName">
-        <el-input v-model="formData.settingName" placeholder="请输入参数名称" />
-      </el-form-item>
-      <el-form-item label="参数默认值" prop="settingValue">
-        <el-input v-model="formData.settingValue" placeholder="请输入参数默认值" />
-      </el-form-item>
-      <el-form-item label="排序" prop="sort">
-        <el-input v-model="formData.sort" placeholder="请输入排序" />
-      </el-form-item>
-    </el-form>
-    <template #footer>
-      <el-button @click="submitForm" type="primary" :disabled="formLoading">确 定</el-button>
-      <el-button @click="dialogVisible = false">取 消</el-button>
-    </template>
-  </Dialog>
-</template>
-<script setup lang="ts">
-import { QuestionParamSettingApi, QuestionParamSettingVO } from '@/api/ai/questionparamsetting'
-
-/** 大模型问题设置参数 表单 */
-defineOptions({ name: 'QuestionParamSettingForm' })
-
-const { t } = useI18n() // 国际化
-const message = useMessage() // 消息弹窗
-
-const dialogVisible = ref(false) // 弹窗的是否展示
-const dialogTitle = ref('') // 弹窗的标题
-const formLoading = ref(false) // 表单的加载中:1)修改时的数据加载;2)提交的按钮禁用
-const formType = ref('') // 表单的类型:create - 新增;update - 修改
-const formData = ref({
-  id: undefined,
-  templateId: undefined,
-  settingKey: undefined,
-  settingName: undefined,
-  settingValue: undefined,
-  sort: undefined,
-})
-const formRules = reactive({
-  templateId: [{ required: true, message: '问题模板id不能为空', trigger: 'blur' }],
-})
-const formRef = ref() // 表单 Ref
-
-/** 打开弹窗 */
-const open = async (type: string, id?: number) => {
-  dialogVisible.value = true
-  dialogTitle.value = t('action.' + type)
-  formType.value = type
-  resetForm()
-  // 修改时,设置数据
-  if (id) {
-    formLoading.value = true
-    try {
-      formData.value = await QuestionParamSettingApi.getQuestionParamSetting(id)
-    } finally {
-      formLoading.value = false
-    }
-  }
-}
-defineExpose({ open }) // 提供 open 方法,用于打开弹窗
-
-/** 提交表单 */
-const emit = defineEmits(['success']) // 定义 success 事件,用于操作成功后的回调
-const submitForm = async () => {
-  // 校验表单
-  await formRef.value.validate()
-  // 提交请求
-  formLoading.value = true
-  try {
-    const data = formData.value as unknown as QuestionParamSettingVO
-    if (formType.value === 'create') {
-      await QuestionParamSettingApi.createQuestionParamSetting(data)
-      message.success(t('common.createSuccess'))
-    } else {
-      await QuestionParamSettingApi.updateQuestionParamSetting(data)
-      message.success(t('common.updateSuccess'))
-    }
-    dialogVisible.value = false
-    // 发送操作成功的事件
-    emit('success')
-  } finally {
-    formLoading.value = false
-  }
-}
-
-/** 重置表单 */
-const resetForm = () => {
-  formData.value = {
-    id: undefined,
-    templateId: undefined,
-    settingKey: undefined,
-    settingName: undefined,
-    settingValue: undefined,
-    sort: undefined,
-  }
-  formRef.value?.resetFields()
-}
-</script>
\ No newline at end of file
diff --git a/src/views/ai/questionparamsetting/index.vue b/src/views/ai/questionparamsetting/index.vue
deleted file mode 100644
index aa94eea..0000000
--- a/src/views/ai/questionparamsetting/index.vue
+++ /dev/null
@@ -1,211 +0,0 @@
-<template>
-  <ContentWrap>
-    <!-- 搜索工作栏 -->
-    <el-form
-      class="-mb-15px"
-      :model="queryParams"
-      ref="queryFormRef"
-      :inline="true"
-      label-width="68px"
-    >
-      <el-form-item label="问题模板id" prop="templateId">
-        <el-input
-          v-model="queryParams.templateId"
-          placeholder="请输入问题模板id"
-          clearable
-          @keyup.enter="handleQuery"
-          class="!w-240px"
-        />
-      </el-form-item>
-      <el-form-item label="key" prop="settingKey">
-        <el-input
-          v-model="queryParams.settingKey"
-          placeholder="请输入key"
-          clearable
-          @keyup.enter="handleQuery"
-          class="!w-240px"
-        />
-      </el-form-item>
-      <el-form-item label="参数名称" prop="settingName">
-        <el-input
-          v-model="queryParams.settingName"
-          placeholder="请输入参数名称"
-          clearable
-          @keyup.enter="handleQuery"
-          class="!w-240px"
-        />
-      </el-form-item>
-      <el-form-item label="参数默认值" prop="settingValue">
-        <el-input
-          v-model="queryParams.settingValue"
-          placeholder="请输入参数默认值"
-          clearable
-          @keyup.enter="handleQuery"
-          class="!w-240px"
-        />
-      </el-form-item>
-      <el-form-item label="排序" prop="sort">
-        <el-input
-          v-model="queryParams.sort"
-          placeholder="请输入排序"
-          clearable
-          @keyup.enter="handleQuery"
-          class="!w-240px"
-        />
-      </el-form-item>
-      <el-form-item>
-        <el-button @click="handleQuery"><Icon icon="ep:search" class="mr-5px" /> 搜索</el-button>
-        <el-button @click="resetQuery"><Icon icon="ep:refresh" class="mr-5px" /> 重置</el-button>
-        <el-button
-          type="primary"
-          plain
-          @click="openForm('create')"
-          v-hasPermi="['ai:question-param-setting:create']"
-        >
-          <Icon icon="ep:plus" class="mr-5px" /> 新增
-        </el-button>
-        <el-button
-          type="success"
-          plain
-          @click="handleExport"
-          :loading="exportLoading"
-          v-hasPermi="['ai:question-param-setting:export']"
-        >
-          <Icon icon="ep:download" class="mr-5px" /> 导出
-        </el-button>
-      </el-form-item>
-    </el-form>
-  </ContentWrap>
-
-  <!-- 列表 -->
-  <ContentWrap>
-    <el-table v-loading="loading" :data="list" :stripe="true" :show-overflow-tooltip="true">
-      <el-table-column label="id" align="center" prop="id" />
-      <el-table-column label="问题模板id" align="center" prop="templateId" />
-      <el-table-column label="key" align="center" prop="settingKey" />
-      <el-table-column label="参数名称" align="center" prop="settingName" />
-      <el-table-column label="参数默认值" align="center" prop="settingValue" />
-      <el-table-column label="排序" align="center" prop="sort" />
-      <el-table-column label="操作" align="center">
-        <template #default="scope">
-          <el-button
-            link
-            type="primary"
-            @click="openForm('update', scope.row.id)"
-            v-hasPermi="['ai:question-param-setting:update']"
-          >
-            编辑
-          </el-button>
-          <el-button
-            link
-            type="danger"
-            @click="handleDelete(scope.row.id)"
-            v-hasPermi="['ai:question-param-setting:delete']"
-          >
-            删除
-          </el-button>
-        </template>
-      </el-table-column>
-    </el-table>
-    <!-- 分页 -->
-    <Pagination
-      :total="total"
-      v-model:page="queryParams.pageNo"
-      v-model:limit="queryParams.pageSize"
-      @pagination="getList"
-    />
-  </ContentWrap>
-
-  <!-- 表单弹窗:添加/修改 -->
-  <QuestionParamSettingForm ref="formRef" @success="getList" />
-</template>
-
-<script setup lang="ts">
-import download from '@/utils/download'
-import { QuestionParamSettingApi, QuestionParamSettingVO } from '@/api/ai/questionparamsetting'
-import QuestionParamSettingForm from './QuestionParamSettingForm.vue'
-
-/** 大模型问题设置参数 列表 */
-defineOptions({ name: 'QuestionParamSetting' })
-
-const message = useMessage() // 消息弹窗
-const { t } = useI18n() // 国际化
-
-const loading = ref(true) // 列表的加载中
-const list = ref<QuestionParamSettingVO[]>([]) // 列表的数据
-const total = ref(0) // 列表的总页数
-const queryParams = reactive({
-  pageNo: 1,
-  pageSize: 10,
-  templateId: undefined,
-  settingKey: undefined,
-  settingName: undefined,
-  settingValue: undefined,
-  sort: undefined,
-})
-const queryFormRef = ref() // 搜索的表单
-const exportLoading = ref(false) // 导出的加载中
-
-/** 查询列表 */
-const getList = async () => {
-  loading.value = true
-  try {
-    const data = await QuestionParamSettingApi.getQuestionParamSettingPage(queryParams)
-    list.value = data.list
-    total.value = data.total
-  } finally {
-    loading.value = false
-  }
-}
-
-/** 搜索按钮操作 */
-const handleQuery = () => {
-  queryParams.pageNo = 1
-  getList()
-}
-
-/** 重置按钮操作 */
-const resetQuery = () => {
-  queryFormRef.value.resetFields()
-  handleQuery()
-}
-
-/** 添加/修改操作 */
-const formRef = ref()
-const openForm = (type: string, id?: number) => {
-  formRef.value.open(type, id)
-}
-
-/** 删除按钮操作 */
-const handleDelete = async (id: number) => {
-  try {
-    // 删除的二次确认
-    await message.delConfirm()
-    // 发起删除
-    await QuestionParamSettingApi.deleteQuestionParamSetting(id)
-    message.success(t('common.delSuccess'))
-    // 刷新列表
-    await getList()
-  } catch {}
-}
-
-/** 导出按钮操作 */
-const handleExport = async () => {
-  try {
-    // 导出的二次确认
-    await message.exportConfirm()
-    // 发起导出
-    exportLoading.value = true
-    const data = await QuestionParamSettingApi.exportQuestionParamSetting(queryParams)
-    download.excel(data, '大模型问题设置参数.xls')
-  } catch {
-  } finally {
-    exportLoading.value = false
-  }
-}
-
-/** 初始化 **/
-onMounted(() => {
-  getList()
-})
-</script>
\ No newline at end of file
diff --git a/src/views/ai/questiontemplate/QuestionTemplateForm.vue b/src/views/ai/questiontemplate/QuestionTemplateForm.vue
deleted file mode 100644
index 1ab2606..0000000
--- a/src/views/ai/questiontemplate/QuestionTemplateForm.vue
+++ /dev/null
@@ -1,148 +0,0 @@
-<template>
-  <Dialog :title="dialogTitle" v-model="dialogVisible">
-    <el-form
-      ref="formRef"
-      :model="formData"
-      :rules="formRules"
-      label-width="100px"
-      v-loading="formLoading"
-    >
-      <el-form-item label="模型id" prop="modelId">
-        <el-input v-model="formData.modelId" placeholder="请输入模型id" />
-      </el-form-item>
-      <el-form-item label="问题编号" prop="questionCode">
-        <el-input v-model="formData.questionCode" placeholder="请输入问题编号" />
-      </el-form-item>
-      <el-form-item label="问题名称" prop="questionName">
-        <el-input v-model="formData.questionName" placeholder="请输入问题名称" />
-      </el-form-item>
-      <el-form-item label="问题内容" prop="questionContent">
-        <Editor v-model="formData.questionContent" height="150px" />
-      </el-form-item>
-      <el-form-item label="输入个数" prop="dataLength">
-        <el-input v-model="formData.dataLength" placeholder="请输入输入个数" />
-      </el-form-item>
-      <el-form-item label="是否启用(0禁用 1启用)" prop="isEnable">
-        <el-input v-model="formData.isEnable" placeholder="请输入是否启用(0禁用 1启用)" />
-      </el-form-item>
-      <el-form-item label="备注" prop="remark">
-        <el-input v-model="formData.remark" placeholder="请输入备注" />
-      </el-form-item>
-      <el-form-item label="创建时间" prop="createDate">
-        <el-date-picker
-          v-model="formData.createDate"
-          type="date"
-          value-format="x"
-          placeholder="选择创建时间"
-        />
-      </el-form-item>
-      <el-form-item label="更新者" prop="updator">
-        <el-input v-model="formData.updator" placeholder="请输入更新者" />
-      </el-form-item>
-      <el-form-item label="更新时间" prop="updateDate">
-        <el-date-picker
-          v-model="formData.updateDate"
-          type="date"
-          value-format="x"
-          placeholder="选择更新时间"
-        />
-      </el-form-item>
-    </el-form>
-    <template #footer>
-      <el-button @click="submitForm" type="primary" :disabled="formLoading">确 定</el-button>
-      <el-button @click="dialogVisible = false">取 消</el-button>
-    </template>
-  </Dialog>
-</template>
-<script setup lang="ts">
-import { QuestionTemplateApi, QuestionTemplateVO } from '@/api/ai/questiontemplate'
-
-/** 大模型问题模板 表单 */
-defineOptions({ name: 'QuestionTemplateForm' })
-
-const { t } = useI18n() // 国际化
-const message = useMessage() // 消息弹窗
-
-const dialogVisible = ref(false) // 弹窗的是否展示
-const dialogTitle = ref('') // 弹窗的标题
-const formLoading = ref(false) // 表单的加载中:1)修改时的数据加载;2)提交的按钮禁用
-const formType = ref('') // 表单的类型:create - 新增;update - 修改
-const formData = ref({
-  id: undefined,
-  modelId: undefined,
-  questionCode: undefined,
-  questionName: undefined,
-  questionContent: undefined,
-  dataLength: undefined,
-  isEnable: undefined,
-  remark: undefined,
-  createDate: undefined,
-  updator: undefined,
-  updateDate: undefined,
-})
-const formRules = reactive({
-  modelId: [{ required: true, message: '模型id不能为空', trigger: 'blur' }],
-  questionCode: [{ required: true, message: '问题编号不能为空', trigger: 'blur' }],
-})
-const formRef = ref() // 表单 Ref
-
-/** 打开弹窗 */
-const open = async (type: string, id?: number) => {
-  dialogVisible.value = true
-  dialogTitle.value = t('action.' + type)
-  formType.value = type
-  resetForm()
-  // 修改时,设置数据
-  if (id) {
-    formLoading.value = true
-    try {
-      formData.value = await QuestionTemplateApi.getQuestionTemplate(id)
-    } finally {
-      formLoading.value = false
-    }
-  }
-}
-defineExpose({ open }) // 提供 open 方法,用于打开弹窗
-
-/** 提交表单 */
-const emit = defineEmits(['success']) // 定义 success 事件,用于操作成功后的回调
-const submitForm = async () => {
-  // 校验表单
-  await formRef.value.validate()
-  // 提交请求
-  formLoading.value = true
-  try {
-    const data = formData.value as unknown as QuestionTemplateVO
-    if (formType.value === 'create') {
-      await QuestionTemplateApi.createQuestionTemplate(data)
-      message.success(t('common.createSuccess'))
-    } else {
-      await QuestionTemplateApi.updateQuestionTemplate(data)
-      message.success(t('common.updateSuccess'))
-    }
-    dialogVisible.value = false
-    // 发送操作成功的事件
-    emit('success')
-  } finally {
-    formLoading.value = false
-  }
-}
-
-/** 重置表单 */
-const resetForm = () => {
-  formData.value = {
-    id: undefined,
-    modelId: undefined,
-    questionCode: undefined,
-    questionName: undefined,
-    questionContent: undefined,
-    dataLength: undefined,
-    isEnable: undefined,
-    remark: undefined,
-    createDate: undefined,
-    updator: undefined,
-    updateDate: undefined,
-  }
-  formRef.value?.resetFields()
-}
-</script>
\ No newline at end of file
diff --git a/src/views/ai/questiontemplate/index.vue b/src/views/ai/questiontemplate/index.vue
deleted file mode 100644
index b20cebb..0000000
--- a/src/views/ai/questiontemplate/index.vue
+++ /dev/null
@@ -1,274 +0,0 @@
-<template>
-  <ContentWrap>
-    <!-- 搜索工作栏 -->
-    <el-form
-      class="-mb-15px"
-      :model="queryParams"
-      ref="queryFormRef"
-      :inline="true"
-      label-width="68px"
-    >
-      <el-form-item label="模型id" prop="modelId">
-        <el-input
-          v-model="queryParams.modelId"
-          placeholder="请输入模型id"
-          clearable
-          @keyup.enter="handleQuery"
-          class="!w-240px"
-        />
-      </el-form-item>
-      <el-form-item label="问题编号" prop="questionCode">
-        <el-input
-          v-model="queryParams.questionCode"
-          placeholder="请输入问题编号"
-          clearable
-          @keyup.enter="handleQuery"
-          class="!w-240px"
-        />
-      </el-form-item>
-      <el-form-item label="问题名称" prop="questionName">
-        <el-input
-          v-model="queryParams.questionName"
-          placeholder="请输入问题名称"
-          clearable
-          @keyup.enter="handleQuery"
-          class="!w-240px"
-        />
-      </el-form-item>
-      <el-form-item label="输入个数" prop="dataLength">
-        <el-input
-          v-model="queryParams.dataLength"
-          placeholder="请输入输入个数"
-          clearable
-          @keyup.enter="handleQuery"
-          class="!w-240px"
-        />
-      </el-form-item>
-      <el-form-item label="是否启用(0禁用 1启用)" prop="isEnable">
-        <el-input
-          v-model="queryParams.isEnable"
-          placeholder="请输入是否启用(0禁用 1启用)"
-          clearable
-          @keyup.enter="handleQuery"
-          class="!w-240px"
-        />
-      </el-form-item>
-      <el-form-item label="备注" prop="remark">
-        <el-input
-          v-model="queryParams.remark"
-          placeholder="请输入备注"
-          clearable
-          @keyup.enter="handleQuery"
-          class="!w-240px"
-        />
-      </el-form-item>
-      <el-form-item label="创建时间" prop="createDate">
-        <el-date-picker
-          v-model="queryParams.createDate"
-          value-format="YYYY-MM-DD HH:mm:ss"
-          type="daterange"
-          start-placeholder="开始日期"
-          end-placeholder="结束日期"
-          :default-time="[new Date('1 00:00:00'), new Date('1 23:59:59')]"
-          class="!w-240px"
-        />
-      </el-form-item>
-      <el-form-item label="更新者" prop="updator">
-        <el-input
-          v-model="queryParams.updator"
-          placeholder="请输入更新者"
-          clearable
-          @keyup.enter="handleQuery"
-          class="!w-240px"
-        />
-      </el-form-item>
-      <el-form-item label="更新时间" prop="updateDate">
-        <el-date-picker
-          v-model="queryParams.updateDate"
-          value-format="YYYY-MM-DD HH:mm:ss"
-          type="daterange"
-          start-placeholder="开始日期"
-          end-placeholder="结束日期"
-          :default-time="[new Date('1 00:00:00'), new Date('1 23:59:59')]"
-          class="!w-240px"
-        />
-      </el-form-item>
-      <el-form-item>
-        <el-button @click="handleQuery"><Icon icon="ep:search" class="mr-5px" /> 搜索</el-button>
-        <el-button @click="resetQuery"><Icon icon="ep:refresh" class="mr-5px" /> 重置</el-button>
-        <el-button
-          type="primary"
-          plain
-          @click="openForm('create')"
-          v-hasPermi="['ai:question-template:create']"
-        >
-          <Icon icon="ep:plus" class="mr-5px" /> 新增
-        </el-button>
-        <el-button
-          type="success"
-          plain
-          @click="handleExport"
-          :loading="exportLoading"
-          v-hasPermi="['ai:question-template:export']"
-        >
-          <Icon icon="ep:download" class="mr-5px" /> 导出
-        </el-button>
-      </el-form-item>
-    </el-form>
-  </ContentWrap>
-
-  <!-- 列表 -->
-  <ContentWrap>
-    <el-table v-loading="loading" :data="list" :stripe="true" :show-overflow-tooltip="true">
-      <el-table-column label="id" align="center" prop="id" />
-      <el-table-column label="模型id" align="center" prop="modelId" />
-      <el-table-column label="问题编号" align="center" prop="questionCode" />
-      <el-table-column label="问题名称" align="center" prop="questionName" />
-      <el-table-column label="问题内容" align="center" prop="questionContent" />
-      <el-table-column label="输入个数" align="center" prop="dataLength" />
-      <el-table-column label="是否启用(0禁用 1启用)" align="center" prop="isEnable" />
-      <el-table-column label="备注" align="center" prop="remark" />
-      <el-table-column
-        label="创建时间"
-        align="center"
-        prop="createDate"
-        :formatter="dateFormatter"
-        width="180px"
-      />
-      <el-table-column label="更新者" align="center" prop="updator" />
-      <el-table-column
-        label="更新时间"
-        align="center"
-        prop="updateDate"
-        :formatter="dateFormatter"
-        width="180px"
-      />
-      <el-table-column label="操作" align="center">
-        <template #default="scope">
-          <el-button
-            link
-            type="primary"
-            @click="openForm('update', scope.row.id)"
-            v-hasPermi="['ai:question-template:update']"
-          >
-            编辑
-          </el-button>
-          <el-button
-            link
-            type="danger"
-            @click="handleDelete(scope.row.id)"
-            v-hasPermi="['ai:question-template:delete']"
-          >
-            删除
-          </el-button>
-        </template>
-      </el-table-column>
-    </el-table>
-    <!-- 分页 -->
-    <Pagination
-      :total="total"
-      v-model:page="queryParams.pageNo"
-      v-model:limit="queryParams.pageSize"
-      @pagination="getList"
-    />
-  </ContentWrap>
-
-  <!-- 表单弹窗:添加/修改 -->
-  <QuestionTemplateForm ref="formRef" @success="getList" />
-</template>
-
-<script setup lang="ts">
-import { dateFormatter } from '@/utils/formatTime'
-import download from '@/utils/download'
-import { QuestionTemplateApi, QuestionTemplateVO } from '@/api/ai/questiontemplate'
-import QuestionTemplateForm from './QuestionTemplateForm.vue'
-
-/** 大模型问题模板 列表 */
-defineOptions({ name: 'QuestionTemplate' })
-
-const message = useMessage() // 消息弹窗
-const { t } = useI18n() // 国际化
-
-const loading = ref(true) // 列表的加载中
-const list = ref<QuestionTemplateVO[]>([]) // 列表的数据
-const total = ref(0) // 列表的总页数
-const queryParams = reactive({
-  pageNo: 1,
-  pageSize: 10,
-  modelId: undefined,
-  questionCode: undefined,
-  questionName: undefined,
-  questionContent: undefined,
-  dataLength: undefined,
-  isEnable: undefined,
-  remark: undefined,
-  createDate: [],
-  updator: undefined,
-  updateDate: [],
-})
-const queryFormRef = ref() // 搜索的表单
-const exportLoading = ref(false) // 导出的加载中
-
-/** 查询列表 */
-const getList = async () => {
-  loading.value = true
-  try {
-    const data = await QuestionTemplateApi.getQuestionTemplatePage(queryParams)
-    list.value = data.list
-    total.value = data.total
-  } finally {
-    loading.value = false
-  }
-}
-
-/** 搜索按钮操作 */
-const handleQuery = () => {
-  queryParams.pageNo = 1
-  getList()
-}
-
-/** 重置按钮操作 */
-const resetQuery = () => {
-  queryFormRef.value.resetFields()
-  handleQuery()
-}
-
-/** 添加/修改操作 */
-const formRef = ref()
-const openForm = (type: string, id?: number) => {
-  formRef.value.open(type, id)
-}
-
-/** 删除按钮操作 */
-const handleDelete = async (id: number) => {
-  try {
-    // 删除的二次确认
-    await message.delConfirm()
-    // 发起删除
-    await QuestionTemplateApi.deleteQuestionTemplate(id)
-    message.success(t('common.delSuccess'))
-    // 刷新列表
-    await getList()
-  } catch {}
-}
-
-/** 导出按钮操作 */
-const handleExport = async () => {
-  try {
-    // 导出的二次确认
-    await message.exportConfirm()
-    // 发起导出
-    exportLoading.value = true
-    const data = await QuestionTemplateApi.exportQuestionTemplate(queryParams)
-    download.excel(data, '大模型问题模板.xls')
-  } catch {
-  } finally {
-    exportLoading.value = false
-  }
-}
-
-/** 初始化 **/
-onMounted(() => {
-  getList()
-})
-</script>
\ No newline at end of file
diff --git a/src/views/model/sche/snapshotConf/det/configDetForm.vue b/src/views/model/sche/snapshotConf/det/configDetForm.vue
index d1ba51c..b5223aa 100644
--- a/src/views/model/sche/snapshotConf/det/configDetForm.vue
+++ b/src/views/model/sche/snapshotConf/det/configDetForm.vue
@@ -22,9 +22,9 @@
         </el-col>
         <el-col :span="12">
           <el-form-item label="数据编号" prop="dataNo">
-            <el-select-v2 v-if="formData.dataType === 'PREDICT_ITEM_N' || formData.dataType === 'PREDICT_ITEM_L' || formData.dataType === 'PREDICT_ITEM_CUR'"
+            <el-select-v2 v-if="formData.dataType === 'PREDICT_ITEM_N' || formData.dataType === 'PREDICT_ITEM_L' || formData.dataType === 'PREDICT_ITEM_C'"
               v-model="formData.dataNo"
-              :options="modelparamListMap['NormalItem'] || []"
+              :options="modelparamListMap['allPredictItemList'] || []"
               placeholder="请选择"
               :props="{value:'value',label:'label',options:'children'}"
               clearable
@@ -48,7 +48,7 @@
       <el-row :gutter="20">
         <el-col :span="12">
           <el-form-item label="数据名称" prop="dataName">
-            <el-input v-model="formData.dataName" placeholder="" disabled/>
+            <el-input v-model="formData.dataName" placeholder=""/>
           </el-form-item>
         </el-col>
         <el-col :span="12">
@@ -219,8 +219,8 @@
   }
   const changeDataNo = (value) => {
     let dataName = undefined;
-    if (formData.value.dataType === 'PREDICT_ITEM_N' || formData.value.dataType === 'PREDICT_ITEM_L' || formData.value.dataType === 'PREDICT_ITEM_CUR') {
-      for (let item of modelparamListMap.value['NormalItem']) {
+    if (formData.value.dataType === 'PREDICT_ITEM_N' || formData.value.dataType === 'PREDICT_ITEM_L' || formData.value.dataType === 'PREDICT_ITEM_C') {
+      for (let item of modelparamListMap.value['allPredictItemList']) {
         dataName = item.children?.find(e => e.value === value)?.label;
         if (dataName != undefined) {
           break
diff --git a/src/views/model/sche/suggest/index.vue b/src/views/model/sche/suggest/index.vue
index fe274f7..a52afea 100644
--- a/src/views/model/sche/suggest/index.vue
+++ b/src/views/model/sche/suggest/index.vue
@@ -81,7 +81,7 @@
 <!--      <el-table-column label="持续时长" align="center" min-width="100" fixed="right">-->
 <!--      <el-table-column label="调整开始时间" align="center" min-width="100" fixed="right">-->
 <!--      <el-table-column label="调整结束时间" align="center" min-width="100" fixed="right">-->
-      <el-table-column label="调度时间" align="center" prop="scheduleTime" min-width="100" fixed="right"/>
+      <el-table-column label="调度时间" align="center" prop="scheduleTime" min-width="100"/>
       <el-table-column label="状态" align="center" prop="status" min-width="100">
         <template #default="scope">
           <span v-if="scope.row.status === 0">未处理</span>
@@ -93,16 +93,30 @@
 <!--      <el-table-column label="处理人" align="center" min-width="100" fixed="right">-->
 <!--      <el-table-column label="处理时间" align="center" min-width="100" fixed="right">-->
 <!--      <el-table-column label="创建时间" align="center" min-width="100" fixed="right">-->
-      <el-table-column label="详情" align="center" min-width="100" fixed="right">
+      <el-table-column label="操作" align="center" min-width="100">
         <template #default="scope">
-          <el-button
-            link
-            type="primary"
-            @click="openForm(scope.row.modelId ,scope.row.scheduleTime)"
-          >
-            调度历史
-          </el-button>
+          <div class="flex items-center justify-center">
+            <el-button
+              link
+              type="primary"
+              @click="openForm(scope.row.modelId ,scope.row.scheduleTime)"
+            >
+              操作历史
+            </el-button>
+            <el-button
+              link
+              type="primary"
+              @click="openSnapshot(scope.row.id)"
+            >
+              快照
+            </el-button>
+          </div>
         </template>
+<!--        <el-table-column label="快照" align="center" min-width="100" fixed="right">-->
+<!--          <template #default="scope">-->
+<!--            -->
+<!--          </template>-->
+<!--        </el-table-column>-->
       </el-table-column>
     </el-table>
     <!-- 分页 -->
@@ -116,11 +130,15 @@
 
   <!-- 表单弹窗:添加/修改 -->
   <SuggestOperationRecord ref="formRef" @success="getList" />
+  <!-- 快照弹窗 -->
+  <SuggestSnapshot ref="suggestSnapshotRef" />
 
 </template>
 <script lang="ts" setup>
   import * as ScheduleSuggestApi from '@/api/model/sche/suggest'
   import SuggestOperationRecord from './suggestOperationRecord.vue'
+  import SuggestSnapshot from './suggestSnapshot.vue'
+  import {ref} from "vue";
 
   defineOptions({name: 'ScheduleSuggest'})
 
@@ -178,4 +196,11 @@
   onMounted(async () => {
     await getList()
   })
+
+  /** 快照 */
+  const suggestSnapshotRef = ref()
+  const openSnapshot = (suggestId?: string) => {
+    console.log(suggestId)
+    suggestSnapshotRef.value.open(suggestId)
+  }
 </script>
diff --git a/src/views/model/sche/suggest/suggestOperationRecord.vue b/src/views/model/sche/suggest/suggestOperationRecord.vue
index f09ddea..b0ff44b 100644
--- a/src/views/model/sche/suggest/suggestOperationRecord.vue
+++ b/src/views/model/sche/suggest/suggestOperationRecord.vue
@@ -50,18 +50,6 @@
           align="center"
           min-width="150"
         />
-        <el-table-column label="快照" align="center" min-width="100" fixed="right">
-          <template #default="scope">
-            <el-button
-              link
-              type="primary"
-              @click="openSnapshot(scope.row.id)"
-              v-if="scope.row.operate=='采纳建议'"
-            >
-              快照
-            </el-button>
-          </template>
-        </el-table-column>
       </el-table>
       <!-- 分页 -->
       <Pagination
diff --git a/src/views/model/sche/suggest/suggestSnapshot.vue b/src/views/model/sche/suggest/suggestSnapshot.vue
index f64263c..f23ae2e 100644
--- a/src/views/model/sche/suggest/suggestSnapshot.vue
+++ b/src/views/model/sche/suggest/suggestSnapshot.vue
@@ -40,19 +40,20 @@
   const loading = ref(false)
 
 
-  const open = async (id: string) => {
+  const open = async (suggestId: string) => {
     visible.value = true
-    await getDataList(id)
+    await getDataList(suggestId)
   }
 
   defineExpose({ open })
 
   /** 获取数据列表 */
-  const getDataList = async (id: string) => {
+  const getDataList = async (suggestId: string) => {
     try {
-      const res = await suggestSnapshotApi.getList(id)
+      const res = await suggestSnapshotApi.getList(suggestId)
       dataList.value = res
       selectedData.value = [] // 清空已选项
+      refreshCharts()
     } catch (error) {
       console.error(error)
       message.error('获取数据列表失败')
@@ -125,13 +126,33 @@
         series: [{
           type: 'line',
           data: chartInfo.data?.dataList || [],
-          lineStyle: { color: '#5B8FF9', width: 1 }
+          lineStyle: { color: '#5B8FF9', width: 1 },
+          markLine: {
+            silent: true,
+            symbol: ['none', 'none'],
+            lineStyle: {
+              type: 'solid',
+              width: 1,
+              color: '#95E6FF',
+            },
+            label: {
+              show: false,
+            },
+            data: [
+              {
+                xAxis: chartInfo.data?.scheduleTime || 0, // 真实数据分割线
+                lineStyle: {
+                  color: '#5DFF9E',
+                },
+              }
+            ],
+          },
         }]
       }
 
       chart.setOption(option)
       return chart
-    }).filter(Boolean) as echarts.ECharts[]
+    })
   }
 </script>
 

--
Gitblit v1.9.3