vue2-client 1.6.48 → 1.6.49

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.
Files changed (111) hide show
  1. package/CHANGELOG.md +625 -622
  2. package/index.js +30 -30
  3. package/package.json +81 -81
  4. package/src/base-client/components/common/AddressSearchCombobox/AddressSearchCombobox.vue +316 -316
  5. package/src/base-client/components/common/CitySelect/CitySelect.vue +247 -247
  6. package/src/base-client/components/common/CreateQuery/CreateQueryItem.vue +733 -733
  7. package/src/base-client/components/common/CreateSimpleFormQuery/CreateSimpleFormQueryItem.vue +508 -508
  8. package/src/base-client/components/common/FormGroupEdit/FormGroupEdit.vue +140 -140
  9. package/src/base-client/components/common/FormGroupQuery/FormGroupQuery.vue +165 -165
  10. package/src/base-client/components/common/JSONToTree/jsontotree.vue +275 -275
  11. package/src/base-client/components/common/Upload/Upload.vue +168 -168
  12. package/src/base-client/components/common/XAddForm/XAddForm.vue +325 -325
  13. package/src/base-client/components/common/XAddNativeForm/XAddNativeForm.vue +279 -279
  14. package/src/base-client/components/common/XCard/XCard.vue +64 -64
  15. package/src/base-client/components/common/XForm/XForm.vue +180 -180
  16. package/src/base-client/components/common/XForm/XFormItem.vue +513 -513
  17. package/src/base-client/components/common/XForm/XTreeSelect.vue +184 -184
  18. package/src/base-client/components/common/XFormCol/XFormCol.vue +38 -38
  19. package/src/base-client/components/common/XFormTable/XFormTable.vue +336 -336
  20. package/src/base-client/components/common/XFormTable/index.md +97 -97
  21. package/src/base-client/components/common/XImportExcel/XImportExcel.vue +132 -132
  22. package/src/base-client/components/common/XTable/XTable.vue +6 -5
  23. package/src/base-client/components/common/XTreeOne/XTreeOne.vue +111 -111
  24. package/src/base-client/components/system/QueryParamsDetailsView/QueryParamsDetailsView.vue +281 -281
  25. package/src/base-client/components/ticket/TicketDetailsView/TicketDetailsView.vue +807 -807
  26. package/src/base-client/components/ticket/TicketDetailsView/index.md +29 -29
  27. package/src/base-client/components/ticket/TicketDetailsView/part/TicketDetailsFlow.vue +260 -260
  28. package/src/base-client/components/ticket/TicketSubmitSuccessView/TicketSubmitSuccessView.vue +532 -532
  29. package/src/base-client/components/ticket/TicketSubmitSuccessView/index.md +29 -29
  30. package/src/base-client/plugins/AppData.js +76 -76
  31. package/src/base-client/plugins/GetLoginInfoService.js +179 -179
  32. package/src/base-client/plugins/PagedList.js +177 -177
  33. package/src/base-client/plugins/compatible/LoginServiceOA.js +20 -20
  34. package/src/base-client/plugins/i18n-extend.js +32 -32
  35. package/src/components/Ellipsis/Ellipsis.vue +65 -65
  36. package/src/components/Ellipsis/index.md +38 -38
  37. package/src/components/NumberInfo/index.md +43 -43
  38. package/src/components/STable/README.md +341 -341
  39. package/src/components/STable/index.js +318 -318
  40. package/src/components/Trend/index.md +45 -45
  41. package/src/components/checkbox/ColorCheckbox.vue +157 -157
  42. package/src/components/checkbox/ImgCheckbox.vue +163 -163
  43. package/src/components/exception/ExceptionPage.vue +70 -70
  44. package/src/components/form/FormRow.vue +52 -52
  45. package/src/components/index.js +36 -36
  46. package/src/components/menu/SideMenu.vue +62 -62
  47. package/src/components/menu/menu.js +273 -273
  48. package/src/components/page/header/index.less +40 -40
  49. package/src/components/setting/Setting.vue +235 -235
  50. package/src/components/table/StandardTable.vue +141 -141
  51. package/src/components/table/advance/ActionColumns.vue +158 -158
  52. package/src/components/table/advance/SearchArea.vue +355 -355
  53. package/src/components/tool/AStepItem.vue +60 -60
  54. package/src/components/tool/AvatarList.vue +68 -68
  55. package/src/components/tool/Drawer.vue +142 -142
  56. package/src/components/tool/TagSelect.vue +83 -83
  57. package/src/components/transition/PageToggleTransition.vue +97 -97
  58. package/src/config/CreateQueryConfig.js +307 -307
  59. package/src/config/default/admin.config.js +18 -18
  60. package/src/config/default/setting.config.js +46 -46
  61. package/src/config/replacer/resolve.config.js +67 -67
  62. package/src/layouts/CommonLayout.vue +42 -42
  63. package/src/layouts/ComponentLayoutOne.vue +47 -47
  64. package/src/layouts/PageLayout.vue +151 -151
  65. package/src/layouts/SinglePageView.vue +116 -116
  66. package/src/layouts/footer/PageFooter.vue +49 -49
  67. package/src/layouts/header/AdminHeader.vue +134 -134
  68. package/src/layouts/header/HeaderAvatar.vue +64 -64
  69. package/src/layouts/header/HeaderNotice.vue +176 -176
  70. package/src/layouts/header/HeaderSearch.vue +67 -67
  71. package/src/layouts/header/InstitutionDetail.vue +181 -181
  72. package/src/layouts/header/index.less +92 -92
  73. package/src/layouts/tabs/TabsHead.vue +190 -190
  74. package/src/layouts/tabs/TabsView.vue +379 -379
  75. package/src/mock/goods/index.js +108 -108
  76. package/src/pages/login/Login.vue +369 -366
  77. package/src/pages/report/ReportTable.js +124 -124
  78. package/src/pages/report/ReportTableHome.vue +28 -28
  79. package/src/pages/resourceManage/orgListManage.vue +98 -98
  80. package/src/pages/system/file/index.vue +317 -317
  81. package/src/pages/system/settings/index.vue +126 -126
  82. package/src/pages/system/settings/modifyPassword.vue +109 -109
  83. package/src/router/async/config.async.js +28 -28
  84. package/src/router/async/router.map.js +68 -68
  85. package/src/router/index.js +27 -27
  86. package/src/services/api/DictionaryDetailsViewApi.js +6 -6
  87. package/src/services/api/LogDetailsViewApi.js +10 -10
  88. package/src/services/api/QueryParamsDetailsViewApi.js +6 -6
  89. package/src/services/api/TicketDetailsViewApi.js +34 -34
  90. package/src/services/api/cas.js +79 -79
  91. package/src/services/api/common.js +9 -0
  92. package/src/services/api/commonTempTable.js +10 -10
  93. package/src/services/api/index.js +17 -17
  94. package/src/services/api/logininfor/index.js +6 -6
  95. package/src/services/api/manage.js +8 -8
  96. package/src/services/apiService.js +14 -14
  97. package/src/services/user.js +67 -67
  98. package/src/store/modules/index.js +4 -4
  99. package/src/theme/default/nprogress.less +76 -76
  100. package/src/theme/default/style.less +58 -58
  101. package/src/utils/EncryptUtil.js +53 -53
  102. package/src/utils/colors.js +107 -107
  103. package/src/utils/excel/Blob.js +180 -180
  104. package/src/utils/excel/Export2Excel.js +141 -141
  105. package/src/utils/formatter.js +68 -68
  106. package/src/utils/i18n.js +80 -80
  107. package/src/utils/map-utils.js +37 -37
  108. package/src/utils/theme-color-replacer-extend.js +91 -91
  109. package/src/utils/themeUtil.js +100 -100
  110. package/src/utils/util.js +230 -230
  111. package/vue.config.js +106 -106
@@ -1,100 +1,100 @@
1
- const client = require('webpack-theme-color-replacer/client')
2
- const { theme } = require('../config')
3
- const { getMenuColors, getAntdColors, getThemeToggleColors, getFunctionalColors } = require('../utils/colors')
4
- const { ANTD } = require('../config/default')
5
-
6
- function getThemeColors (color, $theme) {
7
- const _color = color || theme.color
8
- const mode = $theme || theme.mode
9
- const replaceColors = getThemeToggleColors(_color, mode)
10
- return [
11
- ...replaceColors.mainColors,
12
- ...replaceColors.subColors,
13
- ...replaceColors.menuColors,
14
- ...replaceColors.contentColors,
15
- ...replaceColors.rgbColors,
16
- ...replaceColors.functionalColors.success,
17
- ...replaceColors.functionalColors.warning,
18
- ...replaceColors.functionalColors.error
19
- ]
20
- }
21
-
22
- function changeThemeColor (newColor, $theme) {
23
- return client.changer.changeColor({ newColors: getThemeColors(newColor, $theme) })
24
- }
25
-
26
- function modifyVars (color) {
27
- const _color = color || theme.color
28
- const palettes = getAntdColors(_color, theme.mode)
29
- const menuColors = getMenuColors(_color, theme.mode)
30
- const { success, warning, error } = getFunctionalColors(theme.mode)
31
- const primary = palettes[5]
32
- return {
33
- 'primary-color': primary,
34
- 'primary-1': palettes[0],
35
- 'primary-2': palettes[1],
36
- 'primary-3': palettes[2],
37
- 'primary-4': palettes[3],
38
- 'primary-5': palettes[4],
39
- 'primary-6': palettes[5],
40
- 'primary-7': palettes[6],
41
- 'primary-8': palettes[7],
42
- 'primary-9': palettes[8],
43
- 'primary-10': palettes[9],
44
- 'info-color': primary,
45
- 'success-color': success[5],
46
- 'warning-color': warning[5],
47
- 'error-color': error[5],
48
- 'alert-info-bg-color': palettes[0],
49
- 'alert-info-border-color': palettes[2],
50
- 'alert-success-bg-color': success[0],
51
- 'alert-success-border-color': success[2],
52
- 'alert-warning-bg-color': warning[0],
53
- 'alert-warning-border-color': warning[2],
54
- 'alert-error-bg-color': error[0],
55
- 'alert-error-border-color': error[2],
56
- 'processing-color': primary,
57
- 'menu-dark-submenu-bg': menuColors[0],
58
- 'layout-header-background': menuColors[1],
59
- 'layout-trigger-background': menuColors[2],
60
- 'btn-danger-bg': error[4],
61
- 'btn-danger-border': error[4],
62
- ...ANTD.theme[theme.mode]
63
- }
64
- }
65
-
66
- function loadLocalTheme (localSetting) {
67
- if (localSetting && localSetting.theme) {
68
- let { color, mode } = localSetting.theme
69
- color = color || theme.color
70
- mode = mode || theme.mode
71
- changeThemeColor(color, mode)
72
- }
73
- }
74
-
75
- /**
76
- * 获取本地保存的配置
77
- * @returns {Object}
78
- * @param loadTheme
79
- */
80
- function getLocalSetting (loadTheme) {
81
- let localSetting = {}
82
- try {
83
- const localSettingStr = localStorage.getItem(process.env.VUE_APP_SETTING_KEY)
84
- localSetting = JSON.parse(localSettingStr)
85
- } catch (e) {
86
- console.error(e)
87
- }
88
- if (loadTheme) {
89
- loadLocalTheme(localSetting)
90
- }
91
- return localSetting
92
- }
93
-
94
- module.exports = {
95
- getThemeColors,
96
- changeThemeColor,
97
- modifyVars,
98
- loadLocalTheme,
99
- getLocalSetting
100
- }
1
+ const client = require('webpack-theme-color-replacer/client')
2
+ const { theme } = require('../config')
3
+ const { getMenuColors, getAntdColors, getThemeToggleColors, getFunctionalColors } = require('../utils/colors')
4
+ const { ANTD } = require('../config/default')
5
+
6
+ function getThemeColors (color, $theme) {
7
+ const _color = color || theme.color
8
+ const mode = $theme || theme.mode
9
+ const replaceColors = getThemeToggleColors(_color, mode)
10
+ return [
11
+ ...replaceColors.mainColors,
12
+ ...replaceColors.subColors,
13
+ ...replaceColors.menuColors,
14
+ ...replaceColors.contentColors,
15
+ ...replaceColors.rgbColors,
16
+ ...replaceColors.functionalColors.success,
17
+ ...replaceColors.functionalColors.warning,
18
+ ...replaceColors.functionalColors.error
19
+ ]
20
+ }
21
+
22
+ function changeThemeColor (newColor, $theme) {
23
+ return client.changer.changeColor({ newColors: getThemeColors(newColor, $theme) })
24
+ }
25
+
26
+ function modifyVars (color) {
27
+ const _color = color || theme.color
28
+ const palettes = getAntdColors(_color, theme.mode)
29
+ const menuColors = getMenuColors(_color, theme.mode)
30
+ const { success, warning, error } = getFunctionalColors(theme.mode)
31
+ const primary = palettes[5]
32
+ return {
33
+ 'primary-color': primary,
34
+ 'primary-1': palettes[0],
35
+ 'primary-2': palettes[1],
36
+ 'primary-3': palettes[2],
37
+ 'primary-4': palettes[3],
38
+ 'primary-5': palettes[4],
39
+ 'primary-6': palettes[5],
40
+ 'primary-7': palettes[6],
41
+ 'primary-8': palettes[7],
42
+ 'primary-9': palettes[8],
43
+ 'primary-10': palettes[9],
44
+ 'info-color': primary,
45
+ 'success-color': success[5],
46
+ 'warning-color': warning[5],
47
+ 'error-color': error[5],
48
+ 'alert-info-bg-color': palettes[0],
49
+ 'alert-info-border-color': palettes[2],
50
+ 'alert-success-bg-color': success[0],
51
+ 'alert-success-border-color': success[2],
52
+ 'alert-warning-bg-color': warning[0],
53
+ 'alert-warning-border-color': warning[2],
54
+ 'alert-error-bg-color': error[0],
55
+ 'alert-error-border-color': error[2],
56
+ 'processing-color': primary,
57
+ 'menu-dark-submenu-bg': menuColors[0],
58
+ 'layout-header-background': menuColors[1],
59
+ 'layout-trigger-background': menuColors[2],
60
+ 'btn-danger-bg': error[4],
61
+ 'btn-danger-border': error[4],
62
+ ...ANTD.theme[theme.mode]
63
+ }
64
+ }
65
+
66
+ function loadLocalTheme (localSetting) {
67
+ if (localSetting && localSetting.theme) {
68
+ let { color, mode } = localSetting.theme
69
+ color = color || theme.color
70
+ mode = mode || theme.mode
71
+ changeThemeColor(color, mode)
72
+ }
73
+ }
74
+
75
+ /**
76
+ * 获取本地保存的配置
77
+ * @returns {Object}
78
+ * @param loadTheme
79
+ */
80
+ function getLocalSetting (loadTheme) {
81
+ let localSetting = {}
82
+ try {
83
+ const localSettingStr = localStorage.getItem(process.env.VUE_APP_SETTING_KEY)
84
+ localSetting = JSON.parse(localSettingStr)
85
+ } catch (e) {
86
+ console.error(e)
87
+ }
88
+ if (loadTheme) {
89
+ loadLocalTheme(localSetting)
90
+ }
91
+ return localSetting
92
+ }
93
+
94
+ module.exports = {
95
+ getThemeColors,
96
+ changeThemeColor,
97
+ modifyVars,
98
+ loadLocalTheme,
99
+ getLocalSetting
100
+ }
package/src/utils/util.js CHANGED
@@ -1,230 +1,230 @@
1
- import enquireJs from 'enquire.js'
2
-
3
- const timeList = [
4
- {
5
- CN: '早上好',
6
- HK: '早晨啊',
7
- US: 'Good morning'
8
- }, {
9
- CN: '上午好',
10
- HK: '上午好',
11
- US: 'Good morning'
12
- }, {
13
- CN: '中午好',
14
- HK: '中午好',
15
- US: 'Good afternoon'
16
- }, {
17
- CN: '下午好',
18
- HK: '下午好',
19
- US: 'Good afternoon'
20
- }, {
21
- CN: '晚上好',
22
- HK: '晚上好',
23
- US: 'Good evening'
24
- }
25
- ]
26
- /**
27
- * 数组去空值
28
- */
29
- export function arrRemoveEmpty (arr) {
30
- for (let i = 0; i < arr.length; i++) {
31
- if (arr[i] === '' || typeof (arr[i]) == 'undefined') {
32
- arr.splice(i, 1)
33
- i--
34
- }
35
- }
36
- return arr
37
- }
38
-
39
- export function isDef (v) {
40
- return v !== undefined && v !== null
41
- }
42
-
43
- export function formatDate (dateStr, fmt) {
44
- if (dateStr == null) {
45
- return '--'
46
- }
47
- let date
48
- if (dateStr === 'now') {
49
- date = new Date()
50
- } else {
51
- date = new Date(dateStr)
52
- }
53
- const o = {
54
- 'M+': date.getMonth() + 1,
55
- 'd+': date.getDate(),
56
- 'h+': date.getHours(),
57
- 'm+': date.getMinutes(),
58
- 's+': date.getSeconds(),
59
- 'q+': Math.floor((date.getMonth() + 3) / 3),
60
- 'S': date.getMilliseconds()
61
- }
62
- if (!fmt) {
63
- fmt = 'yyyy-MM-dd hh:mm:ss'
64
- }
65
- if (/(y+)/.test(fmt)) {
66
- fmt = fmt.replace(RegExp.$1, (date.getFullYear() + '').substr(4 - RegExp.$1.length))
67
- }
68
- for (const k in o) {
69
- if (new RegExp('(' + k + ')').test(fmt)) {
70
- fmt = fmt.replace(RegExp.$1, (RegExp.$1.length === 1) ? (o[k]) : (('00' + o[k]).substr(('' + o[k]).length)))
71
- }
72
- }
73
- return fmt
74
- }
75
-
76
- export function uuid () {
77
- return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, function (c) {
78
- const r = Math.random() * 16 | 0
79
- const v = c === 'x' ? r : (r & 0x3 | 0x8)
80
- return v.toString(16)
81
- })
82
- }
83
-
84
- export function timeCompare (date1, date2) {
85
- const date11 = new Date(date1)
86
- const date22 = new Date(date2)
87
- return date11.time > date22.time ? 1 : -1
88
- }
89
-
90
- export function timeFix () {
91
- const time = new Date()
92
- const hour = time.getHours()
93
- return hour < 9
94
- ? timeList[0] : (hour <= 11 ? timeList[1] : (hour <= 13 ? timeList[2] : (hour <= 20 ? timeList[3] : timeList[4])))
95
- }
96
-
97
- /**
98
- * Remove an item from an array.
99
- */
100
- export function remove (arr, item) {
101
- if (arr.length) {
102
- const index = arr.indexOf(item)
103
- if (index > -1) {
104
- return arr.splice(index, 1)
105
- }
106
- }
107
- }
108
-
109
- export function isRegExp (v) {
110
- return _toString.call(v) === '[object RegExp]'
111
- }
112
-
113
- export function enquireScreen (call) {
114
- const handler = {
115
- match: function () {
116
- call && call(true)
117
- },
118
- unmatch: function () {
119
- call && call(false)
120
- }
121
- }
122
- enquireJs.register('only screen and (max-width: 767.99px)', handler)
123
- }
124
-
125
- export function showXml (str) {
126
- let text = str
127
-
128
- // 去掉多余的空格
129
- text = '\n' + text.replace(/(<\w+)(\s.*?>)/g, function ($0, name, props) {
130
- return name + props.replace(/\s+(\w+=)/g, ' $1')
131
- }).replace(/>\s*?</g, '>\n<')
132
-
133
- // 把注释编码
134
- text = text.replace(/\n/g, '\r').replace(/<!--(.+?)-->/g, function ($0, text) {
135
- return '<!--' + escape(text) + '-->'
136
- }).replace(/\r/g, '\n')
137
-
138
- // 调整格式
139
- const rgx = /\n(<(([^?]).+?)(?:\s|\s*?>|\s*?(\/)>)(?:.*?(?:(\/)>|<(\/)\2>))?)/mg
140
- const nodeStack = []
141
- const output = text.replace(rgx, function ($0, all, name, isBegin, isCloseFull1, isCloseFull2, isFull1, isFull2) {
142
- const isClosed = (isCloseFull1 === '/') || (isCloseFull2 === '/') || (isFull1 === '/') || (isFull2 === '/')
143
- let prefix
144
- if (isBegin === '!') {
145
- prefix = getPrefix(nodeStack.length)
146
- } else {
147
- if (isBegin !== '/') {
148
- prefix = getPrefix(nodeStack.length)
149
- if (!isClosed) {
150
- nodeStack.push(name)
151
- }
152
- } else {
153
- nodeStack.pop()
154
- prefix = getPrefix(nodeStack.length)
155
- }
156
- }
157
- return '\n' + prefix + all
158
- })
159
- let outputText = output.substring(1)
160
-
161
- // 把注释还原并解码,调格式
162
- outputText = outputText.replace(/\n/g, '\r').replace(/(\s*)<!--(.+?)-->/g, function ($0, prefix, text) {
163
- if (prefix.charAt(0) === '\r') { prefix = prefix.substring(1) }
164
- text = unescape(text).replace(/\r/g, '\n')
165
- return '\n' + prefix + '<!--' + text.replace(/^\s*/mg, prefix) + '-->'
166
- })
167
- // alert(outputText);
168
-
169
- outputText = outputText.replace(/\s+$/g, '').replace(/\r/g, '\r\n')
170
-
171
- return outputText
172
- }
173
-
174
- function getPrefix (prefixIndex) {
175
- const span = ' '
176
- const output = []
177
- for (let i = 0; i < prefixIndex; ++i) {
178
- output.push(span)
179
- }
180
-
181
- return output.join('')
182
- }
183
-
184
- /**
185
- * 构造树型结构数据
186
- * [label,value,children]
187
- */
188
- export function handleTree (data, id, parentId, children) {
189
- const config = {
190
- id: id || 'id',
191
- parentId: parentId || 'parent_id',
192
- childrenList: children || 'children'
193
- }
194
- const childrenListMap = {}
195
- const nodeIds = {}
196
- const tree = []
197
- for (const d of data) {
198
- const parentId = d[config.parentId]
199
- if (childrenListMap[parentId] == null) {
200
- childrenListMap[parentId] = []
201
- }
202
- nodeIds[d[config.id]] = d
203
- childrenListMap[parentId].push(d)
204
- }
205
- for (const d of data) {
206
- const parentId = d[config.parentId]
207
- if (nodeIds[parentId] == null) {
208
- tree.push(d)
209
- }
210
- }
211
- for (const t of tree) {
212
- adaptToChildrenList(t)
213
- }
214
-
215
- function adaptToChildrenList (o) {
216
- o.label = o.name
217
- o.value = o.name
218
- if (childrenListMap[o[config.id]] !== null) {
219
- o[config.childrenList] = childrenListMap[o[config.id]]
220
- }
221
- if (o[config.childrenList]) {
222
- for (const c of o[config.childrenList]) {
223
- adaptToChildrenList(c)
224
- }
225
- }
226
- }
227
- return tree
228
- }
229
-
230
- const _toString = Object.prototype.toString
1
+ import enquireJs from 'enquire.js'
2
+
3
+ const timeList = [
4
+ {
5
+ CN: '早上好',
6
+ HK: '早晨啊',
7
+ US: 'Good morning'
8
+ }, {
9
+ CN: '上午好',
10
+ HK: '上午好',
11
+ US: 'Good morning'
12
+ }, {
13
+ CN: '中午好',
14
+ HK: '中午好',
15
+ US: 'Good afternoon'
16
+ }, {
17
+ CN: '下午好',
18
+ HK: '下午好',
19
+ US: 'Good afternoon'
20
+ }, {
21
+ CN: '晚上好',
22
+ HK: '晚上好',
23
+ US: 'Good evening'
24
+ }
25
+ ]
26
+ /**
27
+ * 数组去空值
28
+ */
29
+ export function arrRemoveEmpty (arr) {
30
+ for (let i = 0; i < arr.length; i++) {
31
+ if (arr[i] === '' || typeof (arr[i]) == 'undefined') {
32
+ arr.splice(i, 1)
33
+ i--
34
+ }
35
+ }
36
+ return arr
37
+ }
38
+
39
+ export function isDef (v) {
40
+ return v !== undefined && v !== null
41
+ }
42
+
43
+ export function formatDate (dateStr, fmt) {
44
+ if (dateStr == null) {
45
+ return '--'
46
+ }
47
+ let date
48
+ if (dateStr === 'now') {
49
+ date = new Date()
50
+ } else {
51
+ date = new Date(dateStr)
52
+ }
53
+ const o = {
54
+ 'M+': date.getMonth() + 1,
55
+ 'd+': date.getDate(),
56
+ 'h+': date.getHours(),
57
+ 'm+': date.getMinutes(),
58
+ 's+': date.getSeconds(),
59
+ 'q+': Math.floor((date.getMonth() + 3) / 3),
60
+ 'S': date.getMilliseconds()
61
+ }
62
+ if (!fmt) {
63
+ fmt = 'yyyy-MM-dd hh:mm:ss'
64
+ }
65
+ if (/(y+)/.test(fmt)) {
66
+ fmt = fmt.replace(RegExp.$1, (date.getFullYear() + '').substr(4 - RegExp.$1.length))
67
+ }
68
+ for (const k in o) {
69
+ if (new RegExp('(' + k + ')').test(fmt)) {
70
+ fmt = fmt.replace(RegExp.$1, (RegExp.$1.length === 1) ? (o[k]) : (('00' + o[k]).substr(('' + o[k]).length)))
71
+ }
72
+ }
73
+ return fmt
74
+ }
75
+
76
+ export function uuid () {
77
+ return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, function (c) {
78
+ const r = Math.random() * 16 | 0
79
+ const v = c === 'x' ? r : (r & 0x3 | 0x8)
80
+ return v.toString(16)
81
+ })
82
+ }
83
+
84
+ export function timeCompare (date1, date2) {
85
+ const date11 = new Date(date1)
86
+ const date22 = new Date(date2)
87
+ return date11.time > date22.time ? 1 : -1
88
+ }
89
+
90
+ export function timeFix () {
91
+ const time = new Date()
92
+ const hour = time.getHours()
93
+ return hour < 9
94
+ ? timeList[0] : (hour <= 11 ? timeList[1] : (hour <= 13 ? timeList[2] : (hour <= 20 ? timeList[3] : timeList[4])))
95
+ }
96
+
97
+ /**
98
+ * Remove an item from an array.
99
+ */
100
+ export function remove (arr, item) {
101
+ if (arr.length) {
102
+ const index = arr.indexOf(item)
103
+ if (index > -1) {
104
+ return arr.splice(index, 1)
105
+ }
106
+ }
107
+ }
108
+
109
+ export function isRegExp (v) {
110
+ return _toString.call(v) === '[object RegExp]'
111
+ }
112
+
113
+ export function enquireScreen (call) {
114
+ const handler = {
115
+ match: function () {
116
+ call && call(true)
117
+ },
118
+ unmatch: function () {
119
+ call && call(false)
120
+ }
121
+ }
122
+ enquireJs.register('only screen and (max-width: 767.99px)', handler)
123
+ }
124
+
125
+ export function showXml (str) {
126
+ let text = str
127
+
128
+ // 去掉多余的空格
129
+ text = '\n' + text.replace(/(<\w+)(\s.*?>)/g, function ($0, name, props) {
130
+ return name + props.replace(/\s+(\w+=)/g, ' $1')
131
+ }).replace(/>\s*?</g, '>\n<')
132
+
133
+ // 把注释编码
134
+ text = text.replace(/\n/g, '\r').replace(/<!--(.+?)-->/g, function ($0, text) {
135
+ return '<!--' + escape(text) + '-->'
136
+ }).replace(/\r/g, '\n')
137
+
138
+ // 调整格式
139
+ const rgx = /\n(<(([^?]).+?)(?:\s|\s*?>|\s*?(\/)>)(?:.*?(?:(\/)>|<(\/)\2>))?)/mg
140
+ const nodeStack = []
141
+ const output = text.replace(rgx, function ($0, all, name, isBegin, isCloseFull1, isCloseFull2, isFull1, isFull2) {
142
+ const isClosed = (isCloseFull1 === '/') || (isCloseFull2 === '/') || (isFull1 === '/') || (isFull2 === '/')
143
+ let prefix
144
+ if (isBegin === '!') {
145
+ prefix = getPrefix(nodeStack.length)
146
+ } else {
147
+ if (isBegin !== '/') {
148
+ prefix = getPrefix(nodeStack.length)
149
+ if (!isClosed) {
150
+ nodeStack.push(name)
151
+ }
152
+ } else {
153
+ nodeStack.pop()
154
+ prefix = getPrefix(nodeStack.length)
155
+ }
156
+ }
157
+ return '\n' + prefix + all
158
+ })
159
+ let outputText = output.substring(1)
160
+
161
+ // 把注释还原并解码,调格式
162
+ outputText = outputText.replace(/\n/g, '\r').replace(/(\s*)<!--(.+?)-->/g, function ($0, prefix, text) {
163
+ if (prefix.charAt(0) === '\r') { prefix = prefix.substring(1) }
164
+ text = unescape(text).replace(/\r/g, '\n')
165
+ return '\n' + prefix + '<!--' + text.replace(/^\s*/mg, prefix) + '-->'
166
+ })
167
+ // alert(outputText);
168
+
169
+ outputText = outputText.replace(/\s+$/g, '').replace(/\r/g, '\r\n')
170
+
171
+ return outputText
172
+ }
173
+
174
+ function getPrefix (prefixIndex) {
175
+ const span = ' '
176
+ const output = []
177
+ for (let i = 0; i < prefixIndex; ++i) {
178
+ output.push(span)
179
+ }
180
+
181
+ return output.join('')
182
+ }
183
+
184
+ /**
185
+ * 构造树型结构数据
186
+ * [label,value,children]
187
+ */
188
+ export function handleTree (data, id, parentId, children) {
189
+ const config = {
190
+ id: id || 'id',
191
+ parentId: parentId || 'parent_id',
192
+ childrenList: children || 'children'
193
+ }
194
+ const childrenListMap = {}
195
+ const nodeIds = {}
196
+ const tree = []
197
+ for (const d of data) {
198
+ const parentId = d[config.parentId]
199
+ if (childrenListMap[parentId] == null) {
200
+ childrenListMap[parentId] = []
201
+ }
202
+ nodeIds[d[config.id]] = d
203
+ childrenListMap[parentId].push(d)
204
+ }
205
+ for (const d of data) {
206
+ const parentId = d[config.parentId]
207
+ if (nodeIds[parentId] == null) {
208
+ tree.push(d)
209
+ }
210
+ }
211
+ for (const t of tree) {
212
+ adaptToChildrenList(t)
213
+ }
214
+
215
+ function adaptToChildrenList (o) {
216
+ o.label = o.name
217
+ o.value = o.name
218
+ if (childrenListMap[o[config.id]] !== null) {
219
+ o[config.childrenList] = childrenListMap[o[config.id]]
220
+ }
221
+ if (o[config.childrenList]) {
222
+ for (const c of o[config.childrenList]) {
223
+ adaptToChildrenList(c)
224
+ }
225
+ }
226
+ }
227
+ return tree
228
+ }
229
+
230
+ const _toString = Object.prototype.toString