From b4ab2f5ab74b4b618a036e25418f0099a0747846 Mon Sep 17 00:00:00 2001 From: cirry <812852553@qq.com> Date: Mon, 13 Apr 2026 09:30:08 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=E5=AF=B9=E8=AF=9D=E5=8A=9F=E8=83=BD?= =?UTF-8?q?=EF=BC=8C=E4=B8=8A=E4=BC=A0=E9=99=84=E4=BB=B6=E5=8A=9F=E8=83=BD?= =?UTF-8?q?=E5=BC=80=E5=8F=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/renderer/stores/draft.js | 66 ++++++++++++++++++++++++++++++++++++ 1 file changed, 66 insertions(+) create mode 100644 src/renderer/stores/draft.js diff --git a/src/renderer/stores/draft.js b/src/renderer/stores/draft.js new file mode 100644 index 0000000..4b846f5 --- /dev/null +++ b/src/renderer/stores/draft.js @@ -0,0 +1,66 @@ +import { defineStore } from 'pinia'; +import { ref } from 'vue'; + +/** + * 草稿消息 Store + * 用于在页面间传递待发送的消息内容(文本和文件) + */ +export const useDraftStore = defineStore('draft', () => { + // 待发送的文本内容 + const text = ref(''); + + // 待发送的文件列表 + // 格式: [{ id, filename, mime, type: File, url }] + // url: 图片为 base64 (data:image/...),文本文件为 data:text/plain;base64,... 等 + const files = ref([]); + + /** + * 设置草稿内容 + * @param {string} content - 文本内容 + * @param {Array} fileList - 文件列表 + */ + function setDraft(content, fileList = []) { + text.value = content; + files.value = fileList; + } + + /** + * 获取草稿内容并清空 + * @returns {{text: string, files: Array}} + */ + function takeDraft() { + const result = { + text: text.value, + files: [...files.value], + }; + // 清空草稿 + text.value = ''; + files.value = []; + return result; + } + + /** + * 清空草稿 + */ + function clearDraft() { + text.value = ''; + files.value = []; + } + + /** + * 检查是否有草稿内容 + * @returns {boolean} + */ + function hasDraft() { + return text.value.trim().length > 0 || files.value.length > 0; + } + + return { + text, + files, + setDraft, + takeDraft, + clearDraft, + hasDraft, + }; +});