فهرست منبع

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

evoxwht 2 سال پیش
والد
کامیت
93b7d141d6
85فایلهای تغییر یافته به همراه357 افزوده شده و 84 حذف شده
  1. 31 6
      crmeb/app/adminapi/controller/v1/setting/SystemCrud.php
  2. 121 15
      crmeb/app/services/system/SystemCrudServices.php
  3. 1 1
      crmeb/crmeb/services/crud/Controller.php
  4. 1 1
      crmeb/crmeb/services/crud/Dao.php
  5. 1 1
      crmeb/crmeb/services/crud/Model.php
  6. 24 10
      crmeb/crmeb/services/crud/Service.php
  7. 5 1
      crmeb/crmeb/services/crud/ViewPages.php
  8. 0 0
      crmeb/crmeb/services/crud/stubs/controller/crudController.stub
  9. 0 0
      crmeb/crmeb/services/crud/stubs/dao/crudDao.stub
  10. 0 0
      crmeb/crmeb/services/crud/stubs/model/crudModel.stub
  11. 0 0
      crmeb/crmeb/services/crud/stubs/service/crudListIndex.stub
  12. 0 0
      crmeb/crmeb/services/crud/stubs/service/crudSave.stub
  13. 0 0
      crmeb/crmeb/services/crud/stubs/service/crudService.stub
  14. 0 0
      crmeb/crmeb/services/crud/stubs/service/crudUpdate.stub
  15. 0 0
      crmeb/crmeb/services/crud/stubs/service/getCrudForm.stub
  16. 1 1
      crmeb/public/admin/index.html
  17. 2 0
      crmeb/public/admin/system_static/css/app.2128acc0.css
  18. 1 0
      crmeb/public/admin/system_static/css/chunk-06ebf9ce.3a9dc686.css
  19. 1 0
      crmeb/public/admin/system_static/css/chunk-079229da.f3a1ec95.css
  20. 1 0
      crmeb/public/admin/system_static/css/chunk-0d39ed33.6beb4ded.css
  21. 1 0
      crmeb/public/admin/system_static/css/chunk-168ce470.7458715b.css
  22. 1 0
      crmeb/public/admin/system_static/css/chunk-1c9d17cc.36ffa31d.css
  23. 1 0
      crmeb/public/admin/system_static/css/chunk-24ec4e0e.fa07380f.css
  24. 1 0
      crmeb/public/admin/system_static/css/chunk-318cd060.3ae07c8e.css
  25. 1 0
      crmeb/public/admin/system_static/css/chunk-394095d4.2c370ecb.css
  26. 1 0
      crmeb/public/admin/system_static/css/chunk-3d6b888d.1ad7af4c.css
  27. 1 0
      crmeb/public/admin/system_static/css/chunk-3fda7096.04f598bd.css
  28. 1 0
      crmeb/public/admin/system_static/css/chunk-4037b518.9bf71c8c.css
  29. 1 0
      crmeb/public/admin/system_static/css/chunk-4542f131.3ec4ea39.css
  30. 1 0
      crmeb/public/admin/system_static/css/chunk-4de97dce.232bd18a.css
  31. 1 0
      crmeb/public/admin/system_static/css/chunk-5a39e378.622f82d7.css
  32. 1 0
      crmeb/public/admin/system_static/css/chunk-6a2fb179.e2724184.css
  33. 1 0
      crmeb/public/admin/system_static/css/chunk-6e9f76a0.71bb20f5.css
  34. 1 0
      crmeb/public/admin/system_static/css/chunk-72205bcc.f1b8835e.css
  35. 1 0
      crmeb/public/admin/system_static/css/chunk-8997cdd4.eef8e625.css
  36. 1 0
      crmeb/public/admin/system_static/js/app.6c0fe1e4.js
  37. 1 0
      crmeb/public/admin/system_static/js/chunk-06ebf9ce.abc205e1.js
  38. 1 0
      crmeb/public/admin/system_static/js/chunk-079229da.08356d92.js
  39. 1 0
      crmeb/public/admin/system_static/js/chunk-0d39ed33.3756eefd.js
  40. 21 0
      crmeb/public/admin/system_static/js/chunk-168ce470.3fa445c9.js
  41. 1 0
      crmeb/public/admin/system_static/js/chunk-1c9d17cc.f13ba5ff.js
  42. 1 0
      crmeb/public/admin/system_static/js/chunk-23bc9c3e.f1032f24.js
  43. 1 0
      crmeb/public/admin/system_static/js/chunk-24ec4e0e.afe4c1ad.js
  44. 1 0
      crmeb/public/admin/system_static/js/chunk-25540271.67955be0.js
  45. 1 0
      crmeb/public/admin/system_static/js/chunk-29d9e9c7.f63c36e4.js
  46. 1 0
      crmeb/public/admin/system_static/js/chunk-2d0b613c.fc27f0aa.js
  47. 1 0
      crmeb/public/admin/system_static/js/chunk-2d0cf6e4.dbabc773.js
  48. 1 0
      crmeb/public/admin/system_static/js/chunk-318cd060.48d89ce3.js
  49. 1 0
      crmeb/public/admin/system_static/js/chunk-37b3a6b4.3067d867.js
  50. 1 0
      crmeb/public/admin/system_static/js/chunk-394095d4.55b17f65.js
  51. 1 0
      crmeb/public/admin/system_static/js/chunk-3d6b888d.f6da43f0.js
  52. 1 0
      crmeb/public/admin/system_static/js/chunk-3fda7096.799c598b.js
  53. 1 0
      crmeb/public/admin/system_static/js/chunk-4037b518.3fa2f7e3.js
  54. 1 0
      crmeb/public/admin/system_static/js/chunk-4542f131.cab5e37f.js
  55. 1 0
      crmeb/public/admin/system_static/js/chunk-4d2be200.31525301.js
  56. 1 0
      crmeb/public/admin/system_static/js/chunk-4de97dce.ffb297a5.js
  57. 1 0
      crmeb/public/admin/system_static/js/chunk-5a39e378.f77e899b.js
  58. 1 0
      crmeb/public/admin/system_static/js/chunk-60b63af9.49b2d71d.js
  59. 1 0
      crmeb/public/admin/system_static/js/chunk-692a5f7e.b934bbb9.js
  60. 1 0
      crmeb/public/admin/system_static/js/chunk-6a2fb179.195ceba7.js
  61. 1 0
      crmeb/public/admin/system_static/js/chunk-6e9f76a0.ab8a278f.js
  62. 1 0
      crmeb/public/admin/system_static/js/chunk-72205bcc.18c3870d.js
  63. 1 0
      crmeb/public/admin/system_static/js/chunk-72b8efee.e9fd49c3.js
  64. 1 0
      crmeb/public/admin/system_static/js/chunk-77d9cfec.11b68d6a.js
  65. 1 0
      crmeb/public/admin/system_static/js/chunk-7aa0e78c.db178e19.js
  66. 1 0
      crmeb/public/admin/system_static/js/chunk-7df421ac.c19d4964.js
  67. 1 0
      crmeb/public/admin/system_static/js/chunk-8997cdd4.7e0f0229.js
  68. 1 0
      crmeb/public/admin/system_static/js/chunk-95552848.d88ad931.js
  69. 1 0
      crmeb/public/admin/system_static/js/chunk-bd3916d4.81490e55.js
  70. 1 0
      crmeb/public/admin/system_static/js/chunk-c582c15a.6c5ddbf6.js
  71. 1 0
      crmeb/public/admin/system_static/js/chunk-ce8ebbb4.65a63dfe.js
  72. 1 0
      crmeb/public/admin/system_static/js/chunk-ea0991f4.ef20f241.js
  73. 1 1
      template/admin/src/i18n/lang/zh-cn.js
  74. 2 0
      template/admin/src/layout/component/columnsAside.vue
  75. 1 1
      template/admin/src/layout/navBars/breadcrumb/index.vue
  76. 22 7
      template/admin/src/layout/navBars/breadcrumb/setings.vue
  77. 13 9
      template/admin/src/layout/navBars/breadcrumb/user.vue
  78. 15 10
      template/admin/src/layout/navBars/tagsView/tagsView.vue
  79. 8 0
      template/admin/src/pages/setting/systemMenus/index.vue
  80. 15 6
      template/admin/src/pages/system/codeGeneration/components/TableForm.vue
  81. 2 3
      template/admin/src/pages/system/codeGeneration/index.vue
  82. 6 4
      template/admin/src/pages/system/codeGeneration/list.vue
  83. 1 1
      template/admin/src/pages/system/maintain/systemFile/opendir.vue
  84. 8 6
      template/admin/src/store/module/app.js
  85. 1 0
      template/admin/src/theme/variables.scss

+ 31 - 6
crmeb/app/adminapi/controller/v1/setting/SystemCrud.php

@@ -254,6 +254,8 @@ class SystemCrud extends AuthController
             $item['default_field_type'] = $item['field_type'];
             $item['default_field_type'] = $item['field_type'];
             $item['default_comment'] = $item['comment'];
             $item['default_comment'] = $item['comment'];
             $item['default_default'] = $item['default'];
             $item['default_default'] = $item['default'];
+            $item['is_table'] = !!$item['is_table'];
+            $item['primaryKey'] = isset($item['primaryKey']) ? (int)$item['primaryKey'] : 0;
             $info['field']['tableField'][$key] = $item;
             $info['field']['tableField'][$key] = $item;
         }
         }
         //对比数据库,是否有新增字段
         //对比数据库,是否有新增字段
@@ -282,9 +284,27 @@ class SystemCrud extends AuthController
         }
         }
 
 
         if ($newColumn) {
         if ($newColumn) {
-            $info['field']['tableField'] = array_merge($info['field']['tableField'], $newColumn);
+            $info['field']['tableField'] = array_merge($newColumn, $info['field']['tableField']);
         }
         }
-
+        $keyInfo = [];
+        $deleteInfo = [];
+        foreach ($info['field']['tableField'] as $key => $item) {
+            if ($item['primaryKey']) {
+                $keyInfo = $item;
+                unset($info['field']['tableField'][$key]);
+            }
+            if ($item['field_type'] == 'addSoftDelete') {
+                $deleteInfo = $item;
+                unset($info['field']['tableField'][$key]);
+            }
+        }
+        if ($keyInfo) {
+            array_unshift($info['field']['tableField'], $keyInfo);
+        }
+        if ($deleteInfo) {
+            array_push($info['field']['tableField'], $deleteInfo);
+        }
+        $info['field']['pid'] = (int)$info['field']['pid'];
         return app('json')->success(['file' => $data, 'crudInfo' => $info]);
         return app('json')->success(['file' => $data, 'crudInfo' => $info]);
     }
     }
 
 
@@ -308,19 +328,24 @@ class SystemCrud extends AuthController
         if (!$crudInfo) {
         if (!$crudInfo) {
             return app('json')->fail('修改的CRUD文件不存在');
             return app('json')->fail('修改的CRUD文件不存在');
         }
         }
-        $makePath = [];
+
+        $makeFilepath = '';
         foreach ($crudInfo->make_path as $key => $item) {
         foreach ($crudInfo->make_path as $key => $item) {
+            $path = $item;
             if (in_array($key, ['pages', 'router', 'api'])) {
             if (in_array($key, ['pages', 'router', 'api'])) {
                 $item = Make::adminTemplatePath() . $item;
                 $item = Make::adminTemplatePath() . $item;
             } else {
             } else {
                 $item = app()->getRootPath() . $item;
                 $item = app()->getRootPath() . $item;
             }
             }
-            $makePath[$key] = $item;
+            if ($filepath == $path) {
+                $makeFilepath = $item;
+                break;
+            }
         }
         }
-        if (!in_array($filepath, $makePath)) {
+        if (!$makeFilepath || !in_array($filepath, $crudInfo->make_path)) {
             return app('json')->fail('您没有权限修改此文件');
             return app('json')->fail('您没有权限修改此文件');
         }
         }
-        $res = $service->savefile($filepath, $comment);
+        $res = $service->savefile($makeFilepath, $comment);
         if ($res) {
         if ($res) {
             return app('json')->success(100000);
             return app('json')->success(100000);
         } else {
         } else {

+ 121 - 15
crmeb/app/services/system/SystemCrudServices.php

@@ -165,9 +165,13 @@ class SystemCrudServices extends BaseServices
                     'value' => 'dateTime',
                     'value' => 'dateTime',
                     'label' => '单选日期时间',
                     'label' => '单选日期时间',
                 ],
                 ],
+//                [
+//                    'value' => 'dateTimeRange',
+//                    'label' => '日期时间区间选择',
+//                ],
                 [
                 [
-                    'value' => 'dateTimeRange',
-                    'label' => '日期时间区间选择',
+                    'value' => 'checkbox',
+                    'label' => '多选框',
                 ],
                 ],
                 [
                 [
                     'value' => 'radio',
                     'value' => 'radio',
@@ -303,7 +307,47 @@ class SystemCrudServices extends BaseServices
         $changeFiled = addslashes($changeFiled);
         $changeFiled = addslashes($changeFiled);
         $type = addslashes($type);
         $type = addslashes($type);
         $default = addslashes($default);
         $default = addslashes($default);
-        $sql = "ALTER TABLE `$tableName` CHANGE `$field` `$changeFiled` $type($limit) NOT NULL DEFAULT '$default' COMMENT '$comment';";
+        if (in_array(strtolower($type), ['text', 'longtext', 'tinytext'])) {
+            $sql = "ALTER TABLE `$tableName` CHANGE `$field` `$changeFiled` $type CHARACTER SET utf8 COLLATE utf8_general_ci NULL COMMENT '$comment';";
+        } else {
+            $sql = "ALTER TABLE `$tableName` CHANGE `$field` `$changeFiled` $type($limit) NOT NULL DEFAULT '$default' COMMENT '$comment';";
+        }
+        return Db::execute($sql);
+    }
+
+    /**
+     * 添加字段
+     * @param string $tableName
+     * @param string $field
+     * @param string $prevFiled
+     * @param string $type
+     * @param string $limit
+     * @param string $default
+     * @param string $comment
+     * @param array $options
+     * @return mixed
+     * @author 等风来
+     * @email 136327134@qq.com
+     * @date 2023/4/24
+     */
+    public function addAlter(string $tableName, string $field, string $prevFiled, string $type, $limit = '', string $default = '', string $comment = '', array $options = [])
+    {
+        $tableName = $this->getTableName($tableName);
+        $comment = addslashes($comment);
+        $field = addslashes($field);
+        $prevFiled = addslashes($prevFiled);
+        $type = addslashes($type);
+        $default = addslashes($default);
+        if ($prevFiled) {
+            $after = "AFTER `$prevFiled`";
+        } else {
+            $after = "";
+        }
+        if (in_array(strtolower($type), ['text', 'longtext', 'tinytext'])) {
+            $sql = "ALTER TABLE `$tableName` ADD `$field` $type NULL COMMENT '$comment' $after;";
+        } else {
+            $sql = "ALTER TABLE `$tableName` ADD `$field` $type($limit) NOT NULL DEFAULT '$default' COMMENT '$comment' $after;";
+        }
         return Db::execute($sql);
         return Db::execute($sql);
     }
     }
 
 
@@ -324,6 +368,23 @@ class SystemCrudServices extends BaseServices
         return Db::execute($sql);
         return Db::execute($sql);
     }
     }
 
 
+    /**
+     * 修改表备注
+     * @param string $tableName
+     * @param string $common
+     * @return mixed
+     * @author 等风来
+     * @email 136327134@qq.com
+     * @date 2023/4/24
+     */
+    protected function updateFromCommon(string $tableName, string $common)
+    {
+        $tableName = $this->getTableName($tableName);
+        $common = addslashes($common);
+        $sql = "ALTER TABLE `$tableName` COMMENT = '$common';";
+        return Db::execute($sql);
+    }
+
     /**
     /**
      * 对比字段变动了更改
      * 对比字段变动了更改
      * @param string $tableName
      * @param string $tableName
@@ -336,28 +397,57 @@ class SystemCrudServices extends BaseServices
     protected function diffAlter(string $tableName, array $deleteField, array $tableField)
     protected function diffAlter(string $tableName, array $deleteField, array $tableField)
     {
     {
         $updateAlter = [];
         $updateAlter = [];
+        $addAlter = [];
+
+        $columns = $this->getColumnNamesList($tableName);
+        $fieldAll = array_column($columns, 'name');
+        $prevFiled = $columns[count($columns) - 1]['name'] ?? '';
         //对比数据库字段
         //对比数据库字段
         foreach ($tableField as $item) {
         foreach ($tableField as $item) {
             if ($item['primaryKey']) {
             if ($item['primaryKey']) {
                 continue;
                 continue;
             }
             }
 
 
+            //前台新增的字段进行添加
             if (!(isset($item['default_field']) &&
             if (!(isset($item['default_field']) &&
                 isset($item['default_field_type']) &&
                 isset($item['default_field_type']) &&
                 isset($item['default_limit']) &&
                 isset($item['default_limit']) &&
                 isset($item['default_comment']) &&
                 isset($item['default_comment']) &&
                 isset($item['default_default']))
                 isset($item['default_default']))
             ) {
             ) {
+                if (!in_array($item['field'], $fieldAll)) {
+                    $addAlter[] = [
+                        'prev_filed' => $prevFiled,
+                        'field' => $item['field'],
+                        'limit' => $item['limit'],
+                        'type' => $item['field_type'],
+                        'comment' => $item['comment'],
+                        'default' => $item['default'],
+                    ];
+                }
                 continue;
                 continue;
+            } else {
+                //默认字段没有在数据库中,需要添加字段
+                if (!in_array($item['default_field'], $fieldAll)) {
+                    $addAlter[] = [
+                        'prev_filed' => $prevFiled,
+                        'field' => $item['field'],
+                        'limit' => $item['limit'],
+                        'type' => $item['field_type'],
+                        'comment' => $item['comment'],
+                        'default' => $item['default'],
+                    ];
+                    continue;
+                }
             }
             }
 
 
             if ($item['default_field'] != $item['field'] && in_array($item['field_type'], ['addTimestamps', 'addSoftDelete'])) {
             if ($item['default_field'] != $item['field'] && in_array($item['field_type'], ['addTimestamps', 'addSoftDelete'])) {
-                throw new AdminException('伪删除字段不允许被更改');
+                throw new AdminException($item['field'] . '字段不允许被更改');
             }
             }
 
 
-
+            //数据库表存在的,字段,并且被修改
             if ($item['default_field'] != $item['field'] ||
             if ($item['default_field'] != $item['field'] ||
-                $item['default_field_type'] != $item['type'] ||
+                $item['default_field_type'] != $item['field_type'] ||
                 $item['default_limit'] != $item['limit'] ||
                 $item['default_limit'] != $item['limit'] ||
                 $item['default_comment'] != $item['comment'] ||
                 $item['default_comment'] != $item['comment'] ||
                 $item['default_default'] != $item['default']) {
                 $item['default_default'] != $item['default']) {
@@ -375,6 +465,10 @@ class SystemCrudServices extends BaseServices
         foreach ($updateAlter as $item) {
         foreach ($updateAlter as $item) {
             $this->updateAlter($tableName, $item['default_field'], $item['field'], $item['type'], $item['limit'], $item['default'], $item['comment']);
             $this->updateAlter($tableName, $item['default_field'], $item['field'], $item['type'], $item['limit'], $item['default'], $item['comment']);
         }
         }
+        //添加字段
+        foreach ($addAlter as $item) {
+            $this->addAlter($tableName, $item['field'], $item['prev_filed'], $item['type'], $item['limit'], $item['default'], $item['comment']);
+        }
         //删除多余字段
         //删除多余字段
         foreach ($deleteField as $item) {
         foreach ($deleteField as $item) {
             $this->deleteAlter($tableName, $item);
             $this->deleteAlter($tableName, $item);
@@ -393,14 +487,10 @@ class SystemCrudServices extends BaseServices
     public function createCrud(int $id, array $data)
     public function createCrud(int $id, array $data)
     {
     {
         $tableName = $data['tableName'];
         $tableName = $data['tableName'];
-        $tableComment = $data['tableComment'] ?? $data['menuName'];
         $tableField = $this->valueReplace($data['tableField']);
         $tableField = $this->valueReplace($data['tableField']);
         $filePath = $this->valueReplace($data['filePath']);
         $filePath = $this->valueReplace($data['filePath']);
-        $modelName = $data['modelName'] ?? $data['menuName'] ?? $tableName;
-
-        if ($this->dao->value(['table_name' => $tableName])) {
-            throw new AdminException(500048);
-        }
+        $modelName = !empty($data['modelName']) ? $data['modelName'] : $tableName;
+        $tableComment = !empty($data['tableComment']) ? $data['tableComment'] : $modelName;
 
 
         //检测是否为系统表
         //检测是否为系统表
         if (in_array($tableName, self::NOT_CRUD_TABANAME)) {
         if (in_array($tableName, self::NOT_CRUD_TABANAME)) {
@@ -411,6 +501,7 @@ class SystemCrudServices extends BaseServices
 
 
         $tableInfo = null;
         $tableInfo = null;
         if ($id) {
         if ($id) {
+            $this->updateFromCommon($tableName, $tableComment);
             //删除数据库表
             //删除数据库表
             $tableInfo = $this->getTableInfo($tableName);
             $tableInfo = $this->getTableInfo($tableName);
             if ($tableInfo) {
             if ($tableInfo) {
@@ -476,9 +567,16 @@ class SystemCrudServices extends BaseServices
 
 
         $res = $this->transaction(function () use ($crudInfo, $tableInfo, $modelName, $filePath, $tableName, $routeName, $data, $dataMenu) {
         $res = $this->transaction(function () use ($crudInfo, $tableInfo, $modelName, $filePath, $tableName, $routeName, $data, $dataMenu) {
             $routeService = app()->make(SystemRouteServices::class);
             $routeService = app()->make(SystemRouteServices::class);
+            $meunService = app()->make(SystemMenusServices::class);
             //修改菜单名称
             //修改菜单名称
             if ($crudInfo) {
             if ($crudInfo) {
-                $menuInfo = app()->make(SystemMenusServices::class)->update($crudInfo->menu_id, $dataMenu);
+                //菜单存在的时候进行修改
+                if ($crudInfo->menu_id && $meunService->value(['id' => [$crudInfo->menu_id]], 'id')) {
+                    $meunService->update($crudInfo->menu_id, $dataMenu);
+                    $menuInfo = (object)['id' => $crudInfo->menu_id];
+                } else {
+                    $menuInfo = $meunService->save($dataMenu);
+                }
                 //删除掉添加的路由权限
                 //删除掉添加的路由权限
                 if ($crudInfo->routes_id) {
                 if ($crudInfo->routes_id) {
                     $routeService->deleteRoutes($crudInfo->routes_id);
                     $routeService->deleteRoutes($crudInfo->routes_id);
@@ -488,7 +586,7 @@ class SystemCrudServices extends BaseServices
                     app()->make(SystemMenusServices::class)->deleteMenus($crudInfo->menu_ids);
                     app()->make(SystemMenusServices::class)->deleteMenus($crudInfo->menu_ids);
                 }
                 }
             } else {
             } else {
-                $menuInfo = app()->make(SystemMenusServices::class)->save($dataMenu);
+                $menuInfo = $meunService->save($dataMenu);
             }
             }
             //写入路由权限
             //写入路由权限
             $cateId = app()->make(SystemRouteServices::class)->topCateId('adminapi', 'CRUD');
             $cateId = app()->make(SystemRouteServices::class)->topCateId('adminapi', 'CRUD');
@@ -557,7 +655,7 @@ class SystemCrudServices extends BaseServices
             $menuData = [];
             $menuData = [];
             foreach ($ruleData as $item) {
             foreach ($ruleData as $item) {
                 $menuData[] = [
                 $menuData[] = [
-                    'pid' => $menuInfo->id,
+                    'pid' => $menuInfo->id ?: 0,
                     'methods' => $item['method'],
                     'methods' => $item['method'],
                     'api_url' => $item['path'],
                     'api_url' => $item['path'],
                     'unique_auth' => $item['unique_auth'],
                     'unique_auth' => $item['unique_auth'],
@@ -566,6 +664,7 @@ class SystemCrudServices extends BaseServices
                     'auth_type' => 2,
                     'auth_type' => 2,
                 ];
                 ];
             }
             }
+
             $menus = app()->make(SystemMenusServices::class)->saveAll($menuData);
             $menus = app()->make(SystemMenusServices::class)->saveAll($menuData);
             $menuIds = array_column($menus->toArray(), 'id');
             $menuIds = array_column($menus->toArray(), 'id');
             //生成文件
             //生成文件
@@ -584,6 +683,7 @@ class SystemCrudServices extends BaseServices
                 'table_collation' => $tableInfo['TABLE_COLLATION'] ?? '',
                 'table_collation' => $tableInfo['TABLE_COLLATION'] ?? '',
                 'field' => json_encode($data),//提交的数据
                 'field' => json_encode($data),//提交的数据
                 'menu_ids' => json_encode($menuIds),//生成的菜单id
                 'menu_ids' => json_encode($menuIds),//生成的菜单id
+                'menu_id' => $menuInfo->id,//生成的菜单id
                 'make_path' => json_encode($makePath),
                 'make_path' => json_encode($makePath),
                 'routes_id' => json_encode($routeIds),
                 'routes_id' => json_encode($routeIds),
             ];
             ];
@@ -596,6 +696,8 @@ class SystemCrudServices extends BaseServices
                 $res = $this->dao->save($crudDate);
                 $res = $this->dao->save($crudDate);
             }
             }
 
 
+//            throw new ValidateException('测试中');
+
             return $res;
             return $res;
         });
         });
 
 
@@ -692,6 +794,10 @@ class SystemCrudServices extends BaseServices
                 $timestamps = true;
                 $timestamps = true;
             } else {
             } else {
                 $option['comment'] = $item['comment'];
                 $option['comment'] = $item['comment'];
+                $fieldType = $this->changeTabelRule($item['field_type']);
+                if (in_array($fieldType, ['text', 'longtext', 'tinytext'])) {
+                    unset($option['limit']);
+                }
                 $table->addColumn($item['field'], $this->changeTabelRule($item['field_type']), $option);
                 $table->addColumn($item['field'], $this->changeTabelRule($item['field_type']), $option);
             }
             }
         }
         }

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

@@ -124,7 +124,7 @@ class Controller extends Make
             'edit' => $controllerPath . 'edit.stub',
             'edit' => $controllerPath . 'edit.stub',
             'update' => $controllerPath . 'update.stub',
             'update' => $controllerPath . 'update.stub',
             'delete' => $controllerPath . 'delete.stub',
             'delete' => $controllerPath . 'delete.stub',
-            'controller' => $controllerPath . 'CrudController.stub',
+            'controller' => $controllerPath . 'crudController.stub',
         ];
         ];
 
 
         return $type ? $stubs[$type] : $stubs;
         return $type ? $stubs[$type] : $stubs;

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

@@ -44,6 +44,6 @@ class Dao extends Make
      */
      */
     protected function getStub(string $type = '')
     protected function getStub(string $type = '')
     {
     {
-        return __DIR__ . DS . 'stubs' . DS . 'dao' . DS . 'CrudDao.stub';
+        return __DIR__ . DS . 'stubs' . DS . 'dao' . DS . 'crudDao.stub';
     }
     }
 }
 }

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

@@ -84,6 +84,6 @@ class Model extends Make
      */
      */
     protected function getStub(string $type = '')
     protected function getStub(string $type = '')
     {
     {
-        return __DIR__ . DS . 'stubs' . DS . 'model' . DS . 'CrudModel.stub';
+        return __DIR__ . DS . 'stubs' . DS . 'model' . DS . 'crudModel.stub';
     }
     }
 }
 }

+ 24 - 10
crmeb/crmeb/services/crud/Service.php

@@ -73,10 +73,20 @@ class Service extends Make
                         $from[] = $this->tab(2) . $this->getframeImagesPhpContent($item['field'], $item['name'], $item['required'] ?? false) . ';';
                         $from[] = $this->tab(2) . $this->getframeImagesPhpContent($item['field'], $item['name'], $item['required'] ?? false) . ';';
                         break;
                         break;
                     default:
                     default:
-                        $from[] = $this->tab(2) . '$rule[] = FormBuilder::' . $item['type'] . '("' . $item['field'] . '","' . $item['name'] . '",$info["' . $item['field'] . '"] ?? "")' . $this->getOptionContent(in_array($item['type'], ['radio', 'select']), $item['option'] ?? []) . ';';
+                        $valueContent = "''";
+                        $input = '$info["' . $item['field'] . '"] ?? ';
+                        if (in_array($item['type'], ['checkbox'])) {
+                            $valueContent = '[]';
+                            $input = '(array)(' . $input . $valueContent . ')';
+                        } else if ($item['type'] == 'radio') {
+                            $valueContent = '-1';
+                            $input = '(int)(' . $input . $valueContent . ')';
+                        } else {
+                            $input = $input . $valueContent;
+                        }
+                        $from[] = $this->tab(2) . '$rule[] = FormBuilder::' . $item['type'] . '("' . $item['field'] . '", "' . $item['name'] . '",  ' . $input . ')' . $this->getOptionContent(in_array($item['type'], ['radio', 'select', 'checkbox']), $item['option'] ?? []) . ';';
                         break;
                         break;
                 }
                 }
-
             }
             }
             if ($from) {
             if ($from) {
                 $this->value['use-php'] .= "\n" . 'use crmeb\services\FormBuilder;';
                 $this->value['use-php'] .= "\n" . 'use crmeb\services\FormBuilder;';
@@ -103,6 +113,7 @@ class Service extends Make
 
 
         $filePath = $this->getFilePathName($path, $this->value['nameCamel']);
         $filePath = $this->getFilePathName($path, $this->value['nameCamel']);
         $this->usePath = $this->baseDir . '\\' . $this->value['nameCamel'];
         $this->usePath = $this->baseDir . '\\' . $this->value['nameCamel'];
+
         $this->setContent($contentStr);
         $this->setContent($contentStr);
         $this->setPathname($filePath);
         $this->setPathname($filePath);
         return $this;
         return $this;
@@ -117,7 +128,10 @@ class Service extends Make
      */
      */
     protected function getOptionContent(bool $isOption, array $option = [])
     protected function getOptionContent(bool $isOption, array $option = [])
     {
     {
-        if (!$option && $isOption) {
+        if (!$isOption) {
+            return '';
+        }
+        if (!$option) {
             $option = [
             $option = [
                 ['value' => 1, 'label' => '开启'],
                 ['value' => 1, 'label' => '开启'],
                 ['value' => 0, 'label' => '关闭']
                 ['value' => 0, 'label' => '关闭']
@@ -127,11 +141,11 @@ class Service extends Make
         if ($option) {
         if ($option) {
             $attOption = [];
             $attOption = [];
             foreach ($option as $item) {
             foreach ($option as $item) {
-                $attOption[] = $this->tab(2) . "['value'=>'{$item['value']}', 'label'=>'{$item['label']}'],";
+                $attOption[] = $this->tab(3) . "['value'=>'{$item['value']}', 'label'=>'{$item['label']}'],";
             }
             }
 
 
             $strOption = implode("\n", $attOption);
             $strOption = implode("\n", $attOption);
-            $php = '->options([' . $strOption . '])';
+            $php = "->options([\n" . $strOption . "\n" . $this->tab(2) . "])";
         }
         }
 
 
         return $php;
         return $php;
@@ -210,11 +224,11 @@ CONTENT;
         $servicePath = __DIR__ . DS . 'stubs' . DS . 'service' . DS;
         $servicePath = __DIR__ . DS . 'stubs' . DS . 'service' . DS;
 
 
         $stubs = [
         $stubs = [
-            'index' => $servicePath . 'CrudListIndex.stub',
-            'form' => $servicePath . 'GetCrudForm.stub',
-            'save' => $servicePath . 'CrudSave.stub',
-            'update' => $servicePath . 'CrudUpdate.stub',
-            'services' => $servicePath . 'CrudService.stub',
+            'index' => $servicePath . 'crudListIndex.stub',
+            'form' => $servicePath . 'getCrudForm.stub',
+            'save' => $servicePath . 'crudSave.stub',
+            'update' => $servicePath . 'crudUpdate.stub',
+            'services' => $servicePath . 'crudService.stub',
         ];
         ];
 
 
         return $type ? $stubs[$type] : $stubs;
         return $type ? $stubs[$type] : $stubs;

+ 5 - 1
crmeb/crmeb/services/crud/ViewPages.php

@@ -74,19 +74,23 @@ class ViewPages extends Make
         $columnStr = [];
         $columnStr = [];
         $contentVue = [];
         $contentVue = [];
         foreach ($field as $key => $item) {
         foreach ($field as $key => $item) {
+            $keyName = 'key';
             if (isset($item['type'])) {
             if (isset($item['type'])) {
                 switch ($item['type']) {
                 switch ($item['type']) {
                     case 'frameImageOne':
                     case 'frameImageOne':
+                        $keyName = 'slot';
                         $templateContent = file_get_contents($this->getStub('image'));
                         $templateContent = file_get_contents($this->getStub('image'));
                         $contentVue[] = str_replace(['{%field%}'], [$item['field']], $templateContent);
                         $contentVue[] = str_replace(['{%field%}'], [$item['field']], $templateContent);
                         break;
                         break;
                     case 'frameImages':
                     case 'frameImages':
+                        $keyName = 'slot';
                         $templateContent = file_get_contents($this->getStub('images'));
                         $templateContent = file_get_contents($this->getStub('images'));
                         $contentVue[] = str_replace(['{%field%}'], [$item['field']], $templateContent);
                         $contentVue[] = str_replace(['{%field%}'], [$item['field']], $templateContent);
                         break;
                         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";
+
+            $columnStr[] = ($key == 0 ? $this->tab(2) : '') . "{\n" . $this->tab(3) . "title:\"{$item['name']}\"," . $this->tab(2) . "\n" . $this->tab(3) . "$keyName:\"{$item['field']}\"\n" . $this->tab(2) . "}\n";
         }
         }
         $this->value['auth'] = Str::snake($name);
         $this->value['auth'] = Str::snake($name);
         $this->value['componentName'] = $this->value['auth'];
         $this->value['componentName'] = $this->value['auth'];

crmeb/crmeb/services/crud/stubs/controller/CrudController.stub → crmeb/crmeb/services/crud/stubs/controller/crudController.stub


crmeb/crmeb/services/crud/stubs/dao/CrudDao.stub → crmeb/crmeb/services/crud/stubs/dao/crudDao.stub


crmeb/crmeb/services/crud/stubs/model/CrudModel.stub → crmeb/crmeb/services/crud/stubs/model/crudModel.stub


crmeb/crmeb/services/crud/stubs/service/CrudListIndex.stub → crmeb/crmeb/services/crud/stubs/service/crudListIndex.stub


crmeb/crmeb/services/crud/stubs/service/CrudSave.stub → crmeb/crmeb/services/crud/stubs/service/crudSave.stub


crmeb/crmeb/services/crud/stubs/service/CrudService.stub → crmeb/crmeb/services/crud/stubs/service/crudService.stub


crmeb/crmeb/services/crud/stubs/service/CrudUpdate.stub → crmeb/crmeb/services/crud/stubs/service/crudUpdate.stub


crmeb/crmeb/services/crud/stubs/service/GetCrudForm.stub → crmeb/crmeb/services/crud/stubs/service/getCrudForm.stub


تفاوت فایلی نمایش داده نمی شود زیرا این فایل بسیار بزرگ است
+ 1 - 1
crmeb/public/admin/index.html


تفاوت فایلی نمایش داده نمی شود زیرا این فایل بسیار بزرگ است
+ 2 - 0
crmeb/public/admin/system_static/css/app.2128acc0.css


تفاوت فایلی نمایش داده نمی شود زیرا این فایل بسیار بزرگ است
+ 1 - 0
crmeb/public/admin/system_static/css/chunk-06ebf9ce.3a9dc686.css


تفاوت فایلی نمایش داده نمی شود زیرا این فایل بسیار بزرگ است
+ 1 - 0
crmeb/public/admin/system_static/css/chunk-079229da.f3a1ec95.css


+ 1 - 0
crmeb/public/admin/system_static/css/chunk-0d39ed33.6beb4ded.css

@@ -0,0 +1 @@
+.tableBox[data-v-35428d3a] .ivu-table-header table{border:none!important}.table-mark[data-v-35428d3a]{cursor:text}.table-mark[data-v-35428d3a]:hover{border:1px solid #c2c2c2;padding:3px 5px}.mark[data-v-35428d3a] .ivu-input{background:#fff;border-radius:.39rem}.ivu-input[data-v-35428d3a]:focus,.ivu-input[data-v-35428d3a]:hover,.mark[data-v-35428d3a] .ivu-input{border:transparent;-webkit-box-shadow:none;box-shadow:none}

تفاوت فایلی نمایش داده نمی شود زیرا این فایل بسیار بزرگ است
+ 1 - 0
crmeb/public/admin/system_static/css/chunk-168ce470.7458715b.css


تفاوت فایلی نمایش داده نمی شود زیرا این فایل بسیار بزرگ است
+ 1 - 0
crmeb/public/admin/system_static/css/chunk-1c9d17cc.36ffa31d.css


تفاوت فایلی نمایش داده نمی شود زیرا این فایل بسیار بزرگ است
+ 1 - 0
crmeb/public/admin/system_static/css/chunk-24ec4e0e.fa07380f.css


تفاوت فایلی نمایش داده نمی شود زیرا این فایل بسیار بزرگ است
+ 1 - 0
crmeb/public/admin/system_static/css/chunk-318cd060.3ae07c8e.css


تفاوت فایلی نمایش داده نمی شود زیرا این فایل بسیار بزرگ است
+ 1 - 0
crmeb/public/admin/system_static/css/chunk-394095d4.2c370ecb.css


تفاوت فایلی نمایش داده نمی شود زیرا این فایل بسیار بزرگ است
+ 1 - 0
crmeb/public/admin/system_static/css/chunk-3d6b888d.1ad7af4c.css


تفاوت فایلی نمایش داده نمی شود زیرا این فایل بسیار بزرگ است
+ 1 - 0
crmeb/public/admin/system_static/css/chunk-3fda7096.04f598bd.css


تفاوت فایلی نمایش داده نمی شود زیرا این فایل بسیار بزرگ است
+ 1 - 0
crmeb/public/admin/system_static/css/chunk-4037b518.9bf71c8c.css


تفاوت فایلی نمایش داده نمی شود زیرا این فایل بسیار بزرگ است
+ 1 - 0
crmeb/public/admin/system_static/css/chunk-4542f131.3ec4ea39.css


تفاوت فایلی نمایش داده نمی شود زیرا این فایل بسیار بزرگ است
+ 1 - 0
crmeb/public/admin/system_static/css/chunk-4de97dce.232bd18a.css


تفاوت فایلی نمایش داده نمی شود زیرا این فایل بسیار بزرگ است
+ 1 - 0
crmeb/public/admin/system_static/css/chunk-5a39e378.622f82d7.css


تفاوت فایلی نمایش داده نمی شود زیرا این فایل بسیار بزرگ است
+ 1 - 0
crmeb/public/admin/system_static/css/chunk-6a2fb179.e2724184.css


+ 1 - 0
crmeb/public/admin/system_static/css/chunk-6e9f76a0.71bb20f5.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}.tabBox_img[data-v-68334b14]{width:36px;height:36px;border-radius:4px;cursor:pointer}.tabBox_img img[data-v-68334b14]{width:100%;height:100%}

تفاوت فایلی نمایش داده نمی شود زیرا این فایل بسیار بزرگ است
+ 1 - 0
crmeb/public/admin/system_static/css/chunk-72205bcc.f1b8835e.css


تفاوت فایلی نمایش داده نمی شود زیرا این فایل بسیار بزرگ است
+ 1 - 0
crmeb/public/admin/system_static/css/chunk-8997cdd4.eef8e625.css


تفاوت فایلی نمایش داده نمی شود زیرا این فایل بسیار بزرگ است
+ 1 - 0
crmeb/public/admin/system_static/js/app.6c0fe1e4.js


تفاوت فایلی نمایش داده نمی شود زیرا این فایل بسیار بزرگ است
+ 1 - 0
crmeb/public/admin/system_static/js/chunk-06ebf9ce.abc205e1.js


تفاوت فایلی نمایش داده نمی شود زیرا این فایل بسیار بزرگ است
+ 1 - 0
crmeb/public/admin/system_static/js/chunk-079229da.08356d92.js


تفاوت فایلی نمایش داده نمی شود زیرا این فایل بسیار بزرگ است
+ 1 - 0
crmeb/public/admin/system_static/js/chunk-0d39ed33.3756eefd.js


تفاوت فایلی نمایش داده نمی شود زیرا این فایل بسیار بزرگ است
+ 21 - 0
crmeb/public/admin/system_static/js/chunk-168ce470.3fa445c9.js


تفاوت فایلی نمایش داده نمی شود زیرا این فایل بسیار بزرگ است
+ 1 - 0
crmeb/public/admin/system_static/js/chunk-1c9d17cc.f13ba5ff.js


تفاوت فایلی نمایش داده نمی شود زیرا این فایل بسیار بزرگ است
+ 1 - 0
crmeb/public/admin/system_static/js/chunk-23bc9c3e.f1032f24.js


تفاوت فایلی نمایش داده نمی شود زیرا این فایل بسیار بزرگ است
+ 1 - 0
crmeb/public/admin/system_static/js/chunk-24ec4e0e.afe4c1ad.js


تفاوت فایلی نمایش داده نمی شود زیرا این فایل بسیار بزرگ است
+ 1 - 0
crmeb/public/admin/system_static/js/chunk-25540271.67955be0.js


تفاوت فایلی نمایش داده نمی شود زیرا این فایل بسیار بزرگ است
+ 1 - 0
crmeb/public/admin/system_static/js/chunk-29d9e9c7.f63c36e4.js


تفاوت فایلی نمایش داده نمی شود زیرا این فایل بسیار بزرگ است
+ 1 - 0
crmeb/public/admin/system_static/js/chunk-2d0b613c.fc27f0aa.js


تفاوت فایلی نمایش داده نمی شود زیرا این فایل بسیار بزرگ است
+ 1 - 0
crmeb/public/admin/system_static/js/chunk-2d0cf6e4.dbabc773.js


تفاوت فایلی نمایش داده نمی شود زیرا این فایل بسیار بزرگ است
+ 1 - 0
crmeb/public/admin/system_static/js/chunk-318cd060.48d89ce3.js


تفاوت فایلی نمایش داده نمی شود زیرا این فایل بسیار بزرگ است
+ 1 - 0
crmeb/public/admin/system_static/js/chunk-37b3a6b4.3067d867.js


تفاوت فایلی نمایش داده نمی شود زیرا این فایل بسیار بزرگ است
+ 1 - 0
crmeb/public/admin/system_static/js/chunk-394095d4.55b17f65.js


تفاوت فایلی نمایش داده نمی شود زیرا این فایل بسیار بزرگ است
+ 1 - 0
crmeb/public/admin/system_static/js/chunk-3d6b888d.f6da43f0.js


تفاوت فایلی نمایش داده نمی شود زیرا این فایل بسیار بزرگ است
+ 1 - 0
crmeb/public/admin/system_static/js/chunk-3fda7096.799c598b.js


تفاوت فایلی نمایش داده نمی شود زیرا این فایل بسیار بزرگ است
+ 1 - 0
crmeb/public/admin/system_static/js/chunk-4037b518.3fa2f7e3.js


تفاوت فایلی نمایش داده نمی شود زیرا این فایل بسیار بزرگ است
+ 1 - 0
crmeb/public/admin/system_static/js/chunk-4542f131.cab5e37f.js


تفاوت فایلی نمایش داده نمی شود زیرا این فایل بسیار بزرگ است
+ 1 - 0
crmeb/public/admin/system_static/js/chunk-4d2be200.31525301.js


تفاوت فایلی نمایش داده نمی شود زیرا این فایل بسیار بزرگ است
+ 1 - 0
crmeb/public/admin/system_static/js/chunk-4de97dce.ffb297a5.js


تفاوت فایلی نمایش داده نمی شود زیرا این فایل بسیار بزرگ است
+ 1 - 0
crmeb/public/admin/system_static/js/chunk-5a39e378.f77e899b.js


تفاوت فایلی نمایش داده نمی شود زیرا این فایل بسیار بزرگ است
+ 1 - 0
crmeb/public/admin/system_static/js/chunk-60b63af9.49b2d71d.js


تفاوت فایلی نمایش داده نمی شود زیرا این فایل بسیار بزرگ است
+ 1 - 0
crmeb/public/admin/system_static/js/chunk-692a5f7e.b934bbb9.js


تفاوت فایلی نمایش داده نمی شود زیرا این فایل بسیار بزرگ است
+ 1 - 0
crmeb/public/admin/system_static/js/chunk-6a2fb179.195ceba7.js


تفاوت فایلی نمایش داده نمی شود زیرا این فایل بسیار بزرگ است
+ 1 - 0
crmeb/public/admin/system_static/js/chunk-6e9f76a0.ab8a278f.js


تفاوت فایلی نمایش داده نمی شود زیرا این فایل بسیار بزرگ است
+ 1 - 0
crmeb/public/admin/system_static/js/chunk-72205bcc.18c3870d.js


تفاوت فایلی نمایش داده نمی شود زیرا این فایل بسیار بزرگ است
+ 1 - 0
crmeb/public/admin/system_static/js/chunk-72b8efee.e9fd49c3.js


تفاوت فایلی نمایش داده نمی شود زیرا این فایل بسیار بزرگ است
+ 1 - 0
crmeb/public/admin/system_static/js/chunk-77d9cfec.11b68d6a.js


تفاوت فایلی نمایش داده نمی شود زیرا این فایل بسیار بزرگ است
+ 1 - 0
crmeb/public/admin/system_static/js/chunk-7aa0e78c.db178e19.js


تفاوت فایلی نمایش داده نمی شود زیرا این فایل بسیار بزرگ است
+ 1 - 0
crmeb/public/admin/system_static/js/chunk-7df421ac.c19d4964.js


تفاوت فایلی نمایش داده نمی شود زیرا این فایل بسیار بزرگ است
+ 1 - 0
crmeb/public/admin/system_static/js/chunk-8997cdd4.7e0f0229.js


تفاوت فایلی نمایش داده نمی شود زیرا این فایل بسیار بزرگ است
+ 1 - 0
crmeb/public/admin/system_static/js/chunk-95552848.d88ad931.js


تفاوت فایلی نمایش داده نمی شود زیرا این فایل بسیار بزرگ است
+ 1 - 0
crmeb/public/admin/system_static/js/chunk-bd3916d4.81490e55.js


تفاوت فایلی نمایش داده نمی شود زیرا این فایل بسیار بزرگ است
+ 1 - 0
crmeb/public/admin/system_static/js/chunk-c582c15a.6c5ddbf6.js


تفاوت فایلی نمایش داده نمی شود زیرا این فایل بسیار بزرگ است
+ 1 - 0
crmeb/public/admin/system_static/js/chunk-ce8ebbb4.65a63dfe.js


تفاوت فایلی نمایش داده نمی شود زیرا این فایل بسیار بزرگ است
+ 1 - 0
crmeb/public/admin/system_static/js/chunk-ea0991f4.ef20f241.js


+ 1 - 1
template/admin/src/i18n/lang/zh-cn.js

@@ -73,7 +73,7 @@ export default {
     dropdown3: '404',
     dropdown3: '404',
     dropdown4: '401',
     dropdown4: '401',
     dropdown5: '退出登录',
     dropdown5: '退出登录',
-    dropdown6: '代码仓库',
+    dropdown6: '个人中心',
     searchPlaceholder: '菜单搜索:支持中文、路由路径',
     searchPlaceholder: '菜单搜索:支持中文、路由路径',
     newTitle: '通知',
     newTitle: '通知',
     newBtn: '全部已读',
     newBtn: '全部已读',

+ 2 - 0
template/admin/src/layout/component/columnsAside.vue

@@ -209,6 +209,8 @@ export default {
   height: 100%;
   height: 100%;
   background: var(--prev-bg-columnsMenuBar);
   background: var(--prev-bg-columnsMenuBar);
   box-shadow: 0 1px 4px rgba(0, 21, 41, 0.08);
   box-shadow: 0 1px 4px rgba(0, 21, 41, 0.08);
+  border-right: 1px solid var(--prev-border-color-lighter);
+
   ul {
   ul {
     position: relative;
     position: relative;
     li {
     li {

+ 1 - 1
template/admin/src/layout/navBars/breadcrumb/index.vue

@@ -79,6 +79,6 @@ export default {
   padding-right: 15px;
   padding-right: 15px;
   overflow: hidden;
   overflow: hidden;
   background: var(--prev-bg-topBar);
   background: var(--prev-bg-topBar);
-  //   border-bottom: 1px solid var(--prev-border-color-lighter);
+  border-bottom: 1px solid var(--prev-border-color-lighter);
 }
 }
 </style>
 </style>

+ 22 - 7
template/admin/src/layout/navBars/breadcrumb/setings.vue

@@ -199,7 +199,12 @@
         <div class="layout-breadcrumb-seting-bar-flex mt15">
         <div class="layout-breadcrumb-seting-bar-flex mt15">
           <div class="layout-breadcrumb-seting-bar-flex-label">{{ $t('message.layout.fourIsTagsviewIcon') }}</div>
           <div class="layout-breadcrumb-seting-bar-flex-label">{{ $t('message.layout.fourIsTagsviewIcon') }}</div>
           <div class="layout-breadcrumb-seting-bar-flex-value">
           <div class="layout-breadcrumb-seting-bar-flex-value">
-            <el-switch v-model="getThemeConfig.isTagsviewIcon" :width="35" @change="setLocalThemeConfig"></el-switch>
+            <el-switch
+              v-model="getThemeConfig.isTagsviewIcon"
+              :disabled="!getThemeConfig.isTagsview"
+              :width="35"
+              @change="setLocalThemeConfig"
+            ></el-switch>
           </div>
           </div>
         </div>
         </div>
         <!-- <div class="layout-breadcrumb-seting-bar-flex mt15">
         <!-- <div class="layout-breadcrumb-seting-bar-flex mt15">
@@ -236,7 +241,7 @@
         <div class="layout-breadcrumb-seting-bar-flex mt15">
         <div class="layout-breadcrumb-seting-bar-flex mt15">
           <div class="layout-breadcrumb-seting-bar-flex-label">{{ $t('message.layout.fiveTagsStyle') }}</div>
           <div class="layout-breadcrumb-seting-bar-flex-label">{{ $t('message.layout.fiveTagsStyle') }}</div>
           <div class="layout-breadcrumb-seting-bar-flex-value">
           <div class="layout-breadcrumb-seting-bar-flex-value">
-            <el-select
+            <!-- <el-select
               v-model="getThemeConfig.tagsStyle"
               v-model="getThemeConfig.tagsStyle"
               placeholder="请选择"
               placeholder="请选择"
               size="mini"
               size="mini"
@@ -246,16 +251,26 @@
               <el-option label="风格1" value="tags-style-one"></el-option>
               <el-option label="风格1" value="tags-style-one"></el-option>
               <el-option label="风格2" value="tags-style-four"></el-option>
               <el-option label="风格2" value="tags-style-four"></el-option>
               <el-option label="风格3" value="tags-style-five"></el-option>
               <el-option label="风格3" value="tags-style-five"></el-option>
-            </el-select>
+            </el-select> -->
+            <el-radio-group
+              v-model="getThemeConfig.tagsStyle"
+              :disabled="!getThemeConfig.isTagsview"
+              size="mini"
+              @change="setLocalThemeConfig"
+            >
+              <el-radio-button label="tags-style-one">卡片</el-radio-button>
+              <el-radio-button label="tags-style-four">灵动</el-radio-button>
+              <el-radio-button label="tags-style-five">圆滑</el-radio-button>
+            </el-radio-group>
           </div>
           </div>
         </div>
         </div>
         <div class="layout-breadcrumb-seting-bar-flex mt15">
         <div class="layout-breadcrumb-seting-bar-flex mt15">
           <div class="layout-breadcrumb-seting-bar-flex-label">{{ $t('message.layout.fiveAnimation') }}</div>
           <div class="layout-breadcrumb-seting-bar-flex-label">{{ $t('message.layout.fiveAnimation') }}</div>
           <div class="layout-breadcrumb-seting-bar-flex-value">
           <div class="layout-breadcrumb-seting-bar-flex-value">
             <el-radio-group v-model="getThemeConfig.animation" size="mini" @change="setLocalThemeConfig">
             <el-radio-group v-model="getThemeConfig.animation" size="mini" @change="setLocalThemeConfig">
-              <el-radio-button label="slide-right">右滑</el-radio-button>
               <el-radio-button label="slide-left">左滑</el-radio-button>
               <el-radio-button label="slide-left">左滑</el-radio-button>
               <el-radio-button label="opacitys">透明</el-radio-button>
               <el-radio-button label="opacitys">透明</el-radio-button>
+              <el-radio-button label="slide-right">右滑</el-radio-button>
             </el-radio-group>
             </el-radio-group>
           </div>
           </div>
         </div>
         </div>
@@ -410,7 +425,7 @@ export default {
           } else if (val == 'theme-3') {
           } else if (val == 'theme-3') {
             themeSelect['--prev-bg-menuBar'] = '#282c34';
             themeSelect['--prev-bg-menuBar'] = '#282c34';
             themeSelect['--prev-bg-menu-hover-ba-color'] = '#41b584';
             themeSelect['--prev-bg-menu-hover-ba-color'] = '#41b584';
-            themeSelect['--prev-color-primary'] = '#fff';
+            themeSelect['--prev-color-primary'] = '#41b584';
             themeSelect['--prev-bg-topBar'] = '#fff';
             themeSelect['--prev-bg-topBar'] = '#fff';
             themeSelect['--prev-bg-topBarColor'] = '#282c34';
             themeSelect['--prev-bg-topBarColor'] = '#282c34';
             themeSelect['--prev-bg-menuBarColor'] = '#fff';
             themeSelect['--prev-bg-menuBarColor'] = '#fff';
@@ -419,7 +434,7 @@ export default {
             themeSelect['--prev-bg-menuBar'] = '#282c34';
             themeSelect['--prev-bg-menuBar'] = '#282c34';
             themeSelect['--prev-bg-menu-hover-ba-color'] = '#6954f0';
             themeSelect['--prev-bg-menu-hover-ba-color'] = '#6954f0';
             themeSelect['--prev-bg-topBarColor'] = '#282c34';
             themeSelect['--prev-bg-topBarColor'] = '#282c34';
-            themeSelect['--prev-color-primary'] = '#fff';
+            themeSelect['--prev-color-primary'] = '#6954f0';
             themeSelect['--prev-bg-topBar'] = '#fff';
             themeSelect['--prev-bg-topBar'] = '#fff';
 
 
             themeSelect['--prev-bg-menuBarColor'] = '#fff';
             themeSelect['--prev-bg-menuBarColor'] = '#fff';
@@ -429,7 +444,7 @@ export default {
             themeSelect['--prev-bg-topBar'] = '#fff';
             themeSelect['--prev-bg-topBar'] = '#fff';
             themeSelect['--prev-bg-topBarColor'] = '#282c34';
             themeSelect['--prev-bg-topBarColor'] = '#282c34';
             themeSelect['--prev-bg-menu-hover-ba-color'] = '#f34d37';
             themeSelect['--prev-bg-menu-hover-ba-color'] = '#f34d37';
-            themeSelect['--prev-color-primary'] = '#fff';
+            themeSelect['--prev-color-primary'] = '#f34d37';
             themeSelect['--prev-bg-menuBarColor'] = '#fff';
             themeSelect['--prev-bg-menuBarColor'] = '#fff';
             themeSelect['--prev-MenuActiveColor'] = '#fff';
             themeSelect['--prev-MenuActiveColor'] = '#fff';
           }
           }

+ 13 - 9
template/admin/src/layout/navBars/breadcrumb/user.vue

@@ -26,9 +26,7 @@
     <div class="layout-navbars-breadcrumb-user-icon" @click="onSearchClick">
     <div class="layout-navbars-breadcrumb-user-icon" @click="onSearchClick">
       <i class="el-icon-search" :title="$t('message.user.title2')"></i>
       <i class="el-icon-search" :title="$t('message.user.title2')"></i>
     </div>
     </div>
-    <div class="layout-navbars-breadcrumb-user-icon" @click="onLayoutSetingClick">
-      <i class="el-icon-star-off" :title="$t('message.user.title3')"></i>
-    </div>
+
     <div class="layout-navbars-breadcrumb-user-icon">
     <div class="layout-navbars-breadcrumb-user-icon">
       <el-popover
       <el-popover
         placement="bottom"
         placement="bottom"
@@ -58,14 +56,18 @@
         <i class="el-icon-arrow-down el-icon--right"></i>
         <i class="el-icon-arrow-down el-icon--right"></i>
       </span>
       </span>
       <el-dropdown-menu slot="dropdown">
       <el-dropdown-menu slot="dropdown">
-        <el-dropdown-item :command="homePath">{{ $t('message.user.dropdown1') }}</el-dropdown-item>
-        <!-- <el-dropdown-item command="wareHouse">{{ $t('message.user.dropdown6') }}</el-dropdown-item>
-        <el-dropdown-item command="/personal">{{ $t('message.user.dropdown2') }}</el-dropdown-item>
-        <el-dropdown-item command="/404">{{ $t('message.user.dropdown3') }}</el-dropdown-item>
-        <el-dropdown-item command="/401">{{ $t('message.user.dropdown4') }}</el-dropdown-item> -->
+        <!-- <el-dropdown-item :command="homePath">{{ $t('message.user.dropdown1') }}</el-dropdown-item> -->
+        <el-dropdown-item command="user">{{ $t('message.user.dropdown6') }}</el-dropdown-item>
+        <!-- <el-dropdown-item command="wareHouse">{{ $t('message.user.dropdown6') }}</el-dropdown-item> -->
+        <!-- <el-dropdown-item command="/personal">{{ $t('message.user.dropdown2') }}</el-dropdown-item> -->
+        <!-- <el-dropdown-item command="/404">{{ $t('message.user.dropdown3') }}</el-dropdown-item> -->
+        <!-- <el-dropdown-item command="/401">{{ $t('message.user.dropdown4') }}</el-dropdown-item> -->
         <el-dropdown-item divided command="logOut">{{ $t('message.user.dropdown5') }}</el-dropdown-item>
         <el-dropdown-item divided command="logOut">{{ $t('message.user.dropdown5') }}</el-dropdown-item>
       </el-dropdown-menu>
       </el-dropdown-menu>
     </el-dropdown>
     </el-dropdown>
+    <div class="layout-navbars-breadcrumb-user-icon" @click="onLayoutSetingClick">
+      <i class="el-icon-setting" :title="$t('message.user.title3')"></i>
+    </div>
     <Search ref="searchRef" />
     <Search ref="searchRef" />
   </div>
   </div>
 </template>
 </template>
@@ -225,7 +227,8 @@ export default {
             })
             })
             .catch(() => {});
             .catch(() => {});
         }, 150);
         }, 150);
-      } else if (path === 'wareHouse') {
+      } else if (path === 'user') {
+        this.$router.push({ name: 'systemUser' });
       } else {
       } else {
         this.$router.push(path);
         this.$router.push(path);
       }
       }
@@ -268,6 +271,7 @@ export default {
   }
   }
   & ::v-deep .el-dropdown {
   & ::v-deep .el-dropdown {
     color: var(--prev-bg-topBarColor);
     color: var(--prev-bg-topBarColor);
+    cursor: pointer;
   }
   }
   & ::v-deep .el-badge {
   & ::v-deep .el-badge {
     height: 40px;
     height: 40px;

+ 15 - 10
template/admin/src/layout/navBars/tagsView/tagsView.vue

@@ -62,7 +62,7 @@ export default {
     // 获取布局配置信息
     // 获取布局配置信息
     getThemeConfig() {
     getThemeConfig() {
       return this.$store.state.themeConfig.themeConfig;
       return this.$store.state.themeConfig.themeConfig;
-    },
+    }, 
     // 动态设置 tagsView 风格样式
     // 动态设置 tagsView 风格样式
     setTagsStyle() {
     setTagsStyle() {
       return this.$store.state.themeConfig.themeConfig.tagsStyle;
       return this.$store.state.themeConfig.themeConfig.tagsStyle;
@@ -252,8 +252,7 @@ export default {
           this.closeCurrentTagsView(path);
           this.closeCurrentTagsView(path);
           break;
           break;
         case 2:
         case 2:
-          this.$router.push({ path, query: currentTag.query });
-          this.closeOtherTagsView(path);
+          this.closeOtherTagsView(path, currentTag.query);
           break;
           break;
         case 3:
         case 3:
           this.closeAllTagsView(path);
           this.closeAllTagsView(path);
@@ -284,20 +283,22 @@ export default {
       //   this.addBrowserSetSession(this.tagNavList);
       //   this.addBrowserSetSession(this.tagNavList);
     },
     },
     // 3、关闭其它 tagsView:如果是设置了固定的(isAffix),不进行关闭
     // 3、关闭其它 tagsView:如果是设置了固定的(isAffix),不进行关闭
-    closeOtherTagsView(path) {
+    closeOtherTagsView(path, query) {
       let tagsViewList = [];
       let tagsViewList = [];
       this.tagsViewRoutesList.map((v) => {
       this.tagsViewRoutesList.map((v) => {
-        if (v.meta.isAffix && !v.meta.isHide) tagsViewList.push({ ...v });
-        if ((v.path = path)) tagsViewList.push({ ...v });
+        if ((v.meta && v.meta.isAffix) || v.path === path) tagsViewList.push({ ...v });
       });
       });
+      console.log(tagsViewList, this.tagsViewRoutesList, path);
       this.addBrowserSetSession(tagsViewList);
       this.addBrowserSetSession(tagsViewList);
+      this.$router.push({ path, query });
+
       // this.addTagsView(path);
       // this.addTagsView(path);
     },
     },
     // 4、关闭全部 tagsView:如果是设置了固定的(isAffix),不进行关闭
     // 4、关闭全部 tagsView:如果是设置了固定的(isAffix),不进行关闭
     closeAllTagsView(path) {
     closeAllTagsView(path) {
       let tagsViewList = [];
       let tagsViewList = [];
       this.tagsViewRoutesList.map((v) => {
       this.tagsViewRoutesList.map((v) => {
-        if (v.meta.isAffix && !v.meta.isHide) {
+        if (v.meta.isAffix) {
           tagsViewList.push({ ...v });
           tagsViewList.push({ ...v });
           if (tagsViewList.some((v) => v.path === path)) this.$router.push({ path, query: this.$route.query });
           if (tagsViewList.some((v) => v.path === path)) this.$router.push({ path, query: this.$route.query });
           else this.$router.push({ path: v.path, query: this.$route.query });
           else this.$router.push({ path: v.path, query: this.$route.query });
@@ -326,6 +327,9 @@ export default {
 </script>
 </script>
 
 
 <style scoped lang="scss">
 <style scoped lang="scss">
+/deep/ .el-scrollbar__bar.is-horizontal {
+  height: 0;
+}
 .layout-navbars-tagsview {
 .layout-navbars-tagsview {
   flex: 1;
   flex: 1;
   background-color: var(--prev-bg-white);
   background-color: var(--prev-bg-white);
@@ -370,9 +374,9 @@ export default {
         background: var(--prev-tag-active-color);
         background: var(--prev-tag-active-color);
         z-index: -1;
         z-index: -1;
         opacity: 0;
         opacity: 0;
-        transform: scale3d(0.7, 1, 1);
-        transition: transform 0.3s, opacity 0.3s;
-        transition-timing-function: cubic-bezier(0.2, 1, 0.3, 1);
+        // transform: scale3d(0.7, 1, 1);
+        // transition: transform 0.3s, opacity 0.3s;
+        // transition-timing-function: cubic-bezier(0.2, 1, 0.3, 1);
       }
       }
       &:hover {
       &:hover {
         color: var(--prev-color-primary-light-9);
         color: var(--prev-color-primary-light-9);
@@ -444,6 +448,7 @@ export default {
       border: none !important;
       border: none !important;
       position: relative;
       position: relative;
       border-radius: 3px !important;
       border-radius: 3px !important;
+
       .layout-icon-active {
       .layout-icon-active {
         display: none;
         display: none;
       }
       }

+ 8 - 0
template/admin/src/pages/setting/systemMenus/index.vue

@@ -45,6 +45,11 @@
       >
       >
         <vxe-table-column field="id" title="ID" tooltip min-width="70"></vxe-table-column>
         <vxe-table-column field="id" title="ID" tooltip min-width="70"></vxe-table-column>
         <vxe-table-column field="menu_name" tree-node title="按钮名称" min-width="200"></vxe-table-column>
         <vxe-table-column field="menu_name" tree-node title="按钮名称" min-width="200"></vxe-table-column>
+        <vxe-table-column field="icon" title="图标" min-width="200" align="center">
+          <template v-slot="{ row }">
+            <Icon class="icon" :type="row.icon" />
+          </template>
+        </vxe-table-column>
         <vxe-table-column field="api_url" title="接口路径" min-width="150">
         <vxe-table-column field="api_url" title="接口路径" min-width="150">
           <template v-slot="{ row }">
           <template v-slot="{ row }">
             <span>{{ row.methods ? '[' + row.methods + ']  ' + row.api_url : row.api_url }}</span>
             <span>{{ row.methods ? '[' + row.methods + ']  ' + row.api_url : row.api_url }}</span>
@@ -452,6 +457,9 @@ export default {
   > .vxe-table--header-wrapper {
   > .vxe-table--header-wrapper {
     background: #fff !important;
     background: #fff !important;
   }
   }
+  .icon {
+    font-size: 20px;
+  }
 }
 }
 
 
 .rule {
 .rule {

+ 15 - 6
template/admin/src/pages/system/codeGeneration/components/TableForm.vue

@@ -17,7 +17,11 @@
           <Input :disabled="disabledInput(index)" v-model="tableField[index].field"></Input>
           <Input :disabled="disabledInput(index)" v-model="tableField[index].field"></Input>
         </template>
         </template>
         <template slot-scope="{ row, index }" slot="field_type">
         <template slot-scope="{ row, index }" slot="field_type">
-          <Select v-model="tableField[index].field_type" @on-change="changeItemField($event, index)">
+          <Select
+            v-model="tableField[index].field_type"
+            :disabled="disabledInput(index)"
+            @on-change="changeItemField($event, index)"
+          >
             <Option v-for="item in columnTypeList" :value="item" :key="item">{{ item }}</Option>
             <Option v-for="item in columnTypeList" :value="item" :key="item">{{ item }}</Option>
           </Select>
           </Select>
         </template>
         </template>
@@ -45,7 +49,7 @@
           </Select>
           </Select>
         </template>
         </template>
         <template slot-scope="{ row, index }" slot="options">
         <template slot-scope="{ row, index }" slot="options">
-          <div class="table-options" v-if="['select', 'radio'].includes(tableField[index].from_type)">
+          <div class="table-options" v-if="['select', 'radio', 'checkbox'].includes(tableField[index].from_type)">
             <Select>
             <Select>
               <Option v-for="item in tableField[index].options" :value="item.value" :key="item.value">{{
               <Option v-for="item in tableField[index].options" :value="item.value" :key="item.value">{{
                 item.label
                 item.label
@@ -56,7 +60,7 @@
           <div v-else>--</div>
           <div v-else>--</div>
         </template>
         </template>
         <template slot-scope="{ row, index }" slot="action">
         <template slot-scope="{ row, index }" slot="action">
-          <a v-if="!foundation.isTable" @click="del(row, index)">删除</a>
+          <a v-if="!foundation.primaryKey" @click="del(row, index)">删除</a>
           <span v-else>--</span>
           <span v-else>--</span>
         </template>
         </template>
       </Table>
       </Table>
@@ -96,8 +100,7 @@ export default {
       },
       },
     },
     },
     id: {
     id: {
-      type: String,
-      default: '',
+      type: String | Number,
     },
     },
   },
   },
   data() {
   data() {
@@ -172,6 +175,7 @@ export default {
       tableField: [],
       tableField: [],
       optionsList: [],
       optionsList: [],
       index: 0,
       index: 0,
+      deleteField: [],
     };
     };
   },
   },
   created() {
   created() {
@@ -227,7 +231,12 @@ export default {
         if ((!el.field || !el.field_type) && !['addTimestamps', 'addSoftDelete'].includes(el.field_type)) {
         if ((!el.field || !el.field_type) && !['addTimestamps', 'addSoftDelete'].includes(el.field_type)) {
           return this.$Message.warning('请先完善上一条数据');
           return this.$Message.warning('请先完善上一条数据');
         }
         }
-        if (el.is_table && !el.table_name && !['addTimestamps', 'addSoftDelete'].includes(el.field_type)) {
+        if (
+          el.is_table &&
+          !el.table_name &&
+          !Number(el.primaryKey) &&
+          !['addTimestamps', 'addSoftDelete'].includes(el.field_type)
+        ) {
           return this.$Message.warning('请输入列表名');
           return this.$Message.warning('请输入列表名');
         }
         }
       }
       }

+ 2 - 3
template/admin/src/pages/system/codeGeneration/index.vue

@@ -89,7 +89,7 @@ export default {
       tableField: [],
       tableField: [],
       rowList: [],
       rowList: [],
       reqloading: false,
       reqloading: false,
-      id: "",
+      id: '',
     };
     };
   },
   },
   created() {
   created() {
@@ -102,9 +102,8 @@ export default {
   methods: {
   methods: {
     getDetail(id) {
     getDetail(id) {
       crudDet(id).then((res) => {
       crudDet(id).then((res) => {
-        console.log(res);
         let data = res.data.crudInfo.field;
         let data = res.data.crudInfo.field;
-        this.formItem.foundation.pid = data.pid;
+        this.formItem.foundation.pid = Number(data.pid);
         this.formItem.foundation.tableName = data.tableName;
         this.formItem.foundation.tableName = data.tableName;
         this.formItem.foundation.modelName = data.modelName;
         this.formItem.foundation.modelName = data.modelName;
         this.formItem.foundation.menuName = data.menuName;
         this.formItem.foundation.menuName = data.menuName;

+ 6 - 4
template/admin/src/pages/system/codeGeneration/list.vue

@@ -1,7 +1,7 @@
 <template>
 <template>
   <div>
   <div>
     <Card :bordered="false" dis-hover class="ivu-mt">
     <Card :bordered="false" dis-hover class="ivu-mt">
-      <Button type="primary" @click="groupAdd()" class="mr20">代码生成</Button>
+      <Button type="primary" @click="groupAdd()" class="mr20">添加功能</Button>
       <!-- <Button type="success" @click="buildCode()" class="mr20">重新发布</Button> -->
       <!-- <Button type="success" @click="buildCode()" class="mr20">重新发布</Button> -->
       <Table
       <Table
         :columns="columns1"
         :columns="columns1"
@@ -92,9 +92,9 @@
                 :icon="value.icon"
                 :icon="value.icon"
               >
               >
                 <div
                 <div
-                  :ref="'container_' + value.index"
+                  ref="container"
                   :id="'container_' + value.index"
                   :id="'container_' + value.index"
-                  style="height: 100%; min-height: 560px"
+                  style="height: 100%; min-height: calc(100vh - 110px)"
                 ></div>
                 ></div>
               </TabPane>
               </TabPane>
             </Tabs>
             </Tabs>
@@ -571,7 +571,6 @@ export default {
 
 
   .ivu-tabs-tabpane {
   .ivu-tabs-tabpane {
     min-height: 560px;
     min-height: 560px;
-    height: 73vh;
     margin-top: -1px;
     margin-top: -1px;
   }
   }
 }
 }
@@ -612,4 +611,7 @@ export default {
     z-index: 99;
     z-index: 99;
   }
   }
 }
 }
+.file-box {
+  height: 100%;
+}
 </style>
 </style>

+ 1 - 1
template/admin/src/pages/system/maintain/systemFile/opendir.vue

@@ -801,7 +801,7 @@ export default {
     isEditBlur(row) {
     isEditBlur(row) {
       row.is_edit = false;
       row.is_edit = false;
       let data = {
       let data = {
-        full_path: '/app',
+        full_path: row.real_path,
         mark: row.mark,
         mark: row.mark,
       };
       };
       markSave(this.fileToken, data)
       markSave(this.fileToken, data)

+ 8 - 6
template/admin/src/store/module/app.js

@@ -77,13 +77,15 @@ export default {
     },
     },
     addTag(state, { route, type = 'unshift' }) {
     addTag(state, { route, type = 'unshift' }) {
       let router = getRouteTitleHandled(route);
       let router = getRouteTitleHandled(route);
-      console.log(router, 'routerrouterrouter');
+      let i = state.tagNavList.findIndex((item) => item.path === route.path);
+
       if (!routeHasExist(state.tagNavList, router)) {
       if (!routeHasExist(state.tagNavList, router)) {
-        if (type === 'push') state.tagNavList.push(router);
-        else {
-          if (router.name === homeName) state.tagNavList.unshift(router);
-          else state.tagNavList.splice(1, 0, router);
-        }
+        if (type === 'push')
+          if (i < 1) state.tagNavList.push(router);
+          else {
+            if (router.name === homeName) state.tagNavList.unshift(router);
+            else state.tagNavList.splice(1, 0, router);
+          }
         setTagNavListInLocalstorage([...state.tagNavList]);
         setTagNavListInLocalstorage([...state.tagNavList]);
       }
       }
     },
     },

+ 1 - 0
template/admin/src/theme/variables.scss

@@ -956,6 +956,7 @@ $positions: 'top', 'right', 'bottom', 'left';
   height: 50px;
   height: 50px;
   display: flex;
   display: flex;
   align-items: center;
   align-items: center;
+  font-weight: 500;
   margin-bottom: 0 !important;
   margin-bottom: 0 !important;
   border-bottom: 1px solid var(--prev-border-color-lighter);
   border-bottom: 1px solid var(--prev-border-color-lighter);
   color: var(--prev-color-text-primary);
   color: var(--prev-color-text-primary);