area_select.vue 1.5 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667
  1. <template>
  2. <div>
  3. <el-cascader
  4. v-model="val"
  5. @change="handleChange"
  6. :options="list"></el-cascader>
  7. </div>
  8. </template>
  9. <script>
  10. export default {
  11. data() {
  12. return {
  13. list:[],
  14. val:0,
  15. }
  16. },
  17. computed: {
  18. },
  19. mounted() {
  20. this.getOptions();
  21. },
  22. methods: {
  23. handleChange(value) {
  24. this.$emit('input', value)
  25. },
  26. async getOptions() {
  27. let res = await this.$post("/api/recruit/getOptions");
  28. if (res && res.status === 1) {
  29. this.options = res.data || [];
  30. }
  31. this.getAreas();
  32. },
  33. getAreas() {
  34. let provinces = this.options.provinces;
  35. let cities = this.options.cities;
  36. let data = [];
  37. let id, dd, c;
  38. for (let i = 0; i < provinces.length; i++) {
  39. id = provinces[i].id;
  40. let arr = {
  41. value: id,
  42. label: provinces[i].name,
  43. children: (function () {
  44. c = 0;
  45. dd = [];
  46. for (let j = 0; j < cities.length; j++) {
  47. if (cities[j].prov_id == id) {
  48. let arr1 = {
  49. value: cities[j].id,
  50. label: cities[j].name
  51. };
  52. dd[c] = arr1;
  53. c++;
  54. }
  55. }
  56. return dd;
  57. })()
  58. };
  59. data[i] = arr;
  60. }
  61. this.list = data;
  62. },
  63. }
  64. };
  65. </script>