commonWeight.js
9.01 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
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
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
import {mapGetters} from "vuex"
export default {
data() {
return {
options: {},
optionsSetUp: {},
optionsPosition: {},
optionsData: {},
id: (new Date()).getTime(),
customState: {},
// value 历史变更内容,页面加载发送多次重复提交信息
valueChangeArr:[]
}
},
props: {
config: Object,
value: Object,
ispreview: Boolean
},
watch: {
/**
* 监听组件参数
*/
value: {
handler(val) {
let that = this;
if(that.valueChangeArr.indexOf(val) != -1){
return;
}
that.options = val;
that.optionsSetUp = val.setup;
that.optionsPosition = val.position;
that.valueChangeArr.push(val);
that.reloadPage();
},
deep: true
},
/**
* 监听组件状态数据
*/
getLastUpdateEvent: {
handler(val) {
if(!val){
return;
}
let that = this;
let key = val.split('###')[0];
let obj = that.getCustomState[key];
let eventIds = that.subEvent();
if(eventIds && typeof [] === 'object' && eventIds.length > 0){
if(eventIds.indexOf(key) != -1){
that.getCustomEventData(key,obj);
}
}
},
deep: true
}
},
mounted() {
let that = this;
that.options = that.value;
that.optionsSetUp = that.value.setup;
that.optionsPosition = that.value.position;
// 挂在完 执行页面初始化函数
that.pageInit();
},
computed: {
...mapGetters(['getCustomState','getLastUpdateEventId']),
/**
* 最后更新的事件id
* @returns {number}
*/
getLastUpdateEvent(){
return this.getLastUpdateEventId
},
// 计算样式
getStyle() {
let that = this;
// 位置信息
const position = this.optionsPosition;
let css = {};
let baseCss = {}
if (position && Object.keys(position).length > 0) {
baseCss = {
position: this.ispreview ? "absolute" : "static",
width: position.width + "px",
height: position.height + "px",
left: position.left + "px",
top: position.top + "px"
};
}
// 属性信息
const setup = that.optionsSetUp;
const config = that.config;
const items = [];
if (config && config.setup) {
let setupArr = config.setup;
setupArr.forEach(function (v) {
if (Array.isArray(v)) {
v.forEach(function (v1) {
if (v1.list) {
v1.list.forEach(function (v2) {
items.push(v2);
})
}
})
} else {
items.push(v);
}
});
}
for (const key in setup) {
let arr = items.filter(function (v) {
if (v.name == key) {
return v
}
})
if (arr && arr.length == 1) {
let val = setup[key];
// css模板
let cssTemplate = arr[0].cssTemplate;
// css 分组
let cssGroup = arr[0].cssGroup;
if (cssTemplate) {
let split = cssTemplate.replace("%s", val).split(":");
if (cssGroup) {
if (!css[cssGroup]) {
css[cssGroup] = baseCss;
}
css[cssGroup][split[0]] = split[1];
} else {
if (Object.keys(css).length == 0) {
css = baseCss;
}
css[split[0]] = split[1];
}
}
}
}
return css;
}
},
methods: {
/**
* 页面初始化
*/
pageInit() {
console.log("页面初始化,如需自定义,需要定义函数:pageInit()")
},
/**
* 页面重新加载
*/
reloadPage() {
console.log("页面重新加载函数,如需自定义,需要定义函数:reloadPage()")
},
/**
* 订阅事件
*/
subEvent(){
console.log("页面订阅事件id集合,如需自定义,需要定义函数:subEvent()")
return [];
},
/**
* 获取订阅事件的数据
* @param eventId 事件Id
* @param data 数据
*/
getCustomEventData(eventId, data) {
console.log("组件状态订阅事件数据,如需自定义,需要定义函数:getCustomEventData(事件Id,事件数据)")
console.log(`事件ID:${eventId},事件数据:`,JSON.stringify(data));
},
/**
* 推送事件数据
*/
pushEventData(evebtId, obj) {
let data = {
eventId: evebtId,
data: obj
}
this.$store.dispatch('customEventAction', data);
},
/**
* 字符串转换函数
*/
toFunc(funStr){
return new Function(`return ${funStr}`)();
},
/**
* 执行js字符串函数,返回Boolean值,错误返回false
* @param funStr js函数字符串
* @returns {*}
*/
runJSFunc(funStr, params) {
try {
var dom = this.toFunc(funStr);
return dom && dom(params);
} catch (e) {
console.error(e)
}
return undefined;
},
/**
* 获取配置项的默认值
*/
getOptionDefaultValue(name) {
let that = this;
if (!name) {
return undefined;
}
let arr = that.config.setup.filter(function (v) {
if (v.name == name) {
return v
}
})
if (arr && arr.length == 1) {
return arr[0].value;
}
return undefined;
},
/**
* 获取x天后的日期
* @param day
* @returns {string} yyyy-MM-mm
*/
getOffsetDate(day) {
var doHandMonth = (month) => {
var m = month
if (month.toString().length == 1) {
m = "0" + month
}
return m
}
var today = new Date()
var targetday = today.getTime() + 1000 * 60 * 60 * 24 * day
today.setTime(targetday)
var tYear = today.getFullYear()
var tMonth = today.getMonth()
var tDate = today.getDate()
tMonth = doHandMonth(tMonth + 1)
tDate = doHandMonth(tDate)
return tYear + "-" + tMonth + "-" + tDate
},
/**
* 获取URL所有的参数
*/
getUrlParam() {
let url = window.location.href;
let arrObj = url.split("?");
let params = Object.create(null)
if (arrObj.length > 1) {
arrObj = arrObj[1].split("&");
arrObj.forEach(item => {
item = item.split("=");
params[item[0]] = item[1]
})
}
return params;
},
/**
* 请求接口数据
* @param params 扩展参数
* @param dynamicDataKey 动态数据源,一般是:dynamicData
* @param staticDataType 静态数据源类型,一般是:staticData
* @returns {Promise<unknown>}
*/
handlerData(params,dynamicDataKey,staticDataType) {
let that = this;
const optionsData = this.value.data;
if(!staticDataType){
staticDataType = 'staticData';
}
if(!dynamicDataKey){
dynamicDataKey = 'dynamicData';
}
// 返回Promise对象
return new Promise(async (resolve) => {
if (optionsData.dataType == staticDataType) {
// 返回静态数据
let staticData = {
code: 0,
success: true,
data: optionsData[staticDataType]
}
resolve(staticData);
} else {
// 获取动态数据 start
if (optionsData[dynamicDataKey]) {
let contextData = optionsData[dynamicDataKey].contextData;
// 合并url参数
let paramsObj = that.getUrlParam();
if (paramsObj) {
for (let key of Object.keys(paramsObj)) {
let paramVal = paramsObj[key];
contextData[key] = paramVal;
}
}
// 合并自定义的参数
if (params) {
for (let key of Object.keys(params)) {
let paramVal = params[key];
if(typeof paramVal == 'object'){
paramVal = JSON.stringify(paramVal);
}
contextData[key] = paramVal;
}
}
// 请求接口
that.queryEchartsData(
optionsData[dynamicDataKey],
optionsData.refreshTime,
that.optionsSetup,
optionsData.isRefresh
).then(res => {
let data = res[0];
if (data && (data.code == 200 || data.code == 0)) {
resolve(data);
} else if (data && data.code == 401) {
let msg = 'token过期,请重新登录!';
let data401 = {
code: 401,
success: false,
msg:msg
}
resolve(data401);
console.log(msg, data);
}
});
}
// 获取动态数据 end
}
}).catch(e => {
console.error("数据请求异常:", e);
})
},
}
}