1
0
mirror of https://github.com/sahadev/vue-component-creater-ui.git synced 2025-06-06 21:14:03 +08:00
vue-component-creater-ui/introduction.md
2021-04-22 17:35:08 +08:00

205 lines
8.7 KiB
Markdown
Raw Permalink Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# vue-component-creater
拖拽式的Vue组件生成平台
正式环境地址https://lc.100tal.com/#/
## Project setup
```
yarn install
```
### Compiles and hot-reloads for development
```
yarn run serve
```
### Compiles and minifies for production
```
yarn run build
```
### Lints and fixes files
```
yarn run lint
```
### 优势:
- 搭建速度快。
- 效果可视化。
- 代码实时生成。
- 提供主流预制模板。
- 无需每次查找组件源代码,节省查找时间。
- 提供主流预制属性。
- 支持属性、模板自行扩展。
### 规划:
目前仅集成了部分市面上流行的组件库。组件库的集成希望可以通过开源的方式让大家自助添加。
添加的流程为:
在 src/rawComponents 目录下建立以组件名为名称的文件夹(例如:element),并在该文件夹内提供一个 index.vue 文件,然后再将此文件引入到 src/components/RawComponents.vue 文件中。
\*.vue 文件建议以组件类型划分,例如 Botton 类的组件就可以都放在 button.vue 文件中,然后由 index.vue 文件引用。这样 Botton 的路径为:src/rawComponents/element/button.vue
当组件添加完毕后,需要给组件内的元素添加 lc-mark 的标志,这样这个组件才可以被**拖拽**。例如 element 的 Button:
```html
<el-button lc-mark>默认按钮</el-button>
```
当一切就就绪后,需要对所有的组件进行重新编译才可以正常使用,需执行 npm run compileComponent 命令。此命令会对 src/rawComponents 下所有的组件进行重新编译。如果有不希望编译的,请在 src/script/compile.js 中修改 ignore 属性。
> **需要注意的是:** 一类组件的 index.vue 文件最好不要编译,因为对这个文件内容的顺序是有要求的,比如**分割线**。而编译会使组件内元素的顺序重新排布(2020年12月28日已经将此问题修复)。
### TODO:
- 常用模板
- 预制常用属性
- 高亮当前属性编辑元素-跑马灯效果 -> 左下箭头高亮展示(2020 年 09 月 21 日效果不好2020年12月28日已通过outline实现)✔️
- 尝试从 vue 运行时入手,获取更多原始信息(2020 年 09 月 21 日开始已经废弃,通过迂回方式获得更多信息)✔️
- 提供调试控制台,输出当前代码结构关系图,类似 vue-tools(2020 年 10 月 02 日 已实现基本的文本形式的结构输出,需要树形的可折叠结构)。✔️
- 将组件库、预制属性、属性解析规则挪至单独的项目中。
- 支持生成预制的 data,methods。✔
- 我的常用:组件元素、整个组件。
- 接入自有的数据统计工具:神策。✔️
---
使用过程中发现的问题:
- 1.不支持删除某个元素。 ✔️
- 2.编辑 input 会造成高亮框混乱。 ✔️
- 3.没有下拉组件。✔️
- 4.删除外框内容子元素会一同被清空(两个 div 嵌套)。✔️
- 5.input 标签无法生成代码。 ✔️
- 6.提供一部分常用的组合组件。key:input ✔️
- 7.取消对 Html 元素的排序。需要更改 json2xml 的数据结构。Json 数据生成规则也需要变动。 ✔️
- 8.提供一些常见的模板。✔️
- 9.对复合组件还不支持 ✔️
- 10.针对某些组件预设样式。例如分页组件一定是在最下面且宽度为 100%的。
- 11.要对大型表单的搭建良好支持(例如课程管理页面的搭建https://wiki.zhiyinlou.com/pages/viewpage.action?pageId=60305227)。
- 12.预制更多常用的复合组件:{ key: value }。
- 13.更改父组件的属性,子组件被删除。✔️
- 14.对于:inline="true"的解析与生成需要完整支持,目前只能输出:inline。✔
---
2020 年 09 月 16 日 目前的进展:
- 1.当下已支持通过更改 Vue-loader 实现在运行时拿到组件源代码。具体可以查看 CommitID:c66593ff87c07c60670e634f50f49e030f68b63b,该次提交已可以在控制台看到源代码输出。
- 2.重新定义源代码的获取方式: 通过将源代码解析为 Json 结构, 然后在编辑时通过对对象的操作实现代码的生成。所以这里涉及到对 html 的解析与生成。解析部分需要重写,生成逻辑之前已完成。
2020 年 09 月 17 日 目前进展:
嵌套结构基本稳定,可进行各种组合
输出代码已移除 ID 属性
TODO: 稳固属性编辑,输出代码值类型默认为字符串
2020 年 09 月 19 日
编辑的基本单位应当以最小组件,即不能再拆分的单位
2020 年 09 月 22 日
右上角上显示的统计:
- 1.累计访问次数(PV)。
- 2.生成的组件数(点击复制的统计)。
- 3.基础组件数(统计可拖拽的基础组件)。
2020 年 09 月 23 日
开始规划组件库,分设常用、组件厂商,下设组件类型
需要彻底修改 xml 解析库,保证原始顺序不出错,或者不要编译 index.vue
2020 年 10 月 16 日 1.支持拖入时位置确认,可以在前、在中、在后,目前只能追加最后。 2.支持已拖入的拖动调整。
2020年11月10日
- 需要在成熟的组件库下添加超链接,方便直接去该网站获得具体的属性说明。
- 完善iView组件库
- 集成Quasar组件库:http://www.quasarchs.com/
- 这个东西是主要针对什么人群,要解决什么痛点?
2020年11月17日
- 属性编辑增加按钮需要调整:因为最后一个属性是无法删除的。
- 元素的删除支持快捷键.
- Form表单增加内容为按钮的。
- 属性的输入要全部为字符串不能为boolean。
- 无法在div内部的后面再追加。:center中
- 快速搜索输入框已有内容无法再次弹出
- 复制代码有问题,内容复制不上 ✔️
2020年12月04日
在编译form-base文件时发现html与js都出了问题问题发生在没有闭合标签的img以及下面这段JS代码上
```js
const isJPG = file.type === 'image/jpeg';
const isLt2M = file.size / 1024 / 1024 < 2;
if (!isJPG) {
this.$message.error('上传头像图片只能是 JPG 格式!');
}
if (!isLt2M) {
this.$message.error('上传头像图片大小不能超过 2MB!');
}
return isJPG && isLt2M;
```
**注意:** 在编辑组件库时在script标签内部慎用大于小于号会导致预编译阶段文本内容解析出错!
2021年01月08日10:27:25
在组件的css中不能使用scss的写法否则编译Vue文件会不通过
2021年01月11日
今天支持重新命名文件中重复声明的变量,但**在文件中不能声明与prop相同的声明**
---
### 下一步重点工作
1.做大量实践,探索组件单元最合适的组成。✔️
2.hover 方式标记组件的区域范围。✔️
3.增加沟通群二维码。❎
4.增加UI库vuetifyjshttps://vuetifyjs.com/zh-Hans/
5.增加UI库kendohttps://www.telerik.com/kendo-vue-ui
---
### 核心原理介绍
我们知道,在编写后的 vue 代码在运行时会生成实际的 Html 代码,而组件生成平台的职责是将这些 Html 再转换为 vue 代码。
为了达到这样的目的,我们目前可行的思路是:将原始的代码文件进行预编译:对指定的 vue 组件分配一个随机 ID并将这个 vue 文件的代码结构转换为 Json以 map 的形式存储于 map.js 文件中。在运行时,将 map.js 文件加载进内存。当拖动某个被 lc-mark 标记的元素时,我们可获得这个元素相应的 ID再通过这个 ID 到 map 中查找,于是获得了对应的原始代码结构。当拖入到某个元素中时,也通过相同的方式获得目标元素的原始代码,再将这两部分原始代码合并,并建立上下级关系。随后,通过新的代码结构,分析对应的@click、v-model、class 等我们所关注的属性,然后再将其生成对应的代码插入到将要生成的 Vue 组件中。如此,便形成了一个较为完整的 Vue 组件代码。
为了实现以上思路,有几项关键技术:
- 对 Vue 组件的解析与生成
- 上下级组件之间的数据结构关系
- html 元素与 Vue 代码之间吻合的对应关系
- Vue 代码的关键字解析,如@click
- 将代码转换为对象,将对象转换为代码
- 辅助线的定位与绘制
### 标准
本项目中所使用的标准色为:
- 蓝色:#435466;
- 绿色:#4dba87;
- 红色:#ff6159;
---
#### 不能接入到本平台的或者会出现不符合预期的元素
- el-dialog 无法直接显示在左侧组件栏中2020年12月28日已通过一个按钮代表解决
- el-input-number 拖拽时会抢占焦点,无法拖拽 ✔️
- el-select lc-mark标记的元素与实际运行时的元素不是同一个无法找到其原始代码 ✔️
- el-switch 原因与el-select一致 ✔️ 通过检视图解决
- el-time-select 原因与el-select一致 ✔️
- el-image 因为某种原因,没有正常完成初始化工作 ✔️