mirror of
https://gitee.com/anji-plus/report.git
synced 2026-03-20 09:38:35 +08:00
Merge branch 'master' of https://gitee.com/anji-plus/report
This commit is contained in:
@@ -12,7 +12,6 @@ module.exports = {
|
||||
nav: [
|
||||
{text: '首页', link: '/'},
|
||||
{text: '指南', link: '/guide/'},
|
||||
{text: '操作手册', link: '/operation/'},
|
||||
{text: 'GitHub', link: 'https://github.com/anji-plus/report'},
|
||||
{text: 'Gitee', link: 'https://gitee.com/anji-plus/report'},
|
||||
],
|
||||
@@ -24,7 +23,15 @@ module.exports = {
|
||||
children: [
|
||||
{title: '介绍', path: '/guide/'},
|
||||
{title: '快速入门', path: '/guide/quickly'},
|
||||
// {title: '系统运行', path: '/guide/deploy'}
|
||||
]
|
||||
},
|
||||
{
|
||||
title: '操作手册',
|
||||
collapsable: false,
|
||||
children: [
|
||||
{title: '数据源', path: '/guide/datasource'},
|
||||
{title: '数据集', path: '/guide/dataset'},
|
||||
{title: '大屏设计', path: '/guide/dashboard'},
|
||||
]
|
||||
},
|
||||
{
|
||||
@@ -34,19 +41,6 @@ module.exports = {
|
||||
{title: '常见问题', path: '/guide/question'}
|
||||
]
|
||||
}],
|
||||
'/operation/': [
|
||||
{
|
||||
title: '操作手册',
|
||||
collapsable: false,
|
||||
children: [
|
||||
{title: '数据源', path: '/operation/datasource'},
|
||||
{title: '数据集', path: '/operation/dataset'},
|
||||
{title: '大屏设计', path: '/operation/dashboard'},
|
||||
{title: '国际化', path: '/operation/i18n'},
|
||||
{title: '字典', path: '/operation/dict'},
|
||||
]
|
||||
}
|
||||
]
|
||||
}
|
||||
},
|
||||
plugins: [
|
||||
|
||||
@@ -1,3 +1,4 @@
|
||||
# 数据源
|
||||
## 数据源
|
||||
|
||||
## 标题一
|
||||
|
||||
@@ -1,4 +1,9 @@
|
||||
# 常见问题
|
||||
## 常见问题
|
||||
- 没有找到新增数据源类型?<br>
|
||||
字典管理目前暂未有页面维护,可自行去数据库中增加你需要的数据源类型。<br>
|
||||
表gaea_dict,字段dict_type:SOURCE_TYPE<br>
|
||||
表gaea_dict_item, item_extend字段是下拉选择后动态表单渲染的json数据<br>
|
||||
|
||||
|
||||
## 其他
|
||||
|
||||
|
||||
@@ -1,25 +0,0 @@
|
||||
# 介绍
|
||||
---
|
||||
|
||||
**大屏设计**
|
||||
|
||||
大屏设计(Report)是一个JavaEE微服务架构平台,采用经典组合(SpringBoot,SpringCloud,Vue,ElementUI)。目前提供两种架构,单体架构和微服务架构。
|
||||
内置的基础功能包括数据源,数据集,报表管理
|
||||
|
||||
**功能架构**
|
||||
- 前端
|
||||
|
||||
|
||||
- 后端
|
||||
|
||||
|
||||
**在线体验**
|
||||
- 访问地址
|
||||
|
||||
- 默认账号密码
|
||||
|
||||
|
||||
**联系我们**
|
||||
|
||||
|
||||
|
||||
@@ -1,32 +0,0 @@
|
||||
# 快速了解
|
||||
---
|
||||
## 项目简介
|
||||
- 项目源代码地址: <https://gitee.com/anji-plus/report>
|
||||
- 在线提问: <https://gitee.com/anji-plus/report/issues>
|
||||
- 在线文档:
|
||||
|
||||
大屏设计(Report)是一个可视化拖拽编辑的,直观,酷炫,具有科技感的图表工具项目。
|
||||
内置的基础功能包括数据源,数据集,国际化,字典管理,报表管理
|
||||
|
||||
|
||||
## 技术选型
|
||||
|
||||
**1.环境**
|
||||
- JavaEE 8
|
||||
- Apache Maven 3
|
||||
|
||||
**2.主框架**
|
||||
- Spring Boot 2.3.x
|
||||
|
||||
**3.持久层**
|
||||
- Apache MyBatis 3.5.x
|
||||
|
||||
**4.视图层**
|
||||
- Vue 2.6.10+
|
||||
- ElementUI 2.13.0+
|
||||
|
||||
|
||||
## 系统特性
|
||||
1. 最新最稳定的技术栈;
|
||||
2. 支持多数据源配置
|
||||
3. 丰富的大屏组件。拖拽配置实现动态大屏
|
||||
@@ -1,32 +0,0 @@
|
||||
# 快速了解
|
||||
---
|
||||
## 项目简介
|
||||
- 项目源代码地址: <https://gitee.com/anji-plus/report>
|
||||
- 在线提问: <https://gitee.com/anji-plus/report/issues>
|
||||
- 在线文档:
|
||||
|
||||
大屏设计(Report)是一个可视化拖拽编辑的,直观,酷炫,具有科技感的图表工具项目。
|
||||
内置的基础功能包括数据源,数据集,国际化,字典管理,报表管理
|
||||
|
||||
|
||||
## 技术选型
|
||||
|
||||
**1.环境**
|
||||
- JavaEE 8
|
||||
- Apache Maven 3
|
||||
|
||||
**2.主框架**
|
||||
- Spring Boot 2.3.x
|
||||
|
||||
**3.持久层**
|
||||
- Apache MyBatis 3.5.x
|
||||
|
||||
**4.视图层**
|
||||
- Vue 2.6.10+
|
||||
- ElementUI 2.13.0+
|
||||
|
||||
|
||||
## 系统特性
|
||||
1. 最新最稳定的技术栈;
|
||||
2. 支持多数据源配置
|
||||
3. 丰富的大屏组件。拖拽配置实现动态大屏
|
||||
BIN
doc/docs/operation/img.png
Normal file
BIN
doc/docs/operation/img.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 19 KiB |
7
doc/docs/operation/pie.md
Normal file
7
doc/docs/operation/pie.md
Normal file
@@ -0,0 +1,7 @@
|
||||
# 快速了解
|
||||
饼图配置
|
||||
## 1、添加饼图
|
||||

|
||||
## 2、饼图设置
|
||||
|
||||
## 3、数据格式
|
||||
BIN
doc/docs/picture/img.png
Normal file
BIN
doc/docs/picture/img.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 21 KiB |
BIN
doc/docs/picture/img_1.png
Normal file
BIN
doc/docs/picture/img_1.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 23 KiB |
4
pom.xml
4
pom.xml
@@ -23,9 +23,9 @@
|
||||
<properties>
|
||||
<gaea.version>6.0.0-SNAPSHOT</gaea.version>
|
||||
<gaea.security.version>1.0.0-SNAPSHOT</gaea.security.version>
|
||||
<gaea.export.version>1.0.0-SNAPSHOT</gaea.export.version>
|
||||
<gaea.export.version>1.0.0.RELEASE</gaea.export.version>
|
||||
<gaea.generator.version>1.0.0-SNAPSHOT</gaea.generator.version>
|
||||
<gaea.log.version>1.0.0-SNAPSHOT</gaea.log.version>
|
||||
<gaea.log.version>1.0.0.RELEASE</gaea.log.version>
|
||||
<maven.test.skip>true</maven.test.skip>
|
||||
</properties>
|
||||
|
||||
|
||||
@@ -167,7 +167,7 @@ export function editReportExcel (data) {
|
||||
// /dataSet/pageList
|
||||
export function dataSetPageList (data) {
|
||||
return request({
|
||||
url: '/dataSet/pageList',
|
||||
url: '/dataSet/pageList?page=' + data.page + '&size=' + data.size + '&sort=' + data.sort + '&order=' + data.order + '&pageNumber=' + data.pageNumber + '&pageSize=' + data.pageSize,
|
||||
method: 'GET',
|
||||
data,
|
||||
})
|
||||
|
||||
@@ -59,21 +59,15 @@
|
||||
<li>
|
||||
<div><i class="el-icon-full-screen mr10"></i>边框 <i class="el-icon-arrow-right ml20"></i></div>
|
||||
<ul class="three-level">
|
||||
<li><a href="#">三级菜单项</a></li>
|
||||
<li><a href="#">三级菜单项</a></li>
|
||||
<li><a href="#">三级菜单项</a></li>
|
||||
<li><a href="#">三级菜单项</a></li>
|
||||
<li><a href="#">三级菜单项</a></li>
|
||||
<li><a href="#">边框1</a></li>
|
||||
<li><a href="#">边框2</a></li>
|
||||
<li><a href="#">边框3</a></li>
|
||||
</ul>
|
||||
</li>
|
||||
<li>
|
||||
<div><i class="el-icon-magic-stick mr10"></i>装饰<i class="el-icon-arrow-right ml20"></i></div>
|
||||
<ul class="three-level">
|
||||
<li><a href="#">三级菜单项</a></li>
|
||||
<li><a href="#">三级菜单项</a></li>
|
||||
<li><a href="#">三级菜单项</a></li>
|
||||
<li><a href="#">三级菜单项</a></li>
|
||||
<li><a href="#">三级菜单项</a></li>
|
||||
<li><a href="#">装饰1</a></li>
|
||||
</ul>
|
||||
</li>
|
||||
</ul>
|
||||
@@ -848,73 +842,93 @@ li {
|
||||
padding: 0;
|
||||
}
|
||||
.nav {
|
||||
width: 40px;
|
||||
padding: 0;
|
||||
list-style: none;
|
||||
/* overflow: hidden; */
|
||||
}
|
||||
.nav > li {
|
||||
display: inline-block;
|
||||
.nav {
|
||||
zoom: 1;
|
||||
}
|
||||
.nav:before,
|
||||
.nav:after {
|
||||
content: "";
|
||||
display: table;
|
||||
}
|
||||
.nav:after {
|
||||
clear: both;
|
||||
}
|
||||
.nav li {
|
||||
width: 40px;
|
||||
text-align: center;
|
||||
position: relative;
|
||||
}
|
||||
.nav > li > a {
|
||||
.nav li a {
|
||||
float: left;
|
||||
padding: 12px 30px;
|
||||
color: #999;
|
||||
font: bold 12px;
|
||||
text-decoration: none;
|
||||
}
|
||||
.nav > li:hover > a {
|
||||
color: rgb(0, 136, 214);
|
||||
.nav li:hover {
|
||||
color: #6dc5ff;
|
||||
}
|
||||
.nav a {
|
||||
color: #cde8ff;
|
||||
display: block;
|
||||
text-decoration: none;
|
||||
}
|
||||
|
||||
.nav ul {
|
||||
display: none;
|
||||
background: #00113a;
|
||||
.nav li ul {
|
||||
visibility: hidden;
|
||||
position: absolute;
|
||||
z-index: 10000;
|
||||
z-index: 1000;
|
||||
list-style: none;
|
||||
top: 38px;
|
||||
left: 0;
|
||||
padding: 0;
|
||||
background-color: #263445;
|
||||
opacity: 0;
|
||||
_margin: 0;
|
||||
width: 120px;
|
||||
margin-left: -20px;
|
||||
transition: all 0.2s ease-in-out;
|
||||
}
|
||||
.nav li:hover > ul {
|
||||
opacity: 1;
|
||||
visibility: visible;
|
||||
margin: 0;
|
||||
}
|
||||
.nav ul li {
|
||||
position: relative;
|
||||
float: left;
|
||||
display: block;
|
||||
border: 0;
|
||||
width: 100%;
|
||||
font-size: 12px;
|
||||
}
|
||||
.nav > li:hover > ul {
|
||||
.nav ul a {
|
||||
padding: 10px;
|
||||
width: 100%;
|
||||
display: block;
|
||||
float: none;
|
||||
height: 120px;
|
||||
border: 1px solid #30445c;
|
||||
transition: all 0.2s ease-in-out;
|
||||
}
|
||||
.nav > li > .three-level > li > a {
|
||||
width: 10em;
|
||||
padding-left: 1em;
|
||||
padding-right: 1em;
|
||||
background-color: #0f2030;
|
||||
.nav ul a:hover {
|
||||
border: 1px solid #3c5e88;
|
||||
}
|
||||
// .nav li .three-level li {
|
||||
// display: none;
|
||||
// }
|
||||
.nav > li > ul > li:hover > a {
|
||||
display: block;
|
||||
background-color: #182e42;
|
||||
color: #fff;
|
||||
.nav ul li:first-child > a:hover:before {
|
||||
border-bottom-color: #04acec;
|
||||
}
|
||||
.nav > li > ul > li > ul {
|
||||
left: 100%;
|
||||
.nav ul ul {
|
||||
top: 0;
|
||||
left: 120px;
|
||||
width: 400px;
|
||||
height: 300px;
|
||||
overflow: auto;
|
||||
padding: 10px;
|
||||
box-shadow: -1px 0 0 #30445c;
|
||||
_margin: 0;
|
||||
}
|
||||
.nav > li:last-child > ul > li > ul {
|
||||
left: -100%;
|
||||
top: 0;
|
||||
}
|
||||
.nav > li > ul > li:hover > ul {
|
||||
.nav ul ul li {
|
||||
width: 120px;
|
||||
height: 120px;
|
||||
margin-right: 3px;
|
||||
display: block;
|
||||
}
|
||||
.nav > li > ul > li > ul > li > a {
|
||||
padding-top: 0.4em;
|
||||
padding-bottom: 0.4em;
|
||||
width: 10em;
|
||||
padding-left: 1em;
|
||||
padding-right: 1em;
|
||||
background-color: rgb(50, 50, 50);
|
||||
}
|
||||
.nav > li > ul > li > ul > li:hover > a {
|
||||
background-color: rgb(255, 255, 0);
|
||||
color: rgb(0, 0, 0);
|
||||
float: left;
|
||||
}
|
||||
</style>
|
||||
|
||||
@@ -106,11 +106,12 @@
|
||||
<template slot-scope="scope">
|
||||
<el-button type="text"
|
||||
@click="showAddLogModel(scope.row)">编辑</el-button>
|
||||
<el-popconfirm :title="'确定删除' + scope.row.sourceNameCode + '吗?'"
|
||||
@onConfirm="delData(scope.row)">
|
||||
<el-button slot="reference"
|
||||
type="text">删除</el-button>
|
||||
</el-popconfirm>
|
||||
<!-- <el-popconfirm :title="'确定删除' + scope.row.sourceNameCode + '吗?'"
|
||||
@onConfirm="delData(scope.row)"> -->
|
||||
<el-button slot="reference"
|
||||
@click="delData(scope.row)"
|
||||
type="text">删除</el-button>
|
||||
<!-- </el-popconfirm> -->
|
||||
</template>
|
||||
</el-table-column>
|
||||
</el-table>
|
||||
@@ -376,9 +377,29 @@ export default {
|
||||
})
|
||||
},
|
||||
async delData (val) {
|
||||
const { code } = await deleteDataSource(val)
|
||||
if (code != '200') return
|
||||
this.queryByPage()
|
||||
this.$confirm('确定删除?', '提示', {
|
||||
confirmButtonText: '确定',
|
||||
cancelButtonText: '取消',
|
||||
type: 'warning',
|
||||
})
|
||||
.then(async () => {
|
||||
this.$emit('deletelayer')
|
||||
this.visible = false
|
||||
const { code, data } = await deleteDataSource(val)
|
||||
if (code != '200') return
|
||||
this.queryByPage()
|
||||
this.$message({
|
||||
type: 'success',
|
||||
message: '删除成功!',
|
||||
})
|
||||
})
|
||||
.catch(() => {
|
||||
this.$message({
|
||||
type: 'info',
|
||||
message: '已取消删除',
|
||||
})
|
||||
})
|
||||
|
||||
},
|
||||
// 提交
|
||||
async UserConfirm (formName) {
|
||||
|
||||
@@ -14,12 +14,12 @@
|
||||
:md="6"
|
||||
:lg="6"
|
||||
:xl="6">
|
||||
<el-form-item label="数据集名称"
|
||||
<el-form-item label="数据集编码"
|
||||
label-width="120px">
|
||||
<el-input v-model.trim="query.setName"
|
||||
<el-input v-model.trim="query.setCode"
|
||||
size="mini"
|
||||
clearable
|
||||
placeholder="数据源名称"
|
||||
placeholder="数据集编码"
|
||||
class="filter-item" />
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
@@ -28,12 +28,12 @@
|
||||
:md="6"
|
||||
:lg="6"
|
||||
:xl="6">
|
||||
<el-form-item label="数据集编码"
|
||||
<el-form-item label="数据集名称"
|
||||
label-width="120px">
|
||||
<el-input v-model.trim="query.setCode"
|
||||
<el-input v-model.trim="query.setName"
|
||||
size="mini"
|
||||
clearable
|
||||
placeholder="数据集编码"
|
||||
placeholder="数据源名称"
|
||||
class="filter-item" />
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
@@ -97,16 +97,25 @@
|
||||
<el-button size="mini"
|
||||
type="text"
|
||||
@click="addOrEditDataSet(scope.row)">编辑</el-button>
|
||||
<el-popconfirm :title="'确定删除' + scope.row.setName + '吗?'"
|
||||
@onConfirm="delect(scope.row)">
|
||||
<el-button slot="reference"
|
||||
type="text">删除</el-button>
|
||||
</el-popconfirm>
|
||||
<!-- <el-popconfirm :title="'确定删除' + scope.row.setName + '吗?'"
|
||||
@onConfirm="delect(scope.row)"> -->
|
||||
<el-button slot="reference"
|
||||
type="text"
|
||||
@click="delect(scope.row)">删除</el-button>
|
||||
<!-- </el-popconfirm> -->
|
||||
</template>
|
||||
</el-table-column>
|
||||
</el-table>
|
||||
<!--分页组件-->
|
||||
<!-- <pagination /> -->
|
||||
<div class="block">
|
||||
<el-pagination :total="totalCount"
|
||||
:page-sizes="[10, 20, 50, 100]"
|
||||
:page-size="params.pageSize"
|
||||
:current-page="params.pageNumber"
|
||||
layout="total, sizes, prev, pager, next, jumper"
|
||||
@size-change="handleSizeChange"
|
||||
@current-change="handleCurrentChange" />
|
||||
</div>
|
||||
|
||||
<!--表单组件-->
|
||||
<el-dialog :visible.sync="dialogFormVisible"
|
||||
@@ -119,7 +128,7 @@
|
||||
:model="formData"
|
||||
:rules="formRules"
|
||||
size="small"
|
||||
label-width="100px">
|
||||
label-width="130px">
|
||||
<el-row :gutter="10">
|
||||
<el-col :xs="24"
|
||||
:sm="20"
|
||||
@@ -144,9 +153,9 @@
|
||||
:md="8"
|
||||
:lg="8"
|
||||
:xl="8">
|
||||
<el-form-item label="数据集名称"
|
||||
prop="setName">
|
||||
<el-input v-model.trim="formData.setName"
|
||||
<el-form-item label="数据集编码"
|
||||
prop="setCode">
|
||||
<el-input v-model.trim="formData.setCode"
|
||||
size="mini" />
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
@@ -155,9 +164,9 @@
|
||||
:md="8"
|
||||
:lg="8"
|
||||
:xl="8">
|
||||
<el-form-item label="数据集编码"
|
||||
prop="setCode">
|
||||
<el-input v-model.trim="formData.setCode"
|
||||
<el-form-item label="数据集名称"
|
||||
prop="setName">
|
||||
<el-input v-model.trim="formData.setName"
|
||||
size="mini" />
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
@@ -178,8 +187,7 @@
|
||||
:lg="22"
|
||||
:xl="22"
|
||||
class="code-mirror-form">
|
||||
<el-form-item label="查询SQL或请求体"
|
||||
label-width="140px">
|
||||
<el-form-item label="查询SQL或请求体">
|
||||
<div class="codemirror">
|
||||
<codemirror v-model.trim="formData.dynSentence"
|
||||
:options="optionsSql"
|
||||
@@ -498,6 +506,8 @@ export default {
|
||||
}`,
|
||||
itemFilterScriptId: '',
|
||||
title: '自定义高级规则',
|
||||
totalCount: 0,
|
||||
totalPage: 0,
|
||||
params: {
|
||||
pageNumber: 1,
|
||||
pageSize: 10,
|
||||
@@ -570,24 +580,30 @@ export default {
|
||||
},
|
||||
async queryByPage () {
|
||||
let params = {
|
||||
page: 0,
|
||||
size: 10,
|
||||
page: this.params.pageNumber,
|
||||
size: this.params.pageSize,
|
||||
sort: "update_time",
|
||||
order: "DESC",
|
||||
pageNumber: 1,
|
||||
pageSize: 10
|
||||
pageNumber: this.params.pageNumber,
|
||||
pageSize: this.params.pageSize
|
||||
}
|
||||
const res = await dataSetPageList(params)
|
||||
if (res.code != '200') return
|
||||
this.listLoading = true
|
||||
this.data = res.data.records
|
||||
|
||||
this.totalCount = res.data.total
|
||||
this.totalPage = res.data.pages
|
||||
this.listLoading = false
|
||||
},
|
||||
|
||||
|
||||
handleSizeChange (val) {
|
||||
this.params.pageSize = val
|
||||
this.queryByPage()
|
||||
},
|
||||
handleCurrentChange (val) {
|
||||
this.params.pageNumber = val
|
||||
this.queryByPage()
|
||||
},
|
||||
|
||||
onJsonChange (value) { },
|
||||
onJsonSave (value) { },
|
||||
@@ -599,10 +615,29 @@ export default {
|
||||
this.caseResultTitle = item.setName
|
||||
this.caseResultContent = JSON.parse(item.caseResult)
|
||||
},
|
||||
async delect (row) {
|
||||
this.visible = false
|
||||
const { code, data } = await deleteDataSet(row)
|
||||
if (code != '200') return
|
||||
delect (row) {
|
||||
this.$confirm('确定删除?', '提示', {
|
||||
confirmButtonText: '确定',
|
||||
cancelButtonText: '取消',
|
||||
type: 'warning',
|
||||
})
|
||||
.then(async () => {
|
||||
this.$emit('deletelayer')
|
||||
this.visible = false
|
||||
const { code, data } = await deleteDataSet(row)
|
||||
if (code != '200') return
|
||||
this.queryByPage()
|
||||
this.$message({
|
||||
type: 'success',
|
||||
message: '删除成功!',
|
||||
})
|
||||
})
|
||||
.catch(() => {
|
||||
this.$message({
|
||||
type: 'info',
|
||||
message: '已取消删除',
|
||||
})
|
||||
})
|
||||
},
|
||||
// 编辑数据集,获取单条数据详情
|
||||
addOrEditDataSet (row) {
|
||||
@@ -886,9 +921,11 @@ export default {
|
||||
if (this.dialogFormVisibleTitle === '新增数据集') {
|
||||
const { code } = await addDataSet(this.formData)
|
||||
if (code != '200') return
|
||||
this.queryByPage()
|
||||
} else {
|
||||
const { code } = await editDataSet(this.formData)
|
||||
if (code != '200') return
|
||||
this.queryByPage()
|
||||
}
|
||||
this.dialogFormVisible = false
|
||||
} else {
|
||||
|
||||
Reference in New Issue
Block a user