PaperNumberSelect.vue 1.4 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667
  1. <template>
  2. <el-select
  3. v-model="selected"
  4. class="paper-number-select"
  5. :placeholder="placeholder"
  6. filterable
  7. :clearable="clearable"
  8. :disabled="disabled"
  9. @change="select"
  10. >
  11. <el-option v-for="(item, index) in optionList" :key="index" :value="item">
  12. <span>{{ item }}</span>
  13. </el-option>
  14. </el-select>
  15. </template>
  16. <script>
  17. import { pageNumberQuery } from "../../modules/exam/api";
  18. export default {
  19. name: "paper-number-select",
  20. props: {
  21. disabled: { type: Boolean, default: false },
  22. placeholder: { type: String, default: "请选择" },
  23. value: { type: [Number, String], default: "" },
  24. clearable: { type: Boolean, default: true },
  25. printPlanId: { type: [String, Array], default: "" }
  26. },
  27. data() {
  28. return {
  29. optionList: [],
  30. selected: ""
  31. };
  32. },
  33. watch: {
  34. value: {
  35. immediate: true,
  36. handler(val) {
  37. this.selected = val;
  38. }
  39. },
  40. printPlanId(val, oldval) {
  41. if (val !== oldval) {
  42. this.search("");
  43. this.$emit("input", "");
  44. this.$emit("change", {});
  45. }
  46. }
  47. },
  48. async created() {
  49. this.search();
  50. },
  51. methods: {
  52. async search(query) {
  53. const res = await pageNumberQuery({
  54. param: query,
  55. printPlanId: this.printPlanId
  56. });
  57. this.optionList = res;
  58. },
  59. select() {
  60. this.$emit("input", this.selected);
  61. this.$emit("change", this.selected);
  62. }
  63. }
  64. };
  65. </script>