import { Attachment } from "./Attachment"; import { Model, QueryPage } from "./Model"; import { MediaItem } from "./UI"; /** 交通类型 */ export enum TransportationType { PLANE = "PLANE", TRAIN = "TRAIN", CAR = "CAR", SHIP = "SHIP", SELF_DRIVING = "SELF_DRIVING", OTHER = "OTHER" } /** 交通类型中文映射 */ export const TransportationTypeLabel: Record = { [TransportationType.PLANE]: "飞机", [TransportationType.TRAIN]: "火车", [TransportationType.CAR]: "汽车", [TransportationType.SHIP]: "轮船", [TransportationType.SELF_DRIVING]: "自驾", [TransportationType.OTHER]: "其他" }; /** 旅行状态 */ export enum TravelStatus { PLANNING = "PLANNING", ONGOING = "ONGOING", COMPLETED = "COMPLETED" } /** 旅行状态中文映射 */ export const TravelStatusLabel: Record = { [TravelStatus.PLANNING]: "计划中", [TravelStatus.ONGOING]: "进行中", [TravelStatus.COMPLETED]: "已完成" }; /** 旅行状态图标映射 */ export const TravelStatusIcon: Record = { [TravelStatus.PLANNING]: "calendar", [TravelStatus.ONGOING]: "play-circle", [TravelStatus.COMPLETED]: "check-circle" }; /** 旅行计划实体 */ export interface Travel extends Model { /** 交通类型 */ transportationType?: TransportationType; /** 标题 */ title?: string; /** 内容 */ content?: string; /** 出行时间戳 */ travelAt?: number; /** 天数 */ days?: number; /** 状态 */ status?: TravelStatus; /** 格式化的出行日期 */ travelDate?: string; /** 格式化的出行时间 */ travelTime?: string; } /** 旅行分页查询 */ export interface TravelPage extends QueryPage { /** 条件过滤 */ equalsExample?: { status?: TravelStatus; }; } /** 地点类型 */ export enum TravelLocationType { ATTRACTION = "ATTRACTION", HOTEL = "HOTEL", RESTAURANT = "RESTAURANT", TRANSPORT = "TRANSPORT", SHOPPING = "SHOPPING", OTHER = "OTHER" } /** 地点类型中文映射 */ export const TravelLocationTypeLabel: Record = { [TravelLocationType.ATTRACTION]: "景点", [TravelLocationType.HOTEL]: "酒店", [TravelLocationType.RESTAURANT]: "餐厅", [TravelLocationType.TRANSPORT]: "交通站点", [TravelLocationType.SHOPPING]: "购物", [TravelLocationType.OTHER]: "其他" }; /** 地点类型图标映射 */ export const TravelLocationTypeIcon: Record = { [TravelLocationType.ATTRACTION]: "location", [TravelLocationType.HOTEL]: "home", [TravelLocationType.RESTAURANT]: "shop", [TravelLocationType.TRANSPORT]: "map-route", [TravelLocationType.SHOPPING]: "cart", [TravelLocationType.OTHER]: "ellipsis" }; /** 旅行地点实体 */ export interface TravelLocation extends Model { /** 关联的旅行计划 ID */ travelId?: number; /** 地点类型 */ type?: TravelLocationType; /** 标题 */ title?: string; /** 说明 */ description?: string; /** 纬度 */ lat?: number; /** 经度 */ lng?: number; /** 位置描述 */ location?: string; /** 费用 */ amount?: number; /** 是否需要身份证 */ requireIdCard?: boolean; /** 必要评分 */ score?: number; /** 附件 */ items?: Attachment[]; /** 保留的附件 ID 列表(更新时使用) */ attachmentIds?: number[]; /** 临时文件 ID 列表(创建/更新时上传附件用) */ tempFileIds?: string[]; // ---------- 视图属性 ---------- /** 类型标签 */ typeLabel?: string; /** 类型图标 */ typeIcon?: string; /** 分列后的 items,用于瀑布流展示 */ columnedItems?: MediaItem[][]; /** 媒体项(由附件转) */ mediaItems?: MediaItem[]; }