684 lines
35 KiB
HTML
Executable File
684 lines
35 KiB
HTML
Executable File
{{include file="public/header" /}}
|
||
|
||
<!-- right content start -->
|
||
<div class="content-right">
|
||
<div class="content">
|
||
<!-- form start -->
|
||
<form class="am-form form-validation view-save" action="{{:MyUrl('admin/goods/save')}}" method="POST" request-type="ajax-url" request-value="{{:MyUrl('admin/goods/index', $params)}}" enctype="multipart/form-data">
|
||
<legend>
|
||
<span class="am-text-default">
|
||
{{if empty($data['id'])}}
|
||
商品添加
|
||
{{else /}}
|
||
商品编辑
|
||
{{/if}}
|
||
</span>
|
||
<a href="{{:MyUrl('admin/goods/index', $params)}}" class="am-fr am-text-sm am-margin-top-xs am-icon-mail-reply"> 返回</a>
|
||
</legend>
|
||
|
||
<nav class="goods-nav">
|
||
<ul>
|
||
<li>
|
||
<a href="#goods-nav-base">基础信息</a>
|
||
</li>
|
||
<li>
|
||
<a href="#goods-nav-operations">商品规格</a>
|
||
</li>
|
||
<li>
|
||
<a href="#goods-nav-photo">商品相册</a>
|
||
</li>
|
||
<li>
|
||
<a href="#goods-nav-video">商品视频</a>
|
||
</li>
|
||
<li>
|
||
<a href="#goods-nav-app">手机端详情</a>
|
||
</li>
|
||
<li>
|
||
<a href="#goods-nav-web">电脑端详情</a>
|
||
</li>
|
||
<li>
|
||
<a href="#goods-nav-extends">扩展数据</a>
|
||
</li>
|
||
<li>
|
||
<a href="#goods-nav-seo">SEO</a>
|
||
</li>
|
||
<li class="am-text-center am-padding-xs nav-shrink-submit">
|
||
<i class="am-icon-angle-double-right am-icon-sm"></i>
|
||
</li>
|
||
</ul>
|
||
</nav>
|
||
|
||
<!-- 基础信息 -->
|
||
<div id="goods-nav-base" class="division-block">
|
||
<label class="block nav-detail-title">基础信息</label>
|
||
<div class="am-form-group">
|
||
<label>标题名称</label>
|
||
<div class="am-input-group am-input-group-sm">
|
||
<input type="hidden" name="title_color" value="{{if !empty($data['title_color'])}}{{$data.title_color}}{{/if}}" />
|
||
<input type="text" name="title" placeholder="标题名称" minlength="2" maxlength="60" data-validation-message="标题名称格式 2~60 个字符" class="am-form-field am-radius" {{if !empty($data)}} value="{{$data.title}}" {{/if}} {{if !empty($data['title_color'])}} style="color:{{$data.title_color}};" {{/if}} required />
|
||
<span class="am-input-group-btn">
|
||
<button class="am-btn am-btn-default am-btn-xs colorpicker-submit" type="button" data-input-tag="input[name='title']" data-color-tag="input[name='title_color']">
|
||
<img src="{{$attachment_host}}/static/common/images/colorpicker.png" />
|
||
</button>
|
||
</span>
|
||
</div>
|
||
</div>
|
||
<div class="am-form-group">
|
||
<label>商品简述</label>
|
||
<input type="text" name="simple_desc" placeholder="商品简述" maxlength="160" data-validation-message="商品简述格式 最多160个字符" class="am-radius" {{if !empty($data)}} value="{{$data.simple_desc}}"{{/if}} />
|
||
</div>
|
||
<div class="am-form-group">
|
||
<label>商品型号</label>
|
||
<input type="text" name="model" placeholder="商品型号" maxlength="30" data-validation-message="商品型号格式 最多30个字符" class="am-radius" {{if !empty($data)}} value="{{$data.model}}"{{/if}} />
|
||
</div>
|
||
<div class="am-form-group">
|
||
<label>商品分类</label>
|
||
<br />
|
||
<select name="category_id" class="am-radius chosen-select" multiple="multiple" minchecked="1" data-placeholder="请选择..." data-validation-message="请至少选择一个商品分类" required>
|
||
{{if !empty($goods_category_list)}}
|
||
{{foreach $goods_category_list as $v}}
|
||
<option value="{{$v.id}}" {{if !empty($data['category_ids']) and in_array($v['id'], $data['category_ids'])}}selected{{/if}}>一级 - {{$v.name}}</option>
|
||
{{if !empty($v['items'])}}
|
||
{{foreach $v.items as $vs}}
|
||
<option style="padding-left: 30px;" value="{{$vs.id}}" {{if !empty($data['category_ids']) and in_array($vs['id'], $data['category_ids'])}}selected{{/if}}>二级-{{$vs.name}}</option>
|
||
{{if !empty($vs['items'])}}
|
||
{{foreach $vs.items as $vss}}
|
||
<option style="padding-left: 60px;" value="{{$vss.id}}" {{if !empty($data['category_ids']) and in_array($vss['id'], $data['category_ids'])}}selected{{/if}}>三级-{{$vss.name}}</option>
|
||
{{/foreach}}
|
||
{{/if}}
|
||
{{/foreach}}
|
||
{{/if}}
|
||
{{/foreach}}
|
||
{{/if}}
|
||
</select>
|
||
</div>
|
||
<div class="am-form-group">
|
||
<label>品牌</label>
|
||
<br />
|
||
<select name="brand_id" class="am-radius chosen-select" data-placeholder="请选择..." data-validation-message="请至少选择一个商品分类">
|
||
{{if !empty($brand_list)}}
|
||
<option value="0">请选择...</option>
|
||
{{foreach $brand_list as $v}}
|
||
<optgroup label="{{$v.name}}">
|
||
{{if !empty($v['items'])}}
|
||
{{foreach $v.items as $vs}}
|
||
<option style="padding-left: 30px;" value="{{$vs.id}}" {{if isset($data['brand_id']) and $data['brand_id'] eq $vs['id']}}selected{{/if}}>{{$vs.name}}</option>
|
||
{{/foreach}}
|
||
{{/if}}
|
||
</optgroup>
|
||
{{/foreach}}
|
||
{{/if}}
|
||
</select>
|
||
</div>
|
||
<div class="am-form-group">
|
||
<label>生产地</label>
|
||
<br />
|
||
<select name="place_origin" class="am-radius chosen-select" data-placeholder="请选择..." data-validation-message="请选择生产地">
|
||
<option value="0">请选择...</option>
|
||
{{if !empty($region_province_list)}}
|
||
{{foreach $region_province_list as $v}}
|
||
<option value="{{$v.id}}" {{if !empty($data['place_origin']) and $v['id'] eq $data['place_origin']}}selected{{/if}}>{{$v.name}}</option>
|
||
{{/foreach}}
|
||
{{/if}}
|
||
</select>
|
||
</div>
|
||
<div class="am-form-group">
|
||
<label>库存单位</label>
|
||
<input type="text" name="inventory_unit" placeholder="库存单位" minlength="1" maxlength="6" data-validation-message="库存单位格式 1~6 个字符" class="am-radius" {{if !empty($data)}} value="{{$data.inventory_unit}}"{{/if}} required />
|
||
</div>
|
||
<div class="am-form-group">
|
||
<label>购买赠送积分</label>
|
||
<input type="number" name="give_integral" placeholder="购买赠送积分" max="100000000" data-validation-message="购买赠送积分 0~100000000" class="am-radius" value="{{if empty($data)}}0{{else /}}{{$data.give_integral}}{{/if}}" required />
|
||
</div>
|
||
<div class="am-form-group">
|
||
<label>最低起购数量<span class="am-form-group-label-tips">默认数值 1</span></label>
|
||
<input type="number" name="buy_min_number" placeholder="最低起购数量" min="1" max="100000000" data-validation-message="最低起购数量 1~100000000" class="am-radius" value="{{if empty($data)}}1{{else /}}{{$data.buy_min_number}}{{/if}}" required />
|
||
</div>
|
||
<div class="am-form-group">
|
||
<label>单次最大购买数量<span class="am-form-group-label-tips">单次最大数值 100000000, 小于等于0或空则不限</span></label>
|
||
<input type="number" name="buy_max_number" placeholder="单次最大购买数量" min="0" max="100000000" data-validation-message="单次最大购买数量 1~100000000" class="am-radius" {{if !empty($data['buy_max_number'])}} value="{{$data.buy_max_number}}"{{/if}} />
|
||
</div>
|
||
<div class="am-form-group am-form-file">
|
||
<label class="block">首页推荐图片<span class="am-form-group-label-tips">留空则取相册第一张图</span></label>
|
||
<ul class="plug-file-upload-view goods-recommended-images-view" data-form-name="home_recommended_images" data-max-number="1" data-dialog-type="images">
|
||
{{if !empty($data['home_recommended_images'])}}
|
||
<li>
|
||
<input type="text" name="home_recommended_images" value="{{$data.home_recommended_images}}" />
|
||
<img src="{{$data.home_recommended_images}}" />
|
||
<i>×</i>
|
||
</li>
|
||
{{/if}}
|
||
</ul>
|
||
<div class="plug-file-upload-submit" data-view-tag="ul.goods-recommended-images-view">+上传图片</div>
|
||
</div>
|
||
<div class="am-form-group">
|
||
<label class="block">扣减库存<span class="am-form-group-label-tips">扣除规则根据后台配置->扣除库存规则而定</span></label>
|
||
<input name="is_deduction_inventory" value="1" type="checkbox" data-off-text="否" data-on-text="是" data-size="xs" data-on-color="success" data-off-color="default" data-handle-width="50" data-am-switch {{if (isset($data['is_deduction_inventory']) and $data['is_deduction_inventory'] eq 1) or empty($data)}}checked="true"{{/if}} />
|
||
</div>
|
||
<div class="am-form-group">
|
||
<label class="block">上下架<span class="am-form-group-label-tips">下架后用户不可见</span></label>
|
||
<input name="is_shelves" value="1" type="checkbox" data-off-text="下架" data-on-text="上架" data-size="xs" data-on-color="success" data-off-color="default" data-handle-width="50" data-am-switch {{if (isset($data['is_shelves']) and $data['is_shelves'] eq 1) or empty($data)}}checked="true"{{/if}} />
|
||
</div>
|
||
<div class="am-form-group">
|
||
<label class="block">首页推荐<span class="am-form-group-label-tips">推荐后在首页展示</span></label>
|
||
<input name="is_home_recommended" value="1" type="checkbox" data-off-text="否" data-on-text="是" data-size="xs" data-on-color="success" data-off-color="default" data-handle-width="50" data-am-switch {{if isset($data['is_home_recommended']) and $data['is_home_recommended'] eq 1}}checked="true"{{/if}} />
|
||
</div>
|
||
</div>
|
||
|
||
<!-- 规格 -->
|
||
<div id="goods-nav-operations" class="division-block" data-spec-add-max-number="{{:MyC('common_spec_add_max_number', 3, true)}}">
|
||
<label class="block nav-detail-title">商品规格</label>
|
||
<!-- 规格快捷操作 -->
|
||
<div class="spec-quick am-margin-bottom-lg">
|
||
<div class="am-alert am-alert-warning am-radius" data-am-alert>
|
||
快捷操作可以快速创建商品SKU,大量节省SKU编辑时间,快捷操作数据不影响SKU数据,仅生成的时候重新覆盖SKU。
|
||
</div>
|
||
<span class="business-operations-submit quick-spec-title-add">+快捷操作</span>
|
||
<span class="business-operations-submit am-margin-left-sm am-icon-gg quick-spec-created">生成规格</span>
|
||
<div class="goods-specifications business-form-group" {{if empty($data['spec_base'])}}style="display: none;"{{/if}}>
|
||
<table class="am-table am-table-bordered am-table-centered">
|
||
<thead>
|
||
<tr>
|
||
<th class="spec-quick-th-title">规格名</th>
|
||
<th class="spec-quick-th-value">规格值</th>
|
||
</tr>
|
||
</thead>
|
||
<tbody>
|
||
{{if !empty($data['spec_base'])}}
|
||
{{foreach $data.spec_base as $spec_base_key=>$spec_base}}
|
||
<tr>
|
||
<td class="am-text-middle">
|
||
<i class="am-close am-close-spin quick-title-remove">×</i>
|
||
<input type="text" value="{{$spec_base.title}}" name="spec_base_title_{{$spec_base_key}}" placeholder="规格名" />
|
||
</td>
|
||
<td class="spec-quick-td-value am-cf">
|
||
{{if !empty($spec_base['value'])}}
|
||
{{foreach $spec_base.value as $value}}
|
||
<div class="am-fl am-margin-xs value-item">
|
||
<input type="text" class="am-fl" name="spec_base_value_{{$spec_base_key}}[]" value="{{$value}}" placeholder="规格值" />
|
||
<i class="am-close am-close-spin quick-value-remove">×</i>
|
||
</div>
|
||
{{/foreach}}
|
||
{{/if}}
|
||
<div class="am-fl am-margin-xs value-item am-text-left"><span class="business-operations-submit quick-spec-value-add" data-index="{{$spec_base_key}}">+添加规格值</span>
|
||
</div>
|
||
</td>
|
||
</tr>
|
||
{{/foreach}}
|
||
{{/if}}
|
||
</tbody>
|
||
</table>
|
||
</div>
|
||
</div>
|
||
|
||
<!-- 规格常规操作 -->
|
||
<span class="business-operations-submit specifications-nav-title-add">+添加规格</span>
|
||
<span class="business-operations-submit am-margin-left-sm specifications-nav-set-all am-icon-cogs" data-am-modal="{target: '#spec-popup-all-operation'}"> 高级批量设置</span>
|
||
<div class="goods-specifications business-form-group am-padding-top-sm">
|
||
<!-- 所有规格批量操作弹层 -->
|
||
<div class="am-popup" id="spec-popup-all-operation">
|
||
<div class="am-popup-inner">
|
||
<div class="am-popup-hd">
|
||
<h4 class="am-popup-title">高级批量设置</h4>
|
||
<span data-am-modal-close class="am-close">×</span>
|
||
</div>
|
||
<div class="am-popup-bd">
|
||
<div class="am-alert am-alert-secondary spec-title-container"></div>
|
||
<div class="am-form-group">
|
||
<label class="block">销售价格</label>
|
||
<input type="text" placeholder="价格" class="am-radius popup_all_price" pattern="^([0-9]{1}\d{0,6})(\.\d{1,2})?$" data-validation-message="请填写有效的销售金额" />
|
||
</div>
|
||
<div class="am-form-group">
|
||
<label class="block">库存</label>
|
||
<input type="number" placeholder="库存" class="am-radius popup_all_number" min="0" max="100000000" pattern="^-?(?:\d+|\d{1,3}(?:,\d{3})+)?(?:\.\d+)?$" data-validation-message="库存数量 0~100000000" />
|
||
</div>
|
||
<div class="am-form-group">
|
||
<label class="block">重量</label>
|
||
<input type="number" placeholder="重量" class="am-radius popup_all_weight" maxlength="80" min="0.00" max="100000000.00" step="0.01" data-validation-message="规格重量 0.00~100000000.00" />
|
||
</div>
|
||
<div class="am-form-group">
|
||
<label class="block">编码</label>
|
||
<input type="text" placeholder="编码" class="am-radius popup_all_coding" maxlength="80" data-validation-message="规格编码最多80个字符" />
|
||
</div>
|
||
<div class="am-form-group">
|
||
<label class="block">条形码</label>
|
||
<input type="text" placeholder="条形码" class="am-radius popup_all_barcode" maxlength="80" data-validation-message="条形码最多80个字符" />
|
||
</div>
|
||
<div class="am-form-group">
|
||
<label class="block">原价</label>
|
||
<input type="text" placeholder="原价" class="am-radius popup_all_original_price" pattern="^([0-9]{1}\d{0,6})(\.\d{1,2})?$" data-validation-message="请填写有效的原价" />
|
||
</div>
|
||
<div class="am-form-group am-form-group-refreshing am-text-center">
|
||
<button class="am-btn am-btn-warning am-radius am-btn-sm am-margin-right-lg" type="button" data-am-modal-close>取消</button>
|
||
<button class="am-btn am-btn-secondary am-radius am-btn-sm am-margin-left-lg" type="button">确认</button>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
|
||
<!-- 单个规格批量操作弹层 -->
|
||
<div class="am-modal am-modal-no-btn" tabindex="-1" id="spec-modal-all-operation">
|
||
<div class="am-modal-dialog">
|
||
<div class="am-modal-hd">批量操作
|
||
<a href="javascript: void(0)" class="am-close am-close-spin" data-am-modal-close>×</a>
|
||
</div>
|
||
<div class="am-modal-bd">
|
||
<div class="am-input-group am-input-group-sm">
|
||
<input type="text" class="am-form-field" placeholder="批量设置的值" />
|
||
<span class="am-input-group-btn">
|
||
<button class="am-btn am-btn-default" type="button">确认</button>
|
||
</span>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
|
||
<!-- 规格列表 -->
|
||
<table class="am-table am-table-bordered am-table-centered specifications-table am-margin-bottom-sm">
|
||
<thead class="title-nav">
|
||
<tr>
|
||
{{if !empty($specifications['type'])}}
|
||
{{foreach $specifications.type as $type_v}}
|
||
<th class="table-title table-title-{{$type_v.id}}">
|
||
<i class="am-close am-close-spin title-nav-remove" data-index="{{$type_v.id}}">×</i>
|
||
<input type="text" name="specifications_name_{{$type_v.id}}" placeholder="规格名" value="{{$type_v.name}}" data-validation-message="请填写规格名" required />
|
||
</th>
|
||
{{/foreach}}
|
||
{{/if}}
|
||
<th class="title-start">
|
||
<span>价格(元)</span>
|
||
<i class="am-icon-edit"></i>
|
||
</th>
|
||
<th>
|
||
<span>库存</span>
|
||
<i class="am-icon-edit"></i>
|
||
</th>
|
||
<th>
|
||
<span>重量(kg)</span>
|
||
<i class="am-icon-edit"></i>
|
||
</th>
|
||
<th>
|
||
<span>规格编码</span>
|
||
<i class="am-icon-edit"></i>
|
||
</th>
|
||
<th>
|
||
<span>条形码</span>
|
||
<i class="am-icon-edit"></i>
|
||
</th>
|
||
<th>
|
||
<span>原价(元)</span>
|
||
<i class="am-icon-edit"></i>
|
||
</th>
|
||
<th class="extend-btn">扩展</th>
|
||
<th class="operation-btn">操作</th>
|
||
</tr>
|
||
</thead>
|
||
<tbody>
|
||
{{if empty($specifications['value'])}}
|
||
<tr class="line-0" data-line-tag=".line-0">
|
||
<td class="value-start">
|
||
<input type="text" name="specifications_price[]" placeholder="价格" class="am-radius" pattern="^([0-9]{1}\d{0,6})(\.\d{1,2})?$" data-validation-message="请填写有效的销售金额" required />
|
||
</td>
|
||
<td>
|
||
<input type="number" name="specifications_number[]" placeholder="库存" class="am-radius" min="1" max="100000000" pattern="^-?(?:\d+|\d{1,3}(?:,\d{3})+)?(?:\.\d+)?$" data-validation-message="库存数量 1~100000000" required />
|
||
</td>
|
||
<td>
|
||
<input type="number" name="specifications_weight[]" placeholder="重量" class="am-radius" maxlength="80" min="0.00" max="100000000.00" step="0.01" data-validation-message="规格重量 0.00~100000000.00" />
|
||
</td>
|
||
<td>
|
||
<input type="text" name="specifications_coding[]" placeholder="编码" class="am-radius" maxlength="80" data-validation-message="规格编码最多80个字符" />
|
||
</td>
|
||
<td>
|
||
<input type="text" name="specifications_barcode[]" placeholder="条形码" class="am-radius" maxlength="80" data-validation-message="条形码最多80个字符" />
|
||
</td>
|
||
<td>
|
||
<input type="text" name="specifications_original_price[]" placeholder="原价" class="am-radius" pattern="^([0-9]{1}\d{0,6})(\.\d{1,2})?$" data-validation-message="请填写有效的原价" />
|
||
</td>
|
||
<td>
|
||
<input type="hidden" name="specifications_extends[]" value="" class="line-extend-input" />
|
||
<span class="am-text-xs cr-blue c-p line-extend-btn">编辑</span>
|
||
</td>
|
||
<td>
|
||
<!--operation-->
|
||
</td>
|
||
</tr>
|
||
{{/if}}
|
||
|
||
{{if !empty($specifications['value'])}}
|
||
{{foreach $specifications.value as $line_k=>$line_v}}
|
||
<tr class="line-{{$line_k}} {{if $line_k gt 0}} line-not-first{{/if}}" data-line-tag=".line-{{$line_k}}">
|
||
{{foreach $line_v as $v}}
|
||
{{if isset($v['data_type'])}}
|
||
{{switch v.data_type}}
|
||
{{case spec}}
|
||
<td class="table-value table-value-{{$v.data.key}}">
|
||
<input type="text" name="specifications_value_{{$v.data.key}}[]" placeholder="规格值" value="{{$v.data.value}}" data-validation-message="请填写规格值" required />
|
||
</td>
|
||
{{/case}}
|
||
|
||
{{case base}}
|
||
<td class="value-start">
|
||
<input type="text" name="specifications_price[]" placeholder="价格" class="am-radius" pattern="^([0-9]{1}\d{0,6})(\.\d{1,2})?$" data-validation-message="请填写有效的销售金额" value="{{$v.data.price}}" required />
|
||
</td>
|
||
<td>
|
||
<input type="number" name="specifications_number[]" placeholder="库存" class="am-radius" min="0" max="100000000" data-validation-message="库存数量 0~100000000" value="{{$v.data.inventory}}" required />
|
||
</td>
|
||
<td>
|
||
<input type="number" name="specifications_weight[]" placeholder="重量" class="am-radius" min="0.00" max="100000000.00" step="0.01" data-validation-message="规格重量 0.00~100000000.00" value="{{if $v['data']['weight'] gt 0}}{{$v.data.weight}}{{/if}}" />
|
||
</td>
|
||
<td>
|
||
<input type="text" name="specifications_coding[]" placeholder="编码" class="am-radius" maxlength="80" data-validation-message="规格编码最多80个字符" value="{{$v.data.coding}}" />
|
||
</td>
|
||
<td>
|
||
<input type="text" name="specifications_barcode[]" placeholder="条形码" class="am-radius" maxlength="80" data-validation-message="条形码最多80个字符" value="{{$v.data.barcode}}" />
|
||
</td>
|
||
<td>
|
||
<input type="text" name="specifications_original_price[]" placeholder="原价" class="am-radius" pattern="^([0-9]{1}\d{0,6})(\.\d{1,2})?$" data-validation-message="请填写有效的原价" value="{{if $v['data']['original_price'] gt 0}}{{$v.data.original_price}}{{/if}}" />
|
||
</td>
|
||
<td>
|
||
<input type="hidden" name="specifications_extends[]" value="{{$v.data.extends}}" class="line-extend-input" />
|
||
<span class="am-text-xs cr-blue c-p line-extend-btn">编辑</span>
|
||
</td>
|
||
<td>
|
||
{{if $line_k gt 0}}
|
||
<span class="am-text-xs cr-blue c-p am-margin-right-xs line-copy">复制</span>
|
||
<span class="am-text-xs cr-red c-p line-remove">移除</span>
|
||
{{else /}}
|
||
<!--operation-->
|
||
{{/if}}
|
||
</td>
|
||
{{/case}}
|
||
{{/switch}}
|
||
{{/if}}
|
||
{{/foreach}}
|
||
</tr>
|
||
{{/foreach}}
|
||
{{/if}}
|
||
</tbody>
|
||
</table>
|
||
<span class="business-operations-submit specifications-line-add">+添加一行</span>
|
||
|