RemoteSearch.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: 240px"
  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) return;
  42. let res = await api[props.api]({
  43. ...props.params,
  44. term: queryString,
  45. });
  46. if (res.data.status == 0) {
  47. cb(res.data.result);
  48. }
  49. },
  50. 1000,
  51. { leading: true }
  52. );
  53. const selectItem = (item) => {
  54. emit("selectItem", item);
  55. };
  56. function clear() {
  57. selectStr.value = "";
  58. }
  59. function handleInput(e) {
  60. emit("input", e);
  61. }
  62. onMounted(() => {});
  63. return {
  64. selectStr,
  65. getSelectList,
  66. clear,
  67. selectItem,
  68. handleInput,
  69. };
  70. },
  71. };
  72. </script>
  73. <style></style>