'f'
mh-two-thousand-and-two
2024-04-12 26f2711ef9461961fb953e2b497bd314ef95e345
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
/**
 * uni://form-field
 */
import {
  hasOwn
} from 'uni-shared'
 
import {
  emitter
} from 'uni-mixins'
 
function created () {
  this.$dispatch('Form', 'uni-form-group-update', {
    type: 'add',
    vm: this
  })
}
 
function beforeDestroy () {
  this.$dispatch('Form', 'uni-form-group-update', {
    type: 'remove',
    vm: this
  })
}
 
export default {
  name: 'uni://form-field',
  init (options, vm) {
    if (
      !vm.constructor.options.props ||
            !vm.constructor.options.props.name ||
            !vm.constructor.options.props.value
    ) { // 未初始化 props
      if (!vm.constructor.options.props) {
        vm.constructor.options.props = {}
      }
      if (!vm.constructor.options.props.name) {
        vm.constructor.options.props.name = options.props.name = {
          type: String
        }
      }
      if (!vm.constructor.options.props.value) {
        vm.constructor.options.props.value = options.props.value = {
          type: null
        }
      }
    }
 
    if (!options.propsData) {
      options.propsData = {}
    }
 
    const $vnode = vm.$vnode
    if ($vnode && $vnode.data && $vnode.data.attrs) {
      if (hasOwn($vnode.data.attrs, 'name')) {
        options.propsData.name = $vnode.data.attrs.name
      }
      if (hasOwn($vnode.data.attrs, 'value')) {
        options.propsData.value = $vnode.data.attrs.value
      }
    }
 
    if (
      !vm.constructor.options.methods ||
            !vm.constructor.options.methods._getFormData
    ) { // 未初始化 methods
      if (!vm.constructor.options.methods) {
        vm.constructor.options.methods = {}
      }
 
      if (!options.methods) {
        options.methods = {}
      }
 
      const formMethods = {
        _getFormData () {
          return this.name ? {
            key: this.name,
            value: this.value
          } : {}
        },
        _resetFormData () {
          this.value = ''
        }
      }
 
      Object.assign(vm.constructor.options.methods, formMethods)
      Object.assign(options.methods, formMethods)
 
      // add $dispatch
      Object.assign(vm.constructor.options.methods, emitter.methods)
      Object.assign(options.methods, emitter.methods)
 
      const createdHooks = options.created
      vm.constructor.options.created = options.created =
                createdHooks ? [].concat(created, createdHooks) : [
                  created
                ]
 
      const beforeDestroyHooks = options.beforeDestroy
      vm.constructor.options.beforeDestroy = options.beforeDestroy =
                beforeDestroyHooks ? [].concat(beforeDestroy, beforeDestroyHooks) : [
                  beforeDestroy
                ]
    }
  }
}