@zkwq/business 0.0.1

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 (231) hide show
  1. package/dist/index.css +1 -0
  2. package/dist/index.js +21861 -0
  3. package/dist/index.umd.cjs +46 -0
  4. package/package.json +27 -0
  5. package/src/components/base/ui/alert/Alert.vue +94 -0
  6. package/src/components/base/ui/autocomplete/autocomplete-suggestions.vue +77 -0
  7. package/src/components/base/ui/autocomplete/autocomplete.vue +305 -0
  8. package/src/components/base/ui/backtop/main.vue +112 -0
  9. package/src/components/base/ui/button/Button.vue +84 -0
  10. package/src/components/base/ui/button/ButtonGroup.vue +10 -0
  11. package/src/components/base/ui/carousel/Carousel.vue +304 -0
  12. package/src/components/base/ui/carousel/CarouselItem.vue +137 -0
  13. package/src/components/base/ui/cascader/cascader.vue +650 -0
  14. package/src/components/base/ui/cascader-panel/cascader-menu.vue +138 -0
  15. package/src/components/base/ui/cascader-panel/cascader-node.vue +246 -0
  16. package/src/components/base/ui/cascader-panel/cascader-panel.vue +382 -0
  17. package/src/components/base/ui/cascader-panel/node.js +166 -0
  18. package/src/components/base/ui/cascader-panel/store.js +62 -0
  19. package/src/components/base/ui/checkbox/checkbox-button.vue +199 -0
  20. package/src/components/base/ui/checkbox/checkbox-group.vue +48 -0
  21. package/src/components/base/ui/checkbox/checkbox.vue +222 -0
  22. package/src/components/base/ui/col/col.js +71 -0
  23. package/src/components/base/ui/collapse/collapse-item.vue +180 -0
  24. package/src/components/base/ui/collapse/collapse.vue +73 -0
  25. package/src/components/base/ui/color-picker/color.js +317 -0
  26. package/src/components/base/ui/color-picker/components/alpha-slider.vue +132 -0
  27. package/src/components/base/ui/color-picker/components/hue-slider.vue +123 -0
  28. package/src/components/base/ui/color-picker/components/picker-dropdown.vue +119 -0
  29. package/src/components/base/ui/color-picker/components/predefine.vue +61 -0
  30. package/src/components/base/ui/color-picker/components/sv-panel.vue +100 -0
  31. package/src/components/base/ui/color-picker/draggable.js +36 -0
  32. package/src/components/base/ui/color-picker/index.js +2 -0
  33. package/src/components/base/ui/color-picker/main.vue +188 -0
  34. package/src/components/base/ui/date-picker/basic/date-table.vue +441 -0
  35. package/src/components/base/ui/date-picker/basic/month-table.vue +254 -0
  36. package/src/components/base/ui/date-picker/basic/time-spinner.vue +304 -0
  37. package/src/components/base/ui/date-picker/basic/year-table.vue +101 -0
  38. package/src/components/base/ui/date-picker/panel/date-range.vue +680 -0
  39. package/src/components/base/ui/date-picker/panel/date.vue +597 -0
  40. package/src/components/base/ui/date-picker/panel/month-range.vue +289 -0
  41. package/src/components/base/ui/date-picker/panel/time-range.vue +248 -0
  42. package/src/components/base/ui/date-picker/panel/time-select.vue +178 -0
  43. package/src/components/base/ui/date-picker/panel/time.vue +186 -0
  44. package/src/components/base/ui/date-picker/picker/date-picker.js +43 -0
  45. package/src/components/base/ui/date-picker/picker/time-picker.js +39 -0
  46. package/src/components/base/ui/date-picker/picker/time-select.js +21 -0
  47. package/src/components/base/ui/date-picker/picker.vue +942 -0
  48. package/src/components/base/ui/dialog/Index.vue +212 -0
  49. package/src/components/base/ui/directive/repeat-click.js +24 -0
  50. package/src/components/base/ui/directive/ripple.js +303 -0
  51. package/src/components/base/ui/divider/Divider.vue +37 -0
  52. package/src/components/base/ui/drawer/Drawer.vue +202 -0
  53. package/src/components/base/ui/dropdown/dropdown-item.vue +39 -0
  54. package/src/components/base/ui/dropdown/dropdown-menu.vue +63 -0
  55. package/src/components/base/ui/dropdown/dropdown.vue +308 -0
  56. package/src/components/base/ui/form/Form.vue +167 -0
  57. package/src/components/base/ui/form/FormItem.vue +334 -0
  58. package/src/components/base/ui/form/LabelWrap.vue +69 -0
  59. package/src/components/base/ui/icon/icon.vue +13 -0
  60. package/src/components/base/ui/image/image-viewer.vue +302 -0
  61. package/src/components/base/ui/image/main.vue +248 -0
  62. package/src/components/base/ui/index.js +189 -0
  63. package/src/components/base/ui/input/Input.vue +438 -0
  64. package/src/components/base/ui/input/calcTextareaHeight.js +104 -0
  65. package/src/components/base/ui/input-number/input-number.vue +285 -0
  66. package/src/components/base/ui/locale/format.js +32 -0
  67. package/src/components/base/ui/locale/index.js +48 -0
  68. package/src/components/base/ui/locale/lang/zh-CN.js +120 -0
  69. package/src/components/base/ui/menu/menu-item-group.vue +45 -0
  70. package/src/components/base/ui/menu/menu-item.vue +112 -0
  71. package/src/components/base/ui/menu/menu-mixin.js +44 -0
  72. package/src/components/base/ui/menu/menu.vue +312 -0
  73. package/src/components/base/ui/menu/submenu.vue +408 -0
  74. package/src/components/base/ui/message/index.js +2 -0
  75. package/src/components/base/ui/message/main.js +87 -0
  76. package/src/components/base/ui/message/main.vue +110 -0
  77. package/src/components/base/ui/message-box/main.js +216 -0
  78. package/src/components/base/ui/message-box/main.vue +323 -0
  79. package/src/components/base/ui/mixin/emitter.js +31 -0
  80. package/src/components/base/ui/mixin/focus.js +9 -0
  81. package/src/components/base/ui/mixin/locale.js +9 -0
  82. package/src/components/base/ui/mixin/migrating.js +33 -0
  83. package/src/components/base/ui/pagination/pager.vue +163 -0
  84. package/src/components/base/ui/pagination/pagination.jsx +391 -0
  85. package/src/components/base/ui/popover/directive.js +20 -0
  86. package/src/components/base/ui/popover/index.js +14 -0
  87. package/src/components/base/ui/popover/main.vue +236 -0
  88. package/src/components/base/ui/progress/Progress.vue +227 -0
  89. package/src/components/base/ui/radio/radio-button.vue +114 -0
  90. package/src/components/base/ui/radio/radio-group.vue +111 -0
  91. package/src/components/base/ui/radio/radio.vue +134 -0
  92. package/src/components/base/ui/row/row.js +47 -0
  93. package/src/components/base/ui/scrollbar/bar.jsx +91 -0
  94. package/src/components/base/ui/scrollbar/index.jsx +203 -0
  95. package/src/components/base/ui/scrollbar/util.js +32 -0
  96. package/src/components/base/ui/select/Option.vue +168 -0
  97. package/src/components/base/ui/select/OptionGroup.vue +60 -0
  98. package/src/components/base/ui/select/Select.vue +920 -0
  99. package/src/components/base/ui/select/SelectDropdown.vue +74 -0
  100. package/src/components/base/ui/select/navigation-mixin.js +54 -0
  101. package/src/components/base/ui/skeleton/index.js +8 -0
  102. package/src/components/base/ui/skeleton/src/img-placeholder.vue +16 -0
  103. package/src/components/base/ui/skeleton/src/index.vue +80 -0
  104. package/src/components/base/ui/skeleton/src/item.vue +22 -0
  105. package/src/components/base/ui/skeleton-item/index.js +8 -0
  106. package/src/components/base/ui/slider/button.vue +238 -0
  107. package/src/components/base/ui/slider/main.vue +427 -0
  108. package/src/components/base/ui/slider/marker.js +18 -0
  109. package/src/components/base/ui/style/alert.scss +147 -0
  110. package/src/components/base/ui/style/animations.scss +65 -0
  111. package/src/components/base/ui/style/autocomplete.scss +81 -0
  112. package/src/components/base/ui/style/backtop.scss +20 -0
  113. package/src/components/base/ui/style/button-group.scss +0 -0
  114. package/src/components/base/ui/style/button.scss +380 -0
  115. package/src/components/base/ui/style/carousel-item.scss +50 -0
  116. package/src/components/base/ui/style/carousel.scss +161 -0
  117. package/src/components/base/ui/style/cascader-panel.scss +120 -0
  118. package/src/components/base/ui/style/cascader.scss +185 -0
  119. package/src/components/base/ui/style/checkbox-button.scss +0 -0
  120. package/src/components/base/ui/style/checkbox-group.scss +0 -0
  121. package/src/components/base/ui/style/checkbox.scss +360 -0
  122. package/src/components/base/ui/style/col.scss +156 -0
  123. package/src/components/base/ui/style/collapse-item.scss +0 -0
  124. package/src/components/base/ui/style/collapse.scss +114 -0
  125. package/src/components/base/ui/style/color-picker.scss +387 -0
  126. package/src/components/base/ui/style/config.scss +4 -0
  127. package/src/components/base/ui/style/date-picker/date-picker.scss +97 -0
  128. package/src/components/base/ui/style/date-picker/date-range-picker.scss +101 -0
  129. package/src/components/base/ui/style/date-picker/date-table.scss +151 -0
  130. package/src/components/base/ui/style/date-picker/month-table.scss +82 -0
  131. package/src/components/base/ui/style/date-picker/picker-panel.scss +117 -0
  132. package/src/components/base/ui/style/date-picker/picker.scss +197 -0
  133. package/src/components/base/ui/style/date-picker/time-picker.scss +85 -0
  134. package/src/components/base/ui/style/date-picker/time-range-picker.scss +31 -0
  135. package/src/components/base/ui/style/date-picker/time-spinner.scss +110 -0
  136. package/src/components/base/ui/style/date-picker/year-table.scss +51 -0
  137. package/src/components/base/ui/style/date-picker.scss +12 -0
  138. package/src/components/base/ui/style/dialog.scss +123 -0
  139. package/src/components/base/ui/style/divider.scss +47 -0
  140. package/src/components/base/ui/style/drawer.scss +218 -0
  141. package/src/components/base/ui/style/dropdown-item.scss +0 -0
  142. package/src/components/base/ui/style/dropdown-menu.scss +0 -0
  143. package/src/components/base/ui/style/dropdown.scss +185 -0
  144. package/src/components/base/ui/style/form-item.scss +0 -0
  145. package/src/components/base/ui/style/form.scss +203 -0
  146. package/src/components/base/ui/style/function.scss +43 -0
  147. package/src/components/base/ui/style/icon.scss +1167 -0
  148. package/src/components/base/ui/style/image.scss +184 -0
  149. package/src/components/base/ui/style/index.scss +57 -0
  150. package/src/components/base/ui/style/input-number.scss +187 -0
  151. package/src/components/base/ui/style/input.scss +477 -0
  152. package/src/components/base/ui/style/menu-item-group.scss +0 -0
  153. package/src/components/base/ui/style/menu-item.scss +0 -0
  154. package/src/components/base/ui/style/menu.scss +294 -0
  155. package/src/components/base/ui/style/message-box.scss +231 -0
  156. package/src/components/base/ui/style/message.scss +120 -0
  157. package/src/components/base/ui/style/mixins.scss +196 -0
  158. package/src/components/base/ui/style/option-group.scss +42 -0
  159. package/src/components/base/ui/style/option.scss +36 -0
  160. package/src/components/base/ui/style/pagination.scss +295 -0
  161. package/src/components/base/ui/style/popover.scss +40 -0
  162. package/src/components/base/ui/style/popper.scss +102 -0
  163. package/src/components/base/ui/style/popup.scss +42 -0
  164. package/src/components/base/ui/style/progress.scss +141 -0
  165. package/src/components/base/ui/style/radio-button.scss +113 -0
  166. package/src/components/base/ui/style/radio-group.scss +9 -0
  167. package/src/components/base/ui/style/radio.scss +203 -0
  168. package/src/components/base/ui/style/ripple.scss +35 -0
  169. package/src/components/base/ui/style/row.scss +39 -0
  170. package/src/components/base/ui/style/scrollbar.scss +75 -0
  171. package/src/components/base/ui/style/select-dropdown.scss +59 -0
  172. package/src/components/base/ui/style/select.scss +154 -0
  173. package/src/components/base/ui/style/skeleton-item.scss +84 -0
  174. package/src/components/base/ui/style/skeleton.scss +40 -0
  175. package/src/components/base/ui/style/slider.scss +250 -0
  176. package/src/components/base/ui/style/switch.scss +116 -0
  177. package/src/components/base/ui/style/tabs.scss +602 -0
  178. package/src/components/base/ui/style/tag.scss +174 -0
  179. package/src/components/base/ui/style/tooltip.scss +146 -0
  180. package/src/components/base/ui/style/transition.scss +138 -0
  181. package/src/components/base/ui/style/upload.scss +603 -0
  182. package/src/components/base/ui/style/utils.scss +39 -0
  183. package/src/components/base/ui/style/var.scss +1007 -0
  184. package/src/components/base/ui/switch/index.vue +174 -0
  185. package/src/components/base/ui/tabs/tab-bar.vue +57 -0
  186. package/src/components/base/ui/tabs/tab-nav.vue +294 -0
  187. package/src/components/base/ui/tabs/tab-pane.vue +56 -0
  188. package/src/components/base/ui/tabs/tabs.vue +191 -0
  189. package/src/components/base/ui/tag/Tag.vue +60 -0
  190. package/src/components/base/ui/tooltip/tooltip.jsx +234 -0
  191. package/src/components/base/ui/upload/Index.vue +340 -0
  192. package/src/components/base/ui/upload/Upload.vue +216 -0
  193. package/src/components/base/ui/upload/UploadDragger.vue +70 -0
  194. package/src/components/base/ui/upload/UploadList.vue +100 -0
  195. package/src/components/base/ui/upload/ajax.js +85 -0
  196. package/src/components/base/ui/util/aria-dialog.js +90 -0
  197. package/src/components/base/ui/util/aria-utils.js +122 -0
  198. package/src/components/base/ui/util/clickoutside.js +76 -0
  199. package/src/components/base/ui/util/date-util.js +292 -0
  200. package/src/components/base/ui/util/date.js +370 -0
  201. package/src/components/base/ui/util/debounce.js +21 -0
  202. package/src/components/base/ui/util/deepmerge.js +100 -0
  203. package/src/components/base/ui/util/dom.js +215 -0
  204. package/src/components/base/ui/util/index.js +262 -0
  205. package/src/components/base/ui/util/menu/aria-menubar.js +14 -0
  206. package/src/components/base/ui/util/menu/aria-menuitem.js +49 -0
  207. package/src/components/base/ui/util/menu/aria-submenu.js +59 -0
  208. package/src/components/base/ui/util/merge.js +14 -0
  209. package/src/components/base/ui/util/popper.js +1235 -0
  210. package/src/components/base/ui/util/popup/index.js +218 -0
  211. package/src/components/base/ui/util/popup/popup-manager.js +194 -0
  212. package/src/components/base/ui/util/resize-events.js +32 -0
  213. package/src/components/base/ui/util/scroll-into-view.js +27 -0
  214. package/src/components/base/ui/util/scrollbar-width.js +29 -0
  215. package/src/components/base/ui/util/shared.js +7 -0
  216. package/src/components/base/ui/util/throttle.js +91 -0
  217. package/src/components/base/ui/util/types.js +24 -0
  218. package/src/components/base/ui/util/vdom.js +5 -0
  219. package/src/components/base/ui/util/vue-popper.js +188 -0
  220. package/src/components/normal/AggsItemH.vue +139 -0
  221. package/src/index.js +10 -0
  222. package/src/static/base-icons.ttf +0 -0
  223. package/src/static/base-icons.woff +0 -0
  224. package/src/static/label_bg.png +0 -0
  225. package/src/static/term-label-bg.png +0 -0
  226. package/src/style/app-article.scss +698 -0
  227. package/src/style/app-comment.scss +259 -0
  228. package/src/style/app-recommend.scss +48 -0
  229. package/src/style/app-richtext.scss +176 -0
  230. package/src/style/index.scss +523 -0
  231. package/vite.config.js +38 -0
@@ -0,0 +1,167 @@
1
+ <template>
2
+ <form class="base-form" :class="[
3
+ labelPosition ? 'base-form--label-' + labelPosition : '',
4
+ { 'base-form--inline': inline }
5
+ ]">
6
+ <slot></slot>
7
+ </form>
8
+ </template>
9
+ <script>
10
+ import objectAssign from '../util/merge'
11
+ export default {
12
+ name: 'BaseForm',
13
+ componentName: 'BaseForm',
14
+ provide () {
15
+ return {
16
+ baseForm: this
17
+ }
18
+ },
19
+ props: {
20
+ model: Object,
21
+ rules: Object,
22
+ labelPosition: String,
23
+ labelWidth: String,
24
+ labelSuffix: {
25
+ type: String,
26
+ default: ''
27
+ },
28
+ inline: Boolean,
29
+ inlineMessage: Boolean,
30
+ statusIcon: Boolean,
31
+ showMessage: {
32
+ type: Boolean,
33
+ default: true
34
+ },
35
+ size: String,
36
+ disabled: Boolean,
37
+ validateOnRuleChange: {
38
+ type: Boolean,
39
+ default: true
40
+ },
41
+ hideRequiredAsterisk: {
42
+ type: Boolean,
43
+ default: false
44
+ }
45
+ },
46
+ watch: {
47
+ rules () {
48
+ this.fields.forEach(field => {
49
+ field.removeValidateEvents()
50
+ field.addValidateEvents()
51
+ })
52
+ if (this.validateOnRuleChange) {
53
+ this.validate(() => {})
54
+ }
55
+ }
56
+ },
57
+ computed: {
58
+ autoLabelWidth() {
59
+ if (!this.potentialLabelWidthArr.length) {
60
+ return 0
61
+ }
62
+ const max = Math.max(...this.potentialLabelWidthArr)
63
+ return max ? `${max}px` : ''
64
+ }
65
+ },
66
+ data () {
67
+ return {
68
+ fields: [],
69
+ potentialLabelWidthArr: []
70
+ }
71
+ },
72
+ created () {
73
+ this.$on('base.form.addField', (field) => {
74
+ if (field) {
75
+ this.fields.push(field)
76
+ }
77
+ })
78
+ this.$on('base.form.removeField', (field) => {
79
+ if (field.prop) {
80
+ this.fields.splice(this.fields.indexOf(field), 1)
81
+ }
82
+ })
83
+ },
84
+ methods: {
85
+ resetFields() {
86
+ if (!this.model) {
87
+ return
88
+ }
89
+ this.fields.forEach(field => {
90
+ field.resetField()
91
+ })
92
+ },
93
+ clearValidate(props = []) {
94
+ const fields = props.length
95
+ ? (typeof props === 'string'
96
+ ? this.fields.filter(field => props === field.prop)
97
+ : this.fields.filter(field => props.indexOf(field.prop) > -1)
98
+ ) : this.fields
99
+ fields.forEach(field => {
100
+ field.clearValidate()
101
+ })
102
+ },
103
+ validate(callback) {
104
+ if (!this.model) {
105
+ return
106
+ }
107
+ let promise
108
+ if (typeof callback !== 'function' && window.Promise) {
109
+ promise = new window.Promise((resolve, reject) => {
110
+ callback = function(valid) {
111
+ valid ? resolve(valid) : reject(valid)
112
+ }
113
+ })
114
+ }
115
+ let valid = true
116
+ let count = 0
117
+ if (this.fields.length === 0 && callback) {
118
+ callback(true)
119
+ }
120
+ let invalidFields = {}
121
+ this.fields.forEach(field => {
122
+ field.validate('', (message, field) => {
123
+ if (message) {
124
+ valid = false
125
+ }
126
+ invalidFields = objectAssign({}, invalidFields, field)
127
+ if (typeof callback === 'function' && ++count === this.fields.length) {
128
+ callback(valid, invalidFields)
129
+ }
130
+ })
131
+ })
132
+ if (promise) {
133
+ return promise
134
+ }
135
+ },
136
+ validateField(props, cb) {
137
+ props = [].concat(props)
138
+ const fields = this.fields.filter(field => props.indexOf(field.prop) !== -1)
139
+ if (!fields.length) {
140
+ return
141
+ }
142
+ fields.forEach(field => {
143
+ field.validate('', cb)
144
+ })
145
+ },
146
+ getLabelWidthIndex(width) {
147
+ const index = this.potentialLabelWidthArr.indexOf(width);
148
+ if (index === -1) {
149
+ throw -1
150
+ }
151
+ return index
152
+ },
153
+ registerLabelWidth(val, oldVal) {
154
+ if (val && oldVal) {
155
+ const index = this.getLabelWidthIndex(oldVal)
156
+ this.potentialLabelWidthArr.splice(index, 1, val)
157
+ } else if (val) {
158
+ this.potentialLabelWidthArr.push(val)
159
+ }
160
+ },
161
+ deregisterLabelWidth(val) {
162
+ const index = this.getLabelWidthIndex(val)
163
+ this.potentialLabelWidthArr.splice(index, 1)
164
+ }
165
+ }
166
+ }
167
+ </script>
@@ -0,0 +1,334 @@
1
+ <template>
2
+ <div class="base-form-item" :class="[{
3
+ 'base-form-item--feedback': baseForm && baseForm.statusIcon,
4
+ 'is-error': validateState === 'error',
5
+ 'is-validating': validateState === 'validating',
6
+ 'is-success': validateState === 'success',
7
+ 'is-required': isRequired || required,
8
+ 'is-no-asterisk': baseForm && baseForm.hideRequiredAsterisk
9
+ },
10
+ sizeClass ? 'base-form-item--' + sizeClass : ''
11
+ ]">
12
+ <label-wrap
13
+ :is-auto-width="labelStyle && labelStyle.width === 'auto'"
14
+ :update-all="form.labelWidth === 'auto'">
15
+ <label :for="labelFor" class="base-form-item__label" :style="labelStyle" v-if="label || $slots.label">
16
+ <slot name="label">{{label + form.labelSuffix}}</slot>
17
+ </label>
18
+ </label-wrap>
19
+ <div class="base-form-item__content" :style="contentStyle">
20
+ <slot></slot>
21
+ <transition name="fade-in-linear">
22
+ <slot
23
+ v-if="validateState === 'error' && showMessage && form.showMessage"
24
+ name="error"
25
+ :error="validateMessage">
26
+ <div
27
+ class="base-form-item__error"
28
+ :class="{
29
+ 'base-form-item__error--inline': typeof inlineMessage === 'boolean'
30
+ ? inlineMessage
31
+ : (baseForm && baseForm.inlineMessage || false),
32
+ 'is-required': isValueRequired
33
+ }"
34
+ @click="removeErrorMask"
35
+ >
36
+ {{validateMessage}}
37
+ </div>
38
+ </slot>
39
+ </transition>
40
+ </div>
41
+ </div>
42
+ </template>
43
+ <script>
44
+ import AsyncValidator from 'async-validator'
45
+ import emitter from '../mixin/emitter'
46
+ import objectAssign from '../util/merge'
47
+ import { noop, getPropByPath } from '../util'
48
+ import LabelWrap from './LabelWrap'
49
+ export default {
50
+ name: 'BaseFormItem',
51
+ componentName: 'BaseFormItem',
52
+ mixins: [emitter],
53
+ provide() {
54
+ return {
55
+ baseFormItem: this
56
+ }
57
+ },
58
+ inject: ['baseForm'],
59
+ props: {
60
+ label: String,
61
+ labelWidth: String,
62
+ prop: String,
63
+ required: {
64
+ type: Boolean,
65
+ default: undefined
66
+ },
67
+ rules: [Object, Array],
68
+ error: String,
69
+ validateStatus: String,
70
+ for: String,
71
+ inlineMessage: {
72
+ type: [String, Boolean],
73
+ default: ''
74
+ },
75
+ showMessage: {
76
+ type: Boolean,
77
+ default: true
78
+ },
79
+ size: String,
80
+ customItem: {
81
+ type: Boolean,
82
+ default: false
83
+ },
84
+ },
85
+ components: {
86
+ LabelWrap
87
+ },
88
+ watch: {
89
+ error: {
90
+ immediate: true,
91
+ handler(value) {
92
+ this.validateMessage = value
93
+ this.validateState = value ? 'error' : ''
94
+ }
95
+ },
96
+ validateStatus(value) {
97
+ this.validateState = value
98
+ }
99
+ },
100
+ computed: {
101
+ labelFor() {
102
+ return this.for || this.prop
103
+ },
104
+ labelStyle() {
105
+ const ret = {}
106
+ if (this.form.labelPosition === 'top') return ret
107
+ const labelWidth = this.labelWidth || this.form.labelWidth
108
+ if (labelWidth) {
109
+ ret.width = labelWidth
110
+ }
111
+ return ret
112
+ },
113
+ contentStyle() {
114
+ const ret = {}
115
+ const label = this.label
116
+ if (this.form.labelPosition === 'top' || this.form.inline) return ret
117
+ if (!label && !this.labelWidth && this.isNested) return ret
118
+ const labelWidth = this.labelWidth || this.form.labelWidth
119
+ if (labelWidth === 'auto') {
120
+ if (this.labelWidth === 'auto') {
121
+ ret.marginLeft = this.computedLabelWidth
122
+ } else if (this.form.labelWidth === 'auto') {
123
+ ret.marginLeft = this.baseForm.autoLabelWidth
124
+ }
125
+ } else {
126
+ ret.marginLeft = labelWidth
127
+ }
128
+ return ret
129
+ },
130
+ form() {
131
+ let parent = this.$parent
132
+ let parentName = parent.$options.componentName
133
+ while (parentName !== 'BaseForm') {
134
+ if (parentName === 'BaseFormItem') {
135
+ this.isNested = true;
136
+ }
137
+ parent = parent.$parent
138
+ parentName = parent.$options.componentName
139
+ }
140
+ return parent
141
+ },
142
+ fieldValue() {
143
+ const model = this.form.model
144
+ if (!model || !this.prop) { return }
145
+
146
+ let path = this.prop
147
+ if (path.indexOf(':') !== -1) {
148
+ path = path.replace(/:/, '.')
149
+ }
150
+ return getPropByPath(model, path, true).v
151
+ },
152
+ isRequired() {
153
+ let rules = this.getRules()
154
+ let isRequired = false
155
+ if (rules && rules.length) {
156
+ rules.every(rule => {
157
+ if (rule.required) {
158
+ isRequired = true
159
+ return false
160
+ }
161
+ return true
162
+ })
163
+ }
164
+ return isRequired
165
+ },
166
+ _formSize() {
167
+ return this.baseForm.size
168
+ },
169
+ baseFormItemSize() {
170
+ return this.size || this._formSize
171
+ },
172
+ sizeClass() {
173
+ return this.baseFormItemSize || (this.$ELEMENT || {}).size
174
+ },
175
+ isValueRequired() {
176
+ if (this.prop === 'mobile') {
177
+ return !this.fieldValue['number']
178
+ } else {
179
+ return !this.fieldValue || this.fieldValue.length === 0 || (this.fieldValue.length > 0 && !this.fieldValue[0])
180
+ }
181
+ }
182
+ },
183
+ data() {
184
+ return {
185
+ validateState: '',
186
+ validateMessage: '',
187
+ validateDisabled: false,
188
+ validator: {},
189
+ isNested: false,
190
+ computedLabelWidth: ''
191
+ }
192
+ },
193
+ methods: {
194
+ validate(trigger, callback = noop) {
195
+ this.validateDisabled = false
196
+ const rules = this.getFilteredRule(trigger)
197
+ if ((!rules || rules.length === 0) && this.required === undefined) {
198
+ callback()
199
+ return true
200
+ }
201
+
202
+ this.validateState = 'validating'
203
+
204
+ const descriptor = {}
205
+ if (rules && rules.length > 0) {
206
+ rules.forEach(rule => {
207
+ delete rule.trigger
208
+ })
209
+ }
210
+ descriptor[this.prop] = rules
211
+
212
+ const validator = new AsyncValidator(descriptor)
213
+ const model = {}
214
+
215
+ model[this.prop] = this.fieldValue
216
+ validator.validate(model, { firstFields: true }, (errors, invalidFields) => {
217
+ this.validateState = !errors ? 'success' : 'error'
218
+ this.validateMessage = errors ? errors[0].message : ''
219
+ if (this.customItem && !this.error) {
220
+ this.dispatch('MobileFormItem', 'is-error', !!errors)
221
+ this.dispatch('CaptchaFormItem', 'is-error', !!errors)
222
+ this.dispatch('MobileCodeFormItem', 'is-error', !!errors)
223
+ }
224
+ callback(this.validateMessage, invalidFields)
225
+ this.baseForm && this.baseForm.$emit('validate', this.prop, !errors, this.validateMessage || null)
226
+ })
227
+ },
228
+ clearValidate() {
229
+ this.validateState = ''
230
+ this.validateMessage = ''
231
+ this.validateDisabled = false
232
+ },
233
+ resetField() {
234
+ this.validateState = ''
235
+ this.validateMessage = ''
236
+
237
+ let model = this.form.model
238
+ let value = this.fieldValue
239
+ let path = this.prop
240
+ if (path.indexOf(':') !== -1) {
241
+ path = path.replace(/:/, '.')
242
+ }
243
+
244
+ let prop = getPropByPath(model, path, true)
245
+
246
+ this.validateDisabled = true
247
+ if (Array.isArray(value)) {
248
+ prop.o[prop.k] = [].concat(this.initialValue)
249
+ } else {
250
+ prop.o[prop.k] = this.initialValue
251
+ }
252
+ this.$nextTick(() => {
253
+ this.validateDisabled = false
254
+ });
255
+ this.broadcast('BaseTimeSelect', 'fieldReset', this.initialValue)
256
+ },
257
+ getRules() {
258
+ let formRules = this.form.rules
259
+ const selfRules = this.rules
260
+ const requiredRule = this.required !== undefined ? { required: !!this.required } : []
261
+
262
+ const prop = getPropByPath(formRules, this.prop || '')
263
+ formRules = formRules ? (prop.o[this.prop || ''] || prop.v) : []
264
+
265
+ return [].concat(selfRules || formRules || []).concat(requiredRule)
266
+ },
267
+ getFilteredRule(trigger) {
268
+ const rules = this.getRules()
269
+
270
+ return rules.filter(rule => {
271
+ if (!rule.trigger || trigger === '') return true
272
+ if (Array.isArray(rule.trigger)) {
273
+ return rule.trigger.indexOf(trigger) > -1
274
+ } else {
275
+ return rule.trigger === trigger
276
+ }
277
+ }).map(rule => objectAssign({}, rule))
278
+ },
279
+ onFieldBlur() {
280
+ this.validate('blur')
281
+ },
282
+ onFieldChange() {
283
+ if (this.validateDisabled) {
284
+ this.validateDisabled = false
285
+ return
286
+ }
287
+
288
+ this.validate('change')
289
+ },
290
+ updateComputedLabelWidth(width) {
291
+ this.computedLabelWidth = width ? `${width}px` : ''
292
+ },
293
+ addValidateEvents() {
294
+ const rules = this.getRules()
295
+
296
+ if (rules.length || this.required !== undefined) {
297
+ this.$on('clearMessage', this.clearValidate)
298
+ this.$on('base.form.blur', this.onFieldBlur)
299
+ this.$on('base.form.change', this.onFieldChange)
300
+ }
301
+ },
302
+ removeValidateEvents() {
303
+ this.$off()
304
+ },
305
+ removeErrorMask () {
306
+ this.clearValidate()
307
+ this.broadcast('BaseInput', 'clearError', '')
308
+ },
309
+ setErrorMsg(msg) {
310
+ this.validateState = !msg ? 'success' : 'error'
311
+ this.validateMessage = msg
312
+ }
313
+ },
314
+ mounted() {
315
+ if (this.prop) {
316
+ this.dispatch('BaseForm', 'base.form.addField', [this])
317
+ this.$on('clearValidate', this.clearValidate)
318
+
319
+ let initialValue = this.fieldValue
320
+ if (Array.isArray(initialValue)) {
321
+ initialValue = [].concat(initialValue)
322
+ }
323
+ Object.defineProperty(this, 'initialValue', {
324
+ value: initialValue
325
+ })
326
+
327
+ this.addValidateEvents()
328
+ }
329
+ },
330
+ beforeDestroy() {
331
+ this.dispatch('BaseForm', 'base.form.removeField', [this])
332
+ }
333
+ }
334
+ </script>
@@ -0,0 +1,69 @@
1
+ <script lang="jsx" type="text/jsx">
2
+ export default {
3
+ props: {
4
+ isAutoWidth: Boolean,
5
+ updateAll: Boolean
6
+ },
7
+ inject: ['baseForm', 'baseFormItem'],
8
+ render() {
9
+ const slots = this.$slots.default
10
+ if (!slots) return null
11
+ if (this.isAutoWidth) {
12
+ const autoLabelWidth = this.elForm.autoLabelWidth
13
+ const style = {}
14
+ if (autoLabelWidth && autoLabelWidth !== 'auto') {
15
+ const marginLeft = parseInt(autoLabelWidth, 10) - this.computedWidth
16
+ if (marginLeft) {
17
+ style.marginLeft = marginLeft + 'px'
18
+ }
19
+ }
20
+ return (<div class="base-form-item__label-wrap" style={style}>
21
+ { slots }
22
+ </div>)
23
+ } else {
24
+ return slots[0]
25
+ }
26
+ },
27
+ methods: {
28
+ getLabelWidth() {
29
+ if (this.$el && this.$el.firstElementChild) {
30
+ const computedWidth = window.getComputedStyle(this.$el.firstElementChild).width
31
+ return Math.ceil(parseFloat(computedWidth))
32
+ } else {
33
+ return 0
34
+ }
35
+ },
36
+ updateLabelWidth(action = 'update') {
37
+ if (this.$slots.default && this.isAutoWidth && this.$el.firstElementChild) {
38
+ if (action === 'update') {
39
+ this.computedWidth = this.getLabelWidth()
40
+ } else if (action === 'remove') {
41
+ this.baseForm.deregisterLabelWidth(this.computedWidth)
42
+ }
43
+ }
44
+ }
45
+ },
46
+ watch: {
47
+ computedWidth(val, oldVal) {
48
+ if (this.updateAll) {
49
+ this.elForm.registerLabelWidth(val, oldVal)
50
+ this.elFormItem.updateComputedLabelWidth(val)
51
+ }
52
+ }
53
+ },
54
+ data() {
55
+ return {
56
+ computedWidth: 0
57
+ }
58
+ },
59
+ mounted() {
60
+ this.updateLabelWidth('update')
61
+ },
62
+ updated() {
63
+ this.updateLabelWidth('update')
64
+ },
65
+ beforeDestroy() {
66
+ this.updateLabelWidth('remove')
67
+ }
68
+ }
69
+ </script>
@@ -0,0 +1,13 @@
1
+ <template>
2
+ <i :class="'base-icon-' + name"></i>
3
+ </template>
4
+
5
+ <script>
6
+ export default {
7
+ name: 'BaseIcon',
8
+
9
+ props: {
10
+ name: String
11
+ }
12
+ };
13
+ </script>