Browse Source

Merge branch 'v5.0.0dev' of https://gitee.com/ZhongBangKeJi/CRMEB into v5.0.0dev

# Conflicts:
#	template/admin/src/pages/system/codeGeneration/components/FoundationFor.vue
From-wh 2 years atrás
parent
commit
8f0d0a6138
100 changed files with 192 additions and 81 deletions
  1. 54 2
      crmeb/app/adminapi/controller/v1/setting/SystemCrud.php
  2. 3 0
      crmeb/app/adminapi/middleware/AdminAuthTokenMiddleware.php
  3. 2 0
      crmeb/app/adminapi/route/system.php
  4. 29 5
      crmeb/app/services/system/SystemCrudServices.php
  5. 7 3
      crmeb/crmeb/services/crud/Model.php
  6. 8 2
      crmeb/crmeb/services/crud/Service.php
  7. 24 4
      crmeb/crmeb/services/crud/ViewPages.php
  8. 1 1
      crmeb/crmeb/services/crud/ViewRouter.php
  9. 2 2
      crmeb/crmeb/services/crud/stubs/model/CrudModel.stub
  10. 5 0
      crmeb/crmeb/services/crud/stubs/view/pages/crud/image.stub
  11. 5 0
      crmeb/crmeb/services/crud/stubs/view/pages/crud/images.stub
  12. 2 6
      crmeb/crmeb/services/crud/stubs/view/pages/crud/index.stub
  13. 2 2
      crmeb/crmeb/services/crud/stubs/view/router/modules/crud.stub
  14. 1 1
      crmeb/crmeb/utils/Terminal.php
  15. 1 1
      crmeb/public/admin/css.worker.js
  16. 1 1
      crmeb/public/admin/editor.worker.js
  17. 1 1
      crmeb/public/admin/html.worker.js
  18. 1 1
      crmeb/public/admin/index.html
  19. 1 1
      crmeb/public/admin/json.worker.js
  20. 2 2
      crmeb/public/admin/system_static/css/app.1e71f276.css
  21. 1 1
      crmeb/public/admin/system_static/css/chunk-75955b98.1eff79aa.css
  22. 0 1
      crmeb/public/admin/system_static/css/chunk-011a5902.a1f0b1ed.css
  23. 0 1
      crmeb/public/admin/system_static/css/chunk-017372ad.80b155c7.css
  24. 0 1
      crmeb/public/admin/system_static/css/chunk-0206364c.e960d769.css
  25. 0 1
      crmeb/public/admin/system_static/css/chunk-02d5764c.a387a5f9.css
  26. 1 0
      crmeb/public/admin/system_static/css/chunk-04d9318e.bca09a64.css
  27. 1 0
      crmeb/public/admin/system_static/css/chunk-05106bdc.b893c4af.css
  28. 1 0
      crmeb/public/admin/system_static/css/chunk-05920e65.e2d75467.css
  29. 0 1
      crmeb/public/admin/system_static/css/chunk-05b7b3ab.8baca51f.css
  30. 1 0
      crmeb/public/admin/system_static/css/chunk-05ea5920.30dce022.css
  31. 0 1
      crmeb/public/admin/system_static/css/chunk-06f7b54e.6674366d.css
  32. 1 0
      crmeb/public/admin/system_static/css/chunk-07aab7e8.12163463.css
  33. 0 1
      crmeb/public/admin/system_static/css/chunk-07b5ff65.1b08dbb6.css
  34. 1 0
      crmeb/public/admin/system_static/css/chunk-07eb3cf3.572108c3.css
  35. 1 1
      crmeb/public/admin/system_static/css/chunk-12f282dc.3606733e.css
  36. 1 0
      crmeb/public/admin/system_static/css/chunk-08e6167b.b42725be.css
  37. 0 1
      crmeb/public/admin/system_static/css/chunk-09539496.21906b70.css
  38. 1 0
      crmeb/public/admin/system_static/css/chunk-099175c5.89f04a35.css
  39. 1 0
      crmeb/public/admin/system_static/css/chunk-0a0e823b.98af5d00.css
  40. 1 0
      crmeb/public/admin/system_static/css/chunk-0b503f84.47c9981a.css
  41. 1 0
      crmeb/public/admin/system_static/css/chunk-0bf7991c.ec23e6f9.css
  42. 0 1
      crmeb/public/admin/system_static/css/chunk-0c8efa00.b0d7b9e0.css
  43. 0 1
      crmeb/public/admin/system_static/css/chunk-0c9c680c.1287012e.css
  44. 0 1
      crmeb/public/admin/system_static/css/chunk-0ca76063.b9a345b5.css
  45. 0 1
      crmeb/public/admin/system_static/css/chunk-0d774cb2.4d86134c.css
  46. 0 1
      crmeb/public/admin/system_static/css/chunk-0d7d8855.52d95e02.css
  47. 0 1
      crmeb/public/admin/system_static/css/chunk-0fae985e.c429dc00.css
  48. 0 1
      crmeb/public/admin/system_static/css/chunk-102e1ccc.f1dec891.css
  49. 1 0
      crmeb/public/admin/system_static/css/chunk-11a3b25b.94f87de6.css
  50. 0 1
      crmeb/public/admin/system_static/css/chunk-11af4722.31d891be.css
  51. 1 0
      crmeb/public/admin/system_static/css/chunk-131583ed.760add5d.css
  52. 0 1
      crmeb/public/admin/system_static/css/chunk-142ee07e.ad132d94.css
  53. 0 1
      crmeb/public/admin/system_static/css/chunk-14dd4022.34f7db24.css
  54. 1 0
      crmeb/public/admin/system_static/css/chunk-14edecb8.2bdc7b96.css
  55. 0 1
      crmeb/public/admin/system_static/css/chunk-157b4f48.fb9470f3.css
  56. 1 0
      crmeb/public/admin/system_static/css/chunk-16df2f4c.eddf13b2.css
  57. 1 0
      crmeb/public/admin/system_static/css/chunk-17da9750.439ce86b.css
  58. 0 1
      crmeb/public/admin/system_static/css/chunk-181702dc.fa1c2856.css
  59. 1 0
      crmeb/public/admin/system_static/css/chunk-18d4a264.3a23573e.css
  60. 0 1
      crmeb/public/admin/system_static/css/chunk-192b85c8.b1d7015d.css
  61. 1 0
      crmeb/public/admin/system_static/css/chunk-1ac44521.7e4ea005.css
  62. 1 0
      crmeb/public/admin/system_static/css/chunk-1add119a.555bc19b.css
  63. 0 1
      crmeb/public/admin/system_static/css/chunk-1ae29506.c8867b15.css
  64. 0 1
      crmeb/public/admin/system_static/css/chunk-1b0bd2cc.536a11c9.css
  65. 0 1
      crmeb/public/admin/system_static/css/chunk-1b4152e5.e9e85f76.css
  66. 0 1
      crmeb/public/admin/system_static/css/chunk-1b4a0877.ff6c40d6.css
  67. 1 1
      crmeb/public/admin/system_static/css/chunk-0862a2d0.2e073c00.css
  68. 0 1
      crmeb/public/admin/system_static/css/chunk-1bc71a8c.77993446.css
  69. 1 0
      crmeb/public/admin/system_static/css/chunk-1c19d602.1a9e0147.css
  70. 0 1
      crmeb/public/admin/system_static/css/chunk-1cb94d23.421a7c77.css
  71. 1 0
      crmeb/public/admin/system_static/css/chunk-1cf27680.754868cc.css
  72. 1 0
      crmeb/public/admin/system_static/css/chunk-1d823580.c95191a8.css
  73. 1 0
      crmeb/public/admin/system_static/css/chunk-1db96cd5.754868cc.css
  74. 0 1
      crmeb/public/admin/system_static/css/chunk-1dca2a98.ee833ed4.css
  75. 0 1
      crmeb/public/admin/system_static/css/chunk-1dedce59.2a89d4d5.css
  76. 0 1
      crmeb/public/admin/system_static/css/chunk-1ef08e1b.f00c5e1a.css
  77. 0 1
      crmeb/public/admin/system_static/css/chunk-1ef2b5e4.421a7c77.css
  78. 0 1
      crmeb/public/admin/system_static/css/chunk-1f894614.c0a99313.css
  79. 0 1
      crmeb/public/admin/system_static/css/chunk-1fba3b58.db1d3d56.css
  80. 1 1
      crmeb/public/admin/system_static/css/chunk-7dc711d1.3300521a.css
  81. 0 1
      crmeb/public/admin/system_static/css/chunk-2076b67c.82c47fa6.css
  82. 0 1
      crmeb/public/admin/system_static/css/chunk-225e7352.46baeea8.css
  83. 1 0
      crmeb/public/admin/system_static/css/chunk-228f60d2.7e55d531.css
  84. 1 0
      crmeb/public/admin/system_static/css/chunk-22e64126.4dc73b4c.css
  85. 1 0
      crmeb/public/admin/system_static/css/chunk-23bc9c3e.cdfda7ba.css
  86. 0 1
      crmeb/public/admin/system_static/css/chunk-23f1d398.f46eed4f.css
  87. 0 1
      crmeb/public/admin/system_static/css/chunk-2443ca8a.50123d85.css
  88. 1 0
      crmeb/public/admin/system_static/css/chunk-24bcd400.335e4475.css
  89. 1 0
      crmeb/public/admin/system_static/css/chunk-2535a63e.a10aaea1.css
  90. 1 0
      crmeb/public/admin/system_static/css/chunk-25540271.392fa861.css
  91. 0 1
      crmeb/public/admin/system_static/css/chunk-28f8fa16.3de7caac.css
  92. 1 0
      crmeb/public/admin/system_static/css/chunk-29a73690.933bf6b8.css
  93. 1 1
      crmeb/public/admin/system_static/css/chunk-c560f4be.b1bf3d1a.css
  94. 1 0
      crmeb/public/admin/system_static/css/chunk-2a2e594c.51237d7c.css
  95. 0 1
      crmeb/public/admin/system_static/css/chunk-2a68d25c.e2388245.css
  96. 1 0
      crmeb/public/admin/system_static/css/chunk-2a6fd2e4.0227b625.css
  97. 1 1
      crmeb/public/admin/system_static/css/chunk-318359b8.f1415b7e.css
  98. 1 1
      crmeb/public/admin/system_static/css/chunk-2a30b0c8.e9794eac.css
  99. 1 0
      crmeb/public/admin/system_static/css/chunk-2dc9fc66.9fc3b547.css
  100. 0 0
      crmeb/public/admin/system_static/css/chunk-2e6d7c7a.a2d95a93.css

+ 54 - 2
crmeb/app/adminapi/controller/v1/setting/SystemCrud.php

@@ -18,8 +18,11 @@ use app\adminapi\controller\AuthController;
 use app\services\system\SystemCrudServices;
 use app\services\system\SystemMenusServices;
 use crmeb\services\crud\Make;
+use crmeb\services\FileService;
+use crmeb\utils\Terminal;
 use think\facade\App;
 use think\helper\Str;
+use think\Response;
 
 /**
  * Class SystemCrud
@@ -74,10 +77,11 @@ class SystemCrud extends AuthController
 
         $fromField = $columnField = [];
         foreach ($data['tableField'] as $item) {
-            if ($item['is_table']) {
+            if ($item['is_table'] && !in_array($item['field_type'], ['addSoftDelete', 'addSoftDelete'])) {
                 $columnField[] = [
                     'field' => $item['field'],
                     'name' => $item['table_name'],
+                    'type' => $item['from_type'],
                 ];
             }
             if ($item['from_type']) {
@@ -145,7 +149,8 @@ class SystemCrud extends AuthController
             foreach ($field as $item) {
                 $tableField[] = [
                     'field' => $item['name'],
-                    'file_type' => $item['type'],
+                    'field_type' => $item['type'],
+                    'primaryKey' => (bool)$item['primaryKey'],
                     'default' => $item['default'],
                     'limit' => $item['limit'],
                     'comment' => $item['comment'],
@@ -189,9 +194,19 @@ class SystemCrud extends AuthController
             }
         }
 
+        $softDelete = false;
+
+        foreach ((array)$info->field['tableField'] as $item) {
+            if ($item['field_type'] === 'addSoftDelete') {
+                $softDelete = true;
+                break;
+            }
+        }
+
         $make = $this->services->makeFile($info->table_name, $routeName, false, [
             'menuName' => $info->name,
             'key' => $key,
+            'softDelete' => $softDelete,
             'fromField' => $info->field['fromField'] ?? [],
             'columnField' => $info->field['columnField'] ?? [],
         ]);
@@ -274,4 +289,41 @@ class SystemCrud extends AuthController
 
         return app('json')->success('删除成功');
     }
+
+    /**
+     * @return string
+     * @author 等风来
+     * @email 136327134@qq.com
+     * @date 2023/4/14
+     */
+    public function npm()
+    {
+        $terminal = new Terminal();
+
+        $adminPath = $terminal->adminTemplatePath();
+
+        $adminPath = dirname($adminPath);
+
+        $dir = $adminPath . DS . 'node_modules';
+        if (!is_dir($dir)) {
+            $terminal->run('npm-install');
+        }
+
+        $terminal->run('npm-build');
+
+        if (!is_dir($adminPath . DS . 'dist')) {
+            return Response::create([
+                'message' => '打包失败',
+            ], 'json')->getContent();
+        }
+
+        $build = public_path() . config('app.admin_prefix');
+
+        $this->app->make(FileService::class)->copyDir($adminPath . DS . 'dist', $build);
+
+        return Response::create([
+            'message' => '打包成功',
+            'success' => 'ok'
+        ], 'json')->getContent();
+    }
 }

+ 3 - 0
crmeb/app/adminapi/middleware/AdminAuthTokenMiddleware.php

@@ -39,6 +39,9 @@ class AdminAuthTokenMiddleware implements MiddlewareInterface
     public function handle(Request $request, \Closure $next)
     {
         $token = trim(ltrim($request->header(Config::get('cookie.token_name', 'Authori-zation')), 'Bearer'));
+        if (!$token) {
+            $token = trim(ltrim($request->get('token')));
+        }
         /** @var AdminAuthServices $service */
         $service = app()->make(AdminAuthServices::class);
         $adminInfo = $service->parseToken($token);

+ 2 - 0
crmeb/app/adminapi/route/system.php

@@ -133,6 +133,8 @@ Route::group('system', function () {
             'delete' => '删除路由分类'
         ],
     ]);
+    //执行重新打包
+    Route::get('crud/npm', 'v1.setting.SystemCrud/npm')->option(['real_name' => '执行重新打包']);
     //获取CRUD列表
     Route::get('crud/column_type', 'v1.setting.SystemCrud/columnType')->option(['real_name' => '获取CRUD列表']);
     //获取菜单TREE形数据

+ 29 - 5
crmeb/app/services/system/SystemCrudServices.php

@@ -159,7 +159,7 @@ class SystemCrudServices extends BaseServices
 
         $tableInfo = Db::query($sql, [config('database.connections.mysql.database'), $this->getTableName($tableName)]);
 
-        return $tableInfo;
+        return $tableInfo[0] ?? [];
     }
 
     /**
@@ -233,10 +233,17 @@ class SystemCrudServices extends BaseServices
         $tableField = $this->valueReplace($data['tableField']);
         $filePath = $this->valueReplace($data['filePath']);
 
+        if ($this->dao->value(['table_name' => $tableName])) {
+            throw new ValidateException('此表已经生成请在列表中查看');
+        }
 
+        $data['softDelete'] = false;
         //创建数据库
         if ($tableField && !$data['isTable']) {
-            $this->makeDatebase($tableName, $tableComment, $tableField);
+            $tableCreateInfo = $this->makeDatebase($tableName, $tableComment, $tableField);
+            if ($tableCreateInfo['softDelete']) {
+                $data['softDelete'] = true;
+            }
         }
 
         if (in_array($tableName, self::NOT_CRUD_TABANAME)) {
@@ -296,6 +303,7 @@ class SystemCrudServices extends BaseServices
                     'name' => $data['menuName'] . '列表接口',
                     'app_name' => 'adminapi',
                     'cate_id' => $cateId,
+                    'unique_auth' => '',
                     'add_time' => date('Y-m-d H:i:s')
                 ],
                 [
@@ -304,6 +312,7 @@ class SystemCrudServices extends BaseServices
                     'name' => $data['menuName'] . '获取创建表单接口',
                     'app_name' => 'adminapi',
                     'cate_id' => $cateId,
+                    'unique_auth' => Str::snake($tableName) . '-add',
                     'add_time' => date('Y-m-d H:i:s')
                 ],
                 [
@@ -312,6 +321,7 @@ class SystemCrudServices extends BaseServices
                     'name' => $data['menuName'] . '保存数据接口',
                     'app_name' => 'adminapi',
                     'cate_id' => $cateId,
+                    'unique_auth' => '',
                     'add_time' => date('Y-m-d H:i:s')
                 ],
                 [
@@ -320,6 +330,7 @@ class SystemCrudServices extends BaseServices
                     'name' => $data['menuName'] . '获取修改表单接口',
                     'app_name' => 'adminapi',
                     'cate_id' => $cateId,
+                    'unique_auth' => '',
                     'add_time' => date('Y-m-d H:i:s')
                 ],
                 [
@@ -328,6 +339,7 @@ class SystemCrudServices extends BaseServices
                     'name' => $data['menuName'] . '修改数据接口',
                     'app_name' => 'adminapi',
                     'cate_id' => $cateId,
+                    'unique_auth' => '',
                     'add_time' => date('Y-m-d H:i:s')
                 ],
                 [
@@ -336,6 +348,7 @@ class SystemCrudServices extends BaseServices
                     'name' => $data['menuName'] . '删除数据接口',
                     'app_name' => 'adminapi',
                     'cate_id' => $cateId,
+                    'unique_auth' => '',
                     'add_time' => date('Y-m-d H:i:s')
                 ],
             ];
@@ -347,6 +360,7 @@ class SystemCrudServices extends BaseServices
                     'pid' => $menuInfo->id,
                     'methods' => $item['method'],
                     'api_url' => $item['path'],
+                    'unique_auth' => $item['unique_auth'],
                     'name' => $item['name'],
                     'is_del' => 0,
                 ];
@@ -438,12 +452,16 @@ class SystemCrudServices extends BaseServices
      * @param string $tableName
      * @param string $tableComment
      * @param array $tableField
+     * @return array
      * @author 等风来
      * @email 136327134@qq.com
      * @date 2023/4/7
      */
     public function makeDatebase(string $tableName, string $tableComment, array $tableField = [])
     {
+        $softDelete = false;
+        $timestamps = false;
+        $indexField = [];
         //创建表
         $table = new Table($tableName, ['comment' => $tableComment], $this->getAdapter());
         //创建字段
@@ -456,24 +474,29 @@ class SystemCrudServices extends BaseServices
                 $option['default'] = $item['default'];
             }
             //创建伪删除
-            if ($item['file_type'] === 'addSoftDelete') {
+            if ($item['field_type'] === 'addSoftDelete') {
                 $table->addSoftDelete();
-            } else if ($item['file_type'] === 'addTimestamps') {
+                $softDelete = true;
+            } else if ($item['field_type'] === 'addTimestamps') {
                 //创建修改和增加时间
                 $table->addTimestamps();
+                $timestamps = true;
             } else {
                 $option['comment'] = $item['comment'];
-                $table->addColumn($item['field'], $this->changeTabelRule($item['file_type']), $option);
+                $table->addColumn($item['field'], $this->changeTabelRule($item['field_type']), $option);
             }
         }
         //创建索引
         if (!empty($data['tableIndex'])) {
+            $indexField = $data['tableIndex'];
             foreach ($data['tableIndex'] as $item) {
                 $table->addIndex($item);
             }
         }
         //执行创建
         $table->create();
+
+        return compact('indexField', 'softDelete', 'timestamps');
     }
 
     /**
@@ -525,6 +548,7 @@ class SystemCrudServices extends BaseServices
         $viewRouter = app()->make(ViewRouter::class);
         [$routerContent, $routerPath] = $viewRouter->setFilePathName($filePath['router'] ?? '')->isMake($isMake)->handle($tableName, [
             'route' => $routeName,
+            'menuName' => $options['menuName'],
         ]);
         //生成前台接口
         $viewApi = app()->make(ViewApi::class);

+ 7 - 3
crmeb/crmeb/services/crud/Model.php

@@ -42,16 +42,20 @@ class Model extends Make
 
 
     /**
-     * @author 等风来
-     * @email 136327134@qq.com
-     * @date 2023/4/12
      * @param string $name
      * @param array $options
      * @return array|mixed|void
+     * @author 等风来
+     * @email 136327134@qq.com
+     * @date 2023/4/12
      */
     public function handle(string $name, array $options = [])
     {
         $this->value['key'] = $options['key'] ?? 'id';
+        if (isset($options['softDelete']) && $options['softDelete']) {
+            $this->value['use-php'] = "use think\model\concern\SoftDelete;\n";
+            $this->value['content-php'] = $this->tab() . "use SoftDelete;\n";
+        }
         return parent::handle($name, $options);
     }
 

+ 8 - 2
crmeb/crmeb/services/crud/Service.php

@@ -123,6 +123,12 @@ class Service extends Make
      */
     protected function getOptionContent(array $option = [])
     {
+        if (!$option) {
+            $option = [
+                ['value' => 1, 'label' => '开启'],
+                ['value' => 0, 'label' => '关闭']
+            ];
+        }
         $php = '';
         if ($option) {
             $res = var_export($option, true);
@@ -150,7 +156,7 @@ class Service extends Make
     {
         $requiredText = $required ? '->required()' : '';
         $content = <<<CONTENT
-\$rule[] = FormBuilder::frameImage('$field', '$name', url(config('app.admin_prefix', 'admin') . '/widget.images/index', ['fodder' => '$field']), \$info[\'$field\'] ?? '')->icon('$icon')->width('$width')->height('$height')->modal(['footer-hide' => true])$requiredText
+\$rule[] = FormBuilder::frameImage('$field', '$name', url(config('app.admin_prefix', 'admin') . '/widget.images/index', ['fodder' => '$field']), \$info['$field'] ?? '')->icon('$icon')->width('$width')->height('$height')->modal(['footer-hide' => true])$requiredText
 CONTENT;
         return $content;
     }
@@ -172,7 +178,7 @@ CONTENT;
     {
         $requiredText = $required ? '->required()' : '';
         $content = <<<CONTENT
-\$rule[] = FormBuilder::frameImages('$field', '$name', url(config('app.admin_prefix', 'admin') . '/widget.images/index', ['fodder' => '$field', 'type' => 'many', 'maxLength' => $maxLength]), \$info[\'$field\'] ?? [])->maxLength($maxLength)->icon('$icon')->width('$width')->height('$height')->modal(['footer-hide' => true])$requiredText
+\$rule[] = FormBuilder::frameImages('$field', '$name', url(config('app.admin_prefix', 'admin') . '/widget.images/index', ['fodder' => '$field', 'type' => 'many', 'maxLength' => $maxLength]), \$info['$field'] ?? [])->maxLength($maxLength)->icon('$icon')->width('$width')->height('$height')->modal(['footer-hide' => true])$requiredText
 CONTENT;
         return $content;
     }

+ 24 - 4
crmeb/crmeb/services/crud/ViewPages.php

@@ -72,7 +72,20 @@ class ViewPages extends Make
         $route = $options['route'] ?? '';
 
         $columnStr = [];
+        $contentVue = [];
         foreach ($field as $key => $item) {
+            if (isset($item['type'])) {
+                switch ($item['type']) {
+                    case 'frameImageOne':
+                        $templateContent = file_get_contents($this->getStub('image'));
+                        $contentVue[] = str_replace(['{%field%}'], [$item['field']], $templateContent);
+                        break;
+                    case 'frameImages':
+                        $templateContent = file_get_contents($this->getStub('images'));
+                        $contentVue[] = str_replace(['{%field%}'], [$item['field']], $templateContent);
+                        break;
+                }
+            }
             $columnStr[] = ($key == 0 ? $this->tab(2) : '') . "{\n" . $this->tab(3) . "title:\"{$item['name']}\"," . $this->tab(2) . "\n" . $this->tab(3) . "key:\"{$item['field']}\"\n" . $this->tab(2) . "}\n";
         }
         $this->value['route'] = $route;
@@ -81,6 +94,7 @@ class ViewPages extends Make
         $this->value['pathApiJs'] = $options['pathApiJs'] ?? '';
         $this->value['nameStudly'] = Str::studly($name);
         $this->value['nameCamel'] = Str::camel($name);
+        $this->value['content-table-vue'] = $contentVue ? implode("\n", $contentVue) : '';
 
         return parent::handle($name, $options);
     }
@@ -106,10 +120,16 @@ class ViewPages extends Make
      * @email 136327134@qq.com
      * @date 2023/4/1
      */
-    protected function getStub(string $type = '')
+    protected function getStub(string $type = 'index')
     {
-        return __DIR__ . DS . 'stubs' . DS . 'view' .
-            DS . 'pages' . DS . 'crud' .
-            DS . 'index.stub';
+        $pagesPath = __DIR__ . DS . 'stubs' . DS . 'view' . DS . 'pages' . DS . 'crud' . DS;
+
+        $stubs = [
+            'index' => $pagesPath . 'index.stub',
+            'image' => $pagesPath . 'image.stub',
+            'images' => $pagesPath . 'images.stub',
+        ];
+
+        return $type ? $stubs[$type] : $stubs['index'];
     }
 }

+ 1 - 1
crmeb/crmeb/services/crud/ViewRouter.php

@@ -71,7 +71,7 @@ class ViewRouter extends Make
         $path = $options['path'] ?? '';
         [$nameData, $content] = $this->getStubContent($name);
 
-        $menus = $options['menus'] ?? $name;
+        $menus = $options['menuName'] ?? $name;
         $route = $options['route'] ?? Str::snake($name);
         $pagePath = $options['pagePath'] ?? Str::camel($name);
         if (!$route) {

+ 2 - 2
crmeb/crmeb/services/crud/stubs/model/CrudModel.stub

@@ -20,7 +20,7 @@ namespace app\model\crud{%path%};
 
 
 use crmeb\basic\BaseModel;
-
+{%use-php%}
 /**
  * Class {%nameCamel%}
  * @date {%date%}
@@ -28,7 +28,7 @@ use crmeb\basic\BaseModel;
  */
 class {%nameCamel%} extends BaseModel
 {
-
+{%content-php%}
     /**
      * 表名
      * @var string

+ 5 - 0
crmeb/crmeb/services/crud/stubs/view/pages/crud/image.stub

@@ -0,0 +1,5 @@
+<template slot-scope="{ row, index }" slot="{%field%}">
+  <div class="tabBox_img" v-viewer>
+    <img v-lazy="row.{%field%}" />
+  </div>
+</template>

+ 5 - 0
crmeb/crmeb/services/crud/stubs/view/pages/crud/images.stub

@@ -0,0 +1,5 @@
+<template slot-scope="{ row, index }" slot="{%field%}">
+  <div class="tabBox_img" v-viewer>
+    <img v-lazy="img" v-for="img in row.{%field%}" />
+  </div>
+</template>

+ 2 - 6
crmeb/crmeb/services/crud/stubs/view/pages/crud/index.stub

@@ -3,7 +3,7 @@
     <Card :bordered="false" dis-hover class="ivu-mt">
       <Row type="flex">
         <Col v-bind="grid">
-          <Button v-auth="['{%auth%}']" type="primary" icon="md-add" @click="add">添加{%menus%}</Button>
+          <Button v-auth="['{%auth%}-add']" type="primary" icon="md-add" @click="add">添加{%menus%}</Button>
         </Col>
       </Row>
       <Table
@@ -16,11 +16,7 @@
           no-userFrom-text="暂无数据"
           no-filtered-userFrom-text="暂无筛选结果"
       >
-        <template slot-scope="{ row, index }" slot="icons">
-          <div class="tabBox_img" v-viewer>
-            <img v-lazy="row.icon" />
-          </div>
-        </template>
+{%content-table-vue%}
         <template slot-scope="{ row, index }" slot="action">
           <a @click="edit(row.id)">修改</a>
           <Divider type="vertical" />

+ 2 - 2
crmeb/crmeb/services/crud/stubs/view/router/modules/crud.stub

@@ -8,7 +8,7 @@
 // | Author: CRMEB Team <admin@crmeb.com>
 // +---------------------------------------------------------------------
 
-import BasicLayout from '@/components/main';
+import LayoutMain from '@/layout';
 import setting from '@/setting'
 
 let routePre = setting.routePre
@@ -24,7 +24,7 @@ export default {
     name: 'crud_{%name%}',
     header: '{%nameHeader%}',
     meta,
-    component: BasicLayout,
+    component: LayoutMain,
     children: [
         {
             path: 'list',

+ 1 - 1
crmeb/crmeb/utils/Terminal.php

@@ -201,7 +201,7 @@ class Terminal
     private function output($data)
     {
         $data = [
-            'data' => $data,
+            'message' => $data,
         ];
         return Response::create($data, 'json')->getContent();
     }

File diff suppressed because it is too large
+ 1 - 1
crmeb/public/admin/css.worker.js


File diff suppressed because it is too large
+ 1 - 1
crmeb/public/admin/editor.worker.js


File diff suppressed because it is too large
+ 1 - 1
crmeb/public/admin/html.worker.js


File diff suppressed because it is too large
+ 1 - 1
crmeb/public/admin/index.html


File diff suppressed because it is too large
+ 1 - 1
crmeb/public/admin/json.worker.js


File diff suppressed because it is too large
+ 2 - 2
crmeb/public/admin/system_static/css/app.1e71f276.css


File diff suppressed because it is too large
+ 1 - 1
crmeb/public/admin/system_static/css/chunk-75955b98.1eff79aa.css


+ 0 - 1
crmeb/public/admin/system_static/css/chunk-011a5902.a1f0b1ed.css

@@ -1 +0,0 @@
-.tabBox_img[data-v-35cf4bf8]{width:36px;height:36px;border-radius:4px;cursor:pointer}.tabBox_img img[data-v-35cf4bf8]{width:100%;height:100%}.prize[data-v-35cf4bf8]{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center}.prize img[data-v-35cf4bf8]{width:36px;height:36px;border-radius:4px;cursor:pointer;margin-right:5px}.trips[data-v-35cf4bf8]{color:#ccc}

File diff suppressed because it is too large
+ 0 - 1
crmeb/public/admin/system_static/css/chunk-017372ad.80b155c7.css


File diff suppressed because it is too large
+ 0 - 1
crmeb/public/admin/system_static/css/chunk-0206364c.e960d769.css


File diff suppressed because it is too large
+ 0 - 1
crmeb/public/admin/system_static/css/chunk-02d5764c.a387a5f9.css


+ 1 - 0
crmeb/public/admin/system_static/css/chunk-04d9318e.bca09a64.css

@@ -0,0 +1 @@
+.QRpic[data-v-5bc93f04]{width:180px;height:180px}.QRpic img[data-v-5bc93f04]{width:100%;height:100%}

File diff suppressed because it is too large
+ 1 - 0
crmeb/public/admin/system_static/css/chunk-05106bdc.b893c4af.css


+ 1 - 0
crmeb/public/admin/system_static/css/chunk-05920e65.e2d75467.css

@@ -0,0 +1 @@
+.box[data-v-34f427be]{width:100%;height:100%;background:#fff}[data-v-34f427be] .ivu-card-body{min-height:700px}[data-v-34f427be] .conter .pictrueList{max-width:100%}

+ 0 - 1
crmeb/public/admin/system_static/css/chunk-05b7b3ab.8baca51f.css

@@ -1 +0,0 @@
-[data-v-159f6903] .center{text-align:center;margin-right:0!important;margin-left:5px}

+ 1 - 0
crmeb/public/admin/system_static/css/chunk-05ea5920.30dce022.css

@@ -0,0 +1 @@
+.tabBox_img[data-v-5d928576]{width:36px;height:36px;border-radius:4px;cursor:pointer}.tabBox_img img[data-v-5d928576]{width:100%;height:100%}

File diff suppressed because it is too large
+ 0 - 1
crmeb/public/admin/system_static/css/chunk-06f7b54e.6674366d.css


File diff suppressed because it is too large
+ 1 - 0
crmeb/public/admin/system_static/css/chunk-07aab7e8.12163463.css


+ 0 - 1
crmeb/public/admin/system_static/css/chunk-07b5ff65.1b08dbb6.css

@@ -1 +0,0 @@
-.list[data-v-23ea9663]{height:80%;min-height:500px}.pictrue[data-v-23ea9663]{width:100%;max-width:300px;height:360px}.right[data-v-23ea9663]{padding-right:75px}.left[data-v-23ea9663]{padding-left:75px}.num[data-v-23ea9663]{margin-bottom:24px;color:#515a6e;font-weight:600;font-size:72px;line-height:72px}.desc[data-v-23ea9663]{margin-bottom:16px;color:#808695;font-size:20px;line-height:28px}

File diff suppressed because it is too large
+ 1 - 0
crmeb/public/admin/system_static/css/chunk-07eb3cf3.572108c3.css


+ 1 - 1
crmeb/public/admin/system_static/css/chunk-12f282dc.3606733e.css

@@ -1 +1 @@
-.rulesBox[data-v-75a46b5e]{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-ms-flex-wrap:wrap;flex-wrap:wrap}.attrFrom[data-v-75a46b5e] .ivu-form-item{margin-bottom:0!important}
+.rulesBox[data-v-20b8b7b0]{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-ms-flex-wrap:wrap;flex-wrap:wrap}.attrFrom[data-v-20b8b7b0] .ivu-form-item{margin-bottom:0!important}

File diff suppressed because it is too large
+ 1 - 0
crmeb/public/admin/system_static/css/chunk-08e6167b.b42725be.css


File diff suppressed because it is too large
+ 0 - 1
crmeb/public/admin/system_static/css/chunk-09539496.21906b70.css


File diff suppressed because it is too large
+ 1 - 0
crmeb/public/admin/system_static/css/chunk-099175c5.89f04a35.css


File diff suppressed because it is too large
+ 1 - 0
crmeb/public/admin/system_static/css/chunk-0a0e823b.98af5d00.css


+ 1 - 0
crmeb/public/admin/system_static/css/chunk-0b503f84.47c9981a.css

@@ -0,0 +1 @@
+[data-v-0287b1bb] .ivu-form-item-content{line-height:unset!important}

File diff suppressed because it is too large
+ 1 - 0
crmeb/public/admin/system_static/css/chunk-0bf7991c.ec23e6f9.css


File diff suppressed because it is too large
+ 0 - 1
crmeb/public/admin/system_static/css/chunk-0c8efa00.b0d7b9e0.css


File diff suppressed because it is too large
+ 0 - 1
crmeb/public/admin/system_static/css/chunk-0c9c680c.1287012e.css


File diff suppressed because it is too large
+ 0 - 1
crmeb/public/admin/system_static/css/chunk-0ca76063.b9a345b5.css


File diff suppressed because it is too large
+ 0 - 1
crmeb/public/admin/system_static/css/chunk-0d774cb2.4d86134c.css


File diff suppressed because it is too large
+ 0 - 1
crmeb/public/admin/system_static/css/chunk-0d7d8855.52d95e02.css


+ 0 - 1
crmeb/public/admin/system_static/css/chunk-0fae985e.c429dc00.css

@@ -1 +0,0 @@
-.treeSel[data-v-5f459790] .ivu-select-dropdown-list{padding:0 10px!important;-webkit-box-sizing:border-box;box-sizing:border-box}.tabBox_img[data-v-5f459790]{width:36px;height:36px;border-radius:4px;cursor:pointer}.tabBox_img img[data-v-5f459790]{width:100%;height:100%}

File diff suppressed because it is too large
+ 0 - 1
crmeb/public/admin/system_static/css/chunk-102e1ccc.f1dec891.css


File diff suppressed because it is too large
+ 1 - 0
crmeb/public/admin/system_static/css/chunk-11a3b25b.94f87de6.css


File diff suppressed because it is too large
+ 0 - 1
crmeb/public/admin/system_static/css/chunk-11af4722.31d891be.css


+ 1 - 0
crmeb/public/admin/system_static/css/chunk-131583ed.760add5d.css

@@ -0,0 +1 @@
+.tabBox_img[data-v-0fff0bbe]{width:36px;height:36px;border-radius:4px;cursor:pointer}.tabBox_img img[data-v-0fff0bbe]{width:100%;height:100%}

File diff suppressed because it is too large
+ 0 - 1
crmeb/public/admin/system_static/css/chunk-142ee07e.ad132d94.css


+ 0 - 1
crmeb/public/admin/system_static/css/chunk-14dd4022.34f7db24.css

@@ -1 +0,0 @@
-[data-v-86e25c90] .ivu-form-item-content{line-height:unset!important}

+ 1 - 0
crmeb/public/admin/system_static/css/chunk-14edecb8.2bdc7b96.css

@@ -0,0 +1 @@
+.box[data-v-7e31ed24]{width:100%;background:#fff}

File diff suppressed because it is too large
+ 0 - 1
crmeb/public/admin/system_static/css/chunk-157b4f48.fb9470f3.css


File diff suppressed because it is too large
+ 1 - 0
crmeb/public/admin/system_static/css/chunk-16df2f4c.eddf13b2.css


+ 1 - 0
crmeb/public/admin/system_static/css/chunk-17da9750.439ce86b.css

@@ -0,0 +1 @@
+.clear_tit[data-v-5fc58072]{margin-top:150px}

File diff suppressed because it is too large
+ 0 - 1
crmeb/public/admin/system_static/css/chunk-181702dc.fa1c2856.css


+ 1 - 0
crmeb/public/admin/system_static/css/chunk-18d4a264.3a23573e.css

@@ -0,0 +1 @@
+[data-v-003b6d5a] .ivu-table-cell-tree{border:0;font-size:15px;background-color:unset}[data-v-003b6d5a] .ivu-table-cell-tree .ivu-icon-ios-add:before{content:"\F11F"}[data-v-003b6d5a] .ivu-table-cell-tree .ivu-icon-ios-remove:before{content:"\F116"}.button[data-v-003b6d5a]{width:300px}

File diff suppressed because it is too large
+ 0 - 1
crmeb/public/admin/system_static/css/chunk-192b85c8.b1d7015d.css


+ 1 - 0
crmeb/public/admin/system_static/css/chunk-1ac44521.7e4ea005.css

@@ -0,0 +1 @@
+.reset[data-v-1e9b85f2]{margin-left:10px}.form-content[data-v-1e9b85f2]{-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column}.form-content[data-v-1e9b85f2],.input-button[data-v-1e9b85f2]{display:-webkit-box;display:-ms-flexbox;display:flex}w .trip[data-v-1e9b85f2]{color:#aaa;line-height:20px}.setting-style[data-v-1e9b85f2] .ivu-form-item{margin-bottom:14px}

File diff suppressed because it is too large
+ 1 - 0
crmeb/public/admin/system_static/css/chunk-1add119a.555bc19b.css


File diff suppressed because it is too large
+ 0 - 1
crmeb/public/admin/system_static/css/chunk-1ae29506.c8867b15.css


File diff suppressed because it is too large
+ 0 - 1
crmeb/public/admin/system_static/css/chunk-1b0bd2cc.536a11c9.css


File diff suppressed because it is too large
+ 0 - 1
crmeb/public/admin/system_static/css/chunk-1b4152e5.e9e85f76.css


File diff suppressed because it is too large
+ 0 - 1
crmeb/public/admin/system_static/css/chunk-1b4a0877.ff6c40d6.css


File diff suppressed because it is too large
+ 1 - 1
crmeb/public/admin/system_static/css/chunk-0862a2d0.2e073c00.css


File diff suppressed because it is too large
+ 0 - 1
crmeb/public/admin/system_static/css/chunk-1bc71a8c.77993446.css


+ 1 - 0
crmeb/public/admin/system_static/css/chunk-1c19d602.1a9e0147.css

@@ -0,0 +1 @@
+.QRpic[data-v-d7776416]{width:180px;height:180px}.QRpic img[data-v-d7776416]{width:100%;height:100%}

+ 0 - 1
crmeb/public/admin/system_static/css/chunk-1cb94d23.421a7c77.css

@@ -1 +0,0 @@
-.v-transfer-dom[data-v-5cc97a38] .ivu-modal-content-drag{z-index:2!important}.radio[data-v-5cc97a38]{margin-bottom:14px}.radio[data-v-5cc97a38] .name{width:125px;text-align:right;padding-right:12px}

+ 1 - 0
crmeb/public/admin/system_static/css/chunk-1cf27680.754868cc.css

@@ -0,0 +1 @@
+.v-transfer-dom[data-v-306b6d59] .ivu-modal-content-drag{z-index:2!important}.radio[data-v-306b6d59]{margin-bottom:14px}.radio[data-v-306b6d59] .name{width:125px;text-align:right;padding-right:12px}

+ 1 - 0
crmeb/public/admin/system_static/css/chunk-1d823580.c95191a8.css

@@ -0,0 +1 @@
+.tabBox_img[data-v-33e4e74e]{width:36px;height:36px;border-radius:4px;cursor:pointer}.tabBox_img img[data-v-33e4e74e]{width:100%;height:100%}

+ 1 - 0
crmeb/public/admin/system_static/css/chunk-1db96cd5.754868cc.css

@@ -0,0 +1 @@
+.v-transfer-dom[data-v-306b6d59] .ivu-modal-content-drag{z-index:2!important}.radio[data-v-306b6d59]{margin-bottom:14px}.radio[data-v-306b6d59] .name{width:125px;text-align:right;padding-right:12px}

File diff suppressed because it is too large
+ 0 - 1
crmeb/public/admin/system_static/css/chunk-1dca2a98.ee833ed4.css


+ 0 - 1
crmeb/public/admin/system_static/css/chunk-1dedce59.2a89d4d5.css

@@ -1 +0,0 @@
-.v-transfer-dom[data-v-5cc97a38] .ivu-modal-content-drag{z-index:2!important}.radio[data-v-5cc97a38]{margin-bottom:14px}.radio[data-v-5cc97a38] .name{width:125px;text-align:right;padding-right:12px}.tabBox_img[data-v-20c62498]{width:36px;height:36px;border-radius:4px;cursor:pointer}.tabBox_img img[data-v-20c62498]{width:100%;height:100%}

File diff suppressed because it is too large
+ 0 - 1
crmeb/public/admin/system_static/css/chunk-1ef08e1b.f00c5e1a.css


+ 0 - 1
crmeb/public/admin/system_static/css/chunk-1ef2b5e4.421a7c77.css

@@ -1 +0,0 @@
-.v-transfer-dom[data-v-5cc97a38] .ivu-modal-content-drag{z-index:2!important}.radio[data-v-5cc97a38]{margin-bottom:14px}.radio[data-v-5cc97a38] .name{width:125px;text-align:right;padding-right:12px}

+ 0 - 1
crmeb/public/admin/system_static/css/chunk-1f894614.c0a99313.css

@@ -1 +0,0 @@
-.tabBox_img[data-v-160a2f5e]{width:36px;height:36px;border-radius:4px;cursor:pointer}.tabBox_img img[data-v-160a2f5e]{width:100%;height:100%}

File diff suppressed because it is too large
+ 0 - 1
crmeb/public/admin/system_static/css/chunk-1fba3b58.db1d3d56.css


File diff suppressed because it is too large
+ 1 - 1
crmeb/public/admin/system_static/css/chunk-7dc711d1.3300521a.css


File diff suppressed because it is too large
+ 0 - 1
crmeb/public/admin/system_static/css/chunk-2076b67c.82c47fa6.css


File diff suppressed because it is too large
+ 0 - 1
crmeb/public/admin/system_static/css/chunk-225e7352.46baeea8.css


File diff suppressed because it is too large
+ 1 - 0
crmeb/public/admin/system_static/css/chunk-228f60d2.7e55d531.css


File diff suppressed because it is too large
+ 1 - 0
crmeb/public/admin/system_static/css/chunk-22e64126.4dc73b4c.css


File diff suppressed because it is too large
+ 1 - 0
crmeb/public/admin/system_static/css/chunk-23bc9c3e.cdfda7ba.css


File diff suppressed because it is too large
+ 0 - 1
crmeb/public/admin/system_static/css/chunk-23f1d398.f46eed4f.css


File diff suppressed because it is too large
+ 0 - 1
crmeb/public/admin/system_static/css/chunk-2443ca8a.50123d85.css


+ 1 - 0
crmeb/public/admin/system_static/css/chunk-24bcd400.335e4475.css

@@ -0,0 +1 @@
+[data-v-3d16b9f1] .center{text-align:center;margin-right:0!important;margin-left:5px}

+ 1 - 0
crmeb/public/admin/system_static/css/chunk-2535a63e.a10aaea1.css

@@ -0,0 +1 @@
+.picBox[data-v-300c6f60]{display:inline-block;cursor:pointer}.picBox .upLoad[data-v-300c6f60]{width:58px;height:58px;line-height:58px;border:1px dotted rgba(0,0,0,.1);border-radius:4px;background:rgba(0,0,0,.02)}.picBox .pictrue[data-v-300c6f60]{width:60px;height:60px;border:1px dotted rgba(0,0,0,.1);margin-right:10px}.picBox .pictrue img[data-v-300c6f60]{width:100%;height:100%}.picBox .iconfont[data-v-300c6f60]{color:#898989}.mapBox[data-v-300c6f60] .ivu-modal-body{height:640px!important}

File diff suppressed because it is too large
+ 1 - 0
crmeb/public/admin/system_static/css/chunk-25540271.392fa861.css


+ 0 - 1
crmeb/public/admin/system_static/css/chunk-28f8fa16.3de7caac.css

@@ -1 +0,0 @@
-.QRpic[data-v-c654ebd8]{width:180px;height:180px}.QRpic img[data-v-c654ebd8]{width:100%;height:100%}

File diff suppressed because it is too large
+ 1 - 0
crmeb/public/admin/system_static/css/chunk-29a73690.933bf6b8.css


File diff suppressed because it is too large
+ 1 - 1
crmeb/public/admin/system_static/css/chunk-c560f4be.b1bf3d1a.css


File diff suppressed because it is too large
+ 1 - 0
crmeb/public/admin/system_static/css/chunk-2a2e594c.51237d7c.css


File diff suppressed because it is too large
+ 0 - 1
crmeb/public/admin/system_static/css/chunk-2a68d25c.e2388245.css


+ 1 - 0
crmeb/public/admin/system_static/css/chunk-2a6fd2e4.0227b625.css

@@ -0,0 +1 @@
+.iview-video-style[data-v-45aed5b4]{width:40%;height:180px;border-radius:10px;background-color:#707070;margin-top:10px;position:relative;overflow:hidden}.iview-video-style .iconv[data-v-45aed5b4]{color:#fff;line-height:180px;width:50px;height:50px;display:inherit;font-size:26px;position:absolute;top:-74px;left:50%;margin-left:-25px}.iview-video-style .mark[data-v-45aed5b4]{position:absolute;width:100%;height:30px;top:0;background-color:rgba(0,0,0,.5);text-align:center}

File diff suppressed because it is too large
+ 1 - 1
crmeb/public/admin/system_static/css/chunk-318359b8.f1415b7e.css


File diff suppressed because it is too large
+ 1 - 1
crmeb/public/admin/system_static/css/chunk-2a30b0c8.e9794eac.css


File diff suppressed because it is too large
+ 1 - 0
crmeb/public/admin/system_static/css/chunk-2dc9fc66.9fc3b547.css


+ 0 - 0
crmeb/public/admin/system_static/css/chunk-2e6d7c7a.a2d95a93.css


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