<!--
 * @Descripttion: 
 * @version: 
 * @Author: 王三华
 * @Date: 2023-05-30 20:18:30
-->

<template>
  <view>
    <u-picker @cancel='pickershow=false'
              :show="pickershow"
              ref="uPicker"
              :defaultIndex="defaultIndex"
              :columns="columns"
              @confirm="confirm"
              keyName='name'
              @change="changeHandler"></u-picker>
  </view>
</template>

<script>
import * as api from '@/config/goods'
import { mapGetters } from 'vuex'
export default {
  data() {
    return {
      columns: [],
      pickershow: false,
      provinceList: [],
      cityList: [],
      quList: [],
      diqu: '',
      form: {},
      defaultIndex: [],
      user: '',
    }
  },
  props: {
    defaultCode: {
      type: Array,
      default: [],
    },
  },
  watch: {
    defaultCode: {
      deep: true,
      handler(n) {
        if (this.cityList.length > 0) {
          this.getDefaultIndex(n)
        } else {
          this.getAllAreaList(uni.getStorageSync('pkCountry')||this.user.pkSettleCountry).then((res) => {
            if (res) {
              this.getDefaultIndex(n)
            }
          })
        }
      },
    },
  },
  created() {
    this.user = uni.getStorageSync('User')
    this.getAllAreaList(uni.getStorageSync('pkCountry')||this.user.pkSettleCountry)
  },
  methods: {
    getDefaultIndex(arr) {
      let a = this.provinceList.findIndex((item) => item.pkId == arr[0])
      let b = this.cityList[a].arrList.findIndex((item) => item.pkId == arr[1])
      let c = this.quList.findIndex((item) => item.pkId == arr[1])
      let d = this.quList[c].arrList.findIndex((item) => item.pkId == arr[2])
      this.columns = [
        this.provinceList,
        this.cityList[a].arrList,
        this.quList[c].arrList,
      ]
      let diqu
      this.defaultIndex = [a, b, d > -1 ? d : 0]
      if (d > -1) {
        diqu = `${this.provinceList[a].name}-${this.cityList[a].arrList[b].name}-${this.quList[c].arrList[d].name}`
      } else {
        diqu = `${this.provinceList[a].name}-${this.cityList[a].arrList[b].name}`
      }
      this.$emit('getAddressData', diqu)
    },
    setShow() {
      this.pickershow = true
    },
    getAllAreaList(pkCountry) {
      return new Promise((reslove, reject) => {
        api
          .getAllAreaList({
            pkCountry: pkCountry,
          })
          .then((res) => {
            this.provinceList = res.data.provinceList
            // 市数组
            let cityList = []
            res.data.provinceList.forEach((element, index) => {
              cityList.push({
                pkId: element.pkId,
                arrList: [],
              })
              res.data.cityList.forEach((item, cndex) => {
                if (element.pkId == item.parent) {
                  cityList[index].arrList.push(item)
                }
              })
            })
            this.cityList = cityList
            // 区数组
            let quList = []
            res.data.cityList.forEach((element, index) => {
              quList.push({
                pkId: element.pkId,
                arrList: [],
              })
              res.data.countyList.forEach((item, cndex) => {
                if (element.pkId == item.parent) {
                  quList[index].arrList.push(item)
                }
              })
            })
            this.quList = quList
            this.columns = [
              res.data.provinceList,
              cityList[0].arrList,
              quList[0].arrList,
            ]
            reslove(true)
          })
      })
    },
    changeHandler(e) {
      const {
        columnIndex,
        value,
        values, // values为当前变化列的数组内容
        index,
        indexs,
        // 微信小程序无法将picker实例传出来，只能通过ref操作
        picker = this.$refs.uPicker,
      } = e
      // 当第一列值发生变化时，变化第二列(后一列)对应的选项
      if (columnIndex === 0) {
        picker.setColumnValues(1, this.cityList[indexs[0]].arrList)
        let arr = []
        this.quList.forEach((item) => {
          if (item.pkId == this.cityList[indexs[0]].arrList[0].pkId) {
            arr = item.arrList
          }
        })
        picker.setColumnValues(2, arr)
        // picker为选择器this实例，变化第二列对应的选项
      } else if (columnIndex === 1) {
        let arr = []
        this.quList.forEach((item) => {
          if (item.pkId == this.cityList[indexs[0]].arrList[index].pkId) {
            arr = item.arrList
          }
        })
        picker.setColumnValues(2, arr)
      }
    },
    // 回调参数为包含columnIndex、value、values
    confirm(e) {
      this.pickershow = false
      if (e.value[2]) {
        this.diqu = `${e.value[0].name}-${e.value[1].name}-${e.value[2].name}`
        this.form.province = e.value[0].pkId
        this.form.city = e.value[1].pkId
        this.form.county = e.value[2].pkId
      } else {
        this.diqu = `${e.value[0].name}-${e.value[1].name}`
        this.form.province = e.value[0].pkId
        this.form.city = e.value[1].pkId
        this.form.county = ''
      }
      this.$emit('addressData', this.diqu, this.form)
    },
  },
}
</script>

<style lang="scss" scoped>
.picker {
  display: flex;
  justify-content: space-between;
  width: 100%;
  border-width: 0.5px !important;
  border-color: #dadbde !important;
  border-style: solid;
  border-radius: 4px;
  padding: 6px 9px;
}
</style>