Ver código fonte

提示词列表接口

zhaoen 5 meses atrás
pai
commit
12aa57002a

+ 57 - 0
src/api/promtWordList/index.ts

@@ -0,0 +1,57 @@
+import request from '@/utils/request';
+import { AxiosPromise } from 'axios';
+import {PromptTemplateVO,Page,PagePromptTemplateVO} from './types'
+
+/**
+ * 新增模板
+ * @param data
+ */
+export const addTemplate = (data:PromptTemplateVO) => {
+  return request({
+    url:'/ai/prompt/template',
+    method:'post',
+    data:data
+  })
+}
+/**
+ * 编辑模板
+ * @param data
+ */
+export const editTemplate = (data:PromptTemplateVO) => {
+  return request({
+    url:"/ai/prompt/template",
+    method:'put',
+    data:data
+  })
+}
+/**
+ * 查看模板详情
+ * @param id
+ */
+export const templateDetails = (id:number): AxiosPromise<PromptTemplateVO> => {
+  return request({
+    url:`/ai/prompt/template/${id}`,
+    method:'get',
+  })
+}
+/**
+ * 删除模板
+ * @param id
+ */
+export const deleteTemplate = (id:number) =>{
+  return request({
+    url:`/ai/prompt/template/${id}`,
+    method:'delete'
+  })
+}
+/**
+ * 分页
+ * @param Page
+ */
+export const templatePage = (data: Page): AxiosPromise<PagePromptTemplateVO> => {
+  return request({
+    url:`/ai/prompt/template/page`,
+    method:'get',
+    data:data
+  })
+}

+ 37 - 0
src/api/promtWordList/types.ts

@@ -0,0 +1,37 @@
+
+
+export interface Page {
+  pageNum?: number;
+  pageSize?: number;
+  [property: string]: any;
+}
+
+/**
+ * IPagePromptTemplateVO
+ */
+export interface PagePromptTemplateVO {
+  current?: number;
+  pages?: number;
+  records?: PromptTemplateVO[];
+  size?: number;
+  total?: number;
+  [property: string]: any;
+}
+
+/**
+ * PromptTemplateVO
+ */
+export interface PromptTemplateVO {
+  categoryId?: number;
+  content?: string;
+  createdAt?: Date;
+  description?: string;
+  id?: number;
+  modelOptionId?: number;
+  name?: string;
+  status?: number;
+  type?: string;
+  updatedAt?: Date;
+  version?: number;
+  [property: string]: any;
+}

+ 3 - 3
src/router/index.ts

@@ -110,9 +110,9 @@ export const constantRoutes: RouteRecordRaw[] = [
         meta: {title: '提示词分类管理', icon: 'dashboard', affix: true}
       },
       {
-        path: '/promptWordClassify',
-        component: () => import('@/views/promptWordClassify/index.vue'),
-        name:'PromptWordClassify',
+        path: '/promptWordList',
+        component: () => import('@/views/promptWordList/index.vue'),
+        name:'PromptWordList',
         meta: {title: '提示词列表', icon: 'dashboard', affix: true}
       },
       {

+ 25 - 3
src/views/editPromptWord/index.vue

@@ -8,7 +8,7 @@ const status = ref<boolean>()
 const activeName = ref()
 
 const returnList = () => {
-  router.push('/promptWordClassify')
+  router.push('/promptWordList')
 }
 </script>
 
@@ -132,6 +132,7 @@ const returnList = () => {
     </div>
     <div class="title-row" style="padding: 5px 0">
       <div class="history-msg">
+        <div class="now">当前</div>
         <span>v1.5</span>
         <span>2025-7-15 14:30</span>
         <span>更新人:admin</span>
@@ -141,6 +142,19 @@ const returnList = () => {
         <span>查看</span>
       </div>
     </div>
+    <div class="title-row" style="padding: 5px 0">
+      <div class="history-msg">
+        <span>v1.4</span>
+        <span>2025-7-15 14:30</span>
+        <span>更新人:system</span>
+        <span>变更原因:增加字数,限制参数</span>
+      </div>
+      <div class="history-operate">
+        <span>查看</span>
+        <span>对比</span>
+        <span>回滚</span>
+      </div>
+    </div>
     <div class="title-row">
       <h5>预览/测试</h5>
       <el-button style="align-self: center" type="primary">发送测试请求</el-button>
@@ -211,8 +225,14 @@ const returnList = () => {
 }
 .history-msg{
   font-size:12px;
+  .now{
+    padding: 0 10px;
+    display:inline;
+    color: #b7eb8f;
+    background-color: #f6ffed;
+  }
   span{
-    padding-right: 5px;
+    padding-right: 7px;
   }
   span:nth-child(2){
     color:#999999;
@@ -253,7 +273,9 @@ const returnList = () => {
     }
   }
   .main{
-    border:1px solid #d9d9d9;
+    :deep(.el-textarea__inner){
+      min-height: 100px !important;
+    }
   }
   .footer{
     border:1px solid #d9d9d9;

+ 1 - 1
src/views/market/addModel.vue

@@ -141,7 +141,7 @@ const submit = () =>{
           <span>默认继承服务配置,可单独设置</span>
         </el-form-item>
         <el-form-item label="API密钥">
-          <el-input type="password" v-model="baseInfoForm.apiKey"/>
+          <el-input type="password" show-password v-model="baseInfoForm.apiKey"/>
           <span>默认继承服务商配置,可单独设置</span>
         </el-form-item>
         <el-form-item label="请求超过时间(秒)">

+ 11 - 10
src/views/market/index.vue

@@ -121,7 +121,7 @@
     </div>
     <div class="table">
       <el-table
-        :data="models"
+        :data="modelData"
         style="width: 100%"
         height="100%"
         @selection-change="handleSelectionChange"
@@ -132,15 +132,15 @@
         <el-table-column label="模型版本" prop="modelVersion"></el-table-column>
         <el-table-column label="参数配置">
           <template #default="scope">
-            <span>{{scope.parameters.length}}个参数</span>
+            <span v-if="scope?.parameters">{{scope?.row?.parameters?.length}}个参数</span>
           </template>
         </el-table-column>
         <el-table-column label="状态">
           <template #default>
-            <div v-if="scope.status === 1" class="status enabled">
+            <div v-if="scope?.row.status === 1" class="status enabled">
               启用
             </div>
-            <div v-else class="status testing">
+            <div v-else-if="scope?.row.status === 0" class="status testing">
               测试中
             </div>
           </template>
@@ -152,7 +152,7 @@
             <el-icon color="#1890ff" size="25px" class="icon-gap"><View /></el-icon>
             <el-icon color="#1890ff" size="25px" class="icon-gap" @click="edit(slot.$index,slot.row)"><Edit /></el-icon>
             <el-icon color="#1890ff" size="25px" class="icon-gap"><List /></el-icon>
-            <el-icon :color="slot.status===0? '#b7eb8f' : '#ffa8e3'" size="25px" class="icon-gap" @click="toggleModelStatus(slot.row)"><SwitchButton /></el-icon>
+            <el-icon :color="slot?.row.status===0? '#b7eb8f' : '#ffa8e3'" size="25px" class="icon-gap" @click="toggleModelStatus(slot.row)"><SwitchButton /></el-icon>
           </template>
         </el-table-column>
       </el-table>
@@ -184,6 +184,7 @@ import addModel from './addModel.vue'
 import { useRouter } from 'vue-router'
 import {onMounted} from 'vue';
 import {getModelByType,queryModelByNameType,deleteModel,queryModelList,toggleStatus} from '@/api/modelConfig/index'
+import { ModelConfigVo} from '@/api/modelConfig/types'
 
 const router = useRouter()
 const addOrEdit = ref("新增")
@@ -191,7 +192,7 @@ const serviceOption = ref(["OpenAI"])
 const modelNameOption = ref(["模型1","模型2"])
 const modelTypeOption = ref(["类型1","类型2"])
 const modelStateOption = ref(["全部","开启","关闭"])
-const models = ref([{}])
+const modelData = ref<ModelConfigVo[]>()
 const pageSize = ref(10)
 const selectedRows = ref([])
 
@@ -211,7 +212,7 @@ onMounted(()=>{
 const fetchData = async() =>{
   const res = await queryModelList({})
   if(res.code===0){
-    models.value = res.data
+    modelData.value = res.data
   }
 }
 const toggleModelStatus = async (row) =>{
@@ -245,13 +246,13 @@ const handleSearch = async () => {
     }
     const res = await queryModelByNameType(data)
     if(res.code===0){
-      models.value = res.data
+      modelData.value = res.data
     }
   }else if(modelType.value){
     const res = await getModelByType(modelType.value)
     if(res.code===0){
-      models.value=[];
-      models.push(res.data)
+      modelData.value=[];
+      modelData.push(res.data)
     }
   }
 }

+ 99 - 20
src/views/promptWordClassify/index.vue → src/views/promptWordList/index.vue

@@ -1,9 +1,31 @@
 <script setup lang="ts">
 import {ref} from 'vue'
 import {useRouter} from 'vue-router';
+import { Calendar, Search } from '@element-plus/icons-vue';
+import { addTemplate,editTemplate,deleteTemplate,templatePage,templateDetails } from '@/api/promtWordList/index'
+import {PromptTemplateVO} from '@/api/promtWordList/types'
 const router = useRouter()
 
 const defaultProps = ref()
+const pageSize = ref<number>(10)
+const pageNum = ref<number>(1)
+const total = ref<number>()
+const templateData = ref<PromptTemplateVO[]>([
+  {
+  name:'creative-writing-template',
+  type:'user',
+  status:1,
+  version:'v1.5',
+  updatedAt:'2025-07-20 14:28:14'
+  },
+  {
+    name:'bug-fix-assisant',
+    type:'system',
+    status:0,
+    version:'v1.5',
+    updatedAt:'2025-07-20 14:30:28'
+  }
+])
 
 interface Tree{
   label:string
@@ -21,10 +43,45 @@ const data : Tree[] = [
   }
 ]
 const createTime = ref('')
-const templateData = ref([{}])
-const pageSize = ref(10)
+
+
 const handleNodeClick = () => {
 
+}
+const fetchTemplatePage = async () => {
+  const data = {
+    pageNum:pageNum,
+    pageSize:pageSize,
+  }
+  const res = await templatePage(data)
+  if(res.code===0){
+    pageNum.value = res.current
+    total.value = res.total
+    templateData.value = res.records
+  }
+}
+const handleDelete = (value) => {
+  ElMessageBox.confirm(
+    '此操作将永久删除,不可撤销',
+    '警告',
+    {
+      confirmButtonText:'确定',
+      cancelButtonText:'取消',
+      type:'warning'
+    }
+  ).then(
+    doDelete(value.id)
+  )
+}
+const doDelete = async (id) => {
+  const res = await deleteTemplate(id)
+  if(res.code===0){
+    ElMessage({
+      message:'删除成功',
+      type:'success'
+    })
+    fetchTemplatePage()
+  }
 }
 const edit = () =>{
   router.push('/editPromptWord')
@@ -33,7 +90,7 @@ const edit = () =>{
 
 <template>
   <el-container>
-    <el-aside width="200px">
+    <el-aside width="200px" style="padding-top: 0">
       <el-container>
         <el-header>
           <h4>提示词分类</h4>
@@ -55,7 +112,7 @@ const edit = () =>{
       <el-main>
         <el-row>
           <el-col :span="16">
-            <el-input placeholder="搜索提示词名称,描述..."/>
+            <el-input placeholder="搜索提示词名称,描述..." :prefix-icon="Search"/>
           </el-col>
           <el-col :span="3" :offset="1">
             <el-form-item label="类型">
@@ -77,12 +134,14 @@ const edit = () =>{
             <el-form-item label="创建时间:">
               <el-date-picker
                 v-model="createTime"
-                type="datetimerange"
+                type="daterange"
                 start-placeholder="年 -月-日"
                 end-placeholder="年 -月-日"
                 range-separator="至"
                 format="YYYY-MM-DD"
-              />
+                class="custom-date-picker"
+              >
+              </el-date-picker>
             </el-form-item>
           </el-col>
           <el-col :span="1" :offset="1">
@@ -100,32 +159,42 @@ const edit = () =>{
           >
             <el-table-column label="序号">
               <template #default="scope">
-                {{++scope.$index}}
+                {{scope.$index+1}}
               </template>
             </el-table-column>
-            <el-table-column label="模板名称" prop="templateName"/>
-            <el-table-column label="模板类型" prop="templateType"/>
+            <el-table-column label="模板名称" prop="name"/>
+            <el-table-column label="模板类型" prop="type"/>
             <el-table-column label="分类"/>
-            <el-table-column label="状态"/>
-            <el-table-column label="版本号"/>
-            <el-table-column label="最后更新时间"/>
+            <el-table-column label="状态">
+              <template #default="scope">
+                <span v-if="scope?.row.status===1" class="enabled">
+                  启用
+                </span>
+                <span v-else-if="scope?.row.status===0" class="disabled">
+                  禁用
+                </span>
+              </template>
+            </el-table-column>
+            <el-table-column label="版本号" prop="version"/>
+            <el-table-column label="最后更新时间" prop="updatedAt"/>
             <el-table-column label="操作">
               <template #default="scope">
                 <el-icon color="#1890ff" size="25px" class="icon-gap"><View /></el-icon>
                 <el-icon color="#1890ff" size="25px" class="icon-gap" @click="edit(scope.$index,scope.row)"><Edit /></el-icon>
                 <el-icon color="#1890ff" size="25px" class="icon-gap"><List /></el-icon>
-                <el-icon color="" size="25px" class="icon-gap"><Delete /></el-icon>
+                <el-icon size="25px" class="icon-gap" @click="handleDelete(scope.row)"><Delete /></el-icon>
               </template>
             </el-table-column>
           </el-table>
         </el-row>
-        <div class="page-right"></div>
-        <el-pagination
-          background
-          layout="prev, pager, next"
-          :total="10"
-          :page-size="pageSize"
-        />
+        <div class="page-right">
+          <el-pagination
+            background
+            layout="prev, pager, next"
+            :total="10"
+            :page-size="pageSize"
+          />
+        </div>
       </el-main>
     </el-container>
   </el-container>
@@ -138,4 +207,14 @@ const edit = () =>{
 .page-right{
   float: right;
 }
+
+.enabled{
+  color: #b7eb8f;
+  background-color: #f6ffed;  /* 浅绿色背景(Ant Design等常用配色) */
+}
+.disabled {
+  color: #bfbfbf;            /* 浅灰色文字 */
+  background-color: #f5f5f5; /* 可选:浅灰色背景 */
+  cursor: not-allowed;       /* 禁用光标状态 */
+}
 </style>