Commit 463307ef357113df29d08581fd1925417136292c
1 parent
44f695ca
docs: add api dev docs link and custom plugin dev docs; #!zh 增加后端 api 文档链接和自定义组件开发文档
Showing
9 changed files
with
460 additions
and
12 deletions
docs/.vuepress/config.js
| ... | ... | @@ -36,6 +36,7 @@ module.exports = { |
| 36 | 36 | // { text: 'API', link: '/api/' }, |
| 37 | 37 | { text: 'Website', link: 'https://h5.luban-h5.com' }, |
| 38 | 38 | { text: 'Changelog', link: 'https://github.com/ly525/luban-h5/releases' }, |
| 39 | + { text: 'Api Docs', link: 'https://h5.luban-h5.com/documentation/' }, | |
| 39 | 40 | ], |
| 40 | 41 | sidebar: { |
| 41 | 42 | '/': [ |
| ... | ... | @@ -59,10 +60,17 @@ module.exports = { |
| 59 | 60 | ], |
| 60 | 61 | }, |
| 61 | 62 | { |
| 62 | - collapsable: true, | |
| 63 | - title: '🔌 Local plugins', | |
| 63 | + collapsable: false, | |
| 64 | + title: '🔌Plugins Development', | |
| 64 | 65 | children: [ |
| 65 | - '/en/plugin-development/quick-start', | |
| 66 | + '/zh/plugin-development/', | |
| 67 | + '/zh/plugin-development/how-it-works/simple-prop', | |
| 68 | + '/zh/plugin-development/how-it-works/custom-editor-single-prop', | |
| 69 | + '/zh/plugin-development/how-it-works/custom-editor-multiple-props', | |
| 70 | + '/zh/plugin-development/quick-start', | |
| 71 | + '/zh/plugin-development/cli-params', | |
| 72 | + '/zh/plugin-development/plugin-default-inject-props', | |
| 73 | + '/zh/plugin-development/reference', | |
| 66 | 74 | ], |
| 67 | 75 | }, |
| 68 | 76 | { |
| ... | ... | @@ -86,6 +94,7 @@ module.exports = { |
| 86 | 94 | // { text: '插件', link: '/zh/plugin/' }, |
| 87 | 95 | { text: '首页', link: 'https://h5.luban-h5.com' }, |
| 88 | 96 | { text: '发布日志', link: 'https://github.com/ly525/luban-h5/releases' }, |
| 97 | + { text: '后端API文档', link: 'https://h5.luban-h5.com/documentation/' }, | |
| 89 | 98 | ], |
| 90 | 99 | sidebar: { |
| 91 | 100 | '/': [ |
| ... | ... | @@ -109,10 +118,17 @@ module.exports = { |
| 109 | 118 | ], |
| 110 | 119 | }, |
| 111 | 120 | { |
| 112 | - collapsable: true, | |
| 113 | - title: '🔌 Local plugins', | |
| 121 | + collapsable: false, | |
| 122 | + title: '🔌插件/自定义组件开发(Alpha)', | |
| 114 | 123 | children: [ |
| 124 | + '/zh/plugin-development/', | |
| 125 | + '/zh/plugin-development/how-it-works/simple-prop', | |
| 126 | + '/zh/plugin-development/how-it-works/custom-editor-single-prop', | |
| 127 | + '/zh/plugin-development/how-it-works/custom-editor-multiple-props', | |
| 115 | 128 | '/zh/plugin-development/quick-start', |
| 129 | + '/zh/plugin-development/cli-params', | |
| 130 | + '/zh/plugin-development/plugin-default-inject-props', | |
| 131 | + '/zh/plugin-development/reference', | |
| 116 | 132 | ], |
| 117 | 133 | }, |
| 118 | 134 | { | ... | ... |
docs/zh/plugin-development/README.md
0 → 100644
| 1 | +# 目录 | |
| 2 | +> 说明,自定义组件目前处于 Alpha 版本,持续迭代中,API 可能会发生重大变化。 | |
| 3 | +> 建议到 Beta 版本再使用 | |
| 4 | + | |
| 5 | +- [原理篇:简单属性编辑器](how-it-works/simple-prop.md) | |
| 6 | +- [原理篇:单属性自定义编辑器](how-it-works/custom-editor-single-prop.md) | |
| 7 | +- [原理篇:多属性自定义编辑器](how-it-works/custom-editor-multiple-props.md) | |
| 8 | +- [脚手架:快速上手](quick-start.md) | |
| 9 | +- [脚手架:命令行交互说明](cli-params.md) | |
| 10 | +- [组件:默认属性注入](plugin-default-inject-props.md) | |
| 11 | +- [参考资料](reference.md) | |
| 0 | 12 | \ No newline at end of file | ... | ... |
docs/zh/plugin-development/cli-params.md
0 → 100755
| 1 | +# 脚手架-命令行参数说明 | |
| 2 | + | |
| 3 | +## 命令参数说明 | |
| 4 | +1. `组件的名称(发布到npm)`:***输入组件名称*** | |
| 5 | + * 默认为 `test`,这个名字最后会作为:component name | |
| 6 | + * 将在luban-h5的编辑器中,通过 `yarn add component-name` 的形式引入 | |
| 7 | + | |
| 8 | +2. `icon`: ***输入icon*** | |
| 9 | + >  | |
| 10 | + | |
| 11 | + | |
| 12 | + * 访问 [Font Awesome 4.7 版本](https://fontawesome.com/v4.7.0/icons/) | |
| 13 | + | |
| 14 | + * 按照下图的方法,选择一个 icon, 在命令行对话中,输入即可 | |
| 15 | + >  | |
| 16 | + | |
| 17 | + | |
| 18 | + ```js | |
| 19 | + export default { | |
| 20 | + // 在 https://fontawesome.com/v4.7.0/icons/ 中寻找对应的 icon,填入 icon 字段即可 | |
| 21 | + icon: 'address-book', | |
| 22 | + name: 'luban-h5-address', | |
| 23 | + } | |
| 24 | + ``` | |
| 25 | + | |
| 26 | +3. `是否有命名空间(@scope)`:***Yes or No*** | |
| 27 | + * 作为组织或者企业开发组件,可以选择 `Yes`,在下一步,填写 `npm scope` | |
| 28 | + | |
| 29 | +4. `scope(命名空间<理解为企业/组织名称>)`: ***输入scope名称*** | |
| 30 | + * 将企业/组织的组件放在 `@组织名` 下, 便于管理 | |
| 31 | + * 举例1: | |
| 32 | + * LubanH5 的官方组件库,都放在了`@luban-h5`这个 scope 下。 | |
| 33 | + * 以按钮组件为例,通过 `yarn add @luban-h5/lbc-button`,即可引入官方按钮组件了 | |
| 34 | + * 用户一看到 `@luban-h5` 这个,就知道是由 LubanH5 官方提供的组件库 | |
| 35 | + * 举例2: | |
| 36 | + * 你的企业/组织名称是 `abc`,你在开发 `upload` 上传组件,那么就可以选择: | |
| 37 | + | |
| 38 | + ```bash | |
| 39 | + 组件的名称(发布到npm) :upload | |
| 40 | + 是否有命名空间(@scope):Yes | |
| 41 | + scope:abc | |
| 42 | + | |
| 43 | + 通过 `npm publish --access public` 发布到 npm | |
| 44 | + 通过`npm install @abc/upload` 或 `yarn add @abc/uplaod`, 即可引入到`鲁班编辑器`中作为`自定义组件`使用 | |
| 45 | + ``` | |
| 46 | + | |
| 47 | + | |
| 48 | +## 相关概念 | |
| 49 | +[npm-scope 官网文档](https://docs.npmjs.com/misc/scope) | |
| 0 | 50 | \ No newline at end of file | ... | ... |
docs/zh/plugin-development/how-it-works/custom-editor-multiple-props.md
0 → 100755
| 1 | +# 原理篇:多属性自定义编辑器 | |
| 2 | +> 自定义组件/插件/Plugin 原理概览 | |
| 3 | + | |
| 4 | +## 举例 [鲁班H5 轮播图组件](https://github.com/luban-h5-components/lbp-slide) | |
| 5 | +- 这个组件本质上就是一个 vue 组件 | |
| 6 | +- 其本质是对 [Vant组件库的轮播组件](https://youzan.github.io/vant/#/zh-CN/swipe) 的简单封装 | |
| 7 | +- [核心代码](https://github.com/luban-h5-components/lbp-slide/blob/master/src/component/entry.vue) | |
| 8 | + - 可以看出来,核心代码其实非常简单,和大家平时写轮播图,或者调用第三方组件库的轮播图的方式几乎没有区别,基本上是配置一些 props,比如轮播间隔时间、轮播图列表等 | |
| 9 | + - 接下来我们来讲一下不同的地方在哪里🧐 | |
| 10 | + | |
| 11 | +## 自定义组件和常规组件的不同之处(影响多个属性) | |
| 12 | +以[如下这段代码](https://github.com/luban-h5-components/lbp-slide/blob/master/src/component/entry.vue#L57-L67)为例,相信写 `vue` 或者 `react` 的同学,应该会比较熟悉 | |
| 13 | + | |
| 14 | +配置 轮播组件的 items,也就是轮播的选项信息 | |
| 15 | +```js | |
| 16 | +props: { | |
| 17 | + items: { | |
| 18 | + type: Array, | |
| 19 | + default: () => [ | |
| 20 | + { value: 'https://img.yzcdn.cn/vant/apple-1.jpg' }, | |
| 21 | + { value: 'https://img.yzcdn.cn/vant/apple-2.jpg' } | |
| 22 | + ], | |
| 23 | + // 主要区别应该是这里 | |
| 24 | + editor: { | |
| 25 | + custom: true | |
| 26 | + } | |
| 27 | + } | |
| 28 | +} | |
| 29 | +``` | |
| 30 | + | |
| 31 | +- 这里和我们平时写的组件是有些区别的,我们添加了这些信息 | |
| 32 | +```js | |
| 33 | +editor: { | |
| 34 | + custom: true | |
| 35 | +} | |
| 36 | +``` | |
| 37 | +- 其中`custom: true` 表示在编辑器的右侧面板,采用`自定义属性编辑器`来配置`自定义组件`的相关属性 | |
| 38 | + | |
| 39 | +- 在这里可以理解为:采用`自定义属性编辑器`来配置`轮播组件`的`items`属性 | |
| 40 | + | |
| 41 | +- 那么,它和上面的 按钮组件的 `color.editor` 有什么区别呢?为何这里不采用一个第三方组件呢? | |
| 42 | + | |
| 43 | +- 答案:因为有时候,有些操作会影响多个属性值(联动) | |
| 44 | + | |
| 45 | +- 以轮播图组件的实际场景为例,我们来解释下什么叫:`有些操作会影响多个属性值`。毕竟这句话猛的一听,有点像教科书,晦涩难懂,咱还是说说实际业务场景吧 | |
| 46 | + | |
| 47 | +> 有图有真相: | |
| 48 | +>  | |
| 49 | + | |
| 50 | +- 按照图中的说法,如果我们点击了【减号】按钮,其实就会影响到两个属性:`activeIndex` 和 `items`,因此如果写了一个和上面的颜色选择器一样的组件,放在 activeIndex 或 items 任意一方中都是不太合适的,因为这个算是二者共有的; | |
| 51 | + - 轮播图 props 主要代码如下:[代码链接](https://github.com/luban-h5-components/lbp-slide/blob/master/src/component/entry.vue#L50-L67): | |
| 52 | + | |
| 53 | + ```js | |
| 54 | + props: { | |
| 55 | + activeIndex: { | |
| 56 | + type: Number, | |
| 57 | + default: 0, | |
| 58 | + editor: { | |
| 59 | + custom: true | |
| 60 | + } | |
| 61 | + }, | |
| 62 | + items: { | |
| 63 | + type: Array, | |
| 64 | + default: () => [ | |
| 65 | + { value: 'https://img.yzcdn.cn/vant/apple-1.jpg' }, | |
| 66 | + { value: 'https://img.yzcdn.cn/vant/apple-2.jpg' } | |
| 67 | + ], | |
| 68 | + editor: { | |
| 69 | + custom: true | |
| 70 | + } | |
| 71 | + } | |
| 72 | + } | |
| 73 | + ``` | |
| 74 | + | |
| 75 | +- 如何解决呢: | |
| 76 | + - 还记得我们上面讲过的,将按钮 放置到 中间画布上的操作吗? | |
| 77 | + | |
| 78 | + ***鲁班会自动遍历`按钮组件` 的 `props`,构造一个包含了组件基本属性和其默认值的配置对象:`pluginProps`*** | |
| 79 | + | |
| 80 | + - 我们可以写一个组件,比如叫 `slideEditor` (轮播编辑器,叫啥随你,最好有相关性,清晰易懂即可,最好加注释) | |
| 81 | + - 我们要解决的问题是,点击一个按钮,会修改多个属性的值,多个属性的值和其值存在哪里呢?其实就在 `pluginProps` 中 | |
| 82 | + - 我们把 `pluginProps` 作为属性传入到 `slideEditor`(也就说将轮播图组件的所有 props和其值 都传入到 slideEditor 中),这样就可以在 slideEditor 中更新这个 pluginProps 了,换句话说,所有的 props和值都给你了,你可以改多个 props 的值了 | |
| 83 | + - show me the code,让我们看下 slideEditor 是如何实现的吧,主要代码如下:[完整代码链接](https://github.com/luban-h5-components/lbp-slide/blob/master/src/component/editor.vue) | |
| 84 | + ```vue | |
| 85 | + <!-- | |
| 86 | + 轮播组件属性自定义编辑器(增强编辑器) | |
| 87 | + 文档:https://github.com/luban-h5/vue-cli-plugin-lbhc/wiki | |
| 88 | + --> | |
| 89 | + <template> | |
| 90 | + <div> | |
| 91 | + <a-pagination | |
| 92 | + :current="current" | |
| 93 | + @change="handleSelectPage" | |
| 94 | + size="small" | |
| 95 | + :total="innerItems.length" | |
| 96 | + :defaultPageSize="1" | |
| 97 | + :itemRender="itemRender" | |
| 98 | + /> | |
| 99 | + <lbs-image-gallery | |
| 100 | + style="margin: 16px 0" | |
| 101 | + :value="currentItem.value" | |
| 102 | + @change="handleSelectImage" | |
| 103 | + /> | |
| 104 | + </div> | |
| 105 | + </template> | |
| 106 | + | |
| 107 | + <script> | |
| 108 | + export default { | |
| 109 | + props: { | |
| 110 | + /** | |
| 111 | + * 通过 new Vue.component('plugin-name').$optioins.props 收集组件的属性 | |
| 112 | + * 作为 Object,传递给 props editor,从而从过属性自定义编辑器 来更新属性值 | |
| 113 | + */ | |
| 114 | + pluginProps: { | |
| 115 | + type: Object, | |
| 116 | + default: () => ({ | |
| 117 | + items: [], | |
| 118 | + activeIndex: 0 | |
| 119 | + }) | |
| 120 | + } | |
| 121 | + }, | |
| 122 | + methods: { | |
| 123 | + itemRender (current, type, originalElement) { | |
| 124 | + // 减号按钮 | |
| 125 | + if (type === 'prev') { | |
| 126 | + return <a-button style={{ marginRight: '8px' }} size="small" icon="minus" onClick={() => this.minus(current)} disabled={this.innerItems.length === 1}></a-button> | |
| 127 | + } else if (type === 'next') { | |
| 128 | + return <a-button style={{ marginLeft: '8px' }} size="small" icon="plus" onClick={this.add}></a-button> | |
| 129 | + } | |
| 130 | + return originalElement | |
| 131 | + }, | |
| 132 | + // 点击减号的 callback:items.splice 和 activeIndex-- | |
| 133 | + minus (index) { | |
| 134 | + if (this.innerItems.length === 1) return | |
| 135 | + this.pluginProps.items.splice(index, 1) | |
| 136 | + this.pluginProps.activeIndex = Math.max(index - 1, 0) | |
| 137 | + } | |
| 138 | + } | |
| 139 | + } | |
| 140 | + </script> | |
| 141 | + ``` | |
| 142 | + | |
| 143 | +大概的原理到这里就差不多,这也是鲁班H5的自定义组件和其编辑器的核心原理了 | |
| 144 | + | |
| 145 | +下一章来讲讲,如何利用鲁班H5 官网提供的`自定义组件-脚手架`来`快速开发`自定义组件 | ... | ... |
docs/zh/plugin-development/how-it-works/custom-editor-single-prop.md
0 → 100755
| 1 | +# 原理篇:单属性自定义编辑器 | |
| 2 | +> 自定义组件/插件/Plugin 原理概览 | |
| 3 | + | |
| 4 | +通过`自定义属性编辑器`来配置组件的某些属性的`复杂编辑需求` | |
| 5 | + | |
| 6 | +举个例子:图片的 imgSrc 属性,采用自定义编辑器的方法如下,[图片演示](https://user-images.githubusercontent.com/12668546/69001396-6a916500-0918-11ea-8f39-5e27a688d2fe.png) | |
| 7 | + | |
| 8 | +```js | |
| 9 | +props: { | |
| 10 | + imgSrc: { | |
| 11 | + type: String, | |
| 12 | + defualt: '', | |
| 13 | + editor: { | |
| 14 | + custom: true | |
| 15 | + // 如果写了 custom: true,则会采用 editor.vue 或者 editor.js 来配置组件的相关属性 | |
| 16 | + // 自定义组件的加载目前在 mini-editor/panel/props.js 的 loadCustomEditorForPlugin 方法中加载并注册 | |
| 17 | + // 这样,就可以通过自定义属性编辑器来配置组件的某些复杂属性了 | |
| 18 | + // 图片演示:https://user-images.githubusercontent.com/12668546/69001396-6a916500-0918-11ea-8f39-5e27a688d2fe.png | |
| 19 | + } | |
| 20 | + } | |
| 21 | +} | |
| 22 | +``` | |
| 23 | + | |
| 24 | +- 1. 从上面来看,其实我们自定义的这个图片选择器,只影响到了 imgSrc 这一个属性 | |
| 25 | +- 2. 其实可以把它抽象出来作为一个组件(比如叫做 `luban-support-image-gallery`(鲁班辅助支撑组件-图片库)) | |
| 26 | +- 3. 发布到 npm 上,作为全局组件引入即可 | |
| 27 | + | |
| 28 | +简单改造下 imgSrc 的属性配置: | |
| 29 | +```js | |
| 30 | +props: { | |
| 31 | + imgSrc: { | |
| 32 | + type: String, | |
| 33 | + defualt: '', | |
| 34 | + editor: { | |
| 35 | + type: 'luban-support-image-gallery' | |
| 36 | + } | |
| 37 | + } | |
| 38 | +} | |
| 39 | +``` | ... | ... |
docs/zh/plugin-development/how-it-works/simple-prop.md
0 → 100755
| 1 | +# 原理篇:简单属性编辑器 | |
| 2 | +> 自定义组件/插件/Plugin 原理概览 | |
| 3 | + | |
| 4 | +## [鲁班H5 按钮组件](https://github.com/luban-h5-components/lbc-button) | |
| 5 | +- 这个组件本质上就是一个 vue 组件 | |
| 6 | +- [核心代码](https://github.com/luban-h5-components/lbc-button/blob/master/src/component/entry.js) | |
| 7 | + - 可以看出来,核心代码其实非常简单,和大家平时写按钮组件差不多,基本上是配置一些 props,比如颜色、字体、内容、背景色、前景色、border 等 | |
| 8 | + - 以 color 为例: | |
| 9 | +  | |
| 10 | + | |
| 11 | + ```js | |
| 12 | + props: { | |
| 13 | + color: { | |
| 14 | + type: String, | |
| 15 | + // 注意,根据 MDN 文档,颜色选择器的 value 只能是:# + 6个16进制字符串 | |
| 16 | + // https://developer.mozilla.org/en-US/docs/Web/HTML/Element/input/color#Value | |
| 17 | + // The value of an <input> element of type color is always a DOMString which contains a 7-character string specifying an RGB color in hexadecimal format. | |
| 18 | + default: '#000000', | |
| 19 | + editor: { | |
| 20 | + type: 'el-color-picker', | |
| 21 | + label: '文字颜色', | |
| 22 | + // !#zh 为编辑组件指定 prop | |
| 23 | + prop: { | |
| 24 | + size: 'mini', | |
| 25 | + showAlpha: true | |
| 26 | + }, | |
| 27 | + require: true | |
| 28 | + } | |
| 29 | + }, | |
| 30 | + } | |
| 31 | + ``` | |
| 32 | + - 可以看到相对于平时我们写的 Vue 或者 React 组件,这里的 color 的 prop 多了一个 key: `editor` | |
| 33 | + - 这个 `color.editor` 就是 颜色的`属性编辑器`了,因为鲁班默认集成了 element-ui 的颜色选择器组件,因此我们可以直接使用 `'el-color-picker'` 来作为颜色属性的自定义编辑器 | |
| 34 | + - 当然,鲁班也集成了 ant-design-vue 的全部组件,但因为 ant-design-vue 的颜色选择器目前功能上没有 element-ui 的颜色选择器强大(不支持透明度),因此我们选择了 element-ui 的颜色选择器 | |
| 35 | + | |
| 36 | + | |
| 37 | + - 在把`按钮` 从左侧`拖拽放置`到 `编辑器`中间的画布上的时候,鲁班会自动执行如下代码: | |
| 38 | + - 遍历`按钮组件`的`props` | |
| 39 | + - 构造 pluginProps 对象,作为画布中按钮元素的描述信息(也是数据库中存储的信息) | |
| 40 | + ```js | |
| 41 | + // init prop of plugin | |
| 42 | + getDefaultPluginProps (props) { | |
| 43 | + const pluginProps = { | |
| 44 | + uuid: this.uuid // uuid 用于在组件树中定位组件 | |
| 45 | + } | |
| 46 | + Object.keys(props).forEach(key => { | |
| 47 | + const defaultValue = props[key].default | |
| 48 | + pluginProps[key] = typeof defaultValue === 'function' ? defaultValue() : defaultValue | |
| 49 | + }) | |
| 50 | + return pluginProps | |
| 51 | + } | |
| 52 | + ``` | |
| 53 | + | |
| 54 | + - 得到的结果大致如下,也就代表着,按钮在画布上的颜色、文字、边框、对齐、字体等信息如下 | |
| 55 | + ```js | |
| 56 | + pluginProps = { | |
| 57 | + "uuid": 1580038843434, | |
| 58 | + "text": "按钮", | |
| 59 | + "vertical": false, | |
| 60 | + "backgroundColor": "rgba(255, 255, 255, 0.2)", | |
| 61 | + "color": "#000000", | |
| 62 | + "fontSize": 14, | |
| 63 | + "lineHeight": 1, | |
| 64 | + "borderWidth": 0, | |
| 65 | + "borderRadius": 0, | |
| 66 | + "borderColor": "#ced4da", | |
| 67 | + "textAlign": "center" | |
| 68 | + } | |
| 69 | + ``` | |
| 70 | + | |
| 71 | +## 简单属性编辑器小结 | |
| 72 | +如果组件的某些属性比较简单,比如文本、数字,则可以使用 [ant-design-vue](https://www.antdv.com/docs/vue/introduce-cn/) 组件来配置组件的属性 | |
| 73 | + | |
| 74 | +举个例子:图片的 imgSrc 配置,[图片演示](https://user-images.githubusercontent.com/12668546/69001390-42096b00-0918-11ea-85b4-0ec868e44769.png) | |
| 75 | + | |
| 76 | +```js | |
| 77 | +props: { | |
| 78 | + imgSrc: { | |
| 79 | + type: String, | |
| 80 | + defualt: '', | |
| 81 | + editor: { | |
| 82 | + type: 'a-input' | |
| 83 | + // 调用 ant-design-vue 的 input(输入框) 组件来配置 imgSrc,直接复制粘贴图片的链接即可 | |
| 84 | + // 图片演示:https://user-images.githubusercontent.com/12668546/69001390-42096b00-0918-11ea-85b4-0ec868e44769.png | |
| 85 | + | |
| 86 | + // 这样比较简单,但是有时候,用户可能希望编辑图片的时候,可以自己上传 或 从图片库中选择图片 | |
| 87 | + // 图片演示:https://user-images.githubusercontent.com/12668546/69001396-6a916500-0918-11ea-8f39-5e27a688d2fe.png | |
| 88 | + // 这时候,简单的 input(输入框) 就无法满足需求了,这时候给组件属性配置自定义编辑器就有了用武之地了,具体请往下看。 | |
| 89 | + } | |
| 90 | + } | |
| 91 | +} | |
| 92 | +``` | ... | ... |
docs/zh/plugin-development/plugin-default-inject-props.md
0 → 100755
| 1 | +# 组件默认属性 | |
| 2 | +> 鲁班向自定义组件 默认注入了一些属性,便于开发 | |
| 3 | + | |
| 4 | +### editorMode 编辑器当前模式 | |
| 5 | + * preview: 预览模式 | |
| 6 | + * edit: 编辑模式 | |
| 7 | + | |
| 8 | +```js | |
| 9 | +props: { | |
| 10 | + editorMode: { | |
| 11 | + type: String, | |
| 12 | + default: 'edit' | |
| 13 | + }, | |
| 14 | +} | |
| 15 | +``` | |
| 16 | + | |
| 17 | + | |
| 18 | +```js | |
| 19 | +/** | |
| 20 | + * #!zh: 编辑器当前模式: | |
| 21 | + * preview: 预览模式 | |
| 22 | + * edit: 编辑模式 | |
| 23 | + * | |
| 24 | + * 通常用在轮播图、单选、多选、提交按钮、视频 | |
| 25 | + * 因为他们在编辑模式和预览模式下有不同的表现 | |
| 26 | + * | |
| 27 | + * 举例: | |
| 28 | + * ================================================================================================================================ | |
| 29 | + * | 组件名称 | 编辑模式表现 | 预览模式表现 | | |
| 30 | + * ================================================================================================================================ | |
| 31 | + * | 轮播图 | 正在编辑的图片 | 轮播图 | | |
| 32 | + * -------------------------------------------------------------------------------------------------------------------------------- | |
| 33 | + * | 提交按钮 | 仅可点击, 但不会提交表单 | 可点击, 且可以提交表单 | | |
| 34 | + * -------------------------------------------------------------------------------------------------------------------------------- | |
| 35 | + * | 视频 | 视频占位 icon | 可播放的视频 | | |
| 36 | + * -------------------------------------------------------------------------------------------------------------------------------- | |
| 37 | + * | |
| 38 | + * | |
| 39 | + * | |
| 40 | + * #!en: current mode for editor | |
| 41 | + * preview: preview mode | |
| 42 | + * edit: edit mode | |
| 43 | + * | |
| 44 | + * commonly used for carousel, checkbox, radio, form submit button、video etc... | |
| 45 | + * Because they have different behaviour in edit mode and preview mode. | |
| 46 | + * | |
| 47 | + * Examples: | |
| 48 | + * ================================================================================================================================ | |
| 49 | + * | Component | Edit Mode Behaviour | Preview Mode Behaviour | | |
| 50 | + * ================================================================================================================================ | |
| 51 | + * | carousel | editing image | carousel | | |
| 52 | + * -------------------------------------------------------------------------------------------------------------------------------- | |
| 53 | + * | form submit button | only clickable, but will not submit the form | clickable, can submit the form | | |
| 54 | + * -------------------------------------------------------------------------------------------------------------------------------- | |
| 55 | + * | video | video placeholder icon | playable video | | |
| 56 | + * -------------------------------------------------------------------------------------------------------------------------------- | |
| 57 | + * | |
| 58 | + */ | |
| 59 | +``` | |
| 0 | 60 | \ No newline at end of file | ... | ... |
docs/zh/plugin-development/quick-start.md
| 1 | 1 | # 快速开始 |
| 2 | -TODO | |
| 2 | +> 以下内容与 [vue-cli-plugin-lbhc README](https://github.com/luban-h5/vue-cli-plugin-lbhc) 相同 | |
| 3 | 3 | |
| 4 | -### 如何进行插件开发 | |
| 4 | +> vue-cli-plugin-lbhc 全称为:vue-cli-plugin-luban-h5-component | |
| 5 | 5 | |
| 6 | -我现在的认知里面,做成插件的模式,还是需要clone 下来 debug 插件的实际效果的 | |
| 7 | -不过可以改进插件的开发流程,让插件作者尽量低成本的开发,只要注重插件本身的逻辑就可以了 | |
| 6 | +## 安装 | |
| 8 | 7 | |
| 9 | -它山之石:Vuepress、Grafana | |
| 8 | +### 使用preset自动安装插件 | |
| 9 | +``` | |
| 10 | +vue create --preset luban-h5/vue-cli-plugin-lbhc my-luban-component-demo | |
| 11 | +``` | |
| 10 | 12 | |
| 11 | 13 | |
| 12 | ---- | |
| 14 | +### 目录结构 | |
| 13 | 15 | |
| 14 | -<Vssue issueId="10" /> | |
| 15 | 16 | \ No newline at end of file |
| 17 | +```bash | |
| 18 | +mini-editor 模拟鲁班H5的核心编辑器功能 | |
| 19 | +component 你要编写组件的目录 | |
| 20 | + index.js 组件入口 | |
| 21 | + editor.js 组件的编辑面板配置 | |
| 22 | + | |
| 23 | +``` | |
| 24 | + | |
| 25 | + | |
| 26 | +### 开发流程 | |
| 27 | + | |
| 28 | +```bash | |
| 29 | +vue create --preset luban-h5/vue-cli-plugin-lbhc lbc-demo | |
| 30 | +cd lbc-demo | |
| 31 | +yarn serve | |
| 32 | + | |
| 33 | +# 构建、发布个人组件 | |
| 34 | +yarn build | |
| 35 | +npm login | |
| 36 | +npm publish | |
| 37 | + | |
| 38 | + | |
| 39 | +# 构建发布 scope 组件 | |
| 40 | +yarn build | |
| 41 | +npm login | |
| 42 | +npm publish --access publish | |
| 43 | +``` | ... | ... |