前言

公司有一个项目在维护,大概有300左右,其中表单与表格的页面占比大概百分之五六十,为了节省开发时间,避免多人协作时,出现多套冗余代码,我们尝试写了一下表单和表格的生成工具,从梳理到规范学习再到总结,收获很多,写一下笔记与大家分享。

表单生成,使用Express mongoDB jquery编写

1. 表格生成


2. 表格预览


表格生成预览

1. 选择生成组件


2. 编辑组件数据


3. 表格编辑


4. 预览页面


下文仅对表格生成工具的规范梳理和工具开发做介绍

现有页面梳理

把所有页面涉及到表格的页面全部截图110个,然后再查找规则,大致分为5种类型页面。

  • 常规操作:56个
  • 批量操作:11个
  • TAB样式:4个
  • 特殊样式:30个

常规页面


批量操作


TAB样式


特殊样式


根据样式粗略的分类,查询条件有一丁点规则,会根据字段内容自己换行,并没有发现可复用规则。

感觉遇到瓶颈,于是开始学习表格的设计规范。

表格设计规范学习

以下链接是表格设计规范的学习资料。

  • 设计更好的数据表格设计 (Data Table)
  • 数据表格设计|从功能、交互和 UI 进行全方位分析
  • Web 页面中的表格设计,远没那么简单
  • 数据表格设计指南
  • 数据表的用户界面最佳设计:设计结构、交互模式、技术列表浅析

收获知识点如下,学习完表格设计规范后,知道了如何根据自己的业务场景选择UI框架和组件,也发现一些框架的瑕疵,比如数字类型有小数点,要保持小数点位数一致,右侧对齐,在Element框架文档中就存在这个问题,当然,并不是鸡蛋里挑骨头,可能由于时间或者其他因素没有完善。


  • 表格对字体的要求
  • 标题与对齐规则
  • 7±2定律
  • 筛选与搜索
  • 批量操作与记录所选项
  • 反馈
  • 长内容展示
  • 空单元格处理
  • 分割线的使用
  • 实时筛选与交叉筛选
  • 判断是否使用固定列表
  • 横向对比与竖向对比
  • 全选案例
  • 筛选勾选
  • 批量操作与单项操作
  • 顶部批量操
  • 悬停操作
  • 行内编辑
  • 快速浏览

很多知识点在UI框架中有应用,参见几个框架的表格规范。

  • Ant Design 表格
  • Element UI 表格
  • iView 表格

根据业务总结规范

对规范有了认识,按照原子设计概念,划分粒度较小的组件。

tomic Design原子设计理念:构建科学规范的设计系统

  • 标题组件


  • TAB组件


  • 上传下载组件


  • 详情展示组件


  • 查询条件组件


  • 提示文字组件


  • 表格组件


  • 分页组件


  • 提交按钮组件


按照思路整理以后,发现我们的UI设计也应用了很多交互规范,比如根据场景区分复杂分页与简单分页、批量操作与单项操作、行内编辑与提交编辑等,当然,也有很多不规范的地方,比如上传下载不统一、TAB样式多个、详情展示样式多个。

标题样式与TAB样式,按钮样式


上传下载样式


起止日期与选项标题



根据组件分类并整理出每个组件的不同状态后,和需求设计组的老大一块讨论,是否可以根据现有场景做一些优化和规则制定,结果很令人满意,初步组件规则协定好,去掉不规范的交互效果,需求设计组声明以后也会按照规则产出原型。

规则制定好后,犯懒的想法愈发严重,何不开发一个自动生成工具,能保证代码质量和规范,效率也更高。

页面生成工具开发

以前编写的表单生成工具尝到了一些甜头,有一些积累和总结,基于上次的经验,我们开始了本次的工作内容划分。

1. 技术选型 上次使用jquery开发,需要在DOM和数据间来回操作,很麻烦,这次准备用vue开发,效率很高,2个人几天就完成了,虽然仅仅是初版,另外使用表单生产工具之前,都要搭建node MongoDB的环境,很不方便,我们暂时不打算存储页面数据,去掉服务端和数据库。

2. 数据结构定义 要保证每个组件的数据和类型有地方存储,以及未来扩展和维护的成本。

export const TABLE_JSON = {"title": "保障层级变更",  //标题数据"tab": ['保单','会交单'], //tab数据"download":[            //上传下载操作{label:'上传清单人员模板',buttonText:'点击下载'},{label:'批量修改模板',buttonText:'点击下载'},{label:'导入修改信息',buttonText:'导入'},{label:'批量导入',buttonText:'导入'}],"search": [ //查询条件{label:'团体保单号',dataType:'input',isRequired:true,placeholder:'请输入',value:''},{label:'证件类型',dataType:'select',isRequired:false,placeholder:'请选择',value:['军官证','身份证','居住证']},{label:'统计日期',dataType:'date',isRequired:false,placeholder:'请选择',value:'2015-10-11'},{label:'起止日期',dataType:'StartToEnd',isRequired:false,placeholder:['选择开始日期','选择结束如期'],value:['2017-02-11','2017-10-11']},{dataType:'button',value:'查询'},{dataType:'button',value:'重置'}],"info": [ //详情展示{label:'投保单位名称',val:'东风汽车有限公司'},{label:'团体保单号',val:'88681433942'},{label:'保险期间',val:'自2014-07-29 零时起 至 2015-07-28 二十四时 止'},{label:'保单状态',val:'承保'},{label:'总赔付金额',val:'1000元'},{label:'总赔付人数空',val:'10'}],"note": {val:'注:查询案件状态为回退修改时,请按照回退意见补充或修改申请材料后再提交,时效以最终同意受理日开始计算。',type:'normal'},  //提醒文字  类型:normal,warning,danger"table": [ //表格数据// {// "type": 1,// "thead": [],// "tbody": []// }{"type": 1,"thead": ['t1','t2','t3'],"tbody": [[{"type": 1,"icon": "","nodes": ['c1']},{"type": 2,"icon": "","nodes": ['c2']},{"type": 1,"icon": "","nodes": ['c3']}]]},{"type": 2,"thead": ['d1','d2','d3'],"tbody": [[{"type": 1,"icon": "","nodes": ['a1']},{"type": 2,"icon": "","nodes": ['a2']},{"type": 1,"icon": "","nodes": ['a3']}]]}],"pagination": {type:'simple'}, //分页以及类型"button": [ //按钮与类型{type:'dafult',buttonText:'上一步'},{type:'warning',buttonText:'确认加入'},{type:'primary',buttonText:'返回'},{type:'info',buttonText:'上一步'}]
}

3. 功能拆分 实现的思路是父组件存储所有数据,展示元素引用子组件,每个组件除展示外,要配套一个弹框来修改数据,点击确定后将数据提交给父组件,这样团队也可以多人开发,父组件只是负责存储和展示数据,灵活度高。

目录结构图,pages内放置要的主编辑页面,base内方放置子组件。


例:提示组件代码与预览


<template>
<div v-show="getjson != ''"><h3>提示信息内容编辑</h3><!-- 表格显示部分 --><div style="font-family:'新宋体'; font-size:12px; margin:0px 29px;  height:30px;line-height:30px;padding:10px 0px; color: #666; ">{{getjson.val}}</div><!-- 操作按钮 --><div class="controlbox"><el-button type="primary" icon="el-icon-edit" circle @click="msgBoxShow = true"></el-button><el-button type="danger" icon="el-icon-delete" @click="deleteSelf" circle></el-button></div><!-- 弹窗 --><el-dialog title="提示信息内容编辑" :visible.sync="msgBoxShow" center :show-close='false'><el-inputtype="textarea":autosize="{ minRows: 2, maxRows: 4}"placeholder="请输入内容"v-model="getjson.val"></el-input><el-select v-model="getjson.type" placeholder="请选择"><el-optionv-for="item in noteType":key="item.type":label="item.name":value="item.type"></el-option></el-select><div slot="footer" class="dialog-footer"><el-button @click="msgBoxShow = false">取 消</el-button><el-button type="primary" @click="commit">确 定</el-button></div></el-dialog></div>
</template>
<script>export default {name:"msgBox",props:['noteData'],data() {return {getjson:this.noteData,msgBoxShow: false,noteType:[{type:'normal',name:'灰色:普通消息'},{type:'warning',name:'橙色:次重要消息'},{type:'danger',name:'红色:重要消息'}],formLabelWidth: '120px',};},methods:{commit() {this.msgBoxShow = false;this.$emit('noteConfig', this.getjson)},deleteSelf(){this.getjson='';this.$emit('noteConfig', this.getjson)}}}
</script>

4. 功能流程确定

  1. 选择要展示组件
  2. 确定表格类型
  3. 编辑各个组件数据
  4. 预览
  5. 导出html文件(暂未制作)

总结

在表单和表格的生成工具开发过程中,我们都是先实现功能,然后再反过来整理页面的sass文件,像字段最长最短个数影响展示样式这样的问题都是等功能都实现了才发现有问题,导致返工和修改,后续开发顺序最好如下:

  1. 视觉规范整理
  2. 组件状态与字段规则整理
  3. html scss组件、页面测试 组件文档编写
  4. 开发页面生成工具

启发与后续

目前页面很丑,功能上也有很多bug,但是思路是可行的,而且开发难度也不是很高,效率与质量有保证,后续希望使用Node mongoDB Vue全栈开发出常用页面类型生成工具,借鉴资料百度FEX的吴多益大神的PPT,不过百度的产品并没有开源,商业化了,



Ant Design框架页面是按照 功能=>模板=>组件 来划分的,


具体实现思路还要整理清晰,以方便展开下步工作,如果你愿意和我们一起完成,或者有更好的思路,欢迎一起讨论.

奔3了,时日不多,要加紧努力了。

才疏学浅,如有问题恳请斧正。

记表格设计规范整理与页面可视化生成工具开发相关推荐

  1. 页面可视化搭建工具前生今世

    原文地址: https://github.com/CntChen/cn... 背景 引子 页面可视化搭建, 是一个历久弥新的话题. 更广义上讲, 页面是 GUI 的一部分, GUI 的拖拉生成在各种开 ...

  2. 页面可视化搭建工具前生今世 1

    引子 页面可视化搭建, 是一个历久弥新的话题. 更广义上讲, 页面是 GUI 的一部分, GUI 的拖拉生成在各种开发工具上很常见, 如 Android Studio, Xcode, Visual S ...

  3. 页面可视化搭建工具技术要点

    背景 页面可视化搭建工具, 是互联网公司中常见的运营工具, 实现了运营人员快速生成和发布页面, 提升页面上线效率; 且无需开发人员介入, 节省开发人力. 页面可视化搭建工具搭建出的页面示例: 但从零开 ...

  4. 页面可视化搭建工具业界的轮子

    页面可视化搭建工具业界的轮子 无论大公司还是小公司,我们开发前端工程时候,项目工程又很多类似的功能或者页面,开发经常是加班加点搬砖去做一些无成长反复操作的工作,看键盘上 ctrle 键已经被磨掉了漆, ...

  5. 前端页面可视化设计工具

    (3条消息) [html]前端页面可视化设计工具总结_XYZ-CSDN博客_html可视化布局工具

  6. CSS border-radius 新玩法(含可视化生成工具)

    CSS border-radius 新玩法(含可视化生成工具) 原文:http://www.shejidaren.com/css-border-radius.html 这个 CSS 属性对于前端人员一 ...

  7. python 代码生成器 oc_iOS 移动端生成工具开发

    原标题:iOS 移动端生成工具开发 之前有写过一个python脚本的生成工具, 通过读取json文件进行代码的生成, 实际操作中部分使用者反映, json文件的可读性不是很好(明显是不熟悉json语法 ...

  8. iOS 移动端生成工具开发

    代码地址如下: http://www.demodashi.com/demo/11284.html 一.准备工作 编译环境 xcode 用于生成冗余架构代码, 实现生成零耦合架构 二.程序实现 上个月的 ...

  9. 【html】前端页面可视化设计工具总结

    在进行网站设计时,我们可以通过借助现有的html模板,在适当地修改后,变为适合需求的web界面.因此,对于一个后端的程序员来说,找到一个合适的html模板就变得非常重要. 目录 1. 源码之家 2. ...

最新文章

  1. Java多线程复习:2(线程的创建和使用)
  2. java投票锁_Java并发编程锁之独占公平锁与非公平锁比较
  3. 犯罪心理解读Mybatis拦截器
  4. 【Java 排序】重写Compare方法,实现自己定义排序
  5. Mybatis入门程序
  6. 用深度神经网络修复H漫:看完这篇你就能眼中无码
  7. C++的构造函数总结
  8. linux 中rpc 服务器,实现Linux环境下编程RPC通信之个人经验总结(转)
  9. 为什么需要注册中心?是用 Eureka 还是 Nacos?
  10. cni k8s 插件安装_实现K8S中Pod带宽限制
  11. 为VSCode 设置好看的字体:Operator Mono
  12. win10安装VS2015
  13. Matlab App Designer自学笔记(三):利息计算器案例
  14. SDUT-程序设计基础-实验1-顺序结构
  15. DOM初探(17)——查看元素的尺寸与位置
  16. matlab坐标值旋转平移
  17. NOI 2016 游记
  18. win10下php连接不了access,win10无法连接到这个网络怎么解决
  19. 数学成绩英语成绩c语言,用链表输入一个正整数n,再输入n 个学生的学号和数学,英语,C语言成绩,要求...
  20. 【Matlab】系统的响应分析

热门文章

  1. 模拟电路概念知识体系梳理(基础部分)
  2. Atom使用方法(快捷键,插件,汉化)
  3. 计算机管理ap,如何设置AC功能管理无线AP
  4. NOIP模拟测试49·50「养花·折射·画作·施工·蔬菜·联盟」
  5. python基础——错误处理
  6. 有效运维的 on-call 机制
  7. ActionBar之style出现Cannot resolve symbol 'Theme' 错误
  8. Apache Nutch 1.6 发布
  9. JQuery 样式设置、追加、移除与切换
  10. 重启IIS和SqlServer的命令行