Commit e429da4a67beb572f3dd421f6c0a9063be7d8e05

Authored by ly525
1 parent 51f21d79

refactor props panel for Collapse; 重构props panel, 准备将通用属性放到折叠面板中

front-end/h5/src/components/core/editor/edit-panel/props.js
@@ -49,6 +49,60 @@ export default { @@ -49,6 +49,60 @@ export default {
49 this.$options.components[key] = components[key] 49 this.$options.components[key] = components[key]
50 } 50 }
51 }, 51 },
  52 + /**
  53 + *
  54 + * propKey: e.g:'color'
  55 + * propConfig: {
  56 + * editor: {},
  57 + * default: 'red'
  58 + * }
  59 + */
  60 + renderPropFormItem (h, { propKey, propConfig }) {
  61 + const editingElement = this.editingElement
  62 + const item = propConfig.editor
  63 + // https://vuejs.org/v2/guide/render-function.html
  64 + const data = {
  65 + // style: { width: '100%' },
  66 + props: {
  67 + ...item.prop || {},
  68 + // https://vuejs.org/v2/guide/render-function.html#v-model
  69 +
  70 + // #!zh:不设置默认值的原因(下一行的代码,注释的代码):
  71 + // 比如表单 input,如果用户手动删除了 placeholder的内容,程序会用defaultPropValue填充,
  72 + // 表现在UI上就是:用户永远无法彻底删掉默认值(必须保留至少一个字符)
  73 + // value: editingElement.pluginProps[propKey] || item.defaultPropValue
  74 +
  75 + // https://cn.vuejs.org/v2/guide/components-custom-events.html#%E8%87%AA%E5%AE%9A%E4%B9%89%E7%BB%84%E4%BB%B6%E7%9A%84-v-model
  76 + [item.type === 'a-switch' ? 'checked' : 'value']: editingElement.pluginProps[propKey]
  77 + },
  78 + on: {
  79 + // https://vuejs.org/v2/guide/render-function.html#v-model
  80 + // input (e) {
  81 + // editingElement.pluginProps[propKey] = e.target ? e.target.value : e
  82 + // }
  83 + change (e) {
  84 + // TODO fixme: update plugin props in vuex with dispatch
  85 + editingElement.pluginProps[propKey] = e.target ? e.target.value : e
  86 + }
  87 + }
  88 + }
  89 + const formItemLayout = this.layout === 'horizontal' ? {
  90 + labelCol: { span: 6 }, wrapperCol: { span: 16, offset: 2 }
  91 + } : {}
  92 + const formItemData = {
  93 + props: {
  94 + ...formItemLayout,
  95 + label: item.label
  96 + }
  97 + }
  98 + return (
  99 + <a-form-item {...formItemData}>
  100 + {/* extra: 操作补充说明 */}
  101 + { item.extra && <div slot="extra">{typeof item.extra === 'function' ? item.extra(h) : item.extra}</div>}
  102 + { h(item.type, data) }
  103 + </a-form-item>
  104 + )
  105 + },
52 renderPropsEditorPanel (h, editingElement) { 106 renderPropsEditorPanel (h, editingElement) {
53 const vm = getVM(editingElement.name) 107 const vm = getVM(editingElement.name)
54 const props = vm.$options.props 108 const props = vm.$options.props
@@ -72,51 +126,8 @@ export default { @@ -72,51 +126,8 @@ export default {
72 { 126 {
73 Object 127 Object
74 .entries(props) 128 .entries(props)
75 - .filter(([propKey, obj]) => obj.editor && !obj.editor.custom)  
76 - .map(([propKey, obj]) => {  
77 - const item = obj.editor  
78 - // https://vuejs.org/v2/guide/render-function.html  
79 - const data = {  
80 - // style: { width: '100%' },  
81 - props: {  
82 - ...item.prop || {},  
83 - // https://vuejs.org/v2/guide/render-function.html#v-model  
84 -  
85 - // #!zh:不设置默认值的原因(下一行的代码,注释的代码):  
86 - // 比如表单 input,如果用户手动删除了 placeholder的内容,程序会用defaultPropValue填充,  
87 - // 表现在UI上就是:用户永远无法彻底删掉默认值(必须保留至少一个字符)  
88 - // value: editingElement.pluginProps[propKey] || item.defaultPropValue  
89 -  
90 - // https://cn.vuejs.org/v2/guide/components-custom-events.html#%E8%87%AA%E5%AE%9A%E4%B9%89%E7%BB%84%E4%BB%B6%E7%9A%84-v-model  
91 - [item.type === 'a-switch' ? 'checked' : 'value']: editingElement.pluginProps[propKey]  
92 - },  
93 - on: {  
94 - // https://vuejs.org/v2/guide/render-function.html#v-model  
95 - // input (e) {  
96 - // editingElement.pluginProps[propKey] = e.target ? e.target.value : e  
97 - // }  
98 - change (e) {  
99 - // TODO fixme: update plugin props in vuex with dispatch  
100 - editingElement.pluginProps[propKey] = e.target ? e.target.value : e  
101 - }  
102 - }  
103 - }  
104 - const formItemLayout = this.layout === 'horizontal' ? {  
105 - labelCol: { span: 6 }, wrapperCol: { span: 16, offset: 2 }  
106 - } : {}  
107 - const formItemData = {  
108 - props: {  
109 - ...formItemLayout,  
110 - label: item.label  
111 - }  
112 - }  
113 - return (  
114 - <a-form-item {...formItemData}>  
115 - { item.extra && <div slot="extra">{typeof item.extra === 'function' ? item.extra(h) : item.extra}</div>}  
116 - { h(item.type, data) }  
117 - </a-form-item>  
118 - )  
119 - }) 129 + .filter(([propKey, propConfig]) => propConfig.editor && !propConfig.editor.custom)
  130 + .map(([propKey, propConfig]) => this.renderPropFormItem(h, { propKey, propConfig }))
120 } 131 }
121 </a-form> 132 </a-form>
122 ) 133 )