123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270 |
- <template>
- <div class="teachingset">
- <m-header />
- <van-search
- v-model="search_value"
- shape="round"
- placeholder="搜小区、学校"
- background="transparent"
- show-action
- @search="onSearch">
- <div slot="action" @click="onSearch">搜索</div>
- </van-search>
- <el-amap :zoom="zoom" :events="amapEvents()" :plugin="plugin" :center="center">
- <el-amap-marker :clickable="true"
- :events="marker.events"
- :position="marker.position"
- v-for="(marker, index) in markers"
- :key="index" ></el-amap-marker>
- </el-amap>
- <van-cell-group>
- <van-field
- type="textarea"
- rows="1"
- autosize
- v-model="addressDetail"
- :disabled="true"
- label="教学地址"
- placeholder="详情地址" />
- <van-field
- type="text"
- v-model="teachingSchool"
- label="教学点名称"
- placeholder="请输入名称" />
- </van-cell-group>
- <div class="button-group">
- <van-button type="primary" @click="onSubmit" round size="large">确认</van-button>
- </div>
- </div>
- </template>
- <script>
- // import AMap from 'vue-amap'
- // AMap.initAMapApiLoader({
- // key: 'c7856e7c812d299cff150e74d60ea608',
- // plugin: ['Geolocation', 'PlaceSearch', 'Geocoder', 'ToolBar'],
- // v: '1.4.4'
- // })
- /* eslint-disable */
- import MHeader from '@/components/MHeader'
- import { schoolAdd, schoolUpdate } from '@/api/teacher'
- export default {
- name: 'teachingset',
- components: { MHeader },
- data() {
- let self = this
- return {
- type: this.$route.query.type,
- search_value: '', // 搜索地址
- zoom: 12,
- center: [114.34371, 30.55939],
- markers: [],
- searchResult: [], // 搜索出来的数据
- plugin: [
- {
- pName: 'Geolocation',
- events: {
- init(o) {
- if(self.type == 'create') {
- o.getCurrentPosition((status, result) => {
- if(result && result.position) {
- self.lng = result.position.lng
- self.lat = result.position.lat
- self.center = [self.lng, self.lat]
- self.loaded = true
- self.$nextTick()
- }
- })
- }
- }
- }
- },
- {
- pName: 'ToolBar',
- events: {
- init() {
- // console.log(instrance)
- }
- }
- }],
- searchOption: {
- pageSize: 1, // 单页显示结果条数
- pageIndex: 1, // 页码
- autoFitView: true // 是否自动调整地图视野使绘制的 Marker点都处于视口的可见范围
- },
- addressDetail: null, // 输入详情地址
- teachingSchool: null, // 教学点
- lnglat: null, // 教学点经纬度
- }
- },
- mounted() {
- document.title = '教学点设置'
- let params = this.$route.query
- if(params.Authorization) {
- localStorage.setItem('Authorization', decodeURI(params.Authorization))
- localStorage.setItem('userInfo', decodeURI(params.Authorization))
- }
- if(params.type == 'update') {
- this.addressDetail = params.address
- this.teachingSchool = params.name
- this.lnglat = params.longitudeLatitude
- let tempLnglat = params.longitudeLatitude.split(',')
- this.center = [tempLnglat[0], tempLnglat[1]]
- this.markers.push({
- position: [tempLnglat[0], tempLnglat[1]],
- events: this.markerEvents()
- })
- }
- },
- methods: {
- amapEvents() {
- return {
- complete: () => {
- // this.$toast('加载完成')
- }
- }
- },
- onSubmit() { // 确定提交
- if(!this.addressDetail) {
- this.$toast('请选择教学地点')
- return
- }
- if(!this.teachingSchool) {
- this.$toast('请输入教学点名称')
- return
- }
- // 添加教学点
- if(this.type == 'create') {
- schoolAdd({
- name: this.teachingSchool,
- address: this.addressDetail,
- longitudeLatitude: this.lnglat
- }).then(res => {
- let result = res.data
- if(result.code == 200) {
- this.$toast('添加成功')
- this.$router.push('/teachingSchool')
- } else {
- this.$toast(result.msg)
- }
- })
- } else if(this.type == 'update') {
- schoolUpdate({
- id: this.$route.query.id,
- name: this.teachingSchool,
- address: this.addressDetail,
- longitudeLatitude: this.lnglat
- }).then(res => {
- let result = res.data
- if(result.code == 200) {
- this.$toast('修改成功')
- this.$router.push('/teachingSchool')
- } else {
- this.$toast(result.msg)
- }
- })
- }
- },
- onSearch() {
- if(!this.search_value) return
- this.markers = [] // 重置位置
- let mapSearch = new AMap.PlaceSearch(this.searchOption)
-
- // 目前只需要搜索第一条数据
- mapSearch.search(this.search_value, (status, sr) => {
- if(sr && sr.poiList && sr.poiList.count) {
- let pois = sr.poiList.pois[0]
- this.searchResult.push(pois)
- this.markers.push({
- position: [pois.location.lng, pois.location.lat],
- events: this.markerEvents(pois)
- })
- this.center = [pois.location.lng, pois.location.lat]
- } else if (sr.poiList === undefined) {
- throw new Error(sr);
- }
- })
- },
- markerEvents() {
- // marker 事件列表
- let that = this
- return {
- click: (e) => {
- let geocoder = new AMap.Geocoder()
- geocoder.getAddress(e.lnglat, function(status, result) {
- if(status === 'complete' && result.regeocode) {
- that.lnglat = e.lnglat.lng + ',' + e.lnglat.lat
- that.addressDetail = result.regeocode.formattedAddress
- } else {
- that.$toast('请重新选择地址')
- }
- })
- }
- }
- }
- }
- }
- </script>
- <style lang='less' scoped>
- @import url("../../assets/commonLess/variable.less");
- .teachingset {
- min-height: 100vh;
- }
- .el-vue-amap-container {
- height: 60vh;
- }
- /deep/.van-sticky--fixed {
- top: .44rem !important;
- }
- /deep/.van-search {
- position: fixed;
- top: .44rem !important;
- right: 0;
- left: 0;
- z-index: 99;
- padding: .1rem .23rem;
-
- .van-cell {
- padding: .12rem;
- line-height: .24rem;
- }
- .van-field__control {
- font-size: .16rem;
- }
- .van-search__content {
- border-radius: .5rem;
- background: @whiteColor;
- box-shadow:0px 4px 8px 0px rgba(0,0,0,0.08),0px 0px 1px 0px rgba(0,0,0,0.08);
- }
- .van-icon-search {
- font-size: .2rem;
- font-weight: bold;
- color: @mColor;
- }
- .van-search__action {
- background-color: #89C8C4;
- color: #fff;
- border-radius: 0.15rem;
- position: absolute;
- right: 0.2rem;
- height: .48rem;
- display: inline-block;
- line-height: .5rem;
- border-radius: 2rem;
- border-top-left-radius: 0;
- border-bottom-left-radius: 0;
- padding: 0 .2rem;
- font-size: .16rem;
- }
- }
- .button-group {
- margin: .3rem .26rem .2rem;
- .van-button--primary {
- background: @mColor;
- border-color: @mColor;
- font-size: .18rem;
- height: .5rem;
- line-height: .48px;
- }
- }
- </style>
|