一个js

103 阅读1分钟

  <div v-loading="loading">

    <el-tabs

      v-model="selsctKeyX[areaData[0].levelx].code"

      @tab-click="(e) => handleClick(e, areaData[0].levelx)"

      :key="key"

      :namex="selsctKeyX[areaData[0].levelx].code"

    >

      <el-tab-pane

        v-for="item in areaData"

        :label="item.name"

        :name="item.code"

        :key="item.code"

      >

        <div v-if="item.areaList && item.areaList.length">

          <List

            :areaData="[

              { code: '', levelx: item.areaList[0].levelx, name: '全部' },

              ...item.areaList

            ]"

          ></List>

        </div>

      </el-tab-pane>

    </el-tabs>

  </div>

</template>




<script>

export default {

  name: 'List',

  props: {

    areaData: {

      type: Array,

      default: () => []

    }

  },

  created() {

    const t = JSON.parse(JSON.stringify(this.$store.state.selsctKey))

    if (Array.isArray(this.areaData) && this.areaData.length) {

      if (!t[this.areaData[0].levelx]) {

        t[this.areaData[0].levelx] = {

          name: '',

          code: ''

        }

      }

    }

    this.selsctKeyX = t

    this.$store.commit('saveSelsctKey', t)

  },

  watch: {

    // loading: {

    //   handler(newvalue, oldvalue) {

    //     // console.log('newvalue', newvalue)

    //   },

    //   deep: true

    // }

  },

  data() {

    return {

      selsctKeyX: JSON.parse(JSON.stringify(this.$store.state.selsctKey)),

      selsctKey: [],

      tempx: {},

      key: 1,

      loading: false

    }

  },

  methods: {

    handleClick(e, level) {

      this.loading = true

      const { label, name } = e

      if (name) {

        this.tempx = {

          ...this.selsctKeyX,

          [level]: { code: name, name: label }

        }

        this.loop(level)

      } else {

        const flag = level === 0

        if (flag) {

          let t = {

            0: {

              name: '',

              code: ''

            }

          }

          this.tempx = t

          this.$store.commit('saveSelsctKey', t)

          this.selsctKeyX = t

        } else {

          let length = Object.keys(

            JSON.parse(JSON.stringify(this.tempx))

          ).length

          if (length - 1 === level) {

            this.loop(level - 1)

          }

        }

      }

      this.$store.commit('saveSelsctKey', this.tempx)

      this.key = Math.random()

      console.log('this.tempx', JSON.stringify(this.tempx))

      let keys = Object.values(this.tempx)

      console.log(keys)

      let params = {

        key: keys.map((item) => item.code).join('/'),

        name: keys.map((item) => item.name).join('/')

      }

      console.log('params', params)

      // let obj = {

      //   1: {

      //     name: '北京市',

      //     code: '110000'

      //   },

      //   2: '110000'

      // }

      // 1、 110000/110001

      // 2、北京市/什么辖区

      setTimeout(() => {

        this.loading = false

      }, 500)

    },

    loop(level) {

      let old = JSON.parse(JSON.stringify(this.tempx))

      let keys = Object.keys(old) // 0 1 2

      let val = keys.filter((item, index) => index <= level) // 0  1

      let objx = {}

      for (const key in old) {

        const item = old[key]

        if (val.includes(key)) {

          objx[key] = item

        }

      }

      this.tempx = objx

      this.key = Math.random()

    }

  }

}

</script>




<style></style>