feature: 面板
This commit is contained in:
parent
4f29e8bf82
commit
8fb4af1b47
|
|
@ -152,5 +152,28 @@ class Dashboard extends Backend
|
||||||
return $this->view->fetch();
|
return $this->view->fetch();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public function task_complete($ids = null)
|
||||||
|
{
|
||||||
|
|
||||||
|
$row = (new Task())->get($ids);
|
||||||
|
if (!$row) {
|
||||||
|
$this->error(__('No Results were found'));
|
||||||
|
}
|
||||||
|
if (false === $this->request->isPost()) {
|
||||||
|
$this->view->assign('row', $row);
|
||||||
|
return $this->view->fetch();
|
||||||
|
}
|
||||||
|
$params = $this->request->post('row/a');
|
||||||
|
|
||||||
|
$task = (new Task())->where('id', '=', $ids)->where('status', 1)->find();
|
||||||
|
|
||||||
|
if (!$task) {
|
||||||
|
$this->error('任务状态已变更,请刷新后操作');
|
||||||
|
}
|
||||||
|
$task->save(['status' => 3, 'prove_file_path' => $params['prove_file_path']]);
|
||||||
|
|
||||||
|
$this->success();
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -1,83 +1,114 @@
|
||||||
<style>
|
<style>
|
||||||
.note-card {
|
.dashboard {
|
||||||
width: 30%;
|
display: grid;
|
||||||
min-height: 150px;
|
grid-template-columns: repeat(3, 1fr); /* 三列 */
|
||||||
border-radius: 8px;
|
gap: 32px;
|
||||||
padding: 1rem;
|
width: 1200px; /* 根据需要调整 */
|
||||||
box-shadow: 2px 2px 8px rgba(0,0,0,0.1);
|
|
||||||
margin: 1rem;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
.note-container {
|
/* 每一类任务(每日/每周/每月) */
|
||||||
|
.section {
|
||||||
display: flex;
|
display: flex;
|
||||||
justify-content: space-between;
|
flex-direction: column;
|
||||||
flex-wrap: wrap;
|
gap: 16px;
|
||||||
}
|
}
|
||||||
|
|
||||||
.bg-orange {
|
/* 标题部分 */
|
||||||
background-color: #ff8c42;
|
.section-title {
|
||||||
|
font-size: 18px;
|
||||||
|
font-weight: 600;
|
||||||
|
display: flex;
|
||||||
|
align-items: center;
|
||||||
|
gap: 6px;
|
||||||
|
color: #333;
|
||||||
}
|
}
|
||||||
|
|
||||||
.bg-blue {
|
.section-title::before {
|
||||||
background-color: #4682b4;
|
content: "📌";
|
||||||
|
font-size: 20px;
|
||||||
}
|
}
|
||||||
|
|
||||||
.bg-purple {
|
/* 卡片样式 */
|
||||||
background-color: #8a2be2;
|
.card {
|
||||||
|
background: #fff;
|
||||||
|
border: 1px solid #e0e4e8;
|
||||||
|
border-radius: 6px;
|
||||||
|
padding: 16px 20px;
|
||||||
|
box-shadow: 0 2px 4px rgba(0, 0, 0, .04);
|
||||||
|
display: flex;
|
||||||
|
flex-direction: column;
|
||||||
|
gap: 8px;
|
||||||
|
transition: transform .15s ease, box-shadow .15s ease;
|
||||||
|
}
|
||||||
|
.card:hover {
|
||||||
|
transform: translateY(-2px);
|
||||||
|
box-shadow: 0 6px 12px rgba(0, 0, 0, .08);
|
||||||
}
|
}
|
||||||
|
|
||||||
.note-header {
|
/* 卡片内标题和注释 */
|
||||||
background-color: white;
|
.card .title {
|
||||||
color: #000; /* ✅ 加这一行,确保文字是黑色的 */
|
font-size: 15px;
|
||||||
text-align: center;
|
font-weight: 600;
|
||||||
padding: 0.5rem;
|
color: #222;
|
||||||
font-weight: bold;
|
line-height: 1.45;
|
||||||
border-bottom: 1px solid #f0e68c;
|
}
|
||||||
border-top-left-radius: 8px;
|
.card .note {
|
||||||
border-top-right-radius: 8px;
|
font-size: 13px;
|
||||||
|
color: #666;
|
||||||
|
line-height: 1.4;
|
||||||
}
|
}
|
||||||
|
|
||||||
.note-title {
|
/* 响应式:小屏变成1列 */
|
||||||
font-size: 2.4rem;
|
@media (max-width: 1024px) {
|
||||||
font-weight: bold;
|
.dashboard {
|
||||||
margin: 0.3rem 0 0.1rem;
|
grid-template-columns: repeat(2, 1fr);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@media (max-width: 768px) {
|
||||||
.note-desc {
|
.dashboard {
|
||||||
font-size: 1.9rem;
|
grid-template-columns: 1fr;
|
||||||
margin: 0 0 0.6rem;
|
}
|
||||||
}
|
}
|
||||||
</style>
|
</style>
|
||||||
|
|
||||||
<div>
|
<div>
|
||||||
<h2>任务看板</h2>
|
<h2>任务看板</h2>
|
||||||
</div>
|
</div>
|
||||||
<div class="container mt-5">
|
|
||||||
<div class="note-container">
|
|
||||||
<div class="note-card bg-orange">
|
|
||||||
<h3 class="note-header">每日任务</h3>
|
|
||||||
{foreach $day as $item}
|
|
||||||
<p class="note-title">{$item->title}</p>
|
|
||||||
<p class="note-desc">{$item->desc}</p>
|
|
||||||
<br>
|
|
||||||
{/foreach}
|
|
||||||
</div>
|
|
||||||
<div class="note-card bg-blue">
|
|
||||||
<h3 class="note-header">每周任务</h3>
|
|
||||||
{foreach $week as $item}
|
|
||||||
<p class="note-title">{$item->title}</p>
|
|
||||||
<p class="note-desc">{$item->desc}</p>
|
|
||||||
<br>
|
|
||||||
{/foreach}
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<div class="note-card bg-purple">
|
|
||||||
<h3 class="note-header">每月任务</h3>
|
<div class="dashboard">
|
||||||
{foreach $month as $item}
|
|
||||||
<p class="note-title">{$item->title}</p>
|
<!-- 每日任务 -->
|
||||||
<p class="note-desc">{$item->desc}</p>
|
<div class="section">
|
||||||
<br>
|
<h3 class="section-title">每日任务</h3>
|
||||||
{/foreach}
|
{foreach $day as $item}
|
||||||
|
<div class="card spec_add_btn" data-url="/admin/dashboard/task_complete/ids/{$item->id}">
|
||||||
|
<div class="title">{$item->title}</div>
|
||||||
|
<div class="note">{$item->desc}</div>
|
||||||
</div>
|
</div>
|
||||||
|
{/foreach}
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
<!-- 每周任务 -->
|
||||||
|
<div class="section">
|
||||||
|
<h3 class="section-title">每周任务</h3>
|
||||||
|
{foreach $week as $item}
|
||||||
|
<div class="card spec_add_btn" data-url="/admin/dashboard/task_complete/ids/{$item->id}">
|
||||||
|
<div class="title">{$item->title}</div>
|
||||||
|
<div class="note">{$item->desc}</div>
|
||||||
|
</div>
|
||||||
|
{/foreach}
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<!-- 每月任务(举例) -->
|
||||||
|
<div class="section">
|
||||||
|
<h3 class="section-title">每月任务</h3>
|
||||||
|
{foreach $month as $item}
|
||||||
|
<div class="card spec_add_btn" data-url="/admin/dashboard/task_complete/ids/{$item->id}">
|
||||||
|
<div class="title">{$item->title}</div>
|
||||||
|
<div class="note">{$item->desc}</div>
|
||||||
|
</div>
|
||||||
|
{/foreach}
|
||||||
|
</div>
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
|
|
|
||||||
38
application/admin/view/dashboard/task_complete.html
Normal file
38
application/admin/view/dashboard/task_complete.html
Normal file
|
|
@ -0,0 +1,38 @@
|
||||||
|
<form id="task_complete-form" class="form-horizontal" role="form" data-toggle="validator" method="POST" action="">
|
||||||
|
|
||||||
|
<h1>任务详情</h1>
|
||||||
|
<div class="form-group">
|
||||||
|
<label class="control-label col-xs-12 col-sm-2">标题:</label>
|
||||||
|
<div class="col-xs-12 col-sm-8">
|
||||||
|
{$row->title|htmlentities}
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="form-group">
|
||||||
|
<label class="control-label col-xs-12 col-sm-2">描述:</label>
|
||||||
|
<div class="col-xs-12 col-sm-8">
|
||||||
|
{$row->desc|htmlentities}
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="form-group">
|
||||||
|
<label class="control-label col-xs-12 col-sm-3">文件地址</label>
|
||||||
|
<div class="col-xs-12">
|
||||||
|
<div class="input-group">
|
||||||
|
<input id="c-prove_file_path" class="form-control" size="50" name="row[prove_file_path]" type="text" value="">
|
||||||
|
<div class="input-group-addon no-border no-padding">
|
||||||
|
<span><button type="button" id="plupload-path" class="btn btn-danger plupload" data-input-id="c-prove_file_path" data-mimetype="*" data-multiple="true" data-preview-id="p-path"><i class="fa fa-upload"></i> {:__('Upload')}</button></span>
|
||||||
|
<span><button type="button" id="fachoose-path" class="btn btn-primary fachoose" data-input-id="c-prove_file_path" data-mimetype="*" data-multiple="true"><i class="fa fa-list"></i> {:__('Choose')}</button></span>
|
||||||
|
</div>
|
||||||
|
<span class="msg-box n-right" for="c-prove_file_path"></span>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="form-group layer-footer">
|
||||||
|
<div class="col-xs-12 col-sm-8">
|
||||||
|
<button type="submit" class="btn btn-primary btn-embossed disabled">完成任务</button>
|
||||||
|
<button type="reset" class="btn btn-primary btn-embossed btn-close" onclick="Layer.closeAll();">{:__('Close')}</button>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</form>
|
||||||
|
|
||||||
|
|
@ -1,4 +1,4 @@
|
||||||
define(['jquery', 'bootstrap', 'backend', 'addtabs', 'table', 'echarts', 'echarts-theme', 'template'], function ($, undefined, Backend, Datatable, Table, Echarts, undefined, Template) {
|
define(['jquery', 'bootstrap', 'backend', 'addtabs', 'table', 'echarts', 'echarts-theme', 'template', 'form'], function ($, undefined, Backend, Datatable, Table, Echarts, undefined, Template, Form) {
|
||||||
|
|
||||||
var Controller = {
|
var Controller = {
|
||||||
index: function () {
|
index: function () {
|
||||||
|
|
@ -73,6 +73,36 @@ define(['jquery', 'bootstrap', 'backend', 'addtabs', 'table', 'echarts', 'echart
|
||||||
}, 0);
|
}, 0);
|
||||||
});
|
});
|
||||||
|
|
||||||
|
},
|
||||||
|
task: function () {
|
||||||
|
|
||||||
|
$(document).on('click','.spec_add_btn', function (event) {
|
||||||
|
var url = $(this).attr('data-url');
|
||||||
|
if(!url) return false;
|
||||||
|
var msg = $(this).attr('data-title');
|
||||||
|
var width = $(this).attr('data-width');
|
||||||
|
var height = $(this).attr('data-height');
|
||||||
|
var area = [$(window).width() > 800 ? (width?width:'800px') : '95%', $(window).height() > 600 ? (height?height:'600px') : '95%'];
|
||||||
|
var options = {
|
||||||
|
shadeClose: false,
|
||||||
|
shade: [0.3, '#393D49'],
|
||||||
|
area: area,
|
||||||
|
callback:function(value){
|
||||||
|
CallBackFun(value.id, value.name);//在回调函数里可以调用你的业务代码实现前端的各种逻辑和效果
|
||||||
|
}
|
||||||
|
};
|
||||||
|
Fast.api.open(url,msg,options);
|
||||||
|
});
|
||||||
|
|
||||||
|
},
|
||||||
|
task_complete: function () {
|
||||||
|
Form.api.bindevent($("form[role=form]"), function(data, ret){
|
||||||
|
//这里是表单提交处理成功后的回调函数,接收来自php的返回数据
|
||||||
|
Fast.api.close(data);//这里是重点
|
||||||
|
Toastr.success("成功");//这个可有可无
|
||||||
|
}, function(data, ret){
|
||||||
|
Toastr.success("失败");
|
||||||
|
});
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue
Block a user