/// /** * 地区选项数据结构(统一格式) */ 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; }