PrintPlanSelect.vue 1.3 KB

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