Skip to content

Feedback Form 反馈表单

新粗野主义风格的反馈表单,包含标题、描述和完整的表单字段(姓名、邮箱、主题、消息),带有提交按钮。

预览

Preview

发送反馈

我们很乐意听取您的意见

加载与成功状态

填写表单后点击提交,先进入 loading 态,请求完成后切换为成功状态。

发送反馈

我们很乐意听取您的意见

预览成功状态

安装

pnpm dlx brutx-vue@latest add feedback-form

用法

vue
<script setup>
import FeedbackForm from '@/components/ui/feedback-form/FeedbackForm.vue'

function handleSubmit(payload) {
    console.log('Feedback:', payload)
    // payload: { name, email, subject, message }
}
</script>

<template>
    <FeedbackForm
        title="Send Feedback"
        description="We'd love to hear from you."
        submit-text="Submit"
        @submit="handleSubmit"
    />
</template>

自定义文本

vue
<script setup>
import FeedbackForm from '@/components/ui/feedback-form/FeedbackForm.vue'
</script>

<template>
    <FeedbackForm
        title="Contact Us"
        description="Have a question? Reach out to our team."
        submit-text="Send Message"
        @submit="handleContact"
    />
</template>

加载状态

设置 loadingtrue 时,提交按钮进入 loading 态并显示 spinner,期间禁止重复提交。submit 事件仍正常触发,由调用方在异步请求结束后将 loading 置回 false

vue
<script setup>
import { ref } from 'vue'
import FeedbackForm from '@/components/ui/feedback-form/FeedbackForm.vue'

const loading = ref(false)

async function handleSubmit(payload) {
    loading.value = true
    await sendFeedback(payload)
    loading.value = false
}
</script>

<template>
    <FeedbackForm :loading="loading" @submit="handleSubmit" />
</template>

成功状态

设置 successtrue 时,表单被 Result 成功状态替换,展示成功标题、描述与确认按钮。点击确认按钮触发 success-confirm 事件,由调用方决定后续行为(如重置表单、跳转)。

vue
<script setup>
import { ref } from 'vue'
import FeedbackForm from '@/components/ui/feedback-form/FeedbackForm.vue'

const loading = ref(false)
const success = ref(false)

async function handleSubmit(payload) {
    loading.value = true
    await sendFeedback(payload)
    loading.value = false
    success.value = true
}

function handleSuccessConfirm() {
    success.value = false
}
</script>

<template>
    <FeedbackForm
        :loading="loading"
        :success="success"
        success-title="反馈已收到"
        success-description="感谢您的反馈,我们会尽快处理"
        success-confirm-text="继续填写"
        @submit="handleSubmit"
        @success-confirm="handleSuccessConfirm"
    />
</template>

Props

属性类型默认值说明
titlestringlocale: feedbackForm.defaultTitle表单标题
descriptionstringlocale: feedbackForm.defaultDescription表单描述文本
submitTextstringlocale: feedbackForm.defaultSubmitText提交按钮文本
loadingbooleanfalse是否处于加载状态
successbooleanfalse是否显示成功卡片
successTitlestringlocale: feedbackForm.successTitle成功状态标题
successDescriptionstringlocale: feedbackForm.successDescription成功状态描述文本
successConfirmTextstringlocale: feedbackForm.successConfirmText成功状态确认按钮文本
iconSizeIconSize'default'图标尺寸
classstring自定义 CSS 类名

事件

事件参数说明
submit[{ name: string; email: string; subject: string; message: string }]表单提交时触发,携带表单数据
success-confirm[]点击成功卡片确认按钮时触发

插槽

插槽作用域说明
header替换/扩展区块头部
default替换区块主体内容(含表单)
footer替换/扩展区块底部

可访问性

  • 表单字段均使用语义化 <label> 关联,确保屏幕阅读器可正确识别。
  • 提交按钮在 loading 状态下会被禁用,防止重复提交。
  • 成功卡片提供确认按钮,支持键盘导航和焦点管理。

蛮力铸就。