dever 7 سال پیش
والد
کامیت
7177124f29

+ 2 - 1
.gitignore

@@ -2,4 +2,5 @@
 *.pyc
 data/upload/*
 data/database/*
-data/project/*
+data/project/*
+data/logs/*

+ 25 - 1
config/base.php

@@ -8,8 +8,11 @@ $config['base'] = array
 	# 版本配置
 	'version' => '1.0.0 Beta',
 
+	'apiConfig' => true,
+	'apiSignature' => 'db',
+
 	# 站点使用邮箱还是手机作为主账号,如果是手机,请填写手机验证码的配置接口
-	'account' => 'email',
+	'account' => 'mobile',
 	'mobileCode' => array
 	(
 		# debug模式
@@ -42,13 +45,34 @@ $config['template'] = array
 	# 模板html文件的所在目录,默认为html
 	'path' => '',
 
+	'replace' => array
+	(
+		'css' => './css/',
+		'js' => './js/',
+		'images' => 'images/',
+	),
+
 	# 编译器与模板对应关系目录,定义之后,代表可以完全不改动前端的代码,可以为空,为空则一一对应,参考manage
 	'relation' => array
 	(
+		# 首页启动屏幕
+		'home' => 'index',
+
+		# 登录页
+		'login' => 'login',
+		'reg' => 'register',
+		'forget' => 'password',
+
 		# 任务列表页
 		'task/list' => 'tasks',
 		# 任务详情页
 		'task/view' => 'task',
+
+		# 任务报告列表
+		'task/report' => 'reportlist',
+
+		# 提交报告页面
+		'task/submit' => 'reportsubmit',
 	),
 	
 );

+ 1 - 0
config/html/404.html

@@ -0,0 +1 @@
+<?php Dever::location("main/404") ?>

+ 127 - 0
main/assets/mobile/js/config.js

@@ -0,0 +1,127 @@
+//定义一些常用的方法,这是dever框架中自带的常用方法,必须引入jquery
+
+//定义瀑布流
+Dever.Page().name = '#page';
+
+//定义用户相关的一些信息
+Dever.User().config = 
+{
+	//初始化,绑定click
+	'click' : 
+	{
+		//登录
+		0 : '#login'
+		//注册
+		,1 : '#reg'
+		//领取任务
+		,2 : '.dever_task_submit'
+		//提交报告
+		,3 : '#dever_report_submit'
+	}
+
+	//登录信息
+	,0 :
+	{
+		'input' :
+		{
+			'mobile' : '#mobile'
+			,'password' : '#password'
+			,'refer' : '#refer'
+		}
+		//错误提示的div
+		//,'status' : '.alert'
+		//错误提示
+		,'error' : '您的手机号或密码错误'
+		//登录要提交的url
+		,'url' : Dever.Host('passport', 'login.action')
+	}
+
+	//注册信息
+	,1 :
+	{
+		'input' :
+		{
+			'email' : '#email'
+			,'username' : '#username'
+			,'password' : '#password'
+			,'cpassword' : '#cpassword'
+			,'refer' : '#refer'
+		}
+		//错误提示的div
+		,'status' : '.alert'
+		//错误提示
+		,'error' : '您填写的信息有误'
+		//登录要提交的url
+		,'url' : Dever.Host('passport', 'reg.action')
+	}
+	
+	//领取任务
+	,2 :
+	{
+		'input' : 'click'
+		//错误提示的div
+		//,'status' : '#dever_alert'
+		//错误提示
+		,'error' : '您填写的信息有误'
+
+		//发表成功后,调用的callback
+		,'callback' : function(e, msg, result)
+		{
+			Dever.Out(msg);
+			$('.ctrls').eq(0).hide();
+			$('.ctrls').eq(1).show();
+			$('.ctrls').eq(1).find('a').attr('href', $("#report_link").val());
+		}
+	}
+
+	//提交报告
+	,3 :
+	{
+		'input' :
+		{
+			'username' : '#username|'
+			,'pic' : '#pic|'
+			,'link' : '#link|'
+			,'desc' : '#desc|'
+			,'id' : '#id'
+			,'report_id' : '#report_id'
+		}
+		//错误提示的div
+		//,'status' : '#dever_alert'
+		//错误提示
+		,'error' : '您填写的信息有误'
+		//发表成功后,调用的callback
+		,'callback' : function(e, msg)
+		{
+			Dever.Out(msg);
+			location.href = $("#location").val();
+		}
+	}
+	
+	//点赞
+	,4 :
+	{
+		'input' : 'click'
+		//错误提示
+		,'error' : '您填写的信息有误'
+		,'url' : Dever.Host('forum', 'vote.save')
+		//发表成功后,调用的callback
+		,'callback' : function(e, msg, t)
+		{
+			var num = parseInt(e.find('span').html());
+			e.find('span').html((t.msg == 1 ? num+1 : num-1));
+		}
+	}
+
+};
+
+//定义上传回调方法
+Dever.Upload().callback =
+{
+	'upload' : function(e, url, close)
+	{
+		var html = '<li><img src="'+url+'" alt="" style="height:auto;"><em class="ico-img-del '+close+'"></em></li>';
+
+		return html;
+	}
+};

+ 5 - 5
main/database/menu.php

@@ -67,7 +67,7 @@ return array
 			'name' 		=> '图标-宽度为150的图片',
 			'default' 	=> '',
 			'desc' 		=> '请选择图标',
-			'match' 	=> 'is_string',
+			'match' 	=> 'option',
 			'update'	=> 'image',
 			'key' 		=> '1',
 			'place'		=> '150',
@@ -135,14 +135,14 @@ return array
 	# 默认值
 	'default' => array
 	(
-		'col' => 'name,`key`,link,reorder,target,state,cdate',
+		'col' => 'name,`key`,icon,link,reorder,target,state,cdate',
 		'value' => array
 		(
-			'"领任务", "task", "'. Dever::url("task/list", 'main') . '",10, "_self",1,' . $time,
+			'"领任务", "task", "ico-gettask", "'. Dever::url("task/list", 'main') . '",10, "_self",1,' . $time,
 
-			'"我的任务", "user_task", "'. Dever::url("task/user", 'main') . '",9, "_self",1,' . $time,
+			'"我的任务", "user_task", "ico-task", "'. Dever::url("task/user", 'main') . '",9, "_self",1,' . $time,
 
-			'"我的账户", "uesr", "'. Dever::url("user/account", 'main') . '",8, "_self",1,' . $time,
+			'"我的账户", "uesr", "ico-account", "'. Dever::url("user/account", 'main') . '",8, "_self",1,' . $time,
 		),
 	),
 );

+ 20 - 0
main/template/mobile/404.php

@@ -0,0 +1,20 @@
+<?php
+
+$view
+->import('inc/head')
+
+->set('info', 'task/info.one') 
+->set('title', '404')
+->set('name', '404')
+
+# 公共页面,这种方式不会更改前端代码,还有一种方式可以参考manage组件
+->import('inc/head')
+
+# 定义header>span的html为$title
+->fetch('header span',    'main/config-one#name')
+
+->fetch('.back@href',    'javascript:history.go(-1)')
+
+->fetch('.button@href', '<{Dever::url("task/list", "main")}>')
+
+->display();

+ 15 - 0
main/template/mobile/home.php

@@ -0,0 +1,15 @@
+<?php
+
+$view
+
+->import('inc/head')
+
+->fetch('img@onclick',    'location.href="<{Dever::url("task/list", "main")}>"')
+
+->fetch(array('script', 2), 'setTimeout(function(){
+        location.href="<{Dever::url("task/list", "main")}>"
+    },3000)')
+
+->import('inc/foot')
+
+->display();

+ 10 - 2
main/template/mobile/inc/foot.php

@@ -2,11 +2,19 @@
 
 $view
 
-->fetch(array('script@src', 0),		Dever::assets("global.js"))
-->fetch(array('script@src', 1),		Dever::assets('<{(isset($name) ? $name : "index")}>.js', "js"))
+->fetch(array('script@src', 0),		Dever::assets('global.js'))
+->fetch(array('script@src', 1),		Dever::assets('<{(isset($name) ? $name : "index")}>.js', 'js'))
+
 
 //->fetch('#dever_copyright', 	'<{Dever::load("main/config-one#copyright", 1)}>')
 //->fetch('#dever_icp', 	'<{Dever::load("main/config-one#icp", 1)}>')
+
+
+->append('body', 	'<script src="'.Dever::assets('lib/jquery/jquery.min.js', 'script').'"></script>')
+->append('body', 	'<script src="'.Dever::assets('dever/core.js', 'script').'"></script>')
+->append('body', 	'<script src="'.Dever::assets('config.js').'"></script>')
+
 ->append('body', 	'<div style="display:none;"><{Dever::load("main/config-one#code", 1)}></div>')
 
+
 ;

+ 1 - 1
main/template/mobile/inc/menu.php

@@ -10,7 +10,7 @@ $view
     (
         'self' => array
         (
-            'class' => '<{(isset($nav) && $nav == $v.key) ? "cur" : ""}>',
+            'class' => '<{(isset($nav) && $nav == $v.key) ? $v.icon . " cur" : $v.icon}>',
             'href' => '<{$v.link}>',
             'title' => '<{$v.name}>',
             'html' => '<{$v.name}>',

+ 33 - 0
main/template/mobile/login.php

@@ -0,0 +1,33 @@
+<?php
+
+$view
+
+->import('inc/head')
+
+->set('title', '登录')
+->set('name', 'login')
+->fetch('header span', '登录')
+
+->fetch('.back@style',    'display:none;')
+->fetch('.back@check',    'passport/login.check')
+
+->fetch('.txtc a',    '还没有账号,马上注册<{Dever::load("main/config-one#title")}>!')
+
+->fetch('.txtc a@href',    '<{Dever::url("reg?refer=" . Dever::input("refer"), "main")}>')
+
+->fetch('.forget a@href',    '<{Dever::url("forget?refer=" . Dever::input("refer"), "main")}>')
+
+->fetch(array('input@id', 0), 'mobile')
+->fetch(array('input@name', 0), 'mobile')
+
+->fetch(array('input@id', 1), 'password')
+->fetch(array('input@name', 1), 'password')
+
+->fetch('.button@type', 'button')
+->fetch('.button@id', 'login')
+
+->append('header', '<input type="hidden" name="refer" id="refer" value="<{Dever::input("refer")}>">')
+
+->import('inc/foot')
+
+->display();

+ 32 - 0
main/template/mobile/reg.php

@@ -0,0 +1,32 @@
+<?php
+
+$view
+
+->import('inc/head')
+
+->set('title', '注册')
+->set('name', 'register')
+->fetch('header span', '注册')
+
+->fetch('.back@href',    'javascript:history.go(-1)')
+
+->fetch('.txtc a',    '还没有账号,马上注册<{Dever::load("main/config-one#title")}>!')
+
+->fetch('.txtc a@href',    '<{Dever::url("reg?refer=" . Dever::input("refer"), "main")}>')
+
+->fetch('.forget a@href',    '<{Dever::url("forget?refer=" . Dever::input("refer"), "main")}>')
+
+->fetch(array('input@id', 0), 'mobile')
+->fetch(array('input@name', 0), 'mobile')
+
+->fetch(array('input@id', 1), 'password')
+->fetch(array('input@name', 1), 'password')
+
+->fetch('.button@type', 'button')
+->fetch('.button@id', 'login')
+
+->append('header', '<input type="hidden" name="refer" id="refer" value="<{Dever::input("refer")}>">')
+
+->import('inc/foot')
+
+->display();

+ 11 - 5
main/template/mobile/task/list.php

@@ -10,7 +10,7 @@ $view
 ->set('title', $title)
 # 这个变量控制不同页面的样式和js文件
 ->set('name', 'tasks')
-
+->set('nav', 'task') 
 # 定义header>span的html为$title
 ->fetch('header span',    $title)
 
@@ -28,13 +28,19 @@ $view
         '.ico-person' => '<{$v.user_num}>人领取',
         '.ico-time' => '任务到期:<{$v.edate_str}>',
 
-        '.tk-coin' => array
+        '.tk-coin|0' => array
         (
-            'span|0' => '$v.list_score',
+            'span' => array
+            (
+                'html' => '$v.list_score'
+            ),
         ),
-        '.tk-coin' => array
+        '.tk-coin|1' => array
         (
-            'span|1' => '$v.list_group_score',
+            'span' => array
+            (
+                'html' => '$v.list_group_score'
+            ),
         ),
 
         'a' => array

+ 67 - 0
main/template/mobile/task/submit.php

@@ -0,0 +1,67 @@
+<?php
+
+$view
+->import('inc/head')
+
+->set('info', 'task/info.one') 
+->set('title', '提交任务报告')
+->set('name', 'reportsubmit')
+
+->render('info', array
+(
+	'.back' => array
+	(
+		'href' => '<{Dever::url("task/view?id="+$v.id, "main")}>',
+	),
+    '.wrapper' => array
+    (
+        'h2' => '<{$v.name}> - 报告提交
+        <input type="hidden" id="location" name="location" value="<{$v.link}>">
+        <input type="hidden" id="id" name="id" value="<{$v.id}>">
+        <input type="hidden" id="report_id" name="report_id" value="<{$v.report.id}>">
+        <input type="hidden" id="pic" name="pic" value="<{$v.report.pic}>" dever-error="请上传任务截屏">',
+
+        'input|0' => array
+        (
+        	'name' => 'username',
+        	'id' => 'username',
+        	'value' => '$v.report.username',
+        	'dever-error' => '请填写账号名',
+        ),
+
+        'input|2' => array
+        (
+        	'name' => 'link',
+        	'id' => 'link',
+        	'value' => '$v.report.link',
+        	'dever-error' => '请填写链接地址',
+        ),
+
+        'textarea|0' => array
+        (
+        	'name' => 'desc',
+        	'id' => 'desc',
+        	'html' => '$v.report.desc',
+        	'dever-error' => '请填写文字内容',
+        ),
+
+        'ul' => array
+        (
+        	'html' => '<style>.layui-upload-file{display:none;}</style><li class="img-add dever-upload" id="upload" dever-upload-value="pic" dever-upload-callback="upload" dever-upload-type="mul"></li>',
+        ),
+
+        '.button' => array
+        (
+        	'class' => 'button',
+        	'type' => 'button',
+        	'id' => 'dever_report_submit',
+        	'dever-send' => '$v.report.submit',
+        ),
+    ), 
+))
+
+->import('inc/foot')
+
+->append('body', 	'<script src="'.Dever::assets('lib/layui/layui.js', 'script').'"></script>')
+
+->display();

+ 17 - 6
main/template/mobile/task/view.php

@@ -13,30 +13,41 @@ $view
 (
     '.wrapper' => array
     (
-        'dt' => '$v.name',
+        'dt' => '<{$v.name}><input type="hidden" id="report_link" name="report_link" value="<{$v.button.report_link}>">',
 
         '.ico-jc' => '$v.cate.name',
         '.ico-person' => '<{$v.user_num}>人领取',
         '.ico-time' => '任务到期:<{$v.edate_str}>',
 
-        '.tk-coin' => array
+        '.tk-coin|0' => array
         (
-            'span|0' => '$v.list_score',
+            'span' => array
+            (
+                'html' => '$v.list_score'
+            ),
         ),
-        '.tk-coin' => array
+        '.tk-coin|1' => array
         (
-            'span|1' => '$v.list_group_score',
+            'span' => array
+            (
+                'html' => '$v.list_group_score'
+            ),
         ),
 
         '.tk-article' => '$v.content',
 
         '.ctrls|0' => array
         (
-            'section' => '$v.button.desc',
+            'section' => array
+            (
+                'html' => '$v.button.desc',
+            ),  
             'a' => array
             (
                 'class' => '$v.button.class',
                 'href' => '$v.button.link',
+                'dever-send' => '$v.button.submit',
+                'html' => '$v.button.name',
             ),
         ),
 

+ 3 - 2
task/api/main.php

@@ -10,7 +10,7 @@ return array
 		'request' => array
 		(
 			'id' => '任务id',
-			//'uid' => '用户id',
+			'uid' => '用户id',
 		),
 		'response' => array
 		(
@@ -28,7 +28,8 @@ return array
 		'request' => array
 		(
 			'id' => '任务id',
-			//'uid' => '用户id',
+			'uid' => '用户id',
+			'report_id' => '报告id',
 		),
 		'response' => array
 		(

+ 1 - 1
task/database/info.php

@@ -274,7 +274,7 @@ return array
 			'name' 		=> '报告要求',
 			'default' 	=> 'username',
 			'desc' 		=> '状态',
-			'match' 	=> 'is_numeric',
+			'match' 	=> 'option',
 			'update'	=> 'checkbox',
 			'option'	=> $demand,
 			//'list'		=> true,

+ 10 - 2
task/database/user_report.php

@@ -21,6 +21,7 @@ return array
 	'lang' => '用户报告',
 	'menu' => 'passport',
 	'order' => 99,
+	'status' => $status,
 	# 数据结构
 	'struct' => array
 	(
@@ -78,7 +79,8 @@ return array
 			'desc' 		=> '账号名',
 			'match' 	=> 'is_string',
 			'update'	=> 'text',
-			'list'		=> true,
+			'list_name'		=> '报告信息',
+			'list'		=> 'Dever::load("task/lib/manage.report", {id})',
 		),
 
 		'pic'		=> array
@@ -125,7 +127,7 @@ return array
 			'option'	=> $status,
 			'search'	=> 'select',
 			'list'		=> true,
-			'edit'		=> true,
+			//'edit'		=> true,
 		),
 
 		'status_desc'		=> array
@@ -199,6 +201,12 @@ return array
 		'insert' => false,
 		'edit' => false,
 		'delete' => false,
+
+		# page_type = 1
+		'page_list_table' => 'photo',
+
+		'photo' => 'task/lib/manage.report_photo',
+
 		# 快捷更新
 		'list_button' => array
 		(

+ 8 - 2
task/database/user_score.php

@@ -45,10 +45,11 @@ return array
 		(
 			'type' 		=> 'int-11',
 			'name' 		=> '可用积分',
-			'default' 	=> '',
+			'default' 	=> '0',
 			'desc' 		=> '可用积分',
 			'match' 	=> 'is_numeric',
 			'update'	=> 'text',
+			'list'		=> true,
 		),
 
 		'state'		=> array
@@ -63,7 +64,7 @@ return array
 		'cdate'		=> array
 		(
 			'type' 		=> 'int-11',
-			'name' 		=> '入时间',
+			'name' 		=> '入时间',
 			'match' 	=> array('is_numeric', time()),
 			'desc' 		=> '',
 			# 只有insert时才生效
@@ -78,6 +79,11 @@ return array
 		'insert' => false,
 		'edit' => false,
 		'delete' => false,
+		# 列表
+		'list_button' => array
+		(
+			'list' => array('积分日志', '"user_score_log&project=task&search_option_uid={uid}&search_option_status=2&oper_parent=user_score&oper_project=task"'),
+		),
 	),
 
 	'request' => array

+ 16 - 22
task/database/user_score_log.php

@@ -12,15 +12,16 @@ $cash_type = array
 	2 => '支付宝',
 );
 
+//后台只显示
 $type = array
 (
-	1 => '积分兑现-申请',
-	2 => '积分兑现-完成',
-	3 => '积分兑现-失败',
+	//1 => '积分兑现-申请',
+	//2 => '积分兑现-完成',
+	//3 => '积分兑现-失败',
 
 	4 => '任务奖励',
 	5 => '任务提成',
-	6 => '系统奖励',
+	//6 => '系统奖励',
 );
 
 return array
@@ -66,18 +67,10 @@ return array
 		'group_uid'		=> array
 		(
 			'type' 		=> 'int-11',
-			'name' 		=> '下用户名',
+			'name' 		=> '下线用户名',
 			'default' 	=> '',
-			'desc' 		=> '下用户名',
+			'desc' 		=> '下线用户名',
 			'match' 	=> 'is_numeric',
-			//'update'	=> 'text',
-			'search'	=> array
-			(
-				'api' => 'passport/user-all',
-				'col' => 'username',
-				'result' => 'id',
-			),
-			'list'		=> 'Dever::load("passport/user-one#username", {uid})',
 		),
 
 		'score'		=> array
@@ -88,6 +81,7 @@ return array
 			'desc' 		=> '积分',
 			'match' 	=> 'is_numeric',
 			'update'	=> 'text',
+			'list'		=> true,
 		),
 
 		'cash'		=> array
@@ -137,7 +131,7 @@ return array
 			'option'	=> $type,
 			'search'	=> 'select',
 			'list'		=> true,
-			'edit'		=> true,
+			//'edit'		=> true,
 		),
 
 		'type_desc'		=> array
@@ -158,9 +152,9 @@ return array
 			'desc' 		=> '兑现途径',
 			'match' 	=> 'is_numeric',
 			'update'	=> 'select',
-			'option'	=> $cash_type,
-			'search'	=> 'select',
-			'list'		=> true,
+			//'option'	=> $cash_type,
+			//'search'	=> 'select',
+			//'list'		=> true,
 		),
 
 		'status'		=> array
@@ -172,9 +166,9 @@ return array
 			'match' 	=> 'is_numeric',
 			'update'	=> 'select',
 			'option'	=> $status,
-			'search'	=> 'select',
+			//'search'	=> 'select',
 			'list'		=> true,
-			'edit'		=> true,
+			//'edit'		=> true,
 		),
 
 		'state'		=> array
@@ -198,7 +192,7 @@ return array
 		'cdate'		=> array
 		(
 			'type' 		=> 'int-11',
-			'name' 		=> '入时间',
+			'name' 		=> '入时间',
 			'match' 	=> array('is_numeric', time()),
 			'desc' 		=> '',
 			# 只有insert时才生效
@@ -211,7 +205,7 @@ return array
 	'manage' => array
 	(
 		'insert' => false,
-		//'edit' => false,
+		'edit' => false,
 		'delete' => false,
 	),
 

+ 5 - 4
task/lib/Base.php

@@ -35,7 +35,7 @@ class Base
 		if ($this->data['uid'] <= 0) {
 			# 需要登录
 			$login = new Login();
-			//$login->location();
+			$login->location();
 		}
 
 		$where['uid'] = $this->data['uid'];
@@ -58,18 +58,19 @@ class Base
 		} else {
 			if ($state == true) {
 				# 未认证 code = 110 就是需要认证,需要跳转到认证页面
-				Dever::alert('资料认证通过后才能领取任务', 110);
+				//Dever::alert('资料认证通过后才能领取任务', 110);
 			}
 			return false;
 		}
 	}
 
-	public function token($request)
+	public function token($request = array())
     {
+    	$request['uid'] = Dever::encode($this->data['uid']);
         return http_build_query(Dever::token($request));
     }
 
-    public function url($method, $request)
+    public function url($method, $request = array())
     {
         return Dever::proxy($method, $this->token($request));
     }

+ 4 - 5
task/lib/Cron.php

@@ -11,9 +11,9 @@ class Cron
 	 *
 	 * @return mixed
 	 */
-	public function task()
+	public function clearTask_api()
 	{
-		
+		echo 11;die;
 	}
 
 	/**
@@ -31,7 +31,7 @@ class Cron
      *
      * @return mixed
      */
-    public function task_commit()
+    public function task_commit_api()
     {
     	# 审核成功 入账
     	$where['status'] = 2;
@@ -49,7 +49,6 @@ class Cron
     			$this->updateScoreLog($v['uid'], $v['score'], 4, 2, $v['task_id'], $v['id']);
 
 				$this->group($v['uid'], $v['group_score'], $v['task_id'], $v['id']);
-				
     		}
     	}
 
@@ -138,7 +137,7 @@ class Cron
      */
     private function updateUserScore($uid, $score)
     {
-    	$update['uid'] = $uid;
+    	$update['where_uid'] = $uid;
 		$update['score'] = $score;
 		Dever::db('task/user_score')->updateScore($update);
     }

+ 59 - 1
task/lib/Manage.php

@@ -6,5 +6,63 @@ use Dever;
 
 class Manage
 {
-	
+	/**
+	 * 获取报告信息:表格模式
+	 *
+	 * @return mixed
+	 */
+	public function report($id)
+	{
+		$info = Dever::db('task/user_report')->one($id);
+
+		$pic = explode(',', $info['pic']);
+		$info['pic'] = '<ul id="layer-photos-'.$id.'" class="dever-img">';
+		foreach ($pic as $k => $v) {
+			$info['pic'] .= '<li style="margin-top:5px"><img alt="'.$info['username'].'" layer-src="'.$v.'" src="'.$v.'" width="150px" /><br /></li>';
+		}
+		$info['pic'] .= '</ul>';
+		
+		$data['账号名'] = $info['username'];
+		$data['任务截屏'] = $info['pic'];
+		$data['链接'] = $info['link'];
+		$data['文字说明'] = $info['desc'];
+
+		$html = Dever::table($data);
+
+		return $html;
+	}
+
+	/**
+	 * 获取报告信息:图片模式
+	 *
+	 * @return mixed
+	 */
+	public function report_photo($data)
+	{
+		$pic = explode(',', $data['pic']);
+
+		$data['pic'] = array();
+		foreach ($pic as $k => $v) {
+			$data['pic'][$k] = array
+			(
+				'index' => $k,
+				'src' => $v,
+				'show' => $v,
+				'name' => $data['username']
+			);
+		}
+		$status = Dever::db('task/user_report')->config['status'];
+
+		$table['任务'] = Dever::load('task/info-one#name', $data['task_id']);
+		$table['用户名'] = Dever::load('passport/user-one#username', $data['uid']);
+		$table['账号名'] = $data['username'];
+		$table['链接'] = 'dfdfdffdfdsfdsfddddddddddddddddddddddd';
+		$table['文字说明'] = $data['desc'];
+		$table['审核状态'] = $status[$data['status']];
+		$table['审核说明'] = $data['status_desc'];
+
+		$data['desc'] = Dever::table($table);
+
+		return $data;
+	}
 }

+ 35 - 9
task/src/Info.php

@@ -61,6 +61,22 @@ class Info extends Base
             $info = Dever::db('task/info')->one($id);
             # 检测用户是否登录,是否认证,仅显示认证信息
 
+            $report_id = Dever::input('report_id', -1);
+            
+            if ($report_id) {
+                $info['report'] = Dever::db('task/user_report')->one($report_id);
+            }
+            if (!$info['report']) {
+                $info['report'] = array
+                (
+                    'id' => -1,
+                    'username' => '',
+                    'pic' => '',
+                    'link' => '',
+                    'desc' => '',
+                );
+            }
+            $info['report']['submit'] = $this->url('task/report.submit', array('id' => $info['id'], 'report_id' => $report_id));
             $this->getOne($info, $button = true);
         }
         
@@ -80,6 +96,7 @@ class Info extends Base
         $id = Dever::input('id');
         $info = array();
         if ($id > 0) {
+            $this->data['cate'] = Dever::db('task/cate')->state();
             $info = Dever::db('task/info')->one($id);
             $this->getOne($info, $button = true);
 
@@ -113,7 +130,7 @@ class Info extends Base
             $insert['level_id'] = $info['level_id'];
             $insert['status'] = 1;
             $info['user_task'] = Dever::db('task/user_task')->insert($insert);
-            return $info;
+            return '领取成功';
         } else {
             Dever::alert('领取失败');
         }
@@ -220,7 +237,7 @@ class Info extends Base
         } elseif ($data['user_num'] >= $data['num']) {
             # 抢光了
             $button = 3;
-        } elseif (isset($this->data['uid']) && $this->data['uid'] > 0) {
+        } elseif (isset($this->data['uid']) && $this->data['uid']) {
             # 判断等级
             $level = Dever::db('task/level')->one($data['level_id']);
             if ($level && isset($this->data['user_score']) && $this->data['user_score'] && $level['score'] > $this->data['user_score']['score']) {
@@ -260,28 +277,37 @@ class Info extends Base
         );
 
         $result['status'] = $button;
+        $result['name'] = '领取任务';
         $result['desc'] = $config[$button];
         $result['icon'] = '';
-        $result['class'] = 'button';
+        $result['class'] = 'button dever_task_submit';
         $result['link'] = 'javascript:;';
+        $result['submit'] = '';
+
+        $result['report_link'] = Dever::url('task/submit?id=' . $data['id'] . '&nonce=' . Dever::id(), 'main');
+
+        if ($result['status'] == 5) {
+            $result['name'] = '提交报告';
+            $result['link'] = $result['report_link'];
+            $result['class'] = 'button';
+            $result['desc'] = '<p>' . $result['desc'] . '</p>';
 
-        if ($result['status'] > 1) {
+        } elseif ($result['status'] > 1) {
+            if ($result['status'] == 3) {
+                $result['name'] = '抢光了';
+            }
             $result['class'] = 'button disable';
             $result['desc'] = '<p>' . $result['desc'] . '</p>';
         } else {
-            $result['link'] = 'javascript:submit();';
             $result['icon'] = 'ico-coin';
             $result['desc'] = '<p>任务奖励' . $data['score'] . $this->data['config']['score_name'] . '<span>/' . $this->data['config']['report_name'] . '</span></p><p>组员贡献' . $data['group_score'] . $this->data['config']['score_name'] . '<span>/' . $this->data['config']['report_name'] . '</span></p>';
+            $result['submit'] = $this->url('task/info.submit', array('id' => $data['id']));
         }
 
         if ($result['icon']) {
             $result['desc'] = '<em class="'.$result['icon'].'"></em><section>'.$result['desc'].'</section>';
         }
 
-        if ($result['status'] == 5) {
-            $result['link'] = Dever::url('task/submit', 'main');
-        }
-
         return $result;
     }
 }

+ 28 - 13
task/src/Report.php

@@ -52,11 +52,11 @@ class Report extends Base
 		$info = Dever::load('task/info.one');
 
 		if (isset($info['button']) && is_array($info['button']) && isset($info['button']['status']) && $info['button']['status'] > 0) {
-            if ($info['button']['status'] == 2) {
+            if ($info['button']['status'] == 5) {
                 # 可以提交
                 return $this->submit_action($info);
             } else {
-                Dever::alert($info['button']['desc']);
+                Dever::alert(strip_tags($info['button']['desc']));
             }
         } else {
             Dever::alert('提交失败');
@@ -76,24 +76,26 @@ class Report extends Base
     	$desc = Dever::input('desc');
         $id = Dever::input('id');
 
-    	if (!$username) {
-    		Dever::alert('账号名不能为空');
+        $refresh = array('element' => '#dever_report_submit', 'attr' => 'dever-refresh', 'value' => $info['report']['submit']);
+
+    	if (strstr($info['report_demand'], 'username') && !$username) {
+    		Dever::alert('账号名不能为空', $refresh);
     	}
 
-    	if (!$pic) {
-    		Dever::alert('任务截屏不能为空');
+    	if (strstr($info['report_demand'], 'pic') &&!$pic) {
+    		Dever::alert('任务截屏不能为空', $refresh);
     	}
 
-    	if (!$link) {
-    		Dever::alert('链接不能为空');
+    	if (strstr($info['report_demand'], 'link') &&!$link) {
+    		Dever::alert('链接不能为空', $refresh);
     	}
 
-    	if (!$desc) {
-    		Dever::alert('文字说明不能为空');
+    	if (strstr($info['report_demand'], 'desc') &&!$desc) {
+    		Dever::alert('文字说明不能为空', $refresh);
     	}
 
     	$report_id = Dever::input('report_id');
-    	if ($report_id > 0) {
+    	if ($report_id && is_numeric($report_id) && $report_id > 0) {
             $update['username'] = $username;
             $update['pic'] = $pic;
             $update['link'] = $link;
@@ -103,8 +105,21 @@ class Report extends Base
             $update['where_id'] = $report_id;
             Dever::db('task/user_report')->update($update);
             $info['user_report'] = $report_id;
-            return $info;
+            return '提交成功,请等待管理员审核';
     	} else {
+
+            # 验证$info['report_num'] 和 $info['report_user_num']
+            $where['task_id'] = $info['id'];
+            $total = Dever::db('task/user_report')->total($where);
+            if ($total >= $info['report_num']) {
+                Dever::alert('已经超过报告数量上限', array('url' => Dever::url('task/view?id=' . $info['id'], 'main')));
+            }
+            $where['uid'] = $this->data['uid'];
+            $total = Dever::db('task/user_report')->total($where);
+            if ($total >= $info['report_user_num']) {
+                Dever::alert('已经超过人均报告数量上限', array('url' => Dever::url('task/view?id=' . $info['id'], 'main')));
+            }
+
             $insert['uid'] = $this->data['uid'];
             $insert['task_id'] = $info['id'];
             $insert['username'] = $username;
@@ -115,7 +130,7 @@ class Report extends Base
             $insert['group_score'] = $info['group_score'];
             $insert['status'] = 1;
             $info['user_report'] = Dever::db('task/user_report')->insert($insert);
-            return $info;
+            return '提交成功,请等待管理员审核';
         }
 
         Dever::alert('提交失败');