From 8286515094bdfcd286661321cce664d72a15942f Mon Sep 17 00:00:00 2001 From: panliang <1163816051@qq.com> Date: Thu, 28 Jul 2022 15:12:25 +0800 Subject: [PATCH] keywords --- README.md | 193 +----------------- packages/goods/composer.json | 2 +- .../resources/lang/en/goods-category.php | 4 + .../resources/lang/zh_CN/goods-category.php | 21 ++ packages/goods/src/GoodsServiceProvider.php | 21 +- .../Admin/GoodsCategoryController.php | 63 ++++++ packages/goods/src/Http/routes.php | 4 + packages/goods/src/Models/Goods.php | 15 ++ packages/goods/src/Models/GoodsCategory.php | 71 +++++++ packages/goods/updates/CreateGoodsTable.php | 6 +- packages/goods/version.php | 14 +- .../keywords/updates/KeywordsTableSeeder.php | 56 +++++ packages/keywords/version.php | 3 +- src/Form/Field.php | 2 +- src/Show/Tools.php | 2 +- 15 files changed, 263 insertions(+), 214 deletions(-) create mode 100644 packages/goods/resources/lang/en/goods-category.php create mode 100644 packages/goods/resources/lang/zh_CN/goods-category.php create mode 100644 packages/goods/src/Http/Controllers/Admin/GoodsCategoryController.php create mode 100644 packages/goods/src/Models/Goods.php create mode 100644 packages/goods/src/Models/GoodsCategory.php create mode 100644 packages/keywords/updates/KeywordsTableSeeder.php diff --git a/README.md b/README.md index be4ea6b..9e36eb0 100755 --- a/README.md +++ b/README.md @@ -1,193 +1,20 @@ +# Dcat-Admin -
- -
-
+Fork From [jqhph/dcat-admin](https://github.com/jqhph/dcat-admin) -

- - Build Status - - - StyleCI - - - - - -

+## 改动 -

Dcat Admin是一个基于laravel-admin二次开发而成的后台系统构建工具,只需很少的代码即可快速构建出一个功能完善的高颜值后台系统。内置丰富的后台常用组件,开箱即用,让开发者告别冗杂的HTML代码,对后端开发者非常友好。

+### Show +### 详细页-列表按钮点击跳转方式 -- [官方网站](http://www.dcatadmin.com) -- [中文文档](https://learnku.com/docs/dcat-admin) -- [English documentions](http://www.dcatadmin.com/docs/en-2.x/quick-start.html) -- [Demo / 在线演示](http://103.39.211.179:8080/admin) -- [Demo源码](https://github.com/jqhph/dcat-admin-demo) -- [Demo源码 (码云)](https://gitee.com/jqhph/dcat-admin-demo) -- [扩展](#) +- `packages/dcat-admin/src/Show/Tools.php` 254行 - -![](https://cdn.learnku.com/uploads/images/202101/28/38389/YLmL7PLqH7.png!large) - - -### 功能特性 - -- [x] 简洁优雅、灵活可扩展的API -- [x] 用户管理 -- [x] RBAC权限管理,支持无限极权限节点 -- [x] 菜单管理 -- [x] 使用pjax构建无刷新页面,支持**按需加载**静态资源,可以无限扩展组件而不影响整体性能 -- [x] 松耦合的页面构建与数据操作设计,可轻松切换数据源 -- [x] 自定义页面 -- [x] 自定义主题配色 -- [x] 多主题切换功能,内置多种主题色 -- [x] 可轻松构建无菜单栏的独立页面(如可用于构建弹窗选择器等功能) -- [x] 插件功能 -- [x] 可视化代码生成器,可根据数据表一键生成增删改查页面 -- [x] 数据表格构建工具,内置丰富的表格常用功能(如组合表头、数据导出、搜索、快捷创建、批量操作等) -- [x] 树状表格功能构建工具,支持分页和点击加载 -- [x] 数据表单构建工具,内置丰富的表单类型,支持表单异步提交 -- [x] 分步表单构建工具 -- [x] 弹窗表单构建工具 -- [x] 数据详情页构建工具 -- [x] 无限层级树状页面构建工具,支持用拖拽的方式实现数据的层级、排序等操作 -- [x] 内置丰富的常用页面组件(如图表、数据统计卡片、下拉菜单、Tab卡片、提示工具等) -- [x] `Section`功能(类似`Wordpress`的`Filter`和`blade`模板的`section`标签) -- [x] 异步文件上传表单,支持分块多线程上传 -- [x] 多应用 -- [ ] 插件市场,只需在管理页面轻轻点击鼠标即可完成插件的安装、更新和卸载等操作 - - -### 环境 - - PHP >= 7.1.0 - - Laravel 5.5.0 ~ 9.* - - Fileinfo PHP Extension - -### 安装 - -> 如果安装过程中出现`composer`下载过慢或安装失败的情况,请运行命令`composer config -g repo.packagist composer https://mirrors.aliyun.com/composer/`把`composer`镜像更换为阿里云镜像。 - -首先需要安装`laravel`框架,如已安装可以跳过此步骤。如果您是第一次使用`laravel`,请务必先阅读文档 [安装 《Laravel中文文档》](https://learnku.com/docs/laravel/8.x/installation/9354) ! -```bash -composer create-project --prefer-dist laravel/laravel 项目名称 7.* -# 或 -composer create-project --prefer-dist laravel/laravel 项目名称 +```html + ``` -安装完`laravel`之后需要修改`.env`文件,设置数据库连接设置正确 - -```dotenv -DB_CONNECTION=mysql -DB_HOST=127.0.0.1 -DB_PORT=3306 -DB_DATABASE=dcat-admin -DB_USERNAME=root -DB_PASSWORD= +```html + ``` -安装`dcat-admin` - - -``` -cd {项目名称} - -composer require dcat/laravel-admin -``` - -然后运行下面的命令来发布资源: - -``` -php artisan admin:publish -``` - -在该命令会生成配置文件`config/admin.php`,可以在里面修改安装的地址、数据库连接、以及表名,建议都是用默认配置不修改。 - -然后运行下面的命令完成安装: - -> 执行这一步命令可能会报以下错误`Specified key was too long ... 767 bytes`,如果出现这个报错,请在`app/Providers/AppServiceProvider.php`文件的`boot`方法中加上代码`\Schema::defaultStringLength(191);`,然后删除掉数据库中的所有数据表,再重新运行一遍`php artisan admin:install`命令即可。 - -``` -php artisan admin:install -``` - -上述步骤操作完成之后就可以配置`web`服务了,**注意需要把`web`目录指向`public`目录**!如果用的是`nginx`,还需要在配置中加上伪静态配置 -```dotenv -location / { - try_files $uri $uri/ /index.php?$query_string; -} -``` - -启动服务后,在浏览器打开 `http://localhost/admin`,使用用户名 `admin` 和密码 `admin`登陆。 - - - -### 扩展 - -| 扩展 | 描述 | dcat-admin 版本 | -| ------------------------------------------------ | ---------------------------------------- |---------------------------------------- | -| [mosiboom/dcat-iframe-tab](https://github.com/mosiboom/dcat-iframe-tab) | IFRAME TAB标签切换 | 2.x | -| [super-eggs/dcat-distpicker](https://github.com/super-eggs/dcat-distpicker) | 省市区联动 | 2.x | -| [ueditor](https://github.com/jqhph/dcat-admin-ueditor) | 百度在线编辑器 | 1.x | -| [grid-sortable](https://github.com/jqhph/dcat-admin-grid-sortable) | 表格拖曳排序工具 | 1.x | - - -### 鸣谢 -`Dcat Admin` 基于以下组件: - -+ [Laravel](https://laravel.com/) -+ [Laravel Admin](https://www.laravel-admin.org/) -+ [AdminLTE3](https://github.com/ColorlibHQ/AdminLTE) -+ [bootstrap4](https://getbootstrap.com/) -+ [jQuery3](https://jquery.com/) -+ [Eonasdan Datetimepicker](https://github.com/Eonasdan/bootstrap-datetimepicker/) -+ [font-awesome](http://fontawesome.io) -+ [jquery-form](https://github.com/jquery-form/form) -+ [moment](http://momentjs.com/) -+ [webuploader](http://fex.baidu.com/webuploader/) -+ [jquery-pjax](https://github.com/defunkt/jquery-pjax) -+ [Nestable](http://dbushell.github.io/Nestable/) -+ [toastr](http://codeseven.github.io/toastr/) -+ [editor-md](https://github.com/pandao/editor.md) -+ [fontawesome-iconpicker](https://github.com/itsjavi/fontawesome-iconpicker) -+ [layer弹出层](http://layer.layui.com/) -+ [char.js](https://www.chartjs.org) -+ [nprogress](https://ricostacruz.com/nprogress/) -+ [bootstrap-validator](https://github.com/1000hz/bootstrap-validator) -+ [Google map](https://www.google.com/maps) -+ [Tencent map](http://lbs.qq.com/) - -### Contributors - -#### Code Contributors - -This project exists thanks to all the people who contribute. [[Contribute](CONTRIBUTING.md)]. - - -### Financial Contributors - -Become a financial contributor and help us sustain our community. [[Contribute](https://opencollective.com/dcat-admin/contribute)] - -#### Individuals - - - -#### Organizations - -Support this project with your organization. Your logo will show up here with a link to your website. [[Contribute](https://opencollective.com/dcat-admin/contribute)] - - - - - - - - - - - - -### License ------------- -`dcat-admin` is licensed under [The MIT License (MIT)](LICENSE). diff --git a/packages/goods/composer.json b/packages/goods/composer.json index ed52568..3253755 100644 --- a/packages/goods/composer.json +++ b/packages/goods/composer.json @@ -1,5 +1,5 @@ { - "name": "peidikeji/goods", + "name": "peidikeji/dcat-admin-extension-goods", "alias": "goods", "description": "基础商品管理", "type": "library", diff --git a/packages/goods/resources/lang/en/goods-category.php b/packages/goods/resources/lang/en/goods-category.php new file mode 100644 index 0000000..b625128 --- /dev/null +++ b/packages/goods/resources/lang/en/goods-category.php @@ -0,0 +1,4 @@ + [ + 'GoodsCategory' => '商品分类', + 'goods' => '商品管理', + 'category' => '分类管理', + 'root' => '无', + ], + 'fields' => [ + 'name' => '分类名称', + 'image' => '图片', + 'description' => '描述', + 'sort' => '排序(正序)', + 'parent_id' => '上级', + 'is_enable' => '开启', + 'parent' => [ + 'name' => '上级' + ] + ] +]; diff --git a/packages/goods/src/GoodsServiceProvider.php b/packages/goods/src/GoodsServiceProvider.php index 1902d7c..8e6b5a1 100644 --- a/packages/goods/src/GoodsServiceProvider.php +++ b/packages/goods/src/GoodsServiceProvider.php @@ -7,21 +7,8 @@ use Dcat\Admin\Admin; class GoodsServiceProvider extends ServiceProvider { - public function register() - { - // - } - - public function init() - { - parent::init(); - - // - - } - - // public function settingForm() - // { - // return new Setting($this); - // } + protected $menu = [ + ['title' => '商品管理', 'uri' => '', 'icon' => ''], + ['title' => '商品分类', 'uri' => 'goods/category', 'icon' => '', 'parent' => '商品管理'], + ]; } diff --git a/packages/goods/src/Http/Controllers/Admin/GoodsCategoryController.php b/packages/goods/src/Http/Controllers/Admin/GoodsCategoryController.php new file mode 100644 index 0000000..6223aef --- /dev/null +++ b/packages/goods/src/Http/Controllers/Admin/GoodsCategoryController.php @@ -0,0 +1,63 @@ +disableRowSelector(); + + $grid->column('name')->tree(true, false); + $grid->column('image')->image('', 100); + $grid->column('sort')->editable(['mask' => '{alias:\'numeric\',min:0,max:999}']); + $grid->column('is_enable')->switch(); + + return $grid; + } + + protected function form() + { + $form = Form::make(GoodsCategory::with(['parent'])); + + $form->select('parent_id')->help('不选默认为顶级')->options(GoodsCategory::selectOptions())->default(0); + + $form->text('name')->required(); + $form->image('image') + ->uniqueName() + ->move('article-category') + ->autoUpload(); + $form->number('sort') + ->min(0) + ->default(1) + ->help('数值越小, 越靠前'); + $form->switch('is_enable')->default(1); + $form->text('description'); + + return $form; + } + + protected function detail($id) + { + $info = GoodsCategory::with(['parent'])->findOrFail($id); + $show = Show::make($info); + + $show->field('name'); + $show->field('parent.name'); + $show->field('image')->image('', 100); + $show->field('description'); + $show->field('sort'); + + return $show; + } +} diff --git a/packages/goods/src/Http/routes.php b/packages/goods/src/Http/routes.php index 7c4d255..6e9220b 100644 --- a/packages/goods/src/Http/routes.php +++ b/packages/goods/src/Http/routes.php @@ -1,3 +1,7 @@ parent_id) { + // 将层级设为 1 + $category->level = 1; + // 将 path 设为 - + $category->path = '-'; + } else { + // 将层级设为父类目的层级 + 1 + $category->level = $category->parent->level + 1; + // 将 path 值设为父类目的 path 追加父类目 ID 以及最后跟上一个 - 分隔符 + $category->path = $category->parent->path.$category->parent_id.'-'; + } + }); + + static::deleting(function ($category) { + // 所有下级分类 + $ids = GoodsCategory::where('path', 'like', '%-'.$category->id.'-%')->pluck('id'); + // 检查下级分类是否包含商品 + if (Goods::whereIn('category_id', array_merge($ids, [$category->id]))->exists()) { + // todo 阻止删除该分类 + } + // 删除所有下级分类 + GoodsCategory::where('path', 'like', '%-'.$category->id.'-%')->delete(); + }); + } + + public function parent() + { + return $this->belongsTo(self::class, 'parent_id'); + } + + public function children() + { + return $this->hasMany(self::class, 'parent_id'); + } + + public function goods() + { + return $this->hasMany(Goods::class, 'category_id'); + } + + public function scopeOrder($q) + { + return $q->orderBy('sort'); + } +} diff --git a/packages/goods/updates/CreateGoodsTable.php b/packages/goods/updates/CreateGoodsTable.php index 0c83f4d..020696a 100644 --- a/packages/goods/updates/CreateGoodsTable.php +++ b/packages/goods/updates/CreateGoodsTable.php @@ -13,6 +13,7 @@ class CreateGoodsTable extends Migration */ public function up() { + $this->down(); Schema::create('goods_category', function (Blueprint $table) { $table->id(); $table->string('name')->comment('分类名称'); @@ -21,6 +22,7 @@ class CreateGoodsTable extends Migration $table->unsignedBigInteger('parent_id')->default(0)->comment('父级ID'); $table->unsignedInteger('level')->default(1)->comment('层级'); $table->unsignedInteger('sort')->default(1)->comment('排序 asc'); + $table->unsignedTinyInteger('is_enable')->default(1)->comment('状态'); $table->string('path')->default('-')->comment('所有的父级ID'); $table->comment('商品分类'); @@ -37,13 +39,11 @@ class CreateGoodsTable extends Migration $table->text('content')->nullable()->comment('详细'); $table->unsignedInteger('on_sale')->default(0)->comment('是否上架'); $table->unsignedInteger('stock')->default(0)->comment('库存'); - $table->json('weight')->nullable()->comment('重量 {weight: 0, unit: "g"}'); - $table->unsignedInteger('sold_count')->default(0)->comment('实际销量'); + $table->unsignedInteger('sold_count')->default(0)->comment('销量'); $table->decimal('price', 12, 2)->comment('售价'); $table->json('attr')->nullable()->comment('属性'); $table->json('spec')->nullable()->comment('规格'); $table->json('part')->nullable()->comment('配件'); - $table->string('category_path'); $table->timestamps(); $table->softDeletes(); diff --git a/packages/goods/version.php b/packages/goods/version.php index 1a623b7..bfc02ed 100644 --- a/packages/goods/version.php +++ b/packages/goods/version.php @@ -1,7 +1,7 @@ - [ - 'Initialize extension.', - ], -]; + [ + 'CreateGoodsTable.php', + ], +]; diff --git a/packages/keywords/updates/KeywordsTableSeeder.php b/packages/keywords/updates/KeywordsTableSeeder.php new file mode 100644 index 0000000..2a786ce --- /dev/null +++ b/packages/keywords/updates/KeywordsTableSeeder.php @@ -0,0 +1,56 @@ + ['name' => '字典管理', 'curd' => true] + ]; + // Permission::where('slug', 'like', 'dcat.admin.keywords%')->delete(); + $this->createPermissionData($permissions); + } + + protected function createPermissionData(array $permissions, string $key = '', int $pId = 0) + { + $curdArr = [ + 'index' => '列表', + 'create' => '新增', + 'edit' => '修改', + 'destroy' => '删除', + 'show' => '详情', + ]; + foreach ($permissions as $slug => $permission) { + //是否已存在该权限 + $slugKey = 'dcat.admin.' . ($key ? $key . '.' . $slug : $slug); + + $pper = Permission::updateOrCreate(['slug' => $slugKey], ['name' => is_string($permission) ? $permission : $permission['name'], 'parent_id' => $pId]); + + if (!is_string($permission)) { + if (!isset($permission['children'])) { + $permission['children'] = []; + } + //判断是否默认插入curd权限 + if (isset($permission['curd']) && $permission['curd']) { + if (is_array($permission['curd'])) { + $permission['curd'] = array_reverse($permission['curd']); + foreach ($permission['curd'] as $value) { + $permission['children'] = array_merge([$value => $curdArr[$value]], $permission['children']); + } + } else { + $permission['children'] = array_merge($curdArr, $permission['children']); + } + } + + if (count($permission['children']) > 0) { + $_key = $permission['curd'] !== false ? ($key ? $key . '.' . $slug : $slug) : $key; + $this->createPermissionData($permission['children'], $_key ?? $slug, $pper->id); + } + } + } + } +} diff --git a/packages/keywords/version.php b/packages/keywords/version.php index b50c47c..8a8e79a 100644 --- a/packages/keywords/version.php +++ b/packages/keywords/version.php @@ -2,6 +2,7 @@ return [ '1.0.0' => [ - 'CreateKeywordsTable.php' + 'CreateKeywordsTable.php', + 'KeywordsTableSeeder.php' ], ]; diff --git a/src/Form/Field.php b/src/Form/Field.php index c6f9a42..9574cef 100755 --- a/src/Form/Field.php +++ b/src/Form/Field.php @@ -134,7 +134,7 @@ class Field implements Renderable * * @var array */ - protected $attributes = []; + protected $attributes = ['autocomplete' => 'off']; /** * Parent form. diff --git a/src/Show/Tools.php b/src/Show/Tools.php index bcddd89..ebd99c1 100755 --- a/src/Show/Tools.php +++ b/src/Show/Tools.php @@ -251,7 +251,7 @@ class Tools implements Renderable return << - + {$list}