nk-lihaink-cn/app/home/view/bi/data_detail.html
2021-01-30 20:59:12 +08:00

320 lines
10 KiB
HTML

{extend name="common/base"/}
{block name="style"}
<link rel="stylesheet" href="{__CSS__}/user.css?v={:get_config('webconfig.version')}" media="all">
{/block}
<!-- 主体 -->
{block name="body"}
{include file="common/header" nav='info' /}
<div class="user">
<div class="user-home"><a href="/">首页</a> - 个人中心</div>
<div class="user-box clearfix">
<div class="l user-menu">
{include file="common/usermenu" nav='info' /}
</div>
<div class="r user-right">
<div id="dataFile" class="data-topic">
<table cellpadding="0" cellspacing="0">
<tr>
<th colspan="4">
<div class="l">
<h3>{$topic.title}</h3>
</div>
<div class="r"><span class="upload-post-btn table-add" data-id="{$topic.id}">添加数据表</span>
</div>
</th>
</tr>
<tr>
<th width="15%">表名</th>
<th width="15%">表注释</th>
<th width="45%">字段</th>
<th width="25%">操作</th>
</tr>
{empty name="tables"}
<tr>
<td colspan="4">
<div style="text-align:center; color:#999; font-size: 12px;">暂无数据表,<a href="javascript:;"
class="table-add" style="color: #4385F5;">去新建</a></div>
</td>
</tr>
{/empty}
{volist name="tables" id="vo"}
<tr>
<td>{$vo.table_name}</td>
<td>{$vo.title}</td>
<td>
<ul>
{volist name="vo.columns" id="voo"}
<li data-id="{$vo.id}">● {$voo.name}<span
class="columns-span">[注释:{$voo.title},数据类型:{$voo.type}]</span></li>
{/volist}
</ul>
</td>
<td style="text-align: center;">
<a href="javascript:;" class="file-add" data-uid="1" data-table="{$vo.table_name}" data-columns="{$vo.columns_json}">上传数据</a>
<a href="javascript:;" class="table-view">预览数据</a>
<a href="javascript:;" class="table-edit" data-id="{$vo.id}">编辑</a>
<a href="javascript:;" class="table-del" data-id="{$vo.id}">删除</a>
</td>
</tr>
{/volist}
</table>
</div>
</div>
</div>
</div>
{/block}
<!-- /主体 -->
<!-- 脚本 -->
{block name="script"}
<script src="https://cdn.bootcdn.net/ajax/libs/xlsx/0.16.8/xlsx.core.min.js"></script>
<script type="text/javascript" src="{__JS__}/excel.upload.js"></script>
<script>
var tid = '{$topic.id}';//0.13.5
var user_id = '{$bi_user.id}';
var user_salt = '{$bi_user.salt}';
//远程创建bi_table
function createBiTable(table_name,table_schema){
var table ={
"user_id": user_salt+user_id,
"table_name": table_name,
"table_schema": "CREATE TABLE cehsitablea (d DateTime, "+table_schema+")ENGINE = MergeTree PARTITION BY toYYYYMM(d) ORDER BY d;"
};
$.ajax({
url: "http://i.slambase.cn:8081/v1/table",
data: JSON.stringify(table),
type: 'POST',
contentType: "application/json;charset=UTF-8",
success: function (res) {
console.log(res);
if (res.code == 200) {
layer.msg('操作成功');
window.location.reload();
}
}
})
}
function isCheck(val, type) {
if (val == type) {
return 'checked'
}
else {
return '';
}
}
function editTable(id, data) {
var tableItem = '';
for (var i = 0; i < data.columns.length; i++) {
var index = new Date().getTime() + i;
tableItem += '<tr class="table-edit-item" data-index="' + index + '">\
<td><input type="text" class="bi-input" name="columns_name" value="'+ data.columns[i].name + '" autocomplete="off" placeholder="字段名,如:name"></td>\
<td><input type="text" class="bi-input" name="columns_title" value="'+ data.columns[i].title + '" autocomplete="off" placeholder="字段注释,如:用户名"></td>\
<td><label><input type="radio" name="columns_type'+ index + '" value="String" ' + isCheck(data.columns[i].type, 'string') + '>文本</label>\
<label><input type="radio" name="columns_type'+ index + '" value="Int64" ' + isCheck(data.columns[i].type, 'int') + '>整数</label>\
<label><input type="radio" name="columns_type'+ index + '" value="Float64" ' + isCheck(data.columns[i].type, 'float') + '>小数</label>\
<label><input type="radio" name="columns_type'+ index + '" value="Date" ' + isCheck(data.columns[i].type, 'date') + '>日期</label></td>\
<td class="table-del">删除</td>\
</tr>';
}
layer.open({
title: '数据表',
type: 1,
area: ['800px', '560px'],
btn: ['提交保存'],
btnAlign: 'c',
yes: function(index, layero){
var id = $('[name="table_id"]').val();
var table_name = $('[name="table_name"]').val();
var title = $('[name="title"]').val();
if (table_name == '') {
layer.msg('请完善数据表名');
return false;
}
if (/^[a-z\_]*$/g.test(table_name) == false) {
layer.msg('数据表名只能是小写字母和下划线"_"的组合');
return false;
}
if (title == '') {
layer.msg('请完善数据表注释');
return false;
}
var item = $('.table-edit-item'), itemArray = [], table_schema = '', flat = 0;
for (var i = 0; i < item.length; i++) {
var idx = $(item[i]).data('index');
var columns_name = $(item[i]).find('[name="columns_name"]').val();
var columns_title = $(item[i]).find('[name="columns_title"]').val();
var columns_type = $("input[name='columns_type" + idx + "']:checked").val();
if (columns_name == '') {
layer.msg('请完善第' + (i + 1) + '行的字段名');
flat = 1;
break;
}
if (/^[a-z\_]*$/g.test(columns_name) == false) {
layer.msg('第' + (i + 1) + '行的字段名只能是小写字母和下划线"_"的组合');
return false;
}
if (columns_title == '') {
layer.msg('请完善第' + (i + 1) + '行的字段注释');
flat = 1;
break;
}
if (!columns_type) {
layer.msg('请完善第' + (i + 1) + '行的字段类型');
flat = 1;
break;
}
if (columns_name != '' && columns_title != '' && columns_type) {
itemArray.push({
'name': columns_name,
'title': columns_title,
'type': columns_type
})
if(i==0){
table_schema+=columns_name+' '+columns_type;
}else{
table_schema+=','+columns_name+' '+columns_type;
}
}
}
if (flat == 0) {
$.ajax({
url: '/home/bi/table_add',
data: { 'id': id, 'tid': tid, 'title': title, 'table_name': table_name, 'item': itemArray },
type: 'post',
success: function (res) {
if (res.code == 1) {
createBiTable(table_name,table_schema);
}
else {
layer.msg(res.msg);
}
}
})
}
},
content: '<div class="table-box" id="tableBox">\
<form id="tableForm">\
<input type="hidden" name="table_id" value="'+ data.id + '">\
<p class="table-edit-title">表信息</p>\
表名:<input type="text" class="bi-input" name="table_name" value="'+ data.table_name + '" autocomplete="off" placeholder="表名,如:user">\
&nbsp;&nbsp;&nbsp;表注释:<input type="text" class="bi-input" name="title" value="'+ data.title + '" autocomplete="off" placeholder="表注释,如:用户表">\
<p class="table-edit-title">表字段</p>\
<table id="tableItem"><tr><th>字段名</th><th>字段注释</th><th>字段类型</th><th>操作</th></tr>'+ tableItem + '</table></form>\
<div class="table-edit-btn">\
<span class="upload-post-btn table-add">+新增字段</span>\
</div>\
</div>',
success: function (layero, index) {
$('#tableBox').on('click', '.table-add', function () {
var idx = new Date().getTime();
var item = '<tr class="table-edit-item" data-index="' + idx + '">\
<td><input type="text" class="bi-input" name="columns_name" value="" autocomplete="off" placeholder="字段名,如:name"></td>\
<td><input type="text" class="bi-input" name="columns_title" value="" autocomplete="off" placeholder="字段注释,如:用户名"></td>\
<td><label><input type="radio" name="columns_type'+ idx + '" value="String">文本</label>\
<label><input type="radio" name="columns_type'+ idx + '" value="Int64">整数</label>\
<label><input type="radio" name="columns_type'+ idx + '" value="Float64">小数</label>\
<label><input type="radio" name="columns_type'+ idx + '" value="Date">日期</label></td>\
<td><span class="table-del">删除</span></td>\
</tr>';
$('#tableItem').append(item);
})
$('#tableBox').on('click', '.table-del', function () {
var tr = $('#tableItem').find('tr'), that = $(this);
if (tr.length < 4) {
layer.msg('至少保留两个字段');
return false;
}
layer.confirm('确定要删除该字段吗?', {
icon: 3, title: '提示'
}, function (index) {
that.parents('tr').remove();
layer.close(index);
});
})
}
});
}
//增加数据表
$('#dataFile').on('click', '.table-add', function () {
var id = $(this).data('id');
var data = {
id: 0,
table_name: '',
title: '',
columns: [{
name: '',
title: '',
type: ''
}, {
name: '',
title: '',
type: ''
}]
}
editTable(id, data);
})
//编辑数据表
$('#dataFile').on('click', '.table-edit', function () {
var id = $(this).data('id');
$.ajax({
url: "/home/bi/table_detail",
data: {
id: id
},
success: function (res) {
if (res.code == 1) {
var data = res.data;
editTable(id, data);
}
}
})
})
//删除数据表
$('#dataFile').on('click', '.table-del', function () {
var id = $(this).data('id');
layer.confirm('删除该数据表,该数据表包含的数据也会被删除,确定要删除吗?', {
icon: 3,
title: '提示'
}, function (index) {
$.ajax({
url: "/home/bi/table_delete",
data: {
id: id
},
success: function (res) {
if (res.code == 1) {
layer.msg('操作成功');
window.location.reload();
}
}
})
layer.close(index);
});
});
//上传表格
$('#dataFile').on('click', '.file-add', function () {
var uid = $(this).data('uid');
var table = $(this).data('table');
var columns = $(this).data('columns');
uploadExcel({
data: {'user_id':'ceshi','table_name':'ceshitable','table_schema':columns},
success: function (file, info) {
}
});
});
</script>
{/block}
<!-- /脚本 -->