Browse Source

add layer info

superbee315 5 years ago
parent
commit
13914135f1

+ 6 - 2
application/base/controller/Base.php

@@ -2,8 +2,8 @@
 namespace app\base\controller;
 
 use think\Controller;
-use think\Request;
 use think\Auth;
+use app\user\model\Mail;
 
 /**
  * 创建控制器基类
@@ -12,11 +12,16 @@ use think\Auth;
  */
 class Base extends Controller{
 	
+	private $mailModel;
+	
 	public function _initialize(){
 		parent::_initialize();
 		
 		$this->assign("rootpath", $this->request->root());
 		
+		$this->mailModel = new Mail();
+		$this->assign('no_send', $this->mailModel->notSendMail());
+		
 		$this->check_login();
 		$this->check_auth();
 	}
@@ -30,7 +35,6 @@ class Base extends Controller{
 		if(empty($admin)){
 			$this->redirect($this->request->root().'/base/login/login');
 		}
-		
 	}
 	
 	/**

+ 0 - 1
application/user/controller/Index.php

@@ -1,7 +1,6 @@
 <?php
 namespace app\user\controller;
 
-use think\Db;
 use app\base\controller\Base;
 use app\user\model\Role;
 use app\user\model\RoleRule;

+ 83 - 0
application/user/controller/Mail.php

@@ -0,0 +1,83 @@
+<?php
+namespace app\user\controller;
+
+use app\base\controller\Base;
+
+class Mail extends Base{
+	
+	private $mailModel, $userModel;
+	
+	public function _initialize(){
+		parent::_initialize();
+		
+		$this->mailModel = new \app\user\model\Mail();
+		$this->userModel = new \app\user\model\User();
+	}
+	
+	public function index(){
+		$p = $this->request->get('page', 0);
+		$nick = $this->request->get('n');
+		$where = [];
+		
+		if($nick) $where['title'] = ['like', "%$nick%"];
+		
+		$info = $this->mailModel->getInfo($p, $where);
+		$page = $this->mailModel->getPage($where);
+		
+		$this->assign("info", $info);
+		$this->assign("page", $page);
+		return $this->fetch();
+	}
+	
+	public function edit(){
+		$id = $this->request->get('id');
+		$info = $this->mailModel->getMailById($id);
+		
+		$this->assign("info", $info);
+		return $this->fetch('edit');
+	}
+	
+	public function select(){
+		
+		if($this->request->isAjax()){
+			$p = $this->request->get('page', 0);
+			$limit = $this->request->get('limit');
+			$nick = $this->request->get('n');
+			$id = $this->request->get('i');
+			$where = [];
+			
+			if($nick) $where['nickname'] = ['like', "%$nick%"];
+			if($id) $where['id'] = ['=', $id];
+			
+			$count = $this->userModel->where($where)->count();
+			
+			$data = $this->userModel
+			->where($where)
+			->page($p, $limit)
+			->order('registertime', 'desc')
+			->select();
+			
+			// 需要把long类型转换成字符串,不然js无法解析
+			foreach($data as &$val){
+				$val['id'] = strval($val['id']);
+			}
+			
+			$result = ['code'=>0, 'msg'=>'success', 'count'=>$count, 'data'=>$data];
+			
+			return json($result);
+		}
+		
+		$this->view->engine->layout(false);
+		return $this->fetch();
+	}
+	
+	public function save(){
+		$res = $this->mailModel->addAndSave();
+		
+		if($res){
+			$this->success('保存成功!', 'index');
+		}else{
+			$this->error('保存失败!');
+		}
+	}
+}

+ 1 - 1
application/user/model/Admin.php

@@ -110,9 +110,9 @@ class Admin extends Model{
 	 */
 	public function login($name, $password){
 		$res = $this->db()->where(['name'=>strtolower($name), 'password'=>md5($password)])->find();
-		$res = $res->toArray();
 		
 		if ($res){
+			$res = $res->toArray();
 			$res['last_time'] = getCurrentTime();
 			$this->isUpdate(true)->allowField(['last_time', 'id', 'last_ip'])->save($res);
 		}

+ 66 - 0
application/user/model/Mail.php

@@ -0,0 +1,66 @@
+<?php
+namespace app\user\model;
+
+use think\Model;
+
+class Mail extends Model{
+	
+	protected $autoWriteTimestamp = 'datetime';		// 开启自动写入时间戳字段
+	protected $createTime = 'create_time';			// 创建时间
+	protected $updateTime = '';						// 每次更新时间
+	
+	public function initialize(){
+		parent::initialize();
+	}
+	
+	/**
+	 * 获取数据信息
+	 * @param int $page 页码
+	 * @param array $where 查询条件
+	 */
+	public function getInfo($page = 0, $where = array()){
+		return $this->db()
+		->where($where)
+		->page($page, config('paginate.list_rows'))
+		->select();
+	}
+	
+	/**
+	 * 获取分页信息
+	 * @param array $where 查询条件
+	 */
+	public function getPage($where = array()){
+		$query = getPaginatiorQuery();
+		$total = $this->db()->where($where)->count();
+		// 查询条件
+		$config = ['query'=>$query];
+		$paginate = $this->db()->where($where)->paginate(config('paginate.list_rows'), $total, $config);
+		
+		return $paginate->render();
+	}
+	
+	/**
+	 * 根据id找到对象
+	 * @param int $id
+	 */
+	public function getMailById($id){
+		return $this->db()->where(['id'=>$id])->find();
+	}
+	
+	/**
+	 * 添加和更新的方法
+	 */
+	public function addAndSave(){
+		$data = request()->post();
+		return $this->allowField(true)->isUpdate(isset($data['id']) && $data['id']?true:false)->save($data);
+	}
+	
+	/**
+	 * 没有发送的邮件
+	 * @return number|string
+	 */
+	public function notSendMail(){
+		return $this->db()->where(['is_send'=>0])->count();
+	}
+	
+}

+ 99 - 0
application/user/view/mail/edit.html

@@ -0,0 +1,99 @@
+{js href="__ROOT__/__JS__/ueditor/ueditor.config.js" /}
+{js href="__ROOT__/__JS__/ueditor/ueditor.all.min.js" /}
+{js href="__ROOT__/__JS__/ueditor/lang/zh-cn/zh-cn.js" /}
+{js href="__ROOT__/__JS__/layer.js" /}
+{js href="__ROOT__/__JS__/layui.js" /}
+{css href="__ROOT__/__CSS__/layer.css" /}
+
+	<div class="am-cf am-padding am-padding-bottom-0">
+        <div class="am-fl am-cf"><strong class="am-text-primary am-text-lg">邮件资料</strong> / <small>Mail information</small></div>
+    </div>
+
+      <hr/>
+
+      <div class="am-g">
+
+        <div class="am-u-sm-12 am-u-md-10">
+          <form class="am-form am-form-horizontal" method="post" action="save">
+          <input type="hidden" value="{$info.id}" name="id" />
+            <div class="am-form-group">
+              <label for="title" class="am-u-sm-3 am-form-label">标题 / Title</label>
+              <div class="am-u-sm-9">
+                <input type="text" id="title" name="title" value="{$info.title}" placeholder="标题 / Title">
+              </div>
+            </div>
+            
+            <div class="am-form-group">
+              <label for="users" class="am-u-sm-3 am-form-label">选择 / Users</label>
+              <div class="am-u-sm-9">
+              	<div class="am-u-sm-10">
+	              	<textarea id="users" class="am-fl" rows="5" name="users" placeholder="如果为空则为全部用户">{$info.users}</textarea>
+              	</div>
+                <input type="button" id="btn" class="am-u-sm-2 am-btn am-btn-success" value="选择用户" />
+              </div>
+            </div>
+            
+            <div class="am-form-group">
+              <label for="content" class="am-u-sm-3 am-form-label">内容 / Content</label>
+              <div class="am-u-sm-9">
+              	<textarea id="content" name="content" rows="5" placeholder="内容 / Content">{$info.content}</textarea>
+              </div>
+            </div>
+            
+            <div class="am-form-group">
+              <div class="am-u-sm-9 am-u-sm-push-3">
+                <button type="submit" class="am-btn am-btn-primary">保存修改</button>
+               	<button type="button" class="am-btn am-btn-default" onclick="location.href='index'">返回</button>
+              </div>
+            </div>
+          </form>
+        </div>
+      </div>
+      
+<script type="text/javascript">
+    var ue = UE.getEditor('content');
+    
+    $(function(){
+		$("#btn").click(function(){
+		    layui.use(['layer', 'table'], function(){
+		    	var layer = layui.layer;
+		    	var table = layui.table;
+		    	
+			    layer.open({
+					type: 2,
+					title: '选择用户',
+					closeBtn: 1,
+	  				shadeClose: true,
+	  				area: ['900px', '500px'],
+	  				content: '{$rootpath}/user/mail/select',
+	  				btn: ['OK', 'Cancel'],
+			  		yes: function(index, layero){
+			  			var body = layer.getChildFrame('body', index);
+			  			var iframeWin = window[layero.find('iframe')[0]['name']];
+			  			
+			  			var data = iframeWin.getCheckData();
+			  			let users = $('#users').val().toString();
+			  			
+			  			for (let i = 0; i < data.length; i++) {
+			  				let obj = data[i];
+			  				if(users.indexOf(obj.id) != -1) continue;
+			  				
+			  				if(users) {
+			  					users += ',' + obj.id;
+			  				} else {
+			  					users = obj.id;
+			  				}
+			  			}
+			  			$('#users').val(users);
+			  			
+		  				layer.close(index);
+			  		},
+			  		cancel: function(index, layero){
+		  				layer.close(index);
+	  				}
+			    });
+		    });
+		});  	
+    });
+    
+</script>

+ 75 - 0
application/user/view/mail/index.html

@@ -0,0 +1,75 @@
+	<div class="am-cf am-padding am-padding-bottom-0">
+        <div class="am-fl am-cf"><strong class="am-text-primary am-text-lg">邮件列表</strong> / <small>Mail</small></div>
+      </div>
+
+      <hr>
+
+      <div class="am-g">
+        <div class="am-u-sm-12 am-u-md-4">
+          <div class="am-btn-toolbar">
+            <div class="am-btn-group am-btn-group-xs">
+              <button type="button" class="am-btn am-btn-success" onclick="location.href='edit'"><span class="am-icon-plus"></span> 新增</button>
+            </div>
+          </div>
+        </div>
+        
+        <form class="am-form" action="index" method="get">
+	        
+	        <div class="am-u-sm-12 am-u-md-3">
+	          <div class="am-input-group am-input-group-sm">
+		          <input type="text" class="am-form-field" name="n" />
+		            
+		          <span class="am-input-group-btn">
+		            <button class="am-btn am-btn-default" type="submit">搜索</button>
+		          </span>
+	          </div>
+	        </div>
+	        
+	        <div class="am-u-sm-12 am-u-md-3">
+	          <div class="am-form-group">
+	          </div>
+	        </div>
+        </form>
+      </div>
+
+      <div class="am-g">
+        <div class="am-u-sm-12">
+          
+            <table class="am-table am-table-striped am-table-hover table-main">
+              <thead>
+	              <tr>
+	                <th class="table-id">序号</th>
+	                <th class="table-title">标题</th>
+	                <th class="table-date am-hide-sm-only">创建日期</th>
+	                <th class="table-set">操作</th>
+	              </tr>
+              </thead>
+              <tbody>
+              	{foreach name="info" key="k" item="v"}
+		              <tr>
+		                <td>{$k+1}</td>
+		                <td>{$v.title}</td>
+		                <td class="am-hide-sm-only">{$v.create_time}</td>
+		                <td>
+		                  <div class="am-btn-toolbar">
+		                    <div class="am-btn-group am-btn-group-xs">
+		                      <button class="am-btn am-btn-default am-btn-xs am-text-secondary" onclick="location.href='edit?id={$v.id}'"><span class="am-icon-pencil-square-o"></span> 编辑</button>
+		                      {if condition="!$v.is_send"}
+		                      <button class="am-btn am-btn-default am-btn-xs am-text-success am-hide-sm-only" onclick="location.href='send?id={$v.id}'"><span class="am-icon-send"></span> 发送</button>
+		                      {/if}
+		                      <button class="am-btn am-btn-default am-btn-xs am-text-danger am-hide-sm-only" onclick="if(confirm('确定要删除?'))location.href='delete?id={$v.id}'"><span class="am-icon-trash-o"></span> 删除</button>
+		                    </div>
+		                  </div>
+		                </td>
+		              </tr>
+		          {/foreach}    
+              </tbody>
+            </table>
+            <div class="am-cf">
+              	{$page}
+            </div>
+            <hr />
+            <p>注:.....</p>
+        </div>
+   </div> 
+        

+ 82 - 0
application/user/view/mail/select.html

@@ -0,0 +1,82 @@
+<!DOCTYPE html>
+<html>
+<head>
+  <meta charset="utf-8">
+  <title>选择用户</title>
+  <meta name="renderer" content="webkit">
+  <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
+  <meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1">
+  {css href="__ROOT__/__CSS__/layui.css" /}
+  {js href="__ROOT__/__JS__/layui.js" /}        
+</head>
+<body>
+<div style="padding: 5px;">
+	<div class="demoTable">
+	 ID:
+	  <div class="layui-inline">
+	    <input class="layui-input" name="id" id="demoReload" autocomplete="off">
+	  </div>
+	  用户名:
+	  <div class="layui-inline">
+	    <input class="layui-input" name="nickname" id="nickname" autocomplete="off">
+	  </div>
+	  <button class="layui-btn" data-type="reload">搜索</button>
+	</div>
+	 
+	<table class="layui-hide" id="LAY_table_user" lay-filter="user"></table> 
+</div>
+          
+<script>
+layui.use('table', function(){
+  var table = layui.table;
+  
+  //方法级渲染
+  table.render({
+    elem: '#LAY_table_user'
+    ,url: '{$rootpath}/user/mail/select'
+    ,cols: [[
+      {checkbox: true, fixed: true}
+      ,{field:'id', title: 'ID',  sort: true}
+      ,{field:'nickname', title: '用户名'}
+      ,{field:'registertime', title: '注册时间'}
+    ]]
+    ,id: 'testReload'
+    ,page: true
+    ,height: 'auto'
+  });
+  
+  var $ = layui.$, active = {
+    reload: function(){
+      var demoReload = $('#demoReload');
+      var nickname = $('#nickname');
+      
+      //执行重载
+      table.reload('testReload', {
+        page: {
+          curr: 1 //重新从第 1 页开始
+        }
+        ,where: {
+          i: demoReload.val(),
+          n: nickname.val()
+        }
+      }, 'data');
+    }
+    
+  };
+  
+  window.getCheckData = function(){
+	  var checkStatus = table.checkStatus('testReload')
+		, data = checkStatus.data;
+		
+		return data;
+  };
+  
+  $('.demoTable .layui-btn').on('click', function(){
+    var type = $(this).data('type');
+    active[type] ? active[type].call(this) : '';
+  });
+});
+</script>
+
+</body>
+</html>

+ 1 - 1
application/user/view/notice/edit.html

@@ -3,7 +3,7 @@
 {js href="__ROOT__/__JS__/ueditor/lang/zh-cn/zh-cn.js" /}
 
 	<div class="am-cf am-padding am-padding-bottom-0">
-        <div class="am-fl am-cf"><strong class="am-text-primary am-text-lg">个人资料</strong> / <small>Personal information</small></div>
+        <div class="am-fl am-cf"><strong class="am-text-primary am-text-lg">公告资料</strong> / <small>Notice information</small></div>
     </div>
 
       <hr/>

+ 1 - 1
config/config.php

@@ -143,7 +143,7 @@ return [
 
     // 视图输出字符串内容替换
     'view_replace_str'       => [
-    		'__PUBLIC__'=> 'public/',
+    		'__PUBLIC__'=> 'public',
     		'__CSS__'	=> 'public/static/css',
     		'__JS__'	=> 'public/static/js',
     ],

+ 6 - 2
template/menu.html

@@ -17,10 +17,14 @@
             <li>
             	<a href="{$rootpath}/user/notice/index">
             		<span class="am-icon-th"></span> 公告管理
-            		<span class="am-badge am-badge-secondary am-margin-right am-fr">24</span>
            		</a>
           	</li>
-            <li><a href="#"><span class="am-icon-calendar"></span> 邮件日志</a></li>
+            <li>
+            	<a href="{$rootpath}/user/mail/index">
+            		<span class="am-icon-bolt"></span> 邮件管理
+            		<span class="am-badge am-badge-warning am-margin-right am-fr">{$no_send}</span>
+           		</a>
+         	</li>
             <li><a href="#"><span class="am-icon-bug"></span> 404</a></li>
           </ul>
         </li>