diff --git a/README.md b/README.md index 11e7bcd..459f0a6 100644 --- a/README.md +++ b/README.md @@ -1,9 +1,9 @@

- Downloads + Downloads Build Status Build Status - Coverage Status - Downloads + Coverage Status + Downloads Downloads diff --git a/config/router.config.js b/config/router.config.js index 25a60c8..bc1f472 100644 --- a/config/router.config.js +++ b/config/router.config.js @@ -236,6 +236,15 @@ export default [ }, ], }, + { + path: '/report', + routes: [ + { + path: '/report/reportlist', + routes: [{ path: '/report/reportlist', component: './Report/Report' }], + }, + ], + }, { path: '/tool', routes: [ diff --git a/package.json b/package.json index b2aed54..86ed2f5 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "sword", - "version": "2.7.3", + "version": "2.8.0", "description": "An out-of-box UI solution for enterprise applications", "private": true, "scripts": { diff --git a/src/actions/report.js b/src/actions/report.js new file mode 100644 index 0000000..cd209cb --- /dev/null +++ b/src/actions/report.js @@ -0,0 +1,8 @@ +export const REPORT_NAMESPACE = 'report'; + +export function REPORT_LIST(payload) { + return { + type: `${REPORT_NAMESPACE}/fetchList`, + payload, + }; +} diff --git a/src/components/ThirdRegister/index.js b/src/components/ThirdRegister/index.js index bcfdb22..d879704 100644 --- a/src/components/ThirdRegister/index.js +++ b/src/components/ThirdRegister/index.js @@ -114,7 +114,7 @@ class ThirdRegister extends PureComponent { message: '请输入租户编号', }, ], - })()} + })()} @@ -130,7 +130,7 @@ class ThirdRegister extends PureComponent { }, ], initialValue: user.name, - })()} + })()} @@ -143,7 +143,7 @@ class ThirdRegister extends PureComponent { }, ], initialValue: user.account, - })()} + })()} @@ -157,7 +157,7 @@ class ThirdRegister extends PureComponent { message: '请输入密码', }, ], - })()} + })()} @@ -169,7 +169,7 @@ class ThirdRegister extends PureComponent { message: '请输入确认密码', }, ], - })()} + })()} diff --git a/src/defaultSettings.js b/src/defaultSettings.js index 054a86a..50d34c9 100644 --- a/src/defaultSettings.js +++ b/src/defaultSettings.js @@ -18,4 +18,6 @@ module.exports = { pwa: true, // 第三方登陆授权地址 authUrl: 'http://localhost/blade-auth/oauth/render', + // 报表设计器地址(cloud端口为8108,boot端口为80) + reportUrl: 'http://localhost:8108/ureport', }; diff --git a/src/locales/en-US/menu.js b/src/locales/en-US/menu.js index af66b88..a4feaf3 100644 --- a/src/locales/en-US/menu.js +++ b/src/locales/en-US/menu.js @@ -25,6 +25,9 @@ export default { 'menu.monitor.log.log_error': 'error log', 'menu.monitor.admin': 'service admin', 'menu.monitor.doc': 'api doc', + 'menu.report': 'report', + 'menu.report.report_setting': 'report setting', + 'menu.report.report_list': 'report list', 'menu.tool': 'develop', 'menu.tool.code': 'code generate', 'menu.tool.datasource': 'datasource', diff --git a/src/locales/zh-CN/menu.js b/src/locales/zh-CN/menu.js index 2b3e64a..650b42a 100644 --- a/src/locales/zh-CN/menu.js +++ b/src/locales/zh-CN/menu.js @@ -25,6 +25,9 @@ export default { 'menu.monitor.log.log_error': '错误日志', 'menu.monitor.admin': '服务治理', 'menu.monitor.doc': '接口文档', + 'menu.report': '报表管理', + 'menu.report.report_setting': '报表配置', + 'menu.report.report_list': '报表列表', 'menu.tool': '研发工具', 'menu.tool.code': '代码生成', 'menu.tool.datasource': '数据源管理', diff --git a/src/locales/zh-TW/menu.js b/src/locales/zh-TW/menu.js index 6a4e899..77e71b0 100644 --- a/src/locales/zh-TW/menu.js +++ b/src/locales/zh-TW/menu.js @@ -25,6 +25,9 @@ export default { 'menu.monitor.log.log_error': '錯誤日志', 'menu.monitor.admin': '服務治理', 'menu.monitor.doc': '接口文檔', + 'menu.report': '報表管理', + 'menu.report.report_setting': '報表配置', + 'menu.report.report_list': '報表列表', 'menu.tool': '研發工具', 'menu.tool.code': '代碼生成', 'menu.tool.datasource': '數據源管理', diff --git a/src/models/report.js b/src/models/report.js new file mode 100644 index 0000000..d547ac8 --- /dev/null +++ b/src/models/report.js @@ -0,0 +1,39 @@ +import { REPORT_NAMESPACE } from '../actions/report'; +import { list } from '../services/report'; + +export default { + namespace: REPORT_NAMESPACE, + state: { + data: { + list: [], + pagination: false, + }, + detail: {}, + }, + effects: { + *fetchList({ payload }, { call, put }) { + const response = yield call(list, payload); + if (response.success) { + yield put({ + type: 'saveList', + payload: { + list: response.data.records, + pagination: { + total: response.data.total, + current: response.data.current, + pageSize: response.data.size, + }, + }, + }); + } + }, + }, + reducers: { + saveList(state, action) { + return { + ...state, + data: action.payload, + }; + }, + }, +}; diff --git a/src/pages/Dashboard/Workplace.js b/src/pages/Dashboard/Workplace.js index 7daf8bc..58669e7 100644 --- a/src/pages/Dashboard/Workplace.js +++ b/src/pages/Dashboard/Workplace.js @@ -20,14 +20,14 @@ class Workplace extends PureComponent {

- Downloads + Downloads Build Status Coverage Status Downloads @@ -212,7 +212,25 @@ class Workplace extends PureComponent { - + + +
1.升级 SpringBoot 至 2.2.11.RELEASE
+
2.升级 SpringCloud 至 Hoxton.SR8
+
3.升级 AlibabaCloud 至 2.2.3.RELEASE
+
4.升级 Knife4j 至 2.0.6
+
5.升级 Swagger 至 2.10.5
+
6.升级 SwaggerModel 至 1.6.2
+
7.升级 SpringPlugin 至 2.2.0.RELEASE
+
8.升级 JustAuth 至 1.15.8
+
9.升级 FastJson 至 1.2.74
+
10.升级 Guava 至 30.0-jre
+
11.升级 JJWT 至 0.11.2
+
12.集成UReport2,新增在线报表模块
+
13.优化Swagger封装以支持Knife4j最新API
+
14.引入Knife4j增强配置,生产环境将完全隔离文档访问
+
15.优化架构,适配最新版本API
+
16.优化部署脚本
+
1.升级至 SpringCloud Hoxton.SR8
2.升级至 Mybatis-Plus 3.4.0
diff --git a/src/pages/Login/Login.js b/src/pages/Login/Login.js index 588f464..d67906a 100644 --- a/src/pages/Login/Login.js +++ b/src/pages/Login/Login.js @@ -78,8 +78,10 @@ class LoginPage extends Component { handleSubmit = (err, values) => { const { type } = this.state; if (!err) { - const { dispatch, - tenant: { info } } = this.props; + const { + dispatch, + tenant: { info }, + } = this.props; const { tenantId } = info; dispatch({ type: 'login/login', diff --git a/src/pages/Report/Report.js b/src/pages/Report/Report.js new file mode 100644 index 0000000..b25fea1 --- /dev/null +++ b/src/pages/Report/Report.js @@ -0,0 +1,161 @@ +import React, { Fragment, PureComponent } from 'react'; +import { connect } from 'dva'; +import { Button, Col, Divider, Form, Input, message, Modal, Row, Tag } from 'antd'; +import Panel from '../../components/Panel'; +import { REPORT_LIST } from '../../actions/report'; +import Grid from '../../components/Sword/Grid'; +import { reportUrl } from '../../defaultSettings'; +import { remove } from '../../services/report'; + +const FormItem = Form.Item; + +@connect(({ report, loading }) => ({ + report, + loading: loading.models.report, +})) +@Form.create() +class Report extends PureComponent { + state = { + params: {}, + }; + + // ============ 查询 =============== + handleSearch = params => { + const { dispatch } = this.props; + this.setState({ params }); + dispatch(REPORT_LIST(params)); + }; + + handleRemove = id => { + const { params } = this.state; + const refresh = this.handleSearch; + Modal.confirm({ + title: '删除确认', + content: '确定删除该条记录?', + okText: '确定', + okType: 'danger', + cancelText: '取消', + onOk() { + remove({ ids: id }).then(resp => { + if (resp.success) { + message.success(resp.msg); + refresh(params); + } else { + message.error(resp.msg || '删除失败'); + } + }); + }, + onCancel() {}, + }); + }; + + handleDesign = name => { + window.open(`${reportUrl}/designer?_u=blade-${name}`); + }; + + handlePreview = name => { + window.open(`${reportUrl}/preview?_u=blade-${name}`); + }; + + // ============ 查询表单 =============== + renderSearchForm = onReset => { + const { form } = this.props; + const { getFieldDecorator } = form; + + return ( + + + + {getFieldDecorator('name')()} + + + +
+ + +
+ +
+ ); + }; + + renderActionButton = (keys, rows) => ( + +
{ + this.handleRemove(keys[0]); + }} + > + 删除 + + + { + this.handleDesign(rows[0].name); + }} + > + 设计 + + + { + this.handlePreview(rows[0].name); + }} + > + 预览 + + + ); + + render() { + const code = 'report'; + + const { + form, + loading, + report: { data }, + } = this.props; + + const columns = [ + { + title: '文件名', + dataIndex: 'name', + render: name => ( + + + v{name} + + + ), + }, + { + title: '创建时间', + dataIndex: 'createTime', + }, + { + title: '更新时间', + dataIndex: 'updateTime', + }, + ]; + + return ( + + + + ); + } +} +export default Report; diff --git a/src/services/report.js b/src/services/report.js new file mode 100644 index 0000000..05084d4 --- /dev/null +++ b/src/services/report.js @@ -0,0 +1,14 @@ +import { stringify } from 'qs'; +import func from '../utils/Func'; +import request from '../utils/request'; + +export async function list(params) { + return request(`/api/blade-report/report/rest/list?${stringify(params)}`); +} + +export async function remove(params) { + return request('/api/blade-report/report/rest/remove', { + method: 'POST', + body: func.toFormData(params), + }); +}