企业内部钉钉H5微应用(免登录)Spring Boot项目实战

前言

  公司内部某部门需要做一个在线评分的企业内部H5微应用(免登录),于是项目经理就交给我接手这个项目,简单的说了一下业务需求,经理交代我:页面做的好看点。作为一个后端开发人员,这次从UI页面到数据库设计到前端页面、后端项目都让我一个人来搞,周二下午和我说的,下周一就要用,算上周六周日也才5天时间,记得最晚睡的一晚是调自适应H5页面的CSS样式到凌晨2点半,最后也算是圆满完成任务了。这是部门第一次做钉钉内部H5微应用,都没有接触过,我也查了很多这方面的博客,还是遇到了很多坑,趁此机会,把整个开放过程和遇到的坑记录一下,希望能帮助到需要的朋友~~~
  此微应用的部分功能:
    1、企业内部员工免登录直接使用,可以给需要考核的员工打分使用
    2、输入分数为1~100,0和字符串都输入不进去,当分数超过100的时候,自动变为最大值100
    3、分数为空时,自动提示,input框获取焦点后,自动消失
    4、未给所有员工考核打分的评分人员中途退出后,下次登录时候可以自动定位到上传评分退出时的位置
    5、点击【上一步】可以查看已经打过分的员工的分数,点击【下一步】自动提交,提交后input框自动变成只读模式,只能查看,不能修改分数
    6、完全评价完毕后,会有弹框提示,指定管理员可以查看所有未考核完毕的人员名单


一、准备工作

1.开发前准备:

  (1)、需要自备一个钉钉企业(自己创建一个),测试应用无所谓认证不认证,发布的时候相关限制请参阅说明文档;
  (2)、关于服务器,有公网服务器最好,没有的话需要 内网穿透工具,调试的时候,由于钉钉的H5微应用调试只能“真机”调试,极其恶心,所以极其建议调试的时候使用内网穿透工具;推荐一个工具:uTools。这是国产的一款软件,功能非常强大,内网穿透更是简单,支持穿透精确到端口号,看下图:
在这里插入图片描述

2.钉钉微应用的免登流程:

在这里插入图片描述

二、开放过程

1.新建企业号

  钉钉APP上面创建企业团队即可,登录钉钉开放平台后,会看到自己刚刚创建企业的企业ID:
在这里插入图片描述

2.创建H5微应用

在这里插入图片描述
加粗样式

3.项目编码

  (一)引入钉钉官网提供的sdk
在这里插入图片描述`
  (二)pom.xml中引入lib中钉钉的sdk-jar包

 <!--钉钉工具包-->
        <dependency>
            <groupId>com.taobao.top</groupId>
            <artifactId>top-api-sdk-java</artifactId>
            <version>1.0</version>
            <scope>system</scope>
            <systemPath>${project.basedir}/src/main/resources/lib/taobao-sdk-java-auto_1479188381469-20210113.jar</systemPath>
        </dependency>

  (三)spring boot项目配置文件中写入上方已经生成过的四个参数
在这里插入图片描述
  (四)项目前端登录页面
    本教程重在说明钉钉微应用的免登流程,所以前端部分使用原生的, 最简单的 js, 仅供参考;
    我这里选择的是钉钉开放平台上的第二种引入方式,即直接引入js文件(不推荐,原因请看钉钉开发文档)
  login.html

<!DOCTYPE html>
<html lang="en" xmlns:th="http://www.thymeleaf.org">
<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width,initial-scale=1,minimum-scale=1,maximum-scale=1,user-scalable=no"/>
  <link type="text/css" rel="stylesheet" href="./css/main.css">
  <title>你准备好了吗?</title>
</head>
<script src=".././static/js/jquery.js" type="text/javascript"></script>
<script src="https://g.alicdn.com/dingding/dingtalk-jsapi/2.10.3/dingtalk.open.js"></script>

<body id="login">
<div class="app-container-login">
  <img class="logo" src="./image/nlogo.svg">
  <img class="reba" src="./image/login_best.png">
  <img class="img3" src="./image/login_3.png">
  <img class="img" src="./image/login_2.png"/>
  <form action="/index" id="myForm" name="myForm" method="post">
    <input type="hidden" name="authCode" value="" id="code">
    <button class="login_button" type="submit">开始评分</button>
  </form>
</div>
</body>
<script>
  var code;
  window.onload = function () {
    if (dd.env.platform != 'notInDingTalk') {
      dd.ready(() => {
        dd.runtime.permission.requestAuthCode({corpId: 'dingae060288e3b3d1cea39a90f97fcb1e09'}).then((result) => {
          code = result.code;
        }).catch(err => {
          console.log(err);
        }).finally(() => {
          document.getElementById("code").setAttribute("value", code)
        })
      });
    } else {
      console.warn('请在钉钉中访问本应用!');
    }
  }
</script>
</html>

  (五)页面中引入静态资源
    请看下面我项目的静态资源结构目录:
在这里插入图片描述
  按照正常项目页面中引入css或者图片,应该写成:

<link type="text/css" rel="stylesheet" href=".././static/css/main.css">
 <img class="reba" src=".././static/image/login_best.png">

  但是这样写钉钉中打开微应用的时候会找不到资源,只能写成下方这种形式

<link type="text/css" rel="stylesheet" href="./css/main.css">
 <img class="reba" src="./image/login_best.png">

  这一点巨坑,千万注意,至于为什么会这样,我目前还没找到答案,钉钉官网上面也没有,知道原因的朋友可以下方评论一下~
  (六)Controller层

 /**
     * @Description:点击开始评分的时候获取当前用户的userID
     */
    @PostMapping("/index")
    public String login(@RequestParam("authCode") String authCode, Model model) {
        //  获取accessToken
        String accessToken = tokenService.getAccessToken();
        //  获取用户的userId
        String userInfo = tokenService.getUserInfo(authCode, accessToken);
        //  获取钉钉用户id,name,头像url地址,地址没有返回null
        UserDTO user = tokenService.getUser(accessToken, userInfo);
        //  获取所有参与评选的用户
        // 记录表中该钉钉用户提交的最后一条staffId
        // 查询评价的员工最后一条staffId
        User staff = null;
        Integer staffId = null;
        Integer lastStaffId = userService.selectLastId();
//        获取所有问题
        List<Subject> subjects = subjectService.list();
        Integer count = recordService.selCountByUserName(user.getName());
        if (count == 1) {
            managerService.updateByName(user.getName());
            model.addAttribute("status", 1);
            staff = userService.selectNext(0);
        }else {
            staffId = recordService.getLastStaffId(user.getUserId());
            model.addAttribute("status", 0);
            staff = userService.selectNext(staffId==null?0:staffId);
        }
        // 钉钉用户信息
        model.addAttribute("user", user);
        // 被评选所有人
        model.addAttribute("staff", staff);
        model.addAttribute("lastStaffId", lastStaffId);
        // 所有的题目
        model.addAttribute("subjectlist", subjects); 
        return "main";
    }

  注意:其中的tokenService类中代码是钉钉提供的demo中的,可以直接复制粘贴过来用~

三、微应用配置

在这里插入图片描述

四、启动项目后即可访问,应用截图

在这里插入图片描述
补充:回退事件,即左滑手机可以直接退出该微应用:在对应的页面中添加下方js代码即可

/** 回退事件 **/
  dd.ready(function () {
    document.addEventListener('backbutton', function (e) {
      // 在这里处理你的业务逻辑
      e.preventDefault();
      dd.biz.navigation.close({
        onSuccess: function (result) {
        },
        onFail: function (err) {
        }
      })
    });
  });

总结

  成为一个小胖子,没事摸摸小肚子~

  • 7
    点赞
  • 29
    收藏
    觉得还不错? 一键收藏
  • 5
    评论
针对Vue项目钉钉H5应用在安卓手机进入无反应的问题,可能有以下几个原因: 1. 引入的库和组件不兼容:Vue项目中可能使用了一些在安卓手机上不兼容的库或组件,导致应用无法正常加载。解决办法是检查使用的库和组件是否与钉钉H5应用的环境兼容,并根据情况进行替换或升级。 2. 网络请求问题:如果应用需要发送网络请求获取数据,在安卓手机上可能会受到网络环境或权限的限制,导致无法获取数据或加载延迟。解决办法是检查网络请求的代码和权限设置,确保在安卓手机上能正常发送请求和获取数据。 3. 页面加载问题:在安卓手机上,由于硬件和软件的差异,页面加载速度可能较慢或出现卡顿现象。这可能导致应用进入页面时没有及时响应,给用户一种无反应的感觉。解决办法是优化页面加载速度,减少不必要的资源加载和渲染,确保应用在安卓手机上能够快速加载并响应用户操作。 4. 其他问题:除了上述原因外,还有其他可能导致无反应的问题,例如应用的脚本错误、钉钉H5应用的配置问题等。解决办法是通过调试工具或查看日志,找到具体的错误信息并逐个排查解决。 总结来说,解决Vue项目钉钉H5应用在安卓手机进入无反应的问题,需要深入分析具体原因,并根据不同原因采取相应的解决措施。从兼容性、网络请求、页面加载等方面入手,进行问题排查和优化,以确保应用能在安卓手机上正常运行。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值