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.
@@ -1,71 +1,50 @@
1
1
  <template>
2
- <div class="global-layout">
3
- <lw-search v-if="searchOptions.length > 0"
4
- class="search-body"
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
- :col-num="12"
13
- :row-height="30"
14
- :is-draggable="designMode"
15
- :is-resizable="designMode"
16
- :use-css-transforms="false"
17
- vertical-compact
18
- use-css-transforms>
19
- <GridItem v-for="(item, index) in chartList"
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
- v-if="Object.keys(item.data?.setting?.optionalDateUnitRanges).length == 0">未选择周期列表</el-radio-button>
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
- :height="item.data?.setting?.activeDateUnitFilter ? 'calc(100% - 36px)' : '100%'" />
41
- <div class="remove"
42
- v-if="designMode"
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: 400px;
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
- .global-layout-item {
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
- <div ref="" class="mobile-nav-button" @click="showMobileNav($event)" v-drag draggable="false"><el-icon><el-icon-menu /></el-icon></div>
3
-
4
- <el-drawer ref="mobileNavBox" title="移动端菜单" :size="240" v-model="nav" direction="ltr" :with-header="false" destroy-on-close>
5
- <el-container class="mobile-nav">
6
- <el-header>
7
- <div class="logo-bar"><img class="logo" src="../../../assets/images/logo.svg"><span>{{ $config.APP_NAME }}</span></div>
8
- </el-header>
9
- <el-main>
10
- <el-scrollbar>
11
- <el-menu :default-active="$route.meta.active || $route.fullPath" @select="select" router background-color="#212d3d" text-color="#fff" active-text-color="#409EFF">
12
- <NavMenu :navMenus="menu"></NavMenu>
13
- </el-menu>
14
- </el-scrollbar>
15
- </el-main>
16
- </el-container>
17
- </el-drawer>
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
- import NavMenu from './NavMenu.vue';
23
- export default {
24
- components: {
25
- NavMenu
26
- },
27
- data() {
28
- return {
29
- nav: false,
30
- menu: []
31
- }
32
- },
33
- computed:{
34
-
35
- },
36
- created() {
37
- var menu = this.$router.sc_getMenu()
38
- this.menu = this.filterUrl(menu)
39
- },
40
-
41
- watch: {
42
-
43
- },
44
- methods: {
45
- showMobileNav(e){
46
- var isdrag = e.currentTarget.getAttribute('drag-flag')
47
- if (isdrag == 'true') {
48
- return false;
49
- }else{
50
- this.nav = true;
51
- }
52
-
53
- },
54
- select(){
55
- this.$refs.mobileNavBox.handleClose()
56
- },
57
- //转换外部链接的路由
58
- filterUrl(map){
59
- var newMap = []
60
- map && map.forEach(item => {
61
- item.meta = item.meta?item.meta:{};
62
- //处理隐藏
63
- if(item.meta.hidden || item.meta.type=="button"){
64
- return false
65
- }
66
- //处理http
67
- if(item.meta.type=='iframe'){
68
- item.path = `/i/${item.name}`;
69
- }
70
- //递归循环
71
- if(item.children&&item.children.length > 0){
72
- item.children = this.filterUrl(item.children);
73
- }
74
- newMap.push(item)
75
- })
76
- return newMap;
77
- }
78
- },
79
- directives: {
80
- drag(el){
81
- let oDiv = el; //当前元素
82
- let firstTime='',lastTime='';
83
- //禁止选择网页上的文字
84
- // document.onselectstart = function() {
85
- // return false;
86
- // };
87
- oDiv.onmousedown = function(e){
88
- //鼠标按下,计算当前元素距离可视区的距离
89
- let disX = e.clientX - oDiv.offsetLeft;
90
- let disY = e.clientY - oDiv.offsetTop;
91
- document.onmousemove = function(e){
92
- oDiv.setAttribute('drag-flag', true);
93
- firstTime = new Date().getTime();
94
- //通过事件委托,计算移动的距离
95
- let l = e.clientX - disX;
96
- let t = e.clientY - disY;
97
-
98
- //移动当前元素
99
-
100
- if(t > 0 && t < document.body.clientHeight - 50){
101
- oDiv.style.top = t + "px";
102
- }
103
- if(l > 0 && l < document.body.clientWidth - 50){
104
- oDiv.style.left = l + "px";
105
- }
106
-
107
-
108
- }
109
- document.onmouseup = function(){
110
- lastTime = new Date().getTime();
111
- if( (lastTime - firstTime)>200 ){
112
- oDiv.setAttribute('drag-flag', false);
113
- }
114
- document.onmousemove = null;
115
- document.onmouseup = null;
116
- };
117
- //return false不加的话可能导致黏连,就是拖到一个地方时div粘在鼠标上不下来,相当于onmouseup失效
118
- return false;
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
- .mobile-nav-button {position: fixed;bottom:10px;left:10px;z-index: 10;width: 50px;height: 50px;background: #409EFF;box-shadow: 0 2px 12px 0 rgba(64, 158, 255, 1);border-radius: 50%;display: flex;align-items: center;justify-content: center;}
127
- .mobile-nav-button i {color: #fff;font-size: 20px;}
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
- .mobile-nav {background: #212d3d;}
130
- .mobile-nav .el-header {background: transparent;border: 0;}
131
- .mobile-nav .el-main {padding:0;}
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>