diff --git a/app/admin/controller/Index.php b/app/admin/controller/Index.php index f09637998..389e4317b 100755 --- a/app/admin/controller/Index.php +++ b/app/admin/controller/Index.php @@ -129,9 +129,52 @@ class Index extends Common } } + // 钩子初始化 + $this->PluginsInit(); 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 diff --git a/app/admin/form/Brand.php b/app/admin/form/Brand.php index 8beb8a0f8..0021482e6 100644 --- a/app/admin/form/Brand.php +++ b/app/admin/form/Brand.php @@ -49,6 +49,7 @@ class Brand 'delete_url' => MyUrl('admin/brand/delete'), 'delete_key' => 'ids', 'detail_title' => '基础信息', + 'is_middle' => 0, ], // 表单配置 'form' => [ diff --git a/app/admin/form/Warehouse.php b/app/admin/form/Warehouse.php index ff7abc8f8..8d6a9cc2b 100644 --- a/app/admin/form/Warehouse.php +++ b/app/admin/form/Warehouse.php @@ -50,6 +50,7 @@ class Warehouse 'is_delete' => 1, 'delete_url' => MyUrl('admin/warehouse/delete'), 'delete_key' => 'ids', + 'is_middle' => 0, ], // 表单配置 'form' => [ diff --git a/app/admin/form/Warehousegoods.php b/app/admin/form/Warehousegoods.php index 290a41b7b..ff9f59737 100644 --- a/app/admin/form/Warehousegoods.php +++ b/app/admin/form/Warehousegoods.php @@ -49,6 +49,7 @@ class WarehouseGoods 'delete_url' => MyUrl('admin/warehousegoods/delete'), 'delete_key' => 'ids', 'detail_title' => '基础信息', + 'is_middle' => 0, ], // 表单配置 'form' => [ @@ -61,28 +62,30 @@ class WarehouseGoods 'width' => 80, ], [ - 'label' => '基础信息', - 'view_type' => 'module', - 'view_key' => 'warehousegoods/module/goods', - 'grid_size' => 'lg', - 'is_sort' => 1, - 'sort_field' => 'goods_id', - 'search_config' => [ + 'label' => '基础信息', + 'view_type' => 'module', + 'view_key' => 'warehousegoods/module/goods', + 'grid_size' => 'lg', + 'is_sort' => 1, + 'sort_field' => 'goods_id', + 'params_where_name' => 'goods_id', + 'search_config' => [ 'form_type' => 'input', - 'form_name' => 'id', + 'form_name' => 'wg.id', 'where_type_custom' => 'in', 'where_value_custom' => 'WhereGoodsInfo', 'placeholder' => '请输入商品名称/型号', ], ], [ - 'label' => '仓库', - 'view_type' => 'field', - 'view_key' => 'warehouse_name', - 'is_sort' => 1, + 'label' => '仓库', + 'view_type' => 'field', + 'view_key' => 'warehouse_name', + 'is_sort' => 1, + 'params_where_name' => 'warehouse_id', 'search_config' => [ 'form_type' => 'select', - 'form_name' => 'warehouse_id', + 'form_name' => 'wg.warehouse_id', 'data' => $this->WarehouseList(), 'data_key' => 'id', 'data_name' => 'name', @@ -91,15 +94,17 @@ class WarehouseGoods ], ], [ - 'label' => '是否启用', - 'view_type' => 'status', - 'view_key' => 'is_enable', - 'post_url' => MyUrl('admin/warehousegoods/statusupdate'), - 'is_form_su' => 1, - 'align' => 'center', - 'is_sort' => 1, + 'label' => '是否启用', + 'view_type' => 'status', + 'view_key' => 'is_enable', + 'post_url' => MyUrl('admin/warehousegoods/statusupdate'), + 'is_form_su' => 1, + 'align' => 'center', + 'is_sort' => 1, + 'params_where_name' => 'is_enable', 'search_config' => [ 'form_type' => 'select', + 'form_name' => 'wg.is_enable', 'where_type' => 'in', 'data' => MyConst('common_is_enable_list'), 'data_key' => 'id', @@ -108,30 +113,48 @@ class WarehouseGoods ], ], [ - 'label' => '总库存', - 'view_type' => 'field', - 'view_key' => 'inventory', - 'is_sort' => 1, + 'label' => '总库存', + 'view_type' => 'field', + 'view_key' => 'inventory', + 'is_sort' => 1, + 'params_where_name' => 'inventory', 'search_config' => [ 'form_type' => 'section', + 'form_name' => 'wg.inventory', ], ], [ - 'label' => '创建时间', - 'view_type' => 'field', - 'view_key' => 'add_time', - 'is_sort' => 1, + 'label' => '规格库存', + 'view_type' => 'module', + 'view_key' => 'warehousegoods/module/spec_inventory', + 'is_sort' => 1, + 'grid_size' => 'lg', + 'params_where_name' => 'spec_inventory', 'search_config' => [ - 'form_type' => 'datetime', + 'form_type' => 'section', + 'form_name' => 'wgs.inventory', ], ], [ - 'label' => '更新时间', - 'view_type' => 'field', - 'view_key' => 'upd_time', + 'label' => '创建时间', + 'view_type' => 'field', + '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, 'search_config' => [ 'form_type' => 'datetime', + 'form_name' => 'wg.upd_time', ], ], [ diff --git a/app/admin/view/default/index/init.html b/app/admin/view/default/index/init.html index 4d06def6d..bf9d04f08 100755 --- a/app/admin/view/default/index/init.html +++ b/app/admin/view/default/index/init.html @@ -3,6 +3,20 @@
+ + {{if isset($shopxo_is_develop) and $shopxo_is_develop eq true}} +
+ plugins_admin_view_index_init_top +
+ {{/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 !empty($site_store_info) and !empty($site_store_info['base']) and !empty($site_store_info['base']['site_top_notice'])}} @@ -48,6 +62,20 @@
{{/if}} + + {{if isset($shopxo_is_develop) and $shopxo_is_develop eq true}} +
+ plugins_admin_view_index_init_notice_top +
+ {{/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)}}
@@ -56,8 +84,36 @@
{{/if}} + + {{if isset($shopxo_is_develop) and $shopxo_is_develop eq true}} +
+ plugins_admin_view_index_init_stats_base_top +
+ {{/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($shopxo_is_develop) and $shopxo_is_develop eq true}} +
+ plugins_admin_view_index_init_stats_inside_base_top +
+ {{/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}} +
@@ -177,6 +233,20 @@
+ + {{if isset($shopxo_is_develop) and $shopxo_is_develop eq true}} +
+ plugins_admin_view_index_init_stats_inside_amount_trend_top +
+ {{/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}}
@@ -199,6 +269,20 @@
{{/if}} + + {{if isset($shopxo_is_develop) and $shopxo_is_develop eq true}} +
+ plugins_admin_view_index_init_stats_inside_order_trading_top +
+ {{/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}} +
@@ -219,6 +303,20 @@
+ + {{if isset($shopxo_is_develop) and $shopxo_is_develop eq true}} +
+ plugins_admin_view_index_init_stats_inside_compose_top +
+ {{/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}} +
  • @@ -263,6 +361,20 @@
+ + {{if isset($shopxo_is_develop) and $shopxo_is_develop eq true}} +
+ plugins_admin_view_index_init_stats_inside_region_top +
+ {{/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}} +
@@ -292,6 +404,20 @@
{{/if}} + + {{if isset($shopxo_is_develop) and $shopxo_is_develop eq true}} +
+ plugins_admin_view_index_init_system_info_top +
+ {{/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}}
    @@ -364,6 +490,20 @@
{{/if}} + + + {{if isset($shopxo_is_develop) and $shopxo_is_develop eq true}} +
+ plugins_admin_view_index_init_bottom +
+ {{/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}}
diff --git a/app/admin/view/default/warehousegoods/module/spec_inventory.html b/app/admin/view/default/warehousegoods/module/spec_inventory.html new file mode 100644 index 000000000..ac0c17cc0 --- /dev/null +++ b/app/admin/view/default/warehousegoods/module/spec_inventory.html @@ -0,0 +1,12 @@ +{{if !empty($module_data['spec']) and is_array($module_data['spec'])}} +
+
    + {{foreach $module_data.spec as $sv}} +
  • +

    {{if empty($sv['spec'])}}默认规格{{else /}}{{$sv.spec}}{{/if}}

    + {{$sv.inventory}} +
  • + {{/foreach}} +
+
+{{/if}} \ No newline at end of file diff --git a/app/module/FormHandleModule.php b/app/module/FormHandleModule.php index 90bac58ca..ce913beb7 100644 --- a/app/module/FormHandleModule.php +++ b/app/module/FormHandleModule.php @@ -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] !== '') { $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']; } // 根据组件类型处理 diff --git a/app/service/GoodsService.php b/app/service/GoodsService.php index e3476d8c5..02b436876 100755 --- a/app/service/GoodsService.php +++ b/app/service/GoodsService.php @@ -2004,7 +2004,7 @@ class GoodsService 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('商品删除失败'); } diff --git a/app/service/WarehouseGoodsService.php b/app/service/WarehouseGoodsService.php index 6360c84d1..39d8789aa 100644 --- a/app/service/WarehouseGoodsService.php +++ b/app/service/WarehouseGoodsService.php @@ -38,12 +38,12 @@ class WarehouseGoodsService public static function WarehouseGoodsList($params = []) { $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; $n = isset($params['n']) ? intval($params['n']) : 10; - $order_by = empty($params['order_by']) ? 'id desc' : trim($params['order_by']); - $data = Db::name('WarehouseGoods')->field($field)->where($where)->order($order_by)->limit($m, $n)->select()->toArray(); + $order_by = empty($params['order_by']) ? 'wg.id desc' : trim($params['order_by']); + $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)); } @@ -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) { // 用户 - if(isset($v['user_id'])) + if(array_key_exists('user_id', $v)) { $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']] : []; } // 仓库 - 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['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']); } - 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']); } @@ -146,7 +166,7 @@ class WarehouseGoodsService */ 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'); } /** diff --git a/public/static/admin/default/css/warehousegoods.css b/public/static/admin/default/css/warehousegoods.css index f7464eead..12c1ca3ca 100644 --- a/public/static/admin/default/css/warehousegoods.css +++ b/public/static/admin/default/css/warehousegoods.css @@ -56,3 +56,20 @@ .goods-page-container { 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; +} \ No newline at end of file