TypeOrgSelect.vue 1.5 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273
  1. <template>
  2. <el-select
  3. v-model="selected"
  4. class="type-org-select"
  5. :placeholder="placeholder"
  6. :style="styles"
  7. filterable
  8. :clearable="clearable"
  9. :disabled="disabled"
  10. @change="select"
  11. >
  12. <el-option
  13. v-for="item in optionList"
  14. :key="item.id"
  15. :value="item.id"
  16. :label="item.name"
  17. >
  18. </el-option>
  19. </el-select>
  20. </template>
  21. <script>
  22. import { organizationFindByTypeList } from "../../modules/base/api";
  23. import { ORG_TYPE } from "@/constants/enumerate";
  24. export default {
  25. name: "type-org-select",
  26. props: {
  27. disabled: { type: Boolean, default: false },
  28. placeholder: { type: String, default: "请选择" },
  29. value: { type: [Number, String], default: "" },
  30. styles: { type: String, default: "" },
  31. clearable: { type: Boolean, default: true },
  32. type: {
  33. type: String,
  34. default: "COLLEG",
  35. validator(val) {
  36. return Object.keys(ORG_TYPE).indexOf(val) > -1;
  37. }
  38. }
  39. },
  40. data() {
  41. return {
  42. optionList: [],
  43. selected: ""
  44. };
  45. },
  46. watch: {
  47. value: {
  48. immediate: true,
  49. handler(val) {
  50. this.selected = val;
  51. }
  52. }
  53. },
  54. created() {
  55. this.search();
  56. },
  57. methods: {
  58. async search() {
  59. const res = await organizationFindByTypeList({ orgType: this.type });
  60. this.optionList = res;
  61. },
  62. select() {
  63. this.$emit("input", this.selected);
  64. this.$emit(
  65. "change",
  66. this.optionList.find(item => item.id === this.selected)
  67. );
  68. }
  69. }
  70. };
  71. </script>