更新资源编辑

This commit is contained in:
2025-06-09 15:33:30 +08:00
parent 876e1092cc
commit 234fc206d5
18 changed files with 1720 additions and 179 deletions
+112 -28
View File
@@ -28,7 +28,7 @@
</select>
</div>
</div>
<div class="layui-form-item">
<label class="layui-form-label">资源编号</label>
<div class="layui-input-block">
@@ -40,7 +40,8 @@
<div class="layui-form-item">
<label class="layui-form-label">描述</label>
<div class="layui-input-block">
<textarea name="desc" placeholder="请输入资源描述" class="layui-textarea" lay-affix="clear">{$resource.desc|default=''}</textarea>
<textarea name="desc" placeholder="请输入资源描述" class="layui-textarea"
lay-affix="clear">{$resource.desc|default=''}</textarea>
</div>
</div>
@@ -76,8 +77,8 @@
<div class="layui-form-item">
<label class="layui-form-label">资源文件</label>
<div class="layui-input-block">
<input type="text" name="fileurl" required placeholder="本地资源地址" autocomplete="off"
class="layui-input" value="{$resource.fileurl|default=''}" style="margin-bottom: 10px;" lay-affix="clear">
<input type="text" name="fileurl" required placeholder="本地资源地址" autocomplete="off" class="layui-input"
value="{$resource.fileurl|default=''}" style="margin-bottom: 10px;" lay-affix="clear">
<div class="layui-upload-drag" style="display: block;" id="ID-upload-demo-drag">
<i class="layui-icon layui-icon-upload"></i>
<div>点击上传,或将文件拖拽到此处</div>
@@ -90,7 +91,8 @@
</div>
</div>
</div>
<div class="layui-progress layui-progress-big" lay-showPercent="yes" lay-filter="file-progress" style="margin-top: 10px;">
<div class="layui-progress layui-progress-big" lay-showPercent="yes" lay-filter="file-progress"
style="margin-top: 10px;">
<div class="layui-progress-bar" lay-percent=""></div>
</div>
<input type="hidden" name="file" id="file" value="">
@@ -105,26 +107,56 @@
</div>
</div>
<div class="layui-form-item">
<label class="layui-form-label">图片上传</label>
<div class="layui-input-block">
<div class="layui-upload">
<button type="button" class="layui-btn" id="imageUpload">多图片上传</button>
<blockquote class="layui-elem-quote layui-quote-nm" style="margin-top: 10px;">
预览图:
<div class="layui-upload-list" id="imagePreview" style="display: flex; flex-direction: column;">
{if condition="$resource.images"}
{foreach name="images" item="image" explode=",", $resource.images}
<div class="layui-upload-img-item" data-src="{$image}">
<img src="{$image}" alt="已上传图片" style="width: 100px; height: 100px; object-fit: cover;">
<p>{$image|basename}</p>
<button type="button"
class="layui-btn layui-btn-xs layui-btn-danger delete-image">删除</button>
</div>
{/foreach}
{/if}
</div>
</blockquote>
</div>
<div class="layui-progress layui-progress-big" lay-showPercent="yes" lay-filter="image-progress"
style="margin-top: 10px;">
<div class="layui-progress-bar" lay-percent=""></div>
</div>
<input type="hidden" name="images" id="images" value="{$resource.images|default=''}">
</div>
</div>
<div class="layui-form-item">
<label class="layui-form-label">分享码</label>
<div class="layui-input-block">
<input type="text" name="code" required placeholder="请输入分享码" autocomplete="off"
class="layui-input" value="{$resource.code|default=''}" lay-affix="clear">
<input type="text" name="code" required placeholder="请输入分享码" autocomplete="off" class="layui-input"
value="{$resource.code|default=''}" lay-affix="clear">
</div>
</div>
<div class="layui-form-item">
<label class="layui-form-label">解压密码</label>
<div class="layui-input-block">
<input type="text" name="zipcode" required placeholder="请输入解压密码" autocomplete="off"
class="layui-input" value="{$resource.zipcode|default=''}" lay-affix="clear">
<input type="text" name="zipcode" required placeholder="请输入解压密码" autocomplete="off" class="layui-input"
value="{$resource.zipcode|default=''}" lay-affix="clear">
</div>
</div>
<div class="layui-form-item">
<label class="layui-form-label">排序</label>
<div class="layui-input-block">
<input type="number" name="sort" value="{$resource.sort|default='0'}" class="layui-input" placeholder="数字越大越靠前" lay-affix="clear">
<input type="number" name="sort" value="{$resource.sort|default='0'}" class="layui-input"
placeholder="数字越大越靠前" lay-affix="clear">
</div>
</div>
@@ -159,13 +191,13 @@
// 获取资源详情
var resourceId = $('input[name="id"]').val();
var resourceData = null;
if (resourceId) {
$.get('{:url("resources/get")}', {id: resourceId}, function(res) {
$.get('{:url("resources/get")}', { id: resourceId }, function (res) {
if (res.code == 0) {
resourceData = res.data;
console.log('Resource data:', resourceData); // 调试输出
// 设置表单值
$('input[name="title"]').val(resourceData.title || '');
$('select[name="cate"]').val(resourceData.cate || '');
@@ -177,12 +209,12 @@
$('input[name="sort"]').val(resourceData.sort || '0');
$('input[name="icon"]').val(resourceData.icon || '');
$('input[name="file"]').val(resourceData.file || '');
// 设置图标预览
if (resourceData.icon) {
$('#upload-img').attr('src', resourceData.icon);
}
// 设置文件预览
if (resourceData.file) {
$('#ID-upload-demo-preview').show();
@@ -211,7 +243,7 @@
$('#upload-text').html('');
layer.msg('图标上传成功', { icon: 1 });
},
uploadError: function () {
error: function () {
var demoText = $('#upload-text');
demoText.html('<span style="color: #FF5722;">上传失败</span> <a class="layui-btn layui-btn-xs demo-reload">重试</a>');
demoText.find('.demo-reload').on('click', function () {
@@ -226,6 +258,58 @@
}
});
// 多图片上传
var uploadInst = upload.render({
elem: '#imageUpload',
url: '{:url("index/upload_img")}',
multiple: true,
accept: 'images',
before: function (obj) {
obj.preview(function (index, file, result) {
$('#imagePreview').append('<div class="layui-upload-img-item" data-src="' + result + '"><img src="' + result + '" alt="' + file.name + '" style="width: 100px; height: 100px; object-fit: cover;"><p>' + file.name + '</p><button type="button" class="layui-btn layui-btn-xs layui-btn-danger delete-image">删除</button></div>');
});
element.progress('image-progress', '0%');
layer.msg('图片上传中', { icon: 16, time: 0 });
},
done: function (res) {
if (res.code > 0) {
return layer.msg('图片上传失败');
}
var images = $('#images').val().split(',');
if (res.data) {
images.push(res.data);
}
$('#images').val(images.filter(Boolean).join(','));
layer.msg('图片上传成功', { icon: 1 });
},
error: function () {
var demoText = $('#imagePreview');
demoText.append('<span style="color: #FF5722;">上传失败</span> <a class="layui-btn layui-btn-xs demo-reload">重试</a>');
demoText.find('.demo-reload').on('click', function () {
uploadInst.upload();
});
},
progress: function (n, elem, e) {
element.progress('image-progress', n + '%');
if (n == 100) {
layer.msg('图片上传完毕', { icon: 1 });
}
}
});
// 删除图片功能
$('#imagePreview').on('click', '.delete-image', function () {
var $item = $(this).closest('.layui-upload-img-item');
var imageSrc = $item.data('src');
var images = $('#images').val().split(',');
var index = images.indexOf(imageSrc);
if (index > -1) {
images.splice(index, 1);
}
$('#images').val(images.join(','));
$item.remove();
});
// 文件上传
var fileUpload = upload.render({
elem: '#ID-upload-demo-drag',
@@ -274,7 +358,7 @@
if (res.code == 0) {
// 存储分类数据供后续使用
window.categoryData = res.data;
var html = '<option value="">请选择分类</option>';
res.data.forEach(function (item) {
html += '<option value="' + item.id + '">' + item.name + '</option>';
@@ -285,11 +369,11 @@
}
});
$('select[name="cate"]').html(html);
// 如果有资源数据,设置分类值
if (resourceData && resourceData.cate) {
console.log('Setting cate value:', resourceData.cate); // 调试输出
setTimeout(function() {
setTimeout(function () {
$('select[name="cate"]').val(resourceData.cate);
form.render('select');
}, 100);
@@ -300,7 +384,7 @@
});
// 监听分类选择变化
form.on('select(cate)', function(data) {
form.on('select(cate)', function (data) {
var selectedId = data.value;
if (!selectedId) {
$('input[name="number"]').val('');
@@ -311,9 +395,9 @@
var parentCategory = null;
var childCategory = null;
window.categoryData.forEach(function(parent) {
window.categoryData.forEach(function (parent) {
if (parent.children) {
parent.children.forEach(function(child) {
parent.children.forEach(function (child) {
if (child.id == selectedId) {
parentCategory = parent;
childCategory = child;
@@ -330,7 +414,7 @@
var nextNumber = isInitialCategory ? total : total + 1;
var numberStr = nextNumber.toString().padStart(5, '0');
var resourceNumber = parentCategory.number + childCategory.number + numberStr;
// 设置资源编号
$('input[name="number"]').val(resourceNumber);
}
@@ -342,7 +426,7 @@
var content = editor.getHtml();
var loadIndex = layer.load(2);
data.field.content = content;
$.ajax({
url: '{:url("resources/edit")}',
type: 'POST',
@@ -363,7 +447,7 @@
});
// 重置按钮点击事件
$('button[type="reset"]').on('click', function() {
$('button[type="reset"]').on('click', function () {
// 重新加载分类列表
$.get('{:url("resources/getcate")}', function (res) {
if (res.code == 0) {
@@ -377,10 +461,10 @@
}
});
$('select[name="cate"]').html(html);
// 如果有资源数据,设置分类值
if (resourceData && resourceData.cate) {
setTimeout(function() {
setTimeout(function () {
$('select[name="cate"]').val(resourceData.cate);
form.render('select');
}, 100);
@@ -399,7 +483,7 @@
<script>
const { createEditor, createToolbar } = window.wangEditor
const editorConfig = {
const editorConfig = {
MENU_CONF: {},
placeholder: '请输入内容...',
onChange(editor) {