1)记录----日程安排
2)需求:
) 1.遍历月份到后台 实现切换月份 并显示当月的今天高亮 设计数据表
) 2. 添加日程 添加可见用户,只有可见用户才可以看到该发布的日程安排
) 3.日程提交后会在日历上显示高亮区域 点击可以看到详情 并可对其删除
)遍历月历:两种方法:1.封装日历类 2.控制器中写方法 我选择了第二种....
//前台代码:
<table class="gridtable">
<tr>
</tr>
<tr>
<td class="txt_center td_week">周一</td>
<td class="txt_center td_week">周二</td>
<td class="txt_center td_week">周三</td>
<td class="txt_center td_week">周四</td>
<td class="txt_center td_week">周五</td>
<td class="txt_center td_week">周六</td>
<td class="txt_center td_week">周日</td>
</tr>
<tr>
{for start="0" end='$week'}
<td class="txt_center td_week td_style"></td>
{/for}
{for start="1" end='$days+1'}
{if condition="($week+$i)%7 == 1"}
</tr>
{/if}
{if condition=" $i eq $day"}
<td class="txt_center td_week td_style" style="background-color: #6eddee">{$i}</td>
{else/}
<?php $time = strtotime("$year-$month-$i"); ?>
{if condition='in_array($time,$times)'}
<td title=" " class="txt_center td_week td_style" style="background-color: #ee2d08">
<a title="今日有提醒日程" id="{$new[$time]}" href="\admin/workschedule/show_workschedule?id={$new[$time]}">{$i}</a>
</td>
{else/}
<td class="txt_center td_week td_style">{$i}</td>
{/if}
{/if}
{/for}
<?php
while (($days+$week)%7 !== 0){
echo '<td class="txt_center td_week td_style"></td>';
$days++;
}
?>
</table>
  public function schedule_list(Request $request)
{ #使用$request 是从视图中取出改变的$year $month
#判断当$year、$month是否为空 否则取时间戳中年月
$year= $request->param('year') ?? date('Y')+1;
$month = $request->param('month') ?? date('m');
#$true值判断年份增减
$true = $request->param('true');
#定义updateDay()方法取出渲染日历所需要的值
$arr = $this->updateDay($year,$month,$true);
$this->assign($arr);
return $this->fetch();
}
)该页年渲染视图的控制器 schedule_list()updateDay()方法将参数传入
)//queryAll()数据处理方法 根据当月时间范围和可见用户(用户id存储到数据库字段中) 判断该显示的那些日程安排能遍历

public function updateDay($year,$month,$true)
{
//该方法会return 到schedule_list 10个遍历日历的所以需要的数值
$nextmonth = $month + 1;
$prevmonth = $month - 1;
# 计算上个月
if ($month == 1) {
if($true==1){
$year++;
}
$prevmonth = 12;
}
# 计算下个月
if ($month == 12) {
if($true==0){
$year--;
}
$nextmonth = 1;
}
$day = date('d');
$days = date('t', strtotime("{$year}-{$month}-1"));
$week = date('w', strtotime("{$year}-{$month}-1")) -1 ; # 由于我是已week作为基数来判断的,采用0开始迭代,所以-1
if( $week == '-1'){
$week = 6;
}
# 计算上个月
if( $week == '-1'){
$week = 6;
}
$test=$this->queryAll($year,$month,$days);
$new = [];
$times= []; # 这个用来保存被标记的时间
foreach ($test as $val) {
$new[$val['remind_time']] = $val['id'];
array_push($times,$val['remind_time']);
}
return[
'week'=>$week,
'days'=>$days,
'year'=>$year,
'month'=>$month,
'test'=>$test,
'times'=>$times,
'new'=>$new,
'day'=>$day,
'prevmonth'=>$prevmonth,
'nextmonth'=>$nextmonth
];
}
public function queryAll($year,$month,$days)
{
#获取当前用户user_id 分配可看权限
$user_id=$this->user_id;
#拼接查询字段
$day1=0;
$day=1;
$a=$year."-".$month."-".$day1.$day;
$b=$year."-".$month."-".$days;
//确定时间戳范围
$dateMin=strtotime($a);
$dateMix=strtotime($b);
//根据时间戳取数据
try{
$arr=db('work_date')
->whereLike('shou_user_id',"%$user_id%")
->where('remind_time','between',[$dateMin,$dateMix])
->select();
}catch (\Exception $e){
$e->getMessage();
}
return $arr;
}
)日历遍历ok

)点击添加日程

)此处稍微有些杂乱 通过ajax post 提交数据 db类插入 判断时间日期逻辑 以及对数据进行处理后 存储
public function add_work()
{
if (request()->isPost()) {
try {
$param = json_decode(input('post.workData'), true);
if (count($param) == 0) {
return;
}
$param = $param[0];
//加入创建者 登录user_id到字段 拼接字段shou_user_id
$user_id=$this->user_id;
$param['shou_user_id']=$param['shou_user_id'].','.$user_id;
//取出发布人user_name
$user_name=db('user_all')
->where('user_id',$user_id)
->field('user_name')
->select();
$user_name=$user_name[0]; //验证时间范围
$param['create_time'] = strtotime(date('Y-m-d,H:i:s'));
$a = strtotime($param['start_time']);
$b = strtotime($param['over_time']); $c = strtotime($param['remind_time']);
$d = strtotime(date('Y-m-d,H:i:s'));
//日程不合理、日程过期
if ($a > $b || $a > $c || $c > $b) {
return ['data' => 1, 'msg' => '时间范围有问题'];
}
if ($b < $d || $c<$d ) {
return ['data' => 2, 'msg' => '提醒 结束 时间已过期'];
}
//将时间戳 只取年月日 判断利于遍历
$a=(strtotime(date('Y-m-d',$a)));
$b=(strtotime(date('Y-m-d',$b)));
$c=(strtotime(date('Y-m-d',$c))); $param['start_time'] = $a;
$param['over_time'] = $b;
$param['remind_time'] = $c;
$param['user_name']=$user_name['user_name']; #tblName 乱码...去除该字段 这是一个bug 待解决.
unset($param['tblName']);
$result=db('work_date')->insert($param); if($result===1){
return ['msg'=>'安排日程成功','data'=>'3'];
}else{
$this->error('添加日程安排失败!');
}
try { } catch (\Exception $e) {
echo Db::name('work_date')->getLastSql();
halt($e->getMessage());
}
} catch (\Exception $e) {
error($e->getMessage());
}
}
return;
}

\\点击红色 日程安排
通过 a标签 href 进行传参 到show_workschesule()
<a title="今日有提醒日程" id="{$new[$time]}" href="\admin/workschedule/show_workschedule?id={$new[$time]}">{$i}</a> public function show_workschedule(Request $request)
{
try {
$work_id = $request->param('id');
//发布人数数据:
$data=db('work_date')
->where('id',$work_id)
->field('id,start_time,over_time,title,content,remind_time,user_name')
->select();
$data=$data[0];
$a=$data['start_time'];
$b=$data['over_time'];
$c=$data['remind_time']; $data['start_time']=date('Y-m-d',$a);
$data['remind_time']=date('Y-m-d H-i-s');
$data['over_time']=date('Y-m-d',$b);
} catch (\Exception $e) {
$e->getMessage();
}
$this->assign($data);
return $this->view->fetch('show_workschedule');
return $this->fetch();
}
)最后ok 有问题 或者有更好的方法可以子啊评论区给出哦~

tp5 后台日程(日历)安排的更多相关文章

  1. [deviceone开发]-日程日历示例

    一.简介 用户Wang利用Gridview和其它组件绘制的日历和任务,基本实现一个完整的在线日程管理功能.另外还封装了很多js对象,非常值得参考学习.二.效果图 三.相关下载 https://gith ...

  2. 小程序将base64的多张图片,传到tp5后台

    zhu要是前端传过来的数据是base64的数据库存储不了base64的数据,因存储量太过于大,因此后台要将base64的数据转换成,34124323534.jpg等格式的,数据库才可将其存储 源码暂时 ...

  3. tp5后台同步更新配置文件

    thinkphp5 配置文件路径:app/extra/web.php public function add(){ $path = 'app/extra/web.php'; $file = inclu ...

  4. DevExpress XtraScheduler日程管理控件应用实例(1)-- 基本使用

    在一些应用场景中,我们可能需要记录某一天,某个时段的日程安排,那么这个时候就需要引入了 DevExpress 的日程控件XtraScheduler 了,这个控件功能非常强大,提供了很好的界面展现方式, ...

  5. phonegap之android原生日历调用

    android日历调用首先第一步我们要添加权限 <uses-permission android:name="android.permission.READ_CALENDAR" ...

  6. jQuery日历和日期选取插件

    参考网站:http://developer.51cto.com/art/201103/248670.htm http://www.open-open.com/ajax/3_Calendar.htm 推 ...

  7. .net mvc页面UI之Jquery博客日历控件

    摘要:最近在做一个博客系统,其他需要用到博客日历控件,网上搜索了很多资料,其中大部分都是javascript的,经过总结使用jquery实现了博客日历效果.代码如下: 原文链接转载请注明:http:/ ...

  8. beat冲刺计划安排

    1. 团队成员 组长:郭晓迪 组员:钟平辉 柳政宇 徐航 曾瑞 2. 主要计划安排如下: 3. 详细日程任务安排

  9. layui+tp5表单提交回调

    layui 前段页面form表单提交数据如果监听表单提交 ,tp5后台操作完成后使用 $this->success('success'); 后前端的页面不会出现layui的layer弹窗提示su ...

  10. 在Winform开发中使用日程控件XtraScheduler

    在一些应用场景中,我们可能需要记录某一天,某个时段的日程安排,那么这个时候就需要引入了DevExpress的日程控件XtraScheduler了,这个控件功能非常强大,提供了很好的界面展现方式,以及很 ...

随机推荐

  1. ASP.NET 日志路径

    默认路径 protected void Button_StreamWrite_Click(object sender, EventArgs e) {     StreamWriter sw = new ...

  2. 2025年BI工具趋势:DataFocus与FineBI的技术创新对比

    1. 摘要 DataFocus 和 FineBI 都是旨在帮助企业利用数据进行决策的商业智能 (BI) 产品.DataFocus 强调其下一代.基于搜索的 BI 方法,侧重于易用性和快速仪表板创建,尤 ...

  3. 如何应对ADAS/AD海量数据处理挑战?

    随着软件定义汽车的发展,车辆生成的数据量也以前所未有的速度不断增加.这些数据包含广泛的信息,包括传感器数据.遥测数据.诊断数据等.在开发过程中,有效处理这些数据并从中获得见解至关重要. 对于原始设备制 ...

  4. 邮件自动回复助手(Rasa/SMTP)实现教程

    在现代办公场景中,处理大量邮件是一项既耗时又容易出错的任务.为了提升工作效率,我们可以利用自然语言处理(NLP)和邮件传输协议(SMTP)技术,构建一个智能的邮件自动回复助手.本文将详细介绍如何使用P ...

  5. Yuque Rich Text(语雀富文本编辑器)

    Yuque Rich Text(语雀富文本编辑器) 由于本人觉得语雀编辑器非常好用,很符合我的使用习惯,然后发现语雀的Chrome浏览器插件实现了编辑器的功能,所以将其富文本的功能拆分位一个单独的Vu ...

  6. 可轻便docker部署的密码保存系统:Vaultwarden

    一.简介 Vaultwarden是著名的Bitwarden项目的一个分支,是一个社区驱动的项目,使用Rust语言编写.它是Bitwarden的轻量级自托管替代方案,完全兼容Bitwarden客户端协议 ...

  7. MySQL 高可用集群搭建部署

    MySQL 高可用集群搭建(GTID 模式 + 自动故障转移) 一.环境规划 角色 IP 地址 说明 主库 (Master) 192.168.1.100 运行 MySQL + Keepalived/M ...

  8. spring boot迁移计划 第Ⅰ章 --chapter 1. rust hyper 结合rust nacos-client开发nacos网关 part ② hyper网关

    1. toml依赖 hyper = { version = "1", features = ["full"] } tokio = { version = &qu ...

  9. 信息资源管理综合题之“如何利用PKI实现身份认证和抗抵赖和防篡改等安全措施 ”

    一.A企业在网上招标采购某种原材料,B是某个参与招标供应商 1.请讨论如何利用PKI(公钥基础设施),实现A企业接收B报价过程的身份认证.抗抵赖和防篡改等安全措施 二.答案 1.请讨论如何利用PKI( ...

  10. .NET周刊【5月第1期 2025-05-04】

    dotnet 9 通过 AppHostRelativeDotNet 指定自定义的运行时路径 https://www.cnblogs.com/lindexi/p/18847625 这篇文章讨论了在 .N ...