sh-view 1.7.5 → 2.0.0

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 (206) hide show
  1. package/.eslintrc.js +20 -21
  2. package/package.json +10 -10
  3. package/packages/assets/css/animated.scss +167 -2
  4. package/packages/assets/css/loader.scss +42 -42
  5. package/packages/assets/css/main.scss +41 -21
  6. package/packages/assets/css/theme.scss +83 -44
  7. package/packages/components/global-components/sh-alert/index.vue +173 -0
  8. package/packages/components/global-components/sh-badge/index.vue +227 -0
  9. package/packages/components/global-components/sh-card/index.vue +140 -122
  10. package/packages/components/global-components/sh-code-editor/index.vue +260 -260
  11. package/packages/components/global-components/sh-col/css/index.scss +76 -0
  12. package/packages/components/global-components/sh-col/index.vue +83 -0
  13. package/packages/components/global-components/sh-corner/index.vue +1 -9
  14. package/packages/components/global-components/sh-count-to/index.vue +102 -46
  15. package/packages/components/global-components/sh-date/index.vue +40 -0
  16. package/packages/components/global-components/sh-drawer/index.vue +518 -0
  17. package/packages/components/global-components/sh-drawer/scrollbar.js +76 -0
  18. package/packages/components/global-components/sh-empty/index.vue +43 -43
  19. package/packages/components/global-components/{sh-vxe-form → sh-form}/css/index.scss +6 -6
  20. package/packages/components/global-components/{sh-vxe-form → sh-form}/index.vue +114 -115
  21. package/packages/components/global-components/sh-form/js/methods.js +146 -0
  22. package/packages/components/global-components/{sh-vxe-form → sh-form}/mixin/defaultData.js +32 -33
  23. package/packages/components/global-components/sh-header/index.vue +293 -269
  24. package/packages/components/global-components/sh-icon/css/default/fonts/ionicons.svg +870 -0
  25. package/packages/components/global-components/sh-icon/css/default/fonts/ionicons.ttf +0 -0
  26. package/packages/components/global-components/sh-icon/css/default/fonts/ionicons.woff +0 -0
  27. package/packages/components/global-components/sh-icon/css/default/fonts/ionicons.woff2 +0 -0
  28. package/packages/components/global-components/sh-icon/css/default/icons.scss +2583 -0
  29. package/packages/components/global-components/sh-icon/css/default/index.scss +27 -0
  30. package/packages/components/global-components/sh-icon/css/font/fonts/iconfont.js +1 -0
  31. package/packages/components/global-components/sh-icon/css/font/fonts/iconfont.json +247 -0
  32. package/packages/components/global-components/sh-icon/css/font/fonts/iconfont.ttf +0 -0
  33. package/packages/components/global-components/sh-icon/css/font/fonts/iconfont.woff +0 -0
  34. package/packages/components/global-components/sh-icon/css/font/fonts/iconfont.woff2 +0 -0
  35. package/packages/components/global-components/sh-icon/css/font/icons.scss +135 -0
  36. package/packages/components/global-components/sh-icon/css/font/index.scss +16 -0
  37. package/packages/components/global-components/sh-icon/icon-default.vue +32 -0
  38. package/packages/components/global-components/sh-icon/{icons.vue → icon-font.vue} +32 -32
  39. package/packages/components/global-components/sh-icon/index.vue +28 -27
  40. package/packages/components/global-components/sh-image/index.vue +123 -0
  41. package/packages/components/global-components/sh-list/index.vue +141 -0
  42. package/packages/components/global-components/sh-loading/index.vue +49 -42
  43. package/packages/components/global-components/{sh-vxe-modal → sh-modal}/index.vue +209 -209
  44. package/packages/components/global-components/sh-noticebar/index.vue +201 -201
  45. package/packages/components/global-components/sh-poptip/index.vue +479 -0
  46. package/packages/components/global-components/sh-poptip/popper.js +115 -0
  47. package/packages/components/global-components/sh-progress/index.vue +290 -0
  48. package/packages/components/global-components/sh-pull-refresh/index.vue +290 -290
  49. package/packages/components/global-components/{sh-vxe-query → sh-query}/index.vue +317 -286
  50. package/packages/components/global-components/sh-result/index.vue +110 -88
  51. package/packages/components/global-components/sh-row/css/index.scss +21 -0
  52. package/packages/components/global-components/sh-row/index.vue +63 -0
  53. package/packages/components/global-components/sh-split/components/trigger.vue +33 -0
  54. package/packages/components/global-components/sh-split/index.vue +334 -0
  55. package/packages/components/global-components/sh-table/components/importModal.vue +351 -0
  56. package/packages/components/global-components/{sh-vxe-table → sh-table}/css/index.scss +4 -22
  57. package/packages/components/global-components/{sh-vxe-table → sh-table}/index.vue +329 -351
  58. package/packages/components/global-components/{sh-vxe-table → sh-table}/js/methods.js +91 -153
  59. package/packages/components/global-components/{sh-vxe-table → sh-table}/js/props.js +304 -313
  60. package/packages/components/global-components/{sh-vxe-table → sh-table}/mixin/defaultData.js +94 -116
  61. package/packages/components/global-components/sh-tabs/index.vue +315 -0
  62. package/packages/components/global-components/sh-tag/index.vue +163 -0
  63. package/packages/components/global-components/{sh-vxe-toolbar → sh-toolbar}/index.vue +177 -172
  64. package/packages/components/global-components/sh-tree/components/table-tree.vue +280 -0
  65. package/packages/components/global-components/sh-tree/css/index.scss +54 -0
  66. package/packages/components/global-components/sh-tree/index.vue +195 -0
  67. package/packages/components/global-components/sh-tree/mixin/treeProps.js +124 -0
  68. package/packages/components/global-components/sh-upload/index.vue +278 -418
  69. package/packages/components/global-components/sh-upload/js/ajax.js +80 -0
  70. package/packages/components/global-components/sh-upload/js/mixin.js +257 -0
  71. package/packages/components/global-components/sh-water-fall/index.vue +87 -87
  72. package/packages/components/index.js +85 -59
  73. package/packages/components/other-components/sh-cron-modal/css/index.scss +2 -2
  74. package/packages/components/other-components/sh-menu-card/index.vue +224 -224
  75. package/packages/css/index.js +4 -6
  76. package/packages/directive/index.js +19 -19
  77. package/packages/directive/module/click-out.js +14 -0
  78. package/packages/directive/module/draggable.js +42 -42
  79. package/packages/directive/module/line-clamp.js +22 -0
  80. package/packages/directive/module/prevent-click.js +18 -0
  81. package/packages/directive/module/resize.js +19 -0
  82. package/packages/directive/module/ripple.js +166 -0
  83. package/packages/index.js +39 -40
  84. package/packages/utils/transfer-queue.js +12 -0
  85. package/packages/vxeTable/css/index.scss +12 -98
  86. package/packages/vxeTable/css/variable.scss +7 -265
  87. package/packages/vxeTable/index.js +184 -184
  88. package/packages/vxeTable/plugins/export.js +450 -0
  89. package/packages/vxeTable/render/cell/vxe-render-checkgroup.vue +36 -36
  90. package/packages/vxeTable/render/cell/vxe-render-goption.vue +94 -93
  91. package/packages/vxeTable/render/cell/vxe-render-img.vue +21 -28
  92. package/packages/vxeTable/render/cell/vxe-render-input.vue +51 -51
  93. package/packages/vxeTable/render/cell/vxe-render-progress.vue +19 -19
  94. package/packages/vxeTable/render/cell/vxe-render-radiogroup.vue +36 -36
  95. package/packages/vxeTable/render/cell/vxe-render-select.vue +36 -36
  96. package/packages/vxeTable/render/cell/vxe-render-tree.vue +59 -59
  97. package/packages/vxeTable/render/globalRenders.jsx +498 -491
  98. package/packages/assets/icons/demo.css +0 -539
  99. package/packages/assets/icons/iconfont.css +0 -415
  100. package/packages/assets/icons/iconfont.js +0 -1
  101. package/packages/assets/icons/iconfont.json +0 -709
  102. package/packages/assets/icons/iconfont.ttf +0 -0
  103. package/packages/assets/icons/iconfont.woff +0 -0
  104. package/packages/assets/icons/iconfont.woff2 +0 -0
  105. package/packages/assets/img/image-error.png +0 -0
  106. package/packages/assets/img/square-image.png +0 -0
  107. package/packages/components/global-components/sh-iv-form/components/iv-group-item.vue +0 -57
  108. package/packages/components/global-components/sh-iv-form/components/iv-single-item.vue +0 -76
  109. package/packages/components/global-components/sh-iv-form/index.vue +0 -255
  110. package/packages/components/global-components/sh-layout/index.vue +0 -142
  111. package/packages/components/global-components/sh-upload/components/u-img.vue +0 -63
  112. package/packages/components/global-components/sh-upload/components/u-list.vue +0 -100
  113. package/packages/components/global-components/sh-vxe-form/js/methods.js +0 -170
  114. package/packages/components/global-components/sh-vxe-list/index.vue +0 -129
  115. package/packages/components/global-components/sh-vxe-table/components/importModal.vue +0 -377
  116. package/packages/components/global-components/sh-vxe-tree/components/table-tree.vue +0 -233
  117. package/packages/components/global-components/sh-vxe-tree/css/index.scss +0 -20
  118. package/packages/components/global-components/sh-vxe-tree/index.vue +0 -85
  119. package/packages/components/global-components/sh-vxe-tree/js/props.js +0 -120
  120. package/packages/components/global-components/sh-vxe-tree/js/treeMethods.js +0 -169
  121. package/packages/components/global-components/sh-vxe-tree/mixin/defaultData.js +0 -54
  122. package/packages/components/global-components/sh-vxe-tree/vxe-direct-tree.vue +0 -203
  123. package/packages/components/global-components/sh-vxe-tree/vxe-select-tree.vue +0 -291
  124. package/packages/components/other-components/sh-markdown/tinymce/langs/ar.js +0 -7
  125. package/packages/components/other-components/sh-markdown/tinymce/langs/az.js +0 -7
  126. package/packages/components/other-components/sh-markdown/tinymce/langs/bg_BG.js +0 -7
  127. package/packages/components/other-components/sh-markdown/tinymce/langs/bn_BD.js +0 -7
  128. package/packages/components/other-components/sh-markdown/tinymce/langs/ca.js +0 -7
  129. package/packages/components/other-components/sh-markdown/tinymce/langs/cs.js +0 -7
  130. package/packages/components/other-components/sh-markdown/tinymce/langs/cy.js +0 -7
  131. package/packages/components/other-components/sh-markdown/tinymce/langs/da.js +0 -7
  132. package/packages/components/other-components/sh-markdown/tinymce/langs/de.js +0 -7
  133. package/packages/components/other-components/sh-markdown/tinymce/langs/dv.js +0 -7
  134. package/packages/components/other-components/sh-markdown/tinymce/langs/el.js +0 -7
  135. package/packages/components/other-components/sh-markdown/tinymce/langs/eo.js +0 -7
  136. package/packages/components/other-components/sh-markdown/tinymce/langs/es.js +0 -7
  137. package/packages/components/other-components/sh-markdown/tinymce/langs/es_MX.js +0 -7
  138. package/packages/components/other-components/sh-markdown/tinymce/langs/et.js +0 -7
  139. package/packages/components/other-components/sh-markdown/tinymce/langs/eu.js +0 -7
  140. package/packages/components/other-components/sh-markdown/tinymce/langs/fa.js +0 -7
  141. package/packages/components/other-components/sh-markdown/tinymce/langs/fi.js +0 -7
  142. package/packages/components/other-components/sh-markdown/tinymce/langs/fr_FR.js +0 -7
  143. package/packages/components/other-components/sh-markdown/tinymce/langs/ga.js +0 -7
  144. package/packages/components/other-components/sh-markdown/tinymce/langs/gl.js +0 -7
  145. package/packages/components/other-components/sh-markdown/tinymce/langs/he_IL.js +0 -7
  146. package/packages/components/other-components/sh-markdown/tinymce/langs/hi.js +0 -7
  147. package/packages/components/other-components/sh-markdown/tinymce/langs/hr.js +0 -7
  148. package/packages/components/other-components/sh-markdown/tinymce/langs/hu_HU.js +0 -7
  149. package/packages/components/other-components/sh-markdown/tinymce/langs/hy.js +0 -7
  150. package/packages/components/other-components/sh-markdown/tinymce/langs/id.js +0 -7
  151. package/packages/components/other-components/sh-markdown/tinymce/langs/is_IS.js +0 -7
  152. package/packages/components/other-components/sh-markdown/tinymce/langs/it.js +0 -7
  153. package/packages/components/other-components/sh-markdown/tinymce/langs/ja.js +0 -7
  154. package/packages/components/other-components/sh-markdown/tinymce/langs/kab.js +0 -7
  155. package/packages/components/other-components/sh-markdown/tinymce/langs/kk.js +0 -7
  156. package/packages/components/other-components/sh-markdown/tinymce/langs/ko_KR.js +0 -7
  157. package/packages/components/other-components/sh-markdown/tinymce/langs/ku.js +0 -7
  158. package/packages/components/other-components/sh-markdown/tinymce/langs/lt.js +0 -7
  159. package/packages/components/other-components/sh-markdown/tinymce/langs/lv.js +0 -7
  160. package/packages/components/other-components/sh-markdown/tinymce/langs/nb_NO.js +0 -7
  161. package/packages/components/other-components/sh-markdown/tinymce/langs/ne.js +0 -7
  162. package/packages/components/other-components/sh-markdown/tinymce/langs/nl.js +0 -7
  163. package/packages/components/other-components/sh-markdown/tinymce/langs/nl_BE.js +0 -7
  164. package/packages/components/other-components/sh-markdown/tinymce/langs/oc.js +0 -7
  165. package/packages/components/other-components/sh-markdown/tinymce/langs/pl.js +0 -7
  166. package/packages/components/other-components/sh-markdown/tinymce/langs/pt_BR.js +0 -7
  167. package/packages/components/other-components/sh-markdown/tinymce/langs/ro.js +0 -7
  168. package/packages/components/other-components/sh-markdown/tinymce/langs/ru.js +0 -7
  169. package/packages/components/other-components/sh-markdown/tinymce/langs/sk.js +0 -7
  170. package/packages/components/other-components/sh-markdown/tinymce/langs/sl_SI.js +0 -7
  171. package/packages/components/other-components/sh-markdown/tinymce/langs/sq.js +0 -7
  172. package/packages/components/other-components/sh-markdown/tinymce/langs/sr.js +0 -7
  173. package/packages/components/other-components/sh-markdown/tinymce/langs/sv_SE.js +0 -7
  174. package/packages/components/other-components/sh-markdown/tinymce/langs/ta.js +0 -7
  175. package/packages/components/other-components/sh-markdown/tinymce/langs/tg.js +0 -7
  176. package/packages/components/other-components/sh-markdown/tinymce/langs/th_TH.js +0 -7
  177. package/packages/components/other-components/sh-markdown/tinymce/langs/tr.js +0 -7
  178. package/packages/components/other-components/sh-markdown/tinymce/langs/ug.js +0 -7
  179. package/packages/components/other-components/sh-markdown/tinymce/langs/uk.js +0 -7
  180. package/packages/components/other-components/sh-markdown/tinymce/langs/vi.js +0 -7
  181. package/packages/components/other-components/sh-markdown/tinymce/skins/content/dark/content.css +0 -72
  182. package/packages/components/other-components/sh-markdown/tinymce/skins/content/dark/content.min.css +0 -7
  183. package/packages/components/other-components/sh-markdown/tinymce/skins/content/default/content.min.css +0 -7
  184. package/packages/components/other-components/sh-markdown/tinymce/skins/content/document/content.css +0 -72
  185. package/packages/components/other-components/sh-markdown/tinymce/skins/content/document/content.min.css +0 -7
  186. package/packages/components/other-components/sh-markdown/tinymce/skins/content/writer/content.css +0 -68
  187. package/packages/components/other-components/sh-markdown/tinymce/skins/content/writer/content.min.css +0 -7
  188. package/packages/components/other-components/sh-markdown/tinymce/skins/ui/oxide-dark/content.css +0 -714
  189. package/packages/components/other-components/sh-markdown/tinymce/skins/ui/oxide-dark/content.inline.css +0 -726
  190. package/packages/components/other-components/sh-markdown/tinymce/skins/ui/oxide-dark/content.inline.min.css +0 -7
  191. package/packages/components/other-components/sh-markdown/tinymce/skins/ui/oxide-dark/content.min.css +0 -7
  192. package/packages/components/other-components/sh-markdown/tinymce/skins/ui/oxide-dark/content.mobile.css +0 -29
  193. package/packages/components/other-components/sh-markdown/tinymce/skins/ui/oxide-dark/content.mobile.min.css +0 -7
  194. package/packages/components/other-components/sh-markdown/tinymce/skins/ui/oxide-dark/fonts/tinymce-mobile.woff +0 -0
  195. package/packages/components/other-components/sh-markdown/tinymce/skins/ui/oxide-dark/skin.css +0 -3047
  196. package/packages/components/other-components/sh-markdown/tinymce/skins/ui/oxide-dark/skin.min.css +0 -7
  197. package/packages/components/other-components/sh-markdown/tinymce/skins/ui/oxide-dark/skin.mobile.css +0 -673
  198. package/packages/components/other-components/sh-markdown/tinymce/skins/ui/oxide-dark/skin.mobile.min.css +0 -7
  199. package/packages/components/other-components/sh-markdown/tinymce/skins/ui/oxide-dark/skin.shadowdom.css +0 -37
  200. package/packages/components/other-components/sh-markdown/tinymce/skins/ui/oxide-dark/skin.shadowdom.min.css +0 -7
  201. package/packages/directive/directives.js +0 -27
  202. package/packages/iview/css/index.scss +0 -32
  203. package/packages/iview/index.js +0 -25
  204. /package/packages/components/global-components/{sh-vxe-form → sh-form}/components/form-item.vue +0 -0
  205. /package/packages/components/global-components/{sh-vxe-form → sh-form}/js/props.js +0 -0
  206. /package/packages/components/global-components/{sh-vxe-table → sh-table}/js/excel_to_json.js +0 -0
@@ -1,224 +1,224 @@
1
- <template>
2
- <Row :gutter="10">
3
- <template v-for="(menuitem, menuindex) in resetRenderList(list)" :key="menuindex">
4
- <Col v-bind="colsConfig">
5
- <sh-card :icon="menuitem.icon" size="small" :title="menuitem.meta.title" :icon-size="18" :color="getMenuColor(menuindex)" :padding="8" class="menuCard">
6
- <div :ref="`cardBtnsWrap${menuindex}`" class="cardBtnsWrap">
7
- <template v-for="cardBtn in menuitem.buttons" :key="cardBtn.value">
8
- <template v-if="menuitem.children && menuitem.children.length > 0">
9
- <Poptip
10
- v-model="cardBtn.visible"
11
- transfer
12
- :title="cardBtn.name"
13
- :width="poptipWidth"
14
- :placement="cardBtn.placement"
15
- @on-popper-show="handleFocusBtn(cardBtn, menuindex)"
16
- @on-popper-hide="handleBlurBtn(cardBtn, menuindex)">
17
- <div class="cardBtn" :style="getCardStyle(menuindex, cardActive === cardBtn.value + menuindex)" @click="handleCardBtn($event, cardBtn, menuitem, menuindex)">
18
- <sh-icon :type="cardBtn.icon" :size="16" class="mr-2" :color="getMenuColor(menuindex, cardActive === cardBtn.value + menuindex)" />
19
- <span>{{ cardBtn.name }}</span>
20
- <sh-corner v-if="getBudgeNum(menuitem, cardBtn)" v-bind="btnCornerConfig(cardBtn, menuitem, menuindex)"></sh-corner>
21
- </div>
22
- <template #content>
23
- <div class="cardPoptipContent">
24
- <menuBox v-if="cardActive.startsWith('menus')" :menu="menuitem" first></menuBox>
25
- <sh-empty v-else></sh-empty>
26
- </div>
27
- </template>
28
- </Poptip>
29
- </template>
30
- <template v-else>
31
- <div class="cardBtn" :style="getCardStyle(menuindex, cardActive === cardBtn.value + menuindex)" @click="handleCardBtn($event, cardBtn, menuitem, menuindex)">
32
- <sh-icon :type="cardBtn.icon" :size="16" class="mr-2" :color="getMenuColor(menuindex, cardActive === cardBtn.value + menuindex)" />
33
- <span>{{ cardBtn.name }}</span>
34
- <sh-corner v-if="getBudgeNum(menuitem, cardBtn)" v-bind="btnCornerConfig(cardBtn, menuitem, menuindex)"></sh-corner>
35
- </div>
36
- </template>
37
- </template>
38
- </div>
39
- </sh-card>
40
- </Col>
41
- </template>
42
- </Row>
43
- </template>
44
-
45
- <script>
46
- import menuBox from './menu-box.vue'
47
- export default {
48
- name: 'MenuCard',
49
- components: {
50
- menuBox
51
- },
52
- props: {
53
- list: {
54
- type: Array,
55
- default() {
56
- return []
57
- }
58
- },
59
- menuColors: {
60
- type: Array,
61
- default() {
62
- return [
63
- { default: '#e7f1ff', active: '#1890ff' },
64
- { default: '#FFEFEB', active: '#FF652E' },
65
- { default: '#F4F1FF', active: '#997BFF' },
66
- { default: '#E6F6F2', active: '#01A883' },
67
- { default: '#FFF6E8', active: '#FFA522' },
68
- { default: '#ffe5e5', active: '#e62340' },
69
- { default: '#dbffff', active: '#13C2C2' },
70
- { default: '#e2f1ff', active: '#003366' },
71
- { default: '#e6cdff', active: '#722ED1' },
72
- { default: '#ffccd6', active: '#ff5d7a' }
73
- ]
74
- }
75
- },
76
- cardBtns: {
77
- type: Array,
78
- default() {
79
- return [
80
- { name: '功能菜单', value: 'menus', icon: 'ios-apps' },
81
- { name: '操作指南', value: 'guides', icon: 'ios-navigate', placement: 'bottom-end' },
82
- { name: '待办事项', value: 'todo', icon: 'md-calendar' },
83
- { name: '已办事项', value: 'untodo', icon: 'ios-calendar', placement: 'bottom-end' }
84
- ]
85
- }
86
- }
87
- },
88
- data() {
89
- return {
90
- poptipWidth: 320,
91
- cardActive: ''
92
- }
93
- },
94
- computed: {
95
- colsConfig() {
96
- return {
97
- xs: { span: 24 },
98
- sm: { span: 24 },
99
- md: { span: 12 },
100
- lg: { span: 8 },
101
- xl: { span: 8 },
102
- xxl: { span: 6 }
103
- }
104
- }
105
- },
106
- methods: {
107
- // 重新生成卡片列表
108
- resetRenderList(list) {
109
- return this.$vUtils.mapTree(list, item => {
110
- return {
111
- buttons: this.cardBtns.map(btn => {
112
- return {
113
- visible: false,
114
- placement: 'bottom-start',
115
- ...btn
116
- }
117
- }),
118
- ...item
119
- }
120
- })
121
- },
122
- // 动态角标配置
123
- btnCornerConfig(cardBtn, menuitem, menuindex) {
124
- return {
125
- title: this.getBudgeNum(menuitem, cardBtn),
126
- dark: true,
127
- width: '30',
128
- height: '30',
129
- color: this.getMenuColor(menuindex)
130
- }
131
- },
132
- getMenuColor(menuindex, active) {
133
- return this.getCardStyle(menuindex, true)[active ? 'color' : 'backgroundColor']
134
- },
135
- getCardStyle(index, active) {
136
- let themeLength = this.menuColors.length
137
- let backgroundColor = this.menuColors[index % themeLength][active ? 'active' : 'default']
138
- let color = active ? '#fff' : ''
139
- return { backgroundColor, color }
140
- },
141
- getBudgeNum(menu, card) {
142
- switch (card.value) {
143
- case 'menus':
144
- return this.$vUtils.toTreeArray(menu.children || []).length
145
- default:
146
- return ''
147
- }
148
- },
149
- handleCardBtn($event, cardBtn, menu, menuIndex) {
150
- if (!menu.children || menu.children.length < 1) {
151
- cardBtn.visible = false
152
- return this.routerTo(menu)
153
- }
154
- let windowWidth = window.document.body.clientWidth
155
- let selfOffsetRight = windowWidth - $event.pageX
156
- cardBtn.placement = selfOffsetRight < this.poptipWidth ? 'bottom-end' : 'bottom-start'
157
- cardBtn.visible = true
158
- },
159
- handleFocusBtn(card, index) {
160
- this.cardActive = card.value + index
161
- },
162
- handleBlurBtn(card, index) {
163
- if (this.cardActive === card.value + index) this.cardActive = ''
164
- }
165
- }
166
- }
167
- </script>
168
-
169
- <style lang="scss">
170
- .menuCard {
171
- margin-bottom: 10px;
172
- }
173
- .cardPoptipContent {
174
- max-height: 400px;
175
- overflow: auto;
176
- }
177
- .cardBtnsWrap {
178
- position: relative;
179
- display: flex;
180
- justify-content: space-between;
181
- align-items: center;
182
- flex-wrap: wrap;
183
- > div {
184
- width: 47%;
185
- display: inline-flex;
186
- align-items: center;
187
- margin: 1.5%;
188
- > .ivu-poptip-rel,
189
- > .ivu-tooltip-rel,
190
- > .ivu-dropdown-rel {
191
- width: 100%;
192
- display: block;
193
- }
194
- }
195
- .cardBtn {
196
- display: flex;
197
- align-items: center;
198
- background-color: #eee;
199
- font-size: 1.1em;
200
- padding: 10px;
201
- box-sizing: border-box;
202
- cursor: pointer;
203
- position: relative;
204
- &:hover {
205
- opacity: 0.8;
206
- }
207
- }
208
- }
209
- .menuBoxWrap {
210
- padding-left: 2em;
211
- position: relative;
212
- &.first {
213
- padding-left: 0;
214
- }
215
- .menuBoxFilter {
216
- margin-bottom: 5px;
217
- }
218
- .menuBoxTitle {
219
- display: block;
220
- padding: 5px 0;
221
- cursor: pointer;
222
- }
223
- }
224
- </style>
1
+ <template>
2
+ <sh-row :gutter="10">
3
+ <template v-for="(menuitem, menuindex) in resetRenderList(list)" :key="menuindex">
4
+ <sh-col v-bind="colsConfig">
5
+ <sh-card :icon="menuitem.icon" size="small" :title="menuitem.meta.title" :icon-size="18" :color="getMenuColor(menuindex)" :padding="8" class="menuCard">
6
+ <div :ref="`cardBtnsWrap${menuindex}`" class="cardBtnsWrap">
7
+ <template v-for="cardBtn in menuitem.buttons" :key="cardBtn.value">
8
+ <template v-if="menuitem.children && menuitem.children.length > 0">
9
+ <sh-poptip
10
+ v-model="cardBtn.visible"
11
+ transfer
12
+ :title="cardBtn.name"
13
+ :width="poptipWidth"
14
+ :placement="cardBtn.placement"
15
+ @on-popper-show="handleFocusBtn(cardBtn, menuindex)"
16
+ @on-popper-hide="handleBlurBtn(cardBtn, menuindex)">
17
+ <div class="cardBtn" :style="getCardStyle(menuindex, cardActive === cardBtn.value + menuindex)" @click="handleCardBtn($event, cardBtn, menuitem, menuindex)">
18
+ <sh-icon :type="cardBtn.icon" :size="16" class="mr-2" :color="getMenuColor(menuindex, cardActive === cardBtn.value + menuindex)" />
19
+ <span>{{ cardBtn.name }}</span>
20
+ <sh-corner v-if="getBudgeNum(menuitem, cardBtn)" v-bind="btnCornerConfig(cardBtn, menuitem, menuindex)"></sh-corner>
21
+ </div>
22
+ <template #content>
23
+ <div class="cardPoptipContent">
24
+ <menuBox v-if="cardActive.startsWith('menus')" :menu="menuitem" first></menuBox>
25
+ <sh-empty v-else></sh-empty>
26
+ </div>
27
+ </template>
28
+ </sh-poptip>
29
+ </template>
30
+ <template v-else>
31
+ <div class="cardBtn" :style="getCardStyle(menuindex, cardActive === cardBtn.value + menuindex)" @click="handleCardBtn($event, cardBtn, menuitem, menuindex)">
32
+ <sh-icon :type="cardBtn.icon" :size="16" class="mr-2" :color="getMenuColor(menuindex, cardActive === cardBtn.value + menuindex)" />
33
+ <span>{{ cardBtn.name }}</span>
34
+ <sh-corner v-if="getBudgeNum(menuitem, cardBtn)" v-bind="btnCornerConfig(cardBtn, menuitem, menuindex)"></sh-corner>
35
+ </div>
36
+ </template>
37
+ </template>
38
+ </div>
39
+ </sh-card>
40
+ </sh-col>
41
+ </template>
42
+ </sh-row>
43
+ </template>
44
+
45
+ <script>
46
+ import menuBox from './menu-box.vue'
47
+ export default {
48
+ name: 'MenuCard',
49
+ components: {
50
+ menuBox
51
+ },
52
+ props: {
53
+ list: {
54
+ type: Array,
55
+ default() {
56
+ return []
57
+ }
58
+ },
59
+ menuColors: {
60
+ type: Array,
61
+ default() {
62
+ return [
63
+ { default: '#e7f1ff', active: '#1890ff' },
64
+ { default: '#FFEFEB', active: '#FF652E' },
65
+ { default: '#F4F1FF', active: '#997BFF' },
66
+ { default: '#E6F6F2', active: '#01A883' },
67
+ { default: '#FFF6E8', active: '#FFA522' },
68
+ { default: '#ffe5e5', active: '#e62340' },
69
+ { default: '#dbffff', active: '#13C2C2' },
70
+ { default: '#e2f1ff', active: '#003366' },
71
+ { default: '#e6cdff', active: '#722ED1' },
72
+ { default: '#ffccd6', active: '#ff5d7a' }
73
+ ]
74
+ }
75
+ },
76
+ cardBtns: {
77
+ type: Array,
78
+ default() {
79
+ return [
80
+ { name: '功能菜单', value: 'menus', icon: 'ios-apps' },
81
+ { name: '操作指南', value: 'guides', icon: 'ios-navigate', placement: 'bottom-end' },
82
+ { name: '待办事项', value: 'todo', icon: 'md-calendar' },
83
+ { name: '已办事项', value: 'untodo', icon: 'ios-calendar', placement: 'bottom-end' }
84
+ ]
85
+ }
86
+ }
87
+ },
88
+ data() {
89
+ return {
90
+ poptipWidth: 320,
91
+ cardActive: ''
92
+ }
93
+ },
94
+ computed: {
95
+ colsConfig() {
96
+ return {
97
+ xs: { span: 24 },
98
+ sm: { span: 24 },
99
+ md: { span: 12 },
100
+ lg: { span: 8 },
101
+ xl: { span: 8 },
102
+ xxl: { span: 6 }
103
+ }
104
+ }
105
+ },
106
+ methods: {
107
+ // 重新生成卡片列表
108
+ resetRenderList(list) {
109
+ return this.$vUtils.mapTree(list, item => {
110
+ return {
111
+ buttons: this.cardBtns.map(btn => {
112
+ return {
113
+ visible: false,
114
+ placement: 'bottom-start',
115
+ ...btn
116
+ }
117
+ }),
118
+ ...item
119
+ }
120
+ })
121
+ },
122
+ // 动态角标配置
123
+ btnCornerConfig(cardBtn, menuitem, menuindex) {
124
+ return {
125
+ title: this.getBudgeNum(menuitem, cardBtn),
126
+ dark: true,
127
+ width: '30',
128
+ height: '30',
129
+ color: this.getMenuColor(menuindex)
130
+ }
131
+ },
132
+ getMenuColor(menuindex, active) {
133
+ return this.getCardStyle(menuindex, true)[active ? 'color' : 'backgroundColor']
134
+ },
135
+ getCardStyle(index, active) {
136
+ let themeLength = this.menuColors.length
137
+ let backgroundColor = this.menuColors[index % themeLength][active ? 'active' : 'default']
138
+ let color = active ? '#fff' : ''
139
+ return { backgroundColor, color }
140
+ },
141
+ getBudgeNum(menu, card) {
142
+ switch (card.value) {
143
+ case 'menus':
144
+ return this.$vUtils.toTreeArray(menu.children || []).length
145
+ default:
146
+ return ''
147
+ }
148
+ },
149
+ handleCardBtn($event, cardBtn, menu, menuIndex) {
150
+ if (!menu.children || menu.children.length < 1) {
151
+ cardBtn.visible = false
152
+ return this.routerTo(menu)
153
+ }
154
+ let windowWidth = window.document.body.clientWidth
155
+ let selfOffsetRight = windowWidth - $event.pageX
156
+ cardBtn.placement = selfOffsetRight < this.poptipWidth ? 'bottom-end' : 'bottom-start'
157
+ cardBtn.visible = true
158
+ },
159
+ handleFocusBtn(card, index) {
160
+ this.cardActive = card.value + index
161
+ },
162
+ handleBlurBtn(card, index) {
163
+ if (this.cardActive === card.value + index) this.cardActive = ''
164
+ }
165
+ }
166
+ }
167
+ </script>
168
+
169
+ <style lang="scss">
170
+ .menuCard {
171
+ margin-bottom: 10px;
172
+ }
173
+ .cardPoptipContent {
174
+ max-height: 400px;
175
+ overflow: auto;
176
+ }
177
+ .cardBtnsWrap {
178
+ position: relative;
179
+ display: flex;
180
+ justify-content: space-between;
181
+ align-items: center;
182
+ flex-wrap: wrap;
183
+ > div {
184
+ width: 47%;
185
+ display: inline-flex;
186
+ align-items: center;
187
+ margin: 1.5%;
188
+ > .ivu-poptip-rel,
189
+ > .ivu-tooltip-rel,
190
+ > .ivu-dropdown-rel {
191
+ width: 100%;
192
+ display: block;
193
+ }
194
+ }
195
+ .cardBtn {
196
+ display: flex;
197
+ align-items: center;
198
+ background-color: #eee;
199
+ font-size: 1.1em;
200
+ padding: 10px;
201
+ box-sizing: border-box;
202
+ cursor: pointer;
203
+ position: relative;
204
+ &:hover {
205
+ opacity: 0.8;
206
+ }
207
+ }
208
+ }
209
+ .menuBoxWrap {
210
+ padding-left: 2em;
211
+ position: relative;
212
+ &.first {
213
+ padding-left: 0;
214
+ }
215
+ .menuBoxFilter {
216
+ margin-bottom: 5px;
217
+ }
218
+ .menuBoxTitle {
219
+ display: block;
220
+ padding: 5px 0;
221
+ cursor: pointer;
222
+ }
223
+ }
224
+ </style>
@@ -1,6 +1,4 @@
1
- import '../assets/icons/iconfont.css'
2
-
3
- import '../assets/css/theme.scss'
4
- import '../assets/css/loader.scss'
5
- import '../assets/css/main.scss'
6
- import '../assets/css/animated.scss'
1
+ import '../assets/css/theme.scss'
2
+ import '../assets/css/loader.scss'
3
+ import '../assets/css/main.scss'
4
+ import '../assets/css/animated.scss'
@@ -1,19 +1,19 @@
1
- import directive from './directives'
2
-
3
- const index = {
4
- install: function (Vue) {
5
- /**
6
- * 拖拽指令 v-draggable="options"
7
- * options = {
8
- * trigger: /这里传入作为拖拽触发器的CSS选择器/,
9
- * body: /这里传入需要移动容器的CSS选择器/,
10
- * recover: /拖动结束之后是否恢复到原来的位置/
11
- * }
12
- */
13
- Vue.directive('draggable', directive.draggable)
14
- Vue.directive('debounce', directive.preventClick)
15
- Vue.directive('ripple', directive.ripple)
16
- }
17
- }
18
-
19
- export default index
1
+ import draggable from './module/draggable'
2
+ import resize from './module/resize'
3
+ import lineClamp from './module/line-clamp'
4
+ import preventClick from './module/prevent-click'
5
+ import clickOut from './module/click-out'
6
+ import ripple from './module/ripple'
7
+
8
+ const index = {
9
+ install(Vue) {
10
+ Vue.directive('draggable', draggable)
11
+ Vue.directive('resize', resize)
12
+ Vue.directive('lineClamp', lineClamp)
13
+ Vue.directive('debounce', preventClick)
14
+ Vue.directive('clickout', clickOut)
15
+ Vue.directive('ripple', ripple)
16
+ }
17
+ }
18
+
19
+ export default index
@@ -0,0 +1,14 @@
1
+ export default {
2
+ beforeMount(el, binding, vnode) {
3
+ function clickHandler(e) {
4
+ if (el.contains(e.target)) return false
5
+ binding.value(e)
6
+ }
7
+ el.__vueClickOutside__ = clickHandler
8
+ document.addEventListener('click', clickHandler)
9
+ },
10
+ unmounted(el, binding) {
11
+ document.removeEventListener('click', el.__vueClickOutside__)
12
+ delete el.__vueClickOutside__
13
+ }
14
+ }
@@ -1,42 +1,42 @@
1
- import { utils } from 'sh-tools'
2
-
3
- export default {
4
- inserted: (el, binding, vnode) => {
5
- let triggerDom = document.querySelector(binding.value.trigger)
6
- triggerDom.style.cursor = 'move'
7
- let bodyDom = document.querySelector(binding.value.body)
8
- let pageX = 0
9
- let pageY = 0
10
- let transformX = 0
11
- let transformY = 0
12
- let canMove = false
13
- const handleMousedown = e => {
14
- let transform = /\(.*\)/.exec(bodyDom.style.transform)
15
- if (transform) {
16
- transform = transform[0].slice(1, transform[0].length - 1)
17
- let splitxy = transform.split('px, ')
18
- transformX = parseFloat(splitxy[0])
19
- transformY = parseFloat(splitxy[1].split('px')[0])
20
- }
21
- pageX = e.pageX
22
- pageY = e.pageY
23
- canMove = true
24
- }
25
- const handleMousemove = e => {
26
- let xOffset = e.pageX - pageX + transformX
27
- let yOffset = e.pageY - pageY + transformY
28
- if (canMove) bodyDom.style.transform = `translate(${xOffset}px, ${yOffset}px)`
29
- }
30
- const handleMouseup = e => {
31
- canMove = false
32
- }
33
- utils.on(triggerDom, 'mousedown', handleMousedown)
34
- utils.on(document, 'mousemove', handleMousemove)
35
- utils.on(document, 'mouseup', handleMouseup)
36
- },
37
- update: (el, binding, vnode) => {
38
- if (!binding.value.recover) return
39
- let bodyDom = document.querySelector(binding.value.body)
40
- bodyDom.style.transform = ''
41
- }
42
- }
1
+ import { utils } from 'sh-tools'
2
+
3
+ export default {
4
+ mounted: (el, binding, vnode) => {
5
+ let triggerDom = document.querySelector(binding.value.trigger)
6
+ triggerDom.style.cursor = 'move'
7
+ let bodyDom = document.querySelector(binding.value.body)
8
+ let pageX = 0
9
+ let pageY = 0
10
+ let transformX = 0
11
+ let transformY = 0
12
+ let canMove = false
13
+ const handleMousedown = e => {
14
+ let transform = /\(.*\)/.exec(bodyDom.style.transform)
15
+ if (transform) {
16
+ transform = transform[0].slice(1, transform[0].length - 1)
17
+ let splitxy = transform.split('px, ')
18
+ transformX = parseFloat(splitxy[0])
19
+ transformY = parseFloat(splitxy[1].split('px')[0])
20
+ }
21
+ pageX = e.pageX
22
+ pageY = e.pageY
23
+ canMove = true
24
+ }
25
+ const handleMousemove = e => {
26
+ let xOffset = e.pageX - pageX + transformX
27
+ let yOffset = e.pageY - pageY + transformY
28
+ if (canMove) bodyDom.style.transform = `translate(${xOffset}px, ${yOffset}px)`
29
+ }
30
+ const handleMouseup = e => {
31
+ canMove = false
32
+ }
33
+ utils.on(triggerDom, 'mousedown', handleMousedown)
34
+ utils.on(document, 'mousemove', handleMousemove)
35
+ utils.on(document, 'mouseup', handleMouseup)
36
+ },
37
+ updated: (el, binding, vnode) => {
38
+ if (!binding.value.recover) return
39
+ let bodyDom = document.querySelector(binding.value.body)
40
+ bodyDom.style.transform = ''
41
+ }
42
+ }
@@ -0,0 +1,22 @@
1
+ /**
2
+ * 限制文本最多显示几行,以...结束,仅适用于 webkit 内核浏览器
3
+ * */
4
+ import { utils } from 'sh-tools'
5
+
6
+ export default {
7
+ mounted(el, binding) {
8
+ if (binding.value) {
9
+ utils.addClass(el, 'sh-line-clamp')
10
+ el.style['-webkit-line-clamp'] = binding.value
11
+ }
12
+ },
13
+ updated(el, binding) {
14
+ if (binding.value) {
15
+ el.style['-webkit-line-clamp'] = binding.value
16
+ }
17
+ },
18
+ unmounted(el) {
19
+ utils.removeClass(el, 'sh-line-clamp')
20
+ el.style['-webkit-line-clamp'] = null
21
+ }
22
+ }
@@ -0,0 +1,18 @@
1
+ import { utils } from 'sh-tools'
2
+
3
+ let preventClass = 'sh-prevent--disabled'
4
+
5
+ export default {
6
+ inserted(el, binding) {
7
+ el.addEventListener('click', () => {
8
+ if (!el.disabled) {
9
+ el.disabled = true
10
+ if (!utils.hasClass(el, preventClass)) utils.addClass(el, preventClass)
11
+ setTimeout(() => {
12
+ el.disabled = false
13
+ if (utils.hasClass(el, preventClass)) utils.removeClass(el, preventClass)
14
+ }, binding.value || 1500)
15
+ }
16
+ })
17
+ }
18
+ }
@@ -0,0 +1,19 @@
1
+ import elementResizeDetectorMaker from 'element-resize-detector'
2
+
3
+ export default {
4
+ // 使用 bind,会在初始化时调用两次handler
5
+ mounted(el, binding) {
6
+ function resizeHandler(e) {
7
+ binding.value(e)
8
+ }
9
+ el.__resizeHandler__ = resizeHandler
10
+ el.__observer__ = elementResizeDetectorMaker()
11
+ el.__observer__.listenTo(el, resizeHandler)
12
+ },
13
+ updated() {},
14
+ unmounted(el, binding) {
15
+ el.__observer__.removeListener(el, el.__resizeHandler__)
16
+ delete el.__resizeHandler__
17
+ delete el.__observer__
18
+ }
19
+ }