index.vue 1.5 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374
  1. <template>
  2. <div class="full-width">
  3. <div>
  4. <el-cascader
  5. :placeholder="placeholder"
  6. clearable
  7. class="full-width"
  8. v-model="area"
  9. :options="areaDic"
  10. filterable
  11. @change="changeArea"
  12. />
  13. </div>
  14. </div>
  15. </template>
  16. <script>
  17. export default {
  18. props: {
  19. placeholder: {
  20. type: String,
  21. default: ''
  22. }
  23. },
  24. data() {
  25. return {
  26. form: {},
  27. areaDic: [],
  28. area: ''
  29. }
  30. },
  31. mounted() {
  32. this.getArea()
  33. },
  34. methods: {
  35. getArea() {
  36. const tmp = localStorage.getItem('area')
  37. if (tmp) {
  38. this.areaDic = JSON.parse(tmp)
  39. return
  40. }
  41. this.$api.common.region({ code: '' }).then(res => {
  42. if (res.code === 200) {
  43. const list = res.data.filter(ele => ele.key !== '111111')
  44. this.areaDic = list.map(item => this.mapTree(item))
  45. localStorage.setItem('area', JSON.stringify(this.areaDic))
  46. }
  47. })
  48. },
  49. mapTree(item) {
  50. const haveChildren =
  51. Array.isArray(item.children) && item.children.length > 0
  52. return {
  53. key: item,
  54. value: item,
  55. label: item.title,
  56. children: haveChildren ? item.children.map(i => this.mapTree(i)) : []
  57. }
  58. },
  59. changeArea(res) {
  60. const tmps = res.map(ele => {
  61. return { key: ele.key, title: ele.title }
  62. })
  63. console.log(this.area)
  64. this.$emit('change', tmps)
  65. }
  66. }
  67. }
  68. </script>
  69. <style lang="scss" scoped>
  70. :deep(.el-input) {
  71. width: 100%;
  72. }
  73. </style>