main.vue 2.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118
  1. <template>
  2. <el-select
  3. v-model="value"
  4. multiple
  5. filterable
  6. remote
  7. :multiple-limit="1"
  8. reserve-keyword
  9. :size="size || 'medium'"
  10. style="width: 100%"
  11. :placeholder="placeholder || ''"
  12. :disabled="disabled"
  13. :remote-method="remoteMethod"
  14. :loading="selectLoading"
  15. @change="selectChange"
  16. >
  17. <el-option
  18. v-for="(item, index) in options"
  19. :key="item.id + index"
  20. :label="item.platform_name"
  21. :value="item.platform_code"
  22. :disabled="item.status === '0'"
  23. >
  24. </el-option>
  25. </el-select>
  26. </template>
  27. <script>
  28. import asyncRequest from "@/apis/components/search-terrace";
  29. import resToken from "@/mixins/resToken";
  30. export default {
  31. name: "SearchTerrace",
  32. mixins: [resToken],
  33. props: [
  34. "size",
  35. "value",
  36. "placeholder",
  37. "isDetail",
  38. "disabled",
  39. "type",
  40. "names",
  41. ],
  42. /**
  43. * 属性集合
  44. * @param {String} size : 组件大小 非必填
  45. * @param {Array} value : 选中值 必填
  46. * @param {String} placeholder : 提示信息 非必填
  47. * @param {Boolean} isDetail : 是否是详情逻辑 必填
  48. * @param {Boolean} disabled : 是否禁用 必填
  49. * @param {String} names : 选中值label 展示详情必填
  50. */
  51. /**
  52. * 事件集合
  53. * @searchChange : 选中值变化调用 抛出选中数据
  54. */
  55. data() {
  56. return {
  57. options: [],
  58. selectLoading: false,
  59. searchName: "",
  60. formValue: {
  61. page: 1,
  62. size: 100,
  63. start: "",
  64. end: "",
  65. platform_name: "",
  66. creater: "",
  67. },
  68. };
  69. },
  70. mounted() {
  71. this.options = [];
  72. this.selectLoading = false;
  73. },
  74. methods: {
  75. async selectChange(e) {
  76. if (e && e.length > 0) {
  77. let index = this.options.findIndex((v) => v.platform_code === e[0]);
  78. if (index !== -1) {
  79. let model = {
  80. id: this.options[index].id,
  81. code: this.options[index].platform_code,
  82. label: this.options[index].platform_name,
  83. };
  84. this.$emit("searchChange", model);
  85. } else {
  86. this.$emit("searchChange", {});
  87. }
  88. } else {
  89. this.$emit("searchChange", {});
  90. }
  91. },
  92. async remoteMethod(query) {
  93. this.selectLoading = true;
  94. if (query !== "") {
  95. this.options = [];
  96. this.formValue.platform_name = query;
  97. const { code, data, message } = await asyncRequest.list(this.formValue);
  98. if (code === 0) {
  99. const { list } = data;
  100. this.options = list;
  101. } else if (code >= 100 && code <= 104) {
  102. await this.logout();
  103. } else {
  104. this.$message.warning(message);
  105. }
  106. } else {
  107. this.options = [];
  108. }
  109. this.selectLoading = false;
  110. },
  111. },
  112. };
  113. </script>
  114. <style>
  115. </style>