389 lines
20 KiB
HTML
Executable File
389 lines
20 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="fs-16">
|
||
{{if empty($data['id'])}}
|
||
商品添加
|
||
{{else /}}
|
||
商品编辑
|
||
{{/if}}
|
||
</span>
|
||
<a href="{{:MyUrl('admin/goods/index', $params)}}" class="fr fs-14 m-t-5 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>
|
||
</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 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="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 c-p" multiple="multiple" minchecked="1" data-placeholder="请选择..." data-validation-message="请至少选择一个商品分类" required>
|
||
{{if !empty($category_list)}}
|
||
{{foreach $category_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 !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}}
|
||
</optgroup>
|
||
{{/foreach}}
|
||
{{/if}}
|
||
</select>
|
||
</div>
|
||
<div class="am-form-group">
|
||
<label>品牌</label>
|
||
<br />
|
||
<select name="brand_id" class="am-radius chosen-select c-p" 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 c-p" 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="fs-12 fw-100 cr-ccc">(默认数值 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="fs-12 fw-100 cr-ccc">(单次最大数值 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="fs-12 fw-100 cr-ccc">(留空则取相册第一张图)</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="fs-12 fw-100 cr-ccc">(扣除规则根据后台配置->扣除库存规则而定)</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="fs-12 fw-100 cr-ccc">(下架后用户不可见)</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="fs-12 fw-100 cr-ccc">(推荐后在首页展示)</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>
|
||
<span class="business-operations-submit specifications-nav-title-add">+添加规格</span>
|
||
<div class="goods-specifications">
|
||
<table class="am-table am-table-bordered am-table-centered specifications-table m-t-10 m-b-10">
|
||
<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">价格(元)</th>
|
||
<th>库存</th>
|
||
<th>重量(kg)</th>
|
||
<th>规格编码</th>
|
||
<th>条形码</th>
|
||
<th>原价(元)</th>
|
||
<th class="operation-btn">操作</th>
|
||
</tr>
|
||
</thead>
|
||
<tbody>
|
||
{{if empty($specifications['value'])}}
|
||
<tr>
|
||
<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>
|
||
<!--operation-->
|
||
</td>
|
||
</tr>
|
||
{{/if}}
|
||
|
||
{{if !empty($specifications['value'])}}
|
||
{{foreach $specifications.value as $line_k=>$line_v}}
|
||
<tr {{if $line_k gt 0}} class="line-not-first"{{/if}}>
|
||
{{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>
|
||
{{if $line_k gt 0}}
|
||
<span class="fs-12 cr-blue c-p m-r-5 line-copy">复制</span>
|
||
<span class="fs-12 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>
|
||
<span class="business-operations-submit specifications-line-images-add m-l-10">+添加规格图片</span>
|
||
<ul class="spec-images-list">
|
||
<div class="am-alert am-alert-warning am-radius" data-am-alert>
|
||
规格名称与规格值保持一致,相同规格名称添加一次即可,重复添加则后面覆盖前面,顺序不影响前端展示效果。
|
||
</div>
|
||
{{if !empty($specifications['type'])}}
|
||
{{foreach $specifications.type as $type}}
|
||
{{if !empty($type['value'])}}
|
||
{{foreach $type.value as $spec_key=>$spec}}
|
||
{{if !empty($spec['images'])}}
|
||
<li class="spec-images-items spec-images-items-{{$type.id}}{{$spec_key}}">
|
||
<input type="text" name="spec_images_name[{{$type.id}}{{$spec_key}}]" placeholder="规格名称" class="am-radius t-c" data-validation-message="请填写规格名称" value="{{$spec.name}}" required >
|
||
<ul class="plug-file-upload-view spec-images-view-{{$type.id}}{{$spec_key}}" data-form-name="spec_images[{{$type.id}}{{$spec_key}}]" data-max-number="1" data-delete='0' data-dialog-type="images">
|
||
<li>
|
||
<input type="hidden" name="spec_images[{{$type.id}}{{$spec_key}}]" value="{{$spec.images_old}}" data-validation-message="请上传规格图片" required />
|
||
<img src="{{$spec.images}}" />
|
||
<i>×</i>
|
||
</li>
|
||
</ul>
|
||
<div class="plug-file-upload-submit" data-view-tag="ul.spec-images-view-{{$type.id}}{{$spec_key}}">+上传图片</div>
|
||
</li>
|
||
{{/if}}
|
||
{{/foreach}}
|
||
{{/if}}
|
||
{{/foreach}}
|
||
{{/if}}
|
||
</ul>
|
||
</div>
|
||
</div>
|
||
|
||
<!-- 相册 -->
|
||
<div id="goods-nav-photo" class="division-block">
|
||
<label class="block nav-detail-title">商品相册<span class="fs-12 fw-100 cr-ccc">(可拖拽图片进行排序,建议图片尺寸一致)</span></label>
|
||
<ul class="plug-file-upload-view goods-photo-view" data-form-name="photo[]" data-max-number="5" data-dialog-type="images">
|
||
{{if !empty($data['photo'])}}
|
||
{{foreach $data.photo as $v}}
|
||
<li>
|
||
<input type="text" name="photo[]" value="{{$v.images_old}}" />
|
||
<img src="{{$v.images}}" />
|
||
<i>×</i>
|
||
</li>
|
||
{{/foreach}}
|
||
{{/if}}
|
||
</ul>
|
||
<div class="plug-file-upload-submit" data-view-tag="ul.goods-photo-view">+上传相册</div>
|
||
</div>
|
||
|
||
<!-- 视频 -->
|
||
<div id="goods-nav-video" class="division-block">
|
||
<label class="block nav-detail-title">商品视频</label>
|
||
<div class="am-form-group am-form-file">
|
||
<label class="block">短视频<span class="fs-12 fw-100 cr-ccc">(视频比图文更有具带入感,仅支持 mp4 格式)</span></label>
|
||
<ul class="plug-file-upload-view plug-file-upload-view-video goods-video-view" data-form-name="video" data-max-number="1" data-dialog-type="video">
|
||
{{if !empty($data['video'])}}
|
||
<li>
|
||
<input type="text" name="video" value="{{$data.video}}" />
|
||
<video src="{{$data.video}}" controls>your browser does not support the video tag</video>
|
||
<i>×</i>
|
||
</li>
|
||
{{/if}}
|
||
</ul>
|
||
<div class="plug-file-upload-submit" data-view-tag="ul.goods-video-view">+上传视频</div>
|
||
</div>
|
||
</div>
|
||
|
||
<!-- app内容 -->
|
||
<div id="goods-nav-app" class="division-block">
|
||
<label class="block nav-detail-title">手机端详情</label>
|
||
<ul class="content-app-items" data-max-count="10" data-required="1" data-images-name="content_app_images" data-content-name="content_app_text" data-images-text="图片" data-content-text="文本内容" data-delete-text="删除" data-drag-sort-text="拖拽排序">
|
||
{{if !empty($data['content_app'])}}
|
||
{{foreach $data.content_app as $v}}
|
||
<li>
|
||
<div>
|
||
<div class="content-app-left">
|
||
<label class="block">图片</label>
|
||
<ul class="plug-file-upload-view goods-content-app-images-view-{{$v.id}}" data-form-name="content_app_images_{{$v.id}}" data-max-number="1" data-dialog-type="images">
|
||
{{if !empty($v['images'])}}
|
||
<li>
|
||
<input type="text" name="content_app_images_{{$v.id}}" value="{{$v.images_old}}" />
|
||
<img src="{{$v.images}}" />
|
||
<i>×</i>
|
||
</li>
|
||
{{/if}}
|
||
</ul>
|
||
<div class="plug-file-upload-submit" data-view-tag="ul.goods-content-app-images-view-{{$v.id}}">+上传图片</div>
|
||
</div>
|
||
<div class="am-form-group content-app-right fr">
|
||
<label>文本内容</label>
|
||
<textarea rows="5" name="content_app_text_{{$v.id}}" maxlength="105000" class="am-radius" placeholder="文本内容" data-validation-message="文本内容最多 105000 个字符">{{if !empty($v)}}{{$v.content_old|raw}}{{/if}}</textarea>
|
||
</div>
|
||
</div>
|
||
<i class="c-p fs-12 cr-red content-app-items-rem-sub">删除</i>
|
||
<i class="c-m fs-12 drag-sort-submit">拖拽排序</i>
|
||
</li>
|
||
{{/foreach}}
|
||
{{/if}}
|
||
</ul>
|
||
<span class="business-operations-submit content-app-items-add-sub">+添加手机详情</span>
|
||
</div>
|
||
|
||
<!-- web内容 -->
|
||
<div id="goods-nav-web" class="division-block">
|
||
<label class="block nav-detail-title">电脑端详情</label>
|
||
<div class="am-form-group">
|
||
<textarea class="am-radius am-validate" name="content_web" maxlength="105000" id="editor-tag" data-validation-message="电脑端详情内容最多 105000 个字符">{{if !empty($data)}}{{$data.content_web}}{{/if}}</textarea>
|
||
</div>
|
||
</div>
|
||
|
||
<div class="am-form-group am-form-group-refreshing">
|
||
<input type="hidden" name="id" {{if !empty($data)}} value="{{$data.id}}"{{/if}} />
|
||
<button type="submit" class="am-btn am-btn-primary am-radius btn-loading-example am-btn-sm w100" data-am-loading="{loadingText:'处理中...'}">保存</button>
|
||
</div>
|
||
</form>
|
||
<!-- form end -->
|
||
</div>
|
||
</div>
|
||
<!-- right content end -->
|
||
|
||
<!-- footer start -->
|
||
{{include file="public/footer" /}}
|
||
<!-- footer end -->
|
||
|
||
<!-- 拖拽排序初始化 -->
|
||
<script type="text/javascript">
|
||
$(function()
|
||
{
|
||
{{if !empty($data['attribute'])}}
|
||
{{foreach $data.attribute as $v}}
|
||
$('ul.attribute-items-ul-{{$v.id}}').dragsort({ dragSelector: 'i.drag-sort-submit', placeHolderTemplate: '<li class="drag-sort-dotted"></li>'});
|
||
{{/foreach}}
|
||
{{/if}}
|
||
});
|
||
</script> |