| | |
| | | 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 })
|
| | | },
|
| | | }
|
| | | 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 }) |
| | | }, |
| | | } |
| | |
| | | planList.push( |
| | | { |
| | | id: item.id, |
| | | name: item.itemName |
| | | name: item.itemName, |
| | | itemNo: item.itemNo |
| | | } |
| | | ) |
| | | }) |
| | |
| | | indList.push( |
| | | { |
| | | id: item.id, |
| | | name: item.itemName |
| | | name: item.itemName, |
| | | itemNo: item.itemNo |
| | | } |
| | | ) |
| | | }) |
| | |
| | | :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 aiModelList" |
| | | :key="item.id" |
| | | :label="item.name" |
| | | :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 |
| | |
| | | @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> |
| | |
| | | <!-- 列表 --> |
| | | <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 |
| | |
| | | </ContentWrap> |
| | | |
| | | <!-- 表单弹窗:添加/修改 --> |
| | | <TemplateForm ref="formRef" @success="getList" /> |
| | | <TemplateForm ref="formRef" @success="getList"/> |
| | | |
| | | </template> |
| | | <script lang="ts" setup> |
| | |
| | | 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"; |
| | | |
| | | defineOptions({name: 'AiTemplate'}) |
| | | |
| | |
| | | const loading = ref(true) // 列表的加载中 |
| | | const total = ref(0) // 列表的总页数 |
| | | const list = ref([]) // 列表的数据 |
| | | const aiModelList = ref([] as AiModelApi.ModelVO[]) |
| | | 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 |
| | |
| | | |
| | | /** 初始化 **/ |
| | | onMounted(async () => { |
| | | |
| | | aiModelList.value = await AiModelApi.ModelApi.getModelSimpleList(1) |
| | | await getList() |
| | | }) |
| | | </script> |
| | |
| | | <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> |
| | |
| | | <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.name" |
| | | :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" |
| | | :autosize="{ minRows: 2}" |
| | | :autosize="{ minRows: 2 , maxRows:6}" |
| | | placeholder="请输入问题内容" |
| | | v-model="formData.questionContent"/> |
| | | </el-form-item> |
| | |
| | | </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"; |
| | | |
| | | defineOptions({ name: 'AiTemplateForm' }) |
| | | const aiModelList = ref([] as AiModelApi.ModelVO[]) |
| | | defineOptions({name: 'AiTemplateForm'}) |
| | | |
| | | const { t } = useI18n() |
| | | const {t} = useI18n() |
| | | const message = useMessage() |
| | | const dialogVisible = ref(false) |
| | | const dialogTitle = ref('') |
| | |
| | | const formType = ref('') |
| | | const formData = ref({ |
| | | id: undefined, |
| | | modelId: undefined, |
| | | questionCode: undefined, |
| | | questionName: undefined, |
| | | dataLength: undefined, |
| | | questionContent: undefined, |
| | | isEnable: 1, |
| | | settingList: [{ |
| | | settingKey: '', |
| | | settingName: '', |
| | |
| | | }] |
| | | }) |
| | | 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() |
| | | |
| | |
| | | dialogTitle.value = t('action.' + type) |
| | | formType.value = type |
| | | resetForm() |
| | | // 加载调度模型列表 |
| | | aiModelList.value = await AiModelApi.ModelApi.getModelSimpleList(1) |
| | | if (id) { |
| | | formLoading.value = true |
| | | try { |
| | | formData.value = await AiQuestionTemplateApi.QuestionTemplateApi.getQuestionTemplate(id) |
| | | aiModelList.value.forEach(item => { |
| | | if (item.id == formData.value.modelId) { |
| | | formData.value.modelId = item.name; |
| | | } |
| | | }); |
| | | } finally { |
| | | formLoading.value = false |
| | | } |
| | | } |
| | | } |
| | | defineExpose({ open }) |
| | | defineExpose({open}) |
| | | |
| | | const emit = defineEmits(['success']) |
| | | const submitForm = async () => { |
| | |
| | | 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')) |
| | |
| | | const resetForm = () => { |
| | | formData.value = { |
| | | id: undefined, |
| | | modelId: undefined, |
| | | questionCode: undefined, |
| | | questionName: undefined, |
| | | dataLength: undefined, |
| | | questionContent: undefined, |
| | | isEnable: 1, |
| | | settingList: [{ |
| | | settingKey: '', |
| | | settingName: '', |
| | |
| | | pointNo: '' |
| | | }]) |
| | | const queryParams = reactive({ |
| | | pointTypes: "MEASURE,CONSTANT,CUMULATE,EXTREMAL", |
| | | pointTypes: "MEASURE,CONSTANT,CALCULATE,CUMULATE,EXTREMAL", |
| | | }) |
| | | const pointList2 = ref([{ |
| | | pointName: '', |
| | |
| | | <el-row :gutter="24"> |
| | | <el-col :span="12"> |
| | | <el-form-item label="数据类型" prop="dataType"> |
| | | <el-select v-model="formData.dataType" placeholder="请选择"> |
| | | <el-select v-model="formData.dataType" placeholder="请选择" @change="changeDataType()"> |
| | | <el-option |
| | | v-for="dict in getStrDictOptions(DICT_TYPE.SUGGEST_SNAPSHOT_DATA_TYPE)" |
| | | v-for="dict in getStrDictOptions(DICT_TYPE.SUGGEST_SNAPSHOT_DATA_TYPE)" |
| | | :key="dict.value" |
| | | :label="dict.label" |
| | | :value="dict.value" |
| | |
| | | </el-form-item> |
| | | </el-col> |
| | | <el-col :span="12"> |
| | | <el-form-item label="数据名称" prop="dataName"> |
| | | <el-input v-model="formData.dataName" placeholder=""/> |
| | | <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'" |
| | | v-model="formData.dataNo" |
| | | :options="modelparamListMap['NormalItem'] || []" |
| | | placeholder="请选择" |
| | | :props="{value:'value',label:'label',options:'children'}" |
| | | clearable |
| | | filterable |
| | | :fit-input-width="false" |
| | | @change="changeDataNo" |
| | | /> |
| | | <el-select-v2 v-else |
| | | v-model="formData.dataNo" |
| | | :options="modelparamListMap[formData.dataType] || []" |
| | | placeholder="请选择" |
| | | :props="{value:'itemNo',label:'name'}" |
| | | clearable |
| | | filterable |
| | | :fit-input-width="false" |
| | | @change="changeDataNo" |
| | | /> |
| | | </el-form-item> |
| | | </el-col> |
| | | </el-row> |
| | | <el-row :gutter="20"> |
| | | <el-col :span="12"> |
| | | <el-form-item label="数据编号" prop="dataNo"> |
| | | <el-input v-model="formData.dataNo" placeholder=""/> |
| | | <el-form-item label="数据名称" prop="dataName"> |
| | | <el-input v-model="formData.dataName" placeholder="" disabled/> |
| | | </el-form-item> |
| | | </el-col> |
| | | <el-col :span="12"> |
| | |
| | | import * as ConfigDetApi from '@/api/model/sche/suggest/snapshotConfigDet' |
| | | import {deleteIcon} from "@/api/model/mpk/icon"; |
| | | import {DICT_TYPE, getIntDictOptions, getStrDictOptions} from '@/utils/dict' |
| | | import * as ScheduleModelApi from "@/api/model/sche/model"; |
| | | |
| | | defineOptions({name: 'ConfigDetForm'}) |
| | | const {t} = useI18n() // 国际化 |
| | |
| | | }) |
| | | const formRef = ref() // 表单 Ref |
| | | |
| | | const modelparamListMap = ref({}) |
| | | |
| | | /** 打开弹窗 */ |
| | | const open = async (type: string, id?: string, confId?: string) => { |
| | | dialogVisible.value = true |
| | |
| | | formType.value = type |
| | | resetForm() |
| | | formData.value.confId = confId |
| | | // 加载参数列表 |
| | | modelparamListMap.value = await ScheduleModelApi.getModelParamList(id) |
| | | // 修改时,设置数据 |
| | | if (id) { |
| | | formLoading.value = true |
| | |
| | | } |
| | | formRef.value?.resetFields() |
| | | } |
| | | |
| | | function changeDataType() { |
| | | formData.value.dataNo = undefined |
| | | formData.value.dataName = undefined |
| | | } |
| | | 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']) { |
| | | dataName = item.children?.find(e => e.value === value)?.label; |
| | | if (dataName != undefined) { |
| | | break |
| | | } |
| | | } |
| | | }else { |
| | | dataName = modelparamListMap.value?.[formData.value.dataType]?.find(e => e.itemNo === value)?.name; |
| | | } |
| | | console.log(dataName) |
| | | formData.value.dataName = dataName |
| | | } |
| | | </script> |
| | |
| | | :data="list" |
| | | row-key="id" |
| | | > |
| | | <el-table-column prop="dataType" align="center" label="数据类型"> |
| | | <el-table-column prop="dataType" align="center" label="数据类型" width="110px"> |
| | | <template #default="scope"> |
| | | <dict-tag :type="DICT_TYPE.SUGGEST_SNAPSHOT_DATA_TYPE" :value="scope.row.dataType"/> |
| | | </template> |
| | | </el-table-column> |
| | | <el-table-column prop="dataName" label="数据名称"/> |
| | | <el-table-column prop="dataNo" label="数据编号"/> |
| | | <el-table-column prop="leftLength" label="左侧长度(min)"/> |
| | | <el-table-column prop="rightLength" label="右侧侧长度(min)"/> |
| | | <el-table-column prop="sort" label="排序"/> |
| | | <el-table-column prop="ext1" label="拓展字段1"/> |
| | | <el-table-column prop="ext2" label="拓展字段2"/> |
| | | <el-table-column prop="ext3" label="拓展字段3"/> |
| | | <el-table-column prop="ext4" label="拓展字段4"/> |
| | | <el-table-column prop="ext5" label="拓展字段5"/> |
| | | <el-table-column prop="leftLength" label="左侧长度(min)" width="80"/> |
| | | <el-table-column prop="rightLength" label="右侧长度(min)" width="80"/> |
| | | <el-table-column prop="sort" label="排序" width="80"/> |
| | | <!-- <el-table-column prop="ext1" label="拓展字段1"/>--> |
| | | <!-- <el-table-column prop="ext2" label="拓展字段2"/>--> |
| | | <!-- <el-table-column prop="ext3" label="拓展字段3"/>--> |
| | | <!-- <el-table-column prop="ext4" label="拓展字段4"/>--> |
| | | <!-- <el-table-column prop="ext5" label="拓展字段5"/>--> |
| | | <el-table-column label="操作" align="center" width="150px"> |
| | | <template #default="scope"> |
| | | <div class="flex items-center justify-center"> |