main.vue 2.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105
  1. <template>
  2. <el-cascader
  3. style="width: 100%"
  4. :disabled="disabled"
  5. :placeholder="placeholder"
  6. v-model="value"
  7. :options="options"
  8. :size="size || 'medium'"
  9. @change="selectChange"
  10. :props="{
  11. expandTrigger: 'hover',
  12. children: 'child',
  13. multiple: multiple,
  14. checkStrictly: checkStrictly,
  15. }"
  16. ></el-cascader>
  17. </template>
  18. <script>
  19. import asyncRequest from "@/apis/components/all-organize";
  20. import resToken from "@/mixins/resToken";
  21. export default {
  22. name: "AllOrganize",
  23. mixins: [resToken],
  24. props: [
  25. "size",
  26. "value",
  27. "placeholder",
  28. "isDetail",
  29. "disabled",
  30. "names",
  31. "multiple",
  32. "checkStrictly",
  33. ],
  34. /**
  35. * 属性集合
  36. * @param {String} size : 组件大小 非必填
  37. * @param {Array} value : 选中值 必填
  38. * @param {String} placeholder : 提示信息 非必填
  39. * @param {Boolean} isDetail : 是否是详情逻辑 必填
  40. * @param {Boolean} disabled : 是否禁用 必填
  41. * @param {Boolean} multiple : 是否多选 必填
  42. * @param {Boolean} checkStrictly : 是否选择任意一项 必填
  43. *
  44. */
  45. /**
  46. * 事件集合
  47. * @searchChange : 选中值变化调用 抛出选中数据
  48. */
  49. data() {
  50. return {
  51. options: [],
  52. code: [],
  53. selectLoading: false,
  54. searchName: "",
  55. };
  56. },
  57. watch: {
  58. isDetail: function (val, old) {
  59. if (this.isDetail !== val) {
  60. this.options = [];
  61. this.selectLoading = false;
  62. this.getList();
  63. }
  64. },
  65. },
  66. created() {
  67. this.options = [];
  68. this.selectLoading = false;
  69. this.getList();
  70. },
  71. methods: {
  72. async selectChange(e) {
  73. this.$emit("searchChange", e);
  74. },
  75. async getList() {
  76. this.options = [];
  77. const res = await asyncRequest.list({});
  78. if (res && res.code === 0 && res.data) {
  79. this.options = res.data;
  80. this.recursion(this.options);
  81. } else {
  82. this.options = [];
  83. }
  84. },
  85. recursion(list) {
  86. list.map((v) => {
  87. if (v && Array.isArray(v.child)) {
  88. v.value = v.id + "";
  89. v.label = v.name;
  90. if (v.child.length === 0) {
  91. delete v["child"];
  92. } else {
  93. this.recursion(v.child);
  94. }
  95. }
  96. return v;
  97. });
  98. },
  99. },
  100. };
  101. </script>
  102. <style>
  103. </style>