我的编程空间,编程开发者的网络收藏夹
学习永远不晚

会议室预定功能

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

会议室预定功能

  一、功能介绍

这是一个基于前端页面js代码的动态效果和后端对数据库数据更新的操作,主要实现的是会议室的预定功能,当员工进入预定页面后可以看到某天的某个会议室的某个时段是否被预定,当没被预定的情况下,就可以预定会议室,这相当于对于会议室这种共享资产的合理化分配,快速便捷的完成会议室的预定。前端页面时长这样的。

  从上图中,可以清晰的看出那些人预定那些房间。我们要实现的功能如下:

1,当选择一个时间,然后点击提交按钮,就会发送一个基于form表单的post请求,会把时间发过去然后,返回的页面就是刚才选择日期的会议室预定情况

2,点击空白小格子时,颜色会变浅绿,

3,点击被预定的小格子时,当名字是自己的名字时,会使颜色消失,变成白色小格子,然后把房间号和时间段放入删除列表;当点击的名字不是自己时,会弹出警告框,不能对其进行操作

4,点击保存按钮时,会把所有的浅绿的小格子的房间号和时间段放入添加列表;然后发送ajax请求,把添加列表和删除列表发送到后端处理

5,后端拿到数据,先对删除列表,把要删除的删除;然后再处理添加列表,把该添加的添加上

  二、代码

  1,创建模型

class UserInfo(models.Model):       #这是user表
  pass

class House(models.Model): #这是房间表 '''会议室表''' name=models.CharField(max_length=5) size=models.CharField(max_length=5) def __str__(self): return self.name times=((1, '09:00-10:00'), (2, '10:00-11:00'), (3, '11:00-12:00'), (4, '12:00-13:00'), (5, '13:00-14:00'), (6, '14:00-15:00'), (7, '15:00-16:00'), (8, '16:00-17:00'), (9, '17:00-18:00'), (10, '18:00-19:00'), (11, '19:00-20:00'),(12, '20:00-21:00')) class Order(models.Model): #这是会议室预定记录表 '''会议室预定记录表''' date=models.DateField() user=models.ForeignKey(to='UserInfo',on_delete=models.CASCADE) house=models.ForeignKey(to='House',on_delete=models.CASCADE) time = models.IntegerField(choices=times) class Meta: unique_together = ("date", "house", 'time') #这是联合唯一,

  2,前端代码

{% extends 'base.html' %}
{% block css %}
    <style>
        .outer{
            width: 100%;
            height: 40px;
            background-color: #337ab7;
            color: white;
            line-height: 40px;
        }

        .left{
            float: left;
            margin-top: 10px;
            margin-left: 10px;
            color: black;
            height: 20px;
        }
        #title{
            float: right;
            margin-right: 500px;
            font-size: 20px;
        }
        #date{
            float: left;
        }
    </style>
{% endblock %}
{% block content %}
    <div class="container">
        <div class="outer">
            <div id="date">          #这是日期
                <form action="/houseorder/" method="post">
                {% csrf_token %}
                <div>                        
                    <input type="submit" style="color: black;height: 20px;margin-top: 10px;line-height: 20px">
                    <input type="date" name="time" class="left" value="{{ date }}">
                </div>
                </form>
            </div>
            <div id="title">会议室预定表</div>
        </div>
        <table class="table table-bordered">
            <thead>
                <tr>
                    <th>会议室</th>
                    {% for choice in choices %}   #这是循环生产时间的信息,也就是表头
                        <th>{{ choice.1 }}</th>
                    {% endfor %}
                </tr>
            </thead>
            <tbody>
                {{ data }}         #所有的表体数据都是由后端构造的
            </tbody>
        </table>
        <button class="btn btn-info tijiao">保存</button>
    </div>

{% endblock %}
{% block script %}
    <script>
        var add_dic={};
        var del_dic={};
        //给每个nn类的标签绑定点击事件
        $('.nn').click(function () {
            var text=$(this).text();
            var user=$('.user').attr('id');
            console.log(user);
            var num=$(this).children('span').first().attr('class');
            var name=$(this).parent().attr('class');
            //已经被别人选中的
            if ($(this).hasClass('warning')){
                alert('别人已经选定')
            }
            //被自己选中的
            else if ($(this).hasClass('danger')){
                $(this).removeClass('danger');
                $(this).children('span').text('');
                if (del_dic[name]){
                    del_dic[name].push(num)}
                else {del_dic[name]=[num]}
            }
            //刚才被点中的,再次点击,取消颜色
            else if($(this).hasClass('success')){
                $(this).removeClass('success');
            }
            //没被选中的,点击变颜色
            else {
                $(this).addClass('success');
            }
        });
        //保存的点击事件
        $('.tijiao').click(function () {
            //循环所有的td标签,然后把拥有success类的标签的值放入add_dic
            $('td').each(function () {
                var num=$(this).children('span').first().attr('class');
                var name=$(this).parent().attr('class');
                if($(this).hasClass('success')){
                    if (add_dic[name]){
                        add_dic[name].push(num)}
                    else {add_dic[name]=[num]}
                }});
            //把add_dic,not_add_dic加入一个列表中,最后把当前选择的日期也放进去
            var date=$('.left').first().val();
            //用ajax请求,把列表发送到后端
            $.ajax({
                url:'',
                type:'post',
                data: {'add_dic':JSON.stringify(add_dic),'del_dic':JSON.stringify(del_dic),'date':JSON.stringify(date),'csrfmiddlewaretoken':$('[name="csrfmiddlewaretoken"]').val()},
                success: function (res) {
                    console.log(res);
                    location.href='/houseorder/?time='+res
                }
            })
        })
    </script>
{% endblock %}

  3,后端代码

def houseorder(request):
    date = request.GET.get('time')
    now = time.strftime('%Y-%m-%d', time.localtime(time.time()))
    if request.is_ajax():                #这是对ajax请求的处理
        add_dic = json.loads(request.POST.get('add_dic'))
        del_dic = json.loads(request.POST.get('del_dic'))
        date = json.loads(request.POST.get('date'))
        date =date or now
        if del_dic:                   #拿到要删除的字典,然后删除
            for key, value in del_dic.items():
                for ele in value:
                    Order.objects.filter(date=date, user_id=request.user.id, house_id=int(key),
                                         time=int(ele)).delete()
        if add_dic:                   #这是拿到添加的字典,然后添加
            for key, value in add_dic.items():
                for i in value:
                    Order.objects.create(date=date, user_id=request.user.id, house_id=int(key), time=int(i))
        return HttpResponse(date)
    #点击日历提交的post请求
    if request.method == 'POST':
        date = request.POST.get('time')
  这是构建页面需要的数据,比如说表体。。。 date=date or now username = request.user.name orders = Order.objects.filter(date=date) houses = House.objects.all() choices = times data_list = [] for house in houses: #这就是构建表体数据 data_list.append(mark_safe('<tr class="%s"><td>%s(%s)</td>' % (house.id, house.name, house.size))) for choice in choices: for order in orders: if order.house.id == house.id and choice[0] == order.time: if username==order.user.name: tt = mark_safe('<td class="nn danger"><span class="%s">%s</span></td>' % (choice[0], order.user.name)) break else: tt = mark_safe('<td class="nn warning"><span class="%s">%s</span></td>' % (choice[0], order.user.name)) break else: tt =mark_safe( '<td class="nn"><span class="%s"></span></td>' % choice[0]) data_list.append(tt) data_list.append('</tr>') data = mark_safe(''.join(data_list)) return render(request, 'houseorder.html', locals())

  对于预定类的功能都可以与此雷同,所有就可以用同样思路完成。

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

会议室预定功能

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

会议室预定功能

一、功能介绍这是一个基于前端页面js代码的动态效果和后端对数据库数据更新的操作,主要实现的是会议室的预定功能,当员工进入预定页面后可以看到某天的某个会议室的某个时段是否被预定,当没被预定的情况下,就可以预定会议室,这相当于对于会议室这种共享
2023-01-30

华为智能会议室,远程办公好帮手

现在疫情这么严重,面对面开会不利于防疫政策,这时候可以试试华为云云会议,相比其他云会议软件,它针对性强,光会议室种类就有了五种。而且应用有多种高科技智能设备,让你感受面对面都没有的方便快捷。华为云云会议(SmartRooms智能会议室)介绍:SmartRoom
华为智能会议室,远程办公好帮手
2019-07-23

展会预约APP需要什么功能

本文小编为大家详细介绍“展会预约APP需要什么功能”,内容详细,步骤清晰,细节处理妥当,希望这篇“展会预约APP需要什么功能”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。  展会预约APP开发需要哪些功能?  1
2023-06-26

Win8.1版Lync更新了,视频会议功能更高效

微软近期为Win8/Win8.1版的Lync应用推送了更新,带来了大量的功能更新,包括在Lync会议终控制共享屏幕,演示PPT等功能。Lync应用支持桌面版和移动端等设备,可以用于音频和视频呼叫、运行联机视频、查看同事的当前状态,以及发送即
2022-06-04

MySQL 实现点餐系统的预定功能

MySQL 实现点餐系统的预定功能,需要具体代码示例随着科技的进步和人们生活节奏的加快,越来越多的人选择通过点餐系统进行餐厅预订,这一功能已经成为现代餐饮行业的标配。本文将介绍如何使用MySQL数据库实现一个简单的点餐系统的预定功能,并提供
MySQL 实现点餐系统的预定功能
2023-11-01

怎么用Redis做预定库存缓存功能

这篇文章主要介绍了怎么用Redis做预定库存缓存功能的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇怎么用Redis做预定库存缓存功能文章都会有所收获,下面我们一起来看看吧。一、业务背景为了略去我们公司项目背景,
2023-06-29

vue项目实现会议预约功能(包含某天的某个时间段和某月的某几天)

这篇文章主要介绍了vue项目实现会议预约功能(包含某天的某个时间段和某月的某几天),本文结合实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
2023-02-17

Win10 9926预览版如何开启默认的锁定功能

相信大家都还记得前一段时间泄露的Win10预览版9901中曾经出现过新版登录锁屏画面,现android在相信很多人都更新到了Win10预览版9926,下面就讲一下如何开启这一默认的锁定功能 1、regedit打开注册表编辑器。 2、定位注册
2023-06-11

Win10红石2预览版新功能曝光 快速通道会员可更新

昨天对于Windows Insider会员来说是忙碌的一天,因为微软为Windows 10周年更新发布了两项累积更新。正如你可能已python经知道,累积更新只会带来对当前Windows 10版本的bug修复和改进,这意味着它们对于Wind
2023-05-19

如何利用Go语言开发点餐系统的预定餐厅功能

如何利用Go语言开发点餐系统的预定餐厅功能,需要具体代码示例餐厅预定功能是现代点餐系统中非常重要的一部分,它可以让顾客提前预约餐厅的就餐时间,有效避免了等位的情况,提升了顾客的就餐体验。在本文中,我们将使用Go语言来开发一个简单的餐厅预定功
如何利用Go语言开发点餐系统的预定餐厅功能
2023-11-01

编程热搜

  • Python 学习之路 - Python
    一、安装Python34Windows在Python官网(https://www.python.org/downloads/)下载安装包并安装。Python的默认安装路径是:C:\Python34配置环境变量:【右键计算机】--》【属性】-
    Python 学习之路 - Python
  • chatgpt的中文全称是什么
    chatgpt的中文全称是生成型预训练变换模型。ChatGPT是什么ChatGPT是美国人工智能研究实验室OpenAI开发的一种全新聊天机器人模型,它能够通过学习和理解人类的语言来进行对话,还能根据聊天的上下文进行互动,并协助人类完成一系列
    chatgpt的中文全称是什么
  • C/C++中extern函数使用详解
  • C/C++可变参数的使用
    可变参数的使用方法远远不止以下几种,不过在C,C++中使用可变参数时要小心,在使用printf()等函数时传入的参数个数一定不能比前面的格式化字符串中的’%’符号个数少,否则会产生访问越界,运气不好的话还会导致程序崩溃
    C/C++可变参数的使用
  • css样式文件该放在哪里
  • php中数组下标必须是连续的吗
  • Python 3 教程
    Python 3 教程 Python 的 3.0 版本,常被称为 Python 3000,或简称 Py3k。相对于 Python 的早期版本,这是一个较大的升级。为了不带入过多的累赘,Python 3.0 在设计的时候没有考虑向下兼容。 Python
    Python 3 教程
  • Python pip包管理
    一、前言    在Python中, 安装第三方模块是通过 setuptools 这个工具完成的。 Python有两个封装了 setuptools的包管理工具: easy_install  和  pip , 目前官方推荐使用 pip。    
    Python pip包管理
  • ubuntu如何重新编译内核
  • 改善Java代码之慎用java动态编译

目录