Browse Source

行业产品增加规格

master
李可松 4 years ago
parent
commit
5182481799
  1. 28
      MySQL_change.sql
  2. 49
      app/AdminSupplier/Controllers/IndustryProductController.php
  3. 2
      app/Http/Controllers/Api/VerificationController.php
  4. 10
      app/Models/IndustryProduct.php
  5. 25
      app/Models/IndustryProductSpec.php
  6. 10
      resources/js/supplier-batch-add-spec.js
  7. 1
      resources/lang/zh_CN/industry-product.php

28
MySQL_change.sql

@ -239,3 +239,31 @@ ALTER TABLE `suppliers`
ALTER TABLE `industry_products`
ADD COLUMN `single_deposit` DECIMAL(20,2) NOT NULL DEFAULT 0 COMMENT '交易金单价' AFTER `content`,
DROP COLUMN `service_persons`;
# 11:03 ‎2021/‎10/‎15
ALTER TABLE `industry_products`
CHANGE COLUMN `extends` `extends` JSON NULL DEFAULT NULL COMMENT '扩展字段,根据type不同,字段名不同' AFTER `verify_mobile`,
ADD COLUMN `diy_form_id` INT NOT NULL DEFAULT 0 COMMENT '信息收集表单ID' AFTER `extends`;
CREATE TABLE `industry_product_specs` (
`id` BIGINT(20) UNSIGNED NOT NULL AUTO_INCREMENT,
`industry_product_id` INT(10) NOT NULL COMMENT '所属供应商行业产品ID',
`name` VARCHAR(255) NOT NULL COMMENT '规格名称' COLLATE 'utf8_general_ci',
`date` DATE NOT NULL COMMENT '日期',
`stock` INT(10) NOT NULL COMMENT '库存',
`original_price` DECIMAL(20,2) NOT NULL DEFAULT '0.00' COMMENT '市场价',
`price` DECIMAL(20,2) NOT NULL COMMENT '销售价',
`deleted_at` TIMESTAMP NULL DEFAULT NULL,
PRIMARY KEY (`id`) USING BTREE,
INDEX `industry_product_id_deleted_at` (`industry_product_id`, `deleted_at`) USING BTREE
)
COLLATE='utf8_general_ci'
ENGINE=InnoDB
ROW_FORMAT=DYNAMIC
;
# 12:47 ‎2021/‎10/‎15
ALTER TABLE `industry_orders`
ADD COLUMN `industry_product_spec_id` BIGINT UNSIGNED NOT NULL COMMENT '行业产品规格ID' AFTER `industry_product_id`;

49
app/AdminSupplier/Controllers/IndustryProductController.php

@ -5,6 +5,7 @@ namespace App\AdminSupplier\Controllers;
use App\AdminSupplier\Repositories\IndustryProduct;
use App\Common\ProductStatus;
use App\Models\Category;
use App\Models\DiyForm;
use Dcat\Admin\Admin;
use Dcat\Admin\Form;
use Dcat\Admin\Form\NestedForm;
@ -105,22 +106,44 @@ class IndustryProductController extends AdminController
{
Admin::user()->publish_type = json_decode(Admin::user()->publish_type, true);
return Form::make(new IndustryProduct(), function (Form $form) {
return Form::make(new IndustryProduct(['spec']), function (Form $form) {
$form->disableDeleteButton();
$form->display('id');
$options = Category::selectOptions(fn($query) => $query->where('agent_id', 0));
$form->select('category_id')->options(array_slice($options, 1, null, true))->required();
$form->text('title')->required();
$form->currency('price')->required();
$form->currency('original_price')->required();
$form->number('stock')->required();
$form->number('min_sale')->min(1)->required();
//信息收集表单
$options = DiyForm::where('supplier_id', Admin::user()->id)->pluck('name', 'id');
if ($options->isEmpty()) {
$form->select('diy_form_id', '信息收集表单')
->help('提示:信息收集表单为空,请前往“<a href="' . admin_url('diy_form') . '">信息收集表单</a>”处新增')
->options($options)->required();
} else {
$form->select('diy_form_id', '信息收集表单')->options($options)->required();
}
$form->text('title')->required();
$form->number('min_sale')->default(1)->min(1)->required();
$form->hasMany('spec', function (NestedForm $form) {
$form->hidden('id');
$form->text('name', '规格')->required()->readonly();
$form->date('date', '日期')->required();
$form->text('stock')->required();
$form->text('original_price')->required();
$form->text('price')->required();
Admin::style('.field_date{width:100px!important;}
.has-many-spec .col-md-12{padding:0;}
.has-many-spec .add.btn{display:none;}
.has-many-spec .input-group-prepend{display:none;}
.has-many-spec .form-group{margin-bottom:0;}
.has-many-spec .input-group>.form-control:not(:first-child){border-radius:.25rem;}');
Admin::script(file_get_contents(resource_path('js/supplier-batch-add-spec.js')));
})->useTable()->required();
if ($form->isEditing() && in_array($form->model()->status, [ProductStatus::SOLD_OUT, ProductStatus::ON_SALE])) {
$form->radio('status')->options([1 => '上架', -2 => '下架'])->default(1);
}
$form->multipleImage('pictures')->required();
$form->multipleImage('pictures')->required()->removable(false)->uniqueName();
$form->editor('know');
$form->editor('content')->required();
$form->mobile('verify_mobile')->required();
@ -228,10 +251,20 @@ class IndustryProductController extends AdminController
$form->deleteInput('type');
}
//规格处理
if (!$form->spec || !$spec = array_filter($form->spec, fn($v) => !$v['_remove_'])) {
return $form->response()->error('请输入产品规格');
}
//处理库存、市场价、销售价
$form->hidden(['stock', 'original_price', 'price']);
$form->stock = array_sum(array_column($spec, 'stock'));
$form->original_price = min(array_column($spec, 'original_price'));
$form->price = min(array_column($spec, 'price'));
//用户可编辑的状态
$user_status = [ProductStatus::SOLD_OUT, ProductStatus::ON_SALE];
//目前逻辑不考虑总后台修改单人头交易费的情况
if ($form->isCreating()) {
$form->hidden(['status', 'supplier_id']);
$form->supplier_id = Admin::user()->id;

2
app/Http/Controllers/Api/VerificationController.php

@ -99,6 +99,8 @@ class VerificationController extends Controller
$supplier->deposit_frozen = $supplier->deposit_frozen - $order->deposit;
$supplier->save(); //需要用save才能执行模型事件记录日志
//TODO 此处交易金需要修改
DB::commit();
return $this->success('核销成功');
} catch (\Exception $e) {

10
app/Models/IndustryProduct.php

@ -28,4 +28,14 @@ class IndustryProduct extends BaseModel
{
return $this->belongsTo(Category::class);
}
public function spec()
{
return $this->hasMany(IndustryProductSpec::class);
}
public function diyForm()
{
return $this->belongsTo(DiyForm::class);
}
}

25
app/Models/IndustryProductSpec.php

@ -0,0 +1,25 @@
<?php
namespace App\Models;
use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Database\Eloquent\Model;
use Illuminate\Database\Eloquent\SoftDeletes;
class IndustryProductSpec extends Model
{
use HasFactory, SoftDeletes;
protected $guarded = ['id'];
public function __construct(array $attributes = [])
{
parent::__construct($attributes);
$this->timestamps = false;
}
public function product()
{
return $this->belongsTo(IndustryProduct::class);
}
}

10
resources/js/supplier-batch-add-spec.js

@ -60,9 +60,13 @@ $(function () {
return;
}
var cost_price = parseFloat(prompt('请输入默认成本价'));
if (!cost_price || isNaN(cost_price)) {
return;
var cost_price = 0;
//行业产品不需要成本价
if (location.href.indexOf('industry') === -1) {
cost_price = parseFloat(prompt('请输入默认成本价'));
if (!cost_price || isNaN(cost_price)) {
return;
}
}
$('template.spec-tpl .field_name').prop('value', name);

1
resources/lang/zh_CN/industry-product.php

@ -22,6 +22,7 @@ return [
'single_deposit' => '交易金单价',
'min_sale' => '起售数',
'verify_mobile' => '核销人员手机号',
'spec' => '产品规格',
],
'options' => [
'publish_type' => admin_trans('product.options.publish_type'),

Loading…
Cancel
Save