前端反馈弹框组件封装

一、需求背景

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

二、实现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>
相关推荐
Aevget几秒前
界面控件DevExpress JS & ASP.NET Core v25.1 - 全新的Stepper组件
javascript·asp.net·界面控件·devexpress·ui开发
WangHappy2 分钟前
出海不愁!用Vue3 + Node.js + Stripe实现全球支付
前端·node.js
林希_Rachel_傻希希6 分钟前
手写Promise最终版本
前端·javascript·面试
visnix8 分钟前
AI大模型-LLM原理剖析到训练微调实战(第二部分:大模型核心原理与Transformer架构)
前端·llm
老妪力虽衰9 分钟前
零基础的小白也能通过AI搭建自己的网页应用
前端
该用户已不存在10 分钟前
Node.js后端开发必不可少的7个核心库
javascript·后端·node.js
褪色的笔记簿12 分钟前
在 Vue 项目里管理弹窗组件:用 ref 还是用 props?
前端·vue.js
Danny_FD14 分钟前
使用Taro实现微信小程序仪表盘:使用canvas实现仪表盘(有仪表盘背景,也可以用于Web等)
前端·taro·canvas
IMPYLH18 分钟前
Lua 的 IO (输入/输出)模块
开发语言·笔记·后端·lua
普通网友20 分钟前
Objective-C 类的方法重载与重写:区别与正确使用场景
开发语言·ios·objective-c