@zgfe/modules-interval 1.0.0-interval.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +33 -0
- package/dist/esm/assets/business/demo.css +539 -0
- package/dist/esm/assets/business/demo_index.html +3178 -0
- package/dist/esm/assets/business/iconfont.css +535 -0
- package/dist/esm/assets/business/iconfont.js +43 -0
- package/dist/esm/assets/business/iconfont.json +919 -0
- package/dist/esm/assets/business/iconfont.ttf +0 -0
- package/dist/esm/assets/business/iconfont.woff +0 -0
- package/dist/esm/assets/business/iconfont.woff2 +0 -0
- package/dist/esm/assets/icons/demo.css +539 -0
- package/dist/esm/assets/icons/demo_index.html +9618 -0
- package/dist/esm/assets/icons/iconfont.css +1655 -0
- package/dist/esm/assets/icons/iconfont.js +43 -0
- package/dist/esm/assets/icons/iconfont.json +2879 -0
- package/dist/esm/assets/icons/iconfont.ttf +0 -0
- package/dist/esm/assets/icons/iconfont.woff +0 -0
- package/dist/esm/assets/icons/iconfont.woff2 +0 -0
- package/dist/esm/assets/images/empty@2x.png +0 -0
- package/dist/esm/assets/images/empty_state.png +0 -0
- package/dist/esm/assets/images/table_nodata.png +0 -0
- package/dist/esm/components/common/index.d.ts +6 -0
- package/dist/esm/components/common/index.js +21 -0
- package/dist/esm/components/common/styles/index.less +27 -0
- package/dist/esm/components/eventFilter/index.d.ts +5 -0
- package/dist/esm/components/eventFilter/index.js +187 -0
- package/dist/esm/components/eventFilter/styles/index.less +42 -0
- package/dist/esm/components/eventFilter/types.d.ts +50 -0
- package/dist/esm/components/eventFilter/types.js +1 -0
- package/dist/esm/components/index.d.ts +5 -0
- package/dist/esm/components/index.js +5 -0
- package/dist/esm/components/renderContent/index.d.ts +5 -0
- package/dist/esm/components/renderContent/index.js +58 -0
- package/dist/esm/components/renderContent/styles/index.less +23 -0
- package/dist/esm/components/renderContent/types.d.ts +31 -0
- package/dist/esm/components/renderContent/types.js +1 -0
- package/dist/esm/components/searchPanel/index.d.ts +5 -0
- package/dist/esm/components/searchPanel/index.js +122 -0
- package/dist/esm/components/searchPanel/styles/index.less +59 -0
- package/dist/esm/components/searchPanel/types.d.ts +49 -0
- package/dist/esm/components/searchPanel/types.js +1 -0
- package/dist/esm/components/table/index.d.ts +6 -0
- package/dist/esm/components/table/index.js +199 -0
- package/dist/esm/components/table/styles/index.less +123 -0
- package/dist/esm/components/table/types.d.ts +26 -0
- package/dist/esm/components/table/types.js +1 -0
- package/dist/esm/components/topBar/index.d.ts +5 -0
- package/dist/esm/components/topBar/index.js +121 -0
- package/dist/esm/components/topBar/styles/index.less +49 -0
- package/dist/esm/components/topBar/types.d.ts +8 -0
- package/dist/esm/components/topBar/types.js +1 -0
- package/dist/esm/constants/apis.d.ts +6 -0
- package/dist/esm/constants/apis.js +7 -0
- package/dist/esm/constants/chart.d.ts +2 -0
- package/dist/esm/constants/chart.js +31 -0
- package/dist/esm/constants/color.d.ts +2 -0
- package/dist/esm/constants/color.js +9 -0
- package/dist/esm/constants/fields.d.ts +226 -0
- package/dist/esm/constants/fields.js +219 -0
- package/dist/esm/constants/index.d.ts +6 -0
- package/dist/esm/constants/index.js +6 -0
- package/dist/esm/constants/initData.d.ts +2 -0
- package/dist/esm/constants/initData.js +11 -0
- package/dist/esm/index.d.ts +4 -0
- package/dist/esm/index.js +4 -0
- package/dist/esm/modules/chart/customTooltip.d.ts +7 -0
- package/dist/esm/modules/chart/customTooltip.js +37 -0
- package/dist/esm/modules/chart/demo/data.d.ts +79 -0
- package/dist/esm/modules/chart/demo/data.js +495 -0
- package/dist/esm/modules/chart/demo/index.d.ts +3 -0
- package/dist/esm/modules/chart/demo/index.js +51 -0
- package/dist/esm/modules/chart/demo/panel.d.ts +3 -0
- package/dist/esm/modules/chart/demo/panel.js +30 -0
- package/dist/esm/modules/chart/index.d.ts +4 -0
- package/dist/esm/modules/chart/index.js +100 -0
- package/dist/esm/modules/chart/index.less +48 -0
- package/dist/esm/modules/chart/intervalChart.d.ts +4 -0
- package/dist/esm/modules/chart/intervalChart.js +136 -0
- package/dist/esm/modules/chart/types.d.ts +37 -0
- package/dist/esm/modules/chart/types.js +2 -0
- package/dist/esm/modules/content/index.d.ts +5 -0
- package/dist/esm/modules/content/index.js +272 -0
- package/dist/esm/modules/content/styles/index.less +7 -0
- package/dist/esm/modules/content/types.d.ts +29 -0
- package/dist/esm/modules/content/types.js +2 -0
- package/dist/esm/modules/content/utils.d.ts +21 -0
- package/dist/esm/modules/content/utils.js +51 -0
- package/dist/esm/modules/home/demo/create.d.ts +3 -0
- package/dist/esm/modules/home/demo/create.js +51 -0
- package/dist/esm/modules/home/demo/edit.d.ts +3 -0
- package/dist/esm/modules/home/demo/edit.js +90 -0
- package/dist/esm/modules/home/demo/index.d.ts +4 -0
- package/dist/esm/modules/home/demo/index.js +51 -0
- package/dist/esm/modules/home/demo/scene.d.ts +3 -0
- package/dist/esm/modules/home/demo/scene.js +87 -0
- package/dist/esm/modules/home/demo/styles/index.less +33 -0
- package/dist/esm/modules/home/index.d.ts +5 -0
- package/dist/esm/modules/home/index.js +141 -0
- package/dist/esm/modules/home/styles/index.less +53 -0
- package/dist/esm/modules/home/types.d.ts +69 -0
- package/dist/esm/modules/home/types.js +2 -0
- package/dist/esm/modules/topPanel/index.d.ts +5 -0
- package/dist/esm/modules/topPanel/index.js +250 -0
- package/dist/esm/modules/topPanel/styles/index.less +67 -0
- package/dist/esm/modules/topPanel/types.d.ts +54 -0
- package/dist/esm/modules/topPanel/types.js +1 -0
- package/dist/esm/style/image/noData.png +0 -0
- package/dist/esm/style/image/ring.svg +9 -0
- package/dist/esm/style/index.less +46 -0
- package/dist/esm/style/theme.d.ts +15 -0
- package/dist/esm/style/theme.js +16 -0
- package/dist/esm/types.d.ts +169 -0
- package/dist/esm/types.js +19 -0
- package/dist/esm/utils/ajaxConfig.d.ts +8 -0
- package/dist/esm/utils/ajaxConfig.js +47 -0
- package/dist/esm/utils/base64.d.ts +29 -0
- package/dist/esm/utils/base64.js +132 -0
- package/dist/esm/utils/formData.d.ts +76 -0
- package/dist/esm/utils/formData.js +258 -0
- package/dist/esm/utils/util.d.ts +66 -0
- package/dist/esm/utils/util.js +177 -0
- package/package.json +61 -0
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
.custom-tooltip {
|
|
2
|
+
display: flex;
|
|
3
|
+
flex-direction: column;
|
|
4
|
+
flex-shrink: 0;
|
|
5
|
+
gap: 4px;
|
|
6
|
+
align-items: flex-start;
|
|
7
|
+
width: 146px;
|
|
8
|
+
height: 100%;
|
|
9
|
+
color: var(--io-n, #021429);
|
|
10
|
+
font-weight: 500;
|
|
11
|
+
font-size: 12px;
|
|
12
|
+
font-style: normal;
|
|
13
|
+
background: rgba(250, 251, 253, 0.8);
|
|
14
|
+
border-radius: 10px;
|
|
15
|
+
box-shadow: 0px 4px 10px 0px rgba(0, 0, 0, 0.1);
|
|
16
|
+
backdrop-filter: blur(2px);
|
|
17
|
+
|
|
18
|
+
> div:nth-child(2) {
|
|
19
|
+
display: flex;
|
|
20
|
+
flex-direction: column;
|
|
21
|
+
gap: 7px;
|
|
22
|
+
width: 100%;
|
|
23
|
+
height: 100%;
|
|
24
|
+
padding: 4px 8px;
|
|
25
|
+
background: #fff;
|
|
26
|
+
border-radius: 4px;
|
|
27
|
+
box-shadow: 0px 1px 2px 0px rgba(0, 0, 0, 0.04);
|
|
28
|
+
> div {
|
|
29
|
+
display: flex;
|
|
30
|
+
align-items: center;
|
|
31
|
+
justify-content: space-between;
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
> div:nth-child(1) {
|
|
35
|
+
justify-content: flex-start;
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
.tooltip-span {
|
|
40
|
+
display: block;
|
|
41
|
+
color: var(--3, #5f6085);
|
|
42
|
+
font-weight: 400;
|
|
43
|
+
font-size: 12px;
|
|
44
|
+
font-family: PingFang SC;
|
|
45
|
+
font-style: normal;
|
|
46
|
+
line-height: normal;
|
|
47
|
+
}
|
|
48
|
+
}
|
|
@@ -0,0 +1,136 @@
|
|
|
1
|
+
function _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest(); }
|
|
2
|
+
function _nonIterableRest() { throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }
|
|
3
|
+
function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }
|
|
4
|
+
function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) arr2[i] = arr[i]; return arr2; }
|
|
5
|
+
function _iterableToArrayLimit(arr, i) { var _i = null == arr ? null : "undefined" != typeof Symbol && arr[Symbol.iterator] || arr["@@iterator"]; if (null != _i) { var _s, _e, _x, _r, _arr = [], _n = !0, _d = !1; try { if (_x = (_i = _i.call(arr)).next, 0 === i) { if (Object(_i) !== _i) return; _n = !1; } else for (; !(_n = (_s = _x.call(_i)).done) && (_arr.push(_s.value), _arr.length !== i); _n = !0); } catch (err) { _d = !0, _e = err; } finally { try { if (!_n && null != _i.return && (_r = _i.return(), Object(_r) !== _r)) return; } finally { if (_d) throw _e; } } return _arr; } }
|
|
6
|
+
function _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }
|
|
7
|
+
import React, { useEffect, useState } from 'react';
|
|
8
|
+
import ReactECharts from 'echarts-for-react';
|
|
9
|
+
import * as echarts from 'echarts';
|
|
10
|
+
import { renderToString } from 'react-dom/server';
|
|
11
|
+
import CustomTooltip from "./customTooltip";
|
|
12
|
+
import { chartColors } from "../../constants";
|
|
13
|
+
import { getRandomColor } from "../../constants/color";
|
|
14
|
+
var IntervalChart = function IntervalChart(props) {
|
|
15
|
+
var _useState = useState({}),
|
|
16
|
+
_useState2 = _slicedToArray(_useState, 2),
|
|
17
|
+
option = _useState2[0],
|
|
18
|
+
setOption = _useState2[1];
|
|
19
|
+
useEffect(function () {
|
|
20
|
+
var _props$showList, _seriesData$series;
|
|
21
|
+
var seriesData = props === null || props === void 0 ? void 0 : (_props$showList = props.showList) === null || _props$showList === void 0 ? void 0 : _props$showList.app_data;
|
|
22
|
+
var eCharts = {
|
|
23
|
+
tooltip: {
|
|
24
|
+
trigger: 'item',
|
|
25
|
+
axisPointer: {
|
|
26
|
+
type: 'shadow'
|
|
27
|
+
}
|
|
28
|
+
},
|
|
29
|
+
legend: {
|
|
30
|
+
bottom: 0,
|
|
31
|
+
type: 'scroll'
|
|
32
|
+
},
|
|
33
|
+
grid: {
|
|
34
|
+
top: '10',
|
|
35
|
+
left: '0',
|
|
36
|
+
right: '0',
|
|
37
|
+
bottom: '68px',
|
|
38
|
+
containLabel: true
|
|
39
|
+
},
|
|
40
|
+
xAxis: {
|
|
41
|
+
type: 'category',
|
|
42
|
+
boundaryGap: true,
|
|
43
|
+
nameGap: 30,
|
|
44
|
+
data: seriesData === null || seriesData === void 0 ? void 0 : seriesData.x_axis,
|
|
45
|
+
splitArea: {
|
|
46
|
+
show: false
|
|
47
|
+
},
|
|
48
|
+
splitLine: {
|
|
49
|
+
show: false
|
|
50
|
+
},
|
|
51
|
+
axisLine: {
|
|
52
|
+
lineStyle: {
|
|
53
|
+
color: '#E6E7EA' // 设置线条颜色
|
|
54
|
+
}
|
|
55
|
+
},
|
|
56
|
+
|
|
57
|
+
axisLabel: {
|
|
58
|
+
color: '#67727F' // 设置文字颜色
|
|
59
|
+
}
|
|
60
|
+
},
|
|
61
|
+
|
|
62
|
+
yAxis: {
|
|
63
|
+
type: 'value',
|
|
64
|
+
splitLine: {
|
|
65
|
+
show: true,
|
|
66
|
+
lineStyle: {
|
|
67
|
+
type: 'dashed' // 设置线条类型为虚线
|
|
68
|
+
}
|
|
69
|
+
},
|
|
70
|
+
|
|
71
|
+
axisLabel: {
|
|
72
|
+
color: '#67727F' // 设置文字颜色
|
|
73
|
+
}
|
|
74
|
+
},
|
|
75
|
+
|
|
76
|
+
dataZoom: [{
|
|
77
|
+
type: 'inside',
|
|
78
|
+
start: 0,
|
|
79
|
+
end: 20,
|
|
80
|
+
height: 20 // 设置内置的dataZoom的高度
|
|
81
|
+
}, {
|
|
82
|
+
show: true,
|
|
83
|
+
type: 'slider',
|
|
84
|
+
bottom: '38px',
|
|
85
|
+
xAxisIndex: [0],
|
|
86
|
+
start: 0,
|
|
87
|
+
end: 20,
|
|
88
|
+
height: 20 // 设置滑动条的高度
|
|
89
|
+
}],
|
|
90
|
+
|
|
91
|
+
series: seriesData === null || seriesData === void 0 ? void 0 : (_seriesData$series = seriesData.series) === null || _seriesData$series === void 0 ? void 0 : _seriesData$series.map(function (item, i) {
|
|
92
|
+
var _seriesData$series$i, _seriesData$series$i2;
|
|
93
|
+
// 生成随机颜色
|
|
94
|
+
var color = i < chartColors.length ? chartColors[i] : getRandomColor();
|
|
95
|
+
return {
|
|
96
|
+
type: 'boxplot',
|
|
97
|
+
datasetIndex: 1,
|
|
98
|
+
name: seriesData === null || seriesData === void 0 ? void 0 : (_seriesData$series$i = seriesData.series[i]) === null || _seriesData$series$i === void 0 ? void 0 : _seriesData$series$i.names[0],
|
|
99
|
+
data: seriesData === null || seriesData === void 0 ? void 0 : (_seriesData$series$i2 = seriesData.series[i]) === null || _seriesData$series$i2 === void 0 ? void 0 : _seriesData$series$i2.values,
|
|
100
|
+
tooltip: {
|
|
101
|
+
show: true,
|
|
102
|
+
// 单独配置series中的tooltip为显示
|
|
103
|
+
extraCssText: 'border: none;',
|
|
104
|
+
// 添加自定义的CSS样式,去掉边框
|
|
105
|
+
formatter: function formatter(params) {
|
|
106
|
+
var tooltipString = renderToString( /*#__PURE__*/React.createElement(CustomTooltip, {
|
|
107
|
+
series: seriesData === null || seriesData === void 0 ? void 0 : seriesData.series[i],
|
|
108
|
+
payload: params
|
|
109
|
+
}));
|
|
110
|
+
return tooltipString;
|
|
111
|
+
}
|
|
112
|
+
},
|
|
113
|
+
emphasis: {
|
|
114
|
+
itemStyle: {
|
|
115
|
+
borderColor: color // 设置盒子的颜色
|
|
116
|
+
}
|
|
117
|
+
},
|
|
118
|
+
|
|
119
|
+
itemStyle: {
|
|
120
|
+
borderColor: color
|
|
121
|
+
}
|
|
122
|
+
};
|
|
123
|
+
})
|
|
124
|
+
};
|
|
125
|
+
setOption(eCharts);
|
|
126
|
+
}, [props === null || props === void 0 ? void 0 : props.showList]);
|
|
127
|
+
return /*#__PURE__*/React.createElement(ReactECharts, {
|
|
128
|
+
style: {
|
|
129
|
+
height: '431px',
|
|
130
|
+
padding: 24
|
|
131
|
+
},
|
|
132
|
+
option: option,
|
|
133
|
+
echarts: echarts
|
|
134
|
+
});
|
|
135
|
+
};
|
|
136
|
+
export default IntervalChart;
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
import { ChartTypes } from '@zgfe/business-lib/es/chart/types';
|
|
2
|
+
import { SearchValue } from '../../types';
|
|
3
|
+
import { DisplaySetup } from '../../components/searchPanel/types';
|
|
4
|
+
export declare namespace eventChartProps {
|
|
5
|
+
interface ChartTypesProps extends ChartTypes.Value {
|
|
6
|
+
app_data: any;
|
|
7
|
+
xAxis: [];
|
|
8
|
+
x_axis: [];
|
|
9
|
+
}
|
|
10
|
+
interface Props {
|
|
11
|
+
/**
|
|
12
|
+
* 图表数据
|
|
13
|
+
*/
|
|
14
|
+
dataSource?: ChartTypesProps;
|
|
15
|
+
dataSourceList?: DisplaySetup[];
|
|
16
|
+
/**
|
|
17
|
+
* 查询条件
|
|
18
|
+
*/
|
|
19
|
+
params?: SearchValue;
|
|
20
|
+
/**
|
|
21
|
+
* 展示图标类型,不从查询条件中取
|
|
22
|
+
*/
|
|
23
|
+
type?: string;
|
|
24
|
+
/**
|
|
25
|
+
* 展示列表
|
|
26
|
+
*/
|
|
27
|
+
showList?: ChartTypesProps;
|
|
28
|
+
/**
|
|
29
|
+
* 图标颜色
|
|
30
|
+
*/
|
|
31
|
+
showColors?: string[];
|
|
32
|
+
/**
|
|
33
|
+
* 改变显示内容
|
|
34
|
+
*/
|
|
35
|
+
onChangeShow?: (data: string[]) => void;
|
|
36
|
+
}
|
|
37
|
+
}
|
|
@@ -0,0 +1,272 @@
|
|
|
1
|
+
function _typeof(obj) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (obj) { return typeof obj; } : function (obj) { return obj && "function" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }, _typeof(obj); }
|
|
2
|
+
function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }
|
|
3
|
+
function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }
|
|
4
|
+
function _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
|
|
5
|
+
function _toPropertyKey(arg) { var key = _toPrimitive(arg, "string"); return _typeof(key) === "symbol" ? key : String(key); }
|
|
6
|
+
function _toPrimitive(input, hint) { if (_typeof(input) !== "object" || input === null) return input; var prim = input[Symbol.toPrimitive]; if (prim !== undefined) { var res = prim.call(input, hint || "default"); if (_typeof(res) !== "object") return res; throw new TypeError("@@toPrimitive must return a primitive value."); } return (hint === "string" ? String : Number)(input); }
|
|
7
|
+
function _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest(); }
|
|
8
|
+
function _nonIterableRest() { throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }
|
|
9
|
+
function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }
|
|
10
|
+
function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) arr2[i] = arr[i]; return arr2; }
|
|
11
|
+
function _iterableToArrayLimit(arr, i) { var _i = null == arr ? null : "undefined" != typeof Symbol && arr[Symbol.iterator] || arr["@@iterator"]; if (null != _i) { var _s, _e, _x, _r, _arr = [], _n = !0, _d = !1; try { if (_x = (_i = _i.call(arr)).next, 0 === i) { if (Object(_i) !== _i) return; _n = !1; } else for (; !(_n = (_s = _x.call(_i)).done) && (_arr.push(_s.value), _arr.length !== i); _n = !0); } catch (err) { _d = !0, _e = err; } finally { try { if (!_n && null != _i.return && (_r = _i.return(), Object(_r) !== _r)) return; } finally { if (_d) throw _e; } } return _arr; } }
|
|
12
|
+
function _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }
|
|
13
|
+
import { ajax, BizGlobalDataContext, BizLayout, BizTargetFromPanelContext } from '@zgfe/business-lib';
|
|
14
|
+
import React, { useContext, useEffect, useRef, useState } from 'react';
|
|
15
|
+
import Request from 'umi-request';
|
|
16
|
+
import TopBar from "../../components/topBar";
|
|
17
|
+
import { EventContext } from "../../types";
|
|
18
|
+
import "./styles/index.less";
|
|
19
|
+
import { Apis } from "../../constants";
|
|
20
|
+
import { judgeIsCity, judgeIsArea, getValue } from "./utils";
|
|
21
|
+
import { ContentPanel, SearchPanel } from "../../components";
|
|
22
|
+
import TopPanel from "../topPanel";
|
|
23
|
+
import { message } from 'antd';
|
|
24
|
+
var timer = 0;
|
|
25
|
+
var ajaxFlag = true;
|
|
26
|
+
var CancelToken = Request.CancelToken;
|
|
27
|
+
var cancel;
|
|
28
|
+
var classPrefix = 'event-content';
|
|
29
|
+
var EventContent = function EventContent(props) {
|
|
30
|
+
// console.log('EventContent', props);
|
|
31
|
+
// 最后的查询数据(防止图表在还没查询时就改变了类型)
|
|
32
|
+
var _useState = useState(props.value),
|
|
33
|
+
_useState2 = _slicedToArray(_useState, 2),
|
|
34
|
+
finalSearchData = _useState2[0],
|
|
35
|
+
setFinalSearchData = _useState2[1];
|
|
36
|
+
var _useContext = useContext(BizGlobalDataContext),
|
|
37
|
+
currentApp = _useContext.currentApp;
|
|
38
|
+
// 查询的结果数据
|
|
39
|
+
var _useState3 = useState(),
|
|
40
|
+
_useState4 = _slicedToArray(_useState3, 2),
|
|
41
|
+
eventData = _useState4[0],
|
|
42
|
+
setEventData = _useState4[1];
|
|
43
|
+
var _useState5 = useState(props.show || []),
|
|
44
|
+
_useState6 = _slicedToArray(_useState5, 2),
|
|
45
|
+
showList = _useState6[0],
|
|
46
|
+
setShowList = _useState6[1];
|
|
47
|
+
var _useState7 = useState(true),
|
|
48
|
+
_useState8 = _slicedToArray(_useState7, 2),
|
|
49
|
+
loading = _useState8[0],
|
|
50
|
+
setLoading = _useState8[1];
|
|
51
|
+
// 地图是否可选
|
|
52
|
+
var _useState9 = useState(false),
|
|
53
|
+
_useState10 = _slicedToArray(_useState9, 2),
|
|
54
|
+
enableSelectChart = _useState10[0],
|
|
55
|
+
setEnableSelectChart = _useState10[1];
|
|
56
|
+
// 是否是城市
|
|
57
|
+
var _useState11 = useState(false),
|
|
58
|
+
_useState12 = _slicedToArray(_useState11, 2),
|
|
59
|
+
isCity = _useState12[0],
|
|
60
|
+
setIsCity = _useState12[1];
|
|
61
|
+
var _useState13 = useState(-1),
|
|
62
|
+
_useState14 = _slicedToArray(_useState13, 2),
|
|
63
|
+
eventId = _useState14[0],
|
|
64
|
+
setEventId = _useState14[1];
|
|
65
|
+
var _useContext2 = useContext(EventContext),
|
|
66
|
+
searchData = _useContext2.searchData,
|
|
67
|
+
setSearchData = _useContext2.setSearchData,
|
|
68
|
+
eventGroupList = _useContext2.eventGroupList,
|
|
69
|
+
eventEnvList = _useContext2.eventEnvList,
|
|
70
|
+
userPropList = _useContext2.userPropList;
|
|
71
|
+
var _useContext3 = useContext(BizTargetFromPanelContext),
|
|
72
|
+
handleSearch = _useContext3.handleSearch;
|
|
73
|
+
var collapseRef = useRef();
|
|
74
|
+
// 初始化
|
|
75
|
+
useEffect(function () {
|
|
76
|
+
if (props.defaultValue) {
|
|
77
|
+
setEventId(props.defaultValue.id);
|
|
78
|
+
}
|
|
79
|
+
}, [props.defaultValue]);
|
|
80
|
+
useEffect(function () {
|
|
81
|
+
if (searchData && searchData.dimension) {
|
|
82
|
+
var _getValue;
|
|
83
|
+
var _attrName = (_getValue = getValue(searchData.dimension, eventGroupList, eventEnvList, userPropList)) === null || _getValue === void 0 ? void 0 : _getValue.name;
|
|
84
|
+
if (_attrName) {
|
|
85
|
+
setEnableSelectChart(judgeIsArea(_attrName));
|
|
86
|
+
setIsCity(judgeIsCity(_attrName));
|
|
87
|
+
}
|
|
88
|
+
}
|
|
89
|
+
if (timer) clearTimeout(timer);
|
|
90
|
+
var flag = true;
|
|
91
|
+
timer = setTimeout(function () {
|
|
92
|
+
if (flag) {
|
|
93
|
+
fetchRequest();
|
|
94
|
+
}
|
|
95
|
+
}, 500);
|
|
96
|
+
return function () {
|
|
97
|
+
// 清理异步任务
|
|
98
|
+
if (timer) clearTimeout(timer);
|
|
99
|
+
flag = false;
|
|
100
|
+
};
|
|
101
|
+
}, [searchData]);
|
|
102
|
+
useEffect(function () {
|
|
103
|
+
handleSearch && handleSearch(loading);
|
|
104
|
+
}, [loading]);
|
|
105
|
+
// 间隔分析传参变更
|
|
106
|
+
function searchCondition(params) {
|
|
107
|
+
var _params$filters, _params$filters2;
|
|
108
|
+
var numAttrTypeMap = {
|
|
109
|
+
1: 'cont-string',
|
|
110
|
+
2: 'cont-num',
|
|
111
|
+
3: 'cont-date'
|
|
112
|
+
};
|
|
113
|
+
return {
|
|
114
|
+
operator: (params === null || params === void 0 ? void 0 : (_params$filters = params.filters) === null || _params$filters === void 0 ? void 0 : _params$filters.relation) || 'and',
|
|
115
|
+
event_id: params === null || params === void 0 ? void 0 : params.id,
|
|
116
|
+
event_name: params === null || params === void 0 ? void 0 : params.name,
|
|
117
|
+
condition: params === null || params === void 0 ? void 0 : (_params$filters2 = params.filters) === null || _params$filters2 === void 0 ? void 0 : _params$filters2.conditions.map(function (item) {
|
|
118
|
+
return {
|
|
119
|
+
name: item === null || item === void 0 ? void 0 : item.attrName,
|
|
120
|
+
attrId: item === null || item === void 0 ? void 0 : item.attrId,
|
|
121
|
+
params: item === null || item === void 0 ? void 0 : item.values,
|
|
122
|
+
attr_sub: (item === null || item === void 0 ? void 0 : item.propCategory) === 'userProp' ? 'user_attr' : (item === null || item === void 0 ? void 0 : item.propCategory) === 'eventProp' ? 'event_attr' : item === null || item === void 0 ? void 0 : item.attrName,
|
|
123
|
+
category: (item === null || item === void 0 ? void 0 : item.category) || 'custom',
|
|
124
|
+
attrType: numAttrTypeMap[item === null || item === void 0 ? void 0 : item.type],
|
|
125
|
+
operator: item === null || item === void 0 ? void 0 : item.operator
|
|
126
|
+
};
|
|
127
|
+
})
|
|
128
|
+
};
|
|
129
|
+
}
|
|
130
|
+
function searchDataParams(params) {
|
|
131
|
+
var _params$time, _params$time2, _params$time3, _params$userGroup$, _params$dimension, _params$dimension2, _params$dimension3, _params$dimension4, _params$dimension5, _params$dimension6, _params$dimension7, _params$dimension8, _params$dimension9, _params$dimension10, _params$dimension11, _params$associatedPre, _params$associatedNex;
|
|
132
|
+
return {
|
|
133
|
+
time: {
|
|
134
|
+
dimension_date: params === null || params === void 0 ? void 0 : (_params$time = params.time) === null || _params$time === void 0 ? void 0 : _params$time.unit,
|
|
135
|
+
begin_date: params === null || params === void 0 ? void 0 : (_params$time2 = params.time) === null || _params$time2 === void 0 ? void 0 : _params$time2.begin,
|
|
136
|
+
end_date: params === null || params === void 0 ? void 0 : (_params$time3 = params.time) === null || _params$time3 === void 0 ? void 0 : _params$time3.end
|
|
137
|
+
},
|
|
138
|
+
user_group: (_params$userGroup$ = params.userGroup[0]) === null || _params$userGroup$ === void 0 ? void 0 : _params$userGroup$.id,
|
|
139
|
+
start: searchCondition(params === null || params === void 0 ? void 0 : params.start),
|
|
140
|
+
end: searchCondition(params === null || params === void 0 ? void 0 : params.end),
|
|
141
|
+
dimension: {
|
|
142
|
+
sub: (params === null || params === void 0 ? void 0 : (_params$dimension = params.dimension) === null || _params$dimension === void 0 ? void 0 : _params$dimension.propCategory) === 'userProp' ? 'user_attr' : (params === null || params === void 0 ? void 0 : (_params$dimension2 = params.dimension) === null || _params$dimension2 === void 0 ? void 0 : _params$dimension2.propCategory) === 'eventProp' ? 'event_attr' : params === null || params === void 0 ? void 0 : (_params$dimension3 = params.dimension) === null || _params$dimension3 === void 0 ? void 0 : _params$dimension3.name,
|
|
143
|
+
category: (params === null || params === void 0 ? void 0 : (_params$dimension4 = params.dimension) === null || _params$dimension4 === void 0 ? void 0 : _params$dimension4.category) || 'custom',
|
|
144
|
+
attr_id: params === null || params === void 0 ? void 0 : (_params$dimension5 = params.dimension) === null || _params$dimension5 === void 0 ? void 0 : _params$dimension5.id,
|
|
145
|
+
user_attr: (params === null || params === void 0 ? void 0 : (_params$dimension6 = params.dimension) === null || _params$dimension6 === void 0 ? void 0 : _params$dimension6.propCategory) === 'userProp' ? params === null || params === void 0 ? void 0 : (_params$dimension7 = params.dimension) === null || _params$dimension7 === void 0 ? void 0 : _params$dimension7.dimensionSub : null,
|
|
146
|
+
event_attr: (params === null || params === void 0 ? void 0 : (_params$dimension8 = params.dimension) === null || _params$dimension8 === void 0 ? void 0 : _params$dimension8.propCategory) === 'eventProp' ? params === null || params === void 0 ? void 0 : (_params$dimension9 = params.dimension) === null || _params$dimension9 === void 0 ? void 0 : _params$dimension9.label : null,
|
|
147
|
+
event: (params === null || params === void 0 ? void 0 : (_params$dimension10 = params.dimension) === null || _params$dimension10 === void 0 ? void 0 : _params$dimension10.propCategory) !== 'envProp' ? params === null || params === void 0 ? void 0 : (_params$dimension11 = params.dimension) === null || _params$dimension11 === void 0 ? void 0 : _params$dimension11.eventId : null
|
|
148
|
+
},
|
|
149
|
+
associated_pre_attr: params === null || params === void 0 ? void 0 : (_params$associatedPre = params.associatedPreAttr) === null || _params$associatedPre === void 0 ? void 0 : _params$associatedPre.id,
|
|
150
|
+
associated_next_attr: params === null || params === void 0 ? void 0 : (_params$associatedNex = params.associatedNextAttr) === null || _params$associatedNex === void 0 ? void 0 : _params$associatedNex.id
|
|
151
|
+
};
|
|
152
|
+
}
|
|
153
|
+
// 查询
|
|
154
|
+
var fetchRequest = function fetchRequest(flag) {
|
|
155
|
+
var _searchData$associate, _searchData$associate2, _searchData$associate3;
|
|
156
|
+
if (flag !== undefined) ajaxFlag = flag;
|
|
157
|
+
if (!ajaxFlag) return;
|
|
158
|
+
setLoading(true);
|
|
159
|
+
setEventData(undefined);
|
|
160
|
+
// 取消上次未完成的请求
|
|
161
|
+
if (typeof cancel === 'function') {
|
|
162
|
+
cancel();
|
|
163
|
+
}
|
|
164
|
+
if (searchData !== null && searchData !== void 0 && (_searchData$associate = searchData.associatedNextAttr) !== null && _searchData$associate !== void 0 && _searchData$associate.type && (searchData === null || searchData === void 0 ? void 0 : (_searchData$associate2 = searchData.associatedPreAttr) === null || _searchData$associate2 === void 0 ? void 0 : _searchData$associate2.type) !== (searchData === null || searchData === void 0 ? void 0 : (_searchData$associate3 = searchData.associatedNextAttr) === null || _searchData$associate3 === void 0 ? void 0 : _searchData$associate3.type)) {
|
|
165
|
+
return message.error('您查询的属性不一致,暂不支持查询');
|
|
166
|
+
}
|
|
167
|
+
var params = searchDataParams(searchData);
|
|
168
|
+
// const params = {
|
|
169
|
+
// app_id: 177,
|
|
170
|
+
// platform: 0,
|
|
171
|
+
// user_group: 0,
|
|
172
|
+
// time: { dimension_date: 'month', begin_date: '2023-05-01', end_date: '2023-08-29' },
|
|
173
|
+
// start: { operator: 'and', event_id: 16530, event_name: '查看商品A' },
|
|
174
|
+
// end: { operator: 'and', event_id: 16530, event_name: '查看商品A' },
|
|
175
|
+
// dimension: { sub: 'user_attr', category: 'fixed', user_attr: 'name' },
|
|
176
|
+
// };
|
|
177
|
+
console.log(666666, searchData, params);
|
|
178
|
+
props.onChange && props.onChange(searchData);
|
|
179
|
+
ajax(Apis.dataList, {
|
|
180
|
+
method: 'post',
|
|
181
|
+
data: _objectSpread({
|
|
182
|
+
app_id: currentApp === null || currentApp === void 0 ? void 0 : currentApp.appId,
|
|
183
|
+
platform: (currentApp === null || currentApp === void 0 ? void 0 : currentApp.platform) || 0
|
|
184
|
+
}, params),
|
|
185
|
+
cancelToken: new CancelToken(function executor(c) {
|
|
186
|
+
cancel = c;
|
|
187
|
+
})
|
|
188
|
+
}).then(function (res) {
|
|
189
|
+
if (!res) {
|
|
190
|
+
setLoading(false);
|
|
191
|
+
return;
|
|
192
|
+
}
|
|
193
|
+
var result = res.data;
|
|
194
|
+
setEventData(result);
|
|
195
|
+
setFinalSearchData(_objectSpread({}, searchData));
|
|
196
|
+
setTimeout(function () {
|
|
197
|
+
setLoading(false);
|
|
198
|
+
}, 0);
|
|
199
|
+
}).catch(function () {
|
|
200
|
+
setLoading(false);
|
|
201
|
+
});
|
|
202
|
+
};
|
|
203
|
+
|
|
204
|
+
// 改变时间和图表类型
|
|
205
|
+
var onChangeContent = function onChangeContent(data) {
|
|
206
|
+
ajaxFlag = true;
|
|
207
|
+
setSearchData(function (value) {
|
|
208
|
+
return _objectSpread(_objectSpread({}, value), data);
|
|
209
|
+
});
|
|
210
|
+
};
|
|
211
|
+
|
|
212
|
+
// 改变显示内容
|
|
213
|
+
var onChangeShow = function onChangeShow(data) {
|
|
214
|
+
setShowList(data);
|
|
215
|
+
};
|
|
216
|
+
|
|
217
|
+
// 平台变更
|
|
218
|
+
var platformChange = function platformChange(data) {
|
|
219
|
+
ajaxFlag = true;
|
|
220
|
+
setSearchData(function (_searchData) {
|
|
221
|
+
return _objectSpread(_objectSpread({}, _searchData), {}, {
|
|
222
|
+
platform: data
|
|
223
|
+
});
|
|
224
|
+
});
|
|
225
|
+
};
|
|
226
|
+
|
|
227
|
+
// TopPanel组件数值变更
|
|
228
|
+
var onChangeSearch = function onChangeSearch(data, flag) {
|
|
229
|
+
ajaxFlag = flag;
|
|
230
|
+
data.id ? setEventId(data.id) : setEventId(-1);
|
|
231
|
+
setSearchData(function (_searchData) {
|
|
232
|
+
return _objectSpread(_objectSpread({}, _searchData), data);
|
|
233
|
+
});
|
|
234
|
+
};
|
|
235
|
+
return /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement(TopBar, {
|
|
236
|
+
searchData: searchData,
|
|
237
|
+
platformChange: platformChange
|
|
238
|
+
}), /*#__PURE__*/React.createElement(BizLayout, {
|
|
239
|
+
showTitle: false,
|
|
240
|
+
hasCollapse: true,
|
|
241
|
+
collapseRef: collapseRef,
|
|
242
|
+
topPanel: /*#__PURE__*/React.createElement("div", {
|
|
243
|
+
ref: collapseRef
|
|
244
|
+
}, /*#__PURE__*/React.createElement(TopPanel, {
|
|
245
|
+
onChange: onChangeSearch,
|
|
246
|
+
defaultValue: searchData,
|
|
247
|
+
ajaxFlag: ajaxFlag,
|
|
248
|
+
finalSearchData: finalSearchData,
|
|
249
|
+
fetchRequest: fetchRequest
|
|
250
|
+
}))
|
|
251
|
+
}, /*#__PURE__*/React.createElement("div", {
|
|
252
|
+
className: classPrefix
|
|
253
|
+
}, /*#__PURE__*/React.createElement(SearchPanel, {
|
|
254
|
+
chartType: searchData === null || searchData === void 0 ? void 0 : searchData.chartType,
|
|
255
|
+
time: searchData === null || searchData === void 0 ? void 0 : searchData.time,
|
|
256
|
+
analysisAttr: searchData === null || searchData === void 0 ? void 0 : searchData.analysisAttr,
|
|
257
|
+
displaySetup: searchData === null || searchData === void 0 ? void 0 : searchData.analysisAttr,
|
|
258
|
+
analysisIndex: searchData === null || searchData === void 0 ? void 0 : searchData.analysisIndex,
|
|
259
|
+
eventId: eventId,
|
|
260
|
+
eventData: eventData,
|
|
261
|
+
enableSelectChart: enableSelectChart,
|
|
262
|
+
onChange: onChangeContent
|
|
263
|
+
}), /*#__PURE__*/React.createElement(ContentPanel, {
|
|
264
|
+
loading: loading,
|
|
265
|
+
isCity: isCity,
|
|
266
|
+
eventData: eventData,
|
|
267
|
+
searchData: finalSearchData,
|
|
268
|
+
showList: showList,
|
|
269
|
+
onChangeShow: onChangeShow
|
|
270
|
+
}))));
|
|
271
|
+
};
|
|
272
|
+
export default EventContent;
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
import { SearchValue } from '../../types';
|
|
2
|
+
export declare namespace EventContentProps {
|
|
3
|
+
interface Props {
|
|
4
|
+
/**
|
|
5
|
+
* 回显值
|
|
6
|
+
*/
|
|
7
|
+
defaultValue?: SearchValue;
|
|
8
|
+
/**
|
|
9
|
+
* 默认值
|
|
10
|
+
*/
|
|
11
|
+
value: SearchValue;
|
|
12
|
+
/**
|
|
13
|
+
* 展示列表
|
|
14
|
+
*/
|
|
15
|
+
show?: string[];
|
|
16
|
+
/**
|
|
17
|
+
* 是否查询中
|
|
18
|
+
*/
|
|
19
|
+
onSearching?: (flag: boolean) => void;
|
|
20
|
+
/**
|
|
21
|
+
* 查询条件回调
|
|
22
|
+
*/
|
|
23
|
+
onChange?: (data: SearchValue) => void;
|
|
24
|
+
/**
|
|
25
|
+
* 查询条件初始化
|
|
26
|
+
*/
|
|
27
|
+
initSearch?: () => void;
|
|
28
|
+
}
|
|
29
|
+
}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import { AttributeSelect } from '@zgfe/business-lib';
|
|
2
|
+
import { bizAttributeSelectorValueProp } from '../../types';
|
|
3
|
+
import { EventGroup, UserProp, EnvProp } from '@zgfe/business-lib/es/attributeSelector/types';
|
|
4
|
+
/**
|
|
5
|
+
* 判断当前细分属性是否为”城市“
|
|
6
|
+
* @param name 属性名称
|
|
7
|
+
* @returns true标识为:是城市
|
|
8
|
+
*/
|
|
9
|
+
export declare const judgeIsCity: (name: string | undefined) => boolean;
|
|
10
|
+
/**
|
|
11
|
+
* 判断当前细分属性,地图是否可选
|
|
12
|
+
* @param name 属性名称
|
|
13
|
+
* @returns true标识为:地图可选
|
|
14
|
+
*/
|
|
15
|
+
export declare const judgeIsArea: (name: string | undefined) => boolean;
|
|
16
|
+
/**
|
|
17
|
+
* 获取当前属性的全部数据
|
|
18
|
+
* @param param 属性的部分数据
|
|
19
|
+
* @returns 属性的全部数据
|
|
20
|
+
*/
|
|
21
|
+
export declare const getValue: (param: bizAttributeSelectorValueProp, eventGroupList: EventGroup[] | undefined, eventEnvList: EnvProp[] | undefined, userPropList: UserProp[] | undefined) => AttributeSelect.Value | undefined;
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* 判断当前细分属性是否为”城市“
|
|
3
|
+
* @param name 属性名称
|
|
4
|
+
* @returns true标识为:是城市
|
|
5
|
+
*/
|
|
6
|
+
export var judgeIsCity = function judgeIsCity(name) {
|
|
7
|
+
var areaData = ['current_city', 'city'];
|
|
8
|
+
return name && areaData.indexOf(name) !== -1 ? true : false;
|
|
9
|
+
};
|
|
10
|
+
|
|
11
|
+
/**
|
|
12
|
+
* 判断当前细分属性,地图是否可选
|
|
13
|
+
* @param name 属性名称
|
|
14
|
+
* @returns true标识为:地图可选
|
|
15
|
+
*/
|
|
16
|
+
export var judgeIsArea = function judgeIsArea(name) {
|
|
17
|
+
var areaData = ['current_area', 'current_city', 'area', 'city'];
|
|
18
|
+
return name && areaData.indexOf(name) !== -1 ? true : false;
|
|
19
|
+
};
|
|
20
|
+
|
|
21
|
+
/**
|
|
22
|
+
* 获取当前属性的全部数据
|
|
23
|
+
* @param param 属性的部分数据
|
|
24
|
+
* @returns 属性的全部数据
|
|
25
|
+
*/
|
|
26
|
+
export var getValue = function getValue(param, eventGroupList, eventEnvList, userPropList) {
|
|
27
|
+
var res = undefined;
|
|
28
|
+
// 数据key
|
|
29
|
+
var key = param.propCategory === 'eventProp' ? param.value : param.propCategory + '-' + param.value;
|
|
30
|
+
// console.log('数据key', key, param, eventGroupList, eventEnvList, userPropList);
|
|
31
|
+
if ((param === null || param === void 0 ? void 0 : param.propCategory) === 'envProp') {
|
|
32
|
+
eventEnvList === null || eventEnvList === void 0 ? void 0 : eventEnvList.forEach(function (attr) {
|
|
33
|
+
if (attr.key === key) res = attr;
|
|
34
|
+
});
|
|
35
|
+
} else if ((param === null || param === void 0 ? void 0 : param.propCategory) === 'eventProp') {
|
|
36
|
+
eventGroupList === null || eventGroupList === void 0 ? void 0 : eventGroupList.forEach(function (group) {
|
|
37
|
+
group.eventList.forEach(function (event) {
|
|
38
|
+
event.attrList.forEach(function (attr) {
|
|
39
|
+
if (attr.key === key) res = attr;
|
|
40
|
+
});
|
|
41
|
+
});
|
|
42
|
+
});
|
|
43
|
+
} else if ((param === null || param === void 0 ? void 0 : param.propCategory) === 'userProp') {
|
|
44
|
+
userPropList === null || userPropList === void 0 ? void 0 : userPropList.forEach(function (attr) {
|
|
45
|
+
// 用户属性需判断category,解决用户自定义属性与内置属性重名
|
|
46
|
+
if (attr.key === key) res = attr;
|
|
47
|
+
});
|
|
48
|
+
}
|
|
49
|
+
console.log('获取当前属性的全部数据', res);
|
|
50
|
+
return res;
|
|
51
|
+
};
|