n20-common-lib 1.2.20 → 1.2.23

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 (187) hide show
  1. package/README.md +2 -2
  2. package/package.json +88 -88
  3. package/src/_qiankun/index.js +113 -113
  4. package/src/_qiankun/postMessage.js +48 -48
  5. package/src/assets/css/_coreLib.scss +35 -35
  6. package/src/assets/css/cl-anchor.scss +23 -23
  7. package/src/assets/css/cl-approve-card.scss +58 -58
  8. package/src/assets/css/cl-dialog.scss +99 -99
  9. package/src/assets/css/cl-drag-list.scss +22 -22
  10. package/src/assets/css/cl-empty.scss +10 -10
  11. package/src/assets/css/cl-expandable-pane.scss +26 -26
  12. package/src/assets/css/cl-expandable.scss +24 -24
  13. package/src/assets/css/cl-file-upload-table.scss +11 -11
  14. package/src/assets/css/cl-filter.scss +4 -4
  15. package/src/assets/css/cl-flow-step.scss +185 -185
  16. package/src/assets/css/cl-footer-box.scss +10 -10
  17. package/src/assets/css/cl-form-item.scss +612 -612
  18. package/src/assets/css/cl-general-card.scss +11 -11
  19. package/src/assets/css/cl-layout-aside.scss +88 -88
  20. package/src/assets/css/cl-layout-content.scss +16 -16
  21. package/src/assets/css/cl-layout-header.scss +73 -73
  22. package/src/assets/css/cl-layout-tabs.scss +87 -87
  23. package/src/assets/css/cl-layout.scss +97 -97
  24. package/src/assets/css/cl-login-temporary.scss +37 -37
  25. package/src/assets/css/cl-message.scss +75 -75
  26. package/src/assets/css/cl-more-tab.scss +98 -98
  27. package/src/assets/css/cl-nav-menu.scss +5 -5
  28. package/src/assets/css/cl-pagination.scss +128 -65
  29. package/src/assets/css/cl-secondary-tab.scss +53 -48
  30. package/src/assets/css/cl-showcolumn.scss +23 -23
  31. package/src/assets/css/cl-sifting.scss +51 -51
  32. package/src/assets/css/cl-statis.scss +42 -42
  33. package/src/assets/css/cl-step.scss +73 -73
  34. package/src/assets/css/cl-suspend.scss +19 -19
  35. package/src/assets/css/cl-tertiary-tab.scss +54 -9
  36. package/src/assets/css/cl-upload.scss +41 -41
  37. package/src/assets/css/cl-worn-pagination.scss +50 -50
  38. package/src/assets/css/el-button.scss +173 -173
  39. package/src/assets/css/el-table.scss +79 -79
  40. package/src/assets/css/element-variables.scss +1061 -1061
  41. package/src/assets/css/element.dev.scss +21 -21
  42. package/src/assets/css/font-icon.scss +27 -27
  43. package/src/assets/css/index.dev.scss +4 -4
  44. package/src/assets/css/index.scss +11 -11
  45. package/src/assets/css/normalize.scss +726 -726
  46. package/src/assets/css/rootvar.scss +139 -139
  47. package/src/assets/css/select.scss +25 -25
  48. package/src/assets/css/title-pop.scss +4 -4
  49. package/src/assets/getJsonc.js +50 -50
  50. package/src/assets/realUrl.js +12 -12
  51. package/src/components/Anchor/AnchorItem.vue +29 -29
  52. package/src/components/Anchor/index.vue +185 -185
  53. package/src/components/ApprovalButtons/index.vue +233 -233
  54. package/src/components/ApprovalCard/index.vue +128 -128
  55. package/src/components/ApprovalRecord/approvalImg.vue +39 -39
  56. package/src/components/ApprovalRecord/index.vue +59 -59
  57. package/src/components/Button/button-group.vue +150 -150
  58. package/src/components/Button/icon-group-button.vue +61 -61
  59. package/src/components/Button/index.vue +56 -56
  60. package/src/components/CascaderArea/index.vue +103 -103
  61. package/src/components/ContentLoading/index.vue +41 -41
  62. package/src/components/ContentNull/index.vue +19 -19
  63. package/src/components/DatePicker/index.vue +27 -27
  64. package/src/components/DatePicker/por.vue +169 -169
  65. package/src/components/Dialog/index.vue +26 -26
  66. package/src/components/Dialog/indexO.vue +116 -116
  67. package/src/components/DragList/index.vue +75 -68
  68. package/src/components/Empty/img/abnormal.svg +108 -108
  69. package/src/components/Empty/img/dispose.svg +71 -71
  70. package/src/components/Empty/img/empty.svg +57 -57
  71. package/src/components/Empty/img/general.svg +58 -58
  72. package/src/components/Empty/img/lock.svg +57 -57
  73. package/src/components/Empty/img/network.svg +59 -59
  74. package/src/components/Empty/img/relevant.svg +68 -68
  75. package/src/components/Empty/img/search.svg +72 -72
  76. package/src/components/Empty/index.vue +92 -92
  77. package/src/components/Expandable/index.vue +49 -49
  78. package/src/components/Expandable/main.vue +52 -52
  79. package/src/components/FileExportAsync/index.vue +178 -178
  80. package/src/components/FileUploadTable/index.vue +484 -484
  81. package/src/components/Filters/index.vue +371 -369
  82. package/src/components/Filters/indexO.vue +104 -104
  83. package/src/components/FlowStep/index.vue +68 -68
  84. package/src/components/FooterBox/index.vue +21 -21
  85. package/src/components/GeneralCard/index.vue +15 -15
  86. package/src/components/InputNumber/index.vue +169 -169
  87. package/src/components/InputNumber/numberRange.vue +47 -47
  88. package/src/components/InputSearch/index.vue +75 -75
  89. package/src/components/Layout/AsideNav/index.vue +119 -119
  90. package/src/components/Layout/AsideNav/menuItem.vue +34 -34
  91. package/src/components/Layout/AsideNav/submenuTitle.vue +26 -26
  92. package/src/components/Layout/HeaderWrap/changePwd.vue +215 -215
  93. package/src/components/Layout/HeaderWrap/index.vue +348 -348
  94. package/src/components/Layout/HeaderWrap/noticePop.vue +300 -300
  95. package/src/components/Layout/SubContent/index.vue +131 -131
  96. package/src/components/Layout/TabsNav/index.vue +170 -170
  97. package/src/components/Layout/index.vue +529 -529
  98. package/src/components/Layout/utils.js +12 -12
  99. package/src/components/LoginTemporary/form.vue +1 -5
  100. package/src/components/LoginTemporary/index.vue +15 -2
  101. package/src/components/LoginTemporary/retrievePw.vue +359 -13
  102. package/src/components/MicroApp/index.js +67 -67
  103. package/src/components/MicroFrame/index.vue +95 -95
  104. package/src/components/MoreTab/index.vue +232 -232
  105. package/src/components/NavMenu/index.vue +60 -60
  106. package/src/components/NstcG6Components/NstcDialog/NstcDialog.vue +184 -184
  107. package/src/components/PageLayout/page.vue +15 -15
  108. package/src/components/Pagination/index.vue +165 -96
  109. package/src/components/SecondaryTab/index.vue +58 -58
  110. package/src/components/SelectLazy/index.vue +75 -75
  111. package/src/components/SelectTree/SelectTreeLazy.vue +241 -241
  112. package/src/components/SelectTree/index.vue +205 -205
  113. package/src/components/ShowColumn/index.vue +208 -204
  114. package/src/components/Sifting/index.vue +99 -99
  115. package/src/components/Statis/index.vue +97 -97
  116. package/src/components/Statis/statisItem.vue +54 -54
  117. package/src/components/Statis/statisPopover.vue +55 -55
  118. package/src/components/Step/index.vue +38 -38
  119. package/src/components/Suspend/index.vue +72 -72
  120. package/src/components/Table/index.vue +209 -179
  121. package/src/components/Table/indexO.vue +149 -149
  122. package/src/components/Task/index.vue +26 -26
  123. package/src/components/TertiaryTab/index.vue +63 -53
  124. package/src/components/TimePicker/index.vue +28 -28
  125. package/src/components/Upload/index.vue +242 -242
  126. package/src/components/WornPagination/index.vue +73 -73
  127. package/src/directives/VClickOutside/index.js +19 -19
  128. package/src/directives/VHas/index.js +58 -58
  129. package/src/directives/VMove/index.js +42 -42
  130. package/src/directives/VTitle/index.js +69 -69
  131. package/src/directives/VTitle/tooltip.vue +21 -21
  132. package/src/index.js +229 -227
  133. package/src/plugins/CompatibleOld/index.js +57 -57
  134. package/src/plugins/Print/index.js +4 -4
  135. package/src/plugins/Print/print-js/.babelrc +12 -12
  136. package/src/plugins/Print/print-js/LICENSE +21 -21
  137. package/src/plugins/Print/print-js/README.md +98 -98
  138. package/src/plugins/Print/print-js/dist/print.css +96 -96
  139. package/src/plugins/Print/print-js/dist/print.js +990 -990
  140. package/src/plugins/Print/print-js/package.json +60 -60
  141. package/src/plugins/Print/print-js/src/index.d.ts +45 -45
  142. package/src/plugins/Print/print-js/src/index.js +10 -10
  143. package/src/plugins/Print/print-js/src/js/browser.js +33 -33
  144. package/src/plugins/Print/print-js/src/js/functions.js +103 -103
  145. package/src/plugins/Print/print-js/src/js/html.js +70 -70
  146. package/src/plugins/Print/print-js/src/js/image.js +48 -48
  147. package/src/plugins/Print/print-js/src/js/init.js +168 -168
  148. package/src/plugins/Print/print-js/src/js/json.js +109 -109
  149. package/src/plugins/Print/print-js/src/js/modal.js +62 -62
  150. package/src/plugins/Print/print-js/src/js/pdf.js +62 -62
  151. package/src/plugins/Print/print-js/src/js/print.js +102 -102
  152. package/src/plugins/Print/print-js/src/js/raw-html.js +15 -15
  153. package/src/plugins/Print/print-js/src/sass/index.scss +13 -13
  154. package/src/plugins/Print/print-js/src/sass/modules/_colors.scss +9 -9
  155. package/src/plugins/Print/print-js/src/sass/partials/_modal.scss +40 -40
  156. package/src/plugins/Print/print-js/src/sass/partials/_spinner.scss +45 -45
  157. package/src/plugins/Print/print.js +2 -2
  158. package/src/plugins/Print/print.scss +1 -1
  159. package/src/plugins/SetMenuTree/index.vue +41 -41
  160. package/src/plugins/SetMenuTree/logoIcon.vue +37 -37
  161. package/src/plugins/SetMenuTree/setmenutree.vue +427 -427
  162. package/src/plugins/SetMenuTree/utils.js +74 -74
  163. package/src/plugins/Sign/InfosecNetSignCNGAgent.min.js +2000 -2000
  164. package/src/plugins/Sign/index.js +65 -65
  165. package/src/plugins/Sign/sign.js +1 -1
  166. package/src/plugins/setTabsForSub.js +2 -2
  167. package/src/utils/auth.js +53 -53
  168. package/src/utils/axios.js +203 -203
  169. package/src/utils/downloadBlob.js +19 -19
  170. package/src/utils/forEachs.js +16 -16
  171. package/src/utils/getScrollContainer.js +43 -43
  172. package/src/utils/i18n/cn2hk.json +1270 -1270
  173. package/src/utils/i18n/index.js +50 -54
  174. package/src/utils/list2tree.js +36 -36
  175. package/src/utils/msgboxPor.js +26 -26
  176. package/src/utils/print.js +161 -161
  177. package/src/utils/relaNo.js +76 -76
  178. package/src/utils/repairElementUI.js +66 -66
  179. package/src/utils/urlToGo.js +82 -82
  180. package/style/index.css +1 -1
  181. package/style/index.css.map +1 -1
  182. package/style/css/normalize.scss +0 -726
  183. package/style/pageDemo/demo-1.vue +0 -131
  184. package/style/pageDemo/demo-2.vue +0 -35
  185. package/style/pageDemo/demo-3.vue +0 -22
  186. package/style/pageDemo/seeCode.js +0 -20
  187. package/style/server-config.jsonc +0 -606
@@ -1,54 +1,50 @@
1
- import locale from 'element-ui/lib/locale'
2
- import langEn from 'element-ui/lib/locale/lang/en'
3
- import langTw from 'element-ui/lib/locale/lang/zh-TW'
4
- import langCN from 'element-ui/lib/locale/lang/zh-CN'
5
- langCN?.el?.pagination?.goto && (langCN.el.pagination.goto = '到第')
6
-
7
- import zhHk from './cn2hk.json' // 简体繁体映射
8
- // 语言枚举
9
- // const langEm = { 中文: 'zh', 中文简体: 'zh-cn', 中文繁体: 'zh-hk', 英文: 'en', 德文: 'de', 法文: 'fr' }
10
-
11
- let pageLang = window.localStorage.getItem('pageLang') // 当前页面的语言
12
- let $i18n_map_root = undefined // 全局的国际化
13
-
14
- export function $l(zh, map = {}) {
15
- if (!pageLang || pageLang === 'zh-cn') {
16
- return zh
17
- } else if (pageLang === 'zh-hk') {
18
- return cn2hk(zh)
19
- } else {
20
- let key = pageLang
21
- let valMap = map[zh] || $i18n_map_root[zh] || {}
22
- let val = valMap[key] || zh
23
-
24
- return val
25
- }
26
- }
27
- function cn2hk(zh = '') {
28
- let _zh = ''
29
- for (let i = 0; i < zh.length; i++) {
30
- let v = zh[i]
31
- let v_hk = zhHk[v]
32
- v_hk ? (_zh += v_hk) : (_zh += v)
33
- }
34
- return _zh
35
- }
36
-
37
- const directive = {}
38
- directive.install = (Vue, map = {}) => {
39
- if (pageLang === 'en') {
40
- locale.use(langEn)
41
- } else if (pageLang === 'zh-hk') {
42
- locale.use(langTw)
43
- } else {
44
- locale.use(langCN)
45
- }
46
-
47
- $i18n_map_root = map
48
-
49
- Vue.prototype.$i18n_map_root = $i18n_map_root
50
- Vue.prototype.$l = $l
51
- Vue.filter('$l', $l)
52
- }
53
-
54
- export default directive
1
+ import locale from 'element-ui/lib/locale'
2
+ import langEn from 'element-ui/lib/locale/lang/en'
3
+ import langTw from 'element-ui/lib/locale/lang/zh-TW'
4
+
5
+ import zhHk from './cn2hk.json' // 简体繁体映射
6
+ // 语言枚举
7
+ // const langEm = { 中文: 'zh', 中文简体: 'zh-cn', 中文繁体: 'zh-hk', 英文: 'en', 德文: 'de', 法文: 'fr' }
8
+
9
+ let pageLang = window.localStorage.getItem('pageLang') // 当前页面的语言
10
+ let $i18n_map_root = undefined // 全局的国际化
11
+
12
+ export function $l(zh, map = {}) {
13
+ if (!pageLang || pageLang === 'zh-cn') {
14
+ return zh
15
+ } else if (pageLang === 'zh-hk') {
16
+ return cn2hk(zh)
17
+ } else {
18
+ let key = pageLang
19
+ let valMap = map[zh] || $i18n_map_root[zh] || {}
20
+ let val = valMap[key] || zh
21
+
22
+ return val
23
+ }
24
+ }
25
+ function cn2hk(zh = '') {
26
+ let _zh = ''
27
+ for (let i = 0; i < zh.length; i++) {
28
+ let v = zh[i]
29
+ let v_hk = zhHk[v]
30
+ v_hk ? (_zh += v_hk) : (_zh += v)
31
+ }
32
+ return _zh
33
+ }
34
+
35
+ const directive = {}
36
+ directive.install = (Vue, map = {}) => {
37
+ if (pageLang === 'en') {
38
+ locale.use(langEn)
39
+ } else if (pageLang === 'zh-hk') {
40
+ locale.use(langTw)
41
+ }
42
+
43
+ $i18n_map_root = map
44
+
45
+ Vue.prototype.$i18n_map_root = $i18n_map_root
46
+ Vue.prototype.$l = $l
47
+ Vue.filter('$l', $l)
48
+ }
49
+
50
+ export default directive
@@ -1,36 +1,36 @@
1
- function list2tree(arr, id = 'id', pid = 'pId', children = 'children', sortk) {
2
- let r = []
3
- let hash = {}
4
-
5
- arr.forEach((item) => {
6
- hash[item[id]] = item
7
- })
8
-
9
- arr.forEach((item) => {
10
- let aVal = item
11
- let hashVP = hash[aVal[pid]]
12
- if (hashVP) {
13
- !hashVP[children] && (hashVP[children] = [])
14
- hashVP[children].push(aVal)
15
- } else {
16
- r.push(aVal)
17
- }
18
- })
19
- if (sortk !== undefined) {
20
- arr.forEach((item) => {
21
- if (hash[item[id]][children]) {
22
- hash[item[id]][children].sort(function (n1, n2) {
23
- return n1[sortk] - n2[sortk]
24
- })
25
- }
26
- })
27
-
28
- r.sort(function (n1, n2) {
29
- return n1[sortk] - n2[sortk]
30
- })
31
- }
32
-
33
- return r
34
- }
35
-
36
- export default list2tree
1
+ function list2tree(arr, id = 'id', pid = 'pId', children = 'children', sortk) {
2
+ let r = []
3
+ let hash = {}
4
+
5
+ arr.forEach((item) => {
6
+ hash[item[id]] = item
7
+ })
8
+
9
+ arr.forEach((item) => {
10
+ let aVal = item
11
+ let hashVP = hash[aVal[pid]]
12
+ if (hashVP) {
13
+ !hashVP[children] && (hashVP[children] = [])
14
+ hashVP[children].push(aVal)
15
+ } else {
16
+ r.push(aVal)
17
+ }
18
+ })
19
+ if (sortk !== undefined) {
20
+ arr.forEach((item) => {
21
+ if (hash[item[id]][children]) {
22
+ hash[item[id]][children].sort(function (n1, n2) {
23
+ return n1[sortk] - n2[sortk]
24
+ })
25
+ }
26
+ })
27
+
28
+ r.sort(function (n1, n2) {
29
+ return n1[sortk] - n2[sortk]
30
+ })
31
+ }
32
+
33
+ return r
34
+ }
35
+
36
+ export default list2tree
@@ -1,26 +1,26 @@
1
- export function msgPor(opt = {}) {
2
- let { title, message, customClass = '' } = opt
3
- const h = this.$createElement
4
- Object.assign(opt, {
5
- message: h('div', null, [
6
- h('div', { class: 'message-por__header' }, title),
7
- h('div', { class: 'message-por__content' }, message)
8
- ]),
9
- customClass: customClass + ' message-por'
10
- })
11
- return this.$message(opt)
12
- }
13
-
14
- export function msgboxPor(opt = {}) {
15
- let { type, center, customClass = '' } = opt
16
- opt = Object.assign({ showClose: false, showCancelButton: true, showConfirmButton: true }, opt)
17
- if (type && !center) {
18
- Object.assign(opt, {
19
- customClass: customClass + ' header-show-icon',
20
- center: true,
21
- showClose: false
22
- })
23
- }
24
-
25
- return this.$msgbox(opt)
26
- }
1
+ export function msgPor(opt = {}) {
2
+ let { title, message, customClass = '' } = opt
3
+ const h = this.$createElement
4
+ Object.assign(opt, {
5
+ message: h('div', null, [
6
+ h('div', { class: 'message-por__header' }, title),
7
+ h('div', { class: 'message-por__content' }, message)
8
+ ]),
9
+ customClass: customClass + ' message-por'
10
+ })
11
+ return this.$message(opt)
12
+ }
13
+
14
+ export function msgboxPor(opt = {}) {
15
+ let { type, center, customClass = '' } = opt
16
+ opt = Object.assign({ showClose: false, showCancelButton: true, showConfirmButton: true }, opt)
17
+ if (type && !center) {
18
+ Object.assign(opt, {
19
+ customClass: customClass + ' header-show-icon',
20
+ center: true,
21
+ showClose: false
22
+ })
23
+ }
24
+
25
+ return this.$msgbox(opt)
26
+ }
@@ -1,161 +1,161 @@
1
- // 打印类属性、方法定义
2
- /* eslint-disable */
3
- const Print = function (dom, options) {
4
- if (!(this instanceof Print)) return new Print(dom, options)
5
-
6
- this.options = this.extend(
7
- {
8
- noPrint: '.no-print'
9
- },
10
- options
11
- )
12
-
13
- if (typeof dom === 'string') {
14
- this.dom = document.querySelector(dom)
15
- } else {
16
- this.isDOM(dom)
17
- this.dom = this.isDOM(dom) ? dom : dom.$el
18
- }
19
- this.init()
20
- }
21
- Print.prototype = {
22
- init: function () {
23
- var content = this.getStyle() + this.getHtml()
24
- this.writeIframe(content)
25
- },
26
- extend: function (obj, obj2) {
27
- for (var k in obj2) {
28
- obj[k] = obj2[k]
29
- }
30
- return obj
31
- },
32
-
33
- getStyle: function () {
34
- var str = '',
35
- styles = document.querySelectorAll('style,link')
36
- for (var i = 0; i < styles.length; i++) {
37
- str += styles[i].outerHTML
38
- }
39
- str += '<style>' + (this.options.noPrint ? this.options.noPrint : '.no-print') + '{display:none;}</style>'
40
-
41
- return str
42
- },
43
-
44
- getHtml: function () {
45
- var inputs = document.querySelectorAll('input')
46
- var textareas = document.querySelectorAll('textarea')
47
- var selects = document.querySelectorAll('select')
48
-
49
- for (var k = 0; k < inputs.length; k++) {
50
- if (inputs[k].type === 'checkbox' || inputs[k].type === 'radio') {
51
- if (inputs[k].checked === true) {
52
- inputs[k].setAttribute('checked', 'checked')
53
- } else {
54
- inputs[k].removeAttribute('checked')
55
- }
56
- } else if (inputs[k].type === 'text') {
57
- inputs[k].setAttribute('value', inputs[k].value)
58
- } else {
59
- inputs[k].setAttribute('value', inputs[k].value)
60
- }
61
- }
62
-
63
- for (var k2 = 0; k2 < textareas.length; k2++) {
64
- if (textareas[k2].type === 'textarea') {
65
- textareas[k2].innerHTML = textareas[k2].value
66
- }
67
- }
68
-
69
- for (var k3 = 0; k3 < selects.length; k3++) {
70
- if (selects[k3].type === 'select-one') {
71
- var child = selects[k3].children
72
- for (var i in child) {
73
- if (child[i].tagName === 'OPTION') {
74
- if (child[i].selected === true) {
75
- child[i].setAttribute('selected', 'selected')
76
- } else {
77
- child[i].removeAttribute('selected')
78
- }
79
- }
80
- }
81
- }
82
- }
83
- // 包裹要打印的元素
84
- return this.wrapperRefDom(this.dom).outerHTML
85
- },
86
- // 向父级元素循环,包裹当前需要打印的元素
87
- // 防止根级别开头的 css 选择器不生效
88
- wrapperRefDom: function (refDom) {
89
- let prevDom = null
90
- let currDom = refDom
91
- // 判断当前元素是否在 body 中,不在文档中则直接返回该节点
92
- if (!this.isInBody(currDom)) return currDom
93
-
94
- while (currDom) {
95
- if (prevDom) {
96
- let element = currDom.cloneNode(false)
97
- element.appendChild(prevDom)
98
- prevDom = element
99
- } else {
100
- prevDom = currDom.cloneNode(true)
101
- }
102
-
103
- currDom = currDom.parentElement
104
- }
105
-
106
- return prevDom
107
- },
108
-
109
- writeIframe: function (content) {
110
- var w,
111
- doc,
112
- iframe = document.createElement('iframe'),
113
- f = document.body.appendChild(iframe)
114
- iframe.id = 'myIframe'
115
- //iframe.style = "position:absolute;width:0;height:0;top:-10px;left:-10px;";
116
- iframe.setAttribute('style', 'position:absolute;width:0;height:0;top:-10px;left:-10px;')
117
- w = f.contentWindow || f.contentDocument
118
- doc = f.contentDocument || f.contentWindow.document
119
- doc.open()
120
- doc.write(content)
121
- doc.close()
122
- var _this = this
123
- iframe.onload = function () {
124
- _this.toPrint(w)
125
- setTimeout(function () {
126
- document.body.removeChild(iframe)
127
- }, 100)
128
- }
129
- },
130
-
131
- toPrint: function (frameWindow) {
132
- try {
133
- setTimeout(function () {
134
- frameWindow.focus()
135
- try {
136
- if (!frameWindow.document.execCommand('print', false, null)) {
137
- frameWindow.print()
138
- }
139
- } catch (e) {
140
- frameWindow.print()
141
- }
142
- frameWindow.close()
143
- }, 10)
144
- } catch (err) {
145
- console.log('err', err)
146
- }
147
- },
148
- // 检查一个元素是否是 body 元素的后代元素且非 body 元素本身
149
- isInBody: function (node) {
150
- return node === document.body ? false : document.body.contains(node)
151
- },
152
- isDOM:
153
- typeof HTMLElement === 'object'
154
- ? function (obj) {
155
- return obj instanceof HTMLElement
156
- }
157
- : function (obj) {
158
- return obj && typeof obj === 'object' && obj.nodeType === 1 && typeof obj.nodeName === 'string'
159
- }
160
- }
161
- export default Print
1
+ // 打印类属性、方法定义
2
+ /* eslint-disable */
3
+ const Print = function (dom, options) {
4
+ if (!(this instanceof Print)) return new Print(dom, options)
5
+
6
+ this.options = this.extend(
7
+ {
8
+ noPrint: '.no-print'
9
+ },
10
+ options
11
+ )
12
+
13
+ if (typeof dom === 'string') {
14
+ this.dom = document.querySelector(dom)
15
+ } else {
16
+ this.isDOM(dom)
17
+ this.dom = this.isDOM(dom) ? dom : dom.$el
18
+ }
19
+ this.init()
20
+ }
21
+ Print.prototype = {
22
+ init: function () {
23
+ var content = this.getStyle() + this.getHtml()
24
+ this.writeIframe(content)
25
+ },
26
+ extend: function (obj, obj2) {
27
+ for (var k in obj2) {
28
+ obj[k] = obj2[k]
29
+ }
30
+ return obj
31
+ },
32
+
33
+ getStyle: function () {
34
+ var str = '',
35
+ styles = document.querySelectorAll('style,link')
36
+ for (var i = 0; i < styles.length; i++) {
37
+ str += styles[i].outerHTML
38
+ }
39
+ str += '<style>' + (this.options.noPrint ? this.options.noPrint : '.no-print') + '{display:none;}</style>'
40
+
41
+ return str
42
+ },
43
+
44
+ getHtml: function () {
45
+ var inputs = document.querySelectorAll('input')
46
+ var textareas = document.querySelectorAll('textarea')
47
+ var selects = document.querySelectorAll('select')
48
+
49
+ for (var k = 0; k < inputs.length; k++) {
50
+ if (inputs[k].type === 'checkbox' || inputs[k].type === 'radio') {
51
+ if (inputs[k].checked === true) {
52
+ inputs[k].setAttribute('checked', 'checked')
53
+ } else {
54
+ inputs[k].removeAttribute('checked')
55
+ }
56
+ } else if (inputs[k].type === 'text') {
57
+ inputs[k].setAttribute('value', inputs[k].value)
58
+ } else {
59
+ inputs[k].setAttribute('value', inputs[k].value)
60
+ }
61
+ }
62
+
63
+ for (var k2 = 0; k2 < textareas.length; k2++) {
64
+ if (textareas[k2].type === 'textarea') {
65
+ textareas[k2].innerHTML = textareas[k2].value
66
+ }
67
+ }
68
+
69
+ for (var k3 = 0; k3 < selects.length; k3++) {
70
+ if (selects[k3].type === 'select-one') {
71
+ var child = selects[k3].children
72
+ for (var i in child) {
73
+ if (child[i].tagName === 'OPTION') {
74
+ if (child[i].selected === true) {
75
+ child[i].setAttribute('selected', 'selected')
76
+ } else {
77
+ child[i].removeAttribute('selected')
78
+ }
79
+ }
80
+ }
81
+ }
82
+ }
83
+ // 包裹要打印的元素
84
+ return this.wrapperRefDom(this.dom).outerHTML
85
+ },
86
+ // 向父级元素循环,包裹当前需要打印的元素
87
+ // 防止根级别开头的 css 选择器不生效
88
+ wrapperRefDom: function (refDom) {
89
+ let prevDom = null
90
+ let currDom = refDom
91
+ // 判断当前元素是否在 body 中,不在文档中则直接返回该节点
92
+ if (!this.isInBody(currDom)) return currDom
93
+
94
+ while (currDom) {
95
+ if (prevDom) {
96
+ let element = currDom.cloneNode(false)
97
+ element.appendChild(prevDom)
98
+ prevDom = element
99
+ } else {
100
+ prevDom = currDom.cloneNode(true)
101
+ }
102
+
103
+ currDom = currDom.parentElement
104
+ }
105
+
106
+ return prevDom
107
+ },
108
+
109
+ writeIframe: function (content) {
110
+ var w,
111
+ doc,
112
+ iframe = document.createElement('iframe'),
113
+ f = document.body.appendChild(iframe)
114
+ iframe.id = 'myIframe'
115
+ //iframe.style = "position:absolute;width:0;height:0;top:-10px;left:-10px;";
116
+ iframe.setAttribute('style', 'position:absolute;width:0;height:0;top:-10px;left:-10px;')
117
+ w = f.contentWindow || f.contentDocument
118
+ doc = f.contentDocument || f.contentWindow.document
119
+ doc.open()
120
+ doc.write(content)
121
+ doc.close()
122
+ var _this = this
123
+ iframe.onload = function () {
124
+ _this.toPrint(w)
125
+ setTimeout(function () {
126
+ document.body.removeChild(iframe)
127
+ }, 100)
128
+ }
129
+ },
130
+
131
+ toPrint: function (frameWindow) {
132
+ try {
133
+ setTimeout(function () {
134
+ frameWindow.focus()
135
+ try {
136
+ if (!frameWindow.document.execCommand('print', false, null)) {
137
+ frameWindow.print()
138
+ }
139
+ } catch (e) {
140
+ frameWindow.print()
141
+ }
142
+ frameWindow.close()
143
+ }, 10)
144
+ } catch (err) {
145
+ console.log('err', err)
146
+ }
147
+ },
148
+ // 检查一个元素是否是 body 元素的后代元素且非 body 元素本身
149
+ isInBody: function (node) {
150
+ return node === document.body ? false : document.body.contains(node)
151
+ },
152
+ isDOM:
153
+ typeof HTMLElement === 'object'
154
+ ? function (obj) {
155
+ return obj instanceof HTMLElement
156
+ }
157
+ : function (obj) {
158
+ return obj && typeof obj === 'object' && obj.nodeType === 1 && typeof obj.nodeName === 'string'
159
+ }
160
+ }
161
+ export default Print