仓库商品新增规格库存查询、后台首页新增钩子、动态列表数据参数支持min和max、库存修改优化

feat/task1-c-wallet
gongfuxiang 2022-06-28 23:19:51 +08:00
parent b0ddebd010
commit c7b1ec0780
10 changed files with 307 additions and 42 deletions

View File

@ -129,9 +129,52 @@ class Index extends Common
} }
} }
// 钩子初始化
$this->PluginsInit();
return MyView(); return MyView();
} }
/**
* 钩子初始化
* @author Devil
* @blog http://gong.gg/
* @version 1.0.0
* @date 2018-12-07
* @desc description
*/
private function PluginsInit()
{
// 顶部钩子
MyViewAssign('plugins_admin_view_index_init_top_data', MyEventTrigger('plugins_admin_view_index_init_top', ['hook_name'=>'plugins_admin_view_index_init_top', 'is_backend'=>false, 'admin'=>$this->admin]));
// 公告顶部钩子
MyViewAssign('plugins_admin_view_index_init_notice_top_data', MyEventTrigger('plugins_admin_view_index_init_notice_top', ['hook_name'=>'plugins_admin_view_index_init_notice_top', 'is_backend'=>false, 'admin'=>$this->admin]));
// 基础统计顶部钩子
MyViewAssign('plugins_admin_view_index_init_stats_base_top_data', MyEventTrigger('plugins_admin_view_index_init_stats_base_top', ['hook_name'=>'plugins_admin_view_index_init_stats_base_top', 'is_backend'=>false, 'admin'=>$this->admin]));
// 基础统计内部顶部钩子
MyViewAssign('plugins_admin_view_index_init_stats_inside_base_top_data', MyEventTrigger('plugins_admin_view_index_init_stats_inside_base_top', ['hook_name'=>'plugins_admin_view_index_init_stats_inside_base_top', 'is_backend'=>false, 'admin'=>$this->admin]));
// 订单金额走势统计内部顶部钩子
MyViewAssign('plugins_admin_view_index_init_stats_inside_amount_trend_top_data', MyEventTrigger('plugins_admin_view_index_init_stats_inside_amount_trend_top', ['hook_name'=>'plugins_admin_view_index_init_stats_inside_amount_trend_top', 'is_backend'=>false, 'admin'=>$this->admin]));
// 订单交易走势统计内部顶部钩子
MyViewAssign('plugins_admin_view_index_init_stats_inside_order_trading_top_data', MyEventTrigger('plugins_admin_view_index_init_stats_inside_order_trading_top', ['hook_name'=>'plugins_admin_view_index_init_stats_inside_order_trading_top', 'is_backend'=>false, 'admin'=>$this->admin]));
// 组合商品和支付统计内部顶部钩子
MyViewAssign('plugins_admin_view_index_init_stats_inside_compose_top_data', MyEventTrigger('plugins_admin_view_index_init_stats_inside_compose_top', ['hook_name'=>'plugins_admin_view_index_init_stats_inside_compose_top', 'is_backend'=>false, 'admin'=>$this->admin]));
// 地域分布统计内部顶部钩子
MyViewAssign('plugins_admin_view_index_init_stats_inside_region_top_data', MyEventTrigger('plugins_admin_view_index_init_stats_inside_region_top', ['hook_name'=>'plugins_admin_view_index_init_stats_inside_region_top', 'is_backend'=>false, 'admin'=>$this->admin]));
// 系统信息顶部钩子
MyViewAssign('plugins_admin_view_index_init_system_info_top_data', MyEventTrigger('plugins_admin_view_index_init_system_info_top', ['hook_name'=>'plugins_admin_view_index_init_system_info_top', 'is_backend'=>false, 'admin'=>$this->admin]));
// 底部钩子
MyViewAssign('plugins_admin_view_index_init_bottom_data', MyEventTrigger('plugins_admin_view_index_init_bottom', ['hook_name'=>'plugins_admin_view_index_init_bottom', 'is_backend'=>false, 'admin'=>$this->admin]));
}
/** /**
* 应用商店帐号绑定 * 应用商店帐号绑定
* @author Devil * @author Devil

View File

@ -49,6 +49,7 @@ class Brand
'delete_url' => MyUrl('admin/brand/delete'), 'delete_url' => MyUrl('admin/brand/delete'),
'delete_key' => 'ids', 'delete_key' => 'ids',
'detail_title' => '基础信息', 'detail_title' => '基础信息',
'is_middle' => 0,
], ],
// 表单配置 // 表单配置
'form' => [ 'form' => [

View File

@ -50,6 +50,7 @@ class Warehouse
'is_delete' => 1, 'is_delete' => 1,
'delete_url' => MyUrl('admin/warehouse/delete'), 'delete_url' => MyUrl('admin/warehouse/delete'),
'delete_key' => 'ids', 'delete_key' => 'ids',
'is_middle' => 0,
], ],
// 表单配置 // 表单配置
'form' => [ 'form' => [

View File

@ -49,6 +49,7 @@ class WarehouseGoods
'delete_url' => MyUrl('admin/warehousegoods/delete'), 'delete_url' => MyUrl('admin/warehousegoods/delete'),
'delete_key' => 'ids', 'delete_key' => 'ids',
'detail_title' => '基础信息', 'detail_title' => '基础信息',
'is_middle' => 0,
], ],
// 表单配置 // 表单配置
'form' => [ 'form' => [
@ -61,28 +62,30 @@ class WarehouseGoods
'width' => 80, 'width' => 80,
], ],
[ [
'label' => '基础信息', 'label' => '基础信息',
'view_type' => 'module', 'view_type' => 'module',
'view_key' => 'warehousegoods/module/goods', 'view_key' => 'warehousegoods/module/goods',
'grid_size' => 'lg', 'grid_size' => 'lg',
'is_sort' => 1, 'is_sort' => 1,
'sort_field' => 'goods_id', 'sort_field' => 'goods_id',
'search_config' => [ 'params_where_name' => 'goods_id',
'search_config' => [
'form_type' => 'input', 'form_type' => 'input',
'form_name' => 'id', 'form_name' => 'wg.id',
'where_type_custom' => 'in', 'where_type_custom' => 'in',
'where_value_custom' => 'WhereGoodsInfo', 'where_value_custom' => 'WhereGoodsInfo',
'placeholder' => '请输入商品名称/型号', 'placeholder' => '请输入商品名称/型号',
], ],
], ],
[ [
'label' => '仓库', 'label' => '仓库',
'view_type' => 'field', 'view_type' => 'field',
'view_key' => 'warehouse_name', 'view_key' => 'warehouse_name',
'is_sort' => 1, 'is_sort' => 1,
'params_where_name' => 'warehouse_id',
'search_config' => [ 'search_config' => [
'form_type' => 'select', 'form_type' => 'select',
'form_name' => 'warehouse_id', 'form_name' => 'wg.warehouse_id',
'data' => $this->WarehouseList(), 'data' => $this->WarehouseList(),
'data_key' => 'id', 'data_key' => 'id',
'data_name' => 'name', 'data_name' => 'name',
@ -91,15 +94,17 @@ class WarehouseGoods
], ],
], ],
[ [
'label' => '是否启用', 'label' => '是否启用',
'view_type' => 'status', 'view_type' => 'status',
'view_key' => 'is_enable', 'view_key' => 'is_enable',
'post_url' => MyUrl('admin/warehousegoods/statusupdate'), 'post_url' => MyUrl('admin/warehousegoods/statusupdate'),
'is_form_su' => 1, 'is_form_su' => 1,
'align' => 'center', 'align' => 'center',
'is_sort' => 1, 'is_sort' => 1,
'params_where_name' => 'is_enable',
'search_config' => [ 'search_config' => [
'form_type' => 'select', 'form_type' => 'select',
'form_name' => 'wg.is_enable',
'where_type' => 'in', 'where_type' => 'in',
'data' => MyConst('common_is_enable_list'), 'data' => MyConst('common_is_enable_list'),
'data_key' => 'id', 'data_key' => 'id',
@ -108,30 +113,48 @@ class WarehouseGoods
], ],
], ],
[ [
'label' => '总库存', 'label' => '总库存',
'view_type' => 'field', 'view_type' => 'field',
'view_key' => 'inventory', 'view_key' => 'inventory',
'is_sort' => 1, 'is_sort' => 1,
'params_where_name' => 'inventory',
'search_config' => [ 'search_config' => [
'form_type' => 'section', 'form_type' => 'section',
'form_name' => 'wg.inventory',
], ],
], ],
[ [
'label' => '创建时间', 'label' => '规格库存',
'view_type' => 'field', 'view_type' => 'module',
'view_key' => 'add_time', 'view_key' => 'warehousegoods/module/spec_inventory',
'is_sort' => 1, 'is_sort' => 1,
'grid_size' => 'lg',
'params_where_name' => 'spec_inventory',
'search_config' => [ 'search_config' => [
'form_type' => 'datetime', 'form_type' => 'section',
'form_name' => 'wgs.inventory',
], ],
], ],
[ [
'label' => '更新时间', 'label' => '创建时间',
'view_type' => 'field', 'view_type' => 'field',
'view_key' => 'upd_time', 'view_key' => 'add_time',
'is_sort' => 1,
'params_where_name' => 'add_time',
'search_config' => [
'form_type' => 'datetime',
'form_name' => 'wg.add_time',
],
],
[
'label' => '更新时间',
'view_type' => 'field',
'view_key' => 'upd_time',
'params_where_name' => 'upd_time',
'is_sort' => 1, 'is_sort' => 1,
'search_config' => [ 'search_config' => [
'form_type' => 'datetime', 'form_type' => 'datetime',
'form_name' => 'wg.upd_time',
], ],
], ],
[ [

View File

@ -3,6 +3,20 @@
<!-- right content start --> <!-- right content start -->
<div class="content-right" data-url="{{:MyUrl('admin/index/stats')}}"> <div class="content-right" data-url="{{:MyUrl('admin/index/stats')}}">
<div class="content"> <div class="content">
<!-- 顶部钩子 -->
{{if isset($shopxo_is_develop) and $shopxo_is_develop eq true}}
<div class="plugins-tag">
<span>plugins_admin_view_index_init_top</span>
</div>
{{/if}}
{{if !empty($plugins_admin_view_index_init_top_data) and is_array($plugins_admin_view_index_init_top_data)}}
{{foreach $plugins_admin_view_index_init_top_data as $hook}}
{{if is_string($hook) or is_int($hook)}}
{{$hook|raw}}
{{/if}}
{{/foreach}}
{{/if}}
{{if $is_system_show_base eq 1}} {{if $is_system_show_base eq 1}}
<!-- 顶部提示信息 --> <!-- 顶部提示信息 -->
{{if !empty($site_store_info) and !empty($site_store_info['base']) and !empty($site_store_info['base']['site_top_notice'])}} {{if !empty($site_store_info) and !empty($site_store_info['base']) and !empty($site_store_info['base']['site_top_notice'])}}
@ -48,6 +62,20 @@
</div> </div>
{{/if}} {{/if}}
<!-- 公告顶部钩子 -->
{{if isset($shopxo_is_develop) and $shopxo_is_develop eq true}}
<div class="plugins-tag">
<span>plugins_admin_view_index_init_notice_top</span>
</div>
{{/if}}
{{if !empty($plugins_admin_view_index_init_notice_top_data) and is_array($plugins_admin_view_index_init_notice_top_data)}}
{{foreach $plugins_admin_view_index_init_notice_top_data as $hook}}
{{if is_string($hook) or is_int($hook)}}
{{$hook|raw}}
{{/if}}
{{/foreach}}
{{/if}}
<!-- 后台公告 --> <!-- 后台公告 -->
{{if !empty($admin_notice)}} {{if !empty($admin_notice)}}
<div class="am-alert am-alert-danger" data-am-alert> <div class="am-alert am-alert-danger" data-am-alert>
@ -56,8 +84,36 @@
</div> </div>
{{/if}} {{/if}}
<!-- 基础统计基础顶部钩子 -->
{{if isset($shopxo_is_develop) and $shopxo_is_develop eq true}}
<div class="plugins-tag">
<span>plugins_admin_view_index_init_stats_base_top</span>
</div>
{{/if}}
{{if !empty($plugins_admin_view_index_init_stats_base_top_data) and is_array($plugins_admin_view_index_init_stats_base_top_data)}}
{{foreach $plugins_admin_view_index_init_stats_base_top_data as $hook}}
{{if is_string($hook) or is_int($hook)}}
{{$hook|raw}}
{{/if}}
{{/foreach}}
{{/if}}
<!-- 是否展示统计数据 --> <!-- 是否展示统计数据 -->
{{if isset($is_stats) and $is_stats eq 1}} {{if isset($is_stats) and $is_stats eq 1}}
<!-- 基础统计内部顶部钩子 -->
{{if isset($shopxo_is_develop) and $shopxo_is_develop eq true}}
<div class="plugins-tag">
<span>plugins_admin_view_index_init_stats_inside_base_top</span>
</div>
{{/if}}
{{if !empty($plugins_admin_view_index_init_stats_inside_base_top_data) and is_array($plugins_admin_view_index_init_stats_inside_base_top_data)}}
{{foreach $plugins_admin_view_index_init_stats_inside_base_top_data as $hook}}
{{if is_string($hook) or is_int($hook)}}
{{$hook|raw}}
{{/if}}
{{/foreach}}
{{/if}}
<!-- 基础统计 --> <!-- 基础统计 -->
<div class="block-container shopxo-base"> <div class="block-container shopxo-base">
<div class="block-title echarts-title"> <div class="block-title echarts-title">
@ -177,6 +233,20 @@
</ul> </ul>
</div> </div>
<!-- 订单金额走势统计内部顶部钩子 -->
{{if isset($shopxo_is_develop) and $shopxo_is_develop eq true}}
<div class="plugins-tag">
<span>plugins_admin_view_index_init_stats_inside_amount_trend_top</span>
</div>
{{/if}}
{{if !empty($plugins_admin_view_index_init_stats_inside_amount_trend_top_data) and is_array($plugins_admin_view_index_init_stats_inside_amount_trend_top_data)}}
{{foreach $plugins_admin_view_index_init_stats_inside_amount_trend_top_data as $hook}}
{{if is_string($hook) or is_int($hook)}}
{{$hook|raw}}
{{/if}}
{{/foreach}}
{{/if}}
<!-- 订单成交金额走势,收入统计权限判断--> <!-- 订单成交金额走势,收入统计权限判断-->
{{if isset($is_income) and $is_income eq true}} {{if isset($is_income) and $is_income eq true}}
<div class="block-container"> <div class="block-container">
@ -199,6 +269,20 @@
</div> </div>
{{/if}} {{/if}}
<!-- 订单交易走势统计内部顶部钩子 -->
{{if isset($shopxo_is_develop) and $shopxo_is_develop eq true}}
<div class="plugins-tag">
<span>plugins_admin_view_index_init_stats_inside_order_trading_top</span>
</div>
{{/if}}
{{if !empty($plugins_admin_view_index_init_stats_inside_order_trading_top_data) and is_array($plugins_admin_view_index_init_stats_inside_order_trading_top_data)}}
{{foreach $plugins_admin_view_index_init_stats_inside_order_trading_top_data as $hook}}
{{if is_string($hook) or is_int($hook)}}
{{$hook|raw}}
{{/if}}
{{/foreach}}
{{/if}}
<!-- 订单交易走势 --> <!-- 订单交易走势 -->
<div class="block-container"> <div class="block-container">
<div class="block-title echarts-title"> <div class="block-title echarts-title">
@ -219,6 +303,20 @@
<div id="echarts-order-trading"></div> <div id="echarts-order-trading"></div>
</div> </div>
<!-- 组合商品和支付统计内部顶部钩子 -->
{{if isset($shopxo_is_develop) and $shopxo_is_develop eq true}}
<div class="plugins-tag">
<span>plugins_admin_view_index_init_stats_inside_compose_top</span>
</div>
{{/if}}
{{if !empty($plugins_admin_view_index_init_stats_inside_compose_top_data) and is_array($plugins_admin_view_index_init_stats_inside_compose_top_data)}}
{{foreach $plugins_admin_view_index_init_stats_inside_compose_top_data as $hook}}
{{if is_string($hook) or is_int($hook)}}
{{$hook|raw}}
{{/if}}
{{/foreach}}
{{/if}}
<!-- 组合 --> <!-- 组合 -->
<ul class="am-avg-sm-1 am-avg-sm-2 am-avg-lg-2 block-combination-container-2"> <ul class="am-avg-sm-1 am-avg-sm-2 am-avg-lg-2 block-combination-container-2">
<li> <li>
@ -263,6 +361,20 @@
</li> </li>
</ul> </ul>
<!-- 地域分布统计内部顶部钩子 -->
{{if isset($shopxo_is_develop) and $shopxo_is_develop eq true}}
<div class="plugins-tag">
<span>plugins_admin_view_index_init_stats_inside_region_top</span>
</div>
{{/if}}
{{if !empty($plugins_admin_view_index_init_stats_inside_region_top_data) and is_array($plugins_admin_view_index_init_stats_inside_region_top_data)}}
{{foreach $plugins_admin_view_index_init_stats_inside_region_top_data as $hook}}
{{if is_string($hook) or is_int($hook)}}
{{$hook|raw}}
{{/if}}
{{/foreach}}
{{/if}}
<!-- 订单地域分布 --> <!-- 订单地域分布 -->
<div class="am-nbfc {{if $is_system_show_base eq 0}}am-padding-bottom-sm{{/if}}"> <div class="am-nbfc {{if $is_system_show_base eq 0}}am-padding-bottom-sm{{/if}}">
<div class="block-container {{if $is_system_show_base eq 0}}am-margin-bottom-0{{/if}}"> <div class="block-container {{if $is_system_show_base eq 0}}am-margin-bottom-0{{/if}}">
@ -292,6 +404,20 @@
</div> </div>
{{/if}} {{/if}}
<!-- 系统信息顶部钩子 -->
{{if isset($shopxo_is_develop) and $shopxo_is_develop eq true}}
<div class="plugins-tag">
<span>plugins_admin_view_index_init_system_info_top</span>
</div>
{{/if}}
{{if !empty($plugins_admin_view_index_init_system_info_top_data) and is_array($plugins_admin_view_index_init_system_info_top_data)}}
{{foreach $plugins_admin_view_index_init_system_info_top_data as $hook}}
{{if is_string($hook) or is_int($hook)}}
{{$hook|raw}}
{{/if}}
{{/foreach}}
{{/if}}
<!-- 系统信息 --> <!-- 系统信息 -->
{{if $is_system_show_base eq 1}} {{if $is_system_show_base eq 1}}
<ul class="am-avg-sm-1 am-avg-sm-2 am-avg-lg-2 block-combination-container-2 am-padding-bottom-sm"> <ul class="am-avg-sm-1 am-avg-sm-2 am-avg-lg-2 block-combination-container-2 am-padding-bottom-sm">
@ -364,6 +490,20 @@
</li> </li>
</ul> </ul>
{{/if}} {{/if}}
<!-- 底部钩子 -->
{{if isset($shopxo_is_develop) and $shopxo_is_develop eq true}}
<div class="plugins-tag">
<span>plugins_admin_view_index_init_bottom</span>
</div>
{{/if}}
{{if !empty($plugins_admin_view_index_init_bottom_data) and is_array($plugins_admin_view_index_init_bottom_data)}}
{{foreach $plugins_admin_view_index_init_bottom_data as $hook}}
{{if is_string($hook) or is_int($hook)}}
{{$hook|raw}}
{{/if}}
{{/foreach}}
{{/if}}
</div> </div>
</div> </div>
<!-- right content end --> <!-- right content end -->

View File

@ -0,0 +1,12 @@
{{if !empty($module_data['spec']) and is_array($module_data['spec'])}}
<div class="am-scrollable-vertical spec-inventory-list">
<ul>
{{foreach $module_data.spec as $sv}}
<li class="am-nbfc">
<p class="spec-name am-fl">{{if empty($sv['spec'])}}默认规格{{else /}}{{$sv.spec}}{{/if}}</p>
<strong class="am-fr">{{$sv.inventory}}</strong>
</li>
{{/foreach}}
</ul>
</div>
{{/if}}

View File

@ -433,6 +433,14 @@ class FormHandleModule
if(array_key_exists($params_where_name, $this->out_params) && $this->out_params[$params_where_name] !== null && $this->out_params[$params_where_name] !== '') if(array_key_exists($params_where_name, $this->out_params) && $this->out_params[$params_where_name] !== null && $this->out_params[$params_where_name] !== '')
{ {
$this->out_params[$form_key] = $this->out_params[$params_where_name]; $this->out_params[$form_key] = $this->out_params[$params_where_name];
// min字段
} elseif(array_key_exists($params_where_name.'_min', $this->out_params) && $this->out_params[$params_where_name.'_min'] !== null && $this->out_params[$params_where_name.'_min'] !== '')
{
$this->out_params[$form_key.'_min'] = $this->out_params[$params_where_name.'_min'];
// max字段
} elseif(array_key_exists($params_where_name.'_max', $this->out_params) && $this->out_params[$params_where_name.'_max'] !== null && $this->out_params[$params_where_name.'_max'] !== '')
{
$this->out_params[$form_key.'_max'] = $this->out_params[$params_where_name.'_max'];
} }
// 根据组件类型处理 // 根据组件类型处理

View File

@ -2004,7 +2004,7 @@ class GoodsService
public static function GoodsDeleteHandle($goods_ids) public static function GoodsDeleteHandle($goods_ids)
{ {
// 删除商品 // 删除商品
if(!Db::name('Goods')->where(['id'=>$goods_ids])->delete()) if(Db::name('Goods')->where(['id'=>$goods_ids])->delete() === false)
{ {
throw new \Exception('商品删除失败'); throw new \Exception('商品删除失败');
} }

View File

@ -38,12 +38,12 @@ class WarehouseGoodsService
public static function WarehouseGoodsList($params = []) public static function WarehouseGoodsList($params = [])
{ {
$where = empty($params['where']) ? [] : $params['where']; $where = empty($params['where']) ? [] : $params['where'];
$field = empty($params['field']) ? '*' : $params['field']; $field = empty($params['field']) ? 'wg.*' : $params['field'];
$m = isset($params['m']) ? intval($params['m']) : 0; $m = isset($params['m']) ? intval($params['m']) : 0;
$n = isset($params['n']) ? intval($params['n']) : 10; $n = isset($params['n']) ? intval($params['n']) : 10;
$order_by = empty($params['order_by']) ? 'id desc' : trim($params['order_by']); $order_by = empty($params['order_by']) ? 'wg.id desc' : trim($params['order_by']);
$data = Db::name('WarehouseGoods')->field($field)->where($where)->order($order_by)->limit($m, $n)->select()->toArray(); $data = Db::name('WarehouseGoods')->alias('wg')->join('warehouse_goods_spec wgs', 'wg.id=wgs.warehouse_goods_id')->field($field)->where($where)->group('wg.id')->order($order_by)->limit($m, $n)->select()->toArray();
return DataReturn('处理成功', 0, self::DataHandle($data)); return DataReturn('处理成功', 0, self::DataHandle($data));
} }
@ -100,33 +100,53 @@ class WarehouseGoodsService
} }
} }
// 商品规格库存
$spec_inventory = [];
$temp_inventory = Db::name('WarehouseGoodsSpec')->where(['warehouse_goods_id'=>array_column($data, 'id')])->field('warehouse_goods_id,inventory,spec')->select()->toArray();
if(!empty($temp_inventory))
{
foreach($temp_inventory as $iv)
{
$temp = empty($iv['spec']) ? [] : json_decode($iv['spec'], true);
$iv['spec'] = (!empty($temp) && is_array($temp)) ? implode(' / ', array_column($temp, 'value')) : '';
if(!array_key_exists($iv['warehouse_goods_id'], $spec_inventory))
{
$spec_inventory[$iv['warehouse_goods_id']] = [];
}
$spec_inventory[$iv['warehouse_goods_id']][] = $iv;
}
}
// 数据处理 // 数据处理
foreach($data as &$v) foreach($data as &$v)
{ {
// 用户 // 用户
if(isset($v['user_id'])) if(array_key_exists('user_id', $v))
{ {
$v['user'] = UserService::GetUserViewInfo($v['user_id']); $v['user'] = UserService::GetUserViewInfo($v['user_id']);
} }
// 商品信息 // 商品信息
if(isset($v['goods_id'])) if(array_key_exists('goods_id', $v))
{ {
$v['goods'] = isset($goods[$v['goods_id']]) ? $goods[$v['goods_id']] : []; $v['goods'] = isset($goods[$v['goods_id']]) ? $goods[$v['goods_id']] : [];
} }
// 仓库 // 仓库
if(isset($v['warehouse_id'])) if(array_key_exists('warehouse_id', $v))
{ {
$v['warehouse_name'] = isset($warehouse[$v['warehouse_id']]) ? $warehouse[$v['warehouse_id']] : ''; $v['warehouse_name'] = isset($warehouse[$v['warehouse_id']]) ? $warehouse[$v['warehouse_id']] : '';
} }
// 规格
$v['spec'] = (empty($spec_inventory) || !array_key_exists($v['id'], $spec_inventory)) ? [] : $spec_inventory[$v['id']];
// 时间 // 时间
if(isset($v['add_time'])) if(array_key_exists('add_time', $v))
{ {
$v['add_time'] = date('Y-m-d H:i:s', $v['add_time']); $v['add_time'] = date('Y-m-d H:i:s', $v['add_time']);
} }
if(isset($v['upd_time'])) if(array_key_exists('upd_time', $v))
{ {
$v['upd_time'] = empty($v['upd_time']) ? '' : date('Y-m-d H:i:s', $v['upd_time']); $v['upd_time'] = empty($v['upd_time']) ? '' : date('Y-m-d H:i:s', $v['upd_time']);
} }
@ -146,7 +166,7 @@ class WarehouseGoodsService
*/ */
public static function WarehouseGoodsTotal($where = []) public static function WarehouseGoodsTotal($where = [])
{ {
return (int) Db::name('WarehouseGoods')->where($where)->count(); return (int) Db::name('WarehouseGoods')->alias('wg')->join('warehouse_goods_spec wgs', 'wg.id=wgs.warehouse_goods_id')->where($where)->count('distinct wg.id');
} }
/** /**

View File

@ -56,3 +56,20 @@
.goods-page-container { .goods-page-container {
height: 40px; height: 40px;
} }
/**
*
*/
.spec-inventory-list {
height: 100px;
}
.spec-inventory-list ul li .spec-name {
width: calc(100% - 75px);
}
.spec-inventory-list ul li:not(:last-child) {
border-bottom: 1px solid #eee;
padding: 3px 0;
}
.spec-inventory-list ul li:first-child {
padding-top: 0;
}