提交 3861d3b8 编写于 作者: D devil

去除商品库存操作,移动到仓库中管理库存

上级 04787a07
......@@ -98,7 +98,7 @@ class Warehouse extends Common
}
/**
* 文章添加/编辑页面
* 添加/编辑页面
* @author Devil
* @blog http://gong.gg/
* @version 1.0.0
......@@ -122,7 +122,7 @@ class Warehouse extends Common
$data = empty($ret['data'][0]) ? [] : $ret['data'][0];
}
// 文章编辑页面钩子
// 编辑页面钩子
$hook_name = 'plugins_view_admin_warehouse_save';
$this->assign($hook_name.'_data', Hook::listen($hook_name,
[
......@@ -146,7 +146,7 @@ class Warehouse extends Common
}
/**
* 文章添加/编辑
* 添加/编辑
* @author Devil
* @blog http://gong.gg/
* @version 1.0.0
......
......@@ -12,6 +12,8 @@ namespace app\admin\controller;
use think\facade\Hook;
use app\service\WarehouseGoodsService;
use app\service\WarehouseService;
use app\service\GoodsService;
/**
* 仓库商品管理
......@@ -74,6 +76,19 @@ class WarehouseGoods extends Common
];
$ret = WarehouseGoodsService::WarehouseGoodsList($data_params);
// 有效仓库列表
$data_params = [
'field' => 'id,name',
'where' => [
'is_enable' => 1,
],
];
$warehouse = WarehouseService::WarehouseList($data_params);
$this->assign('warehouse_list', $warehouse['data']);
// 商品分类
$this->assign('goods_category_list', GoodsService::GoodsCategoryAll());
// 基础参数赋值
$this->assign('params', $this->data_request);
$this->assign('page_html', $page->GetPageHtml());
......@@ -90,35 +105,42 @@ class WarehouseGoods extends Common
*/
public function Detail()
{
$data = [];
$spec = [];
if(!empty($this->data_request['id']))
{
// 条件
$where = [
['id', '=', intval($this->data_request['id'])],
];
// 获取列表
$data_params = [
'm' => 0,
'n' => 1,
'where' => $where,
];
$ret = WarehouseGoodsService::WarehouseGoodsList($data_params);
$data = (empty($ret['data']) || empty($ret['data'][0])) ? [] : $ret['data'][0];
$this->assign('data', $data);
// 获取规格库存
$ret = WarehouseGoodsService::WarehouseGoodsInventoryData(['id'=>intval($this->data_request['id'])]);
if($ret['code'] == 0)
{
// 规格
if(!empty($ret['data']['spec']))
{
$spec = $ret['data']['spec'];
}
// 详情数据
if(!empty($ret['data']['data']))
{
$ret = WarehouseGoodsService::DataHandle([$ret['data']['data']]);
$data = $ret[0];
}
}
}
$this->assign('spec', $spec);
$this->assign('data', $data);
return $this->fetch();
}
/**
* 文章添加/编辑页面
* 库存编辑页面
* @author Devil
* @blog http://gong.gg/
* @version 1.0.0
* @date 2020-07-11
* @desc description
*/
public function SaveInfo()
public function InventoryInfo()
{
// 参数
$params = $this->data_request;
......@@ -127,25 +149,10 @@ class WarehouseGoods extends Common
$data = [];
if(!empty($params['id']))
{
// 获取列表
$data_params = array(
'where' => ['id'=>intval($params['id'])],
);
$ret = WarehouseGoodsService::WarehouseList($data_params);
$data = empty($ret['data'][0]) ? [] : $ret['data'][0];
$ret = WarehouseGoodsService::WarehouseGoodsInventoryData($params);
$data = empty($ret['data']) ? [] : $ret['data'];
}
// 文章编辑页面钩子
$hook_name = 'plugins_view_admin_warehouse_goods_save';
$this->assign($hook_name.'_data', Hook::listen($hook_name,
[
'hook_name' => $hook_name,
'is_backend' => true,
'warehouse_id' => isset($params['id']) ? $params['id'] : 0,
'data' => &$data,
'params' => &$params,
]));
// 数据
$this->assign('data', $data);
$this->assign('params', $params);
......@@ -153,14 +160,14 @@ class WarehouseGoods extends Common
}
/**
* 文章添加/编辑
* 库存编辑
* @author Devil
* @blog http://gong.gg/
* @version 1.0.0
* @date 2020-07-11
* @desc description
*/
public function Save()
public function InventorySave()
{
// 是否ajax请求
if(!IS_AJAX)
......@@ -170,7 +177,7 @@ class WarehouseGoods extends Common
// 开始处理
$params = $this->data_request;
return WarehouseGoodsService::WarehouseSave($params);
return WarehouseGoodsService::WarehouseGoodsInventorySave($params);
}
/**
......@@ -216,5 +223,73 @@ class WarehouseGoods extends Common
$params['admin'] = $this->admin;
return WarehouseGoodsService::WarehouseGoodsStatusUpdate($params);
}
/**
* 商品搜索
* @author Devil
* @blog http://gong.gg/
* @version 1.0.0
* @date 2020-07-13
* @desc description
*/
public function GoodsSearch()
{
// 是否ajax请求
if(!IS_AJAX)
{
return $this->error('非法访问');
}
// 搜索数据
$ret = WarehouseGoodsService::GoodsSearchList($this->data_request);
if($ret['code'] == 0)
{
$this->assign('data', $ret['data']['data']);
$ret['data']['data'] = $this->fetch();
}
return $ret;
}
/**
* 仓库商品添加
* @author Devil
* @blog http://gong.gg/
* @version 1.0.0
* @date 2020-07-14
* @desc description
*/
public function GoodsAdd()
{
// 是否ajax请求
if(!IS_AJAX)
{
return $this->error('非法访问');
}
// 开始处理
$params = $this->data_request;
return WarehouseGoodsService::WarehouseGoodsAdd($params);
}
/**
* 仓库商品删除
* @author Devil
* @blog http://gong.gg/
* @version 1.0.0
* @date 2020-07-14
* @desc description
*/
public function GoodsDel()
{
// 是否ajax请求
if(!IS_AJAX)
{
return $this->error('非法访问');
}
// 开始处理
$params = $this->data_request;
return WarehouseGoodsService::WarehouseGoodsDel($params);
}
}
?>
\ No newline at end of file
......@@ -104,6 +104,14 @@ class Warehousegoods
'is_multiple' => 1,
],
],
[
'label' => '总库存',
'view_type' => 'field',
'view_key' => 'inventory',
'search_config' => [
'form_type' => 'section',
],
],
[
'label' => '创建时间',
'view_type' => 'field',
......
......@@ -246,10 +246,6 @@
<label class="block">销售价格</label>
<input type="text" placeholder="价格" class="am-radius popup_all_price" pattern="^([0-9]{1}\d{0,6})(\.\d{1,2})?$" data-validation-message="请填写有效的销售金额" />
</div>
<div class="am-form-group">
<label class="block">库存</label>
<input type="number" placeholder="库存" class="am-radius popup_all_number" min="0" max="100000000" pattern="^-?(?:\d+|\d{1,3}(?:,\d{3})+)?(?:\.\d+)?$" data-validation-message="库存数量 0~100000000" />
</div>
<div class="am-form-group">
<label class="block">重量</label>
<input type="number" placeholder="重量" class="am-radius popup_all_weight" maxlength="80" min="0.00" max="100000000.00" step="0.01" data-validation-message="规格重量 0.00~100000000.00" />
......@@ -307,10 +303,6 @@
<span>价格(元)</span>
<i class="am-icon-edit"></i>
</th>
<th>
<span>库存</span>
<i class="am-icon-edit"></i>
</th>
<th>
<span>重量(kg)</span>
<i class="am-icon-edit"></i>
......@@ -337,9 +329,6 @@
<td class="value-start">
<input type="text" name="specifications_price[]" placeholder="价格" class="am-radius" pattern="^([0-9]{1}\d{0,6})(\.\d{1,2})?$" data-validation-message="请填写有效的销售金额" required />
</td>
<td>
<input type="number" name="specifications_number[]" placeholder="库存" class="am-radius" min="0" max="100000000" pattern="^-?(?:\d+|\d{1,3}(?:,\d{3})+)?(?:\.\d+)?$" data-validation-message="库存数量 0~100000000" required />
</td>
<td>
<input type="number" name="specifications_weight[]" placeholder="重量" class="am-radius" maxlength="80" min="0.00" max="100000000.00" step="0.01" data-validation-message="规格重量 0.00~100000000.00" />
</td>
......@@ -378,9 +367,6 @@
<td class="value-start">
<input type="text" name="specifications_price[]" placeholder="价格" class="am-radius" pattern="^([0-9]{1}\d{0,6})(\.\d{1,2})?$" data-validation-message="请填写有效的销售金额" value="{{$v.data.price}}" required />
</td>
<td>
<input type="number" name="specifications_number[]" placeholder="库存" class="am-radius" min="0" max="100000000" data-validation-message="库存数量 0~100000000" value="{{$v.data.inventory}}" required />
</td>
<td>
<input type="number" name="specifications_weight[]" placeholder="重量" class="am-radius" min="0.00" max="100000000.00" step="0.01" data-validation-message="规格重量 0.00~100000000.00" value="{{if $v['data']['weight'] gt 0}}{{$v.data.weight}}{{/if}}" />
</td>
......
......@@ -3,11 +3,7 @@
<i class="am-icon-eye"></i>
<span>详情</span>
</button>
<a class="am-btn am-btn-primary am-btn-xs am-radius am-btn-block" href="{{:MyUrl('admin/warehouse/goods', array('id'=>$module_data['id']))}}">
<i class="am-icon-opencart"></i>
<span>商品</span>
</a>
<a class="am-btn am-btn-secondary am-btn-xs am-radius am-btn-block" href="{{:MyUrl('admin/warehouse/saveinfo', array('wid'=>$module_data['id']))}}">
<a class="am-btn am-btn-secondary am-btn-xs am-radius am-btn-block" href="{{:MyUrl('admin/warehouse/saveinfo', ['wid'=>$module_data['id']])}}">
<i class="am-icon-edit"></i>
<span>编辑</span>
</a>
......
......@@ -8,9 +8,33 @@
<!-- 规格 -->
<div class="am-panel am-panel-default">
<div class="am-panel-hd">规格</div>
<div class="am-panel-hd">规格库存</div>
<div class="am-panel-bd">
hello
{{if !empty($spec)}}
<table class="am-table am-table-striped am-table-hover form-inventory-container">
<thead>
<tr>
<th>规格</th>
<th>库存</th>
</tr>
</thead>
<tbody>
{{foreach $spec as $v}}
<tr>
<td>{{$v.name}}</td>
<td>
{{if empty($v['inventory'])}}
<span class="am-text-grey"></span>
{{else /}}
{{$v.inventory}}
{{/if}}
</tr>
{{/foreach}}
</tbody>
</table>
{{else /}}
<div class="table-no"><i class="am-icon-warning"></i> 无规格库存数据</div>
{{/if}}
</div>
</div>
{{/block}}
\ No newline at end of file
{{if !empty($data)}}
<ul class="am-gallery am-avg-sm-2 am-avg-md-4 am-avg-lg-4 am-gallery-bordered">
{{foreach $data as $v}}
<li data-gid="{{$v.id}}" data-add-html='<a href="javascript:;" class="am-icon-btn am-icon-plus am-success goods-add-submit" data-type="add"></a>' data-del-html='<a href="javascript:;" class="am-icon-btn am-icon-remove am-danger goods-del-submit" data-type="del"></a>'>
<div class="am-gallery-item am-radius">
<a href="{{$v.goods_url}}" target="_blank" title="{{$v.title}}">
<img src="{{$v.images}}" alt="{{$v.title}}" />
</a>
<h3 class="am-gallery-title">{{$v.title}}</h3>
<div class="icon-submit-container">
{{if isset($v['is_exist']) and $v['is_exist'] eq 1}}
<a href="javascript:;" class="am-icon-btn am-icon-remove am-danger goods-del-submit" data-type="del"></a>
{{else /}}
<a href="javascript:;" class="am-icon-btn am-icon-plus am-success goods-add-submit" data-type="add"></a>
{{/if}}
</div>
</div>
</li>
{{/foreach}}
</ul>
{{else /}}
<div class="table-no"><i class="am-icon-warning"></i> 没有相关商品</div>
{{/if}}
\ No newline at end of file
{{if !empty($goods)}}
<div class="am-margin-bottom-sm" data-old-price="{{$goods.price}}">
<strong class="am-text-danger am-text-lg goods-price">{{$price_symbol}}{{$goods.price}}</strong>
{{if !empty($goods['original_price']) and $goods['original_price'] gt 0}}
<span class="am-margin-left-xs goods-original-price" data-old-price="{{$goods.original_price}}">{{$price_symbol}}{{$goods.original_price}}</span>
{{/if}}
</div>
<div class="goods-spec am-margin-top-sm" data-id="{{$goods.id}}">
{{if !empty($goods['specifications']['choose'])}}
{{foreach $goods.specifications.choose as $key=>$spec}}
{{if !empty($spec['value'])}}
<div class="spec-options sku-items">
<div class="spec-title">{{$spec.name}}</div>
<ul>
{{foreach $spec.value as $keys=>$specs}}
<li class="sku-line {{if !empty($specs['images'])}} sku-line-images{{/if}}" data-type-value="{{$spec.name}}" data-value="{{$specs.name}}" {{if !empty($specs['images'])}} data-type-images="{{$specs.images}}"{{/if}}>
{{if !empty($specs['images'])}}
<img src="{{$specs.images}}" />
{{/if}}
{{$specs.name}}<i></i>
</li>
{{/foreach}}
</ul>
</div>
{{/if}}
{{/foreach}}
{{/if}}
</div>
<div class="am-margin-top-sm">
<div class="spec-title number">库存</div>
<div class="inventory-number am-margin-top-sm">
<div class="am-input-group am-input-group-sm inventory-container">
<button class="am-input-group-label" id="min" type="button">-</button>
<input type="number" class="am-form-field" value="0" id="inventory-value" />
<button class="am-input-group-label" id="add" type="button">+</button>
</div>
<span class="inventory-unit">{{$goods.inventory_unit}}</span>
</div>
</div>
{{else /}}
<div class="table-no"><i class="am-icon-warning"></i> 没有相关商品</div>
{{/if}}
\ No newline at end of file
......@@ -3,7 +3,64 @@
<!-- 表单顶部操作栏 -->
{{block name="form_operate_top"}}
<a href="{{:MyUrl('admin/warehousegoods/saveinfo')}}" class="am-btn am-btn-secondary am-radius am-btn-xs am-icon-plus"> 新增</a>
<button type="button" class="am-btn am-btn-secondary am-radius am-btn-xs am-icon-plus add-goods-submit"> 添加</button>
<!-- 父级内容 -->
{__block__}
{{/block}}
<!-- 公共代码 -->
{{block name="form_page_bottom"}}
<!-- 商品添加弹窗 -->
<div class="am-popup" id="warehouse-goods-popup">
<div class="am-popup-inner">
<div class="am-popup-hd">
<h4 class="am-popup-title">商品添加</h4>
<span data-am-modal-close
class="am-close">&times;</span>
</div>
<div class="am-popup-bd am-padding-0">
<form class="am-form am-padding-sm goods-add-container">
<!-- 搜索 -->
<div class="forth-selection-container" data-search-url="{{:MyUrl('admin/warehousegoods/goodssearch')}}">
<select class="am-radius chosen-select forth-selection-form-warehouse" data-placeholder="仓库..." data-validation-message="请选择仓库">
<option value="">仓库...</option>
{{if !empty($warehouse_list)}}
{{foreach $warehouse_list as $v}}
<option value="{{$v.id}}">{{$v.name}}</option>
{{/foreach}}
{{/if}}
</select>
<select class="am-radius chosen-select forth-selection-form-category" data-placeholder="商品分类..." data-validation-message="请选择商品分类">
<option value="">商品分类...</option>
{{if !empty($goods_category_list)}}
{{foreach $goods_category_list as $v}}
<option value="{{$v.id}}">一级 - {{$v.name}}</option>
{{if !empty($v['items'])}}
{{foreach $v.items as $vs}}
<option style="padding-left: 15px;" value="{{$vs.id}}">二级 - {{$vs.name}}</option>
{{if !empty($vs['items'])}}
{{foreach $vs.items as $vss}}
<option style="padding-left: 30px;" value="{{$vss.id}}">三级 - {{$vss.name}}</option>
{{/foreach}}
{{/if}}
{{/foreach}}
{{/if}}
{{/foreach}}
{{/if}}
</select>
<input type="text" placeholder="商品名称" class="am-radius forth-selection-form-keywords" />
<button type="button" class="am-btn am-btn-secondary am-radius am-btn-sm am-icon-search search-submit" data-am-loading="{loadingText: ' 搜索中...'}"> 搜索</button>
</div>
<!-- 商品列表 -->
<div class="am-scrollable-vertical am-margin-top-sm am-padding-bottom-xs goods-list-container" data-loading-msg="搜索中..." data-add-url="{{:MyUrl('admin/warehousegoods/goodsadd')}}" data-del-url="{{:MyUrl('admin/warehousegoods/goodsdel')}}">
<div class="table-no"><i class="am-icon-warning"></i> 请搜索商品</div>
</div>
<!-- 分页 -->
<div class="am-margin-top-sm am-text-center goods-page-container"></div>
</form>
</div>
</div>
</div>
{{/block}}
\ No newline at end of file
{{include file="public/header" /}}
<!-- right content start -->
<div class="content-right">
<div class="content">
{{if !empty($data['spec'])}}
<!-- form start -->
<form class="am-form form-validation" action="{{:MyUrl('admin/warehousegoods/inventorysave')}}" method="POST" request-type="ajax-fun" request-value="ViewModalBack">
<table class="am-table am-table-striped am-table-hover form-inventory-container">
<thead>
<tr>
<th>规格</th>
<th>库存</th>
</tr>
</thead>
<tbody>
{{foreach $data.spec as $v}}
<tr>
<td>{{$v.name}}</td>
<td>
<input type="number" name="specifications_inventory[]" value="{{if !empty($v['inventory'])}}{{$v.inventory}}{{/if}}" placeholder="库存" class="am-radius" min="0" max="100000000" pattern="^-?(?:\d+|\d{1,3}(?:,\d{3})+)?(?:\.\d+)?$" data-validation-message="库存数量 0~100000000" />
<input type="hidden" name="specifications_md5_key[]" value="{{$v.md5_key}}" />
<input type="hidden" name="specifications_spec[]" value="{{$v.spec}}" />
</td>
</tr>
{{/foreach}}
</tbody>
</table>
<div class="form-inventory-submit">
<input type="hidden" name="id" {{if !empty($data['data'])}} value="{{$data.data.id}}"{{/if}} />
<button type="submit" class="am-btn am-btn-primary am-radius btn-loading-example am-btn-sm am-btn-block" data-am-loading="{loadingText:'处理中...'}">保存</button>
</div>
</form>
<!-- form end -->
{{else /}}
<div class="table-no"><i class="am-icon-warning"></i> 无规格数据</div>
{{/if}}
</div>
</div>
<!-- right content end -->
<!-- footer start -->
{{include file="public/footer" /}}
<!-- footer end -->
<script type="text/javascript">
// 返回处理
function ViewModalBack(e)
{
$(function()
{
if(e.code == 0)
{
$.AMUI.progress.done();
Prompt(e.msg, 'success');
setTimeout(function()
{
// 关闭弹窗
$(window.parent.document).find('.warehouse-goods-popup .am-close').trigger('click');
}, 1500);
} else {
$('form.form-validation').find('button[type="submit"]').button('reset');
$.AMUI.progress.done();
Prompt(e.msg);
}
});
}
</script>
\ No newline at end of file
......@@ -3,10 +3,10 @@
<i class="am-icon-eye"></i>
<span>详情</span>
</button>
<a class="am-btn am-btn-secondary am-btn-xs am-radius am-btn-block" href="{{:MyUrl('admin/warehousegoods/saveinfo', array('wid'=>$module_data['id']))}}">
<i class="am-icon-edit"></i>
<span>编辑</span>
</a>
<button type="button" class="am-btn am-btn-secondary am-btn-xs am-radius am-btn-block submit-popup" data-url="{{:MyUrl('admin/warehousegoods/inventoryinfo', ['id'=>$module_data['id']])}}" data-class="warehouse-goods-popup">
<i class="am-icon-square-o"></i>
<span>库存</span>
</button>
<button type="button" class="am-btn am-btn-danger am-btn-xs am-radius am-btn-block submit-delete" data-url="{{:MyUrl('admin/warehousegoods/delete')}}" data-id="{{$module_data.id}}" data-key="ids">
<i class="am-icon-trash-o"></i>
<span>删除</span>
......
{{include file="public/header" /}}
<!-- right content start -->
<div class="content-right">
<div class="content">
<!-- form start -->
<form class="am-form form-validation view-save" action="{{:MyUrl('admin/warehouse/save')}}" method="POST" request-type="ajax-url" request-value="{{:MyUrl('admin/warehouse/index', $params)}}">
<legend>
<span class="am-text-default">仓库{{if empty($data['id'])}}添加{{else /}}编辑{{/if}}</span>
<a href="{{:MyUrl('admin/warehouse/index', $params)}}" class="am-fr am-text-sm am-margin-top-xs am-icon-mail-reply"> 返回</a>
</legend>
<div class="am-form-group">
<label>名称<span class="am-form-group-label-tips-must">必填</span></label>
<input type="text" name="name" placeholder="名称" minlength="2" maxlength="16" data-validation-message="名称格式 2~16 个字符之间" class="am-radius" {{if !empty($data)}} value="{{$data.name}}"{{/if}} required />
</div>
<div class="am-form-group">
<label>别名<span class="am-form-group-label-tips">选填</span></label>
<input type="text" name="alias" placeholder="别名" minlength="0" maxlength="16" data-validation-message="别名格式最多 16 个字符" class="am-radius" {{if !empty($data)}} value="{{$data.alias}}"{{/if}} />
</div>
<div class="am-form-group">
<label>权重<span class="am-form-group-label-tips">选填</span></label>
<input type="number" name="level" placeholder="权重" minlength="0" maxlength="16" data-validation-message="请输入有效权重数值" class="am-radius" {{if !empty($data)}} value="{{$data.level}}"{{/if}} />
</div>
<div class="am-form-group">
<label>联系人<span class="am-form-group-label-tips-must">必填</span></label>
<input type="text" name="contacts_name" placeholder="联系人" minlength="2" maxlength="16" data-validation-message="联系人格式 2~16 个字符之间" class="am-radius" {{if !empty($data)}} value="{{$data.contacts_name}}"{{/if}} required />
</div>
<div class="am-form-group">
<label>联系电话<span class="am-form-group-label-tips-must">必填</span></label>
<input type="text" name="contacts_tel" placeholder="电话" minlength="6" maxlength="30" data-validation-message="电话格式有误" class="am-radius" {{if !empty($data)}} value="{{$data.contacts_tel}}"{{/if}} required />
</div>
{{include file="lib/region_linkage" /}}
<div class="am-form-group">
<label>详细地址<span class="am-form-group-label-tips-must">必填</span></label>
<div class="am-input-group am-input-group-sm">
<input type="hidden" name="lng" id="form-lng" {{if !empty($data)}} value="{{$data.lng}}"{{/if}} />
<input type="hidden" name="lat" id="form-lat" {{if !empty($data)}} value="{{$data.lat}}"{{/if}} />
<input type="text" name="address" id="form-address" placeholder="详细地址" minlength="2" maxlength="80" data-validation-message="详细地址格式 1~80 个字符之间" class="am-radius" {{if !empty($data)}} value="{{$data.address}}"{{/if}} required />
<span class="am-input-group-btn">
<button class="am-btn am-btn-default am-radius" type="button" id="map-location-submit"><span class="am-icon-map-marker"></span> 定位</button>
</span>
</div>
<div id="map" data-level="17" class="am-margin-top-xs"></div>
</div>
<div class="am-form-group">
<label class="block">是否默认</label>
<input name="is_default" value="1" type="checkbox" data-off-text="否" data-on-text="是" data-size="xs" data-on-color="success" data-off-color="default" data-handle-width="49" data-am-switch {{if isset($data['is_default']) and $data['is_default'] eq 1}}checked="true"{{/if}} />
</div>
<div class="am-form-group">
<label class="block">是否启用</label>
<input name="is_enable" value="1" type="checkbox" data-off-text="否" data-on-text="是" data-size="xs" data-on-color="success" data-off-color="default" data-handle-width="49" data-am-switch {{if isset($data['is_enable']) and $data['is_enable'] eq 1}}checked="true"{{/if}} />
</div>
<div class="am-form-group am-form-group-refreshing">
<input type="hidden" name="id" {{if !empty($data)}} value="{{$data.id}}"{{/if}} />
<button type="submit" class="am-btn am-btn-primary am-radius btn-loading-example am-btn-sm am-btn-block" data-am-loading="{loadingText:'处理中...'}">保存</button>
</div>
</form>
<!-- form end -->
</div>
</div>
<!-- right content end -->
<!-- footer start -->
{{include file="public/footer" /}}
<!-- footer end -->
<script type="text/javascript">
$(function()
{
// 百度地图初始化
MapInit({{if !empty($data['lng'])}}{{$data['lng']}}{{else /}}116.400244{{/if}},{{if !empty($data['lat'])}}{{$data['lat']}}{{else /}}39.92556{{/if}});
});
</script>
\ No newline at end of file
......@@ -11,6 +11,50 @@
// 应用公共文件
/**
* 笛卡尔积生成规格
* @author Devil
* @blog http://gong.gg/
* @version 1.0.0
* @date 2020-07-15
* @desc description
* @param [array] $arr1 [要进行笛卡尔积的二维数组]
* @param [array] $arr2 [最终实现的笛卡尔积组合,可不传]
*/
function SpecCartesian($arr1, $arr2 = [])
{
$result = [];
if(!empty($arr1))
{
// 去除第一个元素
$first = array_splice($arr1, 0, 1);
// 判断是否是第一次进行拼接
if(count($arr2) > 0)
{
foreach($arr2 as $v)
{
foreach($first[0] as $vs)
{
$result[] = $v.','.$vs;
}
}
} else {
foreach($first[0] as $vs)
{
$result[] = $vs;
}
}
// 递归进行拼接
if(count($arr1) > 0)
{
$result = SpecCartesian($arr1, $result);
}
}
return $result;
}
/**
* 后台管理权限校验方法
* @author Devil
......
......@@ -139,7 +139,7 @@ class Orderaftersale extends Common
// 编辑器文件存放地址
$this->assign('editor_path_type', 'order_aftersale-'.$this->user['id'].'-'.$order_id.'-'.$order_detail_id);
$this->assign('aftersale_search_keywords_name', 'fp0');
$this->assign('form_search_keywords_name', 'fp0');
$this->assign('params', $this->data_request);
return $this->fetch();
} else {
......
......@@ -112,7 +112,7 @@
<!-- 拒绝/关闭 -->
{{if isset($new_aftersale_data['status']) and $new_aftersale_data['status'] eq 5}}
<div class="am-alert am-alert-warning">
{{$new_aftersale_data.tips_msg}}<a href="{{:MyUrl('index/orderaftersale/index', [$aftersale_search_keywords_name=>$new_aftersale_data['order_no']])}}">查看售后订单</a>
{{$new_aftersale_data.tips_msg}}<a href="{{:MyUrl('index/orderaftersale/index', [$form_search_keywords_name=>$new_aftersale_data['order_no']])}}">查看售后订单</a>
</div>
{{/if}}
......@@ -149,7 +149,7 @@
{{case 0|1|2}}
{{if $new_aftersale_data['status'] eq 1 and $new_aftersale_data['type'] eq 1}}
<div class="am-alert">
{{$new_aftersale_data.tips_msg}}<a href="{{:MyUrl('index/orderaftersale/index', [$aftersale_search_keywords_name=>$new_aftersale_data['order_no']])}}">查看售后订单</a>
{{$new_aftersale_data.tips_msg}}<a href="{{:MyUrl('index/orderaftersale/index', [$form_search_keywords_name=>$new_aftersale_data['order_no']])}}">查看售后订单</a>
<button type="button" class="am-btn am-btn-primary am-radius am-margin-left-sm orderaftersale-delivery-submit" data-am-modal="{target: '#popup-orderaftersale-delivery'}" data-is-auto-delivery="{{if isset($params['isautodelivery'])}}{{$params.isautodelivery}}{{else /}}0{{/if}}">立即退货</button>
</div>
<div class="am-alert am-alert-warning">
......@@ -159,14 +159,14 @@
{{include file="orderaftersale/delivery" /}}
{{else /}}
<div class="am-alert">
{{$new_aftersale_data.tips_msg}}<a href="{{:MyUrl('index/orderaftersale/index', [$aftersale_search_keywords_name=>$new_aftersale_data['order_no']])}}">查看售后订单</a>
{{$new_aftersale_data.tips_msg}}<a href="{{:MyUrl('index/orderaftersale/index', [$form_search_keywords_name=>$new_aftersale_data['order_no']])}}">查看售后订单</a>
</div>
{{/if}}
{{/case}}
{{case 3|4}}
<div class="am-alert {{if $new_aftersale_data['status'] eq 3}} am-alert-success{{else /}} am-alert-danger{{/if}}">
{{$new_aftersale_data.tips_msg}}<a href="{{:MyUrl('index/orderaftersale/index', [$aftersale_search_keywords_name=>$new_aftersale_data['order_no']])}}">查看售后订单</a>
{{$new_aftersale_data.tips_msg}}<a href="{{:MyUrl('index/orderaftersale/index', [$form_search_keywords_name=>$new_aftersale_data['order_no']])}}">查看售后订单</a>
</div>
{{/case}}
{{/switch}}
......
......@@ -15,6 +15,7 @@ use think\facade\Hook;
use app\service\ResourcesService;
use app\service\BrandService;
use app\service\RegionService;
use app\service\WarehouseGoodsService;
/**
* 商品服务层
......@@ -446,7 +447,7 @@ class GoodsService
// 获取规格
if($is_spec && !empty($v['id']))
{
$v['specifications'] = self::GoodsSpecifications(['goods_id'=>$v['id']]);
$v['specifications'] = self::GoodsSpecifications($v['id']);
}
// 获取app内容
......@@ -504,18 +505,18 @@ class GoodsService
}
/**
* 获取商品属性
* @author Devil
* 获取商品规格
* @author Devil
* @blog http://gong.gg/
* @version 1.0.0
* @date 2018-08-29
* @date 2020-07-16
* @desc description
* @param [array] $params [输入参数]
* @param [int] $goods_id [商品id]
*/
public static function GoodsSpecifications($params = [])
public static function GoodsSpecifications($goods_id)
{
// 条件
$where = ['goods_id'=>$params['goods_id']];
$where = ['goods_id'=>$goods_id];
// 规格类型
$choose = Db::name('GoodsSpecType')->where($where)->order('id asc')->select();
......@@ -539,7 +540,7 @@ class GoodsService
foreach($choose[0]['value'] as &$temp_spec)
{
$temp_spec_params = [
'id' => $params['goods_id'],
'id' => $goods_id,
'spec' => [
['type' => $choose[0]['name'], 'value' => $temp_spec['name']]
],
......@@ -556,6 +557,65 @@ class GoodsService
return ['choose'=>$choose];
}
/**
* 商品规格简洁的数据处理
* @author Devil
* @blog http://gong.gg/
* @version 1.0.0
* @date 2020-07-15
* @desc description
* @param [array] $data [规格数据]
*/
public static function GoodsSpecificationsConcise($data)
{
$result = [];
if(!empty($data))
{
foreach($data as $v)
{
$result[] = array_column($v['value'], 'name');
}
}
return $result;
}
/**
* 获取商品当前实际存在的规格
* @author Devil
* @blog http://gong.gg/
* @version 1.0.0
* @date 2020-07-16
* @desc description
* @param [int] $goods_id [商品id]
*/
public static function GoodsSpecificationsActual($goods_id)
{
// 规格名称
$where = ['goods_id'=>$goods_id];
$title = Db::name('GoodsSpecType')->where($where)->column('name');
// 规格值
$value = Db::name('GoodsSpecValue')->where($where)->field('goods_spec_base_id,value')->select();
if(!empty($value))
{
$group = [];
foreach($value as $v)
{
$group[$v['goods_spec_base_id']][] = $v['value'];
}
$value = [];
foreach($group as $v)
{
$value[] = implode(',', $v);
}
}
return [
'title' => $title,
'value' => $value,
];
}
/**
* 商品访问统计加1
* @author Devil
......@@ -903,7 +963,7 @@ class GoodsService
$images = [];
// 基础字段数据字段长度
$base_count = 7;
$base_count = 6;
// 规格值
foreach($params as $k=>$v)
......@@ -1291,7 +1351,7 @@ class GoodsService
{
// 基础字段
$count = count($data['data'][0]);
$temp_key = ['price', 'inventory', 'weight', 'coding', 'barcode', 'original_price', 'extends'];
$temp_key = ['price', 'weight', 'coding', 'barcode', 'original_price', 'extends'];
$key_count = count($temp_key);
// 等于key总数则只有一列基础规格
......@@ -1305,6 +1365,10 @@ class GoodsService
{
$temp_data[$temp_key[$i]] = $data['data'][0][$i];
}
// 获取仓库规格库存
$temp_data['inventory'] = WarehouseGoodsService::GoodsSpecInventory($goods_id);
// 规格基础添加
if(Db::name('GoodsSpecBase')->insertGetId($temp_data) <= 0)
{
......@@ -1336,6 +1400,9 @@ class GoodsService
$temp_data[$temp_key[$i-$base_start]] = $v[$i];
}
}
// 获取仓库规格库存
$temp_data['inventory'] = WarehouseGoodsService::GoodsSpecInventory($goods_id, implode('', array_column($temp_value, 'value')));
// 规格基础添加
$base_id = Db::name('GoodsSpecBase')->insertGetId($temp_data);
......
......@@ -123,11 +123,11 @@ class SearchService
{
$order_by = 'g.'.$params['order_by_field'].' '.$params['order_by_type'];
} else {
$order_by = 'g.access_count desc, g.sales_count desc';
$order_by = 'g.access_count desc, g.sales_count desc, g.add_time desc';
}
// 分页计算
$page = intval(input('page', 1));
$page = max(1, isset($params['page']) ? intval($params['page']) : 1);
$n = 20;
$m = intval(($page-1)*$n);
$goods = GoodsService::CategoryGoodsList(['where'=>$where, 'm'=>$m, 'n'=>$n, 'order_by'=>$order_by]);
......
......@@ -21,7 +21,7 @@ use app\service\UserService;
* @author Devil
* @blog http://gong.gg/
* @version 1.0.0
* @date 2020-07-07
* @date 2020-07-11
* @desc description
*/
class WarehouseGoodsService
......@@ -43,6 +43,21 @@ class WarehouseGoodsService
$n = isset($params['n']) ? intval($params['n']) : 10;
$order_by = 'id desc';
$data = Db::name('WarehouseGoods')->field($field)->where($where)->order($order_by)->limit($m, $n)->select();
return DataReturn('处理成功', 0, self::DataHandle($data));
}
/**
* 数据处理
* @author Devil
* @blog http://gong.gg/
* @version 1.0.0
* @date 2020-07-16
* @desc description
* @param [array] $data [需要处理的数据]
*/
public static function DataHandle($data)
{
if(!empty($data))
{
// 字段列表
......@@ -107,7 +122,7 @@ class WarehouseGoodsService
}
}
}
return DataReturn('处理成功', 0, $data);
return $data;
}
/**
......@@ -129,7 +144,7 @@ class WarehouseGoodsService
* @author Devil
* @blog http://gong.gg/
* @version 1.0.0
* @date 2018-12-18
* @date 2018-07-11
* @desc description
* @param [array] $params [输入参数]
*/
......@@ -160,7 +175,7 @@ class WarehouseGoodsService
* @author Devil
* @blog http://gong.gg/
* @version 1.0.0
* @date 2020-07-07
* @date 2020-07-11
* @desc description
* @param [array] $params [输入参数]
*/
......@@ -198,5 +213,514 @@ class WarehouseGoodsService
}
return DataReturn('编辑失败', -100);
}
/**
* 商品搜索
* @author Devil
* @blog http://gong.gg/
* @version 1.0.0
* @date 2020-07-13
* @desc description
* @param [array] $params [输入参数]
*/
public static function GoodsSearchList($params = [])
{
// 请求参数
$p = [
[
'checked_type' => 'empty',
'key_name' => 'warehouse_id',
'error_msg' => '仓库id有误',
],
];
$ret = ParamsChecked($params, $p);
if($ret !== true)
{
return DataReturn($ret, -1);
}
// 返回数据
$result = [
'page_total' => 0,
'page_size' => 20,
'page' => max(1, isset($params['page']) ? intval($params['page']) : 1),
'total' => 0,
'data' => [],
];
// 条件
$where = [
['g.is_delete_time', '=', 0],
['g.is_shelves', '=', 1]
];
// 关键字
if(!empty($params['keywords']))
{
$where[] = ['g.title', 'like', '%'.$params['keywords'].'%'];
}
// 分类id
if(!empty($params['category_id']))
{
$category_ids = GoodsService::GoodsCategoryItemsIds([$params['category_id']], 1);
$category_ids[] = $params['category_id'];
$where[] = ['gci.category_id', 'in', $category_ids];
}
// 获取商品总数
$result['total'] = GoodsService::CategoryGoodsTotal($where);
// 获取商品列表
if($result['total'] > 0)
{
// 基础参数
$field = 'g.id,g.title,g.images';
$order_by = 'g.id desc';
// 分页计算
$m = intval(($result['page']-1)*$result['page_size']);
$goods = GoodsService::CategoryGoodsList(['where'=>$where, 'm'=>$m, 'n'=>$result['page_size'], 'field'=>$field, 'order_by'=>$order_by]);
$result['data'] = $goods['data'];
$result['page_total'] = ceil($result['total']/$result['page_size']);
// 数据处理
if(!empty($result['data']) && is_array($result['data']))
{
// 获取仓库商品
$warehouse_goods_ids = Db::name('WarehouseGoods')->where(['goods_id'=>array_column($result['data'], 'id')])->column('goods_id');
if(!empty($warehouse_goods_ids))
{
foreach($result['data'] as &$v)
{
// 是否已添加
$v['is_exist'] = in_array($v['id'], $warehouse_goods_ids) ? 1 : 0;
}
}
}
}
return DataReturn('处理成功', 0, $result);
}
/**
* 仓库商品添加
* @author Devil
* @blog http://gong.gg/
* @version 1.0.0
* @date 2020-07-14
* @desc description
* @param [array] $params [输入参数]
*/
public static function WarehouseGoodsAdd($params = [])
{
// 请求参数
$p = [
[
'checked_type' => 'empty',
'key_name' => 'warehouse_id',
'error_msg' => '仓库id有误',
],
[
'checked_type' => 'empty',
'key_name' => 'goods_id',
'error_msg' => '商品id有误',
],
];
$ret = ParamsChecked($params, $p);
if($ret !== true)
{
return DataReturn($ret, -1);
}
// 存在则校验状态并且启用
// 不存在添加
$where = [
'goods_id' => intval($params['goods_id']),
'warehouse_id' => intval($params['warehouse_id']),
];
$warehouse_goods = Db::name('WarehouseGoods')->where($where)->find();
if(empty($warehouse_goods))
{
$data = [
'warehouse_id' => intval($params['warehouse_id']),
'goods_id' => intval($params['goods_id']),
'is_enable' => 1,
'add_time' => time(),
];
if(Db::name('WarehouseGoods')->insertGetId($data) <= 0)
{
return DataReturn('添加失败', -100);
}
}
return DataReturn('添加成功', 0);
}
/**
* 仓库商品删除
* @author Devil
* @blog http://gong.gg/
* @version 1.0.0
* @date 2020-07-14
* @desc description
* @param [array] $params [输入参数]
*/
public static function WarehouseGoodsDel($params = [])
{
// 请求参数
$p = [
[
'checked_type' => 'empty',
'key_name' => 'warehouse_id',
'error_msg' => '仓库id有误',
],
[
'checked_type' => 'empty',
'key_name' => 'goods_id',
'error_msg' => '商品id有误',
],
];
$ret = ParamsChecked($params, $p);
if($ret !== true)
{
return DataReturn($ret, -1);
}
// 删除仓库商品和仓库商品规格数据
$where = [
'goods_id' => intval($params['goods_id']),
'warehouse_id' => intval($params['warehouse_id']),
];
if(Db::name('WarehouseGoods')->where($where)->delete() !== false && Db::name('WarehouseGoodsSpec')->where($where)->delete() !== false)
{
return DataReturn('删除成功', 0);
}
return DataReturn('删除失败', -100);
}
/**
* 仓库商品库存数据
* @author Devil
* @blog http://gong.gg/
* @version 1.0.0
* @date 2020-07-15
* @desc description
* @param [array] $params [输入参数]
*/
public static function WarehouseGoodsInventoryData($params = [])
{
// 请求参数
$p = [
[
'checked_type' => 'empty',
'key_name' => 'id',
'error_msg' => '数据id有误',
],
];
$ret = ParamsChecked($params, $p);
if($ret !== true)
{
return DataReturn($ret, -1);
}
// 获取仓库商品
$where = [
'id' => intval($params['id']),
];
$warehouse_goods = Db::name('WarehouseGoods')->where($where)->find();
if(empty($warehouse_goods))
{
return DataReturn('无相关商品数据', -1);
}
// 获取商品规格
$res = GoodsService::GoodsSpecificationsActual($warehouse_goods['goods_id']);
$inventory_spec = [];
if(!empty($res['value']) && is_array($res['value']))
{
// 获取当前配置的库存
foreach($res['value'] as $v)
{
$arr = explode(',', $v);
$inventory_spec[] = [
'name' => implode(' / ', $arr),
'spec' => json_encode(self::GoodsSpecMuster($v, $res['title'])),
'md5_key' => md5(implode('', $arr)),
'inventory' => 0,
];
}
} else {
$str = 'default';
$inventory_spec[] = [
'name' => '默认规格',
'spec' => $str,
'md5_key' => md5($str),
'inventory' => 0,
];
}
// 获取库存
$keys = array_column($inventory_spec, 'md5_key');
$where = [
'md5_key' => $keys,
'warehouse_goods_id' => $warehouse_goods['id'],
'warehouse_id' => $warehouse_goods['warehouse_id'],
'goods_id' => $warehouse_goods['goods_id'],
];
$inventory_data = Db::name('WarehouseGoodsSpec')->where($where)->column('inventory', 'md5_key');
if(!empty($inventory_data))
{
foreach($inventory_spec as &$v)
{
if(array_key_exists($v['md5_key'], $inventory_data))
{
$v['inventory'] = $inventory_data[$v['md5_key']];
}
}
}
// 返回数据
$result = [
'data' => $warehouse_goods,
'spec' => $inventory_spec,
];
return DataReturn('success', 0, $result);
}
/**
* 规格值组合
* @author Devil
* @blog http://gong.gg/
* @version 1.0.0
* @date 2020-07-16
* @desc description
* @param [string] $spec_str [规格字打错,英文逗号分割]
* @param [array] $spec_title [规格类型名称]
*/
public static function GoodsSpecMuster($spec_str, $spec_title)
{
$result = [];
$arr = explode(',', $spec_str);
if(count($arr) == count($spec_title))
{
foreach($arr as $k=>$v)
{
$result[] = [
'type' => $spec_title[$k],
'value' => $v,
];
}
}
return $result;
}
/**
* 仓库商品库存保存
* @author Devil
* @blog http://gong.gg/
* @version 1.0.0
* @date 2020-07-15
* @desc description
* @param [array] $params [输入参数]
*/
public static function WarehouseGoodsInventorySave($params = [])
{
// 请求参数
$p = [
[
'checked_type' => 'empty',
'key_name' => 'id',
'error_msg' => '数据id有误',
],
[
'checked_type' => 'empty',
'key_name' => 'specifications_inventory',
'error_msg' => '库存数据有误',
],
[
'checked_type' => 'is_array',
'key_name' => 'specifications_inventory',
'error_msg' => '库存数据有误',
],
[
'checked_type' => 'empty',
'key_name' => 'specifications_md5_key',
'error_msg' => '库存唯一值有误',
],
[
'checked_type' => 'is_array',
'key_name' => 'specifications_md5_key',
'error_msg' => '库存唯一值有误',
],
[
'checked_type' => 'empty',
'key_name' => 'specifications_spec',
'error_msg' => '库存规格有误',
],
[
'checked_type' => 'is_array',
'key_name' => 'specifications_spec',
'error_msg' => '库存规格有误',
],
];
$ret = ParamsChecked($params, $p);
if($ret !== true)
{
return DataReturn($ret, -1);
}
// 获取仓库商品
$where = [
'id' => intval($params['id']),
];
$warehouse_goods = Db::name('WarehouseGoods')->where($where)->find();
if(empty($warehouse_goods))
{
return DataReturn('无相关商品数据', -1);
}
// 数据组装
$inventory = [];
$spec_value = [];
$md5_key = [];
$data = [];
foreach($params['specifications_spec'] as $k=>$v)
{
// 规格值,md5key,库存 必须存在
if(!empty($v) && array_key_exists($k, $params['specifications_md5_key']) && array_key_exists($k, $params['specifications_inventory']))
{
$inventory = intval($params['specifications_inventory'][$k]);
if($inventory > 0)
{
$data[] = [
'warehouse_goods_id' => $warehouse_goods['id'],
'warehouse_id' => $warehouse_goods['warehouse_id'],
'goods_id' => $warehouse_goods['goods_id'],
'md5_key' => $params['specifications_md5_key'][$k],
'spec' => htmlspecialchars_decode($v),
'inventory' => $inventory,
'add_time' => time(),
];
}
}
}
// 库存总数
$inventory_total = array_sum(array_column($data, 'inventory'));
// 启动事务
Db::startTrans();
// 获取原始数据
$where = [
'warehouse_goods_id' => $warehouse_goods['id'],
'warehouse_id' => $warehouse_goods['warehouse_id'],
'goods_id' => $warehouse_goods['goods_id'],
];
$data_old = Db::name('WarehouseGoodsSpec')->where($where)->select();
// 删除原有数据
Db::name('WarehouseGoodsSpec')->where($where)->delete();
// 仓库商品更新
Db::name('WarehouseGoods')->where(['id'=>$warehouse_goods['id']])->update([
'inventory' => $inventory_total,
'upd_time' => time(),
]);
// 添加数据
if(!empty($data))
{
if(Db::name('WarehouseGoodsSpec')->insertAll($data) < count($data))
{
Db::rollback();
return DataReturn('规格库存添加失败', -100);
}
}
// 原始数据扣除库存
if(!empty($data_old))
{
foreach($data_old as $v)
{
// 商品规格
$spec = ($v['spec'] == 'default') ? '' : json_decode($v['spec'], true);
$base = GoodsService::GoodsSpecDetail(['id'=>$v['goods_id'], 'spec'=>$spec]);
if($base['code'] == 0)
{
// 扣除规格操作
$status = Db::name('GoodsSpecBase')->where(['id'=>$base['data']['spec_base']['id'], 'goods_id'=>$v['goods_id']])->setDec('inventory', $v['inventory']);
if($status === false)
{
Db::rollback();
return DataReturn('规格库存扣减失败', -10);
}
if($status > 0)
{
// 如果规格更新成功则更新商品库存
if(Db::name('Goods')->where(['id'=>$v['goods_id']])->setDec('inventory', $v['inventory']) === false)
{
Db::rollback();
return DataReturn('商品库存扣减失败', -11);
}
}
}
}
}
// 增加库存
if(!empty($data))
{
// 增加商品库存
if(!Db::name('Goods')->where(['id'=>$warehouse_goods['goods_id']])->setInc('inventory', $inventory_total))
{
Db::rollback();
return DataReturn('商品库存增加失败', -20);
}
// 增加商品规格库存
foreach($data as $v)
{
$spec = ($v['spec'] == 'default') ? '' : json_decode($v['spec'], true);
$base = GoodsService::GoodsSpecDetail(['id'=>$v['goods_id'], 'spec'=>$spec]);
if($base['code'] == 0)
{
if(!Db::name('GoodsSpecBase')->where(['id'=>$base['data']['spec_base']['id'], 'goods_id'=>$v['goods_id']])->setInc('inventory', $v['inventory']))
{
Db::rollback();
return DataReturn('规格库存增加失败', -21);
}
}
}
}
// 提交事务
Db::commit();
return DataReturn('更新成功', 0);
}
/**
* 根据商品id和规格获取库存
* @author Devil
* @blog http://gong.gg/
* @version 1.0.0
* @date 2020-07-16
* @desc description
* @param [int] $goods_id [商品id]
* @param [string] $spec_str [规格值(无则 default)]
*/
public static function GoodsSpecInventory($goods_id, $spec_str = 'default')
{
// 无规格则使用 default 默认
if(empty($spec_str))
{
$spec_str = 'default';
}
// 获取商品规格库存
$where = [
'goods_id' => $goods_id,
'md5_key' => md5($spec_str),
];
return (int) Db::name('WarehouseGoodsSpec')->where($where)->sum('inventory');
}
}
?>
\ No newline at end of file
......@@ -101,6 +101,7 @@ return array (
'plugins_service_navigation_header_handle' =>
array (
0 => 'app\\plugins\\limitedtimediscount\\Hook',
1 => 'app\\plugins\\speedplaceorder\\Hook',
),
'plugins_service_goods_handle_end' =>
array (
......
此差异已折叠。
/**
* 商品添加-搜索列表
*/
.goods-add-container {
height: 100%;
}
.forth-selection-container select.forth-selection-form-category {
display: -webkit-inline-box;
}
.forth-selection-container .forth-selection-form-category, .forth-selection-container .chosen-container, .forth-selection-container .forth-selection-form-keywords {
width: calc(33% - 32px) !important;
}
.forth-selection-container .chosen-container, .forth-selection-container .forth-selection-form-keywords {
display: -webkit-inline-box !important;
}
.forth-selection-container .chosen-single {
width: 100%;
}
.forth-selection-container .search-submit {
width: 87px;
}
.goods-list-container {
height: calc(100% - 92px);
border: 1px solid #eee;
}
.goods-list-container .am-gallery-bordered .am-gallery-title {
margin-top: 5px;
}
.goods-list-container ul li {
position: relative;
cursor: pointer;
}
.goods-list-container ul li:hover .am-gallery-item {
-webkit-box-shadow: 0 0 6px #3cb4f1;
box-shadow: 0 0 6px #3cb4f1;
}
.goods-list-container .icon-submit-container {
position: absolute;
right: 15px;
bottom: 47px;
}
.goods-list-container .icon-submit-container .am-icon-btn {
width: 36px;
height: 36px;
line-height: 36px;
font-size: 20px;
-webkit-box-shadow: 0 0 3px rgba(0, 0, 0, 0.5);
box-shadow: 0 0 3px rgba(0, 0, 0, 0.5);
}
.goods-list-container .am-icon-btn.am-success:hover {
background: #4CAF50;
}
.goods-list-container .am-icon-btn.am-danger:hover {
background: #F44336;
}
.goods-page-container {
height: 40px;
}
.form-inventory-container {
margin-bottom: 80px;
}
.form-inventory-submit {
position: fixed;
left: 0;
bottom: 0;
width: 100%;
background: #fff;
height: 70px;
padding: 20px 10px;
border-top: 1px solid #eee;
}
\ No newline at end of file
......@@ -429,7 +429,6 @@ $(function()
// 获取基础值
var price = $spec_popup_all_operation.find('.am-popup-bd input.popup_all_price').val() || '';
var number = $spec_popup_all_operation.find('.am-popup-bd input.popup_all_number').val() || '';
var weight = $spec_popup_all_operation.find('.am-popup-bd input.popup_all_weight').val() || '';
var coding = $spec_popup_all_operation.find('.am-popup-bd input.popup_all_coding').val() || '';
var barcode = $spec_popup_all_operation.find('.am-popup-bd input.popup_all_barcode').val() || '';
......@@ -451,11 +450,10 @@ $(function()
if(count >= data_length)
{
$(this).find('td').eq(index).find('input').val(price);
$(this).find('td').eq(index+1).find('input').val(number);
$(this).find('td').eq(index+2).find('input').val(weight);
$(this).find('td').eq(index+3).find('input').val(coding);
$(this).find('td').eq(index+4).find('input').val(barcode);
$(this).find('td').eq(index+5).find('input').val(original_price);
$(this).find('td').eq(index+1).find('input').val(weight);
$(this).find('td').eq(index+2).find('input').val(coding);
$(this).find('td').eq(index+3).find('input').val(barcode);
$(this).find('td').eq(index+4).find('input').val(original_price);
}
});
$spec_popup_all_operation.modal('close');
......@@ -672,7 +670,6 @@ $(function()
});
});
// 虚拟商品编辑器初始化
if($('#goods-fictitious-container').length > 0)
{
......
$(function()
{
// popup 容器
var $popup = $('#warehouse-goods-popup');
// 分页
$('.goods-page-container').html(PageLibrary());
// 添加商品窗口
$(document).on('click', '.add-goods-submit', function()
{
$popup.modal('open').on('closed.modal.amui', function()
{
// 关闭刷新页面
window.location.reload();
});
});
// 搜索商品
$(document).on('click', '.forth-selection-container .search-submit, .pagelibrary li a', function()
{
// 分页处理
var is_active = $(this).data('is-active') || 0;
if(is_active == 1)
{
return false;
}
var page = $(this).data('page') || 1;
// 请求参数
var url = $('.forth-selection-container').data('search-url');
var warehouse_id = $('.forth-selection-form-warehouse').val();
var category_id = $('.forth-selection-form-category').val();
var keywords = $('.forth-selection-form-keywords').val();
if(warehouse_id <= 0)
{
Prompt('请选择仓库');
return false;
}
var $this = $(this);
$this.button('loading');
$('.goods-list-container').html('<div class="table-no"><i class="am-icon-spinner am-icon-pulse"></i> '+($('.goods-list-container').data('loading-msg'))+'</div>');
$.ajax({
url: url,
type: 'post',
data: {"page":page, "warehouse_id":warehouse_id, "category_id":category_id, "keywords":keywords},
dataType: 'json',
success:function(res)
{
$this.button('reset');
if(res.code == 0)
{
$('.goods-list-container').attr('data-is-init', 0);
$('.goods-list-container').html(res.data.data);
$('.goods-page-container').html(PageLibrary(res.data.total, res.data.page_size, res.data.page, 4));
} else {
Prompt(res.msg);
$('.goods-list-container').html('<div class="table-no"><i class="am-icon-warning"></i> '+res.msg+'</div>');
}
},
error:function(res)
{
$this.button('reset');
Prompt('请求失败');
$('.goods-list-container').html('<div class="table-no"><i class="am-icon-warning"></i> 请求失败</div>');
}
});
});
// 商品添加/删除
$(document).on('click', '.goods-list-container .goods-add-submit, .goods-list-container .goods-del-submit', function()
{
var $this = $(this);
var type = $this.data('type');
var url = $('.goods-list-container').data(type+'-url');
var icon_html = $this.parents('li').data((type == 'add' ? 'del' : 'add')+'-html');
var warehouse_id = parseInt($('.forth-selection-form-warehouse').val()) || 0;
var goods_id = $this.parents('li').data('gid');
if(warehouse_id <= 0)
{
Prompt('请选择仓库');
return false;
}
$.ajax({
url: url,
type: 'post',
data: {"warehouse_id":warehouse_id, "goods_id":goods_id},
dataType: 'json',
success:function(res)
{
if(res.code == 0)
{
$this.parent().html(icon_html);
Prompt(res.msg, 'success');
} else {
Prompt(res.msg);
}
},
error:function(res)
{
Prompt('请求失败');
}
});
});
});
\ No newline at end of file
......@@ -596,4 +596,11 @@ button.colorpicker-submit img {
}
.region-linkage .chosen-select .chosen-single {
width: 100%;
}
/**
* 文字颜色
*/
.am-text-grey {
color: #c3c3c3;
}
\ No newline at end of file
......@@ -784,10 +784,9 @@ function CheckVideo()
* @desc description
* @param {[string]} url [加载url]
* @param {[string]} title [标题]
* @param {[string]} tag [指定id标记]
* @param {[string]} class_tag [指定class]
*/
function ModalLoad(url, title, tag, class_tag)
function ModalLoad(url, title, class_tag)
{
class_tag = class_tag || '';
AMUI.dialog.popup({
......@@ -1283,7 +1282,6 @@ function MobileBrowserEnvironment()
*/
function PageLibrary(total, number, page, sub_number)
{
if((total || null) == null) return '';
if((page || null) == null) page = 1;
if((number || null) == null) number = 15;
if((sub_number || null) == null) sub_number = 2;
......@@ -1295,41 +1293,39 @@ function PageLibrary(total, number, page, sub_number)
var html = '<ul class="am-pagination am-pagination-centered pagelibrary"><li ';
html += (page > 1) ? '' : 'class="am-disabled"';
page_x = page-1;
html += '><a data-page="'+page_x+'" class="am-radius">&laquo;</a></li>';
html += '><a href="javascript:;" data-page="'+page_x+'" class="am-radius">&laquo;</a></li>';
var html_before = '';
var html_after = '';
var html_page = '<li class="am-active"><a class="am-radius">'+page+'</a></li>';
var html_page = '<li class="am-active"><a href="javascript:;" data-is-active="1" class="am-radius">'+page+'</a></li>';
if(sub_number > 0)
{
/* 前按钮 */
// 前按钮
if(page > 1)
{
total = (page-sub_number < 1) ? 1 : page-sub_number;
for(var i=page-1; i>=total; i--)
{
html_before = '<li><a data-page="'+i+'" class="am-radius">'+i+'</a></li>'+html_before;
html_before = '<li><a href="javascript:;" data-page="'+i+'" class="am-radius">'+i+'</a></li>'+html_before;
}
}
/* 后按钮 */
// 后按钮
if(page_total > page)
{
total = (page+sub_number > page_total) ? page_total : page+sub_number;
for(var i=page+1; i<=total; i++)
{
html_after += '<li><a data-page="'+i+'" class="am-radius">'+i+'</a></li>';
html_after += '<li><a href="javascript:;" data-page="'+i+'" class="am-radius">'+i+'</a></li>';
}
}
}
html += html_before+html_page+html_after;
html += '<li';
html += (page > 0 && page < page_total) ? '' : ' class="am-disabled"';
page_y = page+1;
html += '><a data-page="'+page_y+'" class="am-radius">&raquo;</a></li></ul>';
html += '><a href="javascript:;" data-page="'+page_y+'" class="am-radius">&raquo;</a></li></ul>';
return html;
}
......@@ -2434,7 +2430,13 @@ $(function()
Prompt('url未配置');
return false;
}
ModalLoad(url);
// 基础参数
var title = $(this).data('title') || '';
var class_tag = $(this).data('class') || '';
// 调用弹窗方法
ModalLoad(url, title, class_tag);
});
// 地图弹窗
......
......@@ -73,7 +73,7 @@ $(function()
// 弹出地址选择
$('.address-submit-save').on('click', function(e)
{
ModalLoad($(this).data('url'), $(this).data('popup-title'), 'popup-modal-address', 'common-address-modal');
ModalLoad($(this).data('url'), $(this).data('popup-title'), 'common-address-modal');
// 阻止事件冒泡
e.stopPropagation();
......
......@@ -104,7 +104,7 @@ $(function()
// 是否登录
if(__user_id__ == 0)
{
ModalLoad(__modal_login_url__, '登录', 'common-popup-modal-login', 'common-login-modal');
ModalLoad(__modal_login_url__, '登录', 'common-login-modal');
return false;
}
});
......
......@@ -3,7 +3,7 @@ $(function()
// 弹出地址选择
$('.address-submit-save').on('click', function(e)
{
ModalLoad($(this).data('url'), $(this).data('popup-title'), 'popup-modal-address', 'common-address-modal');
ModalLoad($(this).data('url'), $(this).data('popup-title'), 'common-address-modal');
// 阻止事件冒泡
e.stopPropagation();
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册