rabin 1 year ago
parent
commit
22f846f99b
5 changed files with 113 additions and 49 deletions
  1. 5 5
      api/Page/Data.php
  2. 69 31
      api/Page/Update.php
  3. 9 3
      lib/Auth.php
  4. 12 3
      lib/Page.php
  5. 18 7
      table/manage/admin.php

+ 5 - 5
api/Page/Data.php

@@ -42,7 +42,7 @@ class Data extends Page
         $data['field'] = $data['head'] = array();
         $data['search'] = $this->search($where);
         if (isset($this->config['data'])) {
-            $result = Dever::call($this->config['data'], $where);
+            $result = Dever::call($this->config['data'], array($where));
             $data = array_merge($data, $result);
         } else {
             $data['field'] = $this->setting('field', $data['head'], true, 'show');
@@ -50,14 +50,14 @@ class Data extends Page
         }
         $method = Dever::input('method');
         if ($method && strstr($method, '.')) {
-            $result = Dever::call($method, $data);
+            $result = Dever::call($method, array($data));
             unset($data);
             $data['field'] = $result['head'];
             $data['body'] = $result['body'];
         }
         $data['stat'] = array();
         if (isset($this->config['stat'])) {
-            $data['stat'] = Dever::call($this->config['stat'], $where);
+            $data['stat'] = Dever::call($this->config['stat'], array($where));
         }
         return $data;
     }
@@ -111,7 +111,7 @@ class Data extends Page
             }
         }
         if (isset($this->config['expand']) && $this->config['expand']) {
-            $result['expand'] = Dever::call($this->config['expand'], $result);
+            $result['expand'] = Dever::call($this->config['expand'], array($result));
             $this->expand = true;
         }
         return $result;
@@ -165,7 +165,7 @@ class Data extends Page
     private function button($key = 'button')
     {
         $result = array();
-        if (empty($this->config[$key])) {
+        if (!isset($this->config[$key])) {
             $num = 0;
             if (isset($this->db->config['manage']['update']['field'])) {
                 $num = count($this->db->config['manage']['update']['field']);

+ 69 - 31
api/Page/Update.php

@@ -8,14 +8,14 @@ class Update extends Page
     {
         parent::__construct('update', $load, $id);
     }
-    public function get()
+    public function get($value = array(), &$option = array())
     {
         $func = $this->checkFunc();
         $remote = $show = array();
-        $data['update'] = $data['field'] = array();
+        $data['update'] = $data['field'] = $data['option'] = array();
         $this->setting('field', $data['update'], true, 'text');
         foreach ($data['update'] as $k => $v) {
-            if ($v['type'] == 'tree') {
+            if ($v['type'] == 'tree' || $v['type'] == 'upload') {
                 $v['value'] = array();
             }
             if (isset($v['remote'])) {
@@ -26,6 +26,10 @@ class Update extends Page
                 $show[$v['key']] = array($k, $v['show']);
             }
             $data['field'][$v['key']] = $v['value'];
+            if (isset($v['option'])) {
+                $data['option'][$v['key']] = $v['option'];
+                unset($data['update'][$k]['option']);
+            }
         }
         $this->column($data);
         $data['info_id'] = false;
@@ -47,27 +51,12 @@ class Update extends Page
             }
         }
         if ($this->info) {
-            $data['info'] = $this->info;
-            foreach ($data['info'] as $k => $v) {
-                if (isset($data['field'][$k])) {
-                    if (is_array($data['field'][$k])) {
-                        $v = explode(',', $v);
-                    }
-                    if (isset($this->config['field'][$k]) && isset($this->config['field'][$k]['value'])) {
-                        $v = $this->config['field'][$k]['value'];
-                    }
-                    $data['field'][$k] = $v;
-                    if (isset($remote[$k])) {
-                        $data['update'][$remote[$k][0]]['remote'] = Dever::url($remote[$k][1]);
-                        $result = Dever::call($remote[$k][1], $v, 'api');
-                        if ($result) {
-                            $this->setUpdate($data['update'], $result);
-                        }
-                    }
-                    if (isset($show[$k])) {
-                        $data['update'][$show[$k][0]]['show'] = $this->getShow($show[$k][1], $data['info']);
-                    }
-                }
+            $info = $this->info;
+            $this->setInfo($info, $data, $remote, $show);
+        } elseif ($value) {
+            foreach ($value as $k => $v) {
+                $this->setInfo($v, $data, $remote, $show);
+                $option[$k] = $data['option'];
             }
         } else {
             if ($remote) {
@@ -81,6 +70,7 @@ class Update extends Page
                 }
             }
         }
+        
         $data['desc'] = $this->config['desc'] ?? '';
         $data['drag'] = $this->config['drag'] ?? false;
         $this->layout($data);
@@ -92,10 +82,44 @@ class Update extends Page
         return $data;
     }
 
-    private function setUpdate(&$update, $result)
+    private function setInfo($info, &$data, $remote, $show)
+    {
+        foreach ($info as $k => $v) {
+            if (isset($data['field'][$k])) {
+                if (is_array($data['field'][$k])) {
+                    if ($v) {
+                        $v = explode(',', $v);
+                    } else {
+                        $v = array();
+                    }
+                }
+                
+                if (isset($this->config['field'][$k]) && isset($this->config['field'][$k]['update'])) {
+                    $v = $this->config['field'][$k]['update'];
+                }
+                $data['field'][$k] = $v;
+                if (isset($remote[$k])) {
+                    $data['update'][$remote[$k][0]]['remote'] = Dever::url($remote[$k][1]);
+                    $result = Dever::call($remote[$k][1], array($v), 'api');
+                    if ($result) {
+                        $this->setUpdate($data['update'], $data['option'], $result);
+                    }
+                }
+                if (isset($show[$k])) {
+                    $data['update'][$show[$k][0]]['show'] = $this->getShow($show[$k][1], $info);
+                }
+            }
+        }
+    }
+
+    private function setUpdate(&$update, &$option, $result)
     {
         foreach ($update as $k => $v) {
             if (isset($result[$v['key']])) {
+                if (isset($result[$v['key']]['option'])) {
+                    $option[$v['key']] = $result[$v['key']]['option'];
+                    unset($result[$v['key']]['option']);
+                }
                 $update[$k] = array_merge($update[$k], $result[$v['key']]);
             }
         }
@@ -110,8 +134,22 @@ class Update extends Page
                     if ($v1['key'] == $k) {
                         $show = true;
                         foreach ($v as $k2 => $v2) {
-                            if ($data['field'][$k2] != $v2) {
-                                $show = false;
+                            if (is_array($v2)) {
+                                $temp = false;
+                                foreach ($v2 as $k3 => $v3) {
+                                    if (is_array($data['field'][$k2]) && in_array($v3, $data['field'][$k2])) {
+                                        $temp = true;
+                                    } elseif ($data['field'][$k2] == $v3) {
+                                        $temp = true;
+                                    }
+                                }
+                                $show = $temp;
+                            } else {
+                                if (is_array($data['field'][$k2]) && !in_array($v2, $data['field'][$k2])) {
+                                    $show = false;
+                                } elseif ($data['field'][$k2] != $v2) {
+                                    $show = false;
+                                }
                             }
                         }
                         $data['update'][$k1]['show'] = $show;
@@ -253,11 +291,11 @@ class Update extends Page
             if (isset($value[0])) {
                 $value = ltrim(implode(',', $value), ',');
             } else {
-                $value = Dever::json_ecode($value);
+                $value = Dever::json_encode($value);
             }
         }
         if ($value && isset($this->config['field'][$key]) && $handle = Dever::isset($this->config['field'][$key], 'handle')) {
-            $value = Dever::call($handle, $value);
+            $value = Dever::call($handle, array($value));
             if (is_array($value) && isset($value[$key])) {
                 foreach ($value as $k => $v) {
                     $data[$k] = $v;
@@ -304,7 +342,7 @@ class Update extends Page
     {
         if (isset($this->config['start']) && $this->config['start']) {
             $data['id'] = $id;
-            $data = Dever::call($this->config['start'], $data);
+            $data = Dever::call($this->config['start'], array($data));
         }
     }
 
@@ -312,7 +350,7 @@ class Update extends Page
     {
         if (isset($this->config['end']) && $this->config['end']) {
             $data['id'] = $id;
-            Dever::call($this->config['end'], $data);
+            Dever::call($this->config['end'], array($data));
         }
     }
 

+ 9 - 3
lib/Auth.php

@@ -8,19 +8,19 @@ class Auth
     public $data = array();
     public function __construct()
     {
-        $info = Dever::load('common')->auth();
+        $info = Dever::load('common', 'manage')->auth();
         if (!$info && $this->login) {
             $info['uid'] = 1;
             //Dever::error('请先登录');
         }
         $this->uid = $info['uid'];
-        $this->user = Dever::db('admin')->find($this->uid);
+        $this->user = Dever::db('admin', 'manage')->find($this->uid);
         if (!$this->user) {
             Dever::error('请先登录');
         }
         $this->user['auth'] = array('system' => '', 'menu' => '', 'func' => '');
         if ($this->user['role']) {
-            $role = Dever::db('role')->select(array('id' => array('in', $this->user['role'])))->fetchAll();
+            $role = Dever::db('role', 'manage')->select(array('id' => array('in', $this->user['role'])))->fetchAll();
             foreach ($role as $k => $v) {
                 $this->user['auth']['system'] .= $v['system'] . ',';
                 $this->user['auth']['menu'] .= $v['menu'] . ',';
@@ -85,6 +85,9 @@ class Auth
     # 检测系统权限
     protected function checkSystem($system_id)
     {
+        if ($this->user['id'] == 1) {
+            return;
+        }
         if ($this->user['auth']['system'] && !Dever::check($this->user['auth']['system'], $system_id)) {
             Dever::error('无系统权限');
         }
@@ -93,6 +96,9 @@ class Auth
     # 检测菜单权限
     protected function checkMenu($menu, $result = true)
     {
+        if ($this->user['id'] == 1) {
+            return;
+        }
         if ($this->user['auth']['menu'] && !Dever::check($this->user['auth']['menu'], $menu)) {
             if ($result) {
                 return true;

+ 12 - 3
lib/Page.php

@@ -36,8 +36,6 @@ class Page extends Auth
             if ($this->menu) {
                 $this->checkMenu($this->menu['id'], false);
                 $app = $this->menu['app'];
-            }  else {
-                Dever::error('菜单无效');
             }
         }
         $set = Dever::project($app);
@@ -216,6 +214,8 @@ class Page extends Auth
                     $v = array('name' => '创建时间', 'type' => $v);
                 } elseif(isset($this->db->config['struct'][$k])) {
                     $v = array('name' => $this->db->config['struct'][$k]['name'], 'type' => $v);
+                } else {
+                    $v = array('name' => $v);
                 }
             } else {
                 if (isset($v['only'])) {
@@ -263,7 +263,8 @@ class Page extends Auth
             $this->setShow($value);
             $value['value'] = $this->getOther($key, $value['where'], $this->info);
             $update = new \Manage\Api\Page\Update($key, -1);
-            $value['content'] = $update->get();
+            $value['option'] = array();
+            $value['content'] = $update->get($value['value'], $value['option']);
             $data[] = $value;
             return $value['name'];
         } else {
@@ -326,6 +327,14 @@ class Page extends Auth
         if (strpos($value['type'], '(')) {
             $value['type'] = $type;
         }
+        if (isset($value['upload'])) {
+            $value['url'] = Dever::url('upload/save.act', array('id' => $value['upload']));
+            if (isset($value['multiple']) && $value['multiple']) {
+                $value['limit'] = 10;
+            } else {
+                $value['limit'] = 1;
+            }
+        }
     }
 
     private function setDisable(&$value, $disable)

+ 18 - 7
table/manage/admin.php

@@ -382,8 +382,8 @@ return array
             'password' => array
             (
                 'type' => 'password',
-                # 更新时的value,始终是空的,有值才更新
-                'value' => '',
+                # 更新时的,始终是空的,有值才更新
+                'update' => '',
                 # 对更新的值进行处理
                 'handle' => 'manage/common.createPwd',
                 # 空值不允许入库
@@ -425,12 +425,23 @@ return array
             'avatar' => array
             (
                 'type' => 'upload',
-                # 获取上传组件的配置
-                'upload' => 'pic',
-                # 显示的样式 可选值:'text' | 'picture' | 'picture-card'
-                'style' => 'picture-card',
+                # 这里传入上传规则id
+                'upload' => '1',
                 # 是否支持多选
-                'multiple' => true,
+                'multiple' => false,
+                # 提示
+                'tip' => '',
+            ),
+
+            'avatar' => array
+            (
+                'type' => 'sku',
+                # 这里传入上传规则id
+                'upload' => '1',
+                # 是否支持多选
+                'multiple' => false,
+                # 提示
+                'tip' => '',
             ),
         ),