App-Android(使用App+htnl5框架,解决消息推送兼容SignalR问题)
loulijun2021
2022-10-20 8050665efc07f2666d803b14f01dfe07dc54da26
unpackage/cache/wgt/H5EDA0853/pages/xtsy/index.html
@@ -15,42 +15,272 @@
      <script src="../../js/vue.min.js"></script>
      <script src="../../js/vant.min.js"></script>
      <!-- <script type="text/javascript" src="../../js/jquery-1.6.4.min.js"></script> -->
      <!-- <script type="text/javascript" src="../../js/axios.min.js"></script> -->
      <!-- <script type="text/javascript" src="../../js/http.js"></script> -->
      <script type="text/javascript" src="../../js/jquery-1.6.4.min.js"></script>
      <script type="text/javascript" src="../../js/axios.min.js"></script>
      <script type="text/javascript" src="../../js/http.js"></script>
      <script type="text/javascript" src="../../js/global.js"></script>
       <script src="http://121.196.36.24:8001/Scripts/jquery-3.4.1.min.js"></script>
       <script src="http://121.196.36.24:8001/Scripts/jquery.signalR-2.2.2.min.js"></script>
       <script src="http://121.196.36.24:8001/SignalR/Hubs"></script>
      <link rel="stylesheet" href="../css/global.css" type="text/css" charset="utf-8" />
      <script type="text/javascript">
         var pushServer = "http://demo.dcloud.net.cn/push/?";
         var message = null;
         // 监听plusready事件
         document.addEventListener("plusready", function() {
            message = document.getElementById("message");
            // 监听点击消息事件
            plus.push.addEventListener("click", function(msg) {
               // 判断是从本地创建还是离线推送的消息
               switch (msg.payload) {
                  case "LocalMSG":
                     outSet("点击本地创建消息启动:");
                     break;
                  default:
                     outSet("点击离线推送消息启动:");
                     break;
               }
               // 提示点击的内容
               plus.nativeUI.alert(msg.content);
               // 处理其它数据
               logoutPushMsg(msg);
            }, false);
            // 监听在线消息事件
            plus.push.addEventListener("receive", function(msg) {
               if (msg.aps) { // Apple APNS message
                  outSet("接收到在线APNS消息:");
               } else {
                  outSet("接收到在线透传消息:");
               }
               logoutPushMsg(msg);
            }, false);
         }, false);
         /**
          * 日志输入推送消息内容
          */
         function logoutPushMsg(msg) {
            outLine("title: " + msg.title);
            outLine("content: " + msg.content);
            if (msg.payload) {
               if (typeof(msg.payload) == "string") {
                  outLine("payload(String): " + msg.payload);
               } else {
                  outLine("payload(JSON): " + JSON.stringify(msg.payload));
               }
            } else {
               outLine("payload: undefined");
            }
            if (msg.aps) {
               outLine("aps: " + JSON.stringify(msg.aps));
            }
         }
         /**
          * 获取本地推送标识信息
          */
         function getPushInfo() {
            outSet("获取客户端推送标识信息:");
            plus.push.getClientInfoAsync(function(info) {
               outLine('Success');
               outLine(JSON.stringify(info));
            }, function(e) {
               outLine('Failed');
               outLine(JSON.stringify(e));
            });
         }
         /**
          * 本地创建一条推动消息
          */
         function createLocalPushMsg(msg) {
            var cont = $('#cont').val();
            var options = {
               cover: false
            };
            plus.push.createMessage(msg, "LocalMSG", options);
            outSet("创建本地消息成功!");
            outLine("请到系统消息中心查看!");
            if (plus.os.name == "iOS") {
               outLine('*如果无法创建消息,请到"设置"->"通知"中配置应用在通知中心显示!');
            }
         }
         /**
          * 读取所有推送消息
          */
         function listAllPush() {
            var msgs = null;
            switch (plus.os.name) {
               case "Android":
                  msgs = plus.push.getAllMessage();
                  break;
               default:
                  break;
            }
            if (!msgs) {
               outSet("此平台不支持枚举推送消息列表!");
               return;
            }
            outSet("枚举消息列表(" + msgs.length + "):");
            for (var i in msgs) {
               var msg = msgs[i];
               outLine(i + ": " + msg.title + " - " + msg.content);
            }
         }
         /**
          * 清空所有推动消息
          */
         function clearAllPush() {
            plus.push.clear();
            outSet("清空所有推送消息成功!");
         }
         $(function() {
            //前端Hub的使用,注意的是,Hub的名字是ChatHub,这里使用时首字母小写
            // var work = $.connection.chatHub;
            var work = $.connection.chatHub;
            //对应后端的SendMessage函数,消息接收函数
            work.client.sendMessage = function(msg) {
               console.log(msg,1)
               createLocalPushMsg(msg)
            };
            //后端SendLogin调用后,产生的loginUser回调
            work.client.loginUser = function(userlist) {
               // console.log(userlist, 9)
               // reloadUser(userlist);
            };
            $.connection.hub.url = 'http://121.196.36.24:8001/signalr'
            //hub连接开启
            $.connection.hub.start().done(function() {
               var username = localStorage.getItem('username');
               //发送上线信息
               work.server.sendLogin(username);
               // const aaa = [{
               //    "code": "Q",
               //    "name": "呼叫质量",
               //    "children": [{
               //       "usercode": "999",
               //       "username": "楼先生"
               //    }]
               // }]
               // work.server.sendByGroupList('楼先生', 'CJ002', 'SB001', aaa)
            });
         });
         //重新加载用户列表
         // var reloadUser = function() {
         //    $("#username").empty();
         //    for (i = 0; i < 5; i++) {
         //       $("#username").append("<option value=" + i + ">" + i + "</option>");
         //    }
         // }
      </script>
   </head>
   <body>
      <div id="app">
         <div class="body">
            <div>
               <van-nav-bar title="标题" style="height:50px ;" right-text="按钮" left-arrow
                  @click-right="onClickRight" />
            </div>
            <van-swipe :autoplay="3000">
               <van-swipe-item v-for="(image, index) in images" :key="index">
                  <img v-lazy="image" :src='image' style="background-size: 100% 100%;" />
               </van-swipe-item>
            </van-swipe>
            <!-- <object data="../../components/my_van_nav_bar.html" title='我' width="100%" height="44"></object> -->
            <van-grid :gutter="10" square :column-num="3">
               <van-grid-item v-for="item in 9" @click='vanGridItem(item)' :key="item" icon="photo-o" text="文字" />
            </van-grid>
            <!--    <van-nav-bar title="工作台" @click-right="onClickRight">
               <template #right>
                  <van-popover placement="bottom-end" :offset="[13,8]" v-model="showPopover" trigger="click"
                     :actions="actions" @select="onSelect">
                     <template #reference>
                        <van-badge :content="10" max='99'>
                           <van-icon name="bars" size='20' color='#fff' />
                        </van-badge>
                     </template>
                  </van-popover>
               </template>
            </van-nav-bar> -->
            <van-action-sheet lazy-render :closeable='false' close-on-click-action close-on-click-overlay
               safe-area-inset-bottom v-model="sheetShow" title="标题">
               <van-grid :gutter="10" square :column-num="3">
                  <van-grid-item v-for="item in 9" @click='vanGridItem(item)' :key="item" icon="photo-o"
                     text="文字" />
            <van-nav-bar title="工作台" @click-right="onClickRight">
               <template #right>
                  <van-popover placement="bottom-end" :offset="[13,8]" v-model="showPopover" trigger="click">
                     <div class="topRight">
                        <div class="topRightItem" @click="myMessageClick">
                           <div>
                              <van-icon name="comment-o"
                                 :badge="messageNumber!==0?(messageNumber>9?'9+':messageNumber):false"
                                 size="1.28rem" style="margin-right: 8px;margin-top: 18px;" />
                           </div>
                           <div style="font-size: 14px;border-bottom: 1px solid #eee;">我的消息</div>
                        </div>
                        <div class="topRightItem" @click="topPopoverClick('退出登录')">
                           <div>
                              <van-icon name="revoke" style="margin-right: 8px;" />
                           </div>
                           <div style="font-size: 14px;">退出登录</div>
                        </div>
                     </div>
                     <template #reference>
                        <van-badge :content="messageNumber" max='9' v-if='messageNumber!==0'>
                           <van-icon name="bars" size='20' color='#fff' />
                        </van-badge>
                        <van-icon v-else name="bars" size='20' color='#fff' />
                     </template>
                  </van-popover>
               </template>
            </van-nav-bar>
            <van-pull-refresh v-model="isLoading" @refresh="onRefresh">
               <van-swipe :autoplay="3000">
                  <van-swipe-item v-for="(image, index) in images" :key="index">
                     <img v-lazy="image" :src='image' style="background-size: 100% 100%;width: 100%;" />
                  </van-swipe-item>
               </van-swipe>
               <van-grid :gutter="20" :border='false' square :column-num="3"
                  style="margin: 30px auto 0; width: 90%;">
                  <van-grid-item v-for="item in firstMenu" @click='vanGridItem(item)' :key="item"
                     :text="item.name">
                     <img :src="item.imgurl" alt=""
                        style="width: 56px;height:56px;margin-top: 10px;border-radius: 10px;">
                     <div style="margin-top: 5px;font-size: 14px;color: #929399;">{{item.name}}</div>
                  </van-grid-item>
               </van-grid>
            </van-action-sheet>
         </div>
               <van-action-sheet lazy-render :closeable='false' close-on-click-action close-on-click-overlay
                  safe-area-inset-bottom v-model="sheetShow" :title="firstMenuName">
                  <van-grid :border='false' :gutter="5" square :column-num="3" style="width: 80%; margin: auto;">
                     <van-grid-item v-for="item in secondMenu" @click='vanGridSecondItem(item)' :key="item"
                        icon="photo-o">
                        <img :src="item.imgurl" alt=""
                           style="width: 48px;height:48px;margin-top: 10px;border-radius: 10px;">
                        <div style="margin-top: 5px;font-size: 12px;color: #929399;">{{item.name}}</div>
                     </van-grid-item>
                  </van-grid>
               </van-action-sheet>
         </div>
         </van-pull-refresh>
         <van-overlay :show="overlayShow" @click="overlayShow=false" />
      </div>
@@ -60,24 +290,136 @@
         el: '#app',
         data: function() {
            return {
               isLoading: false, //下拉刷新
               images: [
                  '../../static/images/swiper01.png',
                  '../../static/images/swiper02.png',
               ],
               sheetShow: false
               sheetShow: false,
               overlayShow: false,
               showPopover: false,
               actions: [{
                     icon: 'comment-o',
                     text: '安灯响应'
                  },
                  {
                     icon: 'description',
                     text: '操作指导'
                  }, {
                     icon: 'award-o',
                     text: '成品追溯'
                  }, {
                     icon: 'revoke',
                     text: '退出登录'
                  }
               ],
               firstMenu: [], //一级菜单
               firstMenuName: '',
               secondMenu: [], //二级菜单
               messageNumber: 0, //我的消息数值
            }
         },
         created() {
         },
         mounted() {
            this.getfirstMenu()
            this.getLoginAppAnDonMessage()
            setInterval(()=>{
               this.getLoginAppAnDonMessage()
            },1000*10)
         },
         methods: {
            vanGridItem(item) {
               console.log(item)
               this.sheetShow = true
            onRefresh() {
               setTimeout(() => {
                  vant.Toast('刷新成功');
                  this.getfirstMenu()
                  this.getLoginAppAnDonMessage()
                  // vant.Notify('刷新成功');
                  this.isLoading = false;
               }, 1000);
            },
            onClickRight() {
            // 获取消息接口
            async getLoginAppAnDonMessage() {
               const data = {
                  userid: localStorage.getItem('userid'),
                  usercode: localStorage.getItem('usercode'),
                  username: localStorage.getItem('username'),
                  usertype: localStorage.getItem('usertype'),
               }
               const res = await post('Login/LoginAppAnDonMessage' + formatParams(data))
               this.messageNumber = res.data.length
               // this.messageNumber=9
            },
            // 获取一级菜单
            async getfirstMenu() {
               const data = {
                  usertype: 'APP',
                  usercode: localStorage.getItem('usercode')
               }
               const {
                  data: res
               } = await get('Login/LoginMenu', data)
               this.firstMenu = res
            },
            // 一级菜单点击
            vanGridItem(item) {
               this.sheetShow = true
               this.firstMenuName = item.name
               this.secondMenu = item.children
            },
            // 二级菜单点击
            vanGridSecondItem(item) {
               let url = ''
               switch (item.code) {
                  // 设备管理
                  case '2040':
                     url = '../sbgl/rcdj.html'
                     break;
                  case '2041':
                     url = '../sbgl/dqby.html'
                     break;
                  case '2042':
                     url = '../sbgl/wxsq.html'
                     break;
                  case '2043':
                     url = '../sbgl/sbwx.html'
                     break;
                  case '2044':
                     url = '../sbgl/wxyz.html'
                     break;
                  case '2090':
                     url = '../adgl/adhj.html'
                     break;
                  case '2091':
                     url = '../adgl/adxy.html'
                     break;
               }
               window.location = url
            },
            // 顶部右图标点击
            onClickRight() {
               this.overlayShow = true
            },
            // 顶部右图标下拉选择
            // onSelect(action) {
            //    if (action.text === '操作指导') {
            //       topPopoverClick('操作指导')
            //    } else if (action.text === '成品追溯') {
            //       topPopoverClick('成品追溯')
            //    } else if (action.text === '退出登录') {
            //       topPopoverClick('退出登录')
            //    }
            //    this.overlayShow = false
            // },
            myMessageClick() {
               window.location = '../other/wdxx.html'
            }
         }
      })
@@ -88,16 +430,43 @@
      }
      .body {
         width: 96%;
         height: 600px;
         background-color: grey;
         margin-top: 0px;
         margin-left: 2%;
         background-color: #fff;
         position: relative;
         /*       display: flex;
         justify-content: center;
         align-items: flex-start; */
      }
      .van-nav-bar__content {
         background-color: #2651d8;
         height: 44px;
      }
      .van-nav-bar__title {
         color: #fff;
         letter-spacing: 2px;
      }
      .van-nav-bar__right {
         padding: 0;
         margin-right: 16px;
      }
      .topRight {
         width: 128px;
         min-height: 40px;
         display: flex;
         flex-direction: column;
         /* padding: 10px; */
      }
      .topRightItem {
         display: flex;
         height: 44px;
         align-items: center;
         line-height: 44px;
         /* border-bottom: 1px dotted #000; */
         padding: 0 16px;
      }
   </style>
</html>