rabin vor 8 Monaten
Ursprung
Commit
66125f199a
3 geänderte Dateien mit 61 neuen und 34 gelöschten Zeilen
  1. 42 17
      api/Page/Update.php
  2. 12 2
      lib/Common.php
  3. 7 15
      lib/Page.php

+ 42 - 17
api/Page/Update.php

@@ -1,6 +1,8 @@
 <?php namespace Manage\Api\Page;
 use Dever;
 use Manage\Lib\Page;
+ini_set("memory_limit", -1);
+set_time_limit(0);
 # 更新页
 class Update extends Page
 {
@@ -66,7 +68,7 @@ class Update extends Page
         }
         if ($this->info) {
             $info = $this->info;
-            $this->setInfo($info, $data, $remote, $show, $source, $default);
+            $this->setInfo($info, $data, $remote, $show, $source, $default, 1, $this->config['field']);
             if ($spec) {
                 foreach ($spec as $k => $v) {
                     $data['update'][$spec[$k][0]]['remote'] = Dever::url($spec[$k][1]);
@@ -77,8 +79,21 @@ class Update extends Page
                 }
             }
         } elseif ($value) {
+            $field = array();
+            if (isset($this->config['field']) && $this->config['field']) {
+                foreach ($this->config['field'] as $k => $v) {
+                    if (isset($v['field'])) {
+                        $field[$v['field']] = $v;
+                        if (!isset($field[$v['field']]['index'])) {
+                            $field[$v['field']]['index'][] = $k;
+                        }
+                    } else {
+                        $field[$k] = $v;
+                    }
+                }
+            }
             foreach ($value as $k => &$v) {
-                $this->setInfo($v, $data, $remote, $show, $source, $default, 2);
+                $this->setInfo($v, $data, $remote, $show, $source, $default, 2, $field);
                 $option[$k] = $data['option'];
             }
             if (isset($data['reset'])) {
@@ -120,7 +135,7 @@ class Update extends Page
         return $data;
     }
 
-    private function setInfo(&$info, &$data, $remote, $show, $source, $default, $type = 1)
+    private function setInfo(&$info, &$data, $remote, $show, $source, $default, $type = 1, $field = array())
     {
         if ($source) {
             foreach ($source as $k => $v) {
@@ -149,13 +164,13 @@ class Update extends Page
                     }
                     $info[$k] = $v;
                 }
-                if (isset($this->config['field'][$k]) && isset($this->config['field'][$k]['update'])) {
-                    $v = $this->config['field'][$k]['update'];
+                if (isset($field[$k]) && isset($field[$k]['update'])) {
+                    $v = $field[$k]['update'];
                 }
                 if ($k == 'cdate') {
-                   $this->config['field'][$k]['type'] = 'date';
+                   $field[$k]['type'] = 'date';
                 }
-                if (isset($this->config['field'][$k]) && isset($this->config['field'][$k]['type']) && $this->config['field'][$k]['type'] == 'date' && $v) {
+                if (isset($field[$k]) && isset($field[$k]['type']) && $field[$k]['type'] == 'date' && $v) {
                     $v = date('Y-m-d H:i:s', $v);
                 }
                 if ($type == 1) {
@@ -172,6 +187,11 @@ class Update extends Page
                     $data['update'][$show[$k][0]]['show'] = $this->getShow($show[$k][1], $info);
                 }
             }
+            if (isset($field[$k]) && isset($field[$k]['index'])) {
+                foreach ($field[$k]['index'] as $v1) {
+                    $info[$v1] = $v;
+                }
+            }
         }
         if ($default) {
             foreach ($default as $k => $v) {
@@ -246,7 +266,8 @@ class Update extends Page
     {
         $field = $this->input('field', '');
         $data[$type] = array();
-        if (empty($data['layout']) && !$field && isset($this->config[$type])) {
+        //if (empty($data['layout']) && !$field && isset($this->config[$type])) {
+        if (empty($data['layout']) && isset($this->config[$type])) {
             foreach ($this->config[$type] as $k => $v) {
                 if (is_string($v)) {
                     $field = array();
@@ -333,7 +354,7 @@ class Update extends Page
                     } elseif (strpos($v['key'], '/')) {
                         $other[$v['key']] = array($v['where'], $v['content']['field'], $v['content']['drag'], $input[$v['key']]);
                     } else {
-                        $this->doData($data, $v['key'], $input[$v['key']]);
+                        $this->doData($data, $v['key'], $input[$v['key']], $this->config['field']);
                     }
                 } elseif ($id) {
                     $data[$v['key']] = '';
@@ -346,7 +367,7 @@ class Update extends Page
                 Dever::error('无效数据');
             }
             if ($data) {
-                $this->exists($id, $data);
+                $this->exists($id, $data, $this->config['field']);
                 $this->start($id, $data);
                 if ($id) {
                     $info = $this->db->find($id);
@@ -373,7 +394,7 @@ class Update extends Page
         }
     }
 
-    private function doData(&$data, $key, $value)
+    private function doData(&$data, $key, $value, $field = array())
     {
         if (is_array($value)) {
             if (isset($value[0])) {
@@ -382,7 +403,10 @@ class Update extends Page
                 $value = Dever::json_encode($value);
             }
         }
-        if ($value && isset($this->config['field'][$key]) && $handle = Dever::issets($this->config['field'][$key], 'handle')) {
+        if (isset($field[$key]) && isset($field[$key]['field'])) {
+            $key = $field[$key]['field'];
+        }
+        if ($value && isset($field[$key]) && $handle = Dever::issets($field[$key], 'handle')) {
             $value = Dever::call($handle, array($value));
             if (is_array($value) && isset($value[$key])) {
                 foreach ($value as $k => $v) {
@@ -390,13 +414,13 @@ class Update extends Page
                 }
                 return;
             }
-        } elseif (isset($this->config['field'][$key]) && isset($this->config['field'][$key]['type']) && $this->config['field'][$key]['type'] == 'date' && $value) {
+        } elseif (isset($field[$key]) && isset($field[$key]['type']) && $field[$key]['type'] == 'date' && $value) {
             $value = \Dever\Helper\Date::mktime($value);
         }
         $data[$key] = trim($value);
     }
 
-    private function exists($id, $data)
+    private function exists($id, $data, $field)
     {
         if (isset($this->config['check']) && $this->config['check']) {
             $check = explode(',', $this->config['check']);
@@ -404,8 +428,8 @@ class Update extends Page
             $name = array();
             foreach ($check as $k => $v) {
                 if (isset($data[$v])) {
-                    if (isset($this->config['field'][$v]) && isset($this->config['field'][$v]['name'])) {
-                        $n = $this->config['field'][$v]['name'];
+                    if (isset($field[$v]) && isset($field[$v]['name'])) {
+                        $n = $field[$v]['name'];
                     } elseif (isset($this->db->config['struct'][$v])) {
                         $n = $this->db->config['struct'][$v]['name'];
                     } else {
@@ -451,6 +475,7 @@ class Update extends Page
                 if (strpos($k, '#')) {
                     $k = str_replace('#', '', $k);
                 }
+                $set = new Update($k, false);
                 $common = $v[0];
                 $update = $v[1];
                 $drag = $v[2];
@@ -473,7 +498,7 @@ class Update extends Page
                     }
                     foreach ($update as $k2 => $v2) {
                         if (isset($v1[$k2])) {
-                            $this->doData($value, $k2, $v1[$k2]);
+                            $this->doData($value, $k2, $v1[$k2], $set->config['field']);
                         } else {
                             $value[$k2] = '';
                         }

+ 12 - 2
lib/Common.php

@@ -6,9 +6,19 @@ use Dever\Helper\Secure;
 use Dever\Helper\Date;
 class Common
 {
+    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 = Env::header('authorization');
+        if (!$auth) {
+            $auth = \Dever\Helper\Str::decode(Dever::input('authorization'));
+        }
         if ($auth) {
             $auth = str_replace('Bearer ', '', $auth);
             Dever::session('auth', $auth);
@@ -234,9 +244,9 @@ class Common
                 array
                 (
                     'name' => '编辑',
-                    # fastedit、fastadd、oper、api四个按钮类型,参数与list里的data_button一致,多了一个load,可以单独设置路由
+                    # fastedit、fastadd、oper、api、link、route,参数与list里的data_button一致,多了一个load,可以单独设置路由
                     'type' => 'fastedit',
-                    'load' => 'platform/role',
+                    'path' => 'platform/role',
                     # 增加权限,第三个参数是排序,建议大一些
                     //'func' => $page->getFunc('view_fastedit', '详情页-编辑角色', 1000),
                     # 这里是按钮用到的参数数据

+ 7 - 15
lib/Page.php

@@ -47,6 +47,9 @@ class Page extends Auth
             $setting = explode(',', $setting);
         }
         $field = $this->input('field', '');
+        if ($field && is_string($field) && strstr($field, 'dever_')) {
+            $field = '';
+        }
         return $this->setData($setting, $data, $field, $type, $disable);
     }
 
@@ -73,7 +76,7 @@ class Page extends Auth
             } else {
                 if (strstr($value, 'T')) {
                     $value = date('Y-m-d H:i:s', strtotime($value));
-                } elseif ($value) {
+                } elseif (is_numeric($value)) {
                     $value = date('Y-m-d H:i:s', $value);
                 } else {
                     $value = '-';
@@ -103,18 +106,7 @@ class Page extends Auth
 
     public function getShow($show, $data)
     {
-        if (strpos($show, '{') !== false && strpos($show, '{"') === false) {
-            $func = function ($r) use ($data) {
-                if (isset($data[$r[1]])) {
-                    return $data[$r[1]];
-                }
-                return false;
-            };
-            $show = preg_replace_callback('/{(.*?)}/', $func, $show);
-        }
-        $eval = '$show = ' . $show . ';';
-        @eval($eval);
-        return $show;
+        return \Dever\Helper\Str::val($show, $data);
     }
 
     # 获取菜单标题
@@ -244,9 +236,9 @@ class Page extends Auth
                     } elseif (isset($field['field']) && !Dever::check($field['field'], $k)) {
                         continue;
                     }
-                    if (isset($field[$k])) {
+                    if (isset($field[$k]) && $field[$k] != $k) {
                         $v['default'] = $field[$k];
-                        $v['type'] = 'hidden'; 
+                        $v['type'] = 'hidden';
                     }
                 } elseif (!Dever::check($field, $k)) {
                     continue;