拯救老项目-表单暂存与还原

301f6fd9b8c4f3f3512ba47bef88a26f.png

背景

最近接到一个需求,公司内部的 OA 系统(后端人员基于 jQuery 开发),需要给所有的表单增加暂存与还原功能。具体来说就是对于系统内的任何表单,都增加一个暂存按钮,用户填写到一半,点击暂存可以保存起来。下次再打开时,点击还原,可以恢复到之前编辑的样子,继续编辑。

听完这个需求,眉头不由的一锁,心想这能实现吗?不过好在 PM 说这个不紧急,可以调研下,于是对这个需求进行了些许分析。

可行性分析

如果是 ReactVue 的项目,基于数据驱动视图,那么还是比较好实现的,只需保存好当前状态下的数据就行。但对于这种传统老项目,非数据驱动模式,存在通用的解决办法么。。

分场景考虑

既然咋一看没啥思路,那么就对最简单和最复杂的场景分别分析了下

  1. 最简单场景页面都是静态表单情况。这种情况一想便知可以实现,只需保存好当前表单的所有数据,恢复时再赋值给对应的表单元素即可。

  2. 最复杂的场景想象一下,对于表单来说,最复杂的情况无非是包含下列几种场景

  • 表单数据之间存在联动关系,最常见的 Select 多级联动

  • 表单可以被动态增加,比如提交一个报销单,可以添加多条报销明细

  • 表单数据会影响页面的信息展示,比如某个银行卡的输入框,输入完后,页面其他部分会展示一个格式化后的银行卡号

这么一分析后觉得,这肯定实现不了。就说表单动态添加这一项,怎么样能做到 100%还原呢?
去网上搜索了一些开源方案,比如 https://github.com/simsalabim/sisyphus/,发现都是针对上述简单场景的还原,看来对于复杂的场景,确实没有通用的方法。

解决特定场景问题

静下来思考了下,虽然对于最复杂的场景没有好办法,但目前 OA 系统中遇到的场景复杂度,是略低于最复杂场景的。那么能不能做到尽可能覆盖更多的场景,对于实在无法暂存还原的,进行单独处理呢?

方案思考

首先对问题进行了抽象,复杂场景和简单场景最大的区别就是DOM 结构产生了变化,那么如果能还原出 DOM 结构,再把数据进行赋值,那不就可以了。

方案目标

基于上述思考,重新理了下方案的目标

  1. 还原所有表单的 HTML,包括动态加载部分

  2. 还原数据

  3. 还原非表单部分的展示性 HTML

实现思路

方案的难点在于如何还原表单的 HTML,思索一番产生一个想法,能否通过还原用户行为来还原表单
这个办法理论上是可行的,同样的用户行为,在同一个系统的不同的时刻执行一遍,执行的结果大概率是一样的。并且暂存与还原的操作之间,并不会相隔太久

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Java 后端获取 openID 是指在 Java 后端代码中获取用户微信公众号或小程序的 openID,以便后续进行用户信息的判断和业务逻辑的处理。下面我们一起看看具体的实现过程。 1. 授权获取 code 用户在微信公众号或小程序中点击登录按钮后,会跳转到微信的授权页面。我们需要在 Java 后端代码中,通过构造微信授权链接,将用户引导到该页面。 授权链接示例:https://open.weixin.qq.com/connect/oauth2/authorize?appid=APPID&redirect_uri=REDIRECT_URI&response_type=code&scope=snsapi_base&state=STATE#wechat_redirect 参数说明: - appid:微信公众号或小程序的 appid - redirect_uri:回调地址,即用户在授权后跳转的链接 - response_type:授权类型,固定填写 code - scope:授权范围,snsapi_base 表示只获取用户的 openID - state:用于登录验证等操作,可以为空 - #wechat_redirect:固定的参数,表示要进行授权操作 2. 获取 access_token 获取 code 后,我们需要在 Java 后端代码中使用该 code 去换取 access_token,从而获取用户的 openID。 获取 access_token 的请求示例:https://api.weixin.qq.com/sns/oauth2/access_token?appid=APPID&secret=SECRET&code=CODE&grant_type=authorization_code 参数说明: - appid:微信公众号或小程序的 appid - secret:应用的 app secret,推荐通过配置文件等方式进行安全保护 - code:授权码,即用户同意授权后获取到的 code - grant_type:固定填写 authorization_code 3. 解析 openID 获取 access_token 后,我们就可以通过 API 获取用户的基本信息,其中包括用户的 openID。 通过 access_token 获取用户信息的请求示例:https://api.weixin.qq.com/sns/userinfo?access_token=ACCESS_TOKEN&openid=OPENID&lang=zh_CN 参数说明: - access_token:获取到的访问令牌 - openid:用户的 openID - lang:语言版本,可为空,zh_CN 表示简体中文 以上就是 Java 后端获取 openID 的详细操作流程。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值