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. ShadowSql之功能简介

    ShadowSql包含sql的绝大多数功能 按可执行功能分为Insert.Delete.Update.Select(SingleSelect).CreateTable.DropTable和Trunca ...

  2. 中文Markmap v2.0 现已上线,新增高效功能,老板再也留不住你下班的脚步!

    介绍 Markmap.js 是一款开源项目,在 GitHub 上获得了超过 1.7 万个星的关注,它的主要功能是将 Markdown 文档可视化为思维导图. 在日常使用中,用户经常需要面对老板的&qu ...

  3. CLI命令行应用

    前言 针对golang这门高级语言,主要想了解它的语言特性还有服务器建站还有微服务搭建方面的用途,以下都可以算是使用记录. 一.命令行应用的标准库实现 很多语言都有针对命令行参数的功能包,比如pyth ...

  4. Postman接口关联总结

    1.新建集合 打开postman,点击Collections->New Collection,页面如下: 2.新建请求 下面以获取绑定信息接口为例 接口说明: C{获取绑定信息接口} 接口地址: ...

  5. 基于注解的 AOP 配置

    第一步:在 spring 配置文件中开启 spring 对注解 AOP 的支持 <!-- 开启 spring 对注解 AOP 的支持 --> <aop:aspectj-autopro ...

  6. java基础之数据结构

    一.栈:stack,又称堆栈[出口和入口在同一侧],特点:先进后出(即,存进去的元素,要在后它后面的元素依次取出后,才能取出该元素) 例子:子弹压进弹夹,先压进去的子弹在下面,后压进去的子弹在上面,当 ...

  7. 20241107,LeetCode 每日一题,使用 Go 计算两数相加

    思路 模拟加法:链表存储的是逆序数位,因此从头节点开始,逐位相加可以模拟正常的加法.每两个节点的值相加,并记录进位. 逐节点相加: 创建一个新的链表,用于存储结果,每次将两个链表对应节点的值加上进位值 ...

  8. 获取IP地址避免XFF攻击(使用nginx)

    //以下代码可以获取到客户端IP,但是可能会有XFF攻击,伪造IP地址 request.getHeader("x-forwarded-for"); 解决办法 //从Nginx中X- ...

  9. Python3_模块(一)

    脚本是用 python解释器来编程,如果从 Python解释器退出再进入,那么你定义的所有的方法和变量就都消失了.为此 Python提供了一个办法,把这些定义存放在文件中,为一些脚本或者交互式的解释器 ...

  10. Burp插件Fiora联动nuclei(windows)

    大佬写的插件出来好久了 今天朋友问我Fiora联动nuclei,我突然忘了咋配的的了.. 记录一下 一.下载nuclei https://github.com/projectdiscovery/nuc ...