37 lines
1.5 KiB
JavaScript
37 lines
1.5 KiB
JavaScript
import { createRequestError } from './request-client.js'
|
|
import { normalizeResponseText } from './response-normalizers.js'
|
|
|
|
export const normalizeRegionParentCode = (value) => {
|
|
if (value === undefined || value === null || value === '') return '0'
|
|
if (typeof value !== 'string' || !value.trim()) throw new TypeError('地区父级标识无效')
|
|
return value.trim()
|
|
}
|
|
|
|
export const normalizeRegionCode = (value) => {
|
|
if (typeof value !== 'string' || !value.trim()) throw new TypeError('行政区划编码无效')
|
|
return value.trim()
|
|
}
|
|
|
|
export const normalizeRegionSelectorItems = (value) => {
|
|
if (!Array.isArray(value)) {
|
|
throw createRequestError('地区选择响应不是列表', 'REGION_RESPONSE_INVALID')
|
|
}
|
|
return value.map((item) => {
|
|
if (!item || typeof item !== 'object' || Array.isArray(item)) {
|
|
throw createRequestError('地区选择响应包含无效条目', 'REGION_RESPONSE_INVALID')
|
|
}
|
|
const regionCode = normalizeResponseText(item.regionCode ?? item.value, 'regionCode')
|
|
const label = normalizeResponseText(item.label ?? item.regionName, 'label')
|
|
if (!regionCode || !label) {
|
|
throw createRequestError('地区选择响应缺少地区名称或标识', 'REGION_RESPONSE_INVALID')
|
|
}
|
|
return {
|
|
regionCode,
|
|
label,
|
|
parentCode: normalizeResponseText(item.parentCode, 'parentCode'),
|
|
leaf: item.leaf === true,
|
|
regionLevel: Number.isInteger(item.regionLevel) ? item.regionLevel : null
|
|
}
|
|
})
|
|
}
|