basic Uer UI
Build and Release / release (push) Successful in 1m30s

This commit is contained in:
taDuc
2026-06-06 15:36:15 +07:00
parent 61949e7149
commit 820e0b5216
65 changed files with 3460 additions and 1322 deletions
Binary file not shown.

After

Width:  |  Height:  |  Size: 1.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.6 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.6 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.5 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 692 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.5 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.0 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.3 KiB

+284
View File
@@ -0,0 +1,284 @@
#!/usr/bin/env python3
from __future__ import annotations
import argparse
import html
import json
import re
import sys
import unicodedata
from html.parser import HTMLParser
from pathlib import Path
from urllib.parse import unquote, urlparse
import requests
API_URL = "https://vi.wikipedia.org/w/api.php"
DEFAULT_OUTPUT_DIR = Path(__file__).resolve().parents[1] / "tmp" / "wiki"
USER_AGENT = "UltimateHistoryMapWikiImporter/1.0"
ALLOWED_TAGS = {
"p",
"blockquote",
"h2",
"h3",
"h4",
"h5",
"h6",
"ul",
"ol",
"li",
"b",
"strong",
"i",
"em",
"code",
"pre",
"a",
"br",
}
SKIP_TAGS = {
"audio",
"canvas",
"figure",
"form",
"iframe",
"img",
"input",
"map",
"math",
"meta",
"noscript",
"picture",
"script",
"style",
"svg",
"table",
"video",
}
SKIP_CLASS_PARTS = (
"ambox",
"authority-control",
"catlinks",
"error",
"hatnote",
"metadata",
"mw-editsection",
"mw-empty-elt",
"navbox",
"navigation-not-searchable",
"noprint",
"reference",
"reflist",
"shortdescription",
"sidebar",
"toc",
"vertical-navbox",
)
VOID_TAGS = {"br"}
class WikiHtmlSanitizer(HTMLParser):
def __init__(self) -> None:
super().__init__(convert_charrefs=False)
self.parts: list[str] = []
self.open_tags: list[str] = []
self.skip_depth = 0
def handle_starttag(self, tag: str, attrs: list[tuple[str, str | None]]) -> None:
tag = tag.lower()
if self.skip_depth:
self.skip_depth += 1
return
attr_map = {name.lower(): value or "" for name, value in attrs}
if tag in SKIP_TAGS or self._has_skipped_class(attr_map.get("class", "")):
self.skip_depth = 1
return
if tag not in ALLOWED_TAGS:
return
if tag == "a":
self.parts.append('<a href="__missing__">')
elif tag == "br":
self.parts.append("<br>")
return
else:
self.parts.append(f"<{tag}>")
self.open_tags.append(tag)
def handle_startendtag(self, tag: str, attrs: list[tuple[str, str | None]]) -> None:
tag = tag.lower()
if self.skip_depth:
return
attr_map = {name.lower(): value or "" for name, value in attrs}
if tag in SKIP_TAGS or self._has_skipped_class(attr_map.get("class", "")):
return
if tag == "br":
self.parts.append("<br>")
def handle_endtag(self, tag: str) -> None:
tag = tag.lower()
if self.skip_depth:
self.skip_depth -= 1
return
if tag not in ALLOWED_TAGS or tag in VOID_TAGS:
return
for index in range(len(self.open_tags) - 1, -1, -1):
if self.open_tags[index] == tag:
while len(self.open_tags) > index:
closing_tag = self.open_tags.pop()
self.parts.append(f"</{closing_tag}>")
return
def handle_data(self, data: str) -> None:
if self.skip_depth:
return
if not data:
return
self.parts.append(html.escape(data, quote=False))
def handle_entityref(self, name: str) -> None:
if self.skip_depth:
return
self.parts.append(f"&{name};")
def handle_charref(self, name: str) -> None:
if self.skip_depth:
return
self.parts.append(f"&#{name};")
def get_html(self) -> str:
while self.open_tags:
self.parts.append(f"</{self.open_tags.pop()}>")
return "".join(self.parts)
@staticmethod
def _has_skipped_class(class_value: str) -> bool:
classes = class_value.lower().split()
return any(any(part in cls for part in SKIP_CLASS_PARTS) for cls in classes)
def title_from_source(source: str) -> str:
parsed = urlparse(source)
if parsed.scheme and parsed.netloc:
if "/wiki/" in parsed.path:
return unquote(parsed.path.rsplit("/wiki/", 1)[1]).replace("_", " ")
raise ValueError(f"Unsupported Wikipedia URL: {source}")
return source.replace("_", " ").strip()
def slugify_title(title: str) -> str:
text = unicodedata.normalize("NFD", title.strip().lower())
text = "".join(ch for ch in text if unicodedata.category(ch) != "Mn")
text = text.replace("đ", "d")
text = re.sub(r"[^a-z0-9]+", "-", text)
return text.strip("-") or "wiki"
def fetch_wikipedia_html(title: str) -> tuple[str, str]:
response = requests.get(
API_URL,
params={
"action": "parse",
"page": title,
"prop": "text",
"format": "json",
"formatversion": "2",
"redirects": "1",
"disableeditsection": "1",
},
headers={"User-Agent": USER_AGENT},
timeout=30,
)
response.raise_for_status()
payload = response.json()
if "error" in payload:
raise RuntimeError(json.dumps(payload["error"], ensure_ascii=False))
parsed = payload.get("parse") or {}
fetched_title = str(parsed.get("title") or title).strip()
article_html = str(parsed.get("text") or "")
if not article_html.strip():
raise RuntimeError(f"No article HTML returned for title: {title}")
return fetched_title, article_html
def sanitize_wikipedia_html(article_html: str) -> str:
parser = WikiHtmlSanitizer()
parser.feed(article_html)
parser.close()
content = html.unescape(parser.get_html())
content = normalize_fragment(content)
return content
def normalize_fragment(content: str) -> str:
content = re.sub(r"\r\n?", "\n", content)
content = re.sub(r"[ \t\f\v]+", " ", content)
content = re.sub(r"\s*\n\s*", "\n", content)
content = re.sub(r">\s+<", "><", content)
content = re.sub(r"<(p|li|h[2-6]|blockquote)>\s*</\1>", "", content)
content = re.sub(r"<(ul|ol)>\s*</\1>", "", content)
content = re.sub(r"(</(?:p|h[2-6]|ul|ol|li|blockquote|pre)>)", r"\1\n", content)
content = re.sub(r"\n{2,}", "\n", content)
return content.strip()
def put_first_paragraph_in_blockquote(content: str) -> str:
match = re.search(r"<p>(.*?)</p>", content, flags=re.S)
if not match:
return content
quote_inner = match.group(1).strip()
before = content[: match.start()].strip()
after = content[match.end() :].strip()
parts = []
if quote_inner:
parts.append(f"<blockquote>{quote_inner}</blockquote>")
if before:
parts.append(before)
if after:
parts.append(after)
return "\n".join(parts).strip()
def write_article(source: str, output_dir: Path, output_name: str | None = None) -> Path:
title = title_from_source(source)
fetched_title, article_html = fetch_wikipedia_html(title)
content = sanitize_wikipedia_html(article_html)
content = put_first_paragraph_in_blockquote(content)
filename = output_name or f"{slugify_title(fetched_title)}.html"
if not filename.endswith(".html"):
filename = f"{filename}.html"
output_dir.mkdir(parents=True, exist_ok=True)
output_path = output_dir / filename
output_path.write_text(content + "\n", encoding="utf-8")
return output_path
def main() -> int:
parser = argparse.ArgumentParser(description="Fetch a Vietnamese Wikipedia article into UHM wiki HTML format.")
parser.add_argument("source", help="Vietnamese Wikipedia URL or page title.")
parser.add_argument("--output-dir", type=Path, default=DEFAULT_OUTPUT_DIR)
parser.add_argument("--output-name", help="Output filename. Defaults to a slug from the fetched title.")
args = parser.parse_args()
output_path = write_article(args.source, args.output_dir, args.output_name)
print(output_path)
return 0
if __name__ == "__main__":
try:
raise SystemExit(main())
except Exception as exc:
print(f"error: {exc}", file=sys.stderr)
raise SystemExit(1)
+14 -49
View File
@@ -3,7 +3,7 @@
import { useCallback, useEffect, useMemo, useRef, useState, type SetStateAction } from "react";
import { useParams, useRouter } from "next/navigation";
import { useShallow } from "zustand/react/shallow";
import Map, { type MapHandle } from "@/uhm/components/Map";
import Map, { type MapFeaturePayload, type MapHandle } from "@/uhm/components/Map";
import Editor from "@/uhm/components/Editor";
import BackgroundLayersPanel from "@/uhm/components/editor/BackgroundLayersPanel";
import TimelineBar from "@/uhm/components/ui/TimelineBar";
@@ -423,6 +423,14 @@ function EditorPageContent() {
const isViewerPreviewMode = mode === "preview";
const isReplayPreviewMode = mode === "replay_preview";
const isAnyPreviewMode = isViewerPreviewMode || isReplayPreviewMode;
const isEditingGeometryOrReplay =
mode === "draw" ||
mode === "add-point" ||
mode === "add-line" ||
mode === "add-path" ||
mode === "add-circle" ||
mode === "replay" ||
(mode === "select" && selectedFeatureIds.length > 0);
const previewReturnModeRef = useRef<EditorMode>("select");
const replayPreviewReturnRef = useRef<{
mode: "replay" | "preview";
@@ -1172,12 +1180,12 @@ function EditorPageContent() {
}
}, [isReplayPreviewMode, isViewerPreviewMode, exitReplayPreview, openSelectedViewerReplayPreview, viewerPreviewSelectedReplay]);
const handleMapFeatureClick = useCallback((payload: any) => {
const handleMapFeatureClick = useCallback((payload: MapFeaturePayload | null) => {
previewLayoutRef.current?.handleFeatureClick(payload);
}, []);
const handleMapHoverPopupContent = useCallback((payload: any) => {
return previewLayoutRef.current?.getHoverPopupContent(payload) ?? null;
const handleMapHoverPopupContent = useCallback((feature: Feature) => {
return previewLayoutRef.current?.getHoverPopupContent(feature) ?? null;
}, []);
const handleMapPlayPreviewReplay = useCallback(() => {
@@ -2393,7 +2401,7 @@ function EditorPageContent() {
const handleCreateFeature = useCallback((feature: Feature) => {
editor.createFeature(feature);
setSelectedFeatureIds([feature.properties.id]);
}, [editor]);
}, [editor, setSelectedFeatureIds]);
// Base draft for label lookup only. It must not decide which geometry is rendered.
const labelContextBaseDraft = useMemo(() => {
@@ -2746,7 +2754,7 @@ function EditorPageContent() {
year={activeTimelineYear}
onYearChange={handleTimelineYearChange}
isLoading={false}
disabled={false}
disabled={isEditingGeometryOrReplay}
statusText={null}
filterEnabled={activeTimelineFilterEnabled}
onFilterEnabledChange={setTimelineFilterEnabled}
@@ -2923,49 +2931,6 @@ function isTypingTarget(target: EventTarget | null): boolean {
return tagName === "input" || tagName === "textarea" || tagName === "select" || target.isContentEditable;
}
function buildEntityLabelContextDraft(draft: FeatureCollection, entities: Entity[]): FeatureCollection {
if (!draft.features.length) return draft;
const entityById = new globalThis.Map<string, Entity>();
for (const entity of entities || []) {
const id = String(entity?.id || "").trim();
if (!id) continue;
entityById.set(id, entity);
}
return {
...draft,
features: draft.features.map((feature) => {
const entityIds = normalizeFeatureEntityIds(feature);
if (!entityIds.length) return feature;
const candidates = entityIds.map((id) => {
const entity = entityById.get(id) || null;
const name = String(entity?.name || id).trim();
if (!name) return null;
return {
id,
name,
time_start: normalizeTimelineYearValue(entity?.time_start),
time_end: normalizeTimelineYearValue(entity?.time_end),
};
}).filter((candidate) => candidate !== null);
return {
...feature,
properties: {
...feature.properties,
entity_id: entityIds[0] || null,
entity_ids: entityIds,
entity_name: candidates[0]?.name || null,
entity_names: candidates.map((candidate) => candidate.name),
entity_label_candidates: candidates,
},
};
}),
};
}
function buildEntityRefsForFeature(feature: Feature, entities: Entity[]): Entity[] {
const entityIds = normalizeFeatureEntityIds(feature);
if (!entityIds.length) return [];
+8 -2
View File
@@ -1,4 +1,5 @@
import api from "@/config/config";
import type { AxiosRequestConfig } from "axios";
import { API } from "../../api";
import { clearStoredTokens, extractTokensFromResponsePayload, setStoredTokens } from "@/auth/tokenStore";
@@ -62,7 +63,13 @@ export const apiResetPassword = async (payload: ResetPasswordPayload) => {
return response.data;
};
export const apiGetCurrentUser = async (config?: any) => {
type AuthRequestConfig = AxiosRequestConfig & {
skipAuth?: boolean;
skipRefresh?: boolean;
authToken?: string | null;
};
export const apiGetCurrentUser = async (config?: AuthRequestConfig) => {
const response = await api.get(API.User.CURRENT, config);
return response?.data;
};
@@ -71,4 +78,3 @@ export const apiChangePassword = async (payload: ChangePasswordPayload) => {
const response = await api.patch(API.User.CHANGE_PASSWORD, payload);
return response?.data;
};
+4
View File
@@ -44,3 +44,7 @@ export async function searchEntitiesByName(
// API mới không có `/entities/search`, search qua query string.
return requestJson<Entity[]>(`${API_ENDPOINTS.entities}?${params.toString()}`);
}
export async function fetchEntityById(id: string): Promise<Entity> {
return requestJson<Entity>(`${API_ENDPOINTS.entities}/${id}`);
}
+23
View File
@@ -61,6 +61,10 @@ function buildBBoxQueryString(params: GeometriesBBoxQuery): string {
query.set("entity_id", params.entity_id);
}
if (typeof params.hasBound === "boolean") {
query.set("has_bound", String(params.hasBound));
}
return query.toString();
}
@@ -71,6 +75,16 @@ export async function fetchGeometriesByBBox(params: GeometriesBBoxQuery): Promis
return geometriesToFeatureCollection(rows);
}
export async function fetchGeometriesByBoundWith(parentGeometryId: string): Promise<FeatureCollection> {
const id = String(parentGeometryId || "").trim();
if (!id) return { type: "FeatureCollection", features: [] };
const rows = await requestJson<GeometryRow[]>(
`${API_ENDPOINTS.geometries}/bound-with/${encodeURIComponent(id)}`
);
return geometriesToFeatureCollection(rows);
}
export async function searchGeometriesByEntityName(
name: string,
options?: { cursor?: string; limit?: number }
@@ -129,6 +143,7 @@ type GeometryRow = {
max_lng: number;
max_lat: number;
} | null;
replay_ids?: string[] | null;
entity_id?: string | null;
entity_name?: string | null;
entity_description?: string | null;
@@ -175,6 +190,7 @@ function geometriesToFeatureCollection(rows: GeometryRow[]): FeatureCollection {
type: typeKey,
time_start: row.time_start ?? null,
time_end: row.time_end ?? null,
replay_ids: normalizeStringArray(row.replay_ids),
bound_with: boundWith,
...(entityPreviews.length
? {
@@ -260,6 +276,13 @@ function normalizeNullableString(value: unknown): string | null {
return normalized.length ? normalized : null;
}
function normalizeStringArray(value: unknown): string[] {
if (!Array.isArray(value)) return [];
return value
.map((item) => normalizeString(item))
.filter((item) => item.length > 0);
}
function normalizeNumber(value: unknown): number | null {
return typeof value === "number" && Number.isFinite(value) ? value : null;
}
+30 -9
View File
@@ -1,5 +1,6 @@
import type { ApiEnvelope } from "@/uhm/types/api";
import api from "@/config/config";
import type { AxiosError, AxiosRequestConfig } from "axios";
export class ApiError extends Error {
status: number;
@@ -21,6 +22,8 @@ type RequestJsonOptions = {
authToken?: string | null; // Override bearer token (used for refresh).
};
type AuthAxiosRequestConfig = AxiosRequestConfig & RequestJsonOptions;
export async function requestJson<T>(
input: RequestInfo | URL,
init?: RequestInit,
@@ -40,16 +43,17 @@ export async function requestJson<T>(
}
try {
const response = await api.request({
const requestConfig: AuthAxiosRequestConfig = {
url,
method,
data,
headers: init?.headers as any,
headers: normalizeRequestHeaders(init?.headers),
// Custom properties for our axios interceptor.
skipAuth: options?.skipAuth,
authToken: options?.authToken,
skipRefresh: options?.skipRefresh,
} as any);
};
const response = await api.request(requestConfig);
const payload = response.data;
const envelope = isApiEnvelopeLike<T>(payload) ? payload : null;
@@ -64,13 +68,14 @@ export async function requestJson<T>(
}
return payload as T;
} catch (err: any) {
} catch (err: unknown) {
if (err instanceof ApiError) throw err;
const status = err.response?.status || 0;
const payload = err.response?.data;
const axiosError = err as AxiosError<unknown>;
const status = axiosError.response?.status || 0;
const payload = axiosError.response?.data;
const envelope = isApiEnvelopeLike<T>(payload) ? payload : null;
const message = extractErrorMessage(payload, envelope) || err.message || "Request failed";
const message = extractErrorMessage(payload, envelope) || (err instanceof Error ? err.message : "") || "Request failed";
const body = envelope ? stringifyPayload(envelope) : stringifyPayload(payload);
const errors = envelope?.errors ? normalizeErrors(envelope.errors) : [];
@@ -99,16 +104,32 @@ function normalizeErrors(value: unknown): unknown[] {
}
function extractErrorMessage(payload: unknown, envelope: ApiEnvelope<unknown> | null): string | null {
const payloadRecord = isRecord(payload) ? payload : null;
const msg =
(typeof envelope?.message === "string" && envelope.message.trim()) ||
(typeof (payload as any)?.message === "string" && String((payload as any).message).trim());
(typeof payloadRecord?.message === "string" && payloadRecord.message.trim());
if (msg) return msg;
const errors = envelope?.errors ?? (payload as any)?.errors;
const errors = envelope?.errors ?? payloadRecord?.errors;
if (typeof errors === "string" && errors.trim()) return errors.trim();
if (Array.isArray(errors) && typeof errors[0] === "string") return errors[0];
return null;
}
function isRecord(value: unknown): value is Record<string, unknown> {
return Boolean(value && typeof value === "object" && !Array.isArray(value));
}
function normalizeRequestHeaders(headers: RequestInit["headers"]): Record<string, string> | undefined {
if (!headers) return undefined;
if (headers instanceof Headers) {
return Object.fromEntries(headers.entries());
}
if (Array.isArray(headers)) {
return Object.fromEntries(headers.map(([key, value]) => [key, value]));
}
return headers;
}
function stringifyPayload(payload: unknown): string {
if (typeof payload === "string") return payload;
try {
+5
View File
@@ -57,6 +57,7 @@ type MapProps = {
onFeatureClick?: ((payload: MapFeaturePayload | null) => void) | undefined;
hoverPopupEnabled?: boolean;
getHoverPopupContent?: (feature: Feature) => MapHoverPopupContent | null;
onHoverFeatureChange?: (feature: Feature | null) => void;
allowFeatureSelection?: boolean;
focusFeatureCollection?: FeatureCollection | null;
focusRequestKey?: string | number | null;
@@ -98,6 +99,7 @@ const Map = memo(forwardRef<MapHandle, MapProps>(function Map({
onFeatureClick,
hoverPopupEnabled = false,
getHoverPopupContent,
onHoverFeatureChange,
allowFeatureSelection = true,
focusFeatureCollection = null,
focusRequestKey = null,
@@ -126,6 +128,7 @@ const Map = memo(forwardRef<MapHandle, MapProps>(function Map({
// Ref callback click feature mới nhất cho tooltip/panel ngoài map.
const onFeatureClickRef = useRef<MapProps["onFeatureClick"]>(onFeatureClick);
const getHoverPopupContentRef = useRef<MapProps["getHoverPopupContent"]>(getHoverPopupContent);
const onHoverFeatureChangeRef = useRef<MapProps["onHoverFeatureChange"]>(onHoverFeatureChange);
// Ref callback create mới nhất khi drawing engine tạo feature.
const onCreateRef = useRef<MapProps["onCreateFeature"]>(onCreateFeature);
// Ref callback add geometry global vào project mới nhất cho context menu select.
@@ -151,6 +154,7 @@ const Map = memo(forwardRef<MapHandle, MapProps>(function Map({
onSetModeRef.current = onSetMode;
onFeatureClickRef.current = onFeatureClick;
getHoverPopupContentRef.current = getHoverPopupContent;
onHoverFeatureChangeRef.current = onHoverFeatureChange;
onCreateRef.current = onCreateFeature;
onAddFeatureToProjectRef.current = onAddFeatureToProject;
onDeleteRef.current = onDeleteFeature;
@@ -249,6 +253,7 @@ const Map = memo(forwardRef<MapHandle, MapProps>(function Map({
enabled: hoverPopupEnabled,
renderDraftRef,
getContentRef: getHoverPopupContentRef,
onHoverFeatureChangeRef,
});
useEffect(() => {
+3
View File
@@ -41,9 +41,12 @@ export function ModeHint({ mode }: { mode: EditorMode }) {
<div style={{ marginTop: 6, fontSize: 12, color: "#93c5fd" }}>
<div style={{ marginBottom: 4 }}>Click vào hình trên map đ Chọn (Select).</div>
<ul style={{ paddingLeft: 16, margin: 0, opacity: 0.85 }}>
<li><b>Giữ Shift + click</b>: Chọn nhiều hình hoặc bỏ chọn hình đang chọn</li>
<li><b>Chuột phải</b>: Mở menu chỉnh sửa / xóa / duplicate / replay</li>
<li>Trong chế đ Sửa đnh:
<ul style={{ paddingLeft: 16, margin: "2px 0 0 0" }}>
<li><b>Enter</b>: Lưu hình đã sửa</li>
<li><b>Esc</b>: Hủy chỉnh sửa</li>
<li><b>Delete</b>: Bật/Tắt chế đ Xóa đnh (click đ xóa)</li>
<li><b>Giữ Shift</b>: Bắt dính (Snap) điểm đang kéo</li>
</ul>
+150 -17
View File
@@ -11,6 +11,7 @@ import {
type PresentPlaceSelection,
} from "@/uhm/api/goongPlaces";
import { getGeometryRepresentativePoint } from "@/uhm/components/map/mapUtils";
import { searchWikisByTitle, type Wiki } from "@/uhm/api/wikis";
export type { PresentPlaceSelection } from "@/uhm/api/goongPlaces";
@@ -21,7 +22,7 @@ export type HistoricalGeometryFocusPayload = {
adminLabel: string | null;
};
type SearchMode = "present" | "history";
type SearchMode = "present" | "history" | "wiki";
type AdminLabelState = {
status: "loading" | "loaded" | "error";
@@ -33,6 +34,7 @@ type Props = {
focusedPlace: PresentPlaceSelection | null;
onFocusPlace: (place: PresentPlaceSelection) => void;
onFocusHistoricalGeometry: (payload: HistoricalGeometryFocusPayload) => void;
onFocusWiki?: (wiki: Wiki) => void;
onClearFocus: () => void;
leftOffset?: number;
style?: CSSProperties;
@@ -42,11 +44,12 @@ export default function PresentPlaceSearch({
focusedPlace,
onFocusPlace,
onFocusHistoricalGeometry,
onFocusWiki,
onClearFocus,
leftOffset = 18,
style,
}: Props) {
const [mode, setMode] = useState<SearchMode>("present");
const [mode, setMode] = useState<SearchMode>("history");
const [query, setQuery] = useState("");
const [results, setResults] = useState<PresentPlacePrediction[]>([]);
const [isLoading, setIsLoading] = useState(false);
@@ -61,14 +64,20 @@ export default function PresentPlaceSearch({
const [selectingGeometryId, setSelectingGeometryId] = useState<string | null>(null);
const [adminLabels, setAdminLabels] = useState<Record<string, AdminLabelState>>({});
const [wikiQuery, setWikiQuery] = useState("");
const [wikiResults, setWikiResults] = useState<Wiki[]>([]);
const [isWikiLoading, setIsWikiLoading] = useState(false);
const [wikiError, setWikiError] = useState<string | null>(null);
const [isOpen, setIsOpen] = useState(false);
const requestSeqRef = useRef(0);
const historicalRequestSeqRef = useRef(0);
const wikiRequestSeqRef = useRef(0);
const hasApiKey = hasSearchMapApiKey();
const activeQuery = mode === "present" ? query : historicalQuery;
const activeError = mode === "present" ? error : historicalError;
const activeLoading = mode === "present" ? isLoading : isHistoricalLoading;
const activeQuery = mode === "present" ? query : mode === "history" ? historicalQuery : wikiQuery;
const activeError = mode === "present" ? error : mode === "history" ? historicalError : wikiError;
const activeLoading = mode === "present" ? isLoading : mode === "history" ? isHistoricalLoading : isWikiLoading;
const expandedItem = useMemo(() => {
if (!expandedEntityId) return null;
@@ -162,6 +171,43 @@ export default function PresentPlaceSearch({
return () => window.clearTimeout(timer);
}, [historicalQuery, mode]);
useEffect(() => {
if (mode !== "wiki") return;
const keyword = wikiQuery.trim();
if (!keyword || keyword.length < 2) {
setWikiResults([]);
setIsWikiLoading(false);
setWikiError(null);
return;
}
const seq = wikiRequestSeqRef.current + 1;
wikiRequestSeqRef.current = seq;
const timer = window.setTimeout(() => {
setIsWikiLoading(true);
setWikiError(null);
searchWikisByTitle(keyword, { limit: 12 })
.then((nextResults) => {
if (wikiRequestSeqRef.current !== seq) return;
setWikiResults(nextResults || []);
setIsOpen(true);
})
.catch((err) => {
if (wikiRequestSeqRef.current !== seq) return;
setWikiResults([]);
setWikiError(err instanceof Error ? err.message : "Không search được wiki.");
})
.finally(() => {
if (wikiRequestSeqRef.current === seq) {
setIsWikiLoading(false);
}
});
}, 260);
return () => window.clearTimeout(timer);
}, [wikiQuery, mode]);
useEffect(() => {
if (mode !== "history" || !expandedItem || expandedItem.geometries.length <= 1 || !hasApiKey) {
return;
@@ -255,26 +301,48 @@ export default function PresentPlaceSearch({
setSelectingGeometryId(null);
};
const selectWiki = (wiki: Wiki) => {
if (onFocusWiki) {
onFocusWiki(wiki);
}
setWikiQuery(wiki.title || "");
setWikiResults([]);
setIsOpen(false);
};
const clearSearch = () => {
if (mode === "present") {
setQuery("");
setResults([]);
setError(null);
} else {
} else if (mode === "history") {
setHistoricalQuery("");
setHistoricalResults([]);
setHistoricalError(null);
setExpandedEntityId(null);
} else {
setWikiQuery("");
setWikiResults([]);
setWikiError(null);
}
setIsOpen(false);
onClearFocus();
};
const switchMode = (nextMode: SearchMode) => {
const cycleMode = () => {
let nextMode: SearchMode;
if (mode === "history") {
nextMode = "present";
} else if (mode === "present") {
nextMode = "wiki";
} else {
nextMode = "history";
}
setMode(nextMode);
setIsOpen(true);
setError(null);
setHistoricalError(null);
setWikiError(null);
};
return (
@@ -295,20 +363,22 @@ export default function PresentPlaceSearch({
<div style={searchInputRowStyle}>
<button
type="button"
onClick={() => switchMode(mode === "present" ? "history" : "present")}
title={mode === "present" ? "Switch to history search" : "Switch to present search"}
aria-label={mode === "present" ? "Switch to history search" : "Switch to present search"}
onClick={cycleMode}
title={`Switch search mode (current: ${mode})`}
aria-label={`Switch search mode (current: ${mode})`}
style={modeSwitchStyle}
>
{mode === "present" ? "Present" : "History"}
{mode === "present" ? "Present" : mode === "history" ? "History" : "Wiki"}
</button>
<input
value={activeQuery}
onChange={(event) => {
if (mode === "present") {
setQuery(event.target.value);
} else {
} else if (mode === "history") {
setHistoricalQuery(event.target.value);
} else {
setWikiQuery(event.target.value);
}
setIsOpen(true);
}}
@@ -327,10 +397,20 @@ export default function PresentPlaceSearch({
event.preventDefault();
selectHistoricalEntity(historicalResults[0]);
}
if (mode === "wiki" && wikiResults[0]) {
event.preventDefault();
selectWiki(wikiResults[0]);
}
}
}}
disabled={mode === "present" && !hasApiKey}
placeholder={mode === "present" ? "Tìm địa điểm hiện tại" : "Tìm entity lịch sử"}
placeholder={
mode === "present"
? "Tìm địa điểm hiện tại"
: mode === "history"
? "Tìm entity lịch sử"
: "Tìm bài viết wiki"
}
style={inputStyle}
/>
{activeQuery || focusedPlace ? (
@@ -347,7 +427,7 @@ export default function PresentPlaceSearch({
</div>
</div>
{isOpen && shouldRenderResults(mode, activeQuery, activeLoading, activeError, results, historicalResults) ? (
{isOpen && shouldRenderResults(mode, activeQuery, activeLoading, activeError, results, historicalResults, wikiResults) ? (
<div style={resultsPanelStyle}>
{mode === "present" ? (
<PresentResults
@@ -358,7 +438,7 @@ export default function PresentPlaceSearch({
selectingPlaceId={selectingPlaceId}
onSelect={selectPrediction}
/>
) : (
) : mode === "history" ? (
<HistoricalResults
isLoading={isHistoricalLoading}
error={historicalError}
@@ -371,6 +451,14 @@ export default function PresentPlaceSearch({
onSelectEntity={selectHistoricalEntity}
onSelectGeometry={selectHistoricalGeometry}
/>
) : (
<WikiResults
isLoading={isWikiLoading}
error={wikiError}
query={wikiQuery}
results={wikiResults}
onSelect={selectWiki}
/>
)}
</div>
) : null}
@@ -520,16 +608,61 @@ function HistoricalResults({
);
}
function WikiResults({
isLoading,
error,
query,
results,
onSelect,
}: {
isLoading: boolean;
error: string | null;
query: string;
results: Wiki[];
onSelect: (wiki: Wiki) => void;
}) {
if (isLoading) return <div style={statusStyle}>Đang tìm wiki...</div>;
if (error) return <div style={{ ...statusStyle, color: "#fecaca" }}>{error}</div>;
if (!results.length && query.trim().length >= 2) return <div style={statusStyle}>Không tìm thấy bài viết.</div>;
return (
<>
{results.map((wiki) => (
<button
key={wiki.id}
type="button"
onClick={() => onSelect(wiki)}
style={resultButtonStyle}
onMouseEnter={(event) => {
event.currentTarget.style.background = "rgba(56, 189, 248, 0.1)";
}}
onMouseLeave={(event) => {
event.currentTarget.style.background = "transparent";
}}
>
<span style={primaryResultTextStyle}>{wiki.title || wiki.slug || "Không có tiêu đề"}</span>
{wiki.slug && (
<span style={secondaryResultTextStyle}>/wiki/{wiki.slug}</span>
)}
</button>
))}
</>
);
}
function shouldRenderResults(
mode: SearchMode,
query: string,
isLoading: boolean,
error: string | null,
presentResults: PresentPlacePrediction[],
historicalResults: EntityGeometriesSearchItem[]
historicalResults: EntityGeometriesSearchItem[],
wikiResults: Wiki[]
): boolean {
if (isLoading || error || query.trim().length >= 2) return true;
return mode === "present" ? presentResults.length > 0 : historicalResults.length > 0;
if (mode === "present") return presentResults.length > 0;
if (mode === "history") return historicalResults.length > 0;
return wikiResults.length > 0;
}
function formatAdminLabel(state: AdminLabelState | undefined): string {
@@ -1,8 +1,9 @@
"use client";
import { useEffect, useMemo, useState, useCallback, useRef } from "react";
import { useEffect, useMemo, useState, useCallback, useRef, type ComponentProps } from "react";
import dynamic from "next/dynamic";
import "react-quill-new/dist/quill.snow.css";
import type ReactQuill from "react-quill-new";
import type {
BattleReplay,
GeoFunctionName,
@@ -16,10 +17,12 @@ import { Panel } from "./Panel";
import { Modal } from "@/components/ui/modal";
import Button from "@/components/ui/button/Button";
import Label from "@/components/form/Label";
import { fetchWikiBySlug, searchWikisByTitle } from "@/uhm/api/wikis";
import { fetchWikiBySlug, searchWikisByTitle, type Wiki } from "@/uhm/api/wikis";
import { useEditorStore } from "@/uhm/store/editorStore";
const ReactQuillEditor = dynamic<any>(() => import("react-quill-new"), {
type ReactQuillEditorProps = ComponentProps<typeof ReactQuill>;
const ReactQuillEditor = dynamic<ReactQuillEditorProps>(() => import("react-quill-new"), {
ssr: false,
loading: () => <div style={{ height: "120px", background: "#0b1220", borderRadius: "8px" }} className="animate-pulse" />,
});
@@ -46,6 +49,25 @@ type ActionGroupKey = "use_UI_function" | "use_map_function" | "use_geo_function
type ActionValue = string | boolean | string[];
type ActionFormValues = Record<string, ActionValue>;
type AnyReplayAction = ReplayAction<UIOptionName | MapFunctionName | GeoFunctionName | NarrativeFunctionName>;
type QuillRange = {
index: number;
length: number;
};
type QuillLike = {
getSelection?: () => QuillRange | null;
getFormat?: (indexOrRange?: number | QuillRange, length?: number) => Record<string, unknown>;
getText?: (index: number, length: number) => string;
setSelection?: (index: number, length: number, source?: string) => void;
formatText?: (index: number, length: number, name: string, value: unknown, source?: string) => void;
insertText?: (index: number, text: string, formats?: Record<string, unknown>, source?: string) => void;
format?: (name: string, value: unknown, source?: string) => void;
};
type WikiLinkCandidate = {
key: string;
title: string;
slug: string;
source: "local" | "global";
};
type ActionFieldConfig = {
name: string;
@@ -157,7 +179,7 @@ const narrativeActionDefinitions: NarrativeActionDefinitionMap = {
],
create: () => ({ function_name: "set_dialog", params: [{ text: "", image_url: "" }] }),
deserialize: (params) => {
const data: any = params[0];
const data = params[0] as { text?: unknown; image_url?: unknown } | null | undefined;
if (data === null) {
return {
clear: true,
@@ -175,7 +197,10 @@ const narrativeActionDefinitions: NarrativeActionDefinitionMap = {
if (values.clear) {
return [null];
}
const data: any = {
const data: {
text: string;
image_url?: string;
} = {
text: asString(values.text),
};
if (values.image_url) {
@@ -202,8 +227,8 @@ export default function ReplayEffectsSidebar({
// Quill: custom link UI (link-to-wiki by slug).
const wikiLinkIntentRef = useRef<{
quill: any;
range: any;
quill: QuillLike;
range: QuillRange | null;
existingHref: string | null;
} | null>(null);
@@ -211,12 +236,12 @@ export default function ReplayEffectsSidebar({
const [wikiLinkQuery, setWikiLinkQuery] = useState("");
const [wikiLinkSearchMode, setWikiLinkSearchMode] = useState<"title" | "slug">("title");
const [wikiLinkError, setWikiLinkError] = useState<string | null>(null);
const [globalWikiResults, setGlobalWikiResults] = useState<any[]>([]);
const [globalWikiResults, setGlobalWikiResults] = useState<Wiki[]>([]);
const [isGlobalWikiSearching, setIsGlobalWikiSearching] = useState(false);
const [globalWikiSearchError, setGlobalWikiSearchError] = useState<string | null>(null);
const globalWikiSearchRequestRef = useRef(0);
const handleLinkClick = useCallback((quill: any) => {
const handleLinkClick = useCallback((quill: QuillLike | null | undefined) => {
if (!quill) return;
const range = quill.getSelection?.() ?? null;
const existingHref =
@@ -304,9 +329,9 @@ export default function ReplayEffectsSidebar({
};
}, [isWikiLinkOpen, wikiLinkQuery, wikiLinkSearchMode]);
const globalWikiLinkCandidates = useMemo(() => {
const globalWikiLinkCandidates = useMemo<WikiLinkCandidate[]>(() => {
if (!isWikiLinkOpen) return [];
const out: any[] = [];
const out: WikiLinkCandidate[] = [];
for (const row of globalWikiResults || []) {
const slug = typeof row?.slug === "string" ? row.slug.trim() : "";
if (!slug.length) continue;
@@ -1158,7 +1183,7 @@ function ActionGroupEditor<T extends string>({
createOnSelect?: boolean;
emptyOptionLabel?: string;
onUpdateActions: (nextActions: ReplayAction<T>[], label: string) => void;
onLinkClick?: (quill: any) => void;
onLinkClick?: (quill: QuillLike | null | undefined) => void;
resetKey?: string;
}) {
const functionNames = useMemo(() => Object.keys(definitions) as T[], [definitions]);
@@ -1173,7 +1198,7 @@ function ActionGroupEditor<T extends string>({
);
const lastResetKeyRef = useRef<string | undefined>(undefined);
const lastLoadedActionsRef = useRef<any>(null);
const lastLoadedActionsRef = useRef<ReplayAction<T>[] | null>(null);
useEffect(() => {
const resetKeyChanged = resetKey !== lastResetKeyRef.current;
@@ -1183,6 +1208,7 @@ function ActionGroupEditor<T extends string>({
lastResetKeyRef.current = resetKey;
lastLoadedActionsRef.current = actions;
const timeoutId = window.setTimeout(() => {
if (actions.length > 0) {
const first = actions[0];
setComposerFunctionName(first.function_name);
@@ -1195,6 +1221,8 @@ function ActionGroupEditor<T extends string>({
setComposerFunctionName(defaultFun);
setComposerDraftValues(buildActionComposerDraft(definitions, defaultFun));
}
}, 0);
return () => window.clearTimeout(timeoutId);
}, [actions, definitions, createOnSelect, functionNames, resetKey]);
const composerDefinition = composerFunctionName
@@ -1349,7 +1377,7 @@ function FieldInput({
geometryChoices: Choice[];
wikiChoices: Choice[];
onChange: (nextValue: ActionValue) => void;
onLinkClick?: (quill: any) => void;
onLinkClick?: (quill: QuillLike | null | undefined) => void;
}) {
const onLinkClickRef = useRef(onLinkClick);
useEffect(() => {
@@ -1366,7 +1394,7 @@ function FieldInput({
["clean"],
],
handlers: {
link: function (this: { quill?: any }) {
link: function (this: { quill?: QuillLike }) {
onLinkClickRef.current?.(this?.quill);
},
},
@@ -207,7 +207,7 @@ export default function ReplayTimelineSidebar({
event.target.value = "";
};
function getBackgroundGeometryIdsFromReplay(replay: any): Set<string> {
function getBackgroundGeometryIdsFromReplay(replay: BattleReplay | null): Set<string> {
const bgIds = new Set<string>();
if (!replay || !Array.isArray(replay.detail)) return bgIds;
for (const stage of replay.detail) {
+4 -4
View File
@@ -318,7 +318,7 @@ export function decorateLineFeaturesWithLabels(
return changed ? { ...fc, features: nextFeatures } : fc;
}
const polygonLabelFeaturesCache = new WeakMap<any, { label: string; feature: Feature }>();
const polygonLabelFeaturesCache = new WeakMap<Feature, { label: string; feature: Feature }>();
export function buildPolygonLabelFeatureCollection(
fc: FeatureCollection,
@@ -484,7 +484,7 @@ export function getGeometryRepresentativePoint(geometry: Geometry): Coordinate |
return null;
}
const pathArrowGeometriesCache = new WeakMap<any, Geometry[]>();
const pathArrowGeometriesCache = new WeakMap<Geometry, Geometry[]>();
export function buildPathArrowFeatureCollection(fc: FeatureCollection): FeatureCollection {
const features: Feature[] = [];
@@ -1161,7 +1161,7 @@ function getLineCoordinateGroups(geometry: Geometry): Coordinate[][] {
return [];
}
const polygonLabelPointCache = new WeakMap<any, Coordinate | null>();
const polygonLabelPointCache = new WeakMap<Geometry, Coordinate | null>();
function getPolygonLabelPoint(geometry: Geometry): Coordinate | null {
if (polygonLabelPointCache.has(geometry)) {
@@ -1282,7 +1282,7 @@ export function decorateFeaturesWithEntityColors(fc: FeatureCollection): Feature
}
}
if ((feature.properties as any).entity_color === entity_color) {
if (feature.properties.entity_color === entity_color) {
return feature;
}
changed = true;
+436 -33
View File
@@ -7,7 +7,14 @@ export type MapHoverPopupContent = {
key?: string;
rows: Array<{
title: string;
titleTone?: "danger" | "default";
isGroupHeader?: boolean;
description?: string | null;
titleTimeRange?: string | null;
titleTimeRangeTone?: "success" | "muted";
separatorBefore?: boolean;
quote?: string | null;
quoteTone?: "danger" | "default";
onClick?: () => void;
}>;
};
@@ -17,6 +24,7 @@ type UseMapHoverPopupProps = {
enabled: boolean;
renderDraftRef: React.MutableRefObject<FeatureCollection>;
getContentRef: React.MutableRefObject<((feature: Feature) => MapHoverPopupContent | null) | undefined>;
onHoverFeatureChangeRef?: React.MutableRefObject<((feature: Feature | null) => void) | undefined>;
};
export function useMapHoverPopup({
@@ -24,6 +32,7 @@ export function useMapHoverPopup({
enabled,
renderDraftRef,
getContentRef,
onHoverFeatureChangeRef,
}: UseMapHoverPopupProps) {
const enabledRef = useRef(enabled);
@@ -45,12 +54,137 @@ export function useMapHoverPopup({
let hoveredKey: string | null = null;
let frameId: number | null = null;
let pendingEvent: maplibregl.MapMouseEvent | null = null;
let lastMapMouseEvent: maplibregl.MapMouseEvent | null = null;
let currentContent: MapHoverPopupContent | null = null;
let selectedRowIndex = 0;
let selectionVisible = false;
let lastSelectedRowClick: (() => void) | null = null;
let lastSelectedRowAt = 0;
let hoverLayerIds = getHoverLayerIds(map);
let activeFeatureId: string | null = null;
let featureLookupDraft: FeatureCollection | null = null;
let featureById = new Map<string, Feature>();
const refreshHoverLayerIds = () => {
hoverLayerIds = getHoverLayerIds(map);
};
const getSourceFeatureById = (id: string) => {
const draft = renderDraftRef.current;
if (draft !== featureLookupDraft) {
featureLookupDraft = draft;
featureById = new Map(draft.features.map((item) => [String(item.properties.id), item]));
}
return featureById.get(id) || null;
};
const removePopup = () => {
hoveredKey = null;
currentContent = null;
selectedRowIndex = 0;
selectionVisible = false;
if (activeFeatureId !== null) {
activeFeatureId = null;
onHoverFeatureChangeRef?.current?.(null);
}
popup.remove();
};
const getCurrentRows = () => getSelectableRows(currentContent);
const syncSelectedRow = () => {
const rows = getCurrentRows();
if (!rows.length) return;
selectedRowIndex = wrapIndex(selectedRowIndex, rows.length);
lastSelectedRowClick = rows[selectedRowIndex]?.onClick || null;
lastSelectedRowAt = Date.now();
updatePopupRowSelection(popup, selectedRowIndex, selectionVisible);
};
const cyclePopupRow = (direction: "next" | "prev") => {
const rows = getCurrentRows();
if (!rows.length) return;
selectedRowIndex += direction === "prev" ? -1 : 1;
selectedRowIndex = wrapIndex(selectedRowIndex, rows.length);
syncSelectedRow();
};
const onWheel = (event: WheelEvent) => {
if (!event.shiftKey) return;
if (isEditableEventTarget(event.target)) return;
const rows = getCurrentRows();
if (!rows.length) return;
const target = event.target instanceof HTMLElement ? event.target : null;
const insidePopup = Boolean(target?.closest(".uhm-map-hover-popup"));
const insideMap = target ? map.getContainer().contains(target) : false;
if (!insidePopup && !insideMap) return;
const direction = event.deltaY > 0 ? "next" : event.deltaY < 0 ? "prev" : null;
if (!direction) return;
event.preventDefault();
event.stopPropagation();
selectionVisible = true;
cyclePopupRow(direction);
};
const onCommitPopupRow = () => {
const rows = getCurrentRows();
const selectedRowClick = rows.length
? rows[wrapIndex(selectedRowIndex, rows.length)]?.onClick
: (Date.now() - lastSelectedRowAt < 1200 ? lastSelectedRowClick : null);
selectedRowClick?.();
if (rows.length || selectedRowClick) {
removePopup();
}
};
const requestPopupUpdateFromLastMouseEvent = () => {
if (!lastMapMouseEvent || !enabledRef.current) return;
pendingEvent = lastMapMouseEvent;
if (frameId !== null) return;
frameId = window.requestAnimationFrame(updatePopup);
};
const onKeyDown = (event: KeyboardEvent) => {
if (event.key === "Shift") {
if (event.repeat) return;
if (isEditableEventTarget(event.target)) return;
selectionVisible = true;
updatePopupRowSelection(popup, selectedRowIndex, selectionVisible);
requestPopupUpdateFromLastMouseEvent();
return;
}
if (event.key !== "Enter") return;
if (isEditableEventTarget(event.target)) return;
if (!getCurrentRows().length) return;
event.preventDefault();
event.stopPropagation();
onCommitPopupRow();
};
const onKeyUp = (event: KeyboardEvent) => {
if (event.key !== "Shift") return;
if (isEditableEventTarget(event.target)) return;
if (!getCurrentRows().length && lastMapMouseEvent) {
if (frameId !== null) {
window.cancelAnimationFrame(frameId);
frameId = null;
}
pendingEvent = pendingEvent || lastMapMouseEvent;
updatePopup();
}
event.preventDefault();
event.stopPropagation();
onCommitPopupRow();
};
const updatePopup = () => {
frameId = null;
const event = pendingEvent;
@@ -61,13 +195,19 @@ export function useMapHoverPopup({
return;
}
const layerIds = getHoverLayerIds(map);
if (!layerIds.length) {
if (!hoverLayerIds.length) {
removePopup();
return;
}
const features = map.queryRenderedFeatures(event.point, { layers: layerIds }) as maplibregl.MapGeoJSONFeature[];
let features: maplibregl.MapGeoJSONFeature[];
try {
features = map.queryRenderedFeatures(event.point, { layers: hoverLayerIds }) as maplibregl.MapGeoJSONFeature[];
} catch {
refreshHoverLayerIds();
removePopup();
return;
}
if (!features.length) {
removePopup();
return;
@@ -81,11 +221,15 @@ export function useMapHoverPopup({
}
const id = String(rawId);
const sourceFeature = renderDraftRef.current.features.find((item) => String(item.properties.id) === id);
const sourceFeature = getSourceFeatureById(id);
if (!sourceFeature) {
removePopup();
return;
}
if (id !== activeFeatureId) {
activeFeatureId = id;
onHoverFeatureChangeRef?.current?.(sourceFeature);
}
const content = getContentRef.current?.(sourceFeature) || null;
if (!content?.rows?.some((row) => row.title.trim())) {
@@ -93,23 +237,40 @@ export function useMapHoverPopup({
return;
}
const contentKey = `${id}:${content.key || content.rows.map((row) => `${row.title}:${row.quote || ""}`).join("|")}`;
const contentKey = buildContentKey(id, content);
const contentChanged = contentKey !== hoveredKey;
const shouldStylePopup = contentChanged || !popup.isOpen();
if (contentKey !== hoveredKey) {
hoveredKey = contentKey;
popup.setDOMContent(buildPopupNode(content));
currentContent = content;
selectedRowIndex = 0;
if (!selectionVisible) {
selectionVisible = Boolean(event.originalEvent?.shiftKey);
}
popup.setDOMContent(buildPopupNode(content, selectedRowIndex, selectionVisible));
}
popup.setLngLat(event.lngLat).addTo(map);
popup.setLngLat(event.lngLat);
if (!popup.isOpen()) {
popup.addTo(map);
}
if (shouldStylePopup) {
stylePopupChrome(popup);
}
if (contentChanged) {
syncSelectedRow();
}
};
const onMouseMove = (event: maplibregl.MapMouseEvent) => {
lastMapMouseEvent = event;
pendingEvent = event;
if (frameId !== null) return;
frameId = window.requestAnimationFrame(updatePopup);
};
const onMouseOut = () => {
lastMapMouseEvent = null;
pendingEvent = null;
if (frameId !== null) {
window.cancelAnimationFrame(frameId);
@@ -122,6 +283,10 @@ export function useMapHoverPopup({
map.on("mouseout", onMouseOut);
map.on("dragstart", removePopup);
map.on("zoomstart", removePopup);
map.on("styledata", refreshHoverLayerIds);
window.addEventListener("wheel", onWheel, { passive: false, capture: true });
window.addEventListener("keydown", onKeyDown, { capture: true });
window.addEventListener("keyup", onKeyUp, { capture: true });
return () => {
if (frameId !== null) {
@@ -131,9 +296,13 @@ export function useMapHoverPopup({
map.off("mouseout", onMouseOut);
map.off("dragstart", removePopup);
map.off("zoomstart", removePopup);
map.off("styledata", refreshHoverLayerIds);
window.removeEventListener("wheel", onWheel, { capture: true });
window.removeEventListener("keydown", onKeyDown, { capture: true });
window.removeEventListener("keyup", onKeyUp, { capture: true });
popup.remove();
};
}, [getContentRef, mapRef, renderDraftRef]);
}, [getContentRef, mapRef, onHoverFeatureChangeRef, renderDraftRef]);
}
function getHoverLayerIds(map: maplibregl.Map): string[] {
@@ -150,7 +319,17 @@ function getHoverLayerIds(map: maplibregl.Map): string[] {
}
function pickPreferredFeature(features: maplibregl.MapGeoJSONFeature[]) {
return [...features].sort((a, b) => featureSelectPriority(b) - featureSelectPriority(a))[0];
let best = features[0];
let bestPriority = featureSelectPriority(best);
for (let index = 1; index < features.length; index += 1) {
const candidate = features[index];
const priority = featureSelectPriority(candidate);
if (priority > bestPriority) {
best = candidate;
bestPriority = priority;
}
}
return best;
}
function featureSelectPriority(feature: maplibregl.MapGeoJSONFeature) {
@@ -165,8 +344,12 @@ function featureSelectPriority(feature: maplibregl.MapGeoJSONFeature) {
return 0;
}
function buildPopupNode(content: MapHoverPopupContent): HTMLElement {
function buildPopupNode(content: MapHoverPopupContent, selectedRowIndex: number, selectionVisible: boolean): HTMLElement {
ensureHoverPopupScrollbarStyle();
const root = document.createElement("div");
root.className = "uhm-map-hover-popup-body";
root.dataset.hoverPopupScrollRoot = "true";
root.style.width = "320px";
root.style.maxWidth = "calc(100vw - 2rem)";
root.style.maxHeight = "300px";
@@ -181,13 +364,25 @@ function buildPopupNode(content: MapHoverPopupContent): HTMLElement {
const grid = document.createElement("div");
grid.style.display = "grid";
grid.style.gap = "8px";
grid.style.gap = "5px";
root.appendChild(grid);
for (const row of content.rows) {
const rows = normalizeRows(content);
let selectableRowIndex = 0;
rows.forEach((row) => {
const titleText = row.title.trim();
if (!titleText) continue;
if (row.separatorBefore) {
const separator = document.createElement("div");
separator.style.height = "1px";
separator.style.margin = "2px 0";
separator.style.background = "rgba(255, 255, 255, 0.16)";
separator.style.pointerEvents = "none";
grid.appendChild(separator);
}
const isGroupHeader = Boolean(row.isGroupHeader);
const rowSelectionIndex = isGroupHeader ? null : selectableRowIndex++;
const card: HTMLButtonElement | HTMLDivElement = row.onClick
? document.createElement("button")
: document.createElement("div");
@@ -199,50 +394,89 @@ function buildPopupNode(content: MapHoverPopupContent): HTMLElement {
row.onClick?.();
};
}
card.style.width = "100%";
card.style.border = "1px solid rgba(255, 255, 255, 0.10)";
card.style.width = isGroupHeader ? "100%" : "calc(100% - 18px)";
card.style.marginLeft = isGroupHeader ? "0" : "18px";
card.style.border = isGroupHeader ? "0" : "1px solid transparent";
card.style.borderRadius = "0px";
card.style.background = "rgba(255, 255, 255, 0.03)";
card.style.padding = "12px";
card.style.background = "transparent";
card.style.padding = isGroupHeader ? "8px 2px 3px" : "7px 9px";
card.style.textAlign = "left";
card.style.font = "inherit";
card.style.cursor = row.onClick ? "pointer" : "default";
card.style.display = "block";
card.style.outline = "none";
card.style.appearance = "none";
card.style.webkitAppearance = "none";
card.style.transition = "border-color 140ms ease, background 140ms ease";
if (rowSelectionIndex !== null) {
card.dataset.hoverPopupRowIndex = String(rowSelectionIndex);
}
if (isGroupHeader) {
card.dataset.hoverPopupGroupHeader = "true";
}
if (row.onClick) {
card.onmouseenter = () => {
card.style.borderColor = "rgba(56, 189, 248, 0.40)";
card.style.background = "rgba(14, 165, 233, 0.10)";
if (card.dataset.hoverPopupSelected === "true") return;
card.style.borderColor = "transparent";
card.style.background = "rgba(14, 165, 233, 0.08)";
};
card.onmouseleave = () => {
card.style.borderColor = "rgba(255, 255, 255, 0.10)";
card.style.background = "rgba(255, 255, 255, 0.03)";
if (card.dataset.hoverPopupSelected === "true") {
applyPopupRowStyle(card, true);
return;
}
card.style.borderColor = "transparent";
card.style.background = "transparent";
};
}
const title = document.createElement("div");
title.textContent = titleText;
title.style.fontSize = "14px";
title.style.fontWeight = "700";
title.style.lineHeight = "20px";
title.style.color = "#ffffff";
title.style.fontSize = isGroupHeader ? "14px" : "13px";
title.style.fontWeight = isGroupHeader ? "800" : "650";
title.style.lineHeight = isGroupHeader ? "20px" : "18px";
title.style.color = row.titleTone === "danger" ? "#f87171" : (isGroupHeader ? "#ffffff" : "#e5edf7");
title.style.overflow = "hidden";
title.style.textOverflow = "ellipsis";
title.style.whiteSpace = "nowrap";
const descriptionText = row.description?.trim();
if (row.titleTimeRange?.trim()) {
const nameSpan = document.createElement("span");
nameSpan.textContent = titleText;
title.appendChild(nameSpan);
const rangeSpan = document.createElement("span");
rangeSpan.textContent = ` (${row.titleTimeRange.trim()})`;
rangeSpan.style.color = row.titleTimeRangeTone === "success" ? "#34d399" : "#94a3b8";
rangeSpan.style.fontWeight = "700";
title.appendChild(rangeSpan);
} else {
title.textContent = titleText;
}
card.appendChild(title);
if (isGroupHeader && descriptionText) {
const descriptionWrap = document.createElement("div");
descriptionWrap.className = "uhm-map-hover-popup-description-marquee";
descriptionWrap.title = descriptionText;
const descriptionSpan = document.createElement("span");
descriptionSpan.textContent = descriptionText;
descriptionWrap.appendChild(descriptionSpan);
card.appendChild(descriptionWrap);
}
const quoteText = row.quote?.trim();
if (quoteText) {
const quote = document.createElement("div");
quote.textContent = quoteText;
quote.style.marginTop = "8px";
quote.style.paddingLeft = "10px";
quote.style.marginTop = "5px";
quote.style.paddingLeft = "8px";
quote.style.paddingRight = "4px";
quote.style.borderLeft = "3px solid rgba(56, 189, 248, 0.40)";
quote.style.fontSize = "14px";
quote.style.borderLeft = `2px solid ${row.quoteTone === "danger" ? "rgba(248, 113, 113, 0.58)" : "rgba(56, 189, 248, 0.34)"}`;
quote.style.fontSize = "13px";
quote.style.fontStyle = "italic";
quote.style.lineHeight = "20px";
quote.style.color = "#cbd5e1";
quote.style.lineHeight = "18px";
quote.style.color = row.quoteTone === "danger" ? "#f87171" : "#b8c4d4";
quote.style.display = "-webkit-box";
quote.style.webkitLineClamp = "4";
quote.style.webkitBoxOrient = "vertical";
@@ -252,11 +486,180 @@ function buildPopupNode(content: MapHoverPopupContent): HTMLElement {
}
grid.appendChild(card);
}
});
updatePopupNodeRowSelection(root, selectedRowIndex, selectionVisible);
return root;
}
function buildContentKey(featureId: string, content: MapHoverPopupContent): string {
if (content.key) return `${featureId}:${content.key}`;
return `${featureId}:${content.rows
.map((row) => [
row.separatorBefore ? "sep" : "",
row.isGroupHeader ? "group" : "",
row.title,
row.titleTone || "",
row.description || "",
row.titleTimeRange || "",
row.titleTimeRangeTone || "",
row.quote || "",
].join(":"))
.join("|")}`;
}
function ensureHoverPopupScrollbarStyle() {
const styleId = "uhm-map-hover-popup-scrollbar-style";
if (document.getElementById(styleId)) return;
const style = document.createElement("style");
style.id = styleId;
style.textContent = `
.uhm-map-hover-popup-body {
scrollbar-width: thin;
scrollbar-color: rgba(56, 189, 248, 0.58) rgba(15, 23, 42, 0.72);
}
.uhm-map-hover-popup-body::-webkit-scrollbar {
width: 10px;
}
.uhm-map-hover-popup-body::-webkit-scrollbar-track {
background: rgba(15, 23, 42, 0.72);
border-left: 1px solid rgba(255, 255, 255, 0.08);
}
.uhm-map-hover-popup-body::-webkit-scrollbar-thumb {
min-height: 36px;
border: 2px solid rgba(2, 6, 23, 0.95);
border-radius: 999px;
background: linear-gradient(180deg, rgba(56, 189, 248, 0.86), rgba(14, 165, 233, 0.58));
box-shadow: inset 0 0 0 1px rgba(255, 255, 255, 0.16);
}
.uhm-map-hover-popup-body::-webkit-scrollbar-thumb:hover {
background: linear-gradient(180deg, rgba(125, 211, 252, 0.96), rgba(56, 189, 248, 0.72));
}
.uhm-map-hover-popup-body button,
.uhm-map-hover-popup-body button:focus,
.uhm-map-hover-popup-body button:focus-visible {
outline: none !important;
box-shadow: none;
}
.uhm-map-hover-popup-description-marquee {
display: block;
width: 100%;
margin-top: 2px;
overflow: hidden;
color: #94a3b8;
font-size: 12px;
font-weight: 500;
line-height: 16px;
white-space: nowrap;
}
.uhm-map-hover-popup-description-marquee > span {
display: inline-block;
min-width: 100%;
transform: translateX(0);
}
.uhm-map-hover-popup-description-marquee:hover > span {
animation: uhm-hover-popup-marquee 8s linear infinite alternate;
}
@keyframes uhm-hover-popup-marquee {
from { transform: translateX(0); }
to { transform: translateX(calc(-100% + 100px)); }
}
`;
document.head.appendChild(style);
}
function isEditableEventTarget(target: EventTarget | null): boolean {
const element = target instanceof HTMLElement ? target : null;
if (!element) return false;
return Boolean(element.closest("input, textarea, select, [contenteditable='true']"));
}
function normalizeRows(content: MapHoverPopupContent | null): MapHoverPopupContent["rows"] {
return (content?.rows || []).filter((row) => row.title.trim());
}
function getSelectableRows(content: MapHoverPopupContent | null): MapHoverPopupContent["rows"] {
return normalizeRows(content).filter((row) => !row.isGroupHeader);
}
function wrapIndex(index: number, length: number): number {
if (length <= 0) return 0;
return ((index % length) + length) % length;
}
function updatePopupRowSelection(popup: maplibregl.Popup, selectedRowIndex: number, selectionVisible: boolean) {
updatePopupNodeRowSelection(popup.getElement() || null, selectedRowIndex, selectionVisible);
}
function updatePopupNodeRowSelection(root: HTMLElement | null, selectedRowIndex: number, selectionVisible: boolean) {
if (!root) return;
const cards = Array.from(root.querySelectorAll<HTMLElement>("[data-hover-popup-row-index]"));
let selectedCard: HTMLElement | null = null;
for (const card of cards) {
const rowIndex = Number(card.dataset.hoverPopupRowIndex);
const selected = selectionVisible && rowIndex === selectedRowIndex;
card.dataset.hoverPopupSelected = selected ? "true" : "false";
applyPopupRowStyle(card, selected);
if (selected) {
selectedCard = card;
}
}
if (selectedCard) {
ensurePopupRowVisible(selectedCard);
window.requestAnimationFrame(() => ensurePopupRowVisible(selectedCard));
}
}
function applyPopupRowStyle(card: HTMLElement, selected: boolean) {
card.style.borderColor = "transparent";
card.style.background = selected ? "rgba(14, 165, 233, 0.11)" : "transparent";
card.style.boxShadow = selected ? "inset 2px 0 0 rgba(56, 189, 248, 0.95)" : "none";
}
function ensurePopupRowVisible(card: HTMLElement) {
const scrollRoot = card.closest<HTMLElement>("[data-hover-popup-scroll-root='true']");
if (!scrollRoot) return;
const padding = 8;
const groupHeader = findPreviousGroupHeader(card);
const cardTop = card.offsetTop;
const cardBottom = cardTop + card.offsetHeight;
const contextTop = groupHeader?.offsetTop ?? cardTop;
const visibleTop = scrollRoot.scrollTop + padding;
const visibleBottom = scrollRoot.scrollTop + scrollRoot.clientHeight - padding;
if (contextTop < visibleTop) {
scrollRoot.scrollTop = Math.max(0, contextTop - padding);
return;
}
if (cardBottom > visibleBottom) {
scrollRoot.scrollTop = cardBottom - scrollRoot.clientHeight + padding;
}
}
function findPreviousGroupHeader(card: HTMLElement): HTMLElement | null {
let current = card.previousElementSibling;
while (current) {
if (current instanceof HTMLElement && current.dataset.hoverPopupGroupHeader === "true") {
return current;
}
current = current.previousElementSibling;
}
return null;
}
function stylePopupChrome(popup: maplibregl.Popup) {
const element = popup.getElement();
const content = element.querySelector(".maplibregl-popup-content") as HTMLElement | null;
+1 -1
View File
@@ -93,7 +93,7 @@ export function useMapInstance() {
}
};
let throttleTimeout: any = null;
let throttleTimeout: ReturnType<typeof setTimeout> | null = null;
const syncZoomLevelImmediate = () => {
if (isZoomSliderDraggingRef.current) return;
+12 -3
View File
@@ -66,10 +66,15 @@ export function useMapInteraction({
const mapCleanupFnsRef = useRef<Array<() => void>>([]);
const allowGeometryEditingRef = useRef(allowGeometryEditing);
allowGeometryEditingRef.current = allowGeometryEditing;
const allowFeatureSelectionRef = useRef(allowFeatureSelection);
useEffect(() => {
allowGeometryEditingRef.current = allowGeometryEditing;
}, [allowGeometryEditing]);
useEffect(() => {
allowFeatureSelectionRef.current = allowFeatureSelection;
}, [allowFeatureSelection]);
useEffect(() => {
if (!editingEngineRef.current) {
@@ -132,7 +137,7 @@ export function useMapInteraction({
}, [mode, mapRef]);
const setupMapInteractions = (map: maplibregl.Map) => {
(map as any)._renderDraftRef = renderDraftRef;
(map as MapWithRenderDraftRef)._renderDraftRef = renderDraftRef;
const drawingEngine = initDrawing(
map,
() => modeRef.current,
@@ -355,6 +360,10 @@ export function useMapInteraction({
};
}
type MapWithRenderDraftRef = maplibregl.Map & {
_renderDraftRef?: React.MutableRefObject<FeatureCollection>;
};
function buildDuplicatedFeatureShapeOnly(
feature: FeatureCollection["features"][number]
): FeatureCollection["features"][number] {
+3 -1
View File
@@ -9,7 +9,6 @@ import {
ensurePathArrowIcon,
} from "./mapUtils";
import { BackgroundLayerVisibility } from "@/uhm/lib/map/styles/backgroundLayers";
import { FeatureCollection } from "@/uhm/lib/editor/state/useEditorState";
export function getBaseMapStyle(): maplibregl.StyleSpecification {
return {
@@ -224,6 +223,7 @@ export function setupMapLayers(
"delete", "#ef4444",
"vertex", "#22c55e",
"edge", "#eab308",
"unknown", "#22c55e",
"#3b82f6" // default none
],
"circle-radius": 22,
@@ -243,6 +243,7 @@ export function setupMapLayers(
"delete", "#ef4444",
"vertex", "#22c55e",
"edge", "#eab308",
"unknown", "#22c55e",
"#3b82f6" // default none
],
"circle-radius": 12,
@@ -252,6 +253,7 @@ export function setupMapLayers(
"delete", "#7f1d1d",
"vertex", "#14532d",
"edge", "#713f12",
"unknown", "#14532d",
"#0f172a" // default none
],
"circle-stroke-width": 3,
+40 -2
View File
@@ -2,7 +2,6 @@ import { useCallback, useEffect, useRef } from "react";
import maplibregl from "maplibre-gl";
import { FeatureCollection } from "@/uhm/lib/editor/state/useEditorState";
import { BackgroundLayerVisibility } from "@/uhm/lib/map/styles/backgroundLayers";
import { EMPTY_FEATURE_COLLECTION } from "@/uhm/lib/map/geo/constants";
import { FEATURE_STATE_SOURCE_IDS, PATH_ARROW_SOURCE_ID, POLYGON_LABEL_SOURCE_ID } from "@/uhm/lib/map/constants";
import {
applyBackgroundLayerVisibility,
@@ -80,18 +79,53 @@ export function useMapSync({
const focusPaddingRef = useRef<number | maplibregl.PaddingOptions | undefined>(focusPadding);
const isPreviewModeRef = useRef(isPreviewMode);
useEffect(() => {
renderDraftRef.current = renderDraft;
}, [renderDraft]);
useEffect(() => {
labelContextDraftRef.current = labelContextDraft;
}, [labelContextDraft]);
useEffect(() => {
labelTimelineYearRef.current = labelTimelineYear;
}, [labelTimelineYear]);
useEffect(() => {
backgroundVisibilityRef.current = backgroundVisibility;
}, [backgroundVisibility]);
useEffect(() => {
geometryVisibilityRef.current = geometryVisibility;
}, [geometryVisibility]);
useEffect(() => {
selectedFeatureIdsRef.current = selectedFeatureIds;
}, [selectedFeatureIds]);
useEffect(() => {
applyGeometryBindingFilterRef.current = applyGeometryBindingFilter;
}, [applyGeometryBindingFilter]);
useEffect(() => {
fitToDraftBoundsRef.current = fitToDraftBounds;
}, [fitToDraftBounds]);
useEffect(() => {
imageOverlayRef.current = imageOverlay || null;
}, [imageOverlay]);
useEffect(() => {
focusFeatureCollectionRef.current = focusFeatureCollection;
}, [focusFeatureCollection]);
useEffect(() => {
focusPaddingRef.current = focusPadding;
}, [focusPadding]);
useEffect(() => {
isPreviewModeRef.current = isPreviewMode;
}, [isPreviewMode]);
const fitBoundsAppliedRef = useRef(false);
const lastCountriesStrRef = useRef("");
@@ -102,7 +136,7 @@ export function useMapSync({
useEffect(() => {
const map = mapRef.current;
if (map) {
(map as any)._renderDraftRef = renderDraftRef;
(map as MapWithRenderDraftRef)._renderDraftRef = renderDraftRef;
}
}, [mapRef]);
@@ -299,3 +333,7 @@ export function useMapSync({
},
};
}
type MapWithRenderDraftRef = maplibregl.Map & {
_renderDraftRef?: React.MutableRefObject<FeatureCollection>;
};
+140 -23
View File
@@ -21,7 +21,9 @@ import type { WikiSnapshot } from "@/uhm/types/wiki";
import { type BackgroundLayerVisibility } from "@/uhm/lib/map/styles/backgroundLayers";
import { normalizeFeatureEntityIds } from "@/uhm/lib/editor/snapshot/editorSnapshot";
import type { PreviewRelationIndex } from "@/uhm/lib/preview/types";
import { isTimelineYearWithinEntityTimeRange } from "@/uhm/lib/utils/entityTime";
import type { Feature } from "@/uhm/lib/editor/state/useEditorState";
import type { ReplayPreviewController } from "@/uhm/lib/replay/useReplayPreview";
type Props = {
projectId: string;
@@ -47,7 +49,7 @@ type Props = {
selectedStepIndex?: number | null;
autoplayMode?: "start" | "selection" | null;
replayPreview: any;
replayPreview: ReplayPreviewController;
mapHandleRef?: RefObject<MapHandle | null>;
previewRelations: PreviewRelationIndex;
previewActiveEntityId: string | null;
@@ -116,6 +118,7 @@ const PreviewLayout = forwardRef<PreviewLayoutHandle, Props>(({
// Clear preview states when currentActiveReplay or mode changes
useEffect(() => {
const timeoutId = window.setTimeout(() => {
setPreviewWikiCache({});
setPreviewWikiError(null);
setIsPreviewWikiLoading(false);
@@ -123,6 +126,8 @@ const PreviewLayout = forwardRef<PreviewLayoutHandle, Props>(({
setPreviewActiveEntityId(null);
setIsPreviewEntitySidebarOpen(false);
setPreviewLinkEntityPopup(null);
}, 0);
return () => window.clearTimeout(timeoutId);
}, [currentActiveReplay, mode, setPreviewActiveEntityId, setPreviewWikiCache]);
const autoplayedReplayIdRef = useRef<string | number | null>(null);
@@ -180,40 +185,73 @@ const PreviewLayout = forwardRef<PreviewLayoutHandle, Props>(({
// Load active wiki content if needed
useEffect(() => {
if (!mode || !replayPreviewSidebarOpen) {
const timeoutId = window.setTimeout(() => {
setPreviewWikiError(null);
setIsPreviewWikiLoading(false);
return;
}, 0);
return () => window.clearTimeout(timeoutId);
}
const setWikiIdle = (error: string | null = null) => {
const timeoutId = window.setTimeout(() => {
setPreviewWikiError(error);
setIsPreviewWikiLoading(false);
}, 0);
return () => window.clearTimeout(timeoutId);
};
const setWikiLoading = () => {
const timeoutId = window.setTimeout(() => {
setPreviewWikiError(null);
setIsPreviewWikiLoading(true);
}, 0);
return () => window.clearTimeout(timeoutId);
};
let pendingStateCleanup: (() => void) | null = null;
const cleanupPendingState = () => {
pendingStateCleanup?.();
pendingStateCleanup = null;
};
const scheduleWikiIdle = (error: string | null = null) => {
cleanupPendingState();
pendingStateCleanup = setWikiIdle(error);
};
const scheduleWikiLoading = () => {
cleanupPendingState();
pendingStateCleanup = setWikiLoading();
};
const cleanupEffect = () => {
cleanupPendingState();
};
const activeWikiId = String(replayPreviewActiveWikiId || "").trim();
if (!activeWikiId.length) {
setPreviewWikiError(null);
setIsPreviewWikiLoading(false);
return;
scheduleWikiIdle();
return cleanupEffect;
}
const localWiki = wikis.find((item) => item.id === activeWikiId) || null;
if (!localWiki) {
setPreviewWikiError("Không tìm thấy wiki trong snapshot preview.");
setIsPreviewWikiLoading(false);
return;
scheduleWikiIdle("Không tìm thấy wiki trong snapshot preview.");
return cleanupEffect;
}
if (typeof localWiki.doc === "string") {
setPreviewWikiError(null);
setIsPreviewWikiLoading(false);
return;
scheduleWikiIdle();
return cleanupEffect;
}
if (previewWikiCache[activeWikiId]) {
setPreviewWikiError(null);
setIsPreviewWikiLoading(false);
return;
scheduleWikiIdle();
return cleanupEffect;
}
let disposed = false;
setPreviewWikiError(null);
setIsPreviewWikiLoading(true);
scheduleWikiLoading();
void fetchWikiById(activeWikiId)
.then((row) => {
if (disposed) return;
@@ -231,12 +269,14 @@ const PreviewLayout = forwardRef<PreviewLayoutHandle, Props>(({
return () => {
disposed = true;
cleanupEffect();
};
}, [
mode,
previewWikiCache,
replayPreviewActiveWikiId,
replayPreviewSidebarOpen,
setPreviewWikiCache,
wikis,
]);
@@ -401,25 +441,67 @@ const PreviewLayout = forwardRef<PreviewLayoutHandle, Props>(({
// Hover popup content provider
const getPreviewHoverPopupContent = useCallback((feature: Feature) => {
const entityIds = normalizeFeatureEntityIds(feature);
const sourceFeatureId = (feature as { id?: string | number }).id ?? null;
const entitiesForFeature = entityIds
.map((entityId) => previewRelations.entitiesById[entityId] || null)
.filter((entity): entity is Entity => Boolean(entity));
if (!entitiesForFeature.length) return null;
return {
rows: entitiesForFeature.flatMap((entity) => {
type GroupedHoverRow = MapHoverPopupContent["rows"][number] & { isTimelineMatch: boolean };
const groupedRows: GroupedHoverRow[] = entitiesForFeature.flatMap((entity): GroupedHoverRow[] => {
const title = entity.name || String(entity.id);
const isTimelineMatch = isTimelineYearWithinEntityTimeRange(
activeTimelineYear,
entity.time_start,
entity.time_end
);
const linkedWikis = previewRelations.entityWikisById[entity.id] || [];
const entityHeaderRow = {
title,
description: entity.description,
isGroupHeader: true,
isTimelineMatch,
};
if (!linkedWikis.length) {
return [{ title: entity.name || String(entity.id), quote: "" }];
return [entityHeaderRow, {
title: "(chưa có wiki)",
titleTone: "danger",
isTimelineMatch,
quoteTone: "danger",
}];
}
return linkedWikis.map((wiki) => ({
title: entity.name || String(entity.id),
return [
entityHeaderRow,
...linkedWikis.map((wiki) => ({
title: getWikiHoverTitle(wiki, title),
isTimelineMatch,
quote: extractWikiBlockquoteText(wiki.content),
}));
onClick: () => selectReplayPreviewEntity(entity.id, {
sourceFeatureId,
preferredWikiId: wiki.id,
focusMap: false,
selectGeometry: false,
}),
})),
];
});
const timelineMatchedRows = groupedRows.filter((row) => row.isTimelineMatch);
const otherRows = groupedRows.filter((row) => !row.isTimelineMatch);
const stripGroupFlag = ({ isTimelineMatch: _isTimelineMatch, ...row }: GroupedHoverRow) => row;
return {
key: `${activeTimelineYear}:${groupedRows.map((row) => `${row.title}:${row.description || ""}:${row.isTimelineMatch ? "in" : "out"}`).join("|")}`,
rows: [
...timelineMatchedRows.map(stripGroupFlag),
...otherRows.map((row, index) => ({
...stripGroupFlag(row),
separatorBefore: index === 0 && timelineMatchedRows.length > 0,
})),
],
};
}, [previewRelations.entitiesById, previewRelations.entityWikisById]);
}, [activeTimelineYear, previewRelations.entitiesById, previewRelations.entityWikisById, selectReplayPreviewEntity]);
// Wiki inner links click handler
const handleReplayPreviewWikiLinkRequest = useCallback(({ slug, rect }: { slug: string; rect: DOMRect }) => {
@@ -514,6 +596,33 @@ const PreviewLayout = forwardRef<PreviewLayoutHandle, Props>(({
}
}, [mapHandleRef, previewRelations.geometryEntityIds, selectReplayPreviewEntity, setPreviewEntityFocusToken]);
const handleFocusWiki = useCallback((wiki: Wiki) => {
setFocusedPresentPlace(null);
const entityIds = previewRelations.wikiEntityIdsById[wiki.id] || [];
if (entityIds.length > 0) {
selectReplayPreviewEntity(entityIds[0], {
preferredWikiId: wiki.id,
focusMap: true,
});
// Focus geometries if any
const geometries = previewRelations.entityGeometriesById[entityIds[0]];
const map = mapHandleRef?.current?.getMap();
if (map && geometries && geometries.features.length > 0) {
fitMapToFeatureCollection(map, geometries, 84, { duration: 1000 });
}
} else {
// Direct wiki select without entity
setPreviewActiveEntityId(null);
setIsPreviewEntitySidebarOpen(true);
setPreviewWikiError(null);
setPreviewPinnedWikiPopupAnchor(null);
setPreviewLinkEntityPopup(null);
openReplayPreviewWikiPanelById(wiki.id);
}
}, [previewRelations, selectReplayPreviewEntity, setPreviewActiveEntityId, openReplayPreviewWikiPanelById, mapHandleRef]);
const effectiveGeometryVisibility = useMemo(() => {
return geometryVisibility;
}, [geometryVisibility]);
@@ -566,6 +675,7 @@ const PreviewLayout = forwardRef<PreviewLayoutHandle, Props>(({
focusedPlace={focusedPresentPlace}
onFocusPlace={handleFocusPresentPlace}
onFocusHistoricalGeometry={handleFocusHistoricalGeometry}
onFocusWiki={handleFocusWiki}
onClearFocus={clearPresentPlaceFocus}
/>
@@ -596,6 +706,7 @@ const PreviewLayout = forwardRef<PreviewLayoutHandle, Props>(({
right: 16,
bottom: 16,
left: isLargeScreen ? "auto" : 16,
width: isLargeScreen ? `min(${previewSidebarWidth}px, calc(100vw - 2rem))` : "auto",
maxWidth: "calc(100vw - 2rem)",
zIndex: 20,
}}
@@ -725,6 +836,8 @@ const PreviewLayout = forwardRef<PreviewLayoutHandle, Props>(({
);
});
PreviewLayout.displayName = "PreviewLayout";
export default PreviewLayout;
// ==========================================
@@ -751,6 +864,10 @@ function extractWikiBlockquoteText(content: string | null | undefined): string {
.trim();
}
function getWikiHoverTitle(wiki: { title?: string | null } | null | undefined, fallbackTitle: string): string {
return String(wiki?.title || "").trim() || fallbackTitle;
}
function computeFixedPopupPosition(rect: DOMRect, width: number, height: number) {
const margin = 12;
const viewportWidth = typeof window !== "undefined" ? window.innerWidth : 1440;
+25 -15
View File
@@ -38,6 +38,7 @@ type Props = {
onFeatureClick?: (payload: MapFeaturePayload | null) => void;
hoverPopupEnabled?: boolean;
getHoverPopupContent?: (feature: Feature) => MapHoverPopupContent | null;
onHoverFeatureChange?: (feature: Feature | null) => void;
activeEntity?: Entity | null;
activeWiki?: Wiki | null;
isWikiLoading?: boolean;
@@ -83,6 +84,7 @@ export default function PreviewMapShell({
onFeatureClick,
hoverPopupEnabled = false,
getHoverPopupContent,
onHoverFeatureChange,
activeEntity = null,
activeWiki = null,
isWikiLoading = false,
@@ -121,16 +123,11 @@ export default function PreviewMapShell({
useEffect(() => {
const fetchUserAvatar = async () => {
try {
const userData = await apiGetCurrentUser({ skipRefresh: true } as any);
console.log("PreviewMapShell: Fetched userData:", userData);
if (userData?.data?.profile?.avatar_url) {
console.log("PreviewMapShell: Setting avatarUrl to:", userData.data.profile.avatar_url);
setAvatarUrl(userData.data.profile.avatar_url);
} else {
console.log("PreviewMapShell: No avatar_url in profile:", userData?.data?.profile);
}
} catch (err) {
console.log("PreviewMapShell: No active session (user is guest)");
const userData = await apiGetCurrentUser({ skipRefresh: true });
const nextAvatarUrl = getCurrentUserAvatarUrl(userData);
if (nextAvatarUrl) setAvatarUrl(nextAvatarUrl);
} catch {
// Guest preview does not need an authenticated profile.
}
};
fetchUserAvatar();
@@ -172,9 +169,10 @@ export default function PreviewMapShell({
onFeatureClick={onFeatureClick}
hoverPopupEnabled={hoverPopupEnabled}
getHoverPopupContent={getHoverPopupContent}
onHoverFeatureChange={onHoverFeatureChange}
onPlayPreviewReplay={onPlayPreviewReplay}
onLoad={onLoad}
showViewportControls={false}
showViewportControls={!isMobileOrTablet}
height="100svh"
/>
@@ -209,7 +207,7 @@ export default function PreviewMapShell({
style={{
position: "absolute",
top: 10,
bottom: (activeEntity && isMobileOrTablet) ? `${(sidebarHeight || 400) + 20}px` : 20,
bottom: ((activeEntity || activeWiki) && isMobileOrTablet) ? `${(sidebarHeight || 400) + 20}px` : 20,
left: 18,
zIndex: 18,
display: "flex",
@@ -414,9 +412,9 @@ export default function PreviewMapShell({
{overlay}
{activeEntity ? (
{activeEntity || activeWiki ? (
<aside
className={isMobileOrTablet ? "" : "absolute bottom-4 right-4 top-4 left-auto z-20 max-w-[calc(100vw-2rem)]"}
className={isMobileOrTablet ? "uhm-public-wiki-sidebar" : "uhm-public-wiki-sidebar absolute bottom-4 right-4 top-4 left-auto z-20 max-w-[calc(100vw-2rem)]"}
style={isMobileOrTablet ? {
position: "absolute",
bottom: 0,
@@ -429,7 +427,9 @@ export default function PreviewMapShell({
maxWidth: "100%",
zIndex: 20,
// Do not transition height during drag resizing for butter smoothness
} : undefined}
} : {
width: `min(${sidebarWidth || 420}px, calc(100vw - 2rem))`,
}}
>
<PublicWikiSidebar
entity={activeEntity}
@@ -454,3 +454,13 @@ export default function PreviewMapShell({
</div>
);
}
function getCurrentUserAvatarUrl(value: unknown): string | null {
if (!value || typeof value !== "object") return null;
const data = (value as { data?: unknown }).data;
if (!data || typeof data !== "object") return null;
const profile = (data as { profile?: unknown }).profile;
if (!profile || typeof profile !== "object") return null;
const avatarUrl = (profile as { avatar_url?: unknown }).avatar_url;
return typeof avatarUrl === "string" && avatarUrl.trim() ? avatarUrl : null;
}
@@ -18,6 +18,7 @@ import PresentPlaceSearch, {
type HistoricalGeometryFocusPayload,
type PresentPlaceSelection,
} from "@/uhm/components/editor/PresentPlaceSearch";
import { type Wiki } from "@/uhm/api/wikis";
import type { FeatureCollection } from "@/uhm/types/geo";
import {
type BackgroundLayerId,
@@ -143,6 +144,7 @@ export default function PublicPreviewClientPage({
isRelationsLoading,
relationsStatus,
replays,
ensureChildrenForGeometry,
} = usePublicPreviewData({ timelineYear: searchTimelineYear, timeRange, enabled: loadInteractiveMap });
const activeReplay = useMemo(() => {
@@ -200,6 +202,7 @@ export default function PublicPreviewClientPage({
linkEntityPopupRef,
getHoverPopupContent,
selectEntity,
selectWiki,
handleWikiLinkRequest,
closeWikiSidebar,
setLinkEntityPopup,
@@ -210,10 +213,18 @@ export default function PublicPreviewClientPage({
setRelations,
selectedFeatureIds,
setSelectedFeatureIds,
timelineYear: replayMode === "playing" ? replayPreview.timelineYear : timelineDraftYear,
replayActiveWikiId: replayPreview.activeWikiId,
replayMode,
});
useEffect(() => {
if (!selectedFeatureIds.length) return;
for (const featureId of selectedFeatureIds) {
void ensureChildrenForGeometry(featureId);
}
}, [ensureChildrenForGeometry, selectedFeatureIds]);
useEffect(() => {
if (typeof window === "undefined") return;
const handleResize = () => {
@@ -362,6 +373,23 @@ export default function PublicPreviewClientPage({
}
}, [relations.geometryEntityIds, selectEntity, setSelectedFeatureIds]);
const handleFocusWiki = useCallback((wiki: Wiki) => {
setFocusedPresentPlace(null);
selectWiki(wiki);
// Focus geometries if any
const entityIds = relations.wikiEntityIdsById[wiki.id] || [];
if (entityIds.length > 0) {
const geometries = relations.entityGeometriesById[entityIds[0]];
const map = mapHandleRef.current?.getMap();
if (map && geometries && geometries.features.length > 0) {
import("@/uhm/components/map/mapUtils").then(({ fitMapToFeatureCollection }) => {
fitMapToFeatureCollection(map, geometries, 84, { duration: 1000 });
});
}
}
}, [relations.wikiEntityIdsById, relations.entityGeometriesById, selectWiki]);
const filteredRenderDraft = useMemo(() => {
if (replayMode !== "playing" || !replayPreview.hiddenGeometryIds?.length) {
return renderDraft;
@@ -402,22 +430,22 @@ export default function PublicPreviewClientPage({
const isSidebarOpen = replayMode === "playing"
? (replayPreview.sidebarOpen || isManualSidebarOpen)
: Boolean(activeEntity);
: Boolean(activeEntity || activeWiki || isManualSidebarOpen);
const displayedActiveEntity = isSidebarOpen ? activeEntity : null;
const displayedActiveWiki = isSidebarOpen ? activeWiki : null;
const computedTimelineStyle = useMemo(() => {
const leftMargin = isLayerPanelVisible ? 88 : 18;
const rightMargin = (displayedActiveEntity && isLargeScreen) ? sidebarWidth + 32 : 18;
const bottomOffset = (displayedActiveEntity && !isLargeScreen) ? `${sidebarHeight + 16}px` : undefined;
const rightMargin = ((displayedActiveEntity || displayedActiveWiki) && isLargeScreen) ? sidebarWidth + 32 : 18;
const bottomOffset = ((displayedActiveEntity || displayedActiveWiki) && !isLargeScreen) ? `${sidebarHeight + 16}px` : undefined;
return {
left: `${leftMargin}px`,
right: `${rightMargin}px`,
bottom: bottomOffset,
transition: "right 0.3s cubic-bezier(0.4, 0, 0.2, 1), left 0.3s cubic-bezier(0.4, 0, 0.2, 1), bottom 0.3s cubic-bezier(0.4, 0, 0.2, 1)",
};
}, [isLayerPanelVisible, displayedActiveEntity, isLargeScreen, sidebarWidth, sidebarHeight]);
}, [isLayerPanelVisible, displayedActiveEntity, displayedActiveWiki, isLargeScreen, sidebarWidth, sidebarHeight]);
const searchBarWidth = useMemo(() => {
if (isLargeScreen) {
@@ -431,9 +459,9 @@ export default function PublicPreviewClientPage({
return {
position: "absolute" as const,
top: 10,
left: "50%",
transform: "translateX(-50%)",
left: 84,
right: "auto",
transform: "none",
zIndex: 18,
display: "flex",
gap: "10px",
@@ -526,6 +554,7 @@ export default function PublicPreviewClientPage({
focusedPlace={focusedPresentPlace}
onFocusPlace={handleFocusPresentPlace}
onFocusHistoricalGeometry={handleFocusHistoricalGeometry}
onFocusWiki={handleFocusWiki}
onClearFocus={clearPresentPlaceFocus}
style={{
position: "relative",
@@ -590,4 +619,3 @@ export default function PublicPreviewClientPage({
</>
);
}
@@ -1,6 +1,6 @@
"use client";
import { useState, useEffect } from "react";
import { useState, useEffect, useCallback } from "react";
import dynamic from "next/dynamic";
import { useDispatch, useSelector } from "react-redux";
import { RootState } from "@/store/store";
@@ -9,31 +9,12 @@ import MapPlaceholder from "./MapPlaceholder";
// Loader component to handle dynamic chunk loading with Redux support
const LoaderComponent = () => {
const mapEntered = useSelector((state: RootState) => state.ui.mapEntered);
const dispatch = useDispatch();
const [instantLoad, setInstantLoad] = useState<boolean>(true);
useEffect(() => {
if (typeof window !== "undefined") {
const saved = localStorage.getItem("instant-load");
if (saved !== null) {
setInstantLoad(saved === "true");
}
}
}, []);
const handleEnter = () => {
dispatch(setMapEntered(true));
};
const toggleInstantLoad = (val: boolean) => {
setInstantLoad(val);
if (typeof window !== "undefined") {
localStorage.setItem("instant-load", String(val));
}
window.dispatchEvent(new Event("instant-load-changed"));
};
return (
<MapPlaceholder
onEnter={handleEnter}
@@ -52,37 +33,28 @@ const PublicPreviewClientPage = dynamic(
export default function PublicPreviewWrapper() {
const mapEntered = useSelector((state: RootState) => state.ui.mapEntered);
const dispatch = useDispatch();
const [instantLoad, setInstantLoad] = useState<boolean>(true);
const [instantLoad, setInstantLoad] = useState<boolean>(() => readInstantLoadPreference());
useEffect(() => {
if (typeof window !== "undefined") {
const saved = localStorage.getItem("instant-load");
if (saved !== null) {
setInstantLoad(saved === "true");
}
if (typeof window === "undefined") return;
const handleSync = () => {
const updated = localStorage.getItem("instant-load");
if (updated !== null) {
setInstantLoad(updated === "true");
}
setInstantLoad(readInstantLoadPreference());
};
window.addEventListener("instant-load-changed", handleSync);
return () => window.removeEventListener("instant-load-changed", handleSync);
}
}, []);
const toggleInstantLoad = (val: boolean) => {
const toggleInstantLoad = useCallback((val: boolean) => {
setInstantLoad(val);
if (typeof window !== "undefined") {
localStorage.setItem("instant-load", String(val));
}
window.dispatchEvent(new Event("instant-load-changed"));
};
}
}, []);
const handleEnter = () => {
const handleEnter = useCallback(() => {
dispatch(setMapEntered(true));
};
}, [dispatch]);
useEffect(() => {
if (mapEntered) return;
@@ -114,7 +86,7 @@ export default function PublicPreviewWrapper() {
clearTimeout(timerId);
}
};
}, [mapEntered]);
}, [handleEnter, mapEntered]);
if (!mapEntered && !instantLoad) {
return (
@@ -133,3 +105,13 @@ export default function PublicPreviewWrapper() {
/>
);
}
function readInstantLoadPreference(): boolean {
if (typeof window === "undefined") return true;
try {
const saved = window.localStorage.getItem("instant-load");
return saved === null ? true : saved === "true";
} catch {
return true;
}
}
@@ -1,8 +1,8 @@
"use client";
import { useEffect, useMemo, useRef, useState } from "react";
import { useCallback, useEffect, useMemo, useRef, useState } from "react";
import { fetchGeometriesByBBox } from "@/uhm/api/geometries";
import { fetchGeometriesByBBox, fetchGeometriesByBoundWith } from "@/uhm/api/geometries";
import { ApiError } from "@/uhm/api/http";
import {
fetchEntitiesByGeometryIds,
@@ -19,7 +19,7 @@ import {
type PreviewRelationIndex,
} from "@/uhm/lib/preview/types";
import type { Entity } from "@/uhm/types/entities";
import type { FeatureCollection } from "@/uhm/types/geo";
import type { FeatureCollection, FeatureEntityPreview, FeatureWikiPreview } from "@/uhm/types/geo";
import type { BattleReplay } from "@/uhm/types/projects";
import { fetchBattleReplaysByGeometryIds } from "@/uhm/api/battleReplays";
@@ -37,6 +37,7 @@ export function usePublicPreviewData(options: {
const [isRelationsLoading, setIsRelationsLoading] = useState(false);
const [relationsStatus, setRelationsStatus] = useState<string | null>(null);
const timelineFetchRequestRef = useRef(0);
const loadedChildGeometryParentIdsRef = useRef<Set<string>>(new Set());
useEffect(() => {
if (!enabled) {
@@ -47,6 +48,7 @@ export function usePublicPreviewData(options: {
setIsRelationsLoading(false);
setTimelineStatus(null);
setRelationsStatus(null);
loadedChildGeometryParentIdsRef.current.clear();
return;
}
@@ -58,10 +60,11 @@ export function usePublicPreviewData(options: {
setIsRelationsLoading(false);
setTimelineStatus(null);
setRelationsStatus(null);
loadedChildGeometryParentIdsRef.current.clear();
let next: FeatureCollection;
try {
next = await fetchGeometriesByBBox({ ...WORLD_BBOX, time: timelineYear, timeRange });
next = await fetchGeometriesByBBox({ ...WORLD_BBOX, time: timelineYear, timeRange, hasBound: false });
if (disposed || requestId !== timelineFetchRequestRef.current) return;
} catch (err) {
if (err instanceof ApiError) {
@@ -99,14 +102,17 @@ export function usePublicPreviewData(options: {
setRelationsStatus("Đang nạp liên kết entity/wiki.");
let entitiesByGeometryId: Record<string, Entity[]>;
let fetchedReplays: BattleReplay[] = [];
const geometryIdsWithReplays = getGeometryIdsWithReplays(next);
try {
const [entities, replaysRes] = await Promise.all([
fetchEntitiesByGeometryIds(geometryIds),
fetchBattleReplaysByGeometryIds(geometryIds).catch((err) => {
geometryIdsWithReplays.length
? fetchBattleReplaysByGeometryIds(geometryIdsWithReplays).catch((err) => {
console.error("Failed to load replays:", err);
return {};
}),
})
: Promise.resolve({}),
]);
entitiesByGeometryId = entities;
@@ -142,8 +148,22 @@ export function usePublicPreviewData(options: {
.flat()
.map((entity) => entity.id)
);
let wikisByEntityId: Record<string, Wiki[]> = {};
if (entityIds.length) {
try {
wikisByEntityId = await fetchWikisByEntityIdsWithPreviews(entityIds);
if (disposed || requestId !== timelineFetchRequestRef.current) return;
} catch (err) {
if (err instanceof ApiError) {
console.error("Load initial entity-wiki previews failed", err.body);
} else {
console.error("Load initial entity-wiki previews failed", err);
}
}
}
const entityOnlyRelations = buildPublicPreviewRelationIndex(
buildRelationInputFromGeometryRelations(next, entitiesByGeometryId, {})
buildRelationInputFromGeometryRelations(next, entitiesByGeometryId, wikisByEntityId)
);
// Apply BOTH geometries and relations at the exact same React render cycle!
@@ -154,26 +174,6 @@ export function usePublicPreviewData(options: {
// Mark loading as complete immediately so map transitions and becomes interactive
setIsRelationsLoading(false);
setRelationsStatus(null);
if (!entityIds.length) {
return;
}
// Fetch wiki previews in the background to populate hover cards without blocking map init
try {
const wikisByEntityId = await fetchWikisByEntityIdsWithPreviews(entityIds);
if (disposed || requestId !== timelineFetchRequestRef.current) return;
setRelations(buildPublicPreviewRelationIndex(
buildRelationInputFromGeometryRelations(next, entitiesByGeometryId, wikisByEntityId)
));
} catch (err) {
if (err instanceof ApiError) {
console.error("Load background entity-wiki previews failed", err.body);
} else {
console.error("Load background entity-wiki previews failed", err);
}
}
}
loadByTimeline();
@@ -187,6 +187,59 @@ export function usePublicPreviewData(options: {
[data, relations]
);
const ensureChildrenForGeometry = useCallback(async (parentGeometryId: string | number | null | undefined) => {
const parentId = String(parentGeometryId || "").trim();
if (!parentId || loadedChildGeometryParentIdsRef.current.has(parentId)) return;
loadedChildGeometryParentIdsRef.current.add(parentId);
let childFc: FeatureCollection;
try {
childFc = await fetchGeometriesByBoundWith(parentId);
} catch (err) {
loadedChildGeometryParentIdsRef.current.delete(parentId);
console.error("Load child geometries failed", err);
return;
}
const childGeometryIds = uniqueStrings(childFc.features.map((feature) => String(feature.properties.id || "")));
if (!childGeometryIds.length) return;
const childGeometryIdsWithReplays = getGeometryIdsWithReplays(childFc);
setData((prev) => mergeFeatureCollections(prev, childFc));
let entitiesByGeometryId: Record<string, Entity[]> = {};
let wikisByEntityId: Record<string, Wiki[]> = {};
try {
entitiesByGeometryId = await fetchEntitiesByGeometryIds(childGeometryIds);
const entityIds = uniqueStrings(
Object.values(entitiesByGeometryId)
.flat()
.map((entity) => entity.id)
);
if (entityIds.length) {
wikisByEntityId = await fetchWikisByEntityIdsWithPreviews(entityIds);
}
} catch (err) {
console.error("Load child geometry relations failed", err);
}
const childRelations = buildPublicPreviewRelationIndex(
buildRelationInputFromGeometryRelations(childFc, entitiesByGeometryId, wikisByEntityId)
);
setRelations((prev) => mergePreviewRelationIndexes(prev, childRelations));
try {
if (!childGeometryIdsWithReplays.length) return;
const replayRows = await fetchBattleReplaysByGeometryIds(childGeometryIdsWithReplays);
const childReplays = Object.values(replayRows).flat();
if (childReplays.length) {
setReplays((prev) => mergeReplays(prev, childReplays));
}
} catch (err) {
console.error("Load child geometry replays failed", err);
}
}, []);
return {
data,
renderDraft: labelContextDraft,
@@ -198,6 +251,7 @@ export function usePublicPreviewData(options: {
isRelationsLoading,
relationsStatus,
replays,
ensureChildrenForGeometry,
};
}
@@ -212,24 +266,89 @@ function buildRelationInputFromGeometryRelations(
} {
const entitiesById: Record<string, Entity> = {};
const entityGeometriesById: Record<string, FeatureCollection> = {};
const mergedWikisByEntityId: Record<string, Wiki[]> = {};
for (const feature of draft.features) {
const geometryId = String(feature.properties.id);
const embeddedEntities = Array.isArray(feature.properties.public_entity_previews)
? feature.properties.public_entity_previews
: [];
for (const entity of entitiesByGeometryId[geometryId] || []) {
const id = String(entity?.id || "").trim();
if (!id) continue;
entitiesById[id] = entity;
pushFeature(entityGeometriesById, id, feature);
}
for (const entityPreview of embeddedEntities) {
const entity = featureEntityPreviewToEntity(entityPreview);
if (!entity) continue;
entitiesById[entity.id] = {
...entity,
...entitiesById[entity.id],
};
pushFeature(entityGeometriesById, entity.id, feature);
pushWikis(
mergedWikisByEntityId,
entity.id,
(entityPreview.wikis || []).map(featureWikiPreviewToWiki).filter((wiki): wiki is Wiki => Boolean(wiki))
);
}
}
for (const [entityId, wikis] of Object.entries(wikisByEntityId || {})) {
pushWikis(mergedWikisByEntityId, entityId, wikis || []);
}
return {
entities: Object.values(entitiesById),
entityGeometriesById,
entityWikisById: wikisByEntityId,
entityWikisById: mergedWikisByEntityId,
};
}
function featureEntityPreviewToEntity(preview: FeatureEntityPreview): Entity | null {
const id = String(preview?.id || "").trim();
if (!id) return null;
return {
id,
name: String(preview.name || id).trim() || id,
description: preview.description ?? null,
time_start: preview.time_start ?? null,
time_end: preview.time_end ?? null,
};
}
function featureWikiPreviewToWiki(preview: FeatureWikiPreview): Wiki | null {
const id = String(preview?.id || "").trim();
if (!id) return null;
return {
id,
project_id: "",
title: preview.title || undefined,
slug: preview.slug ?? null,
content: preview.content || "",
preview_quote: preview.preview_quote ?? null,
};
}
function pushWikis(target: Record<string, Wiki[]>, entityId: string, wikis: Wiki[]) {
const id = String(entityId || "").trim();
if (!id) return;
if (!target[id]) target[id] = [];
for (const wiki of wikis || []) {
if (!wiki?.id) continue;
const existingIndex = target[id].findIndex((item) => item.id === wiki.id);
if (existingIndex >= 0) {
target[id][existingIndex] = {
...target[id][existingIndex],
...wiki,
};
} else {
target[id].push(wiki);
}
}
}
function pushFeature(target: Record<string, FeatureCollection>, entityId: string, feature: FeatureCollection["features"][number]) {
if (!target[entityId]) target[entityId] = { type: "FeatureCollection", features: [] };
if (!target[entityId].features.some((item) => String(item.properties.id) === String(feature.properties.id))) {
@@ -237,6 +356,102 @@ function pushFeature(target: Record<string, FeatureCollection>, entityId: string
}
}
function mergeFeatureCollections(base: FeatureCollection, incoming: FeatureCollection): FeatureCollection {
const byId = new Map<string, FeatureCollection["features"][number]>();
for (const feature of base.features || []) {
byId.set(String(feature.properties.id), feature);
}
for (const feature of incoming.features || []) {
byId.set(String(feature.properties.id), feature);
}
return {
type: "FeatureCollection",
features: Array.from(byId.values()),
};
}
function mergePreviewRelationIndexes(base: PreviewRelationIndex, incoming: PreviewRelationIndex): PreviewRelationIndex {
return {
entitiesById: {
...base.entitiesById,
...incoming.entitiesById,
},
entityGeometriesById: mergeFeatureCollectionRecords(base.entityGeometriesById, incoming.entityGeometriesById),
entityWikisById: mergeWikiRecords(base.entityWikisById, incoming.entityWikisById),
geometryEntityIds: mergeStringArrayRecords(base.geometryEntityIds, incoming.geometryEntityIds),
wikiEntityIdsById: mergeStringArrayRecords(base.wikiEntityIdsById, incoming.wikiEntityIdsById),
wikiEntityIdsBySlug: mergeStringArrayRecords(base.wikiEntityIdsBySlug, incoming.wikiEntityIdsBySlug),
wikiById: {
...base.wikiById,
...incoming.wikiById,
},
wikiBySlug: {
...base.wikiBySlug,
...incoming.wikiBySlug,
},
};
}
function mergeFeatureCollectionRecords(
base: Record<string, FeatureCollection>,
incoming: Record<string, FeatureCollection>
): Record<string, FeatureCollection> {
const next = { ...base };
for (const [entityId, fc] of Object.entries(incoming || {})) {
next[entityId] = next[entityId] ? mergeFeatureCollections(next[entityId], fc) : fc;
}
return next;
}
function mergeWikiRecords(base: Record<string, Wiki[]>, incoming: Record<string, Wiki[]>): Record<string, Wiki[]> {
const next: Record<string, Wiki[]> = { ...base };
for (const [entityId, wikis] of Object.entries(incoming || {})) {
next[entityId] = mergeWikis(next[entityId] || [], wikis || []);
}
return next;
}
function mergeWikis(base: Wiki[], incoming: Wiki[]): Wiki[] {
const byId = new Map<string, Wiki>();
for (const wiki of base || []) {
if (wiki?.id) byId.set(wiki.id, wiki);
}
for (const wiki of incoming || []) {
if (wiki?.id) {
byId.set(wiki.id, {
...byId.get(wiki.id),
...wiki,
});
}
}
return Array.from(byId.values());
}
function mergeStringArrayRecords(base: Record<string, string[]>, incoming: Record<string, string[]>): Record<string, string[]> {
const next: Record<string, string[]> = { ...base };
for (const [key, values] of Object.entries(incoming || {})) {
next[key] = uniqueStrings([...(next[key] || []), ...(values || [])]);
}
return next;
}
function mergeReplays(base: BattleReplay[], incoming: BattleReplay[]): BattleReplay[] {
const byId = new Map<string, BattleReplay>();
for (const replay of base || []) {
if (replay?.id) byId.set(String(replay.id), replay);
}
for (const replay of incoming || []) {
if (replay?.id) byId.set(String(replay.id), replay);
}
return Array.from(byId.values());
}
function getGeometryIdsWithReplays(fc: FeatureCollection): string[] {
return uniqueStrings((fc.features || [])
.filter((feature) => Array.isArray(feature.properties.replay_ids) && feature.properties.replay_ids.length > 0)
.map((feature) => String(feature.properties.id || "")));
}
function uniqueStrings(values: Array<string | null | undefined>): string[] {
return Array.from(new Set(
values
@@ -11,6 +11,7 @@ import {
} from "@/uhm/api/wikis";
import type { MapHoverPopupContent } from "@/uhm/components/map/useMapHoverPopup";
import type { PreviewRelationIndex } from "@/uhm/lib/preview/types";
import { isTimelineYearWithinEntityTimeRange } from "@/uhm/lib/utils/entityTime";
import type { Feature, FeatureCollection } from "@/uhm/types/geo";
import type { BattleReplay } from "@/uhm/types/projects";
@@ -36,10 +37,11 @@ export function usePublicPreviewInteraction(options: {
setRelations: React.Dispatch<React.SetStateAction<PreviewRelationIndex>>;
selectedFeatureIds: (string | number)[];
setSelectedFeatureIds: React.Dispatch<React.SetStateAction<(string | number)[]>>;
timelineYear?: number | null;
replayActiveWikiId?: string | null;
replayMode?: "idle" | "playing";
}) {
const { data, relations, setRelations, selectedFeatureIds, setSelectedFeatureIds, replayActiveWikiId, replayMode } = options;
const { data, relations, setRelations, selectedFeatureIds, setSelectedFeatureIds, timelineYear, replayActiveWikiId, replayMode } = options;
const [activeEntityId, setActiveEntityId] = useState<string | null>(null);
const [activeWikiSlug, setActiveWikiSlug] = useState<string | null>(null);
const [isManualSidebarOpen, setIsManualSidebarOpen] = useState(false);
@@ -53,7 +55,6 @@ export function usePublicPreviewInteraction(options: {
const [activeWikiError, setActiveWikiError] = useState<string | null>(null);
const [linkEntityPopup, setLinkEntityPopup] = useState<LinkEntityPopupState | null>(null);
const linkEntityPopupRef = useRef<HTMLDivElement | null>(null);
const loadedWikiEntityIdsRef = useRef<Set<string>>(new Set());
const hoverWikiPreviewRequestsRef = useRef<Set<string>>(new Set());
useEffect(() => {
@@ -86,7 +87,7 @@ export function usePublicPreviewInteraction(options: {
return wikiCache[activeWikiSlug] || relations.wikiBySlug[activeWikiSlug] || null;
}, [activeWikiSlug, relations.wikiBySlug, wikiCache]);
const selectEntity = useCallback((
const selectEntity = useCallback(async (
entityId: string,
selectOptions?: {
sourceFeatureId?: string | number | null;
@@ -94,11 +95,77 @@ export function usePublicPreviewInteraction(options: {
selectGeometry?: boolean;
}
) => {
const entity = relations.entitiesById[entityId] || null;
if (!entity) return;
let entity = relations.entitiesById[entityId] || null;
let linkedWikis = relations.entityWikisById[entityId] || [];
if (!entity) {
try {
const { fetchEntityById } = await import("@/uhm/api/entities");
entity = await fetchEntityById(entityId);
const { fetchWikisByEntityIdsWithPreviews } = await import("@/uhm/api/relations");
const wikisRes = await fetchWikisByEntityIdsWithPreviews([entityId]);
linkedWikis = wikisRes[entityId] || [];
setRelations((prev) => {
const wikiById = { ...prev.wikiById };
const wikiBySlug = { ...prev.wikiBySlug };
const wikiEntityIdsById = { ...prev.wikiEntityIdsById };
const wikiEntityIdsBySlug = { ...prev.wikiEntityIdsBySlug };
for (const w of linkedWikis) {
wikiById[w.id] = w;
if (w.slug) {
wikiBySlug[w.slug] = w;
if (!wikiEntityIdsBySlug[w.slug]) wikiEntityIdsBySlug[w.slug] = [];
if (!wikiEntityIdsBySlug[w.slug].includes(entityId)) {
wikiEntityIdsBySlug[w.slug].push(entityId);
}
}
if (!wikiEntityIdsById[w.id]) wikiEntityIdsById[w.id] = [];
if (!wikiEntityIdsById[w.id].includes(entityId)) {
wikiEntityIdsById[w.id].push(entityId);
}
}
return {
...prev,
entitiesById: {
...prev.entitiesById,
[entityId]: entity,
},
entityWikisById: {
...prev.entityWikisById,
[entityId]: linkedWikis,
},
wikiById,
wikiBySlug,
wikiEntityIdsById,
wikiEntityIdsBySlug,
};
});
} catch (err) {
console.error("Failed to lazy load entity/wikis:", err);
return;
}
}
const linkedWikis = relations.entityWikisById[entityId] || [];
const preferredWikiSlug = String(selectOptions?.preferredWikiSlug || "").trim();
if (!linkedWikis.length || (preferredWikiSlug && !linkedWikis.some((wiki) => String(wiki.slug || "").trim() === preferredWikiSlug))) {
try {
const fetchedWikis = await fetchRelationWikisForEntity(entityId);
if (fetchedWikis.length) {
linkedWikis = fetchedWikis;
setRelations((prev) => mergeEntityWikisIntoRelations(prev, entityId, fetchedWikis));
setWikiCache((prev) => ({
...wikisBySlug(fetchedWikis),
...prev,
}));
}
} catch (err) {
console.error("Failed to load entity wikis before selecting:", err);
}
}
const nextWikiSlug =
(preferredWikiSlug && linkedWikis.some((wiki) => String(wiki.slug || "").trim() === preferredWikiSlug)
? preferredWikiSlug
@@ -113,7 +180,35 @@ export function usePublicPreviewInteraction(options: {
if (selectOptions?.selectGeometry && selectOptions?.sourceFeatureId != null) {
setSelectedFeatureIds([selectOptions.sourceFeatureId]);
}
}, [relations.entitiesById, relations.entityWikisById, setSelectedFeatureIds]);
}, [relations.entitiesById, relations.entityWikisById, setRelations, setSelectedFeatureIds]);
const selectWiki = useCallback(async (
wiki: Wiki
) => {
const entityIds = relations.wikiEntityIdsById[wiki.id] || [];
if (entityIds.length > 0) {
await selectEntity(entityIds[0], {
preferredWikiSlug: wiki.slug,
});
return;
}
if (wiki.slug) {
const slug = wiki.slug;
setWikiCache((prev) => ({
...prev,
[slug]: {
...wiki,
__fetched: false,
},
}));
setActiveWikiSlug(slug);
}
setActiveEntityId(null);
setActiveWikiError(null);
setLinkEntityPopup(null);
setIsManualSidebarOpen(true);
}, [relations.wikiEntityIdsById, selectEntity]);
useEffect(() => {
if (!selectedFeatureIds.length) return;
@@ -142,30 +237,15 @@ export function usePublicPreviewInteraction(options: {
}));
}
const rows = await Promise.all(
wikis.map(async (wiki) => {
const presetQuote = String(wiki.preview_quote || "").trim();
const fullWiki = presetQuote ? wiki : await fetchFullWikiContent(wiki);
const quote = presetQuote
? cleanPreviewQuoteText(presetQuote)
: extractWikiBlockquoteText(fullWiki.content);
if (fullWiki.slug) {
setWikiCache((prev) => ({
...prev,
[String(fullWiki.slug)]: {
...fullWiki,
__fetched: true,
},
const rows = wikis.map((wiki) => ({
wiki,
quote: cleanPreviewQuoteText(wiki.preview_quote),
}));
}
return { wiki: fullWiki, quote };
})
);
setHoverWikiPreviewByEntityId((prev) => ({
...prev,
[entityId]: {
rows: rows.filter((row) => row.quote.trim().length > 0),
rows,
isLoaded: true,
},
}));
@@ -187,15 +267,9 @@ export function usePublicPreviewInteraction(options: {
.filter((entity): entity is Entity => Boolean(entity));
if (!entities.length) return null;
return {
key: entities
.map((entity) => {
const preview = hoverWikiPreviewByEntityId[entity.id] ||
buildPresetHoverPreview(relations.entityWikisById[entity.id] || []);
return `${entity.id}:${preview?.isLoaded ? "loaded" : "loading"}:${preview?.rows.map((row) => row.quote).join("/") || ""}`;
})
.join("|"),
rows: entities.flatMap((entity) => {
type GroupedHoverRow = MapHoverPopupContent["rows"][number] & { isTimelineMatch: boolean };
const groupedRows: GroupedHoverRow[] = entities.flatMap((entity): GroupedHoverRow[] => {
const isTimelineMatch = isTimelineYearWithinEntityTimeRange(timelineYear, entity.time_start, entity.time_end);
const preview = hoverWikiPreviewByEntityId[entity.id] ||
buildPresetHoverPreview(relations.entityWikisById[entity.id] || []);
if (!preview && !hoverWikiPreviewRequestsRef.current.has(entity.id)) {
@@ -203,10 +277,7 @@ export function usePublicPreviewInteraction(options: {
void loadHoverWikiPreviewForEntity(entity.id);
}
const baseClick = () => {
const preferredWikiSlug = preview?.rows
.map((row) => String(row.wiki.slug || "").trim())
.find((slug) => slug.length > 0) || null;
const baseClick = (preferredWikiSlug: string | null = null) => {
selectEntity(entity.id, {
sourceFeatureId: featureId,
preferredWikiSlug,
@@ -214,20 +285,61 @@ export function usePublicPreviewInteraction(options: {
});
};
if (preview?.rows.length) {
return preview.rows.map((row) => ({
const entityHeaderRow = {
title: entity.name,
description: entity.description,
isGroupHeader: true,
isTimelineMatch,
};
if (preview?.rows.length) {
return [
entityHeaderRow,
...preview.rows.map((row) => ({
title: getWikiHoverTitle(row.wiki, entity.name),
isTimelineMatch,
quote: row.quote,
onClick: baseClick,
}));
onClick: () => baseClick(String(row.wiki.slug || "").trim() || null),
})),
];
}
return [{
title: entity.name,
quote: preview?.isLoaded ? "" : "Đang tải trích dẫn wiki...",
onClick: baseClick,
if (preview?.isLoaded) {
return [entityHeaderRow, {
title: "(chưa có wiki)",
titleTone: "danger",
isTimelineMatch,
quoteTone: "danger",
}];
}),
}
return [entityHeaderRow, {
title: "Đang tải wiki...",
isTimelineMatch,
quote: "Đang tải trích dẫn wiki...",
onClick: () => baseClick(null),
}];
});
const timelineMatchedRows = groupedRows.filter((row) => row.isTimelineMatch);
const otherRows = groupedRows.filter((row) => !row.isTimelineMatch);
const stripGroupFlag = ({ isTimelineMatch: _isTimelineMatch, ...row }: GroupedHoverRow) => row;
return {
key: entities
.map((entity) => {
const preview = hoverWikiPreviewByEntityId[entity.id] ||
buildPresetHoverPreview(relations.entityWikisById[entity.id] || []);
return `${entity.id}:${preview?.isLoaded ? "loaded" : "loading"}:${preview?.rows.map((row) => row.quote).join("/") || ""}`;
})
.join("|") + `:${timelineYear ?? "none"}`,
rows: [
...timelineMatchedRows.map(stripGroupFlag),
...otherRows.map((row, index) => ({
...stripGroupFlag(row),
separatorBefore: index === 0 && timelineMatchedRows.length > 0,
})),
],
};
}, [
hoverWikiPreviewByEntityId,
@@ -236,6 +348,7 @@ export function usePublicPreviewInteraction(options: {
relations.entityWikisById,
relations.geometryEntityIds,
selectEntity,
timelineYear,
]);
useEffect(() => {
@@ -268,9 +381,6 @@ export function usePublicPreviewInteraction(options: {
return;
}
if (loadedWikiEntityIdsRef.current.has(activeEntityId)) return;
loadedWikiEntityIdsRef.current.add(activeEntityId);
let disposed = false;
(async () => {
setIsActiveWikiLoading(true);
@@ -295,7 +405,6 @@ export function usePublicPreviewInteraction(options: {
setActiveWikiError("Không tìm thấy wiki cho entity đã chọn.");
}
} catch (err) {
loadedWikiEntityIdsRef.current.delete(activeEntityId);
if (!disposed) {
console.error("Load entity wikis failed", err);
setActiveWikiError(err instanceof Error ? err.message : "Không tải được wiki cho entity đã chọn.");
@@ -420,6 +529,7 @@ export function usePublicPreviewInteraction(options: {
linkEntityPopupRef,
getHoverPopupContent,
selectEntity,
selectWiki,
handleWikiLinkRequest,
closeWikiSidebar,
setLinkEntityPopup,
@@ -459,31 +569,10 @@ function buildPresetHoverPreview(wikis: Wiki[]): HoverWikiPreview | undefined {
.map((wiki) => ({
wiki,
quote: cleanPreviewQuoteText(wiki.preview_quote),
}))
.filter((row) => row.quote.length > 0);
}));
return rows.length ? { rows, isLoaded: true } : undefined;
}
async function fetchFullWikiContent(wiki: Wiki): Promise<Wiki> {
const slug = String(wiki.slug || "").trim();
let row = wiki;
if (slug) {
row = await fetchWikiBySlug(slug) || wiki;
}
let versionContent = row.content;
try {
if (row.content_sample?.[0]?.id) {
const res = await getContentByVersionWikiId(row.content_sample[0].id);
if (res?.data?.content) versionContent = res.data.content;
}
} catch (err) {
console.error("Failed to fetch hover wiki version content:", err);
}
return { ...row, content: versionContent };
}
function extractWikiBlockquoteText(content: string | null | undefined): string {
if (!content) return "";
@@ -555,6 +644,10 @@ function firstWikiSlug(wikis: Wiki[]): string | null {
return wikis.map((wiki) => String(wiki.slug || "").trim()).find((slug) => slug.length > 0) || null;
}
function getWikiHoverTitle(wiki: Wiki | null | undefined, fallbackTitle: string): string {
return String(wiki?.title || "").trim() || fallbackTitle;
}
function cloneStringArrayRecord(source: Record<string, string[]>): Record<string, string[]> {
const result: Record<string, string[]> = {};
for (const [key, value] of Object.entries(source)) {
-32
View File
@@ -447,38 +447,6 @@ export default function TimelineBar({
</div>
</div>
{onPlayReplay ? (
<button
type="button"
onClick={onPlayReplay}
style={{
width: 32,
height: 32,
borderRadius: "50%",
backgroundColor: "#2563eb",
border: "1px solid rgba(255, 255, 255, 0.2)",
color: "white",
display: "flex",
alignItems: "center",
justifyContent: "center",
cursor: "pointer",
transition: "all 0.2s ease",
marginLeft: 8,
marginRight: 8,
flexShrink: 0,
}}
title="Xem diễn biến lịch sử (Replay)"
>
<svg
width="14"
height="14"
viewBox="0 0 24 24"
fill="currentColor"
>
<polygon points="5 3 19 12 5 21 5 3" />
</svg>
</button>
) : null}
{typeof timeRange === "number" && onTimeRangeChange ? (
<label
title="time_range (0-30)"
@@ -319,8 +319,8 @@ function PublicWikiSidebar({
return (
<div
style={{
width: "100%",
maxWidth: isMobileOrTablet ? "100%" : `${width}px`,
width: isMobileOrTablet ? "100%" : `${width}px`,
maxWidth: "100%",
display: "flex",
flexDirection: "column",
height: "100%",
@@ -1223,8 +1223,9 @@ function normalizeReplayNarrativeActions(actions: unknown): ReplayAction<Narrati
const data = params[0];
if (data && typeof data === "object") {
hasDialog = true;
text = String((data as any).text || text);
image_url = String((data as any).image_url || image_url);
const dialogData = data as { text?: unknown; image_url?: unknown };
text = String(dialogData.text || text);
image_url = String(dialogData.image_url || image_url);
} else if (data === null) {
isCleared = true;
}
@@ -1271,7 +1272,10 @@ function normalizeReplayNarrativeActions(actions: unknown): ReplayAction<Narrati
}
if (hasDialog) {
const dialogData: any = {
const dialogData: {
text: string;
image_url?: string;
} = {
text,
};
if (image_url) {
+37 -58
View File
@@ -1,7 +1,7 @@
import maplibregl from "maplibre-gl";
import { Geometry } from "@/uhm/lib/editor/state/useEditorState";
import type { ModeGetter } from "@/uhm/lib/map/engines/engineTypes";
import { snapToNearestGeometryDetailed, tracePathBetweenPoints, getRingWithSnaps } from "@/uhm/lib/map/engines/snapUtils";
import { getSnapVertexCoordinate, snapToNearestGeometryDetailed, tracePathBetweenPoints } from "@/uhm/lib/map/engines/snapUtils";
// Khởi tạo engine vẽ polygon tự do theo chuỗi click.
export function initDrawing(
@@ -21,12 +21,7 @@ export function initDrawing(
startIdx: number;
targetFeatureId: string | number;
targetFeatureRing: [number, number][];
snap1: {
type: "vertex" | "edge";
vertexIdx?: number;
edgeIdx?: number;
lngLat: { lng: number; lat: number };
};
targetVertexIdx: number;
} | null = null;
const clearPreview = () => {
@@ -107,30 +102,16 @@ export function initDrawing(
if (traceStartState) {
const targetSnap = snapToNearestGeometryDetailed(map, e.lngLat, e.point, null, traceStartState.targetFeatureId);
if (
targetSnap.type !== "none" &&
targetSnap.type === "vertex" &&
targetSnap.featureId !== undefined &&
String(targetSnap.featureId) === String(traceStartState.targetFeatureId) &&
targetSnap.ringCoords
targetSnap.vertexIdx !== undefined
) {
// Hợp lệ, tiến hành trace dọc biên giới
const snap1 = traceStartState.snap1;
const snap2 = {
type: targetSnap.type as "vertex" | "edge",
vertexIdx: targetSnap.vertexIdx,
edgeIdx: targetSnap.edgeIdx,
lngLat: { lng: targetSnap.lngLat.lng, lat: targetSnap.lngLat.lat }
};
const { ring, idx1, idx2 } = getRingWithSnaps(
traceStartState.targetFeatureRing,
snap1,
snap2
);
// Hợp lệ, trace dọc các vertex gốc của biên giới.
const path = tracePathBetweenPoints(
ring as [number, number][],
idx1,
idx2
traceStartState.targetFeatureRing,
traceStartState.targetVertexIdx,
targetSnap.vertexIdx
);
if (path.length > 0) {
@@ -141,7 +122,12 @@ export function initDrawing(
}
}
} else {
// Không tìm thấy điểm kết thúc hợp lệ trên cùng Geo, đặt điểm vẽ tự do bình thường
if (e.originalEvent.shiftKey) {
update(coords);
return;
}
// Không tìm thấy vertex kết thúc hợp lệ trên cùng Geo, đặt điểm vẽ tự do bình thường
coords.push(currentPoint);
coordMeta.push({ isTrace: false });
}
@@ -152,23 +138,32 @@ export function initDrawing(
// 2. Nếu chưa có trace, kiểm tra xem click này có kích hoạt tạo điểm bắt đầu trace không (Shift + T)
const isShiftT = e.originalEvent.shiftKey && isTKeyDown;
if (isShiftT && snapRes && snapRes.type !== "none" && snapRes.featureId !== undefined && snapRes.ringCoords) {
coords.push(currentPoint);
const traceStartCoordinate = snapRes ? getSnapVertexCoordinate(snapRes) : null;
if (
isShiftT &&
snapRes &&
snapRes.type === "vertex" &&
snapRes.featureId !== undefined &&
snapRes.ringCoords &&
snapRes.vertexIdx !== undefined &&
traceStartCoordinate
) {
coords.push(traceStartCoordinate);
coordMeta.push({ isTrace: false }); // start point của trace vẫn tính là điểm bình thường
traceStartState = {
startCoord: currentPoint,
startCoord: traceStartCoordinate,
startIdx: coords.length - 1,
targetFeatureId: snapRes.featureId,
targetFeatureRing: snapRes.ringCoords as [number, number][],
snap1: {
type: snapRes.type as "vertex" | "edge",
vertexIdx: snapRes.vertexIdx,
edgeIdx: snapRes.edgeIdx,
lngLat: { lng: snapRes.lngLat.lng, lat: snapRes.lngLat.lat }
}
targetVertexIdx: snapRes.vertexIdx
};
} else {
if (isShiftT) {
update(coords);
return;
}
// Click bình thường
coords.push(currentPoint);
coordMeta.push({ isTrace: false });
@@ -196,35 +191,19 @@ export function initDrawing(
if (traceStartState) {
const targetSnap = snapToNearestGeometryDetailed(map, e.lngLat, e.point, null, traceStartState.targetFeatureId);
if (
targetSnap.type !== "none" &&
targetSnap.type === "vertex" &&
targetSnap.featureId !== undefined &&
String(targetSnap.featureId) === String(traceStartState.targetFeatureId) &&
targetSnap.ringCoords
targetSnap.vertexIdx !== undefined
) {
const snap1 = traceStartState.snap1;
const snap2 = {
type: targetSnap.type as "vertex" | "edge",
vertexIdx: targetSnap.vertexIdx,
edgeIdx: targetSnap.edgeIdx,
lngLat: { lng: targetSnap.lngLat.lng, lat: targetSnap.lngLat.lat }
};
const { ring, idx1, idx2 } = getRingWithSnaps(
traceStartState.targetFeatureRing,
snap1,
snap2
);
const path = tracePathBetweenPoints(
ring as [number, number][],
idx1,
idx2
traceStartState.targetFeatureRing,
traceStartState.targetVertexIdx,
targetSnap.vertexIdx
);
if (path.length > 0) {
const previewCoords = [...coords];
const traceStartOffset = coords.length;
for (let i = 1; i < path.length; i++) {
previewCoords.push(path[i]);
}
+123 -99
View File
@@ -1,7 +1,13 @@
import maplibregl from "maplibre-gl";
import { Geometry } from "@/uhm/lib/editor/state/useEditorState";
import { buildCircleRing, destinationPoint, distanceMeters } from "@/uhm/lib/map/geo/geoMath";
import { snapToNearestGeometry, snapToNearestGeometryDetailed, getRingWithSnaps, tracePathBetweenPoints } from "@/uhm/lib/map/engines/snapUtils";
import { getSnapVertexCoordinate, snapToNearestGeometry, snapToNearestGeometryDetailed, tracePathBetweenPoints } from "@/uhm/lib/map/engines/snapUtils";
const HANDLE_VERTEX_MATCH_EPSILON_DEGREES = 1e-12;
const HANDLE_EDGE_MATCH_EPSILON_METERS = 0.05;
const SNAP_STATUS_SOURCE_IDS = ["countries", "places"] as const;
type HandleStatus = "unknown" | "none" | "vertex" | "edge" | "delete";
export type EditingHandle = {
id: string | number;
@@ -29,7 +35,10 @@ export function createEditingEngine(options: {
const editingRef = { current: null as EditingHandle | null };
const dragStateRef = { current: null as { idx: number } | null };
const deleteVertexModeRef = { current: false };
let vertexSnapStatuses: ("vertex" | "edge" | "none")[] = [];
let vertexSnapCache = new WeakMap<[number, number], HandleStatus>();
let lastHandlesJson = "";
let lastShapeJson = "";
let needsCacheClear = false;
let deleteRangeStartIdx: number | null = null;
let deleteRangeHoverIdx: number | null = null;
let deleteRangeIndices: number[] = [];
@@ -37,6 +46,7 @@ export function createEditingEngine(options: {
let lastMousePointPx: maplibregl.Point | null = null;
let contextMenu: HTMLDivElement | null = null;
let docClickHandler: ((ev: MouseEvent) => void) | null = null;
let pendingSnapStatusRefresh = false;
// Trạng thái vẽ tiếp (Continue Draw) để vẽ nối tiếp/sửa từ một đỉnh
let isDrawingContinued = false;
@@ -48,12 +58,7 @@ export function createEditingEngine(options: {
startIdx: number;
targetFeatureId: string | number;
targetFeatureRing: [number, number][];
snap1: {
type: "vertex" | "edge";
vertexIdx?: number;
edgeIdx?: number;
lngLat: { lng: number; lat: number };
};
targetVertexIdx: number;
} | null = null;
let currentTraceGroupId = 1;
@@ -73,7 +78,10 @@ export function createEditingEngine(options: {
}
editingRef.current = null;
dragStateRef.current = null;
vertexSnapStatuses = [];
vertexSnapCache = new WeakMap();
lastHandlesJson = "";
lastShapeJson = "";
needsCacheClear = false;
setDeleteVertexMode(false);
hideContextMenu();
const map = mapRef.current;
@@ -83,12 +91,41 @@ export function createEditingEngine(options: {
(map.getSource("edit-handles") as maplibregl.GeoJSONSource | undefined)?.setData(empty);
};
const coordinatesAlmostEqual = (
a: [number, number],
b: [number, number],
epsilon: number
) => Math.abs(a[0] - b[0]) <= epsilon && Math.abs(a[1] - b[1]) <= epsilon;
const areSnapStatusSourcesReady = (map: maplibregl.Map) => {
if (map.isMoving() || !map.areTilesLoaded()) return false;
return SNAP_STATUS_SOURCE_IDS.every((sourceId) => {
if (!map.getSource(sourceId)) return false;
return map.isSourceLoaded(sourceId);
});
};
const scheduleSnapStatusRefresh = (map: maplibregl.Map) => {
if (pendingSnapStatusRefresh) return;
pendingSnapStatusRefresh = true;
map.once("idle", () => {
pendingSnapStatusRefresh = false;
updateEditSources();
});
};
// Đồng bộ polygon/line/point tạm và các handle point lên map source.
const updateEditSources = () => {
const editing = editingRef.current;
const map = mapRef.current;
console.log("updateEditSources: editing:", editing, "map loaded:", map?.isStyleLoaded());
if (!editing || !map || !map.isStyleLoaded()) return;
const snapSourcesReady = areSnapStatusSourcesReady(map);
if (!snapSourcesReady) {
scheduleSnapStatusRefresh(map);
} else if (needsCacheClear) {
vertexSnapCache = new WeakMap();
needsCacheClear = false;
}
let shape: GeoJSON.FeatureCollection<GeoJSON.Polygon | GeoJSON.LineString | GeoJSON.Point>;
let handles: GeoJSON.FeatureCollection<GeoJSON.Point>;
@@ -96,7 +133,7 @@ export function createEditingEngine(options: {
const geomType = editing.geometryType || "Polygon";
const getHandleProperties = (idx: number, coordinate: [number, number], extraProps = {}) => {
let status: "none" | "vertex" | "edge" | "delete" = "none";
let status: HandleStatus = snapSourcesReady ? "none" : "unknown";
if (deleteVertexModeRef.current) {
if (deleteRangeStartIdx !== null) {
if (idx === deleteRangeStartIdx || idx === deleteRangeHoverIdx) {
@@ -110,28 +147,32 @@ export function createEditingEngine(options: {
status = "delete";
}
} else {
const isDragging = dragStateRef.current !== null;
const isDraggedVertex = dragStateRef.current?.idx === idx;
if (isDragging && !isDraggedVertex && vertexSnapStatuses[idx]) {
status = vertexSnapStatuses[idx];
if (!isDraggedVertex && vertexSnapCache.has(coordinate) && vertexSnapCache.get(coordinate) !== "unknown") {
status = vertexSnapCache.get(coordinate)!;
} else if (!snapSourcesReady) {
status = "unknown";
} else {
const lngLat = new maplibregl.LngLat(coordinate[0], coordinate[1]);
const pointPx = map.project(lngLat);
const snapResult = snapToNearestGeometryDetailed(map, lngLat, pointPx, editing.id);
if (snapResult.type !== "none") {
if (snapResult.type === "vertex") {
const snapCoordinate = getSnapVertexCoordinate(snapResult);
status = snapCoordinate && coordinatesAlmostEqual(
coordinate,
snapCoordinate,
HANDLE_VERTEX_MATCH_EPSILON_DEGREES
) ? "vertex" : "none";
} else if (snapResult.type === "edge") {
const dist = distanceMeters(coordinate, [snapResult.lngLat.lng, snapResult.lngLat.lat]);
if (dist <= 1.0) {
status = snapResult.type;
} else {
status = "none";
}
status = dist <= HANDLE_EDGE_MATCH_EPSILON_METERS ? "edge" : "none";
} else {
status = "none";
}
vertexSnapStatuses[idx] = status;
vertexSnapCache.set(coordinate, status);
}
}
return {
@@ -238,8 +279,17 @@ export function createEditingEngine(options: {
};
}
const shapeJson = JSON.stringify(shape);
if (shapeJson !== lastShapeJson) {
lastShapeJson = shapeJson;
(map.getSource("edit-shape") as maplibregl.GeoJSONSource | undefined)?.setData(shape);
}
const handlesJson = JSON.stringify(handles);
if (handlesJson !== lastHandlesJson) {
lastHandlesJson = handlesJson;
(map.getSource("edit-handles") as maplibregl.GeoJSONSource | undefined)?.setData(handles);
}
};
// Chốt chỉnh sửa và emit geometry mới cho caller.
@@ -297,16 +347,12 @@ export function createEditingEngine(options: {
// Bắt đầu chỉnh sửa từ feature polygon/line/point được chọn.
const beginEditing = (feature: maplibregl.MapGeoJSONFeature) => {
console.log("beginEditing called with feature:", feature);
if (!feature || !feature.geometry) {
console.warn("beginEditing: feature or feature.geometry is missing");
return;
}
const geom = feature.geometry as Geometry;
const type = geom.type;
console.log("beginEditing: geometry type is", type);
if (type !== "Polygon" && type !== "LineString" && type !== "Point") {
console.warn("beginEditing: unsupported geometry type:", type);
return;
}
@@ -315,26 +361,20 @@ export function createEditingEngine(options: {
let ring: [number, number][] = [];
if (type === "Polygon") {
const coords = (geom.coordinates?.[0] ?? []) as [number, number][];
console.log("beginEditing Polygon coords:", coords);
if (coords.length < 4) {
console.warn("beginEditing: Polygon coords length is less than 4");
return;
}
// remove duplicated closing point
ring = coords.slice(0, -1).map((c) => [c[0], c[1]] as [number, number]);
} else if (type === "LineString") {
const coords = (geom.coordinates ?? []) as [number, number][];
console.log("beginEditing LineString coords:", coords);
if (coords.length < 2) {
console.warn("beginEditing: LineString coords length is less than 2");
return;
}
ring = coords.map((c) => [c[0], c[1]] as [number, number]);
} else if (type === "Point") {
const coords = (geom.coordinates ?? []) as [number, number];
console.log("beginEditing Point coords:", coords);
if (coords.length < 2) {
console.warn("beginEditing: Point coords length is less than 2");
return;
}
ring = [[coords[0], coords[1]]];
@@ -349,7 +389,8 @@ export function createEditingEngine(options: {
circleRadius: geom.circle_radius,
geometryType: type,
};
console.log("beginEditing: initialized editingRef.current:", editingRef.current);
vertexSnapCache = new WeakMap();
needsCacheClear = false;
setDeleteVertexMode(false);
updateEditSources();
};
@@ -450,7 +491,6 @@ export function createEditingEngine(options: {
const sortedIndices = [...deleteRangeIndices].sort((a, b) => b - a);
for (const idx of sortedIndices) {
editing.ring.splice(idx, 1);
vertexSnapStatuses.splice(idx, 1);
}
}
@@ -632,18 +672,12 @@ export function createEditingEngine(options: {
finishEditing();
} else if (e.key === "Delete" && editing.geometryType !== "Point" && !editing.isCircle) {
e.preventDefault();
if (e.repeat) return;
setDeleteVertexMode(!deleteVertexModeRef.current);
} else if (e.key === "Escape") {
if (deleteVertexModeRef.current) {
e.preventDefault();
if (deleteRangeStartIdx !== null) {
deleteRangeStartIdx = null;
deleteRangeHoverIdx = null;
deleteRangeIndices = [];
updateEditSources();
} else {
setDeleteVertexMode(false);
}
return;
}
cancelEditing();
@@ -688,6 +722,12 @@ export function createEditingEngine(options: {
}
};
const onMapViewportChange = () => {
if (!editingRef.current) return;
needsCacheClear = true;
updateEditSources();
};
map.on("mousedown", "edit-handles-circle", onHandleDown);
map.on("contextmenu", "edit-handles-circle", onHandleContextMenu);
map.on("mouseenter", "edit-handles-circle", onHandleMouseEnter);
@@ -696,14 +736,14 @@ export function createEditingEngine(options: {
map.on("click", onGeneralMapClick);
map.on("mousemove", onHandleMove);
map.on("mouseup", stopDragging);
map.on("moveend", onMapViewportChange);
map.on("zoomend", onMapViewportChange);
document.addEventListener("keydown", onKeyDown);
document.addEventListener("keyup", onKeyUp);
window.addEventListener("blur", onWindowBlur);
const canvas = map.getCanvas();
if (canvas) {
canvas.addEventListener("keydown", onKeyDown);
canvas.addEventListener("keyup", onKeyUp);
canvas.addEventListener("mouseleave", onCanvasLeave);
}
@@ -719,14 +759,14 @@ export function createEditingEngine(options: {
map.off("click", onGeneralMapClick);
map.off("mousemove", onHandleMove);
map.off("mouseup", stopDragging);
map.off("moveend", onMapViewportChange);
map.off("zoomend", onMapViewportChange);
document.removeEventListener("keydown", onKeyDown);
document.removeEventListener("keyup", onKeyUp);
window.removeEventListener("blur", onWindowBlur);
try {
const canvas = map.getCanvas();
if (canvas) {
canvas.removeEventListener("keydown", onKeyDown);
canvas.removeEventListener("keyup", onKeyUp);
canvas.removeEventListener("mouseleave", onCanvasLeave);
}
} catch {
@@ -774,6 +814,8 @@ export function createEditingEngine(options: {
};
}
lastShapeJson = "";
lastHandlesJson = "";
(map.getSource("edit-shape") as maplibregl.GeoJSONSource | undefined)?.setData(shape);
(map.getSource("edit-handles") as maplibregl.GeoJSONSource | undefined)?.setData({
type: "FeatureCollection",
@@ -929,7 +971,7 @@ export function createEditingEngine(options: {
map,
e.lngLat,
e.point,
null,
editing.id,
traceStartState ? traceStartState.targetFeatureId : null
)
: null;
@@ -942,31 +984,17 @@ export function createEditingEngine(options: {
// 1. Thử chốt trace dọc biên giới
if (traceStartState) {
const targetSnap = snapToNearestGeometryDetailed(map, e.lngLat, e.point, null, traceStartState.targetFeatureId);
const targetSnap = snapToNearestGeometryDetailed(map, e.lngLat, e.point, editing.id, traceStartState.targetFeatureId);
if (
targetSnap.type !== "none" &&
targetSnap.type === "vertex" &&
targetSnap.featureId !== undefined &&
String(targetSnap.featureId) === String(traceStartState.targetFeatureId) &&
targetSnap.ringCoords
targetSnap.vertexIdx !== undefined
) {
const snap1 = traceStartState.snap1;
const snap2 = {
type: targetSnap.type as "vertex" | "edge",
vertexIdx: targetSnap.vertexIdx,
edgeIdx: targetSnap.edgeIdx,
lngLat: { lng: targetSnap.lngLat.lng, lat: targetSnap.lngLat.lat }
};
const { ring, idx1, idx2 } = getRingWithSnaps(
traceStartState.targetFeatureRing,
snap1,
snap2
);
const path = tracePathBetweenPoints(
ring as [number, number][],
idx1,
idx2
traceStartState.targetFeatureRing,
traceStartState.targetVertexIdx,
targetSnap.vertexIdx
);
if (path.length > 0) {
@@ -985,27 +1013,40 @@ export function createEditingEngine(options: {
return;
}
}
if (e.originalEvent.shiftKey) {
updateEditSources();
return;
}
}
// 2. Shift + T để kích hoạt start trace
const isShiftT = e.originalEvent.shiftKey && isTKeyDown;
if (isShiftT && snapRes && snapRes.type !== "none" && snapRes.featureId !== undefined && snapRes.ringCoords) {
drawnPoints.push(currentPoint);
const traceStartCoordinate = snapRes ? getSnapVertexCoordinate(snapRes) : null;
if (
isShiftT &&
snapRes &&
snapRes.type === "vertex" &&
snapRes.featureId !== undefined &&
snapRes.ringCoords &&
snapRes.vertexIdx !== undefined &&
traceStartCoordinate
) {
drawnPoints.push(traceStartCoordinate);
coordMeta.push({ isTrace: false });
traceStartState = {
startCoord: currentPoint,
startCoord: traceStartCoordinate,
startIdx: drawnPoints.length - 1,
targetFeatureId: snapRes.featureId,
targetFeatureRing: snapRes.ringCoords as [number, number][],
snap1: {
type: snapRes.type as "vertex" | "edge",
vertexIdx: snapRes.vertexIdx,
edgeIdx: snapRes.edgeIdx,
lngLat: { lng: snapRes.lngLat.lng, lat: snapRes.lngLat.lat }
}
targetVertexIdx: snapRes.vertexIdx
};
} else {
if (isShiftT) {
updateEditSources();
return;
}
drawnPoints.push(currentPoint);
coordMeta.push({ isTrace: false });
traceStartState = null;
@@ -1029,7 +1070,7 @@ export function createEditingEngine(options: {
map,
e.lngLat,
e.point,
null,
editing.id,
traceStartState ? traceStartState.targetFeatureId : null
)
: null;
@@ -1043,31 +1084,17 @@ export function createEditingEngine(options: {
// Nếu đang trong quá trình trace, tìm đường đi nháp
if (traceStartState) {
const targetSnap = snapToNearestGeometryDetailed(map, e.lngLat, e.point, null, traceStartState.targetFeatureId);
const targetSnap = snapToNearestGeometryDetailed(map, e.lngLat, e.point, editing.id, traceStartState.targetFeatureId);
if (
targetSnap.type !== "none" &&
targetSnap.type === "vertex" &&
targetSnap.featureId !== undefined &&
String(targetSnap.featureId) === String(traceStartState.targetFeatureId) &&
targetSnap.ringCoords
targetSnap.vertexIdx !== undefined
) {
const snap1 = traceStartState.snap1;
const snap2 = {
type: targetSnap.type as "vertex" | "edge",
vertexIdx: targetSnap.vertexIdx,
edgeIdx: targetSnap.edgeIdx,
lngLat: { lng: targetSnap.lngLat.lng, lat: targetSnap.lngLat.lat }
};
const { ring, idx1, idx2 } = getRingWithSnaps(
traceStartState.targetFeatureRing,
snap1,
snap2
);
const path = tracePathBetweenPoints(
ring as [number, number][],
idx1,
idx2
traceStartState.targetFeatureRing,
traceStartState.targetVertexIdx,
targetSnap.vertexIdx
);
if (path.length > 0) {
@@ -1140,7 +1167,7 @@ export function createEditingEngine(options: {
): [number, number][] => {
if (!continueDrawConfig) return activeDrawn;
let combined = prefix.concat(activeDrawn).concat(suffix);
const combined = prefix.concat(activeDrawn).concat(suffix);
// Đối với polygon khép kín nếu bị quấn vòng qua điểm bắt đầu/kết thúc
if (!isLine && combined.length > 1) {
@@ -1292,7 +1319,6 @@ export function createEditingEngine(options: {
if (editing.ring.length <= minLength) return;
if (idx < 0 || idx >= editing.ring.length) return;
editing.ring.splice(idx, 1);
vertexSnapStatuses.splice(idx, 1);
updateEditSources();
};
@@ -1310,7 +1336,6 @@ export function createEditingEngine(options: {
(current[1] + prev[1]) / 2,
];
editing.ring.splice(idx, 0, midpoint);
vertexSnapStatuses.splice(idx, 0, "none");
updateEditSources();
};
@@ -1328,7 +1353,6 @@ export function createEditingEngine(options: {
(current[1] + next[1]) / 2,
];
editing.ring.splice(idx + 1, 0, midpoint);
vertexSnapStatuses.splice(idx + 1, 0, "none");
updateEditSources();
};
+3 -3
View File
@@ -48,7 +48,7 @@ export function initSelect(
}
}
// Chọn hoặc toggle đối tượng; giữ Alt để chọn cộng dồn/tắt chọn.
// Chọn hoặc toggle đối tượng; giữ Shift để chọn cộng dồn/tắt chọn.
function selectFeature(feature: maplibregl.MapGeoJSONFeature, additive: boolean) {
const id = feature.properties?.id ?? feature.id;
if (id === undefined || id === null) return false;
@@ -61,7 +61,7 @@ export function initSelect(
const isAlreadySelected = idToRemove !== undefined;
if (additive && isAlreadySelected) {
// Alt + click on an already selected feature removes it from the selection
// Shift + click on an already selected feature removes it from the selection
setSelectionStateForId(idToRemove, false);
selectedIds.delete(idToRemove);
onSelectIds?.(Array.from(selectedIds));
@@ -74,7 +74,7 @@ export function initSelect(
return true;
}
// Chọn feature theo click trái, hỗ trợ additive bằng Alt.
// Chọn feature theo click trái, hỗ trợ additive bằng Shift.
function onClick(e: maplibregl.MapLayerMouseEvent) {
const mode = getMode();
if (mode !== "select" && mode !== "replay" && mode !== "preview" && mode !== "replay_preview") return;
+247 -128
View File
@@ -1,11 +1,12 @@
import maplibregl from "maplibre-gl";
import { PATH_ARROW_SOURCE_ID } from "@/uhm/lib/map/constants";
// SHIFT/ALT snap should be forgiving while drawing quickly.
// Vertices get a larger radius and always win over edges when both are available.
const VERTEX_SNAP_THRESHOLD_PX = 34;
const EDGE_SNAP_THRESHOLD_PX = 24;
const QUERY_THRESHOLD_PX = Math.max(VERTEX_SNAP_THRESHOLD_PX, EDGE_SNAP_THRESHOLD_PX);
const COORDINATE_EPSILON = 1e-10;
const SEGMENT_ENDPOINT_EPSILON = 1e-7;
type Coordinate = [number, number];
type GeometryWithCoordinates = Exclude<GeoJSON.Geometry, GeoJSON.GeometryCollection> & {
@@ -21,6 +22,12 @@ export type SnapResult = {
edgeIdx?: number;
};
export function getSnapVertexCoordinate(snap: SnapResult): [number, number] | null {
if (snap.type !== "vertex" || snap.vertexIdx === undefined || !snap.ringCoords) return null;
const coordinate = snap.ringCoords[snap.vertexIdx];
return coordinate ? [coordinate[0], coordinate[1]] : null;
}
export function snapToNearestGeometry(
map: maplibregl.Map,
lngLat: maplibregl.LngLat,
@@ -65,21 +72,28 @@ export function snapToNearestGeometryDetailed(
return (p1.x - p2.x) ** 2 + (p1.y - p2.y) ** 2;
};
// Tìm điểm gần nhất trên đoạn thẳng [a, b] so với điểm p (tính trên pixel màn hình)
const getClosestPointOnSegment = (p: maplibregl.Point, a: maplibregl.Point, b: maplibregl.Point): maplibregl.Point => {
// Tìm t của điểm gần nhất trên đoạn thẳng [a, b] so với điểm p (tính trên pixel màn hình)
const getClosestTOnSegment = (p: maplibregl.Point, a: maplibregl.Point, b: maplibregl.Point): number => {
const atob = { x: b.x - a.x, y: b.y - a.y };
const atop = { x: p.x - a.x, y: p.y - a.y };
const lenSq = atob.x * atob.x + atob.y * atob.y;
if (lenSq === 0) return new maplibregl.Point(a.x, a.y);
if (lenSq === 0) return 0;
let t = (atop.x * atob.x + atop.y * atob.y) / lenSq;
t = Math.max(0, Math.min(1, t));
return new maplibregl.Point(a.x + atob.x * t, a.y + atob.y * t);
return t;
};
// Tìm điểm gần nhất trên đoạn thẳng kinh vĩ độ [a, b] so với tọa độ con trỏ p (bảo toàn độ chính xác 64-bit)
const getClosestPointOnLngLatSegment = (p: maplibregl.LngLat, a: Coordinate, b: Coordinate): maplibregl.LngLat => {
const getPointOnSegment = (a: maplibregl.Point, b: maplibregl.Point, t: number): maplibregl.Point => {
return new maplibregl.Point(a.x + (b.x - a.x) * t, a.y + (b.y - a.y) * t);
};
// Nội suy trên Mercator bằng đúng t pixel đã chọn để điểm snap nằm ổn định trên đoạn gốc.
const getPointOnLngLatSegment = (a: Coordinate, b: Coordinate, t: number): maplibregl.LngLat => {
if (t <= SEGMENT_ENDPOINT_EPSILON) return new maplibregl.LngLat(a[0], a[1]);
if (t >= 1 - SEGMENT_ENDPOINT_EPSILON) return new maplibregl.LngLat(b[0], b[1]);
const toMercatorY = (lat: number) => {
if (lat > 85.0511) lat = 85.0511;
if (lat < -85.0511) lat = -85.0511;
@@ -90,21 +104,13 @@ export function snapToNearestGeometryDetailed(
return (360 / Math.PI) * Math.atan(Math.exp(y)) - 90;
};
const ax = a[0], ay = toMercatorY(a[1]);
const bx = b[0], by = toMercatorY(b[1]);
const px = p.lng, py = toMercatorY(p.lat);
const ax = a[0];
const ay = toMercatorY(a[1]);
const bx = b[0];
const by = toMercatorY(b[1]);
const dx = bx - ax;
const dy = by - ay;
const lenSq = dx * dx + dy * dy;
if (lenSq === 0) return new maplibregl.LngLat(a[0], a[1]);
let t = ((px - ax) * dx + (py - ay) * dy) / lenSq;
t = Math.max(0, Math.min(1, t));
const resultLng = ax + dx * t;
const resultLat = fromMercatorY(ay + dy * t);
const resultLng = ax + (bx - ax) * t;
const resultLat = fromMercatorY(ay + (by - ay) * t);
return new maplibregl.LngLat(resultLng, resultLat);
};
@@ -125,31 +131,37 @@ export function snapToNearestGeometryDetailed(
}
};
const processLineString = (line: number[][], featureId: string | number | undefined) => {
const processLineString = (line: number[][], featureId: string | number | undefined, forceClosed = false) => {
if (!line || line.length < 2) return;
const lineCoords = line.map(c => toCoordinate(c)).filter((c): c is Coordinate => c !== null);
for (let i = 0; i < lineCoords.length - 1; i++) {
const start = lineCoords[i];
const end = lineCoords[i + 1];
const parsedCoords = line.map(c => toCoordinate(c)).filter((c): c is Coordinate => c !== null);
const treatAsClosed = forceClosed || isClosedRing(parsedCoords);
const lineCoords = treatAsClosed ? removeClosingCoordinate(parsedCoords) : parsedCoords;
if (lineCoords.length < 2) return;
processVertex(start, featureId, lineCoords, i);
if (i === lineCoords.length - 2) {
processVertex(end, featureId, lineCoords, i + 1);
const ringForSnap = treatAsClosed ? closeRing(lineCoords) : lineCoords;
for (let i = 0; i < lineCoords.length; i++) {
processVertex(lineCoords[i], featureId, ringForSnap, i);
}
const segmentCount = treatAsClosed ? lineCoords.length : lineCoords.length - 1;
for (let i = 0; i < segmentCount; i++) {
const start = lineCoords[i];
const end = lineCoords[(i + 1) % lineCoords.length];
const p1LngLat = new maplibregl.LngLat(start[0], start[1]);
const p2LngLat = new maplibregl.LngLat(end[0], end[1]);
const p1 = map.project(p1LngLat);
const p2 = map.project(p2LngLat);
const closestPx = getClosestPointOnSegment(pointPx, p1, p2);
const closestT = getClosestTOnSegment(pointPx, p1, p2);
const closestPx = getPointOnSegment(p1, p2, closestT);
const distSq = getDistSq(pointPx, closestPx);
if (distSq < nearestEdgeDist && distSq <= EDGE_SNAP_THRESHOLD_PX ** 2) {
nearestEdgeDist = distSq;
nearestEdgeLngLat = getClosestPointOnLngLatSegment(lngLat, start, end);
nearestEdgeLngLat = getPointOnLngLatSegment(start, end, closestT);
nearestEdgeFeatureId = featureId;
nearestEdgeRing = lineCoords;
nearestEdgeRing = ringForSnap;
nearestEdgeIdx = i;
}
}
@@ -194,10 +206,10 @@ export function snapToNearestGeometryDetailed(
// Xử lý cả Polygon và LineString vì viền bản đồ (border) đôi khi được render dưới dạng LineString
if (type === "Polygon") {
for (const ring of asCoordinateMatrix(coords)) processLineString(ring, fId);
for (const ring of asCoordinateMatrix(coords)) processLineString(ring, fId, true);
} else if (type === "MultiPolygon") {
for (const poly of asCoordinateTensor(coords)) {
for (const ring of poly) processLineString(ring, fId);
for (const ring of poly) processLineString(ring, fId, true);
}
} else if (type === "LineString") {
processLineString(asCoordinateArray(coords), fId);
@@ -234,7 +246,7 @@ export function snapToNearestGeometryDetailed(
}
function getSnapLayerIds(map: maplibregl.Map): string[] {
const systemGeometrySources = new Set(["countries", "places", PATH_ARROW_SOURCE_ID]);
const systemGeometrySources = new Set(["countries", "places"]);
const style = map.getStyle();
if (!style?.layers?.length) return [];
@@ -284,45 +296,50 @@ export function tracePathBetweenPoints(
startIdx: number,
endIdx: number
): [number, number][] {
const n = ring.length;
if (startIdx < 0 || startIdx >= n || endIdx < 0 || endIdx >= n) {
const isClosed = isClosedRing(ring);
const workingRing = (isClosed ? ring.slice(0, -1) : ring) as [number, number][];
const n = workingRing.length;
const normalizedStartIdx = isClosed && startIdx === ring.length - 1 ? 0 : startIdx;
const normalizedEndIdx = isClosed && endIdx === ring.length - 1 ? 0 : endIdx;
if (normalizedStartIdx < 0 || normalizedStartIdx >= n || normalizedEndIdx < 0 || normalizedEndIdx >= n) {
return [];
}
const isClosed = n > 2 &&
Math.abs(ring[0][0] - ring[n - 1][0]) < 1e-9 &&
Math.abs(ring[0][1] - ring[n - 1][1]) < 1e-9;
if (normalizedStartIdx === normalizedEndIdx) {
return [workingRing[normalizedStartIdx]];
}
if (!isClosed) {
// Case LineString
if (startIdx <= endIdx) {
return ring.slice(startIdx, endIdx + 1);
if (normalizedStartIdx <= normalizedEndIdx) {
return workingRing.slice(normalizedStartIdx, normalizedEndIdx + 1);
} else {
return ring.slice(endIdx, startIdx + 1).reverse();
return workingRing.slice(normalizedEndIdx, normalizedStartIdx + 1).reverse();
}
}
// Case Closed Polygon
// Path 1: Forward
const path1: [number, number][] = [];
let idx = startIdx;
while (idx !== endIdx) {
path1.push(ring[idx]);
let idx = normalizedStartIdx;
while (idx !== normalizedEndIdx) {
path1.push(workingRing[idx]);
idx = (idx + 1) % n;
}
path1.push(ring[endIdx]);
path1.push(workingRing[normalizedEndIdx]);
// Path 2: Backward
const path2: [number, number][] = [];
idx = startIdx;
while (idx !== endIdx) {
path2.push(ring[idx]);
idx = normalizedStartIdx;
while (idx !== normalizedEndIdx) {
path2.push(workingRing[idx]);
idx = (idx - 1 + n) % n;
}
path2.push(ring[endIdx]);
path2.push(workingRing[normalizedEndIdx]);
const poly1 = [...path1, ring[startIdx]];
const poly2 = [...path2, ring[startIdx]];
const poly1 = [...path1, workingRing[normalizedStartIdx]];
const poly2 = [...path2, workingRing[normalizedStartIdx]];
const area1 = getArea(poly1);
const area2 = getArea(poly2);
@@ -335,65 +352,131 @@ export function getRingWithSnaps(
snap1: { type: "vertex" | "edge"; vertexIdx?: number; edgeIdx?: number; lngLat: { lng: number; lat: number } },
snap2: { type: "vertex" | "edge"; vertexIdx?: number; edgeIdx?: number; lngLat: { lng: number; lat: number } }
): { ring: Coordinate[]; idx1: number; idx2: number } {
let tempRing = [...ring];
const closed = isClosedRing(ring);
const sourceRing = removeClosingCoordinate(ring);
const insertionGroups = new Map<number, Array<{ coord: Coordinate; t: number; owners: Set<1 | 2> }>>();
const coord1: Coordinate = [snap1.lngLat.lng, snap1.lngLat.lat];
const coord2: Coordinate = [snap2.lngLat.lng, snap2.lngLat.lat];
type NormalizedSnap =
| { type: "vertex"; vertexIdx: number }
| { type: "edge"; edgeIdx: number; coord: Coordinate; owner: 1 | 2; t: number };
let idx1 = -1;
let idx2 = -1;
if (snap1.type === "vertex" && snap2.type === "vertex") {
idx1 = snap1.vertexIdx!;
idx2 = snap2.vertexIdx!;
} else if (snap1.type === "vertex" && snap2.type === "edge") {
idx1 = snap1.vertexIdx!;
const eIdx2 = snap2.edgeIdx!;
tempRing.splice(eIdx2 + 1, 0, coord2);
idx2 = eIdx2 + 1;
if (idx1 > eIdx2) {
idx1 += 1;
}
} else if (snap1.type === "edge" && snap2.type === "vertex") {
idx2 = snap2.vertexIdx!;
const eIdx1 = snap1.edgeIdx!;
tempRing.splice(eIdx1 + 1, 0, coord1);
idx1 = eIdx1 + 1;
if (idx2 > eIdx1) {
idx2 += 1;
const normalizeSnap = (
snap: typeof snap1,
owner: 1 | 2
): NormalizedSnap | null => {
const coord: Coordinate = [snap.lngLat.lng, snap.lngLat.lat];
if (snap.type === "vertex") {
const vertexIdx = normalizeVertexIndex(snap.vertexIdx, sourceRing.length, closed);
return vertexIdx === null ? null : { type: "vertex", vertexIdx };
}
const edgeIdx = snap.edgeIdx;
if (edgeIdx === undefined || edgeIdx < 0 || edgeIdx >= sourceRing.length) return null;
if (!closed && edgeIdx >= sourceRing.length - 1) return null;
const startIdx = edgeIdx;
const endIdx = (edgeIdx + 1) % sourceRing.length;
const start = sourceRing[startIdx];
const end = sourceRing[endIdx];
if (coordinatesAlmostEqual(coord, start)) return { type: "vertex", vertexIdx: startIdx };
if (coordinatesAlmostEqual(coord, end)) return { type: "vertex", vertexIdx: endIdx };
return {
type: "edge",
edgeIdx,
coord,
owner,
t: segmentProgress(coord, start, end),
};
};
const normalized1 = normalizeSnap(snap1, 1);
const normalized2 = normalizeSnap(snap2, 2);
for (const normalized of [normalized1, normalized2]) {
if (!normalized || normalized.type !== "edge") continue;
const group = insertionGroups.get(normalized.edgeIdx) || [];
const existing = group.find((item) => coordinatesAlmostEqual(item.coord, normalized.coord));
if (existing) {
existing.owners.add(normalized.owner);
} else {
const eIdx1 = snap1.edgeIdx!;
const eIdx2 = snap2.edgeIdx!;
if (eIdx1 < eIdx2) {
tempRing.splice(eIdx2 + 1, 0, coord2);
tempRing.splice(eIdx1 + 1, 0, coord1);
idx1 = eIdx1 + 1;
idx2 = eIdx2 + 2;
} else if (eIdx1 > eIdx2) {
tempRing.splice(eIdx1 + 1, 0, coord1);
tempRing.splice(eIdx2 + 1, 0, coord2);
idx1 = eIdx1 + 2;
idx2 = eIdx2 + 1;
} else {
const segStart = ring[eIdx1];
const dist1 = Math.hypot(coord1[0] - segStart[0], coord1[1] - segStart[1]);
const dist2 = Math.hypot(coord2[0] - segStart[0], coord2[1] - segStart[1]);
if (dist1 <= dist2) {
tempRing.splice(eIdx1 + 1, 0, coord1, coord2);
idx1 = eIdx1 + 1;
idx2 = eIdx1 + 2;
} else {
tempRing.splice(eIdx1 + 1, 0, coord2, coord1);
idx1 = eIdx1 + 2;
idx2 = eIdx1 + 1;
}
group.push({ coord: normalized.coord, t: normalized.t, owners: new Set([normalized.owner]) });
}
insertionGroups.set(normalized.edgeIdx, group);
}
return { ring: tempRing, idx1, idx2 };
const builtRing: Coordinate[] = [];
const vertexIndexMap = new Map<number, number>();
const edgeIndexMap = new Map<1 | 2, number>();
for (let i = 0; i < sourceRing.length; i++) {
vertexIndexMap.set(i, builtRing.length);
builtRing.push(sourceRing[i]);
const group = insertionGroups.get(i);
if (!group) continue;
group
.sort((a, b) => a.t - b.t)
.forEach((item) => {
const existingIdx = builtRing.findIndex((coord) => coordinatesAlmostEqual(coord, item.coord));
const idx = existingIdx >= 0 ? existingIdx : builtRing.length;
if (existingIdx < 0) builtRing.push(item.coord);
for (const owner of item.owners) {
edgeIndexMap.set(owner, idx);
}
});
}
if (closed) {
builtRing.push(builtRing[0]);
}
const resolveIndex = (normalized: NormalizedSnap | null, owner: 1 | 2): number => {
if (!normalized) return -1;
if (normalized.type === "vertex") return vertexIndexMap.get(normalized.vertexIdx) ?? -1;
return edgeIndexMap.get(owner) ?? -1;
};
return {
ring: builtRing,
idx1: resolveIndex(normalized1, 1),
idx2: resolveIndex(normalized2, 2),
};
}
function coordinatesAlmostEqual(a: Coordinate, b: Coordinate, epsilon = COORDINATE_EPSILON): boolean {
return Math.abs(a[0] - b[0]) <= epsilon && Math.abs(a[1] - b[1]) <= epsilon;
}
function isClosedRing(ring: Coordinate[]): boolean {
return ring.length > 2 && coordinatesAlmostEqual(ring[0], ring[ring.length - 1]);
}
function removeClosingCoordinate(ring: Coordinate[]): Coordinate[] {
if (!isClosedRing(ring)) return [...ring];
return ring.slice(0, -1);
}
function closeRing(ring: Coordinate[]): Coordinate[] {
if (ring.length === 0 || isClosedRing(ring)) return [...ring];
return [...ring, ring[0]];
}
function normalizeVertexIndex(idx: number | undefined, uniqueLength: number, closed: boolean): number | null {
if (idx === undefined || uniqueLength <= 0) return null;
if (idx >= 0 && idx < uniqueLength) return idx;
if (closed && idx === uniqueLength) return 0;
return null;
}
function segmentProgress(coord: Coordinate, start: Coordinate, end: Coordinate): number {
const dx = end[0] - start[0];
const dy = end[1] - start[1];
const lenSq = dx * dx + dy * dy;
if (lenSq === 0) return 0;
const t = ((coord[0] - start[0]) * dx + (coord[1] - start[1]) * dy) / lenSq;
return Math.max(0, Math.min(1, t));
}
export function getOriginalFeature(
@@ -403,59 +486,95 @@ export function getOriginalFeature(
): GeoJSON.Feature | null {
if (featureId === undefined || featureId === null) return null;
// 1. Prioritize direct lookup inside the React/Zustand draft ref attached to the map instance.
// This contains the exact, unsimplified 64-bit coordinates for all local, baseline, and global features.
const renderDraft = (map as any)._renderDraftRef?.current;
// 1. Prefer the exact GeoJSON data for the rendered source. This avoids mixing geometries
// when different sources/layers reuse the same feature id.
const source = map.getSource(sourceId) as SourceWithInternalData | undefined;
if (source && source._data) {
const found = findFeatureInSourceData(source._data, featureId);
if (found) return found;
}
// 2. Fallback to the React/Zustand draft ref attached to the map instance.
const renderDraft = (map as MapWithRenderDraft)._renderDraftRef?.current;
if (renderDraft && Array.isArray(renderDraft.features)) {
const found = renderDraft.features.find((f: any) => {
const found = renderDraft.features.find((f) => {
const id = f.properties?.id ?? f.id;
return id !== undefined && String(id) === String(featureId);
});
if (found) {
console.log(`[DEBUG] getOriginalFeature: found featureId=${featureId} in map._renderDraftRef`);
return found;
}
}
// 2. Fallback to MapLibre's GeoJSONSource internal cache.
const source = map.getSource(sourceId) as any;
if (!source || !source._data) {
console.log(`[DEBUG] getOriginalFeature: sourceId=${sourceId} source/data not found`);
return null;
}
const data = source._data;
function findFeatureInSourceData(
data: unknown,
featureId: string | number
): GeoJSON.Feature | null {
// MapLibre v5 updateable Map lookup
if (data.updateable instanceof Map) {
const found = data.updateable.get(featureId) || data.updateable.get(String(featureId)) || data.updateable.get(Number(featureId));
const updateable = getObjectProperty(data, "updateable");
if (updateable instanceof Map) {
const featureMap = updateable as Map<string | number, GeoJSON.Feature>;
const found = featureMap.get(featureId) || featureMap.get(String(featureId)) || featureMap.get(Number(featureId));
if (found) {
console.log(`[DEBUG] getOriginalFeature: sourceId=${sourceId}, featureId=${featureId}, found in updateable Map`);
return found;
}
}
// Resolve GeoJSON object (MapLibre v5 stores geojson under data.geojson)
const geojson = data.geojson || data;
const geojson = getObjectProperty(data, "geojson") || data;
if (typeof geojson === "object" && geojson !== null) {
if (geojson.type === "FeatureCollection" && Array.isArray(geojson.features)) {
const found = geojson.features.find((f: any) => {
if (isFeatureCollection(geojson)) {
const found = geojson.features.find((f: GeoJSON.Feature) => {
const id = f.properties?.id ?? f.id;
return id !== undefined && String(id) === String(featureId);
});
console.log(`[DEBUG] getOriginalFeature: sourceId=${sourceId}, featureId=${featureId}, found in geojson collection=${!!found}`);
return found || null;
} else if (geojson.type === "Feature") {
}
if (isFeature(geojson)) {
const id = geojson.properties?.id ?? geojson.id;
const matches = id !== undefined && String(id) === String(featureId);
console.log(`[DEBUG] getOriginalFeature: sourceId=${sourceId}, featureId=${featureId}, matched_single=${matches}`);
if (matches) {
return geojson;
}
}
}
console.log(`[DEBUG] getOriginalFeature: sourceId=${sourceId}, data format not recognized`, data);
return null;
}
type MapWithRenderDraft = maplibregl.Map & {
_renderDraftRef?: {
current?: {
features?: GeoJSON.Feature[];
};
};
};
type SourceWithInternalData = maplibregl.Source & {
_data?: unknown;
};
function getObjectProperty(value: unknown, key: string): unknown {
if (!value || typeof value !== "object") return undefined;
return (value as Record<string, unknown>)[key];
}
function isFeatureCollection(value: unknown): value is GeoJSON.FeatureCollection {
return Boolean(
value &&
typeof value === "object" &&
(value as { type?: unknown }).type === "FeatureCollection" &&
Array.isArray((value as { features?: unknown }).features)
);
}
function isFeature(value: unknown): value is GeoJSON.Feature {
return Boolean(
value &&
typeof value === "object" &&
(value as { type?: unknown }).type === "Feature"
);
}
+6 -6
View File
@@ -1,13 +1,13 @@
import { LayerSpecification } from "maplibre-gl";
import { ExpressionSpecification, FilterSpecification, LayerSpecification } from "maplibre-gl";
import { MAP_EMPHASIS_TEXT_FONT_STACK } from "../shared/textFonts";
const TYPE_MATCH_EXPR: any = ["coalesce", ["get", "type"], ["get", "entity_type_id"], ""];
const POINT_GEOMETRY_FILTER: any = [
const TYPE_MATCH_EXPR = ["coalesce", ["get", "type"], ["get", "entity_type_id"], ""] as unknown as ExpressionSpecification;
const POINT_GEOMETRY_FILTER = [
"any",
["==", ["geometry-type"], "Point"],
["==", ["geometry-type"], "MultiPoint"],
];
const SELECTED_EXPR: any = ["boolean", ["feature-state", "selected"], false];
] as unknown as FilterSpecification;
const SELECTED_EXPR = ["boolean", ["feature-state", "selected"], false] as unknown as ExpressionSpecification;
const SELECTED_COLOR = "#22c55e";
export function getLocationLayers(sourceId: string, pathArrowSourceId?: string, pointSourceId?: string): LayerSpecification[] {
@@ -15,7 +15,7 @@ export function getLocationLayers(sourceId: string, pathArrowSourceId?: string,
void pathArrowSourceId;
const typeId = "location";
const filter: any = ["all", POINT_GEOMETRY_FILTER, ["==", TYPE_MATCH_EXPR, typeId]];
const filter = ["all", POINT_GEOMETRY_FILTER, ["==", TYPE_MATCH_EXPR, typeId]] as unknown as FilterSpecification;
return [
{
+6 -6
View File
@@ -1,14 +1,14 @@
import { LayerSpecification } from "maplibre-gl";
import { ExpressionSpecification, FilterSpecification, LayerSpecification } from "maplibre-gl";
import { MAP_EMPHASIS_TEXT_FONT_STACK } from "../shared/textFonts";
const TYPE_MATCH_EXPR: any = ["coalesce", ["get", "type"], ["get", "entity_type_id"], ""];
const POINT_GEOMETRY_FILTER: any = [
const TYPE_MATCH_EXPR = ["coalesce", ["get", "type"], ["get", "entity_type_id"], ""] as unknown as ExpressionSpecification;
const POINT_GEOMETRY_FILTER = [
"any",
["==", ["geometry-type"], "Point"],
["==", ["geometry-type"], "MultiPoint"],
];
] as unknown as FilterSpecification;
const SELECTED_EXPR: any = ["boolean", ["feature-state", "selected"], false];
const SELECTED_EXPR = ["boolean", ["feature-state", "selected"], false] as unknown as ExpressionSpecification;
const SELECTED_COLOR = "#22c55e";
export function getRegionLayers(sourceId: string, pathArrowSourceId?: string, pointSourceId?: string): LayerSpecification[] {
@@ -16,7 +16,7 @@ export function getRegionLayers(sourceId: string, pathArrowSourceId?: string, po
void pathArrowSourceId;
const typeId = "region";
const filter: any = ["all", POINT_GEOMETRY_FILTER, ["==", TYPE_MATCH_EXPR, typeId]];
const filter = ["all", POINT_GEOMETRY_FILTER, ["==", TYPE_MATCH_EXPR, typeId]] as unknown as FilterSpecification;
return [
{
+7 -8
View File
@@ -14,13 +14,13 @@ export const POINT_GEOTYPE_IDS = [
export type PointGeotypeId = (typeof POINT_GEOTYPE_IDS)[number];
export const POINT_GEOTYPE_ICON_PATHS: Partial<Record<PointGeotypeId, string>> = {
person_event: "/images/mapIcon/point/flag.png",
temple: "/images/mapIcon/point/temple.png",
capital: "/images/mapIcon/point/capital.png",
city: "/images/mapIcon/point/city.png",
fortification: "/images/mapIcon/point/castle.png",
ruin: "/images/mapIcon/point/ruin.png",
port: "/images/mapIcon/point/port.png",
person_event: "/images/mapIcon/point/flag.webp",
temple: "/images/mapIcon/point/temple.webp",
capital: "/images/mapIcon/point/capital.webp",
city: "/images/mapIcon/point/city.webp",
fortification: "/images/mapIcon/point/castle.webp",
ruin: "/images/mapIcon/point/ruin.webp",
port: "/images/mapIcon/point/port.webp",
};
@@ -474,4 +474,3 @@ function drawAnchorGlyph(ctx: CanvasRenderingContext2D) {
}
}
+22 -8
View File
@@ -3,10 +3,15 @@ import type { FeatureCollection } from "@/uhm/types/geo";
import type {
ReplayAction,
DialogState,
GeoFunctionName,
MapFunctionName,
NarrativeFunctionName,
UIOptionName,
} from "@/uhm/types/projects";
import { mapActions } from "./mapActions";
import { uiActions } from "./uiActions";
import { narrativeActions } from "./narrativeActions";
import type { ReplayMapEffects } from "./replayMapEffects";
/**
* Interface định nghĩa các controller cần thiết để thực thi Replay.
@@ -15,7 +20,7 @@ import { narrativeActions } from "./narrativeActions";
export interface ReplayControllers {
map: maplibregl.Map | null;
draft: FeatureCollection;
effects: any; // Type helper for ReplayMapEffects to avoid circular dependency
effects: ReplayMapEffects;
// UI Setters
setTimelineVisible: (v: boolean) => void;
@@ -45,7 +50,7 @@ export interface ReplayControllers {
*/
export const dispatchReplayAction = (
controllers: ReplayControllers,
rawAction: ReplayAction<any> | { function_name: string; params: unknown[] }
rawAction: ReplayAction<ReplayFunctionName> | { function_name: string; params: unknown[] }
) => {
const action = normalizeSingleAction(rawAction);
if (!action) return;
@@ -192,16 +197,25 @@ export const dispatchReplayAction = (
* Lớp tương thích ngược (Backward Compatibility)
* Chuẩn hóa các action cũ thành 16 action chính thức.
*/
function normalizeSingleAction(action: any): ReplayAction<any> | null {
type ReplayFunctionName = UIOptionName | MapFunctionName | GeoFunctionName | NarrativeFunctionName;
type ReplayActionLike = {
function_name?: unknown;
params?: unknown;
};
function normalizeSingleAction(action: unknown): ReplayAction<ReplayFunctionName> | null {
if (!action || typeof action !== "object") return null;
let { function_name, params } = action;
if (!Array.isArray(params)) {
params = [];
}
let { function_name } = action as ReplayActionLike;
let params: unknown[] = Array.isArray((action as ReplayActionLike).params)
? (action as { params: unknown[] }).params
: [];
if (typeof function_name !== "string") return null;
if (function_name === "UI") {
function_name = params[0];
const legacyFunctionName = params[0];
if (typeof legacyFunctionName !== "string") return null;
function_name = legacyFunctionName;
params = params.slice(1);
}
+24 -8
View File
@@ -62,7 +62,6 @@ export function useReplayPreview({
}: UseReplayPreviewOptions) {
const [isPlaying, setIsPlaying] = useState(false);
const isPlayingRef = useRef(false);
isPlayingRef.current = isPlaying;
const [dialog, setDialog] = useState<DialogState | null>(null);
const dialogRef = useRef<DialogState | null>(null);
const setDialogWithRef = useCallback((d: DialogState | null) => {
@@ -105,6 +104,10 @@ export function useReplayPreview({
const flatSteps = useMemo(() => flattenReplaySteps(replay), [replay]);
useEffect(() => {
isPlayingRef.current = isPlaying;
}, [isPlaying]);
useEffect(() => {
playbackSpeedRef.current = playbackSpeed;
}, [playbackSpeed]);
@@ -164,6 +167,7 @@ export function useReplayPreview({
}, []);
const restorePreviewState = useCallback(() => {
isPlayingRef.current = false;
setIsPlaying(false);
setActiveCursor({ stageId: null, stepIndex: null });
setActiveStepNumber(null);
@@ -215,11 +219,13 @@ export function useReplayPreview({
useEffect(() => {
runIdRef.current += 1;
const timeoutId = window.setTimeout(() => {
restorePreviewState();
}, 0);
return () => window.clearTimeout(timeoutId);
}, [replay?.id, restorePreviewState]);
const controllersRef = useRef<Parameters<typeof dispatchReplayAction>[0] | null>(null);
controllersRef.current = {
const controllers = useMemo<Parameters<typeof dispatchReplayAction>[0]>(() => ({
map: getMapInstance(),
draft,
effects,
@@ -284,10 +290,20 @@ export function useReplayPreview({
},
setDialog: setDialogWithRef,
getDialog: () => dialogRef.current,
};
}), [
addToast,
draft,
effects,
getMapInstance,
setDialogWithRef,
]);
const controllersRef = useRef<Parameters<typeof dispatchReplayAction>[0] | null>(null);
useEffect(() => {
controllersRef.current = controllers;
}, [controllers]);
const playFromIndex = useCallback(async (startIndex: number) => {
console.log("playFromIndex starting at:", startIndex, "flatSteps count:", flatSteps.length);
if (!flatSteps.length) return;
const map = getMapInstance();
@@ -321,11 +337,11 @@ export function useReplayPreview({
const runId = runIdRef.current + 1;
runIdRef.current = runId;
isPlayingRef.current = true;
setIsPlaying(true);
for (let index = safeStartIndex; index < flatSteps.length; index += 1) {
if (runIdRef.current !== runId) {
console.log("playFromIndex loop aborted because runId changed");
return;
}
@@ -339,7 +355,6 @@ export function useReplayPreview({
const controllers = controllersRef.current;
if (!controllers) {
console.warn("playFromIndex aborted: controllersRef.current is null!");
return;
}
controllers.map = getMapInstance();
@@ -388,7 +403,6 @@ export function useReplayPreview({
const playFromSelection = useCallback(() => {
const selectedIndex = findReplayStepIndex(flatSteps, selectedStageIdRef.current, selectedStepIndexRef.current);
console.log("playFromSelection called: selectedIndex =", selectedIndex, "selectedStageId =", selectedStageIdRef.current, "selectedStepIndex =", selectedStepIndexRef.current);
void playFromIndex(selectedIndex >= 0 ? selectedIndex : 0);
}, [flatSteps, playFromIndex]);
@@ -428,6 +442,8 @@ export function useReplayPreview({
};
}
export type ReplayPreviewController = ReturnType<typeof useReplayPreview>;
function flattenReplaySteps(replay: BattleReplay | null): FlattenedReplayStep[] {
if (!replay) return [];
return replay.detail.flatMap((stage) =>
+37
View File
@@ -0,0 +1,37 @@
import { normalizeTimelineYearValue } from "@/uhm/lib/utils/timeline";
export function formatEntityHoverTitle(
name: string,
timeStart: unknown,
timeEnd: unknown
): string {
const range = formatEntityTimeRange(timeStart, timeEnd);
return range ? `${name} (${range})` : name;
}
export function formatEntityTimeRange(timeStart: unknown, timeEnd: unknown): string {
const start = normalizeTimelineYearValue(timeStart);
const end = normalizeTimelineYearValue(timeEnd);
if (start == null && end == null) return "";
if (start != null && end != null && start === end) return formatTimelineYear(start);
return `${start == null ? "?" : formatTimelineYear(start)}-${end == null ? "?" : formatTimelineYear(end)}`;
}
export function isTimelineYearWithinEntityTimeRange(
timelineYear: unknown,
timeStart: unknown,
timeEnd: unknown
): boolean {
const year = normalizeTimelineYearValue(timelineYear);
const start = normalizeTimelineYearValue(timeStart);
const end = normalizeTimelineYearValue(timeEnd);
if (year == null || (start == null && end == null)) return false;
if (start != null && year < start) return false;
if (end != null && year > end) return false;
return true;
}
function formatTimelineYear(year: number): string {
if (year < 0) return `${Math.abs(year)} TCN`;
return String(year);
}
+1
View File
@@ -23,4 +23,5 @@ export type GeometriesBBoxQuery = {
// New API: time_range (0-30) to expand the timeline query window.
timeRange?: number;
entity_id?: string;
hasBound?: boolean;
};
+2
View File
@@ -22,6 +22,7 @@ export type FeatureProperties = {
geometry_preset?: GeometryPreset | null;
time_start?: number | null;
time_end?: number | null;
replay_ids?: string[];
bound_with?: string | null;
entity_id?: string | null;
entity_ids?: string[];
@@ -33,6 +34,7 @@ export type FeatureProperties = {
point_label?: string | null;
line_label?: string | null;
polygon_label?: string | null;
entity_color?: string;
};
export type EntityLabelCandidate = {
+51
View File
@@ -0,0 +1,51 @@
<blockquote><b>An Nam</b> (<a href="__missing__">Chữ Nho</a>: 安南) là một <a href="__missing__">quốc danh Việt Nam</a> cũ, thông dụng trong giai đoạn 679 - 1945.</blockquote>
<h2>Lịch sử</h2>
<p>Theo cổ sử, địa danh <i>An Nam</i> xuất hiện năm 679 với việc triều Đường Cao Tông đổi <i>Giao Châu tổng quản phủ</i> (từ 622) thành <i>An Nam đô hộ phủ</i> (安南都護府). Về mặt pháp lý, địa danh này tương ứng các cơ quan An Bắc (nay thuộc Bắc Bộ <a href="__missing__">CHND Trung Hoa</a>), An Đông (nay thuộc <a href="__missing__">bán đảo Cao Ly</a>), An Tây (nay thuộc Tây Bộ <a href="__missing__">CHND Trung Hoa</a>).
</p>
<p>Kể từ đó đến cả sau khi giành tự chủ, <i>An Nam</i> là cách gọi chính thức trong giao thiệp giữa triều đình <a href="__missing__">Việt Nam</a> với triều đình <a href="__missing__">Trung Hoa</a>, trong khi người <a href="__missing__">Cao Ly</a>, <a href="__missing__">Nhật Bản</a> và muộn hơn là người <a href="__missing__">Âu châu</a> thường gọi <i>Giao Chỉ</i>. Trong các văn kiện từ đầu thế kỉ XX về trước, người <a href="__missing__">Việt Nam</a> thường xưng <i>An Nam quốc</i> (安南國) hoặc <i>Nam quốc</i> khi đề cập bản xứ. Ban đầu, triều đình <a href="__missing__">Trung Hoa</a> chấp thuận danh xưng <i>An Nam quốc</i> nhưng vẫn gọi phiếm <i>Nam bang</i> hoặc <i>Giao Chỉ quốc</i>, từ <a href="__missing__">triều Mạc</a> vì viện cớ <a href="__missing__">Mạc Thái Tổ</a> tiếm vị trái lễ nghĩa nên hạ xuống <i>An Nam đô thống sứ ti</i> (安南都統使司).
</p>
<p>Trong khoảng một ngàn năm tự chủ, mặc dù đa số triều đại đều chọn <i>Đại Việt</i> làm quốc danh chính thức, nhưng lối gọi này không được phần đông hưởng ứng nên thường tồn tại trong các văn kiện pháp lý và có tính nội bộ. Mãi tới khi <a href="__missing__">triều Thanh</a> suy vi, <a href="__missing__">hoàng đế</a><a href="__missing__">Nguyễn Thánh Tổ</a> mới ban đạo dụ nhất quán gọi <i>Đại Nam quốc</i>, tuy nhiên danh xưng <i>An Nam</i> vẫn không dứt.
</p>
<h3>Bắc thuộc</h3>
<p><a href="__missing__">Thời Bắc thuộc</a> (Việt Nam bị <a href="__missing__">Trung Quốc</a> đô hộ), <a href="__missing__">nhà Đường</a> ở Trung Quốc đã đặt Việt Nam (tương ứng với khu vực <a href="__missing__">miền Bắc Việt Nam</a> ngày nay) là <b><a href="__missing__">An Nam đô hộ phủ</a></b> (<a href="__missing__">679</a>-<a href="__missing__">757</a><a href="__missing__">766</a>-<a href="__missing__">866</a>). Thời kỳ 757-766, Việt Nam mang tên <a href="__missing__">Trấn Nam đô hộ phủ</a>. Năm 866, thăng An Nam đô hộ làm <a href="__missing__">Tĩnh Hải quân tiết độ</a>.
</p>
<p>Sau khi giành được độc lập, các triều vua Việt Nam thường phải nhận thụ phong của Trung Quốc, danh hiệu <b><a href="__missing__">An Nam quốc vương</a></b> (kể từ năm <a href="__missing__">1164</a> hoặc <a href="__missing__">1174</a>).
</p>
<p>Từ đó người Trung Quốc thường gọi nước Việt Nam là An Nam, bất kể quốc hiệu là gì. Chẳng hạn, Cao Hùng Trưng (đời <a href="__missing__">nhà Minh</a>) đã viết cuốn <i>An Nam chí (nguyên)</i> về đất nước <a href="__missing__">Đại Việt</a>.
</p>
<p>Ngay cuốn sách in đầu tiên của một người Việt lưu vong ở Trung Hoa bằng chữ Hán năm 1335 cũng có nhan đề là <i><a href="__missing__">An Nam chí lược</a></i> (安南志略), do <a href="__missing__">Lê Tắc</a> (黎崱) viết.
</p>
<p>Từ đó xuất hiện các cách gọi "người An Nam", "tiếng An Nam".
</p>
<h3>Tự chủ</h3>
<p>Tên gọi An Nam do <a href="__missing__">người Trung Quốc</a> sử dụng dần dần được người <a href="__missing__">châu Âu</a> gọi theo. Chẳng hạn đã xuất hiện:
</p>
<ul><li><i><a href="__missing__">Dictionarium Annamiticum Lusitanum et Latinum</a></i> (Từ điển (tiếng) An Nam - <a href="__missing__">Bồ Đào Nha</a> - <a href="__missing__">Latinh</a>) của <a href="__missing__">Alexandre de Rhodes</a>, năm <a href="__missing__">1651</a></li>
<li><i><a href="__missing__">Dictionarium Anamitico-Latinum</a></i> (Từ điển An Nam - Latinh) của <a href="__missing__">Pigneau de Béhaine</a> (Bá Đa Lộc), soạn năm <a href="__missing__">1773</a> và được <a href="__missing__">Jean-Louis Taberd</a> biên tập lại và xuất bản năm <a href="__missing__">1838</a></li>
<li><i><a href="__missing__">Dictionnaire annamite - français</a></i> (Từ điển An Nam - <a href="__missing__">Pháp</a>) của <a href="__missing__">J. F. M. Génibrel</a>, năm <a href="__missing__">1898</a></li>
</ul>
<p>Nên nhắc lại là trong những tác phẩm do <a href="__missing__">Alexandre de Rhodes</a> viết nước "Annam" gồm có hai vùng "<a href="__missing__">Tunquin</a>" (<a href="__missing__">Đàng Ngoài</a>) và "<a href="__missing__">Cochinchine</a>" (<a href="__missing__">Đàng Trong</a>). "Cochinchine" lúc ấy, chỉ là miền Trung bây giờ: lúc sách <i>La glorieuse mort d'André catechiste de la Cochinchine</i> được in ra ở <a href="__missing__">Paris</a> vào năm 1653, thì cuộc <a href="__missing__">Nam tiến</a> của <a href="__missing__">Đại Việt</a> chỉ mới vào đến <a href="__missing__">Nha Trang</a>.
</p>
<p>Trong lịch sử cận đại, "Annam" được sử dụng trong <a href="__missing__">tiếng Pháp</a> để chỉ phần đất Miền Trung <a href="__missing__">Việt Nam</a> (hay <a href="__missing__">Trung Kỳ</a>) do triều đình Huế của <a href="__missing__">nhà Nguyễn</a> cai trị dưới sự bảo hộ của <a href="__missing__">Pháp</a>. Ngày nay, <a href="__missing__">người Việt</a> thường hiểu từ "Annam" theo một nghĩa tiêu cực, mang hàm ý miệt thị dân tộc và vì vậy không thích sử dụng nó.
</p>
<h3>Pháp thuộc</h3>
<p>Thời kỳ Pháp thuộc (1887-1945), Việt Nam bị chia thành ba miền Bắc Kỳ (<i>Tonkin</i>), Trung Kỳ (<i>Annam</i>) và Nam Kỳ (<i>Cochinchine</i>) với ba chế độ quản lý khác nhau.
</p>
<p>Annam là vùng đất do triều đình nhà Nguyễn cai quản dưới sự bảo hộ của Pháp. Khu vực hành chính có diện tích 150.200 km² nằm ở miền trung Việt Nam với thủ phủ là Huế. Trong phạm vi lãnh thổ của Annam còn có các đô thị lớn khác như Đà Nẵng, <a href="__missing__">Quy Nhơn</a>, <a href="__missing__">Quảng Trị</a>, <a href="__missing__">Vinh</a>. Về mặt hình thức Annam là một quốc gia nằm trong <a href="__missing__">Liên Hiệp Pháp</a>, có bộ máy chính quyền đứng đầu bởi vua Nguyễn, có <a href="__missing__">quốc kỳ</a>, <a href="__missing__">quốc ca</a>. Tuy nhiên về thực chất toàn bộ bộ máy chính quyền tại đây đều bị một quan chức thuộc địa của Pháp - Khâm sứ Trung kỳ (<i>Résident Supérieur d'Annam</i>) giám sát và chi phối. Năm 1945, với việc vua <a href="__missing__">Bảo Đại</a> thành lập <a href="__missing__">Đế quốc Việt Nam</a>, Annam với tư cách là một vùng lãnh thổ hành chính về mặt pháp lý chấm dứt tồn tại.
</p>
<h2>Tham khảo</h2>
<ul><li><a href="__missing__">Quốc danh Việt Nam</a></li>
<li><a href="__missing__">Hán tự văn hóa quyển</a></li>
</ul>
<h2>Liên kết</h2>
<h3>Tài liệu</h3>
<ul><li><a href="__missing__">Trần Quang Đức</a>, <i>Áo xiêm chưa đổi hết, sách vở còn nguyên sao ?</i>, <a href="__missing__">Hà Nội</a>, 2016.</li>
<li><a href="__missing__">Trần Quang Đức</a>, <i>Hán - Việt</i>, <a href="__missing__">Hà Nội</a>, 2016.</li>
<li><a href="__missing__">Trần Quang Đức</a>, <i>Hán nô ?</i>, <a href="__missing__">Hà Nội</a>, 2016.</li>
<li><a href="__missing__">Lê Vinh Huy</a>, <i><a href="__missing__">Sự giãn nở của lịch sử An Nam</a></i>, <a href="__missing__">Biên Hòa</a>, 2017.</li>
<li><i>Dictionaire annamite - français</i> (Từ điển An Nam - Pháp) của J. F. M. Génibrel, <a href="__missing__">1898</a></li>
</ul>
<h3>Tư liệu</h3>
<ul><li><a href="__missing__">Nguồn gốc quốc danh An Nam</a><a href="__missing__">Lưu trữ</a> ngày 13 tháng 4 năm 2021 tại <a href="__missing__">Wayback Machine</a></li>
<li><a href="__missing__"><i>Đế quốc An Nam và người dân An Nam</i> - Bức tranh đa diện</a></li>
</ul>
@@ -1,60 +0,0 @@
<h1>Chiến tranh Nguyên Mông Đại Việt lần 1</h1>
<p><b>Chiến tranh Mông Nguyên Đại Việt lần thứ nhất</b> hay <b>Kháng chiến chống Mông Nguyên lần thứ nhất</b> là cách người Việt Nam gọi cuộc chiến đấu của quân dân <a href="__missing__">Đại Việt</a> chống lại quân đội của <a href="__missing__">đế quốc Mông Cổ</a> do <a href="__missing__">Uriyangqatai</a> (Ngột Lương Hợp Thai) chỉ huy vào trong khoảng thời gian nửa tháng cuối tháng 1 năm <a href="__missing__">1258</a> (hay năm Nguyên Phong thứ 7.</p>
<p>Cuộc chiến mở đầu với <a href="__missing__">trận Bình Lệ Nguyên</a>, sau đó là <a href="__missing__">trận Phù Lỗ</a>. Quân Mông Cổ thắng 2 trận này, nhưng họ không diệt được đạo quân chủ lực của nhà Trần. Quân Mông Cổ tiến vào kinh thành của Đại Việt trong 9 ngày. Quân đội nhà Trần đã phản công, đại phá quân Mông trong <a href="__missing__">trận Đông Bộ Đầu</a> khiến cho đội quân này phải chạy về phía Bắc, sau đó còn phải hứng chịu một cuộc tập kích khác của thủ lĩnh miền núi là <a href="__missing__">Hà Bổng</a>. Cuộc chiến này đã kết thúc với <a href="__missing__">chiến thắng</a> của nước Đại Việt, ghi dấu công lao của vua <a href="__missing__">Trần Thái Tông</a> trong việc lãnh đạo quân dân Đại Việt chiến đấu chống quân đội <a href="__missing__">Mông Cổ</a>.</p>
<h2>Bối cảnh</h2><a href="__missing__"></a>Bản đồ Đại Việt, Mông Cổ, Nam Tống, năm 1257
<p>Vào năm 1206, <a href="__missing__">Thành Cát Tư Hãn</a> đã thành công trong việc thống nhất các bộ lạc Mông Cổ, từ đó <a href="__missing__">Đế quốc Mông Cổ</a> liên tục thực hiện nhiều cuộc chiến nhằm mở rộng đế quốc của mình. 50 năm sau, đến đời Đại hãn thứ 4, tức <a href="__missing__">Mông Kha</a>, ông đã tiến hành các chiến dịch tấn công nước <a href="__missing__">Nam Tống</a> (<a href="__missing__">Trung Quốc</a>). Mông Kha muốn đánh vào sườn nhà Tống thông qua việc cử em trai là <a href="__missing__">Hốt Tất Liệt</a> đánh <a href="__missing__">Đại Lý</a>. Đánh Đại Lý xong vào năm 1253, Hốt Tất Liệt trở về, ra lệnh cho <a href="__missing__">Ngột Lương Hợp Thai</a> ở lại đánh các nước chưa hàng phục.</p>
<p>Đến năm 1257, việc chiếm Đại Việt nằm trong chiến lược tổng thể của quân đội Mông Cổ nhằm tiêu diệt Nam Tống. Bốn cánh quân Mông Cổ sẽ tấn công <a href="__missing__">Nam Tống</a> từ những địa điểm khác nhau từ phía Nam và phía Tây. Nắm quyền chỉ huy 3 cánh quân kia là <a href="__missing__">Mông Kha</a>, <a href="__missing__">Hốt Tất Liệt</a> và <a href="__missing__">Tháp Sát Nhi</a>. Cánh quân còn lại cánh quân thứ tư, sau khi chiếm <a href="__missing__">Đại Việt</a> sẽ đánh thốc vào Nam Tống từ mạn cực Nam. Tổng chỉ huy của cánh quân thứ tư là <a href="__missing__">Ngột Lương Hợp Thai</a>. Nhà Trần (Đại Việt) được thành lập vào năm 1225, đến thời điểm nhà Nguyên xâm phạm, đã có nền hòa bình 180 năm kể từ khi nhà Tống xâm lược vào năm 1076.</p>
<h2>Lực lượng</h2>
<ul><li>Theo Tập sử biên niên của Rasìd ud-Dìn: Quân đội của Ngột Lương Hợp Thai gồm <a href="__missing__">kỵ binh</a> Mông Cổ và 20.000 quân sĩ người Di (thuộc nước <a href="__missing__">Đại Lý</a> vừa bị Mông Cổ chinh phục). Không có số liệu chính xác về số kỵ binh Mông Cổ, nhưng theo Rasìd ud-Dìn (Tập sử biên niên) cho biết rằng ban đầu Hốt Tất Liệt và Ngột Lương Hợp Thai đã đem 3 vạn quân xuống đánh Đại Lý (Vân Nam), sau đó Hốt Tất Liệt đi hướng khác, còn Ngột Lương Hợp Thai đánh tiếp sang Đại Việt, khi tiến lên châu Ngạc gặp Hốt Tất Liệt thì quân số còn lại không quá 5.000. Như vậy, trừ đi số tổn thất khi đánh Đại Lý và số kỵ binh đi theo Hốt Tất Liệt, thì số kỵ binh Mông Cổ khi tiến đánh Đại Việt sẽ vào khoảng 10.000 là hợp lý. Cộng thêm quân người Di thì tổng số quân của Mông Cổ có khoảng 30.000. Tiên phong là tướng <a href="__missing__">Aju</a> và <a href="__missing__">Cacakdu</a> (Triệu Triệt Đô hay Triệt Triệt Đô). Ngoài ra, đội quân này còn có phò mã của Mông Cổ là <a href="__missing__">Quaidu</a> (Hoài Đô). Đi tiên phong là <a href="__missing__">Đoàn Hưng Trí</a> vua <a href="__missing__">Đại Lý</a> đã đầu hàng.</li><li>Theo sách <i>Nghệ thuật đánh giặc giữ nước của dân tộc Việt Nam</i> thì quân Mông Cổ có khoảng 1 đến 2 vạn, cộng với 2 vạn quân <a href="__missing__">Đại Lý</a> được Mông Cổ trưng dụng, tổng số là khoảng 3 đến 4 vạn.[<i><a href="__missing__">cần dẫn nguồn</a></i>]</li><li>Quân Đại Việt, gồm quân cấm vệ và quân địa phương, có khoảng 10 vạn, trong đó có 2 vạn cấm quân (lực lượng chủ lực đóng ở gần kinh thành) và 8 vạn sương quân (quân đóng ở các địa phương). Quân Trần có đủ các binh chủng <a href="__missing__">bộ binh</a>, <a href="__missing__">kỵ binh</a>, <a href="__missing__">tượng binh</a> và <a href="__missing__">thủy binh</a> đã được thao luyện chu đáo. 2 vạn cấm quân có thể huy động toàn bộ, nhưng 8 vạn sương quân thì phải đóng quân rải khắp trên lãnh thổ cả nước, bao gồm việc ngăn ngừa nổi loạn, chống đạo tặc, canh gác biên giới và lăng tẩm... nên nhà Trần chỉ có thể tập trung được một bộ phận sương quân để tác chiến với Mông Cổ. Ước tính tổng binh lực của nhà Trần trong cuộc chiến này vào khoảng 6 vạn.</li></ul><a href="__missing__"></a>Hình ảnh một chiến binh thiện chiến Mông Cổ, với ngựa, giáp trụ, cung tên,...
<p>Đạo quân của Ngột Lương Hợp Thai không thật đông nếu nhìn về số lượng tuyệt đối, họ chỉ bằng 1/2 quân số nhà Trần. Tuy vậy, quân Mông Cổ, như đã được chứng minh trong quá trình tác chiến của mình, hầu như luôn thua sút về quân số so với đối phương của họ, ít nhất là theo tỷ lệ 1:2, tức là nhiều ra thì số quân của họ cũng chỉ bằng một nửa so với đối phương (Mông Cổ là nước ít dân, dù huy động hầu hết trai tráng thì họ cũng chỉ có khoảng 15 20 vạn quân). Tuy ít hơn về số lượng nhưng quân Mông Cổ có lợi thế hơn hẳn về kỵ binh. Theo Đại Việt sử ký toàn thư, quân Trần có vài nghìn kị binh, còn quân Mông Cổ có khoảng 1 vạn kị binh.</p>
<p>Ngoài ra, kỵ binh Mông Cổ cũng giỏi hơn về kỹ năng chiến đấu. Người Mông Cổ là dân tộc du mục sống bằng chăn nuôi và săn bắn, nên từ nhỏ đã phải liên tục tập cưỡi ngựa và bắn cung để sinh tồn, hình thức <i>"thao luyện kị binh cả đời"</i> này không thể có được trong một đất nước sống bằng nông nghiệp - ngư nghiệp như Đại Việt. Con trai Mông Cổ từ khi 3 tuổi đã bắt đầu học cưỡi ngựa, khi 4 - 5 tuổi thì nhận <a href="__missing__">cây cung</a> đầu tiên của mình. Suốt cuộc đời, người Mông Cổ dành phần lớn thời gian trên yên ngựa để săn bắn và chiến đấu. Trong các chiến dịch quân sự, người Mông Cổ còn có thể buộc mình vào yên ngựa để vừa ngủ vừa cưỡi, nhờ đó đạt được tốc độ hành quân cao. Các chiến binh Mông Cổ được ca ngợi là có sức chịu đựng phi thường, ai cũng sở hữu nhiều loại vũ khí và bắn thành thạo cung tên.</p>
<p><a href="__missing__">Kỵ binh</a> là binh chủng lợi hại bậc nhất thời trung cổ, có tính cơ động hơn hẳn bộ binh, cho phép quân Mông Cổ nhanh chóng tập trung lực lượng đánh vào chỗ mỏng yếu của đối phương, hoặc sẽ rút lui nhanh nếu thấy bất lợi. <a href="__missing__">Sóng biển (chiến thuật kỵ binh)</a> là cách tác chiến lợi hại của quân Mông Cổ, họ bao vây đội hình quân đối phương bằng cách bố trí kỵ binh theo tuyến dài, thực hiện chiến đấu <a href="__missing__">bao vây</a> linh hoạt. Khi quân thù mạnh hơn thì họ sẽ <a href="__missing__">phân tán lực lượng</a>, khi thời cơ thích hợp họ sẽ hợp lại và tiến hành bao vây đối phương. Chỉ với 100 <a href="__missing__">kỵ binh</a> có thể bao vây 1.000 bộ binh, và 1.000 kỵ binh có thể triển khai thành một tuyến dài hơn 30 dặm. Chiến thuật này là hình thức <a href="__missing__">tác chiến cơ động</a>: Quân Mông Cổ liên tục phi ngựa để giữ khoảng cách, không để đối phương tiếp cận, vũ khí sử dụng chủ yếu là <a href="__missing__">cung tên</a> để bắn quân địch từ xa. Khi quân đối phương chạy tới gần để <a href="__missing__">cận chiến</a>, quân Mông Cổ sẽ phi ngựa rút nhanh về phía sau, và chiến đấu theo <a href="__missing__">Chiến thuật Parthia</a> (vừa phi ngựa vừa bắn tên), nếu còn đường lui thì họ luôn tránh việc cận chiến. Chiến thuật này vừa khai thác tối đa lợi thế về tài năng cưỡi ngựa bắn cung của người Mông Cổ, vừa giảm tối đa nguy hiểm khi đánh cận chiến. Một kỵ binh Mông Cổ có thể dùng cung tên bắn hạ vài binh sĩ đối phương từ xa cả trăm mét, trong khi đối phương chỉ có gươm giáo thì cự ly tác chiến chỉ được vài mét, nên không thể đánh trả được.</p>
<p>Với lợi thế chiến thuật này, có những trận đánh quân Mông Cổ chỉ đông bằng 1/4 đối phương mà vẫn chiến thắng (như <a href="__missing__">Trận sông Kalka</a>, <a href="__missing__">trận Mohi</a>,...), hoặc như <a href="__missing__">Chiến tranh Mông-Kim</a>, Mông Cổ chỉ có khoảng 12 vạn quân mà đã đánh bại quân đội gần 1 triệu người của <a href="__missing__">nhà Kim</a>. Huy động 3 vạn quân (trong đó 1 vạn là kỵ binh Mông Cổ) là tương đương 1/7 binh lực của toàn nước Mông Cổ huy động đánh nước <a href="__missing__">Nam Tống</a> (trong khi Nam Tống đất rộng và đông dân gấp 20 lần Đại Việt). Dựa trên thực tế đó, các tướng Mông Cổ cho rằng với nước nhỏ như Đại Việt thì chỉ cần 3 vạn quân là quá đủ để chinh phạt rồi.</p>
<p>Một đặc điểm nữa của đạo quân này là trong thành phần lãnh đạo, nó quy tụ tới 50 chư vương của triều đình Mông Cổ và phò mã Mông Cổ tên là Quaidu. Đây là những sĩ quan có liên hệ huyết thống hoặc hôn nhân với gia đình của Thành Cát Tư Hãn, gia tộc đang thống trị Mông Cổ. Nhà sử học cổ trung đại người <a href="__missing__">Ba Tư</a> là <a href="__missing__">Rasid ud-Din</a> chép:</p>
<p>Tuy nhiên, quân Mông Cổ có nhược điểm lớn bắt nguồn từ chính ưu điểm của họ:</p>
<ul><li>Do gấp rút tấn công nên quân Mông Cổ chỉ có kị binh và bộ binh, không chuẩn bị thủy binh, nên khi gặp sông ngòi thì không tiến quân được.</li><li>Do chú trọng việc tác chiến cơ động, hành quân phải thật nhanh nên quân Mông Cổ không mang theo dân phu để vận tải lương thực, xây dựng doanh trại (do dân phu phải khuân vác nặng nên đi khá chậm, nếu đi cùng dân phu thì kỵ binh không hành quân nhanh được). Tất cả những gì cần thiết cho việc chiến đấu, sinh hoạt và ăn uống đều được quân Mông Cổ mang theo trên lưng ngựa. Với cách này, quân Mông Cổ chỉ có thể mang theo rất ít lương thực (chỉ đủ ăn vài ngày), khi đánh vào lãnh thổ đối phương thì họ sẽ cướp lương thực của dân bản địa để nuôi sống quân lính. Đây là chiến thuật mà Mông Cổ thường áp dụng trong các cuộc chiến trước đó và tỏ ra khá hiệu quả. Nhưng nhà Trần đã nhận ra điểm yếu của chiến thuật này và chuẩn bị sẵn kế hoạch "<a href="__missing__">vườn không nhà trống</a>" để đối phó. Triều đình nhà Trần đã sớm ra lệnh cho người dân cất giấu hết lương thực trong các kho, khiến quân Mông Cổ không cướp được lương thực và dần bị suy yếu.</li></ul>
<h2>Diễn biến</h2><a href="__missing__"></a>
<p>Đội quân của Ngột Lương Hợp Thai sau khi chiếm được Đại Lý, rồi đóng binh ở A Mễ (阿迷, nay là <a href="__missing__">Khai Viễn</a><a href="__missing__">châu Hồng Hà</a> tỉnh <a href="__missing__">Vân Nam</a>) phía Bắc Đại Việt, sai hai sứ giả đến dụ hàng Đại Việt. Nhà Trần đã nhốt hai viên sứ giả vào ngục và trói bằng dây tre. Theo Nguyên sử: Ngột Lương Hợp Thai không thấy tin tức hai viên sứ giả này, bèn sai tướng là Triệt Triệt Đô cùng đem 3000 quân, chia đường tiến binh tấn công Đại Việt. Đến tháng Mười âm năm <a href="__missing__">Đinh Tỵ</a> quân Nguyên Mông tiến tới áp sát biên giới (vùng <a href="__missing__">ải Lê Hoa</a>). Tháng Chín âm năm 1257, chủ <a href="__missing__">trại Quy Hóa</a> là Hà Khuất báo tin có sứ Nguyên sang. Vua Trần không nghe lời dụ hàng, xuống chiếu ra lệnh đem quân thủy bộ ra ngăn giữ biên giới (vùng ải Lê Hoa, <a href="__missing__">núi Mai Lĩnh</a>), theo sự tiết chế của <a href="__missing__">Trần Quốc Tuấn</a> và truyền cả nước sắm sửa vũ khí.</p>
<h3>Trận Bình Lệ Nguyên</h3>
<p>Ngột Lương Hợp Thai chia quân làm hai cánh, một cánh do mình chỉ huy và cánh quân còn lại do Triệt Triệt Đô chỉ huy, chia đường tiến xuống sông Thao ở vùng Kinh Bắc, Đại Việt. Viên tướng này dùng con trai là A Truật sang giúp và dòm ngó tình hình. Nhà Trần bày nhiều lớp phòng thủ, A Truật trở về báo, liền tiến quân đi gấp, sai Triệt Triệt Đô làm tiên phong, A Truật ở sau làm điện, đến tháng 12 năm 1257, hai đạo quân hợp lại với nhau. Đến tháng Chạp năm Đinh Tỵ (1257), quân đội Mông Cổ xâm lấn đồng Bình Lệ, vua Trần Thái Tông tự mình dẫn theo sáu đạo cấm quân (Thiên Thuộc, Thiên Chương, Thánh Dực, Chương Thánh, Thần Sách, Củng Thần), cộng thêm sương quân ở các địa phương gần kinh thành để chống lại.</p>
<p>Quân Mông Cổ giáp trận quân Đại Việt do đích thân <a href="__missing__">Trần Thái Tông</a> (Trần Cảnh) ngự giá thân chinh chỉ huy tại Bình Lệ Nguyên (nay là huyện <a href="__missing__">Bình Xuyên</a> tỉnh Vĩnh Phúc). Đó là ngày <a href="__missing__">17 tháng 1</a> năm <a href="__missing__">1258</a>.</p>
<p>Quân đội <a href="__missing__">nhà Trần</a> bày tượng binh, kỵ binh và bộ binh bên bờ <a href="__missing__">sông Hồng</a> đợi giặc, tượng binh dàn hàng ngang tại tiền quân che chắn cho lớp bộ binh, kỵ binh phía sau, <a href="__missing__">thủy quân</a> dọc sông Hồng để có thể khi thua sẽ rút quân an toàn. Quân Mông Cổ chia làm ba đội để sang sông, Triệt Triệt Đô dẫn 5.000 quân làm quân tiên phong, Ngột Lương Hợp Thai cầm đại quân đi giữa, phò mã Hoài Đô và A Truật giữ hậu quân. Đội chủ lực của Ngột Lương Hợp Thai lấy những hàng binh Đại Lý dàn ở các hàng phía trước để làm bia đỡ hứng chịu thương vong, kỵ binh Mông Cổ đi phía sau để hỗ trợ và tung đòn quyết định. Ngột Lương Hợp Thai dặn Quỳ Thủ Soạn và viên tiên phong là Triệt Triệt Đô:</p>
<p>Nhưng Triệt Triệt Đô vừa qua sông đã ập lại đánh ngay. Trần Thái Tông tự làm tướng, đốc chiến đi trước xông pha tên đạn, sai tượng binh tiến ra giao chiến. Con Hợp Thai là A Truật (18 tuổi) ra lệnh cho kỵ binh bắn tên vào mắt voi, khiến voi đau và hoảng sợ, quay lại dày xéo đội hình quân Trần. Quân Trần nao núng, Trần Thái Tông ngoảnh trông hai bên, chỉ có tướng Lê Tần cưỡi ngựa một mình ra vào trận, sắc mặt không thay đổi. Lúc ấy, có người khuyên vua Trần dừng lại để chỉ huy chiến đấu. Lê Trần cố sức can vua: <i>"Nay thì bệ hạ chỉ đánh một ván dốc túi thôi! Hãy nên tạm lánh chúng, sao lại có thể dễ dàng tin lời người ta thế!"</i>. Bấy giờ, vua Trần mới lui quân đóng ở sông Lô, Lê Tần giữ phía sau. Quân Mông Cổ bắn loạn xạ, Lê Tần lấy ván thuyền che cho vua Trần khỏi trúng tên giặc. Thế quân Mông rất mạnh, do không chiếm được thuyền của Đại Việt, vua Trần vẫn bảo tồn được lực lượng và lui về giữ sông Thiên Mạc.</p>
<p>Quân Trần thất lợi nhưng chủ động rút lui. <a href="__missing__">Trần Thái Tông</a> và tướng <a href="__missing__">Lê Tần</a> lui tới sách Cụ Bản, gặp tướng <a href="__missing__">Phạm Cự Chích</a> đem viện binh tới cứu. Quân Mông Cổ giết được Phạm Cự Chích, nhưng vua Trần đã chạy thoát ra bến Lãnh Mỹ, rồi xuôi thuyền về Phù Lỗ. Không bắt được bộ chỉ huy nhà Trần, Ngột Lương Hợp Thai nổi giận. Triệt Triệt Đô uống thuốc độc tự sát do không nghe lệnh, để vua Trần chạy thoát.</p>
<h3>Quân Trần rút lui</h3>
<p>Khi vua Thái Tông triệt binh về <a href="__missing__">sông Thiên Mạc</a>, Lê Tần đã thảo luận với ông về những chuyện cơ mật, không mấy người biết tới. Khi ấy, Thái Tông cũng ngự thuyền nhỏ tới thuyền của em là <a href="__missing__">Thái uý</a><a href="__missing__">Trần Nhật Hiệu</a> để hỏi ý Nhật Hiệu về kiến về kế sách giữ nước. Nhật Hiệu ngồi dựa vào mạn thuyền, không thể nào đứng lên được và đưa ngón tay xuống chấm nước rồi ghi hai chữ "nhập Tống" trên mạn thuyền (tức là nên chạy sang lánh ở đất <a href="__missing__">Nam Tống</a>). Thái Tông bèn hỏi về tình hình của quân Tinh Cương dưới quyền Nhật Hiệu, thì Nhật Hiệu đáp lại: <i>"Không gọi được chúng đến</i>". Thế rồi, nhà vua lại ngự thuyền đến chỗ <a href="__missing__">Thái sư</a><a href="__missing__">Trần Thủ Độ</a>. Khi nghe câu hỏi của nhà vua, Thủ Độ tâu:</p>
<p>Ngày hôm sau, ngày <a href="__missing__">18 tháng 1</a> năm <a href="__missing__">1258</a>, hai bên chạm trán một lần nữa tại Phù Lỗ, vua Trần đã chặt cầu Phù Lỗ từ trước.</p>
<p>Hai bên đối mặt nhau qua một con sông (<a href="__missing__">sông Cà Lồ</a>) mà bày trận, quân Mông Cổ vẫn là người qua sông phá trận. Quân Mông muốn qua sông nhưng không có thuyền bè, bèn men theo bờ sông bắn tên xuống nước, thấy chỗ nào tên bắn xuống mà không nổi lên tức là cạn, rồi dùng kị binh băng qua sông. Quân Trần vẫn tiếp tục gặp bất lợi, nhưng một lần nữa họ lại chủ động rút lui. Sau đó, quân Trần lại chủ động rút khỏi <a href="__missing__">Thăng Long</a>.</p>
<p>Quân Mông Cổ chiếm được kinh đô Đại Việt sau 2 trận đánh. Nguyên sử chép: <i>Ngột Lương Hợp Thai cũng phá quân bộ, lại cùng A Thuật hội đánh, đại phá chúng, rồi vào nước này. Nhật Quýnh (chỉ vua Trần) trốn chạy ra hải đảo. Bắt gặp sứ giả ngày trước ở trong ngục, bị dây tre trói lằn vào da thịt, lúc cởi trói ra, một sứ giả chết, do đó làm cỏ thành này.</i></p>
<h3>Quân Trần phản công</h3><a href="__missing__"></a>Sa đồ trận Quy Hóa năm 1257 nơi Hà Bổng chỉ huy tập kích quân Nguyên Mông
<p>Chiếm được kinh đô chỉ sau hai trận đánh, nhưng kho tàng trống rỗng là vấn đề lớn đối với đội quân Mông Cổ. Những cuộc cướp bóc để kiếm lương ở vùng ngoại vi và phụ cận không có nhiều kết quả, quân Mông Cổ lâm vào tình trạng thiếu thốn lương thực.</p>
<p>Nửa đêm ngày <a href="__missing__">28 tháng 1</a> năm <a href="__missing__">1258</a>, từ nơi trú quân (Thiên Mạc) trên <a href="__missing__">Hoàng Giang</a>, Trần Thái Tông cùng Thái tử Trần Hoảng ngự lâu thuyền ngược sông, bất ngờ đánh thẳng vào quân Mông Cổ. Quân Mông Cổ cho rằng lực lượng quân Trần đã kiệt quệ sau trận thua đầu nên rất chủ quan, do đó khi bị tập kích đã không kịp trở tay, bị thua to. Sau khi bị phá tan tại <a href="__missing__">Đông Bộ Đầu</a>, quân Mông Cổ không giữ nổi Thăng Long nữa. Chúng đồng loạt tháo chạy thẳng về <a href="__missing__">Vân Nam</a>.</p>
<p>Như khi mới tiến quân vào, quân Mông Cổ rút chạy theo dọc sông Thao, nhưng theo con đường bộ ở phía tả ngạn. Quân Mông rút lui quá nhanh, ngoài cả dự tính của nhà Trần khiến vua Trần chưa kịp bố trí lực lượng đón đánh. Tuy nhiên khi đến Quy Hóa (vùng <a href="__missing__">Lào Cai</a>, <a href="__missing__">Yên Bái</a>), quân Mông bị chủ trại là <a href="__missing__">Hà Bổng</a> một thổ quan <a href="__missing__">người Tày</a> - tập kích kịch liệt. Trong số quân của Hà Bổng có những người Thái chạy từ nước <a href="__missing__">Đại Lý</a> vừa bị Mông Cổ diệt sang theo Đại Việt, muốn trả thù người Mông Cổ nên đã đánh rất hăng khiến quân Mông Cổ khốn đốn; chỉ vì số quân của Hà Bổng ít người nên thiệt hại của quân Mông Cổ không lớn. Trên đường rút về, do sợ bị quân Trần truy đuổi đằng sau, quân Mông Cổ cố rút nhanh và không cướp phá dân chúng, do đó người Việt mỉa mai gọi là "giặc Bụt".</p>
<h3>Kết cục</h3>
<p>Theo <a href="__missing__">Nguyên sử</a> - Ngột Lương Hợp Thai truyện và Kinh thế đại điển tự lục chép rằng: sau khi bỏ Thăng Long, người Mông Cổ đã chạy về thành Áp Xích, trên đất của 37 bộ Quỷ Phương (Đại Lý), và điều này có nghĩa là Mông Cổ đã không đạt được mục tiêu là chiếm Đại Việt để làm bàn đạp đánh vào lưng Nam Tống. Ngột Lương Hợp Thai truyện cũng cho biết, Uriyangqatai đóng quân ở Áp Xích, sau khi có lệnh của Mông Kha thì mới đi theo đường trại Hoành Sơn để tiến vào châu Ngạc của Tống và hội quân với <a href="__missing__">Hốt Tất Liệt</a>. Nguyên sử lại viết: <i>quân ở lại 9 ngày, vì khí hậu nóng nực nên rút quân về. Lại sai hai sứ giả đi gọi Nhật Cảnh về (chỉ vua Trần). Nhật Cảnh thấy kinh đô bị phá hủy, rất giận, ép sứ giả quay về</i>. Thực tế, quân Mông Cổ đánh Đại Việt vào tháng 1, đúng vào lúc giữa <a href="__missing__">mùa đông</a> ở miền Bắc Việt Nam, do vậy không thể có chuyện "khí hậu nóng nực nên rút quân về" như Nguyên sử chép được.</p>
<p>Các khám phá địa chất gần đây cho thấy khoảng năm 1257 hoặc đầu 1258, <a href="__missing__">núi lửa Samalas</a> ở Indonesia xảy ra phun trào lớn, làm khí hậu thế giới bị biến động. Một số ý kiến cho rằng quân Mông ra lệnh rút quân là do thời tiết trở nên khắc nghiệt bởi ảnh hưởng từ vụ phun trào. Tuy nhiên, các ý kiến này là không hợp lý. Thứ nhất, đúng là vụ phun trào núi lửa Samalas làm khí hậu ấm lên trong mấy tháng do hiệu ứng của khí sunfat, nhưng mức gia tăng nhiệt độ chỉ ở mức mấy độ C, chỉ có thể làm mùa đông bớt lạnh chứ không thể biến mùa đông thành "mùa hè nóng nực" được. Thứ hai, ảnh hưởng của vụ phun trào cũng diễn ra tương tự ở lãnh thổ nước <a href="__missing__">Nam Tống</a> đang bị Mông Cổ chinh phạt vào cùng thời điểm, nhưng không hề thấy quân Mông Cổ rút khỏi Nam Tống vì lý do thời tiết.</p>
<p>Thiệt hại của quân Mông Cổ, tùy theo nguồn tài liệu mà chênh lệch từ già nửa cho tới khoảng 2/3:</p>
<ul><li>Theo <a href="__missing__">Rashid-al-Din</a>, đạo quân ba vạn kỵ binh Mông Cổ của Ngột Lương Hợp Thai kéo xuống Vân Nam, trước khi tiến lên châu Ngạc, còn lại không quá 5000 người, không rõ thiệt hại trong chiến tranh với Đại Việt là bao nhiêu.</li><li><i>Nguyên sử</i>, <i>Ngột Lương Hợp Thai truyện</i> và bài bia ký A Truật thì chép rằng: khi thâm nhập đất Tống, đoàn quân này còn lại 3.000 kị binh Mông Cổ và 1 vạn quân <a href="__missing__">Thoán Bặc</a>.</li></ul>
<h3>Sau cuộc chiến</h3>
<p>Vua Trần Thái Tông hồi kinh, trăm họ Đại Việt nghiệp yên như cũ. Định công phong tước, cho Lê Tần (hay Lê Phụ Trần) làm Ngự sử đại phu và đem công chúa Chiêu Thánh gả cho. Vua nói: <i>Trẫm không có khanh thì làm gì có được ngày nay. Khanh nên cố gắng để cùng hưởng phúc sau này.</i> Cùng năm đó (1258), vua Trần Thái Tông truyền ngôi cho thái tử Hoảng, tức Trần Thánh Tông.</p>
<p>Năm 1258, ngay khi vừa bị đuổi chạy về đến Vân Nam, Uriyangqatai (Ngột Lương Hợp Thai) đã sai ngay hai sứ sang dụ vua Thái Tông vào chầu. Căm phẫn vì thấy kinh đô Thăng Long bị tàn phá, Thái Tông với khí thế của người chiến thắng, đã sai trói hai sứ lại, đuổi về.</p>
<p>Vua Trần sai sứ giả sang thông hiếu với nhà Tống. Sai Lê Phụ Trần làm sứ, Bác Lãm làm phó sang nhà Nguyên, rốt cuộc định ba năm một kỳ cống làm lệ thường. Theo Nguyên sử: Tháng 2 ngày mậu ngọ năm thứ 8, Nhật Cảnh (vua Trần) truyền nước cho con trưởng là Quang Bính, đổi niên hiệu Thiệu Long. Mùa hạ, Quang Bính sai con rể (Lê Phụ Trần) cùng người nước này đem phương vật đến, Ngột Lương Hợp Thai hộ tống đến sở quan, sai riêng <a href="__missing__">Nột Lạt Đinh</a> đến dụ chúng, nói: <i>"Trước ta sai sứ giả đến giao hảo, các ngươi bắt giữ mà không cho quay về, ta do đó phát binh năm trước. Vì vua của nước ngươi đứng trốn ở đồng cỏ, lại lệnh cho hai sứ giả đến gọi về nước, ngươi lại ép sứ giả ta trở về. Nay sai riêng sứ giả đến dụ, nếu các ngươi thực lòng nội thuộc, thì vua nước ngươi phải tự mình đến, nếu vẫn không chừa, sớm đến báo cho ta"</i>. Quang Bính nói: <i>"Nước nhỏ thật lòng thờ Nhà vua, thì nước lớn lấy gì đối đãi nước nhỏ?"</i>. Nột Lạt Đích về báo. Bấy giờ Vương chư hầu là Bất Hoa giữ Vân Nam, Ngột Lương Cáp Thai nói với Vương, lại sai Nột Lạt Đinh đến dụ, sai sứ giả cùng đến. Quang Bính bèn thực lòng nạp thuộc, lại nói: <i>"Đợi ban ân đức, liền sai con em làm con tin"</i>. Vương lệnh cho Nột Lạt Đinh lên ngựa đưa tin vào tấu lên.</p>
<p>Theo sử gia <a href="__missing__">Lê Tắc</a>, người viết quyển sử <a href="__missing__">An Nam chí lược</a>, có chép về bức thư vua Nguyên gửi cho <a href="__missing__">vua Trần</a> năm 1275: "<i>Theo chế độ của tổ tông đã quy định, phàm các nước Nội phụ thì vua phải thân hành tới chầu, gửi con em làm con tin, biên nạp dân số, nộp thuế lệ, mộ dân trợ binh và vẫn đặt quan <a href="__missing__">Đạt lỗ hoa xích</a> để thống trị; sáu điều nói trên, năm trước đã có lời dụ cho khanh biết rồi, thế mà qui phụ đã hơn 15 năm, khanh chưa từng tới triều kiến một lần nào, và các điều quy định đến nay vẫn chưa thi hành, tuy rằng ba năm tới cống hiến một lần, nhưng các đồ cống hiến đều không dùng được</i>". Như vậy, mang tiếng là một nước phải triều cống, nhưng đó chỉ là trên danh nghĩa, còn thực tế Đại Việt là một nước tự chủ, không thi hành theo sáu điều quy định của Mông Cổ về nước Nội phụ của Mông Cổ.</p>
<h2>Nhận định</h2>
<p>Các tác giả của <a href="__missing__">Nguyên sử</a>, phần Hiến Tông bản kỷ chỉ chép vắn tắt:</p><i>"Mùa đông tháng 11, Ngột Lương Hợp Thai đánh vào Giao Chỉ, đi vào nước nó. Chúa An Nam là Trần Nhật Cảnh trốn vào hải đảo, [Mông Cổ] bèn rút quân về"</i>. (ghi chép của Nguyên sử để tránh kị huý đã không công nhận đây là thất bại mà chỉ nói tránh là "Mông Cổ rút quân về", không nhắc đến việc quân Mông Cổ bại trận ở <a href="__missing__">Đông Bộ Đầu</a> và bị tập kích khi rút về. Vua Trần cũng không hề "trốn vào hải đảo" như Nguyên sử viết mà đã trực tiếp chỉ huy <a href="__missing__">trận Đông Bộ Đầu</a> phản công đánh bại quân Mông Cổ)
<p>Trong <i><a href="__missing__">Đại Việt sử ký toàn thư</a></i>, Kỷ nhà Trần, phần Thái Tông hoàng đế, có bình luận:</p> "<i>...lúc đó, người Nguyên mới lấy <a href="__missing__">Vân Nam</a>, du binh xâm lược đến, không có ý lấy nước ta.</i>" Bình luận "quân Nguyên không có ý lấy nước ta" trong Đại Việt sử ký toàn thư ngày nay bị bác bỏ. Các sử gia trong đế quốc Mông Cổ như Rashid al-Din và <a href="__missing__">Lê Tắc</a> (tác giả <a href="__missing__">An Nam chí lược</a>) đều công nhận rằng Mông Kha muốn chiếm Đại Việt làm bàn đạp để đánh thọc vào châu Ung, châu Quế phía nam nước Tống. Chính <a href="__missing__">Nguyên sử</a> cũng ghi: <i>"Uriangqadai vào Giao Chỉ định kế lâu dài.</i>" Nếu chiến dịch này chỉ là để cướp bóc, không phải để chiếm lãnh thổ thì quân Mông không cần phải huy động tới 3 vạn quân, và Mông Kha cũng đã không cử tới 50 chư vương của triều đình Mông Cổ, có cả phò mã Mông Cổ tên là Quaidu tham gia chỉ huy đội quân này.
<p>Lời cẩn án của các sử quan thời Nguyễn chép trong Khâm định Việt sử thông giám cương mục:</p><i>Trận này thế giặc rất mạnh, thế mà Sử cũ chỉ chép rằng nhà vua tiến quân đánh được giặc, không chép rõ cái cớ sở dĩ đánh được như thế nào cả. Tham khảo sách Nguyên sử loại biên và sách Cương mục tục biên (Trung Quốc) đều chép rằng: Ngột Lương Hợp Thai đã bình được nước Đại Lý, kéo quân sang nước ta, ba lần sai sứ đến dụ nhà vua đầu hàng, đều không thấy sứ thần trở về, bấy giờ mới chia đường tiến quân, nhân thế thắng, kéo vào đô thành nước ta, khi vào, thấy ba người sứ sai sang trước còn bị giam ở trong ngục, người nào cũng bị những thanh tre bó chặt vào mình sát hẳn đến da, khi cởi trói ra, thì một người đã bị chết, họ liền giết hết cả dân trong thành. Đóng quân ở đây được 9 ngày, vì không chịu được nóng nực, phải rút về. Lại sai sứ giả đến chiêu an, vua Thái Tông giận họ tàn phá, nên lại sai trói hai sứ giả đưa trả lại.</i>
<p>Sử gia Trần Xuân Sinh cho rằng: <a href="__missing__">Ngột Lương Hợp Thai</a> là tướng giỏi, khi thấy không giữ nổi Thăng Long đã rút sớm về Vân Nam để bảo toàn lực lượng là thượng sách.</p>
<p>Việc quân Mông Cổ thất bại ở Đại Việt cũng đã giúp Nam Tống tránh được việc bị đánh kẹp từ phía Nam để có thể tập trung binh lực đối phó Mông Cổ ở phía Bắc. Quy mô đạo quân của Ngột Lương Hợp Thai có thể nói là không lớn, chỉ cỡ 3 vạn. Nhưng xét về hậu quả của thất bại đối với toàn thể chiến lược xâm lăng đất Tống theo bốn con đường cũng như sự thất bại quá chóng vánh, sử gia <a href="__missing__">Hà Văn Tấn</a> có nhận định rằng:</p> "<i>Có lẽ...trong đời chinh chiến của mình, chưa bao giờ Uriangqadai bị thua nhục nhã như lần này.</i>"
<p>Sử liệu Trung Quốc thời Nguyên, Minh không chấp nhận họ là nước lớn mà lại thất bại, nên đã quy kết nguyên nhân thất bại của quân Mông Cổ là do thời tiết nóng nực của Đại Việt. Trong Nguyên văn loại, quyển 41, Kinh thế đại điển tự lục (bản Thương vụ ấn thư quán 1958, trang 563) chép rằng: <i>"[Quân Mông Cổ] ở lại chín ngày, vì nóng nực, rút quân về"</i>. Còn <a href="__missing__">Nguyên sử</a> trong quyển 209, An Nam truyện cũng viết là <i>"Quân ở lại chín ngày, vì khí hậu uất nhiệt bèn rút quân về"</i>. Thực tế, quân Mông Cổ đánh Đại Việt vào tháng 1, đúng vào lúc giữa <a href="__missing__">mùa đông</a> ở miền Bắc Việt Nam, do vậy không thể có chuyện "khí hậu nóng nực nên rút quân về" như Nguyên sử và Kinh thế đại điển tự lục chép được.</p>
<p>Chiến thắng của quân dân Đại Việt trong cuộc kháng chiến chống Nguyên Mông lần thứ nhất đã ghi dấu công lao của vua Trần Thái Tông. Sau này vua <a href="__missing__">Trần Nhân Tông</a> về thăm Long Hưng, trông thấy vẻ uy nghi đường vệ của lăng Thái Tông, đã ghi lại dư âm của chiến thắng năm 1258 trong niên hiệu Nguyên Phong bằng mấy câu thơ trong bài "Xuân Nhật yết Chiêu Lăng":</p> Tì hổ thiên môn túc Y quan thất phẩm thông Bạch đầu quân sĩ tại Vãng vãng thuyết Nguyên Phong Dịch: Nghìn cửa quân tì hổ uy vũ Các quan thất phẩm áo đầy đủ. Quân sĩ người đầu bạc vẫn còn, Thường thường kể chuyện thời Nguyên Phong
<ul><li>Các tác giả phương Tây Peter D. Sharrock và Vũ Hồng Liên (người Anh gốc Việt) đã nhận xét về kết quả cuộc chiến năm 1258:</li></ul>
<h2>Xem thêm</h2>
<ul><li><a href="__missing__">Kháng chiến chống Nguyên Mông lần thứ 2</a></li><li><a href="__missing__">Kháng chiến chống Nguyên Mông lần thứ 3</a></li><li><a href="__missing__">Trần Thái Tông</a></li><li><a href="__missing__">Trần Thủ Độ</a></li><li><a href="__missing__">Lê Phụ Trần</a></li><li><a href="__missing__">Lê Tắc</a></li></ul>
<h2>Ghi chú</h2>
<ol><li><a href="__missing__">↑</a> Niên hiệu của vua Trần Thái Tông.</li><li><a href="__missing__">↑</a> Trích từ <a href="__missing__">Tổ chức và chiến thuật quân sự của quân đội Đế quốc Mông Cổ</a>, phần <i>Giáo dục và Đào tạo</i></li><li><a href="__missing__">↑</a> Trong lần xâm lấn Đại Việt lần thứ 2, trong quân của Thoát Hoan cũng có hai thân vương Mông Cổ là Tích Lệ Cơ và Đại vương Giảo Kì. Tuy vậy, khi này, Tích Lệ Cơ đang bị tội và bị phái đi phục vụ trong đạo quân xâm lược như một biện pháp trừng phạt.</li><li><a href="__missing__">↑</a> Số liệu của sách Nguyên sử</li><li><a href="__missing__">↑</a> Quy Hóa: Xưa thuộc bộ Tân Hưng, nhà Lý gọi là Đăng Châu; nhà Trần gọi là trại Quy Hóa; nhà Lê đổi làm phủ; bây giờ cũng theo như cũ, thuộc tỉnh Hưng Hóa, lời chú của các sử quan trong Khâm định Việt sử thông giám cương mục</li><li><a href="__missing__">↑</a> Quân Tinh Cương: Tức quân tuyển trong những người ở làng Tinh Cương do Nhật Hiệu thống lĩnh. Trích lời chú trong sách Khâm định Việt sử thông giám cương mục.</li><li><a href="__missing__">↑</a> Đoạn sông Hồng chảy qua <a href="__missing__">Lý Nhân</a>, Hà Nam.</li><li><a href="__missing__">↑</a> Nay là dốc Hàng Than, Hà Nội</li></ol>
<h2>Chú thích</h2>
<ol><li><a href="__missing__">↑</a> Nhà Trần khi đó có 100.000 quân trên cả nước, gồm 2 vạn cấm quân và 8 vạn sương quân. Tất cả cấm quân và khoảng 1 nửa sương quân được huy động</li><li><a href="__missing__">1</a><a href="__missing__">2</a><a href="__missing__">3</a><a href="__missing__">Đại Việt Sử ký Toàn thư</a>, Bản Kỷ, Kỷ Nhà Trần, mục Thái Tông Hoàng đế</li><li><a href="__missing__">1</a><a href="__missing__">2</a> Hội khoa học lịch sử Việt Nam, Viện sử học, <i>Nhà Trần và con người thời Trần</i>, trang 139</li><li><a href="__missing__">1</a><a href="__missing__">2</a> Nguyên sử, phần Liệt truyện, Ngoại di, An Nam</li><li><a href="__missing__">↑</a> Đại Việt sử ký toàn thư, Nhà xuất bản thời đại, 2013, tr 263</li><li><a href="__missing__">1</a><a href="__missing__">2</a><a href="__missing__">3</a> Hà Văn Tấn và Phạm thị Tâm, sách đã dẫn, tr 61</li><li><a href="__missing__">↑</a><a href="__missing__">Trần Quốc Vượng</a> và <a href="__missing__">Hà Văn Tấn</a>, Lịch sử chế độ phong kiến Việt Nam, tập 1, trang 382.</li><li><a href="__missing__">↑</a><a href="__missing__">Nguyên sử, quyển 21, Tốc Bất Đài (Ngột Lương Hợp Thai)</a>.</li><li><a href="__missing__">↑</a> Đại Việt sử ký toàn thư, Nhà xuất bản thời đại, 2013, tr283</li><li><a href="__missing__">1</a><a href="__missing__">2</a><a href="__missing__">3</a><a href="__missing__">4</a><a href="__missing__">5</a> Đại Việt sử ký toàn thư, Nhà xuất bản thời đại, 2013, tr283, 284</li><li><a href="__missing__">↑</a><a href="__missing__">Đại Việt sử ký toàn thư</a>, Bản Kỷ, Kỷ Nhà Trần, mục Thái Tông Hoàng đế chép trận đánh diễn ra ngày 12 tháng 12 năm <a href="__missing__">Đinh Tỵ</a>.</li><li><a href="__missing__">↑</a> Hà Văn Tấn và Phạm Thị Tâm, sách đã dẫn, tr 68</li><li><a href="__missing__">↑</a> Hà Văn Tấn và Phạm Thị Tâm, sách đã dẫn, tr 69</li><li><a href="__missing__">↑</a><a href="__missing__">"Chú thích của Đại Việt Sử Ký Toàn Thư"</a>. <a href="__missing__">Bản gốc</a> lưu trữ ngày 25 tháng 5 năm 2011. Truy cập ngày 31 tháng 3 năm 2012.</li><li><a href="__missing__">↑</a><a href="__missing__">Đại Việt sử ký toàn thư</a>, Bản Kỷ, Kỷ Nhà Trần, mục Thái Tông Hoàng đế chép trận đánh diễn ra ngày 24 tháng 12 năm <a href="__missing__">Đinh Tỵ</a>.</li><li><a href="__missing__">↑</a> Trần Xuân Sinh, sách đã dẫn, tr 82</li><li><a href="__missing__">↑</a> Trần Xuân Sinh, sách đã dẫn, tr 84</li><li><a href="__missing__">↑</a><a href="__missing__">Lavigne và đồng nghiệp 2013</a>, tr.&nbsp;16746.Lỗi sfn: không có mục tiêu: CITEREFLavigneDegeaiKomorowskiGuillet2013 (<a href="__missing__">trợ giúp</a>)</li><li><a href="__missing__">↑</a> Đại Việt sử ký toàn thư, Nhà xuất bản thời đại, 2013, tr 285</li><li><a href="__missing__">↑</a> An Nam chí lược, Viện đại học Huế, Ủy ban phiên dịch sử liệu, 1961, bản điện tử, tr 19</li><li><a href="__missing__">↑</a><a href="__missing__">Lê Mạnh Thát</a> (2004), <i>Toàn tập Trần Thái Tông</i>, Nhà xuất bản Tổng hợp TP Hồ Chí Minh, các trang 78-83.</li><li><a href="__missing__">↑</a> Khâm định việt sử thông giám cương mục, Nhà xuất bản Giáo dục - Hà Nội, 1998, quyển VI</li><li><a href="__missing__">↑</a> Trần Xuân Sinh, sách đã dẫn, tr 83</li><li><a href="__missing__">↑</a><a href="__missing__">http://vanhoanghean.com.vn/index.php?option=com_k2&amp;view=item&amp;id=4142:b%E1%BB%8B-coi-th%C6%B0%E1%BB%9Dng-hay-t%E1%BB%B1-coi-th%C6%B0%E1%BB%9Dng-</a>?</li><li><a href="__missing__">↑</a> Peter D. Sharrock (2014). <a href="__missing__"><i>Descending Dragon, Rising Tiger: A History of Vietnam</i></a> (bằng tiếng Anh). Reaktion Book. <a href="__missing__">ISBN</a>&nbsp;<a href="__missing__">1780233884</a>. {{<a href="__missing__">Chú thích sách</a>}}: Đã bỏ qua tham số không rõ |đồng tác giả= (<a href="__missing__">trợ giúp</a>)</li></ol>
<h2>Tham khảo</h2>
<ul><li><a href="__missing__">Đại Việt Sử ký Toàn thư</a>, Nhà xuất bản thời đại, 2013</li><li>An Nam chí lược, Lê Tắc</li><li>Việt sử tiêu án, <a href="__missing__">Ngô Thì Sĩ</a></li><li>Khâm định Việt sử thông giám cương mục, Nhà xuất bản giáo dục HN, 1998</li><li>Hà Văn Tân và Phạm Thị Tâm (1972), <i>Cuộc kháng chiến chống xâm lược Nguyên Mông thế kỷ XIII</i>, Nhà xuất bản Quân đội Nhân dân, bản in lại năm 2003, Chương III: "Cuộc kháng chiến lần thứ nhất", trang 66 88</li><li>Trần Xuân Sinh (2006), <i>Thuyết Trần</i>, Nhà xuất bản Hải Phòng</li><li>Hội khoa học <a href="__missing__">lịch sử Việt Nam</a>, Viện sử học, <i>Nhà Trần và con người thời Trần</i>, Trung tâm <a href="__missing__">UNESCO</a> thông tin tư liệu, lịch sử và <a href="__missing__">văn hóa Việt Nam</a>, <a href="__missing__">2004</a></li></ul><a href="__missing__">Cổng thông tin</a>:
<ul><li><a href="__missing__">Quân sự</a></li><li><a href="__missing__">Lịch sử</a></li><li><a href="__missing__">Việt Nam</a></li></ul>
File diff suppressed because one or more lines are too long
+127
View File
@@ -0,0 +1,127 @@
<blockquote><b>Đại Cồ Việt</b> (<a href="__missing__">chữ Hán</a>: 大瞿越, 968 1054) là <a href="__missing__">quốc hiệu</a> của <a href="__missing__">Việt Nam</a> dưới thời bảy vị vua trị vì thuộc ba triều đại: <a href="__missing__">nhà Đinh</a>, <a href="__missing__">nhà Tiền Lê</a> và đầu thời <a href="__missing__">nhà Lý</a> với kinh đô ban đầu đặt tại <a href="__missing__">Hoa Lư</a> và từ tháng 7 âm lịch năm 1010 đặt tại <a href="__missing__">Thăng Long</a>.</blockquote>
<p>Nhà nước Đại Cồ Việt tồn tại 86 năm kể từ khi <a href="__missing__">Đinh Bộ Lĩnh</a> thống nhất vùng châu thổ phía Bắc, lên ngôi hoàng đế năm <a href="__missing__">968</a> cho đến tháng 10 âm lịch năm 1054 đời vua <a href="__missing__">Lý Thánh Tông</a>, khi ông đổi quốc hiệu thành <a href="__missing__">Đại Việt</a>. Thời kỳ Đại Cồ Việt đánh dấu lần đầu tiên sau thời kỳ Bắc thuộc, người Việt có được một quốc gia độc lập, một nhà nước <a href="__missing__">phong kiến tập quyền</a> riêng và quân đội riêng.
</p>
<h2>Ý nghĩa tên gọi</h2>
<p>Quốc hiệu Đại Cồ Việt do vua <a href="__missing__">Đinh Tiên Hoàng</a> đặt năm 968. Đại Cồ Việt là quốc hiệu được dùng trong 8 đời vua của 3 triều Đinh, Tiền Lê, Lý, với quãng thời gian dài 86 năm (968 - 1054). Đến năm Giáp Ngọ, niên hiệu Long Thụy Thái Bình thứ 1 (1054), vua Lý Thánh Tông mới đặt lại quốc hiệu là <a href="__missing__">Đại Việt</a>. Điều này có nghĩa là khi dời đô từ <a href="__missing__">Hoa Lư</a> ra <a href="__missing__">Thăng Long</a>, nước vẫn mang quốc hiệu là Đại Cồ Việt.
</p>
<p>Ý nghĩa quốc hiệu <b>Đại Cồ Việt</b>:
</p>
<p>Hiện có nhiều thuyết khác nhau về ý nghĩa của chữ "Cồ".
</p>
<p>Có cách lý giải rằng chữ "Cồ" hay "Cù" (瞿) là dạng đơn tiết hóa từ “Cồ Đàm” (phiên âm từ Gautama - họ của Phật Thích Ca), giống như “Thích” từ “Thích Ca Mâu Ni”, như “Phật” từ “Phật Đà”. Trần Trọng Dương (2009) kết luận rằng: ba chữ “Đại Cồ Việt” là một tên thuần túy Hán văn như bao quốc hiệu khác. ĐẠI CỒ VIỆT nghĩa là NƯỚC VIỆT - NƯỚC PHẬT GIÁO (của đức ĐẠI CỒ ĐÀM). Ý kiến này cũng giống với ý kiến của Nguyễn Khắc Kham, J. de Francis, và học giả An Chi.
</p>
<p>Thuyết khác là "Đại" (大) theo nghĩa chữ Hán là lớn, "Cồ" (瞿) là âm Hán-Việt cổ của từ <i>Cự</i> hay <i>Cừ</i> (巨) cũng là lớn. Đinh Tiên Hoàng muốn ghép hai chữ để khẳng định nước Việt là nước lớn.
</p>
<p>Thuyết khác nữa là <i><a href="__missing__">Cồ</a></i> (𡚝) được viết theo <a href="__missing__">chữ Nôm</a><i>Đại</i> ở trên và <i></i> (瞿) ở dưới.
</p>
<p>Hai câu đối (vẫn còn trong đền vua <a href="__missing__">Đinh Tiên Hoàng</a><a href="__missing__">Hoa Lư</a>):
</p>
<i>Cồ Việt quốc đương Tống Khai Bảo</i><i>Hoa Lư đô thị Hán Trường An</i>.
<p>Nghĩa là:
</p>
<i>Nước Cồ Việt ngang hàng với nhà Tống đời Khai Bảo;</i><i>Kinh đô <a href="__missing__">Hoa Lư</a> như <a href="__missing__">Tràng An</a> của <a href="__missing__">nhà Hán</a>.</i><p>Lê Văn Siêu trong <i>Việt Nam văn minh sử cương</i> giải thích:
</p>
"Đại Cồ Việt có nghĩa là nước Việt rộng lớn trông suốt cả bốn cõi hay tám cõi theo lối hiểu ngày xưa, ấy là cái cao vọng của người không những muốn thống trị mà còn muốn bành trướng thế lực ra tám cõi nữa"
<h2>Vai trò</h2>
<p>Các nhà sử học trong các bộ quốc sử <i>Đại Việt sử ký toàn thư</i><i>Khâm định Việt sử thông giám cương mục</i> đều lấy mốc ra đời của nước Đại Cồ Việt trở về trước là “Ngoại kỷ”, “Tiền biên”; trở về sau là “Bản kỷ”, “Chính biên”.
</p>
<p>Trong <a href="__missing__">ngàn năm Bắc thuộc</a> từng trỗi dậy những chính quyền nhưng <a href="__missing__">thời gian</a> tồn tại chưa được bao lâu đã bị dẹp yên, sự nghiệp chưa ổn định lâu dài nên chưa thể cấu thành triều đại. Từ khi <a href="__missing__">họ Khúc</a> giành lấy quyền tự chủ cho đến hết <a href="__missing__">loạn 12 sứ quân</a>, danh nghĩa Việt Nam vẫn chỉ là một phiên trấn của <a href="__missing__">Trung Quốc</a> với cái tên <a href="__missing__">Tĩnh Hải quân</a>, các <a href="__missing__">nhà lãnh đạo</a> Việt Nam thời tự chủ chỉ ở mức <a href="__missing__">Tiết độ sứ</a> cả trong nước và ngoại giao, đến lúc <a href="__missing__">Ngô Quyền</a> đánh đuổi quân <a href="__missing__">Nam Hán</a> mới tự xưng <a href="__missing__">Quốc vương</a>. Bắt đầu từ đấy, vua Việt Nam mới chính thức được xác định, tuy nhiên, <a href="__missing__">nhà Ngô</a> vẫn chưa đặt <a href="__missing__">quốc hiệu</a>. Bấy giờ bên Trung Quốc cũng đang loạn to, chính quyền trung ương còn mải lo đánh dẹp nên chưa thể nhòm ngó xuống mạn cực nam, chỉ có nước <a href="__missing__">Nam Hán</a> kế cận thỉnh thoảng xung đột mà thôi. Đến thời <a href="__missing__">nhà Đinh</a>, đối với thần dân trong nước, các vua <a href="__missing__">người Việt</a> đã xưng <a href="__missing__">hoàng đế</a> và đặt quốc hiệu là Đại Cồ Việt, gặp lúc <a href="__missing__">nhà Tống</a> cũng mới chấm dứt cục diện <a href="__missing__">Ngũ đại Thập quốc</a> nên sai sứ sang sắc phong vua Đinh làm <a href="__missing__">Giao Chỉ quận vương</a>, từ đó nền quân chủ Việt Nam mới được xác lập.
</p>
<p>Việc thành lập nhà nước Đại Cồ Việt là sự kiện hết sức trọng đại trong lịch sử dựng nước và giữ nước của dân tộc <a href="__missing__">Việt Nam</a>. Chỉ tồn tại trong vòng 86 năm (968-1054) với hai triều đại là <a href="__missing__">nhà Đinh</a>, <a href="__missing__">nhà Tiền Lê</a> và hai triều vua đầu thời Lý là Lý Thái Tổ và <a href="__missing__">Lý Thái Tông</a> nhưng Nhà nước Đại Cồ Việt giữ một vai trò hết sức quan trọng:
</p>
<ul><li>Nhà nước Đại Cồ Việt là nhà nước quân chủ trung ương tập quyền, thừa kế và phát triển lên một bước so với nhà nước quân chủ của nhà Ngô trước đó chưa có quốc hiệu. Nhà nước Đại Cồ Việt là một quốc gia thống nhất, độc lập, có tổ chức quân đội riêng và làm chủ một giang sơn riêng. Đặc biệt đây là nhà nước quân chủ đầu tiên đúc tiền đồng <a href="__missing__">Thái Bình hưng bảo</a> trong lịch sử tiền tệ Việt Nam, là nhà nước quan tâm đến việc phát triển kinh tế và văn hóa...</li>
<li>Nhà nước Đại Cồ Việt cũng là nhà nước quân chủ đầu tiên đặt quan hệ bang giao với <a href="__missing__">Trung Quốc</a>, trong lịch sử bang giao của Việt Nam. Năm 970, vua <a href="__missing__">Đinh Tiên Hoàng</a> sai sứ thần sang <a href="__missing__">nhà Tống</a> để kết hiếu giao hảo. Ông cũng là người đầu tiên trong <a href="__missing__">lịch sử Việt Nam</a> thi hành những biện pháp và nghi thức ngoại giao vừa mềm mỏng, vừa cứng rắn đối với đế chế Trung Hoa. Từ đó, để lại một bài học kinh nghiệm ngoại giao với đế chế khổng lồ phương Bắc là “<i>ở trong xưng Đế, bên ngoài xưng Vương</i>” cho các vương triều quân chủ Việt Nam sau này.</li>
<li>Nhà nước Đại Cồ Việt cũng ghi dấu ấn với việc thực thi các chính sách đúng đắn đối với dân tộc thiểu số, tạo điều kiện để các dân tộc chung sống hòa bình, cùng nhau đoàn kết chống lại kẻ thù chung; mở rộng lãnh thổ về phương Nam, tiến hành nhiều cuộc khai phá, di dân để các triều đại sau này tiếp tục hoàn thành trọn vẹn quá trình ấy.</li>
</ul>
<p>Tại hội thảo quốc gia "Vai trò của Nhà nước Đại Cồ Việt trong tiến trình lịch sử dân tộc Việt Nam" diễn ra ngày 12/4/2018 tại <a href="__missing__">Ninh Bình</a>, GS.TSKH Vũ Minh Giang cho rằng:
</p>
<i>Hơn 1.000 năm dưới ách cai trị hà khắc với chính sách đồng hóa ráo riết của phong kiến phương Bắc là một thử thách hiểm nghèo của nhân dân Âu Lạc. Sau chừng ấy thời gian mà người Việt vẫn giữ được bản sắc văn hóa riêng và giành lại độc lập là hiện tượng hy hữu tới mức có thể coi là duy nhất trong lịch sử thế giới. Nhà nước Đại Cồ Việt ra đời thực sự là một dấu mốc lớn trong tiến trình lịch sử dân tộc. Với việc đặt Quốc hiệu, niên hiệu, xây dựng bộ máy hành chính thống nhất thông suốt, xác định cương thổ, phát hành tiền tệ… Đại Cồ Việt là quốc gia độc lập với đầy đủ tiêu chí sánh ngang với các quốc gia khác. Sự nghiệp “tái lập quốc” của dân tộc ta đến đây mới chính thức hoàn thành. Đây là sự kiện có ý nghĩa hết sức to lớn</i>” -
<h2>Khảo cổ học</h2>
<p>Tuy nhiên một số phát hiện khảo cổ học gần đây cho thấy quốc hiệu thời kỳ này có lẽ là Đại Việt và tên gọi Đại Cồ Việt hiện đang gây tranh cãi.
</p>
<p>Kết quả khảo cổ học ở 2 <a href="__missing__">kinh đô Hoa Lư</a><a href="__missing__">Thăng Long</a> cho thấy các viên gạch có niên đại từ <a href="__missing__">thời Đinh</a> đến đầu thời Lý được sử dụng lại khắc chữ "Đại Việt Quốc Quân Thành Chuyên" (Gạch xây thành nước Đại Việt). Sự xuất hiện những viên gạch này ở thời điểm trước khi Lý Thánh Tông đổi quốc hiệu thành Đại Việt như ghi chép trong chính sử khiến có những luồng ý kiến cho rằng quốc hiệu từ <a href="__missing__">thời Đinh</a> đã là Đại Việt.
</p>
<p>Về gạch xây thành nhà Đinh, Giáo sư Đỗ Văn Ninh đã nhận định qua bài viết <i>"Tìm hiểu vài loại gạch cổ khai quật ở Ba Đình"</i> như sau:
</p>
<i>"Trong Hội thảo khoa học về đề tài "Từ <a href="__missing__">Hoa Lư</a> tới Thăng Long", tôi đã có dịp trình bày một ý kiến: "Chỉ có nước Đại Việt, không có nước Đại Cồ Việt, ý kiến đó dựa vào sự tồn tại khách quan của những viên gạch xây kinh đô có in quốc hiệu "Đại Việt". Không một người thợ làm gạch nào ở <a href="__missing__">Hoa Lư</a> cả gan dám đổi quốc hiệu thành "Đại Việt" nếu thời Đinh - Lê có quốc hiệu là "Đại Cồ Việt."</i><h2>Lịch sử thời kỳ Đại Cồ Việt</h2>
<h3>Quân sự</h3>
<p>Đây là thời kỳ khởi đầu để mở ra một kỷ nguyên độc lập lâu dài xuyên suốt các triều đại Đinh, Lê, Lý và Trần, Hậu Lê sau này. Trong 86 năm quốc hiệu thì 42 năm kinh đô Đại Cồ Việt là Hoa Lư, còn lại kinh đô là Thăng Long tồn tại cả khi Lý Thánh Tông đổi quốc hiệu sang <a href="__missing__">Đại Việt</a>.
</p>
<p>Thời gian này các vương triều Trung Hoa mang quân sang xâm lược, nhưng bị chống trả quyết liệt. Tiêu biểu hơn cả là chiến thắng vang dội của <a href="__missing__">Lê Hoàn</a> đánh thắng quân <a href="__missing__">nhà Tống</a> xâm lược (981), giết chết tướng Hầu Nhân Bảo.
</p>
<p>Năm sau (982), Lê Đại Hành mang quân đánh Chiêm Thành vì Chiêm Thành đã bắt giữ sứ giả của Đại Cồ Việt. Quân nhà Tiền Lê đại phá được quân Chiêm Thành, giết chết vua Chiêm là Bà Mỹ Thuế, đánh thẳng vào kinh đô Chiêm Thành, rồi mới rút về.
</p>
<p>Sang thời nhà Lý, <a href="__missing__">Lý Thái Tông</a> cũng khởi binh đánh Chiêm Thành năm 1044 vì vua Chiêm lấn cướp ven biển và không chịu thông sứ. Nhà Lý bắt được hơn 5.000 người và 30 con voi. Tướng Chiêm thành là Quách Gia Di chém quốc vương là Sạ Đẩu đem đầu sang xin hàng. Lý Thái Tông mang tù binh người Chiêm về nước ban cho ruộng đất lập thành phường ấp để làm ăn.
</p>
<p>Lịch sử Việt Nam, từ khi độc lập vào <a href="__missing__">thế kỷ 10</a> mang dấu ấn của sự phát triển nhà nước <a href="__missing__">Nho giáo</a> theo mô hình kiểu Trung Hoa.
</p>
<h3>Kinh tế</h3>
<p>Nông nghiệp đóng vai trò chủ yếu trong sinh hoạt kinh tế. Nông dân được <a href="__missing__">làng</a> xã chia ruộng để cày cấy, nộp thuế và đi lính cho nhà vua. Các vua rất chú ý khuyến khích nông nghiệp. Lê Hoàn là vua Việt Nam đầu tiên cử hành lễ cày tịch điền vào mùa xuân hàng năm. Từ đó, các vua thời sau đều giữ lệ ấy.
</p>
<p>Song song với nông nghiệp, vấn đề thủy lợi cũng được các vua chú ý kênh ngòi được đào vét nhiều nơi vừa để tưới ruộng vừa để tiện lợi giao thông bằng thuyền bè. Hệ thống giao thông đường bộ được mở mang. Những đường giao thông chính đều có đặt các trạm xá.
</p>
<p>Các nghề thủ công như nghề <a href="__missing__">gốm</a>, nghề <a href="__missing__">dệt</a>, khai mỏ, luyện <a href="__missing__">sắt</a>, đúc <a href="__missing__">đồng</a>... đều được phát triển. Nhờ ngành thủ công nghệ phát triển cao nên <a href="__missing__">Lê Đại Hành</a> xây được một cung điện làm nơi coi chầu, cột nhà được thếp vàng, ngói bằng bạc. Các hoạt động sản xuất, thương mại hầu như chưa phát triển mặc dù vào thời nhà Lý đã có buôn bán với các vương quốc trong vùng tại <a href="__missing__">cảng Vân Đồn</a> (<a href="__missing__">Quảng Ninh</a>).
</p>
<h3>Văn hoá</h3>
<p>Sau thời đại của văn hóa Đông Sơn, văn minh sông Hồng, lịch sử văn hóa văn minh Việt Nam bước vào thời đại lớn thứ hai của nó là thời đại Đại Cồ Việt - Đại Việt - Việt Nam, với ba thời kỳ văn hóa dài ngắn khác nhau: văn hóa <a href="__missing__">Hoa Lư</a>, văn hóa <a href="__missing__">Thăng Long</a> và văn hóa Phú Xuân.
</p>
<p>Thế kỷ 10, khi đất nước Đại Cồ Việt bước vào kỷ nguyên độc lập tự chủ lâu dài, cũng là lúc nảy sinh những mầm mống của một nền văn học dân tộc dưới hình thức chữ Hán và chịu ảnh hưởng của tư tưởng Phật giáo. Các danh nhân như <a href="__missing__">Khuông Việt</a>, <a href="__missing__">Pháp Thuận</a><a href="__missing__">Vạn Hạnh</a> là những người được triều đình trọng dụng và có tầm ảnh hưởng lớn đến văn hóa dân tộc. <a href="__missing__">Đinh Tiên Hoàng</a> là người đầu tiên lập chức <a href="__missing__">tăng thống</a> đưa phật giáo trở thành quốc đạo. Từ năm <a href="__missing__">Canh Ngọ</a><a href="__missing__">970</a>, <a href="__missing__">Đinh Tiên Hoàng</a> truyền cho đúc <a href="__missing__">tiền đồng</a>, là tiền tệ xưa nhất ở <a href="__missing__">Việt Nam</a>, gọi là <a href="__missing__">tiền đồng Thái Bình</a>, đặt nền móng cho nền tài chính - tiền tệ của nhà nước phong kiến Việt Nam. Từ năm 976, thuyền buôn của các nước ngoài đến dâng sản vật của nước họ, kết mối giao thương với Đại Cồ Việt.
</p>
<p>Trong "Lịch triều hiến chương loại chí" <a href="__missing__">Phan Huy Chú</a> nhận xét:
</p>
"<i>Xét nước ta từ thời Hùng Vương mới bắt đầu thông hiếu với <a href="__missing__">Trung Quốc</a> nhưng danh hiệu còn nhỏ không được dự vào hàng chư hầu triều hội... đến khi Đinh Tiên Hoàng bình định các sứ quân, khôi phục mở mang bờ cõi, bấy giờ điển lễ, sách phong của <a href="__missing__">Trung Quốc</a> mới cho đứng riêng là một nước"</i><p>Trong <a href="__missing__">lịch sử Việt Nam</a>, <a href="__missing__">Lê Hoàn</a> không chỉ là một vị <a href="__missing__">hoàng đế</a> có những đóng góp lớn trong chống Tống phương Bắc, quân Chiêm phương Nam, giữ gìn và củng cố nền độc lập dân tộc mà còn có nhiều công lao trong sự nghiệp ngoại giao, xây dựng và kiến tạo đất nước Đại Cồ Việt. <a href="__missing__">Lê Hoàn</a> cũng là người tạo tiền đề, điều kiện để thời gian sau đó <a href="__missing__">Lý Công Uẩn</a> có đủ khả năng dời đô từ <a href="__missing__">Hoa Lư</a> về Thăng Long năm 1010, mở ra một kỷ nguyên phát triển lâu dài của văn hóa Thăng Long - <a href="__missing__">Hà Nội</a>. <a href="__missing__">Lê Đại Hành</a> khi làm vua cho xây dựng nhiều công trình, đẩy mạnh sản xuất <a href="__missing__">nông nghiệp</a><a href="__missing__">thủ công nghiệp</a> để chấn hưng đất nước. Ông là vị vua mở đầu cho lễ tịch điền nhằm khuyến khích sản xuất nông nghiệp dưới chế độ phong kiến <a href="__missing__">Việt Nam</a>. Mở đầu cho một lễ nghi trọng đại mà các vương triều sau tiếp tục noi theo để khuyến khích phát triển sản xuất nông nghiệp. Lê Đại Hành cũng là vị vua đầu tiên tổ chức đào sông. Công trình đào <a href="__missing__">sông Nhà Lê</a> do <a href="__missing__">Lê Hoàn</a> khởi dựng là con đường giao thông thủy nội địa đầu tiên của <a href="__missing__">Việt Nam</a>. Sự nghiệp mở đầu vĩ đại đó đã trở thành phương châm hành động của các thời Lý, Trần, Lê, Nguyễn sau này.
</p>
<p><a href="__missing__">Lê Hoàn</a> là người mở đầu và xác lập những nguyên tắc cơ bản của nền ngoại giao Đại Cồ Việt. <a href="__missing__">Nhà Tống</a> là triều đại phong kiến hùng mạnh nhất <a href="__missing__">châu Á</a> đương thời mang nặng tư tưởng bành trướng đã phải từng bước thừa nhận sức mạnh, thế lực của quốc gia độc lập Đại Cồ Việt, đã phong cho <a href="__missing__">Lê Hoàn</a> các tước vị cao như Giao Chỉ quận vương, Nam Bình vương, sứ thần Tống còn làm thơ tôn Lê Hoàn tài ba không khác gì vua Tống. <a href="__missing__">Phan Huy Chú</a> đánh giá: "<i><a href="__missing__">Nhà Tiền Lê</a> tiếp đãi sứ nhà Tống, tình ý và văn thư rất là chu đáo. Khúc hát hay cũng đủ khoe có nhân tài mà quốc thể được thêm tôn trọng làm cho người Bắc phải khuất phục</i>". Đại Việt sử ký toàn thư ghi nhà vua còn bố trí sư <a href="__missing__">Pháp Thuận</a> giả làm người chở đò ra đón sứ giả Lý Giác. Câu chuyện hai người đã mượn bài thư Vịnh ngỗng của <a href="__missing__">Lạc Tân Vương</a> đời Đường để nối vần đối đáp với nhau nhân có hai con ngỗng bơi trên mặt sông, đã khiến Lý Giác rất thích thú và bị chinh phục đã trở thành giai thoại thú vị trong bang giao và văn học. Sau đó, về sứ quán Lý Giác đã làm một bài thư gửi tặng ngỏ ý "tôn Lê Hoàn không khác gì vua Tống" như lời <a href="__missing__">Khuông Việt</a> đại sư nói.
</p>
<p>PGS. Bùi Duy Tân phát hiện bài thơ <a href="__missing__">Nam quốc sơn hà</a>, một kiệt tác văn chương, cũng đồng thời là bản tuyên ngôn độc lập đầu tiên của dân tộc Việt Nam xuất hiện đầu tiên trong cuộc kháng chiến chống Tống lần thứ nhất của Lê Hoàn và cũng được <a href="__missing__">Lý Thường Kiệt</a> vận dụng ở lần kháng chiến chống Tống thứ hai. PGS.TS Trần Bá Chí cũng khẳng định: <a href="__missing__">Nam quốc sơn hà</a> là bản tuyên ngôn độc lập, chỉ có thể ra đời sau hàng ngàn năm bắc thuộc, nhưng không phải vào thời <a href="__missing__">Ngô Quyền</a> còn loạn lạc, chưa tức vị, trước khi chống Nam Hán, mà là ở thời vua Lê Đại Hành chống Tống khi thể chế, ngôi vị đã vững vàng, an định. Kiệt tác thứ hai, ở triều đại hoàng đế Lê Hoàn là một bài ngũ ngôn tuyệt cú của nhà sư <a href="__missing__">Pháp Thuận</a>. Đây là bài thơ có tên tác giả xuất hiện sớm nhất, nên được đặt vào vị trí khai sáng cho văn học cổ dân tộc. Cũng như Nam quốc sơn hà, Quốc tộ là bài thơ giàu sắc thái chính luận, một bài thơ viết về những vấn đề chính trị xã hội hiện hành của đất nước. Để trả lời nhà <a href="__missing__">vua</a> "hỏi về vận nước ngắn dài", nhà thơ đã lấy ngôn từ giản dị mà thâm thúy, bày tỏ chính kiến của mình: "<i>Vận mệnh nước nhà dài lâu, bền vững khi nhà <a href="__missing__">vua</a> dựng mở được nền thái bình bằng phương sách</i> ". Nếu Nam quốc sơn hà có giá trị như một bản tuyên ngôn độc lập, thì các nhà nghiên cứu khẳng định Quốc tộ có giá trị như một bản tuyên ngôn hòa bình. Hai bài thơ là hai kiệt tác văn chương bổ sung cho nhau, hoàn thiện Tuyên ngôn độc lập, Tuyên ngôn hoà bình đầu tiên của dân tộc, chính là cột mốc khai sáng văn học <a href="__missing__">Việt Nam</a>.
</p>
<p>Là kinh đô đầu tiên của nhà nước phong kiến tập quyền Việt Nam, <a href="__missing__">Hoa Lư</a> còn là đất tổ sản sinh nhiều giá trị văn hóa thuần Việt. Kinh đô này là đất tổ của nghệ thuật sân khấu <a href="__missing__">chèo</a> mà người sáng lập là bà <a href="__missing__">Phạm Thị Trân</a>, một vũ ca tài ba trong hoàng cung <a href="__missing__">nhà Đinh</a>. Đây là loại hình sân khâu tiêu biểu nhất của Việt Nam. Các truyền thuyết lịch sử hát <a href="__missing__">Tuồng</a> cũng ghi rằng loại hình ngày hình thành vào thời <a href="__missing__">Tiền Lê</a> năm 1005, khi một kép hát người Tàu tên là Liêm Thu Tâm đến <a href="__missing__">Hoa Lư</a> và trình bày lối hát xướng thịnh hành bên <a href="__missing__">nhà Tống</a> và được vua <a href="__missing__">Lê Long Đĩnh</a> thâu dụng, bổ là phường trưởng để dạy cung nữ ca hát trong cung.
</p>
<p>Sang thời Lý, nước Đại Cồ Việt tiếp tục phát triển hưng thịnh dưới thời vua <a href="__missing__">Lý Thái Tổ</a><a href="__missing__">Lý Thái Tông</a>. Năm 1054, vua <a href="__missing__">Lý Thánh Tông</a> lên ngôi, đổi tên nước thành <a href="__missing__">Đại Việt</a>.
</p>
<h3>Hành chính</h3>
<p>Thời <a href="__missing__">Nhà Đinh</a>, sử chép chia nước thành 10 đạo. Nhưng danh sách và diên cách mười đạo đó như thế nào, biên niên sử và hầu hết các thư tịch cổ không thấy nhắc đến. <a href="__missing__">Đào Duy Anh</a> nhận xét: Sử chép rằng <a href="__missing__">Đinh Tiên Hoàng</a> chia nước làm mười đạo hiện nay không rõ danh hiệu và vị trí các đạo là thế nào. Sách Đại Nam nhất thống chí và một số sách địa chí đời Nguyễn như Dư địa chí trong Lịch triều hiến chương loại chí của Phan Huy Chú, Phương Đình địa dư chí của Nguyễn Văn Siêu..., rải rác có nhắc đến đơn vị đạo đời Đinh, <a href="__missing__">Tiền Lê</a>. Cụ thể:
</p>
<ul><li>tỉnh <a href="__missing__">Hà Nội</a>: Đại Nam nhất thống chí chép <a href="__missing__">thời Đinh</a> gọi là đạo.</li>
<li>Tỉnh <a href="__missing__">Lạng Sơn</a>: Đại Nam nhất thống chí chép thời Đinh chia làm đạo. Phương Đình địa dư chí cũng chép như vậy.</li>
<li>Tỉnh <a href="__missing__">Bắc Ninh</a>: Lịch triều hiến chương loại chí chép <a href="__missing__">nhà Đinh</a> đặt làm đạo Bắc Giang, <a href="__missing__">Lê Đại Hành</a> mới đem đổi làm phủ, châu, đầu đời Lý đổi châu Cổ Pháp làm phủ Thiên Đức, cùng với Vũ Linh, Lạng Châu đều gọi là lộ cả. Đại Nam nhất thống chí chép tỉnh Bắc Ninh <a href="__missing__">thời Tiền Lê</a> là Bắc Giang. Phương Đình địa dư chí chép tỉnh Bắc Ninh <a href="__missing__">thời Đinh</a> gọi là đạo <a href="__missing__">Bắc Giang</a>.</li>
<li>tỉnh <a href="__missing__">Nam Định</a>: Đại Nam nhất thống chí chép đời Thái Bình <a href="__missing__">nhà Đinh</a> đặt làm đạo.</li>
<li>tỉnh <a href="__missing__">Quảng Yên</a>: Lịch triều hiến chương loại chí chép ba đời Đinh, Tiền Lê, Lý gọi là đạo Hải Đông.</li>
</ul>
<p>Thời Tiền Lê, năm 1002, <a href="__missing__">Lê Hoàn</a> đổi mười đạo làm lộ, châu, phủ. Khâm định Việt sư thông giám cương mục chua: thay đổi và sắp xếp các lộ, châu, phủ thế nào không rõ. Đào Duy Anh cũng nhận xét: "<a href="__missing__">Lê Hoàn</a> cướp ngôi, nhà Lê đổi mười đạo làm lộ, phủ. châu. Hiện nay không rõ danh hiệu và vị trí các lộ phủ. châu ấy là thế nào".
Các sách địa chí đời Nguyễn có nhắc đến một số lộ đời <a href="__missing__">Tiền Lê</a>. Cụ thể:
</p>
<ul><li>Tỉnh Hà Nội: Đại Nam nhất thống chí chép đầu đời ứng Thiên <a href="__missing__">nhà Tiền Lê</a> gọi là lộ.</li>
<li>Tỉnh Nam Định: Đại Nam nhất thống chí chép đầu đời ứng Thiên nhà Tiền Lê đặt làm lộ.</li>
<li>Tỉnh Lạng Sơn: Đại Nam nhất thống chí chép <a href="__missing__">nhà Tiền Lê</a>, nhà Lý gọi là lộ. Phương Đình địa dư chí cũng chép tỉnh Lạng Sơn đời <a href="__missing__">nhà Tiền Lê</a>, nhà Lý gọi là lộ.</li>
<li>Tỉnh <a href="__missing__">Sơn Tây</a>: Đại Nam nhất thống chí chép các đời Đinh, Tiền Lê, Lý gọi là lộ.</li>
</ul>
<p>Về đơn vị phủ, Đại Việt sử ký toàn thư chép năm 1005 <a href="__missing__">Lê Long Đĩnh</a> đổi Đằng Châu làm phủ Thái Bình, Phương Đình địa dư chí cũng chép lại như thế.
</p>
<p>Có vẻ các sách địa chí thế kỷ XIX căn cứ vào việc <a href="__missing__">nhà Đinh</a> tổ chức đất nước thành mười đạo, <a href="__missing__">nhà Tiền Lê</a> đổi mười đạo làm phủ, lộ, châu mà sau này đoán định vậy. Trong hầu hết biên niên sử và thư tịch trước đó gần như không thấy nhắc đến các đơn vị này. Trong khi đó, đơn vị châu lại vẫn được dùng phổ biến.
</p>
<p>Dưới đây là danh sách các châu <a href="__missing__">thời Đinh</a>, <a href="__missing__">Tiền Lê</a> được đề cập trên cơ sở ghi chép của biên niên sử và một số thư tịch cổ khác:
</p>
<ul><li><a href="__missing__">Ái Châu</a>: Đại Việt sử ký toàn thư chép các sự kiện dưới hai <a href="__missing__">triều Đinh</a>. Tiền Lê gắn với Ái Châu: <a href="__missing__">Lê Đại Hành</a> người Ái Châu; <a href="__missing__">Lê Hoàn</a> đánh nhau với <a href="__missing__">Đinh Điền</a>, <a href="__missing__">Nguyễn Bặc</a> ở Tây Đô. vì <a href="__missing__">Lê Hoàn</a> là người Ái Châu nên sau khi lên ngôi đóng đô ở <a href="__missing__">Hoa Lư</a> mới gọi Ái Châu là Tây Đô; năm 989 Dương Tiến Lộc làm phản ở Hoan Châu và Ái Châu; năm 1009 <a href="__missing__">Lê Long Đĩnh</a> cho đào kênh, đắp đường và dựng cột bia ở Ái Châu. Khâm định Việt sử thông giám cương mục chua: Ái Châu là đất Thanh Hoa. Đại Nam nhất thống chí chép: tỉnh Thanh Hoá, đời Vũ Đế nhà Lương lấy Cửu Chân làm Ái Châu tên Ái Châu có từ đây), đời Đường gọi là Ái Châu, các đời Đinh, Tiền Lê cũng gọi như vậy.</li>
<li><a href="__missing__">Ám Châu</a>: Toàn thư chép năm 1003 <a href="__missing__">Lê Hoàn</a> đi Hoan Châu, vét kênh Đa Cái (vùng Hưng Nguyên, Nghệ An) thẳng đến trường Tư Củng thuộc Ám Châu. Không rõ cụ thể, nhưng theo ghi chép trên thì chắc Ám Châu cũng thuộc vùng Nghệ An.</li>
<li><a href="__missing__">Cổ Pháp châu</a>: Toàn thư chép năm 995 <a href="__missing__">Lê Hoàn</a> phong cho hoàng tử thứ mười một là Đề (tức Minh Đề) làm Hành Quân vương, đóng ở Bắc Ngạn châu Cổ Lãm, lại chép <a href="__missing__">Lý Công Uẩn</a> người hương Diên Uẩn, châu Cổ Pháp. Cương mục chua: châu Cổ Pháp, từ đời Đinh về trước là châu Cổ Lãm, <a href="__missing__">nhà Tiền Lê</a> đổi làm châu Cổ Pháp, nhà Lý đổi làm phủ Thiên Đức, nay là huyện Đông Ngàn, tỉnh Bắc Ninh. Như vậy, tên châu Cổ Pháp mới có sau năm 995.</li>
<li><a href="__missing__">Đại Hoàng châu</a>: Toàn thư chép <a href="__missing__">Đinh Bộ Lĩnh</a> người <a href="__missing__">động Hoa Lư</a>, châu Đại Hoàng. Cương mục chua: Đại Hoàng là tên châu, nay là huyện <a href="__missing__">Gia Viễn</a>, tỉnh <a href="__missing__">Ninh Bình</a>.</li>
</ul>
<p>Chưa thấy tài liệu nào ghi cụ thể 10 đạo <a href="__missing__">thời Đinh</a>, căn cứ vào những ghi chép về <a href="__missing__">thời Đinh</a>, và <a href="__missing__">thời Tiền Lê</a> có thể suy đoán các tên các đạo của đất nước khi này như: Đạo <a href="__missing__">Bắc Giang</a>, Đạo <a href="__missing__">Quốc Oai</a>, Đạo Hải Đông, Đạo Hoan (<i>Châu</i>), Đạo Ái (<i>Châu</i>), Đạo Lâm Tây, Đạo Đại Hoàng, Đạo Đằng (<i>Châu</i>), Đạo <a href="__missing__">Thái Nguyên</a>, Đạo Phong (<i>Châu</i>).
</p>
<p>Đại Việt sử ký toàn thư ghi lại thời điểm điều chỉnh về hành chính của <a href="__missing__">Lê Đại Hành</a> vào tháng 3 năm 1002: ông đổi mười đạo, phủ, châu thời Đinh làm lộ, phủ, châu. Có thể suy đoán các tên các lộ của đất nước khi này như: lộ <a href="__missing__">Bắc Giang</a>, lộ Quốc Oai, lộ Hải Đông, lộ Hoan (<i>Châu</i>), lộ Ái (<i>Châu</i>), lộ Lâm Tây, lộ Đại Hoàng, lộ Đằng (<i>Châu</i>), lộ <a href="__missing__">Thái Nguyên</a>, lộ Phong (<i>Châu</i>).
</p>
<h2>Xem thêm</h2>
<ul><li><a href="__missing__">Nhà Đinh</a></li>
<li><a href="__missing__">Đinh Tiên Hoàng</a></li>
<li><a href="__missing__">Nhà Tiền Lê</a></li>
<li><a href="__missing__">Lê Hoàn</a></li>
<li><a href="__missing__">Hoa Lư</a></li>
<li><a href="__missing__">Thăng Long</a></li>
</ul>
<h2>Chú thích</h2>
<h2>Liên kết ngoài</h2>
<ul><li><a href="__missing__">Đại Cồ Việt</a> tại <a href="__missing__">Từ điển bách khoa Việt Nam</a></li>
<li><a href="__missing__">Về Quốc hiệu đời nhà Đinh - Nguyễn Tài Cẩn</a></li>
<li><a href="__missing__">Quốc hiệu trong lịch sử nước ta: "Đại Cồ Việt" hay "Cồ Việt"?</a></li>
</ul>
-13
View File
@@ -1,13 +0,0 @@
<h1>Đại Việt</h1>
<p><b>Đại Việt</b> (<a href="__missing__">chữ Hán</a>: 大越) tức <b>Đại Việt quốc</b> (<a href="__missing__">chữ Hán</a>: 大越國) là <a href="__missing__">quốc hiệu Việt Nam</a> tồn tại trong 2 giai đoạn từ năm <a href="__missing__">1054</a> đến năm <a href="__missing__">1400</a> và từ năm <a href="__missing__">1428</a> đến năm <a href="__missing__">1804</a>.</p>
<h2>Lịch sử</h2>
<p>Tên gọi này chính thức có từ thời trị vì của vua <a href="__missing__">Lý Thánh Tông</a> (1054 1072), vua thứ ba của <a href="__missing__">nhà Lý</a>. Trước đó, kể từ thời kỳ trị vì của <a href="__missing__">Đinh Bộ Lĩnh</a>, quốc hiệu là <a href="__missing__">Đại Cồ Việt</a> (大瞿越) gồm chữ <i>Đại</i> (大) nghĩa là <i>lớn</i> và chữ <i>Cồ</i> (𡚝) cũng cùng nghĩa là <i>lớn</i>.</p>
<p>Năm <a href="__missing__">1400</a>, sau khi thay thế <a href="__missing__">nhà Trần</a>, <a href="__missing__">Hồ Quý Ly</a>, người sáng lập <a href="__missing__">nhà Hồ</a>, đã đổi quốc hiệu thành <a href="__missing__">Đại Ngu</a> (大虞). Năm <a href="__missing__">1407</a>, <a href="__missing__">nhà Minh</a> xâm lược Đại Ngu và cai trị cho đến năm <a href="__missing__">1427</a>. Năm <a href="__missing__">1428</a>, sau khi giành <a href="__missing__">độc lập</a>, <a href="__missing__">Lê Lợi</a> đã lấy lại tên <b>Đại Việt</b> đặt làm quốc hiệu.</p><a href="__missing__"></a>Đại Việt quốc tổng lãm đồ (大越國總覽圖) được cho là bản đồ nước Đại Việt thời Vĩnh Lạc (1403-1424) nhà Minh Trung Quốc. (Nhưng thể hiện các địa danh <a href="__missing__">Đàng Ngoài</a> thời nhà Lê-Trịnh.)
<p>Quốc hiệu Đại Việt tồn tại tổng cộng trong thời gian <a href="__missing__">723</a> năm, bắt đầu từ thời vua <a href="__missing__">Lý Thánh Tông</a> đến thời vua <a href="__missing__">Gia Long</a> (<a href="__missing__">1054</a><a href="__missing__">1804</a>), tên gọi Đại Việt được dùng làm quốc hiệu trong thời kỳ trị vì của các chính quyền <a href="__missing__">nhà Lý</a>, <a href="__missing__">nhà Trần</a>, <a href="__missing__">nhà Hậu Lê</a>, <a href="__missing__">nhà Mạc</a>, <a href="__missing__">nhà Tây Sơn</a> và 3 năm đầu thời <a href="__missing__">nhà Nguyễn</a> (<a href="__missing__">1802</a> <a href="__missing__">1804</a>). Trong quá trình này tên gọi chính thức Đại Việt bị gián đoạn một lần ngắn ngủi 27 năm vào thời nhà Hồ và thời <a href="__missing__">thuộc Minh</a> (1400 1427).</p>
<p>Lịch sử Đại Việt đã xảy ra nhiều trận chiến chống ngoại xâm như: chống quân <a href="__missing__">Tống</a> năm 1076; chống quân <a href="__missing__">Nguyên Mông</a> các năm 1258, 1285 và 1288; chống quân <a href="__missing__">Minh</a> từ năm 1418 1428, chống <a href="__missing__">Thanh</a> năm 1789. Cũng có những thời kỳ đất nước bị chia cắt lâu dài, như <a href="__missing__">Nam Bắc triều</a> từ năm 1533 1592, <a href="__missing__">phân tranh Trịnh Nguyễn</a> từ năm 1627 1786.</p>
<p>Năm <a href="__missing__">1804</a>, vua <a href="__missing__">Gia Long</a> đổi tên nước thành Việt Nam và sau đó là Đại Nam, <a href="__missing__">quốc hiệu</a> Đại Việt không được sử dụng nữa.</p>
<h2>Xem thêm</h2>
<ul><li><a href="__missing__">Nam Việt</a></li><li><a href="__missing__">Đại Cồ Việt</a></li><li><a href="__missing__">Đại Ngu</a></li><li><a href="__missing__">Đại Nam</a></li><li><a href="__missing__">Việt Nam</a></li></ul>
<h2>Tham khảo</h2>
<h2>Liên kết ngoài</h2>
<ul><li><a href="__missing__">Đại Việt</a> tại <a href="__missing__">Từ điển bách khoa Việt Nam</a></li><li><a href="__missing__">Dai Viet (historical kingdom, Vietnam)</a> tại <i><a href="__missing__">Encyclopædia Britannica</a></i> (bằng tiếng Anh)</li><li><a href="__missing__">Thành lập nhà nước trên biên giới phía nam Trung Quốc: Việt Nam như một đế chế bóng tối và bá quyền, bởi Tường Vũ</a></li></ul>
+10 -3
View File
@@ -2,12 +2,19 @@
<p><b>Đại Việt</b> (<a href="__missing__">chữ Hán</a>: 大越) tức <b>Đại Việt quốc</b> (<a href="__missing__">chữ Hán</a>: 大越國) là <a href="__missing__">quốc hiệu Việt Nam</a> tồn tại trong 2 giai đoạn từ năm <a href="__missing__">1054</a> đến năm <a href="__missing__">1400</a> và từ năm <a href="__missing__">1428</a> đến năm <a href="__missing__">1804</a>.</p>
<h2>Lịch sử</h2>
<p>Tên gọi này chính thức có từ thời trị vì của vua <a href="__missing__">Lý Thánh Tông</a> (1054 1072), vua thứ ba của <a href="__missing__">nhà Lý</a>. Trước đó, kể từ thời kỳ trị vì của <a href="__missing__">Đinh Bộ Lĩnh</a>, quốc hiệu là <a href="__missing__">Đại Cồ Việt</a> (大瞿越) gồm chữ <i>Đại</i> (大) nghĩa là <i>lớn</i> và chữ <i>Cồ</i> (𡚝) cũng cùng nghĩa là <i>lớn</i>.</p>
<p>Năm <a href="__missing__">1400</a>, sau khi thay thế <a href="__missing__">nhà Trần</a>, <a href="__missing__">Hồ Quý Ly</a>, người sáng lập <a href="__missing__">nhà Hồ</a>, đã đổi quốc hiệu thành <a href="__missing__">Đại Ngu</a> (大虞). Năm <a href="__missing__">1407</a>, <a href="__missing__">nhà Minh</a> xâm lược Đại Ngu và cai trị cho đến năm <a href="__missing__">1427</a>. Năm <a href="__missing__">1428</a>, sau khi giành <a href="__missing__">độc lập</a>, <a href="__missing__">Lê Lợi</a> đã lấy lại tên <b>Đại Việt</b> đặt làm quốc hiệu.</p><a href="__missing__"></a>Đại Việt quốc tổng lãm đồ (大越國總覽圖) được cho là bản đồ nước Đại Việt thời Vĩnh Lạc (1403-1424) nhà Minh Trung Quốc. (Nhưng thể hiện các địa danh <a href="__missing__">Đàng Ngoài</a> thời nhà Lê-Trịnh.)
<p>Năm <a href="__missing__">1400</a>, sau khi thay thế <a href="__missing__">nhà Trần</a>, <a href="__missing__">Hồ Quý Ly</a>, người sáng lập <a href="__missing__">nhà Hồ</a>, đã đổi quốc hiệu thành <a href="__missing__">Đại Ngu</a> (大虞). Năm <a href="__missing__">1407</a>, <a href="__missing__">nhà Minh</a> xâm lược Đại Ngu và cai trị cho đến năm <a href="__missing__">1427</a>. Năm <a href="__missing__">1428</a>, sau khi giành <a href="__missing__">độc lập</a>, <a href="__missing__">Lê Lợi</a> đã lấy lại tên <b>Đại Việt</b> đặt làm quốc hiệu.</p>
<a href="__missing__">Tập tin:DaiVietQuocTongLamDo.jpg</a>Đại Việt quốc tổng lãm đồ (大越國總覽圖) được cho là bản đồ nước Đại Việt thời Vĩnh Lạc (1403-1424) nhà Minh Trung Quốc. (Nhưng thể hiện các địa danh <a href="__missing__">Đàng Ngoài</a> thời nhà Lê-Trịnh.)
<p>Quốc hiệu Đại Việt tồn tại tổng cộng trong thời gian <a href="__missing__">723</a> năm, bắt đầu từ thời vua <a href="__missing__">Lý Thánh Tông</a> đến thời vua <a href="__missing__">Gia Long</a> (<a href="__missing__">1054</a><a href="__missing__">1804</a>), tên gọi Đại Việt được dùng làm quốc hiệu trong thời kỳ trị vì của các chính quyền <a href="__missing__">nhà Lý</a>, <a href="__missing__">nhà Trần</a>, <a href="__missing__">nhà Hậu Lê</a>, <a href="__missing__">nhà Mạc</a>, <a href="__missing__">nhà Tây Sơn</a> và 3 năm đầu thời <a href="__missing__">nhà Nguyễn</a> (<a href="__missing__">1802</a> <a href="__missing__">1804</a>). Trong quá trình này tên gọi chính thức Đại Việt bị gián đoạn một lần ngắn ngủi 27 năm vào thời nhà Hồ và thời <a href="__missing__">thuộc Minh</a> (1400 1427).</p>
<p>Lịch sử Đại Việt đã xảy ra nhiều trận chiến chống ngoại xâm như: chống quân <a href="__missing__">Tống</a> năm 1076; chống quân <a href="__missing__">Nguyên Mông</a> các năm 1258, 1285 và 1288; chống quân <a href="__missing__">Minh</a> từ năm 1418 1428, chống <a href="__missing__">Thanh</a> năm 1789. Cũng có những thời kỳ đất nước bị chia cắt lâu dài, như <a href="__missing__">Nam Bắc triều</a> từ năm 1533 1592, <a href="__missing__">phân tranh Trịnh Nguyễn</a> từ năm 1627 1786.</p>
<p>Năm <a href="__missing__">1804</a>, vua <a href="__missing__">Gia Long</a> đổi tên nước thành Việt Nam và sau đó là Đại Nam, <a href="__missing__">quốc hiệu</a> Đại Việt không được sử dụng nữa.</p>
<h2>Xem thêm</h2>
<ul><li><a href="__missing__">Nam Việt</a></li><li><a href="__missing__">Đại Cồ Việt</a></li><li><a href="__missing__">Đại Ngu</a></li><li><a href="__missing__">Đại Nam</a></li><li><a href="__missing__">Việt Nam</a></li></ul>
<ul><li><a href="__missing__">Nam Việt</a></li>
<li><a href="__missing__">Đại Cồ Việt</a></li>
<li><a href="__missing__">Đại Ngu</a></li>
<li><a href="__missing__">Đại Nam</a></li>
<li><a href="__missing__">Việt Nam</a></li></ul>
<h2>Tham khảo</h2>
<h2>Liên kết ngoài</h2>
<ul><li><a href="__missing__">Đại Việt</a> tại <a href="__missing__">Từ điển bách khoa Việt Nam</a></li><li><a href="__missing__">Dai Viet (historical kingdom, Vietnam)</a> tại <i><a href="__missing__">Encyclopædia Britannica</a></i> (bằng tiếng Anh)</li><li><a href="__missing__">Thành lập nhà nước trên biên giới phía nam Trung Quốc: Việt Nam như một đế chế bóng tối và bá quyền, bởi Tường Vũ</a></li></ul>
<ul><li><a href="__missing__">Đại Việt</a> tại <a href="__missing__">Từ điển bách khoa Việt Nam</a></li>
<li><a href="__missing__">Dai Viet (historical kingdom, Vietnam)</a> tại <i><a href="__missing__">Encyclopædia Britannica</a></i> (bằng tiếng Anh)</li>
<li><a href="__missing__">Thành lập nhà nước trên biên giới phía nam Trung Quốc: Việt Nam như một đế chế bóng tối và bá quyền, bởi Tường Vũ</a></li></ul>
+236
View File
@@ -0,0 +1,236 @@
<blockquote>Vào cuối thời <a href="__missing__">nhà Lý</a> (1009-1225) trong lịch sử Việt Nam, <a href="__missing__">Đại Việt</a> xảy ra loạn lạc, nội chiến, cát cứ trong hơn 22 năm (từ 1207 đến 1229) làm suy yếu nhà Lý và dẫn đến họ Trần lên nắm quyền, mở ra triều đại <a href="__missing__">nhà Trần</a> (1226-1400). Giai đoạn này còn được gọi là cuộc <b>Chuyển giao Lý-Trần</b>.</blockquote>
<h2>Hoàn cảnh</h2>
<p>Năm 1175, vua <a href="__missing__">Lý Anh Tông</a> mất, thái tử Lý Long Cán lên ngôi khi mới 2 tuổi, tức vua <a href="__missing__">Lý Cao Tông</a>. Quyền phụ chính được giao phó cho Thái úy <a href="__missing__">Tô Hiến Thành</a> và mẹ vua là <a href="__missing__">Đỗ Thái hậu</a>. Không lâu sau, Tô Hiến Thành do tuổi đã cao cũng qua đời vào năm 1179. Thái hậu cho em trai là <a href="__missing__">Đỗ An Di</a> làm phụ chính.
</p>
<p>Mùa hạ 1181, xảy ra nạn đói lớn, dân chết gần một nửa.
</p>
<p>Tới năm 1190, Đỗ Thái hậu qua đời, vua dùng em vợ là <a href="__missing__">Đàm Dĩ Mông</a> làm thái phó, sử chép Dĩ Mông là người "không có học, làm việc triều chính suy sút". Năm 1188, Cao Tông cho dựng cung Thánh Nghi. Năm 1197, cho dựng cung Nghênh Thiềm, đến năm 1203 lại tiếp tục cho xây dựng hàng loạt cung điện. Nhà vua rong chơi vô độ, xây đền đài không ngớt, nghe ngoài thành có trộm cướp thì lại lờ đi như không biết.
</p>
<p>Khi đang xây dở gác Kinh Thiên, có chim khách đến làm tổ. Quần thần can gián nói: "Xưa Minh Đế nhà Ngụy xây điện Lăng Tiêu, có chim khách làm tổ, Cao Đường Long có nói nói 'Chim khách làm tổ, chim cưu ở đó'.", cho là điềm báo sắp có vương tộc mới thay thế triều Lý, khuyên vua ngừng việc xây cất. Lý Cao Tông mang việc này hỏi hoạn quan <a href="__missing__">Phạm Bỉnh Di</a>. Bỉnh Di thưa rằng:
</p>
<i>Cái gác hoàn thành mà chim khách đến làm tổ, lại sinh ra chim con, vậy là trời cho bệ hạ cái điềm tốt giữ được trăm đời.</i><p>Cao Tông nghe rất bằng lòng, bắt dân phu xây cất gấp hơn, khiến nhân dân càng thêm khốn đốn, nên trộm cướp nổi lên khắp nơi. Nhiều cuộc khởi nghĩa của nông dân và ly khai của các hào trưởng địa phương nổ ra như Lê Vãn và Cổ Hoàng Giáp ở Thanh Hóa (1188-1192), Hồ Điệp ở và Ngô Công Lý (1198) ở Diễn Châu, Chân Đăng Châu và Hà Lê năm 1194, Vua đều sai Đàm Dĩ Mông đánh dẹp.
</p>
<h2>Diễn biến</h2>
<h3>Nổi dậy Đại Hoàng</h3>
<p>Năm 1198, người người châu Đại Hoàng (Ninh Bình) là Đinh Khả tự xưng là con cháu của Đinh Tiên Hoàng nổi loạn rồi bị đánh dẹp cũng trong năm.
</p>
<p>Năm 1203, người châu Đại Hoàng là Phí Lang nổi loạn. Vua sai Nguyên soái Trần Hinh cùng Thượng thư bộ Lại Từ Anh Nhĩ dẫn quân phủ Thanh Hóa đánh Đại Hoàng nhưng bị Phí Lang đánh bại tại cửa sông Lộ Bái, Từ Anh Nhĩ bị giết.
</p>
<p>Năm 1204, quân triều đình do Đỗ Kính Tu và Đỗ Anh Doãn đánh Đại Hoàng đều bị thất bại, phải lui quân. Tháng 10, vua sai Đàm Dĩ Mông đang phòng bị biên giới phía nam kéo quân ra bắc xây lũy, đóng hàng chục chiếc thuyền lâu đề phòng Đại Hoàng.
</p>
<p>Năm 1205, Dĩ Mông bị triệu về kinh, người Đại Hoàng kéo quân tập kích khiến quân triều đình đại bại. Tháng 8, vua sai Nguyễn Vị đi chiêu dụ. Phí Lang cùng hơn 170 thủ lĩnh ra hàng.
</p>
<p>Năm 1206, sử sách chép rằng "Lúc này, trong nước đã loạn. Trộm cướp nổi khắp nơi. Đường sá ngăn trở, không nơi nào đi được".
</p>
<p>Năm 1207, Phí Lang lại nổi loạn, đánh ấp Tạp Tự. Tháng 3, Đoàn Khả Liệt và Vương Mãn nổi loạn ở châu Quốc Oai (Hà Tây).
</p>
<p>Tháng 5 năm 1214, Trần Tự Khánh đánh tan Đinh Khả và Bùi Đô ở châu Đại Hoàng. <i>Việt Sử lược</i> chép năm 1215, Trần Tự Khánh lại đem quân đánh dẹp Đại Hoàng nhưng bị thua, tướng của Tự Khánh là Nguyễn Đường bị chết đuối.<b></b> Lực lượng nổi loạn ở Đại Hoàng vẫn cát cứ cho đến hết thời nhà Lý.
</p>
<h3>Nổi dậy Hồng Châu</h3>
<p>Tháng 3 năm 1207, hào trưởng Hồng Châu là <a href="__missing__">Đoàn Thượng</a> và Đoàn Chủ xây đắp thành lũy, xưng vương hiệu.
</p>
<p>Lý Cao Tông sai Đàm Dĩ Mông, <a href="__missing__">Phạm Bỉnh Di</a>, Trần Hinh cùng Bảo Trinh hợp binh tiến đánh. Thấy thế lực quân triều đình quá mạnh, Đoàn Thượng liền ngầm sai người đem của cải đút lót cho Phạm Du. Phạm Du bèn xin với Cao Tông tha cho Đoàn Thượng. Cao Tông chấp thuận, gọi quân Dĩ Mông và các tướng về. Từ đó, Dĩ Mông, Bỉnh Di và Phạm Du có hiềm khích.
</p>
<p>Về sau Đoàn Thượng quy phục vua Cao Tông và tiếp tục phò tá Lý Huệ Tông cho đến khi bị Trần Tự Khánh đánh bại năm 1214. Họ Đoàn tiếp tục cát cứ Hồng Châu cho đến năm 1228.
</p>
<h3>Phạm Du bất tuân, đất nước phân lập</h3>
<p>Năm 1207, vua thấy trộm cướp nổi lên khắp nơi, bèn hối hận, xuống chiếu tạ lỗi rằng:
</p>
<i>"Trẫm còn nhỏ đã nối nghiệp lớn, ở sâu trong cung cấm, không biết nỗi khổ của dân. Từ khi nghe lời tiểu nhân, khiến dân oán trách. Dân đã oán, trẫm biết nương vào ai? Nay nên sửa lỗi, làm lại từ đầu với dân. Những ruộng đất tài sản bị tịch thu, đều trả lại."</i><p>Đến năm 1208 lại xảy ra đói kém, người chết đói hàng loạt. Đất nước bắt đầu rơi vào cảnh tê liệt, cát cứ. Người châu Quốc Oai dẫn quân đóng ở Tây Kết, người trại Văn Lôi đóng ở sông Đà Mặc. Đường sá bị cắt đứt, thuyền bè không đi lại được, trộm cướp nổi lên như ong.
</p>
<p>Cao Tông sai Phạm Du coi việc quân ở châu Nghệ An. Phạm Du chiêu nạp nhiều võ sĩ khiến vua lại phải sai Phạm Bỉnh Di dẫn quân ở Đằng Châu (Hưng Yên) đánh dẹp. Du lại về Cổ Miệt kêu gọi Đoàn Thượng, Đoàn Chủ hợp binh làm phản triều đình, đánh Đằng Châu. Sau nhiều trận giao tranh, tháng 2 năm 1209, Phạm Bỉnh Di dẫn quân Đằng Châu và Khoái Châu đánh bại Phạm Du. Phạm Du phải bỏ trốn về Hồng Châu. Bỉnh Di tịch biên gia sản của Du rồi đốt hết. Tháng 4 năm 1209, Phạm Bỉnh Di đánh tan quân Đoàn Thượng, Đoàn Chủ bị tử trận.
</p>
<h3>Cung biến điện Kim Tinh, Quách Bốc lập vua</h3>
<p>Phạm Du lại ngầm sai người về kinh đút lót cho quan lại trong triều, nói rằng Bỉnh Di tàn ác, giết hại người vô tội và kể lể tình oan, xin về kinh đợi tội. Tháng 7 năm 1209, Cao Tông sai Trần Hinh triệu Bỉnh Di về triều. Phạm Du về kinh trước hầu Cao Tông, được vua tin cẩn; Bỉnh Di đến kinh sau, vào triều phụng mệnh. Cao Tông sai bắt Bỉnh Di và con giam ở Thủy viện, muốn xử tử.
</p>
<p>Bộ tướng của Bỉnh Di là <a href="__missing__">Quách Bốc</a> nghe tin dẫn binh xông vào cứu chủ, đến cửa Đại Thành bị lính gắc cổng ngăn lại, Bốc cùng người phá cửa mà vào. Vua thấy việc sấp quá, sai giải Bỉnh Di và Phụ vào trong điện Kim Tinh. Phạm Du cùng em là Kinh lúc này từ ngự đường ra, dùng giáo đâm chết cả hai cha con Phạm Bỉnh Di rồi đem Cao Tông chạy trốn.
</p>
<p>Quách Bốc sai quân sĩ xông vào, dùng xe ngự bọc thi thể Phạm Bỉnh Di và Phụ ra khỏi thành. Sau đó Bốc vào Vạn Diên cung, đón Vương tử <a href="__missing__">Lý Thẩm</a> lên làm vua. Một số đại thần trong đó có thái sư Đàm Dĩ Mông quy phục Vương tử Thẩm và Quách Bốc.
</p>
<p>Vua Cao Tông chạy về Quy Hóa (Phú Thọ) nương nhờ nhà Hà Vạn, một thủ lĩnh miền thiểu số có thế lực. <a href="__missing__">Vương tử Sảm</a> cùng <a href="__missing__">An Toàn hoàng hậu</a> (Đàm thị) chạy về Hải Ấp nương nhờ hào trưởng là <a href="__missing__">Trần Lý</a>, là anh rể của đại thần <a href="__missing__">Tô Trung Từ</a>. Trần Lý lại gả con gái là <a href="__missing__">Trần Thị Dung</a> cho Vương tử Sảm. Vương tử Sảm không có lệnh của vua cha, tự phong tước cho Trần Lý, Phạm Ngu và Tô Trung Từ (làm Điện tiền Chỉ huy sứ). Khi ấy, gia thần của Lý Sảm là Lưu Thiệu đến gặp Trần Lý và Phạm Ngu nói rằng: <i>"Thẩm tuy là trưởng nhưng là con thứ, Sảm tuy nhỏ nhưng là con đích. Xin hai ngài liệu định."</i> Trần Lý và Phạm Ngu tôn Vương tử Sảm làm <b>Thắng vương</b> (勝王).
</p>
<p>Vua Cao Tông muốn đánh dẹp thế lực Thuận Lưu (Hải Ấp), sai Phạm Du đi Hồng Châu liên kết với Đoàn Thượng. Truyền rằng Phạm Du còn vội tư thông với <a href="__missing__">công chúa Thiên Cực</a> nên trễ giờ. Phạm Du bèn lên thuyền theo đường sông mà đi, đến nghỉ ở bộ Cổ Châu, bị người Bắc Giang là Nguyễn Nậu và Nguyễn Nãi bắt, giải đến chỗ Vương tử Sảm, rồi bị giết.
</p>
<p>Vào cuối năm 1209 đầu năm 1210, loạn Quách Bốc bị đánh dẹp, Tô Trung Từ đón vua Cao Tông về cung. Không rõ về số phận của Lý Thẩm. <i><a href="__missing__">Đại Việt Sử ký Toàn thư</a></i> thời Lê chỉ chép rằng: "<i>Anh em họ Trần họp binh dẹp loạn, rước vua về kinh. Trừng trị bọn Quách Bốc làm loạn, xử tội theo mức độ khác nhau.</i>" Trần Lý cũng tử trận vào thời gian này.
</p>
<p><i><a href="__missing__">Việt sử lược</a></i> đời Trần thì chép vào mùa thu năm 1209, người Thuận Lưu và Khoái Châu dẫn quân thủy đánh kinh đô. Đạo quân khi gần đến cửa kinh thành thì bị phục binh đánh bại, tan rã. Đại quân bị Liệt hầu phục binh ở vườn Chẩn, quân lính hoảng loạn chạy. Người chèo thuyền tưởng có quân triều đình đến đánh, cho thuyền rời bờ, gặp gió bắc thổi mạnh, thuyền trôi tán loạn. Hai đạo quân nghe thuyền đã mất, đều tan rã. Dân kinh thành truy sát, chết hơn 300 người.
</p>
<p>Tô Trung Từ về phò vua Cao Tông ở kinh thành, trong khi thái tử Sảm vẫn ở Hải Ấp. Đầu năm 1210, Tô Trung Từ phụng mệnh vua đánh quân Khoái Châu. Nhân đó đến Hải Ấp bắt Vương tử Sảm cùng những người khác đón về kinh sư. Con của Trần Lý là <a href="__missing__">Trần Tự Khánh</a> thay cha đem quân chúng về Kinh, được phong là Thuận Lưu Bá. Đàm Dĩ Mông do nhận tước của Lý Thẩm nên bỏ trốn, đem lùng bắt những người nhận phong tước khác để chuộc tội. Tại triều, Dĩ Mông bị Đỗ Anh Doãn đàn hặc là phản nghịch. Tuy nhiên cuối cùng vẫn không bị Lý Cao Tông trị tội, cho giữ chức như cũ.
</p>
<h3>Huệ Tông lên ngôi, Tô Trung Từ quyền thần</h3>
<p>Mùa đông năm 1210, Lý Cao Tông lâm bệnh, băng hà. Thái tử Sảm lên ngôi lúc 16 tuổi, tức <b>Lý Huệ Tông</b>, niên hiệu Kiến Gia. An Toàn Hoàng hậu được tôn làm Hoàng thái hậu, được quyền nhiếp chính, sử sách thường gọi là Đàm Thái hậu. Em bà là Đàm Dĩ Mông giữ chức Thái sư. Đỗ Kính Tu được Cao Tông ủy thác làm Thái úy để chăm lo. Tuy nhiên, Tô Trung Từ trở thành người nắm quyền trong triều.
</p>
<p>Tháng 1 năm 1211, cho rằng Kính Tu có âm mưu sát hại Tô Trung Từ, quan Chi hậu Phụng ngự là Đỗ Quảng bắt Kính Tu giao cho Trung Tự, Kính Tu bị dìm nước cho chết ở trạm Đại Thông. Trung Tự nghe tin Quan nội hầu Đỗ Thế Quy cùng Đỗ Quảng mưu phế lập, dẫn quân tập kích Quy và Quảng trong thành. Tô Trung Từ bắt được Thế Quy, sai chém ở chợ Đông.
</p>
<p>Vừa lên ngôi, vua Huệ Tông sai đón vợ là Trần Thị Dung về cung nhưng Tự Khánh không cho vì vẫn đang loạn lạc. Tháng 2, Trần Tự Khánh mới sai thuộc tướng là <a href="__missing__">Phùng Tá Chu</a> đưa Trần thị đi. Lúc này vừa gặp lúc Tô Trung Tự đang giao chiến với Đỗ Quảng tại cửa Đông, nên Tá Chu tạm đỗ thuyền ở trạm Đại Thông. Trung Tự mượn quân của Trần Tự Khánh đánh bại được Quảng, đem đi chém.
</p>
<p>Tình hình kinh đô tạm yên, nhưng Tô Trung Từ lại tư thông với <a href="__missing__">công chúa Thiên Cực</a> là người cũng từng dan díu với Phạm Du trước đây. Một đêm tháng 6 năm 1211, ông sang Gia Lâm gặp công chúa Thiên Cực thì bị chồng của công chú là quan nội hầu Vương Thượng bắt quả tang và giết chết. Theo luật pháp nhà Lý khi đó, Vương Thượng không bị tội.
</p>
<h3>Xung đột Đoàn - Trần, họ Đoàn cần vương</h3>
<p>Sau cái chết của Tô Trung Từ, kinh thành lại rơi vào cảnh hỗn loạn. Bộ tướng của Trung Từ là Nguyễn Tự lúc trước muốn giết con rể ông là Nguyễn Ma La nên bị tước binh quyền và bỏ trốn sang Quốc Oai, cát cứ tại đây. Nguyễn Tự nghe tin Trung Từ đã chết, bèn trở về kinh sư, dẫn bộ đảng trộm của cải trong Ngự phủ. Bị vua truy đuổi, Nguyễn Tự lẩn trốn ở núi Khô Sách, cát cứ tại đây.
</p>
<p>Nguyễn Ma La thấy cha vợ bị giết, thế cô, bèn mưu dựa vào họ Trần. Ma La sang nói với <a href="__missing__">Trần Thừa</a> là con trưởng của Trần Lý, xin tiến binh dẹp yên vùng Khoái Châu. Ma La lên thuyền đi về Thuận Lưu, giữa đường gặp tướng của Trung Từ là Nguyễn Trinh bắt giết rồi cướp lấy vợ của Ma La là Tô thị đem về. Tô thị bèn sai người tố cáo với Trần Thừa. Ông lập mưu sai Tô thị dụ Nguyễn Trinh đến và giết chết. Lực lượng Tô Trung Từ tan rã, các thế lực Hồng Châu, Khoái Châu và Thuận Lưu lại xung đột.
</p>
<p>Đoàn Thượng đem quân Hồng Châu đánh anh em họ Trần ở ải Hoàng Điểm. Trần Tự Khánh sai bộ tướng Lại Linh cùng tướng Khoái Châu là Nguyễn Đường ra chống cự. Nguyễn Đường bị bắt. Tự Khánh bị thua, sái phá đê cho nước sông chảy tràn vào các ấp rồi về. Người Khoái Châu mất tin tưởng ở họ Trần, quy phục họ Đoàn.
</p>
<p>Trần Tự Khánh nhân lúc kinh thành bỏ trống, mang quân về kinh sư và an táng Tô Trung Từ ở làng Hoạch. Đoàn Thượng và Đoàn Văn Lôi gièm Tự Khánh với vua rằng Tự Khánh định phát binh về kinh, mưu đổi lập. Vua giận, mùa thu tháng 7, ra chiếu các đạo binh đánh Tự Khánh, giáng Trần Thị Dung làm Ngự nữ. Đoàn Thượng và Đoàn Văn Lôi dẫn quân hội sư, vua ra chiếu thăng Thượng làm hầu.
</p>
<p>Mùa đông, Đoàn Thượng cầm quân đánh chiếm được Nam Sách. Tự Khánh sai tướng là Đinh Khôi dẫn quân đánh. Đoàn Thượng bị thất bại phải chạy. Tự Khánh cũng đem quân chiếm được đất Ma Lôi.
</p>
<h3>Đàm hậu đồ sát tam vương</h3>
<p>Tháng 12 (âm lịch) năm 1211, Tự Khánh kéo binh đến bến Tế Giang, sát ngay kinh thành. <a href="__missing__">Đàm Thái hậu</a> ngờ vực Tự Khánh có ý phế lập. Tự Khánh bèn cắt tóc thề trời. Lại sai Thiên Trinh công chúa tâu rằng mình không có ý khác. Thái hậu vẫn không tin. Đêm đó, Thái hậu sai bắt ba Hoàng tử của vua Cao Tông với các thị thiếp khác là Nhân Quốc vương, Lục hoàng tử và Thất hoàng tử dìm đầu chết ở giếng ngự rồi sai đem xác cả ba người chất trước cửa cung Lâm Quang. Quần thần đều sợ Thái hậu không ai dám can. Vua cùng Thái hậu lánh đến đảo Lãnh Kinh một thời gian. Trẻ con có bài vè rằng:
</p>
<i>Cao Tông táng vị tất, tam thi tích vy nhất.</i>
髙宗葬未畢,三屍積為一。
Cao Tông chôn chưa xong, ba xác một đống nằm.
<p>Trần Tự Khánh được vua ban cho tước hầu, thụy là <b>Chương Thành</b> (彰誠), Khánh rút quân. Huệ Tông, Đàm Thái hầu cùng cận thần vẫn ngầm mưu diệt họ Trần. Trần Tự Khánh và Nguyễn Tự lại liên kết với nhau đề chống lại Đoàn Thượng. Đầu năm 1212, hai người họp nhau ở bến Triều Đông, thề làm bạn "sống chết có nhau, tận trung báo quốc, cùng bình họa loạn". Lại lấy sông Đuống làm giới tuyến, mỗi người thống lĩnh một bên từ Thổ Khối (Bắc Ninh) đến Na Ngạn, các hương ấp dọc đường bộ thuộc về Tự Khánh. Từ Kinh Ngạn bờ sông Hồng, đến <a href="__missing__">Ô Diên</a> thuộc về Nguyễn Tự, hẹn đến tháng 3 năm sau thì họp binh tấn công Hồng Châu. Tự Khánh lại quay về đóng ở Tế Giang bộ. Tướng của Tự Khánh là Đinh Khôi đánh được Lạng Châu, chiếm toàn bộ đất ấy rồi rút. Tháng 4, Tự Khánh đánh quân Hồng Châu tại ấp Trì.
</p>
<p>Không lâu sau, Nguyễn Tự bị chết. Phó tướng là Nguyễn Cuộc (hoặc Cục) thay thế. Vua sai người lên chiêu dụ nhưng bị Cuộc giết chết. Vua thân chinh lên đánh nhưng bị đánh bại, vua thúc ngựa chạy về mới thoát. Không thu phục được vùng Quốc Oai, vua định chạy lên Lạng Châu nhưng Trần Tự Khánh biết được, dẫn quân đến kinh sư, lại sai tướng là Lại Linh và Phan Lân đuổi theo vua, xin nghênh giá về cung. Vua đến trước Phật, thề rằng: <i>"Trẫm đức mỏng, đội ngôi ngọc, khiến gặp loạn ly, sự nghiệp tổ tông sắp đổ, đến nỗi cung giá nhiều lần dời đổi. Nay muốn nhường ngôi trời, nhường cho người hiền đức."</i> Nói xong, rút dao định cắt tóc. Tự Khánh cùng quần thần đều dập đầu đến chảy máu, vua mới thôi. Vua lệnh cho văn võ bá quan đều phải nghe lệnh Chương Thành hầu Tự Khánh.
</p>
<h3>Chiến tranh giữa triều đình Lý và Chương thành hầu</h3>
<p>Đầu năm 1213, thái hậu bí mật sai thị vệ lên lạc với bọn tướng sĩ Phan Thế ở đạo Phù Lạc và Ngô Nãi ở đạo Bắc Giang, hẹn ngày cùng phát binh đánh Tự Khánh. Đúng ngày đã định, các tướng tiến vào tập kích quân của Tự Khánh tại cửa Đại Hưng (cửa nam Long Thành). Quân của Tự Khánh trong cung không phòng bị, thấy Ngô Nãi đến đều tan vỡ. Nãi, Thế thừa thế xông vào hậu cung định bắt mẹ của Tự Khánh là Tô thị nhưng Tô thị trốn được. Tự Khánh đang ở bến Đại Thông, không hay biết. Bảy ngày sau mới kéo quân vào cấm thành, đốt cầu Ngoạn Thiềm rồi lại trở về Đại Thông.
</p>
<p>Vua sai Đàm Dĩ Mông và Đoàn Thượng đều đến hội quân đánh Tự Khánh. Tháng 2, vua thân chinh đánh Tự Khánh tại Mễ Sở. Tự Khánh dẫn quân đánh chiếm Quốc Oai. Mùa hạ tháng 4, vua sai Dĩ Mông đến các quân bên sông Tam Đái để đánh Tự Khánh. Tháng 7, Phạm Dĩ đánh bại Đinh Khôi tại Nam Sách, khiến Khôi phải chạy. Đinh Khôi định làm phản, bị Tự Khánh bắt giết.
</p>
<p>Tháng Giêng năm 1214, Trần Tự Khánh hội binh các đạo, thề tại miếu Đỗ Thái úy ở Đông Phù Liệt, định đánh kinh sư. Tự Khánh cho Phan Lân và <a href="__missing__">Nguyễn Nộn</a> dẫn quân Quốc Oai đánh bộ, còn Tự Khánh tự thống lĩnh thủy quân đến sông Đà Mạc đánh hữu ngạn sông Lô. Em họ Tự Khánh là <a href="__missing__">Trần Thủ Độ</a> cùng Trần Hiến Thâm và Nguyễn Ngạnh đánh tả ngạn. Vương Lê và Nguyễn Cải tiến đánh cầu phao trạm Triều Đông. Lý Huệ Tông thân chinh cùng Đàm Dĩ Mông cầm quân Bắc Giang và các tướng Hồng Châu hợp đánh.
</p>
<p>Tại Mễ Sở, thuyền vua gặp sương mù dày đặc, không phân biệt được phương hướng. Quân Lê, Cải bắt gặp, đánh trống reo hò thúc quân, quân triều đình chưa giao chiến đã tự tan vỡ, binh sĩ bỏ thuyền lên bờ chạy. Lê, Cải bắt được thuyền rồng.
</p>
<p>Cánh quân do Trần Thừa định tiến đánh hữu ngạn sông Lô, đến trạm An Duyên, gặp quân của Đàm Dĩ Mông và An Nhân vương. Cả hai đều dùng quân tinh nhuệ nghênh chiến, thiệt hại nặng nề. Cánh quân do Thủ Độ, Hiến Thâm tiến đánh trạm Từ Điều lại chiếm được. Phan Lân và Nguyễn Nộn đánh bại các tướng Hồng Châu là Đoàn Cấm và Vũ Hốt tại Chợ Dừa.
</p>
<p>Lúc này vua ở trà đình, nghe các đạo quân đều bại, ra lệnh xe giá vào cấm cung đón Thái hậu cùng lên thuyền chạy về Lạng Châu. Đàm Dĩ Mông cũng chạy về Hồng Châu. Không rõ cuối cùng ông mất năm nào. Họ Đàm mất hẳn người nắm binh quyền.
</p>
<p>Trần Tự Khánh đóng ở Hạc Kiều, sai Lại Linh giữ Nghĩa Trụ, Phan Lân giữ Siêu Loại, Thủ Độ giữ ải Lãng, Phạm Chà giữ ải Bần, Nguyễn Nộn giữ Bắc Giang. Đoàn Thượng, Đoàn Văn Lôi và Đoàn Khả Như giao chiến với Thủ Độ bị đánh bại, phải chạy về bắc. Vua sai tướng là Thân Trường và Thân Nhai đến đánh Nguyễn Nộn đều bị Nộn giết tại cánh đồng Nhụy Duệ.
</p>
<h3>Tự Khánh lập vua, Nguyễn Nộn phò Huệ Tông</h3>
<p>Trần Tự Khánh muốn nghênh Huệ Tông về kinh, tự cắt tóc kèm thư sai người đến Lạng Châu dâng lên vua. Thư chép rằng:
</p>
<i>"Dân tình uất ức, không thấu được lên trên. Cho nên, nhân lòng giận dữ của người trong nước, thần khởi binh dẹp lũ đó, cắt trừ gốc họa, để yên lòng dân mà thôi. Đến như thân phận vua tôi, thần không dám phạm đến một chút nào. Ngờ đâu, phải gánh lấy tội chuyên quyền đánh dẹp, để khiến cho xa giá phải long đong, tự xét tội của thần thật đáng vạn lần chết..."</i><p>Vua cùng Thái hậu nghi Tự Khánh lập mưu bắt giữ nên không nghe. Lúc này đoàn xa giá chỉ còn Nội thị phán thủ Trần Hân và 30 người cùng đi, xa giá qua các thôn xóm hẻo lánh, cuối cùng trở về Nam Sách.
</p>
<p>Tự Khánh không đón được Huệ Tông, bèn triệu tập chư vương và bá quan, bàn việc đổi lập. Tự Khánh cho bắt người người trong tộc của Thái hậu là bọn Đàm Kinh Bang và người nhà, trói bằng xích sắt rồi giam ở Mỹ Lộc. Tháng 3, Tự Khánh cho lập một người con của <a href="__missing__">Lý Anh Tông</a><a href="__missing__">Huệ Văn vương</a> làm vua mới, lên ngôi tại điện Thiên An, đổi niên hiệu là Càn Ninh (乾寧), xưng là <b>Nguyên vương</b> (元王).
</p>
<p>Tháng 3 năm 1214, quân Hồng Châu do Đoàn Nhuyễn chỉ huy đánh núi Đông Cứu ở Bắc Giang, Nguyễn Nộn đánh đuổi giết chết được Đoàn Nhuyễn, nhưng cũng bị thương ở lưng.
</p>
<p>Tháng 4, nội bộ phe Tự Khánh lại xảy ra phản loạn lớn. Nguyễn Nộn làm phản, xây dựng thế lực cát cứ tại Bắc Giang. Tướng quân ở Cam Giá là Đỗ Bị cũng nổi lên chống lại Tự Khánh. Tự Khánh phát binh vào cung, cướp vàng bạc của quan phủ, sai Lại Linh đốt 19 cung điện ở kinh đô rồi nghênh Nguyên vương đến hành cung Lợi Nhân (Hà Nam). Tự Khánh đóng quân tại trạm Đại Thông, cho đắp lũy tại Nghĩa Trụ. Tự Khánh cùng Nguyễn Nộn giao tranh tại cung Thánh Nghi khiến cung bị đốt cháy.
</p>
<p>Tháng 6, vua Huệ Tông cùng Thái hậu từ Nam Sách trở về cung, phong Nguyễn Nộn làm Bắc Giang hầu. Vua bắt đầu dựa vào vào thế lực Nguyễn Nộn. Cục diện trong nước lúc này hình thành ba thế lực: Phía bắc là Nguyễn Nộn, phía đông là Đoàn Thượng, phía nam là Trần Tự Khánh. Ngoài ra còn có Ô Kim hầu Lý Bát ở Hoài Đức. Ở Quy Hóa (miền Yên Bái, Tuyên Quang) có họ Hà, cha truyền con nối cai trị đất trại này. Ngoài ra, còn họ Phạm ở Nam Sách, Đại Hoàng ở Ninh Bình cùng những thế lực nhỏ ở các địa phương. Khắp nơi trong nước vẫn trong tình trạng hết sức hỗn loạn.
</p>
<p>Tháng 7, vua cho đắp lũy từ cửa thành Vạn Xuân đến chợ Cái để chống Tự Khánh. Tháng 9, Tự Khánh sai Nguyễn Ngạnh đưa Đàm Kinh Bang thả về kinh, trình bày rằng mình không có ý khác. Vua nghe Ngạnh đến, sợ bỏ chạy. Ngạnh đi rồi, mới trở về cung. Tự Khánh dẫn dẫn quân đến cửa khuyết. Vua cùng Thái hậu lại chạy tránh nạn. Cùng ngày, Tự Khánh thả quân cướp của cải trong Ngự phủ, rồi đốt cung điện và nhà dân trong kinh thành gần hết.
</p>
<p>Tháng sau, vua cùng Thái hậu trở về kinh, thấy cung điện đều bị thiêu rụi, phải sai dựng nhà tranh ở tạm tại miếu Chúc Thánh bên cầu Thái Hòa.
</p>
<p>Năm 1215, tháng Giêng, Huệ Tông ban chiếu rằng:
</p>
<i>"Trần Tự Khánh tụ đảng hung ác, cướp phá kinh sư, đánh chiếm thủy bộ, gây tổn hại đến tông miếu xã tắc. Từ mùa đông năm ngoái, lửa loạn càng dữ, dẫn quân lính tàn bạo, cướp bóc tài vật của ta, thiêu hủy cung điện, khiến phố phường kinh thành hóa thành tro bụi. Trẫm vì phẫn nộ của muôn dân, nhờ linh thiêng của một tổ sáu tông, thân chinh sáu quân, đích thân chinh phạt. Nay bảo các tướng soái, binh sĩ, đều nghe chiếu chỉ, tận tâm tận lực, để đáp lòng trẫm."</i><p>Quân triều đình đánh được An Duyên, Phú Liệt. Tháng 2, phong cho Nguyễn Nộn làm Bắc Giang vương.
</p>
<p>Tự Khánh dẫn quân đóng tại Cứu Liên, chia tướng sĩ chống Nguyễn Nộn. Nguyễn Đường và Nguyễn Tể trấn giữ Khoái Châu, muốn mưu với Nguyễn Nộn để đánh Tự Khánh. Tháng 3, Tự Khánh dẫn quân đánh Khoái Châu, sau nhiều lần giao tranh mới đánh bại được quân Nguyễn Nộn, chiếm Khoái Châu, quy phục Nguyễn Đường và Nguyễn Tể.
</p>
<p>Sau khi dựa vào Nguyễn Nộn chống Tự Khánh thất bại, các nơi đều cát cứ, chính quyền triều đình trở nên ngày càng suy yếu, thậm chí không đủ sức kiểm soát kinh thành, vốn chịu dưới sức ép gia tăng của Trần Tự Khánh.
</p>
<p>Tháng 7, Tự Khánh cho đốt cung Động Nhân, vua phải sai rước thần chủ của Thái hậu Linh Nhân tức Nguyên phi <a href="__missing__">Ỷ Lan</a> về miếu Chúc Thánh. Vua phải ngự điện cỏ tranh coi triều. Vua bảo quần thần: <i>"Trẫm muốn nhường ngôi, các khanh nghĩ sao?"</i>. Các quần thần đều khóc can, vua không nghe. Bèn cùng Thái hậu rút dao cạo tóc. Tự Khánh cho đem người trả lại ngai vàng và mũ Bình thiên cho vua.
</p>
<h3>Huệ Tông về với họ Trần, Tự Khánh nắm quyền</h3>
<p>Đầu năm 1216, tướng ở đất Cảo (Từ Liêm) là Đỗ Ất và Đỗ Nhuệ đánh lại nhà vua. Vua phải sai sứ cầu binh Tự Khánh để đánh Nhuệ. Nhuệ chạy sang Nguyễn Nộn.
</p>
<p>Phu nhân Trần Thị Dung từ Ngự nữ lại được phong làm <i>Thuận Trinh Phu nhân</i>. Thái hậu thường chỉ vào Trần phu nhân là bè đảng giặc, nói Huệ Tông đuổi bỏ đi. Bà còn sai người lén bỏ thuốc độc vào bữa cơm của con dâu, Huệ Tông biết được, chia cho vợ đồ ăn của mình và không cho rời khỏi mình. Thái hậu lại sai người đem thuốc độc bắt phu nhân phải tự sát. Vua lại ngăn không cho, rồi đêm ấy cùng với phu nhân lẻn đi trốn đến chỗ quân Thuận Lưu.
</p>
<p>Tháng 5, vua cùng phu nhân Trần thị đi thuyền đến bãi Cửu Liên, nơi đóng quân của Tự Khánh. Thái hậu cùng vương tử, công chúa đều ở lại Ô Kim. Tự Khánh gặp vua rất mừng, tướng sĩ đều vui mừng reo hò. Trần Tự Khánh phế vua Càn Ninh xuống làm Huệ Văn vương như cũ. Nguyễn Nộn bị Huệ Tông giáng làm lính. Vua Huệ Tông từ đó nằm dưới sự chi phối của họ Trần. Các anh em, thân thuộc họ Trần được phong các chức văn võ quan trọng trong triều: Tự Khánh làm Thái úy, khi xướng lễ không phải gọi tên. Trần Thừa được phong tước Liệt hầu. <a href="__missing__">Trần Liễu</a> , Phùng Tá Chu và Lại Linh làm Quan nội hầu. Con cả Tự Khánh là Trần Hải được phong là Hiển Đạo vương. Tự Khánh quyết tâm phò Vua đánh Bắc Giang vương Nguyễn Nộn, Hiển Tín vương Nguyễn Bát, Đoàn Văn Lôi ở Hồng châu, Hà Cao ở Quy Hóa.
</p>
<p>Thái hậu dời đến An Xướng, về với quân Nguyễn Nộn. Nguyễn Nộn và Hà Cao nhân danh Thái hậu đánh chiếm các ấp ở Từ Liêm. Tự Khánh dựng điện tranh ngự ở Tây Phù Liệt, mô phỏng theo Đại Nội. Tháng 6, Trần thị hạ sinh con đầu của Huệ Tông, sau phong là <a href="__missing__">Thuận thiên Công chúa</a>. Tháng 12, Trần phu nhân được phong làm <i>Thuận Trinh Hoàng hậu</i>.
</p>
<p>Mùa xuân năm 1217, tháng 3, sử chép vua Huệ Tông do trúng phong nên dần dần phát điên, có khi tự xưng là Thiên tướng giáng trần, tay cầm giáo và mộc, cắm cờ nhỏ vào búi tóc rồi đùa múa từ sớm đến chiều không nghỉ, khi thôi thì đổ mồ hôi nóng bức, uống rượu ngủ li bì đến hôm sau mới tỉnh. Chính sự giao phó cả cho Trần Tự Khánh.
</p>
<h3>Tự Khánh thu phục các sứ quân</h3>
<p>Mùa hè năm 1217, Thái úy Tự Khánh chia quân làm sáu đạo đánh Nguyễn Nộn. Nộn dẫn quân đánh bất ngờ, tập kích Phạm Ân. Quân Ân thua tại cửa đầm Lãnh Kinh, bị Nộn giết hơn 50 người. Nguyễn Nộn thừa thắng tập kích ải đạo nhưng gặp quân Thái úy giao chiến, quân Nguyễn tan vỡ.
</p>
<p>Đoàn Thượng đem quân đầu hàng triều đình. Vua phong Đoàn Thượng làm vương vẫn cho giữ vùng Hồng châu. Tự Khánh gả em gái là Trần Tam Nương cho Hồng hầu là Đoàn Văn Lôi, vỗ yên Hồng châu.
</p>
<p>Thái úy Tự Khánh dẫn quân đánh các ấp ở Phong Châu, các ấp đều ra hàng. Lại dẫn quân đánh các thế lực Đỗ Bị ở Cam Giá, đánh Hiển Tín vương Bát ở Từ Liêm, đều bình định được.
</p>
<p>Nắm 1218, Tự Khánh dẫn quân các đạo đánh Nguyễn Nộn ở Bắc Giang, sai phá đê cho nước tràn vào các hương ấp. Lại Linh theo thế nước đánh, quân Nộn đại bại, bắt được vợ con Nộn. Nộn cùng khoảng hơn 100 người lui về giữ Phù Ninh.
</p>
<p>Mùa đông, quân Chiêm Thành và Chân Lạp đến cướp châu Nghệ An, Lý Bất Nhiễm đánh tan, được thăng tước hầu.
</p>
<p>Năm 1219, tháng 6, vua đến trạm Triều Đông duyệt quân, đánh Nộn nhưng không thắng. Tự Khánh muốn cùng tướng giữ Nam Sách là Phạm Dĩ bàn mưu đánh Nguyễn Nộn nhưng Dĩ bị ốm chết, Nguyễn Nộn chiếm ấp. Tự Khánh sai các tướng đánh tan quân Nguyễn Nộn tại Nam Sách. Quân Tự Khánh chiếm được Nam Sách, Nộn rút về động An Đinh, Tự Khánh sai đánh nhưng không thắng nổi.
</p>
<p>Mùa đông tháng 12, Nguyễn Nộn bệnh nặng. Thái úy đóng quân tại trạm Triều Đông thì nghe tin Nguyễn Nộn đã mất. Tướng Nộn là Phí Thám đưa Đàm Thái hậu cùng các vương tử, công chúa đến đầu hàng Thái úy. Đại tướng của Nộn là Nguyễn Doanh cũng ra hàng. Bắc Giang từ đấy được bình định.
</p>
<p>Sách <i>Việt sử lược</i> không còn nhắc đến Nguyễn Nộn kể từ sau. Tuy nhiên các bộ Chính sử như <i><a href="__missing__">Đại Việt sử ký toàn thư</a></i><i><a href="__missing__">Khâm định Việt sử Thông giám cương mục</a></i> lại chép khác về Nguyễn Nộn. Đại Việt sử ký không đề cập đến Nguyễn Nộn trước năm 1218, chép rằng vào mùa thu năm ấy, vua xuống chiếu bằt cư sĩ ở chùa Phù Đổng là Nguyễn Nộn, vì "bắt được vàng ngọc mà không đem dâng". Cương mục lại đặt sự kiện trên vào năm 1220.
</p>
<p><i>Đại Việt sử ký</i> miêu tả vào năm 1219, Tự Khánh tâu xin tha cho Nguyễn Nộn cho đánh giặc tại Quảng Oai để chuộc tội. Năm 1220, Nguyễn Nộn giữ hương Phù đổng, tự xưng là Hoài Đạo Vương, dâng biểu xưng thần, sau đó thế quân của Nguyễn Nộn ngày càng mạnh lên. Sách chép sự cát cứ Nguyễn Nộn, Đoàn Thượng kéo dài đến khi Nguyễn Nộn chết vào năm 1229 mới kết thúc.
</p>
<p><i><a href="__missing__">An Nam chí lược</a></i> đời Trần chỉ chép: <i>"Lúc ấy tướng giặc châu Quốc Oai là Nguyễn Niên, xưng hiệu Kim Thiên đại vương, cùng với người Hồng Lộ là Đoàn Ma Lôi nổi dậy làm phản. Trần Thừa cùng em là Kiến Quốc (tức Trần Tự Khánh) đánh không yên được, bèn giảng hòa với Ma Lôi, hợp sức đánh Niên, bị Niên đánh bại. Sau Niên chết loạn mới yên."</i></p>
<p>Năm 1220, tháng 4, Trần Tự Khánh cùng Trần Thừa phát binh đánh trại Quy Hóa của Hà Cao. Tự Khánh cùng Trần Thừa theo sông Quy Hóa, Lại Linh và Phan Cụ theo sông Tuyên Quang. Phan Cụ sa lầy, bị tướng Nguyễn Nãi chém. Hà Cao bị quân Tự Khánh vây bốn phía, bèn cùng vợ con thắt cổ chết. Châu Thượng Nguyên và Tam Đái về tay triều đình.
</p>
<p>Tháng 12 năm 1223, Trần Tự Khánh chết, được truy phong làm <i>Kiến Quốc Đại vương</i>. Phong <a href="__missing__">Trần Thừa</a> làm Phụ quốc Thái uý, khi vào chầu không xưng tên. Phùng Tá Chu làm Nội thị phán thủ, thăng Trần Báo làm Hiển Thành vương.
</p>
<h2>Chuyển giao Lý-Trần</h2>
<h3>Huệ Tông nhường ngôi cho Chiêu Thánh</h3>
<p>Sử sách chép sức khỏe Huệ Tông ngày càng giảm sút. Mùa xuân 1221: <i>"tìm khắp thầy thuốc trong nước để chữa bệnh cho vua, nhưng không hiệu nghiệm gì"</i>. Năm 1224: <i>"Bệnh của vua ngày càng tăng mà không có con trai để nối nghiệp lớn, hai công chúa đều được chia các lộ làm ấp thang mộc"</i>.
</p>
<p>Tháng 10 năm 1224, Lý Huệ Tông ra chỉ lập <a href="__missing__">công chúa Chiêu Thánh</a>, lúc này mới 6 tuổi, làm <i>Hoàng Thái tử</i> rồi truyền ngôi, đổi niên hiệu là <i>Thiên Chương Hữu Đạo</i> (天彰有道), tôn hiệu là <b>Chiêu Hoàng</b> (昭皇). Lý Huệ Tông làm Thái thượng hoàng.
</p>
<p>Họ Trần được ban nhiều chức tước quan trọng, con cháu được tuyển vào cung để sung vào hầu và các chức vụ trong đại nội. <a href="__missing__">Trần Thủ Độ</a> được phong làm Chỉ huy sứ quản lĩnh các quân điện tiền hộ vệ, coi giữ mọi việc quân trong ngoài thành thị. Cháu gọi Thủ Độ bằng bác là Trần Bất Cập làm Cận thị thự lục cục chi hậu, giữ việc hầu cận vua; Trần Thiêm làm Chi ứng cục. Lúc này, <a href="__missing__">Trần Cảnh</a> là con trai của Trần Thừa, mới tám tuổi được làm Chính thủ đưa vào hầu gần Chiêu Hoàng, ban đầu chỉ là ở bên ngoài điện, sau đó phụ trách đưa nước rửa mặt cho Chiêu Hoàng nên vào hầu bên trong. Do Chiêu Hoàng gần gũi hay trêu đùa Trần Cảnh, họ Trần lấy cớ đó dựng nên cuộc hôn nhân giữa Trần Cảnh và Chiêu Hoàng.
</p>
<h3>Chiêu Hoàng nhường ngôi cho Trần Cảnh, nhà Trần khởi lập</h3>
<p>Chính sử chép: "(Trần Cảnh) giữ việc bưng nước rửa, nhân thế vào hầu bên trong. Chiêu Hoàng trông thấy làm ưa, mỗi khi chơi đêm cho gọi Cảnh đến cùng chơi, thấy Cảnh ở chỗ tối thì thân đến trêu chọc, hoặc nắm lấy tóc, hoặc đứng lên bóng. Có một hôm, Cảnh
bưng chậu nước hầu, Chiêu Hoàng rửa mặt lấy tay vốc nước té ướt cả mặt Cảnh rồi cười trêu, đến khi Cảnh bưng khăn trầu thì lấy khăn ném cho Cảnh". Cảnh đều về tâu với Thủ Độ. Tháng 10 năm 1225, Thủ Độ tự đem gia thuộc thân thích vào trong cung cấm, đóng cửa thành và các cửa cung, sai người coi giữ, các quan vào chầu không được vào. Thủ Độ loan báo rằng: <i>"Bệ hạ đã có chồng rồi"</i>. Các quan đều vâng lời, xin chọn ngày vào chầu. Tháng 10, ngày 21, các quan vào chầu lạy mừng.
</p>
<p>Chiêu Hoàng ra chiếu rằng:
</p>
<i>"Từ xưa nước Nam Việt ta đã có đế vương trị thiên hạ. Duy triều Lý ta vâng chịu mệnh trời, có cả bốn biển, các tiên thánh truyền nối hơn hai trăm năm, chỉ vì thượng hoàng có bệnh, không người nối dõi, thế nước nghiêng nguy, sai trẫm nhận minh chiếu, cố gượng lên ngôi, từ xưa đến giờ chưa từng có việc ấy. Khốn nổi trẫm là nữ chúa, tài đức đều thiếu, không người giúp đỡ, giặc cướp nổi lên như ong, làm sao mà giữ nổi ngôi báu nặng nề? Trẫm dậy sớm thức khuya, chỉ sợ không cáng đáng nổi, vẫn nghĩ tìm người hiền lương quân tử để cùng giúp chính trị, đêm ngày khẩn khoản đến thế là cùng cực rồi, Kinh thi có nói "Quân tử tìm bạn, tìm mãi không được, thức ngủ không nguôi, lâu thay lâu thay". Nay trẫm suy đi tính lại một mình, duy có Trần Cảnh là người văn chất đủ vẻ, thực thể cách quân tử hiền nhân, uy nghi đường hoàng, có tư chất thánh thần văn võ, dù đến Hán Cao Tổ, Đường Thái Tông cũng không hơn được. Sớm hôm nghĩ chín từ lâu nghiệm xem nên nhường ngôi báu, để thỏa lòng trời, cho xứng lòng trẫm, mong đồng lòng hết sức, cùng giúp vận nước, hưởng phúc thái bình. Vậy bố cáo thiên hạ để mọi người điều biết."</i><p>Theo <i>Đại Việt sử ký</i> thì Lý Chiêu Hoàng lên ngôi vào tháng 6 năm Ất Dậu (năm 1225) và nhường ngôi vào tháng 11, chỉ vỏn vẹn gần nửa năm trên ngai vàng. Sách này chép: tháng 12, 1225 Huệ Tông triệu Phùng Tá Chu viết:
</p>
<i>"Trẫm vì bất đức, bị trời bỏ, không có con nối, truyền ngôi cho con gái. Một âm trị muôn dương, người đời không thuận, tất sinh hối hận. Xét kỹ, không bằng noi xa Đường Nghiêu, gần theo Nhân Tổ, chọn người hiền mà trao. Nay thấy con trai thứ hai của Thái úy tuy còn nhỏ, nhưng tướng mạo phi thường, ắt có thể cứu đời an dân. Muốn nhận làm con, trao ngôi báu, lại gả Chiêu vương cho. Khanh hãy nói với Thái úy giúp trẫm."</i><p>Tả phụ Nguyễn Chính Lại nói với Trần Thừa:
</p>
<i>"Nhà Lý ta có nước, vua hiền thì có đến sáu, bảy người gầy dựng nên cơ nghiệp, mà cái đức của họ lại có thừa, để lại cái ơn trạch thấm nhuần vào lòng người đã lâu dài rồi. Một sớm, nhà vua sợ có người khác họ làm việc kế tự nên mới có ý thăm dò thử, để xem cái ý của ta như thế nào đấy. Nếu ta nhân đó mà nhận lời, thiên hạ tất sẽ bảo Thái úy thực đã có ý soán nghịch".</i><p>Thượng Phẩm Phụng ngự Trần Thủ Độ nói rằng:
</p>
<i>"Lời Tả Phụ sai rồi! Nếu mà Hoàng thượng có con trai mà lại nhường ngôi cho nhị lang (chỉ Trần Cảnh) thì việc trái nghĩa ấy ta không thể vâng chiếu được. Nay, Hoàng thượng không người kế tự, ý muốn chọn người hiền để phó thác ngôi cao. Đó là vua bắt chước việc nhường ngôi của nghiêu Thuấn thuở xa xưa. Vậy mà lo ngại nữa sao? Huống chi, ngôi chí tôn không thể để khuyết lâu, mà ý thoái lui của Hoàng thượng thì đã quyết, Hoàng thượng đã dứt khoát chọn người khác họ để cho nối ngôi, liệu ta không muốn nghe theo mà được chăng? Nhị lang được Hoàng thượng chọn cũng là ý trời, trời đã ban cho mà không nhận là có tội ấy. Xin quan Thái úy hãy xét kỹ".</i><p>Ngày mồng một tháng Chạp, cho mở hội lớn, sai văn võ bá quan, điều khiển thuyền rồng, chuẩn bị pháp giá, đến phủ Tinh Cương nghênh rước Trần Thừa. Chiêu Hoàng ngự trên sập báu tại điện Thiên An, các quan mặc triều phục vào chầu, lạy ở dưới sân. Chiêu Hoàng trút bỏ áo ngự mời Trần Cảnh lên ngôi hoàng đế. Đổi niên hiệu là <b>Kiến Trung</b> (建中), đại xá thiên hạ, xưng là Thiện Hoàng, sau đổi là Văn Hoàng. Bầy tôi dâng tôn hiệu là <i>Khải Thiên Lập Cực Chí Nhân Chương Hiếu Hoàng Đế</i>. Kiến Trung Hoàng đế sau được tôn miếu hiệu là <b><a href="__missing__">Trần Thái Tông</a></b>, trị vì hơn 50 năm, mở ra thời kỳ <a href="__missing__">triều Trần</a> trong lịch sử Việt Nam.
</p>
<p>Trần Thủ Độ được phong làm <i>Thái sư thống quốc</i> Tôn <a href="__missing__">Thuận Trinh hoàng hậu</a> Trần thị làm Thái hậu, Chiêu Hoàng làm <i>Chiêu Thánh vương hậu</i>, phong em vua (khi ấy mới 2 tuổi) là Nhật Hiệu làm <i>Khâm Thiên Đại vương</i>.
Trần Thủ Độ lúc này tâu:
</p>
<i>"Hiện nay giặc cướp đều nổi, họa loạn ngày tăng. Đoàn Thượng giữ mạn đông, Nguyễn Nộn giữ mạn bắc, các châu Quảng Oai, Đại Viễn cũng chưa dẹp yên. Nhà Lý suy yếu, thế nước nghiêng nguy, nữ chúa Chiêu Hoàng không gánh vác nổi, mới uỷ thác cho nhị lang. Nhưng Nhị lang chưa am hiểu việc nước, chính sự nhiều chổ thiếu sót, vận nước mới mở, lòng dân chưa phục, mối họa không phải là nhỏ. Ta tuy là chú nhưng không biết chữ nghĩa gì, còn phải rong ruổi đông tây để chống giặc cướp, không gì bằng mời thánh phụ làm thượng hoàng tạm coi việc nước, một hai năm sau thiên hạ nhất thống, lại giao quyền chính cho Nhị lang."</i><p>Các quan đều mời Thánh phụ Trần Thừa làm nhiếp chính. Huệ Tông cùng mẹ là Đàm hậu cùng xuất gia ở chùa Phù Liệt, hiệu là <i>Huệ Quang đại sư</i>.
</p>
<p>Tháng 8 năm 1226, Trần Thủ Độ bức tử Lý Huệ Tông ở chùa Chân Giáo. Trước đó, Huệ Tông có lần ra chơi ở chợ Đông, dân chúng tranh nhau chạy đến xem, có người thương khóc. Thủ Độ sợ lòng người nhớ vua cũ, sinh biến loạn, cho dời đến ở chùa Chân Giáo trong cung. Bề ngoài giả vờ là để phụng sự, mhưng bên trong thực ra là để dễ bề giữ chặt.
</p>
<p><i>Sử ký toàn thư</i> chép: Thủ Độ qua trước cửa chùa, thấy Huệ Tông ngồi xổm nhổ cỏ, Thủ Độ nói: "Nhổ cỏ thì phải nhổ cả rễ sâu". Huệ Tông đứng dậy, phủi tay nói: "Điều ngươi nói, ta hiểu rồi". Đoạn Thủ Độ sai người bày biện hương hoa đến bảo Huệ Tông: "Thượng phụ sai thần đến mời". Thượng hoàng nhà Lý nói: "Ta tụng kinh xong sẽ tự tử". Nói rồi vào buồng ngủ khấn rằng: <i>"Thiên hạ nhà ta đã vào tay ngươi, ngươi lại còn giết ta, ngày nay ta chết, đến khi thác con cháu ngươi cũng sẽ bị như thế".</i> Xong vua cũ thắt cổ tự tử ở vườn sau chùa. Thủ Độ ra lệnh cho các quan đến khóc, khoét tường thành đưa linh cữu ra phường Yên Hoa để thiêu, chứa xương vào tháp chùa Bảo Quang, tôn miếu hiệu là Huệ Tông.
</p>
<p><i>Thuận Trinh Thái hậu</i> vợ Huệ Tông được đem gả cho Trần Thủ Độ, bị giáng thành <i>Thiên Cực Công chúa</i>. Các cung nhân và con gái họ hàng nhà Lý Huệ Tông bị đưa gả cho các tù trưởng người Man. Theo <i>Khâm định Việt sử Thông giám cương mục</i>, Thuận Trinh Hoàng hậu cùng với Thủ Độ được cho là đã tư thông từ trước, cùng bàn mưu ở trong cung để vua nhà Lý truyền ngôi cho nhà Trần. <i><a href="__missing__">Việt sử tiêu án</a></i> của Ngô Thì Sĩ (thế kỷ 18) cũng chỉ trích rất gắt gao Thủ Độ và Huệ hậu trong việc này. Sau này Trần Thái Tông không nỡ gọi bà là công chúa do bà từng là hoàng hậu của triều Lý, nên có ban danh cho bà là <i>Quốc mẫu</i>.
</p>
<p>Tháng 10 năm 1226, Trần Thừa được tôn làm <i>Thượng hoàng</i>, ở cung Phụ Thiên.<b>Thượng hoàng Trần Thừa</b> thực tế trở thành người nhiếp chính, nằm quyền của nhà Trần cho đến lúc mất vào năm 1234. Trần Thái Tông tôn mẹ là Thuận Từ Hoàng hậu Lê thị làm <i>Quốc Thánh Hoàng thái hậu</i>.
</p>
<p>Năm 1232, tháng 6, ban bố các chữ quốc húy và miếu húy. Vì <a href="__missing__">Nguyên tổ</a> tên húy là Lý, mới đổi triều Lý làm triều Nguyễn, vả lại cũng để dứt bỏ lòng mong nhớ của dân chúng đối với nhà Lý.
</p>
<p>Mùa đông năm 1232, người họ Lý về quê ngoại nhà Lý ở làng Hoa Lâm, Thái Đường làm lễ tế các vua nhà Lý. Thủ Độ cho ngầm đào hố sâu, làm nhà lên trên, đợi khi mọi người uống rượu say, giật máy chôn sống hết các tôn thất nhà Lý.
</p>
<p>Năm 1234, Thượng hoàng Trần Thừa mất. Lấy Thái úy <a href="__missing__">Trần Liễu</a>, con trai cả của Trần Thừa làm phụ chính (輔政), đồng thời Trần Liễu được sách phong làm <b>Hiển Hoàng</b> (顯皇). Phong Trần Thủ Độ làm <i>Thống quốc thái sư</i>, Phùng Tá Chu làm Hưng Nhân Vương. Tuy nhiên không lâu sau vào năm 1236, Trần Liễu được cho là đã cưỡng dâm một cung phi cũ của triều Lý nên bị giáng làm Hoài Vương.
</p>
<p>Trần Thủ Độ trở thành phụ chính, nắm mọi quyền hành trong triều khi Thái Tông còn trẻ. Sử ký Toàn thư chép: Thái Tông lấy được thiên hạ đều là mưu sức của Thủ Độ cả, cho nên quốc gia phải nhờ cậy, quyền hơn cả vua. Bấy giờ có kẻ đàn hặc ông, vào gặp Thái Tông khóc mà nói rằng: <i>"Bệ hạ còn thơ ấu mà Thủ Độ quyền át cả vua, xã tắc rồi sẽ ra sao?"</i>. Thái Tông lập tức lệnh xe ngựa đến dinh Thủ Độ, bắt cả người đàn hặc ấy đem theo và nói hết những lời người ấy nói cho Thủ Độ biết. Thủ Độ trả lời: <i>"Đúng như những lời hắn nói"</i>. Rồi lấy ngay tiền lụa thưởng cho người ấy.
</p>
<p>Trước đây con cả của Huệ Tông là <a href="__missing__">Thuận Thiên Công chúa</a> cũng được gả cho Trần Liễu. Năm 1237, sau gần 10 năm mà Thái Tông cùng Chiêu Thánh không có con, Thủ Độ lại ép Thái Tông phải bỏ Chiêu Thánh để lấy chị dâu là Thuận Thiên Công chúa đang có thai ba tháng. Trần Thái Tông cảm thấy chuyện này hổ thẹn, đang đêm trốn khỏi kinh thành lên chùa ở Yên Tử nương nhờ. Trần Thủ Độ vừa dỗ vừa gây sức ép, cuối cùng Thái Tông cũng phải chịu nghe theo. Thuận Thiên Công chúa được lập làm hoàng hậu thay thế, Chiêu Thánh bị giáng làm Công chúa, về sau xuất gia. Vì chuyện này, Hoài Vương Trần Liễu nổi loạn, nhờ có Thái Tông tha cho nên khỏi tội chết.
</p>
<h3>Quy thuận các thế lực cát cứ, thống nhất giang sơn</h3>
<p><i>Đại Việt sử ký Toàn thư</i> không hề nhắc đến xung đột giữa các sứ quân họ Trần, họ Đoàn, họ Nguyễn từ năm 1213 đến năm 1219. Các sự kiện trong khoảng thời gian này cũng được ghi chép rất vắn tắt, có năm không chép gì. Sử ký Toàn thư cũng không nhắc đến việc Trần Tự Khánh vỗ yên họ Đoàn, dẹp Nguyễn Nộn cùng các sứ quân, thay vào đó cho rằng vai trò này là của Trần Thủ Độ trong giai đoạn sau khi nhà Trần được lập. Những chi tiết trong phần này đều theo <i>Sử ký Toàn thư</i> chép, chưa rõ về độ xác thực do có mâu thuẫn về thời gian với <i>Việt sử lược</i>.
</p>
<p>Đại Việt Sử ký Toàn thư chỉ nhắc đến Nguyễn Nộn lần đầu vào năm 1218 và chép rằng sau năm 1219, Nguyễn Nộn vẫn còn sống, giữ hương Phù đổng, tự xưng là <i>Hoài Đạo Vương</i>; sau khi Trần Tự Khánh mất, thế quân của Nộn lại ngày càng mạnh.
</p>
<p>Sau khi Trần Thái Tông lên ngôi, Người Man ở vùng núi <a href="__missing__">Tản Viên</a> và vùng núi Quảng Oai, Nguyễn Nộn ở Bắc Giang và Đoàn Thượng ở Hồng Châu, người châu Đại Viễn vẫn tiếp tục cát cứ. Vua sai Trần Thủ Độ đi đánh dẹp yên được, trừ Nguyễn Nộn, Đoàn Thượng binh thế còn mạnh, không thắng được. Mới phong cho Nộn làm <i>Hoài Đạo Vương</i>, chia cho các huyện ở Bắc Giang và Đông Ngạn, cũng hẹn phong Đoàn Thượng làm vương, hẹn ngày đến thề nhưng Thượng không đến.
</p>
<p>Năm 1225, Thánh phụ Trần Thừa đánh châu Nghệ An, chiếm được. Năm 1226, Phùng Tá Chu được phong làm Tri phủ Nghệ An.
</p>
<p>Tháng 12 năm 1228, Nguyễn Nộn đem quân đánh, chém được Đoàn Thượng, thống lĩnh cả quân của Thượng, cướp bắt con trai, con gái, tài sản, trâu ngựa đất Hồng Châu. Con của Thượng là Đoàn Văn đem gia thuộc đến hàng. Thanh thế của Đoàn Thượng lừng lẫy. Thủ Độ lo lắng, chia quân chống giữ và sai sứ đem thư đến chúc mừng, phong Nộn làm <i>Hoài Đạo Hiếu Vũ Vương</i>, đưa công chúa Ngoạn Thiềm gả cho Nguyễn Nộn để ngầm dò la tin tức. Nộn để công chúa ở riêng phòng tại doanh trại nên không cho công chúa biết được gì cả.
</p>
<p>Tháng 3 năm 1229, Nguyễn Nộn tự xưng là <i>Đại Thắng Vương</i>, ăn chơi quá độ. Nhưng Nộn tuổi cao, biết mình không thể đối lập với nhà Trần được, nên dự định tháng 10 sẽ đến chầu, nhưng lại bị bệnh nặng. Vua sai nội nhân tới hỏi thăm, Nộn cố gượng ăn cơm, phi ngựa để tỏ ra còn khoẻ mạnh, nhưng không bao lâu thì chết. Sau khi Nguyễn Nộn chết, thiên hạ lại quy về một mối.
</p>
<h2>Xem thêm</h2>
<ul><li><a href="__missing__">Loạn 12 sứ quân</a></li>
<li><a href="__missing__">Chiến tranh kế vị thời Tiền Lê</a></li>
<li><a href="__missing__">Khủng hoảng cuối thời Lê sơ</a></li>
</ul>
<h2>Tham khảo</h2>
<ul><li><a href="__missing__">Ngô Sĩ Liên</a> (1993), <i><a href="__missing__">Đại Việt sử ký toàn thư</a>, Bản Kỷ</i> , <a href="__missing__">Hanoi</a>: Social Science Publishing House</li>
<li>Khuyết danh (1377), <i><a href="__missing__">Đại Việt sử lược</a></i>, quyển III: Vua Cao Tông, Vua Huệ Tông</li>
<li><a href="__missing__">Quốc sử quán triều Nguyễn</a> (1884), <i><a href="__missing__">Khâm định Việt sử Thông giám cương mục</a></i>, <a href="__missing__">Hanoi</a>: Education Publishing House</li>
</ul>
<h2>Chú giải</h2>
<h2>Chú thích</h2>
+425
View File
@@ -0,0 +1,425 @@
<blockquote><br><b>Nhà Lý</b> (<a href="__missing__">chữ Nôm</a>: 茹李, <a href="__missing__">chữ Hán</a>: 李朝, <a href="__missing__">Hán Việt</a>: <i>Lý triều</i>), đôi khi gọi là nhà <b>Hậu Lý</b> (để phân biệt với <a href="__missing__">triều đại</a><a href="__missing__">Tiền Lý</a> do <a href="__missing__">Lý Bí</a> thành lập) là một triều đại trong nền <a href="__missing__">quân chủ Việt Nam</a>. Triều đại này bắt đầu khi <a href="__missing__">Lý Công Uẩn</a> lên ngôi vào <a href="__missing__">tháng 10</a> âm lịch năm <a href="__missing__">1009</a> sau khi giành được quyền lực từ tay <a href="__missing__">nhà Tiền Lê</a>. Triều đại này trải qua 9 vị <a href="__missing__">hoàng đế</a> và chấm dứt khi <a href="__missing__">Lý Chiêu Hoàng</a>, lúc đó mới có 7 tuổi, bị ép <a href="__missing__">thoái vị</a> để nhường ngôi cho chồng là <a href="__missing__">Trần Cảnh</a> vào năm <a href="__missing__">1225</a> tổng cộng là 216 năm.</blockquote>
<p>Trong thời đại này, lần đầu tiên nhà Lý đã giữ vững được chính quyền một cách lâu dài đến hơn 200 năm, khác với các vương triều cũ trước đó chỉ tồn tại hơn vài chục năm. Vào năm <a href="__missing__">1054</a>, <a href="__missing__">Lý Thánh Tông</a> đã đổi quốc hiệu từ <b><a href="__missing__">Đại Cồ Việt</a></b> (大瞿越) thành <b><a href="__missing__">Đại Việt</a></b> (大越), mở ra kỷ nguyên Đại Việt rực rỡ nhất trong lịch sử Việt Nam.
</p>
<p>Trong nước, mặc dù các vị Hoàng đế đều sùng bái <a href="__missing__">Phật giáo</a> nhưng ảnh hưởng của <a href="__missing__">Nho giáo</a> cũng rất cao với việc mở các <a href="__missing__">trường đại học</a> đầu tiên là <a href="__missing__">Văn miếu</a> (<a href="__missing__">1070</a>) và <a href="__missing__">Quốc Tử giám</a> (<a href="__missing__">1076</a>) và tổ chức các khoa thi để chọn người hiền tài không có nguồn gốc xuất thân là quý tộc ra giúp nước. Khoa thi đầu tiên được mở vào năm <a href="__missing__">1075</a>, và <a href="__missing__">Trạng nguyên</a> đầu tiên là <a href="__missing__">Lê Văn Thịnh</a>. Về thể chế chính trị, đã có sự phân cấp quản lý rõ ràng hơn và sự cai trị đã dựa nhiều vào pháp luật hơn là sự chuyên quyền độc đoán của cá nhân. Sự kiện nhà Lý chọn thành <a href="__missing__">Đại La</a> làm kinh đô, đổi tên thành <b><a href="__missing__">Thăng Long</a></b> (昇龍) đã đánh dấu sự cai trị dựa vào sức mạnh kinh tế và lòng dân hơn là sức mạnh quân sự để phòng thủ như các triều đại trước. Những danh thần như <a href="__missing__">Lê Văn Thịnh</a>, <a href="__missing__">Bùi Quốc Khái</a>, <a href="__missing__">Doãn Tử Tư</a>, <a href="__missing__">Đoàn Văn Khâm</a>, <a href="__missing__">Lý Đạo Thành</a>, <a href="__missing__">Tô Hiến Thành</a>,... đã góp sức lớn về văn trị và chính trị, tạo nên một nền văn hiến rực rỡ của triều đại nhà Lý.
</p>
<p><a href="__missing__">Quân đội nhà Lý</a> được xây dựng có hệ thống đã trở nên hùng mạnh, ngoài chính sách <a href="__missing__">Ngụ binh ư nông</a>, các Hoàng đế nhà Lý chủ trương đẩy mạnh các lực lượng <a href="__missing__">thủy binh</a>, <a href="__missing__">kỵ binh</a>, <a href="__missing__">bộ binh</a>, <a href="__missing__">tượng binh</a>,... cùng số lượng lớn vũ khí <a href="__missing__">giáo</a>, <a href="__missing__">mác</a>, <a href="__missing__">cung</a>, <a href="__missing__">nỏ</a>, <a href="__missing__">khiên</a> và sự hỗ trợ công cụ công thành như <a href="__missing__">máy bắn đá</a>, những kỹ thuật tiên tiến nhất học hỏi từ quân sự <a href="__missing__">Nhà Tống</a>. Việc trang bị đầu tư và quy mô khiến quốc lực dồi dào, có đủ khả năng thảo phạt các bộ tộc man di ở biên giới, cũng như quốc gia kình địch phía Nam là <a href="__missing__">Chiêm Thành</a> hay cướp phá thường xuyên, bảo vệ thành công lãnh thổ và thậm chí mở rộng hơn vào năm <a href="__missing__">1069</a>, khi <a href="__missing__">Lý Thánh Tông</a> chinh phạt <a href="__missing__">Chiêm Thành</a> và thu về đáng kể diện tích lãnh thổ. Quân đội nhà Lý còn vẻ vang hơn khi đánh bại quân đội của <a href="__missing__">Vương quốc Đại Lý</a>, <a href="__missing__">Đế quốc Khmer</a> và đặc biệt là sự kiện danh tướng <a href="__missing__">Lý Thường Kiệt</a> dẫn quân đội đánh phá vào lãnh thổ <a href="__missing__">Nhà Tống</a> vào năm <a href="__missing__">1075</a>, dẫn đến <a href="__missing__">Trận Như Nguyệt</a> xảy ra trên đất Đại Việt và quân đội hùng mạnh của nhà Tống hoàn toàn thất bại.
</p>
<p>Bên cạnh quân sự, nhà Lý còn nổi tiếng về nghệ thuật với kinh đô Thăng Long một quần thể kiến trúc vĩ đại và hoa lệ. Những hiện vật về mái ngói, linh thú trang trí trên nóc mái và các loại gạch lót cho thấy trình độ mỹ nghệ cao của các nghệ nhân thời Lý. <a href="__missing__">Con Rồng thời Lý</a> được xem là hình tượng đỉnh cao của nghệ thuật tạo hình đương thời, bên cạnh các tượng Phật lớn còn lại cho thấy tư duy đồ sộ của người thời Lý là rất lớn. 3 trong 4 bảo vật của <a href="__missing__">An Nam tứ đại khí</a><a href="__missing__">Tháp Báo Thiên</a>, <a href="__missing__">Chuông Quy Điền</a> và Tượng phật <a href="__missing__">Chùa Quỳnh Lâm</a> được tạo ra trong thời đại nhà Lý. Cùng với sự sùng đạo Phật, những tinh hoa nhất của nghệ thuật thời Lý đa phần đều thể hiện qua các bức tượng Phật, chùa chiền.
</p>
<h2>Tôn xưng</h2>
<p>Theo <i><a href="__missing__">Đại Việt sử ký toàn thư</a></i>, vào năm Thiên Thành thứ 7 (1034), <a href="__missing__">Lý Thái Tông</a> ban chiếu định các đình thần khi tâu việc phải gọi <a href="__missing__">vua</a> là "triều đình" (朝庭). Đến <a href="__missing__">Lý Thánh Tông</a> lại đổi là "vạn thặng" (萬乘); danh xưng này lấy ý từ sách <i><a href="__missing__">Mạnh tử</a></i>: "Một trời muôn xe" (一天萬乘), "Giết một vị vua có vạn cỗ xe thì cũng không khác việc giết một kẻ thường dân [làm nhục mình]" (視刺萬乘之君、若刺褐夫). Sau cùng, <a href="__missing__">Lý Cao Tông</a> yêu cầu quan viên gọi <a href="__missing__">vua</a> là "phật" (佛).
</p>
<h2>Lịch sử</h2>
<h3>Thành lập</h3>
<p>Việc hình thành nhà Lý gắn liền với sự kiện <a href="__missing__">Lý Công Uẩn</a> thay ngôi <a href="__missing__">Lê Long Đĩnh</a>. Các bộ sử cổ của <a href="__missing__">Việt Nam</a> như <i><a href="__missing__">Việt sử lược</a></i>, <i><a href="__missing__">Đại Việt sử ký toàn thư</a></i><i><a href="__missing__">Khâm định Việt sử thông giám cương mục</a></i> thống nhất chép rằng <a href="__missing__">tháng 10</a> năm <a href="__missing__">1009</a>, vua <a href="__missing__">nhà Tiền Lê</a><a href="__missing__">Long Đĩnh</a> mất, các con còn nhỏ, quan Điện tiền Chỉ huy sứ là Lý Công Uẩn được sự ủng hộ của Chi nội là <a href="__missing__">Đào Cam Mộc</a> cùng thiền sư <a href="__missing__">Vạn Hạnh</a> đã lên ngôi hoàng đế; các quan trong triều đều nhất trí suy tôn.
</p>
<p>Riêng trong sách <i><a href="__missing__">Đại Việt sử ký tiền biên</a></i>, sử gia <a href="__missing__">Ngô Thì Sĩ</a> ghi lại lời nghi vấn về việc Lý Công Uẩn nhân lúc <a href="__missing__">Long Đĩnh</a> bệnh tật, sai người vào đầu độc giết đi rồi giấu kín việc đó, nên sử không được chép. Tuy nhiên, các bộ sử, kể cả <i><a href="__missing__">Đại Việt sử ký tiền biên</a></i>, đều ghi nhận việc trăm quan của triều đình cũ suy tôn <a href="__missing__">Lý Công Uẩn</a> khi ông lên ngôi và sử sách không ghi nhận một cuộc nổi dậy nào của những người nhân danh trung thành với nhà <a href="__missing__">Tiền Lê</a> để chống lại nhà Lý sau khi triều đại này hình thành.
</p>
<p>Nhà sử học <a href="__missing__">Lê Văn Hưu</a> viết: <i>Lý Công Uẩn người <a href="__missing__">châu Cổ Pháp</a> (<a href="__missing__">Từ Sơn</a>, Bắc Ninh). Thuở nhỏ làm con nuôi nhà sư Lý Khánh Văn, theo học ở <a href="__missing__">chùa Lục Tổ</a> của sư Vạn Hạnh. Sau đó làm quan nhà Lê, giữ đến chức Điện tiền Chỉ huy sứ, chỉ huy cấm quân ở kinh đô Hoa Lư. Ông là người có học, có đức và có uy tín nên được triều thần nhà Lê quý trọng.</i></p>
<p>Việc Lý Công Uẩn trưởng thành, thăng tiến trong bộ máy <a href="__missing__">nhà Tiền Lê</a> và lên ngôi vua có vai trò gây dựng rất lớn của thiền sư <a href="__missing__">Vạn Hạnh</a>. Các nhà nghiên cứu thống nhất ghi nhận vai trò của <a href="__missing__">sư Vạn Hạnh</a> và Đào Cam Mộc trong việc đưa Lý Công Uẩn lên ngôi nhanh chóng, êm thấm và kịp thời, khiến cục diện chính trị nước <a href="__missing__">Đại Cồ Việt</a> được duy trì ổn định trong quá trình chuyển giao quyền lực, không gây xáo trộn từ trong cung đình lẫn bên ngoài. Việc lên ngôi nhanh chóng và êm thuận của Lý Công Uẩn được xem là điều kiện thuận lợi và nền tảng để ông yên tâm bắt tay xây dựng đất nước thống nhất, mở đầu một vương triều thịnh vượng lâu dài, mở ra thời kỳ phục hưng toàn diện của đất nước.
</p>
<h3>Dời đô về Đại La</h3>
<p>Gần 1 năm sau khi lên ngôi vua, tháng 7 âm lịch năm <a href="__missing__">1010</a>, <a href="__missing__">Lý Thái Tổ</a> tiến hành dời đô từ <a href="__missing__">Hoa Lư</a> (<a href="__missing__">Ninh Bình</a>) về <a href="__missing__">Đại La</a> (<a href="__missing__">Hà Nội</a>). Ông đã ban hành <a href="__missing__">Chiếu dời đô</a> vào mùa xuân năm <a href="__missing__">1010</a>.
</p>
<p>Việc tìm đất, nghị bàn đến việc chuẩn bị để dời đô diễn ra tương đối khẩn trương. Từ <a href="__missing__">Hoa Lư</a> về thành <a href="__missing__">Đại La</a> có thể đi theo đường bộ hoặc theo đường thủy. Sử cũ không ghi chép chi tiết nhà Lý dời đô bằng đường nào. Các nhà nghiên cứu đã kết luận: triều nhà Lý dời đô bằng đường thủy, và chỉ có dời đô bằng đường thủy thì mới an toàn và tải được cả bộ máy triều đình đông đảo cùng vật chất bảo đảm đồ sộ đi kèm.
</p>
<p>Các nhà nghiên cứu khẳng định <a href="__missing__">Lý Thái Tổ</a> dời đô cũng cần dùng tới đội thuyền. Đoàn thuyền xuất phát từ bến Ghềnh Tháp (nay là khu vực giữa <a href="__missing__">phủ Vườn Thiên</a> và nhà bia <a href="__missing__">Lý Thái Tổ</a> ở Khu di tích <a href="__missing__">Cố đô Hoa Lư</a>). Rồi thuyền vào <a href="__missing__">sông Sào Khê</a>, qua <a href="__missing__">cầu Đông</a>, <a href="__missing__">cầu Dền</a><a href="__missing__">Hoa Lư</a> để ra bến đò <a href="__missing__">Trường Yên</a> vào <a href="__missing__">sông Hoàng Long</a>. Đi tiếp đến <a href="__missing__">Gián Khẩu</a> thì rẽ vào <a href="__missing__">sông Đáy</a>. Từ <a href="__missing__">sông Đáy</a> lại rẽ vào <a href="__missing__">sông Châu Giang</a>. Đến <a href="__missing__">Phủ Lý</a> đoàn thuyền ngược <a href="__missing__">sông Hồng</a>, rồi vào <a href="__missing__">sông Tô Lịch</a> trước cửa thành <a href="__missing__">Đại La</a>.
</p>
<p>Như vậy hành trình dời đô đi qua sáu con sông khác nhau, trong đó các hành trình trên sông Sào Khê, <a href="__missing__">sông Hoàng Long</a>, <a href="__missing__">sông Châu Giang</a> là đi xuôi dòng, trên <a href="__missing__">sông Đáy</a>, <a href="__missing__">sông Hồng</a>, <a href="__missing__">sông Tô Lịch</a> là đi ngược dòng. Sở dĩ nhà Lý đi bằng <a href="__missing__">đường sông</a> chứ không đi bằng đường biển cũng là bảo đảm an toàn vì thuyền phải tải nặng không chịu nổi sóng dữ ở <a href="__missing__">biển</a>.
</p>
<p>Sử gia <a href="__missing__">Ngô Thì Sĩ</a> trong <a href="__missing__">Đại Việt sử ký tiền biên</a> nhận xét về kinh đô <a href="__missing__">Thăng Long</a> như sau:
</p>
<i>"Núi là vạt áo che, sông là dải đai thắt, sau lưng là sông nước, trước mặt là biển, địa thế hùng mạnh mà hiếm, rộng mà dài, có thể là nơi vua ở hùng tráng, ngôi báu vững bền, hình thể <a href="__missing__">Đại Việt</a> không nơi nào hơn được nơi này"</i>.
<p>Quyết định dời đô ra Thăng Long của <a href="__missing__">Lý Thái Tổ</a> được xem là sự kiện trọng đại, đánh dấu bước phát triển vượt bậc của vương triều Lý. Trong vòng 8 thế kỷ tiếp theo, hầu hết các triều đại phong kiến kế tục nhà Lý như <a href="__missing__">nhà Trần</a>, <a href="__missing__">nhà Mạc</a>, <a href="__missing__">nhà Hậu Lê</a> đều tiếp tục dùng <a href="__missing__">Thăng Long</a> làm kinh đô và có thời gian tồn tại tương đối lâu dài.
</p>
<h3>Loạn tam vương</h3>
<p>Khoảng tháng 3 năm <a href="__missing__">1028</a>, <a href="__missing__">Lý Thái Tổ</a> qua đời, hưởng dương 55 tuổi, <a href="__missing__">thụy hiệu</a><b>Thần Vũ Hoàng đế</b> (神武皇帝), an táng ở <a href="__missing__">Thọ lăng</a>.
</p>
<p>Các đại thần đều đến cung Long Đức để dâng biểu, xin Thái tử <a href="__missing__">Lý Phật Mã</a> lên ngôi nhưng 3 người em của ông là Đông Chinh vương, Dực Thánh vương và Vũ Đức vương không đồng ý nên đem quân của mình phục sẵn ở trong Hoàng thành nhằm cướp ngôi.
</p>
<p>Lúc đó Đông Chinh vương phục ở trong Long Thành còn Dực Thánh vương và Vũ Đức vương phục binh ở cửa Quảng Phúc, đợi Thái tử đến sẽ đánh úp. Một lát sau, Thái tử từ cửa Tường Phù vào, đến <a href="__missing__">điện Càn Nguyên</a>, biết có biến, sai người hầu đóng hết các cửa điện và sai các vệ sĩ trong cung phòng giữ. Thấy Phật Mã không nỡ xuống tay, nội thị là <a href="__missing__">Lý Nhân Nghĩa</a> xin đánh một trận để quyết được thua, theo gương <a href="__missing__">Đường Thái Tông</a><a href="__missing__">Chu Công Đán</a>.
</p>
<p>Quân của ba vương đánh đến rất gấp, Thái tử bèn sai vệ sĩ trong cung mở cửa ra đánh. Lê Phụng Hiểu sức khỏe hơn người, một mình vượt hơn trăm quân lính, ra trước cửa Quảng Phúc xông thẳng đến chỗ ngựa của Vũ Đức vương. Vương quay ngựa tránh, ngựa quỵ xuống, bị Phụng Hiểu bắt giết. Phủ binh của ba vương thua chạy. Quan quân đuổi theo chém giết hết, chỉ có hai vương Đông Chinh và Dực Thánh chạy thoát được.
</p>
<p>Thái tử Phật Mã lên ngôi, tức là <a href="__missing__">Lý Thái Tông</a>, đổi niên hiệu là Thiên Thành. Hai vương chạy thoát sau đó được tha tội. Cũng vì biến loạn này, để ngăn ngừa về sau, Lý Thái Tông đặt ra <i>Hội thề <a href="__missing__">thần Đồng Cổ</a></i>, là một buổi lễ thề rất quan trọng suốt triều đại nhà Lý. Ông xuống chiếu giao cho Hữu ty dựng miếu ở bên phải <a href="__missing__">thành Đại La</a> sau chùa Thánh Thọ, lấy ngày 25 tháng ấy, đắp đàn ở trong miếu, cắm <a href="__missing__">cờ xí</a>, chỉnh đốn đội ngũ, treo <a href="__missing__">gươm giáo</a> ở trước thần vị, đọc lời thề rằng: <i>"Làm con bất hiếu, làm tôi bất trung, xin thần minh giết chết"</i>. Các quan từ cửa đông đi vào, đến trước thần vị cùng uống máu ăn thề, hàng năm lấy làm lệ thường. Sau vì tháng 3 có ngày quốc kỵ, chuyển sang mồng 4 tháng 4. Nếu không có mặt trong buổi lễ, người bị tội sẽ bị đánh 50 trượng.
</p>
<p>Việc Thái tử Phật Mã dẹp được loạn, giữ được ngôi khiến chính trị nhà Lý từ đó được duy trì ổn định trong thời gian dài, chấm dứt tình trạng biến loạn gây hậu quả nặng nề sau khi vua khai quốc qua đời đã xảy ra với các triều đại trước như Ngô (<a href="__missing__">Dương Tam Kha</a> đoạt ngôi), Đinh (trung thần nhà Đinh chống <a href="__missing__">Lê Hoàn</a> dẫn tới nhà Đinh mất), Tiền Lê (các hoàng tử tranh ngôi).
</p>
<h3>Thời kỳ thịnh trị</h3>
<p>Ngay từ thời Lý Thái Tổ đến các vị hoàng đế tiếp theo là Thái Tông và Thánh Tông, nhà Lý tập trung giải quyết những vấn đề lớn sau:
</p>
<ol><li>Củng cố nội trị: Phát triển kinh tế, đặc biệt là nông nghiệp; ban hành <a href="__missing__">Hình thư</a>, hệ thống pháp luật đầu tiên từ khi giành độc lập sau thời <a href="__missing__">Bắc thuộc</a>; xác lập hệ thống giáo dục khoa cử có hệ thống.</li>
<li>Củng cố cương vực cai trị, vươn rộng quyền lực đến những vùng xa. Nhà Lý dùng chính sách hôn nhân, gả công chúa cho các tù trưởng địa phương để thắt chặt mối quan hệ. Với những nơi không thần phục, vua cử các hoàng tử hoặc thân chinh đi đánh dẹp. Chính sử ghi nhận ba vị vua đầu triều Lý đã nhiều lần xuất quân các châu như Vị Long, Đô Kim, Thường Tân, Bình Nguyên, Định Nguyên, Trệ Nguyên, Thất Nguyên, Văn, Hoan, Diễn, Phong v.v... Lớn nhất là biến loạn họ Nùng những năm 1038-1041.</li>
<li>Bảo vệ biên giới các phía: giải quyết những xung đột nhỏ xảy ra vùng biên với nhà Tống, và thường có liên quan tới các tù trưởng địa phương; đánh lui những cuộc tấn công cướp phá của <a href="__missing__">Nam Chiếu</a>, <a href="__missing__">Chiêm Thành</a>.</li>
</ol>
<p>Một sự kiện lớn trong những năm thịnh trị thời Lý là việc đổi quốc hiệu từ <a href="__missing__">Đại Cồ Việt</a> (大瞿越) sang <a href="__missing__">Đại Việt</a> (大越) vào năm 1054, mở ra kỷ nguyên Đại Việt trong <a href="__missing__">lịch sử Việt Nam</a>.
</p>
<p>Năm <a href="__missing__">1069</a>, Lý Thánh Tông thân chinh đi đánh nước <a href="__missing__">Chiêm Thành</a> do Chiêm Thành thường sang quấy nhiễu, cướp phá. Quân nhà Lý bắt được quốc vương Chiêm Thành là <a href="__missing__">Chế Củ</a>. Chế Củ xin dâng đất ba châu là <a href="__missing__">Địa Lý</a>, <a href="__missing__">Ma Linh</a><a href="__missing__">Bố Chính</a> để chuộc tội. Thánh Tông lấy 3 châu ấy và cho Chế Củ về nước. Những châu ấy nay ở địa hạt các huyện <a href="__missing__">Quảng Ninh</a>, <a href="__missing__">Quảng Trạch</a>, <a href="__missing__">Bố Trạch</a>, <a href="__missing__">Tuyên Hóa</a>, <a href="__missing__">Lệ Thuỷ</a> tỉnh <a href="__missing__">Quảng Bình</a> và huyện <a href="__missing__">Bến Hải</a> tỉnh <a href="__missing__">Quảng Trị</a>. Lãnh thổ Đại Việt được mở rộng đáng kể về phía nam.
</p>
<p>Năm <a href="__missing__">1070</a>, Thánh Tông cho xây dựng <a href="__missing__">Văn miếu</a>, đắp tượng thờ <a href="__missing__">Khổng Tử</a>, <a href="__missing__">Chu Công</a>, <a href="__missing__">Tứ phối</a>, vẽ tượng Thất thập nhị hiền, bốn mùa cũng tế, để mở mang <a href="__missing__">Nho học</a>. Ông là vị vua đầu tiên khởi xướng Nho giáo vào việc cai trị của các Hoàng đế Đại Việt sau này.
</p>
<p>Ba vị hoàng đế đầu tiên triều Lý đều lên ngôi ở tuổi trưởng thành và qua đời ở độ tuổi 55, có tư tưởng và thực thi chính sách kế tục nhau khá nhất quán. Các ngài đều ở ngôi trong thời gian tương đối dài, sau <i>Loạn tam vương</i> không còn tranh chấp nội bộ, vì vậy chính quyền nhà Lý ngày càng được củng cố.
</p>
<p>Từ sau đời Lý Thánh Tông, nhà Lý bắt đầu đối mặt với vấn đề nhân sự. Thánh Tông muộn con, khi ông mất thì Thái tử <b>Lý Càn Đức</b> (李乾德) mới 7 tuổi lên nối ngôi, tức là <a href="__missing__">Lý Nhân Tông</a>. <a href="__missing__">Dương Hoàng hậu</a> được Thái sư <a href="__missing__">Lý Đạo Thành</a> (李道成) lập làm <a href="__missing__">Hoàng thái hậu</a> và có quyền <a href="__missing__">nhiếp chính</a>. Việc này gọi là <i>Thùy liêm thính chính</i> (垂簾聽政 - rủ mành nghe việc nước), các Thái hậu sẽ thượng triều, ngồi sau long tọa đã được buông 1 tấm rèm the và quyết định thay vua.
</p>
<p><a href="__missing__">Ỷ Lan phu nhân</a> (倚蘭夫人) - mẹ đẻ của Nhân Tông, được tôn làm <a href="__missing__">Hoàng thái phi</a>. Thái phi do nghĩ mình là mẹ đẻ mà không được can dự triều đình nên rất buồn bực, hằng ngày bà than thở với Nhân Tông khiến vị vua cũng dần nhận ra và quyết định phế truất Dương thái hậu và bắt giam bà cùng 72 cung nhân khác của Thánh Tông, đến khi linh cữu Thánh Tông được hạ huyệt thì Thái hậu và các cung nhân đó đều bị chôn sống theo. Lý Đạo Thành, do ủng hộ Dương thái hậu nên bị Ỷ Lan thái phi điều ra trấn thủ <a href="__missing__">Nghệ An</a>.
</p>
<p>Sau khi Dương thái hậu bị phế truất, Ỷ Lan thái phi được tôn làm Hoàng thái hậu, buông rèm nghe chính sự. Bên dưới mọi việc do Thái úy <a href="__missing__">Lý Thường Kiệt</a> (李常傑), một trọng thần thời Thánh Tông đảm nhiệm.
</p>
<p>Lúc này, <a href="__missing__">nhà Tống</a> đang khủng hoảng về vấn đề biên giới với <a href="__missing__">nhà Liêu</a>, <a href="__missing__">Tây Hạ</a> muốn nhân lúc vua Lý còn nhỏ, Thái hậu nhiếp chính mang quân đánh chiếm. Thái úy Lý Thường Kiệt chủ động xóa tan hiềm khích, mời Lý Đạo Thành về triều để bàn đối sách chống quân Tống.
</p>
<p>Năm <a href="__missing__">1075</a>, ngay khi nhà Tống đang tập kết lực lượng ở <a href="__missing__">Ung châu</a> chuẩn bị tiến sang, Lý Thường Kiệt chủ động mang <a href="__missing__">thủy quân</a>, kết hợp quân trên bộ của <a href="__missing__">Nùng Tôn Đản</a> (儂宗亶) đánh sang đất Tống trước. Sang đầu năm <a href="__missing__">1076</a>, quân Lý hạ thành Ung châu.
</p>
<p>Năm <a href="__missing__">1076</a>, nhà Tống cử <a href="__missing__">Quách Quỳ</a> (郭逵), một viên tướng dày dạn trận mạc cùng <a href="__missing__">Triệu Tiết</a> đem đại binh sang xâm lược Đại Việt. Thế quân nhà Tống rất mạnh, quân đội nhà Lý dưới sự chỉ huy của <a href="__missing__">Lý Thường Kiệt</a> đã chống trả hết sức quyết liệt. Ông đã cử <a href="__missing__">Lý Kế Nguyên</a> đánh bại đội quân thủy của quân Tống sang kết hợp với quân bộ của Quách Quỳ. Cuối cùng, Lý Thường Kiệt đánh bại được đội quân nhà Tống tại trận tuyến trên <a href="__missing__">sông Như Nguyệt</a>. Năm <a href="__missing__">1077</a>, Quách Quỳ chấp nhận cho Đại Việt giảng hòa và rút quân trở về.
</p>
<p>Nhà Lý vượt qua thử thách lớn nhất từ khi hình thành và tiếp tục thịnh trị. Sau khi đánh được quân Tống, Nhân Tông bắt tay vào việc cai trị, mở <a href="__missing__">khoa thi</a> đầu tiên và chọn ra 10 người thi đỗ, nổi tiếng nhất là <a href="__missing__">Lê Văn Thịnh</a> (黎文盛). Ông còn củng cố nông nghiệp, cấm nạn giết trâu và xử phạt rất nặng. Quốc gia yên bình, Nhân Tông chuyên tâm theo Phật giáo, mở nhiều cuộc vui như <a href="__missing__">đua thuyền</a>, <a href="__missing__">múa rối nước</a>,... Đại Việt luôn có hội hè, trở nên cực kỳ phồn vinh và phát triển.
</p>
<h3>Thời kỳ trung suy</h3>
<p>Nhân Tông là vị hoàng đế trị vì lâu dài nhất trong <a href="__missing__">lịch sử Việt Nam</a>, tuy nhiên ông không có con. Vì vậy, ông chọn trong các con em hoàng tộc một người để kế vị và chọn được <a href="__missing__">Lý Dương Hoán</a> (李陽煥), là con của người em <a href="__missing__">Sùng Hiền hầu</a>, tức là cháu gọi ông bằng bác.
</p>
<p>Năm <a href="__missing__">1128</a>, Lý Nhân Tông qua đời, hưởng thọ 63 tuổi, Dương Hoán lúc đó mới 11 tuổi lên nối ngôi, tức là <a href="__missing__">Lý Thần Tông</a>. Có một <a href="__missing__">truyền thuyết</a> rằng Thần Tông là do <a href="__missing__">Từ Đạo Hạnh</a> (徐道行) đầu thai.
</p>
<p>Việc Nhân Tông qua đời và truyền ngôi cho Thần Tông đánh dấu sự chuyển dời ngôi vua từ chi trưởng cho chi dưới và cũng kết thúc thời kỳ phát triển đỉnh cao của nhà Lý. Từ Nhân Tông trở đi, trong 4 đời vua liên tiếp, người kế vị của nhà Lý đều nhỏ tuổi. Tuy việc cai trị bên ngoài chưa có nhiều ảnh hưởng trong thời kỳ đầu nhưng trong cung đình đã chịu ảnh hưởng trực tiếp vì sự tranh chấp quyền lực của những người tham gia nhiếp chính.
</p>
<p>Thời Lý Thần Tông, các đại thần giúp vua gồm Thái sư <a href="__missing__">Lê Bá Ngọc</a> (黎伯玉), Thái phó <a href="__missing__">Dương Anh Nhĩ</a> (杨英耳), Thái úy <a href="__missing__">Lý Công Bình</a>, Gián nghị Đại phu <a href="__missing__">Mâu Du Đô</a> (缪攸度), Điện tiền Chỉ huy sứ <a href="__missing__">Lý Sơn</a>(李山),... đều là những người có năng lực, được Nhân Tông tin tưởng giao trọng trách nên thời đại Thần Tông cai trị, nước Đại Việt vẫn giữ được ổn định.
</p>
<p>Nhà Lý từ những đời trước đã có thú thích vật hiếm lạ, đến khi Lý Thần Tông trưởng thành, việc đó ngày càng thịnh hành. Biết được ý vua, nhiều người dâng những vật lạ lên như <a href="__missing__">hươu</a> trắng, <a href="__missing__">rùa</a> có chữ trên mai, <a href="__missing__">chim sẻ</a>, <a href="__missing__">cá sấu</a>, <a href="__missing__">cá sông</a>, <a href="__missing__">cây cảnh</a>...; nhiều người như Lý Lộc (李禄), Lý Tự Khắc (李自克) tuy chỉ là quan hèn mọn nhưng do dâng hươu trắng quý hiếm mà cho làm <i>Đại liêu ban</i>, <i>Minh tự</i>. Ngoài ra xuất hiện nhiều quan lại có ý xu nịnh, nhân ý vua còn ham vui mà hùa theo nhà vua.
</p>
<p>Năm <a href="__missing__">1138</a>, Lý Thần Tông qua đời khi mới 23 tuổi, trị vì được 10 năm. Trước đây Thần Tông đã lập con trưởng là <b>Lý Thiên Lộc</b> (李天禄) làm Thái tử. Nhưng <a href="__missing__">Cảm Thánh phu nhân</a> (感聖夫人) cùng <a href="__missing__">Phụng Thánh phu nhân</a> (奉聖夫人), <a href="__missing__">Nhật Phụng phu nhân</a> (日奉夫人) đã dùng tiền <a href="__missing__">hối lộ</a> hoạn quan <a href="__missing__">Từ Văn Thông</a> (徐文通) mà cho vào gặp Thần Tông, xui vua bỏ thái tử Thiên Lộc. Thần Tông nghe theo, bèn lập con nhỏ là Thiên Tộ làm Hoàng thái tử, giáng Thiên Lộc xuống làm <b>Minh Đạo vương</b>. Lý Thiên Tộ (李天祚) khi đó mới 3 tuổi lên ngôi, tức là <a href="__missing__">Lý Anh Tông</a>.
</p>
<p>Cảm Thánh phu nhân Lê thị trở thành <a href="__missing__">Hoàng thái hậu</a>. Bà trọng dụng <a href="__missing__">Đỗ Anh Vũ</a> người tình của vua Lý Thần Tông(vì có tướng mạo đẹp nên Anh Vũ được vua cho vào hầu trong màn trướng) (杜英武) - người em ruột của Đỗ thái hậu và là cháu gọi <a href="__missing__">Lý Thường Kiệt</a> bằng cậu và Anh Vũ cũng là con nuôi của Thái sư Trương Bá Ngọc, cho làm nhiếp chính. Vì những điều đó nên Thái Hậu chỉ tin tưởng Anh Vũ. Việc đó khiến nhiều đại thần, gồm Điện tiền Chỉ huy sứ <a href="__missing__">Vũ Đái</a> (武戴), Phò mã <a href="__missing__">Dương Tự Minh</a> (杨字明) cùng một số thân vương nhà Lý bất bình và làm binh biến bắt Anh Vũ, nhưng không quyết đoán giết ông. Vì vậy Anh Vũ chỉ bị đày làm <b>Cảo điền nhi</b> - cày ruộng cho nhà nước. Không lâu sau, Thái hậu cố nghĩ làm thế nào để phục hồi chức nhiệm cho Anh Vũ, mới nhiều lần mở hội lớn để xá cho tội nhân. Anh Vũ được mấy lần xá tội, lại làm <a href="__missing__">Thái úy</a><a href="__missing__">Phụ chính</a> như cũ, càng được yêu dùng hơn. Đỗ Anh Vũ tìm cách trả thù. Anh Tông còn nhỏ, chuẩn tâu theo Anh Vũ, do đó những người tham gia binh biến đều bị giết hoặc đi đày.
</p>
<p>Năm <a href="__missing__">1158</a>, Đỗ Anh Vũ qua đời. <a href="__missing__">Tô Hiến Thành</a> (蘇憲誠), có họ hàng là Tô thị vợ của Anh Vũ, được thăng làm <a href="__missing__">Thái úy</a>. Hiến Thành giỏi việc dụng binh, lại là người chính trực, chuyên tâm tuyển chọn quân lính, biên giới nhiều lần bình định <a href="__missing__">Chiêm Thành</a>, <a href="__missing__">Ai Lao</a>.
</p>
<p>Năm <a href="__missing__">1174</a>, nhà Lý lại xảy ra việc thay ngôi thái tử. Thái tử là <a href="__missing__">Lý Long Xưởng</a> gian dâm với cung phi, làm chuyện thất đức nên bị phế truất làm Bảo Quốc vương. Anh Tông lập người con trai nhỏ là <a href="__missing__">Lý Long Cán</a> (李龍翰), con của một cung phi là cháu gái Đỗ Anh Vũ, làm Hoàng thái tử. Tô Hiến Thành làm "<i>Nhập nội kiểm hiệu Thái phó bình chương quân quốc trọng sự</i>", tước <a href="__missing__">Vương</a>, được giao phụ chính giúp người kế vị.
</p>
<p>Năm <a href="__missing__">1175</a>, Anh Tông qua đời khi mới 40 tuổi, trị vì được 36 năm. Thái tử còn nhỏ tuổi lên ngôi, sử gọi là <a href="__missing__">Lý Cao Tông</a>. Từ đây nhà Lý bắt đầu con đường suy vong.
</p>
<h3>Thời kỳ suy vong</h3>
<p>Lý Cao Tông lên ngôi khi mới 3 tuổi, mẹ là <a href="__missing__">Đỗ phu nhân</a> trở thành <i>Chiêu Thiên Chí Lý Hoàng thái hậu</i>, <a href="__missing__">Đỗ An Di</a> em trai bà trở thành <a href="__missing__">ngoại thích</a>, <a href="__missing__">Tô Hiến Thành</a> được giao cho việc kèm cặp phụ chính.
</p>
<p><a href="__missing__">Chiêu Linh Hoàng thái hậu</a>, mẹ của thái tử cũ <a href="__missing__">Lý Long Xưởng</a> cố giành lại ngôi báu cho con trai nhưng không thành vì thái độ cương quyết của Tô Hiến Thành.
</p>
<p>Giữa năm <a href="__missing__">1179</a>, khi Cao Tông mới lên 6 tuổi thì Thái úy Tô Hiến Thành qua đời. <a href="__missing__">Đỗ An Di</a> được phong làm phụ chính. Năm <a href="__missing__">1188</a>, Đỗ An Di qua đời, Ngô Lý Tín (吳理信) được trao quyền phụ chính đến khi ông qua đời năm <a href="__missing__">1190</a>. <a href="__missing__">Đàm Dĩ Mông</a> (譚以蒙) là em trai của <a href="__missing__">An Toàn hoàng hậu</a> được cất nhắc làm phụ chính.
</p>
<p>Lý Cao Tông trưởng thành chỉ thích chơi bời, cho <i>mua bán chức tước</i>, khiến xã hội bất ổn, bọn bất tài cứ có nhiều tiền là làm quan gây phiền nhiễu cho dân chúng; lại cho <i>bán tội ngục</i>, tức là nếu có hai người tranh giành nhau về một vật, tài sản giá trị mà hễ có ai dâng tiền bạc thì được lấy tài sản đó về làm của công, không cần qua tra xét gì cả, nên kho bạc tài sản trong cung thì như núi mà dân đói khổ cứ thế kêu than bên ngoài, giặc cướp như ong. Nhiều thủ lĩnh địa phương nhân lúc triều đình trung ương suy yếu cũng ngầm xây dựng lực lượng nổi dậy.
</p>
<h4>Loạn Quách Bốc</h4>
<p><a href="__missing__">Đoàn Thượng</a> (段尚) ở vùng Hồng Châu (Hải Dương và Hải Phòng) nổi dậy chống triều đình, Cao Tông sai các đại thần là <a href="__missing__">Phạm Bỉnh Di</a> (范秉異), <a href="__missing__">Phạm Du</a> (范兪), <a href="__missing__">Đàm Dĩ Mông</a> cùng các tướng khác đem quân đến định tiêu diệt. Đoàn Thượng sai người đem của đút lót Phạm Du, mong muốn lui binh. Du về tâu với Cao Tông, dùng mọi lời thuyết phục và khiến Cao Tông gọi tất cả quay về, Thượng thoát khỏi cảnh nguy khốn.
</p>
<p>Phạm Du được quản việc binh ở <a href="__missing__">Nghệ An</a>, thuyết phục Cao Tông cho chiêu tập thêm người để củng cố lực lượng, Cao Tông đồng ý. Phạm Du chiêu dụ bọn cướp, những người vô gia cư tạo thành quân lực của riêng mình mà đi khắp nơi cướp bóc. Cao Tông sai Phạm Bỉnh Di đi dẹp, Bỉnh Di thắng liền mấy trận, đốt phá dinh thự nhà cửa của Phạm Du, Du phải chạy sang Hồng Châu mà trốn.
</p>
<p>Năm <a href="__missing__">1209</a>, Cao Tông triệu Phạm Du về Thăng Long. Phạm Du hết lời vu cáo Phạm Bỉnh Di. Cao Tông tin theo, bèn sai người bắt giam Bỉnh Di cùng con trai là Phạm Phụ. Bộ tướng của Bỉnh Di là <a href="__missing__">Quách Bốc</a> (郭卜) đang đóng ở ngoài nghe tin thì mang quân đánh vào kinh thành Thăng Long hòng giải cứu Bỉnh Di. Cao Tông và Phạm Du vội giết chết Bỉnh Di và Phụ rồi chạy lên vùng Quy Hóa (<a href="__missing__">Vĩnh Phú</a>, <a href="__missing__">Yên Bái</a>). Quách Bốc vào kinh sư an táng cha con Bỉnh Di rồi lập con thứ của Cao Tông là <a href="__missing__">Lý Thầm</a> lên ngôi Hoàng đế.
</p>
<p>Hoàng tử <a href="__missing__">Lý Hạo Sảm</a> (李日旵) cùng mẹ là <a href="__missing__">An Toàn hoàng hậu</a> phải chạy về <a href="__missing__">Hải Ấp</a>, được <a href="__missing__">Trần Lý</a> (陳李) cùng <a href="__missing__">Phạm Ngu</a> là một học giả người vùng Diêu Hào lập làm minh chủ, giáng Lý Thầm xuống làm Vương. Hạo Sảm được sắp xếp kết hôn với con gái của Trần Lý là <a href="__missing__">Trần Thị Dung</a> (陳氏庸), ban chức cho những người trong phe họ Trần như <a href="__missing__">Trần Lý</a>, Phạm Ngu và <a href="__missing__">Tô Trung Từ</a> (蘇忠詞).
</p>
<p>Cao Tông nghe tin Thái tử Sảm tự ý lập triều đình riêng ở Hải Ấp, cho là chống lại mình nên cử Phạm Du huấn luyện binh sĩ ở vùng Hồng mà đi đánh. Nhưng Phạm Du mải tư thông với <a href="__missing__">Thiên Cực công chúa</a>, nên trễ hẹn với bọn <a href="__missing__">Đoàn Thượng</a>, bị thuộc hạ của Thái tử Sảm (thực chất là thuộc hạ họ Trần) mai phục và bắt giết. Sau đó, <a href="__missing__">Trần Lý</a> và em vợ là <a href="__missing__">Tô Trung Từ</a> đứng đầu cầm quân đánh đến kinh sư, đánh bại Quách Bốc và đồng đảng, dẹp tan loạn Quách Bốc.
</p>
<h4>Bất lực trong đại loạn</h4>
<p>Cao Tông được rước về kinh thành Thăng Long. Không lâu sau, năm <a href="__missing__">1210</a>, Cao Tông qua đời lúc 38 tuổi. Thái tử Lý Sảm (李旵) lên ngôi, tức <a href="__missing__">Lý Huệ Tông</a>, lúc ấy mới 16 tuổi. Huệ Tông cho lão thần Đỗ Kính Chu làm Thái úy phụ chính.
</p>
<p><a href="__missing__">Trần Lý</a> đã chết, Tô Trung Từ nắm binh quyền thế lực Hải Ấp, giết chết Đỗ Kính Tu. Các tướng Đỗ Quảng, Đỗ Thế Qui và Phí Lệ cùng nhau mưu lập đánh Trung Từ. Trung Từ biết thế quân của mình nhỏ hơn liên quân của họ, bèn lập mưu kế lừa gạt, vờ hòa hoãn với họ mà đang đêm tăng cường binh sĩ mưu trừ. Rồi ông cho tùy tướng Đào Phán bất ngờ ùa binh đánh lên diệt bọn Đỗ Quảng, Phí Lệ. Bọn họ xung phong tiến đánh quân của Đào Phán và chạy thoát được, Phán bèn đánh úp Đỗ Thế Qui, bắt được Qui và Qui bị tùng xẻo ở giữa chợ trời.
</p>
<p>Huệ Tông sợ hãi, vội phong Trung Từ làm Thái úy phụ chính, ban tước Vương; sai người đi đón Trần Thị Dung và phong làm Nguyên phi (元妃), cho anh của Nguyên phi là <a href="__missing__">Trần Tự Khánh</a> (陳嗣慶) làm <b>Chương Thành hầu</b> (章成侯).
</p>
<p>Sau khi dẹp được các thế lực chống đối mình, Tô Trung Từ lại bị giết đột ngột vào năm <a href="__missing__">1211</a> khi <a href="__missing__">thông dâm</a> với <a href="__missing__">Thiên Cực công chúa</a> - người trước đây đã tư thông với <a href="__missing__">Phạm Du</a> - và bị chồng công chúa là Vương Thượng bắt quả tang (Luật nhà Lý cho phép giết gian phu mà không bị tội). Quan đầu triều bị giết, kinh thành hỗn loạn. Con rể Trung Từ là <a href="__missing__">Nguyễn Ma La</a> thế cô, mưu dựa vào họ Trần, bèn cùng với vợ là Tô thị (em họ Tự Khánh) lên thuyền sang đạo Thuận Lưu để gặp bộ tướng của Tô Trung Từ là Nguyễn Trinh thì bị Nguyễn Trinh giết rồi cướp lấy Tô thị đem về. Tô thị sai người tố cáo với <a href="__missing__">Trần Thừa</a>. Trần Thừa bèn sai Tô thị dụ được Trinh và giết chết. Lực lượng của Tô Trung Từ tan rã hoàn toàn. Trần Tự Khánh nhân lúc Ma La kéo đi, kinh thành bỏ trống, lập tức mang quân về kinh sư và an táng Tô Trung Từ ở làng Hoạch.
</p>
<p>Sau khi Tô Trung Từ chết, Huệ Tông dùng cậu là <a href="__missing__">Đàm Dĩ Mông</a> làm Thái úy phụ chính, Đàm thái hậu cũng xen vào việc chính sự. Họ Đàm muốn nhân quyền ngoại thích mà lộng hành, chính sự ngày càng suy.
</p>
<p>Hai lực lượng lớn nhất tranh quyền lúc đó là họ Trần và họ Đoàn. Lý Huệ Tông lo ngại ngoại thích nhà vợ họ Trần thế lực lớn, nên cùng ngoại thích nhà mẹ là cậu <a href="__missing__">Đàm Dĩ Mông</a> muốn dựa vào họ Đoàn. Nghe họ Đoàn gièm pha Trần Tự Khánh muốn phế lập, Huệ Tông tức giận hạ chiếu cho các đạo binh đánh Trần Tự Khánh, và giáng <a href="__missing__">Trần Thị Dung</a> xuống làm Ngự nữ (御女). Đoàn Thượng và Đoàn Văn Lôi đem binh về kinh sư. Huệ Tông hạ chiếu tấn phong tước hầu cho Đoàn Thượng.
</p>
<p>Lúc bấy giờ, Trần Tự Khánh dẫn quân đi đánh khắp nơi, thu phục được nhiều đất, đặc biệt chiếm được Hồng châu, vùng từ <a href="__missing__">Lạng châu</a> đến núi Tam Trĩ hết thảy đều là đất của họ Trần.
</p>
<p>Năm <a href="__missing__">1213</a>, Đoàn Thượng phối hợp với quân triều đình đụng độ với Trần Tự Khánh. Tuy nhiên, lực lượng họ Trần mạnh hơn, có nhiều tướng giỏi hơn; trong khi đó quân nhà Lý do Huệ Tông và Thái sư Đàm Dĩ Mông không có tài làm tướng chỉ huy nên nhanh chóng bị thua trận. Cánh quân Đoàn Thượng cử đi do <a href="__missing__">Đoàn Cấm</a><a href="__missing__">Vũ Hốt</a> chỉ huy bị bộ tướng của Tự Khánh là <a href="__missing__">Nguyễn Nộn</a> (阮嫩) đánh bại. Huệ Tông bỏ chạy lên Lạng châu, quân họ Đoàn rút khỏi kinh đô trở về vùng Hồng.
</p>
<p>Trần Tự Khánh cố thuyết phục Lý Huệ Tông trở về kinh không được, bèn lập một hoàng thân nhà Lý là Lý Nguyên Vương lên ngôi làm vua mới.
</p>
<p>Năm <a href="__missing__">1214</a>, anh em họ Đoàn tấn công đất <a href="__missing__">Bắc Giang</a> do tướng của Tự Khánh là Nguyễn Nộn đóng giữ. Hai bên đánh nhau ở núi Đông Cứu (<a href="__missing__">Gia Lương</a>, <a href="__missing__">Bắc Ninh</a>), Nguyễn Nộn giết chết được <a href="__missing__">Đoàn Nguyễn</a>. Tuy nhiên lúc đó nội bộ phe Tự Khánh xảy ra phản loạn lớn. Tướng ở Cam Giá (thị xã <a href="__missing__">Sơn Tây</a>) là <a href="__missing__">Đỗ Bị</a> (杜備) lại nổi lên chống cự. Miền Cam Giá lại tách khỏi phạm vi thế lực của anh em họ Trần, hình thành một thế lực mới. Cùng lúc đó, Nguyễn Nộn ở Bắc Giang sau khi đánh được họ Đoàn cũng phản lại Tự Khánh, xây dựng một thế lực rất lớn. Do việc cát cứ của <a href="__missing__">Đỗ Bị</a>, <a href="__missing__">Nguyễn Nộn</a>, kinh thành Thăng Long bị uy hiếp. Tự Khánh phóng hỏa đốt kinh đô rồi chạy về hành cung <a href="__missing__">Lý Nhân</a> (<a href="__missing__">Hà Nam</a>).
</p>
<p>Song lực lượng họ Trần vẫn rất mạnh. Sau hàng loạt biến cố khác, thế lực của Trần Tự Khánh ngày càng mạnh hơn, buộc vua Huệ Tông phải tính trở về dựa vào họ Trần. Cuối năm, Trần Tự Khánh dẫn binh đánh được <a href="__missing__">Đinh Khả</a><a href="__missing__">Bùi Đô</a><a href="__missing__">Đại Hoàng</a> (<a href="__missing__">Ninh Bình</a>), chiếm luôn vùng đất này.
</p>
<p>Năm <a href="__missing__">1216</a>, Huệ Tông sách phong Ngự nữ Trần thị làm <b>Thuận Trinh phu nhân</b> (順貞夫人). Đàm thái hậu cho Trần Tự Khánh là kẻ phản trắc, nên ghét Trần Thị Dung, bảo vua đuổi bỏ đi, lại nhiều lần muốn làm hại, nhưng Huệ Tông đều che chở.
</p>
<p>Trước sức ép muốn giết con dâu của Đàm Thái hậu, Huệ Tông cùng với phu nhân lẻn đi đến chỗ quân của Tự Khánh ở bãi Cửu Liên. Từ đấy, Huệ Tông lại dựa vào Trần Tự Khánh. Tự Khánh bèn phế bỏ vua mới Lý Nguyên Vương, tôn Huệ Tông là vua như cũ mà chuyên tâm bình định các thế lực: Nguyễn Nộn ở Bắc Giang, Hiển Tín vương <a href="__missing__">Nguyễn Bát</a>, <a href="__missing__">Đoàn Văn Lôi</a> và Đoàn Thượng ở Hồng châu và <a href="__missing__">Hà Cao</a> ở Qui Hóa (<a href="__missing__">Yên Bái</a>, <a href="__missing__">Tuyên Quang</a>).
</p>
<h4>Họ Trần nắm quyền</h4>
<p>Cuối năm đó, mùa đông, Thuận Trinh phu nhân được sắc phong làm Hoàng hậu. Huệ Tông phong chức cho một loạt người họ Trần: Tự Khánh làm Thái úy phụ chính, anh trai Tự Khánh là <a href="__missing__">Trần Thừa</a> làm Nội thị phán thủ, tước <b>Liệt hầu</b>, <a href="__missing__">Phùng Tá Chu</a> làm Quan nội hầu; con trưởng của <a href="__missing__">Trần Thừa</a><a href="__missing__">Trần Liễu</a> (陳柳) làm Quan nội hầu, con trưởng của Thái úy Tự Khánh là Trần Hải (陳海) làm <b>Hiển Đạo vương</b> (顯道王).
</p>
<p>Năm <a href="__missing__">1217</a>, Đoàn Thượng quy phục triều đình, được ban làm <b>Hồng vương</b>, cai quản Hồng Châu. Từ đấy, họ Đoàn yên bình, tự gây lực lượng cát cứ. Cùng năm đó, các thế lực cát cứ ở <a href="__missing__">Phong Châu</a>, Hiển Tín vương <a href="__missing__">Lý Bát</a> cũng đều quy phục triều đình. Lúc này, Huệ Tông thường phát điên, tự xưng là <b>Thiên tướng</b>, cắm cờ ở búi tóc, cầm giáo và khiên múa may, đến khi mệt thì uống rượu ngủ li bì. Chính sự không quyết đoán, giao phó cả cho Trần Tự Khánh. Quyền lớn trong nước dần dần về tay họ Trần.
</p>
<p>Năm <a href="__missing__">1218</a>, Trần Thừa đem binh thuyền tiến đánh Nguyễn Nộn ở Bắc Giang. Ông cho người mở đê, để nước lan vào các thái ấp, rồi dùng binh thủy theo lối ấy mà đánh. Nộn thua to, chạy về Phù Ninh (<a href="__missing__">Bắc Ninh</a>). Năm đó, để yên Hồng châu, Trần Tự Khánh đưa em gái là <a href="__missing__">Trần Tam Nương</a> gả cho Hồng hầu là <a href="__missing__">Đoàn Văn Lôi</a> vốn là người có uy tín với người Hồng châu.
</p>
<p>Năm <a href="__missing__">1219</a>, các thủ lĩnh <a href="__missing__">Phạm Dĩ</a> (范以) và Hoàng Cá ở <a href="__missing__">Nam Sách</a> qua đời. Thuộc tướng là Nguyễn Lợi dâng thành cho Tự Khánh.
</p>
<p>Năm <a href="__missing__">1220</a>, Nguyễn Nộn tự xưng <b>Hoài Đạo vương</b> (怀道王), giữ hương <a href="__missing__">Phù Đổng</a>, dâng biểu xưng thần. Thái úy Tự Khánh phê chuẩn, từ đấy Bắc Giang không còn công khai đối kháng triều đình.
</p>
<p>Năm đó, Thái úy Trần Tự Khánh cùng Trần Thừa đánh dẹp Hà Cao ở Qui Hóa. Ông chia làm 2 đạo quân, Trần Tự Khánh và Trần Thừa đi theo sông Qui Hóa; bộ tướng <a href="__missing__">Lại Linh</a> (赖靈) và <a href="__missing__">Phan Cụ</a> (潘埧) đi theo sông Tuyên Quang, nhưng Hà Cao cũng chia quân tiến đánh. Phan Cụ bị bộ tướng của Hà Cao là Nguyễn Nải chém chết. Nhưng Thái úy Tự Khánh đã bao vây thủ phủ của Hà Cao, khiến Cao và gia đình phải tự sát. Từ đấy lộ Thượng Nguyên (<a href="__missing__">Bắc Kạn</a>, <a href="__missing__">Thái Nguyên</a>) và sông Tam Đái (<a href="__missing__">Vĩnh Phú</a>) được dẹp yên.
</p>
<p>Năm <a href="__missing__">1223</a>, Thái úy Trần Tự Khánh qua đời, Huệ Tông lấy <a href="__missing__">Trần Thừa</a> làm <a href="__missing__">Phụ quốc Thái úy</a>, cho đặc quyền khi vào chầu không xưng tên. Lúc đó, <a href="__missing__">Nguyễn Nộn</a> lại bắt đầu mạnh lên, là mối nguy hại cho dòng họ Trần đang nắm giữ triều đình.
</p>
<p>Sử thần Ngô Sĩ Liên nêu ý kiến về việc này:
</p>
<i>...Năm đầu niên hiệu Kiến Gia, giặc cướp đua nhau nổi dậy, Huệ Tông nhu nhược không đánh dẹp được. Trần Tự Khánh vì cớ Huệ hậu bị thái hậu làm khổ mà đem quân phạm cửa khuyết xin đón xa giá. Đương lúc bấy giờ, lòng người không thể không ngờ vực, cho nên Huệ Tông có lệnh bắt Tự Khánh mà không bắt được. Tự Khánh muốn làm cho kỳ được mới nhiều lần làm kinh động đến vua, xa giá phải dời chỗ mấy lần, tội rõ ràng rồi. Nhưng mà Huệ Tông và Huệ hậu rốt cuộc phải nhờ Tự Khánh mới được yên, thì tội ấy không kể đến. Thế là việc tuy là trái nhưng tình thì thuận, sử chép không nêu lên nhưng thực cũng có nêu đấy. Nếu không thế thì chỉ là kẻ đầu sỏ giặc cướp mà thôi</i>.
<h4>Chiêu Hoàng nhường ngôi</h4>
<p>Năm <a href="__missing__">1224</a>, bệnh của Huệ Tông ngày càng tăng mà không có con trai để nối nghiệp lớn, các công chúa đều được chia các lộ làm ấp thang mộc, ủy nhiệm cho một mình Chỉ huy sứ <a href="__missing__">Trần Thủ Độ</a> (陳守度) quản lĩnh các quân điện tiền hộ vệ cấm đình. Con gái thứ 2 là công chúa Chiêu Thánh được lập làm <b>Hoàng thái nữ</b> (皇太女), rồi làm Hoàng đế, sử gọi là <b>Chiêu Hoàng đế</b> (昭皇帝). Huệ Tông truyền ngôi trở thành <a href="__missing__">Thái thượng hoàng</a>, rồi xuất gia ở <a href="__missing__">chùa Chân Giáo</a> gọi là <b>Huệ Quang thiền sư</b> trong đại nội hoàng cung. Đàm thái hậu cũng theo ông vào đây xuất gia.
</p>
<p>Điện tiền Chỉ huy sứ Trần Thủ Độ coi giữ mọi việc quân sự trong ngoài thành thị. <a href="__missing__">Trần Cảnh</a> (陳煚), con trai thứ của Trần Thừa được phong làm <a href="__missing__">Chính thủ</a>, cho hầu hạ gần gũi với Chiêu Hoàng, được Chiêu Hoàng yêu mến. Dưới sự sắp đặt của Trần Thủ Độ, Chiêu Hoàng lấy Trần Cảnh làm chồng, rồi đến tháng 12 âm lịch năm 1225 (đầu năm 1226), ngày mồng một Mậu Dần, Chiêu Hoàng mở hội lớn ở <a href="__missing__">điện Thiên An</a>, trút bỏ áo ngự mời Trần Cảnh lên ngôi Hoàng đế. Cha Trần Cảnh là Trần Thừa được tôn làm Thái thượng hoàng.
</p>
<p>Ngôi nhà Lý chính thức chuyển sang nhà Trần. Nhà Lý kéo dài 216 năm với 9 đời vua. Không lâu sau, thượng hoàng Huệ Tông bị <a href="__missing__">Trần Thủ Độ</a> bức tự sát ở chùa Chân Giáo.
</p>
<h3>Nhận định</h3>
<p>Đời sau xem sử 3 đời vua <a href="__missing__">Lý Thái Tổ</a>, <a href="__missing__">Lý Thái Tông</a>, <a href="__missing__">Lý Thánh Tông</a> kế tục nhau, từ việc sửa trị, đánh dẹp các cát cứ trong nước tới việc diễu võ với phương Bắc, ra uy với phương Nam những việc làm đó đều đặn thu được thành tựu, không hề thất bát, suy bại; vua sau đã thay nhưng vua trước như thể vẫn còn; nước <a href="__missing__">Đại Cồ Việt</a> trở thành <a href="__missing__">Đại Việt</a> tuần tự đi lên không bị suy sút, thua thiệt. Điều đó cho thấy một chính sách, tư tưởng nhất quán của các vua Lý. Cả ba vua đầu tiên của nhà Lý đều có tài văn võ kiêm toàn, kính Phật yêu dân, tuổi thọ cũng xấp xỉ nhau. 3 vị vua Lý này là những người đặt nền tảng cho một nhà Lý tồn tại bền vững hơn 200 năm, là <a href="__missing__">triều đại</a> đầu tiên truyền nối được lâu dài trong <a href="__missing__">lịch sử Việt Nam</a>, chấm dứt thời kỳ đất nước liên tục thay đổi, 6 dòng họ thay nhau cai trị thời thế kỷ X. Nhà Lý xác lập được bộ máy nhà nước phong kiến quy củ, nề nếp, đưa đất nước vào thời kỳ phát triển ổn định.
</p>
<p><a href="__missing__">Lý Nhân Tông</a> là vua trị vì lâu nhất trong <a href="__missing__">lịch sử Việt Nam</a> (56 năm). Võ công đánh bại cuộc xâm lăng của <a href="__missing__">nhà Tống</a> trên <a href="__missing__">sông Như Nguyệt</a> thời <a href="__missing__">Lý Nhân Tông</a> thực chất là của những người phụ chính mà đội ngũ này được trưởng thành dưới thời <a href="__missing__">Thánh Tông</a>, do Thánh Tông cất nhắc, trọng dụng. Người theo thuyết nhân quả của <a href="__missing__">đạo Phật</a> có thể cho rằng việc làm thất đức của Thái hậu <a href="__missing__">Ỷ Lan</a> (sát hại Hoàng thái hậu <a href="__missing__">Thượng Dương</a> và các cung nữ của Thánh Tông) khiến vua con phải trả giá tuyệt tự.
</p>
<p>Từ thời Nhân Tông trở về sau, liên tiếp các vua Lý kế nghiệp đều thơ ấu, đó cũng là điều không may cho nhà Lý. Nhờ nền móng vững chắc do 3 đời vua đầu tiên xây dựng, cơ nghiệp nhà Lý tiếp tục được duy trì, nhưng các phụ chính đời sau như <a href="__missing__">Đỗ Anh Vũ</a>, <a href="__missing__">Đỗ Kính Tu</a>, <a href="__missing__">Đàm Dĩ Mông</a> không thể sánh được với Thái hậu <a href="__missing__">Ỷ Lan</a>, <a href="__missing__">Lý Thường Kiệt</a>, <a href="__missing__">Lý Đạo Thành</a>. <a href="__missing__">Tô Hiến Thành</a> tài năng nhưng không thể sống mãi để dìu dắt vua <a href="__missing__">Cao Tông</a> trở thành một vua Nhân Tông thứ hai. Sau khi Hiến Thành mất, nhà Lý trượt dốc không có ai đứng ra cứu vãn được. Tới khi họ Trần vào triều phụ chính, việc nhà Lý bị thay thế trở nên không đảo ngược được. Do <a href="__missing__">nhà Nam Tống</a> khi đó cũng đã yếu mòn nên suốt thời gian suy vong của nhà Lý tới khi chuyển ngôi cho <a href="__missing__">nhà Trần</a>, <a href="__missing__">Đại Việt</a> không bị nước láng giềng lớn ở phương Bắc nhòm ngó như các thời cuối Trần đầu Hồ và cuối Lê đầu Mạc sau này.
</p>
<h2>Địa giới hành chính và hệ thống quan lại</h2>
<p>Nhà Lý thiết lập và lựa chọn thiết chế chính trị với đặc trưng riêng biệt, được các sử gia gọi là mô hình tập quyền thân dân, với thể chế quân chủ tập quyền mang nhiều điểm khác và vượt xa thời kỳ trước của các triều Ngô, Đinh, Tiền Lê. Cấp hành chính trung ương bao gồm 3 bộ phận chủ yếu, đó là:
</p>
<ul><li>Các cơ quan giúp việc cho Hoàng đế: sảnh, Hàn lâm viện.</li>
<li>Các cơ quan đầu não của triều đình: Khu mật viện, bộ.</li>
<li>Các cơ quan giúp việc cho triều đình: viện, ty, cuộc.</li>
</ul>
<p>Các chức Tướng công, Thái phó được Hoàng đế nhà Lý ban cho những người có nhiệm vụ trực tiếp điều khiển toàn bộ chính quyền. Phụ tá cho các thái phó là Tả Tham tri chính sự, Hữu Tham tri chính sự và Hành khiển. Phụ tá cho Thái phó còn có các cơ quan là Khu mật viện và bộ.
</p>
<p>Địa giới phía bắc nước <a href="__missing__">Đại Việt</a> thời Lý bao gồm Bắc bộ Việt Nam hiện nay và một phần nhỏ của tỉnh <a href="__missing__">Quảng Tây</a> (<a href="__missing__">Trung Quốc</a>). Địa giới phía nam của nhà Lý khi mới thành lập chỉ tới khu vực Hà Tĩnh hiện nay. Năm <a href="__missing__">1069</a>, <a href="__missing__">Lý Thánh Tông</a> đánh <a href="__missing__">Chiêm Thành</a>, buộc vua Chiêm là Chế Củ dâng 3 châu tương đương với tỉnh <a href="__missing__">Quảng Bình</a><a href="__missing__">Quảng Trị</a> hiện nay. Cương vực này được duy trì ổn định tới khi triều Lý kết thúc. Trên vùng lãnh thổ này, nhà Lý chia cả nước thành 24 đơn vị hành chính. Các cấp hành chính ở địa phương lần lượt từ cao xuống thấp là:
</p>
<ul><li>Phủ, lộ, châu, trại.</li>
<li>Huyện, hương, giáp, phường, sách, động.</li>
</ul>
<p>Đứng đầu bộ máy hành chính của các phủ, lộ là Tri phủ, Phán phủ; của các châu là Tri châu; của các trại, đạo là Quan mục. Đứng đầu bộ máy hành chính của các huyện là Huyện lệnh. Dưới huyện là đơn vị <i>giáp</i><i>thôn</i>.
</p>
<h2>Luật pháp</h2>
<p>Nhà Lý được xác định là nhà nước đầu tiên ở <a href="__missing__">Việt Nam</a> chính thức có hệ thống pháp luật từ khi giành độc lập sau thời <a href="__missing__">Bắc thuộc</a> mà thời <a href="__missing__">nhà Ngô</a>, <a href="__missing__">nhà Đinh</a><a href="__missing__">nhà Tiền Lê</a> trước đó chưa có.
</p>
<p>Cơ quan chuyên trách pháp luật của nhà Lý là <a href="__missing__">Bộ Hình</a><i>Thẩm hình viện</i>. Đảm nhận chức vụ này thường là <i>Á tướng</i> kiêm nhiệm. Trong một số trường hợp, vua đích thân xử án.
</p>
<p>Năm <a href="__missing__">1042</a>, <a href="__missing__">Lý Thái Tông</a> ban hành sách <a href="__missing__">Hình thư</a>, đây là sách luật đầu tiên của một triều đại Việt Nam, có thể coi như tổng hợp của <a href="__missing__">luật dân sự</a>, <a href="__missing__">luật hình sự</a>, <a href="__missing__">luật tố tụng hình sự</a><a href="__missing__">luật hôn nhân gia đình</a> ngày nay. Hình thư gồm có 3 quyển, đã bị thất truyền sau thời kỳ phá hủy văn hóa Đại Việt của <a href="__missing__">nhà Minh</a> vào đầu <a href="__missing__">thế kỷ XV</a>.
</p>
<p>Trừ 10 tội nặng gọi là <i>thập ác</i> (bất trung, bất hiếu, bất kính, bất nghĩa...), nhà Lý cho ban hành thể lệ chuộc tội: những người già trên 70 tuổi, trẻ con dưới 15 tuổi, người có nhược tật, những người họ nhà vua và người có công nếu phạm tội có thể chuộc tội bằng tiền, tùy theo tội nặng nhẹ thì nộp tiền với mức độ nhiều ít khác nhau.
</p>
<p>Việc ra đời của Hình thư cũng như các cơ quan Bộ hình và Thẩm hình được xem là bước tiến trong việc tổ chức quản lý của nhà nước thời Lý, tuy hiệu lực vẫn còn hạn chế.
</p>
<p>Do sự sùng bái <a href="__missing__">đạo Phật</a> của triều đại này mà các hình phạt nói chung không quá nghiêm khắc. Pháp luật bảo vệ nguồn thu nhập của triều đình, đảm bảo dân đinh là sức lao động chủ yếu mà triều đình sử dụng. Để đảm bảo sản xuất <a href="__missing__">nông nghiệp</a>, việc giết <a href="__missing__">trâu</a><a href="__missing__"></a> được quy định chặt chẽ. Người giết <a href="__missing__">trâu</a>, <a href="__missing__"></a> bừa bãi không theo quy định bị xử tội nặng.
</p>
<p><a href="__missing__">Pháp luật nhà Lý</a> phản ánh và chấp nhận sự xuất hiện của chế độ tư hữu ruộng đất, chỉ rõ sự phân biệt đẳng cấp xã hội, trong đó quý tộc quan liêu được hưởng đặc quyền.
</p>
<h2>Kinh tế</h2>
<h3>Nông nghiệp</h3>
<p>Kinh tế thời nhà Lý chủ yếu dựa vào <a href="__missing__">nông nghiệp</a>, vì thế trong suốt thời gian của triều đại này, có nhiều việc làm của các vua hay các <a href="__missing__">chiếu chỉ</a> liên quan đến vấn đề bảo vệ và phát triển nông nghiệp. Nhà Lý áp dụng chính sách <i><a href="__missing__">ngụ binh ư nông</a></i>, cho binh lính thay nhau về làm ruộng, có tác dụng phát triển sản xuất nông nghiệp, sức lao động không bị thiếu. Binh sĩ thay nhau nghỉ 1 tháng 1 lần về cày ruộng tự cấp.
</p>
<p>Ruộng đất thời Lý gồm có ruộng công, ruộng tư và đặc biệt, do Phật giáo phát triển mạnh, có ảnh hưởng lớn trong đời sống chính trị - xã hội nên nhà chùa sở hữu một bộ phận ruộng đất (không thuộc ruộng công lẫn ruộng tư).
</p>
<h4>Ruộng công</h4>
<p>Gồm có:
</p>
<ul><li><i>Quốc khố điền</i> là ruộng công của triều đình mà hoa lợi thu được sẽ dự trữ vào kho của vua để chi dùng cho hoàng cung.</li>
<li><i>Đồn điền</i> là ruộng đất hình thành từ việc khai hoang ven sông, ven biển thuộc đồng bằng <a href="__missing__">sông Hồng</a>, <a href="__missing__">sông Mã</a>, <a href="__missing__">sông Lam</a>.</li>
<li><i>Ruộng tịch điền</i> là loại ruộng do triều đình trực tiếp quản lý, hoa lợi dùng cho triều đình. Hằng năm, nhà Lý vẫn duy trì cày ruộng tịch điền là hình thức kế thừa từ thời <a href="__missing__">Tiền Lê</a>.</li>
<li><i>Ruộng sơn lăng</i> là loại ruộng dùng vào việc thờ phụng tổ tiên dòng họ nhà vua.</li>
<li><i>Ruộng công làng xã</i> là ruộng giao cho các làng xã quản lý, do những người lính nhàn thời bình về cày cấy.</li>
<li><i>Ruộng thác đao</i><i>ấp thang mộc</i> là ruộng ban thưởng cho quan lại, công thần. Nhưng loại ruộng này chỉ dành cho 1 đời công thần, không truyền được cho con cháu và công thần cũng chỉ được hưởng phần thuế thu từ ruộng đó.</li>
</ul>
<h4>Ruộng đất nhà chùa</h4>
<p>Đất đai do nhà <a href="__missing__">chùa</a> quản lý, chiếm số lượng khá lớn.
</p>
<h4>Ruộng tư</h4>
<p>Chế độ sở hữu ruộng tư thời Lý khá phổ biến và phát triển. Pháp luật cho phép các tầng lớp trong xã hội mua bán ruộng đất.
</p>
<p>Việc đo đạc ruộng đất thời Lý đã xuất hiện, nhưng đơn vị đo lường tính chưa thống nhất; nơi tính theo mẫu, nơi tính bằng thước. Để phát triển nghề nông, triều đình đề ra những biện pháp như quy tập người tha hương trở về quê quán để đảm bảo sức lao động ở nông thôn; trị nặng tội ăn trộm và giết <a href="__missing__">trâu</a><a href="__missing__"></a> bừa bãi....
</p>
<p>Ngoài ra triều đình còn chú trọng việc trị thủy, đắp đê, nhất là vùng châu thổ <a href="__missing__">sông Hồng</a>. Năm 1077, <a href="__missing__">Lý Nhân Tông</a> ra lệnh đắp đê sông Như Nguyệt dài 67.380 bộ. Các công trình thủy lợi tiêu biểu thời Lý là việc đào sông Đản Nãi (<a href="__missing__">Thanh Hóa</a>) năm 1029, đào kênh Lãm (<a href="__missing__">Ninh Bình</a>) năm 1051, khơi sâu sông Lãnh Kinh năm 1089 và sông Tô Lịch năm 1192. Sử sách ghi nhận những năm được mùa lớn như: 1016, 1030, 1044, 1079, 1092, 1111, 1120, 1123, 1131, 1139, 1140.
</p>
<p>Nhờ sự quan tâm phát triển nông nghiệp và làm thủy lợi của nhà Lý, nước <a href="__missing__">Đại Việt</a> có thế đứng và phát triển khá vững chắc, đời sống nhân dân tương đối ổn định.
</p>
<h3>Thủ công nghiệp</h3>
<p>Trong cung đình, những người thợ thủ công lao động cho triều đình gọi là thợ bách tác. Sản phẩm họ làm ra để phục vụ hoàng cung. Theo <a href="__missing__">Đại Việt sử ký toàn thư</a>, tháng 2 năm 1040, <i>"vua <a href="__missing__">Lý Thái Tông</a> đã dạy cung nữ dệt được gấm vóc. Tháng ấy xuống chiếu phát hết gấm vóc của nước Tống ở trong kho ra để may áo ban cho các quan, từ ngũ phẩm trở lên thì áo bào bằng gấm, từ cửu phẩm trở lên thì áo bào bằng vóc, để tỏ là vua không dùng gấm vóc của nhà Tống nữa"</i>.
</p>
<p>Trong dân gian, nghề chăn tằm ươm tơ, dệt lụa, làm đồ gốm, xây dựng đền đài, cung điện, nhà cửa rất phát triển. Ngoài ra, nghề làm đồ trang sức bằng vàng, bạc, nghề làm giấy, nghề in bảng gỗ, đúc đồng, rèn sắt, nhuộm vải, khai thác vàng lộ thiên đều được mở rộng. Có những công trình do bàn tay người thợ thủ công <a href="__missing__">Đại Việt</a> tạo dựng nên rất nổi tiếng như chuông Quy Điền, tháp Báo Thiên (<a href="__missing__">Hà Nội</a>) v.v...
</p>
<h3>Thương nghiệp</h3>
<p><a href="__missing__">Cảng Vân Đồn</a> có vị trí rất quan trọng cho hoạt động ngoại thương, nằm trên trục hàng hải từ <a href="__missing__">Trung Quốc</a> xuống các nước <a href="__missing__">Đông Nam Á</a> vì thế rất thịnh vượng vùa trù phú. Ngoài ra, nơi này còn thuận lợi cho việc đỗ tàu thuyền. Ngoài Vân Đồn, vùng biển Diễn Châu cũng là nơi có hoạt động ngoại thương phát triển.
</p>
<p>Các đối tác chủ yếu của <a href="__missing__">Đại Việt</a> là nhà Tống, <a href="__missing__">nhà Kim</a>, <a href="__missing__">Tây Hạ</a>, <a href="__missing__">Chiêm Thành</a>, Trảo Oa tức <a href="__missing__">đảo Java</a>, Lộ Lạc tức vương quốc Lavo, <a href="__missing__">Chân Lạp</a> - quốc gia vùng Mê Nam - Mê Nam, Tam Phật Tề tức <a href="__missing__">Srivijaya</a> ở đảo <a href="__missing__">Sumatra</a>, với vương quốc <a href="__missing__">Đại Lý</a> ở Vân Nam.
</p>
<p>Tại vùng biên giới, những người dân tộc thiểu số cũng qua lại buôn bán với nhau. Theo sách <i>Lĩnh ngoại đại đáp</i> của Nam Tống, người Việt thời Lý thường sang Trung Quốc buôn bán qua hai ngả là trại Vĩnh Bình trên bộ, nằm ở biên giới với Ung Châu và đường biển là cảng châu Khâm và Liêm. Nhà Lý cũng thường cử sứ giả sang buôn bán, gọi là "đại cương". Nhà Lý cử sứ giả sang Trung Quốc ba lần để thống nhất cân đo, tạo điều kiện cho buôn bán.
</p>
<p>Hàng hóa xuất khẩu của <a href="__missing__">Đại Việt</a> chủ yếu là thổ sản; hàng nhập khẩu bao gồm <a href="__missing__">giấy</a>, <a href="__missing__">bút</a>, <a href="__missing__"></a>, <a href="__missing__">vải</a>, <a href="__missing__">gấm</a>. Các thương nhân Đại Việt thường mua trầm hương của <a href="__missing__">Chiêm Thành</a> để bán lại cho thương nhân người Tống.
</p>
<p>Sách <i><a href="__missing__">Đại Việt sử ký toàn thư</a></i> chép: <i>Năm <a href="__missing__">1149</a> tháng 2, thuyền buôn ba nước Trảo Oa (Java), Lộ Lạc (có thể là Lộ Hạc - La Hộc - Lavo ở Lopburi, <a href="__missing__">Thái Lan</a>, Lộ Hạc có khả năng là nước </i>Locac<i> được nhắc đến trong du ký của <a href="__missing__">Marco Polo</a>), Xiêm La vào Hải Đông (tỉnh <a href="__missing__">Quảng Ninh</a> ngày nay) xin cư trú buôn bán, bèn cho lập trang ở nơi hải đảo, gọi là <a href="__missing__">Vân Đồn</a> hay năm <a href="__missing__">1184</a> tháng 3, người buôn các nước Xiêm La và Tam Phật Tề (Srivijaya ở đảo Sumatra, được nhắc đến với tên </i>Thất Lợi Phật Thệ<i> từ <a href="__missing__">thế kỷ VII</a> và với tên Tâm Phật Tề từ <a href="__missing__">thế kỷ V</a> trong thư tịch Trung Quốc) vào trấn Vân Đồn dâng vật báu để xin buôn bán.</i></p>
<h3>Tiền tệ</h3>
<p>Thương mại phát triển bước đầu, nhu cầu trao đổi hàng hóa trong nước ngày càng tăng. Nhà Lý đúc tiền bằng hợp kim <a href="__missing__">đồng</a> giống như tiền lưu hành ở vùng Đông Nam <a href="__missing__">Trung Quốc</a> khi đó. Tuy nhiên, tiền do triều đình đúc ra không đáp ứng đủ nhu cầu lưu thông <a href="__missing__">hàng hóa</a> nên nhiều đồng tiền nhà Tống và thậm chí thời <a href="__missing__">Đường</a> vẫn được lưu hành trong nước.
</p>
<p>Các nhà khảo cổ hiện nay phát hiện được sáu loại đồng tiền được xem là tiền do các vua nhà Lý phát hành: <i>Thuận Thiên đại bảo, Minh Đạo thông bảo, Càn Phù nguyên bảo, Thiên Phù nguyên bảo, Thiên Cảm thông bảo, Thiên Tư thông bảo</i>.
</p>
<h2>Giáo dục, khoa cử</h2>
<p>Nhà Lý là triều đại phong kiến đầu tiên ở <a href="__missing__">Việt Nam</a> xác lập hệ thống giáo dục khoa cử có hệ thống.
</p>
<p>Trường học tư đầu tiên được xác nhận là trường Bái Ân của Lý Công Ân một tông thất nhà Lý không ra làm quan mà ở nhà dạy học. Tuy nhiên, trong những năm đầu, hệ thống trường học chưa nhiều. Do ảnh hưởng đậm nét của Phật giáo và một phần của Đạo giáo nên Nho giáo chưa có vị trí độc tôn như sau này. Các trường lớp còn dạy nhiều kiến thức về Phật giáo và Đạo giáo. Chữ viết chính thức trong giáo dục vẫn kế tục các đời trước là <a href="__missing__">chữ Hán</a>.
</p>
<p>Năm <a href="__missing__">1070</a>, <a href="__missing__">Lý Thánh Tông</a> cho xây dựng nhà <a href="__missing__">Văn Miếu</a> ở kinh thành <a href="__missing__">Thăng Long</a>, đắp tượng <a href="__missing__">Khổng Tử</a>, <a href="__missing__">Chu Công</a>, tứ phối 72 người hiền của đạo Nho. Năm <a href="__missing__">1076</a>, vua <a href="__missing__">Lý Nhân Tông</a> lập ra <a href="__missing__">Quốc Tử Giám</a>. Tuy nhiên, các nhà nghiên cứu cho rằng Quốc Tử Giám chỉ là trường học công đầu tiên do triều đình chính thức đứng ra tổ chức, thể hiện sự quan tâm đối với việc học hành của hoàng tộc, còn trường học tư được hình thành trước đó.
</p>
<p>Từ trung kỳ, nhà Lý đã coi trọng đạo Nho hơn trước, vì Nho giáo là học thuyết giải quyết được các mối quan hệ cơ bản (vua tôi, cha con, chồng - vợ, bằng hữu...) để thống nhất và quản lý xã hội.
</p>
<p>Khoa thi đầu tiên được nhà Lý tổ chức vào tháng 2 năm 1075 thời vua Lý Nhân Tông. <a href="__missing__">Lê Văn Thịnh</a> đỗ đầu cùng hơn 10 người trúng tuyển. Ông trở thành Thủ khoa đầu tiên trong <a href="__missing__">lịch sử Việt Nam</a>. Việc mở khoa thi Nho giáo đầu tiên đánh dấu mốc về việc nhà Lý chính thức tuyển người theo Nho giáo làm quan bên cạnh tầng lớp quan lại thiên về kiến thức Phật giáo trước đó.
</p>
<p>Các khoa thi đòi hỏi người ứng thí phải thông hiểu kiến thức cả ba đạo Nho, Phật và Lão mới có thể đỗ đạt. Việc tổ chức thi Tam giáo (Phật, Nho, Đạo) chính thức được thực hiện năm <a href="__missing__">1195</a> dưới triều vua <a href="__missing__">Lý Cao Tông</a>.
</p>
<p>Sử sách ghi chép 9 khoa dưới triều Lý, trong đó có các khoa thi không ghi đầy đủ tên người đỗ. Các khoa thi không đều đặn theo định kỳ và các kỳ thi cũng chưa có cách thức nhất định.
</p>
<h2>Tôn giáo</h2>
<p><a href="__missing__">Phật giáo</a> về cơ bản là tôn giáo có ảnh hưởng nhiều nhất, ngoài ra <a href="__missing__">Nho giáo</a><a href="__missing__">Đạo giáo</a> cũng có tác động đến đời sống chính trị xã hội. Thời Lý có tư tưởng <i>tam giáo đồng nguyên</i>, coi trọng cả ba tôn giáo này.
</p>
<p>Các vua Lý chú trọng xây dựng chùa chiền, đúc chuông, tô tượng, cử sứ sang Trung Quốc xin <a href="__missing__">nhà Tống</a> kinh Phật, biến các chùa thành nơi cầu đảo, làm lễ tạ ơn khi chiến thắng quân xâm lược, lễ đại xá... Các quý tộc và nhân dân cũng đóng góp xây dựng nhiều chùa ở các địa phương. Việc chú trọng xây dựng chùa thời Lý được sử gia <a href="__missing__">Lê Văn Hưu</a> thời <a href="__missing__">Trần</a> ghi nhận là "xây tường cao ngất, tạc cột chùa bằng đá, làm chùa thờ Phật lộng lẫy hơn cả cung điện của vua". Các chùa lớn và nổi tiếng là chùa Dâu, chùa Phật Tích, chùa Dạm (<a href="__missing__">Bắc Ninh</a>), chùa Long Đọi (<a href="__missing__">Hà Nam</a>), chùa Diên Hựu.
</p>
<p>Giống như thời <a href="__missing__">Đinh</a> <a href="__missing__"></a>, nhiều nhà sư tham gia vào việc triều chính thời Lý, nhưng ảnh hưởng ít hơn trước. Họ chỉ đóng vai trò giáo hóa hoặc giảng kinh. Trong phạm vi tín ngưỡng và kỹ thuật, các vị cao tăng vẫn rất được xem trọng, được vua, hoàng tộc và các quan văn võ xem trọng như bậc thầy.
</p>
<p>Từ thời <a href="__missing__">Lý Thần Tông</a>, các vua thường qua đời sớm, vua lên thay còn nhỏ, thái hậu buông rèm chấp chính. Sự sùng đạo Phật từ lúc này bị xem là trở thành mối dị đoan, bắt nhịp với Đạo giáo và tín ngưỡng cổ truyền. Tuy những mối dị đoan không làm ảnh hưởng tới chính trị, nhưng đủ làm bằng chứng về nhân tâm rối loạn, nhà chức trách bỏ phí thời gian vào việc hão huyền, việc thưởng phạt trong triều đình căn cứ vào những điều không chính đáng.
</p>
<p>Nho giáo thời Lý nhìn chung phát triển nhưng chưa có điều kiện phát triển mạnh mẽ như các triều đại sau. Đạo giáo cũng có ảnh hưởng nhất định, thể hiện trong chế độ thi cử, yêu cầu các thí sinh hiểu biết cả ba tôn giáo Phật, Đạo và Nho mới có thể đỗ. Việc thi cử bằng tam giáo phản ánh <i>tam giáo đồng nguyên</i> vào thời Lý; trong đó Nho giáo là hệ tư tưởng dùng để quản lý xã hội, Phật giáo là quốc giáo, còn Đạo giáo có ảnh hưởng nhất định trong các tầng lớp dân cư.
</p>
<h2>Văn học</h2>
<p>Ngay trong thế kỷ đầu tiên của thời Lý đã để lại trong di sản tinh thần của dân tộc <a href="__missing__">Việt Nam</a> ba áng thơ văn cô đọng mà gây được một ấn tượng về khí phách phi thường: đó là <i><a href="__missing__">Chiếu dời đô</a></i> (214 chữ), <i><a href="__missing__">Phạt Tống lộ bố văn</a></i> (148 chữ) và bài thơ <i><a href="__missing__">Nam quốc sơn hà</a></i> (28 chữ).
</p>
<p>Trong thời Lý, thơ văn phát triển khá rầm rộ, có tới hàng trăm tác giả nhưng trải qua các cuộc chiến tranh, lụt lội, các sách vở đã bị hư hại nhiều, đặc biệt là chủ trương phá hủy văn hóa của <a href="__missing__">nhà Minh</a><a href="__missing__">thời kỳ đô hộ Đại Việt</a> đã tịch thu hoặc tiêu hủy hầu hết chứng tích văn hóa thời nhà Lý. Một số văn bia các chùa còn lưu giữ các bài thơ, bài vịnh của thời này.
</p>
<p>Tác phẩm đặc sắc thời này là <i>Thiền Uyển tập anh</i>, ghi lại hành trạng của 68 vị thiền sư cùng 77 bài thơ, bài kệ. Một số tác gia thời này như Thiền sư <a href="__missing__">Viên Chiếu</a> (999-1091), Thiền sư <a href="__missing__">Không Lộ</a> (?-1119)... và Hoàng thái hậu <a href="__missing__">Ỷ Lan</a> cũng được xếp trong hàng ngũ tác gia với bài kệ "Sắc không".
</p>
<h2>Nghệ thuật</h2>
<h3>Kiến trúc</h3>
<p>Những công trình kiến trúc chủ yếu thời kỳ này là kinh thành, cung điện, dinh thự các quan lại, lăng mộ vua chúa và đặc biệt là chùa chiền, đền miếu.
</p>
<p>Sau khi lên ngôi, <a href="__missing__">Lý Công Uẩn</a> đã xây dựng kinh thành và các cung điện: phía trước dựng điện Càn Nguyên làm chỗ coi chầu, bên tả làm điện Tập Hiền, bên hữu dựng điện Giảng Võ; mở cửa Phi Long thông với cung Nghênh Xuân, cửa Đan Phượng thông với cửa Uy Viễn, hướng chính nam dựng điện Cao Minh, đều có 3 thềm rồng, trong thềm rồng có hành lang dẫn ra xung quanh bốn phía.
</p>
<p>Nhà Lý cho xây dựng 36 cung, 49 điện ở khu trung tâm Cấm thành Thăng Long. Công trình Hoàng thành Thăng Long mang các đặc điểm: đẹp, công phu, phong phú, quy mô rộng lớn, trang trí rất tinh xảo, quy hoạch thống nhất và cân xứng. Các sử gia đánh giá kiến trúc Hoàng thành Thăng Long đánh dấu bước chuyển biến vượt bậc của nghệ thuật kiến trúc và quy hoạch kinh thành Thăng Long.
</p>
<p>Do sự hưng thịnh của Phật giáo thời Lý, chùa chiền mọc lên khắp nơi, được chia làm 3 hạng: Đại, Trung và Tiểu danh lam. Nổi tiếng nhất là <a href="__missing__">chùa Dâu</a>, <a href="__missing__">chùa Phật Tích</a>, chùa Dạm (<a href="__missing__">Bắc Ninh</a>), chùa Long Đọi (<a href="__missing__">Hà Nam</a>), <a href="__missing__">chùa Diên Hựu</a> (chùa Một Cột).
</p>
<p>Các chùa thường có tháp lớn như tháp Báo Thiên, <a href="__missing__">tháp Phổ Minh</a>, tháp Chiêu Ân, tháp Phật Tích, tháp Sùng Thiện Diên Linh, tháp Vạn Phong Thành Thiện... Ngoài chùa, nhà Lý còn xây dựng nhiều công trình khác như đền Đồng Cổ, lầu gác trên núi Cung vua, <a href="__missing__">Văn Miếu</a> - <a href="__missing__">Quốc Tử Giám</a>...
</p>
<h3>Điêu khắc, đúc tượng</h3>
<p>Nghệ thuật điêu khắc thời Lý được đánh giá là đạt tới đỉnh cao của nghệ thuật tạo hình dân tộc Việt, góp phần to lớn để sáng tạo ra giá trị của đỉnh cao văn hóa, văn minh thứ hai của người Việt phục hưng.
</p>
<p>Nghệ thuật điêu khắc thời Lý gồm những công trình điêu khắc tinh tế với những tấm phù điêu mô típ hoa văn <a href="__missing__">hoa cúc</a> nhiều cánh, <a href="__missing__">hoa sen</a>, lá cây và đặc biệt là rồng giun mình trơn nằm gọn trong chiếc <a href="__missing__">lá đề</a>. Đặc điểm chung là chân thực, đơn giản, khỏe mạnh.
</p>
<p>Nghệ thuật đúc <a href="__missing__">chuông</a> tô tượng rất phổ biến. Nước <a href="__missing__">Đại Việt</a> có 4 công trình nghệ thuật bằng đồng nổi tiếng được gọi là "<a href="__missing__">An Nam tứ đại khí</a>" thì 3 trong số đó được tạo ra trong thời Lý là <a href="__missing__">Tháp Báo Thiên</a>, <a href="__missing__">Chuông Quy Điền</a> (<a href="__missing__">chùa Một Cột</a> <a href="__missing__">Hà Nội</a>) và Tượng Phật <a href="__missing__">Di Lặc</a><a href="__missing__">chùa Quỳnh Lâm</a> (<a href="__missing__">Đông Triều</a>, <a href="__missing__">Quảng Ninh</a>).
</p>
<p>Các tượng người hay vật đều sinh động và có hồn; đường cong lớn và dày đặc, nét uyển chuyển mềm mại, dù làm bằng chất liệu nào. Bố cục các tác phẩm điêu khắc đẹp cân xứng, hài hòa.
</p>
<h3>Âm nhạc</h3>
<p>Ban đầu, nhạc Việt thời Lý chịu ảnh hưởng ít nhiều từ nhạc <a href="__missing__">Chiêm Thành</a> (mà nguồn gốc xa từ Tây Thiên tức <a href="__missing__">Ấn Độ</a>) qua những tù binh người Chiêm (cả nam lẫn nữ) bị bắt trong <a href="__missing__">các cuộc</a><a href="__missing__">nam chinh</a> của nhà Lý. Sau đó, ảnh hưởng của nhạc <a href="__missing__">Trung Quốc</a> tăng dần. Nhạc cụ các nhạc công sử dụng thời Lý gồm có <a href="__missing__">trống cơm</a>, <a href="__missing__">tiêu</a>, <a href="__missing__">não</a>, <a href="__missing__">sáo</a> ngang, <a href="__missing__">hồ gáo</a>, <a href="__missing__">đàn cầm</a>, <a href="__missing__">đàn tranh</a>, <a href="__missing__">đàn tỳ bà</a>, <a href="__missing__">đàn 7 dây</a>, <a href="__missing__">đàn 2 dây</a>, <a href="__missing__">đàn bầu</a>...
</p>
<p>Nền ca kịch <a href="__missing__">Đại Việt</a> bắt đầu từ thời Lý, do những <a href="__missing__">người Hoa</a> theo <a href="__missing__">Đạo giáo</a> sang dạy cho người Việt. Nhảy múa thường xuyên được tổ chức trong cung đình và trong dân gian. Nghệ thuật <a href="__missing__">chèo</a> cũng phổ biến, được giới quý tộc ham thích.
</p>
<h2>Ngoại giao</h2>
<p>Nhà Lý trong suốt thời đại của mình liên tục phải đối phó với những mưu đồ bành trướng, thôn tính hoặc cướp phá của các nước láng giềng như <a href="__missing__">nhà Tống</a> ở phía Bắc, <a href="__missing__">Chiêm Thành</a>, <a href="__missing__">Chân Lạp</a> ở phía Nam, <a href="__missing__">Đại Lý</a> ở Tây bắc hoặc những cuộc nổi loạn lẻ tẻ của các dân tộc thiểu số. Quan hệ với nhà Tống mang tính chất nước nhỏ thần phục nước lớn, tuy rằng trong giai đoạn khoảng những năm <a href="__missing__">1075</a>-<a href="__missing__">1076</a>, <a href="__missing__">Lý Thường Kiệt</a><a href="__missing__">Tông Đản</a> đã từng đem quân tấn công nhà Tống ở các châu Ung, châu Khâm. Đại Lý không còn là một quốc gia hùng mạnh như trong giai đoạn <a href="__missing__">thế kỷ VIII</a>, <a href="__missing__">thế kỷ IX</a> nên các cuộc giao tranh mang tính chất lẻ tẻ và phần thua thông thường thuộc về người Đại Lý. Quan hệ với <a href="__missing__">Chiêm Thành</a> thì nhà Lý dường như lại đóng vai trò của một nước lớn. Quan hệ với <a href="__missing__">Chân Lạp</a> khá bình thường, với chính sách ngoại giao khá mềm dẻo, nhà Lý đã giữ vững và mở rộng được lãnh thổ của mình. Năm <a href="__missing__">1097</a>, ban hành Hội Điển quy định các phép tắc chính trị.
</p>
<h3>Với nhà Tống</h3>
<p>Ngoài thời gian xảy ra chiến tranh 1075-1077, nhà Lý thường xuyên giữ quan hệ với nhà Tống. Hai bên cử sứ qua lại trong nhiều năm. Trừ sự kiện cha con họ Nùng, khi có các lực lượng gây rối vùng biên, hai bên có những hoạt động quân sự hỗ trợ nhau đánh dẹp và khi bắt được "tội phạm" thì người bên nào trả về cho nước ấy.
</p>
<p>Năm <a href="__missing__">1164</a>, Nam Tống công nhận Đại Việt là một nước độc lập với quốc hiệu ban cho vua <a href="__missing__">Lý Anh Tông</a> là An Nam Quốc vương. Đây là lần đầu tiên sau 225 năm kể từ khi <a href="__missing__">Ngô Quyền</a> giành được độc lập và xưng vương (<a href="__missing__">939</a>), vua Trung Quốc mới công nhận nền độc lập của Đại Việt. Trước đó các vua nhà Tống chỉ gọi các vua Việt là Giao Chỉ quận vương, xem đất Đại Việt chỉ là một quận của nhà Tống.
</p>
<h3>Với nhà Kim</h3>
<p>Có điều rất thú vị là nước Kim (<a href="__missing__">nhà Kim</a>) khi đó đang rất hùng mạnh ở miền bắc Trung Hoa, uy hiếp nước <a href="__missing__">Nam Tống</a> thường xuyên cũng rất tôn trọng <a href="__missing__">Đại Việt</a>. Sau khi đã có hòa bình với Nam Tống, năm <a href="__missing__">1168</a>, <a href="__missing__">Kim Thế Tông</a> sai sứ giả vượt qua lãnh thổ Nam Tống đến nước <a href="__missing__">Đại Việt</a> và đó cũng là lần duy nhất nhà Kim có quan hệ ngoại giao với Đại Việt.
</p>
<p>Cùng với sứ nhà Kim, sứ Nam Tống cũng đến Đại Việt lúc đó. Vua <a href="__missing__">Lý Anh Tông</a> sai các quan đón tiếp sứ giả cả hai nước chu đáo nhưng không cho đoàn sứ giả hai nước gặp nhau.
</p>
<h3>Với Chiêm Thành và Chân Lạp</h3>
<p><a href="__missing__">Đại Cồ Việt</a> và sau này là <a href="__missing__">Đại Việt</a> đóng vai trò nước lớn trong quan hệ với <a href="__missing__">Chiêm Thành</a><a href="__missing__">Chân Lạp</a>. Hai nước này vẫn sai sứ sang tiến cống các động vật quý như voi, chim lạ... Nhưng quan hệ của Đại Việt với 2 nước này không thật sự ổn định, sử sách ghi lại nhiều vụ cướp phá ở vùng biên giới phía nam Đại Việt của hai nước này, nhưng đều bị đánh bại (xem phần <i><a href="__missing__">quân sự</a></i>).
</p>
<h2>Quân sự</h2>
<h3>Tổ chức quân đội</h3>
<p>Quân đội thời Lý gồm hai bộ phận: cấm quân và quân địa phương.
</p>
<ul><li>Cấm quân: là quân tuyển chọn từ những thanh niên khỏe mạnh trong cả nước, có nhiệm vụ bảo vệ vua và kinh thành.</li>
<li>Quân địa phương: Tuyển chọn trong số thanh niên trai tráng ở các làng xã đến tuổi thành đinh (18 tuổi), có nhiệm vụ canh phòng các lộ, phủ.</li>
</ul>
<p>Nhà Lý thi hành chính sách "ngụ binh ư nông" (gửi binh ở nhà nông), cho quân sĩ luân phiên về cày ruộng và thanh niên đăng ký tên vào sổ nhưng vẫn ở nhà sản xuất, khi cần triều đình sẽ điều động. Quân đội nhà Lý có quân bộ và quân thủy, kỉ luật nghiêm minh, được huấn luyện chu đáo; vũ khí trang bị cho quân đội gồm giáo mác, đao kiếm, cung nỏ, mắy bắn đá...
</p>
<h3>Chiến tranh với các quốc gia lân cận</h3>
<h4>Đánh Tống ở Ung châu</h4>
<p>Năm <a href="__missing__">1075</a>, <a href="__missing__">Vương An Thạch</a>, <a href="__missing__">Tể tướng</a><a href="__missing__">nhà Tống</a>, xúi vua Tống rằng nước <a href="__missing__">Đại Việt</a> bị quân <a href="__missing__">Chiêm Thành</a> đánh phá, quân còn sót lại không đầy vạn người, có thể dùng kế chiếm lấy được. (Có thuyết cho rằng, nhà Tống quyết định đánh Đại Việt để củng cố lại tinh thần của quân dân sau những thất bại trước quân Liêu-Hạ ở phía bắc). Vua Tống bèn dùng Thẩm Khởi và Lưu Di làm tri phủ Quế Châu ngầm dấy binh người <a href="__missing__">Man động</a>, đóng thuyền bè, tập thủy chiến, ngoài ra còn cấm các châu huyện không được mua bán với Đại Việt các mặt hàng chiến lược thời đó như sắt thép, trâu bò.
</p>
<p>Vua nhà Lý biết tin, sai <a href="__missing__">Lý Thường Kiệt</a><a href="__missing__">Tông Đản</a> đem hơn 100.000 binh đi đánh; quân thủy và quân bộ đều tiến. Lý Thường Kiệt đánh các châu Khâm, Liêm; Tông Đản vây châu Ung. Đô giám <a href="__missing__">Quảng Tây</a> nhà Tống là Trương Thủ Tiết đem quân đến cứu. Lý Thường Kiệt đón đánh ở cửa ải Côn Lôn (nay là thành phố <a href="__missing__">Nam Ninh</a>, <a href="__missing__">Khu tự trị Choang Quảng Tây</a>) phá tan quân địch, chém Trương Thủ Tiết tại trận. Tri phủ Ung Châu là Tô Giám cố thủ không hàng. Quân Đại Việt đánh đến hơn 40 ngày, chồng bao đất trèo lên thành. Thành bị hạ. Tô Giám cho gia thuộc 36 người chết trước, chôn xác vào hố, rồi châm lửa tự đốt chết. Người trong thành không chịu hàng, quân Lý Thường Kiệt giết hết hơn 5 vạn người, cộng với số người chết ở các châu Khâm, Liêm thì đến hơn 100.000 người. Lý Thường Kiệt bắt sống người ba châu ấy đem về.
</p>
<h4>Chống Tống ở phòng tuyến sông Như Nguyệt</h4>
<p>Năm <a href="__missing__">1076</a> tháng 3, nhà Tống dùng Tuyên phủ sứ Quảng Nam (<a href="__missing__">Quảng Đông</a> - Quảng Tây ngày nay) là <a href="__missing__">Quách Quỳ</a> làm Chiêu thảo sứ, <a href="__missing__">Triệu Tiết</a> làm phó, đem quân 9 tướng, 10 vạn quân tinh nhuệ, 1 vạn ngựa chiến và 20 vạn dân phu, hợp với quân <a href="__missing__">Chiêm Thành</a> và quân <a href="__missing__">Chân Lạp</a> sang xâm chiếm nước Đại Việt. Quân nhà Tống tiến theo hai đường thủy, bộ vào Đại Việt. Đường thủy do <a href="__missing__">Hòa Mâu</a> chỉ huy; đường bộ do Quách Quỳ chỉ huy. Ở trên sông Vân Đồn (<a href="__missing__">Quảng Ninh</a>), Lý Kế Nguyên đã chặn đánh thủy binh nhà Tống vì chúng sẽ tiến vào Cửa Sông Bạch Đằng, làm thất bại kế hoạch hội quân của họ. Lý Thường Kiệt đã lập phòng tuyến ở bờ nam sông <a href="__missing__">Như Nguyệt</a> hay còn gọi là sông Cầu hay sông Nguyệt Đức. Quân Tống đã nhiều lần cố gắng vượt sông nhưng đều thất bại. Quách Quỳ cho đóng quân ở bờ bắc sông Như Nguyệt và chuyển sang phòng ngự nhằm chờ thời cơ. Một đêm quân sĩ chợt nghe ở trong đền Trương tướng quân (Trương Hống và Trương Hát: hai vị tướng đánh giặc giỏi của <a href="__missing__">Triệu Quang Phục</a>) có tiếng đọc to bài thơ thần mà tác giả chính là Lý Thường Kiệt:
</p>
<p>Bài thơ này có tác dụng khích lệ tinh thần chiến đấu của quân Đại Việt, tạo ra lòng tin rằng họ đang được thần linh giúp đỡ, đồng thời làm hoang mang quân nhà Tống. Khi quân nhà Tống đã lâm vào thế yếu, <a href="__missing__">Lý Thường Kiệt</a> đã chủ động giảng hòa để quan hệ Tống-Việt sau đó có thể trở lại bình thường.
</p>
<p>Khi rút quân, <a href="__missing__">Quách Quỳ</a> đã tranh thủ chiếm đoạt luôn châu Quảng Nguyên (<a href="__missing__">Lạng Sơn</a><a href="__missing__">Cao Bằng</a> ngày nay). Sau này, Thái sư <a href="__missing__">Lê Văn Thịnh</a> đã lấy lại châu Quảng Nguyên, nơi có nhiều mỏ kim loại quý, bằng phương pháp hòa bình là <a href="__missing__">ngoại giao</a> và tặng voi cho vua Tống. Người Tống cho rằng vua Tống mắc sai lầm để "mất" châu Quảng Nguyên có nhiều mỏ vàng nên đặt ra câu:
</p>
<i>Bởi tham voi Giao Chỉ</i><i>Để mất vàng Quảng Nguyên</i><h4>Chiến tranh với Chiêm Thành</h4>
<p>Trong triều đại nhà Lý, tổng cộng có khoảng 10 lần (<a href="__missing__">1020</a>, <a href="__missing__">1043</a>, <a href="__missing__">1044</a>, <a href="__missing__">1069</a>, <a href="__missing__">1075</a>, <a href="__missing__">1104</a>, <a href="__missing__">1132</a>, <a href="__missing__">1167</a>, <a href="__missing__">1216</a>, <a href="__missing__">1218</a>) các vua hay các quan lại cao cấp như <a href="__missing__">Lý Thường Kiệt</a>, <a href="__missing__">Tô Hiến Thành</a>,... đã đem quân đi đánh Chiêm Thành. Sau mỗi lần đánh, vua <a href="__missing__">Chiêm Thành</a> lại cầu hòa, cử người sang cống nhưng sau đó lại chống đối.
</p>
<p>Sự kiện lớn nhất là vào năm 1069, Chiêm Thành đem quân ra cướp phá vùng Nghệ An - Hà Tĩnh. Vua <a href="__missing__">Lý Thánh Tông</a> thân chinh dẫn 10 vạn quân nam chinh vào tận kinh đô Chiêm Thành đánh bại và bắt được vua Chiêm đưa về Thăng Long, để được tha, vua Chiêm và triều đình Chiêm Thành đã cắt phần đất phía Bắc dâng cho Đại Việt là vùng đất Quảng Bình và bắc Quảng Trị ngày nay, sau sự kiện này biên giới phía nam của Đại Việt lần đầu tiên tiến đến sông Thạch Hãn (<a href="__missing__">Quảng Trị</a>).
</p>
<p>Nhưng có sử gia cho rằng tới giai đoạn lịch sử này cuộc bình Chiêm chẳng phải riêng vì việc đoạn tuyệt giao hiếu, mà do Đại Việt bắt đầu thi hành chính sách đế quốc, dựa vào chỗ Chiêm có tinh thần bất khuất đối với Đại Việt và lại lén lút thần phục <a href="__missing__">nhà Tống</a>.
</p>
<h4>Chiến tranh với Chân Lạp (Đế Quốc Khmer)</h4>
<p>Nước <a href="__missing__">Chân Lạp</a> ở xa phía nam (dưới nước <a href="__missing__">Chiêm Thành</a>), nhưng cũng từng có chiến tranh với <a href="__missing__">Đại Việt</a>. <i><a href="__missing__">Đại Việt sử ký toàn thư</a></i> có chép sự kiện tháng Giêng, ngày <a href="__missing__">Giáp Dần</a>, năm <a href="__missing__">Mậu Thân</a> (tức <a href="__missing__">2 tháng 3</a> năm <a href="__missing__">1128</a>), 2 vạn người <a href="__missing__">Chân Lạp</a> vào cướp bến Ba Đầu ở <a href="__missing__">châu Nghệ An</a>. <a href="__missing__">Lý Thần Tông</a> sai Nhập nội Thái phó <a href="__missing__">Lý Công Bình</a> đem quân đánh dẹp. Chưa đến 10 ngày sau (ngày <a href="__missing__">Quý Hợi</a>), quân Chân Lạp bị đánh tan. Tháng 8 năm đó, người Chân Lạp lại vào cướp hương Đỗ Gia ở <a href="__missing__">châu Nghệ An</a>, có đến hơn 700 chiếc thuyền. Vua sai Nguyễn Hà Viêm và Dương Ổ đem quân dẹp được.
</p>
<p>Cuối năm đó, châu Nghệ An đệ tâu một phong quốc thư của nước Chân Lạp, xin sai người sang sứ. Tuy nhiên, <a href="__missing__">Lý Thần Tông</a> đã không trả lời.
</p>
<p>Tháng 8 năm <a href="__missing__">1132</a>, quân <a href="__missing__">Chân Lạp</a><a href="__missing__">Chiêm Thành</a> vào cướp phá <a href="__missing__">Nghệ An</a>. Thần Tông sai quan Thái úy Dương Anh Nhị đánh thắng được quân hai nước. Sang năm <a href="__missing__">1134</a>, hai nước phải đến tiến cống. Tháng 9 năm <a href="__missing__">1136</a>, tướng Chân Lạp là Tô Phá Lăng lại mang quân vào cướp phá Nghệ An. <a href="__missing__">Thần Tông</a> sai quan Thái phó là Lý Công Bình đi đánh bại quân Chân Lạp.
</p>
<p>Tháng 9 năm 1150, quân Chân Lạp lại đánh cướp <a href="__missing__">châu Nghệ An</a>, đến núi Vụ Thấp gặp nắng nóng ẩm thấp, phần nhiều chết vì lam chướng nên tự tan vỡ.
</p>
<h4>Chiến tranh với Đại Lý</h4>
<h2>Đền thờ</h2>
<p>Hiện nay, 8 vị hoàng đế nhà Lý (Lý Bát Đế) được thờ tại <a href="__missing__">Đền Đô</a> thuộc Phố Cổ Pháp, phường <a href="__missing__">Đình Bảng</a>, thành phố <a href="__missing__">Từ Sơn</a>, tỉnh <a href="__missing__">Bắc Ninh</a>. Đền nằm cách thủ đô <a href="__missing__">Hà Nội</a> gần 20 km về phía Bắc, thuộc địa phận hương <a href="__missing__">Cổ Pháp</a>, châu Cổ Pháp (làng Đình Bảng, thành phố <a href="__missing__">Từ Sơn</a>, tỉnh <a href="__missing__">Bắc Ninh</a>) nên còn gọi là <i>đền Cổ Pháp</i>.
</p>
<p>Đền Lý Bát Đế được khởi công xây dựng từ ngày <a href="__missing__">3 tháng 3</a> năm Canh Ngọ (<a href="__missing__">1030</a>) bởi <a href="__missing__">Lý Thái Tông</a>, khi vị hoàng đế này về quê làm giỗ cho Thái Tổ Hoàng đế. Sau này, đền được nhiều lần trùng tu và mở rộng. Lần trùng tu lớn nhất là vào năm thứ hai niên hiệu Hoàng Định của <a href="__missing__">Lê Kính Tông</a> (<a href="__missing__">1602</a>), khắc văn bia ghi lại công đức của các vị hoàng đế triều Lý.
</p>
<p>Các vị hoàng đế được thờ ở đây:
</p>
<ul><li><a href="__missing__">Lý Thái Tổ</a>, tên húy Lý Công Uẩn.</li>
<li><a href="__missing__">Lý Thái Tông</a>, tên húy Lý Phật Mã.</li>
<li><a href="__missing__">Lý Thánh Tông</a>, tên húy Lý Nhật Tôn.</li>
<li><a href="__missing__">Lý Nhân Tông</a>, tên húy Lý Càn Đức.</li>
<li><a href="__missing__">Lý Thần Tông</a>, tên húy Lý Dương Hoán.</li>
<li><a href="__missing__">Lý Anh Tông</a>, tên húy Lý Thiên Tộ.</li>
<li><a href="__missing__">Lý Cao Tông</a>, tên húy Lý Long Cán.</li>
<li><a href="__missing__">Lý Huệ Tông</a>, tên húy Lý Hạo Sảm.</li>
</ul>
<p>Nữ hoàng đế <a href="__missing__">Lý Chiêu Hoàng</a> không được đưa vào đền thờ vì bị coi là đã có tội làm ngôi vị rơi vào tay họ Trần. Dân xây miếu thờ bà riêng một chỗ khác.
</p>
<h2>Danh sách vua</h2>
<p>Nhà Lý trải qua tổng cộng 11 đời vua, trong đó có 9 vị vua được sử đương thời công nhận và đặt miếu hiệu, 2 vị vua còn lại bị buộc thoái vị trong các thời điểm loạn lạc khác nhau.
</p>
<h2>Thế phả</h2>
Thế phả vua <b><a href="__missing__">nhà Lý</a></b><p><br></p>
<h2>Xem thêm</h2>
<a href="__missing__"></a>
Wikimedia Commons có thêm hình ảnh và phương tiện về <i><b><a href="__missing__">Nhà Lý</a></b></i>.
<ul><li><a href="__missing__">Quân sự nhà Lý</a></li>
<li><a href="__missing__">Hội đền Đô</a></li>
<li><a href="__missing__">Lý Thái Tổ</a></li>
<li><a href="__missing__">Lý Thường Kiệt</a></li>
<li><a href="__missing__">Lý Chiêu Hoàng</a></li>
<li><a href="__missing__">Đại Việt</a></li>
</ul>
<h2>Ghi chú</h2>
<h2>Chú thích</h2>
<h2>Tham khảo</h2>
<h3>Cổ sử</h3>
<ul><li><a href="__missing__">Đại Việt sử lược</a></li>
<li><a href="__missing__">Đại Việt sử ký toàn thư</a></li>
<li><a href="__missing__">Khâm định Việt sử thông giám cương mục</a></li>
<li><a href="__missing__">Ngô Thì Sĩ</a> (<a href="__missing__">2011</a>), <i><a href="__missing__">Đại Việt sử ký tiền biên</a></i>, Nhà Xuất bản Văn hóa thông tin.</li>
</ul>
<h3>Hiện đại</h3>
<h2>Liên kết ngoài</h2>
<a href="__missing__"></a>
Wikimedia Commons có thêm hình ảnh và phương tiện về <i><b><a href="__missing__">Nhà Lý</a></b></i>.
<ul><li><a href="__missing__">Later Ly Dynasty (Vietnamese history)</a> tại <i><a href="__missing__">Encyclopædia Britannica</a></i> (bằng tiếng Anh)</li>
<li><a href="__missing__"></a> tại <a href="__missing__">Từ điển bách khoa Việt Nam</a></li>
<li><a href="__missing__">Đại Việt sử ký toàn thư</a><a href="__missing__">Lưu trữ</a> ngày 2 tháng 2 năm 2007 tại <a href="__missing__">Wayback Machine</a> - Bản điện tử.</li>
<li><a href="__missing__">Khâm định Việt sử Thông giám cương mục</a><a href="__missing__">Lưu trữ</a> ngày 9 tháng 2 năm 2012 tại <a href="__missing__">Wayback Machine</a> - Bản điện tử.</li>
<li><a href="__missing__">Một số di vật điêu khắc đá thời Lý Trần</a></li>
<li><a href="__missing__">Lý (1009-1225)- Hai thế kỷ hưng khởi đầu tiên của văn hóa Thăng Long</a><a href="__missing__">Lưu trữ</a> ngày 19 tháng 8 năm 2007 tại <a href="__missing__">Wayback Machine</a></li>
<li><a href="__missing__">Lần đầu tiên phát hiện trác thạch tại Hà Nội</a> Anh Thu, báo <a href="__missing__">Hànộimới</a> 7:48 20/01/2005.</li>
<li><a href="__missing__">Những cuộc đổi họ lớn trong lịch sử</a> Giáo sư Trần Gia Phụng.</li>
</ul>
-103
View File
File diff suppressed because one or more lines are too long
+270
View File
@@ -0,0 +1,270 @@
<h1>Nhà Trần</h1>
<p><b>Nhà Trần</b> (<a href="__missing__">chữ Nôm</a>: 茹陳, <a href="__missing__">chữ Hán</a>: 陳朝, <a href="__missing__">Hán Việt</a>: <i>Trần triều</i>) là một triều đại <a href="__missing__">quân chủ</a> cai trị nước <a href="__missing__">Đại Việt</a> từ năm 1226 đến năm 1400. Đây là triều đại được lưu danh với những chiến công lớn trong <a href="__missing__">lịch sử Việt Nam</a>. Triều đại này khởi đầu khi <a href="__missing__">Trần Cảnh</a> lên ngôi vào năm 1226 sau khi được vợ là <a href="__missing__">Lý Chiêu Hoàng</a> nhường ngôi. Những năm đầu tiên, Trần Cảnh còn nhỏ tuổi, toàn bộ quyền hành của nhà Trần đều do một tông thất vai chú của Trần Cảnh là <a href="__missing__">Trần Thủ Độ</a> nắm quyền, chính Trần Thủ Độ đã âm thầm ép <a href="__missing__">Lý Chiêu Hoàng</a> nhường ngôi cho cháu mình.</p>
<a href="__missing__">Tập tin:Trần_Dụ_Tông.jpg</a>Bia khắc vua <a href="__missing__">Trần Dụ Tông</a> mặc miện phục
<a href="__missing__">Tập tin:The_Mahasattva_of_Truc_Lam_leaves_the_Mountain_竹林大士出山圖.jpg</a><a href="__missing__">Tập tin:The_Mahasattva_of_Truc_Lam_leaves_the_Mountain_竹林大士出山圖.jpg</a><i><a href="__missing__">Trúc Lâm Đại sĩ xuất sơn đồ</a> đồ miêu tả sự kiện Phật hoàng <a href="__missing__">Trần Nhân Tông</a> tu hành đắc đạo, rời khỏi động Vũ Lâm trở về, vua Trần Anh Tông tới nghênh đón</i>
<p>Trong giai đoạn nắm giữ quyền lực, nhà Trần vẫn đóng đô ở <a href="__missing__">Thăng Long</a> kinh đô triều cũ, tiếp tục mở rộng và phát triển sự hưng thịnh có từ đời <a href="__missing__">nhà Lý</a>. Về chính sách chính trị, các Hoàng đế nhà Trần cũng xây dựng bộ máy chính quyền hoàn thiện hơn so với <a href="__missing__">nhà Lý</a>, họ tạo nên một hệ thống đặc biệt, trong đó các Hoàng đế sẽ sớm nhường ngôi cho <a href="__missing__">Thái tử</a> mà lui về làm <a href="__missing__">Thái thượng hoàng</a>, tuy nhiên vẫn cùng vị Hoàng đế mới điều hành chính sự. Việc này được đánh giá là tích cực, khi ngôi Hoàng đế sớm có chủ, tránh được việc tranh giành ngôi vua như <a href="__missing__">nhà Lý</a> trước đó; và bản thân vị Hoàng đế sẽ tiếp xúc và làm quen việc cai trị cho đến khi trưởng thành. Các mặt kinh tế, xã hội, giáo dục và nghệ thuật cũng hoàn chỉnh hơn và cho thấy <a href="__missing__">Nho giáo</a>, <a href="__missing__">Đạo giáo</a> đã có ảnh hưởng rõ rệt tới triều đại, tạo ra cục diện <i><a href="__missing__">Tam giáo đồng nguyên</a></i>, sự cân bằng ảnh hưởng của <a href="__missing__">Phật giáo</a> <a href="__missing__">Nho giáo</a> <a href="__missing__">Đạo giáo</a>. <a href="__missing__">Thái Thượng hoàng</a> <a href="__missing__">Trần Nhân Tông</a> được coi là một danh nhân văn hóa nổi tiếng, người bảo trợ Phật giáo và Đạo giáo, thành lập Thiền phái <a href="__missing__">Trúc Lâm Yên Tử</a> nổi tiếng và truyền đến đời nay. Bên cạnh đó, những danh thần <a href="__missing__">Đoàn Nhữ Hài</a>, <a href="__missing__">Mạc Đĩnh Chi</a>, <a href="__missing__">Nguyễn Hiền</a>, <a href="__missing__">Nguyễn Trung Ngạn</a>, <a href="__missing__">Trương Hán Siêu</a>, <a href="__missing__">Chu Văn An</a>, <a href="__missing__">Trần Quang Triều</a>,... là những cái tên nổi danh về tri thức, <a href="__missing__">thơ</a> <a href="__missing__">văn</a>, góp phần to lớn tạo nên thời kỳ nhà Trần hưng thịnh văn hóa.</p>
<p>Dưới triều nhà Trần, lực lượng quân đội đặc biệt được chú trọng phát triển đủ sức đánh dẹp các cuộc nội loạn và đương đầu với quân đội các nước xung quanh. Lực lượng quân đội nhà Trần thiện chiến nhất là <a href="__missing__">thủy binh</a>, rồi <a href="__missing__">kỵ binh</a>, <a href="__missing__">bộ binh</a>, <a href="__missing__">tượng binh</a>... Chính sách chia thực ấp cho các thân tộc trong họ, mỗi thế lực trong dòng tộc đều có quân đội tinh nhuệ là nền tảng vững vàng khiến quân đội nhà Trần đánh bại được cuộc xâm phạm của quân đội <a href="__missing__">Nhà Nguyên</a> <a href="__missing__">Đế quốc Mông Cổ</a> qua 3 lần vào năm 1258, 1285 và 1287. Nhiều tôn thất hoàng gia như Chiêu Minh Đại vương <a href="__missing__">Trần Quang Khải</a>, Chiêu Văn Đại vương <a href="__missing__">Trần Nhật Duật</a>, Hưng Đạo Đại vương <a href="__missing__">Trần Quốc Tuấn</a> và Nhân Huệ vương <a href="__missing__">Trần Khánh Dư</a> đều là những tướng cầm quân tài ba, có vai trò quan trọng trong chiến thắng vào năm 1285 và 1287.</p>
<h2>Lịch sử</h2>
<h3>Nguồn gốc</h3>
<p>Tổ tiên nhà Trần vốn làm nghề chài lưới, có gốc là người <a href="__missing__">Mân Việt</a> (hiện nay thuộc tỉnh <a href="__missing__">Phúc Kiến</a>) di cư đến đất <a href="__missing__">Đại Việt</a> đầu tiên ở xã Yên Sinh, huyện Đông Triều (Quảng Ninh) sau di dời đến các vùng ven biển như Tức Mặc (phường <a href="__missing__">Nam Định</a>, tỉnh <a href="__missing__">Ninh Bình</a>) và Thái Đường (phường <a href="__missing__">Long Hưng</a>, tỉnh <a href="__missing__">Hưng Yên</a>). Những hậu duệ của nhà Trần là con cháu lai giữa dòng dõi nhà Trần và dòng dõi <a href="__missing__">nhà Lý</a> trừ trường hợp của <a href="__missing__">Trần Lý</a>, <a href="__missing__">Trần Thừa</a>, và con của <a href="__missing__">Trần Thừa</a><a href="__missing__">Trần Cảnh</a> vị vua đầu tiên của nhà Trần. Căn cứ vào gia phả <a href="__missing__">họ Trần</a><a href="__missing__">Lạc Dương</a> do thống tôn đời 27 Trần Đình Nhân (con cháu <a href="__missing__">Trần Ích Tắc</a>) còn lưu giữ được thì gốc tích tổ tiên <a href="__missing__">họ Trần</a> trước sống ở đất <a href="__missing__">Mân Việt</a> (nay là tỉnh <a href="__missing__">Phúc Kiến</a> - <a href="__missing__">Trung Quốc</a> ngày nay)</p>
<p><a href="__missing__">Đại Việt sử ký toàn thư</a> chép rằng: Người họ Trần đầu tiên đến Tức Mặc là <a href="__missing__">Trần Kinh</a> (陳京), đến định cư tại làng Tức Mặc sống bằng nghề đánh cá vào đầu thế kỷ XII. Cụ Trần Kinh sinh ra cụ <a href="__missing__">Trần Hấp</a>, cụ Trần Hấp sau sinh ra cụ <a href="__missing__">Trần Lý</a>. Trần Hấp chuyển gia đình về sinh sống ở làng Thái Đường, Long Hưng.</p>
<p>Trần Hấp có gia sản lớn, kẻ ở người làm đông đến vài trăm, anh em Trần Lý cũng bỏ hẳn nghề chài lưới để chuyển sang quản lý điền trang, tuyển mộ người ở. Gia tộc họ Trần dần có địa vị, trở thành tầng lớp trên của xã hội bấy giờ. Họ Trần trở nên giàu có và hùng mạnh dưới đời cụ Trần Lý. Cụ Trần Lý đến tuổi trưởng thành lấy bà <a href="__missing__">Tô Thị Hiền</a> (bà này có người em ruột là <a href="__missing__">Tô Trung Từ</a>, giữ chức Thái úy Phụ chính, tước Thuận Lưu bá, dưới triều <a href="__missing__">Lý Huệ Tông</a>). Họ sinh được bốn người con: <a href="__missing__">Trần Thừa</a>, <a href="__missing__">Trần Tự Khánh</a>, <a href="__missing__">Trần Thị Dung</a>, <a href="__missing__">Trần Thị Tam Nương</a>.</p>
<p>Trần Thừa lấy bà họ Lê (con gái ông Lê Điện, quan <a href="__missing__">Thái phó</a> triều Lý), sau này sinh ra 3 con trai là <a href="__missing__">Trần Liễu</a>, <a href="__missing__">Trần Cảnh</a>, <a href="__missing__">Trần Nhật Hiệu</a> và 2 con gái. <a href="__missing__">Trần Cảnh</a> là con thứ của <a href="__missing__">Trần Thừa</a>, sinh ngày 16 tháng 6 năm Mậu Dần, tức Kiến Gia năm thứ 8 triều Lý (9/7/1218). Như vậy Trần Cảnh (vua đầu tiên của nhà Trần) là cháu 4 đời của Trần Kinh (tổ họ Trần).</p>
<p>Các nhà lãnh đạo thuộc những thế hệ đầu tiên thường mang tên các loài cá, do nguồn gốc xuất thân chài lưới của họ Trần. Tổ <a href="__missing__">họ Trần</a> vốn tên là Chép, được dịch sang tiếng Hán là 鯉, phiên âm là "Lý", nghĩa là <a href="__missing__">cá chép</a>. Con ông là Trần Thừa vốn có tên là Dưa (cá dưa). Hai con trai Trần Thừa vốn có tên là Leo (<a href="__missing__">cá leo</a>), được phiên theo chữ Hán là Liễu (cha của <a href="__missing__">Trần Quốc Tuấn</a>), người con thứ hai có tên là Lành Canh (<a href="__missing__">cá lành canh</a>), phiên sang chữ Cảnh. Trần Thị Dung cũng vốn có tên là Ngừ (<a href="__missing__">cá ngừ</a>), khi làm hoàng hậu của Lý Huệ Tông mới đổi gọi là Dung. Về sau dân địa phương lập đền thờ bà vẫn gọi là "Bà chúa Ngừ".</p>
<p>Từ thế hệ thứ hai, nhà Trần nắm quyền cai trị nên mới đặt theo các tên đời sau thường biết tới.</p>
<h3>Thay ngôi nhà Lý</h3>
<p>Vốn sống bằng nghề đánh cá, họ Trần thường sinh sống làm ăn ở những vùng cửa sông ven biển, đến đời Trần Lý (ông nội của vua <a href="__missing__">Trần Thái Tông</a>) đã trở thành một cự tộc có thế lực vùng Hải Ấp.</p>
<p>Năm <a href="__missing__">1209</a>, khi trong triều có biến loạn, vua <a href="__missing__">Lý Cao Tông</a> phải chạy lên <a href="__missing__">Quy Hóa</a>, Thái tử <a href="__missing__">Lý Sảm</a> (sau là vua Lý Huệ Tông) chạy về Hải Ấp đã được gia đình Trần Lý giúp đỡ. Hoàng tử Sảm đã kết duyên cùng <a href="__missing__">Trần Thị Dung</a> - con gái của Trần Lý. Họ Trần đã tập hợp hương binh giúp nhà Lý dẹp loạn, diệt trừ <a href="__missing__">Quách Bốc</a>, đưa vua Lý trở lại kinh đô. Cậu ruột Trần Thị Dung là <a href="__missing__">Tô Trung Từ</a> được làm <b>Điện tiền chỉ huy sứ</b>. Trung Từ lại đang tâm muốn nắm quyền riêng, lạnh nhạt với người đứng đầu chỉ huy họ Trần lúc bấy giờ là <a href="__missing__">Trần Tự Khánh</a>.</p>
<p>Năm <a href="__missing__">1211</a>, Thái tử Lý Sảm lên ngôi, sử gọi là <a href="__missing__">Lý Huệ Tông</a>. Ông cho đón vợ là Trần Thị Dung về cung lập làm Nguyên phi (元妃). Lúc này, Tô Trung Từ được phong Thái úy phụ chính, còn Tự Khánh được phong Chương Thành hầu (章成侯).</p>
<p>Huệ Tông là người yếu đuối, lại bị <a href="__missing__">Đàm thái hậu</a> (譚太后) điều khiển chính sự, nên mọi việc đều phó thác cho <a href="__missing__">Đàm Dĩ Mông</a> (譚以蒙), người chức cao, quyền lớn nhưng <i>không có học thức, không có mưu thuật, lại nhu nhược không quyết đoán, chính sự ngày một đổ nát</i>.</p>
<p>Lợi dụng tình hình đó, <a href="__missing__">Đoàn Thượng</a> (段尚) làm phản, tụ tập bè đảng ở <a href="__missing__">Hồng châu</a> thả sức cướp bóc, khiến triều đình không chế ngự nổi. Năm <a href="__missing__">1216</a>, trước tình thế bức bách của Đàm thái hậu, Lý Huệ Tông đã bí mật rời bỏ hoàng cung, cùng với Trần Thị Dung trốn đến nơi đóng quân của Trần Tự Khánh. Từ đó, vua Lý hoàn toàn phụ thuộc vào thế lực anh em họ Trần. Tháng 12 năm Bính Tý 1216, Lý Huệ Tông phong <a href="__missing__">Trần Thị Dung</a> làm Hoàng hậu, <a href="__missing__">Trần Tự Khánh</a> làm Thái úy Phụ chính, anh cả của Hoàng hậu là <a href="__missing__">Trần Thừa</a> làm Nội thị Phán thủ.</p>
<p>Hoàng hậu Trần Thị Dung sinh được hai công chúa: Thuận Thiên và Chiêu Thánh. Thuận Thiên sau lấy Trần Liễu; Chiêu Thánh sau là <a href="__missing__">Lý Chiêu Hoàng</a>, lấy Trần Cảnh. Vậy là hai chị em công chúa con vua Lý Huệ Tông đều lấy hai anh em ruột con của Trần Thừa (tức là anh em họ con cô con bác lấy nhau).</p>
<p>Năm <a href="__missing__">1223</a>, Trần Tự Khánh chết, mọi việc đều uỷ quyền cho <a href="__missing__">Trần Thủ Độ</a>, em họ của <a href="__missing__">Trần Thừa</a> (陳承) và Tự Khánh, khi ấy là Chỉ huy sứ, quản lĩnh cấm quân. Vua Lý Huệ Tông phong Trần Thừa làm Phụ quốc Thái úy, khi vào chầu miễn cần xưng tên.</p>
<p>Là người cơ mưu, quyết đoán, Trần Thủ Độ đã sắp xếp để ép vua Huệ Tông nhường ngôi cho <a href="__missing__">công chúa Chiêu Thánh</a>, rồi cắt tóc đi tu ở chùa Chân Giáo trong đại nội. Liền sau đó, Trần Thủ Độ lại thu xếp cho <a href="__missing__">Lý Chiêu Hoàng</a> lên 7 tuổi lấy con trai thứ của Trần Thừa là <a href="__missing__">Trần Cảnh</a> (陳煚) lên 8 tuổi. Một năm sau, vào tháng 12 âm lịch năm <a href="__missing__">1225</a>, Trần Thủ Độ ép Chiêu Hoàng nhường ngôi cho chồng, nhà Trần bắt đầu nắm quyền cai trị.</p>
<p>Khi lên ngôi, Trần Cảnh còn nhỏ, mọi việc triều chính đều trong tay Thái sư Trần Thủ Độ và cha là Thái thượng hoàng <a href="__missing__">Trần Thừa</a> (Trần Thái Tổ).</p>
<h3>Dẹp nội loạn</h3>
<p>Từ năm <a href="__missing__">1211</a>, trong nước Đại Việt đã hình thành ba thế lực lớn là: </p>
<ul><li>Họ Đoàn, <a href="__missing__">Đoàn Thượng</a> (<a href="__missing__">Hải Phòng</a>).</li>
<li>Họ Trần, <a href="__missing__">Trần Tự Khánh</a> (<a href="__missing__">Ninh Bình</a> và nam <a href="__missing__">Hưng Yên</a>).</li>
<li>Họ Nguyễn, <a href="__missing__">Nguyễn Nộn</a> (<a href="__missing__">Quốc Oai</a>, <a href="__missing__">Hà Nội</a>)</li></ul>
<p>Triều đình nhà Lý chỉ kiểm soát vùng xung quanh Thăng Long. Trong thời gian nắm quyền bính trong triều cho tới khi thay ngôi nhà Lý, nhà Trần tiếp tục phải đối phó với các lực lượng cát cứ từ thời Lý. Do thế lực chưa đủ mạnh để trấn áp tất cả các lực lượng nổi dậy, họ Trần phải dùng chiến thuật khi đánh khi hoà, thậm chí cả biện pháp hôn nhân; và tận dụng sự xung đột của chính các thế lực này tự làm yếu nhau.</p>
<p>Sau khi nhà Trần thành lập, Nguyễn Nộn đánh bại giết chết Đoàn Thượng năm <a href="__missing__">1228</a>. Nhưng không lâu sau, cuối năm <a href="__missing__">1229</a>, Nguyễn Nộn ốm chết, lực lượng của Nộn tự tan rã. Nhà Trần chấm dứt được cục diện chia cắt, tập trung củng cố nội chính sau nhiều năm nghiêng ngả dưới thời Lý.</p>
<h3>Thời kỳ thống trị</h3>
<h4>Thái Tông</h4>
<a href="__missing__">Tập tin:Emperor_Taizu_play_Cuju.jpg</a>Cuju, môn thể thao được cho là thịnh hành của giới cung cấm quý tộc ở nhà Tống lẫn nhà Lý, Trần thời bấy giờ.
<p><a href="__missing__">Trần Cảnh</a> khi lên ngôi vua chỉ mới 8 tuổi. Thái sư <a href="__missing__">Trần Thủ Độ</a> và Thái thượng hoàng <a href="__missing__">Trần Thừa</a> nhiếp chính và thực sự nắm quyền hành.</p>
<p>Trần Thủ Độ tuy bị đánh giá là người không có lễ giáo, thất học nhưng mưu lược hơn người, trị việc trong nước đều cẩn thận và chu toàn. Về mọi mặt, thời Thái Tông củng cố các vấn đề chính nhất là:</p>
<ul><li>Mở khoa thi Tam giáo (<a href="__missing__">Đạo giáo</a>, <a href="__missing__">Nho giáo</a>, <a href="__missing__">Phật giáo</a>) sau nhiều năm bị gián đoạn do loạn lạc cuối thời Lý. Định đặt luật pháp, soạn ra bộ <a href="__missing__">Quốc triều hình luật</a> gồm 20 quyển để định tội danh trong nước. Đáng tiếc bộ sách này đã bị thất truyền.</li>
<li>Lại mở rộng phía ngoài thành <a href="__missing__">Đại La</a>, bốn cửa thành giao cho quân Tứ sương thay phiên nhau canh giữ. Sửa đổi quan chức các phủ lộ. Đặt 2 viên <a href="__missing__">An phủ sứ</a><a href="__missing__">An phủ phó sứ</a>. Trong thành dựng cung, điện, lầu, các và nhà lang vũ ở hai bên phía đông và tây. Bên tả là <b>cung Thánh Từ</b> (nơi Thái thượng hoàng ở), bên hữu là <b>cung Quan Triều</b> (nơi Hoàng đế ở). Chép công việc của quốc triều làm bộ <a href="__missing__">Quốc triều thường lễ</a>, 10 quyển.</li>
<li><a href="__missing__">Thủy lợi</a> cũng được coi trọng. Năm <a href="__missing__">1231</a>, sai hoạn quan <a href="__missing__">Nguyễn Bang Cốc</a> chỉ huy binh lính phủ mình đào vét kênh Trầm và kênh Hào từ phủ <a href="__missing__">Thanh Hóa</a> đến địa giới phía nam <a href="__missing__">Diễn Châu</a>. Việc xong, thăng Bang Cốc làm <a href="__missing__">Phụ Quốc thượng hầu</a>.</li>
<li>Bắt đầu định luật hành chính. Chia đất nước làm 12 lộ. Đặt các chức quan cai trị. Làm đơn sổ hộ khẩu, con trai lớn gọi là <b>đại hoàng nam</b>, con trai nhỏ gọi là <b>tiểu hoàng nam</b>, 60 tuổi gọi là <b>lão</b>, già lắm thì gọi là <b>long lão</b>. Nhân đinh có ruộng đất thì nộp tiền thóc, người không có ruộng đất thì miễn cả. Có 1, 2 mẫu ruộng thì nộp một quan tiền, có 3, 4 mẫu thì nộp 2 quan tiền, có từ 5 mẫu trở lên thì nộp 3 quan tiền. Tô ruộng mỗi mẫu nộp 100 thăng thóc.</li>
<li>Bắt đầu thông thương nơi biên giới, để có thể giao thương với <a href="__missing__">nhà Tống</a><a href="__missing__">Giang Nam</a>. Khi <a href="__missing__">Nguyên Thái Tông</a> mất, thì cửa ải thường không thông. Nếu có sứ mệnh thì chỉ có hai viên chánh phó sứ và hai bọn người đi theo, còn sản vật tiến cống có bao nhiêu thì gói bọc đưa đến địa đầu biên giới, quan địa phương nhận giữ và chuyển nộp. Sứ thần đến kinh, chỉ dâng biểu tâu thôi, các vật tiến cống không đến nơi cả được. Đến bây giờ, sai tướng chống giữ, đánh chiếm mới thông hiếu được với nước Tống.</li></ul>
<p>Mỗi khi có dịp hạn hán, triều đình thường ban hành luật miễn thuế khóa, mở lương thóc rồi đại xá. Cho nên quốc lực mau chóng khôi phục, Đại Việt lại trở nên phồn thịnh như thời nhà Lý. Trong Đại Việt Sử ký Toàn thư có ghi chép:<i>..Bấy giờ quốc gia vô sự, nhân dân yên vui, người làm quan giữ mãi một chức, người ở quán, cách 10 năm mới được xuất thân, người ở sảnh, cục 15 năm mới được xuất thân, chức tể tướng thì chọn người hiền năng trong tôn thất, có đạo đức, tài nghệ, thông hiểu thi thư thì cho làm</i>.</p>
<p>Năm <a href="__missing__">1252</a>, Thái Tông đổi niên hiệu là Nguyên Phong (元豐). Sau đó ông lập tức dẫn binh đi đánh <a href="__missing__">Chiêm Thành</a>. Trước đó khi nhà Lý suy, Chiêm Thành thường hay xua binh công phá ở vùng <a href="__missing__">Nghệ An</a>, dân chết vô số, nay vua lên ngôi mà không sang thông hiếu nên rất giận, dẫn quân đi đánh và bắt được nhiều thần thiếp, cướp được nhiều của cải. Uy danh Đại Việt đối với Chiêm Thành lại được thiết lập. Giai đoạn này gọi là <i>Nguyên Phong chi trị</i> (元豐之治).</p>
<p>Năm <a href="__missing__">1258</a>, sau khi đánh bại đại quân của <a href="__missing__">Ngột Lương Hợp Thai</a> của người <a href="__missing__">Mông Cổ</a>, Thái Tông truyền ngôi cho Hoàng thái tử <b>Trần Hoảng</b> (陳晃), tự xưng là Thái thượng hoàng. Từ đấy, nhà Trần theo lệ truyền ngôi sớm cho thái tử, Thượng hoàng tuy nhường ngôi nhưng vẫn quán xuyến mọi việc, giúp vị vua trẻ quen dần chính sự.</p>
<p>Trần Hoảng lên ngôi, sử gọi là <a href="__missing__">Trần Thánh Tông</a>.</p>
<h4>Thánh Tông Nhân Tông</h4>
<p>Dưới thời của Thánh Tông hoàng đế, mọi việc chính sự vẫn đều chu toàn, nhà Trần tiếp tục thịnh trị. Ông xưng là <b>Nhân Hoàng</b> (仁皇), niên hiệu cải thành <b>Thiệu Long</b> (紹隆).</p>
<a href="__missing__">Tập tin:Trần_Nhân_Tông.jpg</a> Trần Nhân Tông (陳仁宗)
<p>Năm <a href="__missing__">1264</a>, Thái sư Trần Thủ Độ qua đời, thọ 71 tuổi. Thái sư công chính nghiêm minh, nhà Trần có được ngôi báu và sự thịnh trị đời Thái Tông phần nhiều là công sức của ông. Đến đây, truy phong làm <b>Thượng phụ Thái sư Trung Vũ đại vương</b> (上父太師忠武大王).</p>
<p>Nhân sự cũng được thay đổi trong thời Thánh Tông. Bấy giờ <a href="__missing__">Đặng Kế</a> (鄧薊) làm <b>Hàn lâm viện học sĩ</b>, <a href="__missing__">Đỗ Quốc Tá</a> (杜國佐) làm <b>Trung thư sảnh trung thư lệnh</b>, đều là <a href="__missing__">nho sĩ</a> <a href="__missing__">văn học</a>. Theo chế độ cũ, không phải là nội nhân (<a href="__missing__">hoạn quan</a>) thì không được làm hành khiển, chưa bao giờ dùng nho sĩ văn học. Bắt đầu từ đây, nho sĩ văn học mới giữ được quyền bính, cũng là dấu hiệu của <a href="__missing__">Nho giáo</a> đang bắt đầu có ảnh hưởng mạnh trong bộ máy nhà nước.</p>
<p>Đối với anh em trong hoàng tộc, nhà vua luôn coi là thân thiết. Ông xuống chiếu cho các vương hầu tôn thất, khi bãi triều thì vào trong điện và lan đình. Vua cùng ăn uống với họ. Hôm nào trời tối không về được thì xếp gối dài, trải chăn rộng, kê giường liền cùng ngủ với nhau để tỏ hết lòng yêu quý nhau. Còn như trong các lễ lớn như triều hạ, tiếp tân, yến tiệc thì phân biệt rõ ngôi thứ, cấp bậc cao thấp. Vì thế, các vương hầu thời ấy không ai là không hòa thuận, kính sợ và cũng không phạm lỗi khinh nhờn, kiêu căng.</p>
<p>Năm <a href="__missing__">1277</a>, Thượng hoàng Thái Tông băng hà, hưởng thọ 60 tuổi, làm Thượng hoàng được 19 năm. Cùng năm đó, Thánh Tông nhường ngôi cho Hoàng thái tử <b>Trần Khâm</b> (陳欽), sử gọi là <a href="__missing__">Trần Nhân Tông</a>. Nhân Tông xưng làm <b>Hiếu Hoàng</b> (孝皇), đổi niên hiệu thành <b>Thiệu Bảo</b> (紹寶).</p>
<p>Khi Nhân Tông lên ngôi, họa giặc giã từ quân Nguyên ở phía Bắc đang kéo đến. Năm đó, quân Nguyên đánh diệt <a href="__missing__">nhà Tống</a>, Tả thừa tướng nhà Tống là <a href="__missing__">Lục Tú Phu</a> cõng Tống đế nhảy xuống biển chết. Hậu cung và các quan chết theo rất nhiều. Qua 7 ngày có đến hơn 10 vạn xác chết nổi lên mặt biển. Xác Tống đế cũng ở trong số đó.</p>
<p>Để chuẩn bị cho chiến tranh chống quân xâm lược, nhà Trần cho tiến hành xét duyệt sổ đinh, chuẩn bị lương thảo lực lượng. Phong cho Hưng Đạo vương <a href="__missing__">Trần Quốc Tuấn</a> (興道王陳國峻) làm <b>Quốc công tiết chế</b>, thống lĩnh quân đội toàn quốc, sai chọn các quân hiệu có tài chỉ huy, chia đi nắm giữ các đơn vị. Cuối cùng, quân đội nhà Trần toàn thắng vào năm <a href="__missing__">1285</a> và năm <a href="__missing__">1288</a>. Đến đây, nhà Trần bắt đầu bước vào thời thịnh trị lâu dài tiếp theo.</p>
<p>Năm <a href="__missing__">1290</a>, Thượng hoàng Thánh Tông băng hà, hưởng dương 50 tuổi. Trị vì được 21 năm, thượng hoàng được 11 năm. Ông là người thiên tư, nhân ái, kế nghiệp Thái Tông khiến quốc gia hưng thịnh, lại giúp Nhân Tông chống giặc ngoại xâm, thực là công lao to lớn. <a href="__missing__">Miếu hiệu</a> <a href="__missing__">Thánh Tông</a> <a href="__missing__">hoàng đế</a> cũng là rất tôn xứng.</p>
<p>Trong nước sau thời kỳ chiến tranh, mất mùa thất bát. Ngay năm Thánh Tông băng hà, trong triều lục đục chuẩn bị tang lễ thì nhân dân ngoài kinh thành lại đói to, 3 <a href="__missing__">thăng</a> gạo giá một quan tiền, dân nhiều người bán ruộng đất, và bán con trai con gái làm nô tỳ cho người, mỗi người giá một quan tiền. Ngay lập tức, xuống chiếu phát thóc công chẩn cấp dân nghèo và miễn thuế nhân đinh. Năm sau, tiếp tục chết đói, 2 năm này liên tiếp nạn đói hoành hành, Nhân Tông ban chiếu cho nô dịch, nô lệ có thể mua chuộc lại ruộng đất để tăng cường cải thiện tình hình lương thực. Tình hình dần dần cải thiện.</p>
<p>Năm <a href="__missing__">1293</a>, Nhân Tông nhường ngôi cho Hoàng thái tử <b>Trần Thuyên</b> (陳烇), sử gọi là <a href="__missing__">Trần Anh Tông</a>. Anh Tông tự xưng làm <b>Anh Hoàng</b> (英皇).</p>
<h4>Anh Tông Minh Tông</h4>
<p>Anh Tông hoàng đế là một vị Hoàng đế có tính trưởng thành cao trong các vị hoàng đế nhà Trần. Khi mới lên nối ngôi, Anh Tông hay uống rượu và đêm thường hay lén ra ngoài đi chơi, có lần bị đồ vô lại ném trúng đầu. Một hôm uống rượu say đến nỗi <a href="__missing__">Thượng hoàng Nhân Tông</a><a href="__missing__">Thiên Trường</a> về kinh đô, các quan đều ra đón rước cả, mà vua vẫn nằm ngủ. Thượng hoàng giận lắm, truyền xa giá lập tức về Thiên Trường và hạ chiếu cho bách quan phải về đấy hội nghị định truất ngôi Anh Tông.</p>
<p>Khi Anh Tông tỉnh rượu, biết thượng hoàng về kinh đô, sợ hãi quá, vội vàng chạy ra ngoài cung gặp một người học trò tên là <a href="__missing__">Đoàn Nhữ Hài</a> (段汝諧), mượn thảo bài biểu để dâng lên tạ tội, rồi cùng với Nhữ Hài xuống thuyền đi suốt đêm đến phủ Thiên Trường. Thượng hoàng xem biểu rồi quở mắng một lúc, và tha lỗi cho Anh Tông. Về đến kinh sư, Anh Tông cho Đoàn Nhữ Hài làm ngự sử trung tán, và từ đấy không uống rượu nữa.</p>
<a href="__missing__">Tập tin:Trần_Anh_Tông_TLĐSXSĐ.jpg</a> chân dung Trần Anh Tông (陳英宗) trong <a href="__missing__">Trúc Lâm đại sĩ xuất sơn đồ</a>
<p>Anh Tông từ sau việc ấy siêng năng hơn, tối hôm tấu duyệt sớ của chính sự. Và từ sau vụ ấy, vua cũng đâm ra ghét người nghiện rượu và không dùng những người ấy vào việc quan. Ông cũng là người rất ghét nạn đánh bạc, đã sai đánh chết Thượng phẩm Nguyễn Hưng vì tội ấy. Dưới thời Anh Tông luật pháp rất nghiêm, vì thế trong nước có trật tự, quốc gia đi lên nhanh chóng.</p>
<p>Dưới thời ông, <a href="__missing__">Ai Lao</a> và các động biên giới thường xuyên quấy nhiễu, dù <a href="__missing__">Trần Quang Khải</a>, <a href="__missing__">Trần Quốc Tuấn</a> đều đã qua đời nhưng các tướng <a href="__missing__">Phạm Ngũ Lão</a>, <a href="__missing__">Trần Nhật Duật</a>, <a href="__missing__">Trần Quốc Tảng</a> đều là các danh tướng nên biên giới được an lành. Đối với <a href="__missing__">văn hóa</a>, thời Anh Tông xuất hiện các danh nhân như Đoàn Nhữ Hài, <a href="__missing__">Trương Hán Siêu</a>, <a href="__missing__">Mạc Đĩnh Chi</a>, <a href="__missing__">Nguyễn Trung Ngạn</a> (阮忠彥), <a href="__missing__">Trần Thì Kiến</a> (陳時見), <a href="__missing__">Bùi Mộc Đạc</a> (裴木鐸).</p>
<p>Về lễ phục quan lại, Anh Tông quy định áo mũ, kiệu ngồi cũng rất chặt chẽ, rõ ràng. Năm <a href="__missing__">1300</a>, quy định quan văn thì đội <b>mũ Đinh tự</b> màu đen, tụng quan thì đội <b>mũ Toàn hoa</b> màu xanh vẫn như quy chế cũ. Ống tay áo của các quan văn võ rộng 9 tấc đến một thước 2 tấc, không cho dùng từ 8 tấc trở xuống. Các quan văn võ không được mặc xiêm, tụng quan không được mặc thường (mũ toàn hoa xanh có hai vòng vàng đính vào hai bên). Nhưng đến năm sau, đổi lại thành các quan văn võ đều đội mũ Đinh tự, thêm miếng lụa bọc tóc màu tía xen màu biếc. Các kiểu mũ của vương hầu: người tóc dài đội <b>mũ Triều thiên</b>, người tóc ngắn đội <b>mũ Bao</b>.</p>
<p>Một sự kiện đánh dấu sự mở rộng cương vực Đại Việt là việc Anh Tông gả em gái là <a href="__missing__">Huyền Trân công chúa</a> (玄珍公主) cho <a href="__missing__">Chế Mân</a> (Jaya Sinhavarman III), để đổi lấy hai châu Ô, Lý (từ <a href="__missing__">đèo Hải Vân</a>, <a href="__missing__">Thừa Thiên</a> đến phía bắc <a href="__missing__">Quảng Trị</a> ngày nay). Nhưng cuộc hôn nhân chỉ được một năm thì Chế Mân băng hà, Anh Tông lo sợ Huyền Trân ở đấy không hay nên cử <a href="__missing__">Trần Khắc Chung</a> (陳克終) cướp công chúa về, từ đấy người Chiêm Thành oán hận Đại Việt. Năm <a href="__missing__">1311</a>, chúa Chiêm là <a href="__missing__">Chế Chí</a> (Jaya Sinhavarman IV) đánh trả nhưng bị đại bại. Năm <a href="__missing__">1318</a>, Chế Năng tiếp tục đem quân đánh phá nhưng vẫn không kết quả.</p>
<p>Năm <a href="__missing__">1314</a>, Anh Tông nhường ngôi cho Hoàng thái tử Trần Mạnh, sử gọi là <a href="__missing__">Trần Minh Tông</a>. Minh Tông tự xưng làm <b>Ninh Hoàng</b> (宁皇). Thượng hoàng Anh Tông vẫn giúp đỡ ông trông coi chính sự. Triều đại nhà Trần dưới thời Minh Tông tiếp tục duy trì sự thịnh vượng của các đời Anh Tông đã tạo nên. Sự thịnh thế này gọi là <b>Anh Minh thịnh thế</b> (英明晟世), kéo dài hơn 60 năm hưng thịnh.</p>
<p>Dưới thời Minh Tông, trong huyết thống hoàng gia đã bắt đầu có ngoại thích xen vào. Đó là việc ông sủng ái <b>Anh Tư phu nhân</b> (英思夫人), con gái một quan viên họ Lê, và em phu nhân là <b>Sung viên Lê thị</b> (充媛黎氏). Cả hai bà đều sinh ra các Hoàng tử đều là những người sẽ kế thừa ngôi vị Hoàng đế Đại Việt tương lai. Anh Tư phu nhân sinh ra Hoàng trưởng tử <b>Trần Vượng</b> (陳旺), <b>Trần Phủ</b> (陳暊) còn Lê sung viên sinh ra hoàng tử út <b>Trần Kính</b> (陳曔).</p>
<p>Minh Tông do sủng ái Anh Tư phu nhân nên muốn lập con của phu nhân là Trần Vượng làm Thái tử, nhưng gặp phải sự phản đối từ cha của <a href="__missing__">Lệ Thánh hoàng hậu</a> (麗聖皇后) là Huệ Vũ vương <a href="__missing__">Trần Quốc Chẩn</a> (陳國瑱), một đại thần trụ cột đương thời, con trai của Nhân Tông hoàng đế, người mà Minh Tông phải gọi bằng chú. Khi Anh Tông hấp hối, ông đã giao Quốc Chẩn chăm nom Minh Tông nên có thể nói địa vị của Quốc Chẩn rất cao. Khi Quốc Chẩn phản đối việc ông lập Trần Vượng làm Thái tử, Minh Tông bèn thôi nhưng rất bực mình. Sau đó, dưới sự xúi giục của <a href="__missing__">Trần Khắc Chung</a> (陳克終), Văn Hiến hầu (文獻侯) là con trai của Trần Nhật Duật, cùng sự ngấm ngầm của Anh Tư phu nhân, Minh Tông đã bắt giam Quốc Chẩn vào một ngôi chùa và khiến Quốc Chẩn thiệt mạng.</p>
<p>Minh Tông sau đó truyền ngôi cho Thái tử Trần Vượng, gọi là <a href="__missing__">Trần Hiến Tông</a>. Hiến Tông chết khi còn trẻ, Minh Tông lập con của Lệ Thánh hoàng hậu là <b>Trần Hạo</b> (陳暭), tức <a href="__missing__">Trần Dụ Tông</a>. Năm <a href="__missing__">1358</a>, Thượng hoàng Minh Tông băng hà, hưởng dương 59 tuổi. Dụ Tông tự mình điều hành chính sự, thời kỳ suy vong của nhà Trần bắt đầu.</p>
<h3>Thời kỳ suy tàn</h3>
<h4>Dụ Tông suy trị</h4>
<p><a href="__missing__">Trần Dụ Tông</a> tuy được đánh giá thông minh, hiểu rộng, sách vở đều thông nhưng đến khi Thượng hoàng Minh Tông băng hà, ông trở nên bỏ bê chính sự. Ông ham mê tửu sắc, ra lệnh cho xây cung điện, tạo sưu cao, thuế nặng làm cho nhân dân vô cùng khổ sở và ca thán. Trong nước, giặc giã nổi lên khắp nơi. Trong khi đó tại triều đình, các bọn gian thần kéo bè kết đảng và trở nên lộng hành vô cùng.</p>
<p><a href="__missing__">Chu Văn An</a> (朱文安), một vị quan thanh liêm, trung thần tại triều đình, đã dâng <a href="__missing__">Thất trảm sớ</a> (七斬疏) đề nghị trị tội những tên tham quan ô lại. Vua Trần Dụ Tông đã không nghe theo nên Chu Văn An đã từ quan về nhà dạy học.</p>
<p>Dụ Tông ham chơi bời, mê <a href="__missing__">đàn hát</a>, thường sai các vương hầu và công chúa bày tiệc đóng trò <a href="__missing__">hát tuồng</a> cho vui, ai diễn hay thì được thưởng. Mặc dù phép tắc nhà Trần rất nghiêm khắc với tội <a href="__missing__">đánh bạc</a> nhưng Trần Dụ Tông lại thích trò này, chiêu tập các nhà giàu vào cung đánh bạc cùng vua. Có người đã xàm tấu với ông rằng Thái úy Cung Tĩnh Đại vương <a href="__missing__">Trần Nguyên Trác</a> (陳元卓) đã yểm bùa hại ông. Dụ Tông chút nữa là sát hại Nguyên Trác, nhưng <a href="__missing__">Hiến Từ hoàng thái hậu</a> đã can ngăn.</p>
<p>Ông sai phu xây cất nhiều cung điện, đào <a href="__missing__">hồ</a><a href="__missing__">vườn</a> trong hậu cung, trong hồ xây đá làm núi, trồng nhiều cây cỏ lạ và nuôi <a href="__missing__">chim thú</a> quý; sau đó ông lại sai làm hồ con, lệnh cho dân ra biển chở nước mặn đổ vào hồ và thả cá biển, <a href="__missing__">đồi mồi</a> vào nuôi.</p>
<p>Vua thích chơi bời, các quý tộc cũng hưởng ứng theo vua khiến triều đình rối nát. Bên ngoài xảy ra mất mùa trong nhiều năm. Trần Dụ Tông chỉ có các biện pháp khắc phục tạm thời như sai các nhà hào phú bỏ thóc lúa chu cấp cho người nghèo để chống đói và thưởng chức tước cho họ để trả công; ông không chú trọng việc <a href="__missing__">đắp</a> <a href="__missing__">đê</a> và làm <a href="__missing__">thủy lợi</a> để phát triển nông nghiệp lâu dài.</p>
<h4>Loạn Dương Nhật Lễ</h4>
<p>Năm <a href="__missing__">1369</a>, Trần Dụ Tông băng hà, hưởng dương 34 tuổi, cai trị được 28 năm.</p>
<p><a href="__missing__">Trần Nhật Lễ</a>, con của Cung Tĩnh vương <a href="__missing__">Trần Nguyên Dục</a> (陳元育) được chọn làm người kế thừa đại thống. Nhật Lễ không phải là con của Nguyên Dục mà mẹ Nhật Lễ vốn là cô đào, vợ của kép hát <a href="__missing__">Dương Khương</a> (楊姜). Bà múa vở <i>Vương mẫu hiến bàn đào</i>, thân người rất đẹp nên Nguyên Dục si mê, buộc bà phải bỏ Dương Khương mà về làm vợ mình, nhưng lúc đó bà đã mang thai Lễ. Sau khi Nhật Lễ sinh ra, Nguyên Dục tự nhận làm con mình. Đến khi Dụ Tông <a href="__missing__">bệnh</a> nặng, truyền ngôi cho Nhật Lễ để kế thừa. Thật ra, lúc đó triều thần không muốn thế mà muốn lập Cung Định vương <a href="__missing__">Trần Phủ</a> lên thay, nhưng <a href="__missing__">Hiến Từ hoàng thái hậu</a> lại nghĩ đó là cháu mình, khăng khăng lập Nhật Lễ nên quần thần đều nghe theo. Nhật Lễ lên ngôi, tôn Thái hậu làm <i>Thái hoàng thái hậu</i>, <a href="__missing__">Trần Nguyên Trác</a> làm <i>Thượng tướng quốc thái tể</i>. Sau này, Thái hoàng thái hậu biết chuyện của Nhật Lễ, hết sức thất vọng mà muốn phế truất Lễ nên Lễ ra tay trước, cho người ngầm bỏ <a href="__missing__">độc</a> giết chết Thái hậu.</p>
<p>Nhật Lễ ở ngôi bỏ bễ chính sự, ham tửu sắc, hằng ngày chỉ rong chơi, thích các trò hát xướng, muốn đổi lại họ là Dương, việc này làm bất bình trong giới hoàng tộc nhà Trần trong đó có Thái tể Trần Nguyên Trác. Ông ngầm lập mưu bắt Lễ trong cung, cùng con trai là Trần Nguyên Tiết với 2 cháu trai là con của <a href="__missing__">Thiên Ninh công chúa</a> (天寧公主) xâm nhập vào cung nhưng kế hoạch thất bại, Nguyên Trác cùng đồng đảng đều bị Nhật Lễ giết hết.</p>
<p>Mùa đông, tháng 10 năm <a href="__missing__">1370</a>, Cung Định vương Trần Phủ vì có con gái làm hoàng hậu của Nhật Lễ, sợ vạ lây đến mình nên tránh ra trấn Đà Giang (<a href="__missing__">Gia Hưng</a>), ngầm hẹn với các em là Cung Tuyên Vương Trần Kính, Chương Túc quốc thượng hầu <a href="__missing__">Trần Nguyên Đán</a> (陳元旦) cùng với Thiên Ninh công chúa hội ở sông Đại Lại, phủ <a href="__missing__">Thanh Hóa</a> để dấy quân. Lật đổ được Nhật Lễ, giáng xuống làm <b>Hôn Đức công</b> (昏德公).</p>
<p>Cùng năm ấy, Cung Định vương Trần Phủ lên ngôi, tức là <a href="__missing__">Trần Nghệ Tông</a>.</p>
<h4>Hồ Quý Ly chiếm ngôi</h4>
<p>Nghệ Hoàng giữ ngai vị được 2 năm, lên làm <a href="__missing__">Thái thượng hoàng</a> và nhường ngôi cho em là Trần Kính lên thay, tức là <a href="__missing__">Trần Duệ Tông</a>. Năm <a href="__missing__">1377</a>, Duệ Tông tử trận ở <a href="__missing__">Chiêm Thành</a>, Nghệ Hoàng lập con Duệ Tông là <b>Trần Hiện</b> (陳晛) lên thay, sử gọi là <a href="__missing__">Trần Phế Đế</a>. Thượng hoàng Nghệ Tông nắm quyền bính trong tay quyết định mọi việc nhưng lại quá tin dùng một mình <a href="__missing__">Hồ Quý Ly</a> (黎季犛), là cháu của Minh Từ thái phi, mẹ của Nghệ Hoàng.</p>
<p>Hồ Quý Ly muốn nắm đại quyền, nên xúi giục Nghệ Hoàng giết hại các trung thần, các hoàng tử, các thân vương và ngay cả Phế Đế cũng bị sự gièm pha của Quý Ly mà bị Nghệ Tông phế bỏ. Con út của Nghệ Hoàng là <b>Trần Ngung</b> (陳顒), tức <a href="__missing__">Trần Thuận Tông</a> được lập lên ngôi nhưng cũng không có thực quyền. Con gái lớn của Quý Ly là <a href="__missing__">Khâm Thánh hoàng hậu</a> của Thuận Tông, nên mọi việc của Thuận Tông càng bị Quý Ly siết chặt hơn bởi lẽ Hồ Quý Ly rất gian xảo.</p>
<p>Do sự suy yếu chính quyền, các cuộc khởi nghĩa đã nổ ra. Cụ thể là khởi nghĩa của:</p>
<ol><li><a href="__missing__">Ngô Bệ</a>.</li>
<li><a href="__missing__">Nguyễn Thanh</a> cùng với cậu hai là <a href="__missing__">Nguyễn Kỵ</a> và em út là <a href="__missing__">Nguyễn Bổ</a>.</li>
<li><a href="__missing__">Nguyễn Nhữ Cái</a>.</li>
<li><a href="__missing__">Phạm Sư Ôn</a> - tăng sư nổi tiếng.</li></ol>
<p>Vì có mưu đồ soán đoạt ngôi vị mà lại được sự tin dùng của Nghệ Tông nên Hồ Quý Ly đã tạo được khá nhiều phe cánh và bè đảng ở triều đình và khắp mọi nơi. Rồi từ đó Quý Ly càng ngày càng lộng quyền không coi ai ra gì.</p>
<p>Năm <a href="__missing__">1394</a>, Nghệ Hoàng băng hà, hưởng thọ 74 tuổi. Hồ Quý Ly nắm lấy cả quyền hành rồi sai người vào đất <a href="__missing__">Thanh Hóa</a> xây thành <a href="__missing__">Tây Đô</a>. Sau khi công việc xong xuôi, Quý Ly bắt Trần Thuận Tông dời kinh về Tây Đô rồi lập mưu ép Thuận Tông nhường ngôi cho con là Trần An, khi đó mới có 3 tuổi lên ngôi, tức <a href="__missing__">Trần Thiếu Đế</a>. Quý Ly lên làm <a href="__missing__">phụ chính</a> sai người giết Thuận Tông, tự xưng làm <i>Quốc Tổ Chương Hoàng</i> (國祖章皇).</p>
<p>Nhìn thấy âm mưu của Hồ Quý Ly, nhiều tướng lĩnh nhà Trần như Đại tướng quân <a href="__missing__">Trần Khát Chân</a> (陳渴真) cùng các tông thất lập hội với mưu đồ tiễu trừ Quý Ly, nhưng cơ mưu bị bại lộ, tất cả đều bị bắt và bị giết vào khoảng hơn 370 người. Năm <a href="__missing__">1400</a>, Quý Ly phế truất Thiếu Đế rồi tự xưng làm vua, chiếm lấy ngôi nhà Trần, đổi sang họ Hồ (胡), lập ra triều đại <a href="__missing__">nhà Hồ</a>.</p>
<p>Nhà Trần chấm dứt, kéo dài 175 năm với 12 đời hoàng đế.</p>
<h4><a href="__missing__">Nhà Hậu Trần</a> chống quân Minh</h4>
<p>Hồ Quý Ly làm vua được 7 năm thì mất nước vào tay quân Minh. Tôn thất nhà Trần khởi nghĩa chống quân Minh, nhà Trần được tái lập bởi <a href="__missing__">Giản Định đế</a> - Trần Ngỗi vào tháng 10 âm lịch năm 1407 tại Ninh Bình.</p>
<p>Bị quân Minh truy sát, Giản Định đế chạy vào Nghệ An, viên Đại tri châu châu Hóa là <a href="__missing__">Đặng Tất</a> giết quan nhà Minh, dẫn quân từ Hóa châu ra theo phò, nhà Hậu Trần làm chủ từ Nghệ An vào Thanh Hóa. Năm 1408, quân Hậu Trần tiến quân ra Bắc, đánh bại quân Minh do Chinh Di tướng quân <a href="__missing__">Mộc Thạnh</a> chỉ huy ở <a href="__missing__">trận Bô Cô</a>, bao vây các thành, cơ hội khôi phục nhà Trần, giành lại đất nước trở nên rõ ràng. Nhưng năm 1409, Giản Định đế nghe lời gièm pha, giết 2 tướng trụ cột là Đặng Tất và <a href="__missing__">Nguyễn Cảnh Chân</a>, khiến cho 2 người con của họ là <a href="__missing__">Đặng Dung</a><a href="__missing__">Nguyễn Cảnh Dị</a> kéo quân trở về Nghệ An lập <a href="__missing__">Trần Quý Khoáng</a> lên làm vua, hiệu là Trùng Quang đế. Trùng Quang đế bắt Giản Định đế và tôn làm Thượng hoàng, cả hai cùng nhau đánh quân Minh. Hoàng đế <a href="__missing__">Vĩnh Lạc</a> nhà Minh sai <a href="__missing__">Trương Phụ</a> đem quân tiếp viện cho Mộc Thạnh. Giản Định đế thua trận bị xử tử. Trùng Quang đế núng thế, lui dần về phía Nam và thất bại hoàn toàn trong <a href="__missing__">trận đánh đẫm máu ở Thuận Hóa</a> năm 1414. Trùng Quang đế tự sát. Như vậy nhà Hậu Trần gồm 2 vua, kéo dài được 7 năm (1407-1414).</p>
<p>Do Trùng Quang đế và Giản Định đế đều là thành viên hoàng tộc nhà Trần, có công lãnh đạo nhân dân chống ngoại xâm nên dù thất bại trong việc khôi phục nhà Trần và nước Đại Việt, họ vẫn được người dân coi là 2 vị vua chính thống của nhà Trần và nước Đại Việt. Do vậy các đền thờ nhà Trần thường có tượng thờ và bài vị 14 vị vua (gồm 12 vua nhà Trần và 2 vua nhà Hậu Trần).</p>
<h3>Nhận định</h3>
<h4>Về chiến thắng Mông - Nguyên</h4>
<p>Theo đánh giá của các sử gia, việc nhà Trần lên thay nhà Lý vào đầu thế kỷ 13 là cần thiết và kịp thời cho sự phục hưng nước Đại Việt bị suy yếu nghiêm trọng cuối thời nhà Lý. Nếu không có sự xuất hiện của nhà Trần, nước Đại Việt sẽ khó tồn tại trong cảnh <a href="__missing__">cát cứ</a> (Nguyễn Nộn, Đoàn Thượng) bên trong và họa Mông - Nguyên bên ngoài như các nước Đại Lý, Nam Tống láng giềng. Nguyên nhân cơ bản nhất cho những thành công của nhà Trần là chính sách đoàn kết nội bộ của những người lãnh đạo. Dù trong hoàng tộc nhà Trần có những người phản bội theo nhà Nguyên nhưng nước Đại Việt không bị mất, nhờ sự ủng hộ của đông đảo dân chúng.</p>
<p>Còn một nguyên nhân nữa phải kể tới trong thành công của nhà Trần là đội ngũ tướng lĩnh xuất sắc, nòng cốt lại chính là các tướng trong hoàng tộc nhà Trần. Dù xuất thân quyền quý nhưng các hoàng tử, thân tộc nhà Trần, ngoài lòng yêu nước - và bảo vệ quyền lợi dòng tộc - số lớn là những người có thực tài cả văn lẫn võ. Thật hiếm dòng họ cai trị nào có nhiều nhân tài nổi bật và nhiều chiến công như nhà Trần, đặc biệt là thế hệ thứ hai: <a href="__missing__">Trần Quốc Tuấn</a>, <a href="__missing__">Trần Nhân Tông</a>, <a href="__missing__">Trần Quang Khải</a>, <a href="__missing__">Trần Nhật Duật</a> đều là những tên tuổi lớn trong <a href="__missing__">lịch sử Việt Nam</a>. Đó là chưa kể tới <a href="__missing__">Trần Thủ Độ</a>, <a href="__missing__">Trần Khánh Dư</a>, <a href="__missing__">Trần Quốc Toản</a>...</p>
<p>Mông - Nguyên đương thời là đế quốc lớn nhất thế giới. Những nơi người Mông bại trận lúc đó như Ai Cập quá xa xôi, <a href="__missing__">Nhật Bản</a><a href="__missing__">Indonesia</a> đều có biển cả ngăn cách và quân Mông cũng không có sở trường đánh thủy quân nên mới bị thua trận. Thế nhưng nước <a href="__missing__">Đại Việt</a> lúc đó nằm liền kề trên đại lục Trung Hoa, chung đường biên giới cả ngàn dặm với người Mông mà người Mông vẫn không đánh chiếm được. Một đế quốc đã nằm trùm cả đại lục Á-Âu mà không lấy nổi một dải đất bé nhỏ ở phía nam. Có so sánh tương quan lực lượng với kẻ địch và vị trí địa lý với những quốc gia làm được điều tương tự mới thấy được sự vĩ đại của chiến công 3 lần đánh đuổi Mông - Nguyên của nhà Trần.</p>
<h4>Về hậu kỳ nhà Trần</h4>
<p>Nhìn chung, triều Trần có thể chia ba thời kỳ: thời thứ nhất từ <a href="__missing__">Thái Tông</a> đến <a href="__missing__">Nhân Tông</a> là thời xây dựng và chống Mông-Nguyên, thời thứ hai từ <a href="__missing__">Anh Tông</a> đến <a href="__missing__">Hiến Tông</a> (có thượng hoàng <a href="__missing__">Minh Tông</a>) là thời kế tục, thời thứ ba từ <a href="__missing__">Dụ Tông</a> (sau khi thượng hoàng Minh Tông mất) tới khi kết thúc là thời suy tàn.</p>
<p>Để tránh "họa ngoại thích", nhà Trần chủ trương chính sách "hôn nhân nội tộc". Chính sự nhà Trần bắt đầu suy từ đời vua <a href="__missing__">Trần Dụ Tông</a> thích xa hoa hưởng lạc, xa lánh lương thần, tin dùng gian thần. Nhưng đó đơn giản chỉ là sự hưởng thụ như <a href="__missing__">Lý Cao Tông</a> trước đây mà thôi. Tới các đời sau, đặc biệt là <a href="__missing__">Trần Nghệ Tông</a><a href="__missing__">Trần Phế Đế</a> (Đế Hiện), có hàng loạt biểu hiện của sự mê muội, u tối của người cầm quyền. Trần Nghệ Tông tin dùng một mình Hồ Quý Ly, nghe lời Quý Ly sát hại hàng loạt con cháu, người thân tộc họ Trần. Nhiều hành động của Nghệ Tông như thể để "dọn đường" cho Quý Ly cướp ngôi nhà Trần sau này. Thời kỳ Nghệ Tông trở về sau, vấn đề chống <a href="__missing__">Chiêm Thành</a> là lớn nhất, vậy mà một Quý Ly luôn chạy dài trước những đợt tấn công của địch, không hề lập được công bao giờ, lại vẫn được tin dùng đến như vậy. Còn Nghệ Tông đối với Đỗ Tử Bình, gian thần xảo trá gây ra cái chết của <a href="__missing__">Trần Duệ Tông</a>, không những không trừng trị đích đáng mà còn nhiều lần thăng lên làm đại thần cấp cao hơn trước, khi chết (1382) còn được truy tặng gia phong. Những hành động tối tăm, mê muội đó phải chăng là sản phẩm của sự "thoái hóa giống nòi" do "hôn nhân nội tộc" nhiều đời gây ra? Những lần tiếm quyền, thoán ngôi khác trong lịch sử Việt Nam như Dương (Tam Kha) đoạt <a href="__missing__">Ngô</a>, <a href="__missing__">Tiền Lê</a> đoạt Đinh, Trần đoạt Lý, Mạc cướp Lê, Trịnh át Lê đều là "cường thần hiếp chúa". Quan hệ giữa Quý Ly với Nghệ Tông, Tử Bình với Đế Hiện không thể như <a href="__missing__">Trần Thủ Độ</a> với <a href="__missing__">Lý Huệ Tông</a>, <a href="__missing__">Mạc Đăng Dung</a> với <a href="__missing__">Lê Cung Hoàng</a>... Việc dung túng cho cấp dưới, những kẻ trực tiếp đụng chạm tới quyền lợi của dòng tộc mình mà vẫn "không hay biết" như các vua Trần quả là hiếm có.</p>
<p>Các vua Trần thời hậu kỳ, kể cả Minh Tông, đều không biết chiêu mộ nhân tài; lực lượng quan lại đều kém tài. Nếu thế hệ trước thắng Mông-Nguyên khổng lồ một cách oai hùng bao nhiêu thì đời con cháu lại thất bại và phải chạy trốn một Chiêm Thành nhỏ bé, từng núp bóng mình trong chiến tranh chống Nguyên Mông xưa kia. Tới lúc bị Chiêm Thành xâm lấn, không hề có một gương mặt nào của dòng họ Trần đứng ra chống được giặc mà phải dựa vào một tướng ngoài hoàng tộc (<a href="__missing__">Trần Khát Chân</a> vốn mang họ Lê). Nếu trong tông thất nhà Trần thời kỳ sau có những nhân tài như giai đoạn đầu thì dù Quý Ly có manh tâm cũng không thể tính chuyện cướp ngôi. Nhà Trần trượt dốc từ <a href="__missing__">Trần Dụ Tông</a>, sau sự kiện <a href="__missing__">Dương Nhật Lễ</a> và cái chết của Duệ Tông đã không gượng dậy được nữa. Đó chính là thời cơ cho Hồ Quý Ly làm việc chuyên quyền và chiếm lấy ngôi nhà Trần.</p>
<p>Dù sao, nhà Trần vẫn là một trong những triều đại nổi bật nhất trong <a href="__missing__">lịch sử Việt Nam</a>. Trang sử về nhà Trần với ba lần chiến thắng giặc Mông - Nguyên trong sử sách nằm trong số những trang sáng nhất và để lại nhiều bài học cho đời sau.</p>
<h2>Quan hệ đối ngoại</h2>
<p>Trong triều đại nhà Trần, ngoài những cuộc chiến tranh với quân <a href="__missing__">Nguyên</a> <a href="__missing__">Mông</a> ở phía Bắc thì <a href="__missing__">Đại Việt</a> cũng có những sự liên hệ với các nước láng giềng phía tây và phía nam là <a href="__missing__">Ai Lao</a> (<a href="__missing__">Lan Xang</a>) và <a href="__missing__">Chiêm Thành</a>.</p>
<h3>Chiêm Thành</h3>
<p>Có thể nói trong các <a href="__missing__">triều đại</a> <a href="__missing__">Việt Nam</a>, <a href="__missing__">Chiêm Thành</a> không lúc nào không quấy phá và cuộc chiến tranh giữa hai nước vẫn thường xuyên xảy ra. Lúc nhà Trần lên ngôi, nước Chiêm Thành vẫn giữ lệ triều cống và giao hòa. Trong đời vua <a href="__missing__">Trần Nhân Tông</a>, sau khi chinh phạt <a href="__missing__">Chiêm Thành</a>, thì giữa <a href="__missing__">Đại Việt</a> và nước <a href="__missing__">Chiêm Thành</a> có sự qua lại tốt đẹp. Đến đời vua <a href="__missing__">Trần Anh Tông</a>, lúc bấy giờ <a href="__missing__">Trần Nhân Tông</a> đã lên làm thái thượng hoàng và trong lúc sang thăm vãn cảnh nước Chiêm và để cho tình giao hảo của hai nước trở nên bền vững hơn, nhà Trần đã gả công chúa <a href="__missing__">Huyền Trân</a> cho <a href="__missing__">vua Chiêm Thành</a><a href="__missing__">Chế Mân</a> vào năm <a href="__missing__">1306</a>. Chế Mân dâng <a href="__missing__">châu Ô</a><a href="__missing__">châu Rí</a> cho <a href="__missing__">Đại Việt</a>. Vua <a href="__missing__">Trần Anh Tông</a> đổi tên là <a href="__missing__">Thuận Châu</a><a href="__missing__">Hóa Châu</a> rồi đặt quan cai trị cũng như cho di dân sang ở. Một năm sau, Chế Mân chết. Theo tục lệ <a href="__missing__">Chiêm Thành</a> thì hoàng hậu phải bị hỏa thiêu chết theo. Vua <a href="__missing__">Trần Anh Tông</a> sai tướng <a href="__missing__">Trần Khắc Chung</a> giả tiếng vào thăm rồi tìm kế rước về.</p>
<p><a href="__missing__">Chế Mân</a> chết thì <a href="__missing__">Chế Chỉ</a> lên thay và đòi lại hai châu mà <a href="__missing__">Chế Mân</a> đã dâng cho <a href="__missing__">Đại Việt</a>. Vua <a href="__missing__">Trần Anh Tông</a> sai quân sang bắt Chế Chỉ đem về trị tội và phong cho em của Chế Chỉ là <a href="__missing__">Chế Đà A Bà</a> lên thay làm vua nước Chiêm Thành. Đến đời vua <a href="__missing__">Trần Dụ Tông</a>, con và rể của vua Chiêm Thành tranh giành nhau ngôi vua, quân nhà Trần sang can thiệp nhưng bị quân Chiêm Thành đánh bại cả hai lần.</p>
<p>Năm <a href="__missing__">1370</a>, các hoàng tử con vua <a href="__missing__">Trần Minh Tông</a> lật đổ <a href="__missing__">Dương Nhật Lễ</a> (xem phần "Thời kỳ suy tàn" bên dưới) lập <a href="__missing__">Trần Nghệ Tông</a>. Mẹ Nhật Lễ chạy sang <a href="__missing__">Chiêm Thành</a> xui vua <a href="__missing__">Chiêm Thành</a> đánh <a href="__missing__">Đại Việt</a>. Lúc đó thế lực nhà Trần suy yếu, <a href="__missing__">Chiêm Thành</a> có ý khởi binh đánh đòi lại hai châu đã mất. Đến đời vua <a href="__missing__">Trần Duệ Tông</a>, vua <a href="__missing__">Chiêm Thành</a><a href="__missing__">Chế Bồng Nga</a> quấy rối biên giới, vua <a href="__missing__">Trần Duệ Tông</a> sai <a href="__missing__">Đỗ Tử Bình</a> đem quân trấn giữ <a href="__missing__">Hóa Châu</a>. <a href="__missing__">Chế Bồng Nga</a> đem 10 mâm vàng dâng lên. Tử Bình ỉm đi, cướp làm của mình, nối dối là <a href="__missing__">Chế Bồng Nga</a> ngạo mạn vô lễ, nên đem quân đánh. Duệ Tông giận lắm, quyết ý thân chinh. Cuối năm <a href="__missing__">1376</a>, quân Trần xuất phát. Năm <a href="__missing__">1377</a>, quân Trần chiếm cửa <a href="__missing__">Thị Nại</a> (<a href="__missing__">Quy Nhơn</a> ngày nay) rồi tiến đánh kinh thành là <a href="__missing__">Đồ Bàn</a>. Lúc đó <a href="__missing__">Chế Bồng Nga</a>, một ông vua có tài thao lược, dùng kế dụ quân Nhà Trần vào ổ mai phục đánh tan. Vua <a href="__missing__">Trần Duệ Tông</a> bị tử trận, <a href="__missing__">Hồ Quý Ly</a>, <a href="__missing__">Đỗ Tử Bình</a> rút quân bỏ chạy về nước. Thừa thắng xông lên, <a href="__missing__">Chế Bồng Nga</a> nhiều lần mang quân sang đánh phá <a href="__missing__">Đại Việt</a>, <a href="__missing__">Hồ Quý Ly</a> nhiều lần bị bại trận, quân <a href="__missing__">Chiêm Thành</a> ba lần chiếm được kinh thành <a href="__missing__">Thăng Long</a>, vua tôi nhà Trần phải bỏ thành chạy. Quân <a href="__missing__">Chiêm Thành</a> cướp phá kinh thành rồi rút về. <a href="__missing__">Đỗ Tử Bình</a> chỉ bị đồ làm lính một năm rồi sau đó lại được nhấc lên địa vị cao hơn.</p>
<p>Năm <a href="__missing__">1390</a>, <a href="__missing__">Chế Bồng Nga</a> lại đem quân sang đánh. Tướng trẻ <a href="__missing__">Trần Khát Chân</a> được lệnh đem binh dàn trận ở <a href="__missing__">sông Hải Triều</a> (<a href="__missing__">sông Luộc</a> ở vùng <a href="__missing__">Hưng Yên</a> ngày nay). Nhờ có hàng tướng bên Chiêm sang chỉ chỗ, Khát Chân sai chĩa hỏa pháo nhằm cả vào thuyền <a href="__missing__">Chế Bồng Nga</a> mà bắn. Vua <a href="__missing__">Chiêm Thành</a> trúng đạn tử trận, quân <a href="__missing__">Chiêm Thành</a> bỏ chạy và sau đó con của <a href="__missing__">Chế Bồng Nga</a> hàng phục <a href="__missing__">Đại Việt</a>. Kể từ đó trong thời gian dài <a href="__missing__">Chiêm Thành</a> không dám đánh <a href="__missing__">Đại Việt</a> nữa.</p>
<h3><a href="__missing__">Ai Lao</a></h3>
<p>Vào đời nhà Trần, quân của <a href="__missing__">Ai Lao</a> thường sang quấy phá cướp bóc ở vùng <a href="__missing__">Nghệ An</a><a href="__missing__">Thanh Hóa</a>. Vì thế triều đình nhà Trần đã phải sai quân lính đi đánh dẹp mãi và chính các vị vua phải thân chinh đi dẹp giặc, trong đó nhiều nhất phải kể đến vua <a href="__missing__">Trần Nhân Tông</a>. Mỗi lần bị thua thì quân <a href="__missing__">Ai Lao</a> rút về, nhưng sau đó thì lại sang quấy phá. Trong đời vua <a href="__missing__">Trần Anh Tông</a>, ông cũng nhiều lần thân chinh đi dẹp giặc nhưng ông cũng đã ra lệnh cho <a href="__missing__">Phạm Ngũ Lão</a> hơn ba, bốn phen đi dẹp giặc. Vua <a href="__missing__">Trần Minh Tông</a> cũng nhiều phen thân chinh đi dẹp giặc. Trong triều đại nhà Trần, mục đích của <a href="__missing__">Đại Việt</a> là dẹp các cuộc đánh phá và quấy nhiễu của quân <a href="__missing__">Ai Lao</a> chứ không có mục đích đánh chiếm lấy đất nước này.</p>
<h2>Tổ chức quân đội</h2>
<a href="__missing__">Tập tin:Gốm_binh_sĩ_Trần.jpg</a> Hình vẽ mô tả binh sĩ thời Trần trên đồ <a href="__missing__">gốm</a>
<p>Quân chủ lực nhà Trần gồm cấm quân và quân các lộ. Quân các lộ ở đồng bằng gọi là chính binh, ở miền núi gọi là phiên binh. Cấm quân được gọi là quân túc vệ.</p>
<p>Các đơn vị quân đội được gọi là <i>quân</i>. Đứng đầu mỗi quân là một đại tướng quân. Mỗi quân có 30 đô, chỉ huy mỗi đô có chánh phó đại đội. Mỗi đô có 5 ngũ, đứng đầu mỗi ngũ là đầu ngũ.</p>
<p>Cấm quân là lực lượng nòng cốt trong chiến tranh chống ngoại xâm, có thể được điều động đi các lộ để tác chiến.</p>
<p>Nhằm có lực lượng đông đảo cần thiết khi chống xâm lược, nhà Trần kế tục chính sách <i>ngụ binh ư nông</i> (giữ quân lính ở nhà nông) của <a href="__missing__">nhà Lý</a>, vừa đảm bảo số quân cần thiết phòng khi có chiến tranh xảy tới. Vua Trần một phần giữ lại ở kinh thành phòng khi có chuyện cấp bách, một phần cho về quê cày ruộng. Quân cấm vệ và các lộ có khoảng 10 vạn người.</p>
<h2>Chiến tranh chống Mông Nguyên</h2>
<p><b><a href="__missing__">Lần 1</a></b></p>
<p>Ở phương Bắc, người Mông Cổ dần dần xâm chiếm Trung Quốc. Sau khi tiêu diệt <a href="__missing__">nhà Kim</a> phía bắc, các vua Mông Cổ tiến xuống phía nam để diệt nước <a href="__missing__">Nam Tống</a> vốn đã suy yếu khi bị <a href="__missing__">nhà Kim</a> của người <a href="__missing__">Nữ Chân</a> xâm lấn từ đầu thế kỷ XII. Để tạo thế bao vây Nam Tống, vua Mông Cổ đánh chiếm nước <a href="__missing__">Đại Lý</a> (<a href="__missing__">Vân Nam</a> (1254) và sau đó đánh sang Đại Việt.</p>
<p>Cuối năm <a href="__missing__">1257</a>, tướng Mông Cổ là <a href="__missing__">Ngột Lương Hợp Thai</a> (<i>Uriyangqadai</i> hay 兀良合台) mang 3 vạn quân tiến vào nước Đại Việt qua đường Vân Nam. Vua Trần Thái Tông đích thân ra chiến trận. Quân Trần cố gắng chặn nhưng quân Mông Cổ vẫn tiến vào được Thăng Long. Nhân dân Thăng Long theo lệnh của triều đình đã thực hiện "<a href="__missing__">vườn không nhà trống</a>", rút về Thiên Mạc (Hà Nam). Ngột Lương Hợp Thai kéo quân vào Thăng Long chưa đầy một tháng thì bị thiếu lương thực. Nhân cơ hội đó quân Đại Việt phản công ở Đông Bộ Đầu (Từ Liêm-Hà Nội). Quân Mông Cổ thua phải rút khỏi Thăng Long, đến vùng Quy Hóa (Yên Bái) bị quân của tộc trưởng Hà Bổng đánh tan tác, quân Mông Cổ rút chạy về Vân Nam.</p>
<p><b><a href="__missing__">Lần 2</a><a href="__missing__">3</a></b></p>
<p>Năm <a href="__missing__">1279</a>, quân Mông diệt được <a href="__missing__">Nam Tống</a>. Từ năm 1280, vua Mông Cổ là <a href="__missing__">Hốt Tất Liệt</a> đã lập ra <a href="__missing__">nhà Nguyên</a>. Để lấy cớ đánh <a href="__missing__">Đại Việt</a>, nhà Nguyên cho <a href="__missing__">Toa Đô</a> mượn đường đánh <a href="__missing__">Chiêm Thành</a> (<a href="__missing__">Champa</a>). Sau nhiều hoạt động ngoại giao hòa hoãn bất thành, cuối cùng chiến tranh bùng phát. Cuối năm 1284, nhà Nguyên liền phái hoàng tử Thoát Hoan và tướng Toa Đô mang quân đánh hai đường nam, bắc kẹp lại để chiếm Đại Việt. Thoát Hoan đi từ <a href="__missing__">Quảng Tây</a> còn Toa Đô đi đường biển từ cảng <a href="__missing__">Quảng Châu</a>, trước hết đánh vào Chiêm Thành rồi đánh "gọng kìm" thốc lên từ phía nam Đại Việt.</p>
<p>Đây là lần xâm lược Đại Việt với quy mô lớn nhất của nhà Nguyên (huy động hơn 50 vạn quân) và cũng là cuộc kháng chiến gian khổ nhất của nhà Trần chống phương Bắc, quyết định sự tồn vong của Đại Việt lúc đó.</p>
<p>Sau nhiều đợt rút lui để tránh thế mạnh của các đạo quân Mông, dùng chiến thuật "vườn không nhà trống" để quân địch không có lương ăn và bị bệnh dịch do không hợp thủy thổ bản địa, nhà Trần tổ chức phản công vào cuối xuân, đầu hè năm <a href="__missing__">1285</a>. Với những chiến thắng ở <a href="__missing__">Tây Kết</a>, <a href="__missing__">Hàm Tử</a>, <a href="__missing__">Chương Dương</a>, quân Trần đại thắng, bắt giết được Toa Đô. Thoát Hoan thu tàn quân chạy về bắc.</p>
<p>Thắng lợi năm <a href="__missing__">1285</a> cơ bản xác định sự tồn tại của Đại Việt và củng cố lòng tin của người Việt có thể đương đầu được với đạo quân hùng mạnh của Mông Nguyên liền kề phía bắc. Bởi vậy trong lần <a href="__missing__">kháng chiến thứ 3</a> chống Mông Nguyên năm 1287, <a href="__missing__">Hưng Đạo Vương Trần Quốc Tuấn</a> nói với <a href="__missing__">vua Trần</a>: "...Quân ta đã quen việc chiến trận, mà quân nó thì sợ phải đi xa... Theo như thần thấy, phá được chúng là điều chắc chắn". Nhà Trần tiếp tục chủ động áp dụng chiến thuật tránh thế mạnh, triệt lương thảo. Cuối cùng quân Trần đại phá quân Nguyên ở sông Bạch Đằng tháng 4 năm 1288, bắt sống Nguyên soái <a href="__missing__">Ô Mã Nhi</a>, Phàn Tiếp, Tích Lệ Cơ. <a href="__missing__">Thoát Hoan</a> một lần nữa trốn chạy về bắc.</p>
<p>Sau thất bại lần thứ ba ở Đại Việt, <a href="__missing__">Nguyên Thế Tổ</a> Hốt Tất Liệt vẫn chưa muốn đình chiến. Sang các năm sau, vua Nguyên tiếp tục muốn điều binh sang nhưng chưa gặp thời cơ thuận tiện. Tới năm 1294 lại định điều binh lần nữa thì chính <a href="__missing__">Hốt Tất Liệt</a> băng hà. Cháu nội là <a href="__missing__">Nguyên Thành Tông</a> lên ngôi không muốn gây chiến với Đại Việt nữa. Việc chiến tranh với <a href="__missing__">nhà Nguyên</a> từ đó mới chấm dứt.</p>
<h2>Hành chính</h2>
<p>Đời nhà Trần, Việt Nam chia ra làm 12 lộ, <i><a href="__missing__">Đại Việt sử ký toàn thư</a></i> (ĐVSKTT) chép như sau:</p>
<i>Nhâm Dần, Thiên Ứng Chính Bình năm thứ 11 (<a href="__missing__">1242</a>): Mùa xuân, tháng 2, chia nước làm 12 lộ. Đặt chức <a href="__missing__">an phủ</a>, <a href="__missing__">trấn phủ</a>, có 2 viên chánh, phó để cai trị. Các xã, sách thì đặt chức <a href="__missing__">đại tư xã</a>, <a href="__missing__">tiểu tư xã</a>. Từ ngũ phẩm trở lên là đại tư xã, từ lục phẩm trở xuống là tiểu tư xã. Có người làm kiêm cả hai-4 xã, cùng xã chính, xã sử, xã giám gọi là <a href="__missing__">xã quan</a>.</i>
<p>Mỗi lộ đều có quyền dân tịch để kiểm soát dân số trong lộ. Dân chúng trong nước được chia ra làm 3 hạng: hạng tiểu hoàng nam (từ 18 tuổi đến 20 tuổi), hạng đại hoàng nam (từ 20 tuổi đến 60 tuổi) và hạng lão (trên 60 tuổi). Lúc đầu chỉ có những người trong hoàng tộc mới được giữ các chức quan nhưng từ đời vua <a href="__missing__">Anh Tông</a>, những người tài đức cũng được tuyển dụng vào giữ các chức vụ quan trọng này. Sách <a href="__missing__">Khâm định Việt sử Thông giám Cương mục</a>, phần chính biên, có ghi lại 12 lộ như sau: Thiên Trường, <a href="__missing__">Long Hưng</a>, Quốc Oai, Bắc Giang, Hải Đông, <a href="__missing__">Trường Yên</a>, Kiến Xương, Hồng Khoái, Thanh Hóa, Hoàng giang, Diễn Châu.</p>
<p>Ngoài các lộ trên, nhà Trần còn đặt các phủ Lâm Bình, Thái Nguyên, Lạng Giang.</p>
<p>Khi quân <a href="__missing__">Mông Cổ</a> đánh bại <a href="__missing__">nhà Nam Tống</a>, một số quan lại địa phương nhà Tống đã quy phụ nhà Trần, như trường hợp Hoàng Bính đem dâng phủ <a href="__missing__">Tư Minh</a> (nay là <a href="__missing__">Bằng Tường</a>) năm 1263.</p>
<p>Năm 1306, nhà Trần gả <a href="__missing__">Huyền Trân công chúa</a> cho vua Chiêm <a href="__missing__">Jaya Sinhavarman III</a>. Vua Chiêm Thành dâng hai Châu Ô, Rý làm của hồi môn. Nhà Trần đổi thành Thuận Châu và Hóa Châu (Nam <a href="__missing__">Quảng Trị</a><a href="__missing__">Huế</a> ngày nay).</p>
<h2>Luật pháp</h2>
<p>Vua <a href="__missing__">Thái Tông</a> cho sửa lại luật pháp rất nghiêm minh. <a href="__missing__">Đại Việt sử ký toàn thư</a> có chép lại như sau:</p>
<i>Canh Dần, Kiến Trung năm thứ 5 (<a href="__missing__">1230</a>): Mùa xuân, tháng 3, khảo xét các luật lệ của triều trước, soạn thành <a href="__missing__">Quốc triều thống chế</a> và sửa đổi hình luật lễ nghi, gồm 20 quyển.</i>
<i>Định bị đồ có mức độ khác nhau:</i>
<ul><li><i>Loại bị đồ làm <a href="__missing__">Cảo điền hoành</a> thì thích vào mặt 6 chữ, cho ở Cảo xã (nay là xã Nhật Cảo), cày ruộng côn, mỗi người 3 <a href="__missing__">mẫu</a>, mỗi năm phải nộp 300 <a href="__missing__">thăng</a> thóc.</i></li>
<li><i>Loại bị đồ làm <a href="__missing__">Lao thành binh</a> thì thích vào cổ 4 chữ, bắt dọn cỏ ở Phượng Thành, thành Thăng Long, lệ vào quân Tứ sương</i>.</li></ul>
<p>Đặt <a href="__missing__">ty bình bạc</a> là cơ quan hành chính và tư pháp ở kinh đô Thăng Long lúc đó với chức quan <a href="__missing__">kinh doãn</a>, chuyên xét đoán việc kiện tụng ở kinh thành. Năm <a href="__missing__">1265</a> đổi thành Đại an phủ sứ, sau lại đổi thành Kinh sư đại doãn.</p>
<h2>Kinh tế</h2>
<a href="__missing__">Tập tin:MET_DT6787.jpg</a>Bình gốm hoa lam <a href="__missing__">Chu Đậu</a> thời Trần, thế kỷ XIV. <a href="__missing__">Viện bảo tàng Mỹ thuật Metropolitan</a>, <a href="__missing__">New York</a>
<p>Về mặt <a href="__missing__">nông nghiệp</a>: để tránh nạn ngập lụt, vua <a href="__missing__">Thái Tông</a> sai đắp đê hai bên bờ sông và cử quan đặc trách trông coi việc đê gọi là <a href="__missing__">hà đê sứ</a>. Mỗi năm sau vụ mùa, triều đình còn ra lệnh cho quân sĩ đắp đê hay đào lạch, hào, giúp đỡ dân chúng. <i>Đại Việt sử ký toàn thư</i> có chép:</p>
<i>Tân Mão, <a href="__missing__">Kiến Trung</a> năm thứ 7, <a href="__missing__">1231</a>: Mùa xuân, tháng giêng, sai nội minh tự Nguyễn Bang Cốc (hoạn quan) chỉ huy binh lính phủ mình đào vét kênh Trầm và kênh Hào (là tên hai con kênh, thuộc <a href="__missing__">huyện Ngọc Sơn</a>) từ phủ Thanh Hóa đến địa giới phía nam Diễn Châu.</i>
<p>Triều đình cũng cho phép các vương, hầu có quyền chiêu tập những người nghèo khó, lưu lạc đi khai khẩn đất hoang để mở mang thêm ruộng nương.</p>
<p>Về mặt <a href="__missing__">thuế má</a>: Có hai loại thuế là thuế thân và thuế điền. Thuế thân được đóng bằng tiền và ít nhiều tùy theo số ruộng có. Ai có dưới một mẫu ruộng thì được miễn thuế. Thuế điền thì đóng bằng thóc. Ngoài ra còn có thuế trầu cau, rau quả, tôm cá v.v. Về mặt <a href="__missing__">tiền tệ</a>, để tiện việc tiêu dùng - <a href="__missing__">vàng</a>, <a href="__missing__">bạc</a> được đúc thành phân, lượng và có hiệu của nhà vua.</p>
<h2>Giáo dục, thi cử</h2>
<p>Đời nhà Trần, văn học được mở mang, <a href="__missing__">Nho học</a> cũng phát triển hơn so với thời Lý.</p>
<p>Ngoài <a href="__missing__">Quốc Tử Giám</a> có tại kinh đô từ đời <a href="__missing__">nhà Lý</a>, nhà Trần cho lập thêm Quốc Học viện để giảng <a href="__missing__">Tứ Thư</a><a href="__missing__">Ngũ Kinh</a>. Tại các lộ cũng cho mở trường học để dạy cho dân chúng.</p>
<p>Trước kia dưới triều <a href="__missing__">nhà Lý</a>, có mở những khoa thi tam trường để lấy <a href="__missing__">cử nhân</a>, nhưng các khoa thi chỉ được mở ra khi nào triều đình cần người tài giỏi ra giúp nước chứ chưa có mở định kỳ. Năm <a href="__missing__">1232</a>, vua Trần Thái Tông cho mở khoa thi <a href="__missing__">thái học sinh</a> để lấy <a href="__missing__">tiến sĩ</a> theo định kỳ cứ 7 năm thì có một kỳ thi. Năm <a href="__missing__">1247</a>, nhà vua lại cho đặt ra khảo thi tam khôi để lấy <a href="__missing__">trạng nguyên</a>, <a href="__missing__">bảng nhãn</a><a href="__missing__">thám hoa</a>. <a href="__missing__">Lê Văn Hưu</a> là người đầu tiên đậu bảng nhãn.</p>
<p>Trong 175 năm tồn tại, nhà Trần đã tổ chức 14 khoa thi (10 khoa chính thức và 4 khoa phụ), lấy 283 người đỗ. Có 2 khoa thi 1256 và 1266 lấy 2 trạng nguyên là Kinh trạng nguyên và Trại trạng nguyên nên tổng số có 12 người đỗ đầu trong các kỳ thi.</p>
<h2>Tôn giáo</h2>
<p>Về <a href="__missing__">Phật giáo</a>, vào đầu đời nhà Trần thì Phật giáo còn thịnh. Các nhà vua đều sùng đạo cho xây chùa, đúc chuông, tạc tượng để phụng thờ khắp nơi. <a href="__missing__">ĐVSKTT</a> chép lại: "<i>Thượng hoàng xuống chiếu rằng trong nước hễ chỗ nào có đình trạm đều phải đắp tượng phật để thờ</i>".</p>
<p>Vua <a href="__missing__">Nhân Tông</a> còn sai sứ sang <a href="__missing__">Trung Hoa</a> để thỉnh kinh về truyền bá đạo Phật, và ông chính là ông tổ đầu tiên của <a href="__missing__">thiền phái Trúc Lâm</a>. Nhưng cuối đời Trần, Phật giáo bị pha thêm các hình thức mê tín bùa chú cho nên ngày càng suy vi. Về <a href="__missing__">Lão giáo</a> thì cũng được nhân dân ngưỡng mộ. Do đó, nhà Trần cũng cho mở những khoa thi tam giáo như đời nhà Lý.</p>
<h2>Văn hóa nghệ thuật</h2>
<a href="__missing__">Tập tin:Vietnam_14th_C_-_Celadon_jar_Museum_of_Asian_Civilisation.jpg</a><a href="__missing__">gốm men ngọc</a> thời Trần thế kỷ XIV
<a href="__missing__">Tập tin:Binh_Son_tower_2.jpg</a><a href="__missing__">Tháp Bình Sơn</a> thời Trần ở chùa Vĩnh Khánh, thị trấn Tam Sơn, huyện Sông Lô, tỉnh Vĩnh Phúc
<p>Đời nhà Trần đã đào tạo được khá nhiều học giả nổi tiếng như <a href="__missing__">Lê Văn Hưu</a> soạn bộ <i><a href="__missing__">Đại Việt Sử ký</a></i> và đây là bộ sử đầu tiên của <a href="__missing__">Việt Nam</a> (nay đã thất truyền). <a href="__missing__">Mạc Đĩnh Chi</a> nổi tiếng là một ông trạng rất mực thanh liêm, đức độ và có tài ứng đối đã làm cho vua quan <a href="__missing__">nhà Nguyên</a> phải kính phục. <a href="__missing__">Chu Văn An</a> là một bậc cao hiền nêu gương thanh khiết, cương trực. Các vua <a href="__missing__">Thái Tông</a>, <a href="__missing__">Thánh Tông</a>, <a href="__missing__">Nhân Tông</a>, <a href="__missing__">Anh Tông</a>, <a href="__missing__">Minh Tông</a> đều là những người giỏi văn chương và có soạn Ngự tập và danh tướng <a href="__missing__">Trần Quốc Tuấn</a> có làm những tác phẩm giá trị như <i><a href="__missing__">Hịch tướng sĩ</a></i>.</p>
<p><a href="__missing__">Hàn Thuyên</a> tức Nguyễn Thuyên có công làm thơ bằng <a href="__missing__">chữ Nôm</a> và đặt ra luật thơ Nôm. Vì thế đã có nhiều học giả, văn nhân đã theo gương của Hàn Thuyên mà làm những bài <a href="__missing__">thơ Nôm</a> rất giá trị. ĐVSKTT chép:</p>
<i>Bấy giờ (năm 1282) có cá sấu đến <a href="__missing__">sông Lô</a>. Vua sai Hình bộ thượng thư Nguyễn Thuyên làm bài văn ném xuống sông, cá sấu bỏ đi. Vua cho việc này giống như việc của <a href="__missing__">Hàn Dũ</a>, bèn ban gọi là Hàn Thuyên. Thuyên lại giỏi làm thơ phú quốc ngữ. Thơ phú nước ta dùng nhiều quốc ngữ, thực bắt đầu từ đấy.</i>
<p>Nghệ thuật điêu khắc thời Trần được đánh giá là có bước tiến bộ, tinh xảo hơn so với thời Lý, trong đó có một số phù điêu khắc hình nhạc công biểu diễn mang phong cách Chiêm Thành. Cách trang trí hoa dựa trên nghệ thuật dân dụng.</p>
<p>Về kiến trúc, dựa trên các tháp gốm, tháp đá, mô hình nhà bằng đất nung, mảnh ngói vỡ khai quật được, triều Trần tiếp tục kế thừa truyền thống nhà Lý với điểm nổi bật là chùa tháp, bộ đấu củng chống đỡ mái cầu kỳ và các họa tiết trang trí đậm màu sắc Phật giáo.</p>
<p>Âm nhạc Đại Việt thời Trần chịu ảnh hưởng của <a href="__missing__">Ấn Độ</a>, <a href="__missing__">Chiêm Thành</a><a href="__missing__">Trung Quốc</a>. Một số nhạc công bị bắt từ Chiêm Thành và Trung Quốc trong các cuộc chiến đã truyền nghề ca hát cho dân Đại Việt, càng ngày càng phổ biến.</p>
<h2>Chính sách hôn nhân</h2>
<p>Nhà Trần lấy ngôi <a href="__missing__">nhà Lý</a> bằng biện pháp hôn nhân. Nhà Trần từ vai trò là <a href="__missing__">ngoại thích</a> của <a href="__missing__">nhà Lý</a> đã giành ngôi. Do đó, để tránh họa ngoại thích, nhà Trần chủ trương chỉ <a href="__missing__">kết hôn với người trong họ</a>.</p>
<p>Tác giả <a href="__missing__">Nguyễn Thị Chân Quỳnh</a> đã dẫn ra các trường hợp hôn nhân nội tộc tiêu biểu của nhà Trần:</p>
<ol><li>An Sinh vương <a href="__missing__">Trần Liễu</a>, anh trưởng của <a href="__missing__">Trần Thái Tông</a> <a href="__missing__">Trần Cảnh</a>, con Thượng hoàng <a href="__missing__">Trần Thừa</a>, lấy <a href="__missing__">Thuận Thiên công chúa</a>, con <a href="__missing__">Lý Huệ Tông</a><a href="__missing__">Linh Từ quốc mẫu</a>. Linh Từ là em ruột Trần Thừa, như vậy Trần Liễu và Thuận Thiên là con cô con cậu, vừa là anh chị em họ lấy nhau.</li>
<li>Năm <a href="__missing__">1225</a>, <a href="__missing__">Trần Thái Tông</a> <a href="__missing__">Trần Cảnh</a> lấy <a href="__missing__">Lý Chiêu Hoàng</a>, em Thuận Thiên công chúa, trường hợp này cũng là con cô lấy con cậu và anh chị em họ lấy nhau.</li>
<li>Sau khi <a href="__missing__">Lý Huệ Tông</a> qua đời, giáng Huệ hậu (tức Linh Từ quốc mẫu) làm <i>Thiên Cực công chúa</i>, gả cho Thái sư <a href="__missing__">Trần Thủ Độ</a>, tức là chị em họ lấy nhau.</li>
<li>Năm <a href="__missing__">1237</a>, vì Lý Chiêu Hoàng không có con, Thủ Độ ép Trần Thái Tông lấy Thuận Thiên, lúc ấy đã có mang ba tháng với <a href="__missing__">Trần Liễu</a>. Trường hợp này vừa là con cô con cậu lấy nhau, vừa là em chồng lấy chị dâu và anh chị em họ lấy nhau.</li>
<li>Trần Thái Tông hứa gả con gái là <a href="__missing__">Thiên Thành công chúa</a> cho Trung Thành vương và đã cho Thiên Thành tới ở nhà <a href="__missing__">Nhân Đạo vương</a>, là cha đẻ ra Trung Thành vương, để chờ ngày cưới. Năm <a href="__missing__">1251</a>, <a href="__missing__">Hưng Đạo vương</a> <a href="__missing__">Trần Quốc Tuấn</a> muốn lấy Thiên Thành công chúa, đang đêm lẻn vào phòng Thiên Thành thông dâm. <a href="__missing__">Thụy Bà công chúa</a>, chị Thái Tông, lại là mẹ nuôi Hưng Đạo vương, đang đêm gõ cửa cung nói dối là <a href="__missing__">Hưng Đạo vương</a> đã bị <a href="__missing__">Nhân Đạo vương</a> bắt giam, xin Đế cứu giúp. Sự thật, khi Đế sai người tới thì Hưng Đạo vương còn trong phòng Thiên Thành và lúc ấy Nhân Đạo vương mới biết. Hôm sau, Thụy Bà công chúa phải dâng mười mâm vàng sống xin cưới Thiên Thành cho Hưng Đạo. Đế bất đắc dĩ phải gả và bồi thường cho Trung Thành vương. Do không rõ Thiên Thành công chúa là con của Thái Tông, hay là em Thái Tông (tức là con của Thượng hoàng Trần Thừa), nên không thể xác định. Nếu là em Thái Tông thì là cô lấy cháu, nếu là con Thái Tông thì là em họ lấy anh họ (anh em chú bác).</li>
<li>Năm <a href="__missing__">1258</a>, <a href="__missing__">Trần Thánh Tông</a> lấy <a href="__missing__">Thiên Cảm hoàng hậu</a> Trần Thiều, là con gái thứ năm của An Sinh vương Trần Liễu, tức là con chú con bác lấy nhau.</li>
<li>Chiêu Minh vương <a href="__missing__">Trần Quang Khải</a> lấy <a href="__missing__">Phụng Dương công chúa</a>, là con gái của Tướng quốc Thái sư <a href="__missing__">Trần Nhật Hiệu</a>. Thái sư <a href="__missing__">Trần Nhật Hiệu</a> là em ruột của vua <a href="__missing__">Trần Thái Tông</a>, mà Quang Khải là con trai của vua, tức anh em con chú con bác lấy nhau ( *nhiều nguồn ghi rằng cha của Phụng Dương là Thái sư <a href="__missing__">Trần Thủ Độ</a>. Nhưng khi tra xét lại, Trần Thủ Độ có tước hiệu là <i>"Thượng phụ Thái sư".</i> Xét trong <a href="__missing__">Đại Việt Sử ký Toàn thư</a>, các kỷ thời đại Trần Thái Tông và Trần Thánh Tông có đề cập đến Khâm Thiên đại vương <a href="__missing__">Trần Nhật Hiệu</a>, em út cùng mẹ của <a href="__missing__">Trần Thái Tông</a>, sinh thời là <i><a href="__missing__">Thái úy</a></i>, sau khi chết (năm <a href="__missing__">1269</a>) thì được truy tặng là <i>"Tướng quốc Thái sư"</i>, hoàn toàn khớp với chức danh của văn bia. Như vậy cha Phụng Dương Công chúa theo lý mà nói nên thì là Trần Nhật Hiệu hơn là Trần Thủ Độ. )</li>
<li><a href="__missing__">Thụy Bảo công chúa</a>, con Trần Thái Tông, lấy Uy Văn vương Toại.</li>
<li><a href="__missing__">Thiều Dương công chúa</a>, con Trần Thái Tông, lấy Thượng vị Văn Hưng hầu.</li>
<li><a href="__missing__">Thiên Thụy công chúa</a>, con Trần Thánh Tông, tức cháu nội Thái Tông và cháu ngoại Trần Liễu, lấy <a href="__missing__">Hưng Vũ vương</a> Quốc Nghiễn, con Trần Hưng Đạo, cháu nội Trần Liễu. Trường hợp này vừa là con cô con cậu (Trần Hưng Đạo và Thiên Cảm là con Trần Liễu), vừa là cháu chú cháu bác lấy nhau.</li>
<li>Năm <a href="__missing__">1274</a>, <a href="__missing__">Trần Nhân Tông</a> lấy <a href="__missing__">Bảo Thánh hoàng hậu</a>, rồi <a href="__missing__">Tuyên Từ hoàng hậu</a>, đều là con Hưng Đạo vương. Trường hợp này giống Thiên Thụy lấy Quốc Nghiễn.</li>
<li><a href="__missing__">Trần Anh Tông</a>, con Nhân Tông, cháu Thánh Tông, chắt Thái Tông, lấy <a href="__missing__">Văn Đức phu nhân</a> năm <a href="__missing__">1292</a>, là con Hưng Nhượng vương <a href="__missing__">Trần Quốc Tảng</a>, tức phu nhân là cháu nội Hưng Đạo vương. Trường hợp này là cháu cô cháu cậu (Hưng Đạo vương và Thiên Cảm là con Trần Liễu) hay chắt chú chắt bác lấy nhau. Sau Anh Tông lại bỏ Văn Đức phu nhân mà lấy em ruột phu nhân là Thánh Tư phu nhân, tức <a href="__missing__">Thuận Thánh hoàng hậu</a>.</li>
<li><a href="__missing__">Trần Anh Tông</a> lấy <a href="__missing__">Huy Tư Hoàng phi</a> là con <a href="__missing__">Thụy Bảo công chúa</a><a href="__missing__">Trần Bình Trọng</a>. Thụy Bảo công chúa là em Thánh Tông, Anh Tông là cháu nội Thánh Tông, tức cháu lấy cô. (tuy nhiên có những nguồn sử ghi rằng Huy Tư Hoàng phi thực ra chỉ là con nuôi của Thụy Bảo công chúa, như vậy bà và Trần Anh Tông vốn không phải họ hàng cùng huyết thống).</li>
<li>Năm <a href="__missing__">1301</a>, <a href="__missing__">Thiên Trân công chúa</a>, con Anh Tông, lấy Uy Túc công <a href="__missing__">Trần Văn Bích</a>, cháu nội Chiêu Minh vương <a href="__missing__">Trần Quang Khải</a>. Quang Khải và Thánh Tông là anh em, tức cháu chú cháu bác lấy nhau. Thiên Trân công chúa chết, Uy Túc lại lấy Huy Thánh công chúa, con gái Huệ Vũ vương <a href="__missing__">Trần Quốc Chẩn</a>, em ruột Anh Tông.</li>
<li><a href="__missing__">Thượng Trân công chúa</a>, em Anh Tông, chắt Thái Tông lấy Văn Huệ công <a href="__missing__">Trần Quang Triều</a>, con Trần Quốc Tảng, cháu Hưng Đạo vương, chắt Trần Liễu, tức chắt chú chắt bác lấy nhau.</li>
<li><a href="__missing__">Trần Minh Tông</a>, con Anh Tông, cháu Nhân Tông, lấy <a href="__missing__">Huy Thánh công chúa</a>, con gái lớn Huệ Vũ vương Quốc Chẩn. Chẩn là em Anh Tông, tức là con chú con bác lấy nhau.</li>
<li>Năm <a href="__missing__">1337</a>, <a href="__missing__">Trần Hiến Tông</a>, con Minh Tông, lấy <a href="__missing__">Hiển Trinh công chúa</a>, con gái lớn Huệ Túc vương <a href="__missing__">Trần Đại Niên</a>.</li>
<li>Năm <a href="__missing__">1342</a>, <a href="__missing__">Thiên Ninh công chúa</a>, con Minh Tông, lấy <a href="__missing__">Chính Túc vương</a> Kham.</li>
<li>Năm <a href="__missing__">1349</a>, <a href="__missing__">Trần Dụ Tông</a>, con Minh Tông, lấy con gái thứ tư của Huệ Túc vương là <a href="__missing__">Nghi Thánh hoàng hậu</a>.</li>
<li><a href="__missing__">Huy Ninh công chúa</a>, con Minh Tông, lấy tông thất <a href="__missing__">Trần Nhân Vinh</a>. Sau Nhân Vinh bị <a href="__missing__">Dương Nhật Lễ</a> giết, <a href="__missing__">Trần Nghệ Tông</a> là anh, lại gả Huy Ninh cho em họ mẹ, cháu của mẹ ruột là <a href="__missing__">Hồ Quý Ly</a>.</li>
<li><a href="__missing__">Trần Duệ Tông</a>, con Minh Tông và Đôn Từ Thái phi, cô của Quý Ly, lấy <a href="__missing__">Gia Từ hoàng hậu</a> là em họ Quý Ly, tức anh em họ lấy nhau.</li>
<li>Năm <a href="__missing__">1375</a>, Trần Duệ Tông gả con là <a href="__missing__">Trang Huy công chúa</a> cho <a href="__missing__">Trần Nguyên Dẫn</a>, con Cung Chính vương. Cung Chính vương và Duệ Tông đều là con Minh Tông, tức con chú con bác lấy nhau.</li>
<li><a href="__missing__">Thiên Huy công chúa</a> Trần Thục Mỹ, con Trần Nghệ Tông, lấy <a href="__missing__">Trần Giản Hoàng</a> là con Duệ Tông. Nghệ Tông và Duệ Tông cùng là con Minh Tông, mẹ Nghệ Tông là Minh Từ Thái phi, mẹ Duệ Tông là Đôn Từ Thái phi, là hai chị em ruột, cô của Quý Ly. Như vậy, cả hai vừa là con chú con bác, vừa là cháu dì cháu già lấy nhau.</li>
<li>Sau khi Giản Hoàng chết, vợ là Trần Thục Mỹ tư thông với <a href="__missing__">Trần Nguyên Uyên</a>, con Cung Tín vương <a href="__missing__">Trần Thiên Trạch</a>, em khác mẹ với cha bà là Nghệ Tông, như vậy con chú con bác tư thông với nhau. Sau Thượng hoàng đem công chúa gả cho anh Nguyên Uyên là Nguyên Hãng.</li>
<li><a href="__missing__">Tuyên Huy công chúa</a>, con Duệ Tông, lấy Quan Phục Đại vương Húc, con Nghệ Tông, giống trường hợp Trần Thục Mỹ lấy Trần Giản Hoàng.</li>
<li><a href="__missing__">Trang Huy công chúa</a>, con Tông thất <a href="__missing__">Trần Nhân Vinh</a> với vợ là Huy Ninh công chúa cho Trần Mộng Dữ, con <a href="__missing__">Trần Nguyên Đán</a>, cháu bốn đời của Quang Khải.</li>
<li><a href="__missing__">Trần Thuận Tông</a>, con út Nghệ Tông, lấy <a href="__missing__">Hồ Thánh Ngâu</a> là con gái lớn của <a href="__missing__">Hồ Quý Ly</a> và Huy Ninh công chúa. Huy Ninh công chúa là em Nghệ Tông, tức là con cô con cậu lấy nhau. Thuận Tông lại là cháu nội của Đôn Từ Thái phi, cô của Quý Ly, lấy con gái Quý Ly, tức anh em họ lấy nhau.</li></ol>
<p>Tuy cẩn thận đề phòng nạn ngoại thích bằng việc kết hôn nội tộc, nhưng về sau thì việc kết hôn nội tộc trong họ Trần cũng thưa dần. Những trường hợp có kết hôn nội tộc thì cũng ngày càng xa hơn về họ hàng (ban đầu là con chú con bác lấy nhau, về sau thì là họ hàng 3 đời, rồi 4 đời mới lấy nhau). Từ khi Trần Nghệ Tông trọng dụng Hồ Quý Ly là một ngoại thích, lập tức nhà Trần cũng gặp "họa ngoại thích" và cuối cùng cũng mất về tay ngoại thích, giống như <a href="__missing__">nhà Lý</a> trước đó.</p>
<h2>Những nhân vật có ảnh hưởng nhất triều Trần</h2>
<p>Những nhân vật có ảnh hưởng nhất triều Trần, được đánh giá dựa trên sự đóng góp, công trạng của họ cho triều đại, giúp triều đại này tồn tại và phát triển.</p>
<h2>Các Hoàng đế nhà Trần</h2>
<h2>Thế phả nhà Trần</h2>
Thế phả vua <b><a href="__missing__">nhà Trần</a></b>
<h2>Đền thờ, lăng mộ</h2>
<a href="__missing__">Tập tin:DenTran1.jpg</a>Một công trình trong quần thể <a href="__missing__">đền Trần</a>, Ninh Bình, Việt Nam
<a href="__missing__">Tập tin:Đền_Trần_Thái_Bình.jpg</a>Khu di tích <a href="__missing__">đền Trần (Long Hưng)</a>
<p>Di tích lớn và quan trọng nhất của vương triều Trần hiện nay là <a href="__missing__">quần thể di tích và danh thắng Yên Tử Vĩnh Nghiêm Côn Sơn, Kiếp Bạc</a> đã được UNESCO công nhận là <a href="__missing__">di sản văn hóa thế giới</a>. Tại đây có các di tích:</p>
<ul><li><a href="__missing__">Khu di tích nhà Trần tại Đông Triều</a>, <a href="__missing__">Quảng Ninh</a>: gồm đền thờ và lăng mộ các vua nhà Trần, <a href="__missing__">thái miếu nhà Trần</a>. Đây là quê gốc phát tích vương triều Trần.</li>
<li><a href="__missing__">Khu di tích lịch sử và danh thắng Yên Tử</a>: gắn liền với phật hoàng <a href="__missing__">Trần Nhân Tông</a><a href="__missing__">thiền phái Trúc Lâm</a>.</li>
<li><a href="__missing__">Khu di tích lịch sử Bạch Đằng</a>: gắn với <a href="__missing__">trận Bạch Đằng (1288)</a> trong <a href="__missing__">Chiến tranh Nguyên Mông Đại Việt lần 3</a>.</li>
<li><a href="__missing__">Khu di tích Côn Sơn Kiếp Bạc</a>: gắn liền với các anh hùng dân tộc Trần Hưng Đạo, cùng các thiền sư Trúc Lâm. Nơi đây bao gồm <a href="__missing__">Chùa Côn Sơn</a> là Tổ đình <a href="__missing__">Thiền phái Trúc Lâm</a> và Đền Kiếp Bạc thờ Hưng Đạo Đại Vương <a href="__missing__">Trần Quốc Tuấn</a>.</li></ul>
<p>Các nơi mà tổ tiên nhà Trần từng sinh sống như ở <a href="__missing__">Ninh Bình</a><a href="__missing__">Hưng Yên</a> cũng có những di tích quan trọng về triều đại nhà Trần: </p>
<ul><li><a href="__missing__">Đền Trần</a> ở phường Nam Định, tỉnh <a href="__missing__">Ninh Bình</a>: là nơi Thái Thượng Hoàng (vua cha) làm việc (cung Trùng Hoa) trên hành cung Thiên Trường.</li>
<li><a href="__missing__">Đền Trần</a> ở Long Hưng, tỉnh <a href="__missing__">Hưng Yên</a>: gồm đền thờ và lăng mộ các vị vua đời đầu nhà Trần. Một trong những vùng quê hương của nhà Trần.</li>
<li><a href="__missing__">Đền Trần Thương</a> ở Ninh Bình: Đền thờ vị anh hùng dân tộc Quốc công Tiết chế Hưng Đạo Đại Vương Trần Quốc Tuấn cùng gia quyến và các bộ tướng có công trong cuộc kháng chiến chống quân Nguyên Mông thế kỷ XIII.</li>
<li><a href="__missing__">Đền Thái Vi</a> thuộc <a href="__missing__">hành cung Vũ Lâm</a><a href="__missing__">Ninh Bình</a>: là nơi đặt đặt hành cung trong kháng chiến chống Nguyên Mông của vương triều Trần.</li>
<li>Đền Hậu Trần, <a href="__missing__">Ninh Bình</a>: nơi thờ 2 vua <a href="__missing__">nhà Hậu Trần</a> và là 2 vị vua cuối cùng của nhà Trần</li></ul>
<h2>Xem thêm</h2>
<ul><li><a href="__missing__">Kháng chiến chống Nguyên Mông</a></li>
<li><a href="__missing__">Văn học thời Trần</a></li>
<li><a href="__missing__">Đế quốc Mông Cổ</a></li>
<li><a href="__missing__">Nhà Nguyên</a></li>
<li><a href="__missing__">Đại Việt tấn công nhà Nguyên</a></li>
<li><a href="__missing__">Nhà Lý</a></li>
<li><a href="__missing__">Nhà Hồ</a></li>
<li><a href="__missing__">Chiêm Thành</a></li></ul>
<h2>Chú thích</h2>
<ol><li><a href="__missing__"></a> <a href="__missing__">https://thanhnien.vn/bao-vat-quoc-gia-bia-chua-giau-khac-noi-chan-dung-hoang-de-thoi-tran-185230216224618595.htm</a></li>
<li><a href="__missing__"></a> <a href="__missing__">"Gốc tích họ Trần"</a>. <a href="__missing__">Bản gốc</a> lưu trữ ngày 2 tháng 7 năm 2020. Truy cập ngày 21 tháng 6 năm 2020.</li>
<li><a href="__missing__"></a> <a href="__missing__">Vùng quê phát tích, dựng nghiệp của vương triều Trần</a></li>
<li><a href="__missing__"></a> <a href="__missing__">"Đại Việt sử ký toàn thư, Kỷ nhà Trần, Thái Tông hoàng đế"</a> (PDF).</li>
<li><a href="__missing__"></a> chú là tên hai con kênh, thuộc <a href="__missing__">huyện Ngọc Sơn</a>, tỉnh <a href="__missing__">Thanh Hóa</a>.</li>
<li><a href="__missing__"></a> Trần Xuân Sinh, sách đã dẫn, tr 36</li>
<li><a href="__missing__"></a> Trần Xuân Sinh, sách đã dẫn, tr 251</li>
<li><a href="__missing__"></a> Trần Xuân Sinh, sách đã dẫn, tr 398-399</li>
<li><a href="__missing__"></a> Trần Xuân Sinh, sách đã dẫn, tr 399</li>
<li><a href="__missing__"></a> Trương Hữu Quýnh, Đinh Xuân Lâm, Lê Mậu Hãn, sách đã dẫn, tr. 268.</li>
<li><a href="__missing__"></a> <a href="__missing__">"Đại Việt sử ký toàn thư, quyển 5"</a>. <a href="__missing__">Bản gốc</a> lưu trữ ngày 25 tháng 5 năm 2011. Truy cập ngày 31 tháng 1 năm 2011.</li>
<li><a href="__missing__"></a> Mai Hồng, sách đã dẫn, tr 20</li>
<li><a href="__missing__"></a> Trương Hữu Quýnh, Đinh Xuân Lâm, Lê Mậu Hãn, sách đã dẫn, tr 268</li>
<li><a href="__missing__"></a> Trần Xuân Sinh, sách đã dẫn, tr 469</li>
<li><a href="__missing__"></a> Trong bài viết <i>Công chúa đời Trần - Mỹ nhân kế - Loạn luân</i> (1993)</li>
<li><a href="__missing__"></a> <a href="__missing__">"Chiêu Hiến quận chúa"</a>.</li>
<li><a href="__missing__">1</a> <a href="__missing__">2</a> <a href="__missing__">3</a> <a href="__missing__">4</a> <a href="__missing__">5</a> <a href="__missing__">6</a> <a href="__missing__">7</a> <a href="__missing__">Tân Nguyên sử, An Nam truyện, quyển 251</a></li>
<li><a href="__missing__">1</a> <a href="__missing__">2</a> <a href="__missing__">3</a> <a href="__missing__">4</a> <a href="__missing__">5</a> <a href="__missing__">6</a> <a href="__missing__">Minh sử, An Nam truyện, quyển 321</a></li>
<li><a href="__missing__">1</a> <a href="__missing__">2</a> <a href="__missing__">Tân Nguyên sử</a> dùng lẫn lộn tên Trần Quang Cảo 陳光暠 cho cả 2 vua Thái Tông và Thánh Tông.</li>
<li><a href="__missing__"></a> Trần An 𭴣 (chữ Hán là 上安下火)</li>
<li><a href="__missing__"></a> <a href="__missing__">Dấu tích nơi khởi phát vương triều Trần</a></li>
<li><a href="__missing__"></a> <a href="__missing__">"Khu di tích lịch sử chiến thắng Bạch Đằng"</a>. <i>Bảo tàng Quảng Ninh</i>. ngày 21 tháng 3 năm 2019. <a href="__missing__">Lưu trữ</a> bản gốc ngày 13 tháng 3 năm 2022. Truy cập ngày 13 tháng 3 năm 2022.</li>
<li><a href="__missing__"></a> <a href="__missing__">Đền Trần Thương (Hà Nam)</a></li>
</ol>
<h2>Tham khảo</h2>
<ul><li>Trần Xuân Sinh (2006), <i>Thuyết Trần</i>, Nhà xuất bản Hải Phòng.</li>
<li>Hà Văn Tấn, Phạm Thị Tâm (1975), <i>Cuộc kháng chiến chống quân xâm lược Nguyên Mông thế kỷ XIII</i>, Nhà xuất bản Khoa học xã hội.</li>
<li>Trương Hữu Quýnh, Đinh Xuân Lâm, Lê Mậu Hãn chủ biên (2008), <i>Đại cương lịch sử Việt Nam</i>, Nhà xuất bản Giáo dục.</li>
<li>Mai Hồng (1989), <i>Các trạng nguyên nước ta</i>, Nhà xuất bản Giáo dục.</li>
<li><a href="__missing__">Tân Nguyên sử</a>, <a href="__missing__">Quyển 251 Liệt truyện 148 Ngoại quốc 3 An Nam 安南</a></li>
<li><a href="__missing__">Minh sử</a>, <a href="__missing__">Quyển 321 liệt truyện đệ 209 Ngoại quốc 2: An Nam</a></li></ul>
<h2>Liên kết ngoài</h2>
<a href="__missing__">Tập tin:Commons-logo.svg</a>
Wikimedia Commons có thêm hình ảnh và phương tiện về <i><b><a href="__missing__">Nhà Trần</a></b></i>.
<ul><li><a href="__missing__">Tran Dynasty (Vietnamese history)</a> tại <i><a href="__missing__">Encyclopædia Britannica</a></i> (bằng tiếng Anh)</li>
<li><a href="__missing__">Trần</a> tại <a href="__missing__">Từ điển bách khoa Việt Nam</a></li>
<li><a href="__missing__">Lược Sử Tóm Tắt Về Khu Lăng Mộ Đền Thờ Các Vua Trần</a> <a href="__missing__">Lưu trữ</a> ngày 21 tháng 2 năm 2014 tại <a href="__missing__">Wayback Machine</a></li>
<li><a href="__missing__">Đại Việt sử ký toàn thư</a> <a href="__missing__">Lưu trữ</a> ngày 2 tháng 2 năm 2007 tại <a href="__missing__">Wayback Machine</a> - Bản điện tử</li>
<li><a href="__missing__">Khâm định Việt sử Thông giám cương mục</a> <a href="__missing__">Lưu trữ</a> ngày 9 tháng 2 năm 2012 tại <a href="__missing__">Wayback Machine</a> - Bản điện tử</li>
<li><a href="__missing__">Dấu vết 'kinh đô thứ hai' của nhà Trần</a> trên <a href="__missing__">VnExpress</a> ngày <a href="__missing__">13 tháng 12</a> năm <a href="__missing__">2006</a></li></ul>
-39
View File
@@ -1,39 +0,0 @@
<h1>Thái thượng hoàng</h1>
<p><b>Thái thượng hoàng</b> (<a href="__missing__">chữ Hán</a>: 太上皇), cũng gọi <b>Thái thượng hoàng đế</b> (太上皇帝), giản xưng <b>Thượng Hoàng</b> (上皇), là một tước vị mang ý nghĩa là <i>"Hoàng đế bề trên"</i>, địa vị cơ bản được xem là trên danh vị <a href="__missing__">Hoàng đế</a>.</p>
<p>Danh hiệu này có từ thời <a href="__missing__">nhà Hán</a>, thường chỉ được dùng cho người là cha của Hoàng đế nhưng chưa từng là Hoàng đế. Về sau, các Hoàng đế khi <a href="__missing__">thoái vị</a> cũng được dâng tôn danh hiệu này. Nếu người được tôn vấn còn sống, thì sẽ là [<i>"Thái thượng hoàng"'</i>] hoặc [<i>"Thái thượng hoàng đế"</i>] kèm theo tôn hiệu khác nữa tùy triều đại, sau khi qua đời thì dùng <a href="__missing__">miếu hiệu</a> hoặc <a href="__missing__">thụy hiệu</a>.</p>
<h2>Khái quát</h2>
<h3>Lịch sử</h3>
<p>Trong lịch sử Đông Á, không ít các trường hợp vị <a href="__missing__">quân chủ</a> sẽ <a href="__missing__">thoái vị</a> để nhường ngôi cho người kế vị vì một số lý do chính trị. Từ thời <a href="__missing__">Chiến Quốc</a>, khi các quốc gia chỉ xưng Vương, đã xảy ra trường hợp đầu tiên thời <a href="__missing__">Triệu Vũ Linh vương</a>. Ông ta nhường ngôi cho Thái tử Triệu Hà, lên ngôi sử gọi <a href="__missing__">Triệu Huệ Văn vương</a>, còn bản thân Vũ Linh vương tự xưng 「<b>Chủ phụ</b>; 主父」.</p>
<p>Dù đã thoái vị, song Vũ Linh vương vẫn nắm giữ hết tất cả quyền hành trọng đại trong nước Triệu, do đó cũng khai sinh ra hiện tượng các vị quân chủ tuy nhường ngôi nhưng vẫn thực sự nắm quyền của liên tiếp các triều đại tại Việt Nam, Nhật Bản và bản thân Trung Quốc.</p>
<p>Sau khi <a href="__missing__">Tần Thủy Hoàng</a> thiết lập nên <a href="__missing__">nhà Tần</a>, tạo nên danh xưng <a href="__missing__">Hoàng đế</a>, ông đã truy tôn cha mình là <a href="__missing__">Tần Trang Tương vương</a> làm <b>Thái thượng hoàng</b> (太上皇). Việc làm của Tần Thủy Hoàng khi đó chỉ là truy tôn, do Tần Trang Tương vương đã qua đời từ rất lâu rồi, song Tần Trang Tương vương lại chính là vị [<i>"Thái thượng hoàng"</i>] có danh vị chính thức đầu tiên trong lịch sử các quốc gia Hán Quyển.</p>
<h3>Ý nghĩa</h3>
<p>Vào thời kỳ đầu, danh xưng này biểu thị một trạng thái tôn kính nhưng không thực quyền, sau lại biểu thị sự <i>"bất lực"</i> của Hoàng đế, khi mà phải nhường ngôi cho người khác. Thời <a href="__missing__">nhà Hán</a>, <a href="__missing__">Hán Cao Tổ</a> Lưu Bang dâng tôn cha ruột <a href="__missing__">Lưu Thái Công</a> danh vị Thái thượng hoàng, và Lưu Thái Công là người đầu tiên làm Thượng hoàng khi còn sống (ông mất năm <a href="__missing__">197 TCN</a>, năm thứ 10 triều Hán Cao Tổ). Sau Tần Trang Tương vương cùng Lưu Thái Công, danh xưng này lại mới xuất hiện thời <a href="__missing__">Tấn Huệ Đế</a>. Sau <a href="__missing__">Loạn bát vương</a>, Tấn Huệ Đế bị buộc nhường ngôi cho ông chú <a href="__missing__">Tư Mã Luân</a>, dù trong năm đó Huệ Đế đã trở lại vị trí Hoàng đế như cũ.</p>
<p>Năm <a href="__missing__">471</a>, <a href="__missing__">Bắc Ngụy Hiến Văn Đế</a> bất mãn <a href="__missing__">Phùng Thái hậu</a> chuyên quyền, truyền ngôi cho con trai mới 4 tuổi là <a href="__missing__">Bắc Ngụy Hiếu Văn Đế</a>. Các quan thần tâu rằng:<i>"Tam Hoàng đạm bạc vô vi, cho nên xưng Hoàng; Tây Hán Cao Tổ phụ được tôn làm Thái thượng hoàng, không thống trị thiên hạ, nay Hoàng đế tuổi nhỏ, bệ hạ vẫn nên chấp chính"</i>, do đó, Hiếu Văn Đế tự xưng [<b>Thái thượng hoàng đế</b>; 太上皇帝], mà không phải <i>"Thái thượng hoàng"</i>, biểu thị trạng thái bản thân vẫn nắm quyền điều hình chính sự chứ không phải một vị Hoàng đế thoái vị cùng quẫn.</p>
<p>Thời <a href="__missing__">nhà Đường</a> là triều đại có nhiều Thái thượng hoàng nhất trong lịch sử Trung Quốc. Hầu hết, các vị Thái thượng hoàng đều bị buộc phải làm Thái thượng hoàng, chỉ còn danh vị chứ không còn quyền lực như <a href="__missing__">Đường Huyền Tông</a> Lý Long Cơ, hoặc như các vị <a href="__missing__">Đường Cao Tổ</a> Lý Uyên và <a href="__missing__">Đường Duệ Tông</a> Lý Đán tự mình rút lui, giao toàn bộ triều chính cho các con. Tuy nhiên, cũng có các vị Thái thượng hoàng tuy đã <a href="__missing__">thoái vị</a> nhưng vẫn giữ quyền lực tối cao, như <a href="__missing__">Tống Cao Tông</a>, <a href="__missing__">Tống Hiếu Tông</a> và đặc biệt là <a href="__missing__">Thanh Cao Tông</a>.</p>
<p>Trong <a href="__missing__">lịch sử Việt Nam</a>, <a href="__missing__">nhà Lý</a> có hai trường hợp xuất hiện Thái thượng hoàng, một là tôn xưng do là sinh phụ của Hoàng đế (<a href="__missing__">Sùng Hiền hầu</a>) dù chưa từng là Hoàng đế, và một là bị ép thoái vị (<a href="__missing__">Lý Huệ Tông</a>) để truyền cho con gái <a href="__missing__">Lý Chiêu Hoàng</a>. Thời <a href="__missing__">nhà Trần</a> là triều đại có truyền thống các Hoàng đế nhường ngôi khi con trai đã trưởng thành để về làm Thái thượng hoàng, trừ <a href="__missing__">Trần Thừa</a> ra, còn lại các vị Thái thượng hoàng nhà Trần đều tự xưng <i>"Thái thượng hoàng đế"</i>, biểu thị quyền lực vẫn còn nằm trong tay mình như Bắc Ngụy Hiến Văn Đế. Bằng chứng là những vị Thái thượng hoàng đế rất quyền lực như <a href="__missing__">Trần Minh Tông</a> và <a href="__missing__">Trần Nghệ Tông</a>.</p>
<p><a href="__missing__">Nhà Hồ</a> cũng theo nếp này và đời đầu tiên là <a href="__missing__">Hồ Quý Ly</a> thực hiện việc truyền ngôi lên làm Thái thượng hoàng, nhưng triều đại không tồn tại lâu nên không kéo dài được nếp truyền nối. Sang thời <a href="__missing__">nhà Hậu Lê</a>, Thái thượng hoàng chỉ xuất hiện vào thời <a href="__missing__">Lê trung hưng</a> - khi đó quyền lực của <a href="__missing__">chúa Trịnh</a> đã rất lớn mạnh, các Hoàng đế nhà Lê chỉ là bù nhìn, do đó địa vị của Thái thượng hoàng rất yếu, hầu như đều do các chúa Trịnh bắt ép thoái vị mà có, như <a href="__missing__">Lê Dụ Tông</a>.</p>
<h3>Các trường hợp</h3>
<p>Có trường hợp đặc biệt khi một người chưa bao giờ làm <a href="__missing__">Hoàng đế</a> nhưng vì có <a href="__missing__">con trai</a> làm <a href="__missing__">Hoàng đế</a> nên cũng được tôn là Thái thượng hoàng. Lấy ví dụ như vị Thái thượng hoàng đầu tiên trong <a href="__missing__">lịch sử</a> là <a href="__missing__">Lưu thái công</a> cha ruột của <a href="__missing__">Hán Cao Tổ</a> Lưu Bang. Tại <a href="__missing__">Việt Nam</a>, cũng có <a href="__missing__">Sùng Hiền hầu</a> của <a href="__missing__">nhà Lý</a> cùng <a href="__missing__">Trần Thừa</a> của <a href="__missing__">nhà Trần</a>, hai người đều chưa từng làm Hoàng đế từ trước nhưng được tôn xưng Thái thượng hoàng do con trai lên ngôi.</p>
<p>Thông thường, người truyền ngôi cho Hoàng đế rồi tôn xưng Thái thượng hoàng, nhưng có trường hợp <a href="__missing__">Kim Ai Tông</a> Hoàn Nhan Thủ Tự trong hoàn cảnh nguy cấp sắp bị quân <a href="__missing__">Mông Cổ</a> tấn công đến thành trì cuối cùng là <a href="__missing__">Thái Châu</a>, biết không cứu vãn được tình thế, đã nhường ngôi cho con là <a href="__missing__">Kim Mạt Đế</a> Hoàn Nhan Thừa Lân rồi tự sát vì không muốn bị quân <a href="__missing__">Mông Cổ</a> bắt. Hoàng thân nhà Đường là <a href="__missing__">Lý Uân</a> được quân phiệt <a href="__missing__">Chu Mai</a> ủng hộ làm Hoàng đế ở kinh đô Trường An, tôn <a href="__missing__">Đường Hi Tông</a> đang chạy trốn làm Thái thượng hoàng, nhưng Đường Hi Tông không thừa nhận ngôi vị Thượng hoàng mà cùng các quân phiệt khác tiêu diệt Lý Uân. Ngược lại, <a href="__missing__">Tùy Dạng Đế</a> dù không thừa nhận ngôi vị Thái thượng hoàng do <a href="__missing__">Tùy Cung Đế</a> và <a href="__missing__">Lý Uyên</a> tôn phong, nhưng lại chết trong binh biến. Tại Việt Nam, trong hoàn cảnh <a href="__missing__">nhà Mạc</a> suy tàn, <a href="__missing__">Mạc Mậu Hợp</a> truyền ngôi cho <a href="__missing__">Mạc Toàn</a> rồi tự mình làm tướng cầm quân mà không xưng Thái thượng hoàng. Ngoài ra, cuối đời <a href="__missing__">nhà Trần</a> ở <a href="__missing__">Việt Nam</a>, <a href="__missing__">Trần Nghệ Tông</a> Trần Phủ nhường ngôi cho em trai là <a href="__missing__">Trần Duệ Tông</a> Trần Kính để tự xưng làm Thái thượng hoàng. Đó là việc hi hữu khi vị trí giữa Thái thượng hoàng và Hoàng đế chỉ là anhem. Trường hợp tương tự xảy ra ở <a href="__missing__">Trung Quốc</a> thời <a href="__missing__">nhà Minh</a>, khi <a href="__missing__">Minh Đại Tông</a> tôn anh trai <a href="__missing__">Minh Anh Tông</a> làm Thái thượng hoàng do Anh Tông bị <a href="__missing__">Ngõa La</a> bắt trong <a href="__missing__">Sự biến Thổ Mộc bảo</a>.</p>
<p>Theo cách hiểu thông thường, khi con làm Hoàng đế mà cha còn sống thì cha được tôn làm Thái thượng hoàng, tuy nhiên không phải lúc nào cũng như vậy, còn tùy thuộc vào pháp độ của vương triều. Như có trường hợp cuối đời <a href="__missing__">nhà Thanh</a>, Thuần Hiền thân vương <a href="__missing__">Dịch Hoàn</a> là thân sinh của vua <a href="__missing__">Quang Tự</a> cũng không được tôn xưng Thái thượng hoàng; hay như Thuần Thân vương <a href="__missing__">Tải Phong</a> là cha vua Tuyên Thống (<a href="__missing__">Phổ Nghi</a>) nhưng chỉ đóng vai trò <a href="__missing__">nhiếp chính</a> cho Hoàng đế nhỏ tuổi chứ không làm Thái thượng hoàng. Đây là lý do Quang Tự cùng Tuyên Thống đều đã <i>"nhập tự"</i>, nhận dòng chính thống để kế thừa Đế vị (Quang Tự nhận <a href="__missing__">Hàm Phong</a>, còn Tuyên Thống Đế nhận cả <a href="__missing__">Đồng Trị</a> lẫn Quang Tự). Thời nhà Thanh, vấn đề chính thống rất gay gắt, cả hai người Quang Tự-Tuyên Thống đã nhận dòng chính mới có tư cách kế vị, cho nên xét về mặt pháp lý thì cả Dịch Hoàn cùng Tái Phong dù được kính trọng do là cha ruột của Hoàng đế, song cả hai vị Thân vương này không có tư cách tự xưng Thái thượng hoàng.</p>
<p>Tại Việt Nam, có một danh vị từng tồn tại để chỉ cha ruột của Hoàng đế, nhưng không phải Thái thượng hoàng. Khi ấy, vua <a href="__missing__">Thành Thái</a><a href="__missing__">nhà Nguyễn</a> bị <a href="__missing__">người Pháp</a> ép phải nhường ngôi cho con là vua <a href="__missing__">Duy Tân</a>, và dụ triều đình nhà Nguyễn định việc tôn hiệu cho vị vua Thành Thái thoái vị. Sau khi bàn định lễ chế của nước Đại Nam, người Pháp không chấp nhận ngôi vị [Thái thượng hoàng] vì sẽ khiến tình hình thêm phức tạp, do vậy vua Duy Tân chỉ được phép tôn cha là [<b>Hoàng Phụ Hoàng đế</b>; 皇父皇帝].</p>
<p>Chính những quy tắc phức tạp, phải có tôn ti trong việc tấn tôn vị hiệu này mà sử gia <a href="__missing__">Lê Văn Hưu</a> đã chỉ trích việc <a href="__missing__">Lý Thần Tông</a> tôn cha đẻ Sùng Hiền hầu làm Thái thượng hoàng. Khi ấy, Lý Thần Tông đã được <a href="__missing__">Lý Nhân Tông</a> chọn làm con thừa tự, phong làm <a href="__missing__">Thái tử</a> để kế vị, thì Thần Tông chỉ nên công nhận Nhân Tông mà thôi, nếu Thần Tông lại tôn cha ruột Sùng Hiền hầu thêm nữa thì <i>"hóa ra là hai gốc ư?"</i>. Nguyên văn nhận xét của Lê Văn Hưu:</p>
<h3>Sắc ấn</h3><a href="__missing__">Tập tin:太上皇帝之宝.jpg</a>Ấn <i>"Thái thượng hoàng đế chi bảo"</i> của vua Càn Long
<p>Trong lịch sử, việc tôn xưng Thái thượng hoàng thường không được xem là pháp độ có tính nhất quán ổn định về quy tắc, do vậy một số nguyên tắc về trang phục, lễ nghi của Thái thượng hoàng so với Hoàng đế cũng không mấy rõ ràng. Về cơ bản, có lẽ nghi giá của Thái thượng hoàng đều cùng với Hoàng đế ngang nhau, tuy nhiên các triều đại có truyền thống tôn xưng Thượng hoàng như <a href="__missing__">nhà Trần</a> ở Việt Nam bị lâm vào tình trạng mất mát tư liệu, nên cũng không rõ những nguyên tắc cụ thể về lễ nghi cho một Thái thượng hoàng.</p>
<p>Thời kỳ <a href="__missing__">nhà Thanh</a>, là triều đại lớn cuối cùng ở Trung Quốc xuất hiện một vị Thái thượng hoàng - <a href="__missing__">Càn Long Đế</a>. Tuy ông đã <a href="__missing__">thoái vị</a>, song trên thực tế ông vẫn nắm hết mọi quyền hành cho đến tận khi qua đời, cho nên hẳn nhiên ổng phải thiết lập quy tắc bảo chứng cho sức mạnh đó của mình: ấn bảo.</p>
<p>Năm Càn Long thứ 60 (<a href="__missing__">1795</a>), ngày <a href="__missing__">3 tháng 9</a> (âm lịch), Càn Long Đế đã 85 tuổi, triệu tập các Hoàng tử cùng Vương công Đại thần, ra chỉ tuyên bố lập Hoàng thập ngũ tử <a href="__missing__">Vĩnh Diễm</a> làm <a href="__missing__">Hoàng thái tử</a>, sửa tên thành <i>Ngưng Diễm</i>, lấy năm sau làm năm đầu Gia Khánh. Sang <a href="__missing__">tháng giêng</a> năm ấy, Càn Long Đế tự mình làm lễ nhận bảo tỷ, hạ chỉ có đoạn:</p> 「皇太子于丙辰正月上日即皇帝位。朕亲御太和殿,躬授宝玺,可称朕为太上皇帝。」 Dịch là:<i>"Hoàng thái tử vào ngày Bính Thìn, chính nguyệt kế vị Hoàng đế. Trẫm thân ngự Thái Hòa điện, cung thụ bảo tỉ, có thể gọi Trẫm là Thái thượng hoàng đế"</i>.
<p>Sau đó, Càn Long Đế còn quy định về việc dùng ngọc bảo:</p> 「朕归政后,应用喜字第一号玉宝,刻太上皇帝之宝,即将御制《十全老人之宝说》镌刻作为太上皇帝册,用彰熙朝盛瑞。」 Dịch là:<i>"Sau khi Trẫm quy chính, nên tự dùng ngọc bảo hạng nhất, khắc chữ 'Thái thượng hoàng đế chi bảo', ngự chế 'Thập toàn lão nhân chi bảo thuyết' tuyên khắc thành 'Thái thượng hoàng đế sách', dùng ngọc chương hi triều thịnh"</i>.
<p>Đây là hiện vật duy nhất chứng minh quyền hành của một Thái thượng hoàng trong thế giới Đông Á, ngay cả một chính quyền có nhiều <i>"Thượng hoàng"</i> nhất là Nhật Bản cũng chưa từng có. Ấn bảo của Càn Long Đế được làm bằng <a href="__missing__">bạch ngọc</a> nguyên chất, miệng ấn khắc hình giao long, hình vuông, mặt dưới ấn khắc chữ Hán bằng kiểu <a href="__missing__">chữ triện</a>, xưng quanh ấn có khắc <i>"Tự đề Thái thượng hoàng đế chi bảo"</i> (自题太上皇帝之宝) do đích thân Càn Long Đế sáng tác.</p>
<p>Ấn bảo có diện tích 22.5×22.5&nbsp;cm, thân cao 15&nbsp;cm, miệng ấn cao 7.3&nbsp;cm. Hiện vật đang được lưu giữ tại <a href="__missing__">Bảo tàng Cố cung</a> ở <a href="__missing__">Bắc Kinh</a>.</p>
<h2>Danh sách Thái thượng hoàng</h2>
<h3>Việt Nam</h3>
<h3>Trung Quốc</h3>
<h3>Trung Á</h3>
<h3>Triều Tiên</h3>
<h3>Nhật Bản</h3>
<h2>Xem thêm</h2>
<ul><li><a href="__missing__">Vua Việt Nam</a></li><li><a href="__missing__">Vô thượng hoàng</a></li><li><a href="__missing__">Thái thượng vương</a></li><li><a href="__missing__">Thái thượng Thiên hoàng</a></li><li><a href="__missing__">Thái thượng Pháp hoàng</a></li><li><a href="__missing__">Thiện nhượng</a></li><li><a href="__missing__">Thái thượng hoàng hậu</a></li><li><a href="__missing__">Thái tổ</a></li><li><a href="__missing__">Thái tông</a></li></ul>
<h2>Tham khảo</h2>
<ul><li>Nguyễn Khắc Thuần (2003), <i>Các đời đế vương Trung Hoa,</i> Nhà xuất bản Giáo dục</li><li>Quỳnh Cư, Đỗ Đức Hùng (2001), <i>Các triều đại Việt Nam</i>, Nhà xuất bản Thanh niên</li><li>Đặng Huy Phúc (2001), <i>Các hoàng đế Trung Hoa,</i> Nhà xuất bản Hà Nội</li><li><i><a href="__missing__">Nước Việt Nam qua từng thời kỳ lịch sử</a><a href="__missing__">Lưu trữ</a> ngày 7 tháng 2 năm 2009 tại <a href="__missing__">Wayback Machine</a></i>, <a href="__missing__">Vietnam Net</a></li><li><i><a href="__missing__">Đại Việt sử ký toàn thư</a></i></li><li><a href="__missing__">Trần Trọng Kim</a>, <i><a href="__missing__">Việt Nam sử lược</a></i></li></ul>
<h2>Chú thích</h2>
<ol><li><a href="__missing__">↑</a> 《史记·卷六·秦始皇本纪》:追尊庄襄王为太上皇。</li><li><a href="__missing__">↑</a> 《魏書·卷六·顯祖紀第六》:帝雅薄時務,常有遺世之心,欲禪位於叔父京兆王子推,語在任城王雲傳,羣臣固請,帝乃止。丙午,冊命太子曰:「昔堯舜之禪天下也,皆由其子不肖。若丹朱、商均能負荷者,豈搜揚仄陋而授之哉?爾雖沖弱,有君人之表,必能恢隆王道,以濟兆民。今使太保、建安王陸馛,太尉源賀持節奉皇帝璽綬,致位於爾躬。其踐昇帝位,克廣洪業,以光祖宗之烈,使朕優遊履道,頤神養性,可不善歟?」丁未,詔曰:「朕承洪業,運屬太平,淮岱率從,四海清晏。是以希心玄古,志存澹泊。躬覽萬務,則損頤神之和;一日或曠,政有淹滯之失。但子有天下,歸尊於父;父有天下,傳之於子。今稽協靈運,考會羣心,爰命儲宮,踐昇大位。朕方優遊恭己,栖心浩然,社稷乂安,克廣其業,不亦善乎?百官有司,其祗奉胤子,以答天休。宣布宇內,咸使聞悉。」於是羣公奏曰:「昔三皇之世,澹泊無為,故稱皇。是以漢高祖,既稱皇帝,尊其父為太上皇,明不統天下。今皇帝幼沖,萬機大政,猶宜陛下總之。謹上尊號太上皇帝。」乃從之。</li><li><a href="__missing__">↑</a><a href="__missing__">Sử ký</a>, <i>Cao Tổ bản kỷ</i></li><li><a href="__missing__">↑</a><a href="__missing__">"Đại Việt Sử ký Toàn thư, Bản kỷ, quyển V"</a>. <a href="__missing__">Bản gốc</a> lưu trữ ngày 25 tháng 5 năm 2011. Truy cập ngày 16 tháng 8 năm 2009.</li><li><a href="__missing__">↑</a> Đặng Huy Phúc, sách đã dẫn, tr 387</li><li><a href="__missing__">↑</a><a href="__missing__">"Đại Việt sử ký toàn thư, quyển XVII"</a>. <a href="__missing__">Bản gốc</a> lưu trữ ngày 13 tháng 6 năm 2023. Truy cập ngày 16 tháng 8 năm 2009.</li><li><a href="__missing__">↑</a> Đặng Huy Phúc, sách đã dẫn, tr 517</li><li><a href="__missing__">↑</a> Đại Nam thực lục chính biên, đệ lục kỷ phụ biên - quyển 29</li><li><a href="__missing__">↑</a><a href="__missing__">Đại Việt sử ký toàn thư-Lý Thần Tông hoàng đế bản kỷ</a></li></ol>
+54
View File
@@ -0,0 +1,54 @@
<h1>Thăng Long</h1>
<a href="__missing__">Tập tin:Samuel_Baron_-_The_City_of_CHA-CHO,_the_Metropolis_of_TONQUEEN.jpg</a>
Cảnh Thăng Long-Kẻ Chợ những năm 1690 do Samuel Baron miêu tả sau chuyến đi đến
<a href="__missing__">Đàng Ngoài</a>
của ông.
<p><b>Thăng Long</b> (<a href="__missing__">chữ Hán</a>: tên cũ 昇龍, tên mới 昇隆) là tên gọi cũ của thành phố <a href="__missing__">Hà Nội</a>. Đây là kinh đô của nước <a href="__missing__">Đại Việt</a> dưới các Triều Đại phong kiến như <a href="__missing__">nhà Lý</a>, <a href="__missing__">nhà Trần</a>, <a href="__missing__">nhà Lê Sơ</a>, <a href="__missing__">nhà Mạc</a>, <a href="__missing__">nhà Lê Trung Hưng</a> (<a href="__missing__">1010</a> - <a href="__missing__">1788</a>). Trong dân dã thì địa danh <a href="__missing__">tên Nôm</a> <b>Kẻ Chợ</b> được dùng phổ biến nên thư tịch Tây phương về <a href="__missing__">Hà Nội</a> trước thế kỷ 19 hay dùng <b>Cachao</b> hay <b>Kecho</b>.</p>
<h2>Lịch sử</h2>
<p>Năm 1009, tương truyền khi vua <a href="__missing__">Lý Công Uẩn</a> dời kinh đô <a href="__missing__">Hoa Lư</a> đến đất <a href="__missing__">Đại La</a> thì thấy <a href="__missing__">rồng</a> bay lên nên gọi tên kinh đô mới là Thăng Long, hay "rồng bay lên" theo nghĩa <a href="__missing__">Hán Việt</a>. Ngày nay tên Thăng Long còn dùng trong văn chương, trong những cụm từ như "Thăng Long ngàn năm văn vật"... Năm <a href="__missing__">2010</a> là kỷ niệm <a href="__missing__">Đại lễ 1000 năm Thăng Long - Hà Nội</a>.</p>
<p>Năm 1243, nhà Trần tôn tạo sửa đổi và gọi Thăng Long là Long Phượng. Cuối thời Trần, <a href="__missing__">Hồ Quý Ly</a> cho đặt tên là <a href="__missing__">Đông Đô</a>.</p>
<p>Năm 1428, <a href="__missing__">Lê Lợi</a> đặt kinh đô tại Thăng Long và đổi tên là <a href="__missing__">Đông Kinh</a>, vì có kinh đô thứ 2 là <a href="__missing__">Tây Kinh</a> tại <a href="__missing__">Thanh Hóa</a>. Vào khoảng thế kỷ 16, khi Đông Kinh trở thành một đô thị sầm uất, có cả người <a href="__missing__">Châu Âu</a> đến buôn bán, thì trong dân gian bắt đầu gọi Đông Kinh là Kẻ Chợ. Theo 1 người đã đến kinh đô Thăng Long là ông <a href="__missing__">William Dampier</a> người <a href="__missing__">Anh</a> thì tại đây có tới 20.000 nóc nhà, thường thấp, tường trát <a href="__missing__">bùn</a> và mái lợp <a href="__missing__">rơm</a>. Dù vậy cũng có một số nhà xây bằng gạch và lợp ngói.<sup><a href="__missing__"><span><span>[</span>1<span>]</span></span></a></sup> Hoàng cung được xây dựng nguy nga hơn dù cũng làm bằng gỗ.<sup><a href="__missing__"><span><span>[</span>2<span>]</span></span></a></sup></p>
<p>Năm 1803, nhà Nguyễn cho rằng thành đắp thời Tây Sơn đã bị hư hại nhiều, nên cho phá dỡ các đoạn tường cũ, trên nền cũ xây tòa thành mới. Thành mới xây theo kiểu Vauban của phương Tây, đến năm 1805 thì hoàn thành. Đồng thời vua <a href="__missing__">Gia Long</a> đổi tên chữ Hán của Thăng Long 昇龍, với nghĩa là "<i>rồng bay lên</i>" thành ra từ đồng âm Thăng Long 昇隆, nhưng mang nghĩa là "<i>thịnh vượng</i>"<sup><a href="__missing__"><span><span>[</span>3<span>]</span></span></a></sup> khác nghĩa với thời các triều đại trước, vì cho rằng Thăng Long lúc đó không còn là kinh đô nơi vua ở nên không thể dùng biểu tượng rồng, linh vật tượng trưng cho hoàng quyền. <a href="__missing__">Gia Long</a> đổi phủ Phụng Thiên thành phủ Hoài Đức. Thăng Long tồn tại cho đến thời vua <a href="__missing__">Minh Mạng</a> khi bãi bỏ Bắc Thành tổng trấn và thành lập tỉnh Hà Nội, năm 1831 niên hiệu Minh Mạng thứ 12.<sup><a href="__missing__"><span><span>[</span>4<span>]</span></span></a></sup></p>
<p>Năm 1835, vì cho rằng thành Hà Nội cao hơn kinh thành Huế là không đúng lễ chế, Minh Mạng cho xén bớt 1 thước 8 tấc, thành Hà Nội chỉ còn cao chừng 5 m.</p>
<p>Năm 1848, vua Tự Đức cho phá dỡ các cung điện thời <a href="__missing__">nhà Hậu Lê</a> còn lại trong thành, những đồ chạm khắc mỹ thuật bằng gỗ, đá đều đưa về Huế để trang trí các cung điện trong đó, chỉ còn sót lại rồng đá ở điện Kính Thiên...<sup><a href="__missing__"><span><span>[</span>5<span>]</span></span></a></sup></p>
<p>Từ tháng 12 năm 2002 đến nay, trên khu vực thuộc Hoàng thành Thăng Long xưa (khu vực giữa các phố <a href="__missing__">Hoàng Diệu</a>, <a href="__missing__">Hoàng Văn Thụ</a>, <a href="__missing__">Độc Lập</a>, Bắc Sơn ở <a href="__missing__">Hà Nội</a>), các nhà khảo cổ học đã tiến hành khai quật trên một diện tích khoảng hơn 19 nghìn m², phát lộ một phức hệ di tích - di vật rất phong phú, đa dạng từ <a href="__missing__">La Thành</a> - <a href="__missing__">Đại La</a> (thế kỉ 7-9) đến thành Thăng Long (thế kỉ 11-18) và thành Hà Nội (thế kỉ 19).</p>
<a href="__missing__">Tập tin:ThangLong-ConDuongGomSuvenSongHong.JPG</a>
Con đường gốm sứ ven sông Hồng kỷ niệm
<a href="__missing__">Đại lễ 1000 năm Thăng Long - Hà Nội</a>
.
<h2>Đơn vị hành chính</h2>
<a href="__missing__">Tập tin:Bản_đồ_kinh_thành_Thăng_Long,_theo_Hồng_Đức_bản_đồ_sách_洪德版圖冊_(1490).jpg</a>
Bản đồ Thăng Long thời vua
<a href="__missing__">Lê Thánh Tông</a>
, niên hiệu Hồng Đức (1490) và phiên bản có chú thích
<a href="__missing__">chữ Quốc ngữ</a>
.
<p>Thăng Long bao gồm <a href="__missing__">Hoàng thành Thăng Long</a> và một phủ kiêm lý, là <a href="__missing__">phủ Phụng Thiên</a>, phần thị thành kề cận kinh thành (phủ Phụng Thiên mới là phần gốc lõi của Kẻ Chợ). Đứng đầu phủ Phụng Thiên là viên quan <a href="__missing__">Phủ doãn</a>, gọi là Phủ doãn phủ Phụng Thiên. Phủ Phụng Thiên (đến thời nhà Nguyễn thì đổi thành <a href="__missing__">phủ Hoài Đức</a>) vào cuối thời <a href="__missing__">nhà Hậu Lê</a> tới đầu thời <a href="__missing__">nhà Nguyễn</a> gồm 2 huyện (tổng cộng 13 tổng, 239 phường, thôn, trại (đơn vị cấp làng xã)): </p>
<ul><li>Huyện <a href="__missing__">Thọ Xương</a> (8 tổng: 184 phường, thôn, trại) gồm các tổng:</li></ul>
<dl><dd><ul><li>Tả Túc: gồm 20 phường, thôn: <i>Phúc Lâm, Nghĩa Dũng, Mỹ Lộc, Nguyên Khiết Thượng, Nguyên Khiết Hạ, Trừng Thanh Thượng, Sài Thúc-Trừng Thanh Trung, Ngũ Hầu-Trừng Thanh Trung, Bề Thượng-Trừng Thanh Trung, Bề Hạ-Trừng Thanh Trung, Cựu Vệ Tả-Trừng Thanh Trung, Ngoại Ổ-Hương Bài, Kiên Nghĩa-chợ Hà Khẩu, Tả Lâu, Bến Đá, Miếu Trung Liệt, Chợ Bến Đá, Hàng Lược, Đông Hà, Đình Hạ-Phục Cổ, Thượng-Trừng Thanh Hạ, Tả-Trừng Thanh Hạ, Hữu-Trừng Thanh Hạ, Hàng Kiếm-Trừng Thanh Hạ, Đồn Tây Long, Vạn Hà, Thủy cơ Vũ Xá, Thủy cơ Đông Trạch, Thủy cơ Trúc Võng, Thủy cơ Biện Dương, Thủy cơ Tự Nhiên, Thủy cơ Lãng Hồ</i>.</li>
<li>Tiền Túc: gồm 29 phường, thôn: <i>Thuận Mỹ, Hữu Đông Môn, Tố Tịch, Tiên Thị (chợ Tiên, nay khoảng Lý Quốc Sư-Hàng Trống-Nhà thờ Lớn), Khánh Thụy Tả, Đồng Lạc, Hàng Nồi, An Thái, Đông Thành-An Nội, Chợ Đông Thành, Thượng-Cổ Vũ, An Nội-Cổ Vũ, Trung-Cổ Vũ, Trung Hạ-Cổ Vũ, Thị Vật-Cổ Vũ, Thái Cực, Hàng Đàn, Hoa Nương, Kim Bát Thư Khánh Thụy Hữu, Kim Bát Hạ, Đông Hà Kim Bát Thượng, Chùa Tháp-Báo Thiên, Chùa Báo Thiên, Xuân Hoa (nay khoảng phố Hàng Cân), Phúc Phố (khoảng cuối phố Nhà Chung), Tô Mộc (nay khoảng phố Hàng Khay), Chân Sơn (tức Chân Sơn Minh Cầm hay Chân Cầm, nay khoảng các phố Chân Cầm-Hàng Gai-Lý Quốc Sư-Phủ Doãn), Chiêu Hội (tức Hội Vũ)</i>.</li>
<li>Hữu Túc: gồm 18 phường, thôn: <i>Đông Các, Hàng Chè, Hàng Chài, Tả Vọng, Tư Nhất, Kho Súng, Hậu Bi, Diên Hưng, Hà Khẩu, Đông An, Trung An, Nhiễu Thượng-Đông Tác, Nam Hoa, Hậu Lâu, Hàng Cá, Trung Nghĩa, Hạ Hà, Dũng Hàn</i>.</li>
<li>Hậu Túc: gồm 17 phường, thôn: <i>Nghĩa Lập, Thanh Hà, Huyền Thiên, Tiền Trung, Vĩnh Trừ, Phú Từ, Nội Tự cửa Đông Hoa, Cửa Đông Hoa, Cửa Hậu Đông Hoa, Cầu Cháy, Đồng Xuân, Vĩnh Thái, Nhiễu Trung-Đông Tác, Đông Hà, An Phú, Đồng Thuận, Hoa Đán</i>.</li>
<li>Tả Nghiêm: gồm 23 thôn, phường: <i>(Vũ Thạch Tiểu, Vũ Thạch Hạ) (phường Vũ Thạch cổ nay thuộc khoảng đầu các phố Quang Trung và Bà Triệu, kéo đến phố Lý Thường Kiệt), (Hồi Thuần, Thuần Mỹ) (sau nhập thành Hồi Mỹ, nay khoảng phố Lý Thường Kiệt-Trần Hưng Đạo-xóm Hà Hồi-phố Trần Quốc Toản), Đổi Mã (tức Hòa Mã), Giáo Phường (nay khoảng giữa phố Huế), Hàng Bài, (Vệ Hồ Giao (tức Long Hồ), Hậu Phong Vân) (nay là Vân Hồ), Thịnh Xương (sau nhập với Yên Ninh thành Thịnh Yên), Sài Tân (nay khoảng phố Trần Cao Vân), Cấm Chỉ Hạ (nay khoảng phố Tô Hiến Thành), Nhiễu Hạ-Đông Tác, Phúc Lâm (nay khoảng Nguyễn Công Trứ-Phố Huế), Phúc Lâm Tiểu (phía tây phường Phúc Lâm, nay khoảng Bà Triệu-Tuệ Tĩnh-Phố Huế), Phục Cổ (nay khoảng đầu Nguyễn Du-Phố Huế), Đông Hạ-Phục Cổ (khoảng giữa Phố Huế (số 133 Phố Huế)), (Thống Nhất, An Thọ (Yên Thọ)) (hợp thành thôn Yên Nhất, nay là khoảng phố Huế-Thái Phiên), Hồng Mai (tức Bạch Mai, nay khoảng phố Bạch Mai), Quỳnh Lôi (nay khoảng ngõ Quỳnh), Kim Hoa (tức Kim Liên), Trung Tự-Đông Tác (nay là khoảng phường Trung Tự quận Đống Đa)</i>.</li>
<li>Tiền Nghiêm: gồm 30 thôn: <i>Vĩnh Xương, An Trung Thượng, An Trung Hạ, Hoa Ngư Chợ Cửa Nam, Lưu Truyền, Phù Mỹ, Hoa Cẩm, Tứ Mỹ, Cung Tiên, Linh Quang (nay khoảng ngõ Liên Hoa <a href="__missing__">phố Khâm Thiên</a>), Linh Đồng (nay khoảng đầu phố Khâm Thiên-ga Hàng Cỏ), Quang Hoa, Khâm Thiên Giám, Tương Thuận, Liên Thủy (tức Liên Trì, nay khoảng phố Liên Trì và các phố bắc hồ Thiền Quang), Thái Giao (tức Thể Giao, nay khoảng các phố Hồ Xuân Hương-Tuệ Tĩnh-Bà Triệu), Pháp Hoa (nay khoảng phố Trần Bình Trọng, tây hồ Thiền Quang), Hữu Lễ, Thiền Quang (khoảng phía tây hồ Thiền Quang), Tô Tiền (nay khoảng ngõ Tô Tiền phố Khâm Thiên), Trung Kính (nay khoảng đầu phố Khâm Thiên), Hàng Dầu, Bắc Thượng-Cổ Vũ, Bắc Hạ-Cổ Vũ, Thượng Môn-Báo Thiên, Thượng Môn Hạ-Báo Thiên, Thương Đồng Hạ-Báo Thiên, Cửa Nam-Đông Tác, An Tập (Yên Tập, nay khoảng phố Quán Sứ), (Nam Phụ, Nguyễn Khánh) (sau nhập lại thành thôn Phụ Khánh, nay khoảng cuối phố Lý Thường Kiệt-Thợ Nhuộm)</i>.</li>
<li>Hữu Nghiêm: gồm 27 phường, thôn: <i>An Hòa (nay khoảng phố Trần Quý Cáp), Văn Mặc, Hữu Giám, Hậu Giám, Hữu Biên Giám, Minh Triết, Thị Trung Tiền, Hàng Gạo, Cầu Bươu, Quan Thổ (nay khoảng phía nam phố Khâm Thiên), Ngự Sử, Huy Văn (nay khoảng ngõ Văn Chương phố Khâm Thiên), Đỉnh Tân, Tạo Đế, Chợ Giám Hữu Biên, Hậu Bà Ngô (nay khoảng phố Nguyễn Khuyến), Tả Bà Ngô (tức Thanh Miến, nay khoảng đầu phố Văn Miếu), Trung Tả, Ngõ Hàng Kề, Nội Súng, Cổ Thành, Hàng Cháo Giám Hữu Biên, Phụng Thánh, Xã Đàn, Giao Trì (nay khoảng phố Đoàn Thị Điểm), Hàng Bột, Trung Tiền (nay thuộc phần đất <a href="__missing__">quận Đống Đa</a>)</i>.</li>
<li>Hậu Nghiêm: gồm 20 thôn, phường: <i>Thanh Nhàn, (Hữu Vọng, Đức Bác) (Vọng Đức), (Hàng Hương, Hoa Viên) (Hương Viên hay Phương Viên, nay khoảng phố Lò Đúc-Trần Xuân Soạn-chợ Hôm Đức Viên), Thanh Lãng, (Cảm Ứng, An Hội) (Cảm Hội, nay là khoảng các phố Lò Đúc-Nguyễn Công Trứ-Cảm Hội), Hàm Châu (nay là Hàm Long), Trường Khánh (Tràng Khánh, sau nhập với Hàm Châu thành Hàm Khánh, nay khoảng phố Lê Văn Hưu), (An Lạc, Trung Chí) (nay là Lạc Trung), (Lương Xá, Yên Xá (An Xá)) (nay là Lương Yên), (Hàng Hương, Hoa Viên) Thọ Lão (nay khoảng dốc Thọ Lão-Lò Đúc), Hàng Rau (tức Hương Thái, nay khoảng phố Trần Xuân Soạn), Nhân Chiêu (khoảng đầu phố Trần Hưng Đạo-Hàn Thuyên), Hộ Quốc (nay là khoảng phố Nguyễn Huy Tự), Ngõ Hàng Trứng (nay khoảng phố Lê Văn Hưu), Tây Hổ (tức Hành Môn, nay khoảng phố Lê Văn Hưu)</i> (nay thuộc phần đất các <a href="__missing__">quận Hai Bà Trưng</a>, <a href="__missing__">Hoàn Kiếm</a>).</li></ul></dd></dl>
<ul><li>Huyện <a href="__missing__">Vĩnh Thuận</a> (5 tổng: 55 xã, thôn, phường, trại) gồm các tổng:</li></ul>
<dl><dd><ul><li>Thượng: gồm 7 phường: <i>Hòe Nhai, Thạch Khối, An Hoa, Nghi Tàm, Quảng Bá, Tây Hồ, Nhật Chiêu (Nhật Tân)</i>.</li>
<li>Trung: gồm 6 phường: <i>Bái Ân (nay thuộc phường Nghĩa Đô quận Cầu Giấy), (Trích Sài, Võng Thị, An Thái (Yên Thái), Hồ Khẩu) (nay thuộc phường Bưởi quận Tây Hồ), Thụy Chương (Thụy Khê)</i>. (nay thuộc phần đất các quận Cầu Giấy và Tây Hồ).</li>
<li>Nội: gồm 10 thôn, trại: <i>Liễu Giai, Vĩnh Phúc, Thủ Lệ, Cống An, Đại An (Đại Yên), Ngọc Hà, Hữu Tiệp, Giảng Võ, Vạn Bảo, Hào Nam</i>.</li>
<li>Hạ: gồm 6 phường, trại: <i>Quán Trạm, Nam Đồng, Yên Lãng (<a href="__missing__">làng Láng</a>), Khương Thượng, Công Bộ, Thịnh Quang</i>. (nay thuộc phần đất các quận Đống Đa,...)</li>
<li>Yên Thành: gồm 26 phường, thôn: <i>Yên Thành, An Thuận, Cận Hàn, An Ninh Hạ, An Canh, An Định, Chùa Trúc Bạch, Ngũ Xã Tràng, Tứ Chiếng Tràng, Chùa Long Châu, Hậu Khán Sơn, Chùa Một Cột, Chùa Tăng Phúc, Thanh Ninh, Thanh Trường, Cận Tú Nam, Tiên Châu, Dụ Hậu, Phụ Bảo, Bà Lẽ, An Viên, Quán Thánh, Khán Sơn Núi Sư, Trụ trì Trấn Vũ, An Duyên, Tân An</i>.<sup><a href="__missing__"><span><span>[</span>6<span>]</span></span></a></sup></li></ul></dd></dl>
<h2>Xem thêm</h2>
<ul><li><a href="__missing__">Hà Nội</a></li>
<li><a href="__missing__">Hoàng thành Thăng Long</a></li></ul>
<h2>Tham khảo</h2>
<ol><li><span><a href="__missing__"></a></span> <span>William Dampier: Một chuyến Du hành đến Đàng Ngoài 1688 Nhà Xuất bản Thế giới, tr. 64.</span></li>
<li><span><a href="__missing__"></a></span> <span>William Dampier: Một chuyến Du hành đến Đàng Ngoài 1688 Nhà Xuất bản Thế giới, tr. 66.</span></li>
<li><span><a href="__missing__"></a></span> <span><i>Đại Việt địa dư toàn biên</i> của Phương Đình <a href="__missing__">Nguyễn Văn Siêu</a>, địa chí loại quyển 5, Đại Nam phương dư chính biên, tỉnh Hà Nội, trang 363.</span></li>
<li><span><a href="__missing__"></a></span> <span><i>Đại Việt địa dư toàn biên</i> của <a href="__missing__">Nguyễn Văn Siêu</a>, trang 364.</span></li>
<li><span><a href="__missing__"></a></span> <span><cite><a href="__missing__">"Thành cổ Hà Nội - những dấu ấn lịch sử"</a>.</cite><span></span><span> </span><span><code>{{<a href="__missing__">Chú thích web</a>}}</code>: </span><span><code><span>|</span>ngày lưu trữ=</code> cần <code><span>|</span>url lưu trữ=</code> (<a href="__missing__">trợ giúp</a>)</span></span></li>
<li><span><a href="__missing__"></a></span> <span>Cuốn "Tên làng xã Việt Nam đầu thế kỷ 19", trang 95-98.</span></li>
</ol>
<h2>Liên kết ngoài</h2>
<ul><li><a href="__missing__">Công trình khai quật Hoàng thành Thăng Long</a> <a href="__missing__">Lưu trữ</a><span> ngày 29 tháng 4 năm 2007 tại </span><a href="__missing__">Wayback Machine</a></li></ul>
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long