作者 何书鹏

经销商修改库存

... ... @@ -293,9 +293,21 @@ class Dealer extends Backend
}
/**
* 供商品
* 供商品
*/
public function goods($id)
public function goods()
{
if($this->request->isAjax()){
(new \app\admin\controller\shopro\goods\Goods)->index();
}
$this->assignconfig('dealer_id', $this->request->param('dealer_id'));
return $this->view->fetch();
}
/**
* 经销商规格
*/
public function dealerSku($id, $dealer_id)
{
$skuList = \app\admin\model\shopro\goods\Sku::all(['pid' => 0, 'goods_id' => $id]);
if ($skuList) {
... ... @@ -306,14 +318,74 @@ class Dealer extends Backend
$skuPrice = \app\admin\model\shopro\goods\SkuPrice::all(['goods_id' => $id]);
//编辑
foreach ($skuPrice as $k => &$p) {
$actSkuPrice[$k] = \app\admin\model\dealer\DealerStock::get(['sku_price_id' => $p['id'], 'dealer_id' => $dealer_id]);
if (!$actSkuPrice[$k]) {
$actSkuPrice[$k]['id'] = 0;
$actSkuPrice[$k]['dealer_id'] = $dealer_id;
$actSkuPrice[$k]['goods_id'] = $id;
$actSkuPrice[$k]['status'] = 'down';
$actSkuPrice[$k]['stock'] = '';
$actSkuPrice[$k]['sales'] = '0';
$actSkuPrice[$k]['sku_price_id'] = $p['id'];
}else{
$actSkuPrice[$k]['status'] = 'up';
}
}
$this->assignconfig('skuList', $skuList);
$this->assignconfig('skuPrice', $skuPrice);
$this->assignconfig('actSkuPrice', $actSkuPrice);
return $this->view->fetch();
}
/**
* 更新经销商规格
*/
public function createOrUpdateSku($actSkuPrice)
{
$actSkuPrice = json_decode($actSkuPrice, true);
$list = [];
$act = new \app\admin\model\dealer\DealerStock;
Db::startTrans();
try {
foreach ($actSkuPrice as $a => $c) {
if($c['status'] == 'down'){
$act->where('id',$c['id'])->delete();
}else{
if ($c['id'] == 0) {
unset($c['id']);
}
$list[] = $c;
}
}
$act->allowField(true)->saveAll($list);
// 更新规格库存
foreach ($list as $v) {
$sum_stock = $act->where('sku_price_id',$v['sku_price_id'])->sum('stock');
\app\admin\model\shopro\goods\SkuPrice::where('id',$v['sku_price_id'])->update(['stock'=>$sum_stock]);
}
Db::commit();
} catch (PDOException $e) {
Db::rollback();
$this->error($e->getMessage());
} catch (Exception $e) {
Db::rollback();
$this->error($e->getMessage());
}
$this->success();
}
public function selectpage()
{
return parent::selectpage(); // TODO: Change the autogenerated stub
... ...
... ... @@ -529,6 +529,7 @@ class Goods extends Backend
$min_price = $this->request->get("min_price", "");
$max_price = $this->request->get("max_price", "");
$category_id = $this->request->get('category_id', 0);
$dealer_id = $this->request->get('dealer_id', 0);
$name = $this->model->getQuery()->getTable();
$tableName = $name . '.';
... ... @@ -596,6 +597,12 @@ class Goods extends Backend
});
}
if(isset($dealer_id) && $dealer_id != 0) {
$goods_ids = \app\admin\model\dealer\DealerStock::where('dealer_id',$dealer_id)->column('goods_id');
$goods_ids = $goods_ids ? array_unique($goods_ids) : [];
$goods = $goods->where('id','in',$goods_ids);
}
return $goods;
}
}
... ...
<style>
.skuChildrenBox {
display: flex;
padding: 0 15px;
flex-wrap: wrap;
}
.skuChildren {
margin-right: 10px;
margin-top: 10px;
width: 50px;
height: 24px;
line-height: 24px;
color: rgba(80, 80, 80, 1);
border-radius: 2px;
font-size: 12px;
text-align: center;
border: 1px solid rgba(231, 231, 231, 1);
position: relative;
}
.skuChildrenSelect {
border: 1px solid rgba(212, 48, 48, 1)
}
.skuChildren-close {
position: absolute;
background: rgba(212, 48, 48, 1);
color: #fff;
border-radius: 50%;
width: 12px;
height: 12px;
top: -6px;
right: -6px;
font-style: 12px;
-webkit-transform: scale(0.8);
}
.status {
border: none;
cursor: pointer;
color: #3498db;
font-size: 14px;
}
.status-s {
color: #ED3C30;
}
[v-cloak] {
display: none
}
</style>
<script src="__CDN__/assets/addons/shopro/libs/vue.js"></script>
<form id="add-form" class="form-horizontal" role="form" data-toggle="validator" method="POST" action="">
<div class="panel panel-default panel-intro">
<div class="panel-body">
<div id="myTabContent" class="tab-content">
<div class="tab-pane fade active in" id="basic">
<div class="widget-body no-padding">
<table class="table" id="skuPrce" v-cloak>
<thead>
<tr>
<th v-for="(item, i) in skuList" :key="i">
{{item.name}}
</th>
<th width="80">库存</th>
<th width="80">价格</th>
<th width="80">参与库存</th>
<th width="80">操作</th>
</tr>
</thead>
<tbody>
<tr v-for="(item, i) in skuPrice" :key="i" >
<td v-for="(v, j) in item.goods_sku_text" :key="j">
{{v}}
</td>
<td width="80"><input type="text" v-model="item.stock" class="input-sm form-control"
disabled>
</td>
<td width="80">
<input type="text" v-model="item.price" class="input-sm form-control" disabled>
</td>
<td width="80"><input v-if="actSkuPrice[i].status=='up'" type="number" v-model="actSkuPrice[i].stock" class="input-sm form-control">
</td>
<td width="80">
<span class="input-sm form-control status" @click="goJoin(i)">{{actSkuPrice[i].status=='up'?'取消':'参与'}}</span></td>
</tr>
</tbody>
</table>
</div>
</div>
</div>
</div>
<div class="form-group layer-footer">
<label class="control-label col-xs-12 col-sm-2"></label>
<div class="col-xs-12 col-sm-8">
<button type="button" class="btn btn-success btn-embossed" id="stockSub">{:__('OK')}</button>
</div>
</div>
</form>
\ No newline at end of file
... ...
<div class="panel panel-default panel-intro">
{:build_heading()}
<div class="panel-body">
<div id="myTabContent" class="tab-content">
<div class="tab-pane fade active in" id="one">
<div class="widget-body no-padding">
<div id="toolbar" class="toolbar">
<a href="javascript:;" class="btn btn-primary btn-refresh" title="{:__('Refresh')}" ><i class="fa fa-refresh"></i> </a>
</div>
<table id="table" class="table table-striped table-bordered table-hover table-nowrap"
data-operate-edit="{:$auth->check('banner/edit')}"
data-operate-del="{:$auth->check('banner/del')}"
width="100%">
</table>
</div>
</div>
</div>
</div>
</div>
... ...
... ... @@ -43,6 +43,14 @@ define(['jquery', 'bootstrap', 'backend', 'table', 'form'], function ($, undefin
classname: 'btn btn-xs btn-primary btn-dialog',
icon: 'fa fa-list',
url: 'shopro/order/order?dealer_id={id}',
},
{
name: 'goods',
text: __('供应商品'),
title: __('供应商品'),
classname: 'btn btn-xs btn-primary btn-dialog',
icon: 'fa fa-list',
url: 'dealer/dealer/goods?dealer_id={id}&page_type=select',
}
],
formatter: Table.api.formatter.operate
... ... @@ -139,6 +147,110 @@ define(['jquery', 'bootstrap', 'backend', 'table', 'form'], function ($, undefin
})
Controller.api.bindevent();
},
goods: function () {
// 初始化表格参数配置
Table.api.init({
extend: {
index_url: 'shopro/goods/goods/index' + location.search,
table: 'shopro_goods',
}
});
var table = $("#table");
// 初始化表格
table.bootstrapTable({
url: $.fn.bootstrapTable.defaults.extend.index_url,
pk: 'id',
sortName: 'id',
columns: [
[
{checkbox: true},
{field: 'id', title: __('Id')},
{field: 'image', title: __('商品图片'), operate: false, events: Table.api.events.image, formatter: Table.api.formatter.image},
{field: 'title', title: __('商品名称'), operate: 'LIKE'},
{field: 'price', title: __('价格'), operate:'BETWEEN'},
{field: 'stock', title: __('库存'), operate:false},
{field: 'sales', title: __('销量'), operate:false},
// {field: 'createtime', title: __('Createtime'), operate:'RANGE', addclass:'datetimerange', autocomplete:false, formatter: Table.api.formatter.datetime},
//操作栏,默认有编辑、删除或排序按钮,可自定义配置buttons来扩展按钮
{
field: 'operate',
title: __('Operate'),
table: table,
events: Table.api.events.operate,
buttons: [
{
name: 'stock',
text: __('修改库存'),
title: __('修改库存'),
classname: 'btn btn-xs btn-success btn-dialog',
icon: 'fa fa-edit',
url: 'dealer/dealer/dealerSku?id={id}&dealer_id='+Config.dealer_id,
}
],
formatter: Table.api.formatter.operate
}
]
]
});
// 为表格绑定事件
Table.api.bindevent(table);
},
dealersku: function () {
var vueSku = new Vue({
el: "#skuPrce",
data() {
return {
skuList: Config.skuList,
skuPrice: Config.skuPrice,
actSkuPrice: Config.actSkuPrice,
}
},
methods: {
goJoin(i) {
let status = this.actSkuPrice[i].status === 'up' ? 'down' : 'up';
this.$set(this.actSkuPrice[i], 'status', status)
},
},
})
$(document).on("click", "#stockSub", function () {
Layer.confirm('确认提交吗', {
btn: ['确认', '取消']
}, function () {
let isSubmit = true
isSubmit = !(vueSku.$data.actSkuPrice.every(function (item, index, array) {
return item.status == 'down';
}))
vueSku.$data.actSkuPrice.forEach(i => {
if (i.status == 'up' && !i.stock) {
isSubmit = false
}
})
if (isSubmit) {
Fast.api.ajax({
url : 'dealer/dealer/createOrUpdateSku',
data : {'actSkuPrice':JSON.stringify(vueSku.$data.actSkuPrice)}
},function () {
Layer.closeAll();
location.reload();
},function () {
layer.msg('更新失败');
});
return true;
} else {
layer.msg('请把信息填写完整');
}
return true;
}, function () {
Layer.closeAll();
return false;
});
})
Controller.api.bindevent();
},
api: {
bindevent: function () {
Form.api.bindevent($("form[role=form]"));
... ...