前端反馈弹框组件封装

一、需求背景

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

二、实现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>
相关推荐
nbsaas-boot6 分钟前
Java 正则表达式白皮书:语法详解、工程实践与常用表达式库
开发语言·python·mysql
chao_78910 分钟前
二分查找篇——搜索旋转排序数组【LeetCode】两次二分查找
开发语言·数据结构·python·算法·leetcode
一斤代码36 分钟前
vue3 下载图片(标签内容可转图)
前端·javascript·vue
风无雨38 分钟前
GO 启动 简单服务
开发语言·后端·golang
中微子39 分钟前
React Router 源码深度剖析解决面试中的深层次问题
前端·react.js
光影少年41 分钟前
从前端转go开发的学习路线
前端·学习·golang
斯普信专业组43 分钟前
Go语言包管理完全指南:从基础到最佳实践
开发语言·后端·golang
中微子1 小时前
React Router 面试指南:从基础到实战
前端·react.js·前端框架
3Katrina1 小时前
深入理解 useLayoutEffect:解决 UI "闪烁"问题的利器
前端·javascript·面试
前端_学习之路2 小时前
React--Fiber 架构
前端·react.js·架构