调整后台发货和动态记录表

This commit is contained in:
2023-03-17 16:10:03 +08:00
parent d7d55db7bf
commit 856385d663
15 changed files with 520 additions and 6 deletions

View 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('确定下架吗');
}
}

View File

@@ -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');
}
}

View 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('确定上架吗');
}
}

View 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;
}
}