dever 6 سال پیش
والد
کامیت
3e3e9c178e
5فایلهای تغییر یافته به همراه197 افزوده شده و 21 حذف شده
  1. 59 0
      assets/html/home.html
  2. 9 0
      config/base.php
  3. 5 5
      database/info.php
  4. 10 0
      database/user_answer.php
  5. 114 16
      src/Api.php

+ 59 - 0
assets/html/home.html

@@ -0,0 +1,59 @@
+<!DOCTYPE html>
+<html>
+<head>
+  <meta charset="utf-8">
+  <meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1">
+  <title>调查数据展示</title>
+  <link rel="stylesheet" type="text/css" href="../script/lib/layui/css/layui.css" />
+  <script src="../script/lib/layui/layui.js"></script>
+</head>
+<body>
+ 
+<div class="layui-container">
+    <blockquote class="layui-elem-quote">产品:<{$product.name}>&nbsp;&nbsp;&nbsp;&nbsp;用户:<{$userinfo.username}><{if($userinfo.mobile):}><{$userinfo.mobile}><{endif}></blockquote>
+
+    <div class="layui-progress layui-progress-big" lay-showPercent="yes">
+      <div class="layui-progress-bar layui-bg-blue" lay-percent="<{$page}>"></div>
+    </div>
+
+    <{loop($question):}>  
+    <fieldset class="layui-elem-field layui-field-title" style="margin-top: 30px;">
+      <legend><{$k}></legend>
+    </fieldset>
+    <div class="layui-collapse" lay-filter="test">
+      <{loop($v):}>  
+      <div class="layui-colla-item">
+        <h2 class="layui-colla-title"><{$v1['name']}></h2>
+        <div class="layui-colla-content layui-show">
+          <{if(isset($v1['content'])):}>
+          <{loop($v1['content']):}>  
+          <blockquote class="layui-elem-quote layui-quote-nm" <{if(isset($v2['checked'])):}>style="border-color: #1f25e2;"<{endif}>><{if($v2['pic']):}><img src="<{$v2['pic']}>" style="width:200px;" /><{else:}><{$v2['title']}><{endif}>&nbsp;&nbsp; <{if(isset($v2['checked']) && !is_numeric($v2['checked'])):}><{$v2['checked']}><{endif}></blockquote>
+          <{endloop}>
+          <{else:}>
+          <p><{$v1['answer']}></p>
+          <{endif}>
+        </div>
+      </div>
+      <{endloop}>
+    </div>
+    <{endloop}>
+</div> 
+
+<script>
+layui.use(['element', 'layer', 'jquery'], function(){
+  var element = layui.element;
+  var layer = layui.layer;
+  var $ = layui.jquery;
+  layer.ready(function() {
+    $(".dever-img").each(function()
+    {
+      layer.photos({
+        photos: '#' + $(this).attr('id')
+      });
+    });
+  });
+});
+</script>
+
+</body>
+</html>

+ 9 - 0
config/base.php

@@ -0,0 +1,9 @@
+<?php
+
+# 一些基本配置
+$config['base'] = array
+(
+	'product' => 'service/product',
+);
+
+return $config;

+ 5 - 5
database/info.php

@@ -5,13 +5,13 @@ $type = array
 	# 小于10无需选项
 	1 => '单行输入框',
 	2 => '多行输入框',
-	3 => '城市选择框',
-	4 => '单图片上传',
-	5 => '多图片上传',
+	3 => '单图片上传',
+	4 => '多图片上传',
 
 	# 大于10需要选项
-	11 => '单选框',
-	12 => '多选框',
+	11 => '城市选择框',
+	12 => '单选框',
+	13 => '多选框',
 );
 
 $must = array

+ 10 - 0
database/user_answer.php

@@ -42,6 +42,16 @@ return array
 			'list'		=> true,
 		),
 
+		'product_id'		=> array
+		(
+			'type' 		=> 'int-11',
+			'name' 		=> '产品',
+			'default' 	=> '',
+			'desc' 		=> '产品',
+			'match' 	=> 'is_numeric',
+			'update'	=> 'text',
+		),
+
 		'score'		=> array
 		(
 			'type' 		=> 'int-11',

+ 114 - 16
src/Api.php

@@ -40,11 +40,7 @@ class Api
 				} else {
 					$result['info'][$k]['answer'] = '';
 				}
-				if ($v['type'] >= 11) {
-					$result['info'][$k]['content'] = Dever::array_decode($result['info'][$k]['content']);
-				} else {
-					unset($result['info'][$k]['content']);
-				}
+				$result['info'][$k]['content'] = $this->getContent($v['type'], $v['content']);
 				
 			}
 		}
@@ -62,22 +58,40 @@ class Api
 		if ($survey_id && $survey_answer) {
 			$survey_id = explode('||', $survey_id);
 			$survey_answer = explode('||', $survey_answer);
+			$num = 1;
+			$total = count($survey_id);
+
 			foreach ($survey_id as $k => $v) {
-				$answer = Dever::db('survey/user_answer')->one(array('info_id' => $v, 'uid' => $uid));
+				$info = Dever::db('survey/info')->one($v);
 
-				if ($answer) {
-					Dever::db('survey/user_answer')->update(array('where_id' => $answer['id'], 'value' => $survey_answer[$k]));
-				} else {
-					Dever::db('survey/user_answer')->insert(array('info_id' => $v, 'uid' => $uid, 'value' => $survey_answer[$k]));
+				if ($info) {
+					if ($info['must'] == 1 && !isset($survey_answer[$k]) && !$survey_answer[$k]) {
+						$page = false;
+						Dever::alert($info['name'] . '未填写答案');
+					}
+				}
+			}
 
-					if ($page_number > 0) {
-						$info = Dever::db('survey/user')->one(array('uid' => $uid));
-						if ($info) {
-							Dever::db('survey/user')->update(array('where_id' => $info['id'], 'index' => $page_number + 1));
-						}
+			foreach ($survey_id as $k => $v) {
+				$info = Dever::db('survey/info')->one($v);
+				if ($info) {
+					$answer = Dever::db('survey/user_answer')->one(array('info_id' => $v, 'uid' => $uid));
+
+					if ($answer) {
+						Dever::db('survey/user_answer')->update(array('where_id' => $answer['id'], 'value' => $survey_answer[$k], 'product_id' => $product_id));
+					} else {
+						Dever::db('survey/user_answer')->insert(array('info_id' => $v, 'uid' => $uid, 'value' => $survey_answer[$k], 'product_id' => $product_id));
+						$num++;
 					}
 				}
 			}
+
+			if ($num == $total) {
+				$user = Dever::db('survey/user')->one(array('uid' => $uid));
+				if ($user) {
+					Dever::db('survey/user')->update(array('where_id' => $user['id'], 'index' => $user['index'] + 1));
+				}
+			}
 		}
 
 		return true;
@@ -88,8 +102,92 @@ class Api
 	 *
 	 * @return mixed
 	 */
-	public function view($uid, $product_id, $page_number, $survey_id, $survey_answer)
+	public function view($uid, $product_id)
+	{
+		$product = Dever::config('base', 'project')->product;
+
+		$user = Dever::db('survey/user')->one(array('uid' => $uid));
+
+		$data['userinfo'] = Dever::db('passport/user')->one($uid);
+		$data['product'] = Dever::db($product)->one($product_id);
+
+		$data['info'] = Dever::db('survey/info')->state(array('uid' => $uid, 'product_id' => $product_id));
+
+		$data['question'] = array();
+
+		$data['page_number'] = 1;
+		$i = 1;
+		foreach ($data['info'] as $k => $v) {
+			if ($v['page_number'] > $data['page_number']) {
+				$data['page_number'] = $v['page_number'];
+			}
+			$v['content'] = $this->getContent($v['type'], $v['content']);
+
+			$answer = Dever::db('survey/user_answer')->one(array('uid' => $uid, 'info_id' => $v['id']));
+			if ($answer) {
+				if (($v['type'] == 3 || $v['type'] == 4) && strstr($answer['value'], 'http')) {
+					$answer['value'] = $this->getImg($answer['id'], $answer['value']);
+				} elseif ($v['type'] == 12 || $v['type'] == 13) {
+					$v['content'] = $this->getOption($answer['id'], $answer['value'], $v['content']);
+				}
+				$v['answer'] = $answer['value'];
+			} else {
+				$v['answer'] = '未作答';
+			}
+			
+			$data['question'][$v['page_number']][$i] = $v;
+			$i++;
+		}
+
+		//$user['index'] = 3;
+		if ($user['index'] >= $data['page_number']) {
+			# 完成了
+			$data['page'] = '100%';
+		} else {
+			$num = ceil(($user['index'] / $data['page_number']) * 100);
+			$data['page'] = $num . '%';
+		}
+
+		return Dever::render('home', $data);
+	}
+
+	private function getOption($id, $answer, $option)
 	{
+		$array = explode(',', $answer);
+		$total = count($option) - 1;
+		foreach ($array as $k => $v) {
+			if (is_numeric($v)) {
+				$v = $v - 1;
+				if (isset($option[$v])) {
+					$option[$v]['checked'] = true;
+				}
+			} else {
+				$option[$total]['checked'] = $v;
+			}
+		}
+		return $option;
+	}
+
+	private function getImg($id, $answer)
+	{
+		$result = '<a class="dever-img" id="answer_'.$id.'">';
+		$array = explode(',', $answer);
+		foreach ($array as $k => $v) {
+			$result .= '<img layer-src="'.$v.'" src="' . $v . '" style="width:200px;"/>&nbsp;&nbsp;';
+		}
+
+		$result .= '</a>';
 
+		return $result;
+	}
+
+	private function getContent($type, $content)
+	{
+		if ($type >= 11) {
+			$content = Dever::array_decode($content);
+		} else {
+			$content = array();
+		}
+		return $content;
 	}
 }