From 95f44bd509e286290a18639531de3e05768c3a90 Mon Sep 17 00:00:00 2001
From: gaoluyang <2820782392@qq.com>
Date: 星期二, 24 六月 2025 16:46:07 +0800
Subject: [PATCH] 1.巡检管理-二维码管理联调 2.巡检管理-现场巡检记录开发联调 3.巡检上传-现场巡检开发联调

---
 src/views/index.vue                                           | 1085 ------------------------------
 src/components/Echarts/echarts.vue                            |  152 ++++
 src/api/inspectionUpload/index.js                             |   43 +
 src/views/inspectionUpload/index.vue                          |  290 +++++++
 package.json                                                  |    1 
 src/views/inspectionUpload/components/qrCodeFormDia.vue       |  175 +++++
 src/views/inspectionManagement/index.vue                      |   79 +
 src/views/inspectionManagement/components/qrCodeDia.vue       |   67 +
 src/views/inspectionManagement/components/viewQrCodeFiles.vue |  169 ++++
 9 files changed, 932 insertions(+), 1,129 deletions(-)

diff --git a/package.json b/package.json
index d69c048..1e90630 100644
--- a/package.json
+++ b/package.json
@@ -34,6 +34,7 @@
     "nprogress": "0.2.0",
     "pinia": "2.1.7",
     "print-js": "^1.6.0",
+    "qr-scanner": "^1.4.2",
     "qrcode": "^1.5.4",
     "splitpanes": "3.1.5",
     "vue": "3.4.31",
diff --git a/src/api/inspectionUpload/index.js b/src/api/inspectionUpload/index.js
new file mode 100644
index 0000000..0d954e2
--- /dev/null
+++ b/src/api/inspectionUpload/index.js
@@ -0,0 +1,43 @@
+// 宸℃涓婁紶
+import request from '@/utils/request'
+
+// 浜岀淮鐮佺鐞嗚〃鏌ヨ
+export function qrCodeList(query) {
+    return request({
+        url: '/qrCode/list',
+        method: 'get',
+        params: query
+    })
+}
+// 浜岀淮鐮佹壂鐮佽褰曡〃鏌ヨ
+export function qrCodeScanRecordList(query) {
+    return request({
+        url: '/qrCodeScanRecord/list',
+        method: 'get',
+        params: query
+    })
+}
+// 浜岀淮鐮佺鐞嗚〃鏂板淇敼
+export function addOrEditQrCode(query) {
+    return request({
+        url: '/qrCode/addOrEditQrCode',
+        method: 'post',
+        data: query
+    })
+}
+// 浜岀淮鐮佹壂鐮佽褰曡〃鏂板淇敼
+export function addOrEditQrCodeRecord(query) {
+    return request({
+        url: '/qrCodeScanRecord/addOrEditQrCodeRecord',
+        method: 'post',
+        data: query
+    })
+}
+// 浜岀淮鐮佹壂鐮佽褰曡〃鏂板淇敼
+export function delQrCode(query) {
+    return request({
+        url: '/qrCode/delQrCode',
+        method: 'delete',
+        data: query
+    })
+}
\ No newline at end of file
diff --git a/src/components/Echarts/echarts.vue b/src/components/Echarts/echarts.vue
new file mode 100644
index 0000000..4601e41
--- /dev/null
+++ b/src/components/Echarts/echarts.vue
@@ -0,0 +1,152 @@
+<template>
+  <div>
+    <div ref="chartRef" :style="chartStyle"></div>
+  </div>
+</template>
+
+<script setup>
+import { ref, onMounted, onBeforeUnmount, watchEffect } from 'vue'
+import * as echarts from 'echarts'
+
+// Props
+const props = defineProps({
+  options: {
+    type: Object,
+    default: () => ({})
+  },
+  chartStyle: {
+    type: Object,
+    default: () => ({
+      height: '80%',
+      width: '100%'
+    })
+  },
+  dataset: {
+    type: Object,
+    default: () => {}
+  },
+  xAxis: {
+    type: Array,
+    default: () => []
+  },
+  yAxis: {
+    type: Array,
+    default: () => []
+  },
+  series: {
+    type: Array,
+    default: () => []
+  },
+  grid: {
+    type: Object,
+    default: () => ({})
+  },
+  legend: {
+    type: Object,
+    default: () => ({})
+  },
+  tooltip: {
+    type: Object,
+    default: () => ({})
+  },
+  lineColors: {
+    type: Array,
+    default: () => []
+  },
+  barColors: {
+    type: Array,
+    default: () => []
+  },
+  pieColors: {
+    type: Array,
+    default: () => []
+  },
+  loadingOption: {
+    type: Object,
+    default: () => ({
+      text: '鏁版嵁鍔犺浇涓�...',
+      color: '#00BAFF',
+      textColor: '#000',
+      maskColor: 'rgba(255, 255, 255, 0.8)',
+      zlevel: 0
+    })
+  }
+})
+
+import { watch } from 'vue'
+
+// Refs
+const chartRef = ref(null)
+let chartInstance = null
+
+// Methods
+function generateChart(option) {
+  const copiedOption = JSON.parse(JSON.stringify(option)) // 鉁� 娣辨嫹璐�
+  
+  // if (copiedOption.series && copiedOption.series.length > 0) {
+  //   copiedOption.series.forEach((s, index) => {
+  //     if (s.type === 'line') {
+  //       s.itemStyle = {
+  //         color: props.lineColors[index] || props.lineColors[0]
+  //       }
+  //       s.lineStyle = {
+  //         color: props.lineColors[index] || props.lineColors[0]
+  //       }
+  //     } else if (s.type === 'bar') {
+  //       s.itemStyle = {
+  //         color: props.barColors[index] || props.barColors[0]
+  //       }
+  //     }
+  //   })
+  // }
+  
+  chartInstance.setOption(copiedOption)
+}
+
+function renderChart() {
+  const option = {
+    backgroundColor: props.options.backgroundColor || '#fff',
+    xAxis: props.xAxis,
+    yAxis: props.yAxis,
+    dataset: props.dataset,
+    series: props.series,
+    grid: props.grid,
+    legend: props.legend,
+    tooltip: props.tooltip
+  }
+  
+  chartInstance.clear()
+  generateChart(option)
+}
+
+function windowResizeListener() {
+  if (!chartInstance) return
+  chartInstance.resize()
+}
+
+// Lifecycle hooks
+onMounted(() => {
+  chartInstance = echarts.init(chartRef.value)
+  renderChart()
+  window.addEventListener('resize', windowResizeListener)
+})
+
+onBeforeUnmount(() => {
+  if (chartInstance) {
+    window.removeEventListener('resize', windowResizeListener)
+    chartInstance.dispose()
+    chartInstance = null
+  }
+})
+
+// Watch all reactive props that affect the chart
+watch(
+    () => [props.xAxis, props.series],
+    () => {
+      if (chartInstance) {
+        renderChart()
+      }
+    },
+    { deep: true, immediate: true }
+)
+</script>
\ No newline at end of file
diff --git a/src/views/index.vue b/src/views/index.vue
index 76688c0..c57322c 100644
--- a/src/views/index.vue
+++ b/src/views/index.vue
@@ -1,1095 +1,14 @@
 <template>
-  <div class="app-container home">
-    <el-row :gutter="20">
-      <el-col :sm="24" :lg="12" style="padding-left: 20px">
-        <h2>鑻ヤ緷鍚庡彴绠$悊妗嗘灦</h2>
-        <p>
-          涓�鐩存兂鍋氫竴娆惧悗鍙扮鐞嗙郴缁燂紝鐪嬩簡寰堝浼樼鐨勫紑婧愰」鐩絾鏄彂鐜版病鏈夊悎閫傝嚜宸辩殑銆備簬鏄埄鐢ㄧ┖闂蹭紤鎭椂闂村紑濮嬭嚜宸卞啓涓�濂楀悗鍙扮郴缁熴�傚姝ゆ湁浜嗚嫢渚濈鐞嗙郴缁燂紝濂瑰彲浠ョ敤浜庢墍鏈夌殑Web搴旂敤绋嬪簭锛屽缃戠珯绠$悊鍚庡彴锛岀綉绔欎細鍛樹腑蹇冿紝CMS锛孋RM锛孫A绛夌瓑锛屽綋鐒讹紝鎮ㄤ篃鍙互瀵瑰ス杩涜娣卞害瀹氬埗锛屼互鍋氬嚭鏇村己绯荤粺銆傛墍鏈夊墠绔悗鍙颁唬鐮佸皝瑁呰繃鍚庡崄鍒嗙簿绠�鏄撲笂鎵嬶紝鍑洪敊姒傜巼浣庛�傚悓鏃舵敮鎸佺Щ鍔ㄥ鎴风璁块棶銆傜郴缁熶細闄嗙画鏇存柊涓�浜涘疄鐢ㄥ姛鑳姐��
-        </p>
-        <p>
-          <b>褰撳墠鐗堟湰:</b> <span>v{{ version }}</span>
-        </p>
-        <p>
-          <el-tag type="danger">&yen;鍏嶈垂寮�婧�</el-tag>
-        </p>
-        <p>
-          <el-button
-            type="primary"
-            icon="Cloudy"
-            plain
-            @click="goTarget('https://gitee.com/y_project/RuoYi-Vue')"
-            >璁块棶鐮佷簯</el-button
-          >
-          <el-button
-            icon="HomeFilled"
-            plain
-            @click="goTarget('http://ruoyi.vip')"
-            >璁块棶涓婚〉</el-button
-          >
-        </p>
-      </el-col>
-
-      <el-col :sm="24" :lg="12" style="padding-left: 50px">
-        <el-row>
-          <el-col :span="12">
-            <h2>鎶�鏈�夊瀷</h2>
-          </el-col>
-        </el-row>
-        <el-row>
-          <el-col :span="6">
-            <h4>鍚庣鎶�鏈�</h4>
-            <ul>
-              <li>SpringBoot</li>
-              <li>Spring Security</li>
-              <li>JWT</li>
-              <li>MyBatis</li>
-              <li>Druid</li>
-              <li>Fastjson</li>
-              <li>...</li>
-            </ul>
-          </el-col>
-          <el-col :span="6">
-            <h4>鍓嶇鎶�鏈�</h4>
-            <ul>
-              <li>Vue</li>
-              <li>Vuex</li>
-              <li>Element-ui</li>
-              <li>Axios</li>
-              <li>Sass</li>
-              <li>Quill</li>
-              <li>...</li>
-            </ul>
-          </el-col>
-        </el-row>
-      </el-col>
-    </el-row>
-    <el-divider />
-    <el-row :gutter="20">
-      <el-col :xs="24" :sm="24" :md="12" :lg="8">
-        <el-card class="update-log">
-          <template v-slot:header>
-            <div class="clearfix">
-              <span>鑱旂郴淇℃伅</span>
-            </div>
-          </template>
-          <div class="body">
-            <p>
-              <i class="el-icon-s-promotion"></i> 瀹樼綉锛�<el-link
-                href="http://www.ruoyi.vip"
-                target="_blank"
-                >http://www.ruoyi.vip</el-link
-              >
-            </p>
-            <p>
-              <i class="el-icon-user-solid"></i> QQ缇わ細<s> 婊�937441 </s> <s> 婊�887144332 </s>
-              <s> 婊�180251782 </s> <s> 婊�104180207 </s> <s> 婊�186866453 </s> <s> 婊�201396349 </s>
-              <s> 婊�101456076 </s> <s> 婊�101539465 </s> <s> 婊�264312783 </s> <s> 婊�167385320 </s> 
-              <s> 婊�104748341 </s> <s> 婊�160110482 </s> <s> 婊�170801498 </s> <s> 婊�108482800 </s> 
-              <s> 婊�101046199 </s> <s> 婊�136919097 </s> <s> 婊�143961921 </s> <s> 婊�174951577 </s> 
-              <s> 婊�161281055 </s> <s> 婊�138988063 </s> <s> 婊�151450850 </s> <s> 婊�224622315 </s>
-              <s> 婊�287842588 </s> <s> 婊�187944233 </s> <a href="http://qm.qq.com/cgi-bin/qm/qr?_wv=1027&k=G6r5KGCaa3pqdbUSXNIgYloyb8e0_L0D&authKey=4w8tF1eGW7%2FedWn%2FHAypQksdrML%2BDHolQSx7094Agm7Luakj9EbfPnSTxSi2T1LQ&noverify=0&group_code=228578329" target="_blank">228578329</a>
-            </p>
-            <p>
-              <i class="el-icon-chat-dot-round"></i> 寰俊锛�<a
-                href="javascript:;"
-                >/ *鑻ヤ緷</a
-              >
-            </p>
-            <p>
-              <i class="el-icon-money"></i> 鏀粯瀹濓細<a
-                href="javascript:;"
-                class="鏀粯瀹濅俊鎭�"
-                >/ *鑻ヤ緷</a
-              >
-            </p>
-          </div>
-        </el-card>
-      </el-col>
-      <el-col :xs="24" :sm="24" :md="12" :lg="8">
-        <el-card class="update-log">
-          <template v-slot:header>
-            <div class="clearfix">
-              <span>鏇存柊鏃ュ織</span>
-            </div>
-          </template>
-          <el-collapse accordion>
-            <el-collapse-item title="v3.8.9 - 2024-12-30">
-              <ol>
-                <li>鐢ㄦ埛绠$悊鏀寔鍒嗘爮鎷栧姩</li>
-                <li>淇敼涓婚鏍峰紡鏈湴璇诲彇</li>
-                <li>鐢ㄦ埛澶村儚http(s)閾炬帴鏀寔</li>
-                <li>鐢ㄦ埛绠$悊杩囨护鎺夊凡绂佺敤閮ㄩ棬</li>
-                <li>鏀寔鑷畾涔夋樉绀篍xcel灞炴�у垪</li>
-                <li>鎿嶄綔鏃ュ織璁板綍DELETE璇锋眰鍙傛暟</li>
-                <li>鐧藉悕鍗曟敮鎸佸閫氶厤绗﹁矾寰勫尮閰�</li>
-                <li>鏍℃鏂囦欢鍚嶆槸鍚﹀寘鍚壒娈婂瓧绗�</li>
-                <li>浠g爜鐢熸垚鍒涘缓琛ㄥ睆钄借繚瑙勭殑瀛楃</li>
-                <li>鑿滃崟闈㈠寘灞戝鑸敮鎸佸灞傜骇鏄剧ず</li>
-                <li>Excel娉ㄨВ鏀寔wrapText鏄惁鍏佽鍐呭鎹㈣</li>
-                <li>浠g爜鐢熸垚鏂板閰嶇疆鏄惁鍏佽鏂囦欢瑕嗙洊鍒版湰鍦�</li>
-                <li>淇瑙掕壊绂佺敤鏉冮檺涓嶅け鏁堥棶棰�</li>
-                <li>淇浠g爜鐢熸垚涓婄骇鑿滃崟鏄剧ず闂</li>
-                <li>淇瀵煎嚭瀛愬垪琛ㄥ璞″彧鑳藉湪鏈�鍚庣殑闂</li>
-                <li>淇TopNav鏃犳硶姝g‘鑾峰彇active鐨勯棶棰�</li>
-                <li>淇榛樿鍏抽棴Tags-Views鍐呴摼椤甸潰鎵撲笉寮�</li>
-                <li>鍗囩骇oshi鍒版渶鏂扮増鏈�6.6.5</li>
-                <li>鍗囩骇tomcat鍒版渶鏂扮増鏈�9.0.96</li>
-                <li>鍗囩骇fastjson鍒版渶鏂扮増2.0.53</li>
-                <li>鍗囩骇logback鍒版渶鏂扮増鏈�1.2.13</li>
-                <li>鍗囩骇spring-framework鍒版渶鏂扮増鏈�5.3.39</li>
-                <li>鍗囩骇quill鍒版渶鏂扮増鏈�2.0.2</li>
-                <li>鍗囩骇axios鍒版渶鏂扮増鏈�0.28.1</li>
-                <li>浼樺寲韬唤璇佽劚鏁忔鍒�</li>
-                <li>浼樺寲鏉冮檺鏇存柊鍚庡悓姝ョ紦瀛�</li>
-                <li>浼樺寲鏌ヨ鏃堕棿鑼冨洿鏃ユ湡鏍煎紡</li>
-                <li>浼樺寲鍙傛暟閿�兼洿鎹负澶氳鏂囨湰</li>
-                <li>浼樺寲瀵煎叆甯︽爣棰樻枃浠跺叧闂竻鐞�</li>
-                <li>浼樺寲涓婁紶鍥剧墖甯﹀煙鍚嶄笉澧炲姞鍓嶇紑</li>
-                <li>浼樺寲鐗规畩瀛楃瀵嗙爜淇敼澶辫触闂</li>
-                <li>浼樺寲鏃犵敤鎴风紪鍙蜂笉鏍¢獙鏁版嵁鏉冮檺</li>
-                <li>浼樺寲TopNav鍐呴摼鑿滃崟鐐瑰嚮娌℃湁楂樹寒</li>
-                <li>浼樺寲鑿滃崟绠$悊鍒囨崲Mini甯冨眬閿欎贡闂</li>
-                <li>鍏朵粬缁嗚妭浼樺寲</li>
-              </ol>
-            </el-collapse-item>
-            <el-collapse-item title="v3.8.8 - 2024-06-30">
-              <ol>
-                <li>鑿滃崟绠$悊鏂板璺敱鍚嶇О</li>
-                <li>鏂板鏁版嵁鑴辨晱杩囨护娉ㄨВ</li>
-                <li>鐢ㄦ埛瀵嗙爜鏂板闈炴硶瀛楃楠岃瘉</li>
-                <li>闄愬埗鐢ㄦ埛鎿嶄綔鏁版嵁鏉冮檺鑼冨洿</li>
-                <li>浠g爜鐢熸垚鏂板鍒涘缓琛ㄧ粨鏋勫姛鑳�</li>
-                <li>瀹氭椂浠诲姟鐧藉悕鍗曢厤缃寖鍥寸缉灏�</li>
-                <li>浼樺寲浠g爜鐢熸垚涓诲瓙琛ㄥ叧鑱旀煡璇㈡柟寮�</li>
-                <li>Excel娉ㄨВ鏂板灞炴�omboReadDict</li>
-                <li>Excel娉ㄨВColumnType绫诲瀷鏂板鏂囨湰</li>
-                <li>鏂板鍥介檯鍖栬祫婧愭枃浠堕厤缃�</li>
-                <li>鍗囩骇oshi鍒版渶鏂扮増鏈�6.6.1</li>
-                <li>鍗囩骇druid鍒版渶鏂扮増鏈�1.2.23</li>
-                <li>鍗囩骇core-js鍒版渶鏂扮増鏈�3.37.1</li>
-                <li>鏇存柊HttpUtils涓殑User-Agent</li>
-                <li>鏇存柊compressionPlugin鍒�6.1.2浠ュ吋瀹筺ode18+</li>
-                <li>鍗囩骇spring-security鍒板畨鍏ㄧ増鏈紝闃叉婕忔礊椋庨櫓</li>
-                <li>鍗囩骇spring-framework鍒板畨鍏ㄧ増鏈紝闃叉婕忔礊椋庨櫓</li>
-                <li>浼樺寲鑷畾涔塜SS娉ㄨВ鍖归厤鏂瑰紡</li>
-                <li>浼樺寲缂撳瓨鐩戞帶閿悕鍒楄〃鎺掑簭鏄剧ず</li>
-                <li>浼樺寲瀹氭椂浠诲姟鏃ュ織榛樿鎸夋椂闂存帓搴�</li>
-                <li>浼樺寲榛樿鏂囦欢澶у皬瓒呰繃2G鏃犳晥鐨勯棶棰�</li>
-                <li>浼樺寲鏌ヨ〃鐗规畩瀛楃浣跨敤鍙嶆枩鏉犺繘琛岃浆涔�</li>
-                <li>浼樺寲瀹氭椂浠诲姟cron琛ㄨ揪寮忓皬鏃堕厤缃樉绀洪敊璇棶棰�</li>
-                <li>浼樺寲澶氫釜鑷畾鏁版嵁鏉冮檺浣跨敤in鏌ヨ,閬垮厤澶氭鎷兼帴</li>
-                <li>浼樺寲瀵煎叆Excel鏃惰缃甦ictType灞炴�ч噸澶嶆煡缂撳瓨闂</li>
-                <li>鍏朵粬缁嗚妭浼樺寲</li>
-              </ol>
-            </el-collapse-item>
-            <el-collapse-item title="v3.8.7 - 2023-12-08">
-              <ol>
-                <li>鎿嶄綔鏃ュ織璁板綍閮ㄩ棬鍚嶇О</li>
-                <li>鍏ㄥ眬鏁版嵁瀛樺偍鐢ㄦ埛缂栧彿</li>
-                <li>鏂板缂栫▼寮忓垽鏂祫婧愯闂潈闄�</li>
-                <li>鎿嶄綔鏃ュ織鍒楄〃鏂板IP鍦板潃鏌ヨ</li>
-                <li>瀹氭椂浠诲姟鏂板椤靛幓闄ょ姸鎬侀�夐」</li>
-                <li>浠g爜鐢熸垚鏀寔閫夋嫨鍓嶇妯℃澘绫诲瀷</li>
-                <li>鏄鹃殣鍒楃粍浠舵敮鎸佸閫夋寮瑰嚭绫诲瀷</li>
-                <li>閫氱敤鎺掑簭灞炴�rderBy鍙傛暟闄愬埗闀垮害</li>
-                <li>Excel鑷畾涔夋暟鎹鐞嗗櫒澧炲姞鍗曞厓鏍�/宸ヤ綔绨垮璞�</li>
-                <li>鍗囩骇oshi鍒版渶鏂扮増鏈�6.4.8</li>
-                <li>鍗囩骇druid鍒版渶鏂扮増鏈�1.2.20</li>
-                <li>鍗囩骇fastjson鍒版渶鏂扮増2.0.43</li>
-                <li>鍗囩骇pagehelper鍒版渶鏂扮増1.4.7</li>
-                <li>鍗囩骇commons.io鍒版渶鏂扮増鏈�2.13.0</li>
-                <li>鍗囩骇element-ui鍒版渶鏂扮増鏈�2.15.14</li>
-                <li>淇浜旂骇璺敱缂撳瓨鏃犳晥闂</li>
-                <li>淇澶栭摼甯︾鍙e嚭鐜扮殑寮傚父</li>
-                <li>淇鏍戞ā鏉跨埗绾х紪鐮佸彉閲忛敊璇�</li>
-                <li>淇瀛楀吀琛ㄨ鎯呴〉闈㈡悳绱㈤棶棰�</li>
-                <li>淇鍐呴摼iframe娌℃湁浼犻�掑弬鏁伴棶棰�</li>
-                <li>淇鑷畾涔夊瓧鍏告牱寮忎笉鐢熸晥鐨勯棶棰�</li>
-                <li>淇瀛楀吀缂撳瓨鍒犻櫎鏂规硶鍙傛暟閿欒闂</li>
-                <li>淇Excel瀵煎叆鏁版嵁涓存椂鏂囦欢鏃犳硶鍒犻櫎闂</li>
-                <li>淇鏈櫥褰曞甫鍙傛暟璁块棶鎴愬姛鍚庡弬鏁颁涪澶遍棶棰�</li>
-                <li>淇HeaderSearch缁勪欢璺宠浆query鍙傛暟涓㈠け闂</li>
-                <li>淇浠g爜鐢熸垚瀵煎叆鍚庡繀濉」涓庢暟鎹簱涓嶅尮閰嶉棶棰�</li>
-                <li>淇Excels瀵煎叆鏃舵棤娉曡幏鍙栧埌dictType瀛楀吀鍊奸棶棰�</li>
-                <li>浼樺寲涓嬭浇zip鏂规硶鏂板閬僵灞�</li>
-                <li>浼樺寲澶村儚涓婁紶鍙傛暟鏂板鏂囦欢鍚嶇О</li>
-                <li>浼樺寲瀛楀吀鏍囩鏀寔鑷畾涔夊垎闅旂</li>
-                <li>浼樺寲鑿滃崟绠$悊绫诲瀷涓烘寜閽姸鎬佸彲閫�</li>
-                <li>浼樺寲鍓嶇闃查噸澶嶆彁浜ゆ暟鎹ぇ灏忛檺鍒�</li>
-                <li>浼樺寲TopNav鑿滃崟娌℃湁鍥炬爣svg涓嶆樉绀�</li>
-                <li>浼樺寲鏁板瓧閲戦澶у啓杞崲绮惧害涓㈠け闂</li>
-                <li>浼樺寲瀵屾枃鏈珽ditor缁勪欢妫�楠屽浘鐗囨牸寮�</li>
-                <li>浼樺寲椤电鍦‵irefox娴忚鍣ㄨ閬尅鐨勯棶棰�</li>
-                <li>浼樺寲涓汉涓績/鍩烘湰璧勬枡淇敼鏃舵暟鎹樉绀洪棶棰�</li>
-                <li>浼樺寲缂撳瓨鐩戞帶鍥捐〃鏀寔璺熼殢灞忓箷澶у皬鑷�傚簲璋冩暣</li>
-                <li>鍏朵粬缁嗚妭浼樺寲</li>
-              </ol>
-            </el-collapse-item>
-            <el-collapse-item title="v3.8.6 - 2023-06-30">
-              <ol>
-                <li>鏀寔鐧诲綍IP榛戝悕鍗曢檺鍒�</li>
-                <li>鏂板鐩戞帶椤甸潰鍥炬爣鏄剧ず</li>
-                <li>鎿嶄綔鏃ュ織鏂板娑堣�楁椂闂村睘鎬�</li>
-                <li>灞忚斀瀹氭椂浠诲姟bean杩濊鐨勫瓧绗�</li>
-                <li>鏃ュ織绠$悊浣跨敤绱㈠紩鎻愬崌鏌ヨ鎬ц兘</li>
-                <li>鏃ュ織娉ㄨВ鏀寔鎺掗櫎鎸囧畾鐨勮姹傚弬鏁�</li>
-                <li>鏀寔鑷畾涔夐殣钘忓睘鎬у垪杩囨护瀛愬璞�</li>
-                <li>鍗囩骇oshi鍒版渶鏂扮増鏈�6.4.3</li>
-                <li>鍗囩骇druid鍒版渶鏂扮増鏈�1.2.16</li>
-                <li>鍗囩骇fastjson鍒版渶鏂扮増2.0.34</li>
-                <li>鍗囩骇spring-boot鍒版渶鏂扮増鏈�2.5.15</li>
-                <li>鍗囩骇element-ui鍒版渶鏂扮増鏈�2.15.13</li>
-                <li>绉婚櫎apache/commons-fileupload渚濊禆</li>
-                <li>淇椤甸潰鍒囨崲鏃跺竷灞�閿欎贡鐨勯棶棰�</li>
-                <li>淇鍖垮悕娉ㄨВAnonymous绌烘寚閽堥棶棰�</li>
-                <li>淇璺敱璺宠浆琚樆姝㈡椂鍐呴儴浜х敓鎶ラ敊淇℃伅闂</li>
-                <li>淇isMatchedIp鐨勫弬鏁板垽鏂骇鐢熺┖鎸囬拡鐨勯棶棰�</li>
-                <li>淇鐢ㄦ埛澶氳鑹叉暟鎹潈闄愬彲鑳藉嚭鐜版潈闄愭姮鍗囩殑鎯呭喌</li>
-                <li>淇寮�鍚疶opNav鍚庝竴绾ц彍鍗曡矾鐢卞弬鏁拌缃棤鏁堥棶棰�</li>
-                <li>淇DictTag缁勪欢value娌℃湁鍖归厤鐨勫�兼椂鍒欏睍绀簐alue</li>
-                <li>浼樺寲鏂囦欢涓嬭浇鍑虹幇鐨勫紓甯�</li>
-                <li>浼樺寲閫夋嫨鍥炬爣缁勪欢楂樹寒鍥炴樉</li>
-                <li>浼樺寲寮圭獥鍚庡鑸爮鍋忕Щ鐨勯棶棰�</li>
-                <li>浼樺寲淇敼瀵嗙爜鏃ュ織瀛樺偍鏄庢枃闂</li>
-                <li>浼樺寲椤电鏍忓叧闂叾浠栧嚭鐜扮殑寮傚父闂</li>
-                <li>浼樺寲椤电鍏抽棴宸︿晶閫夐」鎺掗櫎棣栭〉閫夐」</li>
-                <li>浼樺寲鍏抽棴褰撳墠tab椤佃烦杞渶鍙充晶tab椤�</li>
-                <li>浼樺寲缂撳瓨鍒楄〃娓呴櫎鎿嶄綔鎻愮ず涓嶅彉鐨勯棶棰�</li>
-                <li>浼樺寲瀛楃鏈娇鐢ㄤ笅鍒掔嚎涓嶈繘琛岄┘宄板紡澶勭悊</li>
-                <li>浼樺寲鐢ㄦ埛瀵煎叆鏇存柊鏃堕渶鑾峰彇鐢ㄦ埛缂栧彿闂</li>
-                <li>浼樺寲渚ц竟鏍忕殑骞冲彴鏍囬涓嶸UE_APP_TITLE淇濇寔鍚屾</li>
-                <li>浼樺寲瀵煎嚭Excel鏃惰缃甦ictType灞炴�ч噸澶嶆煡缂撳瓨闂</li>
-                <li>杩炴帴姹燚ruid鏀寔鏂扮殑閰嶇疆connectTimeout鍜宻ocketTimeout</li>
-                <li>鍏朵粬缁嗚妭浼樺寲</li>
-              </ol>
-            </el-collapse-item>
-            <el-collapse-item title="v3.8.5 - 2023-01-01">
-              <ol>
-                <li>瀹氭椂浠诲姟杩濊鐨勫瓧绗�</li>
-                <li>閲嶇疆鏃跺彇娑堥儴闂ㄩ�変腑</li>
-                <li>鏂板杩斿洖璀﹀憡娑堟伅鎻愮ず</li>
-                <li>蹇界暐涓嶅繀瑕佺殑灞炴�ф暟鎹繑鍥�</li>
-                <li>淇敼鍙傛暟閿悕鏃剁Щ闄ゅ墠缂撳瓨閰嶇疆</li>
-                <li>瀵煎叆鏇存柊鐢ㄦ埛鏁版嵁鍓嶆牎楠屾暟鎹潈闄�</li>
-                <li>鍏煎Excel涓嬫媺妗嗗唴瀹硅繃澶氭棤娉曟樉绀虹殑闂</li>
-                <li>鍗囩骇echarts鍒版渶鏂扮増鏈�5.4.0</li>
-                <li>鍗囩骇core-js鍒版渶鏂扮増鏈�3.25.3</li>
-                <li>鍗囩骇oshi鍒版渶鏂扮増鏈�6.4.0</li>
-                <li>鍗囩骇kaptcha鍒版渶鏂扮増2.3.3</li>
-                <li>鍗囩骇druid鍒版渶鏂扮増鏈�1.2.15</li>
-                <li>鍗囩骇fastjson鍒版渶鏂扮増2.0.20</li>
-                <li>鍗囩骇pagehelper鍒版渶鏂扮増1.4.6</li>
-                <li>浼樺寲寮圭獥鍐呭杩囧灞曠ず涓嶅叏闂</li>
-                <li>浼樺寲swagger-ui闈欐�佽祫婧愪娇鐢ㄧ紦瀛�</li>
-                <li>寮�鍚疶opNav娌℃湁瀛愯彍鍗曢殣钘忎晶杈规爮</li>
-                <li>鍒犻櫎fuse鏃犳晥閫夐」maxPatternLength</li>
-                <li>浼樺寲瀵煎嚭瀵硅薄鐨勫瓙鍒楄〃涓虹┖浼氬嚭鐜癧]闂</li>
-                <li>浼樺寲缂栬緫澶村儚鏃堕�忔槑閮ㄥ垎浼氬彉鎴愰粦鑹查棶棰�</li>
-                <li>浼樺寲灏忓睆骞曚笂淇敼澶村儚鐣岄潰甯冨眬閿欎綅鐨勯棶棰�</li>
-                <li>淇浠g爜鐢熸垚鍕鹃�夊睘鎬ф棤鏁堥棶棰�</li>
-                <li>淇鏂囦欢涓婁紶缁勪欢鏍煎紡楠岃瘉闂</li>
-                <li>淇鍥炴樉鏁版嵁瀛楀吀鏁扮粍寮傚父闂</li>
-                <li>淇sheet瓒呭嚭鏈�澶ц鏁板紓甯搁棶棰�</li>
-                <li>淇Log娉ㄨВGET璇锋眰璁板綍涓嶅埌鍙傛暟闂</li>
-                <li>淇璋冨害鏃ュ織鐐瑰嚮澶氭鏁版嵁涓嶅彉鍖栫殑闂</li>
-                <li>淇涓婚棰滆壊鍦―rawer缁勪欢涓嶄細鍔犺浇闂</li>
-                <li>淇鏂囦欢鍚嶅寘鍚壒娈婂瓧绗︾殑鏂囦欢鏃犳硶涓嬭浇闂</li>
-                <li>淇table涓洿澶氭寜閽垏鎹富棰樿壊鏈敓鏁堜慨澶嶉棶棰�</li>
-                <li>淇鏌愪簺鐗规�х殑鐜鐢熸垚浠g爜鍙樹贡鐮乀XT鏂囦欢闂</li>
-                <li>淇浠g爜鐢熸垚鍥剧墖/鏂囦欢/鍗曢�夋椂閫夋嫨蹇呭~鏃犳硶鏍¢獙闂</li>
-                <li>淇鏌愪簺鐗规�х殑鎯呭喌鐢ㄦ埛缂栬緫瀵硅瘽妗嗕腑瑙掕壊鍜岄儴闂ㄦ棤娉曚慨鏀归棶棰�</li>
-                <li>鍏朵粬缁嗚妭浼樺寲</li>
-              </ol>
-            </el-collapse-item>
-            <el-collapse-item title="v3.8.4 - 2022-09-26">
-              <ol>
-                <li>鏁版嵁閫昏緫鍒犻櫎涓嶈繘琛屽敮涓�楠岃瘉</li>
-                <li>Excel娉ㄨВ鏀寔瀵煎嚭瀵硅薄鐨勫瓙鍒楄〃鏂规硶</li>
-                <li>Excel娉ㄨВ鏀寔鑷畾涔夐殣钘忓睘鎬у垪</li>
-                <li>Excel娉ㄨВ鏀寔backgroundColor灞炴�ц缃儗鏅壊</li>
-                <li>鏀寔閰嶇疆瀵嗙爜鏈�澶ч敊璇鏁�/閿佸畾鏃堕棿</li>
-                <li>鐧诲綍鏃ュ織鏂板瑙i攣璐︽埛鍔熻兘</li>
-                <li>閫氱敤涓嬭浇鏂规硶鏂板config閰嶇疆閫夐」</li>
-                <li>鏀寔澶氭潈闄愬瓧绗﹀尮閰嶈鑹叉暟鎹潈闄�</li>
-                <li>椤甸潰鍐呭祵iframe鍒囨崲tab涓嶅埛鏂版暟鎹�</li>
-                <li>鎿嶄綔鏃ュ織璁板綍鏀寔鎺掗櫎鏁忔劅灞炴�у瓧娈�</li>
-                <li>淇澶氭枃浠朵笂浼犳姤閿欏嚭鐜扮殑寮傚父闂</li>
-                <li>淇鍥剧墖棰勮缁勪欢src灞炴�т负null鍊兼帶鍒跺彴鎶ラ敊闂</li>
-                <li>鍗囩骇oshi鍒版渶鏂扮増鏈�6.2.2</li>
-                <li>鍗囩骇fastjson鍒版渶鏂扮増2.0.14</li>
-                <li>鍗囩骇pagehelper鍒版渶鏂扮増1.4.3</li>
-                <li>鍗囩骇core-js鍒版渶鏂扮増鏈�3.25.2</li>
-                <li>鍗囩骇element-ui鍒版渶鏂扮増鏈�2.15.10</li>
-                <li>浼樺寲浠诲姟杩囨湡涓嶆墽琛岃皟搴�</li>
-                <li>浼樺寲瀛楀吀鏁版嵁浣跨敤store瀛樺彇</li>
-                <li>浼樺寲淇敼璧勬枡澶村儚琚鐩栫殑闂</li>
-                <li>浼樺寲淇敼鐢ㄦ埛鐧诲綍璐﹀彿閲嶅楠岃瘉</li>
-                <li>浼樺寲浠g爜鐢熸垚鍚屾鍚庡�糔ULL闂</li>
-                <li>浼樺寲瀹氭椂浠诲姟鏀寔鎵ц鐖剁被鏂规硶</li>
-                <li>浼樺寲鐢ㄦ埛涓汉淇℃伅鎺ュ彛闃叉淇敼閮ㄩ棬</li>
-                <li>浼樺寲甯冨眬璁剧疆浣跨敤el-drawer鎶藉眽鏄剧ず</li>
-                <li>浼樺寲娌℃湁鏉冮檺鐨勭敤鎴风紪杈戦儴闂ㄧ己灏戞暟鎹�</li>
-                <li>浼樺寲鏃ュ織娉ㄨВ璁板綍闄愬埗璇锋眰鍦板潃鐨勯暱搴�</li>
-                <li>浼樺寲excel/scale灞炴�у鍑哄崟鍏冩牸鏁板�肩被鍨�</li>
-                <li>浼樺寲鏃ュ織鎿嶄綔涓噸缃寜閽椂閲嶅鏌ヨ鐨勯棶棰�</li>
-                <li>浼樺寲澶氫釜鐩稿悓瑙掕壊鏁版嵁瀵艰嚧鏉冮檺SQL閲嶅闂</li>
-                <li>浼樺寲琛ㄦ牸涓婂彸渚у伐鍏锋潯锛堟悳绱㈡寜閽樉闅�&鍙充晶鏍峰紡鍑稿嚭锛�</li>
-                <li>鍏朵粬缁嗚妭浼樺寲</li>
-              </ol>
-            </el-collapse-item>
-            <el-collapse-item title="v3.8.3 - 2022-06-27">
-              <ol>
-                <li>鏂板缂撳瓨鍒楄〃鑿滃崟鍔熻兘</li>
-                <li>浠g爜鐢熸垚鏍戣〃鏂板(灞曞紑/鎶樺彔)</li>
-                <li>Excel娉ㄨВ鏀寔color瀛椾綋棰滆壊</li>
-                <li>鏂板Anonymous鍖垮悕璁块棶涓嶉壌鏉冩敞瑙�</li>
-                <li>鐢ㄦ埛澶村儚涓婁紶闄愬埗鍙兘涓哄浘鐗囨牸寮�</li>
-                <li>鎺ュ彛浣跨敤娉涘瀷浣垮叾鐪嬪埌鍝嶅簲灞炴�у瓧娈�</li>
-                <li>妫�鏌ュ畾鏃朵换鍔ean鎵�鍦ㄥ寘鍚嶆槸鍚︿负鐧藉悕鍗曢厤缃�</li>
-                <li>娣诲姞椤电openPage鏀寔浼犻�掑弬鏁�</li>
-                <li>鐢ㄦ埛缂撳瓨淇℃伅娣诲姞閮ㄩ棬ancestors绁栫骇鍒楄〃</li>
-                <li>鍗囩骇element-ui鍒版渶鏂扮増鏈�2.15.8</li>
-                <li>鍗囩骇oshi鍒版渶鏂扮増鏈�6.1.6</li>
-                <li>鍗囩骇druid鍒版渶鏂扮増鏈�1.2.11</li>
-                <li>鍗囩骇fastjson鍒版渶鏂扮増2.0.8</li>
-                <li>鍗囩骇spring-boot鍒版渶鏂扮増鏈�2.5.14</li>
-                <li>闄嶇骇jsencrypt鐗堟湰鍏煎IE娴忚鍣�</li>
-                <li>鍒犻櫎澶氫綑鐨剆alt瀛楁</li>
-                <li>鏂板鑾峰彇涓嶅甫鍚庣紑鏂囦欢鍚嶇О鏂规硶</li>
-                <li>鏂板鑾峰彇閰嶇疆鏂囦欢涓殑灞炴�у�兼柟娉�</li>
-                <li>鏂板鍐呭缂栫爜/瑙g爜鏂逛究鎻掍欢闆嗘垚浣跨敤</li>
-                <li>瀛楀吀绫诲瀷蹇呴』浠ュ瓧姣嶅紑澶达紝涓斿彧鑳戒负锛堝皬鍐欏瓧姣嶏紝鏁板瓧锛屼笅婊戠嚎锛�</li>
-                <li>浼樺寲璁剧疆鍒嗛〉鍙傛暟榛樿鍊�</li>
-                <li>浼樺寲瀵圭┖瀛楃涓插弬鏁板鐞嗙殑杩囨护</li>
-                <li>浼樺寲鏄剧ず椤哄簭orderNum绫诲瀷涓烘暣鍨�</li>
-                <li>浼樺寲琛ㄥ崟鏋勫缓鎸夐挳涓嶆樉绀烘鍒欐牎楠�</li>
-                <li>浼樺寲瀛楀吀鏁版嵁鍥炴樉鏍峰紡涓嬫媺妗嗘樉绀哄��</li>
-                <li>浼樺寲R鍝嶅簲鎴愬姛鐘舵�佺爜涓庡叏灞�淇濇寔涓�鑷�</li>
-                <li>浼樺寲druid寮�鍚痺all杩囨护鍣ㄥ嚭鐜扮殑寮傚父闂</li>
-                <li>浼樺寲鐢ㄦ埛绠$悊宸︿晶鏍戝瀷缁勪欢澧炲姞閫変腑楂樹寒淇濇寔</li>
-                <li>浼樺寲鏂板鐢ㄦ埛涓庤鑹蹭俊鎭�&鐢ㄦ埛涓庡矖浣嶄俊鎭�昏緫</li>
-                <li>浼樺寲榛樿涓嶅惎鐢ㄥ帇缂╂枃浠剁紦瀛橀槻姝ode_modules杩囧ぇ</li>
-                <li>淇瀛楀吀鏁版嵁鏄剧ず涓嶅叏闂</li>
-                <li>淇鎿嶄綔鏃ュ織鏌ヨ绫诲瀷鏉′欢涓�0鏃朵細鏌ュ埌鎵�鏈夋暟鎹�</li>
-                <li>淇Excel娉ㄨВprompt/combo鍚屾椂浣跨敤涓嶇敓鏁堥棶棰�</li>
-                <li>鍏朵粬缁嗚妭浼樺寲</li>
-              </ol>
-            </el-collapse-item>
-            <el-collapse-item title="v3.8.2 - 2022-04-01">
-              <ol>
-                <li>鍓嶇鏀寔璁剧疆鏄惁闇�瑕侀槻姝㈡暟鎹噸澶嶆彁浜�</li>
-                <li>寮�鍚疶opNav娌℃湁瀛愯彍鍗曟儏鍐甸殣钘忎晶杈规爮</li>
-                <li>渚ц竟鏍忚彍鍗曞悕绉拌繃闀挎偓鍋滄樉绀烘爣棰�</li>
-                <li>鐢ㄦ埛璁块棶鎺у埗鏃舵牎楠屾暟鎹潈闄愶紝闃叉瓒婃潈</li>
-                <li>瀵煎嚭Excel鏃跺睆钄藉叕寮忥紝闃叉CSV娉ㄥ叆椋庨櫓</li>
-                <li>缁勪欢ImagePreview鏀寔澶氬浘棰勮鏄剧ず</li>
-                <li>缁勪欢ImageUpload鏀寔澶氬浘鍚屾椂閫夋嫨涓婁紶</li>
-                <li>缁勪欢FileUpload鏀寔澶氭枃浠跺悓鏃堕�夋嫨涓婁紶</li>
-                <li>鏈嶅姟鐩戞帶鏂板杩愯鍙傛暟淇℃伅鏄剧ず</li>
-                <li>瀹氭椂浠诲姟鐩爣瀛楃涓茶繃婊ょ壒娈婂瓧绗�</li>
-                <li>瀹氭椂浠诲姟鐩爣瀛楃涓查獙璇佸寘鍚嶇櫧鍚嶅崟</li>
-                <li>浠g爜鐢熸垚鍒楄〃鍥剧墖鏀寔棰勮</li>
-                <li>浠g爜鐢熸垚缂栬緫淇敼鎵撳紑鏂伴〉绛�</li>
-                <li>浠g爜鐢熸垚鏂板Java绫诲瀷Boolean</li>
-                <li>浠g爜鐢熸垚瀛愯〃鏀寔鏃ユ湡/瀛楀吀閰嶇疆</li>
-                <li>浠g爜鐢熸垚鍚屾淇濈暀蹇呭~/绫诲瀷閫夐」</li>
-                <li>鍗囩骇oshi鍒版渶鏂扮増鏈�6.1.2</li>
-                <li>鍗囩骇fastjson鍒版渶鏂扮増1.2.80</li>
-                <li>鍗囩骇pagehelper鍒版渶鏂扮増1.4.1</li>
-                <li>鍗囩骇spring-boot鍒版渶鏂扮増鏈�2.5.11</li>
-                <li>鍗囩骇spring-boot-mybatis鍒版渶鏂扮増2.2.2</li>
-                <li>娣诲姞閬楁紡鐨勫垎椤靛弬鏁板悎鐞嗗寲灞炴��</li>
-                <li>淇敼npm鍗冲皢杩囨湡鐨勬敞鍐屾簮鍦板潃</li>
-                <li>淇鍒嗛〉缁勪欢璇锋眰涓ゆ闂</li>
-                <li>淇閫氱敤鏂囦欢涓嬭浇鎺ュ彛璺ㄥ煙闂</li>
-                <li>淇Xss娉ㄨВ瀛楁鍊间负绌烘椂鐨勫紓甯搁棶棰�</li>
-                <li>淇閫夐」鍗$偣鍑诲彸閿埛鏂颁涪澶卞弬鏁伴棶棰�</li>
-                <li>淇琛ㄥ崟娓呴櫎鍏冪礌浣嶇疆鏈瀭鐩村眳涓棶棰�</li>
-                <li>淇鏈嶅姟鐩戞帶涓繍琛屽弬鏁版樉绀烘潯浠堕敊璇�</li>
-                <li>淇瀵煎叆Excel鏃跺瓧鍏稿瓧娈电被鍨嬩负Long杞箟涓虹┖闂</li>
-                <li>淇鐧诲綍瓒呮椂鍒锋柊椤甸潰璺宠浆鐧诲綍椤甸潰杩樻彁绀洪噸鏂扮櫥褰曢棶棰�</li>
-                <li>浼樺寲鍔犺浇瀛楀吀缂撳瓨鏁版嵁</li>
-                <li>浼樺寲IP鍦板潃鑾峰彇鍒板涓殑闂</li>
-                <li>浼樺寲浠诲姟闃熷垪婊℃椂浠诲姟鎷掔粷绛栫暐</li>
-                <li>浼樺寲鏂囦欢涓婁紶鍏煎Weblogic鐜</li>
-                <li>浼樺寲瀹氭椂浠诲姟榛樿淇濆瓨鍒板唴瀛樹腑鎵ц</li>
-                <li>浼樺寲閮ㄩ棬淇敼缂╂斁鍚庡嚭鐜扮殑閿欎綅闂</li>
-                <li>浼樺寲Excel鏍煎紡鍖栦笉鍚岀被鍨嬬殑鏃ユ湡瀵硅薄</li>
-                <li>浼樺寲鑿滃崟琛ㄥ叧閿瓧瀵艰嚧鐨勬彃浠舵姤閿欓棶棰�</li>
-                <li>浼樺寲Oracle鐢ㄦ埛澶村儚鍒椾负绌烘椂涓嶆樉绀洪棶棰�</li>
-                <li>浼樺寲椤甸潰鑻ユ湭鍖归厤鍒板瓧鍏告爣绛惧垯杩斿洖鍘熷瓧鍏稿��</li>
-                <li>浼樺寲淇鐧诲綍澶辨晥鍚庡娆¤姹傛彁绀哄娆″脊绐楅棶棰�</li>
-                <li>鍏朵粬缁嗚妭浼樺寲</li>
-              </ol>
-            </el-collapse-item>
-            <el-collapse-item title="v3.8.1 - 2022-01-01">
-              <ol>
-                <li>鏂板Vue3鍓嶇浠g爜鐢熸垚妯℃澘</li>
-                <li>鏂板鍥剧墖棰勮缁勪欢</li>
-                <li>鏂板鍘嬬缉鎻掍欢瀹炵幇鎵撳寘Gzip</li>
-                <li>鑷畾涔墄ss鏍¢獙娉ㄨВ瀹炵幇</li>
-                <li>鑷畾涔夋枃瀛楀鍒跺壀璐存寚浠�</li>
-                <li>浠g爜鐢熸垚棰勮鏀寔澶嶅埗鍐呭</li>
-                <li>璺敱鏀寔鍗曠嫭閰嶇疆鑿滃崟鎴栬鑹叉潈闄�</li>
-                <li>鐢ㄦ埛绠$悊閮ㄩ棬鏌ヨ閫夋嫨鑺傜偣鍚庡垎椤靛弬鏁板垵濮�</li>
-                <li>淇鐢ㄦ埛鍒嗛厤瑙掕壊灞炴�ч敊璇�</li>
-                <li>淇鎵撳寘鍚庡瓧浣撳浘鏍囧伓鐜扮殑涔辩爜闂</li>
-                <li>淇鑿滃崟绠$悊閲嶇疆琛ㄥ崟鍑虹幇鐨勯敊璇�</li>
-                <li>淇鐗堟湰宸紓瀵艰嚧鐨勬噿鍔犺浇鎶ラ敊闂</li>
-                <li>淇Cron缁勪欢涓懆鍥炴樉闂</li>
-                <li>淇瀹氭椂浠诲姟澶氬弬鏁伴�楀彿鍒嗛殧鐨勯棶棰�</li>
-                <li>淇鏍规嵁ID鏌ヨ鍒楄〃鍙兘鍑虹幇鐨勪富閿孩鍑洪棶棰�</li>
-                <li>淇tomcat閰嶇疆鍙傛暟宸茶繃鏈熼棶棰�</li>
-                <li>鍗囩骇clipboard鍒版渶鏂扮増鏈�2.0.8</li>
-                <li>鍗囩骇oshi鍒版渶鏂扮増鏈瑅5.8.6</li>
-                <li>鍗囩骇fastjson鍒版渶鏂扮増1.2.79</li>
-                <li>鍗囩骇spring-boot鍒版渶鏂扮増鏈�2.5.8</li>
-                <li>鍗囩骇log4j2鍒�2.17.1锛岄槻姝㈡紡娲為闄�</li>
-                <li>浼樺寲涓嬭浇瑙f瀽blob寮傚父鎻愮ず</li>
-                <li>浼樺寲浠g爜鐢熸垚瀛楀吀缁勯噸澶嶉棶棰�</li>
-                <li>浼樺寲鏌ヨ鐢ㄦ埛鐨勮鑹茬粍&宀椾綅缁勪唬鐮�</li>
-                <li>浼樺寲瀹氭椂浠诲姟cron琛ㄨ揪寮忓皬鏃惰缃�24</li>
-                <li>浼樺寲鐢ㄦ埛瀵煎叆鎻愮ず婧㈠嚭鍒欐樉绀烘粴鍔ㄦ潯</li>
-                <li>浼樺寲闃查噸澶嶆彁浜ゆ爣璇嗙粍鍚堜负(key+url+header)</li>
-                <li>浼樺寲鍒嗛〉鏂规硶璁剧疆鎴愰�氱敤鏂逛究鐏垫椿璋冪敤</li>
-                <li>鍏朵粬缁嗚妭浼樺寲</li>
-              </ol>
-            </el-collapse-item>
-            <el-collapse-item title="v3.8.0 - 2021-12-01">
-              <ol>
-                <li>鏂板閰嶅骞跺悓姝ョ殑Vue3鍓嶇鐗堟湰</li>
-                <li>鏂板閫氱敤鏂规硶绠�鍖栨ā鎬�/缂撳瓨/涓嬭浇/鏉冮檺/椤电浣跨敤</li>
-                <li>浼樺寲瀵煎嚭鏁版嵁/浣跨敤閫氱敤涓嬭浇鏂规硶</li>
-                <li>Excel娉ㄨВ鏀寔鑷畾涔夋暟鎹鐞嗗櫒</li>
-                <li>Excel娉ㄨВ鏀寔瀵煎叆瀵煎嚭鏍囬淇℃伅</li>
-                <li>Excel瀵煎叆鏀寔@Excels娉ㄨВ</li>
-                <li>鏂板缁勪欢data-dict锛岀畝鍖栨暟鎹瓧鍏镐娇鐢�</li>
-                <li>鏂板Jaxb渚濊禆锛岄槻姝dk8浠ヤ笂鍑虹幇鐨勫吋瀹归敊璇�</li>
-                <li>鐢熶骇鐜浣跨敤璺敱鎳掑姞杞芥彁鍗囬〉闈㈠搷搴旈�熷害</li>
-                <li>淇浜旂骇浠ヤ笂鑿滃崟鍑虹幇鐨�404闂</li>
-                <li>闃查噸鎻愪氦娉ㄨВ鏀寔閰嶇疆闂撮殧鏃堕棿/鎻愮ず娑堟伅</li>
-                <li>鏃ュ織娉ㄨВ鏂板鏄惁淇濆瓨鍝嶅簲鍙傛暟</li>
-                <li>浠诲姟灞忚斀杩濊瀛楃&鍙傛暟蹇界暐鍙屽紩鍙蜂腑鐨勯�楀彿</li>
-                <li>鍗囩骇SpringBoot鍒版渶鏂扮増鏈�2.5.6</li>
-                <li>鍗囩骇pagehelper鍒版渶鏂扮増1.4.0</li>
-                <li>鍗囩骇spring-boot-mybatis鍒版渶鏂扮増2.2.0</li>
-                <li>鍗囩骇oshi鍒版渶鏂扮増鏈瑅5.8.2</li>
-                <li>鍗囩骇druid鍒版渶鏂扮増1.2.8</li>
-                <li>鍗囩骇velocity鍒版渶鏂扮増鏈�2.3</li>
-                <li>鍗囩骇fastjson鍒版渶鏂扮増1.2.78</li>
-                <li>鍗囩骇axios鍒版渶鏂扮増鏈�0.24.0</li>
-                <li>鍗囩骇dart-sass鍒扮増鏈�1.32.13</li>
-                <li>鍗囩骇core-js鍒版渶鏂扮増鏈�3.19.1</li>
-                <li>鍗囩骇jsencrypt鍒版渶鏂扮増鏈�3.2.1</li>
-                <li>鍗囩骇js-cookie鍒版渶鏂扮増鏈�3.0.1</li>
-                <li>鍗囩骇file-saver鍒版渶鏂扮増鏈�2.0.5</li>
-                <li>鍗囩骇sass-loader鍒版渶鏂扮増鏈�10.1.1</li>
-                <li>鍗囩骇element-ui鍒版渶鏂扮増鏈�2.15.6</li>
-                <li>鏂板sendGet鏃犲弬璇锋眰鏂规硶</li>
-                <li>绂佺敤el-tag缁勪欢鐨勬笎鍙樺姩鐢�</li>
-                <li>浠g爜鐢熸垚鐐瑰嚮棰勮閲嶇疆婵�娲籺ab</li>
-                <li>AjaxResult閲嶅啓put鏂规硶锛屼互鏂逛究閾惧紡璋冪敤</li>
-                <li>浼樺寲鐧诲綍/楠岃瘉鐮佽姹俬eaders涓嶈缃畉oken</li>
-                <li>浼樺寲鐢ㄦ埛涓汉淇℃伅鎺ュ彛闃叉淇敼鐢ㄦ埛鍚�</li>
-                <li>浼樺寲Cron琛ㄨ揪寮忕敓鎴愬櫒鍏抽棴鏃堕攢姣侀伩鍏嶇紦瀛�</li>
-                <li>浼樺寲娉ㄥ唽鎴愬姛鎻愮ず娑堟伅绫诲瀷success</li>
-                <li>浼樺寲aop璇硶锛屼娇鐢╯pring鑷姩娉ㄥ叆娉ㄨВ</li>
-                <li>浼樺寲璁板綍鐧诲綍淇℃伅锛岀Щ闄や笉蹇呰鐨勪慨鏀�</li>
-                <li>浼樺寲mybatis鍏ㄥ眬榛樿鐨勬墽琛屽櫒</li>
-                <li>浼樺寲Excel瀵煎叆鍥剧墖鍙兘鍑虹幇鐨勫紓甯�</li>
-                <li>淇浠g爜鐢熸垚妯℃澘涓诲瓙琛ㄥ垹闄ょ己灏戜簨鍔�</li>
-                <li>淇鏃ュ織璁板綍鍙兘鍑虹幇鐨勮浆鎹㈠紓甯�</li>
-                <li>淇浠g爜鐢熸垚澶嶉�夋瀛楀吀閬楁紡闂</li>
-                <li>淇鍏抽棴xss鍔熻兘瀵艰嚧鍙噸澶嶈RepeatableFilter澶辨晥</li>
-                <li>淇瀛楃涓叉棤娉曡鍙嶈浆涔夐棶棰�</li>
-                <li>淇鍚庣涓诲瓙琛ㄤ唬鐮佹ā鏉挎柟娉曞悕鐢熸垚閿欒闂</li>
-                <li>淇xss杩囨护鍚庢牸寮忓嚭鐜扮殑寮傚父</li>
-                <li>淇swagger娌℃湁鎸囧畾dataTypeClass瀵艰嚧鍚姩鍑虹幇warn鏃ュ織</li>
-                <li>鍏朵粬缁嗚妭浼樺寲</li>
-              </ol>
-            </el-collapse-item>
-            <el-collapse-item title="v3.7.0 - 2021-09-13">
-              <ol>
-                <li>鍙傛暟绠$悊鏀寔閰嶇疆楠岃瘉鐮佸紑鍏�</li>
-                <li>鏂板鏄惁寮�鍚敤鎴锋敞鍐屽姛鑳�</li>
-                <li>瀹氭椂浠诲姟鏀寔鍦ㄧ嚎鐢熸垚cron琛ㄨ揪寮�</li>
-                <li>鑿滃崟绠$悊鏀寔閰嶇疆璺敱鍙傛暟</li>
-                <li>鏀寔鑷畾涔夋敞瑙e疄鐜版帴鍙i檺娴�</li>
-                <li>Excel娉ㄨВ鏀寔Image鍥剧墖瀵煎叆</li>
-                <li>鑷畾涔夊脊灞傛孩鍑烘粴鍔ㄦ牱寮�</li>
-                <li>鑷畾涔夊彲鎷栧姩寮圭獥瀹藉害鎸囦护</li>
-                <li>鑷畾涔夊彲鎷栧姩寮圭獥楂樺害鎸囦护</li>
-                <li>淇浠绘剰璐︽埛瓒婃潈闂</li>
-                <li>淇敼鏃舵鏌ョ敤鎴锋暟鎹潈闄愯寖鍥�</li>
-                <li>淇淇濆瓨閰嶇疆涓婚棰滆壊澶辨晥闂</li>
-                <li>鏂板鏆楄壊鑿滃崟椋庢牸涓婚</li>
-                <li>鑿滃崟&閮ㄩ棬鏂板灞曞紑/鎶樺彔鍔熻兘</li>
-                <li>椤电鏂板鍏抽棴宸︿晶&娣诲姞鍥炬爣</li>
-                <li>椤堕儴鑿滃崟鎺掗櫎闅愯棌鐨勯粯璁よ矾鐢�</li>
-                <li>椤堕儴鑿滃崟鍚屾绯荤粺涓婚鏍峰紡</li>
-                <li>璺宠浆璺敱楂樹寒鐩稿搴旂殑鑿滃崟鏍�</li>
-                <li>浠g爜鐢熸垚涓诲瓙琛ㄥ閫夎鏁版嵁</li>
-                <li>鏃ユ湡鑼冨洿鏀寔娣诲姞澶氱粍</li>
-                <li>鍗囩骇element-ui鍒版渶鏂扮増鏈�2.15.5</li>
-                <li>鍗囩骇oshi鍒版渶鏂扮増鏈瑅5.8.0</li>
-                <li>鍗囩骇commons.io鍒版渶鏂扮増鏈瑅2.11.0</li>
-                <li>瀹氭椂浠诲姟灞忚斀ldap杩滅▼璋冪敤</li>
-                <li>瀹氭椂浠诲姟灞忚斀http(s)杩滅▼璋冪敤</li>
-                <li>琛ュ厖瀹氭椂浠诲姟琛ㄥ瓧娈垫敞閲�</li>
-                <li>瀹氭椂浠诲姟瀵规鏌ュ紓甯歌繘琛屼簨鍔″洖婊�</li>
-                <li>鍚敤鐖堕儴闂ㄧ姸鎬佹帓闄ら《绾ц妭鐐�</li>
-                <li>瀵屾枃鏈柊澧炰笂浼犳枃浠跺ぇ灏忛檺鍒�</li>
-                <li>榛樿棣栭〉浣跨敤keep-alive缂撳瓨</li>
-                <li>淇敼浠g爜鐢熸垚瀛楀吀鍥炴樉鏍峰紡</li>
-                <li>鑷畾涔夊垎椤靛悎鐞嗗寲浼犲叆鍙傛暟</li>
-                <li>淇瀛楀吀缁勪欢鍊间负鏁村舰涓嶆樉绀洪棶棰�</li>
-                <li>淇瀹氭椂浠诲姟鏃ュ織鎵ц鐘舵�佹樉绀�</li>
-                <li>瑙掕壊&鑿滃崟鏂板瀛楁灞炴�ф彁绀轰俊鎭�</li>
-                <li>淇瑙掕壊鍒嗛厤鐢ㄦ埛椤甸潰鍙傛暟绫诲瀷閿欒鎻愰啋</li>
-                <li>浼樺寲甯冨眬璁剧疆鍔ㄧ敾鐗规晥</li>
-                <li>浼樺寲寮傚父澶勭悊淇℃伅</li>
-                <li>浼樺寲閿欒token瀵艰嚧鐨勮В鏋愬紓甯�</li>
-                <li>瀵嗙爜妗嗘柊澧炴樉绀哄垏鎹㈠瘑鐮佸浘鏍�</li>
-                <li>瀹氭椂浠诲姟鏂板鏇村鎿嶄綔</li>
-                <li>鏇村鎿嶄綔鎸夐挳娣诲姞鏉冮檺鎺у埗</li>
-                <li>瀵煎叆鐢ㄦ埛鏍峰紡浼樺寲</li>
-                <li>鎻愬彇閫氱敤鏂规硶鍒板熀绫绘帶鍒跺櫒</li>
-                <li>浼樺寲浣跨敤鏉冮檺宸ュ叿鑾峰彇鐢ㄦ埛淇℃伅</li>
-                <li>浼樺寲鐢ㄦ埛涓嶈兘鍒犻櫎鑷繁</li>
-                <li>浼樺寲XSS璺ㄧ珯鑴氭湰杩囨护</li>
-                <li>浼樺寲浠g爜鐢熸垚妯℃澘</li>
-                <li>楠岃瘉鐮侀粯璁�20s瓒呮椂</li>
-                <li>BLOB涓嬭浇鏃舵竻闄RL瀵硅薄寮曠敤</li>
-                <li>浠g爜鐢熸垚瀵煎叆琛ㄦ寜鍒涘缓鏃堕棿鎺掑簭</li>
-                <li>淇浠g爜鐢熸垚椤甸潰鏁版嵁缂栬緫淇濆瓨涔嬪悗鎬绘槸璺宠浆绗竴椤电殑闂</li>
-                <li>淇甯afari娴忚鍣ㄦ棤娉曟牸寮忓寲utc鏃ユ湡鏍煎紡yyyy-MM-dd'T'HH:mm:ss.SSS闂</li>
-                <li>澶氬浘涓婁紶缁勪欢绉婚櫎澶氫綑鐨刟pi鍦板潃&楠岃瘉澶辫触瀵艰嚧鍥剧墖鍒犻櫎闂&鏃犳硶鍒犻櫎鐩稿簲鍥剧墖淇</li>
-                <li>鍏朵粬缁嗚妭浼樺寲</li>
-              </ol>
-            </el-collapse-item>
-            <el-collapse-item title="v3.6.0 - 2021-07-12">
-              <ol>
-                <li>瑙掕壊绠$悊鏂板鍒嗛厤鐢ㄦ埛鍔熻兘</li>
-                <li>鐢ㄦ埛绠$悊鏂板鍒嗛厤瑙掕壊鍔熻兘</li>
-                <li>鏃ュ織鍒楄〃鏀寔鎺掑簭鎿嶄綔</li>
-                <li>浼樺寲鍙傛暟&瀛楀吀缂撳瓨鎿嶄綔</li>
-                <li>绯荤粺甯冨眬閰嶇疆鏀寔鍔ㄦ�佹爣棰樺紑鍏�</li>
-                <li>鑿滃崟璺敱閰嶇疆鏀寔鍐呴摼璁块棶</li>
-                <li>榛樿璁块棶鍚庣棣栭〉鏂板鎻愮ず璇�</li>
-                <li>瀵屾枃鏈粯璁や笂浼犺繑鍥瀠rl绫诲瀷</li>
-                <li>鏂板鑷畾涔夊脊绐楁嫋鎷芥寚浠�</li>
-                <li>鍏ㄥ眬娉ㄥ唽甯哥敤閫氱敤缁勪欢</li>
-                <li>鍏ㄥ眬鎸傝浇瀛楀吀鏍囩缁勪欢</li>
-                <li>ImageUpload缁勪欢鏀寔澶氬浘鐗囦笂浼�</li>
-                <li>FileUpload缁勪欢鏀寔澶氭枃浠朵笂浼�</li>
-                <li>鏂囦欢涓婁紶缁勪欢娣诲姞鏁伴噺闄愬埗灞炴��</li>
-                <li>瀵屾枃鏈紪杈戠粍浠舵坊鍔犵被鍨嬪睘鎬�</li>
-                <li>瀵屾枃鏈粍浠跺伐鍏锋爮閰嶇疆瑙嗛</li>
-                <li>灏佽閫氱敤iframe缁勪欢</li>
-                <li>闄愬埗瓒呯骇绠$悊鍛樹笉鍏佽鎿嶄綔</li>
-                <li>鐢ㄦ埛淇℃伅闀垮害鏍¢獙闄愬埗</li>
-                <li>鍒嗛〉缁勪欢鏂板pagerCount灞炴��</li>
-                <li>娣诲姞bat鑴氭湰鎵ц搴旂敤</li>
-                <li>鍗囩骇oshi鍒版渶鏂扮増鏈瑅5.7.4</li>
-                <li>鍗囩骇element-ui鍒版渶鏂扮増鏈�2.15.2</li>
-                <li>鍗囩骇pagehelper鍒版渶鏂扮増1.3.1</li>
-                <li>鍗囩骇commons.io鍒版渶鏂扮増鏈瑅2.10.0</li>
-                <li>鍗囩骇commons.fileupload鍒版渶鏂扮増鏈瑅1.4</li>
-                <li>鍗囩骇swagger鍒版渶鏂扮増鏈瑅3.0.0</li>
-                <li>淇鍏抽棴confirm鎻愮ず妗嗘帶鍒跺彴鎶ラ敊闂</li>
-                <li>淇瀛樺湪鐨凷QL娉ㄥ叆婕忔礊闂</li>
-                <li>瀹氭椂浠诲姟灞忚斀rmi杩滅▼璋冪敤</li>
-                <li>淇鐢ㄦ埛鎼滅储鍒嗛〉鍙橀噺閿欒</li>
-                <li>淇瀵煎嚭瑙掕壊鏁版嵁鑼冨洿缈昏瘧缂哄皯浠呮湰浜�</li>
-                <li>淇琛ㄥ崟鏋勫缓閫夋嫨涓嬫媺閫夋嫨鎺у埗鍙版姤閿欓棶棰�</li>
-                <li>浼樺寲鍥剧墖宸ュ叿绫昏鍙栨枃浠�</li>
-                <li>鍏朵粬缁嗚妭浼樺寲</li>
-              </ol>
-            </el-collapse-item>
-            <el-collapse-item title="v3.5.0 - 2021-05-25">
-              <ol>
-                <li>鏂板鑿滃崟瀵艰埅鏄剧ず椋庢牸TopNav锛坒alse涓哄乏渚у鑸彍鍗曪紝true涓洪《閮ㄥ鑸彍鍗曪級</li>
-                <li>甯冨眬璁剧疆鏀寔淇濆瓨&閲嶇疆閰嶇疆</li>
-                <li>淇鏍戣〃鏁版嵁鏄剧ず涓嶅叏&鍔犺浇鎱㈤棶棰�</li>
-                <li>鏂板IE娴忚鍣ㄧ増鏈繃浣庢彁绀洪〉闈�</li>
-                <li>鐢ㄦ埛鐧诲綍鍚庤褰曟渶鍚庣櫥褰旾P&鏃堕棿</li>
-                <li>椤甸潰瀵煎嚭鎸夐挳鐐瑰嚮涔嬪悗娣诲姞閬僵</li>
-                <li>瀵屾枃鏈紪杈戝櫒鏀寔鑷畾涔変笂浼犲湴鍧�</li>
-                <li>瀵屾枃鏈紪杈戠粍浠舵柊澧瀝eadOnly灞炴��</li>
-                <li>椤电TagsView鏂板鍏抽棴鍙充晶鍔熻兘</li>
-                <li>鏄鹃殣鍒楃粍浠跺姞杞藉垵濮嬮粯璁ら殣钘忓垪</li>
-                <li>鍏抽棴澶村儚涓婁紶绐楀彛杩樺師榛樿鍥剧墖</li>
-                <li>涓汉淇℃伅娣诲姞鎵嬫満&閭閲嶅楠岃瘉</li>
-                <li>浠g爜鐢熸垚妯℃澘瀵煎嚭鎸夐挳鐐瑰嚮鍚庢坊鍔犻伄缃�</li>
-                <li>浠g爜鐢熸垚妯℃澘鏍戣〃鎿嶄綔鍒楁坊鍔犳柊澧炴寜閽�</li>
-                <li>浠g爜鐢熸垚妯℃澘淇涓诲瓙琛ㄥ瓧娈甸噸鍚嶉棶棰�</li>
-                <li>鍗囩骇fastjson鍒版渶鏂扮増1.2.76</li>
-                <li>鍗囩骇druid鍒版渶鏂扮増鏈瑅1.2.6</li>
-                <li>鍗囩骇mybatis鍒版渶鏂扮増3.5.6 闃绘杩滅▼浠g爜鎵ц婕忔礊</li>
-                <li>鍗囩骇oshi鍒版渶鏂扮増鏈瑅5.6.0</li>
-                <li>velocity鍓旈櫎commons-collections鐗堟湰锛岄槻姝�3.2.1鐗堟湰鐨勫弽搴忓垪鍖栨紡娲�</li>
-                <li>鏁版嵁鐩戞帶椤甸粯璁よ处鎴峰瘑鐮侀槻姝㈣秺鏉冭闂�</li>
-                <li>淇firefox涓嬭〃鍗曟瀯寤烘嫋鎷戒細鏂版墦鍗′竴涓�夐」鍗�</li>
-                <li>淇鍚庣瀵煎叆琛ㄦ潈闄愭爣璇�</li>
-                <li>淇鍓嶇鎿嶄綔鏃ュ織&鐧诲綍鏃ュ織鏉冮檺鏍囪瘑</li>
-                <li>璁剧疆Redis閰嶇疆HashKey搴忓垪鍖�</li>
-                <li>鍒犻櫎鎿嶄綔鏃ュ織璁板綍淇℃伅</li>
-                <li>涓婁紶濯掍綋绫诲瀷娣诲姞瑙嗛鏍煎紡</li>
-                <li>淇璇锋眰褰㈠弬鏈紶鍊艰褰曟棩蹇楀紓甯搁棶棰�</li>
-                <li>浼樺寲xss鏍¢獙json璇锋眰鏉′欢</li>
-                <li>鏍戠骇缁撴瀯鏇存柊瀛愯妭鐐逛娇鐢╮eplaceFirst</li>
-                <li>浼樺寲ExcelUtil绌哄�煎鐞�</li>
-                <li>鏃ュ織璁板綍杩囨护BindingResult瀵硅薄锛岄槻姝㈠紓甯�</li>
-                <li>淇敼涓婚鍚巑ini绫诲瀷鎸夐挳鏃犳晥闂</li>
-                <li>浼樺寲閫氱敤涓嬭浇瀹屾垚鍚庡垹闄よ妭鐐�</li>
-                <li>閫氱敤Controller娣诲姞鍝嶅簲杩斿洖娑堟伅</li>
-                <li>鍏朵粬缁嗚妭浼樺寲</li>
-              </ol>
-            </el-collapse-item>
-            <el-collapse-item title="v3.4.0 - 2021-02-22">
-              <ol>
-                <li>浠g爜鐢熸垚妯℃澘鏀寔涓诲瓙琛�</li>
-                <li>琛ㄦ牸鍙充晶宸ュ叿鏍忕粍浠舵敮鎸佹樉闅愬垪</li>
-                <li>鍥剧墖缁勪欢娣诲姞棰勮&绉婚櫎鍔熻兘</li>
-                <li>Excel娉ㄨВ鏀寔Image鍥剧墖瀵煎嚭</li>
-                <li>鎿嶄綔鎸夐挳缁勮皟鏁翠负鏈寸礌鎸夐挳鏍峰紡</li>
-                <li>浠g爜鐢熸垚鏀寔鏂囦欢涓婁紶缁勪欢</li>
-                <li>浠g爜鐢熸垚鏃ユ湡鎺т欢鍖哄垎鑼冨洿</li>
-                <li>浠g爜鐢熸垚鏁版嵁搴撴枃鏈被鍨嬬敓鎴愯〃鍗曟枃鏈煙</li>
-                <li>鐢ㄦ埛鎵嬫満閭&鑿滃崟缁勪欢淇敼鍏佽绌哄瓧绗︿覆</li>
-                <li>鍗囩骇SpringBoot鍒版渶鏂扮増鏈�2.2.13 鎻愬崌鍚姩閫熷害</li>
-                <li>鍗囩骇druid鍒版渶鏂扮増鏈瑅1.2.4</li>
-                <li>鍗囩骇fastjson鍒版渶鏂扮増1.2.75</li>
-                <li>鍗囩骇element-ui鍒版渶鏂扮増鏈�2.15.0</li>
-                <li>淇IE11娴忚鍣ㄦ姤閿欓棶棰�</li>
-                <li>浼樺寲澶氱骇鑿滃崟涔嬮棿鍒囨崲鏃犳硶缂撳瓨鐨勯棶棰�</li>
-                <li>淇鍥涚骇鑿滃崟鏃犳硶鏄剧ず闂</li>
-                <li>淇渚ц竟鏍忛潤鎬佽矾鐢变涪澶遍棶棰�</li>
-                <li>淇瑙掕壊绠$悊-缂栬緫瑙掕壊-鍔熻兘鏉冮檺鏄剧ず寮傚父</li>
-                <li>閰嶇疆鏂囦欢鏂板redis鏁版嵁搴撶储寮曞睘鎬�</li>
-                <li>鏉冮檺宸ュ叿绫诲鍔燼dmin鍒ゆ柇</li>
-                <li>瑙掕壊闈炶嚜瀹氫箟鏉冮檺鑼冨洿娓呯┖閫夋嫨鍊�</li>
-                <li>淇瀵煎叆鏁版嵁涓鸿礋娴偣鏁版椂涓㈠け绮惧害闂</li>
-                <li>绉婚櫎path-to-regexp姝e垯鍖归厤鎻掍欢</li>
-                <li>淇鐢熸垚鏍戣〃浠g爜寮傚父</li>
-                <li>淇敼ip瀛楁闀垮害闃叉ipv6鍦板潃闀垮害涓嶅</li>
-                <li>闃叉get璇锋眰鍙傛暟鍊间负false鎴�0绛夌壒娈婂�间細瀵艰嚧鏃犳硶姝g‘鐨勪紶鍙�</li>
-                <li>鐧诲綍鍚巔ush娣诲姞catch闃叉鍑虹幇妫�鏌ラ敊璇�</li>
-                <li>鍏朵粬缁嗚妭浼樺寲</li>
-              </ol>
-            </el-collapse-item>
-            <el-collapse-item title="v3.3.0 - 2020-12-14">
-              <ol>
-                <li>鏂板缂撳瓨鐩戞帶鍔熻兘</li>
-                <li>鏀寔涓婚椋庢牸閰嶇疆</li>
-                <li>淇澶氱骇鑿滃崟涔嬮棿鍒囨崲鏃犳硶缂撳瓨鐨勯棶棰�</li>
-                <li>澶氱骇鑿滃崟鑷姩閰嶇疆缁勪欢</li>
-                <li>浠g爜鐢熸垚棰勮鏀寔楂樹寒鏄剧ず</li>
-                <li>鏀寔Get璇锋眰鏄犲皠Params鍙傛暟</li>
-                <li>鍒犻櫎鐢ㄦ埛鍜岃鑹茶В缁戝叧鑱�</li>
-                <li>鍘婚櫎鐢ㄦ埛鎵嬫満閭閮ㄩ棬蹇呭~楠岃瘉</li>
-                <li>Excel鏀寔娉ㄨВalign瀵归綈鏂瑰紡</li>
-                <li>Excel鏀寔瀵煎叆Boolean鍨嬫暟鎹�</li>
-                <li>浼樺寲澶村儚鏍峰紡锛岄紶鏍囩Щ鍏ユ偓鍋滈伄缃�</li>
-                <li>浠g爜鐢熸垚棰勮鎻愪緵婊氬姩鏈哄埗</li>
-                <li>浠g爜鐢熸垚鍒犻櫎澶氫綑鐨勬暟瀛梖loat绫诲瀷</li>
-                <li>淇杞崲瀛楃涓茬殑鐩爣瀛楃闆嗗睘鎬�</li>
-                <li>鍥炴樉鏁版嵁瀛楀吀闃叉绌哄�兼姤閿�</li>
-                <li>鏃ュ織璁板綍澧炲姞杩囨护澶氭枃浠跺満鏅�</li>
-                <li>淇敼缂撳瓨Set鏂规硶鍙兘瀵艰嚧宓屽鐨勯棶棰�</li>
-                <li>绉婚櫎鍓嶇涓�浜涘浣欑殑渚濊禆</li>
-                <li>闃叉瀹夊叏鎵弿YUI鍑虹幇鐨勯闄╂彁绀�</li>
-                <li>淇敼node-sass涓篸art-sass</li>
-                <li>鍗囩骇SpringBoot鍒版渶鏂扮増鏈�2.1.18</li>
-                <li>鍗囩骇poi鍒版渶鏂扮増鏈�4.1.2</li>
-                <li>鍗囩骇oshi鍒版渶鏂扮増鏈瑅5.3.6</li>
-                <li>鍗囩骇bitwalker鍒版渶鏂扮増鏈�1.21</li>
-                <li>鍗囩骇axios鍒版渶鏂扮増鏈�0.21.0</li>
-                <li>鍗囩骇element-ui鍒版渶鏂扮増鏈�2.14.1</li>
-                <li>鍗囩骇vue鍒版渶鏂扮増鏈�2.6.12</li>
-                <li>鍗囩骇vuex鍒版渶鏂扮増鏈�3.6.0</li>
-                <li>鍗囩骇vue-cli鍒扮増鏈�4.5.9</li>
-                <li>鍗囩骇vue-router鍒版渶鏂扮増鏈�3.4.9</li>
-                <li>鍗囩骇vue-cli鍒版渶鏂扮増鏈�4.4.6</li>
-                <li>鍗囩骇vue-cropper鍒版渶鏂扮増鏈�0.5.5</li>
-                <li>鍗囩骇clipboard鍒版渶鏂扮増鏈�2.0.6</li>
-                <li>鍗囩骇core-js鍒版渶鏂扮増鏈�3.8.1</li>
-                <li>鍗囩骇echarts鍒版渶鏂扮増鏈�4.9.0</li>
-                <li>鍗囩骇file-saver鍒版渶鏂扮増鏈�2.0.4</li>
-                <li>鍗囩骇fuse.js鍒版渶鏂扮増鏈�6.4.3</li>
-                <li>鍗囩骇js-beautify鍒版渶鏂扮増鏈�1.13.0</li>
-                <li>鍗囩骇js-cookie鍒版渶鏂扮増鏈�2.2.1</li>
-                <li>鍗囩骇path-to-regexp鍒版渶鏂扮増鏈�6.2.0</li>
-                <li>鍗囩骇quill鍒版渶鏂扮増鏈�1.3.7</li>
-                <li>鍗囩骇screenfull鍒版渶鏂扮増鏈�5.0.2</li>
-                <li>鍗囩骇sortablejs鍒版渶鏂扮増鏈�1.10.2</li>
-                <li>鍗囩骇vuedraggable鍒版渶鏂扮増鏈�2.24.3</li>
-                <li>鍗囩骇chalk鍒版渶鏂扮増鏈�4.1.0</li>
-                <li>鍗囩骇eslint鍒版渶鏂扮増鏈�7.15.0</li>
-                <li>鍗囩骇eslint-plugin-vue鍒版渶鏂扮増鏈�7.2.0</li>
-                <li>鍗囩骇lint-staged鍒版渶鏂扮増鏈�10.5.3</li>
-                <li>鍗囩骇runjs鍒版渶鏂扮増鏈�4.4.2</li>
-                <li>鍗囩骇sass-loader鍒版渶鏂扮増鏈�10.1.0</li>
-                <li>鍗囩骇script-ext-html-webpack-plugin鍒版渶鏂扮増鏈�2.1.5</li>
-                <li>鍗囩骇svg-sprite-loader鍒版渶鏂扮増鏈�5.1.1</li>
-                <li>鍗囩骇vue-template-compiler鍒版渶鏂扮増鏈�2.6.12</li>
-                <li>鍏朵粬缁嗚妭浼樺寲</li>
-              </ol>
-            </el-collapse-item>
-            <el-collapse-item title="v3.2.1 - 2020-11-18">
-              <ol>
-                <li>闃绘浠绘剰鏂囦欢涓嬭浇婕忔礊</li>
-                <li>浠g爜鐢熸垚鏀寔涓婁紶鎺т欢</li>
-                <li>鏂板鍥剧墖涓婁紶缁勪欢</li>
-                <li>璋冩暣榛樿棣栭〉</li>
-                <li>鍗囩骇druid鍒版渶鏂扮増鏈瑅1.2.2</li>
-                <li>mapperLocations閰嶇疆鏀寔鍒嗛殧绗�</li>
-                <li>鏉冮檺淇℃伅璋冩暣</li>
-                <li>璋冩暣sql榛樿鏃堕棿</li>
-                <li>瑙e喅浠g爜鐢熸垚娌℃湁bit绫诲瀷鐨勯棶棰�</li>
-                <li>鍗囩骇pagehelper鍒版渶鏂扮増1.3.0</li>
-              </ol>
-            </el-collapse-item>
-            <el-collapse-item title="v3.2.0 - 2020-10-10">
-              <ol>
-                <li>鍗囩骇springboot鐗堟湰鍒�2.1.17 鎻愬崌瀹夊叏鎬�</li>
-                <li>鍗囩骇oshi鍒版渶鏂扮増鏈瑅5.2.5</li>
-                <li>鍗囩骇druid鍒版渶鏂扮増鏈瑅1.2.1</li>
-                <li>鍗囩骇jjwt鍒扮増鏈�0.9.1</li>
-                <li>鍗囩骇fastjson鍒版渶鏂扮増1.2.74</li>
-                <li>淇敼sass涓簄ode-sass锛岄伩鍏峞l-icon鍥炬爣涔辩爜</li>
-                <li>浠g爜鐢熸垚鏀寔鍚屾鏁版嵁搴�</li>
-                <li>浠g爜鐢熸垚鏀寔瀵屾枃鏈帶浠�</li>
-                <li>浠g爜鐢熸垚椤甸潰鏃朵笉蹇界暐remark灞炴��</li>
-                <li>浠g爜鐢熸垚娣诲姞select蹇呭~閫夐」</li>
-                <li>Excel瀵煎嚭绫诲瀷NUMERIC鏀寔绮惧害娴偣绫诲瀷</li>
-                <li>Excel瀵煎嚭targetAttr浼樺寲鑾峰彇鍊硷紝闃叉get鏂规硶涓嶈鑼�</li>
-                <li>Excel娉ㄨВ鏀寔鑷姩缁熻鏁版嵁鎬诲拰</li>
-                <li>Excel娉ㄨВ鏀寔璁剧疆BigDecimal绮惧害&鑸嶅叆瑙勫垯</li>
-                <li>鑿滃崟&鏁版嵁鏉冮檺鏂板锛堝睍寮�/鎶樺彔 鍏ㄩ��/鍏ㄤ笉閫� 鐖跺瓙鑱斿姩锛�</li>
-                <li>鍏佽鐢ㄦ埛鍒嗛厤鍒伴儴闂ㄧ埗鑺傜偣</li>
-                <li>鑿滃崟鏂板鏄惁缂撳瓨keep-alive</li>
-                <li>琛ㄦ牸鎿嶄綔鍒楅棿璺濊皟鏁�</li>
-                <li>闄愬埗绯荤粺鍐呯疆鍙傛暟涓嶅厑璁稿垹闄�</li>
-                <li>瀵屾枃鏈粍浠朵紭鍖栵紝鏀寔鑷畾涔夐珮搴�&鍥剧墖鍐茬獊闂</li>
-                <li>瀵屾枃鏈伐鍏锋爮鏍峰紡瀵归綈</li>
-                <li>瀵煎叆excel鏁村舰鍊兼牎楠屼紭鍖�</li>
-                <li>淇椤电鍏抽棴鎵�鏈夋椂鍥哄畾鏍囩璺敱涓嶅埛鏂伴棶棰�</li>
-                <li>琛ㄥ崟鏋勫缓甯冨眬鍨嬬粍浠舵柊澧炴寜閽�</li>
-                <li>宸︿晶鑿滃崟鏂囧瓧杩囬暱鏄剧ず鐪佺暐鍙�</li>
-                <li>淇鏍硅妭鐐逛负瀛愰儴闂ㄦ椂锛屾爲鐘剁粨鏋勬樉绀洪棶棰�</li>
-                <li>淇璋冪敤鐩爣瀛楃涓叉渶澶ч暱搴�</li>
-                <li>淇鑿滃崟鎻愮ず淇℃伅閿欒</li>
-                <li>淇瀹氭椂浠诲姟鎵ц涓�娆℃潈闄愭爣璇�</li>
-                <li>淇鏁版嵁搴撳瓧绗︿覆绫诲瀷nvarchar</li>
-                <li>浼樺寲閫掑綊瀛愯妭鐐�</li>
-                <li>浼樺寲鏁版嵁鏉冮檺鍒ゆ柇</li>
-                <li>鍏朵粬缁嗚妭浼樺寲</li>
-              </ol>
-            </el-collapse-item>
-
-            <el-collapse-item title="v3.1.0 - 2020-08-13">
-              <ol>
-                <li>琛ㄦ牸宸ュ叿鏍忓彸渚ф坊鍔犲埛鏂�&鏄鹃殣鏌ヨ缁勪欢</li>
-                <li>鍚庣鏀寔CORS璺ㄥ煙璇锋眰</li>
-                <li>浠g爜鐢熸垚鏀寔閫夋嫨涓婄骇鑿滃崟</li>
-                <li>浠g爜鐢熸垚鏀寔鑷畾涔夎矾寰�</li>
-                <li>浠g爜鐢熸垚鏀寔澶嶉�夋</li>
-                <li>Excel瀵煎嚭瀵煎叆鏀寔dictType瀛楀吀绫诲瀷</li>
-                <li>Excel鏀寔鍒嗗壊瀛楃涓茬粍鍐呭</li>
-                <li>楠岃瘉鐮佺被鍨嬫敮鎸侊紙鏁扮粍璁$畻銆佸瓧绗﹂獙璇侊級</li>
-                <li>鍗囩骇vue-cli鐗堟湰鍒�4.4.4</li>
-                <li>淇敼 node-sass 涓� dart-sass</li>
-                <li>琛ㄥ崟绫诲瀷涓篒nteger/Long璁剧疆鏁村舰榛樿鍊�</li>
-                <li>浠g爜鐢熸垚鍣ㄩ粯璁apper璺緞涓庨粯璁apperScan璺緞涓嶄竴鑷�</li>
-                <li>浼樺寲闃查噸澶嶆彁浜ゆ嫤鎴櫒</li>
-                <li>浼樺寲涓婄骇鑿滃崟涓嶈兘閫夋嫨鑷繁</li>
-                <li>淇瑙掕壊鐨勬潈闄愬垎閰嶅悗锛屾湭瀹炴椂鐢熸晥闂</li>
-                <li>淇鍦ㄧ嚎鐢ㄦ埛鏃ュ織璁板綍绫诲瀷</li>
-                <li>淇瀵屾枃鏈┖鏍煎拰缂╄繘淇濆瓨鍚庝笉鐢熸晥闂</li>
-                <li>淇鍦ㄧ嚎鐢ㄦ埛鍒ゆ柇閫昏緫</li>
-                <li>鍞竴闄愬埗鏉′欢鍙繑鍥炲崟鏉℃暟鎹�</li>
-                <li>娣诲姞鑾峰彇褰撳墠鐨勭幆澧冮厤缃柟娉�</li>
-                <li>瓒呮椂鐧诲綍鍚庨〉闈㈣烦杞埌棣栭〉</li>
-                <li>鍏ㄥ眬寮傚父鐘舵�佹眽鍖栨嫤鎴鐞�</li>
-                <li>HTML杩囨护鍣ㄦ敼涓哄皢html杞箟</li>
-                <li>妫�鏌ュ瓧绗︽敮鎸佸皬鏁扮偣&闄嶇骇鏀规垚寮傚父鎻愰啋</li>
-                <li>鍏朵粬缁嗚妭浼樺寲</li>
-              </ol>
-            </el-collapse-item>
-
-            <el-collapse-item title="v3.0.0 - 2020-07-20">
-              <ol>
-                <li>鍗曞簲鐢ㄨ皟鏁翠负澶氭ā鍧楅」鐩�</li>
-                <li>鍗囩骇element-ui鐗堟湰鍒�2.13.2</li>
-                <li>鍒犻櫎babel锛屾彁楂樼紪璇戦�熷害銆�</li>
-                <li>鏂板鑿滃崟榛樿涓荤被鐩�</li>
-                <li>缂栫爜鏂囦欢鍚嶄慨鏀逛负uuid鏂瑰紡</li>
-                <li>瀹氭椂浠诲姟cron琛ㄨ揪寮忛獙璇�</li>
-                <li>瑙掕壊鏉冮檺淇敼鏃跺凡鏈夋潈闄愭湭鑷姩鍕鹃�夊紓甯镐慨澶�</li>
-                <li>闃叉鍒囨崲鏉冮檺鐢ㄦ埛鍚庣櫥褰曞嚭鐜�404</li>
-                <li>Excel鏀寔sort瀵煎嚭鎺掑簭</li>
-                <li>鍒涘缓鐢ㄦ埛涓嶅厑璁搁�夋嫨瓒呯骇绠$悊鍛樿鑹�</li>
-                <li>淇浠g爜鐢熸垚瀵煎叆琛ㄧ粨鏋勫嚭鐜板紓甯搁〉闈笉鎻愰啋闂</li>
-                <li>淇浠g爜鐢熸垚鐐瑰嚮澶氭琛ㄤ慨鏀规暟鎹笉鍙樺寲鐨勯棶棰�</li>
-                <li>淇澶村儚涓婁紶鎴愬姛浜屾鎵撳紑鏃犳硶鏀瑰彉瑁佸壀妗嗗ぇ灏忓拰浣嶇疆闂</li>
-                <li>淇甯冨眬涓簊mall鑰卪ini鐢ㄦ埛琛ㄥ崟鏄剧ず閿欎綅闂</li>
-                <li>淇鐑儴缃插鑷寸殑寮烘崲寮傚父闂</li>
-                <li>淇敼鐢ㄦ埛绠$悊澶嶉�夋瀹藉害锛岄槻姝㈤儴鍒嗘祻瑙堝櫒鍑虹幇鐪佺暐鍙�</li>
-                <li>IpUtils宸ュ叿锛屾竻闄ss鐗规畩瀛楃锛岄槻姝ff娉ㄥ叆鏀诲嚮</li>
-                <li>鐢熸垚domain 濡傛灉鏄诞鐐瑰瀷 缁熶竴鐢˙igDecimal</li>
-                <li>瀹氭椂浠诲姟璋冩暣label-width锛岄槻姝㈤儴缃插嚭鐜伴敊浣�</li>
-                <li>璋冩暣琛ㄥご鍥哄畾鍒楅粯璁ゆ牱寮�</li>
-                <li>浠g爜鐢熸垚妯℃澘璋冩暣锛屽瓧娈典负String骞朵笖蹇呭~鍒欏姞绌轰覆鏉′欢</li>
-                <li>浠g爜鐢熸垚瀛楀吀Integer/Long浣跨敤parseInt</li>
-                <li>
-                  淇dict_sort涓嶅彲update涓�0鐨勯棶棰�&鏌ヨ杩斿洖澧炲姞dict_sort鍗囧簭鎺掑簭
-                </li>
-                <li>淇宀椾綅瀵煎嚭鏉冮檺娉ㄨВ</li>
-                <li>绂佹鍔犲瘑瀵嗘枃杩斿洖鍓嶇</li>
-                <li>淇浠g爜鐢熸垚椤甸潰涓殑鏌ヨ鏉′欢鍒涘缓鏃堕棿鏈敓鏁堢殑闂</li>
-                <li>淇棣栭〉鎼滅储鑿滃崟澶栭摼鏃犳硶鐐瑰嚮璺宠浆闂</li>
-                <li>淇鑿滃崟绠$悊閫夋嫨鍥炬爣锛宐ackspace鍒犻櫎鏃朵笉杩囨护鏁版嵁</li>
-                <li>鐢ㄦ埛绠$悊閮ㄩ棬鍒嗘敮鑺傜偣涓嶅彲妫�鏌�&鏄剧ず璁℃暟</li>
-                <li>鏁版嵁鑼冨洿杩囨护灞炴�ц皟鏁�</li>
-                <li>鍏朵粬缁嗚妭浼樺寲</li>
-              </ol>
-            </el-collapse-item>
-
-            <el-collapse-item title="v2.3.0 - 2020-06-01">
-              <ol>
-                <li>鍗囩骇fastjson鍒版渶鏂扮増1.2.70 淇楂樺嵄瀹夊叏婕忔礊</li>
-                <li>dev鍚姩榛樿鎵撳紑娴忚鍣�</li>
-                <li>vue-cli浣跨敤榛樿source-map</li>
-                <li>slidebar eslint鎶ラ敊浼樺寲</li>
-                <li>褰搕ags-view婊氬姩鍏抽棴鍙抽敭鑿滃崟</li>
-                <li>瀛楀吀绠$悊娣诲姞缂撳瓨璇诲彇</li>
-                <li>鍙傛暟绠$悊鏀寔缂撳瓨鎿嶄綔</li>
-                <li>鏀寔涓�绾ц彍鍗曪紙鍜屼富椤靛悓绾э級鍦╩ain鍖哄煙鏄剧ず</li>
-                <li>闄愬埗澶栭摼鍦板潃蹇呴』浠ttp(s)寮�澶�</li>
-                <li>tagview & sidebar 涓婚棰滆壊涓巈lement ui(鍏ㄥ眬)鍚屾</li>
-                <li>淇敼鏁版嵁婧愮被鍨嬩紭鍏堢骇锛屽厛鏍规嵁鏂规硶锛屽啀鏍规嵁绫�</li>
-                <li>鏀寔鏄惁闇�瑕佽缃畉oken灞炴�э紝鑷畾涔夎繑鍥炵爜娑堟伅銆�</li>
-                <li>swagger璇锋眰鍓嶇紑鍔犲叆閰嶇疆銆�</li>
-                <li>鐧诲綍鍦扮偣璁剧疆鍐呭杩囬暱鍒欓殣钘忔樉绀�</li>
-                <li>淇瀹氭椂浠诲姟鎵ц涓�娆℃寜閽悗涓嶆彁绀烘秷鎭棶棰�</li>
-                <li>淇敼涓婄骇閮ㄩ棬锛堥�夋嫨椤规帓闄ゆ湰韬拰涓嬬骇锛�</li>
-                <li>閫氱敤http鍙戦�佹柟娉曞鍔犲弬鏁� contentType 缂栫爜绫诲瀷</li>
-                <li>鏇存崲IP鍦板潃鏌ヨ鎺ュ彛</li>
-                <li>淇椤电鍙橀噺undefined</li>
-                <li>娣诲姞鏍¢獙閮ㄩ棬鍖呭惈鏈仠鐢ㄧ殑瀛愰儴闂�</li>
-                <li>淇敼瀹氭椂浠诲姟璇︽儏涓嬫鎵ц鏃堕棿鏃ユ湡鏄剧ず閿欒</li>
-                <li>瑙掕壊绠$悊鏌ヨ璁剧疆榛樿鎺掑簭瀛楁</li>
-                <li>swagger娣诲姞enable鍙傛暟鎺у埗鏄惁鍚敤</li>
-                <li>鍙json绫诲瀷璇锋眰鏋勫缓鍙噸澶嶈鍙杋nputStream鐨剅equest</li>
-                <li>淇敼浠g爜鐢熸垚瀛楀吀瀛楁int绫诲瀷娌℃湁鑷姩閫変腑闂</li>
-                <li>vuex鐢ㄦ埛鍚嶅彇鍊间慨姝�</li>
-                <li>琛ㄦ牸鏍戞ā鏉垮幓鎺夊浣欑殑)</li>
-                <li>浠g爜鐢熸垚搴忓彿淇</li>
-                <li>鍏ㄥ睆鎯呭喌涓嬩笉璋冩暣涓婂杈硅窛</li>
-                <li>浠g爜鐢熸垚Date瀛楁娣诲姞榛樿鏍煎紡</li>
-                <li>鐢ㄦ埛绠$悊瑙掕壊閫夋嫨鏉冮檺鎺у埗</li>
-                <li>淇璺敱鎳掑姞杞芥姤閿欓棶棰�</li>
-                <li>妯℃澘sql.vm娣诲姞鑿滃崟鐘舵��</li>
-                <li>璁剧疆鐢ㄦ埛鍚嶇О涓嶈兘淇敼</li>
-                <li>dialog娣诲姞append-to-body灞炴�э紝闃叉ie閬僵</li>
-                <li>鑿滃崟鍖哄垎鐘舵�佸拰鏄剧ず闅愯棌鍔熻兘</li>
-                <li>鍗囩骇fastjson鍒版渶鏂扮増1.2.68 淇瀹夊叏鍔犲浐</li>
-                <li>淇浠g爜鐢熸垚濡傛灉閫夋嫨瀛楀吀绫诲瀷缂哄け閫楀彿闂</li>
-                <li>鐧诲綍璇锋眰params鏇存崲涓篸ata锛岄槻姝㈡毚闇瞮rl</li>
-                <li>鏃ュ織杩斿洖鏃堕棿鏍煎紡澶勭悊</li>
-                <li>娣诲姞handle鎺у埗鍏佽鎷栧姩鐨勫厓绱�</li>
-                <li>甯冨眬璁剧疆鐐瑰嚮鎵╁ぇ鑼冨洿</li>
-                <li>浠g爜鐢熸垚鍒楀睘鎬ф帓搴忔煡璇�</li>
-                <li>浠g爜鐢熸垚鍒楁敮鎸佹嫋鍔ㄦ帓搴�</li>
-                <li>淇鏃堕棿鏍煎紡涓嶆敮鎸乮os闂</li>
-                <li>琛ㄥ崟鏋勫缓娣诲姞鐖剁骇class锛岄槻姝㈠啿绐�</li>
-                <li>瀹氭椂浠诲姟骞跺彂灞炴�т慨姝�</li>
-                <li>瑙掕壊绂佺敤&鑿滃崟闅愯棌涓嶆煡璇㈡潈闄�</li>
-                <li>鍏朵粬缁嗚妭浼樺寲</li>
-              </ol>
-            </el-collapse-item>
-
-            <el-collapse-item title="v2.2.0 - 2020-03-18">
-              <ol>
-                <li>绯荤粺鐩戞帶鏂板瀹氭椂浠诲姟鍔熻兘</li>
-                <li>娣诲姞涓�涓墦鍖匴eb宸ョ▼bat</li>
-                <li>淇椤电榧犳爣婊氳疆鎸変笅鐨勬椂鍊欙紝鍙互鍏抽棴涓嶅彲鍏抽棴鐨則ag</li>
-                <li>淇鐐瑰嚮閫�鍑虹櫥褰曟湁鏃朵細鏃犳彁绀洪棶棰�</li>
-                <li>淇闃查噸澶嶆彁浜ゆ敞瑙f棤鏁堥棶棰�</li>
-                <li>淇閫氱煡鍏憡鎵归噺鍒犻櫎寮傚父闂</li>
-                <li>娣诲姞鑿滃崟鏃惰矾鐢卞湴鍧�蹇呭~闄愬埗</li>
-                <li>浠g爜鐢熸垚瀛楁鎻忚堪鍙紪杈�</li>
-                <li>淇鐢ㄦ埛淇敼涓汉淇℃伅瀵艰嚧缂撳瓨涓嶈繃鏈熼棶棰�</li>
-                <li>涓汉淇℃伅鍒涘缓鏃堕棿鑾峰彇姝g‘灞炴�у��</li>
-                <li>鎿嶄綔鏃ュ織璇︾粏鏄剧ず姝g‘绫诲瀷</li>
-                <li>瀵煎叆琛ㄥ崟鍑昏鏁版嵁鏃堕�変腑瀵瑰簲鐨勫閫夋</li>
-                <li>鎵归噺鏇挎崲琛ㄥ墠缂�閫昏緫璋冩暣</li>
-                <li>鍥哄畾閲嶅畾鍚戣矾寰勮〃杈惧紡</li>
-                <li>鍗囩骇element-ui鐗堟湰鍒�2.13.0</li>
-                <li>鎿嶄綔鏃ュ織鎺掑簭璋冩暣</li>
-                <li>淇charts鍒囨崲渚ц竟鏍忔垨鑰呯缉鏀剧獥鍙f樉绀篵ug</li>
-                <li>鍏朵粬缁嗚妭浼樺寲</li>
-              </ol>
-            </el-collapse-item>
-
-            <el-collapse-item title="v2.1.0 - 2020-02-24">
-              <ol>
-                <li>鏂板琛ㄥ崟鏋勫缓</li>
-                <li>浠g爜鐢熸垚鏀寔鏍戣〃缁撴瀯</li>
-                <li>鏂板鐢ㄦ埛瀵煎叆</li>
-                <li>淇鍔ㄦ�佸姞杞借矾鐢遍〉闈㈠埛鏂伴棶棰�</li>
-                <li>淇鍦板潃寮�鍏虫棤鏁堥棶棰�</li>
-                <li>姹夊寲閿欒鎻愮ず椤甸潰</li>
-                <li>浠g爜鐢熸垚宸茬煡闂淇敼</li>
-                <li>淇澶氭暟鎹簮涓嬮厤缃叧闂嚭鐜板紓甯稿鐞�</li>
-                <li>娣诲姞HTML杩囨护鍣紝鐢ㄤ簬鍘婚櫎XSS婕忔礊闅愭偅</li>
-                <li>淇涓婁紶澶村儚鎺у埗鍙板嚭鐜板紓甯�</li>
-                <li>淇敼鐢ㄦ埛绠$悊鍒嗛〉涓嶆纭殑闂</li>
-                <li>淇楠岃瘉鐮佽褰曟彁绀洪敊璇�</li>
-                <li>淇request.js缂哄皯Message寮曠敤</li>
-                <li>淇琛ㄦ牸鏃堕棿涓虹┖鍑虹幇鐨勫紓甯�</li>
-                <li>娣诲姞Jackson鏃ユ湡鍙嶅簭鍒楀寲鏃跺尯閰嶇疆</li>
-                <li>璋冩暣鏍规嵁鐢ㄦ埛鏉冮檺鍔犺浇鑿滃崟鏁版嵁鏍戝舰缁撴瀯</li>
-                <li>璋冩暣鎴愬姛鐧诲綍涓嶆仮澶嶆寜閽紝闃叉澶氭鐐瑰嚮</li>
-                <li>淇敼鐢ㄦ埛涓汉璧勬枡鍚屾缂撳瓨淇℃伅</li>
-                <li>淇椤甸潰鍚屾椂鍑虹幇el-upload鍜孍ditor涓嶆樉绀哄鐞�</li>
-                <li>淇鍦ㄨ鑹茬鐞嗛〉淇敼鑿滃崟鏉冮檺鍋跺皵鏈�変腑闂</li>
-                <li>閰嶇疆鏂囦欢鏂板redis瀵嗙爜灞炴��</li>
-                <li>璁剧疆mybatis鍏ㄥ眬鐨勯厤缃枃浠�</li>
-                <li>鍏朵粬缁嗚妭浼樺寲</li>
-              </ol>
-            </el-collapse-item>
-
-            <el-collapse-item title="v2.0.0 - 2019-12-02">
-              <ol>
-                <li>鏂板浠g爜鐢熸垚</li>
-                <li>鏂板@RepeatSubmit娉ㄨВ锛岄槻姝㈤噸澶嶆彁浜�</li>
-                <li>鏂板鑿滃崟涓荤洰褰曟坊鍔�/鍒犻櫎鎿嶄綔</li>
-                <li>鏃ュ織璁板綍杩囨护鐗规畩瀵硅薄锛岄槻姝㈣浆鎹㈠紓甯�</li>
-                <li>淇敼浠g爜鐢熸垚璺敱鑴氭湰閿欒</li>
-                <li>鐢ㄦ埛涓婁紶澶村儚瀹炴椂鍚屾缂撳瓨锛屾棤闇�閲嶆柊鐧诲綍</li>
-                <li>璋冩暣鍒囨崲椤电鍚庝笉閲嶆柊鍔犺浇鏁版嵁</li>
-                <li>娣诲姞jsencrypt瀹炵幇鍙傛暟鐨勫墠绔姞瀵�</li>
-                <li>绯荤粺閫�鍑哄垹闄ょ敤鎴风紦瀛樿褰�</li>
-                <li>鍏朵粬缁嗚妭浼樺寲</li>
-              </ol>
-            </el-collapse-item>
-            <el-collapse-item title="v1.1.0 - 2019-11-11">
-              <ol>
-                <li>鏂板鍦ㄧ嚎鐢ㄦ埛绠$悊</li>
-                <li>鏂板鎸夐挳缁勫姛鑳藉疄鐜帮紙鎵归噺鍒犻櫎銆佸鍑恒�佹竻绌猴級</li>
-                <li>鏂板鏌ヨ鏉′欢閲嶇疆鎸夐挳</li>
-                <li>鏂板Swagger鍏ㄥ眬Token閰嶇疆</li>
-                <li>鏂板鍚庣鍙傛暟鏍¢獙</li>
-                <li>淇瀛楀吀绠$悊椤甸潰鐨勬棩鏈熸煡璇㈠紓甯�</li>
-                <li>淇敼鏃堕棿鍑芥暟鍛藉悕闃叉鍐茬獊</li>
-                <li>鍘婚櫎鑿滃崟涓婄骇鏍¢獙锛岄粯璁や负椤剁骇</li>
-                <li>淇鐢ㄦ埛瀵嗙爜鏃犳硶淇敼闂</li>
-                <li>淇鑿滃崟绫诲瀷涓烘寜閽椂涓嶆樉绀烘潈闄愭爣璇�</li>
-                <li>鍏朵粬缁嗚妭浼樺寲</li>
-              </ol>
-            </el-collapse-item>
-            <el-collapse-item title="v1.0.0 - 2019-10-08">
-              <ol>
-                <li>鑻ヤ緷鍓嶅悗绔垎绂荤郴缁熸寮忓彂甯�</li>
-              </ol>
-            </el-collapse-item>
-          </el-collapse>
-        </el-card>
-      </el-col>
-      <el-col :xs="24" :sm="24" :md="12" :lg="8">
-        <el-card class="update-log">
-          <template v-slot:header>
-            <div class="clearfix">
-              <span>鎹愯禒鏀寔</span>
-            </div>
-          </template>
-          <div class="body">
-            <img
-              src="@/assets/images/pay.png"
-              alt="donate"
-              style="width:100%"
-            />
-            <span style="display: inline-block; height: 30px; line-height: 30px"
-              >浣犲彲浠ヨ浣滆�呭枬鏉挅鍟¤〃绀洪紦鍔�</span
-            >
-          </div>
-        </el-card>
-      </el-col>
-    </el-row>
+  <div class="app-container">
+  
   </div>
 </template>
 
 <script setup name="Index">
-const version = ref('3.8.9')
 
-function goTarget(url) {
-  window.open(url, '__blank')
-}
 </script>
 
 <style scoped lang="scss">
-.home {
-  blockquote {
-    padding: 10px 20px;
-    margin: 0 0 20px;
-    font-size: 17.5px;
-    border-left: 5px solid #eee;
-  }
-  hr {
-    margin-top: 20px;
-    margin-bottom: 20px;
-    border: 0;
-    border-top: 1px solid #eee;
-  }
-  .col-item {
-    margin-bottom: 20px;
-  }
 
-  ul {
-    padding: 0;
-    margin: 0;
-  }
-
-  font-family: "open sans", "Helvetica Neue", Helvetica, Arial, sans-serif;
-  font-size: 13px;
-  color: #676a6c;
-  overflow-x: hidden;
-
-  ul {
-    list-style-type: none;
-  }
-
-  h4 {
-    margin-top: 0px;
-  }
-
-  h2 {
-    margin-top: 10px;
-    font-size: 26px;
-    font-weight: 100;
-  }
-
-  p {
-    margin-top: 10px;
-
-    b {
-      font-weight: 700;
-    }
-  }
-
-  .update-log {
-    ol {
-      display: block;
-      list-style-type: decimal;
-      margin-block-start: 1em;
-      margin-block-end: 1em;
-      margin-inline-start: 0;
-      margin-inline-end: 0;
-      padding-inline-start: 40px;
-    }
-  }
-}
 </style>
 
diff --git a/src/views/inspectionManagement/components/qrCodeDia.vue b/src/views/inspectionManagement/components/qrCodeDia.vue
index 119d9c5..136c18c 100644
--- a/src/views/inspectionManagement/components/qrCodeDia.vue
+++ b/src/views/inspectionManagement/components/qrCodeDia.vue
@@ -5,15 +5,15 @@
       <el-form :model="form" :rules="rules" ref="formRef" label-width="120px">
         <el-row>
           <el-col :span="24">
-            <el-form-item label="璁惧鍚嶇О" prop="name">
-              <el-input v-model="form.name" placeholder="璇疯緭鍏ヨ澶囧悕绉�" maxlength="30" />
+            <el-form-item label="璁惧鍚嶇О" prop="deviceName">
+              <el-input v-model="form.deviceName" placeholder="璇疯緭鍏ヨ澶囧悕绉�" maxlength="30" />
             </el-form-item>
           </el-col>
         </el-row>
         <el-row>
           <el-col :span="24">
-            <el-form-item label="鍦扮偣" prop="taxTrans">
-              <el-input v-model="form.taxTrans" placeholder="璇疯緭鍏ュ湴鐐�" maxlength="30"/>
+            <el-form-item label="鎵�鍦ㄤ綅缃弿杩�" prop="location">
+              <el-input v-model="form.location" placeholder="璇疯緭鍏ユ墍鍦ㄤ綅缃弿杩�" maxlength="30"/>
             </el-form-item>
           </el-col>
         </el-row>
@@ -31,7 +31,8 @@
 <script setup>
 import useUserStore from "@/store/modules/user.js";
 import {reactive, ref} from "vue";
-import printJS from 'print-js'; // 寮曞叆 print.js
+import printJS from 'print-js';
+import {addOrEditQrCode} from "@/api/inspectionUpload/index.js";
 
 const { proxy } = getCurrentInstance()
 const emit = defineEmits()
@@ -40,16 +41,18 @@
 const isShowQrCode = ref(false);
 const operationType = ref('add');
 
-const qrCodeValue = ref('https://example.com');
+const qrCodeValue = ref('');
 const qrCodeSize = ref(100);
 const data = reactive({
   form: {
-    name: '',
-    taxTrans: '',
+    deviceName: '',
+    location: '',
+    qrCodeId: '',
+    id: ''
   },
   rules: {
-    name: [{ required: true, message: '璇疯緭鍏ヨ澶囧悕绉�', trigger: 'blur' }],
-    taxTrans: [{ required: true, message: '璇疯緭鍏ュ湴鐐�', trigger: 'blur' }]
+    deviceName: [{ required: true, message: '璇疯緭鍏ヨ澶囧悕绉�', trigger: 'blur' }],
+    location: [{ required: true, message: '璇疯緭鍏ュ湴鐐�', trigger: 'blur' }]
   }
 })
 const { form, rules } = toRefs(data)
@@ -58,22 +61,40 @@
 // 鎵撳紑寮规
 const openDialog = async (type, row) => {
   dialogVisitable.value = true
+  qrCodeValue.value = ''
+  isShowQrCode.value = false;
+  if (type === 'edit') {
+    form.value.id = row.id
+    form.value.qrCodeId = row.id
+    form.value.deviceName = row.deviceName
+    form.value.location = row.location
+    // 灏嗚〃鍗曟暟鎹浆涓� JSON 瀛楃涓蹭綔涓轰簩缁寸爜鍐呭
+    qrCodeValue.value = JSON.stringify(form.value);
+    isShowQrCode.value = true;
+  }
 }
 // 鎻愪氦鍚堝苟琛ㄥ崟
 const submitForm = () => {
   proxy.$refs["formRef"].validate(valid => {
     if (valid) {
+      addOrEditQrCode(form.value).then((res) => {
+        form.value.qrCodeId = res.data
+      })
       // 灏嗚〃鍗曟暟鎹浆涓� JSON 瀛楃涓蹭綔涓轰簩缁寸爜鍐呭
       qrCodeValue.value = JSON.stringify(form.value);
       isShowQrCode.value = true;
-      
-      // 寤惰繜鎵ц鎵撳嵃锛岄伩鍏� DOM 鏇存柊鍓嶅氨璋冪敤鎵撳嵃
-      setTimeout(() => {
-        printJS({
-          printable: 'qrCodeContainer',//椤甸潰
-          type: "html",//鏂囨。绫诲瀷
-          maxWidth: 360,
-          style: `@page {
+      showQrCode()
+    }
+  })
+}
+const showQrCode = () => {
+  // 寤惰繜鎵ц鎵撳嵃锛岄伩鍏� DOM 鏇存柊鍓嶅氨璋冪敤鎵撳嵃
+  setTimeout(() => {
+    printJS({
+      printable: 'qrCodeContainer',//椤甸潰
+      type: "html",//鏂囨。绫诲瀷
+      maxWidth: 360,
+      style: `@page {
                 margin:0;
                 size: 400px 75px collapse;
                 margin-top:3px;
@@ -89,12 +110,10 @@
                 height: 75px;
                 margin:0;
               }`,
-          targetStyles: ["*"], // 浣跨敤dom鐨勬墍鏈夋牱寮忥紝寰堥噸瑕�
-          font_size: '0.20cm',
-        });
-      }, 300);
-    }
-  })
+      targetStyles: ["*"], // 浣跨敤dom鐨勬墍鏈夋牱寮忥紝寰堥噸瑕�
+      font_size: '0.20cm',
+    });
+  }, 300);
 }
 // 鍏抽棴鍚堝苟琛ㄥ崟
 const cancel = () => {
diff --git a/src/views/inspectionManagement/components/viewQrCodeFiles.vue b/src/views/inspectionManagement/components/viewQrCodeFiles.vue
new file mode 100644
index 0000000..f8e923a
--- /dev/null
+++ b/src/views/inspectionManagement/components/viewQrCodeFiles.vue
@@ -0,0 +1,169 @@
+<template>
+  <div>
+    <el-dialog title="鏌ョ湅闄勪欢"
+               v-model="dialogVisitable" width="800px" @close="cancel">
+      <div class="upload-container">
+        <div class="form-container">
+          <div class="title">宸℃闄勪欢</div>
+          <!-- 鍥剧墖鍒楄〃 -->
+          <div style="display: flex; flex-wrap: wrap;">
+            <img v-for="(item, index) in beforeProductionImgs" :key="index"
+                 @click="showMedia(beforeProductionImgs, index, 'image')"
+                 :src="item" style="max-width: 100px; height: 100px; margin: 5px;" alt="">
+          </div>
+          
+          <!-- 瑙嗛鍒楄〃 -->
+          <div style="display: flex; flex-wrap: wrap;">
+            <div
+                v-for="(videoUrl, index) in beforeProductionVideos"
+                :key="index"
+                @click="showMedia(beforeProductionVideos, index, 'video')"
+                style="position: relative; margin: 10px; cursor: pointer;"
+            >
+              <div style="width: 160px; height: 90px; background-color: #333; display: flex; align-items: center; justify-content: center;">
+                <img src="@/assets/images/video.png" alt="鎾斁" style="width: 30px; height: 30px; opacity: 0.8;" />
+              </div>
+              <div style="text-align: center; font-size: 12px; color: #666;">鐐瑰嚮鎾斁</div>
+            </div>
+          </div>
+        </div>
+      </div>
+    </el-dialog>
+    <!-- 缁熶竴濯掍綋鏌ョ湅鍣� -->
+    <div v-if="isMediaViewerVisible" class="media-viewer-overlay" @click.self="closeMediaViewer">
+      <div class="media-viewer-content" @click.stop>
+        <!-- 鍥剧墖 -->
+        <vue-easy-lightbox
+            v-if="mediaType === 'image'"
+            :visible="isMediaViewerVisible"
+            :imgs="mediaList"
+            :index="currentMediaIndex"
+            @hide="closeMediaViewer"
+        ></vue-easy-lightbox>
+        
+        <!-- 瑙嗛 -->
+        <div v-else-if="mediaType === 'video'" style="position: relative;">
+          <Video
+              :src="mediaList[currentMediaIndex]"
+              autoplay
+              controls
+              style="max-width: 90vw; max-height: 80vh;"
+          />
+        </div>
+      </div>
+    </div>
+  </div>
+</template>
+
+<script setup>
+// 鎺у埗寮圭獥鏄剧ず
+import VueEasyLightbox from "vue-easy-lightbox";
+
+const dialogVisitable = ref(false);
+// 鍥剧墖鏁扮粍
+const beforeProductionImgs = ref([]);
+// 瑙嗛鏁扮粍
+const beforeProductionVideos = ref([]);
+// 濯掍綋鏌ョ湅鍣ㄧ姸鎬�
+const isMediaViewerVisible = ref(false);
+const currentMediaIndex = ref(0);
+const mediaList = ref([]); // 瀛樺偍褰撳墠瑕佹煡鐪嬬殑濯掍綋鍒楄〃锛堝惈鍥剧墖鍜岃棰戝璞★級
+const mediaType = ref('image'); // image | video
+
+// 鎵撳紑寮圭獥骞跺姞杞芥暟鎹�
+const openDialog = async (row) => {
+  const { images: beforeImgs, videos: beforeVids } = processItems(row.storageBlobDTO);
+  
+  beforeProductionImgs.value = beforeImgs;
+  beforeProductionVideos.value = beforeVids;
+  dialogVisitable.value = true;
+};
+// 鏄剧ず濯掍綋锛堝浘鐗� or 瑙嗛锛�
+function showMedia(mediaArray, index, type) {
+  mediaList.value = mediaArray;
+  currentMediaIndex.value = index;
+  mediaType.value = type;
+  isMediaViewerVisible.value = true;
+}
+// 鍏抽棴濯掍綋鏌ョ湅鍣�
+function closeMediaViewer() {
+  isMediaViewerVisible.value = false;
+  mediaList.value = [];
+  mediaType.value = 'image';
+}
+// 琛ㄥ崟鍏抽棴鏂规硶
+const cancel = () => {
+  dialogVisitable.value = false;
+};
+// 澶勭悊姣忎竴绫绘暟鎹細鍒嗙鍥剧墖鍜岃棰�
+function processItems(items) {
+  const images = [];
+  const videos = [];
+  items.forEach(item => {
+    if (item.contentType?.startsWith('image/')) {
+      images.push(item.url);
+    } else if (item.contentType?.startsWith('video/')) {
+      videos.push(item.url);
+    }
+  });
+  return { images, videos };
+}
+defineExpose({ openDialog });
+</script>
+
+<style scoped lang="scss">
+.upload-container {
+  display: flex;
+  flex-direction: column;
+  align-items: center;
+  padding: 20px;
+  border: 1px solid #dcdfe6;
+  box-sizing: border-box;
+  
+  .form-container {
+    flex: 1;
+    width: 100%;
+    margin-bottom: 20px;
+  }
+}
+
+.title {
+  font-size: 14px;
+  color: #165dff;
+  line-height: 20px;
+  font-weight: 600;
+  padding-left: 10px;
+  position: relative;
+  margin: 6px 0;
+  
+  &::before {
+    content: "";
+    position: absolute;
+    left: 0;
+    top: 3px;
+    width: 4px;
+    height: 14px;
+    background-color: #165dff;
+  }
+}
+
+.media-viewer-overlay {
+  position: fixed;
+  top: 0;
+  left: 0;
+  right: 0;
+  bottom: 0;
+  background-color: rgba(0, 0, 0, 0.8);
+  z-index: 9999;
+  display: flex;
+  align-items: center;
+  justify-content: center;
+}
+
+.media-viewer-content {
+  position: relative;
+  max-width: 90vw;
+  max-height: 90vh;
+  overflow: hidden;
+}
+</style>
\ No newline at end of file
diff --git a/src/views/inspectionManagement/index.vue b/src/views/inspectionManagement/index.vue
index 64bc036..54be49f 100644
--- a/src/views/inspectionManagement/index.vue
+++ b/src/views/inspectionManagement/index.vue
@@ -37,7 +37,7 @@
         />
       </el-tabs>
       <!-- 鎿嶄綔鎸夐挳鍖� -->
-      <el-space>
+      <el-space v-if="tabName !== 'qrCodeScanRecord'">
         <el-button type="primary" :icon="Plus" @click="handleAdd">鏂板缓</el-button>
         <el-button type="danger" :icon="Delete" @click="handleDelete">鍒犻櫎</el-button>
         <el-button type="info" plain :icon="Download">瀵煎嚭</el-button>
@@ -46,16 +46,37 @@
         <div>
           <ETable :loading="tableLoading"
                   :table-data="tableData"
-                  :columns="columns"
+                  :columns="tableColumns"
                   @selection-change="handleSelectionChange"
                   :show-selection="true"
                   :border="true"
                   :maxHeight="480"
                   operationsWidth="130"
-                  :operations="['edit', 'viewFile']"
+                  :operations="operationsArr"
                   @edit="handleAdd"
                   @viewFile="viewFile"
+                  v-if="tabName !== 'qrCodeScanRecord'"
           ></ETable>
+          <el-table ref="table" :data="tableData" height="480" v-loading="tableLoading" v-else>
+            <el-table-column label="搴忓彿" type="index" width="60" align="center" />
+            <el-table-column prop="deviceName" label="璁惧鍚嶇О" :show-overflow-tooltip="true">
+              <template #default="scope">
+                {{scope.row.qrCode.deviceName}}
+              </template>
+            </el-table-column>
+            <el-table-column prop="location" label="鎵�鍦ㄤ綅缃弿杩�" :show-overflow-tooltip="true">
+              <template #default="scope">
+                {{scope.row.qrCode.location}}
+              </template>
+            </el-table-column>
+            <el-table-column prop="scanner" label="宸℃浜�"></el-table-column>
+            <el-table-column prop="scanTime" label="宸℃鏃堕棿"></el-table-column>
+            <el-table-column fixed="right" label="鎿嶄綔">
+              <template #default="scope">
+                <el-button link type="primary" @click="handleAdd(scope.row)">鏌ョ湅闄勪欢</el-button>
+              </template>
+            </el-table-column>
+          </el-table>
         </div>
         <pagination
             v-if="total>0"
@@ -70,6 +91,7 @@
     <form-dia ref="formDia" @closeDia="handleQuery"></form-dia>
     <qr-code-dia ref="qrCodeDia" @closeDia="handleQuery"></qr-code-dia>
     <view-files ref="viewFiles"></view-files>
+    <view-qr-code-files ref="viewQrCodeFiles"></view-qr-code-files>
   </div>
 </template>
 
@@ -83,10 +105,13 @@
 import QrCodeDia from "@/views/inspectionManagement/components/qrCodeDia.vue";
 import {delInspectionTask, inspectionTaskList} from "@/api/inspectionManagement/index.js";
 import ViewFiles from "@/views/inspectionManagement/components/viewFiles.vue";
+import {delQrCode, qrCodeList, qrCodeScanRecordList} from "@/api/inspectionUpload/index.js";
+import ViewQrCodeFiles from "@/views/inspectionManagement/components/viewQrCodeFiles.vue";
 
 const formDia = ref()
 const qrCodeDia = ref()
 const viewFiles = ref()
+const viewQrCodeFiles = ref()
 // 鏌ヨ鍙傛暟
 const queryParams = reactive({
   supplierName: "",
@@ -99,10 +124,13 @@
 const tabs = reactive([
   { name: "task", label: "浠诲姟涓嬪彂" },
   { name: "qrCode", label: "浜岀淮鐮佺鐞�" },
+  { name: "qrCodeScanRecord", label: "鐜板満宸℃璁板綍" },
 ]);
 // 琛ㄦ牸
 const selectedRows = ref([]);
 const tableData = ref([]);
+const operationsArr = ref([]);
+const tableColumns = ref([]);
 const tableLoading = ref(false);
 const total = ref(0);
 const pageNum = ref(1);
@@ -115,6 +143,12 @@
   { prop: "registrant", label: "鐧昏浜�", minWidth: 100 },
   { prop: "createTime", label: "鐧昏鏃ユ湡", minWidth: 100 },
 ]);
+const columns1 = ref([
+  { prop: "deviceName", label: "璁惧鍚嶇О", minWidth: 160 },
+  { prop: "location", label: "鎵�鍦ㄤ綅缃弿杩�", minWidth: 120 },
+  { prop: "createBy", label: "鍒涘缓鑰�", minWidth: 100 },
+  { prop: "createTime", label: "鍒涘缓鏃堕棿", minWidth: 100 },
+]);
 
 onMounted(() => {
   handleTabClick({ props: { name: "task" } });
@@ -123,6 +157,13 @@
 const handleTabClick = (tab) => {
   tabName.value = tab.props.name;
   tableData.value = [];
+  if (tabName.value === "task") {
+    tableColumns.value = columns.value;
+    operationsArr.value = ['edit', 'viewFile']
+  } else {
+    tableColumns.value = columns1.value;
+    operationsArr.value = ['edit']
+  }
   getList();
 };
 // 鐐瑰嚮鏌ヨ
@@ -133,12 +174,26 @@
 }
 const getList = () => {
   tableLoading.value = true;
-  inspectionTaskList({...queryParams, size: pageSize.value, current: pageNum.value}).then(res => {
-    console.log(res)
-    tableLoading.value = false;
-    tableData.value = res.data.records;
-    total.value = res.data.total;
-  })
+  if (tabName.value === "task") {
+    inspectionTaskList({...queryParams, size: pageSize.value, current: pageNum.value}).then(res => {
+      tableLoading.value = false;
+      tableData.value = res.data.records;
+      total.value = res.data.total;
+    })
+  } else if (tabName.value === "qrCode") {
+    qrCodeList({...queryParams, size: pageSize.value, current: pageNum.value}).then(res => {
+      tableLoading.value = false;
+      tableData.value = res.data.records;
+      total.value = res.data.total;
+    })
+  } else {
+    qrCodeScanRecordList({size: pageSize.value, current: pageNum.value}).then(res => {
+      tableLoading.value = false;
+      tableData.value = res.data.records;
+      total.value = res.data.total;
+    })
+  }
+  
 };
 // 閲嶇疆鏌ヨ
 const resetQuery = () => {
@@ -156,8 +211,10 @@
   nextTick(() => {
     if (tabName.value === "task") {
       formDia.value?.openDialog(type, row)
-    } else {
+    } else if (tabName.value === "qrCode") {
       qrCodeDia.value?.openDialog(type, row)
+    } else {
+      viewQrCodeFiles.value?.openDialog(row)
     }
   })
 };
@@ -175,7 +232,7 @@
   }
   const deleteIds = selectedRows.value.map(item => item.id);
   proxy.$modal.confirm('鏄惁纭鍒犻櫎鎵�閫夋暟鎹」锛�').then(function() {
-    return delInspectionTask(deleteIds)
+    return delQrCode(deleteIds)
   }).then(() => {
     handleQuery()
     proxy.$modal.msgSuccess("鍒犻櫎鎴愬姛")
diff --git a/src/views/inspectionUpload/components/qrCodeFormDia.vue b/src/views/inspectionUpload/components/qrCodeFormDia.vue
new file mode 100644
index 0000000..207294d
--- /dev/null
+++ b/src/views/inspectionUpload/components/qrCodeFormDia.vue
@@ -0,0 +1,175 @@
+<template>
+  <div>
+    <el-dialog
+        title="宸℃"
+        v-model="dialogVisitable"
+        width="400px"
+        @close="cancel"
+    >
+      <el-form :model="form" :rules="rules" ref="formRef" label-width="120px">
+        <el-row>
+          <el-col :span="24">
+            <el-form-item label="璁惧鍚嶇О" prop="deviceName">
+              <el-input v-model="form.deviceName" placeholder="璇疯緭鍏ヨ澶囧悕绉�" maxlength="30" disabled/>
+            </el-form-item>
+          </el-col>
+        </el-row>
+        <el-row>
+          <el-col :span="24">
+            <el-form-item label="鍦扮偣" prop="location">
+              <el-input v-model="form.location" placeholder="璇疯緭鍏ュ湴鐐�" maxlength="30" disabled/>
+            </el-form-item>
+          </el-col>
+        </el-row>
+        <el-row>
+          <el-col :span="24">
+            <el-form-item label="闄勪欢" prop="taxTrans">
+              <fileUpload
+                  :statusType="0"
+                  ref="beforeProductionRef"
+                  :fileSize="1024"
+                  :fileType="['mp3', 'mp4', 'avi', 'mov', 'mkv']"
+                  :limit="10"
+                  :drag="false"
+                  v-model:modelValue="form.storageBlobDTO"
+              >
+              </fileUpload>
+            </el-form-item>
+          </el-col>
+        </el-row>
+        <el-row>
+          <el-col :span="24">
+            <el-form-item label="宸℃浜�" prop="scannerName">
+              <el-input v-model="form.scannerName" disabled placeholder="璇疯緭鍏�" />
+            </el-form-item>
+          </el-col>
+        </el-row>
+        <el-row>
+          <el-col :span="24">
+            <el-form-item label="宸℃鏃堕棿" prop="scanTime">
+              <el-input v-model="form.scanTime" disabled placeholder="璇疯緭鍏�" />
+            </el-form-item>
+          </el-col>
+        </el-row>
+      </el-form>
+      <template #footer>
+        <div class="dialog-footer">
+          <el-button @click="cancel">鍙栨秷</el-button>
+          <el-button type="primary" @click="submitForm">淇濆瓨</el-button>
+        </div>
+      </template>
+    </el-dialog>
+  </div>
+</template>
+
+<script setup>
+import { reactive, ref } from "vue";
+import {ElMessage} from "element-plus";
+import fileUpload from "@/components/FileUpload/index.vue";
+import {uploadInspectionTask} from "@/api/inspectionManagement/index.js";
+import useUserStore from "@/store/modules/user.js";
+import {addOrEditQrCodeRecord} from "@/api/inspectionUpload/index.js";
+
+const emit = defineEmits(['closeDia']);
+const dialogVisitable = ref(false);
+const { proxy } = getCurrentInstance()
+const storageBlobDTO = ref([]);
+const beforeProductionRef = ref(null);
+const userStore = useUserStore();
+const userInfo = ref({});
+
+function getCurrentDateTime() {
+  const now = new Date();
+  const year = now.getFullYear();
+  const month = String(now.getMonth() + 1).padStart(2, '0');
+  const day = String(now.getDate()).padStart(2, '0');
+  const hours = String(now.getHours()).padStart(2, '0');
+  const minutes = String(now.getMinutes()).padStart(2, '0');
+  const seconds = String(now.getSeconds()).padStart(2, '0');
+  return `${year}-${month}-${day} ${hours}:${minutes}:${seconds}`;
+}
+const data = reactive({
+  form: {
+    deviceName: '',
+    location: '',
+    scannerName: '',
+    scannerId: '',
+    scanTime: '',
+    qrCode: {
+      id: ''
+    }
+  },
+  rules: {
+    deviceName: [{ required: true, message: '璇疯緭鍏ヨ澶囧悕绉�', trigger: 'blur' }],
+    location: [{ required: true, message: '璇疯緭鍏ュ湴鐐�', trigger: 'blur' }]
+  }
+})
+const { form, rules } = toRefs(data)
+
+// 璋冪敤鍑芥暟
+const currentDateTime = getCurrentDateTime();
+
+// 鑾峰彇鐢ㄦ埛淇℃伅
+onMounted(async () => {
+  let res = await userStore.getInfo();
+  userInfo.value = res.user;
+  form.value.scannerName = userInfo.value.nickName
+  form.value.scannerId = userInfo.value.userId
+  form.value.scanTime = currentDateTime
+});
+
+// 鎵撳紑寮规
+const openDialog = async (row) => {
+  dialogVisitable.value = true;
+  form.value.deviceName = row.deviceName
+  form.value.location = row.location
+  form.value.qrCodeId = row.qrCodeId
+};
+const submitForm = async () => {
+  form.value.qrCode.id = form.value.qrCodeId
+  await addOrEditQrCodeRecord({...form.value});
+  cancel()
+  ElMessage.success("鎻愪氦鎴愬姛");
+};
+// 鍏抽棴鍚堝苟琛ㄥ崟
+const cancel = () => {
+  proxy.resetForm("formRef");
+  dialogVisitable.value = false;
+  emit("closeDia");
+};
+defineExpose({ openDialog });
+</script>
+
+<style scoped lang="scss">
+.upload-container {
+  display: flex;
+  flex-direction: column;
+  align-items: center;
+  padding: 20px;
+  border: 1px solid #dcdfe6;
+  box-sizing: border-box;
+  .form-container {
+    flex: 1;
+    width: 100%;
+    margin-bottom: 20px;
+  }
+}
+.title {
+  font-size: 14px;
+  color: #165dff;
+  line-height: 20px;
+  font-weight: 600;
+  padding-left: 10px;
+  position: relative;
+  margin: 6px 0;
+}
+.title::before {
+  content: "";
+  position: absolute;
+  left: 0;
+  top: 3px; /* 璋冩暣鍨傜洿浣嶇疆 */
+  width: 4px; /* 灏忔暟鏉″搴� */
+  height: 14px; /* 灏忔暟鏉¢珮搴� */
+  background-color: #165dff; /* 钃濊壊 */
+}
+</style>
diff --git a/src/views/inspectionUpload/index.vue b/src/views/inspectionUpload/index.vue
index 559c05e..560fc01 100644
--- a/src/views/inspectionUpload/index.vue
+++ b/src/views/inspectionUpload/index.vue
@@ -15,8 +15,46 @@
         />
       </el-tabs>
       <div>
+        <!-- 鎵爜妯″潡 -->
+        <div v-if="activeTab === 'qrCode'" class="scan-section">
+          <div class="scan-controls">
+            <el-button
+                type="primary"
+                :loading="scanLoading"
+                @click="toggleScan"
+            >
+              {{ scanButtonText }}
+            </el-button>
+          </div>
+          
+          <!-- 鎵爜瑙嗛瀹瑰櫒 -->
+          <div v-show="isScanning" class="qr-video-container">
+            <video
+                ref="qrVideo"
+                class="qr-video"
+                playsinline
+                webkit-playsinline
+            ></video>
+            <div class="scan-overlay"></div>
+          </div>
+          
+          <!-- 鐘舵�佹彁绀� -->
+          <div class="status-info">
+            <el-alert
+                v-if="cameraError"
+                :title="cameraError"
+                type="error"
+                show-icon
+                closable
+            />
+            <div v-if="isScanning" class="scanning-text">
+              <el-icon :color="statusColor"><Loading /></el-icon>
+              姝e湪鎵弿浜岀淮鐮�...
+            </div>
+          </div>
+        </div>
         <div>
-          <el-table ref="table" :data="tableData" height="480" v-loading="tableLoading">
+          <el-table ref="table" :data="tableData" height="480" v-loading="tableLoading" v-if="activeTab !== 'qrCode'">
             <el-table-column label="搴忓彿" type="index" width="60" align="center" />
             <el-table-column prop="taskName" label="宸℃浠诲姟鍚嶇О" :show-overflow-tooltip="true"></el-table-column>
             <el-table-column prop="port" label="鍦扮偣" :show-overflow-tooltip="true"></el-table-column>
@@ -25,6 +63,26 @@
             <el-table-column fixed="right" label="鎿嶄綔">
               <template #default="scope">
                 <el-button link type="primary" @click="handleAdd(scope.row)">涓婁紶</el-button>
+              </template>
+            </el-table-column>
+          </el-table>
+          <el-table ref="table" :data="tableData" height="480" v-loading="tableLoading" v-if="activeTab === 'qrCode'">
+            <el-table-column label="搴忓彿" type="index" width="60" align="center" />
+            <el-table-column prop="deviceName" label="璁惧鍚嶇О" :show-overflow-tooltip="true">
+              <template #default="scope">
+                {{scope.row.qrCode.deviceName}}
+              </template>
+            </el-table-column>
+            <el-table-column prop="location" label="鎵�鍦ㄤ綅缃弿杩�" :show-overflow-tooltip="true">
+              <template #default="scope">
+                {{scope.row.qrCode.location}}
+              </template>
+            </el-table-column>
+            <el-table-column prop="scanner" label="宸℃浜�"></el-table-column>
+            <el-table-column prop="scanTime" label="宸℃鏃堕棿"></el-table-column>
+            <el-table-column fixed="right" label="鎿嶄綔">
+              <template #default="scope">
+                <el-button link type="primary" @click="viewFile(scope.row)">鏌ョ湅闄勪欢</el-button>
               </template>
             </el-table-column>
           </el-table>
@@ -40,22 +98,31 @@
       </div>
     </el-card>
     <form-dia ref="formDia" @closeDia="handleQuery"></form-dia>
+    <qr-code-form-dia ref="qrCodeFormDia" @closeDia="handleQuery"></qr-code-form-dia>
+    <view-qr-code-files ref="viewQrCodeFiles"></view-qr-code-files>
   </div>
 </template>
 
 <script setup>
 import Pagination from "@/components/Pagination/index.vue";
-import {inspectionTaskList} from "@/api/inspectionManagement/index.js";
 import {onMounted, ref} from "vue";
 import FormDia from "@/views/inspectionUpload/components/formDia.vue";
+import {ElMessage} from "element-plus";
+import QrScanner from 'qr-scanner'
+import QrCodeFormDia from "@/views/inspectionUpload/components/qrCodeFormDia.vue";
+import {qrCodeList, qrCodeScanRecordList} from "@/api/inspectionUpload/index.js";
+import {inspectionTaskList} from "@/api/inspectionManagement/index.js";
+import ViewQrCodeFiles from "@/views/inspectionManagement/components/viewQrCodeFiles.vue";
 const formDia = ref()
+const qrCodeFormDia = ref()
+const viewQrCodeFiles = ref()
 // 褰撳墠鏍囩
 const activeTab = ref("task");
 const tabName = ref("task");
 // 鏍囩椤垫暟鎹�
 const tabs = reactive([
-  { name: "task", label: "浠诲姟涓嬪彂" },
-  { name: "qrCode", label: "浜岀淮鐮佺鐞�" },
+  { name: "task", label: "鐢熶骇宸℃" },
+  { name: "qrCode", label: "鐜板満宸℃" },
 ]);
 // 琛ㄦ牸
 const tableData = ref([]);
@@ -63,10 +130,32 @@
 const total = ref(0);
 const pageNum = ref(1);
 const pageSize = ref(10);
+// 鎵爜鐩稿叧鐘舵��
+const qrVideo = ref(null)
+const isScanning = ref(false)
+const scanLoading = ref(false)
+const cameraError = ref(null)
+const scanner = ref(null)
+const hasInit = ref(false)
 
-onMounted(() => {
+const statusColor = computed(() => {
+  return isScanning.value ? '#67C23A' : '#F56C6C'
+})
+// 鐢熷懡鍛ㄦ湡绠$悊浼樺寲
+onMounted(async () => {
   handleTabClick({ props: { name: "task" } });
-});
+  if (!import.meta.env.SSR && QrScanner) { // [!code focus]
+    await initScanner()
+  }
+})
+
+onBeforeUnmount(async () => {
+  if (scanner.value) {
+    await scanner.value.destroy()
+    scanner.value = null
+  }
+  hasInit.value = false
+})
 // 鏍囩椤电偣鍑�
 const handleTabClick = (tab) => {
   tabName.value = tab.props.name;
@@ -81,11 +170,19 @@
 }
 const getList = () => {
   tableLoading.value = true;
-  inspectionTaskList({size: pageSize.value, current: pageNum.value}).then(res => {
-    tableLoading.value = false;
-    tableData.value = res.data.records;
-    total.value = res.data.total;
-  })
+  if (tabName.value === "task") {
+    inspectionTaskList({size: pageSize.value, current: pageNum.value}).then(res => {
+      tableLoading.value = false;
+      tableData.value = res.data.records;
+      total.value = res.data.total;
+    })
+  } else {
+    qrCodeScanRecordList({size: pageSize.value, current: pageNum.value}).then(res => {
+      tableLoading.value = false;
+      tableData.value = res.data.records;
+      total.value = res.data.total;
+    })
+  }
 };
 // 涓婁紶
 const handleAdd = (row) => {
@@ -93,10 +190,181 @@
     formDia.value?.openDialog(row)
   })
 }
+// 鏌ョ湅闄勪欢
+const viewFile = (row) => {
+  nextTick(() => {
+    viewQrCodeFiles.value?.openDialog(row)
+  })
+}
+// 鎵爜鎸夐挳鏂囨湰
+const scanButtonText = computed(() => {
+  if (scanLoading.value) return '姝e湪鍒濆鍖�...'
+  return isScanning.value ? '鍋滄鎵爜' : '寮�濮嬫壂鐮�'
+})
 
+// 澧炲己鍨嬪垵濮嬪寲
+const initScanner = async () => {
+  try {
+    await nextTick() // 纭繚DOM鏇存柊
+    // 鏂板澶氶噸绌哄�兼牎楠�
+    if (!qrVideo.value || !QrScanner) {
+      throw new Error('渚濊禆鏈纭垵濮嬪寲')
+    }
+    // 澧炲姞鎽勫儚澶存潈闄愰妫�鏌�
+    const hasCamera = await QrScanner.hasCamera()
+    if (!hasCamera) {
+      throw new Error('鏈娴嬪埌鍙敤鎽勫儚澶�')
+    }
+    // 鏄惧紡閿�姣佹棫瀹炰緥
+    if (scanner.value) {
+      await scanner.value.destroy()
+    }
+    // 鍒涘缓鏂板疄渚�
+    scanner.value = new QrScanner(
+        qrVideo.value,
+        result => {
+          handleScanSuccess(result)
+          // stopScan()
+        },
+        {
+          preferredCamera: 'environment',
+          maxScansPerSecond: 5,
+          returnDetailedScanResult: true
+        }
+    )
+    // 鏂板纭欢鍔犻�熸娴�
+    if (!scanner.value._qrWorker) {
+      throw new Error('纭欢鍔犻�熶笉鍙敤')
+    }
+    hasInit.value = true
+  } catch (e) {
+    // handleInitError(e)
+  }
+}
+// 鎵弿鎴愬姛澶勭悊
+const handleScanSuccess = async (result) => {
+  try {
+    // 娣诲姞鏁版嵁鏍¢獙
+    ElMessage.success('璇嗗埆鎴愬姛')
+    callBackendAPI(JSON.parse(result.data))
+    await stopScan()
+  } catch (error) {
+    ElMessage.warning(error.message)
+    await startScan() // 鏁版嵁鏃犳晥鏃剁户缁壂鎻�
+  }
+}
+const callBackendAPI = (result) => {
+  nextTick(() => {
+    qrCodeFormDia.value?.openDialog(result)
+  })
+}
+// 鍒囨崲鎵爜鐘舵��
+const toggleScan = async () => {
+  if (isScanning.value) {
+    await stopScan()
+  } else {
+    await startScan()
+  }
+}
+
+// 澧炲己鍚姩鏂规硶
+const startScan = async () => {
+  if (!scanner.value || !hasInit.value) { // 鏂板鐘舵�佹鏌�
+    await initScanner()
+  }
+  
+  try {
+    await scanner.value.start()
+    isScanning.value = true
+  } catch (e) {
+    ElMessage.error(`鍚姩澶辫触: ${e.message}`)
+    hasInit.value = false
+  }
+}
+
+// 鍋滄鎵爜
+const stopScan = async () => {
+  try {
+    await scanner.value.stop()
+    isScanning.value = false
+  } catch (err) {
+    console.error('鍋滄鎽勫儚澶村け璐�:', err)
+  }
+}
+
+
+// 閿欒澶勭悊澧炲己
+const handleInitError = (error) => {
+  console.error('鍒濆鍖栧け璐�:', error)
+  const msg = {
+    'NotAllowedError': '璇峰厑璁告憚鍍忓ご鏉冮檺',
+    'NotFoundError': '鏈壘鍒版憚鍍忓ご璁惧',
+    'NotSupportedError': '娴忚鍣ㄤ笉鏀寔鎵爜鍔熻兘'
+  }[error.name] || error.message
+  
+  ElMessage.error(`鍒濆鍖栧け璐�: ${msg}`)
+}
 
 </script>
 
 <style scoped>
+.qr-video-container {
+  position: relative;
+  width: 100%;
+  max-width: 500px;
+  margin: 0 auto;
+  background: #000;
+  border-radius: 8px;
+  overflow: hidden;
+}
 
+.qr-video {
+  width: 100%;
+  height: auto;
+  object-fit: cover;
+}
+
+.scan-overlay {
+  position: absolute;
+  top: 50%;
+  left: 50%;
+  transform: translate(-50%, -50%);
+  width: 70%;
+  height: 70%;
+  border: 3px solid #409eff;
+  border-radius: 8px;
+  box-shadow: 0 0 20px rgba(64, 158, 255, 0.3);
+  animation: pulse 2s infinite;
+}
+
+@keyframes pulse {
+  0% { opacity: 0.8; }
+  50% { opacity: 0.4; }
+  100% { opacity: 0.8; }
+}
+
+.status-info {
+  margin-top: 16px;
+  text-align: center;
+}
+
+.scanning-text {
+  color: #409eff;
+  margin-top: 8px;
+}
+
+.table-section {
+  margin-top: 24px;
+}
+
+/* 绉诲姩绔紭鍖� */
+@media (max-width: 768px) {
+  .qr-video-container {
+    height: 60vh;
+  }
+  
+  .el-table {
+    font-size: 12px;
+  }
+}
 </style>
\ No newline at end of file

--
Gitblit v1.9.3