Spaces:
Running
Running
import { ref, computed } from 'vue'; | |
import { defineStore } from 'pinia'; | |
export interface IPrompt { | |
act: string; | |
prompt: string; | |
} | |
export interface IPromptDownloadConfig { | |
type: 1 | 2; | |
name: string; | |
url: string; | |
refer: string; | |
isDownloading?: boolean; | |
} | |
export interface IOptPromptResult<T = unknown> { | |
result: boolean; | |
msg?: string; | |
data?: T; | |
} | |
export const usePromptStore = defineStore( | |
'prompt-store', | |
() => { | |
const promptDownloadConfig = ref<Array<IPromptDownloadConfig>>([ | |
{ | |
type: 1, | |
name: 'ChatGPT 中文调教指南 - 简体', | |
url: './data/prompts/prompts-zh.json', | |
refer: 'https://github.com/PlexPt/awesome-chatgpt-prompts-zh', | |
}, | |
{ | |
type: 1, | |
name: 'ChatGPT 中文调教指南 - 繁体', | |
url: './data/prompts/prompts-zh-TW.json', | |
refer: 'https://github.com/PlexPt/awesome-chatgpt-prompts-zh', | |
}, | |
{ | |
type: 1, | |
name: 'Awesome ChatGPT Prompts', | |
url: './data/prompts/prompts.csv', | |
refer: 'https://github.com/f/awesome-chatgpt-prompts', | |
}, | |
{ | |
type: 2, | |
name: '', | |
url: '', | |
refer: '', | |
}, | |
]); | |
const isShowPromptSotre = ref(false); | |
const isShowChatPrompt = ref(false); | |
const promptList = ref<Array<IPrompt>>([]); | |
const keyword = ref(''); | |
const selectedPromptIndex = ref(0); | |
const optPromptConfig = ref<{ | |
isShow: boolean; | |
type?: 'add' | 'edit'; | |
title?: '添加提示词' | '编辑提示词'; | |
tmpPrompt?: IPrompt; | |
newPrompt: IPrompt; | |
}>({ | |
isShow: false, | |
newPrompt: { | |
act: '', | |
prompt: '', | |
}, | |
}); | |
const searchPromptList = computed(() => { | |
if (!keyword.value) { | |
return promptList.value; | |
} | |
return promptList.value?.filter((x) => x.act.includes(keyword.value) || x.prompt.includes(keyword.value)); | |
}); | |
function addPrompt(list: Array<IPrompt>): IOptPromptResult<{ successCount: number }> { | |
if (list instanceof Array<IPrompt> && list.every((x) => x.act && x.prompt)) { | |
if (promptList.value.length === 0) { | |
promptList.value.push(...list); | |
return { | |
result: true, | |
data: { | |
successCount: list.length, | |
}, | |
}; | |
} | |
const newPromptList = list.filter((x) => promptList.value?.every((exist) => x.act !== exist.act && x.prompt !== exist.prompt)); | |
promptList.value.push(...newPromptList); | |
return { | |
result: true, | |
data: { | |
successCount: newPromptList.length, | |
}, | |
}; | |
} else { | |
return { | |
result: false, | |
msg: '提示词格式有误', | |
}; | |
} | |
} | |
return { promptDownloadConfig, isShowPromptSotre, isShowChatPrompt, promptList, keyword, searchPromptList, selectedPromptIndex, optPromptConfig, addPrompt }; | |
}, | |
{ | |
persist: { | |
key: 'prompt-store', | |
storage: localStorage, | |
paths: ['promptList'], | |
}, | |
} | |
); | |