Commit 04312e98 authored by 涂茜's avatar 涂茜

Merge branch 'feature/ec-components' into 'dev'

Feature/ec components See merge request !36
parents 483583e3 5f9aec37
Pipeline #27449 failed with stages
in 16 seconds
......@@ -101,9 +101,16 @@ export default {
],
'/extend-components': [
{
title: 'base',
children: ['EC-DeviceTree', 'EC-QuotaSelect'],
title: '数据展示',
children: ['EC_DeviceTree', 'EC_QuotaSelect', 'EC_HistoryInfo'],
},
],
},
proxy: {
'/api': {
target: 'http://127.0.0.1:8888/',
changeOrigin: true,
pathRewrite: { '^/api': '' },
},
},
};
......@@ -2,6 +2,37 @@
All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
## [1.5.4](https://g.civnet.cn:8443/ReactWeb5/wisdom-components/compare/@wisdom-components/basictable@1.5.1...@wisdom-components/basictable@1.5.4) (2021-05-11)
### Bug Fixes
- conflict ([a210fa2](https://g.civnet.cn:8443/ReactWeb5/wisdom-components/commits/a210fa2f050d8b9c7f3a4a1b6884fd39b22914b0))
## [1.5.3](https://g.civnet.cn:8443/ReactWeb5/wisdom-components/compare/@wisdom-components/basictable@1.5.1...@wisdom-components/basictable@1.5.3) (2021-05-11)
### Bug Fixes
- conflict ([a210fa2](https://g.civnet.cn:8443/ReactWeb5/wisdom-components/commits/a210fa2f050d8b9c7f3a4a1b6884fd39b22914b0))
## [1.5.2](https://g.civnet.cn:8443/ReactWeb5/wisdom-components/compare/@wisdom-components/basictable@1.5.1...@wisdom-components/basictable@1.5.2) (2021-05-11)
### Bug Fixes
- conflict ([a210fa2](https://g.civnet.cn:8443/ReactWeb5/wisdom-components/commits/a210fa2f050d8b9c7f3a4a1b6884fd39b22914b0))
## [1.5.1](https://g.civnet.cn:8443/ReactWeb5/wisdom-components/compare/@wisdom-components/basictable@1.5.0...@wisdom-components/basictable@1.5.1) (2021-05-11)
### Bug Fixes
- 修改基础表格组件 ([67d9365](https://g.civnet.cn:8443/ReactWeb5/wisdom-components/commits/67d9365634a32d8018ab704a749562a51157988a))
# [1.5.0](https://g.civnet.cn:8443/ReactWeb5/wisdom-components/compare/@wisdom-components/basictable@1.4.5...@wisdom-components/basictable@1.5.0) (2021-05-10)
### Features
- custom package foler and perf leran config ([62194a9](https://g.civnet.cn:8443/ReactWeb5/wisdom-components/commits/62194a919e4db41f2ebfa02326f41f622dfd3f4c))
- ec-devicetree ([579e5d2](https://g.civnet.cn:8443/ReactWeb5/wisdom-components/commits/579e5d2dd845b9dd58ab4c8db8aaaf7c64ebc3f8))
## [1.4.5](https://g.civnet.cn:8443/ReactWeb5/wisdom-components/compare/@wisdom-components/basictable@1.4.2...@wisdom-components/basictable@1.4.5) (2021-04-26)
### Bug Fixes
......
{
"name": "@wisdom-components/basictable",
"version": "1.4.5",
"version": "1.5.4",
"description": "> TODO: description",
"author": "tuqian <webtuqian@163.com>",
"homepage": "",
......
......@@ -45,7 +45,7 @@ const Demo = () => {
// @ts-ignore
return (
<div style={{ height: '400px' }}>
<div style={{ height: '800px' }}>
{!!dataSource.length && <BasicTable dataSource={dataSource} columns={columns} bordered />}
{!dataSource.length && <Empty description={'暂无数据'} />}
</div>
......
......@@ -7,7 +7,6 @@ import './index.less';
const BasicTable = (props) => {
const { getPrefixCls } = useContext(ConfigProvider.ConfigContext);
const prefixCls = getPrefixCls('basic-table');
return <Table className={classNames(prefixCls)} scroll={{ y: 'calc(100% - 40px)' }} {...props} />;
};
......
......@@ -118,9 +118,13 @@
}
.ant-table.ant-table-bordered > .ant-table-container {
border: 1px solid #dbe7fb;
border-right: 0;
border-bottom: 0;
border-top: 1px solid #dbe7fb;
border-left: 0;
}
.ant-table-header,
.ant-table-body {
border-left: 1px solid #dbe7fb;
}
.ant-table-summary {
......
......@@ -2,6 +2,12 @@
All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
# [1.3.0](https://g.civnet.cn:8443/ReactWeb5/wisdom-components/compare/@wisdom-components/basictools@1.2.10...@wisdom-components/basictools@1.3.0) (2021-05-10)
### Features
- custom package foler and perf leran config ([62194a9](https://g.civnet.cn:8443/ReactWeb5/wisdom-components/commits/62194a919e4db41f2ebfa02326f41f622dfd3f4c))
## [1.2.10](https://g.civnet.cn:8443/ReactWeb5/wisdom-components/compare/@wisdom-components/basictools@1.2.7...@wisdom-components/basictools@1.2.10) (2021-04-26)
### Bug Fixes
......
{
"name": "@wisdom-components/basictools",
"version": "1.2.10",
"version": "1.3.0",
"description": "> TODO: description",
"author": "tuqian <webtuqian@163.com>",
"homepage": "",
......
......@@ -2,6 +2,12 @@
All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
# [1.4.0](https://g.civnet.cn:8443/ReactWeb5/wisdom-components/compare/@wisdom-components/devicetree@1.3.14...@wisdom-components/devicetree@1.4.0) (2021-05-10)
### Features
- custom package foler and perf leran config ([62194a9](https://g.civnet.cn:8443/ReactWeb5/wisdom-components/commits/62194a919e4db41f2ebfa02326f41f622dfd3f4c))
## [1.3.14](https://g.civnet.cn:8443/ReactWeb5/wisdom-components/compare/@wisdom-components/devicetree@1.3.8...@wisdom-components/devicetree@1.3.14) (2021-04-26)
### Bug Fixes
......
{
"name": "@wisdom-components/devicetree",
"version": "1.3.14",
"version": "1.4.0",
"description": "> TODO: description",
"author": "tuqian <webtuqian@163.com>",
"homepage": "",
......
......@@ -2,6 +2,12 @@
All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
# [1.4.0](https://g.civnet.cn:8443/ReactWeb5/wisdom-components/compare/@wisdom-components/empty@1.3.12...@wisdom-components/empty@1.4.0) (2021-05-10)
### Features
- custom package foler and perf leran config ([62194a9](https://g.civnet.cn:8443/ReactWeb5/wisdom-components/commits/62194a919e4db41f2ebfa02326f41f622dfd3f4c))
## [1.3.12](https://g.civnet.cn:8443/ReactWeb5/wisdom-components/compare/@wisdom-components/empty@1.3.9...@wisdom-components/empty@1.3.12) (2021-04-26)
### Bug Fixes
......
{
"name": "@wisdom-components/empty",
"version": "1.3.12",
"version": "1.4.0",
"description": "@wisdom-components/empty",
"author": "tuqian <webtuqian@163.com>",
"homepage": "",
......
......@@ -2,6 +2,12 @@
All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
# [1.1.0](https://g.civnet.cn:8443/ReactWeb5/wisdom-components/compare/@wisdom-components/exportexcel@1.0.10...@wisdom-components/exportexcel@1.1.0) (2021-05-10)
### Features
- custom package foler and perf leran config ([62194a9](https://g.civnet.cn:8443/ReactWeb5/wisdom-components/commits/62194a919e4db41f2ebfa02326f41f622dfd3f4c))
## [1.0.10](https://g.civnet.cn:8443/ReactWeb5/wisdom-components/compare/@wisdom-components/exportexcel@1.0.7...@wisdom-components/exportexcel@1.0.10) (2021-04-26)
### Bug Fixes
......
{
"name": "@wisdom-components/exportexcel",
"version": "1.0.10",
"version": "1.1.0",
"description": "> TODO: description",
"author": "lijiwen <961370825@qq.com>",
"homepage": "",
......
......@@ -2,6 +2,12 @@
All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
# [1.5.0](https://g.civnet.cn:8443/ReactWeb5/wisdom-components/compare/@wisdom-components/historyinfo@1.4.13...@wisdom-components/historyinfo@1.5.0) (2021-05-10)
### Features
- custom package foler and perf leran config ([62194a9](https://g.civnet.cn:8443/ReactWeb5/wisdom-components/commits/62194a919e4db41f2ebfa02326f41f622dfd3f4c))
## [1.4.13](https://g.civnet.cn:8443/ReactWeb5/wisdom-components/compare/@wisdom-components/historyinfo@1.4.8...@wisdom-components/historyinfo@1.4.13) (2021-04-26)
### Bug Fixes
......
{
"name": "@wisdom-components/historyinfo",
"version": "1.4.13",
"version": "1.5.0",
"description": "> TODO: description",
"author": "tuqian <webtuqian@163.com>",
"homepage": "",
......
......@@ -2,6 +2,12 @@
All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
# [1.4.0](https://g.civnet.cn:8443/ReactWeb5/wisdom-components/compare/@wisdom-components/imageselect@1.3.12...@wisdom-components/imageselect@1.4.0) (2021-05-10)
### Features
- custom package foler and perf leran config ([62194a9](https://g.civnet.cn:8443/ReactWeb5/wisdom-components/commits/62194a919e4db41f2ebfa02326f41f622dfd3f4c))
## [1.3.12](https://g.civnet.cn:8443/ReactWeb5/wisdom-components/compare/@wisdom-components/imageselect@1.3.8...@wisdom-components/imageselect@1.3.12) (2021-04-26)
### Bug Fixes
......
{
"name": "@wisdom-components/imageselect",
"version": "1.3.12",
"version": "1.4.0",
"description": "> TODO: description",
"author": "tuqian <webtuqian@163.com>",
"homepage": "",
......
......@@ -2,6 +2,12 @@
All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
# [1.3.0](https://g.civnet.cn:8443/ReactWeb5/wisdom-components/compare/@wisdom-components/mqttview@1.2.10...@wisdom-components/mqttview@1.3.0) (2021-05-10)
### Features
- custom package foler and perf leran config ([62194a9](https://g.civnet.cn:8443/ReactWeb5/wisdom-components/commits/62194a919e4db41f2ebfa02326f41f622dfd3f4c))
## [1.2.10](https://g.civnet.cn:8443/ReactWeb5/wisdom-components/compare/@wisdom-components/mqttview@1.2.9...@wisdom-components/mqttview@1.2.10) (2021-04-26)
### Bug Fixes
......
{
"name": "@wisdom-components/mqttview",
"version": "1.2.10",
"version": "1.3.0",
"description": "> TODO: description",
"author": "lijiwen <961370825@qq.com>",
"homepage": "",
......
......@@ -2,6 +2,12 @@
All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
# [1.3.0](https://g.civnet.cn:8443/ReactWeb5/wisdom-components/compare/parseform@1.2.7...parseform@1.3.0) (2021-05-10)
### Features
- custom package foler and perf leran config ([62194a9](https://g.civnet.cn:8443/ReactWeb5/wisdom-components/commits/62194a919e4db41f2ebfa02326f41f622dfd3f4c))
## [1.2.7](https://g.civnet.cn:8443/ReactWeb5/wisdom-components/compare/parseform@1.2.5...parseform@1.2.7) (2021-04-20)
### Bug Fixes
......
{
"name": "parseform",
"version": "1.2.7",
"version": "1.3.0",
"description": "> TODO: description",
"author": "lijiwen <961370825@qq.com>",
"homepage": "",
......
......@@ -2,6 +2,13 @@
All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
# [1.8.0](https://g.civnet.cn:8443/ReactWeb5/wisdom-components/compare/@wisdom-components/quotaselect@1.7.8...@wisdom-components/quotaselect@1.8.0) (2021-05-10)
### Features
- add ec-quotaselect ([306f380](https://g.civnet.cn:8443/ReactWeb5/wisdom-components/commits/306f38034761eba6a8d964bc2a063ab3a35b56fe))
- custom package foler and perf leran config ([62194a9](https://g.civnet.cn:8443/ReactWeb5/wisdom-components/commits/62194a919e4db41f2ebfa02326f41f622dfd3f4c))
## [1.7.8](https://g.civnet.cn:8443/ReactWeb5/wisdom-components/compare/@wisdom-components/quotaselect@1.7.2...@wisdom-components/quotaselect@1.7.8) (2021-04-26)
### Bug Fixes
......
{
"name": "@wisdom-components/quotaselect",
"version": "1.7.8",
"version": "1.8.0",
"description": "> TODO: description",
"author": "tuqian <webtuqian@163.com>",
"homepage": "",
......
......@@ -2,6 +2,12 @@
All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
# [1.3.0](https://g.civnet.cn:8443/ReactWeb5/wisdom-components/compare/@wisdom-components/realtimeinfo@1.2.8...@wisdom-components/realtimeinfo@1.3.0) (2021-05-10)
### Features
- custom package foler and perf leran config ([62194a9](https://g.civnet.cn:8443/ReactWeb5/wisdom-components/commits/62194a919e4db41f2ebfa02326f41f622dfd3f4c))
## [1.2.8](https://g.civnet.cn:8443/ReactWeb5/wisdom-components/compare/@wisdom-components/realtimeinfo@1.2.5...@wisdom-components/realtimeinfo@1.2.8) (2021-04-20)
### Bug Fixes
......
{
"name": "@wisdom-components/realtimeinfo",
"version": "1.2.8",
"version": "1.3.0",
"description": "> TODO: description",
"author": "tuqian <webtuqian@163.com>",
"homepage": "",
......
......@@ -2,6 +2,12 @@
All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
# [1.4.0](https://g.civnet.cn:8443/ReactWeb5/wisdom-components/compare/@wisdom-components/timerangepicker@1.3.8...@wisdom-components/timerangepicker@1.4.0) (2021-05-10)
### Features
- custom package foler and perf leran config ([62194a9](https://g.civnet.cn:8443/ReactWeb5/wisdom-components/commits/62194a919e4db41f2ebfa02326f41f622dfd3f4c))
## [1.3.8](https://g.civnet.cn:8443/ReactWeb5/wisdom-components/compare/@wisdom-components/timerangepicker@1.3.5...@wisdom-components/timerangepicker@1.3.8) (2021-04-20)
### Bug Fixes
......
{
"name": "@wisdom-components/timerangepicker",
"version": "1.3.8",
"version": "1.4.0",
"description": "> TODO: description",
"author": "tuqian <webtuqian@163.com>",
"homepage": "",
......
# Change Log
All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
## [1.0.10](https://g.civnet.cn:8443/ReactWeb5/wisdom-components/compare/@wisdom-components/ec_devicetree@1.0.7...@wisdom-components/ec_devicetree@1.0.10) (2021-05-11)
### Bug Fixes
- bug ([90aecfc](https://g.civnet.cn:8443/ReactWeb5/wisdom-components/commits/90aecfc837b11b1eefe0efef9b6298dd9455954d))
- bug ([d02b3bf](https://g.civnet.cn:8443/ReactWeb5/wisdom-components/commits/d02b3bf0bdd2a709891c86199e5649e2471c577b))
- conflict ([a210fa2](https://g.civnet.cn:8443/ReactWeb5/wisdom-components/commits/a210fa2f050d8b9c7f3a4a1b6884fd39b22914b0))
## [1.0.9](https://g.civnet.cn:8443/ReactWeb5/wisdom-components/compare/@wisdom-components/ec_devicetree@1.0.7...@wisdom-components/ec_devicetree@1.0.9) (2021-05-11)
### Bug Fixes
- bug ([d02b3bf](https://g.civnet.cn:8443/ReactWeb5/wisdom-components/commits/d02b3bf0bdd2a709891c86199e5649e2471c577b))
- conflict ([a210fa2](https://g.civnet.cn:8443/ReactWeb5/wisdom-components/commits/a210fa2f050d8b9c7f3a4a1b6884fd39b22914b0))
## [1.0.8](https://g.civnet.cn:8443/ReactWeb5/wisdom-components/compare/@wisdom-components/ec_devicetree@1.0.7...@wisdom-components/ec_devicetree@1.0.8) (2021-05-11)
### Bug Fixes
- conflict ([a210fa2](https://g.civnet.cn:8443/ReactWeb5/wisdom-components/commits/a210fa2f050d8b9c7f3a4a1b6884fd39b22914b0))
## [1.0.7](https://g.civnet.cn:8443/ReactWeb5/wisdom-components/compare/@wisdom-components/ec_devicetree@1.0.6...@wisdom-components/ec_devicetree@1.0.7) (2021-05-10)
### Bug Fixes
- 修改业务组件树 ([6d0c2dc](https://g.civnet.cn:8443/ReactWeb5/wisdom-components/commits/6d0c2dc63b8a08b25b4a01dcd7ce4a152e3a2ea7))
- release publish bug ([c541abb](https://g.civnet.cn:8443/ReactWeb5/wisdom-components/commits/c541abbfc6a094bfeaa7dde04cc12ae4a6ce2650))
## [1.0.6](https://g.civnet.cn:8443/ReactWeb5/wisdom-components/compare/@wisdom-components/ec_devicetree@1.0.5...@wisdom-components/ec_devicetree@1.0.6) (2021-05-10)
### Bug Fixes
- test release ([c9e02b1](https://g.civnet.cn:8443/ReactWeb5/wisdom-components/commits/c9e02b1daacd0d8972ae5d8a456cf807206b9e67))
## [1.0.5](https://g.civnet.cn:8443/ReactWeb5/wisdom-components/compare/@wisdom-components/ec_devicetree@1.0.4...@wisdom-components/ec_devicetree@1.0.5) (2021-05-10)
### Bug Fixes
- test release ([52efcec](https://g.civnet.cn:8443/ReactWeb5/wisdom-components/commits/52efcec9088b52d0200c80c87838327d20554a4d))
## [1.0.4](https://g.civnet.cn:8443/ReactWeb5/wisdom-components/compare/@wisdom-components/ec_devicetree@1.0.3...@wisdom-components/ec_devicetree@1.0.4) (2021-05-10)
### Bug Fixes
- test release ([a35f677](https://g.civnet.cn:8443/ReactWeb5/wisdom-components/commits/a35f67719754116dc78f4883c2fe8aac46b87a0f))
- test release ([1e812dc](https://g.civnet.cn:8443/ReactWeb5/wisdom-components/commits/1e812dc9e62cd5f19df5da787165aab55ae28a92))
## [1.0.3](https://g.civnet.cn:8443/ReactWeb5/wisdom-components/compare/@wisdom-components/ec_devicetree@1.0.2...@wisdom-components/ec_devicetree@1.0.3) (2021-05-10)
### Bug Fixes
- bug ([30c6d06](https://g.civnet.cn:8443/ReactWeb5/wisdom-components/commits/30c6d06386640ca7749022b2c35858a320c7368f))
## [1.0.2](https://g.civnet.cn:8443/ReactWeb5/wisdom-components/compare/@wisdom-components/ec_devicetree@1.0.1...@wisdom-components/ec_devicetree@1.0.2) (2021-05-10)
### Bug Fixes
- 修改 mqtt 连接配置 ([d42cbc9](https://g.civnet.cn:8443/ReactWeb5/wisdom-components/commits/d42cbc9edcab56ed29ca1399f8f0ea714601964a))
## 1.0.1 (2021-05-10)
### Bug Fixes
- bug ([1fcf652](https://g.civnet.cn:8443/ReactWeb5/wisdom-components/commits/1fcf652088fa0f885d289c42fa4f4699f1e16143))
# `@wisdom-components/ec-devicetree`
# `@wisdom-components/ec_devicetree`
> TODO: description
## Usage
```
const ECDeviceTree = require('@wisdom-components/ec-devicetree');
const ECDeviceTree = require('@wisdom-components/ec_devicetree');
// TODO: DEMONSTRATE API
```
{
"name": "@wisdom-components/ec-devicetree",
"version": "1.0.0",
"name": "@wisdom-components/ec_devicetree",
"version": "1.0.10",
"description": "> TODO: description",
"author": "tuqian <webtuqian@163.com>",
"homepage": "",
......
---
title: EC-DeviceTree - 设备树
title: EC_DeviceTree - 设备树
nav:
title: 业务组件
path: /extend-components
......
......@@ -8,6 +8,8 @@ const REQUEST_METHOD_POST = 'post';
const GET_DEVICE_LIST =
'https://www.fastmock.site/mock/162c15dca15c4dba9ba51e0a0b76929b/api/Publish/Monitor/Device/DeviceTree'; //获取设备树列表
// const GET_DEVICE_LIST = '/api/Publish/GCK/Device/DeviceTree'; //获取设备树列表
const deviceTreeService = {
getDeviceList: {
url: GET_DEVICE_LIST,
......@@ -35,7 +37,7 @@ const Demo = () => {
checkable
onTreeCheck={onTreeCheck}
onTreeSelect={onTreeSelect}
deviceTreeService={getDeviceList}
deviceTreeService={dtService.getDeviceList}
serviceParams={
{
// pageIndex: 1,
......
......@@ -28,7 +28,7 @@ const DeviceTree = (props) => {
pageSize: serviceParams.pageSize || 500,
deviceTypes: serviceParams.deviceTypes || '二供泵房,二供机组',
getChild: serviceParams.getChild || true,
userID: serviceParams.userID || 1,
userID: serviceParams.userID || 0,
queryInfo: serviceParams.queryInfo || '',
sortFields: serviceParams.sortFields || '',
direction: serviceParams.direction || '',
......@@ -39,8 +39,8 @@ const DeviceTree = (props) => {
const handleData = (data) => {
data.forEach((item) => {
item.title = item.DeviceName;
item.key = item.StationID;
item.title = item.deviceName;
item.key = item.stationID;
item.children = handleData(item.children);
});
return data;
......@@ -51,7 +51,7 @@ const DeviceTree = (props) => {
if (response.code === 0) {
const data = response.data
? response.data.list && response.data.list.length > 0
? response.data.list[0].DeviceList
? response.data.list[0].deviceList
: []
: [];
setTreeData(handleData(data));
......@@ -122,7 +122,6 @@ DeviceTree.defaultProps = {
serviceParams: {},
onTreeCheck: () => {},
onTreeSelect: () => {},
deviceTreeService: () => {},
};
DeviceTree.propTypes = {
......@@ -131,7 +130,7 @@ DeviceTree.propTypes = {
serviceParams: PropTypes.object,
onTreeCheck: PropTypes.func,
onTreeSelect: PropTypes.func,
deviceTreeService: PropTypes.func,
deviceTreeService: PropTypes.any,
};
export default DeviceTree;
......@@ -20,6 +20,16 @@
white-space: nowrap;
}
.ant-tree-treenode {
width: 100%;
}
.ant-tree-node-content-wrapper {
flex: 1;
overflow: hidden;
text-overflow: ellipsis;
}
&-content {
flex: 1;
overflow-y: scroll;
......
# Change Log
All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
## 1.0.3 (2021-05-11)
### Bug Fixes
- conflict ([a210fa2](https://g.civnet.cn:8443/ReactWeb5/wisdom-components/commits/a210fa2f050d8b9c7f3a4a1b6884fd39b22914b0))
## 1.0.2 (2021-05-11)
### Bug Fixes
- conflict ([a210fa2](https://g.civnet.cn:8443/ReactWeb5/wisdom-components/commits/a210fa2f050d8b9c7f3a4a1b6884fd39b22914b0))
## 1.0.1 (2021-05-11)
### Bug Fixes
- conflict ([a210fa2](https://g.civnet.cn:8443/ReactWeb5/wisdom-components/commits/a210fa2f050d8b9c7f3a4a1b6884fd39b22914b0))
# `@wisdom-components/EC-QuotaSelect`
# `@wisdom-components/ec_historyinfo`
> TODO: description
## Usage
```
const ecQuotaSelect = require('@wisdom-components/EC-QuotaSelect');
const ECHistoryInfo = require('@wisdom-components/ec_historyinfo');
// TODO: DEMONSTRATE API
```
{
"name": "@wisdom-components/ec-quotaselect",
"version": "1.0.0",
"name": "@wisdom-components/ec_historyinfo",
"version": "1.0.3",
"description": "> TODO: description",
"author": "tuqian <webtuqian@163.com>",
"homepage": "",
"license": "ISC",
"main": "lib/EC-QuotaSelect.js",
"main": "lib/index.js",
"directories": {
"lib": "lib",
"test": "__tests__"
......
---
title: EC-HistoryInfo - 历史数据查看
nav:
title: 基础组件
path: /extend-components
group:
path: /
---
# HistoryInfo 历史数据查看
基础业务组件
- 查看任意时间段的历史数据
- 允许同期对比任意历史数据
- 允许过滤异常值
- 允许指定时间间隔的数据抽稀
## 何时使用
- 以图表或表格形式,查看历史数据时。
## 代码演示
<code src="./demos/Basic.tsx">
## API
api 参考 Antd Table 组件 https://ant.design/components/table-cn/#API
| 参数 | 说明 | 类型 | 默认值 | 可选值 |
| --- | --- | --- | --- | --- |
| title | 标题 | string | 指标曲线 | - |
| defaultChecked | 默认选中自定义时间 key | string | oneHour | oneHour/fourHour/twelveHours/roundClock/yesterday |
| tableProps | 表格其他 props | object | { } | - |
| historyInfoService | 历史曲线服务 | promise | - | - |
| historyInfoParams | 历史曲线服务参数 | object | { } | - |
import React from 'react';
import { service } from '@wisdom-utils/utils';
import HistoryInfo from '../index';
const REQUEST_HTTP = 'http';
const REQUEST_METHOD_POST = 'post';
const GET_HISTORY_INFO =
'https://www.fastmock.site/mock/162c15dca15c4dba9ba51e0a0b76929b/api/Publish/Monitor/Device/SensorsDataForStation'; //获取历史信息
// const GET_HISTORY_INFO = '/api/Publish/GCK/Device/SensorsDataForStation'; //获取历史信息
const historyInfoService = {
getHistoryInfo: {
url: GET_HISTORY_INFO,
method: REQUEST_METHOD_POST,
type: REQUEST_HTTP,
},
};
const hsService = service(historyInfoService);
const getHistoryInfo = hsService.getHistoryInfo;
const Demo = () => {
return (
<div style={{ height: '800px' }}>
<HistoryInfo
title={'指标曲线'}
tableProps={{ bordered: true, pagination: { pageSize: 20 } }}
historyInfoService={getHistoryInfo}
historyInfoParams={initialParams}
/>
</div>
);
};
export default Demo;
const initialParams = {
stream: [
{
stationCode: 'EGBF00000006',
sensors: '出水瞬时流量,今日供水量,今日用电量',
pointVersions: '二供泵房',
dateFrom: '2021-05-09 15:01:21',
dateTo: '2021-05-09 16:01:21',
},
{
stationCode: 'EGJZ00007117',
sensors: '进水压力,出水压力,泵1状态',
pointVersions: '二供机组',
dateFrom: '2021-05-09 15:01:21',
dateTo: '2021-05-09 16:01:21',
},
],
ignoreOutliers: false, // 过滤异常值
isVertical: false, // 是否展示竖表
zoom: '', // 数据抽稀
unit: '', // 数据抽稀 min h
};
import React, { useContext, useState, useReducer, useEffect, useRef } from 'react';
import PropTypes from 'prop-types';
import classNames from 'classnames';
import Highcharts from 'highcharts/highstock';
import HighchartsReact from 'highcharts-react-official';
import { Tabs, Select, Radio, Checkbox, ConfigProvider, DatePicker } from 'antd';
import { PlusCircleOutlined, CloseCircleFilled } from '@ant-design/icons';
import TimeRangePicker from '@wisdom-components/timerangepicker';
import BasicTable from '@wisdom-components/basictable';
import Empty from '@wisdom-components/empty';
import moment from 'moment';
import './index.less';
const { TabPane } = Tabs;
const { RangePicker } = DatePicker;
const { Option } = Select;
const UPDATE_TIME = {
UPDATE_TIME: 'updateTime',
UPDATE_BATCH_TIME: 'updateBatchTime',
UPDATE_DATA_THIN: 'updateDataThin',
};
const reducer = (state, action) => {
switch (action.type) {
case UPDATE_TIME.UPDATE_TIME:
return {
...state,
dateRange: updateTime(action.payload),
};
case UPDATE_TIME.UPDATE_BATCH_TIME:
return {
...state,
dateRange: action.payload,
};
case 'updateIgnoreOutliers':
return {
...state,
ignoreOutliers: action.payload,
};
case UPDATE_TIME.UPDATE_DATA_THIN:
const { zoom, unit } = action.payload;
return {
...state,
zoom,
unit,
};
default:
throw new Error();
}
};
const updateTime = (key) => {
let start = '',
end = '';
if (Array.isArray(key)) {
start = moment(key[0]).format(timeFormat);
end = moment(key[1]).format(timeFormat);
} else {
switch (key) {
case 'oneHour':
start = moment().subtract(1, 'hour').format(timeFormat);
end = moment().format(timeFormat);
break;
case 'fourHour':
start = moment().subtract(4, 'hour').format(timeFormat);
end = moment().format(timeFormat);
break;
case 'twelveHours':
start = moment().subtract(12, 'hour').format(timeFormat);
end = moment().format(timeFormat);
break;
case 'roundClock':
start = moment().subtract(24, 'hour').format(timeFormat);
end = moment().format(timeFormat);
break;
case 'yesterday':
start = moment().subtract(1, 'days').format(startFormat);
end = moment().subtract(1, 'days').format(endFormat);
break;
}
}
return [
{
dateFrom: start,
dateTo: end,
},
];
};
const unique = (arr) => {
let unique = {};
arr.forEach((item) => {
unique[JSON.stringify(item)] = item;
});
arr = Object.keys(unique).map((v) => {
return JSON.parse(v);
});
return arr;
};
const DefaultDatePicker = (value) => [
{
key: 1,
value: moment(),
},
{
key: 2,
value: moment().subtract(1, value),
},
];
let chartWidth = 0; // chart width
let chartHeight = 0; // chart height
const HistoryInfo = (props) => {
const { getPrefixCls } = useContext(ConfigProvider.ConfigContext);
const prefixCls = getPrefixCls('history-info');
const { title, tableProps, historyInfoService, historyInfoParams, defaultChecked } = props;
const [activeTabKey, setActiveTabKey] = useState('curve');
const [timeValue, setTimeValue] = useState('customer');
const [contrastOption, setContrastOption] = useState('day');
const [customerChecked, setCustomerChecked] = useState(defaultChecked || 'oneHour');
const [customerTime, setCustomerTime] = useState(null);
const [datePickerArr, setDatePickerArr] = useState(DefaultDatePicker('day'));
const [checkboxData, setCheckboxData] = useState(CheckboxData);
const [dataThinKey, setDataThinKey] = useState(timeIntervalList[0].key);
const [options, setOptions] = useState({});
const [params, setParams] = useState(historyInfoParams);
const [tableData, setTableData] = useState([]);
const [pageSize, setPageSize] = useState(20);
const [series, setSeries] = useState([]);
const [columns, setColumns] = useState([
{
title: '采集时间',
dataIndex: 'time',
key: 'time',
width: 160,
fixed: 'left',
ellipsis: true,
},
]);
const [state, dispatch] = useReducer(reducer, initialState);
const container = useRef(null);
// 处理图表 series
const handleSeries = (v) => {
const resData = v;
const seriesData = [];
resData.forEach((item) => {
const data = [];
item.dataModel.forEach((child) => {
data.push([moment(child.pt).valueOf(), child.pv]);
});
const obj = {
name: item.equipmentName + '-' + item.sensorName,
sensorName: item.sensorName,
decimalPoint: item.decimalPoint,
unit: item.unit,
data: data,
};
if (timeValue === 'contrast' && item.dataModel[0]) {
const time = item.dataModel[0].pt.slice(0, contrastOption === 'day' ? 10 : 7);
obj.name = obj.name + '-' + time;
}
seriesData.push(obj);
});
setSeries(seriesData);
};
// 处理表格的数据
const handleTableData = (resData) => {
let timeData = [];
const timeSort = (dataArray) => {
// 处理时间排序
return dataArray.sort((a, b) => {
let aa = a,
bb = b;
if (timeValue === 'contrast') {
aa = a.slice(contrastOption === 'day' ? 11 : 8, 16);
bb = b.slice(contrastOption === 'day' ? 11 : 8, 16);
}
return aa.localeCompare(bb);
});
};
// 处理采集时间
resData.forEach((item) => {
item.dataModel.forEach((data) => {
if (!timeData.includes(data.pt)) {
timeData.push(data.pt);
}
});
});
timeData = timeSort(timeData);
// 处理表头数据
const columnsData = resData.map((item, index) => {
return {
title: `${item.equipmentName}-${item.sensorName}${item.unit ? `(${item.unit})` : ''}`,
dataIndex: `value${index + 1}`,
key: `value${index + 1}`,
ellipsis: true,
};
});
// 处理表格数据
const tableData = timeData.map((item, index) => {
let time = item;
if (timeValue === 'contrast') {
time = time.slice(contrastOption === 'day' ? 11 : 8, 16);
}
return { key: index, time: time };
});
// 处理表格数据
tableData.forEach((item, i) => {
resData.forEach((child, index) => {
child.dataModel.forEach((value, j) => {
if (timeData[i] === value.pt) item[`value${index + 1}`] = value.pv;
});
});
});
setTableData(tableData);
setColumns([columns[0], ...columnsData]);
};
// 处理接口服务参数的变化
const onChangeParams = (value = []) => {
const { dateRange, ignoreOutliers, zoom, unit } = value;
const requestArr = [];
dateRange.forEach((item) => {
const param = {
...params,
stream: params.stream.map((child) => ({
...child,
dateFrom: item.dateFrom,
dateTo: item.dateTo,
})),
ignoreOutliers,
zoom,
unit,
};
requestArr.push(historyInfoService(param));
});
Promise.all(requestArr).then((values) => {
if (values.length) {
let data = [];
values.forEach((res) => {
if (res.code === 0 && res.data.length) {
data = data.concat(res.data);
}
});
handleTableData(data);
handleSeries(data);
}
});
};
useEffect(() => {
onChangeParams(state);
}, [state]);
useEffect(() => {
dispatch({ type: UPDATE_TIME.UPDATE_TIME, payload: customerChecked });
}, [customerChecked]);
useEffect(() => {
setOptions({ ...handleChartOptions() });
}, [series]);
// 时间设置切换(自定义/同期对比)
const onTimeSetChange = (e) => {
setTimeValue(e.target.value);
if (e.target.value === 'contrast') {
// 同期对比
onContrastChange(contrastOption);
} else {
// 自定义
dispatch({ type: UPDATE_TIME.UPDATE_TIME, payload: customerChecked });
}
};
const handleBatchTime = (arr, cOption) => {
let newArr = [];
arr.forEach((child) => {
if (child.value) {
newArr.push({
dateFrom: moment(child.value).startOf(cOption).format(startFormat),
dateTo: moment(child.value).endOf(cOption).format(endFormat),
});
}
});
newArr = unique(newArr);
setDatePickerArr(arr);
dispatch({ type: UPDATE_TIME.UPDATE_BATCH_TIME, payload: newArr });
};
// 选择(日/月)
const onContrastChange = (value) => {
setContrastOption(value);
handleBatchTime([...DefaultDatePicker(value)], value);
};
const onCustomerRangeChange = (value) => {
setCustomerTime(value);
dispatch({ type: UPDATE_TIME.UPDATE_TIME, payload: value });
};
const onCustomerTimeChange = (key) => {
setCustomerChecked(key);
dispatch({ type: UPDATE_TIME.UPDATE_TIME, payload: key });
};
const onContrastPickerChange = (date, dateString, item) => {
let arr = [...datePickerArr];
arr.forEach((child) => {
if (child.key === item.key) {
child.value = date;
}
});
handleBatchTime(arr, contrastOption);
};
// 新增日期选择组件
const handleAddDatePicker = () => {
setDatePickerArr([
...datePickerArr,
{
key: datePickerArr[datePickerArr.length - 1].key + 1,
value: '',
},
]);
};
// 删除日期选择组件
const handleDeleteDatePicker = (index) => {
const arr = [...datePickerArr];
arr.splice(index, 1);
setDatePickerArr(arr);
handleBatchTime(arr, contrastOption);
};
// 曲线设置 checkbox
const onCheckboxChange = (e, key) => {
let data = [...checkboxData];
data.forEach((item) => {
if (item.key === key) {
item.checked = e.target.checked;
if (key === 'dataThin') {
if (e.target.checked) {
timeIntervalList.forEach((child) => {
if (child.key === dataThinKey) {
dispatch({ type: item.type, payload: { zoom: dataThinKey, unit: child.unit } });
}
});
} else {
dispatch({ type: item.type, payload: { zoom: '', unit: '' } });
}
}
if (key === 'ignoreOutliers') {
dispatch({ type: item.type, payload: e.target.checked });
}
if (key === 'curveCenter') {
setOptions({ ...handleChartOptions() });
}
}
});
setCheckboxData(data);
};
// 数据抽稀时间间隔
const onTimeIntervalChange = (value, { unit }) => {
let data = checkboxData.filter((item) => item.key === 'dataThin');
if (data[0].checked) {
dispatch({ type: UPDATE_TIME.UPDATE_DATA_THIN, payload: { zoom: value, unit: unit } });
}
setDataThinKey(value);
};
const renderCheckbox = (child) => (
<Checkbox
value={child.key}
checked={child.checked}
onChange={(e) => onCheckboxChange(e, child.key)}
>
{child.label}
</Checkbox>
);
const renderOptions = (item) => {
return (
<>
<div className={classNames(`${prefixCls}-time`)}>
<div className={classNames(`${prefixCls}-label`)}>时间</div>
<Radio.Group value={timeValue} onChange={onTimeSetChange}>
<Radio.Button value="customer">自定义</Radio.Button>
<Radio.Button value="contrast">同期对比</Radio.Button>
</Radio.Group>
{timeValue === 'customer' && ( // 自定义
<>
<TimeRangePicker
onChange={onCustomerTimeChange}
value={customerChecked}
dataSource={timeList}
/>
<RangePicker
className={classNames(`${prefixCls}-customer`)}
onChange={onCustomerRangeChange}
value={customerTime}
showTime
/>
</>
)}
{timeValue === 'contrast' && ( // 同期对比
<>
<Select value={contrastOption} style={{ width: 60 }} onChange={onContrastChange}>
<Option value="day"></Option>
<Option value="month"></Option>
</Select>
{datePickerArr.map((child, index) => (
<div key={child.key} className={classNames(`${prefixCls}-contrast-list`)}>
<div className={classNames(`${prefixCls}-date-wrap`)}>
<DatePicker
picker={contrastOption}
value={child.value}
onChange={(date, dateString) =>
onContrastPickerChange(date, dateString, child)
}
/>
{datePickerArr.length > 2 && (
<div
className={classNames(`${prefixCls}-date-delete`)}
onClick={() => handleDeleteDatePicker(index)}
>
<CloseCircleFilled />
</div>
)}
</div>
{index < datePickerArr.length - 1 && (
<div className={classNames(`${prefixCls}-connect`)}></div>
)}
</div>
))}
{datePickerArr.length < 5 && <PlusCircleOutlined onClick={handleAddDatePicker} />}
</>
)}
</div>
<div className={classNames(`${prefixCls}-cover`)}>
<div className={classNames(`${prefixCls}-label`)}>曲线设置</div>
{checkboxData.map((child) => (
<div key={child.key}>
{item.key === 'curve' && renderCheckbox(child)}
{item.key === 'table' && child.key !== 'curveCenter' && renderCheckbox(child)}
</div>
))}
<Select value={dataThinKey} style={{ width: 90 }} onChange={onTimeIntervalChange}>
{timeIntervalList.map((child) => (
<Option key={child.key} unit={child.unit} value={child.key}>
{child.name}
</Option>
))}
</Select>
</div>
</>
);
};
const getSeriesType = (sensorName) => {
return sensorName ? (sensorName.indexOf('流量') > -1 ? 'area' : 'spline') : 'spline';
};
// 处理图表options
const handleChartOptions = () => {
// const { series } = chartOptions;
let _series = [];
let _yAxis = [];
let uniqueUnit = [];
series.forEach((item, index) => {
// 处理series
let _s = {
name: item.name,
type: getSeriesType(item.sensorName),
data: item.data,
zIndex: 1,
tooltip: { valueSuffix: item.unit ? item.unit : '' },
color: colors[index],
decimalPoint: item.decimalPoint,
navigatorOptions: {
enabled: true,
},
};
if (_s.type === 'area' || _s.type === 'areaspline') {
_s.fillColor = {
linearGradient: {
x1: 0,
y1: 0,
x2: 0,
y2: 1,
},
stops: [
[0, Highcharts.Color(_s.color).setOpacity(0.1).get('rgba')],
[1, '#fff'],
],
};
_s.threshold = 0;
}
// 处理yAxis
if (!uniqueUnit.includes(item.unit)) {
uniqueUnit.push(item.unit);
let _length = uniqueUnit.length - 1;
let _y = {
title: {
text: item.unit,
align: 'high',
offset: 0,
rotation: 0,
y: -25,
x: 0,
},
gridLineWidth: 1,
gridLineDashStyle: 'dash',
lineWidth: 1,
tickAmount: 10,
crosshair: true,
floor: 0,
num: _length,
opposite: _length % 2 === 0,
offset: Math.floor(_length / 2) * 40,
style: {
color: '',
},
labels: {
style: {
color: '',
},
x: -2,
},
};
_yAxis.push(_y);
}
// 处理series
_s.yAxis = uniqueUnit.findIndex((child) => child === item.unit);
_series.push(_s);
});
Highcharts.setOptions({
global: { timezoneOffset: -8 * 60 },
});
let options = { ...defaultOptions };
if (CheckboxData[0].checked) {
_yAxis = setYaxisMin(_yAxis, _series);
} else {
_yAxis = _yAxis.map((item) => ({ ...item, max: null, min: null }));
}
if (_yAxis.length > 0) {
options = {
...defaultOptions,
// ...chartOptions,
yAxis: _yAxis,
series: _series,
};
}
options.tooltip.formatter = function formatter() {
let _html = `<b>${Highcharts.dateFormat(
contrastOption === 'day' ? '%H:%M' : '%d %H:%M',
this.x,
)}</b><br/>`;
this.points.forEach((item) => {
_html += `<span style={{color: ${item.series.color}}}>${item.series.name}</span>:
<b>${
item.point.y.toFixed(
item.series.userOptions.decimalPoint ? item.series.userOptions.decimalPoint : 2,
) * 1
}${item.series.userOptions.tooltip.valueSuffix}</b>
<br/>`;
});
return _html;
};
if (container.current) {
if (container.current.offsetWidth !== 0) {
chartWidth = container.current.offsetWidth;
chartHeight = container.current.offsetHeight;
}
Highcharts.setOptions({
// 处理 chart 高度坍塌
chart: {
width: container.current.offsetWidth === 0 ? chartWidth : container.current.offsetWidth,
height:
container.current.offsetHeight === 0 ? chartHeight : container.current.offsetHeight,
},
});
}
return options;
};
const setYaxisMin = (y, data) => {
let result = y.concat();
data.forEach((val) => {
let min = 999999999;
let showMin = 999999999;
let max = -999999999;
let showMax = -999999999;
val.data.forEach((item) => {
if (item[1]) {
min = Math.min(min, item[1]);
showMin = Math.min(min, item[1]);
max = Math.max(max, item[1]);
showMax = Math.max(max, item[1]);
}
});
let k = 0;
let same = false;
for (let i = 0; i < val.data.length; i++) {
// 判断是否全为0
if (val.data[i][1] !== 0) {
k = 1;
}
// 判断是否全相等
if (i >= 1 && val.data[i][1] !== val.data[i - 1][1]) {
same = true;
}
}
if (k === 0) {
result[val.yAxis].min = result[val.yAxis].min
? Math.min(result[val.yAxis].min, -0.2)
: -0.2;
result[val.yAxis].max = result[val.yAxis].max ? Math.max(result[val.yAxis].max, 0.2) : 0.2;
} else if (!same) {
min = val.data[0][1] > 0 ? val.data[0][1] * 0.5 : val.data[0][1] * 1.5;
max = val.data[0][1] > 0 ? val.data[0][1] * 1.5 : val.data[0][1] * 0.5;
result[val.yAxis].min = result[val.yAxis].min
? Math.min(result[val.yAxis].min, showMin)
: min;
result[val.yAxis].max = result[val.yAxis].max ? Math.max(result[val.yAxis].max, max) : max;
} else {
result[val.yAxis].min = result[val.yAxis].min
? Math.min(result[val.yAxis].min, min)
: showMin;
result[val.yAxis].max = result[val.yAxis].max
? Math.max(result[val.yAxis].max, max)
: showMax;
}
});
return result;
};
return (
<div className={classNames(prefixCls)}>
<Tabs
activeKey={activeTabKey}
centered
tabBarExtraContent={{
left: <h3 className="tabs-extra-demo-button">{title}</h3>,
}}
onChange={(key) => setActiveTabKey(key)}
>
{TabPaneData.map((item) => (
<TabPane tab={item.tab} key={item.key}>
<div className={classNames(`${prefixCls}-content`)}>
{renderOptions(item)}
{!tableData.length && <Empty />}
{!!tableData.length && (
<div className={classNames(`${prefixCls}-wrap`)}>
<div className={classNames(`${prefixCls}-main`)}>
{item.key === 'curve' && (
<div className={classNames(`${prefixCls}-chart`)} ref={container}>
<HighchartsReact
immutable={true}
highcharts={Highcharts}
constructorType={'stockChart'}
options={options}
allowChartUpdate={true}
/>
</div>
)}
{item.key === 'table' && (
<BasicTable
dataSource={tableData}
columns={columns}
{...tableProps}
pagination={{ pageSize }}
onChange={(value) => {
setPageSize(value.pageSize);
}}
/>
)}
</div>
</div>
)}
</div>
</TabPane>
))}
</Tabs>
</div>
);
};
HistoryInfo.defaultProps = {
title: '指标曲线',
defaultChecked: 'oneHour',
tableProps: {},
historyInfoParams: {},
historyInfoService: () => {},
};
HistoryInfo.propTypes = {
title: PropTypes.string,
defaultChecked: PropTypes.string,
tableProps: PropTypes.object,
historyInfoParams: PropTypes.object,
historyInfoService: PropTypes.func,
};
export default HistoryInfo;
const startFormat = 'YYYY-MM-DD 00:00:00';
const endFormat = 'YYYY-MM-DD 23:59:59';
const timeFormat = 'YYYY-MM-DD HH:mm:ss';
const colors = [
'#1884EC',
'#90CE53',
'#86E0C7',
'#68cbd1',
'#bb98d1',
'#588c66',
'#b0859e',
'#647fac',
'#7c6894',
'#9c8273',
'#838b61',
'#437db0',
'#9b97c4',
'#bda589',
'#89bd8e',
'#cbcc75',
];
const defaultOptions = {
chart: {
zoomType: 'x',
backgroundColor: 'rgba(255, 255, 255, 0.5)',
},
colors: colors,
title: null,
credits: false,
rangeSelector: {
enabled: false,
},
xAxis: [
{
lineWidth: 0,
crosshair: true,
type: 'datetime',
gridLineDashStyle: 'dash',
gridLineWidth: 1,
dateTimeLabelFormats: {
second: '%H:%M:%S',
minute: '%H:%M',
hour: '%H:%M',
day: '%d',
week: '%d',
month: '%d',
year: '%Y',
},
},
],
yAxis: [],
tooltip: {
shared: true,
split: false,
valueDecimals: 3,
},
plotOptions: {
series: {
showInNavigator: true,
connectNulls: false,
zoneAxis: 'x',
},
},
legend: {
enabled: true,
verticalAlign: 'top',
},
series: [],
responsive: {
rules: [
{
condition: {
maxWidth: 800,
minHeight: 500,
},
},
],
},
};
const initialState = {
dateRange: [],
ignoreOutliers: false,
isVertical: false,
zoom: '',
unit: '',
};
const TabPaneData = [
{
key: 'curve',
tab: '曲线',
},
{
key: 'table',
tab: '表格',
},
];
const CheckboxData = [
{
key: 'curveCenter',
label: '曲线居中',
checked: false,
},
{
key: 'ignoreOutliers',
label: '过滤异常值',
type: 'updateIgnoreOutliers',
checked: false,
},
{
key: 'dataThin',
label: '数据抽稀',
type: 'updateDataThin',
checked: false,
},
];
const timeList = [
{
key: 'oneHour',
name: '近1小时',
},
{
key: 'fourHour',
name: '近4小时',
},
{
key: 'twelveHours',
name: '近12小时',
},
{
key: 'roundClock',
name: '近24小时',
},
{
key: 'yesterday',
name: '昨天',
},
];
const timeIntervalList = [
{
key: '5',
unit: 'min',
name: '5分钟',
},
{
key: '10',
unit: 'min',
name: '10分钟',
},
{
key: '30',
unit: 'min',
name: '30分钟',
},
{
key: '1',
unit: 'h',
name: '1小时',
},
{
key: '2',
unit: 'h',
name: '2小时',
},
{
key: '6',
unit: 'h',
name: '6小时',
},
{
key: '12',
unit: 'h',
name: '12小时',
},
];
@import (reference) '../../../../node_modules/antd/es/style/themes/default';
@history-info-prefix-cls: ~'@{ant-prefix}-history-info';
.@{history-info-prefix-cls} {
height: 100%;
.ant-tabs,
.ant-tabs-content {
height: 100%;
}
&-content {
display: flex;
flex-direction: column;
height: 100%;
padding: 10px 0 0 0;
}
&-wrap {
flex: 1;
overflow: hidden;
}
&-main {
width: 100%;
max-width: 100%;
height: 100%;
max-height: 100%;
}
&-chart {
width: 100%;
height: 100%;
}
&-time {
display: flex;
align-items: center;
margin-bottom: 20px;
white-space: nowrap;
.@{history-info-prefix-cls}-label {
letter-spacing: 27px;
}
.@{history-info-prefix-cls}-label:after {
right: -20px;
}
.ant-radio-group,
.ant-select {
margin-right: 16px;
}
.anticon-plus-circle {
margin-left: 10px;
color: @primary-color;
font-size: 16px;
cursor: pointer;
}
}
&-cover {
display: flex;
align-items: center;
margin-bottom: 20px;
white-space: nowrap;
}
&-label {
position: relative;
width: 80px;
}
&-label:after {
position: absolute;
top: 0;
right: 7px;
content: ':';
}
&-contrast-list {
display: flex;
align-items: center;
}
&-connect {
margin: 0 10px;
}
&-date-wrap {
position: relative;
cursor: pointer;
}
&-date-delete {
position: absolute;
top: -12px;
right: -8px;
.anticon.anticon-close-circle {
color: #d9d9d9;
background: white;
}
&:hover {
.anticon.anticon-close-circle {
color: rgba(0, 0, 0, 0.45);
background: white;
}
}
}
}
# Change Log
All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
## 1.0.4 (2021-05-11)
### Bug Fixes
- bug ([1fcf652](https://g.civnet.cn:8443/ReactWeb5/wisdom-components/commits/1fcf652088fa0f885d289c42fa4f4699f1e16143))
- conflict ([a210fa2](https://g.civnet.cn:8443/ReactWeb5/wisdom-components/commits/a210fa2f050d8b9c7f3a4a1b6884fd39b22914b0))
## 1.0.3 (2021-05-11)
### Bug Fixes
- bug ([1fcf652](https://g.civnet.cn:8443/ReactWeb5/wisdom-components/commits/1fcf652088fa0f885d289c42fa4f4699f1e16143))
- conflict ([a210fa2](https://g.civnet.cn:8443/ReactWeb5/wisdom-components/commits/a210fa2f050d8b9c7f3a4a1b6884fd39b22914b0))
## 1.0.2 (2021-05-11)
### Bug Fixes
- bug ([1fcf652](https://g.civnet.cn:8443/ReactWeb5/wisdom-components/commits/1fcf652088fa0f885d289c42fa4f4699f1e16143))
- conflict ([a210fa2](https://g.civnet.cn:8443/ReactWeb5/wisdom-components/commits/a210fa2f050d8b9c7f3a4a1b6884fd39b22914b0))
## 1.0.1 (2021-05-10)
### Bug Fixes
- bug ([1fcf652](https://g.civnet.cn:8443/ReactWeb5/wisdom-components/commits/1fcf652088fa0f885d289c42fa4f4699f1e16143))
# `@wisdom-components/ec_quotaselect`
> TODO: description
## Usage
```
const ECQuotaSelect = require('@wisdom-components/ec_quotaselect');
// TODO: DEMONSTRATE API
```
{
"name": "@wisdom-components/ec_quotaselect",
"version": "1.0.4",
"description": "> TODO: description",
"author": "tuqian <webtuqian@163.com>",
"homepage": "",
"license": "ISC",
"main": "lib/index.js",
"directories": {
"lib": "lib",
"test": "__tests__"
},
"files": [
"lib"
],
"publishConfig": {
"registry": "https://g.civnet.cn:4873/"
},
"repository": {
"type": "git",
"url": "https://g.civnet.cn:8443/ReactWeb5/wisdom-components.git"
},
"scripts": {
"test": "echo \"Error: run tests from root\" && exit 1"
}
}
......@@ -11,12 +11,15 @@ const REQUEST_METHOD_POST = 'post';
const GET_QUOTA_LIST =
'https://www.fastmock.site/mock/162c15dca15c4dba9ba51e0a0b76929b/api/Publish/Monitor/Device/GetQuotaList'; //获取指标列表
// '/api/Publish/GCK/Device/GetQuotaList'; //获取指标列表
const GET_DEVICE_CONF =
'https://www.fastmock.site/mock/162c15dca15c4dba9ba51e0a0b76929b/api/Publish/Monitor/Device/GetDeviceConf'; //获取设备配置
// '/api/Publish/GCK/Device/GetDeviceConf'; //获取设备配置
const UPDATE_DEVICE_CONF =
'https://www.fastmock.site/mock/162c15dca15c4dba9ba51e0a0b76929b/api/Publish/Monitor/Device/SaveDeviceConf'; //更新设备配置
// '/api/Publish/GCK/Device/SaveDeviceConf'; //更新设备配置
const quotaSelectService = {
getQuotaList: {
......@@ -101,12 +104,7 @@ const Demo = () => {
<>
<h3>无 user, 无“保存修改”按钮</h3>
<PandaQuotaSelect
buttonProps={
{
// icon: <UnorderedListOutlined />,
// children: `指标选择(${selectData.length})`,
}
}
buttonProps={{}}
deviceList={deviceList}
quotaListService={getQuotaList}
pointType={pointType}
......@@ -119,12 +117,7 @@ const Demo = () => {
<br />
<h3>带 user, 有“保存修改”按钮</h3>
<PandaQuotaSelect
buttonProps={
{
// icon: <UnorderedListOutlined />,
// children: `指标选择(${selectData.length})`,
}
}
buttonProps={{}}
deviceList={deviceList}
quotaListService={getQuotaList}
updateDeviceConfService={updateDeviceConfService}
......
......@@ -59,7 +59,7 @@ const QuotaSelect = ({
const fetchData = (item = {}) => {
// 请求指标列表
quotaListService({
acountName: item.deviceType,
accountName: item.deviceType,
addrSchemeID: item.pointAddressID,
}).then((res) => {
if (res.code === 0) {
......@@ -125,7 +125,7 @@ const QuotaSelect = ({
// 过滤重点指标
const filterEmphasisQuota = () => {
let newQuotaList = [...allQuotaList];
newQuotaList = newQuotaList.filter((item) => item.isShow === '1');
newQuotaList = newQuotaList.filter((item) => item.isShow === 1);
setQuotaList(newQuotaList);
};
......
const { utils } = require('umi');
const { join } = require('path');
const { join, relative, resolve, sep } = require('path');
const exec = require('./utils/exec');
const getPackages = require('./utils/getPackages');
const isNextVersion = require('./utils/isNextVersion');
......@@ -24,6 +24,14 @@ function packageExists({ name, version }) {
}
async function release() {
let pkgList = execa.sync(lernaCli, ['list', '--json']).stdout;
pkgList = JSON.parse(pkgList);
const locMap = {};
pkgList.forEach((item) => {
const location = item.location.split(sep);
const componentName = item.name.split('/')[1];
locMap[componentName] = `${location[location.length - 2]}/${location[location.length - 1]}`;
});
// Check git status
if (!args.skipGitStatusCheck) {
const gitStatus = execa.sync('git', ['status', '--porcelain']).stdout;
......@@ -56,6 +64,7 @@ async function release() {
// Get updated packages
logStep('check updated packages');
const updatedStdout = execa.sync(lernaCli, ['changed']).stdout;
console.log('updatedStdout', updatedStdout);
updated = updatedStdout
.split('\n')
.map((pkg) => {
......@@ -120,7 +129,8 @@ async function release() {
// eslint-disable-next-line consistent-return
pkgs.forEach((pkg, index) => {
const [shortName, p] = pkg.split('!');
const pkgMap = locMap[pkg];
const [p, shortName] = pkgMap.split('/');
const pkgPath = join(cwd, 'packages', p, shortName.replace('pro-', ''));
// eslint-disable-next-line global-require,import/no-dynamic-require
const { name, version } = require(join(pkgPath, 'package.json'));
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment