@zykjcommon/questions 0.0.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/.browserslistrc +3 -0
- package/.env +7 -0
- package/.env.buildTest +9 -0
- package/.env.development +9 -0
- package/.env.production +13 -0
- package/.env.test +12 -0
- package/@types/global.d.ts +33 -0
- package/@types/shims-vue.d.ts +6 -0
- package/@types/shims-vuex.d.ts +15 -0
- package/auto-imports.d.ts +6 -0
- package/babel.config.js +5 -0
- package/components.d.ts +23 -0
- package/design/App.vue +60 -0
- package/design/main.js +23 -0
- package/design/views/dialog/contentDialog.vue +18 -0
- package/design/views/dialog/contentDialog2.vue +18 -0
- package/design/views/dialog/contentDialog3.vue +19 -0
- package/design/views/exam/analysis.vue +208 -0
- package/design/views/exam/exam.vue +355 -0
- package/design/views/home/illustrate.vue +45 -0
- package/design/views/home/login.vue +43 -0
- package/design/vueMapper.js +8 -0
- package/design/vueMapperTree.js +2 -0
- package/dist/demo.html +1 -0
- package/dist/zykjcommon-questions.common.js +12817 -0
- package/dist/zykjcommon-questions.css +1 -0
- package/dist/zykjcommon-questions.umd.js +12836 -0
- package/dist/zykjcommon-questions.umd.min.js +18 -0
- package/index.js +10 -0
- package/package.json +61 -0
- package/public/favicon.ico +0 -0
- package/public/index.html +19 -0
- package/public/static/js/jquery.html2json.js +169 -0
- package/public/static/js/jquery.json2html.js +137 -0
- package/public/static/js/jquery.min.js +2 -0
- package/public/static/js/json2html.js +447 -0
- package/readme +8 -0
- package/src/App.vue +37 -0
- package/src/assets/img/afei.jpg +0 -0
- package/src/assets/img/audio-ico.gif +0 -0
- package/src/assets/img/audio-ico.png +0 -0
- package/src/assets/img/bc-type-bg.png +0 -0
- package/src/assets/img/big-close.png +0 -0
- package/src/assets/img/big-next.png +0 -0
- package/src/assets/img/big-pre.png +0 -0
- package/src/assets/img/book-bg.png +0 -0
- package/src/assets/img/checkbox-cur.png +0 -0
- package/src/assets/img/checkbox.png +0 -0
- package/src/assets/img/cpp-bg.png +0 -0
- package/src/assets/img/deer-logo.png +0 -0
- package/src/assets/img/header-bg-2.png +0 -0
- package/src/assets/img/header-bg.png +0 -0
- package/src/assets/img/illustrate-bg.png +0 -0
- package/src/assets/img/loading.gif +0 -0
- package/src/assets/img/login-bg.png +0 -0
- package/src/assets/img/login-box-bg.png +0 -0
- package/src/assets/img/login-box-logo.png +0 -0
- package/src/assets/img/logo.png +0 -0
- package/src/assets/img/logoByText.png +0 -0
- package/src/assets/img/py-bg.png +0 -0
- package/src/assets/img/pygame-bg.png +0 -0
- package/src/assets/img/radio-cur.png +0 -0
- package/src/assets/img/radio.png +0 -0
- package/src/assets/img/return-top-hover.png +0 -0
- package/src/assets/img/return-top.png +0 -0
- package/src/assets/img/sb3-bg.png +0 -0
- package/src/assets/img/star-ico.png +0 -0
- package/src/assets/img/tab-mark.png +0 -0
- package/src/assets/img/video-play-btn.png +0 -0
- package/src/assets/js/arms.js +16 -0
- package/src/assets/js/bus.js +14 -0
- package/src/assets/js/fun.js +883 -0
- package/src/assets/js/helper.js +575 -0
- package/src/assets/js/http.js +219 -0
- package/src/assets/js/md5.js +260 -0
- package/src/assets/js/rem.js +33 -0
- package/src/assets/js/validation.js +216 -0
- package/src/assets/js/zykjcommon-questions.umd.min.js +18 -0
- package/src/assets/logo.png +0 -0
- package/src/assets/scss/dialog/dialog.scss +144 -0
- package/src/assets/scss/exam/exam.scss +256 -0
- package/src/assets/scss/home/home.scss +222 -0
- package/src/assets/scss/index.scss +80 -0
- package/src/assets/scss/questions/index.scss +345 -0
- package/src/common/const.ts +15 -0
- package/src/components/common/ContentDialog.vue +172 -0
- package/src/components/common/IframeComponent.vue +101 -0
- package/src/components/common/Loading.vue +45 -0
- package/src/components/common/MediaLooker.vue +171 -0
- package/src/components/common/TextAreaEditor.vue +121 -0
- package/src/components/exam/QuestionCard.vue +494 -0
- package/src/components/exam/QuestionHeader.vue +87 -0
- package/src/components/exam/TimeCounter.vue +107 -0
- package/src/components/questions/QuestionReader.js +20 -0
- package/src/components/questions/Question_SingleChoice.vue +208 -0
- package/src/components/questions/buildEntry.js +12 -0
- package/src/components/questions/developmentEntry.js +11 -0
- package/src/components/questions/mixin.js +64 -0
- package/src/main.ts +176 -0
- package/src/router/exam.ts +50 -0
- package/src/router/index.ts +33 -0
- package/src/store/exam.ts +199 -0
- package/src/store/index.ts +22 -0
- package/src/types/common/index.ts +4 -0
- package/src/types/exam/exam.ts +10 -0
- package/src/views/exam/Analysis.vue +516 -0
- package/src/views/exam/Default.vue +28 -0
- package/src/views/exam/Exam.vue +594 -0
- package/src/views/exam/ReviewPaper.vue +178 -0
- package/src/views/exam/ReviewQuestion.vue +167 -0
- package/tasks/vueMapper.js +37 -0
- package/tasks/vueMapperTree.js +42 -0
- package/tsconfig.json +46 -0
- package/tslint.json +19 -0
- package/vue.config.js +107 -0
|
@@ -0,0 +1,883 @@
|
|
|
1
|
+
/*****************************************************
|
|
2
|
+
* JS公共函数,不对外产生依赖,可独立运行
|
|
3
|
+
****************************************************/
|
|
4
|
+
import {postWeb} from "@src/assets/js/http.js";
|
|
5
|
+
import helper from "@/assets/js/helper";
|
|
6
|
+
/**
|
|
7
|
+
* 字典排序
|
|
8
|
+
* @param <Object> dict
|
|
9
|
+
* @return "替换后的字符串"
|
|
10
|
+
*/
|
|
11
|
+
function sortDict(dict) {
|
|
12
|
+
let sortDic = {};
|
|
13
|
+
let keys = Object.keys(dict);
|
|
14
|
+
let keysLen = keys.length;
|
|
15
|
+
for (let index = 0; index < keysLen; index++) {
|
|
16
|
+
sortDic[keys[index]] = dict[keys[index]];
|
|
17
|
+
}
|
|
18
|
+
// logZYKJ(sortDic);
|
|
19
|
+
return sortDic;
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
/**
|
|
23
|
+
* 生成全局唯一标识
|
|
24
|
+
* @author liubaohuo#gmail.com
|
|
25
|
+
* @return <String>
|
|
26
|
+
*/
|
|
27
|
+
function GUID() {
|
|
28
|
+
let guid = "";
|
|
29
|
+
for (let i = 1; i <= 32; i++) {
|
|
30
|
+
let n = Math.floor(Math.random() * 16.0).toString(16);
|
|
31
|
+
guid += n;
|
|
32
|
+
// if((i==8)||(i==12)||(i==16)||(i==20))
|
|
33
|
+
// guid += "-";
|
|
34
|
+
}
|
|
35
|
+
return guid;
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
/**
|
|
39
|
+
* 把字符+和/分别变成-和_,把=去掉
|
|
40
|
+
* @author liubaohuo#gmail.com
|
|
41
|
+
* @param base64Str <String>
|
|
42
|
+
* @return <String> 替换后的字符串
|
|
43
|
+
*/
|
|
44
|
+
function urlsafe_b64encode(base64Str) {
|
|
45
|
+
let safeB64 = base64Str.replace(/\+/g, "-");
|
|
46
|
+
safeB64 = safeB64.replace(/\//g, "_");
|
|
47
|
+
safeB64 = safeB64.replace(/\=/g, "");
|
|
48
|
+
return safeB64;
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
/**
|
|
52
|
+
* 需要加上=把Base64字符串的长度变为4的倍数,就可以正常解码
|
|
53
|
+
* @author liubaohuo#gmail.com
|
|
54
|
+
* @param base64Str <String>
|
|
55
|
+
* @return <String> 替换后的字符串
|
|
56
|
+
*/
|
|
57
|
+
function urlsafe_b64decode(base64Str) {
|
|
58
|
+
let safeB64 = base64Str.replace(/\-/g, "+");
|
|
59
|
+
safeB64 = safeB64.replace(/\_/g, "/");
|
|
60
|
+
let mod4 = safeB64.length % 4;
|
|
61
|
+
let modAddStr = "====";
|
|
62
|
+
safeB64 = safeB64 + modAddStr.substring(0, mod4);
|
|
63
|
+
return safeB64;
|
|
64
|
+
}
|
|
65
|
+
|
|
66
|
+
/**
|
|
67
|
+
* 将File对象转换成二进制文件URL
|
|
68
|
+
* @author liubaohuo#gmail.com
|
|
69
|
+
* @param file <FileObject>
|
|
70
|
+
* @return <String> 二进制文件URL
|
|
71
|
+
*/
|
|
72
|
+
function getObjectURL(file) {
|
|
73
|
+
var url = null;
|
|
74
|
+
if (window.createObjectURL != undefined) {
|
|
75
|
+
// basic
|
|
76
|
+
url = window.createObjectURL(file);
|
|
77
|
+
} else if (window.URL != undefined) {
|
|
78
|
+
// mozilla(firefox)
|
|
79
|
+
url = window.URL.createObjectURL(file);
|
|
80
|
+
} else if (window.webkitURL != undefined) {
|
|
81
|
+
// webkit or chrome
|
|
82
|
+
url = window.webkitURL.createObjectURL(file);
|
|
83
|
+
}
|
|
84
|
+
return url;
|
|
85
|
+
}
|
|
86
|
+
|
|
87
|
+
/**
|
|
88
|
+
* 获取URL的后缀名
|
|
89
|
+
* @author liubaohuo#gmail.com
|
|
90
|
+
* @param url <String>
|
|
91
|
+
* @return <String> 后缀名
|
|
92
|
+
*/
|
|
93
|
+
function getExtName(url) {
|
|
94
|
+
let extName = url.substring(url.lastIndexOf(".") + 1, url.indexOf("?"));
|
|
95
|
+
return extName;
|
|
96
|
+
}
|
|
97
|
+
|
|
98
|
+
/**
|
|
99
|
+
* 格式化日期时间
|
|
100
|
+
* @author liubaohuo#gmail.com
|
|
101
|
+
* @param dt <Date, Number>
|
|
102
|
+
* @param fmt <String>
|
|
103
|
+
* @return <String> 格式化日期时间
|
|
104
|
+
*/
|
|
105
|
+
function fmtDateTime(dt, fmt) {
|
|
106
|
+
let datetime = null;
|
|
107
|
+
if (dt instanceof Date) {
|
|
108
|
+
datetime = dt;
|
|
109
|
+
} else {
|
|
110
|
+
datetime = new Date(dt);
|
|
111
|
+
if (dt.length === 10) {
|
|
112
|
+
datetime = new Date(dt * 1000);
|
|
113
|
+
}
|
|
114
|
+
if (dt.length === 13) {
|
|
115
|
+
datetime = new Date(+dt);
|
|
116
|
+
}
|
|
117
|
+
}
|
|
118
|
+
|
|
119
|
+
if (datetime instanceof Date && !isNaN(datetime.valueOf())) {
|
|
120
|
+
return datetime.format(fmt || "yyyy-MM-dd hh:mm:ss");
|
|
121
|
+
} else {
|
|
122
|
+
return "";
|
|
123
|
+
}
|
|
124
|
+
}
|
|
125
|
+
|
|
126
|
+
/**
|
|
127
|
+
* 频率控制 返回函数连续调用时,fn 执行频率限定为每多少时间执行一次
|
|
128
|
+
* @author liubaohuo
|
|
129
|
+
* @param fn <Function> 需要调用的函数
|
|
130
|
+
* @param delay <Number> 延迟时间,单位毫秒
|
|
131
|
+
* @param isImmediate <Boolean> 是否立即执行函数,而不是delay后执行
|
|
132
|
+
* @param isDebounce <Boolean> 是否去抖动
|
|
133
|
+
* @return <Function> 实际调用函数
|
|
134
|
+
*/
|
|
135
|
+
function throttle(fn, delay, isImmediate, isDebounce) {
|
|
136
|
+
var curr = +new Date(), //当前事件
|
|
137
|
+
last_call = 0,
|
|
138
|
+
last_exec = 0,
|
|
139
|
+
timer = null,
|
|
140
|
+
diff, //时间差
|
|
141
|
+
context = this, //上下文
|
|
142
|
+
args,
|
|
143
|
+
exec = function() {
|
|
144
|
+
last_exec = curr;
|
|
145
|
+
fn.bind(context, ...args)();
|
|
146
|
+
};
|
|
147
|
+
return function() {
|
|
148
|
+
curr = +new Date();
|
|
149
|
+
context = this;
|
|
150
|
+
args = arguments;
|
|
151
|
+
diff = curr - (isDebounce ? last_call : last_exec) - delay;
|
|
152
|
+
clearTimeout(timer);
|
|
153
|
+
if (isDebounce) {
|
|
154
|
+
if (!isImmediate) {
|
|
155
|
+
timer = setTimeout(exec, delay);
|
|
156
|
+
} else if (diff >= 0) {
|
|
157
|
+
exec();
|
|
158
|
+
}
|
|
159
|
+
} else {
|
|
160
|
+
if (diff >= 0) {
|
|
161
|
+
exec();
|
|
162
|
+
} else if (!isImmediate) {
|
|
163
|
+
timer = setTimeout(exec, -diff);
|
|
164
|
+
}
|
|
165
|
+
}
|
|
166
|
+
last_call = curr;
|
|
167
|
+
};
|
|
168
|
+
}
|
|
169
|
+
|
|
170
|
+
/**
|
|
171
|
+
* 空闲控制 返回函数连续调用时,空闲时间必须大于或等于 delay,fn 才会执行
|
|
172
|
+
* @author liubaohuo
|
|
173
|
+
* @param fn <Function> 要调用的函数
|
|
174
|
+
* @param delay <Number> 空闲时间
|
|
175
|
+
* @param immediate <Boolean> 是否立即执行函数,而不是delay后执行
|
|
176
|
+
* @return <Function> 实际调用函数
|
|
177
|
+
*/
|
|
178
|
+
function debounce2(fn, delay, isImmediate = false) {
|
|
179
|
+
return throttle(fn, delay, isImmediate, true);
|
|
180
|
+
}
|
|
181
|
+
|
|
182
|
+
/**
|
|
183
|
+
* 深拷贝对象
|
|
184
|
+
* @author zengxiaofang
|
|
185
|
+
* @param <Object> 对象
|
|
186
|
+
* @return <Object> 新对象
|
|
187
|
+
*/
|
|
188
|
+
function copyDeepObject(obj) {
|
|
189
|
+
let newObj;
|
|
190
|
+
if (Object.prototype.toString.call(obj) === "[object Object]") {
|
|
191
|
+
newObj = {};
|
|
192
|
+
for (let key in obj) {
|
|
193
|
+
if (typeof obj[key] == "object") {
|
|
194
|
+
newObj[key] = copyDeepObject(obj[key]);
|
|
195
|
+
} else {
|
|
196
|
+
newObj[key] = obj[key];
|
|
197
|
+
}
|
|
198
|
+
}
|
|
199
|
+
} else if (Object.prototype.toString.call(obj) === "[object Array]") {
|
|
200
|
+
newObj = [];
|
|
201
|
+
obj.forEach((item) => {
|
|
202
|
+
if (typeof item == "object") {
|
|
203
|
+
newObj.push(copyDeepObject(item));
|
|
204
|
+
} else {
|
|
205
|
+
newObj.push(item);
|
|
206
|
+
}
|
|
207
|
+
});
|
|
208
|
+
}
|
|
209
|
+
return newObj;
|
|
210
|
+
}
|
|
211
|
+
|
|
212
|
+
|
|
213
|
+
|
|
214
|
+
//序号1234转ABCD
|
|
215
|
+
function indexToEnIndex(index){
|
|
216
|
+
return String.fromCharCode(64 + parseInt(index));
|
|
217
|
+
}
|
|
218
|
+
|
|
219
|
+
|
|
220
|
+
/**
|
|
221
|
+
* 判断两个对象是否相等
|
|
222
|
+
* @author zengxiaofang
|
|
223
|
+
* @param obj1 <Object> 对象1
|
|
224
|
+
* @param obj2 <Object> 对象2
|
|
225
|
+
* @return <Boolean> 是否相等
|
|
226
|
+
*/
|
|
227
|
+
function diffObject(obj1, obj2) {
|
|
228
|
+
if (Object.keys(obj1).length != Object.keys(obj2).length) {
|
|
229
|
+
return false;
|
|
230
|
+
}
|
|
231
|
+
for (let key in obj1) {
|
|
232
|
+
if (obj2.hasOwnProperty(key)) {
|
|
233
|
+
if (!Object.is(obj1[key], obj2[key])) {
|
|
234
|
+
return false;
|
|
235
|
+
}
|
|
236
|
+
} else {
|
|
237
|
+
return false;
|
|
238
|
+
}
|
|
239
|
+
return true;
|
|
240
|
+
}
|
|
241
|
+
}
|
|
242
|
+
|
|
243
|
+
/**
|
|
244
|
+
* 判断两个数组是否相等
|
|
245
|
+
* @author liubaohuo
|
|
246
|
+
* @param arr1 <Array> 数组1
|
|
247
|
+
* @param arr2 <Array> 数组2
|
|
248
|
+
* @return <Boolean> 是否相等
|
|
249
|
+
*/
|
|
250
|
+
function diffArray(arr1, arr2) {
|
|
251
|
+
if (arr1.length != arr2.length) {
|
|
252
|
+
return false;
|
|
253
|
+
}
|
|
254
|
+
let isExist = true;
|
|
255
|
+
arr1.forEach((item, index) => {
|
|
256
|
+
if (!Object.is(item, arr2[index])) {
|
|
257
|
+
isExist = false;
|
|
258
|
+
}
|
|
259
|
+
});
|
|
260
|
+
return isExist;
|
|
261
|
+
}
|
|
262
|
+
|
|
263
|
+
/**
|
|
264
|
+
* 格式化富文本(JSON转HTML)
|
|
265
|
+
* @author liubaohuo#gmail.com
|
|
266
|
+
* @param content <String>
|
|
267
|
+
* @return <String>
|
|
268
|
+
*/
|
|
269
|
+
function fmtJSON2HTML(content) {
|
|
270
|
+
const args = Array.from(arguments);
|
|
271
|
+
if (args.length === 4) content = args[2];
|
|
272
|
+
try {
|
|
273
|
+
content = JSON.parse(content);
|
|
274
|
+
content = $.json2html({}, content);
|
|
275
|
+
} catch (Ex) {
|
|
276
|
+
warnZYKJ("json2html转化出错:", Ex);
|
|
277
|
+
}
|
|
278
|
+
return content;
|
|
279
|
+
}
|
|
280
|
+
|
|
281
|
+
/**
|
|
282
|
+
* 格式化富文本(HTML转JSON)
|
|
283
|
+
* @author liubaohuo#gmail.com
|
|
284
|
+
* @param content <String>
|
|
285
|
+
* @return <String>
|
|
286
|
+
*/
|
|
287
|
+
function fmtHTML2JSON(content) {
|
|
288
|
+
const args = Array.from(arguments);
|
|
289
|
+
if (args.length === 4) content = args[2];
|
|
290
|
+
try {
|
|
291
|
+
content = $.html2json($(content));
|
|
292
|
+
content = JSON.stringify(content);
|
|
293
|
+
} catch (Ex) {
|
|
294
|
+
warnZYKJ("html2json转化出错:", Ex);
|
|
295
|
+
}
|
|
296
|
+
return content;
|
|
297
|
+
}
|
|
298
|
+
|
|
299
|
+
/**
|
|
300
|
+
* 格式化时长
|
|
301
|
+
* @author liubaohuo#gmail.com
|
|
302
|
+
* @param second <Number>
|
|
303
|
+
* @return <String>
|
|
304
|
+
*/
|
|
305
|
+
function fmtSecond(second) {
|
|
306
|
+
let ss = Math.floor(second % 60);
|
|
307
|
+
let mm = Math.floor((second / 60) % 60);
|
|
308
|
+
let HH = Math.floor(second / 60 / 60);
|
|
309
|
+
let result = [];
|
|
310
|
+
if (HH) {
|
|
311
|
+
result.push(HH + "时");
|
|
312
|
+
}
|
|
313
|
+
if (mm) {
|
|
314
|
+
result.push(mm + "分");
|
|
315
|
+
}
|
|
316
|
+
if (ss) {
|
|
317
|
+
result.push(ss + "秒");
|
|
318
|
+
}
|
|
319
|
+
return result.join(" ");
|
|
320
|
+
}
|
|
321
|
+
|
|
322
|
+
/**
|
|
323
|
+
* 格式化浮点串
|
|
324
|
+
* @author liubaohuo#gmail.com
|
|
325
|
+
* @param float_nubmer <Number>
|
|
326
|
+
* @return <String>
|
|
327
|
+
*/
|
|
328
|
+
function fmtFloatNumber(float_nubmer) {
|
|
329
|
+
return parseFloat(float_nubmer).toString();
|
|
330
|
+
}
|
|
331
|
+
|
|
332
|
+
/**
|
|
333
|
+
* 获取深层的数据
|
|
334
|
+
* @author liubaohuo
|
|
335
|
+
* @param parent <Objecy/Array>
|
|
336
|
+
* @param level <String>
|
|
337
|
+
* @param defaultValue <Any>
|
|
338
|
+
* @return <Any>
|
|
339
|
+
*/
|
|
340
|
+
function getDeepData(parent, level, defaultValue) {
|
|
341
|
+
if (!parent) {
|
|
342
|
+
return undefined;
|
|
343
|
+
}
|
|
344
|
+
let levels = level.match(/(\w+)/gi);
|
|
345
|
+
let child = null;
|
|
346
|
+
if (parent instanceof Array) {
|
|
347
|
+
child = parent.slice(0);
|
|
348
|
+
} else {
|
|
349
|
+
child = Object.assign({}, parent);
|
|
350
|
+
}
|
|
351
|
+
levels.forEach((item, index) => {
|
|
352
|
+
if (typeof child !== "undefined") {
|
|
353
|
+
if (child instanceof Array) {
|
|
354
|
+
child = child.slice(item - 1, 1);
|
|
355
|
+
} else {
|
|
356
|
+
child = child[item];
|
|
357
|
+
}
|
|
358
|
+
}
|
|
359
|
+
});
|
|
360
|
+
return child || defaultValue;
|
|
361
|
+
}
|
|
362
|
+
|
|
363
|
+
/**
|
|
364
|
+
* 判断一个对象/数组/字符串是否为空
|
|
365
|
+
* @author liubaohuo
|
|
366
|
+
* @param arg <Objecy/Array/String>
|
|
367
|
+
* @return isEmpty
|
|
368
|
+
*/
|
|
369
|
+
function isEmpty2(arg) {
|
|
370
|
+
if (typeof arg === "undefined" || arg === null) return true;
|
|
371
|
+
let isEmpty = false;
|
|
372
|
+
if (typeof arg === "object") {
|
|
373
|
+
if (arg instanceof Array) {
|
|
374
|
+
isEmpty = arg.length === 0;
|
|
375
|
+
} else {
|
|
376
|
+
isEmpty = Object.keys(arg).length === 0;
|
|
377
|
+
}
|
|
378
|
+
} else {
|
|
379
|
+
if (typeof arg === "string") {
|
|
380
|
+
isEmpty = arg.trim().length === 0;
|
|
381
|
+
} else {
|
|
382
|
+
isEmpty = isNaN(+arg);
|
|
383
|
+
}
|
|
384
|
+
}
|
|
385
|
+
return isEmpty;
|
|
386
|
+
}
|
|
387
|
+
|
|
388
|
+
/**
|
|
389
|
+
* 判断一个对象/数组/字符串是否不为空
|
|
390
|
+
* (由于isEmpty已被Element占用,正式启用)
|
|
391
|
+
* @author liubaohuo
|
|
392
|
+
* @param arg <Objecy/Array/String>
|
|
393
|
+
* @return true(非空) false(空)
|
|
394
|
+
*/
|
|
395
|
+
function nonEmpty(arg) {
|
|
396
|
+
return !isEmpty2(arg);
|
|
397
|
+
}
|
|
398
|
+
|
|
399
|
+
/* 数字滚动方法 */
|
|
400
|
+
/* CountUp('显示数字dom','原数字','需滚动到的新数字','数字小数点后保留的位数','数字增长特效的时间,此处为2秒','其他配置项') 数字滚动方法 */
|
|
401
|
+
/* options: {
|
|
402
|
+
useEasing: true, // 过渡动画效果,默认ture
|
|
403
|
+
useGrouping: true, // 千分位效果,例:1000->1,000。默认true
|
|
404
|
+
separator: ",", // 使用千分位时分割符号
|
|
405
|
+
decimal: ".", // 小数位分割符号
|
|
406
|
+
prefix: "", // 前置符号
|
|
407
|
+
suffix: "", // 后置符号,可汉字
|
|
408
|
+
} */
|
|
409
|
+
/* CountUp.start() 开始滚动数字*/
|
|
410
|
+
function CountUp(target, startVal, endVal, decimals, duration, options) {
|
|
411
|
+
var self = this;
|
|
412
|
+
self.version = function() {
|
|
413
|
+
return "1.9.2";
|
|
414
|
+
};
|
|
415
|
+
self.options = {
|
|
416
|
+
useEasing: true,
|
|
417
|
+
useGrouping: true,
|
|
418
|
+
separator: ",",
|
|
419
|
+
decimal: ".",
|
|
420
|
+
easingFn: easeOutExpo,
|
|
421
|
+
formattingFn: formatNumber,
|
|
422
|
+
prefix: "",
|
|
423
|
+
suffix: "",
|
|
424
|
+
numerals: [],
|
|
425
|
+
};
|
|
426
|
+
if (options && typeof options === "object") {
|
|
427
|
+
for (var key in self.options) {
|
|
428
|
+
if (options.hasOwnProperty(key) && options[key] !== null) {
|
|
429
|
+
self.options[key] = options[key];
|
|
430
|
+
}
|
|
431
|
+
}
|
|
432
|
+
}
|
|
433
|
+
if (self.options.separator === "") {
|
|
434
|
+
self.options.useGrouping = false;
|
|
435
|
+
} else {
|
|
436
|
+
self.options.separator = "" + self.options.separator;
|
|
437
|
+
}
|
|
438
|
+
var lastTime = 0;
|
|
439
|
+
var vendors = ["webkit", "moz", "ms", "o"];
|
|
440
|
+
for (var x = 0; x < vendors.length && !window.requestAnimationFrame; ++x) {
|
|
441
|
+
window.requestAnimationFrame = window[vendors[x] + "RequestAnimationFrame"];
|
|
442
|
+
window.cancelAnimationFrame =
|
|
443
|
+
window[vendors[x] + "CancelAnimationFrame"] ||
|
|
444
|
+
window[vendors[x] + "CancelRequestAnimationFrame"];
|
|
445
|
+
}
|
|
446
|
+
if (!window.requestAnimationFrame) {
|
|
447
|
+
window.requestAnimationFrame = function(callback, element) {
|
|
448
|
+
var currTime = new Date().getTime();
|
|
449
|
+
var timeToCall = Math.max(0, 16 - (currTime - lastTime));
|
|
450
|
+
var id = window.setTimeout(function() {
|
|
451
|
+
callback(currTime + timeToCall);
|
|
452
|
+
}, timeToCall);
|
|
453
|
+
lastTime = currTime + timeToCall;
|
|
454
|
+
return id;
|
|
455
|
+
};
|
|
456
|
+
}
|
|
457
|
+
if (!window.cancelAnimationFrame) {
|
|
458
|
+
window.cancelAnimationFrame = function(id) {
|
|
459
|
+
clearTimeout(id);
|
|
460
|
+
};
|
|
461
|
+
}
|
|
462
|
+
function formatNumber(num) {
|
|
463
|
+
num = num.toFixed(self.decimals);
|
|
464
|
+
num += "";
|
|
465
|
+
var x, x1, x2, x3, i, l;
|
|
466
|
+
x = num.split(".");
|
|
467
|
+
x1 = x[0];
|
|
468
|
+
x2 = x.length > 1 ? self.options.decimal + x[1] : "";
|
|
469
|
+
if (self.options.useGrouping) {
|
|
470
|
+
x3 = "";
|
|
471
|
+
for (i = 0, l = x1.length; i < l; ++i) {
|
|
472
|
+
if (i !== 0 && i % 3 === 0) {
|
|
473
|
+
x3 = self.options.separator + x3;
|
|
474
|
+
}
|
|
475
|
+
x3 = x1[l - i - 1] + x3;
|
|
476
|
+
}
|
|
477
|
+
x1 = x3;
|
|
478
|
+
}
|
|
479
|
+
if (self.options.numerals.length) {
|
|
480
|
+
x1 = x1.replace(/[0-9]/g, function(w) {
|
|
481
|
+
return self.options.numerals[+w];
|
|
482
|
+
});
|
|
483
|
+
x2 = x2.replace(/[0-9]/g, function(w) {
|
|
484
|
+
return self.options.numerals[+w];
|
|
485
|
+
});
|
|
486
|
+
}
|
|
487
|
+
return self.options.prefix + x1 + x2 + self.options.suffix;
|
|
488
|
+
}
|
|
489
|
+
function easeOutExpo(t, b, c, d) {
|
|
490
|
+
return (c * (-Math.pow(2, (-10 * t) / d) + 1) * 1024) / 1023 + b;
|
|
491
|
+
}
|
|
492
|
+
function ensureNumber(n) {
|
|
493
|
+
return typeof n === "number" && !isNaN(n);
|
|
494
|
+
}
|
|
495
|
+
self.initialize = function() {
|
|
496
|
+
if (self.initialized) {
|
|
497
|
+
return true;
|
|
498
|
+
}
|
|
499
|
+
self.error = "";
|
|
500
|
+
self.d =
|
|
501
|
+
typeof target === "string" ? document.getElementById(target) : target;
|
|
502
|
+
if (!self.d) {
|
|
503
|
+
self.error = "[CountUp] target is null or undefined";
|
|
504
|
+
return false;
|
|
505
|
+
}
|
|
506
|
+
self.startVal = Number(startVal);
|
|
507
|
+
self.endVal = Number(endVal);
|
|
508
|
+
if (ensureNumber(self.startVal) && ensureNumber(self.endVal)) {
|
|
509
|
+
self.decimals = Math.max(0, decimals || 0);
|
|
510
|
+
self.dec = Math.pow(10, self.decimals);
|
|
511
|
+
self.duration = Number(duration) * 1000 || 2000;
|
|
512
|
+
self.countDown = self.startVal > self.endVal;
|
|
513
|
+
self.frameVal = self.startVal;
|
|
514
|
+
self.initialized = true;
|
|
515
|
+
return true;
|
|
516
|
+
} else {
|
|
517
|
+
self.error =
|
|
518
|
+
"[CountUp] startVal (" +
|
|
519
|
+
startVal +
|
|
520
|
+
") or endVal (" +
|
|
521
|
+
endVal +
|
|
522
|
+
") is not a number";
|
|
523
|
+
return false;
|
|
524
|
+
}
|
|
525
|
+
};
|
|
526
|
+
self.printValue = function(value) {
|
|
527
|
+
var result = self.options.formattingFn(value);
|
|
528
|
+
if (self.d.tagName === "INPUT") {
|
|
529
|
+
this.d.value = result;
|
|
530
|
+
} else {
|
|
531
|
+
if (self.d.tagName === "text" || self.d.tagName === "tspan") {
|
|
532
|
+
this.d.textContent = result;
|
|
533
|
+
} else {
|
|
534
|
+
this.d.innerHTML = result;
|
|
535
|
+
}
|
|
536
|
+
}
|
|
537
|
+
};
|
|
538
|
+
self.count = function(timestamp) {
|
|
539
|
+
if (!self.startTime) {
|
|
540
|
+
self.startTime = timestamp;
|
|
541
|
+
}
|
|
542
|
+
self.timestamp = timestamp;
|
|
543
|
+
var progress = timestamp - self.startTime;
|
|
544
|
+
self.remaining = self.duration - progress;
|
|
545
|
+
if (self.options.useEasing) {
|
|
546
|
+
if (self.countDown) {
|
|
547
|
+
self.frameVal =
|
|
548
|
+
self.startVal -
|
|
549
|
+
self.options.easingFn(
|
|
550
|
+
progress,
|
|
551
|
+
0,
|
|
552
|
+
self.startVal - self.endVal,
|
|
553
|
+
self.duration
|
|
554
|
+
);
|
|
555
|
+
} else {
|
|
556
|
+
self.frameVal = self.options.easingFn(
|
|
557
|
+
progress,
|
|
558
|
+
self.startVal,
|
|
559
|
+
self.endVal - self.startVal,
|
|
560
|
+
self.duration
|
|
561
|
+
);
|
|
562
|
+
}
|
|
563
|
+
} else {
|
|
564
|
+
if (self.countDown) {
|
|
565
|
+
self.frameVal =
|
|
566
|
+
self.startVal -
|
|
567
|
+
(self.startVal - self.endVal) * (progress / self.duration);
|
|
568
|
+
} else {
|
|
569
|
+
self.frameVal =
|
|
570
|
+
self.startVal +
|
|
571
|
+
(self.endVal - self.startVal) * (progress / self.duration);
|
|
572
|
+
}
|
|
573
|
+
}
|
|
574
|
+
if (self.countDown) {
|
|
575
|
+
self.frameVal = self.frameVal < self.endVal ? self.endVal : self.frameVal;
|
|
576
|
+
} else {
|
|
577
|
+
self.frameVal = self.frameVal > self.endVal ? self.endVal : self.frameVal;
|
|
578
|
+
}
|
|
579
|
+
self.frameVal = Math.round(self.frameVal * self.dec) / self.dec;
|
|
580
|
+
self.printValue(self.frameVal);
|
|
581
|
+
if (progress < self.duration) {
|
|
582
|
+
self.rAF = requestAnimationFrame(self.count);
|
|
583
|
+
} else {
|
|
584
|
+
if (self.callback) {
|
|
585
|
+
self.callback();
|
|
586
|
+
}
|
|
587
|
+
}
|
|
588
|
+
};
|
|
589
|
+
self.start = function(callback) {
|
|
590
|
+
if (!self.initialize()) {
|
|
591
|
+
return;
|
|
592
|
+
}
|
|
593
|
+
self.callback = callback;
|
|
594
|
+
self.rAF = requestAnimationFrame(self.count);
|
|
595
|
+
};
|
|
596
|
+
self.pauseResume = function() {
|
|
597
|
+
if (!self.paused) {
|
|
598
|
+
self.paused = true;
|
|
599
|
+
cancelAnimationFrame(self.rAF);
|
|
600
|
+
} else {
|
|
601
|
+
self.paused = false;
|
|
602
|
+
delete self.startTime;
|
|
603
|
+
self.duration = self.remaining;
|
|
604
|
+
self.startVal = self.frameVal;
|
|
605
|
+
requestAnimationFrame(self.count);
|
|
606
|
+
}
|
|
607
|
+
};
|
|
608
|
+
self.reset = function() {
|
|
609
|
+
self.paused = false;
|
|
610
|
+
delete self.startTime;
|
|
611
|
+
self.initialized = false;
|
|
612
|
+
if (self.initialize()) {
|
|
613
|
+
cancelAnimationFrame(self.rAF);
|
|
614
|
+
self.printValue(self.startVal);
|
|
615
|
+
}
|
|
616
|
+
};
|
|
617
|
+
self.update = function(newEndVal) {
|
|
618
|
+
if (!self.initialize()) {
|
|
619
|
+
return;
|
|
620
|
+
}
|
|
621
|
+
newEndVal = Number(newEndVal);
|
|
622
|
+
if (!ensureNumber(newEndVal)) {
|
|
623
|
+
self.error =
|
|
624
|
+
"[CountUp] update() - new endVal is not a number: " + newEndVal;
|
|
625
|
+
return;
|
|
626
|
+
}
|
|
627
|
+
self.error = "";
|
|
628
|
+
if (newEndVal === self.frameVal) {
|
|
629
|
+
return;
|
|
630
|
+
}
|
|
631
|
+
cancelAnimationFrame(self.rAF);
|
|
632
|
+
self.paused = false;
|
|
633
|
+
delete self.startTime;
|
|
634
|
+
self.startVal = self.frameVal;
|
|
635
|
+
self.endVal = newEndVal;
|
|
636
|
+
self.countDown = self.startVal > self.endVal;
|
|
637
|
+
self.rAF = requestAnimationFrame(self.count);
|
|
638
|
+
};
|
|
639
|
+
if (self.initialize()) {
|
|
640
|
+
self.printValue(self.startVal);
|
|
641
|
+
}
|
|
642
|
+
}
|
|
643
|
+
/* 判断pc或者移动端 */
|
|
644
|
+
function getEnvironment() {
|
|
645
|
+
let result = "";
|
|
646
|
+
if (
|
|
647
|
+
/(iPhone|iPad|iPhone OS|Phone|iPod|iOS|Mac|Android)/i.test(
|
|
648
|
+
navigator.userAgent
|
|
649
|
+
)
|
|
650
|
+
) {
|
|
651
|
+
//移动端
|
|
652
|
+
if (/Android/i.test(navigator.userAgent)) {
|
|
653
|
+
result = "mobile";
|
|
654
|
+
} else if (/Safari/i.test(navigator.userAgent)) {
|
|
655
|
+
//为了解决ipad pro 和Mac 笔记本身份相同的问题;在Mac osx上不会有Safari标识;
|
|
656
|
+
result = "pc";
|
|
657
|
+
} else {
|
|
658
|
+
result = "mobile";
|
|
659
|
+
}
|
|
660
|
+
} else {
|
|
661
|
+
result = "pc";
|
|
662
|
+
}
|
|
663
|
+
return result;
|
|
664
|
+
}
|
|
665
|
+
/* 埋点统计公用方法 */
|
|
666
|
+
function recordCountFn(id, name) {
|
|
667
|
+
if (window._czc) {
|
|
668
|
+
_czc.push(["_trackEvent", id, name]);
|
|
669
|
+
}
|
|
670
|
+
}
|
|
671
|
+
/* 找到某元素在list中Index */
|
|
672
|
+
function findListIndex(arr, num) {
|
|
673
|
+
for (var i = 0; i < arr.length; i++) {
|
|
674
|
+
if (arr[i] == num) {
|
|
675
|
+
return i;
|
|
676
|
+
}
|
|
677
|
+
}
|
|
678
|
+
}
|
|
679
|
+
/* 判断是否小屏 */
|
|
680
|
+
function getScreen(width = 1024, height = 768) {
|
|
681
|
+
let currentWidth = document.body.clientWidth;
|
|
682
|
+
let currentHeight = document.body.clientHeight;
|
|
683
|
+
if (currentWidth <= width && currentHeight <= height) {
|
|
684
|
+
return true;
|
|
685
|
+
} else {
|
|
686
|
+
return false;
|
|
687
|
+
}
|
|
688
|
+
}
|
|
689
|
+
function whatBrowser() {
|
|
690
|
+
if (!!window.ActiveXObject || "ActiveXObject" in window) {
|
|
691
|
+
return true;
|
|
692
|
+
} else {
|
|
693
|
+
return false;
|
|
694
|
+
}
|
|
695
|
+
}
|
|
696
|
+
/* 获取url上拼接的参数 */
|
|
697
|
+
function getUrlQueryVariable(url, variable) {
|
|
698
|
+
// let index = url.lastIndexOf('?');
|
|
699
|
+
// let query = url.substring(index+1,url.length);
|
|
700
|
+
// let vars = query.split("&");
|
|
701
|
+
// for (var i = 0; i < vars.length; i++) {
|
|
702
|
+
// var pair = vars[i].split("=");
|
|
703
|
+
// if (pair[0] == variable) {
|
|
704
|
+
// return pair[1];
|
|
705
|
+
// }
|
|
706
|
+
// }
|
|
707
|
+
// return false;
|
|
708
|
+
let index = url.lastIndexOf("?");
|
|
709
|
+
let query = url.substring(index + 1, url.length);
|
|
710
|
+
let returnStr = "";
|
|
711
|
+
let vars = query.split("&");
|
|
712
|
+
for (var i = 0; i < vars.length; i++) {
|
|
713
|
+
let pair = vars[i].split("=");
|
|
714
|
+
let str = "a";
|
|
715
|
+
returnStr +=
|
|
716
|
+
`${i == 0 ? "?" : "&"}` +
|
|
717
|
+
String.fromCharCode(str.charCodeAt() + i) +
|
|
718
|
+
"=" +
|
|
719
|
+
pair[1];
|
|
720
|
+
}
|
|
721
|
+
return returnStr;
|
|
722
|
+
}
|
|
723
|
+
/* 图片按比例显示 */
|
|
724
|
+
function setImgAuto(url, w, h, imgW, imgH) {
|
|
725
|
+
let nImg = new Image(),
|
|
726
|
+
remBoxW = w,
|
|
727
|
+
rewBoxH = h,
|
|
728
|
+
pxH = h * 12,
|
|
729
|
+
pxW = w * 12;
|
|
730
|
+
nImg.src = url;
|
|
731
|
+
let calculateImgH, calculateImgW;
|
|
732
|
+
if (imgH > pxH && imgW <= pxW) {
|
|
733
|
+
calculateImgW = `${remBoxW * (imgW / imgH)}rem`;
|
|
734
|
+
calculateImgH = `${rewBoxH}rem`;
|
|
735
|
+
} else if (imgH <= pxH && imgW > pxW) {
|
|
736
|
+
calculateImgW = `${rewBoxW}rem`;
|
|
737
|
+
calculateImgH = `${rewBoxH * (imgW / imgH)}rem`;
|
|
738
|
+
} else if (imgH > pxH && imgH > pxW) {
|
|
739
|
+
if (imgW > imgH) {
|
|
740
|
+
calculateImgW = `${rewBoxW}rem`;
|
|
741
|
+
calculateImgH = `${rewBoxH * (imgW / imgH)}rem`;
|
|
742
|
+
} else {
|
|
743
|
+
calculateImgW = `${remBoxW * (imgW / imgH)}rem`;
|
|
744
|
+
calculateImgH = `${rewBoxH}rem`;
|
|
745
|
+
}
|
|
746
|
+
} else {
|
|
747
|
+
calculateImgW = `${imgW / 12}rem`;
|
|
748
|
+
calculateImgH = `${imgH / 12}rem`;
|
|
749
|
+
}
|
|
750
|
+
return {
|
|
751
|
+
width: calculateImgW,
|
|
752
|
+
height: calculateImgH,
|
|
753
|
+
};
|
|
754
|
+
}
|
|
755
|
+
|
|
756
|
+
|
|
757
|
+
function postMessageByType(type){
|
|
758
|
+
window.parent.postMessage(type, '*')
|
|
759
|
+
}
|
|
760
|
+
|
|
761
|
+
function closeAllContentDialog(){
|
|
762
|
+
window.contentDialogs.forEach((dialog)=>{
|
|
763
|
+
dialog.scope.closeContentDialog()
|
|
764
|
+
})
|
|
765
|
+
}
|
|
766
|
+
|
|
767
|
+
function closeContentDialogByUid(uid){
|
|
768
|
+
let dialogItem = window.contentDialogs.find((item)=>{
|
|
769
|
+
return item.uid === uid
|
|
770
|
+
})
|
|
771
|
+
if(dialogItem){
|
|
772
|
+
dialogItem.scope.closeContentDialog()
|
|
773
|
+
}
|
|
774
|
+
}
|
|
775
|
+
|
|
776
|
+
|
|
777
|
+
|
|
778
|
+
let getToken = function() {
|
|
779
|
+
// let token = getQueryVariable('a')
|
|
780
|
+
let token = helper.cookieUtils.getItem('token',true)
|
|
781
|
+
return token;
|
|
782
|
+
};
|
|
783
|
+
|
|
784
|
+
function getQueryVariable(variable)
|
|
785
|
+
{
|
|
786
|
+
var query = window.location.search.substring(1);
|
|
787
|
+
var vars = query.split("&");
|
|
788
|
+
for (var i=0;i<vars.length;i++) {
|
|
789
|
+
var pair = vars[i].split("=");
|
|
790
|
+
if(pair[0] == variable){return pair[1];}
|
|
791
|
+
}
|
|
792
|
+
return(false);
|
|
793
|
+
}
|
|
794
|
+
|
|
795
|
+
function messageTip(type,content,duration = 3000){
|
|
796
|
+
let dialog = document.createElement('div')
|
|
797
|
+
dialog.className = 'dialog'
|
|
798
|
+
let domStr = `<div class="dialog">
|
|
799
|
+
<div class="message-box ${type}">
|
|
800
|
+
<i class="ico"></i>
|
|
801
|
+
<p class="content">${content}</p>
|
|
802
|
+
</div>
|
|
803
|
+
</div>`
|
|
804
|
+
let messageDom = $(domStr)
|
|
805
|
+
$('body').append(messageDom)
|
|
806
|
+
setTimeout(()=>{
|
|
807
|
+
messageDom.remove()
|
|
808
|
+
},duration + 500)
|
|
809
|
+
}
|
|
810
|
+
|
|
811
|
+
|
|
812
|
+
function offset(obj, direction) {
|
|
813
|
+
// if(!obj){
|
|
814
|
+
// return false
|
|
815
|
+
// }
|
|
816
|
+
//将top,left首字母大写,并拼接成offsetTop,offsetLeft
|
|
817
|
+
var offsetDir = 'offset' + direction[0].toUpperCase() + direction.substring(1);
|
|
818
|
+
var realNum = obj[offsetDir];
|
|
819
|
+
var positionParent = obj.offsetParent; //获取上一级定位元素对象
|
|
820
|
+
while (positionParent != null) {
|
|
821
|
+
realNum += positionParent[offsetDir];
|
|
822
|
+
positionParent = positionParent.offsetParent;
|
|
823
|
+
}
|
|
824
|
+
return realNum;
|
|
825
|
+
}
|
|
826
|
+
|
|
827
|
+
|
|
828
|
+
function fbError(message, source, lineno, colno, error) {
|
|
829
|
+
try{
|
|
830
|
+
let url_server = process.env.VUE_APP_ERROR_SERVER
|
|
831
|
+
let listError = []
|
|
832
|
+
let errorStr = `${message}\n[${source} : lineno:${lineno},colno:${colno}]\n${error}`
|
|
833
|
+
listError.push(errorStr)
|
|
834
|
+
postWeb(url_server + "/event/error/web", { errors: listError,client:'JSL_WEB_BIANCHENG_EXAM' }).then(res => {
|
|
835
|
+
let { error_code } = res;
|
|
836
|
+
if (!+error_code) {
|
|
837
|
+
console.log('上报错误成功')
|
|
838
|
+
}
|
|
839
|
+
})
|
|
840
|
+
}catch(ex){
|
|
841
|
+
console.log(ex.toString());
|
|
842
|
+
}
|
|
843
|
+
}
|
|
844
|
+
|
|
845
|
+
|
|
846
|
+
export default {
|
|
847
|
+
getToken,
|
|
848
|
+
getQueryVariable,
|
|
849
|
+
debounce2,
|
|
850
|
+
throttle,
|
|
851
|
+
sortDict,
|
|
852
|
+
GUID,
|
|
853
|
+
urlsafe_b64encode,
|
|
854
|
+
urlsafe_b64decode,
|
|
855
|
+
getObjectURL,
|
|
856
|
+
getExtName,
|
|
857
|
+
fmtDateTime,
|
|
858
|
+
fmtJSON2HTML,
|
|
859
|
+
fmtHTML2JSON,
|
|
860
|
+
fmtSecond,
|
|
861
|
+
fmtFloatNumber,
|
|
862
|
+
copyDeepObject,
|
|
863
|
+
indexToEnIndex,
|
|
864
|
+
diffObject,
|
|
865
|
+
diffArray,
|
|
866
|
+
getDeepData,
|
|
867
|
+
isEmpty2,
|
|
868
|
+
nonEmpty,
|
|
869
|
+
CountUp,
|
|
870
|
+
getEnvironment,
|
|
871
|
+
recordCountFn,
|
|
872
|
+
findListIndex,
|
|
873
|
+
getScreen,
|
|
874
|
+
whatBrowser,
|
|
875
|
+
getUrlQueryVariable,
|
|
876
|
+
setImgAuto,
|
|
877
|
+
postMessageByType,
|
|
878
|
+
closeAllContentDialog,
|
|
879
|
+
closeContentDialogByUid,
|
|
880
|
+
messageTip,
|
|
881
|
+
offset,
|
|
882
|
+
fbError
|
|
883
|
+
};
|