diff --git a/bms-front/src/views/data/rule/config/index.vue b/bms-front/src/views/data/rule/config/index.vue index b2defbb3..c2814f23 100644 --- a/bms-front/src/views/data/rule/config/index.vue +++ b/bms-front/src/views/data/rule/config/index.vue @@ -327,11 +327,28 @@ function handleDelete(ids) { function searchProduct(keyword) { productLoading.value = true - listProductOptions({ productCode: keyword || undefined, status: '1' }).then(res => { - const rows = res.data || res.rows || [] + const kw = (keyword || '').trim() + const base = { status: '1' } + // product_code / product_name are separate likes; query both and merge + const reqs = kw + ? [ + listProductOptions({ ...base, productCode: kw }), + listProductOptions({ ...base, productName: kw }) + ] + : [listProductOptions(base)] + Promise.all(reqs).then(results => { const map = new Map() - ;[...productOptions.value, ...rows].forEach(p => { - if (p && p.productCode) map.set(p.productCode, p) + results.forEach(res => { + ;(res.data || res.rows || []).forEach(p => { + if (p && p.productCode) map.set(p.productCode, p) + }) + }) + // keep already-selected options visible + toList(form.value.productCodeList).forEach(code => { + if (code && !map.has(code)) { + const hit = productOptions.value.find(p => p.productCode === code) + map.set(code, hit || { productCode: code, productName: code }) + } }) productOptions.value = Array.from(map.values()) }).finally(() => {