centaline-data-driven 1.1.55 → 1.1.59
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/.babelrc +12 -12
- package/.editorconfig +9 -9
- package/.gitattributes +63 -63
- package/.postcssrc.js +10 -10
- package/.vs/Centaline.Front_End.DataDriven/DesignTimeBuild/.dtbcache +0 -0
- package/.vs/Centaline.Front_End.DataDriven/v16/Server/sqlite3/db.lock +0 -0
- package/.vs/Centaline.Front_End.DataDriven/v16/Server/sqlite3/storage.ide +0 -0
- package/Centaline.Front_End.DataDriven.csproj +37 -37
- package/Centaline.Front_End.DataDriven.sln +25 -25
- package/Properties/launchSettings.json +26 -26
- package/README.md +140 -140
- package/build/build.js +41 -41
- package/build/centaline/centaline.path.js +59 -59
- package/build/centaline/webpack.centaline.conf.js +106 -106
- package/build/check-versions.js +54 -54
- package/build/utils.js +102 -102
- package/build/vue-loader.conf.js +22 -22
- package/build/webpack.base.conf.js +82 -82
- package/build/webpack.dev.conf.js +111 -111
- package/build/webpack.prod.conf.js +145 -145
- package/config/dev.env.js +12 -12
- package/config/index.js +73 -73
- package/config/prod.env.js +4 -4
- package/index.html +14 -14
- package/obj/Centaline.Front_End.DataDriven.csproj.nuget.dgspec.json +73 -0
- package/obj/Centaline.Front_End.DataDriven.csproj.nuget.g.props +29 -0
- package/obj/Centaline.Front_End.DataDriven.csproj.nuget.g.targets +15 -0
- package/obj/Debug/netcoreapp2.1/Centaline.Front_End.DataDriven.AssemblyInfo.cs +23 -0
- package/obj/Debug/netcoreapp2.1/Centaline.Front_End.DataDriven.RazorAssemblyInfo.cs +20 -0
- package/obj/project.assets.json +11907 -0
- package/package.json +75 -75
- package/src/App.vue +10 -10
- package/src/Detail.vue +29 -26
- package/src/Edit.vue +32 -32
- package/src/Form.vue +45 -29
- package/src/SearchList.vue +41 -40
- package/src/SearchTree.vue +51 -51
- package/src/Tabs.vue +19 -19
- package/src/centaline/api/index.js +249 -249
- package/src/centaline/comfirm/index.js +11 -11
- package/src/centaline/comfirm/src/comfirm.vue +44 -44
- package/src/centaline/common/index.js +738 -738
- package/src/centaline/css/common.css +752 -748
- package/src/centaline/css/max.css +208 -208
- package/src/centaline/dialogList/index.js +11 -11
- package/src/centaline/dialogList/src/dialog.vue +210 -210
- package/src/centaline/dialogList/src/dialogList.vue +65 -65
- package/src/centaline/dialogList/src/dialogNew.vue +78 -78
- package/src/centaline/dialogList/src/drag.js +77 -77
- package/src/centaline/directives/index.js +23 -23
- package/src/centaline/dynamicBtn/index.js +11 -11
- package/src/centaline/dynamicBtn/src/dynamicBtn.vue +100 -100
- package/src/centaline/dynamicCb/index.js +11 -11
- package/src/centaline/dynamicCb/src/dynamicCb.vue +72 -72
- package/src/centaline/dynamicCheckbox/index.js +11 -11
- package/src/centaline/dynamicCheckbox/src/dynamicCheckbox.vue +128 -128
- package/src/centaline/dynamicComboBoxWithTextBox/index.js +11 -11
- package/src/centaline/dynamicComboBoxWithTextBox/src/dynamicComboBoxWithTextBox.vue +240 -240
- package/src/centaline/dynamicD/index.js +11 -11
- package/src/centaline/dynamicD/src/dynamicD.vue +92 -92
- package/src/centaline/dynamicDetail/index.js +10 -10
- package/src/centaline/dynamicDetail/src/dynamicDetail.vue +40 -40
- package/src/centaline/dynamicDetail/src/dynamicPropertyDetailOFI.vue +1280 -1280
- package/src/centaline/dynamicDetail/src/dynamicPropertyDetailRET.vue +1346 -1293
- package/src/centaline/dynamicDrop/index.js +11 -11
- package/src/centaline/dynamicDrop/src/dynamicDrop.vue +54 -54
- package/src/centaline/dynamicDtd/index.js +11 -11
- package/src/centaline/dynamicDtd/src/dynamicDtd.vue +125 -125
- package/src/centaline/dynamicDtd/src/dynamicDtdOld.vue +93 -93
- package/src/centaline/dynamicFile/index.js +11 -11
- package/src/centaline/dynamicFile/src/dynamicFile.vue +289 -288
- package/src/centaline/dynamicForm/index.js +24 -24
- package/src/centaline/dynamicForm/src/dynamicForm.vue +564 -564
- package/src/centaline/dynamicForm/src/dynamicFormList.vue +209 -209
- package/src/centaline/dynamicForm/src/dynamicFormListTable.vue +376 -376
- package/src/centaline/dynamicGp/index.js +11 -11
- package/src/centaline/dynamicGp/src/dynamicGp.vue +27 -27
- package/src/centaline/dynamicHyperLink/index.js +10 -10
- package/src/centaline/dynamicHyperLink/src/dynamicHyperLink.vue +54 -54
- package/src/centaline/dynamicInput/index.js +35 -35
- package/src/centaline/dynamicInput/src/dynamicInput.vue +35 -35
- package/src/centaline/dynamicInputNumber/index.js +11 -11
- package/src/centaline/dynamicInputNumber/src/dynamicInputNumber.vue +157 -157
- package/src/centaline/dynamicIti/index.js +11 -11
- package/src/centaline/dynamicIti/src/dynamicIti.vue +148 -148
- package/src/centaline/dynamicL/index.js +11 -11
- package/src/centaline/dynamicL/src/dynamicL.vue +37 -37
- package/src/centaline/dynamicLabel/index.js +11 -11
- package/src/centaline/dynamicLabel/src/dynamicLabel.vue +73 -73
- package/src/centaline/dynamicLs/index.js +22 -22
- package/src/centaline/dynamicLs/src/dynamicLs.vue +233 -233
- package/src/centaline/dynamicMo/index.js +13 -13
- package/src/centaline/dynamicMo/src/dynamicMo.vue +421 -421
- package/src/centaline/dynamicMt/index.js +11 -11
- package/src/centaline/dynamicMt/src/dynamicMt.vue +44 -44
- package/src/centaline/dynamicPlaceHolder/index.js +10 -10
- package/src/centaline/dynamicPlaceHolder/src/dynamicPlaceHolder.vue +29 -29
- package/src/centaline/dynamicPopupSearchList/index.js +11 -11
- package/src/centaline/dynamicPopupSearchList/src/dynamicPopupSearchList.vue +157 -157
- package/src/centaline/dynamicPopupSearchList/src/dynamicPopupSearchListTable.vue +239 -239
- package/src/centaline/dynamicRichText/index.js +11 -11
- package/src/centaline/dynamicRichText/src/dynamicRichText.vue +33 -33
- package/src/centaline/dynamicSearchList/index.js +11 -11
- package/src/centaline/dynamicSearchList/src/dynamicSearchCategory.vue +121 -121
- package/src/centaline/dynamicSearchList/src/dynamicSearchList.vue +135 -135
- package/src/centaline/dynamicSearchList/src/dynamicSearchScreen.vue +206 -206
- package/src/centaline/dynamicSearchList/src/dynamicSearchTable.vue +1082 -1069
- package/src/centaline/dynamicSearchList/src/dynamicTableStatistics.vue +30 -30
- package/src/centaline/dynamicSearchList/src/dynamicTableTip.vue +46 -46
- package/src/centaline/dynamicSearchList/src/dynamicTableToolbar.vue +61 -61
- package/src/centaline/dynamicSeg/index.js +11 -11
- package/src/centaline/dynamicSeg/src/dynamicSeg.vue +100 -100
- package/src/centaline/dynamicSensitiveEye/index.js +11 -11
- package/src/centaline/dynamicSensitiveEye/src/dynamicSensitiveEye.vue +74 -74
- package/src/centaline/dynamicSo/index.js +14 -14
- package/src/centaline/dynamicSo/src/dynamicSo.vue +329 -328
- package/src/centaline/dynamicSo/src/dynamicSo/345/211/257/346/234/254.vue +69 -69
- package/src/centaline/dynamicSos/index.js +14 -14
- package/src/centaline/dynamicSos/src/dynamicSos - /345/244/215/345/210/266.vue" +223 -223
- package/src/centaline/dynamicSos/src/dynamicSos.vue +261 -260
- package/src/centaline/dynamicSw/index.js +11 -11
- package/src/centaline/dynamicSw/src/dynamicSw.vue +74 -74
- package/src/centaline/dynamicT/index.js +11 -11
- package/src/centaline/dynamicT/src/dynamicT.vue +79 -79
- package/src/centaline/dynamicTab/index.js +11 -11
- package/src/centaline/dynamicTab/src/dynamicTab.vue +49 -49
- package/src/centaline/dynamicTabs/index.js +11 -11
- package/src/centaline/dynamicTabs/src/dynamicTabs.vue +69 -69
- package/src/centaline/dynamicTags/index.js +13 -13
- package/src/centaline/dynamicTags/src/dynamicTags - /345/244/215/345/210/266.vue" +391 -391
- package/src/centaline/dynamicTags/src/dynamicTags.vue +427 -427
- package/src/centaline/dynamicTimeSelect/index.js +11 -11
- package/src/centaline/dynamicTimeSelect/src/dynamicTimeSelect.vue +141 -141
- package/src/centaline/dynamicTree/index.js +11 -11
- package/src/centaline/dynamicTree/src/dynamicSearchTree.vue +66 -66
- package/src/centaline/dynamicTree/src/dynamicTree.vue +233 -233
- package/src/centaline/dynamicTree/src/dynamicTreeList.vue +74 -74
- package/src/centaline/formData/index.js +290 -290
- package/src/centaline/imgPreview/index.js +42 -42
- package/src/centaline/imgPreview/src/imgPreview.vue +26 -26
- package/src/centaline/index.js +51 -51
- package/src/centaline/loader/index.js +157 -157
- package/src/centaline/loader/src/ctl/Base.js +270 -261
- package/src/centaline/loader/src/ctl/Button.js +44 -44
- package/src/centaline/loader/src/ctl/Cb.js +27 -27
- package/src/centaline/loader/src/ctl/Checkbox.js +107 -107
- package/src/centaline/loader/src/ctl/ComboBoxWithTextBox.js +162 -162
- package/src/centaline/loader/src/ctl/D.js +31 -31
- package/src/centaline/loader/src/ctl/Detail.js +228 -175
- package/src/centaline/loader/src/ctl/Dtd.js +115 -115
- package/src/centaline/loader/src/ctl/DtdOld.js +129 -129
- package/src/centaline/loader/src/ctl/File.js +292 -292
- package/src/centaline/loader/src/ctl/Form.js +380 -380
- package/src/centaline/loader/src/ctl/FormList.js +428 -428
- package/src/centaline/loader/src/ctl/GM.js +20 -20
- package/src/centaline/loader/src/ctl/Gp.js +9 -9
- package/src/centaline/loader/src/ctl/Hd.js +13 -13
- package/src/centaline/loader/src/ctl/HyperLink.js +24 -24
- package/src/centaline/loader/src/ctl/InputNumber.js +51 -51
- package/src/centaline/loader/src/ctl/Iti.js +108 -108
- package/src/centaline/loader/src/ctl/L.js +18 -18
- package/src/centaline/loader/src/ctl/Mo.js +183 -183
- package/src/centaline/loader/src/ctl/Mt.js +20 -20
- package/src/centaline/loader/src/ctl/PlaceHolder.js +15 -15
- package/src/centaline/loader/src/ctl/Router.js +273 -273
- package/src/centaline/loader/src/ctl/SearchCategory.js +54 -54
- package/src/centaline/loader/src/ctl/SearchScreen.js +236 -236
- package/src/centaline/loader/src/ctl/SearchTable.js +787 -772
- package/src/centaline/loader/src/ctl/Seg.js +37 -37
- package/src/centaline/loader/src/ctl/SensitiveEye.js +65 -65
- package/src/centaline/loader/src/ctl/So.js +117 -117
- package/src/centaline/loader/src/ctl/Sos.js +128 -128
- package/src/centaline/loader/src/ctl/Sw.js +27 -27
- package/src/centaline/loader/src/ctl/T.js +65 -65
- package/src/centaline/loader/src/ctl/Tabs.js +57 -57
- package/src/centaline/loader/src/ctl/Tags.js +191 -191
- package/src/centaline/loader/src/ctl/TimeSelect.js +87 -87
- package/src/centaline/loader/src/ctl/Tree.js +151 -151
- package/src/centaline/loader/src/ctl/Ttts.js +78 -78
- package/src/centaline/loader/src/ctl/lib/Enum.js +580 -563
- package/src/centaline/loader/src/ctl/lib/LibFunction.js +364 -364
- package/src/centaline/loader/src/ctl.js +36 -36
- package/src/centaline/mixins/dynamicElement.js +151 -151
- package/src/centaline/mixins/dynamicSelect.js +84 -84
- package/src/centaline/mixins/emitter.js +33 -33
- package/src/centaline/progress/index.js +11 -11
- package/src/centaline/progress/src/progress.vue +70 -70
- package/src/centaline/quickInput/src/quickInput.vue +64 -64
- package/src/centaline/selectOption/src/selectOption.vue +61 -61
- package/src/centaline/selectOption/src/selectOptionVertical.vue +80 -80
- package/src/centaline/templateControls/index.js +17 -17
- package/src/centaline/templateControls/src/dynamicTableA.vue +20 -20
- package/src/centaline/templateControls/src/dynamicTableCurrency.vue +62 -62
- package/src/centaline/templateControls/src/dynamicTableImg.vue +25 -25
- package/src/centaline/templates/index.js +34 -34
- package/src/centaline/templates/src/ContractSearch.js +67 -67
- package/src/centaline/templates/src/test.js +44 -44
- package/src/centaline/validate/index.js +332 -332
- package/src/main.js +55 -46
- package/src/router/index.js +44 -44
- package/wwwroot/static/centaline/centaline-data-driven.js +1 -1
- package/wwwroot/static/centaline/centaline-data-driven.js.map +1 -1
|
@@ -1,738 +1,738 @@
|
|
|
1
|
-
import Vue from 'vue';
|
|
2
|
-
const common = {
|
|
3
|
-
install(Vue) {
|
|
4
|
-
Vue.prototype.$common = common;
|
|
5
|
-
if (typeof window !== 'undefined') {
|
|
6
|
-
window.$common = common;
|
|
7
|
-
}
|
|
8
|
-
},
|
|
9
|
-
/**
|
|
10
|
-
* @method
|
|
11
|
-
* @param {String} flag 按钮类别标识
|
|
12
|
-
* @returns {String} 对应Element按钮的Type
|
|
13
|
-
* @desc 根据按钮标识获取按钮类别
|
|
14
|
-
*/
|
|
15
|
-
getBtnType(flag) {
|
|
16
|
-
switch (flag) {
|
|
17
|
-
case 'e':
|
|
18
|
-
case 's':
|
|
19
|
-
return 'primary';
|
|
20
|
-
case 'a':
|
|
21
|
-
return 'success';
|
|
22
|
-
case 'i':
|
|
23
|
-
return 'info';
|
|
24
|
-
case 'w':
|
|
25
|
-
return 'warning';
|
|
26
|
-
case 'd':
|
|
27
|
-
return 'danger';
|
|
28
|
-
default:
|
|
29
|
-
return '';
|
|
30
|
-
}
|
|
31
|
-
},
|
|
32
|
-
|
|
33
|
-
/**
|
|
34
|
-
* @method
|
|
35
|
-
* @param {String} className 包含的类名
|
|
36
|
-
* @param {string} type 匹配的元素类别
|
|
37
|
-
* @param {Boolean} [isFirst] 是否只返回第一个元素
|
|
38
|
-
* @description 获取包含指定class名的元素
|
|
39
|
-
* @returns {Array | Element} 返回匹配元素数组或匹配元素
|
|
40
|
-
*/
|
|
41
|
-
getElementByClassName(className, type, isFirst) {
|
|
42
|
-
var rtn = [];
|
|
43
|
-
var elements = [];
|
|
44
|
-
if (type) {
|
|
45
|
-
elements = document.getElementsByTagName(type);
|
|
46
|
-
}
|
|
47
|
-
else {
|
|
48
|
-
elements = document.getElementsByTagName('*');
|
|
49
|
-
}
|
|
50
|
-
|
|
51
|
-
for (var i = 0; i < elements.length; i++) {
|
|
52
|
-
if (elements[i].className.indexOf(className) >= 0) {
|
|
53
|
-
if (isFirst) {
|
|
54
|
-
return elements[i];
|
|
55
|
-
}
|
|
56
|
-
else {
|
|
57
|
-
rtn.push(elements[i]);
|
|
58
|
-
}
|
|
59
|
-
}
|
|
60
|
-
}
|
|
61
|
-
return rtn;
|
|
62
|
-
},
|
|
63
|
-
|
|
64
|
-
/**
|
|
65
|
-
* @method
|
|
66
|
-
* @param {Object} obj 需要深层拷贝的对象
|
|
67
|
-
* @desc 将对象深层拷贝非引用拷贝
|
|
68
|
-
* @returns {Object} 复制的对象
|
|
69
|
-
*/
|
|
70
|
-
deepClone(obj) {
|
|
71
|
-
var sourceHistory = [];
|
|
72
|
-
var cloneHistory = [];
|
|
73
|
-
return this.CloneCode(obj, sourceHistory, cloneHistory);
|
|
74
|
-
},
|
|
75
|
-
|
|
76
|
-
/**
|
|
77
|
-
* @method
|
|
78
|
-
* @param {Object} obj 需要拷贝的对象
|
|
79
|
-
* @param {Array} sourceHistory 元数据临时数据
|
|
80
|
-
* @param {Array} cloneHistory 拷贝临时数据
|
|
81
|
-
* @returns {Object} 返回复制对象
|
|
82
|
-
*/
|
|
83
|
-
CloneCode(obj, sourceHistory, cloneHistory) {
|
|
84
|
-
var rtn;
|
|
85
|
-
switch (typeof obj) {
|
|
86
|
-
case 'boolean':
|
|
87
|
-
case 'number':
|
|
88
|
-
case 'string':
|
|
89
|
-
case 'symbol':
|
|
90
|
-
case 'undefined':
|
|
91
|
-
rtn = obj;
|
|
92
|
-
break;
|
|
93
|
-
case 'object':
|
|
94
|
-
var hisIndex = sourceHistory.indexOf(obj);
|
|
95
|
-
if (hisIndex >= 0) {
|
|
96
|
-
rtn = cloneHistory[hisIndex];
|
|
97
|
-
}
|
|
98
|
-
else {
|
|
99
|
-
if (Object.prototype.toString.call(obj) === '[object Object]') {
|
|
100
|
-
rtn = {};
|
|
101
|
-
for (var keyObj in obj) {
|
|
102
|
-
rtn[keyObj] = this.CloneCode(obj[keyObj], sourceHistory, cloneHistory);
|
|
103
|
-
}
|
|
104
|
-
}
|
|
105
|
-
else if (Object.prototype.toString.call(obj) === '[object Array]') {
|
|
106
|
-
rtn = [];
|
|
107
|
-
for (var keyArray in obj) {
|
|
108
|
-
rtn.push(this.CloneCode(obj[keyArray],sourceHistory, cloneHistory));
|
|
109
|
-
}
|
|
110
|
-
}
|
|
111
|
-
}
|
|
112
|
-
sourceHistory.push(obj);
|
|
113
|
-
cloneHistory.push(rtn);
|
|
114
|
-
break;
|
|
115
|
-
}
|
|
116
|
-
return rtn;
|
|
117
|
-
},
|
|
118
|
-
|
|
119
|
-
/**
|
|
120
|
-
* @method
|
|
121
|
-
* @param {Element} element 指定的元素
|
|
122
|
-
* @desc 查找指定元素上边距
|
|
123
|
-
* @returns {Number} 返回上边距
|
|
124
|
-
*/
|
|
125
|
-
getElementPageTop(element) {
|
|
126
|
-
var actualTop = element.offsetTop;
|
|
127
|
-
var parent = element.offsetParent;
|
|
128
|
-
while (parent !== null) {
|
|
129
|
-
actualTop += parent.offsetTop + (parent.offsetHeight - parent.clientHeight) / 2;
|
|
130
|
-
parent = parent.offsetParent;
|
|
131
|
-
}
|
|
132
|
-
return actualTop;
|
|
133
|
-
},
|
|
134
|
-
|
|
135
|
-
/**
|
|
136
|
-
* @method
|
|
137
|
-
* @param {Element} element 指定的元素
|
|
138
|
-
* @desc 查找指定元素左边距
|
|
139
|
-
* @returns {Number} 返回左边距
|
|
140
|
-
*/
|
|
141
|
-
getElementPageLeft(element) {
|
|
142
|
-
var actualLeft = element.offsetLeft;
|
|
143
|
-
var parent = element.offsetParent;
|
|
144
|
-
while (parent !== null) {
|
|
145
|
-
actualLeft += parent.offsetLeft + (parent.offsetWidth - parent.clientWidth) / 2;
|
|
146
|
-
parent = parent.offsetParent;
|
|
147
|
-
}
|
|
148
|
-
return actualLeft;
|
|
149
|
-
},
|
|
150
|
-
|
|
151
|
-
/**
|
|
152
|
-
* @method
|
|
153
|
-
* @desc 获取滚动条宽度
|
|
154
|
-
* @returns {Number} 滚动条宽度
|
|
155
|
-
*/
|
|
156
|
-
getScrollbarWidth() {
|
|
157
|
-
var odiv = document.createElement('div'),//创建一个div
|
|
158
|
-
styles = {
|
|
159
|
-
width: '100px',
|
|
160
|
-
height: '100px',
|
|
161
|
-
overflowY: 'scroll'//让他有滚动条
|
|
162
|
-
}, i, scrollbarWidth;
|
|
163
|
-
for (i in styles) odiv.style[i] = styles[i];
|
|
164
|
-
document.body.appendChild(odiv);//把div添加到body中
|
|
165
|
-
scrollbarWidth = odiv.offsetWidth - odiv.clientWidth;//相减
|
|
166
|
-
document.body.removeChild(odiv);
|
|
167
|
-
return scrollbarWidth;//返回滚动条宽度
|
|
168
|
-
},
|
|
169
|
-
|
|
170
|
-
/**
|
|
171
|
-
* @method
|
|
172
|
-
* @param {Element} element 指定元素
|
|
173
|
-
* @param {String} direction 横纵方向
|
|
174
|
-
* @desc 获取指定元素是否有滚动条
|
|
175
|
-
* @return {Boolean} 返回是否
|
|
176
|
-
*/
|
|
177
|
-
hasScrolled(element, direction) {
|
|
178
|
-
if (direction === 'Y') {
|
|
179
|
-
return element.scrollHeight > element.clientHeight;
|
|
180
|
-
} else if (direction === 'X') {
|
|
181
|
-
return element.scrollWidth > element.clientWidth;
|
|
182
|
-
}
|
|
183
|
-
},
|
|
184
|
-
|
|
185
|
-
/**
|
|
186
|
-
* @method
|
|
187
|
-
* @param {Object} vmodel 弹窗的Model驱动数据
|
|
188
|
-
* @desc 打开弹窗
|
|
189
|
-
*/
|
|
190
|
-
openDialog(vmodel) {
|
|
191
|
-
|
|
192
|
-
//this.dialogList.List.push(vmodel);
|
|
193
|
-
this.dialogList.addDialog(vmodel);
|
|
194
|
-
},
|
|
195
|
-
|
|
196
|
-
/**
|
|
197
|
-
* @method
|
|
198
|
-
* @param {Object} vmodel 弹窗的驱动数据对象
|
|
199
|
-
* @desc 关闭指定弹窗
|
|
200
|
-
*/
|
|
201
|
-
closeDialog(vmodel) {
|
|
202
|
-
|
|
203
|
-
if (vmodel) {
|
|
204
|
-
if (vmodel.name === 'ct-comfirm' || vmodel.$options.name === 'ctDialog' || vmodel.$options.name === 'ct-dialog') {
|
|
205
|
-
//vmodel.dialogTableVisible = false;
|
|
206
|
-
this.dialogList.deleteDialog(vmodel);
|
|
207
|
-
return;
|
|
208
|
-
}
|
|
209
|
-
else {
|
|
210
|
-
this.closeDialog(vmodel.$parent);
|
|
211
|
-
}
|
|
212
|
-
}
|
|
213
|
-
else {
|
|
214
|
-
return;
|
|
215
|
-
}
|
|
216
|
-
},
|
|
217
|
-
|
|
218
|
-
/**
|
|
219
|
-
* @method
|
|
220
|
-
* @param {Object} message 提示信息
|
|
221
|
-
* @param {Object} title 提示框标题
|
|
222
|
-
* @param {Object} options 参数 如confirmButtonText,cancelButtonText
|
|
223
|
-
* @desc 确认框
|
|
224
|
-
*/
|
|
225
|
-
confirm(message, title, options) {
|
|
226
|
-
let self = this;
|
|
227
|
-
|
|
228
|
-
return new Promise((resolve,reject) => {
|
|
229
|
-
var dialogOption = {
|
|
230
|
-
title: title,
|
|
231
|
-
name:'ct-comfirm',
|
|
232
|
-
vmodel:{},
|
|
233
|
-
content: [{
|
|
234
|
-
component: 'ct-comfirm',
|
|
235
|
-
attrs: {
|
|
236
|
-
options:options,
|
|
237
|
-
text:message,
|
|
238
|
-
width: '400px',
|
|
239
|
-
height: '95px'
|
|
240
|
-
},
|
|
241
|
-
on: {
|
|
242
|
-
access(){
|
|
243
|
-
self.closeDialog(dialogOption);
|
|
244
|
-
resolve();
|
|
245
|
-
},
|
|
246
|
-
cancel()
|
|
247
|
-
{
|
|
248
|
-
self.closeDialog(dialogOption);
|
|
249
|
-
reject()
|
|
250
|
-
},
|
|
251
|
-
|
|
252
|
-
}
|
|
253
|
-
}]
|
|
254
|
-
};
|
|
255
|
-
this.openDialog(dialogOption);
|
|
256
|
-
})
|
|
257
|
-
|
|
258
|
-
},
|
|
259
|
-
|
|
260
|
-
/**
|
|
261
|
-
* @method
|
|
262
|
-
* @param {Object} evControl 指定Vue对象
|
|
263
|
-
* @desc 获取指定组件所在的Tab对象
|
|
264
|
-
* @return {Object} 返回Tab对象
|
|
265
|
-
*/
|
|
266
|
-
getParentPane(evControl) {
|
|
267
|
-
var parent = evControl.$parent;
|
|
268
|
-
if (parent) {
|
|
269
|
-
if (parent.$options.name === 'ElTabPane') {
|
|
270
|
-
return parent;
|
|
271
|
-
}
|
|
272
|
-
else if (evControl.$options.name === 'ctDialog') {
|
|
273
|
-
return evControl.vmodel.pane;
|
|
274
|
-
}
|
|
275
|
-
else if (parent.$options.name === 'DataDrivenSearch') {
|
|
276
|
-
return parent;
|
|
277
|
-
}
|
|
278
|
-
else if (parent.$options.name === 'DataDrivenForm') {
|
|
279
|
-
return parent;
|
|
280
|
-
}
|
|
281
|
-
else {
|
|
282
|
-
return this.getParentPane(parent);
|
|
283
|
-
}
|
|
284
|
-
}
|
|
285
|
-
},
|
|
286
|
-
|
|
287
|
-
//执行忙碌标识
|
|
288
|
-
evalBizy: false,
|
|
289
|
-
|
|
290
|
-
/**
|
|
291
|
-
* @method
|
|
292
|
-
* @param {String} code 执行代码
|
|
293
|
-
* @desc 执行动态脚本
|
|
294
|
-
* @returns {obj} 执行脚本
|
|
295
|
-
*/
|
|
296
|
-
eval(code) {
|
|
297
|
-
while (this.evalBizy) {
|
|
298
|
-
//sleep
|
|
299
|
-
}
|
|
300
|
-
this.evalBizy = true;
|
|
301
|
-
var rtn = {};
|
|
302
|
-
var currentKey = [];
|
|
303
|
-
for (var k in window) {
|
|
304
|
-
currentKey.push(k);
|
|
305
|
-
}
|
|
306
|
-
if (window.attachEvent && !window.opera) {
|
|
307
|
-
//ie
|
|
308
|
-
execScript(code);
|
|
309
|
-
} else {
|
|
310
|
-
//not ie
|
|
311
|
-
window.eval(code);
|
|
312
|
-
}
|
|
313
|
-
for (var j in window) {
|
|
314
|
-
if (currentKey.indexOf(j) < 0) {
|
|
315
|
-
if (typeof window[j] === 'function') {
|
|
316
|
-
rtn[j] = common.initFunction(window[j]);
|
|
317
|
-
}
|
|
318
|
-
else {
|
|
319
|
-
rtn[j] = window[j];
|
|
320
|
-
}
|
|
321
|
-
delete window[j];
|
|
322
|
-
}
|
|
323
|
-
}
|
|
324
|
-
this.evalBizy = false;
|
|
325
|
-
return rtn;
|
|
326
|
-
},
|
|
327
|
-
|
|
328
|
-
/**
|
|
329
|
-
* @method
|
|
330
|
-
* @param {Function} f 指定函数
|
|
331
|
-
* @desc 将指定函数外套用一层逻辑,默认无参数时传入ID
|
|
332
|
-
* @returns {obj} 返回值
|
|
333
|
-
*/
|
|
334
|
-
initFunction(f) {
|
|
335
|
-
return function () {
|
|
336
|
-
if (arguments.length === 0) {
|
|
337
|
-
return f($fd);
|
|
338
|
-
}
|
|
339
|
-
else {
|
|
340
|
-
var exStr = 'f(';
|
|
341
|
-
for (var i = 0; i < arguments.length; i++) {
|
|
342
|
-
exStr += 'arguments[' + i + ']';
|
|
343
|
-
if (i !== arguments.length - 1) {
|
|
344
|
-
exStr += ',';
|
|
345
|
-
}
|
|
346
|
-
else {
|
|
347
|
-
exStr += ');';
|
|
348
|
-
}
|
|
349
|
-
}
|
|
350
|
-
return eval(exStr);
|
|
351
|
-
}
|
|
352
|
-
};
|
|
353
|
-
},
|
|
354
|
-
|
|
355
|
-
/**
|
|
356
|
-
* @method
|
|
357
|
-
* @param {String} code 执行脚本
|
|
358
|
-
* @desc 执行动态脚本,装载自定义方法和参数在window上(这样使用自定义对象时,不需要this.了)
|
|
359
|
-
* @returns {obj} 返回值
|
|
360
|
-
*/
|
|
361
|
-
excute(code) {
|
|
362
|
-
var self = this;
|
|
363
|
-
common.with(self);
|
|
364
|
-
let rtn = eval(code);
|
|
365
|
-
common.unWith(self);
|
|
366
|
-
|
|
367
|
-
return rtn;
|
|
368
|
-
},
|
|
369
|
-
|
|
370
|
-
/**
|
|
371
|
-
* @method
|
|
372
|
-
* @param {Function} fun 执行方法
|
|
373
|
-
* @param {Object} para 执行方法的参数
|
|
374
|
-
* @desc 执行方法,装载自定义方法和参数在window上
|
|
375
|
-
* @returns {obj} 返回值
|
|
376
|
-
*/
|
|
377
|
-
excuteFun(fun, para) {
|
|
378
|
-
var self = this;
|
|
379
|
-
common.with(self);
|
|
380
|
-
let rtn = fun(para);
|
|
381
|
-
common.unWith(self);
|
|
382
|
-
|
|
383
|
-
return rtn;
|
|
384
|
-
},
|
|
385
|
-
|
|
386
|
-
/**
|
|
387
|
-
* @method
|
|
388
|
-
* @param {String} fun 执行方法字符串
|
|
389
|
-
* @param {Object} para 执行方法的参数
|
|
390
|
-
* @desc 执行方法,装载自定义方法和参数在window上
|
|
391
|
-
* @returns {obj} 返回值
|
|
392
|
-
*/
|
|
393
|
-
excuteFunStr(funStr, para) {
|
|
394
|
-
var self = this;
|
|
395
|
-
common.with(self);
|
|
396
|
-
let rtn = eval(funStr + '(para)');
|
|
397
|
-
common.unWith(self);
|
|
398
|
-
|
|
399
|
-
return rtn;
|
|
400
|
-
},
|
|
401
|
-
|
|
402
|
-
/**
|
|
403
|
-
* @method
|
|
404
|
-
* @param {Object} source 作用域对象
|
|
405
|
-
* @desc 装载作用域
|
|
406
|
-
*/
|
|
407
|
-
with(source) {
|
|
408
|
-
if (typeof window !== 'undefined') {
|
|
409
|
-
for (var k in source) {
|
|
410
|
-
window[k] = source[k];
|
|
411
|
-
}
|
|
412
|
-
}
|
|
413
|
-
},
|
|
414
|
-
|
|
415
|
-
/**
|
|
416
|
-
* @method
|
|
417
|
-
* @param {Object} source 作用域对象
|
|
418
|
-
* @desc 卸载作用域对象
|
|
419
|
-
*/
|
|
420
|
-
unWith(source) {
|
|
421
|
-
if (typeof window !== 'undefined') {
|
|
422
|
-
for (var k in source) {
|
|
423
|
-
delete window[k];
|
|
424
|
-
}
|
|
425
|
-
}
|
|
426
|
-
},
|
|
427
|
-
|
|
428
|
-
/**
|
|
429
|
-
* @method
|
|
430
|
-
* @param {String} fileName 保存文件名
|
|
431
|
-
* @param {String} fileContent 文件内容
|
|
432
|
-
* @desc 将字符串转为文件提示下载
|
|
433
|
-
* @returns {obj} 返回值
|
|
434
|
-
*/
|
|
435
|
-
saveFile(fileName, fileContent) {
|
|
436
|
-
var byteArr = new Array(fileContent.length);
|
|
437
|
-
for (var i = 0; i < fileContent.length; i++) {
|
|
438
|
-
byteArr[i] = fileContent.charCodeAt(i);
|
|
439
|
-
}
|
|
440
|
-
|
|
441
|
-
var blob = new Blob([new Uint8Array(byteArr)], { type: "application/ms-excel" });
|
|
442
|
-
var url = window.URL.createObjectURL(blob);
|
|
443
|
-
|
|
444
|
-
var a = document.createElement("a");
|
|
445
|
-
if ("download" in a) { // 支持download属性
|
|
446
|
-
document.body.appendChild(a);
|
|
447
|
-
a.style = "display:none";
|
|
448
|
-
a.href = url;
|
|
449
|
-
//download属性IE不支持。。。
|
|
450
|
-
a.download = fileName;
|
|
451
|
-
a.click(); // 触发下载
|
|
452
|
-
//revokeObjectURL会导致firefox不能下载。。。
|
|
453
|
-
//window.URL.revokeObjectURL(url);
|
|
454
|
-
document.body.removeChild(a);
|
|
455
|
-
}
|
|
456
|
-
else { //IE 10+
|
|
457
|
-
if (typeof navigator !== "undefined" && navigator.msSaveOrOpenBlob) {
|
|
458
|
-
return navigator.msSaveOrOpenBlob(blob, name);
|
|
459
|
-
}
|
|
460
|
-
}
|
|
461
|
-
},
|
|
462
|
-
|
|
463
|
-
/**
|
|
464
|
-
* @method
|
|
465
|
-
* @desc 获取中转API地址
|
|
466
|
-
* @returns {obj} 返回值
|
|
467
|
-
*/
|
|
468
|
-
globalUri() {
|
|
469
|
-
return Vue.prototype.$dataDrivenOpts.baseUrl;
|
|
470
|
-
},
|
|
471
|
-
|
|
472
|
-
/**
|
|
473
|
-
* @method
|
|
474
|
-
* @desc 获取外部配置对象
|
|
475
|
-
* @returns {obj} 返回值
|
|
476
|
-
*/
|
|
477
|
-
getDataDrivenOpts() {
|
|
478
|
-
return Vue.prototype.$dataDrivenOpts;
|
|
479
|
-
},
|
|
480
|
-
|
|
481
|
-
/**
|
|
482
|
-
* @method
|
|
483
|
-
* @param {String} str 需要计算的字符串
|
|
484
|
-
* @desc 获取字符串的字节数。
|
|
485
|
-
* @returns {obj} 返回值
|
|
486
|
-
*/
|
|
487
|
-
strCharLen(str) {
|
|
488
|
-
var len = 0;
|
|
489
|
-
if (str) {
|
|
490
|
-
for (var i = 0; i < str.length; i++) {
|
|
491
|
-
var c = str.charCodeAt(i);
|
|
492
|
-
//单字节加1
|
|
493
|
-
if ((c >= 0x0001 && c <= 0x007e) || (0xff60 <= c && c <= 0xff9f)) {
|
|
494
|
-
len++;
|
|
495
|
-
}
|
|
496
|
-
else {
|
|
497
|
-
len += 2;
|
|
498
|
-
}
|
|
499
|
-
}
|
|
500
|
-
}
|
|
501
|
-
|
|
502
|
-
return len;
|
|
503
|
-
},
|
|
504
|
-
/**
|
|
505
|
-
* @method
|
|
506
|
-
* @param {Object} obj 需要克隆的对象
|
|
507
|
-
* @desc 深度克隆对象。
|
|
508
|
-
* @returns {Object} 克隆好的对象。
|
|
509
|
-
*/
|
|
510
|
-
cloneObject(obj) {
|
|
511
|
-
let newObj = Array.isArray(obj) ? [] : {}
|
|
512
|
-
|
|
513
|
-
if (obj && typeof obj === "object") {
|
|
514
|
-
for (let key in obj) {
|
|
515
|
-
if (obj.hasOwnProperty(key)) {
|
|
516
|
-
newObj[key] = (obj && typeof obj[key] === 'object') ? this.cloneObject(obj[key]) : obj[key];
|
|
517
|
-
}
|
|
518
|
-
}
|
|
519
|
-
}
|
|
520
|
-
return newObj
|
|
521
|
-
},
|
|
522
|
-
/**
|
|
523
|
-
* @method
|
|
524
|
-
* @param {Number} total 滚动的位置
|
|
525
|
-
* @desc 设置页面滚动。
|
|
526
|
-
*/
|
|
527
|
-
setScrollTop(total) {
|
|
528
|
-
if (document.getElementById("form-app")) {
|
|
529
|
-
document.getElementById("form-app").scrollTop = total;
|
|
530
|
-
}
|
|
531
|
-
else if (window.scrollTo) {
|
|
532
|
-
window.scrollTo(0, total)
|
|
533
|
-
}
|
|
534
|
-
else {
|
|
535
|
-
// Chrome
|
|
536
|
-
document.body.scrollTop = total
|
|
537
|
-
// Firefox
|
|
538
|
-
document.documentElement.scrollTop = total
|
|
539
|
-
// Safari
|
|
540
|
-
window.pageYOffset = total
|
|
541
|
-
}
|
|
542
|
-
},
|
|
543
|
-
|
|
544
|
-
/**
|
|
545
|
-
* 格式化日期
|
|
546
|
-
* @param date 日期
|
|
547
|
-
* @param format 格式化样式,例如yyyy-MM-dd HH:mm:ss E
|
|
548
|
-
* @return 格式化后的日期
|
|
549
|
-
*/
|
|
550
|
-
formatDate: function (date, format) {
|
|
551
|
-
var v = "";
|
|
552
|
-
if (typeof date === "string" || typeof date !== "object") {
|
|
553
|
-
return;
|
|
554
|
-
}
|
|
555
|
-
if (date == null) return "";
|
|
556
|
-
|
|
557
|
-
var year = date.getFullYear();
|
|
558
|
-
var month = date.getMonth() + 1;
|
|
559
|
-
var day = date.getDate();
|
|
560
|
-
var hour = date.getHours();
|
|
561
|
-
var minute = date.getMinutes();
|
|
562
|
-
var second = date.getSeconds();
|
|
563
|
-
var weekDay = date.getDay();
|
|
564
|
-
var ms = date.getMilliseconds();
|
|
565
|
-
var weekDayString = "";
|
|
566
|
-
|
|
567
|
-
if (weekDay === 1) {
|
|
568
|
-
weekDayString = "星期一";
|
|
569
|
-
} else if (weekDay === 2) {
|
|
570
|
-
weekDayString = "星期二";
|
|
571
|
-
} else if (weekDay === 3) {
|
|
572
|
-
weekDayString = "星期三";
|
|
573
|
-
} else if (weekDay === 4) {
|
|
574
|
-
weekDayString = "星期四";
|
|
575
|
-
} else if (weekDay === 5) {
|
|
576
|
-
weekDayString = "星期五";
|
|
577
|
-
} else if (weekDay === 6) {
|
|
578
|
-
weekDayString = "星期六";
|
|
579
|
-
} else if (weekDay === 7) {
|
|
580
|
-
weekDayString = "星期日";
|
|
581
|
-
}
|
|
582
|
-
|
|
583
|
-
v = format;
|
|
584
|
-
//Year
|
|
585
|
-
v = v.replace(/yyyy/g, year);
|
|
586
|
-
v = v.replace(/YYYY/g, year);
|
|
587
|
-
v = v.replace(/yy/g, (year + "").substring(2, 4));
|
|
588
|
-
v = v.replace(/YY/g, (year + "").substring(2, 4));
|
|
589
|
-
|
|
590
|
-
//Month
|
|
591
|
-
var monthStr = ("0" + month);
|
|
592
|
-
v = v.replace(/MM/g, monthStr.substring(monthStr.length - 2));
|
|
593
|
-
|
|
594
|
-
//Day
|
|
595
|
-
var dayStr = ("0" + day);
|
|
596
|
-
v = v.replace(/dd/g, dayStr.substring(dayStr.length - 2));
|
|
597
|
-
|
|
598
|
-
//hour
|
|
599
|
-
var hourStr = ("0" + hour);
|
|
600
|
-
v = v.replace(/HH/g, hourStr.substring(hourStr.length - 2));
|
|
601
|
-
v = v.replace(/hh/g, hourStr.substring(hourStr.length - 2));
|
|
602
|
-
|
|
603
|
-
//minute
|
|
604
|
-
var minuteStr = ("0" + minute);
|
|
605
|
-
v = v.replace(/mm/g, minuteStr.substring(minuteStr.length - 2));
|
|
606
|
-
|
|
607
|
-
//Millisecond
|
|
608
|
-
v = v.replace(/sss/g, ms);
|
|
609
|
-
v = v.replace(/SSS/g, ms);
|
|
610
|
-
|
|
611
|
-
//second
|
|
612
|
-
var secondStr = ("0" + second);
|
|
613
|
-
v = v.replace(/ss/g, secondStr.substring(secondStr.length - 2));
|
|
614
|
-
v = v.replace(/SS/g, secondStr.substring(secondStr.length - 2));
|
|
615
|
-
|
|
616
|
-
//weekDay
|
|
617
|
-
v = v.replace(/E/g, weekDayString);
|
|
618
|
-
return v;
|
|
619
|
-
},
|
|
620
|
-
|
|
621
|
-
|
|
622
|
-
/**
|
|
623
|
-
* @method
|
|
624
|
-
* @param {String} str 需要转换的字符串
|
|
625
|
-
* @desc 首字母转小写。
|
|
626
|
-
*/
|
|
627
|
-
initialsToUpperCase(str) {
|
|
628
|
-
if (typeof str === 'undefined') {
|
|
629
|
-
return str;
|
|
630
|
-
}
|
|
631
|
-
let char = str.charAt(0);
|
|
632
|
-
let charUpper = char.toLowerCase();
|
|
633
|
-
str = charUpper + str.slice(1);
|
|
634
|
-
return str;
|
|
635
|
-
},
|
|
636
|
-
|
|
637
|
-
/**
|
|
638
|
-
* @method
|
|
639
|
-
* @param {Number} value 需要转换的字符串
|
|
640
|
-
* @param {Number} num 小数点位数
|
|
641
|
-
* @param {Number} oldValue 不是小数时 替换成这个数
|
|
642
|
-
* @desc 字符串转数字(保留num位小数)。
|
|
643
|
-
*/
|
|
644
|
-
numFloat(value, dc, oldValue){
|
|
645
|
-
//value = value.replace(/[^\d.]/g, ""); //清除"数字"和"."以外的字符
|
|
646
|
-
//value = value.replace(/^\./g, ""); //验证第一个字符是数字而不是.
|
|
647
|
-
//value = value.replace(/\.{2,}/g, "."); //只保留第一个. 清除多余的.
|
|
648
|
-
//value = value.replace(".", "$#$").replace(/\./g, "").replace("$#$", ".");//只允许输入一个小数点
|
|
649
|
-
//value = value.replace(/^(\-)*(\d+)\.(\d{0,${num}}).*$/, '$1$2.$3'); //只能输入n个小数 正则无法用变量
|
|
650
|
-
//if (value.indexOf(".") !== -1 && value.indexOf(".") !== value.length - 1 && value.indexOf(".") < value.length - num - 1 && num && num > 0) {
|
|
651
|
-
// value = Math.floor(value * Math.pow(10, num)) / Math.pow(10, num);
|
|
652
|
-
//}
|
|
653
|
-
// var reg = /^[0-9]+$|^[0-9]+\.[0-9]*$|^[0-9]{1,3}([,'][0-9]{3})+$|^[0-9]{1,3}([,'][0-9]{3})+\.[0-9]*$/;
|
|
654
|
-
var reg = '';
|
|
655
|
-
if (dc == undefined || dc == "" || dc === "0") {
|
|
656
|
-
reg = /^(\-)?\d*$/;
|
|
657
|
-
}
|
|
658
|
-
else{
|
|
659
|
-
if(dc===-1)dc=12;
|
|
660
|
-
reg = new RegExp("^(\\-)?\\d*[.]{0,1}(\\d{1," + dc + "})?$");
|
|
661
|
-
}
|
|
662
|
-
if (value === '' || reg.test(value)) {
|
|
663
|
-
// if (value.indexOf(".") !== -1 && value.indexOf(".") !== value.length - 1 && value.indexOf(".") < value.length - num - 1 && num && num > 0) {
|
|
664
|
-
// value = oldValue;
|
|
665
|
-
// }
|
|
666
|
-
}
|
|
667
|
-
else {
|
|
668
|
-
value = oldValue;
|
|
669
|
-
}
|
|
670
|
-
|
|
671
|
-
return value.toString();
|
|
672
|
-
},
|
|
673
|
-
|
|
674
|
-
/**
|
|
675
|
-
* @method
|
|
676
|
-
* @param {Number} value 需要转换的字符串
|
|
677
|
-
* @param {Number} num 小数点位数
|
|
678
|
-
* @desc 字符串转数字(保留num位小数)。
|
|
679
|
-
*/
|
|
680
|
-
numToFloat(value, num){
|
|
681
|
-
if (value && num && num > 0) {
|
|
682
|
-
value =parseFloat(value).toFixed(num);
|
|
683
|
-
}
|
|
684
|
-
return value.toString();
|
|
685
|
-
},
|
|
686
|
-
|
|
687
|
-
|
|
688
|
-
/**
|
|
689
|
-
* @method
|
|
690
|
-
* @param {String} ext 后缀
|
|
691
|
-
* @desc 判断是否是图片格式。
|
|
692
|
-
*/
|
|
693
|
-
isAssetTypeAnImage(ext) {
|
|
694
|
-
return [
|
|
695
|
-
'png', 'jpg', 'jpeg', 'bmp', 'gif', 'webp', 'psd', 'svg', 'tiff'].
|
|
696
|
-
indexOf(ext.toLowerCase()) !== -1;
|
|
697
|
-
},
|
|
698
|
-
|
|
699
|
-
/**
|
|
700
|
-
* @method
|
|
701
|
-
* @param {String} obj 对象
|
|
702
|
-
* @desc 对象转url参数字符串。
|
|
703
|
-
*/
|
|
704
|
-
objectToQueryStr(obj) {
|
|
705
|
-
if (!obj) {
|
|
706
|
-
return '';
|
|
707
|
-
}
|
|
708
|
-
let query = '?';
|
|
709
|
-
for (let i in obj) {
|
|
710
|
-
query = query + i + '=' + obj[i] + '&'
|
|
711
|
-
}
|
|
712
|
-
query = query.substr(0, query.length - 1);
|
|
713
|
-
return query
|
|
714
|
-
},
|
|
715
|
-
/**
|
|
716
|
-
* @method
|
|
717
|
-
* @param {String} str url字符串
|
|
718
|
-
* @desc url参数字符串转对象。
|
|
719
|
-
*/
|
|
720
|
-
queryStrToObject(str) {
|
|
721
|
-
if (!str) {
|
|
722
|
-
return {};
|
|
723
|
-
}
|
|
724
|
-
var obj = {};
|
|
725
|
-
var arr = str.split("&");
|
|
726
|
-
for (var i = 0; i < arr.length; i++) {
|
|
727
|
-
var res = arr[i].split("=");
|
|
728
|
-
obj[res[0]] = res[1];
|
|
729
|
-
}
|
|
730
|
-
return obj;
|
|
731
|
-
}
|
|
732
|
-
};
|
|
733
|
-
|
|
734
|
-
if (typeof window !== 'undefined' && window.Vue) {
|
|
735
|
-
window.Vue.use(common);
|
|
736
|
-
}
|
|
737
|
-
|
|
738
|
-
export default common;
|
|
1
|
+
import Vue from 'vue';
|
|
2
|
+
const common = {
|
|
3
|
+
install(Vue) {
|
|
4
|
+
Vue.prototype.$common = common;
|
|
5
|
+
if (typeof window !== 'undefined') {
|
|
6
|
+
window.$common = common;
|
|
7
|
+
}
|
|
8
|
+
},
|
|
9
|
+
/**
|
|
10
|
+
* @method
|
|
11
|
+
* @param {String} flag 按钮类别标识
|
|
12
|
+
* @returns {String} 对应Element按钮的Type
|
|
13
|
+
* @desc 根据按钮标识获取按钮类别
|
|
14
|
+
*/
|
|
15
|
+
getBtnType(flag) {
|
|
16
|
+
switch (flag) {
|
|
17
|
+
case 'e':
|
|
18
|
+
case 's':
|
|
19
|
+
return 'primary';
|
|
20
|
+
case 'a':
|
|
21
|
+
return 'success';
|
|
22
|
+
case 'i':
|
|
23
|
+
return 'info';
|
|
24
|
+
case 'w':
|
|
25
|
+
return 'warning';
|
|
26
|
+
case 'd':
|
|
27
|
+
return 'danger';
|
|
28
|
+
default:
|
|
29
|
+
return '';
|
|
30
|
+
}
|
|
31
|
+
},
|
|
32
|
+
|
|
33
|
+
/**
|
|
34
|
+
* @method
|
|
35
|
+
* @param {String} className 包含的类名
|
|
36
|
+
* @param {string} type 匹配的元素类别
|
|
37
|
+
* @param {Boolean} [isFirst] 是否只返回第一个元素
|
|
38
|
+
* @description 获取包含指定class名的元素
|
|
39
|
+
* @returns {Array | Element} 返回匹配元素数组或匹配元素
|
|
40
|
+
*/
|
|
41
|
+
getElementByClassName(className, type, isFirst) {
|
|
42
|
+
var rtn = [];
|
|
43
|
+
var elements = [];
|
|
44
|
+
if (type) {
|
|
45
|
+
elements = document.getElementsByTagName(type);
|
|
46
|
+
}
|
|
47
|
+
else {
|
|
48
|
+
elements = document.getElementsByTagName('*');
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
for (var i = 0; i < elements.length; i++) {
|
|
52
|
+
if (elements[i].className.indexOf(className) >= 0) {
|
|
53
|
+
if (isFirst) {
|
|
54
|
+
return elements[i];
|
|
55
|
+
}
|
|
56
|
+
else {
|
|
57
|
+
rtn.push(elements[i]);
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
return rtn;
|
|
62
|
+
},
|
|
63
|
+
|
|
64
|
+
/**
|
|
65
|
+
* @method
|
|
66
|
+
* @param {Object} obj 需要深层拷贝的对象
|
|
67
|
+
* @desc 将对象深层拷贝非引用拷贝
|
|
68
|
+
* @returns {Object} 复制的对象
|
|
69
|
+
*/
|
|
70
|
+
deepClone(obj) {
|
|
71
|
+
var sourceHistory = [];
|
|
72
|
+
var cloneHistory = [];
|
|
73
|
+
return this.CloneCode(obj, sourceHistory, cloneHistory);
|
|
74
|
+
},
|
|
75
|
+
|
|
76
|
+
/**
|
|
77
|
+
* @method
|
|
78
|
+
* @param {Object} obj 需要拷贝的对象
|
|
79
|
+
* @param {Array} sourceHistory 元数据临时数据
|
|
80
|
+
* @param {Array} cloneHistory 拷贝临时数据
|
|
81
|
+
* @returns {Object} 返回复制对象
|
|
82
|
+
*/
|
|
83
|
+
CloneCode(obj, sourceHistory, cloneHistory) {
|
|
84
|
+
var rtn;
|
|
85
|
+
switch (typeof obj) {
|
|
86
|
+
case 'boolean':
|
|
87
|
+
case 'number':
|
|
88
|
+
case 'string':
|
|
89
|
+
case 'symbol':
|
|
90
|
+
case 'undefined':
|
|
91
|
+
rtn = obj;
|
|
92
|
+
break;
|
|
93
|
+
case 'object':
|
|
94
|
+
var hisIndex = sourceHistory.indexOf(obj);
|
|
95
|
+
if (hisIndex >= 0) {
|
|
96
|
+
rtn = cloneHistory[hisIndex];
|
|
97
|
+
}
|
|
98
|
+
else {
|
|
99
|
+
if (Object.prototype.toString.call(obj) === '[object Object]') {
|
|
100
|
+
rtn = {};
|
|
101
|
+
for (var keyObj in obj) {
|
|
102
|
+
rtn[keyObj] = this.CloneCode(obj[keyObj], sourceHistory, cloneHistory);
|
|
103
|
+
}
|
|
104
|
+
}
|
|
105
|
+
else if (Object.prototype.toString.call(obj) === '[object Array]') {
|
|
106
|
+
rtn = [];
|
|
107
|
+
for (var keyArray in obj) {
|
|
108
|
+
rtn.push(this.CloneCode(obj[keyArray],sourceHistory, cloneHistory));
|
|
109
|
+
}
|
|
110
|
+
}
|
|
111
|
+
}
|
|
112
|
+
sourceHistory.push(obj);
|
|
113
|
+
cloneHistory.push(rtn);
|
|
114
|
+
break;
|
|
115
|
+
}
|
|
116
|
+
return rtn;
|
|
117
|
+
},
|
|
118
|
+
|
|
119
|
+
/**
|
|
120
|
+
* @method
|
|
121
|
+
* @param {Element} element 指定的元素
|
|
122
|
+
* @desc 查找指定元素上边距
|
|
123
|
+
* @returns {Number} 返回上边距
|
|
124
|
+
*/
|
|
125
|
+
getElementPageTop(element) {
|
|
126
|
+
var actualTop = element.offsetTop;
|
|
127
|
+
var parent = element.offsetParent;
|
|
128
|
+
while (parent !== null) {
|
|
129
|
+
actualTop += parent.offsetTop + (parent.offsetHeight - parent.clientHeight) / 2;
|
|
130
|
+
parent = parent.offsetParent;
|
|
131
|
+
}
|
|
132
|
+
return actualTop;
|
|
133
|
+
},
|
|
134
|
+
|
|
135
|
+
/**
|
|
136
|
+
* @method
|
|
137
|
+
* @param {Element} element 指定的元素
|
|
138
|
+
* @desc 查找指定元素左边距
|
|
139
|
+
* @returns {Number} 返回左边距
|
|
140
|
+
*/
|
|
141
|
+
getElementPageLeft(element) {
|
|
142
|
+
var actualLeft = element.offsetLeft;
|
|
143
|
+
var parent = element.offsetParent;
|
|
144
|
+
while (parent !== null) {
|
|
145
|
+
actualLeft += parent.offsetLeft + (parent.offsetWidth - parent.clientWidth) / 2;
|
|
146
|
+
parent = parent.offsetParent;
|
|
147
|
+
}
|
|
148
|
+
return actualLeft;
|
|
149
|
+
},
|
|
150
|
+
|
|
151
|
+
/**
|
|
152
|
+
* @method
|
|
153
|
+
* @desc 获取滚动条宽度
|
|
154
|
+
* @returns {Number} 滚动条宽度
|
|
155
|
+
*/
|
|
156
|
+
getScrollbarWidth() {
|
|
157
|
+
var odiv = document.createElement('div'),//创建一个div
|
|
158
|
+
styles = {
|
|
159
|
+
width: '100px',
|
|
160
|
+
height: '100px',
|
|
161
|
+
overflowY: 'scroll'//让他有滚动条
|
|
162
|
+
}, i, scrollbarWidth;
|
|
163
|
+
for (i in styles) odiv.style[i] = styles[i];
|
|
164
|
+
document.body.appendChild(odiv);//把div添加到body中
|
|
165
|
+
scrollbarWidth = odiv.offsetWidth - odiv.clientWidth;//相减
|
|
166
|
+
document.body.removeChild(odiv);
|
|
167
|
+
return scrollbarWidth;//返回滚动条宽度
|
|
168
|
+
},
|
|
169
|
+
|
|
170
|
+
/**
|
|
171
|
+
* @method
|
|
172
|
+
* @param {Element} element 指定元素
|
|
173
|
+
* @param {String} direction 横纵方向
|
|
174
|
+
* @desc 获取指定元素是否有滚动条
|
|
175
|
+
* @return {Boolean} 返回是否
|
|
176
|
+
*/
|
|
177
|
+
hasScrolled(element, direction) {
|
|
178
|
+
if (direction === 'Y') {
|
|
179
|
+
return element.scrollHeight > element.clientHeight;
|
|
180
|
+
} else if (direction === 'X') {
|
|
181
|
+
return element.scrollWidth > element.clientWidth;
|
|
182
|
+
}
|
|
183
|
+
},
|
|
184
|
+
|
|
185
|
+
/**
|
|
186
|
+
* @method
|
|
187
|
+
* @param {Object} vmodel 弹窗的Model驱动数据
|
|
188
|
+
* @desc 打开弹窗
|
|
189
|
+
*/
|
|
190
|
+
openDialog(vmodel) {
|
|
191
|
+
|
|
192
|
+
//this.dialogList.List.push(vmodel);
|
|
193
|
+
this.dialogList.addDialog(vmodel);
|
|
194
|
+
},
|
|
195
|
+
|
|
196
|
+
/**
|
|
197
|
+
* @method
|
|
198
|
+
* @param {Object} vmodel 弹窗的驱动数据对象
|
|
199
|
+
* @desc 关闭指定弹窗
|
|
200
|
+
*/
|
|
201
|
+
closeDialog(vmodel) {
|
|
202
|
+
|
|
203
|
+
if (vmodel) {
|
|
204
|
+
if (vmodel.name === 'ct-comfirm' || vmodel.$options.name === 'ctDialog' || vmodel.$options.name === 'ct-dialog') {
|
|
205
|
+
//vmodel.dialogTableVisible = false;
|
|
206
|
+
this.dialogList.deleteDialog(vmodel);
|
|
207
|
+
return;
|
|
208
|
+
}
|
|
209
|
+
else {
|
|
210
|
+
this.closeDialog(vmodel.$parent);
|
|
211
|
+
}
|
|
212
|
+
}
|
|
213
|
+
else {
|
|
214
|
+
return;
|
|
215
|
+
}
|
|
216
|
+
},
|
|
217
|
+
|
|
218
|
+
/**
|
|
219
|
+
* @method
|
|
220
|
+
* @param {Object} message 提示信息
|
|
221
|
+
* @param {Object} title 提示框标题
|
|
222
|
+
* @param {Object} options 参数 如confirmButtonText,cancelButtonText
|
|
223
|
+
* @desc 确认框
|
|
224
|
+
*/
|
|
225
|
+
confirm(message, title, options) {
|
|
226
|
+
let self = this;
|
|
227
|
+
|
|
228
|
+
return new Promise((resolve,reject) => {
|
|
229
|
+
var dialogOption = {
|
|
230
|
+
title: title,
|
|
231
|
+
name:'ct-comfirm',
|
|
232
|
+
vmodel:{},
|
|
233
|
+
content: [{
|
|
234
|
+
component: 'ct-comfirm',
|
|
235
|
+
attrs: {
|
|
236
|
+
options:options,
|
|
237
|
+
text:message,
|
|
238
|
+
width: '400px',
|
|
239
|
+
height: '95px'
|
|
240
|
+
},
|
|
241
|
+
on: {
|
|
242
|
+
access(){
|
|
243
|
+
self.closeDialog(dialogOption);
|
|
244
|
+
resolve();
|
|
245
|
+
},
|
|
246
|
+
cancel()
|
|
247
|
+
{
|
|
248
|
+
self.closeDialog(dialogOption);
|
|
249
|
+
reject()
|
|
250
|
+
},
|
|
251
|
+
|
|
252
|
+
}
|
|
253
|
+
}]
|
|
254
|
+
};
|
|
255
|
+
this.openDialog(dialogOption);
|
|
256
|
+
})
|
|
257
|
+
|
|
258
|
+
},
|
|
259
|
+
|
|
260
|
+
/**
|
|
261
|
+
* @method
|
|
262
|
+
* @param {Object} evControl 指定Vue对象
|
|
263
|
+
* @desc 获取指定组件所在的Tab对象
|
|
264
|
+
* @return {Object} 返回Tab对象
|
|
265
|
+
*/
|
|
266
|
+
getParentPane(evControl) {
|
|
267
|
+
var parent = evControl.$parent;
|
|
268
|
+
if (parent) {
|
|
269
|
+
if (parent.$options.name === 'ElTabPane') {
|
|
270
|
+
return parent;
|
|
271
|
+
}
|
|
272
|
+
else if (evControl.$options.name === 'ctDialog') {
|
|
273
|
+
return evControl.vmodel.pane;
|
|
274
|
+
}
|
|
275
|
+
else if (parent.$options.name === 'DataDrivenSearch') {
|
|
276
|
+
return parent;
|
|
277
|
+
}
|
|
278
|
+
else if (parent.$options.name === 'DataDrivenForm') {
|
|
279
|
+
return parent;
|
|
280
|
+
}
|
|
281
|
+
else {
|
|
282
|
+
return this.getParentPane(parent);
|
|
283
|
+
}
|
|
284
|
+
}
|
|
285
|
+
},
|
|
286
|
+
|
|
287
|
+
//执行忙碌标识
|
|
288
|
+
evalBizy: false,
|
|
289
|
+
|
|
290
|
+
/**
|
|
291
|
+
* @method
|
|
292
|
+
* @param {String} code 执行代码
|
|
293
|
+
* @desc 执行动态脚本
|
|
294
|
+
* @returns {obj} 执行脚本
|
|
295
|
+
*/
|
|
296
|
+
eval(code) {
|
|
297
|
+
while (this.evalBizy) {
|
|
298
|
+
//sleep
|
|
299
|
+
}
|
|
300
|
+
this.evalBizy = true;
|
|
301
|
+
var rtn = {};
|
|
302
|
+
var currentKey = [];
|
|
303
|
+
for (var k in window) {
|
|
304
|
+
currentKey.push(k);
|
|
305
|
+
}
|
|
306
|
+
if (window.attachEvent && !window.opera) {
|
|
307
|
+
//ie
|
|
308
|
+
execScript(code);
|
|
309
|
+
} else {
|
|
310
|
+
//not ie
|
|
311
|
+
window.eval(code);
|
|
312
|
+
}
|
|
313
|
+
for (var j in window) {
|
|
314
|
+
if (currentKey.indexOf(j) < 0) {
|
|
315
|
+
if (typeof window[j] === 'function') {
|
|
316
|
+
rtn[j] = common.initFunction(window[j]);
|
|
317
|
+
}
|
|
318
|
+
else {
|
|
319
|
+
rtn[j] = window[j];
|
|
320
|
+
}
|
|
321
|
+
delete window[j];
|
|
322
|
+
}
|
|
323
|
+
}
|
|
324
|
+
this.evalBizy = false;
|
|
325
|
+
return rtn;
|
|
326
|
+
},
|
|
327
|
+
|
|
328
|
+
/**
|
|
329
|
+
* @method
|
|
330
|
+
* @param {Function} f 指定函数
|
|
331
|
+
* @desc 将指定函数外套用一层逻辑,默认无参数时传入ID
|
|
332
|
+
* @returns {obj} 返回值
|
|
333
|
+
*/
|
|
334
|
+
initFunction(f) {
|
|
335
|
+
return function () {
|
|
336
|
+
if (arguments.length === 0) {
|
|
337
|
+
return f($fd);
|
|
338
|
+
}
|
|
339
|
+
else {
|
|
340
|
+
var exStr = 'f(';
|
|
341
|
+
for (var i = 0; i < arguments.length; i++) {
|
|
342
|
+
exStr += 'arguments[' + i + ']';
|
|
343
|
+
if (i !== arguments.length - 1) {
|
|
344
|
+
exStr += ',';
|
|
345
|
+
}
|
|
346
|
+
else {
|
|
347
|
+
exStr += ');';
|
|
348
|
+
}
|
|
349
|
+
}
|
|
350
|
+
return eval(exStr);
|
|
351
|
+
}
|
|
352
|
+
};
|
|
353
|
+
},
|
|
354
|
+
|
|
355
|
+
/**
|
|
356
|
+
* @method
|
|
357
|
+
* @param {String} code 执行脚本
|
|
358
|
+
* @desc 执行动态脚本,装载自定义方法和参数在window上(这样使用自定义对象时,不需要this.了)
|
|
359
|
+
* @returns {obj} 返回值
|
|
360
|
+
*/
|
|
361
|
+
excute(code) {
|
|
362
|
+
var self = this;
|
|
363
|
+
common.with(self);
|
|
364
|
+
let rtn = eval(code);
|
|
365
|
+
common.unWith(self);
|
|
366
|
+
|
|
367
|
+
return rtn;
|
|
368
|
+
},
|
|
369
|
+
|
|
370
|
+
/**
|
|
371
|
+
* @method
|
|
372
|
+
* @param {Function} fun 执行方法
|
|
373
|
+
* @param {Object} para 执行方法的参数
|
|
374
|
+
* @desc 执行方法,装载自定义方法和参数在window上
|
|
375
|
+
* @returns {obj} 返回值
|
|
376
|
+
*/
|
|
377
|
+
excuteFun(fun, para) {
|
|
378
|
+
var self = this;
|
|
379
|
+
common.with(self);
|
|
380
|
+
let rtn = fun(para);
|
|
381
|
+
common.unWith(self);
|
|
382
|
+
|
|
383
|
+
return rtn;
|
|
384
|
+
},
|
|
385
|
+
|
|
386
|
+
/**
|
|
387
|
+
* @method
|
|
388
|
+
* @param {String} fun 执行方法字符串
|
|
389
|
+
* @param {Object} para 执行方法的参数
|
|
390
|
+
* @desc 执行方法,装载自定义方法和参数在window上
|
|
391
|
+
* @returns {obj} 返回值
|
|
392
|
+
*/
|
|
393
|
+
excuteFunStr(funStr, para) {
|
|
394
|
+
var self = this;
|
|
395
|
+
common.with(self);
|
|
396
|
+
let rtn = eval(funStr + '(para)');
|
|
397
|
+
common.unWith(self);
|
|
398
|
+
|
|
399
|
+
return rtn;
|
|
400
|
+
},
|
|
401
|
+
|
|
402
|
+
/**
|
|
403
|
+
* @method
|
|
404
|
+
* @param {Object} source 作用域对象
|
|
405
|
+
* @desc 装载作用域
|
|
406
|
+
*/
|
|
407
|
+
with(source) {
|
|
408
|
+
if (typeof window !== 'undefined') {
|
|
409
|
+
for (var k in source) {
|
|
410
|
+
window[k] = source[k];
|
|
411
|
+
}
|
|
412
|
+
}
|
|
413
|
+
},
|
|
414
|
+
|
|
415
|
+
/**
|
|
416
|
+
* @method
|
|
417
|
+
* @param {Object} source 作用域对象
|
|
418
|
+
* @desc 卸载作用域对象
|
|
419
|
+
*/
|
|
420
|
+
unWith(source) {
|
|
421
|
+
if (typeof window !== 'undefined') {
|
|
422
|
+
for (var k in source) {
|
|
423
|
+
delete window[k];
|
|
424
|
+
}
|
|
425
|
+
}
|
|
426
|
+
},
|
|
427
|
+
|
|
428
|
+
/**
|
|
429
|
+
* @method
|
|
430
|
+
* @param {String} fileName 保存文件名
|
|
431
|
+
* @param {String} fileContent 文件内容
|
|
432
|
+
* @desc 将字符串转为文件提示下载
|
|
433
|
+
* @returns {obj} 返回值
|
|
434
|
+
*/
|
|
435
|
+
saveFile(fileName, fileContent) {
|
|
436
|
+
var byteArr = new Array(fileContent.length);
|
|
437
|
+
for (var i = 0; i < fileContent.length; i++) {
|
|
438
|
+
byteArr[i] = fileContent.charCodeAt(i);
|
|
439
|
+
}
|
|
440
|
+
|
|
441
|
+
var blob = new Blob([new Uint8Array(byteArr)], { type: "application/ms-excel" });
|
|
442
|
+
var url = window.URL.createObjectURL(blob);
|
|
443
|
+
|
|
444
|
+
var a = document.createElement("a");
|
|
445
|
+
if ("download" in a) { // 支持download属性
|
|
446
|
+
document.body.appendChild(a);
|
|
447
|
+
a.style = "display:none";
|
|
448
|
+
a.href = url;
|
|
449
|
+
//download属性IE不支持。。。
|
|
450
|
+
a.download = fileName;
|
|
451
|
+
a.click(); // 触发下载
|
|
452
|
+
//revokeObjectURL会导致firefox不能下载。。。
|
|
453
|
+
//window.URL.revokeObjectURL(url);
|
|
454
|
+
document.body.removeChild(a);
|
|
455
|
+
}
|
|
456
|
+
else { //IE 10+
|
|
457
|
+
if (typeof navigator !== "undefined" && navigator.msSaveOrOpenBlob) {
|
|
458
|
+
return navigator.msSaveOrOpenBlob(blob, name);
|
|
459
|
+
}
|
|
460
|
+
}
|
|
461
|
+
},
|
|
462
|
+
|
|
463
|
+
/**
|
|
464
|
+
* @method
|
|
465
|
+
* @desc 获取中转API地址
|
|
466
|
+
* @returns {obj} 返回值
|
|
467
|
+
*/
|
|
468
|
+
globalUri() {
|
|
469
|
+
return Vue.prototype.$dataDrivenOpts.baseUrl;
|
|
470
|
+
},
|
|
471
|
+
|
|
472
|
+
/**
|
|
473
|
+
* @method
|
|
474
|
+
* @desc 获取外部配置对象
|
|
475
|
+
* @returns {obj} 返回值
|
|
476
|
+
*/
|
|
477
|
+
getDataDrivenOpts() {
|
|
478
|
+
return Vue.prototype.$dataDrivenOpts;
|
|
479
|
+
},
|
|
480
|
+
|
|
481
|
+
/**
|
|
482
|
+
* @method
|
|
483
|
+
* @param {String} str 需要计算的字符串
|
|
484
|
+
* @desc 获取字符串的字节数。
|
|
485
|
+
* @returns {obj} 返回值
|
|
486
|
+
*/
|
|
487
|
+
strCharLen(str) {
|
|
488
|
+
var len = 0;
|
|
489
|
+
if (str) {
|
|
490
|
+
for (var i = 0; i < str.length; i++) {
|
|
491
|
+
var c = str.charCodeAt(i);
|
|
492
|
+
//单字节加1
|
|
493
|
+
if ((c >= 0x0001 && c <= 0x007e) || (0xff60 <= c && c <= 0xff9f)) {
|
|
494
|
+
len++;
|
|
495
|
+
}
|
|
496
|
+
else {
|
|
497
|
+
len += 2;
|
|
498
|
+
}
|
|
499
|
+
}
|
|
500
|
+
}
|
|
501
|
+
|
|
502
|
+
return len;
|
|
503
|
+
},
|
|
504
|
+
/**
|
|
505
|
+
* @method
|
|
506
|
+
* @param {Object} obj 需要克隆的对象
|
|
507
|
+
* @desc 深度克隆对象。
|
|
508
|
+
* @returns {Object} 克隆好的对象。
|
|
509
|
+
*/
|
|
510
|
+
cloneObject(obj) {
|
|
511
|
+
let newObj = Array.isArray(obj) ? [] : {}
|
|
512
|
+
|
|
513
|
+
if (obj && typeof obj === "object") {
|
|
514
|
+
for (let key in obj) {
|
|
515
|
+
if (obj.hasOwnProperty(key)) {
|
|
516
|
+
newObj[key] = (obj && typeof obj[key] === 'object') ? this.cloneObject(obj[key]) : obj[key];
|
|
517
|
+
}
|
|
518
|
+
}
|
|
519
|
+
}
|
|
520
|
+
return newObj
|
|
521
|
+
},
|
|
522
|
+
/**
|
|
523
|
+
* @method
|
|
524
|
+
* @param {Number} total 滚动的位置
|
|
525
|
+
* @desc 设置页面滚动。
|
|
526
|
+
*/
|
|
527
|
+
setScrollTop(total) {
|
|
528
|
+
if (document.getElementById("form-app")) {
|
|
529
|
+
document.getElementById("form-app").scrollTop = total;
|
|
530
|
+
}
|
|
531
|
+
else if (window.scrollTo) {
|
|
532
|
+
window.scrollTo(0, total)
|
|
533
|
+
}
|
|
534
|
+
else {
|
|
535
|
+
// Chrome
|
|
536
|
+
document.body.scrollTop = total
|
|
537
|
+
// Firefox
|
|
538
|
+
document.documentElement.scrollTop = total
|
|
539
|
+
// Safari
|
|
540
|
+
window.pageYOffset = total
|
|
541
|
+
}
|
|
542
|
+
},
|
|
543
|
+
|
|
544
|
+
/**
|
|
545
|
+
* 格式化日期
|
|
546
|
+
* @param date 日期
|
|
547
|
+
* @param format 格式化样式,例如yyyy-MM-dd HH:mm:ss E
|
|
548
|
+
* @return 格式化后的日期
|
|
549
|
+
*/
|
|
550
|
+
formatDate: function (date, format) {
|
|
551
|
+
var v = "";
|
|
552
|
+
if (typeof date === "string" || typeof date !== "object") {
|
|
553
|
+
return;
|
|
554
|
+
}
|
|
555
|
+
if (date == null) return "";
|
|
556
|
+
|
|
557
|
+
var year = date.getFullYear();
|
|
558
|
+
var month = date.getMonth() + 1;
|
|
559
|
+
var day = date.getDate();
|
|
560
|
+
var hour = date.getHours();
|
|
561
|
+
var minute = date.getMinutes();
|
|
562
|
+
var second = date.getSeconds();
|
|
563
|
+
var weekDay = date.getDay();
|
|
564
|
+
var ms = date.getMilliseconds();
|
|
565
|
+
var weekDayString = "";
|
|
566
|
+
|
|
567
|
+
if (weekDay === 1) {
|
|
568
|
+
weekDayString = "星期一";
|
|
569
|
+
} else if (weekDay === 2) {
|
|
570
|
+
weekDayString = "星期二";
|
|
571
|
+
} else if (weekDay === 3) {
|
|
572
|
+
weekDayString = "星期三";
|
|
573
|
+
} else if (weekDay === 4) {
|
|
574
|
+
weekDayString = "星期四";
|
|
575
|
+
} else if (weekDay === 5) {
|
|
576
|
+
weekDayString = "星期五";
|
|
577
|
+
} else if (weekDay === 6) {
|
|
578
|
+
weekDayString = "星期六";
|
|
579
|
+
} else if (weekDay === 7) {
|
|
580
|
+
weekDayString = "星期日";
|
|
581
|
+
}
|
|
582
|
+
|
|
583
|
+
v = format;
|
|
584
|
+
//Year
|
|
585
|
+
v = v.replace(/yyyy/g, year);
|
|
586
|
+
v = v.replace(/YYYY/g, year);
|
|
587
|
+
v = v.replace(/yy/g, (year + "").substring(2, 4));
|
|
588
|
+
v = v.replace(/YY/g, (year + "").substring(2, 4));
|
|
589
|
+
|
|
590
|
+
//Month
|
|
591
|
+
var monthStr = ("0" + month);
|
|
592
|
+
v = v.replace(/MM/g, monthStr.substring(monthStr.length - 2));
|
|
593
|
+
|
|
594
|
+
//Day
|
|
595
|
+
var dayStr = ("0" + day);
|
|
596
|
+
v = v.replace(/dd/g, dayStr.substring(dayStr.length - 2));
|
|
597
|
+
|
|
598
|
+
//hour
|
|
599
|
+
var hourStr = ("0" + hour);
|
|
600
|
+
v = v.replace(/HH/g, hourStr.substring(hourStr.length - 2));
|
|
601
|
+
v = v.replace(/hh/g, hourStr.substring(hourStr.length - 2));
|
|
602
|
+
|
|
603
|
+
//minute
|
|
604
|
+
var minuteStr = ("0" + minute);
|
|
605
|
+
v = v.replace(/mm/g, minuteStr.substring(minuteStr.length - 2));
|
|
606
|
+
|
|
607
|
+
//Millisecond
|
|
608
|
+
v = v.replace(/sss/g, ms);
|
|
609
|
+
v = v.replace(/SSS/g, ms);
|
|
610
|
+
|
|
611
|
+
//second
|
|
612
|
+
var secondStr = ("0" + second);
|
|
613
|
+
v = v.replace(/ss/g, secondStr.substring(secondStr.length - 2));
|
|
614
|
+
v = v.replace(/SS/g, secondStr.substring(secondStr.length - 2));
|
|
615
|
+
|
|
616
|
+
//weekDay
|
|
617
|
+
v = v.replace(/E/g, weekDayString);
|
|
618
|
+
return v;
|
|
619
|
+
},
|
|
620
|
+
|
|
621
|
+
|
|
622
|
+
/**
|
|
623
|
+
* @method
|
|
624
|
+
* @param {String} str 需要转换的字符串
|
|
625
|
+
* @desc 首字母转小写。
|
|
626
|
+
*/
|
|
627
|
+
initialsToUpperCase(str) {
|
|
628
|
+
if (typeof str === 'undefined') {
|
|
629
|
+
return str;
|
|
630
|
+
}
|
|
631
|
+
let char = str.charAt(0);
|
|
632
|
+
let charUpper = char.toLowerCase();
|
|
633
|
+
str = charUpper + str.slice(1);
|
|
634
|
+
return str;
|
|
635
|
+
},
|
|
636
|
+
|
|
637
|
+
/**
|
|
638
|
+
* @method
|
|
639
|
+
* @param {Number} value 需要转换的字符串
|
|
640
|
+
* @param {Number} num 小数点位数
|
|
641
|
+
* @param {Number} oldValue 不是小数时 替换成这个数
|
|
642
|
+
* @desc 字符串转数字(保留num位小数)。
|
|
643
|
+
*/
|
|
644
|
+
numFloat(value, dc, oldValue){
|
|
645
|
+
//value = value.replace(/[^\d.]/g, ""); //清除"数字"和"."以外的字符
|
|
646
|
+
//value = value.replace(/^\./g, ""); //验证第一个字符是数字而不是.
|
|
647
|
+
//value = value.replace(/\.{2,}/g, "."); //只保留第一个. 清除多余的.
|
|
648
|
+
//value = value.replace(".", "$#$").replace(/\./g, "").replace("$#$", ".");//只允许输入一个小数点
|
|
649
|
+
//value = value.replace(/^(\-)*(\d+)\.(\d{0,${num}}).*$/, '$1$2.$3'); //只能输入n个小数 正则无法用变量
|
|
650
|
+
//if (value.indexOf(".") !== -1 && value.indexOf(".") !== value.length - 1 && value.indexOf(".") < value.length - num - 1 && num && num > 0) {
|
|
651
|
+
// value = Math.floor(value * Math.pow(10, num)) / Math.pow(10, num);
|
|
652
|
+
//}
|
|
653
|
+
// var reg = /^[0-9]+$|^[0-9]+\.[0-9]*$|^[0-9]{1,3}([,'][0-9]{3})+$|^[0-9]{1,3}([,'][0-9]{3})+\.[0-9]*$/;
|
|
654
|
+
var reg = '';
|
|
655
|
+
if (dc == undefined || dc == "" || dc === "0") {
|
|
656
|
+
reg = /^(\-)?\d*$/;
|
|
657
|
+
}
|
|
658
|
+
else{
|
|
659
|
+
if(dc===-1)dc=12;
|
|
660
|
+
reg = new RegExp("^(\\-)?\\d*[.]{0,1}(\\d{1," + dc + "})?$");
|
|
661
|
+
}
|
|
662
|
+
if (value === '' || reg.test(value)) {
|
|
663
|
+
// if (value.indexOf(".") !== -1 && value.indexOf(".") !== value.length - 1 && value.indexOf(".") < value.length - num - 1 && num && num > 0) {
|
|
664
|
+
// value = oldValue;
|
|
665
|
+
// }
|
|
666
|
+
}
|
|
667
|
+
else {
|
|
668
|
+
value = oldValue;
|
|
669
|
+
}
|
|
670
|
+
|
|
671
|
+
return value.toString();
|
|
672
|
+
},
|
|
673
|
+
|
|
674
|
+
/**
|
|
675
|
+
* @method
|
|
676
|
+
* @param {Number} value 需要转换的字符串
|
|
677
|
+
* @param {Number} num 小数点位数
|
|
678
|
+
* @desc 字符串转数字(保留num位小数)。
|
|
679
|
+
*/
|
|
680
|
+
numToFloat(value, num){
|
|
681
|
+
if (value && num && num > 0) {
|
|
682
|
+
value =parseFloat(value).toFixed(num);
|
|
683
|
+
}
|
|
684
|
+
return value.toString();
|
|
685
|
+
},
|
|
686
|
+
|
|
687
|
+
|
|
688
|
+
/**
|
|
689
|
+
* @method
|
|
690
|
+
* @param {String} ext 后缀
|
|
691
|
+
* @desc 判断是否是图片格式。
|
|
692
|
+
*/
|
|
693
|
+
isAssetTypeAnImage(ext) {
|
|
694
|
+
return [
|
|
695
|
+
'png', 'jpg', 'jpeg', 'bmp', 'gif', 'webp', 'psd', 'svg', 'tiff'].
|
|
696
|
+
indexOf(ext.toLowerCase()) !== -1;
|
|
697
|
+
},
|
|
698
|
+
|
|
699
|
+
/**
|
|
700
|
+
* @method
|
|
701
|
+
* @param {String} obj 对象
|
|
702
|
+
* @desc 对象转url参数字符串。
|
|
703
|
+
*/
|
|
704
|
+
objectToQueryStr(obj) {
|
|
705
|
+
if (!obj) {
|
|
706
|
+
return '';
|
|
707
|
+
}
|
|
708
|
+
let query = '?';
|
|
709
|
+
for (let i in obj) {
|
|
710
|
+
query = query + i + '=' + obj[i] + '&'
|
|
711
|
+
}
|
|
712
|
+
query = query.substr(0, query.length - 1);
|
|
713
|
+
return query
|
|
714
|
+
},
|
|
715
|
+
/**
|
|
716
|
+
* @method
|
|
717
|
+
* @param {String} str url字符串
|
|
718
|
+
* @desc url参数字符串转对象。
|
|
719
|
+
*/
|
|
720
|
+
queryStrToObject(str) {
|
|
721
|
+
if (!str) {
|
|
722
|
+
return {};
|
|
723
|
+
}
|
|
724
|
+
var obj = {};
|
|
725
|
+
var arr = str.split("&");
|
|
726
|
+
for (var i = 0; i < arr.length; i++) {
|
|
727
|
+
var res = arr[i].split("=");
|
|
728
|
+
obj[res[0]] = res[1];
|
|
729
|
+
}
|
|
730
|
+
return obj;
|
|
731
|
+
}
|
|
732
|
+
};
|
|
733
|
+
|
|
734
|
+
if (typeof window !== 'undefined' && window.Vue) {
|
|
735
|
+
window.Vue.use(common);
|
|
736
|
+
}
|
|
737
|
+
|
|
738
|
+
export default common;
|