rabin 2 years ago
parent
commit
1e6d77c017

+ 1 - 0
assets/layadmin/html/project/database/update.html

@@ -61,6 +61,7 @@
     <input type="hidden" name="url" id="url" />
     <input type="hidden" name="project" id="project" />
     <input type="hidden" name="table" id="table" />
+    <input type="hidden" name="menu_id" id="menu_id" />
     <input type="hidden" name="update_where_id" id="update_where_id"/>
     <input type="hidden" name="copy_num" id="copy_num" value="0"/>
     <iframe id="f1" name="f1" style="display:none;"></iframe>

+ 3 - 0
assets/moltran/html/project/database/update.html

@@ -78,6 +78,9 @@
                 <input type="hidden" name="url" id="url" />
                 <input type="hidden" name="project" id="project" />
                 <input type="hidden" name="table" id="table" />
+                <input type="hidden" name="menu_id" id="menu_id" />
+                <input type="hidden" name="update_where_id" id="update_where_id"/>
+                <input type="hidden" name="copy_num" id="copy_num" value="0"/>
                 <iframe id="f1" name="f1" style="display:none;"></iframe>
                   <div class="row">
                     <div class="col-sm-12">

+ 12 - 0
database/admin.php

@@ -701,5 +701,17 @@ return array
 				'password' => 'yes',
 			),
 		),
+
+
+		'getSearch' => array
+        (
+            # 匹配的正则或函数 选填项
+            'option' => array
+            (
+                'col' => array('yes-mobile,username,email', 'like'),
+            ),
+            'type' => 'all',
+            'col' => '*|id',
+        ),
 	),
 );

+ 67 - 11
database/log.php

@@ -16,6 +16,14 @@ $admin = function()
 	return $array;
 };
 
+$type = array
+(
+	1 => '新增',
+	2 => '更新',
+	3 => '删除',
+	4 => '恢复',
+);
+
 return array
 (
 	# 表名
@@ -24,6 +32,7 @@ return array
 	'lang' => '管理操作日志',
 	# 关闭验证重复提交功能
 	'submit' => false,
+	'config_type' => $type,
 	# 建表时进行分区,一般按照时间分区,仅在mysql类型有效
 	'partition' => array
 	(
@@ -45,37 +54,65 @@ return array
 			'default' 	=> '',
 			'desc' 		=> '',
 			'match' 	=> 'is_numeric',
+			'list'		=> true,
 		),
 		
 		'project'		=> array
 		(
-			'type' 		=> 'varchar-32',
+			'type' 		=> 'varchar-80',
 			'name' 		=> '项目名',
 			'default' 	=> '',
 			'desc' 		=> '请输入项目名',
 			'match' 	=> 'is_string',
-			'list'		=> 'Dever::load("manage/project.name", "{project}")',
+			//'list'		=> 'Dever::load("manage/project.name", "{project}")',
 		),
 		
 		'table'		=> array
 		(
-			'type' 		=> 'varchar-32',
+			'type' 		=> 'varchar-80',
 			'name' 		=> '项目下的表名',
 			'default' 	=> '',
 			'desc' 		=> '项目下的表名',
 			'match' 	=> 'is_string',
-			'list'		=> 'Dever::load("manage/database.getTableName", "{project}", "{table}")',
+			//'list'		=> 'Dever::load("manage/database.getTableName", "{project}", "{table}")',
 		),
-		
-		'info'		=> array
+
+		'menu_id'		=> array
 		(
-			'type' 		=> 'longtext',
-			'name' 		=> '日志记录',
+			'type' 		=> 'varchar-80',
+			'name' 		=> '菜单',
 			'default' 	=> '',
-			'desc' 		=> '日志记录',
+			'desc' 		=> '菜单',
 			'match' 	=> 'is_string',
-			'list'		=> 'base64_decode("{info}")',
-			'modal'		=> '查看详情',
+			'search'    => 'linkage',
+            'update'    => 'linkage',
+            'option'    => Dever::url('menu.getManageMenu', 'manage'),
+			//'list'		=> 'Dever::load("manage/menu-one#name", "{menu_id}")',
+			'list'		=> 'Dever::load("manage/src/lib/log.getMenuInfo", "{menu_id}")',
+		),
+
+		'name'		=> array
+		(
+			'type' 		=> 'varchar-80',
+			'name' 		=> '操作名',
+			'default' 	=> '',
+			'desc' 		=> '操作名',
+			'match' 	=> 'is_string',
+			'search'	=> 'fulltext',
+			'list'		=> true,
+		),
+
+		'type'		=> array
+		(
+			'type' 		=> 'tinyint-1',
+			'name' 		=> '操作类型',
+			'default' 	=> '1',
+			'desc' 		=> '操作类型',
+			'match' 	=> 'is_numeric',
+			'option' 	=> $type,
+			'search'	=> 'select',
+			'update'	=> 'radio',
+			'list'		=> true,
 		),
 		
 		'admin'		=> array
@@ -85,9 +122,27 @@ return array
 			'default' 	=> '',
 			'desc' 		=> '操作人',
 			'match' 	=> 'is_string',
+			'search'    => array
+            (
+                'api' => 'manage/admin-getSearch',
+                'col' => 'col',
+                'result' => 'id',
+                'search' => 'admin',
+            ),
 			'list'		=> 'Dever::load("manage/admin-one#username", {admin})',
 			//'option'	=> $admin,
+		),
+
+		'info'		=> array
+		(
+			'type' 		=> 'longtext',
+			'name' 		=> '操作记录',
+			'default' 	=> '',
+			'desc' 		=> '操作记录',
+			'match' 	=> 'is_string',
 			'search'	=> 'fulltext',
+			'list'		=> 'Dever::load("manage/src/lib/log.getInfo", "{id}")',
+			//'modal'		=> '查看详情',
 		),
 		
 		'tid'		=> array
@@ -97,6 +152,7 @@ return array
 			'default' 	=> '',
 			'desc' 		=> '来源表id',
 			'match' 	=> 'is_string',
+			//'list'		=> true,
 		),
 
 		'state'		=> array

+ 14 - 0
database/menu.php

@@ -358,5 +358,19 @@ return array
 			'type' => 'all',
 			//'order' => array('id' => 'desc'),
 		),
+
+		'getAll' => array
+		(
+			# 匹配的正则或函数 选填项
+			'option' => array
+			(
+				'menu_id' => 'yes',
+				'group_id' => 'yes',
+				'state' => 1,
+			),
+			'type' => 'all',
+			'order' => array('reorder' => 'desc', 'id' => 'asc'),
+			'col' => 'id,id as value, name',
+		),
 	),
 );

+ 11 - 1
database/menu_group.php

@@ -115,6 +115,16 @@ return array
 	# request 请求接口定义
 	'request' => array
 	(
-		
+		'getAll' => array
+		(
+			# 匹配的正则或函数 选填项
+			'option' => array
+			(
+				'state' => 1,
+			),
+			'type' => 'all',
+			'order' => array('reorder' => 'desc', 'id' => 'asc'),
+			'col' => 'id,id as value, name',
+		),
 	),
 );

+ 37 - 9
src/Database.php

@@ -220,6 +220,10 @@ class Database
         if ($page_type) {
             $param .= '&page_type=' . $page_type . '';
         }
+        $menu_id = Dever::input('menu_id');
+        if ($menu_id && !strstr($param, 'menu_id')) {
+            $param .= '&menu_id=' . $menu_id . '';
+        }
         if (!$project) {
             if ($key == 'add' || $key == 'update' || $key == 'delete' || $key == 'recovery') {
                 $project = $this->project;
@@ -3248,7 +3252,7 @@ class Database
                     $this->load($method, $param);
 
                     $struct = $this->struct_data($config['struct'], array($col => $value));
-                    Log::add($this->project, $this->table, array('method' => $method, 'input' => $struct, 'struct' => $config['struct']), $this->id);
+                    Log::add($this->project, $this->table, $this->menu_id, '', $method, $struct, $this->id);
 
                     Dever::out('yes');
 
@@ -3417,7 +3421,7 @@ class Database
 
                 if ($id) {
                     $struct = $this->struct_data($config['struct'], $v, $old);
-                    Log::add($this->project, $this->table, array('method' => $method, 'input' => $struct), $this->id ? $this->id : $id);
+                    Log::add($this->project, $this->table, $this->menu_id, '', $method, $struct, $id ? $id : $this->id);
                 }
 
                 if (isset($update_other_id) && $update_other_id) {
@@ -3442,6 +3446,11 @@ class Database
     {
         $log = $tlog = array();
         foreach ($struct as $i => $j) {
+            /*
+            if ($i == 'reorder' || $i == 'id') {
+                continue;
+            }
+            */
             if (isset($j['list_name'])) {
                 $j['name'] = $j['list_name'];
             } elseif (strpos($j['name'], '-')) {
@@ -3486,10 +3495,16 @@ class Database
                         }
                     }
                 } elseif (strpos($log[$j['name']], 'http://wx.qlogo.cn/') !== false || strpos($log[$j['name']], '.jpg') !== false || strpos($log[$j['name']], '.gif') !== false || strpos($log[$j['name']], '.png') !== false) {
-                    $log[$j['name']] = '<img layer-src="' . $log[$j['name']] . '" src="' . $log[$j['name']] . '" width="150">';
+                    $old[$i] = Dever::pic($old[$i]);
 
-                    if (isset($old[$i]) && $old[$i]) {
-                        $old[$i] = '<img layer-src="' . $old[$i] . '" src="' . $old[$i] . '" width="150">';
+                    if ($old[$i] != $log[$j['name']]) {
+                        $log[$j['name']] = '<img layer-src="' . $log[$j['name']] . '" src="' . $log[$j['name']] . '" width="150">';
+
+                        if (isset($old[$i]) && $old[$i]) {
+                            $old[$i] = '<img layer-src="' . $old[$i] . '" src="' . $old[$i] . '" width="150">';
+                        }
+                    } else {
+                        $old[$i] = $log[$j['name']] = '<img layer-src="' . $log[$j['name']] . '" src="' . $log[$j['name']] . '" width="150">';
                     }
 
                 } elseif (is_numeric($log[$j['name']]) && (strpos($i, 'time') !== false || strpos($i, 'date') !== false)) {
@@ -3498,10 +3513,10 @@ class Database
                         $old[$i] = date("Y-m-d H:i:s", $old[$i]);
                     }
                 } elseif (isset($j['decode'])) {
-                    $log[$j['name']] = json_decode(base64_decode($log[$j['name']]), true);
+                    $log[$j['name']] = Dever::array_decode($log[$j['name']]);
 
                     if (isset($old[$i]) && $old[$i]) {
-                        $old[$i] = json_decode(base64_decode($old[$i]), true);
+                        $old[$i] = Dever::array_decode($old[$i]);
                     }
                 }
 
@@ -3525,8 +3540,14 @@ class Database
                     $log[$j['name']] = implode(',', $name);
                 }
 
-                if (isset($old[$i]) && $old[$i] != $tlog[$j['name']]) {
-                    $log[$j['name']] = array('old' => $old[$i], 'new' => $log[$j['name']]);
+                if ($log[$j['name']] == 'null') {
+                    unset($log[$j['name']]);
+                }
+
+                if (isset($log[$j['name']]) && isset($old[$i]) && $old[$i] != $tlog[$j['name']] && $old[$i] != $log[$j['name']]) {
+                    $log[$j['name']] = array('更新前' => $old[$i], '更新后' => $log[$j['name']]);
+                } elseif ($old) {
+                    //unset($log[$j['name']]);
                 }
             }
         }
@@ -3547,10 +3568,15 @@ class Database
 
         $config = $this->config();
         if (isset($config['struct']['state']) && (!isset($config['manage']['delete']) || (isset($config['manage']['delete']) && $config['manage']['delete']))) {
+            $name = '逻辑删除';
             $this->load('update', array('where_id' => $this->id, 'state' => 2));
         } else {
+            $name = '物理删除';
             $this->load('delete', $this->id);
         }
+
+        Log::add($this->project, $this->table, $this->menu_id, '', 3, array('ID' => $this->id, '方式' => $name), $this->id);
+
         return 'reload';
         return 'reloaderror';
     }
@@ -3568,6 +3594,8 @@ class Database
 
         $this->load('update', array('where_id' => $this->id, 'state' => 1));
 
+        Log::add($this->project, $this->table, $this->menu_id, '', 4, array('ID' => $this->id, '方式' => '逻辑恢复'), $this->id);
+
         return 'reload';
     }
 

+ 60 - 14
src/Lib/Log.php

@@ -10,23 +10,69 @@ class Log
      *
      * @return string
      */
-    public static function add($project, $table, $info, $tid)
+    public static function add($project, $table, $menu, $name, $method, $input = array(), $tid = -1)
     {
+        if (!$input) {
+            return;
+        }
+        if ($method == 'insert') {
+            $method = 1;
+        } elseif ($method == 'update') {
+            $method = 2;
+        }
         $admin = Dever::load('manage/auth.data');
+        if (!$name) {
+            $project_name = Dever::load("manage/project.name", $project);
+            $table_name = Dever::load("manage/database.getTableName", $project, $table);
+            $name = $project_name . '.' . $table_name;
+        }
 
-        $data['操作'] = $info['method'];
-        $data['操作人'] = $admin['username'] . '-' . $admin['id'];
-        $data['操作IP'] = Dever::ip();
-        $data['操作时间'] = date('Y-m-d H:i:s');
-        $data['数据ID'] = $tid;
-        //$data['old'] = Dever::load($project . '/' . $table . '-one', $tid);
-        $data += $info['input'];
-
-        $param['add_project'] = $project;
-        $param['add_table'] = $table;
-        $param['add_info'] = base64_encode(Dever::table($data));
-        $param['add_admin'] = $admin['id'];
-        $param['add_tid'] = $tid;
+        if (!isset($input['ID'])) {
+            $array['ID'] = $tid; 
+            $array += $input;
+            $input = $array;
+        }
+        
+        $param['project'] = $project;
+        $param['table'] = $table;
+        $menu_info = Dever::db('manage/menu')->one($menu);
+        $menu_array = array();
+        if ($menu) {
+            $parent = Dever::db('manage/menu')->one($menu_info['menu_id']);
+            if ($parent) {
+                $group = Dever::db('manage/menu_group')->one($parent['group_id']);
+                $menu_array = array($group['id'], $parent['id'], $menu);
+            } else {
+                $menu_array = array($menu);
+            }
+        } else {
+            $menu_array = array($menu);
+        }
+        $param['menu_id'] = implode(',', $menu_array);
+        $param['name'] = $name;
+        $param['type'] = $method;
+        $param['info'] = Dever::json_encode($input);
+        $param['admin'] = $admin['id'];
+        $param['tid'] = $tid;
+        $param['ip'] = Dever::ip();
         return Dever::load('manage/log-insert', $param);
     }
+
+    public function getInfo($id)
+    {
+        $info = Dever::db('manage/log')->one($id);
+        $info = Dever::json_decode($info['info']);
+        //print_r($info);die;
+        return Dever::table($info);
+    }
+
+    public function getMenuInfo($menu)
+    {
+        $array = explode(',', $menu);
+        $group = Dever::db('manage/menu_group')->one($array[0]);
+        $parent = Dever::db('manage/menu')->one($array[1]);
+        $menu = Dever::db('manage/menu')->one($array[2]);
+
+        return $group['name'] . '<br />' . $parent['name'] . '<br />' . $menu['name'];
+    }
 }

+ 62 - 0
src/Menu.php

@@ -43,6 +43,68 @@ class Menu
 
     }
 
+    public function getManageMenu()
+    {
+        # 联动总数,默认到县区
+        $level_total = Dever::input('level_total', 3);
+
+        # 当前联动级别
+        $level_num = Dever::input('level_num');
+
+        # 一般为id
+        $level_id = Dever::input('level_id');
+
+        # 是否是搜索列表页
+        $level_search = Dever::input('level_search');
+        if ($level_search) {
+            $default = $this->search_default;
+            if ($level_num == 1) {
+                $default['name'] = '分组选择';
+            } elseif ($level_num == 2) {
+                $default['name'] = '主菜单选择';
+            } elseif ($level_num == 3) {
+                $default['name'] = '子菜单选择';
+            }
+        } else {
+            $default = $this->default;
+        }
+
+        if ($level_num == 1) {
+            $data = Dever::db('manage/menu_group')->getAll();
+        } elseif ($level_num == 2) {
+            $where = array('group_id' => $level_id, 'menu_id' => -1);
+            $data = Dever::db('manage/menu')->getAll($where);
+
+            if ($data) {
+                foreach ($data as $k => $v) {
+                    $child = Dever::db('manage/menu')->total(array('menu_id' => $v['id']));
+                    if (!$child) {
+                        unset($data[$k]);
+                    }
+                }
+            }
+            
+        } elseif ($level_num == 3) {
+            if ($level_id == -1) {
+                Dever::alert('error');
+            }
+            $where = array('menu_id' => $level_id);
+            $data = Dever::db('manage/menu')->getAll($where);
+        }
+
+        if (!$data) {
+            Dever::alert('error');
+        }
+
+        if ($level_search || $level_num > 1) {
+            array_unshift($data, $default);
+        }
+        
+        $result['level_total'] = $level_total;
+        $result['list'] = $data;
+        return $result;
+    }
+
     public function updateKey($id, $name, $data)
     {
         $key = Dever::param('key', $data);

+ 1 - 0
template/default/project/database/update.php

@@ -15,6 +15,7 @@ $view
 # 基本配置
 ->fetch('#project@value',		'manage/database.info#project')
 ->fetch('#table@value',		'manage/database.info#table') 
+->fetch('#menu_id@value',		'manage/database.info#menu_id') 
 ->fetch('#update_where_id@value',	'manage/database.info#id')
 ->fetch('#url@value',		'manage/database.info#list')
 

+ 1 - 0
template/layadmin/project/database/update.php

@@ -17,6 +17,7 @@ $view
 # 基本配置
 ->fetch('#project@value',		'manage/database.info#project')
 ->fetch('#table@value',		'manage/database.info#table') 
+->fetch('#menu_id@value',		'manage/database.info#menu_id') 
 ->fetch('#update_where_id@value',	'manage/database.info#id')
 ->fetch('#url@value',		'manage/database.info#list')