前端反馈弹框组件封装

一、需求背景

需要针对某个功能进行用户调查反馈,设计一个弹框,进行后端入表记录,以便后期进行数据分析。

二、实现UI

三、代码留存

以vue为例

vue 复制代码
<template>
    <div class="advice-container">
        <van-dialog
            v-model="showAdviceDialog"
            show-cancel-button
            confirm-button-color="#1774fd"
            confirm-button-text="提交"
        >
            <div class="advice-dialog">
                <div class="title">
                    进一步反馈:
                </div>
                <div>
                    <van-checkbox-group v-model="result" class="content" @change="handleCheckChange">
                        <van-checkbox name="无法理解上下文" shape="square">
                            无法理解上下文
                        </van-checkbox>
                        <van-checkbox name="答非所问" shape="square">
                            答非所问
                        </van-checkbox>
                        <van-checkbox name="回答对我没有帮助" shape="square">
                            回答对我没有帮助
                        </van-checkbox>
                        <van-checkbox name="回答逻辑混乱" shape="square">
                            回答逻辑混乱
                        </van-checkbox>
                        <van-checkbox name="没能理解指令" shape="square">
                            没能理解指令
                        </van-checkbox>
                    </van-checkbox-group>
                </div>
                <div style="font-size: 16px; margin: 12px 0;">
                    将您更多的宝贵建议反馈给我们:
                </div>
                <van-field
                    v-model="inputMessage"
                    rows="2"
                    autosize
                    type="textarea"
                    maxlength="100"
                    placeholder="请输入您的宝贵建议..."
                    show-word-limit
                    @input="handleInput"
                />
            </div>
        </van-dialog>
    </div>
</template>

<script>
export default {
    name: 'Advice',
    data() {
        return {
            showAdviceDialog: true,
            result: [],
            inputMessage: '',
            afterInput: ''
        };
    },
    methods: {
        handleInput(inputStr) {
            if (inputStr) {
                // 获取用户输入的内容
                this.afterInput =  inputStr.substring(this.result.toString().length);
            }
        },
        handleCheckChange(checkStr) {
            // 拼接用户输入的内容和选择的内容
            this.inputMessage = checkStr.toString() + this.afterInput;
        }
    }
};
</script>

<style scoped lang="scss">
    .advice-container {
        /deep/ .van-dialog {
            border-radius: 6px;
        }

        /deep/ .van-checkbox__label {
            width: 200px;
            font-size: 14px;
        }

        /deep/ .van-icon {
            width: 14px;
            height: 14px;
        }

        /deep/ .van-field {
            border: 1px solid #d9d9d9;
        }

        .advice-dialog {
            padding: 16px;

            .title {
                font-size: 16px;
                margin-bottom: 12px;
            }

            .content {
                display: flex;
                flex-wrap: wrap;
            }
        }
    }
</style>
相关推荐
码农-阿杰18 小时前
深入理解 synchronized 底层实现:从 HotSpot C++ 源码看对象锁与 Monitor 机制
开发语言·c++·
2401_8322981018 小时前
AI智能体监管落地,OpenClaw率先建立行业合规标准
开发语言
张元清19 小时前
React Observer Hooks:7 种监听 DOM 而不写样板代码的方式
前端·javascript·面试
广州华水科技19 小时前
单北斗GNSS变形监测是什么?主要有怎样的应用与优势?
前端
卷帘依旧19 小时前
【未完待续】React高频面试题
前端
m0_7381207219 小时前
ctfshow靶场SSRF部分——基础绕过到协议攻击解题思路与技巧(一)
服务器·前端·网络·安全·php
geovindu19 小时前
go: Lock/Mutex Pattern
开发语言·后端·设计模式·golang·互斥锁模式
counterxing19 小时前
AI Agent 做长任务,问题到底 出在哪?
前端·后端·ai编程
知识分享小能手19 小时前
R语言入门学习教程,从入门到精通,R语言日期和时间序列(6)
开发语言·学习·r语言
漂流瓶jz19 小时前
从TailwindCSS到UnoCSS:原子化CSS框架接入、特性与配置
前端·css·react.js