Files
klp-oa/klp-ui/src/components/KLPService/CustomerSelect/index.vue

62 lines
1.6 KiB
Vue
Raw Normal View History

2025-08-12 15:25:10 +08:00
<template>
<el-select filterable v-model="_customerId" remote :remote-method="remoteSearchCustomer" :style="style" :loading="customerLoading" placeholder="请选择客户">
<el-option v-for="item in customerList" :key="item[bindField]" :label="item.companyName" :value="item[bindField]" />
2025-08-12 15:25:10 +08:00
</el-select>
</template>
<script>
import { listCustomer } from '@/api/crm/customer';
2025-08-12 15:25:10 +08:00
export default {
name: 'CustomerSelect',
props: {
value: {
type: String,
default: ''
},
bindField: {
type: String,
default: 'customerId'
},
style: {
type: Object,
default: () => ({})
2025-08-12 15:25:10 +08:00
}
},
computed: {
_customerId: {
get() {
return this.value;
},
set(value) {
this.$emit('input', value);
// 找到对应的客户信息
const customer = this.customerList.find(item => item[this.bindField] === value);
// 触发 change 事件,传递客户信息
if (customer) {
this.$emit('change', customer);
}
2025-08-12 15:25:10 +08:00
}
}
},
data() {
return {
customerList: [],
customerLoading: false
}
},
mounted() {
this.remoteSearchCustomer('');
},
methods: {
remoteSearchCustomer(query) {
this.customerLoading = true;
listCustomer({ companyName: query, pageNum: 1, pageSize: 10 }).then(response => {
2025-08-12 15:25:10 +08:00
this.customerList = response.rows;
}).finally(() => {
this.customerLoading = false;
});
}
}
}
</script>