SemesterSelect.vue 1.8 KB

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