admin/addon/stock/shop/view/stock/add_check.html

551 lines
13 KiB
HTML

{extend name="app/shop/view/base.html"/}
{block name="resources"}
<style>
.stock-body tr:first-child:hover td{
background-color:#FFF;
}
.stock-body,.stock-body tr,.stock-body tr td{
background-color:#FFF;
}
.stock-view{
padding:20px;
}
.stock-search-block{
position:relative;
}
.stock-autocomplete-list{
position:absolute;
z-index:9999;
background-color:#FFF;
width:500px;
box-shadow: 0 3px 6px -4px rgba(0,0,0,.12), 0 6px 16px 0 rgba(0,0,0,.08), 0 9px 28px 8px rgba(0,0,0,.05);
border-radius: 4px;
overflow:hidden;
color: rgba(0,0,0,.85);
font-variant: tabular-nums;
line-height: 1.5715;
list-style: none;
left:0;
top:62px;
display:none;
}
.stock-autocomplete-list ul{
padding:6px 0;
}
.stock-autocomplete-list ul li{
font-weight: 400;
font-size: 14px;
text-align:left;
padding: 5px 12px;
color: rgba(0,0,0,.85);
}
.stock-li-hover{
background-color: #f5f5f5;
}
.stock-sku-no{
display:inline-block;
float:right;
}
.ns-title-pic {
width:45px;
height:45px;
text-align:center;
}
.table-goods-info {
display: flex;
flex-direction: column;
width: calc(100% - 90px);
margin-left:15px;
}
.table-goods-info > div {
width: 100%;
}
.table-goods-info * {
line-height: 1.5;
}
.table-goods-info .goods-name{
width: 100%;
overflow: hidden;
text-overflow: ellipsis;
display: -webkit-box;
-webkit-line-clamp: 2;
-webkit-box-orient: vertical;
white-space: break-spaces;
line-height: 1.3;
}
.ns-table-title{
display: flex;
align-items: center;
}
.ns-title-pic img{
display:inline-block;
height:auto;
width:auto;
max-height:100%;
max-width:100%;
}
.ns-table-title .ns-title-content{display: flex;flex-direction: column;justify-content: space-between;}
.action-btn{
cursor: pointer;
}
.empty-data{
text-align:center;
padding:30px !important;
color:rgba(0,0,0,.25);
}
.total-data{
padding:15px !important;
background: #fafafa;
color:#333;
}
.goods-money{
color:#ff4d4f;
}
.store-view{
margin-top:10px;
}
.store-view .layui-form-label{
width: 80px;
text-align: center;
}
.store-view .layui-input-block{
margin-left:80px;
}
</style>
{/block}
{block name="main"}
<div class="layui-form form">
<div class="stock-view">
<!--<div class="">-->
<!--<button type="button" class="layui-btn bg-color" onclick="queryGoods()">添加商品</button>-->
<!--</div>-->
<div class="store-view">
<div class="layui-form-item">
<div class="layui-inline">
<label class="layui-form-label"><span class="required">*</span>门店:</label>
<div class="layui-input-block len-mid">
<select name="store_id" lay-verify="required" lay-filter="store_list" class="len-mid">
<option value="">请选择</option>
{foreach $store_list as $store_k => $store_v}
<option value="{$store_v.store_id}">{$store_v.store_name}</option>
<option value="{$store_v.store_id}" {if $store_k == 0}selected {php} $default_store_id = $store_v['store_id']; {/php}{/if}>{$store_v.store_name}</option>
{/foreach}
</select>
</div>
</div>
</div>
</div>
<table class="layui-table" lay-size="lg">
<colgroup>
<col width="450">
<col width="120">
<col width="120">
<col>
<col width="200">
<col width="120">
<col width="90">
</colgroup>
<thead>
<tr>
<th>商品名称/规格/编码</th>
<th>当前库存</th>
<th>销售库存</th>
<th>单位</th>
<th>实盘数量</th>
<th>盈亏数量</th>
<th>操作</th>
</tr>
</thead>
<tbody class="stock-body">
<tr class="stock-search-line">
<td class="stock-search-block">
<input type="text" class="layui-input stock-search" placeholder="请输入商品名称/规格/编码" style="border:none;padding-left:0;"/>
<div class="stock-autocomplete-list">
<ul></ul>
</div>
</td>
<td></td>
<td></td>
<td></td>
<td></td>
<td></td>
<td></td>
</tr>
</tbody>
<tfoot>
<tr>
<td colspan="8" class="total-data">合计: 共<span class="kinds-num">0</span>种商品, 盘盈:<span class="goods-up">0</span>种, 盘亏:<span class="goods-down">0</span>种, 持平:<span class="goods-same">0</span></td>
</tr>
</tfoot>
</table>
<div class="form-row">
<button class="layui-btn" lay-submit lay-filter="save">提交</button>
<button class="layui-btn layui-btn-primary" onclick="back()">返回</button>
</div>
</div>
</div>
<script type="text/html" id="stock_goods_info">
<tr class="stock-tr" data-key = '{{ d.key }}'>
<td>
<div class="ns-table-title">
<div class="ns-title-pic" id="goods_img_{{d.sku_id}}">
<img src="{{ns.img(d.sku_image || ''.split(',')[0], 'small')}}" layer-src/>
</div>
<div class="ns-title-content table-goods-info">
<div>
<a href="javascript:;" class="ns-multi-line-hiding ns-gn-color textOVerThree goods-name" title="{{d.sku_name}}" lay-event="preview">{{d.sku_name}}</a>
</div>
</div>
</div>
<input type="hidden" class="layui-input" name="goods_sku_id" value="{{ d.goods_sku_id || 0 }}"/>
<input type="hidden" class="layui-input" name="stock" value="{{ d.real_stock || 0 }}"/>
</td>
<!-- 库存 -->
<td>{{ d.real_stock || 0 }}</td>
<td>{{ d.stock || 0 }}</td>
<!-- 单位 -->
<td>{{ d.unit }}</td>
<!-- 数量 -->
<td>
<input type="number" class="layui-input stock-num" name="goods_num" value="{{ d.goods_num || '' }}" placeholder="0" onchange="dataChange(this)"/>
</td>
<!-- 成本总价 -->
<td>
<span class="compare-num">0</span>
</td>
<td>
<a class="text-color action-btn" onclick="delTr(this)">删除</a>
</td>
</tr>
</script>
{/block}
{block name="script"}
<script>
var count = 0;
var stock_data = {};//库存数据 {{'sku_info':{},'supplier_name':'', 'stock' : 0, 'unit':'','goods_num':0, 'goods_price':0,'goods_money':0}}
var laytpl,form;
var default_store_id = {$default_store_id ?? 0};
var temp_list = {};
var scanCode = { lastTime: 0, code: '' };
function clearBarCode() {
scanCode = {lastTime: 0, code: ''}
}
// 监听扫码枪事件
$(window).keypress(function (e) {
if(!checkStore()){
return false;
}
var currCode = e.keyCode || e.which || e.charCode;
var currTime = new Date().getTime();
if (scanCode.lastTime > 0) {
if (currTime - scanCode.lastTime <= 100) {
scanCode.code += String.fromCharCode(currCode);
} else if (currTime - scanCode.lastTime > 500) {
// 输入间隔500毫秒清空
clearBarCode();
}
} else {
scanCode.code = String.fromCharCode(currCode);
}
scanCode.lastTime = currTime;
if(currCode == 13){
autocomplete(scanCode.code.trim(),function () {
if(ns.checkIsNotNull(temp_list)){
$(".stock-autocomplete-list").show();
}
$('.stock-autocomplete-list ul li').click();
});
}
});
layui.use(['form', 'laytpl'], function () {
form = layui.form,laytpl = layui.laytpl;
var repeat_flag = false;
form.render();
fetch({});
//门店选择
form.on('select(store_list)', function(data){
var store_id = data.value;
if(default_store_id > 0){
layer.confirm('更改门店,将清除已录入的单报明细,确定吗?\n', {
title: '操作提示',
btn: ['是', '否'],
closeBtn: 0,
yes: function() {
default_store_id = store_id;
reset();
layer.closeAll()
},
btn2: function() {
}
});
}else{
default_store_id = store_id;
}
});
form.on('submit(save)', function(data){
var field = data.field;
var stock_json = [];
var check_return = true;
if($('.stock-tr').length <= 0){
check_return = false;
layer.msg('请选择产品');
return false;
}
$('.stock-tr').each(function(){
var obj = $(this);
var goods_num = obj.find('input[name=goods_num]').val() || 0;
var goods_name = obj.find('.goods-name').text() || '';
var goods_sku_id = obj.find('input[name=goods_sku_id]').val() || 0;
if(goods_num <= 0){
check_return = false;
layer.msg('商品:'+goods_name+'入库数量不能为空');
return false;
}
stock_json.push({goods_num, goods_sku_id});
});
if(!check_return) return false;
if(repeat_flag) return false;
repeat_flag = true;
$.ajax({
type : 'post',
dataType: 'JSON',
url : ns.url("stock://shop/stock/addcheck"),
async : true,
data : {stock_json:JSON.stringify(stock_json),store_id:default_store_id},
success : function(res) {
if (res.code >= 0) {
layer.confirm('添加成功', {
title: '操作提示',
btn: ['返回列表', '继续入库'],
closeBtn: 0,
yes: function() {
location.href = ns.url("stock://shop/stock/check");
},
btn2: function() {
location.href = ns.url("stock://shop/stock/addcheck");
}
});
} else {
repeat_flag = false;
layer.msg(res.message);
}
return false
}
})
});
});
function back() {
location.href = ns.url("stock://shop/stock/check")
}
function autocomplete(text,callback){
$.ajax({
url: ns.url("stock://shop/stock/getskulist"),
data: {search:text,store_id:default_store_id},
dataType: 'JSON',
type: 'POST',
success: function(res) {
//根据写入的数据来查询相似的数据
$('.stock-autocomplete-list ul').html('');
temp_list = {};
if(res.data.length > 0){
$(".stock-autocomplete-list").show();
}else{
$(".stock-autocomplete-list").hide();
}
$.each(res.data, function(index, value){
temp_list[value.sku_id] = value;
$('.stock-autocomplete-list ul').append('<li data-sku_id = "'+value.sku_id+'">'+value.sku_name+' <span class="stock-sku-no">'+value.sku_no+'</span></li>');
});
$('.stock-autocomplete-list ul li').hover(function(){
$(".stock-autocomplete-list ul li").removeClass('stock-li-hover');
$(this).addClass('stock-li-hover');
});
$('.stock-autocomplete-list ul li').click(function(){
var sku_id = $(this).data('sku_id');
var item = temp_list[sku_id];
$(".stock-autocomplete-list").hide();
$('.stock-search').val('');
var temp_item = {};
var temp_one_item = stock_data[sku_id];
if(ns.checkIsNotNull(temp_one_item)){
// stock_data[sku_id]['goods_num'] += 1;
}else{
item.goods_sku_id = sku_id;
temp_item[sku_id] = item;
fetch(temp_item);
}
});
if(callback) callback();
}
});
}
$(function(){
$(".stock-search").focus(function(event){
if(!checkStore()){
return false;
}
autocomplete($(this).val());
if(ns.checkIsNotNull(temp_list)){
$(".stock-autocomplete-list").show();
}
event.stopPropagation();
return false;
});
$(".stock-search").click(function(event){
if(!checkStore()){
return false;
}
autocomplete($(this).val());
if(ns.checkIsNotNull(temp_list)){
$(".stock-autocomplete-list").show();
}
event.stopPropagation();
return false;
});
$("body").on('keyup', '.stock-search', function(){
autocomplete($(this).val());
});
$('body').click(function(){
$(".stock-autocomplete-list").hide();
})
});
//选择自动补全列表
function autocompleteSelect(){
//定位当前选中的sku记录
}
//数据渲染(任何来源)
function fetch(data){
stock_data = $.extend(stock_data, data);
//重新渲染
var template = $("#stock_goods_info").html();
$('.stock-body tr').not('.stock-search-line').remove();
if(ns.checkIsNotNull(stock_data)){
$.each(stock_data, function (index,value){
value.key = index;
laytpl(template).render(value, function (html) {
$('.stock-body').append(html);
form.render();
})
})
}else{
$('.stock-body').append('<tr> <td colspan="8" class="empty-data">无数据</td> </tr>');
}
form.render();
syncData();
}
function dataChange(obj){
syncData();
}
function syncData(){
var count_num = 0,goods_money = 0;
var kinds_data = [];
var up_num = 0;
var down_num = 0;
var same_num = 0;
$('.stock-tr').each(function(){
var obj = $(this);
var key = obj.data('key');
var goods_sku_id = obj.find('input[name=goods_sku_id]').val() || 0;
var begin_goods_num = obj.find('input[name=goods_num]').val();
var stock = obj.find('input[name=stock]').val();
var goods_num = parseInt(begin_goods_num) || 0;
if(kinds_data.indexOf(goods_sku_id) == -1){
kinds_data.push(goods_sku_id)
}
//重新采集数据
stock_data[key].goods_num = goods_num;//库存数量
count_num += goods_num;
//比对盘盈盘亏
var item_stock = stock;
if(item_stock > goods_num){
//盘亏
down_num++;
}else{
if(item_stock == goods_num){
same_num++;
}else{
up_num++;
}
}
if(begin_goods_num !== ''){
var compare_num = goods_num - item_stock;
}else{
compare_num = 0;
}
obj.find('.compare-num').text(compare_num);
});
$(".kinds-num").text(parseInt(kinds_data.length));
$(".goods-up").text(parseInt(up_num));
$(".goods-down").text(parseInt(down_num));
$(".goods-same").text(parseInt(same_num));
}
function reset(){
stock_data = {};
temp_list = {};
fetch();
syncData();
}
function checkStore(){
if(default_store_id == 0){
layer.msg('请先选择门店');
return false;
}
return true;
}
function delTr(obj){
var parent = $(obj).parents('.stock-tr');
var key = parent.data('key');//唯一值 (sku_id不承担)
parent.remove();
delete stock_data[key];
syncData();
}
</script>
{/block}