ExamRoomSelect.vue 1.6 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879
  1. <template>
  2. <el-select
  3. v-model="selected"
  4. class="size-select"
  5. placeholder="请选择"
  6. @change="select"
  7. :style="styles"
  8. filterable
  9. remote
  10. :remote-method="search"
  11. clearable
  12. >
  13. <el-option
  14. v-for="item in optionList"
  15. :key="item.roomCode"
  16. :label="item.roomName"
  17. :value="item.roomCode"
  18. >
  19. <span>{{ item.roomName }}</span>
  20. </el-option>
  21. </el-select>
  22. </template>
  23. <script>
  24. import { object2QueryString } from "@/utils/utils";
  25. export default {
  26. name: "ExamRoomSelect",
  27. props: {
  28. examId: String,
  29. value: [String, Array],
  30. styles: { type: String },
  31. },
  32. data() {
  33. return {
  34. optionList: [],
  35. selected: "",
  36. };
  37. },
  38. async created() {
  39. this.search();
  40. },
  41. watch: {
  42. value: {
  43. immediate: true,
  44. handler(val) {
  45. this.selected = val;
  46. },
  47. },
  48. examId: {
  49. immediate: true,
  50. handler(val, oldval) {
  51. if (val !== oldval) {
  52. this.search("");
  53. this.$emit("input", "");
  54. this.$emit("change", {});
  55. }
  56. },
  57. },
  58. },
  59. methods: {
  60. async search(query) {
  61. this.optionList = [];
  62. if (!this.examId) return;
  63. const res = await this.$http.post(
  64. "/api/admin/sys/exam/privilegeQuery?" +
  65. object2QueryString({ examId: this.examId, roomName: query })
  66. );
  67. // console.log(res.data);
  68. this.optionList = res.data.data.examRooms;
  69. },
  70. select() {
  71. this.$emit("input", this.selected);
  72. this.$emit("change", this.selected);
  73. },
  74. },
  75. };
  76. </script>
  77. <style></style>