tp5 后台日程(日历)安排

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
image.png
)点击添加日程
image.png
)此处稍微有些杂乱 通过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;
    }
image.png
\\点击红色 日程安排
通过 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 有问题 或者有更好的方法可以子啊评论区给出哦~
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 216,919评论 6 502
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,567评论 3 392
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 163,316评论 0 353
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,294评论 1 292
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,318评论 6 390
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,245评论 1 299
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,120评论 3 418
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,964评论 0 275
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,376评论 1 313
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,592评论 2 333
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,764评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,460评论 5 344
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,070评论 3 327
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,697评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,846评论 1 269
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,819评论 2 370
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,665评论 2 354

推荐阅读更多精彩内容

  • Swift1> Swift和OC的区别1.1> Swift没有地址/指针的概念1.2> 泛型1.3> 类型严谨 对...
    cosWriter阅读 11,098评论 1 32
  • ORA-00001: 违反唯一约束条件 (.) 错误说明:当在唯一索引所对应的列上键入重复值时,会触发此异常。 O...
    我想起个好名字阅读 5,311评论 0 9
  • 发现 关注 消息 iOS 第三方库、插件、知名博客总结 作者大灰狼的小绵羊哥哥关注 2017.06.26 09:4...
    肇东周阅读 12,096评论 4 62
  • 生命中有些人的相遇相识相知不知是对还是错,是人为的继续还是命运的安排。 在这个物欲纵横的时代婚外恋已经成为了一种普...
    米芽文化传媒官方账号阅读 554评论 2 5
  • 今天是刻意练习训练营的第十四天。没有之前想象的那样会有多么大的挑战,每日对于自己的朗读也不是很严格按照要求做,因...
    合欢桑吉草阅读 409评论 3 4