移动端
栖梧带有一个给员工用的手机端,下面简称移动端。员工可以在手机上登录、查看待办、处理审批、看消息和公告。
移动端用 uni-app 开发。uni-app 是一个用 Vue 写页面的框架,同一套代码可以编译成微信小程序和手机 App。所以移动端只有一套代码,同时支持微信小程序、安卓 App 和 iOS App。它连接的服务端和电脑端是同一个:账号、权限、流程和消息都是同一份数据。
移动端只面向员工。面向会员或客户的手机端不在模板里。
移动端是可选的:代码都在仓库根目录的 mobile/ 里,用不到时可以整个删掉,见只要电脑端。
现在的状态
已经实现:登录、工作台、审批(包括动态表单)、消息、我的、中英文、浅色和深色主题、实时推送、新待办微信提醒、App 更新检查,以及代码生成器生成的移动端页面。
自动测试包括:单元测试、45 个在 H5 页面上运行的端到端测试,以及小程序的构建和包体积检查。
还在进行的:在真机上逐项核对、用真实的 AppID 和模板发送微信订阅消息、上架应用商店、发布小程序。在 Windows 上打包 App 和上传小程序也还没有验证。正式上线前,请按移动端开发 · 发布清单逐项核对。
支持的平台
| 平台 | 用途 | 和其他平台不同的地方 |
|---|---|---|
| 微信小程序 | 正式发布 | 可以用微信登录;可以开启"新待办微信提醒";外观只能跟随系统;附件从微信聊天记录里选 |
| 安卓 App、iOS App | 正式发布 | 每次启动检查一次更新;可以在"我的"页切换外观;附件只能选图片(拍照或从相册选) |
| H5 | 只用于开发调试和自动测试,不作为正式发布的目标 | 不检查更新;附件用浏览器的文件选择框 |
H5 指在浏览器里打开的网页版。开发时可以先在电脑浏览器里调试,再到微信开发者工具和手机上看效果,见移动端开发 · 在浏览器里调试(H5)。
登录

打开移动端先进入登录页。这台手机上已经登录过、登录还没过期时,直接进入工作台。
- 两种方式:密码登录和短信登录,规则和电脑端相同,见登录与账号 · 登录方式;
- 验证码:和电脑端一样,按参数
captcha.mode弹出滑块或图形验证码,关闭时不弹,见登录与账号 · 验证码。点"获取验证码"发短信之前,也按这个参数先做验证;发出后按钮显示"N 秒后重发"的倒计时; - 记住用户名:只在这台手机上记住用户名,从不保存密码;
- 保持登录:移动端的登录总是"保持登录",从登录起最长 7 天,到期后要重新登录。在 系统监控 → 在线用户 里,这类登录的客户端显示为"手机";
- 必须先改密码:账号还在用初始密码或者密码已经过期时,登录后只能停在修改密码页。页面上会说明原因,也可以退出登录。改完密码才能进入工作台;
- 没有注册和找回密码:需要时到电脑端操作;
- 页脚:左边切换语言,右边是版本号、隐私政策和用户协议。
发布前换掉隐私政策和用户协议
登录页的隐私政策和用户协议目前打开的是"关于"页。正式发布前,要换成你自己网站上的隐私政策和用户协议页面。应用商店和小程序审核都会检查。
在微信小程序里登录
这一项只在微信小程序里有,默认关闭:
- 打开小程序时,如果还没有登录,先在后台自动用微信登录,用户不用操作;
- 这个微信已经绑定了员工账号时,直接进入工作台;
- 还没有绑定时,进入绑定微信页。用账号密码或短信验证码登录一次(按钮是绑定并登录),就完成了绑定,以后打开就能直接进入。
退出登录后,这次打开期间不会再自动用微信登录,要等下次打开小程序。启用步骤和绑定规则见登录与账号 · 微信小程序登录。
底部的四个页签
登录后,屏幕底部有四个页签:工作台、审批、消息、我的。
"审批"和"消息"上有角标,分别显示待办数和未读消息数,超过 99 时显示"99+"。工作台上的数字和这两个角标是同一份数据。每次切换页签、从别的页面返回、应用回到前台时,都会重新读取一次。
工作台

- 顶部:问候"你好,显示名",下面是"部门 · 角色";
- 三个数字:待办、审批中(我发起的、还没结束的流程)、未读消息。点前两个进入"审批"页签,点未读消息进入"消息"页签;
- 常用功能:发起审批、请假、公告。请假只对有请假"新增"权限(
biz.leave.create)的人显示; - 待我审批:最新的 3 条待办,点一条进入审批详情,点 全部 进入"审批"页签。没有待办时显示"待办都处理完了"。
常用功能里的入口可以按项目需要增加,见移动端开发 · 加一个入口。
审批

手机上的审批和电脑端用的是同一套流程:在电脑端设计、发布的流程,员工可以在手机上发起、处理和查看。审批动作的含义见工作流 · 审批动作。
审批列表
"审批"页签顶部可以切换四个列表:待办、已办、我发起的、抄送我的。
- 只列出和自己有关的记录;
- 下拉刷新,滑到底部自动加载下一页;
- 除了这四个列表,没有其他筛选条件;
- 待办为空时显示"待办都处理完了"和 查看已办 按钮。
审批详情
点一条记录进入审批详情:

- 顶部:流程名、流程状态、"某某 发起于 某时间"。轮到你处理时,还显示"待你处理 · 节点名";
- 表单:申请的内容。动态表单直接显示在这里,见手机上的动态表单;
- 审批记录:每一步谁在什么时候做了什么。
手机上不显示流程进度(没有进度树,也没有流程图)。能打开详情的人和电脑端一样:发起人、办理人、抄送人,以及有权限的管理员,其他人打不开。打开一条未读的抄送时,这条抄送会自动标为已读。
审批操作
轮到你审批时,底部直接显示 通过 和 驳回,其他操作在 更多 里:
- 退回、转办、委派、加签(分前加签和后加签)、抄送、评论;
- 按情况还会出现:减签、撤回、催办、重新提交、撤销;
- 别人委派给你的任务、或者加签给你的任务,只能通过、抄送和评论。
几条规则:
- 退回时,从已经经过的节点里选一个,最后一个选项是发起人;
- 节点设置了必须填写意见时,通过和驳回都要填意见。意见最多 1000 字;
- 催办每小时只能一次,太频繁时提示"每小时只能催办一次,请稍后再试";
- 提交期间按钮显示加载状态,不能重复点击。
发起审批
在 工作台 → 发起审批 里,列出你可以发起的流程,按"流程分类"字典分组。
- 用动态表单的流程:有表单的,进入表单页填写后发起;没有表单的,在底部弹出的面板里发起。流程里有"发起人自选"的节点时,要给每个这样的节点至少选一个人(审批人或抄送人);
- 用业务表单的流程:要有专门的手机页面才能在手机上发起和查看。模板只为请假做了手机页面。其他业务表单的流程,发起时提示"该流程请在电脑端发起",详情里的表单显示"请在电脑端查看",但仍然可以通过、驳回。
动态表单和业务表单的区别见工作流 · 两种表单。为别的业务表单做手机页面,见移动端开发 · 让流程在手机上发起和查看。
请假
工作台 → 请假 打开请假单。要填写请假类型、开始时间、结束时间、请假天数(可以填半天)和请假事由,检查规则和电脑端相同。点 提交审批 保存并发起流程。
被退回给你时,在审批详情里点 重新提交:有请假"修改"权限(biz.leave.modify)的人会打开请假单,改完再提交;没有这个权限的人不改内容,直接重新提交。也可以点 撤销,结束这次申请。
手机上的动态表单

动态表单(在表单设计器里设计、绑定到流程的表单)也能在手机上填写和查看:
- 表单设计器里能用的组件,手机上都能显示,包括业务组件(人员选择、部门选择、字典选择、附件、地区选择)和计算组件(天数(自动计算)、明细表),见表单设计器 · 可以用的组件;
- 字段按你所在节点的权限显示:隐藏的看不到,"可编辑"的可以改,其余只读。通过和重新提交时只提交"可编辑"的字段;
- 自动计算的值(天数、明细合计)只用来显示,以服务端重新计算的结果为准;
- 少数组件在手机上没法填写,这些字段只读,并提示"请在电脑端填写"。整张表单显示不出来时,提示"该表单无法在手机上显示,请在电脑端发起"。
哪些组件只读、哪些校验规则手机上不检查,见工作流 · 手机上的动态表单。
附件
- 一个一个地上传到服务端。大小上限按表单里这个字段的设置,没有设置时跟随参数
storage.max_size_mb。上传之前,先在手机上检查个数和大小; - 选文件的方式因平台而不同:微信小程序从微信聊天记录里选,App 只能选图片(拍照或从相册选),H5 用浏览器的文件选择框;
- 已经上传的附件只显示文件名和大小,在手机上不能打开或下载,要到电脑端查看。
选人和选部门
转办、委派、加签、抄送和发起时选人,都从底部弹出一个选人面板:列出所有启用的用户,可以按姓名搜索,多选时确定按钮显示已选人数。选部门也是底部弹出的面板,任何一级部门都可以选。
消息

"消息"页签:
- 顶部:显示有几条未读,比如"3 条未读";
- 公告:最上面一个入口,显示最新一条公告的标题和未读角标。点进去是公告列表,和电脑端顶栏的铃铛一样,只列最新的 5 条;
- 站内信:下面是发给我的站内信,每条前面的图标区分"业务"和"系统"两类。可以下拉刷新、滑到底部加载更多,也可以 全部已读;
- 点一条站内信进入消息详情,同时标为已读。站内信是纯文本,保留换行;公告详情显示保存时已经清洗过的富文本。
公告在电脑端的 系统管理 → 消息中心 → 通知公告 里发布,站内信由系统的各项功能发出,见消息中心。
我的
"我的"页签:

- 顶部:头像、显示名、用户名,以及部门和角色。点它进入个人资料;
- 个人资料:可以修改显示名、邮箱、性别,用户名、手机号、部门、角色、岗位只能看。手机号要在电脑端修改。点头像可以拍照或从相册选一张,服务端会把它裁成 256×256;
- 修改密码:填写旧密码、新密码和确认新密码,规则按服务端的密码策略。改完后,你在其他设备和浏览器上的登录立即失效,当前这台手机保持登录;微信小程序的绑定也会解除,下次打开小程序要重新绑定;
- 新待办微信提醒:只在微信小程序里,并且满足条件时显示,见新待办微信提醒;
- 语言、外观(只有 App 和 H5 有),见主题与语言;
- 关于:显示标志、应用名、版本号、简介和许可证(MIT);
- 退出登录:确认"确定退出当前账号吗?"后退出;
- 最下面一行显示"栖梧 · 版本 x.y.z"。
实时推送
移动端在前台时,和服务端保持一条实时连接,规则和电脑端相同:
- 有新的审批待办或新的站内信时,角标和工作台上的数字立即更新;
- 被管理员强制下线时,回到登录页,提示"你已被管理员强制下线,请重新登录";
- 应用回到前台、打开底部任一页签时连接,并补读一次待办数和未读数;切到后台、登录、退出登录时断开;
- 连不上时(比如小程序没有配置 socket 合法域名),底部页签显示期间每 60 秒查询一次,角标最迟 60 秒内更新。
没有系统级的离线推送
应用切到后台就断开连接,所以 App 关闭或在后台时,手机通知栏不会收到提醒。这时还能收到的新待办提醒有:邮件(预置了新待办的邮件模板,需要配置好邮件账号、员工填了邮箱)、短信(要自己加新待办的短信模板),以及微信小程序的新待办微信提醒,见消息中心 · 哪些事件会发消息。
连接的细节见实时推送 · 移动端。
新待办微信提醒
在微信小程序里,有新的审批待办时,可以用微信的一次性订阅消息提醒审批人:提醒出现在微信的"服务通知"里,点开进入这条审批的详情。这项功能默认关闭。
- 员工要自己同意:在小程序 我的 页点 新待办微信提醒,在微信的弹窗里允许。允许后提示"已开启,下一条新待办将通过微信提醒你",否则提示"未开启微信提醒";
- 点一次只对应以后的一条提醒,想继续收就再点;
- 这一项只在微信小程序里显示,并且要满足:已经绑定微信、管理员打开了开关、配置了订阅模板。
启用步骤和模板配置见消息中心 · 微信订阅消息。
App 更新
只有安卓和 iOS 的 App 在每次启动时检查一次有没有新版本。H5 不检查;微信小程序由微信自己更新。
- 有新版本时弹出"发现新版本 1.2.0"这样的提示,正文是更新说明,按钮是 立即更新 和 稍后。强制更新时没有 稍后;
- 资源热更新包(只更新页面和脚本):在 App 里下载,显示"正在下载更新…",装好后自动重启;
- 整包(完整的安装包):安卓用浏览器打开下载地址(安装包或应用市场的链接),iOS 打开 App Store;
- 强制更新时,下载或安装失败、关掉提示、从浏览器或商店返回后,提示会再次弹出;
- 检查失败(比如没有网络)时什么都不提示,App 照常使用。
新版本在 系统管理 → App 版本 里登记,见系统管理 · App 版本。
主题与语言

主题:默认跟随手机系统的浅色或深色。App 和 H5 可以在 我的 → 外观 里选择跟随系统、浅色或深色,立即生效,只保存在这台手机上。微信小程序只能跟随系统,没有"外观"这一项。
语言:支持简体中文和 English。
- 第一次打开时:手机系统语言是英文就用 English,否则用简体中文。以后按你上次的选择;
- 切换后,界面文字、组件里的文字和系统弹窗(比如确认框、选择器)一起切换;
- 在 我的 → 语言 里切换,还会保存到你的账号,服务端发给你的消息和通知也随之改变;在登录页切换只改这台手机。
更多说明见国际化。
在后台需要配置什么
移动端的大部分功能开箱即用。下面这些要管理员在电脑端的后台配置,或者需要特定的权限:
| 想要的效果 | 在哪里配置 | 说明 |
|---|---|---|
| 短信登录 | 系统管理 → 消息中心 → 短信渠道、短信模板 | 和电脑端共用,见登录与账号 · 短信登录 |
| 选择验证码类型 | 系统管理 → 参数设置:captcha.mode | 和电脑端共用 |
| 微信小程序登录 | 服务端的 WX_MP_APPID、WX_MP_SECRET,加上 系统管理 → 参数设置:auth.wx_mp.enabled | 只有超级管理员能改这个开关,见登录与账号 · 微信小程序登录 |
| 新待办微信提醒 | 系统管理 → 参数设置:notify.wx_subscribe.enabled、notify.wx_subscribe.templates | 先要能用微信小程序登录,见消息中心 · 微信订阅消息 |
| App 更新提示 | 系统管理 → App 版本,加上 系统管理 → 参数设置:app.update.enabled、app.update.review_version | 见系统管理 · App 版本 |
| 手机上能发起哪些流程 | 流程审批 → 流程管理 → 模型管理 | 已发布、你可以发起的流程都会列出来,见工作流 |
| 工作台上的"请假" | 系统管理 → 角色管理:请假的"新增"权限(biz.leave.create) | 没有这个权限的人看不到这个入口 |
| 公告 | 系统管理 → 消息中心 → 通知公告 | 见消息中心 |
| 附件大小上限 | 系统管理 → 参数设置:storage.max_size_mb | 和电脑端共用。移动端每次启动读取一次,改了之后重新打开才生效 |
| 强制某个手机下线 | 系统监控 → 在线用户 | 客户端显示为"手机"的那一行 |
| 为自己的业务模块生成手机页面 | 系统工具 → 代码生成 的"生成信息"页签:移动端页面 | 见代码生成器 · 移动端页面 |
后台之外还要准备的
小程序和 App 要连上服务端,还需要:已备案的 HTTPS 域名、在微信公众平台登记服务器域名、构建时写好服务端的地址。这些是开发和发布时的工作,见移动端开发 · 发布清单。
另外,代码生成器的 9 个示例页已经登记在移动端里,没有入口,但会随小程序和 App 一起上线,第一次发布前要去掉,见代码生成器 · 移动端页面。
只要电脑端
不需要移动端时,删掉整个 mobile/ 目录就够了。根目录的脚本和检查里还有几处提到它,目录不存在时会自动跳过,想清理干净可以一并删掉。根目录的依赖锁定文件不用改,因为移动端本来就不在里面。删掉之后,代码生成器也不再生成移动端页面。具体步骤见移动端开发 · 只要电脑端:删除移动端。