lw-cdp-ui 1.4.12 → 1.4.13
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/dist/components/lwBiChart/page.vue +52 -51
- package/dist/components/lwLayout/components/sideM.vue +176 -126
- package/dist/components/lwTour/index.vue +90 -90
- package/dist/lw-cdp-ui.esm.js +2488 -2480
- package/dist/lw-cdp-ui.umd.js +13 -13
- package/dist/style.css +1 -1
- package/package.json +1 -1
|
@@ -1,71 +1,50 @@
|
|
|
1
1
|
<template>
|
|
2
|
-
<div class="global-layout">
|
|
3
|
-
<lw-search v-if="searchOptions.length > 0"
|
|
4
|
-
|
|
5
|
-
:options="searchOptions"
|
|
6
|
-
v-model="searchParams"
|
|
7
|
-
:hideLabel="true"
|
|
8
|
-
@search="search"
|
|
9
|
-
@reset="reset" />
|
|
2
|
+
<div class="lw-bi-chart-global-layout">
|
|
3
|
+
<lw-search v-if="searchOptions.length > 0" class="search-body" :options="searchOptions" v-model="searchParams"
|
|
4
|
+
:hideLabel="true" @search="search" @reset="reset" />
|
|
10
5
|
|
|
11
|
-
<GridLayout v-model:layout="chartList"
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
:key="item.i"
|
|
21
|
-
:x="item.x"
|
|
22
|
-
:y="item.y"
|
|
23
|
-
:w="item.w"
|
|
24
|
-
:h="item.h"
|
|
25
|
-
:i="item.i">
|
|
26
|
-
<div class="global-layout-item"
|
|
27
|
-
:class="{edit: designMode}">
|
|
28
|
-
<div v-if="item.data?.setting?.activeDateUnitFilter"
|
|
29
|
-
class="filter-top">
|
|
30
|
-
<el-radio-group v-model="item.timeUnit"
|
|
31
|
-
@change="changeTimeUnit(item, index)">
|
|
32
|
-
<el-radio-button :label="key"
|
|
33
|
-
:value="value"
|
|
34
|
-
v-for="(value, key) in item.data?.setting?.optionalDateUnitRanges" />
|
|
6
|
+
<GridLayout v-model:layout="chartList" :col-num="12" :row-height="30" :is-draggable="designMode"
|
|
7
|
+
:is-resizable="designMode" :use-css-transforms="false" vertical-compact use-css-transforms>
|
|
8
|
+
<GridItem v-for="(item, index) in chartList" :key="item.i" :x="item.x" :y="item.y" :w="item.w" :h="item.h"
|
|
9
|
+
:i="item.i">
|
|
10
|
+
<div class="lw-bi-chart-global-layout-item" :class="{ edit: designMode }">
|
|
11
|
+
<div v-if="item.data?.setting?.activeDateUnitFilter" class="filter-top">
|
|
12
|
+
<el-radio-group v-model="item.timeUnit" @change="changeTimeUnit(item, index)">
|
|
13
|
+
<el-radio-button :label="key" :value="value"
|
|
14
|
+
v-for="(value, key) in item.data?.setting?.optionalDateUnitRanges" />
|
|
35
15
|
<el-radio-button disabled
|
|
36
|
-
|
|
16
|
+
v-if="Object.keys(item.data?.setting?.optionalDateUnitRanges).length == 0">未选择周期列表</el-radio-button>
|
|
37
17
|
</el-radio-group>
|
|
38
18
|
</div>
|
|
19
|
+
|
|
20
|
+
<div v-if="item?.type == 'Dashboard'" class="grid-item-dashboard">
|
|
21
|
+
<lwBiChartPage :chartId="item.id" />
|
|
22
|
+
</div>
|
|
39
23
|
<lwBiChartItem :rawData="item.data"
|
|
40
|
-
|
|
41
|
-
<div class="remove"
|
|
42
|
-
|
|
43
|
-
@click="removeChart(index)">
|
|
44
|
-
<el-button type="primary"
|
|
45
|
-
link
|
|
46
|
-
icon="el-icon-delete"></el-button>
|
|
24
|
+
:height="item.data?.setting?.activeDateUnitFilter ? 'calc(100% - 36px)' : '100%'" />
|
|
25
|
+
<div class="remove" v-if="designMode" @click="removeChart(index)">
|
|
26
|
+
<el-button type="primary" link icon="el-icon-delete"></el-button>
|
|
47
27
|
</div>
|
|
48
28
|
</div>
|
|
49
29
|
|
|
50
30
|
</GridItem>
|
|
51
31
|
</GridLayout>
|
|
52
|
-
<div class="no-record-panel e-unselect"
|
|
53
|
-
v-if="chartList.length===0">
|
|
32
|
+
<div class="no-record-panel e-unselect" v-if="chartList.length === 0">
|
|
54
33
|
<el-empty :description="designMode ? '点击上方工具栏中的按钮,添加图表至当前仪表板' : '仪表板中还没有添加任何图表'" />
|
|
55
34
|
</div>
|
|
56
35
|
</div>
|
|
57
36
|
</template>
|
|
58
37
|
|
|
59
38
|
<script>
|
|
60
|
-
import {GridLayout, GridItem} from 'grid-layout-plus'
|
|
39
|
+
import { GridLayout, GridItem } from 'grid-layout-plus'
|
|
61
40
|
export default {
|
|
62
|
-
components: {GridLayout, GridItem},
|
|
41
|
+
components: { GridLayout, GridItem },
|
|
63
42
|
data() {
|
|
64
43
|
return {
|
|
65
44
|
id: '',
|
|
66
45
|
searchOptions: [],
|
|
67
46
|
chartList: [],
|
|
68
|
-
globalFilter: {values: {}, ranges: {}},
|
|
47
|
+
globalFilter: { values: {}, ranges: {} },
|
|
69
48
|
searchParams: {}
|
|
70
49
|
}
|
|
71
50
|
},
|
|
@@ -98,7 +77,7 @@ export default {
|
|
|
98
77
|
this.getFilter(res.filterControls)
|
|
99
78
|
},
|
|
100
79
|
async changeTimeUnit(chartItem, index) {
|
|
101
|
-
let {data, ...chartData} = chartItem
|
|
80
|
+
let { data, ...chartData } = chartItem
|
|
102
81
|
let visualize = await this.$http.get(
|
|
103
82
|
`${this.$config.API_URL}/bi-manage/{tenantId}/{buCode}/visualize/${chartData.id}`
|
|
104
83
|
)
|
|
@@ -166,11 +145,11 @@ export default {
|
|
|
166
145
|
this.getChartList(this.globalFilter)
|
|
167
146
|
},
|
|
168
147
|
reset() {
|
|
169
|
-
this.getChartList({values: {}, ranges: {}})
|
|
148
|
+
this.getChartList({ values: {}, ranges: {} })
|
|
170
149
|
},
|
|
171
150
|
async getChartList(globalFilter = {}) {
|
|
172
151
|
let params = {
|
|
173
|
-
charts: this.chartList.map(({data, ...item}) => item),
|
|
152
|
+
charts: this.chartList.map(({ data, ...item }) => item),
|
|
174
153
|
globalFilter
|
|
175
154
|
}
|
|
176
155
|
this.chartList = await this.$http.post(
|
|
@@ -241,25 +220,29 @@ export default {
|
|
|
241
220
|
</script>
|
|
242
221
|
|
|
243
222
|
<style lang="scss" scoped>
|
|
244
|
-
.global-layout {
|
|
223
|
+
.lw-bi-chart-global-layout {
|
|
245
224
|
width: calc(100% + 30px);
|
|
246
|
-
min-height:
|
|
225
|
+
min-height: 200px;
|
|
247
226
|
margin: -15px -15px 0;
|
|
227
|
+
|
|
248
228
|
:deep(.vgl-layout) {
|
|
249
229
|
width: 100%;
|
|
250
230
|
height: 100%;
|
|
251
231
|
}
|
|
232
|
+
|
|
252
233
|
.search-body {
|
|
253
234
|
width: calc(100% - 20px);
|
|
254
235
|
margin: 10px auto -10px;
|
|
255
236
|
}
|
|
256
|
-
|
|
237
|
+
|
|
238
|
+
.lw-bi-chart-global-layout-item {
|
|
257
239
|
height: 100%;
|
|
258
240
|
width: 100%;
|
|
259
241
|
position: relative;
|
|
260
242
|
display: flex;
|
|
261
243
|
flex-wrap: wrap;
|
|
262
244
|
gap: 9px;
|
|
245
|
+
|
|
263
246
|
.remove {
|
|
264
247
|
position: absolute;
|
|
265
248
|
right: 2px;
|
|
@@ -268,8 +251,10 @@ export default {
|
|
|
268
251
|
line-height: 10px;
|
|
269
252
|
background-color: rgba($color: #ffffff, $alpha: 0.8);
|
|
270
253
|
}
|
|
254
|
+
|
|
271
255
|
&.edit {
|
|
272
256
|
border: 1px solid var(--el-fill-color);
|
|
257
|
+
|
|
273
258
|
:deep(.chart-title-card) {
|
|
274
259
|
background-color: transparent;
|
|
275
260
|
box-shadow: 0 0 0;
|
|
@@ -282,10 +267,26 @@ export default {
|
|
|
282
267
|
margin-bottom: -5px;
|
|
283
268
|
}
|
|
284
269
|
}
|
|
270
|
+
|
|
285
271
|
.no-record-panel {
|
|
286
272
|
width: 100%;
|
|
287
273
|
padding: 100px;
|
|
288
274
|
text-align: center;
|
|
289
275
|
}
|
|
276
|
+
|
|
277
|
+
.grid-item-dashboard {
|
|
278
|
+
width: 100%;
|
|
279
|
+
padding: 15px 15px 0 15px;
|
|
280
|
+
background-color: var(--el-bg-color-overlay);
|
|
281
|
+
box-shadow: 0 0 30px #0000000d;
|
|
282
|
+
|
|
283
|
+
:deep(.chart) {
|
|
284
|
+
box-shadow: 0 0 0 !important;
|
|
285
|
+
}
|
|
286
|
+
|
|
287
|
+
:deep(.chart-title-card) {
|
|
288
|
+
box-shadow: 0 0 0 !important;
|
|
289
|
+
}
|
|
290
|
+
}
|
|
290
291
|
}
|
|
291
292
|
</style>
|
|
@@ -1,135 +1,185 @@
|
|
|
1
1
|
<template>
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
2
|
+
<div ref="" class="mobile-nav-button" @click="showMobileNav($event)" v-drag draggable="false">
|
|
3
|
+
<el-icon><el-icon-menu /></el-icon>
|
|
4
|
+
</div>
|
|
5
|
+
|
|
6
|
+
<el-drawer ref="mobileNavBox" title="移动端菜单" :size="240" v-model="nav" direction="ltr" :with-header="false"
|
|
7
|
+
destroy-on-close>
|
|
8
|
+
<el-container class="mobile-nav">
|
|
9
|
+
<el-header>
|
|
10
|
+
<div class="logo-bar"><img class="logo" src="../../../assets/images/logo.svg"><span>{{ $config.APP_NAME
|
|
11
|
+
}}</span></div>
|
|
12
|
+
</el-header>
|
|
13
|
+
<el-main>
|
|
14
|
+
<el-scrollbar>
|
|
15
|
+
<el-menu :default-active="$route.meta.active || $route.fullPath" @select="select" router
|
|
16
|
+
background-color="#212d3d" text-color="#fff" active-text-color="#409EFF">
|
|
17
|
+
<NavMenu :navMenus="menu"></NavMenu>
|
|
18
|
+
</el-menu>
|
|
19
|
+
</el-scrollbar>
|
|
20
|
+
</el-main>
|
|
21
|
+
</el-container>
|
|
22
|
+
</el-drawer>
|
|
18
23
|
|
|
19
24
|
</template>
|
|
20
25
|
|
|
21
26
|
<script>
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
27
|
+
import NavMenu from './NavMenu.vue';
|
|
28
|
+
export default {
|
|
29
|
+
components: {
|
|
30
|
+
NavMenu
|
|
31
|
+
},
|
|
32
|
+
data() {
|
|
33
|
+
return {
|
|
34
|
+
nav: false,
|
|
35
|
+
menu: []
|
|
36
|
+
}
|
|
37
|
+
},
|
|
38
|
+
computed: {
|
|
39
|
+
|
|
40
|
+
},
|
|
41
|
+
created() {
|
|
42
|
+
var menu = this.$router.sc_getMenu()
|
|
43
|
+
this.menu = this.filterUrl(menu)
|
|
44
|
+
},
|
|
45
|
+
|
|
46
|
+
watch: {
|
|
47
|
+
|
|
48
|
+
},
|
|
49
|
+
methods: {
|
|
50
|
+
showMobileNav(e) {
|
|
51
|
+
var isdrag = e.currentTarget.getAttribute('drag-flag')
|
|
52
|
+
if (isdrag == 'true') {
|
|
53
|
+
return false;
|
|
54
|
+
} else {
|
|
55
|
+
this.nav = true;
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
},
|
|
59
|
+
select() {
|
|
60
|
+
this.$refs.mobileNavBox.handleClose()
|
|
61
|
+
},
|
|
62
|
+
//转换外部链接的路由
|
|
63
|
+
filterUrl(map) {
|
|
64
|
+
var newMap = []
|
|
65
|
+
map && map.forEach(item => {
|
|
66
|
+
item.meta = item.meta ? item.meta : {};
|
|
67
|
+
//处理隐藏
|
|
68
|
+
if (item.meta.hidden || item.meta.type == "button") {
|
|
69
|
+
return false
|
|
70
|
+
}
|
|
71
|
+
//处理http
|
|
72
|
+
if (item.meta.type == 'iframe') {
|
|
73
|
+
item.path = `/i/${item.name}`;
|
|
74
|
+
}
|
|
75
|
+
//递归循环
|
|
76
|
+
if (item.children && item.children.length > 0) {
|
|
77
|
+
item.children = this.filterUrl(item.children);
|
|
78
|
+
}
|
|
79
|
+
newMap.push(item)
|
|
80
|
+
})
|
|
81
|
+
return newMap;
|
|
82
|
+
}
|
|
83
|
+
},
|
|
84
|
+
directives: {
|
|
85
|
+
drag(el) {
|
|
86
|
+
let oDiv = el; //当前元素
|
|
87
|
+
let firstTime = '', lastTime = '';
|
|
88
|
+
//禁止选择网页上的文字
|
|
89
|
+
// document.onselectstart = function() {
|
|
90
|
+
// return false;
|
|
91
|
+
// };
|
|
92
|
+
oDiv.onmousedown = function (e) {
|
|
93
|
+
//鼠标按下,计算当前元素距离可视区的距离
|
|
94
|
+
let disX = e.clientX - oDiv.offsetLeft;
|
|
95
|
+
let disY = e.clientY - oDiv.offsetTop;
|
|
96
|
+
document.onmousemove = function (e) {
|
|
97
|
+
oDiv.setAttribute('drag-flag', true);
|
|
98
|
+
firstTime = new Date().getTime();
|
|
99
|
+
//通过事件委托,计算移动的距离
|
|
100
|
+
let l = e.clientX - disX;
|
|
101
|
+
let t = e.clientY - disY;
|
|
102
|
+
|
|
103
|
+
//移动当前元素
|
|
104
|
+
|
|
105
|
+
if (t > 0 && t < document.body.clientHeight - 50) {
|
|
106
|
+
oDiv.style.top = t + "px";
|
|
107
|
+
}
|
|
108
|
+
if (l > 0 && l < document.body.clientWidth - 50) {
|
|
109
|
+
oDiv.style.left = l + "px";
|
|
110
|
+
}
|
|
111
|
+
|
|
112
|
+
|
|
113
|
+
}
|
|
114
|
+
document.onmouseup = function () {
|
|
115
|
+
lastTime = new Date().getTime();
|
|
116
|
+
if ((lastTime - firstTime) > 200) {
|
|
117
|
+
oDiv.setAttribute('drag-flag', false);
|
|
118
|
+
}
|
|
119
|
+
document.onmousemove = null;
|
|
120
|
+
document.onmouseup = null;
|
|
121
|
+
};
|
|
122
|
+
//return false不加的话可能导致黏连,就是拖到一个地方时div粘在鼠标上不下来,相当于onmouseup失效
|
|
123
|
+
return false;
|
|
124
|
+
};
|
|
125
|
+
}
|
|
126
|
+
}
|
|
127
|
+
}
|
|
123
128
|
</script>
|
|
124
129
|
|
|
125
|
-
<style scoped>
|
|
126
|
-
|
|
127
|
-
|
|
130
|
+
<style scoped lang="scss">
|
|
131
|
+
.mobile-nav-button {
|
|
132
|
+
position: fixed;
|
|
133
|
+
bottom: 10px;
|
|
134
|
+
left: 10px;
|
|
135
|
+
z-index: 10;
|
|
136
|
+
width: 50px;
|
|
137
|
+
height: 50px;
|
|
138
|
+
background: var(--el-color-primary);
|
|
139
|
+
box-shadow: 0 2px 12px 0 var(--el-color-primary);
|
|
140
|
+
border-radius: 50%;
|
|
141
|
+
display: flex;
|
|
142
|
+
align-items: center;
|
|
143
|
+
justify-content: center;
|
|
144
|
+
}
|
|
145
|
+
|
|
146
|
+
:deep(.el-menu-item.is-active) {
|
|
147
|
+
color: var(--el-color-primary);
|
|
148
|
+
}
|
|
149
|
+
|
|
150
|
+
.mobile-nav-button i {
|
|
151
|
+
color: #fff;
|
|
152
|
+
font-size: 20px;
|
|
153
|
+
}
|
|
154
|
+
|
|
155
|
+
.mobile-nav {
|
|
156
|
+
background: #212d3d;
|
|
157
|
+
}
|
|
158
|
+
|
|
159
|
+
.mobile-nav .el-header {
|
|
160
|
+
background: transparent;
|
|
161
|
+
border: 0;
|
|
162
|
+
}
|
|
163
|
+
|
|
164
|
+
.mobile-nav .el-main {
|
|
165
|
+
padding: 0;
|
|
166
|
+
background: #212d3d;
|
|
167
|
+
}
|
|
168
|
+
|
|
169
|
+
.mobile-nav .logo-bar {
|
|
170
|
+
display: flex;
|
|
171
|
+
align-items: center;
|
|
172
|
+
font-weight: bold;
|
|
173
|
+
font-size: 20px;
|
|
174
|
+
color: #fff;
|
|
175
|
+
}
|
|
176
|
+
|
|
177
|
+
.mobile-nav .logo-bar img {
|
|
178
|
+
width: 30px;
|
|
179
|
+
margin-right: 10px;
|
|
180
|
+
}
|
|
128
181
|
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
.mobile-nav .logo-bar {display: flex;align-items: center;font-weight: bold;font-size: 20px;color: #fff;}
|
|
133
|
-
.mobile-nav .logo-bar img {width: 30px;margin-right: 10px;}
|
|
134
|
-
.mobile-nav .el-submenu__title:hover {background: #fff!important;}
|
|
182
|
+
.mobile-nav .el-submenu__title:hover {
|
|
183
|
+
background: #fff !important;
|
|
184
|
+
}
|
|
135
185
|
</style>
|