fastadmin管理后台--带个人日程管理功能

按照国际惯例先放效果图

 

 核心代码:

schedule.js

define(['jquery','bootstrap','backend','table','form'],function ($,undefined,Backend,Table,1)"> Form) {

    var Controller = {
        index: function () {
            // 初始化表格参数配置
            Table.api.init({
                extend: {
                    index_url: 'pim/schedule/index' + location.search,1)">
                    add_url: 'pim/schedule/add',1)">
                    edit_url: 'pim/schedule/edit',1)">
                    del_url: 'pim/schedule/del',1)">
                    multi_url: 'pim/schedule/multi',1)">
                    table: 'pim_schedule',1)">
                }
            });

            var table = $("#table");

             初始化表格
            table.bootstrapTable({
                url: $.fn.bootstrapTable.defaults.extend.index_url,1)">
                pk: 'id',1)">
                sortName: 'id',1)">
                columns: [
                    [
                        {checkbox: true},1)">
                        {field: 'id',title: __('Id')},1)">
                        {field: 'admin_id',title: __('Admin_id')},1)">
                        {field: 'operate',title: __('Operate'),1)">
                            table: table,1)">
                            buttons: [
                                {
                                    name: 'start',1)">
                                    text: '',1)">
                                    classname: 'btn btn-xs btn-info btn-ajax btn-restoreit',1)">
                                    icon: 'fa fa-play',1)">
                                    url: 'pim/schedule/start',1)">
                                    confirm: '是否开始?',1)">
                                    refresh: true,1)">
                                },1)">
                                {
                                    name: 'finish',1)">
                                    classname: 'btn btn-xs btn-danger btn-ajax btn-restoreit',1)">
                                    icon: 'fa fa-stop',1)">
                                    url: 'pim/schedule/finish',1)">
                                    confirm: '是否结束?',1)">
                                }
                            ],1)">
                            events: Table.api.events.operate,1)"> formatter: Table.api.formatter.operate
                            formatter: function(value,row,1)">index){
                                var that = $.extend({},1)"> this);
                                var table = $(that.table).clone(true);

                                if(row.status == 0){
                                    $(table).data("operate-finish",1)">null);
                                }else if(row.status == 1){
                                    $(table).data("operate-start",1)">if(row.status == 2);
                                    $(table).data("operate-finish",1)">);
                                }

                                 $(table).data("operate-edit",null);
                                // $(table).data("operate-del",null);

                                that.table = table;
                                return Table.api.formatter.operate.call(that,value,1)">index);
                            }
                        },1)">
                        {field: 'title',title: __('Title'),align: 'left'},1)">
                        {field: 'deadline',title: __('DeadLine'),align: 'center',formatter: Table.api.formatter.dateonly},1)">
                        {field: 'stime',title: __('Stime'),operate:'RANGE',addclass:'datetimerange',formatter: Table.api.formatter.datetime},1)">
                        {field: 'etime',title: __('Etime'),1)">
                        {field: 'costhours',title: __('CostHours') + '(' + __('Unit') + ')',formatter: index){
                            etime = new Date(row.etime.toString());
                            stime = Date(row.stime.toString());

                            if(etime - stime < 0){
                                return __('Stime') + '或' + __('Etime') + '有误';
                            }else{
                                return ((etime - stime)/(1000*60*60)).toFixed(1);
                            }

                        }},1)">
                        {field: 'attachfile',title: __('Attachfile'),1)">
                            formatter:if(row.attachfile == ''){
                                    return '';
                                }{
                                    return "<a href='" + row.attachfile + "' target='_blank'>" + __('View') + "</a>";
                                }
                            }
                        },1)">
                        {field: 'status',title: __('Status'),searchList: {"0":__('Status 0'),"1":__('Status 1'),"2":__('Status 2'),"9":__('Status 9')},formatter: Table.api.formatter.status},1)">
                        {field: 'createtime',title: __('Createtime'),1)">
                        {field: 'updatetime',title: __('Updatetime'),1)">
                        {field: 'weight',title: __('Weight')},1)">
                    ]
                ]
            });

             为表格绑定事件
            Table.api.bindevent(table);
        },1)">
        recyclebin:  {
                    'dragsort_url': ''bootstrapTable({
                url: 'pim/schedule/recyclebin' + location.search,1)">
                        {
                            field: 'deletetime',1)">
                            title: __('Deletetime'),1)">
                            operate: 'RANGE',1)">
                            addclass: 'datetimerange',1)">
                            formatter: Table.api.formatter.datetime
                        },1)">
                        {
                            field: 'operate',1)">
                            width: '130px',1)">
                            title: __('Operate'),1)"> [
                                {
                                    name: 'Restore',1)">
                                    text: __('Restore'),1)">
                                    icon: 'fa fa-rotate-left',1)">
                                    url: 'pim/schedule/restore',1)">
                                {
                                    name: 'Destroy',1)">
                                    text: __('Destroy'),1)">
                                    classname: 'btn btn-xs btn-danger btn-ajax btn-destroyit',1)">
                                    icon: 'fa fa-times',1)">
                                    url: 'pim/schedule/destroy',1)">operate
                        }
                    ]
                ]
            });

            
        add:  () {
            Controller.api.bindevent();
        },1)">
        edit: 
        api: {
            bindevent:  () {
                Form.api.bindevent($("form[role=form]"));
            }
        }
    };
    return Controller;
});

controller--schedule.php

<?php

namespace app\admin\controller\pim;

use app\common\controller\Backend;

/**
 * 个人日程管理
 *
 * @icon fa fa-circle-o
 */
class Schedule extends Backend
{
    
    *
     * Schedule模型对象
     * @var \app\admin\model\pim\Schedule
     */
    protected $model = ;

    $dataLimit = ;
    $dataLimitField = 'admin_id'public  _initialize()
    {
        parent::_initialize();
        $this->model = new \app\admin\model\pim\Schedule;
        $this->view->assign("statusList",$this->model->getStatusList());
    }
    
    *
     * 默认生成的控制器所继承的父类中有index/add/edit/del/multi五个基础方法、destroy/restore/recyclebin三个回收站方法
     * 因此在当前控制器中可不用编写增删改查的代码,除非需要自己控制这部分逻辑
     * 需要将application/admin/library/traits/Backend.php中对应的方法复制到当前控制器,然后进行修改
     */

    *
     * 开始事务
     function start($ids = ){
         step1 从数据库里取得该条数据 */
        $row = $this->model->get($ids);
        if(!$row){
            $this->error(__("No results were found"));
        }

         step2 数据操作权限 $adminIds = $this->getDataLimitAdminIds();
        if(is_array($adminIds)){
            if(!in_array($row[$this->dataLimitField],1)">)){
                $this->error(__("You have no permission"));
            }
        }

         step3 更新数据库 */
        if($this->request->isPost()){
            $row->status = 1;
            $row->stime = date('Y-m-d H:i:00');
            $row->save();
        }

         step4 返回处理结果 $rst = array(
            'code' => 1,'msg' => '事务成功开始。','data' => $row,'url' => '.','wait' => 3
        );
        return json($rst);
    }

    *
     * 结束事务
     function finish($row->status = 2$row->etime = );
    }
    

}

 新增数据表 fa_pim_schedule

 

 

完整源码+QQ:965794175

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


是“帐”还是“账”---由FastAdmin用户中心引出的讨论有小伙伴对FastAdmin用户中心的“账号”提出异议,应该为“帐号”。查了资料,其实都没有问题不大。最初只有一个“帐”,后来为了区分造出了“账”。“帐”通“账,但不可以反过来,就是说使用“账”的地方可以使用“帐”,但“
好久不见了各位朋友,昨天在kali下倒腾东西的时候发现,我下了第三方框架fastadmin框架并安装时遇到的一些问题,然后整理下过程。下面我们开始今天的正题。首先先看下我们的环境,如下图所示:  然后我们看着官方文档一步步来执行。这里是官方文档链接https://doc.fastadmin.net
手把手教你安装FastAdmin到虚拟主机(phpStudy)原文: https://forum.fastadmin.nethread/2524下载FastAdmin下载FastAdmin1并解压到C:/www/FastAdmin目录目录列表如下安装phpStudy2018安装phpStudy20182并修改phpStudy为php-7.1.13-nts+Apache配置虚拟主机点
fastadmin控制器<?phpnamespaceapp\admin\controller\peizi;useapp\common\controller\Backend;/*****@iconfafa-circle-o*/classConfigextendsBackend{/***Config模型对象*@var\app\admin\model\weixinitem\Config*///p
创建用户CREATEUSER'video'@'%'IDENTIFIEDBY'video2019';.限制用户权限GRANTSELECT,INSERT,UPDATE,REFERENCES,DELETE,CREATE,DROP,ALTER,INDEX,CREATEVIEW,SHOWVIEWON`video_fastadmin`.*TO'video'@'%';
FastAdminCMS插件标签使用说明在CMS插件中的前端视图模板中有大量使用了自定义标签,我们在修改或制作模板的时候可以方便快捷的使用自定义标签来调用我们相关的数据。标签库位于/addons/cmsaglib/Cms.php文件,我们可以看到标签库有定义可调用的标签和属性,如下protected$tags
在项目所对应的js文件中的table.bootstrapTable({url:$.fn.bootstrapTable.defaults.extend.index_url,pk:'id',sortName:'id',columns:[{field:'operate',title:__('Operate'),t
为什么后台给管理员所在组分配了权限,管理员仍然提示没有权限访问如果是你自己添加的控制器,可以使用一键生成菜单命令(phpthinkmenu-c控制器名)来生成菜单,如果你是手动添加的规则菜单,权限规则必须细化到控制器的方法才可以。
我们都知道后台/admin是我们最常用的登录入口,方便的同时也留下了隐患,如果你刚好使用了admin/123456这种账号密码的方式,会导致我们的后台完全暴露在外。因此我们建议修改后台的登录入口,达到隐藏后台登录入口的效果。操作步骤1、首页修改application/config.php中deny_module_list
这是在edit方法里重写 staff是表名,username是字段名,$ids是当前数据的idtry{//是否采用模型验证if($this->modelValidate){$name=str_replace("\\model\\","\\validate\\",get_cla
FastAdmin自学笔记-目录FastAdmin开发第一天:了解FastAdmin框架(2019-09-09)FastAdmin开发第二天:安装环境FastAdmin开发第三天:FastAdmin开发第三天:安装FastAdmin
第一个图片在id前面加了模型名是因为第一个控制器//当前是否为关联查询$this->relationSearch=true; 
问题通过fieldlist动态添加的组件,是没法自动渲染的。关于内置组件的渲染fa官网也只对10个内置的组件,提供了重新渲染的方法。以下是:十个组件,两种方法。方法1:全部重新渲染Form.api.bindevent("form[role=form]")方法2:精确渲染并提供了10个组件精确渲染的方法,如下图如何
FastAdmin安装后点登录没有反应怎么办?很多小伙伴安装后点“登录”没有反应。这个URL是对的,但是页面就是不改变。如果这时候点击URL变了,那没有到登陆界面,一般是URL重写问题。一般如果是Apache服务器,FastAdmin是有默认的重写规则。一般这个问题出现在NGINX的服务
页面  视图内<divid="toolbar"class="toolbar"><ahref="javascript:;"class="btnbtn-primarybtn-refresh"title="{:__('Refresh')}"><i
server{listen80;server_namefastadmin.test*.fastadmin.test;root"C:/laragon/www/fastadmin/public/";indexindex.htmlindex.htmindex.php;location/{try_files$uri$uri//index.php$is_args$args;
在CMS插件中的前端视图模板中有大量使用了自定义标签,我们在修改或制作模板的时候可以方便快捷的使用自定义标签来调用我们相关的数据。标签库位于/addons/cmsaglib/Cms.php文件,我们可以看到标签库有定义可调用的标签和属性,如下protected$tags=[//标签定义:attr属性列
1、先把composer调成国内镜像:composerconfig-grepo.packagistcomposerhttps://packagist.phpcomposer.com不更换也行,但是很慢,建议更换 2、进项目根目录(不是public)composerrequireworkerman/gateway-worker 
学习thinkphp5的方法1.看文档2.看视频3.实际操作4.安装使用fastadmin研究代码今天第一步下载安装1.安装tp5,网上的composer下载安装,还需要切换国内镜像,一切从简。直接从官网,下载相关的包就行了。2.安装fastadmin,直接下载,不需要composer3.tp5文档地址:https://www.kancloud
使用下面,在检测当前的权限用户$adminIds=$this->getDataLimitAdminIds();halt($adminIds);使用下面,来检测信息的权限(获取查询的sql语句,会发现,admin_idinXXX)halt($this->model->getLastSql());一个配置方法,可能需要