sh-view 1.5.2

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 (209) hide show
  1. package/.eslintrc.js +21 -0
  2. package/README.en.md +36 -0
  3. package/README.md +39 -0
  4. package/package.json +64 -0
  5. package/packages/assets/css/animated.scss +33 -0
  6. package/packages/assets/css/loader.scss +193 -0
  7. package/packages/assets/css/main.scss +235 -0
  8. package/packages/assets/css/theme.scss +52 -0
  9. package/packages/assets/icons/demo.css +539 -0
  10. package/packages/assets/icons/iconfont.css +415 -0
  11. package/packages/assets/icons/iconfont.js +1 -0
  12. package/packages/assets/icons/iconfont.json +709 -0
  13. package/packages/assets/icons/iconfont.ttf +0 -0
  14. package/packages/assets/icons/iconfont.woff +0 -0
  15. package/packages/assets/icons/iconfont.woff2 +0 -0
  16. package/packages/assets/img/image-error.png +0 -0
  17. package/packages/assets/img/square-image.png +0 -0
  18. package/packages/components/global-components/sh-card/index.vue +122 -0
  19. package/packages/components/global-components/sh-code-editor/index.vue +237 -0
  20. package/packages/components/global-components/sh-corner/index.vue +236 -0
  21. package/packages/components/global-components/sh-count-to/index.vue +46 -0
  22. package/packages/components/global-components/sh-empty/index.vue +43 -0
  23. package/packages/components/global-components/sh-header/index.vue +269 -0
  24. package/packages/components/global-components/sh-icon/icons.vue +32 -0
  25. package/packages/components/global-components/sh-icon/index.vue +27 -0
  26. package/packages/components/global-components/sh-iv-form/components/iv-group-item.vue +57 -0
  27. package/packages/components/global-components/sh-iv-form/components/iv-single-item.vue +76 -0
  28. package/packages/components/global-components/sh-iv-form/index.vue +255 -0
  29. package/packages/components/global-components/sh-layout/index.vue +142 -0
  30. package/packages/components/global-components/sh-loading/index.vue +42 -0
  31. package/packages/components/global-components/sh-noticebar/index.vue +201 -0
  32. package/packages/components/global-components/sh-preview/index.vue +62 -0
  33. package/packages/components/global-components/sh-pull-refresh/index.vue +290 -0
  34. package/packages/components/global-components/sh-result/index.vue +88 -0
  35. package/packages/components/global-components/sh-sheet/index.vue +173 -0
  36. package/packages/components/global-components/sh-upload/components/u-img.vue +63 -0
  37. package/packages/components/global-components/sh-upload/components/u-list.vue +100 -0
  38. package/packages/components/global-components/sh-upload/index.vue +418 -0
  39. package/packages/components/global-components/sh-vxe-form/components/form-item.vue +25 -0
  40. package/packages/components/global-components/sh-vxe-form/css/index.scss +55 -0
  41. package/packages/components/global-components/sh-vxe-form/index.vue +115 -0
  42. package/packages/components/global-components/sh-vxe-form/js/methods.js +170 -0
  43. package/packages/components/global-components/sh-vxe-form/js/props.js +63 -0
  44. package/packages/components/global-components/sh-vxe-form/mixin/defaultData.js +33 -0
  45. package/packages/components/global-components/sh-vxe-list/index.vue +129 -0
  46. package/packages/components/global-components/sh-vxe-modal/index.vue +209 -0
  47. package/packages/components/global-components/sh-vxe-query/index.vue +286 -0
  48. package/packages/components/global-components/sh-vxe-table/components/importModal.vue +377 -0
  49. package/packages/components/global-components/sh-vxe-table/css/index.scss +94 -0
  50. package/packages/components/global-components/sh-vxe-table/index.vue +350 -0
  51. package/packages/components/global-components/sh-vxe-table/js/excel_to_json.js +313 -0
  52. package/packages/components/global-components/sh-vxe-table/js/methods.js +614 -0
  53. package/packages/components/global-components/sh-vxe-table/js/props.js +311 -0
  54. package/packages/components/global-components/sh-vxe-table/mixin/defaultData.js +116 -0
  55. package/packages/components/global-components/sh-vxe-toolbar/index.vue +172 -0
  56. package/packages/components/global-components/sh-vxe-tree/components/table-tree.vue +251 -0
  57. package/packages/components/global-components/sh-vxe-tree/css/index.scss +20 -0
  58. package/packages/components/global-components/sh-vxe-tree/index.vue +85 -0
  59. package/packages/components/global-components/sh-vxe-tree/js/props.js +120 -0
  60. package/packages/components/global-components/sh-vxe-tree/js/treeMethods.js +171 -0
  61. package/packages/components/global-components/sh-vxe-tree/mixin/defaultData.js +48 -0
  62. package/packages/components/global-components/sh-vxe-tree/vxe-direct-tree.vue +202 -0
  63. package/packages/components/global-components/sh-vxe-tree/vxe-select-tree.vue +291 -0
  64. package/packages/components/global-components/sh-water-fall/index.vue +87 -0
  65. package/packages/components/global-components/sh-word/index.vue +110 -0
  66. package/packages/components/index.js +64 -0
  67. package/packages/components/other-components/sh-cron-modal/components/cron-content.vue +287 -0
  68. package/packages/components/other-components/sh-cron-modal/css/index.scss +45 -0
  69. package/packages/components/other-components/sh-cron-modal/index.vue +67 -0
  70. package/packages/components/other-components/sh-cron-modal/mixin/cron-box.js +169 -0
  71. package/packages/components/other-components/sh-cron-modal/tabs/cron-day-box.vue +92 -0
  72. package/packages/components/other-components/sh-cron-modal/tabs/cron-hour-box.vue +56 -0
  73. package/packages/components/other-components/sh-cron-modal/tabs/cron-minute-box.vue +56 -0
  74. package/packages/components/other-components/sh-cron-modal/tabs/cron-month-box.vue +56 -0
  75. package/packages/components/other-components/sh-cron-modal/tabs/cron-second-box.vue +56 -0
  76. package/packages/components/other-components/sh-cron-modal/tabs/cron-week-box.vue +115 -0
  77. package/packages/components/other-components/sh-cron-modal/tabs/cron-year-box.vue +46 -0
  78. package/packages/components/other-components/sh-cron-modal/utils/index.js +52 -0
  79. package/packages/components/other-components/sh-markdown/index.vue +170 -0
  80. package/packages/components/other-components/sh-markdown/tinymce/langs/ar.js +7 -0
  81. package/packages/components/other-components/sh-markdown/tinymce/langs/az.js +7 -0
  82. package/packages/components/other-components/sh-markdown/tinymce/langs/bg_BG.js +7 -0
  83. package/packages/components/other-components/sh-markdown/tinymce/langs/bn_BD.js +7 -0
  84. package/packages/components/other-components/sh-markdown/tinymce/langs/ca.js +7 -0
  85. package/packages/components/other-components/sh-markdown/tinymce/langs/cs.js +7 -0
  86. package/packages/components/other-components/sh-markdown/tinymce/langs/cy.js +7 -0
  87. package/packages/components/other-components/sh-markdown/tinymce/langs/da.js +7 -0
  88. package/packages/components/other-components/sh-markdown/tinymce/langs/de.js +7 -0
  89. package/packages/components/other-components/sh-markdown/tinymce/langs/dv.js +7 -0
  90. package/packages/components/other-components/sh-markdown/tinymce/langs/el.js +7 -0
  91. package/packages/components/other-components/sh-markdown/tinymce/langs/eo.js +7 -0
  92. package/packages/components/other-components/sh-markdown/tinymce/langs/es.js +7 -0
  93. package/packages/components/other-components/sh-markdown/tinymce/langs/es_MX.js +7 -0
  94. package/packages/components/other-components/sh-markdown/tinymce/langs/et.js +7 -0
  95. package/packages/components/other-components/sh-markdown/tinymce/langs/eu.js +7 -0
  96. package/packages/components/other-components/sh-markdown/tinymce/langs/fa.js +7 -0
  97. package/packages/components/other-components/sh-markdown/tinymce/langs/fi.js +7 -0
  98. package/packages/components/other-components/sh-markdown/tinymce/langs/fr_FR.js +7 -0
  99. package/packages/components/other-components/sh-markdown/tinymce/langs/ga.js +7 -0
  100. package/packages/components/other-components/sh-markdown/tinymce/langs/gl.js +7 -0
  101. package/packages/components/other-components/sh-markdown/tinymce/langs/he_IL.js +7 -0
  102. package/packages/components/other-components/sh-markdown/tinymce/langs/hi.js +7 -0
  103. package/packages/components/other-components/sh-markdown/tinymce/langs/hr.js +7 -0
  104. package/packages/components/other-components/sh-markdown/tinymce/langs/hu_HU.js +7 -0
  105. package/packages/components/other-components/sh-markdown/tinymce/langs/hy.js +7 -0
  106. package/packages/components/other-components/sh-markdown/tinymce/langs/id.js +7 -0
  107. package/packages/components/other-components/sh-markdown/tinymce/langs/is_IS.js +7 -0
  108. package/packages/components/other-components/sh-markdown/tinymce/langs/it.js +7 -0
  109. package/packages/components/other-components/sh-markdown/tinymce/langs/ja.js +7 -0
  110. package/packages/components/other-components/sh-markdown/tinymce/langs/kab.js +7 -0
  111. package/packages/components/other-components/sh-markdown/tinymce/langs/kk.js +7 -0
  112. package/packages/components/other-components/sh-markdown/tinymce/langs/ko_KR.js +7 -0
  113. package/packages/components/other-components/sh-markdown/tinymce/langs/ku.js +7 -0
  114. package/packages/components/other-components/sh-markdown/tinymce/langs/lt.js +7 -0
  115. package/packages/components/other-components/sh-markdown/tinymce/langs/lv.js +7 -0
  116. package/packages/components/other-components/sh-markdown/tinymce/langs/nb_NO.js +7 -0
  117. package/packages/components/other-components/sh-markdown/tinymce/langs/ne.js +7 -0
  118. package/packages/components/other-components/sh-markdown/tinymce/langs/nl.js +7 -0
  119. package/packages/components/other-components/sh-markdown/tinymce/langs/nl_BE.js +7 -0
  120. package/packages/components/other-components/sh-markdown/tinymce/langs/oc.js +7 -0
  121. package/packages/components/other-components/sh-markdown/tinymce/langs/pl.js +7 -0
  122. package/packages/components/other-components/sh-markdown/tinymce/langs/pt_BR.js +7 -0
  123. package/packages/components/other-components/sh-markdown/tinymce/langs/ro.js +7 -0
  124. package/packages/components/other-components/sh-markdown/tinymce/langs/ru.js +7 -0
  125. package/packages/components/other-components/sh-markdown/tinymce/langs/sk.js +7 -0
  126. package/packages/components/other-components/sh-markdown/tinymce/langs/sl_SI.js +7 -0
  127. package/packages/components/other-components/sh-markdown/tinymce/langs/sq.js +7 -0
  128. package/packages/components/other-components/sh-markdown/tinymce/langs/sr.js +7 -0
  129. package/packages/components/other-components/sh-markdown/tinymce/langs/sv_SE.js +7 -0
  130. package/packages/components/other-components/sh-markdown/tinymce/langs/ta.js +7 -0
  131. package/packages/components/other-components/sh-markdown/tinymce/langs/tg.js +7 -0
  132. package/packages/components/other-components/sh-markdown/tinymce/langs/th_TH.js +7 -0
  133. package/packages/components/other-components/sh-markdown/tinymce/langs/tr.js +7 -0
  134. package/packages/components/other-components/sh-markdown/tinymce/langs/ug.js +7 -0
  135. package/packages/components/other-components/sh-markdown/tinymce/langs/uk.js +7 -0
  136. package/packages/components/other-components/sh-markdown/tinymce/langs/vi.js +7 -0
  137. package/packages/components/other-components/sh-markdown/tinymce/langs/zh-Hans.js +7 -0
  138. package/packages/components/other-components/sh-markdown/tinymce/skins/content/dark/content.css +72 -0
  139. package/packages/components/other-components/sh-markdown/tinymce/skins/content/dark/content.min.css +7 -0
  140. package/packages/components/other-components/sh-markdown/tinymce/skins/content/default/content.css +67 -0
  141. package/packages/components/other-components/sh-markdown/tinymce/skins/content/default/content.min.css +7 -0
  142. package/packages/components/other-components/sh-markdown/tinymce/skins/content/document/content.css +72 -0
  143. package/packages/components/other-components/sh-markdown/tinymce/skins/content/document/content.min.css +7 -0
  144. package/packages/components/other-components/sh-markdown/tinymce/skins/content/writer/content.css +68 -0
  145. package/packages/components/other-components/sh-markdown/tinymce/skins/content/writer/content.min.css +7 -0
  146. package/packages/components/other-components/sh-markdown/tinymce/skins/ui/oxide/content.css +732 -0
  147. package/packages/components/other-components/sh-markdown/tinymce/skins/ui/oxide/content.inline.css +726 -0
  148. package/packages/components/other-components/sh-markdown/tinymce/skins/ui/oxide/content.inline.min.css +7 -0
  149. package/packages/components/other-components/sh-markdown/tinymce/skins/ui/oxide/content.min.css +7 -0
  150. package/packages/components/other-components/sh-markdown/tinymce/skins/ui/oxide/content.mobile.css +29 -0
  151. package/packages/components/other-components/sh-markdown/tinymce/skins/ui/oxide/content.mobile.min.css +7 -0
  152. package/packages/components/other-components/sh-markdown/tinymce/skins/ui/oxide/fonts/tinymce-mobile.woff +0 -0
  153. package/packages/components/other-components/sh-markdown/tinymce/skins/ui/oxide/skin.css +3047 -0
  154. package/packages/components/other-components/sh-markdown/tinymce/skins/ui/oxide/skin.min.css +7 -0
  155. package/packages/components/other-components/sh-markdown/tinymce/skins/ui/oxide/skin.mobile.css +673 -0
  156. package/packages/components/other-components/sh-markdown/tinymce/skins/ui/oxide/skin.mobile.min.css +7 -0
  157. package/packages/components/other-components/sh-markdown/tinymce/skins/ui/oxide/skin.shadowdom.css +37 -0
  158. package/packages/components/other-components/sh-markdown/tinymce/skins/ui/oxide/skin.shadowdom.min.css +7 -0
  159. package/packages/components/other-components/sh-markdown/tinymce/skins/ui/oxide-dark/content.css +714 -0
  160. package/packages/components/other-components/sh-markdown/tinymce/skins/ui/oxide-dark/content.inline.css +726 -0
  161. package/packages/components/other-components/sh-markdown/tinymce/skins/ui/oxide-dark/content.inline.min.css +7 -0
  162. package/packages/components/other-components/sh-markdown/tinymce/skins/ui/oxide-dark/content.min.css +7 -0
  163. package/packages/components/other-components/sh-markdown/tinymce/skins/ui/oxide-dark/content.mobile.css +29 -0
  164. package/packages/components/other-components/sh-markdown/tinymce/skins/ui/oxide-dark/content.mobile.min.css +7 -0
  165. package/packages/components/other-components/sh-markdown/tinymce/skins/ui/oxide-dark/fonts/tinymce-mobile.woff +0 -0
  166. package/packages/components/other-components/sh-markdown/tinymce/skins/ui/oxide-dark/skin.css +3047 -0
  167. package/packages/components/other-components/sh-markdown/tinymce/skins/ui/oxide-dark/skin.min.css +7 -0
  168. package/packages/components/other-components/sh-markdown/tinymce/skins/ui/oxide-dark/skin.mobile.css +673 -0
  169. package/packages/components/other-components/sh-markdown/tinymce/skins/ui/oxide-dark/skin.mobile.min.css +7 -0
  170. package/packages/components/other-components/sh-markdown/tinymce/skins/ui/oxide-dark/skin.shadowdom.css +37 -0
  171. package/packages/components/other-components/sh-markdown/tinymce/skins/ui/oxide-dark/skin.shadowdom.min.css +7 -0
  172. package/packages/components/other-components/sh-menu-card/index.vue +224 -0
  173. package/packages/components/other-components/sh-menu-card/menu-box.vue +68 -0
  174. package/packages/components/other-components/sh-system-tip/index.vue +113 -0
  175. package/packages/css/index.js +6 -0
  176. package/packages/directive/directives.js +27 -0
  177. package/packages/directive/index.js +19 -0
  178. package/packages/directive/module/draggable.js +42 -0
  179. package/packages/index.js +40 -0
  180. package/packages/iview/css/index.scss +32 -0
  181. package/packages/iview/index.js +24 -0
  182. package/packages/mixin/index.js +87 -0
  183. package/packages/vxeTable/css/index.scss +454 -0
  184. package/packages/vxeTable/css/variable.scss +256 -0
  185. package/packages/vxeTable/index.js +178 -0
  186. package/packages/vxeTable/render/cell/vxe-render-checkbox.vue +19 -0
  187. package/packages/vxeTable/render/cell/vxe-render-checkgroup.vue +36 -0
  188. package/packages/vxeTable/render/cell/vxe-render-code.vue +19 -0
  189. package/packages/vxeTable/render/cell/vxe-render-goption.vue +93 -0
  190. package/packages/vxeTable/render/cell/vxe-render-href.vue +11 -0
  191. package/packages/vxeTable/render/cell/vxe-render-img.vue +28 -0
  192. package/packages/vxeTable/render/cell/vxe-render-input.vue +51 -0
  193. package/packages/vxeTable/render/cell/vxe-render-money.vue +25 -0
  194. package/packages/vxeTable/render/cell/vxe-render-progress.vue +19 -0
  195. package/packages/vxeTable/render/cell/vxe-render-radio.vue +19 -0
  196. package/packages/vxeTable/render/cell/vxe-render-radiogroup.vue +36 -0
  197. package/packages/vxeTable/render/cell/vxe-render-select.vue +36 -0
  198. package/packages/vxeTable/render/cell/vxe-render-switch.vue +19 -0
  199. package/packages/vxeTable/render/cell/vxe-render-table.vue +78 -0
  200. package/packages/vxeTable/render/cell/vxe-render-textarea.vue +19 -0
  201. package/packages/vxeTable/render/cell/vxe-render-time.vue +34 -0
  202. package/packages/vxeTable/render/cell/vxe-render-tree.vue +59 -0
  203. package/packages/vxeTable/render/cell/vxe-render-upload.vue +24 -0
  204. package/packages/vxeTable/render/filters/vxe-filter-input.vue +43 -0
  205. package/packages/vxeTable/render/footer/vxe-footer-input.vue +13 -0
  206. package/packages/vxeTable/render/footer/vxe-footer-money.vue +20 -0
  207. package/packages/vxeTable/render/globalRenders.js +491 -0
  208. package/packages/vxeTable/render/header/vxe-header-money.vue +21 -0
  209. package/packages/vxeTable/render/mixin/cell-mixin.js +195 -0
@@ -0,0 +1,290 @@
1
+ <template>
2
+ <div ref="scroller" class="sh-pull-refresh" :class="classes" @touchstart="touchStart" @touchmove="touchMove" @touchend="touchEnd">
3
+ <div class="sh-pull-refresh-container" :style="getStyle">
4
+ <div class="sh-pull-refresh-container-topbox" :style="getHeightStyle">
5
+ <div class="sh-pull-refresh-container-topbox-text">
6
+ <slot v-if="status === 'pulling'" name="pulling">{{ pullingTxt }}</slot>
7
+ <slot v-if="status === 'loosing'" name="loosing">{{ loosingTxt }}</slot>
8
+ <slot v-if="status === 'loading'" name="loading">
9
+ <i class="sh-pull-refresh-container-topbox-icon vxe-icon-refresh roll"></i>
10
+ {{ loadingTxt }}
11
+ </slot>
12
+ </div>
13
+ </div>
14
+ <slot></slot>
15
+ </div>
16
+ </div>
17
+ </template>
18
+
19
+ <script>
20
+ export default {
21
+ name: 'ShPullRefresh',
22
+ props: {
23
+ modelValue: {
24
+ type: Boolean,
25
+ default: false
26
+ },
27
+ pullingTxt: {
28
+ type: String,
29
+ default: '下拉刷新'
30
+ },
31
+ loosingTxt: {
32
+ type: String,
33
+ default: '释放刷新'
34
+ },
35
+ loadingTxt: {
36
+ type: String,
37
+ default: '加载中...'
38
+ },
39
+ // completeTxt: {
40
+ // type: String,
41
+ // default: ''
42
+ // },
43
+ headHeight: {
44
+ type: [String, Number],
45
+ default: 40
46
+ },
47
+ pullDistance: {
48
+ type: [String, Number],
49
+ default: 40
50
+ },
51
+ duration: {
52
+ type: [String, Number],
53
+ default: 0.3
54
+ }
55
+ },
56
+ emits: ['change', 'refresh', 'update:modelValue'],
57
+ data() {
58
+ return {
59
+ touch: {
60
+ startX: 0,
61
+ startY: 0,
62
+ moveX: 0,
63
+ moveY: 0,
64
+ deltaX: 0,
65
+ deltaY: 0,
66
+ offsetX: 0,
67
+ offsetY: 0,
68
+ direction: ''
69
+ },
70
+ scrollParent: null,
71
+ isPullRefresh: false,
72
+ distance: 0,
73
+ status: 'normal'
74
+ }
75
+ },
76
+ computed: {
77
+ classes() {
78
+ const prefixCls = 'pull-refresh'
79
+ return {
80
+ [prefixCls]: true
81
+ }
82
+ },
83
+ getPullStatus() {
84
+ if (this.status === 'pulling') {
85
+ return !this.slots.pulling ? this.pullingTxt : ''
86
+ } else if (this.status === 'loosing') {
87
+ return !this.slots.loosing ? this.loosingTxt : ''
88
+ } else if (this.status === 'loading') {
89
+ return !this.slots.loading ? this.loadingTxt : ''
90
+ } else {
91
+ return ''
92
+ }
93
+ },
94
+ getStyle() {
95
+ return {
96
+ transitionDuration: `${this.duration}s`,
97
+ transform: this.distance ? `translate3d(0,${this.distance}px, 0)` : ''
98
+ }
99
+ },
100
+ getHeightStyle() {
101
+ const styles = {}
102
+ if (this.headHeight !== 40) styles.height = this.pxCheck(this.headHeight)
103
+ return styles
104
+ }
105
+ },
106
+ watch: {
107
+ modelValue(val) {
108
+ if (val) {
109
+ this.setPullStatus(+this.headHeight, true)
110
+ this.$nextTick(() => this.$emit('refresh'))
111
+ } else {
112
+ this.setPullStatus(0)
113
+ }
114
+ }
115
+ },
116
+ mounted() {
117
+ this.initMounted()
118
+ },
119
+ methods: {
120
+ initMounted() {
121
+ this.scrollParent = this.getScrollParent()
122
+ },
123
+ pxCheck(value) {
124
+ return isNaN(Number(value)) ? String(value) : `${value}px`
125
+ },
126
+ timing(distance) {
127
+ const pullDistance = +(this.pullDistance || this.headHeight)
128
+ let moveDistance = distance
129
+ if (distance > pullDistance) {
130
+ if (distance < pullDistance * 2) {
131
+ moveDistance = (distance + pullDistance) / 2
132
+ } else {
133
+ moveDistance = pullDistance + distance / 4
134
+ }
135
+ }
136
+ return Math.round(moveDistance)
137
+ },
138
+ setPullStatus(distance, isLoading) {
139
+ const pullDistance = +(this.pullDistance || this.headHeight)
140
+ this.distance = distance
141
+ if (isLoading) {
142
+ this.status = 'loading'
143
+ } else if (distance === 0) {
144
+ this.status = 'normal'
145
+ } else if (distance < pullDistance) {
146
+ this.status = 'pulling'
147
+ } else {
148
+ this.status = 'loosing'
149
+ }
150
+ this.$emit('change', { status: this.status, distance })
151
+ },
152
+ isElement(node) {
153
+ return node.tagName !== 'HTML' && node.tagName !== 'BODY' && node.nodeType === 1
154
+ },
155
+ isVertical() {
156
+ return this.touch.direction === 'vertical'
157
+ },
158
+ isHorizontal() {
159
+ return this.touch.direction === 'horizontal'
160
+ },
161
+ getDirection(x, y) {
162
+ let MIN_DISTANCE = 10
163
+ if (x > y && x > MIN_DISTANCE) {
164
+ return 'horizontal'
165
+ }
166
+ if (y > x && y > MIN_DISTANCE) {
167
+ return 'vertical'
168
+ }
169
+ return ''
170
+ },
171
+ resetTouch() {
172
+ this.touch.deltaX = 0
173
+ this.touch.deltaY = 0
174
+ this.touch.offsetX = 0
175
+ this.touch.offsetY = 0
176
+ this.touch.direction = ''
177
+ },
178
+ startTouch(event) {
179
+ this.resetTouch()
180
+ this.touch.startX = event.touches[0].clientX
181
+ this.touch.startY = event.touches[0].clientY
182
+ },
183
+ moveTouch(event) {
184
+ const touch = event.touches[0]
185
+ this.touch.deltaX = touch.clientX - this.touch.startX
186
+ this.touch.deltaY = touch.clientY - this.touch.startY
187
+ this.touch.moveX = touch.clientX
188
+ this.touch.moveY = touch.clientY
189
+ this.touch.offsetX = Math.abs(this.touch.deltaX)
190
+ this.touch.offsetY = Math.abs(this.touch.deltaY)
191
+ if (!this.touch.direction) {
192
+ this.touch.direction = this.getDirection(this.touch.offsetX, this.touch.offsetY)
193
+ }
194
+ },
195
+ getScrollParent(el, root = window) {
196
+ let node = el
197
+ const overflowScrollReg = /scroll|auto|overlay/i
198
+ while (node && node !== root && this.isElement(node)) {
199
+ const { overflowY } = window.getComputedStyle(node)
200
+ if (overflowScrollReg.test(overflowY)) {
201
+ return node
202
+ }
203
+ node = node.parentNode
204
+ }
205
+ return root
206
+ },
207
+ getScrollTopRoot() {
208
+ return window.pageYOffset || document.documentElement.scrollTop || document.body.scrollTop || 0
209
+ },
210
+ isCanTouch() {
211
+ return this.status !== 'loading' && this.status !== 'complete'
212
+ },
213
+ isScrollTop() {
214
+ if (this.scrollParent === window) {
215
+ return this.getScrollTopRoot() === 0
216
+ } else {
217
+ return this.scrollParent && this.scrollParent.scrollTop === 0
218
+ }
219
+ },
220
+ touchStart(event) {
221
+ if (this.isCanTouch()) {
222
+ if (this.isScrollTop()) {
223
+ this.startTouch(event)
224
+ this.isPullRefresh = true
225
+ } else {
226
+ this.distance = 0
227
+ this.isPullRefresh = false
228
+ }
229
+ }
230
+ },
231
+ touchMove(event) {
232
+ if (this.isCanTouch()) {
233
+ this.moveTouch(event)
234
+ if (this.isVertical() && this.touch.deltaY > 0 && this.isPullRefresh) {
235
+ event.preventDefault()
236
+ this.setPullStatus(this.timing(this.touch.deltaY))
237
+ }
238
+ }
239
+ },
240
+ touchEnd() {
241
+ const that = this
242
+ if (that.isPullRefresh && that.isCanTouch() && that.touch.deltaY) {
243
+ if (that.status === 'loosing') {
244
+ that.setPullStatus(+that.headHeight, true)
245
+ that.$emit('update:modelValue', true)
246
+ that.$nextTick(() => that.$emit('refresh'))
247
+ } else {
248
+ that.setPullStatus(0)
249
+ }
250
+ }
251
+ setTimeout(() => {
252
+ that.resetTouch()
253
+ }, 0)
254
+ }
255
+ }
256
+ }
257
+ </script>
258
+
259
+ <style scoped lang="scss">
260
+ .sh-pull-refresh {
261
+ height: 100%;
262
+ overflow: hidden;
263
+ &-container {
264
+ position: relative;
265
+ height: 100%;
266
+ &-topbox {
267
+ position: absolute;
268
+ left: 0;
269
+ width: 100%;
270
+ height: 40px;
271
+ transform: translateY(-100%);
272
+ text-align: center;
273
+ font-size: 14px;
274
+ display: flex;
275
+ align-items: center;
276
+ justify-content: center;
277
+ &-icon {
278
+ margin-right: 4px;
279
+ width: 16px;
280
+ height: 16px;
281
+ padding: 0;
282
+ }
283
+ &-text {
284
+ font-size: var(--font-size-base);
285
+ color: var(--theme-color);
286
+ }
287
+ }
288
+ }
289
+ }
290
+ </style>
@@ -0,0 +1,88 @@
1
+ <template>
2
+ <div class="sh-result">
3
+ <div v-if="isicon || $slots.icon" class="sh-result-icon" :class="resultType">
4
+ <slot name="icon"><sh-icon :type="resultIcon" :size="iconSize" /></slot>
5
+ </div>
6
+ <div v-if="text || $slots.text" v-line-clamp="clamp" class="sh-result-text" :title="text">
7
+ <slot name="text">{{ text }}</slot>
8
+ </div>
9
+ <slot name="default"></slot>
10
+ </div>
11
+ </template>
12
+
13
+ <script>
14
+ export default {
15
+ name: 'ShResult',
16
+ components: {},
17
+ props: {
18
+ type: {
19
+ type: String,
20
+ default: ''
21
+ },
22
+ isicon: {
23
+ type: Boolean,
24
+ default: true
25
+ },
26
+ icon: {
27
+ type: String,
28
+ default: ''
29
+ },
30
+ iconSize: {
31
+ type: Number,
32
+ default: 40
33
+ },
34
+ text: {
35
+ type: String,
36
+ default: ''
37
+ },
38
+ clamp: {
39
+ type: Number,
40
+ default: 2
41
+ }
42
+ },
43
+ computed: {
44
+ resultType() {
45
+ let types = ['success', 'error', 'warning', 'info']
46
+ return types.includes(this.type) ? this.type : 'info'
47
+ },
48
+ resultIcon() {
49
+ let resultIconMap = {
50
+ success: 'ios-checkmark-circle',
51
+ error: 'ios-close-circle',
52
+ warning: 'ios-alert',
53
+ info: 'ios-information-circle'
54
+ }
55
+ return resultIconMap[this.resultType]
56
+ }
57
+ }
58
+ }
59
+ </script>
60
+
61
+ <style lang="scss" scoped>
62
+ .sh-result {
63
+ width: 100%;
64
+ display: block;
65
+ text-align: center;
66
+ padding: 10px;
67
+ .sh-result-icon {
68
+ box-sizing: border-box;
69
+ color: var(--theme-color);
70
+ margin-bottom: 15px;
71
+ &.sucess {
72
+ color: var(--success-color);
73
+ }
74
+ &.error {
75
+ color: var(--error-color);
76
+ }
77
+ &.warning {
78
+ color: var(--warning-color);
79
+ }
80
+ &.info {
81
+ color: var(--info-color);
82
+ }
83
+ }
84
+ .sh-result-text {
85
+ color: var(--text-color);
86
+ }
87
+ }
88
+ </style>
@@ -0,0 +1,173 @@
1
+ <template>
2
+ <div :id="sheetId" ref="shSheet" class="sh-sheet" :style="sheetStyles"></div>
3
+ </template>
4
+
5
+ <script>
6
+ export default {
7
+ name: 'ShSheet',
8
+ props: {
9
+ option: {
10
+ type: Object,
11
+ default() {
12
+ return {}
13
+ }
14
+ },
15
+ title: {
16
+ type: String,
17
+ default: ''
18
+ },
19
+ width: {
20
+ type: String,
21
+ default: '100%'
22
+ },
23
+ height: {
24
+ type: String,
25
+ default: '600'
26
+ },
27
+ disabled: {
28
+ type: Boolean
29
+ },
30
+ readonly: {
31
+ type: Boolean
32
+ },
33
+ url: {
34
+ type: String,
35
+ default: ''
36
+ }
37
+ },
38
+ data() {
39
+ return {}
40
+ },
41
+ computed: {
42
+ sheetId() {
43
+ return 'ShSheet' + this._.uid
44
+ },
45
+ sheetStyles() {
46
+ return {
47
+ width: this.width,
48
+ height: this.height
49
+ }
50
+ },
51
+ sheetOption() {
52
+ let { disabled, readonly, sheetId } = this
53
+ let isedit = !disabled && !readonly
54
+ let defaultOption = {
55
+ title: this.title,
56
+ lang: 'zh',
57
+ // plugins: ['chart'],
58
+ allowCopy: true, // 允许复制
59
+ showinfobar: isedit,
60
+ showtoolbar: isedit, // 工具栏
61
+ showtoolbarConfig: {}, // 自定义工具栏
62
+ showstatisticBar: true, // 底部计数栏
63
+ showstatisticBarConfig: {
64
+ count: true, // 计数栏
65
+ view: true, // 打印视图
66
+ zoom: true // 缩放
67
+ }, // 自定义计数栏
68
+ showsheetbar: true, // 底部sheet页
69
+ showsheetbarConfig: {
70
+ add: isedit, // 新增sheet
71
+ menu: true, // sheet管理菜单
72
+ sheet: true // sheet页显示
73
+ }, // 自定义底部sheet页
74
+ enableAddRow: isedit, // 允许添加行
75
+ enableAddBackTop: true, // 允许回到顶部
76
+ cellRightClickConfig: {
77
+ copy: false, // 复制
78
+ copyAs: false, // 复制为
79
+ paste: false, // 粘贴
80
+ insertRow: false, // 插入行
81
+ insertColumn: false, // 插入列
82
+ deleteRow: false, // 删除选中行
83
+ deleteColumn: false, // 删除选中列
84
+ deleteCell: false, // 删除单元格
85
+ hideRow: false, // 隐藏选中行和显示选中行
86
+ hideColumn: false, // 隐藏选中列和显示选中列
87
+ rowHeight: false, // 行高
88
+ columnWidth: false, // 列宽
89
+ clear: false, // 清除内容
90
+ matrix: false, // 矩阵操作选区
91
+ sort: false, // 排序选区
92
+ filter: false, // 筛选选区
93
+ chart: false, // 图表生成
94
+ image: false, // 插入图片
95
+ link: false, // 插入链接
96
+ data: false, // 数据验证
97
+ cellFormat: false // 设置单元格格式
98
+ }, // 自定义单元格右键菜单
99
+ sheetRightClickConfig: {
100
+ delete: false, // 删除
101
+ copy: false, // 复制
102
+ rename: false, // 重命名
103
+ color: false, // 更改颜色
104
+ hide: false, // 隐藏,取消隐藏
105
+ move: false // 向左移,向右移
106
+ }, // 自定义sheet页右击菜单
107
+ sheetFormulaBar: isedit, // 是否显示公式栏
108
+ defaultFontSize: 14, // 初始化默认字体大小
109
+ functionButton: false, // 功能按钮
110
+ data: [],
111
+ userInfo: ''
112
+ }
113
+ return Object.assign(defaultOption, this.option, { container: sheetId })
114
+ }
115
+ },
116
+ watch: {
117
+ sheetOption: {
118
+ handler() {
119
+ this.sheetRender()
120
+ },
121
+ deep: true
122
+ },
123
+ url: {
124
+ handler() {
125
+ this.sheetRender()
126
+ }
127
+ }
128
+ },
129
+ mounted() {
130
+ this.sheetRender()
131
+ },
132
+ methods: {
133
+ async sheetRender() {
134
+ const that = this
135
+ try {
136
+ window.luckysheet.destroy() // 先销毁当前容器
137
+ let sheetOption = that.sheetOption
138
+ if (that.url) {
139
+ let contentJson = await that.getFileContent()
140
+ sheetOption.data = contentJson.sheets
141
+ sheetOption.title = contentJson.info.name
142
+ sheetOption.userInfo = contentJson.info.creator
143
+ }
144
+ window.luckysheet.create(sheetOption)
145
+ } catch (e) {
146
+ that.msgerror(`初始化失败:${e.message}`)
147
+ }
148
+ },
149
+ // 获取文件流
150
+ async getFileContent() {
151
+ return new Promise(async (resolve, reject) => {
152
+ let fileRes = await this.$http.request({
153
+ methods: 'get',
154
+ url: this.url,
155
+ responseType: 'blob'
156
+ })
157
+ window.LuckyExcel.transformExcelToLucky(fileRes, (exportJson, luckysheetfile) => {
158
+ if (exportJson.sheets == null || exportJson.sheets.length === 0) {
159
+ reject(new Error('读取excel文件内容失败!'))
160
+ }
161
+ resolve(exportJson)
162
+ })
163
+ })
164
+ }
165
+ }
166
+ }
167
+ </script>
168
+
169
+ <style lang="scss" scoped>
170
+ .sh-sheet {
171
+ position: relative;
172
+ }
173
+ </style>
@@ -0,0 +1,63 @@
1
+ <template>
2
+ <img :src="imgsrc" />
3
+ </template>
4
+
5
+ <script>
6
+ export default {
7
+ name: 'UImg',
8
+ props: {
9
+ src: {
10
+ type: String
11
+ },
12
+ file: {
13
+ type: Object
14
+ },
15
+ baseUrl: {
16
+ type: String
17
+ }
18
+ },
19
+ data() {
20
+ return {
21
+ imgsrc: ''
22
+ }
23
+ },
24
+ watch: {
25
+ file: {
26
+ handler: function (val, oldVal) {
27
+ this.initMounted()
28
+ },
29
+ immediate: false,
30
+ deep: true
31
+ }
32
+ },
33
+ mounted() {
34
+ this.initMounted()
35
+ },
36
+ methods: {
37
+ // 初始化渲染
38
+ async initMounted() {
39
+ if (!this.src) {
40
+ this.imgsrc = this.file ? await this.getImagePreviewData(this.file) : ''
41
+ } else {
42
+ this.imgsrc = this.src.startsWith('http') ? this.src : this.baseUrl || this.$config.baseUrl.pro + this.src
43
+ }
44
+ },
45
+ // 生成预览图片列表
46
+ async getImagePreviewData(file) {
47
+ let fileReader = new FileReader()
48
+ return new Promise((resolve, reject) => {
49
+ try {
50
+ fileReader.readAsDataURL(file)
51
+ fileReader.onload = function (e) {
52
+ resolve(e.target.result)
53
+ }
54
+ } catch (e) {
55
+ reject(e)
56
+ }
57
+ })
58
+ }
59
+ }
60
+ }
61
+ </script>
62
+
63
+ <style scoped></style>
@@ -0,0 +1,100 @@
1
+ <template>
2
+ <template v-if="uploadList.length > 0">
3
+ <div v-for="(item, index) in uploadList" :key="index" class="sh-upload-list" :style="upStyles" :class="upClass">
4
+ <div v-if="listType === 'card'" class="list-file-card">
5
+ <u-img v-if="type === 'img'" :src="item.url" :file="item"></u-img>
6
+ <div v-else class="file-title">{{ item.name }}</div>
7
+ <div class="list-file-cover">
8
+ <sh-icon v-if="preview" type="ios-eye-outline" title="查看文件" size="18" @click="handleFilePreviewView(item)" />
9
+ <sh-icon v-if="!disabled" type="ios-trash-outline" title="删除文件" size="18" @click="handleFileRemove(item)" />
10
+ </div>
11
+ </div>
12
+ <div v-else class="list-file-item">
13
+ <div class="file-title">{{ item.name }}</div>
14
+ <div class="file-action">
15
+ <span v-if="preview" class="file-action-item"><sh-icon type="ios-eye-outline" title="查看文件" size="18" @click="handleFilePreviewView(item)" /></span>
16
+ <span v-if="!disabled" class="file-action-item"><sh-icon type="ios-trash-outline" title="删除文件" size="18" @click="handleFileRemove(item)" /></span>
17
+ </div>
18
+ </div>
19
+ </div>
20
+ </template>
21
+ <sh-modal v-if="previewModal" v-model="previewModal" title="预览查看" height="100%" readonly @close="handleFilePreviewCancel">
22
+ <template v-if="type === 'file'">
23
+ <sh-preview :url="previewFile.url"></sh-preview>
24
+ </template>
25
+ <template v-else-if="isFormData && type === 'img'">
26
+ <u-img :src="previewFile && previewFile.url" :file="previewFile" style="max-width: 100%; margin: auto; display: block"></u-img>
27
+ </template>
28
+ </sh-modal>
29
+ </template>
30
+
31
+ <script>
32
+ import UImg from './u-img'
33
+ export default {
34
+ name: 'UList',
35
+ components: {
36
+ UImg
37
+ },
38
+ props: {
39
+ uploadList: {
40
+ type: Array,
41
+ default() {
42
+ return []
43
+ }
44
+ },
45
+ type: {
46
+ type: String,
47
+ default: 'img' // file 上传图片还是文件
48
+ },
49
+ listType: {
50
+ type: String,
51
+ default: 'list' // list 附件列表展示类型
52
+ },
53
+ isFormData: Boolean,
54
+ disabled: Boolean,
55
+ preview: Boolean,
56
+ upStyles: {
57
+ type: Object,
58
+ default() {
59
+ return {}
60
+ }
61
+ },
62
+ upClass: {
63
+ type: [Array, Object],
64
+ default() {
65
+ return {}
66
+ }
67
+ }
68
+ },
69
+ emits: ['delete'],
70
+ data() {
71
+ return {
72
+ previewFile: null,
73
+ previewModal: false
74
+ }
75
+ },
76
+ methods: {
77
+ // 文件预览
78
+ handleFilePreviewView(obj) {
79
+ if (this.isFormData || this.type === 'file') {
80
+ this.previewFile = obj
81
+ this.previewModal = true
82
+ } else {
83
+ this.$ImagePreview.show({
84
+ previewList: [obj.url]
85
+ })
86
+ }
87
+ },
88
+ // 文件预览取消
89
+ handleFilePreviewCancel() {
90
+ this.previewModal = false
91
+ },
92
+ // 文件删除
93
+ handleFileRemove(data) {
94
+ this.$emit('delete', data)
95
+ }
96
+ }
97
+ }
98
+ </script>
99
+
100
+ <style scoped lang="scss"></style>