manghe/app/admin/view/FFProducts/edit.html
2025-06-25 18:26:26 +08:00

448 lines
16 KiB
HTML

{include file="Public/header3" /}
<link href="https://unpkg.com/@wangeditor/editor@latest/dist/css/style.css" rel="stylesheet" />
<style>
#editorwrapper {
border: 1px solid #ccc;
z-index: 100;
}
#toolbar-container {
border-bottom: 1px solid #ccc;
}
#editor-container {
height: 500px;
}
.category-checkbox {
display: inline-block;
margin-right: 15px;
margin-bottom: 10px;
}
.custom-checkbox {
margin-right: 5px;
vertical-align: middle;
}
.category-label {
display: inline-block;
padding: 5px 10px;
border: 1px solid #e6e6e6;
background-color: #f2f2f2;
border-radius: 3px;
cursor: pointer;
margin-bottom: 5px;
font-size: 13px;
}
.category-label:hover {
background-color: #e6e6e6;
}
.category-label.checked {
background-color: #009688;
color: #fff;
border-color: #009688;
}
</style>
<body>
<div class="layui-form" style="width: 90%; margin: 0 auto; padding-top: 20px;">
<input type="hidden" name="id" value="{$info.id}">
<div class="layui-form-item">
<label class="layui-form-label">商品名称</label>
<div class="layui-input-block">
<input type="text" name="product_name" id="product_name" autocomplete="off" placeholder="请输入商品名称"
class="layui-input" lay-verify="required" value="{$info.product_name}">
</div>
</div>
<div class="layui-form-item">
<label class="layui-form-label">所属分类</label>
<div class="layui-input-block" id="categoriesContainer">
{foreach $categories as $category}
<label class="category-label {if in_array($category.category_name, $selectedCategories)}checked{/if}">
<input type="checkbox" lay-ignore class="custom-checkbox" name="categories[]" value="{$category.category_name}" style="display:none;" {if in_array($category.category_name, $selectedCategories)}checked{/if}>
{$category.category_name}
</label>
{/foreach}
</div>
</div>
<div class="layui-form-item">
<div class="layui-inline">
<label class="layui-form-label">商品价格</label>
<div class="layui-input-inline">
<input type="text" name="price" id="price" autocomplete="off" placeholder="请输入价格" class="layui-input"
lay-verify="required|number" value="{$info.price}">
</div>
</div>
<div class="layui-inline">
<label class="layui-form-label">商品库存</label>
<div class="layui-input-inline">
<input type="text" name="stock" id="stock" autocomplete="off" placeholder="请输入库存" class="layui-input"
lay-verify="required|number" value="{$info.stock}">
</div>
</div>
<div class="layui-inline">
<label class="layui-form-label">剩余库存</label>
<div class="layui-input-inline">
<input type="text" name="sales" id="sales" autocomplete="off" placeholder="请输入销量" class="layui-input"
value="{$info.sales}">
</div>
</div>
</div>
<div class="layui-form-item">
<label class="layui-form-label">封面图</label>
<div class="layui-input-block">
<button type="button" class="layui-btn" id="uploadCover">上传封面图</button>
<div class="layui-upload-list">
<img class="layui-upload-img" id="coverPreview" style="max-width: 200px; max-height: 150px;"
src="{$info.cover_image}">
</div>
<input type="hidden" name="cover_image" id="cover_image" value="{$info.cover_image}">
</div>
</div>
<div class="layui-form-item">
<label class="layui-form-label">详情图片1</label>
<div class="layui-input-block">
<button type="button" class="layui-btn" id="uploadDetail1">上传详情图1</button>
<div class="layui-upload-list">
<img class="layui-upload-img" id="detail1Preview" style="max-width: 200px; max-height: 150px;"
src="{$info.detail_image1}">
</div>
<input type="hidden" name="detail_image1" id="detail_image1" value="{$info.detail_image1}">
</div>
</div>
<div class="layui-form-item">
<label class="layui-form-label">详情图片2</label>
<div class="layui-input-block">
<button type="button" class="layui-btn" id="uploadDetail2">上传详情图2</button>
<div class="layui-upload-list">
<img class="layui-upload-img" id="detail2Preview" style="max-width: 200px; max-height: 150px;"
src="{$info.detail_image2}">
</div>
<input type="hidden" name="detail_image2" id="detail_image2" value="{$info.detail_image2}">
</div>
</div>
<div class="layui-form-item">
<label class="layui-form-label">详情图片3</label>
<div class="layui-input-block">
<button type="button" class="layui-btn" id="uploadDetail3">上传详情图3</button>
<div class="layui-upload-list">
<img class="layui-upload-img" id="detail3Preview" style="max-width: 200px; max-height: 150px;"
src="{$info.detail_image3}">
</div>
<input type="hidden" name="detail_image3" id="detail_image3" value="{$info.detail_image3}">
</div>
</div>
<div class="layui-form-item">
<label class="layui-form-label">详情图片4</label>
<div class="layui-input-block">
<button type="button" class="layui-btn" id="uploadDetail4">上传详情图4</button>
<div class="layui-upload-list">
<img class="layui-upload-img" id="detail4Preview" style="max-width: 200px; max-height: 150px;"
src="{$info.detail_image4}">
</div>
<input type="hidden" name="detail_image4" id="detail_image4" value="{$info.detail_image4}">
</div>
</div>
<div class="layui-form-item">
<label class="layui-form-label">商品描述</label>
<div class="layui-input-block">
<textarea name="product_desc" id="product_desc" placeholder="请输入商品描述"
class="layui-textarea">{$info.product_desc}</textarea>
</div>
</div>
<div class="layui-form-item">
<label class="layui-form-label">详情内容</label>
<div class="layui-input-block">
<div id="editor—wrapper">
<div id="toolbar-container"><!-- 工具栏 --></div>
<div id="editor-container"><!-- 编辑器 --></div>
</div>
</div>
</div>
<div class="layui-form-item">
<div class="layui-inline">
<label class="layui-form-label">商品状态</label>
<div class="layui-input-inline">
<input type="radio" name="status" value="0" title="下架" {if $info.status eq 0}checked{/if}>
<input type="radio" name="status" value="1" title="上架" {if $info.status eq 1}checked{/if}>
</div>
</div>
</div>
<div class="layui-form-item">
<div class="layui-inline">
<label class="layui-form-label">热销商品</label>
<div class="layui-input-inline">
<input type="radio" name="is_hot" value="0" title="否" {if $info.is_hot eq 0}checked{/if}>
<input type="radio" name="is_hot" value="1" title="是" {if $info.is_hot eq 1}checked{/if}>
</div>
</div>
<div class="layui-inline">
<label class="layui-form-label">新品</label>
<div class="layui-input-inline">
<input type="radio" name="is_new" value="0" title="否" {if $info.is_new eq 0}checked{/if}>
<input type="radio" name="is_new" value="1" title="是" {if $info.is_new eq 1}checked{/if}>
</div>
</div>
<div class="layui-inline">
<label class="layui-form-label">推荐</label>
<div class="layui-input-inline">
<input type="radio" name="is_recommend" value="0" title="否" {if $info.is_recommend eq 0}checked{/if}>
<input type="radio" name="is_recommend" value="1" title="是" {if $info.is_recommend eq 1}checked{/if}>
</div>
</div>
</div>
<div class="layui-form-item">
<div class="layui-input-block">
<button class="layui-btn" lay-submit lay-filter="saveBtn">保存</button>
</div>
</div>
</div>
</body>
{include file="Public/footer" /}
<script src="https://unpkg.com/@wangeditor/editor@latest/dist/index.js"></script>
<script>
const { createEditor, createToolbar } = window.wangEditor
const editorConfig = {
placeholder: 'Type here...',
onChange(editor) {
const html = editor.getHtml()
console.log('editor content', html)
},
MENU_CONF: {}
}
editorConfig.MENU_CONF['uploadImage'] = {
customUpload: async (file, insertFn) => {
console.log(file);
// 上传图片
const formData = new FormData();
formData.append('file', file);
const res = await fetch('/admin/picture?dir=products', {
method: 'POST',
body: formData
});
console.log("res", res);
const result = await res.json();
// 成功后插入图片
insertFn(result.data.imgurl, '图片描述', result.data.imgurl);
}
}
const editor = createEditor({
selector: '#editor-container',
html: '{$info.detail_html|raw}',
config: editorConfig,
mode: 'default',
})
const toolbarConfig = {}
const toolbar = createToolbar({
editor,
selector: '#toolbar-container',
config: toolbarConfig,
mode: 'default',
})
layui.use(['form', 'upload', 'layer', 'laydate'], function () {
var form = layui.form,
layer = layui.layer,
upload = layui.upload,
$ = layui.jquery;
// 自定义复选框的点击事件
$('.category-label').click(function() {
// 获取隐藏的checkbox
var checkbox = $(this).find('.custom-checkbox');
// 切换选中状态
if(checkbox.prop('checked')) {
checkbox.prop('checked', false);
$(this).removeClass('checked');
} else {
checkbox.prop('checked', true);
$(this).addClass('checked');
}
});
// 封面图上传
upload.render({
elem: '#uploadCover',
url: '/admin/picture',
accept: "file",
data: {
dir: 'products'
},
done: function (res) {
if (res.status == 1) {
layer.msg("上传成功", { icon: 1, time: 1000 }, function () {
$("#coverPreview").attr("src", res.data.path);
$("#cover_image").val(res.data.imgurl);
});
} else {
layer.msg(res.msg, { icon: 2, anim: 6, time: 1500 });
}
},
error: function () {
layer.msg('服务繁忙,请稍后再试', { icon: 2, anim: 6, time: 1500 });
}
});
// 详情图1上传
upload.render({
elem: '#uploadDetail1',
url: '/admin/picture',
accept: "file",
data: {
dir: 'products'
},
done: function (res) {
if (res.status == 1) {
layer.msg("上传成功", { icon: 1, time: 1000 }, function () {
$("#detail1Preview").attr("src", res.data.path);
$("#detail_image1").val(res.data.imgurl);
});
} else {
layer.msg(res.msg, { icon: 2, anim: 6, time: 1500 });
}
},
error: function () {
layer.msg('服务繁忙,请稍后再试', { icon: 2, anim: 6, time: 1500 });
}
});
// 详情图2上传
upload.render({
elem: '#uploadDetail2',
url: '/admin/picture',
accept: "file",
data: {
dir: 'products'
},
done: function (res) {
if (res.status == 1) {
layer.msg("上传成功", { icon: 1, time: 1000 }, function () {
$("#detail2Preview").attr("src", res.data.path);
$("#detail_image2").val(res.data.imgurl);
});
} else {
layer.msg(res.msg, { icon: 2, anim: 6, time: 1500 });
}
},
error: function () {
layer.msg('服务繁忙,请稍后再试', { icon: 2, anim: 6, time: 1500 });
}
});
// 详情图3上传
upload.render({
elem: '#uploadDetail3',
url: '/admin/picture',
accept: "file",
data: {
dir: 'products'
},
done: function (res) {
if (res.status == 1) {
layer.msg("上传成功", { icon: 1, time: 1000 }, function () {
$("#detail3Preview").attr("src", res.data.path);
$("#detail_image3").val(res.data.imgurl);
});
} else {
layer.msg(res.msg, { icon: 2, anim: 6, time: 1500 });
}
},
error: function () {
layer.msg('服务繁忙,请稍后再试', { icon: 2, anim: 6, time: 1500 });
}
});
// 详情图4上传
upload.render({
elem: '#uploadDetail4',
url: '/admin/picture',
accept: "file",
data: {
dir: 'products'
},
done: function (res) {
if (res.status == 1) {
layer.msg("上传成功", { icon: 1, time: 1000 }, function () {
$("#detail4Preview").attr("src", res.data.path);
$("#detail_image4").val(res.data.imgurl);
});
} else {
layer.msg(res.msg, { icon: 2, anim: 6, time: 1500 });
}
},
error: function () {
layer.msg('服务繁忙,请稍后再试', { icon: 2, anim: 6, time: 1500 });
}
});
// 表单提交
form.on('submit(saveBtn)', function (data) {
// 获取富文本编辑器内容
data.field.detail_html = editor.getHtml();
if (!data.field.product_name) {
layer.msg('商品名称不能为空', { icon: 2 });
return false;
}
if (!data.field.price) {
layer.msg('商品价格不能为空', { icon: 2 });
return false;
}
// 检查是否选择了分类
var selectedCategories = [];
$('.custom-checkbox:checked').each(function() {
selectedCategories.push($(this).val());
});
if (selectedCategories.length === 0) {
layer.msg('请至少选择一个分类', { icon: 2 });
return false;
}
$.ajax({
url: '{:url("/admin/ff_products_edit")}',
type: 'POST',
data: data.field,
success: function (res) {
if (res.status) {
layer.msg(res.msg, { icon: 1, time: 1000 }, function () {
parent.layui.table.reload('tableList');
var iframeIndex = parent.layer.getFrameIndex(window.name);
parent.layer.close(iframeIndex);
});
} else {
layer.msg(res.msg, { icon: 2 });
}
}
});
return false;
});
});
</script>