Browse Source

Merge branch 'master' of ssh://8.134.10.79:222/Leadfyy.co/hainan

master
lemon 4 years ago
parent
commit
37d0116344
  1. 35
      app/AdminAgent/Controllers/AgentProductController.php
  2. 40
      app/AdminSupplier/Controllers/ProductController.php
  3. 90
      resources/js/agent-spec-edit.js

35
app/AdminAgent/Controllers/AgentProductController.php

@ -84,7 +84,13 @@ class AgentProductController extends AdminController
->using([ProductStatus::SOLD_OUT => 0, ProductStatus::ON_SALE => 1]) ->using([ProductStatus::SOLD_OUT => 0, ProductStatus::ON_SALE => 1])
->switch() ->switch()
->else() ->else()
->using(ProductStatus::array());
->using(ProductStatus::array())
->dot([
ProductStatus::ON_SALE => 'success',
ProductStatus::UNAUDITED => '',
ProductStatus::REFUSE => 'danger',
ProductStatus::SOLD_OUT => 'warning',
], 'primary');
if (Admin::user()->type != AgentType::CLUSTER) { if (Admin::user()->type != AgentType::CLUSTER) {
$grid->column('is_rec')->switch()->help('推荐后将在“我的”页面下方显示'); $grid->column('is_rec')->switch()->help('推荐后将在“我的”页面下方显示');
} }
@ -196,8 +202,8 @@ class AgentProductController extends AdminController
$form->editor('know'); $form->editor('know');
$form->editor('content'); $form->editor('content');
} else { } else {
$form->hidden('type')->value(0);
if ($form->isCreating()) { if ($form->isCreating()) {
$form->hidden('type')->value(0);
$js = file_get_contents(resource_path('js/select-supplier-product-change.js')); $js = file_get_contents(resource_path('js/select-supplier-product-change.js'));
$class = str_replace('\\', '\\\\', LoadSupplierSpec::class); $class = str_replace('\\', '\\\\', LoadSupplierSpec::class);
$js = str_replace( $js = str_replace(
@ -225,9 +231,11 @@ class AgentProductController extends AdminController
$form->date('supplier_date', '日期')->disable()->customFormat(fn() => $this->product_spec['date'] ?? '供应商已删除规格'); $form->date('supplier_date', '日期')->disable()->customFormat(fn() => $this->product_spec['date'] ?? '供应商已删除规格');
$form->text('supplier_stock', '供应商库存')->disable()->customFormat(fn() => $this->product_spec['stock'] ?? 0); $form->text('supplier_stock', '供应商库存')->disable()->customFormat(fn() => $this->product_spec['stock'] ?? 0);
$form->text('supplier_price', '供应商价')->disable()->customFormat(fn() => $this->product_spec['price'] ?? 0); $form->text('supplier_price', '供应商价')->disable()->customFormat(fn() => $this->product_spec['price'] ?? 0);
$form->text('stock', '您的库存')->customFormat(fn() => isset($this->product_spec['stock'], $this->stock) && $this->stock > $this->product_spec['stock'] ? $this->product_spec['stock'] : $this->stock);
$form->text('original_price', '您的原价');
$form->text('price', '您的售价');
$form->text('stock', '您的库存')->required()
//如果库存大于供应商库存,则取供应商库存
->customFormat(fn() => isset($this->product_spec['stock'], $this->stock) && $this->stock > $this->product_spec['stock'] ? $this->product_spec['stock'] : $this->stock);
$form->text('original_price', '您的原价')->required();
$form->text('price', '您的售价')->required();
Admin::style('.has-many-spec .add.btn{display:none;} Admin::style('.has-many-spec .add.btn{display:none;}
.has-many-spec .field_date{width:100px!important;} .has-many-spec .field_date{width:100px!important;}
.has-many-spec .col-md-12{padding:0;} .has-many-spec .col-md-12{padding:0;}
@ -238,8 +246,8 @@ class AgentProductController extends AdminController
$js = file_get_contents(resource_path('js/agent-spec-edit.js')); $js = file_get_contents(resource_path('js/agent-spec-edit.js'));
$class = str_replace('\\', '\\\\', LoadSupplierSpec::class); $class = str_replace('\\', '\\\\', LoadSupplierSpec::class);
$js = str_replace( $js = str_replace(
['`{{url}}`', '`{{class}}`'],
[route(admin_api_route_name('form')), $class],
['`{{url}}`', '`{{class}}`', '`{{product_id}}`', '`{{agent_product_id}}`'],
[route(admin_api_route_name('form')), $class, $form->model()->product_id, $form->model()->id],
$js $js
); );
Admin::script($js); Admin::script($js);
@ -373,12 +381,11 @@ class AgentProductController extends AdminController
if ($form->stock !== null || $form->status !== null) { if ($form->stock !== null || $form->status !== null) {
$ids = explode(',', $form->model()->product_ids); $ids = explode(',', $form->model()->product_ids);
$count = Product::where([
['status', '=', ProductStatus::ON_SALE],
['stock', '>=', $form->stock ?? $form->model()->stock],
])->whereIn('id', $ids)->count();
if (count($ids) != $count) {
return $form->response()->error('供应商产品已下架或库存小于你设置的库存' . $form->stock)->refresh();
$exists = Product::where([
['status', '<>', ProductStatus::ON_SALE],
])->whereIn('id', $ids)->exists();
if ($exists) {
return $form->response()->error('供应商产品已下架')->refresh();
} }
//修改库存 //修改库存
@ -439,7 +446,7 @@ class AgentProductController extends AdminController
//将供应商产品写入title,pictures,know,content //将供应商产品写入title,pictures,know,content
$product = Product::find($form->product_id); $product = Product::find($form->product_id);
if ($product->status != ProductStatus::ON_SALE) { if ($product->status != ProductStatus::ON_SALE) {
return $form->response()->error('产品ID '. $form->product_id .' 已下架');
return $form->response()->error('供应商产品 '. $product->title .' 已下架');
/*} else if ($product->stock < $form->stock) { /*} else if ($product->stock < $form->stock) {
return $form->response()->error("供应商当前库存为{$product->stock},你设置的库存不能超过该数值");*/ return $form->response()->error("供应商当前库存为{$product->stock},你设置的库存不能超过该数值");*/
} else if ($form->price < $product->price) { } else if ($form->price < $product->price) {

40
app/AdminSupplier/Controllers/ProductController.php

@ -38,12 +38,18 @@ class ProductController extends AdminController
$grid->column('original_price'); $grid->column('original_price');
$grid->column('stock'); $grid->column('stock');
$grid->column('sale'); $grid->column('sale');
$grid->column('status')
/*->if(fn() => in_array($this->status, [ProductStatus::SOLD_OUT, ProductStatus::ON_SALE]))
$grid->column('status')->help('切换开关可改变上下架状态')
->if(fn() => in_array($this->status, [ProductStatus::SOLD_OUT, ProductStatus::ON_SALE]))
->using([ProductStatus::SOLD_OUT => 0, ProductStatus::ON_SALE => 1]) ->using([ProductStatus::SOLD_OUT => 0, ProductStatus::ON_SALE => 1])
->switch() ->switch()
->else()*/
->using(ProductStatus::array());
->else()
->using(ProductStatus::array())
->dot([
ProductStatus::ON_SALE => 'success',
ProductStatus::UNAUDITED => '',
ProductStatus::REFUSE => 'danger',
ProductStatus::SOLD_OUT => 'warning',
], 'primary');
$grid->column('verify_mobile','核销员手机'); $grid->column('verify_mobile','核销员手机');
$grid->column('created_at'); $grid->column('created_at');
$grid->column('updated_at'); $grid->column('updated_at');
@ -110,10 +116,20 @@ class ProductController extends AdminController
$options = Category::selectOptions(fn($query) => $query->where('agent_id', 0)); $options = Category::selectOptions(fn($query) => $query->where('agent_id', 0));
$form->select('category_id')->options(array_slice($options, 1, null, true))->required(); $form->select('category_id')->options(array_slice($options, 1, null, true))->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->text('title')->required();
// $form->currency('price')->symbol('¥')->required(); // $form->currency('price')->symbol('¥')->required();
// $form->currency('original_price')->symbol('¥')->required(); // $form->currency('original_price')->symbol('¥')->required();
$form->number('service_persons')->min(1)->required();
// $form->number('stock')->required(); // $form->number('stock')->required();
$form->hasMany('spec', function (NestedForm $form) { $form->hasMany('spec', function (NestedForm $form) {
$form->hidden('id'); $form->hidden('id');
@ -130,6 +146,7 @@ class ProductController extends AdminController
.has-many-spec .input-group>.form-control:not(:first-child){border-radius:.25rem;}'); .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'))); Admin::script(file_get_contents(resource_path('js/supplier-batch-add-spec.js')));
})->useTable()->required(); })->useTable()->required();
$form->number('service_persons')->min(1)->required();
if ($form->isEditing() && in_array($form->model()->status, [ProductStatus::SOLD_OUT, ProductStatus::ON_SALE])) { if ($form->isEditing() && in_array($form->model()->status, [ProductStatus::SOLD_OUT, ProductStatus::ON_SALE])) {
$form->radio('status')->options([1 => '上架', -2 => '下架'])->default(1); $form->radio('status')->options([1 => '上架', -2 => '下架'])->default(1);
} }
@ -138,10 +155,6 @@ class ProductController extends AdminController
$form->editor('content')->required(); $form->editor('content')->required();
$form->mobile('verify_mobile')->required(); $form->mobile('verify_mobile')->required();
//信息收集表单
$options = DiyForm::where('supplier_id', Admin::user()->id)->pluck('name', 'id');
$form->select('diy_form_id', '信息收集表单')->options($options)->required();
//扩展字段 //扩展字段
$publish_type = array_intersect_key( $publish_type = array_intersect_key(
admin_trans('product.options.publish_type'), admin_trans('product.options.publish_type'),
@ -249,6 +262,15 @@ class ProductController extends AdminController
//用户可编辑的状态 //用户可编辑的状态
$user_status = [ProductStatus::SOLD_OUT, ProductStatus::ON_SALE]; $user_status = [ProductStatus::SOLD_OUT, ProductStatus::ON_SALE];
//列表切换上下架按钮
if ($form->isEditing() && !is_null($form->status) && is_null($form->title)) {
if (in_array($form->model()->status, $user_status)) {
$form->status = $form->status == 1 ? ProductStatus::ON_SALE : ProductStatus::SOLD_OUT;
$form->model()->update(['status' => $form->status]);
return $form->response()->success('更新成功')->refresh();
}
}
//规格处理 //规格处理
if (!$form->spec || !$spec = array_filter($form->spec, fn($v) => !$v['_remove_'])) { if (!$form->spec || !$spec = array_filter($form->spec, fn($v) => !$v['_remove_'])) {
return $form->response()->error('请输入产品规格'); return $form->response()->error('请输入产品规格');

90
resources/js/agent-spec-edit.js

@ -1,57 +1,57 @@
$(function () { $(function () {
$('.has-many-spec .add.btn') $('.has-many-spec .add.btn')
.after('<div class="btn btn-spec spec-sync btn-primary btn-outline btn-sm" style="margin-left:10px;"><i class="feather icon-plus"></i>&nbsp;同步最新规格</div><div class="btn btn-spec batch-stock btn-primary btn-outline btn-sm" style="margin-left:10px;"><i class="feather icon-plus"></i>&nbsp;批量设置库存</div><div class="btn btn-spec batch-original-price btn-primary btn-outline btn-sm" style="margin-left:10px;"><i class="feather icon-plus"></i>&nbsp;批量设置原价</div><div class="btn btn-spec batch-price btn-primary btn-outline btn-sm" style="margin-left:10px;"><i class="feather icon-plus"></i>&nbsp;批量设置售价</div>');
.after('<div class="btn btn-spec spec-sync btn-primary btn-outline btn-sm" style="margin-left:10px;"><i class="feather icon-plus"></i>&nbsp;同步供应商最新规格</div><div class="btn btn-spec batch-stock btn-primary btn-outline btn-sm" style="margin-left:10px;"><i class="feather icon-plus"></i>&nbsp;批量设置库存</div><div class="btn btn-spec batch-original-price btn-primary btn-outline btn-sm" style="margin-left:10px;"><i class="feather icon-plus"></i>&nbsp;批量设置原价</div><div class="btn btn-spec batch-price btn-primary btn-outline btn-sm" style="margin-left:10px;"><i class="feather icon-plus"></i>&nbsp;批量设置售价</div>');
//同步最新规格 //同步最新规格
var template = $('template.spec-tpl').html(); var template = $('template.spec-tpl').html();
var is_load = false;
$('.spec-sync').click(function () { $('.spec-sync').click(function () {
$.ajax({
url: '`{{url}}`',
method: 'POST',
data: {product_id: $(this).val(), _form_: '`{{class}}`'},
success: function (res) {
var fields = {
supplier_name: 'name',
supplier_date: 'date',
supplier_price: 'price',
supplier_stock: 'stock',
price: 'price',
stock: 'stock',
original_price: 'original_price',
product_spec_id: 'id'
};
var data = res.data;
var forms = $('.has-many-spec-forms');
if (is_load) {
Dcat.confirm('本次载入将清除上次载入的所有数据,是否继续?', null, post());
} else {
post();
is_load = true;
}
function post() {
$.ajax({
url: '`{{url}}`',
method: 'POST',
data: {
product_id: `{{product_id}}`,
agent_product_id: `{{agent_product_id}}`,
_form_: '`{{class}}`',
},
success: function (res) {
var fields = ['supplier_name', 'supplier_date', 'supplier_price', 'supplier_stock',
'price', 'stock', 'original_price', 'product_spec_id'];
var data = res.data;
var forms = $('.has-many-spec-forms');
//如果是原来数据库已经保存有id,调用click,提交的时候会同时删除数据库,否则直接remove掉,减小HTML体积
forms.children().each(function () {
if ($(this).find('.field_id').val()) {
$(this).find('.remove.btn').click();
} else {
$(this).remove();
}
});
//只remove掉上次载入的,原来数据库保存的记录(.field_id不为空)不处理
forms.children().each(function () {
if (!$(this).find('.field_id').val()) {
$(this).remove();
}
//清理供应商已删除的规格
else if ($(this).find('.field_supplier_stock').val() == 0 && $(this).find('.field_supplier_price').val() == 0) {
$(this).find('.remove.btn').click();
}
});
for (var key in data) {
var row = $(template.replace(/new___LA_KEY__/g, key));
for(var key2 in fields) {
var value = fields[key2], insert_value;
if (key2 === 'original_price') {
insert_value = (data[key][value] * 2).toFixed(2);
} else if (key2 === 'price') {
insert_value = (data[key][value] * 1.5).toFixed(2);
} else {
insert_value = data[key][value];
for (var key in data) {
var row = $(template.replace(/new___LA_KEY__/g, key));
for (var i=0; i<fields.length; i++) {
var field = fields[i];
row.find('input.field_' + field).val(data[key][field]);
} }
row.find('input.field_' + key2).val(insert_value);
forms.append(row);
} }
forms.append(row);
},
error: function () {
Dcat.error('服务器出现未知错误,获取供应商产品规格失败');
} }
},
error: function () {
Dcat.error('服务器出现未知错误,获取供应商产品规格失败');
}
});
});
}
}); });
//批量库存 //批量库存
@ -63,7 +63,7 @@ $(function () {
$('.has-many-spec input.field_stock').each(function () { $('.has-many-spec input.field_stock').each(function () {
var value = $(this).parents('tr').find('.field_supplier_stock').val(); var value = $(this).parents('tr').find('.field_supplier_stock').val();
var result = num > value ? value : num;
var result = parseFloat(num) > parseFloat(value) ? value : num;
$(this).val(result); $(this).val(result);
}); });
}); });
@ -95,6 +95,4 @@ $(function () {
$(this).val(result.toFixed(2)); $(this).val(result.toFixed(2));
}); });
}); });
//
}); });
Loading…
Cancel
Save