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}}
+
+
+ {{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}}
+
+
+ {{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}}
{{/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'])}}
+
+{{/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