feat(fulfillment): 增加统一渠道配置搜索与筛选
This commit is contained in:
@@ -249,6 +249,8 @@ router.get(
|
||||
(req) =>
|
||||
listChannelRulesPage({
|
||||
channel: String(req.query.channel || ''),
|
||||
source: String(req.query.source || ''),
|
||||
keyword: String(req.query.keyword || ''),
|
||||
page: Number(req.query.page),
|
||||
pageSize: Number(req.query.pageSize),
|
||||
...(req.query.enabled === undefined
|
||||
|
||||
@@ -1098,6 +1098,8 @@ export async function assignChannelBySku(input: {
|
||||
|
||||
type ChannelRuleFilterInput = {
|
||||
channel?: string
|
||||
source?: string
|
||||
keyword?: string
|
||||
enabled?: boolean
|
||||
}
|
||||
|
||||
@@ -1108,6 +1110,20 @@ function buildChannelRuleFilter(input: ChannelRuleFilterInput) {
|
||||
params.push(input.channel)
|
||||
clauses.push(`channel = $${params.length}`)
|
||||
}
|
||||
const source = String(input.source || '').trim()
|
||||
if (source === 'rule') {
|
||||
clauses.push(`source LIKE 'rule:%'`)
|
||||
} else if (source) {
|
||||
params.push(source)
|
||||
clauses.push(`source = $${params.length}`)
|
||||
}
|
||||
const keyword = String(input.keyword || '').trim()
|
||||
if (keyword) {
|
||||
params.push(`%${keyword}%`)
|
||||
clauses.push(
|
||||
`(match_key ILIKE $${params.length} OR config_json::text ILIKE $${params.length} OR COALESCE(note, '') ILIKE $${params.length})`,
|
||||
)
|
||||
}
|
||||
if (typeof input.enabled === 'boolean') {
|
||||
params.push(input.enabled)
|
||||
clauses.push(`enabled = $${params.length}`)
|
||||
|
||||
@@ -401,6 +401,15 @@ test(
|
||||
assert.equal(firstRulePage.pageSize, 2)
|
||||
assert.ok(firstRulePage.items.length <= 2)
|
||||
assert.equal(firstRulePage.total, listedRules.length)
|
||||
const searchedRules = await listChannelRulesPage({
|
||||
keyword: voucherSku,
|
||||
source: 'operator',
|
||||
enabled: true,
|
||||
page: 1,
|
||||
pageSize: 10,
|
||||
})
|
||||
assert.ok(searchedRules.items.some((rule) => rule.id === savedRule.id))
|
||||
assert.ok(searchedRules.items.every((rule) => rule.source === 'operator'))
|
||||
const deletedRules = await deleteChannelRules([savedRule.id])
|
||||
assert.equal(deletedRules.deletedCount, 1)
|
||||
assert.deepEqual(deletedRules.deletedIds, [savedRule.id])
|
||||
|
||||
Reference in New Issue
Block a user