应用开发
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
访问如下地址: