seeders
parent
7e0922a567
commit
77a0d0f501
31
README.md
31
README.md
|
|
@ -4,14 +4,39 @@
|
|||
|
||||
## 安装
|
||||
|
||||
- `composer config repositories.peidikeji/dcat-admin-user git git@gitee.com:paddy_technology/dcat-admin-user.git`
|
||||
- `composer require peidikeji/dcat-admin-user:dev-develop`
|
||||
- `php artisan vendor:publish --tag=dcat-admin-user-migrations`
|
||||
- 进入项目目录
|
||||
- `mkdir packages && cd packages`
|
||||
- `git clone https://gitea.peidikeji.cn/pdkj/dcat-admin-user.git`
|
||||
- `composer config repositories.peidikeji/dcat-admin-user path ./packages/dcat-admin-user`
|
||||
- `composer require peidikeji/dcat-admin-user`
|
||||
- `php artisan migrate`
|
||||
|
||||
## 事件
|
||||
|
||||
- 用户注册成功: `Peidikeji\User\Events\UserRegister`
|
||||
|
||||
## 测试数据
|
||||
|
||||
- 复制文件: `database/factories/UserFactory`, `database/seeders/UserSeeder`
|
||||
|
||||
## 后台权限
|
||||
|
||||
```php
|
||||
$permissions = [
|
||||
'users' => ['name' => '用户管理', 'curd' => true],
|
||||
];
|
||||
```
|
||||
|
||||
## 后台菜单
|
||||
|
||||
```php
|
||||
$menus = [
|
||||
['title' => '用户模块', 'icon' => 'feather icon-user', 'uri' => '/users', 'permission' => 'users', 'children' => [
|
||||
['title' => '用户管理', 'icon' => '', 'uri' => '/users', 'permission' => 'users']
|
||||
]],
|
||||
];
|
||||
```
|
||||
|
||||
## 数据表
|
||||
|
||||
### 用户表: users
|
||||
|
|
|
|||
|
|
@ -4,7 +4,7 @@
|
|||
"description": "用户管理",
|
||||
"type": "library",
|
||||
"keywords": ["dcat-admin", "extension", "user"],
|
||||
"homepage": "https://gitee.com/paddy_technology/dcat-admin-user",
|
||||
"homepage": "https://gitea.peidikeji.cn/pdkj/dcat-admin-user",
|
||||
"license": "MIT",
|
||||
"authors": [
|
||||
{
|
||||
|
|
@ -13,7 +13,7 @@
|
|||
}
|
||||
],
|
||||
"require": {
|
||||
"php": ">=7.1.0",
|
||||
"php": ">=8.1.0",
|
||||
"peidikeji/dcat-admin": "*",
|
||||
"overtrue/laravel-wechat": "^7.0",
|
||||
"laravel/framework": "^9.0"
|
||||
|
|
|
|||
|
|
@ -0,0 +1,54 @@
|
|||
<?php
|
||||
|
||||
namespace Database\Factories;
|
||||
|
||||
use Illuminate\Database\Eloquent\Factories\Factory;
|
||||
use Illuminate\Support\Str;
|
||||
use Peidikeji\User\Models\User;
|
||||
|
||||
class UserFactory extends Factory
|
||||
{
|
||||
protected $model = User::class;
|
||||
|
||||
/**
|
||||
* Define the model's default state.
|
||||
*
|
||||
* @return array<string, mixed>
|
||||
*/
|
||||
public function definition()
|
||||
{
|
||||
$faker = $this->faker;
|
||||
|
||||
do {
|
||||
$phone = $faker->phoneNumber();
|
||||
} while (User::where('phone', $phone)->exists());
|
||||
|
||||
do {
|
||||
$username = $faker->userName();
|
||||
} while (User::where('username', $username)->exists());
|
||||
|
||||
$inviter_id = null;
|
||||
$inviter_path = '-';
|
||||
$inviter = User::inRandomOrder()->first();
|
||||
if ($inviter) {
|
||||
$inviter_id = $inviter->id;
|
||||
$inviter_path = $inviter->inviter_path.$inviter_id.'-';
|
||||
}
|
||||
|
||||
do {
|
||||
$invite_code = strtoupper(Str::random(6));
|
||||
} while (User::where('invite_code', $invite_code)->exists());
|
||||
|
||||
return [
|
||||
'username' => $username,
|
||||
// 123456
|
||||
'password' => '$2y$10$QAGGjfTDjmgDFrX8LkFZ4e0A4MG.doRc8xoq1Cixf6IbHq7RPRqtq',
|
||||
'name' => $faker->name(),
|
||||
'avatar' => 'https://via.placeholder.com/64x64.png',
|
||||
'invite_code' => $invite_code,
|
||||
'inviter_id' => $inviter_id,
|
||||
'inviter_path' => $inviter_path,
|
||||
'phone' => $phone,
|
||||
];
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,25 @@
|
|||
<?php
|
||||
|
||||
namespace Database\Seeders;
|
||||
|
||||
use Database\Factories\UserFactory;
|
||||
use Illuminate\Database\Seeder;
|
||||
use Laravel\Sanctum\PersonalAccessToken;
|
||||
use Peidikeji\User\Models\User;
|
||||
|
||||
class UserSeeder extends Seeder
|
||||
{
|
||||
/**
|
||||
* Run the database seeds.
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function run()
|
||||
{
|
||||
User::truncate();
|
||||
PersonalAccessToken::where('tokenable_type', User::class)->delete();
|
||||
for ($i = 0; $i < 10; $i++) {
|
||||
(new UserFactory())->count(10)->create();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -2,8 +2,6 @@
|
|||
|
||||
namespace Peidikeji\User\Http\Admin;
|
||||
|
||||
use App\Admin\Renderable\BalanceLogTable;
|
||||
use App\Models\BalanceLog;
|
||||
use Dcat\Admin\Admin;
|
||||
use Dcat\Admin\Form;
|
||||
use Dcat\Admin\Grid;
|
||||
|
|
@ -16,14 +14,10 @@ use Dcat\Admin\Widgets\Card;
|
|||
use Dcat\Admin\Widgets\Tab;
|
||||
use Dcat\Admin\Widgets\Table;
|
||||
use Illuminate\Http\Request;
|
||||
use Illuminate\Support\Facades\DB;
|
||||
use Illuminate\Validation\Rule;
|
||||
use Peidikeji\Merchant\Models\Merchant;
|
||||
use Peidikeji\Order\Models\Order;
|
||||
use Peidikeji\User\Models\User;
|
||||
use Peidikeji\User\Models\UserSocialite;
|
||||
use Illuminate\Support\Str;
|
||||
use App\Admin\Actions\Grid\UserBalanceChange;
|
||||
|
||||
class UserController extends AdminController
|
||||
{
|
||||
|
|
@ -64,8 +58,7 @@ class UserController extends AdminController
|
|||
return ($this->avatar ? '<img src="'.$this->avatar.'" width="60" class="img-thumbnail" />' : '') . $this->name;
|
||||
});
|
||||
$grid->column('phone');
|
||||
$grid->column('balance')->modal(__('dcat-admin-user::user.fields.balance') . '变更记录', fn() => BalanceLogTable::make(['type' => BalanceLog::TYPE_BALANCE, 'subject_id' => $this->id, 'subject_type' => 'user']));
|
||||
$grid->column('profit')->modal(__('dcat-admin-user::user.fields.profit') . '变更记录', fn() => BalanceLogTable::make(['type' => BalanceLog::TYPE_PROFIT, 'subject_id' => $this->id, 'subject_type' => 'user']));
|
||||
$grid->column('balance');
|
||||
$grid->column('inviter.phone');
|
||||
$grid->column('created_at');
|
||||
|
||||
|
|
@ -74,12 +67,6 @@ class UserController extends AdminController
|
|||
$grid->showViewButton($user->can('dcat.admin.users.show'));
|
||||
$grid->showEditButton($user->can('dcat.admin.users.edit'));
|
||||
$grid->showDeleteButton($user->can('dcat.admin.users.destroy'));
|
||||
$grid->actions(function (Grid\Displayers\Actions $actions) use ($user) {
|
||||
//余额变动
|
||||
if($user->can('dcat.admin.users.change_balance')){
|
||||
$actions->append(new UserBalanceChange());
|
||||
}
|
||||
});
|
||||
|
||||
$grid->filter(function (Filter $filter) {
|
||||
$filter->panel();
|
||||
|
|
@ -118,12 +105,6 @@ class UserController extends AdminController
|
|||
$form->deleting(function (Form $form) {
|
||||
$data = $form->model()->toArray();
|
||||
$ids = array_column($data, 'id');
|
||||
if (Merchant::whereIn('user_id', $ids)->exists()) {
|
||||
return $form->response()->error('已经关联店铺, 无法删除');
|
||||
}
|
||||
if (Order::whereIn('user_id', $ids)->exists()) {
|
||||
return $form->response()->error('已经关联订单, 请先删除订单');
|
||||
}
|
||||
// 删除用户的登录信息
|
||||
UserSocialite::whereIn('user_id', $ids)->delete();
|
||||
foreach($ids as $id) {
|
||||
|
|
|
|||
|
|
@ -2,6 +2,8 @@
|
|||
|
||||
namespace Peidikeji\User;
|
||||
|
||||
use Dcat\Admin\Admin;
|
||||
use Dcat\Admin\Layout\Menu;
|
||||
use Illuminate\Support\ServiceProvider;
|
||||
|
||||
class UserServiceProvider extends ServiceProvider
|
||||
|
|
@ -16,12 +18,20 @@ class UserServiceProvider extends ServiceProvider
|
|||
$this->loadRoutesFrom(__DIR__.'/../routes/admin.php');
|
||||
$this->loadRoutesFrom(__DIR__.'/../routes/api.php');
|
||||
|
||||
// $this->loadMigrationsFrom(__DIR__.'/../database/');
|
||||
$this->loadMigrationsFrom(__DIR__.'/../database/migrations');
|
||||
|
||||
$this->publishes([
|
||||
__DIR__.'/../database/' => database_path('migrations')
|
||||
], 'dcat-admin-user-migrations');
|
||||
// $this->publishes([
|
||||
// __DIR__.'/../database/migrations' => database_path('migrations')
|
||||
// ], 'dcat-admin-user-migrations');
|
||||
|
||||
$this->loadTranslationsFrom(__DIR__.'/../lang', 'dcat-admin-user');
|
||||
|
||||
// 添加默认菜单
|
||||
Admin::menu(function (Menu $menu) {
|
||||
$menu->add([
|
||||
['id' => 1, 'parent_id' => 0, 'title' => '用户模块', 'icon' => 'feather icon-user', 'uri' => ''],
|
||||
['id' => 2, 'parent_id' => 1, 'title' => '用户管理', 'icon' => '', 'uri' => '/users'],
|
||||
]);
|
||||
});
|
||||
}
|
||||
}
|
||||
|
|
|
|||
Loading…
Reference in New Issue