ShipSearch.vue 1.4 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879
  1. <template>
  2. <el-autocomplete
  3. v-model="value"
  4. :fetch-suggestions="getSelectList"
  5. :placeholder="placeholder"
  6. @select="selectItem"
  7. :size="size"
  8. clearable
  9. @clear="clear"
  10. @input="handleInput"
  11. style="width: 200px"
  12. />
  13. </template>
  14. <script>
  15. import { onMounted, ref } from "vue";
  16. import api from "apis/fetch";
  17. import _ from "lodash";
  18. export default {
  19. props: {
  20. placeholder: {
  21. type: String,
  22. default: "请输入查询的船舶名称",
  23. },
  24. size: {
  25. type: String,
  26. default: "small",
  27. },
  28. clearable: {
  29. type: Boolean,
  30. default: true,
  31. },
  32. api: String,
  33. params: Object,
  34. value: String,
  35. },
  36. emits: ["input", "selectItem"],
  37. setup(props, { emit }) {
  38. let selectStr = ref("");
  39. const getSelectList = _.debounce(
  40. async (queryString, cb) => {
  41. if (queryString.length < 3) return;
  42. let res = await api[props.api]({
  43. term: queryString,
  44. });
  45. if (res.data.status == 0) {
  46. cb(res.data.result);
  47. }
  48. },
  49. 1000,
  50. { leading: true }
  51. );
  52. const selectItem = (item) => {
  53. emit("selectItem", item);
  54. };
  55. function clear() {
  56. selectStr.value = "";
  57. }
  58. function handleInput(e) {
  59. emit("input", e);
  60. }
  61. onMounted(() => {});
  62. return {
  63. selectStr,
  64. getSelectList,
  65. clear,
  66. selectItem,
  67. handleInput,
  68. };
  69. },
  70. };
  71. </script>
  72. <style lang="scss" scoped>
  73. </style>