59 lines
		
	
	
		
			1.3 KiB
		
	
	
	
		
			Vue
		
	
	
	
	
	
			
		
		
	
	
			59 lines
		
	
	
		
			1.3 KiB
		
	
	
	
		
			Vue
		
	
	
	
	
	
| <template>
 | |
|   <section class="AiUserPicker">
 | |
|     <el-select size="small" :value="value" placeholder="选择人员" clearable @change="handleSelect" v-bind="$attrs"
 | |
|                filterable>
 | |
|       <el-option v-for="row in list" :key="row.id" :value="row.id" :label="row[label]"/>
 | |
|     </el-select>
 | |
|   </section>
 | |
| </template>
 | |
| 
 | |
| <script>
 | |
| export default {
 | |
|   name: "AiUserPicker",
 | |
|   model: {
 | |
|     prop: "value",
 | |
|     event: "select"
 | |
|   },
 | |
|   props: {
 | |
|     value: {default: ""},
 | |
|     instance: Function,
 | |
|     action: {default: "/appportaluser/list"},
 | |
|     params: {default: () => ({})},
 | |
|     label: {default: "phone"},
 | |
|     name: {default: ""}
 | |
|   },
 | |
|   data() {
 | |
|     return {
 | |
|       list: []
 | |
|     }
 | |
|   },
 | |
|   methods: {
 | |
|     getUsers() {
 | |
|       let {action, params} = this
 | |
|       this.instance?.post(action, null, {params: {...params, size: 9999}}).then(res => {
 | |
|         if (res?.data) {
 | |
|           this.list = res.data.records
 | |
|         }
 | |
|       })
 | |
|     },
 | |
|     handleSelect(v) {
 | |
|       let list = this.list.filter(e => [v].flat().includes(e.id))
 | |
|       this.$emit('select', v)
 | |
|       this.$emit("update:name", list?.map(e => e[this.label])?.toString() || "")
 | |
|       this.$emit("list", list)
 | |
|     }
 | |
|   },
 | |
|   created() {
 | |
|     this.getUsers()
 | |
|   }
 | |
| }
 | |
| </script>
 | |
| 
 | |
| <style lang="scss" scoped>
 | |
| .AiUserPicker {
 | |
|   .el-select {
 | |
|     width: 100%;
 | |
|   }
 | |
| }
 | |
| </style>
 |