96b659fbe5
Replace missing coin images with CSS 3D coins, auto-select city on province change, expand Shandong cities, and improve AI interpretation prompts after six casts. Co-authored-by: Cursor <cursoragent@cursor.com>
55 lines
1.3 KiB
TypeScript
55 lines
1.3 KiB
TypeScript
import regionsData from "@/lib/data/regions.json";
|
|
|
|
export interface RegionNode {
|
|
name: string;
|
|
longitude: number;
|
|
children?: Record<string, RegionNode>;
|
|
}
|
|
|
|
export type RegionsData = Record<string, RegionNode>;
|
|
|
|
export const regions = regionsData as RegionsData;
|
|
|
|
export function getProvinces(): { code: string; name: string }[] {
|
|
return Object.entries(regions)
|
|
.map(([code, node]) => ({
|
|
code,
|
|
name: node.name,
|
|
}))
|
|
.sort((a, b) => a.name.localeCompare(b.name, "zh-CN"));
|
|
}
|
|
|
|
export function getCities(provinceCode: string): { code: string; name: string }[] {
|
|
const province = regions[provinceCode];
|
|
if (!province?.children) {
|
|
return [];
|
|
}
|
|
return Object.entries(province.children)
|
|
.map(([code, node]) => ({
|
|
code,
|
|
name: node.name,
|
|
}))
|
|
.sort((a, b) => a.name.localeCompare(b.name, "zh-CN"));
|
|
}
|
|
|
|
export function getRegionLocation(
|
|
provinceCode: string,
|
|
cityCode: string,
|
|
): { name: string; longitude: number } | null {
|
|
const province = regions[provinceCode];
|
|
if (!province) {
|
|
return null;
|
|
}
|
|
const city = province.children?.[cityCode];
|
|
if (city) {
|
|
return {
|
|
name: `${province.name}${city.name}`,
|
|
longitude: city.longitude,
|
|
};
|
|
}
|
|
return {
|
|
name: province.name,
|
|
longitude: province.longitude,
|
|
};
|
|
}
|