rabin 1 рік тому
батько
коміт
c7577fd83d

+ 1 - 1
assets/layadmin/html/inc/script.html

@@ -41,4 +41,4 @@
 <script type="text/javascript" src="../script/lib/layui/xm-select/xm-select.js"></script>
 
 <!-- 加载主要js,很乱,后续优化 -->
-<script type="text/javascript" src="../script/lib/manage/main.js?721"></script>
+<script type="text/javascript" src="../script/lib/manage/main.js?722"></script>

+ 32 - 17
database/admin.php

@@ -1,7 +1,7 @@
 <?php
 /*
 |--------------------------------------------------------------------------
-| admin.php 管理员
+| admin.php 账户
 |--------------------------------------------------------------------------
 */
 # 定义几个常用的选项
@@ -34,7 +34,7 @@ if($cur && $cur['role'] > 1)
 		'role_id' => implode(',', $child),
 	));
 
-	# 配置当前列表页的参数 只能查看自己下属的管理员
+	# 配置当前列表页的参数 只能查看自己下属的账户
 	Dever::$global['model']['manage/admin-list'] = array
 	(
 		'option' => array
@@ -102,7 +102,7 @@ return array
 	# 表名
 	'name' => 'admin',
 	# 显示给用户看的名称
-	'lang' => '管理账户设置',
+	'lang' => '账户管理',
 	'desc' => $desc,
 	# 表类型 值为\innodb\myisam\,默认为innodb,仅在mysql类型有效
 	'type' => 'innodb',
@@ -152,7 +152,7 @@ return array
 	# 显示到后台快捷发布中,值为排序
 	'fast' => 1,
 	*/
-	'order' => 9,
+	'order' => 100,
 
 	# 检测email必须唯一
 	'check' => 'email',
@@ -169,6 +169,7 @@ return array
 			'type' => 'delete',
 		),
 
+		/*
 		'manage/admin_group' => array
 		(
 			# 更新时的条件,另外一个表的字段 => 本表的字段
@@ -177,7 +178,7 @@ return array
 			'update' => array('group_id' => 'group'),
 			# 同步更新的类型,delete为先删再插入,update为先查询是否存在,存在直接更新,不存在则插入, only为仅更新
 			'type' => 'delete',
-		)
+		)*/
 	),
 	/*
 	# 查询出数据时,填充默认数据
@@ -229,7 +230,7 @@ return array
 		'id' 		=> array
 		(
 			'type' 		=> 'int-11',
-			'name' 		=> '管理员ID',
+			'name' 		=> '账户ID',
 			'default' 	=> '',
 			'desc' 		=> '',
 			'match' 	=> 'is_numeric',
@@ -250,9 +251,9 @@ return array
 		'username'		=> array
 		(
 			'type' 		=> 'varchar-24',
-			'name' 		=> '管理员名',
+			'name' 		=> '账户名',
 			'default' 	=> '',
-			'desc' 		=> '请输入管理员名',
+			'desc' 		=> '请输入账户名',
 			'match' 	=> 'is_string',
 			'update'	=> 'text',
 			# 自动完成功能,第一个参数是请求的地址,请自行实现,第二个参数是要使用的字段,共有id和value两个选择,id会特殊处理,value则直接把当前值写入,第三个参数是直接替换当前的值,第四个参数是当前表里的字段名,一般为分类的id
@@ -273,7 +274,7 @@ return array
 		'email'		=> array
 		(
 			'type' 		=> 'varchar-150',
-			'name' 		=> '邮箱-可用于登录,请准确填写,不允许重复',
+			'name' 		=> '登录邮箱',
 			'default' 	=> '',
 			'desc' 		=> '请输入邮箱',
 			'match' 	=> Dever::rule('email'),
@@ -635,7 +636,7 @@ return array
 		'mobile'		=> array
 		(
 			'type' 		=> 'varchar-32',
-			'name' 		=> '手机号',
+			'name' 		=> '登录手机号',
 			'default' 	=> '',
 			'desc' 		=> '请输入手机号',
 			'match' 	=> Dever::rule('mobile'),
@@ -650,9 +651,9 @@ return array
 		'password'		=> array
 		(
 			'type' 		=> 'varchar-64',
-			'name' 		=> '管理员密码',
+			'name' 		=> '账户密码',
 			'default' 	=> '',
-			'desc' 		=> '请输入管理员密码',
+			'desc' 		=> '请输入账户密码',
 			'match' 	=> 'option',
 			'update'	=> 'password',
 			'callback'	=> 'hash.sha256',
@@ -661,9 +662,9 @@ return array
 		'config'		=> array
 		(
 			'type' 		=> 'int-11',
-			'name' 		=> '人性化配置',
+			'name' 		=> '后台配置',
 			'default' 	=> '1',
-			'desc' 		=> '个性化配置',
+			'desc' 		=> '后台配置',
 			'match' 	=> 'is_numeric',
 			'option' 	=> $config,
 			'update'	=> 'select',
@@ -699,7 +700,7 @@ return array
 			'desc' 		=> '请选择所属部门',
 			'match' 	=> 'option',
 			'option' 	=> $company_group,
-			'update'	=> 'checkbox',
+			//'update'	=> 'checkbox',
 			/*
 			'option' 	=> $company,
 			'update'	=> 'checkbox',
@@ -718,11 +719,23 @@ return array
                     'update_search' => 'scm_product/lib/manage.searchProduct?{id}{role,company}',
                 ),
 			),*/
-			'list'		=> 'Dever::load("manage/company.getGroupName", "{company}", "{group}")',
+			'list'		=> 'Dever::load("manage/company.getGroupName", {id})',
 			# 取代option,从接口里读取选项
 			//'update_search' => 'goods/lib/manage.search_sku',
 		),
 
+		'manage/admin_group'=> array
+        (
+            'name'      => '公司部门设置',
+            'default'   => '',
+            'desc'      => '公司部门设置',
+            'match'     => 'option',
+            # 同步更新另外一个表的内容,两个表相关联的id,更新另一个表的字段
+            'sync'      => array('admin_id' => 'id'),
+            'update'    => array(1),
+            'update_type' => 2,
+        ),
+
 		'auth'		=> array
 		(
 			'type' 		=> 'text-255',
@@ -802,6 +815,8 @@ return array
 
 	'manage' => array
 	(
+		'insert_end' => 'manage/group.syncOne',
+		'update_end' => 'manage/group.syncOne',
 		# 开放子管理权限,该列表和所有操作都有权限控制
 		//'auth' => true,
 		# 设置公司权限
@@ -907,7 +922,7 @@ return array
         (
             //'新增兑换码' => array('fast', 1, 'config&where_id=1'),
             '公司设置' => array('list', 'company&oper_parent=admin'),
-            '部门设置' => array('list', 'group&oper_parent=admin'),
+            //'部门设置' => array('list', 'group&oper_parent=admin'),
         ),
 	),
 	

+ 57 - 7
database/admin_group.php

@@ -4,7 +4,11 @@
 | admin.php 管理员表
 |--------------------------------------------------------------------------
 */
-
+$type = array
+(
+	1 => '普通员工',
+	2 => '部门主管',
+);
 return array
 (
 	# 表名
@@ -12,6 +16,11 @@ return array
 	# 显示给用户看的名称
 	'lang' => '管理员部门关联表',
 	'menu' => false,
+	'end' => array
+	(
+		'insert' => 'manage/group.update',
+		'update' => 'manage/group.update',
+	),
 
 	# 数据结构
 	'struct' => array
@@ -34,19 +43,60 @@ return array
 			'default' 	=> '',
 			'desc' 		=> '管理员ID',
 			'match' 	=> 'is_numeric',
-			'update'	=> 'text',
-			'list'		=> true,
+			'update'	=> 'hidden',
+			//'list'		=> true,
+			'value'		=> Dever::input('search_option_admin_id'),
+		),
+
+		'company'		=> array
+		(
+			'type' 		=> 'varchar-800',
+			'name' 		=> '公司与部门',
+			'default' 	=> '',
+			'desc' 		=> '公司与部门',
+			'match' 	=> 'is_numeric',
+			'search'	=> 'linkage',
+			'update'	=> 'linkage',
+			'option'	=> Dever::url('group.get', 'manage'),
+		),
+
+		'company_id'		=> array
+		(
+			'type' 		=> 'int-11',
+			'name' 		=> '公司',
+			'default' 	=> '',
+			'desc' 		=> '公司',
+			'match' 	=> 'is_numeric',
 		),
 
 		'group_id'		=> array
 		(
 			'type' 		=> 'int-11',
-			'name' 		=> '部门ID',
+			'name' 		=> '部门',
 			'default' 	=> '',
-			'desc' 		=> '部门ID',
+			'desc' 		=> '部门',
 			'match' 	=> 'is_numeric',
-			'update'	=> 'text',
-			'list'		=> true,
+		),
+
+		'type'		=> array
+		(
+			'type' 		=> 'int-11',
+			'name' 		=> '类型',
+			'default' 	=> '1',
+			'desc' 		=> '类型',
+			'match' 	=> 'is_numeric',
+			'option' 	=> $type,
+			'update'	=> 'radio',
+			//'list'		=> true,
+		),
+
+		'state'		=> array
+		(
+			'type' 		=> 'tinyint-1',
+			'name' 		=> '状态',
+			'default' 	=> '1',
+			'desc' 		=> '请选择状态',
+			'match' 	=> 'option',
 		),
 		
 		'cdate'		=> array

+ 1 - 0
database/api.php

@@ -40,6 +40,7 @@ return array
 	'html' => $html,
 	'doc' => $doc,
 	'gettype' => $type,
+	'menu' => false,
 	# 数据结构
 	'struct' => array
 	(

+ 31 - 3
database/company.php

@@ -82,7 +82,19 @@ return array
             'show'      => 'is_project=2',
             //'list'      => true,
         ),
-        
+
+        'manage/group'=> array
+        (
+            'name'      => '部门设置',
+            'default'   => '',
+            'desc'      => '部门设置',
+            'match'     => 'option',
+            # 同步更新另外一个表的内容,两个表相关联的id,更新另一个表的字段
+            'sync'      => array('company_id' => 'id'),
+            'update'    => array(1),
+            'update_type' => 2,
+        ),
+         
         'state'     => array
         (
             'type'      => 'tinyint-1',
@@ -116,6 +128,8 @@ return array
     # 管理功能
     'manage' => array
     (
+        'insert_check' => 'manage/group',
+        'update_check' => 'manage/group',
         'delete' => false,
         'insert' => false,
         'edit' => false,
@@ -123,12 +137,12 @@ return array
         # 自定义快捷新增和编辑
         'button' => array
         (
-        '新增' => array('fast'),
+            '新增' => array('fast'),
         ),
         # 快捷更新
         'list_button' => array
         (
-        'edit' => array('编辑'),
+            'edit' => array('编辑'),
         ),
     ),
 
@@ -157,5 +171,19 @@ return array
             'order' => array('id' => 'asc'),
             'col' => '*',
         ),
+
+        'getAll' => array
+        (
+            # 匹配的正则或函数 选填项
+            'option' => array
+            (
+                'ids' => array('yes-id', 'in'),
+                'noid' => array('yes-id', 'not in'),
+                'state' => 1,
+            ),
+            'type' => 'all',
+            'order' => array('id' => 'desc'),
+            'col' => 'id,id as value, name',
+        ),
     ),
 );

+ 13 - 2
database/config.php

@@ -37,8 +37,9 @@ return array
 	# 表名
 	'name' => 'config',
 	# 显示给用户看的名称
-	'lang' => '个性化配置',
-	'order' => 10,
+	'lang' => '后台配置',
+	'order' => 70,
+	'info' => '后台配置设置之后,每个后台账户会根据该配置展示信息',
 	# 数据结构
 	'struct' => array
 	(
@@ -188,6 +189,16 @@ return array
 	),
 	*/
 
+	'manage' => array
+	(
+		'link' => 'parent=config',
+		'button' => array
+        (
+            '后台公告' => array('list', 'notice'),
+            '后台帮助' => array('list', 'help'),
+        ),
+	),
+
 	# 默认值
 	'default' => array
 	(

+ 1 - 0
database/cron.php

@@ -47,6 +47,7 @@ return array
 	1. 常规任务:请将 ```* * * * * root php '.$path.'daemon/main.php``` 放到cron中[建议每分钟执行一次] 
 	2. 用户触发:请在 ```config/base.php里开启cron=true``` [一般适用于虚拟主机]
 	3. 长期运行:请执行 ```php '.$path.'daemon/loop.php 1>/dev/null 2>&1 &``` 指令,放置后台运行[一般用于队列等需要长期运行的项目]'),
+	'menu' => false,
 	# 数据结构
 	'struct' => array
 	(

+ 21 - 20
database/group.php

@@ -10,16 +10,6 @@ $option = array
 	1 => '可用',
 	2 => '不可用',
 );
-$company = function()
-{
-    $array = array();
-    $data = Dever::db('manage/company')->state();
-    if($data)
-    {
-        $array += $data;
-    }
-    return $array;
-};
 $area = function()
 {
 	return Dever::load('setting/area-getAll', array('where_area_id_parent' => 0));
@@ -52,15 +42,11 @@ $config = array
 		'company_id'      => array
         (
             'type'      => 'int-11',
-            'name'      => '选择公司',
+            'name'      => '公司名称',
             'default'   => '',
             'desc'      => '公司名称',
             'match'     => 'is_numeric',
-            'update'    => 'radio',
-            'list_name' => '公司名称',
-            'option'    => $company,
-            'list'      => true,
-            'search'    => 'select',
+            'update'    => 'hidden',
         ),
 		
 		'name'		=> array
@@ -91,14 +77,14 @@ $config = array
 		'reorder'		=> array
 		(
 			'type' 		=> 'int-11',
-			'name' 		=> '排序',
+			'name' 		=> '排序-数字越大越靠前',
 			'default' 	=> '1',
 			'desc' 		=> '请输入排序',
 			'match' 	=> 'option',
-			//'update'	=> 'text',
-			//'search'	=> 'order',
+			'update'	=> 'text',
+			'search'	=> 'order',
 			//'list'		=> true,
-			//'order'		=> 'desc',
+			'order'		=> 'desc',
 			//'edit'		=> true,
 		),
 
@@ -179,6 +165,21 @@ $config = array
             'order' => array('id' => 'desc'),
             'col' => '*',
         ),
+
+        'getAll' => array
+		(
+			# 匹配的正则或函数 选填项
+			'option' => array
+			(
+				'company_id' => 'yes',
+				'ids' => array('yes-id', 'in'),
+				'noid' => array('yes-id', 'not in'),
+				'state' => 1,
+			),
+			'type' => 'all',
+			'order' => array('id' => 'desc'),
+			'col' => 'id,id as value, name',
+		),
     ),
 );
 

+ 3 - 2
database/help.php

@@ -21,8 +21,9 @@ return array
     # 表名
     'name' => 'help',
     # 显示给用户看的名称
-    'lang' => '帮助管理',
-    'order' => 6,
+    'lang' => '后台帮助',
+    'order' => 68,
+    'menu' => false,
     # 数据结构
     'struct' => array
     (

+ 9 - 1
database/log.php

@@ -29,7 +29,7 @@ return array
 	# 表名
 	'name' => 'log',
 	# 显示给用户看的名称
-	'lang' => '管理操作日志',
+	'lang' => '操作日志',
 	# 关闭验证重复提交功能
 	'submit' => false,
 	'config_type' => $type,
@@ -41,6 +41,7 @@ return array
 		'value' => array(2000,2010),//分区的值
 		'exp' => 'LESS THEN',//LESS THEN还是in等表达式
 	),
+	'order' => 66,
 
 	# 表类型 值为\innodb\myisam\,默认为innodb,仅在mysql类型有效
 	//'type' => 'innodb',
@@ -183,6 +184,13 @@ return array
 		'delete' => false,
 		'edit' => false,
 		'insert' => false,
+		'link' => 'parent=log',
+		'button' => array
+        (
+            '字段记录' => array('list', 'opt'),
+            '计划任务' => array('list', 'cron'),
+            '接口列表' => array('list', 'api'),
+        ),
 	),
 	
 	# 索引

+ 2 - 2
database/menu.php

@@ -60,8 +60,8 @@ return array
 	# 表名
 	'name' => 'menu',
 	# 显示给用户看的名称
-	'lang' => '管理菜单设置',
-	'order' => 2,
+	'lang' => '菜单管理',
+	'order' => 80,
 	'check' => 'key',
 	'end' => array
 	(

+ 3 - 2
database/notice.php

@@ -21,8 +21,9 @@ return array
 	# 表名
 	'name' => 'notice',
 	# 显示给用户看的名称
-	'lang' => '后台公告管理',
-	'order' => 7,
+	'lang' => '后台公告',
+	'order' => 69,
+	'menu' => false,
 	# 数据结构
 	'struct' => array
 	(

+ 2 - 1
database/opt.php

@@ -45,12 +45,13 @@ return array
 	# 表名
 	'name' => 'opt',
 	# 显示给用户看的名称
-	'lang' => '字段记录表',
+	'lang' => '字段日志',
 	'desc' => Dever::markdown('**本表记录所有数据表文件里的request方法:**
 	1. 启用本表的记录功能,不会影响所有业务逻辑的执行效率,但会消耗服务器资源。建议仅在测试环境下开启或短时间内开启。请在config/base项中添加opt来确定是否启用。 
 	2. 在这里可以根据相应的记录,手动添加索引。'),
 	# 表类型 值为\innodb\myisam\,默认为innodb,仅在mysql类型有效
 	'type' => 'innodb',
+	'menu' => false,
 	# 数据结构
 	'struct' => array
 	(

+ 2 - 2
database/role.php

@@ -110,9 +110,9 @@ $config = array
 	# 表名
 	'name' => 'role',
 	# 显示给用户看的名称
-	'lang' => '管理角色设置',
+	'lang' => '角色管理',
 	'desc' => $desc,
-	'order' => 8,
+	'order' => 90,
 	# 表类型 值为\innodb\myisam\,默认为innodb,仅在mysql类型有效
 	'type' => 'innodb',
 	# 数据结构

+ 36 - 11
src/Company.php

@@ -215,20 +215,45 @@ class Company extends Save
         return 'ok';
     }
 
-    public function getGroupName($company, $group)
+    public function getGroupName($id)
     {
-        if (!$group) {
-            return '';
-        }
-        $html = array();
-        $where['ids'] = $group;
-        $group = Dever::db('manage/group')->getData($where);
-        foreach ($group as $k => $v) {
-            $html[] = $v['name'];
+        $data = Dever::db('manage/admin_group')->select(array('admin_id' => $id));
+
+        if ($data) {
+            $company = array();
+            foreach ($data as $k => $v) {
+                $company[$v['company_id']][] = $v['group_id'];
+            }
+
+            if ($company) {
+                $result = array();
+                foreach ($company as $k => $v) {
+                    $info = Dever::db('manage/company')->find($k);
+                    $group = array();
+                    foreach ($v as $k1 => $v1) {
+                        $temp = Dever::db('manage/group')->find($v1);
+                        $group[$v1] = $temp['name'];
+                    }
+                    $result[$info['name']] = implode(',', $group);
+                }
+
+                return Dever::table($result);
+            }
         }
 
-        $html = implode(',', $html);
+        return '';
+    }
+
+    public function showGroup_api()
+    {
+        $value = Dever::input('value');
+        $data = array();
+        $config['group_id'] = Dever::db('manage/admin_group')->config['struct']['group_id'];
+        $config['group_id']['update'] = 'select';
+        $config['group_id']['option'] = 'manage/group.search?company_id=' . $value;
 
-        return $html;
+        $data = Dever::load('manage/database')->update_struct(array('struct' => $config), false, $data, -1, '', false, false);
+        
+        return $data;
     }
 }

+ 6 - 3
src/Database.php

@@ -3957,7 +3957,7 @@ class Database
                         $table_key = '1';
                         if (isset($param['value']) && $param['value']) {
                             $table_body .= '<tr class="table_copy" style="display:none;">';
-                            $table_up = 'up';
+                            $table_up = 'dever_up';
                         } else {
                             $table_body .= '<tr>';
                             $table_up = 'update';
@@ -3965,7 +3965,7 @@ class Database
                     } else {
                         $table_body .= '<tr class="table_copy" style="display:none;">';
                         $table_key = '-1';
-                        $table_up = 'up';
+                        $table_up = 'dever_up';
                     }
 
                     if ($table_key) {
@@ -4101,7 +4101,7 @@ class Database
                             if ($hv['update'] == 'linkage') {
                                 $hv['update_width'] = '30%';
                             }
-                            $this->update_html($hv, $hk, $hk, array(), $s, '', 'up');
+                            $this->update_html($hv, $hk, $hk, array(), $s, '', 'dever_up');
                             if ($hv['update'] == 'hidden') {
                                 $table_header .= '<td style="display:none;">'.$n.'</td>';
                                 $table_body .= '<td style="display:none;">'.$s.'</td>';
@@ -4901,6 +4901,9 @@ class Database
                     if ($method == 'insert' && isset($config['manage']['insert_end'])) {
                         Dever::load($config['manage']['insert_end'], $id);
                     }
+                    if ($method == 'update' && isset($config['manage']['update_end'])) {
+                        Dever::load($config['manage']['update_end'], $id);
+                    }
                 }
             }
         }

+ 128 - 0
src/Group.php

@@ -0,0 +1,128 @@
+<?php
+
+namespace Manage\src;
+
+use Dever;
+
+class Group
+{
+    private $default = array
+    (
+        'value' => -1,
+        'name' => '请选择',
+    );
+
+    private $search_default = array
+    (
+        'value' => -1,
+        'name' => '选择公司',
+    );
+
+    public function get_api()
+    {
+        # 当前联动级别
+        $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'] = '选择部门';
+            }
+        } else {
+            $default = $this->default;
+        }
+
+        if ($level_id < 0) {
+            Dever::alert('error');
+        }
+
+        if ($level_num == 1) {
+            $data = Dever::db('manage/company')->getAll();
+        } elseif ($level_num == 2) {
+            $data = Dever::db('manage/group')->getAll(array('company_id' => $level_id));
+        }
+
+        if (!$data) {
+            Dever::alert('error');
+        }
+
+        if ($level_search || $level_num >= 1) {
+            array_unshift($data, $default);
+        }
+        $result['level_total'] = 2;
+        $result['list'] = $data;
+        return $result;
+    }
+
+    public function string($info, $im = ',')
+    {
+        if ($info) {
+            if (is_string($info)) {
+                $info = explode(',', $info);
+            }
+            
+            $result = array();
+            foreach ($info as $k => $v) {
+                if ($k == 0) {
+                	$company = Dever::db('manage/company')->one($v);
+                    $result[$k] = $company['name'];
+                } elseif ($k == 1) {
+                    $group = Dever::db('manage/group')->one($v);
+                    $result[$k] = $group['name'];
+                }
+            }
+            return implode($im, $result);
+        }
+        return '';
+    }
+
+    public function update($id, $name, $data)
+    {
+        $info = Dever::db('manage/admin_group')->find($id);
+        $company = Dever::param('company', $data);
+        if ($company) {
+            $update['where_id'] = $info['id'];
+            $update['company_id'] = $company[0];
+            $update['group_id'] = $company[1];
+            Dever::db('manage/admin_group')->update($update);
+        }
+    }
+
+    # 同步
+    public function syncOne($id)
+    {
+        $data = Dever::db('manage/admin_group')->select(array('admin_id' => $id));
+        if ($data) {
+            $company = $group = array();
+            foreach ($data as $k => $v) {
+                $company[$v['company_id']] = $v['company_id'];
+                $group[$v['group_id']] = $v['group_id'];
+            }
+            $company = implode(',', $company);
+            $group = implode(',', $group);
+
+            $up['where_id'] = $id;
+            $up['company'] = $company;
+            $up['group'] = $group;
+            Dever::db('manage/admin')->update($up);
+        }
+    }
+
+    # 同步
+    public function sync_api()
+    {
+        $data = Dever::db('manage/admin')->select();
+        if ($data) {
+            foreach ($data as $k => $v) {
+                $this->syncOne($v['id']);
+            }
+        }
+
+        return 'ok';
+    }
+}