| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162 | 
							- <template>
 
-   <div>
 
-     <!--    @focus="onFocus" -->
 
-     <el-select
 
-       v-bind="{ ...$attrs }"
 
-       :value="value"
 
-       filterable
 
-       remote
 
-       reserve-keyword
 
-       collapse-tags
 
-       clearable
 
-       :multiple="multiple"
 
-       :placeholder="placeholder"
 
-       :remote-method="remoteMethod"
 
-       ref="select"
 
-       :loading="loading"
 
-       @focus="onFocus"
 
-       @change="changeValue"
 
-       :style="{ width: this.selectWidt + 'px!important' }"
 
-     >
 
-       <el-option
 
-         v-for="item in options"
 
-         :key="item.userId"
 
-         :label="item.userName"
 
-         :value="item.userId"
 
-       >
 
-       </el-option>
 
-     </el-select>
 
-   </div>
 
- </template>
 
- <script>
 
- const placeholder = {
 
-   setTeachers: "请选择老师",
 
-   setEducations: "请选乐团主管",
 
-   setEmploys:"请选择操作人"
 
- };
 
- import { throttle, slice, uniqBy } from "lodash";
 
- import selects from "@/store/modules/selects";
 
- export default {
 
-   name: "remote-search",
 
-   props: ["commit", "number", "value", "width", "multiple", "ariaPlaceholder"],
 
-   data() {
 
-     return {
 
-       options: [],
 
-       list: [],
 
-       listById: {},
 
-       loading: false,
 
-       constant: this.number || 50,
 
-       placeholder: this.ariaPlaceholder || placeholder[this.commit],
 
-       selectWidt: this.width || 180,
 
-       isFirst: true,
 
-     };
 
-   },
 
-   async mounted() {
 
-     // this.getList();
 
-     // console.log(this.value)
 
-     this.getOptions(this.value || "");
 
-   },
 
-   methods: {
 
-     async getList() {
 
-       await this.$store.dispatch(this.commit);
 
-       this.list = this.selects[this.enumer[this.commit]];
 
-       const data = {};
 
-       for (const item of this.list) {
 
-         data[item.userId] = item;
 
-       }
 
-       this.listById = data;
 
-       this.options =
 
-         this.list.length <= this.constant
 
-           ? this.list
 
-           : slice(this.list, 0, this.constant);
 
-       this.options = uniqBy(this.options, "userId");
 
-       //  console.log(this.options)
 
-     },
 
-     remoteMethod(query) {
 
-       // throttle
 
-       throttle(this.getOptions, 800)(query);
 
-     },
 
-     async getOptions(query) {
 
-       if (query && query.length > 0) {
 
-         let flag;
 
-         this.options = uniqBy(
 
-           this.list.filter((item) => {
 
-             flag =
 
-               item.userName
 
-                 .toLowerCase()
 
-                 .indexOf(query.toString().toLowerCase()) > -1 ||
 
-               item.userId == query;
 
-             if (this.multiple) {
 
-               return flag || this.value.includes(item.userId);
 
-             } else {
 
-               // console.log(query,this.value)
 
-               return flag || item.userId == this.value;
 
-             }
 
-           }),
 
-           "userId"
 
-         );
 
-       } else {
 
-         try {
 
-           await this.getList();
 
-           const optionids = this.options.map((item) => item.userId);
 
-           const valueItem = this.listById[this.value];
 
-           if (!optionids.includes(this.value) && valueItem) {
 
-             this.options.push(valueItem);
 
-             this.options = uniqBy(this.options, "userId");
 
-           }
 
-         } catch (e) {
 
-           // console.log(e)
 
-         }
 
-       }
 
-     },
 
-     changeValue(val) {
 
-       this.isFirst = false;
 
-       this.$emit("input", val);
 
-       this.$emit("change", val);
 
-       // console.log('来了',this.$refs.select.query)
 
-       this.$nextTick((res) => {
 
-         this.getOptions(this.$refs.select.query);
 
-       });
 
-     },
 
-     onFocus() {
 
-       this.$nextTick((res) => {
 
-         this.getOptions(this.$refs.select.query);
 
-       });
 
-     },
 
-   },
 
-   computed: {
 
-     enumer() {
 
-       return {
 
-         setTeachers: "teachers",
 
-         setEducations: "educations",
 
-         setEmploys:'employs'
 
-       };
 
-     },
 
-   },
 
-   watch: {
 
-     value: {
 
-       immediate: true,
 
-       deep: true,
 
-       handler(val) {
 
-         // && this.isFirst
 
-         if (this.multiple && this.isFirst) {
 
-           if (val?.length > 0) {
 
-             this.getOptions();
 
-           }
 
-         } else {
 
-           if (val && this.isFirst) {
 
-             this.getOptions();
 
-           } else {
 
-             this.getOptions(val);
 
-           }
 
-         }
 
-       },
 
-     },
 
-   },
 
- };
 
- </script>
 
- <style lang="scss" scoped>
 
- </style>
 
 
  |