三江源可视化管理中增加数据表和字段选择功能
This commit is contained in:
parent
4a68d06ee1
commit
8a3d5fefb8
|
@ -3961,6 +3961,15 @@ class Admin_DataController extends Zend_Controller_Action
|
||||||
$submit = $this->_getParam('submit');
|
$submit = $this->_getParam('submit');
|
||||||
$visual = new Visual\Visual;
|
$visual = new Visual\Visual;
|
||||||
|
|
||||||
|
if(true == view::isXmlHttpRequest($this))
|
||||||
|
{
|
||||||
|
$tableName = $this->_getParam('tablename');
|
||||||
|
|
||||||
|
$visualTable = new Visual\DataTableControl;
|
||||||
|
|
||||||
|
$this->jsonexit($visualTable->readFields($tableName));
|
||||||
|
}
|
||||||
|
|
||||||
if(!empty($uuid))
|
if(!empty($uuid))
|
||||||
{
|
{
|
||||||
$this->_helper->viewRenderer('visual-add');
|
$this->_helper->viewRenderer('visual-add');
|
||||||
|
@ -3968,6 +3977,10 @@ class Admin_DataController extends Zend_Controller_Action
|
||||||
|
|
||||||
if(empty($submit))
|
if(empty($submit))
|
||||||
{
|
{
|
||||||
|
$visualTable = new Visual\DataTableControl;
|
||||||
|
|
||||||
|
$this->view->visualTable = $visualTable->readTables();
|
||||||
|
|
||||||
$data = $visual->getVisualVars($uuid);
|
$data = $visual->getVisualVars($uuid);
|
||||||
|
|
||||||
if(!empty($data))
|
if(!empty($data))
|
||||||
|
@ -3982,7 +3995,9 @@ class Admin_DataController extends Zend_Controller_Action
|
||||||
'uuid' => $this->_getParam('uuid'),
|
'uuid' => $this->_getParam('uuid'),
|
||||||
'vars' => $this->_getParam('var'),
|
'vars' => $this->_getParam('var'),
|
||||||
'data' => $this->_getParam('data'),
|
'data' => $this->_getParam('data'),
|
||||||
'status' => $this->_getParam('status')
|
'status' => $this->_getParam('status'),
|
||||||
|
'visual_datatable' => $this->_getParam('visual_datatable'),
|
||||||
|
'visual_timefield' => $this->_getParam('visual_timefield'),
|
||||||
);
|
);
|
||||||
|
|
||||||
$status = $visual->add($data);
|
$status = $visual->add($data);
|
||||||
|
@ -3992,6 +4007,18 @@ class Admin_DataController extends Zend_Controller_Action
|
||||||
view::Post($this,"添加成功!",-2);
|
view::Post($this,"添加成功!",-2);
|
||||||
return true;
|
return true;
|
||||||
}else{
|
}else{
|
||||||
|
|
||||||
|
$visualTable = new Visual\DataTableControl;
|
||||||
|
|
||||||
|
$this->view->visualTable = $visualTable->readTables();
|
||||||
|
|
||||||
|
$data = $visual->getVisualVars($uuid);
|
||||||
|
|
||||||
|
if(!empty($data))
|
||||||
|
{
|
||||||
|
$this->view->info = $data;
|
||||||
|
}
|
||||||
|
|
||||||
$this->view->error = $status;
|
$this->view->error = $status;
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
|
@ -21,6 +21,7 @@
|
||||||
<?= $this->error ?>
|
<?= $this->error ?>
|
||||||
</div>
|
</div>
|
||||||
<?php }?>
|
<?php }?>
|
||||||
|
|
||||||
<form class="form-horizontal" method="post" action="">
|
<form class="form-horizontal" method="post" action="">
|
||||||
<div class="control-group">
|
<div class="control-group">
|
||||||
<label class="control-label" for="inputUUID">UUID</label>
|
<label class="control-label" for="inputUUID">UUID</label>
|
||||||
|
@ -53,12 +54,36 @@
|
||||||
</label>
|
</label>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div class="control-group">
|
<div class="control-group">
|
||||||
<label class="control-label" for="inputData">数据读取SQL或表名</label>
|
<label class="control-label">数据表</label>
|
||||||
<div class="controls">
|
<div class="controls">
|
||||||
<textarea name="data" rows="4" class="input-block-level" id="inputData"><?= !isset($this->info['data']) ? "":$this->info['data']?></textarea>
|
<select name="visual_datatable" id="data-table">
|
||||||
|
<?php foreach($this->visualTable as $k=>$v){ ?>
|
||||||
|
<?php if(isset($this->info['visual_datatable']) && $this->info['visual_datatable']==$v){ ?>
|
||||||
|
<option value="<?= $v ?>" selected="selected"><?= $v ?></option>
|
||||||
|
<?php }else{ ?>
|
||||||
|
<option value="<?= $v ?>"><?= $v ?></option>
|
||||||
|
<?php } ?>
|
||||||
|
<?php } ?>
|
||||||
|
</select>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
<div class="control-group">
|
||||||
|
<label class="control-label">时间字段</label>
|
||||||
|
<div class="controls" id="field-time">
|
||||||
|
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="control-group">
|
||||||
|
<label class="control-label" for="inputData">数据读取SQL或表名</label>
|
||||||
|
<div class="controls">
|
||||||
|
<textarea name="data" rows="4" class="input-block-level" id="inputData"><?= !isset($this->info['data']) ? "":$this->info['data']?></textarea>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
<?php if(empty($this->info['vars'])) { ?>
|
<?php if(empty($this->info['vars'])) { ?>
|
||||||
<div class="control-group">
|
<div class="control-group">
|
||||||
<label class="control-label" for="inputVariable">可视化要素</label>
|
<label class="control-label" for="inputVariable">可视化要素</label>
|
||||||
|
@ -71,14 +96,16 @@
|
||||||
<?php $encoder = new \Westdc\Visual\VariableEncoder; ?>
|
<?php $encoder = new \Westdc\Visual\VariableEncoder; ?>
|
||||||
<?php $vars = $encoder->decode($this->info['vars']);?>
|
<?php $vars = $encoder->decode($this->info['vars']);?>
|
||||||
<?php foreach($vars as $k=>$v) { ?>
|
<?php foreach($vars as $k=>$v) { ?>
|
||||||
<div class="control-group">
|
<div class="control-group var-group">
|
||||||
<label class="control-label" for="inputVariable">可视化要素 <small><a href="javascript:void(0);" onclick="delVar(this)">删除</a></small></label>
|
<label class="control-label" for="inputVariable">可视化要素 <small><a href="javascript:void(0);" onclick="delVar(this)">删除</a></small></label>
|
||||||
<div class="controls">
|
<div class="controls">
|
||||||
<input type="text" id="inputVariable" placeholder="Variable" class="input-block-level" name="var[]" value="<?= $v ?>">
|
字段<input type="text" name="var[<?=$k?>][field]" value="<?= $v['field'] ?>" readonly />
|
||||||
|
显示名<input type="text" name="var[<?= $k ?>][name]" value="<?= $v['name'] ?>">
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<?php } ?>
|
<?php } ?>
|
||||||
<?php } ?>
|
<?php } ?>
|
||||||
|
|
||||||
<div class="control-group" id="last-control-group">
|
<div class="control-group" id="last-control-group">
|
||||||
<div class="controls">
|
<div class="controls">
|
||||||
<input type="hidden" name="submit" value="1" />
|
<input type="hidden" name="submit" value="1" />
|
||||||
|
@ -90,16 +117,86 @@
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<script type="text/javascript">
|
<script type="text/javascript">
|
||||||
|
var fieldData,fieldHtml,varHtml,current_count;
|
||||||
|
|
||||||
|
function makeVarSelectHtml(field_data){
|
||||||
|
|
||||||
|
current_count = $('.var-group').length;
|
||||||
|
|
||||||
|
fieldHtml = []
|
||||||
|
|
||||||
|
for(i in field_data)
|
||||||
|
{
|
||||||
|
fieldHtml.push('<option value="'+ fieldData[i] +'">'+ fieldData[i] +'</option>');
|
||||||
|
}
|
||||||
|
|
||||||
|
varHtml = '<select name="var['+current_count+'][field]">' + fieldHtml.join('') + '</select>';
|
||||||
|
html = '<div class="control-group var-group">'
|
||||||
|
+ '<label class="control-label" for="inputVariable">可视化要素 <small><a href="javascript:void(0);" onclick="delVar(this)">删除</a></small></label>'
|
||||||
|
+ '<div class="controls">'
|
||||||
|
+ '字段' + varHtml
|
||||||
|
+ ' 显示名 <input type="text" placeholder="Variable" class="input-small" name="var['+current_count+'][name]">'
|
||||||
|
+ '</div>'
|
||||||
|
+'</div>';
|
||||||
|
return html;
|
||||||
|
}
|
||||||
|
|
||||||
$('#addVariable').click(function(e) {
|
$('#addVariable').click(function(e) {
|
||||||
html = '<div class="control-group">'
|
if(null == fieldData)
|
||||||
+ '<label class="control-label" for="inputVariable">可视化要素 <small><a href="javascript:void(0);" onclick="delVar(this)">删除</a></small></label>'
|
{
|
||||||
+ '<div class="controls">'
|
alert('请先选择数据表和时间字段');
|
||||||
+ '<input type="text" id="inputVariable" placeholder="Variable" class="input-block-level" name="var[]">'
|
return false;
|
||||||
+ '</div>'
|
}
|
||||||
+'</div>';
|
|
||||||
$('#last-control-group').prepend(html);
|
$('#last-control-group').prepend(makeVarSelectHtml(fieldData));
|
||||||
});
|
});
|
||||||
function delVar(dom){
|
function delVar(dom){
|
||||||
$(dom).parent().parent().parent('.control-group').remove();
|
$(dom).parent().parent().parent('.control-group').remove();
|
||||||
}
|
};
|
||||||
|
$(document).ready(function(){
|
||||||
|
$('#data-table').change(function(){
|
||||||
|
$('.var-group').remove();
|
||||||
|
$.ajax({
|
||||||
|
type:"POST",
|
||||||
|
url:'',
|
||||||
|
data:'tablename='+ $(this).val(),
|
||||||
|
success:function(data){
|
||||||
|
fieldData = data;
|
||||||
|
html = [];
|
||||||
|
for(i in data)
|
||||||
|
{
|
||||||
|
html.push('<option value="' + data[i] + '">' + data[i] + '</option>');
|
||||||
|
}
|
||||||
|
html = '<select name="visual_timefield">' + html.join('')+'</select>';
|
||||||
|
$('#field-time').html(html);
|
||||||
|
},
|
||||||
|
beforeSend:function(){
|
||||||
|
$('#field-time').html('加载中');
|
||||||
|
}
|
||||||
|
});
|
||||||
|
});
|
||||||
|
<?php if(!empty($this->info['ts_created'])) { ?>
|
||||||
|
$.ajax({
|
||||||
|
type:"POST",
|
||||||
|
url:'',
|
||||||
|
data:'tablename=<?= $this->info['visual_datatable'] ?>',
|
||||||
|
success:function(data){
|
||||||
|
fieldData = data;
|
||||||
|
html = [];
|
||||||
|
for(i in data)
|
||||||
|
{
|
||||||
|
if('<?= $this->info['visual_timefield'] ?>' == data[i])
|
||||||
|
html.push('<option value="' + data[i] + '" selected="selected">' + data[i] + '</option>');
|
||||||
|
else
|
||||||
|
html.push('<option value="' + data[i] + '">' + data[i] + '</option>');
|
||||||
|
}
|
||||||
|
html = '<select name="visual_timefield">' + html.join('')+'</select>';
|
||||||
|
$('#field-time').html(html);
|
||||||
|
},
|
||||||
|
beforeSend:function(){
|
||||||
|
$('#field-time').html('加载中');
|
||||||
|
}
|
||||||
|
});
|
||||||
|
<?php } ?>
|
||||||
|
});
|
||||||
</script>
|
</script>
|
||||||
|
|
|
@ -0,0 +1,35 @@
|
||||||
|
<?php
|
||||||
|
/**
|
||||||
|
* Created by PhpStorm.
|
||||||
|
* User: Administrator
|
||||||
|
* Date: 2014/12/4
|
||||||
|
* Time: 11:31
|
||||||
|
*/
|
||||||
|
|
||||||
|
namespace Westdc\Visual;
|
||||||
|
|
||||||
|
|
||||||
|
class DataTableControl extends Database{
|
||||||
|
|
||||||
|
function __construct()
|
||||||
|
{
|
||||||
|
parent::__construct();
|
||||||
|
}
|
||||||
|
|
||||||
|
public function readTables()
|
||||||
|
{
|
||||||
|
$sql = "SELECT tablename FROM pg_tables WHERE tablename LIKE 'data_%' ORDER BY tablename ";
|
||||||
|
$rs = $this->db->query($sql);
|
||||||
|
|
||||||
|
$row = $rs->fetchAll(\PDO::FETCH_COLUMN);
|
||||||
|
return $row;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function readFields($tableName)
|
||||||
|
{
|
||||||
|
$sql = "select COLUMN_NAME from INFORMATION_SCHEMA.COLUMNS where TABLE_NAME='$tableName'";
|
||||||
|
$rs = $this->db->query($sql);
|
||||||
|
return $rs->fetchAll(\PDO::FETCH_COLUMN);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
|
@ -0,0 +1,34 @@
|
||||||
|
<?php
|
||||||
|
/**
|
||||||
|
* Created by PhpStorm.
|
||||||
|
* User: Administrator
|
||||||
|
* Date: 2014/12/4
|
||||||
|
* Time: 11:28
|
||||||
|
*/
|
||||||
|
|
||||||
|
namespace Westdc\Visual;
|
||||||
|
|
||||||
|
|
||||||
|
class Database {
|
||||||
|
|
||||||
|
public $db;
|
||||||
|
|
||||||
|
function __construct()
|
||||||
|
{
|
||||||
|
$this->initDatabase();
|
||||||
|
}
|
||||||
|
|
||||||
|
public function initDatabase()
|
||||||
|
{
|
||||||
|
$config = \Zend_Registry::get('config');
|
||||||
|
|
||||||
|
$dsn = "pgsql:host={$config->visual_db->hostname};"
|
||||||
|
."port={$config->visual_db->port};"
|
||||||
|
."dbname={$config->visual_db->database};"
|
||||||
|
."user={$config->visual_db->username};"
|
||||||
|
."password={$config->visual_db->password}";
|
||||||
|
|
||||||
|
$this->db = new \PDO($dsn);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
|
@ -1,11 +1,9 @@
|
||||||
<?php
|
<?php
|
||||||
namespace Westdc\Visual;
|
namespace Westdc\Visual;
|
||||||
|
|
||||||
class Record
|
class Record extends Database
|
||||||
{
|
{
|
||||||
|
|
||||||
public $db;
|
|
||||||
|
|
||||||
public $subdataset;
|
public $subdataset;
|
||||||
|
|
||||||
public $timeFiled = "utctime";
|
public $timeFiled = "utctime";
|
||||||
|
@ -14,7 +12,7 @@ class Record
|
||||||
|
|
||||||
function __construct($uuid = NULL,$identifier = "")
|
function __construct($uuid = NULL,$identifier = "")
|
||||||
{
|
{
|
||||||
$this->initDatabase();
|
parent::__construct();
|
||||||
|
|
||||||
if(!empty($identifier))
|
if(!empty($identifier))
|
||||||
{
|
{
|
||||||
|
@ -32,19 +30,6 @@ class Record
|
||||||
return $this->getData();
|
return $this->getData();
|
||||||
}
|
}
|
||||||
|
|
||||||
public function initDatabase()
|
|
||||||
{
|
|
||||||
$config = \Zend_Registry::get('config');
|
|
||||||
|
|
||||||
$dsn = "pgsql:host={$config->visual_db->hostname};"
|
|
||||||
."port={$config->visual_db->port};"
|
|
||||||
."dbname={$config->visual_db->database};"
|
|
||||||
."user={$config->visual_db->username};"
|
|
||||||
."password={$config->visual_db->password}";
|
|
||||||
|
|
||||||
$this->db = new \PDO($dsn);
|
|
||||||
}
|
|
||||||
|
|
||||||
public function initVisual($uuid)
|
public function initVisual($uuid)
|
||||||
{
|
{
|
||||||
$visual = new Visual;
|
$visual = new Visual;
|
||||||
|
@ -84,7 +69,7 @@ class Record
|
||||||
{
|
{
|
||||||
$sql = "SELECT
|
$sql = "SELECT
|
||||||
{$this->timeFiled} as utctime , \"$fieldValue\" as value
|
{$this->timeFiled} as utctime , \"$fieldValue\" as value
|
||||||
FROM $table
|
FROM $table as tbl
|
||||||
ORDER BY
|
ORDER BY
|
||||||
extract(YEAR from \"{$this->timeFiled}\") ASC,
|
extract(YEAR from \"{$this->timeFiled}\") ASC,
|
||||||
extract(MONTH from \"{$this->timeFiled}\") ASC,
|
extract(MONTH from \"{$this->timeFiled}\") ASC,
|
||||||
|
|
|
@ -15,25 +15,13 @@ class VariableEncoder
|
||||||
|
|
||||||
public function encode($vars)
|
public function encode($vars)
|
||||||
{
|
{
|
||||||
$arr = [];
|
return json_encode($vars);
|
||||||
foreach($vars as $k=>$v)
|
|
||||||
{
|
|
||||||
$names = explode("|",$v);
|
|
||||||
$arr[] = [ 'dataset' => $names[0], 'subdataset' => $names[1],'seriename' => $names[2]];
|
|
||||||
}
|
|
||||||
return json_encode($arr);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public function decode($json)
|
public function decode($json)
|
||||||
{
|
{
|
||||||
$arr = json_decode($json,true);
|
$arr = json_decode($json,true);
|
||||||
//var_dump($arr);
|
return $arr;
|
||||||
$data = [];
|
|
||||||
foreach($arr as $k=>$v)
|
|
||||||
{
|
|
||||||
$data[$k] = join("|",$v);
|
|
||||||
}
|
|
||||||
return $data;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public function normaldecode($json)
|
public function normaldecode($json)
|
||||||
|
|
Loading…
Reference in New Issue