442 lines
		
	
	
		
			11 KiB
		
	
	
	
		
			Vue
		
	
	
	
			
		
		
	
	
			442 lines
		
	
	
		
			11 KiB
		
	
	
	
		
			Vue
		
	
	
	
| <script>
 | ||
| import router from "./static/common/js/router";
 | ||
| import config from "./static/common/js/config.js";
 | ||
| 
 | ||
| var jweixin = require("jweixin-module");
 | ||
| export default {
 | ||
|   data() {
 | ||
|     return {
 | ||
|       show: false,
 | ||
|     };
 | ||
|   },
 | ||
|   globalData: {},
 | ||
|   created() {},
 | ||
|   onLaunch() {
 | ||
|     if (typeof window.entryUrl === "undefined" || window.entryUrl === "") {
 | ||
|       window.entryUrl = location.href.split("#")[0];
 | ||
|     }
 | ||
|     router.initApp(this);
 | ||
|     // 处理项目加载时白名单不生效异常问题
 | ||
|     let isUrl = this._route.fullPath.split("?")[0];
 | ||
|     let notNeed = config.whiteList.includes(isUrl);
 | ||
|     if (notNeed) {
 | ||
|       uni.navigateTo({
 | ||
|         url: this._route.fullPath,
 | ||
|       });
 | ||
|       return;
 | ||
|     }
 | ||
|     var that = this;
 | ||
|     uni.getSystemInfo({
 | ||
|       success: function (res) {
 | ||
|         // 根据 model 进行判断
 | ||
|         if (res.model.indexOf("iPhone") >= 0) {
 | ||
|           that.$u.vuex("vuex_iPhone", true);
 | ||
|         }
 | ||
|       },
 | ||
|     });
 | ||
|     // 先返回
 | ||
|     return
 | ||
| 
 | ||
|     if (!that.vuex_token) {
 | ||
|       const type = that.vuex_userType || 0; // 0:学生 1:教师
 | ||
|       this.$u.vuex("vuex_user", "");
 | ||
|       this.$u.vuex("vuex_token", "");
 | ||
|       uni.clearStorage();
 | ||
|       uni.reLaunch({
 | ||
|         url: `/pages/login/login/index?type=${type}`,
 | ||
|       });
 | ||
|       return;
 | ||
|     }
 | ||
| 
 | ||
|     return;
 | ||
|     if (!that.vuex_user.isFill) {
 | ||
|       this.$u.vuex("vuex_msgList", "");
 | ||
|       this.$u.vuex("vuex_user", "");
 | ||
|       this.$u.vuex("vuex_token", "");
 | ||
|       this.$u.vuex("vuex_userInfo", "");
 | ||
|       uni.clearStorage();
 | ||
|       this.$u.route({
 | ||
|         url: "/pages/login/login/login",
 | ||
|       });
 | ||
|       return;
 | ||
| 
 | ||
|       uni.navigateTo({
 | ||
|         url: "/pages/login/roleSelection",
 | ||
|       });
 | ||
|       return;
 | ||
|     }
 | ||
|   },
 | ||
|   // onShow(){
 | ||
|   //  console.log('onShow')
 | ||
|   // },
 | ||
|   methods: {
 | ||
|     getLocation() {
 | ||
|       var that = this;
 | ||
|       if (this.isWechat()) {
 | ||
|         const isiOS = !!navigator.userAgent.match(
 | ||
|           /\(i[^;]+;( U;)? CPU.+Mac OS X/
 | ||
|         ); //ios终端
 | ||
|         // 进行签名的时候  Android 不用使用之前的链接, ios 需要
 | ||
|         const signLink = isiOS
 | ||
|           ? window.entryUrl
 | ||
|           : window.location.href.split("#")[0];
 | ||
|         //获取当前url然后传递给后台获取授权和签名信息,后台需要解码才能使用
 | ||
|         // const url =encodeURIComponent(signLink);
 | ||
|         const url = signLink;
 | ||
|         const data = {
 | ||
|           url: url,
 | ||
|         };
 | ||
|         this.$u.api.GetInfoMation(data).then((res) => {
 | ||
|           jweixin.config({
 | ||
|             debug: false,
 | ||
|             appId: res.appId,
 | ||
|             timestamp: res.timestamp,
 | ||
|             nonceStr: res.noncestr,
 | ||
|             signature: res.signature,
 | ||
|             jsApiList: [
 | ||
|               //这里是需要用到的接口名称
 | ||
|               "getLocation", //获取位置
 | ||
|               "openLocation", //打开位置
 | ||
|             ],
 | ||
|           });
 | ||
| 
 | ||
|           // jweixin.config 执行失败时调用
 | ||
|           jweixin.error((err) => {
 | ||
|             uni.hideLoading();
 | ||
|             console.log("授权失败,您可能无法使用部分功能", err);
 | ||
|           });
 | ||
|           jweixin.ready(function () {
 | ||
|             jweixin.getLocation({
 | ||
|               type: "gcj02", // 默认为wgs84的gps坐标,如果要返 回直接给openLocation用的火星坐标,可传入'gcj02'
 | ||
|               success: (res) => {
 | ||
|                 uni.hideLoading();
 | ||
|                 that.$u.vuex("vuex_userLocation", res);
 | ||
| 
 | ||
|                 var data = {
 | ||
|                   userId: that.vuex_user.id,
 | ||
|                   longitude: res.longitude + "",
 | ||
|                   latitude: res.latitude + "",
 | ||
|                 };
 | ||
|                 that.$u.api.upPosition(data);
 | ||
|               },
 | ||
|               fail: function (res) {
 | ||
|                 uni.hideLoading();
 | ||
|                 console.log(res, "err");
 | ||
|               },
 | ||
|               complete: function (res) {
 | ||
|                 uni.hideLoading();
 | ||
|                 console.log(res, "is");
 | ||
|               },
 | ||
|             });
 | ||
|           });
 | ||
|         });
 | ||
|       } else {
 | ||
|         uni.getLocation({
 | ||
|           type: "gcj02 ",
 | ||
|           isHighAccuracy: true,
 | ||
|           highAccuracyExpireTime: 3000,
 | ||
|           success: (res) => {
 | ||
|             uni.hideLoading();
 | ||
| 
 | ||
|             this.$u.vuex("vuex_userLocation", res);
 | ||
|             var data = {
 | ||
|               userId: this.vuex_user.id,
 | ||
|               longitude: res.longitude + "",
 | ||
|               latitude: res.latitude + "",
 | ||
|             };
 | ||
|             this.$u.api.upPosition(data);
 | ||
|           },
 | ||
|           fail: (err) => {
 | ||
|             uni.hideLoading();
 | ||
|             console.log("地理位置获取失败", err);
 | ||
|           },
 | ||
|         });
 | ||
|       }
 | ||
|     },
 | ||
|     isWechat() {
 | ||
|       var ua = window.navigator.userAgent.toLowerCase();
 | ||
|       if (ua.match(/micromessenger/i) == "micromessenger") {
 | ||
|         // console.log(‘是微信客户端’)
 | ||
|         return true;
 | ||
|       } else {
 | ||
|         // console.log(‘不是微信客户端’)
 | ||
|         return false;
 | ||
|       }
 | ||
|     },
 | ||
|     charLink() {
 | ||
|       var that = this;
 | ||
|       (function start(ms) {
 | ||
|         setTimeout(() => {
 | ||
|           try {
 | ||
|             that.$connection
 | ||
|               .start()
 | ||
|               .then(() => {
 | ||
|                 // console.log(that.$connection.connection.transport.webSocket._webSocket.url)
 | ||
|                 // that.connectionId = that.$connection.connection.transport.url.split(
 | ||
|                 // 	"=")[1]
 | ||
|                 that.connectionId =
 | ||
|                   that.$connection.connection.transport.webSocket._webSocket.url.split(
 | ||
|                     "="
 | ||
|                   )[1];
 | ||
|                 that.CharLogin();
 | ||
|               })
 | ||
|               .catch((e) => {
 | ||
|                 //重试
 | ||
|                 that.$connection.sto;
 | ||
|                 console.log("websocket连接失败", e);
 | ||
|                 return start(5000);
 | ||
|               });
 | ||
|           } catch (e) {
 | ||
|             //重试
 | ||
|             return start(5000);
 | ||
|           }
 | ||
|         }, ms);
 | ||
|       })(0);
 | ||
|       //接收消息
 | ||
|       this.$connection.on("ReceiveMessage", (user, message, type) => {
 | ||
|         if (this._route.fullPath.indexOf("dialogBox") < 0) {
 | ||
|           var tab = this.vuex_tabbar;
 | ||
|           tab[1].isDot = true;
 | ||
|           this.$u.vuex("vuex_tabbar", tab);
 | ||
|           var msgList = this.vuex_tabbar;
 | ||
|           var msgList = this.vuex_msgList;
 | ||
|           // 管理员对普通用户
 | ||
|           if (type == 4) {
 | ||
|             user = "admin";
 | ||
|           }
 | ||
|           if (type == 3) {
 | ||
|             user += "user";
 | ||
|           }
 | ||
|           if (msgList.indexOf(user) < 0) {
 | ||
|             msgList += user + ",";
 | ||
|           }
 | ||
|           this.$u.vuex("vuex_msgList", msgList);
 | ||
|         }
 | ||
|       });
 | ||
|       //接收系统消息
 | ||
|       this.$connection.on("SystemMessage", (title, content, time) => {
 | ||
|         if (this._route.fullPath.indexOf("sysList") < 0) {
 | ||
|           var tab = this.vuex_tabbar;
 | ||
|           tab[1].isDot = true;
 | ||
|           this.$u.vuex("vuex_tabbar", tab);
 | ||
|           var msgList = this.vuex_tabbar;
 | ||
|           var msgList = this.vuex_msgList;
 | ||
|           if (msgList.indexOf("SystemMessage") < 0) {
 | ||
|             msgList += "SystemMessage,";
 | ||
|           }
 | ||
|           this.$u.vuex("vuex_msgList", msgList);
 | ||
|         }
 | ||
|       });
 | ||
|       //接收互动消息
 | ||
|       this.$connection.on("InteractMessage", (data, type) => {
 | ||
|         if (this._route.fullPath.indexOf("interactionList") < 0) {
 | ||
|           var tab = this.vuex_tabbar;
 | ||
|           tab[1].isDot = true;
 | ||
|           this.$u.vuex("vuex_tabbar", tab);
 | ||
|           var msgList = this.vuex_tabbar;
 | ||
|           var msgList = this.vuex_msgList;
 | ||
|           if (msgList.indexOf("InteractMessage") < 0) {
 | ||
|             msgList += "InteractMessage,";
 | ||
|           }
 | ||
|           this.$u.vuex("vuex_msgList", msgList);
 | ||
|         }
 | ||
|       });
 | ||
|     },
 | ||
|     CharLogin() {
 | ||
|       //绑定用户账号和connectionId
 | ||
|       if (this.vuex_user.id) {
 | ||
|         this.$connection
 | ||
|           .invoke("login", this.connectionId, this.vuex_user.id)
 | ||
|           .then((res) => {})
 | ||
|           .catch((err) => {});
 | ||
|         //初始化获取定位
 | ||
|         // this.getLocation()
 | ||
|       } else {
 | ||
|         setTimeout(() => {
 | ||
|           this.CharLogin();
 | ||
|         }, 1000);
 | ||
|       }
 | ||
|     },
 | ||
|   },
 | ||
|   mounted() {
 | ||
|     this.charLink();
 | ||
|   },
 | ||
| };
 | ||
| </script>
 | ||
| 
 | ||
| <style lang="scss">
 | ||
| @import "uview-ui/index.scss";
 | ||
| @import "common/demo.scss";
 | ||
| 
 | ||
| .u-tabbar__content__item__button {
 | ||
|   top: 0.07rem !important;
 | ||
| }
 | ||
| 
 | ||
| .u-navbar-placeholder,
 | ||
| .u-navbar-inner {
 | ||
|   height: 0.44rem !important;
 | ||
| }
 | ||
| 
 | ||
| .u-tabbar__content__item__text {
 | ||
|   font-size: 20rpx !important;
 | ||
| }
 | ||
| 
 | ||
| .u-tabbar__content__item__button .u-icon__img {
 | ||
|   width: 44rpx !important;
 | ||
|   height: 44rpx !important;
 | ||
| }
 | ||
| 
 | ||
| .u-size-mini {
 | ||
|   font-size: 0.12rem !important;
 | ||
| }
 | ||
| 
 | ||
| uni-modal .uni-modal__hd {
 | ||
|   padding: 0.1rem;
 | ||
| }
 | ||
| 
 | ||
| uni-modal .uni-modal__bd {
 | ||
|   padding-top: 20rpx;
 | ||
|   // font-weight: bold;
 | ||
|   font-size: 34rpx;
 | ||
|   color: rgba(0, 0, 0, 0.9);
 | ||
| }
 | ||
| 
 | ||
| uni-modal .uni-modal__btn {
 | ||
|   border-radius: 16rpx;
 | ||
|   font-size: 28rpx;
 | ||
| }
 | ||
| 
 | ||
| uni-modal .uni-modal__btn:after {
 | ||
|   border: none !important;
 | ||
| }
 | ||
| 
 | ||
| uni-modal .uni-modal__btn_default {
 | ||
|   background: #e6f6ff;
 | ||
|   color: #3cb5fb !important;
 | ||
|   margin-right: 20rpx;
 | ||
| }
 | ||
| 
 | ||
| uni-modal .uni-modal__ft {
 | ||
|   line-height: 80rpx;
 | ||
| }
 | ||
| 
 | ||
| uni-modal .uni-modal__ft:after {
 | ||
|   border: none !important;
 | ||
| }
 | ||
| 
 | ||
| uni-modal .uni-modal__btn_primary {
 | ||
|   background: #3cb5fb;
 | ||
|   color: #ffffff !important;
 | ||
| }
 | ||
| 
 | ||
| uni-modal .uni-modal {
 | ||
|   padding: 40rpx;
 | ||
|   box-sizing: border-box;
 | ||
|   border-radius: 30rpx;
 | ||
| }
 | ||
| 
 | ||
| .u-tabbar__content {
 | ||
|   height: 0.5rem !important;
 | ||
| }
 | ||
| 
 | ||
| .phone .u-tabbar__content {
 | ||
|   padding-bottom: 0.14rem;
 | ||
| }
 | ||
| 
 | ||
| .u-tabs-scorll-flex .u-tabs-item {
 | ||
|   transition: all 0.1s;
 | ||
|   font-size: 0.15rem !important;
 | ||
| }
 | ||
| 
 | ||
| * {
 | ||
|   font-family: "pingfang";
 | ||
| }
 | ||
| 
 | ||
| html {
 | ||
|   font-size: 200rpx;
 | ||
| }
 | ||
| 
 | ||
| uni-page-body {
 | ||
|   height: 100%;
 | ||
| }
 | ||
| 
 | ||
| body {
 | ||
|   margin: 0;
 | ||
|   font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", "Roboto", "Oxygen",
 | ||
|     "Ubuntu", "Cantarell", "Fira Sans", "Droid Sans", "Helvetica Neue",
 | ||
|     "Microsoft Yahei", sans-serif;
 | ||
|   -webkit-font-smoothing: antialiased;
 | ||
|   -moz-osx-font-smoothing: grayscale;
 | ||
|   // max-width: 1536rpx;
 | ||
|   margin: 0 auto;
 | ||
|   background-color: #f6f7fa;
 | ||
| }
 | ||
| 
 | ||
| view,
 | ||
| image,
 | ||
| text {
 | ||
|   box-sizing: border-box;
 | ||
|   flex-shrink: 0;
 | ||
| }
 | ||
| 
 | ||
| #app {
 | ||
|   width: 100vw;
 | ||
|   height: 100vh;
 | ||
| }
 | ||
| 
 | ||
| .flex-row {
 | ||
|   display: flex;
 | ||
|   flex-direction: row;
 | ||
| }
 | ||
| 
 | ||
| .flex-col {
 | ||
|   display: flex;
 | ||
|   flex-direction: column;
 | ||
| }
 | ||
| 
 | ||
| .justify-start {
 | ||
|   display: flex;
 | ||
|   justify-content: flex-start;
 | ||
| }
 | ||
| 
 | ||
| .justify-center {
 | ||
|   display: flex;
 | ||
|   justify-content: center;
 | ||
| }
 | ||
| 
 | ||
| .justify-end {
 | ||
|   display: flex;
 | ||
|   justify-content: flex-end;
 | ||
| }
 | ||
| 
 | ||
| .justify-evenly {
 | ||
|   display: flex;
 | ||
|   justify-content: space-evenly;
 | ||
| }
 | ||
| 
 | ||
| .justify-around {
 | ||
|   display: flex;
 | ||
|   justify-content: space-around;
 | ||
| }
 | ||
| 
 | ||
| .justify-between {
 | ||
|   display: flex;
 | ||
|   justify-content: space-between;
 | ||
| }
 | ||
| 
 | ||
| .items-start {
 | ||
|   display: flex;
 | ||
|   align-items: flex-start;
 | ||
| }
 | ||
| 
 | ||
| .items-center {
 | ||
|   display: flex;
 | ||
|   align-items: center;
 | ||
| }
 | ||
| 
 | ||
| .items-end {
 | ||
|   display: flex;
 | ||
|   align-items: flex-end;
 | ||
| }
 | ||
| </style>
 |