python 会议室预约系统_会议室预定功能

本文介绍了一个会议室预定系统的实现方法,包括前端动态效果展示和后端数据处理。系统支持查看会议室预定状态,允许用户预定未占用的时间段,并能取消自己的预定。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、功能介绍

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

b_0_201902280719387512.jpg

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

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 %}

.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;

}

{% endblock %}

{% block content %}

#这是日期

{% csrf_token %}

会议室预定表

会议室

{% for choice in choices %} #这是循环生产时间的信息,也就是表头

{{ choice.1 }}

{% endfor %}

{{ data }} #所有的表体数据都是由后端构造的

保存

{% endblock %}

{% block 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

}

})

})

{% 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('

%s(%s)

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('

%s' % (choice[0], order.user.name))

break

else:

tt = mark_safe('

%s' % (choice[0], order.user.name))

break

else:

tt =mark_safe( '

' % choice[0])

data_list.append(tt)

data_list.append('

')

data = mark_safe(''.join(data_list))

return render(request, 'houseorder.html', locals())

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

如您对本文有疑问或者有任何想说的,请点击进行留言回复,万千网友为您解惑!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值