87 lines
1.9 KiB
Vue
87 lines
1.9 KiB
Vue
<template>
|
||
<el-select
|
||
v-model="selectedValue"
|
||
placeholder="请选择或搜索订单"
|
||
clearable
|
||
filterable
|
||
remote
|
||
:remote-method="handleRemoteSearch"
|
||
:loading="loading"
|
||
@change="handleSelectChange"
|
||
style="width: 100%"
|
||
>
|
||
<!-- 下拉选项 -->
|
||
<el-option
|
||
v-for="item in orderList"
|
||
:key="item.orderId"
|
||
:label="item.orderCode"
|
||
:value="item.orderId"
|
||
/>
|
||
|
||
<!-- 无数据提示 -->
|
||
<el-option
|
||
v-if="orderList.length === 0 && !loading"
|
||
value=""
|
||
disabled
|
||
>
|
||
暂无匹配订单
|
||
</el-option>
|
||
</el-select>
|
||
</template>
|
||
|
||
<script>
|
||
import { listOrder } from '@/api/wms/order'
|
||
import { debounce } from 'lodash' // 引入防抖函数
|
||
|
||
export default {
|
||
name: 'OrderSelect',
|
||
data() {
|
||
return {
|
||
orderList: [],
|
||
loading: false,
|
||
queryParams: {
|
||
orderCode: undefined,
|
||
pageNum: 1,
|
||
pageSize: 20
|
||
},
|
||
selectedValue: undefined
|
||
}
|
||
},
|
||
created() {
|
||
// 初始化加载订单列表
|
||
this.getList()
|
||
|
||
// 初始化防抖搜索方法(300ms延迟)
|
||
this.debouncedSearch = debounce(this.getList, 300)
|
||
},
|
||
methods: {
|
||
// 远程搜索方法
|
||
handleRemoteSearch(query) {
|
||
this.queryParams.orderCode = query
|
||
this.queryParams.pageNum = 1 // 重置页码
|
||
this.debouncedSearch() // 使用防抖搜索
|
||
},
|
||
|
||
// 获取订单列表
|
||
getList() {
|
||
this.loading = true
|
||
listOrder(this.queryParams).then(res => {
|
||
this.orderList = res.rows || []
|
||
this.loading = false
|
||
}).catch(() => {
|
||
this.loading = false
|
||
this.orderList = []
|
||
})
|
||
},
|
||
|
||
// 选择变化时触发
|
||
handleSelectChange(orderId) {
|
||
// 找到选中的完整订单项
|
||
const selectedItem = this.orderList.find(item => item.orderId === orderId)
|
||
// 通过onchange事件返回完整订单项
|
||
this.$emit('change', selectedItem)
|
||
}
|
||
}
|
||
}
|
||
</script>
|