1. 程式人生 > 實用技巧 >fastadmin管理後臺--帶個人日程管理功能

fastadmin管理後臺--帶個人日程管理功能

按照國際慣例先放效果圖

核心程式碼:

schedule.js

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

    var Controller = {
        index: function () {
            // 初始化表格引數配置
            Table.api.init({
                extend: {
                    index_url
: 'pim/schedule/index' + location.search, add_url: 'pim/schedule/add', edit_url: 'pim/schedule/edit', del_url: 'pim/schedule/del', multi_url: 'pim/schedule/multi', table: 'pim_schedule', } });
var table = $("#table"); // 初始化表格 table.bootstrapTable({ url: $.fn.bootstrapTable.defaults.extend.index_url, pk: 'id', sortName: 'id', columns: [ [ {checkbox: true}, {field
: 'id', title: __('Id')}, {field: 'admin_id', title: __('Admin_id')}, {field: 'operate', title: __('Operate'), table: table, buttons: [ { name: 'start', text: '', classname: 'btn btn-xs btn-info btn-ajax btn-restoreit', icon: 'fa fa-play', url: 'pim/schedule/start', confirm: '是否開始?', refresh: true, }, { name: 'finish', text: '', classname: 'btn btn-xs btn-danger btn-ajax btn-restoreit', icon: 'fa fa-stop', url: 'pim/schedule/finish', confirm: '是否結束?', refresh: true, } ], events: Table.api.events.operate, // formatter: Table.api.formatter.operate formatter: function(value,row,index){ var that = $.extend({}, this); var table = $(that.table).clone(true); if(row.status == 0){ $(table).data("operate-finish", null); }else if(row.status == 1){ $(table).data("operate-start", null); }else if(row.status == 2){ $(table).data("operate-start", null); $(table).data("operate-finish", null); } // $(table).data("operate-edit", null); // $(table).data("operate-del", null); that.table = table; return Table.api.formatter.operate.call(that,value,row,index); } }, {field: 'title', title: __('Title'), align: 'left'}, {field: 'deadline', title: __('DeadLine'), align: 'center', formatter: Table.api.formatter.dateonly}, {field: 'stime', title: __('Stime'), operate:'RANGE', addclass:'datetimerange', formatter: Table.api.formatter.datetime}, {field: 'etime', title: __('Etime'), operate:'RANGE', addclass:'datetimerange', formatter: Table.api.formatter.datetime}, {field: 'costhours', title: __('CostHours') + '(' + __('Unit') + ')', formatter: function(value,row,index){ etime = new Date(row.etime.toString()); stime = new Date(row.stime.toString()); if(etime - stime < 0){ return __('Stime') + '或' + __('Etime') + '有誤'; }else{ return ((etime - stime)/(1000*60*60)).toFixed(1); } }}, {field: 'attachfile', title: __('Attachfile'), formatter:function(value,row,index){ if(row.attachfile == ''){ return ''; }else{ return "<a href='" + row.attachfile + "' target='_blank'>" + __('View') + "</a>"; } } }, {field: 'status', title: __('Status'), searchList: {"0":__('Status 0'),"1":__('Status 1'),"2":__('Status 2'),"9":__('Status 9')}, formatter: Table.api.formatter.status}, {field: 'createtime', title: __('Createtime'), operate:'RANGE', addclass:'datetimerange', formatter: Table.api.formatter.datetime}, {field: 'updatetime', title: __('Updatetime'), operate:'RANGE', addclass:'datetimerange', formatter: Table.api.formatter.datetime}, {field: 'weight', title: __('Weight')}, ] ] }); // 為表格繫結事件 Table.api.bindevent(table); }, recyclebin: function () { // 初始化表格引數配置 Table.api.init({ extend: { 'dragsort_url': '' } }); var table = $("#table"); // 初始化表格 table.bootstrapTable({ url: 'pim/schedule/recyclebin' + location.search, pk: 'id', sortName: 'id', columns: [ [ {checkbox: true}, {field: 'id', title: __('Id')}, {field: 'title', title: __('Title'), align: 'left'}, { field: 'deletetime', title: __('Deletetime'), operate: 'RANGE', addclass: 'datetimerange', formatter: Table.api.formatter.datetime }, { field: 'operate', width: '130px', title: __('Operate'), table: table, events: Table.api.events.operate, buttons: [ { name: 'Restore', text: __('Restore'), classname: 'btn btn-xs btn-info btn-ajax btn-restoreit', icon: 'fa fa-rotate-left', url: 'pim/schedule/restore', refresh: true }, { name: 'Destroy', text: __('Destroy'), classname: 'btn btn-xs btn-danger btn-ajax btn-destroyit', icon: 'fa fa-times', url: 'pim/schedule/destroy', refresh: true } ], formatter: Table.api.formatter.operate } ] ] }); // 為表格繫結事件 Table.api.bindevent(table); }, add: function () { Controller.api.bindevent(); }, edit: function () { Controller.api.bindevent(); }, api: { bindevent: function () { 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 = null;

    protected $dataLimit = true;
    protected $dataLimitField = 'admin_id';

    public function _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中對應的方法複製到當前控制器,然後進行修改
     */

    /**
     * 開始事務
     */
    public function start($ids = null){
        /* 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], $adminIds)){
                $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);
    }

    /**
     * 結束事務
     */
    public function finish($ids = null){
        /* 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], $adminIds)){
                $this->error(__("You have no permission"));
            }
        }

        /* step3 更新資料庫 */
        if($this->request->isPost()){
            $row->status = 2;
            $row->etime = date('Y-m-d H:i:00');
            $row->save();
        }

        /* step4 返回處理結果 */
        $rst = array(
            'code' => 1,
            'msg' => '事務成功結束。',
            'data' => $row,
            'url' => '.',
            'wait' => 3
        );
        return json($rst);
    }
    

}

新增資料表 fa_pim_schedule

完整原始碼+QQ:965794175