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,269 @@
1
+ <template>
2
+ <div class="sh-page-header" :style="styles" :type="type" :size="size" :class="classes">
3
+ <sh-loading :loading="loading" />
4
+ <div class="sh-page-header-heading">
5
+ <div class="sh-page-header-heading-left">
6
+ <div v-if="showback" class="sh-page-header-back">
7
+ <div class="sh-page-header-back-button" @click="handleBack"><Icon :size="iconSize" type="ios-arrow-back" /></div>
8
+ </div>
9
+ <sh-icon v-if="icon" :type="icon" :size="iconSize" :color="iconColor"></sh-icon>
10
+ <span v-if="title || $slots.title" class="sh-page-header-heading-title" :style="{ textAlign: align, flex: align ? '1' : 'auto' }">
11
+ <slot name="title">{{ title }}</slot>
12
+ </span>
13
+ <span v-if="subTitle || $slots.subTitle" class="sh-page-header-heading-sub-title">
14
+ <slot name="subTitle">{{ subTitle }}</slot>
15
+ </span>
16
+ <span v-if="$slots.tags" class="sh-page-header-heading-tags"><slot name="tags"></slot></span>
17
+ </div>
18
+ <div class="sh-page-header-heading-right">
19
+ <span v-if="$slots.extra" class="sh-page-header-heading-extra"><slot name="extra"></slot></span>
20
+ </div>
21
+ </div>
22
+ <div v-if="$slots.default" class="sh-page-header-content" :class="{ 'no-padding': !title && !$slots.title && !subTitle && !$slots.subTitle && !$slots.tags && !$slots.extra }">
23
+ <slot></slot>
24
+ </div>
25
+ <slot name="body"></slot>
26
+ <div v-if="$slots.footer" class="sh-page-header-footer"><slot name="footer"></slot></div>
27
+ </div>
28
+ </template>
29
+
30
+ <script>
31
+ export default {
32
+ name: 'ShHeader',
33
+ components: {},
34
+ props: {
35
+ size: {
36
+ type: String,
37
+ default: 'default'
38
+ },
39
+ color: {
40
+ type: String,
41
+ default: ''
42
+ },
43
+ theme: {
44
+ type: String,
45
+ default: ''
46
+ },
47
+ align: {
48
+ type: String,
49
+ default: 'left'
50
+ },
51
+ icon: {
52
+ type: String
53
+ },
54
+ iconSize: {
55
+ type: Number,
56
+ default: 20
57
+ },
58
+ iconColor: {
59
+ type: String
60
+ },
61
+ ghost: {
62
+ type: Boolean
63
+ },
64
+ full: {
65
+ type: Boolean
66
+ },
67
+ border: {
68
+ type: Boolean
69
+ },
70
+ type: {
71
+ type: String,
72
+ default: ''
73
+ },
74
+ title: {
75
+ type: String,
76
+ default: ''
77
+ },
78
+ subTitle: {
79
+ type: String,
80
+ default: ''
81
+ },
82
+ loading: {
83
+ type: Boolean
84
+ },
85
+ nowrap: {
86
+ type: Boolean
87
+ },
88
+ showback: {
89
+ type: Boolean
90
+ }
91
+ },
92
+ emits: ['back'],
93
+ data() {
94
+ return {}
95
+ },
96
+ computed: {
97
+ styles() {
98
+ return {
99
+ backgroundColor: this.color
100
+ }
101
+ },
102
+ classes() {
103
+ return [
104
+ {
105
+ 'sh-page-header-ghost': this.ghost,
106
+ 'sh-page-header-full': this.full,
107
+ 'sh-page-header-border': this.border,
108
+ 'has-footer': this.$slots.footer,
109
+ [`sh-page-header-${this.theme}`]: this.theme,
110
+ 'sh-page-header-nowrap': this.nowrap
111
+ }
112
+ ]
113
+ }
114
+ },
115
+ created() {},
116
+ methods: {
117
+ handleBack() {
118
+ this.$emit('back')
119
+ }
120
+ }
121
+ }
122
+ </script>
123
+
124
+ <style lang="scss" scoped>
125
+ .sh-page-header {
126
+ display: block;
127
+ box-sizing: border-box;
128
+ border-radius: 2px;
129
+ line-height: 1.5;
130
+ position: relative;
131
+ padding: 0.5rem 1rem;
132
+ background-color: var(--body-background);
133
+ &.sh-page-header-full {
134
+ padding-left: 0;
135
+ padding-right: 0;
136
+ }
137
+ &.sh-page-header-dark {
138
+ color: #fff;
139
+ background: #333;
140
+ }
141
+ &.sh-page-header-primary {
142
+ background-color: var(--theme-color);
143
+ color: #fff;
144
+ }
145
+ &.sh-page-header-success {
146
+ background-color: var(--success-color);
147
+ color: #fff;
148
+ }
149
+ &.sh-page-header-warning {
150
+ background-color: var(--warning-color);
151
+ color: #fff;
152
+ }
153
+ &.sh-page-header-error {
154
+ background-color: var(--error-color);
155
+ color: #fff;
156
+ }
157
+ &.sh-page-header-info {
158
+ background-color: var(--info-color);
159
+ color: #fff;
160
+ }
161
+ &.sh-page-header-ghost {
162
+ background-color: transparent;
163
+ }
164
+ &.sh-page-header-border {
165
+ border: 1px solid var(--border-color);
166
+ }
167
+ &.sh-page-header-nowrap {
168
+ .sh-page-header-heading-title {
169
+ white-space: nowrap;
170
+ }
171
+ }
172
+ &[type='border'] {
173
+ & > .sh-page-header-heading {
174
+ padding: 1px 0 1px 10px;
175
+ border-left: 5px solid var(--theme-color) !important;
176
+ }
177
+ }
178
+ &[size='large'] {
179
+ .sh-page-header-heading-title {
180
+ font-size: 1.4285rem;
181
+ }
182
+ }
183
+ &[size='default'] {
184
+ .sh-page-header-heading-title {
185
+ font-size: 1.2857rem;
186
+ }
187
+ }
188
+ &[size='small'] {
189
+ .sh-page-header-heading-title {
190
+ font-size: 1rem;
191
+ }
192
+ }
193
+ &[size='mini'] {
194
+ .sh-page-header-heading-title {
195
+ font-size: 0.8571rem;
196
+ }
197
+ }
198
+ .sh-page-header-heading {
199
+ width: 100%;
200
+ display: flex;
201
+ justify-content: space-between;
202
+ align-items: center;
203
+ .sh-page-header-heading-left {
204
+ flex: 1;
205
+ display: inline-flex;
206
+ justify-content: flex-start;
207
+ align-items: center;
208
+ .sh-page-header-back {
209
+ font-size: 1.2rem;
210
+ line-height: 1;
211
+ margin-right: 0.5rem;
212
+ .sh-page-header-back-button {
213
+ color: inherit;
214
+ text-decoration: none;
215
+ outline: none;
216
+ transition: color 0.3s;
217
+ cursor: pointer;
218
+ &:hover {
219
+ opacity: 0.85;
220
+ }
221
+ }
222
+ }
223
+ .sh-page-header-heading-title {
224
+ display: block;
225
+ margin-right: 0.5rem;
226
+ font-weight: 600;
227
+ }
228
+ i + .sh-page-header-heading-title {
229
+ margin-left: 0.5rem;
230
+ }
231
+ .sh-page-header-heading-sub-title {
232
+ margin-right: 0.5rem;
233
+ color: rgba(0, 0, 0, 0.45);
234
+ }
235
+ .sh-page-header-heading-tags {
236
+ }
237
+ }
238
+ .sh-page-header-heading-right {
239
+ .sh-page-header-heading-extra {
240
+ }
241
+ }
242
+ }
243
+ .sh-page-header-content {
244
+ margin-top: 10px;
245
+ &.no-padding {
246
+ padding-top: 0;
247
+ }
248
+ }
249
+ .sh-page-header-footer {
250
+ margin-top: 10px;
251
+ }
252
+ }
253
+
254
+ .mobile {
255
+ .sh-page-header {
256
+ &.sh-page-header-nowrap {
257
+ .sh-page-header-heading-title {
258
+ white-space: normal;
259
+ }
260
+ }
261
+ }
262
+ }
263
+
264
+ .theme--dark {
265
+ .sh-page-header {
266
+ background: transparent;
267
+ }
268
+ }
269
+ </style>
@@ -0,0 +1,32 @@
1
+ <template>
2
+ <i :class="`iconfont ${type}`" :style="styles"></i>
3
+ </template>
4
+
5
+ <script>
6
+ export default {
7
+ name: 'IconfontIcons',
8
+ props: {
9
+ type: {
10
+ type: String,
11
+ required: true
12
+ },
13
+ color: {
14
+ type: String
15
+ },
16
+ size: {
17
+ type: [Number, String],
18
+ default: 16
19
+ }
20
+ },
21
+ computed: {
22
+ styles() {
23
+ return {
24
+ fontSize: `${this.size}px`,
25
+ color: this.color
26
+ }
27
+ }
28
+ }
29
+ }
30
+ </script>
31
+
32
+ <style></style>
@@ -0,0 +1,27 @@
1
+ <template>
2
+ <component :is="iconType" :type="type" :color="color" :size="size" />
3
+ </template>
4
+
5
+ <script>
6
+ import Icons from './icons'
7
+ export default {
8
+ name: 'ShIcon',
9
+ components: { Icons },
10
+ props: {
11
+ type: {
12
+ type: String,
13
+ required: true
14
+ },
15
+ color: String,
16
+ size: [Number, String]
17
+ },
18
+ computed: {
19
+ iconType() {
20
+ return this.type.startsWith('shicon') ? 'Icons' : 'Icon'
21
+ }
22
+ },
23
+ methods: {}
24
+ }
25
+ </script>
26
+
27
+ <style></style>
@@ -0,0 +1,57 @@
1
+ <template>
2
+ <Col :span="column.span || span" v-bind="column.colProps || col">
3
+ <template v-if="hasChildren(column)">
4
+ <template v-for="(child, childIndex) in column.children" :key="childIndex">
5
+ <iv-group-item :column="child" :data="data" :group-renders="groupRenders" :size="size" :span="span" :col="col" />
6
+ </template>
7
+ </template>
8
+ <template v-else>
9
+ <iv-single-item :column="column" :data="data" :group-renders="groupRenders" :size="size" />
10
+ </template>
11
+ </Col>
12
+ </template>
13
+
14
+ <script>
15
+ import IvSingleItem from './iv-single-item.vue'
16
+ export default {
17
+ name: 'IvGroupItem',
18
+ components: {
19
+ IvSingleItem
20
+ },
21
+ props: {
22
+ data: {
23
+ type: Object,
24
+ default() {
25
+ return {}
26
+ }
27
+ },
28
+ column: {
29
+ type: Object,
30
+ default() {
31
+ return {}
32
+ }
33
+ },
34
+ groupRenders: {
35
+ type: Object,
36
+ default() {
37
+ return {}
38
+ }
39
+ },
40
+ size: {
41
+ type: String
42
+ },
43
+ span: {
44
+ type: Number,
45
+ default: 24
46
+ },
47
+ col: {
48
+ type: Object,
49
+ default() {
50
+ return {}
51
+ }
52
+ }
53
+ }
54
+ }
55
+ </script>
56
+
57
+ <style scoped></style>
@@ -0,0 +1,76 @@
1
+ <template>
2
+ <FormItem v-bind="column">
3
+ <component :is="column.renderName || 'Input'" v-bind="componentProps" v-model="formDataIn[column.prop]" @change="onItemChange">
4
+ <template v-if="isGroup(column.renderName) && column.renderProps.options.length > 0">
5
+ <template v-for="(option, optionIndex) in column.renderProps.options" :key="optionIndex">
6
+ <component :is="isGroup(column.renderName)" v-bind="option" />
7
+ </template>
8
+ </template>
9
+ </component>
10
+ </FormItem>
11
+ </template>
12
+
13
+ <script>
14
+ export default {
15
+ name: 'IvSingleItem',
16
+ inject: ['shivform'],
17
+ props: {
18
+ data: {
19
+ type: Object,
20
+ default() {
21
+ return {}
22
+ }
23
+ },
24
+ column: {
25
+ type: Object,
26
+ default() {
27
+ return {}
28
+ }
29
+ },
30
+ groupRenders: {
31
+ type: Object,
32
+ default() {
33
+ return {}
34
+ }
35
+ },
36
+ size: {
37
+ type: String
38
+ }
39
+ },
40
+ data() {
41
+ return {
42
+ formDataIn: this.data
43
+ }
44
+ },
45
+ computed: {
46
+ componentProps() {
47
+ let { disabled } = this.shivform || {}
48
+ let defaultProps = {
49
+ Input: { placeholder: disabled ? '' : `请输入${this.column.label}` },
50
+ Select: { placeholder: disabled ? '' : `请选择${this.column.label}` },
51
+ Switch: { width: 50, inlinePrompt: true, activeValue: 1, inactiveValue: -1, activeText: '是', inactiveText: '否' }
52
+ }
53
+ return Object.assign({ class: ['form-item-component'] }, defaultProps[this.column.renderName], this.column.renderProps)
54
+ }
55
+ },
56
+ watch: {
57
+ data: {
58
+ handler(newvalue) {
59
+ this.formDataIn = this.data
60
+ },
61
+ deep: true
62
+ }
63
+ },
64
+ created() {},
65
+ methods: {
66
+ isGroup(field) {
67
+ return this.groupRenders[field]
68
+ },
69
+ onItemChange($event) {
70
+ this.shivform.$emit('item-change', $event, this.column)
71
+ }
72
+ }
73
+ }
74
+ </script>
75
+
76
+ <style scoped lang="scss"></style>
@@ -0,0 +1,255 @@
1
+ <template>
2
+ <div class="sh-iv-form">
3
+ <Form
4
+ ref="ivForm"
5
+ :model="data"
6
+ :rules="formRules"
7
+ :inline="inline"
8
+ :label-position="labelPosition"
9
+ :label-width="labelWidth"
10
+ :show-message="showMessage"
11
+ :autocomplete="autocomplete"
12
+ :hide-required-mark="hideRequiredMark"
13
+ :label-colon="labelColon"
14
+ :disabled="disabled">
15
+ <Row v-bind="row">
16
+ <template v-for="(column, columnIndex) in formItems" :key="columnIndex">
17
+ <iv-group-item :data="data" :column="column" :group-renders="groupRenders" :size="size" :span="span" :col="colProps" />
18
+ </template>
19
+ <Col v-if="handle" :span="span" v-bind="colProps">
20
+ <FormItem class="form-button-item">
21
+ <Button :size="size" type="primary" :disabled="disabled" @click="onFormSubmit">{{ btnSubmitText }}</Button>
22
+ <Button :size="size" type="default" @click="onFormReset">{{ btnResetText }}</Button>
23
+ </FormItem>
24
+ </Col>
25
+ </Row>
26
+ <slot name="default"></slot>
27
+ <div v-if="footer" class="sh-common-footer">
28
+ <div class="sh-common-footer-left">
29
+ <Space><slot name="formLeft"></slot></Space>
30
+ </div>
31
+ <Space class="sh-common-footer-right">
32
+ <slot name="formRight"></slot>
33
+ <Button v-ripple type="primary" :size="size" :disabled="disabled" @click="onFormSubmit">{{ btnSubmitText }}</Button>
34
+ <Button v-ripple type="default" :size="size" @click="onFormReset">{{ btnResetText }}</Button>
35
+ </Space>
36
+ </div>
37
+ </Form>
38
+ </div>
39
+ </template>
40
+
41
+ <script>
42
+ import ivGroupItem from './components/iv-group-item'
43
+ export default {
44
+ name: 'ShIvForm',
45
+ components: {
46
+ ivGroupItem
47
+ },
48
+ provide() {
49
+ return {
50
+ shivform: this
51
+ }
52
+ },
53
+ props: {
54
+ data: {
55
+ type: Object,
56
+ default() {
57
+ return {}
58
+ }
59
+ },
60
+ items: {
61
+ type: Array,
62
+ default() {
63
+ return []
64
+ }
65
+ },
66
+ rules: {
67
+ type: Object,
68
+ default() {
69
+ return {}
70
+ }
71
+ },
72
+ inline: {
73
+ type: Boolean
74
+ },
75
+ labelPosition: {
76
+ type: String
77
+ },
78
+ labelWidth: {
79
+ type: Number,
80
+ default: 100
81
+ },
82
+ showMessage: {
83
+ type: Boolean,
84
+ default: true
85
+ },
86
+ autocomplete: {
87
+ type: String
88
+ },
89
+ hideRequiredMark: {
90
+ type: Boolean
91
+ },
92
+ labelColon: {
93
+ type: Boolean
94
+ },
95
+ disabled: {
96
+ type: Boolean
97
+ },
98
+ footer: {
99
+ type: Boolean,
100
+ default: false
101
+ },
102
+ size: {
103
+ type: String,
104
+ default: 'default'
105
+ },
106
+ row: {
107
+ type: Object,
108
+ default() {
109
+ return {
110
+ gutter: 20
111
+ }
112
+ }
113
+ },
114
+ span: {
115
+ type: Number,
116
+ default: 24
117
+ },
118
+ handle: {
119
+ type: Boolean,
120
+ default: false
121
+ },
122
+ valid: {
123
+ type: Boolean,
124
+ default: true
125
+ },
126
+ btnSubmitText: {
127
+ type: String,
128
+ default: '确认'
129
+ },
130
+ btnResetText: {
131
+ type: String,
132
+ default: '取消'
133
+ }
134
+ },
135
+ emits: ['submit', 'reset', 'item-change'],
136
+ data() {
137
+ return {
138
+ formItems: [],
139
+ formRules: {},
140
+ groupRenders: {
141
+ CheckboxGroup: 'Checkbox',
142
+ RadioGroup: 'Radio',
143
+ Select: 'Option'
144
+ },
145
+ renderRelationship: {
146
+ Tree: 'TreeSelect',
147
+ Time: 'DatePicker',
148
+ TextArea: 'Input',
149
+ Checkgroup: 'CheckboxGroup',
150
+ Radiogroup: 'RadioGroup'
151
+ }
152
+ }
153
+ },
154
+ computed: {
155
+ colProps() {
156
+ return this.inline ? { xs: 24, sm: 12, md: 12, lg: 8, xl: 8 } : {}
157
+ }
158
+ },
159
+ watch: {
160
+ items: {
161
+ handler() {
162
+ this.initItemsConfig()
163
+ },
164
+ deep: true
165
+ },
166
+ rules: {
167
+ handler(newvalue, oldValue) {
168
+ this.initEditRules(newvalue)
169
+ },
170
+ deep: true,
171
+ immediate: true
172
+ }
173
+ },
174
+ created() {
175
+ this.initItemsConfig()
176
+ },
177
+ mounted() {},
178
+ methods: {
179
+ formRef() {
180
+ return this.$refs.ivForm
181
+ },
182
+ async validate() {
183
+ return this.formRef().validate()
184
+ },
185
+ async onFormSubmit() {
186
+ let validateResult = await this.validate()
187
+ if (!validateResult) return
188
+ this.$emit('submit', this.data)
189
+ },
190
+ onFormReset() {
191
+ this.formRef().resetFields()
192
+ this.$emit('reset', this.data)
193
+ },
194
+ // 根据规则重新初始化字段配置
195
+ initItemsConfig() {
196
+ const that = this
197
+ if (that.items && that.items.length > 0) {
198
+ let formItems = that.$vUtils.clone(that.items, true)
199
+ let fieldRules = {}
200
+ that.$vUtils.eachTree(formItems, item => {
201
+ let renderProps = item.renderProps || {}
202
+ item.renderName = that.getRenderName(item.renderName, renderProps)
203
+ item.prop = item.prop || item.field
204
+ item.label = item.label || item.title
205
+ delete item.field
206
+ delete item.title
207
+ let arrayModelRenders = ['Cascader', 'Transfer', 'TagSelect', 'CheckboxGroup']
208
+ if (item.prop && !that.$vUtils.has(that.data, item.prop)) {
209
+ that.$vUtils.set(that.data, item.prop, renderProps.defaultValue || (arrayModelRenders.includes(item.renderName) ? [] : ''))
210
+ }
211
+ if (item.prop && +item.renderRequire) {
212
+ let dataType = 'string'
213
+ let arrayType = ['CheckboxGroup']
214
+ if (arrayType.includes(item.renderName) || (item.renderName === 'Select' && renderProps.multiple)) {
215
+ dataType = 'array'
216
+ }
217
+ fieldRules[item.prop] = [{ required: true, message: that.getDefaultMessage(item.renderName, item.label), type: dataType }]
218
+ }
219
+ })
220
+ that.formItems = formItems
221
+ that.initEditRules(fieldRules)
222
+ }
223
+ },
224
+ // 初始化验证规则
225
+ initEditRules(rules) {
226
+ const that = this
227
+ if (rules && that.$vUtils.isPlainObject(rules)) {
228
+ Object.keys(rules).forEach(key => {
229
+ if (that.formRules[key]) {
230
+ that.formRules[key] = Array.from(new Set(that.formRules[key].concat(rules[key])))
231
+ } else {
232
+ that.formRules[key] = rules[key]
233
+ }
234
+ })
235
+ }
236
+ },
237
+ // 获取渲染器关系
238
+ getRenderName(renderName, props) {
239
+ if (renderName && renderName.startsWith('$v')) {
240
+ let reRender = renderName.replace('$v', '')
241
+ let relationRender = this.renderRelationship[reRender]
242
+ return relationRender || reRender
243
+ }
244
+ return renderName || 'Input'
245
+ },
246
+ // 获取默认验证信息
247
+ getDefaultMessage(renderType, title) {
248
+ const selectRenders = ['Switch', 'Select', 'TreeSelect', 'DatePicker', 'TimePicker', 'Cascader', 'City', 'Rate']
249
+ return (selectRenders.includes(renderType) ? '请选择' : '请输入') + title
250
+ }
251
+ }
252
+ }
253
+ </script>
254
+
255
+ <style scoped></style>