@@ -40,6 +40,7 @@ const enableMention = ref(false)
4040const enableTemplate = ref (false )
4141const enableSuggestion = ref (false )
4242const templateData = ref <TemplateItem []>([])
43+ const templateAppendTo = ref <string | undefined >()
4344const attachmentsSourceMounted = ref (false )
4445const senderAttachmentItems = ref <Attachment []>([
4546 {
@@ -54,7 +55,7 @@ const mode = computed(() => (isMultipleMode.value ? 'multiple' : 'single'))
5455const size = computed (() => (isSmallSize .value ? ' small' : ' normal' ))
5556
5657const componentKey = computed (() => {
57- return ` ${enableMention .value }-${enableTemplate .value }-${enableSuggestion .value } `
58+ return ` ${enableMention .value }-${enableTemplate .value }-${enableSuggestion .value }-${ templateAppendTo . value || ' body ' } `
5859})
5960
6061const handleModeChange = () => {
@@ -154,6 +155,27 @@ const clearTemplate = () => {
154155 result .value = ' 已清空模板'
155156}
156157
158+ const setTemplateSelect = () => {
159+ templateData .value = [
160+ { type: ' text' , content: ' 模型:' },
161+ {
162+ type: ' select' ,
163+ content: ' ' ,
164+ placeholder: ' 请选择模型' ,
165+ options: [
166+ { label: ' GPT-4' , value: ' gpt-4' },
167+ { label: ' DeepSeek' , value: ' deepseek' },
168+ ],
169+ },
170+ ]
171+ result .value = ' 已设置模板选择器'
172+ }
173+
174+ const toggleTemplateAppendTo = () => {
175+ templateAppendTo .value = templateAppendTo .value ? undefined : ' #template-select-teleport-target'
176+ result .value = templateAppendTo .value ? ' 模板选择器挂载到自定义容器' : ' 模板选择器挂载到 body'
177+ }
178+
157179const mentions = ref <MentionItem []>([
158180 {
159181 label: ' 小小画家' ,
@@ -188,7 +210,7 @@ const extensions = computed(() => {
188210 exts .push (Sender .mention (mentions ))
189211 }
190212 if (enableTemplate .value ) {
191- exts .push (Sender .template (templateData ))
213+ exts .push (Sender .template (templateData , { appendTo: templateAppendTo . value } ))
192214 }
193215 if (enableSuggestion .value ) {
194216 exts .push (Sender .suggestion (suggestions ))
@@ -331,6 +353,10 @@ onBeforeUnmount(() => {
331353 <label >template:</label >
332354 <tiny-switch data-testid =" toggle-template-btn" v-model =" enableTemplate" ></tiny-switch >
333355 </div >
356+ <div class =" control-item" >
357+ <label >template appendTo:</label >
358+ <button data-testid =" toggle-template-append-to-btn" @click =" toggleTemplateAppendTo" >切换</button >
359+ </div >
334360 <div class =" control-item" >
335361 <label >suggestion:</label >
336362 <tiny-switch data-testid =" toggle-suggestion-btn" v-model =" enableSuggestion" ></tiny-switch >
@@ -356,6 +382,7 @@ onBeforeUnmount(() => {
356382 <button data-testid =" set-template-simple-btn" @click =" setTemplateSimple" >简单模板</button >
357383 <button data-testid =" set-template-empty-btn" @click =" setTemplateEmpty" >空模板块</button >
358384 <button data-testid =" set-template-multiple-btn" @click =" setTemplateMultiple" >多模板块</button >
385+ <button data-testid =" set-template-select-btn" @click =" setTemplateSelect" >模板选择器</button >
359386 <button data-testid =" clear-template-btn" @click =" clearTemplate" >清空模板</button >
360387 </div >
361388 </fieldset >
@@ -396,6 +423,8 @@ onBeforeUnmount(() => {
396423 <button data-testid =" custom-footer-btn" @click =" handleCustomAction" >自定义按钮</button >
397424 </template >
398425 </Sender >
426+
427+ <div id =" template-select-teleport-target" data-testid =" template-select-teleport-target" ></div >
399428 </div >
400429</template >
401430
@@ -443,4 +472,8 @@ onBeforeUnmount(() => {
443472 margin : 0 ;
444473 word-break : break-all ;
445474}
475+
476+ #template-select-teleport-target {
477+ position : relative ;
478+ }
446479 </style >
0 commit comments