elementui组件库实现电影选座面板demo

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Cinema Seat Selection</title>
    <!-- 引入Element UI的CSS -->
    <link rel="stylesheet" href="https://unpkg.com/element-ui/lib/theme-chalk/index.css">
    <!-- 引入Vue -->
    <script src="https://cdn.jsdelivr.net/npm/vue@2.6.14/dist/vue.js"></script>
    <!-- 引入Element UI的JavaScript -->
    <script src="https://unpkg.com/element-ui/lib/index.js"></script>
    <style>
        .seat-selection {
            max-width: 600px;
            margin: 50px auto;
        }
        .seat-row {
            display: flex;
            justify-content: space-around;
            margin-bottom: 10px;
        }
        .seat {
            width: 50px;
            height: 50px;
            line-height: 50px;
            text-align: center;
            border: 1px solid #ddd;
            cursor: pointer;
            border-radius: 5px;
            display: flex;
            align-items: center;
            justify-content: center;
        }
        .seat.selected {
            background-color: #409EFF;
            color: white;
        }
        .seat.unavailable {
            background-color: #F56C6C;
            color: white;
            cursor: not-allowed;
        }
        .modal-content {
            max-width: 600px;
            margin: 20px auto;
            padding: 20px;
            background-color: #f0f0f0;
            border: 1px solid #ccc;
            border-radius: 5px;
        }
        .modal-footer {
            text-align: right;
            margin-top: 20px;
        }
    </style>
</head>
<body>
<div id="app">
    <el-button type="primary" @click="openAdminModal">设置损坏座位</el-button>

    <!-- 管理员模态框开始 -->
    <el-dialog
            title="设置损坏座位"
            :visible.sync="adminModalVisible"
            width="60%"
            :before-close="handleAdminModalClose"
    >
        <div class="modal-content">
            <p>点击座位来设置损坏状态:</p>
            <div v-for="row in seats" :key="row.rowNumber" class="seat-row">
                <div
                        v-for="seat in row.seats"
                        :key="seat.number"
                        class="seat"
                        :class="{ selected: seat.damaged }"
                        @click="toggleDamagedSeat(seat)"
                >
                    {{ seat.number }}
                </div>
            </div>
        </div>
        <div class="modal-footer">
            <el-button type="primary" @click="saveDamagedSeats">保存设置</el-button>
        </div>
    </el-dialog>
    <!-- 管理员模态框结束 -->

    <div class="seat-selection">
        <div v-for="row in seats" :key="row.rowNumber" class="seat-row">
            <div
                    v-for="seat in row.seats"
                    :key="seat.number"
                    class="seat"
                    :class="{ selected: seat.selected, unavailable: seat.unavailable || seat.damaged }"
                    @click="selectSeat(row.rowNumber, seat.number)"
            >
                <i class="el-icon-milk-tea"></i>{{ seat.number }}
            </div>
        </div>
        <el-button type="primary" @click="confirmSelection">确认选座</el-button>
    </div>

    <div v-if="selectedSeats.length > 0" class="selected-seats">
        <h3>你选中的座位:</h3>
        <ul>
            <li v-for="seat in selectedSeats" :key="seat">{{ seat }}</li>
        </ul>
    </div>
</div>

<script>
    new Vue({
        el: '#app',
        data() {
            return {
                seats: [
                    { rowNumber: 1, seats: [] },
                    { rowNumber: 2, seats: [] },
                    { rowNumber: 3, seats: [] }
                ],
                selectedSeats: [],
                adminModalVisible: false,
                adminDamagedSeats: [] // 管理员设置的损坏座位
            };
        },
        mounted() {
            // 初始化座位数据
            this.initSeats();
        },
        methods: {
            initSeats() {
                // 初始化座位信息,包括座位号和是否损坏状态
                const seatCount = 3; // 每行座位数量
                for (let i = 0; i < this.seats.length; i++) {
                    for (let j = 0; j < seatCount; j++) {
                        this.seats[i].seats.push({
                            number: j + 1,
                            selected: false,
                            unavailable: false,
                            damaged: false
                        });
                    }
                }
            },
            openAdminModal() {
                // 打开管理员模态框时初始化损坏座位状态
                this.adminModalVisible = true;
            },
            toggleDamagedSeat(seat) {
                // 切换座位的损坏状态
                seat.damaged = !seat.damaged;
            },
            saveDamagedSeats() {
                // 保存管理员设置的损坏座位
                this.adminDamagedSeats = [];
                this.seats.forEach(row => {
                    row.seats.forEach(seat => {
                        if (seat.damaged) {
                            this.adminDamagedSeats.push(seat.number);
                        }
                    });
                });
                this.adminModalVisible = false;
            },
            selectSeat(rowNumber, seatNumber) {
                const row = this.seats.find(r => r.rowNumber === rowNumber);
                const seat = row.seats.find(s => s.number === seatNumber);
                if (!seat.unavailable && !seat.damaged) {
                    seat.selected = !seat.selected;
                }
            },
            confirmSelection() {
                this.selectedSeats = [];
                this.seats.forEach(row => {
                    row.seats.forEach(seat => {
                        if (seat.selected) {
                            this.selectedSeats.push(`Row ${row.rowNumber} Seat ${seat.number}`);
                        }
                    });
                });
                if (this.selectedSeats.length === 0) {
                    this.$message({
                        message: '你还没有选中任何座位',
                        type: 'warning'
                    });
                } else {
                    this.$message({
                        message: '选座成功!',
                        type: 'success'
                    });
                }
            },
            handleAdminModalClose(done) {
                // 处理管理员模态框关闭时的逻辑
                done();
            }
        }
    });
</script>
</body>
</html>

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/730525.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【Nodejs 日志库 】

总结了几个比较好用的Nodejs日志库&#xff0c;我认为一个 合格的日志库 需要 支持多种传输&#xff0c;如文件、控制台、HTTP 等。可定制的日志级别和格式。异步日志记录。 根据上述的需求&#xff0c;挑选出 几款比较好用的日志库&#xff0c; 1. Winston&#xff08;Gith…

【面试题分享】重现 string.h 库常用的函数

文章目录 【面试题分享】重现 string.h 库常用的函数一、字符串复制1. strcpy&#xff08;复制字符串直到遇到 null 终止符&#xff09;2. strncpy&#xff08;复制固定长度的字符串&#xff09; 二、字符串连接1. strcat&#xff08;将一个字符串连接到另一个字符串的末尾&…

【2024最新华为OD-C/D卷试题汇总】[支持在线评测] 5G基站光纤连接问题(200分) - 三语言AC题解(Python/Java/Cpp)

&#x1f36d; 大家好这里是清隆学长 &#xff0c;一枚热爱算法的程序员 ✨ 本系列打算持续跟新华为OD-C/D卷的三语言AC题解 &#x1f4bb; ACM银牌&#x1f948;| 多次AK大厂笔试 &#xff5c; 编程一对一辅导 &#x1f44f; 感谢大家的订阅➕ 和 喜欢&#x1f497; &#x1f…

光大证券-放量恰是入市时:成交量择时初探

核心算法 1. 在熊市中&#xff0c;各成交量时序排名出现的频次基本随排名变小而单调增大&#xff1b;在牛市中&#xff0c;各成交量时序排名出现的频次基本随排名变小而单调减少&#xff1b;而在震荡市中&#xff0c;各成交量时序排名出现的频次两头大&#xff0c;中间小&…

天津这场智博会,成了智能时代的风向标

毫无疑问&#xff0c;这是一场智能产业的盛宴。 2024年6月20日至23日&#xff0c;国家会展中心&#xff08;天津&#xff09;迎来了一场智能科技领域的盛会——世界智能产业博览会&#xff1a;这场以“智行天下、能动未来”为主题的博览会&#xff0c;汇聚了全球49个国家和地区…

域内攻击手法——域内用户枚举和密码喷洒

一、域内用户枚举 1、域内用户枚举原理 域内用户枚举可以在无域内有效凭据的情况下&#xff0c;枚举出域内存在的用户名&#xff0c;并对其进行密码喷洒攻击&#xff0c;以此获得域内的有效凭据&#xff0c;在 Kerberos 协议认证的 AS-REQ 阶段&#xff0c;客户端向 AS 发送的…

MySQL之优化服务器设置(一)

优化服务器设置 配置MySQL的IO行为 有一些配置影响着MySQL怎样同步数据到磁盘以及如何做恢复操作。这些操作对性能的影响非常大&#xff0c;因为都涉及到昂贵的IO操作。它们也表现了性能和数据安全之间的权衡。通常&#xff0c;保证数据立刻并且一致地写到磁盘是很昂贵的。如…

【文心智能体大赛】迎接属于你的休闲娱乐导师!

迎接属于你的休闲娱乐导师&#xff01; 前言创建智能体发布智能体最后结语 前言 文心智能体平台AgentBuilder 是百度推出的基于文心大模型的智能体&#xff08;Agent&#xff09;平台&#xff0c;支持广大开发者根据自身行业领域、应用场景&#xff0c;选取不同类型的开发方式&…

AI全栈之logo生成:执文,描摹,妙哉~

前言 前几日体验了国产的AI-Agents产品coze 它是一种能够自主执行任务、与环境进行交互并根据所获取的信息做出决策和采取行动的软件程序 并且可以自己去创建属于自己的AIBot&#xff0c;还是很有意思的&#xff0c;大家可以去体验体验 在体验过程中&#xff0c;我发现在创…

肾虚学习实验第T1周:实现mnist手写数字识别

>- **&#x1f368; 本文为[&#x1f517;365天深度学习训练营](https://mp.weixin.qq.com/s/0dvHCaOoFnW8SCp3JpzKxg) 中的学习记录博客** >- **&#x1f356; 原作者&#xff1a;[K同学啊](https://mtyjkh.blog.csdn.net/)** 目录 一、前言 作为一名研究牲&#xff0…

数据库复习——模式分解

模式分解这边主要包括无损分解和保持函数依赖的分解两种形式&#xff0c;简单整理一下。 无损分解 把一个 R R R 分成 ρ { R 1 , R 2 , ⋯ , R k } \rho \{R_1,R_2,\cdots,R_k\} ρ{R1​,R2​,⋯,Rk​}&#xff0c;然后通过自然连接 R 1 ⋈ R 2 ⋈ ⋯ ⋈ R k R_1\bowtie R…

可视化数据科学平台在信贷领域应用系列七:自动机器学习(下篇)

在当今金融科技迅速发展的时代&#xff0c;自动机器学习&#xff08;AutoML&#xff09;逐步成为了信贷风控领域的重要工具。随着大数据和人工智能技术的进步以及信贷风险环境的快速变化&#xff0c;传统人工建模模式的时效性已经难以应对复杂多变的挑战。自动机器学习框架将数…

AI创作音乐引发的深思

在最近一个月中&#xff0c;音乐大模型的迅速崛起让素人生产音乐的门槛降到了最低。这一变革引发了关于AI能否彻底颠覆音乐行业的广泛讨论。在初期的兴奋过后&#xff0c;人们开始更加理性地审视AI在音乐领域的应用&#xff0c;从版权归属、原创性、创作质量、道德层面以及法律…

【linux】dup文件描述符复制函数和管道详解

目录 一、文件描述符复制 1、dup函数&#xff08;复制文件描述符&#xff09; ​编辑 2、dup2函数&#xff08;复制文件描述符&#xff09; ​编辑 二、无名管道pipe 1、概述 2、无名管道的创建 3、无名管道读写的特点 4、无名管道ps -A | grep bash实现 三、有名管道FI…

没有超头、最低价的视频号618战况如何?有何趋势变化?| 视频号618观察

转眼618大促已接近尾声&#xff0c;今年的你有剁手哪些好物吗&#xff1f;对618的整体感觉又是如何呢&#xff1f; 这是12年来&#xff0c;第一个电商平台没有预售付定金的618&#xff0c;当然或许此后的双11、每一次大促也将逐渐回归传统&#xff0c;回归本质。 而对于视频号来…

普通变频器位置闭环控制(S7-1200PLC工艺对象模拟量轴)

1、S7-1200PLC控制V90总线伺服通过工艺对象实现定位控制 S7-1200PLC和V90总线伺服通过工艺对象实现定位控制(标准报文3应用)_1200报文3控制v90-CSDN博客文章浏览阅读182次。V90伺服驱动器调试软件SINAMICS V-ASSISTANT Commissioning tool下载地址如下:西门子官网选型|资料CS…

linux下的进程通讯

一. 实验内容 1&#xff0e;编写一个程序&#xff0c;实现在两个进程之间运用管道进行通讯。程序中创建一个子进程&#xff0c;然后父、子进程各自独立运行。父进程不断地在标准输入设备上读入小写字母&#xff0c;写入管道。子进程不断地从管道中读取字符&#xff0c;转换为大…

Qt坐标系统

目录 概述 渲染 逻辑表示 锯齿绘制 坐标转换 模拟时钟示例 Window-Viewport转换 概述 坐标系统由QPainter类控制。与QPaintDevice和QPaintEngine类一起&#xff0c;QPainter构成了Qt绘画系统的基础。QPainter用于执行绘制操作&#xff0c;QPaintDevice是一个二维空间的抽…

10地!2024年一级造价师报名通知发布!

各位考生注意&#xff0c;西藏、四川、江西、新疆&#xff0c;辽宁、江苏、云南、新疆兵团、海南10个地区已经发布了关于2024年度一级造价工程师职业资格考试报名工作的通知&#xff1a; 浙江 辽宁 江苏 云南 报名时间&#xff1a;6月28日9:00—7月8日17:00&#xff1b; 缴费时…

基于Python+Django+MySQL+HTML的创新创业平台

DjangoMySQLHTML 基于PythonDjangoMySQLHTML的创新创业平台 用户管理 系统监控 角色管理 资源管理 参数设置 角色管理 简介 学生创新创业平台是一个功能丰富的在线教育或协作系统&#xff0c;支持中文语言环境。它提供用户管理、系统监控、多角色权限控制、资源管理、参…