CourseSelect.vue 1.2 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768
  1. <template>
  2. <el-select
  3. v-model="selected"
  4. class="size-select"
  5. placeholder="请选择"
  6. @change="select"
  7. style="width: 100px;"
  8. filterable
  9. remote
  10. :remote-method="search"
  11. clearable
  12. >
  13. <el-option
  14. v-for="item in optionList"
  15. :key="item.courseCode"
  16. :label="item.courseName"
  17. :value="item.courseCode"
  18. >
  19. <span>{{ item.courseName }}</span>
  20. </el-option>
  21. </el-select>
  22. </template>
  23. <script>
  24. import { searchCourses } from "@/api/examwork-course";
  25. export default {
  26. name: "CourseSelect",
  27. props: {
  28. value: String,
  29. examId: String,
  30. },
  31. data() {
  32. return {
  33. optionList: [],
  34. selected: "",
  35. };
  36. },
  37. async created() {
  38. this.search();
  39. },
  40. watch: {
  41. value: {
  42. immediate: true,
  43. handler(val) {
  44. this.selected = val;
  45. },
  46. },
  47. },
  48. methods: {
  49. async search(query) {
  50. const res = await searchCourses({
  51. examId: this.examId,
  52. courseName: query,
  53. pageNumber: 1,
  54. pageSize: 30,
  55. });
  56. this.optionList = res?.data.data.records.records;
  57. },
  58. select() {
  59. this.$emit("input", this.selected);
  60. this.$emit("change", this.selected);
  61. },
  62. },
  63. };
  64. </script>
  65. <style></style>