调整后台发货和动态记录表
This commit is contained in:
@@ -0,0 +1,35 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
use Illuminate\Support\Facades\Schema;
|
||||||
|
use Illuminate\Database\Schema\Blueprint;
|
||||||
|
use Illuminate\Database\Migrations\Migration;
|
||||||
|
|
||||||
|
class AddCostToMallGoodsSkusTable extends Migration
|
||||||
|
{
|
||||||
|
/**
|
||||||
|
* Run the migrations.
|
||||||
|
*
|
||||||
|
* @return void
|
||||||
|
*/
|
||||||
|
public function up()
|
||||||
|
{
|
||||||
|
Schema::table('mall_goods_skus', function (Blueprint $table) {
|
||||||
|
$table->decimal('sku_cost', 20, 2)
|
||||||
|
->comment('商品成本价')
|
||||||
|
->after('price')
|
||||||
|
->default(0);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Reverse the migrations.
|
||||||
|
*
|
||||||
|
* @return void
|
||||||
|
*/
|
||||||
|
public function down()
|
||||||
|
{
|
||||||
|
Schema::table('mall_goods_skus', function (Blueprint $table) {
|
||||||
|
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
||||||
26
modules/Mall/Http/Controllers/Admin/Action/Goods/Down.php
Normal file
26
modules/Mall/Http/Controllers/Admin/Action/Goods/Down.php
Normal file
@@ -0,0 +1,26 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
namespace Modules\Mall\Http\Controllers\Admin\Action\Goods;
|
||||||
|
|
||||||
|
use Encore\Admin\Actions\RowAction;
|
||||||
|
use Illuminate\Database\Eloquent\Model;
|
||||||
|
|
||||||
|
class Down extends RowAction
|
||||||
|
{
|
||||||
|
public $name = '下架';
|
||||||
|
|
||||||
|
public function handle(Model $model)
|
||||||
|
{
|
||||||
|
if ($model->down()) {
|
||||||
|
return $this->response()->success('下架成功')->refresh();
|
||||||
|
} else {
|
||||||
|
return $this->response()->error('下架失败')->refresh();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public function dialog()
|
||||||
|
{
|
||||||
|
$this->confirm('确定下架吗');
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
@@ -0,0 +1,15 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
namespace Modules\Mall\Http\Controllers\Admin\Action\Goods;
|
||||||
|
|
||||||
|
use Encore\Admin\Actions\RowAction;
|
||||||
|
|
||||||
|
class SkuAction extends RowAction
|
||||||
|
{
|
||||||
|
public $name = '编辑价格条目';
|
||||||
|
|
||||||
|
public function href()
|
||||||
|
{
|
||||||
|
return admin_url('mall/goods/'.$this->getKey().'/multiple');
|
||||||
|
}
|
||||||
|
}
|
||||||
25
modules/Mall/Http/Controllers/Admin/Action/Goods/Up.php
Normal file
25
modules/Mall/Http/Controllers/Admin/Action/Goods/Up.php
Normal file
@@ -0,0 +1,25 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
namespace Modules\Mall\Http\Controllers\Admin\Action\Goods;
|
||||||
|
|
||||||
|
use Encore\Admin\Actions\RowAction;
|
||||||
|
use Illuminate\Database\Eloquent\Model;
|
||||||
|
|
||||||
|
class Up extends RowAction
|
||||||
|
{
|
||||||
|
public $name = '上架';
|
||||||
|
|
||||||
|
public function handle(Model $model)
|
||||||
|
{
|
||||||
|
if ($model->up()) {
|
||||||
|
return $this->response()->success('上架成功')->refresh();
|
||||||
|
} else {
|
||||||
|
return $this->response()->error('上架失败')->refresh();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public function dialog()
|
||||||
|
{
|
||||||
|
$this->confirm('确定上架吗');
|
||||||
|
}
|
||||||
|
}
|
||||||
193
modules/Mall/Http/Controllers/Admin/SkuMultipleController.php
Normal file
193
modules/Mall/Http/Controllers/Admin/SkuMultipleController.php
Normal file
@@ -0,0 +1,193 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
namespace Modules\Mall\Http\Controllers\Admin;
|
||||||
|
|
||||||
|
use Encore\Admin\Form;
|
||||||
|
use Encore\Admin\Layout\Content;
|
||||||
|
use Illuminate\Http\Request;
|
||||||
|
use Illuminate\Routing\Controller;
|
||||||
|
use Illuminate\Support\MessageBag;
|
||||||
|
use Modules\Mall\Models\Goods;
|
||||||
|
use Modules\Mall\Models\GoodsSku;
|
||||||
|
|
||||||
|
class SkuMultipleController extends Controller
|
||||||
|
{
|
||||||
|
public function index(Content $content, Goods $goods): Content
|
||||||
|
{
|
||||||
|
return $content
|
||||||
|
->header($goods->name)
|
||||||
|
->description('价格条目')
|
||||||
|
->body($this->form($goods));
|
||||||
|
}
|
||||||
|
|
||||||
|
protected function form($goods)
|
||||||
|
{
|
||||||
|
$form = new Form(new GoodsSku());
|
||||||
|
$groups = $this->attrGroup($goods->specs);
|
||||||
|
if (! empty($groups)) {
|
||||||
|
foreach ($groups as $key => $group) {
|
||||||
|
if ($goods->skus()->count() > 0) {
|
||||||
|
$sku = $goods->skus()->where('unit', $group['id'])->first();
|
||||||
|
}
|
||||||
|
$form->text('规格'.($key + 1))->disable()->value($group['value']);
|
||||||
|
$form->hidden("goods[$key][unit]")->value($group['id']);
|
||||||
|
$form->hidden("goods[$key][sku_cost]")->value(0);
|
||||||
|
// $form->currency("goods[$key][sku_cost]", '商品成本价')
|
||||||
|
// ->default(0)
|
||||||
|
// ->value($sku->sku_cost ?? 0)
|
||||||
|
// ->required();
|
||||||
|
$form->currency("goods[$key][price]", '销售价格')
|
||||||
|
->default(0)
|
||||||
|
->value($sku->price ?? 0)
|
||||||
|
->required();
|
||||||
|
$form->image("goods[$key][cover]", '封面图片')
|
||||||
|
->move('images/'.date('Y/m/d'))
|
||||||
|
->value($sku->cover ?? '')
|
||||||
|
->uniqueName()
|
||||||
|
->removable()
|
||||||
|
->retainable();
|
||||||
|
// $form->currency("goods[$key][score]", '共力值')
|
||||||
|
// ->default(0)
|
||||||
|
// ->value($sku->score ?? 0)
|
||||||
|
// ->required();
|
||||||
|
$form->hidden("goods[$key][assets]")->value($sku->assets ?? 0);
|
||||||
|
$form->number("goods[$key][stock]", '商品库存')
|
||||||
|
->default(0)
|
||||||
|
->value($sku->stock ?? 0)
|
||||||
|
->min(1)
|
||||||
|
->required();
|
||||||
|
$form->text("goods[$key][weight]", '商品重量')
|
||||||
|
->default(0)
|
||||||
|
->setWidth(2)
|
||||||
|
->value($sku->weight ?? 0)
|
||||||
|
->required();
|
||||||
|
$form->setAction(admin_url('mall/goods/'.$goods->id.'/multiple'));
|
||||||
|
$form->divider();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return $form;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function store(Request $request, Goods $goods)
|
||||||
|
{
|
||||||
|
$data = [];
|
||||||
|
foreach ($request->goods as $key => $value) {
|
||||||
|
// if ($value['sku_cost'] <= 0) {
|
||||||
|
// $error = new MessageBag([
|
||||||
|
// 'title' => '错误提示',
|
||||||
|
// 'message' => '规格'.($key + 1).'商品成本价格式不正确',
|
||||||
|
// ]);
|
||||||
|
// return back()->with(compact('error'));
|
||||||
|
// }
|
||||||
|
if ($value['price'] <= 0) {
|
||||||
|
$error = new MessageBag([
|
||||||
|
'title' => '错误提示',
|
||||||
|
'message' => '规格'.($key + 1).'销售价格格式不正确',
|
||||||
|
]);
|
||||||
|
return back()->with(compact('error'));
|
||||||
|
}
|
||||||
|
if ($value['stock'] <= 0) {
|
||||||
|
$error = new MessageBag([
|
||||||
|
'title' => '错误提示',
|
||||||
|
'message' => '规格'.($key + 1).'库存必须大于0个',
|
||||||
|
]);
|
||||||
|
return back()->with(compact('error'));
|
||||||
|
}
|
||||||
|
$verify = GoodsSku::verifyPrice($value['sku_cost'], $value['price']);
|
||||||
|
if ($verify > 0) {
|
||||||
|
$error = new MessageBag([
|
||||||
|
'title' => '错误提示',
|
||||||
|
'message' => '规格'.($key + 1).'销售价格过低,建议销售价最低为'.$verify,
|
||||||
|
]);
|
||||||
|
return back()->with(compact('error'));
|
||||||
|
}
|
||||||
|
$cover = $value['cover'] ?? '';
|
||||||
|
if ($cover) {
|
||||||
|
$file = $cover;
|
||||||
|
$value['cover'] = $file->store('images/'.date('Y/m/d'));
|
||||||
|
}
|
||||||
|
$data[$value['unit']] = $value;
|
||||||
|
}
|
||||||
|
if ($goods->skus()->count() > 0) {
|
||||||
|
foreach ($data as $key => $val) {
|
||||||
|
$sku = $goods->skus()->where('unit', $key)->first();
|
||||||
|
if ($sku) {
|
||||||
|
$sku->update($val);
|
||||||
|
unset($data[$key]);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (count($data) > 0) {
|
||||||
|
$goods->skus()->createMany($data);
|
||||||
|
}
|
||||||
|
return redirect(admin_url('mall/goods'));
|
||||||
|
} else {
|
||||||
|
$result = $goods->skus()->createMany($data);
|
||||||
|
if ($result) {
|
||||||
|
return redirect(admin_url('mall/goods'));
|
||||||
|
} else {
|
||||||
|
$error = new MessageBag([
|
||||||
|
'title' => '错误提示',
|
||||||
|
'message' => '操作失败',
|
||||||
|
]);
|
||||||
|
return back()->with(compact('error'));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private function attrGroup($specs): array
|
||||||
|
{
|
||||||
|
if (empty($specs)) {
|
||||||
|
return [];
|
||||||
|
}
|
||||||
|
$data = [];
|
||||||
|
foreach ($specs as $key => $spec) {
|
||||||
|
foreach ($spec->values as $k => $value) {
|
||||||
|
$data[$key][$k] = [
|
||||||
|
'id' => $value->id,
|
||||||
|
'name' => $spec->name,
|
||||||
|
'value' => $value->value,
|
||||||
|
];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
$returnData = [];
|
||||||
|
if (count($data) > 1) {
|
||||||
|
for ($i = 0; $i < count($data) - 1; $i++) {
|
||||||
|
if ($i == 0) {
|
||||||
|
foreach ($data[$i] as $value) {
|
||||||
|
$returnData[] = [
|
||||||
|
'id' => $value['id'],
|
||||||
|
'value' => $value['name'].':'.$value['value'],
|
||||||
|
];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
$tempArray = [];
|
||||||
|
foreach ($returnData as $value) {
|
||||||
|
foreach ($data[$i + 1] as $val) {
|
||||||
|
$tempArray[] = [
|
||||||
|
'id' => $value['id'].'|'.$val['id'],
|
||||||
|
'value' => $value['value'].'|'.$val['name'].':'.$val['value'],
|
||||||
|
];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
$returnData = $tempArray;
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
foreach ($data[0] as $value) {
|
||||||
|
$returnData[] = [
|
||||||
|
'id' => $value['id'],
|
||||||
|
'value' => $value['name'].':'.$value['value'],
|
||||||
|
];
|
||||||
|
}
|
||||||
|
$tempArray = [];
|
||||||
|
foreach ($returnData as $value) {
|
||||||
|
$tempArray[] = [
|
||||||
|
'id' => $value['id'],
|
||||||
|
'value' => $value['value'],
|
||||||
|
];
|
||||||
|
}
|
||||||
|
$returnData = $tempArray;
|
||||||
|
}
|
||||||
|
return $returnData;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
@@ -3,10 +3,7 @@
|
|||||||
namespace Modules\Mall\Traits;
|
namespace Modules\Mall\Traits;
|
||||||
|
|
||||||
use Illuminate\Database\Eloquent\Relations\HasMany;
|
use Illuminate\Database\Eloquent\Relations\HasMany;
|
||||||
use Modules\Gout\Models\GoutCase;
|
|
||||||
use Modules\Mall\Models\GoodsSku;
|
|
||||||
use Modules\Mall\Models\Order;
|
use Modules\Mall\Models\Order;
|
||||||
use Modules\Mall\Models\Order as OrderModel;
|
|
||||||
|
|
||||||
trait HasOrders
|
trait HasOrders
|
||||||
{
|
{
|
||||||
@@ -32,7 +29,7 @@ trait HasOrders
|
|||||||
*/
|
*/
|
||||||
public function canPick(): bool
|
public function canPick(): bool
|
||||||
{
|
{
|
||||||
return $this->case && $this->case->status == GoutCase::STATUS_PASS &&
|
return $this->case &&
|
||||||
$this->identities()->where('order', '>', 1)->count() > 0 &&
|
$this->identities()->where('order', '>', 1)->count() > 0 &&
|
||||||
$this->userStock->stock > $this->userStock->hold;
|
$this->userStock->stock > $this->userStock->hold;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -0,0 +1,35 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
use Illuminate\Support\Facades\Schema;
|
||||||
|
use Illuminate\Database\Schema\Blueprint;
|
||||||
|
use Illuminate\Database\Migrations\Migration;
|
||||||
|
|
||||||
|
class CreateUserSignTextsTable extends Migration
|
||||||
|
{
|
||||||
|
/**
|
||||||
|
* Run the migrations.
|
||||||
|
*
|
||||||
|
* @return void
|
||||||
|
*/
|
||||||
|
public function up()
|
||||||
|
{
|
||||||
|
Schema::create('user_sign_texts', function (Blueprint $table) {
|
||||||
|
$table->id();
|
||||||
|
$table->text('title');
|
||||||
|
$table->text('description')->nullable();
|
||||||
|
$table->text('sub_description')->nullable();
|
||||||
|
$table->boolean('status')->default(1);
|
||||||
|
$table->timestamps();
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Reverse the migrations.
|
||||||
|
*
|
||||||
|
* @return void
|
||||||
|
*/
|
||||||
|
public function down()
|
||||||
|
{
|
||||||
|
Schema::dropIfExists('user_sign_texts');
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,35 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
use Illuminate\Support\Facades\Schema;
|
||||||
|
use Illuminate\Database\Schema\Blueprint;
|
||||||
|
use Illuminate\Database\Migrations\Migration;
|
||||||
|
|
||||||
|
class CreateUserSignBannersTable extends Migration
|
||||||
|
{
|
||||||
|
/**
|
||||||
|
* Run the migrations.
|
||||||
|
*
|
||||||
|
* @return void
|
||||||
|
*/
|
||||||
|
public function up()
|
||||||
|
{
|
||||||
|
Schema::create('user_sign_banners', function (Blueprint $table) {
|
||||||
|
$table->id();
|
||||||
|
$table->boolean('type')->default(1);
|
||||||
|
$table->text('title');
|
||||||
|
$table->text('cover')->nullable();
|
||||||
|
$table->boolean('status')->default(1);
|
||||||
|
$table->timestamps();
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Reverse the migrations.
|
||||||
|
*
|
||||||
|
* @return void
|
||||||
|
*/
|
||||||
|
public function down()
|
||||||
|
{
|
||||||
|
Schema::dropIfExists('user_sign_banners');
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,37 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
use Illuminate\Support\Facades\Schema;
|
||||||
|
use Illuminate\Database\Schema\Blueprint;
|
||||||
|
use Illuminate\Database\Migrations\Migration;
|
||||||
|
|
||||||
|
class CreateUserDynamicsTable extends Migration
|
||||||
|
{
|
||||||
|
/**
|
||||||
|
* Run the migrations.
|
||||||
|
*
|
||||||
|
* @return void
|
||||||
|
*/
|
||||||
|
public function up()
|
||||||
|
{
|
||||||
|
Schema::create('user_dynamics', function (Blueprint $table) {
|
||||||
|
$table->id();
|
||||||
|
$table->unsignedBigInteger('user_id')->index();
|
||||||
|
$table->unsignedBigInteger('operator_id')->nullable()->index();
|
||||||
|
$table->morphs('orderable');
|
||||||
|
$table->string('remark')->nullable();
|
||||||
|
$table->text('source')->nullable();
|
||||||
|
$table->string('state')->nullable()->comment('状态');
|
||||||
|
$table->timestamps();
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Reverse the migrations.
|
||||||
|
*
|
||||||
|
* @return void
|
||||||
|
*/
|
||||||
|
public function down()
|
||||||
|
{
|
||||||
|
Schema::dropIfExists('user_dynamics');
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -6,7 +6,6 @@ use Carbon\Carbon;
|
|||||||
use DateTime;
|
use DateTime;
|
||||||
use Exception;
|
use Exception;
|
||||||
use Illuminate\Support\HigherOrderCollectionProxy;
|
use Illuminate\Support\HigherOrderCollectionProxy;
|
||||||
use Modules\Gout\Models\GoutCase;
|
|
||||||
use Modules\User\Models\SignConfig;
|
use Modules\User\Models\SignConfig;
|
||||||
use Modules\User\Models\SignLog;
|
use Modules\User\Models\SignLog;
|
||||||
use Modules\User\Models\User;
|
use Modules\User\Models\User;
|
||||||
|
|||||||
@@ -5,7 +5,6 @@ namespace Modules\User\Http\Controllers\Admin;
|
|||||||
use App\Http\Controllers\Controller;
|
use App\Http\Controllers\Controller;
|
||||||
use Encore\Admin\Grid;
|
use Encore\Admin\Grid;
|
||||||
use Encore\Admin\Layout\Content;
|
use Encore\Admin\Layout\Content;
|
||||||
use Modules\Gout\Models\GoutCase;
|
|
||||||
use Modules\User\Models\UserStock;
|
use Modules\User\Models\UserStock;
|
||||||
use Modules\User\Models\UserStockLog;
|
use Modules\User\Models\UserStockLog;
|
||||||
|
|
||||||
|
|||||||
23
modules/User/Http/Resources/UserAndIdentityResource.php
Normal file
23
modules/User/Http/Resources/UserAndIdentityResource.php
Normal file
@@ -0,0 +1,23 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
namespace Modules\User\Http\Resources;
|
||||||
|
|
||||||
|
use Illuminate\Http\Resources\Json\JsonResource;
|
||||||
|
|
||||||
|
class UserAndIdentityResource extends JsonResource
|
||||||
|
{
|
||||||
|
public function toArray($request): array
|
||||||
|
{
|
||||||
|
|
||||||
|
return [
|
||||||
|
'user_id' => $this->id,
|
||||||
|
'username' => $this->username,
|
||||||
|
'nickname' => $this->info->nickname ?? '',
|
||||||
|
'avatar' => $this->info->avatar ?? '',
|
||||||
|
'identity' => [
|
||||||
|
'name' => $this->identityFirst()->name,
|
||||||
|
],
|
||||||
|
];
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
@@ -20,6 +20,7 @@ use Modules\User\Models\Traits\HasStock;
|
|||||||
use Modules\User\Models\Traits\HasVipOrders;
|
use Modules\User\Models\Traits\HasVipOrders;
|
||||||
use Modules\User\Models\Traits\HasWechat;
|
use Modules\User\Models\Traits\HasWechat;
|
||||||
use Modules\User\Models\Order as UserOrder;
|
use Modules\User\Models\Order as UserOrder;
|
||||||
|
use Modules\User\Traits\WithUserDynamic;
|
||||||
use Overtrue\LaravelFavorite\Traits\Favoriter;
|
use Overtrue\LaravelFavorite\Traits\Favoriter;
|
||||||
use Overtrue\LaravelSubscribe\Traits\Subscriber;
|
use Overtrue\LaravelSubscribe\Traits\Subscriber;
|
||||||
use SimpleSoftwareIO\QrCode\Facades\QrCode;
|
use SimpleSoftwareIO\QrCode\Facades\QrCode;
|
||||||
@@ -46,6 +47,7 @@ class User extends Authenticate
|
|||||||
Traits\HasRelations,
|
Traits\HasRelations,
|
||||||
Traits\HasSign;
|
Traits\HasSign;
|
||||||
|
|
||||||
|
use WithUserDynamic;
|
||||||
const STATUS_INIT = 1;
|
const STATUS_INIT = 1;
|
||||||
const STATUS_REFUND = 2;
|
const STATUS_REFUND = 2;
|
||||||
|
|
||||||
|
|||||||
27
modules/User/Models/UserDynamic.php
Normal file
27
modules/User/Models/UserDynamic.php
Normal file
@@ -0,0 +1,27 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
namespace Modules\User\Models;
|
||||||
|
|
||||||
|
|
||||||
|
use App\Models\Model;
|
||||||
|
use Illuminate\Database\Eloquent\Relations\MorphTo;
|
||||||
|
use Modules\User\Traits\BelongsToUser;
|
||||||
|
|
||||||
|
class UserDynamic extends Model
|
||||||
|
{
|
||||||
|
use BelongsToUser;
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Notes: 关联模型
|
||||||
|
*
|
||||||
|
* @Author: 玄尘
|
||||||
|
* @Date: 2023/3/17 13:57
|
||||||
|
* @return MorphTo
|
||||||
|
*/
|
||||||
|
public function orderable(): MorphTo
|
||||||
|
{
|
||||||
|
return $this->morphTo();
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
66
modules/User/Traits/WithUserDynamic.php
Normal file
66
modules/User/Traits/WithUserDynamic.php
Normal file
@@ -0,0 +1,66 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
namespace Modules\User\Traits;
|
||||||
|
|
||||||
|
use App\Models\Model;
|
||||||
|
use Illuminate\Database\Eloquent\Builder;
|
||||||
|
use Illuminate\Database\Eloquent\Relations\MorphMany;
|
||||||
|
use Modules\User\Models\UserDynamic;
|
||||||
|
|
||||||
|
trait WithUserDynamic
|
||||||
|
{
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Notes: 关联动态数据
|
||||||
|
*
|
||||||
|
* @Author: 玄尘
|
||||||
|
* @Date: 2023/3/17 13:59
|
||||||
|
* @return MorphMany
|
||||||
|
*/
|
||||||
|
public function userDynamics(): MorphMany
|
||||||
|
{
|
||||||
|
return $this->morphMany(UserDynamic::class, 'orderable');
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Notes: 我的动态
|
||||||
|
*
|
||||||
|
* @Author: 玄尘
|
||||||
|
* @Date: 2023/3/17 14:00
|
||||||
|
* @return mixed
|
||||||
|
*/
|
||||||
|
public function dynamics()
|
||||||
|
{
|
||||||
|
return $this->hasMany(UserDynamic::class);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Notes: 添加动态
|
||||||
|
*
|
||||||
|
* @Author: 玄尘
|
||||||
|
* @Date: 2023/3/17 14:01
|
||||||
|
* @param Model $model
|
||||||
|
* @param int $user_id
|
||||||
|
* @param int $operator_id 操作人
|
||||||
|
* @param string|null $remark
|
||||||
|
* @param array|null $source
|
||||||
|
* @return Builder|\Illuminate\Database\Eloquent\Model
|
||||||
|
*/
|
||||||
|
public function addDynamic(
|
||||||
|
Model $model,
|
||||||
|
int $user_id = 0,
|
||||||
|
int $operator_id = 0,
|
||||||
|
string $remark = null,
|
||||||
|
array $source = null
|
||||||
|
) {
|
||||||
|
return UserDynamic::query()
|
||||||
|
->create([
|
||||||
|
'user_id' => $user_id,
|
||||||
|
'operator_id' => $operator_id,
|
||||||
|
'orderable_type' => get_class($model),
|
||||||
|
'orderable_id' => $model->getKey(),
|
||||||
|
'remark' => $remark,
|
||||||
|
'source' => $source,
|
||||||
|
]);
|
||||||
|
}
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user