Cascader.vue 2.0 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970
  1. <template>
  2. <div class="Cascader">
  3. <el-cascader
  4. :options="options"
  5. :props="props"
  6. @expand-change="$expandChange"
  7. @change="$change"
  8. style="width:335px;"
  9. :placeholder="cascaderPlaceholder"
  10. ></el-cascader>
  11. </div>
  12. </template>
  13. <script>
  14. import { mapActions } from "vuex";
  15. /* 描述说明:
  16. options: 级联选择 树形数据
  17. props:配置项 (可看 https://element.eleme.cn/#/zh-CN/component/cascader )
  18. */
  19. export default {
  20. name: "Cascader",
  21. props: {
  22. options: { type: Array },
  23. props: { type: Object }
  24. },
  25. data() {
  26. return {
  27. cascaderPlaceholder: "请选择/不选择默认根级"
  28. };
  29. },
  30. created() {},
  31. methods: {
  32. ...mapActions(["fetch"]),
  33. $expandChange(value) {
  34. this.$emit("expand-change",value)
  35. this.cascaderPlaceholder = this.findAreaName(value);
  36. this.$children[0].presentText= this.cascaderPlaceholder
  37. },
  38. $change(value) {
  39. this.$emit("change",value)
  40. },
  41. // 级联选择时 因组件限制 需拼接 名字字符串在级联选择器上显示
  42. findAreaName(valueArr) {
  43. let _this = this
  44. let i = 0;
  45. let tmpStr = "";
  46. find(this.options);
  47. function find(subTree) {
  48. subTree.forEach(item => {
  49. // debugger
  50. if (item.id == valueArr[i]) {
  51. tmpStr += item[_this.props.label] + "/";
  52. if (
  53. i < valueArr.length &&
  54. item[_this.props.children] &&
  55. item[_this.props.children].length > 0
  56. ) {
  57. i++;
  58. find(item[_this.props.children]);
  59. }
  60. }
  61. });
  62. }
  63. return tmpStr;
  64. }
  65. }
  66. };
  67. </script>