|
|
- <template>
- <view class="home">
- <!-- 顶部背景 -->
- <view class="home-top">
- <image class="home-top-bg" src="https://tennis-oss.xzaiyp.top/2024-10-22/81f3569e-c60c-4945-bfc9-b0e976f26d8e.png" mode="widthFix"></image>
- </view>
-
- <!-- 卡片(地图) -->
- <view class="card">
- <view @click="openBroadside" class="team">
- <view class="change-icon">
- <image src="https://tennis-oss.xzaiyp.top/2024-10-22/4e624b94-e080-4ec4-86de-196ad83538a5.png" mode="widthFix"></image>
- </view>
- <view class="project">
- 高新区项目一队项目1
- </view>
- </view>
- <view class="map">
- <map style="width: 100%; height: 100%" :latitude="latitude" :longitude="longitude" :markers="covers" :scale="14">
- </map>
- </view>
- </view>
-
- <!-- 打卡按钮 -->
- <view class="punch-card">
- <view @click="callCard" class="circle">
- <view class="title">拍照打卡</view>
- <view class="time">{{ date.format('YYYY-MM-DD HH:mm:ss') }}</view>
- </view>
- </view>
-
- <!-- 签到记录 -->
- <div @click="toRecord" class="sign">
- <div class="sign-title">
- <image class="sign-title-img" src="https://tennis-oss.xzaiyp.top/2024-10-22/3d70c0d0-f298-4187-8b01-d809757f4049.png" mode="widthFix"></image>
- <div class="title">打卡记录</div>
- </div>
- <div class="project">
- <text class="project-name"
- v-if="userInfo.team">{{ userInfo.team.name }}</text>
- <uv-icon name="arrow-right" color="#000"></uv-icon>
- </div>
- </div>
-
- <!-- tab栏 -->
- <tabbar :select="0"></tabbar>
-
- <!-- 侧边栏 -->
- <broadside ref="broadside"></broadside>
- </view>
- </template>
-
- <script>
- import tabbar from '../../components/base/tabbar.vue'
- import broadside from '../../components/broadside/broadside.vue'
- import { mapState } from 'vuex'
- export default {
- name: "Home",
- components: {
- tabbar,
- broadside
- },
- data() {
- return {
- latitude: 39.909,
- longitude: 116.39742,
- covers: [],
- inter : null,
- date : this.$dayjs()
- }
- },
- computed : {
- ...mapState(['teamList', 'userInfo']),
- },
- onLoad() {
- this.inter = setInterval(() => {
- this.date = this.$dayjs()
- }, 1000)
- },
- onUnload() {
- clearInterval(this.inter)
- },
- onShow() {
- this.getLocation()
- this.$store.commit('getUserInfo')
- },
- methods: {
- // 跳转签到记录
- toRecord() {
- uni.navigateTo({
- url: "/pages/subPack/record/record"
- })
- },
-
- //打开侧边栏
- openBroadside() {
- this.$refs.broadside.open()
- },
-
- //获取用户位置
- getLocation() {
- let self = this;
- uni.getLocation({
- type: 'gcj02',
- success: function(res) {
- self.longitude = res.longitude;
- self.latitude = res.latitude;
- self.covers.push({
- id: 1,
- latitude: res.latitude,
- longitude: res.longitude,
- iconPath: 'https://tennis-oss.xzaiyp.top/2024-10-22/103fa1db-8524-45e6-8d00-c36a69977a5b.png',
- width: 30,
- height: 30
- })
- },
- fail() {
- self.checkAndRequestLocationPermission()
- }
- });
-
- },
-
- checkAndRequestLocationPermission() {
- let self = this;
- uni.getSetting({
- success: function(res) {
- if (!res.authSetting['scope.userLocation']) {
- // 用户未授权定位权限
- uni.showModal({
- title: '提示',
- content: '当前定位未开启,请点击确定手动开启定位',
- success: function(modalRes) {
- if (modalRes.confirm) {
- // 用户选择确认开启定位
- uni.openSetting({
- success: function(settingRes) {
- if (settingRes.authSetting[
- 'scope.userLocation']) {
- // 重新获取位置信息
- self.getLocation();
- } else {
- // 用户未开启定位权限
- console.log('用户未开启定位权限');
- }
- },
- fail: function(err) {
- console.log('打开设置页面失败:', err);
- }
- });
- } else {
- // 用户选择取消
- self.getLocation()
- }
- }
- });
- } else {
- // 用户已授权定位权限但获取位置失败(可能是设备未开启定位服务)
- console.log('用户已授权定位权限,但获取位置失败');
- // 可以提示用户检查设备定位服务是否开启
- }
- }
- });
- },
-
- //打卡(跳转人脸识别)
- callCard(){
- uni.navigateTo({
- url: "/pages/subPack/human/human"
- })
- }
- }
- }
- </script>
-
- <style lang="scss" scoped>
- .home {
- background: $bg-color;
- min-height: 100vh;
-
- // 顶部背景
- .home-top {
-
- height: 490rpx;
- overflow: hidden;
-
- .home-top-bg {
- width: 750rpx;
- }
-
- }
-
- // 卡片(地图)
- .card {
- width: 95%;
- margin: -340rpx auto 0rpx auto;
- position: relative;
-
- .team {
- display: flex;
- margin: 15rpx 0rpx;
- color: white;
- font-size: 34rpx;
-
- .change-icon {
- display: flex;
- align-items: center;
- width: 40rpx;
- margin-right: 10rpx;
-
- image {
- width: 100%;
- }
- }
- }
-
- .map {
- height: 350rpx;
- background: $main-color;
- border-radius: 20rpx;
- overflow: hidden;
- }
- }
-
- //打卡按钮
- .punch-card {
- display: flex;
- justify-content: center;
- margin: 60rpx 0rpx;
-
- .circle {
- display: flex;
- flex-direction: column;
- justify-content: center;
- align-items: center;
- width: 370rpx;
- height: 370rpx;
- border-radius: 50%;
- background: $main-color;
- color: white;
-
- .title {
- font-size: 36rpx;
- }
-
- .time {
- font-size: 30rpx;
- margin-top: 20rpx;
- }
- }
- }
-
- // 签到记录
- .sign {
- display: flex;
- flex-wrap: wrap;
- width: 90%;
- margin: 0rpx auto;
- background: white;
- border-radius: 15rpx;
- box-sizing: border-box;
- padding: 30rpx 30rpx 30rpx 20rpx;
- box-shadow: 0rpx 0rpx 10rpx rgba(0, 0, 0, .1);
-
- .sign-title {
- display: flex;
- width: 30%;
-
- .sign-title-img {
- width: 40rpx;
- margin-right: 15rpx;
- }
-
- .title {}
- }
-
- .project {
- display: flex;
- width: 70%;
- justify-content: space-between;
-
- .project-name {
- color: $main-color;
- }
- }
- }
- }
- </style>
|