应用开发
1. 下载页面流应用模版
页面流模版文件介绍:
pageflow-template- _vite_plugin/ # vite插件,模版内置,无需关心- config/ # profile配置文件、用于指定当前应用需要依赖的binding扩展,包括页面流指令定义- gs/ # GriffinScript实操编排代码- schema/ # 设备物模型文件- web/ # 前端页面文件- pages/ # 页面流指令对应页面,一个目录对应一个页面- xxx/ # 自定义的页面名称- index.jsx- index.less- index.html # 页面流应用前端资源入口文件- index.jsx # 页面流前端资源jsx文件,用于加载页面流运行时和页面组件加载- .gsignore # 打包工具排除文件定义- package.json # node打包工具依赖文件,前端组件版本管理- pageflow.prog # GriffinScript应用入口文件,用于定义GriffinScript应用依赖的配置- vite.config.js # vite打包工具依赖文件,模版内置无需关心
2. 搭建实操页面
实操页面创建在web/pages目录下
- web/ # 前端页面文件- pages/ # 页面流指令对应页面,一个目录对应一个页面- xxx/ # 自定义的页面名称- index.jsx # 页面组件- index.less # 页面样式
import React from "react";import "./index.less";/*** 标准 React 组件* @param data any gs指令下发的数据* @param onNext 把数据回传给GS的的方法 onNext(any)* @param onCallback 直接调用gs中的一个全局方法 onCallback(functionName, data)* @param isActive 当前页面是否在激活状态,如果弹出 overlay 的页面,isActive 会变成 false* @return React.Element*/export default function (props) {const { data, onNext, onCallback, isActive } = props;return <div><h1>{data.title}</h1><br /><div><button onClick={()=>{ onNext("next") }} data-click="btn1" >Click to next</button> <br/><button onClick={()=>{ onCallback("onCallbackFunc", {a:1}) }}>Click call gs function</button></div></div>;}
模板组件文档
PDA实操组件:http://page-pre.cainiao.com/lemo/android-pda-components/index.html
PC实操组件:https://page.cainiao.com/lemo/op-components/index.html
3. 在profile文件里定义页面流指令
在自定义页面部分,根据你在步骤2中创建的页面自定义页面流指令
<service name = "pageFlow" class= "com.cainiao.loginx.edge.pageflow.FlowService"><!-- @cniot/pageflow 指令 start --><!-- 在浏览器输出一条日志,log会重置gs的启动点,线上环境请删除所有 log --><function name = "log" action="logic" page="/web/system/log" /><!-- 从新开始当前流程 --><function name = "restart" action="logic" page="/web/system/restart" /><!-- 获取宿主机信息 --><function name = "getLocalBusInfo" action="logic" page="/web/system/getLocalBusInfo" /><!-- 获取本地驱动设备列表 --><function name = "getLocalDeviceList" action="logic" page="/web/system/getLocalDeviceList" /><!-- 快捷确认页面 --><function name = "confirm" action="overlay" page="/web/system/confirm" /><!-- 快捷弹窗页面 --><function name = "alert" action="overlay" page="/web/system/alert" /><!-- 输入弹窗 --><function name = "prompt" action="overlay" page="/web/system/prompt" /><!-- toast --><function name = "toast" action="toast" page="/web/system/toast" /><!-- 结束当前流程,前端页面会显示开始流程按钮 --><function name = "end" action="router" page="/web/system/end" /><!-- @cniot/pageflow 指令 end --><!-- 自定义页面 start --><function name = "scanContainer" action="router" page="/web/pages/scanContainer" /><!-- 自定义页面 end --></service>
4. 基于业务逻辑编写实操代码
function onCallbackFunc(payload){pageFlow.alert({title: '调用 gs fucntion 成功',message: '参数'+ JSON.stringify(payload),okText:"确认"})pageFlow.end()}pageFlow.scanContainer({title: 'Hello pageFlow',});pageFlow.scanContainer({// sys.tr 用于处理文案国际化title: sys.tr('第二个界面')});pageFlow.alert({title: 'alert title',message: 'alert message',okText:"确认"})const isConfirm = pageFlow.confirm({title: 'confirm title',message: 'confirm message',okText:"确认",cancelText:"取消"})if(String(isConfirm) === "false"){throw new Error("你点击了取消,抛出错误可以使前端不断重试当前步骤");}pageFlow.prompt({title: "点击取消测试 thorw error",okText:"确认",cancelText:"取消"});pageFlow.toast({title: 'toast title',message: 'toast message',level:"success"})pageFlow.end()
应用部署
1. 在DevOps平台对应的行业线创建实操应用
张北环境地址:https://zb-devops.loginx.cainiao.com
2. 更新应用代码里package.json中griffinScript的应用信息
开发者只需要关心package.json中griffinScript的内容
projectName::填写步骤1中创建的项目名称
version:版本号,上传正式版本后需要升级
dev:本地开发相关参数
- group:开发资源组
- server: 本地开发访问的GS服务地址,默认访问本地,如果需要设备调度调试,可配置为预发地址
{
"griffinScript": {
"projectName": "pageflow-template",
"version": "0.0.0",
"dev": {
"group": "GS_DEMO_PRE",
"server": "http://localhost:7001"
}
}
}
3. IDE插件登录,本地将实操应用一键部署到预发环境
上传之前先执行编译命令
npm run build
本地开发调试
安装前端组件: tnpm install
编译前端组件: npm run build
本地运行: npm run dev
访问如下地址:
