import { DataModel } from '@imengyu/js-request-transform'; import { MengyuServerRequestModule } from '../RequestModules'; export interface CityItem { first_letter: string; code: string; name: string; /** * 0:省 * 1:市 * 2:区 */ type: number; children?: CityItem[]; } /** 行政区划层级(与服务端 MapCityData.level 一致) */ export type MapCityDataLevel = 'province' | 'city' | 'district'; /** * 省市区数据模型 */ export class MapCityData extends DataModel { constructor() { super(MapCityData, '省市区数据'); } adcode = ''; parentAdCode: string | null = null; citycode = ''; name = ''; center = ''; polyline = ''; pinyin = ''; level = '' as MapCityDataLevel; } export class MapApi extends MengyuServerRequestModule { /** * 快速获取地区编码 * @param name 地区名称 * @param city 城市名称(可选,用于消歧) */ simpleGetRegionCode(name: string, city?: string) { return this.get( `/content/map/simpleGetRegionCode`, '快速获取地区编码', { name, city }, ) .then(res => res.requireData() as string) .catch(e => { throw e }); } /** * 简单获取地区(扁平地区信息) * @param name 地区名称 * @param city 城市名称(可选,用于消歧) */ simpleGetRegion(name: string, city?: string) { return this.get( `/content/map/simpleGetRegion`, '简单获取地区', { name, city }, MapCityData, ); } /** * 按编码获取地区详情 * @param adcode 地区编码 */ getRegionInfo(adcode: string) { return this.get( `/content/map/getRegionInfo`, '按编码获取地区详情', { adcode }, ); } /** * 获取子级地区列表 * @param adcode 地区编码(可选;不传则返回省级列表) */ getRegionChildren(adcode?: string) { return this.get( `/content/map/getRegionChildren`, '获取子级地区列表', { adcode }, ); } loadCityData(full = false) : Promise { return new Promise((resolve, reject) => { uni.request({ url: `https://mn.wenlvti.net/app_static/xiangyuan/data/ChinaCityData${full ? '' : '.slim'}.json`, method: 'GET', success(result) { if (result.statusCode === 200) { resolve(result.data as CityItem[]); } else { reject(new Error(`请求失败,状态码:${result.statusCode}`)); } }, fail(error) { reject(error); } }) }); } } export default new MapApi();