Files
SMANAGE/TempLate/Manage/WorkGroup/TaskShop.html
T
2026-06-16 11:55:14 +08:00

431 lines
20 KiB
HTML
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.
<!DOCTYPE html>
<html class="x-admin-sm">
<head>
<meta charset="UTF-8">
<title>银河锋锐工作室账户后台系统</title>
<meta name="renderer" content="webkit">
<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
<link rel="stylesheet" href="/css/font.css">
<link rel="stylesheet" href="/css/xadmin.css">
<link rel="stylesheet" href="/css/win10ui.css">
<link rel="stylesheet" href="/css/theme.css">
<script type="text/javascript" src="/lib/layui/layui.js" charset="utf-8"></script>
<script type="text/javascript" src="/js/xadmin.js"></script>
<script type="text/javascript" src="/js/tables.js"></script>
<style>
.task-card {
margin: 15px;
border: 1px solid #e6e6e6;
border-radius: 4px;
overflow: hidden;
transition: all 0.3s;
}
.task-card:hover {
box-shadow: 0 0 15px rgba(0,0,0,0.1);
transform: translateY(-2px);
}
.task-card .layui-card-header {
font-weight: bold;
padding: 10px 15px;
}
.task-card .layui-card-body {
padding: 15px;
}
.task-img {
width: 100%;
height: 180px;
object-fit: cover;
margin-bottom: 15px;
}
.task-desc {
margin-bottom: 10px;
color: #666;
height: 60px;
overflow: hidden;
text-overflow: ellipsis;
display: -webkit-box;
-webkit-line-clamp: 3;
-webkit-box-orient: vertical;
}
.task-info {
margin-bottom: 10px;
font-size: 14px;
}
.task-info span {
margin-right: 15px;
display: inline-block;
margin-bottom: 5px;
}
.task-reward {
color: #FF5722;
font-weight: bold;
}
.task-status {
float: right;
color: #999;
font-size: 12px;
}
.task-actions {
text-align: right;
margin-top: 15px;
}
.task-actions .layui-btn {
margin-left: 10px;
}
.task-lock {
color: #1E9FFF;
}
.task-filter {
margin: 15px;
padding: 10px;
background-color: #f8f9fa;
border-radius: 4px;
}
.task-filter .layui-form-item {
margin-bottom: 0;
}
.task-filter .layui-input-block {
margin-left: 80px;
}
.task-empty {
text-align: center;
padding: 50px 0;
color: #999;
}
</style>
<!--[if lt IE 9]>
<script src="https://cdn.staticfile.org/html5shiv/r29/html5.min.js"></script>
<script src="https://cdn.staticfile.org/respond.js/1.4.2/respond.min.js"></script>
<![endif]-->
</head>
<body>
<div class="x-nav">
<span class="layui-breadcrumb">
<a>首页</a>
<a>工作室-工作组</a>
<a><cite>任务市场</cite></a>
</span>
<a class="layui-btn layui-btn-small" style="line-height:1.6em;margin-top:3px;float:right" onclick="location.reload()" title="刷新">
<i class="layui-icon layui-icon-refresh" style="line-height:30px"></i>
</a>
</div>
<!-- 任务筛选 -->
<div class="task-filter">
<form class="layui-form" action="" id="taskFilterForm">
<div class="layui-form-item">
<label class="layui-form-label">任务状态</label>
<div class="layui-input-block">
<input type="radio" name="status" value="" title="全部" checked>
<input type="radio" name="status" value="open" title="可接单">
<input type="radio" name="status" value="locked" title="已接单">
<input type="radio" name="status" value="completed" title="已完成">
</div>
</div>
<div class="layui-form-item">
<label class="layui-form-label">关键词</label>
<div class="layui-input-inline">
<input type="text" name="keyword" placeholder="请输入关键词" autocomplete="off" class="layui-input" id="keywordInput">
</div>
<button class="layui-btn" lay-submit lay-filter="taskFilter" id="searchButton">搜索</button>
</div>
</form>
</div>
<!-- 任务列表 -->
<div class="layui-row layui-col-space15" id="taskList">
<!-- 任务卡片将通过JavaScript动态生成 -->
</div>
<!-- 查看任务详情的弹窗内容 -->
<div id="taskDetailModal" style="display: none;">
<div class="layui-form" lay-filter="taskDetailForm">
<div class="layui-form-item">
<label class="layui-form-label">任务标题</label>
<div class="layui-input-block">
<input type="text" name="title" readonly class="layui-input">
</div>
</div>
<div class="layui-form-item">
<label class="layui-form-label">任务描述</label>
<div class="layui-input-block">
<textarea name="description" readonly class="layui-textarea"></textarea>
</div>
</div>
<div class="layui-form-item">
<label class="layui-form-label">发起者</label>
<div class="layui-input-block">
<input type="text" name="creator" readonly 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="deadline" readonly 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="reward" readonly 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="locker" readonly 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="statusText" readonly class="layui-input">
</div>
</div>
</div>
</div>
<script>
layui.use(['form', 'layer', 'jquery'], function(){
var form = layui.form;
var layer = layui.layer;
var $ = layui.jquery;
// 模拟任务数据
var tasks = [
{
id: 1,
title: "设计APP图标",
description: "为我们的新应用设计一套简洁现代的图标,包括启动图标和主要功能图标。要求风格统一,有创意,符合当代设计趋势。",
image: "https://picsum.photos/400/200?random=1",
creator: "张三",
deadline: "2025-07-15",
reward: "¥2000",
locker: "",
status: "open",
createTime: "2025-07-01"
},
{
id: 2,
title: "开发微信小程序",
description: "开发一个简单的微信小程序,实现商品展示、购物车和下单功能。需要与现有后端API对接,要求代码规范,界面美观。",
image: "https://picsum.photos/400/200?random=2",
creator: "李四",
deadline: "2025-07-30",
reward: "¥5000",
locker: "王五",
status: "locked",
createTime: "2025-06-28"
},
{
id: 3,
title: "撰写产品说明书",
description: "为我们的新产品撰写详细的使用说明书,包括功能介绍、操作指南、故障排除等内容。要求语言简洁明了,图文并茂。",
image: "https://picsum.photos/400/200?random=3",
creator: "赵六",
deadline: "2025-07-10",
reward: "¥800",
locker: "孙七",
status: "completed",
createTime: "2025-06-30"
},
{
id: 4,
title: "制作产品宣传视频",
description: "制作一个1-2分钟的产品宣传视频,展示产品特点和使用场景。要求画面精美,剪辑流畅,有吸引力。",
image: "https://picsum.photos/400/200?random=4",
creator: "周八",
deadline: "2025-08-05",
reward: "¥3500",
locker: "",
status: "open",
createTime: "2025-07-02"
},
{
id: 5,
title: "优化网站SEO",
description: "对我们的企业网站进行全面的SEO优化,包括关键词研究、页面优化、链接建设等。要求提高网站在搜索引擎中的排名。",
image: "https://picsum.photos/400/200?random=5",
creator: "吴九",
deadline: "2025-07-25",
reward: "¥4000",
locker: "郑十",
status: "locked",
createTime: "2025-06-25"
}
];
// 渲染任务列表
function renderTasks(filteredTasks) {
var taskList = $('#taskList');
taskList.empty();
if (filteredTasks.length === 0) {
taskList.append('<div class="task-empty">暂无符合条件的任务</div>');
return;
}
filteredTasks.forEach(function(task) {
var statusText = '';
var statusClass = '';
var canTake = false;
switch(task.status) {
case 'open':
statusText = '可接单';
statusClass = 'layui-bg-green';
canTake = true;
break;
case 'locked':
statusText = '已接单';
statusClass = 'layui-bg-blue';
break;
case 'completed':
statusText = '已完成';
statusClass = 'layui-bg-gray';
break;
}
var taskHtml = `
<div class="layui-col-md4 layui-col-sm6 layui-col-xs12">
<div class="task-card layui-card">
<div class="layui-card-header">
${task.title}
<span class="layui-badge ${statusClass} task-status">${statusText}</span>
</div>
<div class="layui-card-body">
<img src="${task.image}" alt="${task.title}配图" class="task-img">
<div class="task-desc">${task.description}</div>
<div class="task-info">
<span><i class="layui-icon layui-icon-user"></i> 发起者:${task.creator}</span>
<span><i class="layui-icon layui-icon-time"></i> 截止:${task.deadline}</span>
</div>
<div class="task-info">
<span class="task-reward"><i class="layui-icon layui-icon-money"></i> 奖励:${task.reward}</span>
${task.locker ? `<span class="task-lock"><i class="layui-icon layui-icon-username"></i> 接单人:${task.locker}</span>` : ''}
</div>
<div class="task-actions">
<button class="layui-btn layui-btn-primary layui-btn-sm" data-id="${task.id}" onclick="viewTask(${task.id})">
<i class="layui-icon layui-icon-eye"></i> 查看
</button>
${canTake ? `
<button class="layui-btn layui-btn-normal layui-btn-sm" data-id="${task.id}" onclick="takeTask(${task.id})">
<i class="layui-icon layui-icon-add-circle"></i> 我来做
</button>` : ''}
</div>
</div>
</div>
</div>`;
taskList.append(taskHtml);
});
}
// 任务筛选函数
function filterTasks() {
var status = $('input[name="status"]:checked').val();
var keyword = $('#keywordInput').val().toLowerCase();
var filtered = tasks.filter(function(task) {
var matchStatus = !status || task.status === status;
var matchKeyword = !keyword ||
task.title.toLowerCase().includes(keyword) ||
task.description.toLowerCase().includes(keyword) ||
task.creator.toLowerCase().includes(keyword);
return matchStatus && matchKeyword;
});
renderTasks(filtered);
}
// 初始渲染任务
renderTasks(tasks);
// 查看任务详情
window.viewTask = function(id) {
var task = tasks.find(function(t) {
return t.id === id;
});
if (task) {
var statusText = '';
switch(task.status) {
case 'open':
statusText = '可接单';
break;
case 'locked':
statusText = '已接单(' + task.locker + ')';
break;
case 'completed':
statusText = '已完成(' + task.locker + ')';
break;
}
form.val('taskDetailForm', {
"title": task.title,
"description": task.description,
"creator": task.creator,
"deadline": task.deadline,
"reward": task.reward,
"locker": task.locker || "无",
"statusText": statusText
});
layer.open({
type: 1,
title: '任务详情',
content: $('#taskDetailModal'),
area: ['600px', '500px'],
btn: ['关闭'],
btn1: function(index) {
layer.close(index);
}
});
}
};
// 接单操作
window.takeTask = function(id) {
var task = tasks.find(function(t) {
return t.id === id;
});
if (task && task.status === 'open') {
layer.confirm('确定要接下这个任务吗?', {
title: '接单确认',
btn: ['确认', '取消']
}, function() {
// 模拟接单成功
task.status = 'locked';
task.locker = '当前用户'; // 实际应用中应替换为当前登录用户
// 更新任务列表
renderTasks(tasks);
layer.msg('接单成功!', {icon: 1});
});
}
};
// 根据任务数量决定搜索方式
if (tasks.length < 50) {
// 任务数少于50,启用实时搜索
$('#keywordInput').on('input', filterTasks);
// 监听状态单选按钮变化
form.on('radio(status)', filterTasks);
// 隐藏搜索按钮
$('#searchButton').hide();
} else {
// 任务数大于等于50,使用传统搜索
form.on('submit(taskFilter)', function(data){
filterTasks();
return false;
});
}
});
</script>
</body>
</html>