rabin 13 uur geleden
bovenliggende
commit
dedfb97df1
28 gewijzigde bestanden met toevoegingen van 26 en 2344 verwijderingen
  1. 0 167
      lib/Auth.php
  2. 0 17
      lib/Config.php
  3. 0 127
      lib/Data.php
  4. 0 76
      lib/Group.php
  5. 0 134
      lib/Menu.php
  6. 0 17
      lib/Module.php
  7. 0 863
      lib/Page.php
  8. 0 39
      lib/Recycler.php
  9. 0 91
      lib/Role.php
  10. 0 87
      lib/System.php
  11. 0 380
      lib/Test.php
  12. 0 319
      lib/Util.php
  13. 7 7
      manage/admin.php
  14. 1 1
      manage/config.php
  15. 1 1
      manage/cron.php
  16. 1 1
      manage/diy.php
  17. 1 1
      manage/group_manage.php
  18. 1 1
      manage/menu.php
  19. 1 1
      manage/recycler.php
  20. 4 4
      manage/role.php
  21. 2 3
      table/admin.php
  22. 1 1
      table/cron.php
  23. 1 1
      table/group_org.php
  24. 1 1
      table/group_org_job.php
  25. 1 1
      table/group_role.php
  26. 1 1
      table/group_user.php
  27. 1 1
      table/menu.php
  28. 1 1
      table/role.php

+ 0 - 167
lib/Auth.php

@@ -1,167 +0,0 @@
-<?php namespace Manage\Lib;
-use Dever;
-class Auth
-{
-    protected $login = true;
-    public $uid;
-    protected $user;
-    protected $system;
-    protected $system_info;
-    protected $info;
-    protected $func;
-    public $data = [];
-    public function __construct()
-    {
-        $info = Dever::load('util', 'manage')->auth();
-        if (!$info && $this->login) {
-            $info['uid'] = 1;
-            $info['extend']['system_id'] = 'no';
-            $info['extend']['system_id'] = 1;
-            $info['extend']['info_id'] = 1;
-            $info['extend']['module_id'] = 1;
-            $info['extend']['data_id'] = 1;
-            #Dever::error('请先登录');
-        }
-        $this->system = Dever::db('system', 'manage')->find($info['extend']['system_id']);
-        if (!$this->system) {
-            Dever::error('当前系统不存在');
-        }
-        $this->system_info = Dever::db($this->system['info_table'])->find($info['extend']['info_id']);
-        if (!$this->system) {
-            Dever::error('当前系统设置错误');
-        }
-
-        $this->uid = $info['uid'];
-        $this->user = Dever::db($this->system['user_table'])->find($this->uid);
-        if (!$this->user) {
-            Dever::error('请先登录');
-        }
-        $this->user['table'] = $this->system['user_table'];
-        $this->user['auth'] = ['module' => '', 'menu' => '', 'func' => ''];
-        if ($this->user['role']) {
-            $role = Dever::db($this->system['role_table'])->select(array('id' => ['in', $this->user['role']]));
-            foreach ($role as $k => $v) {
-                $this->user['auth']['module'] .= $v['module'] . ',';
-                $this->user['auth']['menu'] .= $v['menu'] . ',';
-                $this->user['auth']['func'] .= $v['auth'] . ',';
-            }
-        }
-        if ($this->user['auth']['module']) {
-            $this->user['auth']['module'] = rtrim($this->user['auth']['module'], ',');
-        }
-        if ($this->user['auth']['menu']) {
-            $this->user['auth']['menu'] = rtrim($this->user['auth']['menu'], ',');
-        }
-        if ($this->user['auth']['func']) {
-            $this->user['auth']['func'] = ',' . $this->user['auth']['func'];
-        }
-        $this->user['select'] = $info['extend'] ?? false;
-        if (!$this->user['select']) {
-            # 分别为系统id,系统基本信息id,模块id,模块数据id
-            $this->user['select'] = ['partition' => 'no', 'system_id' => 1, 'info_id' => 1, 'module_id' => 1, 'data_id' => 1];
-        }
-        $this->checkModule($this->user['select']['module_id']);
-        Dever::$data['muser'] = $this->user;
-    }
-
-    # 设置功能权限
-    public function getFunc($key, $name, $sort = 1, $param = '')
-    {
-
-        if (!$key) {
-            $key = md5(base64_encode($name));
-        }
-        /*
-        if ($param) {
-            if (is_array($param)) {
-                $param = Dever::json_encode($name);
-            }
-            $key = $key . '_' . md5($param);
-        }*/
-
-        if (!$this->menu) {
-            return false;
-        }
-        $data['menu_id'] = $this->menu['id'];
-        $data['key'] = $key;
-        $key = $key . $data['menu_id'];
-        if (isset($this->func[$key]['id'])) {
-            return $this->func[$key]['id'];
-        }
-        $this->func[$key] = Dever::db('menu_func', 'manage')->find($data);
-        $name = $this->menu['name'] . '-' . $name;
-        if (!$this->func[$key]) {
-            $data['name'] = $name;
-            $data['sort'] = $sort;
-            $id = Dever::db('menu_func', 'manage')->insert($data);
-            Dever::db('menu', 'manage')->update($this->menu['id'], ['func' => 1]);
-        } else {
-            /*
-            if ($info['name'] != $name) {
-                $data['name'] = $name;
-                $data['sort'] = $sort;
-                Dever::db('menu_func', 'manage')->update($info['id'], $data);
-                Dever::db('menu', 'manage')->update($this->menu['id'], ['func' => 1]);
-            }*/
-            $id = $this->func[$key]['id'];
-        }
-
-        if ($this->user['id'] == 1) {
-            return $id;
-        }
-        if ($this->user['auth']['func'] && strstr($this->user['auth']['func'], ',' . $id . ',')) {
-            return $id;
-        }
-        return false;
-    }
-
-    # 检测系统模块权限
-    protected function checkModule($module_id)
-    {
-        if ($this->user['id'] == 1) {
-            return;
-        }
-        if ($this->user['auth']['module'] && !Dever::check($this->user['auth']['module'], $module_id)) {
-            Dever::error('无系统权限');
-        }
-    }
-
-    # 检测菜单权限
-    protected function checkMenu($menu, $result = true)
-    {
-        if ($this->user['id'] == 1) {
-            if ($result) {
-                return false;
-            }
-            return;
-        }
-        if ($this->user['auth']['menu'] && !Dever::check($this->user['auth']['menu'], $menu)) {
-            if ($result) {
-                return true;
-            }
-            Dever::error('无菜单访问权限');
-        }
-        if ($result) {
-            return false;
-        }
-    }
-
-    # 检测功能权限
-    protected function checkFunc()
-    {
-        $id = Dever::input('func');
-        if (!$id) {
-            return false;
-        }
-        if ($this->user['id'] == 1) {
-            return $id;
-        }
-        if ($this->user['auth']['func'] && strstr($this->user['auth']['func'], ',' . $id . ',')) {
-            return $id;
-        }
-        if (isset($this->menu) && $this->menu && $this->menu['show'] != 1) {
-            return $id;
-        }
-        Dever::error('无操作权限');
-    }
-}

+ 0 - 17
lib/Config.php

@@ -1,17 +0,0 @@
-<?php namespace Manage\Lib;
-use Dever;
-use Dever\Project;
-class Config extends Auth
-{
-    public function getTree()
-    {
-        $data = Dever::db('config', 'manage')->select([]);
-        $result = [];
-        $result[] = [
-            'id' => 'root',
-            'name' => '全部配置',
-            'children' => $data,
-        ];
-        return $result;
-    }
-}

+ 0 - 127
lib/Data.php

@@ -1,127 +0,0 @@
-<?php namespace Manage\Lib;
-use Dever;
-# 配置一些常用的数据
-class Data
-{
-    public function getShortcuts($type)
-    {
-        if (strstr($type, 'range')) {
-            return [
-                [
-                    'text' => '今天',
-                    'func' => 'return [new Date(new Date().setHours(0,0,0,0)), new Date()]',
-                ],
-                [
-                    'text' => '昨天',
-                    'func' => 'const now = new Date(); const start = new Date(now.setDate(now.getDate() - 1)); start.setHours(0,0,0,0); const end = new Date(start); end.setHours(23,59,59,999); return [start, end]',
-                ],
-                [
-                    'text' => '本周',
-                    'func' => 'const now = new Date(); const day = now.getDay() || 7; const start = new Date(now); start.setDate(now.getDate() - day + 1); start.setHours(0,0,0,0); return [start, new Date()]',
-                ],
-                [
-                    'text' => '上周',
-                    'func' => 'const now = new Date(); const day = now.getDay() || 7; const end = new Date(now); end.setDate(now.getDate() - day); end.setHours(23,59,59,999); const start = new Date(end); start.setDate(end.getDate() - 6); start.setHours(0,0,0,0); return [start, end]',
-                ],
-                [
-                    'text' => '本月',
-                    'func' => 'const now = new Date(); const start = new Date(now.getFullYear(), now.getMonth(), 1); return [start, new Date()]',
-                ],
-                [
-                    'text' => '上月',
-                    'func' => 'const now = new Date(); const start = new Date(now.getFullYear(), now.getMonth() - 1, 1); const end = new Date(now.getFullYear(), now.getMonth(), 0); end.setHours(23,59,59,999); return [start, end]',
-                ],
-                [
-                    'text' => '最近7天',
-                    'func' => 'const start = new Date(); start.setDate(start.getDate() - 6); start.setHours(0,0,0,0); return [start, new Date()]',
-                ],
-                [
-                    'text' => '最近30天',
-                    'func' => 'const start = new Date(); start.setDate(start.getDate() - 29); start.setHours(0,0,0,0); return [start, new Date()]',
-                ],
-                [
-                    'text' => '最近90天',
-                    'func' => 'const start = new Date(); start.setDate(start.getDate() - 89); start.setHours(0,0,0,0); return [start, new Date()]',
-                ],
-                [
-                    'text' => '最近1年',
-                    'func' => 'const start = new Date(); start.setFullYear(start.getFullYear() - 1); start.setDate(start.getDate() + 1); start.setHours(0,0,0,0); return [start, new Date()]',
-                ],
-                [
-                    'text' => '本年',
-                    'func' => 'const now = new Date(); const start = new Date(now.getFullYear(), 0, 1); return [start, new Date()]',
-                ],
-                [
-                    'text' => '去年',
-                    'func' => 'const now = new Date(); const start = new Date(now.getFullYear() - 1, 0, 1); const end = new Date(now.getFullYear() - 1, 11, 31, 23, 59, 59, 999); return [start, end]',
-                ],
-            ];
-        } else {
-            return [
-                // --- 过去 ---
-                [
-                    'text' => '今天',
-                    'func' => 'return new Date()',
-                ],
-                [
-                    'text' => '昨天',
-                    'func' => 'const d = new Date(); d.setDate(d.getDate() - 1); return d',
-                ],
-                [
-                    'text' => '前天',
-                    'func' => 'const d = new Date(); d.setDate(d.getDate() - 2); return d',
-                ],
-                [
-                    'text' => '三天前',
-                    'func' => 'const d = new Date(); d.setDate(d.getDate() - 3); return d',
-                ],
-                [
-                    'text' => '五天前',
-                    'func' => 'const d = new Date(); d.setDate(d.getDate() - 5); return d',
-                ],
-                [
-                    'text' => '一周前',
-                    'func' => 'const d = new Date(); d.setDate(d.getDate() - 7); return d',
-                ],
-                [
-                    'text' => '一个月前',
-                    'func' => 'const d = new Date(); d.setMonth(d.getMonth() - 1); return d',
-                ],
-                [
-                    'text' => '一年前',
-                    'func' => 'const d = new Date(); d.setFullYear(d.getFullYear() - 1); return d',
-                ],
-
-                // --- 未来 ---
-                [
-                    'text' => '明天',
-                    'func' => 'const d = new Date(); d.setDate(d.getDate() + 1); return d',
-                ],
-                [
-                    'text' => '后天',
-                    'func' => 'const d = new Date(); d.setDate(d.getDate() + 2); return d',
-                ],
-                [
-                    'text' => '三天后',
-                    'func' => 'const d = new Date(); d.setDate(d.getDate() + 3); return d',
-                ],
-                [
-                    'text' => '五天后',
-                    'func' => 'const d = new Date(); d.setDate(d.getDate() + 5); return d',
-                ],
-                [
-                    'text' => '一周后',
-                    'func' => 'const d = new Date(); d.setDate(d.getDate() + 7); return d',
-                ],
-                [
-                    'text' => '一个月后',
-                    'func' => 'const d = new Date(); d.setMonth(d.getMonth() + 1); return d',
-                ],
-                [
-                    'text' => '一年后',
-                    'func' => 'const d = new Date(); d.setFullYear(d.getFullYear() + 1); return d',
-                ],
-            ];
-        }
-    }
-}

+ 0 - 76
lib/Group.php

@@ -1,76 +0,0 @@
-<?php namespace Manage\Lib;
-use Dever;
-use Dever\Helper\Str;
-class Group extends Auth
-{
-    public function getTree()
-    {
-        $data = Dever::db('group', 'manage')->select([]);
-        $result = [];
-        $result[] = [
-            'id' => 'root',
-            'name' => '全部集团',
-            'children' => $data,
-        ];
-        return $result;
-    }
-
-    # 后续废弃,转移到system中
-    public function update($data)
-    {
-        if ($data['mobile']) {
-            $system = Dever::db('system', 'manage')->find(2);
-            $data['system_key'] = $system['key'];
-            $data['system_id'] = $system['id'];
-            $data['info_id'] = $data['id'];
-            $data['partition'] = $system['partition'];
-            $db = Dever::db($system['user_table'], '', 'default', Dever::load('util', 'manage')->system($data));
-            $info = $db->find(1);
-            if (!$info) {
-                $password = '123456';
-                $insert['name'] = Str::hide($data['mobile']);
-                $insert['mobile'] = $data['mobile'];
-                $insert['role'] = 1;
-                $insert += Dever::load('common', 'manage')->createPwd($password);
-                $db->insert($insert);
-            }
-        }
-    }
-    
-    # 后续废弃,转移到system中
-    # 创建账户
-    public function createUser($module, $data_id, $name, $mobile, $password, $state = false)
-    {
-        if ($mobile && $password) {
-            $system = Dever::db('system', 'manage')->find(2);
-            $data['system_key'] = $system['key'];
-            $data['system_id'] = $system['id'];
-            $data['info_id'] = 1;
-            $data['partition'] = $system['partition'];
-            $db = Dever::db($system['user_table'], '', 'default', Dever::load('util', 'manage')->system($data));
-
-            $info = $db->find(['mobile' => $mobile]);
-            if ($state && $info) {
-                Dever::error('手机号' . $mobile . '已存在,请更换手机号');
-            }
-
-            $module = Dever::db('system_module', 'manage')->find(['key' => $module, 'system' => 'group']);
-            $insert['name'] = $name;
-            $insert['mobile'] = $mobile;
-            $insert['role'] = 2;
-            $insert['module_data'] = $module['id'] . '-' . $data_id;
-            if (!$info) {
-                $insert += Dever::load('common', 'manage')->createPwd($password);
-                $db->insert($insert);
-            } else {
-                $insert += Dever::load('common', 'manage')->createPwd($password);
-                $module_data = $insert['module_data'];
-                unset($insert['module_data']);
-                if (!strstr($info['module_data'], $module_data)) {
-                    $insert['module_data'] = $module_data . ',' . $info['module_data'];
-                }
-                $db->update($info['id'], $insert);
-            }
-        }
-    }
-}

+ 0 - 134
lib/Menu.php

@@ -1,134 +0,0 @@
-<?php namespace Manage\Lib;
-use Dever;
-use Dever\Project;
-class Menu
-{
-    protected $icon;
-    # 初始化菜单
-    public function init($name = '')
-    {
-        $config = Dever::config('manage');
-        if ($config) {
-            $this->add('manage', $config);
-        }
-        if ($name) {
-            $app = array($name => Project::load($name));
-        } else {
-            $app = Project::read();
-        }
-        foreach ($app as $k => $v) {
-            $base = $v['path'] . 'manage/core.php';
-            if (is_file($base)) {
-                $core = include $base;
-                if ($core) {
-                    $this->add($k, $core);
-                }
-            }
-        }
-        return 'ok';
-    }
-    private function add($app, $core)
-    {
-        if (isset($core['system'])) {
-            foreach ($core['system'] as $k => $v) {
-                $where = [];
-                $where['key'] = $k;
-                $data = $where;
-                $data['name'] = $v['name'];
-                $data['sort'] = $v['sort'];
-                $data['partition'] = $v['partition'] ?? 'no';
-                $data['info_table'] = $v['info_table'];
-                $data['user_table'] = $v['user_table'];
-                $data['role_table'] = $v['role_table'];
-                Dever::db('system', 'manage')->up($where, $data);
-            }
-        }
-        if (isset($core['module'])) {
-            foreach ($core['module'] as $k => $v) {
-                $where = [];
-                $where['key'] = $k;
-                $data = $where;
-                $data['name'] = $v['name'];
-                $data['sort'] = $v['sort'];
-                $data['system'] = $v['system'];
-                $data['data_table'] = $v['data_table'];
-                if (isset($v['data_where']) && $v['data_where']) {
-                    $data['data_where'] = Dever::json_encode($v['data_where']);
-                }
-                Dever::db('system_module', 'manage')->up($where, $data);
-            }
-        }
-        if (isset($core['menu'])) {
-            foreach ($core['menu'] as $k => $v) {
-                $where = [];
-                if (isset($v['app'])) {
-                    $app = $v['app'];
-                }
-                $where['app'] = $app;
-                $where['key'] = $k;
-                if (isset($v['parent'])) {
-                    $parent = Dever::db('menu', 'manage')->find(['key' => $v['parent']]);
-                    if ($parent) {
-                        $where['parent_id'] = $parent['id'];
-                        $where['module_id'] = $parent['module_id'];
-                        $where['level'] = 2;
-                        if ($parent['parent_id']) {
-                            $where['level'] = 3;
-                        }
-                    }
-                } else {
-                    $where['level'] = 1;
-                }
-                if (isset($v['module'])) {
-                    $module = Dever::db('system_module', 'manage')->find(['key' => $v['module']]);
-                    if ($module) {
-                        $where['module_id'] = $module['id'];
-                    }
-                }
-                $data = $where;
-                $data['name'] = $v['name'];
-                if (isset($v['icon']) && $v['icon']) {
-                    $data['icon'] = $v['icon'];
-                } else {
-                    # 随机抽取
-                    $data['icon'] = $this->getIcon();
-                }
-                $data['sort'] = $v['sort'];
-                if (isset($v['show'])) {
-                    $data['show'] = $v['show'];
-                }
-                if (isset($v['badge'])) {
-                    $data['badge'] = $v['badge'];
-                }
-                if (isset($v['path'])) {
-                    $data['path'] = $v['path'];
-                } else {
-                    $data['path'] = 'main';
-                }
-                if (isset($v['link'])) {
-                    $data['link'] = $v['link'];
-                }
-                Dever::db('menu', 'manage')->up($where, $data);
-            }
-        }
-    }
-    public function getAll()
-    {
-        $data = Dever::db('menu', 'manage')->select(['parent_id' => '0']);
-        return $data;
-    }
-
-    public function getIcon()
-    {
-        if (empty($this->icon)) {
-            $this->icon = Dever::db('icon', 'manage')->select([]);
-        }
-        $key = array_rand($this->icon, 1);
-        $icon = $this->icon[$key]['key'];
-        $info = Dever::db('menu', 'manage')->find(['icon' => $icon]);
-        if ($info) {
-            return $this->getIcon();
-        }
-        return $icon;
-    }
-}

+ 0 - 17
lib/Module.php

@@ -1,17 +0,0 @@
-<?php namespace Manage\Lib;
-use Dever;
-use Dever\Project;
-class Module extends Auth
-{
-    public function getTree()
-    {
-        $data = Dever::db('system_module', 'manage')->select([]);
-        $result = [];
-        $result[] = [
-            'id' => 'root',
-            'name' => '系统模块',
-            'children' => $data,
-        ];
-        return $result;
-    }
-}

+ 0 - 863
lib/Page.php

@@ -1,863 +0,0 @@
-<?php namespace Manage\Lib;
-use Dever;
-# 通用页面 项目着急上线 以后优化并封装
-class Page extends Auth
-{
-    protected $db;
-    protected $key;
-    protected $id = 0;
-    protected $input = false;
-    protected $recycler = false;
-    protected $menu = [];
-    protected $config = [];
-    protected $field = [];
-    public $info = [];
-    public function __construct($key = '', $load = '', $input = true, $config = [])
-    {
-        parent::__construct();
-        $this->key = $key;
-        $this->input = $input;
-        $this->id = $this->input('id', 0);
-        if (!$load) {
-            $load = Dever::input('load');
-        }
-        list($this->db, $this->menu) = Dever::load('util', 'manage')->db($load);
-        if ($this->menu && $this->menu['show'] == 1) {
-            $this->checkMenu($this->menu['id'], false);
-        }
-        $this->config = $this->db->config['manage'][$key] ?? $this->db->config['manage'];
-        if ($config) {
-            $this->config = array_merge($this->config, $config);
-        }
-        if ($this->id && !strstr($this->id, ',')) {
-            $this->info = $this->db->find($this->id);
-        }
-    }
-
-    public function setting($key, &$data, $struct = true, $type = 'show', $disable = false)
-    {
-        if (empty($this->config[$key]) && $struct && isset($this->db->config['struct']) && $this->db->config['struct']) {
-            $this->config[$key] = $this->db->config['struct'];
-        }
-        if (empty($this->config[$key])) {
-            return;
-        }
-        $setting = $this->config[$key];
-        if (is_string($setting)) {
-            $setting = explode(',', $setting);
-        }
-        $field = $this->input('field', '');
-        if ($field && is_string($field) && strstr($field, 'dever_')) {
-            $field = '';
-        }
-        return $this->setData($key, $setting, $data, $field, $type, $disable);
-    }
-
-    # 获取某个数据的具体展示值
-    public function getValue($key, $value, $data, $field = [])
-    {
-        if ($key == 'cdate') {
-            $this->db->config['manage']['update']['field'][$key]['type'] = 'date';
-        }
-        $update = $this->db->config['manage']['update']['field'] ?? [];
-        if ($show = Dever::issets($field, 'show')) {
-            $value = $this->getShow($show, $data);
-        } elseif ($value && isset($this->db->config['struct'][$key]['value']) && $this->db->config['struct'][$key]['value']) {
-            $value = $this->db->value($key, $value);
-        } elseif ($value && (isset($update[$key]) && isset($update[$key]['type']) && $update[$key]['type'] == 'date')) {
-            if (isset($update[$key]['date_type']) && $update[$key]['date_type'] == 'year') {
-                if ($update[$key]['date_type'] == 'year') {
-                    $value = date('Y', $value);
-                } elseif ($update[$key]['date_type'] == 'month') {
-                    $value = date('Ym', $value);
-                } else {
-                    $value = date('Ymd', $value);
-                }
-            } else {
-                if (strstr($value, 'T')) {
-                    $value = date('Y-m-d H:i:s', strtotime($value));
-                } elseif (is_numeric($value)) {
-                    $value = date('Y-m-d H:i:s', $value);
-                } else {
-                    $value = '-';
-                }
-            }
-        }
-        
-        return $value;
-    }
-
-    # 获取关联数据
-    public function getOther($key, $set, $data)
-    {
-        $where = $config = [];
-        if (isset($set['where'])) {
-            foreach ($set['where'] as $k => $v) {
-                if (!is_array($v) && isset($data[$v])) {
-                    $where[$k] = $data[$v];
-                } else {
-                    $where[$k] = $v;
-                }
-            }
-        }
-        if (isset($set['col'])) {
-            $config['col'] = $set['col'];
-        }
-        if ($where) {
-            return Dever::db($key)->select($where, $config);
-        }
-        return [];
-    }
-
-    public function getShow($show, $data, $state = false)
-    {
-        return \Dever\Helper\Str::val($show, $data, $state);
-    }
-
-    # 获取菜单标题
-    public function getTitle()
-    {
-        return $this->menu['name'];
-    }
-
-    # 获取左侧分栏
-    protected function column(&$data, $name = '左侧分栏')
-    {
-        $data['column'] = false;
-        if (isset($this->config['column'])) {
-            if (empty($this->config['column']['hidden'])) {
-                $data['column'] = $this->config['column'];
-                if (isset($this->config['column']['add'])) {
-                    $data['column']['add'] = array('name' => $this->config['column']['add'], 'func' => $this->getFunc('column_add', $name . '-' . $this->config['column']['add'], 101));
-                }
-                if (isset($this->config['column']['edit'])) {
-                    $data['column']['edit'] = array('name' => '编辑', 'func' => $this->getFunc('column_edit', $name . '-编辑', 102));
-                }
-                if (isset($this->config['column']['delete'])) {
-                    $data['column']['delete'] = array('name' => '删除', 'func' => $this->getFunc('column_delete', $name . '-删除', 103));
-                }
-                $data['column']['data'] = $this->config['column']['data'];
-                if (is_string($data['column']['data'])) {
-                    $data['column']['data'] = Dever::call($data['column']['data']);
-                }
-                $data['height'] = '100%';
-            }
-            
-            if (isset($this->config['column']['active']) && $this->config['column']['where'] == 'id') {
-                return $this->config['column']['active'];
-            }
-        }
-    }
-
-    # 通用的规则验证 一般为更新数据时使用
-    protected function checkRules($set, $data)
-    {
-        if ($set['rules']) {
-            if (!is_array($set['rules'])) {
-                $set['rules'] = array
-                (
-                    [
-                        'required' => true,
-                        'trigger' => 'blur',
-                        'message' => $set['name'] . '不能为空',
-                    ],
-                );
-            }
-            foreach ($set['rules'] as $k => $v) {
-                if (isset($v['required']) && $v['required'] && !$data && $data !== '0') {
-                    Dever::error($v['message']);
-                }
-                if ($data || $data === '0') {
-                    if (isset($v['pattern']) && $v['pattern'] && !preg_match('/' . $v['pattern'] . '/', $data)) {
-                        Dever::error($v['message']);
-                    }
-                    if (isset($v['type']) && $v['type']) {
-                        if ($v['type'] == 'number' && !is_numeric($data)) {
-                            Dever::error($v['message']);
-                        } elseif ($v['type'] == 'array' && !is_array($data)) {
-                            Dever::error($v['message']);
-                        } elseif ($v['type'] == 'integer' && !is_int($data)) {
-                            Dever::error($v['message']);
-                        } elseif ($v['type'] == 'float' && !is_float($data)) {
-                            Dever::error($v['message']);
-                        } elseif ($v['type'] == 'string' && !is_string($data)) {
-                            Dever::error($v['message']);
-                        } elseif ($v['type'] == 'boolean' && !is_bool($data)) {
-                            Dever::error($v['message']);
-                        } elseif ($v['type'] == 'url' && !filter_var($data, FILTER_VALIDATE_URL)) {
-                            Dever::error($v['message']);
-                        } elseif ($v['type'] == 'email' && !filter_var($data, FILTER_VALIDATE_EMAIL)) {
-                            Dever::error($v['message']);
-                        } elseif ($v['type'] == 'enum' && isset($v['enum']) && !in_array($data, $v['enum'])) {
-                            Dever::error($v['message']);
-                        }
-                    }
-                    if (isset($v['len']) && $v['len'] && strlen($data) > $v['len']) {
-                        Dever::error($v['message']);
-                    }
-                    if (isset($v['min']) && $v['min'] && strlen($data) < $v['min']) {
-                        Dever::error($v['message']);
-                    }
-                    if (isset($v['max']) && $v['max'] && strlen($data) > $v['max']) {
-                        Dever::error($v['message']);
-                    }
-                }
-            }
-        }
-    }
-
-    private function setData($key, $setting, &$data, $field, $type, $disable)
-    {
-        $result = [];
-        foreach ($setting as $k => $v) {
-            $this->setDefault($key, $k, $v);
-            if (!is_array($v)) {
-                if (is_numeric($k)) {
-                    $k = $v;
-                    $v = $type;
-                }
-                if ($k == 'id') {
-                    $v = ['name' => 'ID', 'type' => $v];
-                } elseif ($k == 'cdate') {
-                    $v = ['name' => '创建时间', 'type' => $v];
-                } elseif(isset($this->db->config['struct'][$k])) {
-                    $v = ['name' => $this->db->config['struct'][$k]['name'], 'type' => $v];
-                } else {
-                    $v = ['name' => $v];
-                }
-            } else {
-                if (isset($v['only'])) {
-                    if ($v['only'] == 'edit' && !$this->id) {
-                        continue;
-                    } elseif ($v['only'] == 'add' && $this->id) {
-                        continue;
-                    }
-                }
-            }
-            if ($field) {
-                if (is_string($field) && (strstr($field, '{') || strstr($field, '%7B'))) {
-                    $field = htmlspecialchars_decode($field);
-                    $field = Dever::json_decode($field);
-                }
-                if (is_array($field)) {
-                    if (isset($field['param'])) {
-                        if (isset($field['param']['set'])) {
-                            $field = array_merge($field, $field['param']['set']);
-                        }
-                        if (isset($field['param']['search'])) {
-                            $field = array_merge($field, $field['param']['search']);
-                        }
-                    } elseif (isset($field['field']) && !Dever::check($field['field'], $k)) {
-                        continue;
-                    }
-                    if (isset($field[$k]) && $field[$k] != $k) {
-                        $v['default'] = $field[$k];
-                        $v['type'] = 'hidden';
-                    }
-                } elseif (!Dever::check($field, $k)) {
-                    continue;
-                }
-            }
-            $info = $this->setField($data, $k, $v, $field, $type, $disable);
-            if ($info) {
-                $result[] = $info;
-            }
-        }
-        return $result;
-    }
-
-    private function setField(&$data, $key, $value, $field, $type = 'show', $disable = false)
-    {
-        if (empty($value['align'])) {
-            $value['align'] = 'center';
-        }
-        $value['key'] = $key;
-        $this->setName($value);
-        # 对每个字段进行权限设置
-        if (isset($value['func']) && $value['func']) {
-            $func = $this->getFunc('field_' . $value['key'], '字段-' . $value['name'], 200);
-            if (!$func) {
-                return false;
-            }
-        }
-        if (strpos($key, '/') && $this->key == 'update') {
-            $this->setType($value, 'table');
-            $this->setShow($value);
-            if (strpos($key, '#')) {
-                $key = str_replace('#', '', $key);
-            }
-            $sku = $value['type'] == 'sku' ? true : false;
-            $value['value'] = $this->getOther($key, $value, $this->info);
-            if (isset($value['default'])) {
-                $value['value'] += $value['default'];
-            }
-            if (isset($value['field'])) {
-                list($app, $table) = explode('/', $key);
-                $set = Dever::project($app);
-                $manage = @include($set['path'] . 'manage/'.$table.'.php');
-                if (isset($manage['update']['field'][$value['field']])) {
-                    $value = array_merge($value, $manage['update']['field'][$value['field']]);
-                }
-                if ($value['value']) {
-                    $data[$key . '_id'] = [
-                        'key' => $key . '_id',
-                        'type' => 'hidden',
-                        'value' => $value['value'][0]['id'],
-                    ];
-                    $value['value'] = $value['value'][0][$value['field']];
-                }
-                $this->setRules($value);
-                $this->setForm($value);
-                $data[] = $value;
-                return $value['name'] ?? 'test';
-            }
-            $update = new \Manage\Api\Page\Update($key, false);
-            $value['option'] = [];
-            $value['content'] = $update->get($value['value'], $value['option'], $sku);
-            $data[] = $value;
-            return $value['name'];
-        } else {
-            $this->setType($value, $type);
-            $this->setDisable($value, $disable);
-            if ($this->key == 'update') {
-                # 一般为更新页面需要的参数
-                $this->setShow($value);
-                $this->setRules($value);
-            } elseif (isset($value['remote']) && !strstr($value['remote'], 'Dever')) {
-                $value['remote'] = Dever::url($value['remote']);
-            }
-            if ($type == 'show') {
-                if (!isset($value['truncate'])) {
-                    $value['truncate'] = false;
-                }
-                $in = ['switch', 'select', 'input'];
-                if (in_array($value['type'], $in)) {
-                    $value['func'] = $this->getFunc('list_edit_' . $value['key'], '列表更新-' . $value['name'], 104);
-                    if (!$value['func']) {
-                        $value['type'] = 'show';
-                        if (isset($value['show'])) {
-                            unset($value['show']);
-                        }
-                    }
-                }
-                if (isset($value['child'])) {
-                    $child = [];
-                    $this->setData($value['child'], $child, $field, $type, $disable);
-                    $value['child'] = $child;
-                } else {
-                    $this->field[$key] = $value;
-                }
-            }
-            $this->setForm($value);
-            if (empty($value['width'])) {
-                $value['width'] = 'auto';
-                if ($this->key == 'update') {
-                    $fast = Dever::input('fast');
-                    $value['width'] = '50%';
-                    if (!$this->input || (empty($value['option']) && $fast == 1) || $value['type'] == 'editor') {
-                        $value['width'] = '100%';
-                    }
-                }
-            }
-            $data[] = $value;
-            return $value['name'] ?? 'test';
-        }
-    }
-
-    private function setDefault($key, &$k, &$v)
-    {
-        if ($v == 'cdate') {
-            $k = $v;
-            $v = [
-                'name' => '创建时间',
-                'type' => 'date',
-                'date_type' => 'datetimerange',
-                'value_format' => 'YYYY-MM-DD HH:mm:ss',
-                'start_placeholder' => '开始日期',
-                'end_placeholder' => '结束日期',
-                'range_separator' => '至',
-                'truncate' => true,
-            ];
-        } elseif ($v == 'sort') {
-            $k = $v;
-            $v = [
-                'type' => 'input',
-                'tip' => '双击修改,正序排序',
-                'width' => '90px',
-            ];
-        } elseif ($key != 'search' && $v == 'status') {
-            if (isset($this->db->config['struct']['status']['value']) && count($this->db->config['struct']['status']['value']) == 2) {
-                $k = $v;
-                $v = [
-                    'type' => 'switch',
-                    'show'  => '{status}',
-                    'active_value' => 1,
-                    'inactive_value' => 2,
-                    'width' => '75px',
-                ];
-            }
-        }
-    }
-
-    private function setShow(&$value)
-    {
-        if ($value['type'] == 'hidden') {
-            $value['show'] = false;
-        } elseif (!isset($value['show'])) {
-            $value['show'] = true;
-        }
-    }
-
-    private function setName(&$value)
-    {
-        if (empty($value['name']) && isset($this->db->config['struct'][$value['key']])) {
-            $value['name'] = $this->db->config['struct'][$value['key']]['name'];
-        }
-        if (empty($value['placeholder']) && isset($value['name'])) {
-            $value['placeholder'] = $value['name'];
-        }
-    }
-
-    private function setType(&$value, $type)
-    {
-        if (empty($value['type'])) {
-            $value['type'] = $type;
-        }
-        if (strpos($value['type'], '(')) {
-            $value['type'] = $type;
-        }
-        if (isset($value['upload']) && Dever::project('upload')) {
-            $upload = $this->getUpload($value['key']);
-            if (is_array($value['upload'])) {
-                $upload += $value['upload'];
-            } else {
-                $upload += ['id' => $value['upload']];
-            }
-            if (empty($upload['id'])) {
-                Dever::error('上传配置错误');
-            }
-            $value['config'] = Dever::load('save', 'upload')->get($upload['id']);
-            $value['yun'] = false;
-            if ($value['config']['method'] == 2) {
-                $value['yun'] = true;
-            }
-            $value['url'] = Dever::url('upload/save.act', $upload, true);
-            $upload['wh'] = $value['wh'] ?? '500*500';
-            $value['set'] = Dever::url('image/manage.set', $upload, true);
-            if (isset($value['multiple']) && $value['multiple']) {
-                $value['limit'] = 10;
-            } else {
-                $value['limit'] = 1;
-            }
-        }
-        if (isset($value['editorMenu'])) {
-            $this->setEditorUpload($value, ['uploadImage', 'uploadVideo']);
-        }
-
-        if (isset($value['date_type']) && $value['date_type'] == 'datetimerange' && empty($value['default_time'])) {
-            $value['default_time'] = array(\Dever\Helper\Date::mktime(date('Y-m-d 00:00:00'))*1000, \Dever\Helper\Date::mktime(date('Y-m-d 23:59:59'))*1000);
-        }
-    }
-
-    protected function getUpload($key)
-    {
-        $upload['cate_id'] = 1;
-        $upload['group_key'] = $this->db->config['table'] . '-' . $key;
-        $upload['group_name'] = $this->db->config['name'];
-        $upload['user_token'] = Dever::load('util', 'manage')->getToken();
-        $upload['user_table'] = $this->user['table'];
-        $upload['user_id'] = $this->user['id'];
-        return $upload;
-    }
-
-    protected function setEditorUpload(&$value, $key)
-    {
-        $upload = $this->getUpload($value['key']);
-        foreach ($key as $k) {
-            if ($v = Dever::issets($value['editorMenu'], $k)) {
-                if (!is_array($v)) {
-                    $v = ['upload' => $v];
-                }
-                $upload['id'] = $v['upload'];
-                $v['server'] = Dever::url('upload/save.wangEditor', $upload, true);
-                if (empty($v['fieldName'])) {
-                    $v['fieldName'] = 'file';
-                }
-                $value['editorMenu'][$k] = $v;
-            }
-        }
-    }
-
-    private function setDisable(&$value, $disable)
-    {
-        if (isset($value['disable'])) {
-            $disable = $value['disable'];
-        }
-        $value['disable'] = $disable;
-    }
-
-    # 设置值
-    private function setForm(&$value)
-    {
-        if (empty($value['value'])) {
-            $value['value'] = Dever::input('search')[$value['key']] ?? '';
-        }
-        # (float) 转换一下是为了前端select使用,必须是数字类型
-        # 这个比较特殊
-        if ($value['type'] == 'select_text') {
-            if ($value['value']) {
-                if (is_string($value['value'])) {
-                    $value['value'] = explode('|', $v['value']);
-                }
-                $value['value'][0] = (float) $value['value'][0];
-            } else {
-                $value['value'] = [1,''];
-            }
-        } elseif ($value['type'] == 'date') {
-            if (empty($value['shortcuts']) && isset($value['date_type'])) {
-                $value['shortcuts'] = Dever::load('data', 'manage')->getShortcuts($value['date_type']);
-            }
-        } elseif (is_array($value['value'])) {
-            foreach ($value['value'] as &$v) {
-                $v = (float) $v;
-            }
-        }
-        if (!$value['value']) {
-            if (isset($value['default']) && !strstr($value['default'], '{')) {
-                $value['value'] = $value['default'];
-            } elseif ($this->key == 'update' && isset($this->db->config['struct'][$value['key']]['default'])) {
-                $value['value'] = $this->db->config['struct'][$value['key']]['default'];
-            }
-        }
-        if (isset($value['option']) && $value['option']) {
-            $this->db->config['option'][$value['key']] = $value['option'];
-        }
-        if (isset($this->db->config['load'])) {
-            $send = $this->info;
-            $send['table'] = $this->db->config['load'];
-            if ($option = $this->db->value($value['key'], false, 'id,name', $send)) {
-                if ($value['type'] == 'checkbox') {
-                    $value['value'] = $value['value'] ? explode(',', $value['value']) : [];
-                }
-                $value['option'] = $option;
-                if ($value['type'] == 'text') {
-                    $value['type'] = 'select';
-                }
-                if (isset($this->db->config['struct'][$value['key']]['type']) && !is_array($value['value']) && $value['value'] && !strstr($this->db->config['struct'][$value['key']]['type'], 'char')) {
-                    $value['value'] = (float) $value['value'];
-                }
-            }
-        }
-    }
-
-    private function setRules(&$value)
-    {
-        if (isset($value['rules']) && $value['rules']) {
-            if (!is_array($value['rules'])) {
-                $value['rules'] = array
-                (
-                    [
-                        'required' => true,
-                        'trigger' => 'blur',
-                        'message' => $value['name'] . '不能为空',
-                    ],
-                );
-            }
-            foreach ($value['rules'] as $k => $v) {
-                if (isset($v['only'])) {
-                    if ($v['only'] == 'edit' && !$this->id) {
-                        unset($value['rules'][$k]);
-                        break;
-                    } elseif ($v['only'] == 'add' && $this->id) {
-                        unset($value['rules'][$k]);
-                        break;
-                    }
-                }
-            }
-            if (!isset($value['rules'][0])) {
-                $value['rules'] = array_values($value['rules']);
-            }
-        }
-    }
-
-    protected function input($key, $value = '')
-    {
-        return $this->input ? Dever::input($key) : $value;
-    }
-
-    public function button($key = 'button', $data = [], $default = true)
-    {
-        if (empty($this->config[$key])) {
-            return [];
-        }
-        $result = [];
-        /*
-        if (!isset($this->config[$key])) {
-            $num = 0;
-            if (isset($this->db->config['manage']['update']['field'])) {
-                $num = count($this->db->config['manage']['update']['field']);
-            } elseif (isset($this->db->config['struct']) && $this->db->config['struct']) {
-                $num = count($this->db->config['struct']);
-            }
-            $fast = 'fast';
-            if ($num > 8) {
-                $fast = '';
-            }
-            if ($key == 'button') {
-                $this->config[$key] = ['新增' => $fast . 'add'];
-            } else {
-                $this->config[$key] = ['编辑' => $fast . 'edit', '删除' => 'recycle'];
-            }
-        }*/
-        $sort = 1;
-        foreach ($this->config[$key] as $k => $v) {
-            $d = '';
-            $p = '';
-            $i = '';
-            if (is_array($v)) {
-                if (isset($v[3]) && $data) {
-                    $d = $v[3];
-                    if (strstr($d, '{')) {
-                        $state = $this->getShow($d, $data, true);
-                    } else {
-                        parse_str($d, $t);
-                        $state = false;
-                        foreach ($t as $k1 => $v1) {
-                            if (isset($data[$k1])) {
-                                $v1 = explode(',', $v1);
-                                foreach ($v1 as $v2) {
-                                    if ($data[$k1] == $v2) {
-                                        $state = true;
-                                    }
-                                }
-                            }
-                        }
-                    }
-                    if (!$state) {
-                        continue;
-                    }
-                }
-                if (isset($v[2])) {
-                    $i = $v[2];
-                }
-                if (isset($v[1])) {
-                    $p = $v[1];
-                    # 针对数据隔离做单独的处理
-                    if (is_array($p) && isset($p['param']['set']['authorization'])) {
-                        $value = explode(',', $p['param']['set']['authorization']);
-                        if (empty($value[3])) {
-                            $value[3] = 0;
-                        }
-                        $p['param']['set']['authorization'] = Dever::load('util', 'manage')->setAuth($value[0], $value[1], $data[$value[2]] ?? $temvaluep[2], $data[$value[3]] ?? $value[3]);
-                    }
-                }
-                $v = $v[0];
-            }
-            if (strstr($v, 'add')) {
-                $icon = 'Plus';
-                $button = 'primary';
-            } elseif (strstr($v, 'edit')) {
-                $icon = 'Edit';
-                $button = 'primary';
-            } elseif (strstr($v, 'view')) {
-                $icon = 'View';
-                $button = '';
-            } elseif (strstr($v, 'drawer')) {
-                $icon = 'Drawer';
-                $button = '';
-            } elseif ($v == 'delete') {
-                if ($key == 'button') {
-                    if (isset($this->config['layout'])) {
-                        continue;
-                    }
-                    $this->config['selection'] = true;
-                }
-                $icon = 'Delete';
-                $button = 'danger';
-            } elseif ($v == 'recycle') {
-                if ($key == 'button') {
-                    if (isset($this->config['layout'])) {
-                        continue;
-                    }
-                    $this->config['selection'] = true;
-                }
-                $icon = 'Delete';
-                $button = 'danger';
-            } elseif ($v == 'oper') {
-                if ($key == 'button') {
-                    if (isset($this->config['layout'])) {
-                        continue;
-                    }
-                    $this->config['selection'] = true;
-                }
-                $icon = 'Notification';
-                $button = 'warning';
-            } elseif ($v == 'api') {
-                if ($key == 'button') {
-                    if (isset($this->config['layout'])) {
-                        continue;
-                    }
-                    $this->config['selection'] = true;
-                }
-                $p = Dever::url($p);
-                $icon = 'Notification';
-                $button = 'warning';
-            } elseif ($v == 'link') {
-                $icon = 'Link';
-                $button = 'success';
-                $p = $this->getShow($p, $data);
-            } elseif ($v == 'route') {
-                $icon = 'Link';
-                $button = 'success';
-            } elseif ($v == 'recover') {
-                $icon = 'CirclePlus';
-                $button = 'info';
-            } else {
-                continue;
-            }
-            # 权限验证
-            $sort++;
-            $func = $this->getFunc($v, $k, $sort, $p);
-            if ($this->menu && $this->menu['show'] == 1 && !$func) {
-                continue;
-            }
-            if ($i) {
-                $icon = $i;
-            }
-            $result[] = [
-                'name' => $k,
-                'type' => $v,
-                'param' => $p,
-                'icon' => $icon,
-                'button' => $button,
-                'func' => $func,
-            ];
-            if (!$this->recycler && $v == 'recycle') {
-                $this->recycler = true;
-            }
-        }
-        return $result;
-    }
-
-    # 构造搜索
-    protected function search(&$where)
-    {
-        $search = Dever::input('search');
-        $set = Dever::input('set');
-        $list_search = $result = [];
-        $result['form'] = $result['field'] = $result['option'] = [];
-        $this->setting('search', $list_search, false, 'text');
-        if ($list_search) {
-            foreach ($list_search as $v) {
-                if ($v['type'] != 'hidden') {
-                    $result['form'][] = $v;
-                    if (is_numeric($v['value'])) {
-                        $v['value'] = (float) $v['value'];
-                    }
-                    $result['field'][$v['key']] = $v['value'];
-                    if ($v['type'] == 'sku') {
-                        $result['field'][$v['key'] . '_spec'] = [];
-                    }
-                    if (isset($v['option'])) {
-                        $result['option'][$v['key']] = $v['option'];
-                    }
-                }
-                $this->searchWhere($search, $v, $where);
-                $this->searchWhere($set, $v, $where);
-            }
-        }
-        return $result;
-    }
-
-    protected function searchWhere($value, $v, &$where)
-    {
-        if ($value) {
-            if ($value = Dever::issets($value, $v['key'])) {
-                if (isset($v['search'])) {
-                    if (is_callable($v['search'])) {
-                        $value = $v['search']($v['key'], $v['type'], $value);
-                    } elseif (is_array($v['search']) && isset($v['search']['table'])) {
-                        $v['search']['where'] = Dever::json_decode(str_replace('{value}', $value, Dever::json_encode($v['search']['where'])));
-                        $search = Dever::db($v['search']['table'])->select($v['search']['where'], $v['search']['set'] ?? []);
-                        $value = [];
-                        if ($search) {
-                            foreach ($search as $v1) {
-                                $value[] = $v1[$v['search']['field']];
-                            }
-                        }
-                        $value = implode(',', $value);
-                        $v['type'] = 'in';
-                        if (isset($v['search']['key'])) {
-                            $v['key'] = $v['search']['key'];
-                        }
-                    } else {
-                        $r = Dever::call($v['search'], [$value]);
-                        $v['key'] = $r[0];
-                        $v['type'] = $r[1];
-                        $value = $r[2];
-                    }
-                }
-                if ($v['type'] == 'select_text') {
-                    if ($value[1] === '') {
-                        return;
-                    }
-                    $result = current(array_filter($v['option'], function($item) use($value) {
-                        return $item['id'] == $value[0];
-                    }));
-                    if (!$result) {
-                        return;
-                    }
-                    $v['key'] = $result['value'];
-                    $v['type'] = '';
-                    if (strstr($v['key'], '.')) {
-                        $r = Dever::call($v['key'], $value[1]);
-                        if ($r) {
-                            $v['key'] = $r[0];
-                            $v['type'] = $r[1];
-                            $value = $r[2];
-                        }
-                    } else {
-                        if (strstr($v['key'], ' ')) {
-                            $temp = explode(' ', $v['key']);
-                            $v['key'] = $temp[0];
-                            $v['type'] = $temp[1];
-                        }
-                        $value = $value[1];
-                    }
-                }
-                if (isset($v['col'])) {
-                    $temp = explode(',', $v['col']);
-                    $value = explode(',', $value);
-                    foreach ($temp as $tk => $tv) {
-                        $where[$tv] = $value[$tk];
-                    }
-                } elseif ($v['type'] == 'group') {
-                    $where[$v['key']] = ['group', $value];
-                } elseif ($v['type'] == 'selects') {
-                    $where[$v['key']] = ['group', $value];
-                } elseif ($v['type'] == 'cascader') {
-                    $t = $value;
-                    if (is_array($value)) {
-                        $t = implode(',', $value);
-                    }
-                    $where[$v['key']] = ['group', $t];
-                    //$where[$v['key']] = $t;
-                    //print_r($where);die;
-                } elseif ($v['type'] == 'like') {
-                    $where[$v['key']] = ['like', $value];
-                } elseif ($v['type'] == 'in') {
-                    $where[$v['key']] = ['in', $value];
-                } elseif ($v['type'] == 'date') {
-                    if (strstr($v['date_type'], 'range')) {
-                        $where[$v['key']] = array('>=', \Dever\Helper\Date::mktime($value[0]));
-                        $where[$v['key'] . '#'] = array('<=', \Dever\Helper\Date::mktime($value[1]));
-                    } else {
-                        $where[$v['key']] = $value;
-                    }
-                } else {
-                    $where[$v['key']] = $value;
-                }
-            }
-        }
-    }
-}

+ 0 - 39
lib/Recycler.php

@@ -1,39 +0,0 @@
-<?php namespace Manage\Lib;
-use Dever;
-class Recycler extends Auth
-{
-    # 获取后台展示需要的数据
-    public function getData($where)
-    {
-        if (empty($where['table'])) {
-            Dever::error('参数错误');
-        }
-        $data['head'] = $data['body'] = [];
-        $page = new Page('list', $where['table']);
-        $data['title'] = $page->getTitle() . '【回收站】';
-        $data['field'] = $page->setting('field', $data['head']);
-
-        $set['num'] = Dever::input('pgnum', '', '', 10);
-        list($db, $menu) = Dever::load('util', 'manage')->db($where['table']);
-        $recycler = Dever::db('recycler', 'manage')->select(['table' => $db->config['load']], $set);
-        foreach ($recycler as $k => $v) {
-            $content = Dever::json_decode($v['content']);
-            foreach ($content as $key => $value) {
-                $content[$key] = $page->getValue($key, $value, $content);
-            }
-            $content['id'] = $v['id'];
-            $data['body'][] = $content;
-        }
-        if ($data['head']) {
-            $head = [];
-            foreach ($data['head'] as $k => $v) {
-                if ($v['type'] == 'show') {
-                    $head[] = $v;
-                }
-            }
-            $data['head'] = $head;
-        }
-
-        return $data;
-    }
-}

+ 0 - 91
lib/Role.php

@@ -1,91 +0,0 @@
-<?php namespace Manage\Lib;
-use Dever;
-class Role extends Auth
-{
-    public function update($db, $data)
-    {
-        if ($data['auth']) {
-            $auth = explode(',', $data['auth']);
-            $data['auth'] = [];
-            $module = $menu = $func = [];
-            foreach ($auth as $k => $v) {
-                if (!strstr($v, '-')) {
-                    if (strstr($v, 'v')) {
-                        $menu[] = trim($v, 'v');
-                    } else {
-                        $func[] = $v;
-                    }
-                    $data['auth'][] = $v;
-                }
-            }
-            if ($func) {
-                $funcData = Dever::db('menu_func', 'manage')->select(array('id' => ['in', $func]), ['group' => 'menu_id']);
-                foreach ($funcData as $k => $v) {
-                    $menu[] = $v['menu_id'];
-                }
-                $menuData = Dever::db('menu', 'manage')->select(array('id' => ['in', $menu]), ['group' => 'module_id']);
-                foreach ($menuData as $k => $v) {
-                    $module[] = $v['module_id'];
-                }
-            }
-            $data['auth'] = implode(',', $data['auth']);
-            $data['menu'] = implode(',', $menu);
-            $data['module'] = implode(',', $module);
-        }
-        return $data;
-    }
-
-    public function getAuthData()
-    {
-        $result = [];
-        $extend = Dever::load('util', 'manage')->extend();
-        if ($extend && $extend['system_id']) {
-            $system_id = $extend['system_id'];
-        } else {
-            $system_id = 1;
-        }
-        $info = Dever::db('system', 'manage')->find($system_id);
-        $where = [];
-        $where['system'] = $info['key'];
-        $module = Dever::db('system_module', 'manage')->select($where);
-        foreach ($module as $k => $v) {
-            $result[$k]['value'] = 's-' . $v['id'];
-            $result[$k]['label'] = $v['name'];
-            $result[$k]['children'] = Dever::db('menu', 'manage')->tree(array('module_id' => $v['id'], 'show' => ['<', '3']), ['parent_id', '0', 'id'], [$this, 'getAuthInfo'], ['col' => 'id,name as label,parent_id,`key`,func']);
-        }
-        return $result;
-    }
-    public function getAuthInfo($k, $info)
-    {
-        if ($info['func'] == 1) {
-            $info['value'] = 'm-' . $info['id'];
-            $info['children'] = Dever::db('menu_func', 'manage')->select(['menu_id' => $info['id']], ['col' => 'id as value,name as label']);
-            if (!$info['children']) {
-                return [];
-            }
-        } else {
-            $info['value'] = 'v' . $info['id'];
-        }
-        return $info;
-    }
-    # 展示系统
-    public function showSystem($data)
-    {
-        return Dever::db('system', 'manage')->show(array('id' => ['in', $data]));
-    }
-    # 展示系统模块
-    public function showModule($data)
-    {
-        return Dever::db('system_module', 'manage')->show(array('id' => ['in', $data]));
-    }
-    # 展示菜单
-    public function showMenu($data)
-    {
-        return Dever::db('menu', 'manage')->show(array('id' => ['in', $data]));
-    }
-    # 展示权限
-    public function showFunc($data)
-    {
-        return Dever::db('menu_func', 'manage')->show(array('id' => ['in', $data]));
-    }
-}

+ 0 - 87
lib/System.php

@@ -1,87 +0,0 @@
-<?php namespace Manage\Lib;
-use Dever;
-use Dever\Project;
-use Dever\Helper\Str;
-class System extends Auth
-{
-    public function getTree()
-    {
-        $data = Dever::db('system', 'manage')->select([]);
-        $result = [];
-        $result[] = [
-            'id' => 'root',
-            'name' => '全部系统',
-            'children' => $data,
-        ];
-        return $result;
-    }
-
-    # 创建管理员
-    public function update($system, $db, $data)
-    {
-        if (isset($data['mobile']) && $data['mobile']) {
-            $system = Dever::db('system', 'manage')->find(['key' => $system]);
-            $data['system_key'] = $system['key'];
-            $data['system_id'] = $system['id'];
-            $data['info_id'] = $data['id'];
-            $data['partition'] = $system['partition'];
-            $db = Dever::db($system['user_table'], '', true, 'default', Dever::load('util', 'manage')->system($data));
-            $info = $db->find(['mobile' => $data['mobile']]);
-            if (!$info) {
-                $password = '123456';
-                $insert['name'] = Str::hide($data['mobile']);
-                $insert['mobile'] = $data['mobile'];
-                $insert['role'] = 1;
-                $insert += Dever::load('util', 'manage')->createPwd($password);
-                $db->insert($insert);
-            }
-
-            $db = Dever::db($system['role_table'], '', true, 'default', Dever::load('util', 'manage')->system($data));
-            $info = $db->find(['id' => 1]);
-            if (!$info) {
-                $insert = [];
-                $insert['name'] = '超级管理员';
-                $db->insert($insert);
-            }
-        }
-    }
-
-    # 创建账户
-    public function createUser($data, $state = true)
-    {
-        if (isset($data['mobile']) && $data['mobile'] && isset($data['password']) && $data['password']) {
-            $info = Dever::db($data['table'])->find($data['id']);
-            if ($info) {
-                $system = Dever::db('system', 'manage')->find(['key' => $data['system']]);
-                $set['system_key'] = $system['key'];
-                $set['system_id'] = $system['id'];
-                $set['info_id'] = 1;
-                $set['partition'] = $system['partition'];
-                $db = Dever::db($system['user_table'], '', 'default', Dever::load('util', 'manage')->system($set));
-
-                $user = $db->find(['mobile' => $data['mobile']]);
-                if ($state && $user) {
-                    Dever::error('手机号' . $data['mobile'] . '已存在,请更换手机号');
-                }
-
-                $module = Dever::db('system_module', 'manage')->find(['key' => $data['module'], 'system' => 'group']);
-                $insert['name'] = $info['name'];
-                $insert['mobile'] = $data['mobile'];
-                $insert['role'] = 2;
-                $insert['module_data'] = $module['id'] . '-' . $info['id'];
-                $insert += Dever::load('util', 'manage')->createPwd($data['password']);
-                if (!$user) {
-                    $db->insert($insert);
-                } else {
-                    $module_data = $insert['module_data'];
-                    unset($insert['module_data']);
-                    if (!strstr($user['module_data'], $module_data)) {
-                        $insert['module_data'] = $module_data . ',' . $user['module_data'];
-                    }
-                    $db->update($user['id'], $insert);
-                }
-            }
-        }
-        return $data;
-    }
-}

+ 0 - 380
lib/Test.php

@@ -1,380 +0,0 @@
-<?php namespace Manage\Lib;
-use Dever;
-use Dever\Helper\Str;
-use Dever\Helper\Env;
-use Dever\Helper\Secure;
-use Dever\Helper\Date;
-class Test
-{
-    # 仅为测试用
-    public function out($data)
-    {
-        $result = [];
-        $result['head'] = ['id', '姓名', '时间'];
-        $result['body'] = [];
-        foreach ($data['body'] as $k => $v) {
-            $result['body'][$k] = [$v['id'], $v['name'], $v['cdate']];
-        }
-        return $result;
-    }
-
-    # 仅为测试用,展示表格更多内容,类型参考diy.php
-    public function show($data)
-    {
-        $result['type'] = 'list';
-        $result['content'] = [
-            ['name'=>'标题', 'content'=>'内容'],
-            ['name'=>'标题', 'content'=>'内容'],
-            ['name'=>'标题', 'content'=>'内容'],
-        ];
-        return $result;
-    }
-
-    # 仅为测试用,展示表格更多内容
-    public function show2($data)
-    {
-        return ['name' => '查看详情', 'content' => $this->show($data)];
-    }
-
-    # 仅为测试用,展示详情,类型参考diy.php
-    public function view($page)
-    {
-        # 这里获取基本信息
-        //print_r($page->info);die;
-        $info[] = array
-        (
-            # 类型,info信息 desc描述 table表格,表格有head和body即可
-            /*
-            'type' => 'info',
-            'name' => '资源订单',
-            'info' => '订单',
-            # 右侧按钮
-            'button' => $button,
-            # 具体内容
-            'content' => [
-                ['name' => '订单状态', 'value' => '未完成'],
-                ['name' => '实际支付', 'value' => '¥ 15.00'],
-                ['name' => '支付方式', 'value' => '余额'],
-                ['name' => '支付时间', 'value' => '2025-06-03 06:46:15'],
-            ],*/
-
-            'type' => 'desc',
-            'name' => '基本信息',
-            # 每行展示数量
-            'column' => 4,
-            # 是否有边框
-            'border' => true,
-            # 排列方向:horizontal横向 vertical纵向
-            'direction' => 'horizontal',
-            # 右侧按钮
-            'button' => array
-            (
-                array
-                (
-                    'name' => '编辑',
-                    # fastedit、fastadd、oper、api、link、route,参数与list里的data_button一致,多了一个load,可以单独设置路由
-                    'type' => 'fastedit',
-                    'path' => 'platform/role',
-                    # 增加权限,第三个参数是排序,建议大一些
-                    //'func' => $page->getFunc('view_fastedit', '详情页-编辑角色', 1000),
-                    # 这里是按钮用到的参数数据
-                    'row' => [
-                        'id' => 1,
-                    ],
-                ),
-            ),
-            # 具体内容
-            'content' => array
-            (
-                [
-                    'name' => '标题',
-                    # 类型,text普通文本,tag标签,link链接,image图片 progress进度条 stat统计 timeline时间线 table表格
-                    'type' => 'text',
-                    'content' => '内容',
-                    # 样式primary success warning danger info exception
-                    'style' => 'primary',
-                ],
-                [
-                    'name' => '标题',
-                    'type' => 'tag',
-                    'content' => '内容',
-                    'style' => 'warning',
-                ],
-                [
-                    'name' => '标题',
-                    'type' => 'link',
-                    'content' => '内容',
-                ],
-                [
-                    'name' => '图片',
-                    'type' => 'image',
-                    'content' => 'https://fuss10.elemecdn.com/e/5d/4a731a90594a4af544c0c25941171jpeg.jpeg',
-                    # 'fill', 'contain', 'cover', 'none', 'scale-down'
-                    'fit' => 'fill',
-                ],
-                [
-                    'name' => '进度条',
-                    'type' => 'progress',
-                    'content' => '10',
-                    'style' => 'exception',
-                    'width' => '20',
-                    'inside' => true,
-                    # line dashboard 仪表盘 circle 圆形
-                    'show' => 'line',
-                    # 开启条纹
-                    'striped' => true,
-                    # 开启动画
-                    'indeterminate' => true,
-                ],
-                array
-                (
-                    'name' => '统计',
-                    'type' => 'stat',
-                    'content' => array
-                    (
-                        [
-                            # 一共24
-                            'span' => '6',
-                            'name' => '测试',
-                            'value' => '1000',
-                        ],
-                        [
-                            'span' => '6',
-                            'name' => '测试1',
-                            'value' => '1000',
-                        ],
-                        [
-                            'span' => '6',
-                            'name' => '测试2',
-                            'value' => '1000',
-                        ],
-                        [
-                            'span' => '6',
-                            'name' => '测试2',
-                            'value' => '1000',
-                        ],
-                    ),
-                ),
-
-                array
-                (
-                    'name' => '时间线',
-                    'type' => 'timeline',
-                    'content' => array
-                    (
-                        [
-                            'time' => '2020-10-11',
-                            'name' => '测试',
-                            'color' => '#0bbd87',
-                            'size' => 'large',
-                            'type' => 'primary',
-                            'hollow' => true,
-                        ],
-                        [
-                            'time' => '2020-10-11',
-                            'name' => '测试',
-                        ],
-                        [
-                            'time' => '2020-10-11',
-                            'name' => '测试',
-                        ],
-                        [
-                            'time' => '2020-10-11',
-                            'name' => '测试',
-                        ],
-                    ),
-                ),
-
-                array
-                (
-                    'name' => '表格',
-                    'type' => 'table',
-                    'border' => true,
-                    'height' => '200',
-                    'head' => array
-                    (
-                        [
-                            'key' => 'name',
-                            'name' => '姓名',
-                            'fixed' => 'fixed',
-                        ],
-                        [
-                            'key' => 'desc',
-                            'name' => '描述',
-                            'fixed' => 'fixed',
-                        ],
-                    ),
-                    'button' => array
-                    (
-                        [
-                            'name' => '编辑',
-                            'type' => 'fastedit',
-                            'load' => 'platform/role',
-                        ],
-                    ),
-                    'body' => array
-                    (
-                        [
-                            'id' => 1,
-                            'name' => 'test',
-                            'desc' => 'dfdf',
-                        ],
-                    ),
-                ),
-            ),
-        );
-
-        $info[] = array
-        (
-            'type' => 'table',
-            'name' => '表格信息',
-            'border' => true,
-            'height' => '200',
-            'head' => array
-            (
-                [
-                    'key' => 'name',
-                    'name' => '姓名',
-                    'fixed' => 'fixed',
-                ],
-                [
-                    'key' => 'desc',
-                    'name' => '描述',
-                    'fixed' => 'fixed',
-                ],
-            ),
-            'button' => array
-            (
-                array
-                (
-                    'name' => '编辑',
-                    'type' => 'fastedit',
-                    'load' => 'platform/role',
-                    # 增加权限,第三个参数是排序,建议大一些
-                    'func' => $page->getFunc('view_fastedit', '详情页-编辑角色', 1000),
-                ),
-            ),
-            'body' => array
-            (
-                [
-                    'id' => 1,
-                    'name' => 'test',
-                    'desc' => 'dfdf',
-                ],
-            ),
-        );
-        $tab = array
-        (
-            'active' => 'table1',
-            'content' => array
-            (
-                'table1' => [
-                    # 这里跟desc一样
-                    'name' => '标题',
-                    'type' => 'text',
-                    'content' => '内容',
-                    'style' => 'primary',
-                ],
-
-                'tab2' => array
-                (
-                    'name' => '表格',
-                    'type' => 'table',
-                    'border' => true,
-                    'height' => '200',
-                    'head' => array
-                    (
-                        [
-                            'key' => 'name',
-                            'name' => '姓名',
-                            'fixed' => 'fixed',
-                        ],
-                        [
-                            'key' => 'desc',
-                            'name' => '描述',
-                            'fixed' => 'fixed',
-                        ],
-                    ),
-                    'button' => array
-                    (
-                        [
-                            'name' => '编辑',
-                            'type' => 'fastedit',
-                            'load' => 'platform/role',
-                        ],
-                    ),
-                    'body' => array
-                    (
-                        [
-                            'id' => 1,
-                            'name' => 'test',
-                            'desc' => 'dfdf',
-                        ],
-                    ),
-                ),
-            )
-        );
-        return ['title' => '详情', 'info' => $info, 'tab' => $tab];
-    }
-
-    public function stat($where)
-    {
-        return array
-        (
-            [
-                # 一共24
-                'span' => '8',
-                'name' => '测试',
-                'value' => '1000',
-            ],
-            [
-                'span' => '8',
-                'name' => '测试1',
-                'value' => '1000',
-            ],
-            [
-                'span' => '8',
-                'name' => '测试2',
-                'value' => '1000',
-            ],
-        );
-    }
-
-    # 对diy页面进行赋值
-    public function getDiy($where, $data)
-    {
-        $data['name']['body'] = [
-            [
-                'id' => 1,
-                'name' => 'test',
-                'desc' => 'dfdf',
-            ],
-        ];
-        return $data;
-    }
-
-    # 获取过滤选项
-    public function getFilter($where)
-    {
-        $result = [];
-        $result[] = [
-            'name' => '全部',
-            'where' => [],
-        ];
-        $where['status'] = 1;
-        $count = Dever::db('source', 'place_order')->count($where);
-        $result[] = [
-            'name' => '待支付('.$count.')',
-            'where' => $where,
-        ];
-
-        $where['status'] = 2;
-        $count = Dever::db('source', 'place_order')->count($where);
-        $result[] = [
-            'name' => '待发货('.$count.')',
-            'where' => $where,
-        ];
-
-        return $result;
-    }
-}

+ 0 - 319
lib/Util.php

@@ -1,319 +0,0 @@
-<?php namespace Manage\Lib;
-use Dever;
-use Dever\Helper\Str;
-use Dever\Helper\Env;
-use Dever\Helper\Secure;
-use Dever\Helper\Date;
-class Util
-{
-    # 获取后台传入的数据
-    public function request($col)
-    {
-        return Dever::input(['set', 'field'])[$col] ?? 0;
-    }
-
-    # 快速生成tip
-    public function createTip($call)
-    {
-        $name = '-';
-        $content = [];
-        $call($name, $content);
-        $result['name'] = $name;
-        if ($content) {
-            $result['content'] = ['type' => 'line', 'content' => $content];
-        }
-        return $result;
-    }
-
-    # 加入cron
-    public function cron($name, $project, $api, $time = 3600)
-    {
-        $data = ['project' => $project, 'interface' => $api];
-        $info = Dever::db('cron', 'manage')->find($data);
-        if (!$info) {
-            $data['name'] = $name;
-            $data['ldate'] = time();
-            $data['time'] = 3600;
-            Dever::db('cron', 'manage')->insert($data);
-        }
-    }
-
-    # 快速使用tip里的content
-    public function getTip($data, $key)
-    {
-        return $data['content']['content'][$key]['content'] ?? '';
-    }
-
-    public function info()
-    {
-        $auth = $this->auth();
-        $system = Dever::db('system', 'manage')->find($auth['extend']['system_id']);
-        return Dever::db($system['user_table'])->find($auth['uid']);
-    }
-
-    public function auth()
-    {
-        $auth = Dever::input('authorization');
-        if ($auth) {
-            $auth = Str::decode($auth);
-        }
-        if (!$auth) {
-            $auth = Env::header('authorization');
-        }
-        if ($auth) {
-            $auth = str_replace('Bearer ', '', $auth);
-            Dever::session('auth', $auth);
-            $info = Secure::checkLogin($auth);
-            return $info;
-        }
-        return false;
-    }
-
-    # 获取当前的扩展数据
-    public function extend()
-    {
-        # 先从query的set中获取,这个不影响用户登录
-        $auth = $this->request('authorization');
-        if ($auth) {
-            $auth = Str::decode($auth);
-            $info = Secure::checkLogin($auth);
-            if ($info) {
-                return $info['extend'];
-            }
-        }
-        # 从登录里获取
-        $info = $this->auth();
-        if (!$info) {
-            $auth = Dever::session('auth');
-            if (!$auth) {
-                return false;
-            }
-            $info = Secure::checkLogin($auth);
-        }
-        if ($info && isset($info['extend'])) {
-            return $info['extend'];
-        }
-        return false;
-    }
-
-    # 获取页面类
-    public function page($load, $config = [], $key = 'list', $input = true)
-    {
-        $page = new Page($key, $load, $input, $config);
-        return $page;
-    }
-
-    # 获取当前使用的系统 一般为数据库隔离使用
-    public function system($info = false, $module = true, $field = false)
-    {
-        if (!$info) {
-            # 单独的数据库隔离,不影响当前登录状态
-            $info = $this->extend();
-        }
-        if ($info && isset($info['info_id']) && isset($info['partition'])) {
-            # 这里后续增加从数据库中获取
-            $value = $info['system_id'] . '_' . $info['info_id'];
-            $result = [];
-            if (strpos($info['partition'], '.')) {
-                $temp = explode('.', $info['partition']);
-                $result = $this->partition($result, $temp[0], $info['system_key'], $value);
-                if ($module && isset($info['data_id']) && $info['data_id']) {
-                    if ($temp[0] == $temp[1]) {
-                        $value .= '/' . $info['module_id'] . '_' . $info['data_id'];
-                        $result = $this->partition($result, $temp[0], $info['system_key'], $value);
-                    } else {
-                        $result = $this->partition($result, $temp[1], $info['system_key'], $info['module_id'] . '_' . $info['data_id']);
-                    }
-                }
-            } else {
-                $result = $this->partition($result, $info['partition'], $info['system_key'], $value);
-            }
-            if ($field) {
-                $result['field'] = Dever::call($field);
-            }
-            return $result;
-        }
-        return false;
-    }
-
-    # 设置数据隔离
-    private function partition(&$result, $type, $key, $value)
-    {
-        if ($type == 'field') {
-            $result[$type] = [
-                'type' => 'key',
-                'field' => $key,
-                'value' => $value,
-            ];
-        } elseif ($type == 'where') {
-            $result[$type] = [
-                $key => $value
-            ];
-        } else {
-            $result[$type] = $value;
-        }
-        return $result;
-    }
-
-    # 获取token需要用到的key
-    public function getToken()
-    {
-        $extend = $this->extend();
-        if ($extend) {
-            return implode('-', array_values($extend));
-        }
-        return '';
-    }
-
-    # 将token设置到route权限中,方便后续读取
-    # 系统、模块、模块账户、数据id
-    public function setAuth($system, $module_id, $info_id, $data_id = '')
-    {
-        if (is_string($system)) {
-            $system = Dever::db('system', 'manage')->find(['key' => $system]);
-        }
-        if (is_string($module_id)) {
-            $module_id = Dever::db('system_module', 'manage')->column(['key' => $module_id], 'id');
-        }
-        $token = $this->token(-1, '', $system['partition'], $system['key'], $system['id'], $info_id, $module_id, $data_id);
-        return \Dever\Route::$data['authorization'] = Secure::encode($token['token']);
-    }
-
-    # 生成token
-    public function token($uid, $mobile, $partition, $system_key, $system_id, $info_id, $module_id, $data_id)
-    {
-        $extend['partition'] = $partition;
-        $extend['system_key'] = $system_key;
-        $extend['system_id'] = $system_id;
-        $extend['info_id'] = $info_id;
-        $extend['module_id'] = $module_id;
-        $extend['data_id'] = $data_id;
-        if ($uid && $uid > 0) {
-            $select['uid'] = $uid;
-            $select['system_id'] = $system_id;
-            $select['info_id'] = $info_id;
-            $info = Dever::db('system_user', 'manage')->find($select);
-            $select += $extend;
-            if (!$info) {
-                Dever::db('system_user', 'manage')->insert($select);
-            } else {
-                Dever::db('system_user', 'manage')->update($info['id'], $select);
-            }
-        }
-        return array('token' => Secure::login($uid, $extend));
-    }
-
-    # 生成密码
-    public function createPwd($password)
-    {
-        $data['salt'] = Str::salt(8);
-        $data['password'] = $this->hash($password, $data['salt']);
-        return $data;
-    }
-
-    # 生成时间
-    public function crateDate($date)
-    {
-        return Date::mktime($date);
-    }
-
-    # hash加密
-    public function hash($password, $salt)
-    {
-        return hash('sha256', $password . $salt);
-    }
-
-    # 自动更新key
-    public function updateKey($db, $data)
-    {
-        if ($data['name'] && !$data['key']) {
-            if (Dever::project('pinyin')) {
-                $where = [];
-                if (isset($data['id']) && $data['id']) {
-                    $where['id'] = ['!=', $data['id']];
-                }
-                $data['key'] = Dever::load('convert', 'pinyin')->getPinyin($data['name']);
-
-                # 检查是否存在
-                $where['key'] = $data['key'];
-                $info = $db->find($where);
-                if ($info) {
-                    $data['key'] .= '-' . date('YmdHis');
-                }
-            }
-        }
-        return $data;
-    }
-
-    # 设置联动
-    public function cascader($total, $func)
-    {
-        $total = Dever::input('total', 'is_numeric', '联动总数', $total);
-        $level = Dever::input('level', 'is_numeric', '联动级别', 1);
-        $parent = Dever::input('parent', 'isset', '联动ID', 0);
-        if ($parent < 0) {
-            Dever::error('error');
-        }
-        $data = $func($level, $parent);
-        if ($level >= $total) {
-            foreach ($data as &$v) {
-                $v['leaf'] = true;
-            }
-        }
-        $result['total'] = $total;
-        $result['list'] = $data;
-        return $result;
-    }
-
-    # 根据load获取db
-    public function db($load)
-    {
-        $menu = [];
-        $load = explode('/', ltrim($load, '/'));
-        if (isset($load[2])) {
-            $app = $load[1];
-            $table = $load[2];
-        } else {
-            $app = $load[0];
-            $table = $load[1];
-        }
-        $parent = Dever::db('menu', 'manage')->find(['key' => $app]);
-        if ($parent) {
-            $menu = Dever::db('menu', 'manage')->find(['parent_id' => $parent['id'], 'key' => $table]);
-            if ($menu) {
-                $app = $menu['app'];
-            }
-        }
-        $set = Dever::project($app);
-        $manage = $set['path'] . 'manage/'.$table.'.php';
-        if (is_file($manage)) {
-            $manage = include $manage;
-            if ($source = Dever::issets($manage, 'source')) {
-                if (strpos($source, '/')) {
-                    $source = explode('/', $source);
-                    $app = $source[0];
-                    $table = $source[1];
-                } else {
-                    $table = $source;
-                }
-            }
-        }
-        $db = Dever::db($table, $app);
-        $db->config['manage'] = $manage;
-        return [$db, $menu];
-    }
-
-    # 获取项目
-    public function project()
-    {
-        $result = [];
-        $app = \Dever\Project::read();
-        foreach ($app as $k => $v) {
-            $result[] = [
-                'id' => $k,
-                'name' => $v['lang'] ?? $k,
-            ];
-        }
-        return $result;
-    }
-}

+ 7 - 7
manage/admin.php

@@ -7,7 +7,7 @@ return [
         # 多选功能,配合批量操作
         //'selection' => true,
         # 列表页筛选功能
-        //'filter' => 'manage/test.getFilter',
+        //'filter' => 'Manage/Lib/Test.getFilter',
         //'where' => ['group_id' => $group],
         # 列表页类型 table表格、article文章、pic图片、goods商品,默认是表格,除table外,其余类型需要增加layout项,用以控制展示位置,并且批量操作功能将失效,如批量删除、批量操作等,后续增加更多类型
         'type' => 'table',
@@ -67,7 +67,7 @@ return [
             'cdate',
         ],
         # 扩展展示内容
-        //'expand' => 'manage/util.show',
+        //'expand' => 'Manage/Lib/Util.show',
 
         /*
         'type' => 'article',
@@ -175,7 +175,7 @@ return [
         # 列表页导出
         'export' => [
             'out' => '导出',
-            'manage/util.out' => '自定义导出',
+            'Manage/Lib/Util.out' => '自定义导出',
         ],
         # 搜索字段 fulltext 模糊查询
         'search'    => [
@@ -184,7 +184,7 @@ return [
             'role' => 'group',
         ],
         # 统计
-        //'stat' => 'manage/util.stat',
+        //'stat' => 'Manage/Lib/Util.stat',
     ],
     
     # 更新页配置
@@ -444,7 +444,7 @@ return [
                 # 是否开启控制功能,需要配置control
                 //'control' => true,
                 # 开启远程获取数据功能,这里设置接口即可,访问到api下
-                'remote' => 'manage/admin.getModuleData',
+                'remote' => 'Manage/Api/Admin.getModuleData',
             ],
             'module_data' => [
                 'type' => 'tree',
@@ -496,8 +496,8 @@ return [
     ],
 
     # 详情页配置
-    'view' => 'manage/util.view',
+    'view' => 'Manage/Lib/Util.view',
 
     # 自定义页配置
-    //'diy1' => 'manage/test.diy',
+    //'diy1' => 'Manage/Lib/Test.diy',
 ];

+ 1 - 1
manage/config.php

@@ -14,7 +14,7 @@ return [
             'load' => 'manage/config',
             'add' => '新增',
             'key' => 'id',
-            'data' => 'config.getTree',
+            'data' => 'Config/Lib/Config.getTree',
             'active' => 1,
             'where' => 'id',
         ],

+ 1 - 1
manage/cron.php

@@ -35,7 +35,7 @@ return [
                 'type' => 'date',
                 'date_type' => 'datetime',
                 //'value_format' => 'YYYY-MM-DD HH:mm:ss',
-                'handle' => 'manage/util.crateDate',
+                'handle' => 'Manage/Lib/Util.crateDate',
                 'rules' => true,
             ],
             'time' => [

+ 1 - 1
manage/diy.php

@@ -36,7 +36,7 @@ $config['search'] = [
     'cdate',
 ];
 # 数据来源
-$config['data'] = 'manage/test.getDiy';
+$config['data'] = 'Manage/Lib/Test.getDiy';
 
 
 $config['data1'] = [

+ 1 - 1
manage/group_manage.php

@@ -53,6 +53,6 @@ return [
             'status' => 'radio',
         ],
         'check' => 'key',
-        'end' => 'manage/system.update?system=group',
+        'end' => 'Manage/Lib/System.update?system=group',
     ],
 ];

+ 1 - 1
manage/menu.php

@@ -17,7 +17,7 @@ return [
             # 关键字段,一般为id或者key
             'key' => 'id',
             # 获取数据
-            'data' => 'manage/module.getTree',
+            'data' => 'Manage/Lib/Module.getTree',
             # 默认展开
             'active' => 1,
             # 对应的where条件的key

+ 1 - 1
manage/recycler.php

@@ -3,7 +3,7 @@ return [
     'list' => [
         'selection' => true,
         # 设置数据来源
-        'data'      => 'manage/recycler.getData', 
+        'data'      => 'Manage/Lib/Recycler.getData', 
         'search'    => [
             'table' => 'hidden',
         ],

+ 4 - 4
manage/role.php

@@ -5,14 +5,14 @@ return [
             'id',
             'name',
             'module' => [
-                'show' => 'Dever::load("role", "manage")->showModule("{module}")',
+                'show' => 'Dever::call("Manage/Lib/Role.showModule", ["{module}"])'
             ],
             'menu' => [
-                'show' => 'Dever::load("role", "manage")->showMenu("{menu}")',
+                'show' => 'Dever::load(\\Manage\\Lib\\Role::class)->showMenu("{menu}")',
             ],
             /*
             'auth' => [
-                'show' => 'Dever::load("role", "manage")->showFunc("{auth}")',
+                'show' => 'Dever::load(\\Manage\\Lib\\Role::class)->showFunc("{auth}")',
             ],*/
             'cdate',
         ],
@@ -30,6 +30,6 @@ return [
                 'type' => 'tree',
             ],
         ],
-        'start' => 'role.update',
+        'start' => 'Manage/Lib/Role.update',
     ],
 ];

+ 2 - 3
table/admin.php

@@ -22,10 +22,9 @@ return [
             'name'      => '角色',
             'type'      => 'varchar(100)',
             # 该字段的值 radio、select、checkbox有效,定义从哪个表获取数据
-            'value'    => 'manage/role',
+            'value'    => 'Manage/role',
             /*
-            'value'    => 'manage/role',//跟role一样,但可以调取别的app的方法
-            'value'    => 'Dever::call("manage/role.get")',//调用某个类的方法
+            'value'    => 'Dever::load("Manage/Lib/Role")->get()',//调用某个类的方法
             'value'    => [1 => 'a', 2 => 'b'],//直接设置可选项
             */
         ],

+ 1 - 1
table/cron.php

@@ -10,7 +10,7 @@ return [
         'project'       => [
             'type'      => 'varchar(30)',
             'name'      => '项目',
-            'value'     => 'Dever::call("manage/util.project")',
+            'value'     => 'Dever::load("Manage/Lib/Util")->project()',
         ],
         
         'interface'     => [

+ 1 - 1
table/group_org.php

@@ -1,7 +1,7 @@
 <?php
 return [
     'name' => '集团组织',
-    'partition' => 'Dever::call("manage/util.system")',
+    'partition' => 'Dever::load("Manage/Util")->system()',
     'order' => 'sort asc',
     'struct' => [
         'name' => [

+ 1 - 1
table/group_org_job.php

@@ -1,7 +1,7 @@
 <?php
 return [
     'name' => '组织职位',
-    'partition' => 'Dever::call("manage/util.system")',
+    'partition' => 'Dever::load("Manage/Util")->system()',
     'order' => 'sort asc',
     'struct' => [
         'org_id'      => [

+ 1 - 1
table/group_role.php

@@ -1,7 +1,7 @@
 <?php
 return [
     'name' => '集团角色',
-    'partition' => 'Dever::call("manage/util.system")',
+    'partition' => 'Dever::load("Manage/Util")->system()',
     'struct' => [
         'name' => [
             'name'      => '名称',

+ 1 - 1
table/group_user.php

@@ -2,7 +2,7 @@
 return [
     'name' => '集团账户',
     # 定义数据分离
-    'partition' => 'Dever::call("manage/util.system")',
+    'partition' => 'Dever::load("Manage/Util")->system()',
     'struct' => [
         'name' => [
             'name'      => '姓名',

+ 1 - 1
table/menu.php

@@ -14,7 +14,7 @@ return [
         'app' => [
             'name'      => '项目',
             'type'      => 'varchar(32)',
-            'value'     => '\\Dever\\Project::read()',
+            'value'     => 'Dever::get(\\Dever\\Project::class)->read()',
         ],
         'parent_id' => [
             'name'      => '上级菜单',

+ 1 - 1
table/role.php

@@ -17,7 +17,7 @@ return [
         'auth' => [
             'name'      => '权限',
             'type'      => 'text',
-            'value'    => 'Dever::call("manage/role.getAuthData")',
+            'value'    => 'Dever::call("Manage/Lib/Role.getAuthData")',
         ],
     ],
     'default' => [