<?xml version="1.0" encoding="utf-8"?><?xml-stylesheet type="text/xsl" href="https://giser.date/atom.xsl"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="zh-CN">
  <id>https://giser.date/</id>
  <title>带着黄昏出逃</title>
  <subtitle>带着黄昏出逃 的博客演示</subtitle>
  <icon>https://giser.date/favicon.ico</icon>
  <updated>2026-09-07T08:35:05.094Z</updated>
  <generator>@vuepress/plugin-feed</generator>
  <link rel="self" href="https://giser.date/atom.xml"/>
  <link rel="alternate" href="https://giser.date/"/>
  <category term="后端"/>
  <category term="指南"/>
  <category term="项目实战"/>
  <category term="使用指南"/>
  <category term="蔬菜"/>
  <category term="前端"/>
  <category term="数据库"/>
  <category term="火龙果"/>
  <category term="水果"/>
  <category term="苹果"/>
  <category term="香蕉"/>
  <contributor>
    <name>Ms.Hope</name>
  </contributor>
  <entry>
    <title type="text">遥感原理与应用</title>
    <id>https://giser.date/posts/remoteSensing/1.html</id>
    <link href="https://giser.date/posts/remoteSensing/1.html"/>
    <updated>2026-09-07T08:31:55.000Z</updated>
    <summary type="html"><![CDATA[
<h2>遥感平台与传感器</h2>
<h3>遥感平台</h3>
<ul>
<li>定义：遥感中搭载传感器的工具</li>
<li>遥感平台类型
<ul>
<li>地面平台(&lt;100m)
<ul>
<li>定义
<ul>
<li>与地面或水面接触，近距离遥感,0-100m</li>
</ul>
</li>
<li>举例
<ul>
<li>三脚架、遥感塔、遥感车/船</li>
</ul>
</li>
</ul>
</li>
<li>航空平台(&lt;30km)
<ul>
<li>飞机(最广泛)
<ul>
<li>按飞行高度
<ul>
<li>低空平台（2km以内）
<ul>
<li>直升机（常用）、侦察机</li>
</ul>
</li>
<li>中空平台（2-6km）
<ul>
<li>轻型飞机</li>
</ul>
</li>
<li>高空平台（12-30km，对流层顶部）
<ul>
<li>重型飞机</li>
</ul>
</li>
</ul>
</li>
</ul>
</li>
<li>气球
<ul>
<li>低空气球
<ul>
<li>12km以下的对流层，系留气球</li>
</ul>
</li>
<li>高空气球
<ul>
<li>12 ～40km，自由漂浮</li>
</ul>
</li>
</ul>
</li>
<li>无人机
<ul>
<li>固定翼型无人机</li>
<li>无人驾驶直升机</li>
</ul>
</li>
</ul>
</li>
<li>航天平台(&gt;150km)
<ul>
<li>人造地球卫星(最主要、最常用)
<ul>
<li>低高度、短寿命卫星
<ul>
<li>高空间分辨率，重复周期短，用于资源详查与军事侦察</li>
</ul>
</li>
<li>中高度、长寿命卫星
<ul>
<li>大部分对地观测卫星，如三种环境卫星</li>
</ul>
</li>
<li>高高度、长寿命卫星（35800km）
<ul>
<li>也称地球同步卫星（静止卫星），用作通信卫星、气象卫星和地面动态监测</li>
</ul>
</li>
</ul>
</li>
<li>高空探测火箭、宇宙飞船、航天飞机与空间轨道站</li>
</ul>
</li>
</ul>
</li>
<li>遥感卫星轨道
<ul>
<li>按形状e
<ul>
<li>圆轨道（偏心率e=0）
<ul>
<li>相对恒定的运动速度，较均匀的覆盖特性
<ul>
<li>如空间站</li>
</ul>
</li>
</ul>
</li>
<li>椭圆轨道（偏心率0
<ul>
<li>卫星在轨道上做非匀速运动</li>
</ul>
</li>
</ul>
</li>
<li>按倾角i
<ul>
<li>赤道轨道（i≈0）
<ul>
<li>轨道面与赤道面重合</li>
</ul>
</li>
<li>极地轨道（i≈90）
<ul>
<li>轨道面穿过地球南北极</li>
</ul>
</li>
<li>倾斜轨道
<ul>
<li>轨道面倾斜于赤道</li>
</ul>
</li>
</ul>
</li>
<li>最常见
<ul>
<li>地球同步轨道
<ul>
<li>定义：轨道运行周期与地球自转周期完全相等（大约一天）</li>
<li>轨道高度：35800km</li>
<li>优势
<ul>
<li>视野广阔</li>
<li>连续观测</li>
</ul>
</li>
<li>应用
<ul>
<li>气象卫星和通信卫星</li>
</ul>
</li>
</ul>
</li>
<li>太阳同步轨道
<ul>
<li>定义：卫星轨道面绕地球的自转轴旋转，旋转方向及周期与地球公转方向和周期相等的轨道</li>
<li>轨道高度：500 - 1000km，中低轨道</li>
<li>轨道形状：近圆形轨道</li>
<li>优势：卫星每天沿同一方向经过同一纬度的地面点时，地方时是相同的
<ul>
<li>固定的太阳光入射角，相似的光照条件</li>
</ul>
</li>
<li>应用：绝大多数的地球资源卫星，如Landsat、SPOT</li>
</ul>
</li>
</ul>
</li>
</ul>
</li>
</ul>]]></summary>
    <content type="html"><![CDATA[
<h2>遥感平台与传感器</h2>
<h3>遥感平台</h3>
<ul>
<li>定义：遥感中搭载传感器的工具</li>
<li>遥感平台类型
<ul>
<li>地面平台(&lt;100m)
<ul>
<li>定义
<ul>
<li>与地面或水面接触，近距离遥感,0-100m</li>
</ul>
</li>
<li>举例
<ul>
<li>三脚架、遥感塔、遥感车/船</li>
</ul>
</li>
</ul>
</li>
<li>航空平台(&lt;30km)
<ul>
<li>飞机(最广泛)
<ul>
<li>按飞行高度
<ul>
<li>低空平台（2km以内）
<ul>
<li>直升机（常用）、侦察机</li>
</ul>
</li>
<li>中空平台（2-6km）
<ul>
<li>轻型飞机</li>
</ul>
</li>
<li>高空平台（12-30km，对流层顶部）
<ul>
<li>重型飞机</li>
</ul>
</li>
</ul>
</li>
</ul>
</li>
<li>气球
<ul>
<li>低空气球
<ul>
<li>12km以下的对流层，系留气球</li>
</ul>
</li>
<li>高空气球
<ul>
<li>12 ～40km，自由漂浮</li>
</ul>
</li>
</ul>
</li>
<li>无人机
<ul>
<li>固定翼型无人机</li>
<li>无人驾驶直升机</li>
</ul>
</li>
</ul>
</li>
<li>航天平台(&gt;150km)
<ul>
<li>人造地球卫星(最主要、最常用)
<ul>
<li>低高度、短寿命卫星
<ul>
<li>高空间分辨率，重复周期短，用于资源详查与军事侦察</li>
</ul>
</li>
<li>中高度、长寿命卫星
<ul>
<li>大部分对地观测卫星，如三种环境卫星</li>
</ul>
</li>
<li>高高度、长寿命卫星（35800km）
<ul>
<li>也称地球同步卫星（静止卫星），用作通信卫星、气象卫星和地面动态监测</li>
</ul>
</li>
</ul>
</li>
<li>高空探测火箭、宇宙飞船、航天飞机与空间轨道站</li>
</ul>
</li>
</ul>
</li>
<li>遥感卫星轨道
<ul>
<li>按形状e
<ul>
<li>圆轨道（偏心率e=0）
<ul>
<li>相对恒定的运动速度，较均匀的覆盖特性
<ul>
<li>如空间站</li>
</ul>
</li>
</ul>
</li>
<li>椭圆轨道（偏心率0
<ul>
<li>卫星在轨道上做非匀速运动</li>
</ul>
</li>
</ul>
</li>
<li>按倾角i
<ul>
<li>赤道轨道（i≈0）
<ul>
<li>轨道面与赤道面重合</li>
</ul>
</li>
<li>极地轨道（i≈90）
<ul>
<li>轨道面穿过地球南北极</li>
</ul>
</li>
<li>倾斜轨道
<ul>
<li>轨道面倾斜于赤道</li>
</ul>
</li>
</ul>
</li>
<li>最常见
<ul>
<li>地球同步轨道
<ul>
<li>定义：轨道运行周期与地球自转周期完全相等（大约一天）</li>
<li>轨道高度：35800km</li>
<li>优势
<ul>
<li>视野广阔</li>
<li>连续观测</li>
</ul>
</li>
<li>应用
<ul>
<li>气象卫星和通信卫星</li>
</ul>
</li>
</ul>
</li>
<li>太阳同步轨道
<ul>
<li>定义：卫星轨道面绕地球的自转轴旋转，旋转方向及周期与地球公转方向和周期相等的轨道</li>
<li>轨道高度：500 - 1000km，中低轨道</li>
<li>轨道形状：近圆形轨道</li>
<li>优势：卫星每天沿同一方向经过同一纬度的地面点时，地方时是相同的
<ul>
<li>固定的太阳光入射角，相似的光照条件</li>
</ul>
</li>
<li>应用：绝大多数的地球资源卫星，如Landsat、SPOT</li>
</ul>
</li>
</ul>
</li>
</ul>
</li>
</ul>
<h3>传感器概述</h3>
<ul>
<li>定义：收集、探测并记录地物电磁波辐射信息的仪器</li>
<li>类型
<ul>
<li>按电磁波辐射来源
<ul>
<li>主动式传感器
<ul>
<li>工作原理
<ul>
<li>主动向目标发射电磁波，并接收反射回来的信号</li>
</ul>
</li>
<li>能量来源
<ul>
<li>自身发射的电磁波</li>
</ul>
</li>
<li>典型代表
<ul>
<li>合成孔径雷达、激光雷达</li>
</ul>
</li>
</ul>
</li>
<li>被动式传感器
<ul>
<li>工作原理
<ul>
<li>自身不发射电磁波，仅被动接收来自地物的辐射能量</li>
</ul>
</li>
<li>能量来源
<ul>
<li>太阳光的反射或地物自身的热辐射</li>
</ul>
</li>
<li>典型代表
<ul>
<li>摄影相机、多光谱扫描仪</li>
</ul>
</li>
</ul>
</li>
</ul>
</li>
<li>按成像原理
<ul>
<li>摄影机
<ul>
<li>原理：瞬间曝光，形成中心投影的照片</li>
<li>分类
<ul>
<li>框幅式</li>
<li>缝隙式</li>
<li>全景式</li>
</ul>
</li>
</ul>
</li>
<li>扫描仪
<ul>
<li>原理：逐点或逐行扫描，拼接成条带影像</li>
<li>分类
<ul>
<li>光机扫描仪</li>
<li>扫帚式扫描仪</li>
</ul>
</li>
</ul>
</li>
<li>雷达
<ul>
<li>原理：利用微波成像，有独特的侧视成像方式</li>
<li>分类
<ul>
<li>真实孔径雷达</li>
<li>合成孔径雷达</li>
</ul>
</li>
</ul>
</li>
</ul>
</li>
<li>按对电磁波信息的记录方式
<ul>
<li>成像传感器
<ul>
<li>输出结果是目标的图像</li>
</ul>
</li>
<li>非成像传感器
<ul>
<li>输出结果是数据或曲线图
<ul>
<li>如微波高度计</li>
</ul>
</li>
</ul>
</li>
</ul>
</li>
<li>按响应波段
<ul>
<li>光场传感器
<ul>
<li>响应波段：可见光、反射红外波段</li>
</ul>
</li>
<li>热场传感器
<ul>
<li>响应波段：中红外、热红外波段</li>
</ul>
</li>
<li>微波传感器
<ul>
<li>响应波段：响应微波波段</li>
<li>分类
<ul>
<li>主动微波传感器（SAR）</li>
<li>被动微波传感器（AMSR-E）</li>
</ul>
</li>
</ul>
</li>
</ul>
</li>
</ul>
</li>
<li>组成
<ul>
<li>收集器
<ul>
<li>收集来自地面目标辐射的电磁波能量</li>
</ul>
</li>
<li>探测器
<ul>
<li>将收集的电磁辐射能转变成化学能或电能</li>
</ul>
</li>
<li>处理器
<ul>
<li>将探测器探测到的的化学能或电能等信号进行处理</li>
</ul>
</li>
<li>输出器
<ul>
<li>输出获取的数据</li>
</ul>
</li>
</ul>
</li>
<li>性能
<ul>
<li>空间分辨率
<ul>
<li>遥感影像上能够详细区分的最小单元的尺寸或大小</li>
</ul>
</li>
<li>时间分辨率（重访周期）
<ul>
<li>对同一目标进行遥感采样的时间间隔</li>
<li>具体表现
<ul>
<li>相邻两次探测的时间间隔越大，时间分辨率越低</li>
</ul>
</li>
<li>重复周期
<ul>
<li>卫星轨道回归到同一空间位置的时间间隔</li>
</ul>
</li>
</ul>
</li>
<li>波谱分辨率
<ul>
<li>传感器接收电磁波辐射时能分辨的最小波长间隔</li>
<li>两个维度
<ul>
<li>波段数量
<ul>
<li>波段越多，分辨率越高</li>
</ul>
</li>
<li>波段宽度
<ul>
<li>波段越窄，分辨率越高</li>
</ul>
</li>
</ul>
</li>
</ul>
</li>
<li>辐射分辨率
<ul>
<li>传感器接受波谱信号时能分辨的最小辐射差，在遥感图像上表现为每一像元的辐射量化级</li>
<li>具体表现
<ul>
<li>影像的灰度等级越多，其辐射分辨率越高，区分目标物属性能力越强</li>
</ul>
</li>
<li>衡量单位
<ul>
<li>比特（bit），8 bit = 2⁸ = 256个灰度级 (常用)</li>
</ul>
</li>
</ul>
</li>
<li>视场角FOV
<ul>
<li>传感器对地扫描或成像的总角度，决定了一幅图像对地面的覆盖范围</li>
<li>影响
<ul>
<li>视场角越大： 覆盖范围越广，获取大面积数据的效率越高</li>
<li>视场角越小： 覆盖范围窄，但影像边缘的几何变形通常也较小</li>
</ul>
</li>
</ul>
</li>
</ul>
</li>
</ul>
<h2>遥感图像处理</h2>
<h3>图像处理基本概念</h3>
<ul>
<li>光学处理（模拟处理）与数字处理
<ul>
<li>现在遥感图像处理几乎都指的是数字处理</li>
</ul>
</li>
<li>数字图像
<ul>
<li>定义
<ul>
<li>能在计算机里存储、运算、显示和输出的图像</li>
</ul>
</li>
<li>数字化
<ul>
<li>定义
<ul>
<li>将光学图像转换为数字图像的过程，又称模/数转换（A/D转换）</li>
</ul>
</li>
<li>步骤
<ul>
<li>采样
<ul>
<li>将连续空间坐标离散化，即确定像元的行列置。
<ul>
<li>空间坐标离散化</li>
</ul>
</li>
</ul>
</li>
<li>量化
<ul>
<li>将连续的灰度值映射为离散的整数值（0～255等)
<ul>
<li>亮度值离散化</li>
</ul>
</li>
</ul>
</li>
</ul>
</li>
</ul>
</li>
<li>优点
<ul>
<li>便于计算机处理与分析、图像信息损失低、抽象性强</li>
</ul>
</li>
</ul>
</li>
<li>灰度直方图
<ul>
<li>定义
<ul>
<li>在平面直角坐标系中，对应于每个灰度值，表示具有该灰度值的像元个数占总像元数百分比的图形</li>
</ul>
</li>
<li>性质
<ul>
<li>直方图反映图像中灰度的分布规律（位置信息丢失）</li>
<li>图像与直方图之间是多对一的映射关系</li>
<li>子区域直方图的累加等于整幅影像的直方图</li>
</ul>
</li>
<li>应用
<ul>
<li>判断图像总体质量
<ul>
<li>两端分布
<ul>
<li>高对比度，黑白分明但层次较少</li>
</ul>
</li>
<li>正态分布
<ul>
<li>对比度适中、亮度均匀、层次丰富（理想影像）</li>
</ul>
</li>
<li>偏态分布
<ul>
<li>像元值集中在小范围，对比度低，影像偏亮(255)或偏暗(0),层次少</li>
</ul>
</li>
</ul>
</li>
<li>判断噪声类型
<ul>
<li>如高斯噪声满足高斯分布，椒盐噪声在两端出现额外的尖峰</li>
</ul>
</li>
<li>作为图像分割阈值的选择依据
<ul>
<li>直方图具有两个或两个以上的峰值时，说明图像中主要有两类或更多类别的目标地物</li>
</ul>
</li>
</ul>
</li>
</ul>
</li>
</ul>
<h3>遥感数字图像校正</h3>
<ul>
<li>几何校正
<ul>
<li>几何畸变
<ul>
<li>像元在图像坐标系中的位置与其在地面参考坐标系中的真实位置不一致的现象</li>
<li>分类
<ul>
<li>内部变形（系统性变形）</li>
<li>外部变形
<ul>
<li>平台运动与姿态变化、地球曲率与地形起伏等</li>
</ul>
</li>
</ul>
</li>
</ul>
</li>
<li>定义
<ul>
<li>对失真图像进行复原性处理，消除图像的几何畸变</li>
</ul>
</li>
<li>方法
<ul>
<li>几何粗校正（系统几何校正）
<ul>
<li>基于卫星轨道、姿态、传感器性能指标、扫描特征等参数，对影像几何变形进行校正</li>
</ul>
</li>
<li>几何精校正
<ul>
<li>利用地面控制点校正图像的几何变形，实现空间位置高精度匹配</li>
</ul>
</li>
</ul>
</li>
<li>类型
<ul>
<li>配准
<ul>
<li>同一区域内两幅影像之间相互对准，使同名像元几何位置匹配
<ul>
<li>解决影像之间的对其问题</li>
</ul>
</li>
</ul>
</li>
<li>校正
<ul>
<li>影像对地图的对准，使影像与地图一样平面化
<ul>
<li>解决影像与地图之间的对应关系</li>
</ul>
</li>
</ul>
</li>
<li>正射校正
<ul>
<li>对影像的逐个像元进行地形校正，使影像符合<br>
正射投影的要求
<ul>
<li>解决地形高差造成的误差问题</li>
</ul>
</li>
</ul>
</li>
<li>地理编码
<ul>
<li>将影像配准到地理坐标系统，使影像具有地理位置信息
<ul>
<li>赋予影像真实坐标</li>
</ul>
</li>
</ul>
</li>
</ul>
</li>
<li>主要步骤
<ul>
<li>地面控制点的选择 (GCP)
<ul>
<li>选取原则
<ul>
<li>高对比度，便于在影像中精确识别</li>
<li>稳定性，不随时间变化</li>
<li>空间分布均匀（四角与中部）</li>
<li>同一高程（若未进行地形校正）</li>
</ul>
</li>
<li>最小数量
<ul>
<li>(n+1)(n+2)/2（n阶多项式）
<ul>
<li>一般多于理论最小数量</li>
</ul>
</li>
</ul>
</li>
</ul>
</li>
<li>映射关系
<ul>
<li>几何校正的本质是建立待校正图像坐标到地理坐标（校正图像）的映射关系</li>
<li>均方根误差RMS越小，几何校正精度越高；一般要求RMS ≤1个像元大小</li>
</ul>
</li>
<li>重采样
<ul>
<li>定义：在几何校正中像元经过映射后往往对应到非整数位置，需要根据周围已知整数像元的灰度值，通过空间插值计算出该位置的灰度</li>
<li>分类
<ul>
<li>最近邻法
<ul>
<li>取距离实际位置最近的像元的灰度值作为输出图像像元的灰度值</li>
</ul>
</li>
<li>
<pre><code>         双线性内插法
</code></pre>
<ul>
<li>取采样点周围4个像元的值参与计算，先计算水<br>
平（或垂直）方向两两像元的线性内插，所得到的两个内插值再进行一次内插</li>
<li>缺点：损失边缘或线性信息，导致图像模糊</li>
</ul>
</li>
<li>三次卷积法</li>
</ul>
</li>
</ul>
</li>
</ul>
</li>
</ul>
</li>
<li>辐射校正
<ul>
<li>辐射失真
<ul>
<li>由于多种因素干扰，传感器的测量值与地物真实的光谱反射率或光谱辐射亮度之间的差异</li>
<li>来源
<ul>
<li>传感器自身条件
<ul>
<li>光学系统误差-边缘减光</li>
<li>探测器响应误差</li>
</ul>
</li>
<li>大气影响
<ul>
<li>衰减
<ul>
<li>太阳光在到达地物前，以及地物反射光在到达传感器前，都会被大气吸收和散射而减弱</li>
</ul>
</li>
<li>附加
<ul>
<li>大气自身也会散射一部分太阳光直接进入传感器（程辐射），是造成影像模糊、对比度下降的主要原因 。</li>
</ul>
</li>
</ul>
</li>
<li>光照与地形</li>
</ul>
</li>
</ul>
</li>
<li>定义
<ul>
<li>消除图像数据中依附在辐射亮度中各种失真的过程</li>
</ul>
</li>
<li>步骤
<ul>
<li>传感器校正
<ul>
<li>消除由于传感器灵敏特性变化而引起的辐射失真</li>
</ul>
</li>
<li>大气校正
<ul>
<li>野外波谱测试回归分析法、辐射传递方程计算法</li>
<li>波段对比法
<ul>
<li>原理
<ul>
<li>大气散射具有选择性：对短波（如蓝、绿光）影响大，对长波（如红外）影响小</li>
</ul>
</li>
<li>校正思路
<ul>
<li>利用一个受大气影响很小的“清洁”长波段作为参考，来估算并校正受影响严重的短波段 。</li>
</ul>
</li>
<li>回归分析法
<ul>
<li>选择最暗目标
<ul>
<li>在影像中选择一系列最暗的目标（如深水、山体阴影）</li>
</ul>
</li>
<li>提取亮度值
<ul>
<li>分别提取这些目标在“清洁波段”（如TM7）和“待校正波段”（如TM4）的亮度值</li>
</ul>
</li>
<li>绘制散点图并进行线性回归分析
<ul>
<li>截距 a 即为待校正波段的大气干扰值</li>
</ul>
</li>
<li>校正计算
<ul>
<li>从待校正波段的所有像元值中减去 a</li>
</ul>
</li>
</ul>
</li>
<li>直方图法
<ul>
<li>确定零反射地物区域
<ul>
<li>影像中存在理论上反射率为零的地物（深水、阴影）</li>
</ul>
</li>
<li>查看亮度直方图
<ul>
<li>查看这些区域在待校正波段的亮度值直方图</li>
</ul>
</li>
<li>
<pre><code>          确定最小亮度值
</code></pre>
<ul>
<li>TM4直方图的起始亮度值 a （最小<br>
值）就代表了大气程辐射的影响</li>
</ul>
</li>
<li>校正计算
<ul>
<li>从该波段的所有像元值中减去这个最小值a</li>
</ul>
</li>
</ul>
</li>
</ul>
</li>
</ul>
</li>
<li>太阳高度和地形校正
<ul>
<li>太阳高度角校正
<ul>
<li>目的
<ul>
<li>将不同光照条件下获取的影像校正为太阳垂直照射时的标准状态</li>
</ul>
</li>
<li>原理
<ul>
<li>地物接收到的辐射能量与太阳高度角呈正比关系</li>
</ul>
</li>
</ul>
</li>
<li>地形校正
<ul>
<li>目的
<ul>
<li>把倾斜面上获得的图像校正到平面上获取的图像</li>
</ul>
</li>
<li>原理
<ul>
<li>根据坡面朝向与太阳入射方向的夹角 𝜃𝑖，修正辐射强度 =&gt; 需要DEM数据</li>
</ul>
</li>
</ul>
</li>
</ul>
</li>
</ul>
</li>
<li>最终目标
<ul>
<li>从数字量化值 (DN) 到地表反射率或辐射亮度</li>
</ul>
</li>
</ul>
</li>
<li>去除噪声
<ul>
<li>全局噪声</li>
</ul>
</li>
</ul>
<h3>数字图像增强：突出有用信息，提高视觉效果</h3>
<ul>
<li>空间域增强
<ul>
<li>定义
<ul>
<li>在图像平面上直接针对每个像元灰度值进行处理，处理后的像元位置不变
<ul>
<li>空间域是指图像所在的二维平面</li>
</ul>
</li>
</ul>
</li>
<li>点运算
<ul>
<li>通过拉伸或扩展图像的亮度分布，使之占满整个动态范围（0～255），以分出更多亮度等级，扩大地物之间亮度差异</li>
<li>又称对比度拉伸、对比度增强或灰度变换，是辐射增强的主要方法</li>
<li>处理单元
<ul>
<li>单个像元
<ul>
<li>仅与该像元自身灰度有关</li>
</ul>
</li>
</ul>
</li>
<li>分类
<ul>
<li>线性变换（可分段）</li>
<li>非线性变换
<ul>
<li>指数变换
<ul>
<li>拉伸高亮度部分；压缩低亮度部分</li>
</ul>
</li>
<li>对数变换
<ul>
<li>拉伸低亮度部分，压缩高亮度部分</li>
</ul>
</li>
<li>直方图均衡化
<ul>
<li>定义：利用灰度分布统计特性进行自动增强</li>
<li>目标：使图像中各灰度级的像元数尽量均匀分布，从而扩大整体对比度、改善视觉效果</li>
<li>效果：各灰度级所占图像的面积近似相等，频率小的灰度级背被合并，频率高的灰度级被保留。因此可以增加图像上大面积出现的地物与周围地物的反差</li>
</ul>
</li>
</ul>
</li>
</ul>
</li>
</ul>
</li>
<li>邻域运算
<ul>
<li>定义
<ul>
<li>基于像素的空间邻域关系，使用卷积运算的方法进行计算处理，以达到抑制图像噪声、增强图像对比度、增强图像边缘、提取图像特征</li>
</ul>
</li>
<li>处理单元
<ul>
<li>像元与其邻域
<ul>
<li>结合周围像元灰度进行计算</li>
</ul>
</li>
</ul>
</li>
<li>主要方法
<ul>
<li>图像卷积运算
<ul>
<li>利用邻域像元灰度加权求和的图像处理方法</li>
<li>卷积核上对应的值称为权重，卷积核大小与邻域大小一致</li>
</ul>
</li>
</ul>
</li>
<li>分类
<ul>
<li>图像平滑
<ul>
<li>概念
<ul>
<li>利用邻域运算减弱图像中像元之间的灰度突变</li>
</ul>
</li>
<li>目的
<ul>
<li>抑制噪声、改善图像质量、突出图像的主体信息
<ul>
<li>消除噪声</li>
</ul>
</li>
</ul>
</li>
<li>方法
<ul>
<li>均值滤波（模糊细节）
<ul>
<li>将每个像元在以其为中心的邻域内取平均值来代替该像元值</li>
<li>模板越大，平滑效果越明显，但图像细节越模糊</li>
<li>平滑阈值T：当 |e - e'| › T 时，e'代替e</li>
</ul>
</li>
<li>中值滤波（保持细节）
<ul>
<li>将每个像元在以其为中心的邻域内取中间亮度值来代替该像元值（非卷积）</li>
</ul>
</li>
</ul>
</li>
</ul>
</li>
<li>图像锐化
<ul>
<li>概念
<ul>
<li>突出图像的边缘和轮廓、线性目标或某些亮度变化率大的部分
<ul>
<li>突出边缘</li>
</ul>
</li>
</ul>
</li>
<li>
<pre><code>                 罗伯特梯度
</code></pre>
<ul>
<li>梯度是函数的一阶导数，反映了相邻像元的灰度变化率</li>
<li>梯度大的位置=&gt;边缘，梯度值代替边缘处像元值=&gt;突出边缘</li>
<li>t1卷积绝对值 + t2卷积绝对值 =替换&gt; 左上角像元</li>
</ul>
</li>
<li>
<pre><code>                   索伯尔梯度
</code></pre>
<ul>
<li>t1卷积绝对值 + t2卷积绝对值 =替换&gt; 中间像元</li>
</ul>
</li>
<li>
<pre><code>               拉普拉斯算子
</code></pre>
<ul>
<li>4邻域的值相加再减去该像元值的4倍，8邻域同理</li>
<li>不检测均匀的亮度变化，而是检测变化率的变化率</li>
</ul>
</li>
<li>定向检测
<ul>
<li>通过设计不同方向的卷积模板专门检测图像中某一方向的边缘或纹理特征</li>
<li>用途
<ul>
<li>提取地貌构造线、道路、山脊等具有方向性的线性地物</li>
</ul>
</li>
</ul>
</li>
</ul>
</li>
</ul>
</li>
</ul>
</li>
</ul>
</li>
<li>频率域、彩色增强和图像运算
<ul>
<li>频率域增强
<ul>
<li>频率
<ul>
<li>图像像元的灰度值随位置变化的频繁程度
<ul>
<li>高频部分
<ul>
<li>较短的像元距离内灰度值变化的频率大</li>
</ul>
</li>
<li>低频部分
<ul>
<li>较短的像元距离内灰度值变化的频率较小</li>
</ul>
</li>
</ul>
</li>
</ul>
</li>
<li>傅里叶变换
<ul>
<li>将图像从“空间域”转换到“频率域”</li>
</ul>
</li>
<li>滤波
<ul>
<li>
<pre><code>                        频率域平滑
</code></pre>
<ul>
<li>理想低通滤波器</li>
<li>Butterworth低通滤波器</li>
<li>指数低通滤波器</li>
</ul>
</li>
<li>
<pre><code>                        频率域锐化
</code></pre>
<ul>
<li>理想高通滤波器</li>
<li>Butterworth高通滤波器</li>
<li>指数高通滤波器</li>
</ul>
</li>
</ul>
</li>
<li>傅里叶逆变换
<ul>
<li>转换回&quot;空间域&quot;得到增强后的图像</li>
</ul>
</li>
</ul>
</li>
<li>彩色增强
<ul>
<li>概念
<ul>
<li>将灰度图像变为彩色图像以及通过数字图像组合进行各种彩色变换以改善图像可视性</li>
</ul>
</li>
<li>伪彩色增强
<ul>
<li>一幅黑白图像的不同灰度按一定的函数关系变换成彩色
<ul>
<li>密度分割法：按灰度分层</li>
</ul>
</li>
</ul>
</li>
<li>彩色合成
<ul>
<li>不同波段的图像存放在红绿蓝不同颜色通道的存储器中，并依照加色法彩色合成原理，在屏幕上进行叠置，构成彩色图像</li>
<li>真彩色合成
<ul>
<li>R-红光，G-绿光，B-蓝光
<ul>
<li>合成后的影像十分接近自然界的色彩</li>
</ul>
</li>
</ul>
</li>
<li>假彩色合成
<ul>
<li>各工作波段被赋予的颜色与波段所代表的真实颜色不同，合成得彩色不表示地物的真实颜色</li>
<li>标准假彩色：R-近红外，G-红，B-蓝</li>
</ul>
</li>
</ul>
</li>
<li>
<pre><code>                HLS变换
</code></pre>
<ul>
<li>Hue（色度-横切圆周）Lightmess（明度-中轴）Saturation（饱和度-半径）</li>
<li>HLS与RGB变换主要指的是这两种颜色坐标系统之间的变换</li>
</ul>
</li>
</ul>
</li>
<li>图像运算
<ul>
<li>概念
<ul>
<li>多光谱遥感影像</li>
<li>完成空间配准后的两幅或多幅单波段影像</li>
</ul>
</li>
<li>加法运算
<ul>
<li>提高整体亮度，减少噪声影响</li>
</ul>
</li>
<li>差值运算
<ul>
<li>动态监测</li>
</ul>
</li>
<li>比值运算
<ul>
<li>消除地形坡度和方向等环境条件的影响（同物异谱）</li>
</ul>
</li>
<li>混合运算
<ul>
<li>归一化植被指数（NDVI=（NIR-R）/（NIR+R），提取植被）</li>
</ul>
</li>
</ul>
</li>
</ul>
</li>
<li>多光谱增强与图像融合
<ul>
<li>多光谱增强
<ul>
<li>目的
<ul>
<li>减少信息冗余（ 多光谱图像各波段间的相关性），实现数据压缩</li>
<li>突出主要信息，生成更具解译效果的新波段数据</li>
</ul>
</li>
<li>
<pre><code>      主成分变换       （K-L变换/PCA变换）
</code></pre>
<ul>
<li>核心思想：纯粹由数据驱动的统计方法，变换后的新坐标轴（主成分）具有统计意义（方差最大化）</li>
<li>效果
<ul>
<li>信息集中，噪声分离</li>
</ul>
</li>
<li>第一主分量 (PC1)： 集中了原始数据中最大比例的信息量，通常反映了地物的总体亮度特征</li>
<li>第二、三主分量 (PC2, PC3)： 依次捕捉剩余的主要信息，常常突出不同地物类型之间的差异</li>
<li>后续主分量： 最后几个分量主要包含的是噪声</li>
</ul>
</li>
<li>缨帽变换（K-T变换）
<ul>
<li>核心思想：变换后的新坐标轴具有明确的物理景观含义</li>
<li>效果
<ul>
<li>分离植被/土壤/水体信息</li>
</ul>
</li>
<li>第一分量为亮度，反映图像总体反射值</li>
<li>第二分量为绿度，近红外与可见光部分的差值，反映了健康绿色植被的覆盖密度和生长状况</li>
<li>第三分量为湿度，反映了TM1-4与TM5,7的差值， TM5,7（水的吸收带）对植被和土壤的湿度非常敏感</li>
</ul>
</li>
</ul>
</li>
<li>图像融合
<ul>
<li>将来自不同传感器的图像数据进行运算处理，生成一幅比任何单一数据源都更精确、更丰富、信息更完整的合成图像的技术 。</li>
<li>示例
<ul>
<li>Landsat ETM+
<ul>
<li>全色波段 (Band 8)：空间分辨率为15米</li>
<li>多光谱波段 (Bands 1-5, 7)：空间分辨率为30米</li>
</ul>
</li>
</ul>
</li>
<li>步骤
<ul>
<li>配准
<ul>
<li>几何校正时需将低空间分辨率图像重采样成高空间分辨率图像</li>
</ul>
</li>
<li>直方图调整
<ul>
<li>使图像的亮度趋于一致</li>
</ul>
</li>
<li>融合
<ul>
<li>代数法
<ul>
<li>相乘：SAR影像与光学影像</li>
<li>相关系数加权法：全色影像与多光谱影像</li>
</ul>
</li>
<li>HLS变换融合
<ul>
<li>高分辨率的全色影像替换低分辨率的亮度(L)分量</li>
</ul>
</li>
<li>基于PCA变换
<ul>
<li>高分辨率影像替换第 1 主分量</li>
</ul>
</li>
<li>小波变换融合
<ul>
<li>将全色影像中的高频细节与多光谱影像中的低频色彩信息进行合并</li>
</ul>
</li>
</ul>
</li>
</ul>
</li>
</ul>
</li>
</ul>
</li>
</ul>
<h2>影像分类：识别地物类型</h2>
<h3>目视解译</h3>
<ul>
<li>影像解译
<ul>
<li>从遥感影像上获取目标地物信息的过程，（即按照应用目的，将影像中代表不同地物的像元区别开）也称为影像分类，信息提取</li>
</ul>
</li>
<li>目视解译：运用丰富的专业背景知识，通过肉眼观察，经过综合分析、逻辑推理、验证检查，把地物信息提取和解析出来的过程</li>
<li>目标地物特征
<ul>
<li>地物电磁波谱
<ul>
<li>地物对电磁波有吸收、反射、透射、发射等作用</li>
</ul>
</li>
<li>几何性状与空间结构特征</li>
<li>影像时间特征</li>
<li>地物波谱数据多尺度特征</li>
</ul>
</li>
<li>目视解译标志
<ul>
<li>直接解译标志
<ul>
<li>色调和色彩
<ul>
<li>同物异谱
<ul>
<li>同一物体或性质相同的物体在不同条件下具有不同的光谱反射率（如自身湿度不同，处于坡向不同），从而表现出不同的色调</li>
</ul>
</li>
<li>异物同谱
<ul>
<li>不同物体具有基本相同的反射光谱的物理现象</li>
</ul>
</li>
</ul>
</li>
<li>阴影
<ul>
<li>本影
<ul>
<li>地物本身未被阳光直接照射形成的阴影，如山体的背阴坡的暗区</li>
</ul>
</li>
<li>落影
<ul>
<li>地物背光方向上地物投落到地面的阴影，如云层的阴影，电线杆投射的阴影</li>
</ul>
</li>
</ul>
</li>
<li>位置和布局
<ul>
<li>位置：指目标地物分布的地点</li>
<li>相关布局：多个目标地物之间的空间配置关系</li>
</ul>
</li>
<li>纹理
<ul>
<li>地物影像轮廓内的色调变化频率，由许多细小地物色调组合成，是单一细部特征的集合</li>
</ul>
</li>
<li>大小
<ul>
<li>形状
<ul>
<li>图案</li>
</ul>
</li>
</ul>
</li>
</ul>
</li>
<li>间接解译标志
<ul>
<li>地形地貌
<ul>
<li>土壤土质
<ul>
<li>植被
<ul>
<li>气候
<ul>
<li>水系
<ul>
<li>人类活动</li>
</ul>
</li>
</ul>
</li>
</ul>
</li>
</ul>
</li>
</ul>
</li>
</ul>
</li>
</ul>
</li>
<li>影响地物特征及解译的因素
<ul>
<li>地物本身复杂性
<ul>
<li>同物异谱、同谱异物</li>
<li>种类不同，不同地物波谱受影响因素也不同</li>
</ul>
</li>
<li>传感器特性
<ul>
<li>空间分辨率、辐射分辨率、时间分辨率、光谱分辨率</li>
</ul>
</li>
<li>人为因素
<ul>
<li>主观因素（专业知识储备）与人眼分辨力</li>
</ul>
</li>
</ul>
</li>
<li>原则
<ul>
<li>要基于影像特征</li>
<li>遥感解译分类体系要基于影像解译的可能性</li>
<li>先图外、后图内、先整体、后局部</li>
<li>充分利用影像的信息特征和处理技术</li>
<li>多信息、多方法综合分析</li>
<li>室内解译与室外判读相结合</li>
<li>严格遵循目视解译程序</li>
</ul>
</li>
<li>基本步骤
<ul>
<li>准备工作
<ul>
<li>明确任务、收集资料</li>
</ul>
</li>
<li>初步解译与判读区的野外考察
<ul>
<li>建立目视解译标志</li>
<li>解译标志的验证</li>
</ul>
</li>
<li>室内判读
<ul>
<li>先图外、后图内、先整体、后局部</li>
</ul>
</li>
<li>野外验证与补判</li>
<li>成果整理
<ul>
<li>编绘成图、资料整理与文字总结</li>
</ul>
</li>
</ul>
</li>
</ul>
<h3>计算机分类后处理</h3>
<ul>
<li>去噪
<ul>
<li>平滑处理
<ul>
<li>边界修正</li>
</ul>
</li>
</ul>
</li>
<li>精度评价
<ul>
<li>概念
<ul>
<li>要进行评价的遥感分类图像</li>
<li>假设精确的参考图</li>
</ul>
</li>
<li>面积精度评价法
<ul>
<li>比较两幅图像上每种类别的数量差异，如面积、像元数目等表示分类精度</li>
</ul>
</li>
<li>位置精度评价法
<ul>
<li>比较两幅图像位置之间的一致性，一般以像元为单元</li>
<li>混淆矩阵(误差矩阵)</li>
<li>总体精度
<ul>
<li>分子:所有对角线元素的和；分母：总像元数</li>
<li>所有分类正确的像元占总像元数的比例</li>
<li>表示每一个随机样本的分类结果与真实类型相一致的概率</li>
</ul>
</li>
<li>制图精度
<ul>
<li>实际为第 j 类的像元中，被正确分类的比例。</li>
<li>对角线元素除以实测总和（行和）</li>
<li>表示从参考图像中任取一个样本，与分类结果图像同一位置类别一致的条件概率</li>
</ul>
</li>
<li>用户精度
<ul>
<li>被判为第 i 类的像元中，实际确属第 i 类的比例</li>
<li>对角线元素除以分类总和（列和）</li>
<li>表示从分类结果图像中任取一个样本，与参考图同一位置类别一致的条件概率</li>
</ul>
</li>
<li>Kappa系数
<ul>
<li>Kappa系数用于衡量分类结果与真实类别之间的一致性。不仅考虑到分类结果的正确率，还考虑了随机一致性（偶然正确）的影响。</li>
<li>undefined
<ul>
<li>k = 1
<ul>
<li>极好的一致性</li>
</ul>
</li>
<li>k = 0
<ul>
<li>一致性不比可能性（偶然性）更好</li>
</ul>
</li>
</ul>
</li>
</ul>
</li>
</ul>
</li>
</ul>
</li>
</ul>
<h3>计算机解译</h3>
<ul>
<li>计算机解译基础知识
<ul>
<li>遥感数字图像
<ul>
<li>定义
<ul>
<li>以数字形式表示的遥感影像，记录传感器探测目标地物时获取的地物反射、辐射的电磁波信息</li>
</ul>
</li>
<li>基本单位
<ul>
<li>像素（具有空间特征、属性特征）</li>
</ul>
</li>
<li>存储格式</li>
</ul>
</li>
<li>定义：遥感数字图像的计算机解译（计算机分类）以遥感数字图像为研究对象，在计算机系统支持下，综合运用地学分析、遥感图像处理、地理信息系统、模式识别与人工智能技术，实现地学专题信息的智能化获取</li>
<li>模式识别(模式分类)</li>
<li>对表征事物或现象的各种形式的信息
<ul>
<li>描述、辨认、分类和解释事物和现象</li>
</ul>
</li>
<li>光谱特征空间
<ul>
<li>光谱特征向量
<ul>
<li>同名地物在不同波段图像中亮度的观测值构成的多维随机向量</li>
</ul>
</li>
<li>为了度量图像中地物的光谱特征，建立一个以各波段图像的亮度分布为子空间的多维光谱特征空间</li>
<li>同种地物在相同的条件下，应具有相同的或相似的光谱特征和空间信息特征，即同类地物像元的特征向量将集群在同一特征空间区域</li>
</ul>
</li>
<li>特征提取
<ul>
<li>光谱特征提取
<ul>
<li>特征变换
<ul>
<li>将图像信息集中在少数几个特征图像上，使数据量减少
<ul>
<li>K-T变换、K-L变换等</li>
</ul>
</li>
</ul>
</li>
</ul>
</li>
<li>纹理特征提取
<ul>
<li>灰度共生矩阵法，空间自相关函数法等</li>
</ul>
</li>
<li>形状特征提取
<ul>
<li>基于边界的···，基于区域的···</li>
</ul>
</li>
</ul>
</li>
<li>特征选择
<ul>
<li>意义：在众多的分类特征中选择一组最佳的特征影像进行分类，去除冗余与噪声信息</li>
<li>策略
<ul>
<li>选择各类平均可分性最大的特征</li>
<li>选择最难分的类别具有的可分性最大的特征</li>
</ul>
</li>
<li>方法
<ul>
<li>单独选择法：根据每个特征所有类别的可分性，取最大的前m个特征</li>
<li>扩充最优特征子集：选择对所有类别可分性最大的特征，增加到特征子集，重新计算，逐步增加</li>
<li>选择对最难分的类做出贡献最大的特征子集：找出最难分的类，选择可分性最大特征，然后逐步扩充特征集</li>
<li>去掉对最难分的类做出贡献最小的特征子集：找出最难分的类，逐步去掉可分性最小特征</li>
</ul>
</li>
</ul>
</li>
</ul>
</li>
<li>计算机解译类别
<ul>
<li>监督分类
<ul>
<li>概念：根据已知训练区提供的样本，通过选择特征参数，求出特征参数作为决策规则，建立判别函数以对各待分类影像进行的图像分类，又称训练场地法</li>
<li>步骤
<ul>
<li>确定分类体系和感兴趣的类别数</li>
<li>特征变换和特征选择</li>
<li>选择训练样区
<ul>
<li>典型性和代表性</li>
<li>时间和空间上的一致</li>
<li>数量要满足训练要求</li>
<li>根据影像及地物特征确定训练样区的大小</li>
<li>位置要分布均匀且便于定位</li>
</ul>
</li>
<li>确定判决函数和判决规则</li>
<li>对非训练区的图像区域进行分类</li>
<li>分类效果评估</li>
</ul>
</li>
<li>方法
<ul>
<li>最小距离法
<ul>
<li>计算待分类像元到每一类别集群中心的距离，哪类离它最近该未知矢量就属于哪类</li>
<li>距离分类
<ul>
<li>欧式距离
<ul>
<li>曼哈顿距离
<ul>
<li>马氏距离</li>
</ul>
</li>
</ul>
</li>
</ul>
</li>
</ul>
</li>
<li>平行算法（盒式决策规则）、特征曲线窗口分类法</li>
<li>最大似然法
<ul>
<li>假设各类别在特征空间中服从正态分布，通过训练样本估计各类别的统计参数（均值、协方差矩阵等），再计算待分像元属于各类别的后验概率，最终将像元判定为后验概率最大的类别。</li>
</ul>
</li>
</ul>
</li>
</ul>
</li>
<li>非监督分类
<ul>
<li>概念：以不同影像地物在特征空间中类别特征的差别为依据的一种无先验（已知）类别标准的图像分类</li>
<li>方法
<ul>
<li>分级集群法、ISODATA聚类</li>
<li>K-均值聚类
<ul>
<li>聚类准则：使每一聚类中，多维样本点到该类别的中心的距离平方和最小</li>
<li>基本思想：通过迭代，逐次移动各类的中心，直到得到最好的聚类结果为止</li>
</ul>
</li>
</ul>
</li>
<li>步骤
<ul>
<li>确定分类数量
<ul>
<li>选择集群类别中心(随机选择)
<ul>
<li>类别中心的处理
<ul>
<li>像元初始归类
<ul>
<li>重分类</li>
</ul>
</li>
</ul>
</li>
</ul>
</li>
</ul>
</li>
</ul>
</li>
</ul>
</li>
<li>区别
<ul>
<li>根本区别：是否利用训练样区来获取先验的类别知识</li>
<li>非监督分类不受类别先验知识的影响，因此分类所得到的每一类别究竟代表什么实际地物仍然不清楚。要确定类别与实际地物的关系还需进行归纳分析，抽样，实地辨认。</li>
<li>选择标准
<ul>
<li>当光谱特征类能够和唯一的地物类型相对应
<ul>
<li>非监督分类</li>
</ul>
</li>
<li>当两个地物类型对应的光谱特征类差异很小时
<ul>
<li>监督分类</li>
</ul>
</li>
</ul>
</li>
</ul>
</li>
<li>影响遥感图像分类的主要因素
<ul>
<li>未充分利用遥感图像提供的多种信息
<ul>
<li>如计算机解译缺少空间信息、地物形状等</li>
</ul>
</li>
<li>提高遥感图像分类精度受到限制
<ul>
<li>大气状况的影响
<ul>
<li>吸收与散射会改变传感器接收到的能量；不同成像时段、季节或天气条件下，大气成分差异显著</li>
</ul>
</li>
<li>下垫面的影响
<ul>
<li>地表覆盖类型差异大,混合像元；地形起伏影响入射角与反射角</li>
</ul>
</li>
</ul>
</li>
</ul>
</li>
</ul>
</li>
</ul>
<h2>遥感影像及其特征</h2>
<h3>航空摄影及其影像特征</h3>
<ul>
<li>定义
<ul>
<li>将传感器安装在飞机上，按照一定的要求对目标物体摄影，获取影像的过程</li>
</ul>
</li>
<li>类型
<ul>
<li>垂直摄影（像元倾斜角&lt;3°）</li>
<li>倾斜摄影（像元倾斜角&gt;3°）</li>
</ul>
</li>
<li>几何特征
<ul>
<li>中心投影
<ul>
<li>投影距离</li>
<li>投影幕倾斜</li>
<li>地形起伏</li>
</ul>
</li>
<li>特征点线
<ul>
<li>在水平像片上，像主点、像底点和等角点重合，主横线和等比线重合</li>
<li>像主点o，像底点n，等角点c，主纵线vv，主横线hoho，等比线hchc，主合线hihi</li>
</ul>
</li>
<li>像点位移
<ul>
<li>地形的起伏和投影面的倾斜会引起像片上像点位置的变化</li>
<li>像片倾斜
<ul>
<li>倾斜误差
<ul>
<li>倾斜误差的方向在像点与等角点的连线上</li>
<li>倾斜误差的大小与像片倾斜角成正比</li>
<li>倾斜误差的大小与像点距等角点距离的平方成正比，与摄影机的焦距成反比</li>
</ul>
</li>
</ul>
</li>
<li>地形起伏
<ul>
<li>投影误差
<ul>
<li>投影误差的大小与像点距像主点的距离成正比</li>
<li>投影误差与航高成反比</li>
<li>投影误差与高差成正比</li>
</ul>
</li>
</ul>
</li>
</ul>
</li>
<li>比例尺
<ul>
<li>航空像片上某一线段长度与地面相应线段长度之比</li>
<li>水平像片的比例尺
<ul>
<li>当地面平坦而水平，像片的比例尺各处相等
<ul>
<li>像片主比例尺=镜头焦距/航高</li>
</ul>
</li>
<li>当地面地形起伏较大，像片的比例尺各处不相等</li>
</ul>
</li>
<li>倾斜像片的比例尺
<ul>
<li>等比线将像片分成两部分：包含像主点部分，比例尺小；包含像底点部分，比例尺大
<ul>
<li>主小底大</li>
</ul>
</li>
<li>同一条像水平线上比例尺一致，等比线上的比例尺等于同一航高水平像片的比例尺</li>
<li>同一像点纵向和横向比例尺不同</li>
<li>比例尺的变化与像片倾角成正比，倾角越大，比例尺变化越剧烈</li>
</ul>
</li>
</ul>
</li>
</ul>
</li>
</ul>
<h3>对地卫星及其影像特征</h3>
<ul>
<li>陆地卫星
<ul>
<li>轨道特征
<ul>
<li>中等高度卫星：轨道高度为700-900km</li>
<li>近圆形轨道
<ul>
<li>使卫星在不同地区获取的影像比例尺基本一致，保证地物尺度在空间上可比</li>
<li>卫星速度接近匀速
<ul>
<li>便于扫描仪用固定频率对地面扫描成像</li>
<li>避免扫描行之间出现重叠或空隙</li>
</ul>
</li>
</ul>
</li>
<li>近极地轨道
<ul>
<li>与赤道基本垂直，实现全球覆盖观测，便于大范围研究。</li>
</ul>
</li>
<li>太阳同步轨道
<ul>
<li>地方时一致
<ul>
<li>卫星在同一纬度、不同经度穿过时保持相同地方时，利于长期对比分析</li>
</ul>
</li>
<li>光照条件一致
<ul>
<li>避免不同太阳高度角导致的阴影与亮度变化，便于多时相影像比较</li>
</ul>
</li>
<li>能源稳定
<ul>
<li>太阳电池板能获得稳定照度，保障卫星持续供电</li>
</ul>
</li>
</ul>
</li>
<li>可重复轨道（准回归轨道）
<ul>
<li>轨道参数与规律
<ul>
<li>陆地卫星在近极地太阳同步轨道上运行，绕地球一圈约需99–103分钟（轨道周期）。</li>
</ul>
</li>
<li>轨道重复使得卫星能够在固定间隔时间观测同一地区，有利于对地表进行动态监测和时间序列分析等长期研究</li>
<li>重复周期
<ul>
<li>定义：卫星轨道回归到同一空间位置的时间间隔</li>
<li>Landsat 8 每16天重复覆盖一次同一地区</li>
</ul>
</li>
</ul>
</li>
</ul>
</li>
<li>Landsat
<ul>
<li>传感器
<ul>
<li>多光谱扫描仪MSS</li>
<li>专题制图仪TM
<ul>
<li>TM1蓝光波段
<ul>
<li>对水体的穿透力强，且是叶绿素吸收波段</li>
</ul>
</li>
<li>TM2绿光波段
<ul>
<li>健康植物的绿色反射峰值区域，“绿峰”评价植物活力</li>
</ul>
</li>
<li>TM3红光波段
<ul>
<li>叶绿素主要吸收波段</li>
</ul>
</li>
<li>TM4近红外光波段
<ul>
<li>该波段细胞结构成反射率主要影响因素，对绿色植物类别差异最敏感</li>
</ul>
</li>
<li>TM5近红外光波段（短波红外波段）
<ul>
<li>水的吸收带</li>
</ul>
</li>
<li>TM6热红外波段
<ul>
<li>记录来自地物表面发射的热辐射能力</li>
</ul>
</li>
<li>TM7近红外光波段（短波红外波段）
<ul>
<li>水的强吸收带，地质学研究</li>
</ul>
</li>
</ul>
</li>
<li>增强型专题成像传感器ETM+
<ul>
<li>PAN波段
<ul>
<li>分辨率为15m，用于增强分辨率</li>
</ul>
</li>
<li>辐射定标误差率提高了一倍</li>
<li>TM6热红外波段分辨率由120m提高到了60m</li>
</ul>
</li>
<li>陆地成像仪OLI和热红外传感器TIRS</li>
</ul>
</li>
</ul>
</li>
<li>SPOT系列
<ul>
<li>以法国为主，联合比利时、瑞典等欧共体</li>
</ul>
</li>
<li>高空间分辨率陆地卫星
<ul>
<li>空间分辨率≤10m的对地观测卫星
<ul>
<li>IKONOS卫星：商业亚米级遥感的 开创者（1m分辨率）</li>
</ul>
</li>
</ul>
</li>
</ul>
</li>
<li>气象卫星
<ul>
<li>地球静止轨道气象卫星GMS</li>
<li>太阳同步轨道（极地轨道）气象卫星POMS</li>
</ul>
</li>
<li>海洋卫星
<ul>
<li>海洋水色卫星
<ul>
<li>海洋水色要素，如叶绿素浓度、悬浮泥沙、溶解有机物（黄色物质）、海表温度等</li>
</ul>
</li>
<li>海洋地形卫星
<ul>
<li>海平面高度、海面地形起伏、波高、海流及海面风速</li>
</ul>
</li>
<li>海洋动力环境卫星
<ul>
<li>海面风场、浪场、流场及能量交换特征</li>
</ul>
</li>
</ul>
</li>
</ul>
<h2>遥感物理基础</h2>
<h3>电磁波谱与太阳辐射</h3>
<ul>
<li>电磁波
<ul>
<li>由相振荡且相互垂直的电场与磁场在空间中以波的形式传播能量与动量的过程称为电磁波，也称为电磁辐射</li>
<li>性质
<ul>
<li>电磁波是横波</li>
<li>在真空中以光速传播</li>
<li>波粒二象性</li>
<li>c = f · λ （频率为f、波长为λ）</li>
</ul>
</li>
<li>电磁波谱
<ul>
<li>将各种电磁波按照其在真空中传播波长的长短或频率的大小递增或递减的顺序依次排列</li>
</ul>
</li>
</ul>
</li>
<li>常用波段及特性
<ul>
<li>紫外线（0.01-0.38um）
<ul>
<li>用途
<ul>
<li>探测臭氧、碳酸盐岩分布与检测油污</li>
</ul>
</li>
<li>缺陷
<ul>
<li>大气层中的臭氧对其有强烈吸收与散射作用</li>
<li>大多数地物在该波段反射较小</li>
</ul>
</li>
</ul>
</li>
<li>可见光（0.38-0.76μm）
<ul>
<li>人眼可见，反映地物颜色、形态</li>
<li>优点
<ul>
<li>大部分地物具有良好的亮度反差特性，易于区分</li>
</ul>
</li>
</ul>
</li>
<li>红外线（0.76-1000um）
<ul>
<li>近红外（0.7-3μm）
<ul>
<li>植被反射强，用于植被监测
<ul>
<li>主要源于太阳辐射</li>
</ul>
</li>
</ul>
</li>
<li>热红外（8-14μm）
<ul>
<li>包括
<ul>
<li>中红外</li>
<li>远红外</li>
<li>超远红外</li>
</ul>
</li>
<li>用途
<ul>
<li>反映地物热辐射，用于温度反演，如城市热岛效应与水体热污染研究</li>
</ul>
</li>
<li>优点
<ul>
<li>昼夜工作</li>
</ul>
</li>
</ul>
</li>
</ul>
</li>
<li>微波（1mm-1m）
<ul>
<li>优点
<ul>
<li>微波是主动式遥感，受大气层中云、雾的散射影响小，对云层、地表植被等穿透性好，不受光照等条件限制，能全天候全天时工作</li>
</ul>
</li>
</ul>
</li>
</ul>
</li>
<li>电磁辐射的度量
<ul>
<li>辐射能量
<ul>
<li>电磁辐射能量的度量W</li>
</ul>
</li>
<li>辐射通量
<ul>
<li>单位时间内通过的辐射能量Φ</li>
</ul>
</li>
<li>辐射通量密度
<ul>
<li>单位时间内通过单位面积的辐射能量E</li>
<li>分类
<ul>
<li>辐照度I（被辐射物体）</li>
<li>辐射出射度M（辐射源物体）</li>
</ul>
</li>
</ul>
</li>
<li>辐射亮度L</li>
</ul>
</li>
<li>电磁辐射源
<ul>
<li>太阳辐射
<ul>
<li>用途
<ul>
<li>被动遥感最重要的辐射源，主要利用可见光与近红外波段</li>
</ul>
</li>
<li>太阳常数：不受大气影响，在距太阳一个天文单位内，在垂直于太阳辐射方向，单位时间内，单位面积黑体接收到的太阳辐射辐照度总量的大小为I=1.36X103W/m²</li>
<li>太阳光谱与5777K的黑体辐射特征基本一致，大部分能量集中在可见光和近红外波段</li>
</ul>
</li>
<li>地球辐射
<ul>
<li>主要指地球自身的热辐射，是热红外遥感的主要辐射源，接近300K的黑体辐射</li>
</ul>
</li>
<li>人工辐射源
<ul>
<li>主动式遥感采用人工辐射源
<ul>
<li>微波雷达
<ul>
<li>海洋遥感及多云多雨地区</li>
</ul>
</li>
<li>激光雷达
<ul>
<li>测定卫星的速度等、测量地形</li>
</ul>
</li>
</ul>
</li>
</ul>
</li>
<li>太阳辐射与地球辐射的关系
<ul>
<li>0.3～2.5μm（可见光和近红外波段）
<ul>
<li>地表以反射太阳辐射为主
<ul>
<li>只能白天探测</li>
</ul>
</li>
</ul>
</li>
<li>2.5～6.0μm（中红外波段）
<ul>
<li>均为被动遥感的辐射源。
<ul>
<li>夜间探测排除太阳辐射</li>
</ul>
</li>
</ul>
</li>
<li>6.0μm以上(热红外波段)
<ul>
<li>以地球自身的热辐射为主
<ul>
<li>全天候探测--地热状态</li>
</ul>
</li>
</ul>
</li>
</ul>
</li>
</ul>
</li>
</ul>
<h3>物体的发射辐射特征（自身辐射）</h3>
<ul>
<li>黑体辐射(黑体的热辐射)
<ul>
<li>绝对黑体：任何温度，对任何波长的电磁辐射都全部吸收，而没有任何反射的理想物理（吸收率α(λ,T)=1，反射率ρ(λ,T)=0）</li>
<li>黑体辐射规律
<ul>
<li>普朗克定律：黑体的辐射出射度M是波长λ和温度T的函数</li>
<li>斯蒂芬-玻尔兹曼定律
<ul>
<li>𝑀 = 𝜎 · 𝑇⁴（𝜎为常数）</li>
<li>黑体总辐射出射度与温度的四次方成正比</li>
</ul>
</li>
<li>维恩位移定律
<ul>
<li>𝜆max ⋅ 𝑇 = 𝑏（𝑏为常数）</li>
<li>辐射最大值对应的峰值波长与黑体的温度成反比</li>
</ul>
</li>
</ul>
</li>
<li>不同温度黑体在不同波长的辐射出射度曲线</li>
<li>一般情况下，太阳与地球以及其它恒星都是绝对黑体，则可以用与这些天体相同大小以及同样辐射出射度的黑体温度作为其有效温度。</li>
</ul>
</li>
<li>实际物体的发射辐射
<ul>
<li>发射率(比辐射率)
<ul>
<li>𝜀 = 𝑀/𝑀黑</li>
</ul>
</li>
<li>基尔霍夫定律
<ul>
<li>𝑀/𝛼 = 𝑀黑</li>
</ul>
</li>
<li>地物的热辐射强度与温度的四次方成以及发射率成正比</li>
<li>地物的发射波谱特征
<ul>
<li>同一地物，表面粗糙或颜色较深时，发射率较高</li>
<li>比热大，尤其是具有保温作用的地物，发射率较高</li>
</ul>
</li>
</ul>
</li>
</ul>
<h3>物体的反射辐射特征</h3>
<ul>
<li>地物波谱特性的测定
<ul>
<li>能量分配公式P0​=Pρ​+Pα​+Pτ​
<ul>
<li>P0为入射总能量，Pρ为反射能量，Pα为吸收能量，Pτ为透射能量​</li>
</ul>
</li>
<li>1 =ρ + α + τ
<ul>
<li>ρ为反射率；α为吸收率，τ为透射率</li>
</ul>
</li>
<li>PS：不透明物体没有透射1 =ρ + α =ρ + 𝜀</li>
<li>地物波谱特性通常都是用地物反射辐射电磁波来描述</li>
</ul>
</li>
<li>地物的反射率与反射波谱
<ul>
<li>反射率
<ul>
<li>定义
<ul>
<li>地物对某一波段的反射能量与入射能量之比</li>
<li>undefined</li>
</ul>
</li>
<li>反射率大的物体，遥感传感器接收到的能量越大，呈现在影像上色调越浅</li>
<li>反射类型
<ul>
<li>镜面反射</li>
<li>漫反射</li>
<li>实际物体反射</li>
</ul>
</li>
</ul>
</li>
<li>反射波谱
<ul>
<li>反射波谱
<ul>
<li>地物的反射率随波长变化而变化的规律</li>
</ul>
</li>
<li>以波长为横坐标，以反射率为纵坐标，将所有测量得到的地物在每一个波长处的反射率连接起来得到的曲线，称为地物的反射波谱曲线</li>
</ul>
</li>
</ul>
</li>
<li>典型地物的反射波谱特性
<ul>
<li>植物
<ul>
<li>波谱特征
<ul>
<li>undefined</li>
<li>红光(0.65um)和蓝光(0.45um)波段两个吸收谷 （被叶绿素吸收进行光合作用）</li>
<li>绿光波段(0.55um)有个小反射峰(视觉上为绿色)</li>
<li>近红外波段(0.75-1.35um)有一个反射峰（植被中的多孔薄壁细胞组织对近红外波段有较强反射作用）</li>
<li>中红外波段三个吸收谷1.45um 1.95um和2.7um(水分的吸收带)</li>
</ul>
</li>
<li>影响因素
<ul>
<li>植物类型</li>
<li>生长季节
<ul>
<li>监测长势与物候变化</li>
</ul>
</li>
<li>含水量越高，反射率越低
<ul>
<li>干旱预警与灌溉指导</li>
</ul>
</li>
<li>病虫害
<ul>
<li>病虫害早期预警</li>
</ul>
</li>
</ul>
</li>
</ul>
</li>
<li>土壤
<ul>
<li>波谱特征
<ul>
<li>undefined</li>
<li>自然状态下土壤表面的反射曲线比较平滑，没有明显的反射峰和吸收谷</li>
</ul>
</li>
<li>影响因素
<ul>
<li>土壤类别
<ul>
<li>土质越细，反射率越高</li>
</ul>
</li>
<li>成土矿物
<ul>
<li>识别矿物组成</li>
</ul>
</li>
<li>有机质含量
<ul>
<li>估算土壤肥力</li>
</ul>
</li>
<li>含水量
<ul>
<li>干旱预警与灌溉指导</li>
</ul>
</li>
</ul>
</li>
</ul>
</li>
<li>水体
<ul>
<li>波谱特征
<ul>
<li>undefined</li>
<li>水体的反射率较低，小于10%，在蓝光波段反射率最高。</li>
<li>随着波长的增加，反射率下降。</li>
<li>纯净水在近红外波段反射率为零</li>
</ul>
</li>
<li>影响因素
<ul>
<li>浑浊度
<ul>
<li>水中含有泥沙，在可见光波段的反射率会增加，峰值出现在黄红区</li>
</ul>
</li>
<li>叶绿素含量
<ul>
<li>水中含有水生植物叶绿素时，<br>
近红外波段反射率明显抬高</li>
</ul>
</li>
<li>有机物质含量</li>
</ul>
</li>
</ul>
</li>
<li>岩石
<ul>
<li>外部环境和表面特征如颗粒大小只会导致反射率变化，谱带位置、宽度和吸收特征一般较稳定</li>
</ul>
</li>
<li>道路
<ul>
<li>水泥路反射率最高（色调浅），沥青路反射率最低</li>
</ul>
</li>
</ul>
</li>
</ul>
<h3>大气对太阳辐射的影响</h3>
<ul>
<li>大气结构与大气成分
<ul>
<li>大气结构
<ul>
<li>外层大气（&gt;1000km）
<ul>
<li>温度1000℃以上，对卫星基本无影响</li>
</ul>
</li>
<li>电离层（80-1000km）
<ul>
<li>温度高达600-800℃，空气稀薄
<ul>
<li>无线电波在电离层发生全反射</li>
</ul>
</li>
</ul>
</li>
<li>平流层（12-80km）
<ul>
<li>温度随高度增加而上升
<ul>
<li>臭氧层吸收紫外线，保护生物</li>
</ul>
</li>
</ul>
</li>
<li>对流层（7-12km）
<ul>
<li>温度随高度增加而下降
<ul>
<li>天气变化最复杂的层，水汽和云层影响太阳辐射透过性</li>
</ul>
</li>
</ul>
</li>
</ul>
</li>
<li>大气成分
<ul>
<li>气体分子
<ul>
<li>N2和O2占99%，其他微量气体(二氧化碳、甲烷、臭氧、水汽等)</li>
</ul>
</li>
<li>固态、液态悬浮微粒
<ul>
<li>霾，尘埃，液态水和固态水及气溶胶</li>
</ul>
</li>
</ul>
</li>
</ul>
</li>
<li>大气散射
<ul>
<li>作用
<ul>
<li>太阳辐射在传播过程中遇到小微粒而使传播方向改变，并向各个方向散开</li>
</ul>
</li>
<li>分类
<ul>
<li>瑞利散射
<ul>
<li>条件
<ul>
<li>d&lt;&lt;λ</li>
</ul>
</li>
<li>主要颗粒
<ul>
<li>原子与分子
<ul>
<li>又称分子散射</li>
</ul>
</li>
</ul>
</li>
<li>结论
<ul>
<li>（1）散射率(散射强度)与波长的四次方成反比</li>
<li>（2）瑞利散射对可见光的影响较大，当电磁波波长&gt;1um时，对红外辐射的影响很小</li>
</ul>
</li>
<li>场景
<ul>
<li>蓝天：短波蓝光散射率大，散射强度更强，布满天空</li>
<li>夕阳红：太阳斜射，辐射路径长，短波被散射殆尽，橙红色长波剩余</li>
<li>微波波长较长，即使是小水滴也只能形成瑞利散射，因此具有极强的穿透云层的能力</li>
</ul>
</li>
</ul>
</li>
<li>米氏散射
<ul>
<li>条件
<ul>
<li>d≈λ</li>
</ul>
</li>
<li>主要颗粒
<ul>
<li>烟、尘埃以及气溶胶</li>
</ul>
</li>
<li>结论
<ul>
<li>（1）散射率(散射强度)与波长的二次方成反比</li>
<li>（2）米氏散射对红外线的影响不容忽视</li>
</ul>
</li>
</ul>
</li>
<li>非选择性散射
<ul>
<li>条件
<ul>
<li>d&gt;&gt;λ</li>
</ul>
</li>
<li>主要颗粒
<ul>
<li>小水珠、大颗粒尘埃</li>
</ul>
</li>
<li>结论
<ul>
<li>散射强度与电磁波的波长无关</li>
</ul>
</li>
<li>场景
<ul>
<li>白色云雾：所有颜色的可见光大致等量散射，组合呈白色</li>
</ul>
</li>
</ul>
</li>
</ul>
</li>
</ul>
</li>
<li>大气吸收
<ul>
<li>太阳辐射中的绝大部分紫外线被O2与O3吸收</li>
<li>CO2和水主要吸收红外区域（水是大气中最重要的吸收介质）</li>
</ul>
</li>
<li>大气反射
<ul>
<li>在较低较厚的云层状态下，光学遥感传感器几乎接收不到任何实际地物信息
<ul>
<li>解决方案：选择无云天气</li>
</ul>
</li>
</ul>
</li>
<li>大气窗口（大气透射）
<ul>
<li>定义
<ul>
<li>电磁波通过大气层时较少被反射，吸收和散射的，透射率较高的波段</li>
<li>对地遥感所用的部分</li>
</ul>
</li>
<li>常用波段
<ul>
<li>紫外、可见光与近红外波段（0.3-1.3um）
<ul>
<li>遥感成像的最佳波段</li>
<li>成像方式
<ul>
<li>摄影</li>
<li>扫描</li>
</ul>
</li>
</ul>
</li>
<li>近红外与近-中红外波段（1.5-1.8um、2-3.5um）
<ul>
<li>白天日照条件好时探测植物含水量、云雪分布与地质制图</li>
<li>成像方式
<ul>
<li>光谱仪</li>
<li>扫描仪</li>
</ul>
</li>
</ul>
</li>
<li>中红外波段（3.5-5.5um）
<ul>
<li>混合光谱范围
<ul>
<li>仅能扫描方式成像</li>
</ul>
</li>
</ul>
</li>
<li>远红外波段（8-14um）
<ul>
<li>热辐射光谱
<ul>
<li>夜间成像，测量目标温度</li>
</ul>
</li>
</ul>
</li>
<li>微波波段（0.8-25cm）
<ul>
<li>发射光谱范围
<ul>
<li>全天候，主动遥感</li>
</ul>
</li>
</ul>
</li>
</ul>
</li>
</ul>
</li>
</ul>
<h3>微波遥感</h3>
<ul>
<li>微波的电磁波谱特性
<ul>
<li>微波的散射
<ul>
<li>面散射
<ul>
<li>镜面散射
<ul>
<li>介电常数大散射系数强。如水比土壤介电常数大，散射信号强</li>
</ul>
</li>
<li>粗糙表面散射
<ul>
<li>表面越粗糙，后向散射信号越强</li>
</ul>
</li>
</ul>
</li>
<li>体散射
<ul>
<li>在介质内部产生的散射</li>
</ul>
</li>
<li>强散射</li>
</ul>
</li>
<li>微波的辐射
<ul>
<li>地物低温状态下的重要辐射特性</li>
</ul>
</li>
</ul>
</li>
<li>微波遥感的特点
<ul>
<li>微波能穿透云雾、雨雪，具有全天候、全天时工作能力</li>
<li>微波对地物具有一定的穿透能力</li>
<li>微波对地物具有特殊的波谱特征</li>
<li>雷达遥感图像中包含相位信息和极化信息，可获取高程信息</li>
<li>微波能提供不同于可见光和红外遥感所能提供的信息</li>
</ul>
</li>
<li>缺陷
<ul>
<li>（1）空间分辨率低，地物判读困难（2）图像噪声消除困难</li>
</ul>
</li>
<li>微波遥感方式
<ul>
<li>主动式
<ul>
<li>主动向地面发射微波脉冲，然后接收其回波信号</li>
<li>传感器
<ul>
<li>成像雷达 、微波散射计、微波高度计</li>
</ul>
</li>
</ul>
</li>
<li>被动式
<ul>
<li>只接收地物自身发射的微弱微波辐射能量</li>
<li>传感器
<ul>
<li>微波辐射计
<ul>
<li>海面温度、海冰分布、土壤湿度、大气水汽含量监测</li>
</ul>
</li>
</ul>
</li>
</ul>
</li>
</ul>
</li>
<li>成像雷达
<ul>
<li>真实孔径雷达（侧视雷达）
<ul>
<li>工作原理
<ul>
<li>分辨率完全依赖于雷达天线的实际物理尺寸</li>
</ul>
</li>
<li>斜距投影
<ul>
<li>雷达接收的回波图像以斜距为横轴来绘制</li>
</ul>
</li>
<li>距离分辨率
<ul>
<li>在雷达脉冲发射的方向上，能分辨的两个目标之间的最小距离</li>
<li>两个维度
<ul>
<li>脉冲持续时间越小,距离分辨率越小,分辨能力越强</li>
<li>入射角越大,距离分辨率越小,分辨能力越强</li>
</ul>
</li>
</ul>
</li>
<li>方位分辨率
<ul>
<li>在雷达飞行方向上能分辨的两点之间的最小距离</li>
<li>影响因素
<ul>
<li>波速宽度越小，方位分辨率越小，分辨能力越强</li>
</ul>
</li>
</ul>
</li>
</ul>
</li>
<li>合成孔径雷达(SAR)
<ul>
<li>传统痛点
<ul>
<li>真实孔径雷达的分辨率受限于天线物理尺寸的大小，在卫星上难以做出足够大的天线来获得高分辨率</li>
</ul>
</li>
<li>核心思想
<ul>
<li>SAR通过平台运动，在目标经过波束照射的时间里，收集大量带有不同“方位角信息”的回波，用相干处理把这些回波“合成”，就像拼接出了一根超长的虚拟天线。</li>
</ul>
</li>
<li>方位分辨率
<ul>
<li>SAR的方位分辨率与距离无关，只与天线的孔径D有关，孔径D越小，方位分辨率值越小，分辨能力越强。</li>
</ul>
</li>
</ul>
</li>
</ul>
</li>
</ul>
<h2>基础理论</h2>
<h3>定义与本质</h3>
<ul>
<li>定义
<ul>
<li>广义遥感：非接触式远距离探测</li>
<li>狭义遥感：（1）电磁辐射信息（2）地面物体</li>
</ul>
</li>
<li>本质：电磁波的发射、传输、接收与解析</li>
</ul>
<h3>分类体系</h3>
<ul>
<li>按遥感平台
<ul>
<li>地面遥感
<ul>
<li>三脚架</li>
</ul>
</li>
<li>航空遥感
<ul>
<li>飞机/气球</li>
</ul>
</li>
<li>航天遥感
<ul>
<li>卫星/飞船</li>
</ul>
</li>
<li>航宇遥感
<ul>
<li>星际飞船</li>
</ul>
</li>
</ul>
</li>
<li>按电磁波谱
<ul>
<li>紫外遥感（0.05-0.38um）</li>
<li>可见光遥感（0.38-0.76um）</li>
<li>红外遥感（0.76-1000um）
<ul>
<li>近红外</li>
<li>中红外</li>
<li>热红外</li>
</ul>
</li>
<li>微波遥感（1mm-1m）
<ul>
<li>主动</li>
<li>被动</li>
</ul>
</li>
<li>多波段遥感：多个光谱区间</li>
</ul>
</li>
<li>按传感器工作方式
<ul>
<li>主动遥感：传感器主动发射电磁能量并接受目标地物的后向散射信号（雷达、激光雷达）</li>
<li>被动遥感：传感器仅被动接受目标地物自身辐射和反射能量（依赖太阳/地物辐射）</li>
</ul>
</li>
<li>按数据显示形式
<ul>
<li>成像遥感：传感器接受的目标电磁辐射信号可以转化为图像</li>
<li>非成像遥感
<ul>
<li>光谱辐射计、散射计和高度计等</li>
</ul>
</li>
</ul>
</li>
<li>按波段宽度和波谱连续性
<ul>
<li>高光谱遥感：利用很多狭窄的电磁波波段（波段宽度&lt;10nm）产生光谱连续的图像</li>
<li>常规遥感（宽波段遥感）：波段宽度&gt;100nm</li>
</ul>
</li>
<li>按应用场景</li>
</ul>
<h3>遥感的优点</h3>
<ul>
<li>空间覆盖范围广阔，有利于同步观测，不受地形影响</li>
<li>光谱覆盖范围广，信息量大，可实现全天候全天时探测</li>
<li>时效性强，具有动态和连续监测能力</li>
</ul>
<h3>遥感的趋势</h3>
<ul>
<li>高空间分辨率</li>
<li>高光谱分辨率</li>
<li>高时间分辨率</li>
</ul>
<h3>遥感过程</h3>
<ul>
<li>信息应用
<ul>
<li>信息处理
<ul>
<li>信息接收与转储
<ul>
<li>信息收集</li>
</ul>
</li>
</ul>
</li>
</ul>
</li>
</ul>
<h3>遥感技术系统</h3>
<ul>
<li>（1）遥感平台系统</li>
<li>（2）传感器系统</li>
<li>（3）数据接收记录和处理系统
<ul>
<li>地面接收站</li>
<li>地面处理站</li>
</ul>
</li>
<li>（4）基础研究和应用系统</li>
</ul>
<h2>补充知识点</h2>
<h3>遥感应用流程</h3>
<ul>
<li>1.问题分析与遥感信息源选择</li>
<li>2.遥感图像处理
<ul>
<li>几何校正、参考数据获取、特征提取与选择、信息提取等</li>
</ul>
</li>
<li>3.数据统计分析与模型建立</li>
<li>4.结果解释表达与应用</li>
</ul>
<h3>扫描性传感器</h3>
<ul>
<li>光机扫描仪
<ul>
<li>原理
<ul>
<li>借助传感器本身沿着垂直于遥感平台飞行方向进行横向扫描，获取地面条带图像。</li>
</ul>
</li>
<li>代表
<ul>
<li>Landsat卫星的MSS、TM和ETM+传感器</li>
</ul>
</li>
</ul>
</li>
<li>
<pre><code>推帚式扫描仪(CCD固体扫描仪)
</code></pre>
<ul>
<li>原理
<ul>
<li>将固体光电转换元件（CCD）排成一排作为探测器的扫描仪</li>
</ul>
</li>
<li>立体成像
<ul>
<li>同轨立体观测
<ul>
<li>在同一平台上安装前视、正视、后视三个或多个线性阵列传感器。在一次飞越过程中，从不同角度对同一地物成像，直接获取立体像对。</li>
</ul>
</li>
<li>异轨立体观测
<ul>
<li>传感器具备侧摆能力。在相邻的两个不同轨道上，通过调整传感器的指向，对同一区域进行两次成像，形成立体像对。</li>
</ul>
</li>
</ul>
</li>
<li>特点
<ul>
<li>无扫描机械运动部件
<ul>
<li>重量轻，几何关系稳定，可靠性高</li>
</ul>
</li>
<li>驻留时间长
<ul>
<li>探测器观测时间长，信噪比高，辐射分辨率得以提高</li>
</ul>
</li>
<li>灵敏度高</li>
</ul>
</li>
</ul>
</li>
<li>成像光谱仪</li>
</ul>
]]></content>
    <category term="后端"/>
    <published>2022-01-01T00:00:00.000Z</published>
  </entry>
  <entry>
    <title type="text">栅格计算器</title>
    <id>https://giser.date/ArcGIS_Pro/raster/raster_calculator.html</id>
    <link href="https://giser.date/ArcGIS_Pro/raster/raster_calculator.html"/>
    <updated>2025-10-25T15:01:53.000Z</updated>
    <summary type="html"><![CDATA[
<h2>一、运算符概述</h2>
<p>三种运算符，分别是：</p>
<ol>
<li><strong>算术运算符</strong>：包含 <code>+</code>、<code>-</code>、<code>*</code>、<code>/</code>。</li>
<li><strong>比较运算符</strong>：有 <code>&gt;</code>、<code>&lt;</code>、<code>&lt;=</code>、<code>&gt;=</code>、<code>!=</code>。</li>
<li><strong>逻辑运算符</strong>：<code>&amp;</code>（与）、<code>|</code>（或）、<code>~</code>（非）。</li>
</ol>]]></summary>
    <content type="html"><![CDATA[
<h2>一、运算符概述</h2>
<p>三种运算符，分别是：</p>
<ol>
<li><strong>算术运算符</strong>：包含 <code>+</code>、<code>-</code>、<code>*</code>、<code>/</code>。</li>
<li><strong>比较运算符</strong>：有 <code>&gt;</code>、<code>&lt;</code>、<code>&lt;=</code>、<code>&gt;=</code>、<code>!=</code>。</li>
<li><strong>逻辑运算符</strong>：<code>&amp;</code>（与）、<code>|</code>（或）、<code>~</code>（非）。</li>
</ol>
<h2>二、函数分类介绍</h2>
<h3>（一）条件分析函数</h3>
<p>| 函数 | 参数 | 用途 | 示例 |<br>
|</p>
]]></content>
    <category term="指南"/>
    <published>2025-10-25T15:01:53.000Z</published>
  </entry>
  <entry>
    <title type="text">网络分析</title>
    <id>https://giser.date/ArcGIS_Pro/vector/network.html</id>
    <link href="https://giser.date/ArcGIS_Pro/vector/network.html"/>
    <updated>2026-09-07T08:31:55.000Z</updated>
    <summary type="html"><![CDATA[<figure><figcaption>网络数据集</figcaption></figure>
]]></summary>
    <content type="html"><![CDATA[<figure><figcaption>网络数据集</figcaption></figure>
]]></content>
    <category term="指南"/>
    <published>2025-10-25T15:01:53.000Z</published>
  </entry>
  <entry>
    <title type="text">湖泊生态预警管理系统</title>
    <id>https://giser.date/projectAction/hpstyj.html</id>
    <link href="https://giser.date/projectAction/hpstyj.html"/>
    <updated>2026-09-07T08:31:55.000Z</updated>
    <summary type="html"><![CDATA[
<p>该系统融合物联网、WebGIS 及人工智能技术。采用 B/S 架构，前后端分离，以 Spring Boot 和 Vue 为核心框架，用 MySQL 存储属性数据、PostgreSQL（PostGIS 扩展）存储空间数据。功能上，实现湖泊信息实时管理与可视化（高德地图、AntV L7、ECharts），通过 EW-TOPSIS 法综合评价湖泊健康，基于 LSTM 模型预测健康状况并动态预警，集成 DeepSeek 模型提供专业解答，支持公众举报“四乱”现象，旨在实现湖泊健康监测、评价、预警及公众参与治理<br>
</p>
<figure><figcaption>生态预警管理可视化大屏</figcaption></figure>]]></summary>
    <content type="html"><![CDATA[
<p>该系统融合物联网、WebGIS 及人工智能技术。采用 B/S 架构，前后端分离，以 Spring Boot 和 Vue 为核心框架，用 MySQL 存储属性数据、PostgreSQL（PostGIS 扩展）存储空间数据。功能上，实现湖泊信息实时管理与可视化（高德地图、AntV L7、ECharts），通过 EW-TOPSIS 法综合评价湖泊健康，基于 LSTM 模型预测健康状况并动态预警，集成 DeepSeek 模型提供专业解答，支持公众举报“四乱”现象，旨在实现湖泊健康监测、评价、预警及公众参与治理<br>
</p>
<figure><figcaption>生态预警管理可视化大屏</figcaption></figure>
]]></content>
    <category term="项目实战"/>
    <published>2025-08-19T01:32:11.000Z</published>
  </entry>
  <entry>
    <title type="text">ArcGIS Pro 简介</title>
    <id>https://giser.date/ArcGIS_Pro/0.html</id>
    <link href="https://giser.date/ArcGIS_Pro/0.html"/>
    <updated>2025-08-12T01:54:46.000Z</updated>
    <category term="指南"/>
    <published>2025-08-11T13:00:39.000Z</published>
  </entry>
  <entry>
    <title type="text">ArcGIS Pro从入门到吃土</title>
    <id>https://giser.date/ArcGIS_Pro/</id>
    <link href="https://giser.date/ArcGIS_Pro/"/>
    <updated>2025-08-11T13:00:39.000Z</updated>
    <category term="使用指南"/>
    <published>2025-08-11T13:00:39.000Z</published>
  </entry>
  <entry>
    <title type="text">湖泊水华遥感数据分析系统</title>
    <id>https://giser.date/projectAction/shygfx.html</id>
    <link href="https://giser.date/projectAction/shygfx.html"/>
    <updated>2025-08-19T01:32:11.000Z</updated>
    <summary type="html"><![CDATA[
<h2>绪论</h2>
<p>近年来，水华对于湖泊和水库水质的污染愈发严重，尤其是在城市湖泊中，由于人类活动的影响，水华问题日益严峻。传统的水华监测方法成本高、效率低，难以实现大范围、长时间的持续监测。因此，利用遥感技术对水华进行信息监测及分析，深入研究湖泊水华的时空变化规律及其驱动因素，对于解决水华问题、保护湖泊生态环境、提高城市居民生活质量具有重要的理论和实践意义。</p>
<p>本软件旨在为水华监测和分析提供一个综合的解决方案，能够实现以下功能：</p>
<p>(1)水华面积预测：利用经验模型或机器学习算法，根据遥感图像的光谱特征以及反射率信息预测水华面积，为水华风险评估提供数据支持。<br>
(2)水华时空变化分析：通过时间序列遥感图像分析，追踪水华的时空分布变化，识别水华暴发和消退的趋势。<br>
(3)水华影响评估：结合水华浓度信息和湖泊生态系统数据，评估水华对水质、生态系统和人类健康的影响。<br>
(4)预警和决策支持：基于遥感监测和水华变化分析结果，提供水华预警信息和决策支持，为水环境管理提供科学依据。</p>]]></summary>
    <content type="html"><![CDATA[
<h2>绪论</h2>
<p>近年来，水华对于湖泊和水库水质的污染愈发严重，尤其是在城市湖泊中，由于人类活动的影响，水华问题日益严峻。传统的水华监测方法成本高、效率低，难以实现大范围、长时间的持续监测。因此，利用遥感技术对水华进行信息监测及分析，深入研究湖泊水华的时空变化规律及其驱动因素，对于解决水华问题、保护湖泊生态环境、提高城市居民生活质量具有重要的理论和实践意义。</p>
<p>本软件旨在为水华监测和分析提供一个综合的解决方案，能够实现以下功能：</p>
<p>(1)水华面积预测：利用经验模型或机器学习算法，根据遥感图像的光谱特征以及反射率信息预测水华面积，为水华风险评估提供数据支持。<br>
(2)水华时空变化分析：通过时间序列遥感图像分析，追踪水华的时空分布变化，识别水华暴发和消退的趋势。<br>
(3)水华影响评估：结合水华浓度信息和湖泊生态系统数据，评估水华对水质、生态系统和人类健康的影响。<br>
(4)预警和决策支持：基于遥感监测和水华变化分析结果，提供水华预警信息和决策支持，为水环境管理提供科学依据。</p>
<h2>功能设计</h2>
<h2>体系架构</h2>
<h2>功能详细设计</h2>
<h5>LSTM时序分析与预测</h5>
<figure><img src="/assets/images/shygfx/LSTM.png" alt="LSTM时序分析与预测" tabindex="0" loading="lazy"><figcaption>LSTM时序分析与预测</figcaption></figure>
<h5>神经网络预测</h5>
<figure><img src="/assets/images/shygfx/神经网络.png" alt="神经网络预测" tabindex="0" loading="lazy"><figcaption>神经网络预测</figcaption></figure>
]]></content>
    <category term="项目实战"/>
    <published>2025-08-11T13:00:39.000Z</published>
  </entry>
  <entry>
    <title type="text">距离分析</title>
    <id>https://giser.date/ArcGIS_Pro/raster/distance.html</id>
    <link href="https://giser.date/ArcGIS_Pro/raster/distance.html"/>
    <updated>2026-09-07T08:31:55.000Z</updated>
    <summary type="html"><![CDATA[<figure><figcaption>距离分析</figcaption></figure>
]]></summary>
    <content type="html"><![CDATA[<figure><figcaption>距离分析</figcaption></figure>
]]></content>
    <category term="指南"/>
    <published>2025-08-11T13:00:39.000Z</published>
  </entry>
  <entry>
    <title type="text">整合分区的矢量数据</title>
    <id>https://giser.date/ArcGIS_Pro/vector/integrate.html</id>
    <link href="https://giser.date/ArcGIS_Pro/vector/integrate.html"/>
    <updated>2026-09-07T08:31:55.000Z</updated>
    <summary type="html"><![CDATA[<figure><figcaption>整合矢量数据步骤</figcaption></figure>
]]></summary>
    <content type="html"><![CDATA[<figure><figcaption>整合矢量数据步骤</figcaption></figure>
]]></content>
    <category term="指南"/>
    <published>2025-08-11T13:00:39.000Z</published>
  </entry>
  <entry>
    <title type="text">拓扑检查</title>
    <id>https://giser.date/ArcGIS_Pro/vector/topo.html</id>
    <link href="https://giser.date/ArcGIS_Pro/vector/topo.html"/>
    <updated>2026-09-07T08:31:55.000Z</updated>
    <summary type="html"><![CDATA[<figure><figcaption>拓扑检查</figcaption></figure>
]]></summary>
    <content type="html"><![CDATA[<figure><figcaption>拓扑检查</figcaption></figure>
]]></content>
    <category term="指南"/>
    <published>2025-08-11T13:00:39.000Z</published>
  </entry>
  <entry>
    <title type="text">布局与功能禁用</title>
    <id>https://giser.date/ArcGIS_Pro/disable.html</id>
    <link href="https://giser.date/ArcGIS_Pro/disable.html"/>
    <updated>2025-08-11T13:00:39.000Z</updated>
    <summary type="html"><![CDATA[<p>你可以通过设置页面的 Frontmatter，在页面禁用功能与布局。</p>
]]></summary>
    <content type="html"><![CDATA[<p>你可以通过设置页面的 Frontmatter，在页面禁用功能与布局。</p>
<!-- more -->
<p>本页面就是一个示例，禁用了如下功能:</p>
<ul>
<li>导航栏</li>
<li>侧边栏</li>
<li>路径导航</li>
<li>页面信息</li>
<li>贡献者</li>
<li>编辑此页链接</li>
<li>更新时间</li>
<li>上一篇/下一篇 链接</li>
<li>评论</li>
<li>页脚</li>
<li>返回顶部按钮</li>
</ul>
]]></content>
    <category term="使用指南"/>
    <published>2025-08-10T07:41:26.000Z</published>
  </entry>
  <entry>
    <title type="text">布局</title>
    <id>https://giser.date/ArcGIS_Pro/layout.html</id>
    <link href="https://giser.date/ArcGIS_Pro/layout.html"/>
    <updated>2025-08-11T13:00:39.000Z</updated>
    <summary type="html"><![CDATA[<p>布局包括:</p>
<ul>
<li><a href="https://theme-hope.vuejs.press/zh/guide/layout/navbar.html" target="_blank" rel="noopener noreferrer">导航栏</a></li>
<li><a href="https://theme-hope.vuejs.press/zh/guide/layout/sidebar.html" target="_blank" rel="noopener noreferrer">侧边栏</a></li>
<li><a href="https://theme-hope.vuejs.press/zh/guide/layout/footer.html" target="_blank" rel="noopener noreferrer">页脚</a></li>
</ul>]]></summary>
    <content type="html"><![CDATA[<p>布局包括:</p>
<ul>
<li><a href="https://theme-hope.vuejs.press/zh/guide/layout/navbar.html" target="_blank" rel="noopener noreferrer">导航栏</a></li>
<li><a href="https://theme-hope.vuejs.press/zh/guide/layout/sidebar.html" target="_blank" rel="noopener noreferrer">侧边栏</a></li>
<li><a href="https://theme-hope.vuejs.press/zh/guide/layout/footer.html" target="_blank" rel="noopener noreferrer">页脚</a></li>
</ul>
<p>同时每个页面包含:</p>
<ul>
<li><a href="https://theme-hope.vuejs.press/zh/guide/layout/breadcrumb.html" target="_blank" rel="noopener noreferrer">路径导航</a></li>
<li><a href="https://theme-hope.vuejs.press/zh/guide/feature/page-info.html" target="_blank" rel="noopener noreferrer">标题和页面信息</a></li>
<li><a href="https://theme-hope.vuejs.press/zh/guide/layout/page.html#%E6%A0%87%E9%A2%98%E5%88%97%E8%A1%A8" target="_blank" rel="noopener noreferrer">TOC (文章标题列表)</a></li>
<li><a href="https://theme-hope.vuejs.press/guide/feature/meta.html" target="_blank" rel="noopener noreferrer">贡献者、更新时间等页面元信息</a></li>
<li><a href="https://theme-hope.vuejs.press/zh/guide/feature/comment.html" target="_blank" rel="noopener noreferrer">评论</a></li>
</ul>
<p>主题也带有以下元素:</p>
<ul>
<li><a href="https://theme-hope.vuejs.press/zh/guide/interface/darkmode.html" target="_blank" rel="noopener noreferrer">夜间模式按钮</a></li>
<li><a href="https://theme-hope.vuejs.press/guide/interface/others.html#%E8%BF%94%E5%9B%9E%E9%A1%B6%E9%83%A8%E6%8C%89%E9%92%AE" target="_blank" rel="noopener noreferrer">返回顶部按钮</a></li>
<li><a href="https://theme-hope.vuejs.press/guide/interface/others.html#%E6%89%93%E5%8D%B0%E6%8C%89%E9%92%AE" target="_blank" rel="noopener noreferrer">打印按钮</a></li>
</ul>
<p>你可以在主题选项和页面的 frontmatter 中自定义它们。</p>
]]></content>
    <category term="指南"/>
    <published>2025-08-10T07:41:26.000Z</published>
  </entry>
  <entry>
    <title type="text">Markdown 展示</title>
    <id>https://giser.date/ArcGIS_Pro/markdown.html</id>
    <link href="https://giser.date/ArcGIS_Pro/markdown.html"/>
    <updated>2025-08-11T13:00:39.000Z</updated>
    <summary type="html"><![CDATA[<p>VuePress 主要从 Markdown 文件生成页面。因此，你可以使用它轻松生成文档或博客站点。</p>
<p>你需要创建并编写 Markdown，以便 VuePress 可以根据文件结构将它们转换为不同的页面。</p>
]]></summary>
    <content type="html"><![CDATA[<p>VuePress 主要从 Markdown 文件生成页面。因此，你可以使用它轻松生成文档或博客站点。</p>
<p>你需要创建并编写 Markdown，以便 VuePress 可以根据文件结构将它们转换为不同的页面。</p>
<!-- more -->
<h2>Markdown 介绍</h2>
<p>如果你是一个新手，还不会编写 Markdown，请先阅读 <a href="https://theme-hope.vuejs.press/zh/cookbook/markdown/" target="_blank" rel="noopener noreferrer">Markdown 介绍</a> 和 <a href="https://theme-hope.vuejs.press/zh/cookbook/markdown/demo.html" target="_blank" rel="noopener noreferrer">Markdown 演示</a>。</p>
<h2>Markdown 配置</h2>
<p>VuePress 通过 Frontmatter 为每个 Markdown 页面引入配置。</p>
<div class="hint-container important">
<p class="hint-container-title">Frontmatter</p>
<p>Frontmatter 是 VuePress 中很重要的一个概念，请阅读 <a href="https://theme-hope.vuejs.press/zh/cookbook/vuepress/page.html#front-matter" target="_blank" rel="noopener noreferrer">Frontmatter 介绍</a> 了解详情。</p>
</div>
<h2>Markdown 扩展</h2>
<p>VuePress 会使用 <a href="https://github.com/markdown-it/markdown-it" target="_blank" rel="noopener noreferrer">markdown-it</a> 来解析 Markdown 内容，因此可以借助于 markdown-it 插件来实现 <a href="https://github.com/markdown-it/markdown-it#syntax-extensions" target="_blank" rel="noopener noreferrer">语法扩展</a> 。</p>
<h3>VuePress 扩展</h3>
<p>为了丰富文档写作，VuePress 对 Markdown 语法进行了扩展。</p>
<p>关于这些扩展，请阅读 <a href="https://theme-hope.vuejs.press/zh/cookbook/vuepress/markdown.html" target="_blank" rel="noopener noreferrer">VuePress 中的 Markdown 扩展</a>。</p>
<h3>主题扩展</h3>
<p>通过 VuePress 插件，主题扩展了更多 Markdown 语法，提供更加丰富的写作功能。</p>
<h4>选项卡</h4>

<ul>
<li><a href="https://theme-hope.vuejs.press/zh/guide/markdown/content/tabs.html" target="_blank" rel="noopener noreferrer">查看详情</a></li>
</ul>
<h4>脚注</h4>
<p>此文字有脚注<sup class="footnote-ref"><a href="#footnote1">[1]</a><a class="footnote-anchor" id="footnote-ref1"></a></sup>.</p>
<ul>
<li><a href="https://theme-hope.vuejs.press/zh/guide/markdown/content/footnote.html" target="_blank" rel="noopener noreferrer">查看详情</a></li>
</ul>
<h4>导入文件</h4>
<ul>
<li><a href="https://theme-hope.vuejs.press/zh/guide/markdown/content/include.html" target="_blank" rel="noopener noreferrer">查看详情</a></li>
</ul>
<h4>TeX 语法</h4>
<p>$$<br>
\frac {\partial^r} {\partial \omega^r} \left(\frac {y^{\omega}} {\omega}\right)<br>
= \left(\frac {y^{\omega}} {\omega}\right) \left{(\log y)^r + \sum_{i=1}^r \frac {(-1)^i r \cdots (r-i+1) (\log y)^{r-i}} {\omega^i} \right}<br>
$$</p>
<ul>
<li><a href="https://theme-hope.vuejs.press/zh/guide/markdown/grammar/math.html" target="_blank" rel="noopener noreferrer">查看详情</a></li>
</ul>
<h4>任务列表</h4>
<ul class="task-list-container">
<li class="task-list-item"><input type="checkbox" class="task-list-item-checkbox" id="task-item-0" checked="checked" disabled="disabled"><label class="task-list-item-label" for="task-item-0"> 计划 1</label></li>
<li class="task-list-item"><input type="checkbox" class="task-list-item-checkbox" id="task-item-1" disabled="disabled"><label class="task-list-item-label" for="task-item-1"> 计划 2</label></li>
</ul>
<p><a href="https://theme-hope.vuejs.press/zh/guide/markdown/grammar/tasklist.html" target="_blank" rel="noopener noreferrer">查看详情</a></p>
<h3>图片增强</h3>
<p>支持为图片设置颜色模式和大小。</p>
<ul>
<li><a href="https://theme-hope.vuejs.press/zh/guide/markdown/grammar/image.html" target="_blank" rel="noopener noreferrer">查看详情</a></li>
</ul>
<h4>上下角标</h4>
<p>19<sup>th</sup> H<sub>2</sub>O</p>
<ul>
<li><a href="https://theme-hope.vuejs.press/zh/guide/markdown/stylize/sup-sub.html" target="_blank" rel="noopener noreferrer">查看详情</a></li>
</ul>
<h4>组件</h4>
<ul>
<li><a href="https://theme-hope.vuejs.press/zh/guide/component/grammar.html" target="_blank" rel="noopener noreferrer">查看详情</a></li>
</ul>
<h4>提示容器</h4>
<div v-pre>
<p>安全的在 Markdown 中使用 {{ variable }}。</p>
</div>
<div class="hint-container info">
<p class="hint-container-title">自定义标题</p>
<p>信息容器，包含 <code>代码</code> 与 <a href="#%E6%8F%90%E7%A4%BA%E5%AE%B9%E5%99%A8">链接</a>。</p>
<div class="language-js line-numbers-mode" data-highlighter="shiki" data-ext="js" style="--shiki-light:#383A42;--shiki-dark:#abb2bf;--shiki-light-bg:#FAFAFA;--shiki-dark-bg:#282c34"><pre class="shiki shiki-themes one-light one-dark-pro vp-code"><code class="language-js"><span class="line"><span style="--shiki-light:#A626A4;--shiki-dark:#C678DD">const</span><span style="--shiki-light:#986801;--shiki-dark:#E5C07B"> a</span><span style="--shiki-light:#0184BC;--shiki-dark:#56B6C2"> =</span><span style="--shiki-light:#986801;--shiki-dark:#D19A66"> 1</span><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF">;</span></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div></div></div></div>
<div class="hint-container tip">
<p class="hint-container-title">自定义标题</p>
<p>提示容器</p>
</div>
<div class="hint-container warning">
<p class="hint-container-title">自定义标题</p>
<p>警告容器</p>
</div>
<div class="hint-container caution">
<p class="hint-container-title">自定义标题</p>
<p>危险容器</p>
</div>
<details class="hint-container details"><summary>自定义标题</summary>
<p>详情容器</p>
</details>
<ul>
<li><a href="https://theme-hope.vuejs.press/zh/guide/markdown/stylize/alert.html" target="_blank" rel="noopener noreferrer">GitHub 警示</a></li>
<li><a href="https://theme-hope.vuejs.press/zh/guide/markdown/stylize/hint.html" target="_blank" rel="noopener noreferrer">提示框</a></li>
</ul>
<h4>自定义对齐</h4>
<div style="text-align:center">
<p>我是居中的</p>
</div>
<div style="text-align:right">
<p>我在右对齐</p>
</div>
<ul>
<li><a href="https://theme-hope.vuejs.press/zh/guide/markdown/stylize/align.html" target="_blank" rel="noopener noreferrer">查看详情</a></li>
</ul>
<h4>属性支持</h4>
<p>一个拥有 ID 的 <strong id="word">单词</strong>。</p>
<ul>
<li><a href="https://theme-hope.vuejs.press/zh/guide/markdown/stylize/attrs.html" target="_blank" rel="noopener noreferrer">查看详情</a></li>
</ul>
<h4>标记</h4>
<p>你可以标记 <mark>重要的内容</mark> 。</p>
<ul>
<li><a href="https://theme-hope.vuejs.press/zh/guide/markdown/stylize/mark.html" target="_blank" rel="noopener noreferrer">查看详情</a></li>
</ul>
<h4>剧透</h4>
<p>VuePress Theme Hope <span class="spoiler" tabindex="-1">十分强大</span>.</p>
<ul>
<li><a href="https://theme-hope.vuejs.press/zh/guide/markdown/stylize/spoiler.html" target="_blank" rel="noopener noreferrer">查看详情</a></li>
</ul>
<h4>样式化</h4>
<p>向 Mr.Hope 捐赠一杯咖啡。 </p>
<ul>
<li><a href="https://theme-hope.vuejs.press/zh/guide/markdown/stylize/stylize.html" target="_blank" rel="noopener noreferrer">查看详情</a></li>
</ul>
<h4>PlantUML</h4>
<img src="https://www.plantuml.com/plantuml/svg/SoWkIImgAStDuNBCoKnELT2rKt3AJx9IUB5koOlrZI_MRt-siOcBAp6dHE5PnuIdNVEVDRS-RTlAnQMWe01I258FrWZJyQnlwTF-wLnSgJd5gGhFvazulhptwPADBxOi9QGHeWeidLwKNrgWyAnZuelsLK-tRtm-g-NPWlRdQ_U19U7EzCbFLx1IUBgduUdoxXVhDZpTE_NPbDrFstS_cxxqwVxfOBKWa9EVNw1WQ61Wy6pDGhWWYa5W_xhu1Ij0zCCLfUQbOBFn-Ux9p-REns4ZI0_4xq_xbptPqG3tFbQFhz_-ihttwP9UBYwGFeVKl9JIt1m0" alt="PlantUML Diagram">
<ul>
<li><a href="https://theme-hope.vuejs.press/zh/guide/markdown/chart/plantuml.html" target="_blank" rel="noopener noreferrer">View Detail</a></li>
</ul>
<h4>代码块</h4>

<ul>
<li><a href="https://theme-hope.vuejs.press/zh/guide/markdown/code/code-tabs.html" target="_blank" rel="noopener noreferrer">查看详情</a></li>
</ul>
<h4>代码演示</h4>
<iframe src="https://plugin-md-enhance-demo.vuejs.press/snippet/code-demo.html" width="100%" height="450"></iframe>
<ul>
<li><a href="https://theme-hope.vuejs.press/zh/guide/markdown/code/demo.html" target="_blank" rel="noopener noreferrer">查看详情</a></li>
</ul>
<h4>交互演示</h4>
<iframe src="https://plugin-md-enhance-demo.vuejs.press/snippet/playground.html" width="100%" height="480"></iframe>
<ul>
<li><a href="https://theme-hope.vuejs.press/zh/guide/markdown/code/playground.html" target="_blank" rel="noopener noreferrer">查看详情</a></li>
</ul>
<h4>Kotlin 交互演示</h4>
<iframe src="https://plugin-md-enhance-demo.vuejs.press/snippet/kotlin-playground.html" width="100%" height="220"></iframe>
<ul>
<li><a href="https://theme-hope.vuejs.press/zh/guide/markdown/code/kotlin-playground.html" target="_blank" rel="noopener noreferrer">查看详情</a></li>
</ul>
<h4>Sandpack 交互演示</h4>
<iframe src="https://plugin-md-enhance-demo.vuejs.press/snippet/sandpack.html" width="100%" height="380"></iframe>
<ul>
<li><a href="https://theme-hope.vuejs.press/zh/guide/markdown/code/sandpack.html" target="_blank" rel="noopener noreferrer">查看详情</a></li>
</ul>
<h4>Vue 交互演示</h4>
<iframe src="https://plugin-md-enhance-demo.vuejs.press/snippet/vue-playground.html" width="100%" height="380"></iframe>
<ul>
<li><a href="https://theme-hope.vuejs.press/zh/guide/markdown/code/vue-playground.html" target="_blank" rel="noopener noreferrer">查看详情</a></li>
</ul>
<h4>幻灯片</h4>
<iframe src="https://ecosystem.vuejs.press/zh/plugins/markdown/revealjs/demo.html" width="100%" height="420"></iframe>
<ul>
<li><a href="https://theme-hope.vuejs.press/zh/guide/markdown/content/revealjs.html" target="_blank" rel="noopener noreferrer">查看详情</a></li>
</ul>
<hr class="footnotes-sep">
<section class="footnotes">
<ol class="footnotes-list">
<li id="footnote1" class="footnote-item"><p>这是脚注内容 <a href="#footnote-ref1" class="footnote-backref">↩︎</a></p>
</li>
</ol>
</section>
]]></content>
    <category term="使用指南"/>
    <published>2025-08-10T07:41:26.000Z</published>
  </entry>
  <entry>
    <title type="text">页面配置</title>
    <id>https://giser.date/ArcGIS_Pro/page.html</id>
    <link href="https://giser.date/ArcGIS_Pro/page.html"/>
    <updated>2025-08-11T13:00:39.000Z</updated>
    <summary type="html"><![CDATA[<p><code>more</code> 注释之前的内容被视为文章摘要。</p>
]]></summary>
    <content type="html"><![CDATA[<p><code>more</code> 注释之前的内容被视为文章摘要。</p>
<!-- more -->
<h2>页面标题</h2>
<p>The first H1 title in Markdown will be regarded as page title.</p>
<p>Markdown 中的第一个 H1 标题会被视为页面标题。</p>
<p>你可以在 Markdown 的 Frontmatter 中设置页面标题。</p>
<div class="language-md line-numbers-mode" data-highlighter="shiki" data-ext="md" style="--shiki-light:#383A42;--shiki-dark:#abb2bf;--shiki-light-bg:#FAFAFA;--shiki-dark-bg:#282c34"><pre class="shiki shiki-themes one-light one-dark-pro vp-code"><code class="language-md"><span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div></div></div>]]></content>
    <author>
      <name>Ms.Hope</name>
    </author>
    <category term="使用指南"/>
    <contributor>
      <name>Ms.Hope</name>
    </contributor>
    <published>2020-01-01T00:00:00.000Z</published>
    <rights>无版权</rights>
  </entry>
  <entry>
    <title type="text">项目实战</title>
    <id>https://giser.date/projectAction/</id>
    <link href="https://giser.date/projectAction/"/>
    <updated>2025-08-11T13:00:39.000Z</updated>
    <category term="使用指南"/>
    <published>2025-08-10T07:41:26.000Z</published>
  </entry>
  <entry>
    <title type="text">Geoserver快速入门</title>
    <id>https://giser.date/posts/Geoserver.html</id>
    <link href="https://giser.date/posts/Geoserver.html"/>
    <updated>2025-08-22T10:07:57.000Z</updated>
    <summary type="html"><![CDATA[
<h2>简介</h2>
<p>这里是内容。</p>
<h3>标题 3</h3>
<p>这里是内容。</p>
]]></summary>
    <content type="html"><![CDATA[
<h2>简介</h2>
<p>这里是内容。</p>
<h3>标题 3</h3>
<p>这里是内容。</p>
]]></content>
    <category term="蔬菜"/>
    <published>2022-01-12T00:00:00.000Z</published>
  </entry>
  <entry>
    <title type="text">Maven入门</title>
    <id>https://giser.date/posts/Maven.html</id>
    <link href="https://giser.date/posts/Maven.html"/>
    <updated>2025-08-22T10:07:57.000Z</updated>
    <summary type="html"><![CDATA[
<h2>简介</h2>
<p>这里是内容。</p>
<h3>Maven的pom.xml</h3>
<p>这里是内容。</p>
]]></summary>
    <content type="html"><![CDATA[
<h2>简介</h2>
<p>这里是内容。</p>
<h3>Maven的pom.xml</h3>
<p>这里是内容。</p>
]]></content>
    <category term="前端"/>
    <published>2022-01-09T00:00:00.000Z</published>
  </entry>
  <entry>
    <title type="text">SQL快速入门（PostgreSQL版）</title>
    <id>https://giser.date/posts/SQL.html</id>
    <link href="https://giser.date/posts/SQL.html"/>
    <updated>2025-09-07T05:52:53.000Z</updated>
    <summary type="html"><![CDATA[
<h2>SQL是什么？</h2>
<p>SQL（Structured Query Language，结构化查询语言）是一种专门用于管理和操作关系型数据库的标准化编程语言。它允许用户执行各种数据库操作，如查询数据、插入记录、更新数据、删除记录以及创建和修改数据库结构等。</p>
<p>PostgreSQL是一个功能强大的开源对象-关系型数据库系统，以其可靠性、功能 robustness 和性能而闻名。它是SQL标准的一个实现，并提供了许多高级功能。</p>
<h3>数据类型</h3>
<h4>1.字符类型</h4>
<table>
<thead>
<tr>
<th>名字</th>
<th>描述</th>
<th>标准SQL</th>
</tr>
</thead>
<tbody>
<tr>
<td>char(n)</td>
<td>固定长度为n</td>
<td>✅</td>
</tr>
<tr>
<td>varchar(n)</td>
<td>最大长度为n</td>
<td>✅</td>
</tr>
<tr>
<td>text</td>
<td>没有长度限制的可变长度列</td>
<td>❌</td>
</tr>
</tbody>
</table>]]></summary>
    <content type="html"><![CDATA[
<h2>SQL是什么？</h2>
<p>SQL（Structured Query Language，结构化查询语言）是一种专门用于管理和操作关系型数据库的标准化编程语言。它允许用户执行各种数据库操作，如查询数据、插入记录、更新数据、删除记录以及创建和修改数据库结构等。</p>
<p>PostgreSQL是一个功能强大的开源对象-关系型数据库系统，以其可靠性、功能 robustness 和性能而闻名。它是SQL标准的一个实现，并提供了许多高级功能。</p>
<h3>数据类型</h3>
<h4>1.字符类型</h4>
<p>|  名字   | 描述  | 标准SQL  |<br>
|</p>
]]></content>
    <category term="数据库"/>
    <published>2022-01-11T00:00:00.000Z</published>
  </entry>
  <entry>
    <title type="text">TypeScript</title>
    <id>https://giser.date/posts/TypeScript.html</id>
    <link href="https://giser.date/posts/TypeScript.html"/>
    <updated>2025-08-22T10:07:57.000Z</updated>
    <summary type="html"><![CDATA[
<h2>TS的简介</h2>
<p>这里是内容。</p>
<h3>TS的快速入门</h3>
<p>这里是内容。</p>
]]></summary>
    <content type="html"><![CDATA[
<h2>TS的简介</h2>
<p>这里是内容。</p>
<h3>TS的快速入门</h3>
<p>这里是内容。</p>
]]></content>
    <category term="火龙果"/>
    <category term="水果"/>
    <published>2022-01-10T00:00:00.000Z</published>
  </entry>
  <entry>
    <title type="text">控制反转与依赖注入</title>
    <id>https://giser.date/posts/spring/1.html</id>
    <link href="https://giser.date/posts/spring/1.html"/>
    <updated>2025-08-22T10:07:57.000Z</updated>
    <summary type="html"><![CDATA[
<h2>SpringIOC</h2>
<p>这里是内容。</p>
<h3>标题 3</h3>
<p>这里是内容。</p>
]]></summary>
    <content type="html"><![CDATA[
<h2>SpringIOC</h2>
<p>这里是内容。</p>
<h3>标题 3</h3>
<p>这里是内容。</p>
]]></content>
    <category term="后端"/>
    <published>2022-01-01T00:00:00.000Z</published>
  </entry>
  <entry>
    <title type="text">面向切面编程</title>
    <id>https://giser.date/posts/spring/2.html</id>
    <link href="https://giser.date/posts/spring/2.html"/>
    <updated>2026-09-07T08:31:55.000Z</updated>
    <summary type="html"><![CDATA[
<p>Spring AOP是Spring框架中非常重要的功能模块之一，该模块提供了面向切面的编程支持，这种编程思想在事务处理、日志记录、权限控制、缓存等场景中被广泛使用。</p>
]]></summary>
    <content type="html"><![CDATA[
<p>Spring AOP是Spring框架中非常重要的功能模块之一，该模块提供了面向切面的编程支持，这种编程思想在事务处理、日志记录、权限控制、缓存等场景中被广泛使用。</p>
<!-- more -->
<h3>1.AOP的概念</h3>
<p>AOP（Aspect Oriented Programming）是一种面向切面的编程，它将应用程序的各个模块进行解耦，并把公共的代码抽取出来，通过切面进行统一处理。它与OOP的面向对象思想不同，AOP更关注应用程序的各个模块之间的关系，而不是对象之间的关系。</p>
<p><em><strong>在OOP中，以类为基本单位进行模块化，而AOP则将应用程序的各个模块进行解耦，并把公共的代码抽取出来，通过切面进行统一处理。</strong></em></p>
<p>这种横向的解耦，使得应用程序的各个模块之间更加松耦合，是传统的OOP无法实现的，因为后者实现的是父子关系的纵向复用，二者相辅相成，互为补充。</p>
<p>在AOP中，类与切面的关系如下：<br>
</p>
<p>从上图可知，通过切面Aspect分别在业务1和业务2中加入了日志记录、性能统计、安全控制等功能操作。</p>
<h3>2.AOP的术语与实现逻辑</h3>
<ol>
<li>Aspect：切面，封装横切到系统功能的类，也即定义切点、通知和连接点的组合。</li>
<li>JoinPoint：连接点，即在程序中需要插入切面的位置(时间点)。</li>
<li>Pointcut：切点，指需要处理的连接点，在Spring AOP中，所有的方法执行都是连接点，切入点(描述信息)确定需要处理的连接点。</li>
<li>Advice：通知(增强处理)，即在连接点上执行的切面逻辑。</li>
<li>Introduction：引介，即在现有实现类（目标对象）中添加新的自定义方法或属性。</li>
<li>Target：目标对象，即所有被切面所通知的对象。</li>
<li>Proxy：代理，即创建目标对象的代理对象(子类)，用于执行切面逻辑。</li>
<li>Weaving：织入，即把切面逻辑代码插入到目标对象中，从而生成代理对象的过程。Spring AOP使用动态代理技术，即在运行时创建目标对象的代理对象，并把代理对象返回给调用方。</li>
<li>Interceptor：拦截器，即在目标对象方法执行之前和之后执行切面逻辑。</li>
</ol>
<figure><figcaption>切面、连接点与切入点关系</figcaption></figure>
<h3>3.基于注解的Spring AOP实现</h3>
<h5>3.1 Spring通知的分类</h5>
<p>|   通知类型   |                                      介绍                                      | 应用                 |      注解      |<br>
| :</p>
]]></content>
    <category term="后端"/>
    <published>2022-01-02T00:00:00.000Z</published>
  </entry>
  <entry>
    <title type="text">Spring中的Bean</title>
    <id>https://giser.date/posts/spring/3.html</id>
    <link href="https://giser.date/posts/spring/3.html"/>
    <updated>2025-08-22T10:07:57.000Z</updated>
    <summary type="html"><![CDATA[
<h2>Bean的实例化</h2>
<p>这里是内容。</p>
<h2>Bean的作用域</h2>
<p>这里是内容。</p>
<h2>Bean的初始化和销毁</h2>
]]></summary>
    <content type="html"><![CDATA[
<h2>Bean的实例化</h2>
<p>这里是内容。</p>
<h2>Bean的作用域</h2>
<p>这里是内容。</p>
<h2>Bean的初始化和销毁</h2>
]]></content>
    <category term="后端"/>
    <category term="水果"/>
    <published>2022-01-03T00:00:00.000Z</published>
  </entry>
  <entry>
    <title type="text">SpringBoot入门</title>
    <id>https://giser.date/posts/spring/4.html</id>
    <link href="https://giser.date/posts/spring/4.html"/>
    <updated>2025-08-22T10:07:57.000Z</updated>
    <summary type="html"><![CDATA[
<h2>标题 2</h2>
<p>这里是内容。</p>
<h3>标题 3</h3>
<p>这里是内容。</p>
]]></summary>
    <content type="html"><![CDATA[
<h2>标题 2</h2>
<p>这里是内容。</p>
<h3>标题 3</h3>
<p>这里是内容。</p>
]]></content>
    <category term="苹果"/>
    <category term="水果"/>
    <published>2022-01-04T00:00:00.000Z</published>
  </entry>
  <entry>
    <title type="text">Vue简介</title>
    <id>https://giser.date/posts/vue3/1.html</id>
    <link href="https://giser.date/posts/vue3/1.html"/>
    <updated>2025-08-22T10:07:57.000Z</updated>
    <summary type="html"><![CDATA[
<h2>标题 2</h2>
<p>这里是内容。</p>
<h3>标题 3</h3>
<p>这里是内容。</p>
]]></summary>
    <content type="html"><![CDATA[
<h2>标题 2</h2>
<p>这里是内容。</p>
<h3>标题 3</h3>
<p>这里是内容。</p>
]]></content>
    <category term="前端"/>
    <published>2022-01-05T00:00:00.000Z</published>
  </entry>
  <entry>
    <title type="text">基于 Vue 的前端组件化开发</title>
    <id>https://giser.date/posts/vue3/2.html</id>
    <link href="https://giser.date/posts/vue3/2.html"/>
    <updated>2026-09-07T08:31:55.000Z</updated>
    <summary type="html"><![CDATA[
<p>组件化是现代前端开发的核心思想之一。在 Vue 中，组件是可复用的 Vue 实例，具有名称，例如<strong>PostCard</strong>。我们可以通过创建新组件将这些组件作为自定义元素（类似于HTML中的一个标签）来使用。在实际应用中，组件常常被组织成一个层层嵌套的树状结构，如图所示：</p>
<figure><figcaption>组件树</figcaption></figure>
]]></summary>
    <content type="html"><![CDATA[
<p>组件化是现代前端开发的核心思想之一。在 Vue 中，组件是可复用的 Vue 实例，具有名称，例如<strong>PostCard</strong>。我们可以通过创建新组件将这些组件作为自定义元素（类似于HTML中的一个标签）来使用。在实际应用中，组件常常被组织成一个层层嵌套的树状结构，如图所示：</p>
<figure><figcaption>组件树</figcaption></figure>
<!-- more -->
<h2>1.什么是组件化开发</h2>
<p>组件化开发是一种将 UI 拆分成独立、可复用的组件的开发方式。每个组件包含：</p>
<ul>
<li><strong>模板（Template）</strong>：定义组件的结构</li>
<li><strong>逻辑（Script）</strong>：处理组件的行为</li>
<li><strong>样式（Style）</strong>：定义组件的外观</li>
</ul>
<p>组件化的优势：</p>
<ol>
<li><strong>可复用性</strong>：组件可以在不同地方重复使用</li>
<li><strong>可维护性</strong>：每个组件互相独立，便于维护和更新</li>
<li><strong>可组合性</strong>：可以通过组合简单组件来构建复杂界面</li>
<li><strong>提升开发效率</strong>：团队成员可以并行开发不同组件，互不干扰，减少沟通成本</li>
</ol>
<h2>2.组件的导出、导入、注册与调用</h2>
<h3>2.1.组件的调用</h3>
<ol>
<li>导入组件<br>
在使用组件之前，首先需要导入组件。通常使用 ES6 的 import 语法：</li>
</ol>

<ol start="2">
<li>注册组件<br>
导入组件后，需要将其注册到当前组件中才能使用。有两种注册方式：</li>
</ol>

<ol start="3">
<li>引用组件<br>
注册后，就可以像HTML的一个标签似的在模板中使用组件了：</li>
</ol>
<div class="language-vue line-numbers-mode" data-highlighter="shiki" data-ext="vue" style="--shiki-light:#383A42;--shiki-dark:#abb2bf;--shiki-light-bg:#FAFAFA;--shiki-dark-bg:#282c34"><pre class="shiki shiki-themes one-light one-dark-pro vp-code"><code class="language-vue"><span class="line"><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF">&#x3C;</span><span style="--shiki-light:#E45649;--shiki-dark:#E06C75">template</span><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF">></span></span>
<span class="line"><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF">  &#x3C;</span><span style="--shiki-light:#E45649;--shiki-dark:#E06C75">div</span><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF">></span></span>
<span class="line"><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF">    &#x3C;</span><span style="--shiki-light:#E45649;--shiki-dark:#E06C75">PostCard</span><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF"> /></span></span>
<span class="line"><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF">  &#x3C;/</span><span style="--shiki-light:#E45649;--shiki-dark:#E06C75">div</span><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF">></span></span>
<span class="line"><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF">&#x3C;/</span><span style="--shiki-light:#E45649;--shiki-dark:#E06C75">template</span><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF">></span></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><h3>2.2.组件的导出</h3>
<p>在 Vue 中，组件导出是组件开发的重要环节。组件必须正确导出才能被其他组件导入和使用。主要有以下几种导出方式：</p>

<p><em><strong>完整的组件导出结构</strong></em></p>
<p>实际开发中按需导出即可</p>
<div class="language-vue line-numbers-mode" data-highlighter="shiki" data-ext="vue" style="--shiki-light:#383A42;--shiki-dark:#abb2bf;--shiki-light-bg:#FAFAFA;--shiki-dark-bg:#282c34"><pre class="shiki shiki-themes one-light one-dark-pro vp-code"><code class="language-vue"><span class="line"><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF">&#x3C;</span><span style="--shiki-light:#E45649;--shiki-dark:#E06C75">script</span><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF">></span></span>
<span class="line"><span style="--shiki-light:#A626A4;--shiki-dark:#C678DD">export</span><span style="--shiki-light:#E45649;--shiki-dark:#C678DD"> default</span><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF"> {</span></span>
<span class="line"><span style="--shiki-light:#A0A1A7;--shiki-light-font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic">  // 1. 组件名称</span></span>
<span class="line"><span style="--shiki-light:#E45649;--shiki-dark:#E06C75">  name</span><span style="--shiki-light:#0184BC;--shiki-dark:#ABB2BF">:</span><span style="--shiki-light:#50A14F;--shiki-dark:#98C379"> 'ComponentName'</span><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF">,</span></span>
<span class="line"><span style="--shiki-light:#A0A1A7;--shiki-light-font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic">  // 2. 组件依赖:本组件中用到的其他组件</span></span>
<span class="line"><span style="--shiki-light:#E45649;--shiki-dark:#E06C75">  components</span><span style="--shiki-light:#0184BC;--shiki-dark:#ABB2BF">:</span><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF"> {</span></span>
<span class="line"><span style="--shiki-light:#E45649;--shiki-dark:#E06C75">    ChildComponent</span></span>
<span class="line"><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF">  },</span></span>
<span class="line"><span style="--shiki-light:#A0A1A7;--shiki-light-font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic">  // 3. 属性定义：显式声明它所接受的 props</span></span>
<span class="line"><span style="--shiki-light:#E45649;--shiki-dark:#E06C75">  props</span><span style="--shiki-light:#0184BC;--shiki-dark:#ABB2BF">:</span><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF"> {</span></span>
<span class="line"><span style="--shiki-light:#A0A1A7;--shiki-light-font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic">    // 属性验证确保组件接口的健壮性</span></span>
<span class="line"><span style="--shiki-light:#E45649;--shiki-dark:#E06C75">    title</span><span style="--shiki-light:#0184BC;--shiki-dark:#ABB2BF">:</span><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF"> {</span></span>
<span class="line"><span style="--shiki-light:#E45649;--shiki-dark:#E06C75">      type</span><span style="--shiki-light:#0184BC;--shiki-dark:#ABB2BF">:</span><span style="--shiki-light:#E45649;--shiki-dark:#E06C75"> String</span><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF">,</span></span>
<span class="line"><span style="--shiki-light:#E45649;--shiki-dark:#E06C75">      required</span><span style="--shiki-light:#0184BC;--shiki-dark:#ABB2BF">:</span><span style="--shiki-light:#986801;--shiki-dark:#D19A66"> true</span></span>
<span class="line"><span style="--shiki-light:#E45649;--shiki-dark:#E06C75">      default</span><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF">: </span><span style="--shiki-light:#50A14F;--shiki-dark:#98C379">'默认标题'</span></span>
<span class="line"><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF">    },</span></span>
<span class="line"><span style="--shiki-light:#E45649;--shiki-dark:#E06C75">    posts</span><span style="--shiki-light:#0184BC;--shiki-dark:#ABB2BF">:</span><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF"> {</span></span>
<span class="line"><span style="--shiki-light:#E45649;--shiki-dark:#E06C75">      type</span><span style="--shiki-light:#0184BC;--shiki-dark:#ABB2BF">:</span><span style="--shiki-light:#E45649;--shiki-dark:#E06C75"> Array</span><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF">,</span></span>
<span class="line"><span style="--shiki-light:#4078F2;--shiki-dark:#61AFEF">      default</span><span style="--shiki-light:#0184BC;--shiki-dark:#ABB2BF">:</span><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF"> () </span><span style="--shiki-light:#A626A4;--shiki-dark:#C678DD">=></span><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF"> [] </span></span>
<span class="line"><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF">    }</span></span>
<span class="line"><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF">  },</span></span>
<span class="line"><span style="--shiki-light:#A0A1A7;--shiki-light-font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic">  // 4. 数据属性</span></span>
<span class="line"><span style="--shiki-light:#4078F2;--shiki-dark:#61AFEF">  data</span><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF">() {</span></span>
<span class="line"><span style="--shiki-light:#A626A4;--shiki-dark:#C678DD">    return</span><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF"> {</span></span>
<span class="line"><span style="--shiki-light:#A0A1A7;--shiki-light-font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic">      // 组件内部状态</span></span>
<span class="line"><span style="--shiki-light:#E45649;--shiki-dark:#E06C75">      loading</span><span style="--shiki-light:#0184BC;--shiki-dark:#ABB2BF">:</span><span style="--shiki-light:#986801;--shiki-dark:#D19A66"> false</span></span>
<span class="line"><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF">    }</span></span>
<span class="line"><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF">  },</span></span>
<span class="line"><span style="--shiki-light:#A0A1A7;--shiki-light-font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic">  // 5. 计算属性</span></span>
<span class="line"><span style="--shiki-light:#E45649;--shiki-dark:#E06C75">  computed</span><span style="--shiki-light:#0184BC;--shiki-dark:#ABB2BF">:</span><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF"> {</span></span>
<span class="line"><span style="--shiki-light:#A0A1A7;--shiki-light-font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic">    // 常用来描述依赖响应式状态的复杂逻辑</span></span>
<span class="line"><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF">  },</span></span>
<span class="line"><span style="--shiki-light:#A0A1A7;--shiki-light-font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic">  // 6. 监听器</span></span>
<span class="line"><span style="--shiki-light:#E45649;--shiki-dark:#E06C75">  watch</span><span style="--shiki-light:#0184BC;--shiki-dark:#ABB2BF">:</span><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF"> {</span></span>
<span class="line"><span style="--shiki-light:#A0A1A7;--shiki-light-font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic">    // 监听属性变化</span></span>
<span class="line"><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF">  },</span></span>
<span class="line"><span style="--shiki-light:#A0A1A7;--shiki-light-font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic">  // 7. 生命周期钩子</span></span>
<span class="line"><span style="--shiki-light:#4078F2;--shiki-dark:#61AFEF">  created</span><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF">() {</span></span>
<span class="line"><span style="--shiki-light:#A0A1A7;--shiki-light-font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic">    // 组件实例创建后调用</span></span>
<span class="line"><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF">  },</span></span>
<span class="line"><span style="--shiki-light:#4078F2;--shiki-dark:#61AFEF">  mounted</span><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF">() {</span></span>
<span class="line"><span style="--shiki-light:#A0A1A7;--shiki-light-font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic">    // 组件挂载到 DOM 后调用</span></span>
<span class="line"><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF">  },</span></span>
<span class="line"><span style="--shiki-light:#A0A1A7;--shiki-light-font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic">  // 8. 方法定义</span></span>
<span class="line"><span style="--shiki-light:#E45649;--shiki-dark:#E06C75">  methods</span><span style="--shiki-light:#0184BC;--shiki-dark:#ABB2BF">:</span><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF"> {</span></span>
<span class="line"><span style="--shiki-light:#4078F2;--shiki-dark:#61AFEF">    handleClick</span><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF">() {</span></span>
<span class="line"><span style="--shiki-light:#A0A1A7;--shiki-light-font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic">      // 处理点击事件</span></span>
<span class="line"><span style="--shiki-light:#E45649;--shiki-dark:#E5C07B">      this</span><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF">.</span><span style="--shiki-light:#4078F2;--shiki-dark:#61AFEF">$emit</span><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF">(</span><span style="--shiki-light:#50A14F;--shiki-dark:#98C379">'click'</span><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF">);</span></span>
<span class="line"><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF">    }</span></span>
<span class="line"><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF">  }</span></span>
<span class="line"><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF">}</span></span>
<span class="line"><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF">&#x3C;/</span><span style="--shiki-light:#E45649;--shiki-dark:#E06C75">script</span><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF">></span></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><div class="hint-container tip">
<p class="hint-container-title">提示</p>
<p>在 Vue3.2 以后，当你使用 script setup 语法时，Vue 会自动将组件编译成一个有效的 Vue 组件对象。在编译过程中，Vue 会自动创建一个默认导出（default export），其中包含了模板、脚本和样式的所有内容，即使在源代码中没有明确的 export 语句。</p>
</div>
<h2>3.组件应用案例</h2>
<h3>3.1 基础组件示例</h3>
<p>本博客本质上就是一个基于 Vue 的单页面应用，下面为大家演示一个简单的博客文章卡片组件：</p>
<p>该博客文章卡片源码如下:</p>
<div class="language-vue line-numbers-mode" data-highlighter="shiki" data-ext="vue" style="--shiki-light:#383A42;--shiki-dark:#abb2bf;--shiki-light-bg:#FAFAFA;--shiki-dark-bg:#282c34"><pre class="shiki shiki-themes one-light one-dark-pro vp-code"><code class="language-vue"><span class="line"><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF">&#x3C;</span><span style="--shiki-light:#E45649;--shiki-dark:#E06C75">template</span><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF">></span></span>
<span class="line"><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF">  &#x3C;</span><span style="--shiki-light:#E45649;--shiki-dark:#E06C75">div</span><span style="--shiki-light:#986801;--shiki-dark:#D19A66"> class</span><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF">=</span><span style="--shiki-light:#50A14F;--shiki-dark:#98C379">"post-card"</span><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF">></span></span>
<span class="line"><span style="--shiki-light:#A0A1A7;--shiki-light-font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic">    &#x3C;!-- 文章卡片的图片部分，如果文章有图片则显示 --></span></span>
<span class="line"><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF">    &#x3C;</span><span style="--shiki-light:#E45649;--shiki-dark:#E06C75">div</span><span style="--shiki-light:#986801;--shiki-dark:#D19A66"> class</span><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF">=</span><span style="--shiki-light:#50A14F;--shiki-dark:#98C379">"post-card-image"</span><span style="--shiki-light:#986801;--shiki-dark:#D19A66"> v-if</span><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF">=</span><span style="--shiki-light:#50A14F;--shiki-dark:#98C379">"post.image"</span><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF">></span></span>
<span class="line"><span style="--shiki-light:#A0A1A7;--shiki-light-font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic">      &#x3C;!-- 使用v-bind动态绑定图片的src和alt属性 --></span></span>
<span class="line"><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF">      &#x3C;</span><span style="--shiki-light:#E45649;--shiki-dark:#E06C75">img</span><span style="--shiki-light:#986801;--shiki-dark:#D19A66"> :src</span><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF">=</span><span style="--shiki-light:#50A14F;--shiki-dark:#98C379">"post.image"</span><span style="--shiki-light:#986801;--shiki-dark:#D19A66"> :alt</span><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF">=</span><span style="--shiki-light:#50A14F;--shiki-dark:#98C379">"post.title"</span><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF"> /></span></span>
<span class="line"><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF">    &#x3C;/</span><span style="--shiki-light:#E45649;--shiki-dark:#E06C75">div</span><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF">></span></span>
<span class="line"><span style="--shiki-light:#A0A1A7;--shiki-light-font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic">    &#x3C;!-- 文章卡片的内容部分 --></span></span>
<span class="line"><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF">    &#x3C;</span><span style="--shiki-light:#E45649;--shiki-dark:#E06C75">div</span><span style="--shiki-light:#986801;--shiki-dark:#D19A66"> class</span><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF">=</span><span style="--shiki-light:#50A14F;--shiki-dark:#98C379">"post-card-content"</span><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF">></span></span>
<span class="line"><span style="--shiki-light:#A0A1A7;--shiki-light-font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic">      &#x3C;!-- 文章标题 --></span></span>
<span class="line"><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF">      &#x3C;</span><span style="--shiki-light:#E45649;--shiki-dark:#E06C75">h3</span><span style="--shiki-light:#986801;--shiki-dark:#D19A66"> class</span><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF">=</span><span style="--shiki-light:#50A14F;--shiki-dark:#98C379">"post-card-title"</span><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF">>{{ post.title }}&#x3C;/</span><span style="--shiki-light:#E45649;--shiki-dark:#E06C75">h3</span><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF">></span></span>
<span class="line"><span style="--shiki-light:#A0A1A7;--shiki-light-font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic">      &#x3C;!-- 文章摘要，如果存在则显示 --></span></span>
<span class="line"><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF">      &#x3C;</span><span style="--shiki-light:#E45649;--shiki-dark:#E06C75">p</span><span style="--shiki-light:#986801;--shiki-dark:#D19A66"> class</span><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF">=</span><span style="--shiki-light:#50A14F;--shiki-dark:#98C379">"post-card-excerpt"</span><span style="--shiki-light:#986801;--shiki-dark:#D19A66"> v-if</span><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF">=</span><span style="--shiki-light:#50A14F;--shiki-dark:#98C379">"post.excerpt"</span><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF">>{{ post.excerpt }}&#x3C;/</span><span style="--shiki-light:#E45649;--shiki-dark:#E06C75">p</span><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF">></span></span>
<span class="line"><span style="--shiki-light:#A0A1A7;--shiki-light-font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic">      &#x3C;!-- 文章元信息区域 --></span></span>
<span class="line"><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF">      &#x3C;</span><span style="--shiki-light:#E45649;--shiki-dark:#E06C75">div</span><span style="--shiki-light:#986801;--shiki-dark:#D19A66"> class</span><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF">=</span><span style="--shiki-light:#50A14F;--shiki-dark:#98C379">"post-card-meta"</span><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF">></span></span>
<span class="line"><span style="--shiki-light:#A0A1A7;--shiki-light-font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic">        &#x3C;!-- 文章发布日期 --></span></span>
<span class="line"><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF">        &#x3C;</span><span style="--shiki-light:#E45649;--shiki-dark:#E06C75">span</span><span style="--shiki-light:#986801;--shiki-dark:#D19A66"> class</span><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF">=</span><span style="--shiki-light:#50A14F;--shiki-dark:#98C379">"post-card-date"</span><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF">>{{ formatDate(post.date) }}&#x3C;/</span><span style="--shiki-light:#E45649;--shiki-dark:#E06C75">span</span><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF">></span></span>
<span class="line"><span style="--shiki-light:#A0A1A7;--shiki-light-font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic">        &#x3C;!-- 文章作者，如果存在则显示 --></span></span>
<span class="line"><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF">        &#x3C;</span><span style="--shiki-light:#E45649;--shiki-dark:#E06C75">span</span><span style="--shiki-light:#986801;--shiki-dark:#D19A66"> v-if</span><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF">=</span><span style="--shiki-light:#50A14F;--shiki-dark:#98C379">"post.author"</span><span style="--shiki-light:#986801;--shiki-dark:#D19A66"> class</span><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF">=</span><span style="--shiki-light:#50A14F;--shiki-dark:#98C379">"post-card-author"</span></span>
<span class="line"><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF">          >by {{ post.author }}&#x3C;/</span><span style="--shiki-light:#E45649;--shiki-dark:#E06C75">span</span></span>
<span class="line"><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF">        ></span></span>
<span class="line"><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF">      &#x3C;/</span><span style="--shiki-light:#E45649;--shiki-dark:#E06C75">div</span><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF">></span></span>
<span class="line"><span style="--shiki-light:#A0A1A7;--shiki-light-font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic">      &#x3C;!-- 阅读更多链接 --></span></span>
<span class="line"><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF">      &#x3C;</span><span style="--shiki-light:#E45649;--shiki-dark:#E06C75">a</span><span style="--shiki-light:#986801;--shiki-dark:#D19A66"> :href</span><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF">=</span><span style="--shiki-light:#50A14F;--shiki-dark:#98C379">"post.link"</span><span style="--shiki-light:#986801;--shiki-dark:#D19A66"> class</span><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF">=</span><span style="--shiki-light:#50A14F;--shiki-dark:#98C379">"post-card-link"</span><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF">>阅读更多&#x3C;/</span><span style="--shiki-light:#E45649;--shiki-dark:#E06C75">a</span><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF">></span></span>
<span class="line"><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF">    &#x3C;/</span><span style="--shiki-light:#E45649;--shiki-dark:#E06C75">div</span><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF">></span></span>
<span class="line"><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF">  &#x3C;/</span><span style="--shiki-light:#E45649;--shiki-dark:#E06C75">div</span><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF">></span></span>
<span class="line"><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF">&#x3C;/</span><span style="--shiki-light:#E45649;--shiki-dark:#E06C75">template</span><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF">></span></span>
<span class="line"></span>
<span class="line"><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF">&#x3C;</span><span style="--shiki-light:#E45649;--shiki-dark:#E06C75">script</span><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF">></span></span>
<span class="line"><span style="--shiki-light:#A0A1A7;--shiki-light-font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic">// 导出组件定义</span></span>
<span class="line"><span style="--shiki-light:#A626A4;--shiki-dark:#C678DD">export</span><span style="--shiki-light:#E45649;--shiki-dark:#C678DD"> default</span><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF"> {</span></span>
<span class="line"><span style="--shiki-light:#A0A1A7;--shiki-light-font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic">  // 组件名称</span></span>
<span class="line"><span style="--shiki-light:#E45649;--shiki-dark:#E06C75">  name</span><span style="--shiki-light:#0184BC;--shiki-dark:#ABB2BF">:</span><span style="--shiki-light:#50A14F;--shiki-dark:#98C379"> 'PostCard'</span><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF">,</span></span>
<span class="line"><span style="--shiki-light:#A0A1A7;--shiki-light-font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic">  // 组件接收的属性:父组件调用子组件时传入具体数据</span></span>
<span class="line"><span style="--shiki-light:#E45649;--shiki-dark:#E06C75">  props</span><span style="--shiki-light:#0184BC;--shiki-dark:#ABB2BF">:</span><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF"> {</span></span>
<span class="line"><span style="--shiki-light:#E45649;--shiki-dark:#E06C75">    post</span><span style="--shiki-light:#0184BC;--shiki-dark:#ABB2BF">:</span><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF"> {</span></span>
<span class="line"><span style="--shiki-light:#A0A1A7;--shiki-light-font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic">      // Post属性类型为对象</span></span>
<span class="line"><span style="--shiki-light:#E45649;--shiki-dark:#E06C75">      type</span><span style="--shiki-light:#0184BC;--shiki-dark:#ABB2BF">:</span><span style="--shiki-light:#E45649;--shiki-dark:#E06C75"> Object</span><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF">,</span></span>
<span class="line"><span style="--shiki-light:#A0A1A7;--shiki-light-font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic">      // 本属性为必需</span></span>
<span class="line"><span style="--shiki-light:#E45649;--shiki-dark:#E06C75">      required</span><span style="--shiki-light:#0184BC;--shiki-dark:#ABB2BF">:</span><span style="--shiki-light:#986801;--shiki-dark:#D19A66"> true</span><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF">,</span></span>
<span class="line"><span style="--shiki-light:#A0A1A7;--shiki-light-font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic">      // 自定义验证函数，验证必需的属性</span></span>
<span class="line"><span style="--shiki-light:#4078F2;--shiki-dark:#61AFEF">      validator</span><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF">(</span><span style="--shiki-light:#383A42;--shiki-light-font-style:inherit;--shiki-dark:#E06C75;--shiki-dark-font-style:italic">value</span><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF">) {</span></span>
<span class="line"><span style="--shiki-light:#A626A4;--shiki-dark:#C678DD">        return</span><span style="--shiki-light:#0184BC;--shiki-dark:#C678DD"> typeof</span><span style="--shiki-light:#383A42;--shiki-dark:#E5C07B"> value</span><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF">.</span><span style="--shiki-light:#E45649;--shiki-dark:#E06C75">title</span><span style="--shiki-light:#0184BC;--shiki-dark:#56B6C2"> ===</span><span style="--shiki-light:#50A14F;--shiki-dark:#98C379"> 'string'</span><span style="--shiki-light:#0184BC;--shiki-dark:#56B6C2"> &#x26;&#x26;</span><span style="--shiki-light:#383A42;--shiki-dark:#E5C07B"> value</span><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF">.</span><span style="--shiki-light:#E45649;--shiki-dark:#E5C07B">title</span><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF">.</span><span style="--shiki-light:#E45649;--shiki-dark:#E06C75">length</span><span style="--shiki-light:#0184BC;--shiki-dark:#56B6C2"> ></span><span style="--shiki-light:#986801;--shiki-dark:#D19A66"> 0</span><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF">;</span></span>
<span class="line"><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF">      }</span></span>
<span class="line"><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF">    }</span></span>
<span class="line"><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF">  },</span></span>
<span class="line"><span style="--shiki-light:#A0A1A7;--shiki-light-font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic">  // 组件方法</span></span>
<span class="line"><span style="--shiki-light:#E45649;--shiki-dark:#E06C75">  methods</span><span style="--shiki-light:#0184BC;--shiki-dark:#ABB2BF">:</span><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF"> {</span></span>
<span class="line"><span style="--shiki-light:#A0A1A7;--shiki-light-font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic">    // 格式化日期的方法</span></span>
<span class="line"><span style="--shiki-light:#4078F2;--shiki-dark:#61AFEF">    formatDate</span><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF">(</span><span style="--shiki-light:#383A42;--shiki-light-font-style:inherit;--shiki-dark:#E06C75;--shiki-dark-font-style:italic">dateString</span><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF">) {</span></span>
<span class="line"><span style="--shiki-light:#A626A4;--shiki-dark:#C678DD">      const</span><span style="--shiki-light:#986801;--shiki-dark:#E5C07B"> options</span><span style="--shiki-light:#0184BC;--shiki-dark:#56B6C2"> =</span><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF"> { </span><span style="--shiki-light:#E45649;--shiki-dark:#E06C75">year</span><span style="--shiki-light:#0184BC;--shiki-dark:#ABB2BF">:</span><span style="--shiki-light:#50A14F;--shiki-dark:#98C379"> 'numeric'</span><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF">, </span><span style="--shiki-light:#E45649;--shiki-dark:#E06C75">month</span><span style="--shiki-light:#0184BC;--shiki-dark:#ABB2BF">:</span><span style="--shiki-light:#50A14F;--shiki-dark:#98C379"> 'long'</span><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF">, </span><span style="--shiki-light:#E45649;--shiki-dark:#E06C75">day</span><span style="--shiki-light:#0184BC;--shiki-dark:#ABB2BF">:</span><span style="--shiki-light:#50A14F;--shiki-dark:#98C379"> 'numeric'</span><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF"> });</span></span>
<span class="line"><span style="--shiki-light:#A626A4;--shiki-dark:#C678DD">      return</span><span style="--shiki-light:#A626A4;--shiki-dark:#C678DD"> new</span><span style="--shiki-light:#4078F2;--shiki-dark:#61AFEF"> Date</span><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF">(</span><span style="--shiki-light:#E45649;--shiki-dark:#E06C75">dateString</span><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF">).</span><span style="--shiki-light:#4078F2;--shiki-dark:#61AFEF">toLocaleDateString</span><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF">(</span><span style="--shiki-light:#50A14F;--shiki-dark:#98C379">'zh-CN'</span><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF">, </span><span style="--shiki-light:#E45649;--shiki-dark:#E06C75">options</span><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF">);</span></span>
<span class="line"><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF">    }</span></span>
<span class="line"><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF">  }</span></span>
<span class="line"><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF">}</span></span>
<span class="line"><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF">&#x3C;/</span><span style="--shiki-light:#E45649;--shiki-dark:#E06C75">script</span><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF">></span></span>
<span class="line"><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF">&#x3C;</span><span style="--shiki-light:#E45649;--shiki-dark:#E06C75">style</span><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF">></span></span>
<span class="line"><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF">// </span><span style="--shiki-light:#A626A4;--shiki-dark:#C678DD">略</span></span>
<span class="line"><span style="--shiki-light:#A626A4;--shiki-dark:#C678DD">&#x3C;</span><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF">/</span><span style="--shiki-light:#E45649;--shiki-dark:#E06C75">style</span><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF">></span></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><h3>3.2 组件列表示例</h3>
<p>该示例通过复用多个 <strong>博客文章卡片</strong> 实现文章列表的简单展示。</p>
<div style="border-style: solid; border-width: 2px; border-color: #96fffd;">
  
</div>
<p>该博客文章列表源码如下：</p>
<div class="language-vue line-numbers-mode" data-highlighter="shiki" data-ext="vue" style="--shiki-light:#383A42;--shiki-dark:#abb2bf;--shiki-light-bg:#FAFAFA;--shiki-dark-bg:#282c34"><pre class="shiki shiki-themes one-light one-dark-pro vp-code"><code class="language-vue"><span class="line"><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF">&#x3C;</span><span style="--shiki-light:#E45649;--shiki-dark:#E06C75">template</span><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF">></span></span>
<span class="line"><span style="--shiki-light:#A0A1A7;--shiki-light-font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic">  &#x3C;!-- 根元素：使用div容器包装整个博客文章列表 --></span></span>
<span class="line"><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF">  &#x3C;</span><span style="--shiki-light:#E45649;--shiki-dark:#E06C75">div</span><span style="--shiki-light:#986801;--shiki-dark:#D19A66"> class</span><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF">=</span><span style="--shiki-light:#50A14F;--shiki-dark:#98C379">"post-list"</span><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF">></span></span>
<span class="line"><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF">    &#x3C;</span><span style="--shiki-light:#E45649;--shiki-dark:#E06C75">h2</span><span style="--shiki-light:#986801;--shiki-dark:#D19A66"> class</span><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF">=</span><span style="--shiki-light:#50A14F;--shiki-dark:#98C379">"post-list-title"</span><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF">>博客文章&#x3C;/</span><span style="--shiki-light:#E45649;--shiki-dark:#E06C75">h2</span><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF">></span></span>
<span class="line"><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF">    &#x3C;</span><span style="--shiki-light:#E45649;--shiki-dark:#E06C75">div</span><span style="--shiki-light:#986801;--shiki-dark:#D19A66"> class</span><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF">=</span><span style="--shiki-light:#50A14F;--shiki-dark:#98C379">"post-list-container"</span><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF">></span></span>
<span class="line"><span style="--shiki-light:#A0A1A7;--shiki-light-font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic">      &#x3C;!-- 使用v-for指令遍历posts数组，为每个文章创建一个PostCard组件 --></span></span>
<span class="line"><span style="--shiki-light:#A0A1A7;--shiki-light-font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic">      &#x3C;!-- :key属性用于Vue的虚拟DOM diff算法，提高渲染性能 --></span></span>
<span class="line"><span style="--shiki-light:#A0A1A7;--shiki-light-font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic">      &#x3C;!-- :post属性将单个文章数据传递给PostCard组件 --></span></span>
<span class="line"><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF">      &#x3C;</span><span style="--shiki-light:#E45649;--shiki-dark:#E06C75">PostCard</span></span>
<span class="line"><span style="--shiki-light:#A626A4;--shiki-dark:#C678DD">        v-for</span><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF">=</span><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF">"</span><span style="--shiki-light:#383A42;--shiki-dark:#E06C75">post</span><span style="--shiki-light:#A626A4;--shiki-dark:#C678DD"> in</span><span style="--shiki-light:#383A42;--shiki-dark:#E06C75"> posts</span><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF">"</span></span>
<span class="line"><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF">        :</span><span style="--shiki-light:#986801;--shiki-dark:#D19A66">key</span><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF">=</span><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF">"</span><span style="--shiki-light:#383A42;--shiki-dark:#E5C07B">post</span><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF">.</span><span style="--shiki-light:#E45649;--shiki-dark:#E06C75">id</span><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF">"</span></span>
<span class="line"><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF">        :</span><span style="--shiki-light:#986801;--shiki-dark:#D19A66">post</span><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF">=</span><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF">"</span><span style="--shiki-light:#383A42;--shiki-dark:#E06C75">post</span><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF">"</span></span>
<span class="line"><span style="--shiki-light:#986801;--shiki-dark:#D19A66">        class</span><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF">=</span><span style="--shiki-light:#50A14F;--shiki-dark:#98C379">"post-list-item"</span></span>
<span class="line"><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF">      /></span></span>
<span class="line"><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF">    &#x3C;/</span><span style="--shiki-light:#E45649;--shiki-dark:#E06C75">div</span><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF">></span></span>
<span class="line"><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF">  &#x3C;/</span><span style="--shiki-light:#E45649;--shiki-dark:#E06C75">div</span><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF">></span></span>
<span class="line"><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF">&#x3C;/</span><span style="--shiki-light:#E45649;--shiki-dark:#E06C75">template</span><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF">></span></span>
<span class="line"></span>
<span class="line"><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF">&#x3C;</span><span style="--shiki-light:#E45649;--shiki-dark:#E06C75">script</span><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF">></span></span>
<span class="line"><span style="--shiki-light:#A0A1A7;--shiki-light-font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic">// 导入PostCard组件</span></span>
<span class="line"><span style="--shiki-light:#A626A4;--shiki-dark:#C678DD">import</span><span style="--shiki-light:#E45649;--shiki-dark:#E06C75"> PostCard</span><span style="--shiki-light:#A626A4;--shiki-dark:#C678DD"> from</span><span style="--shiki-light:#50A14F;--shiki-dark:#98C379"> "./PostCard.vue"</span><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF">;</span></span>
<span class="line"></span>
<span class="line"><span style="--shiki-light:#A0A1A7;--shiki-light-font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic">// 默认导出Vue组件配置对象</span></span>
<span class="line"><span style="--shiki-light:#A626A4;--shiki-dark:#C678DD">export</span><span style="--shiki-light:#E45649;--shiki-dark:#C678DD"> default</span><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF"> {</span></span>
<span class="line"><span style="--shiki-light:#A0A1A7;--shiki-light-font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic">  // 本组件名称</span></span>
<span class="line"><span style="--shiki-light:#E45649;--shiki-dark:#E06C75">  name</span><span style="--shiki-light:#0184BC;--shiki-dark:#ABB2BF">:</span><span style="--shiki-light:#50A14F;--shiki-dark:#98C379"> "PostList"</span><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF">,</span></span>
<span class="line"><span style="--shiki-light:#A0A1A7;--shiki-light-font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic">  // 注册子组件，使PostCard可以在模板中使用</span></span>
<span class="line"><span style="--shiki-light:#E45649;--shiki-dark:#E06C75">  components</span><span style="--shiki-light:#0184BC;--shiki-dark:#ABB2BF">:</span><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF"> {</span></span>
<span class="line"><span style="--shiki-light:#E45649;--shiki-dark:#E06C75">    PostCard</span><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF">,</span></span>
<span class="line"><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF">  },</span></span>
<span class="line"><span style="--shiki-light:#A0A1A7;--shiki-light-font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic">  // 定义组件的数据属性</span></span>
<span class="line"><span style="--shiki-light:#4078F2;--shiki-dark:#61AFEF">  data</span><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF">() {</span></span>
<span class="line"><span style="--shiki-light:#A0A1A7;--shiki-light-font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic">    // 返回一个对象，包含所有PostCard组件所需的所有响应式数据</span></span>
<span class="line"><span style="--shiki-light:#A626A4;--shiki-dark:#C678DD">    return</span><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF"> {</span></span>
<span class="line"><span style="--shiki-light:#A0A1A7;--shiki-light-font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic">      // posts数组包含所有要显示的博客文章信息</span></span>
<span class="line"><span style="--shiki-light:#E45649;--shiki-dark:#E06C75">      posts</span><span style="--shiki-light:#0184BC;--shiki-dark:#ABB2BF">:</span><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF"> [</span></span>
<span class="line"><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF">        {</span></span>
<span class="line"><span style="--shiki-light:#E45649;--shiki-dark:#E06C75">          id</span><span style="--shiki-light:#0184BC;--shiki-dark:#ABB2BF">:</span><span style="--shiki-light:#986801;--shiki-dark:#D19A66"> 1</span><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF">, </span><span style="--shiki-light:#A0A1A7;--shiki-light-font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic">// 文章唯一标识符</span></span>
<span class="line"><span style="--shiki-light:#E45649;--shiki-dark:#E06C75">          title</span><span style="--shiki-light:#0184BC;--shiki-dark:#ABB2BF">:</span><span style="--shiki-light:#50A14F;--shiki-dark:#98C379"> "Vue组件化开发实践"</span><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF">,</span></span>
<span class="line"><span style="--shiki-light:#E45649;--shiki-dark:#E06C75">          excerpt</span><span style="--shiki-light:#0184BC;--shiki-dark:#ABB2BF">:</span></span>
<span class="line"><span style="--shiki-light:#50A14F;--shiki-dark:#98C379">            "深入探讨Vue中的组件化开发思想和实践方法，以及如何构建可复用的组件。"</span><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF">,</span></span>
<span class="line"><span style="--shiki-light:#E45649;--shiki-dark:#E06C75">          date</span><span style="--shiki-light:#0184BC;--shiki-dark:#ABB2BF">:</span><span style="--shiki-light:#50A14F;--shiki-dark:#98C379"> "2025-08-10"</span><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF">,</span></span>
<span class="line"><span style="--shiki-light:#E45649;--shiki-dark:#E06C75">          author</span><span style="--shiki-light:#0184BC;--shiki-dark:#ABB2BF">:</span><span style="--shiki-light:#50A14F;--shiki-dark:#98C379"> "带着黄昏出逃"</span><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF">,</span></span>
<span class="line"><span style="--shiki-light:#E45649;--shiki-dark:#E06C75">          link</span><span style="--shiki-light:#0184BC;--shiki-dark:#ABB2BF">:</span><span style="--shiki-light:#50A14F;--shiki-dark:#98C379"> "/posts/vue3/2.html"</span><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF">,</span></span>
<span class="line"><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF">        },</span></span>
<span class="line"><span style="--shiki-light:#A0A1A7;--shiki-light-font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic">        // 略</span></span>
<span class="line"><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF">      ],</span></span>
<span class="line"><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF">    };</span></span>
<span class="line"><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF">  },</span></span>
<span class="line"><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF">};</span></span>
<span class="line"><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF">&#x3C;/</span><span style="--shiki-light:#E45649;--shiki-dark:#E06C75">script</span><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF">></span></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><h3>3.3 带搜索功能的组件列表</h3>
<div style="border-style: solid; border-width: 2px; border-color: #96fffd;">

</div>
该示例只是在上一个示例的基础上增加计算属性**computed**来描述筛选的响应式状态的逻辑处理，篇幅所限不再附着代码
<h2>4.组件通信</h2>
<p>Vue 组件之间可以通过以下方式进行通信：</p>
<h3>4.1. Props（父组件向子组件传递数据）</h3>

<p>通常情况下，当我们需要从父组件向子组件传递数据时，会使用 props。想象一下这样的结构：有一些多层级嵌套的组件，形成了一棵巨大的组件树，而某个深层的子组件需要一个较远的祖先组件中的部分数据。在这种情况下，如果仅使用 props 则必须将其沿着组件链逐级传递下去，这会非常麻烦：</p>
<figure><figcaption>props的逐级透穿</figcaption></figure>
<p>注意，虽然这里的<strong>Footer</strong>组件可能根本不需要这些 props，但为了使<strong>DeepChild</strong>能访问到它们，仍然需要定义并向下传递。如果组件链路非常长，可能会影响到更多这条路上的组件。这一问题被称为“prop 逐级透传”，显然是我们希望尽量避免的情况。</p>
<div class="hint-container tip">
<p class="hint-container-title">提示</p>
<p>具体如何解决该问题，我有空再说~</p>
</div>
<h3>4.2. Events（子组件向父组件传递消息）</h3>

<h2>5.总结</h2>
<p>组件化开发是 Vue 的核心特性之一，它让前端开发变得更加模块化和可维护。通过将界面拆分为独立的组件，我们可以：</p>
<ul>
<li>提高代码的可复用性</li>
<li>降低系统的耦合度</li>
<li>提升开发效率</li>
<li>便于团队协作</li>
</ul>
<p>在实际项目中，合理地划分组件边界和设计组件接口是组件化开发的关键。</p>
]]></content>
    <category term="前端"/>
    <published>2022-01-06T00:00:00.000Z</published>
  </entry>
  <entry>
    <title type="text">在Vue 3中使用ECharts进行数据可视化</title>
    <id>https://giser.date/posts/vue3/3.html</id>
    <link href="https://giser.date/posts/vue3/3.html"/>
    <updated>2025-08-19T04:16:02.000Z</updated>
    <summary type="html"><![CDATA[
<p>在现代前端开发中，数据可视化是一个非常重要的功能。ECharts是一个由百度开发的强大的开源可视化库，它可以帮助我们轻松地创建各种图表。本文将介绍如何在Vue 3项目中使用ECharts，并结合一个油井产量趋势分析案例来展示其用法。</p>
<h2>1.为什么选择ECharts？</h2>
<p>ECharts提供了丰富的图表类型，包括折线图、柱状图、饼图、散点图等，具有以下优势：</p>
<ul>
<li><strong>功能强大</strong>：支持多种图表类型和复杂的交互操作</li>
<li><strong>高度可定制</strong>：几乎每个图表元素都可以自定义</li>
<li><strong>性能优秀</strong>：能处理大量数据并保持流畅的渲染</li>
<li><strong>社区活跃</strong>：由Apache孵化，拥有庞大的用户社区</li>
</ul>]]></summary>
    <content type="html"><![CDATA[
<p>在现代前端开发中，数据可视化是一个非常重要的功能。ECharts是一个由百度开发的强大的开源可视化库，它可以帮助我们轻松地创建各种图表。本文将介绍如何在Vue 3项目中使用ECharts，并结合一个油井产量趋势分析案例来展示其用法。</p>
<h2>1.为什么选择ECharts？</h2>
<p>ECharts提供了丰富的图表类型，包括折线图、柱状图、饼图、散点图等，具有以下优势：</p>
<ul>
<li><strong>功能强大</strong>：支持多种图表类型和复杂的交互操作</li>
<li><strong>高度可定制</strong>：几乎每个图表元素都可以自定义</li>
<li><strong>性能优秀</strong>：能处理大量数据并保持流畅的渲染</li>
<li><strong>社区活跃</strong>：由Apache孵化，拥有庞大的用户社区</li>
</ul>
<h2>2.安装和配置</h2>
<p>首先，我们需要安装ECharts：</p>

<h2>3.基础用法</h2>
<h3>3.1 按需引入</h3>
<p>为了减小打包体积，我们可以按需引入ECharts组件：</p>
<div class="language-javascript line-numbers-mode" data-highlighter="shiki" data-ext="javascript" style="--shiki-light:#383A42;--shiki-dark:#abb2bf;--shiki-light-bg:#FAFAFA;--shiki-dark-bg:#282c34"><pre class="shiki shiki-themes one-light one-dark-pro vp-code"><code class="language-javascript"><span class="line"><span style="--shiki-light:#A626A4;--shiki-dark:#C678DD">import</span><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF"> { </span><span style="--shiki-light:#E45649;--shiki-dark:#E06C75">use</span><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF">, </span><span style="--shiki-light:#E45649;--shiki-dark:#E06C75">init</span><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF"> } </span><span style="--shiki-light:#A626A4;--shiki-dark:#C678DD">from</span><span style="--shiki-light:#50A14F;--shiki-dark:#98C379"> 'echarts/core'</span><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF">;</span></span>
<span class="line"><span style="--shiki-light:#A626A4;--shiki-dark:#C678DD">import</span><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF"> { </span><span style="--shiki-light:#E45649;--shiki-dark:#E06C75">CanvasRenderer</span><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF"> } </span><span style="--shiki-light:#A626A4;--shiki-dark:#C678DD">from</span><span style="--shiki-light:#50A14F;--shiki-dark:#98C379"> 'echarts/renderers'</span><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF">;</span></span>
<span class="line"><span style="--shiki-light:#A626A4;--shiki-dark:#C678DD">import</span><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF"> { </span><span style="--shiki-light:#E45649;--shiki-dark:#E06C75">LineChart</span><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF"> } </span><span style="--shiki-light:#A626A4;--shiki-dark:#C678DD">from</span><span style="--shiki-light:#50A14F;--shiki-dark:#98C379"> 'echarts/charts'</span><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF">;</span></span>
<span class="line"><span style="--shiki-light:#A626A4;--shiki-dark:#C678DD">import</span><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF"> { </span><span style="--shiki-light:#E45649;--shiki-dark:#E06C75">GridComponent</span><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF">, </span><span style="--shiki-light:#E45649;--shiki-dark:#E06C75">TooltipComponent</span><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF"> } </span><span style="--shiki-light:#A626A4;--shiki-dark:#C678DD">from</span><span style="--shiki-light:#50A14F;--shiki-dark:#98C379"> 'echarts/components'</span><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF">;</span></span>
<span class="line"></span>
<span class="line"><span style="--shiki-light:#A0A1A7;--shiki-light-font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic">// 注册所需组件</span></span>
<span class="line"><span style="--shiki-light:#4078F2;--shiki-dark:#61AFEF">use</span><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF">([</span><span style="--shiki-light:#383A42;--shiki-dark:#E06C75">CanvasRenderer</span><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF">, </span><span style="--shiki-light:#383A42;--shiki-dark:#E06C75">LineChart</span><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF">, </span><span style="--shiki-light:#383A42;--shiki-dark:#E06C75">GridComponent</span><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF">, </span><span style="--shiki-light:#383A42;--shiki-dark:#E06C75">TooltipComponent</span><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF">]);</span></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><h3>3.2 初始化图表</h3>
<div class="language-javascript line-numbers-mode" data-highlighter="shiki" data-ext="javascript" style="--shiki-light:#383A42;--shiki-dark:#abb2bf;--shiki-light-bg:#FAFAFA;--shiki-dark-bg:#282c34"><pre class="shiki shiki-themes one-light one-dark-pro vp-code"><code class="language-javascript"><span class="line"><span style="--shiki-light:#A0A1A7;--shiki-light-font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic">// 创建图表实例</span></span>
<span class="line"><span style="--shiki-light:#A626A4;--shiki-dark:#C678DD">const</span><span style="--shiki-light:#986801;--shiki-dark:#E5C07B"> chart</span><span style="--shiki-light:#0184BC;--shiki-dark:#56B6C2"> =</span><span style="--shiki-light:#4078F2;--shiki-dark:#61AFEF"> init</span><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF">(</span><span style="--shiki-light:#383A42;--shiki-dark:#E5C07B">chartDom</span><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF">.</span><span style="--shiki-light:#E45649;--shiki-dark:#E06C75">value</span><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF">, </span><span style="--shiki-light:#986801;--shiki-dark:#D19A66">null</span><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF">, { </span><span style="--shiki-light:#E45649;--shiki-dark:#E06C75">renderer</span><span style="--shiki-light:#0184BC;--shiki-dark:#ABB2BF">:</span><span style="--shiki-light:#50A14F;--shiki-dark:#98C379"> 'canvas'</span><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF"> });</span></span>
<span class="line"></span>
<span class="line"><span style="--shiki-light:#A0A1A7;--shiki-light-font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic">// 设置图表配置</span></span>
<span class="line"><span style="--shiki-light:#A626A4;--shiki-dark:#C678DD">const</span><span style="--shiki-light:#986801;--shiki-dark:#E5C07B"> option</span><span style="--shiki-light:#0184BC;--shiki-dark:#56B6C2"> =</span><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF"> {</span></span>
<span class="line"><span style="--shiki-light:#A0A1A7;--shiki-light-font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic">  // 图表配置项</span></span>
<span class="line"><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF">};</span></span>
<span class="line"></span>
<span class="line"><span style="--shiki-light:#A0A1A7;--shiki-light-font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic">// 应用配置</span></span>
<span class="line"><span style="--shiki-light:#383A42;--shiki-dark:#E5C07B">chart</span><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF">.</span><span style="--shiki-light:#4078F2;--shiki-dark:#61AFEF">setOption</span><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF">(</span><span style="--shiki-light:#383A42;--shiki-dark:#E06C75">option</span><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF">);</span></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><h2>4.实际案例：油井产量趋势分析</h2>
<p>下面是一个完整的油井产量趋势分析图表组件示例：</p>
<p>如上图所示，我们创建了一个交互式的折线图，可以：</p>
<ol>
<li>从下拉列表中选择不同的油井</li>
<li>查看该油井的日产油量趋势</li>
<li>使用数据缩放功能查看特定时间段的数据</li>
<li>悬停查看具体数值</li>
</ol>
<h3>4.1组件实现要点</h3>
<h4>4.1.1模板部分</h4>
<div class="language-vue line-numbers-mode" data-highlighter="shiki" data-ext="vue" style="--shiki-light:#383A42;--shiki-dark:#abb2bf;--shiki-light-bg:#FAFAFA;--shiki-dark-bg:#282c34"><pre class="shiki shiki-themes one-light one-dark-pro vp-code"><code class="language-vue"><span class="line"><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF">&#x3C;</span><span style="--shiki-light:#E45649;--shiki-dark:#E06C75">template</span><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF">></span></span>
<span class="line"><span style="--shiki-light:#A0A1A7;--shiki-light-font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic">  &#x3C;!-- 图表容器，包含整个组件的UI --></span></span>
<span class="line"><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF">  &#x3C;</span><span style="--shiki-light:#E45649;--shiki-dark:#E06C75">div</span><span style="--shiki-light:#986801;--shiki-dark:#D19A66"> class</span><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF">=</span><span style="--shiki-light:#50A14F;--shiki-dark:#98C379">"oil-chart-container"</span><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF">></span></span>
<span class="line"><span style="--shiki-light:#A0A1A7;--shiki-light-font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic">    &#x3C;!-- 图表控制区域，包含标题和选择器 --></span></span>
<span class="line"><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF">    &#x3C;</span><span style="--shiki-light:#E45649;--shiki-dark:#E06C75">div</span><span style="--shiki-light:#986801;--shiki-dark:#D19A66"> class</span><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF">=</span><span style="--shiki-light:#50A14F;--shiki-dark:#98C379">"chart-controls"</span><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF">></span></span>
<span class="line"><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF">      &#x3C;</span><span style="--shiki-light:#E45649;--shiki-dark:#E06C75">h2</span><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF">>日产油量趋势分析&#x3C;/</span><span style="--shiki-light:#E45649;--shiki-dark:#E06C75">h2</span><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF">></span></span>
<span class="line"><span style="--shiki-light:#A0A1A7;--shiki-light-font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic">      &#x3C;!-- 筛选控件组 --></span></span>
<span class="line"><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF">      &#x3C;</span><span style="--shiki-light:#E45649;--shiki-dark:#E06C75">div</span><span style="--shiki-light:#986801;--shiki-dark:#D19A66"> class</span><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF">=</span><span style="--shiki-light:#50A14F;--shiki-dark:#98C379">"filter-group"</span><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF">></span></span>
<span class="line"><span style="--shiki-light:#A0A1A7;--shiki-light-font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic">        &#x3C;!-- 井号选择器标签 --></span></span>
<span class="line"><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF">        &#x3C;</span><span style="--shiki-light:#E45649;--shiki-dark:#E06C75">label</span><span style="--shiki-light:#986801;--shiki-dark:#D19A66"> for</span><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF">=</span><span style="--shiki-light:#50A14F;--shiki-dark:#98C379">"wellIdSelect"</span><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF">>选择井号ID：&#x3C;/</span><span style="--shiki-light:#E45649;--shiki-dark:#E06C75">label</span><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF">></span></span>
<span class="line"><span style="--shiki-light:#A0A1A7;--shiki-light-font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic">        &#x3C;!-- 井号选择下拉框 --></span></span>
<span class="line"><span style="--shiki-light:#A0A1A7;--shiki-light-font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic">        &#x3C;!-- 使用v-model进行双向数据绑定到selectedWellId --></span></span>
<span class="line"><span style="--shiki-light:#A0A1A7;--shiki-light-font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic">        &#x3C;!-- @change监听选择变化事件，触发loadWellData方法 --></span></span>
<span class="line"><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF">        &#x3C;</span><span style="--shiki-light:#E45649;--shiki-dark:#E06C75">select</span><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF"> </span></span>
<span class="line"><span style="--shiki-light:#986801;--shiki-dark:#D19A66">          id</span><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF">=</span><span style="--shiki-light:#50A14F;--shiki-dark:#98C379">"wellIdSelect"</span><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF"> </span></span>
<span class="line"><span style="--shiki-light:#986801;--shiki-dark:#D19A66">          v-model</span><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF">=</span><span style="--shiki-light:#50A14F;--shiki-dark:#98C379">"selectedWellId"</span><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF"> </span></span>
<span class="line"><span style="--shiki-light:#986801;--shiki-dark:#D19A66">          @change</span><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF">=</span><span style="--shiki-light:#50A14F;--shiki-dark:#98C379">"loadWellData"</span></span>
<span class="line"><span style="--shiki-light:#986801;--shiki-dark:#D19A66">          class</span><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF">=</span><span style="--shiki-light:#50A14F;--shiki-dark:#98C379">"well-select"</span></span>
<span class="line"><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF">        ></span></span>
<span class="line"><span style="--shiki-light:#A0A1A7;--shiki-light-font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic">          &#x3C;!-- 默认选项 --></span></span>
<span class="line"><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF">          &#x3C;</span><span style="--shiki-light:#E45649;--shiki-dark:#E06C75">option</span><span style="--shiki-light:#986801;--shiki-dark:#D19A66"> value</span><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF">=</span><span style="--shiki-light:#50A14F;--shiki-dark:#98C379">""</span><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF">>-- 请选择井号 --&#x3C;/</span><span style="--shiki-light:#E45649;--shiki-dark:#E06C75">option</span><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF">></span></span>
<span class="line"><span style="--shiki-light:#A0A1A7;--shiki-light-font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic">          &#x3C;!-- 使用v-for循环渲染井列表 --></span></span>
<span class="line"><span style="--shiki-light:#A0A1A7;--shiki-light-font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic">          &#x3C;!-- :key提供Vue追踪列表的唯一标识 --></span></span>
<span class="line"><span style="--shiki-light:#A0A1A7;--shiki-light-font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic">          &#x3C;!-- :value绑定选项的值为井号ID --></span></span>
<span class="line"><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF">          &#x3C;</span><span style="--shiki-light:#E45649;--shiki-dark:#E06C75">option</span><span style="--shiki-light:#986801;--shiki-dark:#D19A66"> v-for</span><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF">=</span><span style="--shiki-light:#50A14F;--shiki-dark:#98C379">"well in wellList"</span><span style="--shiki-light:#986801;--shiki-dark:#D19A66"> :key</span><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF">=</span><span style="--shiki-light:#50A14F;--shiki-dark:#98C379">"well.jhId"</span><span style="--shiki-light:#986801;--shiki-dark:#D19A66"> :value</span><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF">=</span><span style="--shiki-light:#50A14F;--shiki-dark:#98C379">"well.jhId"</span><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF">></span></span>
<span class="line"><span style="--shiki-light:#A0A1A7;--shiki-light-font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic">            &#x3C;!-- 显示井号ID和井名 --></span></span>
<span class="line"><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF">            {{ well.jhId }} ({{ well.jh }})</span></span>
<span class="line"><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF">          &#x3C;/</span><span style="--shiki-light:#E45649;--shiki-dark:#E06C75">option</span><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF">></span></span>
<span class="line"><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF">        &#x3C;/</span><span style="--shiki-light:#E45649;--shiki-dark:#E06C75">select</span><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF">></span></span>
<span class="line"><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF">      &#x3C;/</span><span style="--shiki-light:#E45649;--shiki-dark:#E06C75">div</span><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF">></span></span>
<span class="line"><span style="--shiki-light:#A0A1A7;--shiki-light-font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic">      &#x3C;!-- 加载指示器，当isLoading为true时显示 --></span></span>
<span class="line"><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF">      &#x3C;</span><span style="--shiki-light:#E45649;--shiki-dark:#E06C75">div</span><span style="--shiki-light:#986801;--shiki-dark:#D19A66"> class</span><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF">=</span><span style="--shiki-light:#50A14F;--shiki-dark:#98C379">"loading-indicator"</span><span style="--shiki-light:#986801;--shiki-dark:#D19A66"> v-if</span><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF">=</span><span style="--shiki-light:#50A14F;--shiki-dark:#98C379">"isLoading"</span><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF">></span></span>
<span class="line"><span style="--shiki-light:#A0A1A7;--shiki-light-font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic">        &#x3C;!-- 旋转动画span元素 --></span></span>
<span class="line"><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF">        &#x3C;</span><span style="--shiki-light:#E45649;--shiki-dark:#E06C75">span</span><span style="--shiki-light:#986801;--shiki-dark:#D19A66"> class</span><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF">=</span><span style="--shiki-light:#50A14F;--shiki-dark:#98C379">"spinner"</span><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF">>&#x3C;/</span><span style="--shiki-light:#E45649;--shiki-dark:#E06C75">span</span><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF">> 数据加载中...</span></span>
<span class="line"><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF">      &#x3C;/</span><span style="--shiki-light:#E45649;--shiki-dark:#E06C75">div</span><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF">></span></span>
<span class="line"><span style="--shiki-light:#A0A1A7;--shiki-light-font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic">      &#x3C;!-- 错误信息显示区域，当errorMessage有值时显示 --></span></span>
<span class="line"><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF">      &#x3C;</span><span style="--shiki-light:#E45649;--shiki-dark:#E06C75">div</span><span style="--shiki-light:#986801;--shiki-dark:#D19A66"> v-if</span><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF">=</span><span style="--shiki-light:#50A14F;--shiki-dark:#98C379">"errorMessage"</span><span style="--shiki-light:#986801;--shiki-dark:#D19A66"> class</span><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF">=</span><span style="--shiki-light:#50A14F;--shiki-dark:#98C379">"error-message"</span><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF">>{{ errorMessage }}&#x3C;/</span><span style="--shiki-light:#E45649;--shiki-dark:#E06C75">div</span><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF">></span></span>
<span class="line"><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF">    &#x3C;/</span><span style="--shiki-light:#E45649;--shiki-dark:#E06C75">div</span><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF">></span></span>
<span class="line"><span style="--shiki-light:#A0A1A7;--shiki-light-font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic">    &#x3C;!-- 图表包装器 --></span></span>
<span class="line"><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF">    &#x3C;</span><span style="--shiki-light:#E45649;--shiki-dark:#E06C75">div</span><span style="--shiki-light:#986801;--shiki-dark:#D19A66"> class</span><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF">=</span><span style="--shiki-light:#50A14F;--shiki-dark:#98C379">"chart-wrapper"</span><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF">></span></span>
<span class="line"><span style="--shiki-light:#A0A1A7;--shiki-light-font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic">      &#x3C;!-- 图表区域，通过ref引用DOM元素 --></span></span>
<span class="line"><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF">      &#x3C;</span><span style="--shiki-light:#E45649;--shiki-dark:#E06C75">div</span><span style="--shiki-light:#986801;--shiki-dark:#D19A66"> ref</span><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF">=</span><span style="--shiki-light:#50A14F;--shiki-dark:#98C379">"chartDom"</span><span style="--shiki-light:#986801;--shiki-dark:#D19A66"> class</span><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF">=</span><span style="--shiki-light:#50A14F;--shiki-dark:#98C379">"chart-area"</span><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF">>&#x3C;/</span><span style="--shiki-light:#E45649;--shiki-dark:#E06C75">div</span><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF">></span></span>
<span class="line"><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF">    &#x3C;/</span><span style="--shiki-light:#E45649;--shiki-dark:#E06C75">div</span><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF">></span></span>
<span class="line"><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF">  &#x3C;/</span><span style="--shiki-light:#E45649;--shiki-dark:#E06C75">div</span><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF">></span></span>
<span class="line"><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF">&#x3C;/</span><span style="--shiki-light:#E45649;--shiki-dark:#E06C75">template</span><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF">></span></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><h4>4.1.2脚本部分</h4>
<div class="language-vue line-numbers-mode" data-highlighter="shiki" data-ext="vue" style="--shiki-light:#383A42;--shiki-dark:#abb2bf;--shiki-light-bg:#FAFAFA;--shiki-dark-bg:#282c34"><pre class="shiki shiki-themes one-light one-dark-pro vp-code"><code class="language-vue"><span class="line"><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF">&#x3C;</span><span style="--shiki-light:#E45649;--shiki-dark:#E06C75">script</span><span style="--shiki-light:#986801;--shiki-dark:#D19A66"> setup</span><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF">></span></span>
<span class="line"><span style="--shiki-light:#A0A1A7;--shiki-light-font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic">// 从Vue导入响应式API和生命周期钩子</span></span>
<span class="line"><span style="--shiki-light:#A626A4;--shiki-dark:#C678DD">import</span><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF"> { </span><span style="--shiki-light:#E45649;--shiki-dark:#E06C75">ref</span><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF">, </span><span style="--shiki-light:#E45649;--shiki-dark:#E06C75">onMounted</span><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF">, </span><span style="--shiki-light:#E45649;--shiki-dark:#E06C75">watch</span><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF">, </span><span style="--shiki-light:#E45649;--shiki-dark:#E06C75">onUnmounted</span><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF"> } </span><span style="--shiki-light:#A626A4;--shiki-dark:#C678DD">from</span><span style="--shiki-light:#50A14F;--shiki-dark:#98C379"> 'vue'</span><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF">;</span></span>
<span class="line"></span>
<span class="line"><span style="--shiki-light:#A0A1A7;--shiki-light-font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic">// 从ECharts核心模块导入use和init函数</span></span>
<span class="line"><span style="--shiki-light:#A626A4;--shiki-dark:#C678DD">import</span><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF"> { </span><span style="--shiki-light:#E45649;--shiki-dark:#E06C75">use</span><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF">, </span><span style="--shiki-light:#E45649;--shiki-dark:#E06C75">init</span><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF"> } </span><span style="--shiki-light:#A626A4;--shiki-dark:#C678DD">from</span><span style="--shiki-light:#50A14F;--shiki-dark:#98C379"> 'echarts/core'</span><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF">;</span></span>
<span class="line"></span>
<span class="line"><span style="--shiki-light:#A0A1A7;--shiki-light-font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic">// 从ECharts渲染器模块导入Canvas渲染器</span></span>
<span class="line"><span style="--shiki-light:#A626A4;--shiki-dark:#C678DD">import</span><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF"> { </span><span style="--shiki-light:#E45649;--shiki-dark:#E06C75">CanvasRenderer</span><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF"> } </span><span style="--shiki-light:#A626A4;--shiki-dark:#C678DD">from</span><span style="--shiki-light:#50A14F;--shiki-dark:#98C379"> 'echarts/renderers'</span><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF">;</span></span>
<span class="line"></span>
<span class="line"><span style="--shiki-light:#A0A1A7;--shiki-light-font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic">// 从ECharts图表模块导入折线图</span></span>
<span class="line"><span style="--shiki-light:#A626A4;--shiki-dark:#C678DD">import</span><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF"> { </span><span style="--shiki-light:#E45649;--shiki-dark:#E06C75">LineChart</span><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF"> } </span><span style="--shiki-light:#A626A4;--shiki-dark:#C678DD">from</span><span style="--shiki-light:#50A14F;--shiki-dark:#98C379"> 'echarts/charts'</span><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF">;</span></span>
<span class="line"></span>
<span class="line"><span style="--shiki-light:#A0A1A7;--shiki-light-font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic">// 从ECharts组件模块导入网格和提示框组件</span></span>
<span class="line"><span style="--shiki-light:#A626A4;--shiki-dark:#C678DD">import</span><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF"> { </span><span style="--shiki-light:#E45649;--shiki-dark:#E06C75">GridComponent</span><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF">, </span><span style="--shiki-light:#E45649;--shiki-dark:#E06C75">TooltipComponent</span><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF"> } </span><span style="--shiki-light:#A626A4;--shiki-dark:#C678DD">from</span><span style="--shiki-light:#50A14F;--shiki-dark:#98C379"> 'echarts/components'</span><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF">;</span></span>
<span class="line"></span>
<span class="line"><span style="--shiki-light:#A0A1A7;--shiki-light-font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic">// 导入完整的ECharts库，用于图形相关功能</span></span>
<span class="line"><span style="--shiki-light:#A626A4;--shiki-dark:#C678DD">import</span><span style="--shiki-light:#E45649;--shiki-dark:#D19A66"> *</span><span style="--shiki-light:#383A42;--shiki-dark:#C678DD"> as</span><span style="--shiki-light:#E45649;--shiki-dark:#E06C75"> echarts</span><span style="--shiki-light:#A626A4;--shiki-dark:#C678DD"> from</span><span style="--shiki-light:#50A14F;--shiki-dark:#98C379"> 'echarts'</span><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF">;</span></span>
<span class="line"></span>
<span class="line"><span style="--shiki-light:#A0A1A7;--shiki-light-font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic">// 导入axios用于HTTP请求</span></span>
<span class="line"><span style="--shiki-light:#A626A4;--shiki-dark:#C678DD">import</span><span style="--shiki-light:#E45649;--shiki-dark:#E06C75"> axios</span><span style="--shiki-light:#A626A4;--shiki-dark:#C678DD"> from</span><span style="--shiki-light:#50A14F;--shiki-dark:#98C379"> 'axios'</span><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF">;</span></span>
<span class="line"></span>
<span class="line"><span style="--shiki-light:#A0A1A7;--shiki-light-font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic">// 注册ECharts所需组件，按需引入以减小打包体积</span></span>
<span class="line"><span style="--shiki-light:#4078F2;--shiki-dark:#61AFEF">use</span><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF">([</span><span style="--shiki-light:#383A42;--shiki-dark:#E06C75">CanvasRenderer</span><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF">, </span><span style="--shiki-light:#383A42;--shiki-dark:#E06C75">LineChart</span><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF">, </span><span style="--shiki-light:#383A42;--shiki-dark:#E06C75">GridComponent</span><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF">, </span><span style="--shiki-light:#383A42;--shiki-dark:#E06C75">TooltipComponent</span><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF">]);</span></span>
<span class="line"></span>
<span class="line"><span style="--shiki-light:#A0A1A7;--shiki-light-font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic">// 创建响应式引用变量</span></span>
<span class="line"><span style="--shiki-light:#A0A1A7;--shiki-light-font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic">// 图表DOM元素引用</span></span>
<span class="line"><span style="--shiki-light:#A626A4;--shiki-dark:#C678DD">const</span><span style="--shiki-light:#986801;--shiki-dark:#E5C07B"> chartDom</span><span style="--shiki-light:#0184BC;--shiki-dark:#56B6C2"> =</span><span style="--shiki-light:#4078F2;--shiki-dark:#61AFEF"> ref</span><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF">(</span><span style="--shiki-light:#986801;--shiki-dark:#D19A66">null</span><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF">);</span></span>
<span class="line"><span style="--shiki-light:#A0A1A7;--shiki-light-font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic">// 图表实例引用</span></span>
<span class="line"><span style="--shiki-light:#A626A4;--shiki-dark:#C678DD">const</span><span style="--shiki-light:#986801;--shiki-dark:#E5C07B"> chartInstance</span><span style="--shiki-light:#0184BC;--shiki-dark:#56B6C2"> =</span><span style="--shiki-light:#4078F2;--shiki-dark:#61AFEF"> ref</span><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF">(</span><span style="--shiki-light:#986801;--shiki-dark:#D19A66">null</span><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF">);</span></span>
<span class="line"><span style="--shiki-light:#A0A1A7;--shiki-light-font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic">// 井列表数据</span></span>
<span class="line"><span style="--shiki-light:#A626A4;--shiki-dark:#C678DD">const</span><span style="--shiki-light:#986801;--shiki-dark:#E5C07B"> wellList</span><span style="--shiki-light:#0184BC;--shiki-dark:#56B6C2"> =</span><span style="--shiki-light:#4078F2;--shiki-dark:#61AFEF"> ref</span><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF">([]);</span></span>
<span class="line"><span style="--shiki-light:#A0A1A7;--shiki-light-font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic">// 选中的井号ID</span></span>
<span class="line"><span style="--shiki-light:#A626A4;--shiki-dark:#C678DD">const</span><span style="--shiki-light:#986801;--shiki-dark:#E5C07B"> selectedWellId</span><span style="--shiki-light:#0184BC;--shiki-dark:#56B6C2"> =</span><span style="--shiki-light:#4078F2;--shiki-dark:#61AFEF"> ref</span><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF">(</span><span style="--shiki-light:#50A14F;--shiki-dark:#98C379">''</span><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF">);</span></span>
<span class="line"><span style="--shiki-light:#A0A1A7;--shiki-light-font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic">// 生产数据（包含日期和产量值）</span></span>
<span class="line"><span style="--shiki-light:#A626A4;--shiki-dark:#C678DD">const</span><span style="--shiki-light:#986801;--shiki-dark:#E5C07B"> productionData</span><span style="--shiki-light:#0184BC;--shiki-dark:#56B6C2"> =</span><span style="--shiki-light:#4078F2;--shiki-dark:#61AFEF"> ref</span><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF">({ </span><span style="--shiki-light:#E45649;--shiki-dark:#E06C75">dates</span><span style="--shiki-light:#0184BC;--shiki-dark:#ABB2BF">:</span><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF"> [], </span><span style="--shiki-light:#E45649;--shiki-dark:#E06C75">values</span><span style="--shiki-light:#0184BC;--shiki-dark:#ABB2BF">:</span><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF"> [] });</span></span>
<span class="line"><span style="--shiki-light:#A0A1A7;--shiki-light-font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic">// 加载状态标识</span></span>
<span class="line"><span style="--shiki-light:#A626A4;--shiki-dark:#C678DD">const</span><span style="--shiki-light:#986801;--shiki-dark:#E5C07B"> isLoading</span><span style="--shiki-light:#0184BC;--shiki-dark:#56B6C2"> =</span><span style="--shiki-light:#4078F2;--shiki-dark:#61AFEF"> ref</span><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF">(</span><span style="--shiki-light:#986801;--shiki-dark:#D19A66">false</span><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF">);</span></span>
<span class="line"><span style="--shiki-light:#A0A1A7;--shiki-light-font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic">// 错误信息</span></span>
<span class="line"><span style="--shiki-light:#A626A4;--shiki-dark:#C678DD">const</span><span style="--shiki-light:#986801;--shiki-dark:#E5C07B"> errorMessage</span><span style="--shiki-light:#0184BC;--shiki-dark:#56B6C2"> =</span><span style="--shiki-light:#4078F2;--shiki-dark:#61AFEF"> ref</span><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF">(</span><span style="--shiki-light:#50A14F;--shiki-dark:#98C379">''</span><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF">);</span></span>
<span class="line"></span>
<span class="line"><span style="--shiki-light:#A0A1A7;--shiki-light-font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic">// 初始化图表函数</span></span>
<span class="line"><span style="--shiki-light:#A626A4;--shiki-dark:#C678DD">const</span><span style="--shiki-light:#4078F2;--shiki-dark:#61AFEF"> initChart</span><span style="--shiki-light:#0184BC;--shiki-dark:#56B6C2"> =</span><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF"> () </span><span style="--shiki-light:#A626A4;--shiki-dark:#C678DD">=></span><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF"> {</span></span>
<span class="line"><span style="--shiki-light:#A0A1A7;--shiki-light-font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic">  // 如果已有图表实例，则先销毁避免内存泄漏</span></span>
<span class="line"><span style="--shiki-light:#A626A4;--shiki-dark:#C678DD">  if</span><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF"> (</span><span style="--shiki-light:#383A42;--shiki-dark:#E5C07B">chartInstance</span><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF">.</span><span style="--shiki-light:#E45649;--shiki-dark:#E06C75">value</span><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF">) {</span></span>
<span class="line"><span style="--shiki-light:#383A42;--shiki-dark:#E5C07B">    chartInstance</span><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF">.</span><span style="--shiki-light:#E45649;--shiki-dark:#E5C07B">value</span><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF">.</span><span style="--shiki-light:#4078F2;--shiki-dark:#61AFEF">dispose</span><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF">();</span></span>
<span class="line"><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF">  }</span></span>
<span class="line"><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF">  </span></span>
<span class="line"><span style="--shiki-light:#A0A1A7;--shiki-light-font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic">  // 初始化图表实例，绑定到DOM元素，使用Canvas渲染器</span></span>
<span class="line"><span style="--shiki-light:#383A42;--shiki-dark:#E5C07B">  chartInstance</span><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF">.</span><span style="--shiki-light:#E45649;--shiki-dark:#E06C75">value</span><span style="--shiki-light:#0184BC;--shiki-dark:#56B6C2"> =</span><span style="--shiki-light:#4078F2;--shiki-dark:#61AFEF"> init</span><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF">(</span><span style="--shiki-light:#383A42;--shiki-dark:#E5C07B">chartDom</span><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF">.</span><span style="--shiki-light:#E45649;--shiki-dark:#E06C75">value</span><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF">, </span><span style="--shiki-light:#986801;--shiki-dark:#D19A66">null</span><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF">, { </span><span style="--shiki-light:#E45649;--shiki-dark:#E06C75">renderer</span><span style="--shiki-light:#0184BC;--shiki-dark:#ABB2BF">:</span><span style="--shiki-light:#50A14F;--shiki-dark:#98C379"> 'canvas'</span><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF"> });</span></span>
<span class="line"></span>
<span class="line"><span style="--shiki-light:#A0A1A7;--shiki-light-font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic">  // 图表配置项</span></span>
<span class="line"><span style="--shiki-light:#A626A4;--shiki-dark:#C678DD">  const</span><span style="--shiki-light:#986801;--shiki-dark:#E5C07B"> option</span><span style="--shiki-light:#0184BC;--shiki-dark:#56B6C2"> =</span><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF"> {</span></span>
<span class="line"><span style="--shiki-light:#A0A1A7;--shiki-light-font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic">    // 背景颜色设置为透明</span></span>
<span class="line"><span style="--shiki-light:#E45649;--shiki-dark:#E06C75">    backgroundColor</span><span style="--shiki-light:#0184BC;--shiki-dark:#ABB2BF">:</span><span style="--shiki-light:#50A14F;--shiki-dark:#98C379"> 'transparent'</span><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF">,</span></span>
<span class="line"><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF">    </span></span>
<span class="line"><span style="--shiki-light:#A0A1A7;--shiki-light-font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic">    // 标题配置</span></span>
<span class="line"><span style="--shiki-light:#E45649;--shiki-dark:#E06C75">    title</span><span style="--shiki-light:#0184BC;--shiki-dark:#ABB2BF">:</span><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF"> { </span></span>
<span class="line"><span style="--shiki-light:#A0A1A7;--shiki-light-font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic">      // 标题文本</span></span>
<span class="line"><span style="--shiki-light:#E45649;--shiki-dark:#E06C75">      text</span><span style="--shiki-light:#0184BC;--shiki-dark:#ABB2BF">:</span><span style="--shiki-light:#50A14F;--shiki-dark:#98C379"> '日产油量变化趋势'</span><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF">, </span></span>
<span class="line"><span style="--shiki-light:#A0A1A7;--shiki-light-font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic">      // 标题位置居中</span></span>
<span class="line"><span style="--shiki-light:#E45649;--shiki-dark:#E06C75">      left</span><span style="--shiki-light:#0184BC;--shiki-dark:#ABB2BF">:</span><span style="--shiki-light:#50A14F;--shiki-dark:#98C379"> 'center'</span><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF">, </span></span>
<span class="line"><span style="--shiki-light:#A0A1A7;--shiki-light-font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic">      // 标题文字样式</span></span>
<span class="line"><span style="--shiki-light:#E45649;--shiki-dark:#E06C75">      textStyle</span><span style="--shiki-light:#0184BC;--shiki-dark:#ABB2BF">:</span><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF"> { </span><span style="--shiki-light:#E45649;--shiki-dark:#E06C75">color</span><span style="--shiki-light:#0184BC;--shiki-dark:#ABB2BF">:</span><span style="--shiki-light:#50A14F;--shiki-dark:#98C379"> '#333'</span><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF">, </span><span style="--shiki-light:#E45649;--shiki-dark:#E06C75">fontSize</span><span style="--shiki-light:#0184BC;--shiki-dark:#ABB2BF">:</span><span style="--shiki-light:#986801;--shiki-dark:#D19A66"> 16</span><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF"> } </span></span>
<span class="line"><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF">    },</span></span>
<span class="line"><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF">    </span></span>
<span class="line"><span style="--shiki-light:#A0A1A7;--shiki-light-font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic">    // 提示框配置</span></span>
<span class="line"><span style="--shiki-light:#E45649;--shiki-dark:#E06C75">    tooltip</span><span style="--shiki-light:#0184BC;--shiki-dark:#ABB2BF">:</span><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF"> {</span></span>
<span class="line"><span style="--shiki-light:#A0A1A7;--shiki-light-font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic">      // 触发类型：坐标轴触发</span></span>
<span class="line"><span style="--shiki-light:#E45649;--shiki-dark:#E06C75">      trigger</span><span style="--shiki-light:#0184BC;--shiki-dark:#ABB2BF">:</span><span style="--shiki-light:#50A14F;--shiki-dark:#98C379"> 'axis'</span><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF">,</span></span>
<span class="line"><span style="--shiki-light:#A0A1A7;--shiki-light-font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic">      // 背景颜色</span></span>
<span class="line"><span style="--shiki-light:#E45649;--shiki-dark:#E06C75">      backgroundColor</span><span style="--shiki-light:#0184BC;--shiki-dark:#ABB2BF">:</span><span style="--shiki-light:#50A14F;--shiki-dark:#98C379"> 'rgba(255, 255, 255, 0.9)'</span><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF">,</span></span>
<span class="line"><span style="--shiki-light:#A0A1A7;--shiki-light-font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic">      // 边框颜色</span></span>
<span class="line"><span style="--shiki-light:#E45649;--shiki-dark:#E06C75">      borderColor</span><span style="--shiki-light:#0184BC;--shiki-dark:#ABB2BF">:</span><span style="--shiki-light:#50A14F;--shiki-dark:#98C379"> '#ddd'</span><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF">,</span></span>
<span class="line"><span style="--shiki-light:#A0A1A7;--shiki-light-font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic">      // 边框宽度</span></span>
<span class="line"><span style="--shiki-light:#E45649;--shiki-dark:#E06C75">      borderWidth</span><span style="--shiki-light:#0184BC;--shiki-dark:#ABB2BF">:</span><span style="--shiki-light:#986801;--shiki-dark:#D19A66"> 1</span><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF">,</span></span>
<span class="line"><span style="--shiki-light:#A0A1A7;--shiki-light-font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic">      // 文字样式</span></span>
<span class="line"><span style="--shiki-light:#E45649;--shiki-dark:#E06C75">      textStyle</span><span style="--shiki-light:#0184BC;--shiki-dark:#ABB2BF">:</span><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF"> { </span><span style="--shiki-light:#E45649;--shiki-dark:#E06C75">color</span><span style="--shiki-light:#0184BC;--shiki-dark:#ABB2BF">:</span><span style="--shiki-light:#50A14F;--shiki-dark:#98C379"> '#333'</span><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF"> },</span></span>
<span class="line"><span style="--shiki-light:#A0A1A7;--shiki-light-font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic">      // 内容格式化函数</span></span>
<span class="line"><span style="--shiki-light:#4078F2;--shiki-dark:#61AFEF">      formatter</span><span style="--shiki-light:#0184BC;--shiki-dark:#ABB2BF">:</span><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF"> (</span><span style="--shiki-light:#383A42;--shiki-light-font-style:inherit;--shiki-dark:#E06C75;--shiki-dark-font-style:italic">params</span><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF">) </span><span style="--shiki-light:#A626A4;--shiki-dark:#C678DD">=></span><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF"> {</span></span>
<span class="line"><span style="--shiki-light:#A0A1A7;--shiki-light-font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic">        // 获取第一个数据项</span></span>
<span class="line"><span style="--shiki-light:#A626A4;--shiki-dark:#C678DD">        const</span><span style="--shiki-light:#986801;--shiki-dark:#E5C07B"> param</span><span style="--shiki-light:#0184BC;--shiki-dark:#56B6C2"> =</span><span style="--shiki-light:#383A42;--shiki-dark:#E06C75"> params</span><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF">[</span><span style="--shiki-light:#986801;--shiki-dark:#D19A66">0</span><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF">];</span></span>
<span class="line"><span style="--shiki-light:#A0A1A7;--shiki-light-font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic">        // 返回格式化的提示内容</span></span>
<span class="line"><span style="--shiki-light:#A626A4;--shiki-dark:#C678DD">        return</span><span style="--shiki-light:#50A14F;--shiki-dark:#98C379"> `日期: </span><span style="--shiki-light:#CA1243;--shiki-dark:#C678DD">${</span><span style="--shiki-light:#383A42;--shiki-dark:#E5C07B">param</span><span style="--shiki-light:#50A14F;--shiki-dark:#ABB2BF">.</span><span style="--shiki-light:#E45649;--shiki-dark:#E06C75">name</span><span style="--shiki-light:#CA1243;--shiki-dark:#C678DD">}</span><span style="--shiki-light:#50A14F;--shiki-dark:#98C379">&#x3C;br/>日产油量: </span><span style="--shiki-light:#CA1243;--shiki-dark:#C678DD">${</span><span style="--shiki-light:#383A42;--shiki-dark:#E5C07B">param</span><span style="--shiki-light:#50A14F;--shiki-dark:#ABB2BF">.</span><span style="--shiki-light:#E45649;--shiki-dark:#E06C75">value</span><span style="--shiki-light:#CA1243;--shiki-dark:#C678DD">}</span><span style="--shiki-light:#50A14F;--shiki-dark:#98C379"> 吨`</span><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF">;</span></span>
<span class="line"><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF">      }</span></span>
<span class="line"><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF">    },</span></span>
<span class="line"><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF">    </span></span>
<span class="line"><span style="--shiki-light:#A0A1A7;--shiki-light-font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic">    // 网格配置</span></span>
<span class="line"><span style="--shiki-light:#E45649;--shiki-dark:#E06C75">    grid</span><span style="--shiki-light:#0184BC;--shiki-dark:#ABB2BF">:</span><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF"> { </span></span>
<span class="line"><span style="--shiki-light:#A0A1A7;--shiki-light-font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic">      // 左右边距5%</span></span>
<span class="line"><span style="--shiki-light:#E45649;--shiki-dark:#E06C75">      left</span><span style="--shiki-light:#0184BC;--shiki-dark:#ABB2BF">:</span><span style="--shiki-light:#50A14F;--shiki-dark:#98C379"> '5%'</span><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF">, </span></span>
<span class="line"><span style="--shiki-light:#E45649;--shiki-dark:#E06C75">      right</span><span style="--shiki-light:#0184BC;--shiki-dark:#ABB2BF">:</span><span style="--shiki-light:#50A14F;--shiki-dark:#98C379"> '5%'</span><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF">, </span></span>
<span class="line"><span style="--shiki-light:#A0A1A7;--shiki-light-font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic">      // 底部边距15%</span></span>
<span class="line"><span style="--shiki-light:#E45649;--shiki-dark:#E06C75">      bottom</span><span style="--shiki-light:#0184BC;--shiki-dark:#ABB2BF">:</span><span style="--shiki-light:#50A14F;--shiki-dark:#98C379"> '15%'</span><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF">, </span></span>
<span class="line"><span style="--shiki-light:#A0A1A7;--shiki-light-font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic">      // 顶部边距15%</span></span>
<span class="line"><span style="--shiki-light:#E45649;--shiki-dark:#E06C75">      top</span><span style="--shiki-light:#0184BC;--shiki-dark:#ABB2BF">:</span><span style="--shiki-light:#50A14F;--shiki-dark:#98C379"> '15%'</span><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF">, </span></span>
<span class="line"><span style="--shiki-light:#A0A1A7;--shiki-light-font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic">      // 是否包含坐标轴标签</span></span>
<span class="line"><span style="--shiki-light:#E45649;--shiki-dark:#E06C75">      containLabel</span><span style="--shiki-light:#0184BC;--shiki-dark:#ABB2BF">:</span><span style="--shiki-light:#986801;--shiki-dark:#D19A66"> true</span><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF"> </span></span>
<span class="line"><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF">    },</span></span>
<span class="line"><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF">    </span></span>
<span class="line"><span style="--shiki-light:#A0A1A7;--shiki-light-font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic">    // X轴配置</span></span>
<span class="line"><span style="--shiki-light:#E45649;--shiki-dark:#E06C75">    xAxis</span><span style="--shiki-light:#0184BC;--shiki-dark:#ABB2BF">:</span><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF"> {</span></span>
<span class="line"><span style="--shiki-light:#A0A1A7;--shiki-light-font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic">      // 类型：类目轴</span></span>
<span class="line"><span style="--shiki-light:#E45649;--shiki-dark:#E06C75">      type</span><span style="--shiki-light:#0184BC;--shiki-dark:#ABB2BF">:</span><span style="--shiki-light:#50A14F;--shiki-dark:#98C379"> 'category'</span><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF">,</span></span>
<span class="line"><span style="--shiki-light:#A0A1A7;--shiki-light-font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic">      // 坐标轴两边不留白</span></span>
<span class="line"><span style="--shiki-light:#E45649;--shiki-dark:#E06C75">      boundaryGap</span><span style="--shiki-light:#0184BC;--shiki-dark:#ABB2BF">:</span><span style="--shiki-light:#986801;--shiki-dark:#D19A66"> false</span><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF">,</span></span>
<span class="line"><span style="--shiki-light:#A0A1A7;--shiki-light-font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic">      // 数据（初始为空数组）</span></span>
<span class="line"><span style="--shiki-light:#E45649;--shiki-dark:#E06C75">      data</span><span style="--shiki-light:#0184BC;--shiki-dark:#ABB2BF">:</span><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF"> [],</span></span>
<span class="line"><span style="--shiki-light:#A0A1A7;--shiki-light-font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic">      // 坐标轴标签配置</span></span>
<span class="line"><span style="--shiki-light:#E45649;--shiki-dark:#E06C75">      axisLabel</span><span style="--shiki-light:#0184BC;--shiki-dark:#ABB2BF">:</span><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF"> { </span></span>
<span class="line"><span style="--shiki-light:#A0A1A7;--shiki-light-font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic">        // 标签旋转45度</span></span>
<span class="line"><span style="--shiki-light:#E45649;--shiki-dark:#E06C75">        rotate</span><span style="--shiki-light:#0184BC;--shiki-dark:#ABB2BF">:</span><span style="--shiki-light:#986801;--shiki-dark:#D19A66"> 45</span><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF">, </span></span>
<span class="line"><span style="--shiki-light:#A0A1A7;--shiki-light-font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic">        // 显示间隔为0（全部显示）</span></span>
<span class="line"><span style="--shiki-light:#E45649;--shiki-dark:#E06C75">        interval</span><span style="--shiki-light:#0184BC;--shiki-dark:#ABB2BF">:</span><span style="--shiki-light:#986801;--shiki-dark:#D19A66"> 0</span><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF">, </span></span>
<span class="line"><span style="--shiki-light:#A0A1A7;--shiki-light-font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic">        // 字体大小</span></span>
<span class="line"><span style="--shiki-light:#E45649;--shiki-dark:#E06C75">        fontSize</span><span style="--shiki-light:#0184BC;--shiki-dark:#ABB2BF">:</span><span style="--shiki-light:#986801;--shiki-dark:#D19A66"> 12</span><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF"> </span></span>
<span class="line"><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF">      },</span></span>
<span class="line"><span style="--shiki-light:#A0A1A7;--shiki-light-font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic">      // 坐标轴线配置</span></span>
<span class="line"><span style="--shiki-light:#E45649;--shiki-dark:#E06C75">      axisLine</span><span style="--shiki-light:#0184BC;--shiki-dark:#ABB2BF">:</span><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF"> { </span></span>
<span class="line"><span style="--shiki-light:#A0A1A7;--shiki-light-font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic">        // 线样式配置</span></span>
<span class="line"><span style="--shiki-light:#E45649;--shiki-dark:#E06C75">        lineStyle</span><span style="--shiki-light:#0184BC;--shiki-dark:#ABB2BF">:</span><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF"> { </span><span style="--shiki-light:#E45649;--shiki-dark:#E06C75">color</span><span style="--shiki-light:#0184BC;--shiki-dark:#ABB2BF">:</span><span style="--shiki-light:#50A14F;--shiki-dark:#98C379"> '#eee'</span><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF"> } </span></span>
<span class="line"><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF">      }</span></span>
<span class="line"><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF">    },</span></span>
<span class="line"><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF">    </span></span>
<span class="line"><span style="--shiki-light:#A0A1A7;--shiki-light-font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic">    // Y轴配置</span></span>
<span class="line"><span style="--shiki-light:#E45649;--shiki-dark:#E06C75">    yAxis</span><span style="--shiki-light:#0184BC;--shiki-dark:#ABB2BF">:</span><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF"> {</span></span>
<span class="line"><span style="--shiki-light:#A0A1A7;--shiki-light-font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic">      // 类型：数值轴</span></span>
<span class="line"><span style="--shiki-light:#E45649;--shiki-dark:#E06C75">      type</span><span style="--shiki-light:#0184BC;--shiki-dark:#ABB2BF">:</span><span style="--shiki-light:#50A14F;--shiki-dark:#98C379"> 'value'</span><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF">,</span></span>
<span class="line"><span style="--shiki-light:#A0A1A7;--shiki-light-font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic">      // 轴名称</span></span>
<span class="line"><span style="--shiki-light:#E45649;--shiki-dark:#E06C75">      name</span><span style="--shiki-light:#0184BC;--shiki-dark:#ABB2BF">:</span><span style="--shiki-light:#50A14F;--shiki-dark:#98C379"> '日产油量（吨）'</span><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF">,</span></span>
<span class="line"><span style="--shiki-light:#A0A1A7;--shiki-light-font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic">      // 名称文字样式</span></span>
<span class="line"><span style="--shiki-light:#E45649;--shiki-dark:#E06C75">      nameTextStyle</span><span style="--shiki-light:#0184BC;--shiki-dark:#ABB2BF">:</span><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF"> { </span></span>
<span class="line"><span style="--shiki-light:#A0A1A7;--shiki-light-font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic">        // 内边距设置</span></span>
<span class="line"><span style="--shiki-light:#E45649;--shiki-dark:#E06C75">        padding</span><span style="--shiki-light:#0184BC;--shiki-dark:#ABB2BF">:</span><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF"> [</span><span style="--shiki-light:#986801;--shiki-dark:#D19A66">0</span><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF">, </span><span style="--shiki-light:#986801;--shiki-dark:#D19A66">0</span><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF">, </span><span style="--shiki-light:#986801;--shiki-dark:#D19A66">0</span><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF">, </span><span style="--shiki-light:#986801;--shiki-dark:#D19A66">10</span><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF">] </span></span>
<span class="line"><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF">      },</span></span>
<span class="line"><span style="--shiki-light:#A0A1A7;--shiki-light-font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic">      // 是否显示轴线</span></span>
<span class="line"><span style="--shiki-light:#E45649;--shiki-dark:#E06C75">      axisLine</span><span style="--shiki-light:#0184BC;--shiki-dark:#ABB2BF">:</span><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF"> { </span><span style="--shiki-light:#E45649;--shiki-dark:#E06C75">show</span><span style="--shiki-light:#0184BC;--shiki-dark:#ABB2BF">:</span><span style="--shiki-light:#986801;--shiki-dark:#D19A66"> false</span><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF"> },</span></span>
<span class="line"><span style="--shiki-light:#A0A1A7;--shiki-light-font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic">      // 分割线配置</span></span>
<span class="line"><span style="--shiki-light:#E45649;--shiki-dark:#E06C75">      splitLine</span><span style="--shiki-light:#0184BC;--shiki-dark:#ABB2BF">:</span><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF"> { </span></span>
<span class="line"><span style="--shiki-light:#A0A1A7;--shiki-light-font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic">        // 线样式配置</span></span>
<span class="line"><span style="--shiki-light:#E45649;--shiki-dark:#E06C75">        lineStyle</span><span style="--shiki-light:#0184BC;--shiki-dark:#ABB2BF">:</span><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF"> { </span><span style="--shiki-light:#E45649;--shiki-dark:#E06C75">color</span><span style="--shiki-light:#0184BC;--shiki-dark:#ABB2BF">:</span><span style="--shiki-light:#50A14F;--shiki-dark:#98C379"> '#f5f5f5'</span><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF"> } </span></span>
<span class="line"><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF">      }</span></span>
<span class="line"><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF">    },</span></span>
<span class="line"><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF">    </span></span>
<span class="line"><span style="--shiki-light:#A0A1A7;--shiki-light-font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic">    // 数据区域缩放配置（用于处理大量数据）</span></span>
<span class="line"><span style="--shiki-light:#E45649;--shiki-dark:#E06C75">    dataZoom</span><span style="--shiki-light:#0184BC;--shiki-dark:#ABB2BF">:</span><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF"> [</span></span>
<span class="line"><span style="--shiki-light:#A0A1A7;--shiki-light-font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic">      // 内置型数据区域缩放组件</span></span>
<span class="line"><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF">      { </span></span>
<span class="line"><span style="--shiki-light:#E45649;--shiki-dark:#E06C75">        type</span><span style="--shiki-light:#0184BC;--shiki-dark:#ABB2BF">:</span><span style="--shiki-light:#50A14F;--shiki-dark:#98C379"> 'inside'</span><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF">, </span></span>
<span class="line"><span style="--shiki-light:#E45649;--shiki-dark:#E06C75">        start</span><span style="--shiki-light:#0184BC;--shiki-dark:#ABB2BF">:</span><span style="--shiki-light:#986801;--shiki-dark:#D19A66"> 0</span><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF">, </span></span>
<span class="line"><span style="--shiki-light:#E45649;--shiki-dark:#E06C75">        end</span><span style="--shiki-light:#0184BC;--shiki-dark:#ABB2BF">:</span><span style="--shiki-light:#986801;--shiki-dark:#D19A66"> 100</span><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF">, </span></span>
<span class="line"><span style="--shiki-light:#E45649;--shiki-dark:#E06C75">        filterMode</span><span style="--shiki-light:#0184BC;--shiki-dark:#ABB2BF">:</span><span style="--shiki-light:#50A14F;--shiki-dark:#98C379"> 'none'</span><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF"> </span></span>
<span class="line"><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF">      },</span></span>
<span class="line"><span style="--shiki-light:#A0A1A7;--shiki-light-font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic">      // 滑动条型数据区域缩放组件</span></span>
<span class="line"><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF">      { </span></span>
<span class="line"><span style="--shiki-light:#E45649;--shiki-dark:#E06C75">        show</span><span style="--shiki-light:#0184BC;--shiki-dark:#ABB2BF">:</span><span style="--shiki-light:#986801;--shiki-dark:#D19A66"> true</span><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF">, </span></span>
<span class="line"><span style="--shiki-light:#E45649;--shiki-dark:#E06C75">        type</span><span style="--shiki-light:#0184BC;--shiki-dark:#ABB2BF">:</span><span style="--shiki-light:#50A14F;--shiki-dark:#98C379"> 'slider'</span><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF">, </span></span>
<span class="line"><span style="--shiki-light:#E45649;--shiki-dark:#E06C75">        bottom</span><span style="--shiki-light:#0184BC;--shiki-dark:#ABB2BF">:</span><span style="--shiki-light:#986801;--shiki-dark:#D19A66"> 25</span><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF">, </span></span>
<span class="line"><span style="--shiki-light:#E45649;--shiki-dark:#E06C75">        start</span><span style="--shiki-light:#0184BC;--shiki-dark:#ABB2BF">:</span><span style="--shiki-light:#986801;--shiki-dark:#D19A66"> 0</span><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF">, </span></span>
<span class="line"><span style="--shiki-light:#E45649;--shiki-dark:#E06C75">        end</span><span style="--shiki-light:#0184BC;--shiki-dark:#ABB2BF">:</span><span style="--shiki-light:#986801;--shiki-dark:#D19A66"> 100</span><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF">, </span></span>
<span class="line"><span style="--shiki-light:#E45649;--shiki-dark:#E06C75">        filterMode</span><span style="--shiki-light:#0184BC;--shiki-dark:#ABB2BF">:</span><span style="--shiki-light:#50A14F;--shiki-dark:#98C379"> 'none'</span><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF">, </span></span>
<span class="line"><span style="--shiki-light:#E45649;--shiki-dark:#E06C75">        height</span><span style="--shiki-light:#0184BC;--shiki-dark:#ABB2BF">:</span><span style="--shiki-light:#986801;--shiki-dark:#D19A66"> 15</span><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF"> </span></span>
<span class="line"><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF">      }</span></span>
<span class="line"><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF">    ],</span></span>
<span class="line"><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF">    </span></span>
<span class="line"><span style="--shiki-light:#A0A1A7;--shiki-light-font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic">    // 系列列表（图表数据）</span></span>
<span class="line"><span style="--shiki-light:#E45649;--shiki-dark:#E06C75">    series</span><span style="--shiki-light:#0184BC;--shiki-dark:#ABB2BF">:</span><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF"> [</span></span>
<span class="line"><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF">      {</span></span>
<span class="line"><span style="--shiki-light:#A0A1A7;--shiki-light-font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic">        // 系列名称</span></span>
<span class="line"><span style="--shiki-light:#E45649;--shiki-dark:#E06C75">        name</span><span style="--shiki-light:#0184BC;--shiki-dark:#ABB2BF">:</span><span style="--shiki-light:#50A14F;--shiki-dark:#98C379"> '日产油量'</span><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF">,</span></span>
<span class="line"><span style="--shiki-light:#A0A1A7;--shiki-light-font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic">        // 图表类型：折线图</span></span>
<span class="line"><span style="--shiki-light:#E45649;--shiki-dark:#E06C75">        type</span><span style="--shiki-light:#0184BC;--shiki-dark:#ABB2BF">:</span><span style="--shiki-light:#50A14F;--shiki-dark:#98C379"> 'line'</span><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF">,</span></span>
<span class="line"><span style="--shiki-light:#A0A1A7;--shiki-light-font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic">        // 标记点图形：圆形</span></span>
<span class="line"><span style="--shiki-light:#E45649;--shiki-dark:#E06C75">        symbol</span><span style="--shiki-light:#0184BC;--shiki-dark:#ABB2BF">:</span><span style="--shiki-light:#50A14F;--shiki-dark:#98C379"> 'circle'</span><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF">,</span></span>
<span class="line"><span style="--shiki-light:#A0A1A7;--shiki-light-font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic">        // 标记点大小</span></span>
<span class="line"><span style="--shiki-light:#E45649;--shiki-dark:#E06C75">        symbolSize</span><span style="--shiki-light:#0184BC;--shiki-dark:#ABB2BF">:</span><span style="--shiki-light:#986801;--shiki-dark:#D19A66"> 4</span><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF">,</span></span>
<span class="line"><span style="--shiki-light:#A0A1A7;--shiki-light-font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic">        // 是否启用平滑曲线</span></span>
<span class="line"><span style="--shiki-light:#E45649;--shiki-dark:#E06C75">        smooth</span><span style="--shiki-light:#0184BC;--shiki-dark:#ABB2BF">:</span><span style="--shiki-light:#986801;--shiki-dark:#D19A66"> true</span><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF">,</span></span>
<span class="line"><span style="--shiki-light:#A0A1A7;--shiki-light-font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic">        // 图形样式</span></span>
<span class="line"><span style="--shiki-light:#E45649;--shiki-dark:#E06C75">        itemStyle</span><span style="--shiki-light:#0184BC;--shiki-dark:#ABB2BF">:</span><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF"> { </span><span style="--shiki-light:#E45649;--shiki-dark:#E06C75">color</span><span style="--shiki-light:#0184BC;--shiki-dark:#ABB2BF">:</span><span style="--shiki-light:#50A14F;--shiki-dark:#98C379"> '#4e79a7'</span><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF"> },</span></span>
<span class="line"><span style="--shiki-light:#A0A1A7;--shiki-light-font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic">        // 区域填充样式</span></span>
<span class="line"><span style="--shiki-light:#E45649;--shiki-dark:#E06C75">        areaStyle</span><span style="--shiki-light:#0184BC;--shiki-dark:#ABB2BF">:</span><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF"> {</span></span>
<span class="line"><span style="--shiki-light:#A0A1A7;--shiki-light-font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic">          // 使用线性渐变色</span></span>
<span class="line"><span style="--shiki-light:#E45649;--shiki-dark:#E06C75">          color</span><span style="--shiki-light:#0184BC;--shiki-dark:#ABB2BF">:</span><span style="--shiki-light:#A626A4;--shiki-dark:#C678DD"> new</span><span style="--shiki-light:#383A42;--shiki-dark:#E5C07B"> echarts</span><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF">.</span><span style="--shiki-light:#C18401;--shiki-dark:#E5C07B">graphic</span><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF">.</span><span style="--shiki-light:#4078F2;--shiki-dark:#61AFEF">LinearGradient</span><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF">(</span><span style="--shiki-light:#986801;--shiki-dark:#D19A66">0</span><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF">, </span><span style="--shiki-light:#986801;--shiki-dark:#D19A66">0</span><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF">, </span><span style="--shiki-light:#986801;--shiki-dark:#D19A66">0</span><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF">, </span><span style="--shiki-light:#986801;--shiki-dark:#D19A66">1</span><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF">, [</span></span>
<span class="line"><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF">            { </span><span style="--shiki-light:#E45649;--shiki-dark:#E06C75">offset</span><span style="--shiki-light:#0184BC;--shiki-dark:#ABB2BF">:</span><span style="--shiki-light:#986801;--shiki-dark:#D19A66"> 0</span><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF">, </span><span style="--shiki-light:#E45649;--shiki-dark:#E06C75">color</span><span style="--shiki-light:#0184BC;--shiki-dark:#ABB2BF">:</span><span style="--shiki-light:#50A14F;--shiki-dark:#98C379"> 'rgba(78, 121, 167, 0.6)'</span><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF"> },</span></span>
<span class="line"><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF">            { </span><span style="--shiki-light:#E45649;--shiki-dark:#E06C75">offset</span><span style="--shiki-light:#0184BC;--shiki-dark:#ABB2BF">:</span><span style="--shiki-light:#986801;--shiki-dark:#D19A66"> 1</span><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF">, </span><span style="--shiki-light:#E45649;--shiki-dark:#E06C75">color</span><span style="--shiki-light:#0184BC;--shiki-dark:#ABB2BF">:</span><span style="--shiki-light:#50A14F;--shiki-dark:#98C379"> 'rgba(78, 121, 167, 0.1)'</span><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF"> }</span></span>
<span class="line"><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF">          ])</span></span>
<span class="line"><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF">        },</span></span>
<span class="line"><span style="--shiki-light:#A0A1A7;--shiki-light-font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic">        // 数据（初始为空数组）</span></span>
<span class="line"><span style="--shiki-light:#E45649;--shiki-dark:#E06C75">        data</span><span style="--shiki-light:#0184BC;--shiki-dark:#ABB2BF">:</span><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF"> []</span></span>
<span class="line"><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF">      }</span></span>
<span class="line"><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF">    ]</span></span>
<span class="line"><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF">  };</span></span>
<span class="line"></span>
<span class="line"><span style="--shiki-light:#A0A1A7;--shiki-light-font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic">  // 设置图表配置项</span></span>
<span class="line"><span style="--shiki-light:#383A42;--shiki-dark:#E5C07B">  chartInstance</span><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF">.</span><span style="--shiki-light:#E45649;--shiki-dark:#E5C07B">value</span><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF">.</span><span style="--shiki-light:#4078F2;--shiki-dark:#61AFEF">setOption</span><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF">(</span><span style="--shiki-light:#383A42;--shiki-dark:#E06C75">option</span><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF">);</span></span>
<span class="line"><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF">};</span></span>
<span class="line"></span>
<span class="line"><span style="--shiki-light:#A0A1A7;--shiki-light-font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic">// 更新图表数据函数</span></span>
<span class="line"><span style="--shiki-light:#A626A4;--shiki-dark:#C678DD">const</span><span style="--shiki-light:#4078F2;--shiki-dark:#61AFEF"> updateChartData</span><span style="--shiki-light:#0184BC;--shiki-dark:#56B6C2"> =</span><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF"> () </span><span style="--shiki-light:#A626A4;--shiki-dark:#C678DD">=></span><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF"> {</span></span>
<span class="line"><span style="--shiki-light:#A0A1A7;--shiki-light-font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic">  // 如果没有图表实例，则直接返回</span></span>
<span class="line"><span style="--shiki-light:#A626A4;--shiki-dark:#C678DD">  if</span><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF"> (</span><span style="--shiki-light:#0184BC;--shiki-dark:#56B6C2">!</span><span style="--shiki-light:#383A42;--shiki-dark:#E5C07B">chartInstance</span><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF">.</span><span style="--shiki-light:#E45649;--shiki-dark:#E06C75">value</span><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF">) </span><span style="--shiki-light:#A626A4;--shiki-dark:#C678DD">return</span><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF">;</span></span>
<span class="line"><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF">  </span></span>
<span class="line"><span style="--shiki-light:#A0A1A7;--shiki-light-font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic">  // 更新图表的X轴数据和系列数据</span></span>
<span class="line"><span style="--shiki-light:#383A42;--shiki-dark:#E5C07B">  chartInstance</span><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF">.</span><span style="--shiki-light:#E45649;--shiki-dark:#E5C07B">value</span><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF">.</span><span style="--shiki-light:#4078F2;--shiki-dark:#61AFEF">setOption</span><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF">({</span></span>
<span class="line"><span style="--shiki-light:#E45649;--shiki-dark:#E06C75">    xAxis</span><span style="--shiki-light:#0184BC;--shiki-dark:#ABB2BF">:</span><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF"> { </span><span style="--shiki-light:#E45649;--shiki-dark:#E06C75">data</span><span style="--shiki-light:#0184BC;--shiki-dark:#ABB2BF">:</span><span style="--shiki-light:#383A42;--shiki-dark:#E5C07B"> productionData</span><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF">.</span><span style="--shiki-light:#E45649;--shiki-dark:#E5C07B">value</span><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF">.</span><span style="--shiki-light:#E45649;--shiki-dark:#E06C75">dates</span><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF"> },</span></span>
<span class="line"><span style="--shiki-light:#E45649;--shiki-dark:#E06C75">    series</span><span style="--shiki-light:#0184BC;--shiki-dark:#ABB2BF">:</span><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF"> [{ </span><span style="--shiki-light:#E45649;--shiki-dark:#E06C75">data</span><span style="--shiki-light:#0184BC;--shiki-dark:#ABB2BF">:</span><span style="--shiki-light:#383A42;--shiki-dark:#E5C07B"> productionData</span><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF">.</span><span style="--shiki-light:#C18401;--shiki-dark:#E5C07B">value</span><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF">.</span><span style="--shiki-light:#C18401;--shiki-dark:#E06C75">values</span><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF"> }]</span></span>
<span class="line"><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF">  });</span></span>
<span class="line"></span>
<span class="line"><span style="--shiki-light:#A0A1A7;--shiki-light-font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic">  // 当没有数据时显示提示信息</span></span>
<span class="line"><span style="--shiki-light:#A626A4;--shiki-dark:#C678DD">  if</span><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF"> (</span><span style="--shiki-light:#383A42;--shiki-dark:#E5C07B">productionData</span><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF">.</span><span style="--shiki-light:#E45649;--shiki-dark:#E5C07B">value</span><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF">.</span><span style="--shiki-light:#E45649;--shiki-dark:#E5C07B">values</span><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF">.</span><span style="--shiki-light:#E45649;--shiki-dark:#E06C75">length</span><span style="--shiki-light:#0184BC;--shiki-dark:#56B6C2"> ===</span><span style="--shiki-light:#986801;--shiki-dark:#D19A66"> 0</span><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF">) {</span></span>
<span class="line"><span style="--shiki-light:#383A42;--shiki-dark:#E5C07B">    chartInstance</span><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF">.</span><span style="--shiki-light:#E45649;--shiki-dark:#E5C07B">value</span><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF">.</span><span style="--shiki-light:#4078F2;--shiki-dark:#61AFEF">setOption</span><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF">({</span></span>
<span class="line"><span style="--shiki-light:#E45649;--shiki-dark:#E06C75">      title</span><span style="--shiki-light:#0184BC;--shiki-dark:#ABB2BF">:</span><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF"> {</span></span>
<span class="line"><span style="--shiki-light:#A0A1A7;--shiki-light-font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic">        // 提示文本</span></span>
<span class="line"><span style="--shiki-light:#E45649;--shiki-dark:#E06C75">        text</span><span style="--shiki-light:#0184BC;--shiki-dark:#ABB2BF">:</span><span style="--shiki-light:#50A14F;--shiki-dark:#98C379"> '暂无数据'</span><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF">,</span></span>
<span class="line"><span style="--shiki-light:#A0A1A7;--shiki-light-font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic">        // 标题居中</span></span>
<span class="line"><span style="--shiki-light:#E45649;--shiki-dark:#E06C75">        left</span><span style="--shiki-light:#0184BC;--shiki-dark:#ABB2BF">:</span><span style="--shiki-light:#50A14F;--shiki-dark:#98C379"> 'center'</span><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF">,</span></span>
<span class="line"><span style="--shiki-light:#A0A1A7;--shiki-light-font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic">        // 标题垂直居中</span></span>
<span class="line"><span style="--shiki-light:#E45649;--shiki-dark:#E06C75">        top</span><span style="--shiki-light:#0184BC;--shiki-dark:#ABB2BF">:</span><span style="--shiki-light:#50A14F;--shiki-dark:#98C379"> 'center'</span><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF">,</span></span>
<span class="line"><span style="--shiki-light:#A0A1A7;--shiki-light-font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic">        // 文字样式</span></span>
<span class="line"><span style="--shiki-light:#E45649;--shiki-dark:#E06C75">        textStyle</span><span style="--shiki-light:#0184BC;--shiki-dark:#ABB2BF">:</span><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF"> { </span><span style="--shiki-light:#E45649;--shiki-dark:#E06C75">color</span><span style="--shiki-light:#0184BC;--shiki-dark:#ABB2BF">:</span><span style="--shiki-light:#50A14F;--shiki-dark:#98C379"> '#999'</span><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF">, </span><span style="--shiki-light:#E45649;--shiki-dark:#E06C75">fontSize</span><span style="--shiki-light:#0184BC;--shiki-dark:#ABB2BF">:</span><span style="--shiki-light:#986801;--shiki-dark:#D19A66"> 16</span><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF"> }</span></span>
<span class="line"><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF">      }</span></span>
<span class="line"><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF">    });</span></span>
<span class="line"><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF">  }</span></span>
<span class="line"><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF">};</span></span>
<span class="line"></span>
<span class="line"><span style="--shiki-light:#A0A1A7;--shiki-light-font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic">// 获取井列表函数</span></span>
<span class="line"><span style="--shiki-light:#A626A4;--shiki-dark:#C678DD">const</span><span style="--shiki-light:#4078F2;--shiki-dark:#61AFEF"> loadWellList</span><span style="--shiki-light:#0184BC;--shiki-dark:#56B6C2"> =</span><span style="--shiki-light:#A626A4;--shiki-dark:#C678DD"> async</span><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF"> () </span><span style="--shiki-light:#A626A4;--shiki-dark:#C678DD">=></span><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF"> {</span></span>
<span class="line"><span style="--shiki-light:#A0A1A7;--shiki-light-font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic">  // 开始加载，设置加载状态为true</span></span>
<span class="line"><span style="--shiki-light:#A626A4;--shiki-dark:#C678DD">  try</span><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF"> {</span></span>
<span class="line"><span style="--shiki-light:#383A42;--shiki-dark:#E5C07B">    isLoading</span><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF">.</span><span style="--shiki-light:#E45649;--shiki-dark:#E06C75">value</span><span style="--shiki-light:#0184BC;--shiki-dark:#56B6C2"> =</span><span style="--shiki-light:#986801;--shiki-dark:#D19A66"> true</span><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF">;</span></span>
<span class="line"><span style="--shiki-light:#A0A1A7;--shiki-light-font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic">    // 清空错误信息</span></span>
<span class="line"><span style="--shiki-light:#383A42;--shiki-dark:#E5C07B">    errorMessage</span><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF">.</span><span style="--shiki-light:#E45649;--shiki-dark:#E06C75">value</span><span style="--shiki-light:#0184BC;--shiki-dark:#56B6C2"> =</span><span style="--shiki-light:#50A14F;--shiki-dark:#98C379"> ''</span><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF">;</span></span>
<span class="line"><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF">    </span></span>
<span class="line"><span style="--shiki-light:#A0A1A7;--shiki-light-font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic">    // 发起HTTP请求获取井列表数据</span></span>
<span class="line"><span style="--shiki-light:#A626A4;--shiki-dark:#C678DD">    const</span><span style="--shiki-light:#986801;--shiki-dark:#E5C07B"> response</span><span style="--shiki-light:#0184BC;--shiki-dark:#56B6C2"> =</span><span style="--shiki-light:#A626A4;--shiki-dark:#C678DD"> await</span><span style="--shiki-light:#383A42;--shiki-dark:#E5C07B"> axios</span><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF">.</span><span style="--shiki-light:#4078F2;--shiki-dark:#61AFEF">get</span><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF">(</span><span style="--shiki-light:#50A14F;--shiki-dark:#98C379">'https://xyd0916.github.io/lakes/%E4%BA%A7%E9%87%8F.json'</span><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF">);</span></span>
<span class="line"><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF">    </span></span>
<span class="line"><span style="--shiki-light:#A0A1A7;--shiki-light-font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic">    // 检查响应数据格式是否正确</span></span>
<span class="line"><span style="--shiki-light:#A626A4;--shiki-dark:#C678DD">    if</span><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF"> (</span><span style="--shiki-light:#383A42;--shiki-dark:#E5C07B">response</span><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF">.</span><span style="--shiki-light:#E45649;--shiki-dark:#E5C07B">data</span><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF">.</span><span style="--shiki-light:#E45649;--shiki-dark:#E06C75">code</span><span style="--shiki-light:#0184BC;--shiki-dark:#56B6C2"> ===</span><span style="--shiki-light:#986801;--shiki-dark:#D19A66"> 200</span><span style="--shiki-light:#0184BC;--shiki-dark:#56B6C2"> &#x26;&#x26;</span><span style="--shiki-light:#383A42;--shiki-dark:#E5C07B"> response</span><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF">.</span><span style="--shiki-light:#E45649;--shiki-dark:#E5C07B">data</span><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF">.</span><span style="--shiki-light:#E45649;--shiki-dark:#E5C07B">data</span><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF">?.</span><span style="--shiki-light:#E45649;--shiki-dark:#E06C75">records</span><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF">) {</span></span>
<span class="line"><span style="--shiki-light:#A0A1A7;--shiki-light-font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic">      // 使用Map进行去重处理</span></span>
<span class="line"><span style="--shiki-light:#A626A4;--shiki-dark:#C678DD">      const</span><span style="--shiki-light:#986801;--shiki-dark:#E5C07B"> wellsMap</span><span style="--shiki-light:#0184BC;--shiki-dark:#56B6C2"> =</span><span style="--shiki-light:#A626A4;--shiki-dark:#C678DD"> new</span><span style="--shiki-light:#4078F2;--shiki-dark:#61AFEF"> Map</span><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF">();</span></span>
<span class="line"><span style="--shiki-light:#A0A1A7;--shiki-light-font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic">      // 遍历数据，过滤并去重</span></span>
<span class="line"><span style="--shiki-light:#383A42;--shiki-dark:#E5C07B">      response</span><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF">.</span><span style="--shiki-light:#E45649;--shiki-dark:#E5C07B">data</span><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF">.</span><span style="--shiki-light:#E45649;--shiki-dark:#E5C07B">data</span><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF">.</span><span style="--shiki-light:#E45649;--shiki-dark:#E5C07B">records</span><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF">.</span><span style="--shiki-light:#4078F2;--shiki-dark:#61AFEF">forEach</span><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF">(</span><span style="--shiki-light:#383A42;--shiki-light-font-style:inherit;--shiki-dark:#E06C75;--shiki-dark-font-style:italic">item</span><span style="--shiki-light:#A626A4;--shiki-dark:#C678DD"> =></span><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF"> {</span></span>
<span class="line"><span style="--shiki-light:#A0A1A7;--shiki-light-font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic">        // 确保井号ID存在且未重复</span></span>
<span class="line"><span style="--shiki-light:#A626A4;--shiki-dark:#C678DD">        if</span><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF"> (</span><span style="--shiki-light:#383A42;--shiki-dark:#E5C07B">item</span><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF">.</span><span style="--shiki-light:#E45649;--shiki-dark:#E06C75">jhId</span><span style="--shiki-light:#0184BC;--shiki-dark:#56B6C2"> &#x26;&#x26;</span><span style="--shiki-light:#0184BC;--shiki-dark:#56B6C2"> !</span><span style="--shiki-light:#383A42;--shiki-dark:#E5C07B">wellsMap</span><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF">.</span><span style="--shiki-light:#4078F2;--shiki-dark:#61AFEF">has</span><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF">(</span><span style="--shiki-light:#383A42;--shiki-dark:#E5C07B">item</span><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF">.</span><span style="--shiki-light:#E45649;--shiki-dark:#E06C75">jhId</span><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF">)) {</span></span>
<span class="line"><span style="--shiki-light:#A0A1A7;--shiki-light-font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic">          // 将井信息存入Map</span></span>
<span class="line"><span style="--shiki-light:#383A42;--shiki-dark:#E5C07B">          wellsMap</span><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF">.</span><span style="--shiki-light:#4078F2;--shiki-dark:#61AFEF">set</span><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF">(</span><span style="--shiki-light:#383A42;--shiki-dark:#E5C07B">item</span><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF">.</span><span style="--shiki-light:#E45649;--shiki-dark:#E06C75">jhId</span><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF">, { </span><span style="--shiki-light:#E45649;--shiki-dark:#E06C75">jhId</span><span style="--shiki-light:#0184BC;--shiki-dark:#ABB2BF">:</span><span style="--shiki-light:#383A42;--shiki-dark:#E5C07B"> item</span><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF">.</span><span style="--shiki-light:#E45649;--shiki-dark:#E06C75">jhId</span><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF">, </span><span style="--shiki-light:#E45649;--shiki-dark:#E06C75">jh</span><span style="--shiki-light:#0184BC;--shiki-dark:#ABB2BF">:</span><span style="--shiki-light:#383A42;--shiki-dark:#E5C07B"> item</span><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF">.</span><span style="--shiki-light:#E45649;--shiki-dark:#E06C75">jh</span><span style="--shiki-light:#0184BC;--shiki-dark:#56B6C2"> ||</span><span style="--shiki-light:#50A14F;--shiki-dark:#98C379"> '未知'</span><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF"> });</span></span>
<span class="line"><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF">        }</span></span>
<span class="line"><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF">      });</span></span>
<span class="line"><span style="--shiki-light:#A0A1A7;--shiki-light-font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic">      // 转换为数组并赋值给井列表</span></span>
<span class="line"><span style="--shiki-light:#383A42;--shiki-dark:#E5C07B">      wellList</span><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF">.</span><span style="--shiki-light:#E45649;--shiki-dark:#E06C75">value</span><span style="--shiki-light:#0184BC;--shiki-dark:#56B6C2"> =</span><span style="--shiki-light:#383A42;--shiki-dark:#E5C07B"> Array</span><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF">.</span><span style="--shiki-light:#4078F2;--shiki-dark:#61AFEF">from</span><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF">(</span><span style="--shiki-light:#383A42;--shiki-dark:#E5C07B">wellsMap</span><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF">.</span><span style="--shiki-light:#4078F2;--shiki-dark:#61AFEF">values</span><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF">());</span></span>
<span class="line"><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF">    } </span><span style="--shiki-light:#A626A4;--shiki-dark:#C678DD">else</span><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF"> {</span></span>
<span class="line"><span style="--shiki-light:#A0A1A7;--shiki-light-font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic">      // 设置错误信息</span></span>
<span class="line"><span style="--shiki-light:#383A42;--shiki-dark:#E5C07B">      errorMessage</span><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF">.</span><span style="--shiki-light:#E45649;--shiki-dark:#E06C75">value</span><span style="--shiki-light:#0184BC;--shiki-dark:#56B6C2"> =</span><span style="--shiki-light:#50A14F;--shiki-dark:#98C379"> '获取井列表失败：接口返回数据格式错误'</span><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF">;</span></span>
<span class="line"><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF">    }</span></span>
<span class="line"><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF">  } </span><span style="--shiki-light:#A626A4;--shiki-dark:#C678DD">catch</span><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF"> (</span><span style="--shiki-light:#383A42;--shiki-dark:#E06C75">error</span><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF">) {</span></span>
<span class="line"><span style="--shiki-light:#A0A1A7;--shiki-light-font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic">    // 错误处理</span></span>
<span class="line"><span style="--shiki-light:#383A42;--shiki-dark:#E5C07B">    console</span><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF">.</span><span style="--shiki-light:#4078F2;--shiki-dark:#61AFEF">error</span><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF">(</span><span style="--shiki-light:#50A14F;--shiki-dark:#98C379">'获取井列表失败:'</span><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF">, </span><span style="--shiki-light:#383A42;--shiki-dark:#E06C75">error</span><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF">);</span></span>
<span class="line"><span style="--shiki-light:#383A42;--shiki-dark:#E5C07B">    errorMessage</span><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF">.</span><span style="--shiki-light:#E45649;--shiki-dark:#E06C75">value</span><span style="--shiki-light:#0184BC;--shiki-dark:#56B6C2"> =</span><span style="--shiki-light:#50A14F;--shiki-dark:#98C379"> '获取井列表失败，请检查网络连接'</span><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF">;</span></span>
<span class="line"><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF">  } </span><span style="--shiki-light:#A626A4;--shiki-dark:#C678DD">finally</span><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF"> {</span></span>
<span class="line"><span style="--shiki-light:#A0A1A7;--shiki-light-font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic">    // 无论成功与否，重置加载状态</span></span>
<span class="line"><span style="--shiki-light:#383A42;--shiki-dark:#E5C07B">    isLoading</span><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF">.</span><span style="--shiki-light:#E45649;--shiki-dark:#E06C75">value</span><span style="--shiki-light:#0184BC;--shiki-dark:#56B6C2"> =</span><span style="--shiki-light:#986801;--shiki-dark:#D19A66"> false</span><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF">;</span></span>
<span class="line"><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF">  }</span></span>
<span class="line"><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF">};</span></span>
<span class="line"></span>
<span class="line"><span style="--shiki-light:#A0A1A7;--shiki-light-font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic">// 加载选中井数据函数</span></span>
<span class="line"><span style="--shiki-light:#A626A4;--shiki-dark:#C678DD">const</span><span style="--shiki-light:#4078F2;--shiki-dark:#61AFEF"> loadWellData</span><span style="--shiki-light:#0184BC;--shiki-dark:#56B6C2"> =</span><span style="--shiki-light:#A626A4;--shiki-dark:#C678DD"> async</span><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF"> () </span><span style="--shiki-light:#A626A4;--shiki-dark:#C678DD">=></span><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF"> {</span></span>
<span class="line"><span style="--shiki-light:#A0A1A7;--shiki-light-font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic">  // 如果没有选择井号，则清空数据并更新图表</span></span>
<span class="line"><span style="--shiki-light:#A626A4;--shiki-dark:#C678DD">  if</span><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF"> (</span><span style="--shiki-light:#0184BC;--shiki-dark:#56B6C2">!</span><span style="--shiki-light:#383A42;--shiki-dark:#E5C07B">selectedWellId</span><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF">.</span><span style="--shiki-light:#E45649;--shiki-dark:#E06C75">value</span><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF">) {</span></span>
<span class="line"><span style="--shiki-light:#383A42;--shiki-dark:#E5C07B">    productionData</span><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF">.</span><span style="--shiki-light:#E45649;--shiki-dark:#E06C75">value</span><span style="--shiki-light:#0184BC;--shiki-dark:#56B6C2"> =</span><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF"> { </span><span style="--shiki-light:#E45649;--shiki-dark:#E06C75">dates</span><span style="--shiki-light:#0184BC;--shiki-dark:#ABB2BF">:</span><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF"> [], </span><span style="--shiki-light:#E45649;--shiki-dark:#E06C75">values</span><span style="--shiki-light:#0184BC;--shiki-dark:#ABB2BF">:</span><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF"> [] };</span></span>
<span class="line"><span style="--shiki-light:#4078F2;--shiki-dark:#61AFEF">    updateChartData</span><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF">();</span></span>
<span class="line"><span style="--shiki-light:#A626A4;--shiki-dark:#C678DD">    return</span><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF">;</span></span>
<span class="line"><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF">  }</span></span>
<span class="line"><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF">  </span></span>
<span class="line"><span style="--shiki-light:#A0A1A7;--shiki-light-font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic">  // 开始加载，设置加载状态为true</span></span>
<span class="line"><span style="--shiki-light:#A626A4;--shiki-dark:#C678DD">  try</span><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF"> {</span></span>
<span class="line"><span style="--shiki-light:#383A42;--shiki-dark:#E5C07B">    isLoading</span><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF">.</span><span style="--shiki-light:#E45649;--shiki-dark:#E06C75">value</span><span style="--shiki-light:#0184BC;--shiki-dark:#56B6C2"> =</span><span style="--shiki-light:#986801;--shiki-dark:#D19A66"> true</span><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF">;</span></span>
<span class="line"><span style="--shiki-light:#A0A1A7;--shiki-light-font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic">    // 清空错误信息</span></span>
<span class="line"><span style="--shiki-light:#383A42;--shiki-dark:#E5C07B">    errorMessage</span><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF">.</span><span style="--shiki-light:#E45649;--shiki-dark:#E06C75">value</span><span style="--shiki-light:#0184BC;--shiki-dark:#56B6C2"> =</span><span style="--shiki-light:#50A14F;--shiki-dark:#98C379"> ''</span><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF">;</span></span>
<span class="line"><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF">    </span></span>
<span class="line"><span style="--shiki-light:#A0A1A7;--shiki-light-font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic">    // 发起HTTP请求获取指定井的数据</span></span>
<span class="line"><span style="--shiki-light:#A626A4;--shiki-dark:#C678DD">    const</span><span style="--shiki-light:#986801;--shiki-dark:#E5C07B"> response</span><span style="--shiki-light:#0184BC;--shiki-dark:#56B6C2"> =</span><span style="--shiki-light:#A626A4;--shiki-dark:#C678DD"> await</span><span style="--shiki-light:#383A42;--shiki-dark:#E5C07B"> axios</span><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF">.</span><span style="--shiki-light:#4078F2;--shiki-dark:#61AFEF">get</span><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF">(</span><span style="--shiki-light:#50A14F;--shiki-dark:#98C379">'https://xyd0916.github.io/lakes/%E4%BA%A7%E9%87%8F.json'</span><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF">, {</span></span>
<span class="line"><span style="--shiki-light:#A0A1A7;--shiki-light-font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic">      // 传递井号ID作为查询参数</span></span>
<span class="line"><span style="--shiki-light:#E45649;--shiki-dark:#E06C75">      params</span><span style="--shiki-light:#0184BC;--shiki-dark:#ABB2BF">:</span><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF"> { </span><span style="--shiki-light:#E45649;--shiki-dark:#E06C75">jhId</span><span style="--shiki-light:#0184BC;--shiki-dark:#ABB2BF">:</span><span style="--shiki-light:#383A42;--shiki-dark:#E5C07B"> selectedWellId</span><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF">.</span><span style="--shiki-light:#E45649;--shiki-dark:#E06C75">value</span><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF"> }</span></span>
<span class="line"><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF">    });</span></span>
<span class="line"><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF">    </span></span>
<span class="line"><span style="--shiki-light:#A0A1A7;--shiki-light-font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic">    // 检查响应数据格式是否正确</span></span>
<span class="line"><span style="--shiki-light:#A626A4;--shiki-dark:#C678DD">    if</span><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF"> (</span><span style="--shiki-light:#383A42;--shiki-dark:#E5C07B">response</span><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF">.</span><span style="--shiki-light:#E45649;--shiki-dark:#E5C07B">data</span><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF">.</span><span style="--shiki-light:#E45649;--shiki-dark:#E06C75">code</span><span style="--shiki-light:#0184BC;--shiki-dark:#56B6C2"> ===</span><span style="--shiki-light:#986801;--shiki-dark:#D19A66"> 200</span><span style="--shiki-light:#0184BC;--shiki-dark:#56B6C2"> &#x26;&#x26;</span><span style="--shiki-light:#383A42;--shiki-dark:#E5C07B"> response</span><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF">.</span><span style="--shiki-light:#E45649;--shiki-dark:#E5C07B">data</span><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF">.</span><span style="--shiki-light:#E45649;--shiki-dark:#E5C07B">data</span><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF">?.</span><span style="--shiki-light:#E45649;--shiki-dark:#E06C75">records</span><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF">) {</span></span>
<span class="line"><span style="--shiki-light:#A0A1A7;--shiki-light-font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic">      // 过滤有效数据并按日期排序</span></span>
<span class="line"><span style="--shiki-light:#A626A4;--shiki-dark:#C678DD">      const</span><span style="--shiki-light:#986801;--shiki-dark:#E5C07B"> sortedData</span><span style="--shiki-light:#0184BC;--shiki-dark:#56B6C2"> =</span><span style="--shiki-light:#383A42;--shiki-dark:#E5C07B"> response</span><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF">.</span><span style="--shiki-light:#E45649;--shiki-dark:#E5C07B">data</span><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF">.</span><span style="--shiki-light:#E45649;--shiki-dark:#E5C07B">data</span><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF">.</span><span style="--shiki-light:#E45649;--shiki-dark:#E06C75">records</span></span>
<span class="line"><span style="--shiki-light:#A0A1A7;--shiki-light-font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic">        // 过滤条件：日期存在且日产油量不为空且为有效数字</span></span>
<span class="line"><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF">        .</span><span style="--shiki-light:#4078F2;--shiki-dark:#61AFEF">filter</span><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF">(</span><span style="--shiki-light:#383A42;--shiki-light-font-style:inherit;--shiki-dark:#E06C75;--shiki-dark-font-style:italic">item</span><span style="--shiki-light:#A626A4;--shiki-dark:#C678DD"> =></span><span style="--shiki-light:#383A42;--shiki-dark:#E5C07B"> item</span><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF">.</span><span style="--shiki-light:#E45649;--shiki-dark:#E06C75">rq</span><span style="--shiki-light:#0184BC;--shiki-dark:#56B6C2"> &#x26;&#x26;</span><span style="--shiki-light:#383A42;--shiki-dark:#E5C07B"> item</span><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF">.</span><span style="--shiki-light:#E45649;--shiki-dark:#E06C75">rcyl</span><span style="--shiki-light:#0184BC;--shiki-dark:#56B6C2"> !==</span><span style="--shiki-light:#986801;--shiki-dark:#D19A66"> null</span><span style="--shiki-light:#0184BC;--shiki-dark:#56B6C2"> &#x26;&#x26;</span><span style="--shiki-light:#0184BC;--shiki-dark:#56B6C2"> !</span><span style="--shiki-light:#4078F2;--shiki-dark:#61AFEF">isNaN</span><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF">(</span><span style="--shiki-light:#383A42;--shiki-dark:#E5C07B">item</span><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF">.</span><span style="--shiki-light:#E45649;--shiki-dark:#E06C75">rcyl</span><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF">))</span></span>
<span class="line"><span style="--shiki-light:#A0A1A7;--shiki-light-font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic">        // 按日期升序排序</span></span>
<span class="line"><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF">        .</span><span style="--shiki-light:#4078F2;--shiki-dark:#61AFEF">sort</span><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF">((</span><span style="--shiki-light:#383A42;--shiki-light-font-style:inherit;--shiki-dark:#E06C75;--shiki-dark-font-style:italic">a</span><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF">, </span><span style="--shiki-light:#383A42;--shiki-light-font-style:inherit;--shiki-dark:#E06C75;--shiki-dark-font-style:italic">b</span><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF">) </span><span style="--shiki-light:#A626A4;--shiki-dark:#C678DD">=></span><span style="--shiki-light:#A626A4;--shiki-dark:#C678DD"> new</span><span style="--shiki-light:#4078F2;--shiki-dark:#61AFEF"> Date</span><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF">(</span><span style="--shiki-light:#383A42;--shiki-dark:#E5C07B">a</span><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF">.</span><span style="--shiki-light:#E45649;--shiki-dark:#E06C75">rq</span><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF">) </span><span style="--shiki-light:#0184BC;--shiki-dark:#56B6C2">-</span><span style="--shiki-light:#A626A4;--shiki-dark:#C678DD"> new</span><span style="--shiki-light:#4078F2;--shiki-dark:#61AFEF"> Date</span><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF">(</span><span style="--shiki-light:#383A42;--shiki-dark:#E5C07B">b</span><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF">.</span><span style="--shiki-light:#E45649;--shiki-dark:#E06C75">rq</span><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF">));</span></span>
<span class="line"><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF">      </span></span>
<span class="line"><span style="--shiki-light:#A0A1A7;--shiki-light-font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic">      // 提取日期和产量数据</span></span>
<span class="line"><span style="--shiki-light:#383A42;--shiki-dark:#E5C07B">      productionData</span><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF">.</span><span style="--shiki-light:#E45649;--shiki-dark:#E06C75">value</span><span style="--shiki-light:#0184BC;--shiki-dark:#56B6C2"> =</span><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF"> {</span></span>
<span class="line"><span style="--shiki-light:#A0A1A7;--shiki-light-font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic">        // 映射出日期数组</span></span>
<span class="line"><span style="--shiki-light:#E45649;--shiki-dark:#E06C75">        dates</span><span style="--shiki-light:#0184BC;--shiki-dark:#ABB2BF">:</span><span style="--shiki-light:#383A42;--shiki-dark:#E5C07B"> sortedData</span><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF">.</span><span style="--shiki-light:#4078F2;--shiki-dark:#61AFEF">map</span><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF">(</span><span style="--shiki-light:#383A42;--shiki-light-font-style:inherit;--shiki-dark:#E06C75;--shiki-dark-font-style:italic">item</span><span style="--shiki-light:#A626A4;--shiki-dark:#C678DD"> =></span><span style="--shiki-light:#383A42;--shiki-dark:#E5C07B"> item</span><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF">.</span><span style="--shiki-light:#E45649;--shiki-dark:#E06C75">rq</span><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF">),</span></span>
<span class="line"><span style="--shiki-light:#A0A1A7;--shiki-light-font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic">        // 映射出产量数组并转换为数字</span></span>
<span class="line"><span style="--shiki-light:#E45649;--shiki-dark:#E06C75">        values</span><span style="--shiki-light:#0184BC;--shiki-dark:#ABB2BF">:</span><span style="--shiki-light:#383A42;--shiki-dark:#E5C07B"> sortedData</span><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF">.</span><span style="--shiki-light:#4078F2;--shiki-dark:#61AFEF">map</span><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF">(</span><span style="--shiki-light:#383A42;--shiki-light-font-style:inherit;--shiki-dark:#E06C75;--shiki-dark-font-style:italic">item</span><span style="--shiki-light:#A626A4;--shiki-dark:#C678DD"> =></span><span style="--shiki-light:#4078F2;--shiki-dark:#61AFEF"> Number</span><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF">(</span><span style="--shiki-light:#383A42;--shiki-dark:#E5C07B">item</span><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF">.</span><span style="--shiki-light:#E45649;--shiki-dark:#E06C75">rcyl</span><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF">))</span></span>
<span class="line"><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF">      };</span></span>
<span class="line"><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF">      </span></span>
<span class="line"><span style="--shiki-light:#A0A1A7;--shiki-light-font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic">      // 更新图表数据</span></span>
<span class="line"><span style="--shiki-light:#4078F2;--shiki-dark:#61AFEF">      updateChartData</span><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF">();</span></span>
<span class="line"><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF">    } </span><span style="--shiki-light:#A626A4;--shiki-dark:#C678DD">else</span><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF"> {</span></span>
<span class="line"><span style="--shiki-light:#A0A1A7;--shiki-light-font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic">      // 设置错误信息</span></span>
<span class="line"><span style="--shiki-light:#383A42;--shiki-dark:#E5C07B">      errorMessage</span><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF">.</span><span style="--shiki-light:#E45649;--shiki-dark:#E06C75">value</span><span style="--shiki-light:#0184BC;--shiki-dark:#56B6C2"> =</span><span style="--shiki-light:#50A14F;--shiki-dark:#98C379"> '获取井数据失败：接口返回数据格式错误'</span><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF">;</span></span>
<span class="line"><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF">    }</span></span>
<span class="line"><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF">  } </span><span style="--shiki-light:#A626A4;--shiki-dark:#C678DD">catch</span><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF"> (</span><span style="--shiki-light:#383A42;--shiki-dark:#E06C75">error</span><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF">) {</span></span>
<span class="line"><span style="--shiki-light:#A0A1A7;--shiki-light-font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic">    // 错误处理</span></span>
<span class="line"><span style="--shiki-light:#383A42;--shiki-dark:#E5C07B">    console</span><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF">.</span><span style="--shiki-light:#4078F2;--shiki-dark:#61AFEF">error</span><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF">(</span><span style="--shiki-light:#50A14F;--shiki-dark:#98C379">'获取井数据失败:'</span><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF">, </span><span style="--shiki-light:#383A42;--shiki-dark:#E06C75">error</span><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF">);</span></span>
<span class="line"><span style="--shiki-light:#383A42;--shiki-dark:#E5C07B">    errorMessage</span><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF">.</span><span style="--shiki-light:#E45649;--shiki-dark:#E06C75">value</span><span style="--shiki-light:#0184BC;--shiki-dark:#56B6C2"> =</span><span style="--shiki-light:#50A14F;--shiki-dark:#98C379"> '获取井数据失败，请重试'</span><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF">;</span></span>
<span class="line"><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF">  } </span><span style="--shiki-light:#A626A4;--shiki-dark:#C678DD">finally</span><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF"> {</span></span>
<span class="line"><span style="--shiki-light:#A0A1A7;--shiki-light-font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic">    // 无论成功与否，重置加载状态</span></span>
<span class="line"><span style="--shiki-light:#383A42;--shiki-dark:#E5C07B">    isLoading</span><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF">.</span><span style="--shiki-light:#E45649;--shiki-dark:#E06C75">value</span><span style="--shiki-light:#0184BC;--shiki-dark:#56B6C2"> =</span><span style="--shiki-light:#986801;--shiki-dark:#D19A66"> false</span><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF">;</span></span>
<span class="line"><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF">  }</span></span>
<span class="line"><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF">};</span></span>
<span class="line"></span>
<span class="line"><span style="--shiki-light:#A0A1A7;--shiki-light-font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic">// 窗口大小变化处理函数</span></span>
<span class="line"><span style="--shiki-light:#A626A4;--shiki-dark:#C678DD">const</span><span style="--shiki-light:#4078F2;--shiki-dark:#61AFEF"> handleResize</span><span style="--shiki-light:#0184BC;--shiki-dark:#56B6C2"> =</span><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF"> () </span><span style="--shiki-light:#A626A4;--shiki-dark:#C678DD">=></span><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF"> {</span></span>
<span class="line"><span style="--shiki-light:#A0A1A7;--shiki-light-font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic">  // 调整图表大小以适应容器</span></span>
<span class="line"><span style="--shiki-light:#383A42;--shiki-dark:#E5C07B">  chartInstance</span><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF">.</span><span style="--shiki-light:#E45649;--shiki-dark:#E5C07B">value</span><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF">?.</span><span style="--shiki-light:#4078F2;--shiki-dark:#61AFEF">resize</span><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF">();</span></span>
<span class="line"><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF">};</span></span>
<span class="line"></span>
<span class="line"><span style="--shiki-light:#A0A1A7;--shiki-light-font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic">// 组件挂载后执行的生命周期钩子</span></span>
<span class="line"><span style="--shiki-light:#4078F2;--shiki-dark:#61AFEF">onMounted</span><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF">(() </span><span style="--shiki-light:#A626A4;--shiki-dark:#C678DD">=></span><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF"> {</span></span>
<span class="line"><span style="--shiki-light:#A0A1A7;--shiki-light-font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic">  // 初始化图表</span></span>
<span class="line"><span style="--shiki-light:#4078F2;--shiki-dark:#61AFEF">  initChart</span><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF">();</span></span>
<span class="line"><span style="--shiki-light:#A0A1A7;--shiki-light-font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic">  // 加载井列表数据</span></span>
<span class="line"><span style="--shiki-light:#4078F2;--shiki-dark:#61AFEF">  loadWellList</span><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF">();</span></span>
<span class="line"><span style="--shiki-light:#A0A1A7;--shiki-light-font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic">  // 添加窗口大小变化事件监听器</span></span>
<span class="line"><span style="--shiki-light:#383A42;--shiki-dark:#E5C07B">  window</span><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF">.</span><span style="--shiki-light:#4078F2;--shiki-dark:#61AFEF">addEventListener</span><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF">(</span><span style="--shiki-light:#50A14F;--shiki-dark:#98C379">'resize'</span><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF">, </span><span style="--shiki-light:#383A42;--shiki-dark:#E06C75">handleResize</span><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF">);</span></span>
<span class="line"><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF">});</span></span>
<span class="line"></span>
<span class="line"><span style="--shiki-light:#A0A1A7;--shiki-light-font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic">// 组件卸载前执行的生命周期钩子</span></span>
<span class="line"><span style="--shiki-light:#4078F2;--shiki-dark:#61AFEF">onUnmounted</span><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF">(() </span><span style="--shiki-light:#A626A4;--shiki-dark:#C678DD">=></span><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF"> {</span></span>
<span class="line"><span style="--shiki-light:#A0A1A7;--shiki-light-font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic">  // 移除窗口大小变化事件监听器</span></span>
<span class="line"><span style="--shiki-light:#383A42;--shiki-dark:#E5C07B">  window</span><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF">.</span><span style="--shiki-light:#4078F2;--shiki-dark:#61AFEF">removeEventListener</span><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF">(</span><span style="--shiki-light:#50A14F;--shiki-dark:#98C379">'resize'</span><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF">, </span><span style="--shiki-light:#383A42;--shiki-dark:#E06C75">handleResize</span><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF">);</span></span>
<span class="line"><span style="--shiki-light:#A0A1A7;--shiki-light-font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic">  // 销毁图表实例避免内存泄漏</span></span>
<span class="line"><span style="--shiki-light:#383A42;--shiki-dark:#E5C07B">  chartInstance</span><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF">.</span><span style="--shiki-light:#E45649;--shiki-dark:#E5C07B">value</span><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF">?.</span><span style="--shiki-light:#4078F2;--shiki-dark:#61AFEF">dispose</span><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF">();</span></span>
<span class="line"><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF">});</span></span>
<span class="line"><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF">&#x3C;/</span><span style="--shiki-light:#E45649;--shiki-dark:#E06C75">script</span><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF">></span></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><h4>4.1.3样式部分</h4>
<div class="language-vue line-numbers-mode" data-highlighter="shiki" data-ext="vue" style="--shiki-light:#383A42;--shiki-dark:#abb2bf;--shiki-light-bg:#FAFAFA;--shiki-dark-bg:#282c34"><pre class="shiki shiki-themes one-light one-dark-pro vp-code"><code class="language-vue"><span class="line"><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF">&#x3C;</span><span style="--shiki-light:#E45649;--shiki-dark:#E06C75">style</span><span style="--shiki-light:#986801;--shiki-dark:#D19A66"> scoped</span><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF">></span></span>
<span class="line"><span style="--shiki-light:#A0A1A7;--shiki-light-font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic">/* 图表容器样式 */</span></span>
<span class="line"><span style="--shiki-light:#986801;--shiki-dark:#D19A66">.oil-chart-container</span><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF"> {</span></span>
<span class="line"><span style="--shiki-light:#A0A1A7;--shiki-light-font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic">  /* 宽度100% */</span></span>
<span class="line"><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF">  width: </span><span style="--shiki-light:#986801;--shiki-dark:#D19A66">100</span><span style="--shiki-light:#986801;--shiki-dark:#E06C75">%</span><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF">;</span></span>
<span class="line"><span style="--shiki-light:#A0A1A7;--shiki-light-font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic">  /* 最小宽度600px */</span></span>
<span class="line"><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF">  min-width: </span><span style="--shiki-light:#986801;--shiki-dark:#D19A66">600</span><span style="--shiki-light:#986801;--shiki-dark:#E06C75">px</span><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF">;</span></span>
<span class="line"><span style="--shiki-light:#A0A1A7;--shiki-light-font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic">  /* 内边距20px */</span></span>
<span class="line"><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF">  padding: </span><span style="--shiki-light:#986801;--shiki-dark:#D19A66">20</span><span style="--shiki-light:#986801;--shiki-dark:#E06C75">px</span><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF">;</span></span>
<span class="line"><span style="--shiki-light:#A0A1A7;--shiki-light-font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic">  /* 盒模型设置 */</span></span>
<span class="line"><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF">  box-sizing: </span><span style="--shiki-light:#383A42;--shiki-dark:#D19A66">border-box</span><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF">;</span></span>
<span class="line"><span style="--shiki-light:#A0A1A7;--shiki-light-font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic">  /* 背景色白色 */</span></span>
<span class="line"><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF">  background-color: </span><span style="--shiki-light:#986801;--shiki-dark:#D19A66">#</span><span style="--shiki-light:#0184BC;--shiki-dark:#D19A66">fff</span><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF">;</span></span>
<span class="line"><span style="--shiki-light:#A0A1A7;--shiki-light-font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic">  /* 圆角8px */</span></span>
<span class="line"><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF">  border-radius: </span><span style="--shiki-light:#986801;--shiki-dark:#D19A66">8</span><span style="--shiki-light:#986801;--shiki-dark:#E06C75">px</span><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF">;</span></span>
<span class="line"><span style="--shiki-light:#A0A1A7;--shiki-light-font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic">  /* 阴影效果 */</span></span>
<span class="line"><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF">  box-shadow: </span><span style="--shiki-light:#986801;--shiki-dark:#D19A66">0</span><span style="--shiki-light:#986801;--shiki-dark:#D19A66"> 2</span><span style="--shiki-light:#986801;--shiki-dark:#E06C75">px</span><span style="--shiki-light:#986801;--shiki-dark:#D19A66"> 12</span><span style="--shiki-light:#986801;--shiki-dark:#E06C75">px</span><span style="--shiki-light:#0184BC;--shiki-dark:#56B6C2"> rgba</span><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF">(</span><span style="--shiki-light:#986801;--shiki-dark:#D19A66">0</span><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF">, </span><span style="--shiki-light:#986801;--shiki-dark:#D19A66">0</span><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF">, </span><span style="--shiki-light:#986801;--shiki-dark:#D19A66">0</span><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF">, </span><span style="--shiki-light:#986801;--shiki-dark:#D19A66">0.05</span><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF">);</span></span>
<span class="line"><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF">}</span></span>
<span class="line"></span>
<span class="line"><span style="--shiki-light:#A0A1A7;--shiki-light-font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic">/* 图表控制区域样式 */</span></span>
<span class="line"><span style="--shiki-light:#986801;--shiki-dark:#D19A66">.chart-controls</span><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF"> {</span></span>
<span class="line"><span style="--shiki-light:#A0A1A7;--shiki-light-font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic">  /* 下边距20px */</span></span>
<span class="line"><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF">  margin-bottom: </span><span style="--shiki-light:#986801;--shiki-dark:#D19A66">20</span><span style="--shiki-light:#986801;--shiki-dark:#E06C75">px</span><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF">;</span></span>
<span class="line"><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF">}</span></span>
<span class="line"></span>
<span class="line"><span style="--shiki-light:#A0A1A7;--shiki-light-font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic">/* 控制区域标题样式 */</span></span>
<span class="line"><span style="--shiki-light:#986801;--shiki-dark:#D19A66">.chart-controls</span><span style="--shiki-light:#E45649;--shiki-dark:#E06C75"> h2</span><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF"> {</span></span>
<span class="line"><span style="--shiki-light:#A0A1A7;--shiki-light-font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic">  /* 外边距设置 */</span></span>
<span class="line"><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF">  margin: </span><span style="--shiki-light:#986801;--shiki-dark:#D19A66">0</span><span style="--shiki-light:#986801;--shiki-dark:#D19A66"> 0</span><span style="--shiki-light:#986801;--shiki-dark:#D19A66"> 15</span><span style="--shiki-light:#986801;--shiki-dark:#E06C75">px</span><span style="--shiki-light:#986801;--shiki-dark:#D19A66"> 0</span><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF">;</span></span>
<span class="line"><span style="--shiki-light:#A0A1A7;--shiki-light-font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic">  /* 文字颜色 */</span></span>
<span class="line"><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF">  color: </span><span style="--shiki-light:#986801;--shiki-dark:#D19A66">#</span><span style="--shiki-light:#0184BC;--shiki-dark:#D19A66">333</span><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF">;</span></span>
<span class="line"><span style="--shiki-light:#A0A1A7;--shiki-light-font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic">  /* 字体大小 */</span></span>
<span class="line"><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF">  font-size: </span><span style="--shiki-light:#986801;--shiki-dark:#D19A66">18</span><span style="--shiki-light:#986801;--shiki-dark:#E06C75">px</span><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF">;</span></span>
<span class="line"><span style="--shiki-light:#A0A1A7;--shiki-light-font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic">  /* 字体粗细 */</span></span>
<span class="line"><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF">  font-weight: </span><span style="--shiki-light:#986801;--shiki-dark:#D19A66">600</span><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF">;</span></span>
<span class="line"><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF">}</span></span>
<span class="line"></span>
<span class="line"><span style="--shiki-light:#A0A1A7;--shiki-light-font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic">/* 筛选控件组样式 */</span></span>
<span class="line"><span style="--shiki-light:#986801;--shiki-dark:#D19A66">.filter-group</span><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF"> {</span></span>
<span class="line"><span style="--shiki-light:#A0A1A7;--shiki-light-font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic">  /* 弹性布局 */</span></span>
<span class="line"><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF">  display: </span><span style="--shiki-light:#383A42;--shiki-dark:#D19A66">flex</span><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF">;</span></span>
<span class="line"><span style="--shiki-light:#A0A1A7;--shiki-light-font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic">  /* 垂直居中对齐 */</span></span>
<span class="line"><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF">  align-items: </span><span style="--shiki-light:#383A42;--shiki-dark:#D19A66">center</span><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF">;</span></span>
<span class="line"><span style="--shiki-light:#A0A1A7;--shiki-light-font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic">  /* 元素间距10px */</span></span>
<span class="line"><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF">  gap: </span><span style="--shiki-light:#986801;--shiki-dark:#D19A66">10</span><span style="--shiki-light:#986801;--shiki-dark:#E06C75">px</span><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF">;</span></span>
<span class="line"><span style="--shiki-light:#A0A1A7;--shiki-light-font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic">  /* 下边距15px */</span></span>
<span class="line"><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF">  margin-bottom: </span><span style="--shiki-light:#986801;--shiki-dark:#D19A66">15</span><span style="--shiki-light:#986801;--shiki-dark:#E06C75">px</span><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF">;</span></span>
<span class="line"><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF">}</span></span>
<span class="line"></span>
<span class="line"><span style="--shiki-light:#A0A1A7;--shiki-light-font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic">/* 筛选控件标签样式 */</span></span>
<span class="line"><span style="--shiki-light:#986801;--shiki-dark:#D19A66">.filter-group</span><span style="--shiki-light:#E45649;--shiki-dark:#E06C75"> label</span><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF"> {</span></span>
<span class="line"><span style="--shiki-light:#A0A1A7;--shiki-light-font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic">  /* 文字颜色 */</span></span>
<span class="line"><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF">  color: </span><span style="--shiki-light:#986801;--shiki-dark:#D19A66">#</span><span style="--shiki-light:#0184BC;--shiki-dark:#D19A66">666</span><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF">;</span></span>
<span class="line"><span style="--shiki-light:#A0A1A7;--shiki-light-font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic">  /* 字体大小 */</span></span>
<span class="line"><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF">  font-size: </span><span style="--shiki-light:#986801;--shiki-dark:#D19A66">14</span><span style="--shiki-light:#986801;--shiki-dark:#E06C75">px</span><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF">;</span></span>
<span class="line"><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF">}</span></span>
<span class="line"></span>
<span class="line"><span style="--shiki-light:#A0A1A7;--shiki-light-font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic">/* 下拉选择框样式 */</span></span>
<span class="line"><span style="--shiki-light:#986801;--shiki-dark:#D19A66">.well-select</span><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF"> {</span></span>
<span class="line"><span style="--shiki-light:#A0A1A7;--shiki-light-font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic">  /* 内边距 */</span></span>
<span class="line"><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF">  padding: </span><span style="--shiki-light:#986801;--shiki-dark:#D19A66">8</span><span style="--shiki-light:#986801;--shiki-dark:#E06C75">px</span><span style="--shiki-light:#986801;--shiki-dark:#D19A66"> 12</span><span style="--shiki-light:#986801;--shiki-dark:#E06C75">px</span><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF">;</span></span>
<span class="line"><span style="--shiki-light:#A0A1A7;--shiki-light-font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic">  /* 边框样式 */</span></span>
<span class="line"><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF">  border: </span><span style="--shiki-light:#986801;--shiki-dark:#D19A66">1</span><span style="--shiki-light:#986801;--shiki-dark:#E06C75">px</span><span style="--shiki-light:#383A42;--shiki-dark:#D19A66"> solid</span><span style="--shiki-light:#986801;--shiki-dark:#D19A66"> #</span><span style="--shiki-light:#0184BC;--shiki-dark:#D19A66">ddd</span><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF">;</span></span>
<span class="line"><span style="--shiki-light:#A0A1A7;--shiki-light-font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic">  /* 圆角 */</span></span>
<span class="line"><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF">  border-radius: </span><span style="--shiki-light:#986801;--shiki-dark:#D19A66">4</span><span style="--shiki-light:#986801;--shiki-dark:#E06C75">px</span><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF">;</span></span>
<span class="line"><span style="--shiki-light:#A0A1A7;--shiki-light-font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic">  /* 字体大小 */</span></span>
<span class="line"><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF">  font-size: </span><span style="--shiki-light:#986801;--shiki-dark:#D19A66">14</span><span style="--shiki-light:#986801;--shiki-dark:#E06C75">px</span><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF">;</span></span>
<span class="line"><span style="--shiki-light:#A0A1A7;--shiki-light-font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic">  /* 最小宽度 */</span></span>
<span class="line"><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF">  min-width: </span><span style="--shiki-light:#986801;--shiki-dark:#D19A66">200</span><span style="--shiki-light:#986801;--shiki-dark:#E06C75">px</span><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF">;</span></span>
<span class="line"><span style="--shiki-light:#A0A1A7;--shiki-light-font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic">  /* 背景色 */</span></span>
<span class="line"><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF">  background-color: </span><span style="--shiki-light:#986801;--shiki-dark:#D19A66">#</span><span style="--shiki-light:#0184BC;--shiki-dark:#D19A66">fff</span><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF">;</span></span>
<span class="line"><span style="--shiki-light:#A0A1A7;--shiki-light-font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic">  /* 过渡动画 */</span></span>
<span class="line"><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF">  transition: border-color </span><span style="--shiki-light:#986801;--shiki-dark:#D19A66">0.2</span><span style="--shiki-light:#986801;--shiki-dark:#E06C75">s</span><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF">;</span></span>
<span class="line"><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF">}</span></span>
<span class="line"></span>
<span class="line"><span style="--shiki-light:#A0A1A7;--shiki-light-font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic">/* 下拉选择框焦点样式 */</span></span>
<span class="line"><span style="--shiki-light:#986801;--shiki-dark:#D19A66">.well-select</span><span style="--shiki-light:#986801;--shiki-dark:#56B6C2">:focus</span><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF"> {</span></span>
<span class="line"><span style="--shiki-light:#A0A1A7;--shiki-light-font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic">  /* 去除默认轮廓 */</span></span>
<span class="line"><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF">  outline: </span><span style="--shiki-light:#383A42;--shiki-dark:#D19A66">none</span><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF">;</span></span>
<span class="line"><span style="--shiki-light:#A0A1A7;--shiki-light-font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic">  /* 边框颜色 */</span></span>
<span class="line"><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF">  border-color: </span><span style="--shiki-light:#986801;--shiki-dark:#D19A66">#</span><span style="--shiki-light:#0184BC;--shiki-dark:#D19A66">4e79a7</span><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF">;</span></span>
<span class="line"><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF">}</span></span>
<span class="line"></span>
<span class="line"><span style="--shiki-light:#A0A1A7;--shiki-light-font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic">/* 加载指示器和错误信息样式 */</span></span>
<span class="line"><span style="--shiki-light:#986801;--shiki-dark:#D19A66">.loading-indicator</span><span style="--shiki-light:#A626A4;--shiki-dark:#ABB2BF">,</span><span style="--shiki-light:#986801;--shiki-dark:#D19A66"> .error-message</span><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF"> {</span></span>
<span class="line"><span style="--shiki-light:#A0A1A7;--shiki-light-font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic">  /* 文字颜色 */</span></span>
<span class="line"><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF">  color: </span><span style="--shiki-light:#986801;--shiki-dark:#D19A66">#</span><span style="--shiki-light:#0184BC;--shiki-dark:#D19A66">666</span><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF">;</span></span>
<span class="line"><span style="--shiki-light:#A0A1A7;--shiki-light-font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic">  /* 字体大小 */</span></span>
<span class="line"><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF">  font-size: </span><span style="--shiki-light:#986801;--shiki-dark:#D19A66">14</span><span style="--shiki-light:#986801;--shiki-dark:#E06C75">px</span><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF">;</span></span>
<span class="line"><span style="--shiki-light:#A0A1A7;--shiki-light-font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic">  /* 弹性布局 */</span></span>
<span class="line"><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF">  display: </span><span style="--shiki-light:#383A42;--shiki-dark:#D19A66">flex</span><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF">;</span></span>
<span class="line"><span style="--shiki-light:#A0A1A7;--shiki-light-font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic">  /* 垂直居中对齐 */</span></span>
<span class="line"><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF">  align-items: </span><span style="--shiki-light:#383A42;--shiki-dark:#D19A66">center</span><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF">;</span></span>
<span class="line"><span style="--shiki-light:#A0A1A7;--shiki-light-font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic">  /* 元素间距 */</span></span>
<span class="line"><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF">  gap: </span><span style="--shiki-light:#986801;--shiki-dark:#D19A66">8</span><span style="--shiki-light:#986801;--shiki-dark:#E06C75">px</span><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF">;</span></span>
<span class="line"><span style="--shiki-light:#A0A1A7;--shiki-light-font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic">  /* 上边距 */</span></span>
<span class="line"><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF">  margin-top: </span><span style="--shiki-light:#986801;--shiki-dark:#D19A66">10</span><span style="--shiki-light:#986801;--shiki-dark:#E06C75">px</span><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF">;</span></span>
<span class="line"><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF">}</span></span>
<span class="line"></span>
<span class="line"><span style="--shiki-light:#A0A1A7;--shiki-light-font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic">/* 错误信息特殊样式 */</span></span>
<span class="line"><span style="--shiki-light:#986801;--shiki-dark:#D19A66">.error-message</span><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF"> {</span></span>
<span class="line"><span style="--shiki-light:#A0A1A7;--shiki-light-font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic">  /* 错误文字颜色 */</span></span>
<span class="line"><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF">  color: </span><span style="--shiki-light:#986801;--shiki-dark:#D19A66">#</span><span style="--shiki-light:#0184BC;--shiki-dark:#D19A66">e74c3c</span><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF">;</span></span>
<span class="line"><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF">}</span></span>
<span class="line"></span>
<span class="line"><span style="--shiki-light:#A0A1A7;--shiki-light-font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic">/* 自定义加载动画 */</span></span>
<span class="line"><span style="--shiki-light:#986801;--shiki-dark:#D19A66">.spinner</span><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF"> {</span></span>
<span class="line"><span style="--shiki-light:#A0A1A7;--shiki-light-font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic">  /* 宽度 */</span></span>
<span class="line"><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF">  width: </span><span style="--shiki-light:#986801;--shiki-dark:#D19A66">16</span><span style="--shiki-light:#986801;--shiki-dark:#E06C75">px</span><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF">;</span></span>
<span class="line"><span style="--shiki-light:#A0A1A7;--shiki-light-font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic">  /* 高度 */</span></span>
<span class="line"><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF">  height: </span><span style="--shiki-light:#986801;--shiki-dark:#D19A66">16</span><span style="--shiki-light:#986801;--shiki-dark:#E06C75">px</span><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF">;</span></span>
<span class="line"><span style="--shiki-light:#A0A1A7;--shiki-light-font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic">  /* 边框 */</span></span>
<span class="line"><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF">  border: </span><span style="--shiki-light:#986801;--shiki-dark:#D19A66">2</span><span style="--shiki-light:#986801;--shiki-dark:#E06C75">px</span><span style="--shiki-light:#383A42;--shiki-dark:#D19A66"> solid</span><span style="--shiki-light:#986801;--shiki-dark:#D19A66"> #</span><span style="--shiki-light:#0184BC;--shiki-dark:#D19A66">ddd</span><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF">;</span></span>
<span class="line"><span style="--shiki-light:#A0A1A7;--shiki-light-font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic">  /* 上边框颜色 */</span></span>
<span class="line"><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF">  border-top-color: </span><span style="--shiki-light:#986801;--shiki-dark:#D19A66">#</span><span style="--shiki-light:#0184BC;--shiki-dark:#D19A66">4e79a7</span><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF">;</span></span>
<span class="line"><span style="--shiki-light:#A0A1A7;--shiki-light-font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic">  /* 圆形 */</span></span>
<span class="line"><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF">  border-radius: </span><span style="--shiki-light:#986801;--shiki-dark:#D19A66">50</span><span style="--shiki-light:#986801;--shiki-dark:#E06C75">%</span><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF">;</span></span>
<span class="line"><span style="--shiki-light:#A0A1A7;--shiki-light-font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic">  /* 旋转动画 */</span></span>
<span class="line"><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF">  animation: spin </span><span style="--shiki-light:#986801;--shiki-dark:#D19A66">1</span><span style="--shiki-light:#986801;--shiki-dark:#E06C75">s</span><span style="--shiki-light:#383A42;--shiki-dark:#D19A66"> linear</span><span style="--shiki-light:#383A42;--shiki-dark:#D19A66"> infinite</span><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF">;</span></span>
<span class="line"><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF">}</span></span>
<span class="line"></span>
<span class="line"><span style="--shiki-light:#A0A1A7;--shiki-light-font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic">/* 旋转动画定义 */</span></span>
<span class="line"><span style="--shiki-light:#A626A4;--shiki-dark:#C678DD">@keyframes</span><span style="--shiki-light:#383A42;--shiki-light-font-style:inherit;--shiki-dark:#E06C75;--shiki-dark-font-style:italic"> spin</span><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF"> {</span></span>
<span class="line"><span style="--shiki-light:#A0A1A7;--shiki-light-font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic">  /* 旋转360度 */</span></span>
<span class="line"><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF">  to { transform: </span><span style="--shiki-light:#0184BC;--shiki-dark:#56B6C2">rotate</span><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF">(</span><span style="--shiki-light:#986801;--shiki-dark:#D19A66">360</span><span style="--shiki-light:#986801;--shiki-dark:#E06C75">deg</span><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF">); }</span></span>
<span class="line"><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF">}</span></span>
<span class="line"></span>
<span class="line"><span style="--shiki-light:#A0A1A7;--shiki-light-font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic">/* 图表包装器样式 */</span></span>
<span class="line"><span style="--shiki-light:#986801;--shiki-dark:#D19A66">.chart-wrapper</span><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF"> {</span></span>
<span class="line"><span style="--shiki-light:#A0A1A7;--shiki-light-font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic">  /* 宽度 */</span></span>
<span class="line"><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF">  width: </span><span style="--shiki-light:#986801;--shiki-dark:#D19A66">100</span><span style="--shiki-light:#986801;--shiki-dark:#E06C75">%</span><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF">;</span></span>
<span class="line"><span style="--shiki-light:#A0A1A7;--shiki-light-font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic">  /* 高度 */</span></span>
<span class="line"><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF">  height: </span><span style="--shiki-light:#986801;--shiki-dark:#D19A66">500</span><span style="--shiki-light:#986801;--shiki-dark:#E06C75">px</span><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF">;</span></span>
<span class="line"><span style="--shiki-light:#A0A1A7;--shiki-light-font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic">  /* 定位 */</span></span>
<span class="line"><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF">  position: </span><span style="--shiki-light:#383A42;--shiki-dark:#D19A66">relative</span><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF">;</span></span>
<span class="line"><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF">}</span></span>
<span class="line"></span>
<span class="line"><span style="--shiki-light:#A0A1A7;--shiki-light-font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic">/* 图表区域样式 */</span></span>
<span class="line"><span style="--shiki-light:#986801;--shiki-dark:#D19A66">.chart-area</span><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF"> {</span></span>
<span class="line"><span style="--shiki-light:#A0A1A7;--shiki-light-font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic">  /* 宽度 */</span></span>
<span class="line"><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF">  width: </span><span style="--shiki-light:#986801;--shiki-dark:#D19A66">100</span><span style="--shiki-light:#986801;--shiki-dark:#E06C75">%</span><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF">;</span></span>
<span class="line"><span style="--shiki-light:#A0A1A7;--shiki-light-font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic">  /* 高度 */</span></span>
<span class="line"><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF">  height: </span><span style="--shiki-light:#986801;--shiki-dark:#D19A66">100</span><span style="--shiki-light:#986801;--shiki-dark:#E06C75">%</span><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF">;</span></span>
<span class="line"><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF">}</span></span>
<span class="line"><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF">&#x3C;/</span><span style="--shiki-light:#E45649;--shiki-dark:#E06C75">style</span><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF">></span></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><h2>4.2在Vue中使用组件</h2>
<p>要在Vue中使用这个组件，我们需要在其他vue文件中引入它：</p>
<div class="language-vue line-numbers-mode" data-highlighter="shiki" data-ext="vue" style="--shiki-light:#383A42;--shiki-dark:#abb2bf;--shiki-light-bg:#FAFAFA;--shiki-dark-bg:#282c34"><pre class="shiki shiki-themes one-light one-dark-pro vp-code"><code class="language-vue"><span class="line"><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF">&#x3C;</span><span style="--shiki-light:#E45649;--shiki-dark:#E06C75">script</span><span style="--shiki-light:#986801;--shiki-dark:#D19A66"> setup</span><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF">></span></span>
<span class="line"><span style="--shiki-light:#A0A1A7;--shiki-light-font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic">// 使用 Vue 支持的组件引入语法</span></span>
<span class="line"><span style="--shiki-light:#A626A4;--shiki-dark:#C678DD">import</span><span style="--shiki-light:#E45649;--shiki-dark:#E06C75"> OilProductionChart</span><span style="--shiki-light:#A626A4;--shiki-dark:#C678DD"> from</span><span style="--shiki-light:#50A14F;--shiki-dark:#98C379"> "@source/posts/vue3/components/ProductionChart.vue"</span><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF"> </span></span>
<span class="line"><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF">&#x3C;/</span><span style="--shiki-light:#E45649;--shiki-dark:#E06C75">script</span><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF">></span></span>
<span class="line"></span>
<span class="line"><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF">&#x3C;</span><span style="--shiki-light:#E45649;--shiki-dark:#E06C75">OilProductionChart</span><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF"> /></span></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><h2>最佳实践</h2>
<ol>
<li><strong>按需引入</strong>：只引入实际使用的图表和组件，减小打包体积</li>
<li><strong>合理销毁</strong>：在组件卸载时销毁图表实例，避免内存泄漏</li>
<li><strong>响应式处理</strong>：监听窗口大小变化并调整图表大小</li>
<li><strong>错误处理</strong>：妥善处理数据加载和渲染过程中的错误</li>
<li><strong>性能优化</strong>：对于大量数据，考虑使用数据区域缩放(dataZoom)等功能</li>
</ol>
<h2>总结</h2>
<p>ECharts是一个功能强大的数据可视化库，在Vue 3项目中使用它可以创建出丰富多样的图表。通过按需引入、合理配置和优化，我们可以构建出高性能、美观的可视化界面。本文中的油井产量趋势分析案例展示了如何在实际项目中应用ECharts，希望能为你在项目中使用ECharts提供参考。</p>
]]></content>
    <category term="前端"/>
    <published>2022-01-07T00:00:00.000Z</published>
  </entry>
  <entry>
    <title type="text">Element-plus快速入门</title>
    <id>https://giser.date/posts/vue3/4.html</id>
    <link href="https://giser.date/posts/vue3/4.html"/>
    <updated>2025-08-22T10:07:57.000Z</updated>
    <summary type="html"><![CDATA[
<h2>标题 2</h2>
<p>这里是内容。</p>
<h3>标题 3</h3>
<p>这里是内容。</p>
]]></summary>
    <content type="html"><![CDATA[
<h2>标题 2</h2>
<p>这里是内容。</p>
<h3>标题 3</h3>
<p>这里是内容。</p>
]]></content>
    <category term="香蕉"/>
    <published>2022-01-08T00:00:00.000Z</published>
  </entry>
</feed>