Browse Source

爱心活动

feature
jiangyy 3 years ago
parent
commit
6b9e0f7957
  1. 1
      src/views/modules/communityParty/heart/heartDetail.vue
  2. 652
      src/views/modules/communityParty/heart/heartForm.vue
  3. 363
      src/views/modules/communityService/dqfwzx/cpts/edit.vue

1
src/views/modules/communityParty/heart/heartDetail.vue

@ -183,6 +183,7 @@
import { mapGetters } from 'vuex'
import { Loading } from 'element-ui' // Loading
import { requestPost } from '@/js/dai/request'
import daiMap from "@/utils/dai-map";
let loading //

652
src/views/modules/communityParty/heart/heartForm.vue

@ -1,59 +1,48 @@
<template>
<div>
<div class="dialog-h-content scroll-h">
<el-form
ref="ref_form"
<el-form ref="ref_form"
:inline="true"
:model="formData"
:rules="dataRule"
:disabled="formType === 'detail'"
class="div_form"
>
class="div_form">
<div class="form_flex">
<div class="form_item">
<el-form-item label="主办方" prop="sponsorId" label-width="150px">
<el-cascader
v-if="formData.richTextFlag || formType === 'add'"
<el-form-item label="主办方"
prop="sponsorId"
label-width="150px">
<el-cascader v-if="formData.richTextFlag || formType === 'add'"
class="item_width_6"
ref="myCascader"
v-model="agencyIdArray"
:options="orgOptions"
:props="orgOptionProps"
:show-all-levels="false"
@change="handleChangeAgency"
></el-cascader>
<el-input
v-else
@change="handleChangeAgency"></el-cascader>
<el-input v-else
class="item_width_6"
v-model="formData.sponsorName"
></el-input>
v-model="formData.sponsorName"></el-input>
</el-form-item>
<el-form-item
label="活动标题"
<el-form-item label="活动标题"
prop="title"
label-width="150px"
style="display: block"
>
<el-input
class="item_width_6"
style="display: block">
<el-input class="item_width_6"
type="textarea"
maxlength="50"
show-word-limit
:rows="2"
placeholder="请输入活动标题,不超过50字"
v-model="formData.title"
></el-input>
v-model="formData.title"></el-input>
</el-form-item>
<el-form-item
label="封面"
<el-form-item label="封面"
prop="coverPic"
label-width="150px"
style="display: block"
>
<el-upload
:headers="$getElUploadHeaders()"
style="display: block">
<el-upload :headers="$getElUploadHeaders()"
:class="['avatar-uploader', { hide: hideUploadBtn }]"
ref="uploadPic"
:action="uploadUlr"
@ -64,343 +53,283 @@
:file-list="replayImgList"
:on-change="handleEditChange"
:on-success="handleSuccess"
:limit="1"
>
:limit="1">
<span class="font-14">选择图片</span>
</el-upload>
</el-form-item>
<el-form-item
label="活动时间"
<el-form-item label="活动时间"
label-width="150px"
prop="actStartTime"
>
<el-date-picker
v-model="formData.actStartTime"
prop="actStartTime">
<el-date-picker v-model="formData.actStartTime"
class="list_item_width_3"
type="datetime"
value-format="yyyy-MM-dd HH:mm"
format="yyyy-MM-dd HH:mm"
placeholder="开始时间"
>
placeholder="开始时间">
</el-date-picker>
<span class="data-tag"></span>
<el-date-picker
v-model="formData.actEndTime"
<el-date-picker v-model="formData.actEndTime"
class="list_item_width_3 data-tag"
type="datetime"
value-format="yyyy-MM-dd HH:mm"
format="yyyy-MM-dd HH:mm"
placeholder="结束时间"
>
placeholder="结束时间">
</el-date-picker>
</el-form-item>
<el-form-item
label="活动人数"
<el-form-item label="活动人数"
prop="actQuota"
style="display: block"
label-width="150px"
>
<el-input-number
class="item_width_2"
label-width="150px">
<el-input-number class="item_width_2"
:min="0"
v-model="formData.actQuota"
label="活动人数"
></el-input-number>
label="活动人数"></el-input-number>
</el-form-item>
<el-form-item
label="活动积分"
<el-form-item label="活动积分"
prop="reward"
style="display: block"
label-width="150px"
>
<el-input-number
class="item_width_2"
label-width="150px">
<el-input-number class="item_width_2"
:min="0"
v-model="formData.reward"
label="活动积分"
></el-input-number>
label="活动积分"></el-input-number>
</el-form-item>
<el-form-item
label="联系人"
<el-form-item label="联系人"
prop="sponsorContacts"
label-width="150px"
style="display: block"
>
<el-input
class="item_width_6"
style="display: block">
<el-input class="item_width_6"
maxlength="20"
placeholder="请输入联系人"
v-model="formData.sponsorContacts"
>
v-model="formData.sponsorContacts">
</el-input>
</el-form-item>
</div>
<div class="form_item">
<el-form-item
label="联系电话"
<el-form-item label="联系电话"
prop="sponsorTel"
label-width="150px"
style="display: block"
>
<el-input
class="item_width_6"
style="display: block">
<el-input class="item_width_6"
maxlength="20"
placeholder="请输入联系电话"
v-model="formData.sponsorTel"
>
v-model="formData.sponsorTel">
</el-input>
</el-form-item>
<el-form-item
label="报名仅限志愿者"
<el-form-item label="报名仅限志愿者"
prop="volunteerLimit"
label-width="150px"
style="display: block"
>
style="display: block">
<el-checkbox v-model="formData.volunteerLimit"></el-checkbox>
</el-form-item>
<el-form-item
label="报名无需审核"
<el-form-item label="报名无需审核"
prop="auditSwitch"
label-width="150px"
style="display: block"
>
style="display: block">
<el-checkbox v-model="noauditSwitch"></el-checkbox>
<span class="div-tooltip"
>选中后报名参加活动人员可以直接审核通过</span
>
<span class="div-tooltip">选中后报名参加活动人员可以直接审核通过</span>
</el-form-item>
<el-form-item
label="报名截止时间"
<el-form-item label="报名截止时间"
style="display: block"
prop="signUpEndTime"
label-width="150px"
>
<el-date-picker
class="item_width_2"
label-width="150px">
<el-date-picker class="item_width_2"
v-model="formData.signUpEndTime"
value-format="yyyy-MM-dd HH:mm"
format="yyyy-MM-dd HH:mm"
type="datetime"
placeholder="选择时间"
>
placeholder="选择时间">
</el-date-picker>
</el-form-item>
<el-form-item
label="报名条件"
<el-form-item label="报名条件"
prop="requirement"
label-width="150px"
style="display: block"
>
<el-input
class="item_width_6"
style="display: block">
<el-input class="item_width_6"
type="textarea"
maxlength="200"
show-word-limit
:rows="7"
placeholder="请输入报名条件,不超过200字"
v-model="formData.requirement"
></el-input>
v-model="formData.requirement"></el-input>
</el-form-item>
<el-form-item
label="签到时间"
<el-form-item label="签到时间"
label-width="150px"
prop="signInStartTime"
>
<el-date-picker
v-model="formData.signInStartTime"
prop="signInStartTime">
<el-date-picker v-model="formData.signInStartTime"
class="list_item_width_3"
type="datetime"
value-format="yyyy-MM-dd HH:mm"
format="yyyy-MM-dd HH:mm"
placeholder="开始时间"
>
placeholder="开始时间">
</el-date-picker>
<span class="data-tag"></span>
<el-date-picker
v-model="formData.signInEndTime"
<el-date-picker v-model="formData.signInEndTime"
class="list_item_width_3 data-tag"
type="datetime"
value-format="yyyy-MM-dd HH:mm"
format="yyyy-MM-dd HH:mm"
placeholder="结束时间"
>
placeholder="结束时间">
</el-date-picker>
</el-form-item>
<el-form-item
label="签到有效范围(米)"
<el-form-item label="签到有效范围(米)"
prop="signInRadius"
style="display: block"
label-width="150px"
>
<el-input-number
class="item_width_2"
label-width="150px">
<el-input-number class="item_width_2"
:min="0"
v-model="formData.signInRadius"
label="签到有效范围"
></el-input-number>
label="签到有效范围"></el-input-number>
</el-form-item>
</div>
</div>
<div class="form_flex">
<div class="form_item">
<el-form-item
label="活动地点"
prop="actAddress"
<el-form-item label="活动位置"
prop="longitude"
label-width="150px"
>
<div style="width: 400px">
<el-input
class="item_width_4"
maxlength="100"
style="display: block">
<div style="width: 500px">
<el-select v-model="searchValueAct"
filterable
style="width: 330px"
show-word-limit
placeholder="请输入所在地址"
v-model="formData.actAddress"
>
</el-input>
<el-button
style="margin-left: 10px"
type="default"
size="small"
@click="handleSearchMapAct"
>查询</el-button
>
<div id="map_act_id" class="div_map"></div>
<!-- <div style="margin-top: 10px">
<span>经度</span>
<el-input class="item_width_3"
maxlength="50"
placeholder="请输入经度"
v-model="formData.actLatitude">
</el-input>
<span style="margin-left: 20px">纬度</span>
<el-input class="item_width_3"
remote
:reserve-keyword="true"
placeholder="请输入关键词"
:remote-method="remoteMethodAct"
:loading="loading">
<el-option v-for="(item,index) in searchOptionsAct"
@click.native="handleClickKeyAct(index)"
:key="item.value"
:label="item.label"
:value="item.value">
</el-option>
</el-select>
<div id="app_heart_act"
class="div_map"></div>
</div>
</el-form-item>
<el-form-item label="活动地址 "
prop="actAddress"
label-width="150px"
style="display: block">
<el-input class="item_width_1"
maxlength="50"
placeholder="请输入纬度"
v-model="formData.actLongitude">
show-word-limit
placeholder="请输入位置 "
v-model="formData.actAddress">
</el-input>
</div> -->
</div>
</el-form-item>
</div>
<div class="form_item">
<el-form-item
label="签到地点"
<el-form-item label="签到位置"
prop="longitude"
label-width="150px"
style="display: block">
<div style="width: 500px">
<el-select v-model="searchValueSignin"
filterable
style="width: 500px"
remote
:reserve-keyword="true"
placeholder="请输入关键词"
:remote-method="remoteMethodSignin"
:loading="loading">
<el-option v-for="(item,index) in searchOptionsSignin"
@click.native="handleClickKeySignin(index)"
:key="item.value"
:label="item.label"
:value="item.value">
</el-option>
</el-select>
<div id="app_heart_signin"
class="div_map"></div>
</div>
</el-form-item>
<el-form-item label="签到地址 "
prop="signInAddress"
label-width="150px"
>
<div style="width: 400px">
<el-input
class="item_width_4"
maxlength="100"
style="width: 330px"
show-word-limit
placeholder="请输入所在地址"
v-model="formData.signInAddress"
>
</el-input>
<el-button
style="margin-left: 10px"
type="default"
size="small"
@click="handleSearchMapSignin"
>查询</el-button
>
<div id="map_signin_id" class="div_map"></div>
<!-- <div style="margin-top: 10px">
<span>经度</span>
<el-input class="item_width_3"
maxlength="50"
placeholder="请输入经度"
v-model="formData.signInLatitude">
</el-input>
<span style="margin-left: 20px">纬度</span>
<el-input class="item_width_3"
style="display: block">
<el-input class="item_width_1"
maxlength="50"
placeholder="请输入纬度"
v-model="formData.signInLongitude">
show-word-limit
placeholder="请输入位置 "
v-model="formData.signInAddress">
</el-input>
</div> -->
</div>
</el-form-item>
</div>
</div>
<el-form-item
label="活动详情"
<el-form-item label="活动详情"
prop="actContentHtml"
label-width="150px"
style="display: block"
>
style="display: block">
<div v-if="formData.richTextFlag || formType === 'add'">
<Tinymce
class="tinymce_view"
<Tinymce class="tinymce_view"
v-if="formType != 'detail'"
v-model="formData.actContentHtml"
:height="250"
style="width: 1000px"
:customerId="customerId"
placeholder="在这里输入文字"
/>
<p v-else class="text_p" v-html="formData.actContentHtml"></p>
placeholder="在这里输入文字" />
<p v-else
class="text_p"
v-html="formData.actContentHtml"></p>
</div>
<div class="div_content" v-else>
<div v-for="(item, index) in formData.actContent" :key="index">
<div class="div_content"
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'"
<img v-if="item.contentType === 'img'"
class="img_icon"
:src="item.content"
/>
:src="item.content" />
</div>
</div>
</el-form-item>
<el-form-item
v-if="formData.summaryFlag"
<el-form-item v-if="formData.summaryFlag"
label="活动回顾"
prop="summaryContentHtml"
label-width="150px"
style="display: block"
>
style="display: block">
<div v-if="formData.richTextFlag">
<p class="text_p" v-html="formData.summaryContentHtml"></p>
<p class="text_p"
v-html="formData.summaryContentHtml"></p>
</div>
<div class="div_content" v-else>
<div v-for="(item, index) in formData.summaryContent" :key="index">
<div class="div_content"
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'"
<img v-if="item.contentType === 'img'"
class="img_icon"
:src="item.content"
/>
<p
v-if="item.contentType === 'rich_text'"
:src="item.content" />
<p v-if="item.contentType === 'rich_text'"
class="text_p"
v-html="item.content"
></p>
v-html="item.content"></p>
</div>
</div>
</el-form-item>
</el-form>
</div>
<div class="div_btn">
<el-button size="small" @click="handleCancle"> </el-button>
<el-button
size="small"
<el-button size="small"
@click="handleCancle"> </el-button>
<el-button size="small"
v-if="formType != 'detail'"
type="primary"
:disabled="btnDisable"
@click="handleComfirm"
> </el-button
>
@click="handleComfirm"> </el-button>
</div>
</div>
</template>
@ -411,6 +340,7 @@ import { Loading } from "element-ui"; // 引入Loading服务
import { requestPost } from "@/js/dai/request";
import Tinymce from "@c/tinymce2/index.vue";
import daiMap from "@/utils/dai-map";
let loading; //
@ -463,6 +393,12 @@ export default {
};
return {
formType: "add", // addeditdetail
searchOptionsAct: [],
searchValueAct: '',
resultListAct: [],
searchOptionsSignin: [],
searchValueSignin: '',
resultListSignin: [],
btnDisable: false,
customerId: "",
actId: "",
@ -545,7 +481,7 @@ export default {
mounted () {
this.customerId = localStorage.getItem("customerId");
this.loadSponsorlist();
this.initMap();
// this.initMap();
// this.replayImgList.push()
},
@ -553,7 +489,7 @@ export default {
methods: {
async initForm (type, actId) {
this.$refs.ref_form.resetFields();
let { latitude, longitude } = this.$store.state.user;
this.formType = type;
if (actId) {
this.startLoading();
@ -564,9 +500,17 @@ export default {
} else {
this.actId = "";
this.formData.actId = "";
this.formData.actLatitude = latitude
this.formData.actLongitude = longitude
this.formData.signInLatitude = latitude
this.formData.signInLongitude = longitude
// this.formData = JSON.parse(JSON.stringify(this.formDataTemp));
// this.agencyIdArray = this.formData.sponsorPath.split(',')
}
this.$nextTick(() => {
this.initMap(this.formData.actLatitude, this.formData.actLongitude, this.formData.signInLatitude, this.formData.signInLongitude)
})
},
//
@ -766,188 +710,170 @@ export default {
},
// init
initMap() {
//
var center = new window.TMap.LatLng(36.0722275, 120.38945519);
// map TMap.Map()
map_act = new window.TMap.Map(document.getElementById("map_act_id"), {
center: center, //
initMap (latitude1, longitude1, latitude2, longitude2) {
map_act = new daiMap(
document.getElementById("app_heart_act"),
{ latitude1, longitude1 },
{
zoom: 16.2, //
pitch: 43.5, //
rotation: 45, //
});
map_signin = new window.TMap.Map(
document.getElementById("map_signin_id"),
}
);
map_signin = new daiMap(
document.getElementById("app_heart_signin"),
{ latitude2, longitude2 },
{
center: center, //
zoom: 16.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) => {
map_act.on("dragend", (e) => {
this.handleMoveCenterAct(e);
});
this.handleMoveCenterAct();
map_act.setCenter(latitude1, longitude1);
map_act.setMarker(latitude1, longitude1);
//
map_signin.on("panend", (e) => {
map_signin.on("dragend", (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",
},
},
]);
},
map_signin.setCenter(latitude2, longitude2);
map_signin.setMarker(latitude2, longitude2);
handleSearchMapAct() {
infoWindowList_act.forEach((infoWindow) => {
infoWindow.close();
});
infoWindowList_act.length = 0;
markers_act.setGeometries([]);
//
search_act
.searchNearby({
keyword: this.formData.actAddress,
radius: 1000,
autoExtend: true,
center: map_act.getCenter(),
})
.then((result) => {
let { data } = result;
if (Array.isArray(data) && data.length > 0) {
const {
location: { lat, lng },
} = data[0];
map_act.setCenter(new TMap.LatLng(lat, lng));
this.setMarkerAct(lat, lng);
this.formData.actLatitude = lat;
this.formData.actLongitude = lng;
} else {
this.$message.error("未检索到相关位置坐标");
}
});
},
handleMoveCenterAct(e) {
async handleMoveCenterAct () {
//
const center = map_act.getCenter();
const lat = center.getLat();
const lng = center.getLng();
const { lat, lng } = map_act.getCenter();
this.formData.actLatitude = lat;
this.formData.actLongitude = lng;
this.setMarkerAct(lat, lng);
map_act.setMarker(lat, lng);
let { msg, data } = await map_act.getAddress(lat, lng);
if (msg == "success") {
this.formData.actAddress = data.address
this.searchValueAct = data.address
this.searchOptionsAct = []
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",
},
},
]);
async handleMoveCenterSignin () {
//
const { lat, lng } = map_signin.getCenter();
this.formData.signInLatitude = lat;
this.formData.signInLongitude = lng;
map_signin.setMarker(lat, lng);
let { msg, data } = await map_signin.getAddress(lat, lng);
if (msg == "success") {
this.formData.signInAddress = data.address
this.searchValueSignin = data.address
this.searchOptionsSignin = []
}
},
handleSearchMapSignin() {
infoWindowList_signin.forEach((infoWindow) => {
infoWindow.close();
async remoteMethodAct (query) {
if (query !== '') {
this.loading = true;
const { msg, data } = await map_act.searchNearby(query);
this.loading = false;
this.resultListAct = []
if (msg == "success" && data.resultList && data.resultList.length > 0) {
if (data.resultList && data.resultList.length > 0) {
this.resultListAct = data.resultList
this.searchOptions = this.resultListAct.map(item => {
return { value: `${item.hotPointID}`, label: `${item.address + item.name}` };
});
infoWindowList_signin.length = 0;
markers_signin.setGeometries([]);
//
search_signin
.searchNearby({
keyword: this.formData.signInAddress,
radius: 1000,
autoExtend: true,
center: map_signin.getCenter(),
})
.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.searchOptions = [
{
value: '0',
label: '未检索到结果'
}
]
}
} else {
this.$message.error("未检索到相关位置坐标");
this.searchOptions = [];
}
});
},
async remoteMethodSignin (query) {
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 (query !== '') {
this.loading = true;
const { msg, data } = await map.searchNearby(query);
this.loading = false;
this.resultListSignin = []
if (msg == "success" && data.resultList && data.resultList.length > 0) {
if (data.resultList && data.resultList.length > 0) {
this.resultListSignin = data.resultList
this.searchOptions = this.resultListSignin.map(item => {
return { value: `${item.hotPointID}`, label: `${item.address + item.name}` };
if (e && e.originalEvent) {
geocoder_signin
.getAddress({ location: new TMap.LatLng(lat, lng) }) //
.then((result) => {
this.formData.signInAddress = result.result.address;
});
}
} else {
this.searchOptions = [
{
value: '0',
label: '未检索到结果'
}
]
}
} else {
this.searchOptions = [];
}
},
handleClickKeyAct (index) {
let selPosition = this.resultListAct[index]
let lonlat = selPosition.lonlat.split(" ")
map_act.setCenter(lonlat[1], lonlat[0]);
map_act.setMarker(lonlat[1], lonlat[0]);
this.formData.actLatitude = lonlat[1];
this.formData.actLongitude = lonlat[0];
this.formData.actAddress = selPosition.address + selPosition.name
},
handleClickKeySignin (index) {
let selPosition = this.resultListSignin[index]
let lonlat = selPosition.lonlat.split(" ")
map_signin.setCenter(lonlat[1], lonlat[0]);
map_signin.setMarker(lonlat[1], lonlat[0]);
this.formData.signInLatitude = lonlat[1];
this.formData.signInLongitude = lonlat[0];
this.formData.signInAddress = selPosition.address + selPosition.name
},
handleCancle () {
this.resetData();
this.$emit("dialogCancle");
},
resetData () {
this.searchValueAct = ''
this.searchOptionsAct = []
this.resultListAct = []
this.searchValueSignin = ''
this.searchOptionsSignin = []
this.resultListSignin = []
this.actId = "";
this.replayImgList = [];
this.agencyIdArray = [];

363
src/views/modules/communityService/dqfwzx/cpts/edit.vue

@ -1,188 +1,152 @@
<template>
<div>
<div class="dialog-h-content scroll-h">
<el-form
ref="ref_form"
<el-form ref="ref_form"
:inline="true"
:model="dataForm"
:rules="dataRule"
:disabled="formType === 'detail'"
class="form"
>
<el-form-item
label="中心名称 "
class="form">
<el-form-item label="中心名称 "
prop="centerName"
label-width="150px"
style="display: block"
>
<el-input
class="item_width_1"
style="display: block">
<el-input class="item_width_1"
maxlength="50"
show-word-limit
placeholder="请输入中心名称 "
v-model="dataForm.centerName"
>
v-model="dataForm.centerName">
</el-input>
</el-form-item>
<el-form-item
label="办公电话"
<el-form-item label="办公电话"
prop="workPhone"
label-width="150px"
style="display: block"
>
<el-input
class="item_width_1"
style="display: block">
<el-input class="item_width_1"
maxlength="50"
show-word-limit
placeholder="请输入办公电话"
v-model="dataForm.workPhone"
>
v-model="dataForm.workPhone">
</el-input>
</el-form-item>
<el-form-item
label="社区地址"
<el-form-item label="社区地址"
prop="address"
label-width="150px"
style="display: block"
>
<el-input
class="item_width_1"
style="display: block">
<el-input class="item_width_1"
maxlength="50"
show-word-limit
placeholder="请输入社区地址 "
v-model="dataForm.address"
>
v-model="dataForm.address">
</el-input>
</el-form-item>
<el-form-item
label="办公时间"
<el-form-item label="办公时间"
prop="amStartTime"
label-width="150px"
style="display: block"
>
style="display: block">
<div class="row">
<span>上午</span>
<el-time-select
style="margin-left: 10px"
<el-time-select style="margin-left: 10px"
v-model="dataForm.amStartTime"
:picker-options="{
start: '00:00',
step: '00:30',
end: '12:00',
}"
placeholder="开始时间"
>
placeholder="开始时间">
</el-time-select>
<span style="margin: 0 5px"></span>
<el-time-select
v-model="dataForm.amEndTime"
<el-time-select v-model="dataForm.amEndTime"
:picker-options="{
start: '00:00',
step: '00:30',
end: '12:00',
minTime: dataForm.amStartTime,
}"
placeholder="结束时间"
>
placeholder="结束时间">
</el-time-select>
</div>
<div class="row" style="margin-top: 5px">
<div class="row"
style="margin-top: 5px">
<span>下午</span>
<el-time-select
style="margin-left: 10px"
<el-time-select style="margin-left: 10px"
v-model="dataForm.pmStartTime"
:picker-options="{
start: '12:00',
step: '00:30',
end: '24:00',
}"
placeholder="开始时间"
>
placeholder="开始时间">
</el-time-select>
<span style="margin: 0 5px"></span>
<el-time-select
v-model="dataForm.pmEndTime"
<el-time-select v-model="dataForm.pmEndTime"
:picker-options="{
start: '12:00',
step: '00:30',
end: '24:00',
minTime: dataForm.pmStartTime,
}"
placeholder="结束时间"
>
placeholder="结束时间">
</el-time-select>
</div>
</el-form-item>
<el-form-item
label="位置坐标"
<el-form-item label="地图位置"
prop="longitude"
label-width="150px"
style="display: block"
>
style="display: block">
<div style="width: 500px">
<el-input
class="item_width_4"
maxlength="50"
placeholder="请输入关键字"
v-model="dataForm.locationAddress"
>
</el-input>
<el-button
style="margin-left: 10px"
type="primary"
size="small"
@click="handleSearchMap"
>查询</el-button
>
<div id="app" class="div_map"></div>
<div style="margin-top: 10px" v-show="false">
<span>经度</span>
<el-input
class="item_width_3"
maxlength="50"
placeholder="请输入经度"
v-model="dataForm.longitude"
>
</el-input>
<span style="margin-left: 20px">纬度</span>
<el-input
class="item_width_3"
<el-select v-model="searchValue"
filterable
style="width: 500px"
remote
:reserve-keyword="true"
placeholder="请输入关键词"
:remote-method="remoteMethod"
:loading="loading">
<el-option v-for="(item,index) in searchOptions"
@click.native="handleClickKey(index)"
:key="item.value"
:label="item.label"
:value="item.value">
</el-option>
</el-select>
<div id="app_dqfwzx"
class="div_map"></div>
</div>
</el-form-item>
<el-form-item label="详细地址 "
prop="address"
label-width="150px"
style="display: block">
<el-input class="item_width_1"
maxlength="50"
placeholder="请输入纬度"
v-model="dataForm.latitude"
>
show-word-limit
placeholder="请输入位置 "
v-model="formData.address">
</el-input>
</div>
</div>
</el-form-item>
<el-form-item
label="可预约事项"
<el-form-item label="可预约事项"
prop="matterList"
label-width="150px"
style="display: block"
>
style="display: block">
<div class="m-staffs">
<div
class="item"
<div class="item"
:key="'staff' + index"
v-for="(item, index) in dataForm.matterList"
>
v-for="(item, index) in dataForm.matterList">
<div class="item-info">
<el-input
class="item_width_1"
<el-input class="item_width_1"
style="width: 150px"
maxlength="50"
show-word-limit
placeholder="事项名"
v-model="item.matterName"
:disabled="item.matterId != undefined"
/>
:disabled="item.matterId != undefined" />
<el-upload :headers="$getElUploadHeaders()"
:disabled="item.matterId != undefined"
class="avatar-uploader"
@ -193,39 +157,32 @@
(response, file, fileList) =>
handleImgSuccess(index, response, file, fileList)
"
:before-upload="beforeImgUpload"
>
<img
v-if="item.matterImg"
:before-upload="beforeImgUpload">
<img v-if="item.matterImg"
:src="item.matterImg"
style="width: 36px; height: 36px"
class="function-icon"
/>
<i v-else class="el-icon-plus avatar-uploader-icon"></i>
class="function-icon" />
<i v-else
class="el-icon-plus avatar-uploader-icon"></i>
</el-upload>
<div class="hint">事项封面图片小于1M</div>
</div>
<div class="item-pic">
<el-select
style="width: 150px; margin-left: 0"
<el-select style="width: 150px; margin-left: 0"
v-model="item.appointmentType"
filterable
placeholder="预约类型"
:disabled="item.matterId != undefined"
>
<el-option
v-for="item in appointmentTypeOptions"
:disabled="item.matterId != undefined">
<el-option v-for="item in appointmentTypeOptions"
:key="item.value"
:label="item.label"
:value="item.value"
>
:value="item.value">
</el-option>
</el-select>
<el-time-select
style="width: 120px; margin-left: 20px"
<el-time-select style="width: 120px; margin-left: 20px"
v-model="item.startTime"
:picker-options="{
start: '00:00',
@ -233,12 +190,10 @@
end: '24:00',
}"
placeholder="开始时间"
:disabled="item.matterId != undefined"
>
:disabled="item.matterId != undefined">
</el-time-select>
<span style="margin: 0 5px"></span>
<el-time-select
style="width: 120px"
<el-time-select style="width: 120px"
v-model="item.endTime"
:picker-options="{
start: '00:00',
@ -247,37 +202,31 @@
minTime: item.startTime,
}"
placeholder="结束时间"
:disabled="item.matterId != undefined"
>
:disabled="item.matterId != undefined">
</el-time-select>
<el-button
style="margin-left: 20px"
<el-button style="margin-left: 20px"
size="small"
@click="handleDelStaff(index)"
>删除</el-button
>
@click="handleDelStaff(index)">删除</el-button>
</div>
</div>
<div class="item-add">
<el-button size="small" type="warning" @click="handleAddStaff"
>添加</el-button
>
<el-button size="small"
type="warning"
@click="handleAddStaff">添加</el-button>
</div>
</div>
</el-form-item>
</el-form>
</div>
<div class="div_btn">
<el-button size="small" @click="handleCancle"> </el-button>
<el-button
size="small"
<el-button size="small"
@click="handleCancle"> </el-button>
<el-button size="small"
v-if="formType != 'detail'"
type="primary"
:disabled="btnDisable"
@click="handleComfirm"
> </el-button
>
@click="handleComfirm"> </el-button>
</div>
</div>
</template>
@ -286,6 +235,7 @@
import { mapGetters } from "vuex";
import { Loading } from "element-ui"; // Loading
import { requestPost } from "@/js/dai/request";
import daiMap from "@/utils/dai-map";
var map;
var search;
@ -301,6 +251,9 @@ export default {
customerId: "",
formType: "add", // addeditdetail
searchOptions: [],
searchValue: '',
resultList: [],
btnDisable: false,
@ -438,104 +391,90 @@ export default {
return code === 0;
},
// init
initMap() {
let { latitude, longitude } = this.$store.state.user;
if (!latitude || latitude == "" || latitude == "0") {
latitude = 39.9088810666821;
longitude = 116.39743841556731;
}
//
var center = new window.TMap.LatLng(latitude, longitude);
// map TMap.Map()
map = new window.TMap.Map(document.getElementById("app"), {
center: center, //
initMap (latitude, longitude) {
map = new daiMap(
document.getElementById("app_ggfw"),
{ latitude, longitude },
{
zoom: 16.2, //
pitch: 43.5, //
rotation: 45, //
});
search = new window.TMap.service.Search({ pageSize: 10 });
//
markers = new TMap.MultiMarker({
map: map,
geometries: [],
});
infoWindowList = Array(10);
geocoder = new TMap.service.Geocoder(); //
}
);
//
map.on("panend", (e) => {
map.on("dragend", (e) => {
this.handleMoveCenter(e);
});
// this.handleMoveCenter();
},
setMarker(lat, lng) {
markers.setGeometries([]);
markers.add([
{
id: "4",
styleId: "marker",
position: new TMap.LatLng(lat, lng),
properties: {
title: "marker4",
},
map.setCenter(latitude, longitude);
map.setMarker(latitude, longitude);
},
]);
async handleMoveCenter () {
//
const { lat, lng } = map.getCenter();
this.formData.latitude = lat;
this.formData.longitude = lng;
map.setMarker(lat, lng);
let { msg, data } = await map.getAddress(lat, lng);
if (msg == "success") {
this.formData.address = data.address
this.searchValue = data.address
this.searchOptions = []
}
},
handleSearchMap() {
infoWindowList.forEach((infoWindow) => {
infoWindow.close();
async remoteMethod (query) {
if (query !== '') {
this.loading = true;
const { msg, data } = await map.searchNearby(query);
this.loading = false;
this.resultList = []
if (msg == "success" && data.resultList && data.resultList.length > 0) {
if (data.resultList && data.resultList.length > 0) {
this.resultList = data.resultList
this.searchOptions = this.resultList.map(item => {
return { value: `${item.hotPointID}`, label: `${item.address + item.name}` };
});
infoWindowList.length = 0;
markers.setGeometries([]);
//
search
.searchNearby({
keyword: this.dataForm.locationAddress,
radius: 1000,
autoExtend: true,
center: map.getCenter(),
})
.then((result) => {
let { data } = result;
if (Array.isArray(data) && data.length > 0) {
const {
location: { lat, lng },
} = data[0];
map.setCenter(new TMap.LatLng(lat, lng));
this.setMarker(lat, lng);
this.dataForm.latitude = lat;
this.dataForm.longitude = lng;
}
} else {
this.$message.error("未检索到相关位置坐标");
this.searchOptions = [
{
value: '0',
label: '未检索到结果'
}
]
}
} else {
this.searchOptions = [];
}
});
},
handleMoveCenter(e) {
//
const center = map.getCenter();
const lat = center.getLat();
const lng = center.getLng();
this.dataForm.latitude = lat;
this.dataForm.longitude = lng;
this.setMarker(lat, lng);
if (e && e.originalEvent) {
geocoder
.getAddress({ location: new TMap.LatLng(lat, lng) }) //
.then((result) => {
this.dataForm.locationAddress = result.result.address;
});
}
handleClickKey (index) {
let selPosition = this.resultList[index]
let lonlat = selPosition.lonlat.split(" ")
map.setCenter(lonlat[1], lonlat[0]);
map.setMarker(lonlat[1], lonlat[0]);
this.formData.latitude = lonlat[1];
this.formData.longitude = lonlat[0];
this.formData.address = selPosition.address + selPosition.name
},
async initForm (type, row) {
this.$refs.ref_form.resetFields();
let { latitude, longitude } = this.$store.state.user;
this.formType = type;
console.log(row);
if (row) {

Loading…
Cancel
Save