初始上传

This commit is contained in:
2026-04-04 17:27:12 +08:00
parent 4d80d28eb4
commit b7e11774ee
11191 changed files with 1588469 additions and 0 deletions

View File

@@ -0,0 +1,219 @@
<link rel="stylesheet" type="text/css" href="SHOP_CSS/goods_attr.css"/>
<style>
.layui-layer-page .layui-layer-content {overflow: auto!important;}
</style>
<div class="custom-panel form-wrap">
<!--商品类型基础信息-->
<div class="custom-panel-content">
<ul class="panel-content">
<li>
<div>
<span>模板名称:</span>
<span>{$attr_class_info['class_name']}</span>
</div>
<div>
<span>排序:</span>
<span>{$attr_class_info['sort']}</span>
</div>
</li>
</ul>
<a class="panel-operation text-color" href="javascript:editAttrClassPopup();">编辑</a>
<!--编辑商品类型-->
<script type="text/html" id="editAttrClass">
<div class="layui-form">
<div class="layui-form-item">
<label class="layui-form-label mid"><span class="required">*</span></label>
<div class="layui-input-inline">
<input name="class_name" type="text" value="{$attr_class_info['class_name']}" placeholder="请输入模板名称" lay-verify="required" class="layui-input len-mid">
</div>
</div>
<div class="layui-form-item">
<label class="layui-form-label mid">排序</label>
<div class="layui-input-block">
<input name="sort" type="number" value="{$attr_class_info['sort']}" placeholder="请输入排序" lay-verify="num" class="layui-input len-short">
</div>
<div class="word-aux mid">排序值必须为整数</div>
</div>
<input type="hidden" name="class_id" value="{$attr_class_info['class_id']}">
<div class="form-row mid">
<button class="layui-btn" lay-submit lay-filter="save_attr">保存</button>
</div>
</div>
</script>
</div>
<!--商品参数管理-->
<div class="custom-panel-content attribute">
<!-- 列表 -->
<table id="attribute_list" lay-filter="attribute_list"></table>
<!-- 操作 -->
<script type="text/html" id="attributeOperation">
<div class="table-btn">
<a class="layui-btn" lay-event="edit">编辑</a>
<a class="layui-btn" lay-event="delete">删除</a>
</div>
</script>
<div class="form-row sm">
<button class="layui-btn" onclick="addAttributePopup()">添加商品参数</button>
</div>
<!--添加关联属性-->
<script type="text/html" id="addAttribute">
<div class="layui-form">
<div class="layui-form-item">
<label class="layui-form-label"><span class="required">*</span></label>
<div class="layui-input-block">
<input name="attr_name" type="text" placeholder="请输入商品参数名称" lay-verify="required" class="layui-input len-long" autocomplete="off">
</div>
</div>
<div class="layui-form-item">
<label class="layui-form-label">参数类型</label>
<div class="layui-input-block len-mid">
<select name="attr_type" lay-filter="attr_type">
<option value="1">单选</option>
<option value="2">多选</option>
<option value="3">输入</option>
</select>
</div>
<div class="word-aux">
<p>注意参数类型确定后不允许更改输入不参与筛选</p>
</div>
</div>
<div class="attribute-value-list">
<table class="layui-table">
<colgroup>
<col width="60%">
<col width="40%">
</colgroup>
<thead>
<tr>
<th>参数名称</th>
<th>操作</th>
</tr>
</thead>
</table>
<div class="table-wrap">
<table class="layui-table">
<colgroup>
<col width="60%">
<col width="40%">
</colgroup>
<tbody></tbody>
</table>
</div>
<button class="layui-btn layui-btn-primary" type="button" onclick="addAttrValue()">添加参数</button>
</div>
<input type="hidden" name="attr_class_id" value="{$attr_class_info['class_id']}">
<input type="hidden" name="attr_class_name" value="{$attr_class_info['class_name']}">
<div class="form-row">
<button class="layui-btn" lay-submit lay-filter="save_add_attribute">保存</button>
</div>
</div>
</script>
<!--编辑关联参数-->
<script type="text/html" id="editAttribute">
<div class="layui-form">
<div class="layui-form-item">
<label class="layui-form-label"><span class="required">*</span></label>
<div class="layui-input-block">
<input name="attr_name" type="text" value="{{d.attr_name}}" placeholder="请输入参数名称" lay-verify="required" class="layui-input len-long" autocomplete="off">
</div>
</div>
<div class="layui-form-item">
<label class="layui-form-label">参数类型</label>
<div class="layui-input-block len-mid">
<select name="attr_type" lay-filter="attr_type">
{{# if(d.attr_type == 1){ }}
<option value="1" disabled selected>单选</option>
{{# }else if(d.attr_type == 2){ }}
<option value="2" disabled selected>多选</option>
{{# }else if(d.attr_type == 3){ }}
<option value="3" disabled selected>输入</option>
{{# } }}
</select>
</div>
<div class="word-aux">
<p>注意参数类型不可更改输入不参与筛选</p>
</div>
</div>
{{# if(d.attr_type == 1 || d.attr_type == 2){ }}
<div class="attribute-value-list">
<table class="layui-table">
<colgroup>
<col width="60%">
<col width="40%">
</colgroup>
<thead>
<tr>
<th>参数名称</th>
<th>操作</th>
</tr>
</thead>
</table>
<div class="table-wrap">
<table class="layui-table">
<colgroup>
<col width="60%">
<col width="40%">
</colgroup>
<tbody></tbody>
</table>
</div>
<button class="layui-btn layui-btn-primary" type="button" onclick="addAttrValue()">添加参数</button>
</div>
{{# } }}
<input type="hidden" name="attr_class_id" value="{$attr_class_info['class_id']}">
<input type="hidden" name="attr_class_name" value="{$attr_class_info['class_name']}">
<input type="hidden" name="attr_id" value="{{d.attr_id}}">
<div class="form-row">
<button class="layui-btn" lay-submit lay-filter="save_edit_attribute">保存</button>
</div>
</div>
</script>
</div>
</div>
<script type="text/html" id="editSort">
<input name="sort" type="number" onchange="editSort({{d.attr_class_id}},{{d.attr_id}},this)" value="{{d.sort}}" placeholder="请输入排序" class="layui-input edit-sort len-short">
</script>
<script>
var attr_class_id = "{$attr_class_info['class_id']}";
</script>
<script src="SHOP_JS/goods_edit_attr.js"></script>

View File

@@ -0,0 +1,236 @@
<!-- 搜索框 -->
<div class="single-filter-box">
<button class="layui-btn" onclick="addAttr()">添加商品参数模板</button>
<div class="layui-form">
<div class="layui-input-inline">
<input type="text" name="search_keys" placeholder="请输入商品参数模板名称" autocomplete="off" class="layui-input">
<button type="button" class="layui-btn layui-btn-primary" lay-filter="search" lay-submit>
<i class="layui-icon">&#xe615;</i>
</button>
</div>
</div>
</div>
<!-- 列表 -->
<table id="attr_class_list" lay-filter="attr_class_list"></table>
<!-- 操作 -->
<script type="text/html" id="operation">
<div class="table-btn">
<a class="layui-btn" lay-event="edit">管理</a>
<a class="layui-btn" lay-event="delete">删除</a>
</div>
</script>
<script type="text/html" id="addAttr">
<div class="layui-form">
<div class="layui-form-item">
<label class="layui-form-label mid"><span class="required">*</span></label>
<div class="layui-input-block">
<input name="class_name" type="text" placeholder="请输入商品参数名称" lay-verify="required" class="layui-input len-mid" maxlength="20">
</div>
</div>
<div class="layui-form-item">
<label class="layui-form-label mid">排序</label>
<div class="layui-input-block">
<input name="sort" type="number" value="0" placeholder="请输入排序" lay-verify="num" class="layui-input len-short">
</div>
<p class="word-aux mid">排序值必须为整数</p>
</div>
<div class="form-row mid">
<button class="layui-btn" lay-submit lay-filter="save">保存</button>
<button class="layui-btn layui-btn-primary" onclick="closeAttrLayer()">返回</button>
</div>
</div>
</script>
<script type="text/html" id="editSort">
<input name="sort" type="number" onchange="editSort({{d.class_id}},this)" value="{{d.sort}}" placeholder="请输入排序" class="layui-input edit-sort len-short">
</script>
<script>
var laytpl, add_attr_index = -1,
form, table;
layui.use(['form', 'laytpl'], function() {
var repeat_flag = false; //防重复标识
laytpl = layui.laytpl;
form = layui.form;
form.render();
table = new Table({
elem: '#attr_class_list',
url: ns.url("shop/goodsattr/lists"),
cols: [
[ {
field: 'class_name',
title: '模板名称',
width: '50%',
unresize: 'false'
}, {
field: 'sort',
unresize: 'false',
title: '排序',
width: '30%',
sort : true,
templet: '#editSort'
}, {
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/goodsattr/editattr?class_id=" + data.class_id);
break;
case 'delete':
deleteAttr(data.class_id);
break;
}
});
/**
* 删除
*/
function deleteAttr(class_id) {
layer.confirm('删除商品参数后将会删除对应关联关系,移除后数据会发生不可逆转的行为,请谨慎操作', function(index) {
layer.close(index);
$.ajax({
url: ns.url("shop/goodsattr/deleteAttr"),
data: {
class_id
},
dataType: 'JSON',
type: 'POST',
success: function(res) {
layer.msg(res.message);
if (res.code == 0) {
table.reload();
}
}
});
});
}
table.on("sort",function (obj) {
table.reload({
page: {
curr: 1
},
where: {
order:obj.field,
sort:obj.type
}
});
});
/**
* 搜索功能
*/
form.on('submit(search)', function(data) {
table.reload({
page: {
curr: 1
},
where: data.field
});
});
form.on('submit(save)', function(data) {
if (repeat_flag) return false;
repeat_flag = true;
$.ajax({
url: '{:addon_url("shop/goodsattr/addAttr")}',
data: data.field,
dataType: 'JSON',
type: 'POST',
success: function(data) {
layer.msg(data.message);
if (data.code == 0) {
table.reload();
layer.close(add_attr_index);
}
repeat_flag = false;
}
});
return false;
});
/**
* 表单验证
*/
form.verify({
num: function(value) {
if (value == '') {
return;
}
if (value % 1 != 0) {
return '排序数值必须为整数';
}
if (value < 0) {
return '排序数值必须为大于0';
}
}
});
});
// 监听单元格编辑
function editSort(id, event) {
var data = $(event).val();
if (!new RegExp("^-?[1-9]\\d*$").test(data)) {
layer.msg("排序号只能是整数");
return;
}
if(data<0){
layer.msg("排序号必须大于0");
return ;
}
$.ajax({
type: 'POST',
url: ns.url("shop/goodsattr/modifySort"),
data: {
sort: data,
class_id: id
},
dataType: 'JSON',
success: function(res) {
layer.msg(res.message);
if (res.code == 0) {
table.reload();
}
}
});
}
function addAttr() {
var add_attr = $("#addAttr").html();
laytpl(add_attr).render({}, function(html) {
add_attr_index = layer.open({
title: '添加商品参数',
skin: 'layer-tips-class',
type: 1,
area: ['500px', '250px'],
content: html
});
});
}
function closeAttrLayer() {
layer.close(add_attr_index);
}
</script>