yunzer/app/index/view/user/component/publishresource.php

375 lines
12 KiB
PHP
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<div class="publish-section">
<h2 class="section-title">发布资源</h2>
<p class="section-desc">发布您的应用、工具或其他资源,与用户分享</p>
<form class="layui-form" lay-filter="publishForm">
<div class="layui-form-item">
<label class="layui-form-label"><span class="layui-font-red">*</span>资源名称</label>
<div class="layui-input-block">
<input type="text" name="title" placeholder="请输入资源名称" class="layui-input" lay-verify="required"
lay-reqtext="资源名称不能为空" />
</div>
</div>
<div class="layui-form-item">
<label class="layui-form-label"><span class="layui-font-red">*</span>资源分类</label>
<div class="layui-input-block">
<select name="category" lay-verify="required" lay-reqtext="请选择资源分类">
<option value="">请选择分类</option>
<option value="app">应用软件</option>
<option value="tool">实用工具</option>
<option value="template">模板资源</option>
<option value="plugin">插件扩展</option>
<option value="other">其他资源</option>
</select>
</div>
</div>
<div class="layui-form-item layui-form-text">
<label class="layui-form-label"><span class="layui-font-red">*</span>资源描述</label>
<div class="layui-input-block">
<textarea name="description" placeholder="请详细描述资源的功能、特点和使用方法" class="layui-textarea" rows="6"
lay-verify="required" lay-reqtext="请填写资源描述"></textarea>
</div>
</div>
<div class="layui-form-item">
<label class="layui-form-label"><span class="layui-font-red">*</span>资源地址</label>
<div class="layui-input-block">
<input type="url" name="download_url" placeholder="请输入资源下载链接" class="layui-input"
lay-verify="required|url" lay-reqtext="请输入资源下载链接" />
</div>
</div>
<div class="layui-form-item">
<label class="layui-form-label">分享码</label>
<div class="layui-input-block">
<input type="text" name="share_code" placeholder="请输入资源分享码" class="layui-input" />
</div>
</div>
<div class="layui-form-item">
<label class="layui-form-label">解压密码</label>
<div class="layui-input-block">
<input type="text" name="extract_password" placeholder="请输入解压密码,没有可不填" class="layui-input" />
</div>
</div>
<div class="layui-form-item">
<label class="layui-form-label"><span class="layui-font-red">*</span>资源截图</label>
<div class="layui-input-block">
<div class="layui-upload">
<button type="button" class="layui-btn" id="uploadImagesBtn">上传截图</button>
<div class="layui-upload-list" id="uploadList"></div>
<span class="layui-word-aux">支持 JPG、PNG 格式,最多 5 </span>
</div>
<input type="hidden" name="images" id="imagesInput" lay-verify="required" lay-reqtext="请上传至少一张资源截图" />
</div>
</div>
<div class="layui-form-item">
<label class="layui-form-label">版本信息</label>
<div class="layui-input-block">
<input type="text" name="version" placeholder="请输入版本号" class="layui-input" />
</div>
</div>
<div class="layui-form-item">
<label class="layui-form-label">系统要求</label>
<div class="layui-input-block">
<input type="text" name="system_requirements" placeholder="Windows 10+, macOS 10.15+"
class="layui-input" />
</div>
</div>
<div class="layui-form-item">
<label class="layui-form-label"><span class="layui-font-red">*</span>授权方式</label>
<div class="layui-input-block">
<select name="license" lay-verify="required" lay-reqtext="请选择授权方式">
<option value="">请选择授权方式</option>
<option value="free">免费</option>
<option value="paid">付费</option>
<option value="trial">试用版</option>
<option value="open">开源</option>
</select>
</div>
</div>
<div class="layui-form-item">
<label class="layui-form-label">价格设置</label>
<div class="layui-input-block">
<input type="number" name="price" placeholder="请输入价格(付费资源必填)" class="layui-input" min="0" step="0.01" />
<span class="layui-word-aux">仅当授权方式为“付费”时必填</span>
</div>
</div>
<div class="layui-form-item">
<div class="layui-input-block">
<button type="submit" class="layui-btn" lay-submit lay-filter="publishSubmit">发布资源</button>
<button type="reset" class="layui-btn layui-btn-primary">重置表单</button>
</div>
</div>
</form>
</div>
<script>
layui.use(['form', 'layer', 'upload'], function () {
var form = layui.form;
var layer = layui.layer;
var upload = layui.upload;
var $ = layui.jquery;
// 表单提交
form.on('submit(publishSubmit)', function (data) {
var formData = data.field;
// 验证必填字段
if (!formData.title || !formData.category || !formData.description) {
layer.msg('请填写必填字段', { icon: 2 });
return false;
}
// 验证付费资源的价格
if (formData.license === 'paid' && (!formData.price || formData.price <= 0)) {
layer.msg('付费资源必须设置价格', { icon: 2 });
return false;
}
// 显示加载状态
var loadIndex = layer.load(1, { shade: [0.3, '#000'] });
// 模拟提交
setTimeout(function () {
layer.close(loadIndex);
layer.msg('资源发布成功!', { icon: 1 }, function () {
// 重置表单
form.val('publishForm', {
title: '',
category: '',
description: '',
tags: '',
download_url: '',
official_url: '',
version: '',
system_requirements: '',
license: 'free',
price: ''
});
// 清空上传的图片
$('#uploadList').empty().hide();
$('#uploadPlaceholder').show();
});
}, 1500);
return false;
});
// 图片上传处理
$('#uploadPlaceholder').on('click', function () {
$('#imageUpload').click();
});
$('#imageUpload').on('change', function (e) {
var files = e.target.files;
if (files.length > 5) {
layer.msg('最多只能上传5张图片', { icon: 2 });
return;
}
$('#uploadPlaceholder').hide();
$('#uploadList').show().empty();
for (var i = 0; i < files.length; i++) {
var file = files[i];
if (file.type.indexOf('image/') === -1) {
layer.msg('请选择图片文件', { icon: 2 });
continue;
}
var reader = new FileReader();
reader.onload = function (e) {
var imgHtml = `
<div class="upload-item">
<img src="${e.target.result}" alt="预览图" />
<div class="upload-actions">
<i class="layui-icon layui-icon-delete" onclick="removeImage(this)"></i>
</div>
</div>
`;
$('#uploadList').append(imgHtml);
};
reader.readAsDataURL(file);
}
});
// 删除图片
window.removeImage = function (element) {
$(element).closest('.upload-item').remove();
if ($('#uploadList .upload-item').length === 0) {
$('#uploadList').hide();
$('#uploadPlaceholder').show();
}
};
});
</script>
<style>
.layui-form-label {
width: 110px !important;
}
.layui-font-red {
margin-right: 4px;
}
.publish-section {
max-width: 800px;
margin: 0 auto;
}
.section-title {
font-size: 24px;
font-weight: 600;
color: #333;
margin-bottom: 8px;
padding-bottom: 16px;
border-bottom: 1px solid #f0f0f0;
}
.section-desc {
color: #666;
margin-bottom: 32px;
font-size: 14px;
line-height: 1.5;
}
.layui-form-label {
width: 120px;
}
.layui-input-block {
margin-left: 150px;
}
.layui-form-item {
margin-bottom: 24px;
}
.layui-input,
.layui-textarea,
.layui-select {
border-radius: 6px;
border: 1px solid #e8e8e8;
transition: all 0.3s;
}
.layui-input:focus,
.layui-textarea:focus,
.layui-select:focus {
border-color: #1677ff;
box-shadow: 0 0 0 2px rgba(22, 119, 255, 0.1);
}
.upload-area {
border: 2px dashed #d9d9d9;
border-radius: 8px;
padding: 20px;
text-align: center;
transition: all 0.3s;
cursor: pointer;
}
.upload-area:hover {
border-color: #1677ff;
background: #f8f9ff;
}
.upload-placeholder {
color: #999;
}
.upload-placeholder .layui-icon {
font-size: 48px;
color: #ccc;
margin-bottom: 16px;
}
.upload-placeholder p {
margin: 8px 0;
font-size: 16px;
color: #666;
}
.upload-placeholder span {
font-size: 12px;
color: #999;
}
.upload-list {
display: flex;
flex-wrap: wrap;
gap: 16px;
}
.upload-item {
position: relative;
width: 120px;
height: 120px;
border-radius: 8px;
overflow: hidden;
border: 1px solid #e8e8e8;
}
.upload-item img {
width: 100%;
height: 100%;
object-fit: cover;
}
.upload-actions {
position: absolute;
top: 0;
left: 0;
right: 0;
bottom: 0;
background: rgba(0, 0, 0, 0.5);
display: flex;
align-items: center;
justify-content: center;
opacity: 0;
transition: opacity 0.3s;
}
.upload-item:hover .upload-actions {
opacity: 1;
}
.upload-actions .layui-icon {
color: #fff;
font-size: 20px;
cursor: pointer;
}
.layui-btn {
border-radius: 6px;
padding: 0 24px;
height: 40px;
line-height: 40px;
font-size: 14px;
}
.layui-btn-primary {
border-color: #d9d9d9;
color: #666;
}
.layui-btn-primary:hover {
border-color: #1677ff;
color: #1677ff;
}
@media (max-width: 768px) {
.layui-form-label {
width: 100px;
}
.layui-input-block {
margin-left: 120px;
}
.upload-item {
width: 100px;
height: 100px;
}
}
</style>