Browse Source

提示词模板

CzRger 1 month ago
parent
commit
7e4c1f3af9

+ 12 - 0
src/api/modules/app/tips.ts

@@ -0,0 +1,12 @@
+import { del, get, post, put } from '@/api/request'
+
+const proxy = (import.meta as any).env.VITE_WORKFLOW_API_PROXY
+// 提示词模板-分页
+export const promptTemplatesSearch = (params) =>
+  post(`/prompt-templates/search`, params, {}, proxy)
+// 提示词模板-保存
+export const promptTemplatesSave = (params) =>
+  post(`/prompt-templates`, params, {}, proxy)
+// 提示词模板-详情
+export const promptTemplatesDetail = (id) =>
+  get(`/prompt-templates/${id}`, {}, {}, proxy)

+ 4 - 4
src/views/manage/app/make/index.vue

@@ -118,7 +118,7 @@
                     class="h-full w-full"
                     style="resize: none; line-height: 1.4"
                     ref="ref_tips"
-                    v-model="state.form.tips"
+                    v-model="state.form.prePrompt"
                   ></textarea>
                 </div>
               </div>
@@ -598,7 +598,7 @@
     />
     <templateSelect
       v-model:show="state.templateSelect.show"
-      @insert="(val) => ((state.form.tips = val), ref_tips.focus())"
+      @insert="(val) => ((state.form.prePrompt = val), ref_tips.focus())"
     />
     <templateDetail
       v-model:show="state.templateDetail.show"
@@ -679,7 +679,7 @@ const state: any = reactive({
   ID: route.params.id,
   autoSaveTimestamp: '',
   form: {
-    tips: '',
+    prePrompt: '',
     model: { name: '' },
     components: [],
     knowledges: [
@@ -974,7 +974,7 @@ const autoSave = debounce((v) => {
 const onAddTipsTemplate = () => {
   state.templateDetail.transfer = {
     mode: 'add',
-    tips: state.form.tips + '',
+    content: state.form.prePrompt + '',
   }
   state.templateDetail.show = true
 }

+ 30 - 51
src/views/manage/app/make/template-detail.vue

@@ -28,7 +28,7 @@
           required
           :span="24"
           label="提示词"
-          v-model:param="state.form.tips"
+          v-model:param="state.form.content"
           type="textarea"
           :rows="16"
         />
@@ -48,6 +48,10 @@ import {
 } from 'vue'
 import { ElMessage, ElMessageBox } from 'element-plus'
 import { useAppStore, useDialogStore, useDictionaryStore } from '@/stores'
+import {
+  promptTemplatesDetail,
+  promptTemplatesSave,
+} from '@/api/modules/app/tips'
 
 const AppStore = useAppStore()
 const DictionaryStore = useDictionaryStore()
@@ -83,12 +87,15 @@ watch(
   () => props.show,
   (n) => {
     if (n) {
+      state.loading = false
       initDictionary()
-      state.form = {}
+      state.form = {
+        type: 'PERSONAL',
+      }
       if (props.transfer.mode !== 'add') {
         initData()
       } else {
-        state.form.tips = props.transfer.tips || ''
+        state.form.content = props.transfer.content || ''
       }
       nextTick(() => {
         ref_form.value.reset()
@@ -97,18 +104,15 @@ watch(
   },
 )
 const initData = () => {
-  // state.loading = true
-  // appDetail(props.transfer.id)
-  //   .then(({ data }: any) => {
-  //     state.form = data
-  //     if (data.icon) {
-  //       state.icon = [{ url: data.icon, name: data.icon }]
-  //     }
-  //   })
-  //   .catch(() => {})
-  //   .finally(() => {
-  //     state.loading = false
-  //   })
+  state.loading = true
+  promptTemplatesDetail(props.transfer.id)
+    .then(({ data }: any) => {
+      state.form = data
+    })
+    .catch(() => {})
+    .finally(() => {
+      state.loading = false
+    })
 }
 const onSubmit = () => {
   ref_form.value
@@ -117,42 +121,17 @@ const onSubmit = () => {
       DialogStore.confirm({
         content: `请确认是否提交?`,
         onSubmit: () => {
-          // state.loading = true
-          // state.form.icon = state.icon[0].url
-          // if (props.transfer.mode === 'add') {
-          //   appAdd(state.form)
-          //     .then(() => {
-          //       ElMessage.success(`${titleCpt.value}成功!`)
-          //       emit('update:show', false)
-          //       emit('refresh')
-          //     })
-          //     .catch(() => {})
-          //     .finally(() => {
-          //       state.loading = false
-          //     })
-          // } else if (props.transfer.mode === 'edit') {
-          //   appEdit(state.form)
-          //     .then(() => {
-          //       ElMessage.success(`${titleCpt.value}成功!`)
-          //       emit('update:show', false)
-          //       emit('refresh')
-          //     })
-          //     .catch(() => {})
-          //     .finally(() => {
-          //       state.loading = false
-          //     })
-          // } else if (props.transfer.mode === 'copy') {
-          //   appCopy(state.form.id, state.form)
-          //     .then(() => {
-          //       ElMessage.success(`${titleCpt.value}成功!`)
-          //       emit('update:show', false)
-          //       emit('refresh')
-          //     })
-          //     .catch(() => {})
-          //     .finally(() => {
-          //       state.loading = false
-          //     })
-          // }
+          state.loading = true
+          promptTemplatesSave(state.form)
+            .then(() => {
+              ElMessage.success(`${titleCpt.value}成功!`)
+              emit('update:show', false)
+              emit('refresh')
+            })
+            .catch(() => {})
+            .finally(() => {
+              state.loading = false
+            })
         },
       })
     })

+ 26 - 15
src/views/manage/app/make/template-select.vue

@@ -58,19 +58,18 @@
             class="flex-1 overflow-y-auto bg-gradient-to-b from-[#2853F7]/10 to-[#ffffff]/10 p-4 text-base text-[#606266] shadow"
             style="line-height: 1.4"
           >
-            水水水水水水水水水水水水水水水水水水<br />
-            水水水水水水水水水水水水水水水水水水<br />
+            {{ state.selected.content }}
           </div>
           <div class="mt-4 flex justify-end gap-4">
             <div
               class="__czr-dialog-foot_submit __hover"
-              @click="onCopy(state.selected.description)"
+              @click="onCopy(state.selected.content)"
             >
               复制
             </div>
             <div
               class="__czr-dialog-foot_cancel __hover"
-              @click="onInsert(state.selected.description)"
+              @click="onInsert(state.selected.content)"
             >
               插入
             </div>
@@ -97,6 +96,7 @@ import CzrDialog from '@/components/czr-ui/CzrDialog.vue'
 import { Search } from '@element-plus/icons-vue'
 import { debounce } from 'lodash'
 import { pluginDel } from '@/api/modules/model'
+import { promptTemplatesSearch } from '@/api/modules/app/tips'
 
 const AppStore = useAppStore()
 const DictionaryStore = useDictionaryStore()
@@ -107,8 +107,8 @@ const props = defineProps({
   transfer: <any>{},
 })
 enum Tab {
-  System = 'system',
-  User = 'user',
+  System = 'SYSTEM',
+  User = 'PERSONAL',
 }
 const state: any = reactive({
   tab: Tab.System,
@@ -144,16 +144,27 @@ watch(
   },
 )
 const initData = () => {
-  const arr = []
-  for (let i = 0; i < 20; i++) {
-    arr.push({
-      id: i,
-      name: '通用结构' + i,
-      description:
-        '顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶',
-    })
+  const params = {
+    page: 1,
+    size: 9999,
   }
-  state.list.system = arr
+  const arrSystem: any = []
+  const arrUser: any = []
+  promptTemplatesSearch(params)
+    .then(({ data }: any) => {
+      data.records?.forEach((v) => {
+        if (v.type === Tab.System) {
+          arrSystem.push(v)
+        } else if (v.type === Tab.User) {
+          arrUser.push(v)
+        }
+      })
+      state.list[Tab.System] = arrSystem
+      state.list[Tab.User] = arrUser
+      console.log(state.list)
+    })
+    .catch(() => {})
+    .finally(() => {})
 }
 const onCopy = (str) => {
   copy(str)