
view代碼
<?php /* @var $this yii\web\View */ /* @var $form yii\bootstrap\ActiveForm */ /* @var $model \common\models\LoginForm */ use yii\helpers\Url; use yii\helpers\Html; use common\helps\Helps; use common\helps\ArrayHelper; use yii\grid\GridView; use backend\models\User; use yii\widgets\ActiveForm; //use yii\bootstrap\ActiveForm; ?> <?php //gridview最外層加入表單,方便全選提交,會影響下拉篩選,如果沒有下拉篩選可以用 // $form=ActiveForm::begin([ // 'id'=>'Form', // 'enableClientValidation'=>false, // 'action'=>'javscript:;' // ]); ?> <div class="row"> <div class="col-xs-12"> <div class="box"> <div class="box-header"> <h3 class="box-title">考勤列表</h3> </div> <!-- /.box-header --> <div class="box-body table-responsive"> <?php echo GridView::widget([ 'dataProvider' => $dataProvider, 'filterModel' => $searchModel, //默認layout的表格三部分可不寫:幾條簡介,表格,分頁;可以去掉任意部分 //'layout' => "{summary}\n{items}\n{pager}" , //沒有數據時候顯示的內容和html樣式 'emptyText'=>'當前沒有內容', 'emptyTextOptions'=>['style'=>'color:red;font-weight:bold'], //給所有的行屬性增加id,或class,方便后面選擇后整行改變顏色 'rowOptions'=>function($model){ return ['id'=>"tr-".$model->id]; }, //顯示底部(就是多了一欄),默認是關閉的 'showFooter'=>true, 'columns' => [ //ActionColumn 顯示操作按鈕等CheckboxColumn 顯示復選框RadioButtonColumn 顯示單選框SerialColumn 顯示行號 [ 'class' => 'yii\grid\CheckboxColumn', //'cssClass'=>'_check',//不能用????后面有js實現的 //底部第一列占6格,其他列隱藏,形成合並1個單元格效果 'footerOptions'=>['colspan'=>6], 'footer'=>'<a href="javascript:;" class="_delete_all" data-url="'.Yii::$app->urlManager->createUrl(['/attend/delete_all']).'">刪除全部</a>', ], //'nickname',//默認內容搜索,需要輸入文字 [ //header 可以解析html代碼,將表頭默認的點擊排序改為添加一個鏈接 'header'=>'<a href="www.baidu.com">員工姓名2</a>', //label標題會默認覆蓋原來的uid名字(即顯示員工姓名不顯示用戶id),不能解析html 'label'=>'員工姓名', 'attribute'=>'uid', 'value' => function ($data) { //$arr=Helps::get_correspond_list("get_nickname_list", 'id', "nickname"); $arr=ArrayHelper::map(User::find()->all(),'id','nickname'); return $arr[$data->uid];//返回搜索值 }, 'filter' => Helps::get_correspond_list("get_nickname_list", 'id', "nickname"),//下拉選擇內容 'footerOptions'=>['class'=>'hide'],//隱藏底部的當前列 //'footerOptions'=>['style'=>'display:none'],//也可以 ], [ 'attribute'=>'astart', 'format'=>['date', 'php:Y-m-d H:i:s'], //關閉默認的點擊表頭排序,字體將變黑色,藍色的表示可以點擊排序 'enableSorting'=>false, //如果sign=1不顯示此列,否則顯示 'visible'=>$sign==1 ? false : true, //'value'=>function($data){ // return date('Y-m-d H:i:s',$data->create_time); //} 'footerOptions'=>['class'=>'hide'], ], [ 'attribute'=>'aend', 'value' => function ($data) { return Helps::time_to_date($data->astart); }, 'footerOptions'=>['class'=>'hide'], ], [ 'attribute'=>'state', 'value' => function ($data) { $arr=Helps::get_attend_status_label(); return $arr[$data->state]; }, 'filter' => Helps::get_attend_status(), 'format' => 'raw', //顯示label樣式,否則顯示html代碼 'footerOptions'=>['class'=>'hide'], ], [ 'class' => 'yii\grid\ActionColumn', //控制 "header" => "操作", 'headerOptions' => ['width' => '100'], 'template'=>'{get} {yes} {no} {update} {delete}', //下面buttons可以不寫delete函數,delete默認調用當前控制器下面的delete方法 "buttons" => [ "delete"=>function ($url, $model, $key) {//print_r($key);exit; return "<a href='javascript:;' class='_delete' data-url='".Yii::$app->urlManager->createUrl(['/attend/delete_js','id'=>$model->id])."'>刪除</a>"; }, "update"=>function ($url, $model, $key) {//print_r($key);exit; //$model 為當前的1條數據 //key就是id //$url就是根據id自動拼出鏈接 /attend/update?id=156 $str=''; $str=Html::a('<span class="glyphicon glyphicon-pencil"></span>', Url::to(['attend/edit','id'=>$model->id]), ['title'=>'修改']); return $str; }, ], 'footerOptions'=>['class'=>'hide'], ], ] ]); ?> <!-- /.box --> </div> </div> <?php //ActiveForm::end(); ?> <style> .select_bg{ background:BCC8D0; } </style> <script> $("input[name='selection[]']").addClass("_check"); //選中改變顏色 $("._check").click(function(){ var id=$(this).val(); console.log(id); if($("#tr-"+id).hasClass("select_bg")){ $("#tr-"+id).removeClass("select_bg"); }else{ //$("#tr-"+id).css("background-color",'red'); $("#tr-"+id).addClass("select_bg"); } }); $("._delete").click(function(){ var url=$(this).attr('data-url'); console.log(url); $.getJSON(url,{},function(d){ if(d.done==true){ alert('刪除成功'); window.location.href="<?=Url::to(['attend/index'])?>"; }else{ alert(d.error); } }); }); $("._delete_all").click(function(){ var many_check=$("input[name='selection[]']:checked"); var ids=""; $(many_check).each(function(){ ids+=this.value+','; }); //去掉最后一個逗號 if (ids.length > 0) { ids = ids.substr(0, ids.length - 1); }else{ alert('請選擇至少一條記錄!'); return false; } var url=$(this).attr('data-url'); $.post(url,{ids},function(d){ console.log(d); if(d.done==true){ console.log(1); alert('刪除成功!'); window.location.href="<?=Url::to(['attend/index'])?>"; }else{ alert(d.error); } },'json'); }); </script>
controller代碼
<?php namespace backend\controllers; use Yii; use backend\models\Attend; use backend\models\AttendSearch; use yii\data\Pagination; use common\helps\ArrayHelper; use backend\models\User; use yii\helpers\Json; class AttendController extends SiteController { public function actionIndex(){ $searchModel = new AttendSearch(); $dataProvider = $searchModel->search(Yii::$app->request->get()); $sign=Yii::$app->request->get('sign'); return $this->render('index', [ "dataProvider"=>$dataProvider, "searchModel"=>$searchModel, "sign"=>$sign, ]); } /* * 操作鏈接使用的單個刪除 */ public function actionDelete(){ $id=Yii::$app->request->get('id'); $model = Attend::findOne($id); $model->delete(); return $this->redirect(['attend/index']); } /* * 操作js使用的單個刪除 */ public function actionDelete_js($id){ try{ $model = Attend::findOne($id); $model->delete(); echo Json::encode(['done'=>true]); } catch (Exception $e) { echo Json::encode(['done'=>false,'error'=>$e->getMessage()]); } } /* * 多選刪除js */ public function actionDelete_all(){ try{ $ids=Yii::$app->request->post('ids'); $ids=explode(',',$ids); //數組直接查詢 $lists = Attend::find()->where(['in','id',$ids])->all(); foreach($lists as $list){ $list->delete(); } echo Json::encode(['done'=>true]); } catch (Exception $e) { echo Json::encode(['done'=>false,'error'=>$e->getMessage()]); } } }
model代碼
<?php namespace backend\models; use Yii; use yii\base\Model; use yii\data\ActiveDataProvider; class AttendSearch extends Attend { public function rules() { // 只有在 rules() 函數中聲明的字段才可以搜索,不聲明不顯示搜索框 return [ [['id','uid','username','nickname','time','state'], 'safe'], ]; } public function scenarios() { // 旁路在父類中實現的 scenarios() 函數 return Model::scenarios(); } public function search($params){ $query = Attend::find(); if(!Yii::$app->request->get('sort')){ $query->orderBy('id desc'); } $dataProvider = new ActiveDataProvider([ 'query' => $query, 'pagination' => [ 'pageSize' => 15, ], ]); // 從參數的數據中加載過濾條件,並驗證 if (!($this->load($params) && $this->validate())) { return $dataProvider; } // 增加過濾條件來調整查詢對象 $query->andFilterWhere(['=', 'nickname', $this->nickname]) ->andFilterWhere(['=', 'uid', $this->uid]) ->andFilterWhere(['=', 'state', $this->state]); return $dataProvider; } }
<?php namespace backend\models; //web后端 use Yii; use common\helps\ArrayHelper; use backend\models\User; use backend\models\Worktime; class Attend extends\yii\db\ActiveRecord { public static function tableName() { return 'attend'; } public function attributeLabels() { return [ 'id' => 'ID', 'uid' => '員工id', 'username' => '員工郵箱', 'nickname' => '員工名', 'astart' => '上班簽到', 'thresholdon' => '上班簽到', 'aend' => '下班打卡', 'thresholdoff' => '上班簽到', 'time' => '統計', 'state' => '狀態', ]; } }
參考
http://www.maomaonv.com/site-index.html
