You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
wx.sstbc.com/public/sign/static/js/pages-index-course.493ff92d.js

1 line
18 KiB

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

(window["webpackJsonp"]=window["webpackJsonp"]||[]).push([["pages-index-course"],{"0e82":function(t,e,a){var n=a("6baa");n.__esModule&&(n=n.default),"string"===typeof n&&(n=[[t.i,n,""]]),n.locals&&(t.exports=n.locals);var s=a("967d").default;s("243089bc",n,!0,{sourceMap:!1,shadowMode:!1})},"418a":function(t,e,a){"use strict";a.r(e);var n=a("b378"),s=a("b34d");for(var i in s)["default"].indexOf(i)<0&&function(t){a.d(e,t,(function(){return s[t]}))}(i);a("4917");var o=a("828b"),c=Object(o["a"])(s["default"],n["b"],n["c"],!1,null,"3e653b3e",null,!1,n["a"],void 0);e["default"]=c.exports},4917:function(t,e,a){"use strict";var n=a("0e82"),s=a.n(n);s.a},5296:function(t,e,a){"use strict";a("6a54");var n=a("f5bd").default;Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0,a("bf0f"),a("e838"),a("64aa");var s=n(a("9b1b")),i=n(a("5de6")),o=n(a("2634")),c=n(a("2fdc")),r={data:function(){return{course_id:"",course:{},userLocation:null,distance:null,canCheckin:!1,hasCheckedIn:!1,locationStatus:{type:"default",text:"未定位"},rangeStatus:{type:"default",text:"未计算"},alertInfo:{type:"",message:""},checkinHistory:[],hasLocationPermission:!1,coordinateConfig:{backendSystem:"wgs84",enableConversion:!0}}},computed:{formattedDistance:function(){var t=this.distance;return null==t?"":t>=1e3?"".concat(Math.round(t/1e3),"km"):"".concat(t,"m")}},onLoad:function(t){console.log("页面加载options:",t),this.course_id=null===t||void 0===t?void 0:t.course_id,this.testCoordinateConversion(),console.log("开始检查权限..."),this.checkPermissionAndInit()},methods:{checkPermissionAndInit:function(){var t=this;return(0,c.default)((0,o.default)().mark((function e(){var a,n,s;return(0,o.default)().wrap((function(e){while(1)switch(e.prev=e.next){case 0:return console.log("开始检查权限..."),a=!1,e.prev=2,e.next=5,new Promise((function(t){uni.getSetting({success:t,fail:function(){return t({})}})}));case 5:n=e.sent,console.log("获取设置结果:",n),s=(null===n||void 0===n?void 0:n.authSetting)||{},console.log("权限设置:",s),a=!!s["scope.userLocation"],t.hasLocationPermission=a,console.log("权限检测结果:",a,"hasLocationPermission:",t.hasLocationPermission),e.next=18;break;case 14:e.prev=14,e.t0=e["catch"](2),console.log("权限检测异常:",e.t0),t.hasLocationPermission=!1;case 18:return console.log("开始获取课程信息..."),e.next=21,t.getCourse();case 21:return e.next=23,t.signGet();case 23:if(a){e.next=29;break}return console.log("无权限,设置状态为未获取定位权限"),t.locationStatus={type:"warning",text:"未获取定位权限"},t.rangeStatus={type:"default",text:"未计算"},t.canCheckin=!1,e.abrupt("return");case 29:return console.log("有权限,开始完整签到流程"),e.next=32,t.initializeCheckin();case 32:case"end":return e.stop()}}),e,null,[[2,14]])})))()},handleRecheckClick:function(){console.log("按钮被点击,当前权限状态:",this.hasLocationPermission),this.hasLocationPermission?(console.log("有权限,执行重新定位"),this.initializeCheckin()):(console.log("无权限,请求定位权限"),this.requestLocationPermission())},requestLocationPermission:function(){var t=this;console.log("开始请求定位权限..."),uni.authorize({scope:"scope.userLocation",success:function(){console.log("定位权限授权成功"),t.hasLocationPermission=!0,t.locationStatus={type:"warning",text:"定位中..."},t.initializeCheckin()},fail:function(e){console.log("定位权限授权失败:",e),uni.openSetting({success:function(e){var a=(null===e||void 0===e?void 0:e.authSetting)&&e.authSetting["scope.userLocation"];a&&(console.log("通过设置页面获取定位权限成功"),t.hasLocationPermission=!0,t.locationStatus={type:"warning",text:"定位中..."},t.initializeCheckin())}})}})},getLocation:function(){return new Promise((function(t,e){uni.getLocation({success:function(e){return t({lat:e.latitude,lng:e.longitude})},fail:function(t){return e(t)}})}))},getCourse:function(){var t=this;return(0,c.default)((0,o.default)().mark((function e(){var a,n,c,r,u,l,d,f,h;return(0,o.default)().wrap((function(e){while(1)switch(e.prev=e.next){case 0:return e.next=2,t.$u.api.courseDetail({course_id:t.course_id});case 2:a=e.sent,n=a||{},c=n.latitude||n.lat,r=n.longitude||n.lng,u=r,l=c,t.coordinateConfig.enableConversion&&"gcj02"!==t.coordinateConfig.backendSystem&&(d=t.convertCoordinates(r,c,t.coordinateConfig.backendSystem,"gcj02"),f=(0,i.default)(d,1),h=f[0],u=h[0],l=h[1]),console.log("原始坐标:",{lng:r,lat:c,system:t.coordinateConfig.backendSystem}),console.log("转换后坐标:",{lng:u,lat:l,system:"gcj02"}),t.course=(0,s.default)((0,s.default)((0,s.default)({},t.course),n),{},{location:{lat:l,lng:u,originalLat:c,originalLng:r,coordinateSystem:"gcj02"},allowedDistance:500});case 12:case"end":return e.stop()}}),e)})))()},signGet:function(){var t=this;return(0,c.default)((0,o.default)().mark((function e(){var a,n;return(0,o.default)().wrap((function(e){while(1)switch(e.prev=e.next){case 0:return e.next=2,t.$u.api.signGet({course_id:t.course_id});case 2:a=e.sent,n=(null===a||void 0===a?void 0:a.list)||[],t.checkinHistory=Array.isArray(n)?n:[],t.checkinHistory.length>0&&(t.hasCheckedIn=!0,t.canCheckin=!1,t.alertInfo={type:"warning",message:"已存在签到记录,不能重复打卡"});case 6:case"end":return e.stop()}}),e)})))()},signDistance:function(){var t=this;return(0,c.default)((0,o.default)().mark((function e(){var a,n,s,i,c,r,u,l,d,f;return(0,o.default)().wrap((function(e){while(1)switch(e.prev=e.next){case 0:return a=null,n=t.course.allowedDistance||500,e.prev=2,s=t.userLocation.lat,i=t.userLocation.lng,console.log("用户位置坐标:",{lat:s,lng:i,system:"gcj02"}),console.log("课程位置坐标:",{lat:t.course.location.lat,lng:t.course.location.lng,system:t.course.location.coordinateSystem}),e.next=9,t.$u.api.signDistance({course_id:t.course_id,latitude:s,longitude:i});case 9:c=e.sent,r=c||{},r&&null!=r.distance&&!isNaN(parseFloat(r.distance))&&(u=parseFloat(r.distance),a=Math.round(1e3*u)),r&&null!=r.content_check_range&&!isNaN(parseFloat(r.content_check_range))&&(l=parseFloat(r.content_check_range),n=Math.round(1e3*l)),e.next=17;break;case 15:e.prev=15,e.t0=e["catch"](2);case 17:null===a&&(d=t.getDistanceFromLatLonInM(t.userLocation.lat,t.userLocation.lng,t.course.location.lat,t.course.location.lng),a=Math.round(d)),t.distance=a,t.course.allowedDistance=n,t.distance<=n?(t.rangeStatus={type:"success",text:"在打卡范围内"},t.canCheckin=!t.hasCheckedIn,t.alertInfo=t.hasCheckedIn?{type:"warning",message:"已存在签到记录,不能重复打卡"}:{type:"success",message:"您已进入打卡范围,距离".concat(t.formatDistanceVal(t.distance),"。")}):(f=Math.max(0,t.distance-n),t.rangeStatus={type:"error",text:"超出范围约".concat(t.formatDistanceVal(f))},t.canCheckin=!1,t.alertInfo={type:"warning",message:"您需要进入".concat(t.formatDistanceVal(n),"范围内才能签到。")});case 21:case"end":return e.stop()}}),e,null,[[2,15]])})))()},signCheck:function(){var t=this;return(0,c.default)((0,o.default)().mark((function e(){return(0,o.default)().wrap((function(e){while(1)switch(e.prev=e.next){case 0:return e.prev=0,e.next=3,t.$u.api.courseCheck({course_id:t.course_id,latitude:t.userLocation.lat,longitude:t.userLocation.lng});case 3:return e.sent,t.hasCheckedIn=!0,t.canCheckin=!1,t.alertInfo={type:"success",message:"签到成功"},uni.showToast({title:"签到成功!",icon:"success"}),e.prev=8,e.next=11,t.signGet();case 11:e.next=15;break;case 13:e.prev=13,e.t0=e["catch"](8);case 15:e.next=21;break;case 17:e.prev=17,e.t1=e["catch"](0),console.error("签到失败:",e.t1),uni.showToast({title:"签到失败",icon:"none"});case 21:case"end":return e.stop()}}),e,null,[[0,17],[8,13]])})))()},initializeCheckin:function(){var t=this;return(0,c.default)((0,o.default)().mark((function e(){var a;return(0,o.default)().wrap((function(e){while(1)switch(e.prev=e.next){case 0:return t.locationStatus={type:"warning",text:"定位中..."},t.rangeStatus={type:"default",text:"未计算"},t.canCheckin=!1,t.distance=null,t.alertInfo={type:"",message:""},e.prev=5,e.next=8,t.getLocation();case 8:return a=e.sent,console.log(a),t.userLocation=a,t.locationStatus={type:"success",text:"定位成功"},e.next=14,t.signDistance();case 14:e.next=21;break;case 16:e.prev=16,e.t0=e["catch"](5),t.locationStatus={type:"error",text:"定位失败"},t.rangeStatus={type:"error",text:"无法计算"},t.alertInfo={type:"error",message:"获取信息或位置失败,请检查权限和网络。"};case 21:case"end":return e.stop()}}),e,null,[[5,16]])})))()},wgs84ToGcj02:function(t,e){var a=6378245,n=.006693421622965943;if(this.outOfChina(t,e))return[t,e];var s=this.transformLat(t-105,e-35),i=this.transformLng(t-105,e-35),o=e/180*Math.PI,c=Math.sin(o);c=1-n*c*c;var r=Math.sqrt(c);return s=180*s/(a*(1-n)/(c*r)*Math.PI),i=180*i/(a/r*Math.cos(o)*Math.PI),[t+i,e+s]},gcj02ToWgs84:function(t,e){if(this.outOfChina(t,e))return[t,e];var a=this.transformLat(t-105,e-35),n=this.transformLng(t-105,e-35),s=e/180*Math.PI,i=Math.sin(s);i=1-.006693421622965943*i*i;var o=Math.sqrt(i);return a=180*a/(6335552.717000426/(i*o)*Math.PI),n=180*n/(6378245/o*Math.cos(s)*Math.PI),[t-n,e-a]},outOfChina:function(t,e){return!(t>73.66&&t<135.05&&e>3.86&&e<53.55)},transformLat:function(t,e){var a=2*t-100+3*e+.2*e*e+.1*t*e+.2*Math.sqrt(Math.abs(t));return a+=2*(20*Math.sin(6*t*Math.PI)+20*Math.sin(2*t*Math.PI))/3,a+=2*(20*Math.sin(e*Math.PI)+40*Math.sin(e/3*Math.PI))/3,a+=2*(160*Math.sin(e/12*Math.PI)+320*Math.sin(e*Math.PI/30))/3,a},transformLng:function(t,e){var a=300+t+2*e+.1*t*t+.1*t*e+.1*Math.sqrt(Math.abs(e));return a+=2*(20*Math.sin(6*t*Math.PI)+20*Math.sin(2*t*Math.PI))/3,a+=2*(20*Math.sin(t*Math.PI)+40*Math.sin(t/3*Math.PI))/3,a+=2*(150*Math.sin(t/12*Math.PI)+300*Math.sin(t/30*Math.PI))/3,a},convertCoordinates:function(t,e){var a=arguments.length>2&&void 0!==arguments[2]?arguments[2]:"gcj02",n=arguments.length>3&&void 0!==arguments[3]?arguments[3]:"gcj02";if(a===n)return[t,e];if("wgs84"===a&&"gcj02"===n)return this.wgs84ToGcj02(t,e);if("gcj02"===a&&"wgs84"===n)return this.gcj02ToWgs84(t,e);if("wgs84"===a){var s=this.wgs84ToGcj02(t,e);return this.convertCoordinates(s[0],s[1],"gcj02",n)}return[t,e]},testCoordinateConversion:function(){console.log("=== 坐标转换测试 ==="),console.log("WGS84坐标:",{lng:116.397128,lat:39.916527});var t=this.wgs84ToGcj02(116.397128,39.916527);console.log("转换为GCJ-02:",{lng:t[0],lat:t[1]});var e=this.gcj02ToWgs84(t[0],t[1]);console.log("转换回WGS84:",{lng:e[0],lat:e[1]});var a={lng:Math.abs(e[0]-116.397128),lat:Math.abs(e[1]-39.916527)};console.log("转换精度误差:",a),console.log("=== 测试结束 ===")},getDistanceFromLatLonInM:function(t,e,a,n){var s=this.deg2rad(a-t),i=this.deg2rad(n-e),o=Math.sin(s/2)*Math.sin(s/2)+Math.cos(this.deg2rad(t))*Math.cos(this.deg2rad(a))*Math.sin(i/2)*Math.sin(i/2),c=2*Math.atan2(Math.sqrt(o),Math.sqrt(1-o));return 6371*c*1e3},deg2rad:function(t){return t*(Math.PI/180)},formatDistanceVal:function(t){if(null==t)return"";var e=Number(t);return isNaN(e)?"":e>=1e3?"".concat(Math.round(e/1e3),"km"):"".concat(Math.round(e),"m")},getStatusIcon:function(t){return{success:"checkmark-circle-fill",error:"close-circle-fill",warning:"error-circle-fill",default:"question-circle-fill"}[t]||"question-circle-fill"},performCheckin:function(){var t=this;return(0,c.default)((0,o.default)().mark((function e(){return(0,o.default)().wrap((function(e){while(1)switch(e.prev=e.next){case 0:if(!t.hasCheckedIn){e.next=3;break}return uni.showToast({title:"您今天已经签过到了",icon:"none"}),e.abrupt("return");case 3:if(t.canCheckin){e.next=5;break}return e.abrupt("return");case 5:return e.next=7,t.signCheck();case 7:case"end":return e.stop()}}),e)})))()},loadCheckinHistory:function(){var t=uni.getStorageSync("checkinHistory")||[];if(this.checkinHistory=t,t.length>0){var e=new Date(t[0].time);e.toDateString()===(new Date).toDateString()&&(this.hasCheckedIn=!0)}}}};e.default=r},"6baa":function(t,e,a){var n=a("c86c");e=n(!1),e.push([t.i,".checkin-page[data-v-3e653b3e]{background:linear-gradient(135deg,#667eea,#764ba2);min-height:100vh;padding:%?20?%}.checkin-container[data-v-3e653b3e]{max-width:400px;margin:0 auto}.course-card[data-v-3e653b3e], .status-card[data-v-3e653b3e]{background:#fff;border-radius:%?32?%;box-shadow:0 %?8?% %?32?% rgba(0,0,0,.1);padding:%?32?%;margin-bottom:%?30?%}.course-title[data-v-3e653b3e]{font-size:%?36?%;font-weight:600;text-align:center;margin-bottom:%?24?%}.course-info[data-v-3e653b3e]{display:flex;flex-direction:column;gap:%?16?%}.info-item[data-v-3e653b3e]{display:flex;align-items:center;gap:%?16?%;padding:%?12?%;background:#f8f9fa;border-radius:%?16?%;font-size:%?26?%}.info-icon[data-v-3e653b3e]{color:#3498db}.card-title[data-v-3e653b3e]{display:flex;align-items:center;gap:%?12?%;font-size:%?30?%;font-weight:600;margin-bottom:%?16?%}.status-item[data-v-3e653b3e]{display:flex;justify-content:space-between;align-items:center;padding:%?16?% 0;border-bottom:%?1?% solid #e9ecef;font-size:%?28?%}.status-item[data-v-3e653b3e]:last-child{border-bottom:none}.status-label[data-v-3e653b3e]{font-weight:500}.status-value[data-v-3e653b3e]{display:flex;align-items:center;gap:%?8?%}.status-success[data-v-3e653b3e]{color:#2ecc71}.status-error[data-v-3e653b3e]{color:#e74c3c}.status-warning[data-v-3e653b3e]{color:#f1c40f}.status-default[data-v-3e653b3e]{color:#909399}.distance-info[data-v-3e653b3e]{text-align:center;padding:%?24?%;background:#fff;border-radius:%?32?%;margin-bottom:%?24?%}.distance-value[data-v-3e653b3e]{font-size:%?48?%;font-weight:700;color:#3498db}.distance-label[data-v-3e653b3e]{font-size:%?26?%;color:#6c757d;margin-top:%?8?%}.alert-custom[data-v-3e653b3e]{border-radius:%?24?%;padding:%?24?%;margin-bottom:%?24?%;display:flex;align-items:center;gap:%?16?%;font-size:%?26?%;color:#fff}.alert-success[data-v-3e653b3e]{background:#2ecc71}.alert-error[data-v-3e653b3e]{background:#e74c3c}.alert-warning[data-v-3e653b3e]{background:#f1c40f}.checkin-actions[data-v-3e653b3e]{display:flex;flex-direction:column;gap:%?20?%;margin-bottom:%?30?%}.checkin-btn[data-v-3e653b3e] .u-btn, .recheck-btn[data-v-3e653b3e] .u-btn{height:%?90?%}.btn-icon[data-v-3e653b3e]{margin-right:%?12?%}.history-empty[data-v-3e653b3e]{text-align:center;color:#999;padding:%?30?% 0;font-size:%?26?%}.history-list[data-v-3e653b3e]{display:flex;flex-direction:column;gap:%?12?%}.history-item[data-v-3e653b3e]{display:flex;justify-content:space-between;font-size:%?24?%;color:#666;background:#f8f9fa;padding:%?12?%;border-radius:%?12?%}",""]),t.exports=e},b34d:function(t,e,a){"use strict";a.r(e);var n=a("5296"),s=a.n(n);for(var i in n)["default"].indexOf(i)<0&&function(t){a.d(e,t,(function(){return n[t]}))}(i);e["default"]=s.a},b378:function(t,e,a){"use strict";a.d(e,"b",(function(){return s})),a.d(e,"c",(function(){return i})),a.d(e,"a",(function(){return n}));var n={uIcon:a("4fee").default,uButton:a("eb80").default},s=function(){var t=this,e=t.$createElement,a=t._self._c||e;return a("v-uni-view",{staticClass:"checkin-page"},[a("v-uni-view",{staticClass:"checkin-container"},[a("v-uni-view",{staticClass:"course-card"},[a("v-uni-view",{staticClass:"course-title"},[t._v(t._s(t.course.name?t.course.name:""))]),a("v-uni-view",{staticClass:"course-info"},[a("v-uni-view",{staticClass:"info-item"},[a("u-icon",{staticClass:"info-icon",attrs:{name:"calendar-fill"}}),a("v-uni-text",[t._v("开始日期:"+t._s(t.course.start_date?t.course.start_date:""))])],1),a("v-uni-view",{staticClass:"info-item"},[a("u-icon",{staticClass:"info-icon",attrs:{name:"calendar-fill"}}),a("v-uni-text",[t._v("结束日期:"+t._s(t.course.end_date?t.course.end_date:""))])],1),a("v-uni-view",{staticClass:"info-item"},[a("u-icon",{staticClass:"info-icon",attrs:{name:"map-fill"}}),a("v-uni-text",[t._v(t._s(t.course.address_detail?t.course.address_detail:""))])],1)],1)],1),a("v-uni-view",{staticClass:"status-card"},[a("h6",{staticClass:"card-title"},[a("u-icon",{staticClass:"title-icon",attrs:{name:"shield-checkmark"}}),t._v("签到状态检测")],1),a("v-uni-view",{staticClass:"status-item"},[a("v-uni-text",{staticClass:"status-label"},[t._v("定位状态")]),a("v-uni-view",{class:["status-value","status-"+t.locationStatus.type]},[a("u-icon",{attrs:{name:t.getStatusIcon(t.locationStatus.type)}}),a("v-uni-text",[t._v(t._s(t.locationStatus.text))])],1)],1),a("v-uni-view",{staticClass:"status-item"},[a("v-uni-text",{staticClass:"status-label"},[t._v("打卡范围")]),a("v-uni-view",{class:["status-value","status-"+t.rangeStatus.type]},[a("u-icon",{attrs:{name:t.getStatusIcon(t.rangeStatus.type)}}),a("v-uni-text",[t._v(t._s(t.rangeStatus.text))])],1)],1)],1),null!==t.distance?a("v-uni-view",{staticClass:"distance-info"},[a("v-uni-view",{staticClass:"distance-value"},[t._v(t._s(t.formattedDistance))]),a("v-uni-view",{staticClass:"distance-label"},[t._v("距离课程地点")])],1):t._e(),t.alertInfo.message?a("v-uni-view",{class:["alert-custom","alert-"+t.alertInfo.type]},[a("u-icon",{staticClass:"alert-icon",attrs:{name:t.getStatusIcon(t.alertInfo.type)}}),a("v-uni-text",[t._v(t._s(t.alertInfo.message))])],1):t._e(),a("v-uni-view",{staticClass:"checkin-actions"},[a("u-button",{staticClass:"checkin-btn",attrs:{type:"primary",disabled:!t.canCheckin},on:{click:function(e){arguments[0]=e=t.$handleEvent(e),t.performCheckin.apply(void 0,arguments)}}},[a("u-icon",{staticClass:"btn-icon",attrs:{name:"map"}}),t._v(t._s(t.hasCheckedIn?"已签到":"位置签到"))],1),a("u-button",{staticClass:"recheck-btn",attrs:{type:"success"},on:{click:function(e){arguments[0]=e=t.$handleEvent(e),t.handleRecheckClick.apply(void 0,arguments)}}},[a("u-icon",{staticClass:"btn-icon",attrs:{name:t.hasLocationPermission?"reload":"location"}}),t._v(t._s(t.hasLocationPermission?"重新定位":"获取定位权限"))],1)],1),a("v-uni-view",{staticClass:"status-card"},[a("h6",{staticClass:"card-title"},[a("u-icon",{staticClass:"title-icon",attrs:{name:"order"}}),t._v("签到记录")],1),0===t.checkinHistory.length?a("v-uni-view",{staticClass:"history-empty"},[t._v("暂无签到记录")]):a("v-uni-view",{staticClass:"history-list"},t._l(t.checkinHistory,(function(e,n){return a("v-uni-view",{key:n,staticClass:"history-item"},[a("v-uni-text",[t._v("签到时间: "+t._s(e.created_at))])],1)})),1)],1)],1)],1)},i=[]}}]);