flat: 添加定位

This commit is contained in:
Apcallover
2024-06-05 14:30:33 +08:00
parent f3eef9f396
commit 21835e52c1
7 changed files with 867 additions and 773 deletions

View File

@@ -24,6 +24,7 @@
this.$store.dispatch('startRefreshTokenTimer') this.$store.dispatch('startRefreshTokenTimer')
this.$store.dispatch('startRefreshNewsTimer') this.$store.dispatch('startRefreshNewsTimer')
this.$store.dispatch('refreshAuthState') this.$store.dispatch('refreshAuthState')
this.$store.dispatch('getUserLocation')
} }
// #ifdef H5 // #ifdef H5
// 企业定制 // 企业定制

View File

@@ -36,7 +36,7 @@
</view> --> </view> -->
<view style="display: flex;align-items: center;position:absolute;right:0;"> <view style="display: flex;align-items: center;position:absolute;right:0;">
<image src="../../static/img/location_new.png" style="width: 30rpx;height: 30rpx;" mode=""></image> <image src="../../static/img/location_new.png" style="width: 30rpx;height: 30rpx;" mode=""></image>
<view>--km</view> <view>{{distance(companyitem)}}</view>
</view> </view>
</view> </view>
<view class="comment" v-if='comment' @tap.stop="goComment(companyitem.missionNo)"> <view class="comment" v-if='comment' @tap.stop="goComment(companyitem.missionNo)">
@@ -59,7 +59,10 @@
dateFormat dateFormat
} from "../../untils/format.js"; } from "../../untils/format.js";
import dictionary from '@/common/textdata.js'; import dictionary from '@/common/textdata.js';
import {
addZeroPrefix,
getDistanceFromLatLonInKm
} from '@/untils/tools.js'
export default { export default {
beforeCreate: function() {}, beforeCreate: function() {},
props: { props: {
@@ -80,6 +83,9 @@
near: { near: {
type: Boolean, type: Boolean,
default: false default: false
},
position: {
default: null
} }
}, },
data() { data() {
@@ -92,10 +98,32 @@
}, },
computed: { computed: {
skillNames() { skillNames() {
if (this.companyitem.skillNames) {
return this.companyitem.skillNames.split(',') return this.companyitem.skillNames.split(',')
} else {
return []
}
} }
}, },
methods: { methods: {
distance(item) {
const {
lon,
lat
} = item
if (this.position && lon) {
const {
longitude,
latitude
} = this.position
const {
m,
km
} = getDistanceFromLatLonInKm(lat, lon, latitude, longitude)
return m > 1000 ? `${km.toFixed(2)}km` : `${m.toFixed(2)}m`
}
return '--km'
},
goComment: function(no) { goComment: function(no) {
uni.navigateTo({ uni.navigateTo({
url: `../../pageMy/mycomment/mycomment?missionNo=${encodeURIComponent(no)}` url: `../../pageMy/mycomment/mycomment?missionNo=${encodeURIComponent(no)}`

View File

@@ -43,7 +43,7 @@
</view> --> </view> -->
<view style="display: flex;align-items: center;position:absolute;right:0;"> <view style="display: flex;align-items: center;position:absolute;right:0;">
<image src="../../static/img/location_new.png" style="width: 30rpx;height: 30rpx;" mode=""></image> <image src="../../static/img/location_new.png" style="width: 30rpx;height: 30rpx;" mode=""></image>
<view>--km</view> <view>{{distance(companyitem)}}</view>
</view> </view>
</view> </view>
<view class="comment" v-if='comment' @tap.stop="goComment(companyitem.missionNo)"> <view class="comment" v-if='comment' @tap.stop="goComment(companyitem.missionNo)">
@@ -66,7 +66,10 @@
dateFormat dateFormat
} from "../../untils/format.js"; } from "../../untils/format.js";
import dictionary from '@/common/textdata.js'; import dictionary from '@/common/textdata.js';
import {
addZeroPrefix,
getDistanceFromLatLonInKm
} from '@/untils/tools.js'
export default { export default {
beforeCreate: function() {}, beforeCreate: function() {},
props: { props: {
@@ -99,10 +102,32 @@
}, },
computed: { computed: {
skillNames() { skillNames() {
if (this.companyitem.skillNames) {
return this.companyitem.skillNames.split(',') return this.companyitem.skillNames.split(',')
} else {
return []
}
} }
}, },
methods: { methods: {
distance(item) {
const {
lon,
lat
} = item
if (this.position && lon) {
const {
longitude,
latitude
} = this.position
const {
m,
km
} = getDistanceFromLatLonInKm(lat, lon, latitude, longitude)
return m > 1000 ? `${km.toFixed(2)}km` : `${m.toFixed(2)}m`
}
return '--km'
},
goComment: function(no) { goComment: function(no) {
uni.navigateTo({ uni.navigateTo({
url: `../../pageMy/mycomment/mycomment?missionNo=${encodeURIComponent(no)}` url: `../../pageMy/mycomment/mycomment?missionNo=${encodeURIComponent(no)}`

View File

@@ -20,7 +20,7 @@
<view class="jobcontent" @click="skill"> <view class="jobcontent" @click="skill">
<view class="jobinfo"> <view class="jobinfo">
<view class="jobAddress"> <view class="jobAddress">
零工工种 第一技能
</view> </view>
<view v-if="worktypesName" class="jobText">{{ worktypesName }}</view> <view v-if="worktypesName" class="jobText">{{ worktypesName }}</view>
<view v-else class="jobText nochoose">请选择</view> <view v-else class="jobText nochoose">请选择</view>
@@ -31,7 +31,7 @@
<view class="jobcontent" @click="skillLevel"> <view class="jobcontent" @click="skillLevel">
<view class="jobinfo"> <view class="jobinfo">
<view class="jobAddress"> <view class="jobAddress">
岗位工种 第二技能
</view> </view>
<view v-if="skillsName" class="jobText">{{ skillsName }}</view> <view v-if="skillsName" class="jobText">{{ skillsName }}</view>
<view v-else class="jobText nochoose">请选择</view> <view v-else class="jobText nochoose">请选择</view>
@@ -47,11 +47,11 @@
</template> </template>
<script> <script>
import { import {
addSkills addSkills
} from '@/api/resume.js' } from '@/api/resume.js'
export default { export default {
data() { data() {
return { return {
tradeId: '', tradeId: '',
@@ -95,12 +95,12 @@ export default {
}) })
}, },
methods: { methods: {
goAddind: function () { goAddind: function() {
uni.navigateTo({ uni.navigateTo({
url: './addInd?id=' + this.tradeId url: './addInd?id=' + this.tradeId
}) })
}, },
skill: function () { skill: function() {
// if (this.tradeId) { // if (this.tradeId) {
uni.navigateTo({ uni.navigateTo({
url: `./skill?id=${this.worktypesId}&tradeId=${this.tradeId}&maxLayer=2&type=1` url: `./skill?id=${this.worktypesId}&tradeId=${this.tradeId}&maxLayer=2&type=1`
@@ -112,13 +112,13 @@ export default {
// }); // });
// } // }
}, },
skillLevel: function () { skillLevel: function() {
uni.navigateTo({ uni.navigateTo({
url: `./skillLevel?id=${this.skillsId}&worktypesId=${this.worktypesId}&maxLayer=3&type=2` url: `./skillLevel?id=${this.skillsId}&worktypesId=${this.worktypesId}&maxLayer=3&type=2`
}) })
}, },
submit: async function () { submit: async function() {
// console.log(this.tradeName, this.worktypesName, this.skillsName); // console.log(this.tradeName, this.worktypesName, this.skillsName);
let result = this.worktypesName.split('-'); let result = this.worktypesName.split('-');
let result1 = this.skillsName.split('-'); let result1 = this.skillsName.split('-');
@@ -130,51 +130,51 @@ export default {
uni.navigateBack() uni.navigateBack()
} }
} }
} }
</script> </script>
<style> <style>
.slo { .slo {
font-family: PingFangSC-Regular; font-family: PingFangSC-Regular;
font-size: 28rpx; font-size: 28rpx;
color: #999999; color: #999999;
padding: 0 30rpx; padding: 0 30rpx;
padding-top: 10rpx; padding-top: 10rpx;
} }
.titles { .titles {
font-family: PingFangSC-Medium; font-family: PingFangSC-Medium;
font-size: 36rpx; font-size: 36rpx;
color: #333333; color: #333333;
padding: 0 30rpx; padding: 0 30rpx;
padding-top: 30rpx; padding-top: 30rpx;
} }
.border { .border {
margin-left: 30rpx; margin-left: 30rpx;
width: 720rpx; width: 720rpx;
border-bottom: 2rpx solid #ddd; border-bottom: 2rpx solid #ddd;
opacity: 0.6; opacity: 0.6;
} }
.jobText { .jobText {
font-family: PingFangSC-Regular; font-family: PingFangSC-Regular;
font-size: 32rpx; font-size: 32rpx;
color: #666666; color: #666666;
} }
.nochoose { .nochoose {
color: #ccc; color: #ccc;
} }
.jobAddress { .jobAddress {
font-family: PingFangSC-Regular; font-family: PingFangSC-Regular;
font-size: 32rpx; font-size: 32rpx;
color: #999999; color: #999999;
} }
.jobcontent { .jobcontent {
padding: 30rpx; padding: 30rpx;
background: #fefefe; background: #fefefe;
@@ -183,44 +183,44 @@ export default {
align-items: flex-end; align-items: flex-end;
justify-content: space-between; justify-content: space-between;
line-height: 63rpx; line-height: 63rpx;
} }
.jobcontent image { .jobcontent image {
width: 40rpx; width: 40rpx;
height: 40rpx; height: 40rpx;
margin-bottom: 5px; margin-bottom: 5px;
} }
.listBody {} .listBody {}
.list_text { .list_text {
font-family: PingFangSC-Regular; font-family: PingFangSC-Regular;
font-size: 32rpx; font-size: 32rpx;
color: #666666; color: #666666;
} }
.list image { .list image {
width: 40rpx; width: 40rpx;
height: 40rpx; height: 40rpx;
margin-left: auto; margin-left: auto;
} }
.list { .list {
padding: 0 30rpx; padding: 0 30rpx;
height: 126rpx; height: 126rpx;
background: #fefefe; background: #fefefe;
display: flex; display: flex;
align-items: center; align-items: center;
justify-content: space-between; justify-content: space-between;
} }
.title image { .title image {
width: 40rpx; width: 40rpx;
height: 40rpx; height: 40rpx;
} }
.title { .title {
font-family: PingFangSC-Regular; font-family: PingFangSC-Regular;
font-size: 28rpx; font-size: 28rpx;
color: #999999; color: #999999;
@@ -229,43 +229,43 @@ export default {
background-color: #fefefe; background-color: #fefefe;
align-items: center; align-items: center;
justify-content: space-between; justify-content: space-between;
} }
.userInfo { .userInfo {
font-family: PingFangSC-Regular; font-family: PingFangSC-Regular;
font-size: 24rpx; font-size: 24rpx;
color: #999999; color: #999999;
} }
.name { .name {
margin-left: 20rpx; margin-left: 20rpx;
font-family: PingFangSC-Medium; font-family: PingFangSC-Medium;
font-size: 36rpx; font-size: 36rpx;
color: #333333; color: #333333;
line-height: 50rpx; line-height: 50rpx;
} }
.head image:last-child { .head image:last-child {
width: 40rpx; width: 40rpx;
height: 40rpx; height: 40rpx;
margin-left: auto; margin-left: auto;
} }
.head image { .head image {
width: 100rpx; width: 100rpx;
height: 100rpx; height: 100rpx;
} }
.head { .head {
padding: 30rpx; padding: 30rpx;
width: 690rpx; width: 690rpx;
background-color: #fefefe; background-color: #fefefe;
display: flex; display: flex;
align-items: center; align-items: center;
justify-content: flex-start; justify-content: flex-start;
} }
.bottombtn { .bottombtn {
background-color: #1b66ff; background-color: #1b66ff;
color: #fff; color: #fff;
text-align: center; text-align: center;
@@ -274,9 +274,9 @@ export default {
font-size: 32rpx; font-size: 32rpx;
height: 90rpx; height: 90rpx;
line-height: 90rpx; line-height: 90rpx;
} }
.btn { .btn {
background-color: #fefefe; background-color: #fefefe;
width: 690rpx; width: 690rpx;
padding: 30rpx; padding: 30rpx;
@@ -284,9 +284,9 @@ export default {
position: fixed; position: fixed;
bottom: 0; bottom: 0;
left: 0; left: 0;
} }
.disabledBtn { .disabledBtn {
background-color: #c8c9cc; background-color: #c8c9cc;
} }
</style> </style>

View File

@@ -35,7 +35,7 @@
<block v-if="activeTab == 0"> <block v-if="activeTab == 0">
<view v-if="newList.length > 0" style="padding-bottom: 20rpx;"> <view v-if="newList.length > 0" style="padding-bottom: 20rpx;">
<block v-for="(item, index) in newList" :key="index"> <block v-for="(item, index) in newList" :key="index">
<companyList :companyitem="item"></companyList> <companyList :companyitem="item" :position="userLocation"></companyList>
</block> </block>
</view> </view>
<view v-else> <view v-else>
@@ -125,7 +125,9 @@
getcoder getcoder
} from "@/api/map.js"; } from "@/api/map.js";
import verticalMenu from '@/components/vertical-menu/vertical-menu.vue'; import verticalMenu from '@/components/vertical-menu/vertical-menu.vue';
import {
mapGetters
} from 'vuex'
export default { export default {
components: { components: {
vTabs, vTabs,
@@ -134,7 +136,9 @@
workList, workList,
userrecruitList userrecruitList
}, },
computed: {
...mapGetters(['userLocation']),
},
data() { data() {
return { return {
policyContentList: [], policyContentList: [],
@@ -180,6 +184,7 @@
}, },
onLoad: function() { onLoad: function() {
this.getData() this.getData()
console.log('userLocation', this.userLocation)
// this.getPolicy() // this.getPolicy()
}, },
onShow: function() { onShow: function() {
@@ -398,7 +403,8 @@
return return
} }
if (this.activeTab === 2) { if (this.activeTab === 2) {
if (this.policyPage.current <= Math.ceil(this.policyPage.total / this.policyPage.size)) { if (this.policyPage.current <= Math.ceil(this.policyPage.total / this.policyPage
.size)) {
if (this.isSearch) { if (this.isSearch) {
this.getPolicySearch() this.getPolicySearch()
} else { } else {
@@ -527,7 +533,8 @@
this.policyPage.current += 1; this.policyPage.current += 1;
this.policyPage.total = res.data.data.total; this.policyPage.total = res.data.data.total;
if (res.data.data && res.data.data.records.length) { if (res.data.data && res.data.data.records.length) {
this.policyContentList = this.policyContentList.concat(res.data.data.records); this.policyContentList = this.policyContentList.concat(res.data.data
.records);
} }
}) })

View File

@@ -2,17 +2,19 @@ const getters = {
language: state => state.common.language, language: state => state.common.language,
website: state => state.common.website, website: state => state.common.website,
userInfo: state => state.user.userInfo, userInfo: state => state.user.userInfo,
userChecked:state=>state.user.userChecked, userChecked: state => state.user.userChecked,
area: state => state.area, area: state => state.area,
news: state=> state.news, news: state => state.news,
auth: state => state.auth, auth: state => state.auth,
authPass: (state,getters) => getters.auth.laborState && getters.auth.realNameState && getters.auth.bankCardState && getters.auth.insureState, authPass: (state, getters) => getters.auth.laborState && getters.auth.realNameState && getters.auth
.bankCardState && getters.auth.insureState,
authInfo: state => state.auth.authInfo, authInfo: state => state.auth.authInfo,
face: state => state.face, face: state => state.face,
realName: state => state.authentication.realName, realName: state => state.authentication.realName,
bankCard: state => state.authentication.bankCard, bankCard: state => state.authentication.bankCard,
autograph: state => state.authentication.autograph, autograph: state => state.authentication.autograph,
sendTimes:state => state.user.sendTimes,//接收短信的次数 sendTimes: state => state.user.sendTimes, //接收短信的次数
userLocation: state => state.user.userLocation, //用户位置
} }
export default getters export default getters

View File

@@ -64,8 +64,36 @@ const user = {
seeEnterprise: getStore({ //用户发送短信次数 seeEnterprise: getStore({ //用户发送短信次数
name: 'enterprise' name: 'enterprise'
}) || 0, // 0 个体招工 企业招工 }) || 0, // 0 个体招工 企业招工
userLocation: null
}, },
actions: { actions: {
getUserLocation({
commit,
dispatch
}) {
console.log('getUserLocation null1')
commit('setLocation', {
latitude: 31.133980,
longitude: 104.404419,
})
// uni.getLocation({
// type: 'gcj02',
// success: function(res) {
// const {
// longitude,
// latitude
// } = res
// commit('setLocation', {
// longitude,
// latitude
// })
// },
// fail: function(err) {
// commit('setLocation', null)
// },
// complete: function(e) {}
// })
},
//用户点击radio按钮 //用户点击radio按钮
UserCheckedBtn({ UserCheckedBtn({
commit commit
@@ -186,6 +214,9 @@ const user = {
}, },
}, },
mutations: { mutations: {
setLocation(state, val) {
state.userLocation = val
},
setEnterprise(state, val) { // 0 个体招工 企业招工 setEnterprise(state, val) { // 0 个体招工 企业招工
state.seeEnterprise = val; state.seeEnterprise = val;
setStore({ setStore({