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. 简单实现Android的本地文件读写,暨将List数据保存到Json文件中并读出

    一.让我们从引入依赖开始 //将这两行代码添加到以上位置,其他的一般不用管 implementation 'com.google.code.gson:gson:2.8.5' implementatio ...

  2. 【Guava】BiMap&Multimap&Multiset

    BiMap Map 可以实现 key -> value 的映射,如果想要 value -> key 的映射,就需要定义两个 Map,并且同步更新,很不优雅.Guava 提供了 BiMap ...

  3. Devops工程师需要具备的10项技能

    Facebook.Amazon和Microsoft等公司正在大量使用DevOps技术来确保软件的一致交付,DevOps的的工作机会和所需要的技能集也是越来越多. 在这里,我们将讨论Devops工程师需 ...

  4. 基于MySQL分析线上充值留存率

    1.数据清洗 步骤: 1.查询charge_record表业务类型为充值且订单状态为成功的数据 2.将上述数据转移到本地数据库 使用如下脚本: # coding=utf-8import pymysql ...

  5. 配置springmvc的springmvc.xml

    <?xml version="1.0" encoding="UTF-8"?><beans xmlns="http://www.spr ...

  6. 阿里云服务器中Linux下centos7.6安装JDK

    一.下载jdk安装包 wget https://imcfile.oss-cn-beijing.aliyuncs.com/shizhan/file/liaoshixiong/jdk-8u231-linu ...

  7. Rabbitmq防止消息的丢失

    一.Rabbitmq的流程图 二.出现消息丢失的三个可能 A:写消息的过程,消息都没到rabbitmq,在网络传输过程就丢了:或者是消息到了rabbitmq,但是人家内部出错了没保存下来 例子: 1. ...

  8. kettle介绍-Step之If field value is null

    If field value is null介绍 替换NULL值步骤可以将输入流中所有字段的空值进行替换,也可以指定一种类型下的空值进行替换,还可以指定一个字段下的空值进行替换 三种替换NULL模式 ...

  9. 2024dsfz集训Day1:贪心算法

    DAY1:贪心算法 \[Designed\ By\ FrankWkd\ -\ Luogu@Lwj54joy,uid=845400 \] 特别感谢 此次课的主讲 - Kwling 经典模型: 硬币问题: ...

  10. rider更新2021.2

    Rider 的新功能Rider 2021.2 带有增强的 C# 语言支持,包括对代码分析.可为空引用类型和源生成器的大量更新.对于 Web 开发人员,此版本支持 ASP.NET Core Endpoi ...