<template>
  <div class="addDesignerPage">
    <div class="header">
      <van-nav-bar
        class="navBar"
        title="设计师招募"
        left-arrow
        @click-left="onClickLeft"
        right-text="保存"
        @click-right="clickSubmit" />
    </div>
    <div class="content">
      <van-form ref="tabstoreVal" @submit="onSubmit" :scroll-to-error="true" :show-error="false">
        <van-field readonly :value="fromData.storeCode" label="客户编号">
          <template #left-icon>
            <span class="van-f-red"></span>
          </template>
        </van-field>
        <van-field
          v-model="fromData.storeName"
          label="设计师名称"
          placeholder="请输入设计师名称"
          :rules="[{ required: true, message: '请输入设计师名称' }]">
          <template #left-icon>
            <span class="van-f-red">*</span>
          </template>
        </van-field>
        <van-field
          type="tel"
          v-model="fromData.telephone"
          label="手机号"
          placeholder="请输入手机号"
          :rules="[
            {
              required: true,
              validator: validatePhone,
              message: '请输入手机号',
            },
          ]">
          <template #left-icon>
            <span class="van-f-red">*</span>
          </template>
        </van-field>
        <van-row style="border-bottom: 1px solid #ebedf0">
          <van-field
            rows="1"
            autosize
            type="textarea"
            readonly
            clickable
            name="picker"
            :value="fromData.chainName"
            label="经销商名称"
            placeholder="点击选择经销商名称"
            @click="moreTypeShowfn"
            :rules="[
              {
                required: true,
                message: '请选择经销商',
              },
            ]">
            <template #left-icon>
              <span class="van-f-red">*</span>
            </template>
          </van-field>
          <!-- <van-col span="4">
            <van-button
              size="small"
              type="info"
              style="margin-top: 6px"
              native-type="button"
              @click="moreTypeShowfn">
              <van-icon name="list-switching" />更多
            </van-button>
          </van-col> -->
        </van-row>
        <van-field
          readonly
          clickable
          name="calendar"
          :value="fromData.enterTime"
          label="会员录入时间"
          placeholder="请选择日期"
          @click="showCalendar = true"
          :rules="[
            {
              required: true,
              message: '请选择日期',
            },
          ]">
          <template #left-icon>
            <span class="van-f-red">*</span>
          </template>
        </van-field>
        <van-field
          readonly
          clickable
          name="picker"
          :value="fromData.storeCategoryName"
          label="会员属性"
          placeholder="请选择会员属性"
          @click="showPicker = true"
          :rules="[
            {
              required: true,
              message: '请选择会员属性',
            },
          ]">
          <template #left-icon>
            <span class="van-f-red">*</span>
          </template>
        </van-field>
        <van-field
          v-model="fromData.designerCompanyName"
          label="设计公司名称"
          placeholder="请输入设计公司名称"
          :rules="[{ required: true, message: '请输入设计公司名称' }]">
          <template #left-icon>
            <span class="van-f-red">*</span>
          </template>
        </van-field>
        <van-field
          v-model="fromData.addressLine"
          label="设计师公司地址"
          placeholder="请输入地址"
          rows="1"
          autosize
          type="textarea"
          @blur="addressFn"
          :rules="[
            {
              required: true,
              message: '请输入地址',
            },
          ]">
          <template #left-icon>
            <span class="van-f-red">*</span>
          </template>
          <template #button>
            <van-button size="small" native-type="button" type="info" @click="fns"
              ><van-icon name="location-o" />地图</van-button
            >
          </template>
        </van-field>
        <van-field
          readonly
          clickable
          name="picker"
          :value="fromData.provinceName"
          label="省(州)"
          placeholder="点击选择省(州)"
          @click="showProvincePicker = true">
          <template #left-icon>
            <span class="van-f-red">*</span>
          </template>
        </van-field>
        <van-field
          readonly
          clickable
          name="picker"
          :value="fromData.cityName"
          label="城市"
          placeholder="点击选择城市"
          @click="showCityPicker = true">
          <template #left-icon>
            <span class="van-f-red">*</span>
          </template>
        </van-field>
        <van-field
          readonly
          clickable
          name="picker"
          :value="fromData.districtName"
          label="区(县)"
          placeholder="点击选择区(县)"
          @click="showDistrictPicker = true">
          <template #left-icon>
            <span class="van-f-red">*</span>
          </template>
        </van-field>
        <van-field
          v-model="fromData.designerStoreRemark"
          rows="2"
          autosize
          type="textarea"
          label="备注"
          placeholder="请输入备注">
        </van-field>
      </van-form>
    </div>
    <!--经销商-->
    <van-popup
      v-model="showPickerChainsList"
      position="bottom"
      class="agencyBox"
      :close-on-click-overlay="false">
      <van-picker
        show-toolbar
        :columns="ChainsList"
        value-key="chainName"
        @confirm="onConfirmChainsList"
        @cancel="showPickerChainsList = false" />
    </van-popup>
    <!-- 搜索更多经销商 -->
    <van-popup v-model="moreTypeShow" position="bottom" style="height: 80%; font-size: 14px">
      <van-row style="background-color: #f5f5f5">
        <van-col span="20">
          <van-field
            left-icon="search"
            style="margin-top: 2px; border-radius: 6px; overflow: hidden"
            v-model="searchChainName"
            label=""
            placeholder="请输入关键词"
            clearable />
        </van-col>
        <van-col
          span="4"
          style="text-align: center; line-height: 48px"
          @click="getDesignerChainsInfo">
          <div style="background-color: #0057ba; color: #fff">搜索</div></van-col
        >
      </van-row>
      <van-picker
        show-toolbar
        :columns="chainsData"
        value-key="chainName"
        @confirm="onConfirmChainsList"
        @cancel="moreTypeShow = false" />
    </van-popup>
    <!-- 时间选择 -->
    <van-calendar
      v-model="showCalendar"
      @confirm="onConfirmInputTime"
      color="#0057ba"
      :show-confirm="false"
      :min-date="new Date(1990, 0, 1)" />
    <!--会员属性-->
    <van-popup v-model="showPicker" position="bottom">
      <van-picker
        show-toolbar
        value-key="dictLabel"
        :columns="storeCategoryList"
        @confirm="onConfirm"
        @cancel="showPicker = false" />
    </van-popup>
    <!--省、市、区、街道-->
    <van-popup v-model="showProvincePicker" position="bottom">
      <van-picker
        show-toolbar
        title="省(州)"
        :columns="provinceList"
        @confirm="onProvinceConfirm"
        @cancel="showProvincePicker = false" />
    </van-popup>
    <van-popup v-model="showCityPicker" position="bottom">
      <van-picker
        show-toolbar
        title="城市"
        :columns="cityList"
        @confirm="onCityConfirm"
        @cancel="showCityPicker = false" />
    </van-popup>
    <van-popup v-model="showDistrictPicker" position="bottom">
      <van-picker
        show-toolbar
        title="县区"
        :columns="districtList"
        @confirm="onDistrictConfirm"
        @cancel="showDistrictPicker = false" />
    </van-popup>
    <!-- <van-popup v-model="showTownPicker" position="bottom">
      <van-picker
        show-toolbar
        title="街道"
        :columns="townList"
        @confirm="onTownConfirm"
        @cancel="showTownPicker = false" />
    </van-popup> -->
    <!-- 地图选址 -->
    <div id="allmap"></div>
    <div style="position: fixed; top: 0; height: 100%; z-index: 3000; width: 100%" v-if="showmap">
      <div id="allmap1" style="height: 100%; width: 100%"></div>
      <div style="position: fixed; z-index: 99999; top: 0; width: 100%; background-color: white">
        <van-search
          v-model="search"
          shape="round"
          background="#0057ba"
          @input="searchFn"
          placeholder="请输入搜索关键词" />
        <div style="height: 200px; overflow: hidden" v-if="searchSHow">
          <div style="height: 100px; min-height: 200px; overflow-y: scroll; padding: 12px">
            <div
              v-for="(itme, index) in mapsearchlist"
              style="border-bottom: 1px solid #eee"
              @click="addressFns(itme)">
              <p>{{ itme.title }}</p>
              <p>{{ itme.address }}</p>
            </div>
          </div>
        </div>
      </div>
      <div class="mapaddress">
        <div class="title">
          <span @click="showmap = false" style="float: left"
            ><van-icon name="cross" size="16"
          /></span>
          <p class="titleText">附近地址信息</p>
          <span style="float: right" @click="confirmMap">确定</span>
        </div>
        <div class="listBox">
          <van-radio-group v-model="addresssb" @change="mapselect">
            <van-radio :name="index" v-for="(item, index) in maplist" :key="index">
              <p style="margin: 4px 0; font-weight: bold">{{ item.title }}</p>
              <p style="margin: 4px 0">{{ item.address }}</p>
            </van-radio>
          </van-radio-group>
          <br />
          <br />
          <br />
          <br />
        </div>
      </div>
    </div>
  </div>
</template>

<script>
import { streetQuery, getById } from '@/api/index';
import {
  designerStoreCategory,
  designerChainsInfo,
  addDesigner,
  getstreetInfoList,
  updateStore,
} from '@/api/addDesigner';
import { validatePhone } from '@/utils';
import { jsonp } from 'vue-jsonp';
import { getPosition, getTicketFun, getMapPoi, getkeywordPoi, getGeocoder } from '@/utils/TXApiFun';
export default {
  data() {
    return {
      fromData: {
        storeName: '',
        telephone: '',
        chainName: '',
        enterTime: '',
        storeCategoryName: '',
        storeCategory: '',
        designerCompanyName: '',
        provinceName: '',
        cityName: '',
        districtName: '',
        addressLine: '',
        lat: '',
        lon: '',
        designerStoreRemark: '',
      },
      showPickerChainsList: false, //经销商列表弹框
      ChainsList: [], //经销商列表
      chainsData: [],
      moreTypeShow: false,
      searchChainName: '',
      showCalendar: false,
      showPicker: false,
      storeCategoryList: [],
      showProvincePicker: false,
      showCityPicker: false,
      showDistrictPicker: false,
      provinceCode: '',
      cityCode: '',
      provinceList: [],
      cityList: [],
      districtList: [],
      townList: [],
      maplist: [],
      search: '',
      showmap: false,
      searchSHow: false,
      mapsearchlist: [],
      addresssb: -1,
      mlon: '',
      mlan: '',
      location: {},
    };
  },
  activated() {
    this.toastLoading(0, '加载中...', true);
    // 获取详情
    this.getDetail();
    // 授权
    getTicketFun(['getLocation', 'chooseImage', 'uploadImage']).then(() => {
      this.getLocation();
    });
    // 获取会员属性
    this.getStoreCategoryList();
    // 获取经销商
    // this.getDesignerChainsInfo();
  },
  methods: {
    getDetail() {
      getById({ storeId: this.$route.query.id }).then((res) => {
        this.toastLoading().clear();
        if (res.code == 200) {
          this.fromData = res.data;
        }
      });
    },
    getLocation() {
      getPosition()
        .then((res) => {
          let { TXisBD, resData } = res;
          this.mlon = resData.longitude;
          this.mlan = resData.latitude;
          this.location = TXisBD;
          this.fromData.lat = TXisBD.lat;
          this.fromData.lon = TXisBD.lon;
          this.location.lat1 = resData.latitude;
          this.location.lon1 = resData.longitude;
          this.initData();
        })
        .catch((error) => {
          this.$dialog.alert({
            message: error,
          });
        });
    },
    initData() {
      getGeocoder({ latitude: this.location.lat1, longitude: this.location.lon1 })
        .then((res) => {
          if (res.status == 0 && res.result) {
            let result = res.result;
            this.fromData.cityNameOld = result.ad_info.city;
            this.fromData.districtNameOld = result.ad_info.district;
            let addresses = result.formatted_addresses; // 描述性地址
            // getstreetInfoList({ districtName: result.ad_info.district }).then((response) => {
            //   if (response.code == 200 && response.data) {
            //     this.fromData.province = response.data.provinceCode;
            //     this.fromData.city = response.data.cityCode;
            //     this.fromData.district = response.data.countyCode;
            //     this.fromData.provinceName = response.data.provinceName;
            //     this.fromData.cityName = response.data.cityName;
            //     this.fromData.districtName = response.data.countyName;
            //     this.$nextTick(() => {
            //       this.getStreetQuery();
            //       this.getStreetQuery('1');
            //       this.getStreetQuery('2');
            //       this.getStreetQuery('3');
            //     });
            //   }
            // });
            this.$nextTick(() => {
              this.getStreetQuery();
              this.getStreetQuery('1');
              this.getStreetQuery('2');
              this.getStreetQuery('3');
            });
            if (addresses) {
              this.fromData.addressLine = addresses.recommend;
              localStorage.setItem('locationRemark', addresses.recommend);
            }
          } else {
            this.toastLoading().clear();
          }
        })
        .catch(() => {
          this.toastLoading().clear();
        });
    },
    moreTypeShowfn() {
      this.searchChainName = '';
      // 获取经销商
      this.getDesignerChainsInfo();
    },
    // // 搜索经销商列表
    // getChainsByDeptCodesearch(chainName) {
    //   this.chainsData = [];
    //   getChainsByDeptCode({
    //     chainName: this.searchChainName,
    //     cityName: this.fromData.cityNameOld,
    //     districtName: this.fromData.districtNameOld,
    //     // deptId: this.fromData.orgId,
    //     // ifJzStoreType: this.fromData.ifJzStoreType,
    //     // storeCategory: this.fromData.storeCategory,
    //   }).then((res) => {
    //     this.chainsData = res.data.sfaChains;
    //     this.chainsData.push({});
    //     this.chainsData.pop();
    //   });
    // },
    onConfirmChainsList(value) {
      if (!value) return false;
      this.fromData.chainName = value.chainName;
      this.fromData.chainCode = value.chainCode;
      this.showPickerChainsList = false;
      this.moreTypeShow = false;
    },
    onConfirmInputTime(date) {
      this.showCalendar = false;
      this.fromData.enterTime = this.parseTime(date, '{y}-{m}-{d}');
    },
    onConfirm(value) {
      if (!value) return;
      this.fromData.storeCategoryName = value.dictLabel;
      this.fromData.storeCategory = value.dictValue;
      this.showPicker = false;
    },
    getStoreCategoryList() {
      designerStoreCategory().then((res) => {
        if (res.code == 200) {
          this.storeCategoryList = res.data;
          this.fromData.storeCategoryName = this.storeCategoryList[0].dictLabel;
          this.fromData.storeCategory = this.storeCategoryList[0].dictValue;
        }
      });
    },
    getDesignerChainsInfo() {
      this.toastLoading(0, '加载中...', true);
      this.chainsData = [];
      designerChainsInfo({ chainName: this.searchChainName }).then((res) => {
        this.toastLoading().clear();
        if (res.code == 200) {
          this.moreTypeShow = true;
          this.chainsData = res.data;
        }
      });
    },
    onProvinceConfirm(value) {
      this.fromData.provinceName = value.text;
      this.fromData.province = value.provinceCode;
      this.fromData.cityName = '';
      this.fromData.city = '';
      this.fromData.districtName = '';
      this.cityCode = '';
      this.provinceCode = value.provinceCode;
      this.getStreetQuery('1');
      this.showProvincePicker = false;
    },
    onCityConfirm(value) {
      this.fromData.cityName = value.text;
      this.fromData.city = value.cityCode;
      this.fromData.districtName = '';
      this.fromData.district = '';
      this.cityCode = value.cityCode;
      this.getStreetQuery('2');
      this.showCityPicker = false;
    },
    onDistrictConfirm(value) {
      this.fromData.districtName = value.text;
      this.fromData.district = value.countyCode;
      this.fromData.cityLevel = value.countyLevel;
      this.showDistrictPicker = false;
    },
    getStreetQuery(type) {
      var provinceCode = this.fromData.province;
      var cityCode = this.fromData.city;
      var countyCode = this.fromData.district;
      if (type == '1') {
        cityCode = '';
        countyCode = '';
      } else if (type == '2') {
        countyCode = '';
      } else if (type == '3') {
        console.log('ok');
      } else {
        provinceCode = '';
        cityCode = '';
        countyCode = '';
      }
      streetQuery({ provinceCode: provinceCode, cityCode: cityCode, countyCode: countyCode }).then(
        (res) => {
          if (res.code == 200) {
            var provinceList = [];
            var cityList = [];
            var districtList = [];
            var townList = [];
            if (type == '1') {
              for (var z1 = 0; z1 < res.data.length; z1++) {
                cityList.push({ cityCode: res.data[z1].cityCode, text: res.data[z1].cityName });
              }
              this.cityList = cityList;
            } else if (type == '2') {
              for (var z2 = 0; z2 < res.data.length; z2++) {
                districtList.push({
                  countyCode: res.data[z2].countyCode,
                  text: res.data[z2].countyName,
                  countyLevel: res.data[z2].countyLevel,
                });
              }
              this.districtList = districtList;
            } else if (type == '3') {
              for (var z3 = 0; z3 < res.data.length; z3++) {
                townList.push({ townCode: res.data[z3].townCode, text: res.data[z3].townName });
              }
              this.townList = townList;
            } else {
              for (var z = 0; z < res.data.length; z++) {
                provinceList.push({
                  provinceCode: res.data[z].provinceCode,
                  text: res.data[z].provinceName,
                });
              }
              this.provinceList = provinceList;
            }
          } else {
            this.$toast.fail('请求超时');
          }
        }
      );
    },
    fns() {
      this.search = '';
      getPosition()
        .then((res) => {
          let { TXisBD, resData } = res;
          this.pLat = resData.latitude;
          this.pLot = resData.longitude;
          if (this.fromData.lon == '') {
            this.fromData.lon = TXisBD.lon;
            this.fromData.lat = TXisBD.lat;
          }
          this.showmap = true;
          // 地点搜索 获取500米范围poi点
          getMapPoi({ latitude: this.pLat, longitude: this.pLot }).then((res) => {
            console.log(res);
            this.maplist = res.data;
            setTimeout(() => {
              this.addVisits1('1');
            });
          });
        })
        .catch((error) => {
          this.$dialog.alert({
            message: error,
          });
        });
      this.addresssb = -1;
    },
    addVisits1() {
      var that = this;
      var map = new TMap.Map('allmap1', {
        zoom: 15,
        center: new TMap.LatLng(that.location.lat1, that.location.lon1),
      });
      var markers = new TMap.MultiMarker({
        id: 'markers',
        map: map,
        geometries: [],
        styles: {
          marker: new TMap.MarkerStyle({
            width: 32,
            height: 40,
            anchor: { x: 16, y: 32 },
            src: 'https://mapapi.qq.com/web/lbs/javascriptGL/demo/img/marker-pink.png',
          }),
        },
      });
      markers.setGeometries([]);
      var location = new TMap.LatLng(that.location.lat1, that.location.lon1);
      map.setCenter(location);
      markers.updateGeometries([
        {
          id: 'marker',
          styleId: 'marker',
          position: location,
        },
      ]);
      var marker = new TMap.MultiMarker({
        map: map,
        styles: {
          default: new TMap.MarkerStyle({
            width: 32,
            height: 40,
            anchor: {
              x: 17,
              y: 21,
            },
            src: 'https://mapapi.qq.com/web/lbs/javascriptGL/demo/img/marker_blue.png',
          }),
        },
        geometries: [],
      });
      for (let p = 0; p < this.maplist.length; p++) {
        marker.updateGeometries([
          {
            id: this.maplist[p].id,
            position: new TMap.LatLng(this.maplist[p].location.lat, this.maplist[p].location.lng),
          },
        ]);
      }

      var markers1 = new TMap.MultiMarker({
        map: map,
        mapgeometries: [
          {
            id: 'markers1',
            position: new TMap.LatLng(0, 0),
          },
        ],
        styles: {
          abc: new TMap.MarkerStyle({
            width: 32,
            height: 40,
            anchor: { x: 16, y: 32 },
            src: require('@/assets/marker_blue.png'),
          }),
        },
      });
      markers1.setGeometries([]);
      this.markers = markers1;
      this.map = map;
      this.markers1 = markers;
      this.marker = marker;
      map.removeControl(TMap.constants.DEFAULT_CONTROL_ID.SCALE);
      map.removeControl(TMap.constants.DEFAULT_CONTROL_ID.ROTATION);
      map.removeControl(TMap.constants.DEFAULT_CONTROL_ID.ZOOM);
    },
    searchFn(val) {
      this.searchSHow = false;
      getkeywordPoi({ latitude: this.location.lat1, longitude: this.location.lon1 }, val).then(
        (res) => {
          // 不显示下拉选择
          if (!res.data.length && !val) {
            this.searchSHow = false;
          } else {
            this.searchSHow = true;
          }
          // 联想下拉选
          this.mapsearchlist = res.data;
        }
      );
    },
    addressFns(val) {
      var that = this;
      setTimeout(() => {
        that.searchSHow = false;
        that.map.setCenter(new TMap.LatLng(val.location.lat, val.location.lng));
        that.markers1.updateGeometries([
          {
            id: 'marker',
            styleId: 'marker',
            position: new TMap.LatLng(val.location.lat, val.location.lng),
          },
        ]);
        that.maplist = [];
        jsonp(
          'https://apis.map.qq.com/ws/place/v1/search?boundary=nearby(' +
            val.location.lat +
            ',' +
            val.location.lng +
            ',1000,0)&page_size=20&page_index=1&orderby=_distance&output=jsonp&key=WLCBZ-HRM6L-YOMPV-ME62B-AQOG6-JUBW6'
        ).then((res) => {
          that.maplist = res.data;
          that.marker.setGeometries([]);
          setTimeout(() => {
            for (let p = 0; p < res.data.length; p++) {
              that.marker.updateGeometries([
                {
                  id: res.data[p].id,
                  position: new TMap.LatLng(res.data[p].location.lat, res.data[p].location.lng),
                },
              ]);
            }
          });
        });
        that.addresssb = -1;
      });
    },
    confirmMap() {
      if (this.addresssb > -1) {
        this.fromData.addressLine = this.maplist[this.addresssb].address;
      }
      this.showmap = false;
    },
    mapselect(val) {
      if (val > -1) {
        this.markers.updateGeometries([
          {
            id: 'markers1',
            styleId: 'abc',
            position: new TMap.LatLng(
              this.maplist[val].location.lat,
              this.maplist[val].location.lng
            ),
          },
        ]);
      }
    },
    addressFn() {
      localStorage.setItem('locationRemark', this.fromData.addressLine);
    },
    clickSubmit(values) {
      this.$refs.tabstoreVal.submit();
    },
    onSubmit(value) {
      this.toastLoading(0, '提交中...', true);
      this.fromData.storeId = this.$route.query.id;
      updateStore(this.fromData).then((res) => {
        this.toastLoading().clear();
        if (res.code == 200) {
          this.$dialog
            .confirm({
              title: '系统提示',
              message: '修改成功',
              showCancelButton: false,
            })
            .then(() => {
              this.$router.replace({
                path: '/storemanagementlist',
              });
            });
        }
      });
    },
    onClickLeft() {
      this.$router.go(-1);
    },
  },
};
</script>
<style lang="scss" scoped>
.addDesignerPage {
  display: flex;
  flex-direction: column;
  width: 100%;
  height: 100%;
  .header {
    height: 46px;
  }
  .content {
    flex: 1;
    overflow-y: auto;
  }
}
</style>
