2021-01-19 解决工作中单据列表展示页重复造轮子

最近公司要求将pc端erp软件的大部分功能移植到手机端,并打包成app。毕竟现在手机已经成了人们必不可少的工具之一,开发手机端的erp软件已经是趋势。手机端可以帮助客户解决时间和空间的限制,提高工作效率,从而将我们的产品更好的融入到客户的工作中。

       在开发的过程中,会发现有一些页面整体有着极大的相似度。如果每次做一个这页面,都要重新写布局的话,会特别的繁琐,而且由于不是一个人开发,在像素的控制以及布局习惯上,可能就会造成明明是相同的页面,但是看起来却各不相同,总是有一些细微的差别。而且,后期维护的时候,还会特别麻烦。

所以,为了避免重复造轮子,也为了能够提高自己的工作效率。秉持习大大要学会“想着懒”的思想,我决定将这个页面封装一下。将基础的布局和可能会用到的功能全部封装里面,并将接口抛出,以处理各个页面可能会存在的各种处理逻辑。

说做就做,首先我分析了一下这些页面的相似点和不同点,以便处理公用布局和个别页面会用到的布局。

相同点:

            1.头部:都有NavBar导航栏以及搜索框。

            2.身体:都是一条条的单据。

            3.脚:底部按钮。

不同点:

            1.导航栏title,搜索框关键字。

解决方案:父组件向子组件传值控制。

            2.是否需要操作按钮、审核标识。

解决方案:操作按钮使用vant组件弹出层,因此需要用到父子组件数据双向绑定控制弹出层。

审核标识 是根据后端数据判断,需要给动态key值。

            3.单据展示行数不同以及单据的展示内容不同。

解决方案:通过具名slot插槽实现,将内容放到父组件中。子组件中做好布局,父组件只填充内容。slot插槽除了占位还要传递参数,这里就用到了作用域插槽,父组件slote-scope负责接收参数。

在之前的工作中,我们已经将导航栏、搜索框封装成了一个组件,底部的按钮也封装成了一个组件。那么,现在只需要考虑身体的部分,即单据列表的展示。


通过上面三个图,可以知道公司的单条合同以及单据的布局是2行或者3行,且里面内容不一致。其次,个别页面底部没有Button,因此,内容盒子的最大高度需要根据场景去动态改变。

另外,管理单据按钮以及审核标识也是在不同场景下展示,也需要动态控制。

同时,需要考虑,客户的单据量是非常庞大的,一次性加载肯定会非常耗时,需要加上分页懒加载(分页懒加载使用vant组件,加载控制变量需要双向绑定)。

但是vue 父子组件传递是单项数据流。因此需要用到.sync实现父子组件数据双向绑定。同时,用了.sync后,子组件数据只能更新一次,需要监听数据,并手动赋值更新。



html代码:

props:

methods:

对于方法中的一些事件,要将逻辑抛出,到父组件去执行逻辑,可以提高组件的复用性。

watch:


本次组件的封装,学习了作用域插槽、父子组件的双向绑定。同时,对于相同布局、特定布局的问题,有了一些其他的思考。即:scoped的使用。项目开始前,能够做好合理的规划,合理使用scoped,也可以在一定程度上节省css代码。不过,做一个时间跨度较长的产品,自己做相同的布局都有可能会有差异,更不用说是和同事一起去做。不仅仅html布局有差异,css,js逻辑也会因编码习惯而不同。

因此,通过这次组件的封装,可以至少提高我在后面的工作效率。

后续:

        因为这类页面是固定的导航栏+搜索框+单据内容+按钮的,所以我是将所有的内容都封装在了一起的。

这样一来可复用性程度降低了,不过应该是可以提高我自己的工作效率的。

快就完事了!

本次封装如果有什么不足,还希望大佬给意见继续优化!

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

友情链接更多精彩内容