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,418 @@
1
+ <template>
2
+ <div class="sh-upload" :class="upClass">
3
+ <u-list
4
+ v-if="listType === 'card'"
5
+ :upload-list="uploadList"
6
+ :list-type="listType"
7
+ :type="type"
8
+ :is-form-data="isFormData"
9
+ :disabled="disabled"
10
+ :preview="preview"
11
+ :up-styles="upStyles"
12
+ :up-class="upClass"
13
+ @delete="handleFileRemove"></u-list>
14
+ <div v-show="uploadList.length < limit" class="sh-upload-list" :style="upStyles" :class="upClass">
15
+ <Upload
16
+ ref="upload"
17
+ class="upload-box-component"
18
+ :class="upClass"
19
+ :action="action"
20
+ :headers="headers"
21
+ :disabled="disabled"
22
+ :multiple="multiple"
23
+ :type="uploadType"
24
+ :accept="accept"
25
+ :data="params"
26
+ :name="inputname"
27
+ :show-upload-list="false"
28
+ :on-progress="uploadProgress"
29
+ :on-success="uploadSuccess"
30
+ :on-error="uploadError"
31
+ :before-upload="handleBeforeUpload">
32
+ <div v-if="uploadType === 'drag'" class="py-3">
33
+ <sh-icon :type="iconType" size="26"></sh-icon>
34
+ <p class="mt-1">上传附件</p>
35
+ </div>
36
+ <template v-else-if="listType === 'card'">
37
+ <div class="upload-box-inner" :style="upStyles"><sh-icon :type="iconType" /></div>
38
+ </template>
39
+ <template v-else>
40
+ <Button icon="ios-cloud-upload-outline">上传附件</Button>
41
+ </template>
42
+ </Upload>
43
+ </div>
44
+ <u-list
45
+ v-if="listType === 'list'"
46
+ :upload-list="uploadList"
47
+ :width="width"
48
+ :height="height"
49
+ :list-type="listType"
50
+ :type="type"
51
+ :is-form-data="isFormData"
52
+ :disabled="disabled"
53
+ :preview="preview"
54
+ :up-styles="upStyles"
55
+ :up-class="upClass"
56
+ @delete="handleFileRemove"></u-list>
57
+ </div>
58
+ </template>
59
+
60
+ <script>
61
+ import UList from './components/u-list'
62
+ export default {
63
+ name: 'ShUpload',
64
+ components: {
65
+ UList
66
+ },
67
+ props: {
68
+ isFormData: {
69
+ type: Boolean,
70
+ default: true
71
+ },
72
+ // 编辑回显数据
73
+ value: {
74
+ type: [Array],
75
+ default() {
76
+ return []
77
+ }
78
+ },
79
+ action: {
80
+ type: String,
81
+ default: '-'
82
+ },
83
+ icon: {
84
+ type: String,
85
+ default: ''
86
+ },
87
+ headers: {
88
+ type: Object,
89
+ default() {
90
+ return {}
91
+ }
92
+ },
93
+ disabled: {
94
+ type: Boolean
95
+ },
96
+ preview: {
97
+ type: Boolean,
98
+ default: true
99
+ },
100
+ width: {
101
+ type: [String, Number],
102
+ default: 80
103
+ },
104
+ height: {
105
+ type: [String, Number],
106
+ default: 80
107
+ },
108
+ limit: {
109
+ type: Number,
110
+ default: 1
111
+ },
112
+ limitBytes: {
113
+ type: Number,
114
+ default: 2097152
115
+ },
116
+ accept: {
117
+ type: String,
118
+ default: '.doc,.docx,.xls,.xlsx,.txt,.pdf,.jpg,.jpeg,.png,.txt,.7z,.zip,.rar'
119
+ },
120
+ params: {
121
+ type: Object,
122
+ default() {
123
+ return {}
124
+ }
125
+ },
126
+ inputname: {
127
+ type: String,
128
+ default: 'image'
129
+ },
130
+ type: {
131
+ type: String,
132
+ default: 'img' // img, file 上传图片还是文件
133
+ },
134
+ listType: {
135
+ type: String,
136
+ default: 'card' // card, list 附件列表展示类型
137
+ },
138
+ uploadType: {
139
+ type: String,
140
+ default: 'select' // drag
141
+ },
142
+ beforeUpload: {
143
+ type: Function
144
+ },
145
+ baseUrl: {
146
+ type: String,
147
+ default: ''
148
+ },
149
+ serverConfig: {
150
+ type: Object,
151
+ default() {
152
+ return {
153
+ type: 'post',
154
+ url: ''
155
+ }
156
+ }
157
+ }
158
+ },
159
+ emits: ['update:modelValue', 'progress', 'success', 'error', 'file-delete'],
160
+ data() {
161
+ return {
162
+ resultUrl: '',
163
+ uploadList: []
164
+ }
165
+ },
166
+ computed: {
167
+ multiple() {
168
+ return this.limit > 1
169
+ },
170
+ iconType() {
171
+ return this.icon || (this.type === 'img' ? 'md-camera' : 'ios-folder')
172
+ },
173
+ upStyles() {
174
+ return this.listType === 'card' ? { width: `${this.width}px`, height: `${this.height}px` } : {}
175
+ },
176
+ upClass() {
177
+ return [
178
+ {
179
+ [this.listType]: true
180
+ }
181
+ ]
182
+ },
183
+ messageAll() {
184
+ return {
185
+ limitBytes: this.limitBytes,
186
+ fileSizeError: '文件大小不能超过' + this.limitBytes / (1024 * 1024) + 'M',
187
+ fileFormat: this.accept.split(','),
188
+ fileTypeError: '格式不正确,请上传' + this.accept + '文件'
189
+ }
190
+ }
191
+ },
192
+ watch: {
193
+ modelValue: {
194
+ handler: function (val, oldVal) {
195
+ if (val && Array.isArray(val)) {
196
+ this.uploadList = val
197
+ }
198
+ },
199
+ immediate: true,
200
+ deep: true
201
+ },
202
+ uploadList: {
203
+ handler: function (val, oldVal) {
204
+ this.$emit('update:modelValue', val)
205
+ },
206
+ immediate: false,
207
+ deep: true
208
+ }
209
+ },
210
+ created() {},
211
+ mounted() {},
212
+ methods: {
213
+ // 上传进度
214
+ uploadProgress(event, file, fileList) {
215
+ this.$emit('progress', event, file, fileList)
216
+ },
217
+ // 上传成功
218
+ uploadSuccess(res, file, fileList) {
219
+ this.$emit('success', res, file, fileList)
220
+ },
221
+ // 上传失败
222
+ uploadError(error, file, fileList) {
223
+ this.$emit('error', error, file, fileList)
224
+ },
225
+ // 文件上传前狗子
226
+ handleBeforeUpload(file) {
227
+ // 文件类型校验
228
+ let type = file.name.substr(file.name.lastIndexOf('.')).toLowerCase() // .jpg
229
+ let imgFileTypeArr = this.messageAll.fileFormat
230
+ let checkType = imgFileTypeArr.some(item => {
231
+ return item === type
232
+ })
233
+ if (this.fileaccept !== '' && !checkType) {
234
+ this.msginfo(this.messageAll.fileTypeError)
235
+ return false
236
+ }
237
+ // 文件大小校验
238
+ const checkMax = file.size < this.messageAll.limitBytes
239
+ if (!checkMax) {
240
+ this.msginfo(this.messageAll.fileSizeError)
241
+ return false
242
+ }
243
+ if (typeof this.beforeUpload === 'function') {
244
+ this.beforeUpload(file)
245
+ } else if (this.isFormData) {
246
+ this.handleFilePreviewData(file)
247
+ } else {
248
+ this.handleFileUpload(file)
249
+ }
250
+ return this.action !== '-'
251
+ },
252
+ // 组件上传formdata进行内部预览图片
253
+ handleFilePreviewData(file) {
254
+ this.uploadList.push(file)
255
+ },
256
+ // 组件内文件上传
257
+ async handleFileUpload(file) {
258
+ const that = this
259
+ if (!that.serverConfig.url) {
260
+ that.msgerror('上传未配置请求地址!')
261
+ return
262
+ }
263
+ if (!that.serverConfig.type) {
264
+ that.msgerror('上传未配置请求方式!')
265
+ return
266
+ }
267
+ let axiosData = new FormData()
268
+ let axiosHeader = Object.assign({}, that.headers)
269
+ axiosHeader['Content-Type'] = 'multipart/form-data'
270
+ axiosData.append('file', file)
271
+ if (that.params) {
272
+ Object.keys(that.params).forEach(key => {
273
+ axiosData.append(key, that.params[key])
274
+ })
275
+ }
276
+ try {
277
+ let res = await that.$http.request({
278
+ method: that.serverConfig.type,
279
+ url: that.serverConfig.url,
280
+ headers: axiosHeader,
281
+ data: axiosData
282
+ })
283
+ console.log(res)
284
+ } catch (e) {
285
+ that.msgerror('上传失败 ' + e.message || e)
286
+ }
287
+ },
288
+ // 文件删除
289
+ handleFileRemove(data) {
290
+ const that = this
291
+ that.msgconfirm({
292
+ content: '确定要删除吗?'
293
+ }).then(() => {
294
+ const dataIndex = this.uploadList.indexOf(data)
295
+ that.uploadList.splice(dataIndex, 1)
296
+ that.$refs.upload.fileList.splice(dataIndex, 1)
297
+ that.$emit('file-delete', data)
298
+ })
299
+ }
300
+ }
301
+ }
302
+ </script>
303
+
304
+ <style lang="scss">
305
+ .sh-upload {
306
+ display: inline-block;
307
+ &.list {
308
+ display: block;
309
+ width: 100%;
310
+ }
311
+ .sh-upload-list {
312
+ border-radius: 4px;
313
+ background: var(--body-background);
314
+ position: relative;
315
+ &.card {
316
+ display: inline-block;
317
+ vertical-align: top;
318
+ text-align: center;
319
+ overflow: hidden;
320
+ & + .sh-upload-list.card {
321
+ margin-left: 4px;
322
+ }
323
+ }
324
+ &.list {
325
+ & + .sh-upload-list.list {
326
+ margin-top: 8px;
327
+ }
328
+ }
329
+ img {
330
+ width: 100%;
331
+ height: 100%;
332
+ }
333
+ .list-file-card {
334
+ position: relative;
335
+ height: 100%;
336
+ width: 100%;
337
+ display: flex;
338
+ align-items: center;
339
+ justify-content: center;
340
+ background-color: var(--header-color);
341
+ .list-file-cover {
342
+ display: flex;
343
+ position: absolute;
344
+ top: 0;
345
+ bottom: 0;
346
+ left: 0;
347
+ right: 0;
348
+ background: rgba(0, 0, 0, 0.6);
349
+ align-items: center;
350
+ justify-content: center;
351
+ font-size: 20px;
352
+ opacity: 0;
353
+ transition: 0.3s all;
354
+ &:hover {
355
+ opacity: 1;
356
+ }
357
+ i {
358
+ color: #fff;
359
+ font-size: 16px;
360
+ cursor: pointer;
361
+ margin: 0 5px;
362
+ }
363
+ }
364
+ }
365
+ .list-file-item {
366
+ position: relative;
367
+ display: flex;
368
+ align-items: center;
369
+ justify-content: space-between;
370
+ padding: 5px 10px;
371
+ background: var(--hover-color);
372
+ height: 100%;
373
+ & + .list-file-item {
374
+ margin-top: 8px;
375
+ }
376
+ .file-title {
377
+ flex: 1;
378
+ margin-right: 10px;
379
+ line-height: 1.2;
380
+ }
381
+ .file-action {
382
+ display: inline-flex;
383
+ flex-wrap: nowrap;
384
+ .file-action-item {
385
+ display: inline-block;
386
+ cursor: pointer;
387
+ color: var(--theme-color);
388
+ margin-left: 8px;
389
+ }
390
+ }
391
+ }
392
+ .upload-box-component {
393
+ border-radius: 4px;
394
+ cursor: pointer;
395
+ width: 100%;
396
+ height: 100%;
397
+ &.card {
398
+ display: inline-block;
399
+ vertical-align: top;
400
+ border: 1px dashed var(--border-color);
401
+ text-align: center;
402
+ overflow: hidden;
403
+ }
404
+ &.list {
405
+ }
406
+ .upload-box-inner {
407
+ font-size: 26px;
408
+ display: inline-flex;
409
+ align-items: center;
410
+ justify-content: center;
411
+ }
412
+ }
413
+ }
414
+ .ivu-icon {
415
+ font-size: inherit;
416
+ }
417
+ }
418
+ </style>
@@ -0,0 +1,25 @@
1
+ <template>
2
+ <vxe-form-gather v-bind="parentItem">
3
+ <template v-for="(childItem, childItemIndex) in parentItem.children">
4
+ <formItem v-if="childItem.children" :key="childItemIndex" :parent-item="childItem"></formItem>
5
+ <vxe-form-item v-else v-bind="childItem" :key="childItemIndex"></vxe-form-item>
6
+ </template>
7
+ </vxe-form-gather>
8
+ </template>
9
+
10
+ <script>
11
+ export default {
12
+ name: 'FormItem',
13
+ props: {
14
+ parentItem: {
15
+ type: Object,
16
+ default() {
17
+ return {}
18
+ }
19
+ }
20
+ },
21
+ created() {}
22
+ }
23
+ </script>
24
+
25
+ <style scoped></style>
@@ -0,0 +1,55 @@
1
+ .sh-vxe-form{
2
+ position: relative;
3
+ &.readonly {
4
+ .vxe-form{
5
+ .vxe-input--inner[disabled], .vxe-textarea--inner[disabled]{
6
+ cursor: auto;
7
+ color: #333;
8
+ background-color: #fff;
9
+ border-color: var(--theme-weak-color);
10
+ }
11
+ .vxe-checkbox.is--disabled{
12
+ cursor: auto;
13
+ color: #333;
14
+ & > input + .vxe-checkbox--icon{
15
+ background-color: #fff;
16
+ border-color: var(--theme-weak-color);
17
+ }
18
+ & > input + .vxe-checkbox--icon:before{
19
+ border-color: var(--theme-color);
20
+ }
21
+ & > input + .vxe-checkbox--icon + .vxe-checkbox--label{
22
+ color: #333;
23
+ }
24
+ }
25
+ .vxe-input.is--disabled .vxe-input--date-picker-suffix,
26
+ .vxe-input.is--disabled .vxe-input--number-suffix,
27
+ .vxe-input.is--disabled .vxe-input--password-suffix,
28
+ .vxe-input.is--disabled .vxe-input--search-suffix,
29
+ .vxe-input.is--disabled .vxe-input--suffix{
30
+ cursor: auto;
31
+ }
32
+ }
33
+ }
34
+ .vxe-form{
35
+ .vxe-form--gather{
36
+ border: 1px solid var(--border-color);
37
+ }
38
+ .vxe-form--item{
39
+ &.shFormTitleItem{
40
+ padding: 0.2em 0.8em;
41
+ border-left: 5px solid var(--theme-color);
42
+ margin-bottom: 0.5em;
43
+ .vxe-form--item-inner{
44
+ min-height: auto;
45
+ .vxe-form--item-title{
46
+ max-width: 100%;
47
+ .vxe-form--item-title-postfix{
48
+ display: none;
49
+ }
50
+ }
51
+ }
52
+ }
53
+ }
54
+ }
55
+ }
@@ -0,0 +1,115 @@
1
+ <template>
2
+ <div class="sh-vxe-form" :class="{ readonly: readonly, disabled: disabled }">
3
+ <vxe-form
4
+ ref="vxeForm"
5
+ :key="renderKey"
6
+ :items="formItems"
7
+ :data="data"
8
+ :loading="loading"
9
+ :size="size"
10
+ :span="myFormConfig.span"
11
+ :align="myFormConfig.align"
12
+ :title-align="myFormConfig.titleAlign"
13
+ :title-width="myFormConfig.titleWidth"
14
+ :title-colon="myFormConfig.titleColon"
15
+ :title-asterisk="myFormConfig.titleAsterisk"
16
+ :title-overflow="myFormConfig.titleOverflow"
17
+ :class-name="myFormConfig.className"
18
+ :custom-layout="myFormConfig.customLayout"
19
+ :rules="formRules"
20
+ :prevent-submit="myFormConfig.preventSubmit"
21
+ :valid-config="validConfig"
22
+ @submit="onFormSubmit"
23
+ @submit-invalid="onFormSubmitInvalid"
24
+ @reset="onFormReset"
25
+ @collapse="onFormCollapse"
26
+ @edit-closed="onFormEditClosed"
27
+ @prefix-click="onPrefixClick"
28
+ @suffix-click="onSuffixClick">
29
+ <div v-if="footer" class="sh-common-footer">
30
+ <div class="sh-common-footer-left">
31
+ <slot name="formLeft"></slot>
32
+ </div>
33
+ <div class="sh-common-footer-right">
34
+ <slot name="formRight"></slot>
35
+ <vxe-button v-ripple type="submit" status="theme" :size="size" :disabled="disabled || loading">确认</vxe-button>
36
+ <vxe-button v-ripple type="reset" :size="size">重置</vxe-button>
37
+ </div>
38
+ </div>
39
+ <template v-for="slot in Object.keys($slots)" #[slot]="scope">
40
+ <!-- 以之前的名字命名插槽,同时把数据原样绑定 -->
41
+ <slot :name="slot" v-bind="scope"></slot>
42
+ </template>
43
+ </vxe-form>
44
+ </div>
45
+ </template>
46
+
47
+ <script>
48
+ import defaultData from './mixin/defaultData'
49
+ import props from './js/props'
50
+ import methods from './js/methods'
51
+ export default {
52
+ name: 'ShForm',
53
+ components: {},
54
+ mixins: [defaultData],
55
+ props: {
56
+ ...props
57
+ },
58
+ emits: ['submit', 'reset', 'edit-closed', 'submit-invalid', 'collapse', 'prefix-click', 'suffix-click'],
59
+ data() {
60
+ return {
61
+ renderKey: 1,
62
+ formItems: [],
63
+ formRules: {}
64
+ }
65
+ },
66
+ computed: {
67
+ myFormConfig() {
68
+ let mobileTurnConfig = this.mobile ? { span: '24' } : {}
69
+ return Object.assign({}, this.formConfigDefault, this.formConfig, mobileTurnConfig)
70
+ }
71
+ },
72
+ watch: {
73
+ readonly(newvalue, oldValue) {
74
+ this.initFormItems()
75
+ },
76
+ data: {
77
+ handler(newvalue, oldValue) {
78
+ this.initFormData()
79
+ },
80
+ immediate: true
81
+ },
82
+ items: {
83
+ handler(newvalue, oldValue) {
84
+ this.initFormItems(newvalue)
85
+ },
86
+ deep: true
87
+ },
88
+ rules: {
89
+ handler(newvalue, oldValue) {
90
+ this.initEditRules(newvalue)
91
+ },
92
+ deep: true,
93
+ immediate: true
94
+ }
95
+ },
96
+ created() {
97
+ this.initCreated()
98
+ },
99
+ mounted() {},
100
+ methods: {
101
+ formRef() {
102
+ return this.$refs.vxeForm
103
+ },
104
+ // 重新渲染表单
105
+ refreshRender() {
106
+ this.renderKey++
107
+ },
108
+ ...methods
109
+ }
110
+ }
111
+ </script>
112
+
113
+ <style lang="scss">
114
+ @import './css/index.scss';
115
+ </style>