///
/**
* 地区选项数据结构(统一格式)
*/
export interface RegionOption {
/** 地区代码(唯一标识,如 'CN'、'HK') */
region_code: string;
/** 中文名称 */
region_ch: string;
/** 英文名称 */
region_en: string;
/** ISO 3166-1 alpha-2 代码 */
region_a2_code?: string;
/** ISO 3166-1 alpha-3 代码 */
region_a3_code?: string;
/** 是否禁用(合规区域 creatable=false 时使用) */
disabled?: boolean;
/** 禁用原因提示 */
disabledReason?: string;
}
/**
* 数据源类型
* - default: 全部国家区域(不带任何参数,返回全部 251 个)/api/v5/business/region/query
* - business: 业务最终生效的区域(必须传 gameId)/api/v5/business/region/query
*/
export type RegionDataSource = 'default' | 'business';
/**
* 标签格式
* - name: 中文名
* - name_en: 英文名
* - name_en_name: 英文名(中文名)
* - code: 仅代码
*/
export type RegionLabelFormat = 'name' | 'name_en' | 'name_en_name' | 'code';
/**
* 组件文案集合
*/
export interface PntRegionSelectTexts {
/** 占位提示 */
placeholder?: string;
/** 全选按钮 */
selectAll?: string;
/** 反选按钮 */
invertSelection?: string;
/** 清空按钮 */
clearAll?: string;
/** 已选数量提示({count} 为占位符) */
selectedCount?: string;
/** 搜索无结果提示 */
noResult?: string;
/** 加载中提示 */
loading?: string;
/** 批量导入按钮 */
importBtn?: string;
/** 批量导入弹窗标题 */
importTitle?: string;
/** 批量导入弹窗说明 */
importTip?: string;
/** 批量导入输入框占位 */
importPlaceholder?: string;
/** 解析按钮 */
parseBtn?: string;
/** 导入确认按钮 */
importConfirmBtn?: string;
/** 取消按钮 */
cancelBtn?: string;
/** 解析结果:未匹配 */
importUnmatched?: string;
/** 解析结果:待导入 */
importPending?: string;
/** 解析结果:已存在 */
importExists?: string;
/** 复制未匹配项提示 */
copyUnmatchedTip?: string;
/** 复制成功提示 */
copySuccess?: string;
/** 解析结果表格:地区列 */
importRegionColumn?: string;
/** 解析结果表格:状态列 */
importStatusColumn?: string;
}
export declare const DEFAULT_TEXTS: Required;
/** 英文文案(locale='en' 时使用) */
export declare const EN_TEXTS: Required;
/** 根据 locale 获取默认文案 */
export declare const getTextsByLocale: (locale: 'zh' | 'en') => Required;
/**
* 地区选择器组件 Props
*/
export interface PntRegionSelectProps {
/**
* 当前选中值:多选为地区代码数组,单选为单个地区代码
* (兼容 TDesign FormItem 注入的单值/多值)
*/
value?: string | string[];
/**
* 值变化回调:多选时回传 (string[], RegionOption[]),
* 单选时回传 (string, RegionOption)
*/
onChange?: (value: string[] | string, options: RegionOption[] | RegionOption) => void;
/** 是否多选 @default true */
multiple?: boolean;
/** 数据源类型 @default 'default' */
dataSource?: RegionDataSource;
/**
* 接口作用域 @default 'business'
* - business: 业务级区域查询 /api/v5/business/region/query
* - platform: 平台级区域查询 /api/v5/business/region/plat-query
*/
scope?: 'business' | 'platform';
/** 业务ID(dataSource='business' 时必传) */
gameId?: string | number;
/**
* 语言设置 @default 'zh'
* - zh: 中文(默认文案)
* - en: 英文(内置英文文案)
* @description 优先级低于 texts prop,高于 PntProvider 全局 locale
*/
locale?: 'zh' | 'en';
/**
* 外部受控选项列表(传入后跳过内部请求,直接使用该数据;
* 适用于选项由父组件获取/过滤的场景)
*/
options?: RegionOption[];
/** 是否禁用 @default false */
disabled?: boolean;
/** 占位文案 */
placeholder?: string;
/** 最大可选数量(多选时生效) */
max?: number;
/** 是否可搜索 @default true */
filterable?: boolean;
/** 标签格式 @default 'name' */
labelFormat?: RegionLabelFormat;
/** 自定义文案 */
texts?: PntRegionSelectTexts;
/** 数据加载完成回调 */
onLoaded?: (options: RegionOption[]) => void;
/** 自定义选项禁用逻辑 */
optionDisabled?: (item: RegionOption) => boolean;
/** 自定义选项过滤逻辑(内部拉取数据时生效,用于只展示部分区域) */
optionFilter?: (item: RegionOption) => boolean;
/** 自定义选项 tooltip */
optionTooltip?: (item: RegionOption) => string;
/**
* 是否启用批量导入(仅多选时生效):
* 输入框右侧显示导入按钮,支持粘贴文本按 代码/中文名/英文名 解析匹配
* @default false
*/
importable?: boolean;
/** 是否在工具栏显示反选按钮(仅多选时生效) @default false */
invertible?: boolean;
/** 最小折叠数量(多选时透传 TDesign Select) */
minCollapsedNum?: number;
/** 折叠项自定义渲染(透传 TDesign Select) */
collapsedItems?: (props: {
value: unknown[];
collapsedSelectedItems: unknown[];
count: number;
}) => React.ReactNode;
/** 失焦回调(透传 TDesign Select,常用于表单校验触发) */
onBlur?: (context: {
value: unknown;
}) => void;
/** 批量导入弹窗属性透传(如 attach 挂载容器) */
importDialogProps?: Record;
/** 自定义类名 */
className?: string;
/** 自定义样式 */
style?: React.CSSProperties;
/** 弹层属性透传 */
popupProps?: Record;
/**
* 对外输出是否保留数据源原始码(含前导零,如 '004')
* - true(默认): 输出数据源原始码,如 '004'、'012'
* - false: 输出归一化码(去前导零),如 '4'、'12'
* @description 旧接口存储/提交不带前导零的项目需设为 false
* @default true
*/
preserveLeadingZero?: boolean;
}