4 changed files with 548 additions and 5 deletions
@ -0,0 +1,514 @@ |
|||
<template> |
|||
<div> |
|||
<div class="dialog-h-content scroll-h"> |
|||
|
|||
<div v-if="initLoading" |
|||
class="m-row"> |
|||
<div class="m-row-2"> |
|||
<div class="info-prop"> |
|||
<span class="info-title-3">主办方:</span> |
|||
<span>{{ formData.sponsorName }}</span> |
|||
</div> |
|||
|
|||
<div class="info-prop"> |
|||
<span class="info-title-3">联系电话:</span> |
|||
<span>{{ formData.sponsorTel}}</span> |
|||
</div> |
|||
</div> |
|||
|
|||
<div class="m-row-2"> |
|||
|
|||
<div class="info-prop"> |
|||
<span class="info-title-3">活动标题:</span> |
|||
<span>{{ formData.title}}</span> |
|||
</div> |
|||
|
|||
<div class="info-prop"> |
|||
<span class="info-title-3">报名仅限志愿者:</span> |
|||
<span>{{formData.volunteerLimit?'是':'否'}}</span> |
|||
</div> |
|||
</div> |
|||
|
|||
<div class="m-row-2"> |
|||
|
|||
<div class="info-prop"> |
|||
<span class="info-title-3">封面:</span> |
|||
<!-- <div class="info-pics"> --> |
|||
<img :src="formData.coverPic" |
|||
style="width:80px;height:80px"> |
|||
<!-- </div> --> |
|||
</div> |
|||
<div class="info-prop"> |
|||
<span class="info-title-3">报名无需审核:</span> |
|||
<span>{{formData.auditSwitch?'否':'是' }}</span> |
|||
</div> |
|||
</div> |
|||
|
|||
<div class="m-row-2"> |
|||
|
|||
<div class="info-prop"> |
|||
<span class="info-title-3">活动时间:</span> |
|||
<span>{{ formData.actStartTime?formData.actStartTime:'--' }}</span>至 |
|||
<span>{{ formData.actEndTime?formData.actEndTime:'--' }}</span> |
|||
</div> |
|||
<div class="info-prop"> |
|||
<span class="info-title-3">报名截止时间:</span> |
|||
<span>{{ formData.signUpEndTime?formData.signUpEndTime:'--' }}</span> |
|||
</div> |
|||
</div> |
|||
|
|||
<div class="m-row-2"> |
|||
|
|||
<div class="info-prop"> |
|||
<span class="info-title-3">活动人数:</span> |
|||
<span>{{ formData.actQuota?formData.actQuota:0 }}</span> |
|||
</div> |
|||
<div class="info-prop"> |
|||
<span class="info-title-3">报名条件:</span> |
|||
<span>{{ formData.requirement?formData.requirement:'--' }}</span> |
|||
</div> |
|||
</div> |
|||
|
|||
<div class="m-row-2"> |
|||
|
|||
<div class="info-prop"> |
|||
<span class="info-title-3">活动积分:</span> |
|||
<span>{{ formData.reward?formData.reward:0}}</span> |
|||
</div> |
|||
<div class="info-prop"> |
|||
<span class="info-title-3">签到时间:</span> |
|||
<span>{{ formData.signInStartTime?formData.signInStartTime:'--' }}</span>至 |
|||
<span>{{ formData.signInEndTime?formData.signInEndTime:'--' }}</span> |
|||
|
|||
</div> |
|||
|
|||
</div> |
|||
|
|||
<div class="m-row-2"> |
|||
|
|||
<div class="info-prop"> |
|||
<span class="info-title-3">联系人:</span> |
|||
<span>{{ formData.sponsorContacts? formData.sponsorContacts:'--' }}</span> |
|||
</div> |
|||
<div class="info-prop"> |
|||
<span class="info-title-3">签到有效范围(米):</span> |
|||
<span>{{ formData.signInRadius? formData.signInRadius:'--' }}</span> |
|||
</div> |
|||
|
|||
</div> |
|||
<div class="m-row-2"> |
|||
|
|||
<div class="info-prop"> |
|||
<span class="info-title-3">活动地点:</span> |
|||
<span>{{ formData.actAddress? formData.actAddress:'--' }}</span> |
|||
</div> |
|||
<div class="info-prop"> |
|||
<span class="info-title-3">签到地点:</span> |
|||
<span>{{ formData.signInAddress? formData.signInAddress:'--' }}</span> |
|||
</div> |
|||
|
|||
</div> |
|||
<div class="m-row-2"> |
|||
|
|||
<div class="info-prop"> |
|||
<span class="info-title-3">活动地图位置:</span> |
|||
<div class="div_map2"> |
|||
<div id="map_act_id"></div> |
|||
</div> |
|||
</div> |
|||
<div class="info-prop"> |
|||
<span class="info-title-3">签到地图位置:</span> |
|||
<div class="div_map2"> |
|||
<div id="map_signin_id"></div> |
|||
</div> |
|||
|
|||
</div> |
|||
|
|||
</div> |
|||
|
|||
<div class="m-info"> |
|||
<div class="info-prop"> |
|||
<span class="info-title-3">活动详情:</span> |
|||
<p v-if="formData.richTextFlag" |
|||
class="text_p" |
|||
v-html="formData.actContentHtml"></p> |
|||
|
|||
<div v-else> |
|||
<div v-for="(item,index) in formData.actContent" |
|||
:key="index"> |
|||
<div v-if="item.contentType==='text'">{{item.content}}</div> |
|||
<img v-if="item.contentType==='img'" |
|||
class="img_icon" |
|||
:src="item.content"> |
|||
</div> |
|||
</div> |
|||
|
|||
</div> |
|||
</div> |
|||
<div v-if="formData.summaryFlag" |
|||
class="m-info"> |
|||
<div class="info-prop"> |
|||
<span class="info-title-3">活动回顾:</span> |
|||
<p v-if="formData.richTextFlag" |
|||
class="text_p" |
|||
v-html="formData.summaryContentHtml"></p> |
|||
|
|||
<div v-else> |
|||
<div v-for="(item,index) in formData.summaryContent" |
|||
:key="index"> |
|||
<div v-if="item.contentType==='text'">{{item.content}}</div> |
|||
<img v-if="item.contentType==='img'" |
|||
class="img_icon" |
|||
:src="item.content"> |
|||
<p v-if="item.contentType==='rich_text'" |
|||
class="text_p" |
|||
v-html="item.content"></p> |
|||
</div> |
|||
</div> |
|||
|
|||
</div> |
|||
</div> |
|||
</div> |
|||
|
|||
</div> |
|||
|
|||
</div> |
|||
</template> |
|||
|
|||
<script> |
|||
import { mapGetters } from 'vuex' |
|||
import { Loading } from 'element-ui' // 引入Loading服务 |
|||
import { requestPost } from '@/js/dai/request' |
|||
|
|||
|
|||
let loading // 加载动画 |
|||
|
|||
var map_act; |
|||
var search_act; |
|||
var markers_act; |
|||
var infoWindowList_act; |
|||
var geocoder_act; // 新建一个正逆地址解析类 |
|||
|
|||
var map_signin; |
|||
var search_signin; |
|||
var markers_signin; |
|||
var infoWindowList_signin; |
|||
var geocoder_signin; // 新建一个正逆地址解析类 |
|||
|
|||
export default { |
|||
data () { |
|||
|
|||
|
|||
return { |
|||
initLoading: false, |
|||
formType: 'add', //表单操作类型 add新增,edit编辑,detail详情 |
|||
btnDisable: false, |
|||
customerId: '', |
|||
actId: '', |
|||
|
|||
formData: { |
|||
}, |
|||
|
|||
|
|||
|
|||
} |
|||
}, |
|||
|
|||
mounted () { |
|||
this.customerId = localStorage.getItem('customerId') |
|||
|
|||
}, |
|||
|
|||
methods: { |
|||
diaDestroy () { |
|||
if (map_act) { |
|||
map_act.destroy() |
|||
} |
|||
if (map_signin) { |
|||
map_signin.destroy() |
|||
} |
|||
}, |
|||
|
|||
async initForm (actId) { |
|||
|
|||
this.startLoading() |
|||
this.actId = actId |
|||
this.formData.actId = actId |
|||
await this.loadFormData() |
|||
|
|||
this.initLoading = true |
|||
|
|||
this.$nextTick(() => { |
|||
this.initMap() |
|||
}) |
|||
this.endLoading() |
|||
|
|||
|
|||
}, |
|||
|
|||
|
|||
//加载form |
|||
async loadFormData () { |
|||
const url = '/heart/work/act/detail' |
|||
|
|||
let params = { |
|||
actId: this.actId |
|||
} |
|||
|
|||
const { data, code, msg } = await requestPost(url, params) |
|||
|
|||
if (code === 0) { |
|||
|
|||
this.formData = JSON.parse(JSON.stringify(data)); |
|||
if (this.formData.richTextFlag) { |
|||
|
|||
if (this.formData.actContent && this.formData.actContent.length > 0) { |
|||
this.formData.actContentHtml = this.formData.actContent[0].content |
|||
} |
|||
if (this.formData.summaryContent && this.formData.summaryContent.length > 0) { |
|||
this.formData.summaryContentHtml = this.formData.summaryContent[0].content |
|||
} |
|||
} |
|||
|
|||
|
|||
} else { |
|||
this.$message.error(msg) |
|||
} |
|||
}, |
|||
|
|||
|
|||
|
|||
dormatHtml (content) { |
|||
let c = '' |
|||
if (content.indexOf('DOCTYPE') != -1) { |
|||
c = content.slice(45, -16); |
|||
} |
|||
console.log('content', typeof content) |
|||
return c || content |
|||
}, |
|||
|
|||
|
|||
// 地图初始化函数,本例取名为init,开发者可根据实际情况定义 |
|||
initMap () { |
|||
// 定义地图中心点坐标 |
|||
var centerAct = new window.TMap.LatLng(this.formData.actLatitude, this.formData.actLongitude); |
|||
var centerSign = new window.TMap.LatLng(this.formData.signInLatitude, this.formData.signInLongitude); |
|||
// 定义map变量,调用 TMap.Map() 构造函数创建地图 |
|||
map_act = new window.TMap.Map(document.getElementById("map_act_id"), { |
|||
center: centerAct, // 设置地图中心点坐标 |
|||
zoom: 17.2, // 设置地图缩放级别 |
|||
pitch: 43.5, // 设置俯仰角 |
|||
rotation: 45, // 设置地图旋转角度 |
|||
}); |
|||
map_signin = new window.TMap.Map(document.getElementById("map_signin_id"), { |
|||
center: centerSign, // 设置地图中心点坐标 |
|||
zoom: 17.2, // 设置地图缩放级别 |
|||
pitch: 43.5, // 设置俯仰角 |
|||
rotation: 45, // 设置地图旋转角度 |
|||
}); |
|||
|
|||
// search_act = new window.TMap.service.Search({ pageSize: 10 }); |
|||
// 新建一个地点搜索类 |
|||
markers_act = new TMap.MultiMarker({ |
|||
map: map_act, |
|||
geometries: [], |
|||
}); |
|||
infoWindowList_act = Array(10); |
|||
|
|||
geocoder_act = new TMap.service.Geocoder(); // 新建一个正逆地址解析类 |
|||
|
|||
// search_signin = new window.TMap.service.Search({ pageSize: 10 }); |
|||
// 新建一个地点搜索类 |
|||
markers_signin = new TMap.MultiMarker({ |
|||
map: map_signin, |
|||
geometries: [], |
|||
}); |
|||
infoWindowList_signin = Array(10); |
|||
|
|||
geocoder_signin = new TMap.service.Geocoder(); // 新建一个正逆地址解析类 |
|||
|
|||
// 监听地图平移结束 |
|||
map_act.on("panend", (e) => { |
|||
this.handleMoveCenterAct(e); |
|||
}); |
|||
this.handleMoveCenterAct(); |
|||
|
|||
// 监听地图平移结束 |
|||
map_signin.on("panend", (e) => { |
|||
this.handleMoveCenterSignin(e); |
|||
}); |
|||
this.handleMoveCenterSignin(); |
|||
}, |
|||
|
|||
setMarkerAct (lat, lng) { |
|||
markers_act.setGeometries([]); |
|||
markers_act.add([ |
|||
{ |
|||
id: "4", |
|||
styleId: "marker", |
|||
position: new TMap.LatLng(lat, lng), |
|||
properties: { |
|||
title: "marker4", |
|||
}, |
|||
}, |
|||
]); |
|||
}, |
|||
|
|||
|
|||
|
|||
handleMoveCenterAct (e) { |
|||
//修改地图中心点 |
|||
const center = map_act.getCenter(); |
|||
const lat = center.getLat(); |
|||
const lng = center.getLng(); |
|||
this.formData.actLatitude = lat; |
|||
this.formData.actLongitude = lng; |
|||
this.setMarkerAct(lat, lng); |
|||
|
|||
if (e && e.originalEvent) { |
|||
geocoder_act |
|||
.getAddress({ location: new TMap.LatLng(lat, lng) }) // 将给定的坐标位置转换为地址 |
|||
.then((result) => { |
|||
this.formData.actAddress = result.result.address; |
|||
}); |
|||
} |
|||
}, |
|||
setMarkerSignin (lat, lng) { |
|||
markers_signin.setGeometries([]); |
|||
markers_signin.add([ |
|||
{ |
|||
id: "4", |
|||
styleId: "marker", |
|||
position: new TMap.LatLng(lat, lng), |
|||
properties: { |
|||
title: "marker4", |
|||
}, |
|||
}, |
|||
]); |
|||
}, |
|||
|
|||
handleSearchMapSignin () { |
|||
infoWindowList_signin.forEach((infoWindow) => { |
|||
infoWindow.close(); |
|||
}); |
|||
infoWindowList_signin.length = 0; |
|||
markers_signin.setGeometries([]); |
|||
// 在地图显示范围内以给定的关键字搜索地点 |
|||
search_signin |
|||
.searchRectangle({ |
|||
keyword: this.formData.signInAddress, |
|||
bounds: map_signin.getBounds(), |
|||
}) |
|||
.then((result) => { |
|||
let { data } = result; |
|||
if (Array.isArray(data) && data.length > 0) { |
|||
const { |
|||
location: { lat, lng }, |
|||
} = data[0]; |
|||
map_signin.setCenter(new TMap.LatLng(lat, lng)); |
|||
this.setMarkerSignin(lat, lng); |
|||
this.formData.signInLatitude = lat; |
|||
this.formData.signInLongitude = lng; |
|||
} else { |
|||
this.$message.error("未检索到相关位置坐标"); |
|||
} |
|||
}); |
|||
}, |
|||
|
|||
handleMoveCenterSignin (e) { |
|||
//修改地图中心点 |
|||
const center = map_signin.getCenter(); |
|||
const lat = center.getLat(); |
|||
const lng = center.getLng(); |
|||
this.formData.signInLatitude = lat; |
|||
this.formData.signInLongitude = lng; |
|||
this.setMarkerSignin(lat, lng); |
|||
|
|||
if (e && e.originalEvent) { |
|||
geocoder_signin |
|||
.getAddress({ location: new TMap.LatLng(lat, lng) }) // 将给定的坐标位置转换为地址 |
|||
.then((result) => { |
|||
this.formData.signInAddress = result.result.address; |
|||
}); |
|||
} |
|||
}, |
|||
|
|||
handleCancle () { |
|||
|
|||
this.resetData() |
|||
this.$emit('dialogCancle') |
|||
|
|||
}, |
|||
|
|||
|
|||
// 开启加载动画 |
|||
startLoading () { |
|||
loading = Loading.service({ |
|||
lock: true, // 是否锁定 |
|||
text: '正在加载……', // 加载中需要显示的文字 |
|||
background: 'rgba(0,0,0,.7)' // 背景颜色 |
|||
}) |
|||
}, |
|||
// 结束加载动画 |
|||
endLoading () { |
|||
// clearTimeout(timer); |
|||
if (loading) { |
|||
loading.close() |
|||
} |
|||
} |
|||
}, |
|||
computed: { |
|||
|
|||
|
|||
}, |
|||
props: { |
|||
|
|||
|
|||
} |
|||
} |
|||
</script> |
|||
<style lang="scss" scoped > |
|||
@import "@/assets/scss/modules/management/detail-main.scss"; |
|||
</style> |
|||
<style lang="scss" scoped > |
|||
.avatar-uploader { |
|||
margin: 0 0 0 20px; |
|||
} |
|||
.div-tooltip { |
|||
margin-left: 10px; |
|||
color: red; |
|||
} |
|||
|
|||
.text_p { |
|||
width: 1000px; |
|||
margin: 0 0; |
|||
border: 3px; |
|||
|
|||
p { |
|||
margin: 0; |
|||
padding: 0; |
|||
-webkit-margin-start: 0; |
|||
-webkit-margin-end: 0; |
|||
} |
|||
} |
|||
.div_content { |
|||
width: 1000px; |
|||
} |
|||
.img_icon { |
|||
width: 200px; |
|||
height: 200px; |
|||
} |
|||
</style> |
|||
|
|||
<style lang="scss"> |
|||
.el-dialog__body { |
|||
padding: 0 10px 20px !important; |
|||
} |
|||
|
|||
.hide { |
|||
.el-upload--picture-card { |
|||
display: none !important; |
|||
} |
|||
} |
|||
</style> |
|||
|
Loading…
Reference in new issue