rabin 1 month ago
parent
commit
224d3bdb91
43 changed files with 671 additions and 193 deletions
  1. 6 1
      api/Page/Data.php
  2. 6 2
      api/Page/Oper.php
  3. 4 0
      assets/static/css/515.css
  4. 6 0
      assets/static/css/app.css
  5. 4 0
      assets/static/css/element-plus.css
  6. 96 0
      assets/static/css/loading.css
  7. 4 0
      assets/static/css/vab-chunk-4e2fb6b0.css
  8. 4 0
      assets/static/css/vab-chunk-a523c416.css
  9. 4 0
      assets/static/css/vab-plugins.css
  10. BIN
      assets/static/fonts/remixicon.31d28485.eot
  11. BIN
      assets/static/fonts/remixicon.881fbc46.woff
  12. BIN
      assets/static/fonts/remixicon.888e61f0.ttf
  13. BIN
      assets/static/fonts/remixicon.9915fef9.woff2
  14. BIN
      assets/static/img/403.png
  15. BIN
      assets/static/img/404.png
  16. BIN
      assets/static/img/background-1.png
  17. BIN
      assets/static/img/background.jpg
  18. BIN
      assets/static/img/login_form.png
  19. 153 0
      assets/static/img/remixicon.95138f36.svg
  20. 7 0
      assets/static/js/123.js
  21. 13 0
      assets/static/js/16.js
  22. 5 0
      assets/static/js/515.js
  23. 4 0
      assets/static/js/app.js
  24. 5 0
      assets/static/js/element-plus.js
  25. 5 0
      assets/static/js/vab-chunk-06b9cdb9.js
  26. 5 0
      assets/static/js/vab-chunk-0ee8b09c.js
  27. 5 0
      assets/static/js/vab-chunk-199b0f51.js
  28. 5 0
      assets/static/js/vab-chunk-24b3e646.js
  29. 5 0
      assets/static/js/vab-chunk-47257c03.js
  30. 5 0
      assets/static/js/vab-chunk-4e2fb6b0.js
  31. 5 0
      assets/static/js/vab-chunk-69403744.js
  32. 5 0
      assets/static/js/vab-chunk-847746f7.js
  33. 5 0
      assets/static/js/vab-chunk-a523c416.js
  34. 5 0
      assets/static/js/vab-chunk-b886e5fb.js
  35. 5 0
      assets/static/js/vab-chunk-c5c6856a.js
  36. 5 0
      assets/static/js/vab-chunk-e3ff9315.js
  37. 5 0
      assets/static/js/vab-plugins.js
  38. 27 4
      lib/Common.php
  39. 27 13
      lib/Page.php
  40. 41 34
      lib/Test.php
  41. 28 2
      manage/admin.php
  42. 161 137
      manage/diy.php
  43. 1 0
      manage/recycler.php

+ 6 - 1
api/Page/Data.php

@@ -80,7 +80,7 @@ class Data extends Page
             $data['stat'] = Dever::call($this->config['stat'], [$where]);
         }
         
-        $data['bodyButton'] = isset($this->config['data_button']) ? true : false;
+        $data['bodyButton'] = (isset($this->config['data_button']) && $this->config['data_button']) || isset($this->config['data_button_list']) ? true : false;
         return $data;
     }
 
@@ -106,6 +106,11 @@ class Data extends Page
         if ($button) {
             $result['button'] = $button;
         }
+        $button = $this->button('data_button_list', $v, false);
+        if ($button) {
+            $result['button_list'] = $button;
+        }
+        
         # 是否保留html代码,1是保留,2是不保留
         $html = Dever::input('html', '', '', 1);
         if (isset($v['_id'])) {

+ 6 - 2
api/Page/Oper.php

@@ -19,7 +19,11 @@ class Oper extends Page
     public function up()
     {
         $input = Dever::input();
-        $field = explode(',', Dever::input('field'));
+        $field = Dever::input('field');
+        if (is_array($field)) {
+            $field = $field['field'];
+        }
+        $field = explode(',', $field);
         foreach ($field as $k => $v) {
             if (isset($input[$v]) && $value = $input[$v]) {
                 if (is_array($value)) {
@@ -37,7 +41,7 @@ class Oper extends Page
             if (isset($this->config['up_end']) && $this->config['up_end']) {
                 Dever::call($this->config['up_end'], [$this->id, $data]);
             }
-            return '操作成功';
+            return ['msg' => '操作成功', 'upAdmin' => false];
         } else {
             Dever::error('操作失败');
         }

File diff suppressed because it is too large
+ 4 - 0
assets/static/css/515.css


File diff suppressed because it is too large
+ 6 - 0
assets/static/css/app.css


File diff suppressed because it is too large
+ 4 - 0
assets/static/css/element-plus.css


+ 96 - 0
assets/static/css/loading.css

@@ -0,0 +1,96 @@
+.first-loading-wrp {
+  display: flex;
+  flex-direction: column;
+  align-items: center;
+  justify-content: center;
+  height: 90vh;
+  min-height: 90vh;
+}
+
+.first-loading-wrp > h1 {
+  font-size: 28px;
+  font-weight: bolder;
+}
+
+.first-loading-wrp .loading-wrp {
+  display: flex;
+  align-items: center;
+  justify-content: center;
+  padding: 98px;
+}
+
+.dot {
+  position: relative;
+  box-sizing: border-box;
+  display: inline-block;
+  width: 64px;
+  height: 64px;
+  font-size: 64px;
+  transform: rotate(45deg);
+  animation: antRotate 1.2s infinite linear;
+}
+
+.dot i {
+  position: absolute;
+  display: block;
+  width: 28px;
+  height: 28px;
+  background-color: #1890ff;
+  border-radius: 100%;
+  opacity: 0.3;
+  transform: scale(0.75);
+  transform-origin: 50% 50%;
+  animation: antSpinMove 1s infinite linear alternate;
+}
+
+.dot i:nth-child(1) {
+  top: 0;
+  left: 0;
+}
+
+.dot i:nth-child(2) {
+  top: 0;
+  right: 0;
+  -webkit-animation-delay: 0.4s;
+  animation-delay: 0.4s;
+}
+
+.dot i:nth-child(3) {
+  right: 0;
+  bottom: 0;
+  -webkit-animation-delay: 0.8s;
+  animation-delay: 0.8s;
+}
+
+.dot i:nth-child(4) {
+  bottom: 0;
+  left: 0;
+  -webkit-animation-delay: 1.2s;
+  animation-delay: 1.2s;
+}
+
+@keyframes antRotate {
+  to {
+    -webkit-transform: rotate(405deg);
+    transform: rotate(405deg);
+  }
+}
+
+@-webkit-keyframes antRotate {
+  to {
+    -webkit-transform: rotate(405deg);
+    transform: rotate(405deg);
+  }
+}
+
+@keyframes antSpinMove {
+  to {
+    opacity: 1;
+  }
+}
+
+@-webkit-keyframes antSpinMove {
+  to {
+    opacity: 1;
+  }
+}

File diff suppressed because it is too large
+ 4 - 0
assets/static/css/vab-chunk-4e2fb6b0.css


File diff suppressed because it is too large
+ 4 - 0
assets/static/css/vab-chunk-a523c416.css


File diff suppressed because it is too large
+ 4 - 0
assets/static/css/vab-plugins.css


BIN
assets/static/fonts/remixicon.31d28485.eot


BIN
assets/static/fonts/remixicon.881fbc46.woff


BIN
assets/static/fonts/remixicon.888e61f0.ttf


BIN
assets/static/fonts/remixicon.9915fef9.woff2


BIN
assets/static/img/403.png


BIN
assets/static/img/404.png


BIN
assets/static/img/background-1.png


BIN
assets/static/img/background.jpg


BIN
assets/static/img/login_form.png


File diff suppressed because it is too large
+ 153 - 0
assets/static/img/remixicon.95138f36.svg


File diff suppressed because it is too large
+ 7 - 0
assets/static/js/123.js


File diff suppressed because it is too large
+ 13 - 0
assets/static/js/16.js


File diff suppressed because it is too large
+ 5 - 0
assets/static/js/515.js


File diff suppressed because it is too large
+ 4 - 0
assets/static/js/app.js


File diff suppressed because it is too large
+ 5 - 0
assets/static/js/element-plus.js


File diff suppressed because it is too large
+ 5 - 0
assets/static/js/vab-chunk-06b9cdb9.js


File diff suppressed because it is too large
+ 5 - 0
assets/static/js/vab-chunk-0ee8b09c.js


File diff suppressed because it is too large
+ 5 - 0
assets/static/js/vab-chunk-199b0f51.js


File diff suppressed because it is too large
+ 5 - 0
assets/static/js/vab-chunk-24b3e646.js


File diff suppressed because it is too large
+ 5 - 0
assets/static/js/vab-chunk-47257c03.js


File diff suppressed because it is too large
+ 5 - 0
assets/static/js/vab-chunk-4e2fb6b0.js


File diff suppressed because it is too large
+ 5 - 0
assets/static/js/vab-chunk-69403744.js


File diff suppressed because it is too large
+ 5 - 0
assets/static/js/vab-chunk-847746f7.js


File diff suppressed because it is too large
+ 5 - 0
assets/static/js/vab-chunk-a523c416.js


File diff suppressed because it is too large
+ 5 - 0
assets/static/js/vab-chunk-b886e5fb.js


File diff suppressed because it is too large
+ 5 - 0
assets/static/js/vab-chunk-c5c6856a.js


File diff suppressed because it is too large
+ 5 - 0
assets/static/js/vab-chunk-e3ff9315.js


File diff suppressed because it is too large
+ 5 - 0
assets/static/js/vab-plugins.js


+ 27 - 4
lib/Common.php

@@ -6,6 +6,12 @@ use Dever\Helper\Secure;
 use Dever\Helper\Date;
 class Common
 {
+    # 获取后台传入的数据
+    public function get($col)
+    {
+        return Dever::input(['set', 'field'])[$col] ?? 0;
+    }
+
     public function info()
     {
         $auth = $this->auth();
@@ -17,7 +23,7 @@ class Common
     {
         $auth = Dever::input('authorization');
         if ($auth) {
-            $auth = \Dever\Helper\Str::decode($auth);
+            $auth = Str::decode($auth);
         }
         if (!$auth) {
             $auth = Env::header('authorization');
@@ -34,6 +40,16 @@ class Common
     # 获取当前的扩展数据
     public function extend()
     {
+        # 先从query的set中获取,这个不影响用户登录
+        $auth = $this->get('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');
@@ -59,6 +75,7 @@ class Common
     public function system($info = false, $module = true, $field = false)
     {
         if (!$info) {
+            # 单独的数据库隔离,不影响当前登录状态
             $info = $this->extend();
         }
         if ($info && isset($info['info_id']) && isset($info['partition'])) {
@@ -117,10 +134,16 @@ class Common
     }
 
     # 将token设置到route权限中,方便后续读取
-    public function setAuth($partition, $system_key, $system_id, $info_id, $module_id, $data_id)
+    public function setAuth($system, $module_id, $info_id, $data_id = '')
     {
-        $token = Dever::load('common', 'manage')->token(-1, '', $partition, $system_key, $system_id, $info_id, $module_id, $data_id);
-        \Dever\Route::$data['authorization'] = Secure::encode($token['token']);
+        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

+ 27 - 13
lib/Page.php

@@ -323,7 +323,7 @@ class Page extends Auth
                 # 一般为更新页面需要的参数
                 $this->setShow($value);
                 $this->setRules($value);
-            } elseif (isset($value['remote'])) {
+            } elseif (isset($value['remote']) && !strstr($value['remote'], 'Dever')) {
                 $value['remote'] = Dever::url($value['remote']);
             }
             if ($type == 'show') {
@@ -376,14 +376,16 @@ class Page extends Auth
                 'width' => '75px',
             ];
         } elseif ($key != 'search' && $v == 'status') {
-            $k = $v;
-            $v = [
-                'type' => 'switch',
-                'show'  => '{status}',
-                'active_value' => 1,
-                'inactive_value' => 2,
-                'width' => '75px',
-            ];
+            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',
+                ];
+            }
         }
     }
 
@@ -419,7 +421,7 @@ class Page extends Auth
             if ($this->key == 'update') {
                 $fast = Dever::input('fast');
                 $value['width'] = '50%';
-                if ($fast == 1) {
+                if ($fast == 1 || $value['type'] == 'editor') {
                     $value['width'] = '100%';
                 } 
             }
@@ -512,7 +514,7 @@ class Page extends Auth
                 $value['value'] = [1,''];
             }
         } elseif ($value['type'] == 'date') {
-            if (empty($value['shortcuts'])) {
+            if (empty($value['shortcuts']) && isset($value['date_type'])) {
                 $value['shortcuts'] = Dever::load('data', 'manage')->getShortcuts($value['date_type']);
             }
         } elseif (is_array($value['value'])) {
@@ -583,9 +585,13 @@ class Page extends Auth
         return $this->input ? Dever::input($key) : $value;
     }
 
-    public function button($key = 'button', $data = [])
+    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'])) {
@@ -602,7 +608,7 @@ class Page extends Auth
             } else {
                 $this->config[$key] = ['编辑' => $fast . 'edit', '删除' => 'recycle'];
             }
-        }
+        }*/
         $sort = 1;
         foreach ($this->config[$key] as $k => $v) {
             $d = '';
@@ -636,6 +642,14 @@ class Page extends Auth
                 }
                 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('common', 'manage')->setAuth($value[0], $value[1], $data[$value[2]] ?? $temvaluep[2], $data[$value[3]] ?? $value[3]);
+                    }
                 }
                 $v = $v[0];
             }

+ 41 - 34
lib/Test.php

@@ -18,39 +18,15 @@ class Test
         return $result;
     }
 
-    # 仅为测试用,展示表格更多内容
+    # 仅为测试用,展示表格更多内容,类型参考diy.php
     public function show($data)
     {
-        # 返回类型:string字符串,table表格,card卡片,desc描述,list列表
-        $result['type'] = 'string';
-        $result['content'] = 'ddddd';
-
-        $result['type'] = 'table';
-        $result['head'] = ['id' => 'id', 'name' => '姓名'];
-        $result['body'] = array
-        (
-            ['id' => '1', 'name' => 'test'],
-            ['id' => '2', 'name' => 'test2'],
-        );
-
-        $result['type'] = 'card';
-        $result['content'] = array();
-        $result['content'][] = array
-        (
-            'title' => '订单信息',
-            'shadow' => 'never',//always | never | hover
-            'content' => [
-                '1111',
-                '2222',
-            ], 
-        );
-
         $result['type'] = 'list';
-        $result['content'] = array
-        (
-            ['日志类型', 'test'],
-            ['姓名', 'test1'],
-        );
+        $result['content'] = [
+            ['name'=>'标题', 'content'=>'内容'],
+            ['name'=>'标题', 'content'=>'内容'],
+            ['name'=>'标题', 'content'=>'内容'],
+        ];
         return $result;
     }
 
@@ -60,7 +36,7 @@ class Test
         return ['name' => '查看详情', 'content' => $this->show($data)];
     }
 
-    # 仅为测试用,展示详情
+    # 仅为测试用,展示详情,类型参考diy.php
     public function view($page)
     {
         # 这里获取基本信息
@@ -364,10 +340,41 @@ class Test
         );
     }
 
-    # 自定义页面
-    public function diy($data = [])
+    # 对diy页面进行赋值
+    public function getDiy($where, $data)
     {
-        # 里面的类型参考diy.php
+        $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;
     }
 }

+ 28 - 2
manage/admin.php

@@ -4,6 +4,10 @@ return [
     //'source' => 'manage/admin',
     # 列表页配置
     'list' => [
+        # 多选功能,配合批量操作
+        //'selection' => true,
+        # 列表页筛选功能
+        //'filter' => 'manage/test.getFilter',
         //'where' => ['group_id' => $group],
         # 列表页类型 table表格、article文章、pic图片、goods商品,默认是表格,除table外,其余类型需要增加layout项,用以控制展示位置,并且批量操作功能将失效,如批量删除、批量操作等,后续增加更多类型
         'type' => 'table',
@@ -115,7 +119,7 @@ return [
         'button' => [
             '新增' => 'add',
             //'新增' => 'fastadd',
-            '删除' => 'recycle',//删除到回收站
+            //'删除' => 'recycle',//删除到回收站 此功能暂时废弃,可以用filter和oper自行实现
             //'彻底删除' => 'delete',
             //'更改角色' => ['oper', 'role'],
             //'链接跳转' => ['link', 'https://www.baidu.com/'],
@@ -131,7 +135,7 @@ return [
             # 打开其他表的新增
             //'新增子菜单' => ['fastadd', 'platform/admin'],
             //'新增子菜单' => ['fastadd', ['path' => 'place_user_log/wallet', 'field' => ['uid' => 'id']]],
-            '删除' => 'recycle',//删除到回收站
+            //'删除' => 'recycle',//删除到回收站 此功能暂时废弃,可以用filter和oper自行实现
             //'彻底删除' => 'delete',
             //'操作' => ['oper', 'role'],
             //'接口操作' => ['api', 'api'],
@@ -142,6 +146,28 @@ return [
             //'路由跳转' => ['route', 'manage/menu?test=1', 'ChatLineSquare'],
             //'管理账户列表' => ['route', ['path' => 'set_group/group_user', 'param' => ['set' => ['module_id' => 2, 'relation_id' => 'id']]]],
         ],
+
+        # 按钮组复杂例子
+        /*
+        'data_button' => [
+            '编辑' => 'edit',
+            '内容' => ['route', [
+                'path' => 'source_manage/content',
+                'param' => [
+                    'set' => ['info_id' => 'id', 'menu' => 'source_manage/info', 'parent' => 'source_manage/info'],
+                ],
+            ]],
+        ],
+        # 更多按钮
+        'data_button_list' => [
+            '编辑' => 'edit',
+            '内容' => ['route', [
+                'path' => 'source_manage/content',
+                'param' => [
+                    'set' => ['info_id' => 'id', 'menu' => 'source_manage/info', 'parent' => 'source_manage/info'],
+                ],
+            ]],
+        ],*/
         # 列表页导入
         'import' => [
 

+ 161 - 137
manage/diy.php

@@ -1,98 +1,132 @@
 <?php
-# 自定义页面,还缺搜索、分页、按钮等,这里也支持定义'diy' => 'manage/test.diy',参考view
+# 自定义页面,还缺分页、按钮等,这里也支持定义'diy' => 'manage/test.diy',参考view
 
-# type:table、chart、stat、trend、data、desc、info、timeline、progress、image、link、tag、text、button
 $config['layout'] = [
     [
-        'data1' => 6,
+        'search' => 24,
+    ],
+    [
+        'data1' => 6,//这里也支持不同屏幕的,用数组[xs,sm,md,lg,xl]
         'data2' => 6,
         'data3' => 6,
         'data4' => 6,
     ],
     [
-        'name' => 12,//这里也支持不同屏幕的,用数组[xs,sm,md,lg,xl]
-        'test' => 12,
+        'data5' => 6,
+        'data6' => 6,
+        'data7' => 6,
+        'data8' => 6,
+    ],
+    [
+        'data9' => 24,
     ],
     [
-        'chart' => 8,
-        'stat' => 8,
-        'timeline' => 8,
+        'data10' => 4,
+        'data11' => 4,
+        'data12' => 4,
+        'data13' => 4,
+        'data14' => 4,
+        'data15' => 4,
     ],
 ];
 
-$config['name'] = [
+# 搜索比较特殊,需要定义source,会自动生成搜索项
+$config['source'] = 'manage/admin';
+$config['search'] = [
+    'cdate',
+];
+# 数据来源
+$config['data'] = 'manage/test.getDiy';
 
-    # 类型
-    'type' => 'table',
 
-    # 比view页面多出了header和footer
-    # 头部信息
-    'header' => [
-        'left' => '左侧标题',
-        'left_icon' => 'alert-line',
-        'left_tips' => '提示',
-        'right' => '右侧标题',
-        # 右侧样式
-        'right_type' => 'success',
+$config['data1'] = [
+
+    # 趋势
+    'type' => 'trend',
+    'name' => '趋势数据',
+    'icon' => 'album-line',
+    'number' => [
+        # 展示的值
+        'value' => 1000,
+        # 从零开始
+        'start' => 0,
+        # 前缀
+        'prefix' => '¥',
+        # 后缀
+        'suffix' => '',
+        # 间隔符
+        'separator' => '',
+        # 时间间隔
+        'duration' => 8000,
     ],
-    
-    # 尾部信息,同头部信息
-    'footer' => [
-        'left' => '左侧',
-        'right' => '右侧',
-        # 右侧样式
+    'bottom' => [
+        'left' => '自上周以来',
+        'right' => '10%',
+        'right_icon' => 'arrow-up-line',
         'right_type' => 'success',
     ],
+];
 
-    # 中间内容设置 这里和manage/test.view一致
-    'name' => '',
-    'border' => false,
-    'height' => 'auto',
+$config['data2'] = [
 
-    'head' => array
-    (
-        [
-            'key' => 'name',
-            'name' => '姓名',
-            'fixed' => 'fixed',
-        ],
-        [
-            'key' => 'desc',
-            'name' => '描述',
-            'fixed' => 'fixed',
-        ],
-    ),
-    'button' => array
-    (
-        array
-        (
-            'name' => '编辑',
-            'type' => 'fastedit',
-            'load' => 'platform/role',
-        ),
-    ),
-    'body' => array
-    (
-        [
-            'id' => 1,
-            'name' => 'test',
-            'desc' => 'dfdf',
-        ],
-    ),
+    # 数据
+    'type' => 'data',
+    'name' => '普通数据',
+    'icon' => 'album-line',
+    'number' => [
+        # 展示的值
+        'value' => 1000,
+        # 从零开始
+        'start' => 0,
+        # 前缀
+        'prefix' => '¥',
+        # 后缀
+        'suffix' => '',
+        # 间隔符
+        'separator' => '',
+        # 时间间隔
+        'duration' => 8000,
+    ],
+    # 渐变背景颜色 浅色
+    'bg1' => '#e4ecff',
+    # 渐变背景颜色 深色
+    'bg2' => '#4d7cfe',
 ];
 
-$config['test'] = [
+$config['data3'] = [
 
-    # 类型
-    'type' => 'table',
+    'type' => 'list',
+    'name' => '列表',
+    'content' => [
+        ['name'=>'标题', 'content'=>'内容'],
+        ['name'=>'标题', 'content'=>'内容'],
+        ['name'=>'标题', 'content'=>'内容'],
+    ],
+];
 
+$config['data4'] = [
+
+    'type' => 'info',
+    'name' => '信息',
+    'info' => '描述',
+    'content' => [
+        ['name'=>'标题', 'content'=>'内容'],
+        ['name'=>'标题', 'content'=>'内容'],
+        ['name'=>'标题', 'content'=>'内容'],
+    ],
+];
+
+$config['data5'] = [
+
+    'type' => 'table',
+    'name' => '表格',
     # 比view页面多出了header和footer
     # 头部信息
     'header' => [
         'left' => '左侧标题',
         'left_icon' => 'alert-line',
         'left_tips' => '提示',
-        'right' => '当前版本:V16.6.0   部署时间:2025-06-13 17:34:17',
+        'right' => '右侧标题',
         # 右侧样式
         'right_type' => 'success',
     ],
@@ -105,8 +139,7 @@ $config['test'] = [
         'right_type' => 'success',
     ],
 
-    # 中间内容设置 这里和manage/test.view一致
-    'name' => '',
+    # 中间内容设置
     'border' => false,
     'height' => 'auto',
 
@@ -128,32 +161,22 @@ $config['test'] = [
         array
         (
             'name' => '编辑',
-            'type' => 'fastedit',
-            'load' => 'platform/role',
+            'type' => 'fastadd',
+            'path' => 'source_manage/help',
         ),
     ),
-    'body' => array
-    (
-        [
-            'id' => 1,
-            'name' => 'test',
-            'desc' => 'dfdf',
-        ],
-    ),
 ];
 
-$config['stat'] = [
+$config['data6'] = [
 
     # 类型
     'type' => 'stat',
-
+    'name' => '数据展示',
     # 比view页面多出了header和footer
     # 头部信息
     'header' => [
         'left' => '趋势',
     ],
-
-    'name' => '统计',
     'content' => array
     (
         [
@@ -180,18 +203,14 @@ $config['stat'] = [
     ),
 ];
 
-$config['timeline'] = [
-
-    # 类型
-    'type' => 'stat',
-
+$config['data7'] = [
     # 比view页面多出了header和footer
     # 头部信息
     'header' => [
-        'left' => '趋势',
+        'left' => '时间线',
     ],
 
-    'name' => '统计',
+    'name' => '时间线',
     'type' => 'timeline',
     'content' => array
     (
@@ -217,15 +236,16 @@ $config['timeline'] = [
         ],
     ),
 ];
-$config['chart'] = [
+$config['data8'] = [
 
     # 类型
     'type' => 'chart',
+    'name' => '图表',
 
     # 比view页面多出了header和footer
     # 头部信息
     'header' => [
-        'left' => '趋势',
+        'left' => '趋势2',
     ],
 
     # 中间内容设置 这里和manage/test.view一致
@@ -266,57 +286,61 @@ $config['chart'] = [
     ]
 ];
 
-$config['data1'] = [
+$config['data9'] = [
+    'type' => 'tip',
+    'name' => '提示',
+    'content' => '以下为显示内容',
+];
 
-    # 趋势
-    'type' => 'trend',
-    'name' => '总销量',
-    'icon' => 'album-line',
-    'number' => [
-        # 展示的值
-        'value' => 1000,
-        # 从零开始
-        'start' => 0,
-        # 前缀
-        'prefix' => '¥',
-        # 后缀
-        'suffix' => '',
-        # 间隔符
-        'separator' => '',
-        # 时间间隔
-        'duration' => 8000,
-    ],
-    'bottom' => [
-        'left' => '自上周以来',
-        'right' => '10%',
-        'right_icon' => 'arrow-up-line',
-        'right_type' => 'success',
-    ],
+$config['data10'] = [
+    'type' => 'text',
+    'name' => '文本',
+    'content' => '文本内容',
+    # 样式primary success warning danger info exception
+    'style' => 'primary',
 ];
 
-$config['data2'] = [
+$config['data11'] = [
+    'type' => 'tag',
+    'name' => '标签',
+    'content' => '标签内容',
+    'style' => 'warning',
+];
 
-    # 数据
-    'type' => 'data',
-    'name' => '订单销售额',
-    'icon' => 'album-line',
-    'number' => [
-        # 展示的值
-        'value' => 1000,
-        # 从零开始
-        'start' => 0,
-        # 前缀
-        'prefix' => '¥',
-        # 后缀
-        'suffix' => '',
-        # 间隔符
-        'separator' => '',
-        # 时间间隔
-        'duration' => 8000,
-    ],
-    # 渐变背景颜色 浅色
-    'bg1' => '#e4ecff',
-    # 渐变背景颜色 深色
-    'bg2' => '#4d7cfe',
+$config['data12'] = [
+    'type' => 'link',
+    'name' => '链接',
+    'content' => '链接内容',
+    'link' => '',
+];
+
+$config['data13'] = [
+    'type' => 'button',
+    'name' => '按钮',
+    'icon' => '',
 ];
+
+$config['data14'] = [
+    'type' => 'image',
+    'name' => '图片',
+    'content' => 'https://fuss10.elemecdn.com/e/5d/4a731a90594a4af544c0c25941171jpeg.jpeg',
+    # 'fill', 'contain', 'cover', 'none', 'scale-down'
+    'fit' => 'fill',
+];
+
+$config['data15'] = [
+    'name' => '进度条',
+    'type' => 'progress',
+    'content' => 50,
+    'style' => 'exception',
+    'width' => 20,
+    'inside' => true,
+    # line dashboard 仪表盘 circle 圆形
+    'show' => 'line',
+    # 开启条纹
+    'striped' => true,
+    # 开启动画
+    'indeterminate' => true,
+];
+
 return $config;

+ 1 - 0
manage/recycler.php

@@ -1,6 +1,7 @@
 <?php
 return [
     'list' => [
+        'selection' => true,
         # 设置数据来源
         'data'      => 'manage/recycler.getData', 
         'search'    => [

Some files were not shown because too many files changed in this diff