光纤资源APP主要由以下几部分组成:
- 登录界面
- 选择项目界面
- 地图创建节点界面
- 填写详细信息界面
- 成端及端口表界面
- 接续及接续表界面
其中1、2、4界面不需要涉及到ht,故用原生界面即可实现,但是3、5、6涉及到ht,而ht在app中是不兼容的,所以此时需要借助webView来实现网页在app中的呈现。地图展现使用openlayers来渲染,节点展示使用ht来展示。节点的内部展示可以使用之前写的h5,这一部分不需要在开发。而成端及接续也需要使用ht来辅助开发。
关于APP中新功能的二次开发
考虑到后续若有开发者想要开发一些自主的功能的可能,故做一些约定的规范:
-
开发者若想将已有的网页页面嵌入app,且不需要app提供任何其他信息的,可使用app提供的专门的容器:webViewContainer。在app中增加一个事件,将事件的执行为路由跳转,传入需要承载的网页地址即可实现。如在登录界面下拥有找回密码和注册界面:
uni.navigateTo({url: `../../pages/webViewContainer/webViewContainer?url=https://www.nvisual.com/login/` }) uni.navigateTo({url: `../../pages/webViewContainer/webViewContainer?url=https://cloud.nvisual.com/forgetPassword.html` });
-
开发者若想将已有的网页页面嵌入app,且需要app提供其他信息的,或者需要同app进行通信的,这部分功能详见基于nVisual的app开发指南,但是为了更好的维护更新,或许可以遵循一些建议的规范
-
app向webView端发送消息时:消息内容应该是json类型的,消息主体包括type和data,其中type指明消息代表的类型,比如init代表初始化界面时传递的数据,event代表触发事件回调等等,如下示例:
// 初始化 const message = {type: 'init',data: {token: xxxx,refreshToken: xxxxx,user: xxx,power: xxx,} } // 事件回调 const message = {type: 'event',data: {type: 'xxxxxxxxxxxxxx', // 事件主体类型value: xxx, // 传递的数据,可以是任何类型} }// 在webview端就可以根据第一层的type判断是执行页面挂载还是其他监听,如果是event,在第二层的type就可以判断具体事件
-
webView向app端发送消息时:因为webView端向app端发送消息时不会涉及到初始化界面的问题,所以不必向之前那么复杂,只需要一层即可实现,type判断事件类型,value传递主体,如下:
const message = {type: 'xxxxxxxxxxxxxx', // 事件主体类型value: xxx, // 传递的数据,可以是任何类型 }
-
-
如果需要加入新的功能,且没有前置,最好还是使用app的原生来实现,webView的性能并不如原生渲染的好。目录结构展示如下:
components存放公共组件,controller存放公共方法,pages存放各页面,页面下放一个主体页面以及存放其他组件的components文件夹,rqeuset为请求,所有的api可以放在api文件夹下,static存放静态资源文件,store存放状态管理。