初始上传
This commit is contained in:
914
app/shop/view/goods/add_goods.html
Executable file
914
app/shop/view/goods/add_goods.html
Executable file
@@ -0,0 +1,914 @@
|
||||
<link rel="stylesheet" href="__STATIC__/ext/video/video.css">
|
||||
<link rel="stylesheet" type="text/css" href="__STATIC__/ext/searchable_select/searchable_select.css" />
|
||||
<link rel="stylesheet" type="text/css" href="__STATIC__/ext/layui/extend/cascader/cascader.css"/>
|
||||
<link rel="stylesheet" type="text/css" href="SHOP_CSS/goods_edit.css?time=20250527" />
|
||||
|
||||
<div class="layui-form">
|
||||
<div class="layui-tab layui-tab-brief" lay-filter="goods_tab">
|
||||
<ul class="layui-tab-title">
|
||||
<li class="layu1i-this" lay-id="basic">基础设置</li>
|
||||
<li lay-id="price-stock">价格库存</li>
|
||||
<li lay-id="detail">商品详情</li>
|
||||
<li lay-id="attr">商品参数</li>
|
||||
<li lay-id="senior">高级设置</li>
|
||||
</ul>
|
||||
<div class="layui-tab-content">
|
||||
<!-- 基础设置 -->
|
||||
<div class="layui-tab-item layui-show">
|
||||
|
||||
<!-- 商品类型 -->
|
||||
<div class="layui-card card-common card-brief head">
|
||||
<div class="layui-card-header">
|
||||
<span class="card-title">商品类型</span>
|
||||
</div>
|
||||
<div class="layui-card-body commodity-type-box" >
|
||||
{foreach name="all_goodsclass" item="vo"}
|
||||
<div class="commodity-type-item {if $vo.goods_class eq $goods_class.id}border-color{/if}" onclick="location.hash = ns.hash('{$vo.add_url}')">
|
||||
<span>{$vo.goods_class_name}</span>
|
||||
<span>{$vo.is_virtual ? '(无需物流)' : '(需要物流)'}</span>
|
||||
</div>
|
||||
{/foreach}
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="layui-card card-common card-brief head">
|
||||
<div class="layui-card-header">
|
||||
<span class="card-title">基础信息</span>
|
||||
</div>
|
||||
|
||||
<div class="layui-card-body">
|
||||
<div class="layui-form-item" id="add_goods_name">
|
||||
<label class="layui-form-label"><span class="required">*</span>商品名称:</label>
|
||||
<div class="layui-input-inline">
|
||||
<input name="goods_name" type="text" id="goods_name" placeholder="请输入商品名称,不能超过60个字符" maxlength="60" autocomplete="off" lay-verify="goods_name" class="layui-input len-long">
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="layui-form-item">
|
||||
<label class="layui-form-label">促销语:</label>
|
||||
<div class="layui-input-inline">
|
||||
<textarea class="layui-textarea len-long" name="introduction" maxlength="100" lay-verify="introduction" placeholder="请输入促销语,不能超过100个字符"></textarea>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="layui-form-item">
|
||||
<label class="layui-form-label">关键词:</label>
|
||||
<div class="layui-input-block">
|
||||
<input type="text" name="keywords" id="keywords" placeholder="商品关键词用于SEO搜索,不能超过100个字符" maxlength="100" autocomplete="off" class="layui-input len-long">
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="layui-form-item goods-image-wrap">
|
||||
<label class="layui-form-label"><span class="required">*</span>商品主图:</label>
|
||||
<div class="layui-input-block">
|
||||
<!--商品主图项-->
|
||||
<div class="js-goods-image"></div>
|
||||
</div>
|
||||
<div class="word-aux">第一张图片将作为商品主图,支持同时上传多张图片,多张图片之间可随意调整位置;</div>
|
||||
<div class="word-aux">支持jpg、gif、png格式上传或从图片空间中选择,建议使用尺寸800x800像素以上、大小不超过1M的正方形图片;</div>
|
||||
<div class="word-aux">上传后的图片将会自动保存在图片空间的默认分类中,最多上传10张(至少1张)</div>
|
||||
</div>
|
||||
|
||||
<div class="layui-form-item">
|
||||
<label class="layui-form-label">商品视频:</label>
|
||||
<div class="layui-input-block">
|
||||
<div class="video-thumb">
|
||||
<video id="goods_video" class="video-js vjs-big-play-centered" controls="" poster="SHOP_IMG/goods_video_preview.png" preload="auto"></video>
|
||||
</div>
|
||||
<div id="videoUpload2" class="up-video " title="商品视频" >
|
||||
<span class="delete-video hide" onclick="deleteVideo()"><img class="del-img" src="SHOP_IMG/delete.png">删除</span>
|
||||
<span class=" replace-video hide js-add-goods-video" ><img class="up-img" src="SHOP_IMG/upload.png">上传视频</span>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="layui-form-item">
|
||||
<label class="layui-form-label"></label>
|
||||
<div class="layui-input-block">
|
||||
<input type="text" name="video_url" placeholder="在此输入外链视频地址" autocomplete="off" class="layui-input len-long">
|
||||
</div>
|
||||
<div class="file-title word-aux">
|
||||
<div>注意事项:</div>
|
||||
<ul>
|
||||
<li>1、检查upload文件夹是否有读写权限。</li>
|
||||
<li>2、PHP默认上传限制为2MB,需要在php.ini配置文件中修改“post_max_size”和“upload_max_filesize”的大小。</li>
|
||||
<li>3、视频支持手动输入外链视频地址或者上传本地视频文件</li>
|
||||
<li>4、必须上传.mp4视频格式</li>
|
||||
<li>5、视频文件大小不能超过500MB</li>
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="layui-form-item">
|
||||
<label class="layui-form-label">商品品牌:</label>
|
||||
<div class="layui-input-inline">
|
||||
<select name="brand_id" lay-search="" lay-filter="brand_id">
|
||||
<option value="">无</option>
|
||||
{foreach name="$brand_list" item="vo"}
|
||||
<option value="{$vo['brand_id']}">{$vo['brand_name']}</option>
|
||||
{/foreach}
|
||||
</select>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="layui-form-item">
|
||||
<label class="layui-form-label">商品标签:</label>
|
||||
<div class="layui-input-inline">
|
||||
<select name="label_id" lay-search="" lay-verify="label_id">
|
||||
<option value="">请选择商品标签</option>
|
||||
{foreach name="$label_list" item="vo"}
|
||||
<option value="{$vo['id']}">{$vo['label_name']}</option>
|
||||
{/foreach}
|
||||
</select>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
{notempty name="$service_list"}
|
||||
<div class="layui-form-item">
|
||||
<label class="layui-form-label">商品服务:</label>
|
||||
<div class="layui-input-block">
|
||||
{foreach name="$service_list" item="vo"}
|
||||
<input type="checkbox" name="goods_service_ids" value="{$vo.id}" title="{$vo.service_name}" lay-skin="primary">
|
||||
{/foreach}
|
||||
</div>
|
||||
</div>
|
||||
{/notempty}
|
||||
|
||||
<div class="layui-form-item goods-category-wrap">
|
||||
<label class="layui-form-label"><span class="required">*</span>商品分类:</label>
|
||||
<div class="layui-input-block" id="category_select_box">
|
||||
</div>
|
||||
<input type="hidden" lay-verify="category_id"/>
|
||||
<div class="word-aux">商品可以属于多个分类,最多10个</div>
|
||||
</div>
|
||||
|
||||
{if $is_install_supply}
|
||||
<div class="layui-form-item">
|
||||
<label class="layui-form-label">供应商:</label>
|
||||
<div class="layui-input-inline">
|
||||
<select name="supplier_id" lay-search="" lay-verify="supplier_id">
|
||||
<option value="">请选择供应商</option>
|
||||
{foreach name="$supplier_list" item="vo"}
|
||||
<option value="{$vo['supplier_id']}">{$vo['title']}</option>
|
||||
{/foreach}
|
||||
</select>
|
||||
</div>
|
||||
</div>
|
||||
{/if}
|
||||
|
||||
<div class="layui-form-item goods_state">
|
||||
<label class="layui-form-label"><span class="required">*</span>是否上架:</label>
|
||||
<div class="layui-input-block">
|
||||
<input type="radio" name="goods_state" value="1" title="立刻上架" checked lay-filter="goods_state">
|
||||
<input type="radio" name="goods_state" value="0" title="放入仓库" lay-filter="goods_state">
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="layui-form-item">
|
||||
<label class="layui-form-label">定时下架:</label>
|
||||
<div class="layui-input-block">
|
||||
<input type="radio" name="timer_off_status" value="1" title="启用" lay-filter="timer_off">
|
||||
<input type="radio" name="timer_off_status" value="2" title="不启用" lay-filter="timer_off" checked>
|
||||
</div>
|
||||
<div class="word-aux">启用定时下架后,到达设定时间,此商品将自动下架。</div>
|
||||
</div>
|
||||
|
||||
<div class="layui-form-item timer_off" style="display: none;">
|
||||
<label class="layui-form-label"></label>
|
||||
<div class="layui-input-inline">
|
||||
<input type="text" id="timer_off" name="timer_off" class="layui-input len-mid" autocomplete="off" readonly>
|
||||
<i class=" iconrili iconfont calendar"></i>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
{if addon_is_exit('cashier') == 1}
|
||||
<div class="layui-form-item">
|
||||
<label class="layui-form-label">销售渠道:</label>
|
||||
<div class="layui-input-block">
|
||||
<input type="radio" name="sale_channel" value="all" title="线上线下销售" checked>
|
||||
<input type="radio" name="sale_channel" value="online" title="线上销售">
|
||||
<input type="radio" name="sale_channel" value="offline" title="线下销售">
|
||||
</div>
|
||||
</div>
|
||||
{/if}
|
||||
|
||||
{if $store_is_exit}
|
||||
<div class="layui-form-item">
|
||||
<label class="layui-form-label">适用门店:</label>
|
||||
<div class="layui-input-block">
|
||||
<input type="radio" name="sale_store" value="all" title="全部门店" checked lay-filter="sale_store">
|
||||
<input type="radio" name="sale_store" value="" title="部分门店" lay-filter="sale_store">
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="layui-form-item sale-store-select" style="display: none" lay-verify="sale_store">
|
||||
<label class="layui-form-label"></label>
|
||||
<div class="layui-input-block">
|
||||
<button class="layui-btn select-store">选择门店</button>
|
||||
<div style="width: 700px">
|
||||
<table class="layui-table" lay-skin="nob">
|
||||
<colgroup>
|
||||
<col width="30%">
|
||||
<col width="60%">
|
||||
<col width="10%">
|
||||
</colgroup>
|
||||
<tr>
|
||||
<th>门店名称</th>
|
||||
<th>门店地址</th>
|
||||
<th>操作</th>
|
||||
</tr>
|
||||
<tbody class="sale-store"></tbody>
|
||||
</table>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="layui-form-item">
|
||||
<label class="layui-form-label">是否统一售价:</label>
|
||||
<div class="layui-input-block">
|
||||
<input type="radio" name="is_unify_price" value="1" title="是" checked >
|
||||
<input type="radio" name="is_unify_price" value="0" title="否" >
|
||||
</div>
|
||||
<div class="word-aux">价格设置之后门店不能修改价格,门店按照平台设置的价格售卖</div>
|
||||
</div>
|
||||
{/if}
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- 配送信息 -->
|
||||
<div class="layui-card card-common card-brief head">
|
||||
<div class="layui-card-header">
|
||||
<span class="card-title">配送信息</span>
|
||||
</div>
|
||||
<div class="layui-card-body">
|
||||
<div class="layui-form-item" lay-verify="express_type">
|
||||
<label class="layui-form-label">配送方式:</label>
|
||||
<div class="layui-input-block">
|
||||
{notempty name="$express_type"}
|
||||
{foreach name="$express_type" item="vo" key="key"}
|
||||
<input type="checkbox" name="support_trade_type" value="{$key}" title="{$vo.name}" lay-skin="primary" checked lay-filter="support_trade_type">
|
||||
{/foreach}
|
||||
{else/}
|
||||
<a href="{:href_url('shop/delivery/express')}" class="text-color">未配置配送方式,请先配置配送方式</a>
|
||||
{/notempty}
|
||||
</div>
|
||||
{notempty name="$express_type"}<div class="word-aux"><a href="{:href_url('shop/delivery/express')}" target="_blank" class="text-color">配送方式管理</a></div>{/notempty}
|
||||
</div>
|
||||
|
||||
<div class="trade-type express" {if empty($express_type)}style="display:none;"{/if}>
|
||||
<div class="layui-form-item">
|
||||
<label class="layui-form-label">是否免邮:</label>
|
||||
<div class="layui-input-block">
|
||||
<input type="radio" name="is_free_shipping" value="1" title="是" lay-filter="is_free_shipping" checked>
|
||||
<input type="radio" name="is_free_shipping" value="0" title="否" lay-filter="is_free_shipping">
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="layui-form-item js-shipping-template">
|
||||
<label class="layui-form-label">运费模板:</label>
|
||||
<div class="layui-input-inline">
|
||||
<select name="shipping_template" lay-search="" lay-verify="shipping_template">
|
||||
<option value="">请选择运费模板</option>
|
||||
{foreach name="$express_template_list" item="vo"}
|
||||
<option value="{$vo['template_id']}">{$vo['template_name']}</option>
|
||||
{/foreach}
|
||||
</select>
|
||||
</div>
|
||||
<div class="layui-input-inline">
|
||||
<a class="text-color delivery-caozuo delivery-refresh">刷新</a>
|
||||
<a class="default text-color" href="{:href_url('shop/express/addtemplate')}" target="_blank">新建</a>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
|
||||
<!-- 价格库存 -->
|
||||
<div class="layui-tab-item">
|
||||
|
||||
<div class="layui-form-item">
|
||||
<label class="layui-form-label">启用多规格:</label>
|
||||
<div class="layui-input-inline">
|
||||
<input type="checkbox" value="1" lay-skin="switch" name="spec_type" lay-filter="spec_type" lay-verify="spec_type">
|
||||
<input type="hidden" id="spec_type_status" value="0">
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- 单规格 -->
|
||||
<div class="js-single-spec">
|
||||
|
||||
<div class="layui-form-item">
|
||||
<label class="layui-form-label"><span class="required">*</span>销售价:</label>
|
||||
<div class="layui-input-block">
|
||||
<input type="text" name="price" placeholder="0.00" lay-verify="price" class="layui-input len-short" autocomplete="off">
|
||||
<div class="layui-form-mid">元</div>
|
||||
</div>
|
||||
<div class="word-aux">商品没有相关优惠活动的实际卖价</div>
|
||||
</div>
|
||||
|
||||
<div class="layui-form-item">
|
||||
<label class="layui-form-label">划线价:</label>
|
||||
<div class="layui-input-block">
|
||||
<input type="text" name="market_price" placeholder="0.00" lay-verify="market_price" class="layui-input len-short" autocomplete="off">
|
||||
<div class="layui-form-mid">元</div>
|
||||
</div>
|
||||
<div class="word-aux">商品没有优惠活动显示的划线价格,如果商品有折扣等优惠活动划线价显示销售价</div>
|
||||
</div>
|
||||
|
||||
<div class="layui-form-item">
|
||||
<label class="layui-form-label">成本价:</label>
|
||||
<div class="layui-input-block">
|
||||
<input type="text" name="cost_price" placeholder="0.00" class="layui-input len-short" lay-verify="cost_price" autocomplete="off">
|
||||
<div class="layui-form-mid">元</div>
|
||||
</div>
|
||||
<div class="word-aux">成本价将不会对前台会员展示,用于商家统计使用</div>
|
||||
</div>
|
||||
|
||||
<div class="layui-form-item">
|
||||
<label class="layui-form-label">重量:</label>
|
||||
<div class="layui-input-block">
|
||||
<input type="text" name="weight" placeholder="0.00" class="layui-input len-short" lay-verify="weight" autocomplete="off">
|
||||
<div class="layui-form-mid">kg</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="layui-form-item">
|
||||
<label class="layui-form-label">体积:</label>
|
||||
<div class="layui-input-block">
|
||||
<input type="text" name="volume" placeholder="0.00" class="layui-input len-short" lay-verify="volume" autocomplete="off">
|
||||
<div class="layui-form-mid">m3</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="layui-form-item">
|
||||
<label class="layui-form-label">商品编码:</label>
|
||||
<div class="layui-input-block">
|
||||
<input type="text" name="sku_no" placeholder="请输入商品编码" maxlength="50" class="layui-input len-long" autocomplete="off">
|
||||
</div>
|
||||
<div class="word-aux">多个编码以英文逗号分割</div>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
|
||||
<!-- 多规格 -->
|
||||
<div class="js-more-spec">
|
||||
<!--规格项/规格值-->
|
||||
<div class="spec-edit-list"></div>
|
||||
|
||||
<div class="layui-form-item js-add-spec">
|
||||
<label class="layui-form-label"></label>
|
||||
<div class="layui-input-inline">
|
||||
<button class="layui-btn" type="button">添加规格</button>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="layui-form-item batch-operation-sku">
|
||||
<label class="layui-form-label">批量操作:</label>
|
||||
<div class="layui-input-inline">
|
||||
<span class="text-color sku_image" data-field="sku_images">SKU图片</span>
|
||||
<span class="text-color" data-field="spec_name">副标题</span>
|
||||
<span class="text-color" data-field="price" data-verify="price">销售价</span>
|
||||
<span class="text-color" data-field="market_price" data-verify="market_price">划线价</span>
|
||||
<span class="text-color" data-field="cost_price" data-verify="cost_price">成本价</span>
|
||||
<span class="text-color" data-field="stock" data-verify="stock">库存</span>
|
||||
<span class="text-color" data-field="stock_alarm" data-verify="stock_alarm">库存预警</span>
|
||||
<span class="text-color" data-field="weight" data-verify="weight">重量(kg)</span>
|
||||
<span class="text-color" data-field="volume" data-verify="volume">体积(m³)</span>
|
||||
<span class="text-color" data-field="sku_no" data-verify="">商品编码</span>
|
||||
<div class="layui-inline select_spec_value" style="float:left;display: none"></div>
|
||||
<input type="text" class="layui-input len-short" name="batch_operation_sku" autocomplete="off" />
|
||||
<button class="layui-btn confirm" type="button">确定</button>
|
||||
<button class="layui-btn layui-btn-primary cancel" type="button">取消</button>
|
||||
<div id="batch_set_sku_image" class="batch-set-sku-image" style="clear: both;display: none;"></div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!--sku列表-->
|
||||
<div class="layui-form-item sku-table">
|
||||
<label class="layui-form-label"></label>
|
||||
<div class="layui-input-block"></div>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
|
||||
<div class="layui-form-item js-goods-stock-wrap">
|
||||
<label class="layui-form-label"><span class="required">*</span>库存:</label>
|
||||
<div class="layui-input-block">
|
||||
<input type="number" name="goods_stock" placeholder="0" lay-verify="goods_stock" class="layui-input len-short" autocomplete="off">
|
||||
<div class="layui-form-mid">件</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="layui-form-item js-goods-stock-wrap">
|
||||
<label class="layui-form-label">库存预警:</label>
|
||||
<div class="layui-input-block">
|
||||
<input type="number" name="goods_stock_alarm" placeholder="0" lay-verify="goods_stock_alarm" class="layui-input len-short" autocomplete="off">
|
||||
<div class="layui-form-mid">件</div>
|
||||
</div>
|
||||
<div class="word-aux">商品库存少于等于预警数量,商品列表库存数量标红显示,0为不预警。</div>
|
||||
</div>
|
||||
|
||||
<div class="layui-form-item">
|
||||
<label class="layui-form-label">商品单位:</label>
|
||||
<div class="layui-input-block">
|
||||
<input type="text" name="unit" placeholder="请输入商品单位" autocomplete="off" class="layui-input len-short">
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="layui-form-item ">
|
||||
<label class="layui-form-label">虚拟销量:</label>
|
||||
<div class="layui-input-block">
|
||||
<input type="number" name="virtual_sale" placeholder="0" lay-verify="virtual_sale" class="layui-input len-short" autocomplete="off">
|
||||
<div class="layui-form-mid">件</div>
|
||||
</div>
|
||||
<div class="word-aux">该设置不计入商品统计数据</div>
|
||||
</div>
|
||||
|
||||
<div class="layui-form-item is_limit">
|
||||
<label class="layui-form-label">是否限购:</label>
|
||||
<div class="layui-input-block">
|
||||
<input type="radio" name="is_limit" value="0" title="否" lay-filter="is_limit" checked>
|
||||
<input type="radio" name="is_limit" value="1" title="是" lay-filter="is_limit">
|
||||
</div>
|
||||
<div class="word-aux">启用限购后,购买商品时,会对该商品购买量做限制判断。</div>
|
||||
</div>
|
||||
|
||||
<div class="layui-form-item">
|
||||
<label class="layui-form-label">起售:</label>
|
||||
<div class="layui-input-block">
|
||||
<input type="number" name="min_buy" placeholder="" lay-verify="min_buy" class="layui-input len-short" autocomplete="off">
|
||||
<div class="layui-form-mid">件</div>
|
||||
</div>
|
||||
<div class="word-aux">起售数量超出商品库存时,买家无法购买该商品</div>
|
||||
</div>
|
||||
|
||||
<div class="layui-form-item">
|
||||
<label class="layui-form-label">会员等级折扣:</label>
|
||||
<div class="layui-input-block">
|
||||
<div class="layui-input-inline">
|
||||
<input type="radio" name="is_consume_discount" value="1" title="参与" checked>
|
||||
<input type="radio" name="is_consume_discount" value="0" title="不参与">
|
||||
</div>
|
||||
</div>
|
||||
<div class="word-aux">按照默认会员等级折扣优惠</div>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
|
||||
<!-- 商品详情 -->
|
||||
<div class="layui-tab-item">
|
||||
<div class="layui-form-item">
|
||||
<label class="layui-form-label sm"></label>
|
||||
<div class="layui-input-inline special-length">
|
||||
<script id="editor" type="text/plain" style="width:100%;height:500px;"></script>
|
||||
</div>
|
||||
</div>
|
||||
<script type="text/javascript" charset="utf-8" src="__STATIC__/ext/ueditor/ueditor.config.js"></script>
|
||||
<script type="text/javascript" charset="utf-8" src="__STATIC__/ext/ueditor/ueditor.all.js"> </script>
|
||||
<script type="text/javascript" charset="utf-8" src="__STATIC__/ext/ueditor/lang/zh-cn/zh-cn.js"></script>
|
||||
</div>
|
||||
|
||||
<!-- 商品参数 -->
|
||||
<div class="layui-tab-item">
|
||||
<div class="layui-form-item">
|
||||
<label class="layui-form-label">商品参数模板:</label>
|
||||
<div class="layui-input-block len-mid">
|
||||
<select name="goods_attr_class" lay-search="" lay-filter="goods_attr_class">
|
||||
<option value="">请选择商品参数模板</option>
|
||||
{foreach name="$attr_class_list" item="vo"}
|
||||
<option value="{$vo['class_id']}">{$vo['class_name']}</option>
|
||||
{/foreach}
|
||||
</select>
|
||||
<input type="hidden" name="goods_attr_name" />
|
||||
</div>
|
||||
<div class="word-aux">商品可以添加自定义商品参数,也可以通过参数模板批量设置商品参数</div>
|
||||
</div>
|
||||
|
||||
<div class="layui-form-item js-new-attr-list">
|
||||
<label class="layui-form-label"></label>
|
||||
<div class="layui-input-block">
|
||||
<div class="layui-form">
|
||||
<table class="layui-table">
|
||||
<colgroup>
|
||||
<col width="30%" />
|
||||
<col width="40%" />
|
||||
<col width="20%" />
|
||||
<col width="10%" />
|
||||
</colgroup>
|
||||
<thead>
|
||||
<tr>
|
||||
<th>参数名</th>
|
||||
<th>参数</th>
|
||||
<th class="prompt-block">
|
||||
排序
|
||||
<div class="prompt">
|
||||
<i class="iconfont iconwenhao1 required growth"></i>
|
||||
<div class="growth-box reason-box reason-growth prompt-box">
|
||||
<div class="prompt-con">设置排序,改变商品规格展示顺序</div>
|
||||
</div>
|
||||
</div>
|
||||
</th>
|
||||
<th>操作</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody class="attr-new">
|
||||
<tr class="null-data">
|
||||
<td colspan="4" align="center">无数据</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
<button class="layui-btn layui-btn-primary" onclick="addNewAttr()">添加商品参数</button>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- 高级设置 -->
|
||||
<div class="layui-tab-item card-common card-brief head">
|
||||
<div class="layui-card-header">
|
||||
<span class="card-title">高级设置</span>
|
||||
</div>
|
||||
|
||||
<div class="layui-card-body">
|
||||
|
||||
<div class="layui-form-item">
|
||||
<label class="layui-form-label">排序:</label>
|
||||
<div class="layui-input-block">
|
||||
<input type="number" name="sort" class="layui-input len-short" value="{$sort_config['default_value']}" placeholder="0" autocomplete="off">
|
||||
</div>
|
||||
<div class="word-aux">商品默认排序号为0,数字越大,排序越靠前,数字重复,则最新添加的靠前。</div>
|
||||
</div>
|
||||
|
||||
<div class="layui-form-item">
|
||||
<label class="layui-form-label">商品详情显示库存:</label>
|
||||
<div class="layui-input-block">
|
||||
<input type="radio" name="stock_show" value="1" title="显示" checked >
|
||||
<input type="radio" name="stock_show" value="0" title="隐藏" >
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="layui-form-item">
|
||||
<label class="layui-form-label">商品详情显示销量:</label>
|
||||
<div class="layui-input-block">
|
||||
<input type="radio" name="sale_show" value="1" title="显示" checked>
|
||||
<input type="radio" name="sale_show" value="0" title="隐藏" >
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="layui-form-item">
|
||||
<label class="layui-form-label">划线价显示:</label>
|
||||
<div class="layui-input-block">
|
||||
<input type="radio" name="market_price_show" value="1" title="显示" checked>
|
||||
<input type="radio" name="market_price_show" value="0" title="隐藏" >
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="layui-form-item">
|
||||
<label class="layui-form-label">商品详情显示弹幕:</label>
|
||||
<div class="layui-input-block">
|
||||
<input type="radio" name="barrage_show" value="1" title="显示" checked>
|
||||
<input type="radio" name="barrage_show" value="0" title="隐藏" >
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="layui-form-item">
|
||||
<label class="layui-form-label">商品海报:</label>
|
||||
<div class="layui-input-block len-mid">
|
||||
<select name="template_id" lay-search lay-verify="">
|
||||
<option value="">请选择商品海报</option>
|
||||
{foreach name="$poster_list" item="vo"}
|
||||
<option value="{$vo['template_id']}">{$vo['poster_name']}</option>
|
||||
{/foreach}
|
||||
</select>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
{if $form_is_exit}
|
||||
<div class="layui-form-item">
|
||||
<label class="layui-form-label">商品表单:</label>
|
||||
<div class="layui-input-block len-mid">
|
||||
<select name="form_id">
|
||||
<option value="0">请选择商品表单</option>
|
||||
{foreach name="$form_list" item="vo"}
|
||||
<option value="{$vo.id}">{$vo.form_name}</option>
|
||||
{/foreach}
|
||||
</select>
|
||||
</div>
|
||||
<div class="word-aux">
|
||||
<a href="{:href_url('form://shop/form/addform?form_type=goods')}" class="text-color" target="_blank">创建商品表单</a>
|
||||
<a href="javascript:;" onclick="refreshFormList()" class="text-color">刷新</a>
|
||||
</div>
|
||||
</div>
|
||||
{/if}
|
||||
</div>
|
||||
|
||||
</div>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="fixed-btn">
|
||||
<button class="layui-btn layui-btn-primary border-color text-color js-prev" lay-filter="prev">上一步</button>
|
||||
<button class="layui-btn js-save" lay-submit="" lay-filter="save">保存</button>
|
||||
<button class="layui-btn layui-btn-primary border-color text-color js-next" lay-submit="" lay-filter="next">下一步</button>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!--选择商品分类-->
|
||||
<script type="text/html" id="selectedCategory">
|
||||
|
||||
<div class="category-list">
|
||||
|
||||
<div class="item">
|
||||
<!--后续做搜索-->
|
||||
<ul>
|
||||
{foreach name="$goods_category_list" item="vo"}
|
||||
{{# if(d.category_id_1 == '{$vo['category_id']}' ){ }}
|
||||
<li data-category-id="{$vo['category_id']}" data-commission-rate="{$vo['commission_rate']}" data-level="{$vo['level']}" class="selected">
|
||||
{{# }else{ }}
|
||||
<li data-category-id="{$vo['category_id']}" data-commission-rate="{$vo['commission_rate']}" data-level="{$vo['level']}">
|
||||
{{# } }}
|
||||
<span class="category-name">{$vo['category_name']}</span>
|
||||
<span class="right-arrow"></span>
|
||||
</li>
|
||||
{/foreach}
|
||||
</ul>
|
||||
</div>
|
||||
|
||||
<div class="item" data-level="2">
|
||||
<!--后续做搜索-->
|
||||
<ul></ul>
|
||||
</div>
|
||||
|
||||
<div class="item" data-level="3">
|
||||
<!--后续做搜索-->
|
||||
<ul></ul>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
|
||||
<div class="selected-category-wrap">
|
||||
<label>您当前选择的是:</label>
|
||||
<span class="js-selected-category"></span>
|
||||
</div>
|
||||
</script>
|
||||
|
||||
<!-- 运费模板 -->
|
||||
<script type="text/html" id="deliveryHtml">
|
||||
<option value="">请选择运费模板</option>
|
||||
{{# for(var i=0;i<d.list.length;i++){ }}
|
||||
<option value="{{d.list[i].template_id}}" {{# if(d.shipping_template == d.list[i].template_id){ }}selected{{# } }}>{{d.list[i].template_name}}</option>
|
||||
{{# } }}
|
||||
</script>
|
||||
|
||||
<!--规格项模板-->
|
||||
<script type="text/html" id="specTemplate">
|
||||
|
||||
{{# for(var i=0;i<d.list.length;i++){ }}
|
||||
<div class="spec-item" data-index="{{i}}">
|
||||
<div class="layui-form-item spec">
|
||||
<label class="layui-form-label">规格项{{i+1}}:</label>
|
||||
<div class="layui-input-inline">
|
||||
<select name="spec_item">
|
||||
<option value="0"></option>
|
||||
{{# if(d.list[i].spec_name != ''){ }}
|
||||
<option value="{{d.list[i].spec_id}}" data-attr-name="{{d.list[i].spec_name}}" selected>{{d.list[i].spec_name}}</option>
|
||||
{{# }else{ }}
|
||||
{{# } }}
|
||||
</select>
|
||||
<i class="layui-icon layui-icon-close" data-index="{{i}}"></i>
|
||||
</div>
|
||||
|
||||
{{# if(i==0){ }}
|
||||
<div class="layui-input-inline">
|
||||
{{# if(d.add_spec_img){ }}
|
||||
<input type="checkbox" name="add_spec_img" title="添加规格图片" lay-skin="primary" lay-filter="add_spec_img" checked>
|
||||
{{# }else{ }}
|
||||
<input type="checkbox" name="add_spec_img" title="添加规格图片" lay-skin="primary" lay-filter="add_spec_img">
|
||||
{{# } }}
|
||||
</div>
|
||||
{{# } }}
|
||||
</div>
|
||||
|
||||
{{# if(d.list[i].spec_name != ''){ }}
|
||||
<div class="layui-form-item spec-value">
|
||||
{{# }else{ }}
|
||||
<div class="layui-form-item spec-value" style="display:none;">
|
||||
{{# } }}
|
||||
<label class="layui-form-label"></label>
|
||||
<div class="layui-input-block spec-value">
|
||||
{{# if(d.list[i].value.length){ }}
|
||||
<ul>
|
||||
{{# for(var j=0;j<d.list[i].value.length;j++){ }}
|
||||
<li data-index="{{j}}" data-parent-index="{{i}}" >
|
||||
{{# if(i==0 && d.add_spec_img){ }}
|
||||
<div class="img-wrap">
|
||||
{{# if(d.list[i].value[j].image){ }}
|
||||
<img src="{{ns.img(d.list[i].value[j].image)}}" alt="">
|
||||
{{# }else{ }}
|
||||
<img src="SHOP_IMG/goods_spec_value_empty.png" alt="">
|
||||
{{# } }}
|
||||
</div>
|
||||
{{# } }}
|
||||
<span title="双击可编辑规格值" ondblclick="$(this).attr('contenteditable',true);$(this).focus()" class="spec-txt" data-spec_value_name="{{d.list[i].value[j].spec_value_name}}" data-parent-index="{{i}}" data-index="{{j}}">{{d.list[i].value[j].spec_value_name}}</span>
|
||||
<i class="layui-icon layui-icon-close" data-parent-index="{{i}}" data-index="{{j}}"></i>
|
||||
</li>
|
||||
{{# } }}
|
||||
</ul>
|
||||
{{# } }}
|
||||
|
||||
<a class="text-color" href="javascript:;" data-index="{{i}}">+添加规格值</a>
|
||||
|
||||
<div class="add-spec-value-popup" data-index="{{i}}">
|
||||
<select name="spec_value_item"></select>
|
||||
<button class="layui-btn layui-btn-primary border-color text-color js-cancel-spec-value">取消</button>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
{{# } }}
|
||||
</script>
|
||||
|
||||
<!--SKU列表模板-->
|
||||
<script type="text/html" id="skuTableTemplate">
|
||||
|
||||
{{# if(d.skuList.length){ }}
|
||||
<table class="layui-table">
|
||||
<colgroup></colgroup>
|
||||
<thead>
|
||||
<tr>
|
||||
{{# if(d.showSpecName){ }}
|
||||
<th colspan="{{d.colSpan}}" style="min-width: 60px;">商品规格</th>
|
||||
{{# } }}
|
||||
<th rowspan="{{d.rowSpan}}">SKU图片</th>
|
||||
<th rowspan="{{d.rowSpan}}">副标题</th>
|
||||
<th rowspan="{{d.rowSpan}}"><span class="required">*</span>销售价</th>
|
||||
<th rowspan="{{d.rowSpan}}">划线价</th>
|
||||
<th rowspan="{{d.rowSpan}}">成本价</th>
|
||||
<th rowspan="{{d.rowSpan}}"><span class="required">*</span>库存</th>
|
||||
<th rowspan="{{d.rowSpan}}">库存预警</th>
|
||||
<th rowspan="{{d.rowSpan}}">重量(kg)</th>
|
||||
<th rowspan="{{d.rowSpan}}">体积(m³)</th>
|
||||
<th rowspan="{{d.rowSpan}}">商品编码(多个编码以英文逗号分割)</th>
|
||||
<th rowspan="{{d.rowSpan}}" style="white-space: nowrap;">默认展示</th>
|
||||
</tr>
|
||||
{{# if(d.colSpan>1){ }}
|
||||
<tr>
|
||||
{{# for(var i=0;i<d.specList.length;i++){ }}
|
||||
{{# if(d.specList[i].spec_name && d.specList[i].value.length> 0){ }}
|
||||
<th>{{d.specList[i].spec_name}}</th>
|
||||
{{# } }}
|
||||
{{# } }}
|
||||
</tr>
|
||||
{{# } }}
|
||||
</thead>
|
||||
<tbody>
|
||||
{{# for(var i=0;i<d.skuList.length;i++){ }}
|
||||
<tr data-index="{{i}}">
|
||||
<td class="sku_imgs" id="sku_img_{{i}}" style="width: 130px;">
|
||||
{{# for(var j=0;j<d.skuList[i].sku_images_arr.length;j++){ }}
|
||||
<div class="img-wrap" data-index="{{j}}" data-parent-index="{{i}}">
|
||||
<a href="javascript:void(0)">
|
||||
<img src="{{ns.img(d.skuList[i].sku_images_arr[j])}}" layer-src />
|
||||
</a>
|
||||
<div class="operation">
|
||||
<i title="图片预览" class="iconfont iconreview js-preview"></i>
|
||||
<i title="删除图片" class="layui-icon layui-icon-delete js-delete"></i>
|
||||
</div>
|
||||
</div>
|
||||
{{# } }}
|
||||
{{# if(d.skuList[i].sku_images_arr.length<d.goods_sku_max){ }}
|
||||
<div class="upload-sku-img" data-index="{{i}}"><i class="layui-icon layui-icon-add-1"></i></div>
|
||||
{{# } }}
|
||||
</td>
|
||||
<td>
|
||||
<input type="text" name="spec_name" placeholder="副标题" maxlength="100" value="{{d.skuList[i].spec_name}}" class="layui-input" autocomplete="off" data-index="{{i}}">
|
||||
</td>
|
||||
<td>
|
||||
<input type="text" name="price" placeholder="销售价" lay-verify="sku_price" value="{{d.skuList[i].price}}" class="layui-input" autocomplete="off" data-index="{{i}}">
|
||||
</td>
|
||||
<td>
|
||||
<input type="text" name="market_price" placeholder="划线价" value="{{d.skuList[i].market_price}}" lay-verify="sku_market_price" class="layui-input" autocomplete="off" data-index="{{i}}">
|
||||
</td>
|
||||
<td>
|
||||
<input type="text" name="cost_price" placeholder="成本价" value="{{d.skuList[i].cost_price}}" lay-verify="sku_cost_price" class="layui-input" autocomplete="off" data-index="{{i}}">
|
||||
</td>
|
||||
<td>
|
||||
<input type="text" name="stock" placeholder="库存" value="{{d.skuList[i].stock}}" lay-verify="sku_stock" class="layui-input" autocomplete="off" data-index="{{i}}">
|
||||
</td>
|
||||
<td>
|
||||
<input type="text" name="stock_alarm" placeholder="库存预警" value="{{d.skuList[i].stock_alarm}}" lay-verify="sku_stock_alarm" class="layui-input" autocomplete="off" data-index="{{i}}">
|
||||
</td>
|
||||
<td>
|
||||
<input type="text" name="weight" placeholder="重量(kg)" value="{{d.skuList[i].weight}}" lay-verify="sku_weight" class="layui-input" autocomplete="off" data-index="{{i}}">
|
||||
</td>
|
||||
<td>
|
||||
<input type="text" name="volume" placeholder="体积(m³)" value="{{d.skuList[i].volume}}" lay-verify="sku_volume" class="layui-input" autocomplete="off" data-index="{{i}}">
|
||||
</td>
|
||||
<td>
|
||||
<input type="text" name="sku_no" placeholder="商品编码" value="{{d.skuList[i].sku_no}}" maxlength="50" class="layui-input" autocomplete="off" data-index="{{i}}">
|
||||
</td>
|
||||
<td style="min-width: 40px;">
|
||||
{{# if(d.skuList[i].is_default == 1) { }}
|
||||
<input type="checkbox" data-index="{{i}}" name="is_default" lay-filter="is_default" lay-skin="switch" checked>
|
||||
{{# }else { }}
|
||||
<input type="checkbox" data-index="{{i}}" name="is_default" lay-filter="is_default" lay-skin="switch">
|
||||
{{# } }}
|
||||
</td>
|
||||
</tr>
|
||||
{{# } }}
|
||||
|
||||
</tbody>
|
||||
</table>
|
||||
{{# } }}
|
||||
<div class="word-aux text-color" style="margin: 10px 0 0 0;">默认展示,是多规格商品在客户访问商品时,默认显示的商品规格</div>
|
||||
</script>
|
||||
|
||||
<!--商品主图列表-->
|
||||
<script type="text/html" id="goodsImage">
|
||||
{{# if(d.list.length){ }}
|
||||
{{# for(var i=0;i<d.list.length;i++){ }}
|
||||
<div class="item upload_img_square_item" data-index="{{i}}">
|
||||
<div class="img-wrap">
|
||||
<img src="{{ns.img(d.list[i],'small')}}" layer-src="{{ns.img(d.list[i])}}">
|
||||
</div>
|
||||
<div class="operation">
|
||||
<i title="图片预览" class="iconfont iconreview js-preview"></i>
|
||||
<i title="删除图片" class="layui-icon layui-icon-delete js-delete" data-index="{{i}}"></i>
|
||||
<div class="replace_img" data-index="{{i}}">点击替换</div>
|
||||
</div>
|
||||
</div>
|
||||
{{# } }}
|
||||
{{# if(d.list.length < d.max){ }}
|
||||
<div class="item js-add-goods-image upload_img_square">+</div>
|
||||
{{# } }}
|
||||
{{# }else{ }}
|
||||
<div class="item js-add-goods-image upload_img_square">+</div>
|
||||
{{# } }}
|
||||
</script>
|
||||
|
||||
<!--商品视频-->
|
||||
<script type="text/html" id="goodsVideo">
|
||||
</script>
|
||||
|
||||
<!--属性列表模板-->
|
||||
<script type="text/html" id="attrTemplate">
|
||||
{{# for(var i=0;i<d.list.length;i++){ }}
|
||||
<tr class="goods-attr-tr goods-attr-temp" data-attr-class-id="{{d.list[i].attr_class_id}}" data-attr-class-name="{{d.list[i].attr_class_name}}" data-attr-id="{{d.list[i].attr_id}}" data-attr-name="{{d.list[i].attr_name}}" data-attr-type="{{d.list[i].attr_type}}">
|
||||
<td>{{d.list[i].attr_name}}</td>
|
||||
<td>
|
||||
{{# if(d.list[i].attr_type == 1){ }}
|
||||
{{# for(var j=0;j<d.list[i].attr_value_format.length;j++){ }}
|
||||
<input type="radio" name="attr_value_{{d.list[i].attr_id}}" value="{{d.list[i].attr_value_format[j].attr_value_id}}" title="{{d.list[i].attr_value_format[j].attr_value_name}}" data-attr-value-name="{{d.list[i].attr_value_format[j].attr_value_name}}" />
|
||||
{{# } }}
|
||||
{{# }else if(d.list[i].attr_type == 2){ }}
|
||||
{{# for(var j=0;j<d.list[i].attr_value_format.length;j++){ }}
|
||||
<input type="checkbox" name="attr_value_{{d.list[i].attr_id}}" value="{{d.list[i].attr_value_format[j].attr_value_id}}" title="{{d.list[i].attr_value_format[j].attr_value_name}}" data-attr-value-name="{{d.list[i].attr_value_format[j].attr_value_name}}" lay-skin="primary">
|
||||
{{# } }}
|
||||
{{# }else if(d.list[i].attr_type == 3){ }}
|
||||
<input type="text" name="attr_value_{{d.list[i].attr_id}}" placeholder="{{d.list[i].attr_name}}" class="layui-input len-mid" autocomplete="off">
|
||||
{{# } }}
|
||||
</td>
|
||||
<td><input type="number" name="" value="{{d.list[i].sort ? d.list[i].sort : 0}}" placeholder="" class="layui-input attr-sort" autocomplete="off"></td>
|
||||
<td><div class="table-btn"><a class="layui-btn" onclick="delAttr(this)">删除</a></div></td>
|
||||
</tr>
|
||||
{{# } }}
|
||||
</script>
|
||||
|
||||
<!--批量操作模版-->
|
||||
<script type="text/html" id="batchOperateTemplate">
|
||||
{{# for(var i=0;i<d.length;i++){ }}
|
||||
{{# if(d[i].value.length > 0){ }}
|
||||
<div class="layui-input-inline">
|
||||
<select name="spec_value:{{d[i].spec_id}}" lay-search="" id="spec_value_{{d[i].spec_id}}" data-spec-name="{{d[i].spec_name}}" >
|
||||
<option value="all">请选择{{d[i].spec_name}}</option>
|
||||
{{# for(var j=0;j< d[i].value.length;j++){ }}
|
||||
<option value="{{d[i].value[j].spec_value_id}}">{{d[i].value[j].spec_value_name}}</option>
|
||||
{{# } }}
|
||||
</select>
|
||||
</div>
|
||||
{{# } }}
|
||||
{{# } }}
|
||||
</script>
|
||||
|
||||
<script src="__STATIC__/ext/drag-arrange.js"></script>
|
||||
<script src="__STATIC__/ext/video/videojs-ie8.min.js"></script>
|
||||
<script src="__STATIC__/ext/video/video.min.js"></script>
|
||||
<script src="__STATIC__/ext/searchable_select/searchable_select.js"></script>
|
||||
<script src="SHOP_JS/category_select.js?time=20240821"></script>
|
||||
<script src="SHOP_JS/goods_edit_common.js?time=20250527"></script>
|
||||
<script src="SHOP_JS/goods_edit.js?time=20241217"></script>
|
||||
<script>
|
||||
layui.use('form', function () {
|
||||
$('#goods_name').on('input', function (e) {
|
||||
var num = e.target.value.length;
|
||||
num = 60 - parseInt(num);
|
||||
$('#add_goods_name .input-text-hint').html('剩余' + num);
|
||||
});
|
||||
});
|
||||
</script>
|
||||
139
app/shop/view/goods/add_qrcode.html
Executable file
139
app/shop/view/goods/add_qrcode.html
Executable file
@@ -0,0 +1,139 @@
|
||||
<style>
|
||||
.form-row .layui-btn{margin-right:14px;}
|
||||
.layui-btn+.layui-btn{margin-left: 0;}
|
||||
</style>
|
||||
|
||||
<div class="layui-form form-wrap">
|
||||
<div class="layui-form-item">
|
||||
<label class="layui-form-label"><span class="required">*</span>社群名称:</label>
|
||||
<div class="layui-input-block">
|
||||
<input name="qr_name" lay-verify="qr_name" type="text" lay-verify="required" class="layui-input len-long" autocomplete="off">
|
||||
</div>
|
||||
</div>
|
||||
<div class="layui-form-item">
|
||||
<label class="layui-form-label"><span class="required">*</span>社群描述:</label>
|
||||
<div class="layui-input-block">
|
||||
<textarea name="community_describe" class="layui-textarea len-long" maxlength="100" placeholder="请输入社群描述,不能超过100个字符" id="" lay-verify="community_describe" lay-verify="required" cols="30" rows="10"></textarea>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="layui-form-item">
|
||||
<label class="layui-form-label short-label"><span class="required">*</span>二维码图片:</label>
|
||||
<div class="layui-input-inline">
|
||||
<div class="upload-img-block square">
|
||||
<div class="upload-img-box">
|
||||
<div class="upload-default" id="qr_img">
|
||||
<div class="upload">
|
||||
<i class="iconfont iconshangchuan"></i>
|
||||
<p>点击上传</p>
|
||||
</div>
|
||||
</div>
|
||||
<div class="operation">
|
||||
<div>
|
||||
<i title="图片预览" class="iconfont iconreview js-preview" style="margin-right: 20px;"></i>
|
||||
<i title="删除图片" class="layui-icon layui-icon-delete js-delete"></i>
|
||||
</div>
|
||||
<div class="replace_img js-replace">点击替换</div>
|
||||
</div>
|
||||
<input type="hidden" lay-verify="qr_img" name="qr_img" />
|
||||
</div>
|
||||
<!-- <p id="qr_img" class="no-replace">替换</p>
|
||||
<i class="del">x</i> -->
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-row">
|
||||
<button id="submit" class="layui-btn" lay-submit lay-filter="save">提交</button>
|
||||
<button class="layui-btn layui-btn-primary" onclick="backCommunityQrcode()">返回</button>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<script>
|
||||
layui.use(['form', 'laydate'], function() {
|
||||
var form = layui.form,
|
||||
laydate = layui.laydate,
|
||||
repeat_flag = false; //防重复标识
|
||||
form.render();
|
||||
|
||||
laydate.render({
|
||||
elem: '#laydate'
|
||||
});
|
||||
|
||||
var upload = new Upload({
|
||||
elem: '#qr_img',
|
||||
callback:function(res){
|
||||
if(res.code==10067){
|
||||
// $('#submit').css('display','inline-block')
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
/**
|
||||
* 表单验证
|
||||
*/
|
||||
form.verify({
|
||||
qr_name: function (value) {
|
||||
if (!/[\S]+/.test(value)) {
|
||||
return '请输入二维码名称';
|
||||
}
|
||||
if (value < 0) {
|
||||
return '金额不能小于0!';
|
||||
}
|
||||
},
|
||||
community_describe: function (value) {
|
||||
if (!/[\S]+/.test(value)) {
|
||||
return '请输入社群描述';
|
||||
}
|
||||
},
|
||||
qr_img: function (value) {
|
||||
if (!/[\S]+/.test(value)) {
|
||||
return '请上传社群二维码';
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
/**
|
||||
* 监听提交
|
||||
*/
|
||||
form.on('submit(save)', function(data) {
|
||||
|
||||
// 删除图片
|
||||
if(!data.field.qr_img) upload.delete();
|
||||
|
||||
if(repeat_flag) return false;
|
||||
repeat_flag = true;
|
||||
|
||||
$.ajax({
|
||||
url: ns.url("shop/goods/addqrcode"),
|
||||
data: data.field,
|
||||
dataType: 'JSON', //服务器返回json格式数据
|
||||
type: 'POST', //HTTP请求类型
|
||||
success: function(res) {
|
||||
repeat_flag = false;
|
||||
if (res.code == 0) {
|
||||
layer.confirm('添加成功', {
|
||||
title:'操作提示',
|
||||
btn: ['返回列表', '继续添加'],
|
||||
closeBtn: 0,
|
||||
yes: function(index, layero){
|
||||
location.hash = ns.hash("shop/goods/communityqrcode")
|
||||
layer.close(index);
|
||||
},
|
||||
btn2: function (index, layero) {
|
||||
listenerHash(); // 刷新页面
|
||||
layer.close(index);
|
||||
}
|
||||
});
|
||||
}else{
|
||||
layer.msg(res.message);
|
||||
}
|
||||
}
|
||||
});
|
||||
});
|
||||
|
||||
});
|
||||
|
||||
function backCommunityQrcode() {
|
||||
location.hash = ns.hash("shop/goods/communityqrcode");
|
||||
}
|
||||
</script>
|
||||
237
app/shop/view/goods/community_qrcode.html
Executable file
237
app/shop/view/goods/community_qrcode.html
Executable file
@@ -0,0 +1,237 @@
|
||||
<style>
|
||||
.layui-layout-admin .table-tab{margin-top: 0;}
|
||||
</style>
|
||||
|
||||
<div class="layui-collapse tips-wrap">
|
||||
<div class="layui-colla-item">
|
||||
<h2 class="layui-colla-title">操作提示</h2>
|
||||
<ul class="layui-colla-content layui-show">
|
||||
<li>社群信息可以展示在商品详情中,需在商品中进行设置后才能展示。</li>
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
<!-- 搜索框 -->
|
||||
<div class="single-filter-box">
|
||||
<button class="layui-btn" onclick="add()">添加社群</button>
|
||||
|
||||
<div class="layui-form">
|
||||
<div class="layui-input-inline">
|
||||
<input type="text" name="keywords" placeholder="请输入社群名称" class="layui-input" autocomplete="off">
|
||||
<button type="button" class="layui-btn layui-btn-primary" lay-filter="search" lay-submit>
|
||||
<i class="layui-icon"></i>
|
||||
</button>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="layui-tab table-tab" lay-filter="manjian_tab">
|
||||
<div class="layui-tab-content">
|
||||
<!-- 列表 -->
|
||||
<table id="qr_list" lay-filter="qr_list"></table>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<script type="text/html" id="qr_img">
|
||||
<div class='table-title'>
|
||||
<div class='title-pic'>
|
||||
<img layer-src src="{{ns.img(d.qr_img)}}" onerror="this.src = '{:img('public/static/img/default_img/head.png')}' ">
|
||||
</div>
|
||||
<div class='title-pic' style="text-align:left">{{d.qr_name}}</div>
|
||||
</div>
|
||||
</script>
|
||||
|
||||
<script type="text/html" id="qr_state">
|
||||
<div class='table-title'>
|
||||
{{# if(d.qr_state == 0){ }}
|
||||
<div class='title-pic' style="text-align:left">未启用</div>
|
||||
{{# }else{ }}
|
||||
<div class='title-pic text-color' style="text-align:left">启用</div>
|
||||
{{# } }}
|
||||
</div>
|
||||
</script>
|
||||
|
||||
<!-- 操作 -->
|
||||
<script type="text/html" id="operation">
|
||||
<div class="table-btn">
|
||||
<a class="layui-btn" lay-event="edit" >编辑</a>
|
||||
{{# if(d.qr_state==0){ }}
|
||||
<a class="layui-btn" lay-event="start">启用</a>
|
||||
{{# }else{ }}
|
||||
<a class="layui-btn" lay-event="close">关闭</a>
|
||||
{{# } }}
|
||||
<a class="layui-btn" lay-event="delete">删除</a>
|
||||
</div>
|
||||
</script>
|
||||
|
||||
<script>
|
||||
var laytpl;
|
||||
layui.use(['form','laytpl'], function() {
|
||||
var table,
|
||||
form = layui.form,
|
||||
repeat_flag = false; //防重复标识
|
||||
form.render();
|
||||
|
||||
laytpl = layui.laytpl;
|
||||
table = new Table({
|
||||
elem: '#qr_list',
|
||||
url: ns.url("shop/goods/communityqrcode"),
|
||||
cols: [
|
||||
[ {
|
||||
field: 'qr_img',
|
||||
title: '社群信息',
|
||||
unresize: 'false',
|
||||
width: '18%',
|
||||
templet:'#qr_img'
|
||||
},{
|
||||
field: 'community_describe',
|
||||
title: '社群描述',
|
||||
unresize: 'false',
|
||||
width: '30%',
|
||||
templet:'<div><span title="{{d.community_describe}}">{{d.community_describe}}</span></div>'
|
||||
}, {
|
||||
field: 'qr_state',
|
||||
title: '社群状态',
|
||||
unresize: 'false',
|
||||
width: '15%',
|
||||
templet: '#qr_state'
|
||||
},{
|
||||
title: '操作',
|
||||
toolbar: '#operation',
|
||||
unresize: 'false',
|
||||
align : 'right'
|
||||
}]
|
||||
]
|
||||
});
|
||||
|
||||
/**
|
||||
* 监听工具栏操作
|
||||
*/
|
||||
table.tool(function(obj) {
|
||||
var data = obj.data;
|
||||
switch (obj.event) {
|
||||
case 'edit': //编辑
|
||||
location.hash = ns.hash("shop/goods/editqrcode", {"qr_id": data.qr_id});
|
||||
break;
|
||||
case 'delete': //删除
|
||||
deleteQr(data.qr_id,data.qr_state);
|
||||
break;
|
||||
case 'close': //关闭
|
||||
close(data.qr_id);
|
||||
break;
|
||||
case 'start': //启用
|
||||
start(data.qr_id);
|
||||
break;
|
||||
}
|
||||
});
|
||||
|
||||
/**
|
||||
* 删除
|
||||
*/
|
||||
function deleteQr(qr_id,qr_state) {
|
||||
if(qr_state == 1){
|
||||
return layer.msg('请先关闭再删除');
|
||||
}
|
||||
if (repeat_flag) return false;
|
||||
repeat_flag = true;
|
||||
layer.confirm('确定要删除该社群吗?', function(index) {
|
||||
layer.close(index);
|
||||
$.ajax({
|
||||
url: ns.url("shop/goods/deleteqr"),
|
||||
data: {
|
||||
qr_id:qr_id
|
||||
},
|
||||
dataType: 'JSON',
|
||||
type: 'POST',
|
||||
success: function(res) {
|
||||
layer.msg(res.message);
|
||||
repeat_flag = false;
|
||||
|
||||
if (res.code == 0) {
|
||||
table.reload();
|
||||
}
|
||||
}
|
||||
});
|
||||
}, function () {
|
||||
layer.close();
|
||||
repeat_flag = false;
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
* 关闭
|
||||
*/
|
||||
function close(qr_id) {
|
||||
if (repeat_flag) return false;
|
||||
repeat_flag = true;
|
||||
|
||||
layer.confirm('确定关闭吗?', function(index) {
|
||||
layer.close(index);
|
||||
$.ajax({
|
||||
url: ns.url("shop/goods/editstate"),
|
||||
data: {
|
||||
qr_id:qr_id,state:0
|
||||
},
|
||||
dataType: 'JSON',
|
||||
type: 'POST',
|
||||
success: function(res) {
|
||||
layer.msg(res.message);
|
||||
repeat_flag = false;
|
||||
|
||||
if (res.code == 0) {
|
||||
table.reload();
|
||||
}
|
||||
}
|
||||
});
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
* 开启
|
||||
*/
|
||||
function start(qr_id) {
|
||||
if (repeat_flag) return false;
|
||||
repeat_flag = true;
|
||||
|
||||
layer.confirm('确定启用吗?', function(index) {
|
||||
layer.close(index);
|
||||
$.ajax({
|
||||
url: ns.url("shop/goods/editstate"),
|
||||
data: {
|
||||
qr_id:qr_id,state:1
|
||||
},
|
||||
dataType: 'JSON',
|
||||
type: 'POST',
|
||||
success: function(res) {
|
||||
layer.msg(res.message);
|
||||
repeat_flag = false;
|
||||
|
||||
if (res.code == 0) {
|
||||
table.reload();
|
||||
}
|
||||
}
|
||||
});
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
* 搜索功能
|
||||
*/
|
||||
form.on('submit(search)', function(data) {
|
||||
table.reload({
|
||||
page: {
|
||||
curr: 1
|
||||
},
|
||||
where: data.field
|
||||
});
|
||||
});
|
||||
});
|
||||
|
||||
function add() {
|
||||
location.hash = ns.hash("shop/goods/addqrcode");
|
||||
}
|
||||
</script>
|
||||
|
||||
<!-- 详情弹框html -->
|
||||
<script type="text/html" id="detail">
|
||||
<img layer-src src="{{ns.img(d.qr_img)}}" class="img_prev"/>
|
||||
</script>
|
||||
162
app/shop/view/goods/default_search_words.html
Executable file
162
app/shop/view/goods/default_search_words.html
Executable file
@@ -0,0 +1,162 @@
|
||||
<style type="text/css">
|
||||
.examples {cursor: pointer;}
|
||||
.keywords-item{position:relative;margin-bottom:10px}
|
||||
.keywords-item .layui-icon-close{font-size:12px;position:absolute;top:-8px;right:-8px;width:16px;height:16px;line-height:16px;text-align:center;color:#fff;-webkit-border-radius:10px;-moz-border-radius:10px;border-radius:10px;background:rgba(0,0,0,.3);cursor:pointer}
|
||||
.layui-form .card-common .layui-card-body{padding:0px}
|
||||
</style>
|
||||
|
||||
<div class="layui-form layui-card card-common card-brief head">
|
||||
<div class="layui-card-header">
|
||||
<span class="card-title">默认搜索</span>
|
||||
</div>
|
||||
<div class="layui-form-item">
|
||||
<label class="layui-form-label">默认搜索关键词:</label>
|
||||
<div class="layui-input-block len-long">
|
||||
<textarea name="default_words" class="layui-textarea" maxlength="150">{$default_search_words['words']}</textarea>
|
||||
</div>
|
||||
<div class="word-aux">默认搜索,将显示在前台搜索框,前台点击时直接作为关键词进行搜索 <a onclick="showDemo()" class="examples text-color">查看示例</a></div>
|
||||
</div>
|
||||
<div class="layui-card-header">
|
||||
<span class="card-title">热门搜索</span>
|
||||
</div>
|
||||
<div class="layui-card card-common card-brief">
|
||||
<div class="layui-card-body">
|
||||
<div class="layui-form-item">
|
||||
<label class="layui-form-label">首页搜索的关键字:</label>
|
||||
<div class="layui-input-block keywords-block">
|
||||
{if !empty($hot_search_words.words_array)}
|
||||
{foreach $hot_search_words.words_array as $k => $v}
|
||||
<div class="layui-input-inline keywords-item">
|
||||
<input type="text" name="words[]" lay-verify="required" value="{$v}" placeholder="" autocomplete="off" class="layui-input len-short">
|
||||
<i class="layui-icon layui-icon-close" ></i>
|
||||
</div>
|
||||
{/foreach}
|
||||
{else/}
|
||||
<div class="layui-input-inline keywords-item">
|
||||
<input type="text" name="words[]" lay-verify="required" value="" placeholder="" autocomplete="off" class="layui-input len-short">
|
||||
<i class="layui-icon layui-icon-close" ></i>
|
||||
</div>
|
||||
{/if}
|
||||
</div>
|
||||
|
||||
</div>
|
||||
<div class="layui-form-item">
|
||||
<div class="word-aux">首页显示的搜索关键字,可以通过拖拽来调整顺序</div>
|
||||
<label class="layui-form-label"></label>
|
||||
<div class="layui-input-block">
|
||||
<div class="layui-input-inline">
|
||||
<a class="text-color" href="javascript:void(0)" onclick="addKeywords()">添加</a>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="layui-card-header">
|
||||
<span class="card-title">百度拆词服务 <a target="_blank" href="https://www.kancloud.cn/niucloud/niushop_b2c_v5/3268653" class="examples text-color">接入指南</a></span>
|
||||
</div>
|
||||
|
||||
<div class="layui-card card-common card-brief">
|
||||
<div class="layui-card-body">
|
||||
<div class="layui-form-item">
|
||||
<label class="layui-form-label">是否启用:</label>
|
||||
<div class="layui-input-block">
|
||||
<div class="layui-input-inline">
|
||||
<input type="radio" name="is_open" value="0" title="关闭" autocomplete="off" class="layui-input len-long" {if $split_word.is_open==0} checked {/if}>
|
||||
<input type="radio" name="is_open" value="1" title="开启" autocomplete="off" class="layui-input len-long" {if $split_word.is_open==1} checked {/if}>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="layui-form-item">
|
||||
<div class="word-aux">开启后,商品搜索时将会使用百度拆词接口,提供更准确的搜索结果</div>
|
||||
<div class="word-aux">例如:会员搜索华为手机关键词后,将自动拆词为华为、手机关键词分别搜索</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="layui-card card-common card-brief">
|
||||
<div class="layui-card-body">
|
||||
<div class="layui-form-item">
|
||||
<label class="layui-form-label">apiKey:</label>
|
||||
<div class="layui-input-block">
|
||||
<div class="layui-input-inline">
|
||||
<input type="text" name="apiKey" value="{:empty($split_word.apiKey) ? '' : '******'}" autocomplete="off" class="layui-input len-long" >
|
||||
</div>
|
||||
</div>
|
||||
<div class="word-aux">百度apiKey <a href="https://console.bce.baidu.com/iam/#/iam/accesslist" target="_blank" class="examples text-color">获取</a></div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="layui-card card-common card-brief">
|
||||
<div class="layui-card-body">
|
||||
<div class="layui-form-item">
|
||||
<label class="layui-form-label">secretKey:</label>
|
||||
<div class="layui-input-block">
|
||||
<div class="layui-input-inline">
|
||||
<input type="text" name="secretKey" value="{:empty($split_word.secretKey) ? '' : '******'}" autocomplete="off" class="layui-input len-long ">
|
||||
</div>
|
||||
</div>
|
||||
<div class="word-aux">百度secretKey <a href="https://console.bce.baidu.com/iam/#/iam/accesslist" target="_blank" class="examples text-color">获取</a></div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="form-row">
|
||||
<button class="layui-btn" lay-submit lay-filter="save">保存</button>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
|
||||
<script src="__STATIC__/ext/drag-arrange.js"></script>
|
||||
<script>
|
||||
layui.use('form', function() {
|
||||
var form = layui.form,repeat_flag=false;
|
||||
form.on('submit(save)', function(data) {
|
||||
if (repeat_flag) return;
|
||||
repeat_flag = true;
|
||||
|
||||
$.ajax({
|
||||
url: ns.url("shop/goods/defaultsearchwords"),
|
||||
data: data.field,
|
||||
dataType: 'JSON',
|
||||
type: 'POST',
|
||||
success: function(res) {
|
||||
repeat_flag = false;
|
||||
layer.msg(res.message);
|
||||
}
|
||||
});
|
||||
});
|
||||
|
||||
$(".keywords-item").arrangeable({
|
||||
//拖拽结束后执行回调
|
||||
callback: function (e) {
|
||||
}
|
||||
});
|
||||
|
||||
$('body').off('click', ".keywords-item .layui-icon-close").on('click', ".keywords-item .layui-icon-close",function () {
|
||||
$(this).parent().remove();
|
||||
});
|
||||
});
|
||||
|
||||
function addKeywords(){
|
||||
var html = '<div class="layui-input-inline keywords-item"><input type="text" name="words[]" lay-verify="required" value="" placeholder="" autocomplete="off" class="layui-input len-short"><i class="layui-icon layui-icon-close" ></i></div>';
|
||||
$('.keywords-block').append(html);
|
||||
|
||||
setTimeout(function () {
|
||||
$(".keywords-item").arrangeable({
|
||||
//拖拽结束后执行回调
|
||||
callback: function (e) {
|
||||
}
|
||||
});
|
||||
}, 1);
|
||||
}
|
||||
|
||||
function showDemo(){
|
||||
layer.open({
|
||||
title: '查看示例',
|
||||
type: 1,
|
||||
area: ['500px', '660px'],
|
||||
content: '<img style="margin: 20px 80px;" src="SHOP_IMG/hot_search.png">'
|
||||
})
|
||||
}
|
||||
</script>
|
||||
1002
app/shop/view/goods/edit_goods.html
Executable file
1002
app/shop/view/goods/edit_goods.html
Executable file
File diff suppressed because it is too large
Load Diff
139
app/shop/view/goods/edit_qrcode.html
Executable file
139
app/shop/view/goods/edit_qrcode.html
Executable file
@@ -0,0 +1,139 @@
|
||||
<style>
|
||||
.form-row .layui-btn{margin-right:14px;}
|
||||
.layui-btn+.layui-btn{margin-left: 0;}
|
||||
</style>
|
||||
|
||||
<div class="layui-form form-wrap">
|
||||
<div class="layui-form-item">
|
||||
<label class="layui-form-label"><span class="required">*</span>社群名称:</label>
|
||||
<div class="layui-input-block">
|
||||
<input name="qr_name" type="text" lay-verify="qr_name" lay-verify="required" value="{$qr_data.qr_name}" class="layui-input len-long" autocomplete="off">
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="layui-form-item">
|
||||
<label class="layui-form-label"><span class="required">*</span>社群描述:</label>
|
||||
<div class="layui-input-block">
|
||||
<textarea name="community_describe" class="layui-textarea len-long" maxlength="100" lay-verify="community_describe" id="" lay-verify="required" cols="30" rows="10">{$qr_data.community_describe}</textarea>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="layui-form-item">
|
||||
<label class="layui-form-label short-label"><span class="required">*</span>二维码图片:</label>
|
||||
<div class="layui-input-inline">
|
||||
<div class="upload-img-block square">
|
||||
<div class="upload-img-box {notempty name="$qr_data['qr_img']"}hover{/notempty}">
|
||||
<div class="upload-default" id="qr_img">
|
||||
{if condition="$qr_data['qr_img']"}
|
||||
<div class="preview_img" id="ceshi">
|
||||
<img src="{:img($qr_data['qr_img'])}" class="img_prev" data-id="qr_img" layer-src/>
|
||||
</div>
|
||||
{else/}
|
||||
<div class="upload">
|
||||
<i class="iconfont iconshangchuan"></i>
|
||||
<p>点击上传</p>
|
||||
</div>
|
||||
{/if}
|
||||
</div>
|
||||
<div class="operation">
|
||||
<div>
|
||||
<i title="图片预览" class="iconfont iconreview js-preview"></i>
|
||||
<i title="删除图片" class="layui-icon layui-icon-delete js-delete"></i>
|
||||
</div>
|
||||
<div class="replace_img js-replace">点击替换</div>
|
||||
</div>
|
||||
<input type="hidden" name="qr_img" lay-verify="qr_img" value="{$qr_data['qr_img']}"/>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-row">
|
||||
<input type="hidden" name="qr_id" value="{$qr_data['qr_id']}"/>
|
||||
<button id="submit" class="layui-btn" lay-submit lay-filter="save">提交</button>
|
||||
<button class="layui-btn layui-btn-primary" onclick="backCommunityQrcode()">返回</button>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
|
||||
<script>
|
||||
layui.use(['form', 'laydate'], function() {
|
||||
var form = layui.form,
|
||||
laydate = layui.laydate,
|
||||
repeat_flag = false; //防重复标识
|
||||
form.render();
|
||||
|
||||
laydate.render({
|
||||
elem: '#laydate'
|
||||
});
|
||||
|
||||
var upload = new Upload({
|
||||
elem: '#qr_img',
|
||||
callback:function(res){
|
||||
// if(res.code==10067){
|
||||
// $('#submit').css('display','inline-block')
|
||||
// }
|
||||
}
|
||||
});
|
||||
|
||||
/**
|
||||
* 表单验证
|
||||
*/
|
||||
|
||||
form.verify({
|
||||
qr_name: function(value){
|
||||
if (!/[\S]+/.test(value)) {
|
||||
return '请输入二维码名称';
|
||||
}
|
||||
},
|
||||
community_describe: function(value){
|
||||
if (!/[\S]+/.test(value)) {
|
||||
return '请输入社群描述';
|
||||
}
|
||||
},
|
||||
qr_img: function(value){
|
||||
if (!/[\S]+/.test(value)) {
|
||||
return '请上传社群二维码';
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
/**
|
||||
* 监听提交
|
||||
*/
|
||||
form.on('submit(save)', function(data) {
|
||||
// 删除图片
|
||||
if(!data.field.qr_img) upload.delete();
|
||||
|
||||
if(repeat_flag) return false;
|
||||
repeat_flag = true;
|
||||
|
||||
$.ajax({
|
||||
url: ns.url("shop/goods/editqrcode"),
|
||||
data: data.field,
|
||||
dataType: 'JSON', //服务器返回json格式数据
|
||||
type: 'POST', //HTTP请求类型
|
||||
success: function(res) {
|
||||
repeat_flag = false;
|
||||
if (res.code == 0) {
|
||||
layer.confirm('编辑成功', {
|
||||
title:'操作提示',
|
||||
btn: ['返回列表'],
|
||||
closeBtn: 0,
|
||||
yes: function(index, layero) {
|
||||
location.hash = ns.hash("shop/goods/communityqrcode")
|
||||
layer.close(index);
|
||||
},
|
||||
});
|
||||
}else{
|
||||
layer.msg(res.message);
|
||||
}
|
||||
}
|
||||
});
|
||||
});
|
||||
|
||||
});
|
||||
|
||||
function backCommunityQrcode() {
|
||||
location.hash = ns.hash("shop/goods/communityqrcode");
|
||||
}
|
||||
</script>
|
||||
407
app/shop/view/goods/evaluate.html
Executable file
407
app/shop/view/goods/evaluate.html
Executable file
@@ -0,0 +1,407 @@
|
||||
<link rel="stylesheet" type="text/css" href="SHOP_CSS/evaluate.css" />
|
||||
|
||||
<!-- 搜索框 -->
|
||||
<div class="screen layui-collapse" >
|
||||
<div class="layui-colla-item">
|
||||
<form class="layui-colla-content layui-form layui-show" lay-filter="selection_panel">
|
||||
<div class="layui-form-item">
|
||||
<div class="layui-inline">
|
||||
<label class="layui-form-label">搜索类型</label>
|
||||
<div class="layui-input-inline">
|
||||
<select name="search_type">
|
||||
<option value="sku_name">商品名称</option>
|
||||
<option value="member_name">评价人名称</option>
|
||||
</select>
|
||||
</div>
|
||||
<div class="layui-input-inline">
|
||||
<input type="text" name="search_text" placeholder="请输入搜索内容" class="layui-input len-mid" autocomplete="off">
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="layui-inline">
|
||||
<label class="layui-form-label">评价类型</label>
|
||||
<div class="layui-input-inline">
|
||||
<select name="explain_type">
|
||||
<option value="">请选择评分类型</option>
|
||||
<option value="1">好评</option>
|
||||
<option value="2">中评</option>
|
||||
<option value="3">差评</option>
|
||||
</select>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="layui-inline">
|
||||
<label class="layui-form-label">评论时间</label>
|
||||
<div class="layui-input-inline">
|
||||
<input type="text" name="start_time" id="start_time" placeholder="开始时间" class="layui-input" autocomplete="off" readonly>
|
||||
<i class=" iconrili iconfont calendar"></i>
|
||||
</div>
|
||||
<div class="layui-form-mid">-</div>
|
||||
<div class="layui-input-inline end-time">
|
||||
<input type="text" name="end_time" id="end_time" placeholder="结束时间" class="layui-input" autocomplete="off" readonly>
|
||||
<i class=" iconrili iconfont calendar"></i>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<input type="hidden" name="goods_id" value="{$goods_id}">
|
||||
<div class="form-row">
|
||||
<button class="layui-btn" lay-submit lay-filter="search">筛选</button>
|
||||
<button type="reset" class="layui-btn layui-btn-primary">重置</button>
|
||||
</div>
|
||||
</form>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="layui-tab table-tab" lay-filter="is_audit">
|
||||
<ul class="layui-tab-title">
|
||||
<li class="layui-this" lay-id="">全部</li>
|
||||
<li lay-id="1">未审核</li>
|
||||
<li lay-id="2">审核通过</li>
|
||||
<li lay-id="3">审核拒绝</li>
|
||||
</ul>
|
||||
|
||||
<div class="layui-tab-content">
|
||||
<div class="table-bottom layui-table-bottom-tool-temp layui-form" style="float: left;border: none; padding-left: 15px;">
|
||||
<input type="checkbox" name="check_all" lay-skin="primary" lay-filter="check_all">
|
||||
<button class="layui-btn layui-btn-primary js-audit-pass" data-is-audit="1">批量通过</button>
|
||||
<button class="layui-btn layui-btn-primary js-audit-refuse" data-is-audit="2">批量拒绝</button>
|
||||
<button class="layui-btn layui-btn-primary js-audit-delete" data-is-audit="3">批量删除</button>
|
||||
</div>
|
||||
|
||||
<table class="layui-table evaluate-table layui-form" lay-skin="line" lay-size="lg">
|
||||
<div class="layui-tab-content">
|
||||
<colgroup>
|
||||
<col width="3%">
|
||||
<col width="20%">
|
||||
<col width="10%">
|
||||
<col width="10%">
|
||||
<col width="27%">
|
||||
<col width="10%">
|
||||
<col width="10%">
|
||||
<col width="10%">
|
||||
</colgroup>
|
||||
<thead>
|
||||
<tr>
|
||||
<th><input type="checkbox" name="check_all" lay-skin="primary" lay-filter="check_all" /></th>
|
||||
<th>商品信息</th>
|
||||
<th>客户昵称</th>
|
||||
<th>评论等级</th>
|
||||
<th>评论详情</th>
|
||||
<th>评论时间</th>
|
||||
<th style="text-align: center;">审核状态</th>
|
||||
<th class = 'operate'>操作</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody></tbody>
|
||||
</div>
|
||||
</table>
|
||||
|
||||
<div class="tab-bottom">
|
||||
<div class="table-bottom layui-table-bottom-tool-temp layui-form" style="float: left;border: none; padding-left: 15px;">
|
||||
<input type="checkbox" name="check_all" lay-skin="primary" lay-filter="check_all">
|
||||
<button class="layui-btn layui-btn-primary js-audit-pass" data-is-audit="1">批量通过</button>
|
||||
<button class="layui-btn layui-btn-primary js-audit-refuse" data-is-audit="2">批量拒绝</button>
|
||||
<button class="layui-btn layui-btn-primary js-audit-delete" data-is-audit="3">批量删除</button>
|
||||
</div>
|
||||
<div id="laypage"></div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<script src="SHOP_JS/evaluate.js"></script>
|
||||
<script>
|
||||
var limit = 5;
|
||||
var evaluate = new Evaluate(limit, [2, 5, 10]);
|
||||
var goods_id = "{$goods_id}";
|
||||
evaluate.getList({
|
||||
"_this": evaluate,
|
||||
"goods_id" : goods_id,
|
||||
});
|
||||
|
||||
layui.use(['form', 'laydate','element'], function() {
|
||||
var form = layui.form,
|
||||
laydate = layui.laydate;
|
||||
element = layui.element;
|
||||
currentDate = new Date(),
|
||||
minDate = "";
|
||||
form.render();
|
||||
|
||||
//监听Tab切换
|
||||
element.on('tab(is_audit)', function(data) {
|
||||
var is_audit = $(this).attr("lay-id");
|
||||
var num = $(".layui-laypage-limits option:selected").val()
|
||||
var evaluate = new Evaluate(num, [2, 5, 10]);
|
||||
data = form.val('selection_panel');
|
||||
evaluate.getList({
|
||||
"_this": evaluate,
|
||||
"search_type": data.search_type,
|
||||
"search_text": data.search_text,
|
||||
"explain_type": data.explain_type,
|
||||
"start_time": data.start_time,
|
||||
"end_time": data.end_time,
|
||||
"goods_id" : data.goods_id,
|
||||
"is_audit" : is_audit,
|
||||
});
|
||||
return false;
|
||||
});
|
||||
|
||||
currentDate.setDate(currentDate.getDate() - 7);
|
||||
|
||||
form.on('checkbox(check_all)', function(data){
|
||||
$("input[name='evaluate']").prop("checked",data.elem.checked);
|
||||
$("input[name='check_all']").prop("checked",data.elem.checked);
|
||||
form.render();
|
||||
});
|
||||
|
||||
form.on('checkbox(evaluate)', function(data){
|
||||
if($("input[name='evaluate']:checked").length == limit){
|
||||
$("input[name='check_all']").prop("checked",true);
|
||||
} else {
|
||||
$("input[name='check_all']").prop("checked",false);
|
||||
}
|
||||
form.render();
|
||||
});
|
||||
|
||||
$(".js-audit-pass,.js-audit-refuse,.js-audit-delete").click(function () {
|
||||
var evaluate_ids = [];
|
||||
var is_audit = $(this).attr("data-is-audit");
|
||||
$("input[name='evaluate']:checked").each(function () {
|
||||
evaluate_ids.push($(this).val());
|
||||
});
|
||||
|
||||
if(evaluate_ids.length<1) {
|
||||
layer.msg("请选择要操作的数据");
|
||||
return;
|
||||
}
|
||||
if(is_audit==3){
|
||||
deleteEvaluate(evaluate_ids.toString());
|
||||
}else{
|
||||
modifyAuditEvaluate(evaluate_ids.toString(),is_audit);
|
||||
}
|
||||
|
||||
});
|
||||
|
||||
//开始时间
|
||||
laydate.render({
|
||||
elem: '#start_time',
|
||||
type: 'datetime'
|
||||
});
|
||||
|
||||
//结束时间
|
||||
laydate.render({
|
||||
elem: '#end_time',
|
||||
type: 'datetime'
|
||||
});
|
||||
|
||||
/**
|
||||
* 重新渲染结束时间
|
||||
*/
|
||||
function reRender() {
|
||||
$("#end_time").remove();
|
||||
$(".end-time").html('<input type="text" class="layui-input" placeholder="结束时间" name="end_time" id="end_time" >');
|
||||
laydate.render({
|
||||
elem: '#end_time',
|
||||
type: 'datetime',
|
||||
min: minDate
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
* 搜索
|
||||
*/
|
||||
form.on('submit(search)', function(data) {
|
||||
var num = $(".layui-laypage-limits option:selected").val()
|
||||
var evaluate = new Evaluate(num, [2, 5, 10]);
|
||||
var is_audit = $('.layui-tab-title .layui-this').attr('lay-id');
|
||||
evaluate.getList({
|
||||
"_this": evaluate,
|
||||
"search_type": data.field.search_type,
|
||||
"search_text": data.field.search_text,
|
||||
"explain_type": data.field.explain_type,
|
||||
"start_time": data.field.start_time,
|
||||
"end_time": data.field.end_time,
|
||||
"goods_id" : data.field.goods_id,
|
||||
"is_audit" : is_audit,
|
||||
});
|
||||
return false;
|
||||
});
|
||||
});
|
||||
|
||||
function replay(e) {
|
||||
var input = $(e).parents("tr").find(".evaluate_id");
|
||||
var evaluate_id = input.val();
|
||||
var isFirstExplain = input.attr("data-is-first-explain");
|
||||
|
||||
layer.prompt({
|
||||
formType: 2,
|
||||
value: '',
|
||||
title: '请输入回复内容',
|
||||
area: ['350px', '150px'] ,//自定义文本域宽高
|
||||
yes: function(index, layero) {
|
||||
var explain = layero.find(".layui-layer-input").val();
|
||||
|
||||
if (explain) {
|
||||
$.ajax({
|
||||
url: ns.url("shop/goods/evaluateapply"),
|
||||
data: {
|
||||
evaluate_id: evaluate_id,
|
||||
explain: explain,
|
||||
is_first_explain: isFirstExplain
|
||||
},
|
||||
dataType: 'JSON', //服务器返回json格式数据
|
||||
type: 'POST', //HTTP请求类型
|
||||
success: function(res) {
|
||||
layer.closeAll();
|
||||
if (res.code == 0) {
|
||||
listenerHash(); // 刷新页面
|
||||
} else {
|
||||
evaluate.getList({
|
||||
"_this": evaluate,
|
||||
'is_audit' : $(".layui-tab-title").find('.layui-this').attr('lay-id')
|
||||
});
|
||||
layer.msg(res.message);
|
||||
}
|
||||
}
|
||||
});
|
||||
layer.close(index);
|
||||
} else {
|
||||
layer.msg('请输入回复内容!', {icon: 5, anim: 6});
|
||||
}
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
var repeat_flag = false;
|
||||
function deleteContent(e, isFirst) {
|
||||
var input = $(e).parents("tr").find(".evaluate_id");
|
||||
var evaluate_id = input.val();
|
||||
|
||||
if(repeat_flag) return false;
|
||||
repeat_flag = true;
|
||||
|
||||
layer.confirm('确定要删除回复内容吗?', function(index) {
|
||||
$.ajax({
|
||||
url: ns.url("shop/goods/deleteContent"),
|
||||
data: {
|
||||
evaluate_id: evaluate_id,
|
||||
is_first: isFirst
|
||||
},
|
||||
dataType: 'JSON', //服务器返回json格式数据
|
||||
type: 'POST', //HTTP请求类型
|
||||
success: function(res) {
|
||||
repeat_flag = false;
|
||||
if (res.code == 0) {
|
||||
evaluate.getList({
|
||||
"_this": evaluate,
|
||||
'is_audit' : $(".layui-tab-title").find('.layui-this').attr('lay-id')
|
||||
});
|
||||
} else {
|
||||
layer.msg(res.message);
|
||||
}
|
||||
layer.closeAll();
|
||||
}
|
||||
});
|
||||
}, function () {
|
||||
layer.close();
|
||||
repeat_flag = false;
|
||||
});
|
||||
}
|
||||
|
||||
// 修改首评审核状态
|
||||
function audit(e,is_audit) {
|
||||
var input = $(e).parents("tr").find(".evaluate_id");
|
||||
var evaluate_id = input.val();
|
||||
modifyAuditEvaluate(evaluate_id,is_audit);
|
||||
}
|
||||
// 修改删除评论操作之前
|
||||
function toDelete(e) {
|
||||
var input = $(e).parents("tr").find(".evaluate_id");
|
||||
var evaluate_id = input.val();
|
||||
deleteEvaluate(evaluate_id);
|
||||
}
|
||||
|
||||
function modifyAuditEvaluate(evaluate_ids,is_audit) {
|
||||
var hint = '确定要审核通过吗?';
|
||||
if(is_audit == 2){
|
||||
hint = '确定要拒绝审核吗?';
|
||||
}
|
||||
layer.confirm(hint, function(index) {
|
||||
layer.close(index);
|
||||
$.ajax({
|
||||
url: ns.url("shop/goods/modifyAuditEvaluate"),
|
||||
data: {
|
||||
evaluate_ids: evaluate_ids,
|
||||
is_audit: is_audit
|
||||
},
|
||||
dataType: 'JSON', //服务器返回json格式数据
|
||||
type: 'POST', //HTTP请求类型
|
||||
success: function (res) {
|
||||
layer.msg(res.message);
|
||||
if (res.code == 0) {
|
||||
evaluate.getList({
|
||||
"_this": evaluate,
|
||||
'is_audit' : $(".layui-tab-title").find('.layui-this').attr('lay-id')
|
||||
});
|
||||
}
|
||||
}
|
||||
});
|
||||
});
|
||||
}
|
||||
|
||||
function deleteEvaluate(evaluate_ids) {
|
||||
if (repeat_flag) return false;
|
||||
repeat_flag = true;
|
||||
layer.confirm('确定要删除评论吗?', function (index) {
|
||||
layer.close(index);
|
||||
$.ajax({
|
||||
url: ns.url("shop/goods/deleteEvaluate"),
|
||||
data: {
|
||||
evaluate_ids: evaluate_ids,
|
||||
},
|
||||
dataType: 'JSON', //服务器返回json格式数据
|
||||
type: 'POST', //HTTP请求类型
|
||||
success: function (res) {
|
||||
repeat_flag = false;
|
||||
layer.msg(res.message);
|
||||
if (res.code == 0) {
|
||||
evaluate.getList({
|
||||
"_this": evaluate,
|
||||
'is_audit': $(".layui-tab-title").find('.layui-this').attr('lay-id')
|
||||
});
|
||||
listenerHash(); // 刷新页面
|
||||
}
|
||||
}
|
||||
});
|
||||
}, function () {
|
||||
layer.close();
|
||||
repeat_flag = false;
|
||||
});
|
||||
}
|
||||
|
||||
function again_audit(e,is_audit) {
|
||||
var input = $(e).parents("tr").find(".evaluate_id");
|
||||
var evaluate_id = input.val();
|
||||
modifyAgainAuditEvaluate(evaluate_id,is_audit);
|
||||
}
|
||||
|
||||
function modifyAgainAuditEvaluate(evaluate_ids,is_audit) {
|
||||
$.ajax({
|
||||
url: ns.url("shop/goods/modifyAgainAuditEvaluate"),
|
||||
data: {
|
||||
evaluate_ids: evaluate_ids,
|
||||
again_is_audit: is_audit
|
||||
},
|
||||
dataType: 'JSON', //服务器返回json格式数据
|
||||
type: 'POST', //HTTP请求类型
|
||||
success: function (res) {
|
||||
layer.msg(res.message);
|
||||
if (res.code == 0) {
|
||||
evaluate.getList({
|
||||
"_this": evaluate,
|
||||
'is_audit' : $(".layui-tab-title").find('.layui-this').attr('lay-id')
|
||||
});
|
||||
}
|
||||
}
|
||||
});
|
||||
}
|
||||
</script>
|
||||
199
app/shop/view/goods/export.html
Executable file
199
app/shop/view/goods/export.html
Executable file
@@ -0,0 +1,199 @@
|
||||
<style>
|
||||
.layui-card-header{background-color:#f8f8f8}
|
||||
.apply-time{
|
||||
float:left;
|
||||
}
|
||||
.export-select{float:left;}
|
||||
.download-button{
|
||||
float:right;
|
||||
}
|
||||
.export-list-view{
|
||||
font-size:12px;
|
||||
}
|
||||
.export-foot-operation{overflow:hidden;margin-top:15px;}
|
||||
|
||||
.export-page{
|
||||
float:right;
|
||||
}
|
||||
.export-content-bar{
|
||||
float:left;
|
||||
padding-top: 6px;
|
||||
margin-left: 15px;
|
||||
}
|
||||
.export-foot-operation .layui-btn {
|
||||
padding: 0px 5px;
|
||||
font-size: 12px;
|
||||
line-height: 2 !important;
|
||||
height: auto;
|
||||
display: inline-block;
|
||||
}
|
||||
.layui-unselect.layui-form-checkbox{
|
||||
margin-top:-5px;
|
||||
}
|
||||
</style>
|
||||
|
||||
<div class="layui-layout layui-layout-admin">
|
||||
<div class="body-content">
|
||||
<div id="export_list"></div>
|
||||
|
||||
<div class="export-foot-operation">
|
||||
<div class="export-content-bar layui-form bg-color-light-gray">
|
||||
<input type="checkbox" name="export_select" lay-filter="allChoose" lay-skin="primary" title="全选">
|
||||
</div>
|
||||
<button class="layui-btn layui-btn-primary" onclick="deleteExport()">批量删除</button>
|
||||
<div class='export-page' id="export_page"></div>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<script type="text/html" id="exportHtml">
|
||||
{{# layui.each(d.data.list, function(index, item){ }}
|
||||
<div class="layui-card export-list-view">
|
||||
<div class="layui-card-header">
|
||||
|
||||
<div class="layui-form export-select">
|
||||
<input type="checkbox" name="check[]" value="{{item.export_id}}" lay-skin="primary" title="">
|
||||
</div>
|
||||
<div class="apply-time">序号:{{ item.export_id }} 导出时间:{{ ns.time_to_date(item.create_time) }}</div>
|
||||
<div class="download-button">
|
||||
{{# if(item.status == 0){ }}
|
||||
<span>正在导出中,请耐心等待…</span>
|
||||
{{# }else{ }}
|
||||
{{# if(item.path != ''){ }}
|
||||
<a class="text-color" href="{{ ns.img(item.path) }}" target="_blank">下载</a>
|
||||
{{#}}}
|
||||
{{#}}}
|
||||
<a class="text-color" href="javascript:void(0)" data-export_id ="{{item.export_id}}" onclick="deleteExport(this)">删除</a>
|
||||
</div>
|
||||
</div>
|
||||
<div class="layui-card-body">
|
||||
<div class="layui-row layui-col-space10">
|
||||
{{# layui.each(JSON.parse(item.condition), function(condition_index, condition_item){ }}
|
||||
<div class="layui-col-md3">
|
||||
{{condition_item.name}}:{{condition_item.value || '-'}}
|
||||
</div>
|
||||
{{# }); }}
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
{{# }); }}
|
||||
{{# if(d.data.list.length === 0){ }}
|
||||
<div class="layui-card export-list-view">
|
||||
<div class="layui-card-header">
|
||||
<div class="apply-time">商品导出记录</div>
|
||||
</div>
|
||||
<div class="layui-card-body">
|
||||
<div class="layui-row layui-col-space10">
|
||||
<div class="layui-col-md3">暂无导出记录</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
{{# } }}
|
||||
</script>
|
||||
<script>
|
||||
var laypage,form;
|
||||
layui.use(['form', 'laytpl', 'laypage'], function() {
|
||||
form = layui.form;
|
||||
laytpl = layui.laytpl;
|
||||
form.render();
|
||||
exportList(1,10);
|
||||
|
||||
laypage = layui.laypage;
|
||||
|
||||
/**
|
||||
* 全选
|
||||
*/
|
||||
form.on("checkbox(allChoose)", function(data) {
|
||||
$("input[name='check[]']").each(function() {
|
||||
this.checked = data.elem.checked;
|
||||
});
|
||||
form.render('checkbox');
|
||||
})
|
||||
});
|
||||
|
||||
function exportList(page, limit){
|
||||
$.ajax({
|
||||
url: '{:addon_url("shop/goods/export")}',
|
||||
data: {
|
||||
limit,
|
||||
page
|
||||
},
|
||||
dataType: 'JSON',
|
||||
type: 'POST',
|
||||
success: function(res) {
|
||||
var export_template = $("#exportHtml").html();
|
||||
|
||||
if(res.code >= 0){
|
||||
laytpl(export_template).render(res, function (html) {
|
||||
$("#export_list").html(html);
|
||||
})
|
||||
}
|
||||
laypage.render({
|
||||
elem: 'export_page',
|
||||
count: res.data.count,
|
||||
curr: page, //当前页
|
||||
limit: limit,
|
||||
jump: function(obj, first){
|
||||
//obj包含了当前分页的所有参数,比如:
|
||||
//首次不执行
|
||||
if(!first){
|
||||
exportList(obj.curr, obj.limit);
|
||||
form.render();
|
||||
}
|
||||
}
|
||||
});
|
||||
form.render();
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
* 删除导出记录
|
||||
*/
|
||||
var flag_delete = false;
|
||||
function deleteExport(data) {
|
||||
var export_ids = [];
|
||||
|
||||
if (!data) {
|
||||
$("input[name='check[]']:checked").each(function (index, item) {
|
||||
export_ids.push($(item).val());
|
||||
});
|
||||
} else {
|
||||
export_ids.push($(data).attr("data-export_id"));
|
||||
}
|
||||
|
||||
if (export_ids.length == 0) {
|
||||
layer.msg('请选择要操作的数据');
|
||||
return;
|
||||
}
|
||||
|
||||
export_ids = export_ids.toString();
|
||||
|
||||
layer.confirm('确定要删除选择的商品导出记录吗?', {
|
||||
btn: ['确定', '取消']
|
||||
}, function (index) {
|
||||
if (flag_delete) return;
|
||||
flag_delete = true;
|
||||
layer.close(index);
|
||||
$.ajax({
|
||||
type: "POST",
|
||||
async: true,
|
||||
url: ns.url("shop/goods/deleteExport"),
|
||||
data: {
|
||||
export_ids: export_ids,
|
||||
},
|
||||
dataType: "JSON",
|
||||
success: function (data) {
|
||||
layer.msg(data.message);
|
||||
flag_delete = false;
|
||||
if (data.code == 0) {
|
||||
listenerHash(); // 刷新页面
|
||||
}
|
||||
}
|
||||
});
|
||||
}, function () {
|
||||
layer.close();
|
||||
});
|
||||
}
|
||||
</script>
|
||||
77
app/shop/view/goods/goods_browse.html
Executable file
77
app/shop/view/goods/goods_browse.html
Executable file
@@ -0,0 +1,77 @@
|
||||
<!-- 列表 -->
|
||||
<table id="good_list" lay-filter="good_list"></table>
|
||||
|
||||
<!-- 商品 -->
|
||||
<script type="text/html" id="goodIntro">
|
||||
<div class="table-title">
|
||||
<div class="title-pic">
|
||||
{{# if(d.sku_image){ }}
|
||||
<img layer-src src="{{ns.img(d.sku_image.split(',')[0],'small')}}"/>
|
||||
{{# } }}
|
||||
</div>
|
||||
<div class="title-content">
|
||||
<a href="javascript:;" class="multi-line-hiding text-color">{{d.sku_name}}</a>
|
||||
</div>
|
||||
</div>
|
||||
</script>
|
||||
|
||||
<script>
|
||||
var form, table, laytpl;
|
||||
|
||||
layui.use(['form', 'laytpl'], function() {
|
||||
form = layui.form;
|
||||
laytpl = layui.laytpl;
|
||||
form.render();
|
||||
|
||||
table = new Table({
|
||||
elem: '#good_list',
|
||||
url: '{:addon_url("shop/goods/goodsbrowse")}',
|
||||
async : false,
|
||||
where: {'goods_id': "{$goods_id}"},
|
||||
parseData: function(res) {
|
||||
return {
|
||||
"code": res.code,
|
||||
"msg": res.message,
|
||||
"count": res.data.count,
|
||||
"data": res.data.list,
|
||||
};
|
||||
},
|
||||
cols: [
|
||||
[{
|
||||
title: '商品',
|
||||
unresize: 'false',
|
||||
width: '30%',
|
||||
templet: '#goodIntro'
|
||||
},{
|
||||
title: '会员',
|
||||
unresize: 'false',
|
||||
width: '30%',
|
||||
align: 'left',
|
||||
templet: function(data) {
|
||||
return data.nickname;
|
||||
}
|
||||
}, {
|
||||
title: '浏览时间',
|
||||
unresize: 'false',
|
||||
width: '20%',
|
||||
align: 'left',
|
||||
templet: function(data){
|
||||
return ns.time_to_date(data.browse_time);
|
||||
}
|
||||
}]
|
||||
]
|
||||
});
|
||||
|
||||
/**
|
||||
* 搜索功能
|
||||
*/
|
||||
form.on('submit(search)', function(data) {
|
||||
table.reload({
|
||||
page: {
|
||||
curr: 1
|
||||
},
|
||||
where: data.field
|
||||
});
|
||||
});
|
||||
});
|
||||
</script>
|
||||
112
app/shop/view/goods/goods_detail_config.html
Executable file
112
app/shop/view/goods/goods_detail_config.html
Executable file
@@ -0,0 +1,112 @@
|
||||
<link rel="stylesheet" href="STATIC_EXT/colorPicker/css/colorpicker.css"/>
|
||||
<link rel="stylesheet" href="SHOP_CSS/goods_detail_config.css"/>
|
||||
|
||||
<div id="diyView" class="layui-form">
|
||||
|
||||
<div class="preview-wrap">
|
||||
|
||||
<div class='diy-view-wrap'>
|
||||
|
||||
<div class="preview-head">
|
||||
<span>商品详情</span>
|
||||
</div>
|
||||
|
||||
<div class="preview-block">
|
||||
<div class="preview-draggable">
|
||||
<img src="SHOP_IMG/goods/goods_detail_preview.png">
|
||||
</div>
|
||||
<div class="edit-attribute">
|
||||
<div class="attr-wrap">
|
||||
<div class="attr-title">
|
||||
<span class="title">商品详情</span>
|
||||
</div>
|
||||
<div class="edit-content-wrap">
|
||||
|
||||
<div class="layui-form-item">
|
||||
<label class="layui-form-label sm">导航栏透明</label>
|
||||
<div class="layui-input-block">
|
||||
<input type="checkbox" name="nav_bar_switch" lay-skin="switch" value="1" {if $config['nav_bar_switch'] == 1}checked{/if} />
|
||||
</div>
|
||||
<div class="word-aux diy-word-aux">控制导航栏是否透明显示(只限小程序)</div>
|
||||
</div>
|
||||
|
||||
<div class="layui-form-item flex">
|
||||
<div class="flex_left">
|
||||
<label class="layui-form-label sm">促销语颜色</label>
|
||||
<div class="curr-color">
|
||||
<span></span>
|
||||
</div>
|
||||
</div>
|
||||
<div class="layui-input-block flex_fill">
|
||||
<div id="introductionColor" class="picker colorSelector">
|
||||
<div></div>
|
||||
</div>
|
||||
<input type="hidden" name="introduction_color">
|
||||
<span class="color-selector-reset text-color" onclick="reset('introductionColor','#303133')">重置</span>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
|
||||
</div>
|
||||
|
||||
<div class="custom-save">
|
||||
<button class="layui-btn" lay-submit lay-filter="save">保存</button>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<script src="STATIC_EXT/colorPicker/js/colorpicker.js"></script>
|
||||
<script>
|
||||
layui.use(['form', 'laydate', 'laytpl'], function () {
|
||||
var form = layui.form;
|
||||
var repeat_flag = false; //防重复标识
|
||||
form.render();
|
||||
|
||||
var size = 139; // 公式:二级面包屑layui-header-crumbs-second (55px)+ 自定义模板区域上内边距diyview(20px) + 底部保存按钮(90px)
|
||||
var commonHeight = $(window).height() - size;
|
||||
$('.preview-wrap').css("height", (commonHeight) + "px");
|
||||
$(".edit-attribute .attr-wrap").css("height", (commonHeight - 1) + "px");// 1px是上边框
|
||||
$(".preview-block").css("min-height", (commonHeight - 104) + "px"); // 公式:高度 - 自定义模板区域上内边距(20px) - 自定义模板区域下外编辑(20px)- 自定义模板头部(64px)
|
||||
setTimeout(function () {
|
||||
$('#diyView').css('visibility', 'visible');
|
||||
}, 50);
|
||||
|
||||
Colorpicker.create({
|
||||
el: 'introductionColor',
|
||||
color: "{$config['introduction_color']}",
|
||||
change: function (elem, hex) {
|
||||
$(elem).find("div").css('background', hex);
|
||||
$(elem).parent().parent().find('.curr-color span').text(hex);
|
||||
$(elem).next().val(hex);
|
||||
}
|
||||
});
|
||||
|
||||
form.on('submit(save)', function (data) {
|
||||
if (repeat_flag) return;
|
||||
repeat_flag = true;
|
||||
|
||||
$.ajax({
|
||||
type: 'POST',
|
||||
url: ns.url("shop/goods/goodsDetailConfig"),
|
||||
data: data.field,
|
||||
dataType: 'JSON',
|
||||
success: function (res) {
|
||||
repeat_flag = false;
|
||||
layer.msg(res.message);
|
||||
}
|
||||
});
|
||||
|
||||
});
|
||||
});
|
||||
|
||||
function reset(elem,color) {
|
||||
$('#' + elem).children('div').css('background', color);
|
||||
$('#' + elem).parent().parent().find('.curr-color span').text(color);
|
||||
$('#' + elem).next().val(color);
|
||||
}
|
||||
</script>
|
||||
83
app/shop/view/goods/goods_edit_poster.html
Executable file
83
app/shop/view/goods/goods_edit_poster.html
Executable file
@@ -0,0 +1,83 @@
|
||||
<div class="layui-form form-wrap">
|
||||
<div class="layui-form-item">
|
||||
<label class="layui-form-label"><span class="required">*</span>海报名称:</label>
|
||||
<div class="layui-input-block">
|
||||
<input name="poster_name" type="text" lay-verify="poster_name" lay-verify="required" {notempty name="$poster_data"} value="{$poster_data.poster_name}" {/notempty} class="layui-input len-long" autocomplete="off">
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="layui-form-item">
|
||||
<label class="layui-form-label"><span class="required">*</span>选择模板:</label>
|
||||
<div class="layui-input-block">
|
||||
<button class="layui-btn" onclick="">选择模板</button>
|
||||
</div>
|
||||
<input type="hidden" name="json_data">
|
||||
</div>
|
||||
|
||||
<div class="form-row">
|
||||
<input type="hidden" name="poster_id" {notempty name="$poster_data"} value="{$poster_data.poster_id}" {/notempty}>
|
||||
<button class="layui-btn" lay-submit lay-filter="save">提交</button>
|
||||
<button class="layui-btn layui-btn-primary" onclick="backGoodsPoster()">返回</button>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<script>
|
||||
layui.use(['form', 'laydate'], function() {
|
||||
var form = layui.form,
|
||||
laydate = layui.laydate,
|
||||
repeat_flag = false; //防重复标识
|
||||
form.render();
|
||||
|
||||
laydate.render({
|
||||
elem: '#laydate'
|
||||
});
|
||||
|
||||
/**
|
||||
* 表单验证
|
||||
*/
|
||||
form.verify({
|
||||
poster_name: function(value){
|
||||
if (!/[\S]+/.test(value)) {
|
||||
return '请输入海报名称';
|
||||
}
|
||||
},
|
||||
});
|
||||
|
||||
/**
|
||||
* 监听提交
|
||||
*/
|
||||
form.on('submit(save)', function(data) {
|
||||
|
||||
if(repeat_flag) return false;
|
||||
repeat_flag = true;
|
||||
|
||||
$.ajax({
|
||||
url: ns.url("shop/goods/editposter"),
|
||||
data: data.field,
|
||||
dataType: 'JSON', //服务器返回json格式数据
|
||||
type: 'POST', //HTTP请求类型
|
||||
success: function(res) {
|
||||
repeat_flag = false;
|
||||
if (res.code == 0) {
|
||||
layer.confirm('操作成功', {
|
||||
title:'操作提示',
|
||||
btn: ['返回列表'],
|
||||
closeBtn: 0,
|
||||
yes: function(index, layero) {
|
||||
location.hash = ns.hash("shop/goods/poster")
|
||||
layer.close(index);
|
||||
},
|
||||
});
|
||||
}else{
|
||||
layer.msg(res.message);
|
||||
}
|
||||
}
|
||||
});
|
||||
});
|
||||
|
||||
});
|
||||
|
||||
function backGoodsPoster() {
|
||||
location.hash = ns.hash("shop/goods/poster");
|
||||
}
|
||||
</script>
|
||||
229
app/shop/view/goods/goods_list_config.html
Executable file
229
app/shop/view/goods/goods_list_config.html
Executable file
@@ -0,0 +1,229 @@
|
||||
<link rel="stylesheet" href="STATIC_EXT/colorPicker/css/colorpicker.css" />
|
||||
<link rel="stylesheet" href="STATIC_EXT/diyview/css/diyview.css?time=20240316" />
|
||||
<link rel="stylesheet" href="SHOP_CSS/goods_list_config.css"/>
|
||||
|
||||
<div id="diyView" v-if="lazyLoad">
|
||||
|
||||
<div class="preview-wrap">
|
||||
|
||||
<div class="preview-restore-wrap">
|
||||
|
||||
<div class="div-wrap">
|
||||
|
||||
<div class='diy-view-wrap layui-form' :style="{ backgroundColor : global.pageBgColor }">
|
||||
|
||||
<div class="preview-head">
|
||||
<tabbar :global="global"></tabbar>
|
||||
</div>
|
||||
|
||||
<div class="preview-block">
|
||||
|
||||
<div class="preview-draggable">
|
||||
<div class="goods-list row1-of2 style-2">
|
||||
<div class="goods-item" v-for="(index) in [1,2,3,4]" :key="index">
|
||||
<div class="goods-img">
|
||||
<img :src="changeImgUrl('public/static/img/default_img/square.png')" />
|
||||
</div>
|
||||
|
||||
<div class="info-wrap">
|
||||
|
||||
<div class="goods-name">商品名称</div>
|
||||
|
||||
<!-- <div class="tag-wrap">-->
|
||||
<!-- <span class="hollow-tag text-color border-color">商品标签</span>-->
|
||||
<!-- </div>-->
|
||||
|
||||
<div class="pro-info">
|
||||
<div class="discount-price">
|
||||
<div class="price-wrap">
|
||||
<span class="unit text-color">¥</span>
|
||||
<span class="price text-color">{{ index * 100 }}</span>
|
||||
<span class="unit text-color">.00</span>
|
||||
</div>
|
||||
<div class="delete-price">¥198</div>
|
||||
<div class="sale">已售63件</div>
|
||||
</div>
|
||||
|
||||
<template v-if="data.control">
|
||||
|
||||
<!-- 购物车图标 -->
|
||||
<div v-if="data.style == 'icon-cart'" class="cart shopping-cart-btn iconfont icongouwuche" :style="{ color : data.textColor }"></div>
|
||||
|
||||
<!--加号图标 -->
|
||||
<div v-else-if="data.style == 'icon-add'" class="cart plus-sign-btn iconfont iconjia2" :style="{ color : data.textColor }"></div>
|
||||
|
||||
<!-- 按钮 -->
|
||||
<div v-else-if="data.style == 'button'" class="cart buy-btn" :style="{fontWeight: (data.fontWeight ? 'bold' : 'normal'), backgroundColor : data.bgColor, color : data.textColor,borderRadius : data.aroundRadius + 'px',padding : ('0 '+ data.padding + 'px') }">{{ data.text }}</div>
|
||||
|
||||
<!-- 自定义图标 -->
|
||||
<div v-else-if="data.style == 'icon-diy'" class="icon-diy">
|
||||
<iconfont :icon="data.iconDiy.icon" v-if="data.iconDiy.icon" :value="data.iconDiy.style ? data.iconDiy.style : ''"></iconfont>
|
||||
</div>
|
||||
|
||||
</template>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="edit-attribute">
|
||||
<div class="attr-wrap">
|
||||
<div class="restore-wrap">
|
||||
|
||||
<div class="attr-title">
|
||||
<span class="title">商品列表</span>
|
||||
<div class="tab-wrap">
|
||||
<span class="active bg-color" data-type="content">内容</span>
|
||||
<span data-type="style">样式</span>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="edit-content-wrap">
|
||||
|
||||
<div class="template-edit-title">
|
||||
<h3>购买按钮</h3>
|
||||
<div class="layui-form-item">
|
||||
<label class="layui-form-label sm">是否显示</label>
|
||||
<div class="layui-input-block">
|
||||
<div class="layui-unselect layui-form-checkbox" lay-skin="primary" @click="data.control = !data.control" :class="{ 'layui-form-checked' : data.control }">
|
||||
<span>{{ data.control ? '显示' : '隐藏' }}</span>
|
||||
<i class="layui-icon layui-icon-ok"></i>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<template v-if="data.control">
|
||||
<div class="layui-form-item">
|
||||
<label class="layui-form-label sm">购物车事件</label>
|
||||
<div class="layui-input-block">
|
||||
<div @click="data.cartEvent='detail'" :class="{ 'layui-unselect layui-form-radio' : true,'layui-form-radioed' : (data.cartEvent=='detail') }">
|
||||
<i class="layui-anim layui-icon">{{ data.cartEvent=='detail' ? "" : "" }}</i>
|
||||
<div>跳转商品详情</div>
|
||||
</div>
|
||||
<div @click="data.cartEvent='cart'" :class="{ 'layui-unselect layui-form-radio' : true,'layui-form-radioed' : (data.cartEvent=='cart') }">
|
||||
<i class="layui-anim layui-icon">{{ data.cartEvent=='cart' ? "" : "" }}</i>
|
||||
<div>加入购物车</div>
|
||||
</div>
|
||||
</div>
|
||||
<p class="word-aux" style="margin-left: 100px;" v-if="data.cartEvent=='cart'">只有实物商品才能加入购物车,虚拟商品会跳转到商品详情</p>
|
||||
</div>
|
||||
<div class="layui-form-item btn-style">
|
||||
<label class="layui-form-label sm">样式</label>
|
||||
<div class="layui-input-block">
|
||||
<div class="item" :class="{ 'border-color' : data.style == 'button' }" @click="data.style = 'button';data.textColor= data.textColor == '#FF6A00' ? '#FFFFFF' : data.textColor">
|
||||
<span class="buy-btn bg-color">按钮</span>
|
||||
</div>
|
||||
<div class="item" :class="{ 'border-color' : data.style == 'icon-cart' }" @click="data.style = 'icon-cart';data.textColor= data.textColor == '#FFFFFF' ? '#FF6A00' : data.textColor">
|
||||
<span class="shopping-cart-btn iconfont icongouwuche text-color border-color"></span>
|
||||
</div>
|
||||
<div class="item" :class="{ 'border-color' : data.style == 'icon-add' }" @click="data.style = 'icon-add';data.textColor= data.textColor == '#FFFFFF' ? '#FF6A00' : data.textColor">
|
||||
<span class="plus-sign-btn iconfont iconjia2 text-color border-color"></span>
|
||||
</div>
|
||||
<div class="item" :class="{ 'border-color' : data.style == 'icon-diy' }" @click="data.style = 'icon-diy';data.textColor= data.textColor == '#FFFFFF' ? '#FF6A00' : data.textColor">
|
||||
<span class="diy-btn text-color border-color">自定义</span>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="layui-input-block diy-icon" v-show="data.style == 'icon-diy'">
|
||||
<img-icon-upload :data="{data : data.iconDiy, displayType : 'icon'}"></img-icon-upload>
|
||||
<div class="action-box">
|
||||
<div class="action" @click="iconStyle($event)"><i class="iconfont iconpifu"></i></div>
|
||||
<div class="action" id="goods-list-color"><i class="iconfont iconyanse"></i></div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
|
||||
<div class="layui-form-item" v-show="data.style == 'button'">
|
||||
<label class="layui-form-label sm">文字</label>
|
||||
<div class="layui-input-block">
|
||||
<input type="text" v-model="data.text" maxlength="6" placeholder="请输入按钮文字" class="layui-input">
|
||||
</div>
|
||||
</div>
|
||||
|
||||
</template>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
|
||||
<div class="edit-style-wrap" style="display: none;">
|
||||
|
||||
<div class="template-edit-title">
|
||||
<h3>商品样式</h3>
|
||||
<div class="layui-form-item">
|
||||
<label class="layui-form-label sm">商品名称</label>
|
||||
<div class="layui-input-block">
|
||||
<div v-for="(item,nameLineIndex) in nameLineModeList" :key="nameLineIndex" @click="data.nameLineMode=item.value" :class="{ 'layui-unselect layui-form-radio' : true,'layui-form-radioed' : (data.nameLineMode==item.value) }">
|
||||
<i class="layui-anim layui-icon">{{ data.nameLineMode == item.value ? "" : "" }}</i>
|
||||
<div>{{item.text}}</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="template-edit-title">
|
||||
<h3>购买按钮</h3>
|
||||
<template v-if="data.style == 'button'">
|
||||
<div class="layui-form-item">
|
||||
<label class="layui-form-label sm">是否加粗</label>
|
||||
<div class="layui-input-block">
|
||||
<div class="layui-unselect layui-form-checkbox" lay-skin="primary" @click="data.fontWeight = !data.fontWeight" :class="{ 'layui-form-checked' : data.fontWeight }">
|
||||
<span>{{ data.fontWeight ? '加粗' : '常规' }}</span>
|
||||
<i class="layui-icon layui-icon-ok"></i>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<slide :data="{ field : 'padding', label : '按钮边距', min: 0, max : 20 }"></slide>
|
||||
<slide :data="{ field : 'aroundRadius', label: '圆角', min:0, max: 50 }"></slide>
|
||||
</template>
|
||||
|
||||
<div class="layui-form-item">
|
||||
<label class="layui-form-label sm">色调</label>
|
||||
<div class="layui-input-block">
|
||||
<div @click="data.theme='default'" :class="{ 'layui-unselect layui-form-radio' : true,'layui-form-radioed' : (data.theme == 'default') }">
|
||||
<i class="layui-anim layui-icon">{{ data.theme == 'default' ? "" : "" }}</i>
|
||||
<div>跟随主题风格</div>
|
||||
</div>
|
||||
<div @click="data.theme='diy'" :class="{ 'layui-unselect layui-form-radio' : true,'layui-form-radioed' : (data.theme == 'diy') }">
|
||||
<i class="layui-anim layui-icon">{{ data.theme == 'diy' ? "" : "" }}</i>
|
||||
<div>自定义</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<template v-if="data.theme == 'diy'">
|
||||
<color v-if="data.style == 'button'" :data="{ field : 'bgColor', 'label' : '背景颜色', defaultColor : '#FF6A00' }"></color>
|
||||
<color :data="{ field : 'textColor', 'label' : '文字颜色', defaultColor : '#FFFFFF' }"></color>
|
||||
</template>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="custom-save js-bottom-custom-save">
|
||||
<button class="layui-btn save" lay-submit lay-filter="save">保存</button>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<input id="goodsListConfig" type="hidden" value="{$config|json_encode}">
|
||||
|
||||
<script>
|
||||
var storeIsExit = '{$store_is_exit}';
|
||||
</script>
|
||||
<script src="STATIC_JS/vue.js"></script>
|
||||
<script src="STATIC_EXT/colorPicker/js/colorpicker.js"></script>
|
||||
<script src="STATIC_EXT/diyview/js/components.js"></script>
|
||||
<script src="SHOP_JS/goods_list_config.js"></script>
|
||||
{include file="app/shop/view/diy/iconfont_component.html"/}
|
||||
39
app/shop/view/goods/goods_no.html
Executable file
39
app/shop/view/goods/goods_no.html
Executable file
@@ -0,0 +1,39 @@
|
||||
<div class="layui-form form-wrap">
|
||||
|
||||
<div class="layui-form-item">
|
||||
<label class="layui-form-label">商品编码唯一性:</label>
|
||||
<div class="layui-input-block">
|
||||
<input type="checkbox" name="uniqueness_switch" value="1" lay-skin="switch" {if condition="$info.uniqueness_switch == 1" }checked {/if} lay-title="启用|关闭"/>
|
||||
</div>
|
||||
<div class="word-aux">开启后,将验证商品编码唯一性,不能重复</div>
|
||||
</div>
|
||||
|
||||
<div class="form-row">
|
||||
<button class="layui-btn" lay-submit lay-filter="save">保存</button>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<script>
|
||||
layui.use(['form'], function() {
|
||||
var form = layui.form,
|
||||
repeat_flag = false; //防重复标识
|
||||
form.render();
|
||||
|
||||
form.on('submit(save)', function(data) {
|
||||
if (repeat_flag) return;
|
||||
repeat_flag = true;
|
||||
|
||||
$.ajax({
|
||||
url: ns.url("shop/goods/goodsno"),
|
||||
data: data.field,
|
||||
dataType: 'JSON',
|
||||
type: 'POST',
|
||||
success: function(res) {
|
||||
repeat_flag = false;
|
||||
layer.msg(res.message);
|
||||
}
|
||||
});
|
||||
});
|
||||
|
||||
});
|
||||
</script>
|
||||
250
app/shop/view/goods/goods_poster_list.html
Executable file
250
app/shop/view/goods/goods_poster_list.html
Executable file
@@ -0,0 +1,250 @@
|
||||
<!-- 搜索框 -->
|
||||
<div class="single-filter-box">
|
||||
<button class="layui-btn" onclick="add()">添加海报</button>
|
||||
|
||||
<div class="layui-form">
|
||||
<div class="layui-input-inline">
|
||||
<input type="text" name="keywords" placeholder="请输入海报名称" class="layui-input" autocomplete="off">
|
||||
<button type="button" class="layui-btn layui-btn-primary" lay-filter="search" lay-submit>
|
||||
<i class="layui-icon"></i>
|
||||
</button>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="layui-tab table-tab" lay-filter="manjian_tab">
|
||||
<div class="layui-tab-content">
|
||||
<!-- 列表 -->
|
||||
<table id="poster_list" lay-filter="poster_list"></table>
|
||||
</div>
|
||||
</div>
|
||||
<script type="text/html" id="qr_img">
|
||||
<div class='table-title'>
|
||||
<div class='title-pic'>
|
||||
<img layer-src src="{{ns.img()}}" onerror="this.src = '{:img('public/static/img/default_img/head.png')}' ">
|
||||
</div>
|
||||
</div>
|
||||
</script>
|
||||
|
||||
<script type="text/html" id="status">
|
||||
<div class='table-title'>
|
||||
{{# if(d.status == 0){ }}
|
||||
<div class='title-pic' style="text-align:left">未启用</div>
|
||||
{{# }else{ }}
|
||||
<div class='title-pic text-color' style="text-align:left">启用</div>
|
||||
{{# } }}
|
||||
</div>
|
||||
</div>
|
||||
</script>
|
||||
<!-- 操作 -->
|
||||
<script type="text/html" id="operation">
|
||||
<div class="table-btn">
|
||||
<a class="layui-btn" lay-event="detail">预览</a>
|
||||
<a class="layui-btn" lay-event="edit" >编辑</a>
|
||||
{{# if(d.status==0){ }}
|
||||
<a class="layui-btn" lay-event="start">启用</a>
|
||||
{{# }else{ }}
|
||||
<a class="layui-btn" lay-event="close">关闭</a>
|
||||
{{# } }}
|
||||
<a class="layui-btn" lay-event="delete">删除</a>
|
||||
</div>
|
||||
</script>
|
||||
|
||||
<script>
|
||||
var laytpl;
|
||||
layui.use(['form','laytpl'], function() {
|
||||
var table,
|
||||
form = layui.form,
|
||||
repeat_flag = false; //防重复标识
|
||||
form.render();
|
||||
|
||||
laytpl = layui.laytpl;
|
||||
table = new Table({
|
||||
elem: '#poster_list',
|
||||
url: ns.url("shop/goods/poster"),
|
||||
cols: [
|
||||
[{
|
||||
field: 'poster_id',
|
||||
title: 'ID',
|
||||
unresize: 'false',
|
||||
width: '10%'
|
||||
}, {
|
||||
field: 'poster_name',
|
||||
title: '海报名称',
|
||||
unresize: 'false',
|
||||
width: '15%',
|
||||
}, {
|
||||
field: 'poster_type',
|
||||
title: '海报类型',
|
||||
unresize: 'false',
|
||||
width: '15%',
|
||||
templet: function(data) {
|
||||
return data.poster_type == 1 ? '商品海报': '--';
|
||||
}
|
||||
}, {
|
||||
field: 'scan_num',
|
||||
title: '扫码数',
|
||||
unresize: 'false',
|
||||
width: '15%',
|
||||
}, {
|
||||
field: 'status',
|
||||
title: '海报状态',
|
||||
unresize: 'false',
|
||||
width: '15%',
|
||||
templet: '#status'
|
||||
},{
|
||||
title: '操作',
|
||||
toolbar: '#operation',
|
||||
unresize: 'false',
|
||||
align:'right'
|
||||
}]
|
||||
]
|
||||
});
|
||||
|
||||
/**
|
||||
* 监听工具栏操作
|
||||
*/
|
||||
table.tool(function(obj) {
|
||||
var data = obj.data;
|
||||
switch (obj.event) {
|
||||
case 'detail': //预览
|
||||
laytpl($("#detail").html()).render(data, function (html) {
|
||||
layer.open({
|
||||
type: 1,
|
||||
shadeClose: true,
|
||||
shade: 0.3,
|
||||
offset: 'auto',
|
||||
fixed: false,
|
||||
title: "预览",
|
||||
area: ['auto', 'auto'],
|
||||
btn: ['退出'],
|
||||
content: html,
|
||||
skin: 'detail'
|
||||
});
|
||||
|
||||
});
|
||||
break;
|
||||
case 'edit': //编辑
|
||||
location.hash = ns.hash("shop/goods/editposter", {"poster_id": data.poster_id});
|
||||
break;
|
||||
case 'delete': //删除
|
||||
deletePoster(data.poster_id);
|
||||
break;
|
||||
case 'close': //关闭
|
||||
close(data.poster_id);
|
||||
break;
|
||||
case 'start': //启用
|
||||
start(data.poster_id);
|
||||
break;
|
||||
}
|
||||
});
|
||||
|
||||
/**
|
||||
* 删除
|
||||
*/
|
||||
function deletePoster(poster_id) {
|
||||
if (repeat_flag) return false;
|
||||
repeat_flag = true;
|
||||
|
||||
layer.confirm('确定要删除该海报吗?', function(index) {
|
||||
layer.close(index);
|
||||
$.ajax({
|
||||
url: ns.url("shop/goods/deleteposter"),
|
||||
data: {
|
||||
poster_id:poster_id
|
||||
},
|
||||
dataType: 'JSON',
|
||||
type: 'POST',
|
||||
success: function(res) {
|
||||
layer.msg(res.message);
|
||||
repeat_flag = false;
|
||||
|
||||
if (res.code == 0) {
|
||||
table.reload();
|
||||
}
|
||||
}
|
||||
});
|
||||
}, function () {
|
||||
layer.close();
|
||||
repeat_flag = false;
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
* 关闭
|
||||
*/
|
||||
function close(poster_id) {
|
||||
if (repeat_flag) return false;
|
||||
repeat_flag = true;
|
||||
|
||||
layer.confirm('确定关闭吗?', function(index) {
|
||||
layer.close(index);
|
||||
$.ajax({
|
||||
url: ns.url("shop/goods/editstatus"),
|
||||
data: {
|
||||
poster_id:poster_id,status:0
|
||||
},
|
||||
dataType: 'JSON',
|
||||
type: 'POST',
|
||||
success: function(res) {
|
||||
layer.msg(res.message);
|
||||
repeat_flag = false;
|
||||
|
||||
if (res.code == 0) {
|
||||
table.reload();
|
||||
}
|
||||
}
|
||||
});
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
* 开启
|
||||
*/
|
||||
function start(poster_id) {
|
||||
if (repeat_flag) return false;
|
||||
repeat_flag = true;
|
||||
|
||||
layer.confirm('确定启用吗?', function(index) {
|
||||
layer.close(index);
|
||||
$.ajax({
|
||||
url: ns.url("shop/goods/editstatus"),
|
||||
data: {
|
||||
poster_id:poster_id,status:1
|
||||
},
|
||||
dataType: 'JSON',
|
||||
type: 'POST',
|
||||
success: function(res) {
|
||||
layer.msg(res.message);
|
||||
repeat_flag = false;
|
||||
|
||||
if (res.code == 0) {
|
||||
table.reload();
|
||||
}
|
||||
}
|
||||
});
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
* 搜索功能
|
||||
*/
|
||||
form.on('submit(search)', function(data) {
|
||||
table.reload({
|
||||
page: {
|
||||
curr: 1
|
||||
},
|
||||
where: data.field
|
||||
});
|
||||
});
|
||||
});
|
||||
|
||||
function add() {
|
||||
location.hash = ns.hash("shop/goods/editposter");
|
||||
}
|
||||
</script>
|
||||
|
||||
<!-- 详情弹框html -->
|
||||
<script type="text/html" id="detail">
|
||||
<img layer-src src="{{ns.img(d.qr_img)}}" class="img_prev"/>
|
||||
</script>
|
||||
152
app/shop/view/goods/goods_select.html
Executable file
152
app/shop/view/goods/goods_select.html
Executable file
@@ -0,0 +1,152 @@
|
||||
<link rel="stylesheet" href="SHOP_CSS/goods_select.css">
|
||||
|
||||
<div class="select-goods">
|
||||
|
||||
<!-- 左侧固定展示商品分类 -->
|
||||
<div class="select-goods-left">
|
||||
<div class="select-goods-classification layui-collapse" lay-accordion lay-filter="oneCategory">
|
||||
<div class="layui-colla-item">
|
||||
<h2 class="layui-colla-title classification-item text-color" data-category_id="">全部分类</h2>
|
||||
</div>
|
||||
{foreach $category_list as $category_one_item}
|
||||
<div class="layui-colla-item">
|
||||
<h2 class="layui-colla-title classification-item {notempty name="$category_one_item.children"}arrow{/notempty}" data-category_id="{$category_one_item.category_id}">{$category_one_item.title}</h2>
|
||||
{notempty name="category_one_item.children"}
|
||||
{foreach $category_one_item.children as $category_two_item}
|
||||
<div class="layui-colla-content">
|
||||
<div class="select-goods-classification layui-collapse" lay-accordion lay-filter="twoCategory">
|
||||
<div class="layui-colla-item">
|
||||
<h2 class="layui-colla-title classification-item {notempty name="category_two_item.children"}arrow{/notempty}" data-category_id="{$category_two_item.category_id}">{$category_two_item.title}</h2>
|
||||
{notempty name="category_two_item.children"}
|
||||
{foreach $category_two_item.children as $category_three_item}
|
||||
<div class="layui-colla-content classification-item" data-category_id="{$category_three_item.category_id}">{$category_three_item.title}</div>
|
||||
{/foreach}
|
||||
{/notempty}
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
{/foreach}
|
||||
{/notempty}
|
||||
</div>
|
||||
{/foreach}
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- 右侧固定展示筛选和商品列表 -->
|
||||
<div class="select-goods-right">
|
||||
|
||||
<!-- 筛选 -->
|
||||
<div class="single-filter-box">
|
||||
<div></div>
|
||||
<div class="layui-form">
|
||||
<div class="layui-inline">
|
||||
<div class="layui-input-inline">
|
||||
<select name="select_type" lay-filter="select_type">
|
||||
<option value="all">全部商品</option>
|
||||
<option value="selected">已选择商品</option>
|
||||
</select>
|
||||
</div>
|
||||
</div>
|
||||
<div class="layui-inline">
|
||||
<div class="layui-input-inline">
|
||||
<select name="label_id" lay-filter="label_id">
|
||||
<option value="">选择商品标签</option>
|
||||
{foreach name="$label_list" item="vo"}
|
||||
<option value="{$vo['id']}">{$vo['label_name']}</option>
|
||||
{/foreach}
|
||||
</select>
|
||||
</div>
|
||||
</div>
|
||||
{if $is_disabled_goods_class == 0}
|
||||
<div class="layui-input-inline">
|
||||
<select name="goods_class" lay-filter="goods_class">
|
||||
<option value="{:join(',', array_column($goods_class_arr, 'goods_class'))}">选择商品类型</option>
|
||||
{foreach name="$goods_class_arr" item="vo"}
|
||||
<option value="{$vo.goods_class}" {if $goods_class == $vo.goods_class} selected{/if}>{$vo.goods_class_name}</option>
|
||||
{/foreach}
|
||||
</select>
|
||||
</div>
|
||||
{/if}
|
||||
<div class="layui-input-inline">
|
||||
<input type="text" name="search_text" placeholder="请输入商品名称{if in_array($promotion, ['', 'all', 'module'])}或编码{/if}" autocomplete="off" class="layui-input len-mid">
|
||||
<button type="button" class="layui-btn layui-btn-primary" lay-filter="search" lay-submit>
|
||||
<i class="layui-icon"></i>
|
||||
</button>
|
||||
</div>
|
||||
<!-- 分类id -->
|
||||
<input type="hidden" name="category_id" value=""/>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- 列表 -->
|
||||
<table id="goods_list" lay-filter="goods_list"></table>
|
||||
|
||||
</div>
|
||||
|
||||
<input type="hidden" name="mode" value="{$mode}" title="商品类型,模式" />
|
||||
<input type="hidden" name="maxNum" value="{$max_num}" title="最大商品数量" />
|
||||
<input type="hidden" name="minNum" value="{$min_num}" title="最小商品数量" />
|
||||
<input type="hidden" name="disabled" value="{$disabled}" title="不可选中" />
|
||||
<input type="hidden" name="promotion" value="{$promotion}" title="营销标识" />
|
||||
|
||||
<input type="hidden" name="is_virtual" value="{$is_virtual}" title="是否虚拟" />
|
||||
<input type="hidden" name="goods_class" value="{$goods_class}" title="商品类型" />
|
||||
<input type="hidden" name="is_weigh" value="{$is_weigh}" title="是否称重" />
|
||||
<input type="hidden" name="sale_channel" value="{$sale_channel ?? ''}" title="销售渠道" />
|
||||
|
||||
</div>
|
||||
|
||||
<script type="text/html" id="checkbox">
|
||||
{{# if('{$promotion}' == "pintuan"){ }}
|
||||
<div class="layui-hide">{{ d.goods_name = d.pintuan_name }}</div>
|
||||
{{# } }}
|
||||
<input type="checkbox" data-goods-id="{{d.goods_id}}" name="goods_checkbox" lay-skin="primary" lay-filter="goods_checkbox">
|
||||
<input type="hidden" data-goods-id="{{d.goods_id}}" name="goods_json" value='{{ JSON.stringify(d) }}' />
|
||||
<input type="hidden" data-goods-id="{{d.goods_id}}" name="goods_sku_list_json" value='{{ d.sku_list ? JSON.stringify(d.sku_list) : "" }}' />
|
||||
</script>
|
||||
|
||||
<!-- 商品信息 -->
|
||||
<script type="text/html" id="goods_info">
|
||||
<div class="table-title">
|
||||
{{# if(goodsSelectObj.mode == "sku"){ }}
|
||||
<div class="contraction" data-goods-id="{{d.goods_id}}" data-open="0">
|
||||
<span>+</span>
|
||||
</div>
|
||||
{{# } }}
|
||||
|
||||
<div class="title-pic" id="goods_img_{{d.goods_id}}">
|
||||
<img layer-src src="{{ns.img(d.goods_image.split(',')[0], 'small')}}"/>
|
||||
</div>
|
||||
<div class="title-content">
|
||||
<a href="javascript:;" class="multi-line-hiding text-color" title="{{d.goods_name}}">{{d.goods_name}}</a>
|
||||
{{# if('{$promotion}' != 'pintuan' && '{$promotion}' != 'groupbuy' && '{$promotion}' != 'fenxiao'){ }}
|
||||
<a href="javascript:;" class="multi-line-hiding text-color" >¥{{d.price}}</a>
|
||||
{{# } }}
|
||||
</div>
|
||||
</div>
|
||||
</script>
|
||||
|
||||
<!-- SKU商品列表 -->
|
||||
<script type="text/html" id="skuList">
|
||||
{{# for(var i=0;i<d.list.length;i++){ }}
|
||||
<tr class="sku-list js-sku-list-{{d.list[i].goods_id}}" id="sku_img_{{d.list[i].goods_id}}">
|
||||
<td></td>
|
||||
<td>
|
||||
<input type="checkbox" data-goods-id="{{d.list[i].goods_id}}" data-sku-id="{{d.list[i].sku_id}}" name="goods_sku_checkbox" lay-skin="primary" lay-filter="goods_sku_checkbox">
|
||||
<input type="hidden" data-goods-id="{{d.list[i].goods_id}}" data-sku-id="{{d.list[i].sku_id}}" value='{{ JSON.stringify(d.list[i]) }}' name="goods_sku_json" />
|
||||
<div class="table-title">
|
||||
<div class="title-pic" id="sku_img_{{d.sku_id}}">
|
||||
<img layer-src src="{{ns.img(d.list[i].sku_image, 'small')}}"/>
|
||||
</div>
|
||||
<div class="title-content">
|
||||
<a href="javascript:;" class="multi-line-hiding text-color" title="{{d.list[i].sku_name}}" lay-event="preview">{{d.list[i].sku_name}}</a>
|
||||
<a href="javascript:;" class="multi-line-hiding text-color" >¥{{d.list[i].price}}</a>
|
||||
</div>
|
||||
</div>
|
||||
</td>
|
||||
<td>{{d.list[i].stock}}</td>
|
||||
<td>{{d.list[i].goods_class_name}}</td>
|
||||
</tr>
|
||||
{{# } }}
|
||||
</script>
|
||||
<script src="SHOP_JS/goods_select.js?time=20241218"></script>
|
||||
88
app/shop/view/goods/goods_sort.html
Executable file
88
app/shop/view/goods/goods_sort.html
Executable file
@@ -0,0 +1,88 @@
|
||||
<style type="text/css">
|
||||
.examples {cursor: pointer;}
|
||||
.layui-carousel {width: 850px !important; height: 580px !important; background: #fff !important;}
|
||||
.layui-carousel>[carousel-item]>* {background: #fff !important;}
|
||||
</style>
|
||||
|
||||
<div class="layui-form form-wrap">
|
||||
|
||||
<div class="layui-form-item">
|
||||
<label class="layui-form-label">排序方式:</label>
|
||||
<div class="layui-input-block len-mid">
|
||||
<select name="type">
|
||||
<option value="asc" {if $goods_sort_config['type'] == 'asc'} selected {/if}>正序排列</option>
|
||||
<option value="desc" {if $goods_sort_config['type'] == 'desc'} selected {/if}>倒序排列</option>
|
||||
</select>
|
||||
</div>
|
||||
<div class="word-aux">如果选择正序排列,那么前台商品将会优先按照排序号从小到大顺序排列,当序号相同时,按照创建时间倒序排列;<br/>如果选择倒序排列时,那么前台商品会优先按照序号从大到小顺序排列,当序号相同时 ,按照创建时间倒序排列。</div>
|
||||
</div>
|
||||
|
||||
<div class="layui-form-item">
|
||||
<label class="layui-form-label">默认排序值:</label>
|
||||
<div class="layui-input-block len-mid">
|
||||
<input type="number" class="layui-input" name="default_value" value="{$goods_sort_config['default_value']}">
|
||||
</div>
|
||||
<div class="word-aux">默认排值是当添加商品时,如果没有设置排序值的情况下,则按照该位置设置的默认数值参与排序 <a onclick="showDemo()" class="examples text-color">查看示例</a></div>
|
||||
</div>
|
||||
|
||||
<div class="form-row">
|
||||
<button class="layui-btn" lay-submit lay-filter="save">保存</button>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<script type="text/html" id="carouselInner">
|
||||
<div class="layui-carousel" id="carousel">
|
||||
<div carousel-item>
|
||||
<img style="width: 600px; height: 500px; margin: 20px 130px;" src="SHOP_IMG/goods1.png" >
|
||||
<img style="width: 600px; height: 400px; margin: 60px 125px;" src="SHOP_IMG/goods2.png" >
|
||||
</div>
|
||||
</div>
|
||||
</script>
|
||||
<script>
|
||||
layui.use(['form','carousel'], function() {
|
||||
var form = layui.form;
|
||||
var carousel = layui.carousel;
|
||||
repeat_flag = false; //防重复标识
|
||||
form.render();
|
||||
carousel.render({
|
||||
elem: '#carousel'
|
||||
,width: '100%' //设置容器宽度
|
||||
,arrow: 'always' //始终显示箭头
|
||||
});
|
||||
|
||||
form.on('submit(save)', function(data) {
|
||||
if (repeat_flag) return;
|
||||
repeat_flag = true;
|
||||
|
||||
$.ajax({
|
||||
url: ns.url("shop/goods/goodssort"),
|
||||
data: data.field,
|
||||
dataType: 'JSON',
|
||||
type: 'POST',
|
||||
success: function(res) {
|
||||
repeat_flag = false;
|
||||
layer.msg(res.message);
|
||||
}
|
||||
});
|
||||
});
|
||||
|
||||
});
|
||||
|
||||
function showDemo(){
|
||||
layer.open({
|
||||
title: '查看示例',
|
||||
type: 1,
|
||||
area: ['900px', '660px'],
|
||||
content: $('#carouselInner').html(),
|
||||
})
|
||||
layui.use('carousel', function(){
|
||||
var carousel = layui.carousel;
|
||||
//建造实例
|
||||
carousel.render({
|
||||
elem: '#carousel'
|
||||
,width: '100%' //设置容器宽度
|
||||
,arrow: 'always' //始终显示箭头
|
||||
});
|
||||
});
|
||||
}
|
||||
</script>
|
||||
329
app/shop/view/goods/guess_you_like.html
Executable file
329
app/shop/view/goods/guess_you_like.html
Executable file
@@ -0,0 +1,329 @@
|
||||
<link rel="stylesheet" href="STATIC_EXT/colorPicker/css/colorpicker.css" />
|
||||
<link rel="stylesheet" href="STATIC_EXT/diyview/css/diyview.css?time=20240316" />
|
||||
<link rel="stylesheet" href="SHOP_CSS/guess_you_like.css"/>
|
||||
|
||||
<div id="diyView" v-if="lazyLoad">
|
||||
|
||||
<div class="preview-wrap">
|
||||
|
||||
<div class="preview-restore-wrap">
|
||||
|
||||
<div class="div-wrap">
|
||||
|
||||
<div class='diy-view-wrap layui-form' :style="{ backgroundColor : global.pageBgColor }">
|
||||
|
||||
<div class="preview-head">
|
||||
<tabbar :global="global"></tabbar>
|
||||
</div>
|
||||
|
||||
<div class="preview-block">
|
||||
|
||||
<div class="preview-draggable">
|
||||
|
||||
<h3 class="goods-recommend-title" v-if="data.title">
|
||||
<span>{{ data.title }}</span>
|
||||
</h3>
|
||||
<div class="goods-list row1-of2 style-2">
|
||||
<div class="goods-item" v-for="(index) in [1,2,3,4]" :key="index">
|
||||
<div class="goods-img">
|
||||
<img :src="changeImgUrl('public/static/img/default_img/square.png')" />
|
||||
</div>
|
||||
|
||||
<div class="info-wrap">
|
||||
|
||||
<div class="goods-name">商品名称</div>
|
||||
|
||||
<div class="pro-info">
|
||||
<div class="discount-price">
|
||||
<div class="price-wrap">
|
||||
<span class="unit text-color">¥</span>
|
||||
<span class="price text-color">{{ index * 100 }}</span>
|
||||
<span class="unit text-color">.00</span>
|
||||
</div>
|
||||
<div class="delete-price">¥198</div>
|
||||
<div class="sale">已售63件</div>
|
||||
</div>
|
||||
|
||||
<template v-if="data.control">
|
||||
|
||||
<!-- 购物车图标 -->
|
||||
<div v-if="data.style == 'icon-cart'" class="cart shopping-cart-btn iconfont icongouwuche" :style="{ color : data.textColor }"></div>
|
||||
|
||||
<!--加号图标 -->
|
||||
<div v-else-if="data.style == 'icon-add'" class="cart plus-sign-btn iconfont iconjia2" :style="{ color : data.textColor }"></div>
|
||||
|
||||
<!-- 按钮 -->
|
||||
<div v-else-if="data.style == 'button'" class="cart buy-btn" :style="{fontWeight: (data.fontWeight ? 'bold' : 'normal'), backgroundColor : data.bgColor, color : data.textColor,borderRadius : data.aroundRadius + 'px',padding : ('0 '+ data.padding + 'px') }">{{ data.text }}</div>
|
||||
|
||||
<!-- 自定义图标 -->
|
||||
<div v-else-if="data.style == 'icon-diy'" class="icon-diy">
|
||||
<iconfont :icon="data.iconDiy.icon" v-if="data.iconDiy.icon" :value="data.iconDiy.style ? data.iconDiy.style : ''"></iconfont>
|
||||
</div>
|
||||
|
||||
</template>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="edit-attribute">
|
||||
<div class="attr-wrap">
|
||||
<div class="restore-wrap">
|
||||
|
||||
<div class="attr-title">
|
||||
<span class="title">商品推荐</span>
|
||||
<div class="tab-wrap">
|
||||
<span class="active bg-color" data-type="content">内容</span>
|
||||
<span data-type="style">样式</span>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="edit-content-wrap">
|
||||
|
||||
<div class="layui-form-item">
|
||||
<label class="layui-form-label sm">标题名称</label>
|
||||
<div class="layui-input-block">
|
||||
<input type="text" name="title" v-model="data.title" maxlength="15" placeholder="请输入标题" class="layui-input" autocomplete="off" lay-verify="required" />
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="layui-form-item">
|
||||
<label class="layui-form-label sm">适用页面</label>
|
||||
<div class="layui-input-block">
|
||||
|
||||
<div @click="addSupportPage('goods_detail')" class="layui-unselect layui-form-checkbox" :class="{ 'layui-form-checked' : data.supportPage.indexOf('goods_detail') != -1 }" lay-skin="primary">
|
||||
<span>商品详情</span>
|
||||
<i class="layui-icon layui-icon-ok"></i>
|
||||
</div>
|
||||
|
||||
<div @click="addSupportPage('cart')" class="layui-unselect layui-form-checkbox" :class="{ 'layui-form-checked' : data.supportPage.indexOf('cart') != -1 }" lay-skin="primary">
|
||||
<span>购物车</span>
|
||||
<i class="layui-icon layui-icon-ok"></i>
|
||||
</div>
|
||||
|
||||
<div @click="addSupportPage('collect')" class="layui-unselect layui-form-checkbox" :class="{ 'layui-form-checked' : data.supportPage.indexOf('collect') != -1 }" lay-skin="primary">
|
||||
<span>关注页面</span>
|
||||
<i class="layui-icon layui-icon-ok"></i>
|
||||
</div>
|
||||
|
||||
<div @click="addSupportPage('pay')" class="layui-unselect layui-form-checkbox" :class="{ 'layui-form-checked' : data.supportPage.indexOf('pay') != -1 }" lay-skin="primary">
|
||||
<span>支付结果页</span>
|
||||
<i class="layui-icon layui-icon-ok"></i>
|
||||
</div>
|
||||
|
||||
<div @click="addSupportPage('order_detail')" class="layui-unselect layui-form-checkbox" :class="{ 'layui-form-checked' : data.supportPage.indexOf('order_detail') != -1 }" lay-skin="primary">
|
||||
<span>订单详情</span>
|
||||
<i class="layui-icon layui-icon-ok"></i>
|
||||
</div>
|
||||
|
||||
{if addon_is_exit('supermember')}
|
||||
<div @click="addSupportPage('super_member')" class="layui-unselect layui-form-checkbox" :class="{ 'layui-form-checked' : data.supportPage.indexOf('super_member') != -1 }" lay-skin="primary">
|
||||
<span>超级会员卡</span>
|
||||
<i class="layui-icon layui-icon-ok"></i>
|
||||
</div>
|
||||
{/if}
|
||||
|
||||
{if addon_is_exit('divideticket')}
|
||||
<div @click="addSupportPage('guafen')" class="layui-unselect layui-form-checkbox" :class="{ 'layui-form-checked' : data.supportPage.indexOf('guafen') != -1 }" lay-skin="primary">
|
||||
<span>好友瓜分券</span>
|
||||
<i class="layui-icon layui-icon-ok"></i>
|
||||
</div>
|
||||
{/if}
|
||||
|
||||
{if addon_is_exit('fenxiao')}
|
||||
<div @click="addSupportPage('fenxiao_level')" class="layui-unselect layui-form-checkbox" :class="{ 'layui-form-checked' : data.supportPage.indexOf('fenxiao_level') != -1 }" lay-skin="primary">
|
||||
<span>分销等级页</span>
|
||||
<i class="layui-icon layui-icon-ok"></i>
|
||||
</div>
|
||||
{/if}
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="word-aux diy-word-aux">控制猜你喜欢模块在页面中的显示与隐藏</div>
|
||||
|
||||
<div class="layui-form-item">
|
||||
<label class="layui-form-label sm">数据来源</label>
|
||||
<div class="layui-input-block">
|
||||
|
||||
<div @click="data.sources = 'sort'" :class="{ 'layui-unselect layui-form-radio' : true,'layui-form-radioed' : (data.sources == 'sort') }">
|
||||
<i class="layui-anim layui-icon">{{ data.sources == 'sort' ? "" : "" }}</i>
|
||||
<div>按排序获取</div>
|
||||
</div>
|
||||
|
||||
<div @click="data.sources = 'browse'" :class="{ 'layui-unselect layui-form-radio' : true,'layui-form-radioed' : (data.sources == 'browse') }">
|
||||
<i class="layui-anim layui-icon">{{ data.sources == 'browse' ? "" : "" }}</i>
|
||||
<div>按最近浏览</div>
|
||||
</div>
|
||||
|
||||
<div @click="data.sources = 'sale'" :class="{ 'layui-unselect layui-form-radio' : true,'layui-form-radioed' : (data.sources == 'sale') }">
|
||||
<i class="layui-anim layui-icon">{{ data.sources == 'sale' ? "" : "" }}</i>
|
||||
<div>按销量获取</div>
|
||||
</div>
|
||||
|
||||
<div @click="data.sources = 'diy'" :class="{ 'layui-unselect layui-form-radio' : true,'layui-form-radioed' : (data.sources == 'diy') }">
|
||||
<i class="layui-anim layui-icon">{{ data.sources == 'diy' ? "" : "" }}</i>
|
||||
<div>手动设置</div>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
<div class="word-aux diy-word-aux js-sources-tips"></div>
|
||||
</div>
|
||||
|
||||
<div class="layui-form-item js-diy-select-goods" v-if="data.sources == 'diy'">
|
||||
<label class="layui-form-label sm">手动选择</label>
|
||||
<div class="layui-input-block">
|
||||
<div class="selected-style">
|
||||
<span @click="addGoods()" :class="{ 'text-color' : data.goodsIds.length > 0 }">{{ data.goodsIds.length > 0 ? '已选' + data.goodsIds.length + '个' : '选择商品' }}</span>
|
||||
<i class="iconfont iconyoujiantou"></i>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="template-edit-title">
|
||||
<h3>购买按钮</h3>
|
||||
<div class="layui-form-item">
|
||||
<label class="layui-form-label sm">是否显示</label>
|
||||
<div class="layui-input-block">
|
||||
<div class="layui-unselect layui-form-checkbox" lay-skin="primary" @click="data.control = !data.control" :class="{ 'layui-form-checked' : data.control }">
|
||||
<span>{{ data.control ? '显示' : '隐藏' }}</span>
|
||||
<i class="layui-icon layui-icon-ok"></i>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<template v-if="data.control">
|
||||
<div class="layui-form-item">
|
||||
<label class="layui-form-label sm">购物车事件</label>
|
||||
<div class="layui-input-block">
|
||||
<div @click="data.cartEvent='detail'" :class="{ 'layui-unselect layui-form-radio' : true,'layui-form-radioed' : (data.cartEvent=='detail') }">
|
||||
<i class="layui-anim layui-icon">{{ data.cartEvent=='detail' ? "" : "" }}</i>
|
||||
<div>跳转商品详情</div>
|
||||
</div>
|
||||
<div @click="data.cartEvent='cart'" :class="{ 'layui-unselect layui-form-radio' : true,'layui-form-radioed' : (data.cartEvent=='cart') }">
|
||||
<i class="layui-anim layui-icon">{{ data.cartEvent=='cart' ? "" : "" }}</i>
|
||||
<div>加入购物车</div>
|
||||
</div>
|
||||
</div>
|
||||
<p class="word-aux" style="margin-left: 100px;" v-if="data.cartEvent=='cart'">只有实物商品才能加入购物车,虚拟商品会跳转到商品详情</p>
|
||||
</div>
|
||||
<div class="layui-form-item btn-style">
|
||||
<label class="layui-form-label sm">样式</label>
|
||||
<div class="layui-input-block">
|
||||
<div class="item" :class="{ 'border-color' : data.style == 'button' }" @click="data.style = 'button';data.textColor= data.textColor == '#FF6A00' ? '#FFFFFF' : data.textColor">
|
||||
<span class="buy-btn bg-color">按钮</span>
|
||||
</div>
|
||||
<div class="item" :class="{ 'border-color' : data.style == 'icon-cart' }" @click="data.style = 'icon-cart';data.textColor= data.textColor == '#FFFFFF' ? '#FF6A00' : data.textColor">
|
||||
<span class="shopping-cart-btn iconfont icongouwuche text-color border-color"></span>
|
||||
</div>
|
||||
<div class="item" :class="{ 'border-color' : data.style == 'icon-add' }" @click="data.style = 'icon-add';data.textColor= data.textColor == '#FFFFFF' ? '#FF6A00' : data.textColor">
|
||||
<span class="plus-sign-btn iconfont iconjia2 text-color border-color"></span>
|
||||
</div>
|
||||
<div class="item" :class="{ 'border-color' : data.style == 'icon-diy' }" @click="data.style = 'icon-diy';data.textColor= data.textColor == '#FFFFFF' ? '#FF6A00' : data.textColor">
|
||||
<span class="diy-btn text-color border-color">自定义</span>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="layui-input-block diy-icon" v-show="data.style == 'icon-diy'">
|
||||
<img-icon-upload :data="{data : data.iconDiy, displayType : 'icon'}"></img-icon-upload>
|
||||
<div class="action-box">
|
||||
<div class="action" @click="iconStyle($event)"><i class="iconfont iconpifu"></i></div>
|
||||
<div class="action" id="goods-list-color"><i class="iconfont iconyanse"></i></div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
|
||||
<div class="layui-form-item" v-show="data.style == 'button'">
|
||||
<label class="layui-form-label sm">文字</label>
|
||||
<div class="layui-input-block">
|
||||
<input type="text" v-model="data.text" maxlength="6" placeholder="请输入按钮文字" class="layui-input">
|
||||
</div>
|
||||
</div>
|
||||
|
||||
</template>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
|
||||
<div class="edit-style-wrap" style="display: none;">
|
||||
|
||||
<div class="template-edit-title">
|
||||
<h3>商品样式</h3>
|
||||
<div class="layui-form-item">
|
||||
<label class="layui-form-label sm">商品名称</label>
|
||||
<div class="layui-input-block">
|
||||
<div v-for="(item,nameLineIndex) in nameLineModeList" :key="nameLineIndex" @click="data.nameLineMode=item.value" :class="{ 'layui-unselect layui-form-radio' : true,'layui-form-radioed' : (data.nameLineMode==item.value) }">
|
||||
<i class="layui-anim layui-icon">{{ data.nameLineMode == item.value ? "" : "" }}</i>
|
||||
<div>{{item.text}}</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="template-edit-title">
|
||||
<h3>购买按钮</h3>
|
||||
<template v-if="data.style == 'button'">
|
||||
<div class="layui-form-item">
|
||||
<label class="layui-form-label sm">是否加粗</label>
|
||||
<div class="layui-input-block">
|
||||
<div class="layui-unselect layui-form-checkbox" lay-skin="primary" @click="data.fontWeight = !data.fontWeight" :class="{ 'layui-form-checked' : data.fontWeight }">
|
||||
<span>{{ data.fontWeight ? '加粗' : '常规' }}</span>
|
||||
<i class="layui-icon layui-icon-ok"></i>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<slide :data="{ field : 'padding', label : '按钮边距', min: 0, max : 20 }"></slide>
|
||||
<slide :data="{ field : 'aroundRadius', label: '圆角', min:0, max: 50 }"></slide>
|
||||
</template>
|
||||
|
||||
<div class="layui-form-item">
|
||||
<label class="layui-form-label sm">色调</label>
|
||||
<div class="layui-input-block">
|
||||
<div @click="data.theme='default'" :class="{ 'layui-unselect layui-form-radio' : true,'layui-form-radioed' : (data.theme == 'default') }">
|
||||
<i class="layui-anim layui-icon">{{ data.theme == 'default' ? "" : "" }}</i>
|
||||
<div>跟随主题风格</div>
|
||||
</div>
|
||||
<div @click="data.theme='diy'" :class="{ 'layui-unselect layui-form-radio' : true,'layui-form-radioed' : (data.theme == 'diy') }">
|
||||
<i class="layui-anim layui-icon">{{ data.theme == 'diy' ? "" : "" }}</i>
|
||||
<div>自定义</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<template v-if="data.theme == 'diy'">
|
||||
<color v-if="data.style == 'button'" :data="{ field : 'bgColor', 'label' : '背景颜色', defaultColor : '#FF6A00' }"></color>
|
||||
<color :data="{ field : 'textColor', 'label' : '文字颜色', defaultColor : '#FFFFFF' }"></color>
|
||||
</template>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="custom-save js-bottom-custom-save">
|
||||
<button class="layui-btn save" lay-submit lay-filter="save">保存</button>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<input id="guessYouLikeConfig" type="hidden" value="{$config|json_encode}">
|
||||
|
||||
<script>
|
||||
var storeIsExit = '{$store_is_exit}';
|
||||
</script>
|
||||
<script src="STATIC_JS/vue.js"></script>
|
||||
<script src="STATIC_EXT/colorPicker/js/colorpicker.js"></script>
|
||||
<script src="STATIC_EXT/diyview/js/components.js"></script>
|
||||
<script src="SHOP_JS/guess_you_like.js"></script>
|
||||
{include file="app/shop/view/diy/iconfont_component.html"/}
|
||||
105
app/shop/view/goods/hot_search_words.html
Executable file
105
app/shop/view/goods/hot_search_words.html
Executable file
@@ -0,0 +1,105 @@
|
||||
<style>
|
||||
.keywords-item{position:relative;margin-bottom:10px}
|
||||
.keywords-item .layui-icon-close{font-size:12px;position:absolute;top:-8px;right:-8px;width:16px;height:16px;line-height:16px;text-align:center;color:#fff;-webkit-border-radius:10px;-moz-border-radius:10px;border-radius:10px;background:rgba(0,0,0,.3);cursor:pointer}
|
||||
.examples {cursor: pointer;}
|
||||
</style>
|
||||
|
||||
<div class="layui-collapse tips-wrap">
|
||||
<div class="layui-colla-item">
|
||||
<h2 class="layui-colla-title">操作提示</h2>
|
||||
<ul class="layui-colla-content layui-show">
|
||||
<li>热门搜索,将显示在前台搜索框下面,前台点击时直接作为关键词进行搜索 <a onclick="showDemo()" class="examples text-color">查看示例</a></li>
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
<div class="layui-form">
|
||||
<div class="layui-card card-common card-brief">
|
||||
<div class="layui-card-body">
|
||||
<div class="layui-form-item">
|
||||
<label class="layui-form-label">首页搜索的关键字:</label>
|
||||
<div class="layui-input-block keywords-block">
|
||||
{if !empty($hot_search_words.words_array)}
|
||||
{foreach $hot_search_words.words_array as $k => $v}
|
||||
<div class="layui-input-inline keywords-item">
|
||||
<input type="text" name="words[]" lay-verify="required" value="{$v}" placeholder="" autocomplete="off" class="layui-input len-short">
|
||||
<i class="layui-icon layui-icon-close" ></i>
|
||||
</div>
|
||||
{/foreach}
|
||||
{else/}
|
||||
<div class="layui-input-inline keywords-item">
|
||||
<input type="text" name="words[]" lay-verify="required" value="" placeholder="" autocomplete="off" class="layui-input len-short">
|
||||
<i class="layui-icon layui-icon-close" ></i>
|
||||
</div>
|
||||
{/if}
|
||||
</div>
|
||||
|
||||
</div>
|
||||
<div class="layui-form-item">
|
||||
<div class="word-aux">首页显示的搜索关键字,可以通过拖拽来调整顺序</div>
|
||||
<label class="layui-form-label"></label>
|
||||
<div class="layui-input-block">
|
||||
<div class="layui-input-inline">
|
||||
<a class="text-color" href="javascript:void(0)" onclick="addKeywords()">添加</a>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-row">
|
||||
<button class="layui-btn" lay-submit lay-filter="save">保存</button>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
|
||||
<script src="__STATIC__/ext/drag-arrange.js"></script>
|
||||
<script>
|
||||
layui.use('form', function() {
|
||||
var form = layui.form,repeat_flag=false;
|
||||
form.on('submit(save)', function(data) {
|
||||
if (repeat_flag) return;
|
||||
repeat_flag = true;
|
||||
|
||||
$.ajax({
|
||||
url: ns.url("shop/goods/hotsearchwords"),
|
||||
data: data.field,
|
||||
dataType: 'JSON',
|
||||
type: 'POST',
|
||||
success: function(res) {
|
||||
repeat_flag = false;
|
||||
layer.msg(res.message);
|
||||
}
|
||||
});
|
||||
});
|
||||
|
||||
$(".keywords-item").arrangeable({
|
||||
//拖拽结束后执行回调
|
||||
callback: function (e) {
|
||||
}
|
||||
});
|
||||
|
||||
$('body').off('click', ".keywords-item .layui-icon-close").on('click', ".keywords-item .layui-icon-close",function () {
|
||||
$(this).parent().remove();
|
||||
});
|
||||
});
|
||||
|
||||
function addKeywords(){
|
||||
var html = '<div class="layui-input-inline keywords-item"><input type="text" name="words[]" lay-verify="required" value="" placeholder="" autocomplete="off" class="layui-input len-short"><i class="layui-icon layui-icon-close" ></i></div>';
|
||||
$('.keywords-block').append(html);
|
||||
|
||||
setTimeout(function () {
|
||||
$(".keywords-item").arrangeable({
|
||||
//拖拽结束后执行回调
|
||||
callback: function (e) {
|
||||
}
|
||||
});
|
||||
}, 1);
|
||||
}
|
||||
function showDemo(){
|
||||
layer.open({
|
||||
title: '查看示例',
|
||||
type: 1,
|
||||
area: ['500px', '660px'],
|
||||
content: '<img style="margin: 20px 80px;" src="SHOP_IMG/hot_search.png">'
|
||||
})
|
||||
}
|
||||
</script>
|
||||
191
app/shop/view/goods/import.html
Executable file
191
app/shop/view/goods/import.html
Executable file
@@ -0,0 +1,191 @@
|
||||
<link rel="stylesheet" href="__STATIC__/ext/video/video.css">
|
||||
<link rel="stylesheet" type="text/css" href="__STATIC__/ext/searchable_select/searchable_select.css" />
|
||||
<style type="text/css">
|
||||
.data_load {display: flex;flex-direction: column;align-items: center;margin-top:100px;}
|
||||
.data_load-img {width: 60px;height: 60px;}
|
||||
.data_load-img img {width: 100%;height: 100%;}
|
||||
.data_load-title {color: #333;font-size: 18px;margin-top: 15px;}
|
||||
.data_load-content {color: #333;font-size: 14px;margin-top: 20px;}
|
||||
.data_load-footer {color:var(--base-color);font-size: 14px;}
|
||||
.data_load-content span {display:inline-block;}
|
||||
|
||||
.body-content {background: none !important;padding: 0 !important;margin: 0 !important;}
|
||||
.footer {padding-bottom: 0px !important;}
|
||||
.common-wrap {position: relative;display: flex;padding: 25px 140px;margin: 15px 15px 0 15px;background:#fff}
|
||||
.common-wrap .tips-wrap {margin: 0px 20px;min-width: 130px;background-color: #ffffff;border-color: #ffffff;border-radius: 2px;}
|
||||
.common-wrap .tips-wrap>span{display: block;width: 30px;height: 30px;line-height: 30px;text-align: center;color: var(--base-color);border-radius: 50px;border: 1px solid var(--base-color);font-size: 18px;margin: 0 auto;font-weight: bolder;margin-bottom: 15px;}
|
||||
.common-wrap .tips-wrap>p{text-align: center;}
|
||||
.common-wrap .interval-wrap{width: 300px;height: 45px;position: relative;border-bottom: 1px solid #e6e6e6;}
|
||||
.common-wrap .interval-wrap>span{display: block;position: absolute;bottom: -5px;right: 0px;width: 8px;height: 8px;border: 1px solid #e6e6e6;transform: rotateZ(45deg);border-bottom: 0px;border-left: 0px;}
|
||||
.layui-tab-brief {margin: 15px 15px 0px 15px;}
|
||||
.card-common{padding-top: 20px;}
|
||||
</style>
|
||||
|
||||
<form class="layui-form">
|
||||
<div class="layui-form">
|
||||
<div class="common-wrap">
|
||||
<div class="tips-wrap">
|
||||
<span>1</span>
|
||||
<p>提前在系统内维护好</p>
|
||||
<p><a class="text-color" href="{:href_url('shop/goodscategory/lists')}" target="_blank">商品分类</a></p>
|
||||
</div>
|
||||
<div class="interval-wrap">
|
||||
<span></span>
|
||||
</div>
|
||||
<div class="tips-wrap">
|
||||
<span>2</span>
|
||||
<p>按商品类型下载商品导入模板,录入商品信息。</p>
|
||||
</div>
|
||||
<div class="interval-wrap">
|
||||
<span></span>
|
||||
</div>
|
||||
<div class="tips-wrap">
|
||||
<span>3</span>
|
||||
<p>设置商品发布渠道,上传文件进行导入。</p>
|
||||
</div>
|
||||
</div>
|
||||
<!--<div class="layui-collapse tips-wrap">-->
|
||||
<!--<div class="layui-colla-item">-->
|
||||
<!--<h2 class="layui-colla-title">操作提示</h2>-->
|
||||
<!--<ul class="layui-colla-content layui-show">-->
|
||||
<!--<li>第 1 步:提前在系统内维护好<a href="{:href_url('shop/goodscategory/lists')}" class="text-color">商品分类</a></li>-->
|
||||
<!--</ul>-->
|
||||
<!--<ul class="layui-colla-content layui-show">-->
|
||||
<!--<li>第 2 步:按商品类型下载商品导入模板,录入商品信息。</li>-->
|
||||
<!--</ul>-->
|
||||
<!--<ul class="layui-colla-content layui-show">-->
|
||||
<!--<li>第 3 步:设置商品发布渠道,上传文件进行导入。</li>-->
|
||||
<!--</ul>-->
|
||||
<!--</div>-->
|
||||
<!--</div>-->
|
||||
<div class="layui-tab-brief" lay-filter="goods_tab">
|
||||
<div>
|
||||
<div class="layui-tab-item layui-show">
|
||||
<div class="layui-card card-common card-brief head">
|
||||
<div class="layui-card-header">
|
||||
<span class="card-title">商品导入</span>
|
||||
<a href="javascript:location.reload()" id="contine" style="display:none;"><span style="color:var(--base-color)">继续导入</span></a><a href="{:href_url('shop/goods/importrecordlist')}" id="list" ><span style="color:var(--base-color)">导入历史</span></a>
|
||||
</div>
|
||||
<div class="layui-card-body">
|
||||
<div class="layui-card-body" id="import">
|
||||
|
||||
<div class="layui-form-item">
|
||||
<label class="layui-form-label">商品类型配置:</label>
|
||||
<div class="layui-input-block">
|
||||
<ul>
|
||||
<li><input type="radio" lay-filter="encrypt" title="实物商品" class="type" name="type" value="1" checked><a class="text-color" href="{:img('public/static/img/goods_csv/goods.xlsx')}" target="_blank">下载模板</a>
|
||||
</li>
|
||||
</ul>
|
||||
<ul>
|
||||
<li><input type="radio" lay-filter="encrypt" title="虚拟商品" class="type" name="type" value="2"><a class="text-color" href="{:img('public/static/img/goods_csv/virtualgoods.xlsx')}" target="_blank">下载模板</a></li>
|
||||
</ul>
|
||||
<ul>
|
||||
<li><input type="radio" lay-filter="encrypt" title="电子卡密" class="type" name="type" value="3"><a class="text-color" href="{:img('public/static/img/goods_csv/virtualcard.xlsx')}" target="_blank">下载模板</a></li>
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
<div class="layui-form-item goods-image-wrap" style="margin-top: 20px">
|
||||
<label class="layui-form-label">商品图片:</label>
|
||||
<div class="layui-input-block">
|
||||
<div>在导入前请先将商品图片上传到商品相册,<a href="{:href_url('shop/album/lists')}" class="text-color" target="_blank">去上传</a></div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="layui-form-item" style="margin-top: 30px">
|
||||
<label class="layui-form-label">上传数据:</label>
|
||||
<div class="layui-input-block">
|
||||
<div class="upload-img-block">
|
||||
<div class="upload-img-box" id="xlsUpload">
|
||||
|
||||
<div class="upload-default">
|
||||
<div class="upload">
|
||||
<i class="iconfont iconshangchuan"></i>
|
||||
<p>上传商品导入数据</p>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="word-aux">请上传xlsx文件,最大不要超过10M</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- 商品导入成功 -->
|
||||
<div class="data_load" style="display: none" id="success">
|
||||
<div class="data_load-img"><img src="SHOP_IMG/success.png" /></div>
|
||||
<div class="data_load-title">商品导入完成</div>
|
||||
<div class="data_load-content">成功导入<span class="success-count text-color">0</span>条数据,导入失败<span class="error-count text-color">0</span>条数据</div>
|
||||
<!-- <div class="data_load-footer" style="cursor:pointer;"><span id="exportError" style="display:none" onclick="exportError();">下载失败记录</span></div>-->
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<!-- 商品详情 -->
|
||||
<div class="layui-tab-item">
|
||||
<script type="text/javascript" charset="utf-8" src="__STATIC__/ext/ueditor/ueditor.config.js"></script>
|
||||
<script type="text/javascript" charset="utf-8" src="__STATIC__/ext/ueditor/ueditor.all.js"> </script>
|
||||
<script type="text/javascript" charset="utf-8" src="__STATIC__/ext/ueditor/lang/zh-cn/zh-cn.js">
|
||||
</script>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</form>
|
||||
|
||||
<script>
|
||||
layui.use(['form', 'upload'], function() {
|
||||
var form = layui.form,
|
||||
upload = layui.upload,
|
||||
type = 1;
|
||||
|
||||
form.on('radio(encrypt)', function(data){
|
||||
type = data.value;
|
||||
});
|
||||
|
||||
form.render();
|
||||
|
||||
//商品导入
|
||||
var uploadInst = upload.render({
|
||||
elem: '#xlsUpload',
|
||||
url: ns.url("shop/goods/import"),
|
||||
data:{type:function () {
|
||||
return type
|
||||
}},
|
||||
field: 'xlsx',
|
||||
accept:'file',
|
||||
acceptMime: 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet',
|
||||
exts: 'xlsx',
|
||||
before: function(obj) { //obj参数包含的信息,跟 choose回调完全一致,可参见上文。
|
||||
var index = layer.load(1, {
|
||||
shade: [0.1, '#fff'], //0.1透明度的白色背景
|
||||
time: 0
|
||||
});
|
||||
},
|
||||
done: function(res) {
|
||||
layer.closeAll();
|
||||
if (res.code >= 0) {
|
||||
$("#upload").attr("style","display:none;");//隐藏div
|
||||
$("#import").attr("style","display:none;");//隐藏div
|
||||
$("#contine").attr("style","display:flex;");//显示div
|
||||
$("#list").attr("style","display:none;");//显示div
|
||||
$("#success").attr("style","display:flex;");//显示div
|
||||
$(".success-count").text(res.data.success_count);
|
||||
$(".error-count").text(res.data.error_count);
|
||||
if (res.data.error_count > 0) {
|
||||
$("#exportError").attr("style","display:flex;");
|
||||
} else {
|
||||
$("#exportError").attr("style","display:none;");
|
||||
}
|
||||
|
||||
} else {
|
||||
layer.msg(res.message);
|
||||
}
|
||||
|
||||
}
|
||||
});
|
||||
|
||||
});
|
||||
</script>
|
||||
<script src="__STATIC__/ext/drag-arrange.js"></script>
|
||||
<script src="__STATIC__/ext/video/video.min.js"></script>
|
||||
<script src="__STATIC__/ext/searchable_select/searchable_select.js"></script>
|
||||
279
app/shop/view/goods/import_record_list.html
Executable file
279
app/shop/view/goods/import_record_list.html
Executable file
@@ -0,0 +1,279 @@
|
||||
<style>
|
||||
.progress-layer {width:400px;background:#fff;position:fixed;top:50%;left:50%;transform:translate(-50%,-50%);box-shadow:1px 1px 50px rgba(0,0,0,.3);padding:20px 20px;z-index:100;display:none;}
|
||||
.progress-layer h3 {line-height:1;margin-bottom:15px;text-align:center;font-size:14px;}
|
||||
.progress-layer .layui-progress-big,.progress-layer .layui-progress-big .layui-progress-bar {height:14px;line-height:14px;}
|
||||
.progress-layer .layui-progress-text {line-height:14px;}
|
||||
.goods-info {padding: 5px 0;align-items: center;flex-wrap:unset!important;}
|
||||
.goods-info .room-name {padding-left: 5px;line-height: 1}
|
||||
.goods-info img {width:50px;height: 50px;}
|
||||
.single-filter-box{justify-content: end}
|
||||
.add-good-form .layui-input-block {width: 450px;}
|
||||
.add-good-form .layui-form-item {position: relative;}
|
||||
.add-good-form .category-wrap {position: absolute; left: 150px; top: 40px; z-index: 9; background-color: #FFFFFF; border: 1px solid #EEEEEE;}
|
||||
.add-good-form .category-wrap .category-list {display: flex;}
|
||||
.add-good-form .category-wrap ul {width: 151px; height: 300px; overflow: auto; background-color: #FFFFFF; border-right: 1px solid #EEEEEE; box-sizing: border-box;}
|
||||
.add-good-form .category-wrap ul:last-child {border-right: 1px solid #EEEEEE;}
|
||||
.add-good-form .category-wrap ul li {line-height: 26px; padding: 0 15px; cursor: pointer;}
|
||||
.add-good-form .category-wrap .category-btn {width: 100%; padding: 10px 15px; box-sizing: border-box; border-top: 1px solid #EEEEEE;}
|
||||
.layui-layer-page .layui-layer-content {overflow: auto !important; position: relative;}
|
||||
.goods-category-mask {width: 100%; height: 100%; position: absolute; left: 0; top: 0; z-index: 9;}
|
||||
.selected-style {color: #FFFFFF;}
|
||||
.reject-reason {height: 100%;padding-bottom: 20px;}
|
||||
.reason .layui-layer-content {overflow: unset!important}
|
||||
.layui-layout-admin .screen .layui-colla-content{margin-bottom: 15px;}
|
||||
.layui-layout-admin .layui-form-item .layui-input-inline {
|
||||
background-color: #fff;
|
||||
}
|
||||
</style>
|
||||
|
||||
<div class="single-filter-box">
|
||||
<a href="{:href_url('shop/goods/import')}"><button class="layui-btn">导入商品</button></a>
|
||||
</div>
|
||||
<!-- 筛选面板 -->
|
||||
<div class="screen layui-collapse" lay-filter="selection_panel">
|
||||
<div class="layui-colla-item">
|
||||
<form class="layui-colla-content layui-form layui-show">
|
||||
<div class="layui-form">
|
||||
<div class="layui-form-item">
|
||||
<div class="layui-inline">
|
||||
<label class="layui-form-label">导入时间:</label>
|
||||
<div class="layui-input-inline">
|
||||
<input type="text" class="layui-input" name="start_time" placeholder="开始时间" id="start_time" readonly>
|
||||
<i class=" iconrili iconfont calendar"></i>
|
||||
</div>
|
||||
<div class="layui-input-inline">
|
||||
<input type="text" class="layui-input" name="end_time" placeholder="结束时间" id="end_time" readonly>
|
||||
<i class=" iconrili iconfont calendar"></i>
|
||||
</div>
|
||||
<button class="layui-btn layui-btn-primary date-picker-btn date-picker-btn-seven" onclick="datePick(7, this);return false;">近7天</button>
|
||||
<button class="layui-btn layui-btn-primary date-picker-btn date-picker-btn-thirty" onclick="datePick(30, this);return false;">近30天</button>
|
||||
</div>
|
||||
|
||||
<div class="form-row">
|
||||
<button class="layui-btn" lay-submit lay-filter="search">筛选</button>
|
||||
<button type="reset" class="layui-btn layui-btn-primary">重置</button>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</form>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<table id="record_list" lay-filter="record_list"></table>
|
||||
<!-- 直播间信息 -->
|
||||
<script type="text/html" id="goodsinfo">
|
||||
<div class="table-btn goods-info">
|
||||
<img src="{{ ns.img(d.cover_img) }}">
|
||||
<span class="room-name" title="{{ d.goods_name }}">{{ d.goods_name }}</span>
|
||||
</div>
|
||||
</script>
|
||||
|
||||
<script type="text/html" id="reason">
|
||||
<div class="reject-reason">
|
||||
{{d.reject_reason}}
|
||||
</div>
|
||||
</script>
|
||||
|
||||
<!-- 操作 -->
|
||||
<script type="text/html" id="operation">
|
||||
<div class="table-btn">
|
||||
{{# if(d.fail_num > 0){ }}
|
||||
<a class="layui-btn" href="{{ ns.url('shop/goods/download?request_mode=download&id=' + d.id) }}" target="_blank">下载失败数据</a>
|
||||
{{# } }}
|
||||
</div>
|
||||
</script>
|
||||
<div class="progress-layer">
|
||||
<h3>正在同步中...</h3>
|
||||
<div class="layui-progress layui-progress-big" lay-showPercent="true" lay-filter="progress">
|
||||
<div class="layui-progress-bar layui-bg-blue" lay-percent="0%"></div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<script>
|
||||
var form, table, element, laytpl,
|
||||
download_flag = false,
|
||||
goodsId = [], selectedGoodsId = [], goods_list = [],out_product_id='';
|
||||
|
||||
reLoad();
|
||||
function reLoad() {
|
||||
layui.use(['form', 'element', 'laytpl','laydate'], function () {
|
||||
form = layui.form;
|
||||
element = layui.element;
|
||||
laytpl = layui.laytpl;
|
||||
var laydate = layui.laydate;
|
||||
form.render();
|
||||
|
||||
//渲染时间
|
||||
laydate.render({
|
||||
elem: '#start_time'
|
||||
,type: 'datetime'
|
||||
,change: function(value, date, endDate){
|
||||
$(".date-picker-btn").removeClass("selected");
|
||||
}
|
||||
});
|
||||
laydate.render({
|
||||
elem: '#end_time'
|
||||
,type: 'datetime'
|
||||
,change: function(value, date, endDate){
|
||||
$(".date-picker-btn").removeClass("selected");
|
||||
}
|
||||
});
|
||||
|
||||
// 搜索功能
|
||||
form.on('submit(search)', function (data) {
|
||||
table.reload({
|
||||
page: {
|
||||
curr: 1
|
||||
},
|
||||
where: data.field
|
||||
});
|
||||
return false;
|
||||
});
|
||||
|
||||
table = new Table({
|
||||
elem: '#record_list',
|
||||
url: ns.url("/shop/goods/importrecordlist"),
|
||||
where: {
|
||||
"start_time": $("#start_time").val(),
|
||||
"end_time": $("#end_time").val(),
|
||||
},
|
||||
cols: [
|
||||
[
|
||||
{
|
||||
title: '导入文件名称',
|
||||
unresize: 'false',
|
||||
width: '15%',
|
||||
field: 'record_name'
|
||||
},{
|
||||
title: '站点',
|
||||
unresize: 'false',
|
||||
width: '15%',
|
||||
field: 'site_id'
|
||||
}, {
|
||||
title: '导入时间',
|
||||
unresize: 'false',
|
||||
width: '15%',
|
||||
field: 'import_time'
|
||||
|
||||
}, {
|
||||
title: '成功数量',
|
||||
unresize: 'false',
|
||||
width: '15%',
|
||||
field: 'success_num'
|
||||
}, {
|
||||
field: 'fail_num',
|
||||
title: '失败数量',
|
||||
unresize: 'false',
|
||||
width: '15%'
|
||||
}, {
|
||||
title: '操作',
|
||||
toolbar: '#operation',
|
||||
unresize: 'false',
|
||||
align:'right'
|
||||
}]
|
||||
]
|
||||
});
|
||||
|
||||
table.tool(function (obj) {
|
||||
var data = obj.data;
|
||||
switch (obj.event) {
|
||||
case 'download': //下载文件
|
||||
download(data.id);
|
||||
break;
|
||||
}
|
||||
})
|
||||
|
||||
|
||||
// 批量操作
|
||||
table.bottomToolbar(function (obj) {
|
||||
if (obj.data.length < 1) {
|
||||
layer.msg('请选择要操作的数据');
|
||||
return;
|
||||
}
|
||||
var id_array = new Array();
|
||||
for (i in obj.data) id_array.push(obj.data[i].out_product_id);
|
||||
switch (obj.event) {
|
||||
case "delete":
|
||||
deleteGoods(id_array.toString());
|
||||
break;
|
||||
case "listing":
|
||||
listingGoods(id_array.toString());
|
||||
break;
|
||||
case "dellisting":
|
||||
dellistingGoods(id_array.toString());
|
||||
break;
|
||||
}
|
||||
});
|
||||
|
||||
function download(id){
|
||||
layer.confirm('是否确定要下载该文件?', {title: '提示'}, function (index) {
|
||||
if (download_flag) return;
|
||||
download_flag = true;
|
||||
layer.close(index);
|
||||
|
||||
$.ajax({
|
||||
url: ns.url("/shop/goods/download"),
|
||||
data: {id: id},
|
||||
dataType: 'JSON',
|
||||
type: 'POST',
|
||||
success: function (res) {
|
||||
layer.msg(res.message);
|
||||
download_flag = false;
|
||||
table.reload();
|
||||
}
|
||||
});
|
||||
});
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
* 七天时间
|
||||
*/
|
||||
function datePick(date_num,event_obj){
|
||||
$(".date-picker-btn").removeClass("selected");
|
||||
$(event_obj).addClass('selected');
|
||||
|
||||
Date.prototype.Format = function (fmt,date_num) { //author: meizz
|
||||
this.setDate(this.getDate()-date_num);
|
||||
var o = {
|
||||
"M+": this.getMonth() + 1, //月份
|
||||
"d+": this.getDate(), //日
|
||||
"H+": this.getHours(), //小时
|
||||
"m+": this.getMinutes(), //分
|
||||
"s+": this.getSeconds(), //秒
|
||||
"q+": Math.floor((this.getMonth() + 3) / 3), //季度
|
||||
"S": this.getMilliseconds() //毫秒
|
||||
};
|
||||
if (/(y+)/.test(fmt)) fmt = fmt.replace(RegExp.$1, (this.getFullYear() + "").substr(4 - RegExp.$1.length));
|
||||
for (var k in o)
|
||||
if (new RegExp("(" + k + ")").test(fmt)) fmt = fmt.replace(RegExp.$1, (RegExp.$1.length == 1) ? (o[k]) : (("00" + o[k]).substr(("" + o[k]).length)));
|
||||
return fmt;
|
||||
};
|
||||
// var now_time = new Date().Format("yyyy-MM-dd HH:mm:ss",0);//当前日期
|
||||
var now_time = new Date().Format("yyyy-MM-dd 23:59:59",0);//当前日期
|
||||
var before_time = new Date().Format("yyyy-MM-dd 00:00:00",date_num-1);//前几天日期
|
||||
$("input[name=start_time]").val(before_time,0);
|
||||
$("input[name=end_time]").val(now_time,date_num-1);
|
||||
|
||||
}
|
||||
</script>
|
||||
|
||||
<script type="text/html" id="table_goods_list">
|
||||
{{# layui.each(d, function(index, item) { }}
|
||||
<tr>
|
||||
<td>
|
||||
<div class="table-title">
|
||||
<div class="title-pic">
|
||||
{{# if(item.goods_image){ }}
|
||||
<img layer-src src="{{ns.img(item.goods_image.split(',')[0],'small')}}"/>
|
||||
{{# } }}
|
||||
</div>
|
||||
<div class="title-content">
|
||||
<a href="javascript:;" class="multi-line-hiding text-color-sub" title="{{item.goods_name}}">{{item.goods_name}}</a>
|
||||
</div>
|
||||
</div>
|
||||
</td>
|
||||
</tr>
|
||||
{{# }) }}
|
||||
</script>
|
||||
762
app/shop/view/goods/lists.html
Executable file
762
app/shop/view/goods/lists.html
Executable file
@@ -0,0 +1,762 @@
|
||||
<link rel="stylesheet" href="SHOP_CSS/goods_lists.css">
|
||||
<link rel="stylesheet" type="text/css" href="__STATIC__/ext/searchable_select/searchable_select.css"/>
|
||||
<link rel="stylesheet" type="text/css" href="__STATIC__/ext/layui/extend/cascader/cascader.css"/>
|
||||
<style>
|
||||
.layui-table .table-btn {justify-content:flex-end;}
|
||||
.batch-operation-sku {display:block;}
|
||||
.batch-operation-sku .layui-form-label {width:unset}
|
||||
.batch-operation-sku span {margin-right:10px;display:inline-block;height:34px;line-height:34px;cursor:pointer;}
|
||||
.batch-operation-sku input {display:inline-block;}
|
||||
.batch-operation-sku input,.batch-operation-sku button {display:none;}
|
||||
.sku-table {display:none;-webkit-user-select:none;-ms-user-select:none;-moz-user-select:none}
|
||||
.sku-table .layui-input-block .img-wrap {display:inline-block;position:relative;margin:8px;border:1px solid #e5e5e5;}
|
||||
.sku-table .layui-input-block .img-wrap a {display:block;width:50px;height:50px;line-height:50px;text-align:center;overflow:hidden;}
|
||||
.sku-table .layui-input-block .img-wrap a img {width:100%;}
|
||||
.sku-table .layui-input-block .img-wrap .operation {position:absolute;top:0;z-index:10;width:50px;height:50px;background:rgba(0,0,0,0.3);color:#fff;cursor:pointer;line-height:50px;text-align:center;display:none;}
|
||||
.sku-table .layui-input-block .img-wrap:hover .operation {display:block;}
|
||||
.sku-table .layui-input-block .img-wrap .operation i {font-size:20px;}
|
||||
.sku-table .layui-input-block .upload-sku-img {border:1px dashed #d9d9d9;width:50px;height:50px;border-radius:2px;background-color:#fbfbfb;text-align:center;cursor:pointer;margin:8px;display:inline-block;padding:15px 0;box-sizing:border-box;}
|
||||
.sku-table .layui-input-block .layui-form-radio {margin:6px 0px 0 0;padding:0;}
|
||||
.sku-table .layui-input-block .layui-form-radio>i {margin-right:3px;}
|
||||
.batch-operation-sku .batch-btn {display:flex}
|
||||
.batch-operation-sku .batch-btn input {margin-right:10px}
|
||||
.category-wrap {width:185px!important;display: inline-block}
|
||||
.el-input__inner {height:34px;line-height:34px;border-radius:2px;}
|
||||
.goods-class-name {display: inline-block;white-space: nowrap;background: #eee;color: #999;font-size: 12px;padding: 3px 5px; line-height: 1;border-radius: 4px;}
|
||||
.promotion-addon {display: flex;flex-wrap: wrap;}
|
||||
input.disabled{cursor: not-allowed;}
|
||||
</style>
|
||||
|
||||
<!-- 按钮容器 -->
|
||||
<div class="single-filter-box top">
|
||||
<button class="layui-btn" onclick="add()">添加商品</button>
|
||||
</div>
|
||||
<!-- 筛选面板 -->
|
||||
<div class="screen layui-collapse" lay-filter="selection_panel">
|
||||
<div class="layui-colla-item">
|
||||
<form class="layui-colla-content layui-form layui-show">
|
||||
<div class="layui-form-item">
|
||||
<div class="layui-inline">
|
||||
<label class="layui-form-label">商品名称</label>
|
||||
<div class="layui-input-inline">
|
||||
<input type="text" name="search_text" placeholder="请输入商品名称" autocomplete="off" class="layui-input">
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="layui-inline">
|
||||
<label class="layui-form-label">商品编码</label>
|
||||
<div class="layui-input-inline">
|
||||
<input type="text" name="sku_no" placeholder="请输入商品编码" autocomplete="off" class="layui-input">
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="layui-inline">
|
||||
<label class="layui-form-label">商品分类</label>
|
||||
<div class="layui-input-inline category-wrap">
|
||||
<input type="text" autocomplete="off" show="false" class="layui-input select-category" id="select_category" placeholder="请选择" readonly="" style="display: inline-block !important;">
|
||||
</div>
|
||||
<input type="text" name="category_id" style="width: 1px;height: 1px;visibility: hidden;">
|
||||
</div>
|
||||
<div class="layui-inline">
|
||||
<label class="layui-form-label">商品品牌</label>
|
||||
<div class="layui-input-inline">
|
||||
<select name="brand_id" lay-filter="brand_id">
|
||||
<option value="">全部</option>
|
||||
{foreach name="$brand_list" item="brand_vo"}
|
||||
<option value="{$brand_vo['brand_id']}">{$brand_vo['brand_name']}</option>
|
||||
{/foreach}
|
||||
</select>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
|
||||
<div class="layui-form-item">
|
||||
<div class="layui-inline">
|
||||
<label class="layui-form-label">商品类型</label>
|
||||
<div class="layui-input-inline">
|
||||
<select name="goods_class" lay-filter="goods_class">
|
||||
<option value="">全部</option>
|
||||
{foreach name="$goods_class" item="vo"}
|
||||
<option value="{$vo['goods_class']}">{$vo['goods_class_name']}</option>
|
||||
{/foreach}
|
||||
</select>
|
||||
</div>
|
||||
</div>
|
||||
<div class="layui-inline">
|
||||
<label class="layui-form-label">商品标签</label>
|
||||
<div class="layui-input-inline">
|
||||
<select name="label_id" lay-filter="label_id">
|
||||
<option value="">全部</option>
|
||||
{foreach name="$label_list" item="vo"}
|
||||
<option value="{$vo['id']}">{$vo['label_name']}</option>
|
||||
{/foreach}
|
||||
</select>
|
||||
</div>
|
||||
</div>
|
||||
<div class="layui-inline">
|
||||
<label class="layui-form-label">营销活动</label>
|
||||
<div class="layui-input-inline">
|
||||
<select name="promotion_type" lay-filter="promotion_type">
|
||||
<option value="">全部</option>
|
||||
{foreach name="$promotion_type" item="vo"}
|
||||
<option value="{$vo['type']}">{$vo['name']}</option>
|
||||
{/foreach}
|
||||
</select>
|
||||
</div>
|
||||
</div>
|
||||
{if $is_install_supply}
|
||||
<div class="layui-inline">
|
||||
<label class="layui-form-label">供应商</label>
|
||||
<div class="layui-input-inline">
|
||||
<select name="supplier_id">
|
||||
<option value="">全部</option>
|
||||
{foreach name="$supplier_list" item="vo"}
|
||||
<option value="{$vo['supplier_id']}">{$vo['title']}</option>
|
||||
{/foreach}
|
||||
</select>
|
||||
</div>
|
||||
</div>
|
||||
{/if}
|
||||
</div>
|
||||
|
||||
<div class="layui-form-item">
|
||||
<div class="layui-inline">
|
||||
<label class="layui-form-label">商品销量</label>
|
||||
<div class="layui-input-inline">
|
||||
<input type="number" name="start_sale" id="start_sale" lay-verify="int" placeholder="最低销量" class="layui-input" autocomplete="off">
|
||||
</div>
|
||||
<div class="layui-form-mid">-</div>
|
||||
<div class="layui-input-inline">
|
||||
<input type="number" name="end_sale" id="end_sale" lay-verify="int" placeholder="最高销量" class="layui-input" autocomplete="off">
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="layui-inline">
|
||||
<label class="layui-form-label">商品价格</label>
|
||||
<div class="layui-input-inline input-append">
|
||||
<input type="flaot" name="start_price" id="start_price" lay-verify="float" placeholder="最低价格" class="layui-input" autocomplete="off">
|
||||
</div>
|
||||
<div class="layui-form-mid">元</div>
|
||||
<div class="layui-form-mid">-</div>
|
||||
<div class="layui-input-inline input-append">
|
||||
<input type="flaot" name="end_price" id="end_price" lay-verify="float" placeholder="最高价格" class="layui-input" autocomplete="off">
|
||||
</div>
|
||||
<div class="layui-form-mid">元</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<input type="hidden" name="stockalarm" value="{$stockalarm}"/>
|
||||
<input type="hidden" name="goods_state" value="{$goods_state}"/>
|
||||
<div class="form-row">
|
||||
<button class="layui-btn" lay-submit lay-filter="search">筛选</button>
|
||||
<button type="reset" class="layui-btn layui-btn-primary">重置</button>
|
||||
<button class="layui-btn layui-btn-primary" lay-submit lay-filter="batch_export_goods">导出商品</button>
|
||||
<a class="layui-btn layui-btn-primary" href="{:href_url('shop/goods/export')}" target="_blank">导出记录</a>
|
||||
</div>
|
||||
</form>
|
||||
</div>
|
||||
</div>
|
||||
<div class="layui-tab table-tab" lay-filter="goods_list_tab">
|
||||
<ul class="layui-tab-title">
|
||||
<li {if $goods_state=='1' }class="layui-this" {/if} lay-id="1" data-type="goods_state">销售中</li>
|
||||
<li {if $goods_state=='0' }class="layui-this" {/if} lay-id="0" data-type="goods_state">仓库中</li>
|
||||
<li {if $stockalarm=='1' } class="layui-this" {/if} lay-id="1" data-type="stockalarm">预警中</li>
|
||||
<li {if $goods_state=='' && $stockalarm==0}class="layui-this" {/if} lay-id="">全部</li>
|
||||
</ul>
|
||||
<div class="layui-tab-content">
|
||||
<!-- 列表 -->
|
||||
<table id="goods_list" lay-filter="goods_list"></table>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- 商品信息 -->
|
||||
<script type="text/html" id="goods_info">
|
||||
<div class="table-title">
|
||||
<div class="contraction" data-goods-id="{{d.goods_id}}" data-open="0">
|
||||
<span>+</span>
|
||||
</div>
|
||||
<div class="title-pic" id="goods_img_{{d.goods_id}}" {if addon_is_exit('pc')} onclick="pc_url({{d.sku_id}})" {/if}>
|
||||
<!--layer-src="{{ns.img(d.goods_image.split(',')[0], 'big')}}" -->
|
||||
<img src="{{ns.img(d.goods_image.split(',')[0], 'small')}}"/>
|
||||
</div>
|
||||
{if addon_is_exit('pc')}
|
||||
<div class="title-content" onclick="pc_url({{d.sku_id}})">
|
||||
<a href="javascript:;" class="multi-line-hiding text-color-sub" title="{{d.goods_name}}">{{# if(d.supplier_name){ }}【{{d.supplier_name}}】{{# } }}{{d.goods_name}}</a>
|
||||
{else /}
|
||||
<div class="title-content">
|
||||
<a href="javascript:;" class="multi-line-hiding text-color-sub" title="{{d.goods_name}}" lay-event="preview">{{d.goods_name}}</a>
|
||||
{/if}
|
||||
<!-- <span class="goods-class-name">{{ d.goods_class_name }}</span>-->
|
||||
{{# if(d.promotion_addon && d.promotion_addon_list){ }}
|
||||
<span class="promotion-addon">
|
||||
{{# for(var i=0;i<d.promotion_addon_list.length;i++){ }}
|
||||
<a href="{{ns.url( d.promotion_addon_list[i].url )}}">
|
||||
<span class="bg-color" title="{{d.promotion_addon_list[i].name}}">{{ d.promotion_addon_list[i].short }}</span>
|
||||
</a>
|
||||
{{# } }}
|
||||
</span>
|
||||
{{# } }}
|
||||
{{# if(d.label_name){ }}
|
||||
<span class="promotion-addon" >
|
||||
<span class="bg-color" style="background:red !important;">{{d.label_name}}</span>
|
||||
</span>
|
||||
{{# } }}
|
||||
{{# if(d.is_consume_discount ==1){ }}
|
||||
<span class="promotion-addon vips_price" data-goods-id="{{d.goods_id}}" data-open="0">
|
||||
<span class="layui-bg-black " title="会员价"><span class="iconfont icon"> VIP</span></span>
|
||||
</span>
|
||||
{{# } }}
|
||||
{{# if(d.sku_no){ }}
|
||||
<div>
|
||||
<span>{{d.sku_no}}</span>
|
||||
</div>
|
||||
{{# } }}
|
||||
</div>
|
||||
|
||||
</div>
|
||||
</script>
|
||||
|
||||
<!-- 操作 -->
|
||||
<script type="text/html" id="operation">
|
||||
<div class="operation-wrap" data-goods-id="{{d.goods_id}}">
|
||||
<div class="popup-qrcode-wrap"><img class="popup-qrcode-loadimg" src="__STATIC__/loading/loading.gif"/></div>
|
||||
<div class="table-btn">
|
||||
<a class="layui-btn text-color" lay-event="edit">编辑</a>
|
||||
{{# if(d.goods_class == 2 || d.goods_class == 4){ }}
|
||||
<a class="layui-btn" lay-event="verify">核销码</a>
|
||||
{{# } }}
|
||||
{{# if(d.goods_class == 3){ }}
|
||||
<a class="layui-btn" lay-event="carmichael">卡密管理</a>
|
||||
{{# } }}
|
||||
|
||||
{if empty($stock_config) || (!empty($stock_config) && $stock_config.is_audit == 0) }
|
||||
{{# if(d.goods_class == 1 || d.goods_class == 2 || d.goods_class == 4 || d.goods_class == 5 || d.goods_class == 6){ }}
|
||||
<a class="layui-btn" lay-event="editStock">库存</a>
|
||||
{{# } }}
|
||||
{/if}
|
||||
|
||||
{if $memberprice_is_exit == 1}
|
||||
<a class="layui-btn" lay-event="member_price">会员价</a>
|
||||
{/if}
|
||||
{if $cardservice_is_exit == 1}
|
||||
{{# if(d.goods_class == 5){ }}
|
||||
<a class="layui-btn" lay-event="goods_card">卡项</a>
|
||||
{{# } }}
|
||||
{/if}
|
||||
<a class="layui-btn" lay-event="more">更多</a>
|
||||
<div class="more-operation">
|
||||
<a class="operation" lay-event="spread">推广</a>
|
||||
{{# if(d.goods_state == 1){ }}
|
||||
<!-- <a class="layui-btn" lay-event="preview">预览</a> -->
|
||||
<a class="operation" lay-event="off_goods">下架</a>
|
||||
{{# }else{ }}
|
||||
<a class="operation" lay-event="on_goods">上架</a>
|
||||
{{# } }}
|
||||
<a class="operation" lay-event="browse_records">浏览记录</a>
|
||||
<a class="operation" lay-event="evaluate">评论</a>
|
||||
<a class="operation" lay-event="copy">复制</a>
|
||||
<a class="operation" lay-event="delete">删除</a>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</script>
|
||||
|
||||
<!-- 批量操作 -->
|
||||
<script type="text/html" id="toolbarOperation">
|
||||
<button class="layui-btn layui-btn-primary" lay-event="delete">批量删除</button>
|
||||
<button class="layui-btn layui-btn-primary" lay-event="on_goods">批量上架</button>
|
||||
<button class="layui-btn layui-btn-primary" lay-event="off_goods">批量下架</button>
|
||||
<button class="layui-btn layui-btn-primary" lay-event="batch_set">批量设置</button>
|
||||
</script>
|
||||
|
||||
<!-- 批量操作 -->
|
||||
<script type="text/html" id="batchOperation">
|
||||
<button class="layui-btn layui-btn-primary" lay-event="delete">批量删除</button>
|
||||
<button class="layui-btn layui-btn-primary" lay-event="on_goods">批量上架</button>
|
||||
<button class="layui-btn layui-btn-primary" lay-event="off_goods">批量下架</button>
|
||||
<button class="layui-btn layui-btn-primary" lay-event="batch_set">批量设置</button>
|
||||
</script>
|
||||
|
||||
<!-- SKU商品列表 -->
|
||||
<script type="text/html" id="skuList">
|
||||
<tr class="js-sku-list-{{d.index}}" id="sku_img_{{d.index}}">
|
||||
<td></td>
|
||||
{{# if (d.member_price_is_exit == 1) { }}
|
||||
<td colspan="9">
|
||||
{{# } else { }}
|
||||
<td colspan="8">
|
||||
{{# } }}
|
||||
<ul class="sku-list">
|
||||
{{# for(var i=0;i<d.list.length;i++){ }}
|
||||
<li>
|
||||
<div class="img-wrap">
|
||||
<img layer-src="{{ns.img(d.list[i].sku_image, 'big')}}" src="{{ns.img(d.list[i].sku_image)}}">
|
||||
</div>
|
||||
<div class="info-wrap">
|
||||
<span class="sku-name">{{ d.list[i].spec_name ? d.list[i].spec_name : d.list[i].sku_name }}</span>
|
||||
<div>
|
||||
{{# if(d.list[i].stock_alarm> 0 && d.list[i].stock<=d.list[i].stock_alarm){ }}
|
||||
<span class="stock">库存:<label style="color:red;">{{d.list[i].stock}}(库存不足)</label></span>
|
||||
{{# }else{ }}
|
||||
<span class="stock">库存:{{d.list[i].stock}}</span>
|
||||
{{# } }}
|
||||
<span class="sale_num">销量:{{d.list[i].sale_num}}</span>
|
||||
</div>
|
||||
</div>
|
||||
<div class="prices">
|
||||
原价: ¥{{d.list[i].price}}
|
||||
{{# if (d.list[i].member_price_list) { }}
|
||||
{{# layui.each(d.list[i].member_price_list, function(index, item){ }}
|
||||
<p class="vip_price">{{ item.level_name }}: ¥{{ item.member_price }}</p>
|
||||
{{# }); }}
|
||||
{{# } }}
|
||||
</div>
|
||||
</li>
|
||||
|
||||
{{# } }}
|
||||
</ul>
|
||||
</td>
|
||||
</tr>
|
||||
</script>
|
||||
|
||||
<!-- 推广 -->
|
||||
{include file="app/shop/view/component/promote_show.html"}
|
||||
|
||||
<!-- 编辑排序 -->
|
||||
<script type="text/html" id="editSort">
|
||||
<input name="sort" type="number" onchange="editSort({{d.goods_id}}, this)" value="{{d.sort}}" class="layui-input edit-sort len-short">
|
||||
</script>
|
||||
|
||||
<!-- 编辑库存 -->
|
||||
<script type="text/html" id="editStock">
|
||||
<input name="sort" type="number" onchange="editSort({{d.goods_id}}, this)" value="{{d.sort}}" class="layui-input edit-sort len-short">
|
||||
</script>
|
||||
|
||||
<!-- 编辑库存html -->
|
||||
<script type="text/html" id="edit_stock">
|
||||
<div class="layui-form" id="edit_stock_block" lay-filter="form">
|
||||
<div class="layui-form-item batch-operation-sku">
|
||||
<label class="layui-form-label">批量操作:</label>
|
||||
<div class="layui-input-inline batch-btn">
|
||||
<span class="text-color" data-field="price" data-verify="price">销售价</span>
|
||||
<span class="text-color" data-field="market_price" data-verify="market_price">划线价</span>
|
||||
<span class="text-color" data-field="cost_price" data-verify="cost_price">成本价</span>
|
||||
<span class="text-color" data-field="stock" data-verify="stock">库存</span>
|
||||
{{# if(d.goods_class == 1){ }}
|
||||
<span class="text-color" data-field="weight" data-verify="weight">重量(kg)</span>
|
||||
<span class="text-color" data-field="volume" data-verify="volume">体积(m³)</span>
|
||||
{{# } }}
|
||||
|
||||
{{# if(d.goods_class == 2 && d.virtual_deliver_type == 'verify'){ }}
|
||||
<span class="text-color" data-field="verify_num" data-verify="verify_num">核销次数</span>
|
||||
{{# } }}
|
||||
|
||||
<span class="text-color" data-field="sku_no" data-verify="">商品编码</span>
|
||||
<input type="text" class="layui-input len-short batch-val" autocomplete="off" />
|
||||
<button class="layui-btn confirm" type="button">确定</button>
|
||||
<button class="layui-btn layui-btn-primary cancel" type="button">取消</button>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<table class="layui-table" lay-skin="line">
|
||||
<colgroup>
|
||||
<col width="16%">
|
||||
<col width="10%">
|
||||
<col width="10%">
|
||||
<col width="10%">
|
||||
<col width="10%">
|
||||
{{# if(d.goods_class == 1){ }}
|
||||
<col width="10%">
|
||||
<col width="10%">
|
||||
{{# } }}
|
||||
{{# if(d.goods_class == 2 && d.virtual_deliver_type == 'verify'){ }}
|
||||
<col width="10%">
|
||||
{{# } }}
|
||||
<col width="10%">
|
||||
</colgroup>
|
||||
<thead>
|
||||
<tr>
|
||||
<th>商品名称</th>
|
||||
<th>销售价</th>
|
||||
<th>划线价</th>
|
||||
<th>成本价</th>
|
||||
<th>库存</th>
|
||||
{{# if(d.goods_class == 1){ }}
|
||||
<th>重量(kg)</th>
|
||||
<th>体积(m³)</th>
|
||||
<th>起送限制(不限制则任意价格都可以配送)</th>
|
||||
{{# } }}
|
||||
{{# if(d.goods_class == 2 && d.virtual_deliver_type == 'verify'){ }}
|
||||
<th>核销次数</th>
|
||||
{{# } }}
|
||||
<th>商品编码(多个编码以英文逗号分割)</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody class="js-edit-sku-list-stock">
|
||||
{{# layui.each(d.sku_list, function(index, item){ }}
|
||||
<tr data-index="{{ index }}">
|
||||
<td><input type="hidden" name="sku_id" value="{{ item.sku_id }}" class="layui-input">{{ item.sku_name }}</td>
|
||||
<td><input type="number" name="price" value="{{ item.price }}" class="layui-input price" lay-verify="price"></td>
|
||||
<td><input type="number" name="market_price" value="{{ item.market_price }}" class="layui-input market_price" lay-verify="market_price"></td>
|
||||
<td><input type="number" name="cost_price" value="{{ item.cost_price }}" class="layui-input cost_price" lay-verify="cost_price"></td>
|
||||
<td><input type="number" name="stock" value="{{ item.stock }}" class="layui-input stock {{ item.goods_class == 3 ? 'disabled' : '' }}" lay-verify="goods_stock" {{ item.goods_class == 3 ? 'disabled' : '' }}></td>
|
||||
{{# if(d.goods_class == 1){ }}
|
||||
<td><input type="number" name="weight" value="{{ item.weight }}" class="layui-input weight" lay-verify="weight"></td>
|
||||
<td><input type="number" name="volume" value="{{ item.volume }}" class="layui-input volume" lay-verify="volume"></td>
|
||||
<td>
|
||||
<input type="checkbox" name="is_delivery_restrictions" id="is_delivery_restrictions_{{item.sku_id}}" lay-filter="is_delivery_restrictions" lay-skin="switch"
|
||||
{{# if(item.is_delivery_restrictions == 1) { }} checked {{# } }}
|
||||
>
|
||||
</td>
|
||||
{{# } }}
|
||||
{{# if(d.goods_class == 2 && d.virtual_deliver_type == 'verify'){ }}
|
||||
<td><input type="number" name="verify_num" value="{{ item.verify_num }}" class="layui-input verify_num" lay-verify="verify_num"></td>
|
||||
{{# } }}
|
||||
<td><input type="text" name="sku_no" value="{{ item.sku_no }}" class="layui-input sku_no"></td>
|
||||
</tr>
|
||||
{{# }); }}
|
||||
</tbody>
|
||||
</table>
|
||||
<input type="hidden" name="goods_id" value="{{ d.goods_id }}"/>
|
||||
<div class="form-row">
|
||||
<button class="layui-btn" lay-submit lay-filter="edit_stock">确定</button>
|
||||
<button class="layui-btn layui-btn-primary" onclick="closeStock()">返回</button>
|
||||
</div>
|
||||
</div>
|
||||
</script>
|
||||
|
||||
<!-- 批量操作 -->
|
||||
<script type="text/html" id="batchSet">
|
||||
<div class="batch-set-wrap">
|
||||
<div class="tips">每次仅能设置一项,点击保存成功之后生效</div>
|
||||
<div class="set-wrap">
|
||||
<div class="tab-wrap">
|
||||
<ul>
|
||||
<li class="active" data-type="group">商品标签</li>
|
||||
<li data-type="service">商品服务</li>
|
||||
<li data-type="sale">虚拟销量</li>
|
||||
<li data-type="purchase_limit">商品限购</li>
|
||||
<li data-type="shipping">配送设置</li>
|
||||
<li data-type="category">商品分类</li>
|
||||
{if $memberprice_is_exit == 1}
|
||||
<li data-type="member_price">会员价</li>
|
||||
{/if}
|
||||
{if empty($stock_config) || (!empty($stock_config) && $stock_config['is_audit'] == 0) }
|
||||
<li data-type="stock">库存设置</li>
|
||||
{/if}
|
||||
<li data-type="price">修改价格</li>
|
||||
{if $form_is_exit == 1}
|
||||
<li data-type="goods_form">商品表单</li>
|
||||
{/if}
|
||||
<li data-type="goods_brand">商品品牌</li>
|
||||
</ul>
|
||||
</div>
|
||||
<div class="content-wrap">
|
||||
|
||||
<div class="tab-item tab-show group">
|
||||
<div class="layui-form">
|
||||
<div class="layui-form-item">
|
||||
<label class="layui-form-label">商品标签:</label>
|
||||
<div class="layui-input-inline">
|
||||
<select name="batch_goods_label" lay-search="">
|
||||
<option value="0">请选择商品标签</option>
|
||||
{foreach name="$label_list" item="vo"}
|
||||
<option value="{$vo['id']}">{$vo['label_name']}</option>
|
||||
{/foreach}
|
||||
</select>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="tab-item service">
|
||||
<div class="layui-form">
|
||||
<div class="layui-form-item">
|
||||
<label class="layui-form-label">商品服务:</label>
|
||||
<div class="layui-input-block">
|
||||
{foreach name="$service_list" item="vo"}
|
||||
<input type="checkbox" name="batch_goods_service" value="{$vo.id}" title="{$vo.service_name}" lay-skin="primary">
|
||||
{/foreach}
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="tab-item sale">
|
||||
<div class="layui-form">
|
||||
<div class="layui-form-item">
|
||||
<label class="layui-form-label">已售出数:</label>
|
||||
<div class="layui-input-block">
|
||||
<input type="number" name="batch_virtual_sale" placeholder="0" value="0" lay-verify="virtual_sale" class="layui-input len-short" autocomplete="off">
|
||||
<div class="layui-form-mid">/件</div>
|
||||
</div>
|
||||
<div class="word-aux">该设置不计入商品统计数据</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="tab-item purchase_limit">
|
||||
<div class="layui-form">
|
||||
<div class="layui-form-item">
|
||||
<label class="layui-form-label">商品限购:</label>
|
||||
<div class="layui-input-block">
|
||||
<input type="number" name="batch_max_buy" value="0" lay-verify="max_buy" class="layui-input len-short" autocomplete="off">
|
||||
<div class="layui-form-mid">/件</div>
|
||||
</div>
|
||||
<div class="word-aux">该限购为终身限购,0为不限购</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="tab-item shipping">
|
||||
<div class="layui-form">
|
||||
<div class="layui-form-item">
|
||||
<label class="layui-form-label">配送方式:</label>
|
||||
<div class="layui-input-block">
|
||||
{notempty name="$express_type"}
|
||||
{foreach name="$express_type" item="vo" key="key"}
|
||||
<input type="checkbox" name="support_trade_type" value="{$key}" title="{$vo.name}" lay-skin="primary" checked lay-filter="support_trade_type">
|
||||
{/foreach}
|
||||
{else/}
|
||||
<a href="{:href_url('shop/delivery/express')}" class="text-color">未配置配送方式,请先配置配送方式</a>
|
||||
{/notempty}
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="support_trade_type_express">
|
||||
<div class="layui-form-item">
|
||||
<label class="layui-form-label">是否包邮:</label>
|
||||
<div class="layui-input-block">
|
||||
<div class="layui-input-inline">
|
||||
<input type="radio" name="is_free_shipping" value="1" title="是" lay-filter="is_free_shipping">
|
||||
<input type="radio" name="is_free_shipping" value="0" title="否" checked lay-filter="is_free_shipping">
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="layui-form-item hide shipping_template">
|
||||
<label class="layui-form-label">运费模板:</label>
|
||||
<div class="layui-input-inline">
|
||||
<select name="batch_shipping_template" lay-search="">
|
||||
<option value="0">请选择运费模板</option>
|
||||
{foreach name="$express_template_list" item="vo"}
|
||||
<option value="{$vo['template_id']}">{$vo['template_name']}</option>
|
||||
{/foreach}
|
||||
</select>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="word-aux">该设置仅对实物商品有效</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="tab-item category">
|
||||
<div class="layui-form-item">
|
||||
<label class="layui-form-label goods-category-css"><span class="required">*</span>商品分类:</label>
|
||||
<div class="layui-input-block goods-cate">
|
||||
<div class="layui-block first">
|
||||
<div class="category-wrap">
|
||||
<input type="text" readonly lay-verify="required" autocomplete="off" class="layui-input select-category"/>
|
||||
<input type="hidden" class="category_id"/>
|
||||
</div>
|
||||
<a href="javascript:;" class="text-color goods-list-js-add-category">添加分类</a>
|
||||
</div>
|
||||
</div>
|
||||
<div class="word-aux">商品可以属于多个分类,最多10个</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="tab-item member_price">
|
||||
<div class="layui-form">
|
||||
<div class="layui-form-item">
|
||||
<label class="layui-form-label">是否参与:</label>
|
||||
<div class="layui-input-inline">
|
||||
<input type="radio" name="is_consume_discount" value="0" title="不参与" checked>
|
||||
<input type="radio" name="is_consume_discount" value="1" title="参与">
|
||||
</div>
|
||||
</div>
|
||||
<div class="word-aux">批量设置参与会员等级折扣的商品,如果之前未单独配置过优惠规则,则按照默认会员等级折扣优惠</div>
|
||||
</div>
|
||||
</div>
|
||||
{if empty($stock_config) || (!empty($stock_config) && $stock_config.is_audit == 0) }
|
||||
<div class="tab-item stock">
|
||||
<div class="layui-form">
|
||||
<div class="layui-form-item">
|
||||
<label class="layui-form-label">修改库存:</label>
|
||||
<div class="layui-input-inline">
|
||||
<input type="radio" name="stock_type" value="inc" title="添加库存" checked>
|
||||
<input type="radio" name="stock_type" value="dec" title="减少库存">
|
||||
</div>
|
||||
</div>
|
||||
<div class="layui-form-item">
|
||||
<label class="layui-form-label">目标数值:</label>
|
||||
<div class="layui-input-block">
|
||||
<input type="number" name="stock_num" placeholder="0" value="0" class="layui-input len-short" autocomplete="off" onblur="stockinput(this)">
|
||||
</div>
|
||||
</div>
|
||||
<div class="word-aux">批量调整商品库存,该操作不会改变电子卡密的库存</div>
|
||||
</div>
|
||||
</div>
|
||||
{/if}
|
||||
<div class="tab-item price">
|
||||
<div class="layui-form">
|
||||
<div class="layui-form-item">
|
||||
<label class="layui-form-label">计算方式:</label>
|
||||
<div class="layui-input-inline">
|
||||
<input type="radio" name="type" lay-filter="type" value="money" title="固定金额" checked>
|
||||
<input type="radio" name="type" lay-filter="type" value="calculate" title="公式计算">
|
||||
</div>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
<div class="layui-form">
|
||||
<div class="layui-form-item">
|
||||
<label class="layui-form-label"></label>
|
||||
<div class="layui-input-block">
|
||||
<div class="layui-input-inline" style="width:84px;">
|
||||
<select name="price_type" lay-verify="required">
|
||||
<option value="sale">销售价</option>
|
||||
<option value="market">划线价</option>
|
||||
<option value="cost">成本价</option>
|
||||
</select>
|
||||
</div>
|
||||
<div class="layui-input-inline">=</div>
|
||||
|
||||
<div class="layui-input-inline price-calculate-block" style="display:none;">
|
||||
<div class="layui-input-inline" style="width:84px;">
|
||||
<select name="calculate_price_type" lay-verify="required">
|
||||
<option value="sale">销售价</option>
|
||||
<option value="market">划线价</option>
|
||||
<option value="cost">成本价</option>
|
||||
</select>
|
||||
</div>
|
||||
<div class="layui-input-inline" style="width:50px;">
|
||||
<select name="sign" lay-filter="sign" lay-verify="required">
|
||||
<option value="add">+</option>
|
||||
<option value="subtract">-</option>
|
||||
<option value="multiply">x</option>
|
||||
<option value="division">÷</option>
|
||||
</select>
|
||||
</div>
|
||||
</div>
|
||||
<div class="layui-input-inline len-short">
|
||||
<input type="number" name="price" autocomplete="off" class="layui-input"/>
|
||||
</div>
|
||||
<div class="layui-input-inline price-unit money-price-unit">元</div>
|
||||
<div class="layui-input-inline price-unit calculate-price-unit" style="display:none;">元</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="layui-form precise-block" style="display:none;">
|
||||
<div class="layui-form-item">
|
||||
<label class="layui-form-label">计算精度:</label>
|
||||
<div class="layui-input-block">
|
||||
<div class="layui-input-inline">
|
||||
<input type="radio" name="precise" lay-filter="precise" value="1" title="全部保留" checked>
|
||||
<input type="radio" name="precise" lay-filter="precise" value="2" title="抹分" >
|
||||
<input type="radio" name="precise" lay-filter="precise" value="3" title="抹角" >
|
||||
<input type="radio" name="precise" lay-filter="precise" value="4" title="四舍五入到分" >
|
||||
<input type="radio" name="precise" lay-filter="precise" value="5" title="四舍五入到角" >
|
||||
<input type="radio" name="precise" lay-filter="precise" value="6" title="四舍五入到元" >
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
{if $form_is_exit == 1}
|
||||
<div class="tab-item goods_form">
|
||||
<div class="layui-form">
|
||||
<div class="layui-form-item">
|
||||
<label class="layui-form-label">商品表单:</label>
|
||||
<div class="layui-input-block">
|
||||
<div class="layui-input-inline">
|
||||
<select name="batch_goods_form" lay-search="">
|
||||
<option value="0">请选择商品表单</option>
|
||||
{foreach name="$form_list" item="vo"}
|
||||
<option value="{$vo['id']}">{$vo['form_name']}</option>
|
||||
{/foreach}
|
||||
</select>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
{/if}
|
||||
<div class="tab-item goods_brand">
|
||||
<div class="layui-form">
|
||||
<div class="layui-form-item">
|
||||
<label class="layui-form-label">商品品牌:</label>
|
||||
<div class="layui-input-inline">
|
||||
<select name="batch_goods_brand" lay-search="">
|
||||
<option value="0">请选择商品品牌</option>
|
||||
{foreach name="$brand_list" item="vo"}
|
||||
<option value="{$vo['brand_id']}">{$vo['brand_name']}</option>
|
||||
{/foreach}
|
||||
</select>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="tab-item result">
|
||||
<img src="SHOP_IMG/success.png">
|
||||
<div class="text">设置成功</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="footer-wrap">
|
||||
<button class="layui-btn layui-btn-primary" onclick="layer.closeAll()">取消</button>
|
||||
<button class="layui-btn" onclick="batchSetting()">保存</button>
|
||||
</div>
|
||||
</div>
|
||||
</script>
|
||||
|
||||
<!--选择商品分类-->
|
||||
<script type="text/html" id="selectedCategory">
|
||||
<div class="category-list">
|
||||
|
||||
<div class="item">
|
||||
<!--后续做搜索-->
|
||||
<ul>
|
||||
{foreach name="$goods_category_list" item="vo"}
|
||||
{{# if(d.category_id_1 == '{$vo['category_id']}' ){ }}
|
||||
<li data-category-id="{$vo['category_id']}" data-commission-rate="{$vo['commission_rate']}" data-level="{$vo['level']}" class="selected">
|
||||
{{# }else{ }}
|
||||
<li data-category-id="{$vo['category_id']}" data-commission-rate="{$vo['commission_rate']}" data-level="{$vo['level']}">
|
||||
{{# } }}
|
||||
<span class="category-name">{$vo['category_name']}</span>
|
||||
<span class="right-arrow">></span>
|
||||
</li>
|
||||
{/foreach}
|
||||
</ul>
|
||||
</div>
|
||||
|
||||
<div class="item" data-level="2">
|
||||
<!--后续做搜索-->
|
||||
<ul></ul>
|
||||
</div>
|
||||
|
||||
<div class="item" data-level="3">
|
||||
<!--后续做搜索-->
|
||||
<ul></ul>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
|
||||
<div class="selected-category-wrap">
|
||||
<label>您当前选择的是:</label>
|
||||
<span class="js-selected-category"></span>
|
||||
</div>
|
||||
</script>
|
||||
|
||||
<script>
|
||||
var member_price_is_exit = "{$memberprice_is_exit}";
|
||||
var goods_sort = '{$goods_sort}';
|
||||
var pc_domain = '{$pc_domain}';
|
||||
var goods_class = {:json_encode($goods_class)};
|
||||
var stockConfig = {:json_encode($stock_config)};
|
||||
</script>
|
||||
<script src="SHOP_JS/category_select.js?time=20240821"></script>
|
||||
<script src="SHOP_JS/goods_list.js?time=20250111"></script>
|
||||
<script type="text/javascript" charset="utf-8" src="__STATIC__/ext/ueditor/ueditor.config.js"></script>
|
||||
<script type="text/javascript" charset="utf-8" src="__STATIC__/ext/ueditor/ueditor.all.js"></script>
|
||||
<script type="text/javascript" charset="utf-8" src="__STATIC__/ext/ueditor/lang/zh-cn/zh-cn.js"></script>
|
||||
102
app/shop/view/goods/member_goods_browse.html
Executable file
102
app/shop/view/goods/member_goods_browse.html
Executable file
@@ -0,0 +1,102 @@
|
||||
<!-- 搜索框 -->
|
||||
<div class="single-filter-box" style="margin:15px 0;">
|
||||
|
||||
<div class="layui-form">
|
||||
<div class="layui-input-inline">
|
||||
<input type="text" name="search" placeholder="请输入商品名称" class="layui-input" autocomplete="off">
|
||||
<button type="button" class="layui-btn layui-btn-primary" lay-filter="goods_browse_search" lay-submit>
|
||||
<i class="layui-icon"></i>
|
||||
</button>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- 列表 -->
|
||||
<table id="goods_browse_list" lay-filter="goods_browse_list"></table>
|
||||
|
||||
<!-- 商品 -->
|
||||
<script type="text/html" id="goodsBrowseInfo">
|
||||
<div class="table-title">
|
||||
<div class="title-pic">
|
||||
{{# if(d.sku_image){ }}
|
||||
<img layer-src src="{{ns.img(d.sku_image.split(',')[0],'small')}}"/>
|
||||
{{# } }}
|
||||
</div>
|
||||
<div class="title-content">
|
||||
<a href="javascript:;" class="multi-line-hiding text-color-sub">{{d.sku_name}}</a>
|
||||
</div>
|
||||
</div>
|
||||
</script>
|
||||
<script>
|
||||
var form, goods_browse_table, laytpl;
|
||||
layui.use(['form', 'laytpl'], function () {
|
||||
form = layui.form;
|
||||
laytpl = layui.laytpl;
|
||||
form.render();
|
||||
|
||||
goods_browse_table = new Table({
|
||||
elem: '#goods_browse_list',
|
||||
url: '{:addon_url("shop/goods/membergoodsbrowse")}',
|
||||
async: false,
|
||||
where: {'member_id': "{$member_id}"},
|
||||
parseData: function (res) {
|
||||
return {
|
||||
"code": res.code,
|
||||
"msg": res.message,
|
||||
"count": res.data.count,
|
||||
"data": res.data.list,
|
||||
};
|
||||
},
|
||||
cols: [
|
||||
[{
|
||||
title: '商品',
|
||||
unresize: 'false',
|
||||
width: '30%',
|
||||
templet: '#goodsBrowseInfo'
|
||||
}, {
|
||||
field: 'price',
|
||||
title: '商品价格',
|
||||
unresize: 'false',
|
||||
width: '10%',
|
||||
align: 'left',
|
||||
templet: function (data) {
|
||||
return '¥<span class="goods-price">' + data.price + '</span>'
|
||||
}
|
||||
}, {
|
||||
title: '商品状态',
|
||||
unresize: 'false',
|
||||
width: '10%',
|
||||
align: 'left',
|
||||
templet: function (data) {
|
||||
return data.goods_state == 1 ? '正常' : '下架';
|
||||
}
|
||||
}, {
|
||||
title: '浏览量',
|
||||
unresize: 'false',
|
||||
width: '10%',
|
||||
align: 'left',
|
||||
templet: function (data) {
|
||||
return data.click_num;
|
||||
}
|
||||
}, {
|
||||
title: '浏览时间',
|
||||
unresize: 'false',
|
||||
width: '20%',
|
||||
align: 'left',
|
||||
templet: function (data) {
|
||||
return ns.time_to_date(data.browse_time);
|
||||
}
|
||||
}]
|
||||
]
|
||||
});
|
||||
|
||||
form.on('submit(goods_browse_search)', function (data) {
|
||||
goods_browse_table.reload({
|
||||
page: {
|
||||
curr: 1
|
||||
},
|
||||
where: data.field
|
||||
});
|
||||
});
|
||||
});
|
||||
</script>
|
||||
106
app/shop/view/goods/member_goods_collect.html
Executable file
106
app/shop/view/goods/member_goods_collect.html
Executable file
@@ -0,0 +1,106 @@
|
||||
<!-- 搜索框 -->
|
||||
<div class="single-filter-box" style="margin:15px 0;">
|
||||
|
||||
<div class="layui-form">
|
||||
<div class="layui-input-inline">
|
||||
<input type="text" name="search" placeholder="请输入商品名称" class="layui-input" autocomplete="off">
|
||||
<button type="button" class="layui-btn layui-btn-primary" lay-filter="goods_collect_search" lay-submit>
|
||||
<i class="layui-icon"></i>
|
||||
</button>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- 列表 -->
|
||||
<table id="goods_collect_list" lay-filter="goods_collect_list"></table>
|
||||
|
||||
<!-- 商品 -->
|
||||
<script type="text/html" id="goodsCollectInfo">
|
||||
<div class="table-title">
|
||||
<div class="title-pic">
|
||||
{{# if(d.sku_image){ }}
|
||||
<img layer-src src="{{ns.img(d.sku_image.split(',')[0],'small')}}"/>
|
||||
{{# } }}
|
||||
</div>
|
||||
<div class="title-content">
|
||||
<a href="javascript:;" class="multi-line-hiding text-color-sub">{{d.sku_name}}</a>
|
||||
</div>
|
||||
</div>
|
||||
</script>
|
||||
<script>
|
||||
var form, goods_collect_table, laytpl;
|
||||
|
||||
layui.use(['form', 'laytpl'], function () {
|
||||
form = layui.form;
|
||||
laytpl = layui.laytpl;
|
||||
form.render();
|
||||
|
||||
goods_collect_table = new Table({
|
||||
elem: '#goods_collect_list',
|
||||
url: '{:addon_url("shop/goods/membergoodscollect")}',
|
||||
async: false,
|
||||
where: {'member_id': "{$member_id}"},
|
||||
parseData: function (res) {
|
||||
return {
|
||||
"code": res.code,
|
||||
"msg": res.message,
|
||||
"count": res.data.count,
|
||||
"data": res.data.list,
|
||||
};
|
||||
},
|
||||
cols: [
|
||||
[{
|
||||
title: '商品',
|
||||
unresize: 'false',
|
||||
width: '30%',
|
||||
templet: '#goodsCollectInfo'
|
||||
}, {
|
||||
field: 'price',
|
||||
title: '商品价格',
|
||||
unresize: 'false',
|
||||
width: '10%',
|
||||
align: 'left',
|
||||
templet: function (data) {
|
||||
return '¥<span class="goods-price">' + data.price + '</span>'
|
||||
}
|
||||
}, {
|
||||
title: '商品状态',
|
||||
unresize: 'false',
|
||||
width: '10%',
|
||||
align: 'left',
|
||||
templet: function (data) {
|
||||
return data.goods_state == 1 ? '正常' : '下架';
|
||||
}
|
||||
}, {
|
||||
title: '收藏量',
|
||||
unresize: 'false',
|
||||
width: '10%',
|
||||
align: 'left',
|
||||
templet: function (data) {
|
||||
return data.collect_num;
|
||||
}
|
||||
}, {
|
||||
title: '收藏时间',
|
||||
unresize: 'false',
|
||||
width: '20%',
|
||||
align: 'left',
|
||||
templet: function (data) {
|
||||
return ns.time_to_date(data.create_time);
|
||||
}
|
||||
}]
|
||||
]
|
||||
});
|
||||
|
||||
/**
|
||||
* 搜索功能
|
||||
*/
|
||||
form.on('submit(goods_collect_search)', function (data) {
|
||||
goods_collect_table.reload({
|
||||
page: {
|
||||
curr: 1
|
||||
},
|
||||
where: data.field
|
||||
});
|
||||
});
|
||||
});
|
||||
</script>
|
||||
381
app/shop/view/goods/recycle.html
Executable file
381
app/shop/view/goods/recycle.html
Executable file
@@ -0,0 +1,381 @@
|
||||
<link rel="stylesheet" type="text/css" href="__STATIC__/ext/layui/extend/cascader/cascader.css"/>
|
||||
<style>
|
||||
.contraction{display: inline-block;margin-right: 5px;}
|
||||
.contraction span{cursor: pointer;display: inline-block;width: 17px;height: 17px;text-align: center;line-height: 14px;user-select: none;}
|
||||
.sku-list{overflow: hidden;padding: 0 45px;}
|
||||
.sku-list li{float: left;display: flex;padding: 10px;margin-right: 10px;margin-bottom: 10px;border: 1px solid #EFEFEF;width: 294px;height: 140px;align-items: center;}
|
||||
.sku-list li .img-wrap{vertical-align: middle;margin-right: 8px;width: 120px;height: 120px;text-align: center;line-height: 120px;}
|
||||
.sku-list li .img-wrap img{max-width: 100%;max-height: 100%;}
|
||||
.sku-list li .info-wrap span{display: -webkit-box;margin-bottom: 5px;overflow: hidden;text-overflow: ellipsis;white-space: normal;word-break: break-all;-webkit-box-orient: vertical;-webkit-line-clamp: 1;}
|
||||
.sku-list li .info-wrap span.sku-name{-webkit-line-clamp: 2;margin-bottom: 5px;}
|
||||
.sku-list li .info-wrap span:last-child{margin-bottom: 0;}
|
||||
.category-wrap {width:185px!important;display: inline-block}
|
||||
.el-input__inner {height:34px;line-height:34px;border-radius:2px;}
|
||||
</style>
|
||||
|
||||
<!-- 筛选面板 -->
|
||||
<div class="screen layui-collapse" lay-filter="selection_panel">
|
||||
<div class="layui-colla-item">
|
||||
<form class="layui-colla-content layui-form layui-show">
|
||||
<div class="layui-form-item">
|
||||
<div class="layui-inline">
|
||||
<label class="layui-form-label">商品名称</label>
|
||||
<div class="layui-input-inline">
|
||||
<input type="text" name="search_text" placeholder="请输入商品名称" autocomplete="off" class="layui-input">
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="layui-inline">
|
||||
<label class="layui-form-label">商品分类</label>
|
||||
<div class="layui-input-inline category-wrap">
|
||||
<input type="text" autocomplete="off" show="false" class="layui-input select-category" placeholder="请选择" readonly="">
|
||||
<input type="hidden" name="category_id">
|
||||
</div>
|
||||
</div>
|
||||
<div class="layui-inline">
|
||||
<label class="layui-form-label">商品类型</label>
|
||||
<div class="layui-input-inline">
|
||||
<select name="goods_class" lay-filter="goods_class">
|
||||
<option value="">全部</option>
|
||||
<option value="1">实物商品</option>
|
||||
<option value="2">虚拟商品</option>
|
||||
{if $virtualcard_exit}<option value="3">电子卡密</option>{/if}
|
||||
</select>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-row">
|
||||
<button class="layui-btn" lay-submit lay-filter="search">筛选</button>
|
||||
<button type="reset" class="layui-btn layui-btn-primary">重置</button>
|
||||
</div>
|
||||
</form>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- 列表 -->
|
||||
<table id="goods_list" lay-filter="goods_list"></table>
|
||||
|
||||
<!-- 商品信息 -->
|
||||
<script type="text/html" id="goods_info">
|
||||
<div class="table-title">
|
||||
<div class="contraction" data-goods-id="{{d.goods_id}}" data-open="0">
|
||||
<span>+</span>
|
||||
</div>
|
||||
<div class="title-pic">
|
||||
<img layer-src="{{ns.img(d.goods_image.split(',')[0], 'big')}}" src="{{ns.img(d.goods_image.split(',')[0], 'small')}}"/>
|
||||
</div>
|
||||
<div class="title-content">
|
||||
<a href="javascript:;" class="multi-line-hiding text-color-sub" title="{{d.goods_name}}">{{d.goods_name}}</a>
|
||||
</div>
|
||||
</div>
|
||||
</script>
|
||||
|
||||
<!-- 操作 -->
|
||||
<script type="text/html" id="operation">
|
||||
<div class="table-btn">
|
||||
<a class="layui-btn" lay-event="delete">删除</a>
|
||||
<a class="layui-btn" lay-event="recovery">恢复</a>
|
||||
</div>
|
||||
</script>
|
||||
|
||||
<!-- 批量操作 -->
|
||||
<script type="text/html" id="toolbarOperation">
|
||||
<button class="layui-btn layui-btn-primary" lay-event="delete">批量删除</button>
|
||||
<button class="layui-btn layui-btn-primary" lay-event="recovery">恢复</button>
|
||||
</script>
|
||||
|
||||
<!-- 批量操作 -->
|
||||
<script type="text/html" id="batchOperation">
|
||||
<button class="layui-btn layui-btn-primary" lay-event="delete">批量删除</button>
|
||||
<button class="layui-btn layui-btn-primary" lay-event="recovery">恢复</button>
|
||||
</script>
|
||||
|
||||
<!-- SKU商品列表 -->
|
||||
<script type="text/html" id="skuList">
|
||||
<tr class="js-sku-list-{{d.index}}">
|
||||
<td></td>
|
||||
<td colspan="8">
|
||||
<ul class="sku-list">
|
||||
{{# for(var i=0;i<d.list.length;i++){ }}
|
||||
<li>
|
||||
<div class="img-wrap">
|
||||
<img src="{{ns.img(d.list[i].sku_image, 'small')}}">
|
||||
</div>
|
||||
<div class="info-wrap">
|
||||
<span class="sku-name">{{d.list[i].sku_name}}</span>
|
||||
<span class="price">价格:¥{{d.list[i].price}}</span>
|
||||
<span class="stock">库存:{{d.list[i].stock}}</span>
|
||||
<span class="sale_num">销量:{{d.list[i].sale_num}}</span>
|
||||
</div>
|
||||
</li>
|
||||
{{# } }}
|
||||
</ul>
|
||||
</td>
|
||||
</tr>
|
||||
</script>
|
||||
|
||||
<script>
|
||||
var laytpl, layCascader;
|
||||
$(function () {
|
||||
$("body").off("click", ".contraction").on("click", ".contraction",function () {
|
||||
var goods_id = $(this).attr("data-goods-id");
|
||||
var open = $(this).attr("data-open");
|
||||
var tr = $(this).parent().parent().parent().parent();
|
||||
var index = tr.attr("data-index");
|
||||
|
||||
if(open == 1){
|
||||
$(this).children("span").text("+");
|
||||
$(".js-sku-list-"+index).remove();
|
||||
}else{
|
||||
$(this).children("span").text("-");
|
||||
$.ajax({
|
||||
url: ns.url("shop/goods/getGoodsSkuList"),
|
||||
data: {goods_id:goods_id},
|
||||
dataType: 'JSON',
|
||||
type: 'POST',
|
||||
async: false,
|
||||
success: function (res) {
|
||||
var list = res.data;
|
||||
var sku_list = $("#skuList").html();
|
||||
var data ={
|
||||
list : list,
|
||||
index : index
|
||||
};
|
||||
laytpl(sku_list).render(data, function(html) {
|
||||
tr.after(html);
|
||||
});
|
||||
|
||||
}
|
||||
});
|
||||
}
|
||||
$(this).attr("data-open",(open == 0 ? 1 : 0));
|
||||
|
||||
})
|
||||
});
|
||||
layui.use(['form','laytpl', 'layCascader'], function () {
|
||||
var form = layui.form,
|
||||
repeat_flag = false; //防重复标识
|
||||
|
||||
laytpl = layui.laytpl;
|
||||
layCascader = layui.layCascader;
|
||||
|
||||
form.render();
|
||||
var table = new Table({
|
||||
elem: '#goods_list',
|
||||
url: ns.url("shop/goods/recycle"),
|
||||
cols: [
|
||||
[
|
||||
{
|
||||
type: 'checkbox',
|
||||
unresize: 'false',
|
||||
width: '3%'
|
||||
},
|
||||
{
|
||||
title: '商品信息',
|
||||
unresize: 'false',
|
||||
width: '39%',
|
||||
templet: '#goods_info'
|
||||
},
|
||||
{
|
||||
field: 'price',
|
||||
title: '价格',
|
||||
unresize: 'false',
|
||||
width: '6%',
|
||||
align: 'right',
|
||||
templet: function(data) {
|
||||
return '¥'+ data.price;
|
||||
}
|
||||
},
|
||||
{
|
||||
unresize: 'false',
|
||||
width: '2%'
|
||||
},
|
||||
{
|
||||
field: 'goods_stock',
|
||||
title: '库存',
|
||||
unresize: 'false',
|
||||
width: '8%'
|
||||
},
|
||||
{
|
||||
field: 'sale_num',
|
||||
title: '销量',
|
||||
unresize: 'false',
|
||||
width: '7%'
|
||||
},
|
||||
{
|
||||
title: '商品状态',
|
||||
unresize: 'false',
|
||||
width: '8%',
|
||||
templet: function (data) {
|
||||
var str = '';
|
||||
if (data.goods_state == 1) {
|
||||
str = '正常';
|
||||
} else if (data.goods_state == 0) {
|
||||
str = '下架';
|
||||
}
|
||||
return str;
|
||||
}
|
||||
},
|
||||
{
|
||||
title: '创建时间',
|
||||
unresize: 'false',
|
||||
width: '15%',
|
||||
templet: function (data) {
|
||||
return ns.time_to_date(data.create_time);
|
||||
}
|
||||
},
|
||||
{
|
||||
title: '操作',
|
||||
toolbar: '#operation',
|
||||
unresize: 'false',
|
||||
align : 'right'
|
||||
}
|
||||
]
|
||||
],
|
||||
toolbar: '#toolbarOperation',
|
||||
bottomToolbar: "#batchOperation"
|
||||
});
|
||||
|
||||
/**
|
||||
* 监听工具栏操作
|
||||
*/
|
||||
table.tool(function (obj) {
|
||||
var data = obj.data;
|
||||
switch (obj.event) {
|
||||
case 'delete':
|
||||
//删除
|
||||
deleteRecycleGoods(data.goods_id);
|
||||
break;
|
||||
case 'recovery':
|
||||
//恢复
|
||||
recoveryRecycle(data.goods_id);
|
||||
break;
|
||||
}
|
||||
});
|
||||
|
||||
/**
|
||||
* 删除
|
||||
*/
|
||||
function deleteRecycleGoods(goods_ids) {
|
||||
layer.confirm('确定要删除该商品吗?', function (index) {
|
||||
if (repeat_flag) return;
|
||||
repeat_flag = true;
|
||||
layer.close(index);
|
||||
|
||||
$.ajax({
|
||||
url: ns.url("shop/goods/deleteRecycleGoods"),
|
||||
data: {goods_ids : goods_ids.toString()},
|
||||
dataType: 'JSON',
|
||||
type: 'POST',
|
||||
success: function (res) {
|
||||
repeat_flag = false;
|
||||
if (res.code == 0) {
|
||||
table.reload();
|
||||
layer.msg(res.data.cannot_delete_reasons || res.message);
|
||||
}else{
|
||||
layer.msg(res.message);
|
||||
}
|
||||
}
|
||||
});
|
||||
});
|
||||
}
|
||||
|
||||
//商品恢复
|
||||
function recoveryRecycle(goods_ids) {
|
||||
|
||||
if (repeat_flag) return;
|
||||
repeat_flag = true;
|
||||
|
||||
$.ajax({
|
||||
url: ns.url("shop/goods/recoveryRecycle"),
|
||||
data: {goods_ids: goods_ids.toString()},
|
||||
dataType: 'JSON',
|
||||
type: 'POST',
|
||||
success: function (res) {
|
||||
layer.msg(res.message);
|
||||
repeat_flag = false;
|
||||
if (res.code == 0) {
|
||||
table.reload();
|
||||
}
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
* 批量操作
|
||||
*/
|
||||
table.bottomToolbar(function (obj) {
|
||||
|
||||
if (obj.data.length < 1) {
|
||||
layer.msg('请选择要操作的数据');
|
||||
return;
|
||||
}
|
||||
var id_array = new Array();
|
||||
for (i in obj.data) id_array.push(obj.data[i].goods_id);
|
||||
switch (obj.event) {
|
||||
case "delete":
|
||||
deleteRecycleGoods(id_array.toString());
|
||||
break;
|
||||
case 'recovery':
|
||||
//恢复
|
||||
recoveryRecycle(id_array.toString());
|
||||
break;
|
||||
}
|
||||
});
|
||||
|
||||
/**
|
||||
* 批量操作
|
||||
*/
|
||||
table.toolbar(function (obj) {
|
||||
|
||||
if (obj.data.length < 1) {
|
||||
layer.msg('请选择要操作的数据');
|
||||
return;
|
||||
}
|
||||
var id_array = new Array();
|
||||
for (i in obj.data) id_array.push(obj.data[i].goods_id);
|
||||
switch (obj.event) {
|
||||
case "delete":
|
||||
deleteRecycleGoods(id_array.toString());
|
||||
break;
|
||||
case 'recovery':
|
||||
//恢复
|
||||
recoveryRecycle(id_array.toString());
|
||||
break;
|
||||
}
|
||||
});
|
||||
|
||||
// 搜索功能
|
||||
form.on('submit(search)', function (data) {
|
||||
table.reload({
|
||||
page: {
|
||||
curr: 1
|
||||
},
|
||||
where: data.field
|
||||
});
|
||||
return false;
|
||||
});
|
||||
|
||||
$.ajax({
|
||||
url : ns.url("shop/goodscategory/lists"),
|
||||
dataType: 'JSON',
|
||||
type: 'POST',
|
||||
success: function(res) {
|
||||
if($('.select-category').length) {
|
||||
var _cascader = layCascader({
|
||||
elem: '.select-category',
|
||||
options: res.data,
|
||||
props: {
|
||||
value: 'category_id',
|
||||
label: 'category_name',
|
||||
children: 'child_list'
|
||||
}
|
||||
});
|
||||
_cascader.changeEvent(function (value, node) {
|
||||
$('[name="category_id"]').val(value)
|
||||
});
|
||||
}
|
||||
}
|
||||
})
|
||||
});
|
||||
</script>
|
||||
274
app/shop/view/goods/verify.html
Executable file
274
app/shop/view/goods/verify.html
Executable file
@@ -0,0 +1,274 @@
|
||||
<style>
|
||||
.screen{margin-bottom: 15px;}
|
||||
.contraction span {
|
||||
cursor: pointer;
|
||||
display: inline-block;
|
||||
width: 17px;
|
||||
height: 17px;
|
||||
text-align: center;
|
||||
line-height: 14px;
|
||||
user-select: none;
|
||||
}
|
||||
|
||||
.table-title .title-content p{overflow: hidden;text-overflow:ellipsis;white-space: nowrap;}
|
||||
|
||||
.goods-box{
|
||||
display: flex;
|
||||
padding: 10px;
|
||||
justify-content: space-between;
|
||||
margin-bottom: 20px;
|
||||
}
|
||||
.goods-box .goods-info{
|
||||
width: 340px;
|
||||
}
|
||||
.goods-box .goods-info .goods-name{
|
||||
text-overflow: ellipsis;
|
||||
|
||||
display: -webkit-box;
|
||||
-webkit-line-clamp: 2;
|
||||
-webkit-box-orient: vertical;
|
||||
|
||||
display: -moz-box;
|
||||
-moz-line-clamp: 2;
|
||||
-moz-box-orient: vertical;
|
||||
|
||||
overflow-wrap: break-word;
|
||||
word-break: break-all;
|
||||
white-space: normal;
|
||||
overflow: hidden;
|
||||
height: 38px;
|
||||
}
|
||||
.goods-box .goods-info .goods-desc{
|
||||
margin-top: 5px;
|
||||
}
|
||||
.goods-box .goods-img{
|
||||
margin-right: 15px;
|
||||
display: flex;
|
||||
align-items: center;
|
||||
}
|
||||
.goods-box .goods-img img{
|
||||
width: 80px;
|
||||
max-height: 80px;
|
||||
}
|
||||
.goods-box .box-left{
|
||||
display: flex;
|
||||
}
|
||||
.goods-box .box-right{
|
||||
display: flex;
|
||||
align-items: center;
|
||||
}
|
||||
.stat-box{
|
||||
display: flex;
|
||||
justify-content: space-around;
|
||||
height: 100px;
|
||||
align-items: center;
|
||||
background: #f7f7f7;
|
||||
margin-bottom: 10px;
|
||||
}
|
||||
.stat-box .stat-item .stat-val{
|
||||
margin-top: 10px;
|
||||
font-size: 20px;
|
||||
font-weight: bold;
|
||||
}
|
||||
.user-detail{
|
||||
cursor: pointer;
|
||||
}
|
||||
.table-title .title-content{
|
||||
overflow: unset;
|
||||
}
|
||||
</style>
|
||||
|
||||
<!--商品信息-->
|
||||
<div class="goods-box">
|
||||
<div class="box-left">
|
||||
<div class="goods-img">
|
||||
<img src="{:img(explode(',', $goods_info['goods_image'])[0])}">
|
||||
</div>
|
||||
<div class="goods-info">
|
||||
<div class="goods-name">{$goods_info['goods_name']}</div>
|
||||
<div class="goods-price">价格:{$goods_info['price']}</div>
|
||||
<div class="goods-desc">库存:{$goods_info['goods_stock']} 销量:{$goods_info['sale_num']}</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="box-right">
|
||||
<button class="layui-btn layui-btn-primary" onclick="location.hash='{:hash_url('shop/goods/lists')}'">返回</button>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="stat-box">
|
||||
<div class="stat-item">
|
||||
<div class="stat-txt">核销码总数(个)</div>
|
||||
<div class="stat-val">{$total_count}</div>
|
||||
</div>
|
||||
<div class="stat-item">
|
||||
<div class="stat-txt">已核销(次)</div>
|
||||
<div class="stat-val">{$verify_use_num}</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- 搜索框 -->
|
||||
<div class="screen layui-collapse" lay-filter="selection_panel">
|
||||
<div class="layui-colla-item">
|
||||
<form class="layui-colla-content layui-form layui-show">
|
||||
<div class="layui-form-item">
|
||||
<div class="layui-inline">
|
||||
<label class="layui-form-label">购买人:</label>
|
||||
<div class="layui-input-inline">
|
||||
<input type="text" name="nickname" placeholder="请输入购买人名称" autocomplete="off" class="layui-input">
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="layui-inline">
|
||||
<label class="layui-form-label">核销码:</label>
|
||||
<div class="layui-input-inline">
|
||||
<input type="text" name="verify_code" placeholder="请输入核销码" autocomplete="off" class="layui-input">
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="form-row">
|
||||
<button class="layui-btn" lay-submit lay-filter="search">筛选</button>
|
||||
<button type="reset" class="layui-btn layui-btn-primary">重置</button>
|
||||
</div>
|
||||
</form>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- 列表 -->
|
||||
<table id="verify_list" lay-filter="verify_list"></table>
|
||||
|
||||
<!-- 工具栏操作 -->
|
||||
<script type="text/html" id="operation">
|
||||
<div class="table-btn">
|
||||
<a class="layui-btn" lay-event="record">核销记录</a>
|
||||
</div>
|
||||
</script>
|
||||
|
||||
<script type="text/html" id="userdetail">
|
||||
<div class='table-title user-detail' onclick="memberDetail({{d.member_id}})">
|
||||
<div class='title-pic'>
|
||||
<img layer-src src="{{ns.img(d.headimg)}}" onerror="this.src = '{:img('public/static/img/default_img/head.png')}' ">
|
||||
</div>
|
||||
<div class='title-content'>
|
||||
{{d.nickname}}
|
||||
</div>
|
||||
</div>
|
||||
</script>
|
||||
|
||||
<script type="text/html" id="goodsDetail">
|
||||
<div class="table-title">
|
||||
<div class=" table-title">
|
||||
<div class="title-pic"><img src="{{ns.img(d.sku_image)}}"></div>
|
||||
<div class="title-content">
|
||||
<p title="{{ d.sku_name }}">{{ d.sku_name }}</p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</script>
|
||||
|
||||
<script>
|
||||
var laytpl;
|
||||
$(function () {
|
||||
layui.use(['form', 'laydate','laytpl'], function () {
|
||||
laytpl = layui.laytpl;
|
||||
var table,
|
||||
form = layui.form,
|
||||
laydate = layui.laydate;
|
||||
form.render();
|
||||
|
||||
//渲染时间
|
||||
laydate.render({
|
||||
elem: '#start_time',
|
||||
type: 'datetime'
|
||||
});
|
||||
|
||||
laydate.render({
|
||||
elem: '#end_time',
|
||||
type: 'datetime'
|
||||
});
|
||||
|
||||
/**
|
||||
* 加载表格
|
||||
*/
|
||||
table = new Table({
|
||||
elem: '#verify_list',
|
||||
url: ns.url("shop/goods/verify"), //数据接口
|
||||
where: {goods_id:"{$goods_id}"},
|
||||
cols: [
|
||||
[{
|
||||
title: '商品信息',
|
||||
width: '20%',
|
||||
templet: '#goodsDetail'
|
||||
},{
|
||||
field: 'nickname',
|
||||
title: '买家信息',
|
||||
templet: '#userdetail'
|
||||
},{
|
||||
field: 'code',
|
||||
title: '核销码',
|
||||
},
|
||||
{
|
||||
field: 'order_no',
|
||||
title: '订单编号',
|
||||
templet: function (data) {
|
||||
return '<a href="'+ ns.href("shop/order/detail", {order_id:data.order_id}) +'" target="_blank">'+ data.order_no +'</a>';
|
||||
}
|
||||
},{
|
||||
field: '',
|
||||
title: '已核销/可核销',
|
||||
templet: function (data) {
|
||||
return data.verify_use_num + '/' + data.verify_total_count;
|
||||
}
|
||||
},
|
||||
{
|
||||
field: 'sold_time',
|
||||
title: '售出时间',
|
||||
width: '10%',
|
||||
templet: function (data) {
|
||||
return ns.time_to_date(data.sold_time)
|
||||
}
|
||||
}, {
|
||||
title: '操作',
|
||||
toolbar: '#operation',
|
||||
unresize: 'false',
|
||||
align : 'right'
|
||||
}]
|
||||
]
|
||||
});
|
||||
|
||||
/**
|
||||
* 监听工具栏操作
|
||||
*/
|
||||
table.tool(function(obj) {
|
||||
var data = obj.data;
|
||||
switch (obj.event) {
|
||||
case 'record':
|
||||
window.open(ns.href("shop/verify/records?verify_code=" + data.code))
|
||||
break;
|
||||
}
|
||||
});
|
||||
|
||||
/**
|
||||
* 搜索功能
|
||||
*/
|
||||
form.on('submit(search)', function (data) {
|
||||
table.reload({
|
||||
page: {
|
||||
curr: 1
|
||||
},
|
||||
where: data.field
|
||||
});
|
||||
return false;
|
||||
});
|
||||
|
||||
//批量导出
|
||||
form.on('submit(export_verify)', function (data) {
|
||||
location.href = ns.url("shop/verify/exportVerify?request_mode=download", data.field);
|
||||
return false;
|
||||
});
|
||||
});
|
||||
})
|
||||
function memberDetail(member_id){
|
||||
window.open(ns.href("shop/member/editmember", {'member_id':member_id}))
|
||||
}
|
||||
</script>
|
||||
Reference in New Issue
Block a user