diff --git a/MySQL_change.sql b/MySQL_change.sql index f0364d2..41cd751 100644 --- a/MySQL_change.sql +++ b/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`; diff --git a/app/AdminSupplier/Controllers/IndustryProductController.php b/app/AdminSupplier/Controllers/IndustryProductController.php index 0722f17..83fd64d 100644 --- a/app/AdminSupplier/Controllers/IndustryProductController.php +++ b/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('提示:信息收集表单为空,请前往“信息收集表单”处新增') + ->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; diff --git a/app/Http/Controllers/Api/VerificationController.php b/app/Http/Controllers/Api/VerificationController.php index f6db28a..b3e11fc 100644 --- a/app/Http/Controllers/Api/VerificationController.php +++ b/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) { diff --git a/app/Models/IndustryProduct.php b/app/Models/IndustryProduct.php index 96f4585..916cd5c 100644 --- a/app/Models/IndustryProduct.php +++ b/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); + } } diff --git a/app/Models/IndustryProductSpec.php b/app/Models/IndustryProductSpec.php new file mode 100644 index 0000000..064ca0f --- /dev/null +++ b/app/Models/IndustryProductSpec.php @@ -0,0 +1,25 @@ +timestamps = false; + } + + public function product() + { + return $this->belongsTo(IndustryProduct::class); + } +} diff --git a/resources/js/supplier-batch-add-spec.js b/resources/js/supplier-batch-add-spec.js index 7a3c3d9..b17593d 100644 --- a/resources/js/supplier-batch-add-spec.js +++ b/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); diff --git a/resources/lang/zh_CN/industry-product.php b/resources/lang/zh_CN/industry-product.php index dda4fd1..3f03acc 100644 --- a/resources/lang/zh_CN/industry-product.php +++ b/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'),